gsl/0000755000175000017500000000000014152017002007705 5ustar eddeddgsl/spblas/0000755000175000017500000000000014057135461011207 5ustar eddeddgsl/spblas/Makefile.in0000664000175000017500000010602514057135461013262 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = spblas ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslspblas_la_LIBADD = am_libgslspblas_la_OBJECTS = spdgemm.lo spdgemv.lo libgslspblas_la_OBJECTS = $(am_libgslspblas_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslspblas.la ../spmatrix/libgslspmatrix.la \ ../bst/libgslbst.la ../test/libgsltest.la \ ../blas/libgslblas.la ../cblas/libgslcblas.la \ ../matrix/libgslmatrix.la ../vector/libgslvector.la \ ../block/libgslblock.la ../sys/libgslsys.la \ ../err/libgslerr.la ../utils/libutils.la ../rng/libgslrng.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/spdgemm.Plo ./$(DEPDIR)/spdgemv.Plo \ ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslspblas_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslspblas_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslspblas.la pkginclude_HEADERS = gsl_spblas.h libgslspblas_la_SOURCES = spdgemm.c spdgemv.c AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslspblas.la ../spmatrix/libgslspmatrix.la ../bst/libgslbst.la ../test/libgsltest.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la ../rng/libgslrng.la test_SOURCES = test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu spblas/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu spblas/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslspblas.la: $(libgslspblas_la_OBJECTS) $(libgslspblas_la_DEPENDENCIES) $(EXTRA_libgslspblas_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslspblas_la_OBJECTS) $(libgslspblas_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spdgemm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spdgemv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/spdgemm.Plo -rm -f ./$(DEPDIR)/spdgemv.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/spdgemm.Plo -rm -f ./$(DEPDIR)/spdgemv.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/spblas/Makefile.am0000644000175000017500000000102213536675317013250 0ustar eddeddnoinst_LTLIBRARIES = libgslspblas.la check_PROGRAMS = test pkginclude_HEADERS = gsl_spblas.h libgslspblas_la_SOURCES = spdgemm.c spdgemv.c AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslspblas.la ../spmatrix/libgslspmatrix.la ../bst/libgslbst.la ../test/libgsltest.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la ../rng/libgslrng.la test_SOURCES = test.c gsl/spblas/spdgemm.c0000644000175000017500000001230013536675317013015 0ustar eddedd/* spdgemm.c * * Copyright (C) 2014 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include /* gsl_spblas_dgemm() Multiply two sparse matrices Inputs: alpha - scalar factor A - sparse matrix B - sparse matrix C - (output) C = alpha * A * B Return: success or error Notes: 1) based on CSparse routine cs_multiply */ int gsl_spblas_dgemm(const double alpha, const gsl_spmatrix *A, const gsl_spmatrix *B, gsl_spmatrix *C) { if (A->size2 != B->size1 || A->size1 != C->size1 || B->size2 != C->size2) { GSL_ERROR("matrix dimensions do not match", GSL_EBADLEN); } else if (A->sptype != B->sptype || A->sptype != C->sptype) { GSL_ERROR("matrix storage formats do not match", GSL_EINVAL); } else if (!GSL_SPMATRIX_ISCCS(A)) { GSL_ERROR("compressed column format required", GSL_EINVAL); } else { int status = GSL_SUCCESS; const size_t M = A->size1; const size_t N = B->size2; int *Bi = B->i; int *Bp = B->p; double *Bd = B->data; int *w = A->work.work_int; /* workspace of length M */ double *x = C->work.work_atomic; /* workspace of length M */ int *Cp, *Ci; double *Cd; size_t j; int p; size_t nz = 0; if (C->nzmax < A->nz + B->nz) { status = gsl_spmatrix_realloc(A->nz + B->nz, C); if (status) { GSL_ERROR("unable to realloc matrix C", status); } } /* initialize workspace to 0 */ for (j = 0; j < M; ++j) w[j] = 0; Cp = C->p; Ci = C->i; Cd = C->data; for (j = 0; j < N; ++j) { if (nz + M > C->nzmax) { status = gsl_spmatrix_realloc(2 * C->nzmax + M, C); if (status) { GSL_ERROR("unable to realloc matrix C", status); } /* these pointers could have changed due to reallocation */ Ci = C->i; Cd = C->data; } Cp[j] = nz; /* column j of C starts here */ for (p = Bp[j]; p < Bp[j + 1]; ++p) { nz = gsl_spblas_scatter(A, Bi[p], Bd[p], w, x, (int) (j + 1), C, nz); } for (p = Cp[j]; p < (int) nz; ++p) Cd[p] = x[Ci[p]]; } Cp[N] = nz; C->nz = nz; /* scale by alpha */ gsl_spmatrix_scale(C, alpha); return status; } } /* gsl_spblas_dgemm() */ /* gsl_spblas_scatter() Keep a running total x -> x + alpha*A(:,j) for adding matrices together in CCS, which will eventually be stored in C(:,j) When a new non-zero element with row index i is found, update C->i with the row index. C->data is updated only by the calling function after all matrices have been added via this function. Inputs: A - sparse matrix m-by-n j - column index alpha - scalar factor w - keeps track which rows of column j have been added to C; initialize to 0 prior to first call x - column vector of length m mark - C - output matrix whose jth column will be added to A(:,j) nz - (input/output) number of non-zeros in matrix C Notes: 1) This function is designed to be called successively when adding multiple matrices together. Column j of C is stored contiguously as per CCS but not necessarily in order - ie: the row indices C->i may not be in ascending order. 2) based on CSparse routine cs_scatter */ size_t gsl_spblas_scatter(const gsl_spmatrix *A, const size_t j, const double alpha, int *w, double *x, const int mark, gsl_spmatrix *C, size_t nz) { int p; int *Ai = A->i; int *Ap = A->p; double *Ad = A->data; int *Ci = C->i; for (p = Ap[j]; p < Ap[j + 1]; ++p) { size_t i = Ai[p]; /* A(i,j) is nonzero */ if (w[i] < mark) /* check if row i has been stored in column j yet */ { w[i] = mark; /* i is new entry in column j */ Ci[nz++] = i; /* add i to pattern of C(:,j) */ x[i] = alpha * Ad[p]; /* x(i) = alpha * A(i,j) */ } else /* this (i,j) exists in C from a previous call */ { x[i] += alpha * Ad[p]; /* add alpha*A(i,j) to C(i,j) */ } } return (nz) ; } /* gsl_spblas_scatter() */ gsl/spblas/spdgemv.c0000644000175000017500000001010213536675317013024 0ustar eddedd/* spdgemv.c * * Copyright (C) 2012-2014 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include /* gsl_spblas_dgemv() Multiply a sparse matrix and a vector Inputs: alpha - scalar factor A - sparse matrix x - dense vector beta - scalar factor y - (input/output) dense vector Return: y = alpha*op(A)*x + beta*y */ int gsl_spblas_dgemv(const CBLAS_TRANSPOSE_t TransA, const double alpha, const gsl_spmatrix *A, const gsl_vector *x, const double beta, gsl_vector *y) { const size_t M = A->size1; const size_t N = A->size2; if ((TransA == CblasNoTrans && N != x->size) || (TransA == CblasTrans && M != x->size)) { GSL_ERROR("invalid length of x vector", GSL_EBADLEN); } else if ((TransA == CblasNoTrans && M != y->size) || (TransA == CblasTrans && N != y->size)) { GSL_ERROR("invalid length of y vector", GSL_EBADLEN); } else { size_t j; size_t incX, incY; size_t lenX, lenY; double *X, *Y; double *Ad; int *Ap, *Ai, *Aj; int p; if (TransA == CblasNoTrans) { lenX = N; lenY = M; } else { lenX = M; lenY = N; } /* form y := beta*y */ Y = y->data; incY = y->stride; if (beta == 0.0) { size_t jy = 0; for (j = 0; j < lenY; ++j) { Y[jy] = 0.0; jy += incY; } } else if (beta != 1.0) { size_t jy = 0; for (j = 0; j < lenY; ++j) { Y[jy] *= beta; jy += incY; } } if (alpha == 0.0) return GSL_SUCCESS; /* form y := alpha*op(A)*x + y */ Ap = A->p; Ad = A->data; X = x->data; incX = x->stride; if ((GSL_SPMATRIX_ISCCS(A) && (TransA == CblasNoTrans)) || (GSL_SPMATRIX_ISCRS(A) && (TransA == CblasTrans))) { Ai = A->i; for (j = 0; j < lenX; ++j) { for (p = Ap[j]; p < Ap[j + 1]; ++p) { Y[Ai[p] * incY] += alpha * Ad[p] * X[j * incX]; } } } else if ((GSL_SPMATRIX_ISCCS(A) && (TransA == CblasTrans)) || (GSL_SPMATRIX_ISCRS(A) && (TransA == CblasNoTrans))) { Ai = A->i; for (j = 0; j < lenY; ++j) { for (p = Ap[j]; p < Ap[j + 1]; ++p) { Y[j * incY] += alpha * Ad[p] * X[Ai[p] * incX]; } } } else if (GSL_SPMATRIX_ISTRIPLET(A)) { if (TransA == CblasNoTrans) { Ai = A->i; Aj = A->p; } else { Ai = A->p; Aj = A->i; } for (p = 0; p < (int) A->nz; ++p) { Y[Ai[p] * incY] += alpha * Ad[p] * X[Aj[p] * incX]; } } else { GSL_ERROR("unsupported matrix type", GSL_EINVAL); } return GSL_SUCCESS; } } /* gsl_spblas_dgemv() */ gsl/spblas/gsl_spblas.h0000644000175000017500000000341313536675317013524 0ustar eddedd/* gsl_spblas.h * * Copyright (C) 2012-2014 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SPBLAS_H__ #define __GSL_SPBLAS_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* * Prototypes */ int gsl_spblas_dgemv(const CBLAS_TRANSPOSE_t TransA, const double alpha, const gsl_spmatrix *A, const gsl_vector *x, const double beta, gsl_vector *y); int gsl_spblas_dgemm(const double alpha, const gsl_spmatrix *A, const gsl_spmatrix *B, gsl_spmatrix *C); size_t gsl_spblas_scatter(const gsl_spmatrix *A, const size_t j, const double alpha, int *w, double *x, const int mark, gsl_spmatrix *C, size_t nz); __END_DECLS #endif /* __GSL_SPBLAS_H__ */ gsl/spblas/test.c0000644000175000017500000001620213536674414012342 0ustar eddedd/* test.c * * Copyright (C) 2012-2014 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include /* create_random_sparse() Create a random sparse matrix with approximately M*N*density non-zero entries Inputs: M - number of rows N - number of columns density - sparse density \in [0,1] 0 = no non-zero entries 1 = all m*n entries are filled r - random number generator Return: pointer to sparse matrix in triplet format (must be freed by caller) Notes: 1) non-zero matrix entries are uniformly distributed in [0,1] */ static gsl_spmatrix * create_random_sparse(const size_t M, const size_t N, const double density, const gsl_rng *r) { size_t nnzwanted = (size_t) floor(M * N * GSL_MIN(density, 1.0)); gsl_spmatrix *m = gsl_spmatrix_alloc_nzmax(M, N, nnzwanted, GSL_SPMATRIX_TRIPLET); while (gsl_spmatrix_nnz(m) < nnzwanted) { /* generate a random row and column */ size_t i = gsl_rng_uniform(r) * M; size_t j = gsl_rng_uniform(r) * N; /* generate random m_{ij} and add it */ double x = gsl_rng_uniform(r); gsl_spmatrix_set(m, i, j, x); } return m; } /* create_random_sparse() */ static void create_random_vector(gsl_vector *v, const gsl_rng *r) { size_t i; for (i = 0; i < v->size; ++i) { double x = gsl_rng_uniform(r); gsl_vector_set(v, i, x); } } /* create_random_vector() */ static int test_vectors(gsl_vector *observed, gsl_vector *expected, const double tol, const char *str) { int s = 0; size_t N = observed->size; size_t i; for (i = 0; i < N; ++i) { double x_obs = gsl_vector_get(observed, i); double x_exp = gsl_vector_get(expected, i); gsl_test_rel(x_obs, x_exp, tol, "N=%zu i=%zu %s", N, i, str); } return s; } /* test_vectors() */ static void test_dgemv(const size_t N, const size_t M, const double alpha, const double beta, const CBLAS_TRANSPOSE_t TransA, const gsl_rng *r) { gsl_spmatrix *A = create_random_sparse(M, N, 0.2, r); gsl_spmatrix *B, *C; gsl_matrix *A_dense = gsl_matrix_alloc(M, N); gsl_vector *x, *y, *y_gsl, *y_sp; size_t lenX, lenY; if (TransA == CblasNoTrans) { lenX = N; lenY = M; } else { lenX = M; lenY = N; } x = gsl_vector_alloc(lenX); y = gsl_vector_alloc(lenY); y_gsl = gsl_vector_alloc(lenY); y_sp = gsl_vector_alloc(lenY); /* create random dense vectors */ create_random_vector(x, r); create_random_vector(y, r); /* copy A into A_dense */ gsl_spmatrix_sp2d(A_dense, A); gsl_vector_memcpy(y_gsl, y); gsl_vector_memcpy(y_sp, y); /* compute y = alpha*op(A)*x + beta*y0 with gsl */ gsl_blas_dgemv(TransA, alpha, A_dense, x, beta, y_gsl); /* compute y = alpha*op(A)*x + beta*y0 with spblas/triplet */ gsl_spblas_dgemv(TransA, alpha, A, x, beta, y_sp); /* test y_sp = y_gsl */ test_vectors(y_sp, y_gsl, 1.0e-10, "test_dgemv: triplet format"); /* compute y = alpha*op(A)*x + beta*y0 with spblas/CCS */ B = gsl_spmatrix_ccs(A); gsl_vector_memcpy(y_sp, y); gsl_spblas_dgemv(TransA, alpha, B, x, beta, y_sp); /* test y_sp = y_gsl */ test_vectors(y_sp, y_gsl, 1.0e-10, "test_dgemv: CCS format"); /* compute y = alpha*op(A)*x + beta*y0 with spblas/CRS */ C = gsl_spmatrix_crs(A); gsl_vector_memcpy(y_sp, y); gsl_spblas_dgemv(TransA, alpha, C, x, beta, y_sp); /* test y_sp = y_gsl */ test_vectors(y_sp, y_gsl, 1.0e-10, "test_dgemv: CRS format"); gsl_spmatrix_free(A); gsl_spmatrix_free(B); gsl_spmatrix_free(C); gsl_matrix_free(A_dense); gsl_vector_free(x); gsl_vector_free(y); gsl_vector_free(y_gsl); gsl_vector_free(y_sp); } /* test_dgemv() */ static void test_dgemm(const double alpha, const size_t M, const size_t N, const gsl_rng *r) { const size_t max = GSL_MAX(M, N); size_t i, j, k; gsl_matrix *A_dense = gsl_matrix_alloc(M, max); gsl_matrix *B_dense = gsl_matrix_alloc(max, N); gsl_matrix *C_dense = gsl_matrix_alloc(M, N); gsl_spmatrix *C = gsl_spmatrix_alloc_nzmax(M, N, 1, GSL_SPMATRIX_CCS); for (k = 1; k <= max; ++k) { gsl_matrix_view Ad = gsl_matrix_submatrix(A_dense, 0, 0, M, k); gsl_matrix_view Bd = gsl_matrix_submatrix(B_dense, 0, 0, k, N); gsl_spmatrix *TA = create_random_sparse(M, k, 0.2, r); gsl_spmatrix *TB = create_random_sparse(k, N, 0.2, r); gsl_spmatrix *A = gsl_spmatrix_ccs(TA); gsl_spmatrix *B = gsl_spmatrix_ccs(TB); gsl_spmatrix_set_zero(C); gsl_spblas_dgemm(alpha, A, B, C); /* make dense matrices and use standard dgemm to multiply them */ gsl_spmatrix_sp2d(&Ad.matrix, TA); gsl_spmatrix_sp2d(&Bd.matrix, TB); gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, alpha, &Ad.matrix, &Bd.matrix, 0.0, C_dense); /* compare C and C_dense */ for (i = 0; i < M; ++i) { for (j = 0; j < N; ++j) { double Cij = gsl_spmatrix_get(C, i, j); double Dij = gsl_matrix_get(C_dense, i, j); gsl_test_rel(Cij, Dij, 1.0e-12, "test_dgemm: _dgemm"); } } gsl_spmatrix_free(TA); gsl_spmatrix_free(TB); gsl_spmatrix_free(A); gsl_spmatrix_free(B); } gsl_spmatrix_free(C); gsl_matrix_free(A_dense); gsl_matrix_free(B_dense); gsl_matrix_free(C_dense); } /* test_dgemm() */ int main() { const size_t N_max = 40; size_t m, n; gsl_rng *r = gsl_rng_alloc(gsl_rng_default); for (m = 1; m <= N_max; ++m) { for (n = 1; n <= N_max; ++n) { test_dgemv(m, n, 1.0, 0.0, CblasNoTrans, r); test_dgemv(m, n, 1.0, 0.0, CblasTrans, r); test_dgemv(m, n, 2.4, -0.5, CblasNoTrans, r); test_dgemv(m, n, 2.4, -0.5, CblasTrans, r); test_dgemv(m, n, 0.1, 10.0, CblasNoTrans, r); test_dgemv(m, n, 0.1, 10.0, CblasTrans, r); } } test_dgemm(1.0, 10, 10, r); test_dgemm(2.3, 20, 15, r); test_dgemm(1.8, 12, 30, r); test_dgemm(0.4, 45, 35, r); gsl_rng_free(r); exit (gsl_test_summary()); } /* main() */ gsl/gsl-randist.c0000644000175000017500000002330713536674414012332 0ustar eddedd/* randist/gsl-randist.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include void error (const char * s); int main (int argc, char *argv[]) { size_t i,j; size_t n = 0; double mu = 0, nu = 0, nu1 = 0, nu2 = 0, sigma = 0, a = 0, b = 0, c = 0; double zeta = 0, sigmax = 0, sigmay = 0, rho = 0; double p = 0; double x = 0, y =0, z=0 ; unsigned int N = 0, t = 0, n1 = 0, n2 = 0 ; unsigned long int seed = 0 ; const char * name ; gsl_rng * r ; if (argc < 4) { printf ( "Usage: gsl-randist seed n DIST param1 param2 ...\n" "Generates n samples from the distribution DIST with parameters param1,\n" "param2, etc. Valid distributions are,\n\n"); printf( " beta\n" " binomial\n" " bivariate-gaussian\n" " cauchy\n" " chisq\n" " dir-2d\n" " dir-3d\n" " dir-nd\n" " erlang\n" " exponential\n" " exppow\n" " fdist\n" " flat\n" " gamma\n" " gaussian-tail\n" " gaussian\n" " geometric\n" " gumbel1\n" " gumbel2\n" " hypergeometric\n" " laplace\n" " landau\n" " levy\n" " levy-skew\n" " logarithmic\n" " logistic\n" " lognormal\n" " negative-binomial\n" " pareto\n" " pascal\n" " poisson\n" " rayleigh-tail\n" " rayleigh\n" " tdist\n" " ugaussian-tail\n" " ugaussian\n" " weibull\n") ; exit (0); } argv++ ; seed = atol (argv[0]); argc-- ; argv++ ; n = atol (argv[0]); argc-- ; argv++ ; name = argv[0] ; argc-- ; argc-- ; gsl_rng_env_setup() ; if (gsl_rng_default_seed != 0) { fprintf(stderr, "overriding GSL_RNG_SEED with command line value, seed = %ld\n", seed) ; } gsl_rng_default_seed = seed ; r = gsl_rng_alloc(gsl_rng_default) ; #define NAME(x) !strcmp(name,(x)) #define OUTPUT(x) for (i = 0; i < n; i++) { printf("%g\n", (x)) ; } #define OUTPUT1(a,x) for(i = 0; i < n; i++) { a ; printf("%g\n", x) ; } #define OUTPUT2(a,x,y) for(i = 0; i < n; i++) { a ; printf("%g %g\n", x, y) ; } #define OUTPUT3(a,x,y,z) for(i = 0; i < n; i++) { a ; printf("%g %g %g\n", x, y, z) ; } #define INT_OUTPUT(x) for (i = 0; i < n; i++) { printf("%d\n", (x)) ; } #define ARGS(x,y) if (argc != x) error(y) ; #define DBL_ARG(x) if (argc) { x=atof((++argv)[0]);argc--;} else {error( #x);}; #define INT_ARG(x) if (argc) { x=atoi((++argv)[0]);argc--;} else {error( #x);}; if (NAME("bernoulli")) { ARGS(1, "p = probability of success"); DBL_ARG(p) INT_OUTPUT(gsl_ran_bernoulli (r, p)); } else if (NAME("beta")) { ARGS(2, "a,b = shape parameters"); DBL_ARG(a) DBL_ARG(b) OUTPUT(gsl_ran_beta (r, a, b)); } else if (NAME("binomial")) { ARGS(2, "p = probability, N = number of trials"); DBL_ARG(p) INT_ARG(N) INT_OUTPUT(gsl_ran_binomial (r, p, N)); } else if (NAME("cauchy")) { ARGS(1, "a = scale parameter"); DBL_ARG(a) OUTPUT(gsl_ran_cauchy (r, a)); } else if (NAME("chisq")) { ARGS(1, "nu = degrees of freedom"); DBL_ARG(nu) OUTPUT(gsl_ran_chisq (r, nu)); } else if (NAME("erlang")) { ARGS(2, "a = scale parameter, b = order"); DBL_ARG(a) DBL_ARG(b) OUTPUT(gsl_ran_erlang (r, a, b)); } else if (NAME("exponential")) { ARGS(1, "mu = mean value"); DBL_ARG(mu) ; OUTPUT(gsl_ran_exponential (r, mu)); } else if (NAME("exppow")) { ARGS(2, "a = scale parameter, b = power (1=exponential, 2=gaussian)"); DBL_ARG(a) ; DBL_ARG(b) ; OUTPUT(gsl_ran_exppow (r, a, b)); } else if (NAME("fdist")) { ARGS(2, "nu1, nu2 = degrees of freedom parameters"); DBL_ARG(nu1) ; DBL_ARG(nu2) ; OUTPUT(gsl_ran_fdist (r, nu1, nu2)); } else if (NAME("flat")) { ARGS(2, "a = lower limit, b = upper limit"); DBL_ARG(a) ; DBL_ARG(b) ; OUTPUT(gsl_ran_flat (r, a, b)); } else if (NAME("gamma")) { ARGS(2, "a = order, b = scale"); DBL_ARG(a) ; DBL_ARG(b) ; OUTPUT(gsl_ran_gamma (r, a, b)); } else if (NAME("gaussian")) { ARGS(1, "sigma = standard deviation"); DBL_ARG(sigma) ; OUTPUT(gsl_ran_gaussian (r, sigma)); } else if (NAME("gaussian-tail")) { ARGS(2, "a = lower limit, sigma = standard deviation"); DBL_ARG(a) ; DBL_ARG(sigma) ; OUTPUT(gsl_ran_gaussian_tail (r, a, sigma)); } else if (NAME("ugaussian")) { ARGS(0, "unit gaussian, no parameters required"); OUTPUT(gsl_ran_ugaussian (r)); } else if (NAME("ugaussian-tail")) { ARGS(1, "a = lower limit"); DBL_ARG(a) ; OUTPUT(gsl_ran_ugaussian_tail (r, a)); } else if (NAME("bivariate-gaussian")) { ARGS(3, "sigmax = x std.dev., sigmay = y std.dev., rho = correlation"); DBL_ARG(sigmax) ; DBL_ARG(sigmay) ; DBL_ARG(rho) ; OUTPUT2(gsl_ran_bivariate_gaussian (r, sigmax, sigmay, rho, &x, &y), x, y); } else if (NAME("dir-2d")) { OUTPUT2(gsl_ran_dir_2d (r, &x, &y), x, y); } else if (NAME("dir-3d")) { OUTPUT3(gsl_ran_dir_3d (r, &x, &y, &z), x, y, z); } else if (NAME("dir-nd")) { double *xarr; ARGS(1, "n1 = number of dimensions of hypersphere"); INT_ARG(n1) ; xarr = (double *)malloc(n1*sizeof(double)); for(i = 0; i < n; i++) { gsl_ran_dir_nd (r, n1, xarr) ; for (j = 0; j < n1; j++) { if (j) putchar(' '); printf("%g", xarr[j]) ; } putchar('\n'); } ; free(xarr); } else if (NAME("geometric")) { ARGS(1, "p = bernoulli trial probability of success"); DBL_ARG(p) ; INT_OUTPUT(gsl_ran_geometric (r, p)); } else if (NAME("gumbel1")) { ARGS(2, "a = order, b = scale parameter"); DBL_ARG(a) ; DBL_ARG(b) ; OUTPUT(gsl_ran_gumbel1 (r, a, b)); } else if (NAME("gumbel2")) { ARGS(2, "a = order, b = scale parameter"); DBL_ARG(a) ; DBL_ARG(b) ; OUTPUT(gsl_ran_gumbel2 (r, a, b)); } else if (NAME("hypergeometric")) { ARGS(3, "n1 = tagged population, n2 = untagged population, t = number of trials"); INT_ARG(n1) ; INT_ARG(n2) ; INT_ARG(t) ; INT_OUTPUT(gsl_ran_hypergeometric (r, n1, n2, t)); } else if (NAME("laplace")) { ARGS(1, "a = scale parameter"); DBL_ARG(a) ; OUTPUT(gsl_ran_laplace (r, a)); } else if (NAME("landau")) { ARGS(0, "no arguments required"); OUTPUT(gsl_ran_landau (r)); } else if (NAME("levy")) { ARGS(2, "c = scale, a = power (1=cauchy, 2=gaussian)"); DBL_ARG(c) ; DBL_ARG(a) ; OUTPUT(gsl_ran_levy (r, c, a)); } else if (NAME("levy-skew")) { ARGS(3, "c = scale, a = power (1=cauchy, 2=gaussian), b = skew"); DBL_ARG(c) ; DBL_ARG(a) ; DBL_ARG(b) ; OUTPUT(gsl_ran_levy_skew (r, c, a, b)); } else if (NAME("logarithmic")) { ARGS(1, "p = probability"); DBL_ARG(p) ; INT_OUTPUT(gsl_ran_logarithmic (r, p)); } else if (NAME("logistic")) { ARGS(1, "a = scale parameter"); DBL_ARG(a) ; OUTPUT(gsl_ran_logistic (r, a)); } else if (NAME("lognormal")) { ARGS(2, "zeta = location parameter, sigma = scale parameter"); DBL_ARG(zeta) ; DBL_ARG(sigma) ; OUTPUT(gsl_ran_lognormal (r, zeta, sigma)); } else if (NAME("negative-binomial")) { ARGS(2, "p = probability, a = order"); DBL_ARG(p) ; DBL_ARG(a) ; INT_OUTPUT(gsl_ran_negative_binomial (r, p, a)); } else if (NAME("pareto")) { ARGS(2, "a = power, b = scale parameter"); DBL_ARG(a) ; DBL_ARG(b) ; OUTPUT(gsl_ran_pareto (r, a, b)); } else if (NAME("pascal")) { ARGS(2, "p = probability, n = order (integer)"); DBL_ARG(p) ; INT_ARG(N) ; INT_OUTPUT(gsl_ran_pascal (r, p, N)); } else if (NAME("poisson")) { ARGS(1, "mu = scale parameter"); DBL_ARG(mu) ; INT_OUTPUT(gsl_ran_poisson (r, mu)); } else if (NAME("rayleigh")) { ARGS(1, "sigma = scale parameter"); DBL_ARG(sigma) ; OUTPUT(gsl_ran_rayleigh (r, sigma)); } else if (NAME("rayleigh-tail")) { ARGS(2, "a = lower limit, sigma = scale parameter"); DBL_ARG(a) ; DBL_ARG(sigma) ; OUTPUT(gsl_ran_rayleigh_tail (r, a, sigma)); } else if (NAME("tdist")) { ARGS(1, "nu = degrees of freedom"); DBL_ARG(nu) ; OUTPUT(gsl_ran_tdist (r, nu)); } else if (NAME("weibull")) { ARGS(2, "a = scale parameter, b = exponent"); DBL_ARG(a) ; DBL_ARG(b) ; OUTPUT(gsl_ran_weibull (r, a, b)); } else { fprintf(stderr,"Error: unrecognized distribution: %s\n", name) ; } return 0 ; } void error (const char * s) { fprintf(stderr, "Error: arguments should be %s\n",s) ; exit (EXIT_FAILURE) ; } gsl/ltmain.sh0000664000175000017500000117077114057135461011563 0ustar eddedd#! /bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2014-01-03.01 # libtool (GNU libtool) 2.4.6 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.6 package_revision=2.4.6 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # Copyright (C) 2004-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # As a special exception to the GNU General Public License, if you distribute # this file as part of a program or library that is built using GNU Libtool, # you may include this file under the same distribution terms that you use # for the rest of that program. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1+=\\ \$func_quote_for_eval_result" }' else func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1=\$$1\\ \$func_quote_for_eval_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_for_eval ARG... # -------------------------- # Aesthetically quote ARGs to be evaled later. # This function returns two values: # i) func_quote_for_eval_result # double-quoted, suitable for a subsequent eval # ii) func_quote_for_eval_unquoted_result # has all characters that are still active within double # quotes backslashified. func_quote_for_eval () { $debug_cmd func_quote_for_eval_unquoted_result= func_quote_for_eval_result= while test 0 -lt $#; do case $1 in *[\\\`\"\$]*) _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; *) _G_unquoted_arg=$1 ;; esac if test -n "$func_quote_for_eval_unquoted_result"; then func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" else func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" fi case $_G_unquoted_arg in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_quoted_arg=\"$_G_unquoted_arg\" ;; *) _G_quoted_arg=$_G_unquoted_arg ;; esac if test -n "$func_quote_for_eval_result"; then func_append func_quote_for_eval_result " $_G_quoted_arg" else func_append func_quote_for_eval_result "$_G_quoted_arg" fi shift done } # func_quote_for_expand ARG # ------------------------- # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { $debug_cmd case $1 in *[\\\`\"]*) _G_arg=`$ECHO "$1" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) _G_arg=$1 ;; esac case $_G_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_arg=\"$_G_arg\" ;; esac func_quote_for_expand_result=$_G_arg } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_for_expand "$_G_cmd" eval "func_notquiet $func_quote_for_expand_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # Set a version string for this script. scriptversion=2014-01-07.03; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # Copyright (C) 2010-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# warranty; '. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # to the main code. A hook is just a named list of of function, that can # be run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of functions called by FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It is assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook funcions.n" ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do eval $_G_hook '"$@"' # store returned options list back into positional # parameters for next 'cmd' execution. eval _G_hook_result=\$${_G_hook}_result eval set dummy "$_G_hook_result"; shift done func_quote_for_eval ${1+"$@"} func_run_hooks_result=$func_quote_for_eval_result } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list in your hook function, remove any # options that you action, and then pass back the remaining unprocessed # options in '_result', escaped suitably for # 'eval'. Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # func_quote_for_eval ${1+"$@"} # my_options_prep_result=$func_quote_for_eval_result # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # # Note that for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # ;; # *) set dummy "$_G_opt" "$*"; shift; break ;; # esac # done # # func_quote_for_eval ${1+"$@"} # my_silent_option_result=$func_quote_for_eval_result # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # # func_quote_for_eval ${1+"$@"} # my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # # You'll alse need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd func_options_prep ${1+"$@"} eval func_parse_options \ ${func_options_prep_result+"$func_options_prep_result"} eval func_validate_options \ ${func_parse_options_result+"$func_parse_options_result"} eval func_run_hooks func_options \ ${func_validate_options_result+"$func_validate_options_result"} # save modified positional parameters for caller func_options_result=$func_run_hooks_result } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propogate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before # returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} # save modified positional parameters for caller func_options_prep_result=$func_run_hooks_result } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd func_parse_options_result= # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} # Adjust func_parse_options positional parameters to match eval set dummy "$func_run_hooks_result"; shift # Break out of the loop if we already parsed every option. test $# -gt 0 || break _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) test $# = 0 && func_missing_arg $_G_opt && break case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} func_parse_options_result=$func_quote_for_eval_result } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE # save modified positional parameters for caller func_validate_options_result=$func_run_hooks_result } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables after # splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} test "x$func_split_equals_lhs" = "x$1" \ && func_split_equals_rhs= }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /(C)/!b go :more /\./!{ N s|\n# | | b more } :go /^# Written by /,/# warranty; / { s|^# || s|^# *$|| s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| p } /^# Written by / { s|^# || p } /^warranty; /q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname (GNU libtool) 2.4.6 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func__fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Pass back the list of options. func_quote_for_eval ${1+"$@"} libtool_options_prep_result=$func_quote_for_eval_result } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} libtool_parse_options_result=$func_quote_for_eval_result } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote_for_eval ${1+"$@"} libtool_validate_options_result=$func_quote_for_eval_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -stdlib=* select c++ std lib with clang -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_for_eval "$arg" arg=$func_quote_for_eval_result fi ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: gsl/gsl_version.h0000664000175000017500000000071414152016063012422 0ustar eddedd#ifndef __GSL_VERSION_H__ #define __GSL_VERSION_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS #define GSL_VERSION "2.7.1" #define GSL_MAJOR_VERSION 2 #define GSL_MINOR_VERSION 7 GSL_VAR const char * gsl_version; __END_DECLS #endif /* __GSL_VERSION_H__ */ gsl/eigen/0000755000175000017500000000000014057135461011012 5ustar eddeddgsl/eigen/Makefile.in0000664000175000017500000011371414057135461013070 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = eigen ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgsleigen_la_LIBADD = am_libgsleigen_la_OBJECTS = jacobi.lo symm.lo symmv.lo nonsymm.lo \ nonsymmv.lo herm.lo hermv.lo gensymm.lo gensymmv.lo genherm.lo \ genhermv.lo gen.lo genv.lo sort.lo francis.lo schur.lo libgsleigen_la_OBJECTS = $(am_libgsleigen_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgsleigen.la ../test/libgsltest.la \ ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la \ ../blas/libgslblas.la ../cblas/libgslcblas.la \ ../matrix/libgslmatrix.la ../vector/libgslvector.la \ ../block/libgslblock.la ../complex/libgslcomplex.la \ ../ieee-utils/libgslieeeutils.la ../sys/libgslsys.la \ ../err/libgslerr.la ../utils/libutils.la ../rng/libgslrng.la \ ../sort/libgslsort.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/francis.Plo ./$(DEPDIR)/gen.Plo \ ./$(DEPDIR)/genherm.Plo ./$(DEPDIR)/genhermv.Plo \ ./$(DEPDIR)/gensymm.Plo ./$(DEPDIR)/gensymmv.Plo \ ./$(DEPDIR)/genv.Plo ./$(DEPDIR)/herm.Plo \ ./$(DEPDIR)/hermv.Plo ./$(DEPDIR)/jacobi.Plo \ ./$(DEPDIR)/nonsymm.Plo ./$(DEPDIR)/nonsymmv.Plo \ ./$(DEPDIR)/schur.Plo ./$(DEPDIR)/sort.Plo \ ./$(DEPDIR)/symm.Plo ./$(DEPDIR)/symmv.Plo ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgsleigen_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgsleigen_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgsleigen.la pkginclude_HEADERS = gsl_eigen.h libgsleigen_la_SOURCES = jacobi.c symm.c symmv.c nonsymm.c nonsymmv.c herm.c hermv.c gensymm.c gensymmv.c genherm.c genhermv.c gen.c genv.c sort.c francis.c schur.c AM_CPPFLAGS = -I$(top_srcdir) noinst_HEADERS = recurse.h qrstep.c TESTS = $(check_PROGRAMS) test_LDADD = libgsleigen.la ../test/libgsltest.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la ../rng/libgslrng.la ../sort/libgslsort.la test_SOURCES = test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu eigen/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu eigen/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgsleigen.la: $(libgsleigen_la_OBJECTS) $(libgsleigen_la_DEPENDENCIES) $(EXTRA_libgsleigen_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgsleigen_la_OBJECTS) $(libgsleigen_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/francis.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gen.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genherm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genhermv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gensymm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gensymmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/herm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hermv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jacobi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonsymm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonsymmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/schur.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sort.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/francis.Plo -rm -f ./$(DEPDIR)/gen.Plo -rm -f ./$(DEPDIR)/genherm.Plo -rm -f ./$(DEPDIR)/genhermv.Plo -rm -f ./$(DEPDIR)/gensymm.Plo -rm -f ./$(DEPDIR)/gensymmv.Plo -rm -f ./$(DEPDIR)/genv.Plo -rm -f ./$(DEPDIR)/herm.Plo -rm -f ./$(DEPDIR)/hermv.Plo -rm -f ./$(DEPDIR)/jacobi.Plo -rm -f ./$(DEPDIR)/nonsymm.Plo -rm -f ./$(DEPDIR)/nonsymmv.Plo -rm -f ./$(DEPDIR)/schur.Plo -rm -f ./$(DEPDIR)/sort.Plo -rm -f ./$(DEPDIR)/symm.Plo -rm -f ./$(DEPDIR)/symmv.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/francis.Plo -rm -f ./$(DEPDIR)/gen.Plo -rm -f ./$(DEPDIR)/genherm.Plo -rm -f ./$(DEPDIR)/genhermv.Plo -rm -f ./$(DEPDIR)/gensymm.Plo -rm -f ./$(DEPDIR)/gensymmv.Plo -rm -f ./$(DEPDIR)/genv.Plo -rm -f ./$(DEPDIR)/herm.Plo -rm -f ./$(DEPDIR)/hermv.Plo -rm -f ./$(DEPDIR)/jacobi.Plo -rm -f ./$(DEPDIR)/nonsymm.Plo -rm -f ./$(DEPDIR)/nonsymmv.Plo -rm -f ./$(DEPDIR)/schur.Plo -rm -f ./$(DEPDIR)/sort.Plo -rm -f ./$(DEPDIR)/symm.Plo -rm -f ./$(DEPDIR)/symmv.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/eigen/gsl_eigen.h0000644000175000017500000003173213536674414013134 0ustar eddedd/* eigen/gsl_eigen.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2006, 2007 Gerard Jungman, Brian Gough, Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_EIGEN_H__ #define __GSL_EIGEN_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size; double * d; double * sd; } gsl_eigen_symm_workspace; gsl_eigen_symm_workspace * gsl_eigen_symm_alloc (const size_t n); void gsl_eigen_symm_free (gsl_eigen_symm_workspace * w); int gsl_eigen_symm (gsl_matrix * A, gsl_vector * eval, gsl_eigen_symm_workspace * w); typedef struct { size_t size; double * d; double * sd; double * gc; double * gs; } gsl_eigen_symmv_workspace; gsl_eigen_symmv_workspace * gsl_eigen_symmv_alloc (const size_t n); void gsl_eigen_symmv_free (gsl_eigen_symmv_workspace * w); int gsl_eigen_symmv (gsl_matrix * A, gsl_vector * eval, gsl_matrix * evec, gsl_eigen_symmv_workspace * w); typedef struct { size_t size; double * d; double * sd; double * tau; } gsl_eigen_herm_workspace; gsl_eigen_herm_workspace * gsl_eigen_herm_alloc (const size_t n); void gsl_eigen_herm_free (gsl_eigen_herm_workspace * w); int gsl_eigen_herm (gsl_matrix_complex * A, gsl_vector * eval, gsl_eigen_herm_workspace * w); typedef struct { size_t size; double * d; double * sd; double * tau; double * gc; double * gs; } gsl_eigen_hermv_workspace; gsl_eigen_hermv_workspace * gsl_eigen_hermv_alloc (const size_t n); void gsl_eigen_hermv_free (gsl_eigen_hermv_workspace * w); int gsl_eigen_hermv (gsl_matrix_complex * A, gsl_vector * eval, gsl_matrix_complex * evec, gsl_eigen_hermv_workspace * w); typedef struct { size_t size; /* matrix size */ size_t max_iterations; /* max iterations since last eigenvalue found */ size_t n_iter; /* number of iterations since last eigenvalue found */ size_t n_evals; /* number of eigenvalues found so far */ int compute_t; /* compute Schur form T = Z^t A Z */ gsl_matrix *H; /* pointer to Hessenberg matrix */ gsl_matrix *Z; /* pointer to Schur vector matrix */ } gsl_eigen_francis_workspace; gsl_eigen_francis_workspace * gsl_eigen_francis_alloc (void); void gsl_eigen_francis_free (gsl_eigen_francis_workspace * w); void gsl_eigen_francis_T (const int compute_t, gsl_eigen_francis_workspace * w); int gsl_eigen_francis (gsl_matrix * H, gsl_vector_complex * eval, gsl_eigen_francis_workspace * w); int gsl_eigen_francis_Z (gsl_matrix * H, gsl_vector_complex * eval, gsl_matrix * Z, gsl_eigen_francis_workspace * w); typedef struct { size_t size; /* size of matrices */ gsl_vector *diag; /* diagonal matrix elements from balancing */ gsl_vector *tau; /* Householder coefficients */ gsl_matrix *Z; /* pointer to Z matrix */ int do_balance; /* perform balancing transformation? */ size_t n_evals; /* number of eigenvalues found */ gsl_eigen_francis_workspace *francis_workspace_p; } gsl_eigen_nonsymm_workspace; gsl_eigen_nonsymm_workspace * gsl_eigen_nonsymm_alloc (const size_t n); void gsl_eigen_nonsymm_free (gsl_eigen_nonsymm_workspace * w); void gsl_eigen_nonsymm_params (const int compute_t, const int balance, gsl_eigen_nonsymm_workspace *w); int gsl_eigen_nonsymm (gsl_matrix * A, gsl_vector_complex * eval, gsl_eigen_nonsymm_workspace * w); int gsl_eigen_nonsymm_Z (gsl_matrix * A, gsl_vector_complex * eval, gsl_matrix * Z, gsl_eigen_nonsymm_workspace * w); typedef struct { size_t size; /* size of matrices */ gsl_vector *work; /* scratch workspace */ gsl_vector *work2; /* scratch workspace */ gsl_vector *work3; /* scratch workspace */ gsl_matrix *Z; /* pointer to Schur vectors */ gsl_eigen_nonsymm_workspace *nonsymm_workspace_p; } gsl_eigen_nonsymmv_workspace; gsl_eigen_nonsymmv_workspace * gsl_eigen_nonsymmv_alloc (const size_t n); void gsl_eigen_nonsymmv_free (gsl_eigen_nonsymmv_workspace * w); void gsl_eigen_nonsymmv_params (const int balance, gsl_eigen_nonsymmv_workspace *w); int gsl_eigen_nonsymmv (gsl_matrix * A, gsl_vector_complex * eval, gsl_matrix_complex * evec, gsl_eigen_nonsymmv_workspace * w); int gsl_eigen_nonsymmv_Z (gsl_matrix * A, gsl_vector_complex * eval, gsl_matrix_complex * evec, gsl_matrix * Z, gsl_eigen_nonsymmv_workspace * w); typedef struct { size_t size; /* size of matrices */ gsl_eigen_symm_workspace *symm_workspace_p; } gsl_eigen_gensymm_workspace; gsl_eigen_gensymm_workspace * gsl_eigen_gensymm_alloc (const size_t n); void gsl_eigen_gensymm_free (gsl_eigen_gensymm_workspace * w); int gsl_eigen_gensymm (gsl_matrix * A, gsl_matrix * B, gsl_vector * eval, gsl_eigen_gensymm_workspace * w); int gsl_eigen_gensymm_standardize (gsl_matrix * A, const gsl_matrix * B); typedef struct { size_t size; /* size of matrices */ gsl_eigen_symmv_workspace *symmv_workspace_p; } gsl_eigen_gensymmv_workspace; gsl_eigen_gensymmv_workspace * gsl_eigen_gensymmv_alloc (const size_t n); void gsl_eigen_gensymmv_free (gsl_eigen_gensymmv_workspace * w); int gsl_eigen_gensymmv (gsl_matrix * A, gsl_matrix * B, gsl_vector * eval, gsl_matrix * evec, gsl_eigen_gensymmv_workspace * w); typedef struct { size_t size; /* size of matrices */ gsl_eigen_herm_workspace *herm_workspace_p; } gsl_eigen_genherm_workspace; gsl_eigen_genherm_workspace * gsl_eigen_genherm_alloc (const size_t n); void gsl_eigen_genherm_free (gsl_eigen_genherm_workspace * w); int gsl_eigen_genherm (gsl_matrix_complex * A, gsl_matrix_complex * B, gsl_vector * eval, gsl_eigen_genherm_workspace * w); int gsl_eigen_genherm_standardize (gsl_matrix_complex * A, const gsl_matrix_complex * B); typedef struct { size_t size; /* size of matrices */ gsl_eigen_hermv_workspace *hermv_workspace_p; } gsl_eigen_genhermv_workspace; gsl_eigen_genhermv_workspace * gsl_eigen_genhermv_alloc (const size_t n); void gsl_eigen_genhermv_free (gsl_eigen_genhermv_workspace * w); int gsl_eigen_genhermv (gsl_matrix_complex * A, gsl_matrix_complex * B, gsl_vector * eval, gsl_matrix_complex * evec, gsl_eigen_genhermv_workspace * w); typedef struct { size_t size; /* size of matrices */ gsl_vector *work; /* scratch workspace */ size_t n_evals; /* number of eigenvalues found */ size_t max_iterations; /* maximum QZ iterations allowed */ size_t n_iter; /* number of iterations since last eigenvalue found */ double eshift; /* exceptional shift counter */ int needtop; /* need to compute top index? */ double atol; /* tolerance for splitting A matrix */ double btol; /* tolerance for splitting B matrix */ double ascale; /* scaling factor for shifts */ double bscale; /* scaling factor for shifts */ gsl_matrix *H; /* pointer to hessenberg matrix */ gsl_matrix *R; /* pointer to upper triangular matrix */ int compute_s; /* compute generalized Schur form S */ int compute_t; /* compute generalized Schur form T */ gsl_matrix *Q; /* pointer to left Schur vectors */ gsl_matrix *Z; /* pointer to right Schur vectors */ } gsl_eigen_gen_workspace; gsl_eigen_gen_workspace * gsl_eigen_gen_alloc (const size_t n); void gsl_eigen_gen_free (gsl_eigen_gen_workspace * w); void gsl_eigen_gen_params (const int compute_s, const int compute_t, const int balance, gsl_eigen_gen_workspace * w); int gsl_eigen_gen (gsl_matrix * A, gsl_matrix * B, gsl_vector_complex * alpha, gsl_vector * beta, gsl_eigen_gen_workspace * w); int gsl_eigen_gen_QZ (gsl_matrix * A, gsl_matrix * B, gsl_vector_complex * alpha, gsl_vector * beta, gsl_matrix * Q, gsl_matrix * Z, gsl_eigen_gen_workspace * w); typedef struct { size_t size; /* size of matrices */ gsl_vector *work1; /* 1-norm of columns of A */ gsl_vector *work2; /* 1-norm of columns of B */ gsl_vector *work3; /* real part of eigenvector */ gsl_vector *work4; /* imag part of eigenvector */ gsl_vector *work5; /* real part of back-transformed eigenvector */ gsl_vector *work6; /* imag part of back-transformed eigenvector */ gsl_matrix *Q; /* pointer to left Schur vectors */ gsl_matrix *Z; /* pointer to right Schur vectors */ gsl_eigen_gen_workspace *gen_workspace_p; } gsl_eigen_genv_workspace; gsl_eigen_genv_workspace * gsl_eigen_genv_alloc (const size_t n); void gsl_eigen_genv_free (gsl_eigen_genv_workspace * w); int gsl_eigen_genv (gsl_matrix * A, gsl_matrix * B, gsl_vector_complex * alpha, gsl_vector * beta, gsl_matrix_complex * evec, gsl_eigen_genv_workspace * w); int gsl_eigen_genv_QZ (gsl_matrix * A, gsl_matrix * B, gsl_vector_complex * alpha, gsl_vector * beta, gsl_matrix_complex * evec, gsl_matrix * Q, gsl_matrix * Z, gsl_eigen_genv_workspace * w); typedef enum { GSL_EIGEN_SORT_VAL_ASC, GSL_EIGEN_SORT_VAL_DESC, GSL_EIGEN_SORT_ABS_ASC, GSL_EIGEN_SORT_ABS_DESC } gsl_eigen_sort_t; /* Sort eigensystem results based on eigenvalues. * Sorts in order of increasing value or increasing * absolute value. * * exceptions: GSL_EBADLEN */ int gsl_eigen_symmv_sort(gsl_vector * eval, gsl_matrix * evec, gsl_eigen_sort_t sort_type); int gsl_eigen_hermv_sort(gsl_vector * eval, gsl_matrix_complex * evec, gsl_eigen_sort_t sort_type); int gsl_eigen_nonsymmv_sort(gsl_vector_complex * eval, gsl_matrix_complex * evec, gsl_eigen_sort_t sort_type); int gsl_eigen_gensymmv_sort (gsl_vector * eval, gsl_matrix * evec, gsl_eigen_sort_t sort_type); int gsl_eigen_genhermv_sort (gsl_vector * eval, gsl_matrix_complex * evec, gsl_eigen_sort_t sort_type); int gsl_eigen_genv_sort (gsl_vector_complex * alpha, gsl_vector * beta, gsl_matrix_complex * evec, gsl_eigen_sort_t sort_type); /* Prototypes for the schur module */ int gsl_schur_gen_eigvals(const gsl_matrix *A, const gsl_matrix *B, double *wr1, double *wr2, double *wi, double *scale1, double *scale2); int gsl_schur_solve_equation(double ca, const gsl_matrix *A, double z, double d1, double d2, const gsl_vector *b, gsl_vector *x, double *s, double *xnorm, double smin); int gsl_schur_solve_equation_z(double ca, const gsl_matrix *A, gsl_complex *z, double d1, double d2, const gsl_vector_complex *b, gsl_vector_complex *x, double *s, double *xnorm, double smin); /* The following functions are obsolete: */ /* Eigensolve by Jacobi Method * * The data in the matrix input is destroyed. * * exceptions: */ int gsl_eigen_jacobi(gsl_matrix * matrix, gsl_vector * eval, gsl_matrix * evec, unsigned int max_rot, unsigned int * nrot); /* Invert by Jacobi Method * * exceptions: */ int gsl_eigen_invert_jacobi(const gsl_matrix * matrix, gsl_matrix * ainv, unsigned int max_rot); __END_DECLS #endif /* __GSL_EIGEN_H__ */ gsl/eigen/qrstep.c0000644000175000017500000001045513536674414012510 0ustar eddedd/* eigen/qrstep.c * * Copyright (C) 2007, 2010 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* remove off-diagonal elements which are neglegible compared with the neighboring diagonal elements */ static void chop_small_elements (const size_t N, const double d[], double sd[]) { double d_i = d[0]; size_t i; for (i = 0; i < N - 1; i++) { double sd_i = sd[i]; double d_ip1 = d[i + 1]; if (fabs (sd_i) < GSL_DBL_EPSILON * (fabs (d_i) + fabs (d_ip1))) { sd[i] = 0.0; } d_i = d_ip1; } } /* Generate a Givens rotation (cos,sin) which takes v=(x,y) to (|v|,0) From Golub and Van Loan, "Matrix Computations", Section 5.1.8 */ inline static void create_givens (const double a, const double b, double *c, double *s) { if (b == 0) { *c = 1; *s = 0; } else if (fabs (b) > fabs (a)) { double t = -a / b; double s1 = 1.0 / sqrt (1 + t * t); *s = s1; *c = s1 * t; } else { double t = -b / a; double c1 = 1.0 / sqrt (1 + t * t); *c = c1; *s = c1 * t; } } inline static double trailing_eigenvalue (const size_t n, const double d[], const double sd[]) { double ta = d[n - 2]; double tb = d[n - 1]; double tab = sd[n - 2]; double dt = (ta - tb) / 2.0; double mu; if (dt > 0) { mu = tb - tab * (tab / (dt + hypot (dt, tab))); } else if (dt == 0) { mu = tb - fabs(tab); } else { mu = tb + tab * (tab / ((-dt) + hypot (dt, tab))); } return mu; } static void qrstep (const size_t n, double d[], double sd[], double gc[], double gs[]) { double x, z; double ak, bk, zk, ap, bp, aq, bq; size_t k; double mu = trailing_eigenvalue (n, d, sd); /* If mu is large relative to d_0 and sd_0 then the Givens rotation will have no effect, leading to an infinite loop. We set mu to zero in this case, which at least diagonalises the submatrix [d_0, sd_0 ; sd_0, d_0] and allows further progress. */ if (GSL_DBL_EPSILON * fabs(mu) > (fabs(d[0]) + fabs(sd[0]))) { mu = 0; } x = d[0] - mu; z = sd[0]; ak = 0; bk = 0; zk = 0; ap = d[0]; bp = sd[0]; aq = d[1]; if (n == 2) { double c, s; create_givens (x, z, &c, &s); if (gc != NULL) gc[0] = c; if (gs != NULL) gs[0] = s; { double ap1 = c * (c * ap - s * bp) + s * (s * aq - c * bp); double bp1 = c * (s * ap + c * bp) - s * (s * bp + c * aq); double aq1 = s * (s * ap + c * bp) + c * (s * bp + c * aq); ak = ap1; bk = bp1; ap = aq1; } d[0] = ak; sd[0] = bk; d[1] = ap; return; } bq = sd[1]; for (k = 0; k < n - 1; k++) { double c, s; create_givens (x, z, &c, &s); /* store Givens rotation */ if (gc != NULL) gc[k] = c; if (gs != NULL) gs[k] = s; /* compute G' T G */ { double bk1 = c * bk - s * zk; double ap1 = c * (c * ap - s * bp) + s * (s * aq - c * bp); double bp1 = c * (s * ap + c * bp) - s * (s * bp + c * aq); double zp1 = -s * bq; double aq1 = s * (s * ap + c * bp) + c * (s * bp + c * aq); double bq1 = c * bq; ak = ap1; bk = bp1; zk = zp1; ap = aq1; bp = bq1; if (k < n - 2) aq = d[k + 2]; if (k < n - 3) bq = sd[k + 2]; d[k] = ak; if (k > 0) sd[k - 1] = bk1; if (k < n - 2) sd[k + 1] = bp; x = bk; z = zk; } } /* k = n - 1 */ d[k] = ap; sd[k - 1] = bk; } gsl/eigen/ChangeLog0000644000175000017500000001055413536674414012600 0ustar eddedd2011-03-27 Brian Gough * jacobi.c (norm): compute norm of off-diagonal elements only as per algorithm 8.4.3 in Golub and van Loan 2009-11-26 Brian Gough * qrstep.c (qrstep): handle the case where |mu| >> |d0| + |sd0| to prevent infinite loop 2009-07-09 Brian Gough * symmv.c (gsl_eigen_symmv_free): handle NULL argument in free * symm.c (gsl_eigen_symm_free): handle NULL argument in free * nonsymmv.c (gsl_eigen_nonsymmv_free): handle NULL argument in free * nonsymm.c (gsl_eigen_nonsymm_free): handle NULL argument in free * hermv.c (gsl_eigen_hermv_free): handle NULL argument in free * herm.c (gsl_eigen_herm_free): handle NULL argument in free * genv.c (gsl_eigen_genv_free): handle NULL argument in free * gensymmv.c (gsl_eigen_gensymmv_free): handle NULL argument in free * gensymm.c (gsl_eigen_gensymm_free): handle NULL argument in free * genhermv.c (gsl_eigen_genhermv_free): handle NULL argument in free * genherm.c (gsl_eigen_genherm_free): handle NULL argument in free * gen.c (gsl_eigen_gen_free): handle NULL argument in free * francis.c (gsl_eigen_francis_free): handle NULL argument in free 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2007-08-30 Brian Gough * test.c (test_eigen_symm): added new test case for underflow * qrstep.c (trailing_eigenvalue): handle underflow for small tab, also handle dt==0 directly. 2007-07-30 Brian Gough * testgen.c (main): use gsl_finite instead of finite 2006-09-14 Brian Gough * test.c (test_eigen_symm): fix duplicate VAL_DESC to ABS_DESC (test_eigen_herm): fix duplicate VAL_DESC to ABS_DESC 2006-08-14 Brian Gough * unsymm.c (gsl_eigen_unsymm): support for unsymmetric matrices (P.Alken) 2006-04-18 Brian Gough * test.c (test_eigenvalues): increase error bound 2006-03-26 Brian Gough * jacobi.c (gsl_eigen_invert_jacobi): use unsigned int for nrot consistently 2005-08-22 Brian Gough * test.c (test_eigenvalues): increased test tolerance 2004-12-03 Brian Gough * jacobi.c (gsl_eigen_jacobi): use algorithm from Golub and Van Loan (gsl_eigen_invert_jacobi): new code 2003-01-02 Brian Gough * symmv.c (gsl_eigen_symmv): change gsl_isnan to isnan * symm.c (gsl_eigen_symm): change gsl_isnan to isnan * hermv.c (gsl_eigen_hermv): change gsl_isnan to isnan * herm.c (gsl_eigen_herm): change gsl_isnan to isnan 2002-11-16 Brian Gough * symm.c (gsl_eigen_symm): prevent infinite loop for NaNs * herm.c (gsl_eigen_herm): prevent infinite loop for NaNs * symmv.c (gsl_eigen_symmv): prevent infinite loop for NaNs * hermv.c (gsl_eigen_hermv): prevent infinite loop for NaNs Fri Oct 18 17:58:35 2002 Brian Gough * test.c (main): added test cases to catch division by zero (beta_r=0) in householdercomplex.c Wed Aug 28 19:05:54 2002 Brian Gough * Makefile.am (test_LDADD): fix link order to have libgslsys near end Thu Aug 2 18:17:58 2001 Brian Gough * hermv.c (gsl_eigen_hermv): fixed index bug in accumulation of evec. * symmv.c (gsl_eigen_symmv): fixed index bug in accumulation of evec. * test.c (main): added two new test cases * qrstep.c (trailing_eigenvalue): chose better value of mu when dt=0, prevents infinite loop. Sun Jul 1 22:43:45 2001 Brian Gough * modified to use new-style vector views Wed Jun 20 12:30:38 2001 Brian Gough * hermv.c (gsl_eigen_hermv): additional workspace argument no longer required Mon Apr 23 10:31:01 2001 Brian Gough * unified error handling conventions to _e for error handling functions and no suffix for plain functions, so _impl functions are no longer needed. * removed tests for EFAULT, since EFAULT should only apply to invalid non-null pointers. Fri Apr 13 20:33:18 2001 Brian Gough * eigen/test.c (test_invert_jacobi): removed matmult and replaced by gsl_blas_dgemm gsl/eigen/genv.c0000644000175000017500000007013713536674414012134 0ustar eddedd/* eigen/genv.c * * Copyright (C) 2007 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include /* * This module computes the eigenvalues and eigenvectors of a * real generalized eigensystem A x = \lambda B x. Left and right * Schur vectors are optionally computed as well. * * This file contains routines based on original code from LAPACK * which is distributed under the modified BSD license. */ static int genv_get_right_eigenvectors(const gsl_matrix *S, const gsl_matrix *T, gsl_matrix *Z, gsl_matrix_complex *evec, gsl_eigen_genv_workspace *w); static void genv_normalize_eigenvectors(gsl_vector_complex *alpha, gsl_matrix_complex *evec); /* gsl_eigen_genv_alloc() Allocate a workspace for solving the generalized eigenvalue problem. The size of this workspace is O(7n). Inputs: n - size of matrices Return: pointer to workspace */ gsl_eigen_genv_workspace * gsl_eigen_genv_alloc(const size_t n) { gsl_eigen_genv_workspace *w; if (n == 0) { GSL_ERROR_NULL ("matrix dimension must be positive integer", GSL_EINVAL); } w = (gsl_eigen_genv_workspace *) calloc (1, sizeof (gsl_eigen_genv_workspace)); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->size = n; w->Q = NULL; w->Z = NULL; w->gen_workspace_p = gsl_eigen_gen_alloc(n); if (w->gen_workspace_p == 0) { gsl_eigen_genv_free(w); GSL_ERROR_NULL ("failed to allocate space for gen workspace", GSL_ENOMEM); } /* compute the full Schur forms */ gsl_eigen_gen_params(1, 1, 1, w->gen_workspace_p); w->work1 = gsl_vector_alloc(n); w->work2 = gsl_vector_alloc(n); w->work3 = gsl_vector_alloc(n); w->work4 = gsl_vector_alloc(n); w->work5 = gsl_vector_alloc(n); w->work6 = gsl_vector_alloc(n); if (w->work1 == 0 || w->work2 == 0 || w->work3 == 0 || w->work4 == 0 || w->work5 == 0 || w->work6 == 0) { gsl_eigen_genv_free(w); GSL_ERROR_NULL ("failed to allocate space for additional workspace", GSL_ENOMEM); } return (w); } /* gsl_eigen_genv_alloc() */ /* gsl_eigen_genv_free() Free workspace w */ void gsl_eigen_genv_free(gsl_eigen_genv_workspace *w) { RETURN_IF_NULL (w); if (w->gen_workspace_p) gsl_eigen_gen_free(w->gen_workspace_p); if (w->work1) gsl_vector_free(w->work1); if (w->work2) gsl_vector_free(w->work2); if (w->work3) gsl_vector_free(w->work3); if (w->work4) gsl_vector_free(w->work4); if (w->work5) gsl_vector_free(w->work5); if (w->work6) gsl_vector_free(w->work6); free(w); } /* gsl_eigen_genv_free() */ /* gsl_eigen_genv() Solve the generalized eigenvalue problem A x = \lambda B x for the eigenvalues \lambda and right eigenvectors x. Inputs: A - general real matrix B - general real matrix alpha - (output) where to store eigenvalue numerators beta - (output) where to store eigenvalue denominators evec - (output) where to store eigenvectors w - workspace Return: success or error */ int gsl_eigen_genv (gsl_matrix * A, gsl_matrix * B, gsl_vector_complex * alpha, gsl_vector * beta, gsl_matrix_complex *evec, gsl_eigen_genv_workspace * w) { const size_t N = A->size1; /* check matrix and vector sizes */ if (N != A->size2) { GSL_ERROR ("matrix must be square to compute eigenvalues", GSL_ENOTSQR); } else if ((N != B->size1) || (N != B->size2)) { GSL_ERROR ("B matrix dimensions must match A", GSL_EBADLEN); } else if (alpha->size != N || beta->size != N) { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } else if (w->size != N) { GSL_ERROR ("matrix size does not match workspace", GSL_EBADLEN); } else if (evec->size1 != N) { GSL_ERROR ("eigenvector matrix has wrong size", GSL_EBADLEN); } else { int s; gsl_matrix Z; /* * We need a place to store the right Schur vectors, so we will * treat evec as a real matrix and store them in the left * half - the factor of 2 in the tda corresponds to the * complex multiplicity */ Z.size1 = N; Z.size2 = N; Z.tda = 2 * N; Z.data = evec->data; Z.block = 0; Z.owner = 0; s = gsl_eigen_gen_QZ(A, B, alpha, beta, w->Q, &Z, w->gen_workspace_p); if (w->Z) { /* save right Schur vectors */ gsl_matrix_memcpy(w->Z, &Z); } /* only compute eigenvectors if we found all eigenvalues */ if (s == GSL_SUCCESS) { /* compute eigenvectors */ s = genv_get_right_eigenvectors(A, B, &Z, evec, w); if (s == GSL_SUCCESS) genv_normalize_eigenvectors(alpha, evec); } return s; } } /* gsl_eigen_genv() */ /* gsl_eigen_genv_QZ() Solve the generalized eigenvalue problem A x = \lambda B x for the eigenvalues \lambda and right eigenvectors x. Optionally compute left and/or right Schur vectors Q and Z which satisfy: A = Q S Z^t B = Q T Z^t where (S, T) is the generalized Schur form of (A, B) Inputs: A - general real matrix B - general real matrix alpha - (output) where to store eigenvalue numerators beta - (output) where to store eigenvalue denominators evec - (output) where to store eigenvectors Q - (output) if non-null, where to store left Schur vectors Z - (output) if non-null, where to store right Schur vectors w - workspace Return: success or error */ int gsl_eigen_genv_QZ (gsl_matrix * A, gsl_matrix * B, gsl_vector_complex * alpha, gsl_vector * beta, gsl_matrix_complex * evec, gsl_matrix * Q, gsl_matrix * Z, gsl_eigen_genv_workspace * w) { if (Q && (A->size1 != Q->size1 || A->size1 != Q->size2)) { GSL_ERROR("Q matrix has wrong dimensions", GSL_EBADLEN); } else if (Z && (A->size1 != Z->size1 || A->size1 != Z->size2)) { GSL_ERROR("Z matrix has wrong dimensions", GSL_EBADLEN); } else { int s; w->Q = Q; w->Z = Z; s = gsl_eigen_genv(A, B, alpha, beta, evec, w); w->Q = NULL; w->Z = NULL; return s; } } /* gsl_eigen_genv_QZ() */ /******************************************** * INTERNAL ROUTINES * ********************************************/ /* genv_get_right_eigenvectors() Compute right eigenvectors of the Schur form (S, T) and then backtransform them using the right Schur vectors to get right eigenvectors of the original system. Inputs: S - upper quasi-triangular Schur form of A T - upper triangular Schur form of B Z - right Schur vectors evec - (output) where to store eigenvectors w - workspace Return: success or error Notes: 1) based on LAPACK routine DTGEVC 2) eigenvectors are stored in the order that their eigenvalues appear in the Schur form */ static int genv_get_right_eigenvectors(const gsl_matrix *S, const gsl_matrix *T, gsl_matrix *Z, gsl_matrix_complex *evec, gsl_eigen_genv_workspace *w) { const size_t N = w->size; const double small = GSL_DBL_MIN * N / GSL_DBL_EPSILON; const double big = 1.0 / small; const double bignum = 1.0 / (GSL_DBL_MIN * N); size_t i, j, k, end; int is; double anorm, bnorm; double temp, temp2, temp2r, temp2i; double ascale, bscale; double salfar, sbeta; double acoef, bcoefr, bcoefi, acoefa, bcoefa; double creala, cimaga, crealb, cimagb, cre2a, cim2a, cre2b, cim2b; double dmin, xmax; double scale; size_t nw, na; int lsa, lsb; int complex_pair; gsl_complex z_zero, z_one; double bdiag[2] = { 0.0, 0.0 }; double sum[4]; int il2by2; size_t jr, jc, ja; double xscale; gsl_vector_complex_view ecol; gsl_vector_view re, im, re2, im2; GSL_SET_COMPLEX(&z_zero, 0.0, 0.0); GSL_SET_COMPLEX(&z_one, 1.0, 0.0); /* * Compute the 1-norm of each column of (S, T) excluding elements * belonging to the diagonal blocks to check for possible overflow * in the triangular solver */ anorm = fabs(gsl_matrix_get(S, 0, 0)); if (N > 1) anorm += fabs(gsl_matrix_get(S, 1, 0)); bnorm = fabs(gsl_matrix_get(T, 0, 0)); gsl_vector_set(w->work1, 0, 0.0); gsl_vector_set(w->work2, 0, 0.0); for (j = 1; j < N; ++j) { temp = temp2 = 0.0; if (gsl_matrix_get(S, j, j - 1) == 0.0) end = j; else end = j - 1; for (i = 0; i < end; ++i) { temp += fabs(gsl_matrix_get(S, i, j)); temp2 += fabs(gsl_matrix_get(T, i, j)); } gsl_vector_set(w->work1, j, temp); gsl_vector_set(w->work2, j, temp2); for (i = end; i < GSL_MIN(j + 2, N); ++i) { temp += fabs(gsl_matrix_get(S, i, j)); temp2 += fabs(gsl_matrix_get(T, i, j)); } anorm = GSL_MAX(anorm, temp); bnorm = GSL_MAX(bnorm, temp2); } ascale = 1.0 / GSL_MAX(anorm, GSL_DBL_MIN); bscale = 1.0 / GSL_MAX(bnorm, GSL_DBL_MIN); complex_pair = 0; for (k = 0; k < N; ++k) { size_t je = N - 1 - k; if (complex_pair) { complex_pair = 0; continue; } nw = 1; if (je > 0) { if (gsl_matrix_get(S, je, je - 1) != 0.0) { complex_pair = 1; nw = 2; } } if (!complex_pair) { if (fabs(gsl_matrix_get(S, je, je)) <= GSL_DBL_MIN && fabs(gsl_matrix_get(T, je, je)) <= GSL_DBL_MIN) { /* singular matrix pencil - unit eigenvector */ for (i = 0; i < N; ++i) gsl_matrix_complex_set(evec, i, je, z_zero); gsl_matrix_complex_set(evec, je, je, z_one); continue; } /* clear vector */ for (i = 0; i < N; ++i) gsl_vector_set(w->work3, i, 0.0); } else { /* clear vectors */ for (i = 0; i < N; ++i) { gsl_vector_set(w->work3, i, 0.0); gsl_vector_set(w->work4, i, 0.0); } } if (!complex_pair) { /* real eigenvalue */ temp = 1.0 / GSL_MAX(GSL_DBL_MIN, GSL_MAX(fabs(gsl_matrix_get(S, je, je)) * ascale, fabs(gsl_matrix_get(T, je, je)) * bscale)); salfar = (temp * gsl_matrix_get(S, je, je)) * ascale; sbeta = (temp * gsl_matrix_get(T, je, je)) * bscale; acoef = sbeta * ascale; bcoefr = salfar * bscale; bcoefi = 0.0; /* scale to avoid underflow */ scale = 1.0; lsa = fabs(sbeta) >= GSL_DBL_MIN && fabs(acoef) < small; lsb = fabs(salfar) >= GSL_DBL_MIN && fabs(bcoefr) < small; if (lsa) scale = (small / fabs(sbeta)) * GSL_MIN(anorm, big); if (lsb) scale = GSL_MAX(scale, (small / fabs(salfar)) * GSL_MIN(bnorm, big)); if (lsa || lsb) { scale = GSL_MIN(scale, 1.0 / (GSL_DBL_MIN * GSL_MAX(1.0, GSL_MAX(fabs(acoef), fabs(bcoefr))))); if (lsa) acoef = ascale * (scale * sbeta); else acoef *= scale; if (lsb) bcoefr = bscale * (scale * salfar); else bcoefr *= scale; } acoefa = fabs(acoef); bcoefa = fabs(bcoefr); /* first component is 1 */ gsl_vector_set(w->work3, je, 1.0); xmax = 1.0; /* compute contribution from column je of A and B to sum */ for (i = 0; i < je; ++i) { gsl_vector_set(w->work3, i, bcoefr*gsl_matrix_get(T, i, je) - acoef * gsl_matrix_get(S, i, je)); } } else { gsl_matrix_const_view vs = gsl_matrix_const_submatrix(S, je - 1, je - 1, 2, 2); gsl_matrix_const_view vt = gsl_matrix_const_submatrix(T, je - 1, je - 1, 2, 2); /* complex eigenvalue */ gsl_schur_gen_eigvals(&vs.matrix, &vt.matrix, &bcoefr, &temp2, &bcoefi, &acoef, &temp); if (bcoefi == 0.0) { GSL_ERROR("gsl_schur_gen_eigvals failed on complex block", GSL_FAILURE); } /* scale to avoid over/underflow */ acoefa = fabs(acoef); bcoefa = fabs(bcoefr) + fabs(bcoefi); scale = 1.0; if (acoefa*GSL_DBL_EPSILON < GSL_DBL_MIN && acoefa >= GSL_DBL_MIN) scale = (GSL_DBL_MIN / GSL_DBL_EPSILON) / acoefa; if (bcoefa*GSL_DBL_EPSILON < GSL_DBL_MIN && bcoefa >= GSL_DBL_MIN) scale = GSL_MAX(scale, (GSL_DBL_MIN/GSL_DBL_EPSILON) / bcoefa); if (GSL_DBL_MIN*acoefa > ascale) scale = ascale / (GSL_DBL_MIN * acoefa); if (GSL_DBL_MIN*bcoefa > bscale) scale = GSL_MIN(scale, bscale / (GSL_DBL_MIN*bcoefa)); if (scale != 1.0) { acoef *= scale; acoefa = fabs(acoef); bcoefr *= scale; bcoefi *= scale; bcoefa = fabs(bcoefr) + fabs(bcoefi); } /* compute first two components of eigenvector */ temp = acoef * gsl_matrix_get(S, je, je - 1); temp2r = acoef * gsl_matrix_get(S, je, je) - bcoefr * gsl_matrix_get(T, je, je); temp2i = -bcoefi * gsl_matrix_get(T, je, je); if (fabs(temp) >= fabs(temp2r) + fabs(temp2i)) { gsl_vector_set(w->work3, je, 1.0); gsl_vector_set(w->work4, je, 0.0); gsl_vector_set(w->work3, je - 1, -temp2r / temp); gsl_vector_set(w->work4, je - 1, -temp2i / temp); } else { gsl_vector_set(w->work3, je - 1, 1.0); gsl_vector_set(w->work4, je - 1, 0.0); temp = acoef * gsl_matrix_get(S, je - 1, je); gsl_vector_set(w->work3, je, (bcoefr*gsl_matrix_get(T, je - 1, je - 1) - acoef*gsl_matrix_get(S, je - 1, je - 1)) / temp); gsl_vector_set(w->work4, je, bcoefi*gsl_matrix_get(T, je - 1, je - 1) / temp); } xmax = GSL_MAX(fabs(gsl_vector_get(w->work3, je)) + fabs(gsl_vector_get(w->work4, je)), fabs(gsl_vector_get(w->work3, je - 1)) + fabs(gsl_vector_get(w->work4, je - 1))); /* compute contribution from column je and je - 1 */ creala = acoef * gsl_vector_get(w->work3, je - 1); cimaga = acoef * gsl_vector_get(w->work4, je - 1); crealb = bcoefr * gsl_vector_get(w->work3, je - 1) - bcoefi * gsl_vector_get(w->work4, je - 1); cimagb = bcoefi * gsl_vector_get(w->work3, je - 1) + bcoefr * gsl_vector_get(w->work4, je - 1); cre2a = acoef * gsl_vector_get(w->work3, je); cim2a = acoef * gsl_vector_get(w->work4, je); cre2b = bcoefr * gsl_vector_get(w->work3, je) - bcoefi * gsl_vector_get(w->work4, je); cim2b = bcoefi * gsl_vector_get(w->work3, je) + bcoefr * gsl_vector_get(w->work4, je); for (i = 0; i < je - 1; ++i) { gsl_vector_set(w->work3, i, -creala * gsl_matrix_get(S, i, je - 1) + crealb * gsl_matrix_get(T, i, je - 1) - cre2a * gsl_matrix_get(S, i, je) + cre2b * gsl_matrix_get(T, i, je)); gsl_vector_set(w->work4, i, -cimaga * gsl_matrix_get(S, i, je - 1) + cimagb * gsl_matrix_get(T, i, je - 1) - cim2a * gsl_matrix_get(S, i, je) + cim2b * gsl_matrix_get(T, i, je)); } } dmin = GSL_MAX(GSL_DBL_MIN, GSL_MAX(GSL_DBL_EPSILON*acoefa*anorm, GSL_DBL_EPSILON*bcoefa*bnorm)); /* triangular solve of (a A - b B) x = 0 */ il2by2 = 0; for (is = (int) je - (int) nw; is >= 0; --is) { j = (size_t) is; if (!il2by2 && j > 0) { if (gsl_matrix_get(S, j, j - 1) != 0.0) { il2by2 = 1; continue; } } bdiag[0] = gsl_matrix_get(T, j, j); if (il2by2) { na = 2; bdiag[1] = gsl_matrix_get(T, j + 1, j + 1); } else na = 1; if (nw == 1) { gsl_matrix_const_view sv = gsl_matrix_const_submatrix(S, j, j, na, na); gsl_vector_view xv, bv; bv = gsl_vector_subvector(w->work3, j, na); /* * the loop below expects the solution in the first column * of sum, so set stride to 2 */ xv = gsl_vector_view_array_with_stride(sum, 2, na); gsl_schur_solve_equation(acoef, &sv.matrix, bcoefr, bdiag[0], bdiag[1], &bv.vector, &xv.vector, &scale, &temp, dmin); } else { double bdat[4]; gsl_matrix_const_view sv = gsl_matrix_const_submatrix(S, j, j, na, na); gsl_vector_complex_view xv = gsl_vector_complex_view_array(sum, na); gsl_vector_complex_view bv = gsl_vector_complex_view_array(bdat, na); gsl_complex z; bdat[0] = gsl_vector_get(w->work3, j); bdat[1] = gsl_vector_get(w->work4, j); if (na == 2) { bdat[2] = gsl_vector_get(w->work3, j + 1); bdat[3] = gsl_vector_get(w->work4, j + 1); } GSL_SET_COMPLEX(&z, bcoefr, bcoefi); gsl_schur_solve_equation_z(acoef, &sv.matrix, &z, bdiag[0], bdiag[1], &bv.vector, &xv.vector, &scale, &temp, dmin); } if (scale < 1.0) { for (jr = 0; jr <= je; ++jr) { gsl_vector_set(w->work3, jr, scale * gsl_vector_get(w->work3, jr)); if (nw == 2) { gsl_vector_set(w->work4, jr, scale * gsl_vector_get(w->work4, jr)); } } } xmax = GSL_MAX(scale * xmax, temp); for (jr = 0; jr < na; ++jr) { gsl_vector_set(w->work3, j + jr, sum[jr*na]); if (nw == 2) gsl_vector_set(w->work4, j + jr, sum[jr*na + 1]); } if (j > 0) { xscale = 1.0 / GSL_MAX(1.0, xmax); temp = acoefa * gsl_vector_get(w->work1, j) + bcoefa * gsl_vector_get(w->work2, j); if (il2by2) { temp = GSL_MAX(temp, acoefa * gsl_vector_get(w->work1, j + 1) + bcoefa * gsl_vector_get(w->work2, j + 1)); } temp = GSL_MAX(temp, GSL_MAX(acoefa, bcoefa)); if (temp > bignum * xscale) { for (jr = 0; jr <= je; ++jr) { gsl_vector_set(w->work3, jr, xscale * gsl_vector_get(w->work3, jr)); if (nw == 2) { gsl_vector_set(w->work4, jr, xscale * gsl_vector_get(w->work4, jr)); } } xmax *= xscale; } for (ja = 0; ja < na; ++ja) { if (complex_pair) { creala = acoef * gsl_vector_get(w->work3, j + ja); cimaga = acoef * gsl_vector_get(w->work4, j + ja); crealb = bcoefr * gsl_vector_get(w->work3, j + ja) - bcoefi * gsl_vector_get(w->work4, j + ja); cimagb = bcoefi * gsl_vector_get(w->work3, j + ja) + bcoefr * gsl_vector_get(w->work4, j + ja); for (jr = 0; jr <= j - 1; ++jr) { gsl_vector_set(w->work3, jr, gsl_vector_get(w->work3, jr) - creala * gsl_matrix_get(S, jr, j + ja) + crealb * gsl_matrix_get(T, jr, j + ja)); gsl_vector_set(w->work4, jr, gsl_vector_get(w->work4, jr) - cimaga * gsl_matrix_get(S, jr, j + ja) + cimagb * gsl_matrix_get(T, jr, j + ja)); } } else { creala = acoef * gsl_vector_get(w->work3, j + ja); crealb = bcoefr * gsl_vector_get(w->work3, j + ja); for (jr = 0; jr <= j - 1; ++jr) { gsl_vector_set(w->work3, jr, gsl_vector_get(w->work3, jr) - creala * gsl_matrix_get(S, jr, j + ja) + crealb * gsl_matrix_get(T, jr, j + ja)); } } /* if (!complex_pair) */ } /* for (ja = 0; ja < na; ++ja) */ } /* if (j > 0) */ il2by2 = 0; } /* for (i = 0; i < je - nw; ++i) */ for (jr = 0; jr < N; ++jr) { gsl_vector_set(w->work5, jr, gsl_vector_get(w->work3, 0) * gsl_matrix_get(Z, jr, 0)); if (nw == 2) { gsl_vector_set(w->work6, jr, gsl_vector_get(w->work4, 0) * gsl_matrix_get(Z, jr, 0)); } } for (jc = 1; jc <= je; ++jc) { for (jr = 0; jr < N; ++jr) { gsl_vector_set(w->work5, jr, gsl_vector_get(w->work5, jr) + gsl_vector_get(w->work3, jc) * gsl_matrix_get(Z, jr, jc)); if (nw == 2) { gsl_vector_set(w->work6, jr, gsl_vector_get(w->work6, jr) + gsl_vector_get(w->work4, jc) * gsl_matrix_get(Z, jr, jc)); } } } /* store the eigenvector */ if (complex_pair) { ecol = gsl_matrix_complex_column(evec, je - 1); re = gsl_vector_complex_real(&ecol.vector); im = gsl_vector_complex_imag(&ecol.vector); ecol = gsl_matrix_complex_column(evec, je); re2 = gsl_vector_complex_real(&ecol.vector); im2 = gsl_vector_complex_imag(&ecol.vector); } else { ecol = gsl_matrix_complex_column(evec, je); re = gsl_vector_complex_real(&ecol.vector); im = gsl_vector_complex_imag(&ecol.vector); } for (jr = 0; jr < N; ++jr) { gsl_vector_set(&re.vector, jr, gsl_vector_get(w->work5, jr)); if (complex_pair) { gsl_vector_set(&im.vector, jr, gsl_vector_get(w->work6, jr)); gsl_vector_set(&re2.vector, jr, gsl_vector_get(w->work5, jr)); gsl_vector_set(&im2.vector, jr, -gsl_vector_get(w->work6, jr)); } else { gsl_vector_set(&im.vector, jr, 0.0); } } /* scale eigenvector */ xmax = 0.0; if (complex_pair) { for (j = 0; j < N; ++j) { xmax = GSL_MAX(xmax, fabs(gsl_vector_get(&re.vector, j)) + fabs(gsl_vector_get(&im.vector, j))); } } else { for (j = 0; j < N; ++j) { xmax = GSL_MAX(xmax, fabs(gsl_vector_get(&re.vector, j))); } } if (xmax > GSL_DBL_MIN) { xscale = 1.0 / xmax; for (j = 0; j < N; ++j) { gsl_vector_set(&re.vector, j, gsl_vector_get(&re.vector, j) * xscale); if (complex_pair) { gsl_vector_set(&im.vector, j, gsl_vector_get(&im.vector, j) * xscale); gsl_vector_set(&re2.vector, j, gsl_vector_get(&re2.vector, j) * xscale); gsl_vector_set(&im2.vector, j, gsl_vector_get(&im2.vector, j) * xscale); } } } } /* for (k = 0; k < N; ++k) */ return GSL_SUCCESS; } /* genv_get_right_eigenvectors() */ /* genv_normalize_eigenvectors() Normalize eigenvectors so that their Euclidean norm is 1 Inputs: alpha - eigenvalue numerators evec - eigenvectors */ static void genv_normalize_eigenvectors(gsl_vector_complex *alpha, gsl_matrix_complex *evec) { const size_t N = evec->size1; size_t i; /* looping */ gsl_complex ai; gsl_vector_complex_view vi; gsl_vector_view re, im; double scale; /* scaling factor */ for (i = 0; i < N; ++i) { ai = gsl_vector_complex_get(alpha, i); vi = gsl_matrix_complex_column(evec, i); re = gsl_vector_complex_real(&vi.vector); if (GSL_IMAG(ai) == 0.0) { scale = 1.0 / gsl_blas_dnrm2(&re.vector); gsl_blas_dscal(scale, &re.vector); } else if (GSL_IMAG(ai) > 0.0) { im = gsl_vector_complex_imag(&vi.vector); scale = 1.0 / gsl_hypot(gsl_blas_dnrm2(&re.vector), gsl_blas_dnrm2(&im.vector)); gsl_blas_zdscal(scale, &vi.vector); vi = gsl_matrix_complex_column(evec, i + 1); gsl_blas_zdscal(scale, &vi.vector); } } } /* genv_normalize_eigenvectors() */ gsl/eigen/Makefile.am0000644000175000017500000000141513536675317013061 0ustar eddeddnoinst_LTLIBRARIES = libgsleigen.la check_PROGRAMS = test pkginclude_HEADERS = gsl_eigen.h libgsleigen_la_SOURCES = jacobi.c symm.c symmv.c nonsymm.c nonsymmv.c herm.c hermv.c gensymm.c gensymmv.c genherm.c genhermv.c gen.c genv.c sort.c francis.c schur.c AM_CPPFLAGS = -I$(top_srcdir) noinst_HEADERS = recurse.h qrstep.c TESTS = $(check_PROGRAMS) test_LDADD = libgsleigen.la ../test/libgsltest.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la ../rng/libgslrng.la ../sort/libgslsort.la test_SOURCES = test.c gsl/eigen/francis.c0000644000175000017500000007166013536674414012624 0ustar eddedd/* eigen/francis.c * * Copyright (C) 2006, 2007 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include /* * This module computes the eigenvalues of a real upper hessenberg * matrix, using the classical double shift Francis QR algorithm. * It will also optionally compute the full Schur form and matrix of * Schur vectors. * * See Golub & Van Loan, "Matrix Computations" (3rd ed), * algorithm 7.5.2 */ /* exceptional shift coefficients - these values are from LAPACK DLAHQR */ #define GSL_FRANCIS_COEFF1 (0.75) #define GSL_FRANCIS_COEFF2 (-0.4375) static inline void francis_schur_decomp(gsl_matrix * H, gsl_vector_complex * eval, gsl_eigen_francis_workspace * w); static inline size_t francis_search_subdiag_small_elements(gsl_matrix * A); static inline int francis_qrstep(gsl_matrix * H, gsl_eigen_francis_workspace * w); static inline void francis_schur_standardize(gsl_matrix *A, gsl_complex *eval1, gsl_complex *eval2, gsl_eigen_francis_workspace *w); static inline size_t francis_get_submatrix(gsl_matrix *A, gsl_matrix *B); static void francis_standard_form(gsl_matrix *A, double *cs, double *sn); /* gsl_eigen_francis_alloc() Allocate a workspace for solving the nonsymmetric eigenvalue problem. The size of this workspace is O(1) Inputs: none Return: pointer to workspace */ gsl_eigen_francis_workspace * gsl_eigen_francis_alloc(void) { gsl_eigen_francis_workspace *w; w = (gsl_eigen_francis_workspace *) calloc (1, sizeof (gsl_eigen_francis_workspace)); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } /* these are filled in later */ w->size = 0; w->max_iterations = 0; w->n_iter = 0; w->n_evals = 0; w->compute_t = 0; w->Z = NULL; w->H = NULL; return (w); } /* gsl_eigen_francis_alloc() */ /* gsl_eigen_francis_free() Free francis workspace w */ void gsl_eigen_francis_free (gsl_eigen_francis_workspace *w) { RETURN_IF_NULL (w); free(w); } /* gsl_eigen_francis_free() */ /* gsl_eigen_francis_T() Called when we want to compute the Schur form T, or no longer compute the Schur form T Inputs: compute_t - 1 to compute T, 0 to not compute T w - francis workspace */ void gsl_eigen_francis_T (const int compute_t, gsl_eigen_francis_workspace *w) { w->compute_t = compute_t; } /* gsl_eigen_francis() Solve the nonsymmetric eigenvalue problem H x = \lambda x for the eigenvalues \lambda using algorithm 7.5.2 of Golub & Van Loan, "Matrix Computations" (3rd ed) Inputs: H - upper hessenberg matrix eval - where to store eigenvalues w - workspace Return: success or error - if error code is returned, then the QR procedure did not converge in the allowed number of iterations. In the event of non- convergence, the number of eigenvalues found will still be stored in the beginning of eval, Notes: On output, the diagonal of H contains 1-by-1 or 2-by-2 blocks containing the eigenvalues. If T is desired, H will contain the full Schur form on output. */ int gsl_eigen_francis (gsl_matrix * H, gsl_vector_complex * eval, gsl_eigen_francis_workspace * w) { /* check matrix and vector sizes */ if (H->size1 != H->size2) { GSL_ERROR ("matrix must be square to compute eigenvalues", GSL_ENOTSQR); } else if (eval->size != H->size1) { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } else { const size_t N = H->size1; int j; /* * Set internal parameters which depend on matrix size. * The Francis solver can be called with any size matrix * since the workspace does not depend on N. * Furthermore, multishift solvers which call the Francis * solver may need to call it with different sized matrices */ w->size = N; w->max_iterations = 30 * N; /* * save a pointer to original matrix since francis_schur_decomp * is recursive */ w->H = H; w->n_iter = 0; w->n_evals = 0; /* * zero out the first two subdiagonals (below the main subdiagonal) * needed as scratch space by the QR sweep routine */ for (j = 0; j < (int) N - 3; ++j) { gsl_matrix_set(H, (size_t) j + 2, (size_t) j, 0.0); gsl_matrix_set(H, (size_t) j + 3, (size_t) j, 0.0); } if (N > 2) gsl_matrix_set(H, N - 1, N - 3, 0.0); /* * compute Schur decomposition of H and store eigenvalues * into eval */ francis_schur_decomp(H, eval, w); if (w->n_evals != N) { GSL_ERROR ("maximum iterations reached without finding all eigenvalues", GSL_EMAXITER); } return GSL_SUCCESS; } } /* gsl_eigen_francis() */ /* gsl_eigen_francis_Z() Solve the nonsymmetric eigenvalue problem for a Hessenberg matrix H x = \lambda x for the eigenvalues \lambda using the Francis double-shift method. Here we compute the real Schur form T = Q^t H Q with the diagonal blocks of T giving us the eigenvalues. Q is the matrix of Schur vectors. Originally, H was obtained from a general nonsymmetric matrix A via a transformation H = U^t A U so that T = (UQ)^t A (UQ) = Z^t A Z Z is the matrix of Schur vectors computed by this algorithm Inputs: H - upper hessenberg matrix eval - where to store eigenvalues Z - where to store Schur vectors w - workspace Notes: 1) If T is computed, it is stored in H on output. Otherwise, the diagonal of H will contain 1-by-1 and 2-by-2 blocks containing the eigenvalues. 2) The matrix Z must be initialized to the Hessenberg similarity matrix U. Or if you want the eigenvalues of H, initialize Z to the identity matrix. */ int gsl_eigen_francis_Z (gsl_matrix * H, gsl_vector_complex * eval, gsl_matrix * Z, gsl_eigen_francis_workspace * w) { int s; /* set internal Z pointer so we know to accumulate transformations */ w->Z = Z; s = gsl_eigen_francis(H, eval, w); w->Z = NULL; return s; } /* gsl_eigen_francis_Z() */ /******************************************** * INTERNAL ROUTINES * ********************************************/ /* francis_schur_decomp() Compute the Schur decomposition of the matrix H Inputs: H - hessenberg matrix eval - where to store eigenvalues w - workspace Return: none */ static inline void francis_schur_decomp(gsl_matrix * H, gsl_vector_complex * eval, gsl_eigen_francis_workspace * w) { gsl_matrix_view m; /* active matrix we are working on */ size_t N; /* size of matrix */ size_t q; /* index of small subdiagonal element */ gsl_complex lambda1, /* eigenvalues */ lambda2; N = H->size1; m = gsl_matrix_submatrix(H, 0, 0, N, N); while ((N > 2) && ((w->n_iter)++ < w->max_iterations)) { q = francis_search_subdiag_small_elements(&m.matrix); if (q == 0) { /* * no small subdiagonal element found - perform a QR * sweep on the active reduced hessenberg matrix */ francis_qrstep(&m.matrix, w); continue; } /* * a small subdiagonal element was found - one or two eigenvalues * have converged or the matrix has split into two smaller matrices */ if (q == (N - 1)) { /* * the last subdiagonal element of the matrix is 0 - * m_{NN} is a real eigenvalue */ GSL_SET_COMPLEX(&lambda1, gsl_matrix_get(&m.matrix, q, q), 0.0); gsl_vector_complex_set(eval, w->n_evals, lambda1); w->n_evals += 1; w->n_iter = 0; --N; m = gsl_matrix_submatrix(&m.matrix, 0, 0, N, N); } else if (q == (N - 2)) { gsl_matrix_view v; /* * The bottom right 2-by-2 block of m is an eigenvalue * system */ v = gsl_matrix_submatrix(&m.matrix, q, q, 2, 2); francis_schur_standardize(&v.matrix, &lambda1, &lambda2, w); gsl_vector_complex_set(eval, w->n_evals, lambda1); gsl_vector_complex_set(eval, w->n_evals + 1, lambda2); w->n_evals += 2; w->n_iter = 0; N -= 2; m = gsl_matrix_submatrix(&m.matrix, 0, 0, N, N); } else if (q == 1) { /* the first matrix element is an eigenvalue */ GSL_SET_COMPLEX(&lambda1, gsl_matrix_get(&m.matrix, 0, 0), 0.0); gsl_vector_complex_set(eval, w->n_evals, lambda1); w->n_evals += 1; w->n_iter = 0; --N; m = gsl_matrix_submatrix(&m.matrix, 1, 1, N, N); } else if (q == 2) { gsl_matrix_view v; /* the upper left 2-by-2 block is an eigenvalue system */ v = gsl_matrix_submatrix(&m.matrix, 0, 0, 2, 2); francis_schur_standardize(&v.matrix, &lambda1, &lambda2, w); gsl_vector_complex_set(eval, w->n_evals, lambda1); gsl_vector_complex_set(eval, w->n_evals + 1, lambda2); w->n_evals += 2; w->n_iter = 0; N -= 2; m = gsl_matrix_submatrix(&m.matrix, 2, 2, N, N); } else { gsl_matrix_view v; /* * There is a zero element on the subdiagonal somewhere * in the middle of the matrix - we can now operate * separately on the two submatrices split by this * element. q is the row index of the zero element. */ /* operate on lower right (N - q)-by-(N - q) block first */ v = gsl_matrix_submatrix(&m.matrix, q, q, N - q, N - q); francis_schur_decomp(&v.matrix, eval, w); /* operate on upper left q-by-q block */ v = gsl_matrix_submatrix(&m.matrix, 0, 0, q, q); francis_schur_decomp(&v.matrix, eval, w); N = 0; } } /* handle special cases of N = 1 or 2 */ if (N == 1) { GSL_SET_COMPLEX(&lambda1, gsl_matrix_get(&m.matrix, 0, 0), 0.0); gsl_vector_complex_set(eval, w->n_evals, lambda1); w->n_evals += 1; w->n_iter = 0; } else if (N == 2) { francis_schur_standardize(&m.matrix, &lambda1, &lambda2, w); gsl_vector_complex_set(eval, w->n_evals, lambda1); gsl_vector_complex_set(eval, w->n_evals + 1, lambda2); w->n_evals += 2; w->n_iter = 0; } } /* francis_schur_decomp() */ /* francis_qrstep() Perform a Francis QR step. See Golub & Van Loan, "Matrix Computations" (3rd ed), algorithm 7.5.1 Inputs: H - upper Hessenberg matrix w - workspace Notes: The matrix H must be "reduced", ie: have no tiny subdiagonal elements. When computing the first householder reflection, we divide by H_{21} so it is necessary that this element is not zero. When a subdiagonal element becomes negligible, the calling function should call this routine with the submatrices split by that element, so that we don't divide by zeros. */ static inline int francis_qrstep(gsl_matrix * H, gsl_eigen_francis_workspace * w) { const size_t N = H->size1; size_t i; /* looping */ gsl_matrix_view m; double tau_i; /* householder coefficient */ double dat[3]; /* householder vector */ double scale; /* scale factor to avoid overflow */ gsl_vector_view v2, v3; size_t q, r; size_t top = 0; /* location of H in original matrix */ double s, disc; double h_nn, /* H(n,n) */ h_nm1nm1, /* H(n-1,n-1) */ h_cross, /* H(n,n-1) * H(n-1,n) */ h_tmp1, h_tmp2; v2 = gsl_vector_view_array(dat, 2); v3 = gsl_vector_view_array(dat, 3); if ((w->n_iter % 10) == 0) { /* * exceptional shifts: we have gone 10 iterations * without finding a new eigenvalue, try a new choice of shifts. * See LAPACK routine DLAHQR */ s = fabs(gsl_matrix_get(H, N - 1, N - 2)) + fabs(gsl_matrix_get(H, N - 2, N - 3)); h_nn = gsl_matrix_get(H, N - 1, N - 1) + GSL_FRANCIS_COEFF1 * s; h_nm1nm1 = h_nn; h_cross = GSL_FRANCIS_COEFF2 * s * s; } else { /* * normal shifts - compute Rayleigh quotient and use * Wilkinson shift if possible */ h_nn = gsl_matrix_get(H, N - 1, N - 1); h_nm1nm1 = gsl_matrix_get(H, N - 2, N - 2); h_cross = gsl_matrix_get(H, N - 1, N - 2) * gsl_matrix_get(H, N - 2, N - 1); disc = 0.5 * (h_nm1nm1 - h_nn); disc = disc * disc + h_cross; if (disc > 0.0) { double ave; /* real roots - use Wilkinson's shift twice */ disc = sqrt(disc); ave = 0.5 * (h_nm1nm1 + h_nn); if (fabs(h_nm1nm1) - fabs(h_nn) > 0.0) { h_nm1nm1 = h_nm1nm1 * h_nn - h_cross; h_nn = h_nm1nm1 / (disc * GSL_SIGN(ave) + ave); } else { h_nn = disc * GSL_SIGN(ave) + ave; } h_nm1nm1 = h_nn; h_cross = 0.0; } } h_tmp1 = h_nm1nm1 - gsl_matrix_get(H, 0, 0); h_tmp2 = h_nn - gsl_matrix_get(H, 0, 0); /* * These formulas are equivalent to those in Golub & Van Loan * for the normal shift case - the terms have been rearranged * to reduce possible roundoff error when subdiagonal elements * are small */ dat[0] = (h_tmp1*h_tmp2 - h_cross) / gsl_matrix_get(H, 1, 0) + gsl_matrix_get(H, 0, 1); dat[1] = gsl_matrix_get(H, 1, 1) - gsl_matrix_get(H, 0, 0) - h_tmp1 - h_tmp2; dat[2] = gsl_matrix_get(H, 2, 1); scale = fabs(dat[0]) + fabs(dat[1]) + fabs(dat[2]); if (scale != 0.0) { /* scale to prevent overflow or underflow */ dat[0] /= scale; dat[1] /= scale; dat[2] /= scale; } if (w->Z || w->compute_t) { /* * get absolute indices of this (sub)matrix relative to the * original Hessenberg matrix */ top = francis_get_submatrix(w->H, H); } for (i = 0; i < N - 2; ++i) { tau_i = gsl_linalg_householder_transform(&v3.vector); if (tau_i != 0.0) { /* q = max(1, i - 1) */ q = (1 > ((int)i - 1)) ? 0 : (i - 1); /* r = min(i + 3, N - 1) */ r = ((i + 3) < (N - 1)) ? (i + 3) : (N - 1); if (w->compute_t) { /* * We are computing the Schur form T, so we * need to transform the whole matrix H * * H -> P_k^t H P_k * * where P_k is the current Householder matrix */ /* apply left householder matrix (I - tau_i v v') to H */ m = gsl_matrix_submatrix(w->H, top + i, top + q, 3, w->size - top - q); gsl_linalg_householder_hm(tau_i, &v3.vector, &m.matrix); /* apply right householder matrix (I - tau_i v v') to H */ m = gsl_matrix_submatrix(w->H, 0, top + i, top + r + 1, 3); gsl_linalg_householder_mh(tau_i, &v3.vector, &m.matrix); } else { /* * We are not computing the Schur form T, so we * only need to transform the active block */ /* apply left householder matrix (I - tau_i v v') to H */ m = gsl_matrix_submatrix(H, i, q, 3, N - q); gsl_linalg_householder_hm(tau_i, &v3.vector, &m.matrix); /* apply right householder matrix (I - tau_i v v') to H */ m = gsl_matrix_submatrix(H, 0, i, r + 1, 3); gsl_linalg_householder_mh(tau_i, &v3.vector, &m.matrix); } if (w->Z) { /* accumulate the similarity transformation into Z */ m = gsl_matrix_submatrix(w->Z, 0, top + i, w->size, 3); gsl_linalg_householder_mh(tau_i, &v3.vector, &m.matrix); } } /* if (tau_i != 0.0) */ dat[0] = gsl_matrix_get(H, i + 1, i); dat[1] = gsl_matrix_get(H, i + 2, i); if (i < (N - 3)) { dat[2] = gsl_matrix_get(H, i + 3, i); } scale = fabs(dat[0]) + fabs(dat[1]) + fabs(dat[2]); if (scale != 0.0) { /* scale to prevent overflow or underflow */ dat[0] /= scale; dat[1] /= scale; dat[2] /= scale; } } /* for (i = 0; i < N - 2; ++i) */ scale = fabs(dat[0]) + fabs(dat[1]); if (scale != 0.0) { /* scale to prevent overflow or underflow */ dat[0] /= scale; dat[1] /= scale; } tau_i = gsl_linalg_householder_transform(&v2.vector); if (w->compute_t) { m = gsl_matrix_submatrix(w->H, top + N - 2, top + N - 3, 2, w->size - top - N + 3); gsl_linalg_householder_hm(tau_i, &v2.vector, &m.matrix); m = gsl_matrix_submatrix(w->H, 0, top + N - 2, top + N, 2); gsl_linalg_householder_mh(tau_i, &v2.vector, &m.matrix); } else { m = gsl_matrix_submatrix(H, N - 2, N - 3, 2, 3); gsl_linalg_householder_hm(tau_i, &v2.vector, &m.matrix); m = gsl_matrix_submatrix(H, 0, N - 2, N, 2); gsl_linalg_householder_mh(tau_i, &v2.vector, &m.matrix); } if (w->Z) { /* accumulate transformation into Z */ m = gsl_matrix_submatrix(w->Z, 0, top + N - 2, w->size, 2); gsl_linalg_householder_mh(tau_i, &v2.vector, &m.matrix); } return GSL_SUCCESS; } /* francis_qrstep() */ /* francis_search_subdiag_small_elements() Search for a small subdiagonal element starting from the bottom of a matrix A. A small element is one that satisfies: |A_{i,i-1}| <= eps * (|A_{i,i}| + |A_{i-1,i-1}|) Inputs: A - matrix (must be at least 3-by-3) Return: row index of small subdiagonal element or 0 if not found Notes: the first small element that is found (starting from bottom) is set to zero */ static inline size_t francis_search_subdiag_small_elements(gsl_matrix * A) { const size_t N = A->size1; size_t i; double dpel = gsl_matrix_get(A, N - 2, N - 2); for (i = N - 1; i > 0; --i) { double sel = gsl_matrix_get(A, i, i - 1); double del = gsl_matrix_get(A, i, i); if ((sel == 0.0) || (fabs(sel) < GSL_DBL_EPSILON * (fabs(del) + fabs(dpel)))) { gsl_matrix_set(A, i, i - 1, 0.0); return (i); } dpel = del; } return (0); } /* francis_search_subdiag_small_elements() */ /* francis_schur_standardize() Convert a 2-by-2 diagonal block in the Schur form to standard form and update the rest of T and Z matrices if required. Inputs: A - 2-by-2 matrix eval1 - where to store eigenvalue 1 eval2 - where to store eigenvalue 2 w - francis workspace */ static inline void francis_schur_standardize(gsl_matrix *A, gsl_complex *eval1, gsl_complex *eval2, gsl_eigen_francis_workspace *w) { const size_t N = w->size; double cs, sn; size_t top; /* * figure out where the submatrix A resides in the * original matrix H */ top = francis_get_submatrix(w->H, A); /* convert 2-by-2 block to standard form */ francis_standard_form(A, &cs, &sn); /* set eigenvalues */ GSL_SET_REAL(eval1, gsl_matrix_get(A, 0, 0)); GSL_SET_REAL(eval2, gsl_matrix_get(A, 1, 1)); if (gsl_matrix_get(A, 1, 0) == 0.0) { GSL_SET_IMAG(eval1, 0.0); GSL_SET_IMAG(eval2, 0.0); } else { double tmp = sqrt(fabs(gsl_matrix_get(A, 0, 1)) * fabs(gsl_matrix_get(A, 1, 0))); GSL_SET_IMAG(eval1, tmp); GSL_SET_IMAG(eval2, -tmp); } if (w->compute_t) { gsl_vector_view xv, yv; /* * The above call to francis_standard_form transformed a 2-by-2 block * of T into upper triangular form via the transformation * * U = [ CS -SN ] * [ SN CS ] * * The original matrix T was * * T = [ T_{11} | T_{12} | T_{13} ] * [ 0* | A | T_{23} ] * [ 0 | 0* | T_{33} ] * * where 0* indicates all zeros except for possibly * one subdiagonal element next to A. * * After francis_standard_form, T looks like this: * * T = [ T_{11} | T_{12} | T_{13} ] * [ 0* | U^t A U | T_{23} ] * [ 0 | 0* | T_{33} ] * * since only the 2-by-2 block of A was changed. However, * in order to be able to back transform T at the end, * we need to apply the U transformation to the rest * of the matrix T since there is no way to apply a * similarity transformation to T and change only the * middle 2-by-2 block. In other words, let * * M = [ I 0 0 ] * [ 0 U 0 ] * [ 0 0 I ] * * and compute * * M^t T M = [ T_{11} | T_{12} U | T_{13} ] * [ U^t 0* | U^t A U | U^t T_{23} ] * [ 0 | 0* U | T_{33} ] * * So basically we need to apply the transformation U * to the i x 2 matrix T_{12} and the 2 x (n - i + 2) * matrix T_{23}, where i is the index of the top of A * in T. * * The BLAS routine drot() is suited for this. */ if (top < (N - 2)) { /* transform the 2 rows of T_{23} */ xv = gsl_matrix_subrow(w->H, top, top + 2, N - top - 2); yv = gsl_matrix_subrow(w->H, top + 1, top + 2, N - top - 2); gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); } if (top > 0) { /* transform the 2 columns of T_{12} */ xv = gsl_matrix_subcolumn(w->H, top, 0, top); yv = gsl_matrix_subcolumn(w->H, top + 1, 0, top); gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); } } /* if (w->compute_t) */ if (w->Z) { gsl_vector_view xv, yv; /* * Accumulate the transformation in Z. Here, Z -> Z * M * * So: * * Z -> [ Z_{11} | Z_{12} U | Z_{13} ] * [ Z_{21} | Z_{22} U | Z_{23} ] * [ Z_{31} | Z_{32} U | Z_{33} ] * * So we just need to apply drot() to the 2 columns * starting at index 'top' */ xv = gsl_matrix_column(w->Z, top); yv = gsl_matrix_column(w->Z, top + 1); gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); } /* if (w->Z) */ } /* francis_schur_standardize() */ /* francis_get_submatrix() B is a submatrix of A. The goal of this function is to compute the indices in A of where the matrix B resides */ static inline size_t francis_get_submatrix(gsl_matrix *A, gsl_matrix *B) { size_t diff; double ratio; size_t top; diff = (size_t) (B->data - A->data); ratio = (double)diff / ((double) (A->tda + 1)); top = (size_t) floor(ratio); return top; } /* francis_get_submatrix() */ /* francis_standard_form() Compute the Schur factorization of a real 2-by-2 matrix in standard form: [ A B ] = [ CS -SN ] [ T11 T12 ] [ CS SN ] [ C D ] [ SN CS ] [ T21 T22 ] [-SN CS ] where either: 1) T21 = 0 so that T11 and T22 are real eigenvalues of the matrix, or 2) T11 = T22 and T21*T12 < 0, so that T11 +/- sqrt(|T21*T12|) are complex conjugate eigenvalues Inputs: A - 2-by-2 matrix cs - where to store cosine parameter of rotation matrix sn - where to store sine parameter of rotation matrix Notes: 1) based on LAPACK routine DLANV2 2) On output, A is modified to contain the matrix in standard form */ static void francis_standard_form(gsl_matrix *A, double *cs, double *sn) { double a, b, c, d; /* input matrix values */ double tmp; double p, z; double bcmax, bcmis, scale; double tau, sigma; double cs1, sn1; double aa, bb, cc, dd; double sab, sac; a = gsl_matrix_get(A, 0, 0); b = gsl_matrix_get(A, 0, 1); c = gsl_matrix_get(A, 1, 0); d = gsl_matrix_get(A, 1, 1); if (c == 0.0) { /* * matrix is already upper triangular - set rotation matrix * to the identity */ *cs = 1.0; *sn = 0.0; } else if (b == 0.0) { /* swap rows and columns to make it upper triangular */ *cs = 0.0; *sn = 1.0; tmp = d; d = a; a = tmp; b = -c; c = 0.0; } else if (((a - d) == 0.0) && (GSL_SIGN(b) != GSL_SIGN(c))) { /* the matrix has complex eigenvalues with a == d */ *cs = 1.0; *sn = 0.0; } else { tmp = a - d; p = 0.5 * tmp; bcmax = GSL_MAX(fabs(b), fabs(c)); bcmis = GSL_MIN(fabs(b), fabs(c)) * GSL_SIGN(b) * GSL_SIGN(c); scale = GSL_MAX(fabs(p), bcmax); z = (p / scale) * p + (bcmax / scale) * bcmis; if (z >= 4.0 * GSL_DBL_EPSILON) { /* real eigenvalues, compute a and d */ z = p + GSL_SIGN(p) * fabs(sqrt(scale) * sqrt(z)); a = d + z; d -= (bcmax / z) * bcmis; /* compute b and the rotation matrix */ tau = gsl_hypot(c, z); *cs = z / tau; *sn = c / tau; b -= c; c = 0.0; } else { /* * complex eigenvalues, or real (almost) equal eigenvalues - * make diagonal elements equal */ sigma = b + c; tau = gsl_hypot(sigma, tmp); *cs = sqrt(0.5 * (1.0 + fabs(sigma) / tau)); *sn = -(p / (tau * (*cs))) * GSL_SIGN(sigma); /* * Compute [ AA BB ] = [ A B ] [ CS -SN ] * [ CC DD ] [ C D ] [ SN CS ] */ aa = a * (*cs) + b * (*sn); bb = -a * (*sn) + b * (*cs); cc = c * (*cs) + d * (*sn); dd = -c * (*sn) + d * (*cs); /* * Compute [ A B ] = [ CS SN ] [ AA BB ] * [ C D ] [-SN CS ] [ CC DD ] */ a = aa * (*cs) + cc * (*sn); b = bb * (*cs) + dd * (*sn); c = -aa * (*sn) + cc * (*cs); d = -bb * (*sn) + dd * (*cs); tmp = 0.5 * (a + d); a = d = tmp; if (c != 0.0) { if (b != 0.0) { if (GSL_SIGN(b) == GSL_SIGN(c)) { /* * real eigenvalues: reduce to upper triangular * form */ sab = sqrt(fabs(b)); sac = sqrt(fabs(c)); p = GSL_SIGN(c) * fabs(sab * sac); tau = 1.0 / sqrt(fabs(b + c)); a = tmp + p; d = tmp - p; b -= c; c = 0.0; cs1 = sab * tau; sn1 = sac * tau; tmp = (*cs) * cs1 - (*sn) * sn1; *sn = (*cs) * sn1 + (*sn) * cs1; *cs = tmp; } } else { b = -c; c = 0.0; tmp = *cs; *cs = -(*sn); *sn = tmp; } } } } /* set new matrix elements */ gsl_matrix_set(A, 0, 0, a); gsl_matrix_set(A, 0, 1, b); gsl_matrix_set(A, 1, 0, c); gsl_matrix_set(A, 1, 1, d); } /* francis_standard_form() */ gsl/eigen/gen.c0000644000175000017500000016526413536674414011754 0ustar eddedd/* eigen/gen.c * * Copyright (C) 2006, 2007 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include /* * This module computes the eigenvalues of a real generalized * eigensystem A x = \lambda B x. Left and right Schur vectors * are optionally computed as well. * * Based on the algorithm from Moler and Stewart * [1] C. Moler, G. Stewart, "An Algorithm for Generalized Matrix * Eigenvalue Problems", SIAM J. Numer. Anal., Vol 10, No 2, 1973. * * This algorithm is also described in the book * [2] Golub & Van Loan, "Matrix Computations" (3rd ed), algorithm 7.7.3 * * This file contains routines based on original code from LAPACK * which is distributed under the modified BSD license. */ #define GEN_ESHIFT_COEFF (1.736) static void gen_schur_decomp(gsl_matrix *H, gsl_matrix *R, gsl_vector_complex *alpha, gsl_vector *beta, gsl_eigen_gen_workspace *w); static inline int gen_qzstep(gsl_matrix *H, gsl_matrix *R, gsl_eigen_gen_workspace *w); static inline void gen_qzstep_d(gsl_matrix *H, gsl_matrix *R, gsl_eigen_gen_workspace *w); static void gen_tri_split_top(gsl_matrix *H, gsl_matrix *R, gsl_eigen_gen_workspace *w); static inline void gen_tri_chase_zero(gsl_matrix *H, gsl_matrix *R, size_t q, gsl_eigen_gen_workspace *w); static inline void gen_tri_zero_H(gsl_matrix *H, gsl_matrix *R, gsl_eigen_gen_workspace *w); static inline size_t gen_search_small_elements(gsl_matrix *H, gsl_matrix *R, int *flag, gsl_eigen_gen_workspace *w); static int gen_schur_standardize1(gsl_matrix *A, gsl_matrix *B, double *alphar, double *beta, gsl_eigen_gen_workspace *w); static int gen_schur_standardize2(gsl_matrix *A, gsl_matrix *B, gsl_complex *alpha1, gsl_complex *alpha2, double *beta1, double *beta2, gsl_eigen_gen_workspace *w); static int gen_compute_eigenvals(gsl_matrix *A, gsl_matrix *B, gsl_complex *alpha1, gsl_complex *alpha2, double *beta1, double *beta2); static void gen_store_eigval1(const gsl_matrix *H, const double a, const double b, gsl_vector_complex *alpha, gsl_vector *beta, gsl_eigen_gen_workspace *w); static void gen_store_eigval2(const gsl_matrix *H, const gsl_complex *alpha1, const double beta1, const gsl_complex *alpha2, const double beta2, gsl_vector_complex *alpha, gsl_vector *beta, gsl_eigen_gen_workspace *w); static inline size_t gen_get_submatrix(const gsl_matrix *A, const gsl_matrix *B); /*FIX**/ inline static double normF (gsl_matrix * A); /* gsl_eigen_gen_alloc() Allocate a workspace for solving the generalized eigenvalue problem. The size of this workspace is O(n) Inputs: n - size of matrices Return: pointer to workspace */ gsl_eigen_gen_workspace * gsl_eigen_gen_alloc(const size_t n) { gsl_eigen_gen_workspace *w; if (n == 0) { GSL_ERROR_NULL ("matrix dimension must be positive integer", GSL_EINVAL); } w = (gsl_eigen_gen_workspace *) calloc (1, sizeof (gsl_eigen_gen_workspace)); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->size = n; w->max_iterations = 30 * n; w->n_evals = 0; w->n_iter = 0; w->needtop = 0; w->atol = 0.0; w->btol = 0.0; w->ascale = 0.0; w->bscale = 0.0; w->eshift = 0.0; w->H = NULL; w->R = NULL; w->compute_s = 0; w->compute_t = 0; w->Q = NULL; w->Z = NULL; w->work = gsl_vector_alloc(n); if (w->work == 0) { gsl_eigen_gen_free(w); GSL_ERROR_NULL ("failed to allocate space for additional workspace", GSL_ENOMEM); } return (w); } /* gsl_eigen_gen_alloc() */ /* gsl_eigen_gen_free() Free workspace w */ void gsl_eigen_gen_free (gsl_eigen_gen_workspace * w) { RETURN_IF_NULL (w); if (w->work) gsl_vector_free(w->work); free(w); } /* gsl_eigen_gen_free() */ /* gsl_eigen_gen_params() Set parameters which define how we solve the eigenvalue problem Inputs: compute_s - 1 if we want to compute S, 0 if not compute_t - 1 if we want to compute T, 0 if not balance - 1 if we want to balance matrices, 0 if not w - gen workspace Return: none */ void gsl_eigen_gen_params (const int compute_s, const int compute_t, const int balance, gsl_eigen_gen_workspace *w) { w->compute_s = compute_s; w->compute_t = compute_t; } /* gsl_eigen_gen_params() */ /* gsl_eigen_gen() Solve the generalized eigenvalue problem A x = \lambda B x for the eigenvalues \lambda. Inputs: A - general real matrix B - general real matrix alpha - where to store eigenvalue numerators beta - where to store eigenvalue denominators w - workspace Return: success or error */ int gsl_eigen_gen (gsl_matrix * A, gsl_matrix * B, gsl_vector_complex * alpha, gsl_vector * beta, gsl_eigen_gen_workspace * w) { const size_t N = A->size1; /* check matrix and vector sizes */ if (N != A->size2) { GSL_ERROR ("matrix must be square to compute eigenvalues", GSL_ENOTSQR); } else if ((N != B->size1) || (N != B->size2)) { GSL_ERROR ("B matrix dimensions must match A", GSL_EBADLEN); } else if (alpha->size != N || beta->size != N) { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } else if (w->size != N) { GSL_ERROR ("matrix size does not match workspace", GSL_EBADLEN); } else { double anorm, bnorm; /* compute the Hessenberg-Triangular reduction of (A, B) */ gsl_linalg_hesstri_decomp(A, B, w->Q, w->Z, w->work); /* save pointers to original matrices */ w->H = A; w->R = B; w->n_evals = 0; w->n_iter = 0; w->eshift = 0.0; /* determine if we need to compute top indices in QZ step */ w->needtop = w->Q != 0 || w->Z != 0 || w->compute_t || w->compute_s; /* compute matrix norms */ anorm = normF(A); bnorm = normF(B); /* compute tolerances and scaling factors */ w->atol = GSL_MAX(GSL_DBL_MIN, GSL_DBL_EPSILON * anorm); w->btol = GSL_MAX(GSL_DBL_MIN, GSL_DBL_EPSILON * bnorm); w->ascale = 1.0 / GSL_MAX(GSL_DBL_MIN, anorm); w->bscale = 1.0 / GSL_MAX(GSL_DBL_MIN, bnorm); /* compute the generalized Schur decomposition and eigenvalues */ gen_schur_decomp(A, B, alpha, beta, w); if (w->n_evals != N) return GSL_EMAXITER; return GSL_SUCCESS; } } /* gsl_eigen_gen() */ /* gsl_eigen_gen_QZ() Solve the generalized eigenvalue problem A x = \lambda B x for the eigenvalues \lambda. Optionally compute left and/or right Schur vectors Q and Z which satisfy: A = Q S Z^t B = Q T Z^t where (S, T) is the generalized Schur form of (A, B) Inputs: A - general real matrix B - general real matrix alpha - where to store eigenvalue numerators beta - where to store eigenvalue denominators Q - if non-null, where to store left Schur vectors Z - if non-null, where to store right Schur vectors w - workspace Return: success or error */ int gsl_eigen_gen_QZ (gsl_matrix * A, gsl_matrix * B, gsl_vector_complex * alpha, gsl_vector * beta, gsl_matrix * Q, gsl_matrix * Z, gsl_eigen_gen_workspace * w) { if (Q && (A->size1 != Q->size1 || A->size1 != Q->size2)) { GSL_ERROR("Q matrix has wrong dimensions", GSL_EBADLEN); } else if (Z && (A->size1 != Z->size1 || A->size1 != Z->size2)) { GSL_ERROR("Z matrix has wrong dimensions", GSL_EBADLEN); } else { int s; w->Q = Q; w->Z = Z; s = gsl_eigen_gen(A, B, alpha, beta, w); w->Q = NULL; w->Z = NULL; return s; } } /* gsl_eigen_gen_QZ() */ /******************************************** * INTERNAL ROUTINES * ********************************************/ /* gen_schur_decomp() Compute the generalized Schur decomposition of the matrix pencil (H, R) which is in Hessenberg-Triangular form Inputs: H - upper hessenberg matrix R - upper triangular matrix alpha - (output) where to store eigenvalue numerators beta - (output) where to store eigenvalue denominators w - workspace Return: none Notes: 1) w->n_evals is updated to keep track of how many eigenvalues are found */ static void gen_schur_decomp(gsl_matrix *H, gsl_matrix *R, gsl_vector_complex *alpha, gsl_vector *beta, gsl_eigen_gen_workspace *w) { size_t N; gsl_matrix_view h, r; gsl_matrix_view vh, vr; size_t q; /* index of small subdiagonal element */ gsl_complex z1, z2; /* complex values */ double a, b; int s; int flag; N = H->size1; h = gsl_matrix_submatrix(H, 0, 0, N, N); r = gsl_matrix_submatrix(R, 0, 0, N, N); while ((N > 1) && (w->n_iter)++ < w->max_iterations) { q = gen_search_small_elements(&h.matrix, &r.matrix, &flag, w); if (flag == 0) { /* no small elements found - do a QZ sweep */ s = gen_qzstep(&h.matrix, &r.matrix, w); if (s == GSL_CONTINUE) { /* * (h, r) is a 2-by-2 block with complex eigenvalues - * standardize and read off eigenvalues */ s = gen_schur_standardize2(&h.matrix, &r.matrix, &z1, &z2, &a, &b, w); if (s != GSL_SUCCESS) { /* * if we get here, then the standardization process * perturbed the eigenvalues onto the real line - * continue QZ iteration to break them into 1-by-1 * blocks */ continue; } gen_store_eigval2(&h.matrix, &z1, a, &z2, b, alpha, beta, w); N = 0; } /* if (s) */ continue; } /* if (flag == 0) */ else if (flag == 2) { if (q == 0) { /* * the leading element of R is zero, split off a block * at the top */ gen_tri_split_top(&h.matrix, &r.matrix, w); } else { /* * we found a small element on the diagonal of R - chase the * zero to the bottom of the active block and then zero * H(n, n - 1) to split off a 1-by-1 block */ if (q != N - 1) gen_tri_chase_zero(&h.matrix, &r.matrix, q, w); /* now zero H(n, n - 1) */ gen_tri_zero_H(&h.matrix, &r.matrix, w); } /* continue so the next iteration detects the zero in H */ continue; } /* * a small subdiagonal element of H was found - one or two * eigenvalues have converged or the matrix has split into * two smaller matrices */ if (q == (N - 1)) { /* * the last subdiagonal element of the hessenberg matrix is 0 - * H_{NN} / R_{NN} is a real eigenvalue - standardize so * R_{NN} > 0 */ vh = gsl_matrix_submatrix(&h.matrix, q, q, 1, 1); vr = gsl_matrix_submatrix(&r.matrix, q, q, 1, 1); gen_schur_standardize1(&vh.matrix, &vr.matrix, &a, &b, w); gen_store_eigval1(&vh.matrix, a, b, alpha, beta, w); --N; h = gsl_matrix_submatrix(&h.matrix, 0, 0, N, N); r = gsl_matrix_submatrix(&r.matrix, 0, 0, N, N); } else if (q == (N - 2)) { /* bottom right 2-by-2 block may have converged */ vh = gsl_matrix_submatrix(&h.matrix, q, q, 2, 2); vr = gsl_matrix_submatrix(&r.matrix, q, q, 2, 2); s = gen_schur_standardize2(&vh.matrix, &vr.matrix, &z1, &z2, &a, &b, w); if (s != GSL_SUCCESS) { /* * this 2-by-2 block contains real eigenvalues that * have not yet separated into 1-by-1 blocks - * recursively call gen_schur_decomp() to finish off * this block */ gen_schur_decomp(&vh.matrix, &vr.matrix, alpha, beta, w); } else { /* we got 2 complex eigenvalues */ gen_store_eigval2(&vh.matrix, &z1, a, &z2, b, alpha, beta, w); } N -= 2; h = gsl_matrix_submatrix(&h.matrix, 0, 0, N, N); r = gsl_matrix_submatrix(&r.matrix, 0, 0, N, N); } else if (q == 1) { /* H_{11} / R_{11} is an eigenvalue */ vh = gsl_matrix_submatrix(&h.matrix, 0, 0, 1, 1); vr = gsl_matrix_submatrix(&r.matrix, 0, 0, 1, 1); gen_schur_standardize1(&vh.matrix, &vr.matrix, &a, &b, w); gen_store_eigval1(&vh.matrix, a, b, alpha, beta, w); --N; h = gsl_matrix_submatrix(&h.matrix, 1, 1, N, N); r = gsl_matrix_submatrix(&r.matrix, 1, 1, N, N); } else if (q == 2) { /* upper left 2-by-2 block may have converged */ vh = gsl_matrix_submatrix(&h.matrix, 0, 0, 2, 2); vr = gsl_matrix_submatrix(&r.matrix, 0, 0, 2, 2); s = gen_schur_standardize2(&vh.matrix, &vr.matrix, &z1, &z2, &a, &b, w); if (s != GSL_SUCCESS) { /* * this 2-by-2 block contains real eigenvalues that * have not yet separated into 1-by-1 blocks - * recursively call gen_schur_decomp() to finish off * this block */ gen_schur_decomp(&vh.matrix, &vr.matrix, alpha, beta, w); } else { /* we got 2 complex eigenvalues */ gen_store_eigval2(&vh.matrix, &z1, a, &z2, b, alpha, beta, w); } N -= 2; h = gsl_matrix_submatrix(&h.matrix, 2, 2, N, N); r = gsl_matrix_submatrix(&r.matrix, 2, 2, N, N); } else { /* * There is a zero element on the subdiagonal somewhere * in the middle of the matrix - we can now operate * separately on the two submatrices split by this * element. q is the row index of the zero element. */ /* operate on lower right (N - q)-by-(N - q) block first */ vh = gsl_matrix_submatrix(&h.matrix, q, q, N - q, N - q); vr = gsl_matrix_submatrix(&r.matrix, q, q, N - q, N - q); gen_schur_decomp(&vh.matrix, &vr.matrix, alpha, beta, w); /* operate on upper left q-by-q block */ vh = gsl_matrix_submatrix(&h.matrix, 0, 0, q, q); vr = gsl_matrix_submatrix(&r.matrix, 0, 0, q, q); gen_schur_decomp(&vh.matrix, &vr.matrix, alpha, beta, w); N = 0; } } /* while ((N > 1) && (w->n_iter)++ < w->max_iterations) */ /* handle special case of N = 1 */ if (N == 1) { gen_schur_standardize1(&h.matrix, &r.matrix, &a, &b, w); gen_store_eigval1(&h.matrix, a, b, alpha, beta, w); } } /* gen_schur_decomp() */ /* gen_qzstep() This routine determines what type of QZ step to perform on the generalized matrix pair (H, R). If the pair is 3-by-3 or bigger, we look at the bottom right 2-by-2 block. If this block has complex eigenvalues, we perform a Francis double shift QZ sweep. If it has real eigenvalues, we perform an implicit single shift QZ sweep. If the pair is 2-by-2 with real eigenvalues, we perform a single shift sweep. If it has complex eigenvalues, we return GSL_CONTINUE to notify the calling function that a 2-by-2 block with complex eigenvalues has converged, so that it may then call gen_schur_standardize2(). In the real eigenvalue case, we want to continue doing QZ sweeps to break it up into two 1-by-1 blocks. See LAPACK routine DHGEQZ and [1] for more information. Inputs: H - upper Hessenberg matrix (at least 2-by-2) R - upper triangular matrix (at least 2-by-2) w - workspace Return: GSL_SUCCESS on normal completion GSL_CONTINUE if we detect a 2-by-2 block with complex eigenvalues */ static inline int gen_qzstep(gsl_matrix *H, gsl_matrix *R, gsl_eigen_gen_workspace *w) { const size_t N = H->size1; gsl_matrix_view vh, vr; /* views of bottom right 2-by-2 block */ double wr1, wr2, wi; double scale1, scale2, scale; double cs, sn; /* givens rotation */ double temp, /* temporary variables */ temp2; size_t j; /* looping */ gsl_vector_view xv, yv; /* temporary views */ size_t top = 0; size_t rows; if (w->n_iter % 10 == 0) { /* * Exceptional shift - we have gone 10 iterations without finding * a new eigenvalue, do a single shift sweep with an * exceptional shift */ if ((GSL_DBL_MIN * w->max_iterations) * fabs(gsl_matrix_get(H, N - 2, N - 1)) < fabs(gsl_matrix_get(R, N - 2, N - 2))) { w->eshift += gsl_matrix_get(H, N - 2, N - 1) / gsl_matrix_get(R, N - 2, N - 2); } else w->eshift += 1.0 / (GSL_DBL_MIN * w->max_iterations); if ((w->eshift < GSL_DBL_EPSILON) && (GSL_DBL_MIN * w->max_iterations) * fabs(gsl_matrix_get(H, N - 1, N - 2)) < fabs(gsl_matrix_get(R, N - 2, N - 2))) { w->eshift = GEN_ESHIFT_COEFF * (w->ascale * gsl_matrix_get(H, N - 1, N - 2)) / (w->bscale * gsl_matrix_get(R, N - 2, N - 2)); } scale1 = 1.0; wr1 = w->eshift; } else { /* * Compute generalized eigenvalues of bottom right 2-by-2 block * to be used as shifts - wr1 is the Wilkinson shift */ vh = gsl_matrix_submatrix(H, N - 2, N - 2, 2, 2); vr = gsl_matrix_submatrix(R, N - 2, N - 2, 2, 2); gsl_schur_gen_eigvals(&vh.matrix, &vr.matrix, &wr1, &wr2, &wi, &scale1, &scale2); if (wi != 0.0) { /* complex eigenvalues */ if (N == 2) { /* * its a 2-by-2 block with complex eigenvalues - notify * the calling function to deflate */ return (GSL_CONTINUE); } else { /* do a francis double shift sweep */ gen_qzstep_d(H, R, w); } return GSL_SUCCESS; } } /* real eigenvalues - perform single shift QZ step */ temp = GSL_MIN(w->ascale, 1.0) * (0.5 / GSL_DBL_MIN); if (scale1 > temp) scale = temp / scale1; else scale = 1.0; temp = GSL_MIN(w->bscale, 1.0) * (0.5 / GSL_DBL_MIN); if (fabs(wr1) > temp) scale = GSL_MIN(scale, temp / fabs(wr1)); scale1 *= scale; wr1 *= scale; if (w->needtop) { /* get absolute index of this matrix relative to original matrix */ top = gen_get_submatrix(w->H, H); } temp = scale1*gsl_matrix_get(H, 0, 0) - wr1*gsl_matrix_get(R, 0, 0); temp2 = scale1*gsl_matrix_get(H, 1, 0); gsl_linalg_givens(temp, temp2, &cs, &sn); sn = -sn; for (j = 0; j < N - 1; ++j) { if (j > 0) { temp = gsl_matrix_get(H, j, j - 1); temp2 = gsl_matrix_get(H, j + 1, j - 1); gsl_linalg_givens(temp, temp2, &cs, &sn); sn = -sn; /* apply to column (j - 1) */ temp = cs * gsl_matrix_get(H, j, j - 1) + sn * gsl_matrix_get(H, j + 1, j - 1); gsl_matrix_set(H, j, j - 1, temp); gsl_matrix_set(H, j + 1, j - 1, 0.0); } /* apply G to H(j:j+1,:) and T(j:j+1,:) */ if (w->compute_s) { xv = gsl_matrix_subrow(w->H, top + j, top + j, w->size - top - j); yv = gsl_matrix_subrow(w->H, top + j + 1, top + j, w->size - top - j); } else { xv = gsl_matrix_subrow(H, j, j, N - j); yv = gsl_matrix_subrow(H, j + 1, j, N - j); } gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); if (w->compute_t) { xv = gsl_matrix_subrow(w->R, top + j, top + j, w->size - top - j); yv = gsl_matrix_subrow(w->R, top + j + 1, top + j, w->size - top - j); } else { xv = gsl_matrix_subrow(R, j, j, N - j); yv = gsl_matrix_subrow(R, j + 1, j, N - j); } gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); if (w->Q) { /* accumulate Q: Q -> QG */ xv = gsl_matrix_column(w->Q, top + j); yv = gsl_matrix_column(w->Q, top + j + 1); gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); } temp = gsl_matrix_get(R, j + 1, j + 1); temp2 = gsl_matrix_get(R, j + 1, j); gsl_linalg_givens(temp, temp2, &cs, &sn); rows = GSL_MIN(j + 3, N); if (w->compute_s) { xv = gsl_matrix_subcolumn(w->H, top + j, 0, top + rows); yv = gsl_matrix_subcolumn(w->H, top + j + 1, 0, top + rows); } else { xv = gsl_matrix_subcolumn(H, j, 0, rows); yv = gsl_matrix_subcolumn(H, j + 1, 0, rows); } gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); rows = GSL_MIN(j + 2, N); if (w->compute_t) { xv = gsl_matrix_subcolumn(w->R, top + j, 0, top + rows); yv = gsl_matrix_subcolumn(w->R, top + j + 1, 0, top + rows); } else { xv = gsl_matrix_subcolumn(R, j, 0, rows); yv = gsl_matrix_subcolumn(R, j + 1, 0, rows); } gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); if (w->Z) { /* accumulate Z: Z -> ZG */ xv = gsl_matrix_column(w->Z, top + j); yv = gsl_matrix_column(w->Z, top + j + 1); gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); } } /* for (j = 0; j < N - 1; ++j) */ return GSL_SUCCESS; } /* gen_qzstep() */ /* gen_qzstep_d() Perform an implicit double shift QZ step. See Golub & Van Loan, "Matrix Computations" (3rd ed), algorithm 7.7.2 Inputs: H - upper Hessenberg matrix (at least 3-by-3) R - upper triangular matrix (at least 3-by-3) w - workspace */ static inline void gen_qzstep_d(gsl_matrix *H, gsl_matrix *R, gsl_eigen_gen_workspace *w) { const size_t N = H->size1; size_t j; /* looping */ double dat[3]; /* householder vector */ double tau; /* householder coefficient */ gsl_vector_view v2, v3; /* views into 'dat' */ gsl_matrix_view m; /* temporary view */ double tmp; size_t q, r; size_t top = 0; /* location of H in original matrix */ double scale; double AB11, /* various matrix element ratios */ AB22, ABNN, ABMM, AMNBNN, ANMBMM, A21B11, A12B22, A32B22, B12B22, BMNBNN; v2 = gsl_vector_view_array(dat, 2); v3 = gsl_vector_view_array(dat, 3); if (w->needtop) { /* get absolute index of this matrix relative to original matrix */ top = gen_get_submatrix(w->H, H); } /* * Similar to the QR method, we take the shifts to be the two * zeros of the problem * * det[H(n-1:n,n-1:n) - s*R(n-1:n,n-1:n)] = 0 * * The initial householder vector elements are then given by * Eq. 4.1 of [1], which are designed to reduce errors when * off diagonal elements are small. */ ABMM = (w->ascale * gsl_matrix_get(H, N - 2, N - 2)) / (w->bscale * gsl_matrix_get(R, N - 2, N - 2)); ABNN = (w->ascale * gsl_matrix_get(H, N - 1, N - 1)) / (w->bscale * gsl_matrix_get(R, N - 1, N - 1)); AB11 = (w->ascale * gsl_matrix_get(H, 0, 0)) / (w->bscale * gsl_matrix_get(R, 0, 0)); AB22 = (w->ascale * gsl_matrix_get(H, 1, 1)) / (w->bscale * gsl_matrix_get(R, 1, 1)); AMNBNN = (w->ascale * gsl_matrix_get(H, N - 2, N - 1)) / (w->bscale * gsl_matrix_get(R, N - 1, N - 1)); ANMBMM = (w->ascale * gsl_matrix_get(H, N - 1, N - 2)) / (w->bscale * gsl_matrix_get(R, N - 2, N - 2)); BMNBNN = gsl_matrix_get(R, N - 2, N - 1) / gsl_matrix_get(R, N - 1, N - 1); A21B11 = (w->ascale * gsl_matrix_get(H, 1, 0)) / (w->bscale * gsl_matrix_get(R, 0, 0)); A12B22 = (w->ascale * gsl_matrix_get(H, 0, 1)) / (w->bscale * gsl_matrix_get(R, 1, 1)); A32B22 = (w->ascale * gsl_matrix_get(H, 2, 1)) / (w->bscale * gsl_matrix_get(R, 1, 1)); B12B22 = gsl_matrix_get(R, 0, 1) / gsl_matrix_get(R, 1, 1); /* * These are the Eqs (4.1) of [1], just multiplied by the factor * (A_{21} / B_{11}) */ dat[0] = (ABMM - AB11) * (ABNN - AB11) - (AMNBNN * ANMBMM) + (ANMBMM * BMNBNN * AB11) + (A12B22 - (AB11 * B12B22)) * A21B11; dat[1] = ((AB22 - AB11) - (A21B11 * B12B22) - (ABMM - AB11) - (ABNN - AB11) + (ANMBMM * BMNBNN)) * A21B11; dat[2] = A32B22 * A21B11; scale = fabs(dat[0]) + fabs(dat[1]) + fabs(dat[2]); if (scale != 0.0) { dat[0] /= scale; dat[1] /= scale; dat[2] /= scale; } for (j = 0; j < N - 2; ++j) { r = GSL_MIN(j + 4, N); /* * Find householder Q so that * * Q [x y z]^t = [ * 0 0 ]^t */ tau = gsl_linalg_householder_transform(&v3.vector); if (tau != 0.0) { /* * q is the initial column to start applying the householder * transformation. The GSL_MAX() simply ensures we don't * try to apply it to column (-1), since we are zeroing out * column (j - 1) except for the first iteration which * introduces the bulge. */ q = (size_t) GSL_MAX(0, (int)j - 1); /* H -> QH, R -> QR */ if (w->compute_s) { /* * We are computing the Schur form S, so we need to * transform the whole matrix H */ m = gsl_matrix_submatrix(w->H, top + j, top + q, 3, w->size - top - q); gsl_linalg_householder_hm(tau, &v3.vector, &m.matrix); } else { /* just transform the active block */ m = gsl_matrix_submatrix(H, j, q, 3, N - q); gsl_linalg_householder_hm(tau, &v3.vector, &m.matrix); } if (w->compute_t) { /* * We are computing the Schur form T, so we need to * transform the whole matrix R */ m = gsl_matrix_submatrix(w->R, top + j, top + j, 3, w->size - top - j); gsl_linalg_householder_hm(tau, &v3.vector, &m.matrix); } else { /* just transform the active block */ m = gsl_matrix_submatrix(R, j, j, 3, N - j); gsl_linalg_householder_hm(tau, &v3.vector, &m.matrix); } if (w->Q) { /* accumulate the transformation into Q */ m = gsl_matrix_submatrix(w->Q, 0, top + j, w->size, 3); gsl_linalg_householder_mh(tau, &v3.vector, &m.matrix); } } /* if (tau != 0.0) */ /* * Find householder Z so that * * [ r_{j+2,j} r_{j+2, j+1}, r_{j+2, j+2} ] Z = [ 0 0 * ] * * This isn't exactly what gsl_linalg_householder_transform * does, so we need to rotate the input vector so it preserves * the last element, and then rotate it back afterwards. * * So instead of transforming [x y z], we transform [z x y], * and the resulting HH vector [1 v2 v3] -> [v2 v3 1] but * then needs to be scaled to have the first element = 1, so * it becomes [1 v3/v2 1/v2] (tau must also be scaled accordingly). */ dat[0] = gsl_matrix_get(R, j + 2, j + 2); dat[1] = gsl_matrix_get(R, j + 2, j); dat[2] = gsl_matrix_get(R, j + 2, j + 1); scale = fabs(dat[0]) + fabs(dat[1]) + fabs(dat[2]); if (scale != 0.0) { dat[0] /= scale; dat[1] /= scale; dat[2] /= scale; } tau = gsl_linalg_householder_transform(&v3.vector); if (tau != 0.0) { /* rotate back */ tmp = gsl_vector_get(&v3.vector, 1); gsl_vector_set(&v3.vector, 1, gsl_vector_get(&v3.vector, 2)/tmp); gsl_vector_set(&v3.vector, 2, 1.0 / tmp); tau *= tmp * tmp; /* H -> HZ, R -> RZ */ if (w->compute_s) { m = gsl_matrix_submatrix(w->H, 0, top + j, top + r, 3); gsl_linalg_householder_mh(tau, &v3.vector, &m.matrix); } else { m = gsl_matrix_submatrix(H, 0, j, r, 3); gsl_linalg_householder_mh(tau, &v3.vector, &m.matrix); } if (w->compute_t) { m = gsl_matrix_submatrix(w->R, 0, top + j, top + j + 3, 3); gsl_linalg_householder_mh(tau, &v3.vector, &m.matrix); } else { m = gsl_matrix_submatrix(R, 0, j, j + 3, 3); gsl_linalg_householder_mh(tau, &v3.vector, &m.matrix); } if (w->Z) { /* accumulate transformation into Z */ m = gsl_matrix_submatrix(w->Z, 0, top + j, w->size, 3); gsl_linalg_householder_mh(tau, &v3.vector, &m.matrix); } } /* if (tau != 0.0) */ /* * Find householder Z so that * * [ r_{j+1,j} r_{j+1, j+1} ] Z = [ 0 * ] */ dat[0] = gsl_matrix_get(R, j + 1, j + 1); dat[1] = gsl_matrix_get(R, j + 1, j); scale = fabs(dat[0]) + fabs(dat[1]); if (scale != 0.0) { dat[0] /= scale; dat[1] /= scale; } tau = gsl_linalg_householder_transform(&v2.vector); if (tau != 0.0) { /* rotate back */ tmp = gsl_vector_get(&v2.vector, 1); gsl_vector_set(&v2.vector, 1, 1.0 / tmp); tau *= tmp * tmp; /* H -> HZ, R -> RZ */ if (w->compute_s) { m = gsl_matrix_submatrix(w->H, 0, top + j, top + r, 2); gsl_linalg_householder_mh(tau, &v2.vector, &m.matrix); } else { m = gsl_matrix_submatrix(H, 0, j, r, 2); gsl_linalg_householder_mh(tau, &v2.vector, &m.matrix); } if (w->compute_t) { m = gsl_matrix_submatrix(w->R, 0, top + j, top + j + 3, 2); gsl_linalg_householder_mh(tau, &v2.vector, &m.matrix); } else { m = gsl_matrix_submatrix(R, 0, j, j + 3, 2); gsl_linalg_householder_mh(tau, &v2.vector, &m.matrix); } if (w->Z) { /* accumulate transformation into Z */ m = gsl_matrix_submatrix(w->Z, 0, top + j, w->size, 2); gsl_linalg_householder_mh(tau, &v2.vector, &m.matrix); } } /* if (tau != 0.0) */ dat[0] = gsl_matrix_get(H, j + 1, j); dat[1] = gsl_matrix_get(H, j + 2, j); if (j < N - 3) dat[2] = gsl_matrix_get(H, j + 3, j); scale = fabs(dat[0]) + fabs(dat[1]) + fabs(dat[2]); if (scale != 0.0) { dat[0] /= scale; dat[1] /= scale; dat[2] /= scale; } } /* for (j = 0; j < N - 2; ++j) */ /* * Find Householder Q so that * * Q [ x y ]^t = [ * 0 ]^t */ scale = fabs(dat[0]) + fabs(dat[1]); if (scale != 0.0) { dat[0] /= scale; dat[1] /= scale; } tau = gsl_linalg_householder_transform(&v2.vector); if (w->compute_s) { m = gsl_matrix_submatrix(w->H, top + N - 2, top + N - 3, 2, w->size - top - N + 3); gsl_linalg_householder_hm(tau, &v2.vector, &m.matrix); } else { m = gsl_matrix_submatrix(H, N - 2, N - 3, 2, 3); gsl_linalg_householder_hm(tau, &v2.vector, &m.matrix); } if (w->compute_t) { m = gsl_matrix_submatrix(w->R, top + N - 2, top + N - 2, 2, w->size - top - N + 2); gsl_linalg_householder_hm(tau, &v2.vector, &m.matrix); } else { m = gsl_matrix_submatrix(R, N - 2, N - 2, 2, 2); gsl_linalg_householder_hm(tau, &v2.vector, &m.matrix); } if (w->Q) { /* accumulate the transformation into Q */ m = gsl_matrix_submatrix(w->Q, 0, top + N - 2, w->size, 2); gsl_linalg_householder_mh(tau, &v2.vector, &m.matrix); } /* * Find Householder Z so that * * [ b_{n,n-1} b_{nn} ] Z = [ 0 * ] */ dat[0] = gsl_matrix_get(R, N - 1, N - 1); dat[1] = gsl_matrix_get(R, N - 1, N - 2); scale = fabs(dat[0]) + fabs(dat[1]); if (scale != 0.0) { dat[0] /= scale; dat[1] /= scale; } tau = gsl_linalg_householder_transform(&v2.vector); /* rotate back */ tmp = gsl_vector_get(&v2.vector, 1); gsl_vector_set(&v2.vector, 1, 1.0 / tmp); tau *= tmp * tmp; if (w->compute_s) { m = gsl_matrix_submatrix(w->H, 0, top + N - 2, top + N, 2); gsl_linalg_householder_mh(tau, &v2.vector, &m.matrix); } else { m = gsl_matrix_submatrix(H, 0, N - 2, N, 2); gsl_linalg_householder_mh(tau, &v2.vector, &m.matrix); } if (w->compute_t) { m = gsl_matrix_submatrix(w->R, 0, top + N - 2, top + N, 2); gsl_linalg_householder_mh(tau, &v2.vector, &m.matrix); } else { m = gsl_matrix_submatrix(R, 0, N - 2, N, 2); gsl_linalg_householder_mh(tau, &v2.vector, &m.matrix); } if (w->Z) { /* accumulate the transformation into Z */ m = gsl_matrix_submatrix(w->Z, 0, top + N - 2, w->size, 2); gsl_linalg_householder_mh(tau, &v2.vector, &m.matrix); } } /* gen_qzstep_d() */ /* gen_tri_split_top() This routine is called when the leading element on the diagonal of R has become negligible. Split off a 1-by-1 block at the top. Inputs: H - upper hessenberg matrix R - upper triangular matrix w - workspace */ static void gen_tri_split_top(gsl_matrix *H, gsl_matrix *R, gsl_eigen_gen_workspace *w) { const size_t N = H->size1; size_t j, top = 0; double cs, sn; gsl_vector_view xv, yv; if (w->needtop) top = gen_get_submatrix(w->H, H); j = 0; gsl_linalg_givens(gsl_matrix_get(H, j, j), gsl_matrix_get(H, j + 1, j), &cs, &sn); sn = -sn; if (w->compute_s) { xv = gsl_matrix_subrow(w->H, top + j, top, w->size - top); yv = gsl_matrix_subrow(w->H, top + j + 1, top, w->size - top); } else { xv = gsl_matrix_row(H, j); yv = gsl_matrix_row(H, j + 1); } gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); gsl_matrix_set(H, j + 1, j, 0.0); if (w->compute_t) { xv = gsl_matrix_subrow(w->R, top + j, top + 1, w->size - top - 1); yv = gsl_matrix_subrow(w->R, top + j + 1, top + 1, w->size - top - 1); } else { xv = gsl_matrix_subrow(R, j, 1, N - 1); yv = gsl_matrix_subrow(R, j + 1, 1, N - 1); } gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); if (w->Q) { xv = gsl_matrix_column(w->Q, top + j); yv = gsl_matrix_column(w->Q, top + j + 1); gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); } } /* gen_tri_split_top() */ /* gen_tri_chase_zero() This routine is called when an element on the diagonal of R has become negligible. Chase the zero to the bottom of the active block so we can split off a 1-by-1 block. Inputs: H - upper hessenberg matrix R - upper triangular matrix q - index such that R(q,q) = 0 (q must be > 0) w - workspace */ static inline void gen_tri_chase_zero(gsl_matrix *H, gsl_matrix *R, size_t q, gsl_eigen_gen_workspace *w) { const size_t N = H->size1; size_t j, top = 0; double cs, sn; gsl_vector_view xv, yv; if (w->needtop) top = gen_get_submatrix(w->H, H); for (j = q; j < N - 1; ++j) { gsl_linalg_givens(gsl_matrix_get(R, j, j + 1), gsl_matrix_get(R, j + 1, j + 1), &cs, &sn); sn = -sn; if (w->compute_t) { xv = gsl_matrix_subrow(w->R, top + j, top + j + 1, w->size - top - j - 1); yv = gsl_matrix_subrow(w->R, top + j + 1, top + j + 1, w->size - top - j - 1); } else { xv = gsl_matrix_subrow(R, j, j + 1, N - j - 1); yv = gsl_matrix_subrow(R, j + 1, j + 1, N - j - 1); } gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); gsl_matrix_set(R, j + 1, j + 1, 0.0); if (w->compute_s) { xv = gsl_matrix_subrow(w->H, top + j, top + j - 1, w->size - top - j + 1); yv = gsl_matrix_subrow(w->H, top + j + 1, top + j - 1, w->size - top - j + 1); } else { xv = gsl_matrix_subrow(H, j, j - 1, N - j + 1); yv = gsl_matrix_subrow(H, j + 1, j - 1, N - j + 1); } gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); if (w->Q) { /* accumulate Q */ xv = gsl_matrix_column(w->Q, top + j); yv = gsl_matrix_column(w->Q, top + j + 1); gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); } gsl_linalg_givens(gsl_matrix_get(H, j + 1, j), gsl_matrix_get(H, j + 1, j - 1), &cs, &sn); sn = -sn; if (w->compute_s) { xv = gsl_matrix_subcolumn(w->H, top + j, 0, top + j + 2); yv = gsl_matrix_subcolumn(w->H, top + j - 1, 0, top + j + 2); } else { xv = gsl_matrix_subcolumn(H, j, 0, j + 2); yv = gsl_matrix_subcolumn(H, j - 1, 0, j + 2); } gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); gsl_matrix_set(H, j + 1, j - 1, 0.0); if (w->compute_t) { xv = gsl_matrix_subcolumn(w->R, top + j, 0, top + j + 1); yv = gsl_matrix_subcolumn(w->R, top + j - 1, 0, top + j + 1); } else { xv = gsl_matrix_subcolumn(R, j, 0, j + 1); yv = gsl_matrix_subcolumn(R, j - 1, 0, j + 1); } gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); if (w->Z) { /* accumulate Z */ xv = gsl_matrix_column(w->Z, top + j); yv = gsl_matrix_column(w->Z, top + j - 1); gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); } } } /* gen_tri_chase_zero() */ /* gen_tri_zero_H() Companion function to get_tri_chase_zero(). After the zero on the diagonal of R has been chased to the bottom, we zero the element H(n, n - 1) in order to split off a 1-by-1 block. */ static inline void gen_tri_zero_H(gsl_matrix *H, gsl_matrix *R, gsl_eigen_gen_workspace *w) { const size_t N = H->size1; size_t top = 0; double cs, sn; gsl_vector_view xv, yv; if (w->needtop) top = gen_get_submatrix(w->H, H); gsl_linalg_givens(gsl_matrix_get(H, N - 1, N - 1), gsl_matrix_get(H, N - 1, N - 2), &cs, &sn); sn = -sn; if (w->compute_s) { xv = gsl_matrix_subcolumn(w->H, top + N - 1, 0, top + N); yv = gsl_matrix_subcolumn(w->H, top + N - 2, 0, top + N); } else { xv = gsl_matrix_column(H, N - 1); yv = gsl_matrix_column(H, N - 2); } gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); gsl_matrix_set(H, N - 1, N - 2, 0.0); if (w->compute_t) { xv = gsl_matrix_subcolumn(w->R, top + N - 1, 0, top + N - 1); yv = gsl_matrix_subcolumn(w->R, top + N - 2, 0, top + N - 1); } else { xv = gsl_matrix_subcolumn(R, N - 1, 0, N - 1); yv = gsl_matrix_subcolumn(R, N - 2, 0, N - 1); } gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); if (w->Z) { /* accumulate Z */ xv = gsl_matrix_column(w->Z, top + N - 1); yv = gsl_matrix_column(w->Z, top + N - 2); gsl_blas_drot(&xv.vector, &yv.vector, cs, sn); } } /* gen_tri_zero_H() */ /* gen_search_small_elements() This routine searches for small elements in the matrix pencil (H, R) to determine if any eigenvalues have converged. Tests: 1. Test if the Hessenberg matrix has a small subdiagonal element: H(i, i - 1) < tolerance 2. Test if the Triangular matrix has a small diagonal element: R(i, i) < tolerance Possible outcomes: (A) Neither test passed: in this case 'flag' is set to 0 and the function returns 0 (B) Test 1 passes and 2 does not: in this case 'flag' is set to 1 and we return the row index i such that H(i, i - 1) < tol (C) Test 2 passes and 1 does not: in this case 'flag' is set to 2 and we return the index i such that R(i, i) < tol (D) Tests 1 and 2 both pass: in this case 'flag' is set to 3 and we return the index i such that H(i, i - 1) < tol and R(i, i) < tol Inputs: H - upper Hessenberg matrix R - upper Triangular matrix flag - (output) flag set on output (see above) w - workspace Return: see above */ static inline size_t gen_search_small_elements(gsl_matrix *H, gsl_matrix *R, int *flag, gsl_eigen_gen_workspace *w) { const size_t N = H->size1; int k; size_t i; int pass1 = 0; int pass2 = 0; for (k = (int) N - 1; k >= 0; --k) { i = (size_t) k; if (i != 0 && fabs(gsl_matrix_get(H, i, i - 1)) <= w->atol) { gsl_matrix_set(H, i, i - 1, 0.0); pass1 = 1; } if (fabs(gsl_matrix_get(R, i, i)) < w->btol) { gsl_matrix_set(R, i, i, 0.0); pass2 = 1; } if (pass1 && !pass2) /* case B */ { *flag = 1; return (i); } else if (!pass1 && pass2) /* case C */ { *flag = 2; return (i); } else if (pass1 && pass2) /* case D */ { *flag = 3; return (i); } } /* neither test passed: case A */ *flag = 0; return (0); } /* gen_search_subdiag_small_elements() */ /* gen_schur_standardize1() This function is called when a 1-by-1 block has converged - convert the block to standard form and update the Schur forms and vectors if required. Standard form here means that the diagonal element of B is positive. Inputs: A - 1-by-1 matrix in Schur form S B - 1-by-1 matrix in Schur form T alphar - where to store real part of eigenvalue numerator beta - where to store eigenvalue denominator w - workspace Return: success */ static int gen_schur_standardize1(gsl_matrix *A, gsl_matrix *B, double *alphar, double *beta, gsl_eigen_gen_workspace *w) { size_t i; size_t top = 0; /* * it is a 1-by-1 block - the only requirement is that * B_{00} is > 0, so if it isn't apply a -I transformation */ if (gsl_matrix_get(B, 0, 0) < 0.0) { if (w->needtop) top = gen_get_submatrix(w->H, A); if (w->compute_t) { for (i = 0; i <= top; ++i) gsl_matrix_set(w->R, i, top, -gsl_matrix_get(w->R, i, top)); } else gsl_matrix_set(B, 0, 0, -gsl_matrix_get(B, 0, 0)); if (w->compute_s) { for (i = 0; i <= top; ++i) gsl_matrix_set(w->H, i, top, -gsl_matrix_get(w->H, i, top)); } else gsl_matrix_set(A, 0, 0, -gsl_matrix_get(A, 0, 0)); if (w->Z) { for (i = 0; i < w->size; ++i) gsl_matrix_set(w->Z, i, top, -gsl_matrix_get(w->Z, i, top)); } } *alphar = gsl_matrix_get(A, 0, 0); *beta = gsl_matrix_get(B, 0, 0); return GSL_SUCCESS; } /* gen_schur_standardize1() */ /* gen_schur_standardize2() This function is called when a 2-by-2 generalized block has converged. Convert the block to standard form, which means B is rotated so that B = [ B11 0 ] with B11, B22 non-negative [ 0 B22 ] If the resulting block (A, B) has complex eigenvalues, they are computed. Otherwise, the function will return GSL_CONTINUE to notify caller that we need to do more single shift sweeps to convert the 2-by-2 block into two 1-by-1 blocks. Inputs: A - 2-by-2 submatrix of schur form S B - 2-by-2 submatrix of schur form T alpha1 - (output) where to store eigenvalue 1 numerator alpha2 - (output) where to store eigenvalue 2 numerator beta1 - (output) where to store eigenvalue 1 denominator beta2 - (output) where to store eigenvalue 2 denominator w - workspace Return: GSL_SUCCESS if block has complex eigenvalues (they are computed) GSL_CONTINUE if block has real eigenvalues (they are not computed) */ static int gen_schur_standardize2(gsl_matrix *A, gsl_matrix *B, gsl_complex *alpha1, gsl_complex *alpha2, double *beta1, double *beta2, gsl_eigen_gen_workspace *w) { double datB[4], datV[4], datS[2], work[2]; gsl_matrix_view uv = gsl_matrix_view_array(datB, 2, 2); gsl_matrix_view vv = gsl_matrix_view_array(datV, 2, 2); gsl_vector_view sv = gsl_vector_view_array(datS, 2); gsl_vector_view wv = gsl_vector_view_array(work, 2); double B11, B22; size_t top = 0; double det; double cr, sr, cl, sl; gsl_vector_view xv, yv; int s; if (w->needtop) top = gen_get_submatrix(w->H, A); /* * Rotate B so that * * B = [ B11 0 ] * [ 0 B22 ] * * with B11 non-negative */ gsl_matrix_memcpy(&uv.matrix, B); gsl_linalg_SV_decomp(&uv.matrix, &vv.matrix, &sv.vector, &wv.vector); /* * Right now, B = U S V^t, where S = diag(s) * * The SVD routine may have computed reflection matrices U and V, * but it would be much nicer to have rotations since we won't have * to use BLAS mat-mat multiplications to update our matrices, * and can instead use drot. So convert them to rotations if * necessary */ det = gsl_matrix_get(&vv.matrix, 0, 0) * gsl_matrix_get(&vv.matrix, 1, 1) - gsl_matrix_get(&vv.matrix, 0, 1) * gsl_matrix_get(&vv.matrix, 1, 0); if (det < 0.0) { /* V is a reflection, convert it to a rotation by inserting * F = [1 0; 0 -1] so that: * * B = U S [1 0] [1 0] V^t * [0 -1] [0 -1] * * so S -> S F and V -> V F where F is the reflection matrix * We just need to invert S22 since the first column of V * will remain unchanged and we can just read off the CS and SN * parameters. */ datS[1] = -datS[1]; } cr = gsl_matrix_get(&vv.matrix, 0, 0); sr = gsl_matrix_get(&vv.matrix, 1, 0); /* same for U */ det = gsl_matrix_get(&uv.matrix, 0, 0) * gsl_matrix_get(&uv.matrix, 1, 1) - gsl_matrix_get(&uv.matrix, 0, 1) * gsl_matrix_get(&uv.matrix, 1, 0); if (det < 0.0) datS[1] = -datS[1]; cl = gsl_matrix_get(&uv.matrix, 0, 0); sl = gsl_matrix_get(&uv.matrix, 1, 0); B11 = gsl_vector_get(&sv.vector, 0); B22 = gsl_vector_get(&sv.vector, 1); /* make sure B11 is positive */ if (B11 < 0.0) { B11 = -B11; B22 = -B22; cr = -cr; sr = -sr; } /* * At this point, * * [ S11 0 ] = [ CSL SNL ] B [ CSR -SNR ] * [ 0 S22 ] [-SNL CSL ] [ SNR CSR ] * * apply rotations to H and rest of R */ if (w->compute_s) { xv = gsl_matrix_subrow(w->H, top, top, w->size - top); yv = gsl_matrix_subrow(w->H, top + 1, top, w->size - top); gsl_blas_drot(&xv.vector, &yv.vector, cl, sl); xv = gsl_matrix_subcolumn(w->H, top, 0, top + 2); yv = gsl_matrix_subcolumn(w->H, top + 1, 0, top + 2); gsl_blas_drot(&xv.vector, &yv.vector, cr, sr); } else { xv = gsl_matrix_row(A, 0); yv = gsl_matrix_row(A, 1); gsl_blas_drot(&xv.vector, &yv.vector, cl, sl); xv = gsl_matrix_column(A, 0); yv = gsl_matrix_column(A, 1); gsl_blas_drot(&xv.vector, &yv.vector, cr, sr); } if (w->compute_t) { if (top != (w->size - 2)) { xv = gsl_matrix_subrow(w->R, top, top + 2, w->size - top - 2); yv = gsl_matrix_subrow(w->R, top + 1, top + 2, w->size - top - 2); gsl_blas_drot(&xv.vector, &yv.vector, cl, sl); } if (top != 0) { xv = gsl_matrix_subcolumn(w->R, top, 0, top); yv = gsl_matrix_subcolumn(w->R, top + 1, 0, top); gsl_blas_drot(&xv.vector, &yv.vector, cr, sr); } } if (w->Q) { xv = gsl_matrix_column(w->Q, top); yv = gsl_matrix_column(w->Q, top + 1); gsl_blas_drot(&xv.vector, &yv.vector, cl, sl); } if (w->Z) { xv = gsl_matrix_column(w->Z, top); yv = gsl_matrix_column(w->Z, top + 1); gsl_blas_drot(&xv.vector, &yv.vector, cr, sr); } gsl_matrix_set(B, 0, 0, B11); gsl_matrix_set(B, 0, 1, 0.0); gsl_matrix_set(B, 1, 0, 0.0); gsl_matrix_set(B, 1, 1, B22); /* if B22 is < 0, make it positive by negating its column */ if (B22 < 0.0) { size_t i; if (w->compute_s) { for (i = 0; i < top + 2; ++i) gsl_matrix_set(w->H, i, top + 1, -gsl_matrix_get(w->H, i, top + 1)); } else { gsl_matrix_set(A, 0, 1, -gsl_matrix_get(A, 0, 1)); gsl_matrix_set(A, 1, 1, -gsl_matrix_get(A, 1, 1)); } if (w->compute_t) { for (i = 0; i < top + 2; ++i) gsl_matrix_set(w->R, i, top + 1, -gsl_matrix_get(w->R, i, top + 1)); } else { gsl_matrix_set(B, 0, 1, -gsl_matrix_get(B, 0, 1)); gsl_matrix_set(B, 1, 1, -gsl_matrix_get(B, 1, 1)); } if (w->Z) { xv = gsl_matrix_column(w->Z, top + 1); gsl_vector_scale(&xv.vector, -1.0); } } /* our block is now in standard form - compute eigenvalues */ s = gen_compute_eigenvals(A, B, alpha1, alpha2, beta1, beta2); return s; } /* gen_schur_standardize2() */ /* gen_compute_eigenvals() Compute the complex eigenvalues of a 2-by-2 block Return: GSL_CONTINUE if block contains real eigenvalues (they are not computed) GSL_SUCCESS on normal completion */ static int gen_compute_eigenvals(gsl_matrix *A, gsl_matrix *B, gsl_complex *alpha1, gsl_complex *alpha2, double *beta1, double *beta2) { double wr1, wr2, wi, scale1, scale2; double s1inv; double A11, A12, A21, A22; double B11, B22; double c11r, c11i, c12, c21, c22r, c22i; double cz, cq; double szr, szi, sqr, sqi; double a1r, a1i, a2r, a2i, b1r, b1i, b1a, b2r, b2i, b2a; double alphar, alphai; double t1, an, bn, tempr, tempi, wabs; /* * This function is called from gen_schur_standardize2() and * its possible the standardization has perturbed the eigenvalues * onto the real line - so check for this before computing them */ gsl_schur_gen_eigvals(A, B, &wr1, &wr2, &wi, &scale1, &scale2); if (wi == 0.0) return GSL_CONTINUE; /* real eigenvalues - continue QZ iteration */ /* complex eigenvalues - compute alpha and beta */ s1inv = 1.0 / scale1; A11 = gsl_matrix_get(A, 0, 0); A12 = gsl_matrix_get(A, 0, 1); A21 = gsl_matrix_get(A, 1, 0); A22 = gsl_matrix_get(A, 1, 1); B11 = gsl_matrix_get(B, 0, 0); B22 = gsl_matrix_get(B, 1, 1); c11r = scale1 * A11 - wr1 * B11; c11i = -wi * B11; c12 = scale1 * A12; c21 = scale1 * A21; c22r = scale1 * A22 - wr1 * B22; c22i = -wi * B22; if (fabs(c11r) + fabs(c11i) + fabs(c12) > fabs(c21) + fabs(c22r) + fabs(c22i)) { t1 = gsl_hypot3(c12, c11r, c11i); if (t1 != 0.0) { cz = c12 / t1; szr = -c11r / t1; szi = -c11i / t1; } else { cz = 0.0; szr = 1.0; szi = 0.0; } } else { cz = hypot(c22r, c22i); if (cz <= GSL_DBL_MIN) { cz = 0.0; szr = 1.0; szi = 0.0; } else { tempr = c22r / cz; tempi = c22i / cz; t1 = hypot(cz, c21); cz /= t1; szr = -c21*tempr / t1; szi = c21*tempi / t1; } } an = fabs(A11) + fabs(A12) + fabs(A21) + fabs(A22); bn = fabs(B11) + fabs(B22); wabs = fabs(wr1) + fabs(wi); if (scale1*an > wabs*bn) { cq = cz * B11; if (cq <= GSL_DBL_MIN) { cq = 0.0; sqr = 1.0; sqi = 0.0; } else { sqr = szr * B22; sqi = -szi * B22; } } else { a1r = cz * A11 + szr * A12; a1i = szi * A12; a2r = cz * A21 + szr * A22; a2i = szi * A22; cq = hypot(a1r, a1i); if (cq <= GSL_DBL_MIN) { cq = 0.0; sqr = 1.0; sqi = 0.0; } else { tempr = a1r / cq; tempi = a1i / cq; sqr = tempr * a2r + tempi * a2i; sqi = tempi * a2r - tempr * a2i; } } t1 = gsl_hypot3(cq, sqr, sqi); cq /= t1; sqr /= t1; sqi /= t1; tempr = sqr*szr - sqi*szi; tempi = sqr*szi + sqi*szr; b1r = cq*cz*B11 + tempr*B22; b1i = tempi*B22; b1a = hypot(b1r, b1i); b2r = cq*cz*B22 + tempr*B11; b2i = -tempi*B11; b2a = hypot(b2r, b2i); *beta1 = b1a; *beta2 = b2a; alphar = (wr1 * b1a) * s1inv; alphai = (wi * b1a) * s1inv; GSL_SET_COMPLEX(alpha1, alphar, alphai); alphar = (wr1 * b2a) * s1inv; alphai = -(wi * b2a) * s1inv; GSL_SET_COMPLEX(alpha2, alphar, alphai); return GSL_SUCCESS; } /* gen_compute_eigenvals() */ /* gen_store_eigval1() Store eigenvalue of a 1-by-1 block into the alpha and beta output vectors. This routine ensures that eigenvalues are stored in the same order as they appear in the Schur form and updates various internal workspace quantities. */ static void gen_store_eigval1(const gsl_matrix *H, const double a, const double b, gsl_vector_complex *alpha, gsl_vector *beta, gsl_eigen_gen_workspace *w) { size_t top = gen_get_submatrix(w->H, H); gsl_complex z; GSL_SET_COMPLEX(&z, a, 0.0); gsl_vector_complex_set(alpha, top, z); gsl_vector_set(beta, top, b); w->n_evals += 1; w->n_iter = 0; w->eshift = 0.0; } /* gen_store_eigval1() */ /* gen_store_eigval2() Store eigenvalues of a 2-by-2 block into the alpha and beta output vectors. This routine ensures that eigenvalues are stored in the same order as they appear in the Schur form and updates various internal workspace quantities. */ static void gen_store_eigval2(const gsl_matrix *H, const gsl_complex *alpha1, const double beta1, const gsl_complex *alpha2, const double beta2, gsl_vector_complex *alpha, gsl_vector *beta, gsl_eigen_gen_workspace *w) { size_t top = gen_get_submatrix(w->H, H); gsl_vector_complex_set(alpha, top, *alpha1); gsl_vector_set(beta, top, beta1); gsl_vector_complex_set(alpha, top + 1, *alpha2); gsl_vector_set(beta, top + 1, beta2); w->n_evals += 2; w->n_iter = 0; w->eshift = 0.0; } /* gen_store_eigval2() */ /* gen_get_submatrix() B is a submatrix of A. The goal of this function is to compute the indices in A of where the matrix B resides */ static inline size_t gen_get_submatrix(const gsl_matrix *A, const gsl_matrix *B) { size_t diff; double ratio; size_t top; diff = (size_t) (B->data - A->data); /* B is on the diagonal of A, so measure distance in units of tda+1 */ ratio = (double)diff / ((double) (A->tda + 1)); top = (size_t) floor(ratio); return top; } /* gen_get_submatrix() */ /* Frobenius norm */ inline static double normF (gsl_matrix * A) { size_t i, j, M = A->size1, N = A->size2; double sum = 0.0, scale = 0.0, ssq = 1.0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { double Aij = gsl_matrix_get (A, i, j); if (Aij != 0.0) { double ax = fabs (Aij); if (scale < ax) { ssq = 1.0 + ssq * (scale / ax) * (scale / ax); scale = ax; } else { ssq += (ax / scale) * (ax / scale); } } } } sum = scale * sqrt (ssq); return sum; } gsl/eigen/jacobi.c0000644000175000017500000001412413536674414012416 0ustar eddedd/* eigen/jacobi.c * * Copyright (C) 2004, 2007 Brian Gough, Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include /* Algorithm 8.4.3 - Cyclic Jacobi. Golub & Van Loan, Matrix Computations */ static inline double symschur2 (gsl_matrix * A, size_t p, size_t q, double *c, double *s) { double Apq = gsl_matrix_get (A, p, q); if (Apq != 0.0) { double App = gsl_matrix_get (A, p, p); double Aqq = gsl_matrix_get (A, q, q); double tau = (Aqq - App) / (2.0 * Apq); double t, c1; if (tau >= 0.0) { t = 1.0 / (tau + hypot (1.0, tau)); } else { t = -1.0 / (-tau + hypot (1.0, tau)); } c1 = 1.0 / hypot (1.0, t); *c = c1; *s = t * c1; } else { *c = 1.0; *s = 0.0; } /* reduction in off(A) is 2*(A_pq)^2 */ return fabs (Apq); } inline static void apply_jacobi_L (gsl_matrix * A, size_t p, size_t q, double c, double s) { size_t j; const size_t N = A->size2; /* Apply rotation to matrix A, A' = J^T A */ for (j = 0; j < N; j++) { double Apj = gsl_matrix_get (A, p, j); double Aqj = gsl_matrix_get (A, q, j); gsl_matrix_set (A, p, j, Apj * c - Aqj * s); gsl_matrix_set (A, q, j, Apj * s + Aqj * c); } } inline static void apply_jacobi_R (gsl_matrix * A, size_t p, size_t q, double c, double s) { size_t i; const size_t M = A->size1; /* Apply rotation to matrix A, A' = A J */ for (i = 0; i < M; i++) { double Aip = gsl_matrix_get (A, i, p); double Aiq = gsl_matrix_get (A, i, q); gsl_matrix_set (A, i, p, Aip * c - Aiq * s); gsl_matrix_set (A, i, q, Aip * s + Aiq * c); } } inline static double norm (gsl_matrix * A) { size_t i, j, M = A->size1, N = A->size2; double sum = 0.0, scale = 0.0, ssq = 1.0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { double Aij = gsl_matrix_get (A, i, j); /* compute norm of off-diagonal elements as per algorithm 8.4.3 and definition at start of section 8.4.1 */ if (i == j) continue; if (Aij != 0.0) { double ax = fabs (Aij); if (scale < ax) { ssq = 1.0 + ssq * (scale / ax) * (scale / ax); scale = ax; } else { ssq += (ax / scale) * (ax / scale); } } } } sum = scale * sqrt (ssq); return sum; } int gsl_eigen_jacobi (gsl_matrix * a, gsl_vector * eval, gsl_matrix * evec, unsigned int max_rot, unsigned int *nrot) { size_t i, p, q; const size_t M = a->size1, N = a->size2; double red, redsum = 0.0; if (M != N) { GSL_ERROR ("eigenproblem requires square matrix", GSL_ENOTSQR); } else if (M != evec->size1 || M != evec->size2) { GSL_ERROR ("eigenvector matrix must match input matrix", GSL_EBADLEN); } else if (M != eval->size) { GSL_ERROR ("eigenvalue vector must match input matrix", GSL_EBADLEN); } gsl_vector_set_zero (eval); gsl_matrix_set_identity (evec); for (i = 0; i < max_rot; i++) { double nrm = norm (a); if (nrm == 0.0) break; for (p = 0; p < N; p++) { for (q = p + 1; q < N; q++) { double c, s; red = symschur2 (a, p, q, &c, &s); redsum += red; /* Compute A <- J^T A J */ apply_jacobi_L (a, p, q, c, s); apply_jacobi_R (a, p, q, c, s); /* Compute V <- V J */ apply_jacobi_R (evec, p, q, c, s); } } } *nrot = i; for (p = 0; p < N; p++) { double ep = gsl_matrix_get (a, p, p); gsl_vector_set (eval, p, ep); } if (i == max_rot) { return GSL_EMAXITER; } return GSL_SUCCESS; } int gsl_eigen_invert_jacobi (const gsl_matrix * a, gsl_matrix * ainv, unsigned int max_rot) { if (a->size1 != a->size2 || ainv->size1 != ainv->size2) { GSL_ERROR("jacobi method requires square matrix", GSL_ENOTSQR); } else if (a->size1 != ainv->size2) { GSL_ERROR ("inverse matrix must match input matrix", GSL_EBADLEN); } { const size_t n = a->size2; size_t i,j,k; unsigned int nrot = 0; int status; gsl_vector * eval = gsl_vector_alloc(n); gsl_matrix * evec = gsl_matrix_alloc(n, n); gsl_matrix * tmp = gsl_matrix_alloc(n, n); gsl_matrix_memcpy (tmp, a); status = gsl_eigen_jacobi(tmp, eval, evec, max_rot, &nrot); for(i=0; i #include #include #include #include #include #include #include /* Compute eigenvalues/eigenvectors of complex hermitian matrix using reduction to real symmetric tridiagonal form, followed by QR iteration with implicit shifts. See Golub & Van Loan, "Matrix Computations" (3rd ed), Section 8.3 */ #include "qrstep.c" gsl_eigen_hermv_workspace * gsl_eigen_hermv_alloc (const size_t n) { gsl_eigen_hermv_workspace * w ; if (n == 0) { GSL_ERROR_NULL ("matrix dimension must be positive integer", GSL_EINVAL); } w = (gsl_eigen_hermv_workspace *) malloc (sizeof(gsl_eigen_hermv_workspace)); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->d = (double *) malloc (n * sizeof (double)); if (w->d == 0) { free (w); GSL_ERROR_NULL ("failed to allocate space for diagonal", GSL_ENOMEM); } w->sd = (double *) malloc (n * sizeof (double)); if (w->sd == 0) { free (w->d); free (w); GSL_ERROR_NULL ("failed to allocate space for subdiagonal", GSL_ENOMEM); } w->tau = (double *) malloc (2 * n * sizeof (double)); if (w->tau == 0) { free (w->sd); free (w->d); free (w); GSL_ERROR_NULL ("failed to allocate space for tau", GSL_ENOMEM); } w->gc = (double *) malloc (n * sizeof (double)); if (w->gc == 0) { free (w->tau); free (w->sd); free (w->d); free (w); GSL_ERROR_NULL ("failed to allocate space for cosines", GSL_ENOMEM); } w->gs = (double *) malloc (n * sizeof (double)); if (w->gs == 0) { free (w->gc); free (w->tau); free (w->sd); free (w->d); free (w); GSL_ERROR_NULL ("failed to allocate space for sines", GSL_ENOMEM); } w->size = n; return w; } void gsl_eigen_hermv_free (gsl_eigen_hermv_workspace * w) { RETURN_IF_NULL (w); free (w->gs); free (w->gc); free (w->tau); free (w->sd); free (w->d); free (w); } int gsl_eigen_hermv (gsl_matrix_complex * A, gsl_vector * eval, gsl_matrix_complex * evec, gsl_eigen_hermv_workspace * w) { if (A->size1 != A->size2) { GSL_ERROR ("matrix must be square to compute eigenvalues", GSL_ENOTSQR); } else if (eval->size != A->size1) { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } else if (evec->size1 != A->size1 || evec->size2 != A->size1) { GSL_ERROR ("eigenvector matrix must match matrix size", GSL_EBADLEN); } else { const size_t N = A->size1; double *const d = w->d; double *const sd = w->sd; size_t a, b; /* handle special case */ if (N == 1) { gsl_complex A00 = gsl_matrix_complex_get (A, 0, 0); gsl_vector_set (eval, 0, GSL_REAL(A00)); gsl_matrix_complex_set (evec, 0, 0, GSL_COMPLEX_ONE); return GSL_SUCCESS; } /* Transform the matrix into a symmetric tridiagonal form */ { gsl_vector_view d_vec = gsl_vector_view_array (d, N); gsl_vector_view sd_vec = gsl_vector_view_array (sd, N - 1); gsl_vector_complex_view tau_vec = gsl_vector_complex_view_array (w->tau, N-1); gsl_linalg_hermtd_decomp (A, &tau_vec.vector); gsl_linalg_hermtd_unpack (A, &tau_vec.vector, evec, &d_vec.vector, &sd_vec.vector); } /* Make an initial pass through the tridiagonal decomposition to remove off-diagonal elements which are effectively zero */ chop_small_elements (N, d, sd); /* Progressively reduce the matrix until it is diagonal */ b = N - 1; while (b > 0) { if (sd[b - 1] == 0.0 || isnan(sd[b - 1])) { b--; continue; } /* Find the largest unreduced block (a,b) starting from b and working backwards */ a = b - 1; while (a > 0) { if (sd[a - 1] == 0.0) { break; } a--; } { size_t i; const size_t n_block = b - a + 1; double *d_block = d + a; double *sd_block = sd + a; double * const gc = w->gc; double * const gs = w->gs; /* apply QR reduction with implicit deflation to the unreduced block */ qrstep (n_block, d_block, sd_block, gc, gs); /* Apply Givens rotation Gij(c,s) to matrix Q, Q <- Q G */ for (i = 0; i < n_block - 1; i++) { const double c = gc[i], s = gs[i]; size_t k; for (k = 0; k < N; k++) { gsl_complex qki = gsl_matrix_complex_get (evec, k, a + i); gsl_complex qkj = gsl_matrix_complex_get (evec, k, a + i + 1); /* qki <= qki * c - qkj * s */ /* qkj <= qki * s + qkj * c */ gsl_complex x1 = gsl_complex_mul_real(qki, c); gsl_complex y1 = gsl_complex_mul_real(qkj, -s); gsl_complex x2 = gsl_complex_mul_real(qki, s); gsl_complex y2 = gsl_complex_mul_real(qkj, c); gsl_complex qqki = gsl_complex_add(x1, y1); gsl_complex qqkj = gsl_complex_add(x2, y2); gsl_matrix_complex_set (evec, k, a + i, qqki); gsl_matrix_complex_set (evec, k, a + i + 1, qqkj); } } /* remove any small off-diagonal elements */ chop_small_elements (n_block, d_block, sd_block); } } { gsl_vector_view d_vec = gsl_vector_view_array (d, N); gsl_vector_memcpy (eval, &d_vec.vector); } return GSL_SUCCESS; } } gsl/eigen/gensymmv.c0000644000175000017500000001225113536674414013033 0ustar eddedd/* eigen/gensymmv.c * * Copyright (C) 2007 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include /* * This module computes the eigenvalues and eigenvectors of a real * generalized symmetric-definite eigensystem A x = \lambda B x, where * A and B are symmetric, and B is positive-definite. */ static void gensymmv_normalize_eigenvectors(gsl_matrix *evec); /* gsl_eigen_gensymmv_alloc() Allocate a workspace for solving the generalized symmetric-definite eigenvalue problem. The size of this workspace is O(4n). Inputs: n - size of matrices Return: pointer to workspace */ gsl_eigen_gensymmv_workspace * gsl_eigen_gensymmv_alloc(const size_t n) { gsl_eigen_gensymmv_workspace *w; if (n == 0) { GSL_ERROR_NULL ("matrix dimension must be positive integer", GSL_EINVAL); } w = (gsl_eigen_gensymmv_workspace *) calloc (1, sizeof (gsl_eigen_gensymmv_workspace)); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->size = n; w->symmv_workspace_p = gsl_eigen_symmv_alloc(n); if (!w->symmv_workspace_p) { gsl_eigen_gensymmv_free(w); GSL_ERROR_NULL("failed to allocate space for symmv workspace", GSL_ENOMEM); } return (w); } /* gsl_eigen_gensymmv_alloc() */ /* gsl_eigen_gensymmv_free() Free workspace w */ void gsl_eigen_gensymmv_free (gsl_eigen_gensymmv_workspace * w) { RETURN_IF_NULL (w); if (w->symmv_workspace_p) gsl_eigen_symmv_free(w->symmv_workspace_p); free(w); } /* gsl_eigen_gensymmv_free() */ /* gsl_eigen_gensymmv() Solve the generalized symmetric-definite eigenvalue problem A x = \lambda B x for the eigenvalues \lambda and eigenvectors x. Inputs: A - real symmetric matrix B - real symmetric and positive definite matrix eval - where to store eigenvalues evec - where to store eigenvectors w - workspace Return: success or error */ int gsl_eigen_gensymmv (gsl_matrix * A, gsl_matrix * B, gsl_vector * eval, gsl_matrix * evec, gsl_eigen_gensymmv_workspace * w) { const size_t N = A->size1; /* check matrix and vector sizes */ if (N != A->size2) { GSL_ERROR ("matrix must be square to compute eigenvalues", GSL_ENOTSQR); } else if ((N != B->size1) || (N != B->size2)) { GSL_ERROR ("B matrix dimensions must match A", GSL_EBADLEN); } else if (eval->size != N) { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } else if (evec->size1 != evec->size2) { GSL_ERROR ("eigenvector matrix must be square", GSL_ENOTSQR); } else if (evec->size1 != N) { GSL_ERROR ("eigenvector matrix has wrong size", GSL_EBADLEN); } else if (w->size != N) { GSL_ERROR ("matrix size does not match workspace", GSL_EBADLEN); } else { int s; /* compute Cholesky factorization of B */ s = gsl_linalg_cholesky_decomp1(B); if (s != GSL_SUCCESS) return s; /* B is not positive definite */ /* transform to standard symmetric eigenvalue problem */ gsl_eigen_gensymm_standardize(A, B); /* compute eigenvalues and eigenvectors */ s = gsl_eigen_symmv(A, eval, evec, w->symmv_workspace_p); if (s != GSL_SUCCESS) return s; /* backtransform eigenvectors: evec -> L^{-T} evec */ gsl_blas_dtrsm(CblasLeft, CblasLower, CblasTrans, CblasNonUnit, 1.0, B, evec); /* the blas call destroyed the normalization - renormalize */ gensymmv_normalize_eigenvectors(evec); return GSL_SUCCESS; } } /* gsl_eigen_gensymmv() */ /******************************************** * INTERNAL ROUTINES * ********************************************/ /* gensymmv_normalize_eigenvectors() Normalize eigenvectors so that their Euclidean norm is 1 Inputs: evec - eigenvectors */ static void gensymmv_normalize_eigenvectors(gsl_matrix *evec) { const size_t N = evec->size1; size_t i; /* looping */ for (i = 0; i < N; ++i) { gsl_vector_view vi = gsl_matrix_column(evec, i); double scale = 1.0 / gsl_blas_dnrm2(&vi.vector); gsl_blas_dscal(scale, &vi.vector); } } /* gensymmv_normalize_eigenvectors() */ gsl/eigen/nonsymm.c0000644000175000017500000001574113536674414012675 0ustar eddedd/* eigen/nonsymm.c * * Copyright (C) 2006 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include /* * This module computes the eigenvalues of a real nonsymmetric * matrix, using the double shift Francis method. * * See the references in francis.c. * * This module gets the matrix ready by balancing it and * reducing it to Hessenberg form before passing it to the * francis module. */ /* gsl_eigen_nonsymm_alloc() Allocate a workspace for solving the nonsymmetric eigenvalue problem. The size of this workspace is O(2n) Inputs: n - size of matrix Return: pointer to workspace */ gsl_eigen_nonsymm_workspace * gsl_eigen_nonsymm_alloc(const size_t n) { gsl_eigen_nonsymm_workspace *w; if (n == 0) { GSL_ERROR_NULL ("matrix dimension must be positive integer", GSL_EINVAL); } w = (gsl_eigen_nonsymm_workspace *) calloc (1, sizeof (gsl_eigen_nonsymm_workspace)); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->size = n; w->Z = NULL; w->do_balance = 0; w->diag = gsl_vector_alloc(n); if (w->diag == 0) { gsl_eigen_nonsymm_free(w); GSL_ERROR_NULL ("failed to allocate space for balancing vector", GSL_ENOMEM); } w->tau = gsl_vector_alloc(n); if (w->tau == 0) { gsl_eigen_nonsymm_free(w); GSL_ERROR_NULL ("failed to allocate space for hessenberg coefficients", GSL_ENOMEM); } w->francis_workspace_p = gsl_eigen_francis_alloc(); if (w->francis_workspace_p == 0) { gsl_eigen_nonsymm_free(w); GSL_ERROR_NULL ("failed to allocate space for francis workspace", GSL_ENOMEM); } return (w); } /* gsl_eigen_nonsymm_alloc() */ /* gsl_eigen_nonsymm_free() Free workspace w */ void gsl_eigen_nonsymm_free (gsl_eigen_nonsymm_workspace * w) { RETURN_IF_NULL (w); if (w->tau) gsl_vector_free(w->tau); if (w->diag) gsl_vector_free(w->diag); if (w->francis_workspace_p) gsl_eigen_francis_free(w->francis_workspace_p); free(w); } /* gsl_eigen_nonsymm_free() */ /* gsl_eigen_nonsymm_params() Set some parameters which define how we solve the eigenvalue problem. Inputs: compute_t - 1 if we want to compute T, 0 if not balance - 1 if we want to balance the matrix, 0 if not w - nonsymm workspace */ void gsl_eigen_nonsymm_params (const int compute_t, const int balance, gsl_eigen_nonsymm_workspace *w) { gsl_eigen_francis_T(compute_t, w->francis_workspace_p); w->do_balance = balance; } /* gsl_eigen_nonsymm_params() */ /* gsl_eigen_nonsymm() Solve the nonsymmetric eigenvalue problem A x = \lambda x for the eigenvalues \lambda using the Francis method. Here we compute the real Schur form T = Z^t A Z with the diagonal blocks of T giving us the eigenvalues. Z is a matrix of Schur vectors which is not computed by this algorithm. See gsl_eigen_nonsymm_Z(). Inputs: A - general real matrix eval - where to store eigenvalues w - workspace Return: success or error Notes: If T is computed, it is stored in A on output. Otherwise the diagonal of A contains the 1-by-1 and 2-by-2 eigenvalue blocks. */ int gsl_eigen_nonsymm (gsl_matrix * A, gsl_vector_complex * eval, gsl_eigen_nonsymm_workspace * w) { const size_t N = A->size1; /* check matrix and vector sizes */ if (N != A->size2) { GSL_ERROR ("matrix must be square to compute eigenvalues", GSL_ENOTSQR); } else if (eval->size != N) { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } else { int s; if (w->do_balance) { /* balance the matrix */ gsl_linalg_balance_matrix(A, w->diag); } /* compute the Hessenberg reduction of A */ gsl_linalg_hessenberg_decomp(A, w->tau); if (w->Z) { /* * initialize the matrix Z to U, which is the matrix used * to construct the Hessenberg reduction. */ /* compute U and store it in Z */ gsl_linalg_hessenberg_unpack(A, w->tau, w->Z); /* find the eigenvalues and Schur vectors */ s = gsl_eigen_francis_Z(A, eval, w->Z, w->francis_workspace_p); if (w->do_balance) { /* * The Schur vectors in Z are the vectors for the balanced * matrix. We now must undo the balancing to get the * vectors for the original matrix A. */ gsl_linalg_balance_accum(w->Z, w->diag); } } else { /* find the eigenvalues only */ s = gsl_eigen_francis(A, eval, w->francis_workspace_p); } w->n_evals = w->francis_workspace_p->n_evals; return s; } } /* gsl_eigen_nonsymm() */ /* gsl_eigen_nonsymm_Z() Solve the nonsymmetric eigenvalue problem A x = \lambda x for the eigenvalues \lambda. Here we compute the real Schur form T = Z^t A Z with the diagonal blocks of T giving us the eigenvalues. Z is the matrix of Schur vectors. Inputs: A - general real matrix eval - where to store eigenvalues Z - where to store Schur vectors w - workspace Return: success or error Notes: If T is computed, it is stored in A on output. Otherwise the diagonal of A contains the 1-by-1 and 2-by-2 eigenvalue blocks. */ int gsl_eigen_nonsymm_Z (gsl_matrix * A, gsl_vector_complex * eval, gsl_matrix * Z, gsl_eigen_nonsymm_workspace * w) { /* check matrix and vector sizes */ if (A->size1 != A->size2) { GSL_ERROR ("matrix must be square to compute eigenvalues", GSL_ENOTSQR); } else if (eval->size != A->size1) { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } else if ((Z->size1 != Z->size2) || (Z->size1 != A->size1)) { GSL_ERROR ("Z matrix has wrong dimensions", GSL_EBADLEN); } else { int s; w->Z = Z; s = gsl_eigen_nonsymm(A, eval, w); w->Z = NULL; return s; } } /* gsl_eigen_nonsymm_Z() */ gsl/eigen/herm.c0000644000175000017500000001124013536674414012116 0ustar eddedd/* eigen/herm.c * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include /* Compute eigenvalues of complex hermitian matrix using reduction to real symmetric tridiagonal form, followed by QR iteration with implicit shifts. See Golub & Van Loan, "Matrix Computations" (3rd ed), Section 8.3 */ #include "qrstep.c" gsl_eigen_herm_workspace * gsl_eigen_herm_alloc (const size_t n) { gsl_eigen_herm_workspace * w ; if (n == 0) { GSL_ERROR_NULL ("matrix dimension must be positive integer", GSL_EINVAL); } w = (gsl_eigen_herm_workspace *) malloc (sizeof(gsl_eigen_herm_workspace)); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->d = (double *) malloc (n * sizeof (double)); if (w->d == 0) { GSL_ERROR_NULL ("failed to allocate space for diagonal", GSL_ENOMEM); } w->sd = (double *) malloc (n * sizeof (double)); if (w->sd == 0) { GSL_ERROR_NULL ("failed to allocate space for subdiagonal", GSL_ENOMEM); } w->tau = (double *) malloc (2 * n * sizeof (double)); if (w->tau == 0) { GSL_ERROR_NULL ("failed to allocate space for tau", GSL_ENOMEM); } w->size = n; return w; } void gsl_eigen_herm_free (gsl_eigen_herm_workspace * w) { RETURN_IF_NULL (w); free (w->tau); free (w->sd); free (w->d); free(w); } int gsl_eigen_herm (gsl_matrix_complex * A, gsl_vector * eval, gsl_eigen_herm_workspace * w) { if (A->size1 != A->size2) { GSL_ERROR ("matrix must be square to compute eigenvalues", GSL_ENOTSQR); } else if (eval->size != A->size1) { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } else { const size_t N = A->size1; double *const d = w->d; double *const sd = w->sd; size_t a, b; /* handle special case */ if (N == 1) { gsl_complex A00 = gsl_matrix_complex_get (A, 0, 0); gsl_vector_set (eval, 0, GSL_REAL(A00)); return GSL_SUCCESS; } { gsl_vector_view d_vec = gsl_vector_view_array (d, N); gsl_vector_view sd_vec = gsl_vector_view_array (sd, N - 1); gsl_vector_complex_view tau_vec = gsl_vector_complex_view_array (w->tau, N-1); gsl_linalg_hermtd_decomp (A, &tau_vec.vector); gsl_linalg_hermtd_unpack_T (A, &d_vec.vector, &sd_vec.vector); } /* Make an initial pass through the tridiagonal decomposition to remove off-diagonal elements which are effectively zero */ chop_small_elements (N, d, sd); /* Progressively reduce the matrix until it is diagonal */ b = N - 1; while (b > 0) { if (sd[b - 1] == 0.0 || isnan(sd[b - 1])) { b--; continue; } /* Find the largest unreduced block (a,b) starting from b and working backwards */ a = b - 1; while (a > 0) { if (sd[a - 1] == 0.0) { break; } a--; } { const size_t n_block = b - a + 1; double *d_block = d + a; double *sd_block = sd + a; /* apply QR reduction with implicit deflation to the unreduced block */ qrstep (n_block, d_block, sd_block, NULL, NULL); /* remove any small off-diagonal elements */ chop_small_elements (n_block, d_block, sd_block); } } { gsl_vector_view d_vec = gsl_vector_view_array (d, N); gsl_vector_memcpy (eval, &d_vec.vector); } return GSL_SUCCESS; } } gsl/eigen/recurse.h0000644000175000017500000000056113536675317012647 0ustar eddedd/* define how a problem is split recursively */ #define GSL_EIGEN_SPLIT(n) ((n >= 16) ? ((n + 8) / 16) * 8 : n / 2) #define GSL_EIGEN_SPLIT_COMPLEX(n) ((n >= 8) ? ((n + 4) / 8) * 4 : n / 2) /* matrix size for crossover to Level 2 algorithms */ #define CROSSOVER 24 #define CROSSOVER_GENSYMM CROSSOVER #define CROSSOVER_GENHERM CROSSOVER gsl/eigen/nonsymmv.c0000644000175000017500000007612413536674414013065 0ustar eddedd/* eigen/nonsymmv.c * * Copyright (C) 2006 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include /* * This module computes the eigenvalues and eigenvectors of a real * nonsymmetric matrix. * * This file contains routines based on original code from LAPACK * which is distributed under the modified BSD license. The LAPACK * routines used are DTREVC and DLALN2. */ #define GSL_NONSYMMV_SMLNUM (2.0 * GSL_DBL_MIN) #define GSL_NONSYMMV_BIGNUM ((1.0 - GSL_DBL_EPSILON) / GSL_NONSYMMV_SMLNUM) static void nonsymmv_get_right_eigenvectors(gsl_matrix *T, gsl_matrix *Z, gsl_vector_complex *eval, gsl_matrix_complex *evec, gsl_eigen_nonsymmv_workspace *w); static void nonsymmv_normalize_eigenvectors(gsl_vector_complex *eval, gsl_matrix_complex *evec); /* gsl_eigen_nonsymmv_alloc() Allocate a workspace for solving the nonsymmetric eigenvalue problem. The size of this workspace is O(5n). Inputs: n - size of matrices Return: pointer to workspace */ gsl_eigen_nonsymmv_workspace * gsl_eigen_nonsymmv_alloc(const size_t n) { gsl_eigen_nonsymmv_workspace *w; if (n == 0) { GSL_ERROR_NULL ("matrix dimension must be positive integer", GSL_EINVAL); } w = (gsl_eigen_nonsymmv_workspace *) calloc (1, sizeof (gsl_eigen_nonsymmv_workspace)); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->size = n; w->Z = NULL; w->nonsymm_workspace_p = gsl_eigen_nonsymm_alloc(n); if (w->nonsymm_workspace_p == 0) { gsl_eigen_nonsymmv_free(w); GSL_ERROR_NULL ("failed to allocate space for nonsymm workspace", GSL_ENOMEM); } /* * set parameters to compute the full Schur form T and balance * the matrices */ gsl_eigen_nonsymm_params(1, 0, w->nonsymm_workspace_p); w->work = gsl_vector_alloc(n); w->work2 = gsl_vector_alloc(n); w->work3 = gsl_vector_alloc(n); if (w->work == 0 || w->work2 == 0 || w->work3 == 0) { gsl_eigen_nonsymmv_free(w); GSL_ERROR_NULL ("failed to allocate space for nonsymmv additional workspace", GSL_ENOMEM); } return (w); } /* gsl_eigen_nonsymmv_alloc() */ /* gsl_eigen_nonsymmv_free() Free workspace w */ void gsl_eigen_nonsymmv_free (gsl_eigen_nonsymmv_workspace * w) { RETURN_IF_NULL (w); if (w->nonsymm_workspace_p) gsl_eigen_nonsymm_free(w->nonsymm_workspace_p); if (w->work) gsl_vector_free(w->work); if (w->work2) gsl_vector_free(w->work2); if (w->work3) gsl_vector_free(w->work3); free(w); } /* gsl_eigen_nonsymmv_free() */ /* gsl_eigen_nonsymmv_params() Set some parameters which define how we solve the eigenvalue problem. Inputs: balance - 1 if we want to balance the matrix, 0 if not w - nonsymmv workspace */ void gsl_eigen_nonsymmv_params (const int balance, gsl_eigen_nonsymmv_workspace *w) { gsl_eigen_nonsymm_params(1, balance, w->nonsymm_workspace_p); } /* gsl_eigen_nonsymm_params() */ /* gsl_eigen_nonsymmv() Solve the nonsymmetric eigensystem problem A x = \lambda x for the eigenvalues \lambda and right eigenvectors x Inputs: A - general real matrix eval - where to store eigenvalues evec - where to store eigenvectors w - workspace Return: success or error */ int gsl_eigen_nonsymmv (gsl_matrix * A, gsl_vector_complex * eval, gsl_matrix_complex * evec, gsl_eigen_nonsymmv_workspace * w) { const size_t N = A->size1; /* check matrix and vector sizes */ if (N != A->size2) { GSL_ERROR ("matrix must be square to compute eigenvalues", GSL_ENOTSQR); } else if (eval->size != N) { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } else if (evec->size1 != evec->size2) { GSL_ERROR ("eigenvector matrix must be square", GSL_ENOTSQR); } else if (evec->size1 != N) { GSL_ERROR ("eigenvector matrix has wrong size", GSL_EBADLEN); } else { int s; gsl_matrix Z; /* * We need a place to store the Schur vectors, so we will * treat evec as a real matrix and store them in the left * half - the factor of 2 in the tda corresponds to the * complex multiplicity */ Z.size1 = N; Z.size2 = N; Z.tda = 2 * N; Z.data = evec->data; Z.block = 0; Z.owner = 0; /* compute eigenvalues, Schur form, and Schur vectors */ s = gsl_eigen_nonsymm_Z(A, eval, &Z, w->nonsymm_workspace_p); if (w->Z) { /* * save the Schur vectors in user supplied matrix, since * they will be destroyed when computing eigenvectors */ gsl_matrix_memcpy(w->Z, &Z); } /* only compute eigenvectors if we found all eigenvalues */ if (s == GSL_SUCCESS) { /* compute eigenvectors */ nonsymmv_get_right_eigenvectors(A, &Z, eval, evec, w); /* normalize so that Euclidean norm is 1 */ nonsymmv_normalize_eigenvectors(eval, evec); } return s; } } /* gsl_eigen_nonsymmv() */ /* gsl_eigen_nonsymmv_Z() Compute eigenvalues and eigenvectors of a real nonsymmetric matrix and also save the Schur vectors. See comments in gsl_eigen_nonsymm_Z for more information. Inputs: A - real nonsymmetric matrix eval - where to store eigenvalues evec - where to store eigenvectors Z - where to store Schur vectors w - nonsymmv workspace Return: success or error */ int gsl_eigen_nonsymmv_Z (gsl_matrix * A, gsl_vector_complex * eval, gsl_matrix_complex * evec, gsl_matrix * Z, gsl_eigen_nonsymmv_workspace * w) { /* check matrix and vector sizes */ if (A->size1 != A->size2) { GSL_ERROR ("matrix must be square to compute eigenvalues/eigenvectors", GSL_ENOTSQR); } else if (eval->size != A->size1) { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } else if (evec->size1 != evec->size2) { GSL_ERROR ("eigenvector matrix must be square", GSL_ENOTSQR); } else if (evec->size1 != A->size1) { GSL_ERROR ("eigenvector matrix has wrong size", GSL_EBADLEN); } else if ((Z->size1 != Z->size2) || (Z->size1 != A->size1)) { GSL_ERROR ("Z matrix has wrong dimensions", GSL_EBADLEN); } else { int s; w->Z = Z; s = gsl_eigen_nonsymmv(A, eval, evec, w); w->Z = NULL; return s; } } /* gsl_eigen_nonsymmv_Z() */ /******************************************** * INTERNAL ROUTINES * ********************************************/ /* nonsymmv_get_right_eigenvectors() Compute the right eigenvectors of the Schur form T and then backtransform them using the Schur vectors to get right eigenvectors of the original matrix. Inputs: T - Schur form Z - Schur vectors eval - where to store eigenvalues (to ensure that the correct eigenvalue is stored in the same position as the eigenvectors) evec - where to store eigenvectors w - nonsymmv workspace Return: none Notes: 1) based on LAPACK routine DTREVC - the algorithm used is backsubstitution on the upper quasi triangular system T followed by backtransformation by Z to get vectors of the original matrix. 2) The Schur vectors in Z are destroyed and replaced with eigenvectors stored with the same storage scheme as DTREVC. The eigenvectors are also stored in 'evec' 3) The matrix T is unchanged on output 4) Each eigenvector is normalized so that the element of largest magnitude has magnitude 1; here the magnitude of a complex number (x,y) is taken to be |x| + |y| */ static void nonsymmv_get_right_eigenvectors(gsl_matrix *T, gsl_matrix *Z, gsl_vector_complex *eval, gsl_matrix_complex *evec, gsl_eigen_nonsymmv_workspace *w) { const size_t N = T->size1; const double smlnum = GSL_DBL_MIN * N / GSL_DBL_EPSILON; const double bignum = (1.0 - GSL_DBL_EPSILON) / smlnum; int i; /* looping */ size_t iu, /* looping */ ju, ii; gsl_complex lambda; /* current eigenvalue */ double lambda_re, /* Re(lambda) */ lambda_im; /* Im(lambda) */ gsl_matrix_view Tv, /* temporary views */ Zv; gsl_vector_view y, /* temporary views */ y2, ev, ev2; double dat[4], /* scratch arrays */ dat_X[4]; double scale; /* scale factor */ double xnorm; /* |X| */ gsl_vector_complex_view ecol, /* column of evec */ ecol2; int complex_pair; /* complex eigenvalue pair? */ double smin; /* * Compute 1-norm of each column of upper triangular part of T * to control overflow in triangular solver */ gsl_vector_set(w->work3, 0, 0.0); for (ju = 1; ju < N; ++ju) { gsl_vector_set(w->work3, ju, 0.0); for (iu = 0; iu < ju; ++iu) { gsl_vector_set(w->work3, ju, gsl_vector_get(w->work3, ju) + fabs(gsl_matrix_get(T, iu, ju))); } } for (i = (int) N - 1; i >= 0; --i) { iu = (size_t) i; /* get current eigenvalue and store it in lambda */ lambda_re = gsl_matrix_get(T, iu, iu); if (iu != 0 && gsl_matrix_get(T, iu, iu - 1) != 0.0) { lambda_im = sqrt(fabs(gsl_matrix_get(T, iu, iu - 1))) * sqrt(fabs(gsl_matrix_get(T, iu - 1, iu))); } else { lambda_im = 0.0; } GSL_SET_COMPLEX(&lambda, lambda_re, lambda_im); smin = GSL_MAX(GSL_DBL_EPSILON * (fabs(lambda_re) + fabs(lambda_im)), smlnum); smin = GSL_MAX(smin, GSL_NONSYMMV_SMLNUM); if (lambda_im == 0.0) { int k, l; gsl_vector_view bv, xv; /* real eigenvector */ /* * The ordering of eigenvalues in 'eval' is arbitrary and * does not necessarily follow the Schur form T, so store * lambda in the right slot in eval to ensure it corresponds * to the eigenvector we are about to compute */ gsl_vector_complex_set(eval, iu, lambda); /* * We need to solve the system: * * (T(1:iu-1, 1:iu-1) - lambda*I)*X = -T(1:iu-1,iu) */ /* construct right hand side */ for (k = 0; k < i; ++k) { gsl_vector_set(w->work, (size_t) k, -gsl_matrix_get(T, (size_t) k, iu)); } gsl_vector_set(w->work, iu, 1.0); for (l = i - 1; l >= 0; --l) { size_t lu = (size_t) l; if (lu == 0) complex_pair = 0; else complex_pair = gsl_matrix_get(T, lu, lu - 1) != 0.0; if (!complex_pair) { double x; /* * 1-by-1 diagonal block - solve the system: * * (T_{ll} - lambda)*x = -T_{l(iu)} */ Tv = gsl_matrix_submatrix(T, lu, lu, 1, 1); bv = gsl_vector_view_array(dat, 1); gsl_vector_set(&bv.vector, 0, gsl_vector_get(w->work, lu)); xv = gsl_vector_view_array(dat_X, 1); gsl_schur_solve_equation(1.0, &Tv.matrix, lambda_re, 1.0, 1.0, &bv.vector, &xv.vector, &scale, &xnorm, smin); /* scale x to avoid overflow */ x = gsl_vector_get(&xv.vector, 0); if (xnorm > 1.0) { if (gsl_vector_get(w->work3, lu) > bignum / xnorm) { x /= xnorm; scale /= xnorm; } } if (scale != 1.0) { gsl_vector_view wv; wv = gsl_vector_subvector(w->work, 0, iu + 1); gsl_blas_dscal(scale, &wv.vector); } gsl_vector_set(w->work, lu, x); if (lu > 0) { gsl_vector_view v1, v2; /* update right hand side */ v1 = gsl_matrix_subcolumn(T, lu, 0, lu); v2 = gsl_vector_subvector(w->work, 0, lu); gsl_blas_daxpy(-x, &v1.vector, &v2.vector); } /* if (l > 0) */ } /* if (!complex_pair) */ else { double x11, x21; /* * 2-by-2 diagonal block */ Tv = gsl_matrix_submatrix(T, lu - 1, lu - 1, 2, 2); bv = gsl_vector_view_array(dat, 2); gsl_vector_set(&bv.vector, 0, gsl_vector_get(w->work, lu - 1)); gsl_vector_set(&bv.vector, 1, gsl_vector_get(w->work, lu)); xv = gsl_vector_view_array(dat_X, 2); gsl_schur_solve_equation(1.0, &Tv.matrix, lambda_re, 1.0, 1.0, &bv.vector, &xv.vector, &scale, &xnorm, smin); /* scale X(1,1) and X(2,1) to avoid overflow */ x11 = gsl_vector_get(&xv.vector, 0); x21 = gsl_vector_get(&xv.vector, 1); if (xnorm > 1.0) { double beta; beta = GSL_MAX(gsl_vector_get(w->work3, lu - 1), gsl_vector_get(w->work3, lu)); if (beta > bignum / xnorm) { x11 /= xnorm; x21 /= xnorm; scale /= xnorm; } } /* scale if necessary */ if (scale != 1.0) { gsl_vector_view wv; wv = gsl_vector_subvector(w->work, 0, iu + 1); gsl_blas_dscal(scale, &wv.vector); } gsl_vector_set(w->work, lu - 1, x11); gsl_vector_set(w->work, lu, x21); /* update right hand side */ if (lu > 1) { gsl_vector_view v1, v2; v1 = gsl_matrix_subcolumn(T, lu - 1, 0, lu - 1); v2 = gsl_vector_subvector(w->work, 0, lu - 1); gsl_blas_daxpy(-x11, &v1.vector, &v2.vector); v1 = gsl_matrix_subcolumn(T, lu, 0, lu - 1); gsl_blas_daxpy(-x21, &v1.vector, &v2.vector); } --l; } /* if (complex_pair) */ } /* for (l = i - 1; l >= 0; --l) */ /* * At this point, w->work is an eigenvector of the * Schur form T. To get an eigenvector of the original * matrix, we multiply on the left by Z, the matrix of * Schur vectors */ ecol = gsl_matrix_complex_column(evec, iu); y = gsl_matrix_column(Z, iu); if (iu > 0) { gsl_vector_view x; Zv = gsl_matrix_submatrix(Z, 0, 0, N, iu); x = gsl_vector_subvector(w->work, 0, iu); /* compute Z * w->work and store it in Z(:,iu) */ gsl_blas_dgemv(CblasNoTrans, 1.0, &Zv.matrix, &x.vector, gsl_vector_get(w->work, iu), &y.vector); } /* if (iu > 0) */ /* store eigenvector into evec */ ev = gsl_vector_complex_real(&ecol.vector); ev2 = gsl_vector_complex_imag(&ecol.vector); scale = 0.0; for (ii = 0; ii < N; ++ii) { double a = gsl_vector_get(&y.vector, ii); /* store real part of eigenvector */ gsl_vector_set(&ev.vector, ii, a); /* set imaginary part to 0 */ gsl_vector_set(&ev2.vector, ii, 0.0); if (fabs(a) > scale) scale = fabs(a); } if (scale != 0.0) scale = 1.0 / scale; /* scale by magnitude of largest element */ gsl_blas_dscal(scale, &ev.vector); } /* if (GSL_IMAG(lambda) == 0.0) */ else { gsl_vector_complex_view bv, xv; size_t k; int l; gsl_complex lambda2; /* complex eigenvector */ /* * Store the complex conjugate eigenvalues in the right * slots in eval */ GSL_SET_REAL(&lambda2, GSL_REAL(lambda)); GSL_SET_IMAG(&lambda2, -GSL_IMAG(lambda)); gsl_vector_complex_set(eval, iu - 1, lambda); gsl_vector_complex_set(eval, iu, lambda2); /* * First solve: * * [ T(i:i+1,i:i+1) - lambda*I ] * X = 0 */ if (fabs(gsl_matrix_get(T, iu - 1, iu)) >= fabs(gsl_matrix_get(T, iu, iu - 1))) { gsl_vector_set(w->work, iu - 1, 1.0); gsl_vector_set(w->work2, iu, lambda_im / gsl_matrix_get(T, iu - 1, iu)); } else { gsl_vector_set(w->work, iu - 1, -lambda_im / gsl_matrix_get(T, iu, iu - 1)); gsl_vector_set(w->work2, iu, 1.0); } gsl_vector_set(w->work, iu, 0.0); gsl_vector_set(w->work2, iu - 1, 0.0); /* construct right hand side */ for (k = 0; k < iu - 1; ++k) { gsl_vector_set(w->work, k, -gsl_vector_get(w->work, iu - 1) * gsl_matrix_get(T, k, iu - 1)); gsl_vector_set(w->work2, k, -gsl_vector_get(w->work2, iu) * gsl_matrix_get(T, k, iu)); } /* * We must solve the upper quasi-triangular system: * * [ T(1:i-2,1:i-2) - lambda*I ] * X = s*(work + i*work2) */ for (l = i - 2; l >= 0; --l) { size_t lu = (size_t) l; if (lu == 0) complex_pair = 0; else complex_pair = gsl_matrix_get(T, lu, lu - 1) != 0.0; if (!complex_pair) { gsl_complex bval; gsl_complex x; /* * 1-by-1 diagonal block - solve the system: * * (T_{ll} - lambda)*x = work + i*work2 */ Tv = gsl_matrix_submatrix(T, lu, lu, 1, 1); bv = gsl_vector_complex_view_array(dat, 1); xv = gsl_vector_complex_view_array(dat_X, 1); GSL_SET_COMPLEX(&bval, gsl_vector_get(w->work, lu), gsl_vector_get(w->work2, lu)); gsl_vector_complex_set(&bv.vector, 0, bval); gsl_schur_solve_equation_z(1.0, &Tv.matrix, &lambda, 1.0, 1.0, &bv.vector, &xv.vector, &scale, &xnorm, smin); if (xnorm > 1.0) { if (gsl_vector_get(w->work3, lu) > bignum / xnorm) { gsl_blas_zdscal(1.0/xnorm, &xv.vector); scale /= xnorm; } } /* scale if necessary */ if (scale != 1.0) { gsl_vector_view wv; wv = gsl_vector_subvector(w->work, 0, iu + 1); gsl_blas_dscal(scale, &wv.vector); wv = gsl_vector_subvector(w->work2, 0, iu + 1); gsl_blas_dscal(scale, &wv.vector); } x = gsl_vector_complex_get(&xv.vector, 0); gsl_vector_set(w->work, lu, GSL_REAL(x)); gsl_vector_set(w->work2, lu, GSL_IMAG(x)); /* update the right hand side */ if (lu > 0) { gsl_vector_view v1, v2; v1 = gsl_matrix_subcolumn(T, lu, 0, lu); v2 = gsl_vector_subvector(w->work, 0, lu); gsl_blas_daxpy(-GSL_REAL(x), &v1.vector, &v2.vector); v2 = gsl_vector_subvector(w->work2, 0, lu); gsl_blas_daxpy(-GSL_IMAG(x), &v1.vector, &v2.vector); } /* if (lu > 0) */ } /* if (!complex_pair) */ else { gsl_complex b1, b2, x1, x2; /* * 2-by-2 diagonal block - solve the system */ Tv = gsl_matrix_submatrix(T, lu - 1, lu - 1, 2, 2); bv = gsl_vector_complex_view_array(dat, 2); xv = gsl_vector_complex_view_array(dat_X, 2); GSL_SET_COMPLEX(&b1, gsl_vector_get(w->work, lu - 1), gsl_vector_get(w->work2, lu - 1)); GSL_SET_COMPLEX(&b2, gsl_vector_get(w->work, lu), gsl_vector_get(w->work2, lu)); gsl_vector_complex_set(&bv.vector, 0, b1); gsl_vector_complex_set(&bv.vector, 1, b2); gsl_schur_solve_equation_z(1.0, &Tv.matrix, &lambda, 1.0, 1.0, &bv.vector, &xv.vector, &scale, &xnorm, smin); x1 = gsl_vector_complex_get(&xv.vector, 0); x2 = gsl_vector_complex_get(&xv.vector, 1); if (xnorm > 1.0) { double beta; beta = GSL_MAX(gsl_vector_get(w->work3, lu - 1), gsl_vector_get(w->work3, lu)); if (beta > bignum / xnorm) { gsl_blas_zdscal(1.0/xnorm, &xv.vector); scale /= xnorm; } } /* scale if necessary */ if (scale != 1.0) { gsl_vector_view wv; wv = gsl_vector_subvector(w->work, 0, iu + 1); gsl_blas_dscal(scale, &wv.vector); wv = gsl_vector_subvector(w->work2, 0, iu + 1); gsl_blas_dscal(scale, &wv.vector); } gsl_vector_set(w->work, lu - 1, GSL_REAL(x1)); gsl_vector_set(w->work, lu, GSL_REAL(x2)); gsl_vector_set(w->work2, lu - 1, GSL_IMAG(x1)); gsl_vector_set(w->work2, lu, GSL_IMAG(x2)); /* update right hand side */ if (lu > 1) { gsl_vector_view v1, v2, v3, v4; v1 = gsl_matrix_subcolumn(T, lu - 1, 0, lu - 1); v4 = gsl_matrix_subcolumn(T, lu, 0, lu - 1); v2 = gsl_vector_subvector(w->work, 0, lu - 1); v3 = gsl_vector_subvector(w->work2, 0, lu - 1); gsl_blas_daxpy(-GSL_REAL(x1), &v1.vector, &v2.vector); gsl_blas_daxpy(-GSL_REAL(x2), &v4.vector, &v2.vector); gsl_blas_daxpy(-GSL_IMAG(x1), &v1.vector, &v3.vector); gsl_blas_daxpy(-GSL_IMAG(x2), &v4.vector, &v3.vector); } /* if (lu > 1) */ --l; } /* if (complex_pair) */ } /* for (l = i - 2; l >= 0; --l) */ /* * At this point, work + i*work2 is an eigenvector * of T - backtransform to get an eigenvector of the * original matrix */ y = gsl_matrix_column(Z, iu - 1); y2 = gsl_matrix_column(Z, iu); if (iu > 1) { gsl_vector_view x; /* compute real part of eigenvectors */ Zv = gsl_matrix_submatrix(Z, 0, 0, N, iu - 1); x = gsl_vector_subvector(w->work, 0, iu - 1); gsl_blas_dgemv(CblasNoTrans, 1.0, &Zv.matrix, &x.vector, gsl_vector_get(w->work, iu - 1), &y.vector); /* now compute the imaginary part */ x = gsl_vector_subvector(w->work2, 0, iu - 1); gsl_blas_dgemv(CblasNoTrans, 1.0, &Zv.matrix, &x.vector, gsl_vector_get(w->work2, iu), &y2.vector); } else { gsl_blas_dscal(gsl_vector_get(w->work, iu - 1), &y.vector); gsl_blas_dscal(gsl_vector_get(w->work2, iu), &y2.vector); } /* * Now store the eigenvectors into evec - the real parts * are Z(:,iu - 1) and the imaginary parts are * +/- Z(:,iu) */ /* get views of the two eigenvector slots */ ecol = gsl_matrix_complex_column(evec, iu - 1); ecol2 = gsl_matrix_complex_column(evec, iu); /* * save imaginary part first as it may get overwritten * when copying the real part due to our storage scheme * in Z/evec */ ev = gsl_vector_complex_imag(&ecol.vector); ev2 = gsl_vector_complex_imag(&ecol2.vector); scale = 0.0; for (ii = 0; ii < N; ++ii) { double a = gsl_vector_get(&y2.vector, ii); scale = GSL_MAX(scale, fabs(a) + fabs(gsl_vector_get(&y.vector, ii))); gsl_vector_set(&ev.vector, ii, a); gsl_vector_set(&ev2.vector, ii, -a); } /* now save the real part */ ev = gsl_vector_complex_real(&ecol.vector); ev2 = gsl_vector_complex_real(&ecol2.vector); for (ii = 0; ii < N; ++ii) { double a = gsl_vector_get(&y.vector, ii); gsl_vector_set(&ev.vector, ii, a); gsl_vector_set(&ev2.vector, ii, a); } if (scale != 0.0) scale = 1.0 / scale; /* scale by largest element magnitude */ gsl_blas_zdscal(scale, &ecol.vector); gsl_blas_zdscal(scale, &ecol2.vector); /* * decrement i since we took care of two eigenvalues at * the same time */ --i; } /* if (GSL_IMAG(lambda) != 0.0) */ } /* for (i = (int) N - 1; i >= 0; --i) */ } /* nonsymmv_get_right_eigenvectors() */ /* nonsymmv_normalize_eigenvectors() Normalize eigenvectors so that their Euclidean norm is 1 Inputs: eval - eigenvalues evec - eigenvectors */ static void nonsymmv_normalize_eigenvectors(gsl_vector_complex *eval, gsl_matrix_complex *evec) { const size_t N = evec->size1; size_t i; /* looping */ gsl_complex ei; gsl_vector_complex_view vi; gsl_vector_view re, im; double scale; /* scaling factor */ for (i = 0; i < N; ++i) { ei = gsl_vector_complex_get(eval, i); vi = gsl_matrix_complex_column(evec, i); re = gsl_vector_complex_real(&vi.vector); if (GSL_IMAG(ei) == 0.0) { scale = 1.0 / gsl_blas_dnrm2(&re.vector); gsl_blas_dscal(scale, &re.vector); } else if (GSL_IMAG(ei) > 0.0) { im = gsl_vector_complex_imag(&vi.vector); scale = 1.0 / gsl_hypot(gsl_blas_dnrm2(&re.vector), gsl_blas_dnrm2(&im.vector)); gsl_blas_zdscal(scale, &vi.vector); vi = gsl_matrix_complex_column(evec, i + 1); gsl_blas_zdscal(scale, &vi.vector); } } } /* nonsymmv_normalize_eigenvectors() */ gsl/eigen/symmv.c0000644000175000017500000001345113536674414012344 0ustar eddedd/* eigen/symmv.c * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include /* Compute eigenvalues/eigenvectors of real symmetric matrix using reduction to tridiagonal form, followed by QR iteration with implicit shifts. See Golub & Van Loan, "Matrix Computations" (3rd ed), Section 8.3 */ #include "qrstep.c" gsl_eigen_symmv_workspace * gsl_eigen_symmv_alloc (const size_t n) { gsl_eigen_symmv_workspace * w ; if (n == 0) { GSL_ERROR_NULL ("matrix dimension must be positive integer", GSL_EINVAL); } w= ((gsl_eigen_symmv_workspace *) malloc (sizeof(gsl_eigen_symmv_workspace))); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->d = (double *) malloc (n * sizeof (double)); if (w->d == 0) { GSL_ERROR_NULL ("failed to allocate space for diagonal", GSL_ENOMEM); } w->sd = (double *) malloc (n * sizeof (double)); if (w->sd == 0) { GSL_ERROR_NULL ("failed to allocate space for subdiagonal", GSL_ENOMEM); } w->gc = (double *) malloc (n * sizeof (double)); if (w->gc == 0) { GSL_ERROR_NULL ("failed to allocate space for cosines", GSL_ENOMEM); } w->gs = (double *) malloc (n * sizeof (double)); if (w->gs == 0) { GSL_ERROR_NULL ("failed to allocate space for sines", GSL_ENOMEM); } w->size = n; return w; } void gsl_eigen_symmv_free (gsl_eigen_symmv_workspace * w) { RETURN_IF_NULL (w); free(w->gs); free(w->gc); free(w->sd); free(w->d); free(w); } int gsl_eigen_symmv (gsl_matrix * A, gsl_vector * eval, gsl_matrix * evec, gsl_eigen_symmv_workspace * w) { if (A->size1 != A->size2) { GSL_ERROR ("matrix must be square to compute eigenvalues", GSL_ENOTSQR); } else if (eval->size != A->size1) { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } else if (evec->size1 != A->size1 || evec->size2 != A->size1) { GSL_ERROR ("eigenvector matrix must match matrix size", GSL_EBADLEN); } else { double *const d = w->d; double *const sd = w->sd; const size_t N = A->size1; size_t a, b; /* handle special case */ if (N == 1) { double A00 = gsl_matrix_get (A, 0, 0); gsl_vector_set (eval, 0, A00); gsl_matrix_set (evec, 0, 0, 1.0); return GSL_SUCCESS; } /* use sd as the temporary workspace for the decomposition when computing eigenvectors */ { gsl_vector_view d_vec = gsl_vector_view_array (d, N); gsl_vector_view sd_vec = gsl_vector_view_array (sd, N - 1); gsl_vector_view tau = gsl_vector_view_array (sd, N - 1); gsl_linalg_symmtd_decomp (A, &tau.vector); gsl_linalg_symmtd_unpack (A, &tau.vector, evec, &d_vec.vector, &sd_vec.vector); } /* Make an initial pass through the tridiagonal decomposition to remove off-diagonal elements which are effectively zero */ chop_small_elements (N, d, sd); /* Progressively reduce the matrix until it is diagonal */ b = N - 1; while (b > 0) { if (sd[b - 1] == 0.0 || isnan(sd[b - 1])) { b--; continue; } /* Find the largest unreduced block (a,b) starting from b and working backwards */ a = b - 1; while (a > 0) { if (sd[a - 1] == 0.0) { break; } a--; } { size_t i; const size_t n_block = b - a + 1; double *d_block = d + a; double *sd_block = sd + a; double * const gc = w->gc; double * const gs = w->gs; /* apply QR reduction with implicit deflation to the unreduced block */ qrstep (n_block, d_block, sd_block, gc, gs); /* Apply Givens rotation Gij(c,s) to matrix Q, Q <- Q G */ for (i = 0; i < n_block - 1; i++) { const double c = gc[i], s = gs[i]; size_t k; for (k = 0; k < N; k++) { double qki = gsl_matrix_get (evec, k, a + i); double qkj = gsl_matrix_get (evec, k, a + i + 1); gsl_matrix_set (evec, k, a + i, qki * c - qkj * s); gsl_matrix_set (evec, k, a + i + 1, qki * s + qkj * c); } } /* remove any small off-diagonal elements */ chop_small_elements (N, d, sd); } } { gsl_vector_view d_vec = gsl_vector_view_array (d, N); gsl_vector_memcpy (eval, &d_vec.vector); } return GSL_SUCCESS; } } gsl/eigen/sort.c0000644000175000017500000002357013536674414012163 0ustar eddedd/* eigen/sort.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2006, 2007 Gerard Jungman, Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman, Modified: B. Gough. */ #include #include #include #include #include #include /* Compares real parts of a and b and, if they are not approximately equal, * returns Re(a) < Re(b); otherwise returns Im(a) < Im(b). */ static int complex_less(gsl_complex a, gsl_complex b) { return gsl_fcmp(GSL_REAL(a), GSL_REAL(b), GSL_DBL_EPSILON) == 0 ? GSL_IMAG(a) < GSL_IMAG(b) : GSL_REAL(a) < GSL_REAL(b); } /* The eigen_sort below is not very good, but it is simple and * self-contained. We can always implement an improved sort later. */ int gsl_eigen_symmv_sort (gsl_vector * eval, gsl_matrix * evec, gsl_eigen_sort_t sort_type) { if (evec->size1 != evec->size2) { GSL_ERROR ("eigenvector matrix must be square", GSL_ENOTSQR); } else if (eval->size != evec->size1) { GSL_ERROR ("eigenvalues must match eigenvector matrix", GSL_EBADLEN); } else { const size_t N = eval->size; size_t i; for (i = 0; i < N - 1; i++) { size_t j; size_t k = i; double ek = gsl_vector_get (eval, i); /* search for something to swap */ for (j = i + 1; j < N; j++) { int test; const double ej = gsl_vector_get (eval, j); switch (sort_type) { case GSL_EIGEN_SORT_VAL_ASC: test = (ej < ek); break; case GSL_EIGEN_SORT_VAL_DESC: test = (ej > ek); break; case GSL_EIGEN_SORT_ABS_ASC: test = (fabs (ej) < fabs (ek)); break; case GSL_EIGEN_SORT_ABS_DESC: test = (fabs (ej) > fabs (ek)); break; default: GSL_ERROR ("unrecognized sort type", GSL_EINVAL); } if (test) { k = j; ek = ej; } } if (k != i) { /* swap eigenvalues */ gsl_vector_swap_elements (eval, i, k); /* swap eigenvectors */ gsl_matrix_swap_columns (evec, i, k); } } return GSL_SUCCESS; } } int gsl_eigen_hermv_sort (gsl_vector * eval, gsl_matrix_complex * evec, gsl_eigen_sort_t sort_type) { if (evec->size1 != evec->size2) { GSL_ERROR ("eigenvector matrix must be square", GSL_ENOTSQR); } else if (eval->size != evec->size1) { GSL_ERROR ("eigenvalues must match eigenvector matrix", GSL_EBADLEN); } else { const size_t N = eval->size; size_t i; for (i = 0; i < N - 1; i++) { size_t j; size_t k = i; double ek = gsl_vector_get (eval, i); /* search for something to swap */ for (j = i + 1; j < N; j++) { int test; const double ej = gsl_vector_get (eval, j); switch (sort_type) { case GSL_EIGEN_SORT_VAL_ASC: test = (ej < ek); break; case GSL_EIGEN_SORT_VAL_DESC: test = (ej > ek); break; case GSL_EIGEN_SORT_ABS_ASC: test = (fabs (ej) < fabs (ek)); break; case GSL_EIGEN_SORT_ABS_DESC: test = (fabs (ej) > fabs (ek)); break; default: GSL_ERROR ("unrecognized sort type", GSL_EINVAL); } if (test) { k = j; ek = ej; } } if (k != i) { /* swap eigenvalues */ gsl_vector_swap_elements (eval, i, k); /* swap eigenvectors */ gsl_matrix_complex_swap_columns (evec, i, k); } } return GSL_SUCCESS; } } int gsl_eigen_nonsymmv_sort (gsl_vector_complex * eval, gsl_matrix_complex * evec, gsl_eigen_sort_t sort_type) { if (evec && (evec->size1 != evec->size2)) { GSL_ERROR ("eigenvector matrix must be square", GSL_ENOTSQR); } else if (evec && (eval->size != evec->size1)) { GSL_ERROR ("eigenvalues must match eigenvector matrix", GSL_EBADLEN); } else { const size_t N = eval->size; size_t i; for (i = 0; i < N - 1; i++) { size_t j; size_t k = i; gsl_complex ek = gsl_vector_complex_get (eval, i); /* search for something to swap */ for (j = i + 1; j < N; j++) { int test; const gsl_complex ej = gsl_vector_complex_get (eval, j); switch (sort_type) { case GSL_EIGEN_SORT_ABS_ASC: test = (gsl_complex_abs (ej) < gsl_complex_abs (ek)); break; case GSL_EIGEN_SORT_ABS_DESC: test = (gsl_complex_abs (ej) > gsl_complex_abs (ek)); break; case GSL_EIGEN_SORT_VAL_ASC: test = complex_less(ej, ek); break; case GSL_EIGEN_SORT_VAL_DESC: test = complex_less(ek, ej); break; default: GSL_ERROR ("invalid sort type", GSL_EINVAL); } if (test) { k = j; ek = ej; } } if (k != i) { /* swap eigenvalues */ gsl_vector_complex_swap_elements (eval, i, k); /* swap eigenvectors */ if (evec) gsl_matrix_complex_swap_columns (evec, i, k); } } return GSL_SUCCESS; } } int gsl_eigen_gensymmv_sort (gsl_vector * eval, gsl_matrix * evec, gsl_eigen_sort_t sort_type) { int s; s = gsl_eigen_symmv_sort(eval, evec, sort_type); return s; } int gsl_eigen_genhermv_sort (gsl_vector * eval, gsl_matrix_complex * evec, gsl_eigen_sort_t sort_type) { int s; s = gsl_eigen_hermv_sort(eval, evec, sort_type); return s; } int gsl_eigen_genv_sort (gsl_vector_complex * alpha, gsl_vector * beta, gsl_matrix_complex * evec, gsl_eigen_sort_t sort_type) { if (evec->size1 != evec->size2) { GSL_ERROR ("eigenvector matrix must be square", GSL_ENOTSQR); } else if (alpha->size != evec->size1 || beta->size != evec->size1) { GSL_ERROR ("eigenvalues must match eigenvector matrix", GSL_EBADLEN); } else { const size_t N = alpha->size; size_t i; for (i = 0; i < N - 1; i++) { size_t j; size_t k = i; gsl_complex ak = gsl_vector_complex_get (alpha, i); double bk = gsl_vector_get(beta, i); gsl_complex ek; if (bk < GSL_DBL_EPSILON) { GSL_SET_COMPLEX(&ek, GSL_SIGN(GSL_REAL(ak)) ? GSL_POSINF : GSL_NEGINF, GSL_SIGN(GSL_IMAG(ak)) ? GSL_POSINF : GSL_NEGINF); } else ek = gsl_complex_div_real(ak, bk); /* search for something to swap */ for (j = i + 1; j < N; j++) { int test; const gsl_complex aj = gsl_vector_complex_get (alpha, j); double bj = gsl_vector_get(beta, j); gsl_complex ej; if (bj < GSL_DBL_EPSILON) { GSL_SET_COMPLEX(&ej, GSL_SIGN(GSL_REAL(aj)) ? GSL_POSINF : GSL_NEGINF, GSL_SIGN(GSL_IMAG(aj)) ? GSL_POSINF : GSL_NEGINF); } else ej = gsl_complex_div_real(aj, bj); switch (sort_type) { case GSL_EIGEN_SORT_ABS_ASC: test = (gsl_complex_abs (ej) < gsl_complex_abs (ek)); break; case GSL_EIGEN_SORT_ABS_DESC: test = (gsl_complex_abs (ej) > gsl_complex_abs (ek)); break; case GSL_EIGEN_SORT_VAL_ASC: case GSL_EIGEN_SORT_VAL_DESC: default: GSL_ERROR ("invalid sort type", GSL_EINVAL); } if (test) { k = j; ek = ej; } } if (k != i) { /* swap eigenvalues */ gsl_vector_complex_swap_elements (alpha, i, k); gsl_vector_swap_elements (beta, i, k); /* swap eigenvectors */ gsl_matrix_complex_swap_columns (evec, i, k); } } return GSL_SUCCESS; } } gsl/eigen/schur.c0000644000175000017500000005300413536674414012313 0ustar eddedd/* eigen/schur.c * * Copyright (C) 2006, 2007 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include /* * This module contains some routines related to manipulating the * Schur form of a matrix which are needed by the eigenvalue solvers * * This file contains routines based on original code from LAPACK * which is distributed under the modified BSD license. */ #define GSL_SCHUR_SMLNUM (2.0 * GSL_DBL_MIN) #define GSL_SCHUR_BIGNUM ((1.0 - GSL_DBL_EPSILON) / GSL_SCHUR_SMLNUM) /* gsl_schur_gen_eigvals() Compute the eigenvalues of a 2-by-2 generalized block. Inputs: A - 2-by-2 matrix B - 2-by-2 upper triangular matrix wr1 - (output) see notes wr2 - (output) see notes wi - (output) see notes scale1 - (output) see notes scale2 - (output) see notes Return: success Notes: 1) If the block contains real eigenvalues, then wi is set to 0, and wr1, wr2, scale1, and scale2 are set such that: eval1 = wr1 * scale1 eval2 = wr2 * scale2 If the block contains complex eigenvalues, then wr1, wr2, scale1, scale2, and wi are set such that: wr1 = wr2 = scale1 * Re(eval) wi = scale1 * Im(eval) wi is always non-negative 2) This routine is based on LAPACK DLAG2 */ int gsl_schur_gen_eigvals(const gsl_matrix *A, const gsl_matrix *B, double *wr1, double *wr2, double *wi, double *scale1, double *scale2) { const double safemin = GSL_DBL_MIN * 1.0e2; const double safemax = 1.0 / safemin; const double rtmin = sqrt(safemin); const double rtmax = 1.0 / rtmin; double anorm, bnorm; double ascale, bscale, bsize; double s1, s2; double A11, A12, A21, A22; double B11, B12, B22; double binv11, binv22; double bmin; double as11, as12, as22, abi22; double pp, qq, shift, ss, discr, r; /* scale A */ anorm = GSL_MAX(GSL_MAX(fabs(gsl_matrix_get(A, 0, 0)) + fabs(gsl_matrix_get(A, 1, 0)), fabs(gsl_matrix_get(A, 0, 1)) + fabs(gsl_matrix_get(A, 1, 1))), safemin); ascale = 1.0 / anorm; A11 = ascale * gsl_matrix_get(A, 0, 0); A12 = ascale * gsl_matrix_get(A, 0, 1); A21 = ascale * gsl_matrix_get(A, 1, 0); A22 = ascale * gsl_matrix_get(A, 1, 1); /* perturb B if necessary to ensure non-singularity */ B11 = gsl_matrix_get(B, 0, 0); B12 = gsl_matrix_get(B, 0, 1); B22 = gsl_matrix_get(B, 1, 1); bmin = rtmin * GSL_MAX(fabs(B11), GSL_MAX(fabs(B12), GSL_MAX(fabs(B22), rtmin))); if (fabs(B11) < bmin) B11 = GSL_SIGN(B11) * bmin; if (fabs(B22) < bmin) B22 = GSL_SIGN(B22) * bmin; /* scale B */ bnorm = GSL_MAX(fabs(B11), GSL_MAX(fabs(B12) + fabs(B22), safemin)); bsize = GSL_MAX(fabs(B11), fabs(B22)); bscale = 1.0 / bsize; B11 *= bscale; B12 *= bscale; B22 *= bscale; /* compute larger eigenvalue */ binv11 = 1.0 / B11; binv22 = 1.0 / B22; s1 = A11 * binv11; s2 = A22 * binv22; if (fabs(s1) <= fabs(s2)) { as12 = A12 - s1 * B12; as22 = A22 - s1 * B22; ss = A21 * (binv11 * binv22); abi22 = as22 * binv22 - ss * B12; pp = 0.5 * abi22; shift = s1; } else { as12 = A12 - s2 * B12; as11 = A11 - s2 * B11; ss = A21 * (binv11 * binv22); abi22 = -ss * B12; pp = 0.5 * (as11 * binv11 + abi22); shift = s2; } qq = ss * as12; if (fabs(pp * rtmin) >= 1.0) { discr = (rtmin * pp) * (rtmin * pp) + qq * safemin; r = sqrt(fabs(discr)) * rtmax; } else if (pp * pp + fabs(qq) <= safemin) { discr = (rtmax * pp) * (rtmax * pp) + qq * safemax; r = sqrt(fabs(discr)) * rtmin; } else { discr = pp * pp + qq; r = sqrt(fabs(discr)); } if (discr >= 0.0 || r == 0.0) { double sum = pp + GSL_SIGN(pp) * r; double diff = pp - GSL_SIGN(pp) * r; double wbig = shift + sum; double wsmall = shift + diff; /* compute smaller eigenvalue */ if (0.5 * fabs(wbig) > GSL_MAX(fabs(wsmall), safemin)) { double wdet = (A11*A22 - A12*A21) * (binv11 * binv22); wsmall = wdet / wbig; } /* choose (real) eigenvalue closest to 2,2 element of AB^{-1} for wr1 */ if (pp > abi22) { *wr1 = GSL_MIN(wbig, wsmall); *wr2 = GSL_MAX(wbig, wsmall); } else { *wr1 = GSL_MAX(wbig, wsmall); *wr2 = GSL_MIN(wbig, wsmall); } *wi = 0.0; } else { /* complex eigenvalues */ *wr1 = shift + pp; *wr2 = *wr1; *wi = r; } /* compute scaling */ { const double fuzzy1 = 1.0 + 1.0e-5; double c1, c2, c3, c4, c5; double wabs, wsize, wscale; c1 = bsize * (safemin * GSL_MAX(1.0, ascale)); c2 = safemin * GSL_MAX(1.0, bnorm); c3 = bsize * safemin; if (ascale <= 1.0 && bsize <= 1.0) c4 = GSL_MIN(1.0, (ascale / safemin) * bsize); else c4 = 1.0; if (ascale <= 1.0 || bsize <= 1.0) c5 = GSL_MIN(1.0, ascale * bsize); else c5 = 1.0; /* scale first eigenvalue */ wabs = fabs(*wr1) + fabs(*wi); wsize = GSL_MAX(safemin, GSL_MAX(c1, GSL_MAX(fuzzy1 * (wabs*c2 + c3), GSL_MIN(c4, 0.5 * GSL_MAX(wabs, c5))))); if (wsize != 1.0) { wscale = 1.0 / wsize; if (wsize > 1.0) { *scale1 = (GSL_MAX(ascale, bsize) * wscale) * GSL_MIN(ascale, bsize); } else { *scale1 = (GSL_MIN(ascale, bsize) * wscale) * GSL_MAX(ascale, bsize); } *wr1 *= wscale; if (*wi != 0.0) { *wi *= wscale; *wr2 = *wr1; *scale2 = *scale1; } } else { *scale1 = ascale * bsize; *scale2 = *scale1; } /* scale second eigenvalue if real */ if (*wi == 0.0) { wsize = GSL_MAX(safemin, GSL_MAX(c1, GSL_MAX(fuzzy1 * (fabs(*wr2) * c2 + c3), GSL_MIN(c4, 0.5 * GSL_MAX(fabs(*wr2), c5))))); if (wsize != 1.0) { wscale = 1.0 / wsize; if (wsize > 1.0) { *scale2 = (GSL_MAX(ascale, bsize) * wscale) * GSL_MIN(ascale, bsize); } else { *scale2 = (GSL_MIN(ascale, bsize) * wscale) * GSL_MAX(ascale, bsize); } *wr2 *= wscale; } else { *scale2 = ascale * bsize; } } } return GSL_SUCCESS; } /* gsl_schur_gen_eigvals() */ /* gsl_schur_solve_equation() Solve the equation which comes up in the back substitution when computing eigenvectors corresponding to real eigenvalues. The equation that is solved is: (ca*A - z*D)*x = s*b where A is n-by-n with n = 1 or 2 D is a n-by-n diagonal matrix b and x are n-by-1 real vectors s is a scaling factor set by this function to prevent overflow in x Inputs: ca - coefficient multiplying A A - square matrix (n-by-n) z - real scalar (eigenvalue) d1 - (1,1) element in diagonal matrix D d2 - (2,2) element in diagonal matrix D b - right hand side vector x - (output) where to store solution s - (output) scale factor xnorm - (output) infinity norm of X smin - lower bound on singular values of A - if ca*A - z*D is less than this value, we'll use smin*I instead. This value should be a safe distance above underflow. Return: success Notes: 1) A and b are not changed on output 2) Based on lapack routine DLALN2 */ int gsl_schur_solve_equation(double ca, const gsl_matrix *A, double z, double d1, double d2, const gsl_vector *b, gsl_vector *x, double *s, double *xnorm, double smin) { size_t N = A->size1; double bnorm; double scale = 1.0; if (N == 1) { double c, /* denominator */ cnorm; /* |c| */ /* we have a 1-by-1 (real) scalar system to solve */ c = ca * gsl_matrix_get(A, 0, 0) - z * d1; cnorm = fabs(c); if (cnorm < smin) { /* set c = smin*I */ c = smin; cnorm = smin; } /* check scaling for x = b / c */ bnorm = fabs(gsl_vector_get(b, 0)); if (cnorm < 1.0 && bnorm > 1.0) { if (bnorm > GSL_SCHUR_BIGNUM*cnorm) scale = 1.0 / bnorm; } /* compute x */ gsl_vector_set(x, 0, gsl_vector_get(b, 0) * scale / c); *xnorm = fabs(gsl_vector_get(x, 0)); } /* if (N == 1) */ else { double cr[2][2]; double *crv; double cmax; size_t icmax, j; double bval1, bval2; double ur11, ur12, ur22, ur11r; double cr21, cr22; double lr21; double b1, b2, bbnd; double x1, x2; double temp; size_t ipivot[4][4] = { { 0, 1, 2, 3 }, { 1, 0, 3, 2 }, { 2, 3, 0, 1 }, { 3, 2, 1, 0 } }; int rswap[4] = { 0, 1, 0, 1 }; int zswap[4] = { 0, 0, 1, 1 }; /* * we have a 2-by-2 real system to solve: * * ( ca * [ A11 A12 ] - z * [ D1 0 ] ) [ x1 ] = [ b1 ] * ( [ A21 A22 ] [ 0 D2 ] ) [ x2 ] [ b2 ] * * (z real) */ crv = (double *) cr; /* * compute the real part of C = ca*A - z*D - use column ordering * here since porting from lapack */ cr[0][0] = ca * gsl_matrix_get(A, 0, 0) - z * d1; cr[1][1] = ca * gsl_matrix_get(A, 1, 1) - z * d2; cr[0][1] = ca * gsl_matrix_get(A, 1, 0); cr[1][0] = ca * gsl_matrix_get(A, 0, 1); /* find the largest element in C */ cmax = 0.0; icmax = 0; for (j = 0; j < 4; ++j) { if (fabs(crv[j]) > cmax) { cmax = fabs(crv[j]); icmax = j; } } bval1 = gsl_vector_get(b, 0); bval2 = gsl_vector_get(b, 1); /* if norm(C) < smin, use smin*I */ if (cmax < smin) { bnorm = GSL_MAX(fabs(bval1), fabs(bval2)); if (smin < 1.0 && bnorm > 1.0) { if (bnorm > GSL_SCHUR_BIGNUM*smin) scale = 1.0 / bnorm; } temp = scale / smin; gsl_vector_set(x, 0, temp * bval1); gsl_vector_set(x, 1, temp * bval2); *xnorm = temp * bnorm; *s = scale; return GSL_SUCCESS; } /* gaussian elimination with complete pivoting */ ur11 = crv[icmax]; cr21 = crv[ipivot[1][icmax]]; ur12 = crv[ipivot[2][icmax]]; cr22 = crv[ipivot[3][icmax]]; ur11r = 1.0 / ur11; lr21 = ur11r * cr21; ur22 = cr22 - ur12 * lr21; /* if smaller pivot < smin, use smin */ if (fabs(ur22) < smin) ur22 = smin; if (rswap[icmax]) { b1 = bval2; b2 = bval1; } else { b1 = bval1; b2 = bval2; } b2 -= lr21 * b1; bbnd = GSL_MAX(fabs(b1 * (ur22 * ur11r)), fabs(b2)); if (bbnd > 1.0 && fabs(ur22) < 1.0) { if (bbnd >= GSL_SCHUR_BIGNUM * fabs(ur22)) scale = 1.0 / bbnd; } x2 = (b2 * scale) / ur22; x1 = (scale * b1) * ur11r - x2 * (ur11r * ur12); if (zswap[icmax]) { gsl_vector_set(x, 0, x2); gsl_vector_set(x, 1, x1); } else { gsl_vector_set(x, 0, x1); gsl_vector_set(x, 1, x2); } *xnorm = GSL_MAX(fabs(x1), fabs(x2)); /* further scaling if norm(A) norm(X) > overflow */ if (*xnorm > 1.0 && cmax > 1.0) { if (*xnorm > GSL_SCHUR_BIGNUM / cmax) { temp = cmax / GSL_SCHUR_BIGNUM; gsl_blas_dscal(temp, x); *xnorm *= temp; scale *= temp; } } } /* if (N == 2) */ *s = scale; return GSL_SUCCESS; } /* gsl_schur_solve_equation() */ /* gsl_schur_solve_equation_z() Solve the equation which comes up in the back substitution when computing eigenvectors corresponding to complex eigenvalues. The equation that is solved is: (ca*A - z*D)*x = s*b where A is n-by-n with n = 1 or 2 D is a n-by-n diagonal matrix b and x are n-by-1 complex vectors s is a scaling factor set by this function to prevent overflow in x Inputs: ca - coefficient multiplying A A - square matrix (n-by-n) z - complex scalar (eigenvalue) d1 - (1,1) element in diagonal matrix D d2 - (2,2) element in diagonal matrix D b - right hand side vector x - (output) where to store solution s - (output) scale factor xnorm - (output) infinity norm of X smin - lower bound on singular values of A - if ca*A - z*D is less than this value, we'll use smin*I instead. This value should be a safe distance above underflow. Notes: 1) A and b are not changed on output 2) Based on lapack routine DLALN2 */ int gsl_schur_solve_equation_z(double ca, const gsl_matrix *A, gsl_complex *z, double d1, double d2, const gsl_vector_complex *b, gsl_vector_complex *x, double *s, double *xnorm, double smin) { size_t N = A->size1; double scale = 1.0; double bnorm; if (N == 1) { double cr, /* denominator */ ci, cnorm; /* |c| */ gsl_complex bval, c, xval, tmp; /* we have a 1-by-1 (complex) scalar system to solve */ /* c = ca*a - z*d1 */ cr = ca * gsl_matrix_get(A, 0, 0) - GSL_REAL(*z) * d1; ci = -GSL_IMAG(*z) * d1; cnorm = fabs(cr) + fabs(ci); if (cnorm < smin) { /* set c = smin*I */ cr = smin; ci = 0.0; cnorm = smin; } /* check scaling for x = b / c */ bval = gsl_vector_complex_get(b, 0); bnorm = fabs(GSL_REAL(bval)) + fabs(GSL_IMAG(bval)); if (cnorm < 1.0 && bnorm > 1.0) { if (bnorm > GSL_SCHUR_BIGNUM*cnorm) scale = 1.0 / bnorm; } /* compute x */ GSL_SET_COMPLEX(&tmp, scale*GSL_REAL(bval), scale*GSL_IMAG(bval)); GSL_SET_COMPLEX(&c, cr, ci); xval = gsl_complex_div(tmp, c); gsl_vector_complex_set(x, 0, xval); *xnorm = fabs(GSL_REAL(xval)) + fabs(GSL_IMAG(xval)); } /* if (N == 1) */ else { double cr[2][2], ci[2][2]; double *civ, *crv; double cmax; gsl_complex bval1, bval2; gsl_complex xval1, xval2; double xr1, xi1; size_t icmax; size_t j; double temp; double ur11, ur12, ur22, ui11, ui12, ui22, ur11r, ui11r; double ur12s, ui12s; double u22abs; double lr21, li21; double cr21, cr22, ci21, ci22; double br1, bi1, br2, bi2, bbnd; gsl_complex b1, b2; size_t ipivot[4][4] = { { 0, 1, 2, 3 }, { 1, 0, 3, 2 }, { 2, 3, 0, 1 }, { 3, 2, 1, 0 } }; int rswap[4] = { 0, 1, 0, 1 }; int zswap[4] = { 0, 0, 1, 1 }; /* * complex 2-by-2 system: * * ( ca * [ A11 A12 ] - z * [ D1 0 ] ) [ X1 ] = [ B1 ] * ( [ A21 A22 ] [ 0 D2] ) [ X2 ] [ B2 ] * * (z complex) * * where the X and B values are complex. */ civ = (double *) ci; crv = (double *) cr; /* * compute the real part of C = ca*A - z*D - use column ordering * here since porting from lapack */ cr[0][0] = ca*gsl_matrix_get(A, 0, 0) - GSL_REAL(*z)*d1; cr[1][1] = ca*gsl_matrix_get(A, 1, 1) - GSL_REAL(*z)*d2; cr[0][1] = ca*gsl_matrix_get(A, 1, 0); cr[1][0] = ca*gsl_matrix_get(A, 0, 1); /* compute the imaginary part */ ci[0][0] = -GSL_IMAG(*z) * d1; ci[0][1] = 0.0; ci[1][0] = 0.0; ci[1][1] = -GSL_IMAG(*z) * d2; cmax = 0.0; icmax = 0; for (j = 0; j < 4; ++j) { if (fabs(crv[j]) + fabs(civ[j]) > cmax) { cmax = fabs(crv[j]) + fabs(civ[j]); icmax = j; } } bval1 = gsl_vector_complex_get(b, 0); bval2 = gsl_vector_complex_get(b, 1); /* if norm(C) < smin, use smin*I */ if (cmax < smin) { bnorm = GSL_MAX(fabs(GSL_REAL(bval1)) + fabs(GSL_IMAG(bval1)), fabs(GSL_REAL(bval2)) + fabs(GSL_IMAG(bval2))); if (smin < 1.0 && bnorm > 1.0) { if (bnorm > GSL_SCHUR_BIGNUM*smin) scale = 1.0 / bnorm; } temp = scale / smin; xval1 = gsl_complex_mul_real(bval1, temp); xval2 = gsl_complex_mul_real(bval2, temp); gsl_vector_complex_set(x, 0, xval1); gsl_vector_complex_set(x, 1, xval2); *xnorm = temp * bnorm; *s = scale; return GSL_SUCCESS; } /* gaussian elimination with complete pivoting */ ur11 = crv[icmax]; ui11 = civ[icmax]; cr21 = crv[ipivot[1][icmax]]; ci21 = civ[ipivot[1][icmax]]; ur12 = crv[ipivot[2][icmax]]; ui12 = civ[ipivot[2][icmax]]; cr22 = crv[ipivot[3][icmax]]; ci22 = civ[ipivot[3][icmax]]; if (icmax == 0 || icmax == 3) { /* off diagonals of pivoted C are real */ if (fabs(ur11) > fabs(ui11)) { temp = ui11 / ur11; ur11r = 1.0 / (ur11 * (1.0 + temp*temp)); ui11r = -temp * ur11r; } else { temp = ur11 / ui11; ui11r = -1.0 / (ui11 * (1.0 + temp*temp)); ur11r = -temp*ui11r; } lr21 = cr21 * ur11r; li21 = cr21 * ui11r; ur12s = ur12 * ur11r; ui12s = ur12 * ui11r; ur22 = cr22 - ur12 * lr21; ui22 = ci22 - ur12 * li21; } else { /* diagonals of pivoted C are real */ ur11r = 1.0 / ur11; ui11r = 0.0; lr21 = cr21 * ur11r; li21 = ci21 * ur11r; ur12s = ur12 * ur11r; ui12s = ui12 * ur11r; ur22 = cr22 - ur12 * lr21 + ui12 * li21; ui22 = -ur12 * li21 - ui12 * lr21; } u22abs = fabs(ur22) + fabs(ui22); /* if smaller pivot < smin, use smin */ if (u22abs < smin) { ur22 = smin; ui22 = 0.0; } if (rswap[icmax]) { br2 = GSL_REAL(bval1); bi2 = GSL_IMAG(bval1); br1 = GSL_REAL(bval2); bi1 = GSL_IMAG(bval2); } else { br1 = GSL_REAL(bval1); bi1 = GSL_IMAG(bval1); br2 = GSL_REAL(bval2); bi2 = GSL_IMAG(bval2); } br2 += li21*bi1 - lr21*br1; bi2 -= li21*br1 + lr21*bi1; bbnd = GSL_MAX((fabs(br1) + fabs(bi1)) * (u22abs * (fabs(ur11r) + fabs(ui11r))), fabs(br2) + fabs(bi2)); if (bbnd > 1.0 && u22abs < 1.0) { if (bbnd >= GSL_SCHUR_BIGNUM*u22abs) { scale = 1.0 / bbnd; br1 *= scale; bi1 *= scale; br2 *= scale; bi2 *= scale; } } GSL_SET_COMPLEX(&b1, br2, bi2); GSL_SET_COMPLEX(&b2, ur22, ui22); xval2 = gsl_complex_div(b1, b2); xr1 = ur11r*br1 - ui11r*bi1 - ur12s*GSL_REAL(xval2) + ui12s*GSL_IMAG(xval2); xi1 = ui11r*br1 + ur11r*bi1 - ui12s*GSL_REAL(xval2) - ur12s*GSL_IMAG(xval2); GSL_SET_COMPLEX(&xval1, xr1, xi1); if (zswap[icmax]) { gsl_vector_complex_set(x, 0, xval2); gsl_vector_complex_set(x, 1, xval1); } else { gsl_vector_complex_set(x, 0, xval1); gsl_vector_complex_set(x, 1, xval2); } *xnorm = GSL_MAX(fabs(GSL_REAL(xval1)) + fabs(GSL_IMAG(xval1)), fabs(GSL_REAL(xval2)) + fabs(GSL_IMAG(xval2))); /* further scaling if norm(A) norm(X) > overflow */ if (*xnorm > 1.0 && cmax > 1.0) { if (*xnorm > GSL_SCHUR_BIGNUM / cmax) { temp = cmax / GSL_SCHUR_BIGNUM; gsl_blas_zdscal(temp, x); *xnorm *= temp; scale *= temp; } } } /* if (N == 2) */ *s = scale; return GSL_SUCCESS; } /* gsl_schur_solve_equation_z() */ gsl/eigen/TODO0000644000175000017500000000115113536674414011507 0ustar eddedd# -*- org -*- #+CATEGORY: eigen * Merge improvements from SVD qrstep to eigen - these should be combined somehow as we only need one version of them. * dlae2.f has better handling of 2x2 eigenvalues than our qrstep.c * Document Jacobi eigen function, in particular that it only works for symmetric matrices. * add support for nonsymmv left eigenvectors?: gsl_eigen_nonsymmv_params(const int lr) to specify whether we should compute left/right eigenvectors (or both). If they want both, we'll need a new function: gsl_eigen_nonsymmv_lr(..., evec_r, evec_l, ...) and gsl_eigen_nonsymmv_lr_Z(...) gsl/eigen/genherm.c0000644000175000017500000002211113536675317012612 0ustar eddedd/* eigen/genherm.c * * Copyright (C) 2007, 2019 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include "recurse.h" /* * This module computes the eigenvalues of a complex generalized * hermitian-definite eigensystem A x = \lambda B x, where A and * B are hermitian, and B is positive-definite. */ static int genherm_standardize_L2(gsl_matrix_complex *A, const gsl_matrix_complex *B); static int genherm_standardize_L3(gsl_matrix_complex *A, const gsl_matrix_complex *B); /* gsl_eigen_genherm_alloc() Allocate a workspace for solving the generalized hermitian-definite eigenvalue problem. The size of this workspace is O(3n). Inputs: n - size of matrices Return: pointer to workspace */ gsl_eigen_genherm_workspace * gsl_eigen_genherm_alloc(const size_t n) { gsl_eigen_genherm_workspace *w; if (n == 0) { GSL_ERROR_NULL ("matrix dimension must be positive integer", GSL_EINVAL); } w = (gsl_eigen_genherm_workspace *) calloc (1, sizeof (gsl_eigen_genherm_workspace)); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->size = n; w->herm_workspace_p = gsl_eigen_herm_alloc(n); if (!w->herm_workspace_p) { gsl_eigen_genherm_free(w); GSL_ERROR_NULL("failed to allocate space for herm workspace", GSL_ENOMEM); } return (w); } /* gsl_eigen_genherm_alloc() */ /* gsl_eigen_genherm_free() Free workspace w */ void gsl_eigen_genherm_free (gsl_eigen_genherm_workspace * w) { RETURN_IF_NULL (w); if (w->herm_workspace_p) gsl_eigen_herm_free(w->herm_workspace_p); free(w); } /* gsl_eigen_genherm_free() */ /* gsl_eigen_genherm() Solve the generalized hermitian-definite eigenvalue problem A x = \lambda B x for the eigenvalues \lambda. Inputs: A - complex hermitian matrix B - complex hermitian and positive definite matrix eval - where to store eigenvalues w - workspace Return: success or error */ int gsl_eigen_genherm (gsl_matrix_complex * A, gsl_matrix_complex * B, gsl_vector * eval, gsl_eigen_genherm_workspace * w) { const size_t N = A->size1; /* check matrix and vector sizes */ if (N != A->size2) { GSL_ERROR ("matrix must be square to compute eigenvalues", GSL_ENOTSQR); } else if ((N != B->size1) || (N != B->size2)) { GSL_ERROR ("B matrix dimensions must match A", GSL_EBADLEN); } else if (eval->size != N) { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } else if (w->size != N) { GSL_ERROR ("matrix size does not match workspace", GSL_EBADLEN); } else { int s; /* compute Cholesky factorization of B */ s = gsl_linalg_complex_cholesky_decomp(B); if (s != GSL_SUCCESS) return s; /* B is not positive definite */ /* transform to standard hermitian eigenvalue problem */ gsl_eigen_genherm_standardize(A, B); s = gsl_eigen_herm(A, eval, w->herm_workspace_p); return s; } } /* gsl_eigen_genherm() */ /* gsl_eigen_genherm_standardize() Reduce the generalized hermitian-definite eigenproblem to the standard hermitian eigenproblem by computing C = L^{-1} A L^{-H} where L L^H is the Cholesky decomposition of B Inputs: A - (input/output) complex hermitian matrix B - complex hermitian, positive definite matrix in Cholesky form Return: success Notes: A is overwritten by L^{-1} A L^{-H} */ int gsl_eigen_genherm_standardize(gsl_matrix_complex *A, const gsl_matrix_complex *B) { return genherm_standardize_L3(A, B); } /* genherm_standardize_L2() Reduce the generalized hermitian-definite eigenproblem to the standard hermitian eigenproblem by computing C = L^{-1} A L^{-H} where L L^H is the Cholesky decomposition of B Inputs: A - (input/output) complex hermitian matrix B - complex hermitian, positive definite matrix in Cholesky form Return: success Notes: 1) A is overwritten by L^{-1} A L^{-H} 2) Based on LAPACK ZHEGS2 using Level 2 BLAS */ static int genherm_standardize_L2(gsl_matrix_complex *A, const gsl_matrix_complex *B) { const size_t N = A->size1; size_t i; double a, b; gsl_complex y, z; GSL_SET_IMAG(&z, 0.0); for (i = 0; i < N; ++i) { /* update lower triangle of A(i:n, i:n) */ y = gsl_matrix_complex_get(A, i, i); a = GSL_REAL(y); y = gsl_matrix_complex_get(B, i, i); b = GSL_REAL(y); a /= b * b; GSL_SET_REAL(&z, a); gsl_matrix_complex_set(A, i, i, z); if (i < N - 1) { gsl_vector_complex_view ai = gsl_matrix_complex_subcolumn(A, i, i + 1, N - i - 1); gsl_matrix_complex_view ma = gsl_matrix_complex_submatrix(A, i + 1, i + 1, N - i - 1, N - i - 1); gsl_vector_complex_const_view bi = gsl_matrix_complex_const_subcolumn(B, i, i + 1, N - i - 1); gsl_matrix_complex_const_view mb = gsl_matrix_complex_const_submatrix(B, i + 1, i + 1, N - i - 1, N - i - 1); gsl_blas_zdscal(1.0 / b, &ai.vector); GSL_SET_REAL(&z, -0.5 * a); gsl_blas_zaxpy(z, &bi.vector, &ai.vector); gsl_blas_zher2(CblasLower, GSL_COMPLEX_NEGONE, &ai.vector, &bi.vector, &ma.matrix); gsl_blas_zaxpy(z, &bi.vector, &ai.vector); gsl_blas_ztrsv(CblasLower, CblasNoTrans, CblasNonUnit, &mb.matrix, &ai.vector); } } return GSL_SUCCESS; } /* genherm_standardize_L3() Reduce the generalized hermitian-definite eigenproblem to the standard hermitian eigenproblem by computing C = L^{-1} A L^{-H} where L L^H is the Cholesky decomposition of B Inputs: A - (input/output) complex hermitian matrix B - complex hermitian, positive definite matrix in Cholesky form Return: success Notes: 1) A is overwritten by L^{-1} A L^{-H} 2) Based on ReLAPACK using Level 3 BLAS */ static int genherm_standardize_L3(gsl_matrix_complex *A, const gsl_matrix_complex *B) { const size_t N = A->size1; if (N <= CROSSOVER_GENHERM) { /* use Level 2 algorithm */ return genherm_standardize_L2(A, B); } else { /* * partition matrices: * * A11 A12 and B11 B12 * A21 A22 B21 B22 * * where A11 and B11 are N1-by-N1 */ int status; const size_t N1 = GSL_EIGEN_SPLIT_COMPLEX(N); const size_t N2 = N - N1; gsl_matrix_complex_view A11 = gsl_matrix_complex_submatrix(A, 0, 0, N1, N1); gsl_matrix_complex_view A21 = gsl_matrix_complex_submatrix(A, N1, 0, N2, N1); gsl_matrix_complex_view A22 = gsl_matrix_complex_submatrix(A, N1, N1, N2, N2); gsl_matrix_complex_const_view B11 = gsl_matrix_complex_const_submatrix(B, 0, 0, N1, N1); gsl_matrix_complex_const_view B21 = gsl_matrix_complex_const_submatrix(B, N1, 0, N2, N1); gsl_matrix_complex_const_view B22 = gsl_matrix_complex_const_submatrix(B, N1, N1, N2, N2); const gsl_complex MHALF = gsl_complex_rect(-0.5, 0.0); /* recursion on (A11, B11) */ status = genherm_standardize_L3(&A11.matrix, &B11.matrix); if (status) return status; /* A21 = A21 * B11^{-1} */ gsl_blas_ztrsm(CblasRight, CblasLower, CblasConjTrans, CblasNonUnit, GSL_COMPLEX_ONE, &B11.matrix, &A21.matrix); /* A21 = A21 - 1/2 B21 A11 */ gsl_blas_zhemm(CblasRight, CblasLower, MHALF, &A11.matrix, &B21.matrix, GSL_COMPLEX_ONE, &A21.matrix); /* A22 = A22 - A21 * B21' - B21 * A21' */ gsl_blas_zher2k(CblasLower, CblasNoTrans, GSL_COMPLEX_NEGONE, &A21.matrix, &B21.matrix, 1.0, &A22.matrix); /* A21 = A21 - 1/2 B21 A11 */ gsl_blas_zhemm(CblasRight, CblasLower, MHALF, &A11.matrix, &B21.matrix, GSL_COMPLEX_ONE, &A21.matrix); /* A21 = B22 * A21^{-1} */ gsl_blas_ztrsm(CblasLeft, CblasLower, CblasNoTrans, CblasNonUnit, GSL_COMPLEX_ONE, &B22.matrix, &A21.matrix); /* recursion on (A22, B22) */ status = genherm_standardize_L3(&A22.matrix, &B22.matrix); if (status) return status; return GSL_SUCCESS; } } gsl/eigen/gensymm.c0000644000175000017500000002052313536675317012651 0ustar eddedd/* eigen/gensymm.c * * Copyright (C) 2007 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include "recurse.h" /* * This module computes the eigenvalues of a real generalized * symmetric-definite eigensystem A x = \lambda B x, where A and * B are symmetric, and B is positive-definite. */ static int gensymm_standardize_L2(gsl_matrix *A, const gsl_matrix *B); static int gensymm_standardize_L3(gsl_matrix *A, const gsl_matrix *B); /* gsl_eigen_gensymm_alloc() Allocate a workspace for solving the generalized symmetric-definite eigenvalue problem. The size of this workspace is O(2n). Inputs: n - size of matrices Return: pointer to workspace */ gsl_eigen_gensymm_workspace * gsl_eigen_gensymm_alloc(const size_t n) { gsl_eigen_gensymm_workspace *w; if (n == 0) { GSL_ERROR_NULL ("matrix dimension must be positive integer", GSL_EINVAL); } w = (gsl_eigen_gensymm_workspace *) calloc (1, sizeof (gsl_eigen_gensymm_workspace)); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->size = n; w->symm_workspace_p = gsl_eigen_symm_alloc(n); if (!w->symm_workspace_p) { gsl_eigen_gensymm_free(w); GSL_ERROR_NULL("failed to allocate space for symm workspace", GSL_ENOMEM); } return (w); } /* gsl_eigen_gensymm_alloc() */ /* gsl_eigen_gensymm_free() Free workspace w */ void gsl_eigen_gensymm_free (gsl_eigen_gensymm_workspace * w) { RETURN_IF_NULL (w); if (w->symm_workspace_p) gsl_eigen_symm_free(w->symm_workspace_p); free(w); } /* gsl_eigen_gensymm_free() */ /* gsl_eigen_gensymm() Solve the generalized symmetric-definite eigenvalue problem A x = \lambda B x for the eigenvalues \lambda. Inputs: A - real symmetric matrix B - real symmetric and positive definite matrix eval - where to store eigenvalues w - workspace Return: success or error */ int gsl_eigen_gensymm (gsl_matrix * A, gsl_matrix * B, gsl_vector * eval, gsl_eigen_gensymm_workspace * w) { const size_t N = A->size1; /* check matrix and vector sizes */ if (N != A->size2) { GSL_ERROR ("matrix must be square to compute eigenvalues", GSL_ENOTSQR); } else if ((N != B->size1) || (N != B->size2)) { GSL_ERROR ("B matrix dimensions must match A", GSL_EBADLEN); } else if (eval->size != N) { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } else if (w->size != N) { GSL_ERROR ("matrix size does not match workspace", GSL_EBADLEN); } else { int s; /* compute Cholesky factorization of B */ s = gsl_linalg_cholesky_decomp1(B); if (s != GSL_SUCCESS) return s; /* B is not positive definite */ /* transform to standard symmetric eigenvalue problem */ gsl_eigen_gensymm_standardize(A, B); s = gsl_eigen_symm(A, eval, w->symm_workspace_p); return s; } } /* gsl_eigen_gensymm() */ /* gsl_eigen_gensymm_standardize() Reduce the generalized symmetric-definite eigenproblem to the standard symmetric eigenproblem by computing C = L^{-1} A L^{-t} where L L^t is the Cholesky decomposition of B Inputs: A - (input/output) real symmetric matrix B - real symmetric, positive definite matrix in Cholesky form Return: success Notes: A is overwritten by L^{-1} A L^{-t} */ int gsl_eigen_gensymm_standardize(gsl_matrix *A, const gsl_matrix *B) { return gensymm_standardize_L3(A, B); } /* gensymm_standardize_L2() Reduce the generalized symmetric-definite eigenproblem to the standard symmetric eigenproblem by computing C = L^{-1} A L^{-t} where L L^t is the Cholesky decomposition of B Inputs: A - (input/output) real symmetric matrix B - real symmetric, positive definite matrix in Cholesky form Return: success Notes: 1) A is overwritten by L^{-1} A L^{-t} 2) Based on LAPACK DSYGS2 using Level 2 BLAS */ static int gensymm_standardize_L2(gsl_matrix *A, const gsl_matrix *B) { const size_t N = A->size1; size_t i; double a, b, c; for (i = 0; i < N; ++i) { /* update lower triangle of A(i:n, i:n) */ a = gsl_matrix_get(A, i, i); b = gsl_matrix_get(B, i, i); a /= b * b; gsl_matrix_set(A, i, i, a); if (i < N - 1) { gsl_vector_view ai = gsl_matrix_subcolumn(A, i, i + 1, N - i - 1); gsl_matrix_view ma = gsl_matrix_submatrix(A, i + 1, i + 1, N - i - 1, N - i - 1); gsl_vector_const_view bi = gsl_matrix_const_subcolumn(B, i, i + 1, N - i - 1); gsl_matrix_const_view mb = gsl_matrix_const_submatrix(B, i + 1, i + 1, N - i - 1, N - i - 1); gsl_blas_dscal(1.0 / b, &ai.vector); c = -0.5 * a; gsl_blas_daxpy(c, &bi.vector, &ai.vector); gsl_blas_dsyr2(CblasLower, -1.0, &ai.vector, &bi.vector, &ma.matrix); gsl_blas_daxpy(c, &bi.vector, &ai.vector); gsl_blas_dtrsv(CblasLower, CblasNoTrans, CblasNonUnit, &mb.matrix, &ai.vector); } } return GSL_SUCCESS; } /* gensymm_standardize_L3() Reduce the generalized symmetric-definite eigenproblem to the standard symmetric eigenproblem by computing C = L^{-1} A L^{-t} where L L^t is the Cholesky decomposition of B Inputs: A - (input/output) real symmetric matrix B - real symmetric, positive definite matrix in Cholesky form Return: success Notes: 1) A is overwritten by L^{-1} A L^{-t} 2) Based on ReLAPACK recursive algorithm using Level 3 BLAS */ static int gensymm_standardize_L3(gsl_matrix *A, const gsl_matrix *B) { const size_t N = A->size1; if (N <= CROSSOVER_GENSYMM) { /* use Level 2 algorithm */ return gensymm_standardize_L2(A, B); } else { /* * partition matrices: * * A11 A12 and B11 B12 * A21 A22 B21 B22 * * where A11 and B11 are N1-by-N1 */ int status; const size_t N1 = GSL_EIGEN_SPLIT(N); const size_t N2 = N - N1; gsl_matrix_view A11 = gsl_matrix_submatrix(A, 0, 0, N1, N1); gsl_matrix_view A21 = gsl_matrix_submatrix(A, N1, 0, N2, N1); gsl_matrix_view A22 = gsl_matrix_submatrix(A, N1, N1, N2, N2); gsl_matrix_const_view B11 = gsl_matrix_const_submatrix(B, 0, 0, N1, N1); gsl_matrix_const_view B21 = gsl_matrix_const_submatrix(B, N1, 0, N2, N1); gsl_matrix_const_view B22 = gsl_matrix_const_submatrix(B, N1, N1, N2, N2); /* recursion on (A11, B11) */ status = gensymm_standardize_L3(&A11.matrix, &B11.matrix); if (status) return status; /* A21 = A21 * B11^{-1} */ gsl_blas_dtrsm(CblasRight, CblasLower, CblasTrans, CblasNonUnit, 1.0, &B11.matrix, &A21.matrix); /* A21 = A21 - 1/2 B21 A11 */ gsl_blas_dsymm(CblasRight, CblasLower, -0.5, &A11.matrix, &B21.matrix, 1.0, &A21.matrix); /* A22 = A22 - A21 * B21' - B21 * A21' */ gsl_blas_dsyr2k(CblasLower, CblasNoTrans, -1.0, &A21.matrix, &B21.matrix, 1.0, &A22.matrix); /* A21 = A21 - 1/2 B21 A11 */ gsl_blas_dsymm(CblasRight, CblasLower, -0.5, &A11.matrix, &B21.matrix, 1.0, &A21.matrix); /* A21 = B22 * A21^{-1} */ gsl_blas_dtrsm(CblasLeft, CblasLower, CblasNoTrans, CblasNonUnit, 1.0, &B22.matrix, &A21.matrix); /* recursion on (A22, B22) */ status = gensymm_standardize_L3(&A22.matrix, &B22.matrix); if (status) return status; return GSL_SUCCESS; } } gsl/eigen/test.c0000644000175000017500000011742713536675317012163 0ustar eddedd/* eigen/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2006, 2007 Gerard Jungman, Patrick Alken, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /****************************************** * common test code * ******************************************/ double chop_subnormals (double x) { /* Chop any subnormal values */ return fabs(x) < GSL_DBL_MIN ? 0 : x; } void create_random_symm_matrix(gsl_matrix *m, gsl_rng *r, int lower, int upper) { size_t i, j; for (i = 0; i < m->size1; ++i) { for (j = i; j < m->size2; ++j) { double x = gsl_rng_uniform(r) * (upper - lower) + lower; gsl_matrix_set(m, i, j, x); gsl_matrix_set(m, j, i, x); } } } /* create_random_symm_matrix() */ void create_random_herm_matrix(gsl_matrix_complex *m, gsl_rng *r, int lower, int upper) { size_t i, j; for (i = 0; i < m->size1; ++i) { for (j = i; j < m->size2; ++j) { gsl_complex z; GSL_REAL(z) = gsl_rng_uniform(r) * (upper - lower) + lower; if (i == j) GSL_IMAG(z) = 0.0; else GSL_IMAG(z) = gsl_rng_uniform(r) * (upper - lower) + lower; gsl_matrix_complex_set(m, i, j, z); gsl_matrix_complex_set(m, j, i, gsl_complex_conjugate(z)); } } } /* create_random_herm_matrix() */ /* with r \in (0,1) if m_{ij} = r^{|i - j|} then m is positive definite */ void create_random_posdef_matrix(gsl_matrix *m, gsl_rng *r) { size_t i, j; double x = gsl_rng_uniform(r); for (i = 0; i < m->size1; ++i) { for (j = i; j < m->size2; ++j) { double a = pow(x, (double) (j - i)); gsl_matrix_set(m, i, j, a); gsl_matrix_set(m, j, i, a); } } } /* create_random_posdef_matrix() */ static int create_random_complex_posdef_matrix(gsl_matrix_complex *m, gsl_rng *r) { const size_t N = m->size1; const double alpha = 10.0 * N; size_t i; create_random_herm_matrix(m, r, 0, 1); for (i = 0; i < N; ++i) { gsl_complex * mii = gsl_matrix_complex_ptr(m, i, i); GSL_REAL(*mii) += alpha; } return GSL_SUCCESS; } void create_random_nonsymm_matrix(gsl_matrix *m, gsl_rng *r, int lower, int upper) { size_t i, j; for (i = 0; i < m->size1; ++i) { for (j = 0; j < m->size2; ++j) { gsl_matrix_set(m, i, j, gsl_rng_uniform(r) * (upper - lower) + lower); } } } /* create_random_nonsymm_matrix() */ /* test if A Z = Q S */ void test_eigen_schur(const gsl_matrix * A, const gsl_matrix * S, const gsl_matrix * Q, const gsl_matrix * Z, size_t count, const char * desc, const char * desc2) { const size_t N = A->size1; size_t i, j; gsl_matrix * T1 = gsl_matrix_alloc(N, N); gsl_matrix * T2 = gsl_matrix_alloc(N, N); /* compute T1 = A Z */ gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, A, Z, 0.0, T1); /* compute T2 = Q S */ gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, Q, S, 0.0, T2); for (i = 0; i < N; ++i) { for (j = 0; j < N; ++j) { double x = gsl_matrix_get(T1, i, j); double y = gsl_matrix_get(T2, i, j); gsl_test_abs(x, y, 1.0e8 * GSL_DBL_EPSILON, "%s(N=%u,cnt=%u), %s, schur(%d,%d)", desc, N, count, desc2, i, j); } } gsl_matrix_free (T1); gsl_matrix_free (T2); } /* test_eigen_schur() */ /* test if A is orthogonal */ int test_eigen_orthog(gsl_matrix *A, size_t count, const char *desc, const char *desc2) { size_t N = A->size1; gsl_matrix *M = gsl_matrix_alloc(A->size1, A->size2); size_t i, j; gsl_blas_dgemm(CblasNoTrans, CblasTrans, 1.0, A, A, 0.0, M); for (i = 0; i < A->size1; ++i) { for (j = 0; j < A->size2; ++j) { double val; double mij = gsl_matrix_get(M, i, j); if (i == j) val = 1.0; else val = 0.0; gsl_test_abs(mij, val, 1.0e8 * GSL_DBL_EPSILON, "%s(N=%u,cnt=%u), %s, orthog(%d,%d)", desc, N, count, desc2, i, j); } } gsl_matrix_free(M); return 1; } /* test_eigen_orthog() */ void test_eigenvalues_real (const gsl_vector *eval, const gsl_vector * eval2, const char * desc, const char * desc2) { const size_t N = eval->size; size_t i; double emax = 0; /* check eigenvalues */ for (i = 0; i < N; i++) { double ei = gsl_vector_get (eval, i); if (fabs(ei) > emax) emax = fabs(ei); } for (i = 0; i < N; i++) { double ei = gsl_vector_get (eval, i); double e2i = gsl_vector_get (eval2, i); e2i = chop_subnormals(e2i); gsl_test_abs(ei, e2i, emax * 1e8 * GSL_DBL_EPSILON, "%s, direct eigenvalue(%d), %s", desc, i, desc2); } } void test_eigenvalues_complex (const gsl_vector_complex * eval, const gsl_vector_complex * eval2, const char * desc, const char * desc2) { const size_t N = eval->size; size_t i; for (i = 0; i < N; i++) { gsl_complex ei = gsl_vector_complex_get (eval, i); gsl_complex e2i = gsl_vector_complex_get (eval2, i); gsl_test_rel(GSL_REAL(ei), GSL_REAL(e2i), 10*N*GSL_DBL_EPSILON, "%s, direct eigenvalue(%d) real, %s", desc, i, desc2); gsl_test_rel(GSL_IMAG(ei), GSL_IMAG(e2i), 10*N*GSL_DBL_EPSILON, "%s, direct eigenvalue(%d) imag, %s", desc, i, desc2); } } /****************************************** * symm test code * ******************************************/ void test_eigen_symm_results (const gsl_matrix * A, const gsl_vector * eval, const gsl_matrix * evec, size_t count, const char * desc, const char * desc2) { const size_t N = A->size1; size_t i, j; double emax = 0; gsl_vector * x = gsl_vector_alloc(N); gsl_vector * y = gsl_vector_alloc(N); /* check eigenvalues */ for (i = 0; i < N; i++) { double ei = gsl_vector_get (eval, i); if (fabs(ei) > emax) emax = fabs(ei); } for (i = 0; i < N; i++) { double ei = gsl_vector_get (eval, i); gsl_vector_const_view vi = gsl_matrix_const_column(evec, i); gsl_vector_memcpy(x, &vi.vector); /* compute y = A x (should = lambda v) */ gsl_blas_dgemv (CblasNoTrans, 1.0, A, x, 0.0, y); for (j = 0; j < N; j++) { double xj = gsl_vector_get (x, j); double yj = gsl_vector_get (y, j); double eixj = chop_subnormals(ei * xj); gsl_test_abs(yj, eixj, emax * 1e8 * GSL_DBL_EPSILON, "%s, eigenvalue(%d,%d), %s", desc, i, j, desc2); } } /* check eigenvectors are orthonormal */ for (i = 0; i < N; i++) { gsl_vector_const_view vi = gsl_matrix_const_column(evec, i); double nrm_v = gsl_blas_dnrm2(&vi.vector); gsl_test_rel (nrm_v, 1.0, N * GSL_DBL_EPSILON, "%s, normalized(%d), %s", desc, i, desc2); } for (i = 0; i < N; i++) { gsl_vector_const_view vi = gsl_matrix_const_column(evec, i); for (j = i + 1; j < N; j++) { gsl_vector_const_view vj = gsl_matrix_const_column(evec, j); double vivj; gsl_blas_ddot (&vi.vector, &vj.vector, &vivj); gsl_test_abs (vivj, 0.0, N * GSL_DBL_EPSILON, "%s, orthogonal(%d,%d), %s", desc, i, j, desc2); } } gsl_vector_free(x); gsl_vector_free(y); } void test_eigen_symm_matrix(const gsl_matrix * m, size_t count, const char * desc) { const size_t N = m->size1; gsl_matrix * A = gsl_matrix_alloc(N, N); gsl_vector * eval = gsl_vector_alloc(N); gsl_vector * evalv = gsl_vector_alloc(N); gsl_vector * x = gsl_vector_alloc(N); gsl_vector * y = gsl_vector_alloc(N); gsl_matrix * evec = gsl_matrix_alloc(N, N); gsl_eigen_symm_workspace * w = gsl_eigen_symm_alloc(N); gsl_eigen_symmv_workspace * wv = gsl_eigen_symmv_alloc(N); gsl_matrix_memcpy(A, m); gsl_eigen_symmv(A, evalv, evec, wv); test_eigen_symm_results(m, evalv, evec, count, desc, "unsorted"); gsl_matrix_memcpy(A, m); gsl_eigen_symm(A, eval, w); /* sort eval and evalv */ gsl_vector_memcpy(x, eval); gsl_vector_memcpy(y, evalv); gsl_sort_vector(x); gsl_sort_vector(y); test_eigenvalues_real(y, x, desc, "unsorted"); gsl_eigen_symmv_sort(evalv, evec, GSL_EIGEN_SORT_VAL_ASC); test_eigen_symm_results(m, evalv, evec, count, desc, "val/asc"); gsl_eigen_symmv_sort(evalv, evec, GSL_EIGEN_SORT_VAL_DESC); test_eigen_symm_results(m, evalv, evec, count, desc, "val/desc"); gsl_eigen_symmv_sort(evalv, evec, GSL_EIGEN_SORT_ABS_ASC); test_eigen_symm_results(m, evalv, evec, count, desc, "abs/asc"); gsl_eigen_symmv_sort(evalv, evec, GSL_EIGEN_SORT_ABS_DESC); test_eigen_symm_results(m, evalv, evec, count, desc, "abs/desc"); gsl_matrix_free(A); gsl_vector_free(eval); gsl_vector_free(evalv); gsl_vector_free(x); gsl_vector_free(y); gsl_matrix_free(evec); gsl_eigen_symm_free(w); gsl_eigen_symmv_free(wv); } /* test_eigen_symm_matrix() */ void test_eigen_symm(void) { size_t N_max = 20; size_t n, i; gsl_rng *r = gsl_rng_alloc(gsl_rng_default); for (n = 1; n <= N_max; ++n) { gsl_matrix * A = gsl_matrix_alloc(n, n); for (i = 0; i < 5; ++i) { create_random_symm_matrix(A, r, -10, 10); test_eigen_symm_matrix(A, i, "symm random"); } gsl_matrix_free(A); } gsl_rng_free(r); { double dat1[] = { 0, 0, -1, 0, 0, 1, 0, 1, -1, 0, 0, 0, 0, 1, 0, 0 }; double dat2[] = { 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4 }; gsl_matrix_view m; m = gsl_matrix_view_array (dat1, 4, 4); test_eigen_symm_matrix(&m.matrix, 0, "symm(4)"); m = gsl_matrix_view_array (dat2, 4, 4); test_eigen_symm_matrix(&m.matrix, 0, "symm(4) diag"); } { double dat[27*27] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, 0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0, 0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; gsl_matrix_view m; m = gsl_matrix_view_array (dat, 27, 27); test_eigen_symm_matrix(&m.matrix, 0, "symm(27)"); }; } /* test_eigen_symm() */ /****************************************** * herm test code * ******************************************/ void test_eigen_herm_results (const gsl_matrix_complex * A, const gsl_vector * eval, const gsl_matrix_complex * evec, size_t count, const char * desc, const char * desc2) { const size_t N = A->size1; size_t i, j; gsl_vector_complex * x = gsl_vector_complex_alloc(N); gsl_vector_complex * y = gsl_vector_complex_alloc(N); /* check eigenvalues */ for (i = 0; i < N; i++) { double ei = gsl_vector_get (eval, i); gsl_vector_complex_const_view vi = gsl_matrix_complex_const_column(evec, i); gsl_vector_complex_memcpy(x, &vi.vector); /* compute y = m x (should = lambda v) */ gsl_blas_zgemv (CblasNoTrans, GSL_COMPLEX_ONE, A, x, GSL_COMPLEX_ZERO, y); for (j = 0; j < N; j++) { gsl_complex xj = gsl_vector_complex_get (x, j); gsl_complex yj = gsl_vector_complex_get (y, j); gsl_test_rel(GSL_REAL(yj), ei * GSL_REAL(xj), 1e8*GSL_DBL_EPSILON, "%s, eigenvalue(%d,%d), real, %s", desc, i, j, desc2); gsl_test_rel(GSL_IMAG(yj), ei * GSL_IMAG(xj), 1e8*GSL_DBL_EPSILON, "%s, eigenvalue(%d,%d), imag, %s", desc, i, j, desc2); } } /* check eigenvectors are orthonormal */ for (i = 0; i < N; i++) { gsl_vector_complex_const_view vi = gsl_matrix_complex_const_column(evec, i); double nrm_v = gsl_blas_dznrm2(&vi.vector); gsl_test_rel (nrm_v, 1.0, N * GSL_DBL_EPSILON, "%s, normalized(%d), %s", desc, i, desc2); } for (i = 0; i < N; i++) { gsl_vector_complex_const_view vi = gsl_matrix_complex_const_column(evec, i); for (j = i + 1; j < N; j++) { gsl_vector_complex_const_view vj = gsl_matrix_complex_const_column(evec, j); gsl_complex vivj; gsl_blas_zdotc (&vi.vector, &vj.vector, &vivj); gsl_test_abs (gsl_complex_abs(vivj), 0.0, 10.0 * N * GSL_DBL_EPSILON, "%s, orthogonal(%d,%d), %s", desc, i, j, desc2); } } gsl_vector_complex_free(x); gsl_vector_complex_free(y); } /* test_eigen_herm_results() */ void test_eigen_herm_matrix(const gsl_matrix_complex * m, size_t count, const char * desc) { const size_t N = m->size1; gsl_matrix_complex * A = gsl_matrix_complex_alloc(N, N); gsl_vector * eval = gsl_vector_alloc(N); gsl_vector * evalv = gsl_vector_alloc(N); gsl_vector * x = gsl_vector_alloc(N); gsl_vector * y = gsl_vector_alloc(N); gsl_matrix_complex * evec = gsl_matrix_complex_alloc(N, N); gsl_eigen_herm_workspace * w = gsl_eigen_herm_alloc(N); gsl_eigen_hermv_workspace * wv = gsl_eigen_hermv_alloc(N); gsl_matrix_complex_memcpy(A, m); gsl_eigen_hermv(A, evalv, evec, wv); test_eigen_herm_results(m, evalv, evec, count, desc, "unsorted"); gsl_matrix_complex_memcpy(A, m); gsl_eigen_herm(A, eval, w); /* sort eval and evalv */ gsl_vector_memcpy(x, eval); gsl_vector_memcpy(y, evalv); gsl_sort_vector(x); gsl_sort_vector(y); test_eigenvalues_real(y, x, desc, "unsorted"); gsl_eigen_hermv_sort(evalv, evec, GSL_EIGEN_SORT_VAL_ASC); test_eigen_herm_results(m, evalv, evec, count, desc, "val/asc"); gsl_eigen_hermv_sort(evalv, evec, GSL_EIGEN_SORT_VAL_DESC); test_eigen_herm_results(m, evalv, evec, count, desc, "val/desc"); gsl_eigen_hermv_sort(evalv, evec, GSL_EIGEN_SORT_ABS_ASC); test_eigen_herm_results(m, evalv, evec, count, desc, "abs/asc"); gsl_eigen_hermv_sort(evalv, evec, GSL_EIGEN_SORT_ABS_DESC); test_eigen_herm_results(m, evalv, evec, count, desc, "abs/desc"); gsl_matrix_complex_free(A); gsl_vector_free(eval); gsl_vector_free(evalv); gsl_vector_free(x); gsl_vector_free(y); gsl_matrix_complex_free(evec); gsl_eigen_herm_free(w); gsl_eigen_hermv_free(wv); } /* test_eigen_herm_matrix() */ void test_eigen_herm(void) { size_t N_max = 20; size_t n, i; gsl_rng *r = gsl_rng_alloc(gsl_rng_default); for (n = 1; n <= N_max; ++n) { gsl_matrix_complex * A = gsl_matrix_complex_alloc(n, n); for (i = 0; i < 5; ++i) { create_random_herm_matrix(A, r, -10, 10); test_eigen_herm_matrix(A, i, "herm random"); } gsl_matrix_complex_free(A); } gsl_rng_free(r); { double dat1[] = { 0,0, 0,0, -1,0, 0,0, 0,0, 1,0, 0,0, 1,0, -1,0, 0,0, 0,0, 0,0, 0,0, 1,0, 0,0, 0,0 }; double dat2[] = { 1,0, 0,0, 0,0, 0,0, 0,0, 2,0, 0,0, 0,0, 0,0, 0,0, 3,0, 0,0, 0,0, 0,0, 0,0, 4,0 }; gsl_matrix_complex_view m; m = gsl_matrix_complex_view_array (dat1, 4, 4); test_eigen_herm_matrix(&m.matrix, 0, "herm(4)"); m = gsl_matrix_complex_view_array (dat2, 4, 4); test_eigen_herm_matrix(&m.matrix, 1, "herm(4) diag"); } } /* test_eigen_herm() */ /****************************************** * nonsymm test code * ******************************************/ void test_eigen_nonsymm_results (const gsl_matrix * m, const gsl_vector_complex * eval, const gsl_matrix_complex * evec, size_t count, const char * desc, const char * desc2) { size_t i,j; size_t N = m->size1; gsl_vector_complex * x = gsl_vector_complex_alloc(N); gsl_vector_complex * y = gsl_vector_complex_alloc(N); gsl_matrix_complex * A = gsl_matrix_complex_alloc(N, N); /* we need a complex matrix for the blas routines, so copy m into A */ for (i = 0; i < N; ++i) { for (j = 0; j < N; ++j) { gsl_complex z; GSL_SET_COMPLEX(&z, gsl_matrix_get(m, i, j), 0.0); gsl_matrix_complex_set(A, i, j, z); } } for (i = 0; i < N; i++) { gsl_complex ei = gsl_vector_complex_get (eval, i); gsl_vector_complex_const_view vi = gsl_matrix_complex_const_column(evec, i); double norm = gsl_blas_dznrm2(&vi.vector); /* check that eigenvector is normalized */ gsl_test_rel(norm, 1.0, N * GSL_DBL_EPSILON, "nonsymm(N=%u,cnt=%u), %s, normalized(%d), %s", N, count, desc, i, desc2); gsl_vector_complex_memcpy(x, &vi.vector); /* compute y = m x (should = lambda v) */ gsl_blas_zgemv (CblasNoTrans, GSL_COMPLEX_ONE, A, x, GSL_COMPLEX_ZERO, y); /* compute x = lambda v */ gsl_blas_zscal(ei, x); /* now test if y = x */ for (j = 0; j < N; j++) { gsl_complex xj = gsl_vector_complex_get (x, j); gsl_complex yj = gsl_vector_complex_get (y, j); /* use abs here in case the values are close to 0 */ gsl_test_abs(GSL_REAL(yj), GSL_REAL(xj), 1e8*GSL_DBL_EPSILON, "nonsymm(N=%u,cnt=%u), %s, eigenvalue(%d,%d), real, %s", N, count, desc, i, j, desc2); gsl_test_abs(GSL_IMAG(yj), GSL_IMAG(xj), 1e8*GSL_DBL_EPSILON, "nonsymm(N=%u,cnt=%u), %s, eigenvalue(%d,%d), imag, %s", N, count, desc, i, j, desc2); } } gsl_matrix_complex_free(A); gsl_vector_complex_free(x); gsl_vector_complex_free(y); } void test_eigen_nonsymm_matrix(const gsl_matrix * m, size_t count, const char * desc, gsl_eigen_nonsymmv_workspace *w) { const size_t N = m->size1; gsl_matrix * A = gsl_matrix_alloc(N, N); gsl_matrix * Z = gsl_matrix_alloc(N, N); gsl_matrix_complex * evec = gsl_matrix_complex_alloc(N, N); gsl_vector_complex * eval = gsl_vector_complex_alloc(N); /* * calculate eigenvalues and eigenvectors - it is sufficient to * test gsl_eigen_nonsymmv() since that function calls * gsl_eigen_nonsymm() for the eigenvalues */ gsl_matrix_memcpy(A, m); gsl_eigen_nonsymmv(A, eval, evec, w); test_eigen_nonsymm_results (m, eval, evec, count, desc, "unsorted"); /* test sort routines */ gsl_eigen_nonsymmv_sort (eval, evec, GSL_EIGEN_SORT_ABS_ASC); test_eigen_nonsymm_results (m, eval, evec, count, desc, "abs/asc"); gsl_eigen_nonsymmv_sort (eval, evec, GSL_EIGEN_SORT_ABS_DESC); test_eigen_nonsymm_results (m, eval, evec, count, desc, "abs/desc"); /* test Schur vectors */ gsl_matrix_memcpy(A, m); gsl_eigen_nonsymmv_Z(A, eval, evec, Z, w); gsl_linalg_hessenberg_set_zero(A); test_eigen_schur(m, A, Z, Z, count, "nonsymm", desc); /* test if Z is an orthogonal matrix */ if (w->nonsymm_workspace_p->do_balance == 0) test_eigen_orthog(Z, count, "nonsymm", desc); gsl_matrix_free(A); gsl_matrix_free(Z); gsl_matrix_complex_free(evec); gsl_vector_complex_free(eval); } void test_eigen_nonsymm(void) { size_t N_max = 20; size_t n, i; gsl_rng *r = gsl_rng_alloc(gsl_rng_default); for (n = 1; n <= N_max; ++n) { gsl_matrix * m = gsl_matrix_alloc(n, n); gsl_eigen_nonsymmv_workspace * w = gsl_eigen_nonsymmv_alloc(n); for (i = 0; i < 5; ++i) { create_random_nonsymm_matrix(m, r, -10, 10); gsl_eigen_nonsymmv_params(0, w); test_eigen_nonsymm_matrix(m, i, "random, unbalanced", w); gsl_eigen_nonsymmv_params(1, w); test_eigen_nonsymm_matrix(m, i, "random, balanced", w); } gsl_matrix_free(m); gsl_eigen_nonsymmv_free(w); } gsl_rng_free(r); { double dat1[] = { 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }; double dat2[] = { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0 }; gsl_matrix_view v; gsl_eigen_nonsymmv_workspace * w = gsl_eigen_nonsymmv_alloc(4); v = gsl_matrix_view_array (dat1, 4, 4); test_eigen_nonsymm_matrix(&v.matrix, 0, "integer", w); v = gsl_matrix_view_array (dat2, 4, 4); test_eigen_nonsymm_matrix(&v.matrix, 1, "integer", w); gsl_eigen_nonsymmv_free(w); } } /* test_eigen_nonsymm() */ /****************************************** * gensymm test code * ******************************************/ void test_eigen_gensymm_results (const gsl_matrix * A, const gsl_matrix * B, const gsl_vector * eval, const gsl_matrix * evec, size_t count, const char * desc, const char * desc2) { const size_t N = A->size1; size_t i, j; gsl_vector * x = gsl_vector_alloc(N); gsl_vector * y = gsl_vector_alloc(N); gsl_vector * z = gsl_vector_alloc(N); /* check A v = lambda B v */ for (i = 0; i < N; i++) { double ei = gsl_vector_get (eval, i); gsl_vector_const_view vi = gsl_matrix_const_column(evec, i); double norm = gsl_blas_dnrm2(&vi.vector); /* check that eigenvector is normalized */ gsl_test_rel(norm, 1.0, N * GSL_DBL_EPSILON, "gensymm(N=%u,cnt=%u), %s, normalized(%d), %s", N, count, desc, i, desc2); gsl_vector_memcpy(z, &vi.vector); /* compute y = A z */ gsl_blas_dgemv (CblasNoTrans, 1.0, A, z, 0.0, y); /* compute x = B z */ gsl_blas_dgemv (CblasNoTrans, 1.0, B, z, 0.0, x); /* compute x = lambda B z */ gsl_blas_dscal(ei, x); /* now test if y = x */ for (j = 0; j < N; j++) { double xj = gsl_vector_get (x, j); double yj = gsl_vector_get (y, j); gsl_test_rel(yj, xj, 1e9 * GSL_DBL_EPSILON, "gensymm(N=%u,cnt=%u), %s, eigenvalue(%d,%d), real, %s", N, count, desc, i, j, desc2); } } gsl_vector_free(x); gsl_vector_free(y); gsl_vector_free(z); } void test_eigen_gensymm(void) { size_t N_max = 50; size_t n, i; gsl_rng *r = gsl_rng_alloc(gsl_rng_default); for (n = 1; n <= N_max; ++n) { gsl_matrix * A = gsl_matrix_alloc(n, n); gsl_matrix * B = gsl_matrix_alloc(n, n); gsl_matrix * ma = gsl_matrix_alloc(n, n); gsl_matrix * mb = gsl_matrix_alloc(n, n); gsl_vector * eval = gsl_vector_alloc(n); gsl_vector * evalv = gsl_vector_alloc(n); gsl_vector * x = gsl_vector_alloc(n); gsl_vector * y = gsl_vector_alloc(n); gsl_matrix * evec = gsl_matrix_alloc(n, n); gsl_eigen_gensymm_workspace * w = gsl_eigen_gensymm_alloc(n); gsl_eigen_gensymmv_workspace * wv = gsl_eigen_gensymmv_alloc(n); for (i = 0; i < 5; ++i) { create_random_symm_matrix(A, r, -10, 10); create_random_posdef_matrix(B, r); gsl_matrix_memcpy(ma, A); gsl_matrix_memcpy(mb, B); gsl_eigen_gensymmv(ma, mb, evalv, evec, wv); test_eigen_gensymm_results(A, B, evalv, evec, i, "random", "unsorted"); gsl_matrix_memcpy(ma, A); gsl_matrix_memcpy(mb, B); gsl_eigen_gensymm(ma, mb, eval, w); /* eval and evalv have to be sorted? not sure why */ gsl_vector_memcpy(x, eval); gsl_vector_memcpy(y, evalv); gsl_sort_vector(x); gsl_sort_vector(y); test_eigenvalues_real(y, x, "gensymm, random", "unsorted"); gsl_eigen_gensymmv_sort(evalv, evec, GSL_EIGEN_SORT_VAL_ASC); test_eigen_gensymm_results(A, B, evalv, evec, i, "random", "val/asc"); gsl_eigen_gensymmv_sort(evalv, evec, GSL_EIGEN_SORT_VAL_DESC); test_eigen_gensymm_results(A, B, evalv, evec, i, "random", "val/desc"); gsl_eigen_gensymmv_sort(evalv, evec, GSL_EIGEN_SORT_ABS_ASC); test_eigen_gensymm_results(A, B, evalv, evec, i, "random", "abs/asc"); gsl_eigen_gensymmv_sort(evalv, evec, GSL_EIGEN_SORT_ABS_DESC); test_eigen_gensymm_results(A, B, evalv, evec, i, "random", "abs/desc"); } gsl_matrix_free(A); gsl_matrix_free(B); gsl_matrix_free(ma); gsl_matrix_free(mb); gsl_vector_free(eval); gsl_vector_free(evalv); gsl_vector_free(x); gsl_vector_free(y); gsl_matrix_free(evec); gsl_eigen_gensymm_free(w); gsl_eigen_gensymmv_free(wv); } gsl_rng_free(r); } /* test_eigen_gensymm() */ /****************************************** * genherm test code * ******************************************/ void test_eigen_genherm_results (const gsl_matrix_complex * A, const gsl_matrix_complex * B, const gsl_vector * eval, const gsl_matrix_complex * evec, size_t count, const char * desc, const char * desc2) { const size_t N = A->size1; size_t i, j; gsl_vector_complex * x = gsl_vector_complex_alloc(N); gsl_vector_complex * y = gsl_vector_complex_alloc(N); /* check A v = lambda B v */ for (i = 0; i < N; i++) { double ei = gsl_vector_get (eval, i); gsl_vector_complex_const_view vi = gsl_matrix_complex_const_column(evec, i); double norm = gsl_blas_dznrm2(&vi.vector); /* check that eigenvector is normalized */ gsl_test_rel(norm, 1.0, N * GSL_DBL_EPSILON, "genherm(N=%u,cnt=%u), %s, normalized(%d), %s", N, count, desc, i, desc2); /* compute y = A z */ gsl_blas_zgemv (CblasNoTrans, GSL_COMPLEX_ONE, A, &vi.vector, GSL_COMPLEX_ZERO, y); /* compute x = B z */ gsl_blas_zgemv (CblasNoTrans, GSL_COMPLEX_ONE, B, &vi.vector, GSL_COMPLEX_ZERO, x); /* compute x = lambda B z */ gsl_blas_zdscal(ei, x); /* now test if y = x */ for (j = 0; j < N; j++) { gsl_complex xj = gsl_vector_complex_get (x, j); gsl_complex yj = gsl_vector_complex_get (y, j); gsl_test_rel(GSL_REAL(yj), GSL_REAL(xj), 1e9 * GSL_DBL_EPSILON, "genherm(N=%u,cnt=%u), %s, eigenvalue(%d,%d), real, %s", N, count, desc, i, j, desc2); gsl_test_abs(GSL_IMAG(yj), GSL_IMAG(xj), 1e9 * GSL_DBL_EPSILON, "genherm(N=%u,cnt=%u), %s, eigenvalue(%d,%d), imag, %s", N, count, desc, i, j, desc2); } } gsl_vector_complex_free(x); gsl_vector_complex_free(y); } void test_eigen_genherm(void) { size_t N_max = 50; size_t n, i; gsl_rng *r = gsl_rng_alloc(gsl_rng_default); for (n = 1; n <= N_max; ++n) { gsl_matrix_complex * A = gsl_matrix_complex_alloc(n, n); gsl_matrix_complex * B = gsl_matrix_complex_alloc(n, n); gsl_matrix_complex * ma = gsl_matrix_complex_alloc(n, n); gsl_matrix_complex * mb = gsl_matrix_complex_alloc(n, n); gsl_vector * eval = gsl_vector_alloc(n); gsl_vector * evalv = gsl_vector_alloc(n); gsl_vector * x = gsl_vector_alloc(n); gsl_vector * y = gsl_vector_alloc(n); gsl_matrix_complex * evec = gsl_matrix_complex_alloc(n, n); gsl_eigen_genherm_workspace * w = gsl_eigen_genherm_alloc(n); gsl_eigen_genhermv_workspace * wv = gsl_eigen_genhermv_alloc(n); for (i = 0; i < 5; ++i) { create_random_herm_matrix(A, r, -10, 10); create_random_complex_posdef_matrix(B, r); gsl_matrix_complex_memcpy(ma, A); gsl_matrix_complex_memcpy(mb, B); gsl_eigen_genhermv(ma, mb, evalv, evec, wv); test_eigen_genherm_results(A, B, evalv, evec, i, "random", "unsorted"); gsl_matrix_complex_memcpy(ma, A); gsl_matrix_complex_memcpy(mb, B); gsl_eigen_genherm(ma, mb, eval, w); /* eval and evalv have to be sorted? not sure why */ gsl_vector_memcpy(x, eval); gsl_vector_memcpy(y, evalv); gsl_sort_vector(x); gsl_sort_vector(y); test_eigenvalues_real(y, x, "genherm, random", "unsorted"); gsl_eigen_genhermv_sort(evalv, evec, GSL_EIGEN_SORT_VAL_ASC); test_eigen_genherm_results(A, B, evalv, evec, i, "random", "val/asc"); gsl_eigen_genhermv_sort(evalv, evec, GSL_EIGEN_SORT_VAL_DESC); test_eigen_genherm_results(A, B, evalv, evec, i, "random", "val/desc"); gsl_eigen_genhermv_sort(evalv, evec, GSL_EIGEN_SORT_ABS_ASC); test_eigen_genherm_results(A, B, evalv, evec, i, "random", "abs/asc"); gsl_eigen_genhermv_sort(evalv, evec, GSL_EIGEN_SORT_ABS_DESC); test_eigen_genherm_results(A, B, evalv, evec, i, "random", "abs/desc"); } gsl_matrix_complex_free(A); gsl_matrix_complex_free(B); gsl_matrix_complex_free(ma); gsl_matrix_complex_free(mb); gsl_vector_free(eval); gsl_vector_free(evalv); gsl_vector_free(x); gsl_vector_free(y); gsl_matrix_complex_free(evec); gsl_eigen_genherm_free(w); gsl_eigen_genhermv_free(wv); } gsl_rng_free(r); } /* test_eigen_genherm() */ /****************************************** * gen test code * ******************************************/ typedef struct { gsl_matrix *A; gsl_matrix *B; gsl_vector_complex *alpha; gsl_vector *beta; gsl_vector_complex *alphav; gsl_vector *betav; gsl_vector_complex *eval; gsl_vector_complex *evalv; gsl_vector *x; gsl_vector *y; gsl_matrix *Q; gsl_matrix *Z; gsl_matrix_complex *evec; gsl_eigen_gen_workspace *gen_p; gsl_eigen_genv_workspace *genv_p; } test_eigen_gen_workspace; test_eigen_gen_workspace * test_eigen_gen_alloc(const size_t n) { test_eigen_gen_workspace *w; w = (test_eigen_gen_workspace *) calloc(1, sizeof(test_eigen_gen_workspace)); w->A = gsl_matrix_alloc(n, n); w->B = gsl_matrix_alloc(n, n); w->alpha = gsl_vector_complex_alloc(n); w->beta = gsl_vector_alloc(n); w->alphav = gsl_vector_complex_alloc(n); w->betav = gsl_vector_alloc(n); w->eval = gsl_vector_complex_alloc(n); w->evalv = gsl_vector_complex_alloc(n); w->x = gsl_vector_alloc(n); w->y = gsl_vector_alloc(n); w->Q = gsl_matrix_alloc(n, n); w->Z = gsl_matrix_alloc(n, n); w->evec = gsl_matrix_complex_alloc(n, n); w->gen_p = gsl_eigen_gen_alloc(n); w->genv_p = gsl_eigen_genv_alloc(n); return (w); } /* test_eigen_gen_alloc() */ void test_eigen_gen_free(test_eigen_gen_workspace *w) { gsl_matrix_free(w->A); gsl_matrix_free(w->B); gsl_vector_complex_free(w->alpha); gsl_vector_free(w->beta); gsl_vector_complex_free(w->alphav); gsl_vector_free(w->betav); gsl_vector_complex_free(w->eval); gsl_vector_complex_free(w->evalv); gsl_vector_free(w->x); gsl_vector_free(w->y); gsl_matrix_free(w->Q); gsl_matrix_free(w->Z); gsl_matrix_complex_free(w->evec); gsl_eigen_gen_free(w->gen_p); gsl_eigen_genv_free(w->genv_p); free(w); } /* test_eigen_gen_free() */ void test_eigen_gen_results (const gsl_matrix * A, const gsl_matrix * B, const gsl_vector_complex * alpha, const gsl_vector * beta, const gsl_matrix_complex * evec, size_t count, const char * desc, const char * desc2) { const size_t N = A->size1; size_t i, j; gsl_matrix_complex *ma, *mb; gsl_vector_complex *x, *y; gsl_complex z_one, z_zero; ma = gsl_matrix_complex_alloc(N, N); mb = gsl_matrix_complex_alloc(N, N); y = gsl_vector_complex_alloc(N); x = gsl_vector_complex_alloc(N); /* ma <- A, mb <- B */ for (i = 0; i < N; ++i) { for (j = 0; j < N; ++j) { gsl_complex z; GSL_SET_COMPLEX(&z, gsl_matrix_get(A, i, j), 0.0); gsl_matrix_complex_set(ma, i, j, z); GSL_SET_COMPLEX(&z, gsl_matrix_get(B, i, j), 0.0); gsl_matrix_complex_set(mb, i, j, z); } } GSL_SET_COMPLEX(&z_one, 1.0, 0.0); GSL_SET_COMPLEX(&z_zero, 0.0, 0.0); /* check eigenvalues */ for (i = 0; i < N; ++i) { gsl_vector_complex_const_view vi = gsl_matrix_complex_const_column(evec, i); gsl_complex ai = gsl_vector_complex_get(alpha, i); double bi = gsl_vector_get(beta, i); /* compute x = alpha * B * v */ gsl_blas_zgemv(CblasNoTrans, z_one, mb, &vi.vector, z_zero, x); gsl_blas_zscal(ai, x); /* compute y = beta * A v */ gsl_blas_zgemv(CblasNoTrans, z_one, ma, &vi.vector, z_zero, y); gsl_blas_zdscal(bi, y); /* now test if y = x */ for (j = 0; j < N; ++j) { gsl_complex xj = gsl_vector_complex_get(x, j); gsl_complex yj = gsl_vector_complex_get(y, j); gsl_test_abs(GSL_REAL(yj), GSL_REAL(xj), 1e8*GSL_DBL_EPSILON, "gen(N=%u,cnt=%u), %s, eigenvalue(%d,%d), real, %s", N, count, desc, i, j, desc2); gsl_test_abs(GSL_IMAG(yj), GSL_IMAG(xj), 1e8*GSL_DBL_EPSILON, "gen(N=%u,cnt=%u), %s, eigenvalue(%d,%d), real, %s", N, count, desc, i, j, desc2); } } gsl_matrix_complex_free(ma); gsl_matrix_complex_free(mb); gsl_vector_complex_free(y); gsl_vector_complex_free(x); } /* test_eigen_gen_results() */ void test_eigen_gen_pencil(const gsl_matrix * A, const gsl_matrix * B, size_t count, const char * desc, int test_schur, test_eigen_gen_workspace *w) { const size_t N = A->size1; size_t i; gsl_matrix_memcpy(w->A, A); gsl_matrix_memcpy(w->B, B); if (test_schur) { gsl_eigen_genv_QZ(w->A, w->B, w->alphav, w->betav, w->evec, w->Q, w->Z, w->genv_p); test_eigen_schur(A, w->A, w->Q, w->Z, count, "genv/A", desc); test_eigen_schur(B, w->B, w->Q, w->Z, count, "genv/B", desc); } else gsl_eigen_genv(w->A, w->B, w->alphav, w->betav, w->evec, w->genv_p); test_eigen_gen_results(A, B, w->alphav, w->betav, w->evec, count, desc, "unsorted"); gsl_matrix_memcpy(w->A, A); gsl_matrix_memcpy(w->B, B); if (test_schur) { gsl_eigen_gen_params(1, 1, 0, w->gen_p); gsl_eigen_gen_QZ(w->A, w->B, w->alpha, w->beta, w->Q, w->Z, w->gen_p); test_eigen_schur(A, w->A, w->Q, w->Z, count, "gen/A", desc); test_eigen_schur(B, w->B, w->Q, w->Z, count, "gen/B", desc); } else { gsl_eigen_gen_params(0, 0, 0, w->gen_p); gsl_eigen_gen(w->A, w->B, w->alpha, w->beta, w->gen_p); } /* compute eval = alpha / beta values */ for (i = 0; i < N; ++i) { gsl_complex z, ai; double bi; ai = gsl_vector_complex_get(w->alpha, i); bi = gsl_vector_get(w->beta, i); GSL_SET_COMPLEX(&z, GSL_REAL(ai) / bi, GSL_IMAG(ai) / bi); gsl_vector_complex_set(w->eval, i, z); ai = gsl_vector_complex_get(w->alphav, i); bi = gsl_vector_get(w->betav, i); GSL_SET_COMPLEX(&z, GSL_REAL(ai) / bi, GSL_IMAG(ai) / bi); gsl_vector_complex_set(w->evalv, i, z); } /* sort eval and evalv and test them */ gsl_eigen_nonsymmv_sort(w->eval, NULL, GSL_EIGEN_SORT_VAL_ASC); gsl_eigen_nonsymmv_sort(w->evalv, NULL, GSL_EIGEN_SORT_VAL_ASC); test_eigenvalues_complex(w->evalv, w->eval, "gen", desc); gsl_eigen_genv_sort(w->alphav, w->betav, w->evec, GSL_EIGEN_SORT_ABS_ASC); test_eigen_gen_results(A, B, w->alphav, w->betav, w->evec, count, desc, "abs/asc"); gsl_eigen_genv_sort(w->alphav, w->betav, w->evec, GSL_EIGEN_SORT_ABS_DESC); test_eigen_gen_results(A, B, w->alphav, w->betav, w->evec, count, desc, "abs/desc"); } /* test_eigen_gen_pencil() */ void test_eigen_gen(void) { size_t N_max = 20; size_t n, i; gsl_rng *r = gsl_rng_alloc(gsl_rng_default); for (n = 1; n <= N_max; ++n) { gsl_matrix * A = gsl_matrix_alloc(n, n); gsl_matrix * B = gsl_matrix_alloc(n, n); test_eigen_gen_workspace * w = test_eigen_gen_alloc(n); for (i = 0; i < 5; ++i) { create_random_nonsymm_matrix(A, r, -10, 10); create_random_nonsymm_matrix(B, r, -10, 10); test_eigen_gen_pencil(A, B, i, "random", 0, w); test_eigen_gen_pencil(A, B, i, "random", 1, w); } gsl_matrix_free(A); gsl_matrix_free(B); test_eigen_gen_free(w); } gsl_rng_free(r); /* this system will test the exceptional shift code */ { double datA[] = { 1, 1, 0, 0, 0, -1, 1, 0, 0 }; double datB[] = { -1, 0, -1, 0, -1, 0, 0, 0, -1 }; gsl_matrix_view va = gsl_matrix_view_array (datA, 3, 3); gsl_matrix_view vb = gsl_matrix_view_array (datB, 3, 3); test_eigen_gen_workspace * w = test_eigen_gen_alloc(3); test_eigen_gen_pencil(&va.matrix, &vb.matrix, 0, "integer", 0, w); test_eigen_gen_pencil(&va.matrix, &vb.matrix, 0, "integer", 1, w); test_eigen_gen_free(w); } } /* test_eigen_gen() */ int main() { gsl_ieee_env_setup (); gsl_rng_env_setup (); test_eigen_symm(); test_eigen_herm(); test_eigen_nonsymm(); test_eigen_gensymm(); test_eigen_genherm(); test_eigen_gen(); exit (gsl_test_summary()); } gsl/eigen/genhermv.c0000644000175000017500000001252613536674414013006 0ustar eddedd/* eigen/genhermv.c * * Copyright (C) 2007 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include /* * This module computes the eigenvalues and eigenvectors of a complex * generalized hermitian-definite eigensystem A x = \lambda B x, where * A and B are hermitian, and B is positive-definite. */ static void genhermv_normalize_eigenvectors(gsl_matrix_complex *evec); /* gsl_eigen_genhermv_alloc() Allocate a workspace for solving the generalized hermitian-definite eigenvalue problem. The size of this workspace is O(5n). Inputs: n - size of matrices Return: pointer to workspace */ gsl_eigen_genhermv_workspace * gsl_eigen_genhermv_alloc(const size_t n) { gsl_eigen_genhermv_workspace *w; if (n == 0) { GSL_ERROR_NULL ("matrix dimension must be positive integer", GSL_EINVAL); } w = (gsl_eigen_genhermv_workspace *) calloc (1, sizeof (gsl_eigen_genhermv_workspace)); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->size = n; w->hermv_workspace_p = gsl_eigen_hermv_alloc(n); if (!w->hermv_workspace_p) { gsl_eigen_genhermv_free(w); GSL_ERROR_NULL("failed to allocate space for hermv workspace", GSL_ENOMEM); } return (w); } /* gsl_eigen_genhermv_alloc() */ /* gsl_eigen_genhermv_free() Free workspace w */ void gsl_eigen_genhermv_free (gsl_eigen_genhermv_workspace * w) { RETURN_IF_NULL (w); if (w->hermv_workspace_p) gsl_eigen_hermv_free(w->hermv_workspace_p); free(w); } /* gsl_eigen_genhermv_free() */ /* gsl_eigen_genhermv() Solve the generalized hermitian-definite eigenvalue problem A x = \lambda B x for the eigenvalues \lambda and eigenvectors x. Inputs: A - complex hermitian matrix B - complex hermitian and positive definite matrix eval - where to store eigenvalues evec - where to store eigenvectors w - workspace Return: success or error */ int gsl_eigen_genhermv (gsl_matrix_complex * A, gsl_matrix_complex * B, gsl_vector * eval, gsl_matrix_complex * evec, gsl_eigen_genhermv_workspace * w) { const size_t N = A->size1; /* check matrix and vector sizes */ if (N != A->size2) { GSL_ERROR ("matrix must be square to compute eigenvalues", GSL_ENOTSQR); } else if ((N != B->size1) || (N != B->size2)) { GSL_ERROR ("B matrix dimensions must match A", GSL_EBADLEN); } else if (eval->size != N) { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } else if (evec->size1 != evec->size2) { GSL_ERROR ("eigenvector matrix must be square", GSL_ENOTSQR); } else if (evec->size1 != N) { GSL_ERROR ("eigenvector matrix has wrong size", GSL_EBADLEN); } else if (w->size != N) { GSL_ERROR ("matrix size does not match workspace", GSL_EBADLEN); } else { int s; /* compute Cholesky factorization of B */ s = gsl_linalg_complex_cholesky_decomp(B); if (s != GSL_SUCCESS) return s; /* B is not positive definite */ /* transform to standard hermitian eigenvalue problem */ gsl_eigen_genherm_standardize(A, B); /* compute eigenvalues and eigenvectors */ s = gsl_eigen_hermv(A, eval, evec, w->hermv_workspace_p); if (s != GSL_SUCCESS) return s; /* backtransform eigenvectors: evec -> L^{-H} evec */ gsl_blas_ztrsm(CblasLeft, CblasLower, CblasConjTrans, CblasNonUnit, GSL_COMPLEX_ONE, B, evec); /* the blas call destroyed the normalization - renormalize */ genhermv_normalize_eigenvectors(evec); return GSL_SUCCESS; } } /* gsl_eigen_genhermv() */ /******************************************** * INTERNAL ROUTINES * ********************************************/ /* genhermv_normalize_eigenvectors() Normalize eigenvectors so that their Euclidean norm is 1 Inputs: evec - eigenvectors */ static void genhermv_normalize_eigenvectors(gsl_matrix_complex *evec) { const size_t N = evec->size1; size_t i; /* looping */ for (i = 0; i < N; ++i) { gsl_vector_complex_view vi = gsl_matrix_complex_column(evec, i); double scale = 1.0 / gsl_blas_dznrm2(&vi.vector); gsl_blas_zdscal(scale, &vi.vector); } } /* genhermv_normalize_eigenvectors() */ gsl/eigen/symm.c0000644000175000017500000001134513536674414012156 0ustar eddedd/* eigen/symm.c * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include /* Compute eigenvalues/eigenvectors of real symmetric matrix using reduction to tridiagonal form, followed by QR iteration with implicit shifts. See Golub & Van Loan, "Matrix Computations" (3rd ed), Section 8.3 */ #include "qrstep.c" gsl_eigen_symm_workspace * gsl_eigen_symm_alloc (const size_t n) { gsl_eigen_symm_workspace *w; if (n == 0) { GSL_ERROR_NULL ("matrix dimension must be positive integer", GSL_EINVAL); } w = ((gsl_eigen_symm_workspace *) malloc (sizeof (gsl_eigen_symm_workspace))); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->d = (double *) malloc (n * sizeof (double)); if (w->d == 0) { GSL_ERROR_NULL ("failed to allocate space for diagonal", GSL_ENOMEM); } w->sd = (double *) malloc (n * sizeof (double)); if (w->sd == 0) { GSL_ERROR_NULL ("failed to allocate space for subdiagonal", GSL_ENOMEM); } w->size = n; return w; } void gsl_eigen_symm_free (gsl_eigen_symm_workspace * w) { RETURN_IF_NULL (w); free (w->sd); free (w->d); free (w); } int gsl_eigen_symm (gsl_matrix * A, gsl_vector * eval, gsl_eigen_symm_workspace * w) { if (A->size1 != A->size2) { GSL_ERROR ("matrix must be square to compute eigenvalues", GSL_ENOTSQR); } else if (eval->size != A->size1) { GSL_ERROR ("eigenvalue vector must match matrix size", GSL_EBADLEN); } else if (A->size1 != w->size) { GSL_ERROR ("matrix does not match workspace", GSL_EBADLEN); } else { const size_t N = A->size1; double *const d = w->d; double *const sd = w->sd; size_t a, b; /* handle special case */ if (N == 1) { double A00 = gsl_matrix_get (A, 0, 0); gsl_vector_set (eval, 0, A00); return GSL_SUCCESS; } /* use sd as the temporary workspace for the decomposition, since we can discard the tau result immediately if we are not computing eigenvectors */ { gsl_vector_view d_vec = gsl_vector_view_array (d, N); gsl_vector_view sd_vec = gsl_vector_view_array (sd, N - 1); gsl_vector_view tau = gsl_vector_view_array (sd, N - 1); gsl_linalg_symmtd_decomp (A, &tau.vector); gsl_linalg_symmtd_unpack_T (A, &d_vec.vector, &sd_vec.vector); } /* Make an initial pass through the tridiagonal decomposition to remove off-diagonal elements which are effectively zero */ chop_small_elements (N, d, sd); /* Progressively reduce the matrix until it is diagonal */ b = N - 1; while (b > 0) { if (sd[b - 1] == 0.0 || isnan(sd[b - 1])) { b--; continue; } /* Find the largest unreduced block (a,b) starting from b and working backwards */ a = b - 1; while (a > 0) { if (sd[a - 1] == 0.0) { break; } a--; } { const size_t n_block = b - a + 1; double *d_block = d + a; double *sd_block = sd + a; /* apply QR reduction with implicit deflation to the unreduced block */ qrstep (n_block, d_block, sd_block, NULL, NULL); /* remove any small off-diagonal elements */ chop_small_elements (n_block, d_block, sd_block); } } { gsl_vector_view d_vec = gsl_vector_view_array (d, N); gsl_vector_memcpy (eval, &d_vec.vector); } return GSL_SUCCESS; } } gsl/configure.ac0000664000175000017500000004646314152016063012220 0ustar eddedddnl Process this file with autoconf to produce a configure script. AC_INIT([gsl],[2.7.1]) AC_CONFIG_SRCDIR(gsl_math.h) AM_INIT_AUTOMAKE([gnu]) AC_CONFIG_HEADERS([config.h]) AM_MAINTAINER_MODE dnl Library versioning (C:R:A == current:revision:age) dnl See the libtool manual for an explanation of the numbers dnl dnl gsl-1.0 libgsl 0:0:0 libgslcblas 0:0:0 dnl gsl-1.1 libgsl 1:0:1 libgslcblas 0:0:0 dnl gsl-1.1.1 libgsl 2:0:2 libgslcblas 0:0:0 dnl gsl-1.2 libgsl 3:0:3 libgslcblas 0:0:0 dnl gsl-1.3 libgsl 4:0:4 libgslcblas 0:0:0 dnl gsl-1.4 libgsl 5:0:5 libgslcblas 0:0:0 dnl gsl-1.5 libgsl 6:0:6 libgslcblas 0:0:0 dnl gsl-1.6 libgsl 7:0:7 libgslcblas 0:0:0 dnl gsl-1.7 libgsl 8:0:8 libgslcblas 0:0:0 dnl gsl-1.8 libgsl 9:0:9 libgslcblas 0:0:0 dnl gsl-1.9 libgsl 10:0:10 libgslcblas 0:0:0 dnl gsl-1.10 libgsl 10:0:10 (*) libgslcblas 0:0:0 dnl gsl-1.11 libgsl 12:0:12 libgslcblas 0:0:0 dnl gsl-1.12 libgsl 13:0:13 libgslcblas 0:0:0 dnl gsl-1.13 libgsl 14:0:14 libgslcblas 0:0:0 dnl gsl-1.14 libgsl 15:0:15 libgslcblas 0:0:0 dnl gsl-1.15 libgsl 16:0:16 libgslcblas 0:0:0 dnl gsl-1.16 libgsl 17:0:17 libgslcblas 0:0:0 dnl gsl-2.0 libgsl 18:0:18 (**) libgslcblas 0:0:0 dnl gsl-2.1 libgsl 19:0:0 libgslcblas 0:0:0 dnl gsl-2.2 libgsl 20:0:1 libgslcblas 0:0:0 dnl gsl-2.2.1 libgsl 21:0:2 libgslcblas 0:0:0 dnl gsl-2.3 libgsl 22:0:3 libgslcblas 0:0:0 dnl gsl-2.4 libgsl 23:0:0 libgslcblas 0:0:0 dnl gsl-2.5 libgsl 24:0:1 libgslcblas 0:0:0 dnl gsl-2.6 libgsl 25:0:0 libgslcblas 0:0:0 dnl gsl-2.7 libgsl 26:0:1 libgslcblas 0:0:0 (***) dnl gsl-2.7.1 libgsl 27:0:0 libgslcblas 0:0:0 dnl dnl (*) There was an error on this release. Firstly, the versioning dnl numbers were not updated. Secondly, 2 functions were removed, but dnl the age not reset--this should have been 11:0:0. However these dnl functions were not documented and are regarded as internal, so we dnl will assume 11:0:11. dnl dnl (**) There was an error on this release. Age should have been dnl reset to 18:0:0 dnl dnl (***) There was an error on this release. Age should have been dnl reset to 26:0:0 dnl dnl How to update library version number dnl ==================================== dnl dnl C: increment if the interface has additions, changes, removals. dnl dnl R: increment any time the source changes; set to 0 if you dnl incremented CURRENT dnl dnl A: increment if any interfaces have been added; set to 0 if any dnl interfaces have been removed. removal has precedence over adding, dnl so set to 0 if both happened. dnl dnl See https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html dnl for more detailed info dnl GSL_CURRENT=27 GSL_REVISION=0 GSL_AGE=0 dnl CBLAS_CURRENT=0 CBLAS_REVISION=0 CBLAS_AGE=0 GSL_LT_VERSION="${GSL_CURRENT}:${GSL_REVISION}:${GSL_AGE}" AC_SUBST(GSL_LT_VERSION) GSL_LT_CBLAS_VERSION="${CBLAS_CURRENT}:${CBLAS_REVISION}:${CBLAS_AGE}" AC_SUBST(GSL_LT_CBLAS_VERSION) case "$VERSION" in *+) ;; *) AC_DEFINE(RELEASED,[],[Defined if this is an official release]) ;; esac dnl Split VERSION into GSL_VERSION_MAJOR and GSL_VERSION_MINOR dnl Follows AX_SPLIT_VERSION macro from AC-Archive dnl Rhys Ulerich AC_PROG_SED GSL_MAJOR_VERSION=`echo "$VERSION" | $SED 's/\([[^.]][[^.]]*\).*/\1/'` GSL_MINOR_VERSION=`echo "$VERSION" | $SED 's/[[^.]][[^.]]*.\([[^.]][[^.]]*\).*/\1/'` AC_SUBST(GSL_MAJOR_VERSION) AC_SUBST(GSL_MINOR_VERSION) AC_PROG_MKDIR_P dnl things required by automake dnl AC_ARG_PROGRAM AC_PROG_MAKE_SET dnl Check for which system. AC_CANONICAL_HOST dnl Checks for programs. AC_LANG(C) AC_PROG_CC AC_PROG_CPP AC_PROG_INSTALL AC_PROG_LN_S LT_INIT([win32-dll]) dnl Check compiler features AC_TYPE_SIZE_T dnl AC_C_CONST AC_C_VOLATILE AC_C_INLINE AC_C_CHAR_UNSIGNED GSL_CFLAGS="-I$includedir" GSL_LIBS="-L$libdir -lgsl" dnl macro from libtool - can be replaced with LT_LIB_M when we require libtool 2 LT_LIB_M GSL_LIBM=$LIBM AC_SUBST(GSL_CFLAGS) AC_SUBST(GSL_LIBS) AC_SUBST(GSL_LIBM) if test "$ac_cv_c_inline" != no ; then dnl Check for "extern inline", using a modified version of the test dnl for AC_C_INLINE from acspecific.mt dnl AC_CACHE_CHECK([for GNU-style extern inline], ac_cv_c_extern_inline, [ac_cv_c_extern_inline=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[extern $ac_cv_c_inline double foo(double x); extern $ac_cv_c_inline double foo(double x) { return x + 1.0 ; } ; double foo (double x) { return x + 1.0 ; };]], [[ foo(1.0) ]])],[ac_cv_c_extern_inline="yes"],[]) ]) if test "$ac_cv_c_extern_inline" != no ; then AC_DEFINE(HAVE_INLINE,[1],[Define if you have inline]) else AC_CACHE_CHECK([for C99-style inline], ac_cv_c_c99inline, [ac_cv_c_c99inline=no dnl next line is a necessary condition AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[extern inline void* foo() { foo(); return &foo ; };]], [[ return foo() != 0 ]])],[ac_cv_c_c99inline="yes"],[]) dnl but not sufficient, extern must work but inline on its own should not if test "$ac_cv_c_c99inline" != no ; then AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[inline void* foo() { foo(); return &foo ; };]], [[ return foo() != 0 ]])],[],ac_cv_c_c99inline="no") fi ]) if test "$ac_cv_c_c99inline" != no ; then AC_DEFINE(HAVE_INLINE,[1],[Define if you have inline]) AC_DEFINE(HAVE_C99_INLINE,[1],[Define if you have inline with C99 behavior]) fi fi fi dnl Checks for header files. AC_CHECK_HEADERS(ieeefp.h) AC_CHECK_HEADERS(complex.h) dnl Checks for typedefs, structures, and compiler characteristics. case $host in *-*-cygwin* | *-*-mingw* ) if test "$enable_shared" = yes; then GSLCBLAS_LDFLAGS="$GSLCBLAS_LDFLAGS -no-undefined" GSL_LDFLAGS="$GSL_LDFLAGS -no-undefined" GSL_LIBADD="cblas/libgslcblas.la" fi ;; esac AC_SUBST(GSLCBLAS_LDFLAGS) AC_SUBST(GSL_LDFLAGS) AC_SUBST(GSL_LIBADD) dnl Checks for library functions. dnl AC_FUNC_ALLOCA AC_FUNC_VPRINTF dnl strcasecmp, strerror, xmalloc, xrealloc, probably others should be added. dnl removed strerror from this list, it's hardcoded in the err/ directory dnl Any functions which appear in this list of functions should be provided dnl in the utils/ directory dnl xmalloc is not used, removed (bjg) AC_REPLACE_FUNCS(memcpy memmove strdup strtol strtoul) AC_CACHE_CHECK(for EXIT_SUCCESS and EXIT_FAILURE, ac_cv_decl_exit_success_and_failure, AC_EGREP_CPP(yes, [ #include #ifdef EXIT_SUCCESS yes #endif ], ac_cv_decl_exit_success_and_failure=yes, ac_cv_decl_exit_success_and_failure=no) ) if test "$ac_cv_decl_exit_success_and_failure" = yes ; then AC_DEFINE(HAVE_EXIT_SUCCESS_AND_FAILURE,1,[Defined if you have ansi EXIT_SUCCESS and EXIT_FAILURE in stdlib.h]) fi ; dnl Use alternate libm if specified by user if test "x$LIBS" = "x" ; then AC_CHECK_LIB(m, cos) fi dnl Remember to put a definition in acconfig.h for each of these AC_CHECK_DECLS(feenableexcept,,,[#define _GNU_SOURCE 1 #include ]) AC_CHECK_DECLS(fesettrapenable,,,[#define _GNU_SOURCE 1 #include ]) AC_CHECK_DECLS(hypot,,,[#include ]) AC_CHECK_DECLS(expm1,,,[#include ]) AC_CHECK_DECLS(acosh,,,[#include ]) AC_CHECK_DECLS(asinh,,,[#include ]) AC_CHECK_DECLS(atanh,,,[#include ]) AC_CHECK_DECLS(ldexp,,,[#include ]) AC_CHECK_DECLS(frexp,,,[#include ]) AC_CHECK_DECLS([fprnd_t],[],[],[[#include ]]) AC_CHECK_DECLS(isinf,,,[#include ]) AC_CHECK_DECLS(isfinite,,,[#include ]) AC_CHECK_DECLS(finite,,,[#include #if HAVE_IEEEFP_H #include #endif]) AC_CHECK_DECLS(isnan,,,[#include ]) dnl OpenBSD has a broken implementation of log1p. case "$host" in *-*-*openbsd*) AC_MSG_RESULT([avoiding OpenBSD system log1p - using gsl version]) ;; *) AC_CHECK_DECLS(log1p,,,[#include ]) ;; esac AC_CACHE_CHECK([for long double stdio], ac_cv_func_printf_longdouble, [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include int main (void) { const char * s = "5678.25"; long double x = 1.234 ; fprintf(stderr,"%Lg\n",x) ; sscanf(s, "%Lg", &x); if (x == 5678.25) {exit (0);} else {exit(1); }; }]])],[ac_cv_func_printf_longdouble="yes"],[ac_cv_func_printf_longdouble="no"],[ac_cv_func_printf_longdouble="no"])]) if test "$ac_cv_func_printf_longdouble" != no; then AC_DEFINE(HAVE_PRINTF_LONGDOUBLE,1,[Define this if printf can handle %Lf for long double]) fi AC_CACHE_CHECK([for extended floating point registers],ac_cv_c_extended_fp, [case "$host" in *sparc*-*-*) ac_cv_c_extended_fp=no ;; *powerpc*-*-*) ac_cv_c_extended_fp=no ;; *hppa*-*-*) ac_cv_c_extended_fp=no ;; *alpha*-*-*) ac_cv_c_extended_fp=no ;; *68k*-*-*) ac_cv_c_extended_fp=yes ;; *86-*-*) ac_cv_c_extended_fp=yes ;; x86_64-*-*) ac_cv_c_extended_fp=yes ;; *) ac_cv_c_extended_fp=unknown ;; esac ]) if test $ac_cv_c_extended_fp != "no" ; then AC_DEFINE(HAVE_EXTENDED_PRECISION_REGISTERS,1,[Defined on architectures with excess floating-point precision]) fi AC_CACHE_CHECK([for IEEE arithmetic interface type], ac_cv_c_ieee_interface, [case "$host" in sparc-*-linux*) ac_cv_c_ieee_interface=gnusparc ;; m68k-*-linux*) ac_cv_c_ieee_interface=gnum68k ;; powerpc-*-linux*) ac_cv_c_ieee_interface=gnuppc ;; *86-*-gnu | *86_64-*-gnu | *86-*-linux* | *86_64-*-linux*) ac_cv_c_ieee_interface=gnux86 ;; *-*-sunos4*) ac_cv_c_ieee_interface=sunos4 ;; *-*-solaris*) ac_cv_c_ieee_interface=solaris ;; *-*-hpux11*) ac_cv_c_ieee_interface=hpux11 ;; *-*-hpux*) ac_cv_c_ieee_interface=hpux ;; *-*-osf*) ac_cv_c_ieee_interface=tru64 ;; *-*-aix*) ac_cv_c_ieee_interface=aix ;; *-*-irix*) ac_cv_c_ieee_interface=irix ;; powerpc-*-*darwin*) ac_cv_c_ieee_interface=darwin ;; *86-*-*darwin*) ac_cv_c_ieee_interface=darwin86 ;; *-*-*netbsd*) ac_cv_c_ieee_interface=netbsd ;; *-*-*openbsd*) ac_cv_c_ieee_interface=openbsd ;; *-*-*bsd*) ac_cv_c_ieee_interface=freebsd ;; *-*-os2*) ac_cv_c_ieee_interface=os2emx ;; *) ac_cv_c_ieee_interface=unknown ;; esac ]) if test "$ac_cv_c_ieee_interface" = "gnux86" ; then AC_CACHE_CHECK([for FPU_SETCW], ac_cv_c_fpu_setcw, [ac_cv_c_fpu_setcw=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include #ifndef _FPU_SETCW #include #define _FPU_SETCW(cw) __setfpucw(cw) #endif ]], [[ unsigned short mode = 0 ; _FPU_SETCW(mode); ]])],[ac_cv_c_fpu_setcw="yes"],[ac_cv_c_ieee_interface=unknown]) ]) fi if test "$ac_cv_c_ieee_interface" = "gnux86" ; then AC_CACHE_CHECK([for SSE extensions], ac_cv_c_fpu_sse, [ac_cv_c_fpu_sse=no AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include #define _FPU_SETMXCSR(cw_sse) asm volatile ("ldmxcsr %0" : : "m" (*&cw_sse)) ]], [[ unsigned int mode = 0x1f80 ; _FPU_SETMXCSR(mode); exit(0); ]])],[ac_cv_c_fpu_sse="yes"],[ac_cv_c_fpu_sse="no"],[ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #define _FPU_SETMXCSR(cw_sse) asm volatile ("ldmxcsr %0" : : "m" (*&cw_sse)) ]], [[ unsigned int mode = 0x1f80 ; _FPU_SETMXCSR(mode); exit(0); ]])],[ac_cv_c_fpu_sse="yes"],[ac_cv_c_fpu_sse="no"]) ])]) if test $ac_cv_c_fpu_sse = yes; then AC_DEFINE([HAVE_FPU_X86_SSE], 1, [Define if x86 processor has sse extensions.]) fi fi ac_tr_ieee_interface=HAVE_`echo $ac_cv_c_ieee_interface | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`_IEEE_INTERFACE AC_DEFINE_UNQUOTED($ac_tr_ieee_interface,1,[IEEE Interface Type]) AC_SUBST(HAVE_GNUSPARC_IEEE_INTERFACE) AC_SUBST(HAVE_GNUM68K_IEEE_INTERFACE) AC_SUBST(HAVE_GNUPPC_IEEE_INTERFACE) AC_SUBST(HAVE_GNUX86_IEEE_INTERFACE) AC_SUBST(HAVE_SUNOS4_IEEE_INTERFACE) AC_SUBST(HAVE_SOLARIS_IEEE_INTERFACE) AC_SUBST(HAVE_HPUX11_IEEE_INTERFACE) AC_SUBST(HAVE_HPUX_IEEE_INTERFACE) AC_SUBST(HAVE_TRU64_IEEE_INTERFACE) AC_SUBST(HAVE_IRIX_IEEE_INTERFACE) AC_SUBST(HAVE_AIX_IEEE_INTERFACE) AC_SUBST(HAVE_FREEBSD_IEEE_INTERFACE) AC_SUBST(HAVE_OS2EMX_IEEE_INTERFACE) AC_SUBST(HAVE_NETBSD_IEEE_INTERFACE) AC_SUBST(HAVE_OPENBSD_IEEE_INTERFACE) AC_SUBST(HAVE_DARWIN_IEEE_INTERFACE) AC_SUBST(HAVE_DARWIN86_IEEE_INTERFACE) dnl Check for IEEE control flags save_cflags="$CFLAGS" AC_CACHE_CHECK([for IEEE compiler flags], ac_cv_c_ieee_flags, [ case "$host" in alpha*-*-*) if test X"$GCC" = Xyes ; then ieee_flags='-mieee -mfp-rounding-mode=d' else # This assumes Compaq's C compiler. ieee_flags='-ieee -fprm d' fi ;; esac if test X"$ieee_flags" != X ; then CFLAGS="$ieee_flags $CFLAGS" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[int foo;]])],[ac_cv_c_ieee_flags="$ieee_flags"],[ac_cv_c_ieee_flags="none"]) else ac_cv_c_ieee_flags="none" fi]) if test "$ac_cv_c_ieee_flags" != "none" ; then CFLAGS="$ac_cv_c_ieee_flags $save_cflags" else CFLAGS="$save_cflags" fi dnl Check IEEE comparisons, whether "x != x" is true for NaNs dnl AC_CACHE_CHECK([for IEEE comparisons], ac_cv_c_ieee_comparisons, [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include int main (void) { int status; double inf, nan; inf = exp(1.0e10); nan = inf / inf ; status = (nan == nan); exit (status); }]])],[ac_cv_c_ieee_comparisons="yes"],[ac_cv_c_ieee_comparisons="no"],[ac_cv_c_ieee_comparisons="yes"]) ]) if test "$ac_cv_c_ieee_comparisons" != no ; then AC_DEFINE(HAVE_IEEE_COMPARISONS,1,[Define this if IEEE comparisons work correctly (e.g. NaN != NaN)]) fi dnl Check for IEEE denormalized arithmetic dnl AC_CACHE_CHECK([for IEEE denormalized values], ac_cv_c_ieee_denormals, [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include int main (void) { int i, status; volatile double z = 1e-308; for (i = 0; i < 5; i++) { z = z / 10.0 ; }; for (i = 0; i < 5; i++) { z = z * 10.0 ; }; status = (z == 0.0); exit (status); }]])],[ac_cv_c_ieee_denormals="yes"],[ac_cv_c_ieee_denormals="no"],[ac_cv_c_ieee_denormals="yes"]) ]) if test "$ac_cv_c_ieee_denormals" != no ; then AC_DEFINE(HAVE_IEEE_DENORMALS,1,[Define this if IEEE denormalized numbers are available]) fi AH_TEMPLATE([HIDE_INLINE_STATIC],[Define if you need to hide the static definitions of inline functions]) AH_BOTTOM([/* Use 0 and 1 for EXIT_SUCCESS and EXIT_FAILURE if we don't have them */ #if !HAVE_EXIT_SUCCESS_AND_FAILURE #define EXIT_SUCCESS 0 #define EXIT_FAILURE 1 #endif]) AH_BOTTOM([/* Define one of these if you have a known IEEE arithmetic interface */ #undef HAVE_GNUSPARC_IEEE_INTERFACE #undef HAVE_GNUM68K_IEEE_INTERFACE #undef HAVE_GNUPPC_IEEE_INTERFACE #undef HAVE_GNUX86_IEEE_INTERFACE #undef HAVE_SUNOS4_IEEE_INTERFACE #undef HAVE_SOLARIS_IEEE_INTERFACE #undef HAVE_HPUX11_IEEE_INTERFACE #undef HAVE_HPUX_IEEE_INTERFACE #undef HAVE_TRU64_IEEE_INTERFACE #undef HAVE_IRIX_IEEE_INTERFACE #undef HAVE_AIX_IEEE_INTERFACE #undef HAVE_FREEBSD_IEEE_INTERFACE #undef HAVE_OS2EMX_IEEE_INTERFACE #undef HAVE_NETBSD_IEEE_INTERFACE #undef HAVE_OPENBSD_IEEE_INTERFACE #undef HAVE_DARWIN_IEEE_INTERFACE #undef HAVE_DARWIN86_IEEE_INTERFACE]) AH_BOTTOM([/* Define a rounding function which moves extended precision values out of registers and rounds them to double-precision. This should be used *sparingly*, in places where it is necessary to keep double-precision rounding for critical expressions while running in extended precision. For example, the following code should ensure exact equality, even when extended precision registers are in use, double q = GSL_COERCE_DBL(3.0/7.0) ; if (q == GSL_COERCE_DBL(3.0/7.0)) { ... } ; It carries a penalty even when the program is running in double precision mode unless you compile a separate version of the library with HAVE_EXTENDED_PRECISION_REGISTERS turned off. */ #if HAVE_EXTENDED_PRECISION_REGISTERS #define GSL_COERCE_DBL(x) (gsl_coerce_double(x)) #else #define GSL_COERCE_DBL(x) (x) #endif]) AH_BOTTOM([/* Substitute gsl functions for missing system functions */ #if !HAVE_DECL_HYPOT #define hypot gsl_hypot #endif #if !HAVE_DECL_LOG1P #define log1p gsl_log1p #endif #if !HAVE_DECL_EXPM1 #define expm1 gsl_expm1 #endif #if !HAVE_DECL_ACOSH #define acosh gsl_acosh #endif #if !HAVE_DECL_ASINH #define asinh gsl_asinh #endif #if !HAVE_DECL_ATANH #define atanh gsl_atanh #endif #if !HAVE_DECL_LDEXP #define ldexp gsl_ldexp #endif #if !HAVE_DECL_FREXP #define frexp gsl_frexp #endif #if !HAVE_DECL_ISINF #define isinf gsl_isinf #endif #if !HAVE_DECL_ISFINITE #define isfinite gsl_finite #endif #if !HAVE_DECL_FINITE #define finite gsl_finite #endif #if !HAVE_DECL_ISNAN #define isnan gsl_isnan #endif]) AH_BOTTOM([#ifdef __GNUC__ #define DISCARD_POINTER(p) do { ; } while(p ? 0 : 0); #else #define DISCARD_POINTER(p) /* ignoring discarded pointer */ #endif]) AH_BOTTOM([#if defined(GSL_RANGE_CHECK_OFF) || !defined(GSL_RANGE_CHECK) #define GSL_RANGE_CHECK 0 /* turn off range checking by default internally */ #endif]) AH_BOTTOM([#define RETURN_IF_NULL(x) if (!x) { return ; } ]) AH_VERBATIM([GSL_DISABLE_DEPRECATED], [/* Disable deprecated functions and enums while building */ #undef GSL_DISABLE_DEPRECATED]) dnl AC_CONFIG_FILES([ \ Makefile \ gsl_version.h \ gsl.spec \ blas/Makefile \ block/Makefile \ bspline/Makefile \ bst/Makefile \ cblas/Makefile \ cdf/Makefile \ cheb/Makefile \ combination/Makefile \ complex/Makefile \ const/Makefile \ deriv/Makefile \ dht/Makefile \ diff/Makefile \ doc/Makefile \ doc/examples/Makefile \ eigen/Makefile \ err/Makefile \ fft/Makefile \ filter/Makefile \ fit/Makefile \ gsl/Makefile \ histogram/Makefile \ ieee-utils/Makefile \ integration/Makefile \ interpolation/Makefile \ linalg/Makefile \ matrix/Makefile \ min/Makefile \ monte/Makefile \ movstat/Makefile \ multifit/Makefile \ multifit_nlinear/Makefile \ multilarge/Makefile \ multilarge_nlinear/Makefile \ multimin/Makefile \ multiroots/Makefile \ multiset/Makefile \ ntuple/Makefile \ ode-initval/Makefile \ ode-initval2/Makefile \ permutation/Makefile \ poly/Makefile \ qrng/Makefile \ randist/Makefile \ rng/Makefile \ roots/Makefile \ rstat/Makefile \ siman/Makefile \ sort/Makefile \ spblas/Makefile \ splinalg/Makefile \ spmatrix/Makefile \ specfunc/Makefile \ statistics/Makefile \ sum/Makefile \ sys/Makefile \ test/Makefile \ utils/Makefile \ vector/Makefile \ wavelet/Makefile \ ]) AC_OUTPUT gsl/blas/0000755000175000017500000000000014057135461010644 5ustar eddeddgsl/blas/Makefile.in0000664000175000017500000005231014057135461012714 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = blas ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslblas_la_LIBADD = am_libgslblas_la_OBJECTS = blas.lo libgslblas_la_OBJECTS = $(am_libgslblas_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/blas.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslblas_la_SOURCES) DIST_SOURCES = $(libgslblas_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslblas.la pkginclude_HEADERS = gsl_blas.h gsl_blas_types.h AM_CPPFLAGS = -I$(top_srcdir) libgslblas_la_SOURCES = blas.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu blas/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu blas/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslblas.la: $(libgslblas_la_OBJECTS) $(libgslblas_la_DEPENDENCIES) $(EXTRA_libgslblas_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslblas_la_OBJECTS) $(libgslblas_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blas.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/blas.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/blas.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pkgincludeHEADERS install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-pkgincludeHEADERS .PRECIOUS: Makefile #check_PROGRAMS = test #TESTS = test #test_LDADD = libgslblas.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la #test_SOURCES = test_blas_raw.c test_cases.c test_cases.h # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/blas/gsl_blas_types.h0000644000175000017500000000305313536674414014037 0ustar eddedd/* blas/gsl_blas_types.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Author: G. Jungman */ /* Based on draft BLAST C interface specification [Jul 7 1998] */ #ifndef __GSL_BLAS_TYPES_H__ #define __GSL_BLAS_TYPES_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef CBLAS_INDEX CBLAS_INDEX_t; typedef enum CBLAS_ORDER CBLAS_ORDER_t; typedef enum CBLAS_TRANSPOSE CBLAS_TRANSPOSE_t; typedef enum CBLAS_UPLO CBLAS_UPLO_t; typedef enum CBLAS_DIAG CBLAS_DIAG_t; typedef enum CBLAS_SIDE CBLAS_SIDE_t; /* typedef gsl_complex COMPLEX; */ __END_DECLS #endif /* __GSL_BLAS_TYPES_H__ */ gsl/blas/ChangeLog0000644000175000017500000000467413536674414012440 0ustar eddedd2009-04-30 Brian Gough * blas.c (gsl_blas_drotm): fix incorrect length check 2005-04-05 Brian Gough * blas.c (gsl_blas_ssyrk): test conformance against size correctly allowing for transpose 2004-12-21 Brian Gough * blas.c (gsl_blas_ssyrk): corrected K to be A->size2 instead of A->size1 (gsl_blas_dsyrk): as above (gsl_blas_csyrk): as above (gsl_blas_zsyrk): as above (gsl_blas_cherk): as above (gsl_blas_zherk): as above Mon Mar 18 19:39:34 2002 Brian Gough * blas.c (gsl_blas_zgemv): added missing case of CblasConjTrans to zgemv and cgemv Mon Feb 18 20:01:49 2002 Brian Gough * gsl_blas_types.h: removed unneeded header files Sat Apr 28 15:25:16 2001 Brian Gough * blas.c: cast size_t to int for calls to CBLAS Mon Mar 19 17:04:47 2001 Brian Gough * split cblas routines out into a separate directory and library which can be used as a cblas outside gsl Tue Sep 19 19:07:44 2000 Brian Gough * test_blas_raw.c: added tests for dtbsv Sat Sep 16 20:27:18 2000 Brian Gough * blas.c: use GSL_ERROR macro to signal errors Fri Sep 15 20:04:28 2000 Brian Gough * source_iamax_r.h source_iamax_c.h: initialize max index to zero before loop, so that the result is defined for a null vector Mon May 22 12:27:47 2000 Brian Gough * Makefile.am (lib_LTLIBRARIES): renamed libgslblasnative.la to libgslblas.la since "native" is ambiguous (suggests system-supplied blas). * test_blas_raw.c (test_L1): added test to cover for initial run-in of odd lengths on loop unrolling in saxpy. Tue Mar 21 14:22:30 2000 Brian Gough * test_blas_raw.c (test_L1): test norms for zero vectors * source_nrm2_r.h, source_nrm2_r.h: skip zero elements of array, as in original BLAS, fixes bug for vectors with leading zeros. Tue Mar 7 19:05:43 2000 Brian Gough * Makefile.am (noinst_LTLIBRARIES): with libtool blasnative and blascblas layers need to be installed as additional libraries, not in libgsl.a. Fri Oct 1 15:50:14 1999 Brian Gough * blas.c: make use of "trailing dimension" in matrix struct to support LDA arguments for level 2 BLAS. gsl/blas/Makefile.am0000644000175000017500000000056213536674414012712 0ustar eddeddnoinst_LTLIBRARIES = libgslblas.la pkginclude_HEADERS = gsl_blas.h gsl_blas_types.h AM_CPPFLAGS = -I$(top_srcdir) libgslblas_la_SOURCES = blas.c #check_PROGRAMS = test #TESTS = test #test_LDADD = libgslblas.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la #test_SOURCES = test_blas_raw.c test_cases.c test_cases.h gsl/blas/blas.c0000644000175000017500000016000213536674414011737 0ustar eddedd/* blas/blas.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2009 Gerard Jungman & Brian * Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* GSL implementation of BLAS operations for vectors and dense * matrices. Note that GSL native storage is row-major. */ #include #include #include #include #include #include #include /* ======================================================================== * Level 1 * ======================================================================== */ /* CBLAS defines vector sizes in terms of int. GSL defines sizes in terms of size_t, so we need to convert these into integers. There is the possibility of overflow here. FIXME: Maybe this could be caught */ #define INT(X) ((int)(X)) int gsl_blas_sdsdot (float alpha, const gsl_vector_float * X, const gsl_vector_float * Y, float *result) { if (X->size == Y->size) { *result = cblas_sdsdot (INT (X->size), alpha, X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_dsdot (const gsl_vector_float * X, const gsl_vector_float * Y, double *result) { if (X->size == Y->size) { *result = cblas_dsdot (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_sdot (const gsl_vector_float * X, const gsl_vector_float * Y, float *result) { if (X->size == Y->size) { *result = cblas_sdot (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_ddot (const gsl_vector * X, const gsl_vector * Y, double *result) { if (X->size == Y->size) { *result = cblas_ddot (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_cdotu (const gsl_vector_complex_float * X, const gsl_vector_complex_float * Y, gsl_complex_float * dotu) { if (X->size == Y->size) { cblas_cdotu_sub (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride), GSL_COMPLEX_P (dotu)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_cdotc (const gsl_vector_complex_float * X, const gsl_vector_complex_float * Y, gsl_complex_float * dotc) { if (X->size == Y->size) { cblas_cdotc_sub (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride), GSL_COMPLEX_P (dotc)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_zdotu (const gsl_vector_complex * X, const gsl_vector_complex * Y, gsl_complex * dotu) { if (X->size == Y->size) { cblas_zdotu_sub (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride), GSL_COMPLEX_P (dotu)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_zdotc (const gsl_vector_complex * X, const gsl_vector_complex * Y, gsl_complex * dotc) { if (X->size == Y->size) { cblas_zdotc_sub (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride), GSL_COMPLEX_P (dotc)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } /* Norms of vectors */ float gsl_blas_snrm2 (const gsl_vector_float * X) { return cblas_snrm2 (INT (X->size), X->data, INT (X->stride)); } double gsl_blas_dnrm2 (const gsl_vector * X) { return cblas_dnrm2 (INT (X->size), X->data, INT (X->stride)); } float gsl_blas_scnrm2 (const gsl_vector_complex_float * X) { return cblas_scnrm2 (INT (X->size), X->data, INT (X->stride)); } double gsl_blas_dznrm2 (const gsl_vector_complex * X) { return cblas_dznrm2 (INT (X->size), X->data, INT (X->stride)); } /* Absolute sums of vectors */ float gsl_blas_sasum (const gsl_vector_float * X) { return cblas_sasum (INT (X->size), X->data, INT (X->stride)); } double gsl_blas_dasum (const gsl_vector * X) { return cblas_dasum (INT (X->size), X->data, INT (X->stride)); } float gsl_blas_scasum (const gsl_vector_complex_float * X) { return cblas_scasum (INT (X->size), X->data, INT (X->stride)); } double gsl_blas_dzasum (const gsl_vector_complex * X) { return cblas_dzasum (INT (X->size), X->data, INT (X->stride)); } /* Maximum elements of vectors */ CBLAS_INDEX_t gsl_blas_isamax (const gsl_vector_float * X) { return cblas_isamax (INT (X->size), X->data, INT (X->stride)); } CBLAS_INDEX_t gsl_blas_idamax (const gsl_vector * X) { return cblas_idamax (INT (X->size), X->data, INT (X->stride)); } CBLAS_INDEX_t gsl_blas_icamax (const gsl_vector_complex_float * X) { return cblas_icamax (INT (X->size), X->data, INT (X->stride)); } CBLAS_INDEX_t gsl_blas_izamax (const gsl_vector_complex * X) { return cblas_izamax (INT (X->size), X->data, INT (X->stride)); } /* Swap vectors */ int gsl_blas_sswap (gsl_vector_float * X, gsl_vector_float * Y) { if (X->size == Y->size) { cblas_sswap (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_dswap (gsl_vector * X, gsl_vector * Y) { if (X->size == Y->size) { cblas_dswap (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); }; } int gsl_blas_cswap (gsl_vector_complex_float * X, gsl_vector_complex_float * Y) { if (X->size == Y->size) { cblas_cswap (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_zswap (gsl_vector_complex * X, gsl_vector_complex * Y) { if (X->size == Y->size) { cblas_zswap (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } /* Copy vectors */ int gsl_blas_scopy (const gsl_vector_float * X, gsl_vector_float * Y) { if (X->size == Y->size) { cblas_scopy (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_dcopy (const gsl_vector * X, gsl_vector * Y) { if (X->size == Y->size) { cblas_dcopy (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_ccopy (const gsl_vector_complex_float * X, gsl_vector_complex_float * Y) { if (X->size == Y->size) { cblas_ccopy (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_zcopy (const gsl_vector_complex * X, gsl_vector_complex * Y) { if (X->size == Y->size) { cblas_zcopy (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } /* Compute Y = alpha X + Y */ int gsl_blas_saxpy (float alpha, const gsl_vector_float * X, gsl_vector_float * Y) { if (X->size == Y->size) { cblas_saxpy (INT (X->size), alpha, X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_daxpy (double alpha, const gsl_vector * X, gsl_vector * Y) { if (X->size == Y->size) { cblas_daxpy (INT (X->size), alpha, X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_caxpy (const gsl_complex_float alpha, const gsl_vector_complex_float * X, gsl_vector_complex_float * Y) { if (X->size == Y->size) { cblas_caxpy (INT (X->size), GSL_COMPLEX_P (&alpha), X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_zaxpy (const gsl_complex alpha, const gsl_vector_complex * X, gsl_vector_complex * Y) { if (X->size == Y->size) { cblas_zaxpy (INT (X->size), GSL_COMPLEX_P (&alpha), X->data, INT (X->stride), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } /* Generate rotation */ int gsl_blas_srotg (float a[], float b[], float c[], float s[]) { cblas_srotg (a, b, c, s); return GSL_SUCCESS; } int gsl_blas_drotg (double a[], double b[], double c[], double s[]) { cblas_drotg (a, b, c, s); return GSL_SUCCESS; } /* Apply rotation to vectors */ int gsl_blas_srot (gsl_vector_float * X, gsl_vector_float * Y, float c, float s) { if (X->size == Y->size) { cblas_srot (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride), c, s); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_drot (gsl_vector * X, gsl_vector * Y, const double c, const double s) { if (X->size == Y->size) { cblas_drot (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride), c, s); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } /* Generate modified rotation */ int gsl_blas_srotmg (float d1[], float d2[], float b1[], float b2, float P[]) { cblas_srotmg (d1, d2, b1, b2, P); return GSL_SUCCESS; } int gsl_blas_drotmg (double d1[], double d2[], double b1[], double b2, double P[]) { cblas_drotmg (d1, d2, b1, b2, P); return GSL_SUCCESS; } /* Apply modified rotation */ int gsl_blas_srotm (gsl_vector_float * X, gsl_vector_float * Y, const float P[]) { if (X->size == Y->size) { cblas_srotm (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride), P); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_drotm (gsl_vector * X, gsl_vector * Y, const double P[]) { if (X->size == Y->size) { cblas_drotm (INT (X->size), X->data, INT (X->stride), Y->data, INT (Y->stride), P); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } /* Scale vector */ void gsl_blas_sscal (float alpha, gsl_vector_float * X) { cblas_sscal (INT (X->size), alpha, X->data, INT (X->stride)); } void gsl_blas_dscal (double alpha, gsl_vector * X) { cblas_dscal (INT (X->size), alpha, X->data, INT (X->stride)); } void gsl_blas_cscal (const gsl_complex_float alpha, gsl_vector_complex_float * X) { cblas_cscal (INT (X->size), GSL_COMPLEX_P (&alpha), X->data, INT (X->stride)); } void gsl_blas_zscal (const gsl_complex alpha, gsl_vector_complex * X) { cblas_zscal (INT (X->size), GSL_COMPLEX_P (&alpha), X->data, INT (X->stride)); } void gsl_blas_csscal (float alpha, gsl_vector_complex_float * X) { cblas_csscal (INT (X->size), alpha, X->data, INT (X->stride)); } void gsl_blas_zdscal (double alpha, gsl_vector_complex * X) { cblas_zdscal (INT (X->size), alpha, X->data, INT (X->stride)); } /* =========================================================================== * Level 2 * =========================================================================== */ /* GEMV */ int gsl_blas_sgemv (CBLAS_TRANSPOSE_t TransA, float alpha, const gsl_matrix_float * A, const gsl_vector_float * X, float beta, gsl_vector_float * Y) { const size_t M = A->size1; const size_t N = A->size2; if ((TransA == CblasNoTrans && N == X->size && M == Y->size) || (TransA == CblasTrans && M == X->size && N == Y->size)) { cblas_sgemv (CblasRowMajor, TransA, INT (M), INT (N), alpha, A->data, INT (A->tda), X->data, INT (X->stride), beta, Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_dgemv (CBLAS_TRANSPOSE_t TransA, double alpha, const gsl_matrix * A, const gsl_vector * X, double beta, gsl_vector * Y) { const size_t M = A->size1; const size_t N = A->size2; if ((TransA == CblasNoTrans && N == X->size && M == Y->size) || (TransA == CblasTrans && M == X->size && N == Y->size)) { cblas_dgemv (CblasRowMajor, TransA, INT (M), INT (N), alpha, A->data, INT (A->tda), X->data, INT (X->stride), beta, Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_cgemv (CBLAS_TRANSPOSE_t TransA, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_vector_complex_float * X, const gsl_complex_float beta, gsl_vector_complex_float * Y) { const size_t M = A->size1; const size_t N = A->size2; if ((TransA == CblasNoTrans && N == X->size && M == Y->size) || (TransA == CblasTrans && M == X->size && N == Y->size) || (TransA == CblasConjTrans && M == X->size && N == Y->size)) { cblas_cgemv (CblasRowMajor, TransA, INT (M), INT (N), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), X->data, INT (X->stride), GSL_COMPLEX_P (&beta), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_zgemv (CBLAS_TRANSPOSE_t TransA, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_vector_complex * X, const gsl_complex beta, gsl_vector_complex * Y) { const size_t M = A->size1; const size_t N = A->size2; if ((TransA == CblasNoTrans && N == X->size && M == Y->size) || (TransA == CblasTrans && M == X->size && N == Y->size) || (TransA == CblasConjTrans && M == X->size && N == Y->size)) { cblas_zgemv (CblasRowMajor, TransA, INT (M), INT (N), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), X->data, INT (X->stride), GSL_COMPLEX_P (&beta), Y->data, INT (Y->stride)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } /* HEMV */ int gsl_blas_chemv (CBLAS_UPLO_t Uplo, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_vector_complex_float * X, const gsl_complex_float beta, gsl_vector_complex_float * Y) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (N != X->size || N != Y->size) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_chemv (CblasRowMajor, Uplo, INT (N), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), X->data, INT (X->stride), GSL_COMPLEX_P (&beta), Y->data, INT (Y->stride)); return GSL_SUCCESS; } int gsl_blas_zhemv (CBLAS_UPLO_t Uplo, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_vector_complex * X, const gsl_complex beta, gsl_vector_complex * Y) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (N != X->size || N != Y->size) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_zhemv (CblasRowMajor, Uplo, INT (N), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), X->data, INT (X->stride), GSL_COMPLEX_P (&beta), Y->data, INT (Y->stride)); return GSL_SUCCESS; } /* SYMV */ int gsl_blas_ssymv (CBLAS_UPLO_t Uplo, float alpha, const gsl_matrix_float * A, const gsl_vector_float * X, float beta, gsl_vector_float * Y) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (N != X->size || N != Y->size) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_ssymv (CblasRowMajor, Uplo, INT (N), alpha, A->data, INT (A->tda), X->data, INT (X->stride), beta, Y->data, INT (Y->stride)); return GSL_SUCCESS; } int gsl_blas_dsymv (CBLAS_UPLO_t Uplo, double alpha, const gsl_matrix * A, const gsl_vector * X, double beta, gsl_vector * Y) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (N != X->size || N != Y->size) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_dsymv (CblasRowMajor, Uplo, INT (N), alpha, A->data, INT (A->tda), X->data, INT (X->stride), beta, Y->data, INT (Y->stride)); return GSL_SUCCESS; } /* TRMV */ int gsl_blas_strmv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix_float * A, gsl_vector_float * X) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (N != X->size) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_strmv (CblasRowMajor, Uplo, TransA, Diag, INT (N), A->data, INT (A->tda), X->data, INT (X->stride)); return GSL_SUCCESS; } int gsl_blas_dtrmv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix * A, gsl_vector * X) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (N != X->size) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_dtrmv (CblasRowMajor, Uplo, TransA, Diag, INT (N), A->data, INT (A->tda), X->data, INT (X->stride)); return GSL_SUCCESS; } int gsl_blas_ctrmv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix_complex_float * A, gsl_vector_complex_float * X) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (N != X->size) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_ctrmv (CblasRowMajor, Uplo, TransA, Diag, INT (N), A->data, INT (A->tda), X->data, INT (X->stride)); return GSL_SUCCESS; } int gsl_blas_ztrmv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix_complex * A, gsl_vector_complex * X) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (N != X->size) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_ztrmv (CblasRowMajor, Uplo, TransA, Diag, INT (N), A->data, INT (A->tda), X->data, INT (X->stride)); return GSL_SUCCESS; } /* TRSV */ int gsl_blas_strsv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix_float * A, gsl_vector_float * X) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (N != X->size) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_strsv (CblasRowMajor, Uplo, TransA, Diag, INT (N), A->data, INT (A->tda), X->data, INT (X->stride)); return GSL_SUCCESS; } int gsl_blas_dtrsv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix * A, gsl_vector * X) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (N != X->size) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_dtrsv (CblasRowMajor, Uplo, TransA, Diag, INT (N), A->data, INT (A->tda), X->data, INT (X->stride)); return GSL_SUCCESS; } int gsl_blas_ctrsv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix_complex_float * A, gsl_vector_complex_float * X) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (N != X->size) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_ctrsv (CblasRowMajor, Uplo, TransA, Diag, INT (N), A->data, INT (A->tda), X->data, INT (X->stride)); return GSL_SUCCESS; } int gsl_blas_ztrsv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix_complex * A, gsl_vector_complex * X) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (N != X->size) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_ztrsv (CblasRowMajor, Uplo, TransA, Diag, INT (N), A->data, INT (A->tda), X->data, INT (X->stride)); return GSL_SUCCESS; } /* GER */ int gsl_blas_sger (float alpha, const gsl_vector_float * X, const gsl_vector_float * Y, gsl_matrix_float * A) { const size_t M = A->size1; const size_t N = A->size2; if (X->size == M && Y->size == N) { cblas_sger (CblasRowMajor, INT (M), INT (N), alpha, X->data, INT (X->stride), Y->data, INT (Y->stride), A->data, INT (A->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_dger (double alpha, const gsl_vector * X, const gsl_vector * Y, gsl_matrix * A) { const size_t M = A->size1; const size_t N = A->size2; if (X->size == M && Y->size == N) { cblas_dger (CblasRowMajor, INT (M), INT (N), alpha, X->data, INT (X->stride), Y->data, INT (Y->stride), A->data, INT (A->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } /* GERU */ int gsl_blas_cgeru (const gsl_complex_float alpha, const gsl_vector_complex_float * X, const gsl_vector_complex_float * Y, gsl_matrix_complex_float * A) { const size_t M = A->size1; const size_t N = A->size2; if (X->size == M && Y->size == N) { cblas_cgeru (CblasRowMajor, INT (M), INT (N), GSL_COMPLEX_P (&alpha), X->data, INT (X->stride), Y->data, INT (Y->stride), A->data, INT (A->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_zgeru (const gsl_complex alpha, const gsl_vector_complex * X, const gsl_vector_complex * Y, gsl_matrix_complex * A) { const size_t M = A->size1; const size_t N = A->size2; if (X->size == M && Y->size == N) { cblas_zgeru (CblasRowMajor, INT (M), INT (N), GSL_COMPLEX_P (&alpha), X->data, INT (X->stride), Y->data, INT (Y->stride), A->data, INT (A->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } /* GERC */ int gsl_blas_cgerc (const gsl_complex_float alpha, const gsl_vector_complex_float * X, const gsl_vector_complex_float * Y, gsl_matrix_complex_float * A) { const size_t M = A->size1; const size_t N = A->size2; if (X->size == M && Y->size == N) { cblas_cgerc (CblasRowMajor, INT (M), INT (N), GSL_COMPLEX_P (&alpha), X->data, INT (X->stride), Y->data, INT (Y->stride), A->data, INT (A->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_zgerc (const gsl_complex alpha, const gsl_vector_complex * X, const gsl_vector_complex * Y, gsl_matrix_complex * A) { const size_t M = A->size1; const size_t N = A->size2; if (X->size == M && Y->size == N) { cblas_zgerc (CblasRowMajor, INT (M), INT (N), GSL_COMPLEX_P (&alpha), X->data, INT (X->stride), Y->data, INT (Y->stride), A->data, INT (A->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } /* HER */ int gsl_blas_cher (CBLAS_UPLO_t Uplo, float alpha, const gsl_vector_complex_float * X, gsl_matrix_complex_float * A) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (X->size != N) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_cher (CblasRowMajor, Uplo, INT (M), alpha, X->data, INT (X->stride), A->data, INT (A->tda)); return GSL_SUCCESS; } int gsl_blas_zher (CBLAS_UPLO_t Uplo, double alpha, const gsl_vector_complex * X, gsl_matrix_complex * A) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (X->size != N) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_zher (CblasRowMajor, Uplo, INT (N), alpha, X->data, INT (X->stride), A->data, INT (A->tda)); return GSL_SUCCESS; } /* HER2 */ int gsl_blas_cher2 (CBLAS_UPLO_t Uplo, const gsl_complex_float alpha, const gsl_vector_complex_float * X, const gsl_vector_complex_float * Y, gsl_matrix_complex_float * A) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (X->size != N || Y->size != N) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_cher2 (CblasRowMajor, Uplo, INT (N), GSL_COMPLEX_P (&alpha), X->data, INT (X->stride), Y->data, INT (Y->stride), A->data, INT (A->tda)); return GSL_SUCCESS; } int gsl_blas_zher2 (CBLAS_UPLO_t Uplo, const gsl_complex alpha, const gsl_vector_complex * X, const gsl_vector_complex * Y, gsl_matrix_complex * A) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (X->size != N || Y->size != N) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_zher2 (CblasRowMajor, Uplo, INT (N), GSL_COMPLEX_P (&alpha), X->data, INT (X->stride), Y->data, INT (Y->stride), A->data, INT (A->tda)); return GSL_SUCCESS; } /* SYR */ int gsl_blas_ssyr (CBLAS_UPLO_t Uplo, float alpha, const gsl_vector_float * X, gsl_matrix_float * A) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (X->size != N) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_ssyr (CblasRowMajor, Uplo, INT (N), alpha, X->data, INT (X->stride), A->data, INT (A->tda)); return GSL_SUCCESS; } int gsl_blas_dsyr (CBLAS_UPLO_t Uplo, double alpha, const gsl_vector * X, gsl_matrix * A) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (X->size != N) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_dsyr (CblasRowMajor, Uplo, INT (N), alpha, X->data, INT (X->stride), A->data, INT (A->tda)); return GSL_SUCCESS; } /* SYR2 */ int gsl_blas_ssyr2 (CBLAS_UPLO_t Uplo, float alpha, const gsl_vector_float * X, const gsl_vector_float * Y, gsl_matrix_float * A) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (X->size != N || Y->size != N) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_ssyr2 (CblasRowMajor, Uplo, INT (N), alpha, X->data, INT (X->stride), Y->data, INT (Y->stride), A->data, INT (A->tda)); return GSL_SUCCESS; } int gsl_blas_dsyr2 (CBLAS_UPLO_t Uplo, double alpha, const gsl_vector * X, const gsl_vector * Y, gsl_matrix * A) { const size_t M = A->size1; const size_t N = A->size2; if (M != N) { GSL_ERROR ("matrix must be square", GSL_ENOTSQR); } else if (X->size != N || Y->size != N) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_dsyr2 (CblasRowMajor, Uplo, INT (N), alpha, X->data, INT (X->stride), Y->data, INT (Y->stride), A->data, INT (A->tda)); return GSL_SUCCESS; } /* * =========================================================================== * Prototypes for level 3 BLAS * =========================================================================== */ /* GEMM */ int gsl_blas_sgemm (CBLAS_TRANSPOSE_t TransA, CBLAS_TRANSPOSE_t TransB, float alpha, const gsl_matrix_float * A, const gsl_matrix_float * B, float beta, gsl_matrix_float * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = (TransA == CblasNoTrans) ? A->size1 : A->size2; const size_t NA = (TransA == CblasNoTrans) ? A->size2 : A->size1; const size_t MB = (TransB == CblasNoTrans) ? B->size1 : B->size2; const size_t NB = (TransB == CblasNoTrans) ? B->size2 : B->size1; if (M == MA && N == NB && NA == MB) /* [MxN] = [MAxNA][MBxNB] */ { cblas_sgemm (CblasRowMajor, TransA, TransB, INT (M), INT (N), INT (NA), alpha, A->data, INT (A->tda), B->data, INT (B->tda), beta, C->data, INT (C->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_dgemm (CBLAS_TRANSPOSE_t TransA, CBLAS_TRANSPOSE_t TransB, double alpha, const gsl_matrix * A, const gsl_matrix * B, double beta, gsl_matrix * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = (TransA == CblasNoTrans) ? A->size1 : A->size2; const size_t NA = (TransA == CblasNoTrans) ? A->size2 : A->size1; const size_t MB = (TransB == CblasNoTrans) ? B->size1 : B->size2; const size_t NB = (TransB == CblasNoTrans) ? B->size2 : B->size1; if (M == MA && N == NB && NA == MB) /* [MxN] = [MAxNA][MBxNB] */ { cblas_dgemm (CblasRowMajor, TransA, TransB, INT (M), INT (N), INT (NA), alpha, A->data, INT (A->tda), B->data, INT (B->tda), beta, C->data, INT (C->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_cgemm (CBLAS_TRANSPOSE_t TransA, CBLAS_TRANSPOSE_t TransB, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_matrix_complex_float * B, const gsl_complex_float beta, gsl_matrix_complex_float * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = (TransA == CblasNoTrans) ? A->size1 : A->size2; const size_t NA = (TransA == CblasNoTrans) ? A->size2 : A->size1; const size_t MB = (TransB == CblasNoTrans) ? B->size1 : B->size2; const size_t NB = (TransB == CblasNoTrans) ? B->size2 : B->size1; if (M == MA && N == NB && NA == MB) /* [MxN] = [MAxNA][MBxNB] */ { cblas_cgemm (CblasRowMajor, TransA, TransB, INT (M), INT (N), INT (NA), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), B->data, INT (B->tda), GSL_COMPLEX_P (&beta), C->data, INT (C->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_zgemm (CBLAS_TRANSPOSE_t TransA, CBLAS_TRANSPOSE_t TransB, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_matrix_complex * B, const gsl_complex beta, gsl_matrix_complex * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = (TransA == CblasNoTrans) ? A->size1 : A->size2; const size_t NA = (TransA == CblasNoTrans) ? A->size2 : A->size1; const size_t MB = (TransB == CblasNoTrans) ? B->size1 : B->size2; const size_t NB = (TransB == CblasNoTrans) ? B->size2 : B->size1; if (M == MA && N == NB && NA == MB) /* [MxN] = [MAxNA][MBxNB] */ { cblas_zgemm (CblasRowMajor, TransA, TransB, INT (M), INT (N), INT (NA), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), B->data, INT (B->tda), GSL_COMPLEX_P (&beta), C->data, INT (C->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } /* SYMM */ int gsl_blas_ssymm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, float alpha, const gsl_matrix_float * A, const gsl_matrix_float * B, float beta, gsl_matrix_float * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = A->size1; const size_t NA = A->size2; const size_t MB = B->size1; const size_t NB = B->size2; if (MA != NA) { GSL_ERROR ("matrix A must be square", GSL_ENOTSQR); } if ((Side == CblasLeft && (M == MA && N == NB && NA == MB)) || (Side == CblasRight && (M == MB && N == NA && NB == MA))) { cblas_ssymm (CblasRowMajor, Side, Uplo, INT (M), INT (N), alpha, A->data, INT (A->tda), B->data, INT (B->tda), beta, C->data, INT (C->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_dsymm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, double alpha, const gsl_matrix * A, const gsl_matrix * B, double beta, gsl_matrix * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = A->size1; const size_t NA = A->size2; const size_t MB = B->size1; const size_t NB = B->size2; if (MA != NA) { GSL_ERROR ("matrix A must be square", GSL_ENOTSQR); } if ((Side == CblasLeft && (M == MA && N == NB && NA == MB)) || (Side == CblasRight && (M == MB && N == NA && NB == MA))) { cblas_dsymm (CblasRowMajor, Side, Uplo, INT (M), INT (N), alpha, A->data, INT (A->tda), B->data, INT (B->tda), beta, C->data, INT (C->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_csymm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_matrix_complex_float * B, const gsl_complex_float beta, gsl_matrix_complex_float * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = A->size1; const size_t NA = A->size2; const size_t MB = B->size1; const size_t NB = B->size2; if (MA != NA) { GSL_ERROR ("matrix A must be square", GSL_ENOTSQR); } if ((Side == CblasLeft && (M == MA && N == NB && NA == MB)) || (Side == CblasRight && (M == MB && N == NA && NB == MA))) { cblas_csymm (CblasRowMajor, Side, Uplo, INT (M), INT (N), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), B->data, INT (B->tda), GSL_COMPLEX_P (&beta), C->data, INT (C->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_zsymm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_matrix_complex * B, const gsl_complex beta, gsl_matrix_complex * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = A->size1; const size_t NA = A->size2; const size_t MB = B->size1; const size_t NB = B->size2; if (MA != NA) { GSL_ERROR ("matrix A must be square", GSL_ENOTSQR); } if ((Side == CblasLeft && (M == MA && N == NB && NA == MB)) || (Side == CblasRight && (M == MB && N == NA && NB == MA))) { cblas_zsymm (CblasRowMajor, Side, Uplo, INT (M), INT (N), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), B->data, INT (B->tda), GSL_COMPLEX_P (&beta), C->data, INT (C->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } /* HEMM */ int gsl_blas_chemm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_matrix_complex_float * B, const gsl_complex_float beta, gsl_matrix_complex_float * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = A->size1; const size_t NA = A->size2; const size_t MB = B->size1; const size_t NB = B->size2; if (MA != NA) { GSL_ERROR ("matrix A must be square", GSL_ENOTSQR); } if ((Side == CblasLeft && (M == MA && N == NB && NA == MB)) || (Side == CblasRight && (M == MB && N == NA && NB == MA))) { cblas_chemm (CblasRowMajor, Side, Uplo, INT (M), INT (N), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), B->data, INT (B->tda), GSL_COMPLEX_P (&beta), C->data, INT (C->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_zhemm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_matrix_complex * B, const gsl_complex beta, gsl_matrix_complex * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = A->size1; const size_t NA = A->size2; const size_t MB = B->size1; const size_t NB = B->size2; if (MA != NA) { GSL_ERROR ("matrix A must be square", GSL_ENOTSQR); } if ((Side == CblasLeft && (M == MA && N == NB && NA == MB)) || (Side == CblasRight && (M == MB && N == NA && NB == MA))) { cblas_zhemm (CblasRowMajor, Side, Uplo, INT (M), INT (N), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), B->data, INT (B->tda), GSL_COMPLEX_P (&beta), C->data, INT (C->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } /* SYRK */ int gsl_blas_ssyrk (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, float alpha, const gsl_matrix_float * A, float beta, gsl_matrix_float * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t J = (Trans == CblasNoTrans) ? A->size1 : A->size2; const size_t K = (Trans == CblasNoTrans) ? A->size2 : A->size1; if (M != N) { GSL_ERROR ("matrix C must be square", GSL_ENOTSQR); } else if (N != J) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_ssyrk (CblasRowMajor, Uplo, Trans, INT (N), INT (K), alpha, A->data, INT (A->tda), beta, C->data, INT (C->tda)); return GSL_SUCCESS; } int gsl_blas_dsyrk (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, double alpha, const gsl_matrix * A, double beta, gsl_matrix * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t J = (Trans == CblasNoTrans) ? A->size1 : A->size2; const size_t K = (Trans == CblasNoTrans) ? A->size2 : A->size1; if (M != N) { GSL_ERROR ("matrix C must be square", GSL_ENOTSQR); } else if (N != J) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_dsyrk (CblasRowMajor, Uplo, Trans, INT (N), INT (K), alpha, A->data, INT (A->tda), beta, C->data, INT (C->tda)); return GSL_SUCCESS; } int gsl_blas_csyrk (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_complex_float beta, gsl_matrix_complex_float * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t J = (Trans == CblasNoTrans) ? A->size1 : A->size2; const size_t K = (Trans == CblasNoTrans) ? A->size2 : A->size1; if (M != N) { GSL_ERROR ("matrix C must be square", GSL_ENOTSQR); } else if (N != J) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_csyrk (CblasRowMajor, Uplo, Trans, INT (N), INT (K), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), GSL_COMPLEX_P (&beta), C->data, INT (C->tda)); return GSL_SUCCESS; } int gsl_blas_zsyrk (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_complex beta, gsl_matrix_complex * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t J = (Trans == CblasNoTrans) ? A->size1 : A->size2; const size_t K = (Trans == CblasNoTrans) ? A->size2 : A->size1; if (M != N) { GSL_ERROR ("matrix C must be square", GSL_ENOTSQR); } else if (N != J) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_zsyrk (CblasRowMajor, Uplo, Trans, INT (N), INT (K), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), GSL_COMPLEX_P (&beta), C->data, INT (C->tda)); return GSL_SUCCESS; } /* HERK */ int gsl_blas_cherk (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, float alpha, const gsl_matrix_complex_float * A, float beta, gsl_matrix_complex_float * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t J = (Trans == CblasNoTrans) ? A->size1 : A->size2; const size_t K = (Trans == CblasNoTrans) ? A->size2 : A->size1; if (M != N) { GSL_ERROR ("matrix C must be square", GSL_ENOTSQR); } else if (N != J) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_cherk (CblasRowMajor, Uplo, Trans, INT (N), INT (K), alpha, A->data, INT (A->tda), beta, C->data, INT (C->tda)); return GSL_SUCCESS; } int gsl_blas_zherk (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, double alpha, const gsl_matrix_complex * A, double beta, gsl_matrix_complex * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t J = (Trans == CblasNoTrans) ? A->size1 : A->size2; const size_t K = (Trans == CblasNoTrans) ? A->size2 : A->size1; if (M != N) { GSL_ERROR ("matrix C must be square", GSL_ENOTSQR); } else if (N != J) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_zherk (CblasRowMajor, Uplo, Trans, INT (N), INT (K), alpha, A->data, INT (A->tda), beta, C->data, INT (C->tda)); return GSL_SUCCESS; } /* SYR2K */ int gsl_blas_ssyr2k (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, float alpha, const gsl_matrix_float * A, const gsl_matrix_float * B, float beta, gsl_matrix_float * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = (Trans == CblasNoTrans) ? A->size1 : A->size2; const size_t NA = (Trans == CblasNoTrans) ? A->size2 : A->size1; const size_t MB = (Trans == CblasNoTrans) ? B->size1 : B->size2; const size_t NB = (Trans == CblasNoTrans) ? B->size2 : B->size1; if (M != N) { GSL_ERROR ("matrix C must be square", GSL_ENOTSQR); } else if (N != MA || N != MB || NA != NB) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_ssyr2k (CblasRowMajor, Uplo, Trans, INT (N), INT (NA), alpha, A->data, INT (A->tda), B->data, INT (B->tda), beta, C->data, INT (C->tda)); return GSL_SUCCESS; } int gsl_blas_dsyr2k (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, double alpha, const gsl_matrix * A, const gsl_matrix * B, double beta, gsl_matrix * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = (Trans == CblasNoTrans) ? A->size1 : A->size2; const size_t NA = (Trans == CblasNoTrans) ? A->size2 : A->size1; const size_t MB = (Trans == CblasNoTrans) ? B->size1 : B->size2; const size_t NB = (Trans == CblasNoTrans) ? B->size2 : B->size1; if (M != N) { GSL_ERROR ("matrix C must be square", GSL_ENOTSQR); } else if (N != MA || N != MB || NA != NB) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_dsyr2k (CblasRowMajor, Uplo, Trans, INT (N), INT (NA), alpha, A->data, INT (A->tda), B->data, INT (B->tda), beta, C->data, INT (C->tda)); return GSL_SUCCESS; } int gsl_blas_csyr2k (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_matrix_complex_float * B, const gsl_complex_float beta, gsl_matrix_complex_float * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = (Trans == CblasNoTrans) ? A->size1 : A->size2; const size_t NA = (Trans == CblasNoTrans) ? A->size2 : A->size1; const size_t MB = (Trans == CblasNoTrans) ? B->size1 : B->size2; const size_t NB = (Trans == CblasNoTrans) ? B->size2 : B->size1; if (M != N) { GSL_ERROR ("matrix C must be square", GSL_ENOTSQR); } else if (N != MA || N != MB || NA != NB) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_csyr2k (CblasRowMajor, Uplo, Trans, INT (N), INT (NA), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), B->data, INT (B->tda), GSL_COMPLEX_P (&beta), C->data, INT (C->tda)); return GSL_SUCCESS; } int gsl_blas_zsyr2k (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_matrix_complex * B, const gsl_complex beta, gsl_matrix_complex * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = (Trans == CblasNoTrans) ? A->size1 : A->size2; const size_t NA = (Trans == CblasNoTrans) ? A->size2 : A->size1; const size_t MB = (Trans == CblasNoTrans) ? B->size1 : B->size2; const size_t NB = (Trans == CblasNoTrans) ? B->size2 : B->size1; if (M != N) { GSL_ERROR ("matrix C must be square", GSL_ENOTSQR); } else if (N != MA || N != MB || NA != NB) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_zsyr2k (CblasRowMajor, Uplo, Trans, INT (N), INT (NA), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), B->data, INT (B->tda), GSL_COMPLEX_P (&beta), C->data, INT (C->tda)); return GSL_SUCCESS; } /* HER2K */ int gsl_blas_cher2k (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_matrix_complex_float * B, float beta, gsl_matrix_complex_float * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = (Trans == CblasNoTrans) ? A->size1 : A->size2; const size_t NA = (Trans == CblasNoTrans) ? A->size2 : A->size1; const size_t MB = (Trans == CblasNoTrans) ? B->size1 : B->size2; const size_t NB = (Trans == CblasNoTrans) ? B->size2 : B->size1; if (M != N) { GSL_ERROR ("matrix C must be square", GSL_ENOTSQR); } else if (N != MA || N != MB || NA != NB) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_cher2k (CblasRowMajor, Uplo, Trans, INT (N), INT (NA), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), B->data, INT (B->tda), beta, C->data, INT (C->tda)); return GSL_SUCCESS; } int gsl_blas_zher2k (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_matrix_complex * B, double beta, gsl_matrix_complex * C) { const size_t M = C->size1; const size_t N = C->size2; const size_t MA = (Trans == CblasNoTrans) ? A->size1 : A->size2; const size_t NA = (Trans == CblasNoTrans) ? A->size2 : A->size1; const size_t MB = (Trans == CblasNoTrans) ? B->size1 : B->size2; const size_t NB = (Trans == CblasNoTrans) ? B->size2 : B->size1; if (M != N) { GSL_ERROR ("matrix C must be square", GSL_ENOTSQR); } else if (N != MA || N != MB || NA != NB) { GSL_ERROR ("invalid length", GSL_EBADLEN); } cblas_zher2k (CblasRowMajor, Uplo, Trans, INT (N), INT (NA), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), B->data, INT (B->tda), beta, C->data, INT (C->tda)); return GSL_SUCCESS; } /* TRMM */ int gsl_blas_strmm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, float alpha, const gsl_matrix_float * A, gsl_matrix_float * B) { const size_t M = B->size1; const size_t N = B->size2; const size_t MA = A->size1; const size_t NA = A->size2; if (MA != NA) { GSL_ERROR ("matrix A must be square", GSL_ENOTSQR); } if ((Side == CblasLeft && M == MA) || (Side == CblasRight && N == MA)) { cblas_strmm (CblasRowMajor, Side, Uplo, TransA, Diag, INT (M), INT (N), alpha, A->data, INT (A->tda), B->data, INT (B->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_dtrmm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, double alpha, const gsl_matrix * A, gsl_matrix * B) { const size_t M = B->size1; const size_t N = B->size2; const size_t MA = A->size1; const size_t NA = A->size2; if (MA != NA) { GSL_ERROR ("matrix A must be square", GSL_ENOTSQR); } if ((Side == CblasLeft && M == MA) || (Side == CblasRight && N == MA)) { cblas_dtrmm (CblasRowMajor, Side, Uplo, TransA, Diag, INT (M), INT (N), alpha, A->data, INT (A->tda), B->data, INT (B->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_ctrmm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, gsl_matrix_complex_float * B) { const size_t M = B->size1; const size_t N = B->size2; const size_t MA = A->size1; const size_t NA = A->size2; if (MA != NA) { GSL_ERROR ("matrix A must be square", GSL_ENOTSQR); } if ((Side == CblasLeft && M == MA) || (Side == CblasRight && N == MA)) { cblas_ctrmm (CblasRowMajor, Side, Uplo, TransA, Diag, INT (M), INT (N), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), B->data, INT (B->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_ztrmm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_complex alpha, const gsl_matrix_complex * A, gsl_matrix_complex * B) { const size_t M = B->size1; const size_t N = B->size2; const size_t MA = A->size1; const size_t NA = A->size2; if (MA != NA) { GSL_ERROR ("matrix A must be square", GSL_ENOTSQR); } if ((Side == CblasLeft && M == MA) || (Side == CblasRight && N == MA)) { cblas_ztrmm (CblasRowMajor, Side, Uplo, TransA, Diag, INT (M), INT (N), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), B->data, INT (B->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } /* TRSM */ int gsl_blas_strsm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, float alpha, const gsl_matrix_float * A, gsl_matrix_float * B) { const size_t M = B->size1; const size_t N = B->size2; const size_t MA = A->size1; const size_t NA = A->size2; if (MA != NA) { GSL_ERROR ("matrix A must be square", GSL_ENOTSQR); } if ((Side == CblasLeft && M == MA) || (Side == CblasRight && N == MA)) { cblas_strsm (CblasRowMajor, Side, Uplo, TransA, Diag, INT (M), INT (N), alpha, A->data, INT (A->tda), B->data, INT (B->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_dtrsm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, double alpha, const gsl_matrix * A, gsl_matrix * B) { const size_t M = B->size1; const size_t N = B->size2; const size_t MA = A->size1; const size_t NA = A->size2; if (MA != NA) { GSL_ERROR ("matrix A must be square", GSL_ENOTSQR); } if ((Side == CblasLeft && M == MA) || (Side == CblasRight && N == MA)) { cblas_dtrsm (CblasRowMajor, Side, Uplo, TransA, Diag, INT (M), INT (N), alpha, A->data, INT (A->tda), B->data, INT (B->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_ctrsm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, gsl_matrix_complex_float * B) { const size_t M = B->size1; const size_t N = B->size2; const size_t MA = A->size1; const size_t NA = A->size2; if (MA != NA) { GSL_ERROR ("matrix A must be square", GSL_ENOTSQR); } if ((Side == CblasLeft && M == MA) || (Side == CblasRight && N == MA)) { cblas_ctrsm (CblasRowMajor, Side, Uplo, TransA, Diag, INT (M), INT (N), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), B->data, INT (B->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } int gsl_blas_ztrsm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_complex alpha, const gsl_matrix_complex * A, gsl_matrix_complex * B) { const size_t M = B->size1; const size_t N = B->size2; const size_t MA = A->size1; const size_t NA = A->size2; if (MA != NA) { GSL_ERROR ("matrix A must be square", GSL_ENOTSQR); } if ((Side == CblasLeft && M == MA) || (Side == CblasRight && N == MA)) { cblas_ztrsm (CblasRowMajor, Side, Uplo, TransA, Diag, INT (M), INT (N), GSL_COMPLEX_P (&alpha), A->data, INT (A->tda), B->data, INT (B->tda)); return GSL_SUCCESS; } else { GSL_ERROR ("invalid length", GSL_EBADLEN); } } gsl/blas/gsl_blas.h0000644000175000017500000005265613536674414012630 0ustar eddedd/* blas/gsl_blas.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Author: G. Jungman */ #ifndef __GSL_BLAS_H__ #define __GSL_BLAS_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* ======================================================================== * Level 1 * ======================================================================== */ int gsl_blas_sdsdot (float alpha, const gsl_vector_float * X, const gsl_vector_float * Y, float * result ); int gsl_blas_dsdot (const gsl_vector_float * X, const gsl_vector_float * Y, double * result ); int gsl_blas_sdot (const gsl_vector_float * X, const gsl_vector_float * Y, float * result ); int gsl_blas_ddot (const gsl_vector * X, const gsl_vector * Y, double * result ); int gsl_blas_cdotu (const gsl_vector_complex_float * X, const gsl_vector_complex_float * Y, gsl_complex_float * dotu); int gsl_blas_cdotc (const gsl_vector_complex_float * X, const gsl_vector_complex_float * Y, gsl_complex_float * dotc); int gsl_blas_zdotu (const gsl_vector_complex * X, const gsl_vector_complex * Y, gsl_complex * dotu); int gsl_blas_zdotc (const gsl_vector_complex * X, const gsl_vector_complex * Y, gsl_complex * dotc); float gsl_blas_snrm2 (const gsl_vector_float * X); float gsl_blas_sasum (const gsl_vector_float * X); double gsl_blas_dnrm2 (const gsl_vector * X); double gsl_blas_dasum (const gsl_vector * X); float gsl_blas_scnrm2 (const gsl_vector_complex_float * X); float gsl_blas_scasum (const gsl_vector_complex_float * X); double gsl_blas_dznrm2 (const gsl_vector_complex * X); double gsl_blas_dzasum (const gsl_vector_complex * X); CBLAS_INDEX_t gsl_blas_isamax (const gsl_vector_float * X); CBLAS_INDEX_t gsl_blas_idamax (const gsl_vector * X); CBLAS_INDEX_t gsl_blas_icamax (const gsl_vector_complex_float * X); CBLAS_INDEX_t gsl_blas_izamax (const gsl_vector_complex * X); int gsl_blas_sswap (gsl_vector_float * X, gsl_vector_float * Y); int gsl_blas_scopy (const gsl_vector_float * X, gsl_vector_float * Y); int gsl_blas_saxpy (float alpha, const gsl_vector_float * X, gsl_vector_float * Y); int gsl_blas_dswap (gsl_vector * X, gsl_vector * Y); int gsl_blas_dcopy (const gsl_vector * X, gsl_vector * Y); int gsl_blas_daxpy (double alpha, const gsl_vector * X, gsl_vector * Y); int gsl_blas_cswap (gsl_vector_complex_float * X, gsl_vector_complex_float * Y); int gsl_blas_ccopy (const gsl_vector_complex_float * X, gsl_vector_complex_float * Y); int gsl_blas_caxpy (const gsl_complex_float alpha, const gsl_vector_complex_float * X, gsl_vector_complex_float * Y); int gsl_blas_zswap (gsl_vector_complex * X, gsl_vector_complex * Y); int gsl_blas_zcopy (const gsl_vector_complex * X, gsl_vector_complex * Y); int gsl_blas_zaxpy (const gsl_complex alpha, const gsl_vector_complex * X, gsl_vector_complex * Y); int gsl_blas_srotg (float a[], float b[], float c[], float s[]); int gsl_blas_srotmg (float d1[], float d2[], float b1[], float b2, float P[]); int gsl_blas_srot (gsl_vector_float * X, gsl_vector_float * Y, float c, float s); int gsl_blas_srotm (gsl_vector_float * X, gsl_vector_float * Y, const float P[]); int gsl_blas_drotg (double a[], double b[], double c[], double s[]); int gsl_blas_drotmg (double d1[], double d2[], double b1[], double b2, double P[]); int gsl_blas_drot (gsl_vector * X, gsl_vector * Y, const double c, const double s); int gsl_blas_drotm (gsl_vector * X, gsl_vector * Y, const double P[]); void gsl_blas_sscal (float alpha, gsl_vector_float * X); void gsl_blas_dscal (double alpha, gsl_vector * X); void gsl_blas_cscal (const gsl_complex_float alpha, gsl_vector_complex_float * X); void gsl_blas_zscal (const gsl_complex alpha, gsl_vector_complex * X); void gsl_blas_csscal (float alpha, gsl_vector_complex_float * X); void gsl_blas_zdscal (double alpha, gsl_vector_complex * X); /* =========================================================================== * Level 2 * =========================================================================== */ /* * Routines with standard 4 prefixes (S, D, C, Z) */ int gsl_blas_sgemv (CBLAS_TRANSPOSE_t TransA, float alpha, const gsl_matrix_float * A, const gsl_vector_float * X, float beta, gsl_vector_float * Y); int gsl_blas_strmv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix_float * A, gsl_vector_float * X); int gsl_blas_strsv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix_float * A, gsl_vector_float * X); int gsl_blas_dgemv (CBLAS_TRANSPOSE_t TransA, double alpha, const gsl_matrix * A, const gsl_vector * X, double beta, gsl_vector * Y); int gsl_blas_dtrmv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix * A, gsl_vector * X); int gsl_blas_dtrsv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix * A, gsl_vector * X); int gsl_blas_cgemv (CBLAS_TRANSPOSE_t TransA, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_vector_complex_float * X, const gsl_complex_float beta, gsl_vector_complex_float * Y); int gsl_blas_ctrmv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix_complex_float * A, gsl_vector_complex_float * X); int gsl_blas_ctrsv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix_complex_float * A, gsl_vector_complex_float * X); int gsl_blas_zgemv (CBLAS_TRANSPOSE_t TransA, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_vector_complex * X, const gsl_complex beta, gsl_vector_complex * Y); int gsl_blas_ztrmv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix_complex * A, gsl_vector_complex * X); int gsl_blas_ztrsv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_matrix_complex * A, gsl_vector_complex *X); /* * Routines with S and D prefixes only */ int gsl_blas_ssymv (CBLAS_UPLO_t Uplo, float alpha, const gsl_matrix_float * A, const gsl_vector_float * X, float beta, gsl_vector_float * Y); int gsl_blas_sger (float alpha, const gsl_vector_float * X, const gsl_vector_float * Y, gsl_matrix_float * A); int gsl_blas_ssyr (CBLAS_UPLO_t Uplo, float alpha, const gsl_vector_float * X, gsl_matrix_float * A); int gsl_blas_ssyr2 (CBLAS_UPLO_t Uplo, float alpha, const gsl_vector_float * X, const gsl_vector_float * Y, gsl_matrix_float * A); int gsl_blas_dsymv (CBLAS_UPLO_t Uplo, double alpha, const gsl_matrix * A, const gsl_vector * X, double beta, gsl_vector * Y); int gsl_blas_dger (double alpha, const gsl_vector * X, const gsl_vector * Y, gsl_matrix * A); int gsl_blas_dsyr (CBLAS_UPLO_t Uplo, double alpha, const gsl_vector * X, gsl_matrix * A); int gsl_blas_dsyr2 (CBLAS_UPLO_t Uplo, double alpha, const gsl_vector * X, const gsl_vector * Y, gsl_matrix * A); /* * Routines with C and Z prefixes only */ int gsl_blas_chemv (CBLAS_UPLO_t Uplo, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_vector_complex_float * X, const gsl_complex_float beta, gsl_vector_complex_float * Y); int gsl_blas_cgeru (const gsl_complex_float alpha, const gsl_vector_complex_float * X, const gsl_vector_complex_float * Y, gsl_matrix_complex_float * A); int gsl_blas_cgerc (const gsl_complex_float alpha, const gsl_vector_complex_float * X, const gsl_vector_complex_float * Y, gsl_matrix_complex_float * A); int gsl_blas_cher (CBLAS_UPLO_t Uplo, float alpha, const gsl_vector_complex_float * X, gsl_matrix_complex_float * A); int gsl_blas_cher2 (CBLAS_UPLO_t Uplo, const gsl_complex_float alpha, const gsl_vector_complex_float * X, const gsl_vector_complex_float * Y, gsl_matrix_complex_float * A); int gsl_blas_zhemv (CBLAS_UPLO_t Uplo, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_vector_complex * X, const gsl_complex beta, gsl_vector_complex * Y); int gsl_blas_zgeru (const gsl_complex alpha, const gsl_vector_complex * X, const gsl_vector_complex * Y, gsl_matrix_complex * A); int gsl_blas_zgerc (const gsl_complex alpha, const gsl_vector_complex * X, const gsl_vector_complex * Y, gsl_matrix_complex * A); int gsl_blas_zher (CBLAS_UPLO_t Uplo, double alpha, const gsl_vector_complex * X, gsl_matrix_complex * A); int gsl_blas_zher2 (CBLAS_UPLO_t Uplo, const gsl_complex alpha, const gsl_vector_complex * X, const gsl_vector_complex * Y, gsl_matrix_complex * A); /* * =========================================================================== * Prototypes for level 3 BLAS * =========================================================================== */ /* * Routines with standard 4 prefixes (S, D, C, Z) */ int gsl_blas_sgemm (CBLAS_TRANSPOSE_t TransA, CBLAS_TRANSPOSE_t TransB, float alpha, const gsl_matrix_float * A, const gsl_matrix_float * B, float beta, gsl_matrix_float * C); int gsl_blas_ssymm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, float alpha, const gsl_matrix_float * A, const gsl_matrix_float * B, float beta, gsl_matrix_float * C); int gsl_blas_ssyrk (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, float alpha, const gsl_matrix_float * A, float beta, gsl_matrix_float * C); int gsl_blas_ssyr2k (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, float alpha, const gsl_matrix_float * A, const gsl_matrix_float * B, float beta, gsl_matrix_float * C); int gsl_blas_strmm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, float alpha, const gsl_matrix_float * A, gsl_matrix_float * B); int gsl_blas_strsm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, float alpha, const gsl_matrix_float * A, gsl_matrix_float * B); int gsl_blas_dgemm (CBLAS_TRANSPOSE_t TransA, CBLAS_TRANSPOSE_t TransB, double alpha, const gsl_matrix * A, const gsl_matrix * B, double beta, gsl_matrix * C); int gsl_blas_dsymm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, double alpha, const gsl_matrix * A, const gsl_matrix * B, double beta, gsl_matrix * C); int gsl_blas_dsyrk (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, double alpha, const gsl_matrix * A, double beta, gsl_matrix * C); int gsl_blas_dsyr2k (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, double alpha, const gsl_matrix * A, const gsl_matrix * B, double beta, gsl_matrix * C); int gsl_blas_dtrmm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, double alpha, const gsl_matrix * A, gsl_matrix * B); int gsl_blas_dtrsm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, double alpha, const gsl_matrix * A, gsl_matrix * B); int gsl_blas_cgemm (CBLAS_TRANSPOSE_t TransA, CBLAS_TRANSPOSE_t TransB, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_matrix_complex_float * B, const gsl_complex_float beta, gsl_matrix_complex_float * C); int gsl_blas_csymm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_matrix_complex_float * B, const gsl_complex_float beta, gsl_matrix_complex_float * C); int gsl_blas_csyrk (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_complex_float beta, gsl_matrix_complex_float * C); int gsl_blas_csyr2k (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_matrix_complex_float * B, const gsl_complex_float beta, gsl_matrix_complex_float * C); int gsl_blas_ctrmm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, gsl_matrix_complex_float * B); int gsl_blas_ctrsm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, gsl_matrix_complex_float * B); int gsl_blas_zgemm (CBLAS_TRANSPOSE_t TransA, CBLAS_TRANSPOSE_t TransB, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_matrix_complex * B, const gsl_complex beta, gsl_matrix_complex * C); int gsl_blas_zsymm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_matrix_complex * B, const gsl_complex beta, gsl_matrix_complex * C); int gsl_blas_zsyrk (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_complex beta, gsl_matrix_complex * C); int gsl_blas_zsyr2k (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_matrix_complex * B, const gsl_complex beta, gsl_matrix_complex *C); int gsl_blas_ztrmm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_complex alpha, const gsl_matrix_complex * A, gsl_matrix_complex * B); int gsl_blas_ztrsm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, const gsl_complex alpha, const gsl_matrix_complex * A, gsl_matrix_complex * B); /* * Routines with prefixes C and Z only */ int gsl_blas_chemm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_matrix_complex_float * B, const gsl_complex_float beta, gsl_matrix_complex_float * C); int gsl_blas_cherk (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, float alpha, const gsl_matrix_complex_float * A, float beta, gsl_matrix_complex_float * C); int gsl_blas_cher2k (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, const gsl_complex_float alpha, const gsl_matrix_complex_float * A, const gsl_matrix_complex_float * B, float beta, gsl_matrix_complex_float * C); int gsl_blas_zhemm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_matrix_complex * B, const gsl_complex beta, gsl_matrix_complex * C); int gsl_blas_zherk (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, double alpha, const gsl_matrix_complex * A, double beta, gsl_matrix_complex * C); int gsl_blas_zher2k (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_matrix_complex * B, double beta, gsl_matrix_complex * C); __END_DECLS #endif /* __GSL_BLAS_H__ */ gsl/blas/TODO0000644000175000017500000000041613536674414011344 0ustar eddedd# -*- org -*- #+CATEGORY: blas * We need a test suite for this directory! * Verify that we support the full CBLAS interface and that the GSL CBLAS library can be used standalone * Check that substituting the Reference Blas, ATLAS, and Intel BLAS all work correctly gsl/sort/0000755000175000017500000000000014057135461010712 5ustar eddeddgsl/sort/gsl_sort_vector.h0000644000175000017500000000102513536674414014306 0ustar eddedd#ifndef __GSL_SORT_VECTOR_H__ #define __GSL_SORT_VECTOR_H__ #include #include #include #include #include #include #include #include #include #include #include #endif /* __GSL_SORT_VECTOR_H__ */ gsl/sort/Makefile.in0000664000175000017500000011052714057135461012767 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = sort ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslsort_la_LIBADD = am_libgslsort_la_OBJECTS = sort.lo sortind.lo sortvec.lo sortvecind.lo \ subset.lo subsetind.lo libgslsort_la_OBJECTS = $(am_libgslsort_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslsort.la ../permutation/libgslpermutation.la \ ../vector/libgslvector.la ../blas/libgslblas.la \ ../cblas/libgslcblas.la ../block/libgslblock.la \ ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ ../test/libgsltest.la ../sys/libgslsys.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/sort.Plo ./$(DEPDIR)/sortind.Plo \ ./$(DEPDIR)/sortvec.Plo ./$(DEPDIR)/sortvecind.Plo \ ./$(DEPDIR)/subset.Plo ./$(DEPDIR)/subsetind.Plo \ ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslsort_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslsort_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslsort.la pkginclude_HEADERS = gsl_heapsort.h gsl_sort.h gsl_sort_char.h gsl_sort_double.h gsl_sort_float.h gsl_sort_int.h gsl_sort_long.h gsl_sort_long_double.h gsl_sort_short.h gsl_sort_uchar.h gsl_sort_uint.h gsl_sort_ulong.h gsl_sort_ushort.h gsl_sort_vector.h gsl_sort_vector_char.h gsl_sort_vector_double.h gsl_sort_vector_float.h gsl_sort_vector_int.h gsl_sort_vector_long.h gsl_sort_vector_long_double.h gsl_sort_vector_short.h gsl_sort_vector_uchar.h gsl_sort_vector_uint.h gsl_sort_vector_ulong.h gsl_sort_vector_ushort.h AM_CPPFLAGS = -I$(top_srcdir) libgslsort_la_SOURCES = sort.c sortind.c sortvec.c sortvecind.c subset.c subsetind.c noinst_HEADERS = sortvec_source.c sortvecind_source.c subset_source.c subsetind_source.c test_source.c test_heapsort.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslsort.la ../permutation/libgslpermutation.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sort/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu sort/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslsort.la: $(libgslsort_la_OBJECTS) $(libgslsort_la_DEPENDENCIES) $(EXTRA_libgslsort_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslsort_la_OBJECTS) $(libgslsort_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sort.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sortind.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sortvec.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sortvecind.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subset.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subsetind.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/sort.Plo -rm -f ./$(DEPDIR)/sortind.Plo -rm -f ./$(DEPDIR)/sortvec.Plo -rm -f ./$(DEPDIR)/sortvecind.Plo -rm -f ./$(DEPDIR)/subset.Plo -rm -f ./$(DEPDIR)/subsetind.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/sort.Plo -rm -f ./$(DEPDIR)/sortind.Plo -rm -f ./$(DEPDIR)/sortvec.Plo -rm -f ./$(DEPDIR)/sortvecind.Plo -rm -f ./$(DEPDIR)/subset.Plo -rm -f ./$(DEPDIR)/subsetind.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/sort/subsetind_source.c0000644000175000017500000000574113536674414014454 0ustar eddedd/* sort/subsetind_source.c * * Copyright (C) 1999,2000,2001 Thomas Walter, Brian Gough * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 3, or (at your option) any * later version. * * This source is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ /* find the k-th smallest elements of the vector data, in ascending order */ int FUNCTION (gsl_sort, smallest_index) (size_t * p, const size_t k, const BASE * src, const size_t stride, const size_t n) { size_t i, j; BASE xbound; if (k > n) { GSL_ERROR ("subset length k exceeds vector length n", GSL_EINVAL); } if (k == 0 || n == 0) { return GSL_SUCCESS; } /* take the first element */ j = 1; xbound = src[0 * stride]; p[0] = 0; /* examine the remaining elements */ for (i = 1; i < n; i++) { size_t i1; BASE xi = src[i * stride]; if (j < k) { j++; } else if (xi >= xbound) { continue; } for (i1 = j - 1; i1 > 0 ; i1--) { if (xi > src[p[i1 - 1] * stride]) break; p[i1] = p[i1 - 1]; } p[i1] = i; xbound = src[p[j-1] * stride]; } return GSL_SUCCESS; } int FUNCTION (gsl_sort_vector,smallest_index) (size_t * p, const size_t k, const TYPE (gsl_vector) * v) { return FUNCTION (gsl_sort, smallest_index) (p, k, v->data, v->stride, v->size); } int FUNCTION (gsl_sort, largest_index) (size_t * p, const size_t k, const BASE * src, const size_t stride, const size_t n) { size_t i, j; BASE xbound; if (k > n) { GSL_ERROR ("subset length k exceeds vector length n", GSL_EINVAL); } if (k == 0 || n == 0) { return GSL_SUCCESS; } /* take the first element */ j = 1; xbound = src[0 * stride]; p[0] = 0; /* examine the remaining elements */ for (i = 1; i < n; i++) { size_t i1; BASE xi = src[i * stride]; if (j < k) { j++; } else if (xi <= xbound) { continue; } for (i1 = j - 1; i1 > 0 ; i1--) { if (xi < src[stride * p[i1 - 1]]) break; p[i1] = p[i1 - 1]; } p[i1] = i; xbound = src[stride * p[j-1]]; } return GSL_SUCCESS; } int FUNCTION (gsl_sort_vector,largest_index) (size_t * p, const size_t k, const TYPE (gsl_vector) * v) { return FUNCTION (gsl_sort, largest_index) (p, k, v->data, v->stride, v->size); } gsl/sort/gsl_sort_vector_float.h0000644000175000017500000000355413536674414015504 0ustar eddedd/* sort/gsl_sort_vector_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_VECTOR_FLOAT_H__ #define __GSL_SORT_VECTOR_FLOAT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_vector_float (gsl_vector_float * v); void gsl_sort_vector2_float (gsl_vector_float * v1, gsl_vector_float * v2); int gsl_sort_vector_float_index (gsl_permutation * p, const gsl_vector_float * v); int gsl_sort_vector_float_smallest (float * dest, const size_t k, const gsl_vector_float * v); int gsl_sort_vector_float_largest (float * dest, const size_t k, const gsl_vector_float * v); int gsl_sort_vector_float_smallest_index (size_t * p, const size_t k, const gsl_vector_float * v); int gsl_sort_vector_float_largest_index (size_t * p, const size_t k, const gsl_vector_float * v); __END_DECLS #endif /* __GSL_SORT_VECTOR_FLOAT_H__ */ gsl/sort/gsl_sort_uchar.h0000644000175000017500000000403313536674414014110 0ustar eddedd/* sort/gsl_sort_uchar.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_UCHAR_H__ #define __GSL_SORT_UCHAR_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_uchar (unsigned char * data, const size_t stride, const size_t n); void gsl_sort2_uchar (unsigned char * data1, const size_t stride1, unsigned char * data2, const size_t stride2, const size_t n); void gsl_sort_uchar_index (size_t * p, const unsigned char * data, const size_t stride, const size_t n); int gsl_sort_uchar_smallest (unsigned char * dest, const size_t k, const unsigned char * src, const size_t stride, const size_t n); int gsl_sort_uchar_smallest_index (size_t * p, const size_t k, const unsigned char * src, const size_t stride, const size_t n); int gsl_sort_uchar_largest (unsigned char * dest, const size_t k, const unsigned char * src, const size_t stride, const size_t n); int gsl_sort_uchar_largest_index (size_t * p, const size_t k, const unsigned char * src, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_SORT_UCHAR_H__ */ gsl/sort/gsl_sort_int.h0000644000175000017500000000364113536674414013604 0ustar eddedd/* sort/gsl_sort_int.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_INT_H__ #define __GSL_SORT_INT_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_int (int * data, const size_t stride, const size_t n); void gsl_sort2_int (int * data1, const size_t stride1, int * data2, const size_t stride2, const size_t n); void gsl_sort_int_index (size_t * p, const int * data, const size_t stride, const size_t n); int gsl_sort_int_smallest (int * dest, const size_t k, const int * src, const size_t stride, const size_t n); int gsl_sort_int_smallest_index (size_t * p, const size_t k, const int * src, const size_t stride, const size_t n); int gsl_sort_int_largest (int * dest, const size_t k, const int * src, const size_t stride, const size_t n); int gsl_sort_int_largest_index (size_t * p, const size_t k, const int * src, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_SORT_INT_H__ */ gsl/sort/gsl_heapsort.h0000644000175000017500000000265613536674414013575 0ustar eddedd/* sort/gsl_heapsort.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_HEAPSORT_H__ #define __GSL_HEAPSORT_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef int (*gsl_comparison_fn_t) (const void *, const void *); void gsl_heapsort (void * array, size_t count, size_t size, gsl_comparison_fn_t compare); int gsl_heapsort_index (size_t * p, const void * array, size_t count, size_t size, gsl_comparison_fn_t compare); __END_DECLS #endif /* __GSL_HEAPSORT_H__ */ gsl/sort/ChangeLog0000644000175000017500000000412613536674414012476 0ustar eddedd2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2008-02-09 Brian Gough * test_source.c: prevent signed overflow in tests 2005-08-31 Brian Gough * test_source.c: free index memory as well 2005-04-08 Brian Gough * sortvecind_source.c sortvec_source.c: write tests in such a way as to avoid an infinite loop if nan, by always comparing in the same direction (note that nan < x and nan > x are both false) Tue Jun 26 12:06:58 2001 Brian Gough * subset_source. subsetind_source.c: make prototypes match header file Sun Jan 21 18:36:04 2001 Brian Gough * subset.c, subsetind.c: added functions for selecting subsets (k-th smallest or largest values) Mon Mar 13 13:57:33 2000 Brian Gough * sortind.c (gsl_heapsort_index): changed to use an array of size_t's directly instead of gsl_permutation Mon Feb 28 20:30:06 2000 Brian Gough * renamed gsl_sort to gsl_heapsort, since this is more meaningful and gsl_sort, gsl_sort_float, ... is now used for sorting of arrays. * added support for sorting of arrays, without going through a gsl_vector object (gsl_sort_vector is now implemented in terms of these functions) Sat Feb 26 14:47:36 2000 Brian Gough * added support for indirect sorting of objects * fixed bug in indirect sorting from use of BASE type instead of size_t for index. * reorganized directory Fri Feb 25 19:30:08 2000 Brian Gough * sortind_source.c: changed return type of indirect sort to int, to allow error return code in case where permutation and vector sizes do not match Sat Feb 19 12:18:28 2000 Brian Gough * sortind_source.c: added indirect sorting Fri Feb 18 10:48:24 2000 Brian Gough * initial GPL sources from Thomas Walter gsl/sort/gsl_sort_long.h0000644000175000017500000000366613536674414013760 0ustar eddedd/* sort/gsl_sort_long.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_LONG_H__ #define __GSL_SORT_LONG_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_long (long * data, const size_t stride, const size_t n); void gsl_sort2_long (long * data1, const size_t stride1, long * data2, const size_t stride2, const size_t n); void gsl_sort_long_index (size_t * p, const long * data, const size_t stride, const size_t n); int gsl_sort_long_smallest (long * dest, const size_t k, const long * src, const size_t stride, const size_t n); int gsl_sort_long_smallest_index (size_t * p, const size_t k, const long * src, const size_t stride, const size_t n); int gsl_sort_long_largest (long * dest, const size_t k, const long * src, const size_t stride, const size_t n); int gsl_sort_long_largest_index (size_t * p, const size_t k, const long * src, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_SORT_LONG_H__ */ gsl/sort/Makefile.am0000644000175000017500000000214313536675317012760 0ustar eddeddnoinst_LTLIBRARIES = libgslsort.la pkginclude_HEADERS = gsl_heapsort.h gsl_sort.h gsl_sort_char.h gsl_sort_double.h gsl_sort_float.h gsl_sort_int.h gsl_sort_long.h gsl_sort_long_double.h gsl_sort_short.h gsl_sort_uchar.h gsl_sort_uint.h gsl_sort_ulong.h gsl_sort_ushort.h gsl_sort_vector.h gsl_sort_vector_char.h gsl_sort_vector_double.h gsl_sort_vector_float.h gsl_sort_vector_int.h gsl_sort_vector_long.h gsl_sort_vector_long_double.h gsl_sort_vector_short.h gsl_sort_vector_uchar.h gsl_sort_vector_uint.h gsl_sort_vector_ulong.h gsl_sort_vector_ushort.h AM_CPPFLAGS = -I$(top_srcdir) libgslsort_la_SOURCES = sort.c sortind.c sortvec.c sortvecind.c subset.c subsetind.c noinst_HEADERS = sortvec_source.c sortvecind_source.c subset_source.c subsetind_source.c test_source.c test_heapsort.c TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_SOURCES = test.c test_LDADD = libgslsort.la ../permutation/libgslpermutation.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la gsl/sort/gsl_sort_double.h0000644000175000017500000000365713536674414014273 0ustar eddedd/* sort/gsl_sort_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_DOUBLE_H__ #define __GSL_SORT_DOUBLE_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort (double * data, const size_t stride, const size_t n); void gsl_sort2 (double * data1, const size_t stride1, double * data2, const size_t stride2, const size_t n); void gsl_sort_index (size_t * p, const double * data, const size_t stride, const size_t n); int gsl_sort_smallest (double * dest, const size_t k, const double * src, const size_t stride, const size_t n); int gsl_sort_smallest_index (size_t * p, const size_t k, const double * src, const size_t stride, const size_t n); int gsl_sort_largest (double * dest, const size_t k, const double * src, const size_t stride, const size_t n); int gsl_sort_largest_index (size_t * p, const size_t k, const double * src, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_SORT_DOUBLE_H__ */ gsl/sort/sortvec_source.c0000644000175000017500000000777213536674414014147 0ustar eddedd/* * Implement Heap sort -- direct and indirect sorting * Based on descriptions in Sedgewick "Algorithms in C" * * Copyright (C) 1999 Thomas Walter * * 18 February 2000: Modified for GSL by Brian Gough * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 3, or (at your option) any * later version. * * This source is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ static inline void FUNCTION (my, downheap) (BASE * data, const size_t stride, const size_t N, size_t k); static inline void FUNCTION (my, downheap2) (BASE * data1, const size_t stride1, BASE * data2, const size_t stride2, const size_t N, size_t k); static inline void FUNCTION (my, downheap) (BASE * data, const size_t stride, const size_t N, size_t k) { BASE v = data[k * stride]; while (k <= N / 2) { size_t j = 2 * k; if (j < N && data[j * stride] < data[(j + 1) * stride]) { j++; } if (!(v < data[j * stride])) /* avoid infinite loop if nan */ { break; } data[k * stride] = data[j * stride]; k = j; } data[k * stride] = v; } static inline void FUNCTION (my, downheap2) (BASE * data1, const size_t stride1, BASE * data2, const size_t stride2, const size_t N, size_t k) { BASE v1 = data1[k * stride1]; BASE v2 = data2[k * stride2]; while (k <= N / 2) { size_t j = 2 * k; if (j < N && data1[j * stride1] < data1[(j + 1) * stride1]) { j++; } if (!(v1 < data1[j * stride1])) /* avoid infinite loop if nan */ { break; } data1[k * stride1] = data1[j * stride1]; data2[k * stride2] = data2[j * stride2]; k = j; } data1[k * stride1] = v1; data2[k * stride2] = v2; } void TYPE (gsl_sort) (BASE * data, const size_t stride, const size_t n) { size_t N; size_t k; if (n == 0) { return; /* No data to sort */ } /* We have n_data elements, last element is at 'n_data-1', first at '0' Set N to the last element number. */ N = n - 1; k = N / 2; k++; /* Compensate the first use of 'k--' */ do { k--; FUNCTION (my, downheap) (data, stride, N, k); } while (k > 0); while (N > 0) { /* first swap the elements */ BASE tmp = data[0 * stride]; data[0 * stride] = data[N * stride]; data[N * stride] = tmp; /* then process the heap */ N--; FUNCTION (my, downheap) (data, stride, N, 0); } } void TYPE (gsl_sort_vector) (TYPE (gsl_vector) * v) { TYPE (gsl_sort) (v->data, v->stride, v->size) ; } void TYPE (gsl_sort2) (BASE * data1, const size_t stride1, BASE * data2, const size_t stride2, const size_t n) { size_t N; size_t k; if (n == 0) { return; /* No data to sort */ } /* We have n_data elements, last element is at 'n_data-1', first at '0' Set N to the last element number. */ N = n - 1; k = N / 2; k++; /* Compensate the first use of 'k--' */ do { k--; FUNCTION (my, downheap2) (data1, stride1, data2, stride2, N, k); } while (k > 0); while (N > 0) { /* first swap the elements */ BASE tmp; tmp = data1[0 * stride1]; data1[0 * stride1] = data1[N * stride1]; data1[N * stride1] = tmp; tmp = data2[0 * stride2]; data2[0 * stride2] = data2[N * stride2]; data2[N * stride2] = tmp; /* then process the heap */ N--; FUNCTION (my, downheap2) (data1, stride1, data2, stride2, N, 0); } } void TYPE (gsl_sort_vector2) (TYPE (gsl_vector) * v1, TYPE (gsl_vector) * v2) { TYPE (gsl_sort2) (v1->data, v1->stride, v2->data, v2->stride, v1->size) ; } gsl/sort/gsl_sort_char.h0000644000175000017500000000366613536674414013736 0ustar eddedd/* sort/gsl_sort_char.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_CHAR_H__ #define __GSL_SORT_CHAR_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_char (char * data, const size_t stride, const size_t n); void gsl_sort2_char (char * data1, const size_t stride1, char * data2, const size_t stride2, const size_t n); void gsl_sort_char_index (size_t * p, const char * data, const size_t stride, const size_t n); int gsl_sort_char_smallest (char * dest, const size_t k, const char * src, const size_t stride, const size_t n); int gsl_sort_char_smallest_index (size_t * p, const size_t k, const char * src, const size_t stride, const size_t n); int gsl_sort_char_largest (char * dest, const size_t k, const char * src, const size_t stride, const size_t n); int gsl_sort_char_largest_index (size_t * p, const size_t k, const char * src, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_SORT_CHAR_H__ */ gsl/sort/sortvecind_source.c0000644000175000017500000000467713536674414014643 0ustar eddedd/* * Implement Heap sort -- direct and indirect sorting * Based on descriptions in Sedgewick "Algorithms in C" * * Copyright (C) 1999 Thomas Walter * * 18 February 2000: Modified for GSL by Brian Gough * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 3, or (at your option) any * later version. * * This source is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ static inline void FUNCTION (index, downheap) (size_t * p, const BASE * data, const size_t stride, const size_t N, size_t k); static inline void FUNCTION (index, downheap) (size_t * p, const BASE * data, const size_t stride, const size_t N, size_t k) { const size_t pki = p[k]; while (k <= N / 2) { size_t j = 2 * k; if (j < N && data[p[j] * stride] < data[p[j + 1] * stride]) { j++; } if (!(data[pki * stride] < data[p[j] * stride])) /* avoid infinite loop if nan */ { break; } p[k] = p[j]; k = j; } p[k] = pki; } void FUNCTION (gsl_sort, index) (size_t * p, const BASE * data, const size_t stride, const size_t n) { size_t N; size_t i, k; if (n == 0) { return; /* No data to sort */ } /* set permutation to identity */ for (i = 0 ; i < n ; i++) { p[i] = i ; } /* We have n_data elements, last element is at 'n_data-1', first at '0' Set N to the last element number. */ N = n - 1; k = N / 2; k++; /* Compensate the first use of 'k--' */ do { k--; FUNCTION (index, downheap) (p, data, stride, N, k); } while (k > 0); while (N > 0) { /* first swap the elements */ size_t tmp = p[0]; p[0] = p[N]; p[N] = tmp; /* then process the heap */ N--; FUNCTION (index, downheap) (p, data, stride, N, 0); } } int FUNCTION (gsl_sort_vector, index) (gsl_permutation * permutation, const TYPE (gsl_vector) * v) { if (permutation->size != v->size) { GSL_ERROR ("permutation and vector lengths are not equal", GSL_EBADLEN); } FUNCTION (gsl_sort, index) (permutation->data, v->data, v->stride, v->size) ; return GSL_SUCCESS ; } gsl/sort/test_heapsort.c0000644000175000017500000000776313536674414013766 0ustar eddedd/* sort/test_heapsort.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int cmp_dbl (const void *a, const void *b); void test_heapsort (size_t N); void initialize (double *data, size_t N); void cpy (double *dest, double *src, size_t N); void randomize (double *data, size_t n); void reverse (double *data, size_t N); int check (double *data, double *orig, size_t N); int pcheck (size_t * p, double *data, double *orig, size_t N); void test_heapsort (size_t N) { int status; double *orig = (double *) malloc (N * sizeof (double)); double *data = (double *) malloc (N * sizeof (double)); size_t *p = (size_t *) malloc (N * sizeof(size_t)); initialize (orig, N); /* Already sorted */ cpy (data, orig, N); status = gsl_heapsort_index (p, data, N, sizeof (double), (gsl_comparison_fn_t) & cmp_dbl); status |= pcheck (p, data, orig, N); gsl_test (status, "indexing array, n = %u, ordered", N); gsl_heapsort (data, N, sizeof (double), (gsl_comparison_fn_t) & cmp_dbl); status = check (data, orig, N); gsl_test (status, "sorting, array, n = %u, ordered", N); /* Reverse the data */ cpy (data, orig, N); reverse (data, N); status = gsl_heapsort_index (p, data, N, sizeof (double), (gsl_comparison_fn_t) & cmp_dbl); status |= pcheck (p, data, orig, N); gsl_test (status, "indexing array, n = %u, reversed", N); gsl_heapsort (data, N, sizeof (double), (gsl_comparison_fn_t) & cmp_dbl); status = check (data, orig, N); gsl_test (status, "sorting, array, n = %u, reversed", N); /* Perform some shuffling */ cpy (data, orig, N); randomize (data, N); status = gsl_heapsort_index (p, data, N, sizeof (double), (gsl_comparison_fn_t) & cmp_dbl); status |= pcheck (p, data, orig, N); gsl_test (status, "indexing array, n = %u, randomized", N); gsl_heapsort (data, N, sizeof (double), (gsl_comparison_fn_t) & cmp_dbl); status = check (data, orig, N); gsl_test (status, "sorting, array, n = %u, randomized", N); free (orig); free (data); free (p); } void initialize (double *data, size_t N) { size_t i; for (i = 0; i < N; i++) { data[i] = i; } } void cpy (double *dest, double *src, size_t N) { size_t i; for (i = 0; i < N; i++) { dest[i] = src[i]; } } void randomize (double *data, size_t N) { size_t i; for (i = 0; i < N; i++) { size_t j = urand (N); double tmp = data[i]; data[i] = data[j]; data[j] = tmp; } } void reverse (double *data, size_t N) { size_t i; for (i = 0; i < N / 2; i++) { size_t j = N - i - 1; { double tmp = data[i]; data[i] = data[j]; data[j] = tmp; } } } int check (double *data, double *orig, size_t N) { size_t i; for (i = 0; i < N; i++) { if (data[i] != orig[i]) { return GSL_FAILURE; } } return GSL_SUCCESS; } int pcheck (size_t * p, double *data, double *orig, size_t N) { size_t i; for (i = 0; i < N; i++) { if (data[p[i]] != orig[i]) { return GSL_FAILURE; } } return GSL_SUCCESS; } int cmp_dbl (const void *a, const void *b) { const double x = *(const double *) a; const double y = *(const double *) b; if (x > y) return 1; if (x == y) return 0; else return -1; } gsl/sort/sortvec.c0000644000175000017500000000415213536674414012554 0ustar eddedd/* * Implement Heap sort -- direct and indirect sorting * Based on descriptions in Sedgewick "Algorithms in C" * * Copyright (C) 1999 Thomas Walter * * 18 February 2000: Modified for GSL by Brian Gough * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 3, or (at your option) any * later version. * * This source is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ #include #include #include #include #include #define BASE_LONG_DOUBLE #include "templates_on.h" #include "sortvec_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "sortvec_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "sortvec_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "sortvec_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "sortvec_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "sortvec_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "sortvec_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "sortvec_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "sortvec_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "sortvec_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "sortvec_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/sort/subset_source.c0000644000175000017500000000563013536674414013756 0ustar eddedd/* sort/subset_source.c * * Copyright (C) 1999,2000,2001 Thomas Walter, Brian Gough * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 3, or (at your option) any * later version. * * This source is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ /* find the k-th smallest elements of the vector data, in ascending order */ int FUNCTION (gsl_sort, smallest) (BASE * dest, const size_t k, const BASE * src, const size_t stride, const size_t n) { size_t i, j; BASE xbound; if (k > n) { GSL_ERROR ("subset length k exceeds vector length n", GSL_EINVAL); } if (k == 0 || n == 0) { return GSL_SUCCESS; } /* take the first element */ j = 1; xbound = src[0 * stride]; dest[0] = xbound; /* examine the remaining elements */ for (i = 1; i < n; i++) { size_t i1; BASE xi = src[i * stride]; if (j < k) { j++; } else if (xi >= xbound) { continue; } for (i1 = j - 1; i1 > 0 ; i1--) { if (xi > dest[i1 - 1]) break; dest[i1] = dest[i1 - 1]; } dest[i1] = xi; xbound = dest[j-1]; } return GSL_SUCCESS; } int FUNCTION (gsl_sort_vector,smallest) (BASE * dest, const size_t k, const TYPE (gsl_vector) * v) { return FUNCTION (gsl_sort, smallest) (dest, k, v->data, v->stride, v->size); } int FUNCTION (gsl_sort, largest) (BASE * dest, const size_t k, const BASE * src, const size_t stride, const size_t n) { size_t i, j; BASE xbound; if (k > n) { GSL_ERROR ("subset length k exceeds vector length n", GSL_EINVAL); } if (k == 0 || n == 0) { return GSL_SUCCESS; } /* take the first element */ j = 1; xbound = src[0 * stride]; dest[0] = xbound; /* examine the remaining elements */ for (i = 1; i < n; i++) { size_t i1; BASE xi = src[i * stride]; if (j < k) { j++; } else if (xi <= xbound) { continue; } for (i1 = j - 1; i1 > 0 ; i1--) { if (xi < dest[i1 - 1]) break; dest[i1] = dest[i1 - 1]; } dest[i1] = xi; xbound = dest[j-1]; } return GSL_SUCCESS; } int FUNCTION (gsl_sort_vector,largest) (BASE * dest, const size_t k, const TYPE (gsl_vector) * v) { return FUNCTION (gsl_sort, largest) (dest, k, v->data, v->stride, v->size); } gsl/sort/subset.c0000644000175000017500000000371413536674414012377 0ustar eddedd/* sort/subset.c * * Copyright (C) 2001, 2007 Brian Gough * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 3, or (at your option) any * later version. * * This source is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ #include #include #include #include #include #define BASE_LONG_DOUBLE #include "templates_on.h" #include "subset_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "subset_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "subset_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "subset_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "subset_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "subset_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "subset_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "subset_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "subset_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "subset_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "subset_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/sort/gsl_sort_vector_ushort.h0000644000175000017500000000362213536674414015717 0ustar eddedd/* sort/gsl_sort_vector_ushort.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_VECTOR_USHORT_H__ #define __GSL_SORT_VECTOR_USHORT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_vector_ushort (gsl_vector_ushort * v); void gsl_sort_vector2_ushort (gsl_vector_ushort * v1, gsl_vector_ushort * v2); int gsl_sort_vector_ushort_index (gsl_permutation * p, const gsl_vector_ushort * v); int gsl_sort_vector_ushort_smallest (unsigned short * dest, const size_t k, const gsl_vector_ushort * v); int gsl_sort_vector_ushort_largest (unsigned short * dest, const size_t k, const gsl_vector_ushort * v); int gsl_sort_vector_ushort_smallest_index (size_t * p, const size_t k, const gsl_vector_ushort * v); int gsl_sort_vector_ushort_largest_index (size_t * p, const size_t k, const gsl_vector_ushort * v); __END_DECLS #endif /* __GSL_SORT_VECTOR_USHORT_H__ */ gsl/sort/gsl_sort_vector_short.h0000644000175000017500000000355413536674414015536 0ustar eddedd/* sort/gsl_sort_vector_short.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_VECTOR_SHORT_H__ #define __GSL_SORT_VECTOR_SHORT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_vector_short (gsl_vector_short * v); void gsl_sort_vector2_short (gsl_vector_short * v1, gsl_vector_short * v2); int gsl_sort_vector_short_index (gsl_permutation * p, const gsl_vector_short * v); int gsl_sort_vector_short_smallest (short * dest, const size_t k, const gsl_vector_short * v); int gsl_sort_vector_short_largest (short * dest, const size_t k, const gsl_vector_short * v); int gsl_sort_vector_short_smallest_index (size_t * p, const size_t k, const gsl_vector_short * v); int gsl_sort_vector_short_largest_index (size_t * p, const size_t k, const gsl_vector_short * v); __END_DECLS #endif /* __GSL_SORT_VECTOR_SHORT_H__ */ gsl/sort/gsl_sort_vector_uint.h0000644000175000017500000000354613536674414015357 0ustar eddedd/* sort/gsl_sort_vector_uint.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_VECTOR_UINT_H__ #define __GSL_SORT_VECTOR_UINT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_vector_uint (gsl_vector_uint * v); void gsl_sort_vector2_uint (gsl_vector_uint * v1, gsl_vector_uint * v2); int gsl_sort_vector_uint_index (gsl_permutation * p, const gsl_vector_uint * v); int gsl_sort_vector_uint_smallest (unsigned int * dest, const size_t k, const gsl_vector_uint * v); int gsl_sort_vector_uint_largest (unsigned int * dest, const size_t k, const gsl_vector_uint * v); int gsl_sort_vector_uint_smallest_index (size_t * p, const size_t k, const gsl_vector_uint * v); int gsl_sort_vector_uint_largest_index (size_t * p, const size_t k, const gsl_vector_uint * v); __END_DECLS #endif /* __GSL_SORT_VECTOR_UINT_H__ */ gsl/sort/sortvecind.c0000644000175000017500000000421313536674414013245 0ustar eddedd/* * Implement Heap sort -- direct and indirect sorting * Based on descriptions in Sedgewick "Algorithms in C" * * Copyright (C) 1999 Thomas Walter * * 18 February 2000: Modified for GSL by Brian Gough * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 3, or (at your option) any * later version. * * This source is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ #include #include #include #include #include #define BASE_LONG_DOUBLE #include "templates_on.h" #include "sortvecind_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "sortvecind_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "sortvecind_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "sortvecind_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "sortvecind_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "sortvecind_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "sortvecind_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "sortvecind_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "sortvecind_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "sortvecind_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "sortvecind_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/sort/gsl_sort_vector_long.h0000644000175000017500000000352613536674414015335 0ustar eddedd/* sort/gsl_sort_vector_long.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_VECTOR_LONG_H__ #define __GSL_SORT_VECTOR_LONG_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_vector_long (gsl_vector_long * v); void gsl_sort_vector2_long (gsl_vector_long * v1, gsl_vector_long * v2); int gsl_sort_vector_long_index (gsl_permutation * p, const gsl_vector_long * v); int gsl_sort_vector_long_smallest (long * dest, const size_t k, const gsl_vector_long * v); int gsl_sort_vector_long_largest (long * dest, const size_t k, const gsl_vector_long * v); int gsl_sort_vector_long_smallest_index (size_t * p, const size_t k, const gsl_vector_long * v); int gsl_sort_vector_long_largest_index (size_t * p, const size_t k, const gsl_vector_long * v); __END_DECLS #endif /* __GSL_SORT_VECTOR_LONG_H__ */ gsl/sort/gsl_sort_ulong.h0000644000175000017500000000403313536674414014132 0ustar eddedd/* sort/gsl_sort_ulong.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_ULONG_H__ #define __GSL_SORT_ULONG_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_ulong (unsigned long * data, const size_t stride, const size_t n); void gsl_sort2_ulong (unsigned long * data1, const size_t stride1, unsigned long * data2, const size_t stride2, const size_t n); void gsl_sort_ulong_index (size_t * p, const unsigned long * data, const size_t stride, const size_t n); int gsl_sort_ulong_smallest (unsigned long * dest, const size_t k, const unsigned long * src, const size_t stride, const size_t n); int gsl_sort_ulong_smallest_index (size_t * p, const size_t k, const unsigned long * src, const size_t stride, const size_t n); int gsl_sort_ulong_largest (unsigned long * dest, const size_t k, const unsigned long * src, const size_t stride, const size_t n); int gsl_sort_ulong_largest_index (size_t * p, const size_t k, const unsigned long * src, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_SORT_ULONG_H__ */ gsl/sort/subsetind.c0000644000175000017500000000376013536674414013073 0ustar eddedd/* sort/subsetind.c * * Copyright (C) 2001, 2007 Brian Gough * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 3, or (at your option) any * later version. * * This source is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ #include #include #include #include #include #define BASE_LONG_DOUBLE #include "templates_on.h" #include "subsetind_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "subsetind_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "subsetind_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "subsetind_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "subsetind_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "subsetind_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "subsetind_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "subsetind_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "subsetind_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "subsetind_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "subsetind_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/sort/sort.c0000644000175000017500000000523713536674414012063 0ustar eddedd/* * Implement Heap sort -- direct and indirect sorting * Based on descriptions in Sedgewick "Algorithms in C" * * Copyright (C) 1999 Thomas Walter * * 18 February 2000: Modified for GSL by Brian Gough * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 3, or (at your option) any * later version. * * This source is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ #include #include #include static inline void swap (void *base, size_t size, size_t i, size_t j); static inline void downheap (void *data, const size_t size, const size_t N, size_t k, gsl_comparison_fn_t compare); /* Inline swap function for moving objects around */ static inline void swap (void *base, size_t size, size_t i, size_t j) { register char *a = size * i + (char *) base; register char *b = size * j + (char *) base; register size_t s = size; if (i == j) return; do { char tmp = *a; *a++ = *b; *b++ = tmp; } while (--s > 0); } #define CMP(data,size,j,k) (compare((char *)(data) + (size) * (j), (char *)(data) + (size) * (k))) static inline void downheap (void *data, const size_t size, const size_t N, size_t k, gsl_comparison_fn_t compare) { while (k <= N / 2) { size_t j = 2 * k; if (j < N && CMP (data, size, j, j + 1) < 0) { j++; } if (CMP (data, size, k, j) < 0) { swap (data, size, j, k); } else { break; } k = j; } } void gsl_heapsort (void *data, size_t count, size_t size, gsl_comparison_fn_t compare) { /* Sort the array in ascending order. This is a true inplace algorithm with N log N operations. Worst case (an already sorted array) is something like 20% slower */ size_t N; size_t k; if (count == 0) { return; /* No data to sort */ } /* We have n_data elements, last element is at 'n_data-1', first at '0' Set N to the last element number. */ N = count - 1; k = N / 2; k++; /* Compensate the first use of 'k--' */ do { k--; downheap (data, size, N, k, compare); } while (k > 0); while (N > 0) { /* first swap the elements */ swap (data, size, 0, N); /* then process the heap */ N--; downheap (data, size, N, 0, compare); } } gsl/sort/test_source.c0000644000175000017500000002454313536674414013434 0ustar eddedd/* sort/test_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ void TYPE (test_sort_vector) (size_t N, size_t stride); void FUNCTION (my, initialize) (TYPE (gsl_vector) * v); void FUNCTION (my, randomize) (TYPE (gsl_vector) * v); int FUNCTION (my, check) (TYPE (gsl_vector) * data, TYPE (gsl_vector) * orig); int FUNCTION (my, pcheck) (gsl_permutation * p, TYPE (gsl_vector) * data, TYPE (gsl_vector) * orig); int FUNCTION (my, scheck) (BASE * x, size_t k, TYPE (gsl_vector) * data); int FUNCTION (my, lcheck) (BASE * x, size_t k, TYPE (gsl_vector) * data); int FUNCTION (my, sicheck) (size_t * p, size_t k, gsl_permutation * perm, TYPE (gsl_vector) * data); int FUNCTION (my, licheck) (size_t * p, size_t k, gsl_permutation * perm, TYPE (gsl_vector) * data); void TYPE (test_sort_vector) (size_t N, size_t stride) { int status; size_t k = N/2; TYPE (gsl_block) * b1 = FUNCTION (gsl_block, calloc) (N * stride); TYPE (gsl_block) * b2 = FUNCTION (gsl_block, calloc) (N * stride); TYPE (gsl_block) * b3 = FUNCTION (gsl_block, calloc) (N * stride); TYPE (gsl_vector) * orig = FUNCTION (gsl_vector, alloc_from_block) (b1, 0, N, stride); TYPE (gsl_vector) * data = FUNCTION (gsl_vector, alloc_from_block) (b2, 0, N, stride); TYPE (gsl_vector) * data2 = FUNCTION (gsl_vector, alloc_from_block) (b3, 0, N, stride); BASE * small = (BASE *)malloc(k * sizeof(BASE)); BASE * large = (BASE *)malloc(k * sizeof(BASE)); size_t * index = (size_t *)malloc(k * sizeof(size_t)); gsl_permutation *p = gsl_permutation_alloc (N); FUNCTION (my, initialize) (orig); /* Already sorted */ FUNCTION (gsl_vector, memcpy) (data, orig); status = FUNCTION (gsl_sort_vector, index) (p, data); status |= FUNCTION (my, pcheck) (p, data, orig); gsl_test (status, "indexing " NAME (gsl_vector) ", n = %u, stride = %u, ordered", N, stride); TYPE (gsl_sort_vector) (data); status = FUNCTION (my, check) (data, orig); gsl_test (status, "sorting, " NAME (gsl_vector) ", n = %u, stride = %u, ordered", N, stride); FUNCTION (gsl_sort_vector, smallest) (small, k, data); status = FUNCTION (my, scheck) (small, k, orig); gsl_test (status, "smallest, " NAME (gsl_vector) ", n = %u, stride = %u, ordered", N, stride); FUNCTION (gsl_sort_vector, largest) (large, k, data); status = FUNCTION (my, lcheck) (large, k, orig); gsl_test (status, "largest, " NAME (gsl_vector) ", n = %u, stride = %u, ordered", N, stride); FUNCTION (gsl_sort_vector, smallest_index) (index, k, data); status = FUNCTION (my, sicheck) (index, k, p, data); gsl_test (status, "smallest index, " NAME (gsl_vector) ", n = %u, stride = %u, ordered", N, stride); FUNCTION (gsl_sort_vector, largest_index) (index, k, data); status = FUNCTION (my, licheck) (index, k, p, data); gsl_test (status, "largest index, " NAME (gsl_vector) ", n = %u, stride = %u, ordered", N, stride); /* Reverse the data */ FUNCTION (gsl_vector, memcpy) (data, orig); FUNCTION (gsl_vector, reverse) (data); status = FUNCTION (gsl_sort_vector, index) (p, data); status |= FUNCTION (my, pcheck) (p, data, orig); gsl_test (status, "indexing " NAME (gsl_vector) ", n = %u, stride = %u, reversed", N, stride); TYPE (gsl_sort_vector) (data); status = FUNCTION (my, check) (data, orig); gsl_test (status, "sorting, " NAME (gsl_vector) ", n = %u, stride = %u, reversed", N, stride); FUNCTION (gsl_vector, memcpy) (data, orig); FUNCTION (gsl_vector, reverse) (data); FUNCTION (gsl_vector, memcpy) (data2, data); TYPE (gsl_sort_vector2) (data, data2); status = FUNCTION (my, check) (data, orig); gsl_test (status, "sorting2, " NAME (gsl_vector) ", n = %u, stride = %u, reversed data", N, stride); status = FUNCTION (my, check) (data2, orig); gsl_test (status, "sorting2, " NAME (gsl_vector) ", n = %u, stride = %u, reversed data2", N, stride); FUNCTION (gsl_vector, memcpy) (data, orig); FUNCTION (gsl_vector, reverse) (data); FUNCTION (gsl_sort_vector, smallest) (small, k, data); status = FUNCTION (my, scheck) (small, k, orig); gsl_test (status, "smallest, " NAME (gsl_vector) ", n = %u, stride = %u, reversed", N, stride); FUNCTION (gsl_sort_vector, largest) (large, k, data); status = FUNCTION (my, lcheck) (large, k, orig); gsl_test (status, "largest, " NAME (gsl_vector) ", n = %u, stride = %u, reversed", N, stride); FUNCTION (gsl_sort_vector, smallest_index) (index, k, data); status = FUNCTION (my, sicheck) (index, k, p, data); gsl_test (status, "smallest index, " NAME (gsl_vector) ", n = %u, stride = %u, reversed", N, stride); FUNCTION (gsl_sort_vector, largest_index) (index, k, data); status = FUNCTION (my, licheck) (index, k, p, data); gsl_test (status, "largest index, " NAME (gsl_vector) ", n = %u, stride = %u, reversed", N, stride); /* Perform some shuffling */ FUNCTION (gsl_vector, memcpy) (data, orig); FUNCTION (my, randomize) (data); FUNCTION (gsl_vector, memcpy) (data2, data); TYPE (gsl_sort_vector2) (data, data2); status = FUNCTION (my, check) (data, orig); gsl_test (status, "sorting2, " NAME (gsl_vector) ", n = %u, stride = %u, randomized data", N, stride); status = FUNCTION (my, check) (data2, orig); gsl_test (status, "sorting2, " NAME (gsl_vector) ", n = %u, stride = %u, randomized data2", N, stride); FUNCTION (gsl_vector, memcpy) (data, orig); FUNCTION (my, randomize) (data); FUNCTION (gsl_vector, memcpy) (data2, data); status = FUNCTION (gsl_sort_vector, index) (p, data); status |= FUNCTION (my, pcheck) (p, data, orig); gsl_test (status, "indexing " NAME (gsl_vector) ", n = %u, stride = %u, randomized", N, stride); TYPE (gsl_sort_vector) (data); status = FUNCTION (my, check) (data, orig); gsl_test (status, "sorting, " NAME (gsl_vector) ", n = %u, stride = %u, randomized", N, stride); FUNCTION (gsl_vector, memcpy) (data, data2); FUNCTION (gsl_sort_vector, smallest) (small, k, data); status = FUNCTION (my, scheck) (small, k, orig); gsl_test (status, "smallest, " NAME (gsl_vector) ", n = %u, stride = %u, randomized", N, stride); FUNCTION (gsl_sort_vector, largest) (large, k, data); status = FUNCTION (my, lcheck) (large, k, orig); gsl_test (status, "largest, " NAME (gsl_vector) ", n = %u, stride = %u, randomized", N, stride); FUNCTION (gsl_sort_vector, smallest_index) (index, k, data); status = FUNCTION (my, sicheck) (index, k, p, data); gsl_test (status, "smallest index, " NAME (gsl_vector) ", n = %u, stride = %u, randomized", N, stride); FUNCTION (gsl_sort_vector, largest_index) (index, k, data); status = FUNCTION (my, licheck) (index, k, p, data); gsl_test (status, "largest index, " NAME (gsl_vector) ", n = %u, stride = %u, randomized", N, stride); FUNCTION (gsl_vector, free) (orig); FUNCTION (gsl_vector, free) (data); FUNCTION (gsl_vector, free) (data2); FUNCTION (gsl_block, free) (b1); FUNCTION (gsl_block, free) (b2); FUNCTION (gsl_block, free) (b3); gsl_permutation_free (p); free (small); free (large); free (index); } void FUNCTION (my, initialize) (TYPE (gsl_vector) * v) { size_t i; ATOMIC k = 0; volatile ATOMIC kk; /* Must be sorted initially */ for (i = 0; i < v->size; i++) { kk = k; k++; /* Prevent overflow */ if (k < kk) k = kk; FUNCTION (gsl_vector, set) (v, i, k); } } void FUNCTION (my, randomize) (TYPE (gsl_vector) * v) { size_t i; for (i = 0; i < v->size; i++) { size_t j = urand (v->size); FUNCTION (gsl_vector, swap_elements) (v, i, j); } } int FUNCTION (my, check) (TYPE (gsl_vector) * data, TYPE (gsl_vector) * orig) { size_t i; for (i = 0; i < data->size; i++) { if (FUNCTION (gsl_vector, get) (data, i) != FUNCTION (gsl_vector, get) (orig, i)) { #if DUMP_ERROR size_t j; for (j = 0 ; j < data->size; j++) { printf("%u: " OUT_FORMAT " " OUT_FORMAT " %c\n", j, FUNCTION (gsl_vector, get) (data, j), FUNCTION (gsl_vector, get) (orig, j), (i == j) ? '*' : ' '); } #endif return GSL_FAILURE; } } return GSL_SUCCESS; } int FUNCTION (my, pcheck) (gsl_permutation * p, TYPE (gsl_vector) * data, TYPE (gsl_vector) * orig) { size_t i; for (i = 0; i < p->size; i++) { if (FUNCTION (gsl_vector, get) (data, p->data[i]) != FUNCTION (gsl_vector, get) (orig, i)) { return GSL_FAILURE; } } return GSL_SUCCESS; } int FUNCTION (my, scheck) (BASE * x, size_t k, TYPE (gsl_vector) * data) { size_t i; for (i = 0; i < k; i++) { if (x[i] != FUNCTION (gsl_vector, get) (data, i)) { return GSL_FAILURE; } } return GSL_SUCCESS; } int FUNCTION (my, lcheck) (BASE * x, size_t k, TYPE (gsl_vector) * data) { size_t i; for (i = 0; i < k; i++) { if (x[i] != FUNCTION (gsl_vector, get) (data, data->size - i - 1)) { return GSL_FAILURE; } } return GSL_SUCCESS; } int FUNCTION (my, sicheck) (size_t * p1, size_t k, gsl_permutation * p, TYPE (gsl_vector) * data) { size_t i; for (i = 0; i < k; i++) { if (FUNCTION(gsl_vector,get)(data,p1[i]) != FUNCTION(gsl_vector,get)(data, p->data[i])) { return GSL_FAILURE; } } return GSL_SUCCESS; } int FUNCTION (my, licheck) (size_t * p1, size_t k, gsl_permutation * p, TYPE (gsl_vector) * data) { size_t i; for (i = 0; i < k; i++) { if (FUNCTION(gsl_vector,get)(data,p1[i]) != FUNCTION(gsl_vector,get)(data, p->data[p->size - i - 1])) { return GSL_FAILURE; } } return GSL_SUCCESS; } gsl/sort/TODO0000644000175000017500000000225713536674414011417 0ustar eddedd# -*- org -*- #+CATEGORY: sort * Routines for selecting the k largest or smallest values could use heapsort for speed O(N log k) rather than insertion O(N k). * Sorting of complex arrarys without using additional memory. We try to avoid allocating memory internally in GSL, so internally computing the magnitudes and storing them in a temporary array is undesirable. Obviously a complex array can be sorted using sqrt(x*x + y*y) <=> sqrt(u*u + v*v) (written in a numerically stable way) for every comparison, but this may be unacceptably slow. Maybe not? It is just a constant factor. The square roots could sometimes be avoided by optimization, (x,y) = (MAX(|x|,|y|), MIN(|x|,|y|)) (u,v) = (MAX(|u|,|v|), MIN(|u|,|v|)) if (x < u/sqrt(2)) /* This part is optional optimization */ return -1 if (x > u*sqrt(2)) return +1 if (x == 0 && u == 0) ... if (x == 0) ... if (u == 0) ... t = u*sqrt((1+(v/u)^2)/(1+(y/x)^2)) if (x < t) return -1 if (x > t) return +1 else return 0 but this does depend on the data having sufficient range for the optimization to be worthwhile, otherwise it is an extra cost. gsl/sort/sortind.c0000644000175000017500000000472513536674414012557 0ustar eddedd/* * Implement Heap sort -- direct and indirect sorting * Based on descriptions in Sedgewick "Algorithms in C" * Copyright (C) 1999 Thomas Walter * * 18 February 2000: Modified for GSL by Brian Gough * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 3, or (at your option) any * later version. * * This source is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ #include #include #include static inline void downheap (size_t * p, const void *data, const size_t size, const size_t N, size_t k, gsl_comparison_fn_t compare); #define CMP(data,size,j,k) (compare((const char *)(data) + (size) * (j), (const char *)(data) + (size) * (k))) static inline void downheap (size_t * p, const void *data, const size_t size, const size_t N, size_t k, gsl_comparison_fn_t compare) { const size_t pki = p[k]; while (k <= N / 2) { size_t j = 2 * k; if (j < N && CMP (data, size, p[j], p[j + 1]) < 0) { j++; } if (CMP (data, size, pki, p[j]) >= 0) { break; } p[k] = p[j]; k = j; } p[k] = pki; } int gsl_heapsort_index (size_t * p, const void *data, size_t count, size_t size, gsl_comparison_fn_t compare) { /* Sort the array in ascending order. This is a true inplace algorithm with N log N operations. Worst case (an already sorted array) is something like 20% slower */ size_t i, k, N; if (count == 0) { return GSL_SUCCESS; /* No data to sort */ } for (i = 0; i < count; i++) { p[i] = i ; /* set permutation to identity */ } /* We have n_data elements, last element is at 'n_data-1', first at '0' Set N to the last element number. */ N = count - 1; k = N / 2; k++; /* Compensate the first use of 'k--' */ do { k--; downheap (p, data, size, N, k, compare); } while (k > 0); while (N > 0) { /* first swap the elements */ size_t tmp = p[0]; p[0] = p[N]; p[N] = tmp; /* then process the heap */ N--; downheap (p, data, size, N, 0, compare); } return GSL_SUCCESS; } gsl/sort/gsl_sort_vector_double.h0000644000175000017500000000343113536674414015643 0ustar eddedd/* sort/gsl_sort_vector_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_VECTOR_DOUBLE_H__ #define __GSL_SORT_VECTOR_DOUBLE_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_vector (gsl_vector * v); void gsl_sort_vector2 (gsl_vector * v1, gsl_vector * v2); int gsl_sort_vector_index (gsl_permutation * p, const gsl_vector * v); int gsl_sort_vector_smallest (double * dest, const size_t k, const gsl_vector * v); int gsl_sort_vector_largest (double * dest, const size_t k, const gsl_vector * v); int gsl_sort_vector_smallest_index (size_t * p, const size_t k, const gsl_vector * v); int gsl_sort_vector_largest_index (size_t * p, const size_t k, const gsl_vector * v); __END_DECLS #endif /* __GSL_SORT_VECTOR_DOUBLE_H__ */ gsl/sort/gsl_sort_long_double.h0000644000175000017500000000411113536674414015274 0ustar eddedd/* sort/gsl_sort_long_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_LONG_DOUBLE_H__ #define __GSL_SORT_LONG_DOUBLE_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_long_double (long double * data, const size_t stride, const size_t n); void gsl_sort2_long_double (long double * data1, const size_t stride1, long double * data2, const size_t stride2, const size_t n); void gsl_sort_long_double_index (size_t * p, const long double * data, const size_t stride, const size_t n); int gsl_sort_long_double_smallest (long double * dest, const size_t k, const long double * src, const size_t stride, const size_t n); int gsl_sort_long_double_smallest_index (size_t * p, const size_t k, const long double * src, const size_t stride, const size_t n); int gsl_sort_long_double_largest (long double * dest, const size_t k, const long double * src, const size_t stride, const size_t n); int gsl_sort_long_double_largest_index (size_t * p, const size_t k, const long double * src, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_SORT_LONG_DOUBLE_H__ */ gsl/sort/gsl_sort_uint.h0000644000175000017500000000400613536674414013765 0ustar eddedd/* sort/gsl_sort_uint.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_UINT_H__ #define __GSL_SORT_UINT_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_uint (unsigned int * data, const size_t stride, const size_t n); void gsl_sort2_uint (unsigned int * data1, const size_t stride1, unsigned int * data2, const size_t stride2, const size_t n); void gsl_sort_uint_index (size_t * p, const unsigned int * data, const size_t stride, const size_t n); int gsl_sort_uint_smallest (unsigned int * dest, const size_t k, const unsigned int * src, const size_t stride, const size_t n); int gsl_sort_uint_smallest_index (size_t * p, const size_t k, const unsigned int * src, const size_t stride, const size_t n); int gsl_sort_uint_largest (unsigned int * dest, const size_t k, const unsigned int * src, const size_t stride, const size_t n); int gsl_sort_uint_largest_index (size_t * p, const size_t k, const unsigned int * src, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_SORT_UINT_H__ */ gsl/sort/gsl_sort_vector_ulong.h0000644000175000017500000000357413536674414015525 0ustar eddedd/* sort/gsl_sort_vector_ulong.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_VECTOR_ULONG_H__ #define __GSL_SORT_VECTOR_ULONG_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_vector_ulong (gsl_vector_ulong * v); void gsl_sort_vector2_ulong (gsl_vector_ulong * v1, gsl_vector_ulong * v2); int gsl_sort_vector_ulong_index (gsl_permutation * p, const gsl_vector_ulong * v); int gsl_sort_vector_ulong_smallest (unsigned long * dest, const size_t k, const gsl_vector_ulong * v); int gsl_sort_vector_ulong_largest (unsigned long * dest, const size_t k, const gsl_vector_ulong * v); int gsl_sort_vector_ulong_smallest_index (size_t * p, const size_t k, const gsl_vector_ulong * v); int gsl_sort_vector_ulong_largest_index (size_t * p, const size_t k, const gsl_vector_ulong * v); __END_DECLS #endif /* __GSL_SORT_VECTOR_ULONG_H__ */ gsl/sort/gsl_sort_float.h0000644000175000017500000000371313536674414014117 0ustar eddedd/* sort/gsl_sort_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_FLOAT_H__ #define __GSL_SORT_FLOAT_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_float (float * data, const size_t stride, const size_t n); void gsl_sort2_float (float * data1, const size_t stride1, float * data2, const size_t stride2, const size_t n); void gsl_sort_float_index (size_t * p, const float * data, const size_t stride, const size_t n); int gsl_sort_float_smallest (float * dest, const size_t k, const float * src, const size_t stride, const size_t n); int gsl_sort_float_smallest_index (size_t * p, const size_t k, const float * src, const size_t stride, const size_t n); int gsl_sort_float_largest (float * dest, const size_t k, const float * src, const size_t stride, const size_t n); int gsl_sort_float_largest_index (size_t * p, const size_t k, const float * src, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_SORT_FLOAT_H__ */ gsl/sort/test.c0000644000175000017500000000647313536674414012056 0ustar eddedd/* sort/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include size_t urand (size_t); #include "test_heapsort.c" #define BASE_LONG_DOUBLE #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_CHAR int main (void) { size_t i, s; gsl_ieee_env_setup (); /* Test for lengths of 1 ... 31, then 32, 64, 128, 256, ... */ for (i = 1; i < 1024; i = (i < 32) ? i + 1 : 2 * i) test_heapsort (i); for (i = 1; i < 1024; i = (i < 32) ? i + 1 : 2 * i) { for (s = 1; s < 4; s++) { test_sort_vector (i, s); test_sort_vector_float (i, s); test_sort_vector_long_double (i, s); test_sort_vector_ulong (i, s); test_sort_vector_long (i, s); test_sort_vector_uint (i, s); test_sort_vector_int (i, s); test_sort_vector_ushort (i, s); test_sort_vector_short (i, s); test_sort_vector_uchar (i, s); test_sort_vector_char (i, s); } } exit (gsl_test_summary ()); } size_t urand (size_t N) { static unsigned long int x = 1; x = (1103515245 * x + 12345) & 0x7fffffffUL; return (size_t) ((x / 2147483648.0) * N); } gsl/sort/gsl_sort_vector_uchar.h0000644000175000017500000000357413536674414015503 0ustar eddedd/* sort/gsl_sort_vector_uchar.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_VECTOR_UCHAR_H__ #define __GSL_SORT_VECTOR_UCHAR_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_vector_uchar (gsl_vector_uchar * v); void gsl_sort_vector2_uchar (gsl_vector_uchar * v1, gsl_vector_uchar * v2); int gsl_sort_vector_uchar_index (gsl_permutation * p, const gsl_vector_uchar * v); int gsl_sort_vector_uchar_smallest (unsigned char * dest, const size_t k, const gsl_vector_uchar * v); int gsl_sort_vector_uchar_largest (unsigned char * dest, const size_t k, const gsl_vector_uchar * v); int gsl_sort_vector_uchar_smallest_index (size_t * p, const size_t k, const gsl_vector_uchar * v); int gsl_sort_vector_uchar_largest_index (size_t * p, const size_t k, const gsl_vector_uchar * v); __END_DECLS #endif /* __GSL_SORT_VECTOR_UCHAR_H__ */ gsl/sort/gsl_sort.h0000644000175000017500000000066313536674414012733 0ustar eddedd#ifndef __GSL_SORT_H__ #define __GSL_SORT_H__ #include #include #include #include #include #include #include #include #include #include #include #endif /* __GSL_SORT_H__ */ gsl/sort/gsl_sort_vector_int.h0000644000175000017500000000350013536674414015160 0ustar eddedd/* sort/gsl_sort_vector_int.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_VECTOR_INT_H__ #define __GSL_SORT_VECTOR_INT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_vector_int (gsl_vector_int * v); void gsl_sort_vector2_int (gsl_vector_int * v1, gsl_vector_int * v2); int gsl_sort_vector_int_index (gsl_permutation * p, const gsl_vector_int * v); int gsl_sort_vector_int_smallest (int * dest, const size_t k, const gsl_vector_int * v); int gsl_sort_vector_int_largest (int * dest, const size_t k, const gsl_vector_int * v); int gsl_sort_vector_int_smallest_index (size_t * p, const size_t k, const gsl_vector_int * v); int gsl_sort_vector_int_largest_index (size_t * p, const size_t k, const gsl_vector_int * v); __END_DECLS #endif /* __GSL_SORT_VECTOR_INT_H__ */ gsl/sort/gsl_sort_ushort.h0000644000175000017500000000406013536674414014332 0ustar eddedd/* sort/gsl_sort_ushort.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_USHORT_H__ #define __GSL_SORT_USHORT_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_ushort (unsigned short * data, const size_t stride, const size_t n); void gsl_sort2_ushort (unsigned short * data1, const size_t stride1, unsigned short * data2, const size_t stride2, const size_t n); void gsl_sort_ushort_index (size_t * p, const unsigned short * data, const size_t stride, const size_t n); int gsl_sort_ushort_smallest (unsigned short * dest, const size_t k, const unsigned short * src, const size_t stride, const size_t n); int gsl_sort_ushort_smallest_index (size_t * p, const size_t k, const unsigned short * src, const size_t stride, const size_t n); int gsl_sort_ushort_largest (unsigned short * dest, const size_t k, const unsigned short * src, const size_t stride, const size_t n); int gsl_sort_ushort_largest_index (size_t * p, const size_t k, const unsigned short * src, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_SORT_USHORT_H__ */ gsl/sort/gsl_sort_vector_long_double.h0000644000175000017500000000376013536674414016667 0ustar eddedd/* sort/gsl_sort_vector_long_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_VECTOR_LONG_DOUBLE_H__ #define __GSL_SORT_VECTOR_LONG_DOUBLE_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_vector_long_double (gsl_vector_long_double * v); void gsl_sort_vector2_long_double (gsl_vector_long_double * v1, gsl_vector_long_double * v2); int gsl_sort_vector_long_double_index (gsl_permutation * p, const gsl_vector_long_double * v); int gsl_sort_vector_long_double_smallest (long double * dest, const size_t k, const gsl_vector_long_double * v); int gsl_sort_vector_long_double_largest (long double * dest, const size_t k, const gsl_vector_long_double * v); int gsl_sort_vector_long_double_smallest_index (size_t * p, const size_t k, const gsl_vector_long_double * v); int gsl_sort_vector_long_double_largest_index (size_t * p, const size_t k, const gsl_vector_long_double * v); __END_DECLS #endif /* __GSL_SORT_VECTOR_LONG_DOUBLE_H__ */ gsl/sort/gsl_sort_short.h0000644000175000017500000000371313536674414014151 0ustar eddedd/* sort/gsl_sort_short.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_SHORT_H__ #define __GSL_SORT_SHORT_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_short (short * data, const size_t stride, const size_t n); void gsl_sort2_short (short * data1, const size_t stride1, short * data2, const size_t stride2, const size_t n); void gsl_sort_short_index (size_t * p, const short * data, const size_t stride, const size_t n); int gsl_sort_short_smallest (short * dest, const size_t k, const short * src, const size_t stride, const size_t n); int gsl_sort_short_smallest_index (size_t * p, const size_t k, const short * src, const size_t stride, const size_t n); int gsl_sort_short_largest (short * dest, const size_t k, const short * src, const size_t stride, const size_t n); int gsl_sort_short_largest_index (size_t * p, const size_t k, const short * src, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_SORT_SHORT_H__ */ gsl/sort/gsl_sort_vector_char.h0000644000175000017500000000352613536674414015313 0ustar eddedd/* sort/gsl_sort_vector_char.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SORT_VECTOR_CHAR_H__ #define __GSL_SORT_VECTOR_CHAR_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_sort_vector_char (gsl_vector_char * v); void gsl_sort_vector2_char (gsl_vector_char * v1, gsl_vector_char * v2); int gsl_sort_vector_char_index (gsl_permutation * p, const gsl_vector_char * v); int gsl_sort_vector_char_smallest (char * dest, const size_t k, const gsl_vector_char * v); int gsl_sort_vector_char_largest (char * dest, const size_t k, const gsl_vector_char * v); int gsl_sort_vector_char_smallest_index (size_t * p, const size_t k, const gsl_vector_char * v); int gsl_sort_vector_char_largest_index (size_t * p, const size_t k, const gsl_vector_char * v); __END_DECLS #endif /* __GSL_SORT_VECTOR_CHAR_H__ */ gsl/aclocal.m40000664000175000017500000133206314057135461011575 0ustar eddedd# generated automatically by aclocal 1.16.3 -*- Autoconf -*- # Copyright (C) 1996-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],, [m4_warning([this file was generated for autoconf 2.71. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ]) # serial 58 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[[012]][[,.]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS # Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) # ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4179 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.6]) m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6' macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software # Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) # Copyright (C) 2002-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.3], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.3])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR gsl/BUGS0000644000175000017500000000000013536674414010403 0ustar eddeddgsl/Makefile.in0000664000175000017500000016123014057135461011775 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # AUTOMAKE_OPTIONS = readme-alpha VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = gsl-randist$(EXEEXT) gsl-histogram$(EXEEXT) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(noinst_HEADERS) $(pkginclude_HEADERS) \ $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = gsl_version.h gsl.spec CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" \ "$(DESTDIR)$(bindir)" "$(DESTDIR)$(m4datadir)" \ "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)" PROGRAMS = $(bin_PROGRAMS) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libgsl_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(SUBLIBS) am_libgsl_la_OBJECTS = version.lo libgsl_la_OBJECTS = $(am_libgsl_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libgsl_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libgsl_la_LDFLAGS) $(LDFLAGS) -o $@ am_gsl_histogram_OBJECTS = gsl-histogram.$(OBJEXT) gsl_histogram_OBJECTS = $(am_gsl_histogram_OBJECTS) gsl_histogram_DEPENDENCIES = libgsl.la cblas/libgslcblas.la am_gsl_randist_OBJECTS = gsl-randist.$(OBJEXT) gsl_randist_OBJECTS = $(am_gsl_randist_OBJECTS) gsl_randist_DEPENDENCIES = libgsl.la cblas/libgslcblas.la SCRIPTS = $(bin_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/gsl-histogram.Po \ ./$(DEPDIR)/gsl-randist.Po ./$(DEPDIR)/version.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgsl_la_SOURCES) $(gsl_histogram_SOURCES) \ $(gsl_randist_SOURCES) DIST_SOURCES = $(libgsl_la_SOURCES) $(gsl_histogram_SOURCES) \ $(gsl_randist_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(m4data_DATA) $(pkgconfig_DATA) HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope check recheck distdir distdir-am dist dist-all \ distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/gsl.spec.in $(srcdir)/gsl_version.h.in AUTHORS \ COPYING ChangeLog INSTALL NEWS README THANKS TODO compile \ config.guess config.sub depcomp install-sh ltmain.sh mdate-sh \ missing mkinstalldirs test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = gsl utils sys test err bst const complex cheb block vector matrix permutation combination multiset sort ieee-utils cblas blas linalg eigen specfunc dht qrng rng randist fft poly fit multifit multifit_nlinear multilarge multilarge_nlinear filter movstat rstat statistics siman sum integration interpolation histogram ode-initval ode-initval2 roots multiroots min multimin monte ntuple diff deriv cdf wavelet bspline spblas spmatrix splinalg doc SUBLIBS = block/libgslblock.la blas/libgslblas.la \ bspline/libgslbspline.la bst/libgslbst.la \ complex/libgslcomplex.la cheb/libgslcheb.la dht/libgsldht.la \ diff/libgsldiff.la deriv/libgslderiv.la eigen/libgsleigen.la \ err/libgslerr.la fft/libgslfft.la filter/libgslfilter.la \ fit/libgslfit.la histogram/libgslhistogram.la \ ieee-utils/libgslieeeutils.la integration/libgslintegration.la \ interpolation/libgslinterpolation.la linalg/libgsllinalg.la \ matrix/libgslmatrix.la min/libgslmin.la monte/libgslmonte.la \ multifit/libgslmultifit.la \ multifit_nlinear/libgslmultifit_nlinear.la \ multilarge/libgslmultilarge.la \ multilarge_nlinear/libgslmultilarge_nlinear.la \ multimin/libgslmultimin.la multiroots/libgslmultiroots.la \ ntuple/libgslntuple.la ode-initval/libgslodeiv.la \ ode-initval2/libgslodeiv2.la permutation/libgslpermutation.la \ combination/libgslcombination.la multiset/libgslmultiset.la \ poly/libgslpoly.la qrng/libgslqrng.la randist/libgslrandist.la \ rng/libgslrng.la roots/libgslroots.la siman/libgslsiman.la \ sort/libgslsort.la specfunc/libgslspecfunc.la \ movstat/libgslmovstat.la rstat/libgslrstat.la \ statistics/libgslstatistics.la sum/libgslsum.la \ sys/libgslsys.la test/libgsltest.la utils/libutils.la \ vector/libgslvector.la cdf/libgslcdf.la \ wavelet/libgslwavelet.la spmatrix/libgslspmatrix.la \ spblas/libgslspblas.la splinalg/libgslsplinalg.la pkginclude_HEADERS = gsl_math.h gsl_pow_int.h gsl_nan.h gsl_machine.h gsl_mode.h gsl_precision.h gsl_types.h gsl_version.h gsl_minmax.h gsl_inline.h bin_SCRIPTS = gsl-config pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gsl.pc CLEANFILES = gsl.pc gsl-config EXTRA_DIST = autogen.sh gsl-config.in gsl.pc.in configure.ac THANKS BUGS gsl.spec.in gsl.m4 test_gsl_histogram.sh pkgconfig.test lib_LTLIBRARIES = libgsl.la libgsl_la_SOURCES = version.c libgsl_la_LIBADD = $(GSL_LIBADD) $(SUBLIBS) libgsl_la_LDFLAGS = $(GSL_LDFLAGS) -version-info $(GSL_LT_VERSION) noinst_HEADERS = templates_on.h templates_off.h build.h m4datadir = $(datadir)/aclocal m4data_DATA = gsl.m4 gsl_randist_SOURCES = gsl-randist.c gsl_randist_LDADD = libgsl.la cblas/libgslcblas.la gsl_histogram_SOURCES = gsl-histogram.c gsl_histogram_LDADD = libgsl.la cblas/libgslcblas.la check_SCRIPTS = test_gsl_histogram.sh pkgconfig.test TESTS = test_gsl_histogram.sh pkgconfig.test #bin_PROGRAMS = main dummy #dummy_SOURCES = version.c #dummy_LDADD = $(SUBLIBS) #main_SOURCES = version.c env.c #main_LDADD = libgsl.la edit = $(SED) \ -e 's|@prefix[@]|$(prefix)|g' \ -e 's|@exec_prefix[@]|$(exec_prefix)|g' \ -e 's|@libdir[@]|$(libdir)|g' \ -e 's|@includedir[@]|$(includedir)|g' \ -e 's|@GSL_CFLAGS[@]|$(GSL_CFLAGS)|g' \ -e 's|@GSL_LIBM[@]|$(GSL_LIBM)|g' \ -e 's|@GSL_LIBS[@]|$(GSL_LIBS)|g' \ -e 's|@LIBS[@]|$(LIBS)|g' \ -e 's|@VERSION[@]|$(VERSION)|g' all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 gsl_version.h: $(top_builddir)/config.status $(srcdir)/gsl_version.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ gsl.spec: $(top_builddir)/config.status $(srcdir)/gsl.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgsl.la: $(libgsl_la_OBJECTS) $(libgsl_la_DEPENDENCIES) $(EXTRA_libgsl_la_DEPENDENCIES) $(AM_V_CCLD)$(libgsl_la_LINK) -rpath $(libdir) $(libgsl_la_OBJECTS) $(libgsl_la_LIBADD) $(LIBS) gsl-histogram$(EXEEXT): $(gsl_histogram_OBJECTS) $(gsl_histogram_DEPENDENCIES) $(EXTRA_gsl_histogram_DEPENDENCIES) @rm -f gsl-histogram$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gsl_histogram_OBJECTS) $(gsl_histogram_LDADD) $(LIBS) gsl-randist$(EXEEXT): $(gsl_randist_OBJECTS) $(gsl_randist_DEPENDENCIES) $(EXTRA_gsl_randist_DEPENDENCIES) @rm -f gsl-randist$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gsl_randist_OBJECTS) $(gsl_randist_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsl-histogram.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsl-randist.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-m4dataDATA: $(m4data_DATA) @$(NORMAL_INSTALL) @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(m4datadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(m4datadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(m4datadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(m4datadir)" || exit $$?; \ done uninstall-m4dataDATA: @$(NORMAL_UNINSTALL) @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(m4datadir)'; $(am__uninstall_files_from_dir) install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_SCRIPTS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test_gsl_histogram.sh.log: test_gsl_histogram.sh @p='test_gsl_histogram.sh'; \ b='test_gsl_histogram.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-recursive all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(SCRIPTS) $(DATA) \ $(HEADERS) config.h install-binPROGRAMS: install-libLTLIBRARIES installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(m4datadir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f ./$(DEPDIR)/gsl-histogram.Po -rm -f ./$(DEPDIR)/gsl-randist.Po -rm -f ./$(DEPDIR)/version.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-m4dataDATA install-pkgconfigDATA \ install-pkgincludeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-binSCRIPTS \ install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f ./$(DEPDIR)/gsl-histogram.Po -rm -f ./$(DEPDIR)/gsl-randist.Po -rm -f ./$(DEPDIR)/version.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \ uninstall-libLTLIBRARIES uninstall-m4dataDATA \ uninstall-pkgconfigDATA uninstall-pkgincludeHEADERS .MAKE: $(am__recursive_targets) all check-am install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles am--refresh check check-TESTS check-am clean \ clean-binPROGRAMS clean-cscope clean-generic \ clean-libLTLIBRARIES clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \ distclean distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-binSCRIPTS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-m4dataDATA install-man install-pdf install-pdf-am \ install-pkgconfigDATA install-pkgincludeHEADERS install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-binSCRIPTS \ uninstall-libLTLIBRARIES uninstall-m4dataDATA \ uninstall-pkgconfigDATA uninstall-pkgincludeHEADERS .PRECIOUS: Makefile gsl-config gsl.pc: Makefile @rm -f $@ $@.tmp @$(edit) '$(srcdir)/$@.in' >>$@.tmp @chmod a-w $@.tmp @mv $@.tmp $@ @echo creating $@ gsl-config: $(srcdir)/gsl-config.in gsl.pc: $(srcdir)/gsl.pc.in # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/templates_off.h0000644000175000017500000000204113536674414012730 0ustar eddedd#ifdef FUNCTION #undef FUNCTION #endif #ifdef CONCAT4 #undef CONCAT4 #endif #ifdef CONCAT4x #undef CONCAT4x #endif #ifdef CONCAT3 #undef CONCAT3 #endif #ifdef CONCAT3x #undef CONCAT3x #endif #ifdef CONCAT2 #undef CONCAT2 #endif #ifdef CONCAT2x #undef CONCAT2x #endif #ifdef TYPE #undef TYPE #endif #ifdef REAL_TYPE #undef REAL_TYPE #endif #ifdef QUALIFIED_TYPE #undef QUALIFIED_TYPE #endif #ifdef VIEW #undef VIEW #endif #ifdef REAL_VIEW #undef REAL_VIEW #endif #ifdef QUALIFIED_VIEW #undef QUALIFIED_VIEW #endif #ifdef QUALIFIED_REAL_TYPE #undef QUALIFIED_REAL_TYPE #endif #ifdef QUALIFIED_REAL_VIEW #undef QUALIFIED_REAL_VIEW #endif #ifdef USES_LONGDOUBLE #undef USES_LONGDOUBLE #endif #ifdef SHORT_REAL #undef SHORT_REAL #endif #ifndef USE_QUALIFIER #ifdef QUALIFIER #undef QUALIFIER #endif #endif #undef BASE #undef BASE_EPSILON #undef SHORT #undef ATOMIC #undef MULTIPLICITY #undef IN_FORMAT #undef OUT_FORMAT #undef ATOMIC_IO #undef ZERO #undef ONE #undef NAME #undef STRING #undef EXPAND #undef UNSIGNED #ifdef FP #undef FP #endif gsl/gsl_mode.h0000644000175000017500000000454513536674414011704 0ustar eddedd/* gsl_mode.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: B. Gough and G. Jungman */ #ifndef __GSL_MODE_H__ #define __GSL_MODE_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Some functions can take a mode argument. This * is a rough method to do things like control * the precision of the algorithm. This mainly * occurs in special functions, but we figured * it was ok to have a general facility. * * The mode type is 32-bit field. Most of * the fields are currently unused. Users * '|' various predefined constants to get * a desired mode. */ typedef unsigned int gsl_mode_t; /* Here are the predefined constants. * Note that the precision constants * are special because they are used * to index arrays, so do not change * them. The precision information is * in the low order 3 bits of gsl_mode_t * (the third bit is currently unused). */ /* Note that "0" is double precision, * so that you get that by default if * you forget a flag. */ #define GSL_PREC_DOUBLE 0 #define GSL_PREC_SINGLE 1 #define GSL_PREC_APPROX 2 #ifdef HAVE_INLINE INLINE_FUN unsigned int GSL_MODE_PREC(gsl_mode_t mt); INLINE_FUN unsigned int GSL_MODE_PREC(gsl_mode_t mt) { return (mt & (unsigned int)7); } #else /* HAVE_INLINE */ #define GSL_MODE_PREC(mt) ((mt) & (unsigned int)7) #endif /* HAVE_INLINE */ /* Here are some predefined generic modes. */ #define GSL_MODE_DEFAULT 0 __END_DECLS #endif /* __GSL_MODE_H__ */ gsl/gsl.m40000644000175000017500000001174313536674414010767 0ustar eddedd# Configure path for the GNU Scientific Library # Christopher R. Gabriel , April 2000 AC_DEFUN([AX_PATH_GSL], [ AC_ARG_WITH(gsl-prefix,[ --with-gsl-prefix=PFX Prefix where GSL is installed (optional)], gsl_prefix="$withval", gsl_prefix="") AC_ARG_WITH(gsl-exec-prefix,[ --with-gsl-exec-prefix=PFX Exec prefix where GSL is installed (optional)], gsl_exec_prefix="$withval", gsl_exec_prefix="") AC_ARG_ENABLE(gsltest, [ --disable-gsltest Do not try to compile and run a test GSL program], , enable_gsltest=yes) if test "x${GSL_CONFIG+set}" != xset ; then if test "x$gsl_prefix" != x ; then GSL_CONFIG="$gsl_prefix/bin/gsl-config" fi if test "x$gsl_exec_prefix" != x ; then GSL_CONFIG="$gsl_exec_prefix/bin/gsl-config" fi fi AC_PATH_PROG(GSL_CONFIG, gsl-config, no) min_gsl_version=ifelse([$1], ,0.2.5,$1) AC_MSG_CHECKING(for GSL - version >= $min_gsl_version) no_gsl="" if test "$GSL_CONFIG" = "no" ; then no_gsl=yes else GSL_CFLAGS=`$GSL_CONFIG --cflags` GSL_LIBS=`$GSL_CONFIG --libs` gsl_major_version=`$GSL_CONFIG --version | \ sed 's/^\([[0-9]]*\).*/\1/'` if test "x${gsl_major_version}" = "x" ; then gsl_major_version=0 fi gsl_minor_version=`$GSL_CONFIG --version | \ sed 's/^\([[0-9]]*\)\.\{0,1\}\([[0-9]]*\).*/\2/'` if test "x${gsl_minor_version}" = "x" ; then gsl_minor_version=0 fi gsl_micro_version=`$GSL_CONFIG --version | \ sed 's/^\([[0-9]]*\)\.\{0,1\}\([[0-9]]*\)\.\{0,1\}\([[0-9]]*\).*/\3/'` if test "x${gsl_micro_version}" = "x" ; then gsl_micro_version=0 fi if test "x$enable_gsltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GSL_CFLAGS" LIBS="$LIBS $GSL_LIBS" rm -f conf.gsltest AC_TRY_RUN([ #include #include #include char* my_strdup (const char *str); char* my_strdup (const char *str) { char *new_str; if (str) { new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main (void) { int major = 0, minor = 0, micro = 0; int n; char *tmp_version; system ("touch conf.gsltest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_gsl_version"); n = sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) ; if (n != 2 && n != 3) { printf("%s, bad version string\n", "$min_gsl_version"); exit(1); } if (($gsl_major_version > major) || (($gsl_major_version == major) && ($gsl_minor_version > minor)) || (($gsl_major_version == major) && ($gsl_minor_version == minor) && ($gsl_micro_version >= micro))) { exit(0); } else { exit(1); } } ],, no_gsl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gsl" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$GSL_CONFIG" = "no" ; then echo "*** The gsl-config script installed by GSL could not be found" echo "*** If GSL was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GSL_CONFIG environment variable to the" echo "*** full path to gsl-config." else if test -f conf.gsltest ; then : else echo "*** Could not run GSL test program, checking why..." CFLAGS="$CFLAGS $GSL_CFLAGS" LIBS="$LIBS $GSL_LIBS" AC_TRY_LINK([ #include ], [ return 0; ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GSL or finding the wrong" echo "*** version of GSL. If it is not finding GSL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GSL was incorrectly installed" echo "*** or that you have moved GSL since it was installed. In the latter case, you" echo "*** may want to edit the gsl-config script: $GSL_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi # GSL_CFLAGS="" # GSL_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GSL_CFLAGS) AC_SUBST(GSL_LIBS) rm -f conf.gsltest ]) AU_ALIAS([AM_PATH_GSL], [AX_PATH_GSL]) gsl/specfunc/0000755000175000017500000000000014057135461011531 5ustar eddeddgsl/specfunc/eval.h0000644000175000017500000000064013536674414012640 0ustar eddedd/* evaluate a function discarding the status value in a modifiable way */ #define EVAL_RESULT(fn) \ gsl_sf_result result; \ int status = fn; \ if (status != GSL_SUCCESS) { \ GSL_ERROR_VAL(#fn, status, result.val); \ } ; \ return result.val; #define EVAL_DOUBLE(fn) \ int status = fn; \ if (status != GSL_SUCCESS) { \ GSL_ERROR_VAL(#fn, status, result); \ } ; \ return result; gsl/specfunc/gsl_sf_airy.h0000644000175000017500000000717513536674414014224 0ustar eddedd/* specfunc/gsl_sf_airy.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_AIRY_H__ #define __GSL_SF_AIRY_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Airy function Ai(x) * * exceptions: GSL_EUNDRFLW */ int gsl_sf_airy_Ai_e(const double x, const gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_airy_Ai(const double x, gsl_mode_t mode); /* Airy function Bi(x) * * exceptions: GSL_EOVRFLW */ int gsl_sf_airy_Bi_e(const double x, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_airy_Bi(const double x, gsl_mode_t mode); /* scaled Ai(x): * Ai(x) x < 0 * exp(+2/3 x^{3/2}) Ai(x) x > 0 * * exceptions: none */ int gsl_sf_airy_Ai_scaled_e(const double x, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_airy_Ai_scaled(const double x, gsl_mode_t mode); /* scaled Bi(x): * Bi(x) x < 0 * exp(-2/3 x^{3/2}) Bi(x) x > 0 * * exceptions: none */ int gsl_sf_airy_Bi_scaled_e(const double x, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_airy_Bi_scaled(const double x, gsl_mode_t mode); /* derivative Ai'(x) * * exceptions: GSL_EUNDRFLW */ int gsl_sf_airy_Ai_deriv_e(const double x, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_airy_Ai_deriv(const double x, gsl_mode_t mode); /* derivative Bi'(x) * * exceptions: GSL_EOVRFLW */ int gsl_sf_airy_Bi_deriv_e(const double x, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_airy_Bi_deriv(const double x, gsl_mode_t mode); /* scaled derivative Ai'(x): * Ai'(x) x < 0 * exp(+2/3 x^{3/2}) Ai'(x) x > 0 * * exceptions: none */ int gsl_sf_airy_Ai_deriv_scaled_e(const double x, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_airy_Ai_deriv_scaled(const double x, gsl_mode_t mode); /* scaled derivative: * Bi'(x) x < 0 * exp(-2/3 x^{3/2}) Bi'(x) x > 0 * * exceptions: none */ int gsl_sf_airy_Bi_deriv_scaled_e(const double x, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_airy_Bi_deriv_scaled(const double x, gsl_mode_t mode); /* Zeros of Ai(x) */ int gsl_sf_airy_zero_Ai_e(unsigned int s, gsl_sf_result * result); double gsl_sf_airy_zero_Ai(unsigned int s); /* Zeros of Bi(x) */ int gsl_sf_airy_zero_Bi_e(unsigned int s, gsl_sf_result * result); double gsl_sf_airy_zero_Bi(unsigned int s); /* Zeros of Ai'(x) */ int gsl_sf_airy_zero_Ai_deriv_e(unsigned int s, gsl_sf_result * result); double gsl_sf_airy_zero_Ai_deriv(unsigned int s); /* Zeros of Bi'(x) */ int gsl_sf_airy_zero_Bi_deriv_e(unsigned int s, gsl_sf_result * result); double gsl_sf_airy_zero_Bi_deriv(unsigned int s); __END_DECLS #endif /* __GSL_SF_AIRY_H__ */ gsl/specfunc/gsl_sf_debye.h0000644000175000017500000000437713536674414014351 0ustar eddedd/* specfunc/gsl_sf_debye.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ /* augmented by D_5(x) and D_6(x) by Richard J. Mathar, 2005-11-08 */ #ifndef __GSL_SF_DEBYE_H__ #define __GSL_SF_DEBYE_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* D_n(x) := n/x^n Integrate[t^n/(e^t - 1), {t,0,x}] */ /* D_1(x) * * exceptions: GSL_EDOM */ int gsl_sf_debye_1_e(const double x, gsl_sf_result * result); double gsl_sf_debye_1(const double x); /* D_2(x) * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_debye_2_e(const double x, gsl_sf_result * result); double gsl_sf_debye_2(const double x); /* D_3(x) * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_debye_3_e(const double x, gsl_sf_result * result); double gsl_sf_debye_3(const double x); /* D_4(x) * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_debye_4_e(const double x, gsl_sf_result * result); double gsl_sf_debye_4(const double x); /* D_5(x) * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_debye_5_e(const double x, gsl_sf_result * result); double gsl_sf_debye_5(const double x); /* D_6(x) * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_debye_6_e(const double x, gsl_sf_result * result); double gsl_sf_debye_6(const double x); __END_DECLS #endif /* __GSL_SF_DEBYE_H__ */ gsl/specfunc/error.h0000644000175000017500000000366113536674414013050 0ustar eddedd#define OVERFLOW_ERROR(result) do { (result)->val = GSL_POSINF; (result)->err = GSL_POSINF; GSL_ERROR ("overflow", GSL_EOVRFLW); } while(0) #define UNDERFLOW_ERROR(result) do { (result)->val = 0.0; (result)->err = GSL_DBL_MIN; GSL_ERROR ("underflow", GSL_EUNDRFLW); } while(0) #define INTERNAL_OVERFLOW_ERROR(result) do { (result)->val = GSL_POSINF; (result)->err = GSL_POSINF; return GSL_EOVRFLW; } while(0) #define INTERNAL_UNDERFLOW_ERROR(result) do { (result)->val = 0.0; (result)->err = GSL_DBL_MIN; return GSL_EUNDRFLW; } while(0) #define DOMAIN_ERROR(result) do { (result)->val = GSL_NAN; (result)->err = GSL_NAN; GSL_ERROR ("domain error", GSL_EDOM); } while(0) #define DOMAIN_ERROR_MSG(msg, result) do { (result)->val = GSL_NAN; (result)->err = GSL_NAN; GSL_ERROR ((msg), GSL_EDOM); } while(0) #define DOMAIN_ERROR_E10(result) do { (result)->val = GSL_NAN; (result)->err = GSL_NAN; (result)->e10 = 0 ; GSL_ERROR ("domain error", GSL_EDOM); } while(0) #define OVERFLOW_ERROR_E10(result) do { (result)->val = GSL_POSINF; (result)->err = GSL_POSINF; (result)->e10 = 0; GSL_ERROR ("overflow", GSL_EOVRFLW); } while(0) #define UNDERFLOW_ERROR_E10(result) do { (result)->val = 0.0; (result)->err = GSL_DBL_MIN; (result)->e10 = 0; GSL_ERROR ("underflow", GSL_EUNDRFLW); } while(0) #define OVERFLOW_ERROR_2(r1,r2) do { (r1)->val = GSL_POSINF; (r1)->err = GSL_POSINF; (r2)->val = GSL_POSINF ; (r2)->err=GSL_POSINF; GSL_ERROR ("overflow", GSL_EOVRFLW); } while(0) #define UNDERFLOW_ERROR_2(r1,r2) do { (r1)->val = 0.0; (r1)->err = GSL_DBL_MIN; (r2)->val = 0.0 ; (r2)->err = GSL_DBL_MIN; GSL_ERROR ("underflow", GSL_EUNDRFLW); } while(0) #define DOMAIN_ERROR_2(r1,r2) do { (r1)->val = GSL_NAN; (r1)->err = GSL_NAN; (r2)->val = GSL_NAN; (r2)->err = GSL_NAN; GSL_ERROR ("domain error", GSL_EDOM); } while(0) #define MAXITER_ERROR(result) do { (result)->val = GSL_NAN; (result)->err = GSL_NAN; GSL_ERROR ("too many iterations error", GSL_EMAXITER); } while(0) gsl/specfunc/mathieu_coeff.c0000644000175000017500000002045713536674414014512 0ustar eddedd/* specfunc/mathieu_coeff.c * * Copyright (C) 2002 Lowell Johnson * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Author: L. Johnson */ #include #include #include #include /***************************************************************************** * backward_recurse * * Purpose: ****************************************************************************/ static void backward_recurse_c(double aa, double qq, double xx, double *ff, double *gx, int even_odd, int ni) { int ii, nn; double g1; g1 = *gx; ff[ni] = xx; if (even_odd == 0) { for (ii=0; ii GSL_SF_MATHIEU_COEFF) return GSL_FAILURE; /* Handle the trivial case where q = 0. */ if (qq == 0.0) { for (ii=0; ii GSL_SF_MATHIEU_COEFF) return GSL_FAILURE; /* Handle the trivial case where q = 0. */ if (qq == 0.0) { for (ii=0; ii #include #include #include #include #include #include "error.h" #include "chebyshev.h" #include "cheb_eval.c" static double synchrotron1_data[13] = { 30.364682982501076273, 17.079395277408394574, 4.560132133545072889, 0.549281246730419979, 0.372976075069301172e-01, 0.161362430201041242e-02, 0.481916772120371e-04, 0.10512425288938e-05, 0.174638504670e-07, 0.22815486544e-09, 0.240443082e-11, 0.2086588e-13, 0.15167e-15 }; static cheb_series synchrotron1_cs = { synchrotron1_data, 12, -1.0, 1.0, 9 }; static double synchrotron2_data[12] = { 0.4490721623532660844, 0.898353677994187218e-01, 0.81044573772151290e-02, 0.4261716991089162e-03, 0.147609631270746e-04, 0.3628633615300e-06, 0.66634807498e-08, 0.949077166e-10, 0.1079125e-11, 0.10022e-13, 0.77e-16, 0.5e-18 }; static cheb_series synchrotron2_cs = { synchrotron2_data, 11, -1.0, 1.0, 7 }; static double synchrotron1a_data[23] = { 2.1329305161355000985, 0.741352864954200240e-01, 0.86968099909964198e-02, 0.11703826248775692e-02, 0.1645105798619192e-03, 0.240201021420640e-04, 0.35827756389389e-05, 0.5447747626984e-06, 0.838802856196e-07, 0.13069882684e-07, 0.2053099071e-08, 0.325187537e-09, 0.517914041e-10, 0.83002988e-11, 0.13352728e-11, 0.2159150e-12, 0.349967e-13, 0.56994e-14, 0.9291e-15, 0.152e-15, 0.249e-16, 0.41e-17, 0.7e-18 }; static cheb_series synchrotron1a_cs = { synchrotron1a_data, 22, -1.0, 1.0, 11 }; static double synchrotron21_data[13] = { 38.617839923843085480, 23.037715594963734597, 5.3802499868335705968, 0.6156793806995710776, 0.406688004668895584e-01, 0.17296274552648414e-02, 0.51061258836577e-04, 0.110459595022e-05, 0.18235530206e-07, 0.2370769803e-09, 0.24887296e-11, 0.21529e-13, 0.156e-15 }; static cheb_series synchrotron21_cs = { synchrotron21_data, 12, -1.0, 1.0, 9 }; static double synchrotron22_data[13] = { 7.9063148270660804288, 3.1353463612853425684, 0.4854879477453714538, 0.394816675827237234e-01, 0.19661622334808802e-02, 0.659078932293042e-04, 0.15857561349856e-05, 0.286865301123e-07, 0.4041202360e-09, 0.45568444e-11, 0.420459e-13, 0.3232e-15, 0.21e-17 }; static cheb_series synchrotron22_cs = { synchrotron22_data, 12, -1.0, 1.0, 8 }; static double synchrotron2a_data[17] = { 2.020337094170713600, 0.10956237121807404e-01, 0.8542384730114676e-03, 0.723430242132822e-04, 0.63124427962699e-05, 0.5648193141174e-06, 0.512832480138e-07, 0.47196532914e-08, 0.4380744214e-09, 0.410268149e-10, 0.38623072e-11, 0.3661323e-12, 0.348023e-13, 0.33301e-14, 0.319e-15, 0.307e-16, 0.3e-17 }; static cheb_series synchrotron2a_cs = { synchrotron2a_data, 16, -1.0, 1.0, 8 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_synchrotron_1_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x < 0.0) { DOMAIN_ERROR(result); } else if(x < 2.0*M_SQRT2 * GSL_SQRT_DBL_EPSILON) { /* BJG: added first order correction term. The taylor series is S1(x) = ((4pi)/(sqrt(3)gamma(1/3))) * (x/2)^(1/3) * (1 - (gamma(1/3)/2)*(x/2)^2/3 + (3/4) * (x/2)^2 ....) */ double z = pow(x, 1.0/3.0); double cf = 1 - 8.43812762813205e-01 * z * z; result->val = 2.14952824153447863671 * z * cf; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else if(x <= 4.0) { const double c0 = M_PI/M_SQRT3; const double px = pow(x,1.0/3.0); const double px11 = gsl_sf_pow_int(px,11); const double t = x*x/8.0 - 1.0; gsl_sf_result result_c1; gsl_sf_result result_c2; cheb_eval_e(&synchrotron1_cs, t, &result_c1); cheb_eval_e(&synchrotron2_cs, t, &result_c2); result->val = px * result_c1.val - px11 * result_c2.val - c0 * x; result->err = px * result_c1.err + px11 * result_c2.err + c0 * x * GSL_DBL_EPSILON; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < -8.0*GSL_LOG_DBL_MIN/7.0) { const double c0 = 0.2257913526447274323630976; /* log(sqrt(pi/2)) */ const double t = (12.0 - x) / (x + 4.0); gsl_sf_result result_c1; cheb_eval_e(&synchrotron1a_cs, t, &result_c1); result->val = sqrt(x) * result_c1.val * exp(c0 - x); result->err = 2.0 * GSL_DBL_EPSILON * result->val * (fabs(c0-x)+1.0); return GSL_SUCCESS; } else { UNDERFLOW_ERROR(result); } } int gsl_sf_synchrotron_2_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x < 0.0) { DOMAIN_ERROR(result); } else if(x < 2.0*M_SQRT2*GSL_SQRT_DBL_EPSILON) { /* BJG: added first order correction term. The taylor series is S2(x) = ((2pi)/(sqrt(3)*gamma(1/3))) * (x/2)^(1/3) * (1 - (gamma(1/3)/gamma(4/3))*(x/2)^(4/3) + (gamma(1/3)/gamma(4/3))*(x/2)^2...) */ double z = pow(x, 1.0/3.0); double cf = 1 - 1.17767156510235e+00 * z * x; result->val = 1.07476412076723931836 * z * cf ; result->err = 2.0 * GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else if(x <= 4.0) { const double px = pow(x, 1.0/3.0); const double px5 = gsl_sf_pow_int(px,5); const double t = x*x/8.0 - 1.0; gsl_sf_result cheb1; gsl_sf_result cheb2; cheb_eval_e(&synchrotron21_cs, t, &cheb1); cheb_eval_e(&synchrotron22_cs, t, &cheb2); result->val = px * cheb1.val - px5 * cheb2.val; result->err = px * cheb1.err + px5 * cheb2.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < -8.0*GSL_LOG_DBL_MIN/7.0) { const double c0 = 0.22579135264472743236; /* log(sqrt(pi/2)) */ const double t = (10.0 - x) / (x + 2.0); gsl_sf_result cheb1; cheb_eval_e(&synchrotron2a_cs, t, &cheb1); result->val = sqrt(x) * exp(c0-x) * cheb1.val; result->err = GSL_DBL_EPSILON * result->val * (fabs(c0-x)+1.0); return GSL_SUCCESS; } else { UNDERFLOW_ERROR(result); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_synchrotron_1(const double x) { EVAL_RESULT(gsl_sf_synchrotron_1_e(x, &result)); } double gsl_sf_synchrotron_2(const double x) { EVAL_RESULT(gsl_sf_synchrotron_2_e(x, &result)); } gsl/specfunc/pow_int.c0000644000175000017500000000357213536674414013372 0ustar eddedd/* specfunc/pow_int.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include /*-*-*-*-*-*-*-*-*-*-*-* Functions w/ Error handling *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_pow_int_e(double x, int n, gsl_sf_result * result) { double value = 1.0; int count = 0; /* CHECK_POINTER(result) */ if(n < 0) { n = -n; if(x == 0.0) { double u = 1.0 / x; result->val = (n % 2) ? u : (u * u) ; /* correct sign of infinity */ result->err = GSL_POSINF; GSL_ERROR ("overflow", GSL_EOVRFLW); } x = 1.0/x; } /* repeated squaring method * returns 0.0^0 = 1.0, so continuous in x */ do { if(GSL_IS_ODD(n)) value *= x; n >>= 1; x *= x; ++count; } while (n); result->val = value; result->err = 2.0 * GSL_DBL_EPSILON * (count + 1.0) * fabs(value); return GSL_SUCCESS; } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_pow_int(const double x, const int n) { EVAL_RESULT(gsl_sf_pow_int_e(x, n, &result)); } gsl/specfunc/hyperg_2F0.c0000644000175000017500000000353313536674414013615 0ustar eddedd/* specfunc/hyperg_2F0.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "error.h" #include "hyperg.h" int gsl_sf_hyperg_2F0_e(const double a, const double b, const double x, gsl_sf_result * result) { if(x < 0.0) { /* Use "definition" 2F0(a,b,x) = (-1/x)^a U(a,1+a-b,-1/x). */ gsl_sf_result U; double pre = pow(-1.0/x, a); int stat_U = gsl_sf_hyperg_U_e(a, 1.0+a-b, -1.0/x, &U); result->val = pre * U.val; result->err = GSL_DBL_EPSILON * fabs(result->val) + pre * U.err; return stat_U; } else if(x == 0.0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else { /* Use asymptotic series. ?? */ /* return hyperg_2F0_series(a, b, x, -1, result, &prec); */ DOMAIN_ERROR(result); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_hyperg_2F0(const double a, const double b, const double x) { EVAL_RESULT(gsl_sf_hyperg_2F0_e(a, b, x, &result)); } gsl/specfunc/gsl_sf_mathieu.h0000644000175000017500000001032313536674414014701 0ustar eddedd/* specfunc/gsl_sf_mathieu.h * * Copyright (C) 2002 Lowell Johnson * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Author: L. Johnson */ #ifndef __GSL_SF_MATHIEU_H__ #define __GSL_SF_MATHIEU_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS #define GSL_SF_MATHIEU_COEFF 100 typedef struct { size_t size; size_t even_order; size_t odd_order; int extra_values; double qa; /* allow for caching of results: not implemented yet */ double qb; /* allow for caching of results: not implemented yet */ double *aa; double *bb; double *dd; double *ee; double *tt; double *e2; double *zz; gsl_vector *eval; gsl_matrix *evec; gsl_eigen_symmv_workspace *wmat; } gsl_sf_mathieu_workspace; /* Compute an array of characteristic (eigen) values from the recurrence matrices for the Mathieu equations. */ int gsl_sf_mathieu_a_array(int order_min, int order_max, double qq, gsl_sf_mathieu_workspace *work, double result_array[]); int gsl_sf_mathieu_b_array(int order_min, int order_max, double qq, gsl_sf_mathieu_workspace *work, double result_array[]); /* Compute the characteristic value for a Mathieu function of order n and type ntype. */ int gsl_sf_mathieu_a_e(int order, double qq, gsl_sf_result *result); double gsl_sf_mathieu_a(int order, double qq); int gsl_sf_mathieu_b_e(int order, double qq, gsl_sf_result *result); double gsl_sf_mathieu_b(int order, double qq); /* Compute the Fourier coefficients for a Mathieu function. */ int gsl_sf_mathieu_a_coeff(int order, double qq, double aa, double coeff[]); int gsl_sf_mathieu_b_coeff(int order, double qq, double aa, double coeff[]); /* Allocate computational storage space for eigenvalue solution. */ gsl_sf_mathieu_workspace *gsl_sf_mathieu_alloc(const size_t nn, const double qq); void gsl_sf_mathieu_free(gsl_sf_mathieu_workspace *workspace); /* Compute an angular Mathieu function. */ int gsl_sf_mathieu_ce_e(int order, double qq, double zz, gsl_sf_result *result); double gsl_sf_mathieu_ce(int order, double qq, double zz); int gsl_sf_mathieu_se_e(int order, double qq, double zz, gsl_sf_result *result); double gsl_sf_mathieu_se(int order, double qq, double zz); int gsl_sf_mathieu_ce_array(int nmin, int nmax, double qq, double zz, gsl_sf_mathieu_workspace *work, double result_array[]); int gsl_sf_mathieu_se_array(int nmin, int nmax, double qq, double zz, gsl_sf_mathieu_workspace *work, double result_array[]); /* Compute a radial Mathieu function. */ int gsl_sf_mathieu_Mc_e(int kind, int order, double qq, double zz, gsl_sf_result *result); double gsl_sf_mathieu_Mc(int kind, int order, double qq, double zz); int gsl_sf_mathieu_Ms_e(int kind, int order, double qq, double zz, gsl_sf_result *result); double gsl_sf_mathieu_Ms(int kind, int order, double qq, double zz); int gsl_sf_mathieu_Mc_array(int kind, int nmin, int nmax, double qq, double zz, gsl_sf_mathieu_workspace *work, double result_array[]); int gsl_sf_mathieu_Ms_array(int kind, int nmin, int nmax, double qq, double zz, gsl_sf_mathieu_workspace *work, double result_array[]); __END_DECLS #endif /* !__GSL_SF_MATHIEU_H__ */ gsl/specfunc/beta.c0000644000175000017500000001151213536674414012617 0ustar eddedd/* specfunc/beta.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include "error.h" static double isnegint (const double x) { return (x < 0) && (x == floor(x)); } int gsl_sf_lnbeta_e(const double x, const double y, gsl_sf_result * result) { double sgn; int status = gsl_sf_lnbeta_sgn_e(x,y,result,&sgn); if (sgn == -1) { DOMAIN_ERROR(result); } return status; } int gsl_sf_lnbeta_sgn_e(const double x, const double y, gsl_sf_result * result, double * sgn) { /* CHECK_POINTER(result) */ if(x == 0.0 || y == 0.0) { *sgn = 0.0; DOMAIN_ERROR(result); } else if (isnegint(x) || isnegint(y)) { *sgn = 0.0; DOMAIN_ERROR(result); /* not defined for negative integers */ } /* See if we can handle the postive case with min/max < 0.2 */ if (x > 0 && y > 0) { const double max = GSL_MAX(x,y); const double min = GSL_MIN(x,y); const double rat = min/max; if(rat < 0.2) { /* min << max, so be careful * with the subtraction */ double lnpre_val; double lnpre_err; double lnpow_val; double lnpow_err; double t1, t2, t3; gsl_sf_result lnopr; gsl_sf_result gsx, gsy, gsxy; gsl_sf_gammastar_e(x, &gsx); gsl_sf_gammastar_e(y, &gsy); gsl_sf_gammastar_e(x+y, &gsxy); gsl_sf_log_1plusx_e(rat, &lnopr); lnpre_val = log(gsx.val*gsy.val/gsxy.val * M_SQRT2*M_SQRTPI); lnpre_err = gsx.err/gsx.val + gsy.err/gsy.val + gsxy.err/gsxy.val; t1 = min*log(rat); t2 = 0.5*log(min); t3 = (x+y-0.5)*lnopr.val; lnpow_val = t1 - t2 - t3; lnpow_err = GSL_DBL_EPSILON * (fabs(t1) + fabs(t2) + fabs(t3)); lnpow_err += fabs(x+y-0.5) * lnopr.err; result->val = lnpre_val + lnpow_val; result->err = lnpre_err + lnpow_err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); *sgn = 1.0; return GSL_SUCCESS; } } /* General case - Fallback */ { gsl_sf_result lgx, lgy, lgxy; double sgx, sgy, sgxy, xy = x+y; int stat_gx = gsl_sf_lngamma_sgn_e(x, &lgx, &sgx); int stat_gy = gsl_sf_lngamma_sgn_e(y, &lgy, &sgy); int stat_gxy = gsl_sf_lngamma_sgn_e(xy, &lgxy, &sgxy); *sgn = sgx * sgy * sgxy; result->val = lgx.val + lgy.val - lgxy.val; result->err = lgx.err + lgy.err + lgxy.err; result->err += 2.0 * GSL_DBL_EPSILON * (fabs(lgx.val) + fabs(lgy.val) + fabs(lgxy.val)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_3(stat_gx, stat_gy, stat_gxy); } } int gsl_sf_beta_e(const double x, const double y, gsl_sf_result * result) { if((x > 0 && y > 0) && x < 50.0 && y < 50.0) { /* Handle the easy case */ gsl_sf_result gx, gy, gxy; gsl_sf_gamma_e(x, &gx); gsl_sf_gamma_e(y, &gy); gsl_sf_gamma_e(x+y, &gxy); result->val = (gx.val*gy.val)/gxy.val; result->err = gx.err * fabs(gy.val/gxy.val); result->err += gy.err * fabs(gx.val/gxy.val); result->err += fabs((gx.val*gy.val)/(gxy.val*gxy.val)) * gxy.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if (isnegint(x) || isnegint(y)) { DOMAIN_ERROR(result); } else if (isnegint(x+y)) { /* infinity in the denominator */ result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { gsl_sf_result lb; double sgn; int stat_lb = gsl_sf_lnbeta_sgn_e(x, y, &lb, &sgn); if(stat_lb == GSL_SUCCESS) { int status = gsl_sf_exp_err_e(lb.val, lb.err, result); result->val *= sgn; return status; } else { result->val = 0.0; result->err = 0.0; return stat_lb; } } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_lnbeta(const double x, const double y) { EVAL_RESULT(gsl_sf_lnbeta_e(x, y, &result)); } double gsl_sf_beta(const double x, const double y) { EVAL_RESULT(gsl_sf_beta_e(x, y, &result)); } gsl/specfunc/bessel_J0.c0000644000175000017500000000627613536674414013525 0ustar eddedd/* specfunc/bessel_J0.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "bessel.h" #include "bessel_amp_phase.h" #include #include #include "cheb_eval.c" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* based on SLATEC besj0, 1977 version, w. fullerton */ /* chebyshev expansions for Bessel functions series for bj0 on the interval 0. to 1.60000d+01 with weighted error 7.47e-18 log weighted error 17.13 significant figures required 16.98 decimal places required 17.68 */ static double bj0_data[13] = { 0.100254161968939137, -0.665223007764405132, 0.248983703498281314, -0.0332527231700357697, 0.0023114179304694015, -0.0000991127741995080, 0.0000028916708643998, -0.0000000612108586630, 0.0000000009838650793, -0.0000000000124235515, 0.0000000000001265433, -0.0000000000000010619, 0.0000000000000000074, }; static cheb_series bj0_cs = { bj0_data, 12, -1, 1, 9 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_J0_e(const double x, gsl_sf_result * result) { double y = fabs(x); /* CHECK_POINTER(result) */ if(y < 2.0*GSL_SQRT_DBL_EPSILON) { result->val = 1.0; result->err = y*y; return GSL_SUCCESS; } else if(y <= 4.0) { return cheb_eval_e(&bj0_cs, 0.125*y*y - 1.0, result); } else { const double z = 32.0/(y*y) - 1.0; gsl_sf_result ca; gsl_sf_result ct; gsl_sf_result cp; const int stat_ca = cheb_eval_e(&_gsl_sf_bessel_amp_phase_bm0_cs, z, &ca); const int stat_ct = cheb_eval_e(&_gsl_sf_bessel_amp_phase_bth0_cs, z, &ct); const int stat_cp = gsl_sf_bessel_cos_pi4_e(y, ct.val/y, &cp); const double sqrty = sqrt(y); const double ampl = (0.75 + ca.val) / sqrty; result->val = ampl * cp.val; result->err = fabs(cp.val) * ca.err/sqrty + fabs(ampl) * cp.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_3(stat_ca, stat_ct, stat_cp); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_J0(const double x) { EVAL_RESULT(gsl_sf_bessel_J0_e(x, &result)); } gsl/specfunc/Makefile.in0000664000175000017500000015606114057135461013611 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = specfunc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslspecfunc_la_LIBADD = am_libgslspecfunc_la_OBJECTS = airy.lo airy_der.lo airy_zero.lo \ atanint.lo bessel.lo bessel_I0.lo bessel_I1.lo bessel_In.lo \ bessel_Inu.lo bessel_J0.lo bessel_J1.lo bessel_Jn.lo \ bessel_Jnu.lo bessel_K0.lo bessel_K1.lo bessel_Kn.lo \ bessel_Knu.lo bessel_Y0.lo bessel_Y1.lo bessel_Yn.lo \ bessel_Ynu.lo bessel_amp_phase.lo bessel_i.lo bessel_j.lo \ bessel_k.lo bessel_olver.lo bessel_temme.lo bessel_y.lo \ bessel_zero.lo bessel_sequence.lo beta.lo beta_inc.lo \ clausen.lo coulomb.lo coupling.lo coulomb_bound.lo dawson.lo \ debye.lo dilog.lo elementary.lo ellint.lo elljac.lo erfc.lo \ exp.lo expint.lo expint3.lo fermi_dirac.lo gegenbauer.lo \ gamma.lo gamma_inc.lo hermite.lo hyperg_0F1.lo hyperg_2F0.lo \ hyperg_1F1.lo hyperg_2F1.lo hyperg_U.lo hyperg.lo inline.lo \ laguerre.lo lambert.lo legendre_H3d.lo legendre_P.lo \ legendre_Qn.lo legendre_con.lo legendre_poly.lo log.lo \ mathieu_angfunc.lo mathieu_charv.lo mathieu_coeff.lo \ mathieu_radfunc.lo mathieu_workspace.lo poch.lo pow_int.lo \ psi.lo result.lo shint.lo sincos_pi.lo sinint.lo \ synchrotron.lo transport.lo trig.lo zeta.lo libgslspecfunc_la_OBJECTS = $(am_libgslspecfunc_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test_sf.$(OBJEXT) test_airy.$(OBJEXT) \ test_bessel.$(OBJEXT) test_coulomb.$(OBJEXT) \ test_dilog.$(OBJEXT) test_gamma.$(OBJEXT) \ test_hermite.$(OBJEXT) test_hyperg.$(OBJEXT) \ test_legendre.$(OBJEXT) test_mathieu.$(OBJEXT) \ test_sincos_pi.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslspecfunc.la ../eigen/libgsleigen.la \ ../linalg/libgsllinalg.la ../sort/libgslsort.la \ ../matrix/libgslmatrix.la ../vector/libgslvector.la \ ../blas/libgslblas.la ../cblas/libgslcblas.la \ ../block/libgslblock.la ../complex/libgslcomplex.la \ ../poly/libgslpoly.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/airy.Plo ./$(DEPDIR)/airy_der.Plo \ ./$(DEPDIR)/airy_zero.Plo ./$(DEPDIR)/atanint.Plo \ ./$(DEPDIR)/bessel.Plo ./$(DEPDIR)/bessel_I0.Plo \ ./$(DEPDIR)/bessel_I1.Plo ./$(DEPDIR)/bessel_In.Plo \ ./$(DEPDIR)/bessel_Inu.Plo ./$(DEPDIR)/bessel_J0.Plo \ ./$(DEPDIR)/bessel_J1.Plo ./$(DEPDIR)/bessel_Jn.Plo \ ./$(DEPDIR)/bessel_Jnu.Plo ./$(DEPDIR)/bessel_K0.Plo \ ./$(DEPDIR)/bessel_K1.Plo ./$(DEPDIR)/bessel_Kn.Plo \ ./$(DEPDIR)/bessel_Knu.Plo ./$(DEPDIR)/bessel_Y0.Plo \ ./$(DEPDIR)/bessel_Y1.Plo ./$(DEPDIR)/bessel_Yn.Plo \ ./$(DEPDIR)/bessel_Ynu.Plo ./$(DEPDIR)/bessel_amp_phase.Plo \ ./$(DEPDIR)/bessel_i.Plo ./$(DEPDIR)/bessel_j.Plo \ ./$(DEPDIR)/bessel_k.Plo ./$(DEPDIR)/bessel_olver.Plo \ ./$(DEPDIR)/bessel_sequence.Plo ./$(DEPDIR)/bessel_temme.Plo \ ./$(DEPDIR)/bessel_y.Plo ./$(DEPDIR)/bessel_zero.Plo \ ./$(DEPDIR)/beta.Plo ./$(DEPDIR)/beta_inc.Plo \ ./$(DEPDIR)/clausen.Plo ./$(DEPDIR)/coulomb.Plo \ ./$(DEPDIR)/coulomb_bound.Plo ./$(DEPDIR)/coupling.Plo \ ./$(DEPDIR)/dawson.Plo ./$(DEPDIR)/debye.Plo \ ./$(DEPDIR)/dilog.Plo ./$(DEPDIR)/elementary.Plo \ ./$(DEPDIR)/ellint.Plo ./$(DEPDIR)/elljac.Plo \ ./$(DEPDIR)/erfc.Plo ./$(DEPDIR)/exp.Plo \ ./$(DEPDIR)/expint.Plo ./$(DEPDIR)/expint3.Plo \ ./$(DEPDIR)/fermi_dirac.Plo ./$(DEPDIR)/gamma.Plo \ ./$(DEPDIR)/gamma_inc.Plo ./$(DEPDIR)/gegenbauer.Plo \ ./$(DEPDIR)/hermite.Plo ./$(DEPDIR)/hyperg.Plo \ ./$(DEPDIR)/hyperg_0F1.Plo ./$(DEPDIR)/hyperg_1F1.Plo \ ./$(DEPDIR)/hyperg_2F0.Plo ./$(DEPDIR)/hyperg_2F1.Plo \ ./$(DEPDIR)/hyperg_U.Plo ./$(DEPDIR)/inline.Plo \ ./$(DEPDIR)/laguerre.Plo ./$(DEPDIR)/lambert.Plo \ ./$(DEPDIR)/legendre_H3d.Plo ./$(DEPDIR)/legendre_P.Plo \ ./$(DEPDIR)/legendre_Qn.Plo ./$(DEPDIR)/legendre_con.Plo \ ./$(DEPDIR)/legendre_poly.Plo ./$(DEPDIR)/log.Plo \ ./$(DEPDIR)/mathieu_angfunc.Plo ./$(DEPDIR)/mathieu_charv.Plo \ ./$(DEPDIR)/mathieu_coeff.Plo ./$(DEPDIR)/mathieu_radfunc.Plo \ ./$(DEPDIR)/mathieu_workspace.Plo ./$(DEPDIR)/poch.Plo \ ./$(DEPDIR)/pow_int.Plo ./$(DEPDIR)/psi.Plo \ ./$(DEPDIR)/result.Plo ./$(DEPDIR)/shint.Plo \ ./$(DEPDIR)/sincos_pi.Plo ./$(DEPDIR)/sinint.Plo \ ./$(DEPDIR)/synchrotron.Plo ./$(DEPDIR)/test_airy.Po \ ./$(DEPDIR)/test_bessel.Po ./$(DEPDIR)/test_coulomb.Po \ ./$(DEPDIR)/test_dilog.Po ./$(DEPDIR)/test_gamma.Po \ ./$(DEPDIR)/test_hermite.Po ./$(DEPDIR)/test_hyperg.Po \ ./$(DEPDIR)/test_legendre.Po ./$(DEPDIR)/test_mathieu.Po \ ./$(DEPDIR)/test_sf.Po ./$(DEPDIR)/test_sincos_pi.Po \ ./$(DEPDIR)/transport.Plo ./$(DEPDIR)/trig.Plo \ ./$(DEPDIR)/zeta.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslspecfunc_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslspecfunc_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslspecfunc.la pkginclude_HEADERS = gsl_sf.h gsl_sf_airy.h gsl_sf_bessel.h gsl_sf_clausen.h gsl_sf_coulomb.h gsl_sf_coupling.h gsl_sf_dawson.h gsl_sf_debye.h gsl_sf_dilog.h gsl_sf_elementary.h gsl_sf_ellint.h gsl_sf_elljac.h gsl_sf_erf.h gsl_sf_exp.h gsl_sf_expint.h gsl_sf_fermi_dirac.h gsl_sf_gamma.h gsl_sf_gegenbauer.h gsl_sf_hermite.h gsl_sf_hyperg.h gsl_sf_laguerre.h gsl_sf_lambert.h gsl_sf_legendre.h gsl_sf_log.h gsl_sf_mathieu.h gsl_sf_pow_int.h gsl_sf_psi.h gsl_sf_result.h gsl_sf_sincos_pi.h gsl_sf_synchrotron.h gsl_sf_transport.h gsl_sf_trig.h gsl_sf_zeta.h gsl_specfunc.h noinst_HEADERS = bessel_amp_phase.h bessel_olver.h bessel_temme.h bessel.h hyperg.h legendre.h eval.h chebyshev.h cheb_eval.c cheb_eval_mode.c check.h error.h legendre_source.c AM_CPPFLAGS = -I$(top_srcdir) libgslspecfunc_la_SOURCES = airy.c airy_der.c airy_zero.c atanint.c bessel.c bessel.h bessel_I0.c bessel_I1.c bessel_In.c bessel_Inu.c bessel_J0.c bessel_J1.c bessel_Jn.c bessel_Jnu.c bessel_K0.c bessel_K1.c bessel_Kn.c bessel_Knu.c bessel_Y0.c bessel_Y1.c bessel_Yn.c bessel_Ynu.c bessel_amp_phase.c bessel_amp_phase.h bessel_i.c bessel_j.c bessel_k.c bessel_olver.c bessel_temme.c bessel_y.c bessel_zero.c bessel_sequence.c beta.c beta_inc.c clausen.c coulomb.c coupling.c coulomb_bound.c dawson.c debye.c dilog.c elementary.c ellint.c elljac.c erfc.c exp.c expint.c expint3.c fermi_dirac.c gegenbauer.c gamma.c gamma_inc.c hermite.c hyperg_0F1.c hyperg_2F0.c hyperg_1F1.c hyperg_2F1.c hyperg_U.c hyperg.c inline.c laguerre.c lambert.c legendre_H3d.c legendre_P.c legendre_Qn.c legendre_con.c legendre_poly.c log.c mathieu_angfunc.c mathieu_charv.c mathieu_coeff.c mathieu_radfunc.c mathieu_workspace.c poch.c pow_int.c psi.c recurse.h result.c shint.c sincos_pi.c sinint.c synchrotron.c transport.c trig.c zeta.c TESTS = $(check_PROGRAMS) test_LDADD = libgslspecfunc.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../sort/libgslsort.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../complex/libgslcomplex.la ../poly/libgslpoly.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test_sf.c test_sf.h test_airy.c test_bessel.c test_coulomb.c test_dilog.c test_gamma.c test_hermite.c test_hyperg.c test_legendre.c test_mathieu.c test_sincos_pi.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu specfunc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu specfunc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslspecfunc.la: $(libgslspecfunc_la_OBJECTS) $(libgslspecfunc_la_DEPENDENCIES) $(EXTRA_libgslspecfunc_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslspecfunc_la_OBJECTS) $(libgslspecfunc_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/airy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/airy_der.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/airy_zero.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atanint.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_I0.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_I1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_In.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_Inu.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_J0.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_J1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_Jn.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_Jnu.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_K0.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_K1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_Kn.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_Knu.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_Y0.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_Y1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_Yn.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_Ynu.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_amp_phase.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_i.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_j.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_k.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_olver.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_sequence.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_temme.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_y.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_zero.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/beta.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/beta_inc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clausen.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coulomb.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coulomb_bound.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dawson.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debye.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dilog.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elementary.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ellint.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elljac.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/erfc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expint.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expint3.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fermi_dirac.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gamma.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gamma_inc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gegenbauer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hermite.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyperg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyperg_0F1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyperg_1F1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyperg_2F0.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyperg_2F1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyperg_U.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inline.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/laguerre.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lambert.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/legendre_H3d.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/legendre_P.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/legendre_Qn.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/legendre_con.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/legendre_poly.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mathieu_angfunc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mathieu_charv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mathieu_coeff.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mathieu_radfunc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mathieu_workspace.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poch.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_int.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/result.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shint.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sincos_pi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sinint.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/synchrotron.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_airy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_bessel.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_coulomb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_dilog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_gamma.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hermite.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hyperg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_legendre.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mathieu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_sf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_sincos_pi.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transport.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trig.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zeta.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/airy.Plo -rm -f ./$(DEPDIR)/airy_der.Plo -rm -f ./$(DEPDIR)/airy_zero.Plo -rm -f ./$(DEPDIR)/atanint.Plo -rm -f ./$(DEPDIR)/bessel.Plo -rm -f ./$(DEPDIR)/bessel_I0.Plo -rm -f ./$(DEPDIR)/bessel_I1.Plo -rm -f ./$(DEPDIR)/bessel_In.Plo -rm -f ./$(DEPDIR)/bessel_Inu.Plo -rm -f ./$(DEPDIR)/bessel_J0.Plo -rm -f ./$(DEPDIR)/bessel_J1.Plo -rm -f ./$(DEPDIR)/bessel_Jn.Plo -rm -f ./$(DEPDIR)/bessel_Jnu.Plo -rm -f ./$(DEPDIR)/bessel_K0.Plo -rm -f ./$(DEPDIR)/bessel_K1.Plo -rm -f ./$(DEPDIR)/bessel_Kn.Plo -rm -f ./$(DEPDIR)/bessel_Knu.Plo -rm -f ./$(DEPDIR)/bessel_Y0.Plo -rm -f ./$(DEPDIR)/bessel_Y1.Plo -rm -f ./$(DEPDIR)/bessel_Yn.Plo -rm -f ./$(DEPDIR)/bessel_Ynu.Plo -rm -f ./$(DEPDIR)/bessel_amp_phase.Plo -rm -f ./$(DEPDIR)/bessel_i.Plo -rm -f ./$(DEPDIR)/bessel_j.Plo -rm -f ./$(DEPDIR)/bessel_k.Plo -rm -f ./$(DEPDIR)/bessel_olver.Plo -rm -f ./$(DEPDIR)/bessel_sequence.Plo -rm -f ./$(DEPDIR)/bessel_temme.Plo -rm -f ./$(DEPDIR)/bessel_y.Plo -rm -f ./$(DEPDIR)/bessel_zero.Plo -rm -f ./$(DEPDIR)/beta.Plo -rm -f ./$(DEPDIR)/beta_inc.Plo -rm -f ./$(DEPDIR)/clausen.Plo -rm -f ./$(DEPDIR)/coulomb.Plo -rm -f ./$(DEPDIR)/coulomb_bound.Plo -rm -f ./$(DEPDIR)/coupling.Plo -rm -f ./$(DEPDIR)/dawson.Plo -rm -f ./$(DEPDIR)/debye.Plo -rm -f ./$(DEPDIR)/dilog.Plo -rm -f ./$(DEPDIR)/elementary.Plo -rm -f ./$(DEPDIR)/ellint.Plo -rm -f ./$(DEPDIR)/elljac.Plo -rm -f ./$(DEPDIR)/erfc.Plo -rm -f ./$(DEPDIR)/exp.Plo -rm -f ./$(DEPDIR)/expint.Plo -rm -f ./$(DEPDIR)/expint3.Plo -rm -f ./$(DEPDIR)/fermi_dirac.Plo -rm -f ./$(DEPDIR)/gamma.Plo -rm -f ./$(DEPDIR)/gamma_inc.Plo -rm -f ./$(DEPDIR)/gegenbauer.Plo -rm -f ./$(DEPDIR)/hermite.Plo -rm -f ./$(DEPDIR)/hyperg.Plo -rm -f ./$(DEPDIR)/hyperg_0F1.Plo -rm -f ./$(DEPDIR)/hyperg_1F1.Plo -rm -f ./$(DEPDIR)/hyperg_2F0.Plo -rm -f ./$(DEPDIR)/hyperg_2F1.Plo -rm -f ./$(DEPDIR)/hyperg_U.Plo -rm -f ./$(DEPDIR)/inline.Plo -rm -f ./$(DEPDIR)/laguerre.Plo -rm -f ./$(DEPDIR)/lambert.Plo -rm -f ./$(DEPDIR)/legendre_H3d.Plo -rm -f ./$(DEPDIR)/legendre_P.Plo -rm -f ./$(DEPDIR)/legendre_Qn.Plo -rm -f ./$(DEPDIR)/legendre_con.Plo -rm -f ./$(DEPDIR)/legendre_poly.Plo -rm -f ./$(DEPDIR)/log.Plo -rm -f ./$(DEPDIR)/mathieu_angfunc.Plo -rm -f ./$(DEPDIR)/mathieu_charv.Plo -rm -f ./$(DEPDIR)/mathieu_coeff.Plo -rm -f ./$(DEPDIR)/mathieu_radfunc.Plo -rm -f ./$(DEPDIR)/mathieu_workspace.Plo -rm -f ./$(DEPDIR)/poch.Plo -rm -f ./$(DEPDIR)/pow_int.Plo -rm -f ./$(DEPDIR)/psi.Plo -rm -f ./$(DEPDIR)/result.Plo -rm -f ./$(DEPDIR)/shint.Plo -rm -f ./$(DEPDIR)/sincos_pi.Plo -rm -f ./$(DEPDIR)/sinint.Plo -rm -f ./$(DEPDIR)/synchrotron.Plo -rm -f ./$(DEPDIR)/test_airy.Po -rm -f ./$(DEPDIR)/test_bessel.Po -rm -f ./$(DEPDIR)/test_coulomb.Po -rm -f ./$(DEPDIR)/test_dilog.Po -rm -f ./$(DEPDIR)/test_gamma.Po -rm -f ./$(DEPDIR)/test_hermite.Po -rm -f ./$(DEPDIR)/test_hyperg.Po -rm -f ./$(DEPDIR)/test_legendre.Po -rm -f ./$(DEPDIR)/test_mathieu.Po -rm -f ./$(DEPDIR)/test_sf.Po -rm -f ./$(DEPDIR)/test_sincos_pi.Po -rm -f ./$(DEPDIR)/transport.Plo -rm -f ./$(DEPDIR)/trig.Plo -rm -f ./$(DEPDIR)/zeta.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/airy.Plo -rm -f ./$(DEPDIR)/airy_der.Plo -rm -f ./$(DEPDIR)/airy_zero.Plo -rm -f ./$(DEPDIR)/atanint.Plo -rm -f ./$(DEPDIR)/bessel.Plo -rm -f ./$(DEPDIR)/bessel_I0.Plo -rm -f ./$(DEPDIR)/bessel_I1.Plo -rm -f ./$(DEPDIR)/bessel_In.Plo -rm -f ./$(DEPDIR)/bessel_Inu.Plo -rm -f ./$(DEPDIR)/bessel_J0.Plo -rm -f ./$(DEPDIR)/bessel_J1.Plo -rm -f ./$(DEPDIR)/bessel_Jn.Plo -rm -f ./$(DEPDIR)/bessel_Jnu.Plo -rm -f ./$(DEPDIR)/bessel_K0.Plo -rm -f ./$(DEPDIR)/bessel_K1.Plo -rm -f ./$(DEPDIR)/bessel_Kn.Plo -rm -f ./$(DEPDIR)/bessel_Knu.Plo -rm -f ./$(DEPDIR)/bessel_Y0.Plo -rm -f ./$(DEPDIR)/bessel_Y1.Plo -rm -f ./$(DEPDIR)/bessel_Yn.Plo -rm -f ./$(DEPDIR)/bessel_Ynu.Plo -rm -f ./$(DEPDIR)/bessel_amp_phase.Plo -rm -f ./$(DEPDIR)/bessel_i.Plo -rm -f ./$(DEPDIR)/bessel_j.Plo -rm -f ./$(DEPDIR)/bessel_k.Plo -rm -f ./$(DEPDIR)/bessel_olver.Plo -rm -f ./$(DEPDIR)/bessel_sequence.Plo -rm -f ./$(DEPDIR)/bessel_temme.Plo -rm -f ./$(DEPDIR)/bessel_y.Plo -rm -f ./$(DEPDIR)/bessel_zero.Plo -rm -f ./$(DEPDIR)/beta.Plo -rm -f ./$(DEPDIR)/beta_inc.Plo -rm -f ./$(DEPDIR)/clausen.Plo -rm -f ./$(DEPDIR)/coulomb.Plo -rm -f ./$(DEPDIR)/coulomb_bound.Plo -rm -f ./$(DEPDIR)/coupling.Plo -rm -f ./$(DEPDIR)/dawson.Plo -rm -f ./$(DEPDIR)/debye.Plo -rm -f ./$(DEPDIR)/dilog.Plo -rm -f ./$(DEPDIR)/elementary.Plo -rm -f ./$(DEPDIR)/ellint.Plo -rm -f ./$(DEPDIR)/elljac.Plo -rm -f ./$(DEPDIR)/erfc.Plo -rm -f ./$(DEPDIR)/exp.Plo -rm -f ./$(DEPDIR)/expint.Plo -rm -f ./$(DEPDIR)/expint3.Plo -rm -f ./$(DEPDIR)/fermi_dirac.Plo -rm -f ./$(DEPDIR)/gamma.Plo -rm -f ./$(DEPDIR)/gamma_inc.Plo -rm -f ./$(DEPDIR)/gegenbauer.Plo -rm -f ./$(DEPDIR)/hermite.Plo -rm -f ./$(DEPDIR)/hyperg.Plo -rm -f ./$(DEPDIR)/hyperg_0F1.Plo -rm -f ./$(DEPDIR)/hyperg_1F1.Plo -rm -f ./$(DEPDIR)/hyperg_2F0.Plo -rm -f ./$(DEPDIR)/hyperg_2F1.Plo -rm -f ./$(DEPDIR)/hyperg_U.Plo -rm -f ./$(DEPDIR)/inline.Plo -rm -f ./$(DEPDIR)/laguerre.Plo -rm -f ./$(DEPDIR)/lambert.Plo -rm -f ./$(DEPDIR)/legendre_H3d.Plo -rm -f ./$(DEPDIR)/legendre_P.Plo -rm -f ./$(DEPDIR)/legendre_Qn.Plo -rm -f ./$(DEPDIR)/legendre_con.Plo -rm -f ./$(DEPDIR)/legendre_poly.Plo -rm -f ./$(DEPDIR)/log.Plo -rm -f ./$(DEPDIR)/mathieu_angfunc.Plo -rm -f ./$(DEPDIR)/mathieu_charv.Plo -rm -f ./$(DEPDIR)/mathieu_coeff.Plo -rm -f ./$(DEPDIR)/mathieu_radfunc.Plo -rm -f ./$(DEPDIR)/mathieu_workspace.Plo -rm -f ./$(DEPDIR)/poch.Plo -rm -f ./$(DEPDIR)/pow_int.Plo -rm -f ./$(DEPDIR)/psi.Plo -rm -f ./$(DEPDIR)/result.Plo -rm -f ./$(DEPDIR)/shint.Plo -rm -f ./$(DEPDIR)/sincos_pi.Plo -rm -f ./$(DEPDIR)/sinint.Plo -rm -f ./$(DEPDIR)/synchrotron.Plo -rm -f ./$(DEPDIR)/test_airy.Po -rm -f ./$(DEPDIR)/test_bessel.Po -rm -f ./$(DEPDIR)/test_coulomb.Po -rm -f ./$(DEPDIR)/test_dilog.Po -rm -f ./$(DEPDIR)/test_gamma.Po -rm -f ./$(DEPDIR)/test_hermite.Po -rm -f ./$(DEPDIR)/test_hyperg.Po -rm -f ./$(DEPDIR)/test_legendre.Po -rm -f ./$(DEPDIR)/test_mathieu.Po -rm -f ./$(DEPDIR)/test_sf.Po -rm -f ./$(DEPDIR)/test_sincos_pi.Po -rm -f ./$(DEPDIR)/transport.Plo -rm -f ./$(DEPDIR)/trig.Plo -rm -f ./$(DEPDIR)/zeta.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/specfunc/bessel_Y0.c0000644000175000017500000000704213536674414013534 0ustar eddedd/* specfunc/bessel_Y0.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "error.h" #include "bessel.h" #include "bessel_amp_phase.h" #include "cheb_eval.c" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* based on SLATEC besy0, 1980 version, w. fullerton */ /* chebyshev expansions series for by0 on the interval 0. to 1.60000d+01 with weighted error 1.20e-17 log weighted error 16.92 significant figures required 16.15 decimal places required 17.48 */ static double by0_data[13] = { -0.011277839392865573, -0.128345237560420350, -0.104378847997942490, 0.023662749183969695, -0.002090391647700486, 0.000103975453939057, -0.000003369747162423, 0.000000077293842676, -0.000000001324976772, 0.000000000017648232, -0.000000000000188105, 0.000000000000001641, -0.000000000000000011 }; static cheb_series by0_cs = { by0_data, 12, -1, 1, 8 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_Y0_e(const double x, gsl_sf_result * result) { const double two_over_pi = 2.0/M_PI; const double xmax = 1.0/GSL_DBL_EPSILON; /* CHECK_POINTER(result) */ if (x <= 0.0) { DOMAIN_ERROR(result); } else if(x < 4.0) { gsl_sf_result J0; gsl_sf_result c; int stat_J0 = gsl_sf_bessel_J0_e(x, &J0); cheb_eval_e(&by0_cs, 0.125*x*x-1.0, &c); result->val = two_over_pi*(-M_LN2 + log(x))*J0.val + 0.375 + c.val; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val) + c.err; return stat_J0; } else if(x < xmax) { /* Leading behaviour of phase is x, which is exact, * so the error is bounded. */ const double z = 32.0/(x*x) - 1.0; gsl_sf_result c1; gsl_sf_result c2; gsl_sf_result sp; const int stat_c1 = cheb_eval_e(&_gsl_sf_bessel_amp_phase_bm0_cs, z, &c1); const int stat_c2 = cheb_eval_e(&_gsl_sf_bessel_amp_phase_bth0_cs, z, &c2); const int stat_sp = gsl_sf_bessel_sin_pi4_e(x, c2.val/x, &sp); const double sqrtx = sqrt(x); const double ampl = (0.75 + c1.val) / sqrtx; result->val = ampl * sp.val; result->err = fabs(sp.val) * c1.err/sqrtx + fabs(ampl) * sp.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_3(stat_sp, stat_c1, stat_c2); } else { UNDERFLOW_ERROR(result); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_Y0(const double x) { EVAL_RESULT(gsl_sf_bessel_Y0_e(x, &result)); } gsl/specfunc/bessel_Knu.c0000644000175000017500000001247513536674414014007 0ustar eddedd/* specfunc/bessel_Knu.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include "error.h" #include "bessel.h" #include "bessel_temme.h" /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_Knu_scaled_e(const double nu, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0 || nu < 0.0) { DOMAIN_ERROR(result); } else { gsl_sf_result_e10 result_e10; int status = gsl_sf_bessel_Knu_scaled_e10_e(nu, x, &result_e10); int status2 = gsl_sf_result_smash_e(&result_e10, result); return GSL_ERROR_SELECT_2(status, status2); } } int gsl_sf_bessel_Knu_scaled_e10_e(const double nu, const double x, gsl_sf_result_e10 * result) { /* CHECK_POINTER(result) */ if(x <= 0.0 || nu < 0.0) { DOMAIN_ERROR_E10(result); } else { int N = (int)(nu + 0.5); double mu = nu - N; /* -1/2 <= mu <= 1/2 */ double K_mu, K_mup1, Kp_mu; double K_nu, K_nup1, K_num1; int n, e10 = 0; if(x < 2.0) { gsl_sf_bessel_K_scaled_temme(mu, x, &K_mu, &K_mup1, &Kp_mu); } else { gsl_sf_bessel_K_scaled_steed_temme_CF2(mu, x, &K_mu, &K_mup1, &Kp_mu); } /* recurse forward to obtain K_num1, K_nu */ K_nu = K_mu; K_nup1 = K_mup1; for(n=0; n GSL_SQRT_DBL_MAX) { double p = floor(log(fabs(K_nu))/M_LN10); double factor = pow(10.0, p); K_num1 /= factor; K_nu /= factor; e10 += p; }; K_nup1 = 2.0*(mu+n+1)/x * K_nu + K_num1; } result->val = K_nu; result->err = 2.0 * GSL_DBL_EPSILON * (N + 4.0) * fabs(result->val); result->e10 = e10; return GSL_SUCCESS; } } int gsl_sf_bessel_Knu_e(const double nu, const double x, gsl_sf_result * result) { gsl_sf_result b; int stat_K = gsl_sf_bessel_Knu_scaled_e(nu, x, &b); int stat_e = gsl_sf_exp_mult_err_e(-x, 0.0, b.val, b.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_K); } int gsl_sf_bessel_lnKnu_e(const double nu, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0 || nu < 0.0) { DOMAIN_ERROR(result); } else if(nu == 0.0) { gsl_sf_result K_scaled; /* This cannot underflow, and * it will not throw GSL_EDOM * since that is already checked. */ gsl_sf_bessel_K0_scaled_e(x, &K_scaled); result->val = -x + log(fabs(K_scaled.val)); result->err = GSL_DBL_EPSILON * fabs(x) + fabs(K_scaled.err/K_scaled.val); result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < 2.0 && nu > 1.0) { /* Make use of the inequality * Knu(x) <= 1/2 (2/x)^nu Gamma(nu), * which follows from the integral representation * [Abramowitz+Stegun, 9.6.23 (2)]. With this * we decide whether or not there is an overflow * problem because x is small. */ double ln_bound; gsl_sf_result lg_nu; gsl_sf_lngamma_e(nu, &lg_nu); ln_bound = -M_LN2 - nu*log(0.5*x) + lg_nu.val; if(ln_bound > GSL_LOG_DBL_MAX - 20.0) { /* x must be very small or nu very large (or both). */ double xi = 0.25*x*x; double sum = 1.0 - xi/(nu-1.0); if(nu > 2.0) sum += (xi/(nu-1.0)) * (xi/(nu-2.0)); result->val = ln_bound + log(sum); result->err = lg_nu.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } /* can drop-through here */ } { /* We passed the above tests, so no problem. * Evaluate as usual. Note the possible drop-through * in the above code! */ gsl_sf_result_e10 K_scaled; int status = gsl_sf_bessel_Knu_scaled_e10_e(nu, x, &K_scaled); result->val = -x + log(fabs(K_scaled.val)) + K_scaled.e10 * M_LN10; result->err = GSL_DBL_EPSILON * fabs(x) + fabs(K_scaled.err/K_scaled.val); result->err += GSL_DBL_EPSILON * fabs(result->val); return status; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_Knu_scaled(const double nu, const double x) { EVAL_RESULT(gsl_sf_bessel_Knu_scaled_e(nu, x, &result)); } double gsl_sf_bessel_Knu(const double nu, const double x) { EVAL_RESULT(gsl_sf_bessel_Knu_e(nu, x, &result)); } double gsl_sf_bessel_lnKnu(const double nu, const double x) { EVAL_RESULT(gsl_sf_bessel_lnKnu_e(nu, x, &result)); } gsl/specfunc/expint.c0000644000175000017500000003661313536674414013224 0ustar eddedd/* specfunc/expint.c * * Copyright (C) 2007 Brian Gough * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "error.h" #include "check.h" #include "chebyshev.h" #include "cheb_eval.c" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* Chebyshev expansions: based on SLATEC e1.f, W. Fullerton Series for AE11 on the interval -1.00000D-01 to 0. with weighted error 1.76E-17 log weighted error 16.75 significant figures required 15.70 decimal places required 17.55 Series for AE12 on the interval -2.50000D-01 to -1.00000D-01 with weighted error 5.83E-17 log weighted error 16.23 significant figures required 15.76 decimal places required 16.93 Series for E11 on the interval -4.00000D+00 to -1.00000D+00 with weighted error 1.08E-18 log weighted error 17.97 significant figures required 19.02 decimal places required 18.61 Series for E12 on the interval -1.00000D+00 to 1.00000D+00 with weighted error 3.15E-18 log weighted error 17.50 approx significant figures required 15.8 decimal places required 18.10 Series for AE13 on the interval 2.50000D-01 to 1.00000D+00 with weighted error 2.34E-17 log weighted error 16.63 significant figures required 16.14 decimal places required 17.33 Series for AE14 on the interval 0. to 2.50000D-01 with weighted error 5.41E-17 log weighted error 16.27 significant figures required 15.38 decimal places required 16.97 */ static double AE11_data[39] = { 0.121503239716065790, -0.065088778513550150, 0.004897651357459670, -0.000649237843027216, 0.000093840434587471, 0.000000420236380882, -0.000008113374735904, 0.000002804247688663, 0.000000056487164441, -0.000000344809174450, 0.000000058209273578, 0.000000038711426349, -0.000000012453235014, -0.000000005118504888, 0.000000002148771527, 0.000000000868459898, -0.000000000343650105, -0.000000000179796603, 0.000000000047442060, 0.000000000040423282, -0.000000000003543928, -0.000000000008853444, -0.000000000000960151, 0.000000000001692921, 0.000000000000607990, -0.000000000000224338, -0.000000000000200327, -0.000000000000006246, 0.000000000000045571, 0.000000000000016383, -0.000000000000005561, -0.000000000000006074, -0.000000000000000862, 0.000000000000001223, 0.000000000000000716, -0.000000000000000024, -0.000000000000000201, -0.000000000000000082, 0.000000000000000017 }; static cheb_series AE11_cs = { AE11_data, 38, -1, 1, 20 }; static double AE12_data[25] = { 0.582417495134726740, -0.158348850905782750, -0.006764275590323141, 0.005125843950185725, 0.000435232492169391, -0.000143613366305483, -0.000041801320556301, -0.000002713395758640, 0.000001151381913647, 0.000000420650022012, 0.000000066581901391, 0.000000000662143777, -0.000000002844104870, -0.000000000940724197, -0.000000000177476602, -0.000000000015830222, 0.000000000002905732, 0.000000000001769356, 0.000000000000492735, 0.000000000000093709, 0.000000000000010707, -0.000000000000000537, -0.000000000000000716, -0.000000000000000244, -0.000000000000000058 }; static cheb_series AE12_cs = { AE12_data, 24, -1, 1, 15 }; static double E11_data[19] = { -16.11346165557149402600, 7.79407277874268027690, -1.95540581886314195070, 0.37337293866277945612, -0.05692503191092901938, 0.00721107776966009185, -0.00078104901449841593, 0.00007388093356262168, -0.00000620286187580820, 0.00000046816002303176, -0.00000003209288853329, 0.00000000201519974874, -0.00000000011673686816, 0.00000000000627627066, -0.00000000000031481541, 0.00000000000001479904, -0.00000000000000065457, 0.00000000000000002733, -0.00000000000000000108 }; static cheb_series E11_cs = { E11_data, 18, -1, 1, 13 }; static double E12_data[16] = { -0.03739021479220279500, 0.04272398606220957700, -0.13031820798497005440, 0.01441912402469889073, -0.00134617078051068022, 0.00010731029253063780, -0.00000742999951611943, 0.00000045377325690753, -0.00000002476417211390, 0.00000000122076581374, -0.00000000005485141480, 0.00000000000226362142, -0.00000000000008635897, 0.00000000000000306291, -0.00000000000000010148, 0.00000000000000000315 }; static cheb_series E12_cs = { E12_data, 15, -1, 1, 10 }; static double AE13_data[25] = { -0.605773246640603460, -0.112535243483660900, 0.013432266247902779, -0.001926845187381145, 0.000309118337720603, -0.000053564132129618, 0.000009827812880247, -0.000001885368984916, 0.000000374943193568, -0.000000076823455870, 0.000000016143270567, -0.000000003466802211, 0.000000000758754209, -0.000000000168864333, 0.000000000038145706, -0.000000000008733026, 0.000000000002023672, -0.000000000000474132, 0.000000000000112211, -0.000000000000026804, 0.000000000000006457, -0.000000000000001568, 0.000000000000000383, -0.000000000000000094, 0.000000000000000023 }; static cheb_series AE13_cs = { AE13_data, 24, -1, 1, 15 }; static double AE14_data[26] = { -0.18929180007530170, -0.08648117855259871, 0.00722410154374659, -0.00080975594575573, 0.00010999134432661, -0.00001717332998937, 0.00000298562751447, -0.00000056596491457, 0.00000011526808397, -0.00000002495030440, 0.00000000569232420, -0.00000000135995766, 0.00000000033846628, -0.00000000008737853, 0.00000000002331588, -0.00000000000641148, 0.00000000000181224, -0.00000000000052538, 0.00000000000015592, -0.00000000000004729, 0.00000000000001463, -0.00000000000000461, 0.00000000000000148, -0.00000000000000048, 0.00000000000000016, -0.00000000000000005 }; static cheb_series AE14_cs = { AE14_data, 25, -1, 1, 13 }; /* implementation for E1, allowing for scaling by exp(x) */ static int expint_E1_impl(const double x, gsl_sf_result * result, const int scale) { const double xmaxt = -GSL_LOG_DBL_MIN; /* XMAXT = -LOG (R1MACH(1)) */ const double xmax = xmaxt - log(xmaxt); /* XMAX = XMAXT - LOG(XMAXT) */ /* CHECK_POINTER(result) */ if(x < -xmax && !scale) { OVERFLOW_ERROR(result); } else if(x <= -10.0) { const double s = 1.0/x * ( scale ? 1.0 : exp(-x) ); gsl_sf_result result_c; cheb_eval_e(&AE11_cs, 20.0/x+1.0, &result_c); result->val = s * (1.0 + result_c.val); result->err = s * result_c.err; result->err += 2.0 * GSL_DBL_EPSILON * (fabs(x) + 1.0) * fabs(result->val); return GSL_SUCCESS; } else if(x <= -4.0) { const double s = 1.0/x * ( scale ? 1.0 : exp(-x) ); gsl_sf_result result_c; cheb_eval_e(&AE12_cs, (40.0/x+7.0)/3.0, &result_c); result->val = s * (1.0 + result_c.val); result->err = s * result_c.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x <= -1.0) { const double ln_term = -log(fabs(x)); const double scale_factor = ( scale ? exp(x) : 1.0 ); gsl_sf_result result_c; cheb_eval_e(&E11_cs, (2.0*x+5.0)/3.0, &result_c); result->val = scale_factor * (ln_term + result_c.val); result->err = scale_factor * (result_c.err + GSL_DBL_EPSILON * fabs(ln_term)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x == 0.0) { DOMAIN_ERROR(result); } else if(x <= 1.0) { const double ln_term = -log(fabs(x)); const double scale_factor = ( scale ? exp(x) : 1.0 ); gsl_sf_result result_c; cheb_eval_e(&E12_cs, x, &result_c); result->val = scale_factor * (ln_term - 0.6875 + x + result_c.val); result->err = scale_factor * (result_c.err + GSL_DBL_EPSILON * fabs(ln_term)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x <= 4.0) { const double s = 1.0/x * ( scale ? 1.0 : exp(-x) ); gsl_sf_result result_c; cheb_eval_e(&AE13_cs, (8.0/x-5.0)/3.0, &result_c); result->val = s * (1.0 + result_c.val); result->err = s * result_c.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x <= xmax || scale) { const double s = 1.0/x * ( scale ? 1.0 : exp(-x) ); gsl_sf_result result_c; cheb_eval_e(&AE14_cs, 8.0/x-1.0, &result_c); result->val = s * (1.0 + result_c.val); result->err = s * (GSL_DBL_EPSILON + result_c.err); result->err += 2.0 * (x + 1.0) * GSL_DBL_EPSILON * fabs(result->val); if(result->val == 0.0) UNDERFLOW_ERROR(result); else return GSL_SUCCESS; } else { UNDERFLOW_ERROR(result); } } static int expint_E2_impl(const double x, gsl_sf_result * result, const int scale) { const double xmaxt = -GSL_LOG_DBL_MIN; const double xmax = xmaxt - log(xmaxt); /* CHECK_POINTER(result) */ if(x < -xmax && !scale) { OVERFLOW_ERROR(result); } else if (x == 0.0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(x < 100.0) { const double ex = ( scale ? 1.0 : exp(-x) ); gsl_sf_result result_E1; int stat_E1 = expint_E1_impl(x, &result_E1, scale); result->val = ex - x*result_E1.val; result->err = GSL_DBL_EPSILON*ex + fabs(x) * result_E1.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_E1; } else if(x < xmax || scale) { const double s = ( scale ? 1.0 : exp(-x) ); const double c1 = -2.0; const double c2 = 6.0; const double c3 = -24.0; const double c4 = 120.0; const double c5 = -720.0; const double c6 = 5040.0; const double c7 = -40320.0; const double c8 = 362880.0; const double c9 = -3628800.0; const double c10 = 39916800.0; const double c11 = -479001600.0; const double c12 = 6227020800.0; const double c13 = -87178291200.0; const double y = 1.0/x; const double sum6 = c6+y*(c7+y*(c8+y*(c9+y*(c10+y*(c11+y*(c12+y*c13)))))); const double sum = y*(c1+y*(c2+y*(c3+y*(c4+y*(c5+y*sum6))))); result->val = s * (1.0 + sum)/x; result->err = 2.0 * (x + 1.0) * GSL_DBL_EPSILON * result->val; if(result->val == 0.0) UNDERFLOW_ERROR(result); else return GSL_SUCCESS; } else { UNDERFLOW_ERROR(result); } } static int expint_En_impl(const int n, const double x, gsl_sf_result * result, const int scale) { if (n < 0) { DOMAIN_ERROR(result); } else if (n == 0) { if (x == 0) { DOMAIN_ERROR(result); } else { result->val = (scale ? 1.0 : exp(-x)) / x; result->err = 2 * GSL_DBL_EPSILON * fabs(result->val); CHECK_UNDERFLOW(result); return GSL_SUCCESS; } } else if (n == 1) { return expint_E1_impl(x, result, scale); } else if (n == 2) { return expint_E2_impl(x, result, scale); } else { if(x < 0) { DOMAIN_ERROR(result); } if (x == 0) { result->val = (scale ? exp(x) : 1 ) * (1/(n-1.0)); result->err = 2 * GSL_DBL_EPSILON * fabs(result->val); CHECK_UNDERFLOW(result); return GSL_SUCCESS; } else { gsl_sf_result result_g; double prefactor = pow(x, n-1); int status = gsl_sf_gamma_inc_e (1-n, x, &result_g); double scale_factor = ( scale ? exp(x) : 1.0 ); result->val = scale_factor * prefactor * result_g.val; result->err = 2 * GSL_DBL_EPSILON * fabs(result->val); result->err += 2 * fabs(scale_factor * prefactor * result_g.err); if (status == GSL_SUCCESS) CHECK_UNDERFLOW(result); return status; } } } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_expint_E1_e(const double x, gsl_sf_result * result) { return expint_E1_impl(x, result, 0); } int gsl_sf_expint_E1_scaled_e(const double x, gsl_sf_result * result) { return expint_E1_impl(x, result, 1); } int gsl_sf_expint_E2_e(const double x, gsl_sf_result * result) { return expint_E2_impl(x, result, 0); } int gsl_sf_expint_E2_scaled_e(const double x, gsl_sf_result * result) { return expint_E2_impl(x, result, 1); } int gsl_sf_expint_En_e(const int n, const double x, gsl_sf_result * result) { return expint_En_impl(n, x, result, 0); } int gsl_sf_expint_En_scaled_e(const int n, const double x, gsl_sf_result * result) { return expint_En_impl(n, x, result, 1); } int gsl_sf_expint_Ei_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ { int status = gsl_sf_expint_E1_e(-x, result); result->val = -result->val; return status; } } int gsl_sf_expint_Ei_scaled_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ { int status = gsl_sf_expint_E1_scaled_e(-x, result); result->val = -result->val; return status; } } #if 0 static double recurse_En(int n, double x, double E1) { int i; double En = E1; double ex = exp(-x); for(i=2; i<=n; i++) { En = 1./(i-1) * (ex - x * En); } return En; } #endif /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_expint_E1(const double x) { EVAL_RESULT(gsl_sf_expint_E1_e(x, &result)); } double gsl_sf_expint_E1_scaled(const double x) { EVAL_RESULT(gsl_sf_expint_E1_scaled_e(x, &result)); } double gsl_sf_expint_E2(const double x) { EVAL_RESULT(gsl_sf_expint_E2_e(x, &result)); } double gsl_sf_expint_E2_scaled(const double x) { EVAL_RESULT(gsl_sf_expint_E2_scaled_e(x, &result)); } double gsl_sf_expint_En(const int n, const double x) { EVAL_RESULT(gsl_sf_expint_En_e(n, x, &result)); } double gsl_sf_expint_En_scaled(const int n, const double x) { EVAL_RESULT(gsl_sf_expint_En_scaled_e(n, x, &result)); } double gsl_sf_expint_Ei(const double x) { EVAL_RESULT(gsl_sf_expint_Ei_e(x, &result)); } double gsl_sf_expint_Ei_scaled(const double x) { EVAL_RESULT(gsl_sf_expint_Ei_scaled_e(x, &result)); } gsl/specfunc/transport.c0000644000175000017500000003104213536674414013740 0ustar eddedd/* specfunc/transport.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "error.h" #include "check.h" #include "chebyshev.h" #include "cheb_eval.c" static double transport2_data[18] = { 1.671760446434538503, -0.147735359946794490, 0.148213819946936338e-01, -0.14195330326305613e-02, 0.1306541324415708e-03, -0.117155795867579e-04, 0.10333498445756e-05, -0.901911304223e-07, 0.78177169833e-08, -0.6744565684e-09, 0.579946394e-10, -0.49747619e-11, 0.425961e-12, -0.36422e-13, 0.3111e-14, -0.265e-15, 0.23e-16, -0.19e-17 }; static cheb_series transport2_cs = { transport2_data, 17, -1, 1, 9 }; static double transport3_data[18] = { 0.762012543243872007, -0.105674387705058533, 0.119778084819657810e-01, -0.12144015203698307e-02, 0.1155099769392855e-03, -0.105815992124423e-04, 0.9474663385302e-06, -0.836221212858e-07, 0.73109099278e-08, -0.6350594779e-09, 0.549118282e-10, -0.47321395e-11, 0.4067695e-12, -0.348971e-13, 0.29892e-14, -0.256e-15, 0.219e-16, -0.19e-17 }; static cheb_series transport3_cs = { transport3_data, 17, -1, 1, 9 }; static double transport4_data[18] = { 0.4807570994615110579, -0.8175378810321083956e-01, 0.1002700665975162973e-01, -0.10599339359820151e-02, 0.1034506245030405e-03, -0.96442705485899e-05, 0.8745544408515e-06, -0.779321207981e-07, 0.68649886141e-08, -0.5999571076e-09, 0.521366241e-10, -0.45118382e-11, 0.3892159e-12, -0.334936e-13, 0.28767e-14, -0.2467e-15, 0.211e-16, -0.18e-17 }; static cheb_series transport4_cs = { transport4_data, 17, -1, 1, 9 }; static double transport5_data[18] = { 0.347777777133910789, -0.66456988976050428e-01, 0.8611072656883309e-02, -0.9396682223755538e-03, 0.936324806081513e-04, -0.88571319340833e-05, 0.811914989145e-06, -0.72957654233e-07, 0.646971455e-08, -0.568490283e-09, 0.49625598e-10, -0.4310940e-11, 0.373100e-12, -0.32198e-13, 0.2772e-14, -0.238e-15, 0.21e-16, -0.18e-17 }; static cheb_series transport5_cs = { transport5_data, 17, -1, 1, 9 }; static double transport_sumexp(const int numexp, const int order, const double t, double x) { double rk = (double)numexp; double sumexp = 0.0; int k; for(k=1; k<=numexp; k++) { double sum2 = 1.0; double xk = 1.0/(rk*x); double xk1 = 1.0; int j; for(j=1; j<=order; j++) { sum2 = sum2*xk1*xk + 1.0; xk1 += 1.0; } sumexp *= t; sumexp += sum2; rk -= 1.0; } return sumexp; } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_transport_2_e(const double x, gsl_sf_result * result) { const double val_infinity = 3.289868133696452873; /* CHECK_POINTER(result) */ if(x < 0.0) { DOMAIN_ERROR(result); } else if(x < 3.0*GSL_SQRT_DBL_EPSILON) { result->val = x; result->err = GSL_DBL_EPSILON*fabs(x) + x*x/2.0; return GSL_SUCCESS; } else if(x <= 4.0) { double t = (x*x/8.0 - 0.5) - 0.5; gsl_sf_result result_c; cheb_eval_e(&transport2_cs, t, &result_c); result->val = x * result_c.val; result->err = x * result_c.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < -GSL_LOG_DBL_EPSILON) { const int numexp = (int)((-GSL_LOG_DBL_EPSILON)/x) + 1; const double sumexp = transport_sumexp(numexp, 2, exp(-x), x); const double t = 2.0 * log(x) - x + log(sumexp); if(t < GSL_LOG_DBL_EPSILON) { result->val = val_infinity; result->err = 2.0 * GSL_DBL_EPSILON * val_infinity; } else { const double et = exp(t); result->val = val_infinity - et; result->err = 2.0 * GSL_DBL_EPSILON * (val_infinity + fabs(t) * et); } return GSL_SUCCESS; } else if(x < 2.0/GSL_DBL_EPSILON) { const int numexp = 1; const double sumexp = transport_sumexp(numexp, 2, 1.0, x); const double t = 2.0 * log(x) - x + log(sumexp); if(t < GSL_LOG_DBL_EPSILON) { result->val = val_infinity; result->err = 2.0 * GSL_DBL_EPSILON * val_infinity; } else { const double et = exp(t); result->val = val_infinity - et; result->err = 2.0 * GSL_DBL_EPSILON * (val_infinity + (fabs(t)+1.0) * et); } return GSL_SUCCESS; } else { const double t = 2.0 * log(x) - x; if(t < GSL_LOG_DBL_EPSILON) { result->val = val_infinity; result->err = 2.0 * GSL_DBL_EPSILON * val_infinity; } else { const double et = exp(t); result->val = val_infinity - et; result->err = 2.0 * GSL_DBL_EPSILON * (val_infinity + (fabs(t)+1.0) * et); } return GSL_SUCCESS; } } int gsl_sf_transport_3_e(const double x, gsl_sf_result * result) { const double val_infinity = 7.212341418957565712; /* CHECK_POINTER(result) */ if(x < 0.0) { DOMAIN_ERROR(result); } else if(x == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(x < 3.0*GSL_SQRT_DBL_EPSILON) { result->val = 0.5*x*x; result->err = 2.0 * GSL_DBL_EPSILON * result->val; CHECK_UNDERFLOW(result); return GSL_SUCCESS; } else if(x <= 4.0) { const double x2 = x*x; const double t = (x2/8.0 - 0.5) - 0.5; gsl_sf_result result_c; cheb_eval_e(&transport3_cs, t, &result_c); result->val = x2 * result_c.val; result->err = x2 * result_c.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < -GSL_LOG_DBL_EPSILON) { const int numexp = (int)((-GSL_LOG_DBL_EPSILON)/x) + 1; const double sumexp = transport_sumexp(numexp, 3, exp(-x), x); const double t = 3.0 * log(x) - x + log(sumexp); if(t < GSL_LOG_DBL_EPSILON) { result->val = val_infinity; result->err = 2.0 * GSL_DBL_EPSILON * val_infinity; } else { const double et = exp(t); result->val = val_infinity - et; result->err = 2.0 * GSL_DBL_EPSILON * (val_infinity + fabs(t) * et); } return GSL_SUCCESS; } else if(x < 3.0/GSL_DBL_EPSILON) { const int numexp = 1; const double sumexp = transport_sumexp(numexp, 3, 1.0, x); const double t = 3.0 * log(x) - x + log(sumexp); if(t < GSL_LOG_DBL_EPSILON) { result->val = val_infinity; result->err = 2.0 * GSL_DBL_EPSILON * val_infinity; } else { const double et = exp(t); result->val = val_infinity - et; result->err = 2.0 * GSL_DBL_EPSILON * (val_infinity + (fabs(t)+1.0) * et); } return GSL_SUCCESS; } else { const double t = 3.0 * log(x) - x; if(t < GSL_LOG_DBL_EPSILON) { result->val = val_infinity; result->err = 2.0 * GSL_DBL_EPSILON * val_infinity; } else { const double et = exp(t); result->val = val_infinity - et; result->err = 2.0 * GSL_DBL_EPSILON * (val_infinity + (fabs(t)+1.0) * et); } return GSL_SUCCESS; } } int gsl_sf_transport_4_e(const double x, gsl_sf_result * result) { const double val_infinity = 25.97575760906731660; /* CHECK_POINTER(result) */ if(x < 0.0) { DOMAIN_ERROR(result); } else if(x == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(x < 3.0*GSL_SQRT_DBL_EPSILON) { result->val = x*x*x/3.0; result->err = 3.0 * GSL_DBL_EPSILON * result->val; CHECK_UNDERFLOW(result); return GSL_SUCCESS; } else if(x <= 4.0) { const double x2 = x*x; const double t = (x2/8.0 - 0.5) - 0.5; gsl_sf_result result_c; cheb_eval_e(&transport4_cs, t, &result_c); result->val = x2*x * result_c.val; result->err = x2*x * result_c.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < -GSL_LOG_DBL_EPSILON) { const int numexp = (int)((-GSL_LOG_DBL_EPSILON)/x) + 1; const double sumexp = transport_sumexp(numexp, 4, exp(-x), x); const double t = 4.0 * log(x) - x + log(sumexp); if(t < GSL_LOG_DBL_EPSILON) { result->val = val_infinity; result->err = 2.0 * GSL_DBL_EPSILON * val_infinity; } else { const double et = exp(t); result->val = val_infinity - et; result->err = 2.0 * GSL_DBL_EPSILON * (val_infinity + (fabs(t)+1.0) * et); } return GSL_SUCCESS; } else if(x < 3.0/GSL_DBL_EPSILON) { const int numexp = 1; const double sumexp = transport_sumexp(numexp, 4, 1.0, x); const double t = 4.0 * log(x) - x + log(sumexp); if(t < GSL_LOG_DBL_EPSILON) { result->val = val_infinity; result->err = 2.0 * GSL_DBL_EPSILON * val_infinity; } else { const double et = exp(t); result->val = val_infinity - et; result->err = 2.0 * GSL_DBL_EPSILON * (val_infinity + (fabs(t)+1.0) * et); } return GSL_SUCCESS; } else { const double t = 4.0 * log(x) - x; if(t < GSL_LOG_DBL_EPSILON) { result->val = val_infinity; result->err = 2.0 * GSL_DBL_EPSILON * val_infinity; } else { const double et = exp(t); result->val = val_infinity - et; result->err = 2.0 * GSL_DBL_EPSILON * (val_infinity + (fabs(t)+1.0) * et); } return GSL_SUCCESS; } } int gsl_sf_transport_5_e(const double x, gsl_sf_result * result) { const double val_infinity = 124.4313306172043912; /* CHECK_POINTER(result) */ if(x < 0.0) { DOMAIN_ERROR(result); } else if(x == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(x < 3.0*GSL_SQRT_DBL_EPSILON) { result->val = x*x*x*x/4.0; result->err = 4.0 * GSL_DBL_EPSILON * result->val; CHECK_UNDERFLOW(result); return GSL_SUCCESS; } else if(x <= 4.0) { const double x2 = x*x; const double t = (x2/8.0 - 0.5) - 0.5; gsl_sf_result result_c; cheb_eval_e(&transport5_cs, t, &result_c); result->val = x2*x2 * result_c.val; result->err = x2*x2 * result_c.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < -GSL_LOG_DBL_EPSILON) { const int numexp = (int)((-GSL_LOG_DBL_EPSILON)/x) + 1; const double sumexp = transport_sumexp(numexp, 5, exp(-x), x); const double t = 5.0 * log(x) - x + log(sumexp); if(t < GSL_LOG_DBL_EPSILON) { result->val = val_infinity; result->err = 2.0 * GSL_DBL_EPSILON * val_infinity; } else { const double et = exp(t); result->val = val_infinity - et; result->err = 2.0 * GSL_DBL_EPSILON * (val_infinity + (fabs(t)+1.0) * et); } return GSL_SUCCESS; } else if(x < 3.0/GSL_DBL_EPSILON) { const int numexp = 1; const double sumexp = transport_sumexp(numexp, 5, 1.0, x); const double t = 5.0 * log(x) - x + log(sumexp); if(t < GSL_LOG_DBL_EPSILON) { result->val = val_infinity; result->err = 2.0 * GSL_DBL_EPSILON * val_infinity; } else { const double et = exp(t); result->val = val_infinity - et; result->err = 2.0 * GSL_DBL_EPSILON * (val_infinity + (fabs(t)+1.0) * et); } return GSL_SUCCESS; } else { const double t = 5.0 * log(x) - x; if(t < GSL_LOG_DBL_EPSILON) { result->val = val_infinity; result->err = 2.0 * GSL_DBL_EPSILON * val_infinity; } else { const double et = exp(t); result->val = val_infinity - et; result->err = 2.0 * GSL_DBL_EPSILON * (val_infinity + (fabs(t)+1.0) * et); } return GSL_SUCCESS; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_transport_2(const double x) { EVAL_RESULT(gsl_sf_transport_2_e(x, &result)); } double gsl_sf_transport_3(const double x) { EVAL_RESULT(gsl_sf_transport_3_e(x, &result)); } double gsl_sf_transport_4(const double x) { EVAL_RESULT(gsl_sf_transport_4_e(x, &result)); } double gsl_sf_transport_5(const double x) { EVAL_RESULT(gsl_sf_transport_5_e(x, &result)); } gsl/specfunc/zeta.c0000644000175000017500000010076013536674414012653 0ustar eddedd/* specfunc/zeta.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include #include "error.h" #include "chebyshev.h" #include "cheb_eval.c" #define LogTwoPi_ 1.8378770664093454835606594728111235279723 /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* chebyshev fit for (s(t)-1)Zeta[s(t)] * s(t)= (t+1)/2 * -1 <= t <= 1 */ static double zeta_xlt1_data[14] = { 1.48018677156931561235192914649, 0.25012062539889426471999938167, 0.00991137502135360774243761467, -0.00012084759656676410329833091, -4.7585866367662556504652535281e-06, 2.2229946694466391855561441361e-07, -2.2237496498030257121309056582e-09, -1.0173226513229028319420799028e-10, 4.3756643450424558284466248449e-12, -6.2229632593100551465504090814e-14, -6.6116201003272207115277520305e-16, 4.9477279533373912324518463830e-17, -1.0429819093456189719660003522e-18, 6.9925216166580021051464412040e-21, }; static cheb_series zeta_xlt1_cs = { zeta_xlt1_data, 13, -1, 1, 8 }; /* chebyshev fit for (s(t)-1)Zeta[s(t)] * s(t)= (19t+21)/2 * -1 <= t <= 1 */ static double zeta_xgt1_data[30] = { 19.3918515726724119415911269006, 9.1525329692510756181581271500, 0.2427897658867379985365270155, -0.1339000688262027338316641329, 0.0577827064065028595578410202, -0.0187625983754002298566409700, 0.0039403014258320354840823803, -0.0000581508273158127963598882, -0.0003756148907214820704594549, 0.0001892530548109214349092999, -0.0000549032199695513496115090, 8.7086484008939038610413331863e-6, 6.4609477924811889068410083425e-7, -9.6749773915059089205835337136e-7, 3.6585400766767257736982342461e-7, -8.4592516427275164351876072573e-8, 9.9956786144497936572288988883e-9, 1.4260036420951118112457144842e-9, -1.1761968823382879195380320948e-9, 3.7114575899785204664648987295e-10, -7.4756855194210961661210215325e-11, 7.8536934209183700456512982968e-12, 9.9827182259685539619810406271e-13, -7.5276687030192221587850302453e-13, 2.1955026393964279988917878654e-13, -4.1934859852834647427576319246e-14, 4.6341149635933550715779074274e-15, 2.3742488509048340106830309402e-16, -2.7276516388124786119323824391e-16, 7.8473570134636044722154797225e-17 }; static cheb_series zeta_xgt1_cs = { zeta_xgt1_data, 29, -1, 1, 17 }; /* chebyshev fit for Ln[Zeta[s(t)] - 1 - 2^(-s(t))] * s(t)= 10 + 5t * -1 <= t <= 1; 5 <= s <= 15 */ static double zetam1_inter_data[24] = { -21.7509435653088483422022339374, -5.63036877698121782876372020472, 0.0528041358684229425504861579635, -0.0156381809179670789342700883562, 0.00408218474372355881195080781927, -0.0010264867349474874045036628282, 0.000260469880409886900143834962387, -0.0000676175847209968878098566819447, 0.0000179284472587833525426660171124, -4.83238651318556188834107605116e-6, 1.31913788964999288471371329447e-6, -3.63760500656329972578222188542e-7, 1.01146847513194744989748396574e-7, -2.83215225141806501619105289509e-8, 7.97733710252021423361012829496e-9, -2.25850168553956886676250696891e-9, 6.42269392950164306086395744145e-10, -1.83363861846127284505060843614e-10, 5.25309763895283179960368072104e-11, -1.50958687042589821074710575446e-11, 4.34997545516049244697776942981e-12, -1.25597782748190416118082322061e-12, 3.61280740072222650030134104162e-13, -9.66437239205745207188920348801e-14 }; static cheb_series zetam1_inter_cs = { zetam1_inter_data, 22, -1, 1, 12 }; /* assumes s >= 0 and s != 1.0 */ inline static int riemann_zeta_sgt0(double s, gsl_sf_result * result) { if(s < 1.0) { gsl_sf_result c; cheb_eval_e(&zeta_xlt1_cs, 2.0*s - 1.0, &c); result->val = c.val / (s - 1.0); result->err = c.err / fabs(s-1.0) + GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(s <= 20.0) { double x = (2.0*s - 21.0)/19.0; gsl_sf_result c; cheb_eval_e(&zeta_xgt1_cs, x, &c); result->val = c.val / (s - 1.0); result->err = c.err / (s - 1.0) + GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { double f2 = 1.0 - pow(2.0,-s); double f3 = 1.0 - pow(3.0,-s); double f5 = 1.0 - pow(5.0,-s); double f7 = 1.0 - pow(7.0,-s); result->val = 1.0/(f2*f3*f5*f7); result->err = 3.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } inline static int riemann_zeta1ms_slt0(double s, gsl_sf_result * result) { if(s > -19.0) { double x = (-19 - 2.0*s)/19.0; gsl_sf_result c; cheb_eval_e(&zeta_xgt1_cs, x, &c); result->val = c.val / (-s); result->err = c.err / (-s) + GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { double f2 = 1.0 - pow(2.0,-(1.0-s)); double f3 = 1.0 - pow(3.0,-(1.0-s)); double f5 = 1.0 - pow(5.0,-(1.0-s)); double f7 = 1.0 - pow(7.0,-(1.0-s)); result->val = 1.0/(f2*f3*f5*f7); result->err = 3.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } /* works for 5 < s < 15*/ static int riemann_zeta_minus_1_intermediate_s(double s, gsl_sf_result * result) { double t = (s - 10.0)/5.0; gsl_sf_result c; cheb_eval_e(&zetam1_inter_cs, t, &c); result->val = exp(c.val) + pow(2.0, -s); result->err = (c.err + 2.0*GSL_DBL_EPSILON)*result->val; return GSL_SUCCESS; } /* assumes s is large and positive * write: zeta(s) - 1 = zeta(s) * (1 - 1/zeta(s)) * and expand a few terms of the product formula to evaluate 1 - 1/zeta(s) * * works well for s > 15 */ static int riemann_zeta_minus1_large_s(double s, gsl_sf_result * result) { double a = pow( 2.0,-s); double b = pow( 3.0,-s); double c = pow( 5.0,-s); double d = pow( 7.0,-s); double e = pow(11.0,-s); double f = pow(13.0,-s); double t1 = a + b + c + d + e + f; double t2 = a*(b+c+d+e+f) + b*(c+d+e+f) + c*(d+e+f) + d*(e+f) + e*f; /* double t3 = a*(b*(c+d+e+f) + c*(d+e+f) + d*(e+f) + e*f) + b*(c*(d+e+f) + d*(e+f) + e*f) + c*(d*(e+f) + e*f) + d*e*f; double t4 = a*(b*(c*(d + e + f) + d*(e + f) + e*f) + c*(d*(e+f) + e*f) + d*e*f) + b*(c*(d*(e+f) + e*f) + d*e*f) + c*d*e*f; double t5 = b*c*d*e*f + a*c*d*e*f+ a*b*d*e*f+ a*b*c*e*f+ a*b*c*d*f+ a*b*c*d*e; double t6 = a*b*c*d*e*f; */ double numt = t1 - t2 /* + t3 - t4 + t5 - t6 */; double zeta = 1.0/((1.0-a)*(1.0-b)*(1.0-c)*(1.0-d)*(1.0-e)*(1.0-f)); result->val = numt*zeta; result->err = (15.0/s + 1.0) * 6.0*GSL_DBL_EPSILON*result->val; return GSL_SUCCESS; } #if 0 /* zeta(n) */ #define ZETA_POS_TABLE_NMAX 100 static double zeta_pos_int_table_OLD[ZETA_POS_TABLE_NMAX+1] = { -0.50000000000000000000000000000, /* zeta(0) */ 0.0 /* FIXME: DirectedInfinity() */, /* zeta(1) */ 1.64493406684822643647241516665, /* ... */ 1.20205690315959428539973816151, 1.08232323371113819151600369654, 1.03692775514336992633136548646, 1.01734306198444913971451792979, 1.00834927738192282683979754985, 1.00407735619794433937868523851, 1.00200839282608221441785276923, 1.00099457512781808533714595890, 1.00049418860411946455870228253, 1.00024608655330804829863799805, 1.00012271334757848914675183653, 1.00006124813505870482925854511, 1.00003058823630702049355172851, 1.00001528225940865187173257149, 1.00000763719763789976227360029, 1.00000381729326499983985646164, 1.00000190821271655393892565696, 1.00000095396203387279611315204, 1.00000047693298678780646311672, 1.00000023845050272773299000365, 1.00000011921992596531107306779, 1.00000005960818905125947961244, 1.00000002980350351465228018606, 1.00000001490155482836504123466, 1.00000000745071178983542949198, 1.00000000372533402478845705482, 1.00000000186265972351304900640, 1.00000000093132743241966818287, 1.00000000046566290650337840730, 1.00000000023283118336765054920, 1.00000000011641550172700519776, 1.00000000005820772087902700889, 1.00000000002910385044497099687, 1.00000000001455192189104198424, 1.00000000000727595983505748101, 1.00000000000363797954737865119, 1.00000000000181898965030706595, 1.00000000000090949478402638893, 1.00000000000045474737830421540, 1.00000000000022737368458246525, 1.00000000000011368684076802278, 1.00000000000005684341987627586, 1.00000000000002842170976889302, 1.00000000000001421085482803161, 1.00000000000000710542739521085, 1.00000000000000355271369133711, 1.00000000000000177635684357912, 1.00000000000000088817842109308, 1.00000000000000044408921031438, 1.00000000000000022204460507980, 1.00000000000000011102230251411, 1.00000000000000005551115124845, 1.00000000000000002775557562136, 1.00000000000000001387778780973, 1.00000000000000000693889390454, 1.00000000000000000346944695217, 1.00000000000000000173472347605, 1.00000000000000000086736173801, 1.00000000000000000043368086900, 1.00000000000000000021684043450, 1.00000000000000000010842021725, 1.00000000000000000005421010862, 1.00000000000000000002710505431, 1.00000000000000000001355252716, 1.00000000000000000000677626358, 1.00000000000000000000338813179, 1.00000000000000000000169406589, 1.00000000000000000000084703295, 1.00000000000000000000042351647, 1.00000000000000000000021175824, 1.00000000000000000000010587912, 1.00000000000000000000005293956, 1.00000000000000000000002646978, 1.00000000000000000000001323489, 1.00000000000000000000000661744, 1.00000000000000000000000330872, 1.00000000000000000000000165436, 1.00000000000000000000000082718, 1.00000000000000000000000041359, 1.00000000000000000000000020680, 1.00000000000000000000000010340, 1.00000000000000000000000005170, 1.00000000000000000000000002585, 1.00000000000000000000000001292, 1.00000000000000000000000000646, 1.00000000000000000000000000323, 1.00000000000000000000000000162, 1.00000000000000000000000000081, 1.00000000000000000000000000040, 1.00000000000000000000000000020, 1.00000000000000000000000000010, 1.00000000000000000000000000005, 1.00000000000000000000000000003, 1.00000000000000000000000000001, 1.00000000000000000000000000001, 1.00000000000000000000000000000, 1.00000000000000000000000000000, 1.00000000000000000000000000000 }; #endif /* 0 */ /* zeta(n) - 1 */ #define ZETA_POS_TABLE_NMAX 100 static double zetam1_pos_int_table[ZETA_POS_TABLE_NMAX+1] = { -1.5, /* zeta(0) */ 0.0, /* FIXME: Infinity */ /* zeta(1) - 1 */ 0.644934066848226436472415166646, /* zeta(2) - 1 */ 0.202056903159594285399738161511, 0.082323233711138191516003696541, 0.036927755143369926331365486457, 0.017343061984449139714517929790, 0.008349277381922826839797549849, 0.004077356197944339378685238508, 0.002008392826082214417852769232, 0.000994575127818085337145958900, 0.000494188604119464558702282526, 0.000246086553308048298637998047, 0.000122713347578489146751836526, 0.000061248135058704829258545105, 0.000030588236307020493551728510, 0.000015282259408651871732571487, 7.6371976378997622736002935630e-6, 3.8172932649998398564616446219e-6, 1.9082127165539389256569577951e-6, 9.5396203387279611315203868344e-7, 4.7693298678780646311671960437e-7, 2.3845050272773299000364818675e-7, 1.1921992596531107306778871888e-7, 5.9608189051259479612440207935e-8, 2.9803503514652280186063705069e-8, 1.4901554828365041234658506630e-8, 7.4507117898354294919810041706e-9, 3.7253340247884570548192040184e-9, 1.8626597235130490064039099454e-9, 9.3132743241966818287176473502e-10, 4.6566290650337840729892332512e-10, 2.3283118336765054920014559759e-10, 1.1641550172700519775929738354e-10, 5.8207720879027008892436859891e-11, 2.9103850444970996869294252278e-11, 1.4551921891041984235929632245e-11, 7.2759598350574810145208690123e-12, 3.6379795473786511902372363558e-12, 1.8189896503070659475848321007e-12, 9.0949478402638892825331183869e-13, 4.5474737830421540267991120294e-13, 2.2737368458246525152268215779e-13, 1.1368684076802278493491048380e-13, 5.6843419876275856092771829675e-14, 2.8421709768893018554550737049e-14, 1.4210854828031606769834307141e-14, 7.1054273952108527128773544799e-15, 3.5527136913371136732984695340e-15, 1.7763568435791203274733490144e-15, 8.8817842109308159030960913863e-16, 4.4408921031438133641977709402e-16, 2.2204460507980419839993200942e-16, 1.1102230251410661337205445699e-16, 5.5511151248454812437237365905e-17, 2.7755575621361241725816324538e-17, 1.3877787809725232762839094906e-17, 6.9388939045441536974460853262e-18, 3.4694469521659226247442714961e-18, 1.7347234760475765720489729699e-18, 8.6736173801199337283420550673e-19, 4.3368086900206504874970235659e-19, 2.1684043449972197850139101683e-19, 1.0842021724942414063012711165e-19, 5.4210108624566454109187004043e-20, 2.7105054312234688319546213119e-20, 1.3552527156101164581485233996e-20, 6.7762635780451890979952987415e-21, 3.3881317890207968180857031004e-21, 1.6940658945097991654064927471e-21, 8.4703294725469983482469926091e-22, 4.2351647362728333478622704833e-22, 2.1175823681361947318442094398e-22, 1.0587911840680233852265001539e-22, 5.2939559203398703238139123029e-23, 2.6469779601698529611341166842e-23, 1.3234889800848990803094510250e-23, 6.6174449004244040673552453323e-24, 3.3087224502121715889469563843e-24, 1.6543612251060756462299236771e-24, 8.2718061255303444036711056167e-25, 4.1359030627651609260093824555e-25, 2.0679515313825767043959679193e-25, 1.0339757656912870993284095591e-25, 5.1698788284564313204101332166e-26, 2.5849394142282142681277617708e-26, 1.2924697071141066700381126118e-26, 6.4623485355705318034380021611e-27, 3.2311742677852653861348141180e-27, 1.6155871338926325212060114057e-27, 8.0779356694631620331587381863e-28, 4.0389678347315808256222628129e-28, 2.0194839173657903491587626465e-28, 1.0097419586828951533619250700e-28, 5.0487097934144756960847711725e-29, 2.5243548967072378244674341938e-29, 1.2621774483536189043753999660e-29, 6.3108872417680944956826093943e-30, 3.1554436208840472391098412184e-30, 1.5777218104420236166444327830e-30, 7.8886090522101180735205378276e-31 }; #define ZETA_NEG_TABLE_NMAX 99 #define ZETA_NEG_TABLE_SIZE 50 static double zeta_neg_int_table[ZETA_NEG_TABLE_SIZE] = { -0.083333333333333333333333333333, /* zeta(-1) */ 0.008333333333333333333333333333, /* zeta(-3) */ -0.003968253968253968253968253968, /* ... */ 0.004166666666666666666666666667, -0.007575757575757575757575757576, 0.021092796092796092796092796093, -0.083333333333333333333333333333, 0.44325980392156862745098039216, -3.05395433027011974380395433027, 26.4562121212121212121212121212, -281.460144927536231884057971014, 3607.5105463980463980463980464, -54827.583333333333333333333333, 974936.82385057471264367816092, -2.0052695796688078946143462272e+07, 4.7238486772162990196078431373e+08, -1.2635724795916666666666666667e+10, 3.8087931125245368811553022079e+11, -1.2850850499305083333333333333e+13, 4.8241448354850170371581670362e+14, -2.0040310656516252738108421663e+16, 9.1677436031953307756992753623e+17, -4.5979888343656503490437943262e+19, 2.5180471921451095697089023320e+21, -1.5001733492153928733711440151e+23, 9.6899578874635940656497942895e+24, -6.7645882379292820990945242302e+26, 5.0890659468662289689766332916e+28, -4.1147288792557978697665486068e+30, 3.5666582095375556109684574609e+32, -3.3066089876577576725680214670e+34, 3.2715634236478716264211227016e+36, -3.4473782558278053878256455080e+38, 3.8614279832705258893092720200e+40, -4.5892974432454332168863989006e+42, 5.7775386342770431824884825688e+44, -7.6919858759507135167410075972e+46, 1.0813635449971654696354033351e+49, -1.6029364522008965406067102346e+51, 2.5019479041560462843656661499e+53, -4.1067052335810212479752045004e+55, 7.0798774408494580617452972433e+57, -1.2804546887939508790190849756e+60, 2.4267340392333524078020892067e+62, -4.8143218874045769355129570066e+64, 9.9875574175727530680652777408e+66, -2.1645634868435185631335136160e+69, 4.8962327039620553206849224516e+71, /* ... */ -1.1549023923963519663954271692e+74, /* zeta(-97) */ 2.8382249570693706959264156336e+76 /* zeta(-99) */ }; /* coefficients for Maclaurin summation in hzeta() * B_{2j}/(2j)! */ static double hzeta_c[15] = { 1.00000000000000000000000000000, 0.083333333333333333333333333333, -0.00138888888888888888888888888889, 0.000033068783068783068783068783069, -8.2671957671957671957671957672e-07, 2.0876756987868098979210090321e-08, -5.2841901386874931848476822022e-10, 1.3382536530684678832826980975e-11, -3.3896802963225828668301953912e-13, 8.5860620562778445641359054504e-15, -2.1748686985580618730415164239e-16, 5.5090028283602295152026526089e-18, -1.3954464685812523340707686264e-19, 3.5347070396294674716932299778e-21, -8.9535174270375468504026113181e-23 }; #define ETA_POS_TABLE_NMAX 100 static double eta_pos_int_table[ETA_POS_TABLE_NMAX+1] = { 0.50000000000000000000000000000, /* eta(0) */ M_LN2, /* eta(1) */ 0.82246703342411321823620758332, /* ... */ 0.90154267736969571404980362113, 0.94703282949724591757650323447, 0.97211977044690930593565514355, 0.98555109129743510409843924448, 0.99259381992283028267042571313, 0.99623300185264789922728926008, 0.99809429754160533076778303185, 0.99903950759827156563922184570, 0.99951714349806075414409417483, 0.99975768514385819085317967871, 0.99987854276326511549217499282, 0.99993917034597971817095419226, 0.99996955121309923808263293263, 0.99998476421490610644168277496, 0.99999237829204101197693787224, 0.99999618786961011347968922641, 0.99999809350817167510685649297, 0.99999904661158152211505084256, 0.99999952325821554281631666433, 0.99999976161323082254789720494, 0.99999988080131843950322382485, 0.99999994039889239462836140314, 0.99999997019885696283441513311, 0.99999998509923199656878766181, 0.99999999254955048496351585274, 0.99999999627475340010872752767, 0.99999999813736941811218674656, 0.99999999906868228145397862728, 0.99999999953434033145421751469, 0.99999999976716989595149082282, 0.99999999988358485804603047265, 0.99999999994179239904531592388, 0.99999999997089618952980952258, 0.99999999998544809143388476396, 0.99999999999272404460658475006, 0.99999999999636202193316875550, 0.99999999999818101084320873555, 0.99999999999909050538047887809, 0.99999999999954525267653087357, 0.99999999999977262633369589773, 0.99999999999988631316532476488, 0.99999999999994315658215465336, 0.99999999999997157829090808339, 0.99999999999998578914539762720, 0.99999999999999289457268000875, 0.99999999999999644728633373609, 0.99999999999999822364316477861, 0.99999999999999911182158169283, 0.99999999999999955591079061426, 0.99999999999999977795539522974, 0.99999999999999988897769758908, 0.99999999999999994448884878594, 0.99999999999999997224442439010, 0.99999999999999998612221219410, 0.99999999999999999306110609673, 0.99999999999999999653055304826, 0.99999999999999999826527652409, 0.99999999999999999913263826204, 0.99999999999999999956631913101, 0.99999999999999999978315956551, 0.99999999999999999989157978275, 0.99999999999999999994578989138, 0.99999999999999999997289494569, 0.99999999999999999998644747284, 0.99999999999999999999322373642, 0.99999999999999999999661186821, 0.99999999999999999999830593411, 0.99999999999999999999915296705, 0.99999999999999999999957648353, 0.99999999999999999999978824176, 0.99999999999999999999989412088, 0.99999999999999999999994706044, 0.99999999999999999999997353022, 0.99999999999999999999998676511, 0.99999999999999999999999338256, 0.99999999999999999999999669128, 0.99999999999999999999999834564, 0.99999999999999999999999917282, 0.99999999999999999999999958641, 0.99999999999999999999999979320, 0.99999999999999999999999989660, 0.99999999999999999999999994830, 0.99999999999999999999999997415, 0.99999999999999999999999998708, 0.99999999999999999999999999354, 0.99999999999999999999999999677, 0.99999999999999999999999999838, 0.99999999999999999999999999919, 0.99999999999999999999999999960, 0.99999999999999999999999999980, 0.99999999999999999999999999990, 0.99999999999999999999999999995, 0.99999999999999999999999999997, 0.99999999999999999999999999999, 0.99999999999999999999999999999, 1.00000000000000000000000000000, 1.00000000000000000000000000000, 1.00000000000000000000000000000, }; #define ETA_NEG_TABLE_NMAX 99 #define ETA_NEG_TABLE_SIZE 50 static double eta_neg_int_table[ETA_NEG_TABLE_SIZE] = { 0.25000000000000000000000000000, /* eta(-1) */ -0.12500000000000000000000000000, /* eta(-3) */ 0.25000000000000000000000000000, /* ... */ -1.06250000000000000000000000000, 7.75000000000000000000000000000, -86.3750000000000000000000000000, 1365.25000000000000000000000000, -29049.0312500000000000000000000, 800572.750000000000000000000000, -2.7741322625000000000000000000e+7, 1.1805291302500000000000000000e+9, -6.0523980051687500000000000000e+10, 3.6794167785377500000000000000e+12, -2.6170760990658387500000000000e+14, 2.1531418140800295250000000000e+16, -2.0288775575173015930156250000e+18, 2.1708009902623770590275000000e+20, -2.6173826968455814932120125000e+22, 3.5324148876863877826668602500e+24, -5.3042033406864906641493838981e+26, 8.8138218364311576767253114668e+28, -1.6128065107490778547354654864e+31, 3.2355470001722734208527794569e+33, -7.0876727476537493198506645215e+35, 1.6890450341293965779175629389e+38, -4.3639690731216831157655651358e+40, 1.2185998827061261322605065672e+43, -3.6670584803153006180101262324e+45, 1.1859898526302099104271449748e+48, -4.1120769493584015047981746438e+50, 1.5249042436787620309090168687e+53, -6.0349693196941307074572991901e+55, 2.5437161764210695823197691519e+58, -1.1396923802632287851130360170e+61, 5.4180861064753979196802726455e+63, -2.7283654799994373847287197104e+66, 1.4529750514918543238511171663e+69, -8.1705519371067450079777183386e+71, 4.8445781606678367790247757259e+74, -3.0246694206649519336179448018e+77, 1.9858807961690493054169047970e+80, -1.3694474620720086994386818232e+83, 9.9070382984295807826303785989e+85, -7.5103780796592645925968460677e+88, 5.9598418264260880840077992227e+91, -4.9455988887500020399263196307e+94, 4.2873596927020241277675775935e+97, -3.8791952037716162900707994047e+100, 3.6600317773156342245401829308e+103, -3.5978775704117283875784869570e+106 /* eta(-99) */ }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_hzeta_e(const double s, const double q, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(s <= 1.0 || q <= 0.0) { DOMAIN_ERROR(result); } else { const double max_bits = 54.0; const double ln_term0 = -s * log(q); if(ln_term0 < GSL_LOG_DBL_MIN + 1.0) { UNDERFLOW_ERROR(result); } else if(ln_term0 > GSL_LOG_DBL_MAX - 1.0) { OVERFLOW_ERROR (result); } else if((s > max_bits && q < 1.0) || (s > 0.5*max_bits && q < 0.25)) { result->val = pow(q, -s); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(s > 0.5*max_bits && q < 1.0) { const double p1 = pow(q, -s); const double p2 = pow(q/(1.0+q), s); const double p3 = pow(q/(2.0+q), s); result->val = p1 * (1.0 + p2 + p3); result->err = GSL_DBL_EPSILON * (0.5*s + 2.0) * fabs(result->val); return GSL_SUCCESS; } else { /* Euler-Maclaurin summation formula * [Moshier, p. 400, with several typo corrections] */ const int jmax = 12; const int kmax = 10; int j, k; const double pmax = pow(kmax + q, -s); double scp = s; double pcp = pmax / (kmax + q); double ans = pmax*((kmax+q)/(s-1.0) + 0.5); for(k=0; kval = ans; result->err = 2.0 * (jmax + 1.0) * GSL_DBL_EPSILON * fabs(ans); return GSL_SUCCESS; } } } int gsl_sf_zeta_e(const double s, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(s == 1.0) { DOMAIN_ERROR(result); } else if(s >= 0.0) { return riemann_zeta_sgt0(s, result); } else { /* reflection formula, [Abramowitz+Stegun, 23.2.5] */ gsl_sf_result zeta_one_minus_s; const int stat_zoms = riemann_zeta1ms_slt0(s, &zeta_one_minus_s); const double sin_term = (fmod(s,2.0) == 0.0) ? 0.0 : sin(0.5*M_PI*fmod(s,4.0))/M_PI; if(sin_term == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(s > -170) { /* We have to be careful about losing digits * in calculating pow(2 Pi, s). The gamma * function is fine because we were careful * with that implementation. * We keep an array of (2 Pi)^(10 n). */ const double twopi_pow[18] = { 1.0, 9.589560061550901348e+007, 9.195966217409212684e+015, 8.818527036583869903e+023, 8.456579467173150313e+031, 8.109487671573504384e+039, 7.776641909496069036e+047, 7.457457466828644277e+055, 7.151373628461452286e+063, 6.857852693272229709e+071, 6.576379029540265771e+079, 6.306458169130020789e+087, 6.047615938853066678e+095, 5.799397627482402614e+103, 5.561367186955830005e+111, 5.333106466365131227e+119, 5.114214477385391780e+127, 4.904306689854036836e+135 }; const int n = floor((-s)/10.0); const double fs = s + 10.0*n; const double p = pow(2.0*M_PI, fs) / twopi_pow[n]; gsl_sf_result g; const int stat_g = gsl_sf_gamma_e(1.0-s, &g); result->val = p * g.val * sin_term * zeta_one_minus_s.val; result->err = fabs(p * g.val * sin_term) * zeta_one_minus_s.err; result->err += fabs(p * sin_term * zeta_one_minus_s.val) * g.err; result->err += GSL_DBL_EPSILON * (fabs(s)+2.0) * fabs(result->val); return GSL_ERROR_SELECT_2(stat_g, stat_zoms); } else { /* The actual zeta function may or may not * overflow here. But we have no easy way * to calculate it when the prefactor(s) * overflow. Trying to use log's and exp * is no good because we loose a couple * digits to the exp error amplification. * When we gather a little more patience, * we can implement something here. Until * then just give up. */ OVERFLOW_ERROR(result); } } } int gsl_sf_zeta_int_e(const int n, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(n < 0) { if(!GSL_IS_ODD(n)) { result->val = 0.0; /* exactly zero at even negative integers */ result->err = 0.0; return GSL_SUCCESS; } else if(n > -ZETA_NEG_TABLE_NMAX) { result->val = zeta_neg_int_table[-(n+1)/2]; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { return gsl_sf_zeta_e((double)n, result); } } else if(n == 1){ DOMAIN_ERROR(result); } else if(n <= ZETA_POS_TABLE_NMAX){ result->val = 1.0 + zetam1_pos_int_table[n]; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { result->val = 1.0; result->err = GSL_DBL_EPSILON; return GSL_SUCCESS; } } int gsl_sf_zetam1_e(const double s, gsl_sf_result * result) { if(s <= 5.0) { int stat = gsl_sf_zeta_e(s, result); result->val = result->val - 1.0; return stat; } else if(s < 15.0) { return riemann_zeta_minus_1_intermediate_s(s, result); } else { return riemann_zeta_minus1_large_s(s, result); } } int gsl_sf_zetam1_int_e(const int n, gsl_sf_result * result) { if(n < 0) { if(!GSL_IS_ODD(n)) { result->val = -1.0; /* at even negative integers zetam1 == -1 since zeta is exactly zero */ result->err = 0.0; return GSL_SUCCESS; } else if(n > -ZETA_NEG_TABLE_NMAX) { result->val = zeta_neg_int_table[-(n+1)/2] - 1.0; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { /* could use gsl_sf_zetam1_e here but subtracting 1 makes no difference for such large values, so go straight to the result */ return gsl_sf_zeta_e((double)n, result); } } else if(n == 1){ DOMAIN_ERROR(result); } else if(n <= ZETA_POS_TABLE_NMAX){ result->val = zetam1_pos_int_table[n]; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { return gsl_sf_zetam1_e(n, result); } } int gsl_sf_eta_int_e(int n, gsl_sf_result * result) { if(n > ETA_POS_TABLE_NMAX) { result->val = 1.0; result->err = GSL_DBL_EPSILON; return GSL_SUCCESS; } else if(n >= 0) { result->val = eta_pos_int_table[n]; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { /* n < 0 */ if(!GSL_IS_ODD(n)) { /* exactly zero at even negative integers */ result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(n > -ETA_NEG_TABLE_NMAX) { result->val = eta_neg_int_table[-(n+1)/2]; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { gsl_sf_result z; gsl_sf_result p; int stat_z = gsl_sf_zeta_int_e(n, &z); int stat_p = gsl_sf_exp_e((1.0-n)*M_LN2, &p); int stat_m = gsl_sf_multiply_e(-p.val, z.val, result); result->err = fabs(p.err * (M_LN2*(1.0-n)) * z.val) + z.err * fabs(p.val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_3(stat_m, stat_p, stat_z); } } } int gsl_sf_eta_e(const double s, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(s > 100.0) { result->val = 1.0; result->err = GSL_DBL_EPSILON; return GSL_SUCCESS; } else if(fabs(s-1.0) < 10.0*GSL_ROOT5_DBL_EPSILON) { double del = s-1.0; double c0 = M_LN2; double c1 = M_LN2 * (M_EULER - 0.5*M_LN2); double c2 = -0.0326862962794492996; double c3 = 0.0015689917054155150; double c4 = 0.00074987242112047532; result->val = c0 + del * (c1 + del * (c2 + del * (c3 + del * c4))); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { gsl_sf_result z; gsl_sf_result p; int stat_z = gsl_sf_zeta_e(s, &z); int stat_p = gsl_sf_exp_e((1.0-s)*M_LN2, &p); int stat_m = gsl_sf_multiply_e(1.0-p.val, z.val, result); result->err = fabs(p.err * (M_LN2*(1.0-s)) * z.val) + z.err * fabs(p.val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_3(stat_m, stat_p, stat_z); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_zeta(const double s) { EVAL_RESULT(gsl_sf_zeta_e(s, &result)); } double gsl_sf_hzeta(const double s, const double a) { EVAL_RESULT(gsl_sf_hzeta_e(s, a, &result)); } double gsl_sf_zeta_int(const int s) { EVAL_RESULT(gsl_sf_zeta_int_e(s, &result)); } double gsl_sf_zetam1(const double s) { EVAL_RESULT(gsl_sf_zetam1_e(s, &result)); } double gsl_sf_zetam1_int(const int s) { EVAL_RESULT(gsl_sf_zetam1_int_e(s, &result)); } double gsl_sf_eta_int(const int s) { EVAL_RESULT(gsl_sf_eta_int_e(s, &result)); } double gsl_sf_eta(const double s) { EVAL_RESULT(gsl_sf_eta_e(s, &result)); } gsl/specfunc/gsl_sf_psi.h0000644000175000017500000000517313536674414014047 0ustar eddedd/* specfunc/gsl_sf_psi.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_PSI_H__ #define __GSL_SF_PSI_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Poly-Gamma Functions * * psi(m,x) := (d/dx)^m psi(0,x) = (d/dx)^{m+1} log(gamma(x)) */ /* Di-Gamma Function psi(n) = psi(0,n) * * n > 0 * exceptions: GSL_EDOM */ int gsl_sf_psi_int_e(const int n, gsl_sf_result * result); double gsl_sf_psi_int(const int n); /* Di-Gamma Function psi(x) = psi(0, x) * * x != 0.0, -1.0, -2.0, ... * exceptions: GSL_EDOM, GSL_ELOSS */ int gsl_sf_psi_e(const double x, gsl_sf_result * result); double gsl_sf_psi(const double x); /* Di-Gamma Function Re[psi(1 + I y)] * * exceptions: none */ int gsl_sf_psi_1piy_e(const double y, gsl_sf_result * result); double gsl_sf_psi_1piy(const double y); /* Di-Gamma Function psi(z) for general complex argument z = x + iy * * exceptions: GSL_EDOM */ int gsl_sf_complex_psi_e( const double x, const double y, gsl_sf_result * result_re, gsl_sf_result * result_im ); /* Tri-Gamma Function psi^(1)(n) * * n > 0 * exceptions: GSL_EDOM */ int gsl_sf_psi_1_int_e(const int n, gsl_sf_result * result); double gsl_sf_psi_1_int(const int n); /* Tri-Gamma Function psi^(1)(x) * * x != 0.0, -1.0, -2.0, ... * exceptions: GSL_EDOM, GSL_ELOSS */ int gsl_sf_psi_1_e(const double x, gsl_sf_result * result); double gsl_sf_psi_1(const double x); /* Poly-Gamma Function psi^(n)(x) * * n >= 0, x > 0.0 * exceptions: GSL_EDOM */ int gsl_sf_psi_n_e(const int n, const double x, gsl_sf_result * result); double gsl_sf_psi_n(const int n, const double x); __END_DECLS #endif /* __GSL_SF_PSI_H__ */ gsl/specfunc/gsl_sf_lambert.h0000644000175000017500000000342513536674414014700 0ustar eddedd/* specfunc/gsl_sf_lambert.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_LAMBERT_H__ #define __GSL_SF_LAMBERT_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Lambert's Function W_0(x) * * W_0(x) is the principal branch of the * implicit function defined by W e^W = x. * * -1/E < x < \infty * * exceptions: GSL_EMAXITER; */ int gsl_sf_lambert_W0_e(double x, gsl_sf_result * result); double gsl_sf_lambert_W0(double x); /* Lambert's Function W_{-1}(x) * * W_{-1}(x) is the second real branch of the * implicit function defined by W e^W = x. * It agrees with W_0(x) when x >= 0. * * -1/E < x < \infty * * exceptions: GSL_MAXITER; */ int gsl_sf_lambert_Wm1_e(double x, gsl_sf_result * result); double gsl_sf_lambert_Wm1(double x); __END_DECLS #endif /* __GSL_SF_LAMBERT_H__ */ gsl/specfunc/elljac.c0000644000175000017500000000656013536674414013145 0ustar eddedd/* specfunc/elljac.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include /* GJ: See [Thompson, Atlas for Computing Mathematical Functions] */ /* BJG 2005-07: New algorithm based on Algorithm 5 from Numerische Mathematik 7, 78-90 (1965) "Numerical Calculation of Elliptic Integrals and Elliptic Functions" R. Bulirsch. Minor tweak is to avoid division by zero when sin(x u_l) = 0 by computing reflected values sn(K-u) cn(K-u) dn(K-u) and using transformation from Abramowitz & Stegun table 16.8 column "K-u"*/ int gsl_sf_elljac_e(double u, double m, double * sn, double * cn, double * dn) { if(fabs(m) > 1.0) { *sn = 0.0; *cn = 0.0; *dn = 0.0; GSL_ERROR ("|m| > 1.0", GSL_EDOM); } else if(fabs(m) < 2.0*GSL_DBL_EPSILON) { *sn = sin(u); *cn = cos(u); *dn = 1.0; return GSL_SUCCESS; } else if(fabs(m - 1.0) < 2.0*GSL_DBL_EPSILON) { *sn = tanh(u); *cn = 1.0/cosh(u); *dn = *cn; return GSL_SUCCESS; } else { int status = GSL_SUCCESS; const int N = 16; double mu[16]; double nu[16]; double c[16]; double d[16]; double sin_umu, cos_umu, t, r; int n = 0; mu[0] = 1.0; nu[0] = sqrt(1.0 - m); while( fabs(mu[n] - nu[n]) > 4.0 * GSL_DBL_EPSILON * fabs(mu[n]+nu[n])) { mu[n+1] = 0.5 * (mu[n] + nu[n]); nu[n+1] = sqrt(mu[n] * nu[n]); ++n; if(n >= N - 1) { status = GSL_EMAXITER; break; } } sin_umu = sin(u * mu[n]); cos_umu = cos(u * mu[n]); /* Since sin(u*mu(n)) can be zero we switch to computing sn(K-u), cn(K-u), dn(K-u) when |sin| < |cos| */ if (fabs(sin_umu) < fabs(cos_umu)) { t = sin_umu / cos_umu; c[n] = mu[n] * t; d[n] = 1.0; while(n > 0) { n--; c[n] = d[n+1] * c[n+1]; r = (c[n+1] * c[n+1]) / mu[n+1]; d[n] = (r + nu[n]) / (r + mu[n]); } *dn = sqrt(1.0-m) / d[n]; *cn = (*dn) * GSL_SIGN(cos_umu) / gsl_hypot(1.0, c[n]); *sn = (*cn) * c[n] /sqrt(1.0-m); } else { t = cos_umu / sin_umu; c[n] = mu[n] * t; d[n] = 1.0; while(n > 0) { --n; c[n] = d[n+1] * c[n+1]; r = (c[n+1] * c[n+1]) / mu[n+1]; d[n] = (r + nu[n]) / (r + mu[n]); } *dn = d[n]; *sn = GSL_SIGN(sin_umu) / gsl_hypot(1.0, c[n]); *cn = c[n] * (*sn); } return status; } } gsl/specfunc/mathieu_angfunc.c0000644000175000017500000002053413536674414015045 0ustar eddedd/* specfunc/mathieu_angfunc.c * * Copyright (C) 2002 Lowell Johnson * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Author: L. Johnson */ #include #include #include #include #include #include int gsl_sf_mathieu_ce_e(int order, double qq, double zz, gsl_sf_result *result) { int even_odd, ii, status; double coeff[GSL_SF_MATHIEU_COEFF], norm, fn, factor; gsl_sf_result aa; norm = 0.0; even_odd = 0; if (order % 2 != 0) even_odd = 1; /* Handle the trivial case where q = 0. */ if (qq == 0.0) { norm = 1.0; if (order == 0) norm = sqrt(2.0); fn = cos(order*zz)/norm; result->val = fn; result->err = 2.0*GSL_DBL_EPSILON; factor = fabs(fn); if (factor > 1.0) result->err *= factor; return GSL_SUCCESS; } /* Use symmetry characteristics of the functions to handle cases with negative order. */ if (order < 0) order *= -1; /* Compute the characteristic value. */ status = gsl_sf_mathieu_a_e(order, qq, &aa); if (status != GSL_SUCCESS) { return status; } /* Compute the series coefficients. */ status = gsl_sf_mathieu_a_coeff(order, qq, aa.val, coeff); if (status != GSL_SUCCESS) { return status; } if (even_odd == 0) { fn = 0.0; norm = coeff[0]*coeff[0]; for (ii=0; iival = fn; result->err = 2.0*GSL_DBL_EPSILON; factor = fabs(fn); if (factor > 1.0) result->err *= factor; return GSL_SUCCESS; } int gsl_sf_mathieu_se_e(int order, double qq, double zz, gsl_sf_result *result) { int even_odd, ii, status; double coeff[GSL_SF_MATHIEU_COEFF], norm, fn, factor; gsl_sf_result aa; norm = 0.0; even_odd = 0; if (order % 2 != 0) even_odd = 1; /* Handle the trivial cases where order = 0 and/or q = 0. */ if (order == 0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } if (qq == 0.0) { norm = 1.0; fn = sin(order*zz); result->val = fn; result->err = 2.0*GSL_DBL_EPSILON; factor = fabs(fn); if (factor > 1.0) result->err *= factor; return GSL_SUCCESS; } /* Use symmetry characteristics of the functions to handle cases with negative order. */ if (order < 0) order *= -1; /* Compute the characteristic value. */ status = gsl_sf_mathieu_b_e(order, qq, &aa); if (status != GSL_SUCCESS) { return status; } /* Compute the series coefficients. */ status = gsl_sf_mathieu_b_coeff(order, qq, aa.val, coeff); if (status != GSL_SUCCESS) { return status; } if (even_odd == 0) { fn = 0.0; for (ii=0; iival = fn; result->err = 2.0*GSL_DBL_EPSILON; factor = fabs(fn); if (factor > 1.0) result->err *= factor; return GSL_SUCCESS; } int gsl_sf_mathieu_ce_array(int nmin, int nmax, double qq, double zz, gsl_sf_mathieu_workspace *work, double result_array[]) { int even_odd, order, ii, jj, status; double coeff[GSL_SF_MATHIEU_COEFF], *aa = work->aa, norm; /* Initialize the result array to zeroes. */ for (ii=0; iisize < (unsigned int)nmax) { GSL_ERROR("Work space not large enough", GSL_EINVAL); } if (nmin < 0 || nmax < nmin) { GSL_ERROR("domain error", GSL_EDOM); } /* Compute all of the eigenvalues up to nmax. */ gsl_sf_mathieu_a_array(0, nmax, qq, work, aa); for (ii=0, order=nmin; order<=nmax; ii++, order++) { norm = 0.0; even_odd = 0; if (order % 2 != 0) even_odd = 1; /* Handle the trivial case where q = 0. */ if (qq == 0.0) { norm = 1.0; if (order == 0) norm = sqrt(2.0); result_array[ii] = cos(order*zz)/norm; continue; } /* Compute the series coefficients. */ status = gsl_sf_mathieu_a_coeff(order, qq, aa[order], coeff); if (status != GSL_SUCCESS) return status; if (even_odd == 0) { norm = coeff[0]*coeff[0]; for (jj=0; jjbb, norm; /* Initialize the result array to zeroes. */ for (ii=0; iisize < (unsigned int)nmax) { GSL_ERROR("Work space not large enough", GSL_EINVAL); } if (nmin < 0 || nmax < nmin) { GSL_ERROR("domain error", GSL_EDOM); } /* Compute all of the eigenvalues up to nmax. */ gsl_sf_mathieu_b_array(0, nmax, qq, work, bb); for (ii=0, order=nmin; order<=nmax; ii++, order++) { norm = 0.0; even_odd = 0; if (order % 2 != 0) even_odd = 1; /* Handle the trivial cases where order = 0 and/or q = 0. */ if (order == 0) { norm = 1.0; result_array[ii] = 0.0; continue; } if (qq == 0.0) { norm = 1.0; result_array[ii] = sin(order*zz); continue; } /* Compute the series coefficients. */ status = gsl_sf_mathieu_b_coeff(order, qq, bb[order], coeff); if (status != GSL_SUCCESS) { return status; } if (even_odd == 0) { for (jj=0; jj #include #include "test_sf.h" #define NVAL 100 static double c[NVAL]; int test_mathieu(void) { gsl_sf_result r; gsl_sf_mathieu_workspace *work; int s = 0; int sa; TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 0.0, 0.0, &r), 0.7071067811865475, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 0.0, M_PI_2, &r), 0.7071067811865475, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 5.0, 0.0, &r), 0.04480018165188902, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 5.0, M_PI_2, &r), 1.334848674698019, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 10.0, 0.0, &r), 0.007626517570935782, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 10.0, M_PI_2, &r), 1.468660470712856, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 15.0, 0.0, &r), 0.001932508315204592, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 15.0, M_PI_2, &r), 1.550108146686649, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 20.0, 0.0, &r), 0.0006037438292242197, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 20.0, M_PI_2, &r), 1.609890857395926, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 25.0, 0.0, &r), 0.0002158630184146612, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (0, 25.0, M_PI_2, &r), 1.657510298323475, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (1, 0.0, 0.0, &r), 1.00000000, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (1, 5.0, 0.0, &r), 0.2565428793223637, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (1, 10.0, 0.0, &r), 0.05359874774717657, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (1, 15.0, 0.0, &r), 0.01504006645382623, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (1, 20.0, 0.0, &r), 0.005051813764712904, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (1, 25.0, 0.0, &r), 0.001911051506657645, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (1, 0.0, M_PI_2, &r), 1.0000000, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (1, 5.0, M_PI_2, &r), 1.337433887022345, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (1, 10.0, M_PI_2, &r), 1.468755664102938, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (1, 15.0, M_PI_2, &r), 1.550115074357552, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (1, 20.0, M_PI_2, &r), 1.609891592603772, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (1, 25.0, M_PI_2, &r), 1.657510398374516, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 0.0, 0.0, &r), 1.00000000, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 0.0, M_PI_2, &r), -1.00000000, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 5.0, 0.0, &r), 0.7352943084006845, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 5.0, M_PI_2, &r), -0.7244881519676682, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 10.0, 0.0, &r), 0.2458883492913189, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 10.0, M_PI_2, &r), -0.9267592641263211, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 15.0, 0.0, &r), 0.07879282784639313, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 15.0, M_PI_2, &r), -1.019966226030262, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 20.0, 0.0, &r), 0.02864894314707431, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 20.0, M_PI_2, &r), -1.075293228779687, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 25.0, 0.0, &r), 0.0115128663308875, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (2, 25.0, M_PI_2, &r), -1.116278953295253, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (5, 0.0, 0.0, &r), 1.00000000, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (5, 5.0, 0.0, &r), 1.12480725063848, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (5, 10.0, 0.0, &r), 1.258019941308287, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (5, 15.0, 0.0, &r), 1.193432230413072, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (5, 20.0, 0.0, &r), 0.9365755314226215, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (5, 25.0, 0.0, &r), 0.6106943100506986, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (5, 0.0, M_PI_2, &r), 1.0000000, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (5, 5.0, M_PI_2, &r), 0.9060779302023551, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (5, 10.0, M_PI_2, &r), 0.8460384335355106, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (5, 15.0, M_PI_2, &r), 0.837949340012484, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (5, 20.0, M_PI_2, &r), 0.8635431218533667, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (5, 25.0, M_PI_2, &r), 0.8992683245108413, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 0.0, 0.0, &r), 1.00000000, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 0.0, M_PI_2, &r), -1.00000000, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 5.0, 0.0, &r), 1.025995027089438, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 5.0, M_PI_2, &r), -0.975347487235964, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 10.0, 0.0, &r), 1.053815992100935, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 10.0, M_PI_2, &r), -0.9516453181789554, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 15.0, 0.0, &r), 1.084106311839221, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 15.0, M_PI_2, &r), -0.9285480638845388, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 20.0, 0.0, &r), 1.117788631259397, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 20.0, M_PI_2, &r), -0.9057107845940974, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 25.0, 0.0, &r), 1.156239918632239, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (10, 25.0, M_PI_2, &r), -0.8826919105636903, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (15, 0.0, 0.0, &r), 1.00000000, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (15, 5.0, 0.0, &r), 1.011293732529566, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (15, 10.0, 0.0, &r), 1.022878282438181, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (15, 15.0, 0.0, &r), 1.034793652236873, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (15, 20.0, 0.0, &r), 1.047084344162887, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_ce_e, (15, 25.0, 0.0, &r), 1.059800441813937, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (15, 0.0, M_PI_2, &r), -1.0000000, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (15, 5.0, M_PI_2, &r), -0.9889607027406357, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (15, 10.0, M_PI_2, &r), -0.9781423471832157, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (15, 15.0, M_PI_2, &r), -0.9675137031854538, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (15, 20.0, M_PI_2, &r), -0.9570452540612817, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_mathieu_se_e, (15, 25.0, M_PI_2, &r), -0.9467086958780897, TEST_SNGL, GSL_SUCCESS); work = gsl_sf_mathieu_alloc(NVAL, 20.0); sa = 0; gsl_sf_mathieu_ce_array(0, 5, 0.0, M_PI_2, work, c); sa += (test_sf_frac_diff(c[0], 0.7071067811865475) > TEST_SNGL); sa += (test_sf_frac_diff(c[2], -1.0) > TEST_SNGL); sa += (test_sf_frac_diff(c[4], 1.0) > TEST_SNGL); gsl_test(sa, "gsl_sf_mathieu_ce_array"); s += sa; sa = 0; gsl_sf_mathieu_ce_array(0, 15, 20.0, 0.0, work, c); sa += (test_sf_frac_diff(c[0], 0.0006037438292242197) > TEST_SNGL); sa += (test_sf_frac_diff(c[1], 0.005051813764712904) > TEST_SNGL); sa += (test_sf_frac_diff(c[2], 0.02864894314707431) > TEST_SNGL); sa += (test_sf_frac_diff(c[5], 0.9365755314226215) > TEST_SNGL); sa += (test_sf_frac_diff(c[10], 1.117788631259397) > TEST_SNGL); sa += (test_sf_frac_diff(c[15], 1.047084344162887) > TEST_SNGL); gsl_test(sa, "gsl_sf_mathieu_ce_array"); s += sa; sa = 0; gsl_sf_mathieu_se_array(1, 15, 20.0, M_PI_2, work, c); sa += (test_sf_frac_diff(c[0], 1.609891592603772) > TEST_SNGL); sa += (test_sf_frac_diff(c[4], 0.8635431218533667) > TEST_SNGL); sa += (test_sf_frac_diff(c[14], -0.9570452540612817) > TEST_SNGL); gsl_test(sa, "gsl_sf_mathieu_se_array"); s += sa; gsl_sf_mathieu_free(work); return s; } gsl/specfunc/bessel_y.c0000644000175000017500000001720513536674414013516 0ustar eddedd/* specfunc/bessel_y.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include "error.h" #include "bessel.h" #include "bessel_olver.h" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* [Abramowitz+Stegun, 10.1.3] * with lmax=15, precision ~ 15D for x < 3 * * checked OK [GJ] Wed May 13 15:41:25 MDT 1998 */ static int bessel_yl_small_x(int l, const double x, gsl_sf_result * result) { gsl_sf_result num_fact; double den = gsl_sf_pow_int(x, l+1); int stat_df = gsl_sf_doublefact_e(2*l-1, &num_fact); if(stat_df != GSL_SUCCESS || den == 0.0) { OVERFLOW_ERROR(result); } else { const int lmax = 200; double t = -0.5*x*x; double sum = 1.0; double t_coeff = 1.0; double t_power = 1.0; double delta; int i; for(i=1; i<=lmax; i++) { t_coeff /= i*(2*(i-l) - 1); t_power *= t; delta = t_power*t_coeff; sum += delta; if(fabs(delta/sum) < 0.5*GSL_DBL_EPSILON) break; } result->val = -num_fact.val/den * sum; result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_y0_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if(1.0/GSL_DBL_MAX > 0.0 && x < 1.0/GSL_DBL_MAX) { OVERFLOW_ERROR(result); } else { gsl_sf_result cos_result; const int stat = gsl_sf_cos_e(x, &cos_result); result->val = -cos_result.val/x; result->err = fabs(cos_result.err/x); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat; } } int gsl_sf_bessel_y1_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if(x < 1.0/GSL_SQRT_DBL_MAX) { OVERFLOW_ERROR(result); } else if(x < 0.25) { const double y = x*x; const double c1 = 1.0/2.0; const double c2 = -1.0/8.0; const double c3 = 1.0/144.0; const double c4 = -1.0/5760.0; const double c5 = 1.0/403200.0; const double c6 = -1.0/43545600.0; const double sum = 1.0 + y*(c1 + y*(c2 + y*(c3 + y*(c4 + y*(c5 + y*c6))))); result->val = -sum/y; result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { gsl_sf_result cos_result; gsl_sf_result sin_result; const int stat_cos = gsl_sf_cos_e(x, &cos_result); const int stat_sin = gsl_sf_sin_e(x, &sin_result); const double cx = cos_result.val; const double sx = sin_result.val; result->val = -(cx/x + sx)/x; result->err = (fabs(cos_result.err/x) + sin_result.err)/fabs(x); result->err += GSL_DBL_EPSILON * (fabs(sx/x) + fabs(cx/(x*x))); return GSL_ERROR_SELECT_2(stat_cos, stat_sin); } } int gsl_sf_bessel_y2_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if(x < 1.0/GSL_ROOT3_DBL_MAX) { OVERFLOW_ERROR(result); } else if(x < 0.5) { const double y = x*x; const double c1 = 1.0/6.0; const double c2 = 1.0/24.0; const double c3 = -1.0/144.0; const double c4 = 1.0/3456.0; const double c5 = -1.0/172800.0; const double c6 = 1.0/14515200.0; const double c7 = -1.0/1828915200.0; const double sum = 1.0 + y*(c1 + y*(c2 + y*(c3 + y*(c4 + y*(c5 + y*(c6 + y*c7)))))); result->val = -3.0/(x*x*x) * sum; result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { gsl_sf_result cos_result; gsl_sf_result sin_result; const int stat_cos = gsl_sf_cos_e(x, &cos_result); const int stat_sin = gsl_sf_sin_e(x, &sin_result); const double sx = sin_result.val; const double cx = cos_result.val; const double a = 3.0/(x*x); result->val = (1.0 - a)/x * cx - a * sx; result->err = cos_result.err * fabs((1.0 - a)/x) + sin_result.err * fabs(a); result->err += GSL_DBL_EPSILON * (fabs(cx/x) + fabs(sx/(x*x))); return GSL_ERROR_SELECT_2(stat_cos, stat_sin); } } int gsl_sf_bessel_yl_e(int l, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(l < 0 || x <= 0.0) { DOMAIN_ERROR(result); } else if(l == 0) { return gsl_sf_bessel_y0_e(x, result); } else if(l == 1) { return gsl_sf_bessel_y1_e(x, result); } else if(l == 2) { return gsl_sf_bessel_y2_e(x, result); } else if(x < 3.0) { return bessel_yl_small_x(l, x, result); } else if(GSL_ROOT3_DBL_EPSILON * x > (l*l + l + 1.0)) { int status = gsl_sf_bessel_Ynu_asympx_e(l + 0.5, x, result); double pre = sqrt((0.5*M_PI)/x); result->val *= pre; result->err *= pre; return status; } else if(l > 40) { int status = gsl_sf_bessel_Ynu_asymp_Olver_e(l + 0.5, x, result); double pre = sqrt((0.5*M_PI)/x); result->val *= pre; result->err *= pre; return status; } else { /* recurse upward */ gsl_sf_result r_by; gsl_sf_result r_bym; int stat_1 = gsl_sf_bessel_y1_e(x, &r_by); int stat_0 = gsl_sf_bessel_y0_e(x, &r_bym); double bym = r_bym.val; double by = r_by.val; double byp; int j; for(j=1; jval = by; result->err = fabs(result->val) * (GSL_DBL_EPSILON + fabs(r_by.err/r_by.val) + fabs(r_bym.err/r_bym.val)); return GSL_ERROR_SELECT_2(stat_1, stat_0); } } int gsl_sf_bessel_yl_array(const int lmax, const double x, double * result_array) { /* CHECK_POINTER(result_array) */ if(lmax < 0 || x <= 0.0) { GSL_ERROR ("error", GSL_EDOM); } else if (lmax == 0) { gsl_sf_result result; int stat = gsl_sf_bessel_y0_e(x, &result); result_array[0] = result.val; return stat; } else { gsl_sf_result r_yell; gsl_sf_result r_yellm1; int stat_1 = gsl_sf_bessel_y1_e(x, &r_yell); int stat_0 = gsl_sf_bessel_y0_e(x, &r_yellm1); double yellp1; double yell = r_yell.val; double yellm1 = r_yellm1.val; int ell; result_array[0] = yellm1; result_array[1] = yell; for(ell = 1; ell < lmax; ell++) { yellp1 = (2*ell+1)/x * yell - yellm1; result_array[ell+1] = yellp1; yellm1 = yell; yell = yellp1; } return GSL_ERROR_SELECT_2(stat_0, stat_1); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_y0(const double x) { EVAL_RESULT(gsl_sf_bessel_y0_e(x, &result)); } double gsl_sf_bessel_y1(const double x) { EVAL_RESULT(gsl_sf_bessel_y1_e(x, &result)); } double gsl_sf_bessel_y2(const double x) { EVAL_RESULT(gsl_sf_bessel_y2_e(x, &result)); } double gsl_sf_bessel_yl(const int l, const double x) { EVAL_RESULT(gsl_sf_bessel_yl_e(l, x, &result)); } gsl/specfunc/test_dilog.c0000644000175000017500000002727513536674414014056 0ustar eddedd/* specfunc/test_dilog.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include "test_sf.h" int test_dilog(void) { gsl_sf_result r; gsl_sf_result r1, r2; int s = 0; /* real dilog */ TEST_SF(s, gsl_sf_dilog_e, (-3.0, &r), -1.9393754207667089531, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_dilog_e, (-0.5, &r), -0.4484142069236462024, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_dilog_e, (-0.001, &r), -0.0009997501110486510834, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_dilog_e, (0.1, &r), 0.1026177910993911, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_dilog_e, (0.7, &r), 0.8893776242860387386, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_dilog_e, (1.0, &r), 1.6449340668482260, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_dilog_e, (1.5, &r), 2.3743952702724802007, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_dilog_e, (2.0, &r), 2.4674011002723397, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_dilog_e, ( 5.0, &r), 1.7837191612666306277, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_dilog_e, ( 11.0, &r), 0.3218540439999117111, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_dilog_e, (12.59, &r), 0.0010060918167266208634, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_dilog_e, (12.595, &r), 0.00003314826006436236810, TEST_TOL5, GSL_SUCCESS); TEST_SF(s, gsl_sf_dilog_e, (13.0, &r), -0.07806971248458575855, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_dilog_e, (20.0, &r), -1.2479770861745251168, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_dilog_e, (150.0, &r), -9.270042702348657270, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_dilog_e, (1100.0, &r), -21.232504073931749553, TEST_TOL0, GSL_SUCCESS); /* complex dilog */ TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99999, M_PI/2.0, &r1, &r2), -0.20561329262779687646, TEST_TOL0, 0.91595774018131512060, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.991, M_PI/2.0, &r1, &r2), -0.20250384721077806127, TEST_TOL0, 0.90888544355846447810, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.98, M_PI/2.0, &r1, &r2), -0.19871638377785918403, TEST_TOL2, 0.90020045882981847610, TEST_TOL2, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.98, -M_PI/2.0, &r1, &r2), -0.19871638377785918403, TEST_TOL2, -0.90020045882981847610, TEST_TOL2, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.95, M_PI/2.0, &r1, &r2), -0.18848636456893572091, TEST_TOL1, 0.87633754133420277830, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.8, M_PI/2.0, &r1, &r2), -0.13980800855429037810, TEST_TOL0, 0.75310609092419884460, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.8, -M_PI/2.0, &r1, &r2), -0.13980800855429037810, TEST_TOL0, -0.75310609092419884460, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.5, M_PI/2.0, &r1, &r2), -0.05897507442156586346, TEST_TOL1, 0.48722235829452235710, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.5, -M_PI/2.0, &r1, &r2), -0.05897507442156586346, TEST_TOL1, -0.48722235829452235710, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.01, M_PI/2.0, &r1, &r2), -0.000024999375027776215378, TEST_TOL3, 0.009999888892888684820, TEST_TOL3, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.01, -M_PI/2.0, &r1, &r2), -0.000024999375027776215378, TEST_TOL3, -0.009999888892888684820, TEST_TOL3, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, M_PI/4.0, &r1, &r2), 0.56273366219795547757, TEST_TOL3, 0.97009284079274560384, TEST_TOL3, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, -M_PI/4.0, &r1, &r2), 0.56273366219795547757, TEST_TOL3, -0.97009284079274560384, TEST_TOL3, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, 3.0*M_PI/4.0, &r1, &r2), -0.66210902664245926235, TEST_TOL1, 0.51995305609998319025, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, 5.0*M_PI/4.0, &r1, &r2), -0.66210902664245926235, TEST_TOL1, -0.51995305609998319025, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, 3.0*M_PI/2.0, &r1, &r2), -0.20215874509123277909, TEST_TOL1, -0.90809733095648731408, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.25, 3.0*M_PI/2.0, &r1, &r2), -0.01538741178141053563, TEST_TOL1, -0.24830175098230686908, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.25, 15.0/8.0*M_PI, &r1, &r2), 0.24266162342377302235, TEST_TOL1, -0.10860883369274445067, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, M_PI/8.0, &r1, &r2), 1.0571539648820244720, TEST_TOL0, 0.7469145254610851318, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, M_PI/64.0, &r1, &r2), 1.5381800285902999666, TEST_TOL0, 0.1825271634987756651, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (0.99, -M_PI/8.0, &r1, &r2), 1.05715396488202447202, TEST_TOL1, -0.74691452546108513176, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.00001, M_PI/2.0, &r1, &r2), -0.20562022409960237363, TEST_TOL1, 0.91597344814458309320, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (10.0, M_PI/2.0, &r1, &r2), -3.0596887943287347304, TEST_TOL0, 3.7167814930680685900, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (100.0, M_PI/2.0, &r1, &r2), -11.015004738293824854, TEST_TOL0, 7.2437843013083534970, TEST_TOL0, GSL_SUCCESS); /** tests brought up by Jim McElwaine bug report */ TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.1, -M_PI/2.0, &r1, &r2), -0.24099184177382733037, TEST_TOL1, -0.99309132538137822631, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.1, 3.0*M_PI/2.0, &r1, &r2), -0.24099184177382733037, TEST_TOL1, -0.99309132538137822631, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.1, -3.0*M_PI/2.0, &r1, &r2), -0.24099184177382733037, TEST_TOL1, 0.99309132538137822631, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.1, -M_PI - 0.25*M_PI, &r1, &r2), -0.72908565537087935118, TEST_TOL1, 0.56225783937234862649, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.1, M_PI + 0.25*M_PI, &r1, &r2), -0.72908565537087935118, TEST_TOL1, -0.56225783937234862649, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.1, -M_PI/128.0, &r1, &r2), 1.8881719454909716580, TEST_TOL1, -0.3556738764969238976, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.1, M_PI/128.0, &r1, &r2), 1.8881719454909716580, TEST_TOL1, 0.3556738764969238976, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.5, M_PI/8.0, &r1, &r2), 1.3498525763442498343, TEST_TOL1, 1.4976532712229749493, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.5, -M_PI/8.0, &r1, &r2), 1.3498525763442498343, TEST_TOL1, -1.4976532712229749493, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.5, 2.0*M_PI + M_PI/8.0, &r1, &r2), 1.3498525763442498343, TEST_TOL1, 1.4976532712229749493, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_e, (1.5, 2.0*M_PI - M_PI/8.0, &r1, &r2), 1.3498525763442498343, TEST_TOL1, -1.4976532712229749493, TEST_TOL1, GSL_SUCCESS); /* tests of the (x,y) function, which is now the underlying implementation */ TEST_SF_2(s, gsl_sf_complex_dilog_xy_e, (0.0, 0.5, &r1, &r2), -0.05897507442156586346, TEST_TOL1, 0.48722235829452235710, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_xy_e, (0.0, -0.5, &r1, &r2), -0.05897507442156586346, TEST_TOL1, -0.48722235829452235710, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_xy_e, (0.91464073718617389108, 0.37885659804143889673, &r1, &r2), 1.0571539648820244720, TEST_TOL0, 0.7469145254610851318, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_xy_e, (0.91464073718617389108, -0.37885659804143889673, &r1, &r2), 1.05715396488202447202, TEST_TOL1, -0.74691452546108513176, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_xy_e, (-1.5, 0.0, &r1, &r2), -1.1473806603755707541, TEST_TOL1, 0.0, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_xy_e, (0.5, 0.0, &r1, &r2), 0.58224052646501250590, TEST_TOL1, 0.0, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_dilog_xy_e, (1.5, 0.0, &r1, &r2), 2.3743952702724802007, TEST_TOL1, -1.2738062049196005309, TEST_TOL1, GSL_SUCCESS); /* small set of spence tests, mostly to check the value on the cut */ TEST_SF_2(s, gsl_sf_complex_spence_xy_e, (1.5, 0.0, &r1, &r2), -0.44841420692364620244, TEST_TOL1, 0.0, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_spence_xy_e, (0.5, 0.0, &r1, &r2), 0.58224052646501250590, TEST_TOL1, 0.0, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_spence_xy_e, (0.0, 0.0, &r1, &r2), 1.6449340668482264365, TEST_TOL1, 0.0, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_spence_xy_e, (-0.5, 0.0, &r1, &r2), 2.3743952702724802007, TEST_TOL1, -1.2738062049196005309, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_spence_xy_e, (-0.5, 1.0/1024.0, &r1, &r2), 2.3723507455234125018, TEST_TOL1, -1.2742581376517839070, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_spence_xy_e, (-0.5, -1.0/1024.0, &r1, &r2), 2.3723507455234125018, TEST_TOL1, 1.2742581376517839070, TEST_TOL1, GSL_SUCCESS); return s; } gsl/specfunc/gsl_sf_hermite.h0000644000175000017500000001264213536675317014713 0ustar eddedd/* gsl_sf_hermite.h * * Copyright (C) 2011-2014 Konrad Griessinger * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /*----------------------------------------------------------------------* * (konradg(at)gmx.net) * *----------------------------------------------------------------------*/ #ifndef __GSL_SF_HERMITE_H__ #define __GSL_SF_HERMITE_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_sf_hermite_prob_e(const int n, const double x, gsl_sf_result * result); double gsl_sf_hermite_prob(const int n, const double x); int gsl_sf_hermite_prob_deriv_e(const int m, const int n, const double x, gsl_sf_result * result); double gsl_sf_hermite_prob_deriv(const int m, const int n, const double x); int gsl_sf_hermite_e(const int n, const double x, gsl_sf_result * result); double gsl_sf_hermite(const int n, const double x); int gsl_sf_hermite_deriv_e(const int m, const int n, const double x, gsl_sf_result * result); double gsl_sf_hermite_deriv(const int m, const int n, const double x); int gsl_sf_hermite_func_e(const int n, const double x, gsl_sf_result * result); double gsl_sf_hermite_func(const int n, const double x); int gsl_sf_hermite_func_fast_e(const int n, const double x, gsl_sf_result * result); double gsl_sf_hermite_func_fast(const int n, const double x); int gsl_sf_hermite_prob_array(const int nmax, const double x, double * result_array); int gsl_sf_hermite_prob_array_deriv(const int m, const int nmax, const double x, double * result_array); int gsl_sf_hermite_prob_deriv_array(const int mmax, const int n, const double x, double * result_array); int gsl_sf_hermite_prob_series_e(const int n, const double x, const double * a, gsl_sf_result * result); double gsl_sf_hermite_prob_series(const int n, const double x, const double * a); int gsl_sf_hermite_array(const int nmax, const double x, double * result_array); int gsl_sf_hermite_array_deriv(const int m, const int nmax, const double x, double * result_array); int gsl_sf_hermite_deriv_array(const int mmax, const int n, const double x, double * result_array); int gsl_sf_hermite_series_e(const int n, const double x, const double * a, gsl_sf_result * result); double gsl_sf_hermite_series(const int n, const double x, const double * a); int gsl_sf_hermite_func_array(const int nmax, const double x, double * result_array); int gsl_sf_hermite_func_series_e(const int n, const double x, const double * a, gsl_sf_result * result); double gsl_sf_hermite_func_series(const int n, const double x, const double * a); int gsl_sf_hermite_func_der_e(const int m, const int n, const double x, gsl_sf_result * result); double gsl_sf_hermite_func_der(const int m, const int n, const double x); int gsl_sf_hermite_prob_zero_e(const int n, const int s, gsl_sf_result * result); double gsl_sf_hermite_prob_zero(const int n, const int s); int gsl_sf_hermite_zero_e(const int n, const int s, gsl_sf_result * result); double gsl_sf_hermite_zero(const int n, const int s); int gsl_sf_hermite_func_zero_e(const int n, const int s, gsl_sf_result * result); double gsl_sf_hermite_func_zero(const int n, const int s); #ifndef GSL_DISABLE_DEPRECATED int gsl_sf_hermite_phys_e(const int n, const double x, gsl_sf_result * result); double gsl_sf_hermite_phys(const int n, const double x); int gsl_sf_hermite_phys_der_e(const int m, const int n, const double x, gsl_sf_result * result); double gsl_sf_hermite_phys_der(const int m, const int n, const double x); int gsl_sf_hermite_phys_array(const int nmax, const double x, double * result_array); int gsl_sf_hermite_phys_series_e(const int n, const double x, const double * a, gsl_sf_result * result); double gsl_sf_hermite_phys_series(const int n, const double x, const double * a); int gsl_sf_hermite_phys_array_der(const int m, const int nmax, const double x, double * result_array); int gsl_sf_hermite_phys_der_array(const int mmax, const int n, const double x, double * result_array); int gsl_sf_hermite_phys_zero_e(const int n, const int s, gsl_sf_result * result); double gsl_sf_hermite_phys_zero(const int n, const int s); int gsl_sf_hermite_prob_array_der(const int m, const int nmax, const double x, double * result_array); int gsl_sf_hermite_prob_der_array(const int mmax, const int n, const double x, double * result_array); int gsl_sf_hermite_prob_der_e(const int m, const int n, const double x, gsl_sf_result * result); double gsl_sf_hermite_prob_der(const int m, const int n, const double x); #endif /* !GSL_DISABLE_DEPRECATED */ __END_DECLS #endif /* __GSL_SF_HERMITE_H__ */ gsl/specfunc/result.c0000644000175000017500000000454113536674414013226 0ustar eddedd/* specfunc/result.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include int gsl_sf_result_smash_e(const gsl_sf_result_e10 * re, gsl_sf_result * r) { if(re->e10 == 0) { /* nothing to smash */ r->val = re->val; r->err = re->err; return GSL_SUCCESS; } else { const double av = fabs(re->val); const double ae = fabs(re->err); if( GSL_SQRT_DBL_MIN < av && av < GSL_SQRT_DBL_MAX && GSL_SQRT_DBL_MIN < ae && ae < GSL_SQRT_DBL_MAX && 0.49*GSL_LOG_DBL_MIN < re->e10 && re->e10 < 0.49*GSL_LOG_DBL_MAX ) { const double scale = exp(re->e10 * M_LN10); r->val = re->val * scale; r->err = re->err * scale; return GSL_SUCCESS; } else { return gsl_sf_exp_mult_err_e(re->e10*M_LN10, 0.0, re->val, re->err, r); } } /* int stat_v; int stat_e; if(re->val == 0.0) { r->val = 0.0; stat_v = GSL_SUCCESS; } else { gsl_sf_result r_val; const double s = GSL_SIGN(re->val); const double x_v = re->e10*M_LN10 + log(fabs(re->val)); stat_v = gsl_sf_exp_e(x_v, &r_val); r->val = s * r_val.val; } if(re->err == 0.0) { r->err = 0.0; stat_e = GSL_SUCCESS; } else if(re->val != 0.0) { r->err = fabs(r->val * re->err/re->val); stat_e = GSL_SUCCESS; } else { gsl_sf_result r_err; const double x_e = re->e10*M_LN10 + log(fabs(re->err)); stat_e = gsl_sf_exp_e(x_e, &r_err); r->err = r_err.val; } return GSL_ERROR_SELECT_2(stat_v, stat_e); */ } gsl/specfunc/bessel_Jnu.c0000644000175000017500000001401113536674414013772 0ustar eddedd/* specfunc/bessel_Jnu.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman, 2017 Konrad Griessinger * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "error.h" #include "bessel.h" #include "bessel_olver.h" #include "bessel_temme.h" /* Evaluate at large enough nu to apply asymptotic * results and apply backward recurrence. */ #if 0 static int bessel_J_recur_asymp(const double nu, const double x, gsl_sf_result * Jnu, gsl_sf_result * Jnup1) { const double nu_cut = 25.0; int n; int steps = ceil(nu_cut - nu) + 1; gsl_sf_result r_Jnp1; gsl_sf_result r_Jn; int stat_O1 = gsl_sf_bessel_Jnu_asymp_Olver_e(nu + steps + 1.0, x, &r_Jnp1); int stat_O2 = gsl_sf_bessel_Jnu_asymp_Olver_e(nu + steps, x, &r_Jn); double r_fe = fabs(r_Jnp1.err/r_Jnp1.val) + fabs(r_Jn.err/r_Jn.val); double Jnp1 = r_Jnp1.val; double Jn = r_Jn.val; double Jnm1; double Jnp1_save; for(n=steps; n>0; n--) { Jnm1 = 2.0*(nu+n)/x * Jn - Jnp1; Jnp1 = Jn; Jnp1_save = Jn; Jn = Jnm1; } Jnu->val = Jn; Jnu->err = (r_fe + GSL_DBL_EPSILON * (steps + 1.0)) * fabs(Jn); Jnup1->val = Jnp1_save; Jnup1->err = (r_fe + GSL_DBL_EPSILON * (steps + 1.0)) * fabs(Jnp1_save); return GSL_ERROR_SELECT_2(stat_O1, stat_O2); } #endif /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_Jnupos_e(const double nu, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x == 0.0) { if(nu == 0.0) { result->val = 1.0; result->err = 0.0; } else { result->val = 0.0; result->err = 0.0; } return GSL_SUCCESS; } else if(x*x < 10.0*(nu+1.0)) { return gsl_sf_bessel_IJ_taylor_e(nu, x, -1, 100, GSL_DBL_EPSILON, result); } else if(nu > 50.0) { return gsl_sf_bessel_Jnu_asymp_Olver_e(nu, x, result); } else if(x > 1000.0) { /* We need this to avoid feeding large x to CF1; note that * due to the above check, we know that n <= 50. See similar * block in bessel_Jn.c. */ return gsl_sf_bessel_Jnu_asympx_e(nu, x, result); } else { /* -1/2 <= mu <= 1/2 */ int N = (int)(nu + 0.5); double mu = nu - N; /* Determine the J ratio at nu. */ double Jnup1_Jnu; double sgn_Jnu; const int stat_CF1 = gsl_sf_bessel_J_CF1(nu, x, &Jnup1_Jnu, &sgn_Jnu); if(x < 2.0) { /* Determine Y_mu, Y_mup1 directly and recurse forward to nu. * Then use the CF1 information to solve for J_nu and J_nup1. */ gsl_sf_result Y_mu, Y_mup1; const int stat_mu = gsl_sf_bessel_Y_temme(mu, x, &Y_mu, &Y_mup1); double Ynm1 = Y_mu.val; double Yn = Y_mup1.val; double Ynp1 = 0.0; int n; for(n=1; nval = 2.0/(M_PI*x) / (Jnup1_Jnu*Yn - Ynp1); result->err = GSL_DBL_EPSILON * (N + 2.0) * fabs(result->val); return GSL_ERROR_SELECT_2(stat_mu, stat_CF1); } else { /* Recurse backward from nu to mu, determining the J ratio * at mu. Use this together with a Steed method CF2 to * determine the actual J_mu, and thus obtain the normalization. */ double Jmu; double Jmup1_Jmu; double sgn_Jmu; double Jmuprime_Jmu; double P, Q; const int stat_CF2 = gsl_sf_bessel_JY_steed_CF2(mu, x, &P, &Q); double gamma; double Jnp1 = sgn_Jnu * GSL_SQRT_DBL_MIN * Jnup1_Jnu; double Jn = sgn_Jnu * GSL_SQRT_DBL_MIN; double Jnm1; int n; for(n=N; n>0; n--) { Jnm1 = 2.0*(mu+n)/x * Jn - Jnp1; Jnp1 = Jn; Jn = Jnm1; } Jmup1_Jmu = Jnp1/Jn; sgn_Jmu = GSL_SIGN(Jn); Jmuprime_Jmu = mu/x - Jmup1_Jmu; gamma = (P - Jmuprime_Jmu)/Q; Jmu = sgn_Jmu * sqrt(2.0/(M_PI*x) / (Q + gamma*(P-Jmuprime_Jmu))); result->val = Jmu * (sgn_Jnu * GSL_SQRT_DBL_MIN) / Jn; result->err = 2.0 * GSL_DBL_EPSILON * (N + 2.0) * fabs(result->val); return GSL_ERROR_SELECT_2(stat_CF2, stat_CF1); } } } int gsl_sf_bessel_Jnu_e(const double nu, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if (nu < 0.0) { int Jstatus = gsl_sf_bessel_Jnupos_e(-nu, x, result); double Jval = result->val; double Jerr = result->err; int Ystatus = gsl_sf_bessel_Ynupos_e(-nu, x, result); double Yval = result->val; double Yerr = result->err; /* double s = sin(M_PI*nu), c = cos(M_PI*nu); */ int sinstatus = gsl_sf_sin_pi_e(nu, result); double s = result->val; double serr = result->err; int cosstatus = gsl_sf_cos_pi_e(nu, result); double c = result->val; double cerr = result->err; result->val = s*Yval + c*Jval; result->err = fabs(c*Yerr) + fabs(s*Jerr) + fabs(cerr*Yval) + fabs(serr*Jval); return GSL_ERROR_SELECT_4(Jstatus, Ystatus, sinstatus, cosstatus); } else return gsl_sf_bessel_Jnupos_e(nu, x, result); } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_Jnu(const double nu, const double x) { EVAL_RESULT(gsl_sf_bessel_Jnu_e(nu, x, &result)); } gsl/specfunc/bessel_Inu.c0000644000175000017500000000653013536674414014000 0ustar eddedd/* specfunc/bessel_Inu.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include "error.h" #include "bessel.h" #include "bessel_temme.h" /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_Inu_scaled_e(double nu, double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x < 0.0 || nu < 0.0) { DOMAIN_ERROR(result); } else if(x*x < 10.0*(nu+1.0)) { gsl_sf_result b; double ex = exp(-x); int stat = gsl_sf_bessel_IJ_taylor_e(nu, x, 1, 100, GSL_DBL_EPSILON, &b); result->val = b.val * ex; result->err = b.err * ex; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat; } else if(0.5/(nu*nu + x*x) < GSL_ROOT3_DBL_EPSILON) { return gsl_sf_bessel_Inu_scaled_asymp_unif_e(nu, x, result); } else { int N = (int)(nu + 0.5); double mu = nu - N; /* -1/2 <= mu <= 1/2 */ double K_mu, K_mup1, Kp_mu; double K_nu, K_nup1, K_num1; double I_nu_ratio; int stat_Irat; int stat_Kmu; int n; /* obtain K_mu, K_mup1 */ if(x < 2.0) { stat_Kmu = gsl_sf_bessel_K_scaled_temme(mu, x, &K_mu, &K_mup1, &Kp_mu); } else { stat_Kmu = gsl_sf_bessel_K_scaled_steed_temme_CF2(mu, x, &K_mu, &K_mup1, &Kp_mu); } /* recurse forward to obtain K_num1, K_nu */ K_nu = K_mu; K_nup1 = K_mup1; for(n=0; nval = 1.0/(x * (K_nup1 + I_nu_ratio * K_nu)); result->err = GSL_DBL_EPSILON * (0.5*N + 2.0) * fabs(result->val); return GSL_ERROR_SELECT_2(stat_Kmu, stat_Irat); } } int gsl_sf_bessel_Inu_e(double nu, double x, gsl_sf_result * result) { gsl_sf_result b; int stat_I = gsl_sf_bessel_Inu_scaled_e(nu, x, &b); int stat_e = gsl_sf_exp_mult_err_e(x, fabs(x*GSL_DBL_EPSILON), b.val, b.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_I); } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_Inu_scaled(double nu, double x) { EVAL_RESULT(gsl_sf_bessel_Inu_scaled_e(nu, x, &result)); } double gsl_sf_bessel_Inu(double nu, double x) { EVAL_RESULT(gsl_sf_bessel_Inu_e(nu, x, &result)); } gsl/specfunc/gsl_sf_bessel.h0000644000175000017500000003352513536674414014533 0ustar eddedd/* specfunc/gsl_sf_bessel.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_BESSEL_H__ #define __GSL_SF_BESSEL_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Regular Bessel Function J_0(x) * * exceptions: none */ int gsl_sf_bessel_J0_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_J0(const double x); /* Regular Bessel Function J_1(x) * * exceptions: GSL_EUNDRFLW */ int gsl_sf_bessel_J1_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_J1(const double x); /* Regular Bessel Function J_n(x) * * exceptions: GSL_EUNDRFLW */ int gsl_sf_bessel_Jn_e(int n, double x, gsl_sf_result * result); double gsl_sf_bessel_Jn(const int n, const double x); /* Regular Bessel Function J_n(x), nmin <= n <= nmax * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_bessel_Jn_array(int nmin, int nmax, double x, double * result_array); /* Irregular Bessel function Y_0(x) * * x > 0.0 * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_bessel_Y0_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_Y0(const double x); /* Irregular Bessel function Y_1(x) * * x > 0.0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_bessel_Y1_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_Y1(const double x); /* Irregular Bessel function Y_n(x) * * x > 0.0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_bessel_Yn_e(int n,const double x, gsl_sf_result * result); double gsl_sf_bessel_Yn(const int n,const double x); /* Irregular Bessel function Y_n(x), nmin <= n <= nmax * * x > 0.0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_bessel_Yn_array(const int nmin, const int nmax, const double x, double * result_array); /* Regular modified Bessel function I_0(x) * * exceptions: GSL_EOVRFLW */ int gsl_sf_bessel_I0_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_I0(const double x); /* Regular modified Bessel function I_1(x) * * exceptions: GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_bessel_I1_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_I1(const double x); /* Regular modified Bessel function I_n(x) * * exceptions: GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_bessel_In_e(const int n, const double x, gsl_sf_result * result); double gsl_sf_bessel_In(const int n, const double x); /* Regular modified Bessel function I_n(x) for n=nmin,...,nmax * * nmin >=0, nmax >= nmin * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_bessel_In_array(const int nmin, const int nmax, const double x, double * result_array); /* Scaled regular modified Bessel function * exp(-|x|) I_0(x) * * exceptions: none */ int gsl_sf_bessel_I0_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_I0_scaled(const double x); /* Scaled regular modified Bessel function * exp(-|x|) I_1(x) * * exceptions: GSL_EUNDRFLW */ int gsl_sf_bessel_I1_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_I1_scaled(const double x); /* Scaled regular modified Bessel function * exp(-|x|) I_n(x) * * exceptions: GSL_EUNDRFLW */ int gsl_sf_bessel_In_scaled_e(int n, const double x, gsl_sf_result * result); double gsl_sf_bessel_In_scaled(const int n, const double x); /* Scaled regular modified Bessel function * exp(-|x|) I_n(x) for n=nmin,...,nmax * * nmin >=0, nmax >= nmin * exceptions: GSL_EUNDRFLW */ int gsl_sf_bessel_In_scaled_array(const int nmin, const int nmax, const double x, double * result_array); /* Irregular modified Bessel function K_0(x) * * x > 0.0 * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_bessel_K0_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_K0(const double x); /* Irregular modified Bessel function K_1(x) * * x > 0.0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_bessel_K1_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_K1(const double x); /* Irregular modified Bessel function K_n(x) * * x > 0.0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_bessel_Kn_e(const int n, const double x, gsl_sf_result * result); double gsl_sf_bessel_Kn(const int n, const double x); /* Irregular modified Bessel function K_n(x) for n=nmin,...,nmax * * x > 0.0, nmin >=0, nmax >= nmin * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_bessel_Kn_array(const int nmin, const int nmax, const double x, double * result_array); /* Scaled irregular modified Bessel function * exp(x) K_0(x) * * x > 0.0 * exceptions: GSL_EDOM */ int gsl_sf_bessel_K0_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_K0_scaled(const double x); /* Scaled irregular modified Bessel function * exp(x) K_1(x) * * x > 0.0 * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_bessel_K1_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_K1_scaled(const double x); /* Scaled irregular modified Bessel function * exp(x) K_n(x) * * x > 0.0 * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_bessel_Kn_scaled_e(int n, const double x, gsl_sf_result * result); double gsl_sf_bessel_Kn_scaled(const int n, const double x); /* Scaled irregular modified Bessel function exp(x) K_n(x) for n=nmin,...,nmax * * x > 0.0, nmin >=0, nmax >= nmin * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_bessel_Kn_scaled_array(const int nmin, const int nmax, const double x, double * result_array); /* Regular spherical Bessel function j_0(x) = sin(x)/x * * exceptions: none */ int gsl_sf_bessel_j0_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_j0(const double x); /* Regular spherical Bessel function j_1(x) = (sin(x)/x - cos(x))/x * * exceptions: GSL_EUNDRFLW */ int gsl_sf_bessel_j1_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_j1(const double x); /* Regular spherical Bessel function j_2(x) = ((3/x^2 - 1)sin(x) - 3cos(x)/x)/x * * exceptions: GSL_EUNDRFLW */ int gsl_sf_bessel_j2_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_j2(const double x); /* Regular spherical Bessel function j_l(x) * * l >= 0, x >= 0.0 * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_bessel_jl_e(const int l, const double x, gsl_sf_result * result); double gsl_sf_bessel_jl(const int l, const double x); /* Regular spherical Bessel function j_l(x) for l=0,1,...,lmax * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_bessel_jl_array(const int lmax, const double x, double * result_array); /* Regular spherical Bessel function j_l(x) for l=0,1,...,lmax * Uses Steed's method. * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_bessel_jl_steed_array(const int lmax, const double x, double * jl_x_array); /* Irregular spherical Bessel function y_0(x) * * exceptions: none */ int gsl_sf_bessel_y0_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_y0(const double x); /* Irregular spherical Bessel function y_1(x) * * exceptions: GSL_EUNDRFLW */ int gsl_sf_bessel_y1_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_y1(const double x); /* Irregular spherical Bessel function y_2(x) * * exceptions: GSL_EUNDRFLW */ int gsl_sf_bessel_y2_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_y2(const double x); /* Irregular spherical Bessel function y_l(x) * * exceptions: GSL_EUNDRFLW */ int gsl_sf_bessel_yl_e(int l, const double x, gsl_sf_result * result); double gsl_sf_bessel_yl(const int l, const double x); /* Irregular spherical Bessel function y_l(x) for l=0,1,...,lmax * * exceptions: GSL_EUNDRFLW */ int gsl_sf_bessel_yl_array(const int lmax, const double x, double * result_array); /* Regular scaled modified spherical Bessel function * * Exp[-|x|] i_0(x) * * exceptions: none */ int gsl_sf_bessel_i0_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_i0_scaled(const double x); /* Regular scaled modified spherical Bessel function * * Exp[-|x|] i_1(x) * * exceptions: GSL_EUNDRFLW */ int gsl_sf_bessel_i1_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_i1_scaled(const double x); /* Regular scaled modified spherical Bessel function * * Exp[-|x|] i_2(x) * * exceptions: GSL_EUNDRFLW */ int gsl_sf_bessel_i2_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_i2_scaled(const double x); /* Regular scaled modified spherical Bessel functions * * Exp[-|x|] i_l(x) * * i_l(x) = Sqrt[Pi/(2x)] BesselI[l+1/2,x] * * l >= 0 * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_bessel_il_scaled_e(const int l, double x, gsl_sf_result * result); double gsl_sf_bessel_il_scaled(const int l, const double x); /* Regular scaled modified spherical Bessel functions * * Exp[-|x|] i_l(x) * for l=0,1,...,lmax * * exceptions: GSL_EUNDRFLW */ int gsl_sf_bessel_il_scaled_array(const int lmax, const double x, double * result_array); /* Irregular scaled modified spherical Bessel function * Exp[x] k_0(x) * * x > 0.0 * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_bessel_k0_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_k0_scaled(const double x); /* Irregular modified spherical Bessel function * Exp[x] k_1(x) * * x > 0.0 * exceptions: GSL_EDOM, GSL_EUNDRFLW, GSL_EOVRFLW */ int gsl_sf_bessel_k1_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_k1_scaled(const double x); /* Irregular modified spherical Bessel function * Exp[x] k_2(x) * * x > 0.0 * exceptions: GSL_EDOM, GSL_EUNDRFLW, GSL_EOVRFLW */ int gsl_sf_bessel_k2_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_k2_scaled(const double x); /* Irregular modified spherical Bessel function * Exp[x] k_l[x] * * k_l(x) = Sqrt[Pi/(2x)] BesselK[l+1/2,x] * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_bessel_kl_scaled_e(int l, const double x, gsl_sf_result * result); double gsl_sf_bessel_kl_scaled(const int l, const double x); /* Irregular scaled modified spherical Bessel function * Exp[x] k_l(x) * * for l=0,1,...,lmax * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_bessel_kl_scaled_array(const int lmax, const double x, double * result_array); /* Regular cylindrical Bessel function J_nu(x) * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_bessel_Jnu_e(const double nu, const double x, gsl_sf_result * result); double gsl_sf_bessel_Jnu(const double nu, const double x); /* Irregular cylindrical Bessel function Y_nu(x) * * exceptions: */ int gsl_sf_bessel_Ynu_e(double nu, double x, gsl_sf_result * result); double gsl_sf_bessel_Ynu(const double nu, const double x); /* Regular cylindrical Bessel function J_nu(x) * evaluated at a series of x values. The array * contains the x values. They are assumed to be * strictly ordered and positive. The array is * over-written with the values of J_nu(x_i). * * exceptions: GSL_EDOM, GSL_EINVAL */ int gsl_sf_bessel_sequence_Jnu_e(double nu, gsl_mode_t mode, size_t size, double * v); /* Scaled modified cylindrical Bessel functions * * Exp[-|x|] BesselI[nu, x] * x >= 0, nu >= 0 * * exceptions: GSL_EDOM */ int gsl_sf_bessel_Inu_scaled_e(double nu, double x, gsl_sf_result * result); double gsl_sf_bessel_Inu_scaled(double nu, double x); /* Modified cylindrical Bessel functions * * BesselI[nu, x] * x >= 0, nu >= 0 * * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_bessel_Inu_e(double nu, double x, gsl_sf_result * result); double gsl_sf_bessel_Inu(double nu, double x); /* Scaled modified cylindrical Bessel functions * * Exp[+|x|] BesselK[nu, x] * x > 0, nu >= 0 * * exceptions: GSL_EDOM */ int gsl_sf_bessel_Knu_scaled_e(const double nu, const double x, gsl_sf_result * result); double gsl_sf_bessel_Knu_scaled(const double nu, const double x); int gsl_sf_bessel_Knu_scaled_e10_e(const double nu, const double x, gsl_sf_result_e10 * result); /* Modified cylindrical Bessel functions * * BesselK[nu, x] * x > 0, nu >= 0 * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_bessel_Knu_e(const double nu, const double x, gsl_sf_result * result); double gsl_sf_bessel_Knu(const double nu, const double x); /* Logarithm of modified cylindrical Bessel functions. * * Log[BesselK[nu, x]] * x > 0, nu >= 0 * * exceptions: GSL_EDOM */ int gsl_sf_bessel_lnKnu_e(const double nu, const double x, gsl_sf_result * result); double gsl_sf_bessel_lnKnu(const double nu, const double x); /* s'th positive zero of the Bessel function J_0(x). * * exceptions: */ int gsl_sf_bessel_zero_J0_e(unsigned int s, gsl_sf_result * result); double gsl_sf_bessel_zero_J0(unsigned int s); /* s'th positive zero of the Bessel function J_1(x). * * exceptions: */ int gsl_sf_bessel_zero_J1_e(unsigned int s, gsl_sf_result * result); double gsl_sf_bessel_zero_J1(unsigned int s); /* s'th positive zero of the Bessel function J_nu(x). * * exceptions: */ int gsl_sf_bessel_zero_Jnu_e(double nu, unsigned int s, gsl_sf_result * result); double gsl_sf_bessel_zero_Jnu(double nu, unsigned int s); __END_DECLS #endif /* __GSL_SF_BESSEL_H__ */ gsl/specfunc/bessel_J1.c0000644000175000017500000000713713536674414013523 0ustar eddedd/* specfunc/bessel_J1.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "error.h" #include "bessel.h" #include "bessel_amp_phase.h" #include "cheb_eval.c" #define ROOT_EIGHT (2.0*M_SQRT2) /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* based on SLATEC besj1, 1983 version, w. fullerton */ /* chebyshev expansions series for bj1 on the interval 0. to 1.60000d+01 with weighted error 4.48e-17 log weighted error 16.35 significant figures required 15.77 decimal places required 16.89 */ static double bj1_data[12] = { -0.11726141513332787, -0.25361521830790640, 0.050127080984469569, -0.004631514809625081, 0.000247996229415914, -0.000008678948686278, 0.000000214293917143, -0.000000003936093079, 0.000000000055911823, -0.000000000000632761, 0.000000000000005840, -0.000000000000000044, }; static cheb_series bj1_cs = { bj1_data, 11, -1, 1, 8 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_J1_e(const double x, gsl_sf_result * result) { double y = fabs(x); /* CHECK_POINTER(result) */ if(y == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(y < 2.0*GSL_DBL_MIN) { UNDERFLOW_ERROR(result); } else if(y < ROOT_EIGHT * GSL_SQRT_DBL_EPSILON) { result->val = 0.5*x; result->err = 0.0; return GSL_SUCCESS; } else if(y < 4.0) { gsl_sf_result c; cheb_eval_e(&bj1_cs, 0.125*y*y-1.0, &c); result->val = x * (0.25 + c.val); result->err = fabs(x * c.err); return GSL_SUCCESS; } else { /* Because the leading term in the phase is y, * which we assume is exactly known, the error * in the cos() evaluation is bounded. */ const double z = 32.0/(y*y) - 1.0; gsl_sf_result ca; gsl_sf_result ct; gsl_sf_result sp; const int stat_ca = cheb_eval_e(&_gsl_sf_bessel_amp_phase_bm1_cs, z, &ca); const int stat_ct = cheb_eval_e(&_gsl_sf_bessel_amp_phase_bth1_cs, z, &ct); const int stat_sp = gsl_sf_bessel_sin_pi4_e(y, ct.val/y, &sp); const double sqrty = sqrt(y); const double ampl = (0.75 + ca.val) / sqrty; result->val = (x < 0.0 ? -ampl : ampl) * sp.val; result->err = fabs(sp.val) * ca.err/sqrty + fabs(ampl) * sp.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_3(stat_ca, stat_ct, stat_sp); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_J1(const double x) { EVAL_RESULT(gsl_sf_bessel_J1_e(x, &result)); } gsl/specfunc/hyperg_1F1.c0000644000175000017500000017043713536674414013625 0ustar eddedd/* specfunc/hyperg_1F1.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * Copyright (C) 2010 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include #include #include "error.h" #include "hyperg.h" #define _1F1_INT_THRESHOLD (100.0*GSL_DBL_EPSILON) /* Asymptotic result for 1F1(a, b, x) x -> -Infinity. * Assumes b-a != neg integer and b != neg integer. */ static int hyperg_1F1_asymp_negx(const double a, const double b, const double x, gsl_sf_result * result) { gsl_sf_result lg_b; gsl_sf_result lg_bma; double sgn_b; double sgn_bma; int stat_b = gsl_sf_lngamma_sgn_e(b, &lg_b, &sgn_b); int stat_bma = gsl_sf_lngamma_sgn_e(b-a, &lg_bma, &sgn_bma); if(stat_b == GSL_SUCCESS && stat_bma == GSL_SUCCESS) { gsl_sf_result F; int stat_F = gsl_sf_hyperg_2F0_series_e(a, 1.0+a-b, -1.0/x, -1, &F); if(F.val != 0) { double ln_term_val = a*log(-x); double ln_term_err = 2.0 * GSL_DBL_EPSILON * (fabs(a) + fabs(ln_term_val)); double ln_pre_val = lg_b.val - lg_bma.val - ln_term_val; double ln_pre_err = lg_b.err + lg_bma.err + ln_term_err; int stat_e = gsl_sf_exp_mult_err_e(ln_pre_val, ln_pre_err, sgn_bma*sgn_b*F.val, F.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_F); } else { result->val = 0.0; result->err = 0.0; return stat_F; } } else { DOMAIN_ERROR(result); } } /* Asymptotic result for 1F1(a, b, x) x -> +Infinity * Assumes b != neg integer and a != neg integer */ static int hyperg_1F1_asymp_posx(const double a, const double b, const double x, gsl_sf_result * result) { gsl_sf_result lg_b; gsl_sf_result lg_a; double sgn_b; double sgn_a; int stat_b = gsl_sf_lngamma_sgn_e(b, &lg_b, &sgn_b); int stat_a = gsl_sf_lngamma_sgn_e(a, &lg_a, &sgn_a); if(stat_a == GSL_SUCCESS && stat_b == GSL_SUCCESS) { gsl_sf_result F; int stat_F = gsl_sf_hyperg_2F0_series_e(b-a, 1.0-a, 1.0/x, -1, &F); if(stat_F == GSL_SUCCESS && F.val != 0) { double lnx = log(x); double ln_term_val = (a-b)*lnx; double ln_term_err = 2.0 * GSL_DBL_EPSILON * (fabs(a) + fabs(b)) * fabs(lnx) + 2.0 * GSL_DBL_EPSILON * fabs(a-b); double ln_pre_val = lg_b.val - lg_a.val + ln_term_val + x; double ln_pre_err = lg_b.err + lg_a.err + ln_term_err + 2.0 * GSL_DBL_EPSILON * fabs(x); int stat_e = gsl_sf_exp_mult_err_e(ln_pre_val, ln_pre_err, sgn_a*sgn_b*F.val, F.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_F); } else { result->val = 0.0; result->err = 0.0; return stat_F; } } else { DOMAIN_ERROR(result); } } /* Asymptotic result from Slater 4.3.7 * * To get the general series, write M(a,b,x) as * * M(a,b,x)=sum ((a)_n/(b)_n) (x^n / n!) * * and expand (b)_n in inverse powers of b as follows * * -log(1/(b)_n) = sum_(k=0)^(n-1) log(b+k) * = n log(b) + sum_(k=0)^(n-1) log(1+k/b) * * Do a taylor expansion of the log in 1/b and sum the resulting terms * using the standard algebraic formulas for finite sums of powers of * k. This should then give * * M(a,b,x) = sum_(n=0)^(inf) (a_n/n!) (x/b)^n * (1 - n(n-1)/(2b) * + (n-1)n(n+1)(3n-2)/(24b^2) + ... * * which can be summed explicitly. The trick for summing it is to take * derivatives of sum_(i=0)^(inf) a_n*y^n/n! = (1-y)^(-a); * * [BJG 16/01/2007] */ static int hyperg_1F1_largebx(const double a, const double b, const double x, gsl_sf_result * result) { double y = x/b; double f = exp(-a*log1p(-y)); double t1 = -((a*(a+1.0))/(2*b))*pow((y/(1.0-y)),2.0); double t2 = (1/(24*b*b))*((a*(a+1)*y*y)/pow(1-y,4))*(12+8*(2*a+1)*y+(3*a*a-a-2)*y*y); double t3 = (-1/(48*b*b*b*pow(1-y,6)))*a*((a + 1)*((y*((a + 1)*(a*(y*(y*((y*(a - 2) + 16)*(a - 1)) + 72)) + 96)) + 24)*pow(y, 2))); result->val = f * (1 + t1 + t2 + t3); result->err = 2*fabs(f*t3) + 2*GSL_DBL_EPSILON*fabs(result->val); return GSL_SUCCESS; } /* Asymptotic result for x < 2b-4a, 2b-4a large. * [Abramowitz+Stegun, 13.5.21] * * assumes 0 <= x/(2b-4a) <= 1 */ static int hyperg_1F1_large2bm4a(const double a, const double b, const double x, gsl_sf_result * result) { double eta = 2.0*b - 4.0*a; double cos2th = x/eta; double sin2th = 1.0 - cos2th; double th = acos(sqrt(cos2th)); double pre_h = 0.25*M_PI*M_PI*eta*eta*cos2th*sin2th; gsl_sf_result lg_b; int stat_lg = gsl_sf_lngamma_e(b, &lg_b); double t1 = 0.5*(1.0-b)*log(0.25*x*eta); double t2 = 0.25*log(pre_h); double lnpre_val = lg_b.val + 0.5*x + t1 - t2; double lnpre_err = lg_b.err + 2.0 * GSL_DBL_EPSILON * (fabs(0.5*x) + fabs(t1) + fabs(t2)); #if SMALL_ANGLE const double eps = asin(sqrt(cos2th)); /* theta = pi/2 - eps */ double s1 = (fmod(a, 1.0) == 0.0) ? 0.0 : sin(a*M_PI); double eta_reduc = (fmod(eta + 1, 4.0) == 0.0) ? 0.0 : fmod(eta + 1, 8.0); double phi1 = 0.25*eta_reduc*M_PI; double phi2 = 0.25*eta*(2*eps + sin(2.0*eps)); double s2 = sin(phi1 - phi2); #else double s1 = sin(a*M_PI); double s2 = sin(0.25*eta*(2.0*th - sin(2.0*th)) + 0.25*M_PI); #endif double ser_val = s1 + s2; double ser_err = 2.0 * GSL_DBL_EPSILON * (fabs(s1) + fabs(s2)); int stat_e = gsl_sf_exp_mult_err_e(lnpre_val, lnpre_err, ser_val, ser_err, result); return GSL_ERROR_SELECT_2(stat_e, stat_lg); } /* Luke's rational approximation. * See [Luke, Algorithms for the Computation of Mathematical Functions, p.182] * * Like the case of the 2F1 rational approximations, these are * probably guaranteed to converge for x < 0, barring gross * numerical instability in the pre-asymptotic regime. */ static int hyperg_1F1_luke(const double a, const double c, const double xin, gsl_sf_result * result) { const double RECUR_BIG = 1.0e+50; const int nmax = 5000; int n = 3; const double x = -xin; const double x3 = x*x*x; const double t0 = a/c; const double t1 = (a+1.0)/(2.0*c); const double t2 = (a+2.0)/(2.0*(c+1.0)); double F = 1.0; double prec; double Bnm3 = 1.0; /* B0 */ double Bnm2 = 1.0 + t1 * x; /* B1 */ double Bnm1 = 1.0 + t2 * x * (1.0 + t1/3.0 * x); /* B2 */ double Anm3 = 1.0; /* A0 */ double Anm2 = Bnm2 - t0 * x; /* A1 */ double Anm1 = Bnm1 - t0*(1.0 + t2*x)*x + t0 * t1 * (c/(c+1.0)) * x*x; /* A2 */ while(1) { double npam1 = n + a - 1; double npcm1 = n + c - 1; double npam2 = n + a - 2; double npcm2 = n + c - 2; double tnm1 = 2*n - 1; double tnm3 = 2*n - 3; double tnm5 = 2*n - 5; double F1 = (n-a-2) / (2*tnm3*npcm1); double F2 = (n+a)*npam1 / (4*tnm1*tnm3*npcm2*npcm1); double F3 = -npam2*npam1*(n-a-2) / (8*tnm3*tnm3*tnm5*(n+c-3)*npcm2*npcm1); double E = -npam1*(n-c-1) / (2*tnm3*npcm2*npcm1); double An = (1.0+F1*x)*Anm1 + (E + F2*x)*x*Anm2 + F3*x3*Anm3; double Bn = (1.0+F1*x)*Bnm1 + (E + F2*x)*x*Bnm2 + F3*x3*Bnm3; double r = An/Bn; prec = fabs((F - r)/F); F = r; if(prec < GSL_DBL_EPSILON || n > nmax) break; if(fabs(An) > RECUR_BIG || fabs(Bn) > RECUR_BIG) { An /= RECUR_BIG; Bn /= RECUR_BIG; Anm1 /= RECUR_BIG; Bnm1 /= RECUR_BIG; Anm2 /= RECUR_BIG; Bnm2 /= RECUR_BIG; Anm3 /= RECUR_BIG; Bnm3 /= RECUR_BIG; } else if(fabs(An) < 1.0/RECUR_BIG || fabs(Bn) < 1.0/RECUR_BIG) { An *= RECUR_BIG; Bn *= RECUR_BIG; Anm1 *= RECUR_BIG; Bnm1 *= RECUR_BIG; Anm2 *= RECUR_BIG; Bnm2 *= RECUR_BIG; Anm3 *= RECUR_BIG; Bnm3 *= RECUR_BIG; } n++; Bnm3 = Bnm2; Bnm2 = Bnm1; Bnm1 = Bn; Anm3 = Anm2; Anm2 = Anm1; Anm1 = An; } result->val = F; result->err = 2.0 * fabs(F * prec); result->err += 2.0 * GSL_DBL_EPSILON * (n-1.0) * fabs(F); return GSL_SUCCESS; } /* Series for 1F1(1,b,x) * b > 0 */ static int hyperg_1F1_1_series(const double b, const double x, gsl_sf_result * result) { double sum_val = 1.0; double sum_err = 0.0; double term = 1.0; double n = 1.0; while(fabs(term/sum_val) > 0.25*GSL_DBL_EPSILON) { term *= x/(b+n-1); sum_val += term; sum_err += 8.0*GSL_DBL_EPSILON*fabs(term) + GSL_DBL_EPSILON*fabs(sum_val); n += 1.0; } result->val = sum_val; result->err = sum_err; result->err += 2.0 * fabs(term); return GSL_SUCCESS; } /* 1F1(1,b,x) * b >= 1, b integer */ static int hyperg_1F1_1_int(const int b, const double x, gsl_sf_result * result) { if(b < 1) { DOMAIN_ERROR(result); } else if(b == 1) { return gsl_sf_exp_e(x, result); } else if(b == 2) { return gsl_sf_exprel_e(x, result); } else if(b == 3) { return gsl_sf_exprel_2_e(x, result); } else { return gsl_sf_exprel_n_e(b-1, x, result); } } /* 1F1(1,b,x) * b >=1, b real * * checked OK: [GJ] Thu Oct 1 16:46:35 MDT 1998 */ static int hyperg_1F1_1(const double b, const double x, gsl_sf_result * result) { double ax = fabs(x); double ib = floor(b + 0.1); if(b < 1.0) { DOMAIN_ERROR(result); } else if(b == 1.0) { return gsl_sf_exp_e(x, result); } else if(b >= 1.4*ax) { return hyperg_1F1_1_series(b, x, result); } else if(fabs(b - ib) < _1F1_INT_THRESHOLD && ib < INT_MAX) { return hyperg_1F1_1_int((int)ib, x, result); } else if(x > 0.0) { if(x > 100.0 && b < 0.75*x) { return hyperg_1F1_asymp_posx(1.0, b, x, result); } else if(b < 1.0e+05) { /* Recurse backward on b, from a * chosen offset point. For x > 0, * which holds here, this should * be a stable direction. */ const double off = ceil(1.4*x-b) + 1.0; double bp = b + off; gsl_sf_result M; int stat_s = hyperg_1F1_1_series(bp, x, &M); const double err_rat = M.err / fabs(M.val); while(bp > b+0.1) { /* M(1,b-1) = x/(b-1) M(1,b) + 1 */ bp -= 1.0; M.val = 1.0 + x/bp * M.val; } result->val = M.val; result->err = err_rat * fabs(M.val); result->err += 2.0 * GSL_DBL_EPSILON * (fabs(off)+1.0) * fabs(M.val); return stat_s; } else if (fabs(x) < fabs(b) && fabs(x) < sqrt(fabs(b)) * fabs(b-x)) { return hyperg_1F1_largebx(1.0, b, x, result); } else if (fabs(x) > fabs(b)) { return hyperg_1F1_1_series(b, x, result); } else { return hyperg_1F1_large2bm4a(1.0, b, x, result); } } else { /* x <= 0 and b not large compared to |x| */ if(ax < 10.0 && b < 10.0) { return hyperg_1F1_1_series(b, x, result); } else if(ax >= 100.0 && GSL_MAX_DBL(fabs(2.0-b),1.0) < 0.99*ax) { return hyperg_1F1_asymp_negx(1.0, b, x, result); } else { return hyperg_1F1_luke(1.0, b, x, result); } } } /* 1F1(a,b,x)/Gamma(b) for b->0 * [limit of Abramowitz+Stegun 13.3.7] */ static int hyperg_1F1_renorm_b0(const double a, const double x, gsl_sf_result * result) { double eta = a*x; if(eta > 0.0) { double root_eta = sqrt(eta); gsl_sf_result I1_scaled; int stat_I = gsl_sf_bessel_I1_scaled_e(2.0*root_eta, &I1_scaled); if(I1_scaled.val <= 0.0) { result->val = 0.0; result->err = 0.0; return GSL_ERROR_SELECT_2(stat_I, GSL_EDOM); } else { /* Note that 13.3.7 contains higher terms which are zeroth order in b. These make a non-negligible contribution to the sum. With the first correction term, the I1 above is replaced by I1 + (2/3)*a*(x/(4a))**(3/2)*I2(2*root_eta). We will add this as part of the result and error estimate. */ const double corr1 =(2.0/3.0)*a*pow(x/(4.0*a),1.5)*gsl_sf_bessel_In_scaled(2, 2.0*root_eta) ; const double lnr_val = 0.5*x + 0.5*log(eta) + fabs(2.0*root_eta) + log(I1_scaled.val+corr1); const double lnr_err = GSL_DBL_EPSILON * (1.5*fabs(x) + 1.0) + fabs((I1_scaled.err+corr1)/I1_scaled.val); return gsl_sf_exp_err_e(lnr_val, lnr_err, result); } } else if(eta == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { /* eta < 0 */ double root_eta = sqrt(-eta); gsl_sf_result J1; int stat_J = gsl_sf_bessel_J1_e(2.0*root_eta, &J1); if(J1.val <= 0.0) { result->val = 0.0; result->err = 0.0; return GSL_ERROR_SELECT_2(stat_J, GSL_EDOM); } else { const double t1 = 0.5*x; const double t2 = 0.5*log(-eta); const double t3 = fabs(x); const double t4 = log(J1.val); const double lnr_val = t1 + t2 + t3 + t4; const double lnr_err = GSL_DBL_EPSILON * (1.5*fabs(x) + 1.0) + fabs(J1.err/J1.val); gsl_sf_result ex; int stat_e = gsl_sf_exp_err_e(lnr_val, lnr_err, &ex); result->val = -ex.val; result->err = ex.err; return stat_e; } } } /* 1F1'(a,b,x)/1F1(a,b,x) * Uses Gautschi's version of the CF. * [Gautschi, Math. Comp. 31, 994 (1977)] * * Supposedly this suffers from the "anomalous convergence" * problem when b < x. I have seen anomalous convergence * in several of the continued fractions associated with * 1F1(a,b,x). This particular CF formulation seems stable * for b > x. However, it does display a painful artifact * of the anomalous convergence; the convergence plateaus * unless b >>> x. For example, even for b=1000, x=1, this * method locks onto a ratio which is only good to about * 4 digits. Apparently the rest of the digits are hiding * way out on the plateau, but finite-precision lossage * means you will never get them. */ #if 0 static int hyperg_1F1_CF1_p(const double a, const double b, const double x, double * result) { const double RECUR_BIG = GSL_SQRT_DBL_MAX; const int maxiter = 5000; int n = 1; double Anm2 = 1.0; double Bnm2 = 0.0; double Anm1 = 0.0; double Bnm1 = 1.0; double a1 = 1.0; double b1 = 1.0; double An = b1*Anm1 + a1*Anm2; double Bn = b1*Bnm1 + a1*Bnm2; double an, bn; double fn = An/Bn; while(n < maxiter) { double old_fn; double del; n++; Anm2 = Anm1; Bnm2 = Bnm1; Anm1 = An; Bnm1 = Bn; an = (a+n)*x/((b-x+n-1)*(b-x+n)); bn = 1.0; An = bn*Anm1 + an*Anm2; Bn = bn*Bnm1 + an*Bnm2; if(fabs(An) > RECUR_BIG || fabs(Bn) > RECUR_BIG) { An /= RECUR_BIG; Bn /= RECUR_BIG; Anm1 /= RECUR_BIG; Bnm1 /= RECUR_BIG; Anm2 /= RECUR_BIG; Bnm2 /= RECUR_BIG; } old_fn = fn; fn = An/Bn; del = old_fn/fn; if(fabs(del - 1.0) < 10.0*GSL_DBL_EPSILON) break; } *result = a/(b-x) * fn; if(n == maxiter) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } #endif /* 0 */ /* 1F1'(a,b,x)/1F1(a,b,x) * Uses Gautschi's series transformation of the * continued fraction. This is apparently the best * method for getting this ratio in the stable region. * The convergence is monotone and supergeometric * when b > x. * Assumes a >= -1. */ static int hyperg_1F1_CF1_p_ser(const double a, const double b, const double x, double * result) { if(a == 0.0) { *result = 0.0; return GSL_SUCCESS; } else { const int maxiter = 5000; double sum = 1.0; double pk = 1.0; double rhok = 0.0; int k; for(k=1; k RECUR_BIG || fabs(Bn) > RECUR_BIG) { An /= RECUR_BIG; Bn /= RECUR_BIG; Anm1 /= RECUR_BIG; Bnm1 /= RECUR_BIG; Anm2 /= RECUR_BIG; Bnm2 /= RECUR_BIG; } old_fn = fn; fn = An/Bn; del = old_fn/fn; if(fabs(del - 1.0) < 10.0*GSL_DBL_EPSILON) break; } *result = fn; if(n == maxiter) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } #endif /* 0 */ /* 1F1(a,b+1,x)/1F1(a,b,x) * * This seemed to suffer from "anomalous convergence". * However, I have no theory for this recurrence. */ #if 0 static int hyperg_1F1_CF1_b(const double a, const double b, const double x, double * result) { const double RECUR_BIG = GSL_SQRT_DBL_MAX; const int maxiter = 5000; int n = 1; double Anm2 = 1.0; double Bnm2 = 0.0; double Anm1 = 0.0; double Bnm1 = 1.0; double a1 = b + 1.0; double b1 = (b + 1.0) * (b - x); double An = b1*Anm1 + a1*Anm2; double Bn = b1*Bnm1 + a1*Bnm2; double an, bn; double fn = An/Bn; while(n < maxiter) { double old_fn; double del; n++; Anm2 = Anm1; Bnm2 = Bnm1; Anm1 = An; Bnm1 = Bn; an = (b + n) * (b + n - 1.0 - a) * x; bn = (b + n) * (b + n - 1.0 - x); An = bn*Anm1 + an*Anm2; Bn = bn*Bnm1 + an*Bnm2; if(fabs(An) > RECUR_BIG || fabs(Bn) > RECUR_BIG) { An /= RECUR_BIG; Bn /= RECUR_BIG; Anm1 /= RECUR_BIG; Bnm1 /= RECUR_BIG; Anm2 /= RECUR_BIG; Bnm2 /= RECUR_BIG; } old_fn = fn; fn = An/Bn; del = old_fn/fn; if(fabs(del - 1.0) < 10.0*GSL_DBL_EPSILON) break; } *result = fn; if(n == maxiter) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } #endif /* 0 */ /* 1F1(a,b,x) * |a| <= 1, b > 0 */ static int hyperg_1F1_small_a_bgt0(const double a, const double b, const double x, gsl_sf_result * result) { const double bma = b-a; const double oma = 1.0-a; const double ap1mb = 1.0+a-b; const double abs_bma = fabs(bma); const double abs_oma = fabs(oma); const double abs_ap1mb = fabs(ap1mb); const double ax = fabs(x); if(a == 0.0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(a == 1.0 && b >= 1.0) { return hyperg_1F1_1(b, x, result); } else if(a == -1.0) { result->val = 1.0 + a/b * x; result->err = GSL_DBL_EPSILON * (1.0 + fabs(a/b * x)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(b >= 1.4*ax) { return gsl_sf_hyperg_1F1_series_e(a, b, x, result); } else if(x > 0.0) { if(x > 100.0 && abs_bma*abs_oma < 0.5*x) { return hyperg_1F1_asymp_posx(a, b, x, result); } else if(b < 5.0e+06) { /* Recurse backward on b from * a suitably high point. */ const double b_del = ceil(1.4*x-b) + 1.0; double bp = b + b_del; gsl_sf_result r_Mbp1; gsl_sf_result r_Mb; double Mbp1; double Mb; double Mbm1; int stat_0 = gsl_sf_hyperg_1F1_series_e(a, bp+1.0, x, &r_Mbp1); int stat_1 = gsl_sf_hyperg_1F1_series_e(a, bp, x, &r_Mb); const double err_rat = fabs(r_Mbp1.err/r_Mbp1.val) + fabs(r_Mb.err/r_Mb.val); Mbp1 = r_Mbp1.val; Mb = r_Mb.val; while(bp > b+0.1) { /* Do backward recursion. */ Mbm1 = ((x+bp-1.0)*Mb - x*(bp-a)/bp*Mbp1)/(bp-1.0); bp -= 1.0; Mbp1 = Mb; Mb = Mbm1; } result->val = Mb; result->err = err_rat * (fabs(b_del)+1.0) * fabs(Mb); result->err += 2.0 * GSL_DBL_EPSILON * fabs(Mb); return GSL_ERROR_SELECT_2(stat_0, stat_1); } else if (fabs(x) < fabs(b) && fabs(a*x) < sqrt(fabs(b)) * fabs(b-x)) { return hyperg_1F1_largebx(a, b, x, result); } else { return hyperg_1F1_large2bm4a(a, b, x, result); } } else { /* x < 0 and b not large compared to |x| */ if(ax < 10.0 && b < 10.0) { return gsl_sf_hyperg_1F1_series_e(a, b, x, result); } else if(ax >= 100.0 && GSL_MAX(abs_ap1mb,1.0) < 0.99*ax) { return hyperg_1F1_asymp_negx(a, b, x, result); } else { return hyperg_1F1_luke(a, b, x, result); } } } /* 1F1(b+eps,b,x) * |eps|<=1, b > 0 */ static int hyperg_1F1_beps_bgt0(const double eps, const double b, const double x, gsl_sf_result * result) { if(b > fabs(x) && fabs(eps) < GSL_SQRT_DBL_EPSILON) { /* If b-a is very small and x/b is not too large we can * use this explicit approximation. * * 1F1(b+eps,b,x) = exp(ax/b) (1 - eps x^2 (v2 + v3 x + ...) + ...) * * v2 = a/(2b^2(b+1)) * v3 = a(b-2a)/(3b^3(b+1)(b+2)) * ... * * See [Luke, Mathematical Functions and Their Approximations, p.292] * * This cannot be used for b near a negative integer or zero. * Also, if x/b is large the deviation from exp(x) behaviour grows. */ double a = b + eps; gsl_sf_result exab; int stat_e = gsl_sf_exp_e(a*x/b, &exab); double v2 = a/(2.0*b*b*(b+1.0)); double v3 = a*(b-2.0*a)/(3.0*b*b*b*(b+1.0)*(b+2.0)); double v = v2 + v3 * x; double f = (1.0 - eps*x*x*v); result->val = exab.val * f; result->err = exab.err * fabs(f); result->err += fabs(exab.val) * GSL_DBL_EPSILON * (1.0 + fabs(eps*x*x*v)); result->err += 4.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_e; } else { /* Otherwise use a Kummer transformation to reduce * it to the small a case. */ gsl_sf_result Kummer_1F1; int stat_K = hyperg_1F1_small_a_bgt0(-eps, b, -x, &Kummer_1F1); if(Kummer_1F1.val != 0.0) { int stat_e = gsl_sf_exp_mult_err_e(x, 2.0*GSL_DBL_EPSILON*fabs(x), Kummer_1F1.val, Kummer_1F1.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_K); } else { result->val = 0.0; result->err = 0.0; return stat_K; } } } /* 1F1(a,2a,x) = Gamma(a + 1/2) E(x) (|x|/4)^(-a+1/2) scaled_I(a-1/2,|x|/2) * * E(x) = exp(x) x > 0 * = 1 x < 0 * * a >= 1/2 */ static int hyperg_1F1_beq2a_pos(const double a, const double x, gsl_sf_result * result) { if(x == 0.0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else { gsl_sf_result I; int stat_I = gsl_sf_bessel_Inu_scaled_e(a-0.5, 0.5*fabs(x), &I); gsl_sf_result lg; int stat_g = gsl_sf_lngamma_e(a + 0.5, &lg); double ln_term = (0.5-a)*log(0.25*fabs(x)); double lnpre_val = lg.val + GSL_MAX_DBL(x,0.0) + ln_term; double lnpre_err = lg.err + GSL_DBL_EPSILON * (fabs(ln_term) + fabs(x)); int stat_e = gsl_sf_exp_mult_err_e(lnpre_val, lnpre_err, I.val, I.err, result); return GSL_ERROR_SELECT_3(stat_e, stat_g, stat_I); } } /* Determine middle parts of diagonal recursion along b=2a * from two endpoints, i.e. * * given: M(a,b) and M(a+1,b+2) * get: M(a+1,b+1) and M(a,b+1) */ #if 0 inline static int hyperg_1F1_diag_step(const double a, const double b, const double x, const double Mab, const double Map1bp2, double * Map1bp1, double * Mabp1) { if(a == b) { *Map1bp1 = Mab; *Mabp1 = Mab - x/(b+1.0) * Map1bp2; } else { *Map1bp1 = Mab - x * (a-b)/(b*(b+1.0)) * Map1bp2; *Mabp1 = (a * *Map1bp1 - b * Mab)/(a-b); } return GSL_SUCCESS; } #endif /* 0 */ /* Determine endpoint of diagonal recursion. * * given: M(a,b) and M(a+1,b+2) * get: M(a+1,b) and M(a+1,b+1) */ #if 0 inline static int hyperg_1F1_diag_end_step(const double a, const double b, const double x, const double Mab, const double Map1bp2, double * Map1b, double * Map1bp1) { *Map1bp1 = Mab - x * (a-b)/(b*(b+1.0)) * Map1bp2; *Map1b = Mab + x/b * *Map1bp1; return GSL_SUCCESS; } #endif /* 0 */ /* Handle the case of a and b both positive integers. * Assumes a > 0 and b > 0. */ static int hyperg_1F1_ab_posint(const int a, const int b, const double x, gsl_sf_result * result) { double ax = fabs(x); if(a == b) { return gsl_sf_exp_e(x, result); /* 1F1(a,a,x) */ } else if(a == 1) { return gsl_sf_exprel_n_e(b-1, x, result); /* 1F1(1,b,x) */ } else if(b == a + 1) { gsl_sf_result K; int stat_K = gsl_sf_exprel_n_e(a, -x, &K); /* 1F1(1,1+a,-x) */ int stat_e = gsl_sf_exp_mult_err_e(x, 2.0 * GSL_DBL_EPSILON * fabs(x), K.val, K.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_K); } else if(a == b + 1) { gsl_sf_result ex; int stat_e = gsl_sf_exp_e(x, &ex); result->val = ex.val * (1.0 + x/b); result->err = ex.err * (1.0 + x/b); result->err += ex.val * GSL_DBL_EPSILON * (1.0 + fabs(x/b)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_e; } else if(a == b + 2) { gsl_sf_result ex; int stat_e = gsl_sf_exp_e(x, &ex); double poly = (1.0 + x/b*(2.0 + x/(b+1.0))); result->val = ex.val * poly; result->err = ex.err * fabs(poly); result->err += ex.val * GSL_DBL_EPSILON * (1.0 + fabs(x/b) * (2.0 + fabs(x/(b+1.0)))); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_e; } else if(b == 2*a) { return hyperg_1F1_beq2a_pos(a, x, result); /* 1F1(a,2a,x) */ } else if( ( b < 10 && a < 10 && ax < 5.0 ) || ( b > a*ax ) || ( b > a && ax < 5.0 ) ) { return gsl_sf_hyperg_1F1_series_e(a, b, x, result); } else if(b > a && b >= 2*a + x) { /* Use the Gautschi CF series, then * recurse backward to a=0 for normalization. * This will work for either sign of x. */ double rap; int stat_CF1 = hyperg_1F1_CF1_p_ser(a, b, x, &rap); double ra = 1.0 + x/a * rap; double Ma = GSL_SQRT_DBL_MIN; double Map1 = ra * Ma; double Mnp1 = Map1; double Mn = Ma; double Mnm1; int n; for(n=a; n>0; n--) { Mnm1 = (n * Mnp1 - (2*n-b+x) * Mn) / (b-n); Mnp1 = Mn; Mn = Mnm1; } result->val = Ma/Mn; result->err = 2.0 * GSL_DBL_EPSILON * (fabs(a) + 1.0) * fabs(Ma/Mn); return stat_CF1; } else if(b > a && b < 2*a + x && b > x) { /* Use the Gautschi series representation of * the continued fraction. Then recurse forward * to the a=b line for normalization. This will * work for either sign of x, although we do need * to check for b > x, for when x is positive. */ double rap; int stat_CF1 = hyperg_1F1_CF1_p_ser(a, b, x, &rap); double ra = 1.0 + x/a * rap; gsl_sf_result ex; int stat_ex; double Ma = GSL_SQRT_DBL_MIN; double Map1 = ra * Ma; double Mnm1 = Ma; double Mn = Map1; double Mnp1; int n; for(n=a+1; nval = ex.val * Ma/Mn; result->err = ex.err * fabs(Ma/Mn); result->err += 4.0 * GSL_DBL_EPSILON * (fabs(b-a)+1.0) * fabs(result->val); return GSL_ERROR_SELECT_2(stat_ex, stat_CF1); } else if(x >= 0.0) { if(b < a) { /* The point b,b is below the b=2a+x line. * Forward recursion on a from b,b+1 is possible. * Note that a > b + 1 as well, since we already tried a = b + 1. */ if(x + log(fabs(x/b)) < GSL_LOG_DBL_MAX-2.0) { double ex = exp(x); int n; double Mnm1 = ex; /* 1F1(b,b,x) */ double Mn = ex * (1.0 + x/b); /* 1F1(b+1,b,x) */ double Mnp1; for(n=b+1; nval = Mn; result->err = (x + 1.0) * GSL_DBL_EPSILON * fabs(Mn); result->err *= fabs(a-b)+1.0; return GSL_SUCCESS; } else { OVERFLOW_ERROR(result); } } else { /* b > a * b < 2a + x * b <= x (otherwise we would have finished above) * * Gautschi anomalous convergence region. However, we can * recurse forward all the way from a=0,1 because we are * always underneath the b=2a+x line. */ gsl_sf_result r_Mn; double Mnm1 = 1.0; /* 1F1(0,b,x) */ double Mn; /* 1F1(1,b,x) */ double Mnp1; int n; gsl_sf_exprel_n_e(b-1, x, &r_Mn); Mn = r_Mn.val; for(n=1; nval = Mn; result->err = fabs(Mn) * (1.0 + fabs(a)) * fabs(r_Mn.err / r_Mn.val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(Mn); return GSL_SUCCESS; } } else { /* x < 0 * b < a (otherwise we would have tripped one of the above) */ if(a <= 0.5*(b-x) || a >= -x) { /* Gautschi continued fraction is in the anomalous region, * so we must find another way. We recurse down in b, * from the a=b line. */ double ex = exp(x); double Manp1 = ex; double Man = ex * (1.0 + x/(a-1.0)); double Manm1; int n; for(n=a-1; n>b; n--) { Manm1 = (-n*(1-n-x)*Man - x*(n-a)*Manp1)/(n*(n-1.0)); Manp1 = Man; Man = Manm1; } result->val = Man; result->err = (fabs(x) + 1.0) * GSL_DBL_EPSILON * fabs(Man); result->err *= fabs(b-a)+1.0; return GSL_SUCCESS; } else { /* Pick a0 such that b ~= 2a0 + x, then * recurse down in b from a0,a0 to determine * the values near the line b=2a+x. Then recurse * forward on a from a0. */ int a0 = (int) ceil(0.5*(b-x)); double Ma0b; /* M(a0,b) */ double Ma0bp1; /* M(a0,b+1) */ double Ma0p1b; /* M(a0+1,b) */ double Mnm1; double Mn; double Mnp1; int n; { double ex = exp(x); double Ma0np1 = ex; double Ma0n = ex * (1.0 + x/(a0-1.0)); double Ma0nm1; for(n=a0-1; n>b; n--) { Ma0nm1 = (-n*(1-n-x)*Ma0n - x*(n-a0)*Ma0np1)/(n*(n-1.0)); Ma0np1 = Ma0n; Ma0n = Ma0nm1; } Ma0bp1 = Ma0np1; Ma0b = Ma0n; Ma0p1b = (b*(a0+x)*Ma0b + x*(a0-b)*Ma0bp1)/(a0*b); } /* Initialise the recurrence correctly BJG */ if (a0 >= a) { Mn = Ma0b; } else if (a0 + 1>= a) { Mn = Ma0p1b; } else { Mnm1 = Ma0b; Mn = Ma0p1b; for(n=a0+1; nval = Mn; result->err = (fabs(x) + 1.0) * GSL_DBL_EPSILON * fabs(Mn); result->err *= fabs(b-a)+1.0; return GSL_SUCCESS; } } } /* Evaluate a <= 0, a integer, cases directly. (Polynomial; Horner) * When the terms are all positive, this * must work. We will assume this here. */ static int hyperg_1F1_a_negint_poly(const int a, const double b, const double x, gsl_sf_result * result) { if(a == 0) { result->val = 1.0; result->err = 1.0; return GSL_SUCCESS; } else { int N = -a; double poly = 1.0; int k; for(k=N-1; k>=0; k--) { double t = (a+k)/(b+k) * (x/(k+1)); double r = t + 1.0/poly; if(r > 0.9*GSL_DBL_MAX/poly) { OVERFLOW_ERROR(result); } else { poly *= r; /* P_n = 1 + t_n P_{n-1} */ } } result->val = poly; result->err = 2.0 * (sqrt(N) + 1.0) * GSL_DBL_EPSILON * fabs(poly); return GSL_SUCCESS; } } /* Evaluate negative integer a case by relation * to Laguerre polynomials. This is more general than * the direct polynomial evaluation, but is safe * for all values of x. * * 1F1(-n,b,x) = n!/(b)_n Laguerre[n,b-1,x] * = n B(b,n) Laguerre[n,b-1,x] * * assumes b is not a negative integer */ static int hyperg_1F1_a_negint_lag(const int a, const double b, const double x, gsl_sf_result * result) { const int n = -a; gsl_sf_result lag; const int stat_l = gsl_sf_laguerre_n_e(n, b-1.0, x, &lag); if(b < 0.0) { gsl_sf_result lnfact; gsl_sf_result lng1; gsl_sf_result lng2; double s1, s2; const int stat_f = gsl_sf_lnfact_e(n, &lnfact); const int stat_g1 = gsl_sf_lngamma_sgn_e(b + n, &lng1, &s1); const int stat_g2 = gsl_sf_lngamma_sgn_e(b, &lng2, &s2); const double lnpre_val = lnfact.val - (lng1.val - lng2.val); const double lnpre_err = lnfact.err + lng1.err + lng2.err + 2.0 * GSL_DBL_EPSILON * fabs(lnpre_val); const int stat_e = gsl_sf_exp_mult_err_e(lnpre_val, lnpre_err, s1*s2*lag.val, lag.err, result); return GSL_ERROR_SELECT_5(stat_e, stat_l, stat_g1, stat_g2, stat_f); } else { gsl_sf_result lnbeta; gsl_sf_lnbeta_e(b, n, &lnbeta); if(fabs(lnbeta.val) < 0.1) { /* As we have noted, when B(x,y) is near 1, * evaluating log(B(x,y)) is not accurate. * Instead we evaluate B(x,y) directly. */ const double ln_term_val = log(1.25*n); const double ln_term_err = 2.0 * GSL_DBL_EPSILON * ln_term_val; gsl_sf_result beta; int stat_b = gsl_sf_beta_e(b, n, &beta); int stat_e = gsl_sf_exp_mult_err_e(ln_term_val, ln_term_err, lag.val, lag.err, result); result->val *= beta.val/1.25; result->err *= beta.val/1.25; return GSL_ERROR_SELECT_3(stat_e, stat_l, stat_b); } else { /* B(x,y) was not near 1, so it is safe to use * the logarithmic values. */ const double ln_n = log(n); const double ln_term_val = lnbeta.val + ln_n; const double ln_term_err = lnbeta.err + 2.0 * GSL_DBL_EPSILON * fabs(ln_n); int stat_e = gsl_sf_exp_mult_err_e(ln_term_val, ln_term_err, lag.val, lag.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_l); } } } /* Handle negative integer a case for x > 0 and * generic b. * * Combine [Abramowitz+Stegun, 13.6.9 + 13.6.27] * M(-n,b,x) = (-1)^n / (b)_n U(-n,b,x) = n! / (b)_n Laguerre^(b-1)_n(x) */ #if 0 static int hyperg_1F1_a_negint_U(const int a, const double b, const double x, gsl_sf_result * result) { const int n = -a; const double sgn = ( GSL_IS_ODD(n) ? -1.0 : 1.0 ); double sgpoch; gsl_sf_result lnpoch; gsl_sf_result U; const int stat_p = gsl_sf_lnpoch_sgn_e(b, n, &lnpoch, &sgpoch); const int stat_U = gsl_sf_hyperg_U_e(-n, b, x, &U); const int stat_e = gsl_sf_exp_mult_err_e(-lnpoch.val, lnpoch.err, sgn * sgpoch * U.val, U.err, result); return GSL_ERROR_SELECT_3(stat_e, stat_U, stat_p); } #endif /* Assumes a <= -1, b <= -1, and b <= a. */ static int hyperg_1F1_ab_negint(const int a, const int b, const double x, gsl_sf_result * result) { if(x == 0.0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(x > 0.0) { return hyperg_1F1_a_negint_poly(a, b, x, result); } else { /* Apply a Kummer transformation to make x > 0 so * we can evaluate the polynomial safely. Of course, * this assumes b <= a, which must be true for * a<0 and b<0, since otherwise the thing is undefined. */ gsl_sf_result K; int stat_K = hyperg_1F1_a_negint_poly(b-a, b, -x, &K); int stat_e = gsl_sf_exp_mult_err_e(x, 2.0 * GSL_DBL_EPSILON * fabs(x), K.val, K.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_K); } } /* [Abramowitz+Stegun, 13.1.3] * * M(a,b,x) = Gamma(1+a-b)/Gamma(2-b) x^(1-b) * * { Gamma(b)/Gamma(a) M(1+a-b,2-b,x) - (b-1) U(1+a-b,2-b,x) } * * b not an integer >= 2 * a-b not a negative integer */ static int hyperg_1F1_U(const double a, const double b, const double x, gsl_sf_result * result) { const double bp = 2.0 - b; const double ap = a - b + 1.0; gsl_sf_result lg_ap, lg_bp; double sg_ap; int stat_lg0 = gsl_sf_lngamma_sgn_e(ap, &lg_ap, &sg_ap); int stat_lg1 = gsl_sf_lngamma_e(bp, &lg_bp); int stat_lg2 = GSL_ERROR_SELECT_2(stat_lg0, stat_lg1); double t1 = (bp-1.0) * log(x); double lnpre_val = lg_ap.val - lg_bp.val + t1; double lnpre_err = lg_ap.err + lg_bp.err + 2.0 * GSL_DBL_EPSILON * fabs(t1); gsl_sf_result lg_2mbp, lg_1papmbp; double sg_2mbp, sg_1papmbp; int stat_lg3 = gsl_sf_lngamma_sgn_e(2.0-bp, &lg_2mbp, &sg_2mbp); int stat_lg4 = gsl_sf_lngamma_sgn_e(1.0+ap-bp, &lg_1papmbp, &sg_1papmbp); int stat_lg5 = GSL_ERROR_SELECT_2(stat_lg3, stat_lg4); double lnc1_val = lg_2mbp.val - lg_1papmbp.val; double lnc1_err = lg_2mbp.err + lg_1papmbp.err + GSL_DBL_EPSILON * (fabs(lg_2mbp.val) + fabs(lg_1papmbp.val)); gsl_sf_result M; gsl_sf_result_e10 U; int stat_F = gsl_sf_hyperg_1F1_e(ap, bp, x, &M); int stat_U = gsl_sf_hyperg_U_e10_e(ap, bp, x, &U); int stat_FU = GSL_ERROR_SELECT_2(stat_F, stat_U); gsl_sf_result_e10 term_M; int stat_e0 = gsl_sf_exp_mult_err_e10_e(lnc1_val, lnc1_err, sg_2mbp*sg_1papmbp*M.val, M.err, &term_M); const double ombp = 1.0 - bp; const double Uee_val = U.e10*M_LN10; const double Uee_err = 2.0 * GSL_DBL_EPSILON * fabs(Uee_val); const double Mee_val = term_M.e10*M_LN10; const double Mee_err = 2.0 * GSL_DBL_EPSILON * fabs(Mee_val); int stat_e1; /* Do a little dance with the exponential prefactors * to avoid overflows in intermediate results. */ if(Uee_val > Mee_val) { const double factorM_val = exp(Mee_val-Uee_val); const double factorM_err = 2.0 * GSL_DBL_EPSILON * (fabs(Mee_val-Uee_val)+1.0) * factorM_val; const double inner_val = term_M.val*factorM_val - ombp*U.val; const double inner_err = term_M.err*factorM_val + fabs(ombp) * U.err + fabs(term_M.val) * factorM_err + GSL_DBL_EPSILON * (fabs(term_M.val*factorM_val) + fabs(ombp*U.val)); stat_e1 = gsl_sf_exp_mult_err_e(lnpre_val+Uee_val, lnpre_err+Uee_err, sg_ap*inner_val, inner_err, result); } else { const double factorU_val = exp(Uee_val - Mee_val); const double factorU_err = 2.0 * GSL_DBL_EPSILON * (fabs(Mee_val-Uee_val)+1.0) * factorU_val; const double inner_val = term_M.val - ombp*factorU_val*U.val; const double inner_err = term_M.err + fabs(ombp*factorU_val*U.err) + fabs(ombp*factorU_err*U.val) + GSL_DBL_EPSILON * (fabs(term_M.val) + fabs(ombp*factorU_val*U.val)); stat_e1 = gsl_sf_exp_mult_err_e(lnpre_val+Mee_val, lnpre_err+Mee_err, sg_ap*inner_val, inner_err, result); } return GSL_ERROR_SELECT_5(stat_e1, stat_e0, stat_FU, stat_lg5, stat_lg2); } /* Handle case of generic positive a, b. * Assumes b-a is not a negative integer. */ static int hyperg_1F1_ab_pos(const double a, const double b, const double x, gsl_sf_result * result) { const double ax = fabs(x); if( ( b < 10.0 && a < 10.0 && ax < 5.0 ) || ( b > a*ax ) || ( b > a && ax < 5.0 ) ) { return gsl_sf_hyperg_1F1_series_e(a, b, x, result); } else if( x < -100.0 && GSL_MAX_DBL(fabs(a),1.0)*GSL_MAX_DBL(fabs(1.0+a-b),1.0) < 0.7*fabs(x) ) { /* Large negative x asymptotic. */ return hyperg_1F1_asymp_negx(a, b, x, result); } else if( x > 100.0 && GSL_MAX_DBL(fabs(b-a),1.0)*GSL_MAX_DBL(fabs(1.0-a),1.0) < 0.7*fabs(x) ) { /* Large positive x asymptotic. */ return hyperg_1F1_asymp_posx(a, b, x, result); } else if(fabs(b-a) <= 1.0) { /* Directly handle b near a. */ return hyperg_1F1_beps_bgt0(a-b, b, x, result); /* a = b + eps */ } else if(b > a && b >= 2*a + x) { /* Use the Gautschi CF series, then * recurse backward to a near 0 for normalization. * This will work for either sign of x. */ double rap; int stat_CF1 = hyperg_1F1_CF1_p_ser(a, b, x, &rap); double ra = 1.0 + x/a * rap; double Ma = GSL_SQRT_DBL_MIN; double Map1 = ra * Ma; double Mnp1 = Map1; double Mn = Ma; double Mnm1; gsl_sf_result Mn_true; int stat_Mt; double n; for(n=a; n>0.5; n -= 1.0) { Mnm1 = (n * Mnp1 - (2.0*n-b+x) * Mn) / (b-n); Mnp1 = Mn; Mn = Mnm1; } stat_Mt = hyperg_1F1_small_a_bgt0(n, b, x, &Mn_true); result->val = (Ma/Mn) * Mn_true.val; result->err = fabs(Ma/Mn) * Mn_true.err; result->err += 2.0 * GSL_DBL_EPSILON * (fabs(a)+1.0) * fabs(result->val); return GSL_ERROR_SELECT_2(stat_Mt, stat_CF1); } else if(b > a && b < 2*a + x && b > x) { /* Use the Gautschi series representation of * the continued fraction. Then recurse forward * to near the a=b line for normalization. This will * work for either sign of x, although we do need * to check for b > x, which is relevant when x is positive. */ gsl_sf_result Mn_true; int stat_Mt; double rap; int stat_CF1 = hyperg_1F1_CF1_p_ser(a, b, x, &rap); double ra = 1.0 + x/a * rap; double Ma = GSL_SQRT_DBL_MIN; double Mnm1 = Ma; double Mn = ra * Mnm1; double Mnp1; double n; for(n=a+1.0; nval = Ma/Mn * Mn_true.val; result->err = fabs(Ma/Mn) * Mn_true.err; result->err += 2.0 * GSL_DBL_EPSILON * (fabs(b-a)+1.0) * fabs(result->val); return GSL_ERROR_SELECT_2(stat_Mt, stat_CF1); } else if(x >= 0.0) { if(b < a) { /* Forward recursion on a from a=b+eps-1,b+eps. */ double N = floor(a-b); double eps = a - b - N; gsl_sf_result r_M0; gsl_sf_result r_M1; int stat_0 = hyperg_1F1_beps_bgt0(eps-1.0, b, x, &r_M0); int stat_1 = hyperg_1F1_beps_bgt0(eps, b, x, &r_M1); double M0 = r_M0.val; double M1 = r_M1.val; double Mam1 = M0; double Ma = M1; double Map1; double ap; double start_pair = fabs(M0) + fabs(M1); double minim_pair = GSL_DBL_MAX; double pair_ratio; double rat_0 = fabs(r_M0.err/r_M0.val); double rat_1 = fabs(r_M1.err/r_M1.val); for(ap=b+eps; apval = Ma; result->err = 2.0 * (rat_0 + rat_1 + GSL_DBL_EPSILON) * (fabs(b-a)+1.0) * fabs(Ma); result->err += 2.0 * (rat_0 + rat_1) * pair_ratio*pair_ratio * fabs(Ma); result->err += 2.0 * GSL_DBL_EPSILON * fabs(Ma); return GSL_ERROR_SELECT_2(stat_0, stat_1); } else { /* b > a * b < 2a + x * b <= x * * Recurse forward on a from a=eps,eps+1. */ double eps = a - floor(a); gsl_sf_result r_Mnm1; gsl_sf_result r_Mn; int stat_0 = hyperg_1F1_small_a_bgt0(eps, b, x, &r_Mnm1); int stat_1 = hyperg_1F1_small_a_bgt0(eps+1.0, b, x, &r_Mn); double Mnm1 = r_Mnm1.val; double Mn = r_Mn.val; double Mnp1; double n; double start_pair = fabs(Mn) + fabs(Mnm1); double minim_pair = GSL_DBL_MAX; double pair_ratio; double rat_0 = fabs(r_Mnm1.err/r_Mnm1.val); double rat_1 = fabs(r_Mn.err/r_Mn.val); for(n=eps+1.0; nval = Mn; result->err = 2.0 * (rat_0 + rat_1 + GSL_DBL_EPSILON) * (fabs(a)+1.0) * fabs(Mn); result->err += 2.0 * (rat_0 + rat_1) * pair_ratio*pair_ratio * fabs(Mn); result->err += 2.0 * GSL_DBL_EPSILON * fabs(Mn); return GSL_ERROR_SELECT_2(stat_0, stat_1); } } else { /* x < 0 * b < a */ if(a <= 0.5*(b-x) || a >= -x) { /* Recurse down in b, from near the a=b line, b=a+eps,a+eps-1. */ double N = floor(a - b); double eps = 1.0 + N - a + b; gsl_sf_result r_Manp1; gsl_sf_result r_Man; int stat_0 = hyperg_1F1_beps_bgt0(-eps, a+eps, x, &r_Manp1); int stat_1 = hyperg_1F1_beps_bgt0(1.0-eps, a+eps-1.0, x, &r_Man); double Manp1 = r_Manp1.val; double Man = r_Man.val; double Manm1; double n; double start_pair = fabs(Manp1) + fabs(Man); double minim_pair = GSL_DBL_MAX; double pair_ratio; double rat_0 = fabs(r_Manp1.err/r_Manp1.val); double rat_1 = fabs(r_Man.err/r_Man.val); for(n=a+eps-1.0; n>b+0.1; n -= 1.0) { Manm1 = (-n*(1-n-x)*Man - x*(n-a)*Manp1)/(n*(n-1.0)); Manp1 = Man; Man = Manm1; minim_pair = GSL_MIN_DBL(fabs(Manp1) + fabs(Man), minim_pair); } /* FIXME: this is a nasty little hack; there is some (transient?) instability in this recurrence for some values. I can tell when it happens, which is when this pair_ratio is large. But I do not know how to measure the error in terms of it. I guessed quadratic below, but it is probably worse than that. */ pair_ratio = start_pair/minim_pair; result->val = Man; result->err = 2.0 * (rat_0 + rat_1 + GSL_DBL_EPSILON) * (fabs(b-a)+1.0) * fabs(Man); result->err *= pair_ratio*pair_ratio + 1.0; return GSL_ERROR_SELECT_2(stat_0, stat_1); } else { /* Pick a0 such that b ~= 2a0 + x, then * recurse down in b from a0,a0 to determine * the values near the line b=2a+x. Then recurse * forward on a from a0. */ double epsa = a - floor(a); double a0 = floor(0.5*(b-x)) + epsa; double N = floor(a0 - b); double epsb = 1.0 + N - a0 + b; double Ma0b; double Ma0bp1; double Ma0p1b; int stat_a0; double Mnm1; double Mn; double Mnp1; double n; double err_rat; { gsl_sf_result r_Ma0np1; gsl_sf_result r_Ma0n; int stat_0 = hyperg_1F1_beps_bgt0(-epsb, a0+epsb, x, &r_Ma0np1); int stat_1 = hyperg_1F1_beps_bgt0(1.0-epsb, a0+epsb-1.0, x, &r_Ma0n); double Ma0np1 = r_Ma0np1.val; double Ma0n = r_Ma0n.val; double Ma0nm1; err_rat = fabs(r_Ma0np1.err/r_Ma0np1.val) + fabs(r_Ma0n.err/r_Ma0n.val); for(n=a0+epsb-1.0; n>b+0.1; n -= 1.0) { Ma0nm1 = (-n*(1-n-x)*Ma0n - x*(n-a0)*Ma0np1)/(n*(n-1.0)); Ma0np1 = Ma0n; Ma0n = Ma0nm1; } Ma0bp1 = Ma0np1; Ma0b = Ma0n; Ma0p1b = (b*(a0+x)*Ma0b+x*(a0-b)*Ma0bp1)/(a0*b); /* right-down hook */ stat_a0 = GSL_ERROR_SELECT_2(stat_0, stat_1); } /* Initialise the recurrence correctly BJG */ if (a0 >= a - 0.1) { Mn = Ma0b; } else if (a0 + 1>= a - 0.1) { Mn = Ma0p1b; } else { Mnm1 = Ma0b; Mn = Ma0p1b; for(n=a0+1.0; nval = Mn; result->err = (err_rat + GSL_DBL_EPSILON) * (fabs(b-a)+1.0) * fabs(Mn); return stat_a0; } } } /* Assumes b != integer * Assumes a != integer when x > 0 * Assumes b-a != neg integer when x < 0 */ static int hyperg_1F1_ab_neg(const double a, const double b, const double x, gsl_sf_result * result) { const double bma = b - a; const double abs_x = fabs(x); const double abs_a = fabs(a); const double abs_b = fabs(b); const double size_a = GSL_MAX(abs_a, 1.0); const double size_b = GSL_MAX(abs_b, 1.0); const int bma_integer = ( bma - floor(bma+0.5) < _1F1_INT_THRESHOLD ); if( (abs_a < 10.0 && abs_b < 10.0 && abs_x < 5.0) || (b > 0.8*GSL_MAX(fabs(a),1.0)*fabs(x)) ) { return gsl_sf_hyperg_1F1_series_e(a, b, x, result); } else if( x > 0.0 && size_b > size_a && size_a*log(M_E*x/size_b) < GSL_LOG_DBL_EPSILON+7.0 ) { /* Series terms are positive definite up until * there is a sign change. But by then the * terms are small due to the last condition. */ return gsl_sf_hyperg_1F1_series_e(a, b, x, result); } else if( (abs_x < 5.0 && fabs(bma) < 10.0 && abs_b < 10.0) || (b > 0.8*GSL_MAX_DBL(fabs(bma),1.0)*abs_x) ) { /* Use Kummer transformation to render series safe. */ gsl_sf_result Kummer_1F1; int stat_K = gsl_sf_hyperg_1F1_series_e(bma, b, -x, &Kummer_1F1); int stat_e = gsl_sf_exp_mult_err_e(x, GSL_DBL_EPSILON * fabs(x), Kummer_1F1.val, Kummer_1F1.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_K); } else if( x < -30.0 && GSL_MAX_DBL(fabs(a),1.0)*GSL_MAX_DBL(fabs(1.0+a-b),1.0) < 0.99*fabs(x) ) { /* Large negative x asymptotic. * Note that we do not check if b-a is a negative integer. */ return hyperg_1F1_asymp_negx(a, b, x, result); } else if( x > 100.0 && GSL_MAX_DBL(fabs(bma),1.0)*GSL_MAX_DBL(fabs(1.0-a),1.0) < 0.99*fabs(x) ) { /* Large positive x asymptotic. * Note that we do not check if a is a negative integer. */ return hyperg_1F1_asymp_posx(a, b, x, result); } else if(x > 0.0 && !(bma_integer && bma > 0.0)) { return hyperg_1F1_U(a, b, x, result); } else { /* FIXME: if all else fails, try the series... BJG */ if (x < 0.0) { /* Apply Kummer Transformation */ int status = gsl_sf_hyperg_1F1_series_e(b-a, b, -x, result); double K_factor = exp(x); result->val *= K_factor; result->err *= K_factor; return status; } else { int status = gsl_sf_hyperg_1F1_series_e(a, b, x, result); return status; } /* Sadness... */ /* result->val = 0.0; */ /* result->err = 0.0; */ /* GSL_ERROR ("error", GSL_EUNIMPL); */ } } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_hyperg_1F1_int_e(const int a, const int b, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x == 0.0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(a == b) { return gsl_sf_exp_e(x, result); } else if(b == 0) { DOMAIN_ERROR(result); } else if(a == 0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(b < 0 && (a < b || a > 0)) { /* Standard domain error due to singularity. */ DOMAIN_ERROR(result); } else if(x > 100.0 && GSL_MAX_DBL(1.0,fabs(b-a))*GSL_MAX_DBL(1.0,fabs(1-a)) < 0.5 * x) { /* x -> +Inf asymptotic */ return hyperg_1F1_asymp_posx(a, b, x, result); } else if(x < -100.0 && GSL_MAX_DBL(1.0,fabs(a))*GSL_MAX_DBL(1.0,fabs(1+a-b)) < 0.5 * fabs(x)) { /* x -> -Inf asymptotic */ return hyperg_1F1_asymp_negx(a, b, x, result); } else if(a < 0 && b < 0) { return hyperg_1F1_ab_negint(a, b, x, result); } else if(a < 0 && b > 0) { /* Use Kummer to reduce it to the positive integer case. * Note that b > a, strictly, since we already trapped b = a. */ gsl_sf_result Kummer_1F1; int stat_K = hyperg_1F1_ab_posint(b-a, b, -x, &Kummer_1F1); int stat_e = gsl_sf_exp_mult_err_e(x, GSL_DBL_EPSILON * fabs(x), Kummer_1F1.val, Kummer_1F1.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_K); } else { /* a > 0 and b > 0 */ return hyperg_1F1_ab_posint(a, b, x, result); } } int gsl_sf_hyperg_1F1_e(const double a, const double b, const double x, gsl_sf_result * result ) { const double bma = b - a; const double rinta = floor(a + 0.5); const double rintb = floor(b + 0.5); const double rintbma = floor(bma + 0.5); const int a_integer = ( fabs(a-rinta) < _1F1_INT_THRESHOLD && rinta > INT_MIN && rinta < INT_MAX ); const int b_integer = ( fabs(b-rintb) < _1F1_INT_THRESHOLD && rintb > INT_MIN && rintb < INT_MAX ); const int bma_integer = ( fabs(bma-rintbma) < _1F1_INT_THRESHOLD && rintbma > INT_MIN && rintbma < INT_MAX ); const int b_neg_integer = ( b < -0.1 && b_integer ); const int a_neg_integer = ( a < -0.1 && a_integer ); const int bma_neg_integer = ( bma < -0.1 && bma_integer ); /* CHECK_POINTER(result) */ if(x == 0.0) { /* Testing for this before testing a and b * is somewhat arbitrary. The result is that * we have 1F1(a,0,0) = 1. */ result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(b == 0.0) { DOMAIN_ERROR(result); } else if(a == 0.0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(a == b) { /* case: a==b; exp(x) * It's good to test exact equality now. * We also test approximate equality later. */ return gsl_sf_exp_e(x, result); } else if(fabs(b) < _1F1_INT_THRESHOLD && fabs(a) < _1F1_INT_THRESHOLD) { /* a and b near zero: 1 + a/b (exp(x)-1) */ /* Note that neither a nor b is zero, since * we eliminated that with the above tests. */ gsl_sf_result exm1; int stat_e = gsl_sf_expm1_e(x, &exm1); double sa = ( a > 0.0 ? 1.0 : -1.0 ); double sb = ( b > 0.0 ? 1.0 : -1.0 ); double lnab = log(fabs(a/b)); /* safe */ gsl_sf_result hx; int stat_hx = gsl_sf_exp_mult_err_e(lnab, GSL_DBL_EPSILON * fabs(lnab), sa * sb * exm1.val, exm1.err, &hx); result->val = (hx.val == GSL_DBL_MAX ? hx.val : 1.0 + hx.val); /* FIXME: excessive paranoia ? what is DBL_MAX+1 ?*/ result->err = hx.err; return GSL_ERROR_SELECT_2(stat_hx, stat_e); } else if (fabs(b) < _1F1_INT_THRESHOLD && fabs(x*a) < 1) { /* b near zero and a not near zero */ const double m_arg = 1.0/(0.5*b); gsl_sf_result F_renorm; int stat_F = hyperg_1F1_renorm_b0(a, x, &F_renorm); int stat_m = gsl_sf_multiply_err_e(m_arg, 2.0 * GSL_DBL_EPSILON * m_arg, 0.5*F_renorm.val, 0.5*F_renorm.err, result); return GSL_ERROR_SELECT_2(stat_m, stat_F); } else if(a_integer && b_integer) { /* Check for reduction to the integer case. * Relies on the arbitrary "near an integer" test. */ return gsl_sf_hyperg_1F1_int_e((int)rinta, (int)rintb, x, result); } else if(b_neg_integer && !(a_neg_integer && a > b)) { /* Standard domain error due to * uncancelled singularity. */ DOMAIN_ERROR(result); } else if(a_neg_integer) { return hyperg_1F1_a_negint_lag((int)rinta, b, x, result); } else if(b > 0.0) { if(-1.0 <= a && a <= 1.0) { /* Handle small a explicitly. */ return hyperg_1F1_small_a_bgt0(a, b, x, result); } else if(bma_neg_integer) { /* Catch this now, to avoid problems in the * generic evaluation code. */ gsl_sf_result Kummer_1F1; int stat_K = hyperg_1F1_a_negint_lag((int)rintbma, b, -x, &Kummer_1F1); int stat_e = gsl_sf_exp_mult_err_e(x, GSL_DBL_EPSILON * fabs(x), Kummer_1F1.val, Kummer_1F1.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_K); } else if(a < 0.0 && fabs(x) < 2*GSL_LOG_DBL_MAX) { /* Use Kummer to reduce it to the generic positive case. * Note that b > a, strictly, since we already trapped b = a. * Also b-(b-a)=a, and a is not a negative integer here, * so the generic evaluation is safe. */ gsl_sf_result Kummer_1F1; int stat_K = hyperg_1F1_ab_pos(b-a, b, -x, &Kummer_1F1); int stat_e = gsl_sf_exp_mult_err_e(x, GSL_DBL_EPSILON * fabs(x), Kummer_1F1.val, Kummer_1F1.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_K); } else if (a > 0) { /* a > 0.0 */ return hyperg_1F1_ab_pos(a, b, x, result); } else { return gsl_sf_hyperg_1F1_series_e(a, b, x, result); } } else { /* b < 0.0 */ if(bma_neg_integer && x < 0.0) { /* Handle this now to prevent problems * in the generic evaluation. */ gsl_sf_result K; int stat_K; int stat_e; if(a < 0.0) { /* Kummer transformed version of safe polynomial. * The condition a < 0 is equivalent to b < b-a, * which is the condition required for the series * to be positive definite here. */ stat_K = hyperg_1F1_a_negint_poly((int)rintbma, b, -x, &K); } else { /* Generic eval for negative integer a. */ stat_K = hyperg_1F1_a_negint_lag((int)rintbma, b, -x, &K); } stat_e = gsl_sf_exp_mult_err_e(x, GSL_DBL_EPSILON * fabs(x), K.val, K.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_K); } else if(a > 0.0) { /* Use Kummer to reduce it to the generic negative case. */ gsl_sf_result K; int stat_K = hyperg_1F1_ab_neg(b-a, b, -x, &K); int stat_e = gsl_sf_exp_mult_err_e(x, GSL_DBL_EPSILON * fabs(x), K.val, K.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_K); } else { return hyperg_1F1_ab_neg(a, b, x, result); } } } #if 0 /* Luke in the canonical case. */ if(x < 0.0 && !a_neg_integer && !bma_neg_integer) { double prec; return hyperg_1F1_luke(a, b, x, result, &prec); } /* Luke with Kummer transformation. */ if(x > 0.0 && !a_neg_integer && !bma_neg_integer) { double prec; double Kummer_1F1; double ex; int stat_F = hyperg_1F1_luke(b-a, b, -x, &Kummer_1F1, &prec); int stat_e = gsl_sf_exp_e(x, &ex); if(stat_F == GSL_SUCCESS && stat_e == GSL_SUCCESS) { double lnr = log(fabs(Kummer_1F1)) + x; if(lnr < GSL_LOG_DBL_MAX) { *result = ex * Kummer_1F1; return GSL_SUCCESS; } else { *result = GSL_POSINF; GSL_ERROR ("overflow", GSL_EOVRFLW); } } else if(stat_F != GSL_SUCCESS) { *result = 0.0; return stat_F; } else { *result = 0.0; return stat_e; } } #endif /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_hyperg_1F1_int(const int m, const int n, double x) { EVAL_RESULT(gsl_sf_hyperg_1F1_int_e(m, n, x, &result)); } double gsl_sf_hyperg_1F1(double a, double b, double x) { EVAL_RESULT(gsl_sf_hyperg_1F1_e(a, b, x, &result)); } gsl/specfunc/airy_zero.c0000644000175000017500000003250613536674414013715 0ustar eddedd/* specfunc/airy_zero.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "error.h" static const double zero_Ai[] = { 0, -2.3381074104597670385, -4.087949444130970617, -5.520559828095551059, -6.786708090071758999, -7.944133587120853123, -9.022650853340980380, -10.04017434155808593, -11.00852430373326289, -11.93601556323626252, -12.82877675286575720, -13.69148903521071793, -14.52782995177533498, -15.34075513597799686, -16.13268515694577144, -16.90563399742994263, -17.661300105697057509, -18.401132599207115416, -19.126380474246952144, -19.838129891721499701, -20.537332907677566360, -21.224829943642096955, -21.901367595585130707, -22.567612917496502831, -23.224165001121681061, -23.871564455535918567, -24.510301236589677490, -25.140821166148963748, -25.763531400982756459, -26.378805052137232374, -26.986985111606367686, -27.588387809882444812, -28.183305502632644923, -28.772009165237435382, -29.354750558766287963, -29.931764119086555913, -30.503268611418505287, -31.069468585183755604, -31.63055565801265934, -32.18670965295205069, -32.73809960900026913, -33.28488468190140188, -33.82721494950865194, -34.36523213386365906, -34.89907025034531210, -35.42885619274788846, -35.95471026189862926, -36.47674664437480896, -36.99507384699450161, -37.50979509200501613, -38.02100867725525443, -38.52880830509424882, -39.03328338327251391, -39.53451930072301805, -40.03259768075417603, -40.52759661388971821, -41.01959087233248966, -41.50865210780525018, -41.99484903432643004, -42.47824759730839188, -42.95891113021656009, -43.43690049989685412, -43.91227424156370168, -44.38508868433939023, -44.85539806814583243, -45.32325465267043011, -45.78870881905730086, -46.25180916491254629, -46.71260259315651633, -47.17113439520631705, -47.62744832892739292, -48.08158669175325711, -48.53359038933679845, -48.98349900006458366, -49.43135083573678341, -49.87718299868941729, -50.32103143561221860, -50.76293098829428522, -51.20291544151056412, -51.64101756824489758, -52.07726917242964943, -52.51170112936766183, -52.94434342398931824, -53.37522518708567514, -53.80437472964785717, -54.23181957543308298, -54.65758649186871111, -55.08170151939748312, -55.50418999935962251, -55.92507660050055598, -56.34438534418670066, -56.76213962840595327, -57.17836225062417808, -57.59307542956407782, -58.00630082596830627, -58.41805956240450934, -58.82837224216613231, -59.23725896731927534, -59.64473935594259360, -60.05083255860419805, -60.45555727411669871 }; static const size_t size_zero_Ai = sizeof(zero_Ai)/sizeof(double); static const double zero_Bi[] = { 0, -1.173713222709127925, -3.271093302836352716, -4.830737841662015933, -6.169852128310251260, -7.376762079367763714, -8.491948846509388013, -9.538194379346238887, -10.52991350670535792, -11.47695355127877944, -12.38641713858273875, -13.26363952294180555, -14.11275680906865779, -14.93705741215416404, -15.739210351190482771, -16.521419550634379054, -17.285531624581242533, -18.033113287225001572, -18.765508284480081041, -19.483880132989234014, -20.189244785396202420, -20.882495994193175768, -21.564425284712977653, -22.235737881803385167, -22.897065554219793474, -23.548977079642448269, -24.191986850649000086, -24.826562012152892172, -25.453128427085131994, -26.072075698466804494, -26.683761425120990449, -27.288514830076298204, -27.886639871735962459, -28.478417925678661737, -29.064110107777650305, -29.643959295918396591, -30.218191897047274645, -30.787019397921766297, -31.350639731255585371, -31.90923848358456965, -32.46298996683685318, -33.01205817205683814, -33.55659762084006113, -34.09675412765602851, -34.63266548426775468, -35.16446207582101720, -35.69226743681080479, -36.21619875398748222, -36.73636732230120657, -37.25287895916828697, -37.76583438165180116, -38.27532955056003997, -38.78145598496327279, -39.28430105019802461, -39.78394822205711298, -40.28047732954369150, -40.77396477829068148, -41.26448375650675678, -41.75210442510106287, -42.23689409345656643, -42.71891738216253539, -43.19823637387693118, -43.67491075336673948, -44.14899793766617113, -44.62055319719727274, -45.08962976861312825, -45.55627896004907928, -46.02055024940102076, -46.48249137619078661, -46.94214842752602207, -47.39956591861496210, -47.85478686825452176, -48.30785286967246692, -48.75880415707066192, -49.20767966818603897, -49.65451710315861501, -50.09935297997125482, -50.54222268670364757, -50.98316053082286586, -51.42219978571468262, -51.85937273464332870, -52.29471071231240525, -52.72824414418606069, -53.16000258371716397, -53.59001474761792882, -54.01830854929815828, -54.44491113058688729, -54.86984889184461534, -55.29314752056546491, -55.71483201856140365, -56.13492672781406761, -56.55345535507366411, -56.97044099527886475, -57.38590615386647834, -57.79987276803497897, -58.21236222702161974, -58.62339539144885603, -59.03299261179210306, -59.44117374601743460, -59.84795817643466996, -60.25336482580837088 }; static const size_t size_zero_Bi = sizeof(zero_Bi)/sizeof(double); static const double zero_Aip[] = { 0, -1.018792971647471089, -3.248197582179836738, -4.820099211178735639, -6.163307355639486822, -7.372177255047770177, -8.488486734019722133, -9.535449052433547471, -10.52766039695740728, -11.47505663348024529, -12.384788371845747325, -13.262218961665210382, -14.111501970462995282, -14.935937196720517467, -15.738201373692538303, -16.520503825433793542, -17.284695050216437357, -18.032344622504393395, -18.764798437665954740, -19.483221656567231178, -20.188631509463373154, -20.881922755516737701, -21.563887723198974958, -22.235232285348913331, -22.896588738874619001, -23.548526295928801574, -24.191559709526353841, -24.826156425921155001, -25.452742561777649948, -26.071707935173912515, -26.683410328322449767, -27.288179121523985029, -27.886318408768461192, -28.478109683102278108, -29.063814162638199090, -29.643674814632015921, -30.217918124468574603, -30.786755648012502519, -31.350385379083034671, -31.90899295843046320, -32.46275274623847982, -33.01182877663428709, -33.55637560978942190, -34.09653909480913771, -34.63245705463586589, -35.16425990255340758, -35.69207119851046870, -36.21600815233519918, -36.73618207994680321, -37.25269881785414827, -37.76565910053887108, -38.27515890473087933, -38.78128976408036876, -39.28413905729859644, -39.78379027246823278, -40.28032324990371935, -40.77381440566486637, -41.26433693758643383, -41.75196101547722703, -42.23675395695976012, -42.71878039026198233, -43.19810240513270670, -43.67477969292950869, -44.14886967681966886, -44.62042763293925724, -45.08950680327102630, -45.55615850092696446, -46.02043220845493728, -46.48237566972975615, -46.94203497593635633, -47.39945464610575493, -47.85467770262241617, -48.30774574208398774, -48.75869900186057804, -49.20757642267037247, -49.65441570746105074, -50.09925337686182515, -50.54212482144867502, -50.98306435104524282, -51.42210524126365311, -51.85927977747301469, -52.29461929636838876, -52.72815422529939506, -53.15991411950524351, -53.58992769739169611, -54.01822287397517367, -54.44482679260982599, -54.86976585510479430, -55.29306575033103518, -55.71475148140987392, -56.13484739156885235, -56.55337718874437424, -56.97036396900508167, -57.38583023886477265, -57.79979793654895377, -58.21228845227477578, -58.62332264760009139, -59.03292087389367419, -59.44110298997521892, -59.84788837897058171, -60.25329596442479317 }; static const size_t size_zero_Aip = sizeof(zero_Aip)/sizeof(double); static const double zero_Bip[] = { 0, -2.294439682614123247, -4.073155089071828216, -5.512395729663599496, -6.781294445990305390, -7.940178689168578927, -9.019583358794239067, -10.037696334908545802, -11.006462667712289940, -11.934261645014844663, -12.827258309177217640, -13.690155826835049101, -14.526645763485711410, -15.339693082242404109, -16.131724782385900578, -16.904759411889649958, -17.660498743114976102, -18.400394367181703280, -19.125697156412638066, -19.837494718415910503, -20.536740241453273980, -21.224275044889266569, -21.900846445139208281, -22.567122080497200470, -23.223701521208962116, -23.871125771677973595, -24.509885117016242729, -25.140425655367878908, -25.763154776913454319, -26.378445791146615697, -26.986641859775034987, -27.588059359225600573, -28.182990771292975456, -28.771707180886056250, -29.354460444612957224, -29.931485082026055160, -30.502999931936645516, -31.069209608721234058, -31.63030578754333679, -32.18646834257807369, -32.73786635840274752, -33.28465903151424981, -33.82699647630635587, -34.36502044767239631, -34.89886499060196419, -35.42865702564380962, -35.95451687785511190, -36.47655875580547918, -36.99489118631672770, -37.50961740986809593, -38.02083574095788210 }; static const size_t size_zero_Bip = sizeof(zero_Bip)/sizeof(double); /* [Abramowitz+Stegun, 10.4.105] */ static double zero_f(double z) { const double pre = pow(z, 2.0/3.0); const double zi2 = 1.0/(z*z); const double zi4 = zi2 * zi2; const double t1 = 5.0/48.0 * zi2; const double t2 = -5.0/36.0 * zi4; const double t3 = 77125.0/82944.0 * zi4 * zi2; const double t4 = -108056875.0/6967296.0 * zi4 * zi4; return pre * (1.0 + t1 + t2 + t3 + t4); } static double zero_g(double z) { const double pre = pow(z, 2.0/3.0); const double zi2 = 1.0/(z*z); const double zi4 = zi2 * zi2; const double t1 = -7.0/48.0 * zi2; const double t2 = 35.0/288.0 * zi4; const double t3 = -181223.0/207360.0 * zi4 * zi2; const double t4 = 18683371.0/1244160.0 * zi4 * zi4; return pre * (1.0 + t1 + t2 + t3 + t4); } int gsl_sf_airy_zero_Ai_e(unsigned int s, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(s < 1) { DOMAIN_ERROR_MSG("s is less than 1", result); } else if(s < size_zero_Ai) { result->val = zero_Ai[s]; result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double z = 3.0*M_PI/8.0 * (4.0*s - 1.0); const double f = zero_f(z); result->val = -f; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_airy_zero_Bi_e(unsigned int s, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(s < 1) { DOMAIN_ERROR_MSG("s is less than 1", result); } else if(s < size_zero_Bi) { result->val = zero_Bi[s]; result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double z = 3.0*M_PI/8.0 * (4.0*s - 3.0); const double f = zero_f(z); result->val = -f; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_airy_zero_Ai_deriv_e(unsigned int s, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(s < 1) { DOMAIN_ERROR_MSG("s is less than 1", result); } else if(s < size_zero_Aip) { result->val = zero_Aip[s]; result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double z = 3.0*M_PI/8.0 * (4.0*s - 3.0); const double g = zero_g(z); result->val = -g; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_airy_zero_Bi_deriv_e(unsigned int s, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(s < 1) { DOMAIN_ERROR_MSG("s is less than 1", result); } else if(s < size_zero_Bip) { result->val = zero_Bip[s]; result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double z = 3.0*M_PI/8.0 * (4.0*s - 1.0); const double g = zero_g(z); result->val = -g; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_airy_zero_Ai(unsigned int s) { EVAL_RESULT(gsl_sf_airy_zero_Ai_e(s, &result)); } double gsl_sf_airy_zero_Bi(unsigned int s) { EVAL_RESULT(gsl_sf_airy_zero_Bi_e(s, &result)); } double gsl_sf_airy_zero_Ai_deriv(unsigned int s) { EVAL_RESULT(gsl_sf_airy_zero_Ai_deriv_e(s, &result)); } double gsl_sf_airy_zero_Bi_deriv(unsigned int s) { EVAL_RESULT(gsl_sf_airy_zero_Bi_deriv_e(s, &result)); } gsl/specfunc/test_sf.c0000644000175000017500000046645013536675317013375 0ustar eddedd/* specfunc/test_sf.c * * Copyright (C) 2007 Brian Gough * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include #include #include "test_sf.h" double test_sf_frac_diff(double x1, double x2) { if(x1 == 0.0 && x2 == 0.0) { return 0.0; } else if (x1 == 0.0) { return fabs(x2); } else if(x1 <= DBL_MAX && x2 <= DBL_MAX && (x1 + x2 != 0.0)) { return fabs((x1-x2)/(x1+x2)); } else { return 1.0; } } /* Check a result against a given value and tolerance. */ int test_sf_check_result(char * message_buff, gsl_sf_result r, double val, double tol) { int s = 0; double f = 0, d = 0; if (gsl_isnan(r.val) || gsl_isnan(val)) { s = (gsl_isnan(r.val) != gsl_isnan(val)) ? TEST_SF_INCONS : s; } else if (gsl_isinf(r.val) || gsl_isinf(val)) { s = (gsl_isinf(r.val) != gsl_isinf(val)) ? TEST_SF_INCONS : s; } else { f = test_sf_frac_diff(val, r.val); d = fabs(val - r.val); if(d > 2.0 * TEST_SIGMA * r.err) s |= TEST_SF_INCONS; if(r.err < 0.0) s |= TEST_SF_ERRNEG; if(gsl_isinf(r.err)) s |= TEST_SF_ERRBAD; #if TEST_EXCESSIVE_ERROR if(d > 0 && r.err > 1e4 * fabs(val)*tol) s |= TEST_SF_ERRBIG; #endif if(f > TEST_FACTOR * tol) s |= TEST_SF_TOLBAD; } if(s != 0) { char buff[2048]; sprintf(buff, " expected: %20.16e\n", val); strcat(message_buff, buff); sprintf(buff, " obtained: %20.16e +/- %.16e (rel=%g)\n", r.val, r.err, r.err/(fabs(r.val) + r.err)); strcat(message_buff, buff); sprintf(buff, " fracdiff: %20.16e\n", f); strcat(message_buff, buff); sprintf(buff, " tolerance: %20.16e\n", tol); strcat(message_buff, buff); } if(s & TEST_SF_INCONS) { strcat(message_buff, " value/expected not consistent within reported error\n"); } if(s & TEST_SF_ERRNEG) { strcat(message_buff, " reported error negative\n"); } if(s & TEST_SF_ERRBAD) { strcat(message_buff, " reported error is bad\n"); } if(s & TEST_SF_ERRBIG) { strcat(message_buff, " reported error is much too big\n"); } if(s & TEST_SF_TOLBAD) { strcat(message_buff, " value not within tolerance of expected value\n"); } return s; } /* Check a result against a given value and tolerance. */ int test_sf_check_e10(char * message_buff, int e10, int e10_in) { int s = 0; if (e10 != e10_in) { s = TEST_SF_EXPBAD; } if(s != 0) { char buff[2048]; sprintf(buff, " expected exponent: 10^%d\n", e10_in); strcat(message_buff, buff); sprintf(buff, " obtained exponent: 10^%d", e10); strcat(message_buff, buff); } if(s & TEST_SF_EXPBAD) { strcat(message_buff, " exponent is incorrect\n"); } return s; } int test_sf_check_val(char * message_buff, double rval, double val, double tol) { int s = 0; double f = test_sf_frac_diff(val, rval); if(f > TEST_FACTOR * tol) s |= TEST_SF_TOLBAD; if(s != 0) { char buff[2048]; sprintf(buff, " expected: %20.16e\n", val); strcat(message_buff, buff); sprintf(buff, " obtained: %20.16e\n", rval); strcat(message_buff, buff); sprintf(buff, " fracdiff: %20.16e\n", f); strcat(message_buff, buff); } if(s & TEST_SF_TOLBAD) { strcat(message_buff, " value not within tolerance of expected value\n"); } return s; } /* Relax the condition on the agreement and on the usefulness * of the error estimate. */ int test_sf_check_result_relax(char * message_buff, gsl_sf_result r, double val, double tol) { int s = 0; double f = test_sf_frac_diff(val, r.val); if(f > GSL_MAX_DBL(TEST_SNGL, TEST_FACTOR * tol)) s |= TEST_SF_INCONS; if(r.err < 0.0) s |= TEST_SF_ERRNEG; if(gsl_isinf(r.err)) s |= TEST_SF_ERRBAD; if(f > TEST_FACTOR * tol) s |= TEST_SF_TOLBAD; if(s != 0) { char buff[2048]; sprintf(buff, " expected: %20.16e\n", val); strcat(message_buff, buff); sprintf(buff, " obtained: %20.16e +/- %.16e (rel=%g)\n", r.val, r.err, r.err/(fabs(r.val) + r.err)); strcat(message_buff, buff); sprintf(buff, " fracdiff: %20.16e\n", f); strcat(message_buff, buff); } if(s & TEST_SF_INCONS) { strcat(message_buff, " value/expected not consistent MAX(tol,SINGLE_PREC)\n"); } if(s & TEST_SF_ERRNEG) { strcat(message_buff, " reported error negative\n"); } if(s & TEST_SF_ERRBAD) { strcat(message_buff, " reported error is bad\n"); } if(s & TEST_SF_TOLBAD) { strcat(message_buff, " value not within tolerance of expected value\n"); } return s; } /* Check a return value. */ int test_sf_check_return(char * message_buff, int val_return, int expected_return) { if(val_return != expected_return) { char buff[256]; sprintf(buff, " unexpected return code: %d\n", val_return); strcat(message_buff, buff); return TEST_SF_RETBAD; } else { return 0; } } int test_sf (gsl_sf_result r, double val_in, double tol, int status, int expect_return, const char * desc) { char message_buff[4096]; int local_s = 0; message_buff[0] = '\0'; local_s |= test_sf_check_result(message_buff, r, val_in, tol); local_s |= test_sf_check_return(message_buff, status, expect_return); gsl_test(local_s, desc); if(local_s != 0) { /* printf(" %s %d\n", __FILE__, __LINE__); */ printf("%s", message_buff); printf(" %22.18e %22.18e\n", r.val, r.err); } return local_s; } int test_sf_e10 (gsl_sf_result_e10 re, double val_in, int e10_in, double tol, int status, int expect_return, const char * desc) { char message_buff[4096]; int local_s = 0; gsl_sf_result r; r.val = re.val; r.err = re.err; message_buff[0] = '\0'; local_s |= test_sf_check_result(message_buff, r, val_in, tol); local_s |= test_sf_check_e10(message_buff, re.e10, e10_in); local_s |= test_sf_check_return(message_buff, status, expect_return); gsl_test(local_s, desc); if(local_s != 0) { /* printf(" %s %d\n", __FILE__, __LINE__); */ printf("%s", message_buff); printf(" %22.18e %22.18e 10^%d\n", re.val, re.err, re.e10); } return local_s; } int test_sf_val (double val, double val_in, double tol, const char * desc) { char message_buff[4096]; int local_s = 0; message_buff[0] = '\0'; local_s |= test_sf_check_val(message_buff, val, val_in, tol); gsl_test(local_s, desc); if(local_s != 0) { /* printf(" %s %d\n", __FILE__, __LINE__); */ printf("%s", message_buff); printf(" %22.18e\n", val); } return local_s; } int test_sf_rlx (gsl_sf_result r, double val_in, double tol, int status, int expect_return, const char * desc) { char message_buff[4096]; int local_s = 0; message_buff[0] = '\0'; local_s |= test_sf_check_result_relax(message_buff, r, val_in, tol); local_s |= test_sf_check_return(message_buff, status, expect_return); gsl_test(local_s, desc); if(local_s != 0) { /* printf(" %s %d\n", __FILE__, __LINE__); */ printf("%s", message_buff); printf(" %22.18e %22.18e\n", r.val, r.err); } return local_s; } int test_sf_2 (gsl_sf_result r1, double val1, double tol1, gsl_sf_result r2, double val2, double tol2, int status, int expect_return, const char * desc) { char message_buff[4096]; int local_s = 0; message_buff[0] = '\0'; local_s |= test_sf_check_result(message_buff, r1, val1, tol1); local_s |= test_sf_check_result(message_buff, r2, val2, tol2); local_s |= test_sf_check_return(message_buff, status, expect_return); gsl_test(local_s, desc); if(local_s != 0) { /* printf(" %s %d\n", __FILE__, __LINE__); */ printf("%s", message_buff); printf(" %22.18e %22.18e\n", r1.val, r1.err); printf(" %22.18e %22.18e\n", r2.val, r2.err); } return local_s; } int test_sf_sgn (gsl_sf_result r, double sgn, double val_in, double tol, double expect_sgn, int status, int expect_return, const char * desc) { char message_buff[4096]; gsl_sf_result local_r; int local_s = 0; message_buff[0] = '\0'; local_r.val = sgn; local_r.err = 0.0; local_s |= test_sf_check_result(message_buff, r, val_in, tol); local_s |= test_sf_check_result(message_buff, local_r, expect_sgn, 0.0); local_s |= test_sf_check_return(message_buff, status, expect_return); gsl_test(local_s, desc); if(local_s != 0) { /* printf(" %s %d\n", __FILE__, __LINE__); */ printf("%s", message_buff); printf(" %22.18e %22.18e\n", r.val, r.err); } return local_s; } int test_sf_return (int status, int expect_return, const char * desc) { char message_buff[4096]; int local_s = 0; message_buff[0] = '\0'; local_s |= test_sf_check_return(message_buff, status, expect_return); gsl_test(local_s, desc); if(local_s != 0) { printf("%s", message_buff); } return local_s; } int test_clausen(void) { gsl_sf_result r; int s = 0; TEST_SF(s, gsl_sf_clausen_e, (M_PI/20.0, &r), 0.4478882448133546, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_clausen_e, (M_PI/6.0, &r), 0.8643791310538927, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_clausen_e, (M_PI/3.0, &r), 1.0149416064096535, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_clausen_e, ( 2.0*M_PI + M_PI/3.0, &r), 1.0149416064096535, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_clausen_e, (100.0*M_PI + M_PI/3.0, &r), 1.0149416064096535, TEST_TOL0, GSL_SUCCESS); return s; } int test_coupling(void) { gsl_sf_result r; int s = 0; /* Test 3j */ TEST_SF(s, gsl_sf_coupling_3j_e, (0, 1, 1, 0, 1, -1, &r), sqrt(1.0/2.0), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_3j_e, (1, 1, 2, 1, -1, 0, &r), sqrt(1.0/6.0), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_3j_e, (2, 4, 6, 0, 2, -2, &r), sqrt(8.0/105.0), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_3j_e, (4, 4, 8, 0, 0, 0, &r), sqrt(2.0/35.0), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_3j_e, (4, 4, 8, 2, -2, 0, &r), 2.0/3.0*sqrt(2.0/35.0), TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_3j_e, (4, 4, 8, 4, -4, 0, &r), 1.0/(3.0*sqrt(70.0)), TEST_TOL2, GSL_SUCCESS); /* Test 3j error checking */ TEST_SF(s, gsl_sf_coupling_3j_e, (-1, 1, 2, 1, -1, 0, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_3j_e, (1, -1, 2, 1, -1, 0, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_3j_e, (1, 1, -2, 1, -1, 0, &r), GSL_NAN, GSL_NAN, GSL_EDOM); /* Test |m_i|<=j_i */ TEST_SF(s, gsl_sf_coupling_3j_e, (1, 1, 2, 2, -1, 0, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_3j_e, (1, 1, 2, 1, -2, 0, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_3j_e, (1, 1, 2, 1, -1, 3, &r), 0, 0, GSL_SUCCESS); /* Test triangle condition j1 + j2 >= j, j >= j2 - j1, j>= j1 - j2 */ TEST_SF(s, gsl_sf_coupling_3j_e, (1, 1, 3, 1, -1, 0, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_3j_e, (1, 4, 2, 1, -1, 0, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_3j_e, (4, 1, 2, 1, -1, 0, &r), 0, 0, GSL_SUCCESS); /* Test m1=m2=m3=0 with j1+j2+j3=odd*/ TEST_SF(s, gsl_sf_coupling_3j_e, (2*13, 2*13, 2*13, 0, 0, 0, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_3j_e, (2*2, 2*17, 2*18, 0, 0, 0, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_3j_e, (2*203, 2*203, 2*203, 0, 0, 0, &r), 0, 0, GSL_SUCCESS); /* Test l1=249 l2=248, l3=2, m1=5, m2=-6, m3=1 */ TEST_SF(s, gsl_sf_coupling_3j_e, (2*249.0, 2*248.0, 2*2.0, 2*5.0, 2*(-6.0), 2*1.0, &r), 0.0228787564223517967033998, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_3j_e, (2*248.0, 2*247.0, 2*2.0, 2*5.0, 2*(-6.0), 2*1.0, &r), -0.022926660587726369939271424097, TEST_TOL3, GSL_SUCCESS); /* Test 6j */ TEST_SF(s, gsl_sf_coupling_6j_e, (2, 2, 4, 2, 2, 2, &r), 1.0/6.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (4, 4, 2, 4, 4, 4, &r), -1.0/10.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (4, 4, 2, 4, 4, 2, &r), 1.0/6.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (4, 4, 2, 2, 2, 2, &r), -0.5/sqrt(5.0), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (4, 4, 4, 2, 2, 2, &r), sqrt(7.0/3.0)/10.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (6, 6, 6, 4, 4, 4, &r), -sqrt(3.0/5.0)/14.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (6, 6, 6, 4, 4, 2, &r), -sqrt(3.0/5.0)/7.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (1, 0, 1, 0, 1, 0, &r), -sqrt(1.0/2.0), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (1, 0, 1, 1, 0, 1, &r), -1.0/2.0, TEST_TOL0, GSL_SUCCESS); /* Test 6j error checking */ TEST_SF(s, gsl_sf_coupling_6j_e, (-2, 2, 4, 2, 2, 2, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_6j_e, (2, -2, 4, 2, 2, 2, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_6j_e, (2, 2, -4, 2, 2, 2, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_6j_e, (2, 2, 4, -2, 2, 2, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_6j_e, (2, 2, 4, 2, -2, 2, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_6j_e, (2, 2, 4, 2, 2, -2, &r), GSL_NAN, GSL_NAN, GSL_EDOM); /* Test 6j triangle conditions */ TEST_SF(s, gsl_sf_coupling_6j_e, (2, 2, 4, 2, 2, 7, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (2, 2, 4, 2, 7, 2, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (2, 2, 4, 7, 2, 2, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (2, 2, 7, 2, 2, 2, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (2, 7, 4, 2, 2, 2, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (7, 2, 4, 2, 2, 2, &r), 0, 0, GSL_SUCCESS); /* Test 6j half-integer/integer coupling conditions */ TEST_SF(s, gsl_sf_coupling_6j_e, (0, 2, 2, 44, 43, 43, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (1, 1, 1, 0, 1, 1, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (1, 1, 1, 1, 0, 1, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_6j_e, (1, 1, 1, 1, 1, 0, &r), 0, 0, GSL_SUCCESS); /* Test 9j */ TEST_SF(s, gsl_sf_coupling_9j_e, (4, 2, 4, 3, 3, 2, 1, 1, 2, &r), -sqrt(1.0/6.0)/10.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_9j_e, (8, 4, 10, 7, 3, 8, 1, 1, 2, &r), sqrt(7.0/3.0)/60.0, TEST_TOL2, GSL_SUCCESS); /* Test 9j error checking */ TEST_SF(s, gsl_sf_coupling_9j_e, (-4, 2, 4, 3, 3, 2, 1, 1, 2, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_9j_e, (4, -2, 4, 3, 3, 2, 1, 1, 2, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_9j_e, (4, 2, -4, 3, 3, 2, 1, 1, 2, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_9j_e, (4, 2, 4, -3, 3, 2, 1, 1, 2, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_9j_e, (4, 2, 4, 3, -3, 2, 1, 1, 2, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_9j_e, (4, 2, 4, 3, 3, -2, 1, 1, 2, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_9j_e, (4, 2, 4, 3, 3, 2, -1, 1, 2, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_9j_e, (4, 2, 4, 3, 3, 2, 1, -1, 2, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_9j_e, (4, 2, 4, 3, 3, 2, 1, 1, -2, &r), GSL_NAN, GSL_NAN, GSL_EDOM); TEST_SF(s, gsl_sf_coupling_9j_e, (10, 2, 4, 3, 3, 2, 1, 1, 2, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_9j_e, (4, 10, 4, 3, 3, 2, 1, 1, 2, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_9j_e, (4, 2, 10, 3, 3, 2, 1, 1, 2, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_9j_e, (4, 2, 4, 10, 3, 2, 1, 1, 2, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_9j_e, (4, 2, 4, 3, 10, 2, 1, 1, 2, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_9j_e, (4, 2, 4, 3, 3, 10, 1, 1, 2, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_9j_e, (4, 2, 4, 3, 3, 2, 10, 1, 2, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_9j_e, (4, 2, 4, 3, 3, 2, 1, 10, 2, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_9j_e, (4, 2, 4, 3, 3, 2, 1, 1, 10, &r), 0, 0, GSL_SUCCESS); /* Test 9j half-integer/integer coupling conditions */ TEST_SF(s, gsl_sf_coupling_9j_e, (1, 1, 1, 1, 1, 1, 0, 0, 0, &r), 0, 0, GSL_SUCCESS); TEST_SF(s, gsl_sf_coupling_9j_e, (1, 1, 0, 1, 1, 0, 1, 1, 0, &r), 0, 0, GSL_SUCCESS); return s; } int test_dawson(void) { gsl_sf_result r; int s = 0; TEST_SF(s, gsl_sf_dawson_e, (1.0e-15, &r), 1.0e-15, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_dawson_e, (0.5, &r), 0.4244363835020222959, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_dawson_e, (2.0, &r), 0.30134038892379196603, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_dawson_e, (1000.0, &r), 0.0005000002500003750009, TEST_TOL0, GSL_SUCCESS); return s; } int test_debye(void) { gsl_sf_result r; int s = 0; TEST_SF(s, gsl_sf_debye_1_e, (0.1, &r), 0.975277750004723276, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_1_e, (1.0, &r), 0.777504634112248239, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_1_e, (10.0, &r), 0.164443465679946027, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_2_e, (0.1, &r), 0.967083287045302664, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_2_e, (1.0, &r), 0.70787847562782924, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_2_e, (10.0, &r), 0.0479714980201218708, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_3_e, (0.1, &r), 0.962999940487211048, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_3_e, (1.0, &r), 0.674415564077814667, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_3_e, (10.0, &r), 0.0192957656903454886, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_4_e, (0.1, &r), 0.960555486124335944, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_4_e, (1.0, &r), 0.654874068886737049, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_4_e, (10.0, &r), 0.00967367556027115896, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_5_e, (0.1, &r), 0.95892849428310568745, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_5_e, (1.0, &r), 0.6421002580217790246, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_5_e, (10.0, &r), 0.005701535852992908538, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_6_e, (0.1, &r), 0.95776777382605465878, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_6_e, (1.0, &r), 0.63311142583495107588, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_debye_6_e, (10.0, &r), 3.7938493294615955279e-3, TEST_TOL0, GSL_SUCCESS); return s; } int test_elementary(void) { gsl_sf_result r; double x = 0.2*DBL_MAX; int s = 0; TEST_SF(s, gsl_sf_multiply_e, (-3.0,2.0, &r), -6.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_multiply_e, (x, 1.0/x, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_multiply_e, (x, 0.2, &r), 0.04*DBL_MAX, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_multiply_e, (x, 4.0, &r), 0.8*DBL_MAX, TEST_TOL1, GSL_SUCCESS); s += ( gsl_sf_multiply_e(DBL_MAX, 1.1, &r) != GSL_EOVRFLW); s += ( gsl_sf_multiply_e(DBL_MIN, DBL_MIN, &r) != GSL_EUNDRFLW); s += ( gsl_sf_multiply_e(DBL_MIN, -DBL_MIN, &r) != GSL_EUNDRFLW); return s; } int test_ellint(void) { gsl_sf_result r; gsl_mode_t mode = GSL_MODE_DEFAULT; int s = 0; TEST_SF(s, gsl_sf_ellint_Kcomp_e, ( 0.99, mode, &r), 3.3566005233611923760, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_Kcomp_e, ( 0.50, mode, &r), 1.6857503548125960429, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_Kcomp_e, (0.010, mode, &r), 1.5708355989121522360, TEST_TOL0, GSL_SUCCESS); /* Bug report from Thies Heidecke */ TEST_SF(s, gsl_sf_ellint_Kcomp_e, ( 0.99999999906867742538, mode, &r), 11.4369284843320018031, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_Ecomp_e, (0.99, mode, &r), 1.0284758090288040010, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_Ecomp_e, (0.50, mode, &r), 1.4674622093394271555, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_Ecomp_e, (0.01, mode, &r), 1.5707570561503852873, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_Pcomp_e, (0.99, 0.1, mode, &r), 3.13792612351836506315593, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_Pcomp_e, (0.50, 0.1, mode, &r), 1.60455249360848890075108, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_Pcomp_e, (0.01, 0.1, mode, &r), 1.49773208536003801277453, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_Dcomp_e, (0.99, mode, &r), 2.375395076351788975665323192, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_Dcomp_e, (0.50, mode, &r), 0.8731525818926755496456335628, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_Dcomp_e, (0.01, mode, &r), 0.7854276176694868932799393751, TEST_TOL0, GSL_SUCCESS); /* Bug report from Will M. Farr bug #31362 */ /* FIXME: we are accepting MAXITER as the return code, but really this should be changed to EINVAL in the routine itself */ TEST_SF(s, gsl_sf_ellint_Kcomp_e, (GSL_NAN, mode, &r), GSL_NAN, GSL_NAN, GSL_EMAXITER); TEST_SF(s, gsl_sf_ellint_Ecomp_e, (GSL_NAN, mode, &r), GSL_NAN, GSL_NAN, GSL_EMAXITER); TEST_SF(s, gsl_sf_ellint_F_e, (M_PI/3.0, 0.99, mode, &r), 1.3065333392738766762, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (M_PI/3.0, 0.50, mode, &r), 1.0895506700518854093, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (M_PI/3.0, 0.01, mode, &r), 1.0472129063770918952, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (M_PI/3.0, 0.99, mode, &r), 0.8704819220377943536, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (M_PI/3.0, 0.50, mode, &r), 1.0075555551444720293, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (M_PI/3.0, 0.01, mode, &r), 1.0471821963889481104, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (M_PI/3.0, 0.99, 0.5, mode, &r), 1.1288726598764099882, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (M_PI/3.0, 0.50, 0.5, mode, &r), 0.9570574331323584890, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (M_PI/3.0, 0.01, 0.5, mode, &r), 0.9228868127118118465, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_RF_e, (5.0e-11, 1.0e-10, 1.0, mode, &r), 12.36441982979439, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_RF_e, (1.0, 2.0, 3.0, mode, &r), 0.7269459354689082, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_RD_e, (5.0e-11, 1.0e-10, 1.0, mode, &r), 34.0932594919337362, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_RD_e, (1.0, 2.0, 3.0, mode, &r), 0.2904602810289906, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_RC_e, (1.0, 2.0, mode, &r), 0.7853981633974482, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_RJ_e, (2.0, 3.0, 4.0, 5.0, mode, &r), 0.1429757966715675, TEST_TOL0, GSL_SUCCESS); /* E, argument phi > pi/2 */ TEST_SF(s, gsl_sf_ellint_E_e, (M_PI/2.0, 0.99, mode, &r), 1.02847580902880400098389, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (M_PI/2.0, 0.50, mode, &r), 1.46746220933942715545980, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (M_PI/2.0, 0.01, mode, &r), 1.57075705615038528733708, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (2*M_PI/3.0, 0.99, mode, &r), 1.18646969601981364833972, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (2*M_PI/3.0, 0.50, mode, &r), 1.92736886353438228163734, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (2*M_PI/3.0, 0.01, mode, &r), 2.09433191591182246425715, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (M_PI, 0.99, mode, &r), 2.05695161805760800196777, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (M_PI, 0.50, mode, &r), 2.93492441867885431091959, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (M_PI, 0.01, mode, &r), 3.14151411230077057467416, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (4*M_PI/3, 0.99, mode, &r), 2.92743354009540235559582, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (4*M_PI/3, 0.50, mode, &r), 3.94247997382332634020184, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (4*M_PI/3, 0.01, mode, &r), 4.18869630868971868509117, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (3*M_PI/2.0, 0.99, mode, &r), 3.08542742708641200295166, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (3*M_PI/2.0, 0.50, mode, &r), 4.40238662801828146637939, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (3*M_PI/2.0, 0.01, mode, &r), 4.71227116845115586201123, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (5*M_PI/3, 0.99, mode, &r), 3.24342131407742165030750, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (5*M_PI/3, 0.50, mode, &r), 4.86229328221323659255693, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (5*M_PI/3, 0.01, mode, &r), 5.23584602821259303893130, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (2*M_PI, 0.99, mode, &r), 4.11390323611521600393555, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (2*M_PI, 0.50, mode, &r), 5.86984883735770862183918, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (2*M_PI, 0.01, mode, &r), 6.28302822460154114934831, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (7*M_PI/3.0, 0.99, mode, &r), 4.98438515815301035756360, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (7*M_PI/3.0, 0.50, mode, &r), 6.87740439250218065112143, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (7*M_PI/3.0, 0.01, mode, &r), 7.33021042099048925976532, TEST_TOL0, GSL_SUCCESS); /* Test some negative arguments, phi < 0 */ TEST_SF(s, gsl_sf_ellint_E_e, (-M_PI/2.0, 0.99, mode, &r), -1.02847580902880400098389, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-M_PI/2.0, 0.50, mode, &r), -1.46746220933942715545980, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-M_PI/2.0, 0.01, mode, &r), -1.57075705615038528733708, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-2*M_PI/3.0, 0.99, mode, &r), -1.18646969601981364833972, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-2*M_PI/3.0, 0.50, mode, &r), -1.92736886353438228163734, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-2*M_PI/3.0, 0.01, mode, &r), -2.09433191591182246425715, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-M_PI, 0.99, mode, &r), -2.05695161805760800196777, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-M_PI, 0.50, mode, &r), -2.93492441867885431091959, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-M_PI, 0.01, mode, &r), -3.14151411230077057467416, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-4*M_PI/3, 0.99, mode, &r), -2.92743354009540235559582, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-4*M_PI/3, 0.50, mode, &r), -3.94247997382332634020184, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-4*M_PI/3, 0.01, mode, &r), -4.18869630868971868509117, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-3*M_PI/2.0, 0.99, mode, &r), -3.08542742708641200295166, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-3*M_PI/2.0, 0.50, mode, &r), -4.40238662801828146637939, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-3*M_PI/2.0, 0.01, mode, &r), -4.71227116845115586201123, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-5*M_PI/3, 0.99, mode, &r), -3.24342131407742165030750, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-5*M_PI/3, 0.50, mode, &r), -4.86229328221323659255693, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-5*M_PI/3, 0.01, mode, &r), -5.23584602821259303893130, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-2*M_PI, 0.99, mode, &r), -4.11390323611521600393555, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-2*M_PI, 0.50, mode, &r), -5.86984883735770862183918, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-2*M_PI, 0.01, mode, &r), -6.28302822460154114934831, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-7*M_PI/3.0, 0.99, mode, &r), -4.98438515815301035756360, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-7*M_PI/3.0, 0.50, mode, &r), -6.87740439250218065112143, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_E_e, (-7*M_PI/3.0, 0.01, mode, &r), -7.33021042099048925976532, TEST_TOL0, GSL_SUCCESS); /* F, argument phi > pi/2 */ TEST_SF(s, gsl_sf_ellint_F_e, (M_PI/2.0, 0.99, mode, &r), 3.35660052336119237603347, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (M_PI/2.0, 0.50, mode, &r), 1.68575035481259604287120, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (M_PI/2.0, 0.01, mode, &r), 1.57083559891215223602641, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (2*M_PI/3.0, 0.99, mode, &r), 5.40666770744850807588478, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (2*M_PI/3.0, 0.50, mode, &r), 2.28195003957330667648585, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (2*M_PI/3.0, 0.01, mode, &r), 2.09445829144721257687207, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (M_PI, 0.99, mode, &r), 6.71320104672238475206694, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (M_PI, 0.50, mode, &r), 3.37150070962519208574241, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (M_PI, 0.01, mode, &r), 3.14167119782430447205281, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (4*M_PI/3, 0.99, mode, &r), 8.01973438599626142824910, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (4*M_PI/3, 0.50, mode, &r), 4.46105137967707749499897, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (4*M_PI/3, 0.01, mode, &r), 4.18888410420139636723356, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (3*M_PI/2.0, 0.99, mode, &r), 10.0698015700835771281004, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (3*M_PI/2.0, 0.50, mode, &r), 5.05725106443778812861361, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (3*M_PI/2.0, 0.01, mode, &r), 4.71250679673645670807922, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (5*M_PI/3, 0.99, mode, &r), 12.1198687541708928279517, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (5*M_PI/3, 0.50, mode, &r), 5.65345074919849876222825, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (5*M_PI/3, 0.01, mode, &r), 5.23612948927151704892488, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (2*M_PI, 0.99, mode, &r), 13.4264020934447695041339, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (2*M_PI, 0.50, mode, &r), 6.74300141925038417148481, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (2*M_PI, 0.01, mode, &r), 6.28334239564860894410562, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (7*M_PI/3.0, 0.99, mode, &r), 14.7329354327186461803160, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (7*M_PI/3.0, 0.50, mode, &r), 7.83255208930226958074138, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (7*M_PI/3.0, 0.01, mode, &r), 7.33055530202570083928637, TEST_TOL0, GSL_SUCCESS); /* F, negative argument phi < 0 */ TEST_SF(s, gsl_sf_ellint_F_e, (-M_PI/2.0, 0.99, mode, &r), -3.35660052336119237603347, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-M_PI/2.0, 0.50, mode, &r), -1.68575035481259604287120, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-M_PI/2.0, 0.01, mode, &r), -1.57083559891215223602641, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-2*M_PI/3.0, 0.99, mode, &r), -5.40666770744850807588478, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-2*M_PI/3.0, 0.50, mode, &r), -2.28195003957330667648585, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-2*M_PI/3.0, 0.01, mode, &r), -2.09445829144721257687207, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-M_PI, 0.99, mode, &r), -6.71320104672238475206694, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-M_PI, 0.50, mode, &r), -3.37150070962519208574241, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-M_PI, 0.01, mode, &r), -3.14167119782430447205281, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-4*M_PI/3, 0.99, mode, &r), -8.01973438599626142824910, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-4*M_PI/3, 0.50, mode, &r), -4.46105137967707749499897, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-4*M_PI/3, 0.01, mode, &r), -4.18888410420139636723356, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-3*M_PI/2.0, 0.99, mode, &r), -10.0698015700835771281004, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-3*M_PI/2.0, 0.50, mode, &r), -5.05725106443778812861361, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-3*M_PI/2.0, 0.01, mode, &r), -4.71250679673645670807922, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-5*M_PI/3, 0.99, mode, &r), -12.1198687541708928279517, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-5*M_PI/3, 0.50, mode, &r), -5.65345074919849876222825, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-5*M_PI/3, 0.01, mode, &r), -5.23612948927151704892488, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-2*M_PI, 0.99, mode, &r), -13.4264020934447695041339, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-2*M_PI, 0.50, mode, &r), -6.74300141925038417148481, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-2*M_PI, 0.01, mode, &r), -6.28334239564860894410562, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-7*M_PI/3.0, 0.99, mode, &r), -14.7329354327186461803160, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-7*M_PI/3.0, 0.50, mode, &r), -7.83255208930226958074138, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_F_e, (-7*M_PI/3.0, 0.01, mode, &r), -7.33055530202570083928637, TEST_TOL0, GSL_SUCCESS); /* P, argument phi > pi/2 */ TEST_SF(s, gsl_sf_ellint_P_e, (M_PI/2.0, 0.99, -0.1, mode, &r), 3.61678162163246646783050, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (M_PI/2.0, 0.50, -0.1, mode, &r), 1.78030349465454812629168, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (M_PI/2.0, 0.01, -0.1, mode, &r), 1.65580719756898353270922, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (2*M_PI/3.0, 0.99, -0.1, mode, &r), 5.88008918207571119911983, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (2*M_PI/3.0, 0.50, -0.1, mode, &r), 2.43655207300356008717867, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (2*M_PI/3.0, 0.01, -0.1, mode, &r), 2.23211110528200554950903, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (M_PI, 0.99, -0.1, mode, &r), 7.23356324326493293566099, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (M_PI, 0.50, -0.1, mode, &r), 3.56060698930909625258336, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (M_PI, 0.01, -0.1, mode, &r), 3.31161439513796706541844, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (4*M_PI/3, 0.99, -0.1, mode, &r), 8.58703730445415467220216, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (4*M_PI/3, 0.50, -0.1, mode, &r), 4.68466190561463241798805, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (4*M_PI/3, 0.01, -0.1, mode, &r), 4.39111768499392858132786, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (3*M_PI/2.0, 0.99, -0.1, mode, &r), 10.8503448648973994034915, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (3*M_PI/2.0, 0.50, -0.1, mode, &r), 5.34091048396364437887504, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (3*M_PI/2.0, 0.01, -0.1, mode, &r), 4.96742159270695059812767, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (5*M_PI/3, 0.99, -0.1, mode, &r), 13.1136524253406441347808, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (5*M_PI/3, 0.50, -0.1, mode, &r), 5.99715906231265633976204, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (5*M_PI/3, 0.01, -0.1, mode, &r), 5.54372550041997261492747, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (2*M_PI, 0.99, -0.1, mode, &r), 14.4671264865298658713220, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (2*M_PI, 0.50, -0.1, mode, &r), 7.12121397861819250516672, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (2*M_PI, 0.01, -0.1, mode, &r), 6.62322879027593413083689, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (7*M_PI/3.0, 0.99, -0.1, mode, &r), 15.8206005477190876078631, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (7*M_PI/3.0, 0.50, -0.1, mode, &r), 8.24526889492372867057141, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (7*M_PI/3.0, 0.01, -0.1, mode, &r), 7.70273208013189564674630, TEST_TOL0, GSL_SUCCESS); /* P, negative argument phi < 0 */ TEST_SF(s, gsl_sf_ellint_P_e, (-M_PI/2.0, 0.99, -0.1, mode, &r), -3.61678162163246646783050, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-M_PI/2.0, 0.50, -0.1, mode, &r), -1.78030349465454812629168, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-M_PI/2.0, 0.01, -0.1, mode, &r), -1.65580719756898353270922, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-2*M_PI/3.0, 0.99, -0.1, mode, &r), -5.88008918207571119911983, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-2*M_PI/3.0, 0.50, -0.1, mode, &r), -2.43655207300356008717867, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-2*M_PI/3.0, 0.01, -0.1, mode, &r), -2.23211110528200554950903, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-M_PI, 0.99, -0.1, mode, &r), -7.23356324326493293566099, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-M_PI, 0.50, -0.1, mode, &r), -3.56060698930909625258336, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-M_PI, 0.01, -0.1, mode, &r), -3.31161439513796706541844, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-4*M_PI/3, 0.99, -0.1, mode, &r), -8.58703730445415467220216, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-4*M_PI/3, 0.50, -0.1, mode, &r), -4.68466190561463241798805, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-4*M_PI/3, 0.01, -0.1, mode, &r), -4.39111768499392858132786, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-3*M_PI/2.0, 0.99, -0.1, mode, &r), -10.8503448648973994034915, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-3*M_PI/2.0, 0.50, -0.1, mode, &r), -5.34091048396364437887504, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-3*M_PI/2.0, 0.01, -0.1, mode, &r), -4.96742159270695059812767, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-5*M_PI/3, 0.99, -0.1, mode, &r), -13.1136524253406441347808, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-5*M_PI/3, 0.50, -0.1, mode, &r), -5.99715906231265633976204, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-5*M_PI/3, 0.01, -0.1, mode, &r), -5.54372550041997261492747, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-2*M_PI, 0.99, -0.1, mode, &r), -14.4671264865298658713220, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-2*M_PI, 0.50, -0.1, mode, &r), -7.12121397861819250516672, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-2*M_PI, 0.01, -0.1, mode, &r), -6.62322879027593413083689, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-7*M_PI/3.0, 0.99, -0.1, mode, &r), -15.8206005477190876078631, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-7*M_PI/3.0, 0.50, -0.1, mode, &r), -8.24526889492372867057141, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_P_e, (-7*M_PI/3.0, 0.01, -0.1, mode, &r), -7.70273208013189564674630, TEST_TOL0, GSL_SUCCESS); /* D, argument phi > pi/2 */ TEST_SF(s, gsl_sf_ellint_D_e, (M_PI/2.0, 0.99, mode, &r), 2.375395076351788975665323192, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (M_PI/2.0, 0.50, mode, &r), 0.8731525818926755496456335628, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (M_PI/2.0, 0.01, mode, &r), 0.7854276176694868932799393751, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI/3.0, 0.99, mode, &r), 4.305885125424644860264320635, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI/3.0, 0.50, mode, &r), 1.418324704155697579394036402, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI/3.0, 0.01, mode, &r), 1.263755353901126149206022061, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (M_PI, 0.99, mode, &r), 4.750790152703577951330646444, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (M_PI, 0.50, mode, &r), 1.746305163785351099291267125, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (M_PI, 0.01, mode, &r), 1.570855235338973786559878750, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (4*M_PI/3, 0.99, mode, &r), 5.195695179982511042396972113, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (4*M_PI/3, 0.50, mode, &r), 2.074285623415004619188497818, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (4*M_PI/3, 0.01, mode, &r), 1.877955116776821423913735408, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (3*M_PI/2.0, 0.99, mode, &r), 7.126185229055366926995969476, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (3*M_PI/2.0, 0.50, mode, &r), 2.619457745678026648936900687, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (3*M_PI/2.0, 0.01, mode, &r), 2.356282853008460679839818125, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (5*M_PI/3, 0.99, mode, &r), 9.056675278128222811594967044, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (5*M_PI/3, 0.50, mode, &r), 3.164629867941048678685303509, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (5*M_PI/3, 0.01, mode, &r), 2.834610589240099935765900794, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI, 0.99, mode, &r), 9.501580305407155902661292832, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI, 0.50, mode, &r), 3.492610327570702198582534249, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (2*M_PI, 0.01, mode, &r), 3.141710470677947573119757500, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (7*M_PI/3.0, 0.99, mode, &r), 9.946485332686088993727618315, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (7*M_PI/3.0, 0.50, mode, &r), 3.820590787200355718479764901, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (7*M_PI/3.0, 0.01, mode, &r), 3.448810352115795210473614120, TEST_TOL0, GSL_SUCCESS); /* P, negative argument phi < 0 */ TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI/2.0, 0.99, mode, &r), -2.375395076351788975665323192, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI/2.0, 0.50, mode, &r), -0.8731525818926755496456335628, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI/2.0, 0.01, mode, &r), -0.7854276176694868932799393751, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI/3.0, 0.99, mode, &r), -4.305885125424644860264320635, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI/3.0, 0.50, mode, &r), -1.418324704155697579394036402, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI/3.0, 0.01, mode, &r), -1.263755353901126149206022061, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI, 0.99, mode, &r), -4.750790152703577951330646444, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI, 0.50, mode, &r), -1.746305163785351099291267125, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-M_PI, 0.01, mode, &r), -1.570855235338973786559878750, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-4*M_PI/3, 0.99, mode, &r), -5.195695179982511042396972113, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-4*M_PI/3, 0.50, mode, &r), -2.074285623415004619188497818, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-4*M_PI/3, 0.01, mode, &r), -1.877955116776821423913735408, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-3*M_PI/2.0, 0.99, mode, &r), -7.126185229055366926995969476, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-3*M_PI/2.0, 0.50, mode, &r), -2.619457745678026648936900687, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-3*M_PI/2.0, 0.01, mode, &r), -2.356282853008460679839818125, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-5*M_PI/3, 0.99, mode, &r), -9.056675278128222811594967044, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-5*M_PI/3, 0.50, mode, &r), -3.164629867941048678685303509, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-5*M_PI/3, 0.01, mode, &r), -2.834610589240099935765900794, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI, 0.99, mode, &r), -9.501580305407155902661292832, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI, 0.50, mode, &r), -3.492610327570702198582534249, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-2*M_PI, 0.01, mode, &r), -3.141710470677947573119757500, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-7*M_PI/3.0, 0.99, mode, &r), -9.946485332686088993727618315, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-7*M_PI/3.0, 0.50, mode, &r), -3.820590787200355718479764901, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_ellint_D_e, (-7*M_PI/3.0, 0.01, mode, &r), -3.448810352115795210473614120, TEST_TOL0, GSL_SUCCESS); return s; } int test_erf(void) { gsl_sf_result r; int s = 0; TEST_SF(s, gsl_sf_erfc_e, (-10.0, &r), 2.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_erfc_e, (-5.0000002, &r), 1.9999999999984625433, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_erfc_e, (-5.0, &r), 1.9999999999984625402, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_erfc_e, (-1.0, &r), 1.8427007929497148693, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_erfc_e, (-0.5, &r), 1.5204998778130465377, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_erfc_e, (1.0, &r), 0.15729920705028513066, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_erfc_e, (3.0, &r), 0.000022090496998585441373, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_erfc_e, (7.0, &r), 4.183825607779414399e-23, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_erfc_e, (10.0, &r), 2.0884875837625447570e-45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_erfc_e, (-1.0, &r), log(1.842700792949714869), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_erfc_e, (-0.1, &r), 0.106576400586522485015, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_erfc_e, (-1e-10, &r), 1.1283791670318505967e-10, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_erfc_e, (0.0, &r), log(1.0), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_erfc_e, (1e-10, &r), -1.128379167159174551e-10, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_erfc_e, (0.001, &r), -0.0011290158896213548027, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_erfc_e, (0.1, &r), -0.119304973737395598329, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_erfc_e, (1.0, &r), log(0.15729920705028513066), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_erfc_e, (10.0, &r), log(2.0884875837625447570e-45), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_erf_e, (-10.0, &r), -1.0000000000000000000, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_erf_e, (0.5, &r), 0.5204998778130465377, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_erf_e, (1.0, &r), 0.8427007929497148693, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_erf_e, (10.0, &r), 1.0000000000000000000, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_erf_Z_e, (1.0, &r), 0.24197072451914334980, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_erf_Q_e, (10.0, &r), 7.619853024160526066e-24, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hazard_e, (-20.0, &r), 5.5209483621597631896e-88, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hazard_e, (-10.0, &r), 7.6945986267064193463e-23, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hazard_e, (-1.0, &r), 0.28759997093917836123, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hazard_e, ( 0.0, &r), 0.79788456080286535588, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hazard_e, ( 1.0, &r), 1.5251352761609812091, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hazard_e, (10.0, &r), 10.098093233962511963, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hazard_e, (20.0, &r), 20.049753068527850542, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hazard_e, (30.0, &r), 30.033259667433677037, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hazard_e, (50.0, &r), 50.019984031905639809, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hazard_e, (80.0, &r), 80.012496096798234468, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hazard_e, (150.0, &r), 150.00666607420571802, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hazard_e, (300.0, &r), 300.00333325926337415, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hazard_e, (900.0, &r), 900.00111110836764382, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hazard_e, (1001.0, &r), 1001.0009989990049990, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hazard_e, (2000.0, &r), 2000.0004999997500003, TEST_TOL0, GSL_SUCCESS); return s; } int test_exp(void) { gsl_sf_result r; gsl_sf_result_e10 re; double x; int sa; int s = 0; TEST_SF(s, gsl_sf_exp_e, (-10.0, &r), exp(-10.0), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exp_e, ( 10.0, &r), exp( 10.0), TEST_TOL0, GSL_SUCCESS); sa = 0; sa += gsl_sf_exp_e10_e(1.0, &re); sa += ( test_sf_frac_diff(re.val, M_E ) > TEST_TOL0 ); sa += ( re.err > TEST_TOL1 ); sa += ( re.e10 != 0 ); gsl_test(sa, " gsl_sf_exp_e10_e(1.0, &re)"); sa = 0; sa += gsl_sf_exp_e10_e(2000.0, &re); sa += ( test_sf_frac_diff(re.val, 3.88118019428363725 ) > TEST_TOL3 ); sa += ( re.err > TEST_TOL5 ); sa += ( re.e10 != 868 ); gsl_test(sa, " gsl_sf_exp_e10_e(2000.0, &re)"); TEST_SF(s, gsl_sf_exp_err_e, (-10.0, TEST_TOL1, &r), exp(-10.0), TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_exp_err_e, ( 10.0, TEST_TOL1, &r), exp( 10.0), TEST_TOL1, GSL_SUCCESS); sa = 0; sa += gsl_sf_exp_err_e10_e(1.0, TEST_SQRT_TOL0, &re); sa += ( test_sf_frac_diff(re.val, M_E ) > TEST_TOL1 ); sa += ( re.err > 32.0 * TEST_SQRT_TOL0 ); sa += ( re.e10 != 0 ); gsl_test(sa, " gsl_sf_exp_err_e10_e(1.0, TEST_SQRT_TOL0, &re)"); sa = 0; sa += gsl_sf_exp_err_e10_e(2000.0, 1.0e-10, &re); sa += ( test_sf_frac_diff(re.val, 3.88118019428363725 ) > TEST_TOL3 ); sa += ( re.err > 1.0e-07 ); sa += ( re.e10 != 868 ); gsl_test(sa, " gsl_sf_exp_err_e10_e(2000.0, 1.0e-10, &re)"); x = 0.8*GSL_LOG_DBL_MAX; TEST_SF(s, gsl_sf_exp_mult_e, (-10.0, 1.0e-06, &r), 1.0e-06*exp(-10.0), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exp_mult_e, (-10.0, 2.0, &r), 2.0*exp(-10.0), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exp_mult_e, (-10.0, -2.0, &r), -2.0*exp(-10.0), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exp_mult_e, ( 10.0, 1.0e-06, &r), 1.0e-06*exp( 10.0), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exp_mult_e, ( 10.0, -2.0, &r), -2.0*exp( 10.0), TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exp_mult_e, (x, 1.00001, &r), 1.00001*exp(x), TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_exp_mult_e, (x, 1.000001, &r), 1.000001*exp(x), TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_exp_mult_e, (x, 1.000000001, &r), 1.000000001*exp(x), TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_exp_mult_e, (x, 100.0, &r), 100.0*exp(x), TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_exp_mult_e, (x, 1.0e+20, &r), 1.0e+20*exp(x), TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_exp_mult_e, (x, exp(-x)*exp(M_LN2), &r), 2.0, TEST_TOL4, GSL_SUCCESS ); TEST_SF(s, gsl_sf_exp_mult_err_e, (-10.0, TEST_SQRT_TOL0, 2.0, TEST_SQRT_TOL0, &r), 2.0*exp(-10.0), TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exp_mult_err_e, (x, TEST_SQRT_TOL0*x, exp(-x)*exp(M_LN2), TEST_SQRT_TOL0*exp(-x)*exp(M_LN2), &r), 2.0, TEST_SQRT_TOL0, GSL_SUCCESS ); sa = 0; sa += gsl_sf_exp_mult_e10_e(1.0, 1.0, &re); sa += ( test_sf_frac_diff(re.val, M_E ) > TEST_TOL0 ); sa += ( re.err > TEST_TOL2 ); sa += ( re.e10 != 0 ); gsl_test(sa, "gsl_sf_exp_mult_e10_e(1.0, 1.0, &re)"); TEST_SF_E10(s, gsl_sf_exp_mult_e10_e, (1.0, 1.0, &re), M_E, 0, TEST_TOL0, GSL_SUCCESS); sa = 0; sa += gsl_sf_exp_mult_e10_e(1000.0, 1.0e+200, &re); sa += ( test_sf_frac_diff(re.val, 1.970071114017046993888879352) > TEST_TOL3 ); sa += ( re.err > 1.0e-11 ); sa += ( re.e10 != 634 ); gsl_test(sa, "gsl_sf_exp_mult_e10_e(1000.0, 1.0e+200, &re)"); TEST_SF_E10(s, gsl_sf_exp_mult_e10_e, (1000.0, 1.0e+200, &re), 1.970071114017046993888879352, 634, TEST_TOL3, GSL_SUCCESS); sa = 0; sa += gsl_sf_exp_mult_err_e10_e(1.0, TEST_TOL0, 1.0, TEST_TOL0, &re); sa += ( test_sf_frac_diff(re.val, M_E ) > TEST_TOL0 ); sa += ( re.err > TEST_TOL2 ); sa += ( re.e10 != 0 ); gsl_test(sa, "gsl_sf_exp_mult_err_e10_e(1.0, TEST_TOL0, 1.0, TEST_TOL0, &re)"); TEST_SF_E10(s, gsl_sf_exp_mult_err_e10_e, (1.0, TEST_TOL0, 1.0, TEST_TOL0, &re), M_E, 0, TEST_TOL0, GSL_SUCCESS); sa = 0; sa += gsl_sf_exp_mult_err_e10_e(1000.0, 1.0e-12, 1.0e+200, 1.0e+190, &re); sa += ( test_sf_frac_diff(re.val, 1.9700711140165661 ) > TEST_TOL3 ); sa += ( re.err > 1.0e-09 ); sa += ( re.e10 != 634 ); gsl_test(sa, "gsl_sf_exp_mult_err_e10_e(1.0e-12, 1.0e+200, &re)"); TEST_SF_E10(s, gsl_sf_exp_mult_err_e10_e, (1000.0, 1.0e-12, 1.0e+200, 1.0e+190, &re), 1.9700711140165661,634, TEST_TOL3, GSL_SUCCESS); /* Test cases from Szymon Jaroszewicz */ TEST_SF_E10(s, gsl_sf_exp_mult_e10_e, (10000.0, 1.0, &re), 8.806818225662921587261496007, 4342, TEST_TOL5, GSL_SUCCESS); TEST_SF_E10(s, gsl_sf_exp_mult_e10_e, (100.0, 1.0, &re), 2.688117141816135448412625551e43, 0, TEST_TOL2, GSL_SUCCESS); TEST_SF_E10(s, gsl_sf_exp_e10_e, (100.0, &re), 2.688117141816135448412625551e43, 0, TEST_TOL2, GSL_SUCCESS); TEST_SF_E10(s, gsl_sf_exp_e10_e, (1000.0, &re), 1.970071114017046993888879352, 434, TEST_TOL3, GSL_SUCCESS); TEST_SF_E10(s, gsl_sf_exp_e10_e, (-100.0, &re), 3.720075976020835962959695803e-44, 0, TEST_TOL2, GSL_SUCCESS); TEST_SF_E10(s, gsl_sf_exp_e10_e, (-1000.0, &re), 5.075958897549456765291809479, -435, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_expm1_e, (-10.0, &r), exp(-10.0)-1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expm1_e, (-0.001, &r), -0.00099950016662500845, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expm1_e, (-1.0e-8, &r), -1.0e-08 + 0.5e-16, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expm1_e, ( 1.0e-8, &r), 1.0e-08 + 0.5e-16, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expm1_e, ( 0.001, &r), 0.0010005001667083417, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expm1_e, ( 10.0, &r), exp(10.0)-1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_e, (-10.0, &r), 0.0999954600070237515, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_e, (-0.001, &r), 0.9995001666250084, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_e, (-1.0e-8, &r), 1.0 - 0.5e-08, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_e, ( 1.0e-8, &r), 1.0 + 0.5e-08, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_e, ( 0.001, &r), 1.0005001667083417, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_e, ( 10.0, &r), 2202.5465794806716517, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_2_e, (-10.0, &r), 0.18000090799859524970, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_2_e, (-0.001, &r), 0.9996667499833361107, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_2_e, (-1.0e-8, &r), 0.9999999966666666750, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_2_e, ( 1.0e-8, &r), 1.0000000033333333417, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_2_e, ( 0.001, &r), 1.0003334166833361115, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_2_e, ( 10.0, &r), 440.3093158961343303, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (3, -1000.0, &r), 0.00299400600000000000, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (3, -100.0, &r), 0.02940600000000000000, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (3, -10.0, &r), 0.24599972760042142509, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (3, -3.0, &r), 0.5444917625849191238, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (3, -0.001, &r), 0.9997500499916678570, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (3, -1.0e-8, &r), 0.9999999975000000050, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (3, 1.0e-8, &r), 1.0000000025000000050, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (3, 0.001, &r), 1.0002500500083345240, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (3, 3.0, &r), 2.5745637607083706091, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (3, 3.1, &r), 2.6772417068460206247, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (3, 10.0, &r), 131.79279476884029910, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (3, 100.0, &r), 1.6128702850896812690e+38, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (50, -1000.0, &r), 0.04766231609253975959, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (50, -100.0, &r), 0.3348247572345889317, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (50, -10.0, &r), 0.8356287051853286482, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (50, -3.0, &r), 0.9443881609152163615, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (50, -1.0, &r), 0.980762245565660617, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (50, -1.0e-8, &r), 1.0 -1.0e-8/51.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (50, 1.0e-8, &r), 1.0 +1.0e-8/51.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (50, 1.0, &r), 1.01999216583666790, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (50, 3.0, &r), 1.0624205757460368307, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (50, 48.0, &r), 7.499573876877194416, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (50, 50.1, &r), 9.311803306230992272, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (50, 100.0, &r), 8.175664432485807634e+07, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (50, 500.0, &r), 4.806352370663185330e+146, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (500, -1000.0, &r), 0.3334815803127619256, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (500, -100.0, &r), 0.8335646217536183909, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (500, -10.0, &r), 0.9804297803131823066, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (500, -3.0, &r), 0.9940475488850672997, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (500, -1.0, &r), 0.9980079602383488808, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (500, -1.0e-8, &r), 1.0 -1.0e-8/501.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (500, 1.0e-8, &r), 1.0 +1.0e-8/501.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (500, 1.0, &r), 1.0019999920160634252, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (500, 3.0, &r), 1.0060240236632444934, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (500, 48.0, &r), 1.1059355517981272174, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (500, 100.0, &r), 1.2492221464878287204, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (500, 500.0, &r), 28.363019877927630858, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (500, 1000.0, &r), 2.4037563160335300322e+68, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (500, 1600.0, &r), 7.899293535320607403e+226, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_e, (1263131.0, 1261282.3637, &r), 545.0113107238425900305428360, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_exprel_n_CF_e, (6.315655e+05, 6.302583168053568806e+05, &r), 385.425369029433473098652465720, TEST_TOL4, GSL_SUCCESS); return s; } int test_expint(void) { gsl_sf_result r; int s = 0; TEST_SF(s, gsl_sf_expint_E1_e, (-1.0, &r), -1.8951178163559367555, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_e, (1.0e-10, &r), 22.448635265138923980, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_e, (1.0e-05, &r), 10.935719800043695615, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_e, (0.1, &r), 1.82292395841939066610, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_e, (1.0, &r), 0.21938393439552027368, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_e, (10.0, &r), 4.156968929685324277e-06, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_e, (50.0, &r), 3.783264029550459019e-24, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_e, (300.0, &r), 1.710384276804510115e-133, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_e, (-1.0, &r), 0.8231640121031084799, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_e, (0.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_e, (1.0/4294967296.0, &r), 0.9999999947372139168, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_e, (1.0/65536.0, &r), 0.9998243233207178845, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_e, (0.1, &r), 0.7225450221940205066, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_e, (1.0, &r), 0.14849550677592204792, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_e, (10.0, &r), 3.830240465631608762e-06, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_e, (50.0, &r), 3.711783318868827367e-24, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_e, (300.0, &r), 1.7047391998483433998e-133, TEST_TOL2, GSL_SUCCESS); /* Tests for E_n(x) */ TEST_SF(s, gsl_sf_expint_En_e, (1,-1.0, &r), -1.8951178163559367555, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (1,1.0e-10, &r), 22.448635265138923980, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (1,1.0e-05, &r), 10.935719800043695615, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (1,0.1, &r), 1.82292395841939066610, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (1,1.0, &r), 0.21938393439552027368, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (1,10.0, &r), 4.156968929685324277e-06, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (1,50.0, &r), 3.783264029550459019e-24, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (1,300.0, &r), 1.710384276804510115e-133, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (2,-1.0, &r), 0.8231640121031084799, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (2,0.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (2,1.0/4294967296.0, &r), 0.9999999947372139168, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (2,1.0/65536.0, &r), 0.9998243233207178845, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (2,0.1, &r), 0.7225450221940205066, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (2,1.0, &r), 0.14849550677592204792, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (2,10.0, &r), 3.830240465631608762e-06, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (2,50.0, &r), 3.711783318868827367e-24, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (2,300.0, &r), 1.7047391998483433998e-133, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (3,0.0, &r), 0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (3,1.0/4294967296.0, &r), 0.499999999767169356972, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (3,1.0/65536.0, &r), 0.4999847426094515610, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (3,0.1, &r), 0.4162914579082787612543, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (3,1.0, &r), 0.10969196719776013683858, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (3,10.0, &r),0.000003548762553084381959981, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (3,50.0, &r), 3.6429094264752049812e-24, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (3,300.0, &r),1.699131143349179084e-133, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (10,0.0, &r), 0.111111111111111111, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (10,1.0/4294967296.0, &r), 0.111111111082007280658, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (10,1.0/65536.0, &r), 0.11110920377910896018606, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (10,0.1, &r), 0.099298432000896813567905, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (10,1.0, &r), 0.036393994031416401634164534, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (10,10.0, &r), 0.00000232530265702821081778968, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (10,50.0, &r), 3.223296586749110919572e-24, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_e, (10,300.0, &r), 1.6608815083360041367294736e-133, TEST_TOL2, GSL_SUCCESS); /* Tests for Ei(x) */ TEST_SF(s, gsl_sf_expint_Ei_e, (-1.0, &r), -0.21938393439552027368, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_Ei_e, (1.0/4294967296.0, &r), -21.603494112783886397, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_Ei_e, (1.0, &r), 1.8951178163559367555, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_scaled_e, (-10000.0, &r), -0.00010001000200060024012, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_scaled_e, (-1000.0, &r), -0.0010010020060241207251, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_scaled_e, (-10.0, &r), -0.11314702047341077803, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_scaled_e, (-1.0, &r), -0.69717488323506606877, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_scaled_e, (1.0e-10, &r), 22.448635267383787506, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_scaled_e, (1.0e-05, &r), 10.935829157788483865, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_scaled_e, (0.1, &r), 2.0146425447084516791, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_scaled_e, (1.0, &r), 0.59634736232319407434, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_scaled_e, (10.0, &r), 0.091563333939788081876, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_scaled_e, (50.0, &r), 0.019615109930114870365, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_scaled_e, (300.0, &r), 0.0033222955652707070644, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_scaled_e, (1000.0, &r), 0.00099900199402388071500, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E1_scaled_e, (10000.0, &r), 0.000099990001999400239880, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_scaled_e, (-10000.0, &r), -0.00010002000600240120072, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_scaled_e, (-1000.0, &r), -0.0010020060241207250807, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_scaled_e, (-10.0, &r), -0.13147020473410778034, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_scaled_e, (-1.0, &r), 0.30282511676493393123, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_scaled_e, (0.0, &r), 1.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_scaled_e, (1.0/4294967296.0, &r), 0.99999999497004455927, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_scaled_e, (1.0/65536.0, &r), 0.99983957954556245453, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_scaled_e, (0.1, &r), 0.79853574552915483209, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_scaled_e, (1.0, &r), 0.40365263767680592566, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_scaled_e, (10.0, &r), 0.084366660602119181239, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_scaled_e, (50.0, &r), 0.019244503494256481735, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_scaled_e, (300.0, &r), 0.0033113304187878806691, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_scaled_e, (1000.0, &r), 0.00099800597611928500004, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_E2_scaled_e, (10000.0, &r), 0.000099980005997601199281, TEST_TOL0, GSL_SUCCESS); /* Tests for E_n(x) */ TEST_SF(s, gsl_sf_expint_En_scaled_e, (1,-10000.0, &r), -0.00010001000200060024012, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (1,-1000.0, &r), -0.0010010020060241207251, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (1,-10.0, &r), -0.11314702047341077803, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (1,-1.0, &r), -0.69717488323506606877, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (1,1.0e-10, &r), 22.448635267383787506, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (1,1.0e-05, &r), 10.935829157788483865, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (1,0.1, &r), 2.0146425447084516791, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (1,1.0, &r), 0.59634736232319407434, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (1,10.0, &r), 0.091563333939788081876, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (1,50.0, &r), 0.019615109930114870365, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (1,300.0, &r), 0.0033222955652707070644, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (1,1000.0, &r), 0.00099900199402388071500, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (1,10000.0, &r), 0.000099990001999400239880, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (2,-10000.0, &r), -0.00010002000600240120072, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (2,-1000.0, &r), -0.0010020060241207250807, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (2,-10.0, &r), -0.13147020473410778034, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (2,-1.0, &r), 0.30282511676493393123, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (2,0.0, &r), 1.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (2,1.0/4294967296.0, &r), 0.99999999497004455927, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (2,1.0/65536.0, &r), 0.99983957954556245453, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (2,0.1, &r), 0.79853574552915483209, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (2,1.0, &r), 0.40365263767680592566, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (2,10.0, &r), 0.084366660602119181239, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (2,50.0, &r), 0.019244503494256481735, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (2,300.0, &r), 0.0033113304187878806691, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (2,1000.0, &r), 0.00099800597611928500004, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (2,10000.0, &r), 0.000099980005997601199281, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (3,0.0, &r), 0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (3,1.0/4294967296.0, &r), 0.4999999998835846787586, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (3,1.0/65536.0, &r), 0.4999923718293796877864492, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (3,0.1, &r), 0.4600732127235422583955, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (3,1.0, &r), 0.298173681161597037170539, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (3,10.0, &r), 0.07816669698940409380349, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (3,50.0, &r), 0.0188874126435879566345, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (3,300.0, &r), 0.00330043718181789963028657675, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (10,0.0, &r), 0.111111111111111111, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (10,1.0/4294967296.0, &r), 0.11111111110787735217158, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (10,1.0/65536.0, &r), 0.1111108991839472074435, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (10,0.1, &r), 0.1097417392579033988025, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (10,1.0, &r), 0.09892913264064615521915, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (10,10.0, &r), 0.0512181994376050593314159875, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (10,50.0, &r), 0.0167118436335939556034579, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_En_scaled_e, (10,300.0, &r), 0.0032261400811599644878615, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_Ei_scaled_e, (-1000.0, &r), -0.00099900199402388071500, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_Ei_scaled_e, (-1.0, &r), -0.59634736232319407434, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_Ei_scaled_e, (1.0/4294967296.0, &r), -21.603494107753930958, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_Ei_scaled_e, (1.0, &r), 0.69717488323506606877, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_Ei_scaled_e, (1000.0, &r), 0.0010010020060241207251, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Shi_e, (-1.0, &r), -1.0572508753757285146, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Shi_e, (1.0/4294967296.0, &r), 2.3283064365386962891e-10, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Shi_e, (1.0/65536.0, &r), 0.00001525878906269737298, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Shi_e, (0.1, &r), 0.1000555722250569955, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Shi_e, (1.0, &r), 1.0572508753757285146, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Shi_e, (10.0, &r), 1246.1144901994233444, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_Shi_e, (50.0, &r), 5.292818448565845482e+19, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_Shi_e, (300.0, &r), 3.248241254044332895e+127, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_Chi_e, (-1.0, &r), 0.8378669409802082409, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Chi_e, (1.0/4294967296.0, &r), -21.603494113016717041, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Chi_e, (1.0/65536.0, &r), -10.513139223999384429, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Chi_e, (1.0/8.0, &r), -1.4983170827635760646, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Chi_e, (1.0, &r), 0.8378669409802082409, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Chi_e, (10.0, &r), 1246.1144860424544147, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_Chi_e, (50.0, &r), 5.292818448565845482e+19, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_Chi_e, (300.0, &r), 3.248241254044332895e+127, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_3_e, (1.0e-10, &r), 1.0e-10, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_3_e, (1.0e-05, &r), 9.9999999999999975e-06, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_3_e, (0.1, &r), 0.09997500714119079665122, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_3_e, (0.5, &r), 0.48491714311363971332427, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_3_e, (1.0, &r), 0.80751118213967145285833, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_3_e, (2.0, &r), 0.89295351429387631138208, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_3_e, (5.0, &r), 0.89297951156924921121856, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_3_e, (10.0, &r), 0.89297951156924921121856, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_expint_3_e, (100.0, &r), 0.89297951156924921121856, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Si_e, (-1.0, &r), -0.9460830703671830149, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Si_e, (1.0e-10, &r), 1.0e-10, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Si_e, (1.0e-05, &r), 9.999999999944444444e-06, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Si_e, (0.1, &r), 0.09994446110827695016, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Si_e, (1.0, &r), 0.9460830703671830149, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Si_e, (10.0, &r), 1.6583475942188740493, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Si_e, (50.0, &r), 1.5516170724859358947, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Si_e, (300.0, &r), 1.5708810882137495193, TEST_TOL0, GSL_SUCCESS); /* TEST_SF(s, gsl_sf_Si_e, (1.0e+20, &r), 1.5707963267948966192, TEST_TOL0, GSL_SUCCESS); */ TEST_SF(s, gsl_sf_Ci_e, (1.0/4294967296.0, &r), -21.603494113016717041, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Ci_e, (1.0/65536.0, &r), -10.513139224115799751, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Ci_e, (1.0/8.0, &r), -1.5061295845296396649, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Ci_e, (1.0, &r), 0.3374039229009681347, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Ci_e, (10.0, &r), -0.04545643300445537263, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Ci_e, (50.0, &r), -0.005628386324116305440, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Ci_e, (300.0, &r), -0.003332199918592111780, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Ci_e, (65536.0, &r), 0.000010560248837656279453, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Ci_e, (4294967296.0, &r), -1.0756463261957757485e-10, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_Ci_e, (1099511627776.0, &r), -3.689865584710764214e-13, 1024.0*TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_atanint_e, (1.0e-10, &r), 1.0e-10, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_atanint_e, (1.0e-05, &r), 9.99999999988888888889e-06, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_atanint_e, (0.1, &r), 0.09988928686033618404, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_atanint_e, (1.0, &r), 0.91596559417721901505, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_atanint_e, (2.0, &r), 1.57601540344632342236, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_atanint_e, (10.0, &r), 3.71678149306806859029, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_atanint_e, (50.0, &r), 6.16499047850274874222, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_atanint_e, (300.0, &r), 8.96281388924518959990, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_atanint_e, (1.0e+5, &r), 18.084471031038661920, TEST_TOL0, GSL_SUCCESS); /* Bug report from Wolfgang Ehrhardt */ TEST_SF(s, gsl_sf_atanint_e, (1.0e+9, &r), 32.552029856869591656, TEST_TOL0, GSL_SUCCESS); return s; } int test_fermidirac(void) { gsl_sf_result r; int s = 0; TEST_SF(s, gsl_sf_fermi_dirac_m1_e, (-10.0, &r), 0.00004539786870243439450, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_m1_e, ( -1.0, &r), 0.26894142136999512075, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_m1_e, ( 1.0, &r), 0.7310585786300048793, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_m1_e, ( 10.0, &r), 0.9999546021312975656, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_0_e, (-10.0, &r), 0.00004539889921686464677, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_0_e, ( -1.0, &r), 0.31326168751822283405, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_0_e, ( 1.0, &r), 1.3132616875182228340, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_0_e, ( 10.0, &r), 10.000045398899216865, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_1_e, (-10.0, &r), 0.00004539941448447633524, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_1_e, ( -2.0, &r), 0.13101248471442377127, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_1_e, ( -1.0, &r), 0.3386479964034521798, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_1_e, ( -0.4, &r), 0.5825520806897909028, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_1_e, ( 0.4, &r), 1.1423819861584355337, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_1_e, ( 1.0, &r), 1.8062860704447742567, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_1_e, ( 1.5, &r), 2.5581520872227806402, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_1_e, ( 2.5, &r), 4.689474797599761667, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_1_e, ( 10.0, &r), 51.64488866743374196, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_1_e, ( 12.0, &r), 73.64492792264531092, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_1_e, ( 20.0, &r), 201.64493406478707282, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_1_e, ( 50.0, &r), 1251.6449340668482264, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_2_e, (-10.0, &r), 0.00004539967212174776662, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_2_e, ( -2.0, &r), 0.13313272938565030508, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_2_e, ( -1.0, &r), 0.3525648792978077590, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_2_e, ( -0.4, &r), 0.6229402647001272120, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_2_e, ( 0.4, &r), 1.2915805581060844533, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_2_e, ( 1.0, &r), 2.1641656128127008622, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_2_e, ( 1.5, &r), 3.247184513920792475, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_2_e, ( 2.5, &r), 6.797764392735056317, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_2_e, ( 10.0, &r), 183.11605273482105278, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_2_e, ( 12.0, &r), 307.73921494638635166, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_2_e, ( 20.0, &r), 1366.2320146723590157, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_2_e, ( 50.0, &r), 20915.580036675744655, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_2_e, (200.0, &r), 1.3336623201467029786e+06, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_mhalf_e, (-10.0, &r), 0.00004539847236080549532, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_mhalf_e, ( -2.0, &r), 0.12366562180120994266, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_mhalf_e, ( -1.0, &r), 0.29402761761145122022, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_mhalf_e, ( -0.4, &r), 0.4631755336886027800, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_mhalf_e, ( 0.4, &r), 0.7654084737661656915, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_mhalf_e, ( 1.0, &r), 1.0270571254743506890, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_mhalf_e, ( 1.5, &r), 1.2493233478527122008, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_mhalf_e, ( 2.5, &r), 1.6663128834358313625, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_mhalf_e, ( 10.0, &r), 3.552779239536617160, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_mhalf_e, ( 12.0, &r), 3.897268231925439359, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_mhalf_e, ( 20.0, &r), 5.041018507535328603, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_mhalf_e, ( 50.0, &r), 7.977530858581869960, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_half_e, (-10.0, &r), 0.00004539920105264132755, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_half_e, ( -2.0, &r), 0.12929851332007559106, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_half_e, ( -1.0, &r), 0.3277951592607115477, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_half_e, ( -0.4, &r), 0.5522452153690688947, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_half_e, ( 0.4, &r), 1.0386797503389389277, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_half_e, ( 1.0, &r), 1.5756407761513002308, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_half_e, ( 1.5, &r), 2.1448608775831140360, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_half_e, ( 2.5, &r), 3.606975377950373251, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_half_e, ( 10.0, &r), 24.084656964637653615, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_half_e, ( 12.0, &r), 31.540203287044242593, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_half_e, ( 20.0, &r), 67.49151222165892049, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_half_e, ( 50.0, &r), 266.09281252136259343, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_3half_e, (-10.0, &r), 0.00004539956540456176333, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_3half_e, ( -2.0, &r), 0.13224678225177236685, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_3half_e, ( -1.0, &r), 0.3466747947990574170, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_3half_e, ( -0.4, &r), 0.6056120213305040910, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_3half_e, ( 0.4, &r), 1.2258236403963668282, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_3half_e, ( 1.0, &r), 2.0022581487784644573, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_3half_e, ( 1.5, &r), 2.9277494127932173068, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_3half_e, ( 2.5, &r), 5.768879312210516582, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_3half_e, ( 10.0, &r), 101.00510084332600020, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_3half_e, ( 12.0, &r), 156.51518642795728036, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_3half_e, ( 20.0, &r), 546.5630100657601959, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_3half_e, ( 50.0, &r), 5332.353566687145552, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (3, -2.0, &r), 0.1342199155038680215, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (3, 0.0, &r), 0.9470328294972459176, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (3, 0.1, &r), 1.0414170610956165759, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (3, 1.0, &r), 2.3982260822489407070, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (3, 3.0, &r), 12.621635313399690724, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (3, 100.0, &r), 4.174893231066566793e+06, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (3, 500.0, &r), 2.604372285319088354e+09, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (5, -2.0, &r), 0.13505242246823676478, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (5, 0.0, &r), 0.9855510912974351041, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (5, 0.1, &r), 1.0876519750101492782, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (5, 1.0, &r), 2.6222337848692390539, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (5, 3.0, &r), 17.008801618012113022, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (5, 100.0, &r), 1.3957522531334869874e+09, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (5, 500.0, &r), 2.1705672808114817955e+13, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (7, -2.0, &r), 0.1352641105671255851, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (7, 0.0, &r), 0.9962330018526478992, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (7, 0.1, &r), 1.1005861815180315485, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (7, 1.0, &r), 2.6918878172003129203, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (7, 3.0, &r), 19.033338976999367642, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (7, 10.0, &r), 5654.530932873610014, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (7, 50.0, &r), 1.005005069985066278e+09, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (7, 500.0, &r), 9.691690268341569514e+16, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (9, -2.0, &r), 0.1353174385330242691, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (9, 0.0, &r), 0.9990395075982715656, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (9, 0.1, &r), 1.1039997234712941212, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (9, 1.0, &r), 2.7113648898129249947, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (9, 3.0, &r), 19.768544008138602223, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (9, 10.0, &r), 10388.990167312912478, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (9, 50.0, &r), 2.85466960802601649e+10, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (9, 500.0, &r), 2.69273849842695876e+20, 2*TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (10, -2.0, &r), 0.13532635396712288092, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (10, 0.0, &r), 0.9995171434980607541, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (10, 0.1, &r), 1.1045818238852612296, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (10, 1.0, &r), 2.7147765350346120647, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (10, 3.0, &r), 19.917151938411675171, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (10, 10.0, &r), 12790.918595516495955, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (10, 50.0, &r), 1.3147703201869657654e+11, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (10, 500.0, &r), 1.2241331244469204398e+22, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (11, -2.0, &r), 0.1353308162894847149, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (11, 0.0, &r), 0.9997576851438581909, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (11, 0.1, &r), 1.1048751811565850418, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (11, 1.0, &r), 2.7165128749007313436, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (11, 3.0, &r), 19.997483022044603065, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (11, 10.0, &r), 14987.996005901818036, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (11, 50.0, &r), 5.558322924078990628e+11, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (11, 500.0, &r), 5.101293089606198280e+23, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (20, -2.0, &r), 0.13533527450327238373, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (20, 0.0, &r), 0.9999995232582155428, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (20, 0.1, &r), 1.1051703357941368203, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (20, 1.0, &r), 2.7182783069905721654, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (20, 3.0, &r), 20.085345296028242734, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (20, 10.0, &r), 21898.072920149606475, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (20, 50.0, &r), 1.236873256595717618e+16, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_fermi_dirac_int_e, (20, 500.0, &r), 9.358938204369557277e+36, TEST_TOL2, GSL_SUCCESS); return s; } int test_gegen(void) { gsl_sf_result r; double ga[100]; int s = 0; int sa; TEST_SF(s, gsl_sf_gegenpoly_1_e, (-0.2, 1.0, &r), -0.4, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_1_e, ( 0.0, 1.0, &r), 2.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_1_e, ( 1.0, 1.0, &r), 2.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_1_e, ( 1.0, 0.5, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_1_e, ( 5.0, 1.0, &r), 10.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_1_e, ( 100.0, 0.5, &r), 100.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_2_e, (-0.2, 0.5, &r), 0.12, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_2_e, ( 0.0, 1.0, &r), 1.00, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_2_e, ( 1.0, 1.0, &r), 3.00, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_2_e, ( 1.0, 0.1, &r), -0.96, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_2_e, ( 5.0, 1.0, &r), 55.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_2_e, ( 100.0, 0.5, &r), 4950.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_3_e, (-0.2, 0.5, &r), 0.112, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_3_e, ( 0.0, 1.0, &r), -2.0/3.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_3_e, ( 1.0, 1.0, &r), 4.000, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_3_e, ( 1.0, 0.1, &r), -0.392, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_3_e, ( 5.0, 1.0, &r), 220.000, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_3_e, ( 100.0, 0.5, &r), 161600.000, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_n_e, (1, 1.0, 1.0, &r), 2.000 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_n_e, (10, 1.0, 1.0, &r), 11.000 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_n_e, (10, 1.0, 0.1, &r), -0.4542309376 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_n_e, (10, 5.0, 1.0, &r), 9.23780e+4 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_n_e, (10, 100.0, 0.5, &r), 1.5729338392690000e+13, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_n_e, (1000, 100.0, 1.0, &r), 3.3353666135627322e+232, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_n_e, (100, 2000.0, 1.0, &r), 5.8753432034937579e+202, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_n_e, (103, 207.0, 2.0, &r), 1.4210272202235983e+145, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gegenpoly_n_e, (103, -0.4, 0.3, &r), -1.64527498094522e-04, TEST_TOL1, GSL_SUCCESS); sa = 0; gsl_sf_gegenpoly_array(99, 5.0, 1.0, ga); sa += ( test_sf_frac_diff( ga[1], 10.0 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff( ga[10], 9.23780e+4 ) > TEST_TOL0 ); gsl_test(sa, " gsl_sf_gegenpoly_array"); s += sa; return s; } int test_jac(void) { double u, m; double sn, cn, dn; int stat_ej; int s = 0; int sa; u = 0.5; m = 0.5; sa = 0; stat_ej = gsl_sf_elljac_e(u, m, &sn, &cn, &dn); sa += test_sf_val(sn, 0.4707504736556572833, TEST_TOL0, "gsl_sf_elljac_e(0.5|0.5) sn"); sa += test_sf_val(cn, 0.8822663948904402865, TEST_TOL0, "gsl_sf_elljac_e(0.5|0.5) cn"); sa += test_sf_val(dn, 0.9429724257773856873, TEST_TOL0, "gsl_sf_elljac_e(0.5|0.5) dn"); gsl_test(s, " gsl_sf_elljac_e(0.5|0.5)"); s += sa; u = 1.0; m = 0.3; sa = 0; stat_ej = gsl_sf_elljac_e(u, m, &sn, &cn, &dn); sa += test_sf_val(sn, 0.8187707145344889190, TEST_TOL0, "gsl_sf_elljac_e(1.0|0.3) sn"); sa += test_sf_val(cn, 0.5741206467465548795, TEST_TOL0, "gsl_sf_elljac_e(1.0|0.3) cn"); sa += test_sf_val(dn, 0.8938033089590823040, TEST_TOL0, "gsl_sf_elljac_e(1.0|0.3) dn"); gsl_test(sa, " gsl_sf_elljac_e(1.0|0.3)"); s += sa; u = 1.0; m = 0.6; sa = 0; stat_ej = gsl_sf_elljac_e(u, m, &sn, &cn, &dn); sa += test_sf_val(sn, 0.7949388393365780943, TEST_TOL0, "gsl_sf_elljac_e(1.0|0.6) sn"); sa += test_sf_val(cn, 0.6066895760718277578, TEST_TOL0, "gsl_sf_elljac_e(1.0|0.6) cn"); sa += test_sf_val(dn, 0.7879361300438814425, TEST_TOL0, "gsl_sf_elljac_e(1.0|0.6) dn"); gsl_test(sa, " gsl_sf_elljac_e(1.0|0.6)"); s += sa; u = 3.0; m = 0.6; sa = 0; stat_ej = gsl_sf_elljac_e(u, m, &sn, &cn, &dn); sa += test_sf_val(sn, 0.7432676860864044186, TEST_TOL0, " gsl_sf_elljac_e(3.0|0.6) sn"); sa += test_sf_val(cn, -0.6689941306317733154, TEST_TOL0, " gsl_sf_elljac_e(3.0|0.6) cn"); sa += test_sf_val(dn, 0.8176379933025723259, TEST_TOL0, " gsl_sf_elljac_e(3.0|0.6) dn"); gsl_test(sa, " gsl_sf_elljac_e(3.0|0.6)"); s += sa; u = 2.0; m = 0.999999; sa = 0; stat_ej = gsl_sf_elljac_e(u, m, &sn, &cn, &dn); sa += test_sf_val(sn, 0.96402778575700186570, TEST_TOL1, "gsl_sf_elljac_e(2.0|0.999999) sn"); sa += test_sf_val(cn, 0.26580148285600686381, TEST_TOL1, "gsl_sf_elljac_e(2.0|0.999999) cn"); sa += test_sf_val(dn, 0.26580323105264131136, TEST_TOL1, "gsl_sf_elljac_e(2.0|0.999999) dn"); gsl_test(sa, " gsl_sf_elljac_e(2.0|0.999999)"); s += sa; /* test supplied by Ivan Panchenko */ u = 1.69695970624443; m = 0.270378013104138; sa = 0; stat_ej = gsl_sf_elljac_e(u, m, &sn, &cn, &dn); sa += test_sf_val(sn, 1.0, TEST_TOL0, "gsl_sf_elljac_e(1.69..|0.27..) sn"); sa += test_sf_val(cn, 0.0, TEST_TOL1, "gsl_sf_elljac_e(1.69..|0.27..) cn"); sa += test_sf_val(dn, 0.8541791304497336, TEST_TOL1, "gsl_sf_elljac_e(1.69..|0.27..) dn"); gsl_test(sa, " gsl_sf_elljac_e(1.69695970624443|0.270378013104138)"); s += sa; /* Check known values from Abramowitz & Stegun, Table 16.5 */ u = 0; m = 0.1; { double mc = 1 - m; /* quarter period K is (pi/2)/agm(1,mc) */ double K = (M_PI_2)/ 0.9741726903999478375938128316; double A = 1.0 / sqrt(1+sqrt(mc)); double B = pow(mc, 0.25) / sqrt(1+sqrt(mc)); double C = pow(mc, 0.25); double C2 = sqrt(mc); double eps = 1e-10; sa = 0; stat_ej = gsl_sf_elljac_e(0.0, m, &sn, &cn, &dn); sa += test_sf_val(sn, 0.0, TEST_TOL0, "gsl_sf_elljac_e(0|0.1) sn"); sa += test_sf_val(cn, 1.0, TEST_TOL0, "gsl_sf_elljac_e(0|0.1) cn"); sa += test_sf_val(dn, 1.0, TEST_TOL0, "gsl_sf_elljac_e(0|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(0|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(-eps, m, &sn, &cn, &dn); sa += test_sf_val(sn, -eps, TEST_TOL0, "gsl_sf_elljac_e(-1e-10|0.1) sn"); sa += test_sf_val(cn, 1.0, TEST_TOL0, "gsl_sf_elljac_e(-1e-10|0.1) cn"); sa += test_sf_val(dn, 1.0, TEST_TOL0, "gsl_sf_elljac_e(-1e-10|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(-1e-10|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(eps, m, &sn, &cn, &dn); sa += test_sf_val(sn, eps, TEST_TOL0, "gsl_sf_elljac_e(1e-10|0.1) sn"); sa += test_sf_val(cn, 1.0, TEST_TOL0, "gsl_sf_elljac_e(1e-10|0.1) cn"); sa += test_sf_val(dn, 1.0, TEST_TOL0, "gsl_sf_elljac_e(1e-10|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(1e-10|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(1e-30, m, &sn, &cn, &dn); sa += test_sf_val(sn, 1e-30, TEST_TOL0, "gsl_sf_elljac_e(1e-30|0.1) sn"); sa += test_sf_val(cn, 1.0, TEST_TOL0, "gsl_sf_elljac_e(1e-30|0.1) cn"); sa += test_sf_val(dn, 1.0, TEST_TOL0, "gsl_sf_elljac_e(1e-30|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(1e-30|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(K / 2.0 - eps, m, &sn, &cn, &dn); sa += test_sf_val(sn, A - eps*B*C, TEST_TOL2, "gsl_sf_elljac_e(K/2-1e-10|0.1) sn"); sa += test_sf_val(cn, B + eps*A*C, TEST_TOL2, "gsl_sf_elljac_e(K/2-1e-10|0.1) cn"); sa += test_sf_val(dn, C + m*eps*A*B, TEST_TOL2, "gsl_sf_elljac_e(K/2-1e-10|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(K/2-1e-10|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(K / 2.0, m, &sn, &cn, &dn); sa += test_sf_val(sn, A, TEST_TOL2, "gsl_sf_elljac_e(K/2|0.1) sn"); sa += test_sf_val(cn, B, TEST_TOL2, "gsl_sf_elljac_e(K/2|0.1) cn"); sa += test_sf_val(dn, C, TEST_TOL2, "gsl_sf_elljac_e(K/2|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(K/2|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(K / 2.0 + eps, m, &sn, &cn, &dn); sa += test_sf_val(sn, A + eps*B*C, TEST_TOL2, "gsl_sf_elljac_e(K/2+1e-10|0.1) sn"); sa += test_sf_val(cn, B - eps*A*C, TEST_TOL2, "gsl_sf_elljac_e(K/2+1e-10|0.1) cn"); sa += test_sf_val(dn, C - m*eps*A*B, TEST_TOL2, "gsl_sf_elljac_e(K/2+1e-10|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(K/2+1e-10|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(K - eps, m, &sn, &cn, &dn); sa += test_sf_val(sn, 1.0, TEST_TOL1, "gsl_sf_elljac_e(K-1e-10|0.1) sn"); sa += test_sf_val(cn, eps*C2, 10*TEST_SNGL, "gsl_sf_elljac_e(K-1e-10|0.1) cn"); sa += test_sf_val(dn, C2, TEST_TOL2, "gsl_sf_elljac_e(K-1e-10|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(K-1e-10|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(K, m, &sn, &cn, &dn); sa += test_sf_val(sn, 1.0, TEST_TOL1, "gsl_sf_elljac_e(K|0.1) sn"); sa += test_sf_val(cn, 0.0, TEST_TOL1, "gsl_sf_elljac_e(K|0.1) cn"); sa += test_sf_val(dn, C2, TEST_TOL2, "gsl_sf_elljac_e(K|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(K|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(K + eps, m, &sn, &cn, &dn); sa += test_sf_val(sn, 1.0, TEST_TOL1, "gsl_sf_elljac_e(K+1e-10|0.1) sn"); sa += test_sf_val(cn, -eps*C2, 10*TEST_SNGL, "gsl_sf_elljac_e(K+1e-10|0.1) cn"); sa += test_sf_val(dn, C2, TEST_TOL2, "gsl_sf_elljac_e(K+1e-10|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(K+1e-10|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(3.0*K / 2.0, m, &sn, &cn, &dn); sa += test_sf_val(sn, A, TEST_TOL2, "gsl_sf_elljac_e(3K/2|0.1) sn"); sa += test_sf_val(cn, -B, TEST_TOL2, "gsl_sf_elljac_e(3K/2|0.1) cn"); sa += test_sf_val(dn, C, TEST_TOL2, "gsl_sf_elljac_e(3K/2|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(3K/2|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(2.0*K - eps, m, &sn, &cn, &dn); sa += test_sf_val(sn, eps, 10*TEST_SNGL, "gsl_sf_elljac_e(2K-1e-10|0.1) sn"); sa += test_sf_val(cn, -1.0, TEST_TOL1, "gsl_sf_elljac_e(2K-1e-10|0.1) cn"); sa += test_sf_val(dn, 1.0, TEST_TOL1, "gsl_sf_elljac_e(2K-1e-10|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(2K-1e-10|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(2.0*K, m, &sn, &cn, &dn); sa += test_sf_val(sn, 0.0, TEST_TOL1, "gsl_sf_elljac_e(2K|0.1) sn"); sa += test_sf_val(cn, -1.0, TEST_TOL1, "gsl_sf_elljac_e(2K|0.1) cn"); sa += test_sf_val(dn, 1.0, TEST_TOL1, "gsl_sf_elljac_e(2K|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(2K|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(2.0*K + eps, m, &sn, &cn, &dn); sa += test_sf_val(sn, -eps, 10*TEST_SNGL, "gsl_sf_elljac_e(2K+1e-10|0.1) sn"); sa += test_sf_val(cn, -1.0, TEST_TOL1, "gsl_sf_elljac_e(2K+1e-10|0.1) cn"); sa += test_sf_val(dn, 1.0, TEST_TOL1, "gsl_sf_elljac_e(2K+1e-10|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(2K+1e-10|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(5.0*K / 2.0, m, &sn, &cn, &dn); sa += test_sf_val(sn, -A, TEST_TOL2, "gsl_sf_elljac_e(5K/2|0.1) sn"); sa += test_sf_val(cn, -B, TEST_TOL2, "gsl_sf_elljac_e(5K/2|0.1) cn"); sa += test_sf_val(dn, C, TEST_TOL2, "gsl_sf_elljac_e(5K/2|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(5K/2|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(3.0*K - eps, m, &sn, &cn, &dn); sa += test_sf_val(sn, -1.0, TEST_TOL1, "gsl_sf_elljac_e(3K-1e-10|0.1) sn"); sa += test_sf_val(cn, -C2 * eps, 10*TEST_SNGL, "gsl_sf_elljac_e(3K-1e-10|0.1) cn"); sa += test_sf_val(dn, C2, TEST_TOL2, "gsl_sf_elljac_e(3K-1e-10|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(3K-1e-10|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(3.0*K, m, &sn, &cn, &dn); sa += test_sf_val(sn, -1.0, TEST_TOL1, "gsl_sf_elljac_e(3K|0.1) sn"); sa += test_sf_val(cn, 0.0, TEST_TOL1, "gsl_sf_elljac_e(3K|0.1) cn"); sa += test_sf_val(dn, C2, TEST_TOL2, "gsl_sf_elljac_e(3K|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(3K|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(3.0*K + eps, m, &sn, &cn, &dn); sa += test_sf_val(sn, -1.0, TEST_TOL1, "gsl_sf_elljac_e(3K+1e-10|0.1) sn"); sa += test_sf_val(cn, +C2 * eps, 10*TEST_SNGL, "gsl_sf_elljac_e(3K+1e-10|0.1) cn"); sa += test_sf_val(dn, C2, TEST_TOL2, "gsl_sf_elljac_e(3K+1e-10|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(3K+1e-10|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(7.0*K / 2.0, m, &sn, &cn, &dn); sa += test_sf_val(sn, -A, TEST_TOL2, "gsl_sf_elljac_e(7K/2|0.1) sn"); sa += test_sf_val(cn, B, TEST_TOL2, "gsl_sf_elljac_e(7K/2|0.1) cn"); sa += test_sf_val(dn, C, TEST_TOL2, "gsl_sf_elljac_e(7K/2|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(7K/2|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(4.0*K - eps, m, &sn, &cn, &dn); sa += test_sf_val(sn, -eps, 10*TEST_SNGL, "gsl_sf_elljac_e(4K-1e-10|0.1) sn"); sa += test_sf_val(cn, 1.0, TEST_TOL1, "gsl_sf_elljac_e(4K-1e-10|0.1) cn"); sa += test_sf_val(dn, 1.0, TEST_TOL1, "gsl_sf_elljac_e(4K-1e-10|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(4K-1e-10|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(4.0*K, m, &sn, &cn, &dn); sa += test_sf_val(sn, 0.0, TEST_TOL1, "gsl_sf_elljac_e(4K|0.1) sn"); sa += test_sf_val(cn, 1.0, TEST_TOL1, "gsl_sf_elljac_e(4K|0.1) cn"); sa += test_sf_val(dn, 1.0, TEST_TOL1, "gsl_sf_elljac_e(4K|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(4K|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(9.0 * K / 2.0, m, &sn, &cn, &dn); sa += test_sf_val(sn, A, TEST_TOL2, "gsl_sf_elljac_e(9K/2|0.1) sn"); sa += test_sf_val(cn, B, TEST_TOL2, "gsl_sf_elljac_e(9K/2|0.1) cn"); sa += test_sf_val(dn, C, TEST_TOL2, "gsl_sf_elljac_e(9K/2|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(9K/2|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(-K / 2.0, m, &sn, &cn, &dn); sa += test_sf_val(sn, -A, TEST_TOL2, "gsl_sf_elljac_e(-K/2|0.1) sn"); sa += test_sf_val(cn, B, TEST_TOL2, "gsl_sf_elljac_e(-K/2|0.1) cn"); sa += test_sf_val(dn, C, TEST_TOL2, "gsl_sf_elljac_e(-K/2|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(-K/2|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(-K, m, &sn, &cn, &dn); sa += test_sf_val(sn, -1.0, TEST_TOL1, "gsl_sf_elljac_e(-K|0.1) sn"); sa += test_sf_val(cn, 0.0, TEST_TOL1, "gsl_sf_elljac_e(-K|0.1) cn"); sa += test_sf_val(dn, C2, TEST_TOL2, "gsl_sf_elljac_e(-K|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(-K|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(-3.0*K / 2.0, m, &sn, &cn, &dn); sa += test_sf_val(sn, -A, TEST_TOL2, "gsl_sf_elljac_e(-3K/2|0.1) sn"); sa += test_sf_val(cn, -B, TEST_TOL2, "gsl_sf_elljac_e(-3K/2|0.1) cn"); sa += test_sf_val(dn, C, TEST_TOL2, "gsl_sf_elljac_e(-3K/2|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(-3K/2|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(-2.0*K, m, &sn, &cn, &dn); sa += test_sf_val(sn, 0.0, TEST_TOL1, "gsl_sf_elljac_e(-2K|0.1) sn"); sa += test_sf_val(cn, -1.0, TEST_TOL1, "gsl_sf_elljac_e(-2K|0.1) cn"); sa += test_sf_val(dn, 1.0, TEST_TOL1, "gsl_sf_elljac_e(-2K|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(-2K|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(-5.0*K / 2.0, m, &sn, &cn, &dn); sa += test_sf_val(sn, A, TEST_TOL2, "gsl_sf_elljac_e(-5K/2|0.1) sn"); sa += test_sf_val(cn, -B, TEST_TOL2, "gsl_sf_elljac_e(-5K/2|0.1) cn"); sa += test_sf_val(dn, C, TEST_TOL2, "gsl_sf_elljac_e(-5K/2|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(-5K/2|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(-3.0*K, m, &sn, &cn, &dn); sa += test_sf_val(sn, 1.0, TEST_TOL1, "gsl_sf_elljac_e(-3K|0.1) sn"); sa += test_sf_val(cn, 0.0, TEST_TOL1, "gsl_sf_elljac_e(-3K|0.1) cn"); sa += test_sf_val(dn, C2, TEST_TOL2, "gsl_sf_elljac_e(-3K|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(-3K|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(-7.0*K / 2.0, m, &sn, &cn, &dn); sa += test_sf_val(sn, A, TEST_TOL2, "gsl_sf_elljac_e(-7K/2|0.1) sn"); sa += test_sf_val(cn, B, TEST_TOL2, "gsl_sf_elljac_e(-7K/2|0.1) cn"); sa += test_sf_val(dn, C, TEST_TOL2, "gsl_sf_elljac_e(-7K/2|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(-7K/2|0.1)"); s += sa; sa = 0; stat_ej = gsl_sf_elljac_e(-4.0*K, m, &sn, &cn, &dn); sa += test_sf_val(sn, 0.0, TEST_TOL1, "gsl_sf_elljac_e(-4K|0.1) sn"); sa += test_sf_val(cn, 1.0, TEST_TOL1, "gsl_sf_elljac_e(-4K|0.1) cn"); sa += test_sf_val(dn, 1.0, TEST_TOL1, "gsl_sf_elljac_e(-4K|0.1) dn"); gsl_test(sa, " gsl_sf_elljac_e(-4K|0.1)"); s += sa; } return s; } int test_laguerre(void) { gsl_sf_result r; int s = 0; TEST_SF(s, gsl_sf_laguerre_1_e, (0.5, -1.0, &r), 2.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_1_e, (0.5, 1.0, &r), 0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_1_e, (1.0, 1.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_2_e, ( 0.5, -1.0, &r), 4.875, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_2_e, ( 0.5, 1.0, &r), -0.125, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_2_e, ( 1.0, 1.0, &r), 0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_2_e, (-1.0, 1.0, &r), -0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_2_e, (-2.0, 1.0, &r), 0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_2_e, (-3.0, 1.0, &r), 2.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_3_e, (0.5, -1.0, &r), 8.479166666666666667, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_3_e, (0.5, 1.0, &r), -0.6041666666666666667, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_3_e, (1.0, 1.0, &r), -0.16666666666666666667, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_3_e, ( 2.0, 1.0, &r), 2.3333333333333333333, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_3_e, (-2.0, 1.0, &r), 1.0/3.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_3_e, (-3.0, 1.0, &r), -1.0/6.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_3_e, (-4.0, 1.0, &r), -8.0/3.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (1, 0.5, 1.0, &r), 0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (2, 1.0, 1.0, &r), 0.5, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (3, 2.0, 1.0, &r), 2.3333333333333333333, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (4, 2.0, 0.5, &r), 6.752604166666666667, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (90, 2.0, 0.5, &r), -48.79047157201507897, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (90, 2.0, -100.0, &r), 2.5295879275042410902e+63, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (90, 2.0, 100.0, &r), -2.0929042259546928670e+20, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, 2.0, -0.5, &r), 2.2521795545919391405e+07, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, 2.0, 0.5, &r), -28.764832945909097418, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (1000, 2.0, -0.5, &r), 2.4399915170947549589e+21, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (1000, 2.0, 0.5, &r), -306.77440254315317525, TEST_TOL2, GSL_SUCCESS); /**/ TEST_SF(s, gsl_sf_laguerre_n_e, (100000, 2.0, 1.0, &r), 5107.73491348319, TEST_TOL4, GSL_SUCCESS); /* Compute these with the recurrence * L(0,alpha,x)=1; * L(1,alpha,x)=1+alpha-x; * L(n,alpha,x)=((2*n-1+alpha-x)*L(n-1,alpha,x)-(n+alpha-1)*L(n-2,alpha,x))/k */ TEST_SF(s, gsl_sf_laguerre_n_e, (1e5, 2.5, 2.5, &r), -0.41491680394598644969113795e5, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (1e5+1, 2.5, 2.5, &r), -0.41629446949552321027514888e5, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (1e6+1, 2.5, 2.5, &r), -0.48017961545391273151977118e6, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (5e6+1, 2.5, 2.5, &r), -0.15174037401611122446089494e7, TEST_TOL6, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (8e6+1, 2.5, 2.5, &r), 0.63251509472091810994286362e6, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (1e7+1, 2.5, 2.5, &r), 0.15299484685632983178033887e7, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (1e8+1, 2.5, 2.5, &r), 0.23645341644922756725290777e8, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (1e9+1, 2.5, 2.5, &r), -0.17731002248958790286185878e8, 100*TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (1, -2.0, 1.0, &r), -2.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (2, -2.0, 1.0, &r), 0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (3, -2.0, 1.0, &r), 1.0/3.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (10, -2.0, 1.0, &r), -0.04654954805996472663, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (10, -5.0, 1.0, &r), -0.0031385030864197530864, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (10, -9.0, 1.0, &r), -2.480158730158730159e-06, TEST_TOL5, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (10, -11.0, 1.0, &r), 2.7182818011463844797, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (10, -11.0, -1.0, &r), 0.3678794642857142857, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -2.0, 1.0, &r), -0.0027339992019526273866, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -2.0, -1.0, &r), 229923.09193402028290, TEST_TOL5, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -10.0, 1.0, &r), 3.25966665871244092e-11, TEST_TOL6, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -10.0, -1.0, &r), 0.00016484365618205810025, TEST_TOL6, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -20.0, 1.0, &r), 5.09567630343671251e-21, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -30.0, 1.0, &r), 3.46063150272466192e-34, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -50.0, 1.0, &r), 1.20981872933162889e-65, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -50.0, -1.0, &r), 8.60763477742332922e-65, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -50.5, 1.0, &r), 4.84021010426688393e-31, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -50.5, -1.0, &r), 8.49861345212160618e-33, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -101.0, 1.0, &r), 2.7182818284590452354, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -101.0, -1.0, &r), 0.3678794411714423216, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -102.0, 1.0, &r), 271.8281828459045235, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -102.0, -1.0, &r), 37.52370299948711680, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -110.0, 1.0, &r), 1.0666955248998831554e+13, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -110.0, -1.0, &r), 1.7028306108058225871e+12, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -200.0, 1.0, &r), 7.47851889721356628e+58, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -200.0, -1.0, &r), 2.73740299754732273e+58, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -50.0, 10.0, &r), 4.504712811317745591e-21, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, -50.0, -10.0, &r), 1.475165520610679937e-11, TEST_TOL1, GSL_SUCCESS); /* test cases for Ed Smith-Rowland */ TEST_SF(s, gsl_sf_laguerre_n_e, (100, 0.0, 0.5, &r), 0.18682260367692278801, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, 0.0, 10.5, &r), 9.1796907354050059874, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, 0.0, -10.5, &r), 5.6329215744170606488e24, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, 0.0, 100.5, &r), -3.9844782875811907525e20, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_laguerre_n_e, (100, 0.0, 150, &r), -1.4463204337261709595e31, TEST_TOL2, GSL_SUCCESS); return s; } int test_lambert(void) { gsl_sf_result r; int s = 0; TEST_SF(s, gsl_sf_lambert_W0_e, (0.0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_W0_e, (1.0, &r), 0.567143290409783872999969, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_W0_e, (2.0, &r), 0.852605502013725491346472, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_W0_e, (20.0, &r), 2.205003278024059970493066, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_W0_e, (1000.0, &r), 5.24960285240159622712606, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_W0_e, (1.0e+6, &r), 11.38335808614005262200016, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_W0_e, (1.0e+12, &r), 24.43500440493491313826305, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_W0_e, (1.0e+308, &r), 702.641362034106812081125, TEST_TOL0, GSL_SUCCESS); /* Test case from Katrin Wolff fails under double-precision */ TEST_SF(s, gsl_sf_lambert_W0_e, (1.6849341956993852953416990, &r), 0.775706963944252869680440, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_W0_e, (-1.0/M_E - GSL_DBL_EPSILON, &r), -1.0, TEST_TOL0, GSL_EDOM); TEST_SF(s, gsl_sf_lambert_W0_e, (-1.0/M_E + 1.0/(1024.0*1024.0*1024.0), &r), -0.999928845560308370714970, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_W0_e, (-1.0/M_E + 1.0/(1024.0*1024.0), &r), -0.997724730359774141620354, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_W0_e, (-1.0/M_E + 1.0/512.0, &r), -0.900335676696088773044678, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_W0_e, (-1.0/M_E + 0.25, &r), -0.1349044682661213545487599, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_Wm1_e, (0.0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_Wm1_e, (1.0, &r), 0.567143290409783872999969, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_Wm1_e, (2.0, &r), 0.852605502013725491346472, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_Wm1_e, (20.0, &r), 2.205003278024059970493066, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_Wm1_e, (-1.0/M_E - GSL_DBL_EPSILON, &r), -1.0, TEST_TOL0, GSL_EDOM); TEST_SF(s, gsl_sf_lambert_Wm1_e, (-1.0/M_E + 1.0/(1024.0*1024.0*1024.0), &r), -1.000071157815154608049055, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_Wm1_e, (-1.0/M_E + 1.0/(1024.0*1024.0), &r), -1.002278726118593023934693, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_Wm1_e, (-1.0/M_E + 1.0/512.0, &r), -1.106761200865743124599130, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_Wm1_e, (-1.0/M_E + 1.0/64.0, &r), -1.324240940341812125489772, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_lambert_Wm1_e, (-1.0/M_E + 0.25, &r), -3.345798131120112, TEST_TOL1, GSL_SUCCESS); return s; } int test_log(void) { gsl_sf_result r; gsl_sf_result r1, r2; int s = 0; TEST_SF(s, gsl_sf_log_e, (0.1, &r), -2.3025850929940456840, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_e, (1.1, &r), 0.09531017980432486004, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_e, (1000.0, &r), 6.907755278982137052, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_abs_e, (-0.1, &r), -2.3025850929940456840, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_abs_e, (-1.1, &r), 0.09531017980432486004, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_abs_e, (-1000.0, &r), 6.907755278982137052, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_abs_e, (0.1, &r), -2.3025850929940456840, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_abs_e, (1.1, &r), 0.09531017980432486004, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_abs_e, (1000.0, &r), 6.907755278982137052, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_log_e, (1.0, 1.0, &r1, &r2), 0.3465735902799726547, TEST_TOL0, 0.7853981633974483096, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_log_e, (1.0, -1.0, &r1, &r2), 0.3465735902799726547, TEST_TOL0, -0.7853981633974483096, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_log_e, (1.0, 100.0, &r1, &r2), 4.605220183488258022, TEST_TOL0, 1.560796660108231381, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_log_e, (-1000.0, -1.0, &r1, &r2), 6.907755778981887052, TEST_TOL0, -3.1405926539231263718, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_log_e, (-1.0, 0.0, &r1, &r2), 0.0, TEST_TOL0, 3.1415926535897932385, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_e, (1.0e-10, &r), 9.999999999500000000e-11, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_e, (1.0e-8, &r), 9.999999950000000333e-09, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_e, (1.0e-4, &r), 0.00009999500033330833533, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_e, (0.1, &r), 0.09531017980432486004, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_e, (0.49, &r), 0.3987761199573677730, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_e, (-0.49, &r), -0.6733445532637655964, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_e, (1.0, &r), M_LN2, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_e, (-0.99, &r), -4.605170185988091368, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_mx_e, (1.0e-10, &r), -4.999999999666666667e-21, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_mx_e, (1.0e-8, &r), -4.999999966666666917e-17, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_mx_e, (1.0e-4, &r), -4.999666691664666833e-09, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_mx_e, (0.1, &r), -0.004689820195675139956, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_mx_e, (0.49, &r), -0.09122388004263222704, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_mx_e, (-0.49, &r), -0.18334455326376559639, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_mx_e, (1.0, &r), M_LN2-1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_log_1plusx_mx_e, (-0.99, &r), -3.615170185988091368, TEST_TOL0, GSL_SUCCESS); return s; } int test_pow_int(void) { gsl_sf_result r; int status = 0; int s = 0; TEST_SF(s, gsl_sf_pow_int_e, (2.0, 3, &r), 8.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pow_int_e, (-2.0, 3, &r), -8.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pow_int_e, (2.0, -3, &r), 1.0/8.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pow_int_e, (-2.0, -3, &r), -1.0/8.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pow_int_e, (10.0, 4, &r), 1.0e+4, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pow_int_e, (10.0, -4, &r), 1.0e-4, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pow_int_e, (-10.0, 4, &r), 1.0e+4, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pow_int_e, (-10.0, -4, &r), 1.0e-4, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pow_int_e, (10.0, 40, &r), 1.0e+40, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pow_int_e, (8.0, -40, &r), 7.523163845262640051e-37, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pow_int_e, (-10.0, 40, &r), 1.0e+40, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pow_int_e, (-8.0, -40, &r), 7.523163845262640051e-37, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pow_int_e, (10.0, 41, &r), 1.0e+41, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pow_int_e, (8.0, -41, &r), 9.403954806578300064e-38, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pow_int_e, (-10.0, 41, &r), -1.0e+41, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pow_int_e, (-8.0, -41, &r), -9.403954806578300064e-38, TEST_TOL0, GSL_SUCCESS); return status; } int test_psi(void) { gsl_sf_result r; int s = 0; /* Test values taken 1-4 from gp-pari */ TEST_SF(s, gsl_sf_psi_int_e, (1, &r), -0.57721566490153286060, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_int_e, (2, &r), 0.42278433509846713939, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_int_e, (3, &r), 0.92278433509846713939, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_int_e, (4, &r), 1.2561176684318004727, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_int_e, (5, &r), 1.5061176684318004727, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_int_e, (100, &r), 4.600161852738087400, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_int_e, (110, &r), 4.695928024251535633, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_int_e, (5000, &r), 8.517093188082904107, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_e, (5000.0, &r), 8.517093188082904107, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_e, (5.0, &r), 1.5061176684318004727, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_e, (-10.5, &r), 2.3982391295357816134, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_e, (-100.5, &r), 4.615124601338064117, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_e, (-1.0e+5-0.5, &r), 11.512935464924395337, 4.0*TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_e, (-262144.0-0.5, &r), 12.476653064769611581, 4.0*TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1piy_e, (0.8, &r), -0.07088340212750589223, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1piy_e, (1.0, &r), 0.09465032062247697727, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1piy_e, (5.0, &r), 1.6127848446157465854, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1piy_e, (100.0, &r), 4.605178519404762003, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1piy_e, (2000.0, &r), 7.600902480375416216, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1piy_e, (-0.8, &r), -0.07088340212750589223, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1piy_e, (-1.0, &r), 0.09465032062247697727, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1piy_e, (-5.0, &r), 1.6127848446157465854, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1piy_e, (-100.0, &r), 4.605178519404762003, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1piy_e, (-2000.0, &r), 7.600902480375416216, TEST_TOL0, GSL_SUCCESS); /* Additional test values 1-4 computed using gp-pari and Abramowitz & Stegun 6.4.6 */ TEST_SF(s, gsl_sf_psi_1_int_e, (1, &r), 1.6449340668482264364, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_int_e, (2, &r), 0.64493406684822643647, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_int_e, (3, &r), 0.39493406684822643647, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_int_e, (4, &r), 0.28382295573711532536, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_int_e, (1, &r), 1.6449340668482264365, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_int_e, (5, &r), 0.22132295573711532536, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_int_e, (100, &r), 0.010050166663333571395, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_int_e, (110, &r), 0.009132356622022545705, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_int_e, (500, &r), 0.0020020013333322666697, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_e, (1.0/32.0, &r), 1025.5728544782377089, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_e, (1.0, &r), 1.6449340668482264365, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_e, (5.0, &r), 0.22132295573711532536, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_e, (100.0, &r), 0.010050166663333571395, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_e, (110.0, &r), 0.009132356622022545705, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_e, (500.0, &r), 0.0020020013333322666697, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_e, (-1.0 - 1.0/128.0, &r), 16386.648472598746587, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_e, (-1.50, &r), 9.3792466449891237539, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_e, (-10.5, &r), 9.7787577398148123845, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_e, (-15.5, &r), 9.8071247184113896201, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_e, (-50.5, &r), 9.8499971860824842274, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_1_e, (-1000.5, &r), 9.8686054001734414233, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_n_e, (1, 1, &r), 1.6449340668482264364, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_n_e, (1, 2, &r), 0.64493406684822643647, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_n_e, (1, 3, &r), 0.39493406684822643647, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_n_e, (1, 4, &r), 0.28382295573711532536, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_n_e, (1, 5, &r), 0.22132295573711532536, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_n_e, (1, 100, &r), 0.010050166663333571395, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_n_e, (1, 110, &r), 0.009132356622022545705, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_n_e, (1, 500, &r), 0.0020020013333322666697, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_n_e, (3, 5.0, &r), 0.021427828192755075022, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_n_e, (3, 500.0, &r), 1.6048063999872000683e-08, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_n_e, (10, 5.0, &r), -0.08675107579196581317, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_n_e, (10, 50.0, &r), -4.101091112731268288e-12, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_n_e, (0, -1.5, &r), 0.70315664064524318723, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_psi_n_e, (1, -1.5, &r), 9.3792466449891237539, TEST_TOL0, GSL_SUCCESS); return s; } int test_psi_complex(void) { gsl_sf_result r1; gsl_sf_result r2; int s = 0; TEST_SF_2(s, gsl_sf_complex_psi_e, (1.0e+07, 1.0e+06, &r1, &r2), 16.1230707668799525, TEST_TOL0, 0.09966865744165720, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_psi_e, (10.0, 50.0, &r1, &r2), 3.92973987174863660, TEST_TOL0, 1.38302847985210276, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_psi_e, (2.0, 21.0, &r1, &r2), 3.04697388853248195, TEST_TOL0, 1.49947549076817824, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_psi_e, (1.5, 0.0, &r1, &r2), 0.0364899739785765206, TEST_TOL2, 0.0, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_psi_e, (1.0, 5.0, &r1, &r2), 1.612784844615747, TEST_TOL1, 1.470796326794968, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_psi_e, (-1.5, 5.0, &r1, &r2), 1.68260717336484070, TEST_TOL0, 1.95230236730713338, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_psi_e, (-20.5, -20.5, &r1, &r2), 3.37919358657933066, TEST_TOL0, -2.36829046481731091, TEST_TOL0, GSL_SUCCESS); return s; } int test_synch(void) { gsl_sf_result r; int s = 0; TEST_SF(s, gsl_sf_synchrotron_1_e, (0.01, &r), 0.444972504114210632, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_synchrotron_1_e, (1.0, &r), 0.651422815355364504, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_synchrotron_1_e, (10.0, &r), 0.000192238264300868882, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_synchrotron_1_e, (100.0, &r), 4.69759366592220221e-43, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_synchrotron_2_e, (0.01, &r), 0.23098077342226277732, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_synchrotron_2_e, (1.0, &r), 0.4944750621042082670, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_synchrotron_2_e, (10.0, &r), 0.00018161187569530204281, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_synchrotron_2_e, (256.0, &r), 1.3272635474353774058e-110, TEST_TOL4, GSL_SUCCESS); /* exp()... not my fault */ return s; } int test_transport(void) { gsl_sf_result r; int s = 0; TEST_SF(s, gsl_sf_transport_2_e, (1.0e-10, &r), 9.9999999999999999999e-11, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_2_e, (1.0, &r), 0.97303256135517012845, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_2_e, (3.0, &r), 2.41105004901695346199, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_2_e, (10.0, &r), 3.28432911449795173575, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_2_e, (100.0, &r), 3.28986813369645287294, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_2_e, (1.0e+05, &r), 3.28986813369645287294, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_3_e, (1.0e-10, &r), 4.999999999999999999997e-21, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_3_e, (1.0, &r), 0.479841006572417499939, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_3_e, (3.0, &r), 3.210604662942246772338, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_3_e, (5.0, &r), 5.614386613842273228585, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_3_e, (10.0, &r), 7.150322712008592975030, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_3_e, (30.0, &r), 7.212341416160946511930, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_3_e, (100.0, &r), 7.212341418957565712398, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_3_e, (1.0e+05, &r), 7.212341418957565712398, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_4_e, (1.0e-10, &r), 3.33333333333333333333e-31, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_4_e, (1.0e-07, &r), 3.33333333333333166666e-22, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_4_e, (1.0e-04, &r), 3.33333333166666666726e-13, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_4_e, (0.1, &r), 0.000333166726172109903824, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_4_e, (1.0, &r), 0.31724404523442648241, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_4_e, (3.0, &r), 5.96482239737147652446, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_4_e, (5.0, &r), 15.3597843168821829816, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_4_e, (10.0, &r), 25.2736676770304417334, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_4_e, (30.0, &r), 25.9757575220840937469, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_4_e, (100.0, &r), 25.9757576090673165963, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_4_e, (1.0e+05, &r), 25.9757576090673165963, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_5_e, (1.0e-10, &r), 2.49999999999999999999e-41, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_5_e, (1.0e-07, &r), 2.49999999999999861111e-29, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_5_e, (1.0e-04, &r), 2.49999999861111111163e-17, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_5_e, (0.1, &r), 0.000024986116317791487410, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_5_e, (1.0, &r), 0.236615879239094789259153, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_5_e, (3.0, &r), 12.77055769104415951115760, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_5_e, (5.0, &r), 50.26309221817518778543615, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_5_e, (10.0, &r), 116.3807454024207107698556, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_5_e, (30.0, &r), 124.4313279083858954839911, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_5_e, (100.0, &r), 124.4313306172043911597639, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_transport_5_e, (1.0e+05, &r), 124.43133061720439115976, TEST_TOL0, GSL_SUCCESS); return s; } int test_trig(void) { gsl_sf_result r; gsl_sf_result r1, r2; double theta; int s = 0; int sa; TEST_SF(s, gsl_sf_sin_e, (-10.0, &r), 0.5440211108893698134, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_sin_e, (1.0, &r), 0.8414709848078965067, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_sin_e, (1000.0, &r), 0.8268795405320025603, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_sin_e, (1048576.75, &r), 0.8851545351115651914, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_sin_e, (62831853.75, &r), 0.6273955953485000827, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_sin_e, (1073741822.5, &r), -0.8284043541754465988, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_sin_e, (1073741824.0, &r), -0.6173264150460421708, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_sin_e, (1073741825.5, &r), 0.7410684679436226926, TEST_SQRT_TOL0, GSL_SUCCESS); /* TEST_SF(s, gsl_sf_sin_e, (1099511627776.0, &r), -0.4057050115328287198, 32.0*TEST_SQRT_TOL0, GSL_SUCCESS); */ TEST_SF(s, gsl_sf_cos_e, (-10.0, &r), -0.8390715290764524523, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_cos_e, (1.0, &r), 0.5403023058681397174, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_cos_e, (1000.0, &r), 0.5623790762907029911, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_cos_e, (1048576.75, &r), 0.4652971620066351799, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_cos_e, (62831853.75, &r), 0.7787006914966116436, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_cos_e, (1073741822.5, &r), -0.5601305436977716102, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_cos_e, (1073741824.0, &r), 0.7867071229411881196, TEST_SQRT_TOL0, GSL_SUCCESS); /* TEST_SF(s, gsl_sf_cos_e, (1099511627776.0, &r), -0.9140040719915570023, 128.0*TEST_SQRT_TOL0, GSL_SUCCESS); */ TEST_SF(s, gsl_sf_sinc_e, (1.0/1024.0, &r), 0.9999984312693665404, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_sinc_e, (1.0/2.0, &r), 2.0/M_PI, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_sinc_e, (80.5, &r), 0.0039541600768172754, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_sinc_e, (100.5, &r), 0.0031672625490924445, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_sinc_e, (1.0e+06 + 0.5, &r), 3.18309727028927157e-07, TEST_TOL0, GSL_SUCCESS); /* TEST_SF(s, gsl_sf_sin_pi_x_e, (1000.5, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_sin_pi_x_e, (10000.0 + 1.0/65536.0, &r), 0.00004793689960306688455, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_sin_pi_x_e, (1099511627776.0 + 1 + 0.125, &r), -0.3826834323650897717, TEST_TOL0, GSL_SUCCESS); */ TEST_SF_2(s, gsl_sf_complex_sin_e, (1.0, 5.0, &r1, &r2), 62.44551846769653403, TEST_TOL0, 40.09216577799840254, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_cos_e, (1.0, 5.0, &r1, &r2), 40.09580630629882573, TEST_TOL0, -62.43984868079963017, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_logsin_e, (1.0, 100.0, &r1, &r2), 99.3068528194400546900, TEST_TOL0, 0.5707963267948966192, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_logsin_e, (1.0, -100.0, &r1, &r2), 99.3068528194400546900, TEST_TOL1, -0.5707963267948966192, TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_complex_logsin_e, (5.0, 5.0, &r1, &r2), 4.3068909128079757420, TEST_TOL0, 2.8540063315538773952, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnsinh_e, (0.1, &r), -2.3009189815304652235, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnsinh_e, (1.0, &r), 0.16143936157119563361, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnsinh_e, (5.0, &r), 4.306807418479684201, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnsinh_e, (100.0, &r), 99.30685281944005469, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lncosh_e, (0.125, &r), 0.007792239318898252791, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lncosh_e, (1.0, &r), 0.4337808304830271870, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lncosh_e, (5.0, &r), 4.306898218339271555, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lncosh_e, (100.0, &r), 99.30685281944005469, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lncosh_e, (1000.0, &r), 999.30685281944005469, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lncosh_e, (-0.125, &r), 0.007792239318898252791, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lncosh_e, (-1.0, &r), 0.4337808304830271870, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lncosh_e, (-5.0, &r), 4.306898218339271555, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lncosh_e, (-100.0, &r), 99.30685281944005469, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lncosh_e, (-1000.0, &r), 999.30685281944005469, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_polar_to_rect, (10.0, M_PI/6.0, &r1, &r2), (10.0 * sqrt(3) / 2.0), TEST_TOL0, (10.0 * 0.5), TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_polar_to_rect, (10.0, -2.0/3.0*M_PI, &r1, &r2), (10.0 * (-0.5)), TEST_TOL1, (10.0 * (-sqrt(3.0)/2.0)), TEST_TOL1, GSL_SUCCESS); /* In double precision M_PI = \pi - 1.2246467991473531772e-16, i.e. the nearest machine number is slightly below the exact value of \pi. The true value of \pi satisfies M_PI < \pi < nextafter(M_PI,+Inf) where nextafter(M_PI,+Inf) = M_PI + 2*DBL_EPSILON This also means that 2*M_PI is less than \pi by 2.449e-16. The true value of 2\pi satisfies 2*M_PI < 2\pi < nextafter(2*M_PI,+Inf) where nextafter(2*M_PI,+Inf) = 2*M_PI + 4*DBL_EPSILON BJG 25/9/06 */ #define DELTA (1.2246467991473531772e-16) TEST_SF_THETA(s, gsl_sf_angle_restrict_pos_e, (2.0*M_PI), 2*M_PI, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_pos_e, (-2.0*M_PI), 2*DELTA, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_pos_e, (2.0*M_PI+4*GSL_DBL_EPSILON), 4*GSL_DBL_EPSILON-2*DELTA, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_pos_e, (-2.0*M_PI-4*GSL_DBL_EPSILON), 2*M_PI-4*GSL_DBL_EPSILON+2*DELTA, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_pos_e, (4.0*M_PI+8*GSL_DBL_EPSILON), 8*GSL_DBL_EPSILON-4*DELTA, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_pos_e, (-4.0*M_PI-8*GSL_DBL_EPSILON), 2*M_PI-8*GSL_DBL_EPSILON+4*DELTA, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_pos_e, (1e9), 0.5773954235013851694, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_pos_e, (1e12), 5.625560548042800009446, TEST_SNGL); TEST_SF_THETA(s, gsl_sf_angle_restrict_pos_e, (-1e9), 5.7057898836782013075, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_pos_e, (-1e12), 0.6576247591367864674792517289, 100*TEST_SNGL); #ifdef EXTENDED TEST_SF_THETA(s, gsl_sf_angle_restrict_pos_e, (1e15), 2.1096981170701125979, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_pos_e, (-1e15), 4.1734871901094738790, TEST_TOL1); #endif TEST_SF(s, gsl_sf_angle_restrict_pos_err_e, (2.0*M_PI, &r), 2*M_PI, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_angle_restrict_pos_err_e, (-2.0*M_PI, &r), 2*DELTA, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_angle_restrict_pos_err_e, (1e9, &r), 0.5773954235013851694, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_angle_restrict_pos_err_e, (1e12, &r), 5.625560548042800009446, TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_angle_restrict_pos_err_e, (-1e9, &r), 5.7057898836782013075, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_angle_restrict_pos_err_e, (-1e12, &r), 0.6576247591367864674792517289, 100*TEST_SNGL, GSL_SUCCESS); TEST_SF (s, gsl_sf_angle_restrict_pos_err_e, (1e15, &r), GSL_NAN, TEST_TOL1, GSL_ELOSS); TEST_SF (s, gsl_sf_angle_restrict_pos_err_e, (-1e15, &r), GSL_NAN, TEST_TOL1, GSL_ELOSS); TEST_SF_THETA(s, gsl_sf_angle_restrict_symm_e, (2.0*M_PI), -2*DELTA, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_symm_e, (-2.0*M_PI), 2*DELTA, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_symm_e, (M_PI), M_PI, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_symm_e, (-M_PI), -M_PI, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_symm_e, (M_PI+2*GSL_DBL_EPSILON), -M_PI+2*(GSL_DBL_EPSILON-DELTA), TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_symm_e, (-M_PI-2*GSL_DBL_EPSILON), M_PI-2*(GSL_DBL_EPSILON-DELTA), TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_symm_e, (3*M_PI+6*GSL_DBL_EPSILON), -M_PI+6*GSL_DBL_EPSILON-4*DELTA, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_symm_e, (-3*M_PI-6*GSL_DBL_EPSILON), M_PI-6*GSL_DBL_EPSILON+4*DELTA, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_symm_e, (1e9), 0.5773954235013851694, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_symm_e, (1e12), -0.6576247591367864674792517289, 100*TEST_SNGL); TEST_SF_THETA(s, gsl_sf_angle_restrict_symm_e, (-1e9), -0.5773954235013851694, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_symm_e, (-1e12), 0.6576247591367864674792517289, 100*TEST_SNGL); #ifdef EXTENDED TEST_SF_THETA(s, gsl_sf_angle_restrict_symm_e, (1e15), 2.1096981170701125979, TEST_TOL1); TEST_SF_THETA(s, gsl_sf_angle_restrict_symm_e, (-1e15), -2.1096981170701125979, TEST_TOL1); #endif TEST_SF (s, gsl_sf_angle_restrict_symm_err_e, (2.0*M_PI, &r), -2*DELTA, TEST_TOL1, GSL_SUCCESS); TEST_SF (s, gsl_sf_angle_restrict_symm_err_e, (-2.0*M_PI, &r), 2*DELTA, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_angle_restrict_symm_err_e, (1e9, &r), 0.5773954235013851694, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_angle_restrict_symm_err_e, (1e12, &r), -0.6576247591367864674792517289, 100*TEST_SNGL, GSL_SUCCESS); TEST_SF(s, gsl_sf_angle_restrict_symm_err_e, (-1e9, &r), -0.5773954235013851694, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_angle_restrict_symm_err_e, (-1e12, &r), 0.6576247591367864674792517289, 100*TEST_SNGL, GSL_SUCCESS); TEST_SF (s, gsl_sf_angle_restrict_symm_err_e, (1e15, &r), GSL_NAN, TEST_TOL1, GSL_ELOSS); TEST_SF (s, gsl_sf_angle_restrict_symm_err_e, (-1e15, &r), GSL_NAN, TEST_TOL1, GSL_ELOSS); theta = 5.0*M_PI + 5*DELTA + M_PI/2.0; gsl_sf_angle_restrict_pos_e(&theta); sa = 0; sa += ( test_sf_frac_diff( theta, 3.0/2.0*M_PI ) > TEST_TOL0 ); gsl_test(sa, " gsl_angle_restrict_pos_e: theta = 11/2 Pi"); s += sa; theta = -5.0*M_PI - 5*DELTA - M_PI/2.0; gsl_sf_angle_restrict_pos_e(&theta); sa = 0; sa += ( test_sf_frac_diff( theta, M_PI/2.0 ) > 2.0*TEST_TOL0 ); gsl_test(sa, " gsl_angle_restrict_pos_e: theta = -11/2 Pi"); s += sa; theta = 50000.0 + 1.0/65536.0; gsl_sf_angle_restrict_pos_e(&theta); sa = 0; sa += ( test_sf_frac_diff( theta, 4.6945260308194656055 ) > TEST_TOL0 ); gsl_test(sa, " gsl_angle_restrict_pos_e: theta = 50000.0 + 1.0/65536.0"); s += sa; theta = 5000000.0 + 1.0/65536.0; gsl_sf_angle_restrict_pos_e(&theta); sa = 0; sa += ( test_sf_frac_diff( theta, 4.49537973053997376 ) > TEST_TOL0 ); gsl_test(sa, " gsl_angle_restrict_pos_e: theta = 5000000.0 + 1.0/65536.0"); s += sa; /* theta = 140737488355328.0; gsl_sf_angle_restrict_pos_e(&theta); sa = 0; sa += ( test_sf_frac_diff( theta, 3.20652300406795792638 ) > TEST_TOL0 ); gsl_test(sa, " gsl_angle_restrict_pos_e: theta = 2^47"); s += sa; */ theta = 5.0*M_PI + (5.5*DELTA + M_PI/2.0); gsl_sf_angle_restrict_symm_e(&theta); sa = 0; sa += ( test_sf_frac_diff( theta, -M_PI/2.0 ) > 2.0*TEST_TOL0 ); gsl_test(sa, " gsl_angle_restrict_symm_e: theta = 11/2 Pi"); s += sa; theta = -5.0*M_PI - (5.5*DELTA + M_PI/2.0); gsl_sf_angle_restrict_symm_e(&theta); sa = 0; sa += ( test_sf_frac_diff( theta, M_PI/2.0 ) > 2.0*TEST_TOL0 ); gsl_test(sa, " gsl_angle_restrict_symm_e: theta = -11/2 Pi"); s += sa; theta = 5.0*M_PI + 5*DELTA - M_PI/2.0; gsl_sf_angle_restrict_symm_e(&theta); sa = 0; sa += ( test_sf_frac_diff( theta, M_PI/2.0 ) > TEST_TOL0 ); gsl_test(sa, " gsl_angle_restrict_symm_e: theta = -9/2 Pi"); s += sa; theta = 3.0/2.0*M_PI + 3.0/2.0*DELTA; gsl_sf_angle_restrict_symm_e(&theta); sa = 0; sa += ( test_sf_frac_diff( theta, -M_PI/2.0 ) > TEST_TOL0 ); gsl_test(sa, " gsl_angle_restrict_symm_e: theta = 3/2 Pi"); s += sa; theta = -3.0/2.0*M_PI; gsl_sf_angle_restrict_symm_e(&theta); sa = 0; sa += ( test_sf_frac_diff( theta, M_PI/2.0 ) > TEST_TOL0 ); gsl_test(sa, " gsl_angle_restrict_symm_e: theta = -3/2 Pi"); s += sa; theta = 50000.0 + 1.0/65536.0; gsl_sf_angle_restrict_symm_e(&theta); sa = 0; sa += ( test_sf_frac_diff( theta, -1.5886592763601208714 ) > TEST_TOL0 ); gsl_test(sa, " gsl_angle_restrict_symm_e: theta = 50000.0 + 1.0/65536.0"); s += sa; return s; } /* I computed the values of zeta for s = -1e-10, 0, 1e-10 using the Jensen formula, zeta(s) = -1/2 + 1/(1-s) + integ(sin(s arctan(t))/((1+t^2)^(s/2)(exp(2pi*t)-1)), t, 0, inf) transforming the integral from a semi-infinite range to the range [0,pi/2] using the substitution t = tan(u). After Taylor expansion in s and numerical evaluation of the integrals this gave, zeta(s) = 1/2 + 1/(1-s) + (0.0810614667944862 +/- 2e-16) s + (-3.17822795429232e-3 +/- 2e-17) s^2 + .... for an expansion about s = 0 [BJG 7/01] */ int test_zeta(void) { gsl_sf_result r; int s = 0; TEST_SF(s, gsl_sf_zeta_int_e, (-61.0, &r), -3.30660898765775767257e+34, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_int_e, (-8, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_int_e, (-6, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_int_e, (-5.0, &r), -0.003968253968253968253968, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_int_e, (-4, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_int_e, (-3, &r), 1.0/120.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_int_e, (-2, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_int_e, (-1, &r), -1.0/12.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_int_e, ( 5.0, &r), 1.0369277551433699263313655, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_int_e, (31.0, &r), 1.0000000004656629065033784, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_int_e, (-61.0, &r), -3.30660898765775767257e+34, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_int_e, (-5.0, &r), -1.003968253968253968253968, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_int_e, (-8, &r), -1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_int_e, (-6, &r), -1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_int_e, (-4, &r), -1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_int_e, (-3, &r), -119.0/120.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_int_e, (-2, &r), -1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_int_e, (-1, &r), -13.0/12.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_int_e, ( 5.0, &r), 0.0369277551433699263313655, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_int_e, (31.0, &r), 0.0000000004656629065033784, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (-151, &r), 8.195215221831378294e+143, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (-51, &r), 9.68995788746359406565e+24, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (-5, &r), -0.003968253968253968253968, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (-8, &r), 0.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (-6, &r), 0.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (-4, &r), 0.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (-3, &r), 1.0/120.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (-2, &r), 0.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (-1, &r), -1.0/12.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (-0.5, &r), -0.207886224977354566017307, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (-1e-10, &r), -0.49999999990810614668948, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (0.0, &r), -0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (1e-10, &r), -0.50000000009189385333058, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (0.5, &r), -1.460354508809586812889499, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (1.0-1.0/1024.0, &r), -1023.4228554489429787, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (1.0+1.0/1048576, &r), 1.0485765772157343441e+06, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (5.0, &r), 1.036927755143369926331365, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zeta_e, (25.5, &r), 1.000000021074106110269959, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (-8, &r), -1.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (-6, &r), -1.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (-4, &r), -1.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (-3, &r), -119.0/120.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (-2, &r), -1.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (-1, &r), -13.0/12.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (-0.5, &r), -1.207886224977354566017307, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (-1e-10, &r), -1.49999999990810614668948, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (0.0, &r), -1.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (1e-10, &r), -1.50000000009189385333058, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (0.5, &r), -2.460354508809586812889499, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (2.0, &r), 0.64493406684822643647, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (3.0, &r), 0.20205690315959428540, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (5.0, &r), 0.0369277551433699263314, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (9.5, &r), 0.0014125906121736622712, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (10.5, &r), 0.000700842641736155219500, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (12.5, &r), 0.000173751733643178193390, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (13.5, &r), 0.000086686727462338155188, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (15.5, &r), 0.000021619904246069108133, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (16.5, &r), 0.000010803124900178547671, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_zetam1_e, (25.5, &r), 0.000000021074106110269959, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hzeta_e, (2, 1.0, &r), 1.6449340668482264365, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hzeta_e, (2, 10.0, &r), 0.1051663356816857461, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hzeta_e, (5, 1.0, &r), 1.0369277551433699263, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hzeta_e, (5, 10.0, &r), 0.000030413798676470276, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hzeta_e, (9, 0.1, &r), 1.0000000004253980e+09, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hzeta_e, (30, 0.5, &r), 1.0737418240000053e+09, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hzeta_e, (30, 0.9, &r), 2.3589824880264765e+01, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hzeta_e, (75, 0.25, &r), 1.4272476927059599e+45, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_int_e, (-91, &r), -4.945598888750002040e+94, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_int_e, (-51, &r), -4.363969073121683116e+40, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_int_e, (-5, &r), 0.25, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_int_e, (-1, &r), 0.25, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_int_e, ( 0, &r), 0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_int_e, ( 5, &r), 0.9721197704469093059, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_int_e, ( 6, &r), 0.9855510912974351041, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_int_e, ( 20, &r), 0.9999990466115815221, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_int_e, ( 1000, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_e, (-51.5, &r), -1.2524184036924703656e+41, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_e, (-5, &r), 0.25, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_e, (0.5, &r), 0.6048986434216303702, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_e, (0.999, &r), 0.6929872789683383574, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_e, (1.0, &r), 0.6931471805599453094, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_e, (1.0+1.0e-10, &r), 0.6931471805759321998, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_e, ( 5, &r), 0.9721197704469093059, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_e, ( 5.2, &r), 0.9755278712546684682, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_e, ( 6, &r), 0.9855510912974351041, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_eta_e, ( 20, &r), 0.9999990466115815221, TEST_TOL0, GSL_SUCCESS); return s; } int test_results(void) { int s = 0; gsl_sf_result_e10 re; gsl_sf_result r; re.val = -1.0; re.err = 0.5; re.e10 = 0; gsl_sf_result_smash_e(&re, &r); s += ( test_sf_frac_diff(r.val, -1.0) > TEST_TOL0 ); s += ( test_sf_frac_diff(r.err, 0.5) > TEST_TOL0 ); re.val = -1.0; re.err = 0.5; re.e10 = 10; gsl_sf_result_smash_e(&re, &r); s += ( test_sf_frac_diff(r.val, -1.0e+10) > TEST_TOL1 ); s += ( test_sf_frac_diff(r.err, 0.5e+10) > TEST_TOL1 ); re.val = 1.0; re.err = 0.5; re.e10 = 10000; s += ( gsl_sf_result_smash_e(&re, &r) != GSL_EOVRFLW ); re.val = 1.0; re.err = 0.5; re.e10 = -10000; s += ( gsl_sf_result_smash_e(&re, &r) != GSL_EUNDRFLW ); return s; } int main(int argc, char * argv[]) { gsl_ieee_env_setup (); gsl_set_error_handler_off (); gsl_test(test_airy(), "Airy Functions"); gsl_test(test_bessel(), "Bessel Functions"); gsl_test(test_clausen(), "Clausen Integral"); gsl_test(test_coulomb(), "Coulomb Wave Functions"); gsl_test(test_coupling(), "Coupling Coefficients"); gsl_test(test_dawson(), "Dawson Integral"); gsl_test(test_debye(), "Debye Functions"); gsl_test(test_dilog(), "Dilogarithm"); gsl_test(test_elementary(), "Elementary Functions (Misc)"); gsl_test(test_ellint(), "Elliptic Integrals"); gsl_test(test_jac(), "Elliptic Functions (Jacobi)"); gsl_test(test_erf(), "Error Functions"); gsl_test(test_exp(), "Exponential Functions"); gsl_test(test_expint(), "Exponential/Sine/Cosine Integrals"); gsl_test(test_fermidirac(), "Fermi-Dirac Functions"); gsl_test(test_gamma(), "Gamma Functions"); gsl_test(test_gegen(), "Gegenbauer Polynomials"); gsl_test(test_hermite(), "Hermite Functions"); gsl_test(test_hyperg(), "Hypergeometric Functions"); gsl_test(test_laguerre(), "Laguerre Polynomials"); gsl_test(test_lambert(), "Lambert W Functions"); gsl_test(test_legendre(), "Legendre Functions"); gsl_test(test_log(), "Logarithm"); gsl_test(test_mathieu(), "Mathieu Functions"); gsl_test(test_pow_int(), "Integer Powers"); gsl_test(test_psi(), "Psi Functions"); gsl_test(test_psi_complex(), "Psi Function for complex argument"); gsl_test(test_sincos_pi(), "sin_pi and cos_pi"); gsl_test(test_synch(), "Synchrotron Functions"); gsl_test(test_transport(), "Transport Functions"); gsl_test(test_trig(), "Trigonometric and Related Functions"); gsl_test(test_zeta(), "Zeta Functions"); gsl_test(test_results(), "Result Methods"); exit (gsl_test_summary()); } gsl/specfunc/bessel_I0.c0000644000175000017500000001416413536674414013517 0ustar eddedd/* specfunc/bessel_I0.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "error.h" #include "chebyshev.h" #include "cheb_eval.c" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* based on SLATEC besi0 */ /* chebyshev expansions series for bi0 on the interval 0. to 9.00000d+00 with weighted error 2.46e-18 log weighted error 17.61 significant figures required 17.90 decimal places required 18.15 series for ai0 on the interval 1.25000d-01 to 3.33333d-01 with weighted error 7.87e-17 log weighted error 16.10 significant figures required 14.69 decimal places required 16.76 series for ai02 on the interval 0. to 1.25000d-01 with weighted error 3.79e-17 log weighted error 16.42 significant figures required 14.86 decimal places required 17.09 */ static double bi0_data[12] = { -.07660547252839144951, 1.92733795399380827000, .22826445869203013390, .01304891466707290428, .00043442709008164874, .00000942265768600193, .00000014340062895106, .00000000161384906966, .00000000001396650044, .00000000000009579451, .00000000000000053339, .00000000000000000245 }; static cheb_series bi0_cs = { bi0_data, 11, -1, 1, 11 }; static double ai0_data[21] = { .07575994494023796, .00759138081082334, .00041531313389237, .00001070076463439, -.00000790117997921, -.00000078261435014, .00000027838499429, .00000000825247260, -.00000001204463945, .00000000155964859, .00000000022925563, -.00000000011916228, .00000000001757854, .00000000000112822, -.00000000000114684, .00000000000027155, -.00000000000002415, -.00000000000000608, .00000000000000314, -.00000000000000071, .00000000000000007 }; static cheb_series ai0_cs = { ai0_data, 20, -1, 1, 13 }; static double ai02_data[22] = { .05449041101410882, .00336911647825569, .00006889758346918, .00000289137052082, .00000020489185893, .00000002266668991, .00000000339623203, .00000000049406022, .00000000001188914, -.00000000003149915, -.00000000001321580, -.00000000000179419, .00000000000071801, .00000000000038529, .00000000000001539, -.00000000000004151, -.00000000000000954, .00000000000000382, .00000000000000176, -.00000000000000034, -.00000000000000027, .00000000000000003 }; static cheb_series ai02_cs = { ai02_data, 21, -1, 1, 11 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_I0_scaled_e(const double x, gsl_sf_result * result) { double y = fabs(x); /* CHECK_POINTER(result) */ if(y < 2.0 * GSL_SQRT_DBL_EPSILON) { result->val = 1.0 - y; result->err = 0.5*y*y; return GSL_SUCCESS; } else if(y <= 3.0) { const double ey = exp(-y); gsl_sf_result c; cheb_eval_e(&bi0_cs, y*y/4.5-1.0, &c); result->val = ey * (2.75 + c.val); result->err = GSL_DBL_EPSILON * fabs(result->val) + ey * c.err; return GSL_SUCCESS; } else if(y <= 8.0) { const double sy = sqrt(y); gsl_sf_result c; cheb_eval_e(&ai0_cs, (48.0/y-11.0)/5.0, &c); result->val = (0.375 + c.val) / sy; result->err = 2.0 * GSL_DBL_EPSILON * (0.375 + fabs(c.val)) / sy; result->err += c.err / sy; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double sy = sqrt(y); gsl_sf_result c; cheb_eval_e(&ai02_cs, 16.0/y-1.0, &c); result->val = (0.375 + c.val) / sy; result->err = 2.0 * GSL_DBL_EPSILON * (0.375 + fabs(c.val)) / sy; result->err += c.err / sy; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_bessel_I0_e(const double x, gsl_sf_result * result) { double y = fabs(x); /* CHECK_POINTER(result) */ if(y < 2.0 * GSL_SQRT_DBL_EPSILON) { result->val = 1.0; result->err = 0.5*y*y; return GSL_SUCCESS; } else if(y <= 3.0) { gsl_sf_result c; cheb_eval_e(&bi0_cs, y*y/4.5-1.0, &c); result->val = 2.75 + c.val; result->err = GSL_DBL_EPSILON * (2.75 + fabs(c.val)); result->err += c.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(y < GSL_LOG_DBL_MAX - 1.0) { const double ey = exp(y); gsl_sf_result b_scaled; gsl_sf_bessel_I0_scaled_e(x, &b_scaled); result->val = ey * b_scaled.val; result->err = ey * b_scaled.err + y*GSL_DBL_EPSILON*fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { OVERFLOW_ERROR(result); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_I0_scaled(const double x) { EVAL_RESULT(gsl_sf_bessel_I0_scaled_e(x, &result); ) } double gsl_sf_bessel_I0(const double x) { EVAL_RESULT(gsl_sf_bessel_I0_e(x, &result); ) } gsl/specfunc/sincos_pi.c0000644000175000017500000001701213536674414013673 0ustar eddedd/* specfunc/sincos_pi.c * * Copyright (C) 2017 Gerard Jungman, Konrad Griessinger (konradg@gmx.net) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* routines for computing sin(pi*x) and cos(pi*x), respectively, with argument reduction */ #include #include #include #include #include /* Any double precision number bigger than this is automatically an even integer. */ #define TWOBIG (2.0 / GSL_DBL_EPSILON) /* routine computing sin(pi*x) valid for |x| <= 0.25 using a Taylor expansion around the origin and otherwise a rational approximation from the reference below. Spot-checked to give around 2e-16 relative accuracy. */ /* I. Koren and O. Zinaty. Evaluating elementary functions in a numerical coprocessor based on rational approximations. IEEE Transactions on Computers, Vol.39, No.8, August 1990, pp 1030-1037. */ /* static int sin_pi_koren(const double x, gsl_sf_result *result) { result->val = 0.0; result->err = 0.0; if (16.0*fabs(x) < 1.0) { const double y = M_PI * x; const double a = y*y; result->val = y*(1.0 - a*(1.0 - a*(1.0 - a*(1.0 - a*(1.0 - a/110.0)/72.0)/42.0)/20.0)/6.0); } else { const double a0 = 1805490264.690988571178600370234394843221; const double a1 = -164384678.227499837726129612587952660511; const double a2 = 3664210.647581261810227924465160827365; const double a3 = -28904.140246461781357223741935980097; const double a4 = 76.568981088717405810132543523682; const double b0 = 2298821602.638922662086487520330827251172; const double b1 = 27037050.118894436776624866648235591988; const double b2 = 155791.388546947693206469423979505671; const double b3 = 540.567501261284024767779280700089; const double t = 16.0*x*x; result->val = 4.0*x*(((( a4*t + a3 )*t + a2 )*t + a1 )*t + a0)/(((( t + b3 )*t + b2 )*t + b1 )*t + b0); } result->err = GSL_DBL_EPSILON*fabs(result->val); return GSL_SUCCESS; } */ /* routine computing cos(pi*x) valid for |x| <= 0.25 using a Taylor expansion around the origin and otherwise a rational approximation from the reference below. Spot-checked to give around 2e-16 relative accuracy. */ /* I. Koren and O. Zinaty. Evaluating elementary functions in a numerical coprocessor based on rational approximations. IEEE Transactions on Computers, Vol.39, No.8, August 1990, pp 1030-1037. */ /* static int cos_pi_koren(const double x, gsl_sf_result *result) { result->val = 0.0; result->err = 0.0; if (20.0*fabs(x) < 1.0) { const double y = M_PI * x; const double a = y*y; result->val = 1.0 - 0.5*a*(1.0 - a*(1.0 - a*(1.0 - a*(1.0 - a/90.0)/56.0)/30.0)/12.0); } else { const double a0 = 1090157078.174871420428849017262549038606; const double a1 = -321324810.993150712401352959397648541681; const double a2 = 12787876.849523878944051885325593878177; const double a3 = -150026.206045948110568310887166405972; const double a4 = 538.333564203182661664319151379451; const double b0 = 1090157078.174871420428867295670039506886; const double b1 = 14907035.776643879767410969509628406502; const double b2 = 101855.811943661368302608146695082218; const double b3 = 429.772865107391823245671264489311; const double t = 16.0*x*x; result->val = (((( a4*t + a3 )*t + a2 )*t + a1 )*t + a0)/(((( t + b3 )*t + b2 )*t + b1 )*t + b0); } result->err = GSL_DBL_EPSILON*fabs(result->val); return GSL_SUCCESS; } */ /* routine computing sin(pi*x) using a Taylor expansion around the origin and otherwise the library function. */ static int sin_pi_taylor(const double x, gsl_sf_result *result) { result->val = 0.0; result->err = 0.0; if (16.0*fabs(x) < 1.0) { const double y = M_PI * x; const double a = y*y; result->val = y*(1.0 - a*(1.0 - a*(1.0 - a*(1.0 - a*(1.0 - a/110.0)/72.0)/42.0)/20.0)/6.0); } else { result->val = sin(M_PI*x); } result->err = GSL_DBL_EPSILON*fabs(result->val); return GSL_SUCCESS; } /* routine computing sin(pi*x) using a Taylor expansion around the origin and otherwise the library function. */ static int cos_pi_taylor(const double x, gsl_sf_result *result) { result->val = 0.0; result->err = 0.0; if (20.0*fabs(x) < 1.0) { const double y = M_PI * x; const double a = y*y; result->val = 1.0 - 0.5*a*(1.0 - a*(1.0 - a*(1.0 - a*(1.0 - a/90.0)/56.0)/30.0)/12.0); } else { result->val = cos(M_PI*x); } result->err = GSL_DBL_EPSILON*fabs(result->val); return GSL_SUCCESS; } int gsl_sf_sin_pi_e(const double x, gsl_sf_result *result) { double intx = 0.0, fracx = 0.0; long q; int sign = 1, status; result->val = 0.0; result->err = 0.0; fracx = modf(x,&intx); if (fracx == 0.0) return GSL_SUCCESS; if(fabs(intx) >= TWOBIG) return GSL_SUCCESS; /* to be sure. Actually should be covered by the line above */ q = ( ( (intx >= LONG_MIN) && (intx <= LONG_MAX) ) ? intx : fmod(intx, 2.0) ); sign = ( q % 2 ? -1 : 1 ); /* int sign = 1 - 2*((int)round(fmod(fabs(intx),2.0))); */ if (fabs(fracx) == 0.5) { /* probably unnecessary */ if (fracx < 0.0) sign = -sign; result->val = ( sign != 1 ? -1.0 : 1.0 ); return GSL_SUCCESS; } if (fabs(fracx) > 0.5) { sign = -sign; fracx = ( fracx > 0.0 ? fracx-1.0 : fracx+1.0 ); } status = 0; if (fracx > 0.25) { status = cos_pi_taylor((fracx-0.5), result); } else if (fracx < -0.25) { status = cos_pi_taylor((fracx+0.5), result); sign = -sign; } else { status = sin_pi_taylor(fracx, result); } if (sign != 1) result->val = -result->val; return status; } int gsl_sf_cos_pi_e(const double x, gsl_sf_result *result) { double intx = 0.0, fracx = 0.0; long q; int sign = 1, status; result->val = 0.0; result->err = 0.0; fracx = modf(x,&intx); if (fabs(fracx) == 0.5) return GSL_SUCCESS; if(fabs(intx) >= TWOBIG) { result->val = 1.0; return GSL_SUCCESS; } q = ( ( (intx >= LONG_MIN) && (intx <= LONG_MAX) ) ? intx : fmod(intx, 2.0) ); sign = ( q % 2 ? -1 : 1 ); /* int sign = 1 - 2*((int)round(fmod(fabs(intx),2.0))); */ if (fracx == 0.0) { /* probably unnecessary */ result->val = ( sign != 1 ? -1.0 : 1.0 ); return GSL_SUCCESS; } if (fabs(fracx) > 0.5) { sign = -sign; fracx = ( fracx > 0.0 ? fracx-1.0 : fracx+1.0 ); } status = 0; if (fracx > 0.25) { status = sin_pi_taylor((fracx-0.5), result); sign = -sign; } else if (fracx < -0.25) { status = sin_pi_taylor((fracx+0.5), result); } else { status = cos_pi_taylor(fracx, result); } if (sign != 1) result->val = -result->val; return status; } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_sin_pi(const double x) { EVAL_RESULT(gsl_sf_sin_pi_e(x, &result)); } double gsl_sf_cos_pi(const double x) { EVAL_RESULT(gsl_sf_cos_pi_e(x, &result)); } gsl/specfunc/log.c0000644000175000017500000001535013536674414012471 0ustar eddedd/* specfunc/log.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "error.h" #include "chebyshev.h" #include "cheb_eval.c" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* Chebyshev expansion for log(1 + x(t))/x(t) * * x(t) = (4t-1)/(2(4-t)) * t(x) = (8x+1)/(2(x+2)) * -1/2 < x < 1/2 * -1 < t < 1 */ static double lopx_data[21] = { 2.16647910664395270521272590407, -0.28565398551049742084877469679, 0.01517767255690553732382488171, -0.00200215904941415466274422081, 0.00019211375164056698287947962, -0.00002553258886105542567601400, 2.9004512660400621301999384544e-06, -3.8873813517057343800270917900e-07, 4.7743678729400456026672697926e-08, -6.4501969776090319441714445454e-09, 8.2751976628812389601561347296e-10, -1.1260499376492049411710290413e-10, 1.4844576692270934446023686322e-11, -2.0328515972462118942821556033e-12, 2.7291231220549214896095654769e-13, -3.7581977830387938294437434651e-14, 5.1107345870861673561462339876e-15, -7.0722150011433276578323272272e-16, 9.7089758328248469219003866867e-17, -1.3492637457521938883731579510e-17, 1.8657327910677296608121390705e-18 }; static cheb_series lopx_cs = { lopx_data, 20, -1, 1, 10 }; /* Chebyshev expansion for (log(1 + x(t)) - x(t))/x(t)^2 * * x(t) = (4t-1)/(2(4-t)) * t(x) = (8x+1)/(2(x+2)) * -1/2 < x < 1/2 * -1 < t < 1 */ static double lopxmx_data[20] = { -1.12100231323744103373737274541, 0.19553462773379386241549597019, -0.01467470453808083971825344956, 0.00166678250474365477643629067, -0.00018543356147700369785746902, 0.00002280154021771635036301071, -2.8031253116633521699214134172e-06, 3.5936568872522162983669541401e-07, -4.6241857041062060284381167925e-08, 6.0822637459403991012451054971e-09, -8.0339824424815790302621320732e-10, 1.0751718277499375044851551587e-10, -1.4445310914224613448759230882e-11, 1.9573912180610336168921438426e-12, -2.6614436796793061741564104510e-13, 3.6402634315269586532158344584e-14, -4.9937495922755006545809120531e-15, 6.8802890218846809524646902703e-16, -9.5034129794804273611403251480e-17, 1.3170135013050997157326965813e-17 }; static cheb_series lopxmx_cs = { lopxmx_data, 19, -1, 1, 9 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_log_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else { result->val = log(x); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_log_abs_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x == 0.0) { DOMAIN_ERROR(result); } else { result->val = log(fabs(x)); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_complex_log_e(const double zr, const double zi, gsl_sf_result * lnr, gsl_sf_result * theta) { /* CHECK_POINTER(lnr) */ /* CHECK_POINTER(theta) */ if(zr != 0.0 || zi != 0.0) { const double ax = fabs(zr); const double ay = fabs(zi); const double min = GSL_MIN(ax, ay); const double max = GSL_MAX(ax, ay); lnr->val = log(max) + 0.5 * log(1.0 + (min/max)*(min/max)); lnr->err = 2.0 * GSL_DBL_EPSILON * fabs(lnr->val); theta->val = atan2(zi, zr); theta->err = GSL_DBL_EPSILON * fabs(lnr->val); return GSL_SUCCESS; } else { DOMAIN_ERROR_2(lnr, theta); } } int gsl_sf_log_1plusx_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= -1.0) { DOMAIN_ERROR(result); } else if(fabs(x) < GSL_ROOT6_DBL_EPSILON) { const double c1 = -0.5; const double c2 = 1.0/3.0; const double c3 = -1.0/4.0; const double c4 = 1.0/5.0; const double c5 = -1.0/6.0; const double c6 = 1.0/7.0; const double c7 = -1.0/8.0; const double c8 = 1.0/9.0; const double c9 = -1.0/10.0; const double t = c5 + x*(c6 + x*(c7 + x*(c8 + x*c9))); result->val = x * (1.0 + x*(c1 + x*(c2 + x*(c3 + x*(c4 + x*t))))); result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(fabs(x) < 0.5) { double t = 0.5*(8.0*x + 1.0)/(x+2.0); gsl_sf_result c; cheb_eval_e(&lopx_cs, t, &c); result->val = x * c.val; result->err = fabs(x * c.err); return GSL_SUCCESS; } else { result->val = log(1.0 + x); result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_log_1plusx_mx_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= -1.0) { DOMAIN_ERROR(result); } else if(fabs(x) < GSL_ROOT5_DBL_EPSILON) { const double c1 = -0.5; const double c2 = 1.0/3.0; const double c3 = -1.0/4.0; const double c4 = 1.0/5.0; const double c5 = -1.0/6.0; const double c6 = 1.0/7.0; const double c7 = -1.0/8.0; const double c8 = 1.0/9.0; const double c9 = -1.0/10.0; const double t = c5 + x*(c6 + x*(c7 + x*(c8 + x*c9))); result->val = x*x * (c1 + x*(c2 + x*(c3 + x*(c4 + x*t)))); result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(fabs(x) < 0.5) { double t = 0.5*(8.0*x + 1.0)/(x+2.0); gsl_sf_result c; cheb_eval_e(&lopxmx_cs, t, &c); result->val = x*x * c.val; result->err = x*x * c.err; return GSL_SUCCESS; } else { const double lterm = log(1.0 + x); result->val = lterm - x; result->err = GSL_DBL_EPSILON * (fabs(lterm) + fabs(x)); return GSL_SUCCESS; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_log(const double x) { EVAL_RESULT(gsl_sf_log_e(x, &result)); } double gsl_sf_log_abs(const double x) { EVAL_RESULT(gsl_sf_log_abs_e(x, &result)); } double gsl_sf_log_1plusx(const double x) { EVAL_RESULT(gsl_sf_log_1plusx_e(x, &result)); } double gsl_sf_log_1plusx_mx(const double x) { EVAL_RESULT(gsl_sf_log_1plusx_mx_e(x, &result)); } gsl/specfunc/ChangeLog0000644000175000017500000006521713536674414013325 0ustar eddedd2011-10-10 Rhys Ulerich * hyperg_U.c (gsl_sf_hyperg_U_int_e,gsl_sf_hyperg_U_e): Always initialize the gsl_sf_result_e10 instances. Thanks to Victor Zverovich for the bug report and patch. 2011-10-10 Brian Gough * coupling.c (gsl_sf_coupling_3j_e): compute 3j factors using logs to allow larger range 2011-09-20 Brian Gough * coupling.c (triangle_selection_fails): extend triangle selection to handle all permutations (gsl_sf_coupling_3j_e): special case for (ja jb jc; 0 0 0) = 0 when ja+jb+jc=odd 2011-08-10 Brian Gough * mathieu_radfunc.c (gsl_sf_mathieu_Mc): set odd functions to zero for order=0, initialise fn to zero before use 2011-07-21 Brian Gough * mathieu_angfunc.c (gsl_sf_mathieu_se_array): handle the case where q=0 2011-07-15 Brian Gough * trig.c (gsl_sf_lncosh_e): handle x symmetrically for middle region 2010-11-11 Brian Gough * ellint.c (gsl_sf_ellint_RC_e, gsl_sf_ellint_RD_e) (gsl_sf_ellint_RF_e, gsl_sf_ellint_RJ_e): introduce a limit of 10000 iterations to avoid infinite loops * bessel_Knu.c (gsl_sf_bessel_Knu_scaled_e10_e): alternative version of Knu_scaled function to allow greater range for gsl_sf_bessel_lnKnu_e. 2010-10-29 Brian Gough * hyperg_U.c (hyperg_U_small_a_bgt0): corrected result->err for case where a==0.0 2010-08-31 Brian Gough * beta_inc.c (gsl_sf_beta_inc_e): ignore underflow error when term is subtracted from 1 2010-08-27 Brian Gough * hyperg_2F1.c (gsl_sf_hyperg_2F1_e): use ap and bp consistently in large c and large b cases, previously mixed a,b and ap,bp. 2010-04-15 Brian Gough * atanint.c (gsl_sf_atanint_e): added missing term 1/ax for large x 2010-02-25 Brian Gough * hyperg_U.c (hyperg_U_negx): handle the case where x<0 2010-01-23 Brian Gough * hyperg_1F1.c (gsl_sf_hyperg_1F1_e): use Kummer transformation for larger range of x when b>a and a<0 2009-07-17 Brian Gough * hyperg_U.c (hyperg_U_series): use a rearrangement of the factor in front of the series to avoid incorrect termination when the the leading term is zero. 2009-07-16 Brian Gough * poch.c (gsl_sf_lnpoch_sgn_e): handle negative and zero values of a, e.g. where gamma(a) and/or gamma(a+x) is infinite (gsl_sf_poch_e): handle the case where lnpoch_sgn returns GSL_NEGINF when the Pochhammer ratio is zero. * test_gamma.c (test_gamma): added tests for poch(a,x) with negative arguments 2009-07-12 Brian Gough * hyperg_U.c (hyperg_U_int_bge1): avoid using the series when 1+a-b is zero or a negative integer. 2009-07-11 Brian Gough * hyperg_U.c (gsl_sf_hyperg_U_int_e10_e, gsl_sf_hyperg_U_e10_e) (hyperg_U_origin, hyperg_U_int_origin): added special case for U(a,b,z=0). 2009-07-09 Brian Gough * mathieu_workspace.c (gsl_sf_mathieu_free): handle NULL argument in free 2009-05-13 Brian Gough * hyperg_2F1.c (gsl_sf_hyperg_2F1_e): fix condition on a and b when c is a negative integer (either a or b must cause cancellation of the series) 2009-01-14 Brian Gough * mathieu_workspace.c (gsl_sf_mathieu_alloc): increase number of terms * mathieu_charv.c (gsl_sf_mathieu_a): increase number of terms (gsl_sf_mathieu_b): increase number of terms 2008-12-04 Brian Gough * gamma_inc.c (gamma_inc_D): propagate cancellation error in (x-a)/x for x close to a 2008-12-03 Brian Gough * exp.c (exprel_n_CF): changed N to double, to allow non-integer usage for gamma_inc, double error factor to allow for two parameters in recurrence. (gsl_sf_exprel_n_CF_e): exported function to allow calls to exprel_n_CF * gamma_inc.c (gamma_inc_P_series): improved convergence condition using estimate of the remainder of the series, added continued fraction as a fallback, increased nmax to 10000 2008-08-26 Brian Gough * ellint.c (gsl_sf_ellint_Kcomp_e): corrected taylor expansion for k close to 1. 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2008-06-27 Brian Gough * legendre_poly.c (gsl_sf_legendre_array_size): removed inline version of this function in gsl_sf_legendre.h 2008-03-17 Brian Gough * hyperg_2F1.c (gsl_sf_hyperg_2F1_e): replace duplicate error check on stat3 by stat4 2008-03-15 Brian Gough * bessel.c (gsl_sf_bessel_Jnu_asympx_e): use full asymptotic series 2008-03-14 Brian Gough * bessel_j.c (gsl_sf_bessel_jl_e): increase error estimate by factor of 2 2008-02-09 Brian Gough * exp.c (gsl_sf_exp_e10_e): only use exponent e10 when standard exp() is out of range (gsl_sf_exp_mult_e10_e): add full set of error terms 2008-01-10 Brian Gough * hyperg_2F1.c (gsl_sf_hyperg_2F1_e): handle case of x==1 2007-10-25 Brian Gough * bessel.c (gsl_sf_bessel_J_CF1): handle underflow by rescaling in recurrence 2007-09-13 Brian Gough * ellint.c (gsl_sf_ellint_Pcomp_e): remove test for n <1, no restriction needed 2007-09-10 Brian Gough * expint.c (gsl_sf_expint_En_e): added for support En(x) (gsl_sf_expint_En_scaled_e): added for support En(x) scaled * gamma_inc.c (gamma_inc_CF): include finite precision of log term 2007-08-30 Brian Gough * psi.c (psi_complex_rhp): accumulate error, to allow for cancellation effects * beta.c (gsl_sf_lnbeta_sgn_e): added missing factor of 2 for error. 2007-08-27 Brian Gough * beta_inc.c (gsl_sf_beta_inc_e): handle cases where a<=0 or b<=0 2007-04-27 Brian Gough * lambert.c (halley_iteration): increase tolerance to prevent exceeding max iters due to finite precision 2007-04-04 Brian Gough * laguerre.c (gsl_sf_laguerre_n_e): use recursion for a=0 in addition to a>0 2007-02-17 Brian Gough * log.c (gsl_sf_log_e): removed HIDE_INLINE_STATIC * exp.c (gsl_sf_exp_e): removed HIDE_INLINE_STATIC 2007-02-14 Brian Gough * mathieu_charv.c: made solve_cubic static 2007-02-12 Brian Gough * mathieu_charv.c (figi): ensure that e[ii] is set when e2[ii]==0.0 and there is no error condition, as per the original eispack routine 2007-02-09 Brian Gough * ellint.c (gsl_sf_ellint_F_e): do argument reduction for phi>pi/2 (gsl_sf_ellint_E_e): do argument reduction for phi>pi/2 (gsl_sf_ellint_P_e): do argument reduction for phi>pi/2 (gsl_sf_ellint_D_e): do argument reduction for phi>pi/2 (gsl_sf_ellint_Dcomp_e): added complete D integral (gsl_sf_ellint_Pcomp_e): added complete P integral 2007-01-31 Brian Gough * beta.c (gsl_sf_lnbeta_sgn_e): added to support calculations with negative a,b (gsl_sf_lnbeta_e): rewritten in terms of gsl_sf_lnbeta_sgn_e (gsl_sf_beta_e): handle negative a,b * gamma.c (gsl_sf_lngamma_sgn_e): make error calculations an exact copy of gsl_sf_lngamma_e (these functions could be merged to avoid duplication) 2007-01-29 Brian Gough * test_legendre.c (test_legendre): added extra test cases for underflow 2007-01-26 Brian Gough * expint.c (expint_E2_impl): handle x==0.0 as a special case (expint_E2_impl): corrected error term * gsl_sf_log.h: removed inline version of log * gsl_sf_exp.h: removed inline version of exp 2007-01-23 Brian Gough * hyperg_1F1.c (hyperg_1F1_1_series): increase accuracy by factor of 4 in sum, tighter convergence condition, increase error estimate to allow for accumulated roundoff (hyperg_1F1_1): use series when |x| > |b| (gsl_sf_hyperg_1F1_e): only use Kummer when |x| < 100 otherwise exponential takes extreme value * hyperg.c (gsl_sf_hyperg_1F1_series_e): allow 10000 iterations in series to extend valid range (gsl_sf_hyperg_1F1_series_e): increase accuracy by factor of 4 in sum, tighter convergence condition 2007-01-19 Brian Gough * laguerre.c (laguerre_large_n): use the second term in the asymptotic expansion from Slater, p.73. 2007-01-17 Brian Gough * hyperg_1F1.c (hyperg_1F1_largebx): asymptotic expansion for large b and x, with |x|<|b| from Slater 4.3.7 (hyperg_1F1_1): use new asymptotic expansion for |x|<|b| (hyperg_1F1_small_a_bgt0): use new asymptotic expansion for |x|<|b| (hyperg_1F1_renorm_b0): add neglected terms in expansion for AS13.3.7 2007-01-14 Brian Gough * legendre_poly.c (gsl_sf_legendre_sphPlm_e): added explicit computation of error term to allow for case when final term is zero. 2007-01-12 Brian Gough * trig.c (gsl_sf_angle_restrict_symm_err_e): compute edge cases more reliably, return NaN when total loss of precision (gsl_sf_angle_restrict_pos_err_e): as above * legendre_poly.c (gsl_sf_legendre_Pl_e): improve error estimate for large l by including rounding error at each step of recurrence 2006-10-03 Brian Gough * poch.c (gsl_sf_lnpoch_e, gsl_sf_lnpoch_sgn_e): corrected result->val to 0.0 for x==0, previously returned incorrect value 1.0 2006-09-24 Brian Gough * laguerre.c (laguerre_large_n): work with small angles to avoid cancellation error, computer angular reduction exactly for integer eta. 2006-09-22 Brian Gough * zeta.c (gsl_sf_zeta_e): make sin_term exactly zero for negative even integers (gsl_sf_zetam1_int_e): return value is -1 for zetam1_int with negative even integers 2006-03-26 Brian Gough * fermi_dirac.c (fd_neg): initialize s to zero (avoid spurious warning from compiler) 2006-02-23 Brian Gough * coulomb.c (gsl_sf_coulomb_wave_FG_e): fixed sign of F_lam_min, covers case when k_lam_G is nonzero and F_lam_min and F_lam differ in sign. 2006-01-21 Brian Gough * synchrotron.c (gsl_sf_synchrotron_1_e): added first order correction term for the taylor expansion (gsl_sf_synchrotron_2_e): added first order correction term for the taylor expansion 2006-01-20 Brian Gough * bessel_j.c (gsl_sf_bessel_jl_e): limit the use of gsl_sf_bessel_Jnu_asympx_e to the range x>100*l*l to satisfy the requirement x>>l*l in the asymptotic expansion * bessel_In.c (gsl_sf_bessel_In_scaled_e): limit the use of gsl_sf_bessel_I_CF1_ser to the region where the continued converges with the allowed 20000 terms (|x|<1e7) 2005-12-20 Brian Gough * debye.c (gsl_sf_debye_5_e, gsl_sf_debye_6_e): added n=5,6 (R. J. Mathar) 2005-11-15 Brian Gough * dilog.c (dilog_xge0): fix calculation of error estimate 2005-08-04 Brian Gough * coulomb.c (gsl_sf_coulomb_wave_sphF_array): fix warning about variable shadowing for k 2005-07-29 Brian Gough * gamma_inc.c (gsl_sf_gamma_inc_Q_e): use continued fraction close to peak of the integrand x > a - sqrt(a) 2005-07-28 Brian Gough * elljac.c (gsl_sf_elljac_e): use separate iterations to avoid division by zero, new algorithm from Bulirsch avoids inverse trig functions. 2005-07-03 Brian Gough * legendre_poly.c (gsl_sf_legendre_sphPlm_e): compute exponential internally to avoid underflow error when calling gsl_sf_exp_err 2005-07-02 Brian Gough * bessel_i.c (gsl_sf_bessel_il_scaled_array): handle x==0 as a special case * bessel_k.c (gsl_sf_bessel_kl_scaled_array): added lmax==0 as a special case * bessel_y.c (gsl_sf_bessel_yl_array): added lmax==0 as a special case * transport.c (gsl_sf_transport_2_e): improve error estimate for small x 2005-06-26 Brian Gough * test_sf.c (test_jac): added tests over the full period for elljac functions 2005-05-23 Brian Gough * test_bessel.c (test_bessel): added test for steed(99,1,...) * legendre_H3d.c (legendre_H3d_CF1): use hypot (legendre_H3d_CF1_ser): use hypot (gsl_sf_legendre_H3d_e): use hypot (gsl_sf_legendre_H3d_e): use hypot (gsl_sf_legendre_H3d_array): use hypot * dilog.c (dilogc_unitdisk): use hypot * coulomb.c (gsl_sf_coulomb_CL_array): use hypot (coulomb_F_recur): use hypot (coulomb_G_recur): use hypot (coulomb_jwkb): use hypot (gsl_sf_coulomb_wave_F_array): use hypot (gsl_sf_coulomb_wave_FG_array): use hypot (gsl_sf_coulomb_wave_FGp_array): use hypot * bessel_j.c (gsl_sf_bessel_jl_steed_array): use hypot * bessel.c (gsl_sf_bessel_Inu_scaled_asymp_unif_e): use hypot (gsl_sf_bessel_Knu_scaled_asymp_unif_e): use hypot 2005-03-02 Brian Gough * coulomb_bound.c (gsl_sf_hydrogenicR_e): don't check for underflow when function is known to be zero (e.g. r=0 l>0 or at zeroes of the laguerre polynomial). 2004-12-29 Brian Gough * dilog.c (gsl_sf_complex_dilog_e): use const consistently in arguments of declaration and definition (gsl_sf_complex_dilog_xy_e): as above 2004-12-26 Brian Gough * gamma_inc.c (gamma_inc_D): improve error estimate for case of u=x/a to include cancellation errors and only use it when x < 0.5*a since the cancellation errors are significant for x/a ~ 1 2004-12-23 Brian Gough * gsl_sf_coupling.h: fixed declaration to gsl_sf_coupling_6j_INCORRECT instead of gsl_sf_coupling_INCORRECT_6j 2004-11-12 Brian Gough * psi.c (gsl_sf_psi_1): added missing function definition gsl_sf_psi_1 2004-10-11 Brian Gough * expint.c (gsl_sf_expint_Ei_scaled): fixed call to incorrect function gsl_sf_expint_Ei_e 2004-06-03 Brian Gough * psi.c (psi_n_xg0): added missing return type int 2003-11-30 Brian Gough * gsl_sf_log.h: added missing headers for inline functions 2003-08-11 Brian Gough * test_sf.c: added preprocessor definitions TEST_FACTOR and TEST_SIGMA to allow larger tolerances on released versions (to reduce the number of spurious bug reports). 2003-07-24 Brian Gough * gamma.c (gsl_sf_choose_e): declare k as unsigned int instead of int (gsl_sf_gamma_e): avoid shadowed declaration of sgn * bessel_sequence.c (gsl_sf_bessel_sequence_Jnu_e): declare i as size_t instead of int 2003-06-11 Brian Gough * coupling.c (gsl_sf_coupling_6j_INCORRECT_e): fixed typo in test for two_jf < 0 (gsl_sf_coupling_6j_e): moved the implementation from the INCORRECT function into the correct function 2003-06-05 Brian Gough * test_sf.c (test_coupling): added some regression tests for coupling functions 2003-06-02 Brian Gough * gamma_inc.c (gamma_inc_D): handle x10 as a special case 2003-04-18 Brian Gough * gamma.c (gsl_sf_gammainv_e): handle any singularities in gamma(x) up front and return zero directly 2003-04-12 Brian Gough * psi.c: changed value of psi(1,1) in table psi_1_table to be positive ((-)^2 * 1! * zeta(2)), in accordance with Abramowitz & Stegun 6.4.2. 2003-04-08 G. Jungman * erfc.c, gsl_sf_erf.h: added gsl_sf_hazard_e() and gsl_sf_hazard() functions 2003-04-07 G. Jungman * gamma_inc.c, gsl_sf_gamma.h: added gsl_sf_gamma_inc_e() and gsl_sf_gamma_inc(), implmentations of the non-normalized incomplete gamma function 2003-03-09 Brian Gough * gsl_sf_legendre.h: added missing const to formal parameter on gsl_sf_legendre_sphPlm_deriv_array 2003-01-25 Brian Gough * test_gamma.c (test_gamma): added a test for gamma_inc_P(10,1e-16) (BUG#12) Sat Sep 7 15:56:15 2002 Brian Gough * test_sf.h (TEST_FACTOR): include an overall factor in the test tolerances, otherwise there are too many bug reports for minor failures. Sun Sep 1 17:34:27 2002 Brian Gough * test_legendre.c (test_legendre): increased tolerance on test Sat Jul 13 23:11:37 2002 Brian Gough * ellint.c (gsl_sf_ellint_Kcomp_e): improved error estimate to take cancellation of y=1-k^2 into account near k=1 Sun Jul 7 21:39:12 2002 Brian Gough * test_bessel.c (test_bessel): increased tolerance on test of bessel_Jn_array Tue May 28 21:04:29 2002 Brian Gough * psi.c (gsl_sf_psi_1piy_e): changed log(y) to log(ay) since function is even and can be extended to negative y Mon Jan 28 19:02:42 2002 Brian Gough * gamma_inc.c (gamma_inc_Q_CF): express 'small' constant in terms of GSL_DBL_EPSILON (gamma_inc_Q_CF): patch for more reliable series from Hans Plesser Sat Jan 26 17:33:29 2002 Brian Gough * test_gamma.c (test_gamma): increased tolerance on a test * test_hyperg.c (test_hyperg): increased tolerance on a couple of tests Fri Jan 18 15:12:30 2002 Brian Gough * test_airy.c (test_airy): increased tolerance on test Tue Jan 8 14:31:04 2002 Brian Gough * test_legendre.c (test_legendre): increased tolerance by one level on _array tests * hyperg_1F1.c (hyperg_1F1_small_a_bgt0): fix branch for a==1 Fri Dec 7 12:38:40 2001 Brian Gough * laguerre.c (laguerre_n_cp): catch internal error, not global error * error.h (INTERNAL_OVERFLOW_ERROR): added internal error macros which do not call the error handler. Wed Dec 5 19:25:26 2001 Brian Gough * gamma.c (gamma_xgthalf): return gamma(x) exactly when x is an integer * hyperg_1F1.c (hyperg_1F1_ab_posint): fix bug in recurrence initialisation, as done for hyperg_1F1_ab_pos Thu Oct 18 11:37:25 2001 Brian Gough * coulomb.c (gsl_sf_coulomb_CL_array): renamed from gsl_sf_coulomb_CL_list for consistency Sat Oct 13 15:55:56 2001 Brian Gough * cheb_eval.c (cheb_eval_e): keep track of cancellation error to prevent underestimates of total error. Fri Oct 12 16:39:27 2001 Brian Gough * test_hyperg.c (test_hyperg): increased tolerance from TOL0 to TOL1 on one test to allow it to pass under different optimizations Thu Oct 11 14:21:34 2001 Brian Gough * gegenbauer.c (gsl_sf_gegenpoly_n_e): initialize variable gk to zero to avoid warning * bessel_i.c (gsl_sf_bessel_il_scaled_e): initialize variable iellm1 to zero to avoid warning * bessel_Jnu.c (gsl_sf_bessel_Jnu_e): initialize variable Ynp1 to zero to avoid warning * legendre_poly.c (gsl_sf_legendre_sphPlm_e): initialize variables p_ell, y_ell to zero to avoid warning Thu Sep 6 10:38:51 2001 Brian Gough * clausen.c: added missing initialiser to cheb_series struct * pow_int.c (gsl_sf_pow_int_e): handle the case x == 0, n < 0 * legendre_poly.c (gsl_sf_legendre_array_size): added missing static version of this inline function Wed Aug 15 20:18:43 2001 Brian Gough * hyperg_1F1.c (hyperg_1F1_ab_pos): fix bug in recurrence initialisation (hyperg_1F1_ab_neg): if all else fails, try the series. Wed Aug 8 19:55:34 2001 Brian Gough * test_sf.c (test_coupling): used analytic expressions for the exact values to problems with insufficient precision Thu Jul 12 15:25:04 2001 Brian Gough * test_legendre.c (test_legendre): corrected tests to use exact floating point arguments near singularities. * legendre_Qn.c (gsl_sf_legendre_Q0_e): removed unnecessary error terms that I added (gsl_sf_legendre_Q1_e): removed unnecessary error terms that I added Wed Jul 11 16:06:45 2001 Brian Gough * error.h: moved domain, overflow and underflow errors into macros, return Nan for domain error, Inf for overflow. Tue Jul 10 22:00:55 2001 Brian Gough * erfc.c (gsl_sf_log_erfc_e): introduce an additional log(erfc) branch to prevent loss of accuracy for small x * test_sf.c (test_zeta): increased tolerance on zeta function test to take into account differences in rounding 2001-07-10 Brian Gough * legendre_Qn.c (gsl_sf_legendre_Q0_e): use (log1p(x) - log1p(-x)) instead of log((1+x)/(1-x)), for accuracy (gsl_sf_legendre_Q1_e): use (log1p(x) - log1p(-x)) instead of log((1+x)/(1-x)), for accuracy (gsl_sf_legendre_Q0_e): improve error estimate near singular points (gsl_sf_legendre_Q1_e): improve error estimate near singular points (gsl_sf_legendre_Q0_e): fixed incorrect factor of 2 in asymptotic expansion * check.h (CHECK_UNDERFLOW): provide macro for checking results for underflow Fri Jul 6 20:16:19 2001 Brian Gough * zeta.c (riemann_zeta1m_slt0): added a function to compute zeta(1-s) without loss of accuracy for s near zero, as used by the reflection formula. This fixes a bug in the accuracy of results of zeta(-x) for small x, where loss of precision previously occurred by evaluating 1-x. 2001-07-06 Brian Gough * bessel_I0.c (gsl_sf_bessel_I0_scaled_e): added missing scaling factor of exp(-x) for case x<2sqrt(epsilon) Thu Jul 5 16:16:13 2001 Brian Gough * erfc.c (gsl_sf_erfc_e): corrected case of -10 * eval.h (EVAL_DOUBLE): avoid returning the status value as a numerical result 2001-06-28 Brian Gough * elementary.c (gsl_sf_multiply_e): use GSL_COERCE_DBL macro to deal with extended register problem * coupling.c: include stdlib.h for prototype of abs() Wed Jun 27 21:20:22 2001 Brian Gough * test_sf.c (test_fermidirac): increased tolerance on test of gsl_sf_fermi_dirac_int(9,500) by factor of two to allow for MSVC Tue Jun 26 12:10:17 2001 Brian Gough * gsl_sf_gamma.h: added const to prototype, to match function definition Sun May 6 13:01:01 2001 Brian Gough * test_sf.c: initialize message_buff to null string to prevent random segmentation faults * test_sf.h: simplified test macros to reduce stack usage Mon Apr 30 12:38:15 2001 Brian Gough * airy_zero.c bessel_zero.c: zeros are now counted using an unsigned int * poly.c: moved poly_eval function into poly/ directory Wed Apr 25 17:28:48 2001 Brian Gough * trig.c (gsl_sf_polar_to_rect): dropped _e from polar/rect conversion functions Tue Apr 24 17:05:22 2001 Brian Gough * split out chebyshev functions into their own cheb/ directory, leaving behind an internal cheb struct and cheb evaluation function. Mon Apr 23 10:21:06 2001 Brian Gough * changed tests for EFAULT into a commented-out macro, since EFAULT should only apply to invalid non-null pointers, but it might be useful to keep the tests around for debugging in this directory. * unified error handling conventions to _e for error handling functions and no suffix for plain functions, so _impl functions are no longer needed. 1999-08-02 Mark Galassi * fermi_dirac.c: took out the use of some "const int" constants which were being used to size arrays, since this is not portable (thanks to Bernd Petrovitsch for pointing this out). 1999-01-02 Mark Galassi * trig.c (gsl_sf_rect_to_polar_impl): introduced an #ifdef HAVE_HYPOT for systems that do not have the hypot() routine. Sun Feb 14 20:59:50 1999 Brian Gough * Makefile.am (include_HEADERS): added gsl_sf_result.h 1998-12-05 Mark Galassi * Makefile.am: t-erf.c was commented out, which is a problem (pointed out by automake-1.3b). Moved the commented-out t-erf.c line to the end of the long list of files. * legendre_poly.c (gsl_sf_legendre_Pl_impl): * legendre_con.c (gsl_sf_conicalP_xgt1_neg_mu_largetau_impl): added an ugly fix to the invocation of gsl_sf_bessel_Jn_impl() to give it two bogus arguments so that it builds. I hope Jerry fixes it up soon! * gsl_sf_airy.h: added an include of gsl_precision.h so that gsl_prec_t is defined. Tue Nov 17 17:29:31 1998 Brian Gough * added #include to all top-level source files * chebyshev.c (gsl_sf_cheb_eval_n): changed local gslMIN and gslMAX to the standard GSL_MIN and GSL_MAX macros Tue Aug 18 13:36:15 1998 Brian Gough * coulomb.c (C0sq): changed to using gsl_sf_expm1_impl instead of expm1, since the latter is a GNU extension. Mon Aug 3 14:43:16 1998 Brian Gough * bessel_amp_phase.h: undefined consts are now declared extern Mon Jul 13 12:40:27 1998 Brian Gough * gamma.c: changed all the factorial functions to take unsigned int arguments, since negative values are not allowed. (gsl_sf_choose): fixed off by one error in call to factorial. Sun Jul 12 13:21:41 1998 Brian Gough * gsl_sf_legendre.h, gsl_sf_poly.h, gsl_sf_pow_int.h: added HAVE_INLINE around some inline definitions in the header files * gamma.c: implemented the natural versions of gsl_sf_lnchoose and gsl_sf_choose. Wed Apr 15 21:27:48 1998 Brian Gough * added the return code as the second argument of GSL_WARNING, so we can filter on the error number or output a standard message for each one. 1998-02-02 Mark Galassi * Makefile.am (include_HEADERS): added gsl_specfunc.h so it gets into the distribution. (INCLUDES): added -I$(top_srcdir) so that bessel.c can find gsl_math.h gsl/specfunc/bessel_Jn.c0000644000175000017500000001171213536674414013612 0ustar eddedd/* specfunc/bessel_Jn.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "bessel.h" #include "bessel_amp_phase.h" #include "bessel_olver.h" #include /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_Jn_e(int n, double x, gsl_sf_result * result) { int sign = 1; if(n < 0) { /* reduce to case n >= 0 */ n = -n; if(GSL_IS_ODD(n)) sign = -sign; } if(x < 0.0) { /* reduce to case x >= 0. */ x = -x; if(GSL_IS_ODD(n)) sign = -sign; } /* CHECK_POINTER(result) */ if(n == 0) { gsl_sf_result b0; int stat_J0 = gsl_sf_bessel_J0_e(x, &b0); result->val = sign * b0.val; result->err = b0.err; return stat_J0; } else if(n == 1) { gsl_sf_result b1; int stat_J1 = gsl_sf_bessel_J1_e(x, &b1); result->val = sign * b1.val; result->err = b1.err; return stat_J1; } else { if(x == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(x*x < 10.0*(n+1.0)*GSL_ROOT5_DBL_EPSILON) { gsl_sf_result b; int status = gsl_sf_bessel_IJ_taylor_e((double)n, x, -1, 50, GSL_DBL_EPSILON, &b); result->val = sign * b.val; result->err = b.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return status; } else if(GSL_ROOT4_DBL_EPSILON * x > (n*n+1.0)) { int status = gsl_sf_bessel_Jnu_asympx_e((double)n, x, result); result->val *= sign; return status; } else if(n > 50) { int status = gsl_sf_bessel_Jnu_asymp_Olver_e((double)n, x, result); result->val *= sign; return status; } else if(x > 1000.0) { /* We need this to avoid feeding large x to CF1; note that * due to the above check, we know that n <= 50. */ int status = gsl_sf_bessel_Jnu_asympx_e((double)n, x, result); result->val *= sign; return status; } else { double ans; double err; double ratio; double sgn; int stat_b; int stat_CF1 = gsl_sf_bessel_J_CF1((double)n, x, &ratio, &sgn); /* backward recurrence */ double Jkp1 = GSL_SQRT_DBL_MIN * ratio; double Jk = GSL_SQRT_DBL_MIN; double Jkm1; int k; for(k=n; k>0; k--) { Jkm1 = 2.0*k/x * Jk - Jkp1; Jkp1 = Jk; Jk = Jkm1; } if(fabs(Jkp1) > fabs(Jk)) { gsl_sf_result b1; stat_b = gsl_sf_bessel_J1_e(x, &b1); ans = b1.val/Jkp1 * GSL_SQRT_DBL_MIN; err = b1.err/Jkp1 * GSL_SQRT_DBL_MIN; } else { gsl_sf_result b0; stat_b = gsl_sf_bessel_J0_e(x, &b0); ans = b0.val/Jk * GSL_SQRT_DBL_MIN; err = b0.err/Jk * GSL_SQRT_DBL_MIN; } result->val = sign * ans; result->err = fabs(err); return GSL_ERROR_SELECT_2(stat_CF1, stat_b); } } } int gsl_sf_bessel_Jn_array(int nmin, int nmax, double x, double * result_array) { /* CHECK_POINTER(result_array) */ if(nmin < 0 || nmax < nmin) { int n; for(n=nmax; n>=nmin; n--) { result_array[n-nmin] = 0.0; } GSL_ERROR ("domain error", GSL_EDOM); } else if(x == 0.0) { int n; for(n=nmax; n>=nmin; n--) { result_array[n-nmin] = 0.0; } if(nmin == 0) result_array[0] = 1.0; return GSL_SUCCESS; } else { gsl_sf_result r_Jnp1; gsl_sf_result r_Jn; int stat_np1 = gsl_sf_bessel_Jn_e(nmax+1, x, &r_Jnp1); int stat_n = gsl_sf_bessel_Jn_e(nmax, x, &r_Jn); int stat = GSL_ERROR_SELECT_2(stat_np1, stat_n); double Jnp1 = r_Jnp1.val; double Jn = r_Jn.val; double Jnm1; int n; if(stat == GSL_SUCCESS) { for(n=nmax; n>=nmin; n--) { result_array[n-nmin] = Jn; Jnm1 = -Jnp1 + 2.0*n/x * Jn; Jnp1 = Jn; Jn = Jnm1; } } else { for(n=nmax; n>=nmin; n--) { result_array[n-nmin] = 0.0; } } return stat; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_Jn(const int n, const double x) { EVAL_RESULT(gsl_sf_bessel_Jn_e(n, x, &result)); } gsl/specfunc/Makefile.am0000664000175000017500000000464314057135461013576 0ustar eddeddnoinst_LTLIBRARIES = libgslspecfunc.la pkginclude_HEADERS = gsl_sf.h gsl_sf_airy.h gsl_sf_bessel.h gsl_sf_clausen.h gsl_sf_coulomb.h gsl_sf_coupling.h gsl_sf_dawson.h gsl_sf_debye.h gsl_sf_dilog.h gsl_sf_elementary.h gsl_sf_ellint.h gsl_sf_elljac.h gsl_sf_erf.h gsl_sf_exp.h gsl_sf_expint.h gsl_sf_fermi_dirac.h gsl_sf_gamma.h gsl_sf_gegenbauer.h gsl_sf_hermite.h gsl_sf_hyperg.h gsl_sf_laguerre.h gsl_sf_lambert.h gsl_sf_legendre.h gsl_sf_log.h gsl_sf_mathieu.h gsl_sf_pow_int.h gsl_sf_psi.h gsl_sf_result.h gsl_sf_sincos_pi.h gsl_sf_synchrotron.h gsl_sf_transport.h gsl_sf_trig.h gsl_sf_zeta.h gsl_specfunc.h noinst_HEADERS = bessel_amp_phase.h bessel_olver.h bessel_temme.h bessel.h hyperg.h legendre.h eval.h chebyshev.h cheb_eval.c cheb_eval_mode.c check.h error.h legendre_source.c AM_CPPFLAGS = -I$(top_srcdir) libgslspecfunc_la_SOURCES = airy.c airy_der.c airy_zero.c atanint.c bessel.c bessel.h bessel_I0.c bessel_I1.c bessel_In.c bessel_Inu.c bessel_J0.c bessel_J1.c bessel_Jn.c bessel_Jnu.c bessel_K0.c bessel_K1.c bessel_Kn.c bessel_Knu.c bessel_Y0.c bessel_Y1.c bessel_Yn.c bessel_Ynu.c bessel_amp_phase.c bessel_amp_phase.h bessel_i.c bessel_j.c bessel_k.c bessel_olver.c bessel_temme.c bessel_y.c bessel_zero.c bessel_sequence.c beta.c beta_inc.c clausen.c coulomb.c coupling.c coulomb_bound.c dawson.c debye.c dilog.c elementary.c ellint.c elljac.c erfc.c exp.c expint.c expint3.c fermi_dirac.c gegenbauer.c gamma.c gamma_inc.c hermite.c hyperg_0F1.c hyperg_2F0.c hyperg_1F1.c hyperg_2F1.c hyperg_U.c hyperg.c inline.c laguerre.c lambert.c legendre_H3d.c legendre_P.c legendre_Qn.c legendre_con.c legendre_poly.c log.c mathieu_angfunc.c mathieu_charv.c mathieu_coeff.c mathieu_radfunc.c mathieu_workspace.c poch.c pow_int.c psi.c recurse.h result.c shint.c sincos_pi.c sinint.c synchrotron.c transport.c trig.c zeta.c TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_LDADD = libgslspecfunc.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../sort/libgslsort.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../complex/libgslcomplex.la ../poly/libgslpoly.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test_sf.c test_sf.h test_airy.c test_bessel.c test_coulomb.c test_dilog.c test_gamma.c test_hermite.c test_hyperg.c test_legendre.c test_mathieu.c test_sincos_pi.c gsl/specfunc/gsl_sf_dilog.h0000644000175000017500000001011313536674414014340 0ustar eddedd/* specfunc/gsl_sf_dilog.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_DILOG_H__ #define __GSL_SF_DILOG_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Real part of DiLogarithm(x), for real argument. * In Lewin's notation, this is Li_2(x). * * Li_2(x) = - Re[ Integrate[ Log[1-s] / s, {s, 0, x}] ] * * The function in the complex plane has a branch point * at z = 1; we place the cut in the conventional way, * on [1, +infty). This means that the value for real x > 1 * is a matter of definition; however, this choice does not * affect the real part and so is not relevant to the * interpretation of this implemented function. */ int gsl_sf_dilog_e(const double x, gsl_sf_result * result); double gsl_sf_dilog(const double x); /* DiLogarithm(z), for complex argument z = x + i y. * Computes the principal branch. * * Recall that the branch cut is on the real axis with x > 1. * The imaginary part of the computed value on the cut is given * by -Pi*log(x), which is the limiting value taken approaching * from y < 0. This is a conventional choice, though there is no * true standardized choice. * * Note that there is no canonical way to lift the defining * contour to the full Riemann surface because of the appearance * of a "hidden branch point" at z = 0 on non-principal sheets. * Experts will know the simple algebraic prescription for * obtaining the sheet they want; non-experts will not want * to know anything about it. This is why GSL chooses to compute * only on the principal branch. */ int gsl_sf_complex_dilog_xy_e( const double x, const double y, gsl_sf_result * result_re, gsl_sf_result * result_im ); /* DiLogarithm(z), for complex argument z = r Exp[i theta]. * Computes the principal branch, thereby assuming an * implicit reduction of theta to the range (-2 pi, 2 pi). * * If theta is identically zero, the imaginary part is computed * as if approaching from y > 0. For other values of theta no * special consideration is given, since it is assumed that * no other machine representations of multiples of pi will * produce y = 0 precisely. This assumption depends on some * subtle properties of the machine arithmetic, such as * correct rounding and monotonicity of the underlying * implementation of sin() and cos(). * * This function is ok, but the interface is confusing since * it makes it appear that the branch structure is resolved. * Furthermore the handling of values close to the branch * cut is subtle. Perhap this interface should be deprecated. */ int gsl_sf_complex_dilog_e( const double r, const double theta, gsl_sf_result * result_re, gsl_sf_result * result_im ); /* Spence integral; spence(s) := Li_2(1-s) * * This function has a branch point at 0; we place the * cut on (-infty,0). Because of our choice for the value * of Li_2(z) on the cut, spence(s) is continuous as * s approaches the cut from above. In other words, * we define spence(x) = spence(x + i 0+). */ int gsl_sf_complex_spence_xy_e( const double x, const double y, gsl_sf_result * real_sp, gsl_sf_result * imag_sp ); __END_DECLS #endif /* __GSL_SF_DILOG_H__ */ gsl/specfunc/legendre_source.c0000644000175000017500000004300413536674414015052 0ustar eddedd/* specfunc/legendre_source.c * * Copyright (C) 2009-2013 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* define various macros for functions below */ #define CONCAT2x(a,b) a ## _ ## b #define CONCAT3x(a,b,c) a ## _ ## b ## _ ## c #if defined(LEGENDRE) #define FUNCTION(dir,name) CONCAT2x(dir,name) #define OUTPUT result_array #define OUTPUT_ARG double result_array[] #elif defined(LEGENDRE_DERIV) #define FUNCTION(dir,name) CONCAT3x(dir,deriv,name) #define OUTPUT result_array, result_deriv_array #define OUTPUT_ARG double result_array[], double result_deriv_array[] #elif defined(LEGENDRE_DERIV_ALT) #define FUNCTION(dir,name) CONCAT3x(dir,deriv_alt,name) #define OUTPUT result_array, result_deriv_array #define OUTPUT_ARG double result_array[], double result_deriv_array[] #define LEGENDRE_DERIV #elif defined(LEGENDRE_DERIV2) #define FUNCTION(dir,name) CONCAT3x(dir,deriv2,name) #define OUTPUT result_array, result_deriv_array, result_deriv2_array #define OUTPUT_ARG double result_array[], double result_deriv_array[], double result_deriv2_array[] #define LEGENDRE_DERIV #elif defined(LEGENDRE_DERIV2_ALT) #define FUNCTION(dir,name) CONCAT3x(dir,deriv2_alt,name) #define OUTPUT result_array, result_deriv_array, result_deriv2_array #define OUTPUT_ARG double result_array[], double result_deriv_array[], double result_deriv2_array[] #define LEGENDRE_DERIV #define LEGENDRE_DERIV2 #define LEGENDRE_DERIV_ALT #endif static int FUNCTION (legendre, array_schmidt_e) (const size_t lmax, const double x, const double csphase, OUTPUT_ARG); static int FUNCTION(legendre, array_none_e) (const size_t lmax, const double x, const double csphase, OUTPUT_ARG); /* gsl_sf_legendre_array() Inputs: norm - normlization type lmax - maximum degree x - input argument result_array - (output) normalized P_{lm} result_deriv_array - (output) normalized P'_{lm} result_deriv2_array - (output) normalized P''_{lm} */ int FUNCTION (gsl_sf_legendre, array) (const gsl_sf_legendre_t norm, const size_t lmax, const double x, OUTPUT_ARG) { int s = FUNCTION (gsl_sf_legendre, array_e)(norm, lmax, x, 1.0, OUTPUT); return s; } /* gsl_sf_legendre_array_e() Inputs: norm - normlization type lmax - maximum degree x - input argument csphase - Condon-Shortley phase result_array - (output) normalized P_{lm} result_deriv_array - (output) normalized P'_{lm} result_deriv2_array - (output) normalized P''_{lm} */ int FUNCTION (gsl_sf_legendre, array_e) (const gsl_sf_legendre_t norm, const size_t lmax, const double x, const double csphase, OUTPUT_ARG) { int s; const size_t nlm = gsl_sf_legendre_nlm(lmax); #if !defined(LEGENDRE_DERIV_ALT) size_t i; #if defined(LEGENDRE_DERIV) || defined(LEGENDRE_DERIV2) const double u = sqrt((1.0 - x) * (1.0 + x)); const double uinv = 1.0 / u; #endif #if defined(LEGENDRE_DERIV2) const double uinv2 = uinv * uinv; #endif #endif double fac1 = 0.0, fac2 = 0.0; /* normalization factors */ if (norm == GSL_SF_LEGENDRE_NONE) { /* compute P_{lm}(x) */ s = FUNCTION(legendre,array_none_e)(lmax, x, csphase, OUTPUT); } else { /* compute S_{lm}(x) */ s = FUNCTION(legendre,array_schmidt_e)(lmax, x, csphase, OUTPUT); } #if !defined(LEGENDRE_DERIV_ALT) /* scale derivative arrays to recover P'(x) and P''(x) */ for (i = 0; i < nlm; ++i) { #if defined(LEGENDRE_DERIV2) double dp = result_deriv_array[i]; double d2p = result_deriv2_array[i]; result_deriv2_array[i] = (d2p - x * uinv * dp) * uinv2; #endif #if defined(LEGENDRE_DERIV) result_deriv_array[i] *= -uinv; #endif } #endif /* apply scaling for requested normalization */ if (norm == GSL_SF_LEGENDRE_SCHMIDT || norm == GSL_SF_LEGENDRE_NONE) { return s; } else if (norm == GSL_SF_LEGENDRE_SPHARM) { fac1 = 1.0 / sqrt(4.0 * M_PI); fac2 = 1.0 / sqrt(8.0 * M_PI); } else if (norm == GSL_SF_LEGENDRE_FULL) { fac1 = 1.0 / sqrt(2.0); fac2 = 1.0 / sqrt(4.0); } /* * common code for different normalizations * P_{l0} = fac1 * sqrt(2l + 1) * S_{l0} * P_{lm} = fac2 * sqrt(2l + 1) * S_{lm}, m > 0 */ { size_t l, m; size_t twoellp1 = 1; /* 2l + 1 */ double *sqrts = &(result_array[nlm]); for (l = 0; l <= lmax; ++l) { result_array[gsl_sf_legendre_array_index(l, 0)] *= sqrts[twoellp1] * fac1; #if defined(LEGENDRE_DERIV) result_deriv_array[gsl_sf_legendre_array_index(l, 0)] *= sqrts[twoellp1] * fac1; #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[gsl_sf_legendre_array_index(l, 0)] *= sqrts[twoellp1] * fac1; #endif for (m = 1; m <= l; ++m) { result_array[gsl_sf_legendre_array_index(l, m)] *= sqrts[twoellp1] * fac2; #if defined(LEGENDRE_DERIV) result_deriv_array[gsl_sf_legendre_array_index(l, m)] *= sqrts[twoellp1] * fac2; #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[gsl_sf_legendre_array_index(l, m)] *= sqrts[twoellp1] * fac2; #endif } twoellp1 += 2; } } return s; } /* legendre,array_schmidt_e() This routine computes Schmidt semi-normalized associated Legendre polynomials and their first and second derivatives. Inputs: lmax - maximum order x - legendre argument in [-1,1] csphase - -1.0 to include CS phase (-1)^m, 1.0 to not include result_array - (output) where to store P_{lm}(x) values result_deriv_array - (output) where to store d/dtheta P_{lm}(x) values result_deriv2_array - (output) where to store d^2/dtheta^2 P_{lm}(x) values */ static int FUNCTION(legendre, array_schmidt_e) (const size_t lmax, const double x, const double csphase, OUTPUT_ARG) { if (x > 1.0 || x < -1.0) { GSL_ERROR("x is outside [-1,1]", GSL_EDOM); } #if defined(LEGENDRE_DERIV) || defined(LEGENDRE_DERIV2) else if (fabs(x) == 1.0) { GSL_ERROR("x cannot equal 1 or -1 for derivative computation", GSL_EDOM); } #endif else if (csphase != 1.0 && csphase != -1.0) { GSL_ERROR("csphase has invalid value", GSL_EDOM); } else { const double eps = 1.0e-280; const double u = sqrt((1.0 - x) * (1.0 + x)); /* sin(theta) */ #if defined(LEGENDRE_DERIV) const double uinv = 1.0 / u; #endif #if defined(LEGENDRE_DERIV2) const double uinv2 = 1.0 / u / u; #endif #if defined(LEGENDRE_DERIV) || defined(LEGENDRE_DERIV2) const double xbyu = x * uinv; /* x / u */ #endif size_t l, m; size_t k, idxmm; double plm, /* eps * S(l,m) / u^m */ pmm; /* eps * S(m,m) / u^m */ double rescalem; double pm1, /* S(l-1,m) */ pm2; /* S(l-2,m) */ size_t nlm = gsl_sf_legendre_nlm(lmax); double *sqrts = &(result_array[nlm]); /* precompute square root factors for recurrence */ legendre_sqrts(lmax, sqrts); /* initial values S(0,0) and S(1,0) */ pm2 = 1.0; /* S(0,0) */ pm1 = x; /* S(1,0) */ result_array[0] = pm2; #if defined(LEGENDRE_DERIV) result_deriv_array[0] = 0.0; #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[0] = 0.0; #endif if (lmax == 0) return GSL_SUCCESS; result_array[1] = pm1; #if defined(LEGENDRE_DERIV) result_deriv_array[1] = -u; #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[1] = -x; #endif /* Compute S(l,0) for l=2..lmax, no scaling required */ k = 1; /* idx(1,0) */ for (l = 2; l <= lmax; ++l) { double linv = 1.0 / (double)l; k += l; /* idx(l,m) = idx(l-1,m) + l */ plm = (2.0 - linv) * x * pm1 - (1.0 - linv) * pm2; result_array[k] = plm; #if defined(LEGENDRE_DERIV) result_deriv_array[k] = uinv * l * (x * plm - pm1); #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[k] = -(double) l * (l + 1.0) * plm - xbyu * result_deriv_array[k]; #endif pm2 = pm1; pm1 = plm; } /* Compute S(m,m), S(m+1,m) and S(l,m) */ /* * pi_m = Prod_{i=2}^m sqrt[ (2m - 1) / (2m) ] * but pi_1 = 1.0, so initialize to sqrt(2) so that * the first m = 1 iteration of the loop will reset it * to 1.0. Starting with m = 2 it will begin accumulating * the correct terms. * * pmm = S(m,m) * eps / u^m = pi_m */ pmm = sqrt(2.0) * eps; rescalem = 1.0 / eps; idxmm = 0; /* tracks idx(m,m), initialize to idx(0,0) */ for (m = 1; m < lmax; ++m) { /* rescalem = u^m / eps */ rescalem *= u; /* * compute: * S(m,m) = u * sqrt((2m - 1) / (2m)) S(m-1,m-1) = u^m * pi_m * d_t S(m,m) = m * x / u * S(m,m) */ idxmm += m + 1; /* idx(m,m) = idx(m-1,m-1) + m + 1 */ pmm *= csphase * sqrts[2 * m - 1] / sqrts[2 * m]; /* S(m,m) * eps / u^m */ result_array[idxmm] = pmm * rescalem; #if defined(LEGENDRE_DERIV) result_deriv_array[idxmm] = m * xbyu * result_array[idxmm]; #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[idxmm] = m * (uinv2 * m - (m + 1.0)) * result_array[idxmm] - xbyu * result_deriv_array[idxmm]; #endif pm2 = pmm; /* * compute: * S(m+1,m) = sqrt(2 * m + 1) * x * S(m,m) * d_t S(m+1,m) = 1/u * ((m+1)*x*S(m+1,m) - sqrt(2*m+1)*S(m,m)) */ k = idxmm + m + 1; /* idx(m+1,m) = idx(m,m) + m + 1 */ pm1 = x * sqrts[2 * m + 1] * pm2; result_array[k] = pm1 * rescalem; #if defined(LEGENDRE_DERIV) result_deriv_array[k] = uinv * ((m + 1.0) * x * result_array[k] - sqrts[2 * m + 1] * result_array[idxmm]); #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[k] = (m * m * uinv2 - (m + 1.0) * (m + 2.0)) * result_array[k] - xbyu * result_deriv_array[k]; #endif /* compute S(l,m) for l=m+2...lmax */ for (l = m + 2; l <= lmax; ++l) { k += l; /* idx(l,m) = idx(l-1,m) + l */ plm = (2*l - 1) / sqrts[l + m] / sqrts[l - m] * x * pm1 - sqrts[l - m - 1] * sqrts[l + m - 1] / sqrts[l + m] / sqrts[l - m] * pm2; result_array[k] = plm * rescalem; #if defined(LEGENDRE_DERIV) result_deriv_array[k] = uinv * (l * x * result_array[k] - sqrts[l + m] * sqrts[l - m] * result_array[k - l]); #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[k] = (m * m * uinv2 - l * (l + 1.0)) * result_array[k] - xbyu * result_deriv_array[k]; #endif pm2 = pm1; pm1 = plm; } } /* for (m = 1; m < lmax; ++m) */ /* compute S(lmax,lmax) */ rescalem *= u; idxmm += m + 1; /* idx(lmax,lmax) */ pmm *= csphase * sqrts[2 * lmax - 1] / sqrts[2 * lmax]; result_array[idxmm] = pmm * rescalem; #if defined(LEGENDRE_DERIV) result_deriv_array[idxmm] = lmax * xbyu * result_array[idxmm]; #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[idxmm] = lmax * (uinv2 * lmax - (lmax + 1.0)) * result_array[idxmm] - xbyu * result_deriv_array[idxmm]; #endif return GSL_SUCCESS; } } /* legendre_array_none_e() This routine computes unnormalized associated Legendre polynomials and their derivatives. Inputs: lmax - maximum order x - legendre argument in [-1,1] csphase - -1.0 to include CS phase (-1)^m, 1.0 to not include result_array - (output) where to store P_{lm}(x) values result_deriv_array - (output) where to store d/dtheta P_{lm}(x) values result_deriv2_array - (output) where to store d^2/dtheta^2 P_{lm}(x) values */ static int FUNCTION(legendre, array_none_e) (const size_t lmax, const double x, const double csphase, OUTPUT_ARG) { if (x > 1.0 || x < -1.0) { GSL_ERROR("x is outside [-1,1]", GSL_EDOM); } #if defined(LEGENDRE_DERIV) || defined(LEGENDRE_DERIV2) else if (fabs(x) == 1.0) { GSL_ERROR("x cannot equal 1 or -1 for derivative computation", GSL_EDOM); } #endif else if (csphase != 1.0 && csphase != -1.0) { GSL_ERROR("csphase has invalid value", GSL_EDOM); } else { const double u = sqrt((1.0 - x) * (1.0 + x)); /* sin(theta) */ #if defined(LEGENDRE_DERIV) const double uinv = 1.0 / u; #endif #if defined(LEGENDRE_DERIV2) const double uinv2 = 1.0 / u / u; #endif #if defined(LEGENDRE_DERIV) || defined(LEGENDRE_DERIV2) const double xbyu = x * uinv; /* x / u */ #endif size_t l, m; size_t k, idxmm; double plm, pmm; double pm1, /* P(l-1,m) */ pm2; /* P(l-2,m) */ double twomm1; /* 2*m - 1 */ /* initial values P(0,0) and P(1,0) */ pm2 = 1.0; /* P(0,0) */ pm1 = x; /* P(1,0) */ result_array[0] = pm2; #if defined(LEGENDRE_DERIV) result_deriv_array[0] = 0.0; #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[0] = 0.0; #endif if (lmax == 0) return 0; result_array[1] = pm1; #if defined(LEGENDRE_DERIV) result_deriv_array[1] = -u; #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[1] = -x; #endif /* Compute P(l,0) */ k = 1; for (l = 2; l <= lmax; ++l) { k += l; plm = ((2*l - 1) * x * pm1 - (l - 1) * pm2) / (double) l; result_array[k] = plm; #if defined(LEGENDRE_DERIV) result_deriv_array[k] = -(double)l * (pm1 - x * plm) * uinv; #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[k] = -(double) l * (l + 1.0) * plm - xbyu * result_deriv_array[k]; #endif pm2 = pm1; pm1 = plm; } /* Compute P(m,m), P(m+1,m) and P(l,m) */ pmm = 1.0; twomm1 = -1.0; /* 2 * m - 1 */ idxmm = 0; /* tracks idx(m,m), initialize to idx(0,0) */ for (m = 1; m <= lmax - 1; ++m) { /* * compute * * P(m,m) = u * (2m - 1) P(m-1,m-1) * and * dP(m,m)/dtheta = m * x * P(m,m) / u */ idxmm += m + 1; twomm1 += 2.0; pmm *= csphase * u * twomm1; result_array[idxmm] = pmm; #if defined(LEGENDRE_DERIV) result_deriv_array[idxmm] = m * xbyu * pmm; #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[idxmm] = m * (uinv2 * m - (m + 1.0)) * result_array[idxmm] - xbyu * result_deriv_array[idxmm]; #endif pm2 = pmm; /* * compute * * P(m+1,m) = (2 * m + 1) * x * P(m,m) * and * dP(m+1,m)/dt = -[(2*m + 1) * P(m,m) - (m+1) * x * P(m+1,m)]/u */ k = idxmm + m + 1; pm1 = x * pmm * (2*m + 1); result_array[k] = pm1; #if defined(LEGENDRE_DERIV) result_deriv_array[k] = -uinv * ((2*m + 1) * pmm - (m + 1) * x * pm1); #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[k] = (m * m * uinv2 - (m + 1.0) * (m + 2.0)) * result_array[k] - xbyu * result_deriv_array[k]; #endif /* compute P(l,m) */ for (l = m + 2; l <= lmax; ++l) { k += l; plm = ((2*l - 1) * x * pm1 - (l + m - 1) * pm2) / (double) (l - m); result_array[k] = plm; #if defined(LEGENDRE_DERIV) result_deriv_array[k] = -uinv * ((l + m) * pm1 - l * x * plm); #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[k] = (m * m * uinv2 - l * (l + 1.0)) * result_array[k] - xbyu * result_deriv_array[k]; #endif pm2 = pm1; pm1 = plm; } } /* for (m = 1; m <= lmax - 1; ++m) */ /* compute P(lmax,lmax) */ idxmm += m + 1; twomm1 += 2.0; pmm *= csphase * u * twomm1; result_array[idxmm] = pmm; #if defined(LEGENDRE_DERIV) result_deriv_array[idxmm] = lmax * x * pmm * uinv; #endif #if defined(LEGENDRE_DERIV2) result_deriv2_array[idxmm] = lmax * (uinv2 * lmax - (lmax + 1.0)) * result_array[idxmm] - xbyu * result_deriv_array[idxmm]; #endif return GSL_SUCCESS; } } /* legendre_array_none_e() */ #undef FUNCTION #undef CONCAT2x #undef CONCAT3x #undef OUTPUT #undef OUTPUT_ARG #undef LEGENDRE_DERIV #undef LEGENDRE_DERIV2 #undef LEGENDRE_DERIV_ALT gsl/specfunc/gsl_sf_fermi_dirac.h0000644000175000017500000000652513536674414015522 0ustar eddedd/* specfunc/gsl_sf_fermi_dirac.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_FERMI_DIRAC_H__ #define __GSL_SF_FERMI_DIRAC_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Complete Fermi-Dirac Integrals: * * F_j(x) := 1/Gamma[j+1] Integral[ t^j /(Exp[t-x] + 1), {t,0,Infinity}] * * * Incomplete Fermi-Dirac Integrals: * * F_j(x,b) := 1/Gamma[j+1] Integral[ t^j /(Exp[t-x] + 1), {t,b,Infinity}] */ /* Complete integral F_{-1}(x) = e^x / (1 + e^x) * * exceptions: GSL_EUNDRFLW */ int gsl_sf_fermi_dirac_m1_e(const double x, gsl_sf_result * result); double gsl_sf_fermi_dirac_m1(const double x); /* Complete integral F_0(x) = ln(1 + e^x) * * exceptions: GSL_EUNDRFLW */ int gsl_sf_fermi_dirac_0_e(const double x, gsl_sf_result * result); double gsl_sf_fermi_dirac_0(const double x); /* Complete integral F_1(x) * * exceptions: GSL_EUNDRFLW, GSL_EOVRFLW */ int gsl_sf_fermi_dirac_1_e(const double x, gsl_sf_result * result); double gsl_sf_fermi_dirac_1(const double x); /* Complete integral F_2(x) * * exceptions: GSL_EUNDRFLW, GSL_EOVRFLW */ int gsl_sf_fermi_dirac_2_e(const double x, gsl_sf_result * result); double gsl_sf_fermi_dirac_2(const double x); /* Complete integral F_j(x) * for integer j * * exceptions: GSL_EUNDRFLW, GSL_EOVRFLW */ int gsl_sf_fermi_dirac_int_e(const int j, const double x, gsl_sf_result * result); double gsl_sf_fermi_dirac_int(const int j, const double x); /* Complete integral F_{-1/2}(x) * * exceptions: GSL_EUNDRFLW, GSL_EOVRFLW */ int gsl_sf_fermi_dirac_mhalf_e(const double x, gsl_sf_result * result); double gsl_sf_fermi_dirac_mhalf(const double x); /* Complete integral F_{1/2}(x) * * exceptions: GSL_EUNDRFLW, GSL_EOVRFLW */ int gsl_sf_fermi_dirac_half_e(const double x, gsl_sf_result * result); double gsl_sf_fermi_dirac_half(const double x); /* Complete integral F_{3/2}(x) * * exceptions: GSL_EUNDRFLW, GSL_EOVRFLW */ int gsl_sf_fermi_dirac_3half_e(const double x, gsl_sf_result * result); double gsl_sf_fermi_dirac_3half(const double x); /* Incomplete integral F_0(x,b) = ln(1 + e^(b-x)) - (b-x) * * exceptions: GSL_EUNDRFLW, GSL_EDOM */ int gsl_sf_fermi_dirac_inc_0_e(const double x, const double b, gsl_sf_result * result); double gsl_sf_fermi_dirac_inc_0(const double x, const double b); __END_DECLS #endif /* __GSL_SF_FERMI_DIRAC_H__ */ gsl/specfunc/expint3.c0000644000175000017500000000661513536674414013306 0ustar eddedd/* specfunc/expint3.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "error.h" #include "chebyshev.h" #include "cheb_eval.c" static double expint3_data[24] = { 1.269198414221126014, -0.248846446384140982, 0.80526220717231041e-01, -0.25772733251968330e-01, 0.7599878873073774e-02, -0.2030695581940405e-02, 0.490834586699330e-03, -0.107682239142021e-03, 0.21551726264290e-04, -0.3956705137384e-05, 0.6699240933896e-06, -0.105132180807e-06, 0.15362580199e-07, -0.20990960364e-08, 0.2692109538e-09, -0.325195242e-10, 0.37114816e-11, -0.4013652e-12, 0.412334e-13, -0.40338e-14, 0.3766e-15, -0.336e-16, 0.29e-17, -0.2e-18 }; static cheb_series expint3_cs = { expint3_data, 23, -1.0, 1.0, 15 }; static double expint3a_data[23] = { 1.9270464955068273729, -0.349293565204813805e-01, 0.14503383718983009e-02, -0.8925336718327903e-04, 0.70542392191184e-05, -0.6671727454761e-06, 0.724267589982e-07, -0.87825825606e-08, 0.11672234428e-08, -0.1676631281e-09, 0.257550158e-10, -0.41957888e-11, 0.7201041e-12, -0.1294906e-12, 0.24287e-13, -0.47331e-14, 0.95531e-15, -0.1991e-15, 0.428e-16, -0.94e-17, 0.21e-17, -0.5e-18, 0.1e-18 }; static cheb_series expint3a_cs = { expint3a_data, 22, -1.0, 1.0, 10 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_expint_3_e(const double x, gsl_sf_result * result) { const double val_infinity = 0.892979511569249211; /* CHECK_POINTER(result) */ if(x < 0.0) { DOMAIN_ERROR(result); } else if(x < 1.6*GSL_ROOT3_DBL_EPSILON) { result->val = x; result->err = 0.0; return GSL_SUCCESS; } else if(x <= 2.0) { const double t = x*x*x/4.0 - 1.0; gsl_sf_result result_c; cheb_eval_e(&expint3_cs, t, &result_c); result->val = x * result_c.val; result->err = x * result_c.err; return GSL_SUCCESS; } else if(x < pow(-GSL_LOG_DBL_EPSILON, 1.0/3.0)) { const double t = 16.0/(x*x*x) - 1.0; const double s = exp(-x*x*x)/(3.0*x*x); gsl_sf_result result_c; cheb_eval_e(&expint3a_cs, t, &result_c); result->val = val_infinity - result_c.val * s; result->err = val_infinity * GSL_DBL_EPSILON + s * result_c.err; return GSL_SUCCESS; } else { result->val = val_infinity; result->err = val_infinity * GSL_DBL_EPSILON; return GSL_SUCCESS; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_expint_3(double x) { EVAL_RESULT(gsl_sf_expint_3_e(x, &result)); } gsl/specfunc/gsl_sf_exp.h0000644000175000017500000000740713536674414014052 0ustar eddedd/* specfunc/gsl_sf_exp.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_EXP_H__ #define __GSL_SF_EXP_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Provide an exp() function with GSL semantics, * i.e. with proper error checking, etc. * * exceptions: GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_exp_e(const double x, gsl_sf_result * result); double gsl_sf_exp(const double x); /* Exp(x) * * exceptions: GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_exp_e10_e(const double x, gsl_sf_result_e10 * result); /* Exponentiate and multiply by a given factor: y * Exp(x) * * exceptions: GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_exp_mult_e(const double x, const double y, gsl_sf_result * result); double gsl_sf_exp_mult(const double x, const double y); /* Exponentiate and multiply by a given factor: y * Exp(x) * * exceptions: GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_exp_mult_e10_e(const double x, const double y, gsl_sf_result_e10 * result); /* exp(x)-1 * * exceptions: GSL_EOVRFLW */ int gsl_sf_expm1_e(const double x, gsl_sf_result * result); double gsl_sf_expm1(const double x); /* (exp(x)-1)/x = 1 + x/2 + x^2/(2*3) + x^3/(2*3*4) + ... * * exceptions: GSL_EOVRFLW */ int gsl_sf_exprel_e(const double x, gsl_sf_result * result); double gsl_sf_exprel(const double x); /* 2(exp(x)-1-x)/x^2 = 1 + x/3 + x^2/(3*4) + x^3/(3*4*5) + ... * * exceptions: GSL_EOVRFLW */ int gsl_sf_exprel_2_e(double x, gsl_sf_result * result); double gsl_sf_exprel_2(const double x); /* Similarly for the N-th generalization of * the above. The so-called N-relative exponential * * exprel_N(x) = N!/x^N (exp(x) - Sum[x^k/k!, {k,0,N-1}]) * = 1 + x/(N+1) + x^2/((N+1)(N+2)) + ... * = 1F1(1,1+N,x) */ int gsl_sf_exprel_n_e(const int n, const double x, gsl_sf_result * result); double gsl_sf_exprel_n(const int n, const double x); int gsl_sf_exprel_n_CF_e(const double n, const double x, gsl_sf_result * result); /* Exponentiate a quantity with an associated error. */ int gsl_sf_exp_err_e(const double x, const double dx, gsl_sf_result * result); /* Exponentiate a quantity with an associated error. */ int gsl_sf_exp_err_e10_e(const double x, const double dx, gsl_sf_result_e10 * result); /* Exponentiate and multiply by a given factor: y * Exp(x), * for quantities with associated errors. * * exceptions: GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_exp_mult_err_e(const double x, const double dx, const double y, const double dy, gsl_sf_result * result); /* Exponentiate and multiply by a given factor: y * Exp(x), * for quantities with associated errors. * * exceptions: GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_exp_mult_err_e10_e(const double x, const double dx, const double y, const double dy, gsl_sf_result_e10 * result); __END_DECLS #endif /* __GSL_SF_EXP_H__ */ gsl/specfunc/coupling.c0000644000175000017500000003411113536674414013524 0ustar eddedd/* specfunc/coupling.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include "error.h" inline static int locMax3(const int a, const int b, const int c) { int d = GSL_MAX(a, b); return GSL_MAX(d, c); } inline static int locMin3(const int a, const int b, const int c) { int d = GSL_MIN(a, b); return GSL_MIN(d, c); } inline static int locMin5(const int a, const int b, const int c, const int d, const int e) { int f = GSL_MIN(a, b); int g = GSL_MIN(c, d); int h = GSL_MIN(f, g); return GSL_MIN(e, h); } /* See: [Thompson, Atlas for Computing Mathematical Functions] */ static int delta(int ta, int tb, int tc, gsl_sf_result * d) { gsl_sf_result f1, f2, f3, f4; int status = 0; status += gsl_sf_fact_e((ta + tb - tc)/2, &f1); status += gsl_sf_fact_e((ta + tc - tb)/2, &f2); status += gsl_sf_fact_e((tb + tc - ta)/2, &f3); status += gsl_sf_fact_e((ta + tb + tc)/2 + 1, &f4); if(status != 0) { OVERFLOW_ERROR(d); } d->val = f1.val * f2.val * f3.val / f4.val; d->err = 4.0 * GSL_DBL_EPSILON * fabs(d->val); return GSL_SUCCESS; } static int triangle_selection_fails(int two_ja, int two_jb, int two_jc) { /* * enough to check the triangle condition for one spin vs. the other two */ return ( (two_jb < abs(two_ja - two_jc)) || (two_jb > two_ja + two_jc) || GSL_IS_ODD(two_ja + two_jb + two_jc) ); } static int m_selection_fails(int two_ja, int two_jb, int two_jc, int two_ma, int two_mb, int two_mc) { return ( abs(two_ma) > two_ja || abs(two_mb) > two_jb || abs(two_mc) > two_jc || GSL_IS_ODD(two_ja + two_ma) || GSL_IS_ODD(two_jb + two_mb) || GSL_IS_ODD(two_jc + two_mc) || (two_ma + two_mb + two_mc) != 0 ); } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_coupling_3j_e (int two_ja, int two_jb, int two_jc, int two_ma, int two_mb, int two_mc, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(two_ja < 0 || two_jb < 0 || two_jc < 0) { DOMAIN_ERROR(result); } else if ( triangle_selection_fails(two_ja, two_jb, two_jc) || m_selection_fails(two_ja, two_jb, two_jc, two_ma, two_mb, two_mc) ) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if ( two_ma == 0 && two_mb == 0 && two_mc == 0 && ((two_ja + two_jb + two_jc) % 4 == 2) ) { /* Special case for (ja jb jc; 0 0 0) = 0 when ja+jb+jc=odd */ result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { int jca = (-two_ja + two_jb + two_jc) / 2, jcb = ( two_ja - two_jb + two_jc) / 2, jcc = ( two_ja + two_jb - two_jc) / 2, jmma = ( two_ja - two_ma) / 2, jmmb = ( two_jb - two_mb) / 2, jmmc = ( two_jc - two_mc) / 2, jpma = ( two_ja + two_ma) / 2, jpmb = ( two_jb + two_mb) / 2, jpmc = ( two_jc + two_mc) / 2, jsum = ( two_ja + two_jb + two_jc) / 2, kmin = locMax3 (0, jpmb - jmmc, jmma - jpmc), kmax = locMin3 (jcc, jmma, jpmb), k, sign = GSL_IS_ODD (kmin - jpma + jmmb) ? -1 : 1, status = 0; double sum_pos = 0.0, sum_neg = 0.0, sum_err = 0.0; gsl_sf_result bc1, bc2, bc3, bcn1, bcn2, bcd1, bcd2, bcd3, bcd4, term, lnorm; status += gsl_sf_lnchoose_e (two_ja, jcc , &bcn1); status += gsl_sf_lnchoose_e (two_jb, jcc , &bcn2); status += gsl_sf_lnchoose_e (jsum+1, jcc , &bcd1); status += gsl_sf_lnchoose_e (two_ja, jmma, &bcd2); status += gsl_sf_lnchoose_e (two_jb, jmmb, &bcd3); status += gsl_sf_lnchoose_e (two_jc, jpmc, &bcd4); lnorm.val = 0.5 * (bcn1.val + bcn2.val - bcd1.val - bcd2.val - bcd3.val - bcd4.val - log(two_jc + 1.0)); lnorm.err = 0.5 * (bcn1.err + bcn2.err + bcd1.err + bcd2.err + bcd3.err + bcd4.err + GSL_DBL_EPSILON * log(two_jc + 1.0)); for (k = kmin; k <= kmax; k++) { status += gsl_sf_lnchoose_e (jcc, k, &bc1); status += gsl_sf_lnchoose_e (jcb, jmma - k, &bc2); status += gsl_sf_lnchoose_e (jca, jpmb - k, &bc3); status += gsl_sf_exp_err_e(bc1.val + bc2.val + bc3.val + lnorm.val, bc1.err + bc2.err + bc3.err + lnorm.err, &term); if (status != 0) { OVERFLOW_ERROR (result); } if (sign < 0) { sum_neg += term.val; } else { sum_pos += term.val; } sum_err += term.err; sign = -sign; } result->val = sum_pos - sum_neg; result->err = sum_err; result->err += 2.0 * GSL_DBL_EPSILON * (sum_pos + sum_neg); result->err += 2.0 * GSL_DBL_EPSILON * (kmax - kmin) * fabs(result->val); return GSL_SUCCESS; } } #ifndef GSL_DISABLE_DEPRECATED int gsl_sf_coupling_6j_INCORRECT_e(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf, gsl_sf_result * result) { return gsl_sf_coupling_6j_e(two_ja, two_jb, two_je, two_jd, two_jc, two_jf, result); } #endif int gsl_sf_coupling_6j_e(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if( two_ja < 0 || two_jb < 0 || two_jc < 0 || two_jd < 0 || two_je < 0 || two_jf < 0 ) { DOMAIN_ERROR(result); } else if( triangle_selection_fails(two_ja, two_jb, two_jc) || triangle_selection_fails(two_ja, two_je, two_jf) || triangle_selection_fails(two_jb, two_jd, two_jf) || triangle_selection_fails(two_je, two_jd, two_jc) ) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { gsl_sf_result n1; gsl_sf_result d1, d2, d3, d4, d5, d6; double norm; int tk, tkmin, tkmax; double phase; double sum_pos = 0.0; double sum_neg = 0.0; double sumsq_err = 0.0; int status = 0; status += delta(two_ja, two_jb, two_jc, &d1); status += delta(two_ja, two_je, two_jf, &d2); status += delta(two_jb, two_jd, two_jf, &d3); status += delta(two_je, two_jd, two_jc, &d4); if(status != GSL_SUCCESS) { OVERFLOW_ERROR(result); } norm = sqrt(d1.val) * sqrt(d2.val) * sqrt(d3.val) * sqrt(d4.val); tkmin = locMax3(0, two_ja + two_jd - two_jc - two_jf, two_jb + two_je - two_jc - two_jf); tkmax = locMin5(two_ja + two_jb + two_je + two_jd + 2, two_ja + two_jb - two_jc, two_je + two_jd - two_jc, two_ja + two_je - two_jf, two_jb + two_jd - two_jf); phase = GSL_IS_ODD((two_ja + two_jb + two_je + two_jd + tkmin)/2) ? -1.0 : 1.0; for(tk=tkmin; tk<=tkmax; tk += 2) { double term; double term_err; gsl_sf_result den_1, den_2; gsl_sf_result d1_a, d1_b; status = 0; status += gsl_sf_fact_e((two_ja + two_jb + two_je + two_jd - tk)/2 + 1, &n1); status += gsl_sf_fact_e(tk/2, &d1_a); status += gsl_sf_fact_e((two_jc + two_jf - two_ja - two_jd + tk)/2, &d1_b); status += gsl_sf_fact_e((two_jc + two_jf - two_jb - two_je + tk)/2, &d2); status += gsl_sf_fact_e((two_ja + two_jb - two_jc - tk)/2, &d3); status += gsl_sf_fact_e((two_je + two_jd - two_jc - tk)/2, &d4); status += gsl_sf_fact_e((two_ja + two_je - two_jf - tk)/2, &d5); status += gsl_sf_fact_e((two_jb + two_jd - two_jf - tk)/2, &d6); if(status != GSL_SUCCESS) { OVERFLOW_ERROR(result); } d1.val = d1_a.val * d1_b.val; d1.err = d1_a.err * fabs(d1_b.val) + fabs(d1_a.val) * d1_b.err; den_1.val = d1.val*d2.val*d3.val; den_1.err = d1.err * fabs(d2.val*d3.val); den_1.err += d2.err * fabs(d1.val*d3.val); den_1.err += d3.err * fabs(d1.val*d2.val); den_2.val = d4.val*d5.val*d6.val; den_2.err = d4.err * fabs(d5.val*d6.val); den_2.err += d5.err * fabs(d4.val*d6.val); den_2.err += d6.err * fabs(d4.val*d5.val); term = phase * n1.val / den_1.val / den_2.val; phase = -phase; term_err = n1.err / fabs(den_1.val) / fabs(den_2.val); term_err += fabs(term / den_1.val) * den_1.err; term_err += fabs(term / den_2.val) * den_2.err; if(term >= 0.0) { sum_pos += norm*term; } else { sum_neg -= norm*term; } sumsq_err += norm*norm * term_err*term_err; } result->val = sum_pos - sum_neg; result->err = 2.0 * GSL_DBL_EPSILON * (sum_pos + sum_neg); result->err += sqrt(sumsq_err / (0.5*(tkmax-tkmin)+1.0)); result->err += 2.0 * GSL_DBL_EPSILON * (tkmax - tkmin + 2.0) * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_coupling_RacahW_e(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf, gsl_sf_result * result) { int status = gsl_sf_coupling_6j_e(two_ja, two_jb, two_je, two_jd, two_jc, two_jf, result); int phase_sum = (two_ja + two_jb + two_jc + two_jd)/2; result->val *= ( GSL_IS_ODD(phase_sum) ? -1.0 : 1.0 ); return status; } int gsl_sf_coupling_9j_e(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf, int two_jg, int two_jh, int two_ji, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if( two_ja < 0 || two_jb < 0 || two_jc < 0 || two_jd < 0 || two_je < 0 || two_jf < 0 || two_jg < 0 || two_jh < 0 || two_ji < 0 ) { DOMAIN_ERROR(result); } else if( triangle_selection_fails(two_ja, two_jb, two_jc) || triangle_selection_fails(two_jd, two_je, two_jf) || triangle_selection_fails(two_jg, two_jh, two_ji) || triangle_selection_fails(two_ja, two_jd, two_jg) || triangle_selection_fails(two_jb, two_je, two_jh) || triangle_selection_fails(two_jc, two_jf, two_ji) ) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { int tk; int tkmin = locMax3(abs(two_ja-two_ji), abs(two_jh-two_jd), abs(two_jb-two_jf)); int tkmax = locMin3(two_ja + two_ji, two_jh + two_jd, two_jb + two_jf); double sum_pos = 0.0; double sum_neg = 0.0; double sumsq_err = 0.0; double phase; for(tk=tkmin; tk<=tkmax; tk += 2) { gsl_sf_result s1, s2, s3; double term; double term_err; int status = 0; status += gsl_sf_coupling_6j_e(two_ja, two_ji, tk, two_jh, two_jd, two_jg, &s1); status += gsl_sf_coupling_6j_e(two_jb, two_jf, tk, two_jd, two_jh, two_je, &s2); status += gsl_sf_coupling_6j_e(two_ja, two_ji, tk, two_jf, two_jb, two_jc, &s3); if(status != GSL_SUCCESS) { OVERFLOW_ERROR(result); } term = s1.val * s2.val * s3.val; term_err = s1.err * fabs(s2.val*s3.val); term_err += s2.err * fabs(s1.val*s3.val); term_err += s3.err * fabs(s1.val*s2.val); if(term >= 0.0) { sum_pos += (tk + 1) * term; } else { sum_neg -= (tk + 1) * term; } sumsq_err += ((tk+1) * term_err) * ((tk+1) * term_err); } phase = GSL_IS_ODD(tkmin) ? -1.0 : 1.0; result->val = phase * (sum_pos - sum_neg); result->err = 2.0 * GSL_DBL_EPSILON * (sum_pos + sum_neg); result->err += sqrt(sumsq_err / (0.5*(tkmax-tkmin)+1.0)); result->err += 2.0 * GSL_DBL_EPSILON * (tkmax-tkmin + 2.0) * fabs(result->val); return GSL_SUCCESS; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_coupling_3j(int two_ja, int two_jb, int two_jc, int two_ma, int two_mb, int two_mc) { EVAL_RESULT(gsl_sf_coupling_3j_e(two_ja, two_jb, two_jc, two_ma, two_mb, two_mc, &result)); } #ifndef GSL_DISABLE_DEPRECATED double gsl_sf_coupling_6j_INCORRECT(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf) { EVAL_RESULT(gsl_sf_coupling_6j_INCORRECT_e(two_ja, two_jb, two_jc, two_jd, two_je, two_jf, &result)); } #endif double gsl_sf_coupling_6j(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf) { EVAL_RESULT(gsl_sf_coupling_6j_e(two_ja, two_jb, two_jc, two_jd, two_je, two_jf, &result)); } double gsl_sf_coupling_RacahW(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf) { EVAL_RESULT(gsl_sf_coupling_RacahW_e(two_ja, two_jb, two_jc, two_jd, two_je, two_jf, &result)); } double gsl_sf_coupling_9j(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf, int two_jg, int two_jh, int two_ji) { EVAL_RESULT(gsl_sf_coupling_9j_e(two_ja, two_jb, two_jc, two_jd, two_je, two_jf, two_jg, two_jh, two_ji, &result)); } gsl/specfunc/test_sf.h0000644000175000017500000001125313536675317013365 0ustar eddedd/* specfunc/test_sf.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef TEST_SF_H #define TEST_SF_H #include #include #include #include double test_sf_frac_diff(double x1, double x2); int test_sf_check_result(char * message_buff, gsl_sf_result r, double val, double tol); int test_sf_check_val(char * message_buff, double rval, double val, double tol); int test_sf_check_return(char * message_buff, int val_return, int expected_return); int test_sf_check_result_relax(char * message_buff, gsl_sf_result r, double val, double tol); /* Include an overall test factor to allow for differences between compilers, otherwise there are too many bug reports on the released versions. Turn this value down to 1.0 for development purposes */ #ifndef TEST_FACTOR #ifdef RELEASED #define TEST_FACTOR 100.0 #else #define TEST_FACTOR 1.0 #endif #endif #ifndef TEST_SIGMA #ifdef RELEASED #define TEST_SIGMA 1.5 #else #define TEST_SIGMA 1.0 #endif #endif #define TEST_TOL0 (2.0*GSL_DBL_EPSILON) #define TEST_TOL1 (16.0*GSL_DBL_EPSILON) #define TEST_TOL2 (256.0*GSL_DBL_EPSILON) #define TEST_TOL3 (2048.0*GSL_DBL_EPSILON) #define TEST_TOL4 (16384.0*GSL_DBL_EPSILON) #define TEST_TOL5 (131072.0*GSL_DBL_EPSILON) #define TEST_TOL6 (1048576.0*GSL_DBL_EPSILON) #define TEST_SQRT_TOL0 (2.0*GSL_SQRT_DBL_EPSILON) #define TEST_SNGL (1.0e-06) #define TEST_SF_INCONS 1 #define TEST_SF_ERRNEG 2 #define TEST_SF_TOLBAD 4 #define TEST_SF_RETBAD 8 #define TEST_SF_ERRBAD 16 #define TEST_SF_ERRBIG 32 #define TEST_SF_EXPBAD 64 int test_sf (gsl_sf_result r, double val_in, double tol, int status, int expect_return, const char * desc); int test_sf_e10 (gsl_sf_result_e10 r, double val_in, int e10_in, double tol, int status, int expect_return, const char * desc); int test_sf_val (double val, double val_in, double tol, const char * desc); int test_sf_rlx (gsl_sf_result r, double val_in, double tol, int status, int expect_return, const char * desc); int test_sf_2 (gsl_sf_result r1, double val1, double tol1, gsl_sf_result r2, double val2, double tol2, int status, int expect_return, const char * desc); int test_sf_sgn (gsl_sf_result r, double sgn, double val_in, double tol, double expect_sgn, int status, int expect_return, const char * desc); int test_sf_return (int status, int expect_return, const char * desc); #define TEST_SF(stat, func, args, val_in, tol, expect_return) { int status = func args; stat += test_sf(r, val_in, tol, status, expect_return, #func #args); } #define TEST_SF_E10(stat, func, args, val_in, e10_in, tol, expect_return) { int status = func args; stat += test_sf_e10(re, val_in, e10_in, tol, status, expect_return, #func #args); } #define TEST_SF_VAL(stat, func, args, val_in, tol) { double val = func args; stat += test_sf_val(val, val_in, tol, #func #args); } #define TEST_SF_RLX(stat, func, args, val_in, tol, expect_return) { int status = func args; stat += test_sf_rlx(r, val_in, tol, status, expect_return, #func #args); } #define TEST_SF_2(stat, func, args, val1, tol1, val2, tol2, expect_return) { int status = func args; stat += test_sf_2(r1, val1, tol1, r2, val2, tol2, status, expect_return, #func #args); } #define TEST_SF_SGN(stat, func, args, val_in, tol, expect_sgn, expect_return) { int status = func args; stat += test_sf_sgn(r, sgn, val_in, tol, expect_sgn, status, expect_return, #func #args); } #define TEST_SF_THETA(stat, func, args, val_in, tol) { int status; theta=args; status = func (&theta); stat += test_sf_val(theta, val_in, tol, #func #args); } #define TEST_SF_RETURN(stat, func, args, expect_return) { int status = func args; stat += test_sf_return(status, expect_return, #func #args); } int test_airy(void); int test_bessel(void); int test_coulomb(void); int test_dilog(void); int test_gamma(void); int test_mathieu(void); int test_hermite(void); int test_hyperg(void); int test_legendre(void); int test_sincos_pi(void); #endif /* !TEST_SF_H */ gsl/specfunc/cheb_eval_mode.c0000644000175000017500000000125013536674414014616 0ustar eddeddstatic inline int cheb_eval_mode_e(const cheb_series * cs, const double x, gsl_mode_t mode, gsl_sf_result * result) { int j; double d = 0.0; double dd = 0.0; double y = (2.*x - cs->a - cs->b) / (cs->b - cs->a); double y2 = 2.0 * y; int eval_order; if(GSL_MODE_PREC(mode) == GSL_PREC_DOUBLE) eval_order = cs->order; else eval_order = cs->order_sp; for(j = eval_order; j>=1; j--) { double temp = d; d = y2*d - dd + cs->c[j]; dd = temp; } result->val = y*d - dd + 0.5 * cs->c[0]; result->err = GSL_DBL_EPSILON * fabs(result->val) + fabs(cs->c[eval_order]); return GSL_SUCCESS; } gsl/specfunc/sinint.c0000644000175000017500000002560713536674414013222 0ustar eddedd/* specfunc/sinint.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "error.h" #include "chebyshev.h" #include "cheb_eval.c" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* based on SLATEC r9sifg.f, W. Fullerton */ /* series for f1 on the interval 2.00000e-02 to 6.25000e-02 with weighted error 2.82e-17 log weighted error 16.55 significant figures required 15.36 decimal places required 17.20 */ static double f1_data[20] = { -0.1191081969051363610, -0.0247823144996236248, 0.0011910281453357821, -0.0000927027714388562, 0.0000093373141568271, -0.0000011058287820557, 0.0000001464772071460, -0.0000000210694496288, 0.0000000032293492367, -0.0000000005206529618, 0.0000000000874878885, -0.0000000000152176187, 0.0000000000027257192, -0.0000000000005007053, 0.0000000000000940241, -0.0000000000000180014, 0.0000000000000035063, -0.0000000000000006935, 0.0000000000000001391, -0.0000000000000000282 }; static cheb_series f1_cs = { f1_data, 19, -1, 1, 10 }; /* series for f2 on the interval 0.00000e+00 to 2.00000e-02 with weighted error 4.32e-17 log weighted error 16.36 significant figures required 14.75 decimal places required 17.10 */ static double f2_data[29] = { -0.0348409253897013234, -0.0166842205677959686, 0.0006752901241237738, -0.0000535066622544701, 0.0000062693421779007, -0.0000009526638801991, 0.0000001745629224251, -0.0000000368795403065, 0.0000000087202677705, -0.0000000022601970392, 0.0000000006324624977, -0.0000000001888911889, 0.0000000000596774674, -0.0000000000198044313, 0.0000000000068641396, -0.0000000000024731020, 0.0000000000009226360, -0.0000000000003552364, 0.0000000000001407606, -0.0000000000000572623, 0.0000000000000238654, -0.0000000000000101714, 0.0000000000000044259, -0.0000000000000019634, 0.0000000000000008868, -0.0000000000000004074, 0.0000000000000001901, -0.0000000000000000900, 0.0000000000000000432 }; static cheb_series f2_cs = { f2_data, 28, -1, 1, 14 }; /* series for g1 on the interval 2.00000e-02 to 6.25000e-02 with weighted error 5.48e-17 log weighted error 16.26 significant figures required 15.47 decimal places required 16.92 */ static double g1_data[21] = { -0.3040578798253495954, -0.0566890984597120588, 0.0039046158173275644, -0.0003746075959202261, 0.0000435431556559844, -0.0000057417294453025, 0.0000008282552104503, -0.0000001278245892595, 0.0000000207978352949, -0.0000000035313205922, 0.0000000006210824236, -0.0000000001125215474, 0.0000000000209088918, -0.0000000000039715832, 0.0000000000007690431, -0.0000000000001514697, 0.0000000000000302892, -0.0000000000000061400, 0.0000000000000012601, -0.0000000000000002615, 0.0000000000000000548 }; static cheb_series g1_cs = { g1_data, 20, -1, 1, 13 }; /* series for g2 on the interval 0.00000e+00 to 2.00000e-02 with weighted error 5.01e-17 log weighted error 16.30 significant figures required 15.12 decimal places required 17.07 */ static double g2_data[34] = { -0.0967329367532432218, -0.0452077907957459871, 0.0028190005352706523, -0.0002899167740759160, 0.0000407444664601121, -0.0000071056382192354, 0.0000014534723163019, -0.0000003364116512503, 0.0000000859774367886, -0.0000000238437656302, 0.0000000070831906340, -0.0000000022318068154, 0.0000000007401087359, -0.0000000002567171162, 0.0000000000926707021, -0.0000000000346693311, 0.0000000000133950573, -0.0000000000053290754, 0.0000000000021775312, -0.0000000000009118621, 0.0000000000003905864, -0.0000000000001708459, 0.0000000000000762015, -0.0000000000000346151, 0.0000000000000159996, -0.0000000000000075213, 0.0000000000000035970, -0.0000000000000017530, 0.0000000000000008738, -0.0000000000000004487, 0.0000000000000002397, -0.0000000000000001347, 0.0000000000000000801, -0.0000000000000000501 }; static cheb_series g2_cs = { g2_data, 33, -1, 1, 20 }; /* x >= 4.0 */ static void fg_asymp(const double x, gsl_sf_result * f, gsl_sf_result * g) { /* xbig = sqrt (1.0/r1mach(3)) xmaxf = exp (amin1(-alog(r1mach(1)), alog(r1mach(2))) - 0.01) xmaxg = 1.0/sqrt(r1mach(1)) xbnd = sqrt(50.0) */ const double xbig = 1.0/GSL_SQRT_DBL_EPSILON; const double xmaxf = 1.0/GSL_DBL_MIN; const double xmaxg = 1.0/GSL_SQRT_DBL_MIN; const double xbnd = 7.07106781187; const double x2 = x*x; if(x <= xbnd) { gsl_sf_result result_c1; gsl_sf_result result_c2; cheb_eval_e(&f1_cs, (1.0/x2-0.04125)/0.02125, &result_c1); cheb_eval_e(&g1_cs, (1.0/x2-0.04125)/0.02125, &result_c2); f->val = (1.0 + result_c1.val)/x; g->val = (1.0 + result_c2.val)/x2; f->err = result_c1.err/x + 2.0 * GSL_DBL_EPSILON * fabs(f->val); g->err = result_c2.err/x2 + 2.0 * GSL_DBL_EPSILON * fabs(g->val); } else if(x <= xbig) { gsl_sf_result result_c1; gsl_sf_result result_c2; cheb_eval_e(&f2_cs, 100.0/x2-1.0, &result_c1); cheb_eval_e(&g2_cs, 100.0/x2-1.0, &result_c2); f->val = (1.0 + result_c1.val)/x; g->val = (1.0 + result_c2.val)/x2; f->err = result_c1.err/x + 2.0 * GSL_DBL_EPSILON * fabs(f->val); g->err = result_c2.err/x2 + 2.0 * GSL_DBL_EPSILON * fabs(g->val); } else { f->val = (x < xmaxf ? 1.0/x : 0.0); g->val = (x < xmaxg ? 1.0/x2 : 0.0); f->err = 2.0 * GSL_DBL_EPSILON * fabs(f->val); g->err = 2.0 * GSL_DBL_EPSILON * fabs(g->val); } return; } /* based on SLATEC si.f, W. Fullerton series for si on the interval 0.00000e+00 to 1.60000e+01 with weighted error 1.22e-17 log weighted error 16.91 significant figures required 16.37 decimal places required 17.45 */ static double si_data[12] = { -0.1315646598184841929, -0.2776578526973601892, 0.0354414054866659180, -0.0025631631447933978, 0.0001162365390497009, -0.0000035904327241606, 0.0000000802342123706, -0.0000000013562997693, 0.0000000000179440722, -0.0000000000001908387, 0.0000000000000016670, -0.0000000000000000122 }; static cheb_series si_cs = { si_data, 11, -1, 1, 9 }; /* series for ci on the interval 0.00000e+00 to 1.60000e+01 with weighted error 1.94e-18 log weighted error 17.71 significant figures required 17.74 decimal places required 18.27 */ static double ci_data[13] = { -0.34004281856055363156, -1.03302166401177456807, 0.19388222659917082877, -0.01918260436019865894, 0.00110789252584784967, -0.00004157234558247209, 0.00000109278524300229, -0.00000002123285954183, 0.00000000031733482164, -0.00000000000376141548, 0.00000000000003622653, -0.00000000000000028912, 0.00000000000000000194 }; static cheb_series ci_cs = { ci_data, 12, -1, 1, 9 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_Si_e(const double x, gsl_sf_result * result) { double ax = fabs(x); /* CHECK_POINTER(result) */ if(ax < GSL_SQRT_DBL_EPSILON) { result->val = x; result->err = 0.0; return GSL_SUCCESS; } else if(ax <= 4.0) { gsl_sf_result result_c; cheb_eval_e(&si_cs, (x*x-8.0)*0.125, &result_c); result->val = x * (0.75 + result_c.val); result->err = ax * result_c.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { /* Note there is no loss of precision * here bcause of the leading constant. */ gsl_sf_result f; gsl_sf_result g; fg_asymp(ax, &f, &g); result->val = 0.5 * M_PI - f.val*cos(ax) - g.val*sin(ax); result->err = f.err + g.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); if(x < 0.0) result->val = -result->val; return GSL_SUCCESS; } } int gsl_sf_Ci_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if(x <= 4.0) { const double lx = log(x); const double y = (x*x-8.0)*0.125; gsl_sf_result result_c; cheb_eval_e(&ci_cs, y, &result_c); result->val = lx - 0.5 + result_c.val; result->err = 2.0 * GSL_DBL_EPSILON * (fabs(lx) + 0.5) + result_c.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { gsl_sf_result sin_result; gsl_sf_result cos_result; int stat_sin = gsl_sf_sin_e(x, &sin_result); int stat_cos = gsl_sf_cos_e(x, &cos_result); gsl_sf_result f; gsl_sf_result g; fg_asymp(x, &f, &g); result->val = f.val*sin_result.val - g.val*cos_result.val; result->err = fabs(f.err*sin_result.val); result->err += fabs(g.err*cos_result.val); result->err += fabs(f.val*sin_result.err); result->err += fabs(g.val*cos_result.err); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_sin, stat_cos); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_Si(const double x) { EVAL_RESULT(gsl_sf_Si_e(x, &result)); } double gsl_sf_Ci(const double x) { EVAL_RESULT(gsl_sf_Ci_e(x, &result)); } gsl/specfunc/bessel_sequence.c0000644000175000017500000001026313536674414015053 0ustar eddedd/* specfunc/bessel_sequence.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #define DYDX_p(p,u,x) (-(p)/(x) + (((nu)*(nu))/((x)*(x))-1.0)*(u)) #define DYDX_u(p,u,x) (p) static int rk_step(double nu, double x, double dx, double * Jp, double * J) { double p_0 = *Jp; double u_0 = *J; double p_1 = dx * DYDX_p(p_0, u_0, x); double u_1 = dx * DYDX_u(p_0, u_0, x); double p_2 = dx * DYDX_p(p_0 + 0.5*p_1, u_0 + 0.5*u_1, x + 0.5*dx); double u_2 = dx * DYDX_u(p_0 + 0.5*p_1, u_0 + 0.5*u_1, x + 0.5*dx); double p_3 = dx * DYDX_p(p_0 + 0.5*p_2, u_0 + 0.5*u_2, x + 0.5*dx); double u_3 = dx * DYDX_u(p_0 + 0.5*p_2, u_0 + 0.5*u_2, x + 0.5*dx); double p_4 = dx * DYDX_p(p_0 + p_3, u_0 + u_3, x + dx); double u_4 = dx * DYDX_u(p_0 + p_3, u_0 + u_3, x + dx); *Jp = p_0 + p_1/6.0 + p_2/3.0 + p_3/3.0 + p_4/6.0; *J = u_0 + u_1/6.0 + u_2/3.0 + u_3/3.0 + u_4/6.0; return GSL_SUCCESS; } int gsl_sf_bessel_sequence_Jnu_e(double nu, gsl_mode_t mode, size_t size, double * v) { /* CHECK_POINTER(v) */ if(nu < 0.0) { GSL_ERROR ("domain error", GSL_EDOM); } else if(size == 0) { GSL_ERROR ("error", GSL_EINVAL); } else { const gsl_prec_t goal = GSL_MODE_PREC(mode); const double dx_array[] = { 0.001, 0.03, 0.1 }; /* double, single, approx */ const double dx_nominal = dx_array[goal]; const int cnu = (int) ceil(nu); const double nu13 = pow(nu,1.0/3.0); const double smalls[] = { 0.01, 0.02, 0.4, 0.7, 1.3, 2.0, 2.5, 3.2, 3.5, 4.5, 6.0 }; const double x_small = ( nu >= 10.0 ? nu - nu13 : smalls[cnu] ); gsl_sf_result J0, J1; double Jp, J; double x; size_t i = 0; /* Calculate the first point. */ x = v[0]; gsl_sf_bessel_Jnu_e(nu, x, &J0); v[0] = J0.val; ++i; /* Step over the idiot case where the * first point was actually zero. */ if(x == 0.0) { if(v[1] <= x) { /* Strict ordering failure. */ GSL_ERROR ("error", GSL_EFAILED); } x = v[1]; gsl_sf_bessel_Jnu_e(nu, x, &J0); v[1] = J0.val; ++i; } /* Calculate directly as long as the argument * is small. This is necessary because the * integration is not very good there. */ while(v[i] < x_small && i < size) { if(v[i] <= x) { /* Strict ordering failure. */ GSL_ERROR ("error", GSL_EFAILED); } x = v[i]; gsl_sf_bessel_Jnu_e(nu, x, &J0); v[i] = J0.val; ++i; } /* At this point we are ready to integrate. * The value of x is the last calculated * point, which has the value J0; v[i] is * the next point we need to calculate. We * calculate nu+1 at x as well to get * the derivative, then we go forward. */ gsl_sf_bessel_Jnu_e(nu+1.0, x, &J1); J = J0.val; Jp = -J1.val + nu/x * J0.val; while(i < size) { const double dv = v[i] - x; const int Nd = (int) ceil(dv/dx_nominal); const double dx = dv / Nd; double xj; int j; if(v[i] <= x) { /* Strict ordering failure. */ GSL_ERROR ("error", GSL_EFAILED); } /* Integrate over interval up to next sample point. */ for(j=0, xj=x; j #include #include #include #include #include #include #include #include #include "error.h" #include "chebyshev.h" #include "cheb_eval.c" #define locEPS (1000.0*GSL_DBL_EPSILON) /* Chebyshev fit for F_{1}(t); -1 < t < 1, -1 < x < 1 */ static double fd_1_a_data[22] = { 1.8949340668482264365, 0.7237719066890052793, 0.1250000000000000000, 0.0101065196435973942, 0.0, -0.0000600615242174119, 0.0, 6.816528764623e-7, 0.0, -9.5895779195e-9, 0.0, 1.515104135e-10, 0.0, -2.5785616e-12, 0.0, 4.62270e-14, 0.0, -8.612e-16, 0.0, 1.65e-17, 0.0, -3.e-19 }; static cheb_series fd_1_a_cs = { fd_1_a_data, 21, -1, 1, 12 }; /* Chebyshev fit for F_{1}(3/2(t+1) + 1); -1 < t < 1, 1 < x < 4 */ static double fd_1_b_data[22] = { 10.409136795234611872, 3.899445098225161947, 0.513510935510521222, 0.010618736770218426, -0.001584468020659694, 0.000146139297161640, -1.408095734499e-6, -2.177993899484e-6, 3.91423660640e-7, -2.3860262660e-8, -4.138309573e-9, 1.283965236e-9, -1.39695990e-10, -4.907743e-12, 4.399878e-12, -7.17291e-13, 2.4320e-14, 1.4230e-14, -3.446e-15, 2.93e-16, 3.7e-17, -1.6e-17 }; static cheb_series fd_1_b_cs = { fd_1_b_data, 21, -1, 1, 11 }; /* Chebyshev fit for F_{1}(3(t+1) + 4); -1 < t < 1, 4 < x < 10 */ static double fd_1_c_data[23] = { 56.78099449124299762, 21.00718468237668011, 2.24592457063193457, 0.00173793640425994, -0.00058716468739423, 0.00016306958492437, -0.00003817425583020, 7.64527252009e-6, -1.31348500162e-6, 1.9000646056e-7, -2.141328223e-8, 1.23906372e-9, 2.1848049e-10, -1.0134282e-10, 2.484728e-11, -4.73067e-12, 7.3555e-13, -8.740e-14, 4.85e-15, 1.23e-15, -5.6e-16, 1.4e-16, -3.e-17 }; static cheb_series fd_1_c_cs = { fd_1_c_data, 22, -1, 1, 13 }; /* Chebyshev fit for F_{1}(x) / x^2 * 10 < x < 30 * -1 < t < 1 * t = 1/10 (x-10) - 1 = x/10 - 2 * x = 10(t+2) */ static double fd_1_d_data[30] = { 1.0126626021151374442, -0.0063312525536433793, 0.0024837319237084326, -0.0008764333697726109, 0.0002913344438921266, -0.0000931877907705692, 0.0000290151342040275, -8.8548707259955e-6, 2.6603474114517e-6, -7.891415690452e-7, 2.315730237195e-7, -6.73179452963e-8, 1.94048035606e-8, -5.5507129189e-9, 1.5766090896e-9, -4.449310875e-10, 1.248292745e-10, -3.48392894e-11, 9.6791550e-12, -2.6786240e-12, 7.388852e-13, -2.032828e-13, 5.58115e-14, -1.52987e-14, 4.1886e-15, -1.1458e-15, 3.132e-16, -8.56e-17, 2.33e-17, -5.9e-18 }; static cheb_series fd_1_d_cs = { fd_1_d_data, 29, -1, 1, 14 }; /* Chebyshev fit for F_{1}(x) / x^2 * 30 < x < Inf * -1 < t < 1 * t = 60/x - 1 * x = 60/(t+1) */ static double fd_1_e_data[10] = { 1.0013707783890401683, 0.0009138522593601060, 0.0002284630648400133, -1.57e-17, -1.27e-17, -9.7e-18, -6.9e-18, -4.6e-18, -2.9e-18, -1.7e-18 }; static cheb_series fd_1_e_cs = { fd_1_e_data, 9, -1, 1, 4 }; /* Chebyshev fit for F_{2}(t); -1 < t < 1, -1 < x < 1 */ static double fd_2_a_data[21] = { 2.1573661917148458336, 0.8849670334241132182, 0.1784163467613519713, 0.0208333333333333333, 0.0012708226459768508, 0.0, -5.0619314244895e-6, 0.0, 4.32026533989e-8, 0.0, -4.870544166e-10, 0.0, 6.4203740e-12, 0.0, -9.37424e-14, 0.0, 1.4715e-15, 0.0, -2.44e-17, 0.0, 4.e-19 }; static cheb_series fd_2_a_cs = { fd_2_a_data, 20, -1, 1, 12 }; /* Chebyshev fit for F_{2}(3/2(t+1) + 1); -1 < t < 1, 1 < x < 4 */ static double fd_2_b_data[22] = { 16.508258811798623599, 7.421719394793067988, 1.458309885545603821, 0.128773850882795229, 0.001963612026198147, -0.000237458988738779, 0.000018539661382641, -1.92805649479e-7, -2.01950028452e-7, 3.2963497518e-8, -1.885817092e-9, -2.72632744e-10, 8.0554561e-11, -8.313223e-12, -2.24489e-13, 2.18778e-13, -3.4290e-14, 1.225e-15, 5.81e-16, -1.37e-16, 1.2e-17, 1.e-18 }; static cheb_series fd_2_b_cs = { fd_2_b_data, 21, -1, 1, 12 }; /* Chebyshev fit for F_{1}(3(t+1) + 4); -1 < t < 1, 4 < x < 10 */ static double fd_2_c_data[20] = { 168.87129776686440711, 81.80260488091659458, 15.75408505947931513, 1.12325586765966440, 0.00059057505725084, -0.00016469712946921, 0.00003885607810107, -7.89873660613e-6, 1.39786238616e-6, -2.1534528656e-7, 2.831510953e-8, -2.94978583e-9, 1.6755082e-10, 2.234229e-11, -1.035130e-11, 2.41117e-12, -4.3531e-13, 6.447e-14, -7.39e-15, 4.3e-16 }; static cheb_series fd_2_c_cs = { fd_2_c_data, 19, -1, 1, 12 }; /* Chebyshev fit for F_{1}(x) / x^3 * 10 < x < 30 * -1 < t < 1 * t = 1/10 (x-10) - 1 = x/10 - 2 * x = 10(t+2) */ static double fd_2_d_data[30] = { 0.3459960518965277589, -0.00633136397691958024, 0.00248382959047594408, -0.00087651191884005114, 0.00029139255351719932, -0.00009322746111846199, 0.00002904021914564786, -8.86962264810663e-6, 2.66844972574613e-6, -7.9331564996004e-7, 2.3359868615516e-7, -6.824790880436e-8, 1.981036528154e-8, -5.71940426300e-9, 1.64379426579e-9, -4.7064937566e-10, 1.3432614122e-10, -3.823400534e-11, 1.085771994e-11, -3.07727465e-12, 8.7064848e-13, -2.4595431e-13, 6.938531e-14, -1.954939e-14, 5.50162e-15, -1.54657e-15, 4.3429e-16, -1.2178e-16, 3.394e-17, -8.81e-18 }; static cheb_series fd_2_d_cs = { fd_2_d_data, 29, -1, 1, 14 }; /* Chebyshev fit for F_{2}(x) / x^3 * 30 < x < Inf * -1 < t < 1 * t = 60/x - 1 * x = 60/(t+1) */ static double fd_2_e_data[4] = { 0.3347041117223735227, 0.00091385225936012645, 0.00022846306484003205, 5.2e-19 }; static cheb_series fd_2_e_cs = { fd_2_e_data, 3, -1, 1, 3 }; /* Chebyshev fit for F_{-1/2}(t); -1 < t < 1, -1 < x < 1 */ static double fd_mhalf_a_data[20] = { 1.2663290042859741974, 0.3697876251911153071, 0.0278131011214405055, -0.0033332848565672007, -0.0004438108265412038, 0.0000616495177243839, 8.7589611449897e-6, -1.2622936986172e-6, -1.837464037221e-7, 2.69495091400e-8, 3.9760866257e-9, -5.894468795e-10, -8.77321638e-11, 1.31016571e-11, 1.9621619e-12, -2.945887e-13, -4.43234e-14, 6.6816e-15, 1.0084e-15, -1.561e-16 }; static cheb_series fd_mhalf_a_cs = { fd_mhalf_a_data, 19, -1, 1, 12 }; /* Chebyshev fit for F_{-1/2}(3/2(t+1) + 1); -1 < t < 1, 1 < x < 4 */ static double fd_mhalf_b_data[20] = { 3.270796131942071484, 0.5809004935853417887, -0.0299313438794694987, -0.0013287935412612198, 0.0009910221228704198, -0.0001690954939688554, 6.5955849946915e-6, 3.5953966033618e-6, -9.430672023181e-7, 8.75773958291e-8, 1.06247652607e-8, -4.9587006215e-9, 7.160432795e-10, 4.5072219e-12, -2.3695425e-11, 4.9122208e-12, -2.905277e-13, -9.59291e-14, 3.00028e-14, -3.4970e-15 }; static cheb_series fd_mhalf_b_cs = { fd_mhalf_b_data, 19, -1, 1, 12 }; /* Chebyshev fit for F_{-1/2}(3(t+1) + 4); -1 < t < 1, 4 < x < 10 */ static double fd_mhalf_c_data[25] = { 5.828283273430595507, 0.677521118293264655, -0.043946248736481554, 0.005825595781828244, -0.000864858907380668, 0.000110017890076539, -6.973305225404e-6, -1.716267414672e-6, 8.59811582041e-7, -2.33066786976e-7, 4.8503191159e-8, -8.130620247e-9, 1.021068250e-9, -5.3188423e-11, -1.9430559e-11, 8.750506e-12, -2.324897e-12, 4.83102e-13, -8.1207e-14, 1.0132e-14, -4.64e-16, -2.24e-16, 9.7e-17, -2.6e-17, 5.e-18 }; static cheb_series fd_mhalf_c_cs = { fd_mhalf_c_data, 24, -1, 1, 13 }; /* Chebyshev fit for F_{-1/2}(x) / x^(1/2) * 10 < x < 30 * -1 < t < 1 * t = 1/10 (x-10) - 1 = x/10 - 2 */ static double fd_mhalf_d_data[30] = { 2.2530744202862438709, 0.0018745152720114692, -0.0007550198497498903, 0.0002759818676644382, -0.0000959406283465913, 0.0000324056855537065, -0.0000107462396145761, 3.5126865219224e-6, -1.1313072730092e-6, 3.577454162766e-7, -1.104926666238e-7, 3.31304165692e-8, -9.5837381008e-9, 2.6575790141e-9, -7.015201447e-10, 1.747111336e-10, -4.04909605e-11, 8.5104999e-12, -1.5261885e-12, 1.876851e-13, 1.00574e-14, -1.82002e-14, 8.6634e-15, -3.2058e-15, 1.0572e-15, -3.259e-16, 9.60e-17, -2.74e-17, 7.6e-18, -1.9e-18 }; static cheb_series fd_mhalf_d_cs = { fd_mhalf_d_data, 29, -1, 1, 15 }; /* Chebyshev fit for F_{1/2}(t); -1 < t < 1, -1 < x < 1 */ static double fd_half_a_data[23] = { 1.7177138871306189157, 0.6192579515822668460, 0.0932802275119206269, 0.0047094853246636182, -0.0004243667967864481, -0.0000452569787686193, 5.2426509519168e-6, 6.387648249080e-7, -8.05777004848e-8, -1.04290272415e-8, 1.3769478010e-9, 1.847190359e-10, -2.51061890e-11, -3.4497818e-12, 4.784373e-13, 6.68828e-14, -9.4147e-15, -1.3333e-15, 1.898e-16, 2.72e-17, -3.9e-18, -6.e-19, 1.e-19 }; static cheb_series fd_half_a_cs = { fd_half_a_data, 22, -1, 1, 11 }; /* Chebyshev fit for F_{1/2}(3/2(t+1) + 1); -1 < t < 1, 1 < x < 4 */ static double fd_half_b_data[20] = { 7.651013792074984027, 2.475545606866155737, 0.218335982672476128, -0.007730591500584980, -0.000217443383867318, 0.000147663980681359, -0.000021586361321527, 8.07712735394e-7, 3.28858050706e-7, -7.9474330632e-8, 6.940207234e-9, 6.75594681e-10, -3.10200490e-10, 4.2677233e-11, -2.1696e-14, -1.170245e-12, 2.34757e-13, -1.4139e-14, -3.864e-15, 1.202e-15 }; static cheb_series fd_half_b_cs = { fd_half_b_data, 19, -1, 1, 12 }; /* Chebyshev fit for F_{1/2}(3(t+1) + 4); -1 < t < 1, 4 < x < 10 */ static double fd_half_c_data[23] = { 29.584339348839816528, 8.808344283250615592, 0.503771641883577308, -0.021540694914550443, 0.002143341709406890, -0.000257365680646579, 0.000027933539372803, -1.678525030167e-6, -2.78100117693e-7, 1.35218065147e-7, -3.3740425009e-8, 6.474834942e-9, -1.009678978e-9, 1.20057555e-10, -6.636314e-12, -1.710566e-12, 7.75069e-13, -1.97973e-13, 3.9414e-14, -6.374e-15, 7.77e-16, -4.0e-17, -1.4e-17 }; static cheb_series fd_half_c_cs = { fd_half_c_data, 22, -1, 1, 13 }; /* Chebyshev fit for F_{1/2}(x) / x^(3/2) * 10 < x < 30 * -1 < t < 1 * t = 1/10 (x-10) - 1 = x/10 - 2 */ static double fd_half_d_data[30] = { 1.5116909434145508537, -0.0036043405371630468, 0.0014207743256393359, -0.0005045399052400260, 0.0001690758006957347, -0.0000546305872688307, 0.0000172223228484571, -5.3352603788706e-6, 1.6315287543662e-6, -4.939021084898e-7, 1.482515450316e-7, -4.41552276226e-8, 1.30503160961e-8, -3.8262599802e-9, 1.1123226976e-9, -3.204765534e-10, 9.14870489e-11, -2.58778946e-11, 7.2550731e-12, -2.0172226e-12, 5.566891e-13, -1.526247e-13, 4.16121e-14, -1.12933e-14, 3.0537e-15, -8.234e-16, 2.215e-16, -5.95e-17, 1.59e-17, -4.0e-18 }; static cheb_series fd_half_d_cs = { fd_half_d_data, 29, -1, 1, 15 }; /* Chebyshev fit for F_{3/2}(t); -1 < t < 1, -1 < x < 1 */ static double fd_3half_a_data[20] = { 2.0404775940601704976, 0.8122168298093491444, 0.1536371165644008069, 0.0156174323847845125, 0.0005943427879290297, -0.0000429609447738365, -3.8246452994606e-6, 3.802306180287e-7, 4.05746157593e-8, -4.5530360159e-9, -5.306873139e-10, 6.37297268e-11, 7.8403674e-12, -9.840241e-13, -1.255952e-13, 1.62617e-14, 2.1318e-15, -2.825e-16, -3.78e-17, 5.1e-18 }; static cheb_series fd_3half_a_cs = { fd_3half_a_data, 19, -1, 1, 11 }; /* Chebyshev fit for F_{3/2}(3/2(t+1) + 1); -1 < t < 1, 1 < x < 4 */ static double fd_3half_b_data[22] = { 13.403206654624176674, 5.574508357051880924, 0.931228574387527769, 0.054638356514085862, -0.001477172902737439, -0.000029378553381869, 0.000018357033493246, -2.348059218454e-6, 8.3173787440e-8, 2.6826486956e-8, -6.011244398e-9, 4.94345981e-10, 3.9557340e-11, -1.7894930e-11, 2.348972e-12, -1.2823e-14, -5.4192e-14, 1.0527e-14, -6.39e-16, -1.47e-16, 4.5e-17, -5.e-18 }; static cheb_series fd_3half_b_cs = { fd_3half_b_data, 21, -1, 1, 12 }; /* Chebyshev fit for F_{3/2}(3(t+1) + 4); -1 < t < 1, 4 < x < 10 */ static double fd_3half_c_data[21] = { 101.03685253378877642, 43.62085156043435883, 6.62241373362387453, 0.25081415008708521, -0.00798124846271395, 0.00063462245101023, -0.00006392178890410, 6.04535131939e-6, -3.4007683037e-7, -4.072661545e-8, 1.931148453e-8, -4.46328355e-9, 7.9434717e-10, -1.1573569e-10, 1.304658e-11, -7.4114e-13, -1.4181e-13, 6.491e-14, -1.597e-14, 3.05e-15, -4.8e-16 }; static cheb_series fd_3half_c_cs = { fd_3half_c_data, 20, -1, 1, 12 }; /* Chebyshev fit for F_{3/2}(x) / x^(5/2) * 10 < x < 30 * -1 < t < 1 * t = 1/10 (x-10) - 1 = x/10 - 2 */ static double fd_3half_d_data[25] = { 0.6160645215171852381, -0.0071239478492671463, 0.0027906866139659846, -0.0009829521424317718, 0.0003260229808519545, -0.0001040160912910890, 0.0000322931223232439, -9.8243506588102e-6, 2.9420132351277e-6, -8.699154670418e-7, 2.545460071999e-7, -7.38305056331e-8, 2.12545670310e-8, -6.0796532462e-9, 1.7294556741e-9, -4.896540687e-10, 1.380786037e-10, -3.88057305e-11, 1.08753212e-11, -3.0407308e-12, 8.485626e-13, -2.364275e-13, 6.57636e-14, -1.81807e-14, 4.6884e-15 }; static cheb_series fd_3half_d_cs = { fd_3half_d_data, 24, -1, 1, 16 }; /* Goano's modification of the Levin-u implementation. * This is a simplification of the original WHIZ algorithm. * See [Fessler et al., ACM Toms 9, 346 (1983)]. */ static int fd_whiz(const double term, const int iterm, double * qnum, double * qden, double * result, double * s) { if(iterm == 0) *s = 0.0; *s += term; qden[iterm] = 1.0/(term*(iterm+1.0)*(iterm+1.0)); qnum[iterm] = *s * qden[iterm]; if(iterm > 0) { double factor = 1.0; double ratio = iterm/(iterm+1.0); int j; for(j=iterm-1; j>=0; j--) { double c = factor * (j+1.0) / (iterm+1.0); factor *= ratio; qden[j] = qden[j+1] - c * qden[j]; qnum[j] = qnum[j+1] - c * qnum[j]; } } *result = qnum[0] / qden[0]; return GSL_SUCCESS; } /* Handle case of integer j <= -2. */ static int fd_nint(const int j, const double x, gsl_sf_result * result) { /* const int nsize = 100 + 1; */ enum { nsize = 100+1 }; double qcoeff[nsize]; if(j >= -1) { result->val = 0.0; result->err = 0.0; GSL_ERROR ("error", GSL_ESANITY); } else if(j < -(nsize)) { result->val = 0.0; result->err = 0.0; GSL_ERROR ("error", GSL_EUNIMPL); } else { double a, p, f; int i, k; int n = -(j+1); qcoeff[1] = 1.0; for(k=2; k<=n; k++) { qcoeff[k] = -qcoeff[k-1]; for(i=k-1; i>=2; i--) { qcoeff[i] = i*qcoeff[i] - (k-(i-1))*qcoeff[i-1]; } } if(x >= 0.0) { a = exp(-x); f = qcoeff[1]; for(i=2; i<=n; i++) { f = f*a + qcoeff[i]; } } else { a = exp(x); f = qcoeff[n]; for(i=n-1; i>=1; i--) { f = f*a + qcoeff[i]; } } p = gsl_sf_pow_int(1.0+a, j); result->val = f*a*p; result->err = 3.0 * GSL_DBL_EPSILON * fabs(f*a*p); return GSL_SUCCESS; } } /* x < 0 */ static int fd_neg(const double j, const double x, gsl_sf_result * result) { enum { itmax = 100, qsize = 100+1 }; /* const int itmax = 100; */ /* const int qsize = 100 + 1; */ double qnum[qsize], qden[qsize]; if(x < GSL_LOG_DBL_MIN) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(x < -1.0 && x < -fabs(j+1.0)) { /* Simple series implementation. Avoid the * complexity and extra work of the series * acceleration method below. */ double ex = exp(x); double term = ex; double sum = term; int n; for(n=2; n<100; n++) { double rat = (n-1.0)/n; double p = pow(rat, j+1.0); term *= -ex * p; sum += term; if(fabs(term/sum) < GSL_DBL_EPSILON) break; } result->val = sum; result->err = 2.0 * GSL_DBL_EPSILON * fabs(sum); return GSL_SUCCESS; } else { double s = 0.0; double xn = x; double ex = -exp(x); double enx = -ex; double f = 0.0; double f_previous; int jterm; for(jterm=0; jterm<=itmax; jterm++) { double p = pow(jterm+1.0, j+1.0); double term = enx/p; f_previous = f; fd_whiz(term, jterm, qnum, qden, &f, &s); xn += x; if(fabs(f-f_previous) < fabs(f)*2.0*GSL_DBL_EPSILON || xn < GSL_LOG_DBL_MIN) break; enx *= ex; } result->val = f; result->err = fabs(f-f_previous); result->err += 2.0 * GSL_DBL_EPSILON * fabs(f); if(jterm == itmax) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } } /* asymptotic expansion * j + 2.0 > 0.0 */ static int fd_asymp(const double j, const double x, gsl_sf_result * result) { const int j_integer = ( fabs(j - floor(j+0.5)) < 100.0*GSL_DBL_EPSILON ); const int itmax = 200; gsl_sf_result lg; int stat_lg = gsl_sf_lngamma_e(j + 2.0, &lg); double seqn_val = 0.5; double seqn_err = 0.0; double xm2 = (1.0/x)/x; double xgam = 1.0; double add = GSL_DBL_MAX; double cos_term; double ln_x; double ex_term_1; double ex_term_2; gsl_sf_result fneg; gsl_sf_result ex_arg; gsl_sf_result ex; int stat_fneg; int stat_e; int n; for(n=1; n<=itmax; n++) { double add_previous = add; gsl_sf_result eta; gsl_sf_eta_int_e(2*n, &eta); xgam = xgam * xm2 * (j + 1.0 - (2*n-2)) * (j + 1.0 - (2*n-1)); add = eta.val * xgam; if(!j_integer && fabs(add) > fabs(add_previous)) break; if(fabs(add/seqn_val) < GSL_DBL_EPSILON) break; seqn_val += add; seqn_err += 2.0 * GSL_DBL_EPSILON * fabs(add); } seqn_err += fabs(add); stat_fneg = fd_neg(j, -x, &fneg); ln_x = log(x); ex_term_1 = (j+1.0)*ln_x; ex_term_2 = lg.val; ex_arg.val = ex_term_1 - ex_term_2; /*(j+1.0)*ln_x - lg.val; */ ex_arg.err = GSL_DBL_EPSILON*(fabs(ex_term_1) + fabs(ex_term_2)) + lg.err; stat_e = gsl_sf_exp_err_e(ex_arg.val, ex_arg.err, &ex); cos_term = cos(j*M_PI); result->val = cos_term * fneg.val + 2.0 * seqn_val * ex.val; result->err = fabs(2.0 * ex.err * seqn_val); result->err += fabs(2.0 * ex.val * seqn_err); result->err += fabs(cos_term) * fneg.err; result->err += 4.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_3(stat_e, stat_fneg, stat_lg); } /* Series evaluation for small x, generic j. * [Goano (8)] */ #if 0 static int fd_series(const double j, const double x, double * result) { const int nmax = 1000; int n; double sum = 0.0; double prev; double pow_factor = 1.0; double eta_factor; gsl_sf_eta_e(j + 1.0, &eta_factor); prev = pow_factor * eta_factor; sum += prev; for(n=1; n 0, integer j > 0; x < Pi. * [Goano (8)] */ static int fd_series_int(const int j, const double x, gsl_sf_result * result) { int n; double sum = 0.0; double del; double pow_factor = 1.0; gsl_sf_result eta_factor; gsl_sf_eta_int_e(j + 1, &eta_factor); del = pow_factor * eta_factor.val; sum += del; /* Sum terms where the argument * of eta() is positive. */ for(n=1; n<=j+2; n++) { gsl_sf_eta_int_e(j+1-n, &eta_factor); pow_factor *= x/n; del = pow_factor * eta_factor.val; sum += del; if(fabs(del/sum) < GSL_DBL_EPSILON) break; } /* Now sum the terms where eta() is negative. * The argument of eta() must be odd as well, * so it is convenient to transform the series * as follows: * * Sum[ eta(j+1-n) x^n / n!, {n,j+4,Infinity}] * = x^j / j! Sum[ eta(1-2m) x^(2m) j! / (2m+j)! , {m,2,Infinity}] * * We do not need to do this sum if j is large enough. */ if(j < 32) { int m; gsl_sf_result jfact; double sum2; double pre2; gsl_sf_fact_e((unsigned int)j, &jfact); pre2 = gsl_sf_pow_int(x, j) / jfact.val; gsl_sf_eta_int_e(-3, &eta_factor); pow_factor = x*x*x*x / ((j+4)*(j+3)*(j+2)*(j+1)); sum2 = eta_factor.val * pow_factor; for(m=3; m<24; m++) { gsl_sf_eta_int_e(1-2*m, &eta_factor); pow_factor *= x*x / ((j+2*m)*(j+2*m-1)); sum2 += eta_factor.val * pow_factor; } sum += pre2 * sum2; } result->val = sum; result->err = 2.0 * GSL_DBL_EPSILON * fabs(sum); return GSL_SUCCESS; } /* series of hypergeometric functions for integer j > 0, x > 0 * [Goano (7)] */ static int fd_UMseries_int(const int j, const double x, gsl_sf_result * result) { const int nmax = 2000; double pre; double lnpre_val; double lnpre_err; double sum_even_val = 1.0; double sum_even_err = 0.0; double sum_odd_val = 0.0; double sum_odd_err = 0.0; int stat_sum; int stat_e; int stat_h = GSL_SUCCESS; int n; if(x < 500.0 && j < 80) { double p = gsl_sf_pow_int(x, j+1); gsl_sf_result g; gsl_sf_fact_e(j+1, &g); /* Gamma(j+2) */ lnpre_val = 0.0; lnpre_err = 0.0; pre = p/g.val; } else { double lnx = log(x); gsl_sf_result lg; gsl_sf_lngamma_e(j + 2.0, &lg); lnpre_val = (j+1.0)*lnx - lg.val; lnpre_err = 2.0 * GSL_DBL_EPSILON * fabs((j+1.0)*lnx) + lg.err; pre = 1.0; } /* Add up the odd terms of the sum. */ for(n=1; n= nmax ? GSL_EMAXITER : GSL_SUCCESS ); stat_e = gsl_sf_exp_mult_err_e(lnpre_val, lnpre_err, pre*(sum_even_val + sum_odd_val), pre*(sum_even_err + sum_odd_err), result); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_3(stat_e, stat_h, stat_sum); } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ /* [Goano (4)] */ int gsl_sf_fermi_dirac_m1_e(const double x, gsl_sf_result * result) { if(x < GSL_LOG_DBL_MIN) { UNDERFLOW_ERROR(result); } else if(x < 0.0) { const double ex = exp(x); result->val = ex/(1.0+ex); result->err = 2.0 * (fabs(x) + 1.0) * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { double ex = exp(-x); result->val = 1.0/(1.0 + ex); result->err = 2.0 * GSL_DBL_EPSILON * (x + 1.0) * ex; return GSL_SUCCESS; } } /* [Goano (3)] */ int gsl_sf_fermi_dirac_0_e(const double x, gsl_sf_result * result) { if(x < GSL_LOG_DBL_MIN) { UNDERFLOW_ERROR(result); } else if(x < -5.0) { double ex = exp(x); double ser = 1.0 - ex*(0.5 - ex*(1.0/3.0 - ex*(1.0/4.0 - ex*(1.0/5.0 - ex/6.0)))); result->val = ex * ser; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < 10.0) { result->val = log(1.0 + exp(x)); result->err = fabs(x * GSL_DBL_EPSILON); return GSL_SUCCESS; } else { double ex = exp(-x); result->val = x + ex * (1.0 - 0.5*ex + ex*ex/3.0 - ex*ex*ex/4.0); result->err = (x + ex) * GSL_DBL_EPSILON; return GSL_SUCCESS; } } int gsl_sf_fermi_dirac_1_e(const double x, gsl_sf_result * result) { if(x < GSL_LOG_DBL_MIN) { UNDERFLOW_ERROR(result); } else if(x < -1.0) { /* series [Goano (6)] */ double ex = exp(x); double term = ex; double sum = term; int n; for(n=2; n<100 ; n++) { double rat = (n-1.0)/n; term *= -ex * rat * rat; sum += term; if(fabs(term/sum) < GSL_DBL_EPSILON) break; } result->val = sum; result->err = 2.0 * fabs(sum) * GSL_DBL_EPSILON; return GSL_SUCCESS; } else if(x < 1.0) { return cheb_eval_e(&fd_1_a_cs, x, result); } else if(x < 4.0) { double t = 2.0/3.0*(x-1.0) - 1.0; return cheb_eval_e(&fd_1_b_cs, t, result); } else if(x < 10.0) { double t = 1.0/3.0*(x-4.0) - 1.0; return cheb_eval_e(&fd_1_c_cs, t, result); } else if(x < 30.0) { double t = 0.1*x - 2.0; gsl_sf_result c; cheb_eval_e(&fd_1_d_cs, t, &c); result->val = c.val * x*x; result->err = c.err * x*x + GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < 1.0/GSL_SQRT_DBL_EPSILON) { double t = 60.0/x - 1.0; gsl_sf_result c; cheb_eval_e(&fd_1_e_cs, t, &c); result->val = c.val * x*x; result->err = c.err * x*x + GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < GSL_SQRT_DBL_MAX) { result->val = 0.5 * x*x; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { OVERFLOW_ERROR(result); } } int gsl_sf_fermi_dirac_2_e(const double x, gsl_sf_result * result) { if(x < GSL_LOG_DBL_MIN) { UNDERFLOW_ERROR(result); } else if(x < -1.0) { /* series [Goano (6)] */ double ex = exp(x); double term = ex; double sum = term; int n; for(n=2; n<100 ; n++) { double rat = (n-1.0)/n; term *= -ex * rat * rat * rat; sum += term; if(fabs(term/sum) < GSL_DBL_EPSILON) break; } result->val = sum; result->err = 2.0 * GSL_DBL_EPSILON * fabs(sum); return GSL_SUCCESS; } else if(x < 1.0) { return cheb_eval_e(&fd_2_a_cs, x, result); } else if(x < 4.0) { double t = 2.0/3.0*(x-1.0) - 1.0; return cheb_eval_e(&fd_2_b_cs, t, result); } else if(x < 10.0) { double t = 1.0/3.0*(x-4.0) - 1.0; return cheb_eval_e(&fd_2_c_cs, t, result); } else if(x < 30.0) { double t = 0.1*x - 2.0; gsl_sf_result c; cheb_eval_e(&fd_2_d_cs, t, &c); result->val = c.val * x*x*x; result->err = c.err * x*x*x + 3.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < 1.0/GSL_ROOT3_DBL_EPSILON) { double t = 60.0/x - 1.0; gsl_sf_result c; cheb_eval_e(&fd_2_e_cs, t, &c); result->val = c.val * x*x*x; result->err = c.err * x*x*x + 3.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < GSL_ROOT3_DBL_MAX) { result->val = 1.0/6.0 * x*x*x; result->err = 3.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { OVERFLOW_ERROR(result); } } int gsl_sf_fermi_dirac_int_e(const int j, const double x, gsl_sf_result * result) { if(j < -1) { return fd_nint(j, x, result); } else if (j == -1) { return gsl_sf_fermi_dirac_m1_e(x, result); } else if(j == 0) { return gsl_sf_fermi_dirac_0_e(x, result); } else if(j == 1) { return gsl_sf_fermi_dirac_1_e(x, result); } else if(j == 2) { return gsl_sf_fermi_dirac_2_e(x, result); } else if(x < 0.0) { return fd_neg(j, x, result); } else if(x == 0.0) { return gsl_sf_eta_int_e(j+1, result); } else if(x < 1.5) { return fd_series_int(j, x, result); } else { gsl_sf_result fasymp; int stat_asymp = fd_asymp(j, x, &fasymp); if(stat_asymp == GSL_SUCCESS) { result->val = fasymp.val; result->err = fasymp.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_asymp; } else { return fd_UMseries_int(j, x, result); } } } int gsl_sf_fermi_dirac_mhalf_e(const double x, gsl_sf_result * result) { if(x < GSL_LOG_DBL_MIN) { UNDERFLOW_ERROR(result); } else if(x < -1.0) { /* series [Goano (6)] */ double ex = exp(x); double term = ex; double sum = term; int n; for(n=2; n<200 ; n++) { double rat = (n-1.0)/n; term *= -ex * sqrt(rat); sum += term; if(fabs(term/sum) < GSL_DBL_EPSILON) break; } result->val = sum; result->err = 2.0 * fabs(sum) * GSL_DBL_EPSILON; return GSL_SUCCESS; } else if(x < 1.0) { return cheb_eval_e(&fd_mhalf_a_cs, x, result); } else if(x < 4.0) { double t = 2.0/3.0*(x-1.0) - 1.0; return cheb_eval_e(&fd_mhalf_b_cs, t, result); } else if(x < 10.0) { double t = 1.0/3.0*(x-4.0) - 1.0; return cheb_eval_e(&fd_mhalf_c_cs, t, result); } else if(x < 30.0) { double rtx = sqrt(x); double t = 0.1*x - 2.0; gsl_sf_result c; cheb_eval_e(&fd_mhalf_d_cs, t, &c); result->val = c.val * rtx; result->err = c.err * rtx + 0.5 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { return fd_asymp(-0.5, x, result); } } int gsl_sf_fermi_dirac_half_e(const double x, gsl_sf_result * result) { if(x < GSL_LOG_DBL_MIN) { UNDERFLOW_ERROR(result); } else if(x < -1.0) { /* series [Goano (6)] */ double ex = exp(x); double term = ex; double sum = term; int n; for(n=2; n<100 ; n++) { double rat = (n-1.0)/n; term *= -ex * rat * sqrt(rat); sum += term; if(fabs(term/sum) < GSL_DBL_EPSILON) break; } result->val = sum; result->err = 2.0 * fabs(sum) * GSL_DBL_EPSILON; return GSL_SUCCESS; } else if(x < 1.0) { return cheb_eval_e(&fd_half_a_cs, x, result); } else if(x < 4.0) { double t = 2.0/3.0*(x-1.0) - 1.0; return cheb_eval_e(&fd_half_b_cs, t, result); } else if(x < 10.0) { double t = 1.0/3.0*(x-4.0) - 1.0; return cheb_eval_e(&fd_half_c_cs, t, result); } else if(x < 30.0) { double x32 = x*sqrt(x); double t = 0.1*x - 2.0; gsl_sf_result c; cheb_eval_e(&fd_half_d_cs, t, &c); result->val = c.val * x32; result->err = c.err * x32 + 1.5 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { return fd_asymp(0.5, x, result); } } int gsl_sf_fermi_dirac_3half_e(const double x, gsl_sf_result * result) { if(x < GSL_LOG_DBL_MIN) { UNDERFLOW_ERROR(result); } else if(x < -1.0) { /* series [Goano (6)] */ double ex = exp(x); double term = ex; double sum = term; int n; for(n=2; n<100 ; n++) { double rat = (n-1.0)/n; term *= -ex * rat * rat * sqrt(rat); sum += term; if(fabs(term/sum) < GSL_DBL_EPSILON) break; } result->val = sum; result->err = 2.0 * fabs(sum) * GSL_DBL_EPSILON; return GSL_SUCCESS; } else if(x < 1.0) { return cheb_eval_e(&fd_3half_a_cs, x, result); } else if(x < 4.0) { double t = 2.0/3.0*(x-1.0) - 1.0; return cheb_eval_e(&fd_3half_b_cs, t, result); } else if(x < 10.0) { double t = 1.0/3.0*(x-4.0) - 1.0; return cheb_eval_e(&fd_3half_c_cs, t, result); } else if(x < 30.0) { double x52 = x*x*sqrt(x); double t = 0.1*x - 2.0; gsl_sf_result c; cheb_eval_e(&fd_3half_d_cs, t, &c); result->val = c.val * x52; result->err = c.err * x52 + 2.5 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { return fd_asymp(1.5, x, result); } } /* [Goano p. 222] */ int gsl_sf_fermi_dirac_inc_0_e(const double x, const double b, gsl_sf_result * result) { if(b < 0.0) { DOMAIN_ERROR(result); } else { double arg = b - x; gsl_sf_result f0; int status = gsl_sf_fermi_dirac_0_e(arg, &f0); result->val = f0.val - arg; result->err = f0.err + GSL_DBL_EPSILON * (fabs(x) + fabs(b)); return status; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_fermi_dirac_m1(const double x) { EVAL_RESULT(gsl_sf_fermi_dirac_m1_e(x, &result)); } double gsl_sf_fermi_dirac_0(const double x) { EVAL_RESULT(gsl_sf_fermi_dirac_0_e(x, &result)); } double gsl_sf_fermi_dirac_1(const double x) { EVAL_RESULT(gsl_sf_fermi_dirac_1_e(x, &result)); } double gsl_sf_fermi_dirac_2(const double x) { EVAL_RESULT(gsl_sf_fermi_dirac_2_e(x, &result)); } double gsl_sf_fermi_dirac_int(const int j, const double x) { EVAL_RESULT(gsl_sf_fermi_dirac_int_e(j, x, &result)); } double gsl_sf_fermi_dirac_mhalf(const double x) { EVAL_RESULT(gsl_sf_fermi_dirac_mhalf_e(x, &result)); } double gsl_sf_fermi_dirac_half(const double x) { EVAL_RESULT(gsl_sf_fermi_dirac_half_e(x, &result)); } double gsl_sf_fermi_dirac_3half(const double x) { EVAL_RESULT(gsl_sf_fermi_dirac_3half_e(x, &result)); } double gsl_sf_fermi_dirac_inc_0(const double x, const double b) { EVAL_RESULT(gsl_sf_fermi_dirac_inc_0_e(x, b, &result)); } gsl/specfunc/elementary.c0000644000175000017500000000463513536674414014061 0ustar eddedd/* specfunc/elementary.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "error.h" #include "check.h" int gsl_sf_multiply_e(const double x, const double y, gsl_sf_result * result) { const double ax = fabs(x); const double ay = fabs(y); if(x == 0.0 || y == 0.0) { /* It is necessary to eliminate this immediately. */ result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if((ax <= 1.0 && ay >= 1.0) || (ay <= 1.0 && ax >= 1.0)) { /* Straddling 1.0 is always safe. */ result->val = x*y; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double f = 1.0 - 2.0 * GSL_DBL_EPSILON; const double min = GSL_MIN_DBL(fabs(x), fabs(y)); const double max = GSL_MAX_DBL(fabs(x), fabs(y)); if(max < 0.9 * GSL_SQRT_DBL_MAX || min < (f * DBL_MAX)/max) { result->val = GSL_COERCE_DBL(x*y); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); CHECK_UNDERFLOW(result); return GSL_SUCCESS; } else { OVERFLOW_ERROR(result); } } } int gsl_sf_multiply_err_e(const double x, const double dx, const double y, const double dy, gsl_sf_result * result) { int status = gsl_sf_multiply_e(x, y, result); result->err += fabs(dx*y) + fabs(dy*x); return status; } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_multiply(const double x, const double y) { EVAL_RESULT(gsl_sf_multiply_e(x, y, &result)); } gsl/specfunc/bessel_Ynu.c0000644000175000017500000001034313536674414014015 0ustar eddedd/* specfunc/bessel_Ynu.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman, 2017 Konrad Griessinger * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "error.h" #include "bessel.h" #include "bessel_olver.h" #include "bessel_temme.h" /* Perform forward recurrence for Y_nu(x) and Y'_nu(x) * * Y_{nu+1} = nu/x Y_nu - Y'_nu * Y'_{nu+1} = -(nu+1)/x Y_{nu+1} + Y_nu */ #if 0 static int bessel_Y_recur(const double nu_min, const double x, const int kmax, const double Y_start, const double Yp_start, double * Y_end, double * Yp_end) { double x_inv = 1.0/x; double nu = nu_min; double Y_nu = Y_start; double Yp_nu = Yp_start; int k; for(k=1; k<=kmax; k++) { double nuox = nu*x_inv; double Y_nu_save = Y_nu; Y_nu = -Yp_nu + nuox * Y_nu; Yp_nu = Y_nu_save - (nuox+x_inv) * Y_nu; nu += 1.0; } *Y_end = Y_nu; *Yp_end = Yp_nu; return GSL_SUCCESS; } #endif /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_Ynupos_e(double nu, double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(nu > 50.0) { return gsl_sf_bessel_Ynu_asymp_Olver_e(nu, x, result); } else { /* -1/2 <= mu <= 1/2 */ int N = (int)(nu + 0.5); double mu = nu - N; gsl_sf_result Y_mu, Y_mup1; int stat_mu; double Ynm1; double Yn; double Ynp1; int n; if(x < 2.0) { /* Determine Ymu, Ymup1 directly. This is really * an optimization since this case could as well * be handled by a call to gsl_sf_bessel_JY_mu_restricted(), * as below. */ stat_mu = gsl_sf_bessel_Y_temme(mu, x, &Y_mu, &Y_mup1); } else { /* Determine Ymu, Ymup1 and Jmu, Jmup1. */ gsl_sf_result J_mu, J_mup1; stat_mu = gsl_sf_bessel_JY_mu_restricted(mu, x, &J_mu, &J_mup1, &Y_mu, &Y_mup1); } /* Forward recursion to get Ynu, Ynup1. */ Ynm1 = Y_mu.val; Yn = Y_mup1.val; for(n=1; n<=N; n++) { Ynp1 = 2.0*(mu+n)/x * Yn - Ynm1; Ynm1 = Yn; Yn = Ynp1; } result->val = Ynm1; /* Y_nu */ result->err = (N + 1.0) * fabs(Ynm1) * (fabs(Y_mu.err/Y_mu.val) + fabs(Y_mup1.err/Y_mup1.val)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(Ynm1); return stat_mu; } } int gsl_sf_bessel_Ynu_e(double nu, double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if (nu < 0.0) { int Jstatus = gsl_sf_bessel_Jnupos_e(-nu, x, result); double Jval = result->val; double Jerr = result->err; int Ystatus = gsl_sf_bessel_Ynupos_e(-nu, x, result); double Yval = result->val; double Yerr = result->err; /* double s = sin(M_PI*nu), c = cos(M_PI*nu); */ int sinstatus = gsl_sf_sin_pi_e(nu, result); double s = result->val; double serr = result->err; int cosstatus = gsl_sf_cos_pi_e(nu, result); double c = result->val; double cerr = result->err; result->val = c*Yval - s*Jval; result->err = fabs(c*Yerr) + fabs(s*Jerr) + fabs(cerr*Yval) + fabs(serr*Jval); return GSL_ERROR_SELECT_4(Jstatus, Ystatus, sinstatus, cosstatus); } else return gsl_sf_bessel_Ynupos_e(nu, x, result); } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_Ynu(const double nu, const double x) { EVAL_RESULT(gsl_sf_bessel_Ynu_e(nu, x, &result)); } gsl/specfunc/bessel.h0000644000175000017500000000631713536674414013175 0ustar eddedd/* specfunc/bessel.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef _BESSEL_H_ #define _BESSEL_H_ #include /* Taylor expansion for J_nu(x) or I_nu(x) * sign = -1 ==> Jnu * sign = +1 ==> Inu */ int gsl_sf_bessel_IJ_taylor_e(const double nu, const double x, const int sign, const int kmax, const double threshold, gsl_sf_result * result ); int gsl_sf_bessel_Jnu_asympx_e(const double nu, const double x, gsl_sf_result * result); int gsl_sf_bessel_Ynu_asympx_e(const double nu, const double x, gsl_sf_result * result); int gsl_sf_bessel_Jnupos_e(const double nu, const double x, gsl_sf_result * result); int gsl_sf_bessel_Ynupos_e(const double nu, const double x, gsl_sf_result * result); int gsl_sf_bessel_Inu_scaled_asympx_e(const double nu, const double x, gsl_sf_result * result); int gsl_sf_bessel_Knu_scaled_asympx_e(const double nu, const double x, gsl_sf_result * result); int gsl_sf_bessel_Inu_scaled_asymp_unif_e(const double nu, const double x, gsl_sf_result * result); int gsl_sf_bessel_Knu_scaled_asymp_unif_e(const double nu, const double x, gsl_sf_result * result); /* ratio = J_{nu+1}(x) / J_nu(x) * sgn = sgn(J_nu(x)) */ int gsl_sf_bessel_J_CF1(const double nu, const double x, double * ratio, double * sgn); /* ratio = I_{nu+1}(x) / I_nu(x) */ int gsl_sf_bessel_I_CF1_ser(const double nu, const double x, double * ratio); /* Evaluate the Steed method continued fraction CF2 for * * (J' + i Y')/(J + i Y) := P + i Q */ int gsl_sf_bessel_JY_steed_CF2(const double nu, const double x, double * P, double * Q); int gsl_sf_bessel_JY_mu_restricted(const double mu, const double x, gsl_sf_result * Jmu, gsl_sf_result * Jmup1, gsl_sf_result * Ymu, gsl_sf_result * Ymup1); int gsl_sf_bessel_K_scaled_steed_temme_CF2(const double nu, const double x, double * K_nu, double * K_nup1, double * Kp_nu); /* These are of use in calculating the oscillating * Bessel functions. * cos(y - pi/4 + eps) * sin(y - pi/4 + eps) */ int gsl_sf_bessel_cos_pi4_e(double y, double eps, gsl_sf_result * result); int gsl_sf_bessel_sin_pi4_e(double y, double eps, gsl_sf_result * result); #endif /* !_BESSEL_H_ */ gsl/specfunc/hyperg_0F1.c0000644000175000017500000001200113536674414013602 0ustar eddedd/* specfunc/hyperg_0F1.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include "error.h" #define locEPS (1000.0*GSL_DBL_EPSILON) /* Evaluate bessel_I(nu, x), allowing nu < 0. * This is fine here because we do not not allow * nu to be a negative integer. * x > 0. */ static int hyperg_0F1_bessel_I(const double nu, const double x, gsl_sf_result * result) { if(x > GSL_LOG_DBL_MAX) { OVERFLOW_ERROR(result); } if(nu < 0.0) { const double anu = -nu; const double s = 2.0/M_PI * sin(anu*M_PI); const double ex = exp(x); gsl_sf_result I; gsl_sf_result K; int stat_I = gsl_sf_bessel_Inu_scaled_e(anu, x, &I); int stat_K = gsl_sf_bessel_Knu_scaled_e(anu, x, &K); result->val = ex * I.val + s * (K.val / ex); result->err = ex * I.err + fabs(s * K.err/ex); result->err += fabs(s * (K.val/ex)) * GSL_DBL_EPSILON * anu * M_PI; return GSL_ERROR_SELECT_2(stat_K, stat_I); } else { const double ex = exp(x); gsl_sf_result I; int stat_I = gsl_sf_bessel_Inu_scaled_e(nu, x, &I); result->val = ex * I.val; result->err = ex * I.err + GSL_DBL_EPSILON * fabs(result->val); return stat_I; } } /* Evaluate bessel_J(nu, x), allowing nu < 0. * This is fine here because we do not not allow * nu to be a negative integer. * x > 0. */ static int hyperg_0F1_bessel_J(const double nu, const double x, gsl_sf_result * result) { if(nu < 0.0) { const double anu = -nu; const double s = sin(anu*M_PI); const double c = cos(anu*M_PI); gsl_sf_result J; gsl_sf_result Y; int stat_J = gsl_sf_bessel_Jnu_e(anu, x, &J); int stat_Y = gsl_sf_bessel_Ynu_e(anu, x, &Y); result->val = c * J.val - s * Y.val; result->err = fabs(c * J.err) + fabs(s * Y.err); result->err += fabs(anu * M_PI) * GSL_DBL_EPSILON * fabs(J.val + Y.val); return GSL_ERROR_SELECT_2(stat_Y, stat_J); } else { return gsl_sf_bessel_Jnu_e(nu, x, result); } } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_hyperg_0F1_e(double c, double x, gsl_sf_result * result) { const double rintc = floor(c + 0.5); const int c_neg_integer = (c < 0.0 && fabs(c - rintc) < locEPS); /* CHECK_POINTER(result) */ if(c == 0.0 || c_neg_integer) { DOMAIN_ERROR(result); } else if(x < 0.0) { gsl_sf_result Jcm1; gsl_sf_result lg_c; double sgn; int stat_g = gsl_sf_lngamma_sgn_e(c, &lg_c, &sgn); int stat_J = hyperg_0F1_bessel_J(c-1.0, 2.0*sqrt(-x), &Jcm1); if(stat_g != GSL_SUCCESS) { result->val = 0.0; result->err = 0.0; return stat_g; } else if(Jcm1.val == 0.0) { result->val = 0.0; result->err = 0.0; return stat_J; } else { const double tl = log(-x)*0.5*(1.0-c); double ln_pre_val = lg_c.val + tl; double ln_pre_err = lg_c.err + 2.0 * GSL_DBL_EPSILON * fabs(tl); return gsl_sf_exp_mult_err_e(ln_pre_val, ln_pre_err, sgn*Jcm1.val, Jcm1.err, result); } } else if(x == 0.0) { result->val = 1.0; result->err = 1.0; return GSL_SUCCESS; } else { gsl_sf_result Icm1; gsl_sf_result lg_c; double sgn; int stat_g = gsl_sf_lngamma_sgn_e(c, &lg_c, &sgn); int stat_I = hyperg_0F1_bessel_I(c-1.0, 2.0*sqrt(x), &Icm1); if(stat_g != GSL_SUCCESS) { result->val = 0.0; result->err = 0.0; return stat_g; } else if(Icm1.val == 0.0) { result->val = 0.0; result->err = 0.0; return stat_I; } else { const double tl = log(x)*0.5*(1.0-c); const double ln_pre_val = lg_c.val + tl; const double ln_pre_err = lg_c.err + 2.0 * GSL_DBL_EPSILON * fabs(tl); return gsl_sf_exp_mult_err_e(ln_pre_val, ln_pre_err, sgn*Icm1.val, Icm1.err, result); } } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_hyperg_0F1(const double c, const double x) { EVAL_RESULT(gsl_sf_hyperg_0F1_e(c, x, &result)); } gsl/specfunc/bessel_I1.c0000644000175000017500000001523413536674414013517 0ustar eddedd/* specfunc/bessel_I1.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "error.h" #include "chebyshev.h" #include "cheb_eval.c" #define ROOT_EIGHT (2.0*M_SQRT2) /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* based on SLATEC besi1(), besi1e() */ /* chebyshev expansions series for bi1 on the interval 0. to 9.00000d+00 with weighted error 2.40e-17 log weighted error 16.62 significant figures required 16.23 decimal places required 17.14 series for ai1 on the interval 1.25000d-01 to 3.33333d-01 with weighted error 6.98e-17 log weighted error 16.16 significant figures required 14.53 decimal places required 16.82 series for ai12 on the interval 0. to 1.25000d-01 with weighted error 3.55e-17 log weighted error 16.45 significant figures required 14.69 decimal places required 17.12 */ static double bi1_data[11] = { -0.001971713261099859, 0.407348876675464810, 0.034838994299959456, 0.001545394556300123, 0.000041888521098377, 0.000000764902676483, 0.000000010042493924, 0.000000000099322077, 0.000000000000766380, 0.000000000000004741, 0.000000000000000024 }; static cheb_series bi1_cs = { bi1_data, 10, -1, 1, 10 }; static double ai1_data[21] = { -0.02846744181881479, -0.01922953231443221, -0.00061151858579437, -0.00002069971253350, 0.00000858561914581, 0.00000104949824671, -0.00000029183389184, -0.00000001559378146, 0.00000001318012367, -0.00000000144842341, -0.00000000029085122, 0.00000000012663889, -0.00000000001664947, -0.00000000000166665, 0.00000000000124260, -0.00000000000027315, 0.00000000000002023, 0.00000000000000730, -0.00000000000000333, 0.00000000000000071, -0.00000000000000006 }; static cheb_series ai1_cs = { ai1_data, 20, -1, 1, 11 }; static double ai12_data[22] = { 0.02857623501828014, -0.00976109749136147, -0.00011058893876263, -0.00000388256480887, -0.00000025122362377, -0.00000002631468847, -0.00000000383538039, -0.00000000055897433, -0.00000000001897495, 0.00000000003252602, 0.00000000001412580, 0.00000000000203564, -0.00000000000071985, -0.00000000000040836, -0.00000000000002101, 0.00000000000004273, 0.00000000000001041, -0.00000000000000382, -0.00000000000000186, 0.00000000000000033, 0.00000000000000028, -0.00000000000000003 }; static cheb_series ai12_cs = { ai12_data, 21, -1, 1, 9 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_I1_scaled_e(const double x, gsl_sf_result * result) { const double xmin = 2.0 * GSL_DBL_MIN; const double x_small = ROOT_EIGHT * GSL_SQRT_DBL_EPSILON; const double y = fabs(x); /* CHECK_POINTER(result) */ if(y == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(y < xmin) { UNDERFLOW_ERROR(result); } else if(y < x_small) { result->val = 0.5*x; result->err = 0.0; return GSL_SUCCESS; } else if(y <= 3.0) { const double ey = exp(-y); gsl_sf_result c; cheb_eval_e(&bi1_cs, y*y/4.5-1.0, &c); result->val = x * ey * (0.875 + c.val); result->err = ey * c.err + y * GSL_DBL_EPSILON * fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(y <= 8.0) { const double sy = sqrt(y); gsl_sf_result c; double b; double s; cheb_eval_e(&ai1_cs, (48.0/y-11.0)/5.0, &c); b = (0.375 + c.val) / sy; s = (x > 0.0 ? 1.0 : -1.0); result->val = s * b; result->err = c.err / sy; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double sy = sqrt(y); gsl_sf_result c; double b; double s; cheb_eval_e(&ai12_cs, 16.0/y-1.0, &c); b = (0.375 + c.val) / sy; s = (x > 0.0 ? 1.0 : -1.0); result->val = s * b; result->err = c.err / sy; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_bessel_I1_e(const double x, gsl_sf_result * result) { const double xmin = 2.0 * GSL_DBL_MIN; const double x_small = ROOT_EIGHT * GSL_SQRT_DBL_EPSILON; const double y = fabs(x); /* CHECK_POINTER(result) */ if(y == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(y < xmin) { UNDERFLOW_ERROR(result); } else if(y < x_small) { result->val = 0.5*x; result->err = 0.0; return GSL_SUCCESS; } else if(y <= 3.0) { gsl_sf_result c; cheb_eval_e(&bi1_cs, y*y/4.5-1.0, &c); result->val = x * (0.875 + c.val); result->err = y * c.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(y < GSL_LOG_DBL_MAX) { const double ey = exp(y); gsl_sf_result I1_scaled; gsl_sf_bessel_I1_scaled_e(x, &I1_scaled); result->val = ey * I1_scaled.val; result->err = ey * I1_scaled.err + y * GSL_DBL_EPSILON * fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { OVERFLOW_ERROR(result); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_I1_scaled(const double x) { EVAL_RESULT(gsl_sf_bessel_I1_scaled_e(x, &result)); } double gsl_sf_bessel_I1(const double x) { EVAL_RESULT(gsl_sf_bessel_I1_e(x, &result)); } gsl/specfunc/bessel_olver.h0000644000175000017500000000223613536674414014400 0ustar eddedd/* specfunc/bessel_olver.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef BESSEL_OLVER_H_ #define BESSEL_OLVER_H_ #include int gsl_sf_bessel_Jnu_asymp_Olver_e(double nu, double x, gsl_sf_result * result); int gsl_sf_bessel_Ynu_asymp_Olver_e(double nu, double x, gsl_sf_result * result); double gsl_sf_bessel_Olver_zofmzeta(double minus_zeta); #endif /* !BESSEL_OLVER_H_ */ gsl/specfunc/gsl_sf_gegenbauer.h0000644000175000017500000000415213536674414015354 0ustar eddedd/* specfunc/gsl_sf_gegenbauer.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_GEGENBAUER_H__ #define __GSL_SF_GEGENBAUER_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Evaluate Gegenbauer polynomials * using explicit representations. * * exceptions: none */ int gsl_sf_gegenpoly_1_e(double lambda, double x, gsl_sf_result * result); int gsl_sf_gegenpoly_2_e(double lambda, double x, gsl_sf_result * result); int gsl_sf_gegenpoly_3_e(double lambda, double x, gsl_sf_result * result); double gsl_sf_gegenpoly_1(double lambda, double x); double gsl_sf_gegenpoly_2(double lambda, double x); double gsl_sf_gegenpoly_3(double lambda, double x); /* Evaluate Gegenbauer polynomials. * * lambda > -1/2, n >= 0 * exceptions: GSL_EDOM */ int gsl_sf_gegenpoly_n_e(int n, double lambda, double x, gsl_sf_result * result); double gsl_sf_gegenpoly_n(int n, double lambda, double x); /* Calculate array of Gegenbauer polynomials * for n = (0, 1, 2, ... nmax) * * lambda > -1/2, nmax >= 0 * exceptions: GSL_EDOM */ int gsl_sf_gegenpoly_array(int nmax, double lambda, double x, double * result_array); __END_DECLS #endif /* __GSL_SF_GEGENBAUER_H__ */ gsl/specfunc/legendre_con.c0000644000175000017500000012450113536674414014333 0ustar eddedd/* specfunc/legendre_con.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * Copyright (C) 2010 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include #include #include #include #include #include "error.h" #include "legendre.h" #define Root_2OverPi_ 0.797884560802865355879892 #define locEPS (1000.0*GSL_DBL_EPSILON) /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ #define RECURSE_LARGE (1.0e-5*GSL_DBL_MAX) #define RECURSE_SMALL (1.0e+5*GSL_DBL_MIN) /* Continued fraction for f_{ell+1}/f_ell * f_ell := P^{-mu-ell}_{-1/2 + I tau}(x), x < 1.0 * * Uses standard CF method from Temme's book. */ static int conicalP_negmu_xlt1_CF1(const double mu, const int ell, const double tau, const double x, gsl_sf_result * result) { const double RECUR_BIG = GSL_SQRT_DBL_MAX; const int maxiter = 5000; int n = 1; double xi = x/(sqrt(1.0-x)*sqrt(1.0+x)); double Anm2 = 1.0; double Bnm2 = 0.0; double Anm1 = 0.0; double Bnm1 = 1.0; double a1 = 1.0; double b1 = 2.0*(mu + ell + 1.0) * xi; double An = b1*Anm1 + a1*Anm2; double Bn = b1*Bnm1 + a1*Bnm2; double an, bn; double fn = An/Bn; while(n < maxiter) { double old_fn; double del; n++; Anm2 = Anm1; Bnm2 = Bnm1; Anm1 = An; Bnm1 = Bn; an = tau*tau + (mu - 0.5 + ell + n)*(mu - 0.5 + ell + n); bn = 2.0*(ell + mu + n) * xi; An = bn*Anm1 + an*Anm2; Bn = bn*Bnm1 + an*Bnm2; if(fabs(An) > RECUR_BIG || fabs(Bn) > RECUR_BIG) { An /= RECUR_BIG; Bn /= RECUR_BIG; Anm1 /= RECUR_BIG; Bnm1 /= RECUR_BIG; Anm2 /= RECUR_BIG; Bnm2 /= RECUR_BIG; } old_fn = fn; fn = An/Bn; del = old_fn/fn; if(fabs(del - 1.0) < 2.0*GSL_DBL_EPSILON) break; } result->val = fn; result->err = 4.0 * GSL_DBL_EPSILON * (sqrt(n) + 1.0) * fabs(fn); if(n >= maxiter) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } /* Continued fraction for f_{ell+1}/f_ell * f_ell := P^{-mu-ell}_{-1/2 + I tau}(x), x >= 1.0 * * Uses Gautschi (Euler) equivalent series. */ static int conicalP_negmu_xgt1_CF1(const double mu, const int ell, const double tau, const double x, gsl_sf_result * result) { const int maxk = 20000; const double gamma = 1.0-1.0/(x*x); const double pre = sqrt(x-1.0)*sqrt(x+1.0) / (x*(2.0*(ell+mu+1.0))); double tk = 1.0; double sum = 1.0; double rhok = 0.0; int k; for(k=1; kval = pre * sum; result->err = fabs(pre * tk); result->err += 2.0 * GSL_DBL_EPSILON * (sqrt(k) + 1.0) * fabs(pre*sum); if(k >= maxk) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } /* Implementation of large negative mu asymptotic * [Dunster, Proc. Roy. Soc. Edinburgh 119A, 311 (1991), p. 326] */ inline static double olver_U1(double beta2, double p) { return (p-1.0)/(24.0*(1.0+beta2)) * (3.0 + beta2*(2.0 + 5.0*p*(1.0+p))); } inline static double olver_U2(double beta2, double p) { double beta4 = beta2*beta2; double p2 = p*p; double poly1 = 4.0*beta4 + 84.0*beta2 - 63.0; double poly2 = 16.0*beta4 + 90.0*beta2 - 81.0; double poly3 = beta2*p2*(97.0*beta2 - 432.0 + 77.0*p*(beta2-6.0) - 385.0*beta2*p2*(1.0 + p)); return (1.0-p)/(1152.0*(1.0+beta2)) * (poly1 + poly2 + poly3); } static const double U3c1[] = { -1307.0, -1647.0, 3375.0, 3675.0 }; static const double U3c2[] = { 29366.0, 35835.0, -252360.0, -272630.0, 276810.0, 290499.0 }; static const double U3c3[] = { -29748.0, -8840.0, 1725295.0, 1767025.0, -7313470.0, -754778.0, 6309875.0, 6480045.0 }; static const double U3c4[] = { 2696.0, -16740.0, -524250.0, -183975.0, 14670540.0, 14172939.0, -48206730.0, -48461985.0, 36756720.0, 37182145.0 }; static const double U3c5[] = { 9136.0, 22480.0, 12760.0, -252480.0, -4662165.0, -1705341.0, 92370135.0, 86244015.0, -263678415.0, -260275015.0, 185910725.0, 185910725.0 }; #if 0 static double olver_U3(double beta2, double p) { double beta4 = beta2*beta2; double beta6 = beta4*beta2; double opb2s = (1.0+beta2)*(1.0+beta2); double den = 39813120.0 * opb2s*opb2s; double poly1 = gsl_poly_eval(U3c1, 4, p); double poly2 = gsl_poly_eval(U3c2, 6, p); double poly3 = gsl_poly_eval(U3c3, 8, p); double poly4 = gsl_poly_eval(U3c4, 10, p); double poly5 = gsl_poly_eval(U3c5, 12, p); return (p-1.0)*( 1215.0*poly1 + 324.0*beta2*poly2 + 54.0*beta4*poly3 + 12.0*beta6*poly4 + beta4*beta4*poly5 ) / den; } #endif /* 0 */ /* Large negative mu asymptotic * P^{-mu}_{-1/2 + I tau}, mu -> Inf * |x| < 1 * * [Dunster, Proc. Roy. Soc. Edinburgh 119A, 311 (1991), p. 326] */ int gsl_sf_conicalP_xlt1_large_neg_mu_e(double mu, double tau, double x, gsl_sf_result * result, double * ln_multiplier) { double beta = tau/mu; double beta2 = beta*beta; double S = beta * acos((1.0-beta2)/(1.0+beta2)); double p = x/sqrt(beta2*(1.0-x*x) + 1.0); gsl_sf_result lg_mup1; int lg_stat = gsl_sf_lngamma_e(mu+1.0, &lg_mup1); double ln_pre_1 = 0.5*mu*(S - log(1.0+beta2) + log((1.0-p)/(1.0+p))) - lg_mup1.val; double ln_pre_2 = -0.25 * log(1.0 + beta2*(1.0-x)); double ln_pre_3 = -tau * atan(p*beta); double ln_pre = ln_pre_1 + ln_pre_2 + ln_pre_3; double sum = 1.0 - olver_U1(beta2, p)/mu + olver_U2(beta2, p)/(mu*mu); if(sum == 0.0) { result->val = 0.0; result->err = 0.0; *ln_multiplier = 0.0; return GSL_SUCCESS; } else { int stat_e = gsl_sf_exp_mult_e(ln_pre, sum, result); if(stat_e != GSL_SUCCESS) { result->val = sum; result->err = 2.0 * GSL_DBL_EPSILON * fabs(sum); *ln_multiplier = ln_pre; } else { *ln_multiplier = 0.0; } return lg_stat; } } /* Implementation of large tau asymptotic * * A_n^{-mu}, B_n^{-mu} [Olver, p.465, 469] */ inline static double olver_B0_xi(double mu, double xi) { return (1.0 - 4.0*mu*mu)/(8.0*xi) * (1.0/tanh(xi) - 1.0/xi); } static double olver_A1_xi(double mu, double xi, double x) { double B = olver_B0_xi(mu, xi); double psi; if(fabs(x - 1.0) < GSL_ROOT4_DBL_EPSILON) { double y = x - 1.0; double s = -1.0/3.0 + y*(2.0/15.0 - y *(61.0/945.0 - 452.0/14175.0*y)); psi = (4.0*mu*mu - 1.0)/16.0 * s; } else { psi = (4.0*mu*mu - 1.0)/16.0 * (1.0/(x*x-1.0) - 1.0/(xi*xi)); } return 0.5*xi*xi*B*B + (mu+0.5)*B - psi + mu/6.0*(0.25 - mu*mu); } inline static double olver_B0_th(double mu, double theta) { return -(1.0 - 4.0*mu*mu)/(8.0*theta) * (1.0/tan(theta) - 1.0/theta); } static double olver_A1_th(double mu, double theta, double x) { double B = olver_B0_th(mu, theta); double psi; if(fabs(x - 1.0) < GSL_ROOT4_DBL_EPSILON) { double y = 1.0 - x; double s = -1.0/3.0 + y*(2.0/15.0 - y *(61.0/945.0 - 452.0/14175.0*y)); psi = (4.0*mu*mu - 1.0)/16.0 * s; } else { psi = (4.0*mu*mu - 1.0)/16.0 * (1.0/(x*x-1.0) + 1.0/(theta*theta)); } return -0.5*theta*theta*B*B + (mu+0.5)*B - psi + mu/6.0*(0.25 - mu*mu); } /* Large tau uniform asymptotics * P^{-mu}_{-1/2 + I tau} * 1 < x * tau -> Inf * [Olver, p. 469] */ int gsl_sf_conicalP_xgt1_neg_mu_largetau_e(const double mu, const double tau, const double x, double acosh_x, gsl_sf_result * result, double * ln_multiplier) { double xi = acosh_x; double ln_xi_pre; double ln_pre; double sumA, sumB, sum; double arg; gsl_sf_result J_mup1; gsl_sf_result J_mu; double J_mum1; if(xi < GSL_ROOT4_DBL_EPSILON) { ln_xi_pre = -xi*xi/6.0; /* log(1.0 - xi*xi/6.0) */ } else { gsl_sf_result lnshxi; gsl_sf_lnsinh_e(xi, &lnshxi); ln_xi_pre = log(xi) - lnshxi.val; /* log(xi/sinh(xi) */ } ln_pre = 0.5*ln_xi_pre - mu*log(tau); arg = tau*xi; gsl_sf_bessel_Jnu_e(mu + 1.0, arg, &J_mup1); gsl_sf_bessel_Jnu_e(mu, arg, &J_mu); J_mum1 = -J_mup1.val + 2.0*mu/arg*J_mu.val; /* careful of mu < 1 */ sumA = 1.0 - olver_A1_xi(-mu, xi, x)/(tau*tau); sumB = olver_B0_xi(-mu, xi); sum = J_mu.val * sumA - xi/tau * J_mum1 * sumB; if(sum == 0.0) { result->val = 0.0; result->err = 0.0; *ln_multiplier = 0.0; return GSL_SUCCESS; } else { int stat_e = gsl_sf_exp_mult_e(ln_pre, sum, result); if(stat_e != GSL_SUCCESS) { result->val = sum; result->err = 2.0 * GSL_DBL_EPSILON * fabs(sum); *ln_multiplier = ln_pre; } else { *ln_multiplier = 0.0; } return GSL_SUCCESS; } } /* Large tau uniform asymptotics * P^{-mu}_{-1/2 + I tau} * -1 < x < 1 * tau -> Inf * [Olver, p. 473] */ int gsl_sf_conicalP_xlt1_neg_mu_largetau_e(const double mu, const double tau, const double x, const double acos_x, gsl_sf_result * result, double * ln_multiplier) { double theta = acos_x; double ln_th_pre; double ln_pre; double sumA, sumB, sum, sumerr; double arg; gsl_sf_result I_mup1, I_mu; double I_mum1; if(theta < GSL_ROOT4_DBL_EPSILON) { ln_th_pre = theta*theta/6.0; /* log(1.0 + theta*theta/6.0) */ } else { ln_th_pre = log(theta/sin(theta)); } ln_pre = 0.5 * ln_th_pre - mu * log(tau); arg = tau*theta; gsl_sf_bessel_Inu_e(mu + 1.0, arg, &I_mup1); gsl_sf_bessel_Inu_e(mu, arg, &I_mu); I_mum1 = I_mup1.val + 2.0*mu/arg * I_mu.val; /* careful of mu < 1 */ sumA = 1.0 - olver_A1_th(-mu, theta, x)/(tau*tau); sumB = olver_B0_th(-mu, theta); sum = I_mu.val * sumA - theta/tau * I_mum1 * sumB; sumerr = fabs(I_mu.err * sumA); sumerr += fabs(I_mup1.err * theta/tau * sumB); sumerr += fabs(I_mu.err * theta/tau * sumB * 2.0 * mu/arg); if(sum == 0.0) { result->val = 0.0; result->err = 0.0; *ln_multiplier = 0.0; return GSL_SUCCESS; } else { int stat_e = gsl_sf_exp_mult_e(ln_pre, sum, result); if(stat_e != GSL_SUCCESS) { result->val = sum; result->err = sumerr; result->err += GSL_DBL_EPSILON * fabs(sum); *ln_multiplier = ln_pre; } else { *ln_multiplier = 0.0; } return GSL_SUCCESS; } } /* Hypergeometric function which appears in the * large x expansion below: * * 2F1(1/4 - mu/2 - I tau/2, 3/4 - mu/2 - I tau/2, 1 - I tau, y) * * Note that for the usage below y = 1/x^2; */ static int conicalP_hyperg_large_x(const double mu, const double tau, const double y, double * reF, double * imF) { const int kmax = 1000; const double re_a = 0.25 - 0.5*mu; const double re_b = 0.75 - 0.5*mu; const double re_c = 1.0; const double im_a = -0.5*tau; const double im_b = -0.5*tau; const double im_c = -tau; double re_sum = 1.0; double im_sum = 0.0; double re_term = 1.0; double im_term = 0.0; int k; for(k=1; k<=kmax; k++) { double re_ak = re_a + k - 1.0; double re_bk = re_b + k - 1.0; double re_ck = re_c + k - 1.0; double im_ak = im_a; double im_bk = im_b; double im_ck = im_c; double den = re_ck*re_ck + im_ck*im_ck; double re_multiplier = ((re_ak*re_bk - im_ak*im_bk)*re_ck + im_ck*(im_ak*re_bk + re_ak*im_bk)) / den; double im_multiplier = ((im_ak*re_bk + re_ak*im_bk)*re_ck - im_ck*(re_ak*re_bk - im_ak*im_bk)) / den; double re_tmp = re_multiplier*re_term - im_multiplier*im_term; double im_tmp = im_multiplier*re_term + re_multiplier*im_term; double asum = fabs(re_sum) + fabs(im_sum); re_term = y/k * re_tmp; im_term = y/k * im_tmp; if(fabs(re_term/asum) < GSL_DBL_EPSILON && fabs(im_term/asum) < GSL_DBL_EPSILON) break; re_sum += re_term; im_sum += im_term; } *reF = re_sum; *imF = im_sum; if(k == kmax) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } /* P^{mu}_{-1/2 + I tau} * x->Inf */ int gsl_sf_conicalP_large_x_e(const double mu, const double tau, const double x, gsl_sf_result * result, double * ln_multiplier) { /* 2F1 term */ double y = ( x < 0.5*GSL_SQRT_DBL_MAX ? 1.0/(x*x) : 0.0 ); double reF, imF; int stat_F = conicalP_hyperg_large_x(mu, tau, y, &reF, &imF); /* f = Gamma(+i tau)/Gamma(1/2 - mu + i tau) * FIXME: shift so it's better for tau-> 0 */ gsl_sf_result lgr_num, lgth_num; gsl_sf_result lgr_den, lgth_den; int stat_gn = gsl_sf_lngamma_complex_e(0.0,tau,&lgr_num,&lgth_num); int stat_gd = gsl_sf_lngamma_complex_e(0.5-mu,tau,&lgr_den,&lgth_den); double angle = lgth_num.val - lgth_den.val + atan2(imF,reF); double lnx = log(x); double lnxp1 = log(x+1.0); double lnxm1 = log(x-1.0); double lnpre_const = 0.5*M_LN2 - 0.5*M_LNPI; double lnpre_comm = (mu-0.5)*lnx - 0.5*mu*(lnxp1 + lnxm1); double lnpre_err = GSL_DBL_EPSILON * (0.5*M_LN2 + 0.5*M_LNPI) + GSL_DBL_EPSILON * fabs((mu-0.5)*lnx) + GSL_DBL_EPSILON * fabs(0.5*mu)*(fabs(lnxp1)+fabs(lnxm1)); /* result = pre*|F|*|f| * cos(angle - tau * (log(x)+M_LN2)) */ gsl_sf_result cos_result; int stat_cos = gsl_sf_cos_e(angle + tau*(log(x) + M_LN2), &cos_result); int status = GSL_ERROR_SELECT_4(stat_cos, stat_gd, stat_gn, stat_F); if(cos_result.val == 0.0) { result->val = 0.0; result->err = 0.0; return status; } else { double lnFf_val = 0.5*log(reF*reF+imF*imF) + lgr_num.val - lgr_den.val; double lnFf_err = lgr_num.err + lgr_den.err + GSL_DBL_EPSILON * fabs(lnFf_val); double lnnoc_val = lnpre_const + lnpre_comm + lnFf_val; double lnnoc_err = lnpre_err + lnFf_err + GSL_DBL_EPSILON * fabs(lnnoc_val); int stat_e = gsl_sf_exp_mult_err_e(lnnoc_val, lnnoc_err, cos_result.val, cos_result.err, result); if(stat_e == GSL_SUCCESS) { *ln_multiplier = 0.0; } else { result->val = cos_result.val; result->err = cos_result.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); *ln_multiplier = lnnoc_val; } return status; } } /* P^{mu}_{-1/2 + I tau} first hypergeometric representation * -1 < x < 1 * This is more effective for |x| small, however it will work w/o * reservation for any x < 0 because everything is positive * definite in that case. * * [Kolbig, (3)] (note typo in args of gamma functions) * [Bateman, (22)] (correct form) */ static int conicalP_xlt1_hyperg_A(double mu, double tau, double x, gsl_sf_result * result) { double x2 = x*x; double err_amp = 1.0 + 1.0/(GSL_DBL_EPSILON + fabs(1.0-fabs(x))); double pre_val = M_SQRTPI / pow(0.5*sqrt(1-x2), mu); double pre_err = err_amp * GSL_DBL_EPSILON * (fabs(mu)+1.0) * fabs(pre_val) ; gsl_sf_result ln_g1, ln_g2, arg_g1, arg_g2; gsl_sf_result F1, F2; gsl_sf_result pre1, pre2; double t1_val, t1_err; double t2_val, t2_err; int stat_F1 = gsl_sf_hyperg_2F1_conj_e(0.25 - 0.5*mu, 0.5*tau, 0.5, x2, &F1); int stat_F2 = gsl_sf_hyperg_2F1_conj_e(0.75 - 0.5*mu, 0.5*tau, 1.5, x2, &F2); int status = GSL_ERROR_SELECT_2(stat_F1, stat_F2); gsl_sf_lngamma_complex_e(0.75 - 0.5*mu, -0.5*tau, &ln_g1, &arg_g1); gsl_sf_lngamma_complex_e(0.25 - 0.5*mu, -0.5*tau, &ln_g2, &arg_g2); gsl_sf_exp_err_e(-2.0*ln_g1.val, 2.0*ln_g1.err, &pre1); gsl_sf_exp_err_e(-2.0*ln_g2.val, 2.0*ln_g2.err, &pre2); pre2.val *= -2.0*x; pre2.err *= 2.0*fabs(x); pre2.err += GSL_DBL_EPSILON * fabs(pre2.val); t1_val = pre1.val * F1.val; t1_err = fabs(pre1.val) * F1.err + pre1.err * fabs(F1.val); t2_val = pre2.val * F2.val; t2_err = fabs(pre2.val) * F2.err + pre2.err * fabs(F2.val); result->val = pre_val * (t1_val + t2_val); result->err = pre_val * (t1_err + t2_err); result->err += pre_err * fabs(t1_val + t2_val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return status; } /* P^{mu}_{-1/2 + I tau} * defining hypergeometric representation * [Abramowitz+Stegun, 8.1.2] * 1 < x < 3 * effective for x near 1 * */ #if 0 static int conicalP_def_hyperg(double mu, double tau, double x, double * result) { double F; int stat_F = gsl_sf_hyperg_2F1_conj_renorm_e(0.5, tau, 1.0-mu, 0.5*(1.0-x), &F); *result = pow((x+1.0)/(x-1.0), 0.5*mu) * F; return stat_F; } #endif /* 0 */ /* P^{mu}_{-1/2 + I tau} second hypergeometric representation * [Zhurina+Karmazina, (3.1)] * -1 < x < 3 * effective for x near 1 * */ #if 0 static int conicalP_xnear1_hyperg_C(double mu, double tau, double x, double * result) { double ln_pre, arg_pre; double ln_g1, arg_g1; double ln_g2, arg_g2; double F; int stat_F = gsl_sf_hyperg_2F1_conj_renorm_e(0.5+mu, tau, 1.0+mu, 0.5*(1.0-x), &F); gsl_sf_lngamma_complex_e(0.5+mu, tau, &ln_g1, &arg_g1); gsl_sf_lngamma_complex_e(0.5-mu, tau, &ln_g2, &arg_g2); ln_pre = mu*M_LN2 - 0.5*mu*log(fabs(x*x-1.0)) + ln_g1 - ln_g2; arg_pre = arg_g1 - arg_g2; *result = exp(ln_pre) * F; return stat_F; } #endif /* 0 */ /* V0, V1 from Kolbig, m = 0 */ static int conicalP_0_V(const double t, const double f, const double tau, const double sgn, double * V0, double * V1) { double C[8]; double T[8]; double H[8]; double V[12]; int i; T[0] = 1.0; H[0] = 1.0; V[0] = 1.0; for(i=1; i<=7; i++) { T[i] = T[i-1] * t; H[i] = H[i-1] * (t*f); } for(i=1; i<=11; i++) { V[i] = V[i-1] * tau; } C[0] = 1.0; C[1] = (H[1]-1.0)/(8.0*T[1]); C[2] = (9.0*H[2] + 6.0*H[1] - 15.0 - sgn*8.0*T[2])/(128.0*T[2]); C[3] = 5.0*(15.0*H[3] + 27.0*H[2] + 21.0*H[1] - 63.0 - sgn*T[2]*(16.0*H[1]+24.0))/(1024.0*T[3]); C[4] = 7.0*(525.0*H[4] + 1500.0*H[3] + 2430.0*H[2] + 1980.0*H[1] - 6435.0 + 192.0*T[4] - sgn*T[2]*(720.0*H[2]+1600.0*H[1]+2160.0) ) / (32768.0*T[4]); C[5] = 21.0*(2835.0*H[5] + 11025.0*H[4] + 24750.0*H[3] + 38610.0*H[2] + 32175.0*H[1] - 109395.0 + T[4]*(1984.0*H[1]+4032.0) - sgn*T[2]*(4800.0*H[3]+15120.0*H[2]+26400.0*H[1]+34320.0) ) / (262144.0*T[5]); C[6] = 11.0*(218295.0*H[6] + 1071630.0*H[5] + 3009825.0*H[4] + 6142500.0*H[3] + 9398025.0*H[2] + 7936110.0*H[1] - 27776385.0 + T[4]*(254016.0*H[2]+749952.0*H[1]+1100736.0) - sgn*T[2]*(441000.0*H[4] + 1814400.0*H[3] + 4127760.0*H[2] + 6552000.0*H[1] + 8353800.0 + 31232.0*T[4] ) ) / (4194304.0*T[6]); *V0 = C[0] + (-4.0*C[3]/T[1]+C[4])/V[4] + (-192.0*C[5]/T[3]+144.0*C[6]/T[2])/V[8] + sgn * (-C[2]/V[2] + (-24.0*C[4]/T[2]+12.0*C[5]/T[1]-C[6])/V[6] + (-1920.0*C[6]/T[4])/V[10] ); *V1 = C[1]/V[1] + (8.0*(C[3]/T[2]-C[4]/T[1])+C[5])/V[5] + (384.0*C[5]/T[4] - 768.0*C[6]/T[3])/V[9] + sgn * ((2.0*C[2]/T[1]-C[3])/V[3] + (48.0*C[4]/T[3]-72.0*C[5]/T[2] + 18.0*C[6]/T[1])/V[7] + (3840.0*C[6]/T[5])/V[11] ); return GSL_SUCCESS; } /* V0, V1 from Kolbig, m = 1 */ static int conicalP_1_V(const double t, const double f, const double tau, const double sgn, double * V0, double * V1) { double Cm1; double C[8]; double T[8]; double H[8]; double V[12]; int i; T[0] = 1.0; H[0] = 1.0; V[0] = 1.0; for(i=1; i<=7; i++) { T[i] = T[i-1] * t; H[i] = H[i-1] * (t*f); } for(i=1; i<=11; i++) { V[i] = V[i-1] * tau; } Cm1 = -1.0; C[0] = 3.0*(1.0-H[1])/(8.0*T[1]); C[1] = (-15.0*H[2]+6.0*H[1]+9.0+sgn*8.0*T[2])/(128.0*T[2]); C[2] = 3.0*(-35.0*H[3] - 15.0*H[2] + 15.0*H[1] + 35.0 + sgn*T[2]*(32.0*H[1]+8.0))/(1024.0*T[3]); C[3] = (-4725.0*H[4] - 6300.0*H[3] - 3150.0*H[2] + 3780.0*H[1] + 10395.0 -1216.0*T[4] + sgn*T[2]*(6000.0*H[2]+5760.0*H[1]+1680.0)) / (32768.0*T[4]); C[4] = 7.0*(-10395.0*H[5] - 23625.0*H[4] - 28350.0*H[3] - 14850.0*H[2] +19305.0*H[1] + 57915.0 - T[4]*(6336.0*H[1]+6080.0) + sgn*T[2]*(16800.0*H[3] + 30000.0*H[2] + 25920.0*H[1] + 7920.0) ) / (262144.0*T[5]); C[5] = (-2837835.0*H[6] - 9168390.0*H[5] - 16372125.0*H[4] - 18918900*H[3] -10135125.0*H[2] + 13783770.0*H[1] + 43648605.0 -T[4]*(3044160.0*H[2] + 5588352.0*H[1] + 4213440.0) +sgn*T[2]*(5556600.0*H[4] + 14817600.0*H[3] + 20790000.0*H[2] + 17297280.0*H[1] + 5405400.0 + 323072.0*T[4] ) ) / (4194304.0*T[6]); C[6] = 0.0; *V0 = C[0] + (-4.0*C[3]/T[1]+C[4])/V[4] + (-192.0*C[5]/T[3]+144.0*C[6]/T[2])/V[8] + sgn * (-C[2]/V[2] + (-24.0*C[4]/T[2]+12.0*C[5]/T[1]-C[6])/V[6] ); *V1 = C[1]/V[1] + (8.0*(C[3]/T[2]-C[4]/T[1])+C[5])/V[5] + (384.0*C[5]/T[4] - 768.0*C[6]/T[3])/V[9] + sgn * (Cm1*V[1] + (2.0*C[2]/T[1]-C[3])/V[3] + (48.0*C[4]/T[3]-72.0*C[5]/T[2] + 18.0*C[6]/T[1])/V[7] ); return GSL_SUCCESS; } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ /* P^0_{-1/2 + I lambda} */ int gsl_sf_conicalP_0_e(const double lambda, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= -1.0) { DOMAIN_ERROR(result); } else if(x == 1.0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(lambda == 0.0) { gsl_sf_result K; int stat_K; if(x < 1.0) { const double th = acos(x); const double s = sin(0.5*th); stat_K = gsl_sf_ellint_Kcomp_e(s, GSL_MODE_DEFAULT, &K); result->val = 2.0/M_PI * K.val; result->err = 2.0/M_PI * K.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_K; } else { const double xi = acosh(x); const double c = cosh(0.5*xi); const double t = tanh(0.5*xi); stat_K = gsl_sf_ellint_Kcomp_e(t, GSL_MODE_DEFAULT, &K); result->val = 2.0/M_PI / c * K.val; result->err = 2.0/M_PI / c * K.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_K; } } else if( (x <= 0.0 && lambda < 1000.0) || (x < 0.1 && lambda < 17.0) || (x < 0.2 && lambda < 5.0 ) ) { return conicalP_xlt1_hyperg_A(0.0, lambda, x, result); } else if( (x <= 0.2 && lambda < 17.0) || (x <= 1.5 && lambda < 20.0) ) { return gsl_sf_hyperg_2F1_conj_e(0.5, lambda, 1.0, (1.0-x)/2, result); } else if(1.5 < x && lambda < GSL_MAX(x,20.0)) { gsl_sf_result P; double lm; int stat_P = gsl_sf_conicalP_large_x_e(0.0, lambda, x, &P, &lm ); int stat_e = gsl_sf_exp_mult_err_e(lm, 2.0*GSL_DBL_EPSILON * fabs(lm), P.val, P.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_P); } else { double V0, V1; if(x < 1.0) { double th = acos(x); double sth = sqrt(1.0-x*x); /* sin(th) */ gsl_sf_result I0, I1; int stat_I0 = gsl_sf_bessel_I0_scaled_e(th * lambda, &I0); int stat_I1 = gsl_sf_bessel_I1_scaled_e(th * lambda, &I1); int stat_I = GSL_ERROR_SELECT_2(stat_I0, stat_I1); int stat_V = conicalP_0_V(th, x/sth, lambda, -1.0, &V0, &V1); double bessterm = V0 * I0.val + V1 * I1.val; double besserr = fabs(V0) * I0.err + fabs(V1) * I1.err; double arg1 = th*lambda; double sqts = sqrt(th/sth); int stat_e = gsl_sf_exp_mult_err_e(arg1, 4.0 * GSL_DBL_EPSILON * fabs(arg1), sqts * bessterm, sqts * besserr, result); return GSL_ERROR_SELECT_3(stat_e, stat_V, stat_I); } else { double sh = sqrt(x-1.0)*sqrt(x+1.0); /* sinh(xi) */ double xi = log(x + sh); /* xi = acosh(x) */ gsl_sf_result J0, J1; int stat_J0 = gsl_sf_bessel_J0_e(xi * lambda, &J0); int stat_J1 = gsl_sf_bessel_J1_e(xi * lambda, &J1); int stat_J = GSL_ERROR_SELECT_2(stat_J0, stat_J1); int stat_V = conicalP_0_V(xi, x/sh, lambda, 1.0, &V0, &V1); double bessterm = V0 * J0.val + V1 * J1.val; double besserr = fabs(V0) * J0.err + fabs(V1) * J1.err; double pre_val = sqrt(xi/sh); double pre_err = 2.0 * fabs(pre_val); result->val = pre_val * bessterm; result->err = pre_val * besserr; result->err += pre_err * fabs(bessterm); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_V, stat_J); } } } /* P^1_{-1/2 + I lambda} */ int gsl_sf_conicalP_1_e(const double lambda, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= -1.0) { DOMAIN_ERROR(result); } else if(lambda == 0.0) { gsl_sf_result K, E; int stat_K, stat_E; if(x == 1.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(x < 1.0) { if(1.0-x < GSL_SQRT_DBL_EPSILON) { double err_amp = GSL_MAX_DBL(1.0, 1.0/(GSL_DBL_EPSILON + fabs(1.0-x))); result->val = 0.25/M_SQRT2 * sqrt(1.0-x) * (1.0 + 5.0/16.0 * (1.0-x)); result->err = err_amp * 3.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double th = acos(x); const double s = sin(0.5*th); const double c2 = 1.0 - s*s; const double sth = sin(th); const double pre = 2.0/(M_PI*sth); stat_K = gsl_sf_ellint_Kcomp_e(s, GSL_MODE_DEFAULT, &K); stat_E = gsl_sf_ellint_Ecomp_e(s, GSL_MODE_DEFAULT, &E); result->val = pre * (E.val - c2 * K.val); result->err = pre * (E.err + fabs(c2) * K.err); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_K, stat_E); } } else { if(x-1.0 < GSL_SQRT_DBL_EPSILON) { double err_amp = GSL_MAX_DBL(1.0, 1.0/(GSL_DBL_EPSILON + fabs(1.0-x))); result->val = -0.25/M_SQRT2 * sqrt(x-1.0) * (1.0 - 5.0/16.0 * (x-1.0)); result->err = err_amp * 3.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double xi = acosh(x); const double c = cosh(0.5*xi); const double t = tanh(0.5*xi); const double sxi = sinh(xi); const double pre = 2.0/(M_PI*sxi) * c; stat_K = gsl_sf_ellint_Kcomp_e(t, GSL_MODE_DEFAULT, &K); stat_E = gsl_sf_ellint_Ecomp_e(t, GSL_MODE_DEFAULT, &E); result->val = pre * (E.val - K.val); result->err = pre * (E.err + K.err); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_K, stat_E); } } } else if( (x <= 0.0 && lambda < 1000.0) || (x < 0.1 && lambda < 17.0) || (x < 0.2 && lambda < 5.0 ) ) { return conicalP_xlt1_hyperg_A(1.0, lambda, x, result); } else if( (x <= 0.2 && lambda < 17.0) || (x < 1.5 && lambda < 20.0) ) { const double arg = fabs(x*x - 1.0); const double sgn = GSL_SIGN(1.0 - x); const double pre = 0.5*(lambda*lambda + 0.25) * sgn * sqrt(arg); gsl_sf_result F; int stat_F = gsl_sf_hyperg_2F1_conj_e(1.5, lambda, 2.0, (1.0-x)/2, &F); result->val = pre * F.val; result->err = fabs(pre) * F.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_F; } else if(1.5 <= x && lambda < GSL_MAX(x,20.0)) { gsl_sf_result P; double lm; int stat_P = gsl_sf_conicalP_large_x_e(1.0, lambda, x, &P, &lm ); int stat_e = gsl_sf_exp_mult_err_e(lm, 2.0 * GSL_DBL_EPSILON * fabs(lm), P.val, P.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_P); } else { double V0, V1; if(x < 1.0) { const double sqrt_1mx = sqrt(1.0 - x); const double sqrt_1px = sqrt(1.0 + x); const double th = acos(x); const double sth = sqrt_1mx * sqrt_1px; /* sin(th) */ gsl_sf_result I0, I1; int stat_I0 = gsl_sf_bessel_I0_scaled_e(th * lambda, &I0); int stat_I1 = gsl_sf_bessel_I1_scaled_e(th * lambda, &I1); int stat_I = GSL_ERROR_SELECT_2(stat_I0, stat_I1); int stat_V = conicalP_1_V(th, x/sth, lambda, -1.0, &V0, &V1); double bessterm = V0 * I0.val + V1 * I1.val; double besserr = fabs(V0) * I0.err + fabs(V1) * I1.err + 2.0 * GSL_DBL_EPSILON * fabs(V0 * I0.val) + 2.0 * GSL_DBL_EPSILON * fabs(V1 * I1.val); double arg1 = th * lambda; double sqts = sqrt(th/sth); int stat_e = gsl_sf_exp_mult_err_e(arg1, 2.0 * GSL_DBL_EPSILON * fabs(arg1), sqts * bessterm, sqts * besserr, result); result->err *= 1.0/sqrt_1mx; return GSL_ERROR_SELECT_3(stat_e, stat_V, stat_I); } else { const double sqrt_xm1 = sqrt(x - 1.0); const double sqrt_xp1 = sqrt(x + 1.0); const double sh = sqrt_xm1 * sqrt_xp1; /* sinh(xi) */ const double xi = log(x + sh); /* xi = acosh(x) */ const double xi_lam = xi * lambda; gsl_sf_result J0, J1; const int stat_J0 = gsl_sf_bessel_J0_e(xi_lam, &J0); const int stat_J1 = gsl_sf_bessel_J1_e(xi_lam, &J1); const int stat_J = GSL_ERROR_SELECT_2(stat_J0, stat_J1); const int stat_V = conicalP_1_V(xi, x/sh, lambda, 1.0, &V0, &V1); const double bessterm = V0 * J0.val + V1 * J1.val; const double besserr = fabs(V0) * J0.err + fabs(V1) * J1.err + 512.0 * 2.0 * GSL_DBL_EPSILON * fabs(V0 * J0.val) + 512.0 * 2.0 * GSL_DBL_EPSILON * fabs(V1 * J1.val) + GSL_DBL_EPSILON * fabs(xi_lam * V0 * J1.val) + GSL_DBL_EPSILON * fabs(xi_lam * V1 * J0.val); const double pre = sqrt(xi/sh); result->val = pre * bessterm; result->err = pre * besserr * sqrt_xp1 / sqrt_xm1; result->err += 4.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_V, stat_J); } } } /* P^{1/2}_{-1/2 + I lambda} (x) * [Abramowitz+Stegun 8.6.8, 8.6.12] * checked OK [GJ] Fri May 8 12:24:36 MDT 1998 */ int gsl_sf_conicalP_half_e(const double lambda, const double x, gsl_sf_result * result ) { /* CHECK_POINTER(result) */ if(x <= -1.0) { DOMAIN_ERROR(result); } else if(x < 1.0) { double err_amp = 1.0 + 1.0/(GSL_DBL_EPSILON + fabs(1.0-fabs(x))); double ac = acos(x); double den = sqrt(sqrt(1.0-x)*sqrt(1.0+x)); result->val = Root_2OverPi_ / den * cosh(ac * lambda); result->err = err_amp * 3.0 * GSL_DBL_EPSILON * fabs(result->val); result->err *= fabs(ac * lambda) + 1.0; return GSL_SUCCESS; } else if(x == 1.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { /* x > 1 */ double err_amp = 1.0 + 1.0/(GSL_DBL_EPSILON + fabs(1.0-fabs(x))); double sq_term = sqrt(x-1.0)*sqrt(x+1.0); double ln_term = log(x + sq_term); double den = sqrt(sq_term); double carg_val = lambda * ln_term; double carg_err = 2.0 * GSL_DBL_EPSILON * fabs(carg_val); gsl_sf_result cos_result; int stat_cos = gsl_sf_cos_err_e(carg_val, carg_err, &cos_result); result->val = Root_2OverPi_ / den * cos_result.val; result->err = err_amp * Root_2OverPi_ / den * cos_result.err; result->err += 4.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_cos; } } /* P^{-1/2}_{-1/2 + I lambda} (x) * [Abramowitz+Stegun 8.6.9, 8.6.14] * checked OK [GJ] Fri May 8 12:24:43 MDT 1998 */ int gsl_sf_conicalP_mhalf_e(const double lambda, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= -1.0) { DOMAIN_ERROR(result); } else if(x < 1.0) { double ac = acos(x); double den = sqrt(sqrt(1.0-x)*sqrt(1.0+x)); double arg = ac * lambda; double err_amp = 1.0 + 1.0/(GSL_DBL_EPSILON + fabs(1.0-fabs(x))); if(fabs(arg) < GSL_SQRT_DBL_EPSILON) { result->val = Root_2OverPi_ / den * ac; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); result->err *= err_amp; } else { result->val = Root_2OverPi_ / (den*lambda) * sinh(arg); result->err = GSL_DBL_EPSILON * (fabs(arg)+1.0) * fabs(result->val); result->err *= err_amp; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); } return GSL_SUCCESS; } else if(x == 1.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { /* x > 1 */ double sq_term = sqrt(x-1.0)*sqrt(x+1.0); double ln_term = log(x + sq_term); double den = sqrt(sq_term); double arg_val = lambda * ln_term; double arg_err = 2.0 * GSL_DBL_EPSILON * fabs(arg_val); if(arg_val < GSL_SQRT_DBL_EPSILON) { result->val = Root_2OverPi_ / den * ln_term; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { gsl_sf_result sin_result; int stat_sin = gsl_sf_sin_err_e(arg_val, arg_err, &sin_result); result->val = Root_2OverPi_ / (den*lambda) * sin_result.val; result->err = Root_2OverPi_ / fabs(den*lambda) * sin_result.err; result->err += 3.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_sin; } } } int gsl_sf_conicalP_sph_reg_e(const int l, const double lambda, const double x, gsl_sf_result * result ) { /* CHECK_POINTER(result) */ if(x <= -1.0 || l < -1) { DOMAIN_ERROR(result); } else if(l == -1) { return gsl_sf_conicalP_half_e(lambda, x, result); } else if(l == 0) { return gsl_sf_conicalP_mhalf_e(lambda, x, result); } else if(x == 1.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(x < 0.0) { double c = 1.0/sqrt(1.0-x*x); gsl_sf_result r_Pellm1; gsl_sf_result r_Pell; int stat_0 = gsl_sf_conicalP_half_e(lambda, x, &r_Pellm1); /* P^( 1/2) */ int stat_1 = gsl_sf_conicalP_mhalf_e(lambda, x, &r_Pell); /* P^(-1/2) */ int stat_P = GSL_ERROR_SELECT_2(stat_0, stat_1); double Pellm1 = r_Pellm1.val; double Pell = r_Pell.val; double Pellp1; int ell; for(ell=0; ellval = Pell; result->err = (0.5*l + 1.0) * GSL_DBL_EPSILON * fabs(Pell); result->err += GSL_DBL_EPSILON * l * fabs(result->val); return stat_P; } else if(x < 1.0) { const double xi = x/(sqrt(1.0-x)*sqrt(1.0+x)); gsl_sf_result rat; gsl_sf_result Phf; int stat_CF1 = conicalP_negmu_xlt1_CF1(0.5, l, lambda, x, &rat); int stat_Phf = gsl_sf_conicalP_half_e(lambda, x, &Phf); double Pellp1 = rat.val * GSL_SQRT_DBL_MIN; double Pell = GSL_SQRT_DBL_MIN; double Pellm1; int ell; for(ell=l; ell>=0; ell--) { double d = (ell+1.0)*(ell+1.0) + lambda*lambda; Pellm1 = (2.0*ell+1.0)*xi * Pell + d * Pellp1; Pellp1 = Pell; Pell = Pellm1; } result->val = GSL_SQRT_DBL_MIN * Phf.val / Pell; result->err = GSL_SQRT_DBL_MIN * Phf.err / fabs(Pell); result->err += fabs(rat.err/rat.val) * (l + 1.0) * fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_Phf, stat_CF1); } else if(x == 1.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { /* x > 1.0 */ const double xi = x/sqrt((x-1.0)*(x+1.0)); gsl_sf_result rat; int stat_CF1 = conicalP_negmu_xgt1_CF1(0.5, l, lambda, x, &rat); int stat_P; double Pellp1 = rat.val * GSL_SQRT_DBL_MIN; double Pell = GSL_SQRT_DBL_MIN; double Pellm1; int ell; for(ell=l; ell>=0; ell--) { double d = (ell+1.0)*(ell+1.0) + lambda*lambda; Pellm1 = (2.0*ell+1.0)*xi * Pell - d * Pellp1; Pellp1 = Pell; Pell = Pellm1; } if(fabs(Pell) > fabs(Pellp1)){ gsl_sf_result Phf; stat_P = gsl_sf_conicalP_half_e(lambda, x, &Phf); result->val = GSL_SQRT_DBL_MIN * Phf.val / Pell; result->err = 2.0 * GSL_SQRT_DBL_MIN * Phf.err / fabs(Pell); result->err += 2.0 * fabs(rat.err/rat.val) * (l + 1.0) * fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); } else { gsl_sf_result Pmhf; stat_P = gsl_sf_conicalP_mhalf_e(lambda, x, &Pmhf); result->val = GSL_SQRT_DBL_MIN * Pmhf.val / Pellp1; result->err = 2.0 * GSL_SQRT_DBL_MIN * Pmhf.err / fabs(Pellp1); result->err += 2.0 * fabs(rat.err/rat.val) * (l + 1.0) * fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); } return GSL_ERROR_SELECT_2(stat_P, stat_CF1); } } int gsl_sf_conicalP_cyl_reg_e(const int m, const double lambda, const double x, gsl_sf_result * result ) { /* CHECK_POINTER(result) */ if(x <= -1.0 || m < -1) { DOMAIN_ERROR(result); } else if(m == -1) { return gsl_sf_conicalP_1_e(lambda, x, result); } else if(m == 0) { return gsl_sf_conicalP_0_e(lambda, x, result); } else if(x == 1.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(x < 0.0) { double c = 1.0/sqrt(1.0-x*x); gsl_sf_result r_Pkm1; gsl_sf_result r_Pk; int stat_0 = gsl_sf_conicalP_1_e(lambda, x, &r_Pkm1); /* P^1 */ int stat_1 = gsl_sf_conicalP_0_e(lambda, x, &r_Pk); /* P^0 */ int stat_P = GSL_ERROR_SELECT_2(stat_0, stat_1); double Pkm1 = r_Pkm1.val; double Pk = r_Pk.val; double Pkp1; int k; for(k=0; kval = Pk; result->err = (m + 2.0) * GSL_DBL_EPSILON * fabs(Pk); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_P; } else if(x < 1.0) { const double xi = x/(sqrt(1.0-x)*sqrt(1.0+x)); gsl_sf_result rat; gsl_sf_result P0; int stat_CF1 = conicalP_negmu_xlt1_CF1(0.0, m, lambda, x, &rat); int stat_P0 = gsl_sf_conicalP_0_e(lambda, x, &P0); double Pkp1 = rat.val * GSL_SQRT_DBL_MIN; double Pk = GSL_SQRT_DBL_MIN; double Pkm1; int k; for(k=m; k>0; k--) { double d = (k+0.5)*(k+0.5) + lambda*lambda; Pkm1 = 2.0*k*xi * Pk + d * Pkp1; Pkp1 = Pk; Pk = Pkm1; } result->val = GSL_SQRT_DBL_MIN * P0.val / Pk; result->err = 2.0 * GSL_SQRT_DBL_MIN * P0.err / fabs(Pk); result->err += 2.0 * fabs(rat.err/rat.val) * (m + 1.0) * fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_P0, stat_CF1); } else if(x == 1.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { /* x > 1.0 */ const double xi = x/sqrt((x-1.0)*(x+1.0)); gsl_sf_result rat; int stat_CF1 = conicalP_negmu_xgt1_CF1(0.0, m, lambda, x, &rat); int stat_P; double Pkp1 = rat.val * GSL_SQRT_DBL_MIN; double Pk = GSL_SQRT_DBL_MIN; double Pkm1; int k; for(k=m; k>-1; k--) { double d = (k+0.5)*(k+0.5) + lambda*lambda; Pkm1 = 2.0*k*xi * Pk - d * Pkp1; Pkp1 = Pk; Pk = Pkm1; } if(fabs(Pk) > fabs(Pkp1)){ gsl_sf_result P1; stat_P = gsl_sf_conicalP_1_e(lambda, x, &P1); result->val = GSL_SQRT_DBL_MIN * P1.val / Pk; result->err = 2.0 * GSL_SQRT_DBL_MIN * P1.err / fabs(Pk); result->err += 2.0 * fabs(rat.err/rat.val) * (m+2.0) * fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); } else { gsl_sf_result P0; stat_P = gsl_sf_conicalP_0_e(lambda, x, &P0); result->val = GSL_SQRT_DBL_MIN * P0.val / Pkp1; result->err = 2.0 * GSL_SQRT_DBL_MIN * P0.err / fabs(Pkp1); result->err += 2.0 * fabs(rat.err/rat.val) * (m+2.0) * fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); } return GSL_ERROR_SELECT_2(stat_P, stat_CF1); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_conicalP_0(const double lambda, const double x) { EVAL_RESULT(gsl_sf_conicalP_0_e(lambda, x, &result)); } double gsl_sf_conicalP_1(const double lambda, const double x) { EVAL_RESULT(gsl_sf_conicalP_1_e(lambda, x, &result)); } double gsl_sf_conicalP_half(const double lambda, const double x) { EVAL_RESULT(gsl_sf_conicalP_half_e(lambda, x, &result)); } double gsl_sf_conicalP_mhalf(const double lambda, const double x) { EVAL_RESULT(gsl_sf_conicalP_mhalf_e(lambda, x, &result)); } double gsl_sf_conicalP_sph_reg(const int l, const double lambda, const double x) { EVAL_RESULT(gsl_sf_conicalP_sph_reg_e(l, lambda, x, &result)); } double gsl_sf_conicalP_cyl_reg(const int m, const double lambda, const double x) { EVAL_RESULT(gsl_sf_conicalP_cyl_reg_e(m, lambda, x, &result)); } gsl/specfunc/test_bessel.c0000644000175000017500000033714513536674414014235 0ustar eddedd/* specfunc/test_bessel.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include "test_sf.h" static double J[100]; static double Y[100]; static double I[100]; static double K[100]; int test_bessel(void) { gsl_sf_result r; int i; int s = 0; int sa; TEST_SF(s, gsl_sf_bessel_J0_e, (0.1, &r), 0.99750156206604003230, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_J0_e, (2.0, &r), 0.22389077914123566805, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_J0_e, (100.0, &r), 0.019985850304223122424, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_J0_e, (1.0e+10, &r), 2.1755917502468917269e-06, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_J1_e, (0.1, &r), 0.04993752603624199756, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_J1_e, (2.0, &r), 0.57672480775687338720, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_J1_e, (100.0, &r), -0.07714535201411215803, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_J1_e, (1.0e+10, &r), -7.676508175684157103e-06, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jn_e, (4, 0.1, &r), 2.6028648545684032338e-07, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jn_e, (5, 2.0, &r), 0.007039629755871685484, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jn_e, (10, 20.0, &r), 0.18648255802394508321, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jn_e, (100, 100.0, &r), 0.09636667329586155967, TEST_TOL0, GSL_SUCCESS); /* exercise the BUG#3 problem */ TEST_SF(s, gsl_sf_bessel_Jn_e, (2, 900.0, &r), -0.019974345269680646400, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jn_e, (2, 15000.0, &r), -0.0020455820181216382666, TEST_TOL4, GSL_SUCCESS); #ifdef TEST_LARGE TEST_SF(s, gsl_sf_bessel_Jn_e, (0, 1.0e+10, &r), 2.1755917502468917269e-06, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jn_e, (1, 1.0e+10, &r), -7.676508175684157103e-06, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jn_e, (0, 20000, &r), 0.00556597490495494615709982972, TEST_TOL4, GSL_SUCCESS); #endif /* Testcase demonstrating long calculation time: Time spent in gsl_sf_bessel_J_CF1 for large x<1000 and n<5 grows in proportion to x Jonny Taylor */ TEST_SF(s, gsl_sf_bessel_Jn_e, (45, 900.0, &r), 0.02562434700634278108, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Y0_e, (0.1, &r), -1.5342386513503668441, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Y0_e, (2, &r), 0.5103756726497451196, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Y0_e, (256.0, &r), -0.03381290171792454909 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Y0_e, (4294967296.0, &r), 3.657903190017678681e-06, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Y1_e, (0.1, &r), -6.45895109470202698800, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Y1_e, (2, &r), -0.10703243154093754689, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Y1_e, (100.0, &r), -0.020372312002759793305, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Y1_e, (4294967296.0, &r), 0.000011612249378370766284, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Yn_e, (4, 0.1, &r), -305832.29793353160319, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Yn_e, (5, 2, &r), -9.935989128481974981, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Yn_e, (100, 100.0, &r), -0.16692141141757650654, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Yn_e, (100, 4294967296.0, &r), 3.657889671577715808e-06, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Yn_e, (1000, 4294967296.0, &r), 3.656551321485397501e-06, 2.0e-05, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Yn_e, (2, 15000.0, &r), -0.006185217273358617849, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_I0_scaled_e, (1e-10, &r), 0.99999999990000000001, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_I0_scaled_e, (0.1, &r), 0.90710092578230109640, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_I0_scaled_e, (2, &r), 0.30850832255367103953, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_I0_scaled_e, (100.0, &r), 0.03994437929909668265, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_I0_scaled_e, (65536.0, &r), 0.0015583712551952223537, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_I1_scaled_e, (0.1, &r), 0.04529844680880932501, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_I1_scaled_e, (2, &r), 0.21526928924893765916, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_I1_scaled_e, (100.0, &r), 0.03974415302513025267, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_I1_scaled_e, (65536.0, &r), 0.0015583593657207350452, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_In_scaled_e, ( -4, 0.1, &r), 2.3575258620054605307e-07, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_In_scaled_e, ( 4, 0.1, &r), 2.3575258620054605307e-07, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_In_scaled_e, ( 5, 2.0, &r), 0.0013297610941881578142, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_In_scaled_e, ( 100, 100.0, &r), 1.7266862628167695785e-22, TEST_TOL0, GSL_SUCCESS); /* BJG: the "exact" values in the following two tests were originally computed from the taylor series for I_nu using "long double" and rescaling. The last few digits were inaccurate due to cumulative roundoff. BJG: 2006/05 I have now replaced these with the term asymptotic expansion from A&S 9.7.1 which should be fully accurate. */ TEST_SF(s, gsl_sf_bessel_In_scaled_e, ( 2, 1e7, &r), 1.261566024466416433e-4, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_In_scaled_e, ( 2, 1e8, &r), 3.989422729212649531e-5, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_I0_e, (0.1, &r), 1.0025015629340956014, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_I0_e, (2.0, &r), 2.2795853023360672674, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_I0_e, (100.0, &r), 1.0737517071310738235e+42, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_I1_e, (0.1, &r), 0.05006252604709269211, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_I1_e, (2.0, &r), 1.59063685463732906340, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_I1_e, (100.0, &r), 1.0683693903381624812e+42, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_In_e, ( 4, 0.1, &r), 2.6054690212996573677e-07, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_In_e, ( 5, 2.0, &r), 0.009825679323131702321, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_In_e, ( 100, 100.0, &r), 4.641534941616199114e+21, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K0_scaled_e, (0.1, &r), 2.6823261022628943831, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K0_scaled_e, (1.95, &r), 0.8513330938802157074894, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K0_scaled_e, (2.0, &r), 0.8415682150707714179, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K0_scaled_e, (6.0, &r), 0.50186313086214003217346, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K0_scaled_e, (100.0, &r), 0.1251756216591265789, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K1_scaled_e, (0.1, &r), 10.890182683049696574, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K1_scaled_e, (1.95, &r), 1.050086915104152747182, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K1_scaled_e, (2.0, &r), 1.0334768470686885732, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K1_scaled_e, (6.0, &r), 0.5421759102771335382849, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K1_scaled_e, (100.0, &r), 0.1257999504795785293, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Kn_scaled_e, ( 4, 0.1, &r), 530040.2483725626207, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Kn_scaled_e, ( 5, 2.0, &r), 69.68655087607675118, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Kn_scaled_e, ( 100, 100.0, &r), 2.0475736731166756813e+19, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K0_e, (0.1, &r), 2.4270690247020166125, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K0_e, (1.95, &r), 0.1211226255426818887894, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K0_e, (2.0, &r), 0.11389387274953343565, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K0_e, (100.0, &r), 4.656628229175902019e-45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K1_e, (0.1, &r), 9.853844780870606135, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K1_e, (1.95, &r), 0.1494001409315894276793, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K1_e, (2.0, &r), 0.13986588181652242728, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_K1_e, (100.0, &r), 4.679853735636909287e-45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Kn_e, ( 4, 0.1, &r), 479600.2497925682849, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Kn_e, ( 5, 2.0, &r), 9.431049100596467443, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Kn_e, ( 100, 100.0, &r), 7.617129630494085416e-25, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j0_e, (-10.0, &r), -0.05440211108893698134, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j0_e, (0.001, &r), 0.9999998333333416667, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j0_e, ( 1.0, &r), 0.84147098480789650670, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j0_e, ( 10.0, &r), -0.05440211108893698134, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j0_e, (100.0, &r), -0.005063656411097587937, TEST_TOL1, GSL_SUCCESS); #ifdef FIXME TEST_SF(s, gsl_sf_bessel_j0_e, (1048576.0, &r), 3.1518281938718287624e-07, TEST_TOL2, GSL_SUCCESS); #endif /* these values are from Mathematica */ #ifdef FIXME TEST_SF(s, gsl_sf_bessel_j0_e, (1.0e18, &r), -9.9296932074040507620955e-19, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j0_e, (1.0e20, &r), -6.4525128526578084420581e-21, TEST_TOL0, GSL_SUCCESS); #endif TEST_SF(s, gsl_sf_bessel_j1_e, (-10.0, &r), -0.07846694179875154709, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j1_e, (0.01, &r), 0.003333300000119047399, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j1_e, ( 1.0, &r), 0.30116867893975678925, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j1_e, ( 10.0, &r), 0.07846694179875154709, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j1_e, (100.0, &r), -0.008673825286987815220, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j1_e, (1048576.0, &r), -9.000855242905546158e-07, TEST_TOL0, GSL_SUCCESS); /*TEST_SF(s, gsl_sf_bessel_j1_e, (1.0e18, &r), -1.183719902187107336049e-19, TEST_TOL0, GSL_SUCCESS);*/ TEST_SF(s, gsl_sf_bessel_j2_e, (-10.0, &r), 0.07794219362856244547, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j2_e, (0.01, &r), 6.666619047751322551e-06, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j2_e, ( 1.0, &r), 0.06203505201137386110, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j2_e, ( 10.0, &r), 0.07794219362856244547, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j2_e, (100.0, &r), 0.004803441652487953480, TEST_TOL1, GSL_SUCCESS); #if 0 /* bug #45730; the bug should be fixed, but these tests are disabled since error computation is not correct for these inputs */ TEST_SF(s, gsl_sf_bessel_j2_e, (1048576.0, &r), -3.1518539455252413111e-07, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j2_e, (-1.0e22, &r), 5.23214785395139e-23, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j2_e, (-1.0e21, &r), 7.449501119831337e-22, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j2_e, (-1.0e20, &r), 7.639704044417282e-21, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j2_e, (-1.0e19, &r), -3.749051695507179e-20, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j2_e, (1.0e19, &r), -3.749051695507179e-20, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j2_e, (1.0e20, &r), 7.639704044417282e-21, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j2_e, (1.0e21, &r), 7.449501119831337e-22, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_j2_e, (1.0e22, &r), 5.23214785395139e-23, TEST_TOL2, GSL_SUCCESS); #endif TEST_SF(s, gsl_sf_bessel_jl_e, (0, 0.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_jl_e, (1, 10.0, &r), 0.07846694179875154709000, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_jl_e, (5, 1.0, &r), 0.00009256115861125816357, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_jl_e, (10, 10.0, &r), 0.06460515449256426427, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_jl_e, (100, 100.0, &r), 0.010880477011438336539, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_jl_e, (2000, 1048576.0, &r), 7.449384239168568534e-07, TEST_SQRT_TOL0, GSL_SUCCESS); /* related to BUG#3 problem */ TEST_SF(s, gsl_sf_bessel_jl_e, (2, 900.0, &r), -0.0011089115568832940086, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_jl_e, (2, 15000.0, &r), -0.00005955592033075750554, TEST_TOL4, GSL_SUCCESS); /* Bug report by Mario Santos, value computed from AS 10.1.8 */ TEST_SF(s, gsl_sf_bessel_jl_e, (100, 1000.0, &r), -0.00025326311230945818285, TEST_TOL4, GSL_SUCCESS); /* Bug reported by Koichi Takahashi , computed from Pari besseljh(n,x) and AS 10.1.1 */ TEST_SF(s, gsl_sf_bessel_jl_e, (30, 3878.62, &r), -0.00023285567034330878410434732790, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_jl_e, (49, 9912.63, &r), 5.2043354544842669214485107019E-5 , TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_jl_e, (49, 9950.35, &r), 5.0077368819565969286578715503E-5 , TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_jl_e, (52, 9930.51, &r), -7.4838588266727718650124475651E-6 , TEST_TOL4, GSL_SUCCESS); /* bug report #37209 */ TEST_SF(s, gsl_sf_bessel_jl_e, (364, 36.62, &r), 1.118907148986954E-318, TEST_TOL0, GSL_SUCCESS); /*TEST_SF(s, gsl_sf_bessel_jl_e, (149, 1.0, &r), 2.6599182755508469E-307, TEST_TOL0, GSL_SUCCESS);*/ TEST_SF(s, gsl_sf_bessel_y0_e, (0.001, &r), -999.99950000004166670, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y0_e, ( 1.0, &r), -0.5403023058681397174, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y0_e, ( 10.0, &r), 0.08390715290764524523, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y0_e, (100.0, &r), -0.008623188722876839341, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y0_e, (65536.0, &r), 0.000011014324202158573930, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y0_e, (4294967296.0, &r), 2.0649445131370357007e-10, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y1_e, ( 0.01, &r), -10000.499987500069444, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y1_e, ( 1.0, &r), -1.3817732906760362241, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y1_e, ( 10.0, &r), 0.06279282637970150586, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y1_e, (100.0, &r), 0.004977424523868819543, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y1_e, (4294967296.0, &r), 1.0756463271573404688e-10, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y2_e, ( 0.01, &r), -3.0000500012499791668e+06, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y2_e, ( 1.0, &r), -3.605017566159968955, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y2_e, ( 10.0, &r), -0.06506930499373479347, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y2_e, (100.0, &r), 0.008772511458592903927, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_y2_e, (4294967296.0, &r), -2.0649445123857054207e-10, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_yl_e, (0, 0.01, &r), -99.995000041666528, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_yl_e, (0, 1.0, &r), -0.54030230586813972, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_yl_e, (1, 10.0, &r), 0.062792826379701506, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_yl_e, (5, 1.0, &r), -999.44034339223641, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_yl_e, (10, 0.01, &r), -6.5473079797378378e+30, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_yl_e, (10, 10.0, &r), -0.172453672088057849, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_yl_e, (100, 1.0, &r), -6.6830794632586775e+186, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_yl_e, (100, 100.0, &r), -0.0229838504915622811, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_yl_e, (2000, 1048576.0, &r), 5.9545201447146155e-07, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_i0_scaled_e, (0.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_i0_scaled_e, (0.1, &r), 0.9063462346100907067, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_i0_scaled_e, (2.0, &r), 0.24542109027781645493, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_i0_scaled_e, (100.0, &r), 0.005000000000000000000, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_i1_scaled_e, (0.0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_i1_scaled_e, (0.1, &r), 0.030191419289002226846, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_i1_scaled_e, (2.0, &r), 0.131868364583275317610, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_i1_scaled_e, (100.0, &r), 0.004950000000000000000, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_i2_scaled_e, (0.0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_i2_scaled_e, (0.1, &r), 0.0006036559400239012567, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_i2_scaled_e, (2.0, &r), 0.0476185434029034785100, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_i2_scaled_e, (100.0, &r), 0.0048515000000000000000, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_il_scaled_e, ( 0, 0.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_il_scaled_e, ( 1, 0.0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_il_scaled_e, ( 4, 0.001, &r), 1.0571434341190365013e-15, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_il_scaled_e, ( 4, 0.1, &r), 9.579352242057134927e-08, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_il_scaled_e, ( 5, 2.0, &r), 0.0004851564602127540059, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_il_scaled_e, ( 5, 100.0, &r), 0.004300446777500000000, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_il_scaled_e, ( 100, 100.0, &r), 1.3898161964299132789e-23, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_k0_scaled_e, (0.1, &r), 15.707963267948966192, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_k0_scaled_e, (2.0, &r), 0.7853981633974483096, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_k0_scaled_e, (100.0, &r), 0.015707963267948966192, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_k1_scaled_e, (0.1, &r), 172.78759594743862812, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_k1_scaled_e, (2.0, &r), 1.1780972450961724644, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_k1_scaled_e, (100.0, &r), 0.015865042900628455854, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_k2_scaled_e, (0.1, &r), 5199.335841691107810, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_k2_scaled_e, (2.0, &r), 2.5525440310417070063, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_k2_scaled_e, (100.0, &r), 0.016183914554967819868, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_kl_scaled_e, ( 4, 1.0/256.0, &r), 1.8205599816961954439e+14, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_kl_scaled_e, ( 4, 1.0/8.0, &r), 6.1173217814406597530e+06, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_kl_scaled_e, ( 5, 2.0, &r), 138.10735829492005119, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_kl_scaled_e, ( 100, 100.0, &r), 3.985930768060258219e+18, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (0.0001, 1.0, &r), 0.7652115411876708497, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (0.0001, 10.0, &r), -0.2459270166445205, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (0.0009765625, 10.0, &r), -0.2458500798634692, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (0.75, 1.0, &r), 0.5586524932048917478, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (0.75, 10.0, &r), -0.04968928974751508135, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, ( 1.0, 0.001, &r), 0.0004999999375000026, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, ( 1.0, 1.0, &r), 0.4400505857449335160, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, ( 1.75, 1.0, &r), 0.168593922545763170103, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (30.0, 1.0, &r), 3.482869794251482902e-42, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (30.0, 100.0, &r), 0.08146012958117222297, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (10.0, 1.0, &r), 2.6306151236874532070e-10, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (10.0, 100.0, &r), -0.05473217693547201474, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (10.2, 100.0, &r), -0.03548919161046526864, TEST_TOL2, GSL_SUCCESS); /* related to BUG#3 problem */ TEST_SF(s, gsl_sf_bessel_Jnu_e, (2.0, 900.0, &r), -0.019974345269680646400, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (2.0, 15000.0, &r), -0.0020455820181216382666, TEST_TOL4, GSL_SUCCESS); /* Jnu for negative integer nu */ TEST_SF(s, gsl_sf_bessel_Jnu_e, (-13, 4.3966088395743909188e-1, &r), -4.4808688873945295916e-19, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-43, 3.2953184511924683369e-1, &r), -3.4985116870357066158e-87, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-8, 3.5081119129046332101e-1, &r), 2.2148387185334257376e-11, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-17, 1.6717234250796879247e-1, &r), -1.3336696368048418208e-33, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-20, 1.0085435516296562067e-1, &r), 4.6463938513369299663e-45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-29, 1.0423882905853389231e-1, &r), -7.0211488877617616588e-69, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-10, 2.014635069337132169e-1, &r), 2.9614218635575180136e-17, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-23, 3.3470953660313309239e-1, &r), -5.3786691977970313226e-41, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-13, 1.796487688043502395e-2, &r), -3.9796275104402232636e-37, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-30, 4.3851505455005663023e-1, &r), 6.3723816221242007043e-53, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-31, 2.9134673992671269075e-1, &r), -1.4108323502121482121e-60, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-28, 7.6696967407852829575e-1, &r), 7.2211466723046636958e-42, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-6, 1.9829576302527197691e-2, &r), 1.3193561299244410609e-15, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-26, 4.1513019703157674847e-1, &r), 4.362149422492811209e-45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-19, 1.3033500482689031834e-2, &r), -2.4071043287214877014e-59, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4, 7.2050154387915780891e-1, &r), 6.8377203227324865568e-4, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-36, 9.058436592111083308e-1, &r), 1.1063535538518134862e-54, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-37, 4.4893454860671838425e-2, &r), -7.1436404620419702996e-105, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-25, 1.4253284590439372148e-1, &r), -1.3532982149810467304e-54, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-35, 6.8075538970323047806e-1, &r), -4.0087398199591044218e-57, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-9, 6.9978823056579836732e-2, &r), -2.1657760307485265867e-19, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-30, 8.3903642499214990225e-1, &r), 1.8046736761082165751e-44, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-43, 6.543891152683782553e-1, &r), -2.2618181452671187564e-74, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1, 2.557673774862201033e-1, &r), -1.2684081505646766845e-1, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-21, 2.3961944728579204361e-1, &r), -8.7037441094405713341e-40, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-13, 3.7732868931080794955e-1, &r), -6.1458679923678486123e-20, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-33, 3.8478064679256785588e-1, &r), -2.7471851206170506902e-61, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-50, 8.3045728127372512419e-1, &r), 2.6904315506244885678e-84, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-33, 3.4391840270211572065e-1, &r), -6.7604474418522862789e-63, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-23, 4.4699489157302132678e-1, &r), -4.1674520864249550489e-38, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-23, 8.6894302936681315656e-1, &r), -1.8080036072447165775e-31, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-24, 2.3997647040322801696e-1, &r), 1.2775332144705955465e-46, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4, 9.7688590680055575385e-1, &r), 2.260676935437026869e-3, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-20, 8.9090003293395823104e-1, &r), 3.8525697232471553813e-26, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-37, 9.4057990133775869779e-1, &r), -5.4483632006108552908e-56, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1, 2.6641070579761597867e-1, &r), -1.3202706692617745567e-1, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-7, 9.8878610880180753494e-1, &r), -1.3892626129288932172e-6, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-42, 3.1042396387236895292e-1, &r), 7.4291433893935351027e-86, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-18, 6.8722270094498481586e-1, &r), 6.9210950943508574463e-25, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-16, 1.6113707818439830316e-2, &r), 1.5066992425677873707e-47, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-31, 3.0720392023079679622e-1, &r), -7.2938615192106070364e-60, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-8, 3.4957196590626821859e-1, &r), 2.153068469114375124e-11, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4, 9.9805150837159144851e-1, &r), 2.4578749047519916152e-3, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-8, 8.4538260733781281419e-1, &r), 2.4776262290872395403e-8, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-21, 7.8935512795174026579e-1, &r), -6.4516652247824702208e-29, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-32, 3.4859401756229795902e-1, &r), 1.9985100102959434086e-60, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-28, 9.2530929240293814377e-1, &r), 1.3798987861611642315e-39, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-32, 5.7276907866586953775e-1, &r), 1.5890407703711501803e-53, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-16, 8.6364032267280037696e-1, &r), 6.9097436254460436398e-20, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-24, 8.1065458967451038451e-2, &r), 6.2316950805227520253e-58, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-17, 6.946415511078842723e-1, &r), -4.3495405983099048944e-23, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-14, 2.7619565270505476723e-1, &r), 1.0511271746088180311e-23, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-7, 8.579791601466317093e-2, &r), -5.3039175204559594309e-14, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-50, 7.4681490716561041968e-1, &r), 1.3331741219055661824e-86, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-30, 9.6631424224612452556e-1, &r), 1.2465815577059566852e-42, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-14, 2.6745819874317492788e-1, &r), 6.7024985048974981757e-24, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-22, 3.6947309321414497419e-1, &r), 6.4975710352073715961e-38, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-49, 2.3389602803779083655e-2, &r), -3.5281224467005794333e-158, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-48, 7.7482504299905127354e-1, &r), 1.3711857024107478291e-81, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-30, 6.5337950709230049969e-1, &r), 9.9749347191786840601e-48, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-29, 5.4117488569210959438e-1, &r), -3.8843890347204927665e-48, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-50, 9.4038774092645791075e-1, &r), 1.3455212768163778034e-81, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1, 5.627399919447310892e-1, &r), -2.703780920058947009e-1, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-35, 7.9925999507829895011e-2, &r), -1.1060656306690664139e-89, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-10, 2.8875439067692705135e-3, &r), 1.0844833648855202142e-35, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-31, 2.7645446745852278572e-1, &r), -2.7740931384652548129e-61, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-12, 8.5374968606378578252e-1, &r), 7.5366644001760905687e-14, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-11, 2.2997159465452075155e-1, &r), -1.1626579415654480052e-18, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-47, 5.8616043503503357359e-1, &r), -3.4270544836018351049e-85, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-24, 8.4884849730214263521e-1, &r), 1.8679667366331791405e-33, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-24, 5.3943176031162412158e-1, &r), 3.5300994115064965228e-38, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3, 9.3387179309343112648e-1, &r), -1.6062668879215016378e-2, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-20, 5.5061917642540109891e-1, &r), 2.5629166990385734238e-30, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-26, 2.9315675715515822781e-1, &r), 5.1505442739915338391e-49, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-6, 8.9079715253593128884e-1, &r), 1.0539758479683914316e-5, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-30, 9.1220250697048036241e-2, &r), 2.2291985671052015068e-73, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-49, 3.2934552845357396486e-1, &r), -6.7628009346158039786e-102, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-20, 6.2008856084878849548e-3, &r), 2.7691703032688977815e-69, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-23, 7.1620177578706903472e-1, &r), -2.124755495743639839e-33, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-29, 5.1124413385957329246e-1, &r), -7.462204354283390559e-49, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-23, 6.7405321505832900803e-1, &r), -5.2689769204867120958e-34, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-31, 7.6828173704641609615e-2, &r), -1.600162678935095954e-78, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4, 7.8546641070654814244e-1, &r), 9.610534504452577567e-4, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-39, 7.8708523270381710591e-1, &r), -7.8237015591341025437e-63, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-8, 1.1973778137874968338e-1, &r), 4.0918170073170305674e-15, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-22, 7.9699790929323855652e-1, &r), 1.4309765990568672215e-30, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-11, 4.4800161319259052168e-1, &r), -1.7773520138988139169e-15, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-39, 9.2637892745877041811e-1, &r), -4.4944192865215894733e-60, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-29, 4.6475617572623309956e-1, &r), -4.7026155154566357963e-50, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-25, 4.6435749048262147537e-1, &r), -8.9952935327704632698e-42, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-28, 9.6511079209639008185e-1, &r), 4.4842768640542298547e-39, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-36, 3.8411791760130458261e-2, &r), 4.296403338839098526e-104, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-6, 2.891145018145052606e-1, &r), 1.2636012998902815302e-8, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-43, 3.0866754076112185885e-1, &r), -2.1010663709383681337e-88, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-44, 8.3972445789951961023e-1, &r), 9.7813493638738341846e-72, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-22, 8.2307293342676789357e-1, &r), 2.9041436661554638719e-30, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-12, 9.8857250941935924585e-1, &r), 4.357505306871049656e-13, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-47, 9.9901153675544108048e-1, &r), -2.6090278787375958472e-74, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-44, 2.8286777063559952163e-1, &r), 1.5832896249242322418e-92, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-10, 9.7638349947419439863e-1, &r), 2.0735913941162063742e-10, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-36, 4.6452631984005212745e-1, &r), 4.0190510760125038996e-65, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-25, 8.2954737598010312336e-1, &r), -1.7855017422981225812e-35, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-29, 4.2326977999795604681e-1, &r), -3.1249531389372439734e-51, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-9, 6.339167576518494852e-1, &r), -8.8082994072251150317e-11, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-27, 7.4535258299077637954e-1, &r), -2.4368032520208918805e-40, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-45, 8.0998976704970278418e-1, &r), -1.8024726219976677441e-74, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-24, 5.3437414610693284794e-1, &r), 2.8159486268019058346e-38, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-19, 3.6987646459831328184e-1, &r), -9.7200835901252686409e-32, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-49, 4.7308684164506190021e-1, &r), -3.4438316393709775799e-94, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-42, 8.4616849424460901479e-1, &r), 1.4469107537397962381e-67, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-39, 8.6819804427642418616e-1, &r), -3.5837055310896411954e-61, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-28, 4.1490163307722590922e-1, &r), 2.448154551562710141e-49, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-25, 6.312651668273163642e-1, &r), -1.9374739456138691106e-38, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-32, 5.3525470388026220677e-1, &r), 1.8191207037881755277e-54, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-13, 9.2605599515408535679e-3, &r), -7.2212651931099339154e-41, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-37, 4.8798589647640992562e-1, &r), -1.5614996577959031121e-66, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-37, 2.2096551301466541766e-2, &r), -2.9050812034192451665e-116, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-42, 1.8092873560926168207e-1, &r), 1.0575388628113044972e-95, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-22, 4.2954143428969324083e-1, &r), 1.7857221060719548205e-36, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-41, 1.7704659657689619579e-1, &r), -2.017674513721498041e-93, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3, 8.8755155653793053987e-1, &r), -1.3862799262620708632e-2, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1, 6.7617657704638521874e-1, &r), -3.1913053561511127823e-1, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-34, 6.4464304038438048178e-1, &r), 6.4622314654558520448e-56, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-41, 7.2625991432244163042e-1, &r), -2.7337118024791538344e-68, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3, 6.357184822423154937e-1, &r), -5.2186206749718741014e-3, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-6, 8.4999778579632777264e-1, &r), 7.9757193518631922586e-6, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-47, 4.9270801771231759268e-1, &r), -9.7743102162756354643e-89, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-44, 3.0382431918975667824e-1, &r), 3.6749344196700669304e-91, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-21, 8.3709075395163832807e-1, &r), -2.2120291813240017972e-28, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-13, 2.2926361048823468174e-1, &r), -9.4684470339645238166e-23, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-2, 7.7595731076113971064e-1, &r), 7.1557648504788709828e-2, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-13, 8.3155666144468474085e-1, &r), -1.760187305034807398e-15, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-26, 8.9229820511590331545e-1, &r), 1.8952192929209682492e-36, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-9, 4.3091918823985208523e-1, &r), -2.7448142505229531657e-12, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-45, 7.6232573842954975111e-1, &r), -1.177044451508791199e-75, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-47, 8.5370192783467777094e-1, &r), -1.6168449888151601463e-77, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-17, 7.0917926374340919579e-1, &r), -6.1835780259077271289e-23, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-48, 5.3177634068823620691e-1, &r), 1.9544175507861216812e-89, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-20, 8.6236563774769292261e-1, &r), 2.0102896278761019978e-26, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-47, 1.9398034049650767996e-1, &r), -9.1928516850183758066e-108, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-22, 1.9059407555598432968e-1, &r), 3.0818305203000064476e-44, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-28, 1.177497340192600765e-1, &r), 1.1853471604859571152e-64, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-44, 5.4411719229619710879e-1, &r), 5.0099597095462268336e-80, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-22, 8.4096736569723091858e-1, &r), 4.6598891827094030103e-30, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-14, 5.7336031747513286455e-1, &r), 2.8892068362904543886e-19, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-24, 4.3701161637218456507e-1, &r), 2.2572337854881401663e-40, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-16, 5.5950502438849852065e-1, &r), 6.6952184074205206877e-23, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-15, 7.2135709344094709909e-1, &r), -1.724936657760223936e-19, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-42, 8.9503358993826252397e-1, &r), 1.5285906153951174029e-66, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-34, 8.8842662562391397862e-1, &r), 3.5115599466639988263e-51, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-24, 7.1820429322328243568e-1, &r), 3.3906734873299682373e-35, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-42, 6.9983283703407621113e-1, &r), 4.9840979255532732037e-71, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-29, 3.4956023377394930027e-1, &r), -1.2169918834421082937e-53, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-24, 3.1780802172157483391e-1, &r), 1.0816638066322224274e-43, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-42, 6.6747313617191922586e-1, &r), 6.8258422034194326368e-72, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-29, 9.8281798409069473598e-1, &r), -1.2641970706335426485e-40, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-48, 9.3933236478420901552e-1, &r), 1.4126090419557425431e-77, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-33, 7.9969562813573452357e-1, &r), -8.3521436185818779821e-51, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4, 1.749832037277650746e-1, &r), 2.4377505307831309992e-6, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-12, 7.4928517324325015606e-1, &r), 1.578984980873870348e-14, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-50, 6.8668643284952988717e-1, &r), 2.0060641365741957198e-88, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-26, 4.628453813124784986e-1, &r), 7.3802979097358757591e-44, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-17, 1.3398796901656815413e-1, &r), -3.1005014564142463477e-35, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-21, 4.3589737907768555406e-1, &r), -2.4897620016130572781e-34, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-49, 9.3471214811043877923e-1, &r), -1.0635172631183545319e-79, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-12, 6.2842914244476056474e-1, &r), 1.919020727030761691e-15, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-44, 3.9902397275715061045e-1, &r), 5.9381636725852262522e-86, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-38, 7.4844742354073981342e-1, &r), 1.1452741249870059158e-61, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-22, 1.7024143837455386901e-1, &r), 2.5696433432212310518e-45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-35, 2.4663778723047911984e-1, &r), -1.4846380265631517846e-72, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-42, 3.4675532474808813305e-1, &r), 7.7576502065450687145e-84, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-42, 9.7015007293565236242e-1, &r), 4.5073367850753509233e-65, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-18, 5.8064934044500015204e-1, &r), 3.3392049842730194442e-26, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4, 8.9712869996285071984e-1, &r), 1.6201373653351794808e-3, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-14, 4.7509593095794841351e-1, &r), 2.0819777331649343154e-20, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-24, 1.9971440277743206076e-1, &r), 1.5567772398263651029e-48, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-2, 3.1326041354180815314e-1, &r), 1.2166506426643152762e-2, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-21, 7.1780328035546876532e-1, &r), -8.7820775346034440302e-30, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-40, 3.4783624449708255548e-1, &r), 5.0330128895858604038e-79, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-24, 4.6025606383259078342e-1, &r), 7.8278566159609528116e-40, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-37, 6.8329209514074967672e-1, &r), -4.0018049034521909865e-61, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-26, 3.1644447969459523952e-1, &r), 3.757803139189680586e-48, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-49, 3.8814659649103508174e-1, &r), -2.1178321069354253493e-98, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-33, 2.2586340634075651258e-1, &r), -6.3690605699693325702e-69, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-31, 1.1833425544176035201e-1, &r), -1.0457450400633015896e-72, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-7, 4.716233225505345007e-1, &r), -7.9892591292002198427e-9, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-28, 4.0216249780484400656e-1, &r), 1.0224868057823447281e-49, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-39, 2.1728515555094074309e-1, &r), -1.2424793343150735922e-84, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-10, 1.5286805658821812372e-1, &r), 1.8744497113230339685e-18, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-2, 4.2012489177724585853e-1, &r), 2.1740379601921820516e-2, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3, 5.4168160735476556955e-1, &r), -3.2509626190739798323e-3, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-26, 6.0999547254418081401e-1, &r), 9.6515399655293906821e-41, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-31, 9.3599472437451867441e-1, &r), -7.236873645285246215e-45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-2, 8.9238535456317991508e-2, &r), 9.9477909077321557346e-4, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-41, 3.3286697432119768766e-1, &r), -3.5168501713472066379e-82, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-26, 1.3103200887095798302e-2, &r), 4.1630610278945554747e-84, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-7, 6.8545576155223653312e-1, &r), -1.0860095433456484207e-7, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-33, 7.4597656684747976078e-1, &r), -8.4232256181114982289e-52, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-35, 9.5265851504353628581e-1, &r), -5.1260638475279101845e-52, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-5, 1.9993324513780069188e-2, &r), -8.319296787329444617e-13, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-15, 7.291071285552115835e-2, &r), -2.0411952376466778385e-34, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-5, 4.307852573603263607e-1, &r), -3.8336545021181925733e-6, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-8, 3.0719264454074178501e-1, &r), 7.6627991262305533713e-12, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-7, 2.9261260328577001029e-1, &r), -2.8395431884068098274e-10, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-36, 3.4285828911893011822e-1, &r), 7.1807133181285014617e-70, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-22, 2.1687887653368606307e-1, &r), 5.2860475778514174667e-43, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-24, 7.2816755037040510323e-1, &r), 4.7187086299885949165e-35, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-18, 2.0826276232560462604e-2, &r), 3.2368741843295077202e-52, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-9, 6.8082174052201672454e-1, &r), -1.6719854980400483279e-10, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-26, 1.1998114825675920571e-1, &r), 4.2119340347581322841e-59, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-9, 5.9197600088654039875e-1, &r), -4.7631865156190005935e-11, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-30, 1.2367288101522705215e-1, &r), 2.0588316029270585207e-69, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-7, 8.3266930505292536647e-1, &r), -4.2096524602233328394e-7, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-18, 4.360196631312459384e-1, &r), 1.9281550661128359168e-28, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-13, 9.8501660515145040901e-1, &r), -1.5833136710018445626e-14, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-29, 9.3281324180154613247e-1, &r), -2.7828395455119501545e-41, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-50, 8.9831019278310796215e-1, &r), 1.3646576617083900982e-82, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-34, 8.1153956230382506493e-1, &r), 1.6192058088789772833e-52, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-15, 9.5908894233909785027e-1, &r), -1.2293883538807523551e-17, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-28, 4.7478353398916835208e-1, &r), 1.0667274838088242221e-47, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-26, 3.1425431663890729964e-1, &r), 3.137014371489532261e-48, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-29, 6.8861856868877100233e-1, &r), -4.2000859317520628674e-45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-16, 6.9807655407582355921e-1, &r), 2.3026948238804970982e-21, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-15, 1.9223628937777433793e-1, &r), -4.2201734817670464106e-28, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-24, 7.91209811831343471e-1, &r), 3.458241440092889033e-34, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-12, 2.8881796002183274727e-1, &r), 1.7143390913163291276e-19, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-34, 3.6891378721647167497e-1, &r), 3.7139793083014182422e-64, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-20, 8.4841223828616526898e-1, &r), 1.4510812436551651903e-26, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-23, 2.2490195812594682131e-1, &r), -5.7468688920782767025e-45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-18, 2.2504144134842978217e-1, &r), 1.3048322081397375779e-33, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-41, 8.9085721717774902491e-1, &r), -1.1841910084346823163e-64, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-14, 3.5776817082613807574e-1, &r), 3.9325021938284721675e-22, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-17, 4.6898364389788035003e-1, &r), -5.492570150236103145e-26, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-6, 7.4085998179632632531e-1, &r), 3.5186865149767756957e-6, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-29, 8.1247678941673114604e-1, &r), -5.0783189409391835819e-43, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-6, 1.7590874156867732351e-2, &r), 6.4299450335557031571e-16, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-6, 4.1122931368227349961e-2, &r), 1.0494595145859932593e-13, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-18, 3.4357780610013843947e-2, &r), 2.6519427947417673311e-48, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-8, 7.2901630769663700817e-1, &r), 7.6159005881302088369e-9, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-40, 6.2434787548617066655e-1, &r), 7.297739135890827566e-69, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-37, 2.5717302633809380684e-1, &r), -7.9671811532819427071e-77, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-12, 4.4871088635019795091e-1, &r), 3.3823657137507787902e-17, TEST_TOL2, GSL_SUCCESS); /* Jnu for negative nu */ TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.7408502287167772557e+1, 4.3891036254061936271e-2, &r), -1.5118966152679114528e+42, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.0369289750688261206e+1, 8.617077861907621132e-1, &r), 1.3458137581188368176e+61, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3.6398263821779503158, 5.7108775125890870648e-1, &r), -1.1073338178875224514e+2, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-2.0743837616631487936e+1, 2.2372123946196517647e-1, &r), 1.3987244312547157439e+37, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.7297952956642177128e+1, 2.8440280848533973972e-1, &r), -5.5832331287880973953e+27, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.3507072230824139103e+1, 9.7008738913549467403e-1, &r), -9.9108981827284991851e+12, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.4663106025697138284e+1, 9.6739483983540323655e-1, &r), 2.5305841722999151766e+67, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.7450767905208691173e+1, 5.2288309478685515663e-3, &r), -3.4541920228396234708e+180, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.8736914274754280581e+1, 4.4318942692773250336e-1, &r), 1.2783291424623089209e+27, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3.4560791710276042462e+1, 5.6595841783863809163e-1, &r), 1.7364781221343685309e+56, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-2.8723165418996042381e+1, 2.4003201116391659975e-1, &r), 8.229650479070536446e+54, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3.1780816480084454714e+1, 3.5000033756039229564e-1, &r), -8.9158096963672457852e+56, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-8.3572537806135923827, 8.994859317735841446e-1, &r), 2.4471474432717596765e+6, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.9179499652113791027e+1, 7.3466044408596358731e-1, &r), -1.0446080588162613503e+82, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.0204535104461498585e+1, 1.3316368076269799096e-1, &r), 1.6723180404777533538e+93, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.9597169419874779916e+1, 8.3895848736941180651e-1, &r), -1.9885394381212418599e+80, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.2228113163441444643e+1, 7.2360070820350912315e-1, &r), 3.7033741801434815187e+12, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.3252347726870680973e+1, 4.7042383176138740544e-2, &r), -2.2524439080867705956e+121, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.8363275112470146292e+1, 3.5406545166014987925e-1, &r), 7.0915928368505654149e+95, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-2.4031313414732363799e+1, 1.7077658851102128503e-1, &r), 4.2707681524978432343e+46, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3.4994220322161396103e+1, 7.6004498361697560048e-2, &r), 8.3491267575601512811e+85, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.5842451866339926986e+1, 7.1655842470093644641e-1, &r), -1.4956016465164596038e+18, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.3303969013414183336e+1, 3.4261981308825774017e-1, &r), -1.7313464383524562686e+84, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-2.9620214546900609668e+1, 8.9559048893071335969e-2, &r), -6.5439278427877993956e+69, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3.9267775155252921091e+1, 4.9173394917277714574e-1, &r), -2.7879726255003962141e+68, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.085805422677201981e+1, 7.1844728658692273953e-2, &r), 1.7330833141098585591e+21, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.3205222720657600449e+1, 2.0938011160695718605e-1, &r), -1.2855953290893319419e+93, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.1761832688338363731e-1, 4.0692821730479031008e-1, &r), 1.0616114810207300625, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3.4176152886105712673e+1, 7.3083748089885469319e-1, &r), 2.3708170326600879156e+51, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.7495316392965243753e+1, 3.6374757654471397858e-1, &r), -2.4050181588419272908e+26, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.4363999308889822481e+1, 2.2964635433363436307e-1, &r), 1.4858445128296594446e+23, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.5945782535187393546e+1, 5.5004988492253222851e-1, &r), -5.3196903529172738965e+19, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-2.6539439893219625339e+1, 5.4022213494661757887e-1, &r), 3.4606719889912371036e+40, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3.9104819423206076833e+1, 8.7581079115207012305e-1, &r), -8.3806822204633705862e+57, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.1344422530419629852e+1, 1.8412292138063948156e-1, &r), -1.3032526695489281999e+18, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.2479004807998664153e+1, 7.628052499161305046e-1, &r), 3.8593605090529013702e+67, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-2.7234292208462683278e+1, 5.6929354834881763134e-1, &r), -1.3560087920173394791e+41, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-2.9852923491811760298e+1, 2.1764339448558498796e-2, &r), -3.1065720979758225192e+88, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-2.9470737712526065987e+1, 9.1397839227827761003e-1, &r), -4.9854244578384505794e+39, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-2.4879459756439547254e+1, 8.7694253508024822462e-1, &r), 4.0540656704233640216e+31, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-8.6562240771489400173e-1, 6.4882619355798588927e-1, &r), 9.5827819637209987022e-2, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.4096305256724256786e+1, 1.1837901256079790395e-1, &r), 1.5389662008468777023e+26, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.3739240782592000796e+1, 1.1830951764837136725e-1, &r), -5.4851415830067607572e+25, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-7.7683272384817803185e-1, 2.0897180603218726575e-1, &r), 1.3452855819917342033, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.9007825894244022613e+1, 8.0804305816981973945e-1, &r), -1.9558153171413640836e+78, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.224872379992519031, 9.4716012050013901355e-1, &r), -8.7507643021583199242e-1, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-5.0807600398060325807e+1, 6.1902119795226148946e-1, &r), 1.9558680407989173708e+89, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.2130610423140110162e+1, 7.2184881647444607846e-1, &r), 3.0709609117301881893e+67, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.1186300874143057513e+1, 1.3944550368322800884e-1, &r), -1.2405415201132534983e+95, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-2.1777582295815773824e+1, 7.6178874271077561762e-1, &r), -7.1748063501973138583e+27, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3.2185912810368133222e+1, 3.959510541558671016e-1, &r), 1.196451653185591802e+56, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.2976006083946226988e+1, 4.5739390828369379657e-1, &r), 1.0599129365585919882e+77, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3.0412232215064606945e+1, 6.7510758855896918145e-1, &r), 2.4302601636670462267e+45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.8388188389747281955e+1, 8.9233979909724013718e-1, &r), 9.1410432331502484426e+20, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-2.4298840569257253701e+1, 6.8042862360863559591e-1, &r), 4.0995648850574613979e+33, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3.8834735272673504063e+1, 4.2324469410479691518e-1, &r), 7.0355133597135130631e+69, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.6091840934431606344e+1, 1.7508918790902548661e-1, &r), 8.7456315137421979067e+103, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.9754264394942756728, 1.558717798933954111e-2, &r), -3.551027943747170162e+2, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3.7168594342366560374e+1, 6.976373865080374073e-1, &r), -1.1036447967023475572e+58, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.5379944292029245754e+1, 5.3150471205968938472e-2, &r), -1.0469743921754287032e+126, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-1.153181439556533474e+1, 1.8204366094125528818e-1, &r), -4.0986515168430307785e+18, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-4.9939680334734766385e+1, 8.132277926604580844e-1, &r), -9.5179038651143567503e+80, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-3.5986707652967270442e+1, 5.5665988728905782182e-1, &r), -1.27797927382078249e+58, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Jnu_e, (-6.7046620273111013832, 1.059530133767196237e-1, &r), 3.8106055649273069958e+10, TEST_TOL2, GSL_SUCCESS); /* Ynu */ TEST_SF(s, gsl_sf_bessel_Ynu_e, (0.0001, 1.0, &r), 0.08813676933044478439, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (0.0001,10.0, &r), 0.05570979797521875261, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, ( 0.75, 1.0, &r), -0.6218694174429746383, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, ( 0.75, 10.0, &r), 0.24757063446760384953, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, ( 1.0, 0.001, &r), -636.6221672311394281, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, ( 1.0, 1.0, &r), -0.7812128213002887165, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (30.0, 1.0, &r), -3.0481287832256432162e+39, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (30.0, 100.0, &r), 0.006138839212010033452, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (10.0, 1.0, &r), -1.2161801427868918929e+08, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (10.0, 100.0, &r), 0.05833157423641492875, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (10.2, 100.0, &r), 0.07169383985546287091, TEST_TOL2, GSL_SUCCESS); /* Ynu for negative integer nu */ TEST_SF(s, gsl_sf_bessel_Ynu_e, (-13, 4.3966088395743909188e-1, &r), 5.4675723318993574107e+16, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-43, 3.2953184511924683369e-1, &r), 2.115977780575035527e+84, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-8, 3.5081119129046332101e-1, &r), -1.7982193624366780622e+9, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-17, 1.6717234250796879247e-1, &r), 1.4040223280006382933e+31, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-20, 1.0085435516296562067e-1, &r), -3.4253870177732383503e+42, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-29, 1.0423882905853389231e-1, &r), 1.5633159385709367033e+66, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-10, 2.014635069337132169e-1, &r), -1.0750753223600878559e+15, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-23, 3.3470953660313309239e-1, &r), 2.5733184597190491073e+38, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-13, 1.796487688043502395e-2, &r), 6.1526862287828618145e+34, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-30, 4.3851505455005663023e-1, &r), -1.6652274019860697168e+50, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-31, 2.9134673992671269075e-1, &r), 7.2783380837435004727e+57, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-28, 7.6696967407852829575e-1, &r), -1.5748860170624112485e+39, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-6, 1.9829576302527197691e-2, &r), -4.0210481843848071758e+13, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-26, 4.1513019703157674847e-1, &r), -2.806930683617814941e+42, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-19, 1.3033500482689031834e-2, &r), 6.9598794107689745713e+56, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4, 7.2050154387915780891e-1, &r), -1.1846384548732517149e+2, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-36, 9.058436592111083308e-1, &r), -7.994500359474016123e+51, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-37, 4.4893454860671838425e-2, &r), 1.2042846052782773184e+102, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-25, 1.4253284590439372148e-1, &r), 9.4085712788480443733e+51, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-35, 6.8075538970323047806e-1, &r), 2.2691146737122039815e+54, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-9, 6.9978823056579836732e-2, &r), 1.6330796519846810927e+17, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-30, 8.3903642499214990225e-1, &r), -5.8816651774415705482e+41, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-43, 6.543891152683782553e-1, &r), 3.2732133353307485906e+71, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1, 2.557673774862201033e-1, &r), 2.648397359834244179, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-21, 2.3961944728579204361e-1, &r), 1.7416186098234671613e+37, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-13, 3.7732868931080794955e-1, &r), 3.9857279826655584502e+17, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-33, 3.8478064679256785588e-1, &r), 3.5113798569950397588e+58, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-50, 8.3045728127372512419e-1, &r), -2.3665632218557611716e+81, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-33, 3.4391840270211572065e-1, &r), 1.4268698281593046704e+60, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-23, 4.4699489157302132678e-1, &r), 3.3214969951131331346e+35, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-23, 8.6894302936681315656e-1, &r), 7.6600878858980858273e+28, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-24, 2.3997647040322801696e-1, &r), -1.0382177146462655416e+44, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4, 9.7688590680055575385e-1, &r), -3.6396008802115138586e+1, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-20, 8.9090003293395823104e-1, &r), -4.1352523331280200421e+23, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-37, 9.4057990133775869779e-1, &r), 1.5795116292393394486e+53, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1, 2.6641070579761597867e-1, &r), 2.5520015187867893496, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-7, 9.8878610880180753494e-1, &r), 3.3070534106551277147e+4, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-42, 3.1042396387236895292e-1, &r), -1.0201733293438510046e+83, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-18, 6.8722270094498481586e-1, &r), -2.556940038138305942e+22, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-16, 1.6113707818439830316e-2, &r), -1.3203947711040991975e+45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-31, 3.0720392023079679622e-1, &r), 1.4078366532641984096e+57, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-8, 3.4957196590626821859e-1, &r), -1.8497964339362348508e+9, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4, 9.9805150837159144851e-1, &r), -3.35276446088454154e+1, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-8, 8.4538260733781281419e-1, &r), -1.6151126896511724021e+6, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-21, 7.8935512795174026579e-1, &r), 2.3510763338498465525e+26, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-32, 3.4859401756229795902e-1, &r), -4.9775956770188671631e+57, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-28, 9.2530929240293814377e-1, &r), -8.2429457360543127639e+36, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-32, 5.7276907866586953775e-1, &r), -6.2608710158624288778e+50, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-16, 8.6364032267280037696e-1, &r), -2.8833961453891338766e+17, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-24, 8.1065458967451038451e-2, &r), -2.1283114054434655701e+55, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-17, 6.946415511078842723e-1, &r), 4.3084587997971578431e+20, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-14, 2.7619565270505476723e-1, &r), -2.1634745597658813187e+21, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-7, 8.579791601466317093e-2, &r), 8.5741016888820088808e+11, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-50, 7.4681490716561041968e-1, &r), -4.7757514561562387813e+83, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-30, 9.6631424224612452556e-1, &r), -8.5159643935229761718e+39, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-14, 2.6745819874317492788e-1, &r), -3.3928529652241947717e+21, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-22, 3.6947309321414497419e-1, &r), -2.2270901208692386374e+35, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-49, 2.3389602803779083655e-2, &r), 1.8412401963717225375e+155, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-48, 7.7482504299905127354e-1, &r), -4.8369236019321535917e+78, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-30, 6.5337950709230049969e-1, &r), -1.0639517934361092802e+45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-29, 5.4117488569210959438e-1, &r), 2.8262145810872807871e+45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-50, 9.4038774092645791075e-1, &r), -4.7322361571978865664e+78, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1, 5.627399919447310892e-1, &r), 1.3310580822914015523, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-35, 7.9925999507829895011e-2, &r), 8.2224704007424584626e+86, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-10, 2.8875439067692705135e-3, &r), -2.9351293887447581255e+33, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-31, 2.7645446745852278572e-1, &r), 3.7015590625912763344e+58, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-12, 8.5374968606378578252e-1, &r), -3.528575811542778544e+11, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-11, 2.2997159465452075155e-1, &r), 2.4894373648370412225e+16, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-47, 5.8616043503503357359e-1, &r), 1.9763554381308657733e+82, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-24, 8.4884849730214263521e-1, &r), -7.1046392480541118407e+30, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-24, 5.3943176031162412158e-1, &r), -3.7580440656007599181e+35, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3, 9.3387179309343112648e-1, &r), 7.0202042170209205589, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-20, 5.5061917642540109891e-1, &r), -6.2122754555889405012e+27, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-26, 2.9315675715515822781e-1, &r), -2.3771210812024680281e+46, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-6, 8.9079715253593128884e-1, &r), -5.091626137833991034e+3, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-30, 9.1220250697048036241e-2, &r), -4.7597279133940392868e+70, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-20, 6.2008856084878849548e-3, &r), -5.7473876046110789338e+66, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-23, 7.1620177578706903472e-1, &r), 6.5166498927440582853e+30, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-29, 5.1124413385957329246e-1, &r), 1.4711351369242792138e+46, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-23, 6.7405321505832900803e-1, &r), 2.627743272609579819e+31, TEST_TOL2, GSL_SUCCESS); /* Ynu for negative nu */ TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.7408502287167772557e+1, 4.3891036254061936271e-2, &r), 4.469714143570654497e+41, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.0369289750688261206e+1, 8.617077861907621132e-1, &r), -5.8595434076664310948e+60, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.6398263821779503158, 5.7108775125890870648e-1, &r), -5.2034221685931678753e+1, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.0743837616631487936e+1, 2.2372123946196517647e-1, &r), 1.345588718040376054e+37, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.7297952956642177128e+1, 2.8440280848533973972e-1, &r), 4.1115735370678699359e+27, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.3507072230824139103e+1, 9.7008738913549467403e-1, &r), -2.202372544321863968e+11, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.4663106025697138284e+1, 9.6739483983540323655e-1, &r), 1.4235309894056948387e+67, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.7450767905208691173e+1, 5.2288309478685515663e-3, &r), 5.3855142705411361919e+179, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.8736914274754280581e+1, 4.4318942692773250336e-1, &r), 1.1773204343097478161e+27, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.4560791710276042462e+1, 5.6595841783863809163e-1, &r), 3.3572924118396673305e+55, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.8723165418996042381e+1, 2.4003201116391659975e-1, &r), 6.9471556080056038434e+54, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.1780816480084454714e+1, 3.5000033756039229564e-1, &r), -1.0833823624917670056e+57, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-8.3572537806135923827, 8.994859317735841446e-1, &r), -1.1774337302489088463e+6, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.9179499652113791027e+1, 7.3466044408596358731e-1, &r), 1.6517722024836217581e+82, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.0204535104461498585e+1, 1.3316368076269799096e-1, &r), -2.2341067840937606376e+93, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.9597169419874779916e+1, 8.3895848736941180651e-1, &r), -6.2662143656762004053e+79, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.2228113163441444643e+1, 7.2360070820350912315e-1, &r), -4.2511898289085272856e+12, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.3252347726870680973e+1, 4.7042383176138740544e-2, &r), 2.2194603264543665848e+121, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.8363275112470146292e+1, 3.5406545166014987925e-1, &r), -3.248353813678515594e+95, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.4031313414732363799e+1, 1.7077658851102128503e-1, &r), -4.3273454620971397041e+47, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.4994220322161396103e+1, 7.6004498361697560048e-2, &r), 4.5976914154279708742e+87, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.5842451866339926986e+1, 7.1655842470093644641e-1, &r), -2.7708334780004236249e+18, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.3303969013414183336e+1, 3.4261981308825774017e-1, &r), 1.2252074327758681488e+84, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.9620214546900609668e+1, 8.9559048893071335969e-2, &r), -2.5960278365111086141e+69, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.9267775155252921091e+1, 4.9173394917277714574e-1, &r), 2.4927765540337657002e+68, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.085805422677201981e+1, 7.1844728658692273953e-2, &r), 3.6253005874483288876e+21, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.3205222720657600449e+1, 2.0938011160695718605e-1, &r), 1.7097593469426311991e+93, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.1761832688338363731e-1, 4.0692821730479031008e-1, &r), -3.9929527887838440231e-1, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.4176152886105712673e+1, 7.3083748089885469319e-1, &r), -3.8375532995220739134e+51, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.4363999308889822481e+1, 2.2964635433363436307e-1, &r), -6.7651597483976020212e+22, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.5945782535187393546e+1, 5.5004988492253222851e-1, &r), -3.0929200048995927397e+20, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.6539439893219625339e+1, 5.4022213494661757887e-1, &r), 4.3099923396955639095e+39, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.9104819423206076833e+1, 8.7581079115207012305e-1, &r), 2.4523357879118971691e+58, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.1344422530419629852e+1, 1.8412292138063948156e-1, &r), 6.9306682864864401354e+17, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.2479004807998664153e+1, 7.628052499161305046e-1, &r), -2.5492681017463054894e+66, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.7234292208462683278e+1, 5.6929354834881763134e-1, &r), 1.4969074140226347429e+41, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.9852923491811760298e+1, 2.1764339448558498796e-2, &r), -6.237969203121440244e+88, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.9470737712526065987e+1, 9.1397839227827761003e-1, &r), 4.5960647034986138864e+38, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.4879459756439547254e+1, 8.7694253508024822462e-1, &r), 1.0188843810269963844e+32, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-8.6562240771489400173e-1, 6.4882619355798588927e-1, &r), 1.1287689391130420057, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.4096305256724256786e+1, 1.1837901256079790395e-1, &r), -4.9304578916106509819e+26, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.3739240782592000796e+1, 1.1830951764837136725e-1, &r), -5.1263258788046229045e+25, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-7.7683272384817803185e-1, 2.0897180603218726575e-1, &r), 1.881590189544752977, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.9007825894244022613e+1, 8.0804305816981973945e-1, &r), 7.9534669124448258162e+79, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.224872379992519031, 9.4716012050013901355e-1, &r), 5.2709059549031973037e-1, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-5.0807600398060325807e+1, 6.1902119795226148946e-1, &r), 2.8318147090250448397e+89, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.2130610423140110162e+1, 7.2184881647444607846e-1, &r), -7.0593986791573883029e+67, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.1186300874143057513e+1, 1.3944550368322800884e-1, &r), 1.8718282789345414439e+95, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.1777582295815773824e+1, 7.6178874271077561762e-1, &r), -8.5399447567722731535e+27, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.2185912810368133222e+1, 3.959510541558671016e-1, &r), -1.8100903248905368685e+56, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.2976006083946226988e+1, 4.5739390828369379657e-1, &r), 1.4034454523109119588e+78, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.0412232215064606945e+1, 6.7510758855896918145e-1, &r), -6.8761190595978173779e+44, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.8388188389747281955e+1, 8.9233979909724013718e-1, &r), -3.3498674090203423756e+20, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.4298840569257253701e+1, 6.8042862360863559591e-1, &r), -3.0013837000776612869e+33, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.8834735272673504063e+1, 4.2324469410479691518e-1, &r), 1.2310766881467564871e+70, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.6091840934431606344e+1, 1.7508918790902548661e-1, &r), -2.946550933505149671e+104, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.9754264394942756728, 1.558717798933954111e-2, &r), -4.5906289772187980725e+3, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.7168594342366560374e+1, 6.976373865080374073e-1, &r), 1.8851114888349680045e+58, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.5379944292029245754e+1, 5.3150471205968938472e-2, &r), 4.1473845726043547937e+125, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.153181439556533474e+1, 1.8204366094125528818e-1, &r), -4.1102104914739582156e+17, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.9939680334734766385e+1, 8.132277926604580844e-1, &r), -4.9623796120191838477e+81, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.5986707652967270442e+1, 5.5665988728905782182e-1, &r), -3.058579118813851873e+59, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-6.7046620273111013832, 1.059530133767196237e-1, &r), 2.8547617693483259231e+10, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.154578607200052944e+1, 4.5282605452993561522e-1, &r), -4.6204765000245865931e+31, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.3955292370868357326e+1, 5.3774303067450442349e-1, &r), -3.285152670384139907e+35, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.2209824848466094111e+1, 5.9504757613868441576e-1, &r), -3.8856592501211432238e+50, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.0825185544715207495e+1, 7.5398610386439322567e-1, &r), 2.3035172984979776888e+64, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.1910588368134692781e+1, 5.1283495159288225414e-1, &r), -1.3438429765742294157e+52, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-6.7113819006700078322, 4.0393307486388760775e-1, &r), 3.8345193040174093796e+6, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.8693610985720627242e+1, 3.4777341593350738095e-1, &r), 1.2557150749869300709e+50, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.3640245743314574591e+1, 9.6025287507519664839e-1, &r), -3.8943763839931542689e+28, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.8083409800395899615e+1, 1.4391402197265332926e-1, &r), -9.9126133627220300984e+113, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.8105478052324389543e+1, 4.891514010318381566e-1, &r), -1.2271238830087142465e+66, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.5311996069559305006e+1, 9.5766172213158543809e-1, &r), 3.7577671642248517421e+31, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.0646798215967974621e+1, 9.3310976056897272996e-1, &r), 1.5913395046591416208e+41, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.9802221662384415773e+1, 8.0558698100484531078e-1, &r), -1.3410097300803423969e+61, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.6307175589532141033e+1, 8.5581965580057553716e-1, &r), -8.2913043528862589862e+72, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.0008133602203088381e+1, 8.8260963451522902618e-1, &r), -4.3184875964228242059e+8, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.2307910802466458785e+1, 6.782808128445430142e-1, &r), -1.4119756731193528077e+69, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.0130438814666196845e+1, 2.1277791687648788154e-1, &r), -1.02690311217639001e+15, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.9533803019889111726e+1, 3.9334897500975715385e-1, &r), -6.4704382293897894852e+28, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.3895956090712434265e+1, 8.0661260505451797979e-1, &r), -4.3815146159956971318e+14, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.4635165127833994625e+1, 3.7945739040607276532e-1, &r), 1.5929485514781295968e+20, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.8560967136543055351e+1, 7.9600892022399284277e-1, &r), 1.1465774145795382248e+39, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-6.2108119261932190115, 8.7806601388332832487e-1, &r), -7.4701969028629161594e+3, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-6.9950977953230716109, 5.8978625225697869088e-1, &r), 1.1808677382965817331e+6, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.2481246429363894157e+1, 7.2704916561624886813e-1, &r), -7.5667536238826222942e+11, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-5.020982518214251176e+1, 7.5109544046044664159e-1, &r), -7.9040859853121739692e+83, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-8.9473034048334154025, 6.4213370686611774774e-2, &r), 2.6029884691597775763e+17, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.834075672586642874e+1, 6.4258947909888861139e-1, &r), -5.8405580195454874797e+61, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.4411381704857813062e+1, 1.2743783697917866926e-1, &r), -3.1773798568513309515e+105, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-6.1687391291035845538, 7.8786722297686215495e-1, &r), -1.4219092995559599082e+4, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.0704293950958482287e+1, 3.8531626603275482749e-1, &r), 1.5743246247238302576e+13, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.0571445654620545043e+1, 3.4876986634505808892e-1, &r), 7.0385234557024272162e+76, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.3563863522003561189, 9.7999452783586835833e-1, &r), -3.1893996030425450694e+1, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.8492269674910402783e+1, 1.7152753186318347442e-1, &r), -6.0249928142043118768e+32, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.5363228484567149913e+1, 3.0542644930515794217e-1, &r), 1.3211507552477009856e+44, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.3771144161000489935e+1, 7.3346736008344405886e-1, &r), -8.3124988094143057824e+14, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.3761246233591030521e+1, 5.4968519162734822572e-1, &r), -6.0578774841300955332e+34, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.2634961325802757898e+1, 6.6471162507224558099e-1, &r), 3.2082973398317013106e+30, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.6563404270777516422e+1, 7.5273096421024420905e-1, &r), 3.7592589106971418602e+75, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.0848764148512049678e+1, 9.2286052929496267966e-1, &r), 3.2439553455961291223e+9, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.5455854142576014389e+1, 7.8971992208889605774e-1, &r), 1.3378630820768277448e+52, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.2013968530863113871e+1, 1.9744029176545173315e-1, &r), -1.584787479000820067e+19, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-5.6750075448691398076, 8.0444727938729491316e-1, &r), -2.10533382223663811e+3, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.8429830608986305295e+1, 8.2140563165026789468e-1, &r), -1.1405415108194473062e+21, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.346426407446347328e+1, 8.5111501099434108204e-1, &r), 8.7606083372225198285e+28, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.9593848458448579212e+1, 1.2641237816367966816e-1, &r), -6.4135079973931874203e+64, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.7086231381348987822e+1, 3.9893860083544831831e-1, &r), 7.515835122388342095e+24, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.8484417257406457732, 6.0748406712157845873e-1, &r), -2.7380610022426281822, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.1822890333552359573e+1, 5.0020129878524173631e-1, &r), -1.7231227888225767619e+52, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-6.2862753931112845805, 7.9353453932163968388e-1, &r), -1.342401423092805412e+4, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.5508352825172743548, 7.3200379508076835206e-1, &r), -4.0497851981930665643e-1, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-7.6325669923999446014, 6.3959118408264715884e-2, &r), -8.0591625416199259092e+13, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.7217355888852626548e+1, 8.2439297912634420605e-1, &r), 4.2640264465349061973e+55, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.9216632463077931365e+1, 2.1243165065073566651e-2, &r), 7.2753341407348563956e+121, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.0310494244455808579e+1, 5.6409661087945220564e-1, &r), -8.0236717760932647636e+27, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.2561355227860967802e+1, 6.1429304168687688441e-1, &r), 1.095939957156354534e+71, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.348280958534689123e+1, 1.3878791555680588964e-1, &r), 1.4127166630922246712e+47, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.266908051943509346, 9.1043177038683039605e-1, &r), 7.9342040586370876107, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.6453677594081999426e+1, 7.3766130024218803361e-1, &r), -2.8496103761067379068e+18, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.0292370302033138277e+1, 2.7545919896373212095e-1, &r), -9.9081192322574702806e+13, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.788826873303230097e+1, 2.2855276522975392381e-1, &r), -4.2068889321668479948e+53, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.1401875376696767087e+1, 6.6522142928175599046e-2, &r), 5.4702914219176701268e+108, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.9306765177660380865e+1, 2.0291343278160599375e-1, &r), 4.3752403877947450222e+34, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.9778989699515361126e+1, 5.0069816606055756877e-2, &r), -5.0144871285761887467e+77, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.3484350943085112332e+1, 2.5580340114657331489e-2, &r), 8.660979419407748338e+32, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.8885950309653823971e+1, 2.705230773944354062e-1, &r), 7.0729128795400209404e+102, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.6140505254948262834e+1, 5.635769797194365065e-1, &r), -1.691181704671511378e+39, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.36353791993838395e+1, 7.8601342847547894355e-1, &r), -4.184570564713370597e+30, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.8043892058273381078e+1, 9.6661631483018731188e-1, &r), -5.2799069238255343804e+54, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.0627792568626186656e+1, 2.7801894968851888201e-1, &r), 4.6951098613000862734e+34, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.7821819326414013127e+1, 7.0072053744106375522e-1, &r), -3.2969189837617817178e+59, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.1895350862490616295e+1, 6.3819566879323744549e-1, &r), -7.4877627933750167273e+12, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.1564822793166119652e+1, 8.7089052441788146841e-1, &r), -4.362095115786654673e+62, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-5.6988133455245986782, 1.0513161628614675752e-1, &r), -2.6315584241050780179e+8, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-5.04236829179067909, 2.1606414592833118122e-2, &r), 6.6460848251254935943e+10, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-8.5815569416794001464e-1, 3.2800854133020344342e-1, &r), 1.7278337309129555492, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-7.4540158508402344121, 3.3591301584669540366e-1, &r), 4.6958147873473343296e+7, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.1342269410012557907e+1, 7.2248859912133702972e-1, &r), 8.4210802265866850829e+65, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-4.0890888214378787004e+1, 4.6015468690527406659e-2, &r), 1.5760625185685568109e+114, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.4949019201278440062e+1, 5.5379096162817544569e-1, &r), 2.4017690399425079403e+57, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.5581474535040863099, 8.6545078146345742122e-1, &r), -4.2518863856194071801e-1, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-1.6450819423469368818e+1, 4.0968007844676920681e-1, &r), -4.7316334255824816328e+22, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-2.4534051152698170766e+1, 9.2462004307970597256e-1, &r), 8.0009048223739294629e+29, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-9.5846016059057764355, 1.4980322293854772757e-1, &r), -7.3726783694247075753e+14, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Ynu_e, (-3.1840530425923939329e+1, 9.3847997261021697482e-1, &r), -3.8745468671462878671e+43, TEST_TOL2, GSL_SUCCESS); /* Inu */ TEST_SF(s, gsl_sf_bessel_Inu_scaled_e, (0.0001,10.0, &r), 0.12783333709581669672, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Inu_scaled_e, ( 1.0, 0.001, &r), 0.0004995003123542213370, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Inu_scaled_e, ( 1.0, 1.0, &r), 0.20791041534970844887, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Inu_scaled_e, (30.0, 1.0, &r), 1.3021094983785914437e-42, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Inu_scaled_e, (30.0, 100.0, &r), 0.0004486987756920986146, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Inu_scaled_e, (10.0, 1.0, &r), 1.0127529864692066036e-10, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Inu_scaled_e, (10.0, 100.0, &r), 0.024176682718258828365, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Inu_scaled_e, (10.2, 100.0, &r), 0.023691628843913810043, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Inu_e, (0.0001,10.0, &r), 2815.7166269770030352, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Inu_e, ( 1.0, 0.001, &r), 0.0005000000625000026042, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Inu_e, ( 1.0, 1.0, &r), 0.5651591039924850272, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Inu_e, (30.0, 1.0, &r), 3.539500588106447747e-42, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Inu_e, (30.0, 100.0, &r), 1.2061548704498434006e+40, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Inu_e, (10.0, 1.0, &r), 2.7529480398368736252e-10, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Inu_e, (10.0, 100.0, &r), 6.498975524720147799e+41, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Inu_e, (10.2, 100.0, &r), 6.368587361287030443e+41, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_scaled_e, (0.0001,10.0, &r), 0.3916319346235421817, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_scaled_e, ( 1.0, 0.001, &r), 1000.9967345590684524, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_scaled_e, ( 1.0, 1.0, &r), 1.6361534862632582465, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_scaled_e, (30.0, 1.0, &r), 1.2792629867539753925e+40, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_scaled_e, (30.0, 100.0, &r), 10.673443449954850040, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_scaled_e, (10.0, 1.0, &r), 4.912296520990198599e+08, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_scaled_e, (10.0, 100.0, &r), 0.20578687173955779807, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_scaled_e, (10.0, 1000.0, &r), 0.04165905142800565788, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_scaled_e, (10.0, 1.0e+8, &r), 0.00012533147624060789938, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_scaled_e, (10.2, 100.0, &r), 0.20995808355244385075, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_e, (0.0001,0.001, &r), 7.023689431812884141, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_e, (0.0001,10.0, &r), 0.000017780062324654874306, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_e, ( 1.0, 0.001, &r), 999.9962381560855743, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_e, ( 1.0, 1.0, &r), 0.6019072301972345747, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_e, (10.0, 0.001, &r), 1.8579455483904008064e+38, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_e, (10.0, 1.0, &r), 1.8071328990102945469e+08, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_e, (10.0, 100.0, &r), 7.655427977388100611e-45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_e, (10.2, 100.0, &r), 7.810600225948217841e-45, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_e, (30.0, 1.0, &r), 4.706145526783626883e+39, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_Knu_e, (30.0, 100.0, &r), 3.970602055959398739e-43, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, (0.0001,1.0e-100, &r), 5.439794449319847, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, (0.0001,0.0001, &r), 2.232835507214331, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, (0.0001,10.0, &r), -10.93743282256098, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, ( 1.0, 1.0e-100, &r), 230.2585092994045, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, ( 1.0, 1.0e-10, &r), 23.025850929940456840, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, ( 1.0, 0.001, &r), 6.907751517131146, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, ( 1.0, 1.0, &r), -0.5076519482107523309, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, (30.0, 1.0e-100, &r), 6999.113586185543475, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, (30.0, 1.0, &r), 91.34968784026325464, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, (30.0, 100.0, &r), -97.63224126416760932, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, (100.0, 1.0e-100, &r), 23453.606706185466825, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, (100.0, 1.0, &r), 427.7532510250188083, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, (100.0, 100.0, &r), -55.53422771502921431, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, (1000.0, 1.0e-100, &r), 236856.183755993135, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, (10000.0, 1.0e-100, &r), 2.39161558914890695e+06, TEST_TOL0, GSL_SUCCESS); /* [bug #31528] gsl_sf_bessel_lnKnu overflows for large nu */ TEST_SF(s, gsl_sf_bessel_lnKnu_e, (180.0, 2.2, &r), 735.1994170369583930752590258, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_lnKnu_e, (3500.5, 1500.0, &r), 1731.220077116482710070986699, TEST_TOL1, GSL_SUCCESS); sa = 0; gsl_sf_bessel_Jn_array(3, 38, 1.0, J); sa += ( test_sf_frac_diff(J[0], 0.0195633539826684059190 ) > TEST_TOL1); sa += ( test_sf_frac_diff(J[1], 0.0024766389641099550438 ) > TEST_TOL1); sa += ( test_sf_frac_diff(J[10], 1.9256167644801728904e-14 ) > TEST_TOL1); sa += ( test_sf_frac_diff(J[35], 6.911232970971626272e-57 ) > TEST_TOL1); gsl_test(sa, " gsl_sf_bessel_Jn_array"); s += sa; sa = 0; gsl_sf_bessel_Yn_array(3, 38, 1.0, Y); sa += ( test_sf_frac_diff(Y[0], -5.821517605964728848 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(Y[1], -33.27842302897211870 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(Y[10], -1.2753618701519837595e+12 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(Y[35], -1.2124435663593357154e+54 ) > TEST_TOL0 ); gsl_test(sa, " gsl_sf_bessel_Yn_array"); s += sa; sa = 0; gsl_sf_bessel_In_scaled_array(3, 38, 1.0, I); sa += ( test_sf_frac_diff(I[0], 0.0081553077728142938170 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(I[1], 0.0010069302573377758637 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(I[10], 7.341518665628926244e-15 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(I[35], 2.5753065298357542893e-57 ) > TEST_TOL0 ); gsl_test(sa, " gsl_sf_bessel_In_scaled_array"); s += sa; sa = 0; gsl_sf_bessel_In_array(3, 38, 1.0, Y); sa += ( test_sf_frac_diff(Y[0], 0.0221684249243319024760 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(Y[1], 0.0027371202210468663251 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(Y[10], 1.9956316782072007564e-14 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(Y[35], 7.000408942764452901e-57 ) > TEST_TOL0 ); gsl_test(sa, " gsl_sf_bessel_In_array"); s += sa; sa = 0; gsl_sf_bessel_Kn_array(3, 38, 1.0, K); sa += ( test_sf_frac_diff(K[0], 7.101262824737944506 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(K[1], 44.23241584706284452 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(K[10], 1.9215763927929940846e+12 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(K[35], 1.8789385023806051223e+54 ) > TEST_TOL0 ); gsl_test(sa, " gsl_sf_bessel_Kn_array"); s += sa; sa = 0; gsl_sf_bessel_Kn_scaled_array(3, 38, 1.0, K); sa += ( test_sf_frac_diff(K[0], 19.303233695596904277 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(K[1], 120.23617222591483717 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(K[10], 5.223386190525076473e+12 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(K[35], 5.107484387813251411e+54 ) > TEST_TOL0 ); gsl_test(sa, " gsl_sf_bessel_Kn_scaled_array"); s += sa; sa = 0; gsl_sf_bessel_jl_array(50, 1.0, J); sa += ( test_sf_frac_diff(J[0], 0.84147098480789650670 ) > TEST_TOL2 ); sa += ( test_sf_frac_diff(J[1], 0.30116867893975678925 ) > TEST_TOL2 ); sa += ( test_sf_frac_diff(J[10], 7.116552640047313024e-11 ) > TEST_TOL2 ); sa += ( test_sf_frac_diff(J[50], 3.615274717489787311e-81 ) > TEST_TOL2 ); gsl_test(sa, " gsl_sf_bessel_jl_array"); s += sa; sa = 0; gsl_sf_bessel_jl_steed_array(99, 1.0, J); sa += ( test_sf_frac_diff(J[0], 0.84147098480789650670 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(J[1], 0.30116867893975678925 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(J[10], 7.116552640047313024e-11 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(J[50], 3.615274717489787311e-81 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(J[80], 1.136352423414503264e-144 ) > TEST_TOL1 ); gsl_test(sa, " gsl_sf_bessel_jl_steed_array"); s += sa; sa = 0; gsl_sf_bessel_yl_array(50, 1.0, Y); sa += ( test_sf_frac_diff(Y[0], -0.5403023058681397174 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(Y[1], -1.3817732906760362241 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(Y[10], -6.722150082562084436e+08 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(Y[50], -2.7391922846297571576e+78 ) > TEST_TOL0 ); gsl_test(sa, " gsl_sf_bessel_yl_array"); s += sa; { double Y0[1]; sa = 0; gsl_sf_bessel_yl_array(0, 1.0, Y0); sa += ( test_sf_frac_diff(Y0[0], -0.5403023058681397174 ) > TEST_TOL0 ); gsl_test(sa, " gsl_sf_bessel_yl_array (lmax=0)"); s += sa; } sa = 0; gsl_sf_bessel_il_scaled_array(50, 1.0, I); sa += ( test_sf_frac_diff(I[0], 0.43233235838169365410 ) > TEST_TOL2 ); sa += ( test_sf_frac_diff(I[1], 0.13533528323661269189 ) > TEST_TOL2 ); sa += ( test_sf_frac_diff(I[10], 2.7343719371837065460e-11 ) > TEST_TOL2 ); sa += ( test_sf_frac_diff(I[50], 1.3429606061892023653e-81 ) > TEST_TOL2 ); gsl_test(sa, " gsl_sf_bessel_il_scaled_array"); s += sa; sa = 0; gsl_sf_bessel_il_scaled_array(50, 0.0, I); sa += ( test_sf_frac_diff(I[0], 1.0 ) > TEST_TOL2 ); sa += ( test_sf_frac_diff(I[1], 0.0 ) > TEST_TOL2 ); sa += ( test_sf_frac_diff(I[10], 0.0 ) > TEST_TOL2 ); sa += ( test_sf_frac_diff(I[50], 0.0 ) > TEST_TOL2 ); gsl_test(sa, " gsl_sf_bessel_il_scaled_array (L=0)"); s += sa; sa = 0; gsl_sf_bessel_kl_scaled_array(50, 1.0, K); sa += ( test_sf_frac_diff(K[0], 1.5707963267948966192 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(K[1], 3.1415926535897932385 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(K[10], 2.7231075458948147010e+09 ) > TEST_TOL0 ); sa += ( test_sf_frac_diff(K[50], 1.1578440432804522544e+79 ) > TEST_TOL0 ); gsl_test(sa, " gsl_sf_bessel_kl_scaled_array"); s += sa; { double K0[1]; sa = 0; gsl_sf_bessel_kl_scaled_array(0, 1.0, K0); sa += ( test_sf_frac_diff(K[0], 1.5707963267948966192 ) > TEST_TOL0 ); gsl_test(sa, " gsl_sf_bessel_kl_scaled_array (lmax=0)"); s += sa; } sa = 0; sa += ( gsl_sf_bessel_zero_J0_e(0, &r) != GSL_EINVAL ); sa += ( r.val != 0.0 ); s += sa; TEST_SF(s, gsl_sf_bessel_zero_J0_e, ( 1, &r), 2.404825557695771, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_J0_e, ( 2, &r), 5.520078110286304, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_J0_e, (20, &r), 62.048469190227081, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_J0_e, (25, &r), 77.756025630388058, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_J0_e, (100, &r), 313.37426607752784, TEST_TOL1, GSL_SUCCESS); sa = 0; sa += ( gsl_sf_bessel_zero_J1_e(0, &r) != GSL_SUCCESS ); sa += ( r.val != 0.0 ); s += sa; TEST_SF(s, gsl_sf_bessel_zero_J1_e, ( 1, &r), 3.831705970207512, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_J1_e, ( 2, &r), 7.015586669815619, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_J1_e, (20, &r), 63.61135669848124, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_J1_e, (25, &r), 79.32048717547630, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_J1_e, (100, &r), 314.9434728377672, TEST_TOL2, GSL_SUCCESS); sa = 0; sa += ( gsl_sf_bessel_zero_Jnu_e(0.0, 0, &r) != GSL_EINVAL ); sa += ( r.val != 0.0 ); s += sa; TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (0.0, 1, &r), 2.404825557695771, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (0.0, 2, &r), 5.520078110286304, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (0.0, 20, &r), 62.048469190227081, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (0.0, 25, &r), 77.756025630388058, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (0.0, 100, &r), 313.37426607752784, TEST_TOL1, GSL_SUCCESS); sa = 0; sa += ( gsl_sf_bessel_zero_Jnu_e(1.0, 0, &r) != GSL_SUCCESS ); sa += (r.val != 0.0); s += sa; TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 1.5, 1, &r), 4.4934094579090641, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 1, &r), 8.7714838159599540, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 1.5, 2, &r), 7.7252518369377072, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 2, &r), 12.338604197466944, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 1.5, 3, &r), 10.904121659428900, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 3, &r), 15.700174079711671, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 1.5, 4, &r), 14.066193912831473, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 4, &r), 18.980133875179921, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 1.5, 5, &r), 17.220755271930768, TEST_TOL1, GSL_SUCCESS); /* Something wrong with the tolerances on these */ TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 5, &r), 22.217799896561268, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 8.0, 5, &r), 26.266814641176644, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (20.0, 5, &r), 41.413065513892636, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 1.5, 6, &r), 20.371302959287563, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 6, &r), 25.430341154222704, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 8.0, 6, &r), 29.545659670998550, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 1.5, 7, &r), 23.519452498689007, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 7, &r), 28.626618307291138, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 8.0, 7, &r), 32.795800037341462, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 1.5, 8, &r), 26.666054258812674, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 8, &r), 31.811716724047763, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (10.0, 8, &r), 38.761807017881651, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 1.5, 9, &r), 29.811598790892959, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 9, &r), 34.988781294559295, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (10.0, 9, &r), 42.004190236671805, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 1.5, 10, &r), 32.956389039822477, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 10, &r), 38.159868561967132, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (15.0, 10, &r), 52.017241278881633, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 11, &r), 41.326383254047406, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (15.0, 11, &r), 55.289204146560061, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 12, &r), 44.4893191232197314, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (15.0, 12, &r), 58.5458289043850856, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 13, &r), 47.6493998066970948, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (15.0, 13, &r), 61.7897598959450550, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 14, &r), 50.8071652030063595, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (15.0, 14, &r), 65.0230502510422545, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 15, &r), 53.9630265583781707, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (15.0, 15, &r), 68.2473219964207837, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 16, &r), 57.1173027815042647, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (15.0, 16, &r), 71.4638758850226630, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 17, &r), 60.2702450729428077, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (15.0, 17, &r), 74.6737687121404241, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 18, &r), 63.4220540458757799, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (15.0, 18, &r), 77.8778689734863729, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 19, &r), 66.5728918871182703, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (15.0, 19, &r), 81.0768977206328326, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 20, &r), 69.722891161716742, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (15.0, 20, &r), 84.271459069716442, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 23.0, 11, &r), 65.843393469524653, TEST_TOL6, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 30.0, 11, &r), 74.797306585175426, TEST_TOL6, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 32.0, 15, &r), 90.913637691861741, TEST_TOL6, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 50.0, 15, &r), 113.69747988073942, TEST_TOL6, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 5.0, 22, &r), 76.020793430591605, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 10.0, 22, &r), 83.439189796105756, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, ( 12.0, 22, &r), 86.345496520534055, TEST_TOL6, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (100.0, 22, &r), 199.82150220122519, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_bessel_zero_Jnu_e, (500.0, 22, &r), 649.34132440891735, TEST_TOL2, GSL_SUCCESS); sa = 0; for(i=0; i<100; i++) { J[i] = i/10.0; } gsl_sf_bessel_sequence_Jnu_e(2.0, GSL_MODE_DEFAULT, 100, J); sa += ( test_sf_frac_diff(J[1], 0.0012489586587999188454 ) > TEST_TOL1 ); sa += ( test_sf_frac_diff(J[20], 0.3528340286156377192 ) > TEST_TOL4 ); sa += ( test_sf_frac_diff(J[50], 0.0465651162777522155 ) > TEST_TOL4 ); gsl_test(sa, " gsl_sf_sequence_Jnu_e(2)"); s += sa; sa = 0; for(i=0; i<100; i++) { J[i] = i; } gsl_sf_bessel_sequence_Jnu_e(12.0, GSL_MODE_DEFAULT, 100, J); sa += ( test_sf_frac_diff(J[1], 4.999718179448405289e-13 ) > TEST_TOL1 ); sa += ( test_sf_frac_diff(J[5], 7.627813166084551355e-05 ) > TEST_TOL1 ); sa += ( test_sf_frac_diff(J[7], 2.655620035894568062e-03 ) > TEST_TOL3 ); sa += ( test_sf_frac_diff(J[10], 6.337025497015601509e-02 ) > TEST_TOL3 ); sa += ( test_sf_frac_diff(J[15], 0.23666584405476805591 ) > TEST_TOL3 ); sa += ( test_sf_frac_diff(J[30], 0.14825335109966010021 ) > TEST_TOL3 ); sa += ( test_sf_frac_diff(J[70], 0.04109913716555364262 ) > TEST_TOL4 ); sa += ( test_sf_frac_diff(J[99], -0.0015052760501176728 ) > TEST_TOL5 ); gsl_test(sa, " gsl_sf_sequence_Jnu_e(12)"); s += sa; sa = 0; for(i=0; i<100; i++) { J[i] = i * 20; } gsl_sf_bessel_sequence_Jnu_e(1000.0, GSL_MODE_DEFAULT, 100, J); sa += ( test_sf_frac_diff(J[50], 0.04473067294796404088 ) > TEST_TOL5 ); sa += ( test_sf_frac_diff(J[99], 0.01400619760349853902 ) > TEST_TOL6 ); gsl_test(sa, " gsl_sf_sequence_Jnu_e(1000)"); s += sa; return s; } gsl/specfunc/gsl_sf_sincos_pi.h0000644000175000017500000000321013536674414015230 0ustar eddedd/* specfunc/gsl_sf_sincos_pi.h * * Copyright (C) 2017 Konrad Griessinger * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman, K. Griessinger */ #ifndef __GSL_SF_SINCOS_PI_H__ #define __GSL_SF_SINCOS_PI_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* sin_pi(x) with GSL semantics. This is actually important * because we want to control the error estimate, and trying * to guess the error for the standard library implementation * every time it is used would be a little goofy. */ int gsl_sf_sin_pi_e(double x, gsl_sf_result * result); double gsl_sf_sin_pi(const double x); /* cos_pi(x) with GSL semantics. */ int gsl_sf_cos_pi_e(double x, gsl_sf_result * result); double gsl_sf_cos_pi(const double x); __END_DECLS #endif /* __GSL_SF_SINCOS_PI_H__ */ gsl/specfunc/bessel_Yn.c0000644000175000017500000001257413536674414013640 0ustar eddedd/* specfunc/bessel_Yn.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include "error.h" #include "bessel.h" #include "bessel_amp_phase.h" #include "bessel_olver.h" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* assumes n >= 1 */ static int bessel_Yn_small_x(const int n, const double x, gsl_sf_result * result) { int k; double y = 0.25 * x * x; double ln_x_2 = log(0.5*x); gsl_sf_result ln_nm1_fact; double k_term; double term1, sum1, ln_pre1; double term2, sum2, pre2; gsl_sf_lnfact_e((unsigned int)(n-1), &ln_nm1_fact); ln_pre1 = -n*ln_x_2 + ln_nm1_fact.val; if(ln_pre1 > GSL_LOG_DBL_MAX - 3.0) GSL_ERROR ("error", GSL_EOVRFLW); sum1 = 1.0; k_term = 1.0; for(k=1; k<=n-1; k++) { k_term *= y/(k * (n-k)); sum1 += k_term; } term1 = -exp(ln_pre1) * sum1 / M_PI; pre2 = -exp(n*ln_x_2) / M_PI; if(fabs(pre2) > 0.0) { const int KMAX = 20; gsl_sf_result psi_n; gsl_sf_result npk_fact; double yk = 1.0; double k_fact = 1.0; double psi_kp1 = -M_EULER; double psi_npkp1; gsl_sf_psi_int_e(n, &psi_n); gsl_sf_fact_e((unsigned int)n, &npk_fact); psi_npkp1 = psi_n.val + 1.0/n; sum2 = (psi_kp1 + psi_npkp1 - 2.0*ln_x_2)/npk_fact.val; for(k=1; kval = term1 + term2; result->err = GSL_DBL_EPSILON * (fabs(ln_pre1)*fabs(term1) + fabs(term2)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_Yn_e(int n, const double x, gsl_sf_result * result) { int sign = 1; if(n < 0) { /* reduce to case n >= 0 */ n = -n; if(GSL_IS_ODD(n)) sign = -1; } /* CHECK_POINTER(result) */ if(n == 0) { int status = gsl_sf_bessel_Y0_e(x, result); result->val *= sign; return status; } else if(n == 1) { int status = gsl_sf_bessel_Y1_e(x, result); result->val *= sign; return status; } else { if(x <= 0.0) { DOMAIN_ERROR(result); } if(x < 5.0) { int status = bessel_Yn_small_x(n, x, result); result->val *= sign; return status; } else if(GSL_ROOT3_DBL_EPSILON * x > (n*n + 1.0)) { int status = gsl_sf_bessel_Ynu_asympx_e((double)n, x, result); result->val *= sign; return status; } else if(n > 50) { int status = gsl_sf_bessel_Ynu_asymp_Olver_e((double)n, x, result); result->val *= sign; return status; } else { double two_over_x = 2.0/x; gsl_sf_result r_by; gsl_sf_result r_bym; int stat_1 = gsl_sf_bessel_Y1_e(x, &r_by); int stat_0 = gsl_sf_bessel_Y0_e(x, &r_bym); double bym = r_bym.val; double by = r_by.val; double byp; int j; for(j=1; jval = sign * by; result->err = fabs(result->val) * (fabs(r_by.err/r_by.val) + fabs(r_bym.err/r_bym.val)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_1, stat_0); } } } int gsl_sf_bessel_Yn_array(const int nmin, const int nmax, const double x, double * result_array) { /* CHECK_POINTER(result_array) */ if(nmin < 0 || nmax < nmin || x <= 0.0) { int j; for(j=0; j<=nmax-nmin; j++) result_array[j] = 0.0; GSL_ERROR ("error", GSL_EDOM); } else { gsl_sf_result r_Ynm1; gsl_sf_result r_Yn; int stat_nm1 = gsl_sf_bessel_Yn_e(nmin, x, &r_Ynm1); int stat_n = gsl_sf_bessel_Yn_e(nmin+1, x, &r_Yn); double Ynp1; double Yn = r_Yn.val; double Ynm1 = r_Ynm1.val; int n; int stat = GSL_ERROR_SELECT_2(stat_nm1, stat_n); if(stat == GSL_SUCCESS) { for(n=nmin+1; n<=nmax+1; n++) { result_array[n-nmin-1] = Ynm1; Ynp1 = -Ynm1 + 2.0*n/x * Yn; Ynm1 = Yn; Yn = Ynp1; } } else { for(n=nmin; n<=nmax; n++) { result_array[n-nmin] = 0.0; } } return stat; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_Yn(const int n, const double x) { EVAL_RESULT(gsl_sf_bessel_Yn_e(n, x, &result)); } gsl/specfunc/inline.c0000664000175000017500000000170114057135461013154 0ustar eddedd/* specfunc/inline.c * * Copyright (C) 2019 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include /* Compile all the inline functions */ #define COMPILE_INLINE_STATIC #include "build.h" #include gsl/specfunc/legendre_Qn.c0000644000175000017500000002276513536674414014143 0ustar eddedd/* specfunc/legendre_Qn.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include #include "error.h" /* Evaluate f_{ell+1}/f_ell * f_ell := Q^{b}_{a+ell}(x) * x > 1 */ static int legendreQ_CF1_xgt1(int ell, double a, double b, double x, double * result) { const double RECUR_BIG = GSL_SQRT_DBL_MAX; const int maxiter = 5000; int n = 1; double Anm2 = 1.0; double Bnm2 = 0.0; double Anm1 = 0.0; double Bnm1 = 1.0; double a1 = ell + 1.0 + a + b; double b1 = (2.0*(ell+1.0+a) + 1.0) * x; double An = b1*Anm1 + a1*Anm2; double Bn = b1*Bnm1 + a1*Bnm2; double an, bn; double fn = An/Bn; while(n < maxiter) { double old_fn; double del; double lna; n++; Anm2 = Anm1; Bnm2 = Bnm1; Anm1 = An; Bnm1 = Bn; lna = ell + n + a; an = b*b - lna*lna; bn = (2.0*lna + 1.0) * x; An = bn*Anm1 + an*Anm2; Bn = bn*Bnm1 + an*Bnm2; if(fabs(An) > RECUR_BIG || fabs(Bn) > RECUR_BIG) { An /= RECUR_BIG; Bn /= RECUR_BIG; Anm1 /= RECUR_BIG; Bnm1 /= RECUR_BIG; Anm2 /= RECUR_BIG; Bnm2 /= RECUR_BIG; } old_fn = fn; fn = An/Bn; del = old_fn/fn; if(fabs(del - 1.0) < 4.0*GSL_DBL_EPSILON) break; } *result = fn; if(n == maxiter) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } /* Uniform asymptotic for Q_l(x). * Assumes x > -1.0 and x != 1.0. * Discards second order and higher terms. */ static int legendre_Ql_asymp_unif(const double ell, const double x, gsl_sf_result * result) { if(x < 1.0) { double u = ell + 0.5; double th = acos(x); gsl_sf_result Y0, Y1; int stat_Y0, stat_Y1; int stat_m; double pre; double B00; double sum; /* B00 = 1/8 (1 - th cot(th) / th^2 * pre = sqrt(th/sin(th)) */ if(th < GSL_ROOT4_DBL_EPSILON) { B00 = (1.0 + th*th/15.0)/24.0; pre = 1.0 + th*th/12.0; } else { double sin_th = sqrt(1.0 - x*x); double cot_th = x / sin_th; B00 = 1.0/8.0 * (1.0 - th * cot_th) / (th*th); pre = sqrt(th/sin_th); } stat_Y0 = gsl_sf_bessel_Y0_e(u*th, &Y0); stat_Y1 = gsl_sf_bessel_Y1_e(u*th, &Y1); sum = -0.5*M_PI * (Y0.val + th/u * Y1.val * B00); stat_m = gsl_sf_multiply_e(pre, sum, result); result->err += 0.5*M_PI * fabs(pre) * (Y0.err + fabs(th/u*B00)*Y1.err); result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_3(stat_m, stat_Y0, stat_Y1); } else { double u = ell + 0.5; double xi = acosh(x); gsl_sf_result K0_scaled, K1_scaled; int stat_K0, stat_K1; int stat_e; double pre; double B00; double sum; /* B00 = -1/8 (1 - xi coth(xi) / xi^2 * pre = sqrt(xi/sinh(xi)) */ if(xi < GSL_ROOT4_DBL_EPSILON) { B00 = (1.0-xi*xi/15.0)/24.0; pre = 1.0 - xi*xi/12.0; } else { double sinh_xi = sqrt(x*x - 1.0); double coth_xi = x / sinh_xi; B00 = -1.0/8.0 * (1.0 - xi * coth_xi) / (xi*xi); pre = sqrt(xi/sinh_xi); } stat_K0 = gsl_sf_bessel_K0_scaled_e(u*xi, &K0_scaled); stat_K1 = gsl_sf_bessel_K1_scaled_e(u*xi, &K1_scaled); sum = K0_scaled.val - xi/u * K1_scaled.val * B00; stat_e = gsl_sf_exp_mult_e(-u*xi, pre * sum, result); result->err = GSL_DBL_EPSILON * fabs(result->val) * fabs(u*xi); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_3(stat_e, stat_K0, stat_K1); } } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_legendre_Q0_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= -1.0 || x == 1.0) { DOMAIN_ERROR(result); } else if(x*x < GSL_ROOT6_DBL_EPSILON) { /* |x| <~ 0.05 */ const double c3 = 1.0/3.0; const double c5 = 1.0/5.0; const double c7 = 1.0/7.0; const double c9 = 1.0/9.0; const double c11 = 1.0/11.0; const double y = x * x; const double series = 1.0 + y*(c3 + y*(c5 + y*(c7 + y*(c9 + y*c11)))); result->val = x * series; result->err = 2.0 * GSL_DBL_EPSILON * fabs(x); return GSL_SUCCESS; } else if(x < 1.0) { result->val = 0.5 * log((1.0+x)/(1.0-x)); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < 10.0) { result->val = 0.5 * log((x+1.0)/(x-1.0)); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x*GSL_DBL_MIN < 2.0) { const double y = 1.0/(x*x); const double c1 = 1.0/3.0; const double c2 = 1.0/5.0; const double c3 = 1.0/7.0; const double c4 = 1.0/9.0; const double c5 = 1.0/11.0; const double c6 = 1.0/13.0; const double c7 = 1.0/15.0; result->val = (1.0/x) * (1.0 + y*(c1 + y*(c2 + y*(c3 + y*(c4 + y*(c5 + y*(c6 + y*c7))))))); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { UNDERFLOW_ERROR(result); } } int gsl_sf_legendre_Q1_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= -1.0 || x == 1.0) { DOMAIN_ERROR(result); } else if(x*x < GSL_ROOT6_DBL_EPSILON) { /* |x| <~ 0.05 */ const double c3 = 1.0/3.0; const double c5 = 1.0/5.0; const double c7 = 1.0/7.0; const double c9 = 1.0/9.0; const double c11 = 1.0/11.0; const double y = x * x; const double series = 1.0 + y*(c3 + y*(c5 + y*(c7 + y*(c9 + y*c11)))); result->val = x * x * series - 1.0; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < 1.0){ result->val = 0.5 * x * (log((1.0+x)/(1.0-x))) - 1.0; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < 6.0) { result->val = 0.5 * x * log((x+1.0)/(x-1.0)) - 1.0; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x*GSL_SQRT_DBL_MIN < 0.99/M_SQRT3) { const double y = 1/(x*x); const double c1 = 3.0/5.0; const double c2 = 3.0/7.0; const double c3 = 3.0/9.0; const double c4 = 3.0/11.0; const double c5 = 3.0/13.0; const double c6 = 3.0/15.0; const double c7 = 3.0/17.0; const double c8 = 3.0/19.0; const double sum = 1.0 + y*(c1 + y*(c2 + y*(c3 + y*(c4 + y*(c5 + y*(c6 + y*(c7 + y*c8))))))); result->val = sum / (3.0*x*x); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { UNDERFLOW_ERROR(result); } } int gsl_sf_legendre_Ql_e(const int l, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= -1.0 || x == 1.0 || l < 0) { DOMAIN_ERROR(result); } else if(l == 0) { return gsl_sf_legendre_Q0_e(x, result); } else if(l == 1) { return gsl_sf_legendre_Q1_e(x, result); } else if(l > 100000) { return legendre_Ql_asymp_unif(l, x, result); } else if(x < 1.0){ /* Forward recurrence. */ gsl_sf_result Q0, Q1; int stat_Q0 = gsl_sf_legendre_Q0_e(x, &Q0); int stat_Q1 = gsl_sf_legendre_Q1_e(x, &Q1); double Qellm1 = Q0.val; double Qell = Q1.val; double Qellp1; int ell; for(ell=1; ellval = Qell; result->err = GSL_DBL_EPSILON * l * fabs(result->val); return GSL_ERROR_SELECT_2(stat_Q0, stat_Q1); } else { /* x > 1.0 */ double rat; int stat_CF1 = legendreQ_CF1_xgt1(l, 0.0, 0.0, x, &rat); int stat_Q; double Qellp1 = rat * GSL_SQRT_DBL_MIN; double Qell = GSL_SQRT_DBL_MIN; double Qellm1; int ell; for(ell=l; ell>0; ell--) { Qellm1 = (x * (2.0*ell + 1.0) * Qell - (ell+1.0) * Qellp1) / ell; Qellp1 = Qell; Qell = Qellm1; } if(fabs(Qell) > fabs(Qellp1)) { gsl_sf_result Q0; stat_Q = gsl_sf_legendre_Q0_e(x, &Q0); result->val = GSL_SQRT_DBL_MIN * Q0.val / Qell; result->err = l * GSL_DBL_EPSILON * fabs(result->val); } else { gsl_sf_result Q1; stat_Q = gsl_sf_legendre_Q1_e(x, &Q1); result->val = GSL_SQRT_DBL_MIN * Q1.val / Qellp1; result->err = l * GSL_DBL_EPSILON * fabs(result->val); } return GSL_ERROR_SELECT_2(stat_Q, stat_CF1); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_legendre_Q0(const double x) { EVAL_RESULT(gsl_sf_legendre_Q0_e(x, &result)); } double gsl_sf_legendre_Q1(const double x) { EVAL_RESULT(gsl_sf_legendre_Q1_e(x, &result)); } double gsl_sf_legendre_Ql(const int l, const double x) { EVAL_RESULT(gsl_sf_legendre_Ql_e(l, x, &result)); } gsl/specfunc/bessel_Y1.c0000644000175000017500000001012113536674414013525 0ustar eddedd/* specfunc/bessel_Y1.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "error.h" #include "bessel.h" #include "bessel_amp_phase.h" #include "cheb_eval.c" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* based on SLATEC besy1, 1977 version, w. fullerton */ /* chebyshev expansions series for by1 on the interval 0. to 1.60000d+01 with weighted error 1.87e-18 log weighted error 17.73 significant figures required 17.83 decimal places required 18.30 */ static double by1_data[14] = { 0.03208047100611908629, 1.262707897433500450, 0.00649996189992317500, -0.08936164528860504117, 0.01325088122175709545, -0.00089790591196483523, 0.00003647361487958306, -0.00000100137438166600, 0.00000001994539657390, -0.00000000030230656018, 0.00000000000360987815, -0.00000000000003487488, 0.00000000000000027838, -0.00000000000000000186 }; static cheb_series by1_cs = { by1_data, 13, -1, 1, 10 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_Y1_e(const double x, gsl_sf_result * result) { const double two_over_pi = 2.0/M_PI; const double xmin = 1.571*GSL_DBL_MIN; /*exp ( amax1(alog(r1mach(1)), -alog(r1mach(2)))+.01) */ const double x_small = 2.0 * GSL_SQRT_DBL_EPSILON; const double xmax = 1.0/GSL_DBL_EPSILON; /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if(x < xmin) { OVERFLOW_ERROR(result); } else if(x < x_small) { const double lnterm = log(0.5*x); gsl_sf_result J1; gsl_sf_result c; int status = gsl_sf_bessel_J1_e(x, &J1); cheb_eval_e(&by1_cs, -1.0, &c); result->val = two_over_pi * lnterm * J1.val + (0.5 + c.val)/x; result->err = fabs(lnterm) * (fabs(GSL_DBL_EPSILON * J1.val) + J1.err) + c.err/x; return status; } else if(x < 4.0) { const double lnterm = log(0.5*x); int status; gsl_sf_result J1; gsl_sf_result c; cheb_eval_e(&by1_cs, 0.125*x*x-1.0, &c); status = gsl_sf_bessel_J1_e(x, &J1); result->val = two_over_pi * lnterm * J1.val + (0.5 + c.val)/x; result->err = fabs(lnterm) * (fabs(GSL_DBL_EPSILON * J1.val) + J1.err) + c.err/x; return status; } else if(x < xmax) { const double z = 32.0/(x*x) - 1.0; gsl_sf_result ca; gsl_sf_result ct; gsl_sf_result cp; const int stat_ca = cheb_eval_e(&_gsl_sf_bessel_amp_phase_bm1_cs, z, &ca); const int stat_ct = cheb_eval_e(&_gsl_sf_bessel_amp_phase_bth1_cs, z, &ct); const int stat_cp = gsl_sf_bessel_cos_pi4_e(x, ct.val/x, &cp); const double sqrtx = sqrt(x); const double ampl = (0.75 + ca.val) / sqrtx; result->val = -ampl * cp.val; result->err = fabs(cp.val) * ca.err/sqrtx + fabs(ampl) * cp.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_3(stat_ca, stat_ct, stat_cp); } else { UNDERFLOW_ERROR(result); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_Y1(const double x) { EVAL_RESULT(gsl_sf_bessel_Y1_e(x, &result)); } gsl/specfunc/lambert.c0000644000175000017500000001404013536674414013331 0ustar eddedd/* specfunc/lambert.c * * Copyright (C) 2007 Brian Gough * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include /* Started with code donated by K. Briggs; added * error estimates, GSL foo, and minor tweaks. * Some Lambert-ology from * [Corless, Gonnet, Hare, and Jeffrey, "On Lambert's W Function".] */ /* Halley iteration (eqn. 5.12, Corless et al) */ static int halley_iteration( double x, double w_initial, unsigned int max_iters, gsl_sf_result * result ) { double w = w_initial; unsigned int i; for(i=0; i 0) { t = (t/p)/e; /* Newton iteration */ } else { t /= e*p - 0.5*(p + 1.0)*t/p; /* Halley iteration */ }; w -= t; tol = 10 * GSL_DBL_EPSILON * GSL_MAX_DBL(fabs(w), 1.0/(fabs(p)*e)); if(fabs(t) < tol) { result->val = w; result->err = 2.0*tol; return GSL_SUCCESS; } } /* should never get here */ result->val = w; result->err = fabs(w); return GSL_EMAXITER; } /* series which appears for q near zero; * only the argument is different for the different branches */ static double series_eval(double r) { static const double c[12] = { -1.0, 2.331643981597124203363536062168, -1.812187885639363490240191647568, 1.936631114492359755363277457668, -2.353551201881614516821543561516, 3.066858901050631912893148922704, -4.175335600258177138854984177460, 5.858023729874774148815053846119, -8.401032217523977370984161688514, 12.250753501314460424, -18.100697012472442755, 27.029044799010561650 }; const double t_8 = c[8] + r*(c[9] + r*(c[10] + r*c[11])); const double t_5 = c[5] + r*(c[6] + r*(c[7] + r*t_8)); const double t_1 = c[1] + r*(c[2] + r*(c[3] + r*(c[4] + r*t_5))); return c[0] + r*t_1; } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_lambert_W0_e(double x, gsl_sf_result * result) { const double one_over_E = 1.0/M_E; const double q = x + one_over_E; if(x == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(q < 0.0) { /* Strictly speaking this is an error. But because of the * arithmetic operation connecting x and q, I am a little * lenient in case of some epsilon overshoot. The following * answer is quite accurate in that case. Anyway, we have * to return GSL_EDOM. */ result->val = -1.0; result->err = sqrt(-q); return GSL_EDOM; } else if(q == 0.0) { result->val = -1.0; result->err = GSL_DBL_EPSILON; /* cannot error is zero, maybe q == 0 by "accident" */ return GSL_SUCCESS; } else if(q < 1.0e-03) { /* series near -1/E in sqrt(q) */ const double r = sqrt(q); result->val = series_eval(r); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { static const unsigned int MAX_ITERS = 10; double w; if (x < 1.0) { /* obtain initial approximation from series near x=0; * no need for extra care, since the Halley iteration * converges nicely on this branch */ const double p = sqrt(2.0 * M_E * q); w = -1.0 + p*(1.0 + p*(-1.0/3.0 + p*11.0/72.0)); } else { /* obtain initial approximation from rough asymptotic */ w = log(x); if(x > 3.0) w -= log(w); } return halley_iteration(x, w, MAX_ITERS, result); } } int gsl_sf_lambert_Wm1_e(double x, gsl_sf_result * result) { if(x > 0.0) { return gsl_sf_lambert_W0_e(x, result); } else if(x == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { static const unsigned int MAX_ITERS = 32; const double one_over_E = 1.0/M_E; const double q = x + one_over_E; double w; if (q < 0.0) { /* As in the W0 branch above, return some reasonable answer anyway. */ result->val = -1.0; result->err = sqrt(-q); return GSL_EDOM; } if(x < -1.0e-6) { /* Obtain initial approximation from series about q = 0, * as long as we're not very close to x = 0. * Use full series and try to bail out if q is too small, * since the Halley iteration has bad convergence properties * in finite arithmetic for q very small, because the * increment alternates and p is near zero. */ const double r = -sqrt(q); w = series_eval(r); if(q < 3.0e-3) { /* this approximation is good enough */ result->val = w; result->err = 5.0 * GSL_DBL_EPSILON * fabs(w); return GSL_SUCCESS; } } else { /* Obtain initial approximation from asymptotic near zero. */ const double L_1 = log(-x); const double L_2 = log(-L_1); w = L_1 - L_2 + L_2/L_1; } return halley_iteration(x, w, MAX_ITERS, result); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_lambert_W0(double x) { EVAL_RESULT(gsl_sf_lambert_W0_e(x, &result)); } double gsl_sf_lambert_Wm1(double x) { EVAL_RESULT(gsl_sf_lambert_Wm1_e(x, &result)); } gsl/specfunc/beta_inc.c0000644000175000017500000001363013536674414013453 0ustar eddedd/* specfunc/beta_inc.c * * Copyright (C) 2007 Brian Gough * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include "error.h" #include "check.h" static double isnegint (const double x) { return (x < 0) && (x == floor(x)); } static int beta_cont_frac( const double a, const double b, const double x, gsl_sf_result * result ) { const unsigned int max_iter = 512; /* control iterations */ const double cutoff = 2.0 * GSL_DBL_MIN; /* control the zero cutoff */ unsigned int iter_count = 0; double cf; /* standard initialization for continued fraction */ double num_term = 1.0; double den_term = 1.0 - (a+b)*x/(a+1.0); if (fabs(den_term) < cutoff) den_term = cutoff; den_term = 1.0/den_term; cf = den_term; while(iter_count < max_iter) { const int k = iter_count + 1; double coeff = k*(b-k)*x/(((a-1.0)+2*k)*(a+2*k)); double delta_frac; /* first step */ den_term = 1.0 + coeff*den_term; num_term = 1.0 + coeff/num_term; if(fabs(den_term) < cutoff) den_term = cutoff; if(fabs(num_term) < cutoff) num_term = cutoff; den_term = 1.0/den_term; delta_frac = den_term * num_term; cf *= delta_frac; coeff = -(a+k)*(a+b+k)*x/((a+2*k)*(a+2*k+1.0)); /* second step */ den_term = 1.0 + coeff*den_term; num_term = 1.0 + coeff/num_term; if(fabs(den_term) < cutoff) den_term = cutoff; if(fabs(num_term) < cutoff) num_term = cutoff; den_term = 1.0/den_term; delta_frac = den_term*num_term; cf *= delta_frac; if(fabs(delta_frac-1.0) < 2.0*GSL_DBL_EPSILON) break; ++iter_count; } result->val = cf; result->err = iter_count * 4.0 * GSL_DBL_EPSILON * fabs(cf); if(iter_count >= max_iter) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_beta_inc_e( const double a, const double b, const double x, gsl_sf_result * result ) { if(x < 0.0 || x > 1.0) { DOMAIN_ERROR(result); } else if (isnegint(a) || isnegint(b)) { DOMAIN_ERROR(result); } else if (isnegint(a+b)) { DOMAIN_ERROR(result); } else if(x == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(x == 1.0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if (a <= 0 || b <= 0) { gsl_sf_result f, beta; int stat; const int stat_f = gsl_sf_hyperg_2F1_e(a, 1-b, a+1, x, &f); const int stat_beta = gsl_sf_beta_e(a, b, &beta); double prefactor = (pow(x, a) / a); result->val = prefactor * f.val / beta.val; result->err = fabs(prefactor) * f.err/ fabs(beta.val) + fabs(result->val/beta.val) * beta.err; stat = GSL_ERROR_SELECT_2(stat_f, stat_beta); if(stat == GSL_SUCCESS) { CHECK_UNDERFLOW(result); } return stat; } else { gsl_sf_result ln_beta; gsl_sf_result ln_x; gsl_sf_result ln_1mx; gsl_sf_result prefactor; const int stat_ln_beta = gsl_sf_lnbeta_e(a, b, &ln_beta); const int stat_ln_1mx = gsl_sf_log_1plusx_e(-x, &ln_1mx); const int stat_ln_x = gsl_sf_log_e(x, &ln_x); const int stat_ln = GSL_ERROR_SELECT_3(stat_ln_beta, stat_ln_1mx, stat_ln_x); const double ln_pre_val = -ln_beta.val + a * ln_x.val + b * ln_1mx.val; const double ln_pre_err = ln_beta.err + fabs(a*ln_x.err) + fabs(b*ln_1mx.err); const int stat_exp = gsl_sf_exp_err_e(ln_pre_val, ln_pre_err, &prefactor); if(stat_ln != GSL_SUCCESS) { result->val = 0.0; result->err = 0.0; GSL_ERROR ("error", GSL_ESANITY); } if(x < (a + 1.0)/(a+b+2.0)) { /* Apply continued fraction directly. */ gsl_sf_result cf; const int stat_cf = beta_cont_frac(a, b, x, &cf); int stat; result->val = prefactor.val * cf.val / a; result->err = (fabs(prefactor.err * cf.val) + fabs(prefactor.val * cf.err))/a; stat = GSL_ERROR_SELECT_2(stat_exp, stat_cf); if(stat == GSL_SUCCESS) { CHECK_UNDERFLOW(result); } return stat; } else { /* Apply continued fraction after hypergeometric transformation. */ gsl_sf_result cf; const int stat_cf = beta_cont_frac(b, a, 1.0-x, &cf); int stat; const double term = prefactor.val * cf.val / b; result->val = 1.0 - term; result->err = fabs(prefactor.err * cf.val)/b; result->err += fabs(prefactor.val * cf.err)/b; result->err += 2.0 * GSL_DBL_EPSILON * (1.0 + fabs(term)); /* since the prefactor term is subtracted from 1 we need to ignore underflow */ if (stat_exp != GSL_EUNDRFLW) { stat = GSL_ERROR_SELECT_2(stat_exp, stat_cf); } else { stat = stat_cf; }; if(stat == GSL_SUCCESS) { CHECK_UNDERFLOW(result); } return stat; } } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_beta_inc(const double a, const double b, const double x) { EVAL_RESULT(gsl_sf_beta_inc_e(a, b, x, &result)); } gsl/specfunc/hyperg_U.c0000644000175000017500000016146113536674414013477 0ustar eddedd/* specfunc/hyperg_U.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * Copyright (C) 2009, 2010 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include #include #include "error.h" #include "hyperg.h" #define INT_THRESHOLD (1000.0*GSL_DBL_EPSILON) #define SERIES_EVAL_OK(a,b,x) ((fabs(a) < 5 && b < 5 && x < 2.0) || (fabs(a) < 10 && b < 10 && x < 1.0)) #define ASYMP_EVAL_OK(a,b,x) (GSL_MAX_DBL(fabs(a),1.0)*GSL_MAX_DBL(fabs(1.0+a-b),1.0) < 0.99*fabs(x)) /* Log[U(a,2a,x)] * [Abramowitz+stegun, 13.6.21] * Assumes x > 0, a > 1/2. */ static int hyperg_lnU_beq2a(const double a, const double x, gsl_sf_result * result) { const double lx = log(x); const double nu = a - 0.5; const double lnpre = 0.5*(x - M_LNPI) - nu*lx; gsl_sf_result lnK; gsl_sf_bessel_lnKnu_e(nu, 0.5*x, &lnK); result->val = lnpre + lnK.val; result->err = 2.0 * GSL_DBL_EPSILON * (fabs(0.5*x) + 0.5*M_LNPI + fabs(nu*lx)); result->err += lnK.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } /* Evaluate u_{N+1}/u_N by Steed's continued fraction method. * * u_N := Gamma[a+N]/Gamma[a] U(a + N, b, x) * * u_{N+1}/u_N = (a+N) U(a+N+1,b,x)/U(a+N,b,x) */ static int hyperg_U_CF1(const double a, const double b, const int N, const double x, double * result, int * count) { const double RECUR_BIG = GSL_SQRT_DBL_MAX; const int maxiter = 20000; int n = 1; double Anm2 = 1.0; double Bnm2 = 0.0; double Anm1 = 0.0; double Bnm1 = 1.0; double a1 = -(a + N); double b1 = (b - 2.0*a - x - 2.0*(N+1)); double An = b1*Anm1 + a1*Anm2; double Bn = b1*Bnm1 + a1*Bnm2; double an, bn; double fn = An/Bn; while(n < maxiter) { double old_fn; double del; n++; Anm2 = Anm1; Bnm2 = Bnm1; Anm1 = An; Bnm1 = Bn; an = -(a + N + n - b)*(a + N + n - 1.0); bn = (b - 2.0*a - x - 2.0*(N+n)); An = bn*Anm1 + an*Anm2; Bn = bn*Bnm1 + an*Bnm2; if(fabs(An) > RECUR_BIG || fabs(Bn) > RECUR_BIG) { An /= RECUR_BIG; Bn /= RECUR_BIG; Anm1 /= RECUR_BIG; Bnm1 /= RECUR_BIG; Anm2 /= RECUR_BIG; Bnm2 /= RECUR_BIG; } old_fn = fn; fn = An/Bn; del = old_fn/fn; if(fabs(del - 1.0) < 10.0*GSL_DBL_EPSILON) break; } *result = fn; *count = n; if(n == maxiter) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } /* Large x asymptotic for x^a U(a,b,x) * Based on SLATEC D9CHU() [W. Fullerton] * * Uses a rational approximation due to Luke. * See [Luke, Algorithms for the Computation of Special Functions, p. 252] * [Luke, Utilitas Math. (1977)] * * z^a U(a,b,z) ~ 2F0(a,1+a-b,-1/z) * * This assumes that a is not a negative integer and * that 1+a-b is not a negative integer. If one of them * is, then the 2F0 actually terminates, the above * relation is an equality, and the sum should be * evaluated directly [see below]. */ static int d9chu(const double a, const double b, const double x, gsl_sf_result * result) { const double EPS = 8.0 * GSL_DBL_EPSILON; /* EPS = 4.0D0*D1MACH(4) */ const int maxiter = 500; double aa[4], bb[4]; int i; double bp = 1.0 + a - b; double ab = a*bp; double ct2 = 2.0 * (x - ab); double sab = a + bp; double ct3 = sab + 1.0 + ab; double anbn = ct3 + sab + 3.0; double ct1 = 1.0 + 2.0*x/anbn; bb[0] = 1.0; aa[0] = 1.0; bb[1] = 1.0 + 2.0*x/ct3; aa[1] = 1.0 + ct2/ct3; bb[2] = 1.0 + 6.0*ct1*x/ct3; aa[2] = 1.0 + 6.0*ab/anbn + 3.0*ct1*ct2/ct3; for(i=4; ival = aa[3]/bb[3]; result->err = 8.0 * GSL_DBL_EPSILON * fabs(result->val); if(i == maxiter) { GSL_ERROR ("error", GSL_EMAXITER); } else { return GSL_SUCCESS; } } /* Evaluate asymptotic for z^a U(a,b,z) ~ 2F0(a,1+a-b,-1/z) * We check for termination of the 2F0 as a special case. * Assumes x > 0. * Also assumes a,b are not too large compared to x. */ static int hyperg_zaU_asymp(const double a, const double b, const double x, gsl_sf_result *result) { const double ap = a; const double bp = 1.0 + a - b; const double rintap = floor(ap + 0.5); const double rintbp = floor(bp + 0.5); const int ap_neg_int = ( ap < 0.0 && fabs(ap - rintap) < INT_THRESHOLD ); const int bp_neg_int = ( bp < 0.0 && fabs(bp - rintbp) < INT_THRESHOLD ); if(ap_neg_int || bp_neg_int) { /* Evaluate 2F0 polynomial. */ double mxi = -1.0/x; double nmax = -(int)(GSL_MIN(ap,bp) - 0.1); double tn = 1.0; double sum = 1.0; double n = 1.0; double sum_err = 0.0; while(n <= nmax) { double apn = (ap+n-1.0); double bpn = (bp+n-1.0); tn *= ((apn/n)*mxi)*bpn; sum += tn; sum_err += 2.0 * GSL_DBL_EPSILON * fabs(tn); n += 1.0; } result->val = sum; result->err = sum_err; result->err += 2.0 * GSL_DBL_EPSILON * (fabs(nmax)+1.0) * fabs(sum); return GSL_SUCCESS; } else { return d9chu(a,b,x,result); } } /* Evaluate finite sum which appears below. */ static int hyperg_U_finite_sum(int N, double a, double b, double x, double xeps, gsl_sf_result * result) { int i; double sum_val; double sum_err; if(N <= 0) { double t_val = 1.0; double t_err = 0.0; gsl_sf_result poch; int stat_poch; sum_val = 1.0; sum_err = 0.0; for(i=1; i<= -N; i++) { const double xi1 = i - 1; const double mult = (a+xi1)*x/((b+xi1)*(xi1+1.0)); t_val *= mult; t_err += fabs(mult) * t_err + fabs(t_val) * 8.0 * 2.0 * GSL_DBL_EPSILON; sum_val += t_val; sum_err += t_err; } stat_poch = gsl_sf_poch_e(1.0+a-b, -a, &poch); result->val = sum_val * poch.val; result->err = fabs(sum_val) * poch.err + sum_err * fabs(poch.val); result->err += fabs(poch.val) * (fabs(N) + 2.0) * GSL_DBL_EPSILON * fabs(sum_val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); result->err *= 2.0; /* FIXME: fudge factor... why is the error estimate too small? */ return stat_poch; } else { const int M = N - 2; if(M < 0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { gsl_sf_result gbm1; gsl_sf_result gamr; int stat_gbm1; int stat_gamr; double t_val = 1.0; double t_err = 0.0; sum_val = 1.0; sum_err = 0.0; for(i=1; i<=M; i++) { const double mult = (a-b+i)*x/((1.0-b+i)*i); t_val *= mult; t_err += t_err * fabs(mult) + fabs(t_val) * 8.0 * 2.0 * GSL_DBL_EPSILON; sum_val += t_val; sum_err += t_err; } stat_gbm1 = gsl_sf_gamma_e(b-1.0, &gbm1); stat_gamr = gsl_sf_gammainv_e(a, &gamr); if(stat_gbm1 == GSL_SUCCESS) { gsl_sf_result powx1N; int stat_p = gsl_sf_pow_int_e(x, 1-N, &powx1N); double pe_val = powx1N.val * xeps; double pe_err = powx1N.err * fabs(xeps) + 2.0 * GSL_DBL_EPSILON * fabs(pe_val); double coeff_val = gbm1.val * gamr.val * pe_val; double coeff_err = gbm1.err * fabs(gamr.val * pe_val) + gamr.err * fabs(gbm1.val * pe_val) + fabs(gbm1.val * gamr.val) * pe_err + 2.0 * GSL_DBL_EPSILON * fabs(coeff_val); result->val = sum_val * coeff_val; result->err = fabs(sum_val) * coeff_err + sum_err * fabs(coeff_val); result->err += 2.0 * GSL_DBL_EPSILON * (M+2.0) * fabs(result->val); result->err *= 2.0; /* FIXME: fudge factor... why is the error estimate too small? */ return stat_p; } else { result->val = 0.0; result->err = 0.0; return stat_gbm1; } } } } /* Evaluate infinite sum which appears below. */ static int hyperg_U_infinite_sum_stable(int N, double a, double bint, double b, double beps, double x, double xeps, gsl_sf_result sum, gsl_sf_result * result) { const double EPS = 2.0 * GSL_DBL_EPSILON; /* EPS = D1MACH(3) */ int istrt = ( N < 1 ? 1-N : 0 ); double xi = istrt; gsl_sf_result gamr; gsl_sf_result powx; int stat_gamr = gsl_sf_gammainv_e(1.0+a-b, &gamr); int stat_powx = gsl_sf_pow_int_e(x, istrt, &powx); double sarg = beps*M_PI; double sfact = ( sarg != 0.0 ? sarg/sin(sarg) : 1.0 ); double factor_val = sfact * ( GSL_IS_ODD(N) ? -1.0 : 1.0 ) * gamr.val * powx.val; double factor_err = fabs(gamr.val) * powx.err + fabs(powx.val) * gamr.err + 2.0 * GSL_DBL_EPSILON * fabs(factor_val); gsl_sf_result pochai; gsl_sf_result gamri1; gsl_sf_result gamrni; int stat_pochai = gsl_sf_poch_e(a, xi, &pochai); int stat_gamri1 = gsl_sf_gammainv_e(xi + 1.0, &gamri1); int stat_gamrni = gsl_sf_gammainv_e(bint + xi, &gamrni); int stat_gam123 = GSL_ERROR_SELECT_3(stat_gamr, stat_gamri1, stat_gamrni); int stat_gamall = GSL_ERROR_SELECT_3(stat_gam123, stat_pochai, stat_powx); gsl_sf_result pochaxibeps; gsl_sf_result gamrxi1beps; int stat_pochaxibeps = gsl_sf_poch_e(a, xi-beps, &pochaxibeps); int stat_gamrxi1beps = gsl_sf_gammainv_e(xi + 1.0 - beps, &gamrxi1beps); int stat_all = GSL_ERROR_SELECT_3(stat_gamall, stat_pochaxibeps, stat_gamrxi1beps); double b0_val = factor_val * pochaxibeps.val * gamrni.val * gamrxi1beps.val; double b0_err = fabs(factor_val * pochaxibeps.val * gamrni.val) * gamrxi1beps.err + fabs(factor_val * pochaxibeps.val * gamrxi1beps.val) * gamrni.err + fabs(factor_val * gamrni.val * gamrxi1beps.val) * pochaxibeps.err + fabs(pochaxibeps.val * gamrni.val * gamrxi1beps.val) * factor_err + 2.0 * GSL_DBL_EPSILON * fabs(b0_val); /* C X**(-BEPS) IS VERY DIFFERENT FROM 1.0, SO THE C STRAIGHTFORWARD FORMULATION IS STABLE. */ int i; double dchu_val; double dchu_err; double t_val; double t_err; gsl_sf_result dgamrbxi; int stat_dgamrbxi = gsl_sf_gammainv_e(b+xi, &dgamrbxi); double a0_val = factor_val * pochai.val * dgamrbxi.val * gamri1.val / beps; double a0_err = fabs(factor_val * pochai.val * dgamrbxi.val / beps) * gamri1.err + fabs(factor_val * pochai.val * gamri1.val / beps) * dgamrbxi.err + fabs(factor_val * dgamrbxi.val * gamri1.val / beps) * pochai.err + fabs(pochai.val * dgamrbxi.val * gamri1.val / beps) * factor_err + 2.0 * GSL_DBL_EPSILON * fabs(a0_val); stat_all = GSL_ERROR_SELECT_2(stat_all, stat_dgamrbxi); b0_val = xeps * b0_val / beps; b0_err = fabs(xeps / beps) * b0_err + 4.0 * GSL_DBL_EPSILON * fabs(b0_val); dchu_val = sum.val + a0_val - b0_val; dchu_err = sum.err + a0_err + b0_err + 2.0 * GSL_DBL_EPSILON * (fabs(sum.val) + fabs(a0_val) + fabs(b0_val)); for(i=1; i<2000; i++) { double xi = istrt + i; double xi1 = istrt + i - 1; double a0_multiplier = (a+xi1)*x/((b+xi1)*xi); double b0_multiplier = (a+xi1-beps)*x/((bint+xi1)*(xi-beps)); a0_val *= a0_multiplier; a0_err += fabs(a0_multiplier) * a0_err; b0_val *= b0_multiplier; b0_err += fabs(b0_multiplier) * b0_err; t_val = a0_val - b0_val; t_err = a0_err + b0_err; dchu_val += t_val; dchu_err += t_err; if(fabs(t_val) < EPS*fabs(dchu_val)) break; } result->val = dchu_val; result->err = 2.0 * dchu_err; result->err += 2.0 * fabs(t_val); result->err += 4.0 * GSL_DBL_EPSILON * (i+2.0) * fabs(dchu_val); result->err *= 2.0; /* FIXME: fudge factor */ if(i >= 2000) { GSL_ERROR ("error", GSL_EMAXITER); } else { return stat_all; } } static int hyperg_U_infinite_sum_simple(int N, double a, double bint, double b, double beps, double x, double xeps, gsl_sf_result sum, gsl_sf_result * result) { const double EPS = 2.0 * GSL_DBL_EPSILON; /* EPS = D1MACH(3) */ int istrt = ( N < 1 ? 1-N : 0 ); double xi = istrt; gsl_sf_result powx; int stat_powx = gsl_sf_pow_int_e(x, istrt, &powx); double sarg = beps*M_PI; double sfact = ( sarg != 0.0 ? sarg/sin(sarg) : 1.0 ); double factor_val = sfact * ( GSL_IS_ODD(N) ? -1.0 : 1.0 ) * powx.val; double factor_err = fabs(powx.err) + 2.0 * GSL_DBL_EPSILON * fabs(factor_val); gsl_sf_result pochai; gsl_sf_result gamri1; gsl_sf_result gamrni; int stat_pochai = gsl_sf_poch_e(a, xi, &pochai); int stat_gamri1 = gsl_sf_gammainv_e(xi + 1.0, &gamri1); int stat_gamrni = gsl_sf_gammainv_e(bint + xi, &gamrni); int stat_gam123 = GSL_ERROR_SELECT_2(stat_gamri1, stat_gamrni); int stat_gamall = GSL_ERROR_SELECT_3(stat_gam123, stat_pochai, stat_powx); gsl_sf_result pochaxibeps; gsl_sf_result gamrxi1beps; int stat_pochaxibeps = gsl_sf_poch_e(a, xi-beps, &pochaxibeps); int stat_gamrxi1beps = gsl_sf_gammainv_e(xi + 1.0 - beps, &gamrxi1beps); int stat_all = GSL_ERROR_SELECT_3(stat_gamall, stat_pochaxibeps, stat_gamrxi1beps); double X = sfact * ( GSL_IS_ODD(N) ? -1.0 : 1.0 ) * powx.val * gsl_sf_poch(1 + a - b, xi - 1 + b - beps) * gsl_sf_gammainv(a); double b0_val = X * gamrni.val * gamrxi1beps.val; double b0_err = fabs(factor_val * pochaxibeps.val * gamrni.val) * gamrxi1beps.err + fabs(factor_val * pochaxibeps.val * gamrxi1beps.val) * gamrni.err + fabs(factor_val * gamrni.val * gamrxi1beps.val) * pochaxibeps.err + fabs(pochaxibeps.val * gamrni.val * gamrxi1beps.val) * factor_err + 2.0 * GSL_DBL_EPSILON * fabs(b0_val); /* C X**(-BEPS) IS VERY DIFFERENT FROM 1.0, SO THE C STRAIGHTFORWARD FORMULATION IS STABLE. */ int i; double dchu_val; double dchu_err; double t_val; double t_err; gsl_sf_result gamr; gsl_sf_result dgamrbxi; int stat_gamr = gsl_sf_gammainv_e(1.0+a-b, &gamr); int stat_dgamrbxi = gsl_sf_gammainv_e(b+xi, &dgamrbxi); double a0_val = factor_val * gamr.val * pochai.val * dgamrbxi.val * gamri1.val / beps; double a0_err = fabs(factor_val * pochai.val * dgamrbxi.val * gamri1.val / beps) * gamr.err + fabs(factor_val * gamr.val * dgamrbxi.val * gamri1.val / beps) * pochai.err + fabs(factor_val * gamr.val * pochai.val * gamri1.val / beps) * dgamrbxi.err + fabs(factor_val * gamr.val * pochai.val * dgamrbxi.val / beps) * gamri1.err + fabs(pochai.val * gamr.val * dgamrbxi.val * gamri1.val / beps) * factor_err + 2.0 * GSL_DBL_EPSILON * fabs(a0_val); stat_all = GSL_ERROR_SELECT_3(stat_all, stat_gamr, stat_dgamrbxi); b0_val = xeps * b0_val / beps; b0_err = fabs(xeps / beps) * b0_err + 4.0 * GSL_DBL_EPSILON * fabs(b0_val); dchu_val = sum.val + a0_val - b0_val; dchu_err = sum.err + a0_err + b0_err + 2.0 * GSL_DBL_EPSILON * (fabs(sum.val) + fabs(a0_val) + fabs(b0_val)); for(i=1; i<2000; i++) { double xi = istrt + i; double xi1 = istrt + i - 1; double a0_multiplier = (a+xi1)*x/((b+xi1)*xi); double b0_multiplier = (a+xi1-beps)*x/((bint+xi1)*(xi-beps)); a0_val *= a0_multiplier; a0_err += fabs(a0_multiplier) * a0_err; b0_val *= b0_multiplier; b0_err += fabs(b0_multiplier) * b0_err; t_val = a0_val - b0_val; t_err = a0_err + b0_err; dchu_val += t_val; dchu_err += t_err; if(!gsl_finite(t_val) || fabs(t_val) < EPS*fabs(dchu_val)) break; } result->val = dchu_val; result->err = 2.0 * dchu_err; result->err += 2.0 * fabs(t_val); result->err += 4.0 * GSL_DBL_EPSILON * (i+2.0) * fabs(dchu_val); result->err *= 2.0; /* FIXME: fudge factor */ if(i >= 2000) { GSL_ERROR ("error", GSL_EMAXITER); } else { return stat_all; } } static int hyperg_U_infinite_sum_improved(int N, double a, double bint, double b, double beps, double x, double xeps, gsl_sf_result sum, gsl_sf_result * result) { const double EPS = 2.0 * GSL_DBL_EPSILON; /* EPS = D1MACH(3) */ const double lnx = log(x); int istrt = ( N < 1 ? 1-N : 0 ); double xi = istrt; gsl_sf_result gamr; gsl_sf_result powx; int stat_gamr = gsl_sf_gammainv_e(1.0+a-b, &gamr); int stat_powx = gsl_sf_pow_int_e(x, istrt, &powx); double sarg = beps*M_PI; double sfact = ( sarg != 0.0 ? sarg/sin(sarg) : 1.0 ); double factor_val = sfact * ( GSL_IS_ODD(N) ? -1.0 : 1.0 ) * gamr.val * powx.val; double factor_err = fabs(gamr.val) * powx.err + fabs(powx.val) * gamr.err + 2.0 * GSL_DBL_EPSILON * fabs(factor_val); gsl_sf_result pochai; gsl_sf_result gamri1; gsl_sf_result gamrni; int stat_pochai = gsl_sf_poch_e(a, xi, &pochai); int stat_gamri1 = gsl_sf_gammainv_e(xi + 1.0, &gamri1); int stat_gamrni = gsl_sf_gammainv_e(bint + xi, &gamrni); int stat_gam123 = GSL_ERROR_SELECT_3(stat_gamr, stat_gamri1, stat_gamrni); int stat_gamall = GSL_ERROR_SELECT_3(stat_gam123, stat_pochai, stat_powx); gsl_sf_result pochaxibeps; gsl_sf_result gamrxi1beps; int stat_pochaxibeps = gsl_sf_poch_e(a, xi-beps, &pochaxibeps); int stat_gamrxi1beps = gsl_sf_gammainv_e(xi + 1.0 - beps, &gamrxi1beps); int stat_all = GSL_ERROR_SELECT_3(stat_gamall, stat_pochaxibeps, stat_gamrxi1beps); double b0_val = factor_val * pochaxibeps.val * gamrni.val * gamrxi1beps.val; double b0_err = fabs(factor_val * pochaxibeps.val * gamrni.val) * gamrxi1beps.err + fabs(factor_val * pochaxibeps.val * gamrxi1beps.val) * gamrni.err + fabs(factor_val * gamrni.val * gamrxi1beps.val) * pochaxibeps.err + fabs(pochaxibeps.val * gamrni.val * gamrxi1beps.val) * factor_err + 2.0 * GSL_DBL_EPSILON * fabs(b0_val); /* C X**(-BEPS) IS CLOSE TO 1.0D0, SO WE MUST BE C CAREFUL IN EVALUATING THE DIFFERENCES. */ int i; gsl_sf_result pch1ai; gsl_sf_result pch1i; gsl_sf_result poch1bxibeps; int stat_pch1ai = gsl_sf_pochrel_e(a + xi, -beps, &pch1ai); int stat_pch1i = gsl_sf_pochrel_e(xi + 1.0 - beps, beps, &pch1i); int stat_poch1bxibeps = gsl_sf_pochrel_e(b+xi, -beps, &poch1bxibeps); double c0_t1_val = beps*pch1ai.val*pch1i.val; double c0_t1_err = fabs(beps) * fabs(pch1ai.val) * pch1i.err + fabs(beps) * fabs(pch1i.val) * pch1ai.err + 2.0 * GSL_DBL_EPSILON * fabs(c0_t1_val); double c0_t2_val = -poch1bxibeps.val + pch1ai.val - pch1i.val + c0_t1_val; double c0_t2_err = poch1bxibeps.err + pch1ai.err + pch1i.err + c0_t1_err + 2.0 * GSL_DBL_EPSILON * fabs(c0_t2_val); double c0_val = factor_val * pochai.val * gamrni.val * gamri1.val * c0_t2_val; double c0_err = fabs(factor_val * pochai.val * gamrni.val * gamri1.val) * c0_t2_err + fabs(factor_val * pochai.val * gamrni.val * c0_t2_val) * gamri1.err + fabs(factor_val * pochai.val * gamri1.val * c0_t2_val) * gamrni.err + fabs(factor_val * gamrni.val * gamri1.val * c0_t2_val) * pochai.err + fabs(pochai.val * gamrni.val * gamri1.val * c0_t2_val) * factor_err + 2.0 * GSL_DBL_EPSILON * fabs(c0_val); /* C XEPS1 = (1.0 - X**(-BEPS))/BEPS = (X**(-BEPS) - 1.0)/(-BEPS) */ gsl_sf_result dexprl; int stat_dexprl = gsl_sf_exprel_e(-beps*lnx, &dexprl); double xeps1_val = lnx * dexprl.val; double xeps1_err = 2.0 * GSL_DBL_EPSILON * (1.0 + fabs(beps*lnx)) * fabs(dexprl.val) + fabs(lnx) * dexprl.err + 2.0 * GSL_DBL_EPSILON * fabs(xeps1_val); double dchu_val = sum.val + c0_val + xeps1_val*b0_val; double dchu_err = sum.err + c0_err + fabs(xeps1_val)*b0_err + xeps1_err * fabs(b0_val) + fabs(b0_val*lnx)*dexprl.err + 2.0 * GSL_DBL_EPSILON * (fabs(sum.val) + fabs(c0_val) + fabs(xeps1_val*b0_val)); double xn = N; double t_val; double t_err; stat_all = GSL_ERROR_SELECT_5(stat_all, stat_dexprl, stat_poch1bxibeps, stat_pch1i, stat_pch1ai); for(i=1; i<2000; i++) { const double xi = istrt + i; const double xi1 = istrt + i - 1; const double tmp = (a-1.0)*(xn+2.0*xi-1.0) + xi*(xi-beps); const double b0_multiplier = (a+xi1-beps)*x/((xn+xi1)*(xi-beps)); const double c0_multiplier_1 = (a+xi1)*x/((b+xi1)*xi); const double c0_multiplier_2 = tmp / (xi*(b+xi1)*(a+xi1-beps)); b0_val *= b0_multiplier; b0_err += fabs(b0_multiplier) * b0_err + fabs(b0_val) * 8.0 * 2.0 * GSL_DBL_EPSILON; c0_val = c0_multiplier_1 * c0_val - c0_multiplier_2 * b0_val; c0_err = fabs(c0_multiplier_1) * c0_err + fabs(c0_multiplier_2) * b0_err + fabs(c0_val) * 8.0 * 2.0 * GSL_DBL_EPSILON + fabs(b0_val * c0_multiplier_2) * 16.0 * 2.0 * GSL_DBL_EPSILON; t_val = c0_val + xeps1_val*b0_val; t_err = c0_err + fabs(xeps1_val)*b0_err; t_err += fabs(b0_val*lnx) * dexprl.err; t_err += fabs(b0_val)*xeps1_err; dchu_val += t_val; dchu_err += t_err; if(fabs(t_val) < EPS*fabs(dchu_val)) break; } result->val = dchu_val; result->err = 2.0 * dchu_err; result->err += 2.0 * fabs(t_val); result->err += 4.0 * GSL_DBL_EPSILON * (i+2.0) * fabs(dchu_val); result->err *= 2.0; /* FIXME: fudge factor */ if(i >= 2000) { GSL_ERROR ("error", GSL_EMAXITER); } else { return stat_all; } } /* Based on SLATEC DCHU() [W. Fullerton] * Assumes x > 0. * This is just a series summation method, and * it is not good for large a. * * I patched up the window for 1+a-b near zero. [GJ] */ static int hyperg_U_series(const double a, const double b, const double x, gsl_sf_result * result) { const double SQRT_EPS = M_SQRT2 * GSL_SQRT_DBL_EPSILON; double bint = ( b < 0.0 ? ceil(b-0.5) : floor(b+0.5) ); double beps = b - bint; double a_beps = a - beps; double r_a_beps = floor(a_beps + 0.5); double a_beps_int = ( fabs(a_beps - r_a_beps) < INT_THRESHOLD ); /* double a_b_1 = a-b+1; double r_a_b_1 = floor(a_b_1+0.5); double r_a_b_1_int = (fabs(a_b_1-r_a_b_1)< INT_THRESHOLD); Check for (a-beps) being a member of -N; N being 0,1,... */ if (a_beps_int && a_beps <= 0) { beps=beps - 1 + floor(a_beps);bint=bint + 1 - floor(a_beps); } if(fabs(1.0 + a - b) < SQRT_EPS) { /* Original Comment: ALGORITHM IS BAD WHEN 1+A-B IS NEAR ZERO FOR SMALL X */ /* We can however do the following: * U(a,b,x) = U(a,a+1,x) when 1+a-b=0 * and U(a,a+1,x) = x^(-a). */ double lnr = -a * log(x); int stat_e = gsl_sf_exp_e(lnr, result); result->err += 2.0 * SQRT_EPS * fabs(result->val); return stat_e; } else { int N = (int) bint; double lnx = log(x); double xeps = exp(-beps*lnx); /* Evaluate finite sum. */ gsl_sf_result sum; int stat_sum = hyperg_U_finite_sum(N, a, b, x, xeps, &sum); int stat_inf; /* Evaluate infinite sum. */ if(fabs(xeps-1.0) > 0.5 ) { stat_inf = hyperg_U_infinite_sum_stable(N, a, bint, b, beps, x, xeps, sum, result); } else if (1+a-b < 0 && 1+a-b==floor(1+a-b) && beps != 0) { stat_inf = hyperg_U_infinite_sum_simple(N, a, bint, b, beps, x, xeps, sum, result); } else { stat_inf = hyperg_U_infinite_sum_improved(N, a, bint, b, beps, x, xeps, sum, result); } return GSL_ERROR_SELECT_2(stat_sum, stat_inf); } } /* Assumes b > 0 and x > 0. */ static int hyperg_U_small_ab(const double a, const double b, const double x, gsl_sf_result * result) { if(a == -1.0) { /* U(-1,c+1,x) = Laguerre[c,0,x] = -b + x */ result->val = -b + x; result->err = 2.0 * GSL_DBL_EPSILON * (fabs(b) + fabs(x)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(a == 0.0) { /* U(0,c+1,x) = Laguerre[c,0,x] = 1 */ result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(ASYMP_EVAL_OK(a,b,x)) { double p = pow(x, -a); gsl_sf_result asymp; int stat_asymp = hyperg_zaU_asymp(a, b, x, &asymp); result->val = asymp.val * p; result->err = asymp.err * p; result->err += fabs(asymp.val) * GSL_DBL_EPSILON * fabs(a) * p; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_asymp; } else { return hyperg_U_series(a, b, x, result); } } /* Assumes b > 0 and x > 0. */ static int hyperg_U_small_a_bgt0(const double a, const double b, const double x, gsl_sf_result * result, double * ln_multiplier ) { if(a == 0.0) { result->val = 1.0; result->err = 0.0; *ln_multiplier = 0.0; return GSL_SUCCESS; } else if( (b > 5000.0 && x < 0.90 * fabs(b)) || (b > 500.0 && x < 0.50 * fabs(b)) ) { int stat = gsl_sf_hyperg_U_large_b_e(a, b, x, result, ln_multiplier); if(stat == GSL_EOVRFLW) return GSL_SUCCESS; else return stat; } else if(b > 15.0) { /* Recurse up from b near 1. */ double eps = b - floor(b); double b0 = 1.0 + eps; gsl_sf_result r_Ubm1; gsl_sf_result r_Ub; int stat_0 = hyperg_U_small_ab(a, b0, x, &r_Ubm1); int stat_1 = hyperg_U_small_ab(a, b0+1.0, x, &r_Ub); double Ubm1 = r_Ubm1.val; double Ub = r_Ub.val; double Ubp1; double bp; for(bp = b0+1.0; bpval = Ub; result->err = (fabs(r_Ubm1.err/r_Ubm1.val) + fabs(r_Ub.err/r_Ub.val)) * fabs(Ub); result->err += 2.0 * GSL_DBL_EPSILON * (fabs(b-b0)+1.0) * fabs(Ub); *ln_multiplier = 0.0; return GSL_ERROR_SELECT_2(stat_0, stat_1); } else { *ln_multiplier = 0.0; return hyperg_U_small_ab(a, b, x, result); } } /* We use this to keep track of large * dynamic ranges in the recursions. * This can be important because sometimes * we want to calculate a very large and * a very small number and the answer is * the product, of order 1. This happens, * for instance, when we apply a Kummer * transform to make b positive and * both x and b are large. */ #define RESCALE_2(u0,u1,factor,count) \ do { \ double au0 = fabs(u0); \ if(au0 > factor) { \ u0 /= factor; \ u1 /= factor; \ count++; \ } \ else if(au0 < 1.0/factor) { \ u0 *= factor; \ u1 *= factor; \ count--; \ } \ } while (0) /* Specialization to b >= 1, for integer parameters. * Assumes x > 0. */ static int hyperg_U_int_bge1(const int a, const int b, const double x, gsl_sf_result_e10 * result) { if(a == 0) { result->val = 1.0; result->err = 0.0; result->e10 = 0; return GSL_SUCCESS; } else if(a == -1) { result->val = -b + x; result->err = 2.0 * GSL_DBL_EPSILON * (fabs(b) + fabs(x)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); result->e10 = 0; return GSL_SUCCESS; } else if(b == a + 1) { /* U(a,a+1,x) = x^(-a) */ return gsl_sf_exp_e10_e(-a*log(x), result); } else if(ASYMP_EVAL_OK(a,b,x)) { const double ln_pre_val = -a*log(x); const double ln_pre_err = 2.0 * GSL_DBL_EPSILON * fabs(ln_pre_val); gsl_sf_result asymp; int stat_asymp = hyperg_zaU_asymp(a, b, x, &asymp); int stat_e = gsl_sf_exp_mult_err_e10_e(ln_pre_val, ln_pre_err, asymp.val, asymp.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_asymp); } else if(SERIES_EVAL_OK(a,b,x) && 1 + a - b > 0) { gsl_sf_result ser; const int stat_ser = hyperg_U_series(a, b, x, &ser); result->val = ser.val; result->err = ser.err; result->e10 = 0; return stat_ser; } else if(a < 0) { /* Recurse backward from a = -1,0. */ int scale_count = 0; const double scale_factor = GSL_SQRT_DBL_MAX; gsl_sf_result lnm; gsl_sf_result y; double lnscale; double Uap1 = 1.0; /* U(0,b,x) */ double Ua = -b + x; /* U(-1,b,x) */ double Uam1; int ap; for(ap=-1; ap>a; ap--) { Uam1 = ap*(b-ap-1.0)*Uap1 + (x+2.0*ap-b)*Ua; Uap1 = Ua; Ua = Uam1; RESCALE_2(Ua,Uap1,scale_factor,scale_count); } lnscale = log(scale_factor); lnm.val = scale_count*lnscale; lnm.err = 2.0 * GSL_DBL_EPSILON * fabs(lnm.val); y.val = Ua; y.err = 4.0 * GSL_DBL_EPSILON * (fabs(a)+1.0) * fabs(Ua); return gsl_sf_exp_mult_err_e10_e(lnm.val, lnm.err, y.val, y.err, result); } else if(b >= 2.0*a + x) { /* Recurse forward from a = 0,1. */ int scale_count = 0; const double scale_factor = GSL_SQRT_DBL_MAX; gsl_sf_result r_Ua; gsl_sf_result lnm; gsl_sf_result y; double lnscale; double lm; int stat_1 = hyperg_U_small_a_bgt0(1.0, b, x, &r_Ua, &lm); /* U(1,b,x) */ int stat_e; double Uam1 = 1.0; /* U(0,b,x) */ double Ua = r_Ua.val; double Uap1; int ap; Uam1 *= exp(-lm); for(ap=1; apa_target; ap--) { Uam1 = -((b-2.0*ap-x)*Ua + ap*(1.0+ap-b)*Uap1); Uap1 = Ua; Ua = Uam1; RESCALE_2(Ua,Uap1,scale_factor,scale_count); } if(Ua == 0.0) { result->val = 0.0; result->err = 0.0; result->e10 = 0; GSL_ERROR ("error", GSL_EZERODIV); } else { double lnscl = -scale_count*log(scale_factor); double lnpre_val = lnU_target + lnscl; double lnpre_err = 2.0 * GSL_DBL_EPSILON * (fabs(lnU_target) + fabs(lnscl)); double oUa_err = 2.0 * (fabs(a_target-a) + CF1_count + 1.0) * GSL_DBL_EPSILON * fabs(1.0/Ua); int stat_e = gsl_sf_exp_mult_err_e10_e(lnpre_val, lnpre_err, 1.0/Ua, oUa_err, result); return GSL_ERROR_SELECT_2(stat_e, stat_CF1); } } else { /* Recurse backward to near the b=2a+x line, then * determine normalization by either direct evaluation * or by a forward recursion. The direct evaluation * is needed when x is small (which is precisely * when it is easy to do). */ const double scale_factor = GSL_SQRT_DBL_MAX; int scale_count_for = 0; int scale_count_bck = 0; int a0 = 1; int a1 = a0 + ceil(0.5*(b-x) - a0); double Ua1_bck_val; double Ua1_bck_err; double Ua1_for_val; double Ua1_for_err; int stat_for; int stat_bck; gsl_sf_result lm_for; { /* Recurse back to determine U(a1,b), sans normalization. */ double ru; int CF1_count; int stat_CF1 = hyperg_U_CF1(a, b, 0, x, &ru, &CF1_count); double Ua = 1.0; double Uap1 = ru/a * Ua; double Uam1; int ap; for(ap=a; ap>a1; ap--) { Uam1 = -((b-2.0*ap-x)*Ua + ap*(1.0+ap-b)*Uap1); Uap1 = Ua; Ua = Uam1; RESCALE_2(Ua,Uap1,scale_factor,scale_count_bck); } Ua1_bck_val = Ua; Ua1_bck_err = 2.0 * GSL_DBL_EPSILON * (fabs(a1-a)+CF1_count+1.0) * fabs(Ua); stat_bck = stat_CF1; } if(b == 2*a1 && a1 > 1) { /* This can happen when x is small, which is * precisely when we need to be careful with * this evaluation. */ hyperg_lnU_beq2a((double)a1, x, &lm_for); Ua1_for_val = 1.0; Ua1_for_err = 0.0; stat_for = GSL_SUCCESS; } else if(b == 2*a1 - 1 && a1 > 1) { /* Similar to the above. Happens when x is small. * Use * U(a,2a-1) = (x U(a,2a) - U(a-1,2(a-1))) / (2a - 2) */ gsl_sf_result lnU00, lnU12; gsl_sf_result U00, U12; hyperg_lnU_beq2a(a1-1.0, x, &lnU00); hyperg_lnU_beq2a(a1, x, &lnU12); if(lnU00.val > lnU12.val) { lm_for.val = lnU00.val; lm_for.err = lnU00.err; U00.val = 1.0; U00.err = 0.0; gsl_sf_exp_err_e(lnU12.val - lm_for.val, lnU12.err + lm_for.err, &U12); } else { lm_for.val = lnU12.val; lm_for.err = lnU12.err; U12.val = 1.0; U12.err = 0.0; gsl_sf_exp_err_e(lnU00.val - lm_for.val, lnU00.err + lm_for.err, &U00); } Ua1_for_val = (x * U12.val - U00.val) / (2.0*a1 - 2.0); Ua1_for_err = (fabs(x)*U12.err + U00.err) / fabs(2.0*a1 - 2.0); Ua1_for_err += 2.0 * GSL_DBL_EPSILON * fabs(Ua1_for_val); stat_for = GSL_SUCCESS; } else { /* Recurse forward to determine U(a1,b) with * absolute normalization. */ gsl_sf_result r_Ua; double Uam1 = 1.0; /* U(a0-1,b,x) = U(0,b,x) */ double Ua; double Uap1; int ap; double lm_for_local; stat_for = hyperg_U_small_a_bgt0(a0, b, x, &r_Ua, &lm_for_local); /* U(1,b,x) */ Ua = r_Ua.val; Uam1 *= exp(-lm_for_local); lm_for.val = lm_for_local; lm_for.err = 0.0; for(ap=a0; apval = 0.0; result->err = 0.0; result->e10 = 0; GSL_ERROR ("error", GSL_EZERODIV); } else if(Ua1_for_val == 0.0) { /* Should never happen. */ UNDERFLOW_ERROR_E10(result); } else { double lns = (scale_count_for - scale_count_bck)*log(scale_factor); double ln_for_val = log(fabs(Ua1_for_val)); double ln_for_err = GSL_DBL_EPSILON + fabs(Ua1_for_err/Ua1_for_val); double ln_bck_val = log(fabs(Ua1_bck_val)); double ln_bck_err = GSL_DBL_EPSILON + fabs(Ua1_bck_err/Ua1_bck_val); double lnr_val = lm_for.val + ln_for_val - ln_bck_val + lns; double lnr_err = lm_for.err + ln_for_err + ln_bck_err + 2.0 * GSL_DBL_EPSILON * (fabs(lm_for.val) + fabs(ln_for_val) + fabs(ln_bck_val) + fabs(lns)); double sgn = GSL_SIGN(Ua1_for_val) * GSL_SIGN(Ua1_bck_val); int stat_e = gsl_sf_exp_err_e10_e(lnr_val, lnr_err, result); result->val *= sgn; return GSL_ERROR_SELECT_3(stat_e, stat_bck, stat_for); } } } } /* Handle b >= 1 for generic a,b values. */ static int hyperg_U_bge1(const double a, const double b, const double x, gsl_sf_result_e10 * result) { const double rinta = floor(a+0.5); const int a_neg_integer = (a < 0.0 && fabs(a - rinta) < INT_THRESHOLD); if(a == 0.0) { result->val = 1.0; result->err = 0.0; result->e10 = 0; return GSL_SUCCESS; } else if(a_neg_integer && fabs(rinta) < INT_MAX) { /* U(-n,b,x) = (-1)^n n! Laguerre[n,b-1,x] */ const int n = -(int)rinta; const double sgn = (GSL_IS_ODD(n) ? -1.0 : 1.0); gsl_sf_result lnfact; gsl_sf_result L; const int stat_L = gsl_sf_laguerre_n_e(n, b-1.0, x, &L); gsl_sf_lnfact_e(n, &lnfact); { const int stat_e = gsl_sf_exp_mult_err_e10_e(lnfact.val, lnfact.err, sgn*L.val, L.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_L); } } else if(ASYMP_EVAL_OK(a,b,x)) { const double ln_pre_val = -a*log(x); const double ln_pre_err = 2.0 * GSL_DBL_EPSILON * fabs(ln_pre_val); gsl_sf_result asymp; int stat_asymp = hyperg_zaU_asymp(a, b, x, &asymp); int stat_e = gsl_sf_exp_mult_err_e10_e(ln_pre_val, ln_pre_err, asymp.val, asymp.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_asymp); } else if(fabs(a) <= 1.0) { gsl_sf_result rU; double ln_multiplier; int stat_U = hyperg_U_small_a_bgt0(a, b, x, &rU, &ln_multiplier); int stat_e = gsl_sf_exp_mult_err_e10_e(ln_multiplier, 2.0*GSL_DBL_EPSILON*fabs(ln_multiplier), rU.val, rU.err, result); return GSL_ERROR_SELECT_2(stat_U, stat_e); } else if(SERIES_EVAL_OK(a,b,x)) { gsl_sf_result ser; const int stat_ser = hyperg_U_series(a, b, x, &ser); result->val = ser.val; result->err = ser.err; result->e10 = 0; return stat_ser; } else if(a < 0.0) { /* Recurse backward on a and then upward on b. */ const double scale_factor = GSL_SQRT_DBL_MAX; const double a0 = a - floor(a) - 1.0; const double b0 = b - floor(b) + 1.0; int scale_count = 0; double lm_0, lm_1; double lm_max; gsl_sf_result r_Uap1; gsl_sf_result r_Ua; int stat_0 = hyperg_U_small_a_bgt0(a0+1.0, b0, x, &r_Uap1, &lm_0); int stat_1 = hyperg_U_small_a_bgt0(a0, b0, x, &r_Ua, &lm_1); int stat_e; double Uap1 = r_Uap1.val; double Ua = r_Ua.val; double Uam1; double ap; lm_max = GSL_MAX(lm_0, lm_1); Uap1 *= exp(lm_0-lm_max); Ua *= exp(lm_1-lm_max); /* Downward recursion on a. */ for(ap=a0; ap>a+0.1; ap -= 1.0) { Uam1 = ap*(b0-ap-1.0)*Uap1 + (x+2.0*ap-b0)*Ua; Uap1 = Ua; Ua = Uam1; RESCALE_2(Ua,Uap1,scale_factor,scale_count); } if(b < 2.0) { /* b == b0, so no recursion necessary */ const double lnscale = log(scale_factor); gsl_sf_result lnm; gsl_sf_result y; lnm.val = lm_max + scale_count * lnscale; lnm.err = 2.0 * GSL_DBL_EPSILON * (fabs(lm_max) + scale_count * fabs(lnscale)); y.val = Ua; y.err = fabs(r_Uap1.err/r_Uap1.val) * fabs(Ua); y.err += fabs(r_Ua.err/r_Ua.val) * fabs(Ua); y.err += 2.0 * GSL_DBL_EPSILON * (fabs(a-a0) + 1.0) * fabs(Ua); y.err *= fabs(lm_0-lm_max) + 1.0; y.err *= fabs(lm_1-lm_max) + 1.0; stat_e = gsl_sf_exp_mult_err_e10_e(lnm.val, lnm.err, y.val, y.err, result); } else { /* Upward recursion on b. */ const double err_mult = fabs(b-b0) + fabs(a-a0) + 1.0; const double lnscale = log(scale_factor); gsl_sf_result lnm; gsl_sf_result y; double Ubm1 = Ua; /* U(a,b0) */ double Ub = (a*(b0-a-1.0)*Uap1 + (a+x)*Ua)/x; /* U(a,b0+1) */ double Ubp1; double bp; for(bp=b0+1.0; bp= 2*a + x) { /* Recurse forward from a near zero. * Note that we cannot cross the singularity at * the line b=a+1, because the only way we could * be in that little wedge is if a < 1. But we * have already dealt with the small a case. */ int scale_count = 0; const double a0 = a - floor(a); const double scale_factor = GSL_SQRT_DBL_MAX; double lnscale; double lm_0, lm_1, lm_max; gsl_sf_result r_Uam1; gsl_sf_result r_Ua; int stat_0 = hyperg_U_small_a_bgt0(a0-1.0, b, x, &r_Uam1, &lm_0); int stat_1 = hyperg_U_small_a_bgt0(a0, b, x, &r_Ua, &lm_1); int stat_e; gsl_sf_result lnm; gsl_sf_result y; double Uam1 = r_Uam1.val; double Ua = r_Ua.val; double Uap1; double ap; lm_max = GSL_MAX(lm_0, lm_1); Uam1 *= exp(lm_0-lm_max); Ua *= exp(lm_1-lm_max); for(ap=a0; apa0+0.1; ap -= 1.0) { Uam1 = -((b-2.0*ap-x)*Ua + ap*(1.0+ap-b)*Uap1); Uap1 = Ua; Ua = Uam1; RESCALE_2(Ua,Uap1,scale_factor,scale_count); } stat_U0 = hyperg_U_small_a_bgt0(a0, b, x, &U0, &lm_0); lnscale = log(scale_factor); lnm.val = lm_0 - scale_count * lnscale; lnm.err = 2.0 * GSL_DBL_EPSILON * (fabs(lm_0) + fabs(scale_count * lnscale)); y.val = GSL_SQRT_DBL_MIN*(U0.val/Ua); y.err = GSL_SQRT_DBL_MIN*(U0.err/fabs(Ua)); y.err += 2.0 * GSL_DBL_EPSILON * (fabs(a0-a) + CF1_count + 1.0) * fabs(y.val); stat_e = gsl_sf_exp_mult_err_e10_e(lnm.val, lnm.err, y.val, y.err, result); return GSL_ERROR_SELECT_3(stat_e, stat_U0, stat_CF1); } else { /* Recurse backward to near the b=2a+x line, then * forward from a near zero to get the normalization. */ int scale_count_for = 0; int scale_count_bck = 0; const double scale_factor = GSL_SQRT_DBL_MAX; const double eps = a - floor(a); const double a0 = ( eps == 0.0 ? 1.0 : eps ); const double a1 = a0 + ceil(0.5*(b-x) - a0); gsl_sf_result lnm; gsl_sf_result y; double lm_for; double lnscale; double Ua1_bck; double Ua1_for; int stat_for; int stat_bck; int stat_e; int CF1_count; { /* Recurse back to determine U(a1,b), sans normalization. */ double Uap1; double Ua; double Uam1; double ap; double ru; double r; int stat_CF1 = hyperg_U_CF1(a, b, 0, x, &ru, &CF1_count); r = ru/a; Ua = GSL_SQRT_DBL_MIN; Uap1 = r * Ua; for(ap=a; ap>a1+0.1; ap -= 1.0) { Uam1 = -((b-2.0*ap-x)*Ua + ap*(1.0+ap-b)*Uap1); Uap1 = Ua; Ua = Uam1; RESCALE_2(Ua,Uap1,scale_factor,scale_count_bck); } Ua1_bck = Ua; stat_bck = stat_CF1; } { /* Recurse forward to determine U(a1,b) with * absolute normalization. */ gsl_sf_result r_Uam1; gsl_sf_result r_Ua; double lm_0, lm_1; int stat_0 = hyperg_U_small_a_bgt0(a0-1.0, b, x, &r_Uam1, &lm_0); int stat_1 = hyperg_U_small_a_bgt0(a0, b, x, &r_Ua, &lm_1); double Uam1 = r_Uam1.val; double Ua = r_Ua.val; double Uap1; double ap; lm_for = GSL_MAX(lm_0, lm_1); Uam1 *= exp(lm_0 - lm_for); Ua *= exp(lm_1 - lm_for); for(ap=a0; apval = factor * r1.val * r2.val; result->err = fabs(factor) * (r1.err + r2.err); result->e10 = 0; return GSL_ERROR_SELECT_2(stat_1, stat_2); } static int hyperg_U_int_origin (const int a, const int b, gsl_sf_result_e10 * result) { return hyperg_U_origin (a, b, result); } /* Calculate U(a,b,x) for x < 0 Abramowitz and Stegun formula 13.1.3 U(a,b,x) = (gamma(1-b)/gamma(1+a-b)) M(a,b,x) - z^(1-b) (gamma(1-b)/gamma(a)) M(1+a-b,2-b,x) can be transformed into U(a,b,x) = poch(1+a-b,-a) M(a,b,x) + z^(1-b) poch(a,-(1+a-b)) M(1+a-b,2-b,x) using the reflection formula 6.1.17 and the definition of Poch(a,b)=gamma(a+b)/gamma(a). Our poch function already handles the special cases of ratios of gamma functions with negative integer argument. Note that U(a,b,x) is complex in general for x<0 due to the term x^(1-b), but is real when 1) b is an integer 4) a is zero or a negative integer so x^(1-b)/gamma(a) is zero. For integer b U(a,b,x) is defined as the limit beta->b U(a,beta,x). This makes the situation slightly more complicated. */ static int hyperg_U_negx (const double a, const double b, const double x, gsl_sf_result_e10 * result) { gsl_sf_result r1, r2; int stat_1, stat_2, status; int a_int = (a == floor(a)); int b_int = (b == floor(b)); double T1 = 0, T1_err = 0, T2 = 0, T2_err = 0; /* Compute the first term poch(1+a-b) M(a,b,x) */ if (b_int && b <= 0 && !(a_int && a <= 0 && a >= b)) { /* Need to handle first term as lim_{beta->b} poch(1+a-beta,-a) M(a,beta,x) due to pole in M(a,b,x) for b == 0 or -ve integer We skip this case when a is zero or a negative integer and a>=b because the hypergeometric series terminates before any singular terms */ /* FIXME: TO BE IMPLEMENTED ! */ result->val = GSL_NAN; result->err = GSL_NAN; GSL_ERROR("limit case integer b <= 0 unimplemented", GSL_EUNIMPL); } else { stat_1 = gsl_sf_poch_e(1+a-b,-a,&r1); status = stat_1; if (r1.val != 0.0) { gsl_sf_result Mr1; int stat_Mr1 = gsl_sf_hyperg_1F1_e (a, b, x, &Mr1); status = GSL_ERROR_SELECT_2(status, stat_Mr1); T1 = Mr1.val * r1.val; T1_err = 2.0 * GSL_DBL_EPSILON * fabs(T1) + fabs(Mr1.err * r1.val) + fabs(Mr1.val * r1.err) ; } } /* Compute the second term z^(1-b) poch(a,-(1+a-b)) M(1+a-b,2-b,x) */ if (b_int && b >= 2 && !(a_int && a <= (b - 2))) { /* Need to handle second term as a limit due to pole in M(1+a-b,2-b,x). We skip this case when a is integer and a <= b-2 because the hypergeometric series terminates before any singular terms */ /* FIXME: TO BE IMPLEMENTED ! */ result->val = GSL_NAN; result->err = GSL_NAN; GSL_ERROR("limit case integer b >= 2 unimplemented", GSL_EUNIMPL); } else { if (a_int && a <= 0 && (b >= 1)) { r2.val = 0; r2.err = 0; } else { stat_2 = gsl_sf_poch_e(a,-(1+a-b),&r2); status = GSL_ERROR_SELECT_2(status, stat_2); } if (r2.val != 0.0) { gsl_sf_result Mr2; int stat_Mr2 = gsl_sf_hyperg_1F1_e (1+a-b, 2-b, x, &Mr2); T2 = Mr2.val * r2.val; T2_err = 2.0 * GSL_DBL_EPSILON * fabs(T2) + fabs(Mr2.err * r2.val) + fabs(Mr2.val * r2.err); status = GSL_ERROR_SELECT_2(status, stat_Mr2); if (T2 != 0.0) { double x1mb = pow(x, 1-b); T2 = x1mb * T2; T2_err = fabs(x1mb) * T2_err; } } } result->val = (T1 + T2); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val) + (T1_err + T2_err); result->e10 = 0; return status; } static int hyperg_U_int_negx (const int a, const int b, const double x, gsl_sf_result_e10 * result) { /* Looking at the tests it seems that everything is handled correctly by hyperg_U_negx except aval = res_tem; result->err = res_tem_err; return status; } else { return hyperg_U_negx (a, b, x, result); } } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_hyperg_U_int_e10_e(const int a, const int b, const double x, gsl_sf_result_e10 * result) { /* CHECK_POINTER(result) */ if(x == 0.0 && b >= 1) { DOMAIN_ERROR_E10(result); } else if (x == 0.0) { return hyperg_U_int_origin (a, b, result); } else if (x < 0.0) { return hyperg_U_int_negx (a, b, x, result); } else { if(b >= 1) { return hyperg_U_int_bge1(a, b, x, result); } else { /* Use the reflection formula * U(a,b,x) = x^(1-b) U(1+a-b,2-b,x) */ gsl_sf_result_e10 U; double ln_x = log(x); int ap = 1 + a - b; int bp = 2 - b; int stat_e; int stat_U = hyperg_U_int_bge1(ap, bp, x, &U); double ln_pre_val = (1.0-b)*ln_x; double ln_pre_err = 2.0 * GSL_DBL_EPSILON * (fabs(b)+1.0) * fabs(ln_x); ln_pre_err += 2.0 * GSL_DBL_EPSILON * fabs(1.0-b); /* error in log(x) */ stat_e = gsl_sf_exp_mult_err_e10_e(ln_pre_val + U.e10*M_LN10, ln_pre_err, U.val, U.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_U); } } } int gsl_sf_hyperg_U_e10_e(const double a, const double b, const double x, gsl_sf_result_e10 * result) { const double rinta = floor(a + 0.5); const double rintb = floor(b + 0.5); const int a_integer = ( fabs(a - rinta) < INT_THRESHOLD ); const int b_integer = ( fabs(b - rintb) < INT_THRESHOLD ); /* CHECK_POINTER(result) */ if(x == 0.0 && b >= 1) { DOMAIN_ERROR_E10(result); } else if(a == 0.0) { result->val = 1.0; result->err = 0.0; result->e10 = 0; return GSL_SUCCESS; } else if (x == 0.0) { return hyperg_U_origin (a, b, result); } else if(a_integer && b == a + 1) /* This is DLMF 13.6.4 */ { gsl_sf_result powx1N_1; gsl_sf_pow_int_e(x, -a, &powx1N_1); result->val = powx1N_1.val; result->err = powx1N_1.err; result->e10 = 0; return GSL_SUCCESS; } else if(a_integer && b_integer) { return gsl_sf_hyperg_U_int_e10_e(rinta, rintb, x, result); } else if (x < 0.0) { return hyperg_U_negx (a, b, x, result); } else { if(b >= 1.0) { /* Use b >= 1 function. */ return hyperg_U_bge1(a, b, x, result); } else { /* Use the reflection formula * U(a,b,x) = x^(1-b) U(1+a-b,2-b,x) */ const double lnx = log(x); const double ln_pre_val = (1.0-b)*lnx; const double ln_pre_err = fabs(lnx) * 2.0 * GSL_DBL_EPSILON * (1.0 + fabs(b)); const double ap = 1.0 + a - b; const double bp = 2.0 - b; gsl_sf_result_e10 U; int stat_U = hyperg_U_bge1(ap, bp, x, &U); int stat_e = gsl_sf_exp_mult_err_e10_e(ln_pre_val + U.e10*M_LN10, ln_pre_err, U.val, U.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_U); } } } int gsl_sf_hyperg_U_int_e(const int a, const int b, const double x, gsl_sf_result * result) { gsl_sf_result_e10 re = {0, 0, 0}; int stat_U = gsl_sf_hyperg_U_int_e10_e(a, b, x, &re); int stat_c = gsl_sf_result_smash_e(&re, result); return GSL_ERROR_SELECT_2(stat_c, stat_U); } int gsl_sf_hyperg_U_e(const double a, const double b, const double x, gsl_sf_result * result) { gsl_sf_result_e10 re = {0, 0, 0}; int stat_U = gsl_sf_hyperg_U_e10_e(a, b, x, &re); int stat_c = gsl_sf_result_smash_e(&re, result); return GSL_ERROR_SELECT_2(stat_c, stat_U); } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_hyperg_U_int(const int a, const int b, const double x) { EVAL_RESULT(gsl_sf_hyperg_U_int_e(a, b, x, &result)); } double gsl_sf_hyperg_U(const double a, const double b, const double x) { EVAL_RESULT(gsl_sf_hyperg_U_e(a, b, x, &result)); } gsl/specfunc/hyperg.c0000644000175000017500000002107513536674414013207 0ustar eddedd/* specfunc/hyperg.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ /* Miscellaneous implementations of use * for evaluation of hypergeometric functions. */ #include #include #include #include #include #include "error.h" #include "hyperg.h" #define SUM_LARGE (1.0e-5*GSL_DBL_MAX) int gsl_sf_hyperg_1F1_series_e(const double a, const double b, const double x, gsl_sf_result * result ) { double an = a; double bn = b; double n = 1.0; double del = 1.0; double abs_del = 1.0; double max_abs_del = 1.0; double sum_val = 1.0; double sum_err = 0.0; while(abs_del/fabs(sum_val) > 0.25*GSL_DBL_EPSILON) { double u, abs_u; if(bn == 0.0) { DOMAIN_ERROR(result); } if(an == 0.0) { result->val = sum_val; result->err = sum_err; result->err += 2.0 * GSL_DBL_EPSILON * n * fabs(sum_val); return GSL_SUCCESS; } if (n > 10000.0) { result->val = sum_val; result->err = sum_err; GSL_ERROR ("hypergeometric series failed to converge", GSL_EFAILED); } u = x * (an/(bn*n)); abs_u = fabs(u); if(abs_u > 1.0 && max_abs_del > GSL_DBL_MAX/abs_u) { result->val = sum_val; result->err = fabs(sum_val); GSL_ERROR ("overflow", GSL_EOVRFLW); } del *= u; sum_val += del; if(fabs(sum_val) > SUM_LARGE) { result->val = sum_val; result->err = fabs(sum_val); GSL_ERROR ("overflow", GSL_EOVRFLW); } abs_del = fabs(del); max_abs_del = GSL_MAX_DBL(abs_del, max_abs_del); sum_err += 2.0*GSL_DBL_EPSILON*abs_del; an += 1.0; bn += 1.0; n += 1.0; } result->val = sum_val; result->err = sum_err; result->err += abs_del; result->err += 2.0 * GSL_DBL_EPSILON * n * fabs(sum_val); return GSL_SUCCESS; } int gsl_sf_hyperg_1F1_large_b_e(const double a, const double b, const double x, gsl_sf_result * result) { if(fabs(x/b) < 1.0) { const double u = x/b; const double v = 1.0/(1.0-u); const double pre = pow(v,a); const double uv = u*v; const double uv2 = uv*uv; const double t1 = a*(a+1.0)/(2.0*b)*uv2; const double t2a = a*(a+1.0)/(24.0*b*b)*uv2; const double t2b = 12.0 + 16.0*(a+2.0)*uv + 3.0*(a+2.0)*(a+3.0)*uv2; const double t2 = t2a*t2b; result->val = pre * (1.0 - t1 + t2); result->err = pre * GSL_DBL_EPSILON * (1.0 + fabs(t1) + fabs(t2)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { DOMAIN_ERROR(result); } } int gsl_sf_hyperg_U_large_b_e(const double a, const double b, const double x, gsl_sf_result * result, double * ln_multiplier ) { double N = floor(b); /* b = N + eps */ double eps = b - N; if(fabs(eps) < GSL_SQRT_DBL_EPSILON) { double lnpre_val; double lnpre_err; gsl_sf_result M; if(b > 1.0) { double tmp = (1.0-b)*log(x); gsl_sf_result lg_bm1; gsl_sf_result lg_a; gsl_sf_lngamma_e(b-1.0, &lg_bm1); gsl_sf_lngamma_e(a, &lg_a); lnpre_val = tmp + x + lg_bm1.val - lg_a.val; lnpre_err = lg_bm1.err + lg_a.err + GSL_DBL_EPSILON * (fabs(x) + fabs(tmp)); gsl_sf_hyperg_1F1_large_b_e(1.0-a, 2.0-b, -x, &M); } else { gsl_sf_result lg_1mb; gsl_sf_result lg_1pamb; gsl_sf_lngamma_e(1.0-b, &lg_1mb); gsl_sf_lngamma_e(1.0+a-b, &lg_1pamb); lnpre_val = lg_1mb.val - lg_1pamb.val; lnpre_err = lg_1mb.err + lg_1pamb.err; gsl_sf_hyperg_1F1_large_b_e(a, b, x, &M); } if(lnpre_val > GSL_LOG_DBL_MAX-10.0) { result->val = M.val; result->err = M.err; *ln_multiplier = lnpre_val; GSL_ERROR ("overflow", GSL_EOVRFLW); } else { gsl_sf_result epre; int stat_e = gsl_sf_exp_err_e(lnpre_val, lnpre_err, &epre); result->val = epre.val * M.val; result->err = epre.val * M.err + epre.err * fabs(M.val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); *ln_multiplier = 0.0; return stat_e; } } else { double omb_lnx = (1.0-b)*log(x); gsl_sf_result lg_1mb; double sgn_1mb; gsl_sf_result lg_1pamb; double sgn_1pamb; gsl_sf_result lg_bm1; double sgn_bm1; gsl_sf_result lg_a; double sgn_a; gsl_sf_result M1, M2; double lnpre1_val, lnpre2_val; double lnpre1_err, lnpre2_err; double sgpre1, sgpre2; gsl_sf_hyperg_1F1_large_b_e( a, b, x, &M1); gsl_sf_hyperg_1F1_large_b_e(1.0-a, 2.0-b, x, &M2); gsl_sf_lngamma_sgn_e(1.0-b, &lg_1mb, &sgn_1mb); gsl_sf_lngamma_sgn_e(1.0+a-b, &lg_1pamb, &sgn_1pamb); gsl_sf_lngamma_sgn_e(b-1.0, &lg_bm1, &sgn_bm1); gsl_sf_lngamma_sgn_e(a, &lg_a, &sgn_a); lnpre1_val = lg_1mb.val - lg_1pamb.val; lnpre1_err = lg_1mb.err + lg_1pamb.err; lnpre2_val = lg_bm1.val - lg_a.val - omb_lnx - x; lnpre2_err = lg_bm1.err + lg_a.err + GSL_DBL_EPSILON * (fabs(omb_lnx)+fabs(x)); sgpre1 = sgn_1mb * sgn_1pamb; sgpre2 = sgn_bm1 * sgn_a; if(lnpre1_val > GSL_LOG_DBL_MAX-10.0 || lnpre2_val > GSL_LOG_DBL_MAX-10.0) { double max_lnpre_val = GSL_MAX(lnpre1_val,lnpre2_val); double max_lnpre_err = GSL_MAX(lnpre1_err,lnpre2_err); double lp1 = lnpre1_val - max_lnpre_val; double lp2 = lnpre2_val - max_lnpre_val; double t1 = sgpre1*exp(lp1); double t2 = sgpre2*exp(lp2); result->val = t1*M1.val + t2*M2.val; result->err = fabs(t1)*M1.err + fabs(t2)*M2.err; result->err += GSL_DBL_EPSILON * exp(max_lnpre_err) * (fabs(t1*M1.val) + fabs(t2*M2.val)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); *ln_multiplier = max_lnpre_val; GSL_ERROR ("overflow", GSL_EOVRFLW); } else { double t1 = sgpre1*exp(lnpre1_val); double t2 = sgpre2*exp(lnpre2_val); result->val = t1*M1.val + t2*M2.val; result->err = fabs(t1) * M1.err + fabs(t2)*M2.err; result->err += GSL_DBL_EPSILON * (exp(lnpre1_err)*fabs(t1*M1.val) + exp(lnpre2_err)*fabs(t2*M2.val)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); *ln_multiplier = 0.0; return GSL_SUCCESS; } } } /* [Carlson, p.109] says the error in truncating this asymptotic series * is less than the absolute value of the first neglected term. * * A termination argument is provided, so that the series will * be summed at most up to n=n_trunc. If n_trunc is set negative, * then the series is summed until it appears to start diverging. */ int gsl_sf_hyperg_2F0_series_e(const double a, const double b, const double x, int n_trunc, gsl_sf_result * result ) { const int maxiter = 2000; double an = a; double bn = b; double n = 1.0; double sum = 1.0; double del = 1.0; double abs_del = 1.0; double max_abs_del = 1.0; double last_abs_del = 1.0; while(abs_del/fabs(sum) > GSL_DBL_EPSILON && n < maxiter) { double u = an * (bn/n * x); double abs_u = fabs(u); if(abs_u > 1.0 && (max_abs_del > GSL_DBL_MAX/abs_u)) { result->val = sum; result->err = fabs(sum); GSL_ERROR ("overflow", GSL_EOVRFLW); } del *= u; sum += del; abs_del = fabs(del); if(abs_del > last_abs_del) break; /* series is probably starting to grow */ last_abs_del = abs_del; max_abs_del = GSL_MAX(abs_del, max_abs_del); an += 1.0; bn += 1.0; n += 1.0; if(an == 0.0 || bn == 0.0) break; /* series terminated */ if(n_trunc >= 0 && n >= n_trunc) break; /* reached requested timeout */ } result->val = sum; result->err = GSL_DBL_EPSILON * n + abs_del; if(n >= maxiter) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } gsl/specfunc/legendre_H3d.c0000644000175000017500000004205513536674414014175 0ustar eddedd/* specfunc/legendre_H3d.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include "error.h" #include "legendre.h" /* See [Abbott+Schaefer, Ap.J. 308, 546 (1986)] for * enough details to follow what is happening here. */ /* Logarithm of normalization factor, Log[N(ell,lambda)]. * N(ell,lambda) = Product[ lambda^2 + n^2, {n,0,ell} ] * = |Gamma(ell + 1 + I lambda)|^2 lambda sinh(Pi lambda) / Pi * Assumes ell >= 0. */ static int legendre_H3d_lnnorm(const int ell, const double lambda, double * result) { double abs_lam = fabs(lambda); if(abs_lam == 0.0) { *result = 0.0; GSL_ERROR ("error", GSL_EDOM); } else if(lambda > (ell + 1.0)/GSL_ROOT3_DBL_EPSILON) { /* There is a cancellation between the sinh(Pi lambda) * term and the log(gamma(ell + 1 + i lambda) in the * result below, so we show some care and save some digits. * Note that the above guarantees that lambda is large, * since ell >= 0. We use Stirling and a simple expansion * of sinh. */ double rat = (ell+1.0)/lambda; double ln_lam2ell2 = 2.0*log(lambda) + log(1.0 + rat*rat); double lg_corrected = -2.0*(ell+1.0) + M_LNPI + (ell+0.5)*ln_lam2ell2 + 1.0/(288.0*lambda*lambda); double angle_terms = lambda * 2.0 * rat * (1.0 - rat*rat/3.0); *result = log(abs_lam) + lg_corrected + angle_terms - M_LNPI; return GSL_SUCCESS; } else { gsl_sf_result lg_r; gsl_sf_result lg_theta; gsl_sf_result ln_sinh; gsl_sf_lngamma_complex_e(ell+1.0, lambda, &lg_r, &lg_theta); gsl_sf_lnsinh_e(M_PI * abs_lam, &ln_sinh); *result = log(abs_lam) + ln_sinh.val + 2.0*lg_r.val - M_LNPI; return GSL_SUCCESS; } } /* Calculate series for small eta*lambda. * Assumes eta > 0, lambda != 0. * * This is just the defining hypergeometric for the Legendre function. * * P^{mu}_{-1/2 + I lam}(z) = 1/Gamma(l+3/2) ((z+1)/(z-1)^(mu/2) * 2F1(1/2 - I lam, 1/2 + I lam; l+3/2; (1-z)/2) * We use * z = cosh(eta) * (z-1)/2 = sinh^2(eta/2) * * And recall * H3d = sqrt(Pi Norm /(2 lam^2 sinh(eta))) P^{-l-1/2}_{-1/2 + I lam}(cosh(eta)) */ static int legendre_H3d_series(const int ell, const double lambda, const double eta, gsl_sf_result * result) { const int nmax = 5000; const double shheta = sinh(0.5*eta); const double ln_zp1 = M_LN2 + log(1.0 + shheta*shheta); const double ln_zm1 = M_LN2 + 2.0*log(shheta); const double zeta = -shheta*shheta; gsl_sf_result lg_lp32; double term = 1.0; double sum = 1.0; double sum_err = 0.0; gsl_sf_result lnsheta; double lnN; double lnpre_val, lnpre_err, lnprepow; int stat_e; int n; gsl_sf_lngamma_e(ell + 3.0/2.0, &lg_lp32); gsl_sf_lnsinh_e(eta, &lnsheta); legendre_H3d_lnnorm(ell, lambda, &lnN); lnprepow = 0.5*(ell + 0.5) * (ln_zm1 - ln_zp1); lnpre_val = lnprepow + 0.5*(lnN + M_LNPI - M_LN2 - lnsheta.val) - lg_lp32.val - log(fabs(lambda)); lnpre_err = lnsheta.err + lg_lp32.err + GSL_DBL_EPSILON * fabs(lnpre_val); lnpre_err += 2.0*GSL_DBL_EPSILON * (fabs(lnN) + M_LNPI + M_LN2); lnpre_err += 2.0*GSL_DBL_EPSILON * (0.5*(ell + 0.5) * (fabs(ln_zm1) + fabs(ln_zp1))); for(n=1; n RECUR_BIG || fabs(Bn) > RECUR_BIG) { An /= RECUR_BIG; Bn /= RECUR_BIG; Anm1 /= RECUR_BIG; Bnm1 /= RECUR_BIG; Anm2 /= RECUR_BIG; Bnm2 /= RECUR_BIG; } old_fn = fn; fn = An/Bn; del = old_fn/fn; if(fabs(del - 1.0) < 4.0*GSL_DBL_EPSILON) break; } result->val = fn; result->err = 2.0 * GSL_DBL_EPSILON * (sqrt(n)+1.0) * fabs(fn); if(n >= maxiter) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } #endif /* 0 */ /* Evaluate legendre_H3d(ell+1)/legendre_H3d(ell) * by continued fraction. Use the Gautschi (Euler) * equivalent series. */ /* FIXME: Maybe we have to worry about this. The a_k are * not positive and there can be a blow-up. It happened * for J_nu once or twice. Then we should probably use * the method above. */ static int legendre_H3d_CF1_ser(const int ell, const double lambda, const double coth_eta, gsl_sf_result * result) { const double pre = hypot(lambda, ell+1.0)/((2.0*ell+3)*coth_eta); const int maxk = 20000; double tk = 1.0; double sum = 1.0; double rhok = 0.0; double sum_err = 0.0; int k; for(k=1; kval = pre * sum; result->err = fabs(pre * tk); result->err += fabs(pre * sum_err); result->err += 4.0 * GSL_DBL_EPSILON * fabs(result->val); if(k >= maxk) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_legendre_H3d_0_e(const double lambda, const double eta, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(eta < 0.0) { DOMAIN_ERROR(result); } else if(eta == 0.0 || lambda == 0.0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else { const double lam_eta = lambda * eta; gsl_sf_result s; gsl_sf_sin_err_e(lam_eta, 2.0*GSL_DBL_EPSILON * fabs(lam_eta), &s); if(eta > -0.5*GSL_LOG_DBL_EPSILON) { double f = 2.0 / lambda * exp(-eta); result->val = f * s.val; result->err = fabs(f * s.val) * (fabs(eta) + 1.0) * GSL_DBL_EPSILON; result->err += fabs(f) * s.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); } else { double f = 1.0/(lambda*sinh(eta)); result->val = f * s.val; result->err = fabs(f * s.val) * (fabs(eta) + 1.0) * GSL_DBL_EPSILON; result->err += fabs(f) * s.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); } return GSL_SUCCESS; } } int gsl_sf_legendre_H3d_1_e(const double lambda, const double eta, gsl_sf_result * result) { const double xi = fabs(eta*lambda); const double lsq = lambda*lambda; const double lsqp1 = lsq + 1.0; /* CHECK_POINTER(result) */ if(eta < 0.0) { DOMAIN_ERROR(result); } else if(eta == 0.0 || lambda == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(xi < GSL_ROOT5_DBL_EPSILON && eta < GSL_ROOT5_DBL_EPSILON) { double etasq = eta*eta; double xisq = xi*xi; double term1 = (etasq + xisq)/3.0; double term2 = -(2.0*etasq*etasq + 5.0*etasq*xisq + 3.0*xisq*xisq)/90.0; double sinh_term = 1.0 - eta*eta/6.0 * (1.0 - 7.0/60.0*eta*eta); double pre = sinh_term/sqrt(lsqp1) / eta; result->val = pre * (term1 + term2); result->err = pre * GSL_DBL_EPSILON * (fabs(term1) + fabs(term2)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { double sin_term; /* Sin(xi)/xi */ double cos_term; /* Cos(xi) */ double coth_term; /* eta/Tanh(eta) */ double sinh_term; /* eta/Sinh(eta) */ double sin_term_err; double cos_term_err; double t1; double pre_val; double pre_err; double term1; double term2; if(xi < GSL_ROOT5_DBL_EPSILON) { sin_term = 1.0 - xi*xi/6.0 * (1.0 - xi*xi/20.0); cos_term = 1.0 - 0.5*xi*xi * (1.0 - xi*xi/12.0); sin_term_err = GSL_DBL_EPSILON; cos_term_err = GSL_DBL_EPSILON; } else { gsl_sf_result sin_xi_result; gsl_sf_result cos_xi_result; gsl_sf_sin_e(xi, &sin_xi_result); gsl_sf_cos_e(xi, &cos_xi_result); sin_term = sin_xi_result.val/xi; cos_term = cos_xi_result.val; sin_term_err = sin_xi_result.err/fabs(xi); cos_term_err = cos_xi_result.err; } if(eta < GSL_ROOT5_DBL_EPSILON) { coth_term = 1.0 + eta*eta/3.0 * (1.0 - eta*eta/15.0); sinh_term = 1.0 - eta*eta/6.0 * (1.0 - 7.0/60.0*eta*eta); } else { coth_term = eta/tanh(eta); sinh_term = eta/sinh(eta); } t1 = sqrt(lsqp1) * eta; pre_val = sinh_term/t1; pre_err = 2.0 * GSL_DBL_EPSILON * fabs(pre_val); term1 = sin_term*coth_term; term2 = cos_term; result->val = pre_val * (term1 - term2); result->err = pre_err * fabs(term1 - term2); result->err += pre_val * (sin_term_err * coth_term + cos_term_err); result->err += pre_val * fabs(term1-term2) * (fabs(eta) + 1.0) * GSL_DBL_EPSILON; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_legendre_H3d_e(const int ell, const double lambda, const double eta, gsl_sf_result * result) { const double abs_lam = fabs(lambda); const double lsq = abs_lam*abs_lam; const double xi = abs_lam * eta; const double cosh_eta = cosh(eta); /* CHECK_POINTER(result) */ if(eta < 0.0) { DOMAIN_ERROR(result); } else if(eta > GSL_LOG_DBL_MAX) { /* cosh(eta) is too big. */ OVERFLOW_ERROR(result); } else if(ell == 0) { return gsl_sf_legendre_H3d_0_e(lambda, eta, result); } else if(ell == 1) { return gsl_sf_legendre_H3d_1_e(lambda, eta, result); } else if(eta == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(xi < 1.0) { return legendre_H3d_series(ell, lambda, eta, result); } else if((ell*ell+lsq)/sqrt(1.0+lsq)/(cosh_eta*cosh_eta) < 5.0*GSL_ROOT3_DBL_EPSILON) { /* Large argument. */ gsl_sf_result P; double lm; int stat_P = gsl_sf_conicalP_large_x_e(-ell-0.5, lambda, cosh_eta, &P, &lm); if(P.val == 0.0) { result->val = 0.0; result->err = 0.0; return stat_P; } else { double lnN; gsl_sf_result lnsh; double ln_abslam; double lnpre_val, lnpre_err; int stat_e; gsl_sf_lnsinh_e(eta, &lnsh); legendre_H3d_lnnorm(ell, lambda, &lnN); ln_abslam = log(abs_lam); lnpre_val = 0.5*(M_LNPI + lnN - M_LN2 - lnsh.val) - ln_abslam; lnpre_err = lnsh.err; lnpre_err += 2.0 * GSL_DBL_EPSILON * (0.5*(M_LNPI + M_LN2 + fabs(lnN)) + fabs(ln_abslam)); lnpre_err += 2.0 * GSL_DBL_EPSILON * fabs(lnpre_val); stat_e = gsl_sf_exp_mult_err_e(lnpre_val + lm, lnpre_err, P.val, P.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_P); } } else if(abs_lam > 1000.0*ell*ell) { /* Large degree. */ gsl_sf_result P; double lm; int stat_P = gsl_sf_conicalP_xgt1_neg_mu_largetau_e(ell+0.5, lambda, cosh_eta, eta, &P, &lm); if(P.val == 0.0) { result->val = 0.0; result->err = 0.0; return stat_P; } else { double lnN; gsl_sf_result lnsh; double ln_abslam; double lnpre_val, lnpre_err; int stat_e; gsl_sf_lnsinh_e(eta, &lnsh); legendre_H3d_lnnorm(ell, lambda, &lnN); ln_abslam = log(abs_lam); lnpre_val = 0.5*(M_LNPI + lnN - M_LN2 - lnsh.val) - ln_abslam; lnpre_err = lnsh.err; lnpre_err += GSL_DBL_EPSILON * (0.5*(M_LNPI + M_LN2 + fabs(lnN)) + fabs(ln_abslam)); lnpre_err += 2.0 * GSL_DBL_EPSILON * fabs(lnpre_val); stat_e = gsl_sf_exp_mult_err_e(lnpre_val + lm, lnpre_err, P.val, P.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_P); } } else { /* Backward recurrence. */ const double coth_eta = 1.0/tanh(eta); const double coth_err_mult = fabs(eta) + 1.0; gsl_sf_result rH; int stat_CF1 = legendre_H3d_CF1_ser(ell, lambda, coth_eta, &rH); double Hlm1; double Hl = GSL_SQRT_DBL_MIN; double Hlp1 = rH.val * Hl; int lp; for(lp=ell; lp>0; lp--) { double root_term_0 = hypot(lambda,lp); double root_term_1 = hypot(lambda,lp+1.0); Hlm1 = ((2.0*lp + 1.0)*coth_eta*Hl - root_term_1 * Hlp1)/root_term_0; Hlp1 = Hl; Hl = Hlm1; } if(fabs(Hl) > fabs(Hlp1)) { gsl_sf_result H0; int stat_H0 = gsl_sf_legendre_H3d_0_e(lambda, eta, &H0); result->val = GSL_SQRT_DBL_MIN/Hl * H0.val; result->err = GSL_SQRT_DBL_MIN/fabs(Hl) * H0.err; result->err += fabs(rH.err/rH.val) * (ell+1.0) * coth_err_mult * fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_H0, stat_CF1); } else { gsl_sf_result H1; int stat_H1 = gsl_sf_legendre_H3d_1_e(lambda, eta, &H1); result->val = GSL_SQRT_DBL_MIN/Hlp1 * H1.val; result->err = GSL_SQRT_DBL_MIN/fabs(Hlp1) * H1.err; result->err += fabs(rH.err/rH.val) * (ell+1.0) * coth_err_mult * fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_H1, stat_CF1); } } } int gsl_sf_legendre_H3d_array(const int lmax, const double lambda, const double eta, double * result_array) { /* CHECK_POINTER(result_array) */ if(eta < 0.0 || lmax < 0) { int ell; for(ell=0; ell<=lmax; ell++) result_array[ell] = 0.0; GSL_ERROR ("domain error", GSL_EDOM); } else if(eta > GSL_LOG_DBL_MAX) { /* cosh(eta) is too big. */ int ell; for(ell=0; ell<=lmax; ell++) result_array[ell] = 0.0; GSL_ERROR ("overflow", GSL_EOVRFLW); } else if(lmax == 0) { gsl_sf_result H0; int stat = gsl_sf_legendre_H3d_e(0, lambda, eta, &H0); result_array[0] = H0.val; return stat; } else { /* Not the most efficient method. But what the hell... it's simple. */ gsl_sf_result r_Hlp1; gsl_sf_result r_Hl; int stat_lmax = gsl_sf_legendre_H3d_e(lmax, lambda, eta, &r_Hlp1); int stat_lmaxm1 = gsl_sf_legendre_H3d_e(lmax-1, lambda, eta, &r_Hl); int stat_max = GSL_ERROR_SELECT_2(stat_lmax, stat_lmaxm1); const double coth_eta = 1.0/tanh(eta); int stat_recursion = GSL_SUCCESS; double Hlp1 = r_Hlp1.val; double Hl = r_Hl.val; double Hlm1; int ell; result_array[lmax] = Hlp1; result_array[lmax-1] = Hl; for(ell=lmax-1; ell>0; ell--) { double root_term_0 = hypot(lambda,ell); double root_term_1 = hypot(lambda,ell+1.0); Hlm1 = ((2.0*ell + 1.0)*coth_eta*Hl - root_term_1 * Hlp1)/root_term_0; result_array[ell-1] = Hlm1; if(!(Hlm1 < GSL_DBL_MAX)) stat_recursion = GSL_EOVRFLW; Hlp1 = Hl; Hl = Hlm1; } return GSL_ERROR_SELECT_2(stat_recursion, stat_max); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_legendre_H3d_0(const double lambda, const double eta) { EVAL_RESULT(gsl_sf_legendre_H3d_0_e(lambda, eta, &result)); } double gsl_sf_legendre_H3d_1(const double lambda, const double eta) { EVAL_RESULT(gsl_sf_legendre_H3d_1_e(lambda, eta, &result)); } double gsl_sf_legendre_H3d(const int l, const double lambda, const double eta) { EVAL_RESULT(gsl_sf_legendre_H3d_e(l, lambda, eta, &result)); } gsl/specfunc/bessel_zero.c0000644000175000017500000007020613536674414014225 0ustar eddedd/* specfunc/bessel_zero.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include "error.h" #include "bessel_olver.h" /* For Chebyshev expansions of the roots as functions of nu, * see [G. Nemeth, Mathematical Approximation of Special Functions]. * This gives the fits for all nu and s <= 10. * I made the fits for other values of s myself [GJ]. */ /* Chebyshev expansion: j_{nu,1} = c_k T_k*(nu/2), nu <= 2 */ static const double coef_jnu1_a[] = { 3.801775243633476, 1.360704737511120, -0.030707710261106, 0.004526823746202, -0.000808682832134, 0.000159218792489, -0.000033225189761, 0.000007205599763, -0.000001606110397, 0.000000365439424, -0.000000084498039, 0.000000019793815, -0.000000004687054, 0.000000001120052, -0.000000000269767, 0.000000000065420, -0.000000000015961, 0.000000000003914, -0.000000000000965, 0.000000000000239, -0.000000000000059, 0.000000000000015, -0.000000000000004, 0.000000000000001 }; /* Chebyshev expansion: j_{nu,1} = nu c_k T_k*((2/nu)^(2/3)), nu >= 2 */ static const double coef_jnu1_b[] = { 1.735063412537096, 0.784478100951978, 0.048881473180370, -0.000578279783021, -0.000038984957864, 0.000005758297879, -0.000000327583229, -0.000000003853878, 0.000000002284653, -0.000000000153079, -0.000000000000895, 0.000000000000283, 0.000000000000043, 0.000000000000010, -0.000000000000003 }; /* Chebyshev expansion: j_{nu,2} = c_k T_k*(nu/2), nu <= 2 */ static const double coef_jnu2_a[] = { 6.992370244046161, 1.446379282056534, -0.023458616207293, 0.002172149448700, -0.000246262775620, 0.000030990180959, -0.000004154183047, 0.000000580766328, -0.000000083648175, 0.000000012317355, -0.000000001844887, 0.000000000280076, -0.000000000042986, 0.000000000006658, -0.000000000001039, 0.000000000000163, -0.000000000000026, 0.000000000000004, -0.000000000000001 }; /* Chebyshev expansion: j_{nu,2} = nu c_k T_k*((2/nu)^(2/3)), nu >= 2 */ static const double coef_jnu2_b[] = { 2.465611864263400, 1.607952988471069, 0.138758034431497, -0.003687791182054, -0.000051276007868, 0.000045113570749, -0.000007579172152, 0.000000736469208, -0.000000011118527, -0.000000011919884, 0.000000002696788, -0.000000000314488, 0.000000000008124, 0.000000000005211, -0.000000000001292, 0.000000000000158, -0.000000000000004, -0.000000000000003, 0.000000000000001 }; /* Chebyshev expansion: j_{nu,3} = c_k T_k*(nu/3), nu <= 3 */ static const double coef_jnu3_a[] = { 10.869647065239236, 2.177524286141710, -0.034822817125293, 0.003167249102413, -0.000353960349344, 0.000044039086085, -0.000005851380981, 0.000000812575483, -0.000000116463617, 0.000000017091246, -0.000000002554376, 0.000000000387335, -0.000000000059428, 0.000000000009207, -0.000000000001438, 0.000000000000226, -0.000000000000036, 0.000000000000006, -0.000000000000001 }; /* Chebyshev expansion: j_{nu,3} = nu c_k T_k*((3/nu)^(2/3)), nu >= 3 */ static const double coef_jnu3_b[] = { 2.522816775173244, 1.673199424973720, 0.146431617506314, -0.004049001763912, -0.000039517767244, 0.000048781729288, -0.000008729705695, 0.000000928737310, -0.000000028388244, -0.000000012927432, 0.000000003441008, -0.000000000471695, 0.000000000025590, 0.000000000005502, -0.000000000001881, 0.000000000000295, -0.000000000000020, -0.000000000000003, 0.000000000000001 }; /* Chebyshev expansion: j_{nu,4} = c_k T_k*(nu/4), nu <= 4 */ static const double coef_jnu4_a[] = { 14.750310252773009, 2.908010932941708, -0.046093293420315, 0.004147172321412, -0.000459092310473, 0.000056646951906, -0.000007472351546, 0.000001031210065, -0.000000147008137, 0.000000021475218, -0.000000003197208, 0.000000000483249, -0.000000000073946, 0.000000000011431, -0.000000000001782, 0.000000000000280, -0.000000000000044, 0.000000000000007, -0.000000000000001 }; /* Chebyshev expansion: j_{nu,4} = nu c_k T_k*((4/nu)^(2/3)), nu >= 4 */ static const double coef_jnu4_b[] = { 2.551681323117914, 1.706177978336572, 0.150357658406131, -0.004234001378590, -0.000033854229898, 0.000050763551485, -0.000009337464057, 0.000001029717834, -0.000000037474196, -0.000000013450153, 0.000000003836180, -0.000000000557404, 0.000000000035748, 0.000000000005487, -0.000000000002187, 0.000000000000374, -0.000000000000031, -0.000000000000003, 0.000000000000001 }; /* Chebyshev expansion: j_{nu,5} = c_k T_k*(nu/5), nu <= 5 */ static const double coef_jnu5_a[] = { 18.632261081028211, 3.638249012596966, -0.057329705998828, 0.005121709126820, -0.000563325259487, 0.000069100826174, -0.000009066603030, 0.000001245181383, -0.000000176737282, 0.000000025716695, -0.000000003815184, 0.000000000574839, -0.000000000087715, 0.000000000013526, -0.000000000002104, 0.000000000000330, -0.000000000000052, 0.000000000000008, -0.000000000000001 }; /* Chebyshev expansion: j_{nu,5} = nu c_k T_k*((5/nu)^(2/3)), nu >= 5 */ /* FIXME: There is something wrong with this fit, in about the * 9th or 10th decimal place. */ static const double coef_jnu5_b[] = { 2.569079487591442, 1.726073360882134, 0.152740776809531, -0.004346449660148, -0.000030512461856, 0.000052000821080, -0.000009713343981, 0.000001091997863, -0.000000043061707, -0.000000013779413, 0.000000004082870, -0.000000000611259, 0.000000000042242, 0.000000000005448, -0.000000000002377, 0.000000000000424, -0.000000000000038, -0.000000000000002, 0.000000000000002 }; /* Chebyshev expansion: j_{nu,6} = c_k T_k*(nu/6), nu <= 6 */ static const double coef_jnu6_a[] = { 22.514836143374042, 4.368367257557198, -0.068550155285562, 0.006093776505822, -0.000667152784957, 0.000081486022398, -0.000010649011647, 0.000001457089679, -0.000000206105082, 0.000000029894724, -0.000000004422012, 0.000000000664471, -0.000000000101140, 0.000000000015561, -0.000000000002416, 0.000000000000378, -0.000000000000060, 0.000000000000009, -0.000000000000002 }; /* Chebyshev expansion: j_{nu,6} = nu c_k T_k*((6/nu)^(2/3)), nu >= 6 */ static const double coef_jnu6_b[] = { 2.580710285494837, 1.739380728566154, 0.154340696401691, -0.004422028860168, -0.000028305272624, 0.000052845975269, -0.000009968794373, 0.000001134252926, -0.000000046841241, -0.000000014007555, 0.000000004251816, -0.000000000648213, 0.000000000046728, 0.000000000005414, -0.000000000002508, 0.000000000000459, -0.000000000000043, -0.000000000000002, 0.000000000000002 }; /* Chebyshev expansion: j_{nu,7} = c_k T_k*(nu/7), nu <= 7 */ static const double coef_jnu7_a[] = { 26.397760539730869, 5.098418721711790, -0.079761896398948, 0.007064521280487, -0.000770766522482, 0.000093835449636, -0.000012225308542, 0.000001667939800, -0.000000235288157, 0.000000034040347, -0.000000005023142, 0.000000000753101, -0.000000000114389, 0.000000000017564, -0.000000000002722, 0.000000000000425, -0.000000000000067, 0.000000000000011, -0.000000000000002 }; /* Chebyshev expansion: j_{nu,7} = nu c_k T_k*((7/nu)^(2/3)), nu >= 7 */ static const double coef_jnu7_b[] = { 2.589033335856773, 1.748907007612678, 0.155488900387653, -0.004476317805688, -0.000026737952924, 0.000053459680946, -0.000010153699240, 0.000001164804272, -0.000000049566917, -0.000000014175403, 0.000000004374840, -0.000000000675135, 0.000000000050004, 0.000000000005387, -0.000000000002603, 0.000000000000485, -0.000000000000047, -0.000000000000002, 0.000000000000002 }; /* Chebyshev expansion: j_{nu,8} = c_k T_k*(nu/8), nu <= 8 */ static const double coef_jnu8_a[] = { 30.280900001606662, 5.828429205461221, -0.090968381181069, 0.008034479731033, -0.000874254899080, 0.000106164151611, -0.000013798098749, 0.000001878187386, -0.000000264366627, 0.000000038167685, -0.000000005621060, 0.000000000841165, -0.000000000127538, 0.000000000019550, -0.000000000003025, 0.000000000000472, -0.000000000000074, 0.000000000000012, -0.000000000000002 }; /* Chebyshev expansion: j_{nu,8} = nu c_k T_k*((8/nu)^(2/3)), nu >= 8 */ static const double coef_jnu8_b[] = { 2.595283877150078, 1.756063044986928, 0.156352972371030, -0.004517201896761, -0.000025567187878, 0.000053925472558, -0.000010293734486, 0.000001187923085, -0.000000051625122, -0.000000014304212, 0.000000004468450, -0.000000000695620, 0.000000000052500, 0.000000000005367, -0.000000000002676, 0.000000000000505, -0.000000000000050, -0.000000000000002, 0.000000000000002 }; /* Chebyshev expansion: j_{nu,9} = c_k T_k*(nu/9), nu <= 9 */ static const double coef_jnu9_a[] = { 34.164181213238386, 6.558412747925228, -0.102171455365016, 0.009003934361201, -0.000977663914535, 0.000118479876579, -0.000015368714220, 0.000002088064285, -0.000000293381154, 0.000000042283900, -0.000000006217033, 0.000000000928887, -0.000000000140627, 0.000000000021526, -0.000000000003326, 0.000000000000518, -0.000000000000081, 0.000000000000013, -0.000000000000002 }; /* Chebyshev expansion: j_{nu,9} = nu c_k T_k*((9/nu)^(2/3)), nu >= 9 */ static const double coef_jnu9_b[] = { 2.600150240905079, 1.761635491694032, 0.157026743724010, -0.004549100368716, -0.000024659248617, 0.000054291035068, -0.000010403464334, 0.000001206027524, -0.000000053234089, -0.000000014406241, 0.000000004542078, -0.000000000711728, 0.000000000054464, 0.000000000005350, -0.000000000002733, 0.000000000000521, -0.000000000000052, -0.000000000000002, 0.000000000000002 }; /* Chebyshev expansion: j_{nu,10} = c_k T_k*(nu/10), nu <= 10 */ static const double coef_jnu10_a[] = { 38.047560766184647, 7.288377637926008, -0.113372193277897, 0.009973047509098, -0.001081019701335, 0.000130786983847, -0.000016937898538, 0.000002297699179, -0.000000322354218, 0.000000046392941, -0.000000006811759, 0.000000001016395, -0.000000000153677, 0.000000000023486, -0.000000000003616, 0.000000000000561, -0.000000000000095, 0.000000000000027, -0.000000000000013, 0.000000000000005 }; /* Chebyshev expansion: j_{nu,10} = nu c_k T_k*((10/nu)^(2/3)), nu >= 10 */ static const double coef_jnu10_b[] = { 2.604046346867949, 1.766097596481182, 0.157566834446511, -0.004574682244089, -0.000023934500688, 0.000054585558231, -0.000010491765415, 0.000001220589364, -0.000000054526331, -0.000000014489078, 0.000000004601510, -0.000000000724727, 0.000000000056049, 0.000000000005337, -0.000000000002779, 0.000000000000533, -0.000000000000054, -0.000000000000002, 0.000000000000002 }; /* Chebyshev expansion: j_{nu,11} = c_k T_k*(nu/22), nu <= 22 */ static const double coef_jnu11_a[] = { 49.5054081076848637, 15.33692279367165101, -0.33677234163517130, 0.04623235772920729, -0.00781084960665093, 0.00147217395434708, -0.00029695043846867, 0.00006273356860235, -0.00001370575125628, 3.07171282012e-6, -7.0235041249e-7, 1.6320559339e-7, -3.843117306e-8, 9.15083800e-9, -2.19957642e-9, 5.3301703e-10, -1.3007541e-10, 3.193827e-11, -7.88605e-12, 1.95918e-12, -4.9020e-13, 1.2207e-13, -2.820e-14, 5.25e-15, -1.88e-15, 2.80e-15, -2.45e-15 }; /* Chebyshev expansion: j_{nu,12} = c_k T_k*(nu/24), nu <= 24 */ static const double coef_jnu12_a[] = { 54.0787833216641519, 16.7336367772863598, -0.36718411124537953, 0.05035523375053820, -0.00849884978867533, 0.00160027692813434, -0.00032248114889921, 0.00006806354127199, -0.00001485665901339, 3.32668783672e-6, -7.5998952729e-7, 1.7644939709e-7, -4.151538210e-8, 9.87722772e-9, -2.37230133e-9, 5.7442875e-10, -1.4007767e-10, 3.437166e-11, -8.48215e-12, 2.10554e-12, -5.2623e-13, 1.3189e-13, -3.175e-14, 5.73e-15, 5.6e-16, -8.7e-16, -6.5e-16 }; /* Chebyshev expansion: j_{nu,13} = c_k T_k*(nu/26), nu <= 26 */ static const double coef_jnu13_a[] = { 58.6521941921708890, 18.1303398137970284, -0.39759381380126650, 0.05447765240465494, -0.00918674227679980, 0.00172835361420579, -0.00034800528297612, 0.00007339183835188, -0.00001600713368099, 3.58154960392e-6, -8.1759873497e-7, 1.8968523220e-7, -4.459745253e-8, 1.060304419e-8, -2.54487624e-9, 6.1580214e-10, -1.5006751e-10, 3.679707e-11, -9.07159e-12, 2.24713e-12, -5.5943e-13, 1.4069e-13, -3.679e-14, 1.119e-14, -4.99e-15, 3.43e-15, -2.85e-15, 2.3e-15, -1.7e-15, 8.7e-16 }; /* Chebyshev expansion: j_{nu,14} = c_k T_k*(nu/28), nu <= 28 */ static const double coef_jnu14_a[] = { 63.2256329577315566, 19.5270342832914901, -0.42800190567884337, 0.05859971627729398, -0.00987455163523582, 0.00185641011402081, -0.00037352439419968, 0.00007871886257265, -0.00001715728110045, 3.83632624437e-6, -8.7518558668e-7, 2.0291515353e-7, -4.767795233e-8, 1.132844415e-8, -2.71734219e-9, 6.5714886e-10, -1.6005342e-10, 3.922557e-11, -9.66637e-12, 2.39379e-12, -5.9541e-13, 1.4868e-13, -3.726e-14, 9.37e-15, -2.36e-15, 6.0e-16 }; /* Chebyshev expansion: j_{nu,15} = c_k T_k*(nu/30), nu <= 30 */ static const double coef_jnu15_a[] = { 67.7990939565631635, 20.9237219226859859, -0.45840871823085836, 0.06272149946755639, -0.01056229551143042, 0.00198445078693100, -0.00039903958650729, 0.00008404489865469, -0.00001830717574922, 4.09103745566e-6, -9.3275533309e-7, 2.1614056403e-7, -5.075725222e-8, 1.205352081e-8, -2.88971837e-9, 6.9846848e-10, -1.7002946e-10, 4.164941e-11, -1.025859e-11, 2.53921e-12, -6.3128e-13, 1.5757e-13, -3.947e-14, 9.92e-15, -2.50e-15, 6.3e-16 }; /* Chebyshev expansion: j_{nu,16} = c_k T_k*(nu/32), nu <= 32 */ static const double coef_jnu16_a[] = { 72.3725729616724770, 22.32040402918608585, -0.48881449782358690, 0.06684305681828766, -0.01124998690363398, 0.00211247882775445, -0.00042455166484632, 0.00008937015316346, -0.00001945687139551, 4.34569739281e-6, -9.9031173548e-7, 2.2936247195e-7, -5.383562595e-8, 1.277835103e-8, -3.06202860e-9, 7.3977037e-10, -1.8000071e-10, 4.407196e-11, -1.085046e-11, 2.68453e-12, -6.6712e-13, 1.6644e-13, -4.168e-14, 1.047e-14, -2.64e-15, 6.7e-16 }; /* Chebyshev expansion: j_{nu,17} = c_k T_k*(nu/34), nu <= 34 */ static const double coef_jnu17_a[] = { 76.9460667535209549, 23.71708159112252670, -0.51921943142405352, 0.07096442978067622, -0.01193763559341369, 0.00224049662974902, -0.00045006122941781, 0.00009469477941684, -0.00002060640777107, 4.60031647195e-6, -1.04785755046e-6, 2.4258161247e-7, -5.691327087e-8, 1.350298805e-8, -3.23428733e-9, 7.8105847e-10, -1.8996825e-10, 4.649350e-11, -1.144205e-11, 2.82979e-12, -7.0294e-13, 1.7531e-13, -4.388e-14, 1.102e-14, -2.78e-15, 7.0e-16 }; /* Chebyshev expansion: j_{nu,18} = c_k T_k*(nu/36), nu <= 36 */ static const double coef_jnu18_a[] = { 81.5195728368096659, 25.11375537470259305, -0.54962366347317668, 0.07508565026117689, -0.01262524908033818, 0.00236850602019778, -0.00047556873651929, 0.00010001889347161, -0.00002175581482429, 4.85490251239e-6, -1.10539483940e-6, 2.5579853343e-7, -5.999033352e-8, 1.422747129e-8, -3.40650521e-9, 8.2233565e-10, -1.9993286e-10, 4.891426e-11, -1.203343e-11, 2.97498e-12, -7.3875e-13, 1.8418e-13, -4.608e-14, 1.157e-14, -2.91e-15, 7.4e-16 }; /* Chebyshev expansion: j_{nu,19} = c_k T_k*(nu/38), nu <= 38 */ static const double coef_jnu19_a[] = { 86.0930892477047512, 26.51042598308271729, -0.58002730731948358, 0.07920674321589394, -0.01331283320930301, 0.00249650841778073, -0.00050107453900793, 0.00010534258471335, -0.00002290511552874, 5.10946148897e-6, -1.16292517157e-6, 2.6901365037e-7, -6.306692473e-8, 1.495183048e-8, -3.57869025e-9, 8.6360410e-10, -2.0989514e-10, 5.133439e-11, -1.262465e-11, 3.12013e-12, -7.7455e-13, 1.9304e-13, -4.829e-14, 1.212e-14, -3.05e-15, 7.7e-16 }; /* Chebyshev expansion: j_{nu,20} = c_k T_k*(nu/40), nu <= 40 */ static const double coef_jnu20_a[] = { 90.6666144195163770, 27.9070938975436823, -0.61043045315390591, 0.08332772844325554, -0.01400039260208282, 0.00262450494035660, -0.00052657891389470, 0.00011066592304919, -0.00002405432778364, 5.36399803946e-6, -1.22044976064e-6, 2.8222728362e-7, -6.614312964e-8, 1.567608839e-8, -3.75084856e-9, 9.0486546e-10, -2.1985553e-10, 5.375401e-11, -1.321572e-11, 3.26524e-12, -8.1033e-13, 2.0190e-13, -5.049e-14, 1.267e-14, -3.19e-15, 8.0e-16, -2.0e-16 }; static const double * coef_jnu_a[] = { 0, coef_jnu1_a, coef_jnu2_a, coef_jnu3_a, coef_jnu4_a, coef_jnu5_a, coef_jnu6_a, coef_jnu7_a, coef_jnu8_a, coef_jnu9_a, coef_jnu10_a, coef_jnu11_a, coef_jnu12_a, coef_jnu13_a, coef_jnu14_a, coef_jnu15_a, coef_jnu16_a, coef_jnu17_a, coef_jnu18_a, coef_jnu19_a, coef_jnu20_a }; static const size_t size_jnu_a[] = { 0, sizeof(coef_jnu1_a)/sizeof(double), sizeof(coef_jnu2_a)/sizeof(double), sizeof(coef_jnu3_a)/sizeof(double), sizeof(coef_jnu4_a)/sizeof(double), sizeof(coef_jnu5_a)/sizeof(double), sizeof(coef_jnu6_a)/sizeof(double), sizeof(coef_jnu7_a)/sizeof(double), sizeof(coef_jnu8_a)/sizeof(double), sizeof(coef_jnu9_a)/sizeof(double), sizeof(coef_jnu10_a)/sizeof(double), sizeof(coef_jnu11_a)/sizeof(double), sizeof(coef_jnu12_a)/sizeof(double), sizeof(coef_jnu13_a)/sizeof(double), sizeof(coef_jnu14_a)/sizeof(double), sizeof(coef_jnu15_a)/sizeof(double), sizeof(coef_jnu16_a)/sizeof(double), sizeof(coef_jnu17_a)/sizeof(double), sizeof(coef_jnu18_a)/sizeof(double), sizeof(coef_jnu19_a)/sizeof(double), sizeof(coef_jnu20_a)/sizeof(double) }; static const double * coef_jnu_b[] = { 0, coef_jnu1_b, coef_jnu2_b, coef_jnu3_b, coef_jnu4_b, coef_jnu5_b, coef_jnu6_b, coef_jnu7_b, coef_jnu8_b, coef_jnu9_b, coef_jnu10_b }; static const size_t size_jnu_b[] = { 0, sizeof(coef_jnu1_b)/sizeof(double), sizeof(coef_jnu2_b)/sizeof(double), sizeof(coef_jnu3_b)/sizeof(double), sizeof(coef_jnu4_b)/sizeof(double), sizeof(coef_jnu5_b)/sizeof(double), sizeof(coef_jnu6_b)/sizeof(double), sizeof(coef_jnu7_b)/sizeof(double), sizeof(coef_jnu8_b)/sizeof(double), sizeof(coef_jnu9_b)/sizeof(double), sizeof(coef_jnu10_b)/sizeof(double) }; /* Evaluate Clenshaw recurrence for * a T* Chebyshev series. * sizeof(c) = N+1 */ static double clenshaw(const double * c, int N, double u) { double B_np1 = 0.0; double B_n = c[N]; double B_nm1; int n; for(n=N; n>0; n--) { B_nm1 = 2.0*(2.0*u-1.0) * B_n - B_np1 + c[n-1]; B_np1 = B_n; B_n = B_nm1; } return B_n - (2.0*u-1.0)*B_np1; } /* correction terms to leading McMahon expansion * [Abramowitz+Stegun 9.5.12] * [Olver, Royal Society Math. Tables, v. 7] * We factor out a beta, so that this is a multiplicative * correction: * j_{nu,s} = beta(s,nu) * mcmahon_correction(nu, beta(s,nu)) * macmahon_correction --> 1 as s --> Inf */ static double mcmahon_correction(const double mu, const double beta) { const double eb = 8.0*beta; const double ebsq = eb*eb; if(mu < GSL_DBL_EPSILON) { /* Prevent division by zero below. */ const double term1 = 1.0/ebsq; const double term2 = -4.0*31.0/(3*ebsq*ebsq); const double term3 = 32.0*3779.0/(15.0*ebsq*ebsq*ebsq); const double term4 = -64.0*6277237.0/(105.0*ebsq*ebsq*ebsq*ebsq); const double term5 = 512.0*2092163573.0/(315.0*ebsq*ebsq*ebsq*ebsq*ebsq); return 1.0 + 8.0*(term1 + term2 + term3 + term4 + term5); } else { /* Here we do things in terms of 1/mu, which * is purely to prevent overflow in the very * unlikely case that mu is really big. */ const double mi = 1.0/mu; const double r = mu/ebsq; const double n2 = 4.0/3.0 * (7.0 - 31.0*mi); const double n3 = 32.0/15.0 * (83.0 + (-982.0 + 3779.0*mi)*mi); const double n4 = 64.0/105.0 * (6949.0 + (-153855.0 + (1585743.0 - 6277237.0*mi)*mi)*mi); const double n5 = 512.0/315.0 * (70197.0 + (-2479316.0 + (48010494.0 + (-512062548.0 + 2092163573.0*mi)*mi)*mi)*mi); const double n6 = 2048.0/3465.0 * (5592657.0 + (-287149133.0 + (8903961290.0 + (-179289628602.0 + (1982611456181.0 - 8249725736393.0*mi)*mi)*mi)*mi)*mi); const double term1 = (1.0 - mi) * r; const double term2 = term1 * n2 * r; const double term3 = term1 * n3 * r*r; const double term4 = term1 * n4 * r*r*r; const double term5 = term1 * n5 * r*r*r*r; const double term6 = term1 * n6 * r*r*r*r*r; return 1.0 - 8.0*(term1 + term2 + term3 + term4 + term5 + term6); } } /* Assumes z >= 1.0 */ static double olver_b0(double z, double minus_zeta) { if(z < 1.02) { const double a = 1.0-z; const double c0 = 0.0179988721413553309252458658183; const double c1 = 0.0111992982212877614645974276203; const double c2 = 0.0059404069786014304317781160605; const double c3 = 0.0028676724516390040844556450173; const double c4 = 0.0012339189052567271708525111185; const double c5 = 0.0004169250674535178764734660248; const double c6 = 0.0000330173385085949806952777365; const double c7 = -0.0001318076238578203009990106425; const double c8 = -0.0001906870370050847239813945647; return c0 + a*(c1 + a*(c2 + a*(c3 + a*(c4 + a*(c5 + a*(c6 + a*(c7 + a*c8))))))); } else { const double abs_zeta = minus_zeta; const double t = 1.0/(z*sqrt(1.0 - 1.0/(z*z))); return -5.0/(48.0*abs_zeta*abs_zeta) + t*(3.0 + 5.0*t*t)/(24.0*sqrt(abs_zeta)); } } inline static double olver_f1(double z, double minus_zeta) { const double b0 = olver_b0(z, minus_zeta); const double h2 = sqrt(4.0*minus_zeta/(z*z-1.0)); /* FIXME */ return 0.5 * z * h2 * b0; } int gsl_sf_bessel_zero_J0_e(unsigned int s, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(s == 0){ result->val = 0.0; result->err = 0.0; GSL_ERROR ("error", GSL_EINVAL); } else { /* See [F. Lether, J. Comp. Appl .Math. 67, 167 (1996)]. */ static const double P[] = { 1567450796.0/12539606369.0, 8903660.0/2365861.0, 10747040.0/536751.0, 17590991.0/1696654.0 }; static const double Q[] = { 1.0, 29354255.0/954518.0, 76900001.0/431847.0, 67237052.0/442411.0 }; const double beta = (s - 0.25) * M_PI; const double bi2 = 1.0/(beta*beta); const double R33num = P[0] + bi2 * (P[1] + bi2 * (P[2] + P[3] * bi2)); const double R33den = Q[0] + bi2 * (Q[1] + bi2 * (Q[2] + Q[3] * bi2)); const double R33 = R33num/R33den; result->val = beta + R33/beta; result->err = fabs(3.0e-15 * result->val); return GSL_SUCCESS; } } int gsl_sf_bessel_zero_J1_e(unsigned int s, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(s == 0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { /* See [M. Branders et al., J. Comp. Phys. 42, 403 (1981)]. */ static const double a[] = { -0.362804405737084, 0.120341279038597, 0.439454547101171e-01, 0.159340088474713e-02 }; static const double b[] = { 1.0, -0.325641790801361, -0.117453445968927, -0.424906902601794e-02 }; const double beta = (s + 0.25) * M_PI; const double bi2 = 1.0/(beta*beta); const double Rnum = a[3] + bi2 * (a[2] + bi2 * (a[1] + bi2 * a[0])); const double Rden = b[3] + bi2 * (b[2] + bi2 * (b[1] + bi2 * b[0])); const double R = Rnum/Rden; result->val = beta * (1.0 + R*bi2); result->err = fabs(2.0e-14 * result->val); return GSL_SUCCESS; } } int gsl_sf_bessel_zero_Jnu_e(double nu, unsigned int s, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(nu <= -1.0) { DOMAIN_ERROR(result); } else if(s == 0) { result->val = 0.0; result->err = 0.0; if (nu == 0.0) { GSL_ERROR ("no zero-th root for nu = 0.0", GSL_EINVAL); } return GSL_SUCCESS; } else if(nu < 0.0) { /* This can be done, I'm just lazy now. */ result->val = 0.0; result->err = 0.0; GSL_ERROR("unimplemented", GSL_EUNIMPL); } else if(s == 1) { /* Chebyshev fits for the first positive zero. * For some reason Nemeth made this different from the others. */ if(nu < 2.0) { const double * c = coef_jnu_a[s]; const size_t L = size_jnu_a[s]; const double arg = nu/2.0; const double chb = clenshaw(c, L-1, arg); result->val = chb; result->err = 2.0e-15 * result->val; } else { const double * c = coef_jnu_b[s]; const size_t L = size_jnu_b[s]; const double arg = pow(2.0/nu, 2.0/3.0); const double chb = clenshaw(c, L-1, arg); result->val = nu * chb; result->err = 2.0e-15 * result->val; } return GSL_SUCCESS; } else if(s <= 10) { /* Chebyshev fits for the first 10 positive zeros. */ if(nu < s) { const double * c = coef_jnu_a[s]; const size_t L = size_jnu_a[s]; const double arg = nu/s; const double chb = clenshaw(c, L-1, arg); result->val = chb; result->err = 2.0e-15 * result->val; } else { const double * c = coef_jnu_b[s]; const size_t L = size_jnu_b[s]; const double arg = pow(s/nu, 2.0/3.0); const double chb = clenshaw(c, L-1, arg); result->val = nu * chb; result->err = 2.0e-15 * result->val; /* FIXME: truth in advertising for the screwed up * s = 5 fit. Need to fix that. */ if(s == 5) { result->err *= 5.0e+06; } } return GSL_SUCCESS; } else if(s > 0.5*nu && s <= 20) { /* Chebyshev fits for 10 < s <= 20. */ const double * c = coef_jnu_a[s]; const size_t L = size_jnu_a[s]; const double arg = nu/(2.0*s); const double chb = clenshaw(c, L-1, arg); result->val = chb; result->err = 4.0e-15 * chb; return GSL_SUCCESS; } else if(s > 2.0 * nu) { /* McMahon expansion if s is large compared to nu. */ const double beta = (s + 0.5*nu - 0.25) * M_PI; const double mc = mcmahon_correction(4.0*nu*nu, beta); gsl_sf_result rat12; gsl_sf_pow_int_e(nu/beta, 14, &rat12); result->val = beta * mc; result->err = 4.0 * fabs(beta) * rat12.val; result->err += 4.0 * fabs(GSL_DBL_EPSILON * result->val); return GSL_SUCCESS; } else { /* Olver uniform asymptotic. */ gsl_sf_result as; const int stat_as = gsl_sf_airy_zero_Ai_e(s, &as); const double minus_zeta = -pow(nu,-2.0/3.0) * as.val; const double z = gsl_sf_bessel_Olver_zofmzeta(minus_zeta); const double f1 = olver_f1(z, minus_zeta); result->val = nu * (z + f1/(nu*nu)); result->err = 0.001/(nu*nu*nu); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_as; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_zero_J0(unsigned int s) { EVAL_RESULT(gsl_sf_bessel_zero_J0_e(s, &result)); } double gsl_sf_bessel_zero_J1(unsigned int s) { EVAL_RESULT(gsl_sf_bessel_zero_J1_e(s, &result)); } double gsl_sf_bessel_zero_Jnu(double nu, unsigned int s) { EVAL_RESULT(gsl_sf_bessel_zero_Jnu_e(nu, s, &result)); } gsl/specfunc/mathieu_radfunc.c0000644000175000017500000003023213536675317015045 0ustar eddedd/* specfunc/mathieu_radfunc.c * * Copyright (C) 2002 Lowell Johnson * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Author: L. Johnson */ #include #include #include #include #include #include int gsl_sf_mathieu_Mc_e(int kind, int order, double qq, double zz, gsl_sf_result *result) { int even_odd, kk, status; double maxerr = 1e-14, amax, pi = M_PI, fn, factor; double coeff[GSL_SF_MATHIEU_COEFF], fc; double j1c, z2c, j1pc, z2pc; double u1, u2; gsl_sf_result aa; /* Check for out of bounds parameters. */ if (qq <= 0.0) { GSL_ERROR("q must be greater than zero", GSL_EINVAL); } if (kind < 1 || kind > 2) { GSL_ERROR("kind must be 1 or 2", GSL_EINVAL); } amax = 0.0; fn = 0.0; u1 = sqrt(qq)*exp(-1.0*zz); u2 = sqrt(qq)*exp(zz); even_odd = 0; if (order % 2 != 0) even_odd = 1; /* Compute the characteristic value. */ status = gsl_sf_mathieu_a_e(order, qq, &aa); if (status != GSL_SUCCESS) { return status; } /* Compute the series coefficients. */ status = gsl_sf_mathieu_a_coeff(order, qq, aa.val, coeff); if (status != GSL_SUCCESS) { return status; } if (even_odd == 0) { for (kk=0; kkval = fn; result->err = 2.0*GSL_DBL_EPSILON; factor = fabs(fn); if (factor > 1.0) result->err *= factor; return GSL_SUCCESS; } int gsl_sf_mathieu_Ms_e(int kind, int order, double qq, double zz, gsl_sf_result *result) { int even_odd, kk, status; double maxerr = 1e-14, amax, pi = M_PI, fn, factor; double coeff[GSL_SF_MATHIEU_COEFF], fc; double j1c, z2c, j1mc, z2mc, j1pc, z2pc; double u1, u2; gsl_sf_result aa; /* Check for out of bounds parameters. */ if (qq <= 0.0) { GSL_ERROR("q must be greater than zero", GSL_EINVAL); } if (kind < 1 || kind > 2) { GSL_ERROR("kind must be 1 or 2", GSL_EINVAL); } /* Handle the trivial cases where order = 0. */ if (order == 0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } amax = 0.0; fn = 0.0; u1 = sqrt(qq)*exp(-1.0*zz); u2 = sqrt(qq)*exp(zz); even_odd = 0; if (order % 2 != 0) even_odd = 1; /* Compute the characteristic value. */ status = gsl_sf_mathieu_b_e(order, qq, &aa); if (status != GSL_SUCCESS) { return status; } /* Compute the series coefficients. */ status = gsl_sf_mathieu_b_coeff(order, qq, aa.val, coeff); if (status != GSL_SUCCESS) { return status; } if (even_odd == 0) { for (kk=0; kkval = fn; result->err = 2.0*GSL_DBL_EPSILON; factor = fabs(fn); if (factor > 1.0) result->err *= factor; return GSL_SUCCESS; } int gsl_sf_mathieu_Mc_array(int kind, int nmin, int nmax, double qq, double zz, gsl_sf_mathieu_workspace *work, double result_array[]) { int even_odd, order, ii, kk, status; double maxerr = 1e-14, amax, pi = M_PI, fn; double coeff[GSL_SF_MATHIEU_COEFF], fc; double j1c, z2c, j1pc, z2pc; double u1, u2; double *aa = work->aa; /* Initialize the result array to zeroes. */ for (ii=0; ii 2) { GSL_ERROR("kind must be 1 or 2", GSL_EINVAL); } amax = 0.0; u1 = sqrt(qq)*exp(-1.0*zz); u2 = sqrt(qq)*exp(zz); /* Compute all eigenvalues up to nmax. */ gsl_sf_mathieu_a_array(0, nmax, qq, work, aa); for (ii=0, order=nmin; order<=nmax; ii++, order++) { fn = 0.0; even_odd = 0; if (order % 2 != 0) even_odd = 1; /* Compute the series coefficients. */ status = gsl_sf_mathieu_a_coeff(order, qq, aa[order], coeff); if (status != GSL_SUCCESS) { return status; } if (even_odd == 0) { for (kk=0; kkbb; /* Initialize the result array to zeroes. */ for (ii=0; ii 2) { GSL_ERROR("kind must be 1 or 2", GSL_EINVAL); } amax = 0.0; u1 = sqrt(qq)*exp(-1.0*zz); u2 = sqrt(qq)*exp(zz); /* Compute all eigenvalues up to nmax. */ gsl_sf_mathieu_b_array(0, nmax, qq, work, bb); for (ii=0, order=nmin; order<=nmax; ii++, order++) { fn = 0.0; even_odd = 0; if (order % 2 != 0) even_odd = 1; /* Handle the trivial cases where order = 0. */ if (order == 0) { result_array[ii] = 0.0; continue; } /* Compute the series coefficients. */ status = gsl_sf_mathieu_b_coeff(order, qq, bb[order], coeff); if (status != GSL_SUCCESS) { return status; } if (even_odd == 0) { for (kk=0; kk #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Sin(x) with GSL semantics. This is actually important * because we want to control the error estimate, and trying * to guess the error for the standard library implementation * every time it is used would be a little goofy. */ int gsl_sf_sin_e(double x, gsl_sf_result * result); double gsl_sf_sin(const double x); /* Cos(x) with GSL semantics. */ int gsl_sf_cos_e(double x, gsl_sf_result * result); double gsl_sf_cos(const double x); /* Hypot(x,y) with GSL semantics. */ int gsl_sf_hypot_e(const double x, const double y, gsl_sf_result * result); double gsl_sf_hypot(const double x, const double y); /* Sin(z) for complex z * * exceptions: GSL_EOVRFLW */ int gsl_sf_complex_sin_e(const double zr, const double zi, gsl_sf_result * szr, gsl_sf_result * szi); /* Cos(z) for complex z * * exceptions: GSL_EOVRFLW */ int gsl_sf_complex_cos_e(const double zr, const double zi, gsl_sf_result * czr, gsl_sf_result * czi); /* Log(Sin(z)) for complex z * * exceptions: GSL_EDOM, GSL_ELOSS */ int gsl_sf_complex_logsin_e(const double zr, const double zi, gsl_sf_result * lszr, gsl_sf_result * lszi); /* Sinc(x) = sin(pi x) / (pi x) * * exceptions: none */ int gsl_sf_sinc_e(double x, gsl_sf_result * result); double gsl_sf_sinc(const double x); /* Log(Sinh(x)), x > 0 * * exceptions: GSL_EDOM */ int gsl_sf_lnsinh_e(const double x, gsl_sf_result * result); double gsl_sf_lnsinh(const double x); /* Log(Cosh(x)) * * exceptions: none */ int gsl_sf_lncosh_e(const double x, gsl_sf_result * result); double gsl_sf_lncosh(const double x); /* Convert polar to rectlinear coordinates. * * exceptions: GSL_ELOSS */ int gsl_sf_polar_to_rect(const double r, const double theta, gsl_sf_result * x, gsl_sf_result * y); /* Convert rectilinear to polar coordinates. * return argument in range [-pi, pi] * * exceptions: GSL_EDOM */ int gsl_sf_rect_to_polar(const double x, const double y, gsl_sf_result * r, gsl_sf_result * theta); /* Sin(x) for quantity with an associated error. */ int gsl_sf_sin_err_e(const double x, const double dx, gsl_sf_result * result); /* Cos(x) for quantity with an associated error. */ int gsl_sf_cos_err_e(const double x, const double dx, gsl_sf_result * result); /* Force an angle to lie in the range (-pi,pi]. * * exceptions: GSL_ELOSS */ int gsl_sf_angle_restrict_symm_e(double * theta); double gsl_sf_angle_restrict_symm(const double theta); /* Force an angle to lie in the range [0, 2pi) * * exceptions: GSL_ELOSS */ int gsl_sf_angle_restrict_pos_e(double * theta); double gsl_sf_angle_restrict_pos(const double theta); int gsl_sf_angle_restrict_symm_err_e(const double theta, gsl_sf_result * result); int gsl_sf_angle_restrict_pos_err_e(const double theta, gsl_sf_result * result); __END_DECLS #endif /* __GSL_SF_TRIG_H__ */ gsl/specfunc/gsl_sf_hyperg.h0000644000175000017500000001064513536674414014552 0ustar eddedd/* specfunc/gsl_sf_hyperg.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_HYPERG_H__ #define __GSL_SF_HYPERG_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Hypergeometric function related to Bessel functions * 0F1[c,x] = * Gamma[c] x^(1/2(1-c)) I_{c-1}(2 Sqrt[x]) * Gamma[c] (-x)^(1/2(1-c)) J_{c-1}(2 Sqrt[-x]) * * exceptions: GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_hyperg_0F1_e(double c, double x, gsl_sf_result * result); double gsl_sf_hyperg_0F1(const double c, const double x); /* Confluent hypergeometric function for integer parameters. * 1F1[m,n,x] = M(m,n,x) * * exceptions: */ int gsl_sf_hyperg_1F1_int_e(const int m, const int n, const double x, gsl_sf_result * result); double gsl_sf_hyperg_1F1_int(const int m, const int n, double x); /* Confluent hypergeometric function. * 1F1[a,b,x] = M(a,b,x) * * exceptions: */ int gsl_sf_hyperg_1F1_e(const double a, const double b, const double x, gsl_sf_result * result); double gsl_sf_hyperg_1F1(double a, double b, double x); /* Confluent hypergeometric function for integer parameters. * U(m,n,x) * * exceptions: */ int gsl_sf_hyperg_U_int_e(const int m, const int n, const double x, gsl_sf_result * result); double gsl_sf_hyperg_U_int(const int m, const int n, const double x); /* Confluent hypergeometric function for integer parameters. * U(m,n,x) * * exceptions: */ int gsl_sf_hyperg_U_int_e10_e(const int m, const int n, const double x, gsl_sf_result_e10 * result); /* Confluent hypergeometric function. * U(a,b,x) * * exceptions: */ int gsl_sf_hyperg_U_e(const double a, const double b, const double x, gsl_sf_result * result); double gsl_sf_hyperg_U(const double a, const double b, const double x); /* Confluent hypergeometric function. * U(a,b,x) * * exceptions: */ int gsl_sf_hyperg_U_e10_e(const double a, const double b, const double x, gsl_sf_result_e10 * result); /* Gauss hypergeometric function 2F1[a,b,c,x] * |x| < 1 * * exceptions: */ int gsl_sf_hyperg_2F1_e(double a, double b, const double c, const double x, gsl_sf_result * result); double gsl_sf_hyperg_2F1(double a, double b, double c, double x); /* Gauss hypergeometric function * 2F1[aR + I aI, aR - I aI, c, x] * |x| < 1 * * exceptions: */ int gsl_sf_hyperg_2F1_conj_e(const double aR, const double aI, const double c, const double x, gsl_sf_result * result); double gsl_sf_hyperg_2F1_conj(double aR, double aI, double c, double x); /* Renormalized Gauss hypergeometric function * 2F1[a,b,c,x] / Gamma[c] * |x| < 1 * * exceptions: */ int gsl_sf_hyperg_2F1_renorm_e(const double a, const double b, const double c, const double x, gsl_sf_result * result); double gsl_sf_hyperg_2F1_renorm(double a, double b, double c, double x); /* Renormalized Gauss hypergeometric function * 2F1[aR + I aI, aR - I aI, c, x] / Gamma[c] * |x| < 1 * * exceptions: */ int gsl_sf_hyperg_2F1_conj_renorm_e(const double aR, const double aI, const double c, const double x, gsl_sf_result * result); double gsl_sf_hyperg_2F1_conj_renorm(double aR, double aI, double c, double x); /* Mysterious hypergeometric function. The series representation * is a divergent hypergeometric series. However, for x < 0 we * have 2F0(a,b,x) = (-1/x)^a U(a,1+a-b,-1/x) * * exceptions: GSL_EDOM */ int gsl_sf_hyperg_2F0_e(const double a, const double b, const double x, gsl_sf_result * result); double gsl_sf_hyperg_2F0(const double a, const double b, const double x); __END_DECLS #endif /* __GSL_SF_HYPERG_H__ */ gsl/specfunc/cheb_eval.c0000644000175000017500000000122013536674414013607 0ustar eddedd static inline int cheb_eval_e(const cheb_series * cs, const double x, gsl_sf_result * result) { int j; double d = 0.0; double dd = 0.0; double y = (2.0*x - cs->a - cs->b) / (cs->b - cs->a); double y2 = 2.0 * y; double e = 0.0; for(j = cs->order; j>=1; j--) { double temp = d; d = y2*d - dd + cs->c[j]; e += fabs(y2*temp) + fabs(dd) + fabs(cs->c[j]); dd = temp; } { double temp = d; d = y*d - dd + 0.5 * cs->c[0]; e += fabs(y*temp) + fabs(dd) + 0.5 * fabs(cs->c[0]); } result->val = d; result->err = GSL_DBL_EPSILON * e + fabs(cs->c[cs->order]); return GSL_SUCCESS; } gsl/specfunc/legendre_poly.c0000644000175000017500000005123613536674414014543 0ustar eddedd/* specfunc/legendre_poly.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include #include #include "error.h" /* Calculate P_m^m(x) from the analytic result: * P_m^m(x) = (-1)^m (2m-1)!! (1-x^2)^(m/2) , m > 0 * = 1 , m = 0 */ static double legendre_Pmm(int m, double x) { if(m == 0) { return 1.0; } else { double p_mm = 1.0; double root_factor = sqrt(1.0-x)*sqrt(1.0+x); double fact_coeff = 1.0; int i; for(i=1; i<=m; i++) { p_mm *= -fact_coeff * root_factor; fact_coeff += 2.0; } return p_mm; } } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_legendre_P1_e(double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ { result->val = x; result->err = 0.0; return GSL_SUCCESS; } } int gsl_sf_legendre_P2_e(double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ { result->val = 0.5*(3.0*x*x - 1.0); result->err = GSL_DBL_EPSILON * (fabs(3.0*x*x) + 1.0); return GSL_SUCCESS; } } int gsl_sf_legendre_P3_e(double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ { result->val = 0.5*x*(5.0*x*x - 3.0); result->err = GSL_DBL_EPSILON * (fabs(result->val) + 0.5 * fabs(x) * (fabs(5.0*x*x) + 3.0)); return GSL_SUCCESS; } } int gsl_sf_legendre_Pl_e(const int l, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(l < 0 || x < -1.0 || x > 1.0) { DOMAIN_ERROR(result); } else if(l == 0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(l == 1) { result->val = x; result->err = 0.0; return GSL_SUCCESS; } else if(l == 2) { result->val = 0.5 * (3.0*x*x - 1.0); result->err = GSL_DBL_EPSILON * (fabs(3.0*x*x) + 1.0); /*result->err = 3.0 * GSL_DBL_EPSILON * fabs(result->val); removed this old bogus estimate [GJ] */ return GSL_SUCCESS; } else if(x == 1.0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(x == -1.0) { result->val = ( GSL_IS_ODD(l) ? -1.0 : 1.0 ); result->err = 0.0; return GSL_SUCCESS; } else if(l < 100000) { /* upward recurrence: l P_l = (2l-1) z P_{l-1} - (l-1) P_{l-2} */ double p_ellm2 = 1.0; /* P_0(x) */ double p_ellm1 = x; /* P_1(x) */ double p_ell = p_ellm1; double e_ellm2 = GSL_DBL_EPSILON; double e_ellm1 = fabs(x)*GSL_DBL_EPSILON; double e_ell = e_ellm1; int ell; for(ell=2; ell <= l; ell++){ p_ell = (x*(2*ell-1)*p_ellm1 - (ell-1)*p_ellm2) / ell; p_ellm2 = p_ellm1; p_ellm1 = p_ell; e_ell = 0.5*(fabs(x)*(2*ell-1.0) * e_ellm1 + (ell-1.0)*e_ellm2)/ell; e_ellm2 = e_ellm1; e_ellm1 = e_ell; } result->val = p_ell; result->err = e_ell + l*fabs(p_ell)*GSL_DBL_EPSILON; return GSL_SUCCESS; } else { /* Asymptotic expansion. * [Olver, p. 473] */ double u = l + 0.5; double th = acos(x); gsl_sf_result J0; gsl_sf_result Jm1; int stat_J0 = gsl_sf_bessel_J0_e(u*th, &J0); int stat_Jm1 = gsl_sf_bessel_Jn_e(-1, u*th, &Jm1); double pre; double B00; double c1; /* B00 = 1/8 (1 - th cot(th) / th^2 * pre = sqrt(th/sin(th)) */ if(th < GSL_ROOT4_DBL_EPSILON) { B00 = (1.0 + th*th/15.0)/24.0; pre = 1.0 + th*th/12.0; } else { double sin_th = sqrt(1.0 - x*x); double cot_th = x / sin_th; B00 = 1.0/8.0 * (1.0 - th * cot_th) / (th*th); pre = sqrt(th/sin_th); } c1 = th/u * B00; result->val = pre * (J0.val + c1 * Jm1.val); result->err = pre * (J0.err + fabs(c1) * Jm1.err); result->err += GSL_SQRT_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_J0, stat_Jm1); } } int gsl_sf_legendre_Pl_array(const int lmax, const double x, double * result_array) { /* CHECK_POINTER(result_array) */ if(lmax < 0 || x < -1.0 || x > 1.0) { GSL_ERROR ("domain error", GSL_EDOM); } else if(lmax == 0) { result_array[0] = 1.0; return GSL_SUCCESS; } else if(lmax == 1) { result_array[0] = 1.0; result_array[1] = x; return GSL_SUCCESS; } else { /* upward recurrence: l P_l = (2l-1) z P_{l-1} - (l-1) P_{l-2} */ double p_ellm2 = 1.0; /* P_0(x) */ double p_ellm1 = x; /* P_1(x) */ double p_ell = p_ellm1; int ell; result_array[0] = 1.0; result_array[1] = x; for(ell=2; ell <= lmax; ell++){ p_ell = (x*(2*ell-1)*p_ellm1 - (ell-1)*p_ellm2) / ell; p_ellm2 = p_ellm1; p_ellm1 = p_ell; result_array[ell] = p_ell; } return GSL_SUCCESS; } } int gsl_sf_legendre_Pl_deriv_array(const int lmax, const double x, double * result_array, double * result_deriv_array) { int stat_array = gsl_sf_legendre_Pl_array(lmax, x, result_array); if(lmax >= 0) result_deriv_array[0] = 0.0; if(lmax >= 1) result_deriv_array[1] = 1.0; if(stat_array == GSL_SUCCESS) { int ell; if(fabs(x - 1.0)*(lmax+1.0)*(lmax+1.0) < GSL_SQRT_DBL_EPSILON) { /* x is near 1 */ for(ell = 2; ell <= lmax; ell++) { const double pre = 0.5 * ell * (ell+1.0); result_deriv_array[ell] = pre * (1.0 - 0.25 * (1.0-x) * (ell+2.0)*(ell-1.0)); } } else if(fabs(x + 1.0)*(lmax+1.0)*(lmax+1.0) < GSL_SQRT_DBL_EPSILON) { /* x is near -1 */ for(ell = 2; ell <= lmax; ell++) { const double sgn = ( GSL_IS_ODD(ell) ? 1.0 : -1.0 ); /* derivative is odd in x for even ell */ const double pre = sgn * 0.5 * ell * (ell+1.0); result_deriv_array[ell] = pre * (1.0 - 0.25 * (1.0+x) * (ell+2.0)*(ell-1.0)); } } else { const double diff_a = 1.0 + x; const double diff_b = 1.0 - x; for(ell = 2; ell <= lmax; ell++) { result_deriv_array[ell] = - ell * (x * result_array[ell] - result_array[ell-1]) / (diff_a * diff_b); } } return GSL_SUCCESS; } else { return stat_array; } } int gsl_sf_legendre_Plm_e(const int l, const int m, const double x, gsl_sf_result * result) { /* If l is large and m is large, then we have to worry * about overflow. Calculate an approximate exponent which * measures the normalization of this thing. */ const double dif = l-m; const double sum = l+m; const double t_d = ( dif == 0.0 ? 0.0 : 0.5 * dif * (log(dif)-1.0) ); const double t_s = ( dif == 0.0 ? 0.0 : 0.5 * sum * (log(sum)-1.0) ); const double exp_check = 0.5 * log(2.0*l+1.0) + t_d - t_s; /* CHECK_POINTER(result) */ if(m < 0 || l < m || x < -1.0 || x > 1.0) { DOMAIN_ERROR(result); } else if(exp_check < GSL_LOG_DBL_MIN + 10.0){ /* Bail out. */ OVERFLOW_ERROR(result); } else { /* Account for the error due to the * representation of 1-x. */ const double err_amp = 1.0 / (GSL_DBL_EPSILON + fabs(1.0-fabs(x))); /* P_m^m(x) and P_{m+1}^m(x) */ double p_mm = legendre_Pmm(m, x); double p_mmp1 = x * (2*m + 1) * p_mm; if(l == m){ result->val = p_mm; result->err = err_amp * 2.0 * GSL_DBL_EPSILON * fabs(p_mm); return GSL_SUCCESS; } else if(l == m + 1) { result->val = p_mmp1; result->err = err_amp * 2.0 * GSL_DBL_EPSILON * fabs(p_mmp1); return GSL_SUCCESS; } else{ /* upward recurrence: (l-m) P(l,m) = (2l-1) z P(l-1,m) - (l+m-1) P(l-2,m) * start at P(m,m), P(m+1,m) */ double p_ellm2 = p_mm; double p_ellm1 = p_mmp1; double p_ell = 0.0; int ell; for(ell=m+2; ell <= l; ell++){ p_ell = (x*(2*ell-1)*p_ellm1 - (ell+m-1)*p_ellm2) / (ell-m); p_ellm2 = p_ellm1; p_ellm1 = p_ell; } result->val = p_ell; result->err = err_amp * (0.5*(l-m) + 1.0) * GSL_DBL_EPSILON * fabs(p_ell); return GSL_SUCCESS; } } } int gsl_sf_legendre_sphPlm_e(const int l, int m, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(m < 0 || l < m || x < -1.0 || x > 1.0) { DOMAIN_ERROR(result); } else if(m == 0) { gsl_sf_result P; int stat_P = gsl_sf_legendre_Pl_e(l, x, &P); double pre = sqrt((2.0*l + 1.0)/(4.0*M_PI)); result->val = pre * P.val; result->err = pre * P.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_P; } else if(x == 1.0 || x == -1.0) { /* m > 0 here */ result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { /* m > 0 and |x| < 1 here */ /* Starting value for recursion. * Y_m^m(x) = sqrt( (2m+1)/(4pi m) gamma(m+1/2)/gamma(m) ) (-1)^m (1-x^2)^(m/2) / pi^(1/4) */ gsl_sf_result lncirc; gsl_sf_result lnpoch; double lnpre_val; double lnpre_err; gsl_sf_result ex_pre; double sr; const double sgn = ( GSL_IS_ODD(m) ? -1.0 : 1.0); const double y_mmp1_factor = x * sqrt(2.0*m + 3.0); double y_mm, y_mm_err; double y_mmp1, y_mmp1_err; gsl_sf_log_1plusx_e(-x*x, &lncirc); gsl_sf_lnpoch_e(m, 0.5, &lnpoch); /* Gamma(m+1/2)/Gamma(m) */ lnpre_val = -0.25*M_LNPI + 0.5 * (lnpoch.val + m*lncirc.val); lnpre_err = 0.25*M_LNPI*GSL_DBL_EPSILON + 0.5 * (lnpoch.err + fabs(m)*lncirc.err); /* Compute exp(ln_pre) with error term, avoiding call to gsl_sf_exp_err BJG */ ex_pre.val = exp(lnpre_val); ex_pre.err = 2.0*(sinh(lnpre_err) + GSL_DBL_EPSILON)*ex_pre.val; sr = sqrt((2.0+1.0/m)/(4.0*M_PI)); y_mm = sgn * sr * ex_pre.val; y_mm_err = 2.0 * GSL_DBL_EPSILON * fabs(y_mm) + sr * ex_pre.err; y_mm_err *= 1.0 + 1.0/(GSL_DBL_EPSILON + fabs(1.0-x)); y_mmp1 = y_mmp1_factor * y_mm; y_mmp1_err=fabs(y_mmp1_factor) * y_mm_err; if(l == m){ result->val = y_mm; result->err = y_mm_err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(y_mm); return GSL_SUCCESS; } else if(l == m + 1) { result->val = y_mmp1; result->err = y_mmp1_err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(y_mmp1); return GSL_SUCCESS; } else{ double y_ell = 0.0; double y_ell_err = 0.0; int ell; /* Compute Y_l^m, l > m+1, upward recursion on l. */ for(ell=m+2; ell <= l; ell++){ const double rat1 = (double)(ell-m)/(double)(ell+m); const double rat2 = (ell-m-1.0)/(ell+m-1.0); const double factor1 = sqrt(rat1*(2.0*ell+1.0)*(2.0*ell-1.0)); const double factor2 = sqrt(rat1*rat2*(2.0*ell+1.0)/(2.0*ell-3.0)); y_ell = (x*y_mmp1*factor1 - (ell+m-1.0)*y_mm*factor2) / (ell-m); y_mm = y_mmp1; y_mmp1 = y_ell; y_ell_err = 0.5*(fabs(x*factor1)*y_mmp1_err + fabs((ell+m-1.0)*factor2)*y_mm_err) / fabs(ell-m); y_mm_err = y_mmp1_err; y_mmp1_err = y_ell_err; } result->val = y_ell; result->err = y_ell_err + (0.5*(l-m) + 1.0) * GSL_DBL_EPSILON * fabs(y_ell); return GSL_SUCCESS; } } } #ifndef GSL_DISABLE_DEPRECATED int gsl_sf_legendre_Plm_array(const int lmax, const int m, const double x, double * result_array) { /* If l is large and m is large, then we have to worry * about overflow. Calculate an approximate exponent which * measures the normalization of this thing. */ const double dif = lmax-m; const double sum = lmax+m; const double t_d = ( dif == 0.0 ? 0.0 : 0.5 * dif * (log(dif)-1.0) ); const double t_s = ( dif == 0.0 ? 0.0 : 0.5 * sum * (log(sum)-1.0) ); const double exp_check = 0.5 * log(2.0*lmax+1.0) + t_d - t_s; /* CHECK_POINTER(result_array) */ if(m < 0 || lmax < m || x < -1.0 || x > 1.0) { GSL_ERROR ("domain error", GSL_EDOM); } else if(m > 0 && (x == 1.0 || x == -1.0)) { int ell; for(ell=m; ell<=lmax; ell++) result_array[ell-m] = 0.0; return GSL_SUCCESS; } else if(exp_check < GSL_LOG_DBL_MIN + 10.0){ /* Bail out. */ GSL_ERROR ("overflow", GSL_EOVRFLW); } else { double p_mm = legendre_Pmm(m, x); double p_mmp1 = x * (2.0*m + 1.0) * p_mm; if(lmax == m){ result_array[0] = p_mm; return GSL_SUCCESS; } else if(lmax == m + 1) { result_array[0] = p_mm; result_array[1] = p_mmp1; return GSL_SUCCESS; } else { double p_ellm2 = p_mm; double p_ellm1 = p_mmp1; double p_ell = 0.0; int ell; result_array[0] = p_mm; result_array[1] = p_mmp1; for(ell=m+2; ell <= lmax; ell++){ p_ell = (x*(2.0*ell-1.0)*p_ellm1 - (ell+m-1)*p_ellm2) / (ell-m); p_ellm2 = p_ellm1; p_ellm1 = p_ell; result_array[ell-m] = p_ell; } return GSL_SUCCESS; } } } int gsl_sf_legendre_Plm_deriv_array( const int lmax, const int m, const double x, double * result_array, double * result_deriv_array) { if(m < 0 || m > lmax) { GSL_ERROR("m < 0 or m > lmax", GSL_EDOM); } else if(m == 0) { /* It is better to do m=0 this way, so we can more easily * trap the divergent case which can occur when m == 1. */ return gsl_sf_legendre_Pl_deriv_array(lmax, x, result_array, result_deriv_array); } else { int stat_array = gsl_sf_legendre_Plm_array(lmax, m, x, result_array); if(stat_array == GSL_SUCCESS) { int ell; if(m == 1 && (1.0 - fabs(x) < GSL_DBL_EPSILON)) { /* This divergence is real and comes from the cusp-like * behaviour for m = 1. For example, P[1,1] = - Sqrt[1-x^2]. */ GSL_ERROR("divergence near |x| = 1.0 since m = 1", GSL_EOVRFLW); } else if(m == 2 && (1.0 - fabs(x) < GSL_DBL_EPSILON)) { /* m = 2 gives a finite nonzero result for |x| near 1 */ if(fabs(x - 1.0) < GSL_DBL_EPSILON) { for(ell = m; ell <= lmax; ell++) result_deriv_array[ell-m] = -0.25 * x * (ell - 1.0)*ell*(ell+1.0)*(ell+2.0); } else if(fabs(x + 1.0) < GSL_DBL_EPSILON) { for(ell = m; ell <= lmax; ell++) { const double sgn = ( GSL_IS_ODD(ell) ? 1.0 : -1.0 ); result_deriv_array[ell-m] = -0.25 * sgn * x * (ell - 1.0)*ell*(ell+1.0)*(ell+2.0); } } return GSL_SUCCESS; } else { /* m > 2 is easier to deal with since the endpoints always vanish */ if(1.0 - fabs(x) < GSL_DBL_EPSILON) { for(ell = m; ell <= lmax; ell++) result_deriv_array[ell-m] = 0.0; return GSL_SUCCESS; } else { const double diff_a = 1.0 + x; const double diff_b = 1.0 - x; result_deriv_array[0] = - m * x / (diff_a * diff_b) * result_array[0]; if(lmax-m >= 1) result_deriv_array[1] = (2.0 * m + 1.0) * (x * result_deriv_array[0] + result_array[0]); for(ell = m+2; ell <= lmax; ell++) { result_deriv_array[ell-m] = - (ell * x * result_array[ell-m] - (ell+m) * result_array[ell-1-m]) / (diff_a * diff_b); } return GSL_SUCCESS; } } } else { return stat_array; } } } int gsl_sf_legendre_sphPlm_array(const int lmax, int m, const double x, double * result_array) { /* CHECK_POINTER(result_array) */ if(m < 0 || lmax < m || x < -1.0 || x > 1.0) { GSL_ERROR ("error", GSL_EDOM); } else if(m > 0 && (x == 1.0 || x == -1.0)) { int ell; for(ell=m; ell<=lmax; ell++) result_array[ell-m] = 0.0; return GSL_SUCCESS; } else { double y_mm; double y_mmp1; if(m == 0) { y_mm = 0.5/M_SQRTPI; /* Y00 = 1/sqrt(4pi) */ y_mmp1 = x * M_SQRT3 * y_mm; } else { /* |x| < 1 here */ gsl_sf_result lncirc; gsl_sf_result lnpoch; double lnpre; const double sgn = ( GSL_IS_ODD(m) ? -1.0 : 1.0); gsl_sf_log_1plusx_e(-x*x, &lncirc); gsl_sf_lnpoch_e(m, 0.5, &lnpoch); /* Gamma(m+1/2)/Gamma(m) */ lnpre = -0.25*M_LNPI + 0.5 * (lnpoch.val + m*lncirc.val); y_mm = sqrt((2.0+1.0/m)/(4.0*M_PI)) * sgn * exp(lnpre); y_mmp1 = x * sqrt(2.0*m + 3.0) * y_mm; } if(lmax == m){ result_array[0] = y_mm; return GSL_SUCCESS; } else if(lmax == m + 1) { result_array[0] = y_mm; result_array[1] = y_mmp1; return GSL_SUCCESS; } else{ double y_ell; int ell; result_array[0] = y_mm; result_array[1] = y_mmp1; /* Compute Y_l^m, l > m+1, upward recursion on l. */ for(ell=m+2; ell <= lmax; ell++){ const double rat1 = (double)(ell-m)/(double)(ell+m); const double rat2 = (ell-m-1.0)/(ell+m-1.0); const double factor1 = sqrt(rat1*(2*ell+1)*(2*ell-1)); const double factor2 = sqrt(rat1*rat2*(2*ell+1)/(2*ell-3)); y_ell = (x*y_mmp1*factor1 - (ell+m-1)*y_mm*factor2) / (ell-m); y_mm = y_mmp1; y_mmp1 = y_ell; result_array[ell-m] = y_ell; } } return GSL_SUCCESS; } } int gsl_sf_legendre_sphPlm_deriv_array( const int lmax, const int m, const double x, double * result_array, double * result_deriv_array) { if(m < 0 || lmax < m || x < -1.0 || x > 1.0) { GSL_ERROR ("domain", GSL_EDOM); } else if(m == 0) { /* m = 0 is easy to trap */ const int stat_array = gsl_sf_legendre_Pl_deriv_array(lmax, x, result_array, result_deriv_array); int ell; for(ell = 0; ell <= lmax; ell++) { const double prefactor = sqrt((2.0 * ell + 1.0)/(4.0*M_PI)); result_array[ell] *= prefactor; result_deriv_array[ell] *= prefactor; } return stat_array; } else if(m == 1) { /* Trapping m = 1 is necessary because of the possible divergence. * Recall that this divergence is handled properly in ..._Plm_deriv_array(), * and the scaling factor is not large for small m, so we just scale. */ const int stat_array = gsl_sf_legendre_Plm_deriv_array(lmax, m, x, result_array, result_deriv_array); int ell; for(ell = 1; ell <= lmax; ell++) { const double prefactor = sqrt((2.0 * ell + 1.0)/(ell + 1.0) / (4.0*M_PI*ell)); result_array[ell-1] *= prefactor; result_deriv_array[ell-1] *= prefactor; } return stat_array; } else { /* as for the derivative of P_lm, everything is regular for m >= 2 */ int stat_array = gsl_sf_legendre_sphPlm_array(lmax, m, x, result_array); if(stat_array == GSL_SUCCESS) { int ell; if(1.0 - fabs(x) < GSL_DBL_EPSILON) { for(ell = m; ell <= lmax; ell++) result_deriv_array[ell-m] = 0.0; return GSL_SUCCESS; } else { const double diff_a = 1.0 + x; const double diff_b = 1.0 - x; result_deriv_array[0] = - m * x / (diff_a * diff_b) * result_array[0]; if(lmax-m >= 1) result_deriv_array[1] = sqrt(2.0 * m + 3.0) * (x * result_deriv_array[0] + result_array[0]); for(ell = m+2; ell <= lmax; ell++) { const double c1 = sqrt(((2.0*ell+1.0)/(2.0*ell-1.0)) * ((double)(ell-m)/(double)(ell+m))); result_deriv_array[ell-m] = - (ell * x * result_array[ell-m] - c1 * (ell+m) * result_array[ell-1-m]) / (diff_a * diff_b); } return GSL_SUCCESS; } } else { return stat_array; } } } int gsl_sf_legendre_array_size(const int lmax, const int m) { return lmax-m+1; } #endif /* !GSL_DISABLE_DEPRECATED */ /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_legendre_P1(const double x) { EVAL_RESULT(gsl_sf_legendre_P1_e(x, &result)); } double gsl_sf_legendre_P2(const double x) { EVAL_RESULT(gsl_sf_legendre_P2_e(x, &result)); } double gsl_sf_legendre_P3(const double x) { EVAL_RESULT(gsl_sf_legendre_P3_e(x, &result)); } double gsl_sf_legendre_Pl(const int l, const double x) { EVAL_RESULT(gsl_sf_legendre_Pl_e(l, x, &result)); } double gsl_sf_legendre_Plm(const int l, const int m, const double x) { EVAL_RESULT(gsl_sf_legendre_Plm_e(l, m, x, &result)); } double gsl_sf_legendre_sphPlm(const int l, const int m, const double x) { EVAL_RESULT(gsl_sf_legendre_sphPlm_e(l, m, x, &result)); } gsl/specfunc/gsl_sf_ellint.h0000644000175000017500000001007713536674414014542 0ustar eddedd/* specfunc/gsl_sf_ellint.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_ELLINT_H__ #define __GSL_SF_ELLINT_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Legendre form of complete elliptic integrals * * K(k) = Integral[1/Sqrt[1 - k^2 Sin[t]^2], {t, 0, Pi/2}] * E(k) = Integral[ Sqrt[1 - k^2 Sin[t]^2], {t, 0, Pi/2}] * * exceptions: GSL_EDOM */ int gsl_sf_ellint_Kcomp_e(double k, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_ellint_Kcomp(double k, gsl_mode_t mode); int gsl_sf_ellint_Ecomp_e(double k, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_ellint_Ecomp(double k, gsl_mode_t mode); int gsl_sf_ellint_Pcomp_e(double k, double n, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_ellint_Pcomp(double k, double n, gsl_mode_t mode); int gsl_sf_ellint_Dcomp_e(double k, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_ellint_Dcomp(double k, gsl_mode_t mode); /* Legendre form of incomplete elliptic integrals * * F(phi,k) = Integral[1/Sqrt[1 - k^2 Sin[t]^2], {t, 0, phi}] * E(phi,k) = Integral[ Sqrt[1 - k^2 Sin[t]^2], {t, 0, phi}] * P(phi,k,n) = Integral[(1 + n Sin[t]^2)^(-1)/Sqrt[1 - k^2 Sin[t]^2], {t, 0, phi}] * D(phi,k,n) = R_D(1-Sin[phi]^2, 1-k^2 Sin[phi]^2, 1.0) * * F: [Carlson, Numerische Mathematik 33 (1979) 1, (4.1)] * E: [Carlson, ", (4.2)] * P: [Carlson, ", (4.3)] * D: [Carlson, ", (4.4)] * * exceptions: GSL_EDOM */ int gsl_sf_ellint_F_e(double phi, double k, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_ellint_F(double phi, double k, gsl_mode_t mode); int gsl_sf_ellint_E_e(double phi, double k, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_ellint_E(double phi, double k, gsl_mode_t mode); int gsl_sf_ellint_P_e(double phi, double k, double n, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_ellint_P(double phi, double k, double n, gsl_mode_t mode); int gsl_sf_ellint_D_e(double phi, double k, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_ellint_D(double phi, double k, gsl_mode_t mode); /* Carlson's symmetric basis of functions * * RC(x,y) = 1/2 Integral[(t+x)^(-1/2) (t+y)^(-1)], {t,0,Inf}] * RD(x,y,z) = 3/2 Integral[(t+x)^(-1/2) (t+y)^(-1/2) (t+z)^(-3/2), {t,0,Inf}] * RF(x,y,z) = 1/2 Integral[(t+x)^(-1/2) (t+y)^(-1/2) (t+z)^(-1/2), {t,0,Inf}] * RJ(x,y,z,p) = 3/2 Integral[(t+x)^(-1/2) (t+y)^(-1/2) (t+z)^(-1/2) (t+p)^(-1), {t,0,Inf}] * * exceptions: GSL_EDOM */ int gsl_sf_ellint_RC_e(double x, double y, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_ellint_RC(double x, double y, gsl_mode_t mode); int gsl_sf_ellint_RD_e(double x, double y, double z, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_ellint_RD(double x, double y, double z, gsl_mode_t mode); int gsl_sf_ellint_RF_e(double x, double y, double z, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_ellint_RF(double x, double y, double z, gsl_mode_t mode); int gsl_sf_ellint_RJ_e(double x, double y, double z, double p, gsl_mode_t mode, gsl_sf_result * result); double gsl_sf_ellint_RJ(double x, double y, double z, double p, gsl_mode_t mode); __END_DECLS #endif /* __GSL_SF_ELLINT_H__ */ gsl/specfunc/bessel_K1.c0000644000175000017500000001373513536674414013525 0ustar eddedd/* specfunc/bessel_K1.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * Copyright (C) 2016 Pavel Holoborodko, Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include "error.h" #include "chebyshev.h" #include "cheb_eval.c" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* Minimax rational approximation for [0,1), peak relative error = 1.83*GSL_DBL_EPSILON. Source: http://www.advanpix.com/?p=3987 */ static double k1_poly[9] = { -3.0796575782920622440538935e-01, -8.5370719728650778045782736e-02, -4.6421827664715603298154971e-03, -1.1253607036630425931072996e-04, -1.5592887702110907110292728e-06, -1.4030163679125934402498239e-08, -8.8718998640336832196558868e-11, -4.1614323580221539328960335e-13, -1.5261293392975541707230366e-15 }; static double i1_poly[7] = { 8.3333333333333325191635191e-02, 6.9444444444467956461838830e-03, 3.4722222211230452695165215e-04, 1.1574075952009842696580084e-05, 2.7555870002088181016676934e-07, 4.9724386164128529514040614e-09 }; /* Chebyshev expansion for [1,8], peak relative error = 1.28*GSL_DBL_EPSILON. Source: Pavel Holoborodko. */ static double ak1_data[25] = { +2.07996868001418246e-01, +1.62581565017881476e-01, -5.87070423518863640e-03, +4.95021520115789501e-04, -5.78958347598556986e-05, +8.18614610209334726e-06, -1.31604832009487277e-06, +2.32546031520101213e-07, -4.42206518311557987e-08, +8.92163994883100361e-09, -1.89046270526983427e-09, +4.17568808108504702e-10, -9.55912361791375794e-11, +2.25769353153867758e-11, -5.48128000211158482e-12, +1.36386122546441926e-12, -3.46936690565986409e-13, +9.00354564415705942e-14, -2.37950577776254432e-14, +6.39447503964025336e-15, -1.74498363492322044e-15, +4.82994547989290473e-16, -1.35460927805445606e-16, +3.84604274446777234e-17, -1.10456856122581316e-17 }; static cheb_series ak1_cs = { ak1_data, 24, -1, 1, 9 }; /* Chebyshev expansion for [8,inf), peak relative error = 1.25*GSL_DBL_EPSILON. Source: SLATEC/dbsk1e.f */ static double ak12_data[14] = { +.637930834373900104E-1, +.283288781304972094E-1, -.247537067390525035E-3, +.577197245160724882E-5, -.206893921953654830E-6, +.973998344138180418E-8, -.558533614038062498E-9, +.373299663404618524E-10, -.282505196102322545E-11, +.237201900248414417E-12, -.217667738799175398E-13, +.215791416161603245E-14, -.229019693071826928E-15, +.258288572982327496E-16 }; static cheb_series ak12_cs = { ak12_data, 13, -1, 1, 7 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_K1_scaled_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if(x < 2.0*GSL_DBL_MIN) { OVERFLOW_ERROR(result); } else if(x < 1.0) { const double lx = log(x); const double ex = exp(x); const double x2 = x*x; const double t = 0.25*x2; const double i1 = 0.5 * x * (1.0 + t * (0.5 + t * gsl_poly_eval(i1_poly,6,t))); result->val = ex * (x2 * gsl_poly_eval(k1_poly,9,x2) + x * lx * i1 + 1) / x; result->err = ex * (1.6+fabs(lx)*0.6) * GSL_DBL_EPSILON; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x <= 8.0) { const double sx = sqrt(x); gsl_sf_result c; cheb_eval_e(&ak1_cs, (16.0/x-9.0)/7.0, &c); result->val = (1.375 + c.val) / sx; /* 1.375 = 11/8 */ result->err = c.err / sx; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double sx = sqrt(x); gsl_sf_result c; cheb_eval_e(&ak12_cs, 16.0/x-1.0, &c); result->val = (1.25 + c.val) / sx; result->err = c.err / sx; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_bessel_K1_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if(x < 2.0*GSL_DBL_MIN) { OVERFLOW_ERROR(result); } else if(x < 1.0) { const double lx = log(x); const double x2 = x*x; const double t = 0.25*x2; const double i1 = 0.5 * x * (1.0 + t * (0.5 + t * gsl_poly_eval(i1_poly,6,t))); result->val = (x2 * gsl_poly_eval(k1_poly,9,x2) + x * lx * i1 + 1) / x; result->err = (1.6+fabs(lx)*0.6) * GSL_DBL_EPSILON; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { gsl_sf_result K1_scaled; int stat_K1 = gsl_sf_bessel_K1_scaled_e(x, &K1_scaled); int stat_e = gsl_sf_exp_mult_err_e(-x, 0.0, K1_scaled.val, K1_scaled.err, result); result->err = fabs(result->val) * (GSL_DBL_EPSILON*fabs(x) + K1_scaled.err/K1_scaled.val); return GSL_ERROR_SELECT_2(stat_e, stat_K1); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_K1_scaled(const double x) { EVAL_RESULT(gsl_sf_bessel_K1_scaled_e(x, &result)); } double gsl_sf_bessel_K1(const double x) { EVAL_RESULT(gsl_sf_bessel_K1_e(x, &result)); } gsl/specfunc/gsl_sf_clausen.h0000644000175000017500000000267313536674414014710 0ustar eddedd/* specfunc/gsl_sf_clausen.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_CLAUSEN_H__ #define __GSL_SF_CLAUSEN_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Calculate the Clausen integral: * Cl_2(x) := Integrate[-Log[2 Sin[t/2]], {t,0,x}] * * Relation to dilogarithm: * Cl_2(theta) = Im[ Li_2(e^(i theta)) ] */ int gsl_sf_clausen_e(double x, gsl_sf_result * result); double gsl_sf_clausen(const double x); __END_DECLS #endif /* __GSL_SF_CLAUSEN_H__ */ gsl/specfunc/gsl_sf_gamma.h0000644000175000017500000001710613536674414014335 0ustar eddedd/* specfunc/gsl_sf_gamma.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_GAMMA_H__ #define __GSL_SF_GAMMA_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Log[Gamma(x)], x not a negative integer * Uses real Lanczos method. * Returns the real part of Log[Gamma[x]] when x < 0, * i.e. Log[|Gamma[x]|]. * * exceptions: GSL_EDOM, GSL_EROUND */ int gsl_sf_lngamma_e(double x, gsl_sf_result * result); double gsl_sf_lngamma(const double x); /* Log[Gamma(x)], x not a negative integer * Uses real Lanczos method. Determines * the sign of Gamma[x] as well as Log[|Gamma[x]|] for x < 0. * So Gamma[x] = sgn * Exp[result_lg]. * * exceptions: GSL_EDOM, GSL_EROUND */ int gsl_sf_lngamma_sgn_e(double x, gsl_sf_result * result_lg, double *sgn); /* Gamma(x), x not a negative integer * Uses real Lanczos method. * * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EROUND */ int gsl_sf_gamma_e(const double x, gsl_sf_result * result); double gsl_sf_gamma(const double x); /* Regulated Gamma Function, x > 0 * Gamma^*(x) = Gamma(x)/(Sqrt[2Pi] x^(x-1/2) exp(-x)) * = (1 + 1/(12x) + ...), x->Inf * A useful suggestion of Temme. * * exceptions: GSL_EDOM */ int gsl_sf_gammastar_e(const double x, gsl_sf_result * result); double gsl_sf_gammastar(const double x); /* 1/Gamma(x) * Uses real Lanczos method. * * exceptions: GSL_EUNDRFLW, GSL_EROUND */ int gsl_sf_gammainv_e(const double x, gsl_sf_result * result); double gsl_sf_gammainv(const double x); /* Log[Gamma(z)] for z complex, z not a negative integer * Uses complex Lanczos method. Note that the phase part (arg) * is not well-determined when |z| is very large, due * to inevitable roundoff in restricting to (-Pi,Pi]. * This will raise the GSL_ELOSS exception when it occurs. * The absolute value part (lnr), however, never suffers. * * Calculates: * lnr = log|Gamma(z)| * arg = arg(Gamma(z)) in (-Pi, Pi] * * exceptions: GSL_EDOM, GSL_ELOSS */ int gsl_sf_lngamma_complex_e(double zr, double zi, gsl_sf_result * lnr, gsl_sf_result * arg); /* x^n / n! * * x >= 0.0, n >= 0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_taylorcoeff_e(const int n, const double x, gsl_sf_result * result); double gsl_sf_taylorcoeff(const int n, const double x); /* n! * * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_fact_e(const unsigned int n, gsl_sf_result * result); double gsl_sf_fact(const unsigned int n); /* n!! = n(n-2)(n-4) ... * * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_doublefact_e(const unsigned int n, gsl_sf_result * result); double gsl_sf_doublefact(const unsigned int n); /* log(n!) * Faster than ln(Gamma(n+1)) for n < 170; defers for larger n. * * exceptions: none */ int gsl_sf_lnfact_e(const unsigned int n, gsl_sf_result * result); double gsl_sf_lnfact(const unsigned int n); /* log(n!!) * * exceptions: none */ int gsl_sf_lndoublefact_e(const unsigned int n, gsl_sf_result * result); double gsl_sf_lndoublefact(const unsigned int n); /* log(n choose m) * * exceptions: GSL_EDOM */ int gsl_sf_lnchoose_e(unsigned int n, unsigned int m, gsl_sf_result * result); double gsl_sf_lnchoose(unsigned int n, unsigned int m); /* n choose m * * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_choose_e(unsigned int n, unsigned int m, gsl_sf_result * result); double gsl_sf_choose(unsigned int n, unsigned int m); /* Logarithm of Pochhammer (Apell) symbol * log( (a)_x ) * where (a)_x := Gamma[a + x]/Gamma[a] * * a > 0, a+x > 0 * * exceptions: GSL_EDOM */ int gsl_sf_lnpoch_e(const double a, const double x, gsl_sf_result * result); double gsl_sf_lnpoch(const double a, const double x); /* Logarithm of Pochhammer (Apell) symbol, with sign information. * result = log( |(a)_x| ) * sgn = sgn( (a)_x ) * where (a)_x := Gamma[a + x]/Gamma[a] * * a != neg integer, a+x != neg integer * * exceptions: GSL_EDOM */ int gsl_sf_lnpoch_sgn_e(const double a, const double x, gsl_sf_result * result, double * sgn); /* Pochhammer (Apell) symbol * (a)_x := Gamma[a + x]/Gamma[x] * * a != neg integer, a+x != neg integer * * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_poch_e(const double a, const double x, gsl_sf_result * result); double gsl_sf_poch(const double a, const double x); /* Relative Pochhammer (Apell) symbol * ((a,x) - 1)/x * where (a,x) = (a)_x := Gamma[a + x]/Gamma[a] * * exceptions: GSL_EDOM */ int gsl_sf_pochrel_e(const double a, const double x, gsl_sf_result * result); double gsl_sf_pochrel(const double a, const double x); /* Normalized Incomplete Gamma Function * * Q(a,x) = 1/Gamma(a) Integral[ t^(a-1) e^(-t), {t,x,Infinity} ] * * a >= 0, x >= 0 * Q(a,0) := 1 * Q(0,x) := 0, x != 0 * * exceptions: GSL_EDOM */ int gsl_sf_gamma_inc_Q_e(const double a, const double x, gsl_sf_result * result); double gsl_sf_gamma_inc_Q(const double a, const double x); /* Complementary Normalized Incomplete Gamma Function * * P(a,x) = 1/Gamma(a) Integral[ t^(a-1) e^(-t), {t,0,x} ] * * a > 0, x >= 0 * * exceptions: GSL_EDOM */ int gsl_sf_gamma_inc_P_e(const double a, const double x, gsl_sf_result * result); double gsl_sf_gamma_inc_P(const double a, const double x); /* Non-normalized Incomplete Gamma Function * * Gamma(a,x) := Integral[ t^(a-1) e^(-t), {t,x,Infinity} ] * * x >= 0.0 * Gamma(a, 0) := Gamma(a) * * exceptions: GSL_EDOM */ int gsl_sf_gamma_inc_e(const double a, const double x, gsl_sf_result * result); double gsl_sf_gamma_inc(const double a, const double x); /* Logarithm of Beta Function * Log[B(a,b)] * * a > 0, b > 0 * exceptions: GSL_EDOM */ int gsl_sf_lnbeta_e(const double a, const double b, gsl_sf_result * result); double gsl_sf_lnbeta(const double a, const double b); int gsl_sf_lnbeta_sgn_e(const double x, const double y, gsl_sf_result * result, double * sgn); /* Beta Function * B(a,b) * * a > 0, b > 0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_beta_e(const double a, const double b, gsl_sf_result * result); double gsl_sf_beta(const double a, const double b); /* Normalized Incomplete Beta Function * B_x(a,b)/B(a,b) * * a > 0, b > 0, 0 <= x <= 1 * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_beta_inc_e(const double a, const double b, const double x, gsl_sf_result * result); double gsl_sf_beta_inc(const double a, const double b, const double x); /* The maximum x such that gamma(x) is not * considered an overflow. */ #define GSL_SF_GAMMA_XMAX 171.0 /* The maximum n such that gsl_sf_fact(n) does not give an overflow. */ #define GSL_SF_FACT_NMAX 170 /* The maximum n such that gsl_sf_doublefact(n) does not give an overflow. */ #define GSL_SF_DOUBLEFACT_NMAX 297 __END_DECLS #endif /* __GSL_SF_GAMMA_H__ */ gsl/specfunc/gsl_sf_elementary.h0000644000175000017500000000317113536674414015415 0ustar eddedd/* specfunc/gsl_sf_elementary.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ /* Miscellaneous elementary functions and operations. */ #ifndef __GSL_SF_ELEMENTARY_H__ #define __GSL_SF_ELEMENTARY_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Multiplication. * * exceptions: GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_multiply_e(const double x, const double y, gsl_sf_result * result); double gsl_sf_multiply(const double x, const double y); /* Multiplication of quantities with associated errors. */ int gsl_sf_multiply_err_e(const double x, const double dx, const double y, const double dy, gsl_sf_result * result); __END_DECLS #endif /* __GSL_SF_ELEMENTARY_H__ */ gsl/specfunc/bessel_amp_phase.c0000644000175000017500000001105313536674414015176 0ustar eddedd/* specfunc/bessel_amp_phase.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "bessel_amp_phase.h" /* chebyshev expansions for amplitude and phase functions used in bessel evaluations These are the same for J0,Y0 and for J1,Y1, so they sit outside those functions. */ static double bm0_data[21] = { 0.09284961637381644, -0.00142987707403484, 0.00002830579271257, -0.00000143300611424, 0.00000012028628046, -0.00000001397113013, 0.00000000204076188, -0.00000000035399669, 0.00000000007024759, -0.00000000001554107, 0.00000000000376226, -0.00000000000098282, 0.00000000000027408, -0.00000000000008091, 0.00000000000002511, -0.00000000000000814, 0.00000000000000275, -0.00000000000000096, 0.00000000000000034, -0.00000000000000012, 0.00000000000000004 }; const cheb_series _gsl_sf_bessel_amp_phase_bm0_cs = { bm0_data, 20, -1, 1, 10 }; static double bth0_data[24] = { -0.24639163774300119, 0.001737098307508963, -0.000062183633402968, 0.000004368050165742, -0.000000456093019869, 0.000000062197400101, -0.000000010300442889, 0.000000001979526776, -0.000000000428198396, 0.000000000102035840, -0.000000000026363898, 0.000000000007297935, -0.000000000002144188, 0.000000000000663693, -0.000000000000215126, 0.000000000000072659, -0.000000000000025465, 0.000000000000009229, -0.000000000000003448, 0.000000000000001325, -0.000000000000000522, 0.000000000000000210, -0.000000000000000087, 0.000000000000000036 }; const cheb_series _gsl_sf_bessel_amp_phase_bth0_cs = { bth0_data, 23, -1, 1, 12 }; static double bm1_data[21] = { 0.1047362510931285, 0.00442443893702345, -0.00005661639504035, 0.00000231349417339, -0.00000017377182007, 0.00000001893209930, -0.00000000265416023, 0.00000000044740209, -0.00000000008691795, 0.00000000001891492, -0.00000000000451884, 0.00000000000116765, -0.00000000000032265, 0.00000000000009450, -0.00000000000002913, 0.00000000000000939, -0.00000000000000315, 0.00000000000000109, -0.00000000000000039, 0.00000000000000014, -0.00000000000000005, }; const cheb_series _gsl_sf_bessel_amp_phase_bm1_cs = { bm1_data, 20, -1, 1, 10 }; static double bth1_data[24] = { 0.74060141026313850, -0.004571755659637690, 0.000119818510964326, -0.000006964561891648, 0.000000655495621447, -0.000000084066228945, 0.000000013376886564, -0.000000002499565654, 0.000000000529495100, -0.000000000124135944, 0.000000000031656485, -0.000000000008668640, 0.000000000002523758, -0.000000000000775085, 0.000000000000249527, -0.000000000000083773, 0.000000000000029205, -0.000000000000010534, 0.000000000000003919, -0.000000000000001500, 0.000000000000000589, -0.000000000000000237, 0.000000000000000097, -0.000000000000000040, }; const cheb_series _gsl_sf_bessel_amp_phase_bth1_cs = { bth1_data, 23, -1, 1, 12 }; int gsl_sf_bessel_asymp_Mnu_e(const double nu, const double x, double * result) { const double r = 2.0*nu/x; const double r2 = r*r; const double x2 = x*x; const double term1 = (r2-1.0/x2)/8.0; const double term2 = (r2-1.0/x2)*(r2-9.0/x2)*3.0/128.0; const double Mnu2_c = 2.0/(M_PI) * (1.0 + term1 + term2); *result = sqrt(Mnu2_c)/sqrt(x); /* will never underflow this way */ return GSL_SUCCESS; } int gsl_sf_bessel_asymp_thetanu_corr_e(const double nu, const double x, double * result) { const double r = 2.0*nu/x; const double r2 = r*r; const double x2 = x*x; const double term1 = x*(r2 - 1.0/x2)/8.0; const double term2 = x*(r2 - 1.0/x2)*(r2 - 25.0/x2)/384.0; *result = (-0.25*M_PI + term1 + term2); return GSL_SUCCESS; } gsl/specfunc/airy_der.c0000644000175000017500000006177613536674414013523 0ustar eddedd/* specfunc/airy_der.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "error.h" #include "chebyshev.h" #include "cheb_eval_mode.c" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* based on SLATEC aide.f, bide.f, aid.f, bid.f, r9admp.f */ /* series for aif on the interval -1.00000e+00 to 1.00000e+00 with weighted error 5.22e-18 log weighted error 17.28 significant figures required 16.01 decimal places required 17.73 */ static double aif_data[8] = { 0.10527461226531408809, 0.01183613628152997844, 0.00012328104173225664, 0.00000062261225638140, 0.00000000185298887844, 0.00000000000363328873, 0.00000000000000504622, 0.00000000000000000522 }; static cheb_series aif_cs = { aif_data, 7, -1, 1, 7 }; /* series for aig on the interval -1.00000e+00 to 1.00000e+00 with weighted error 3.14e-19 log weighted error 18.50 significant figures required 17.44 decimal places required 18.98 */ static double aig_data[9] = { 0.021233878150918666852, 0.086315930335214406752, 0.001797594720383231358, 0.000014265499875550693, 0.000000059437995283683, 0.000000000152403366479, 0.000000000000264587660, 0.000000000000000331562, 0.000000000000000000314 }; static cheb_series aig_cs = { aig_data, 8, -1, 1, 8 }; /* series for aip2 on the interval 0.00000e+00 to 1.25000e-01 with weighted error 2.15e-17 log weighted error 16.67 significant figures required 14.27 decimal places required 17.26 */ static double aip2_data[15] = { 0.0065457691989713757, 0.0023833724120774592, -0.0000430700770220586, 0.0000015629125858629, -0.0000000815417186163, 0.0000000054103738057, -0.0000000004284130883, 0.0000000000389497963, -0.0000000000039623161, 0.0000000000004428184, -0.0000000000000536297, 0.0000000000000069650, -0.0000000000000009620, 0.0000000000000001403, -0.0000000000000000215 }; static cheb_series aip2_cs = { aip2_data, 14, -1, 1, 9 }; /* series for aip1 on the interval 1.25000e-01 to 1.00000e+00 with weighted error 2.60e-17 log weighted error 16.58 significant figures required 14.91 decimal places required 17.28 */ static double aip1_data[25] = { 0.0358865097808301538, 0.0114668575627764899, -0.0007592073583861400, 0.0000869517610893841, -0.0000128237294298592, 0.0000022062695681038, -0.0000004222295185921, 0.0000000874686415726, -0.0000000192773588418, 0.0000000044668460054, -0.0000000010790108052, 0.0000000002700029447, -0.0000000000696480108, 0.0000000000184489907, -0.0000000000050027817, 0.0000000000013852243, -0.0000000000003908218, 0.0000000000001121536, -0.0000000000000326862, 0.0000000000000096619, -0.0000000000000028935, 0.0000000000000008770, -0.0000000000000002688, 0.0000000000000000832, -0.0000000000000000260 }; static cheb_series aip1_cs = { aip1_data, 24, -1, 1, 14 }; /* series for bif on the interval -1.00000e+00 to 1.00000e+00 with weighted error 9.05e-18 log weighted error 17.04 significant figures required 15.83 decimal places required 17.49 */ static double bif_data[8] = { 0.1153536790828570243, 0.0205007894049192875, 0.0002135290278902876, 0.0000010783960614677, 0.0000000032094708833, 0.0000000000062930407, 0.0000000000000087403, 0.0000000000000000090 }; static cheb_series bif_cs = { bif_data, 7, -1, 1, 7 }; /* series for big on the interval -1.00000e+00 to 1.00000e+00 with weighted error 5.44e-19 log weighted error 18.26 significant figures required 17.46 decimal places required 18.74 */ static double big_data[9] = { -0.097196440416443537390, 0.149503576843167066571, 0.003113525387121326042, 0.000024708570579821297, 0.000000102949627731379, 0.000000000263970373987, 0.000000000000458279271, 0.000000000000000574283, 0.000000000000000000544 }; static cheb_series big_cs = { big_data, 8, -1, 1, 8 }; /* series for bif2 on the interval 1.00000e+00 to 8.00000e+00 with weighted error 3.82e-19 log weighted error 18.42 significant figures required 17.68 decimal places required 18.92 */ static double bif2_data[10] = { 0.323493987603522033521, 0.086297871535563559139, 0.002994025552655397426, 0.000051430528364661637, 0.000000525840250036811, 0.000000003561751373958, 0.000000000017146864007, 0.000000000000061663520, 0.000000000000000171911, 0.000000000000000000382 }; static cheb_series bif2_cs = { bif2_data, 9, -1, 1, 9 }; /* series for big2 on the interval 1.00000e+00 to 8.00000e+00 with weighted error 3.35e-17 log weighted error 16.48 significant figures required 16.52 decimal places required 16.98 */ static double big2_data[10] = { 1.6062999463621294578, 0.7449088819876088652, 0.0470138738610277380, 0.0012284422062548239, 0.0000173222412256624, 0.0000001521901652368, 0.0000000009113560249, 0.0000000000039547918, 0.0000000000000130017, 0.0000000000000000335 }; static cheb_series big2_cs = { big2_data, 9, -1, 1, 9 }; /* series for bip2 on the interval 0.00000e+00 to 1.25000e-01 with weighted error 2.07e-18 log weighted error 17.69 significant figures required 16.51 decimal places required 18.42 */ static double bip2_data[29] = { -0.13269705443526630495, -0.00568443626045977481, -0.00015643601119611610, -0.00001136737203679562, -0.00000143464350991284, -0.00000018098531185164, 0.00000000926177343611, 0.00000001710005490721, 0.00000000476698163504, -0.00000000035195022023, -0.00000000058890614316, -0.00000000006678499608, 0.00000000006395565102, 0.00000000001554529427, -0.00000000000792397000, -0.00000000000258326243, 0.00000000000121655048, 0.00000000000038707207, -0.00000000000022487045, -0.00000000000004953477, 0.00000000000004563782, 0.00000000000000332998, -0.00000000000000921750, 0.00000000000000094157, 0.00000000000000167154, -0.00000000000000055134, -0.00000000000000022369, 0.00000000000000017487, 0.00000000000000000207 }; static cheb_series bip2_cs = { bip2_data, 28, -1, 1, 14 }; /* series for bip1 on the interval 1.25000e-01 to 3.53553e-01 with weighted error 1.86e-17 log weighted error 16.73 significant figures required 15.67 decimal places required 17.42 */ static double bip1_data[24] = { -0.1729187351079553719, -0.0149358492984694364, -0.0005471104951678566, 0.0001537966292958408, 0.0000154353476192179, -0.0000065434113851906, 0.0000003728082407879, 0.0000002072078388189, -0.0000000658173336470, 0.0000000074926746354, 0.0000000011101336884, -0.0000000007265140553, 0.0000000001782723560, -0.0000000000217346352, -0.0000000000020302035, 0.0000000000019311827, -0.0000000000006044953, 0.0000000000001209450, -0.0000000000000125109, -0.0000000000000019917, 0.0000000000000015154, -0.0000000000000004977, 0.0000000000000001155, -0.0000000000000000186 }; static cheb_series bip1_cs = { bip1_data, 23, -1, 1, 13 }; /* series for an22 on the interval -1.00000e+00 to -1.25000e-01 with weighted error 3.30e-17 log weighted error 16.48 significant figures required 14.95 decimal places required 17.24 */ static double an22_data[33] = { 0.0537418629629794329, -0.0126661435859883193, -0.0011924334106593007, -0.0002032327627275655, -0.0000446468963075164, -0.0000113359036053123, -0.0000031641352378546, -0.0000009446708886149, -0.0000002966562236472, -0.0000000969118892024, -0.0000000326822538653, -0.0000000113144618964, -0.0000000040042691002, -0.0000000014440333684, -0.0000000005292853746, -0.0000000001967763374, -0.0000000000740800096, -0.0000000000282016314, -0.0000000000108440066, -0.0000000000042074801, -0.0000000000016459150, -0.0000000000006486827, -0.0000000000002574095, -0.0000000000001027889, -0.0000000000000412846, -0.0000000000000166711, -0.0000000000000067657, -0.0000000000000027585, -0.0000000000000011296, -0.0000000000000004645, -0.0000000000000001917, -0.0000000000000000794, -0.0000000000000000330 }; static cheb_series an22_cs = { an22_data, 32, -1, 1, 18 }; /* series for an21 on the interval -1.25000e-01 to -1.56250e-02 with weighted error 3.43e-17 log weighted error 16.47 significant figures required 14.48 decimal places required 17.16 */ static double an21_data[24] = { 0.0198313155263169394, -0.0029376249067087533, -0.0001136260695958196, -0.0000100554451087156, -0.0000013048787116563, -0.0000002123881993151, -0.0000000402270833384, -0.0000000084996745953, -0.0000000019514839426, -0.0000000004783865344, -0.0000000001236733992, -0.0000000000334137486, -0.0000000000093702824, -0.0000000000027130128, -0.0000000000008075954, -0.0000000000002463214, -0.0000000000000767656, -0.0000000000000243883, -0.0000000000000078831, -0.0000000000000025882, -0.0000000000000008619, -0.0000000000000002908, -0.0000000000000000993, -0.0000000000000000343 }; static cheb_series an21_cs = { an21_data, 23, -1, 1, 12 }; /* series for an20 on the interval -1.56250e-02 to 0.00000e+00 with weighted error 4.41e-17 log weighted error 16.36 significant figures required 14.16 decimal places required 16.96 */ static double an20_data[16] = { 0.0126732217145738027, -0.0005212847072615621, -0.0000052672111140370, -0.0000001628202185026, -0.0000000090991442687, -0.0000000007438647126, -0.0000000000795494752, -0.0000000000104050944, -0.0000000000015932426, -0.0000000000002770648, -0.0000000000000535343, -0.0000000000000113062, -0.0000000000000025772, -0.0000000000000006278, -0.0000000000000001621, -0.0000000000000000441 }; static cheb_series an20_cs = { an20_data, 15, -1, 1, 8 }; /* series for aph2 on the interval -1.00000e+00 to -1.25000e-01 with weighted error 2.94e-17 log weighted error 16.53 significant figures required 15.58 decimal places required 17.28 */ static double aph2_data[32] = { -0.2057088719781465107, 0.0422196961357771922, 0.0020482560511207275, 0.0002607800735165006, 0.0000474824268004729, 0.0000105102756431612, 0.0000026353534014668, 0.0000007208824863499, 0.0000002103236664473, 0.0000000644975634555, 0.0000000205802377264, 0.0000000067836273921, 0.0000000022974015284, 0.0000000007961306765, 0.0000000002813860610, 0.0000000001011749057, 0.0000000000369306738, 0.0000000000136615066, 0.0000000000051142751, 0.0000000000019351689, 0.0000000000007393607, 0.0000000000002849792, 0.0000000000001107281, 0.0000000000000433412, 0.0000000000000170801, 0.0000000000000067733, 0.0000000000000027017, 0.0000000000000010835, 0.0000000000000004367, 0.0000000000000001769, 0.0000000000000000719, 0.0000000000000000294 }; static cheb_series aph2_cs = { aph2_data, 31, -1, 1, 16 }; /* series for aph1 on the interval -1.25000e-01 to -1.56250e-02 with weighted error 6.38e-17 log weighted error 16.20 significant figures required 14.91 decimal places required 16.87 */ static double aph1_data[22] = { -0.1024172908077571694, 0.0071697275146591248, 0.0001209959363122329, 0.0000073361512841220, 0.0000007535382954272, 0.0000001041478171741, 0.0000000174358728519, 0.0000000033399795033, 0.0000000007073075174, 0.0000000001619187515, 0.0000000000394539982, 0.0000000000101192282, 0.0000000000027092778, 0.0000000000007523806, 0.0000000000002156369, 0.0000000000000635283, 0.0000000000000191757, 0.0000000000000059143, 0.0000000000000018597, 0.0000000000000005950, 0.0000000000000001934, 0.0000000000000000638 }; static cheb_series aph1_cs = { aph1_data, 21, -1, 1, 10 }; /* series for aph0 on the interval -1.56250e-02 to 0.00000e+00 with weighted error 2.29e-17 log weighted error 16.64 significant figures required 15.27 decimal places required 17.23 */ static double aph0_data[15] = { -0.0855849241130933257, 0.0011214378867065261, 0.0000042721029353664, 0.0000000817607381483, 0.0000000033907645000, 0.0000000002253264423, 0.0000000000206284209, 0.0000000000023858763, 0.0000000000003301618, 0.0000000000000527010, 0.0000000000000094555, 0.0000000000000018709, 0.0000000000000004024, 0.0000000000000000930, 0.0000000000000000229 }; static cheb_series aph0_cs = { aph0_data, 14, -1, 1, 7 }; static int airy_deriv_mod_phase(const double x, gsl_mode_t mode, gsl_sf_result * ampl, gsl_sf_result * phi) { const double pi34 = 2.356194490192344928847; gsl_sf_result result_a; gsl_sf_result result_p; double a, p; double sqx; if(x <= -4.0) { double z = 128.0/(x*x*x) + 1.0; cheb_eval_mode_e(&an20_cs, z, mode, &result_a); cheb_eval_mode_e(&aph0_cs, z, mode, &result_p); } else if(x <= -2.0) { double z = (128.0/(x*x*x) + 9.0) / 7.0; cheb_eval_mode_e(&an21_cs, z, mode, &result_a); cheb_eval_mode_e(&aph1_cs, z, mode, &result_p); } else if(x <= -1.0) { double z = (16.0/(x*x*x) + 9.0) / 7.0; cheb_eval_mode_e(&an22_cs, z, mode, &result_a); cheb_eval_mode_e(&aph2_cs, z, mode, &result_p); } else { ampl->val = 0.0; ampl->err = 0.0; phi->val = 0.0; phi->err = 0.0; GSL_ERROR ("x is greater than 1.0", GSL_EDOM); } a = 0.3125 + result_a.val; p = -0.625 + result_p.val; sqx = sqrt(-x); ampl->val = sqrt(a * sqx); ampl->err = fabs(ampl->val) * (GSL_DBL_EPSILON + fabs(result_a.err/result_a.val)); phi->val = pi34 - x * sqx * p; phi->err = fabs(phi->val) * (GSL_DBL_EPSILON + fabs(result_p.err/result_p.val)); return GSL_SUCCESS; } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_airy_Ai_deriv_scaled_e(const double x, gsl_mode_t mode, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x < -1.0) { gsl_sf_result a; gsl_sf_result p; int status_ap = airy_deriv_mod_phase(x, mode, &a, &p); double c = cos(p.val); result->val = a.val * c; result->err = fabs(result->val * p.err) + fabs(c * a.err); result->err += GSL_DBL_EPSILON * fabs(result->val); return status_ap; } else if(x <= 1.0) { const double x3 = x*x*x; const double x2 = x*x; gsl_sf_result result_c0; gsl_sf_result result_c1; cheb_eval_mode_e(&aif_cs, x3, mode, &result_c0); cheb_eval_mode_e(&aig_cs, x3, mode, &result_c1); result->val = (x2*(0.125 + result_c0.val) - result_c1.val) - 0.25; result->err = fabs(x2*result_c0.val) + result_c1.err; result->err += GSL_DBL_EPSILON * fabs(result->val); if(x > GSL_ROOT3_DBL_EPSILON*GSL_ROOT3_DBL_EPSILON) { /* scale only if x is positive */ double s = exp(2.0*x*sqrt(x)/3.0); result->val *= s; result->err *= s; } return GSL_SUCCESS; } else if(x <= 4.0) { const double sqrtx = sqrt(x); const double z = (16.0/(x*sqrtx) - 9.0)/7.0; const double s = sqrt(sqrtx); gsl_sf_result result_c0; cheb_eval_mode_e(&aip1_cs, z, mode, &result_c0); result->val = -(0.28125 + result_c0.val) * s; result->err = result_c0.err * s; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double sqrtx = sqrt(x); const double z = 16.0/(x*sqrtx) - 1.0; const double s = sqrt(sqrtx); gsl_sf_result result_c0; cheb_eval_mode_e(&aip2_cs, z, mode, &result_c0); result->val = -(0.28125 + result_c0.val) * s; result->err = result_c0.err * s; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_airy_Ai_deriv_e(const double x, gsl_mode_t mode, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x < -1.0) { gsl_sf_result a; gsl_sf_result p; int status_ap = airy_deriv_mod_phase(x, mode, &a, &p); double c = cos(p.val); result->val = a.val * c; result->err = fabs(result->val * p.err) + fabs(c * a.err); result->err += GSL_DBL_EPSILON * fabs(result->val); return status_ap; } else if(x < 1.0) { const double x3 = x*x*x; gsl_sf_result result_c1; gsl_sf_result result_c2; cheb_eval_mode_e(&aif_cs, x3, mode, &result_c1); cheb_eval_mode_e(&aig_cs, x3, mode, &result_c2); result->val = (x*x*(0.125 + result_c1.val) - result_c2.val) - 0.25; result->err = fabs(x*x*result_c1.err) + result_c2.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x*x*x < 9.0/4.0 * GSL_LOG_DBL_MIN*GSL_LOG_DBL_MIN) { gsl_sf_result result_aps; const double arg = -2.0*x*sqrt(x)/3.0; const int stat_a = gsl_sf_airy_Ai_deriv_scaled_e(x, mode, &result_aps); const int stat_e = gsl_sf_exp_mult_err_e(arg, 1.5*fabs(arg*GSL_DBL_EPSILON), result_aps.val, result_aps.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_a); } else { UNDERFLOW_ERROR(result); } } int gsl_sf_airy_Bi_deriv_scaled_e(const double x, gsl_mode_t mode, gsl_sf_result * result) { const double atr = 8.7506905708484345; /* 16./(sqrt(8)-1) */ const double btr = -2.0938363213560543; /* -(sqrt(8)+1)/(sqrt(8)-1) */ /* CHECK_POINTER(result) */ if(x < -1.0) { gsl_sf_result a; gsl_sf_result p; int status_ap = airy_deriv_mod_phase(x, mode, &a, &p); double s = sin(p.val); result->val = a.val * s; result->err = fabs(result->val * p.err) + fabs(s * a.err); result->err += GSL_DBL_EPSILON * fabs(result->val); return status_ap; } else if(x < 1.0) { const double x3 = x*x*x; const double x2 = x*x; gsl_sf_result result_c1; gsl_sf_result result_c2; cheb_eval_mode_e(&bif_cs, x3, mode, &result_c1); cheb_eval_mode_e(&big_cs, x3, mode, &result_c2); result->val = x2 * (result_c1.val + 0.25) + result_c2.val + 0.5; result->err = x2 * result_c1.err + result_c2.err; result->err += GSL_DBL_EPSILON * fabs(result->val); if(x > GSL_ROOT3_DBL_EPSILON*GSL_ROOT3_DBL_EPSILON) { /* scale only if x is positive */ const double s = exp(-2.0*x*sqrt(x)/3.0); result->val *= s; result->err *= s; } return GSL_SUCCESS; } else if(x < 2.0) { const double z = (2.0*x*x*x - 9.0) / 7.0; const double s = exp(-2.0*x*sqrt(x)/3.0); gsl_sf_result result_c0; gsl_sf_result result_c1; cheb_eval_mode_e(&bif2_cs, z, mode, &result_c0); cheb_eval_mode_e(&big2_cs, z, mode, &result_c1); result->val = s * (x*x * (0.25 + result_c0.val) + 0.5 + result_c1.val); result->err = s * (x*x * result_c0.err + result_c1.err); result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < 4.0) { const double sqrtx = sqrt(x); const double z = atr/(x*sqrtx) + btr; const double s = sqrt(sqrtx); gsl_sf_result result_c0; cheb_eval_mode_e(&bip1_cs, z, mode, &result_c0); result->val = s * (0.625 + result_c0.val); result->err = s * result_c0.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double sqrtx = sqrt(x); const double z = 16.0/(x*sqrtx) - 1.0; const double s = sqrt(sqrtx); gsl_sf_result result_c0; cheb_eval_mode_e(&bip2_cs, z, mode, &result_c0); result->val = s * (0.625 + result_c0.val); result->err = s * result_c0.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_airy_Bi_deriv_e(const double x, gsl_mode_t mode, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x < -1.0) { gsl_sf_result a; gsl_sf_result p; int status_ap = airy_deriv_mod_phase(x, mode, &a, &p); double s = sin(p.val); result->val = a.val * s; result->err = fabs(result->val * p.err) + fabs(s * a.err); result->err += GSL_DBL_EPSILON * fabs(result->val); return status_ap; } else if(x < 1.0) { const double x3 = x*x*x; const double x2 = x*x; gsl_sf_result result_c1; gsl_sf_result result_c2; cheb_eval_mode_e(&bif_cs, x3, mode, &result_c1); cheb_eval_mode_e(&big_cs, x3, mode, &result_c2); result->val = x2 * (result_c1.val + 0.25) + result_c2.val + 0.5; result->err = x2 * result_c1.err + result_c2.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < 2.0) { const double z = (2.0*x*x*x - 9.0) / 7.0; gsl_sf_result result_c1; gsl_sf_result result_c2; cheb_eval_mode_e(&bif2_cs, z, mode, &result_c1); cheb_eval_mode_e(&big2_cs, z, mode, &result_c2); result->val = x*x * (result_c1.val + 0.25) + result_c2.val + 0.5; result->err = x*x * result_c1.err + result_c2.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < GSL_ROOT3_DBL_MAX*GSL_ROOT3_DBL_MAX) { gsl_sf_result result_bps; const double arg = 2.0*(x*sqrt(x)/3.0); int stat_b = gsl_sf_airy_Bi_deriv_scaled_e(x, mode, &result_bps); int stat_e = gsl_sf_exp_mult_err_e(arg, 1.5*fabs(arg*GSL_DBL_EPSILON), result_bps.val, result_bps.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_b); } else { OVERFLOW_ERROR(result); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_airy_Ai_deriv_scaled(const double x, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_airy_Ai_deriv_scaled_e(x, mode, &result)); } double gsl_sf_airy_Ai_deriv(const double x, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_airy_Ai_deriv_e(x, mode, &result)); } double gsl_sf_airy_Bi_deriv_scaled(const double x, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_airy_Bi_deriv_scaled_e(x, mode, &result)); } double gsl_sf_airy_Bi_deriv(const double x, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_airy_Bi_deriv_e(x, mode, &result)); } gsl/specfunc/coulomb_bound.c0000644000175000017500000000725313536674414014542 0ustar eddedd/* specfunc/coulomb_bound.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include #include "error.h" #include "check.h" /* normalization for hydrogenic wave functions */ static int R_norm(const int n, const int l, const double Z, gsl_sf_result * result) { double A = 2.0*Z/n; double pre = sqrt(A*A*A /(2.0*n)); gsl_sf_result ln_a, ln_b; gsl_sf_result ex; int stat_a = gsl_sf_lnfact_e(n+l, &ln_a); int stat_b = gsl_sf_lnfact_e(n-l-1, &ln_b); double diff_val = 0.5*(ln_b.val - ln_a.val); double diff_err = 0.5*(ln_b.err + ln_a.err) + GSL_DBL_EPSILON * fabs(diff_val); int stat_e = gsl_sf_exp_err_e(diff_val, diff_err, &ex); result->val = pre * ex.val; result->err = pre * ex.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_3(stat_e, stat_a, stat_b); } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_hydrogenicR_1_e(const double Z, const double r, gsl_sf_result * result) { if(Z > 0.0 && r >= 0.0) { double A = 2.0*Z; double norm = A*sqrt(Z); double ea = exp(-Z*r); result->val = norm*ea; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val) * fabs(Z*r); CHECK_UNDERFLOW(result); return GSL_SUCCESS; } else { DOMAIN_ERROR(result); } } int gsl_sf_hydrogenicR_e(const int n, const int l, const double Z, const double r, gsl_sf_result * result) { if(n < 1 || l > n-1 || Z <= 0.0 || r < 0.0) { DOMAIN_ERROR(result); } else { double A = 2.0*Z/n; gsl_sf_result norm; int stat_norm = R_norm(n, l, Z, &norm); double rho = A*r; double ea = exp(-0.5*rho); double pp = gsl_sf_pow_int(rho, l); gsl_sf_result lag; int stat_lag = gsl_sf_laguerre_n_e(n-l-1, 2*l+1, rho, &lag); double W_val = norm.val * ea * pp; double W_err = norm.err * ea * pp; W_err += norm.val * ((0.5*rho + 1.0) * GSL_DBL_EPSILON) * ea * pp; W_err += norm.val * ea * ((l+1.0) * GSL_DBL_EPSILON) * pp; result->val = W_val * lag.val; result->err = W_val * lag.err + W_err * fabs(lag.val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); if ((l == 0 || (r > 0 && l > 0)) && lag.val != 0.0 && stat_lag == GSL_SUCCESS && stat_norm == GSL_SUCCESS) { CHECK_UNDERFLOW(result); }; return GSL_ERROR_SELECT_2(stat_lag, stat_norm); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_hydrogenicR_1(const double Z, const double r) { EVAL_RESULT(gsl_sf_hydrogenicR_1_e(Z, r, &result)); } double gsl_sf_hydrogenicR(const int n, const int l, const double Z, const double r) { EVAL_RESULT(gsl_sf_hydrogenicR_e(n, l, Z, r, &result)); } gsl/specfunc/gsl_sf_transport.h0000644000175000017500000000367213536674414015312 0ustar eddedd/* specfunc/gsl_sf_transport.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_TRANSPORT_H__ #define __GSL_SF_TRANSPORT_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Transport function: * J(n,x) := Integral[ t^n e^t /(e^t - 1)^2, {t,0,x}] */ /* J(2,x) * * exceptions: GSL_EDOM */ int gsl_sf_transport_2_e(const double x, gsl_sf_result * result); double gsl_sf_transport_2(const double x); /* J(3,x) * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_transport_3_e(const double x, gsl_sf_result * result); double gsl_sf_transport_3(const double x); /* J(4,x) * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_transport_4_e(const double x, gsl_sf_result * result); double gsl_sf_transport_4(const double x); /* J(5,x) * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_transport_5_e(const double x, gsl_sf_result * result); double gsl_sf_transport_5(const double x); __END_DECLS #endif /* __GSL_SF_TRANSPORT_H__ */ gsl/specfunc/gsl_sf_pow_int.h0000644000175000017500000000255613536674414014735 0ustar eddedd/* specfunc/gsl_sf_pow_int.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_POW_INT_H__ #define __GSL_SF_POW_INT_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Calculate x^n. * Does not check for overflow/underflow. */ int gsl_sf_pow_int_e(double x, int n, gsl_sf_result * result); double gsl_sf_pow_int(const double x, const int n); __END_DECLS #endif /* __GSL_SF_POW_INT_H__ */ gsl/specfunc/test_hyperg.c0000644000175000017500000015065113536674414014251 0ustar eddedd/* specfunc/test_hyperg.c * * Copyright (C) 2007, 2009, 2010 Brian Gough * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include "test_sf.h" int test_hyperg(void) { gsl_sf_result r; int s = 0; /* 0F1 */ TEST_SF(s, gsl_sf_hyperg_0F1_e, (1, 0.5, &r), 1.5660829297563505373, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_0F1_e, (5, 0.5, &r), 1.1042674404828684574, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_0F1_e, (100, 30, &r), 1.3492598639485110176, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_0F1_e, (-0.5, 3, &r), -39.29137997543434276, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_0F1_e, (-100.5, 50, &r), 0.6087930289227538496, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_0F1_e, (1, -5.0, &r), -0.3268752818235339109, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_0F1_e, (-0.5, -5.0, &r),-4.581634759005381184, TEST_TOL1, GSL_SUCCESS); /* 1F1 for integer parameters */ TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (1, 1, 0.5, &r), 1.6487212707001281468, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (1, 2, 500.0, &r), 2.8071844357056748215e+214, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (1, 2, -500.0, &r), 0.002, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (8, 1, 0.5, &r), 13.108875178030540372, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 1, 1.0, &r), 131.63017574352619931, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 1, 10.0, &r), 8.514625476546280796e+09, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 1, 100.0, &r), 1.5671363646800353320e+56, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 20, 1.0, &r), 1.6585618002669675465, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 20, 10.0, &r), 265.26686430340188871, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 20, 100.0, &r), 3.640477355063227129e+34, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 100, 1.0, &r), 1.1056660194025527099, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 100, 10.0, &r), 2.8491063634727594206, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 100, 40.0, &r), 133.85880835831230986, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 100, 80.0, &r), 310361.16228011433406, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 100, 100.0, &r), 8.032171336754168282e+07, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 100, 500.0, &r), 7.633961202528731426e+123, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 1, 1.0, &r), 6.892842729046469965e+07, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 1, 10.0, &r), 2.4175917112200409098e+28, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 1, 100.0, &r), 1.9303216896309102993e+110, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 200, 1.0, &r), 1.6497469106162459226, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 200, 10.0, &r), 157.93286197349321981, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 200, 100.0, &r), 2.1819577501255075240e+24, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 200, 400.0, &r), 3.728975529926573300e+119, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 400, 10.0, &r), 12.473087623658878813, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 400, 100.0, &r), 9.071230376818550241e+11, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 400, 150.0, &r), 7.160949515742170775e+18, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 400, 200.0, &r), 2.7406690412731576823e+26, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 400, 300.0, &r), 6.175110613473276193e+43, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 400, 400.0, &r), 1.1807417662711371440e+64, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 400, 600.0, &r), 2.4076076354888886030e+112, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 1, -1.0, &r), 0.11394854824644542810, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 1, -10.0, &r), 0.0006715506365396127863, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 1, -100.0, &r), -4.208138537480269868e-32, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 50, -1.0, &r), 0.820006196079380, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 100, -10.0, &r), 0.38378859043466243, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 100, -100.0, &r), 0.0008460143401464189061, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 100, -500.0, &r), 1.1090822141973655929e-08, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (10, 100, -10000.0, &r), 5.173783508088272292e-21, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (50, 1, -90.0, &r), -1.6624258547648311554e-21, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (50, 1, -100.0, &r), 4.069661775122048204e-24, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (50, 1, -110.0, &r), 1.0072444993946236025e-25, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 10, -100.0, &r), -2.7819353611733941962e-37, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 1, -90.0, &r), 7.501705041159802854e-22, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 1, -100.0, &r), 6.305128893152291187e-25, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 1, -110.0, &r), -7.007122115422439755e-26, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (100, 10, -100.0, &r), -2.7819353611733941962e-37, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (200, 50, -1.0, &r), 0.016087060191732290813, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (200, 50, -300.0, &r), -4.294975979706421471e-121, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (200, 100, -1.0, &r), 0.13397521083325179687, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (200, 100, -10.0, &r), 5.835134393749807387e-10, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (200, 100, -100.0, &r), 4.888460453078914804e-74, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (200, 100, -500.0, &r), -1.4478509059582015053e-195, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-1, 1, 2.0, &r), -1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-1, -2, 2.0, &r), 2.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-2, -3, 2.0, &r), 3.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-10, 1, 1.0, &r), 0.4189459325396825397, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-10, 1, 10.0, &r), 27.984126984126984127, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-10, 1, 100.0, &r), 9.051283795429571429e+12, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-100, 20, 1.0, &r), 0.0020203016320697069566, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-10, -20, 1.0, &r), 1.6379141878548080173, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-10, -20, 10.0, &r), 78.65202404521289970, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-10, -20, 100.0, &r), 4.416169713262624315e+08, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-10, -100, 1.0, &r), 1.1046713999681950919, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-10, -100, 10.0, &r), 2.6035952191039006838, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-10, -100, 100.0, &r), 1151.6852040836932392, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-100, -200, 1.0, &r), 1.6476859702535324743, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-100, -200, 10.0, &r), 139.38026829540687270, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-100, -200, 100.0, &r), 1.1669433576237933752e+19, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-10, -20, -1.0, &r), 0.6025549561148035735, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-10, -20, -10.0, &r), 0.00357079636732993491, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-10, -20, -100.0, &r), 1.64284868563391159e-35, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-10, -100, -1.0, &r), 0.90442397250313899, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-10, -100, -10.0, &r), 0.35061515251367215, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-10, -100, -100.0, &r), 8.19512187960476424e-09, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-100, -200, -1.0, &r), 0.6061497939628952629, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-100, -200, -10.0, &r), 0.0063278543908877674, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-100, -200, -100.0, &r), 4.34111795007336552e-25, TEST_TOL2, GSL_SUCCESS); /* 1F1 */ TEST_SF(s, gsl_sf_hyperg_1F1_e, (1, 1.5, 1, &r), 2.0300784692787049755, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (1, 1.5, 10, &r), 6172.859561078406855, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (1, 1.5, 100, &r), 2.3822817898485692114e+42, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (1, 1.5, 500, &r), 5.562895351723513581e+215, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (1.5, 2.5, 1, &r), 1.8834451238277954398, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (1.5, 2.5, 10, &r), 3128.7352996840916381, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (10, 1.1, 1, &r), 110.17623733873889579, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (10, 1.1, 10, &r), 6.146657975268385438e+09, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (10, 1.1, 100, &r), 9.331833897230312331e+55, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (10, 1.1, 500, &r), 4.519403368795715843e+235, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (10, 50.1, 2, &r), 1.5001295507968071788, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (10, 50.1, 10, &r), 8.713385849265044908, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (10, 50.1, 100, &r), 5.909423932273380330e+18, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (10, 50.1, 500, &r), 9.740060618457198900e+165, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, 1.1, 1, &r), 5.183531067116809033e+07, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, 1.1, 10, &r), 1.6032649110096979462e+28, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, 1.1, 100, &r), 1.1045151213192280064e+110, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, 50.1, 1, &r), 7.222953133216603757, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, 50.1, 10, &r), 1.0998696410887171538e+08, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, 50.1, 100, &r), 7.235304862322283251e+63, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (1, 1.5, -1, &r), 0.5380795069127684191, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (1, 1.5, -10, &r), 0.05303758099290164485, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (1, 1.5, -100, &r), 0.005025384718759852803, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (1, 1.5, -500, &r), 0.0010010030151059555322, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (1, 1.1, -500, &r), 0.00020036137599690208265, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (10, 1.1, -1, &r), 0.07227645648935938168, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (10, 1.1, -10, &r), 0.0003192415409695588126, TEST_TOL1, GSL_SUCCESS); /* sensitive to the pair_ratio hack in hyperg_1F1.c TEST_SF_RLX(s, gsl_sf_hyperg_1F1_e, (10, 1.1, -100, &r), -8.293425316123158950e-16, 50.0*TEST_SNGL, GSL_SUCCESS); */ TEST_SF(s, gsl_sf_hyperg_1F1_e, (10, 1.1, -500, &r), -3.400379216707701408e-23, TEST_TOL2, GSL_SUCCESS); TEST_SF_RLX(s, gsl_sf_hyperg_1F1_e, (50, 1.1, -90, &r), -7.843129411802921440e-22, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (50, 1.1, -100, &r), 4.632883869540640460e-24, TEST_SQRT_TOL0, GSL_SUCCESS); /* FIXME: tolerance is poor, but is consistent within reported error */ TEST_SF(s, gsl_sf_hyperg_1F1_e, (50, 1.1, -110.0, &r), 5.642684651305310023e-26, 0.03, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, 1.1, -1, &r), 0.0811637344096042096, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, 1.1, -10, &r), 0.00025945610092231574387, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, 1.1, -50, &r), 2.4284830988994084452e-13, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, 1.1, -90, &r), 2.4468224638378426461e-22, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, 1.1, -99, &r), 1.0507096272617608461e-23, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, 1.1, -100, &r), 1.8315497474210138602e-24, TEST_TOL2, GSL_SUCCESS); /* FIXME: Reported error is too small. TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, 1.1, -101, &r), -2.3916306291344452490e-24, 0.04, GSL_SUCCESS); */ /* FIXME: Reported error is too small. TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, 1.1, -110, &r), -4.517581986037732280e-26, TEST_TOL0, GSL_SUCCESS); */ /* FIXME: Result is terrible, but reported error is very large, so consistent. TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, 10.1, -220, &r), -4.296130300021696573e-64, TEST_TOL1, GSL_SUCCESS); */ TEST_SF(s, gsl_sf_hyperg_1F1_e, (-10, -10.1, 10.0, &r), 10959.603204633058116, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-10, -10.1, 1000.0, &r), 2.0942691895502242831e+23, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-10, -100.1, 10.0, &r), 2.6012036337980078062, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-1000, -1000.1, 10.0, &r), 22004.341698908631636, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-1000, -1000.1, 200.0, &r), 7.066514294896245043e+86, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-8.1, -10.1, -10.0, &r), 0.00018469685276347199258, TEST_TOL0, GSL_SUCCESS); /* TEST_SF(s, gsl_sf_hyperg_1F1_e, (-8.1, -1000.1, -10.0, &r), 0.9218280185080036020, TEST_TOL0, GSL_SUCCESS); */ TEST_SF(s, gsl_sf_hyperg_1F1_e, (-10, -5.1, 1, &r), 16.936141866089601635, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-10, -5.1, 10, &r), 771534.0349543820541, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-10, -5.1, 100, &r), 2.2733956505084964469e+17, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, -50.1, -1, &r), 0.13854540373629275583, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, -50.1, -10, &r), -9.142260314353376284e+19, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, -50.1, -100, &r), -1.7437371339223929259e+87, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, -50.1, 1, &r), 7.516831748170351173, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, -50.1, 10, &r), 1.0551632286359671976e+11, TEST_SQRT_TOL0, GSL_SUCCESS); /* These come out way off. On the other hand, the error estimates are also very large; so much so that the answers are consistent within the reported error. Something will need to be done about this eventually TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, -50.1, 50, &r), -7.564755600940346649e+36, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, -50.1, 100, &r), 4.218776962675977e+55, TEST_TOL3, GSL_SUCCESS); */ TEST_SF(s, gsl_sf_hyperg_1F1_e, (-10.5, -8.1, 0.1, &r), 1.1387201443786421724, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-10.5, -11.1, 1, &r), 2.5682766147138452362, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100.5, -80.1, 10, &r), 355145.4517305220603, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100.5, -102.1, 10, &r), 18678.558725244365016, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100.5, -500.1, 10, &r), 7.342209011101454, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100.5, -500.1, 100, &r), 1.2077443075367177662e+8, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-500.5, -80.1, 2, &r), 774057.8541325341699, TEST_TOL4, GSL_SUCCESS); /* UNIMPL TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, -10.1, 1, &r), -2.1213846338338567395e+12, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, -10.1, 10, &r), -6.624849346145112398e+39, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, -10.1, 100, &r), -1.2413466759089171904e+129, TEST_TOL0, GSL_SUCCESS); */ /* UNIMPL TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, -10.1, -1, &r), 34456.29405305551691, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, -10.1, -10, &r), -7.809224251467710833e+07, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (100, -10.1, -100, &r), -5.214065452753988395e-07, TEST_TOL0, GSL_SUCCESS); */ TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, 1.1, 1, &r), 0.21519810496314438414, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, 1.1, 10, &r), 8.196123715597869948, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, 1.1, 100, &r), -1.4612966715976530293e+20, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, 20.1, 1, &r), 0.0021267655527278456412, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, 20.1, 10, &r), 2.0908665169032186979e-11, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, 20.1, 100, &r), -0.04159447537001340412, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, 1.1, -1, &r), 2.1214770215694685282e+07, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, 1.1, -10, &r), 1.0258848879387572642e+24, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, 1.1, -100, &r), 1.1811367147091759910e+67, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, 50.1, -1, &r), 6.965259317271427390, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, 50.1, -10, &r), 1.0690052487716998389e+07, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-100, 50.1, -100, &r), 6.889644435777096248e+36, TEST_TOL3, GSL_SUCCESS); /* Bug report from Fernando Pilotto */ TEST_SF(s, gsl_sf_hyperg_1F1_e, (-2.05, 1.0, 5.05, &r), 3.79393389516785e+00, TEST_TOL3, GSL_SUCCESS); /* Bug reports from Ivan Liu */ TEST_SF(s, gsl_sf_hyperg_1F1_e, (-26, 2.0, 100.0, &r), 1.444786781107436954e+19, TEST_TOL3, GSL_SUCCESS); #ifdef FIXME /* This one is computed with a huge error, there is loss of precision but the error estimate flags the problem (assuming the user looks at it). We should probably trap any return with err>|val| and signal loss of precision */ TEST_SF(s, gsl_sf_hyperg_1F1_e, (-26.1, 2.0, 100.0, &r), 1.341557199575986995e+19, TEST_TOL3, GSL_SUCCESS); #endif /* Bug report H.Moseby */ TEST_SF(s, gsl_sf_hyperg_1F1_e, (1.2, 1.1e-15, 1.5, &r), 8254503159672429.02, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (1.0, 1000000.5, 0.8e6 + 0.5, &r), 4.999922505099443804e+00, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (1.0, 1000000.5, 1001000.5, &r), 3480.3699557431856166, TEST_TOL4, GSL_SUCCESS); #ifdef FIXME /* FIX THESE NEXT RELEASE */ TEST_SF(s, gsl_sf_hyperg_1F1_e, (1.1, 1000000.5, 1001000.5, &r), 7304.6126942641350122, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (0.9, 1000000.5, 1001000.5, &r), 1645.4879293475410982, TEST_TOL3, GSL_SUCCESS); #endif TEST_SF(s, gsl_sf_hyperg_1F1_e, (-1.1, 1000000.5, 1001000.5, &r), -5.30066488697455e-04, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (1.5, 1000000.5, 0.8e6 + 0.5, &r), 11.18001288977894650469927615, TEST_TOL4, GSL_SUCCESS); /* Bug report Lorenzo Moneta */ TEST_SF(s, gsl_sf_hyperg_1F1_e, (-1.5, 1.5, -100., &r), 456.44010011787485545, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-1.5, 1.5, 99., &r), 4.13360436014643309757065e36, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-1.5, 1.5, 100., &r), 1.0893724312430935129254e37, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-1.5, 1.5, 709., &r), 8.7396804160264899999692120e298, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-1.5, 1.5, 710., &r), 2.36563187217417898169834615e299, TEST_TOL4, GSL_SUCCESS); /* Bug report from Weibin Li */ #ifdef FIXME TEST_SF(s, gsl_sf_hyperg_1F1_e, (-37.8, 2.01, 103.58, &r), -6.21927211009e17, TEST_TOL1, GSL_SUCCESS); #endif /* Testing BJG */ #ifdef COMPARISON_WITH_MATHEMATICA /* Mathematica uses a different convention for M(-m,-n,x) */ TEST_SF(s, gsl_sf_hyperg_1F1_int_e, (-1, -1, 0.1, &r), 1.1, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_1F1_e, (-1, -1, 0.1, &r), 1.1, TEST_TOL0, GSL_SUCCESS); #endif /* U for integer parameters */ TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 1, 0.0001, &r), 8.634088070212725330, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 1, 0.01, &r), 4.078511443456425847, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 1, 0.5, &r), 0.9229106324837304688, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 1, 2.0, &r), 0.3613286168882225847, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 1, 100, &r), 0.009901942286733018406, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 1, 1000, &r), 0.0009990019940238807150, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 8, 0.01, &r), 7.272361203006010000e+16, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 8, 1, &r), 1957.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 8, 5, &r), 1.042496, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 8, 8, &r), 0.3207168579101562500, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 8, 50, &r), 0.022660399001600000000, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 8, 100, &r), 0.010631236727200000000, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 8, 1000, &r), 0.0010060301203607207200, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 20, 1, &r), 1.7403456103284421000e+16, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 20, 20, &r), 0.22597813610531052969, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 50, 1, &r), 3.374452117521520758e+61, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 50, 50, &r), 0.15394136814987651785, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 100, 0.1, &r), 1.0418325171990852858e+253, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 100, 1, &r), 2.5624945006073464385e+154, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 100, 50, &r), 3.0978624160896431391e+07, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 100, 100, &r), 0.11323192555773717475, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 100, 200, &r), 0.009715680951406713589, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 100, 1000, &r), 0.0011085142546061528661, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, 1000, 2000, &r), 0.0009970168547036318206, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, -1, 1, &r), 0.29817368116159703717, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, -1, 10, &r), 0.07816669698940409380, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, -10, 1, &r), 0.08271753756946041959, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, -10, 5, &r), 0.06127757419425055261, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, -10, 10, &r), 0.04656199948873187212, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, -10, 20, &r), 0.031606421847946077709, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, -100, 0.01, &r), 0.009900000099999796950, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, -100, 1, &r), 0.009802970197050404429, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, -100, 10, &r), 0.009001648897173103447, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, -100, 20, &r), 0.008253126487166557546, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, -100, 50, &r), 0.006607993916432051008, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, -100, 90, &r), 0.005222713769726871937, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, -100, 110, &r), 0.004727658137692606210, TEST_TOL2, GSL_SUCCESS); TEST_SF_RLX(s, gsl_sf_hyperg_U_int_e, (1, -1000, 1, &r), 0.0009980029970019970050, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (1, -1000, 1010, &r), 0.0004971408839859245170, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (8, 1, 0.001, &r), 0.0007505359326875706975, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (8, 1, 0.5, &r), 6.449509938973479986e-06, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (8, 1, 8, &r), 6.190694573035761284e-10, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (8, 1, 20, &r), 3.647213845460374016e-12, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (8, 8, 1, &r), 0.12289755012652317578, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (8, 8, 10, &r), 5.687710359507564272e-09, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (8, 8, 20, &r), 2.8175404594901039724e-11, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (100, 100, 0.01, &r), 1.0099979491941914867e+196, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (100, 100, 0.1, &r), 1.0090713562719862833e+97, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (100, 100, 1, &r), 0.009998990209084729106, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (100, 100, 20, &r), 1.3239363905866130603e-131, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-10, 1, 0.01, &r), 3.274012540759009536e+06, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-10, 1, 1, &r), 1.5202710000000000000e+06, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-10, 1, 10, &r), 1.0154880000000000000e+08, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-10, 1, 100, &r), 3.284529863685482880e+19, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-10, 10, 1, &r), 1.1043089864100000000e+11, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-10, 100, 1, &r), 1.3991152402448957897e+20, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-10, 100, 10, &r), 5.364469916567136000e+19, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-10, 100, 100, &r), 3.909797568000000000e+12, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-10, 100, 500, &r), 8.082625576697984130e+25, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-50, 1, 0.01, &r), 1.6973422555823855798e+64, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-50, 1, 1, &r), 7.086160198304780325e+63, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-50, 1, 10, &r), 5.332862895528712200e+65, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-50, 10, 1, &r), -7.106713471565790573e+71, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-50, 100, 1, &r), 2.4661377199407186476e+104, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-50, 10, 10, &r), 5.687538583671241287e+68, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-50, 100, 10, &r), 1.7880761664553373445e+102, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-90, 1, 0.01, &r), 4.185245354032917715e+137, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-90, 1, 0.1, &r), 2.4234043408007841358e+137, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-90, 1, 10, &r), -1.8987677149221888807e+139, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-90, 10, 10, &r), -5.682999988842066677e+143, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-90, 100, 10, &r), 2.3410029853990624280e+189, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-90, 1000, 10, &r), 1.9799451517572225316e+271, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-50, -1, 10, &r), -9.083195466262584149e+64, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-50, -10, 10, &r), -1.4418257327071634407e+62, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-50, -100, 0.01, &r), 3.0838993811468983931e+93, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-50, -100, 10, &r), 4.014552630378340665e+95, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-100, -100, 10, &r), 2.0556466922347982030e+162, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-100, -200, 10, &r), 1.1778399522973555582e+219, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (-100, -200, 100, &r), 9.861313408898201873e+235, TEST_TOL3, GSL_SUCCESS); /* U */ TEST_SF(s, gsl_sf_hyperg_U_e, (0.0001, 0.0001, 0.0001, &r), 1.0000576350699863577, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (0.0001, 0.0001, 1.0, &r), 0.9999403679233247536, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (0.0001, 0.0001, 100.0, &r), 0.9995385992657260887, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (0.0001, 1, 0.0001, &r), 1.0009210608660065989, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (0.0001, 1.0, 1.0, &r), 0.9999999925484179084, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (0.0001, 10, 1, &r), 13.567851006281412726, TEST_TOL3, GSL_SUCCESS); TEST_SF_RLX(s, gsl_sf_hyperg_U_e, (0.0001, 10, 5, &r), 1.0006265020064596364, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (0.0001, 10, 10, &r), 0.9999244381454633265, TEST_TOL0, GSL_SUCCESS); TEST_SF_RLX(s, gsl_sf_hyperg_U_e, (0.0001, 100, 1, &r), 2.5890615708804247881e+150, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF_RLX(s, gsl_sf_hyperg_U_e, (0.0001, 100, 10, &r), 2.3127845417739661466e+55, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF_RLX(s, gsl_sf_hyperg_U_e, (0.0001, 100, 50, &r), 6402.818715083582554, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (0.0001, 100, 98, &r), 0.9998517867411840044, TEST_TOL2, GSL_SUCCESS); TEST_SF_RLX(s, gsl_sf_hyperg_U_e, (0.0001, 1000, 300, &r), 2.5389557274938010716e+213, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (0.0001, 1000, 999, &r), 0.9997195294193261604, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (0.0001, 1000, 1100, &r), 0.9995342990014584713, TEST_TOL1, GSL_SUCCESS); TEST_SF_RLX(s, gsl_sf_hyperg_U_e, (0.5, 1000, 300, &r), 1.1977955438214207486e+217, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (0.5, 1000, 800, &r), 9.103916020464797207e+08, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (0.5, 1000, 998, &r), 0.21970269691801966806, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (0.5, 0.5, 1.0, &r), 0.7578721561413121060, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (1, 0.0001, 0.0001, &r), 0.9992361337764090785, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (1, 0.0001, 1, &r), 0.4036664068111504538, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (1, 0.0001, 100, &r), 0.009805780851264329587, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (1, 1.2, 2.0, &r), 0.3835044780075602550, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (1, -0.0001, 1, &r), 0.4036388693605999482, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (8, 10.5, 1, &r), 27.981926466707438538, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (8, 10.5, 10, &r), 2.4370135607662056809e-8, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (8, 10.5, 100, &r), 1.1226567526311488330e-16, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (10, -2.5, 10, &r), 6.734690720346560349e-14, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (10, 2.5, 10, &r), 6.787780794037971638e-13, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (10, 2.5, 50, &r), 2.4098720076596087125e-18, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 1.1, 1, &r), -3.990841457734147e+6, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 1.1, 10, &r), 1.307472052129343e+8, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 1.1, 50, &r), 3.661978424114088e+16, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 1.1, 90, &r), 8.09469542130868e+19, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 1.1, 99, &r), 2.546328328942063e+20, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 1.1, 100, &r), 2.870463201832814e+20, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 1.1, 200, &r), 8.05143453769373e+23, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 10.1, 0.1, &r), -3.043016255306515e+20, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 10.1, 1, &r), -3.194745265896115e+12, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 10.1, 4, &r), -6.764203430361954e+07, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 10.1, 10, &r), -2.067399425480545e+09, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 10.1, 50, &r), 4.661837330822824e+14, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 100.4, 10, &r), -6.805460513724838e+66, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 100.4, 50, &r), -2.081052558162805e+18, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 100.4, 80, &r), 2.034113191014443e+14, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 100.4, 100, &r), 6.85047268436107e+13, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-10.5, 100.4, 200, &r), 1.430815706105649e+20, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-19.5, 82.1, 10, &r), 5.464313196201917432e+60, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-50.5, 100.1, 10, &r), -5.5740216266953e+126, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-50.5, 100.1, 40, &r), 5.937463786613894e+91, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-50.5, 100.1, 50, &r), -1.631898534447233e+89, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-50.5, 100.1, 70, &r), 3.249026971618851e+84, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-50.5, 100.1, 100, &r), 1.003401902126641e+85, TEST_TOL1, GSL_SUCCESS); /* Bug report from Stefan Gerlach */ TEST_SF(s, gsl_sf_hyperg_U_e, (-2.0, 4.0, 1.0, &r), 11.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2.0, 0.5, 3.14, &r), 1.1896, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2.0, 0.5, 1.13, &r), -1.3631, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2.0, 0.5, 0.0, &r), 0.75, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2.0, 0.5, 1e-20, &r), 0.75, TEST_TOL2, GSL_SUCCESS); /* U(a,b,x) for x<0 [bug #27859] */ /* Tests for b >= 0 */ TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, 0, -0.1, &r), 1, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, 0, -0.1, &r), -0.1, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, 0, -0.1, &r), 0.21, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-3, 0, -0.1, &r), -0.661, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-4, 0, -0.1, &r), 2.7721, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-5, 0, -0.1, &r), -14.52201, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, 0, -0.1, &r), 91.230301, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, 1, -0.1, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, 1, -0.1, &r), -1.1, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, 1, -0.1, &r), 2.41, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-3, 1, -0.1, &r), -7.891, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-4, 1, -0.1, &r), 34.3361, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-5, 1, -0.1, &r), -186.20251, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, 1, -0.1, &r), 1208.445361, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 1, 2, -0.1, &r), -10.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, 2, -0.1, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, 2, -0.1, &r), -2.1, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, 2, -0.1, &r), 6.61, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-3, 2, -0.1, &r), -27.721, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-4, 2, -0.1, &r), 145.2201, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-5, 2, -0.1, &r), -912.30301, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, 2, -0.1, &r), 6682.263421, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 2, 3, -0.1, &r), 100.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 1, 3, -0.1, &r), 90.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, 3, -0.1, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, 3, -0.1, &r), -3.10, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, 3, -0.1, &r), 12.81, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-3, 3, -0.1, &r), -66.151, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-4, 3, -0.1, &r), 409.8241, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-5, 3, -0.1, &r), -2961.42351, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, 3, -0.1, &r), 24450.804481, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 3, 4, -0.1, &r), -1000.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 2, 4, -0.1, &r), -1900.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 1, 4, -0.1, &r), -1810.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, 4, -0.1, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, 4, -0.1, &r), -4.10, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, 4, -0.1, &r), 21.01, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-3, 4, -0.1, &r), -129.181, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-4, 4, -0.1, &r), 926.5481, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-5, 4, -0.1, &r), -7594.16401, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, 4, -0.1, &r), 70015.788541, TEST_TOL2, GSL_SUCCESS); /* Tests for b < 0 */ TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, -1, -0.1, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, -1, -0.1, &r), 0.9, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, -1, -0.1, &r), 0.01, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-3, -1, -0.1, &r), -0.031, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-4, -1, -0.1, &r), 0.1281, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-5, -1, -0.1, &r), -0.66151, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, -1, -0.1, &r), 4.098241, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, -2, -0.1, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, -2, -0.1, &r), 1.9, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, -2, -0.1, &r), 1.81, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-3, -2, -0.1, &r), -0.001, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-4, -2, -0.1, &r), 0.0041, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-5, -2, -0.1, &r), -0.02101, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, -2, -0.1, &r), 0.129181, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, -3, -0.1, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, -3, -0.1, &r), 2.9, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, -3, -0.1, &r), 5.61, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-3, -3, -0.1, &r), 5.429, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-4, -3, -0.1, &r), 0.0001, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-5, -3, -0.1, &r), -0.00051, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, -3, -0.1, &r), 0.003121, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, ( 0, -4, -0.1, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, -4, -0.1, &r), 3.9, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, -4, -0.1, &r), 11.41, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-3, -4, -0.1, &r), 22.259, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-4, -4, -0.1, &r), 21.7161, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-5, -4, -0.1, &r), -1e-5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-6, -4, -0.1, &r), 0.000061, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-7, -4, -0.1, &r), -0.0004341, TEST_TOL0, GSL_SUCCESS); /* Tests for integer a */ TEST_SF(s, gsl_sf_hyperg_U_e, (-3, 0.5, -0.5, &r), -9.5, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-8, 0.5, -0.5, &r), 180495.0625, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-8, 1.5, -0.5, &r), 827341.0625, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-8, 1.5, -10, &r), 7.162987810253906e9, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (3, 6, -0.5, &r), -296.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (3, 7, -0.5, &r), 2824, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (5, 12, -1.7, &r), -153.262676210016018065768591104, TEST_TOL2, GSL_SUCCESS); /* A few random tests */ TEST_SF(s, gsl_sf_hyperg_U_e, (0, 0, -0.5, &r), 1, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (0, 1, -0.5, &r), 1, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (0, 1, -0.001, &r), 1, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, 0.99, -0.1, &r), -1.09, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-1, 0, -0.5, &r), -0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-2, 0, -0.5, &r), 1.25, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (-7, 0, -0.1, &r), -668.2263421, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (3, 6, -0.5, &r), -296.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (3, 7, -0.5, &r), 2824, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_int_e, (5, 12, -1.7, &r), -153.262676210016018065768591104, TEST_TOL2, GSL_SUCCESS); /* Bug report from Raymond Rogers */ TEST_SF(s, gsl_sf_hyperg_U_e, (4.11, 0.11, 6.4, &r), 6.422378238765078623739153038e-5, TEST_TOL2, GSL_SUCCESS); /* Addition tests from Raymond Rogers */ TEST_SF(s, gsl_sf_hyperg_U_e, (5, 4, 6.4, &r), 3.2586223825343211136628535e-05, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (2.2,1.2 , 8.7, &r), 5.7250017539318661177749625e-03, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_U_e, (2, -6.4, 1, &r),1.2141502795806162484648638e-02 , TEST_TOL2, GSL_SUCCESS); /* 2F1 */ TEST_SF(s, gsl_sf_hyperg_2F1_e, (1, 1, 1, 0.5, &r), 2.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (8, 8, 1, 0.5, &r), 12451584.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (8, -8, 1, 0.5, &r), 0.13671875, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (8, -8.1, 1, 0.5, &r), 0.14147385378899930422, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (8, -8, 1, -0.5, &r), 4945.136718750000000, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (8, -8, -5.5, 0.5, &r), -906.6363636363636364, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (8, -8, -5.5, -0.5, &r), 24565.363636363636364, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (8, 8, 1, -0.5, &r), -0.006476312098196747669, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (8, 8, 5, 0.5, &r), 4205.714285714285714, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (8, 8, 5, -0.5, &r), 0.0028489656290296436616, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (9, 9, 1, 0.99, &r), 1.2363536673577259280e+38 , TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (9, 9, -1.5, 0.99, &r), 3.796186436458346579e+46, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (9, 9, -1.5, -0.99, &r), 0.14733409946001025146, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (9, 9, -8.5, 0.99, &r), -1.1301780432998743440e+65, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (9, 9, -8.5, -0.99, &r), -8.856462606575344483, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (9, 9, -21.5, 0.99, &r), 2.0712920991876073253e+95, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (9, 9, -21.5, -0.99, &r), -74.30517015382249216, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (9, 9, -100.5, 0.99, &r), -3.186778061428268980e+262, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (9, 9, -100.5, -0.99, &r), 2.4454358338375677520, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (25, 25, 1, -0.5, &r), -2.9995530823639545027e-06, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (1.5, 0.5, 2.0, 1.0-1.0/64.0, &r), 3.17175539044729373926, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (1.5, 0.5, 2.0, 1.0-1.0/128.0, &r), 3.59937243502024563424, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (1.5, 0.5, 2.0, 1.0-1.0/256.0, &r), 4.03259299524392504369, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (1.5, 0.5, 2.0, 1.0-1.0/1024.0, &r), 4.90784159359675398250, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (1.5, 0.5, 2.0, 1.0-1.0/65536.0, &r), 7.552266033399683914, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (1.5, 0.5, 2.0, 1.0-1.0/16777216.0, &r), 11.08235454026043830363, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (1.5, 0.5, 2.0, -1.0+1.0/1024.0, &r), 0.762910940909954974527, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (1.5, 0.5, 2.0, -1.0+1.0/65536.0, &r), 0.762762124908845424449, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (1.5, 0.5, 2.0, -1.0+1.0/1048576.0, &r), 0.762759911089064738044, TEST_TOL0, GSL_SUCCESS); /* added special handling with x == 1.0 , Richard J. Mathar, 2008-01-09 */ TEST_SF(s, gsl_sf_hyperg_2F1_e, (1.5, 0.5, 3.0, 1.0, &r), 1.6976527263135502482014268 , TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (1.5, -4.2, 3.0, 1.0, &r), .15583601560025710649555254 , TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (-7.4, 0.7, -1.5, 1.0, &r), -.34478866959246584996859 , TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (0.1, -2.7, -1.5, 1.0, &r), 1.059766766063610122925 , TEST_TOL2, GSL_SUCCESS); /* Taylor Binnington a = 0 */ TEST_SF(s, gsl_sf_hyperg_2F1_e, (0, -2, -4, 0.5, &r), 1.0 , TEST_TOL2, GSL_SUCCESS); /* Andrew Benson bug #24812 in Pari: poch(a,x) = { gamma(a+x)/gamma(a) } t(a,b,c,x,k) = { (poch(a,k)*poch(b,k)/poch(c,k)) * (x^k)/(k!) } suminf(k=0,t(-10.34, 2.05, 3.05, 0.1725,k)) */ TEST_SF(s, gsl_sf_hyperg_2F1_e, (-10.34, 2.05, 3.05, 0.1725, &r), 0.310473552213130010351006093079548, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (-9.99999999999, 2.05, 3.05, 0.1725, &r),0.32141934630197487540298837643890, TEST_TOL2, GSL_SUCCESS); /* Didier Pinchon also bug #24812 */ TEST_SF(s, gsl_sf_hyperg_2F1_e, (11, -1, 11.0/2.0, 0.125 , &r), 0.75, TEST_TOL2, GSL_SUCCESS); /* Bill Maier - bug #45926 */ TEST_SF(s, gsl_sf_hyperg_2F1_e, (-0.2, 8.8, 10.0, 0.8, &r), 0.77998971427681563, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_e, (-0.2, 9.8, 11.0, 0.8, &r), 0.77574573497387267, TEST_TOL0, GSL_SUCCESS); #if 0 /* XXX - bug #39056 */ /* Test case from Hatef Monajemi */ TEST_SF(s, gsl_sf_hyperg_2F1_e, (3.5, -0.5, 5.0, 0.9, &r), 0.5923981284370653465208973272, TEST_TOL2, GSL_SUCCESS); /* Test case from Robert L Wolpert */ TEST_SF(s, gsl_sf_hyperg_2F1_e, (-1.0, -10.0, 1.0, 0.5, &r), 6.0, TEST_TOL0, GSL_SUCCESS); /* Test case from ldnlwm@163.com */ TEST_SF(s, gsl_sf_hyperg_2F1_e, (3.23191, -4.0229, 8.02291, 0.5, &r), 0.4300243900348170646, TEST_TOL2, GSL_SUCCESS); #endif /* 2F1 conj */ TEST_SF(s, gsl_sf_hyperg_2F1_conj_e, (1, 1, 1, 0.5, &r), 3.352857095662929028, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_conj_e, (8, 8, 1, 0.5, &r), 1.7078067538891293983e+09, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_conj_e, (8, 8, 5, 0.5, &r), 285767.15696901140627, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_conj_e, (8, 8, 1, -0.5, &r), 0.007248196261471276276, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_conj_e, (8, 8, 5, -0.5, &r), 0.00023301916814505902809, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_conj_e, (25, 25, 1, -0.5, &r), 5.1696944096e-06, TEST_SQRT_TOL0, GSL_SUCCESS); /* updated correct values, testing enabled, Richard J. Mathar, 2008-01-09 */ TEST_SF(s, gsl_sf_hyperg_2F0_e, (0.01, 1.0, -0.02, &r), .99980388665511730901180717 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F0_e, (0.1, 0.5, -0.02, &r), .99901595171179281891589794 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F0_e, (1, 1, -0.02, &r), .98075549650574351826538049000 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F0_e, (8, 8, -0.02, &r), .32990592849626965538692141 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F0_e, (50, 50, -0.02, &r), .2688995263772964415245902e-12 , TEST_TOL0, GSL_SUCCESS); /* 2F1 renorm */ TEST_SF(s, gsl_sf_hyperg_2F1_renorm_e, (1, 1, 1, 0.5, &r), 2.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_renorm_e, (8, 8, 1, 0.5, &r), 12451584.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_renorm_e, (8, -8, 1, 0.5, &r), 0.13671875, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_renorm_e, (8, -8, 1, -0.5, &r), 4945.13671875, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_renorm_e, (8, -8, -5.5, 0.5, &r), -83081.19167659493609, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_renorm_e, (8, -8, -5.5, -0.5, &r), 2.2510895952730178518e+06, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_renorm_e, (8, 8, 5, 0.5, &r), 175.2380952380952381, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_renorm_e, (9, 9, -1.5, 0.99, &r), 1.6063266334913066551e+46, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_renorm_e, (9, 9, -1.5, -0.99, &r), 0.06234327316254516616, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_renorm_e, (5, 5, -1, 0.5, &r), 4949760.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_renorm_e, (5, 5, -10, 0.5, &r), 139408493229637632000.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_renorm_e, (5, 5, -100, 0.5, &r), 3.0200107544594411315e+206, TEST_TOL3, GSL_SUCCESS); /* 2F1 conj renorm */ TEST_SF(s, gsl_sf_hyperg_2F1_conj_renorm_e, (9, 9, -1.5, 0.99, &r), 5.912269095984229412e+49, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_conj_renorm_e, (9, 9, -1.5, -0.99, &r), 0.10834020229476124874, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_conj_renorm_e, (5, 5, -1, 0.5, &r), 1.4885106335357933625e+08, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_conj_renorm_e, (5, 5, -10, 0.5, &r), 7.968479361426355095e+21, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hyperg_2F1_conj_renorm_e, (5, 5, -100, 0.5, &r), 3.1113180227052313057e+208, TEST_TOL3, GSL_SUCCESS); return s; } gsl/specfunc/recurse.h0000644000175000017500000001724613536674414013373 0ustar eddedd/* specfunc/recurse.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef _RECURSE_H_ #define _RECURSE_H_ #define CONCAT(a,b) a ## _ ## b /* n_max >= n_min + 2 * f[n+1] + a[n] f[n] + b[n] f[n-1] = 0 * * Trivial forward recurrence. */ #define GEN_RECURSE_FORWARD_SIMPLE(func) \ int CONCAT(recurse_forward_simple, func) ( \ const int n_max, const int n_min, \ const double parameters[], \ const double f_n_min, \ const double f_n_min_p1, \ double * f, \ double * f_n_max \ ) \ { \ int n; \ \ if(f == 0) { \ double f2 = f_n_min; \ double f1 = f_n_min_p1; \ double f0; \ for(n=n_min+2; n<=n_max; n++) { \ f0 = -REC_COEFF_A(n-1,parameters) * f1 - REC_COEFF_B(n-1, parameters) * f2; \ f2 = f1; \ f1 = f0; \ } \ *f_n_max = f0; \ } \ else { \ f[n_min] = f_n_min; \ f[n_min + 1] = f_n_min_p1; \ for(n=n_min+2; n<=n_max; n++) { \ f[n] = -REC_COEFF_A(n-1,parameters) * f[n-1] - REC_COEFF_B(n-1, parameters) * f[n-2]; \ } \ *f_n_max = f[n_max]; \ } \ \ return GSL_SUCCESS; \ } \ /* n_start >= n_max >= n_min * f[n+1] + a[n] f[n] + b[n] f[n-1] = 0 * * Generate the minimal solution of the above recursion relation, * with the simplest form of the normalization condition, f[n_min] given. * [Gautschi, SIAM Rev. 9, 24 (1967); (3.9) with s[n]=0] */ #define GEN_RECURSE_BACKWARD_MINIMAL_SIMPLE(func) \ int CONCAT(recurse_backward_minimal_simple, func) ( \ const int n_start, \ const int n_max, const int n_min, \ const double parameters[], \ const double f_n_min, \ double * f, \ double * f_n_max \ ) \ { \ int n; \ double r_n = 0.; \ double r_nm1; \ double ratio; \ \ for(n=n_start; n > n_max; n--) { \ r_nm1 = -REC_COEFF_B(n, parameters) / (REC_COEFF_A(n, parameters) + r_n); \ r_n = r_nm1; \ } \ \ if(f != 0) { \ f[n_max] = 10.*DBL_MIN; \ for(n=n_max; n > n_min; n--) { \ r_nm1 = -REC_COEFF_B(n, parameters) / (REC_COEFF_A(n, parameters) + r_n); \ f[n-1] = f[n] / r_nm1; \ r_n = r_nm1; \ } \ ratio = f_n_min / f[n_min]; \ for(n=n_min; n<=n_max; n++) { \ f[n] *= ratio; \ } \ } \ else { \ double f_nm1; \ double f_n = 10.*DBL_MIN; \ *f_n_max = f_n; \ for(n=n_max; n > n_min; n--) { \ r_nm1 = -REC_COEFF_B(n, parameters) / (REC_COEFF_A(n, parameters) + r_n); \ f_nm1 = f_n / r_nm1; \ r_n = r_nm1; \ } \ ratio = f_n_min / f_nm1; \ *f_n_max *= ratio; \ } \ \ return GSL_SUCCESS; \ } \ #endif /* !_RECURSE_H_ */ gsl/specfunc/hermite.c0000644000175000017500000014051313536675317013350 0ustar eddedd/* specfunc/hermite.c * * Copyright (C) 2011, 2012, 2013, 2014, 2019 Konrad Griessinger (konradg(at)gmx.net) * Copyright (C) 2019 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /*----------------------------------------------------------------------* * "The purpose of computing is insight, not numbers." - R.W. Hamming * * Hermite polynomials, Hermite functions * * and their respective arbitrary derivatives * *----------------------------------------------------------------------*/ /* TODO: * - array functions for derivatives of Hermite functions * - asymptotic approximation for derivatives of Hermite functions * - refine existing asymptotic approximations, especially around x=sqrt(2*n+1) or x=sqrt(2*n+1)*sqrt(2), respectively */ #include #include #include #include #include #include #include #include "error.h" #include "eval.h" #define pow2(n) (gsl_sf_pow_int(2,n)) #define RND(x) ((double) ((x >= 0) ? (int) (x + 0.5) : (int) (x - 0.5))) /* evaluates the probabilists' Hermite polynomial of order n at position x */ int gsl_sf_hermite_prob_e(const int n, const double x, gsl_sf_result * result) { if (n < 0) { DOMAIN_ERROR(result); } else if (n == 0) { result->val = 1.; result->err = 0.; return GSL_SUCCESS; } else if (n == 1) { result->val = x; result->err = 0.; return GSL_SUCCESS; } else if (x == 0.0) { if (GSL_IS_ODD(n)) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { /* for n even, He_n(0) = (-1)^{n/2} (n - 1)!! */ int status = GSL_SUCCESS; if (n - 1 > GSL_SF_DOUBLEFACT_NMAX) /* test if (n - 1)!! will overflow */ { status = GSL_EOVRFLW; result->val = GSL_IS_ODD(n / 2) ? GSL_NEGINF : GSL_POSINF; result->err = GSL_POSINF; } else { gsl_sf_doublefact_e(n - 1, result); if (GSL_IS_ODD(n / 2)) result->val = -result->val; } return status; } } else { /* upward recurrence: He_{n+1} = x He_n - n He_{n-1} */ int status = GSL_SUCCESS; const double abs_x = fabs(x); const double thresh1 = abs_x > 1.0 ? 0.9 * GSL_DBL_MAX / abs_x : GSL_DBL_MAX; const double thresh2 = 0.9 * GSL_DBL_MAX; double p_n0 = 1.0; /* He_0(x) */ double p_n1 = x; /* He_1(x) */ double p_n = p_n1; double e_n0 = GSL_DBL_EPSILON; double e_n1 = fabs(x)*GSL_DBL_EPSILON; double e_n = e_n1; int j; for (j = 1; j < n; j++) { if (fabs(p_n1) > thresh1 || /* test if x*p_n1 will overflow */ fabs(p_n0) > thresh2 / j) /* test if j*p_n0 will overflow */ { status = GSL_EOVRFLW; break; } p_n = x*p_n1 - j*p_n0; p_n0 = p_n1; p_n1 = p_n; e_n = fabs(x)*e_n1+j*e_n0; e_n0 = e_n1; e_n1 = e_n; } result->val = p_n; result->err = e_n + fabs(result->val)*GSL_DBL_EPSILON; return status; } } double gsl_sf_hermite_prob(const int n, const double x) { EVAL_RESULT(gsl_sf_hermite_prob_e(n, x, &result)); } /* Evaluates the m-th derivative of the probabilists' Hermite polynomial of order n at position x. * The direct formula He^{(m)}_n = n!/(n-m)!*He_{n-m}(x) (where He_j(x) is the j-th probabilists' Hermite polynomial and He^{(m)}_j(x) its m-th derivative) is employed. */ int gsl_sf_hermite_prob_deriv_e(const int m, const int n, const double x, gsl_sf_result * result) { if (n < 0 || m < 0) { DOMAIN_ERROR(result); } else if (n < m) { result->val = 0.; result->err = 0.; return GSL_SUCCESS; } else { int status; double f = gsl_sf_choose(n,m)*gsl_sf_fact(m); gsl_sf_result He; status = gsl_sf_hermite_prob_e(n - m, x, &He); if (status == GSL_SUCCESS) { result->val = He.val*f; result->err = He.err*f + GSL_DBL_EPSILON*fabs(result->val); } else { result->val = He.val; result->err = GSL_POSINF; } return status; } } double gsl_sf_hermite_prob_deriv(const int m, const int n, const double x) { EVAL_RESULT(gsl_sf_hermite_prob_deriv_e(m, n, x, &result)); } /* evaluates the physicists' Hermite polynomial of order n at position x */ int gsl_sf_hermite_e(const int n, const double x, gsl_sf_result * result) { if (n < 0) { DOMAIN_ERROR(result); } else if (n == 0) { result->val = 1.; result->err = 0.; return GSL_SUCCESS; } else if (n == 1) { result->val = 2.0*x; result->err = 0.; return GSL_SUCCESS; } else if (x == 0.0) { if (GSL_IS_ODD(n)) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { /* for n even, H_n(0) = (-2)^{n/2} (n - 1)!! */ int status = GSL_SUCCESS; int m = n >> 1; if (n - 1 > GSL_SF_DOUBLEFACT_NMAX) /* test if (n - 1)!! will overflow */ { status = GSL_EOVRFLW; result->val = GSL_IS_ODD(m) ? GSL_NEGINF : GSL_POSINF; result->err = GSL_POSINF; } else { double f = gsl_pow_int(2.0, m); gsl_sf_doublefact_e(n - 1, result); if (result->val > 0.9 * GSL_DBL_MAX / f) /* test if 2^{n/2} * (n-1)!! will overflow */ { status = GSL_EOVRFLW; result->val = GSL_IS_ODD(m) ? GSL_NEGINF : GSL_POSINF; result->err = GSL_POSINF; } else { result->val *= f; result->err *= f; if (GSL_IS_ODD(m)) result->val = -result->val; } } return status; } } else { /* upward recurrence: H_{n+1} = 2x H_n - 2n H_{n-1} */ int status = GSL_SUCCESS; const double two_x = 2.0 * x; const double abs_two_x = fabs(two_x); const double thresh1 = abs_two_x > 1.0 ? 0.9 * GSL_DBL_MAX / abs_two_x : GSL_DBL_MAX; const double thresh2 = 0.9 * GSL_DBL_MAX / 2.0; double p_n0 = 1.0; /* H_0(x) */ double p_n1 = two_x; /* H_1(x) */ double p_n = p_n1; double e_n0 = GSL_DBL_EPSILON; double e_n1 = 2.*fabs(x)*GSL_DBL_EPSILON; double e_n = e_n1; int j; for (j = 1; j <= n - 1; j++) { if (fabs(p_n1) > thresh1 || /* test if 2*x*p_n1 will overflow */ fabs(p_n0) > thresh2 / j) /* test if 2*j*p_n0 will overflow */ { status = GSL_EOVRFLW; break; } p_n = two_x*p_n1 - 2.0*j*p_n0; p_n0 = p_n1; p_n1 = p_n; e_n = 2.*(fabs(x)*e_n1+j*e_n0); e_n0 = e_n1; e_n1 = e_n; } result->val = p_n; result->err = e_n + fabs(result->val)*GSL_DBL_EPSILON; return status; } } double gsl_sf_hermite(const int n, const double x) { EVAL_RESULT(gsl_sf_hermite_e(n, x, &result)); } /* Evaluates the m-th derivative of the physicists' Hermite polynomial of order n at position x. * The direct formula H^{(m)}_n = 2**m*n!/(n-m)!*H_{n-m}(x) (where H_j(x) is the j-th physicists' Hermite polynomial and H^{(m)}_j(x) its m-th derivative) is employed. */ int gsl_sf_hermite_deriv_e(const int m, const int n, const double x, gsl_sf_result * result) { if (n < 0 || m < 0) { DOMAIN_ERROR(result); } else if (n < m) { result->val = 0.; result->err = 0.; return GSL_SUCCESS; } else { int status; double f = gsl_sf_choose(n,m)*gsl_sf_fact(m)*pow2(m); gsl_sf_result H; status = gsl_sf_hermite_e(n - m, x, &H); if (status == GSL_SUCCESS) { result->val = H.val*f; result->err = H.err*f + GSL_DBL_EPSILON*fabs(result->val); } else { result->val = H.val; result->err = GSL_POSINF; } return status; } } double gsl_sf_hermite_deriv(const int m, const int n, const double x) { EVAL_RESULT(gsl_sf_hermite_deriv_e(m, n, x, &result)); } /* evaluates the Hermite function of order n at position x */ int gsl_sf_hermite_func_e(const int n, const double x, gsl_sf_result * result) { if (n < 0) { DOMAIN_ERROR(result); } else if (x == 0.0) { if (GSL_IS_ODD(n)) { result->val = 0.; result->err = 0.; return GSL_SUCCESS; } else { double f = (GSL_IS_ODD(n / 2) ? -1.0 : 1.0); int j; for(j = 1; j < n; j += 2) f *= sqrt(j / (j + 1.0)); result->val = f / sqrt(M_SQRTPI); result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } else if (n == 0) { result->val = exp(-0.5 * x * x) / sqrt(M_SQRTPI); result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if (n == 1) { result->val = M_SQRT2 * x * exp(-0.5 * x * x) / sqrt(M_SQRTPI); result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { /* * This algorithm is based on the modified recurrence algorithm * found in the appendix of: * * B. Bunck, BIT Numerical Mathematics, 49, 281 (2009) * * Numerical tests showed that this algorithm is more stable for * large x (x > 40) than the standard recurrence relation. * Accuracy is comparable to the recurrence relation method * for small x and all n. * * See: * * https://scicomp.stackexchange.com/questions/30896/generate-high-n-quantum-harmonic-oscillator-states-numerically * * for further discussion. */ double hi2 = 1.0 / sqrt(M_SQRTPI); /* \hat{h}_0 */ double hi1 = M_SQRT2 * x * hi2; /* \hat{h}_1 */ double hi = 0.0; double sum_log_scale = 0.0; double abshi; int i; for (i = 2; i <= n; ++i) { hi = sqrt(2.0 / i) * x * hi1 - sqrt((i - 1.0) / i) * hi2; hi2 = hi1; hi1 = hi; abshi = fabs(hi); if (abshi > 1.0) { double log_scale = RND(log(abshi)); double scale = exp(-log_scale); hi *= scale; hi1 *= scale; hi2 *= scale; sum_log_scale += log_scale; } } result->val = hi * exp(-0.5 * x * x + sum_log_scale); result->err = n * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } double gsl_sf_hermite_func(const int n, const double x) { EVAL_RESULT(gsl_sf_hermite_func_e(n, x, &result)); } /* * This algorithm is based on the contour integral algorithm of: * * B. Bunck, BIT Numerical Mathematics, 49, 281 (2009) * * It has O(sqrt(n)) complexity */ int gsl_sf_hermite_func_fast_e(const int n, const double x, gsl_sf_result * result) { if (n < 1000 || x == 0.0) { /* for small n, the recurrence method is faster and more accurate */ return gsl_sf_hermite_func_e(n, x, result); } else { size_t j; const double k = sqrt(0.5*n); const size_t steps = (size_t) ceil(6.211 * sqrt(n)); const double dt = M_PI/steps; const double invn2 = 1.0/(n*n); double ex, ex_e, cs, cs_e, sn, sn2, t; gsl_sf_result lngamma; if (n < 36) { gsl_sf_lnfact_e(n, &lngamma); lngamma.val *= 0.5; lngamma.err *= 0.5; t = 0.5*n*log(n) + 0.25*M_LNPI; cs = 0.5*n; lngamma.val += cs - t; lngamma.err += (cs + t)*GSL_DBL_EPSILON; } else { /* approximate ln(gamma_{n,k}) using Stirling's formula */ lngamma.val = 0.25*log(2*n); lngamma.err = (lngamma.val + ((((invn2/3360 + 1.0/2520)*invn2 + 1.0/720)*invn2) + 1.0/24)/n)*GSL_DBL_EPSILON; lngamma.val -= ((((invn2/3360 - 1.0/2520)*invn2 + 1.0/720)*invn2) - 1.0/24)/n; } ex = exp(lngamma.val - n - 0.5*x*x - 2*x*k); cs = (GSL_IS_ODD(n) ? -1 : 1); result->val = 0.5*ex*cs; result->err = 0.5*ex*(lngamma.err + (n + 0.5*x*x + fabs(2*x*k) + 1)*GSL_DBL_EPSILON); ex = exp(lngamma.val - n - 0.5*x*x + 2*x*k); result->val += 0.5*ex; result->err += 0.5*ex*(lngamma.err + (n + 0.5*x*x + fabs(2*x*k) + 1)*GSL_DBL_EPSILON); for (j = 1; j < steps; j++) { t = j*dt; cs = cos(t); ex = exp(lngamma.val - 0.5*x*x + (2*x*k - n*cs)*cs); ex_e = ex*(lngamma.err + GSL_DBL_EPSILON*(1 + 0.5*x*x + (fabs(2*x*k) + fabs(n*cs))*fabs(cs))); sn = sin(t); sn2 = sin(2*t); cs = cos(2*x*k*sn - 0.5*n*sn2 - n*t); cs_e = GSL_MIN(1.0+fabs(cs), GSL_DBL_EPSILON*(fabs(cs) + (fabs(2*x*k*sn) + fabs(0.5*n*sn2) + n*t)*fabs(sin(2*x*k*sn - 0.5*n*sn2 - n*t)))); result->val += ex*cs; result->err += ex*cs_e + ex_e*fabs(cs) + GSL_DBL_EPSILON*fabs(ex*cs); } result->val *= M_1_PI*dt; result->err = M_1_PI*dt*result->err + GSL_DBL_EPSILON*fabs(result->val); return GSL_SUCCESS; } } double gsl_sf_hermite_func_fast(const int n, const double x) { EVAL_RESULT(gsl_sf_hermite_func_fast_e(n, x, &result)); } /* Evaluates all probabilists' Hermite polynomials up to order nmax at position x. The results are stored in result_array. * Since all polynomial orders are needed, upward recurrence is employed. */ int gsl_sf_hermite_prob_array(const int nmax, const double x, double * result_array) { if (nmax < 0) { GSL_ERROR ("domain error", GSL_EDOM); } else if (nmax == 0) { result_array[0] = 1.0; return GSL_SUCCESS; } else if (nmax == 1) { result_array[0] = 1.0; result_array[1] = x; return GSL_SUCCESS; } else { /* upward recurrence: He_{n+1} = x He_n - n He_{n-1} */ int status = GSL_SUCCESS; const double abs_x = fabs(x); const double thresh1 = abs_x > 1.0 ? 0.9 * GSL_DBL_MAX / abs_x : GSL_DBL_MAX; const double thresh2 = 0.9 * GSL_DBL_MAX; double p_n0 = 1.0; /* He_0(x) */ double p_n1 = x; /* He_1(x) */ double p_n = p_n1; int j; result_array[0] = 1.0; result_array[1] = x; for (j = 1; j < nmax; j++) { if (fabs(p_n1) > thresh1 || /* test if x*p_n1 will overflow */ fabs(p_n0) > thresh2 / j) /* test if j*p_n0 will overflow */ { status = GSL_EOVRFLW; break; } p_n = x*p_n1 - j*p_n0; p_n0 = p_n1; p_n1 = p_n; result_array[j + 1] = p_n; } return status; } } /* Evaluates the m-th derivative of all probabilists' Hermite polynomials up to order nmax at position x. The results are stored in result_array. * Since all polynomial orders are needed, upward recurrence is employed. */ int gsl_sf_hermite_prob_array_deriv(const int m, const int nmax, const double x, double * result_array) { if (nmax < 0 || m < 0) { GSL_ERROR ("domain error", GSL_EDOM); } else if (m == 0) { gsl_sf_hermite_prob_array(nmax, x, result_array); return GSL_SUCCESS; } else if (nmax < m) { int j; for (j = 0; j <= nmax; j++) result_array[j] = 0.0; return GSL_SUCCESS; } else if (nmax == m) { int j; for (j = 0; j < m; j++) result_array[j] = 0.0; result_array[nmax] = gsl_sf_fact(m); return GSL_SUCCESS; } else if (nmax == m + 1) { int j; for (j = 0; j < m; j++) result_array[j] = 0.0; result_array[nmax-1] = gsl_sf_fact(m); result_array[nmax] = result_array[nmax-1]*(m+1)*x; return GSL_SUCCESS; } else { /* upward recurrence: He^{(m)}_{n+1} = (n+1)/(n-m+1)*(x He^{(m)}_n - n He^{(m)}_{n-1}) */ double p_n0 = gsl_sf_fact(m); /* He^{(m)}_{m}(x) */ double p_n1 = p_n0*(m+1)*x; /* He^{(m)}_{m+1}(x) */ double p_n = p_n1; int j; for (j = 0; j < m; j++) result_array[j] = 0.0; result_array[m] = p_n0; result_array[m + 1] = p_n1; for (j = m + 1; j <= nmax - 1; j++) { p_n = (x*p_n1 - j*p_n0) * (j + 1.0) / (j - m + 1.0); p_n0 = p_n1; p_n1 = p_n; result_array[j + 1] = p_n; } return GSL_SUCCESS; } } /* Evaluates all derivatives (starting from 0) up to the mmax-th derivative of the probabilists' Hermite polynomial of order n at position x. The results are stored in result_array. * Since all polynomial orders are needed, upward recurrence is employed. */ int gsl_sf_hermite_prob_deriv_array(const int mmax, const int n, const double x, double * result_array) { if (n < 0 || mmax < 0) { GSL_ERROR ("domain error", GSL_EDOM); } else if (n == 0) { int j; result_array[0] = 1.0; for (j = 1; j <= mmax; j++) result_array[j] = 0.0; return GSL_SUCCESS; } else if (n == 1 && mmax > 0) { int j; result_array[0] = x; result_array[1] = 1.0; for(j=2; j <= mmax; j++) result_array[j] = 0.0; return GSL_SUCCESS; } else if (mmax == 0) { result_array[0] = gsl_sf_hermite_prob(n,x); return GSL_SUCCESS; } else if (mmax == 1) { result_array[0] = gsl_sf_hermite_prob(n,x); result_array[1] = n*gsl_sf_hermite_prob(n-1,x); return GSL_SUCCESS; } else { /* upward recurrence */ int k = GSL_MAX_INT(0, n - mmax); double p_n0 = gsl_sf_hermite_prob(k,x); /* He_k(x) */ double p_n1 = gsl_sf_hermite_prob(k+1,x); /* He_{k+1}(x) */ double p_n = p_n1; int j; for(j=n+1; j <= mmax; j++) result_array[j] = 0.0; result_array[GSL_MIN_INT(n,mmax)] = p_n0; result_array[GSL_MIN_INT(n,mmax)-1] = p_n1; for (j = GSL_MIN_INT(mmax,n)-1; j > 0; j--) { k++; p_n = x*p_n1-k*p_n0; p_n0 = p_n1; p_n1 = p_n; result_array[j - 1] = p_n; } p_n = 1.0; for (j = 1; j <= GSL_MIN_INT(n, mmax); j++) { p_n = p_n*(n-j+1); result_array[j] = p_n*result_array[j]; } return GSL_SUCCESS; } } /* Evaluates the series sum_{j=0}^n a_j*He_j(x) with He_j being the j-th probabilists' Hermite polynomial. * For improved numerical stability the Clenshaw algorithm (Clenshaw, C. W. (July 1955). "A note on the summation of Chebyshev series". Mathematical Tables and other Aids to Computation 9 (51): 118–110.) adapted to probabilists' Hermite polynomials is used. */ int gsl_sf_hermite_prob_series_e(const int n, const double x, const double * a, gsl_sf_result * result) { if(n < 0) { DOMAIN_ERROR(result); } else if(n == 0) { result->val = a[0]; result->err = 0.; return GSL_SUCCESS; } else if(n == 1) { result->val = a[0]+a[1]*x; result->err = 2.*GSL_DBL_EPSILON * (fabs(a[0]) + fabs(a[1]*x)) ; return GSL_SUCCESS; } else { /* downward recurrence: b_n = a_n + x b_{n+1} - (n+1) b_{n+2} */ double b0 = 0.; double b1 = 0.; double btmp = 0.; double e0 = 0.; double e1 = 0.; double etmp = e1; int j; for(j=n; j >= 0; j--){ btmp = b0; b0 = a[j]+x*b0-(j+1)*b1; b1 = btmp; etmp = e0; e0 = (GSL_DBL_EPSILON*fabs(a[j])+fabs(x)*e0+(j+1)*e1); e1 = etmp; } result->val = b0; result->err = e0 + fabs(b0)*GSL_DBL_EPSILON; return GSL_SUCCESS; } } double gsl_sf_hermite_prob_series(const int n, const double x, const double * a) { EVAL_RESULT(gsl_sf_hermite_prob_series_e(n, x, a, &result)); } /* Evaluates all physicists' Hermite polynomials up to order nmax at position x. The results are stored in result_array. * Since all polynomial orders are needed, upward recurrence is employed. */ int gsl_sf_hermite_array(const int nmax, const double x, double * result_array) { if(nmax < 0) { GSL_ERROR ("domain error", GSL_EDOM); } else if (nmax == 0) { result_array[0] = 1.0; return GSL_SUCCESS; } else if (nmax == 1) { result_array[0] = 1.0; result_array[1] = 2.0*x; return GSL_SUCCESS; } else { /* upward recurrence: H_{n+1} = 2x H_n - 2n H_{n-1} */ int status = GSL_SUCCESS; const double two_x = 2.0 * x; const double abs_two_x = fabs(two_x); const double thresh1 = abs_two_x > 1.0 ? 0.9 * GSL_DBL_MAX / abs_two_x : GSL_DBL_MAX; const double thresh2 = 0.9 * GSL_DBL_MAX / 2.0; double p_n0 = 1.0; /* H_0(x) */ double p_n1 = two_x; /* H_1(x) */ double p_n = p_n1; int j; result_array[0] = 1.0; result_array[1] = 2.0*x; for (j = 1; j < nmax; j++) { if (fabs(p_n1) > thresh1 || /* test if 2*x*p_n1 will overflow */ fabs(p_n0) > thresh2 / j) /* test if 2*j*p_n0 will overflow */ { status = GSL_EOVRFLW; } p_n = two_x*p_n1 - 2.0*j*p_n0; p_n0 = p_n1; p_n1 = p_n; result_array[j + 1] = p_n; } return status; } } /* Evaluates the m-th derivative of all physicists' Hermite polynomials up to order nmax at position x. The results are stored in result_array. * Since all polynomial orders are needed, upward recurrence is employed. */ int gsl_sf_hermite_array_deriv(const int m, const int nmax, const double x, double * result_array) { if (nmax < 0 || m < 0) { GSL_ERROR ("domain error", GSL_EDOM); } else if (m == 0) { gsl_sf_hermite_array(nmax, x, result_array); return GSL_SUCCESS; } else if (nmax < m) { int j; for(j = 0; j <= nmax; j++) result_array[j] = 0.0; return GSL_SUCCESS; } else if (nmax == m) { int j; for(j = 0; j < m; j++) result_array[j] = 0.0; result_array[nmax] = pow2(m)*gsl_sf_fact(m); return GSL_SUCCESS; } else if (nmax == m + 1) { int j; for(j = 0; j < m; j++) result_array[j] = 0.0; result_array[nmax-1] = pow2(m)*gsl_sf_fact(m); result_array[nmax] = result_array[nmax-1]*2*(m+1)*x; return GSL_SUCCESS; } else { /* upward recurrence: H^{(m)}_{n+1} = 2(n+1)/(n-m+1)*(x H^{(m)}_n - n H^{(m)}_{n-1}) */ double p_n0 = pow2(m)*gsl_sf_fact(m); /* H^{(m)}_{m}(x) */ double p_n1 = p_n0*2*(m+1)*x; /* H^{(m)}_{m+1}(x) */ double p_n; int j; for(j = 0; j < m; j++) result_array[j] = 0.0; result_array[m] = p_n0; result_array[m+1] = p_n1; for (j = m + 1; j < nmax; ++j) { p_n = (x*p_n1 - j*p_n0) * 2 * (j + 1.0) / (j - m + 1.0); p_n0 = p_n1; p_n1 = p_n; result_array[j + 1] = p_n; } return GSL_SUCCESS; } } /* Evaluates all derivatives (starting from 0) up to the mmax-th derivative of the physicists' Hermite polynomial of order n at position x. The results are stored in result_array. * Since all polynomial orders are needed, upward recurrence is employed. */ int gsl_sf_hermite_deriv_array(const int mmax, const int n, const double x, double * result_array) { if (n < 0 || mmax < 0) { GSL_ERROR ("domain error", GSL_EDOM); } else if (n == 0) { int j; result_array[0] = 1.0; for(j = 1; j <= mmax; j++) result_array[j] = 0.0; return GSL_SUCCESS; } else if (n == 1 && mmax > 0) { int j; result_array[0] = 2*x; result_array[1] = 1.0; for (j = 2; j <= mmax; j++) result_array[j] = 0.0; return GSL_SUCCESS; } else if (mmax == 0) { result_array[0] = gsl_sf_hermite(n,x); return GSL_SUCCESS; } else if (mmax == 1) { result_array[0] = gsl_sf_hermite(n,x); result_array[1] = 2*n*gsl_sf_hermite(n - 1, x); return GSL_SUCCESS; } else { /* upward recurrence */ int k = GSL_MAX_INT(0, n - mmax); double p_n0 = gsl_sf_hermite(k, x); /* H_k(x) */ double p_n1 = gsl_sf_hermite(k + 1, x); /* H_{k+1}(x) */ double p_n = p_n1; int j; for (j = n + 1; j <= mmax; j++) result_array[j] = 0.0; result_array[GSL_MIN_INT(n,mmax)] = p_n0; result_array[GSL_MIN_INT(n,mmax)-1] = p_n1; for (j = GSL_MIN_INT(mmax, n) - 1; j > 0; j--) { k++; p_n = 2*x*p_n1 - 2*k*p_n0; p_n0 = p_n1; p_n1 = p_n; result_array[j - 1] = p_n; } p_n = 1.0; for (j = 1; j <= GSL_MIN_INT(n,mmax); j++) { p_n *= 2.0 * (n - j + 1.0); result_array[j] *= p_n; } return GSL_SUCCESS; } } /* Evaluates the series sum_{j=0}^n a_j*H_j(x) with H_j being the j-th physicists' Hermite polynomial. * For improved numerical stability the Clenshaw algorithm (Clenshaw, C. W. (July 1955). "A note on the summation of Chebyshev series". Mathematical Tables and other Aids to Computation 9 (51): 118–110.) adapted to physicists' Hermite polynomials is used. */ int gsl_sf_hermite_series_e(const int n, const double x, const double * a, gsl_sf_result * result) { if(n < 0) { DOMAIN_ERROR(result); } else if(n == 0) { result->val = a[0]; result->err = 0.; return GSL_SUCCESS; } else if(n == 1) { result->val = a[0]+a[1]*2.*x; result->err = 2.*GSL_DBL_EPSILON * (fabs(a[0]) + fabs(a[1]*2.*x)) ; return GSL_SUCCESS; } else { /* downward recurrence: b_n = a_n + 2x b_{n+1} - 2(n+1) b_{n+2} */ double b0 = 0.; double b1 = 0.; double btmp = 0.; double e0 = 0.; double e1 = 0.; double etmp = e1; int j; for(j=n; j >= 0; j--){ btmp = b0; b0 = a[j]+2.*x*b0-2.*(j+1)*b1; b1 = btmp; etmp = e0; e0 = (GSL_DBL_EPSILON*fabs(a[j])+fabs(2.*x)*e0+2.*(j+1)*e1); e1 = etmp; } result->val = b0; result->err = e0 + fabs(b0)*GSL_DBL_EPSILON; return GSL_SUCCESS; } } double gsl_sf_hermite_series(const int n, const double x, const double * a) { EVAL_RESULT(gsl_sf_hermite_series_e(n, x, a, &result)); } /* Evaluates all Hermite functions up to order nmax at position x. The results are stored in result_array. * Since all polynomial orders are needed, upward recurrence is employed. */ int gsl_sf_hermite_func_array(const int nmax, const double x, double * result_array) { if (nmax < 0) { GSL_ERROR ("domain error", GSL_EDOM); } else if (nmax == 0) { result_array[0] = exp(-0.5*x*x)/sqrt(M_SQRTPI); return GSL_SUCCESS; } else if (nmax == 1) { result_array[0] = exp(-0.5*x*x)/sqrt(M_SQRTPI); result_array[1] = result_array[0]*M_SQRT2*x; return GSL_SUCCESS; } else { /* upward recurrence: Psi_{n+1} = sqrt(2/(n+1))*x Psi_n - sqrt(n/(n+1)) Psi_{n-1} */ const double arg = -0.5 * x * x; double hi2 = 1.0 / sqrt(M_SQRTPI); double hi1 = M_SQRT2 * x * hi2; double hi = 0.0; double sum_log_scale = 0.0; double abshi; int i; result_array[0] = exp(arg) * hi2; result_array[1] = result_array[0] * M_SQRT2 * x; for (i = 2; i <= nmax; ++i) { hi = sqrt(2.0 / i) * x * hi1 - sqrt((i - 1.0) / i) * hi2; hi2 = hi1; hi1 = hi; abshi = fabs(hi); if (abshi > 1.0) { double log_scale = RND(log(abshi)); double scale = exp(-log_scale); hi *= scale; hi1 *= scale; hi2 *= scale; sum_log_scale += log_scale; } result_array[i] = hi * exp(arg + sum_log_scale); } return GSL_SUCCESS; } } /* Evaluates the series sum_{j=0}^n a_j*Psi_j(x) with Psi_j being the j-th Hermite function. * For improved numerical stability the Clenshaw algorithm (Clenshaw, C. W. (July 1955). "A note on the summation of Chebyshev series". Mathematical Tables and other Aids to Computation 9 (51): 118–110.) adapted to Hermite functions is used. */ int gsl_sf_hermite_func_series_e(const int n, const double x, const double * a, gsl_sf_result * result) { if (n < 0) { DOMAIN_ERROR(result); } else if (n == 0) { result->val = a[0]*exp(-0.5*x*x)/sqrt(M_SQRTPI); result->err = GSL_DBL_EPSILON*fabs(result->val); return GSL_SUCCESS; } else if (n == 1) { result->val = (a[0]+a[1]*M_SQRT2*x)*exp(-0.5*x*x)/sqrt(M_SQRTPI); result->err = 2.*GSL_DBL_EPSILON*(fabs(a[0])+fabs(a[1]*M_SQRT2*x))*exp(-0.5*x*x)/sqrt(M_SQRTPI); return GSL_SUCCESS; } else { /* downward recurrence: b_n = a_n + sqrt(2/(n+1))*x b_{n+1} - sqrt((n+1)/(n+2)) b_{n+2} */ double b0 = 0.; double b1 = 0.; double btmp = 0.; double e0 = 0.; double e1 = 0.; double etmp = e1; int j; for (j = n; j >= 0; j--) { btmp = b0; b0 = a[j]+sqrt(2./(j+1))*x*b0-sqrt((j+1.)/(j+2.))*b1; b1 = btmp; etmp = e0; e0 = (GSL_DBL_EPSILON*fabs(a[j])+sqrt(2./(j+1))*fabs(x)*e0+sqrt((j+1.)/(j+2.))*e1); e1 = etmp; } result->val = b0*exp(-0.5*x*x)/sqrt(M_SQRTPI); result->err = e0 + fabs(result->val)*GSL_DBL_EPSILON; return GSL_SUCCESS; } } double gsl_sf_hermite_func_series(const int n, const double x, const double * a) { EVAL_RESULT(gsl_sf_hermite_func_series_e(n, x, a, &result)); } /* Evaluates the m-th derivative of the Hermite function of order n at position x. * A summation including upward recurrences is used. */ int gsl_sf_hermite_func_der_e(const int m, const int n, const double x, gsl_sf_result * result) { if(m < 0 || n < 0) { DOMAIN_ERROR(result); } else if (m == 0) { return gsl_sf_hermite_func_e(n, x, result); } else if (m == 1) { double hi2 = 1.0 / sqrt(M_SQRTPI); double hi1 = M_SQRT2 * x * hi2; double hi = 0.0; double sum_log_scale = 0.0; double abshi; int i; for (i = 2; i <= n; ++i) { hi = sqrt(2.0 / i) * x * hi1 - sqrt((i - 1.0) / i) * hi2; hi2 = hi1; hi1 = hi; abshi = fabs(hi); if (abshi > 1.0) { double log_scale = RND(log(abshi)); double scale = exp(-log_scale); hi *= scale; hi1 *= scale; hi2 *= scale; sum_log_scale += log_scale; } } /* psi'_n(x) = sqrt(2 n) psi_{n-1} - x psi_n */ result->val = (sqrt(2.0*n) * hi2 - x * hi) * exp(-0.5 * x * x + sum_log_scale); result->err = n * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { int j; double r,er,b; double h0 = 1.; double h1 = x; double eh0 = GSL_DBL_EPSILON; double eh1 = GSL_DBL_EPSILON; double p0 = 1.; double p1 = M_SQRT2*x; double ep0 = GSL_DBL_EPSILON; double ep1 = M_SQRT2*GSL_DBL_EPSILON; double f = 1.; for (j=GSL_MAX_INT(1,n-m+1);j<=n;j++) f *= sqrt(2.*j); if (m > n) { f = (GSL_IS_ODD(m-n)?-f:f); for (j=0;jval = r*exp(-0.5*x*x)/sqrt(M_SQRTPI); result->err = er*fabs(exp(-0.5*x*x)/sqrt(M_SQRTPI)) + GSL_DBL_EPSILON*fabs(result->val); return GSL_SUCCESS; } } double gsl_sf_hermite_func_der(const int m, const int n, const double x) { EVAL_RESULT(gsl_sf_hermite_func_der_e(m, n, x, &result)); } static double H_zero_init(const int n, const int k) { double p = 1., x = 1., y = 1.; if (k == 1 && n > 50) { x = (GSL_IS_ODD(n)?1./sqrt((n-1)/6.):1./sqrt(0.5*n)); } else { p = -0.7937005259840997373758528196*gsl_sf_airy_zero_Ai(n/2-k+1); x = sqrt(2*n+1.); y = pow(2*n+1.,1/6.); x = x - p/y - 0.1*p*p/(x*y*y) + (9/280. - p*p*p*11/350.)/(x*x*x) + (p*277/12600. - gsl_sf_pow_int(p,4)*823/63000.)/gsl_sf_pow_int(x,4)/y; } p = acos(x/sqrt(2*n+1.)); y = M_PI*(-2*(n/2-k)-1.5)/(n+0.5); if(gsl_fcmp(y,sin(2.*p)-2*p,GSL_SQRT_DBL_EPSILON)==0) return x; /* initial approx sufficiently accurate */ if (y > -GSL_DBL_EPSILON) return sqrt(2*n+1.); if (p < GSL_DBL_EPSILON) p = GSL_DBL_EPSILON; if (p > M_PI_2) p = M_PI_2; if (sin(2.*p)-2*p > y){ x = GSL_MAX((sin(2.*p)-2*p-y)/4.,GSL_SQRT_DBL_EPSILON); do{ x *= 2.; p += x; } while (sin(2.*p)-2*p > y); } do { x = p; p -= (sin(2.*p)-2.*p-y)/(2.*cos(2.*p)-2.); if (p<0.||p>M_PI_2) p = M_PI_2; } while (gsl_fcmp(x,p,100*GSL_DBL_EPSILON)!=0); return sqrt(2*n+1.)*cos(p); } /* lookup table for the positive zeros of the probabilists' Hermite polynomials of order 3 through 20 */ static double He_zero_tab[99] = { 1.73205080756887729352744634151, 0.741963784302725857648513596726, 2.33441421833897723931751226721, 1.35562617997426586583052129087, 2.85697001387280565416230426401, 0.616706590192594152193686099399, 1.88917587775371067550566789858, 3.32425743355211895236183546247, 1.154405394739968127239597758838, 2.36675941073454128861885646856, 3.75043971772574225630392202571, 0.539079811351375108072461918694, 1.63651904243510799922544657297, 2.80248586128754169911301080618, 4.14454718612589433206019783917, 1.023255663789132524828148225810, 2.07684797867783010652215614374, 3.20542900285646994336567590292, 4.51274586339978266756667884317, 0.484935707515497653046233483105, 1.46598909439115818325066466416, 2.48432584163895458087625118368, 3.58182348355192692277623675546, 4.85946282833231215015516494660, 0.928868997381063940144111999584, 1.87603502015484584534137013967, 2.86512316064364499771968407254, 3.93616660712997692868589612142, 5.18800122437487094818666404539, 0.444403001944138945299732445510, 1.34037519715161672153112945211, 2.25946445100079912386492979448, 3.22370982877009747166319001956, 4.27182584793228172295999293076, 5.50090170446774760081221630899, 0.856679493519450033897376121795, 1.72541837958823916151095838741, 2.62068997343221478063807762201, 3.56344438028163409162493844661, 4.59139844893652062705231872720, 5.80016725238650030586450565322, 0.412590457954601838167454145167, 1.24268895548546417895063983219, 2.08834474570194417097139675101, 2.96303657983866750254927123447, 3.88692457505976938384755016476, 4.89693639734556468372449782879, 6.08740954690129132226890147034, 0.799129068324547999424888414207, 1.60671006902872973652322479373, 2.43243682700975804116311571682, 3.28908242439876638890856229770, 4.19620771126901565957404160583, 5.19009359130478119946445431715, 6.36394788882983831771116094427, 0.386760604500557347721047189801, 1.16382910055496477419336819907, 1.95198034571633346449212362880, 2.76024504763070161684598142269, 3.60087362417154828824902745506, 4.49295530252001124266582263095, 5.47222570594934308841242925805, 6.63087819839312848022981922233, 0.751842600703896170737870774614, 1.50988330779674075905491513417, 2.28101944025298889535537879396, 3.07379717532819355851658337833, 3.90006571719800990903311840097, 4.77853158962998382710540812497, 5.74446007865940618125547815768, 6.88912243989533223256205432938, 0.365245755507697595916901619097, 1.09839551809150122773848360538, 1.83977992150864548966395498992, 2.59583368891124032910545091458, 3.37473653577809099529779309480, 4.18802023162940370448450911428, 5.05407268544273984538327527397, 6.00774591135959752029303858752, 7.13946484914647887560975631213, 0.712085044042379940413609979021, 1.42887667607837287134157901452, 2.15550276131693514033871248449, 2.89805127651575312007902775275, 3.66441654745063847665304033851, 4.46587262683103133615452574019, 5.32053637733603803162823765939, 6.26289115651325170419416064557, 7.38257902403043186766326977122, 0.346964157081355927973322447164, 1.04294534880275103146136681143, 1.74524732081412671493067861704, 2.45866361117236775131735057433, 3.18901481655338941485371744116, 3.94396735065731626033176813604, 4.73458133404605534390170946748, 5.57873880589320115268040332802, 6.51059015701365448636289263918, 7.61904854167975829138128156060 }; /* * Computes the s-th zero the probabilists' Hermite polynomial of order n. * A Newton iteration using a continued fraction representation adapted from: * * [E.T. Whittaker (1914), On the continued fractions which represent the * functions of Hermite and other functions defined by differential equations, * Proceedings of the Edinburgh Mathematical Society, 32, 65-74] * * is performed with the initial approximation from * * [Arpad Elbert and Martin E. Muldoon, Approximations for zeros of Hermite * functions, pp. 117-126 in D. Dominici and R. S. Maier, eds, "Special Functions * and Orthogonal Polynomials", Contemporary Mathematics, vol 471 (2008)] * * refined via the bisection method. */ int gsl_sf_hermite_prob_zero_e(const int n, const int s, gsl_sf_result * result) { if (n <= 0 || s < 0 || s > n/2) { DOMAIN_ERROR(result); } else if (s == 0) { if (GSL_IS_ODD(n) == 1) { result->val = 0.; result->err = 0.; return GSL_SUCCESS; } else { DOMAIN_ERROR(result); } } else if (n == 2) { result->val = 1.; result->err = 0.; return GSL_SUCCESS; } else if (n < 21) { result->val = He_zero_tab[(GSL_IS_ODD(n)?n/2:0)+((n/2)*(n/2-1))+s-2]; result->err = GSL_DBL_EPSILON*(result->val); return GSL_SUCCESS; } else { double d = 1., x = 1., x0 = 1.; int j; x = H_zero_init(n,s) * M_SQRT2; do { x0 = x; d = 0.; for (j=1; jval = x; result->err = 2*GSL_DBL_EPSILON*x + fabs(x-x0); return GSL_SUCCESS; } } double gsl_sf_hermite_prob_zero(const int n, const int s) { EVAL_RESULT(gsl_sf_hermite_prob_zero_e(n, s, &result)); } /* lookup table for the positive zeros of the physicists' Hermite polynomials of order 3 through 20 */ static double H_zero_tab[99] = { 1.22474487139158904909864203735, 0.524647623275290317884060253835, 1.65068012388578455588334111112, 0.958572464613818507112770593893, 2.02018287045608563292872408814, 0.436077411927616508679215948251, 1.335849074013696949714895282970, 2.35060497367449222283392198706, 0.816287882858964663038710959027, 1.67355162876747144503180139830, 2.65196135683523349244708200652, 0.381186990207322116854718885584, 1.157193712446780194720765779063, 1.98165675669584292585463063977, 2.93063742025724401922350270524, 0.723551018752837573322639864579, 1.46855328921666793166701573925, 2.26658058453184311180209693284, 3.19099320178152760723004779538, 0.342901327223704608789165025557, 1.03661082978951365417749191676, 1.75668364929988177345140122011, 2.53273167423278979640896079775, 3.43615911883773760332672549432, 0.656809566882099765024611575383, 1.32655708449493285594973473558, 2.02594801582575533516591283121, 2.78329009978165177083671870152, 3.66847084655958251845837146485, 0.314240376254359111276611634095, 0.947788391240163743704578131060, 1.59768263515260479670966277090, 2.27950708050105990018772856942, 3.02063702512088977171067937518, 3.88972489786978191927164274724, 0.605763879171060113080537108602, 1.22005503659074842622205526637, 1.85310765160151214200350644316, 2.51973568567823788343040913628, 3.24660897837240998812205115236, 4.10133759617863964117891508007, 0.291745510672562078446113075799, 0.878713787329399416114679311861, 1.47668273114114087058350654421, 2.09518325850771681573497272630, 2.74847072498540256862499852415, 3.46265693360227055020891736115, 4.30444857047363181262129810037, 0.565069583255575748526020337198, 1.13611558521092066631913490556, 1.71999257518648893241583152515, 2.32573248617385774545404479449, 2.96716692790560324848896036355, 3.66995037340445253472922383312, 4.49999070730939155366438053053, 0.273481046138152452158280401965, 0.822951449144655892582454496734, 1.38025853919888079637208966969, 1.95178799091625397743465541496, 2.54620215784748136215932870545, 3.17699916197995602681399455926, 3.86944790486012269871942409801, 4.68873893930581836468849864875, 0.531633001342654731349086553718, 1.06764872574345055363045773799, 1.61292431422123133311288254454, 2.17350282666662081927537907149, 2.75776291570388873092640349574, 3.37893209114149408338327069289, 4.06194667587547430689245559698, 4.87134519367440308834927655662, 0.258267750519096759258116098711, 0.776682919267411661316659462284, 1.30092085838961736566626555439, 1.83553160426162889225383944409, 2.38629908916668600026459301424, 2.96137750553160684477863254906, 3.57376906848626607950067599377, 4.24811787356812646302342016090, 5.04836400887446676837203757885, 0.503520163423888209373811765050, 1.01036838713431135136859873726, 1.52417061939353303183354859367, 2.04923170985061937575050838669, 2.59113378979454256492128084112, 3.15784881834760228184318034120, 3.76218735196402009751489394104, 4.42853280660377943723498532226, 5.22027169053748216460967142500, 0.245340708300901249903836530634, 0.737473728545394358705605144252, 1.23407621539532300788581834696, 1.73853771211658620678086566214, 2.25497400208927552308233334473, 2.78880605842813048052503375640, 3.34785456738321632691492452300, 3.94476404011562521037562880052, 4.60368244955074427307767524898, 5.38748089001123286201690041068 }; /* * Computes the s-th zero the physicists' Hermite polynomial of order n, thus also * the s-th zero of the Hermite function of order n. A Newton iteration using a continued * fraction representation adapted from: * * [E.T. Whittaker (1914), On the continued fractions which represent the functions of Hermite * and other functions defined by differential equations, Proceedings of the Edinburgh Mathematical * Society, 32, 65-74] * * An initial approximation is used from: * * [Arpad Elbert and Martin E. Muldoon, Approximations for zeros of Hermite functions, * pp. 117-126 in D. Dominici and R. S. Maier, eds, "Special Functions and Orthogonal Polynomials", * Contemporary Mathematics, vol 471 (2008)] * * which is refined via the bisection method. */ int gsl_sf_hermite_zero_e(const int n, const int s, gsl_sf_result * result) { if (n <= 0 || s < 0 || s > n/2) { DOMAIN_ERROR(result); } else if (s == 0) { if (GSL_IS_ODD(n) == 1) { result->val = 0.; result->err = 0.; return GSL_SUCCESS; } else { DOMAIN_ERROR(result); } } else if (n == 2) { result->val = M_SQRT1_2; result->err = 0.; return GSL_SUCCESS; } else if (n < 21) { result->val = H_zero_tab[(GSL_IS_ODD(n)?n/2:0)+((n/2)*(n/2-1))+s-2]; result->err = GSL_DBL_EPSILON*(result->val); return GSL_SUCCESS; } else { double d = 1., x = 1., x0 = 1.; int j; x = H_zero_init(n,s); do { x0 = x; d = 0.; for (j=1; jval = x; result->err = 2*GSL_DBL_EPSILON*x + fabs(x-x0); return GSL_SUCCESS; } } double gsl_sf_hermite_zero(const int n, const int s) { EVAL_RESULT(gsl_sf_hermite_zero_e(n, s, &result)); } int gsl_sf_hermite_func_zero_e(const int n, const int s, gsl_sf_result * result) { return gsl_sf_hermite_zero_e(n, s, result); } double gsl_sf_hermite_func_zero(const int n, const int s) { EVAL_RESULT(gsl_sf_hermite_func_zero_e(n, s, &result)); } #ifndef GSL_DISABLE_DEPRECATED int gsl_sf_hermite_phys_e(const int n, const double x, gsl_sf_result * result) { return gsl_sf_hermite_e(n, x, result); } double gsl_sf_hermite_phys(const int n, const double x) { EVAL_RESULT(gsl_sf_hermite_phys_e(n, x, &result)); } int gsl_sf_hermite_phys_der_e(const int m, const int n, const double x, gsl_sf_result * result) { return gsl_sf_hermite_deriv_e(m, n, x, result); } double gsl_sf_hermite_phys_der(const int m, const int n, const double x) { EVAL_RESULT(gsl_sf_hermite_phys_der_e(m, n, x, &result)); } int gsl_sf_hermite_phys_array(const int nmax, const double x, double * result_array) { return gsl_sf_hermite_array(nmax, x, result_array); } int gsl_sf_hermite_phys_series_e(const int n, const double x, const double * a, gsl_sf_result * result) { return gsl_sf_hermite_series_e(n, x, a, result); } double gsl_sf_hermite_phys_series(const int n, const double x, const double * a) { EVAL_RESULT(gsl_sf_hermite_phys_series_e(n, x, a, &result)); } int gsl_sf_hermite_phys_array_der(const int m, const int nmax, const double x, double * result_array) { return gsl_sf_hermite_array_deriv(m, nmax, x, result_array); } int gsl_sf_hermite_phys_der_array(const int mmax, const int n, const double x, double * result_array) { return gsl_sf_hermite_deriv_array(mmax, n, x, result_array); } int gsl_sf_hermite_phys_zero_e(const int n, const int s, gsl_sf_result * result) { return gsl_sf_hermite_zero_e(n, s, result); } double gsl_sf_hermite_phys_zero(const int n, const int s) { EVAL_RESULT(gsl_sf_hermite_zero_e(n, s, &result)); } int gsl_sf_hermite_prob_array_der(const int m, const int nmax, const double x, double * result_array) { return gsl_sf_hermite_prob_array_deriv(m, nmax, x, result_array); } int gsl_sf_hermite_prob_der_array(const int mmax, const int n, const double x, double * result_array) { return gsl_sf_hermite_prob_deriv_array(mmax, n, x, result_array); } int gsl_sf_hermite_prob_der_e(const int m, const int n, const double x, gsl_sf_result * result) { return gsl_sf_hermite_prob_deriv_e(m, n, x, result); } double gsl_sf_hermite_prob_der(const int m, const int n, const double x) { EVAL_RESULT(gsl_sf_hermite_prob_deriv_e(m, n, x, &result)); } #endif /* !GSL_DISABLE_DEPRECATED */ gsl/specfunc/gsl_sf_legendre.h0000664000175000017500000002776314057135461015045 0ustar eddedd/* specfunc/gsl_sf_legendre.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004 Gerard Jungman * Copyright (C) 2019 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_LEGENDRE_H__ #define __GSL_SF_LEGENDRE_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* P_l(x) l >= 0; |x| <= 1 * * exceptions: GSL_EDOM */ int gsl_sf_legendre_Pl_e(const int l, const double x, gsl_sf_result * result); double gsl_sf_legendre_Pl(const int l, const double x); /* P_l(x) for l=0,...,lmax; |x| <= 1 * * exceptions: GSL_EDOM */ int gsl_sf_legendre_Pl_array( const int lmax, const double x, double * result_array ); /* P_l(x) and P_l'(x) for l=0,...,lmax; |x| <= 1 * * exceptions: GSL_EDOM */ int gsl_sf_legendre_Pl_deriv_array( const int lmax, const double x, double * result_array, double * result_deriv_array ); /* P_l(x), l=1,2,3 * * exceptions: none */ int gsl_sf_legendre_P1_e(double x, gsl_sf_result * result); int gsl_sf_legendre_P2_e(double x, gsl_sf_result * result); int gsl_sf_legendre_P3_e(double x, gsl_sf_result * result); double gsl_sf_legendre_P1(const double x); double gsl_sf_legendre_P2(const double x); double gsl_sf_legendre_P3(const double x); /* Q_0(x), x > -1, x != 1 * * exceptions: GSL_EDOM */ int gsl_sf_legendre_Q0_e(const double x, gsl_sf_result * result); double gsl_sf_legendre_Q0(const double x); /* Q_1(x), x > -1, x != 1 * * exceptions: GSL_EDOM */ int gsl_sf_legendre_Q1_e(const double x, gsl_sf_result * result); double gsl_sf_legendre_Q1(const double x); /* Q_l(x), x > -1, x != 1, l >= 0 * * exceptions: GSL_EDOM */ int gsl_sf_legendre_Ql_e(const int l, const double x, gsl_sf_result * result); double gsl_sf_legendre_Ql(const int l, const double x); /* P_l^m(x) m >= 0; l >= m; |x| <= 1.0 * * Note that this function grows combinatorially with l. * Therefore we can easily generate an overflow for l larger * than about 150. * * There is no trouble for small m, but when m and l are both large, * then there will be trouble. Rather than allow overflows, these * functions refuse to calculate when they can sense that l and m are * too big. * * If you really want to calculate a spherical harmonic, then DO NOT * use this. Instead use legendre_sphPlm() below, which uses a similar * recursion, but with the normalized functions. * * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_legendre_Plm_e(const int l, const int m, const double x, gsl_sf_result * result); double gsl_sf_legendre_Plm(const int l, const int m, const double x); /* P_l^m(x) m >= 0; l >= m; |x| <= 1.0 * l=|m|,...,lmax * * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_legendre_Plm_array( const int lmax, const int m, const double x, double * result_array ); /* P_l^m(x) and d(P_l^m(x))/dx; m >= 0; lmax >= m; |x| <= 1.0 * l=|m|,...,lmax * * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_legendre_Plm_deriv_array( const int lmax, const int m, const double x, double * result_array, double * result_deriv_array ); /* P_l^m(x), normalized properly for use in spherical harmonics * m >= 0; l >= m; |x| <= 1.0 * * There is no overflow problem, as there is for the * standard normalization of P_l^m(x). * * Specifically, it returns: * * sqrt((2l+1)/(4pi)) sqrt((l-m)!/(l+m)!) P_l^m(x) * * exceptions: GSL_EDOM */ int gsl_sf_legendre_sphPlm_e(const int l, int m, const double x, gsl_sf_result * result); double gsl_sf_legendre_sphPlm(const int l, const int m, const double x); /* sphPlm(l,m,x) values * m >= 0; l >= m; |x| <= 1.0 * l=|m|,...,lmax * * exceptions: GSL_EDOM */ int gsl_sf_legendre_sphPlm_array( const int lmax, int m, const double x, double * result_array ); /* sphPlm(l,m,x) and d(sphPlm(l,m,x))/dx values * m >= 0; l >= m; |x| <= 1.0 * l=|m|,...,lmax * * exceptions: GSL_EDOM */ int gsl_sf_legendre_sphPlm_deriv_array( const int lmax, const int m, const double x, double * result_array, double * result_deriv_array ); /* size of result_array[] needed for the array versions of Plm * (lmax - m + 1) */ int gsl_sf_legendre_array_size(const int lmax, const int m); /* Irregular Spherical Conical Function * P^{1/2}_{-1/2 + I lambda}(x) * * x > -1.0 * exceptions: GSL_EDOM */ int gsl_sf_conicalP_half_e(const double lambda, const double x, gsl_sf_result * result); double gsl_sf_conicalP_half(const double lambda, const double x); /* Regular Spherical Conical Function * P^{-1/2}_{-1/2 + I lambda}(x) * * x > -1.0 * exceptions: GSL_EDOM */ int gsl_sf_conicalP_mhalf_e(const double lambda, const double x, gsl_sf_result * result); double gsl_sf_conicalP_mhalf(const double lambda, const double x); /* Conical Function * P^{0}_{-1/2 + I lambda}(x) * * x > -1.0 * exceptions: GSL_EDOM */ int gsl_sf_conicalP_0_e(const double lambda, const double x, gsl_sf_result * result); double gsl_sf_conicalP_0(const double lambda, const double x); /* Conical Function * P^{1}_{-1/2 + I lambda}(x) * * x > -1.0 * exceptions: GSL_EDOM */ int gsl_sf_conicalP_1_e(const double lambda, const double x, gsl_sf_result * result); double gsl_sf_conicalP_1(const double lambda, const double x); /* Regular Spherical Conical Function * P^{-1/2-l}_{-1/2 + I lambda}(x) * * x > -1.0, l >= -1 * exceptions: GSL_EDOM */ int gsl_sf_conicalP_sph_reg_e(const int l, const double lambda, const double x, gsl_sf_result * result); double gsl_sf_conicalP_sph_reg(const int l, const double lambda, const double x); /* Regular Cylindrical Conical Function * P^{-m}_{-1/2 + I lambda}(x) * * x > -1.0, m >= -1 * exceptions: GSL_EDOM */ int gsl_sf_conicalP_cyl_reg_e(const int m, const double lambda, const double x, gsl_sf_result * result); double gsl_sf_conicalP_cyl_reg(const int m, const double lambda, const double x); /* The following spherical functions are specializations * of Legendre functions which give the regular eigenfunctions * of the Laplacian on a 3-dimensional hyperbolic space. * Of particular interest is the flat limit, which is * Flat-Lim := {lambda->Inf, eta->0, lambda*eta fixed}. */ /* Zeroth radial eigenfunction of the Laplacian on the * 3-dimensional hyperbolic space. * * legendre_H3d_0(lambda,eta) := sin(lambda*eta)/(lambda*sinh(eta)) * * Normalization: * Flat-Lim legendre_H3d_0(lambda,eta) = j_0(lambda*eta) * * eta >= 0.0 * exceptions: GSL_EDOM */ int gsl_sf_legendre_H3d_0_e(const double lambda, const double eta, gsl_sf_result * result); double gsl_sf_legendre_H3d_0(const double lambda, const double eta); /* First radial eigenfunction of the Laplacian on the * 3-dimensional hyperbolic space. * * legendre_H3d_1(lambda,eta) := * 1/sqrt(lambda^2 + 1) sin(lam eta)/(lam sinh(eta)) * (coth(eta) - lambda cot(lambda*eta)) * * Normalization: * Flat-Lim legendre_H3d_1(lambda,eta) = j_1(lambda*eta) * * eta >= 0.0 * exceptions: GSL_EDOM */ int gsl_sf_legendre_H3d_1_e(const double lambda, const double eta, gsl_sf_result * result); double gsl_sf_legendre_H3d_1(const double lambda, const double eta); /* l'th radial eigenfunction of the Laplacian on the * 3-dimensional hyperbolic space. * * Normalization: * Flat-Lim legendre_H3d_l(l,lambda,eta) = j_l(lambda*eta) * * eta >= 0.0, l >= 0 * exceptions: GSL_EDOM */ int gsl_sf_legendre_H3d_e(const int l, const double lambda, const double eta, gsl_sf_result * result); double gsl_sf_legendre_H3d(const int l, const double lambda, const double eta); /* Array of H3d(ell), 0 <= ell <= lmax */ int gsl_sf_legendre_H3d_array(const int lmax, const double lambda, const double eta, double * result_array); /* associated legendre P_{lm} routines */ typedef enum { GSL_SF_LEGENDRE_SCHMIDT, GSL_SF_LEGENDRE_SPHARM, GSL_SF_LEGENDRE_FULL, GSL_SF_LEGENDRE_NONE } gsl_sf_legendre_t; int gsl_sf_legendre_array(const gsl_sf_legendre_t norm, const size_t lmax, const double x, double result_array[]); int gsl_sf_legendre_array_e(const gsl_sf_legendre_t norm, const size_t lmax, const double x, const double csphase, double result_array[]); int gsl_sf_legendre_deriv_array(const gsl_sf_legendre_t norm, const size_t lmax, const double x, double result_array[], double result_deriv_array[]); int gsl_sf_legendre_deriv_array_e(const gsl_sf_legendre_t norm, const size_t lmax, const double x, const double csphase, double result_array[], double result_deriv_array[]); int gsl_sf_legendre_deriv_alt_array(const gsl_sf_legendre_t norm, const size_t lmax, const double x, double result_array[], double result_deriv_array[]); int gsl_sf_legendre_deriv_alt_array_e(const gsl_sf_legendre_t norm, const size_t lmax, const double x, const double csphase, double result_array[], double result_deriv_array[]); int gsl_sf_legendre_deriv2_array(const gsl_sf_legendre_t norm, const size_t lmax, const double x, double result_array[], double result_deriv_array[], double result_deriv2_array[]); int gsl_sf_legendre_deriv2_array_e(const gsl_sf_legendre_t norm, const size_t lmax, const double x, const double csphase, double result_array[], double result_deriv_array[], double result_deriv2_array[]); int gsl_sf_legendre_deriv2_alt_array(const gsl_sf_legendre_t norm, const size_t lmax, const double x, double result_array[], double result_deriv_array[], double result_deriv2_array[]); int gsl_sf_legendre_deriv2_alt_array_e(const gsl_sf_legendre_t norm, const size_t lmax, const double x, const double csphase, double result_array[], double result_deriv_array[], double result_deriv2_array[]); size_t gsl_sf_legendre_array_n(const size_t lmax); size_t gsl_sf_legendre_nlm(const size_t lmax); INLINE_DECL size_t gsl_sf_legendre_array_index(const size_t l, const size_t m); #ifdef HAVE_INLINE /* gsl_sf_legendre_array_index() This routine computes the index into a result_array[] corresponding to a given (l,m) */ INLINE_FUN size_t gsl_sf_legendre_array_index(const size_t l, const size_t m) { return (((l * (l + 1)) >> 1) + m); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_SF_LEGENDRE_H__ */ gsl/specfunc/bessel_In.c0000644000175000017500000001443013536674414013611 0ustar eddedd/* specfunc/bessel_In.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "error.h" #include "bessel.h" /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_In_scaled_e(int n, const double x, gsl_sf_result * result) { const double ax = fabs(x); n = abs(n); /* I(-n, z) = I(n, z) */ /* CHECK_POINTER(result) */ if(n == 0) { return gsl_sf_bessel_I0_scaled_e(x, result); } else if(n == 1) { return gsl_sf_bessel_I1_scaled_e(x, result); } else if(x == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(x*x < 10.0*(n+1.0)/M_E) { gsl_sf_result t; double ex = exp(-ax); int stat_In = gsl_sf_bessel_IJ_taylor_e((double)n, ax, 1, 50, GSL_DBL_EPSILON, &t); result->val = t.val * ex; result->err = t.err * ex; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); if(x < 0.0 && GSL_IS_ODD(n)) result->val = -result->val; return stat_In; } else if(n < 150 && ax < 1e7) { gsl_sf_result I0_scaled; int stat_I0 = gsl_sf_bessel_I0_scaled_e(ax, &I0_scaled); double rat; int stat_CF1 = gsl_sf_bessel_I_CF1_ser((double)n, ax, &rat); double Ikp1 = rat * GSL_SQRT_DBL_MIN; double Ik = GSL_SQRT_DBL_MIN; double Ikm1; int k; for(k=n; k >= 1; k--) { Ikm1 = Ikp1 + 2.0*k/ax * Ik; Ikp1 = Ik; Ik = Ikm1; } result->val = I0_scaled.val * (GSL_SQRT_DBL_MIN / Ik); result->err = I0_scaled.err * (GSL_SQRT_DBL_MIN / Ik); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); if(x < 0.0 && GSL_IS_ODD(n)) result->val = -result->val; return GSL_ERROR_SELECT_2(stat_I0, stat_CF1); } else if( GSL_MIN( 0.29/(n*n), 0.5/(n*n + x*x) ) < 0.5*GSL_ROOT3_DBL_EPSILON) { int stat_as = gsl_sf_bessel_Inu_scaled_asymp_unif_e((double)n, ax, result); if(x < 0.0 && GSL_IS_ODD(n)) result->val = -result->val; return stat_as; } else { const int nhi = 2 + (int) (1.2 / GSL_ROOT6_DBL_EPSILON); gsl_sf_result r_Ikp1; gsl_sf_result r_Ik; int stat_a1 = gsl_sf_bessel_Inu_scaled_asymp_unif_e(nhi+1.0, ax, &r_Ikp1); int stat_a2 = gsl_sf_bessel_Inu_scaled_asymp_unif_e((double)nhi, ax, &r_Ik); double Ikp1 = r_Ikp1.val; double Ik = r_Ik.val; double Ikm1; int k; for(k=nhi; k > n; k--) { Ikm1 = Ikp1 + 2.0*k/ax * Ik; Ikp1 = Ik; Ik = Ikm1; } result->val = Ik; result->err = Ik * (r_Ikp1.err/r_Ikp1.val + r_Ik.err/r_Ik.val); if(x < 0.0 && GSL_IS_ODD(n)) result->val = -result->val; return GSL_ERROR_SELECT_2(stat_a1, stat_a2); } } int gsl_sf_bessel_In_scaled_array(const int nmin, const int nmax, const double x, double * result_array) { /* CHECK_POINTER(result_array) */ if(nmax < nmin || nmin < 0) { int j; for(j=0; j<=nmax-nmin; j++) result_array[j] = 0.0; GSL_ERROR ("domain error", GSL_EDOM); } else if(x == 0.0) { int j; for(j=0; j<=nmax-nmin; j++) result_array[j] = 0.0; if(nmin == 0) result_array[0] = 1.0; return GSL_SUCCESS; } else if(nmax == 0) { gsl_sf_result I0_scaled; int stat = gsl_sf_bessel_I0_scaled_e(x, &I0_scaled); result_array[0] = I0_scaled.val; return stat; } else { const double ax = fabs(x); const double two_over_x = 2.0/ax; /* starting values */ gsl_sf_result r_Inp1; gsl_sf_result r_In; int stat_0 = gsl_sf_bessel_In_scaled_e(nmax+1, ax, &r_Inp1); int stat_1 = gsl_sf_bessel_In_scaled_e(nmax, ax, &r_In); double Inp1 = r_Inp1.val; double In = r_In.val; double Inm1; int n; for(n=nmax; n>=nmin; n--) { result_array[n-nmin] = In; Inm1 = Inp1 + n * two_over_x * In; Inp1 = In; In = Inm1; } /* deal with signs */ if(x < 0.0) { for(n=nmin; n<=nmax; n++) { if(GSL_IS_ODD(n)) result_array[n-nmin] = -result_array[n-nmin]; } } return GSL_ERROR_SELECT_2(stat_0, stat_1); } } int gsl_sf_bessel_In_e(const int n_in, const double x, gsl_sf_result * result) { const double ax = fabs(x); const int n = abs(n_in); /* I(-n, z) = I(n, z) */ gsl_sf_result In_scaled; const int stat_In_scaled = gsl_sf_bessel_In_scaled_e(n, ax, &In_scaled); /* In_scaled is always less than 1, * so this overflow check is conservative. */ if(ax > GSL_LOG_DBL_MAX - 1.0) { OVERFLOW_ERROR(result); } else { const double ex = exp(ax); result->val = ex * In_scaled.val; result->err = ex * In_scaled.err; result->err += ax * GSL_DBL_EPSILON * fabs(result->val); if(x < 0.0 && GSL_IS_ODD(n)) result->val = -result->val; return stat_In_scaled; } } int gsl_sf_bessel_In_array(const int nmin, const int nmax, const double x, double * result_array) { double ax = fabs(x); /* CHECK_POINTER(result_array) */ if(ax > GSL_LOG_DBL_MAX - 1.0) { int j; for(j=0; j<=nmax-nmin; j++) result_array[j] = 0.0; /* FIXME: should be Inf */ GSL_ERROR ("overflow", GSL_EOVRFLW); } else { int j; double eax = exp(ax); int status = gsl_sf_bessel_In_scaled_array(nmin, nmax, x, result_array); for(j=0; j<=nmax-nmin; j++) result_array[j] *= eax; return status; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_In_scaled(const int n, const double x) { EVAL_RESULT(gsl_sf_bessel_In_scaled_e(n, x, &result)); } double gsl_sf_bessel_In(const int n, const double x) { EVAL_RESULT(gsl_sf_bessel_In_e(n, x, &result)); } gsl/specfunc/gsl_sf_laguerre.h0000644000175000017500000000372013536674414015056 0ustar eddedd/* specfunc/gsl_sf_laguerre.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_LAGUERRE_H__ #define __GSL_SF_LAGUERRE_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* L^a_n(x) = (a+1)_n / n! 1F1(-n,a+1,x) */ /* Evaluate generalized Laguerre polynomials * using explicit representations. * * exceptions: none */ int gsl_sf_laguerre_1_e(const double a, const double x, gsl_sf_result * result); int gsl_sf_laguerre_2_e(const double a, const double x, gsl_sf_result * result); int gsl_sf_laguerre_3_e(const double a, const double x, gsl_sf_result * result); double gsl_sf_laguerre_1(double a, double x); double gsl_sf_laguerre_2(double a, double x); double gsl_sf_laguerre_3(double a, double x); /* Evaluate generalized Laguerre polynomials. * * a > -1.0 * n >= 0 * exceptions: GSL_EDOM */ int gsl_sf_laguerre_n_e(const int n, const double a, const double x, gsl_sf_result * result); double gsl_sf_laguerre_n(int n, double a, double x); __END_DECLS #endif /* __GSL_SF_LAGUERRE_H__ */ gsl/specfunc/gsl_sf_dawson.h0000644000175000017500000000257213536674414014547 0ustar eddedd/* specfunc/gsl_sf_dawson.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_DAWSON_H__ #define __GSL_SF_DAWSON_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Dawson's integral: * * Exp[-x^2] Integral[ Exp[t^2], {t,0,x}] * * exceptions: GSL_EUNDRFLW; */ int gsl_sf_dawson_e(double x, gsl_sf_result * result); double gsl_sf_dawson(double x); __END_DECLS #endif /* __GSL_SF_DAWSON_H__ */ gsl/specfunc/coulomb.c0000644000175000017500000011503313536675317013352 0ustar eddedd/* specfunc/coulomb.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ /* Evaluation of Coulomb wave functions F_L(eta, x), G_L(eta, x), * and their derivatives. A combination of Steed's method, asymptotic * results, and power series. * * Steed's method: * [Barnett, CPC 21, 297 (1981)] * Power series and other methods: * [Biedenharn et al., PR 97, 542 (1954)] * [Bardin et al., CPC 3, 73 (1972)] * [Abad+Sesma, CPC 71, 110 (1992)] */ #include #include #include #include #include #include #include #include #include #include "error.h" /* the L=0 normalization constant * [Abramowitz+Stegun 14.1.8] */ static double C0sq(double eta) { double twopieta = 2.0*M_PI*eta; if(fabs(eta) < GSL_DBL_EPSILON) { return 1.0; } else if(twopieta > GSL_LOG_DBL_MAX) { return 0.0; } else { gsl_sf_result scale; gsl_sf_expm1_e(twopieta, &scale); return twopieta/scale.val; } } /* the full definition of C_L(eta) for any valid L and eta * [Abramowitz and Stegun 14.1.7] * This depends on the complex gamma function. For large * arguments the phase of the complex gamma function is not * very accurately determined. However the modulus is, and that * is all that we need to calculate C_L. * * This is not valid for L <= -3/2 or L = -1. */ static int CLeta(double L, double eta, gsl_sf_result * result) { gsl_sf_result ln1; /* log of numerator Gamma function */ gsl_sf_result ln2; /* log of denominator Gamma function */ double sgn = 1.0; double arg_val, arg_err; if(fabs(eta/(L+1.0)) < GSL_DBL_EPSILON) { gsl_sf_lngamma_e(L+1.0, &ln1); } else { gsl_sf_result p1; /* phase of numerator Gamma -- not used */ gsl_sf_lngamma_complex_e(L+1.0, eta, &ln1, &p1); /* should be ok */ } gsl_sf_lngamma_e(2.0*(L+1.0), &ln2); if(L < -1.0) sgn = -sgn; arg_val = L*M_LN2 - 0.5*eta*M_PI + ln1.val - ln2.val; arg_err = ln1.err + ln2.err; arg_err += GSL_DBL_EPSILON * (fabs(L*M_LN2) + fabs(0.5*eta*M_PI)); return gsl_sf_exp_err_e(arg_val, arg_err, result); } int gsl_sf_coulomb_CL_e(double lam, double eta, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(lam <= -1.0) { DOMAIN_ERROR(result); } else if(fabs(lam) < GSL_DBL_EPSILON) { /* saves a calculation of complex_lngamma(), otherwise not necessary */ result->val = sqrt(C0sq(eta)); result->err = 2.0 * GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else { return CLeta(lam, eta, result); } } /* cl[0] .. cl[kmax] = C_{lam_min}(eta) .. C_{lam_min+kmax}(eta) */ int gsl_sf_coulomb_CL_array(double lam_min, int kmax, double eta, double * cl) { int k; gsl_sf_result cl_0; gsl_sf_coulomb_CL_e(lam_min, eta, &cl_0); cl[0] = cl_0.val; for(k=1; k<=kmax; k++) { double L = lam_min + k; cl[k] = cl[k-1] * hypot(L, eta)/(L*(2.0*L+1.0)); } return GSL_SUCCESS; } /* Evaluate the series for Phi_L(eta,x) and Phi_L*(eta,x) * [Abramowitz+Stegun 14.1.5] * [Abramowitz+Stegun 14.1.13] * * The sequence of coefficients A_k^L is * manifestly well-controlled for L >= -1/2 * and eta < 10. * * This makes sense since this is the region * away from threshold, and you expect * the evaluation to become easier as you * get farther from threshold. * * Empirically, this is quite well-behaved for * L >= -1/2 * eta < 10 * x < 10 */ #if 0 static int coulomb_Phi_series(const double lam, const double eta, const double x, double * result, double * result_star) { int kmin = 5; int kmax = 200; int k; double Akm2 = 1.0; double Akm1 = eta/(lam+1.0); double Ak; double xpow = x; double sum = Akm2 + Akm1*x; double sump = (lam+1.0)*Akm2 + (lam+2.0)*Akm1*x; double prev_abs_del = fabs(Akm1*x); double prev_abs_del_p = (lam+2.0) * prev_abs_del; for(k=2; k kmin ) break; /* We need to keep track of the previous delta because when * eta is near zero the odd terms of the sum are very small * and this could lead to premature termination. */ prev_abs_del = abs_del; prev_abs_del_p = abs_del_p; Akm2 = Akm1; Akm1 = Ak; } *result = sum; *result_star = sump; if(k==kmax) { GSL_ERROR ("error", GSL_EMAXITER); } else { return GSL_SUCCESS; } } #endif /* 0 */ /* Determine the connection phase, phi_lambda. * See coulomb_FG_series() below. We have * to be careful about sin(phi)->0. Note that * there is an underflow condition for large * positive eta in any case. */ static int coulomb_connection(const double lam, const double eta, double * cos_phi, double * sin_phi) { if(eta > -GSL_LOG_DBL_MIN/2.0*M_PI-1.0) { *cos_phi = 1.0; *sin_phi = 0.0; GSL_ERROR ("error", GSL_EUNDRFLW); } else if(eta > -GSL_LOG_DBL_EPSILON/(4.0*M_PI)) { const double eps = 2.0 * exp(-2.0*M_PI*eta); const double tpl = tan(M_PI * lam); const double dth = eps * tpl / (tpl*tpl + 1.0); *cos_phi = -1.0 + 0.5 * dth*dth; *sin_phi = -dth; return GSL_SUCCESS; } else { double X = tanh(M_PI * eta) / tan(M_PI * lam); double phi = -atan(X) - (lam + 0.5) * M_PI; *cos_phi = cos(phi); *sin_phi = sin(phi); return GSL_SUCCESS; } } /* Evaluate the Frobenius series for F_lam(eta,x) and G_lam(eta,x). * Homegrown algebra. Evaluates the series for F_{lam} and * F_{-lam-1}, then uses * G_{lam} = (F_{lam} cos(phi) - F_{-lam-1}) / sin(phi) * where * phi = Arg[Gamma[1+lam+I eta]] - Arg[Gamma[-lam + I eta]] - (lam+1/2)Pi * = Arg[Sin[Pi(-lam+I eta)] - (lam+1/2)Pi * = atan2(-cos(lam Pi)sinh(eta Pi), -sin(lam Pi)cosh(eta Pi)) - (lam+1/2)Pi * * = -atan(X) - (lam+1/2) Pi, X = tanh(eta Pi)/tan(lam Pi) * * Not appropriate for lam <= -1/2, lam = 0, or lam >= 1/2. */ static int coulomb_FG_series(const double lam, const double eta, const double x, gsl_sf_result * F, gsl_sf_result * G) { const int max_iter = 800; gsl_sf_result ClamA; gsl_sf_result ClamB; int stat_A = CLeta(lam, eta, &ClamA); int stat_B = CLeta(-lam-1.0, eta, &ClamB); const double tlp1 = 2.0*lam + 1.0; const double pow_x = pow(x, lam); double cos_phi_lam; double sin_phi_lam; double uA_mm2 = 1.0; /* uA sum is for F_{lam} */ double uA_mm1 = x*eta/(lam+1.0); double uA_m; double uB_mm2 = 1.0; /* uB sum is for F_{-lam-1} */ double uB_mm1 = -x*eta/lam; double uB_m; double A_sum = uA_mm2 + uA_mm1; double B_sum = uB_mm2 + uB_mm1; double A_abs_del_prev = fabs(A_sum); double B_abs_del_prev = fabs(B_sum); gsl_sf_result FA, FB; int m = 2; int stat_conn = coulomb_connection(lam, eta, &cos_phi_lam, &sin_phi_lam); if(stat_conn == GSL_EUNDRFLW) { F->val = 0.0; /* FIXME: should this be set to Inf too like G? */ F->err = 0.0; OVERFLOW_ERROR(G); } while(m < max_iter) { double abs_dA; double abs_dB; uA_m = x*(2.0*eta*uA_mm1 - x*uA_mm2)/(m*(m+tlp1)); uB_m = x*(2.0*eta*uB_mm1 - x*uB_mm2)/(m*(m-tlp1)); A_sum += uA_m; B_sum += uB_m; abs_dA = fabs(uA_m); abs_dB = fabs(uB_m); if(m > 15) { /* Don't bother checking until we have gone out a little ways; * a minor optimization. Also make sure to check both the * current and the previous increment because the odd and even * terms of the sum can have very different behaviour, depending * on the value of eta. */ double max_abs_dA = GSL_MAX(abs_dA, A_abs_del_prev); double max_abs_dB = GSL_MAX(abs_dB, B_abs_del_prev); double abs_A = fabs(A_sum); double abs_B = fabs(B_sum); if( max_abs_dA/(max_abs_dA + abs_A) < 4.0*GSL_DBL_EPSILON && max_abs_dB/(max_abs_dB + abs_B) < 4.0*GSL_DBL_EPSILON ) break; } A_abs_del_prev = abs_dA; B_abs_del_prev = abs_dB; uA_mm2 = uA_mm1; uA_mm1 = uA_m; uB_mm2 = uB_mm1; uB_mm1 = uB_m; m++; } FA.val = A_sum * ClamA.val * pow_x * x; FA.err = fabs(A_sum) * ClamA.err * pow_x * x + 2.0*GSL_DBL_EPSILON*fabs(FA.val); FB.val = B_sum * ClamB.val / pow_x; FB.err = fabs(B_sum) * ClamB.err / pow_x + 2.0*GSL_DBL_EPSILON*fabs(FB.val); F->val = FA.val; F->err = FA.err; G->val = (FA.val * cos_phi_lam - FB.val)/sin_phi_lam; G->err = (FA.err * fabs(cos_phi_lam) + FB.err)/fabs(sin_phi_lam); if(m >= max_iter) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_ERROR_SELECT_2(stat_A, stat_B); } /* Evaluate the Frobenius series for F_0(eta,x) and G_0(eta,x). * See [Bardin et al., CPC 3, 73 (1972), (14)-(17)]; * note the misprint in (17): nu_0=1 is correct, not nu_0=0. */ static int coulomb_FG0_series(const double eta, const double x, gsl_sf_result * F, gsl_sf_result * G) { const int max_iter = 800; const double x2 = x*x; const double tex = 2.0*eta*x; gsl_sf_result C0; int stat_CL = CLeta(0.0, eta, &C0); gsl_sf_result r1pie; int psi_stat = gsl_sf_psi_1piy_e(eta, &r1pie); double u_mm2 = 0.0; /* u_0 */ double u_mm1 = x; /* u_1 */ double u_m; double v_mm2 = 1.0; /* nu_0 */ double v_mm1 = tex*(2.0*M_EULER-1.0+r1pie.val); /* nu_1 */ double v_m; double u_sum = u_mm2 + u_mm1; double v_sum = v_mm2 + v_mm1; double u_abs_del_prev = fabs(u_sum); double v_abs_del_prev = fabs(v_sum); int m = 2; double u_sum_err = 2.0 * GSL_DBL_EPSILON * fabs(u_sum); double v_sum_err = 2.0 * GSL_DBL_EPSILON * fabs(v_sum); double ln2x = log(2.0*x); while(m < max_iter) { double abs_du; double abs_dv; double m_mm1 = m*(m-1.0); u_m = (tex*u_mm1 - x2*u_mm2)/m_mm1; v_m = (tex*v_mm1 - x2*v_mm2 - 2.0*eta*(2*m-1)*u_m)/m_mm1; u_sum += u_m; v_sum += v_m; abs_du = fabs(u_m); abs_dv = fabs(v_m); u_sum_err += 2.0 * GSL_DBL_EPSILON * abs_du; v_sum_err += 2.0 * GSL_DBL_EPSILON * abs_dv; if(m > 15) { /* Don't bother checking until we have gone out a little ways; * a minor optimization. Also make sure to check both the * current and the previous increment because the odd and even * terms of the sum can have very different behaviour, depending * on the value of eta. */ double max_abs_du = GSL_MAX(abs_du, u_abs_del_prev); double max_abs_dv = GSL_MAX(abs_dv, v_abs_del_prev); double abs_u = fabs(u_sum); double abs_v = fabs(v_sum); if( max_abs_du/(max_abs_du + abs_u) < 40.0*GSL_DBL_EPSILON && max_abs_dv/(max_abs_dv + abs_v) < 40.0*GSL_DBL_EPSILON ) break; } u_abs_del_prev = abs_du; v_abs_del_prev = abs_dv; u_mm2 = u_mm1; u_mm1 = u_m; v_mm2 = v_mm1; v_mm1 = v_m; m++; } F->val = C0.val * u_sum; F->err = C0.err * fabs(u_sum); F->err += fabs(C0.val) * u_sum_err; F->err += 2.0 * GSL_DBL_EPSILON * fabs(F->val); G->val = (v_sum + 2.0*eta*u_sum * ln2x) / C0.val; G->err = (fabs(v_sum) + fabs(2.0*eta*u_sum * ln2x)) / fabs(C0.val) * fabs(C0.err/C0.val); G->err += (v_sum_err + fabs(2.0*eta*u_sum_err*ln2x)) / fabs(C0.val); G->err += 2.0 * GSL_DBL_EPSILON * fabs(G->val); if(m == max_iter) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_ERROR_SELECT_2(psi_stat, stat_CL); } /* Evaluate the Frobenius series for F_{-1/2}(eta,x) and G_{-1/2}(eta,x). * Homegrown algebra. */ static int coulomb_FGmhalf_series(const double eta, const double x, gsl_sf_result * F, gsl_sf_result * G) { const int max_iter = 800; const double rx = sqrt(x); const double x2 = x*x; const double tex = 2.0*eta*x; gsl_sf_result Cmhalf; int stat_CL = CLeta(-0.5, eta, &Cmhalf); double u_mm2 = 1.0; /* u_0 */ double u_mm1 = tex * u_mm2; /* u_1 */ double u_m; double v_mm2, v_mm1, v_m; double f_sum, g_sum; double tmp1; gsl_sf_result rpsi_1pe; gsl_sf_result rpsi_1p2e; int m = 2; gsl_sf_psi_1piy_e(eta, &rpsi_1pe); gsl_sf_psi_1piy_e(2.0*eta, &rpsi_1p2e); v_mm2 = 2.0*M_EULER - M_LN2 - rpsi_1pe.val + 2.0*rpsi_1p2e.val; v_mm1 = tex*(v_mm2 - 2.0*u_mm2); f_sum = u_mm2 + u_mm1; g_sum = v_mm2 + v_mm1; while(m < max_iter) { double m2 = m*m; u_m = (tex*u_mm1 - x2*u_mm2)/m2; v_m = (tex*v_mm1 - x2*v_mm2 - 2.0*m*u_m)/m2; f_sum += u_m; g_sum += v_m; if( f_sum != 0.0 && g_sum != 0.0 && (fabs(u_m/f_sum) + fabs(v_m/g_sum) < 10.0*GSL_DBL_EPSILON)) break; u_mm2 = u_mm1; u_mm1 = u_m; v_mm2 = v_mm1; v_mm1 = v_m; m++; } F->val = Cmhalf.val * rx * f_sum; F->err = Cmhalf.err * fabs(rx * f_sum) + 2.0*GSL_DBL_EPSILON*fabs(F->val); tmp1 = f_sum*log(x); G->val = -rx*(tmp1 + g_sum)/Cmhalf.val; G->err = fabs(rx)*(fabs(tmp1) + fabs(g_sum))/fabs(Cmhalf.val) * fabs(Cmhalf.err/Cmhalf.val); if(m == max_iter) GSL_ERROR ("error", GSL_EMAXITER); else return stat_CL; } /* Evolve the backwards recurrence for F,F'. * * F_{lam-1} = (S_lam F_lam + F_lam') / R_lam * F_{lam-1}' = (S_lam F_{lam-1} - R_lam F_lam) * where * R_lam = sqrt(1 + (eta/lam)^2) * S_lam = lam/x + eta/lam * */ static int coulomb_F_recur(double lam_min, int kmax, double eta, double x, double F_lam_max, double Fp_lam_max, double * F_lam_min, double * Fp_lam_min ) { double x_inv = 1.0/x; double fcl = F_lam_max; double fpl = Fp_lam_max; double lam_max = lam_min + kmax; double lam = lam_max; int k; for(k=kmax-1; k>=0; k--) { double el = eta/lam; double rl = hypot(1.0, el); double sl = el + lam*x_inv; double fc_lm1; fc_lm1 = (fcl*sl + fpl)/rl; fpl = fc_lm1*sl - fcl*rl; fcl = fc_lm1; lam -= 1.0; } *F_lam_min = fcl; *Fp_lam_min = fpl; return GSL_SUCCESS; } /* Evolve the forward recurrence for G,G'. * * G_{lam+1} = (S_lam G_lam - G_lam')/R_lam * G_{lam+1}' = R_{lam+1} G_lam - S_lam G_{lam+1} * * where S_lam and R_lam are as above in the F recursion. */ static int coulomb_G_recur(const double lam_min, const int kmax, const double eta, const double x, const double G_lam_min, const double Gp_lam_min, double * G_lam_max, double * Gp_lam_max ) { double x_inv = 1.0/x; double gcl = G_lam_min; double gpl = Gp_lam_min; double lam = lam_min + 1.0; int k; for(k=1; k<=kmax; k++) { double el = eta/lam; double rl = hypot(1.0, el); double sl = el + lam*x_inv; double gcl1 = (sl*gcl - gpl)/rl; gpl = rl*gcl - sl*gcl1; gcl = gcl1; lam += 1.0; } *G_lam_max = gcl; *Gp_lam_max = gpl; return GSL_SUCCESS; } /* Evaluate the first continued fraction, giving * the ratio F'/F at the upper lambda value. * We also determine the sign of F at that point, * since it is the sign of the last denominator * in the continued fraction. */ static int coulomb_CF1(double lambda, double eta, double x, double * fcl_sign, double * result, int * count ) { const double CF1_small = 1.e-30; const double CF1_abort = 1.0e+05; const double CF1_acc = 2.0*GSL_DBL_EPSILON; const double x_inv = 1.0/x; const double px = lambda + 1.0 + CF1_abort; double pk = lambda + 1.0; double F = eta/pk + pk*x_inv; double D, C; double df; *fcl_sign = 1.0; *count = 0; if(fabs(F) < CF1_small) F = CF1_small; D = 0.0; C = F; do { double pk1 = pk + 1.0; double ek = eta / pk; double rk2 = 1.0 + ek*ek; double tk = (pk + pk1)*(x_inv + ek/pk1); D = tk - rk2 * D; C = tk - rk2 / C; if(fabs(C) < CF1_small) C = CF1_small; if(fabs(D) < CF1_small) D = CF1_small; D = 1.0/D; df = D * C; F = F * df; if(D < 0.0) { /* sign of result depends on sign of denominator */ *fcl_sign = - *fcl_sign; } pk = pk1; if( pk > px ) { *result = F; GSL_ERROR ("error", GSL_ERUNAWAY); } ++(*count); } while(fabs(df-1.0) > CF1_acc); *result = F; return GSL_SUCCESS; } #if 0 static int old_coulomb_CF1(const double lambda, double eta, double x, double * fcl_sign, double * result ) { const double CF1_abort = 1.e5; const double CF1_acc = 10.0*GSL_DBL_EPSILON; const double x_inv = 1.0/x; const double px = lambda + 1.0 + CF1_abort; double pk = lambda + 1.0; double D; double df; double F; double p; double pk1; double ek; double fcl = 1.0; double tk; while(1) { ek = eta/pk; F = (ek + pk*x_inv)*fcl + (fcl - 1.0)*x_inv; pk1 = pk + 1.0; if(fabs(eta*x + pk*pk1) > CF1_acc) break; fcl = (1.0 + ek*ek)/(1.0 + eta*eta/(pk1*pk1)); pk = 2.0 + pk; } D = 1.0/((pk + pk1)*(x_inv + ek/pk1)); df = -fcl*(1.0 + ek*ek)*D; if(fcl != 1.0) fcl = -1.0; if(D < 0.0) fcl = -fcl; F = F + df; p = 1.0; do { pk = pk1; pk1 = pk + 1.0; ek = eta / pk; tk = (pk + pk1)*(x_inv + ek/pk1); D = tk - D*(1.0+ek*ek); if(fabs(D) < sqrt(CF1_acc)) { p += 1.0; if(p > 2.0) { printf("HELP............\n"); } } D = 1.0/D; if(D < 0.0) { /* sign of result depends on sign of denominator */ fcl = -fcl; } df = df*(D*tk - 1.0); F = F + df; if( pk > px ) { GSL_ERROR ("error", GSL_ERUNAWAY); } } while(fabs(df) > fabs(F)*CF1_acc); *fcl_sign = fcl; *result = F; return GSL_SUCCESS; } #endif /* 0 */ /* Evaluate the second continued fraction to * obtain the ratio * (G' + i F')/(G + i F) := P + i Q * at the specified lambda value. */ static int coulomb_CF2(const double lambda, const double eta, const double x, double * result_P, double * result_Q, int * count ) { int status = GSL_SUCCESS; const double CF2_acc = 4.0*GSL_DBL_EPSILON; const double CF2_abort = 2.0e+05; const double wi = 2.0*eta; const double x_inv = 1.0/x; const double e2mm1 = eta*eta + lambda*(lambda + 1.0); double ar = -e2mm1; double ai = eta; double br = 2.0*(x - eta); double bi = 2.0; double dr = br/(br*br + bi*bi); double di = -bi/(br*br + bi*bi); double dp = -x_inv*(ar*di + ai*dr); double dq = x_inv*(ar*dr - ai*di); double A, B, C, D; double pk = 0.0; double P = 0.0; double Q = 1.0 - eta*x_inv; *count = 0; do { P += dp; Q += dq; pk += 2.0; ar += pk; ai += wi; bi += 2.0; D = ar*dr - ai*di + br; di = ai*dr + ar*di + bi; C = 1.0/(D*D + di*di); dr = C*D; di = -C*di; A = br*dr - bi*di - 1.; B = bi*dr + br*di; C = dp*A - dq*B; dq = dp*B + dq*A; dp = C; if(pk > CF2_abort) { status = GSL_ERUNAWAY; break; } ++(*count); } while(fabs(dp)+fabs(dq) > (fabs(P)+fabs(Q))*CF2_acc); if(Q < CF2_abort*GSL_DBL_EPSILON*fabs(P)) { status = GSL_ELOSS; } *result_P = P; *result_Q = Q; return status; } /* WKB evaluation of F, G. Assumes 0 < x < turning point. * Overflows are trapped, GSL_EOVRFLW is signalled, * and an exponent is returned such that: * * result_F = fjwkb * exp(-exponent) * result_G = gjwkb * exp( exponent) * * See [Biedenharn et al. Phys. Rev. 97, 542-554 (1955), Section IV] * * Unfortunately, this is not very accurate in general. The * test cases typically have 3-4 digits of precision. One could * argue that this is ok for general use because, for instance, * F is exponentially small in this region and so the absolute * accuracy is still roughly acceptable. But it would be better * to have a systematic method for improving the precision. See * the Abad+Sesma method discussion below. */ static int coulomb_jwkb(const double lam, const double eta, const double x, gsl_sf_result * fjwkb, gsl_sf_result * gjwkb, double * exponent) { const double llp1 = lam*(lam+1.0) + 6.0/35.0; const double llp1_eff = GSL_MAX(llp1, 0.0); const double rho_ghalf = sqrt(x*(2.0*eta - x) + llp1_eff); const double sinh_arg = sqrt(llp1_eff/(eta*eta+llp1_eff)) * rho_ghalf / x; const double sinh_inv = log(sinh_arg + hypot(1.0,sinh_arg)); const double phi = fabs(rho_ghalf - eta*atan2(rho_ghalf,x-eta) - sqrt(llp1_eff) * sinh_inv); const double zeta_half = pow(3.0*phi/2.0, 1.0/3.0); const double prefactor = sqrt(M_PI*phi*x/(6.0 * rho_ghalf)); double F = prefactor * 3.0/zeta_half; double G = prefactor * 3.0/zeta_half; /* Note the sqrt(3) from Bi normalization */ double F_exp; double G_exp; const double airy_scale_exp = phi; gsl_sf_result ai; gsl_sf_result bi; gsl_sf_airy_Ai_scaled_e(zeta_half*zeta_half, GSL_MODE_DEFAULT, &ai); gsl_sf_airy_Bi_scaled_e(zeta_half*zeta_half, GSL_MODE_DEFAULT, &bi); F *= ai.val; G *= bi.val; F_exp = log(F) - airy_scale_exp; G_exp = log(G) + airy_scale_exp; if(G_exp >= GSL_LOG_DBL_MAX) { fjwkb->val = F; gjwkb->val = G; fjwkb->err = 1.0e-3 * fabs(F); /* FIXME: real error here ... could be smaller */ gjwkb->err = 1.0e-3 * fabs(G); *exponent = airy_scale_exp; GSL_ERROR ("error", GSL_EOVRFLW); } else { fjwkb->val = exp(F_exp); gjwkb->val = exp(G_exp); fjwkb->err = 1.0e-3 * fabs(fjwkb->val); gjwkb->err = 1.0e-3 * fabs(gjwkb->val); *exponent = 0.0; return GSL_SUCCESS; } } /* Asymptotic evaluation of F and G below the minimal turning point. * * This is meant to be a drop-in replacement for coulomb_jwkb(). * It uses the expressions in [Abad+Sesma]. This requires some * work because I am not sure where it is valid. They mumble * something about |x| < |lam|^(-1/2) or 8|eta x| > lam when |x| < 1. * This seems true, but I thought the result was based on a uniform * expansion and could be controlled by simply using more terms. */ #if 0 static int coulomb_AS_xlt2eta(const double lam, const double eta, const double x, gsl_sf_result * f_AS, gsl_sf_result * g_AS, double * exponent) { /* no time to do this now... */ } #endif /* 0 */ /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_coulomb_wave_FG_e(const double eta, const double x, const double lam_F, const int k_lam_G, /* lam_G = lam_F - k_lam_G */ gsl_sf_result * F, gsl_sf_result * Fp, gsl_sf_result * G, gsl_sf_result * Gp, double * exp_F, double * exp_G) { const double lam_G = lam_F - k_lam_G; if(x < 0.0 || lam_F <= -0.5 || lam_G <= -0.5) { GSL_SF_RESULT_SET(F, 0.0, 0.0); GSL_SF_RESULT_SET(Fp, 0.0, 0.0); GSL_SF_RESULT_SET(G, 0.0, 0.0); GSL_SF_RESULT_SET(Gp, 0.0, 0.0); *exp_F = 0.0; *exp_G = 0.0; GSL_ERROR ("domain error", GSL_EDOM); } else if(x == 0.0) { gsl_sf_result C0; CLeta(0.0, eta, &C0); GSL_SF_RESULT_SET(F, 0.0, 0.0); GSL_SF_RESULT_SET(Fp, 0.0, 0.0); GSL_SF_RESULT_SET(G, 0.0, 0.0); /* FIXME: should be Inf */ GSL_SF_RESULT_SET(Gp, 0.0, 0.0); /* FIXME: should be Inf */ *exp_F = 0.0; *exp_G = 0.0; if(lam_F == 0.0){ GSL_SF_RESULT_SET(Fp, C0.val, C0.err); } if(lam_G == 0.0) { GSL_SF_RESULT_SET(Gp, 1.0/C0.val, fabs(C0.err/C0.val)/fabs(C0.val)); } GSL_ERROR ("domain error", GSL_EDOM); /* After all, since we are asking for G, this is a domain error... */ } else if(x < 1.2 && 2.0*M_PI*eta < 0.9*(-GSL_LOG_DBL_MIN) && fabs(eta*x) < 10.0) { /* Reduce to a small lambda value and use the series * representations for F and G. We cannot allow eta to * be large and positive because the connection formula * for G_lam is badly behaved due to an underflow in sin(phi_lam) * [see coulomb_FG_series() and coulomb_connection() above]. * Note that large negative eta is ok however. */ const double SMALL = GSL_SQRT_DBL_EPSILON; const int N = (int)(lam_F + 0.5); const int span = GSL_MAX(k_lam_G, N); const double lam_min = lam_F - N; /* -1/2 <= lam_min < 1/2 */ double F_lam_F, Fp_lam_F; double G_lam_G = 0.0, Gp_lam_G = 0.0; double F_lam_F_err, Fp_lam_F_err; double Fp_over_F_lam_F; double F_sign_lam_F; double F_lam_min_unnorm, Fp_lam_min_unnorm; double Fp_over_F_lam_min; gsl_sf_result F_lam_min; gsl_sf_result G_lam_min, Gp_lam_min; double F_scale; double Gerr_frac; double F_scale_frac_err; double F_unnorm_frac_err; /* Determine F'/F at lam_F. */ int CF1_count; int stat_CF1 = coulomb_CF1(lam_F, eta, x, &F_sign_lam_F, &Fp_over_F_lam_F, &CF1_count); int stat_ser; int stat_Fr; int stat_Gr; /* Recurse down with unnormalized F,F' values. */ F_lam_F = SMALL; Fp_lam_F = Fp_over_F_lam_F * F_lam_F; if(span != 0) { stat_Fr = coulomb_F_recur(lam_min, span, eta, x, F_lam_F, Fp_lam_F, &F_lam_min_unnorm, &Fp_lam_min_unnorm ); } else { F_lam_min_unnorm = F_lam_F; Fp_lam_min_unnorm = Fp_lam_F; stat_Fr = GSL_SUCCESS; } /* Determine F and G at lam_min. */ if(lam_min == -0.5) { stat_ser = coulomb_FGmhalf_series(eta, x, &F_lam_min, &G_lam_min); } else if(lam_min == 0.0) { stat_ser = coulomb_FG0_series(eta, x, &F_lam_min, &G_lam_min); } else if(lam_min == 0.5) { /* This cannot happen. */ F->val = F_lam_F; F->err = 2.0 * GSL_DBL_EPSILON * fabs(F->val); Fp->val = Fp_lam_F; Fp->err = 2.0 * GSL_DBL_EPSILON * fabs(Fp->val); G->val = G_lam_G; G->err = 2.0 * GSL_DBL_EPSILON * fabs(G->val); Gp->val = Gp_lam_G; Gp->err = 2.0 * GSL_DBL_EPSILON * fabs(Gp->val); *exp_F = 0.0; *exp_G = 0.0; GSL_ERROR ("error", GSL_ESANITY); } else { stat_ser = coulomb_FG_series(lam_min, eta, x, &F_lam_min, &G_lam_min); } /* Determine remaining quantities. */ Fp_over_F_lam_min = Fp_lam_min_unnorm / F_lam_min_unnorm; Gp_lam_min.val = Fp_over_F_lam_min*G_lam_min.val - 1.0/F_lam_min.val; Gp_lam_min.err = fabs(Fp_over_F_lam_min)*G_lam_min.err; Gp_lam_min.err += fabs(1.0/F_lam_min.val) * fabs(F_lam_min.err/F_lam_min.val); F_scale = F_lam_min.val / F_lam_min_unnorm; /* Apply scale to the original F,F' values. */ F_scale_frac_err = fabs(F_lam_min.err/F_lam_min.val); F_unnorm_frac_err = 2.0*GSL_DBL_EPSILON*(CF1_count+span+1); F_lam_F *= F_scale; F_lam_F_err = fabs(F_lam_F) * (F_unnorm_frac_err + F_scale_frac_err); Fp_lam_F *= F_scale; Fp_lam_F_err = fabs(Fp_lam_F) * (F_unnorm_frac_err + F_scale_frac_err); /* Recurse up to get the required G,G' values. */ stat_Gr = coulomb_G_recur(lam_min, GSL_MAX(N-k_lam_G,0), eta, x, G_lam_min.val, Gp_lam_min.val, &G_lam_G, &Gp_lam_G ); F->val = F_lam_F; F->err = F_lam_F_err; F->err += 2.0 * GSL_DBL_EPSILON * fabs(F_lam_F); Fp->val = Fp_lam_F; Fp->err = Fp_lam_F_err; Fp->err += 2.0 * GSL_DBL_EPSILON * fabs(Fp_lam_F); Gerr_frac = fabs(G_lam_min.err/G_lam_min.val) + fabs(Gp_lam_min.err/Gp_lam_min.val); G->val = G_lam_G; G->err = Gerr_frac * fabs(G_lam_G); G->err += 2.0 * (CF1_count+1) * GSL_DBL_EPSILON * fabs(G->val); Gp->val = Gp_lam_G; Gp->err = Gerr_frac * fabs(Gp->val); Gp->err += 2.0 * (CF1_count+1) * GSL_DBL_EPSILON * fabs(Gp->val); *exp_F = 0.0; *exp_G = 0.0; return GSL_ERROR_SELECT_4(stat_ser, stat_CF1, stat_Fr, stat_Gr); } else if(x < 2.0*eta) { /* Use WKB approximation to obtain F and G at the two * lambda values, and use the Wronskian and the * continued fractions for F'/F to obtain F' and G'. */ gsl_sf_result F_lam_F, G_lam_F; gsl_sf_result F_lam_G, G_lam_G; double exp_lam_F, exp_lam_G; int stat_lam_F; int stat_lam_G; int stat_CF1_lam_F; int stat_CF1_lam_G; int CF1_count; double Fp_over_F_lam_F; double Fp_over_F_lam_G; double F_sign_lam_F; double F_sign_lam_G; stat_lam_F = coulomb_jwkb(lam_F, eta, x, &F_lam_F, &G_lam_F, &exp_lam_F); if(k_lam_G == 0) { stat_lam_G = stat_lam_F; F_lam_G = F_lam_F; G_lam_G = G_lam_F; exp_lam_G = exp_lam_F; } else { stat_lam_G = coulomb_jwkb(lam_G, eta, x, &F_lam_G, &G_lam_G, &exp_lam_G); } stat_CF1_lam_F = coulomb_CF1(lam_F, eta, x, &F_sign_lam_F, &Fp_over_F_lam_F, &CF1_count); if(k_lam_G == 0) { stat_CF1_lam_G = stat_CF1_lam_F; F_sign_lam_G = F_sign_lam_F; Fp_over_F_lam_G = Fp_over_F_lam_F; } else { stat_CF1_lam_G = coulomb_CF1(lam_G, eta, x, &F_sign_lam_G, &Fp_over_F_lam_G, &CF1_count); } F->val = F_lam_F.val; F->err = F_lam_F.err; G->val = G_lam_G.val; G->err = G_lam_G.err; Fp->val = Fp_over_F_lam_F * F_lam_F.val; Fp->err = fabs(Fp_over_F_lam_F) * F_lam_F.err; Fp->err += 2.0*GSL_DBL_EPSILON*fabs(Fp->val); Gp->val = Fp_over_F_lam_G * G_lam_G.val - 1.0/F_lam_G.val; Gp->err = fabs(Fp_over_F_lam_G) * G_lam_G.err; Gp->err += fabs(1.0/F_lam_G.val) * fabs(F_lam_G.err/F_lam_G.val); *exp_F = exp_lam_F; *exp_G = exp_lam_G; if(stat_lam_F == GSL_EOVRFLW || stat_lam_G == GSL_EOVRFLW) { GSL_ERROR ("overflow", GSL_EOVRFLW); } else { return GSL_ERROR_SELECT_2(stat_lam_F, stat_lam_G); } } else { /* x > 2 eta, so we know that we can find a lambda value such * that x is above the turning point. We do this, evaluate * using Steed's method at that oscillatory point, then * use recursion on F and G to obtain the required values. * * lam_0 = a value of lambda such that x is below the turning point * lam_min = minimum of lam_0 and the requested lam_G, since * we must go at least as low as lam_G */ const double SMALL = GSL_SQRT_DBL_EPSILON; const double C = sqrt(1.0 + 4.0*x*(x-2.0*eta)); const int N = ceil(lam_F - C + 0.5); const double lam_0 = lam_F - GSL_MAX(N, 0); const double lam_min = GSL_MIN(lam_0, lam_G); double F_lam_F, Fp_lam_F; double G_lam_G, Gp_lam_G; double F_lam_min_unnorm, Fp_lam_min_unnorm; double F_lam_min, Fp_lam_min; double G_lam_min, Gp_lam_min; double Fp_over_F_lam_F; double Fp_over_F_lam_min; double F_sign_lam_F, F_sign_lam_min; double P_lam_min, Q_lam_min; double alpha; double gamma; double F_scale; int CF1_count; int CF2_count; int stat_CF1 = coulomb_CF1(lam_F, eta, x, &F_sign_lam_F, &Fp_over_F_lam_F, &CF1_count); int stat_CF2; int stat_Fr; int stat_Gr; int F_recur_count; int G_recur_count; double err_amplify; F_lam_F = F_sign_lam_F * SMALL; /* unnormalized */ Fp_lam_F = Fp_over_F_lam_F * F_lam_F; /* Backward recurrence to get F,Fp at lam_min */ F_recur_count = GSL_MAX(k_lam_G, N); stat_Fr = coulomb_F_recur(lam_min, F_recur_count, eta, x, F_lam_F, Fp_lam_F, &F_lam_min_unnorm, &Fp_lam_min_unnorm ); Fp_over_F_lam_min = Fp_lam_min_unnorm / F_lam_min_unnorm; /* Steed evaluation to complete evaluation of F,Fp,G,Gp at lam_min */ stat_CF2 = coulomb_CF2(lam_min, eta, x, &P_lam_min, &Q_lam_min, &CF2_count); alpha = Fp_over_F_lam_min - P_lam_min; gamma = alpha/Q_lam_min; F_sign_lam_min = GSL_SIGN(F_lam_min_unnorm) ; F_lam_min = F_sign_lam_min / sqrt(alpha*alpha/Q_lam_min + Q_lam_min); Fp_lam_min = Fp_over_F_lam_min * F_lam_min; G_lam_min = gamma * F_lam_min; Gp_lam_min = (P_lam_min * gamma - Q_lam_min) * F_lam_min; /* Apply scale to values of F,Fp at lam_F (the top). */ F_scale = F_lam_min / F_lam_min_unnorm; F_lam_F *= F_scale; Fp_lam_F *= F_scale; /* Forward recurrence to get G,Gp at lam_G (the top). */ G_recur_count = GSL_MAX(N-k_lam_G,0); stat_Gr = coulomb_G_recur(lam_min, G_recur_count, eta, x, G_lam_min, Gp_lam_min, &G_lam_G, &Gp_lam_G ); err_amplify = CF1_count + CF2_count + F_recur_count + G_recur_count + 1; F->val = F_lam_F; F->err = 8.0*err_amplify*GSL_DBL_EPSILON * fabs(F->val); Fp->val = Fp_lam_F; Fp->err = 8.0*err_amplify*GSL_DBL_EPSILON * fabs(Fp->val); G->val = G_lam_G; G->err = 8.0*err_amplify*GSL_DBL_EPSILON * fabs(G->val); Gp->val = Gp_lam_G; Gp->err = 8.0*err_amplify*GSL_DBL_EPSILON * fabs(Gp->val); *exp_F = 0.0; *exp_G = 0.0; return GSL_ERROR_SELECT_4(stat_CF1, stat_CF2, stat_Fr, stat_Gr); } } int gsl_sf_coulomb_wave_F_array(double lam_min, int kmax, double eta, double x, double * fc_array, double * F_exp) { if(x == 0.0) { int k; *F_exp = 0.0; for(k=0; k<=kmax; k++) { fc_array[k] = 0.0; } if(lam_min == 0.0){ gsl_sf_result f_0; CLeta(0.0, eta, &f_0); fc_array[0] = f_0.val; } return GSL_SUCCESS; } else { const double x_inv = 1.0/x; const double lam_max = lam_min + kmax; gsl_sf_result F, Fp; gsl_sf_result G, Gp; double G_exp; int stat_FG = gsl_sf_coulomb_wave_FG_e(eta, x, lam_max, 0, &F, &Fp, &G, &Gp, F_exp, &G_exp); double fcl = F.val; double fpl = Fp.val; double lam = lam_max; int k; fc_array[kmax] = F.val; for(k=kmax-1; k>=0; k--) { double el = eta/lam; double rl = hypot(1.0, el); double sl = el + lam*x_inv; double fc_lm1 = (fcl*sl + fpl)/rl; fc_array[k] = fc_lm1; fpl = fc_lm1*sl - fcl*rl; fcl = fc_lm1; lam -= 1.0; } return stat_FG; } } int gsl_sf_coulomb_wave_FG_array(double lam_min, int kmax, double eta, double x, double * fc_array, double * gc_array, double * F_exp, double * G_exp) { const double x_inv = 1.0/x; const double lam_max = lam_min + kmax; gsl_sf_result F, Fp; gsl_sf_result G, Gp; int stat_FG = gsl_sf_coulomb_wave_FG_e(eta, x, lam_max, kmax, &F, &Fp, &G, &Gp, F_exp, G_exp); double fcl = F.val; double fpl = Fp.val; double lam = lam_max; int k; double gcl, gpl; fc_array[kmax] = F.val; for(k=kmax-1; k>=0; k--) { double el = eta/lam; double rl = hypot(1.0, el); double sl = el + lam*x_inv; double fc_lm1; fc_lm1 = (fcl*sl + fpl)/rl; fc_array[k] = fc_lm1; fpl = fc_lm1*sl - fcl*rl; fcl = fc_lm1; lam -= 1.0; } gcl = G.val; gpl = Gp.val; lam = lam_min + 1.0; gc_array[0] = G.val; for(k=1; k<=kmax; k++) { double el = eta/lam; double rl = hypot(1.0, el); double sl = el + lam*x_inv; double gcl1 = (sl*gcl - gpl)/rl; gc_array[k] = gcl1; gpl = rl*gcl - sl*gcl1; gcl = gcl1; lam += 1.0; } return stat_FG; } int gsl_sf_coulomb_wave_FGp_array(double lam_min, int kmax, double eta, double x, double * fc_array, double * fcp_array, double * gc_array, double * gcp_array, double * F_exp, double * G_exp) { const double x_inv = 1.0/x; const double lam_max = lam_min + kmax; gsl_sf_result F, Fp; gsl_sf_result G, Gp; int stat_FG = gsl_sf_coulomb_wave_FG_e(eta, x, lam_max, kmax, &F, &Fp, &G, &Gp, F_exp, G_exp); double fcl = F.val; double fpl = Fp.val; double lam = lam_max; int k; double gcl, gpl; fc_array[kmax] = F.val; fcp_array[kmax] = Fp.val; for(k=kmax-1; k>=0; k--) { double el = eta/lam; double rl = hypot(1.0, el); double sl = el + lam*x_inv; double fc_lm1; fc_lm1 = (fcl*sl + fpl)/rl; fc_array[k] = fc_lm1; fpl = fc_lm1*sl - fcl*rl; fcp_array[k] = fpl; fcl = fc_lm1; lam -= 1.0; } gcl = G.val; gpl = Gp.val; lam = lam_min + 1.0; gc_array[0] = G.val; gcp_array[0] = Gp.val; for(k=1; k<=kmax; k++) { double el = eta/lam; double rl = hypot(1.0, el); double sl = el + lam*x_inv; double gcl1 = (sl*gcl - gpl)/rl; gc_array[k] = gcl1; gpl = rl*gcl - sl*gcl1; gcp_array[k] = gpl; gcl = gcl1; lam += 1.0; } return stat_FG; } int gsl_sf_coulomb_wave_sphF_array(double lam_min, int kmax, double eta, double x, double * fc_array, double * F_exp) { if(x < 0.0 || lam_min < -0.5) { GSL_ERROR ("domain error", GSL_EDOM); } else if(x < 10.0/GSL_DBL_MAX) { int k; for(k=0; k<=kmax; k++) { fc_array[k] = 0.0; } if(lam_min == 0.0) { fc_array[0] = sqrt(C0sq(eta)); } *F_exp = 0.0; if(x == 0.0) return GSL_SUCCESS; else GSL_ERROR ("underflow", GSL_EUNDRFLW); } else { int k; int stat_F = gsl_sf_coulomb_wave_F_array(lam_min, kmax, eta, x, fc_array, F_exp); for(k=0; k<=kmax; k++) { fc_array[k] = fc_array[k] / x; } return stat_F; } } gsl/specfunc/bessel_temme.c0000644000175000017500000001425113536674414014353 0ustar eddedd/* specfunc/bessel_temme.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ /* Calculate series for Y_nu and K_nu for small x and nu. * This is applicable for x < 2 and |nu|<=1/2. * These functions assume x > 0. */ #include #include #include #include #include "bessel_temme.h" #include "chebyshev.h" #include "cheb_eval.c" /* nu = (x+1)/4, -1val = -sum0; Ynu->err = (2.0 + 0.5*k) * GSL_DBL_EPSILON * fabs(Ynu->val); Ynup1->val = -sum1 * 2.0/x; Ynup1->err = (2.0 + 0.5*k) * GSL_DBL_EPSILON * fabs(Ynup1->val); stat_iter = ( k >= max_iter ? GSL_EMAXITER : GSL_SUCCESS ); return GSL_ERROR_SELECT_2(stat_iter, stat_g); } int gsl_sf_bessel_K_scaled_temme(const double nu, const double x, double * K_nu, double * K_nup1, double * Kp_nu) { const int max_iter = 15000; const double half_x = 0.5 * x; const double ln_half_x = log(half_x); const double half_x_nu = exp(nu*ln_half_x); const double pi_nu = M_PI * nu; const double sigma = -nu * ln_half_x; const double sinrat = (fabs(pi_nu) < GSL_DBL_EPSILON ? 1.0 : pi_nu/sin(pi_nu)); const double sinhrat = (fabs(sigma) < GSL_DBL_EPSILON ? 1.0 : sinh(sigma)/sigma); const double ex = exp(x); double sum0, sum1; double fk, pk, qk, hk, ck; int k = 0; int stat_iter; double g_1pnu, g_1mnu, g1, g2; int stat_g = gsl_sf_temme_gamma(nu, &g_1pnu, &g_1mnu, &g1, &g2); fk = sinrat * (cosh(sigma)*g1 - sinhrat*ln_half_x*g2); pk = 0.5/half_x_nu * g_1pnu; qk = 0.5*half_x_nu * g_1mnu; hk = pk; ck = 1.0; sum0 = fk; sum1 = hk; while(k < max_iter) { double del0; double del1; k++; fk = (k*fk + pk + qk)/(k*k-nu*nu); ck *= half_x*half_x/k; pk /= (k - nu); qk /= (k + nu); hk = -k*fk + pk; del0 = ck * fk; del1 = ck * hk; sum0 += del0; sum1 += del1; if(fabs(del0) < 0.5*fabs(sum0)*GSL_DBL_EPSILON) break; } *K_nu = sum0 * ex; *K_nup1 = sum1 * 2.0/x * ex; *Kp_nu = - *K_nup1 + nu/x * *K_nu; stat_iter = ( k == max_iter ? GSL_EMAXITER : GSL_SUCCESS ); return GSL_ERROR_SELECT_2(stat_iter, stat_g); } gsl/specfunc/gsl_specfunc.h0000644000175000017500000000025513536674414014366 0ustar eddedd/* Author: G. Jungman */ /* Convenience header */ #ifndef __GSL_SPECFUNC_H__ #define __GSL_SPECFUNC_H__ #include #endif /* __GSL_SPECFUNC_H__ */ gsl/specfunc/legendre_P.c0000664000175000017500000000540214057135461013744 0ustar eddedd/* specfunc/legendre_P.c * * Copyright (C) 2009-2013 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* * The routines in this module compute associated Legendre functions * (ALFs) up to order and degree 2700, using the method described * in * * [1] S. A. Holmes and W. E. Featherstone, A unified approach * to the Clenshaw summation and the recursive computation of very * high degree and order normalised associated Legendre functions, * Journal of Geodesy, 76, pg. 279-299, 2002. * * Further information on ALFs can be found in * * [2] Abramowitz and Stegun, Handbook of Mathematical Functions, * Chapter 8, 1972. */ static void legendre_sqrts(const size_t lmax, double *array); #define LEGENDRE #include "legendre_source.c" #undef LEGENDRE #define LEGENDRE_DERIV #include "legendre_source.c" #undef LEGENDRE_DERIV #define LEGENDRE_DERIV_ALT #include "legendre_source.c" #undef LEGENDRE_DERIV_ALT #define LEGENDRE_DERIV2 #include "legendre_source.c" #undef LEGENDRE_DERIV2 #define LEGENDRE_DERIV2_ALT #include "legendre_source.c" #undef LEGENDRE_DERIV2_ALT /* number of P_{lm} functions for a given lmax */ size_t gsl_sf_legendre_nlm(const size_t lmax) { return ((lmax + 1) * (lmax + 2) / 2); } /* gsl_sf_legendre_array_n() This routine returns the minimum result_array[] size needed for a given lmax */ size_t gsl_sf_legendre_array_n(const size_t lmax) { size_t nlm = gsl_sf_legendre_nlm(lmax); size_t nsqrt = 2 * lmax + 2; /* extra room to precompute sqrt factors */ return (nlm + nsqrt); } /********************************************************* * INTERNAL ROUTINES * *********************************************************/ /* legendre_sqrts() Precompute square root factors needed for Legendre recurrence. On output, array[i] = sqrt(i) */ static void legendre_sqrts(const size_t lmax, double *array) { size_t l; for (l = 0; l <= 2 * lmax + 1; ++l) array[l] = sqrt((double) l); } gsl/specfunc/debye.c0000644000175000017500000003340013536674414012774 0ustar eddedd/* specfunc/debye.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ /* augmented to n=5 and 6 2005-11-08 by R. J. Mathar, http://www.strw.leidenuniv.nl/~mathar */ #include #include #include #include #include "error.h" #include "check.h" #include "chebyshev.h" #include "cheb_eval.c" static double adeb1_data[17] = { 2.4006597190381410194, 0.1937213042189360089, -0.62329124554895770e-02, 0.3511174770206480e-03, -0.228222466701231e-04, 0.15805467875030e-05, -0.1135378197072e-06, 0.83583361188e-08, -0.6264424787e-09, 0.476033489e-10, -0.36574154e-11, 0.2835431e-12, -0.221473e-13, 0.17409e-14, -0.1376e-15, 0.109e-16, -0.9e-18 }; static cheb_series adeb1_cs = { adeb1_data, 16, -1.0, 1.0, 9 }; static double adeb2_data[18] = { 2.5943810232570770282, 0.2863357204530719834, -0.102062656158046713e-01, 0.6049109775346844e-03, -0.405257658950210e-04, 0.28633826328811e-05, -0.2086394303065e-06, 0.155237875826e-07, -0.11731280087e-08, 0.897358589e-10, -0.69317614e-11, 0.5398057e-12, -0.423241e-13, 0.33378e-14, -0.2645e-15, 0.211e-16, -0.17e-17, 0.1e-18 }; static cheb_series adeb2_cs = { adeb2_data, 17, -1.0, 1.0, 10 }; static double adeb3_data[17] = { 2.707737068327440945, 0.340068135211091751, -0.12945150184440869e-01, 0.7963755380173816e-03, -0.546360009590824e-04, 0.39243019598805e-05, -0.2894032823539e-06, 0.217317613962e-07, -0.16542099950e-08, 0.1272796189e-09, -0.987963460e-11, 0.7725074e-12, -0.607797e-13, 0.48076e-14, -0.3820e-15, 0.305e-16, -0.24e-17 }; static cheb_series adeb3_cs = { adeb3_data, 16, -1.0, 1.0, 10 }; static double adeb4_data[17] = { 2.781869415020523460, 0.374976783526892863, -0.14940907399031583e-01, 0.945679811437042e-03, -0.66132916138933e-04, 0.4815632982144e-05, -0.3588083958759e-06, 0.271601187416e-07, -0.20807099122e-08, 0.1609383869e-09, -0.125470979e-10, 0.9847265e-12, -0.777237e-13, 0.61648e-14, -0.4911e-15, 0.393e-16, -0.32e-17 }; static cheb_series adeb4_cs = { adeb4_data, 16, -1.0, 1.0, 10 }; static double adeb5_data[17] = { 2.8340269546834530149, 0.3994098857106266445, -0.164566764773099646e-1, 0.10652138340664541e-2, -0.756730374875418e-4, 0.55745985240273e-5, -0.4190692330918e-6, 0.319456143678e-7, -0.24613318171e-8, 0.1912801633e-9, -0.149720049e-10, 0.11790312e-11, -0.933329e-13, 0.74218e-14, -0.5925e-15, 0.475e-16, -0.39e-17 }; static cheb_series adeb5_cs = { adeb5_data, 16, -1.0, 1.0, 10 }; static double adeb6_data[17] = { 2.8726727134130122113, 0.4174375352339027746, -0.176453849354067873e-1, 0.11629852733494556e-2, -0.837118027357117e-4, 0.62283611596189e-5, -0.4718644465636e-6, 0.361950397806e-7, -0.28030368010e-8, 0.2187681983e-9, -0.171857387e-10, 0.13575809e-11, -0.1077580e-12, 0.85893e-14, -0.6872e-15, 0.552e-16, -0.44e-17 }; static cheb_series adeb6_cs = { adeb6_data, 16, -1.0, 1.0, 10 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_debye_1_e(const double x, gsl_sf_result * result) { const double val_infinity = 1.64493406684822644; const double xcut = -GSL_LOG_DBL_MIN; /* CHECK_POINTER(result) */ if(x < 0.0) { DOMAIN_ERROR(result); } else if(x < 2.0*GSL_SQRT_DBL_EPSILON) { result->val = 1.0 - 0.25*x + x*x/36.0; result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x <= 4.0) { const double t = x*x/8.0 - 1.0; gsl_sf_result c; cheb_eval_e(&adeb1_cs, t, &c); result->val = c.val - 0.25 * x; result->err = c.err + 0.25 * x * GSL_DBL_EPSILON; return GSL_SUCCESS; } else if(x < -(M_LN2 + GSL_LOG_DBL_EPSILON)) { const int nexp = floor(xcut/x); const double ex = exp(-x); double sum = 0.0; double xk = nexp * x; double rk = nexp; int i; for(i=nexp; i>=1; i--) { sum *= ex; sum += (1.0 + 1.0/xk)/rk; rk -= 1.0; xk -= x; } result->val = val_infinity/x - sum*ex; result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < xcut) { result->val = (val_infinity - exp(-x)*(x+1.0)) / x; result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { result->val = val_infinity/x; result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_debye_2_e(const double x, gsl_sf_result * result) { const double val_infinity = 4.80822761263837714; const double xcut = -GSL_LOG_DBL_MIN; /* CHECK_POINTER(result) */ if(x < 0.0) { DOMAIN_ERROR(result); } else if(x < 2.0*M_SQRT2*GSL_SQRT_DBL_EPSILON) { result->val = 1.0 - x/3.0 + x*x/24.0; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else if(x <= 4.0) { const double t = x*x/8.0 - 1.0; gsl_sf_result c; cheb_eval_e(&adeb2_cs, t, &c); result->val = c.val - x/3.0; result->err = c.err + GSL_DBL_EPSILON * x/3.0; return GSL_SUCCESS; } else if(x < -(M_LN2 + GSL_LOG_DBL_EPSILON)) { const int nexp = floor(xcut/x); const double ex = exp(-x); double xk = nexp * x; double rk = nexp; double sum = 0.0; int i; for(i=nexp; i>=1; i--) { sum *= ex; sum += (1.0 + 2.0/xk + 2.0/(xk*xk)) / rk; rk -= 1.0; xk -= x; } result->val = val_infinity/(x*x) - 2.0 * sum * ex; result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < xcut) { const double x2 = x*x; const double sum = 2.0 + 2.0*x + x2; result->val = (val_infinity - 2.0 * sum * exp(-x)) / x2; result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { result->val = (val_infinity/x)/x; result->err = GSL_DBL_EPSILON * result->val; CHECK_UNDERFLOW(result); return GSL_SUCCESS; } } int gsl_sf_debye_3_e(const double x, gsl_sf_result * result) { const double val_infinity = 19.4818182068004875; const double xcut = -GSL_LOG_DBL_MIN; /* CHECK_POINTER(result) */ if(x < 0.0) { DOMAIN_ERROR(result); } else if(x < 2.0*M_SQRT2*GSL_SQRT_DBL_EPSILON) { result->val = 1.0 - 3.0*x/8.0 + x*x/20.0; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else if(x <= 4.0) { const double t = x*x/8.0 - 1.0; gsl_sf_result c; cheb_eval_e(&adeb3_cs, t, &c); result->val = c.val - 0.375*x; result->err = c.err + GSL_DBL_EPSILON * 0.375*x; return GSL_SUCCESS; } else if(x < -(M_LN2 + GSL_LOG_DBL_EPSILON)) { const int nexp = floor(xcut/x); const double ex = exp(-x); double xk = nexp * x; double rk = nexp; double sum = 0.0; int i; for(i=nexp; i>=1; i--) { double xk_inv = 1.0/xk; sum *= ex; sum += (((6.0*xk_inv + 6.0)*xk_inv + 3.0)*xk_inv + 1.0) / rk; rk -= 1.0; xk -= x; } result->val = val_infinity/(x*x*x) - 3.0 * sum * ex; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else if(x < xcut) { const double x3 = x*x*x; const double sum = 6.0 + 6.0*x + 3.0*x*x + x3; result->val = (val_infinity - 3.0 * sum * exp(-x)) / x3; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else { result->val = ((val_infinity/x)/x)/x; result->err = GSL_DBL_EPSILON * result->val; CHECK_UNDERFLOW(result); return GSL_SUCCESS; } } int gsl_sf_debye_4_e(const double x, gsl_sf_result * result) { const double val_infinity = 99.5450644937635129; const double xcut = -GSL_LOG_DBL_MIN; /* CHECK_POINTER(result) */ if(x < 0.0) { DOMAIN_ERROR(result); } else if(x < 2.0*M_SQRT2*GSL_SQRT_DBL_EPSILON) { result->val = 1.0 - 2.0*x/5.0 + x*x/18.0; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else if(x <= 4.0) { const double t = x*x/8.0 - 1.0; gsl_sf_result c; cheb_eval_e(&adeb4_cs, t, &c); result->val = c.val - 2.0*x/5.0; result->err = c.err + GSL_DBL_EPSILON * 2.0*x/5.0; return GSL_SUCCESS; } else if(x < -(M_LN2 + GSL_LOG_DBL_EPSILON)) { const int nexp = floor(xcut/x); const double ex = exp(-x); double xk = nexp * x; double rk = nexp; double sum = 0.0; int i; for(i=nexp; i>=1; i--) { double xk_inv = 1.0/xk; sum *= ex; sum += ((((24.0*xk_inv + 24.0)*xk_inv + 12.0)*xk_inv + 4.0)*xk_inv + 1.0) / rk; rk -= 1.0; xk -= x; } result->val = val_infinity/(x*x*x*x) - 4.0 * sum * ex; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else if(x < xcut) { const double x2 = x*x; const double x4 = x2*x2; const double sum = 24.0 + 24.0*x + 12.0*x2 + 4.0*x2*x + x4; result->val = (val_infinity - 4.0 * sum * exp(-x)) / x4; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else { result->val = (((val_infinity/x)/x)/x)/x; result->err = GSL_DBL_EPSILON * result->val; CHECK_UNDERFLOW(result); return GSL_SUCCESS; } } int gsl_sf_debye_5_e(const double x, gsl_sf_result * result) { const double val_infinity = 610.405837190669483828710757875 ; const double xcut = -GSL_LOG_DBL_MIN; /* CHECK_POINTER(result) */ if(x < 0.0) { DOMAIN_ERROR(result); } else if(x < 2.0*M_SQRT2*GSL_SQRT_DBL_EPSILON) { result->val = 1.0 - 5.0*x/12.0 + 5.0*x*x/84.0; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else if(x <= 4.0) { const double t = x*x/8.0 - 1.0; gsl_sf_result c; cheb_eval_e(&adeb5_cs, t, &c); result->val = c.val - 5.0*x/12.0; result->err = c.err + GSL_DBL_EPSILON * 5.0*x/12.0; return GSL_SUCCESS; } else if(x < -(M_LN2 + GSL_LOG_DBL_EPSILON)) { const int nexp = floor(xcut/x); const double ex = exp(-x); double xk = nexp * x; double rk = nexp; double sum = 0.0; int i; for(i=nexp; i>=1; i--) { double xk_inv = 1.0/xk; sum *= ex; sum += (((((120.0*xk_inv + 120.0)*xk_inv + 60.0)*xk_inv + 20.0)*xk_inv + 5.0)*xk_inv+ 1.0) / rk; rk -= 1.0; xk -= x; } result->val = val_infinity/(x*x*x*x*x) - 5.0 * sum * ex; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else if(x < xcut) { const double x2 = x*x; const double x4 = x2*x2; const double x5 = x4*x; const double sum = 120.0 + 120.0*x + 60.0*x2 + 20.0*x2*x + 5.0*x4 + x5; result->val = (val_infinity - 5.0 * sum * exp(-x)) / x5; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else { result->val = ((((val_infinity/x)/x)/x)/x)/x; result->err = GSL_DBL_EPSILON * result->val; CHECK_UNDERFLOW(result); return GSL_SUCCESS; } } int gsl_sf_debye_6_e(const double x, gsl_sf_result * result) { const double val_infinity = 4356.06887828990661194792541535 ; const double xcut = -GSL_LOG_DBL_MIN; /* CHECK_POINTER(result) */ if(x < 0.0) { DOMAIN_ERROR(result); } else if(x < 2.0*M_SQRT2*GSL_SQRT_DBL_EPSILON) { result->val = 1.0 - 3.0*x/7.0 + x*x/16.0; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else if(x <= 4.0) { const double t = x*x/8.0 - 1.0; gsl_sf_result c; cheb_eval_e(&adeb6_cs, t, &c); result->val = c.val - 3.0*x/7.0; result->err = c.err + GSL_DBL_EPSILON * 3.0*x/7.0; return GSL_SUCCESS; } else if(x < -(M_LN2 + GSL_LOG_DBL_EPSILON)) { const int nexp = floor(xcut/x); const double ex = exp(-x); double xk = nexp * x; double rk = nexp; double sum = 0.0; int i; for(i=nexp; i>=1; i--) { double xk_inv = 1.0/xk; sum *= ex; sum += ((((((720.0*xk_inv + 720.0)*xk_inv + 360.0)*xk_inv + 120.0)*xk_inv + 30.0)*xk_inv+ 6.0)*xk_inv+ 1.0) / rk; rk -= 1.0; xk -= x; } result->val = val_infinity/(x*x*x*x*x*x) - 6.0 * sum * ex; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else if(x < xcut) { const double x2 = x*x; const double x4 = x2*x2; const double x6 = x4*x2; const double sum = 720.0 + 720.0*x + 360.0*x2 + 120.0*x2*x + 30.0*x4 + 6.0*x4*x +x6 ; result->val = (val_infinity - 6.0 * sum * exp(-x)) / x6; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else { result->val = (((((val_infinity/x)/x)/x)/x)/x)/x ; result->err = GSL_DBL_EPSILON * result->val; CHECK_UNDERFLOW(result); return GSL_SUCCESS; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_debye_1(const double x) { EVAL_RESULT(gsl_sf_debye_1_e(x, &result)); } double gsl_sf_debye_2(const double x) { EVAL_RESULT(gsl_sf_debye_2_e(x, &result)); } double gsl_sf_debye_3(const double x) { EVAL_RESULT(gsl_sf_debye_3_e(x, &result)); } double gsl_sf_debye_4(const double x) { EVAL_RESULT(gsl_sf_debye_4_e(x, &result)); } double gsl_sf_debye_5(const double x) { EVAL_RESULT(gsl_sf_debye_5_e(x, &result)); } double gsl_sf_debye_6(const double x) { EVAL_RESULT(gsl_sf_debye_6_e(x, &result)); } gsl/specfunc/gsl_sf.h0000644000175000017500000000212213536674414013163 0ustar eddedd/* Author: G. Jungman */ #ifndef __GSL_SF_H__ #define __GSL_SF_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif /* __GSL_SF_H__ */ gsl/specfunc/test_sincos_pi.c0000644000175000017500000002277513536674414014746 0ustar eddedd/* specfunc/test_sincos_pi.c * * Copyright (C) 2017 Konrad Griessinger * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: Konrad Griessinger */ #include #include #include #include #include #include #include #include #include #include "test_sf.h" /* Any double precision number bigger than this is automatically an even integer. */ #define BIGDBL (2.0 / GSL_DBL_EPSILON) int test_sincos_pi(void) { gsl_sf_result r; int s = 0; int k = 0, kmax = 12; double x = 0.0, ix = 0.0, fx = 0.0, exact = 0.0; /* sin_pi tests */ fx = 0.5; exact = 1.0; TEST_SF(s, gsl_sf_sin_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = -0.5; exact = -1.0; TEST_SF(s, gsl_sf_sin_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = 1.5; exact = -1.0; TEST_SF(s, gsl_sf_sin_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = -1.5; exact = 1.0; TEST_SF(s, gsl_sf_sin_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = 2.5; exact = 1.0; TEST_SF(s, gsl_sf_sin_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = -2.5; exact = -1.0; TEST_SF(s, gsl_sf_sin_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = 3.5; exact = -1.0; TEST_SF(s, gsl_sf_sin_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = -3.5; exact = 1.0; TEST_SF(s, gsl_sf_sin_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = 0.375; exact = 0.923879532511286756128183189397; TEST_SF(s, gsl_sf_sin_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = -0.375; exact = -0.923879532511286756128183189397; TEST_SF(s, gsl_sf_sin_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = 0.0; exact = 0.0; ix = 0.0; for (k=0; k= BIGDBL ) ) break; printf("ix+fx= %.18e\n", ix+fx); TEST_SF(s, gsl_sf_sin_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); ix += 101.0; exact = -exact; } fx = -0.0625; exact = -0.195090322016128267848284868477; ix = LONG_MIN - 1.0; ix -= fabs(fmod(ix,2.0)); /* make sure of even number */ for (k=0; k= BIGDBL ) ) break; printf("ix+fx= %.18e\n", ix+fx); TEST_SF(s, gsl_sf_sin_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); ix -= 101.0; exact = -exact; } /* cos_pi tests */ ix = 0.0; fx = 0.0; exact = 1.0; TEST_SF(s, gsl_sf_cos_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = 1.0; exact = -1.0; TEST_SF(s, gsl_sf_cos_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = -1.0; exact = -1.0; TEST_SF(s, gsl_sf_cos_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = 2.0; exact = 1.0; TEST_SF(s, gsl_sf_cos_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = -2.0; exact = 1.0; TEST_SF(s, gsl_sf_cos_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = 3.0; exact = -1.0; TEST_SF(s, gsl_sf_cos_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = -3.0; exact = -1.0; TEST_SF(s, gsl_sf_cos_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = 0.375; exact = 0.382683432365089771728459984030; TEST_SF(s, gsl_sf_cos_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = -0.375; exact = 0.382683432365089771728459984030; TEST_SF(s, gsl_sf_cos_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); fx = 0.0; exact = 1.0; ix = 0.0; for (k=0; k= BIGDBL ) ) break; TEST_SF(s, gsl_sf_cos_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); ix += 101.0; exact = -exact; } fx = -0.0625; exact = 0.980785280403230449126182236134; ix = LONG_MIN - 1.0; ix -= fabs(fmod(ix,2.0)); /* make sure of even number */ for (k=0; k= BIGDBL ) ) break; TEST_SF(s, gsl_sf_cos_pi_e, (ix+fx, &r), exact, TEST_TOL0, GSL_SUCCESS); ix -= 101.0; exact = -exact; } return s; } gsl/specfunc/mathieu_workspace.c0000644000175000017500000001336113536674414015422 0ustar eddedd/* specfunc/mathieu_workspace.c * * Copyright (C) 2003 Lowell Johnson * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Author: L. Johnson */ #include #include #include #include #include gsl_sf_mathieu_workspace *gsl_sf_mathieu_alloc(const size_t nn, const double qq) { gsl_sf_mathieu_workspace *workspace; unsigned int even_order = nn/2 + 1, odd_order = (nn + 1)/2, extra_values; /* Compute the maximum number of extra terms required for 10^-18 root accuracy for a given value of q (contributed by Brian Gladman). */ extra_values = (int)(2.1*pow(fabs(qq), 0.37)) + 9; extra_values += 20; /* additional fudge */ if (nn + 1 == 0) { GSL_ERROR_NULL("matrix dimension must be positive integer", GSL_EINVAL); } workspace = (gsl_sf_mathieu_workspace *)malloc(sizeof(gsl_sf_mathieu_workspace)); if (workspace == NULL) { GSL_ERROR_NULL("failed to allocate space for workspace", GSL_ENOMEM); } /* Extend matrices to ensure accuracy. */ even_order += extra_values; odd_order += extra_values; workspace->size = nn; workspace->even_order = even_order; workspace->odd_order = odd_order; workspace->extra_values = extra_values; /* Allocate space for the characteristic values. */ workspace->aa = (double *)malloc((nn+1)*sizeof(double)); if (workspace->aa == NULL) { free(workspace); GSL_ERROR_NULL("Error allocating memory for characteristic a values", GSL_ENOMEM); } workspace->bb = (double *)malloc((nn+1)*sizeof(double)); if (workspace->bb == NULL) { free(workspace->aa); free(workspace); GSL_ERROR_NULL("Error allocating memory for characteristic b values", GSL_ENOMEM); } /* Since even_order is always >= odd_order, dimension the arrays for even_order. */ workspace->dd = (double *)malloc(even_order*sizeof(double)); if (workspace->dd == NULL) { free(workspace->aa); free(workspace->bb); free(workspace); GSL_ERROR_NULL("failed to allocate space for diagonal", GSL_ENOMEM); } workspace->ee = (double *)malloc(even_order*sizeof(double)); if (workspace->ee == NULL) { free(workspace->dd); free(workspace->aa); free(workspace->bb); free(workspace); GSL_ERROR_NULL("failed to allocate space for diagonal", GSL_ENOMEM); } workspace->tt = (double *)malloc(3*even_order*sizeof(double)); if (workspace->tt == NULL) { free(workspace->ee); free(workspace->dd); free(workspace->aa); free(workspace->bb); free(workspace); GSL_ERROR_NULL("failed to allocate space for diagonal", GSL_ENOMEM); } workspace->e2 = (double *)malloc(even_order*sizeof(double)); if (workspace->e2 == NULL) { free(workspace->tt); free(workspace->ee); free(workspace->dd); free(workspace->aa); free(workspace->bb); free(workspace); GSL_ERROR_NULL("failed to allocate space for diagonal", GSL_ENOMEM); } workspace->zz = (double *)malloc(even_order*even_order*sizeof(double)); if (workspace->zz == NULL) { free(workspace->e2); free(workspace->tt); free(workspace->ee); free(workspace->dd); free(workspace->aa); free(workspace->bb); free(workspace); GSL_ERROR_NULL("failed to allocate space for diagonal", GSL_ENOMEM); } workspace->eval = gsl_vector_alloc(even_order); if (workspace->eval == NULL) { free(workspace->zz); free(workspace->e2); free(workspace->tt); free(workspace->ee); free(workspace->dd); free(workspace->aa); free(workspace->bb); free(workspace); GSL_ERROR_NULL("failed to allocate space for eval", GSL_ENOMEM); } workspace->evec = gsl_matrix_alloc(even_order, even_order); if (workspace->evec == NULL) { gsl_vector_free (workspace->eval); free(workspace->zz); free(workspace->e2); free(workspace->tt); free(workspace->ee); free(workspace->dd); free(workspace->aa); free(workspace->bb); free(workspace); GSL_ERROR_NULL("failed to allocate space for evec", GSL_ENOMEM); } workspace->wmat = gsl_eigen_symmv_alloc(even_order); if (workspace->wmat == NULL) { gsl_matrix_free (workspace->evec); gsl_vector_free (workspace->eval); free(workspace->zz); free(workspace->e2); free(workspace->tt); free(workspace->ee); free(workspace->dd); free(workspace->aa); free(workspace->bb); free(workspace); GSL_ERROR_NULL("failed to allocate space for wmat", GSL_ENOMEM); } return workspace; } void gsl_sf_mathieu_free(gsl_sf_mathieu_workspace *workspace) { RETURN_IF_NULL (workspace); gsl_vector_free(workspace->eval); gsl_matrix_free(workspace->evec); gsl_eigen_symmv_free(workspace->wmat); free(workspace->aa); free(workspace->bb); free(workspace->dd); free(workspace->ee); free(workspace->tt); free(workspace->e2); free(workspace->zz); free(workspace); } gsl/specfunc/dilog.c0000644000175000017500000004320413536674414013005 0ustar eddedd/* specfunc/dilog.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include /* Evaluate series for real dilog(x) * Sum[ x^k / k^2, {k,1,Infinity}] * * Converges rapidly for |x| < 1/2. */ static int dilog_series_1(const double x, gsl_sf_result * result) { const int kmax = 1000; double sum = x; double term = x; int k; for(k=2; kval = sum; result->err = 2.0 * fabs(term); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); if(k == kmax) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } /* Compute the associated series * * sum_{k=1}{infty} r^k / (k^2 (k+1)) * * This is a series which appears in the one-step accelerated * method, which splits out one elementary function from the * full definition of Li_2(x). See below. */ static int series_2(double r, gsl_sf_result * result) { static const int kmax = 100; double rk = r; double sum = 0.5 * r; int k; for(k=2; k<10; k++) { double ds; rk *= r; ds = rk/(k*k*(k+1.0)); sum += ds; } for(; kval = sum; result->err = 2.0 * kmax * GSL_DBL_EPSILON * fabs(sum); return GSL_SUCCESS; } /* Compute Li_2(x) using the accelerated series representation. * * Li_2(x) = 1 + (1-x)ln(1-x)/x + series_2(x) * * assumes: -1 < x < 1 */ static int dilog_series_2(double x, gsl_sf_result * result) { const int stat_s3 = series_2(x, result); double t; if(x > 0.01) t = (1.0 - x) * log(1.0-x) / x; else { static const double c3 = 1.0/3.0; static const double c4 = 1.0/4.0; static const double c5 = 1.0/5.0; static const double c6 = 1.0/6.0; static const double c7 = 1.0/7.0; static const double c8 = 1.0/8.0; const double t68 = c6 + x*(c7 + x*c8); const double t38 = c3 + x *(c4 + x *(c5 + x * t68)); t = (x - 1.0) * (1.0 + x*(0.5 + x*t38)); } result->val += 1.0 + t; result->err += 2.0 * GSL_DBL_EPSILON * fabs(t); return stat_s3; } /* Calculates Li_2(x) for real x. Assumes x >= 0.0. */ static int dilog_xge0(const double x, gsl_sf_result * result) { if(x > 2.0) { gsl_sf_result ser; const int stat_ser = dilog_series_2(1.0/x, &ser); const double log_x = log(x); const double t1 = M_PI*M_PI/3.0; const double t2 = ser.val; const double t3 = 0.5*log_x*log_x; result->val = t1 - t2 - t3; result->err = GSL_DBL_EPSILON * fabs(log_x) + ser.err; result->err += GSL_DBL_EPSILON * (fabs(t1) + fabs(t2) + fabs(t3)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_ser; } else if(x > 1.01) { gsl_sf_result ser; const int stat_ser = dilog_series_2(1.0 - 1.0/x, &ser); const double log_x = log(x); const double log_term = log_x * (log(1.0-1.0/x) + 0.5*log_x); const double t1 = M_PI*M_PI/6.0; const double t2 = ser.val; const double t3 = log_term; result->val = t1 + t2 - t3; result->err = GSL_DBL_EPSILON * fabs(log_x) + ser.err; result->err += GSL_DBL_EPSILON * (fabs(t1) + fabs(t2) + fabs(t3)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_ser; } else if(x > 1.0) { /* series around x = 1.0 */ const double eps = x - 1.0; const double lne = log(eps); const double c0 = M_PI*M_PI/6.0; const double c1 = 1.0 - lne; const double c2 = -(1.0 - 2.0*lne)/4.0; const double c3 = (1.0 - 3.0*lne)/9.0; const double c4 = -(1.0 - 4.0*lne)/16.0; const double c5 = (1.0 - 5.0*lne)/25.0; const double c6 = -(1.0 - 6.0*lne)/36.0; const double c7 = (1.0 - 7.0*lne)/49.0; const double c8 = -(1.0 - 8.0*lne)/64.0; result->val = c0+eps*(c1+eps*(c2+eps*(c3+eps*(c4+eps*(c5+eps*(c6+eps*(c7+eps*c8))))))); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x == 1.0) { result->val = M_PI*M_PI/6.0; result->err = 2.0 * GSL_DBL_EPSILON * M_PI*M_PI/6.0; return GSL_SUCCESS; } else if(x > 0.5) { gsl_sf_result ser; const int stat_ser = dilog_series_2(1.0-x, &ser); const double log_x = log(x); const double t1 = M_PI*M_PI/6.0; const double t2 = ser.val; const double t3 = log_x*log(1.0-x); result->val = t1 - t2 - t3; result->err = GSL_DBL_EPSILON * fabs(log_x) + ser.err; result->err += GSL_DBL_EPSILON * (fabs(t1) + fabs(t2) + fabs(t3)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_ser; } else if(x > 0.25) { return dilog_series_2(x, result); } else if(x > 0.0) { return dilog_series_1(x, result); } else { /* x == 0.0 */ result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } } /* Evaluate the series representation for Li2(z): * * Li2(z) = Sum[ |z|^k / k^2 Exp[i k arg(z)], {k,1,Infinity}] * |z| = r * arg(z) = theta * * Assumes 0 < r < 1. * It is used only for small r. */ static int dilogc_series_1( const double r, const double x, const double y, gsl_sf_result * real_result, gsl_sf_result * imag_result ) { const double cos_theta = x/r; const double sin_theta = y/r; const double alpha = 1.0 - cos_theta; const double beta = sin_theta; double ck = cos_theta; double sk = sin_theta; double rk = r; double real_sum = r*ck; double imag_sum = r*sk; const int kmax = 50 + (int)(22.0/(-log(r))); /* tuned for double-precision */ int k; for(k=2; kval = real_sum; real_result->err = 2.0 * kmax * GSL_DBL_EPSILON * fabs(real_sum); imag_result->val = imag_sum; imag_result->err = 2.0 * kmax * GSL_DBL_EPSILON * fabs(imag_sum); return GSL_SUCCESS; } /* Compute * * sum_{k=1}{infty} z^k / (k^2 (k+1)) * * This is a series which appears in the one-step accelerated * method, which splits out one elementary function from the * full definition of Li_2. */ static int series_2_c( double r, double x, double y, gsl_sf_result * sum_re, gsl_sf_result * sum_im ) { const double cos_theta = x/r; const double sin_theta = y/r; const double alpha = 1.0 - cos_theta; const double beta = sin_theta; double ck = cos_theta; double sk = sin_theta; double rk = r; double real_sum = 0.5 * r*ck; double imag_sum = 0.5 * r*sk; const int kmax = 30 + (int)(18.0/(-log(r))); /* tuned for double-precision */ int k; for(k=2; kval = real_sum; sum_re->err = 2.0 * kmax * GSL_DBL_EPSILON * fabs(real_sum); sum_im->val = imag_sum; sum_im->err = 2.0 * kmax * GSL_DBL_EPSILON * fabs(imag_sum); return GSL_SUCCESS; } /* Compute Li_2(z) using the one-step accelerated series. * * Li_2(z) = 1 + (1-z)ln(1-z)/z + series_2_c(z) * * z = r exp(i theta) * assumes: r < 1 * assumes: r > epsilon, so that we take no special care with log(1-z) */ static int dilogc_series_2( const double r, const double x, const double y, gsl_sf_result * real_dl, gsl_sf_result * imag_dl ) { if(r == 0.0) { real_dl->val = 0.0; imag_dl->val = 0.0; real_dl->err = 0.0; imag_dl->err = 0.0; return GSL_SUCCESS; } else { gsl_sf_result sum_re; gsl_sf_result sum_im; const int stat_s3 = series_2_c(r, x, y, &sum_re, &sum_im); /* t = ln(1-z)/z */ gsl_sf_result ln_omz_r; gsl_sf_result ln_omz_theta; const int stat_log = gsl_sf_complex_log_e(1.0-x, -y, &ln_omz_r, &ln_omz_theta); const double t_x = ( ln_omz_r.val * x + ln_omz_theta.val * y)/(r*r); const double t_y = (-ln_omz_r.val * y + ln_omz_theta.val * x)/(r*r); /* r = (1-z) ln(1-z)/z */ const double r_x = (1.0 - x) * t_x + y * t_y; const double r_y = (1.0 - x) * t_y - y * t_x; real_dl->val = sum_re.val + r_x + 1.0; imag_dl->val = sum_im.val + r_y; real_dl->err = sum_re.err + 2.0*GSL_DBL_EPSILON*(fabs(real_dl->val) + fabs(r_x)); imag_dl->err = sum_im.err + 2.0*GSL_DBL_EPSILON*(fabs(imag_dl->val) + fabs(r_y)); return GSL_ERROR_SELECT_2(stat_s3, stat_log); } } /* Evaluate a series for Li_2(z) when |z| is near 1. * This is uniformly good away from z=1. * * Li_2(z) = Sum[ a^n/n! H_n(theta), {n, 0, Infinity}] * * where * H_n(theta) = Sum[ e^(i m theta) m^n / m^2, {m, 1, Infinity}] * a = ln(r) * * H_0(t) = Gl_2(t) + i Cl_2(t) * H_1(t) = 1/2 ln(2(1-c)) + I atan2(-s, 1-c) * H_2(t) = -1/2 + I/2 s/(1-c) * H_3(t) = -1/2 /(1-c) * H_4(t) = -I/2 s/(1-c)^2 * H_5(t) = 1/2 (2 + c)/(1-c)^2 * H_6(t) = I/2 s/(1-c)^5 (8(1-c) - s^2 (3 + c)) */ static int dilogc_series_3( const double r, const double x, const double y, gsl_sf_result * real_result, gsl_sf_result * imag_result ) { const double theta = atan2(y, x); const double cos_theta = x/r; const double sin_theta = y/r; const double a = log(r); const double omc = 1.0 - cos_theta; const double omc2 = omc*omc; double H_re[7]; double H_im[7]; double an, nfact; double sum_re, sum_im; gsl_sf_result Him0; int n; H_re[0] = M_PI*M_PI/6.0 + 0.25*(theta*theta - 2.0*M_PI*fabs(theta)); gsl_sf_clausen_e(theta, &Him0); H_im[0] = Him0.val; H_re[1] = -0.5*log(2.0*omc); H_im[1] = -atan2(-sin_theta, omc); H_re[2] = -0.5; H_im[2] = 0.5 * sin_theta/omc; H_re[3] = -0.5/omc; H_im[3] = 0.0; H_re[4] = 0.0; H_im[4] = -0.5*sin_theta/omc2; H_re[5] = 0.5 * (2.0 + cos_theta)/omc2; H_im[5] = 0.0; H_re[6] = 0.0; H_im[6] = 0.5 * sin_theta/(omc2*omc2*omc) * (8.0*omc - sin_theta*sin_theta*(3.0 + cos_theta)); sum_re = H_re[0]; sum_im = H_im[0]; an = 1.0; nfact = 1.0; for(n=1; n<=6; n++) { double t; an *= a; nfact *= n; t = an/nfact; sum_re += t * H_re[n]; sum_im += t * H_im[n]; } real_result->val = sum_re; real_result->err = 2.0 * 6.0 * GSL_DBL_EPSILON * fabs(sum_re) + fabs(an/nfact); imag_result->val = sum_im; imag_result->err = 2.0 * 6.0 * GSL_DBL_EPSILON * fabs(sum_im) + Him0.err + fabs(an/nfact); return GSL_SUCCESS; } /* Calculate complex dilogarithm Li_2(z) in the fundamental region, * which we take to be the intersection of the unit disk with the * half-space x < MAGIC_SPLIT_VALUE. It turns out that 0.732 is a * nice choice for MAGIC_SPLIT_VALUE since then points mapped out * of the x > MAGIC_SPLIT_VALUE region and into another part of the * unit disk are bounded in radius by MAGIC_SPLIT_VALUE itself. * * If |z| < 0.98 we use a direct series summation. Otherwise z is very * near the unit circle, and the series_2 expansion is used; see above. * Because the fundamental region is bounded away from z = 1, this * works well. */ static int dilogc_fundamental(double r, double x, double y, gsl_sf_result * real_dl, gsl_sf_result * imag_dl) { if(r > 0.98) return dilogc_series_3(r, x, y, real_dl, imag_dl); else if(r > 0.25) return dilogc_series_2(r, x, y, real_dl, imag_dl); else return dilogc_series_1(r, x, y, real_dl, imag_dl); } /* Compute Li_2(z) for z in the unit disk, |z| < 1. If z is outside * the fundamental region, which means that it is too close to z = 1, * then it is reflected into the fundamental region using the identity * * Li2(z) = -Li2(1-z) + zeta(2) - ln(z) ln(1-z). */ static int dilogc_unitdisk(double x, double y, gsl_sf_result * real_dl, gsl_sf_result * imag_dl) { static const double MAGIC_SPLIT_VALUE = 0.732; static const double zeta2 = M_PI*M_PI/6.0; const double r = hypot(x, y); if(x > MAGIC_SPLIT_VALUE) { /* Reflect away from z = 1 if we are too close. The magic value * insures that the reflected value of the radius satisfies the * related inequality r_tmp < MAGIC_SPLIT_VALUE. */ const double x_tmp = 1.0 - x; const double y_tmp = - y; const double r_tmp = hypot(x_tmp, y_tmp); /* const double cos_theta_tmp = x_tmp/r_tmp; */ /* const double sin_theta_tmp = y_tmp/r_tmp; */ gsl_sf_result result_re_tmp; gsl_sf_result result_im_tmp; const int stat_dilog = dilogc_fundamental(r_tmp, x_tmp, y_tmp, &result_re_tmp, &result_im_tmp); const double lnz = log(r); /* log(|z|) */ const double lnomz = log(r_tmp); /* log(|1-z|) */ const double argz = atan2(y, x); /* arg(z) assuming principal branch */ const double argomz = atan2(y_tmp, x_tmp); /* arg(1-z) */ real_dl->val = -result_re_tmp.val + zeta2 - lnz*lnomz + argz*argomz; real_dl->err = result_re_tmp.err; real_dl->err += 2.0 * GSL_DBL_EPSILON * (zeta2 + fabs(lnz*lnomz) + fabs(argz*argomz)); imag_dl->val = -result_im_tmp.val - argz*lnomz - argomz*lnz; imag_dl->err = result_im_tmp.err; imag_dl->err += 2.0 * GSL_DBL_EPSILON * (fabs(argz*lnomz) + fabs(argomz*lnz)); return stat_dilog; } else { return dilogc_fundamental(r, x, y, real_dl, imag_dl); } } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_dilog_e(const double x, gsl_sf_result * result) { if(x >= 0.0) { return dilog_xge0(x, result); } else { gsl_sf_result d1, d2; int stat_d1 = dilog_xge0( -x, &d1); int stat_d2 = dilog_xge0(x*x, &d2); result->val = -d1.val + 0.5 * d2.val; result->err = d1.err + 0.5 * d2.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_d1, stat_d2); } } int gsl_sf_complex_dilog_xy_e( const double x, const double y, gsl_sf_result * real_dl, gsl_sf_result * imag_dl ) { const double zeta2 = M_PI*M_PI/6.0; const double r2 = x*x + y*y; if(y == 0.0) { if(x >= 1.0) { imag_dl->val = -M_PI * log(x); imag_dl->err = 2.0 * GSL_DBL_EPSILON * fabs(imag_dl->val); } else { imag_dl->val = 0.0; imag_dl->err = 0.0; } return gsl_sf_dilog_e(x, real_dl); } else if(fabs(r2 - 1.0) < GSL_DBL_EPSILON) { /* Lewin A.2.4.1 and A.2.4.2 */ const double theta = atan2(y, x); const double term1 = theta*theta/4.0; const double term2 = M_PI*fabs(theta)/2.0; real_dl->val = zeta2 + term1 - term2; real_dl->err = 2.0 * GSL_DBL_EPSILON * (zeta2 + term1 + term2); return gsl_sf_clausen_e(theta, imag_dl); } else if(r2 < 1.0) { return dilogc_unitdisk(x, y, real_dl, imag_dl); } else { /* Reduce argument to unit disk. */ const double r = sqrt(r2); const double x_tmp = x/r2; const double y_tmp = -y/r2; /* const double r_tmp = 1.0/r; */ gsl_sf_result result_re_tmp, result_im_tmp; const int stat_dilog = dilogc_unitdisk(x_tmp, y_tmp, &result_re_tmp, &result_im_tmp); /* Unwind the inversion. * * Li_2(z) + Li_2(1/z) = -zeta(2) - 1/2 ln(-z)^2 */ const double theta = atan2(y, x); const double theta_abs = fabs(theta); const double theta_sgn = ( theta < 0.0 ? -1.0 : 1.0 ); const double ln_minusz_re = log(r); const double ln_minusz_im = theta_sgn * (theta_abs - M_PI); const double lmz2_re = ln_minusz_re*ln_minusz_re - ln_minusz_im*ln_minusz_im; const double lmz2_im = 2.0*ln_minusz_re*ln_minusz_im; real_dl->val = -result_re_tmp.val - 0.5 * lmz2_re - zeta2; real_dl->err = result_re_tmp.err + 2.0*GSL_DBL_EPSILON*(0.5 * fabs(lmz2_re) + zeta2); imag_dl->val = -result_im_tmp.val - 0.5 * lmz2_im; imag_dl->err = result_im_tmp.err + 2.0*GSL_DBL_EPSILON*fabs(lmz2_im); return stat_dilog; } } int gsl_sf_complex_dilog_e( const double r, const double theta, gsl_sf_result * real_dl, gsl_sf_result * imag_dl ) { const double cos_theta = cos(theta); const double sin_theta = sin(theta); const double x = r * cos_theta; const double y = r * sin_theta; return gsl_sf_complex_dilog_xy_e(x, y, real_dl, imag_dl); } int gsl_sf_complex_spence_xy_e( const double x, const double y, gsl_sf_result * real_sp, gsl_sf_result * imag_sp ) { const double oms_x = 1.0 - x; const double oms_y = - y; return gsl_sf_complex_dilog_xy_e(oms_x, oms_y, real_sp, imag_sp); } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_dilog(const double x) { EVAL_RESULT(gsl_sf_dilog_e(x, &result)); } gsl/specfunc/gsl_sf_erf.h0000644000175000017500000000436713536674414014034 0ustar eddedd/* specfunc/gsl_sf_erf.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_ERF_H__ #define __GSL_SF_ERF_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Complementary Error Function * erfc(x) := 2/Sqrt[Pi] Integrate[Exp[-t^2], {t,x,Infinity}] * * exceptions: none */ int gsl_sf_erfc_e(double x, gsl_sf_result * result); double gsl_sf_erfc(double x); /* Log Complementary Error Function * * exceptions: none */ int gsl_sf_log_erfc_e(double x, gsl_sf_result * result); double gsl_sf_log_erfc(double x); /* Error Function * erf(x) := 2/Sqrt[Pi] Integrate[Exp[-t^2], {t,0,x}] * * exceptions: none */ int gsl_sf_erf_e(double x, gsl_sf_result * result); double gsl_sf_erf(double x); /* Probability functions: * Z(x) : Abramowitz+Stegun 26.2.1 * Q(x) : Abramowitz+Stegun 26.2.3 * * exceptions: none */ int gsl_sf_erf_Z_e(double x, gsl_sf_result * result); int gsl_sf_erf_Q_e(double x, gsl_sf_result * result); double gsl_sf_erf_Z(double x); double gsl_sf_erf_Q(double x); /* Hazard function, also known as the inverse Mill's ratio. * * H(x) := Z(x)/Q(x) * = Sqrt[2/Pi] Exp[-x^2 / 2] / Erfc[x/Sqrt[2]] * * exceptions: GSL_EUNDRFLW */ int gsl_sf_hazard_e(double x, gsl_sf_result * result); double gsl_sf_hazard(double x); __END_DECLS #endif /* __GSL_SF_ERF_H__ */ gsl/specfunc/gsl_sf_zeta.h0000644000175000017500000000551613536674414014220 0ustar eddedd/* specfunc/gsl_sf_zeta.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_ZETA_H__ #define __GSL_SF_ZETA_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Riemann Zeta Function * zeta(n) = Sum[ k^(-n), {k,1,Infinity} ] * * n=integer, n != 1 * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_zeta_int_e(const int n, gsl_sf_result * result); double gsl_sf_zeta_int(const int n); /* Riemann Zeta Function * zeta(x) = Sum[ k^(-s), {k,1,Infinity} ], s != 1.0 * * s != 1.0 * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_zeta_e(const double s, gsl_sf_result * result); double gsl_sf_zeta(const double s); /* Riemann Zeta Function minus 1 * useful for evaluating the fractional part * of Riemann zeta for large argument * * s != 1.0 * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_zetam1_e(const double s, gsl_sf_result * result); double gsl_sf_zetam1(const double s); /* Riemann Zeta Function minus 1 for integer arg * useful for evaluating the fractional part * of Riemann zeta for large argument * * s != 1.0 * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_zetam1_int_e(const int s, gsl_sf_result * result); double gsl_sf_zetam1_int(const int s); /* Hurwitz Zeta Function * zeta(s,q) = Sum[ (k+q)^(-s), {k,0,Infinity} ] * * s > 1.0, q > 0.0 * exceptions: GSL_EDOM, GSL_EUNDRFLW, GSL_EOVRFLW */ int gsl_sf_hzeta_e(const double s, const double q, gsl_sf_result * result); double gsl_sf_hzeta(const double s, const double q); /* Eta Function * eta(n) = (1-2^(1-n)) zeta(n) * * exceptions: GSL_EUNDRFLW, GSL_EOVRFLW */ int gsl_sf_eta_int_e(int n, gsl_sf_result * result); double gsl_sf_eta_int(const int n); /* Eta Function * eta(s) = (1-2^(1-s)) zeta(s) * * exceptions: GSL_EUNDRFLW, GSL_EOVRFLW */ int gsl_sf_eta_e(const double s, gsl_sf_result * result); double gsl_sf_eta(const double s); __END_DECLS #endif /* __GSL_SF_ZETA_H__ */ gsl/specfunc/gsl_sf_coulomb.h0000644000175000017500000001046213536674414014711 0ustar eddedd/* specfunc/gsl_sf_coulomb.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_COULOMB_H__ #define __GSL_SF_COULOMB_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Normalized hydrogenic bound states, radial dependence. */ /* R_1 := 2Z sqrt(Z) exp(-Z r) */ int gsl_sf_hydrogenicR_1_e(const double Z, const double r, gsl_sf_result * result); double gsl_sf_hydrogenicR_1(const double Z, const double r); /* R_n := norm exp(-Z r/n) (2Z/n)^l Laguerre[n-l-1, 2l+1, 2Z/n r] * * normalization such that psi(n,l,r) = R_n Y_{lm} */ int gsl_sf_hydrogenicR_e(const int n, const int l, const double Z, const double r, gsl_sf_result * result); double gsl_sf_hydrogenicR(const int n, const int l, const double Z, const double r); /* Coulomb wave functions F_{lam_F}(eta,x), G_{lam_G}(eta,x) * and their derivatives; lam_G := lam_F - k_lam_G * * lam_F, lam_G > -0.5 * x > 0.0 * * Conventions of Abramowitz+Stegun. * * Because there can be a large dynamic range of values, * overflows are handled gracefully. If an overflow occurs, * GSL_EOVRFLW is signalled and exponent(s) are returned * through exp_F, exp_G. These are such that * * F_L(eta,x) = fc[k_L] * exp(exp_F) * G_L(eta,x) = gc[k_L] * exp(exp_G) * F_L'(eta,x) = fcp[k_L] * exp(exp_F) * G_L'(eta,x) = gcp[k_L] * exp(exp_G) */ int gsl_sf_coulomb_wave_FG_e(const double eta, const double x, const double lam_F, const int k_lam_G, gsl_sf_result * F, gsl_sf_result * Fp, gsl_sf_result * G, gsl_sf_result * Gp, double * exp_F, double * exp_G); /* F_L(eta,x) as array */ int gsl_sf_coulomb_wave_F_array( double lam_min, int kmax, double eta, double x, double * fc_array, double * F_exponent ); /* F_L(eta,x), G_L(eta,x) as arrays */ int gsl_sf_coulomb_wave_FG_array(double lam_min, int kmax, double eta, double x, double * fc_array, double * gc_array, double * F_exponent, double * G_exponent ); /* F_L(eta,x), G_L(eta,x), F'_L(eta,x), G'_L(eta,x) as arrays */ int gsl_sf_coulomb_wave_FGp_array(double lam_min, int kmax, double eta, double x, double * fc_array, double * fcp_array, double * gc_array, double * gcp_array, double * F_exponent, double * G_exponent ); /* Coulomb wave function divided by the argument, * F(eta, x)/x. This is the function which reduces to * spherical Bessel functions in the limit eta->0. */ int gsl_sf_coulomb_wave_sphF_array(double lam_min, int kmax, double eta, double x, double * fc_array, double * F_exponent ); /* Coulomb wave function normalization constant. * [Abramowitz+Stegun 14.1.8, 14.1.9] */ int gsl_sf_coulomb_CL_e(double L, double eta, gsl_sf_result * result); int gsl_sf_coulomb_CL_array(double Lmin, int kmax, double eta, double * cl); __END_DECLS #endif /* __GSL_SF_COULOMB_H__ */ gsl/specfunc/chebyshev.h0000644000175000017500000000227213536674414013674 0ustar eddedd/* specfunc/chebyshev.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* data for a Chebyshev series over a given interval */ struct cheb_series_struct { double * c; /* coefficients */ int order; /* order of expansion */ double a; /* lower interval point */ double b; /* upper interval point */ int order_sp; /* effective single precision order */ }; typedef struct cheb_series_struct cheb_series; gsl/specfunc/test_hermite.c0000644000175000017500000005615113536675317014413 0ustar eddedd/* specfunc/test_hermite.c * * Copyright (C) 2011, 2012, 2013, 2014 Konrad Griessinger * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include "test_sf.h" #define WKB_TOL (1.0e+04 * TEST_SQRT_TOL0) /* * Test the identities: * * Sum_{k=0}^n (n choose k) (2 y)^{n - k} H_k(x) = H_n(x + y) * * and * * Sum_{k=0}^n (n choose k) y^{n-k} He_k(x) = He_n(x + y) * * see: http://mathworld.wolfram.com/HermitePolynomial.html (Eq. 55) */ void test_hermite_id1(const int n, const double x, const double y) { double *a = malloc((n + 1) * sizeof(double)); double *b = malloc((n + 1) * sizeof(double)); double lhs, rhs; int k; a[0] = gsl_pow_int(2.0 * y, n); b[0] = gsl_pow_int(y, n); for (k = 1; k <= n; ++k) { double fac = (n - k + 1.0) / (k * y); a[k] = 0.5 * fac * a[k - 1]; b[k] = fac * b[k - 1]; } lhs = gsl_sf_hermite_series(n, x, a); rhs = gsl_sf_hermite(n, x + y); gsl_test_rel(lhs, rhs, TEST_TOL4, "identity1 phys n=%d x=%g y=%g", n, x, y); lhs = gsl_sf_hermite_prob_series(n, x, b); rhs = gsl_sf_hermite_prob(n, x + y); gsl_test_rel(lhs, rhs, TEST_TOL3, "identity1 prob n=%d x=%g y=%g", n, x, y); free(a); free(b); } int test_hermite(void) { gsl_sf_result r; int s = 0; int m, n, sa; double res[256]; double x; const double aizero1 = -2.3381074104597670384891972524467; /* first zero of the Airy function Ai */ /* test some known identities */ test_hermite_id1(10, 0.75, 0.33); test_hermite_id1(8, -0.75, 1.20); test_hermite_id1(7, 2.88, -3.2); TEST_SF(s, gsl_sf_hermite_prob_e, (0, 0.75, &r), 1., TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_prob_e, (1, 0.75, &r), 0.75, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_prob_e, (25, 0., &r), 0., TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_prob_e, (28, 0., &r), 2.13458046676875e14, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_prob_e, (30, 0., &r), -6.190283353629375e15, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_prob_e, (25, 0.75, &r), -1.08128685847680748265939328423e12, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_prob_e, (28, 0.75, &r), -1.60620252094658918105511125135e14, TEST_TOL0, GSL_SUCCESS); TEST_SF_RETURN(s, gsl_sf_hermite_prob_e, (2800, 0.75, &r), GSL_EOVRFLW); TEST_SF_RETURN(s, gsl_sf_hermite_prob_e, (2800, 1.75, &r), GSL_EOVRFLW); TEST_SF(s, gsl_sf_hermite_prob_deriv_e, (225, 128, 0.75, &r), 0., TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_prob_deriv_e, (5, 128, 0.75, &r), -3.0288278964712702882066404e112, TEST_TOL1, GSL_SUCCESS); x = 0.75; sa = 0; gsl_sf_hermite_prob_array(0, x, res); TEST_SF_VAL(sa, res[0], +0.0, 1.0, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_prob_array(0, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_prob_array(1, x, res); TEST_SF_VAL(sa, res[0], +0.0, 1.0, TEST_TOL0); TEST_SF_VAL(sa, res[1], +0.0, x, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_prob_array(1, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_prob_array(100, x, res); TEST_SF_VAL(sa, res[0], +0.0, 1.0, TEST_TOL0); TEST_SF_VAL(sa, res[1], +0.0, x, TEST_TOL0); TEST_SF_VAL(sa, res[10], +0.0, 823.810509681701660156250, TEST_TOL0); TEST_SF_VAL(sa, res[100], +0.0, 1.03749254986255755872498e78, TEST_TOL1); gsl_test(sa, "gsl_sf_hermite_prob_array(100, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_prob_array_deriv(0, 100, 0.75, res); TEST_SF_VAL(sa, res[0], +0.0, 1.0, TEST_TOL0); TEST_SF_VAL(sa, res[10], +0.0, 823.810509681701660156250, TEST_TOL0); TEST_SF_VAL(sa, res[100], +0.0, 1.03749254986255755872498e78, TEST_TOL1); gsl_test(sa, "gsl_sf_hermite_prob_array_deriv(0, 100, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_prob_array_deriv(1000, 100, 0.75, res); TEST_SF_VAL(sa, res[0], +0.0, 0.0, TEST_TOL0); TEST_SF_VAL(sa, res[10], +0.0, 0.0, TEST_TOL0); TEST_SF_VAL(sa, res[100], +0.0, 0.0, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_prob_array_deriv(1000, 100, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_prob_array_deriv(99, 100, 0.75, res); TEST_SF_VAL(sa, res[0], +0.0, 0.0, TEST_TOL0); TEST_SF_VAL(sa, res[10], +0.0, 0.0, TEST_TOL0); TEST_SF_VAL(sa, res[99], +0.0, 9.332621544394415268169923886e155, TEST_TOL0); TEST_SF_VAL(sa, res[100], +0.0, 6.999466158295811451127442914e157, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_prob_array_deriv(99, 100, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_prob_array_deriv(100, 100, 0.75, res); TEST_SF_VAL(sa, res[0], +0.0, 0.0, TEST_TOL0); TEST_SF_VAL(sa, res[10], +0.0, 0.0, TEST_TOL0); TEST_SF_VAL(sa, res[100], +0.0, 9.332621544394415268169923886e157, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_prob_array_deriv(100, 100, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_prob_array_deriv(23, 100, 0.75, res); TEST_SF_VAL(sa, res[10], +0.0, 0.0, TEST_TOL0); TEST_SF_VAL(sa, res[23], +0.0, 2.5852016738884976640000000000e22, TEST_TOL0); TEST_SF_VAL(sa, res[24], +0.0, 4.6533630129992957952000000000e23, TEST_TOL0); TEST_SF_VAL(sa, res[37], +0.0, 2.3592417210568968566591219172e37, TEST_TOL0); TEST_SF_VAL(sa, res[60], +0.0, -9.2573208827175536243052086845e59, TEST_TOL0); TEST_SF_VAL(sa, res[61], +0.0, 5.6259625429686219137261735305e59, TEST_TOL1); TEST_SF_VAL(sa, res[100], +0.0, 2.6503570965896336273549197e100, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_prob_array_deriv(23, 37, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_prob_deriv_array(100, 50, x, res); TEST_SF_VAL(sa, res[0], +0.0, -3.88338863813139372375411561e31, TEST_TOL0); TEST_SF_VAL(sa, res[1], +0.0, -4.04757862431646677625108652e32, TEST_TOL1); TEST_SF_VAL(sa, res[10], +0.0, 7.9614368698398116765703194e38, TEST_TOL0); TEST_SF_VAL(sa, res[30], +0.0, -9.1416928183915197188795338e54, TEST_TOL0); TEST_SF_VAL(sa, res[100], +0.0, 0.0, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_prob_deriv_array(100, 50, 0.75)"); s += sa; n = 128; res[0] = 1.; for(m=1; m<=n; m++){ res[m] = res[m-1]/2.; } TEST_SF(s, gsl_sf_hermite_prob_series_e, (n, x, res, &r), -4.0451066556993485405907339548e68, TEST_TOL0, GSL_SUCCESS); /* phys */ x = 0.75; TEST_SF(s, gsl_sf_hermite_e, (0, 0.75, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_e, (1, 0.75, &r), 1.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_e, (25, 0., &r), 0., TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_e, (28, 0., &r), 3.497296636753920000e18, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_e, (30, 0., &r), -2.028432049317273600e20, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_e, (25, 0.75, &r), -9.7029819451106077507781088352e15, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_e, (28, 0.75, &r), 3.7538457078067672096408339776e18, TEST_TOL0, GSL_SUCCESS); TEST_SF_RETURN(s, gsl_sf_hermite_e, (2800, 0.75, &r), GSL_EOVRFLW); TEST_SF_RETURN(s, gsl_sf_hermite_e, (2800, 10.1, &r), GSL_EOVRFLW); TEST_SF(s, gsl_sf_hermite_deriv_e, (225, 128, 0.75, &r), 0., TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_deriv_e, (5, 128, 0.75, &r), 2.89461215568095657569833e132, TEST_TOL0, GSL_SUCCESS); x = 0.75; sa = 0; gsl_sf_hermite_array(0, x, res); TEST_SF_VAL(sa, res[0], +0.0, 1.0, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_array(0, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_array(1, x, res); TEST_SF_VAL(sa, res[0], +0.0, 1.0, TEST_TOL0); TEST_SF_VAL(sa, res[1], +0.0, 2.*x, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_array(1, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_array(100, x, res); TEST_SF_VAL(sa, res[0], +0.0, 1.0, TEST_TOL0); TEST_SF_VAL(sa, res[1], +0.0, 2.0*x, TEST_TOL0); TEST_SF_VAL(sa, res[10], +0.0, 38740.4384765625, TEST_TOL0); TEST_SF_VAL(sa, res[100], +0.0, -1.4611185395125104593177790757e93, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_array(100, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_array_deriv(0, 100, 0.75, res); TEST_SF_VAL(sa, res[0], +0.0, 1.0, TEST_TOL0); TEST_SF_VAL(sa, res[10], +0.0, 38740.4384765625, TEST_TOL0); TEST_SF_VAL(sa, res[100], +0.0, -1.4611185395125104593177790757e93, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_array_deriv(0, 100, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_array_deriv(1000, 100, 0.75, res); TEST_SF_VAL(sa, res[0], +0.0, 0.0, TEST_TOL0); TEST_SF_VAL(sa, res[10], +0.0, 0.0, TEST_TOL0); TEST_SF_VAL(sa, res[100], +0.0, 0.0, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_array_deriv(1000, 100, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_array_deriv(99, 100, 0.75, res); TEST_SF_VAL(sa, res[0], +0.0, 0.0, TEST_TOL0); TEST_SF_VAL(sa, res[10], +0.0, 0.0, TEST_TOL0); TEST_SF_VAL(sa, res[99], +0.0, 5.915251651227242890408570128e185, TEST_TOL0); TEST_SF_VAL(sa, res[100], +0.0, 8.872877476840864335612855192e187, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_array_deriv(99, 100, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_array_deriv(100, 100, 0.75, res); TEST_SF_VAL(sa, res[0], +0.0, 0.0, TEST_TOL0); TEST_SF_VAL(sa, res[10], +0.0, 0.0, TEST_TOL0); TEST_SF_VAL(sa, res[100], +0.0, 1.183050330245448578081714026e188, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_array_deriv(100, 100, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_array_deriv(23, 100, 0.75, res); TEST_SF_VAL(sa, res[10], +0.0, 0.0, TEST_TOL0); TEST_SF_VAL(sa, res[23], +0.0, 2.168624344319444261221171200e29, TEST_TOL0); TEST_SF_VAL(sa, res[24], +0.0, 7.807047639549999340396216320e30, TEST_TOL0); TEST_SF_VAL(sa, res[37], +0.0, 1.930387357696033719818118732e46, TEST_TOL0); TEST_SF_VAL(sa, res[60], +0.0, 6.775378005383186748501182409e71, TEST_TOL0); TEST_SF_VAL(sa, res[61], +0.0, -4.451215867508936256056845902e73, TEST_TOL0); TEST_SF_VAL(sa, res[100], +0.0, 2.957966000491202678467161e118, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_array_deriv(23, 100, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_deriv_array(100, 50, x, res); TEST_SF_VAL(sa, res[0], +0.0, -8.26632218305863100726861832e38, TEST_TOL0); TEST_SF_VAL(sa, res[1], +0.0, 2.40954750392844799126151557e40, TEST_TOL0); TEST_SF_VAL(sa, res[10], +0.0, 1.52281030265187793605875604e49, TEST_TOL0); TEST_SF_VAL(sa, res[30], +0.0, 9.52199419132990437892101915e65, TEST_TOL0); TEST_SF_VAL(sa, res[100], +0.0, 0.0, TEST_TOL0); gsl_test(sa, "gsl_sf_hermite_deriv_array(100, 50, 0.75)"); s += sa; n = 128; /* arbitrary weights */ res[0] = 1.; for(m=1; m<=n; m++){ res[m] = res[m-1]/2.; } TEST_SF(s, gsl_sf_hermite_series_e, (n, x, res, &r), 1.07772223811696567390619566842e88, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_e, (0, 1.3, &r), 0.322651504564963746879400858624, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_fast_e, (0, 1.3, &r), 0.322651504564963746879400858624, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_e, (1, 1.3, &r), 0.593187573778613235895531272243, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_fast_e, (1, 1.3, &r), 0.593187573778613235895531272243, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_e, (1, -1.3, &r), -0.593187573778613235895531272243, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_fast_e, (1, -1.3, &r), -0.593187573778613235895531272243, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_e, (27, 0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_fast_e, (27, 0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_e, (28, 0, &r), 0.290371943657199641200016132937, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_fast_e, (28, 0, &r), 0.290371943657199641200016132937, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_e, (28, 0.75, &r), 0.23526280808621240649319140441, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_fast_e, (28, 0.75, &r), 0.23526280808621240649319140441, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_e, (200, 0.75, &r), -0.13725356483699291817038427801, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_fast_e, (200, 0.75, &r), -0.13725356483699291817038427801, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_e, (100028, 0.75, &r), -0.02903467369856961147236598086, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_fast_e, (100028, 0.75, &r), -0.02903467369856961147236598086, TEST_TOL5, GSL_SUCCESS); n = 10025; x = ((sqrt(2*n+1.)+aizero1/pow(8.*n,1/6.))/2.5); TEST_SF(s, gsl_sf_hermite_func_e, (n, x, &r), -0.05301278920004176459797680403, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_fast_e, (n, x, &r), -0.05301278920004176459797680403, TEST_TOL4, GSL_SUCCESS); n = 10028; x = ((sqrt(2*n+1.)+aizero1/pow(8.*n,1/6.))/2.5); TEST_SF(s, gsl_sf_hermite_func_e, (n, x, &r), 0.06992968509693993526829596970, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_fast_e, (n, x, &r), 0.06992968509693993526829596970, TEST_TOL3, GSL_SUCCESS); n = 10025; x = (sqrt(2*n+1.)-(aizero1/pow(8.*n,1/6.))/2.5); TEST_SF(s, gsl_sf_hermite_func_e, (n, x, &r), 0.08049000991742150521366671021, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_fast_e, (n, x, &r), 0.08049000991742150521366671021, TEST_TOL4, GSL_SUCCESS); n = 10028; x = (sqrt(2*n+1.)-(aizero1/pow(8.*n,1/6.))/2.5); TEST_SF(s, gsl_sf_hermite_func_e, (n, x, &r), 0.08048800667512084252723933250, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_fast_e, (n, x, &r), 0.08048800667512084252723933250, TEST_TOL4, GSL_SUCCESS); n = 10025; x = (sqrt(2*n+1.)-2.5*(aizero1/pow(8.*n,1/6.))); TEST_SF(s, gsl_sf_hermite_func_e, (n, x, &r), 7.97206830806663013555068100e-6, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_fast_e, (n, x, &r), 7.97206830806663013555068100e-6, 1.0e-9, GSL_SUCCESS); n = 10028; x = (sqrt(2*n+1.)-2.5*(aizero1/pow(8.*n,1/6.))); TEST_SF(s, gsl_sf_hermite_func_e, (n, x, &r), 7.97188517397786729928465829e-6, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_fast_e, (n, x, &r), 7.97188517397786729928465829e-6, 1.0e-8, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_e, (10000, 60.0, &r), 0.03162606955427450540143292572, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_fast_e, (10000, 60.0, &r), 0.03162606955427450540143292572, TEST_TOL4, GSL_SUCCESS); x = 0.75; sa = 0; gsl_sf_hermite_func_array(100, x, res); TEST_SF_VAL(sa, res[0], +0.0, 0.566979307027693616978839335983, TEST_TOL0); TEST_SF_VAL(sa, res[1], +0.0, 0.601372369187597546203014795470, TEST_TOL0); TEST_SF_VAL(sa, res[10], +0.0, 0.360329854170806945032958735574, TEST_TOL0); TEST_SF_VAL(sa, res[100], +0.0, -0.07616422890563462489003733382, TEST_TOL1); gsl_test(sa, "gsl_sf_hermite_func_array(100, 0.75)"); s += sa; sa = 0; gsl_sf_hermite_func_array(250, 20.0, res); TEST_SF_VAL(sa, res[199], +0.0, 0.254621970261340422399150964119, TEST_TOL2); TEST_SF_VAL(sa, res[200], +0.0, 0.288364948026205642290411878357, TEST_TOL2); TEST_SF_VAL(sa, res[210], +0.0, 0.266625427572822255774117774166, TEST_TOL2); TEST_SF_VAL(sa, res[220], +0.0, -0.296028413764592652216845612832, TEST_TOL2); TEST_SF_VAL(sa, res[230], +0.0, 0.229657495510699141971182819560, TEST_TOL2); TEST_SF_VAL(sa, res[240], +0.0, -0.024027870622288819185159269632, TEST_TOL2); TEST_SF_VAL(sa, res[250], +0.0, -0.236101289420398152417654177998, TEST_TOL2); gsl_test(sa, "gsl_sf_hermite_func_array(250, 20.0)"); s += sa; n = 128; /* arbitrary weights */ res[0] = 1.; for(m=1; m<=n; m++){ res[m] = res[m-1]/2.; } TEST_SF(s, gsl_sf_hermite_func_series_e, (n, x, res, &r), 0.81717103529960997134154552556, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_der_e, (0, 28, 0.75, &r), 0.235262808086212406493191404, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_der_e, (1, 28, 0.75, &r), 1.289485094958329643927802330, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_der_e, (2, 28, 0.75, &r), -13.27764473136561269145948989, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_der_e, (3, 28, 0.75, &r), -72.42242083458141066943555691, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_der_e, (4, 28, 0.75, &r), 753.6960554274941800190147503, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_der_e, (5, 28, 0.75, &r), 4035.32788513029308540826835, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_der_e, (0, 380, 0.75, &r), -0.0400554661321992411631174, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_der_e, (1, 380, 0.75, &r), -4.0417244263030600591206553, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_der_e, (2, 380, 0.75, &r), 30.4596785269042604519780923, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hermite_func_der_e, (3, 380, 0.75, &r), 3073.4187352276349348458186556, TEST_TOL2, GSL_SUCCESS); { /* positive zeros of the probabilists' Hermite polynomial of order 17 */ double He17z[8] = { 0.751842600703896170737870774614, 1.50988330779674075905491513417, 2.28101944025298889535537879396, 3.07379717532819355851658337833, 3.90006571719800990903311840097, 4.77853158962998382710540812497, 5.74446007865940618125547815768,6.88912243989533223256205432938 }; n = 17; for (m=1; m<=n/2; m++) { TEST_SF(s, gsl_sf_hermite_prob_zero_e, (n, m, &r), He17z[m-1], TEST_TOL0, GSL_SUCCESS); } } { /* positive zeros of the probabilists' Hermite polynomial of order 18 */ double He18z[9] = { 0.365245755507697595916901619097, 1.09839551809150122773848360538, 1.83977992150864548966395498992, 2.59583368891124032910545091458, 3.37473653577809099529779309480, 4.18802023162940370448450911428, 5.05407268544273984538327527397, 6.00774591135959752029303858752, 7.13946484914647887560975631213 }; n = 18; for (m=1; m<=n/2; m++) { TEST_SF(s, gsl_sf_hermite_prob_zero_e, (n, m, &r), He18z[m-1], TEST_TOL0, GSL_SUCCESS); } } { /* positive zeros of the probabilists' Hermite polynomial of order 23 */ double He23z[11] = { 0.648471153534495816722576841197, 1.29987646830397886997876116860, 1.95732755293342410739100839243, 2.62432363405918177067330340783, 3.30504002175296456723204112903, 4.00477532173330406712238633738, 4.73072419745147329426707133987, 5.49347398647179412855289367747, 6.31034985444839982842886078177, 7.21465943505186138595859194492, 8.29338602741735258945596770157 }; n = 23; for (m=1; m<=n/2; m++) { TEST_SF(s, gsl_sf_hermite_prob_zero_e, (n, m, &r), He23z[m-1], TEST_TOL0, GSL_SUCCESS); } } { /* positive zeros of the probabilists' Hermite polynomial of order 24 */ double He24z[12] = { 0.317370096629452319318170455994, 0.953421922932109084904629632351, 1.59348042981642010695074168129, 2.24046785169175236246653790858, 2.89772864322331368932008199475, 3.56930676407356024709649151613, 4.26038360501990548884317727406, 4.97804137463912033462166468006, 5.73274717525120114834341822330, 6.54167500509863444148277523364, 7.43789066602166310850331715501, 8.50780351919525720508386233432 }; n = 24; for (m=1; m<=n/2; m++) { TEST_SF(s, gsl_sf_hermite_prob_zero_e, (n, m, &r), He24z[m-1], TEST_TOL0, GSL_SUCCESS); } } { /* positive zeros of the physicists' Hermite polynomial of order 17 */ double H17z[8] = { 0.531633001342654731349086553718, 1.06764872574345055363045773799, 1.61292431422123133311288254454, 2.17350282666662081927537907149, 2.75776291570388873092640349574, 3.37893209114149408338327069289, 4.06194667587547430689245559698, 4.87134519367440308834927655662 }; n = 17; for (m=1; m<=n/2; m++) { TEST_SF(s, gsl_sf_hermite_zero_e, (n, m, &r), H17z[m-1], TEST_TOL0, GSL_SUCCESS); } } { /* positive zeros of the physicists' Hermite polynomial of order 18 */ double H18z[9] = { 0.258267750519096759258116098711, 0.776682919267411661316659462284, 1.30092085838961736566626555439, 1.83553160426162889225383944409, 2.38629908916668600026459301424, 2.96137750553160684477863254906, 3.57376906848626607950067599377, 4.24811787356812646302342016090, 5.04836400887446676837203757885 }; n = 18; for (m=1; m<=n/2; m++) { TEST_SF(s, gsl_sf_hermite_zero_e, (n, m, &r), H18z[m-1], TEST_TOL0, GSL_SUCCESS); } } { /* positive zeros of the physicists' Hermite polynomial of order 23 */ double H23z[11] = { 0.458538350068104797757887329284, 0.919151465442563765431719239593, 1.38403958568249523732634717118, 1.85567703767137106251504753718, 2.33701621147445578644623502174, 2.83180378712615690144806140734, 3.34512715994122457247439814585, 3.88447270810610186607248760288, 4.46209117374000667673186157071, 5.10153461047667712968749766165, 5.86430949898457256538748413474 }; n = 23; for (m=1; m<=n/2; m++) { TEST_SF(s, gsl_sf_hermite_zero_e, (n, m, &r), H23z[m-1], TEST_TOL0, GSL_SUCCESS); } } { /* positive zeros of the physicists' Hermite polynomial of order 24 */ double H24z[12] = { 0.224414547472515585151136715527, 0.674171107037212236000245923730, 1.12676081761124507213306126773, 1.58425001096169414850563336202, 2.04900357366169891178708399532, 2.52388101701142697419907602333, 3.01254613756556482565453858421, 3.52000681303452471128987227609, 4.05366440244814950394766297923, 4.62566275642378726504864923776, 5.25938292766804436743072304398, 6.01592556142573971734857350899 }; n = 24; for (m=1; m<=n/2; m++) { TEST_SF(s, gsl_sf_hermite_zero_e, (n, m, &r), H24z[m-1], TEST_TOL0, GSL_SUCCESS); } } n = 2121; x = -1.*n; res[0] = (double) n; sa = 0; for (m=1; m<=n/2; m++) { gsl_sf_hermite_prob_zero_e(n, m, &r); if (x>=r.val) { sa += TEST_SF_INCONS; printf("sanity check failed! (gsl_sf_hermite_prob_zero)\n"); } res[0] = GSL_MIN(res[0],fabs(x-r.val)); x = r.val; } gsl_test(sa, "gsl_sf_hermite_prob_zero(n, m, r)"); n = 2121; x = -1.*n; res[0] = (double) n; sa = 0; for (m=1; m<=n/2; m++) { gsl_sf_hermite_zero_e(n, m, &r); if (x>=r.val) { sa += TEST_SF_INCONS; printf("sanity check failed! (gsl_sf_hermite_zero)\n"); } res[0] = GSL_MIN(res[0],fabs(x-r.val)); x = r.val; } gsl_test(sa, "gsl_sf_hermite_zero(n, m, r)"); return s; } gsl/specfunc/legendre.h0000644000175000017500000000447713536674414013512 0ustar eddedd/* specfunc/legendre.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ /* Declare private but non-local support functions * used in various Legendre function evaluations. */ #include /* Large negative mu asymptotic * P^{-mu}_{-1/2 + I tau}, mu -> Inf * |x| < 1 */ int gsl_sf_conicalP_xlt1_large_neg_mu_e(double mu, double tau, double x, gsl_sf_result * result, double * ln_multiplier); /* Large tau uniform asymptotics * P^{-mu}_{-1/2 + I tau}, tau -> Inf * 1 < x */ int gsl_sf_conicalP_xgt1_neg_mu_largetau_e(const double mu, const double tau, const double x, double acosh_x, gsl_sf_result * result, double * ln_multiplier); /* Large tau uniform asymptotics * P^{-mu}_{-1/2 + I tau}, tau -> Inf * -1 < x < 1 */ int gsl_sf_conicalP_xlt1_neg_mu_largetau_e(const double mu, const double tau, const double x, const double acos_x, gsl_sf_result * result, double * ln_multiplier); /* P^{mu}_{-1/2 + I tau} * x->Inf * * * This is effective to precision EPS for * * (mu^2 + tau^2)/((1 + tau^2)^(1/2) x^2) < EPS^{1/3} * * since it goes only to a fixed order, based on the * representation in terms of hypegeometric functions * of argument 1/x^2. * [Zhurina+Karmazina, (3.8)] */ int gsl_sf_conicalP_large_x_e(const double mu, const double tau, const double x, gsl_sf_result * result, double * ln_multiplier); gsl/specfunc/TODO0000644000175000017500000003316013536675317012236 0ustar eddedd# -*- org -*- #+CATEGORY: specfunc * Complex hypergeometric function 1F1 * Could probably return immediately for exact zeros in 3j,6j,9j functions. Easiest to implement for 3j. Note from Serge Winitzki : The package "matpack" (www.matpack.de) includes many special functions, also the 3j symbols. They refer to some quite complicated numerical methods using recursion relations to get the right answers for large momenta, and to 1975-1976 papers by Schulten and Gordon for the description of the algorithms. The papers can be downloaded for free at http://www.ks.uiuc.edu/Publications/Papers/ http://www.ks.uiuc.edu/Publications/Papers/abstract.cgi?tbcode=SCHU76B http://www.ks.uiuc.edu/Publications/Papers/abstract.cgi?tbcode=SCHU75A http://www.ks.uiuc.edu/Publications/Papers/abstract.cgi?tbcode=SCHU75 * add Fresnel Integrals to specfunc. See TOMS 723 + 2 subsequent errata. * make mode variables consistent in specfunc -- some seem to be unnecessary from performance point of view since the speed difference is negligible. * From: "Alexander Babansky" To: "Brian Gough" Subject: Re: gsl-1.2 Date: Sun, 3 Nov 2002 14:15:15 -0500 Hi Brian, May I suggest you to add another function to gsl-1.2 ? It's a modified Ei(x) function: Em(x)=exp(-x)*Ei(x); As u might know, Ei(x) raises as e^x on the negative interval. Therefore, Ei(100) is very very large. But Ei(100)*exp(-100) = 0.010; Unfortunately, if u try x=800 u'll get overflow in Ei(800). but Ei(800)*exp(-800) should be around 0.0001; Modified function Em(x) is used in cos, sin integrals such as: int_0^\infinity dx sin(bx)/(x^2+z^2)=(1/2z)*(Em(bz)-Em(-bz)); int_0^\infinity dx x cos(bx)/(x^2+z^2)=(1/2)*(Em(bz)+Em(-bz)); One of possible ways to add it to the library is: Em(x) = - PV int_0^\infinity e^(-t)/(t+x) dt Sincerely, Alex DONE: Wed Nov 6 13:06:42 MST 2002 [GJ] ---------------------------------------------------------------------- The following should be finished before a 1.0 level release. * Implement the conicalP_sph_reg() functions. DONE: Fri Nov 6 23:33:53 MST 1998 [GJ] * Irregular (Q) Legendre functions, at least the integer order ones. More general cases can probably wait. DONE: Sat Nov 7 15:47:35 MST 1998 [GJ] * Make hyperg_1F1() work right. This is the last remaining source of test failures. The problem is with an unstable recursion in certain cases. Look for the recursion with the variable named "start_pair"; this is stupid hack to keep track of when the recursion result is going the wrong way for awhile by remembering the minimum value. An error estimate is amde from that. But it is just a hack. Somethign must be done abou that case. * Clean-up Coulomb wave functions. This does not mean completing a fully controlled low-energy evaluation, which is a larger project. DONE: Sun May 16 13:49:47 MDT 1999 [GJ] * Clean-up the Fermi-Dirac code. The full Fermi-Dirac functions can probably wait until a later release, but we should have at least the common j = integer and j = 1/2-integer cases for the 1.0 release. These are not too hard. DONE: Sat Nov 7 19:46:27 MST 1998 [GJ] * Go over the tests and make sure nothing is left out. * Sanitize all the error-checking, error-estimation, algorithm tuning, etc. * Fill out our scorecard, working from Lozier's "Software Needs in Special Functions" paper. * Final Seal of Approval This section has itself gone through several revisions (sigh), proving that the notion of done-ness is ill-defined. So it is worth stating the criteria for done-ness explicitly: o interfaces stabilized o error-estimation in place o all deprecated constructs removed o passes tests - airy.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - airy_der.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - airy_zero.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - atanint.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_I0.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_I1.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_In.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_Inu.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_J0.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_J1.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_Jn.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_Jnu.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_K0.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_K1.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_Kn.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_Knu.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_Y0.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_Y1.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_Yn.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_Ynu.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_amp_phase.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_i.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_j.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_k.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_olver.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_sequence.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_temme.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_y.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - bessel_zero.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - beta.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - chebyshev.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - clausen.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - coulomb.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - coulomb_bound.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - coupling.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - dawson.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - debye.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - dilog.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - elementary.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - ellint.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - elljac.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - erfc.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - exp.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - expint.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - expint3.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - fermi_dirac.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - gamma.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - gamma_inc.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - gegenbauer.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - hyperg.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - hyperg_0F1.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - hyperg_1F1.c - hyperg_2F0.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - hyperg_2F1.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - hyperg_U.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - laguerre.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - legendre_H3d.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - legendre_Qn.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - legendre_con.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - legendre_poly.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - log.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - poch.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - poly.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - pow_int.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - psi.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - result.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - shint.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - sinint.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - synchrotron.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - transport.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - trig.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: - zeta.c INTERFACES: ERRORESTIM: DEPRECATED: PASSTESTS: ---------------------------------------------------------------------- The following are important but probably will not see completion before a 1.0 level release. * Incomplete Fermi-Dirac functions. Other Fermi-Dirac functions, including the generic 1/2-integer case, which was not done. * Implement the low-energy regime for the Coulomb wave functions. This is fairly well understood in the recent literature but will require some detailed work. Specifically this means creating a drop-in replacement for coulomb_jwkb() which is controlled and extensible. * General Legendre functions (at least on the cut). This subsumes the toroidal functions, so we need not consider those separately. SLATEC code exists (originally due to Olver+Smith). * Characterize the algorithms. A significant fraction of the code is home-grown and it should be reviewed by other parties. ---------------------------------------------------------------------- The following are extra features which need not be implemented for a version 1.0 release. * Spheroidal wave functions. * Mathieu functions. * Weierstrass elliptic functions. ---------------------------------------------------------------------- Improve accuracy of ERF NNTP-Posting-Date: Thu, 11 Sep 2003 07:41:42 -0500 From: "George Marsaglia" Newsgroups: comp.lang.c References: Subject: Re: When (32-bit) double precision isn't precise enough Date: Thu, 11 Sep 2003 08:41:40 -0400 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1158 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165 Message-ID: Lines: 265 NNTP-Posting-Host: 68.35.247.101 X-Trace: sv3-4YY+jkhhdeQvGKAREa99vDBFHJoKVqVBdUTSuRxA71OwlgxX0uUFnKYs54FlnUs0Xb6BRngKigkd75d!tKin8l8rAQKylaP+4vzTI3AO33bivOw1lKDZUUtXe4lUMW1qn+goUp/Pfksstg== X-Complaints-To: abuse@comcast.net X-DMCA-Complaints-To: dmca@comcast.net X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly X-Postfilter: 1.1 Why most of those who deal with the normal integral in probability theory are still stuck with the historical baggage of the error function is a puzzle to me, as is the poor quality of the results one gets from standard library implementations of erf(). (One of the most common is based on ALGORITHM AS66, APPL. STATIST.(1973) Vol.22, .424 by HILL, which gives only 6-8 digit accuracy). Here is a listing of my method: /* Marsaglia Complementary Normal Distribution Function cPhi(x) = integral from x to infinity of exp(-.5*t^2)/sqrt(2*pi), x<15 15-digit accuracy for x<15, returns 0 for x>15. #include */ double cPhi(double x){ long double v[]={0.,.65567954241879847154L, .42136922928805447322L,.30459029871010329573L, .23665238291356067062L,.19280810471531576488L, .16237766089686746182L,.14010418345305024160L, .12313196325793229628L,.10978728257830829123L, .99028596471731921395e-1L,.90175675501064682280e-1L, .82766286501369177252e-1L,.76475761016248502993e-1L, .71069580538852107091e-1L,.66374235823250173591e-1L}; long double h,a,b,z,t,sum,pwr; int i,j; if(x>15.) return (0.); if(x<-15.) return (1.); j=fabs(x)+1.; z=j; h=fabs(x)-z; a=v[j]; b=z*a-1.; pwr=1.; sum=a+h*b; for(i=2;i<60;i+=2){ a=(a+z*b)/i; b=(b+z*a)/(i+1); pwr=pwr*h*h; t=sum; sum=sum+pwr*(a+h*b); if(sum==t) break; } sum=sum*exp(-.5*x*x-.91893853320467274178L); if(x<0.) sum=1.-sum; return ((double) sum); } */ end of listing */ The method is based on defining phi(x)=exp(-x^2)/sqrt(2pi) and R(x)=cPhi(x)/phi(x). The function R(x) is well-behaved and terms of its Taylor series are readily obtained by a two-term recursion. With an accurate representation of R(x) at ,say, x=0,1,2,...,15, a simple evaluation of the Taylor series at intermediate points provides up to 15 digits of accuracy. An article describing the method will be in the new version of my Diehard CDROM. A new version of the Diehard tests of randomness (but not yet the new DVDROM) is at http://www.csis.hku.hk/~diehard/ George Marsaglia gsl/specfunc/mathieu_charv.c0000644000175000017500000005704413536674414014535 0ustar eddedd/* specfunc/mathieu_charv.c * * Copyright (C) 2002, 2009 Lowell Johnson * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Author: L. Johnson */ #include #include #include #include #include #include #include #include /* prototypes */ static double solve_cubic(double c2, double c1, double c0); static double ceer(int order, double qq, double aa, int nterms) { double term, term1; int ii, n1; if (order == 0) term = 0.0; else { term = 2.0*qq*qq/aa; if (order != 2) { n1 = order/2 - 1; for (ii=0; ii= 0) { double t1 = rr + sqrt(ww); ss = fabs(t1)/t1*pow(fabs(t1), 1/3.); t1 = rr - sqrt(ww); tt = fabs(t1)/t1*pow(fabs(t1), 1/3.); } else { double theta = acos(rr/sqrt(-qq*qq*qq)); ss = 2*sqrt(-qq)*cos((theta + 4*M_PI)/3.); tt = 0.0; } return (ss + tt - c2/3); } /* Compute an initial approximation for the characteristic value. */ static double approx_c(int order, double qq) { double approx; double c0, c1, c2; if (order < 0) { GSL_ERROR_VAL("Undefined order for Mathieu function", GSL_EINVAL, 0.0); } switch (order) { case 0: if (qq <= 4) return (2 - sqrt(4 + 2*qq*qq)); /* Eqn. 31 */ else return asymptotic(order, qq); break; case 1: if (qq <= 4) return (5 + 0.5*(qq - sqrt(5*qq*qq - 16*qq + 64))); /* Eqn. 32 */ else return asymptotic(order, qq); break; case 2: if (qq <= 3) { c2 = -8.0; /* Eqn. 33 */ c1 = -48 - 3*qq*qq; c0 = 20*qq*qq; } else return asymptotic(order, qq); break; case 3: if (qq <= 6.25) { c2 = -qq - 8; /* Eqn. 34 */ c1 = 16*qq - 128 - 2*qq*qq; c0 = qq*qq*(qq + 8); } else return asymptotic(order, qq); break; default: if (order < 70) { if (1.7*order > 2*sqrt(qq)) { /* Eqn. 30 */ double n2 = (double)(order*order); double n22 = (double)((n2 - 1)*(n2 - 1)); double q2 = qq*qq; double q4 = q2*q2; approx = n2 + 0.5*q2/(n2 - 1); approx += (5*n2 + 7)*q4/(32*n22*(n2 - 1)*(n2 - 4)); approx += (9*n2*n2 + 58*n2 + 29)*q4*q2/ (64*n22*n22*(n2 - 1)*(n2 - 4)*(n2 - 9)); if (1.4*order < 2*sqrt(qq)) { approx += asymptotic(order, qq); approx *= 0.5; } } else approx = asymptotic(order, qq); return approx; } else return order*order; } /* Solve the cubic x^3 + c2*x^2 + c1*x + c0 = 0 */ approx = solve_cubic(c2, c1, c0); if ( approx < 0 && sqrt(qq) > 0.1*order ) return asymptotic(order-1, qq); else return (order*order + fabs(approx)); } static double approx_s(int order, double qq) { double approx; double c0, c1, c2; if (order < 1) { GSL_ERROR_VAL("Undefined order for Mathieu function", GSL_EINVAL, 0.0); } switch (order) { case 1: if (qq <= 4) return (5 - 0.5*(qq + sqrt(5*qq*qq + 16*qq + 64))); /* Eqn. 35 */ else return asymptotic(order-1, qq); break; case 2: if (qq <= 5) return (10 - sqrt(36 + qq*qq)); /* Eqn. 36 */ else return asymptotic(order-1, qq); break; case 3: if (qq <= 6.25) { c2 = qq - 8; /* Eqn. 37 */ c1 = -128 - 16*qq - 2*qq*qq; c0 = qq*qq*(8 - qq); } else return asymptotic(order-1, qq); break; default: if (order < 70) { if (1.7*order > 2*sqrt(qq)) { /* Eqn. 30 */ double n2 = (double)(order*order); double n22 = (double)((n2 - 1)*(n2 - 1)); double q2 = qq*qq; double q4 = q2*q2; approx = n2 + 0.5*q2/(n2 - 1); approx += (5*n2 + 7)*q4/(32*n22*(n2 - 1)*(n2 - 4)); approx += (9*n2*n2 + 58*n2 + 29)*q4*q2/ (64*n22*n22*(n2 - 1)*(n2 - 4)*(n2 - 9)); if (1.4*order < 2*sqrt(qq)) { approx += asymptotic(order-1, qq); approx *= 0.5; } } else approx = asymptotic(order-1, qq); return approx; } else return order*order; } /* Solve the cubic x^3 + c2*x^2 + c1*x + c0 = 0 */ approx = solve_cubic(c2, c1, c0); if ( approx < 0 && sqrt(qq) > 0.1*order ) return asymptotic(order-1, qq); else return (order*order + fabs(approx)); } int gsl_sf_mathieu_a_e(int order, double qq, gsl_sf_result *result) { int even_odd, nterms = 50, ii, counter = 0, maxcount = 1000; int dir = 0; /* step direction for new search */ double a1, a2, fa, fa1, dela, aa_orig, da = 0.025, aa; double aa_approx; /* current approximation for solution */ even_odd = 0; if (order % 2 != 0) even_odd = 1; /* If the argument is 0, then the coefficient is simply the square of the order. */ if (qq == 0) { result->val = order*order; result->err = 0.0; return GSL_SUCCESS; } /* Use symmetry characteristics of the functions to handle cases with negative order and/or argument q. See Abramowitz & Stegun, 20.8.3. */ if (order < 0) order *= -1; if (qq < 0.0) { if (even_odd == 0) return gsl_sf_mathieu_a_e(order, -qq, result); else return gsl_sf_mathieu_b_e(order, -qq, result); } /* Compute an initial approximation for the characteristic value. */ aa_approx = approx_c(order, qq); /* Save the original approximation for later comparison. */ aa_orig = aa = aa_approx; /* Loop as long as the final value is not near the approximate value (with a max limit to avoid potential infinite loop). */ while (counter < maxcount) { a1 = aa + 0.001; ii = 0; if (even_odd == 0) fa1 = ceer(order, qq, a1, nterms); else fa1 = ceor(order, qq, a1, nterms); for (;;) { if (even_odd == 0) fa = ceer(order, qq, aa, nterms); else fa = ceor(order, qq, aa, nterms); a2 = a1; a1 = aa; if (fa == fa1) { result->err = GSL_DBL_EPSILON; break; } aa -= (aa - a2)/(fa - fa1)*fa; dela = fabs(aa - a2); if (dela < GSL_DBL_EPSILON) { result->err = GSL_DBL_EPSILON; break; } if (ii > 40) { result->err = dela; break; } fa1 = fa; ii++; } /* If the solution found is not near the original approximation, tweak the approximate value, and try again. */ if (fabs(aa - aa_orig) > (3 + 0.01*order*fabs(aa_orig)) || (order > 10 && fabs(aa - aa_orig) > 1.5*order)) { counter++; if (counter == maxcount) { result->err = fabs(aa - aa_orig); break; } if (aa > aa_orig) { if (dir == 1) da /= 2; dir = -1; } else { if (dir == -1) da /= 2; dir = 1; } aa_approx += dir*da*counter; aa = aa_approx; continue; } else break; } result->val = aa; /* If we went through the maximum number of retries and still didn't find the solution, let us know. */ if (counter == maxcount) { GSL_ERROR("Wrong characteristic Mathieu value", GSL_EFAILED); } return GSL_SUCCESS; } int gsl_sf_mathieu_b_e(int order, double qq, gsl_sf_result *result) { int even_odd, nterms = 50, ii, counter = 0, maxcount = 1000; int dir = 0; /* step direction for new search */ double a1, a2, fa, fa1, dela, aa_orig, da = 0.025, aa; double aa_approx; /* current approximation for solution */ even_odd = 0; if (order % 2 != 0) even_odd = 1; /* The order cannot be 0. */ if (order == 0) { GSL_ERROR("Characteristic value undefined for order 0", GSL_EFAILED); } /* If the argument is 0, then the coefficient is simply the square of the order. */ if (qq == 0) { result->val = order*order; result->err = 0.0; return GSL_SUCCESS; } /* Use symmetry characteristics of the functions to handle cases with negative order and/or argument q. See Abramowitz & Stegun, 20.8.3. */ if (order < 0) order *= -1; if (qq < 0.0) { if (even_odd == 0) return gsl_sf_mathieu_b_e(order, -qq, result); else return gsl_sf_mathieu_a_e(order, -qq, result); } /* Compute an initial approximation for the characteristic value. */ aa_approx = approx_s(order, qq); /* Save the original approximation for later comparison. */ aa_orig = aa = aa_approx; /* Loop as long as the final value is not near the approximate value (with a max limit to avoid potential infinite loop). */ while (counter < maxcount) { a1 = aa + 0.001; ii = 0; if (even_odd == 0) fa1 = seer(order, qq, a1, nterms); else fa1 = seor(order, qq, a1, nterms); for (;;) { if (even_odd == 0) fa = seer(order, qq, aa, nterms); else fa = seor(order, qq, aa, nterms); a2 = a1; a1 = aa; if (fa == fa1) { result->err = GSL_DBL_EPSILON; break; } aa -= (aa - a2)/(fa - fa1)*fa; dela = fabs(aa - a2); if (dela < 1e-18) { result->err = GSL_DBL_EPSILON; break; } if (ii > 40) { result->err = dela; break; } fa1 = fa; ii++; } /* If the solution found is not near the original approximation, tweak the approximate value, and try again. */ if (fabs(aa - aa_orig) > (3 + 0.01*order*fabs(aa_orig)) || (order > 10 && fabs(aa - aa_orig) > 1.5*order)) { counter++; if (counter == maxcount) { result->err = fabs(aa - aa_orig); break; } if (aa > aa_orig) { if (dir == 1) da /= 2; dir = -1; } else { if (dir == -1) da /= 2; dir = 1; } aa_approx += dir*da*counter; aa = aa_approx; continue; } else break; } result->val = aa; /* If we went through the maximum number of retries and still didn't find the solution, let us know. */ if (counter == maxcount) { GSL_ERROR("Wrong characteristic Mathieu value", GSL_EFAILED); } return GSL_SUCCESS; } /* Eigenvalue solutions for characteristic values below. */ /* figi.c converted from EISPACK Fortran FIGI.F. * * given a nonsymmetric tridiagonal matrix such that the products * of corresponding pairs of off-diagonal elements are all * non-negative, this subroutine reduces it to a symmetric * tridiagonal matrix with the same eigenvalues. if, further, * a zero product only occurs when both factors are zero, * the reduced matrix is similar to the original matrix. * * on input * * n is the order of the matrix. * * t contains the input matrix. its subdiagonal is * stored in the last n-1 positions of the first column, * its diagonal in the n positions of the second column, * and its superdiagonal in the first n-1 positions of * the third column. t(1,1) and t(n,3) are arbitrary. * * on output * * t is unaltered. * * d contains the diagonal elements of the symmetric matrix. * * e contains the subdiagonal elements of the symmetric * matrix in its last n-1 positions. e(1) is not set. * * e2 contains the squares of the corresponding elements of e. * e2 may coincide with e if the squares are not needed. * * ierr is set to * zero for normal return, * n+i if t(i,1)*t(i-1,3) is negative, * -(3*n+i) if t(i,1)*t(i-1,3) is zero with one factor * non-zero. in this case, the eigenvectors of * the symmetric matrix are not simply related * to those of t and should not be sought. * * questions and comments should be directed to burton s. garbow, * mathematics and computer science div, argonne national laboratory * * this version dated august 1983. */ static int figi(int nn, double *tt, double *dd, double *ee, double *e2) { int ii; for (ii=0; iieven_order, odd_order = work->odd_order, extra_values = work->extra_values, ii, jj; int status; double *tt = work->tt, *dd = work->dd, *ee = work->ee, *e2 = work->e2, *zz = work->zz, *aa = work->aa; gsl_matrix_view mat, evec; gsl_vector_view eval; gsl_eigen_symmv_workspace *wmat = work->wmat; if (order_max > work->size || order_max <= order_min || order_min < 0) { GSL_ERROR ("invalid range [order_min,order_max]", GSL_EINVAL); } /* Convert the nonsymmetric tridiagonal matrix to a symmetric tridiagonal form. */ tt[0] = 0.0; tt[1] = 0.0; tt[2] = qq; for (ii=1; iieval, 0, even_order); evec = gsl_matrix_submatrix(work->evec, 0, 0, even_order, even_order); gsl_eigen_symmv(&mat.matrix, &eval.vector, &evec.matrix, wmat); gsl_eigen_symmv_sort(&eval.vector, &evec.matrix, GSL_EIGEN_SORT_VAL_ASC); for (ii=0; iieval, 0, odd_order); evec = gsl_matrix_submatrix(work->evec, 0, 0, odd_order, odd_order); gsl_eigen_symmv(&mat.matrix, &eval.vector, &evec.matrix, wmat); gsl_eigen_symmv_sort(&eval.vector, &evec.matrix, GSL_EIGEN_SORT_VAL_ASC); for (ii=0; iieven_order-1, odd_order = work->odd_order, extra_values = work->extra_values, ii, jj; double *zz = work->zz, *bb = work->bb; gsl_matrix_view mat, evec; gsl_vector_view eval; gsl_eigen_symmv_workspace *wmat = work->wmat; if (order_max > work->size || order_max <= order_min || order_min < 0) { GSL_ERROR ("invalid range [order_min,order_max]", GSL_EINVAL); } /* Fill the period \pi matrix. */ for (ii=0; iieval, 0, even_order); evec = gsl_matrix_submatrix(work->evec, 0, 0, even_order, even_order); gsl_eigen_symmv(&mat.matrix, &eval.vector, &evec.matrix, wmat); gsl_eigen_symmv_sort(&eval.vector, &evec.matrix, GSL_EIGEN_SORT_VAL_ASC); bb[0] = 0.0; for (ii=0; iieval, 0, odd_order); evec = gsl_matrix_submatrix(work->evec, 0, 0, odd_order, odd_order); gsl_eigen_symmv(&mat.matrix, &eval.vector, &evec.matrix, wmat); gsl_eigen_symmv_sort(&eval.vector, &evec.matrix, GSL_EIGEN_SORT_VAL_ASC); for (ii=0; ii #include #include #include #include "error.h" #include "chebyshev.h" #include "cheb_eval.c" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* based on SLATEC shi.f, W. Fullerton series for shi on the interval 0.00000e+00 to 1.40625e-01 with weighted error 4.67e-20 log weighted error 19.33 significant figures required 17.07 decimal places required 19.75 */ static double shi_data[7] = { 0.0078372685688900950695, 0.0039227664934234563973, 0.0000041346787887617267, 0.0000000024707480372883, 0.0000000000009379295591, 0.0000000000000002451817, 0.0000000000000000000467 }; static cheb_series shi_cs = { shi_data, 6, -1, 1, 6 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_Shi_e(const double x, gsl_sf_result * result) { const double xsml = GSL_SQRT_DBL_EPSILON; /* sqrt (r1mach(3)) */ const double ax = fabs(x); if(ax < xsml) { result->val = x; result->err = 0.0; return GSL_SUCCESS; } else if(ax <= 0.375) { gsl_sf_result result_c; cheb_eval_e(&shi_cs, 128.0*x*x/9.0-1.0, &result_c); result->val = x * (1.0 + result_c.val); result->err = x * result_c.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { gsl_sf_result result_Ei; gsl_sf_result result_E1; int status_Ei = gsl_sf_expint_Ei_e(x, &result_Ei); int status_E1 = gsl_sf_expint_E1_e(x, &result_E1); result->val = 0.5*(result_Ei.val + result_E1.val); result->err = 0.5*(result_Ei.err + result_E1.err); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); if(status_Ei == GSL_EUNDRFLW && status_E1 == GSL_EUNDRFLW) { GSL_ERROR ("underflow", GSL_EUNDRFLW); } else if(status_Ei == GSL_EOVRFLW || status_E1 == GSL_EOVRFLW) { GSL_ERROR ("overflow", GSL_EOVRFLW); } else { return GSL_SUCCESS; } } } int gsl_sf_Chi_e(const double x, gsl_sf_result * result) { gsl_sf_result result_Ei; gsl_sf_result result_E1; int status_Ei = gsl_sf_expint_Ei_e(x, &result_Ei); int status_E1 = gsl_sf_expint_E1_e(x, &result_E1); if(status_Ei == GSL_EDOM || status_E1 == GSL_EDOM) { DOMAIN_ERROR(result); } else if(status_Ei == GSL_EUNDRFLW && status_E1 == GSL_EUNDRFLW) { UNDERFLOW_ERROR(result); } else if(status_Ei == GSL_EOVRFLW || status_E1 == GSL_EOVRFLW) { OVERFLOW_ERROR(result); } else { result->val = 0.5 * (result_Ei.val - result_E1.val); result->err = 0.5 * (result_Ei.err + result_E1.err); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_Shi(const double x) { EVAL_RESULT(gsl_sf_Shi_e(x, &result)); } double gsl_sf_Chi(const double x) { EVAL_RESULT(gsl_sf_Chi_e(x, &result)); } gsl/specfunc/poch.c0000644000175000017500000003400013536674414012632 0ustar eddedd/* specfunc/poch.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * Copyright (C) 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include #include "error.h" static const double bern[21] = { 0.0 /* no element 0 */, +0.833333333333333333333333333333333e-01, -0.138888888888888888888888888888888e-02, +0.330687830687830687830687830687830e-04, -0.826719576719576719576719576719576e-06, +0.208767569878680989792100903212014e-07, -0.528419013868749318484768220217955e-09, +0.133825365306846788328269809751291e-10, -0.338968029632258286683019539124944e-12, +0.858606205627784456413590545042562e-14, -0.217486869855806187304151642386591e-15, +0.550900282836022951520265260890225e-17, -0.139544646858125233407076862640635e-18, +0.353470703962946747169322997780379e-20, -0.895351742703754685040261131811274e-22, +0.226795245233768306031095073886816e-23, -0.574472439520264523834847971943400e-24, +0.145517247561486490186626486727132e-26, -0.368599494066531017818178247990866e-28, +0.933673425709504467203255515278562e-30, -0.236502241570062993455963519636983e-31 }; /* ((a)_x - 1)/x in the "small x" region where * cancellation must be controlled. * * Based on SLATEC DPOCH1(). */ /* C When ABS(X) is so small that substantial cancellation will occur if C the straightforward formula is used, we use an expansion due C to Fields and discussed by Y. L. Luke, The Special Functions and Their C Approximations, Vol. 1, Academic Press, 1969, page 34. C C The ratio POCH(A,X) = GAMMA(A+X)/GAMMA(A) is written by Luke as C (A+(X-1)/2)**X * polynomial in (A+(X-1)/2)**(-2) . C In order to maintain significance in POCH1, we write for positive a C (A+(X-1)/2)**X = EXP(X*LOG(A+(X-1)/2)) = EXP(Q) C = 1.0 + Q*EXPREL(Q) . C Likewise the polynomial is written C POLY = 1.0 + X*POLY1(A,X) . C Thus, C POCH1(A,X) = (POCH(A,X) - 1) / X C = EXPREL(Q)*(Q/X + Q*POLY1(A,X)) + POLY1(A,X) C */ static int pochrel_smallx(const double a, const double x, gsl_sf_result * result) { /* SQTBIG = 1.0D0/SQRT(24.0D0*D1MACH(1)) ALNEPS = LOG(D1MACH(3)) */ const double SQTBIG = 1.0/(2.0*M_SQRT2*M_SQRT3*GSL_SQRT_DBL_MIN); const double ALNEPS = GSL_LOG_DBL_EPSILON - M_LN2; if(x == 0.0) { return gsl_sf_psi_e(a, result); } else { const double bp = ( (a < -0.5) ? 1.0-a-x : a ); const int incr = ( (bp < 10.0) ? 11.0-bp : 0 ); const double b = bp + incr; double dpoch1; gsl_sf_result dexprl; int stat_dexprl; int i; double var = b + 0.5*(x-1.0); double alnvar = log(var); double q = x*alnvar; double poly1 = 0.0; if(var < SQTBIG) { const int nterms = (int)(-0.5*ALNEPS/alnvar + 1.0); const double var2 = (1.0/var)/var; const double rho = 0.5 * (x + 1.0); double term = var2; double gbern[24]; int k, j; gbern[1] = 1.0; gbern[2] = -rho/12.0; poly1 = gbern[2] * term; if(nterms > 20) { /* NTERMS IS TOO BIG, MAYBE D1MACH(3) IS BAD */ /* nterms = 20; */ result->val = 0.0; result->err = 0.0; GSL_ERROR ("error", GSL_ESANITY); } for(k=2; k<=nterms; k++) { double gbk = 0.0; for(j=1; j<=k; j++) { gbk += bern[k-j+1]*gbern[j]; } gbern[k+1] = -rho*gbk/k; term *= (2*k-2-x)*(2*k-1-x)*var2; poly1 += gbern[k+1]*term; } } stat_dexprl = gsl_sf_expm1_e(q, &dexprl); if(stat_dexprl != GSL_SUCCESS) { result->val = 0.0; result->err = 0.0; return stat_dexprl; } dexprl.val = dexprl.val/q; poly1 *= (x - 1.0); dpoch1 = dexprl.val * (alnvar + q * poly1) + poly1; for(i=incr-1; i >= 0; i--) { /* C WE HAVE DPOCH1(B,X), BUT BP IS SMALL, SO WE USE BACKWARDS RECURSION C TO OBTAIN DPOCH1(BP,X). */ double binv = 1.0/(bp+i); dpoch1 = (dpoch1 - binv) / (1.0 + x*binv); } if(bp == a) { result->val = dpoch1; result->err = 2.0 * GSL_DBL_EPSILON * (fabs(incr) + 1.0) * fabs(result->val); return GSL_SUCCESS; } else { /* C WE HAVE DPOCH1(BP,X), BUT A IS LT -0.5. WE THEREFORE USE A C REFLECTION FORMULA TO OBTAIN DPOCH1(A,X). */ double sinpxx = sin(M_PI*x)/x; double sinpx2 = sin(0.5*M_PI*x); double t1 = sinpxx/tan(M_PI*b); double t2 = 2.0*sinpx2*(sinpx2/x); double trig = t1 - t2; result->val = dpoch1 * (1.0 + x*trig) + trig; result->err = (fabs(dpoch1*x) + 1.0) * GSL_DBL_EPSILON * (fabs(t1) + fabs(t2)); result->err += 2.0 * GSL_DBL_EPSILON * (fabs(incr) + 1.0) * fabs(result->val); return GSL_SUCCESS; } } } /* Assumes a>0 and a+x>0. */ static int lnpoch_pos(const double a, const double x, gsl_sf_result * result) { double absx = fabs(x); if(absx > 0.1*a || absx*log(GSL_MAX_DBL(a,2.0)) > 0.1) { if(a < GSL_SF_GAMMA_XMAX && a+x < GSL_SF_GAMMA_XMAX) { /* If we can do it by calculating the gamma functions * directly, then that will be more accurate than * doing the subtraction of the logs. */ gsl_sf_result g1; gsl_sf_result g2; gsl_sf_gammainv_e(a, &g1); gsl_sf_gammainv_e(a+x, &g2); result->val = -log(g2.val/g1.val); result->err = g1.err/fabs(g1.val) + g2.err/fabs(g2.val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { /* Otherwise we must do the subtraction. */ gsl_sf_result lg1; gsl_sf_result lg2; int stat_1 = gsl_sf_lngamma_e(a, &lg1); int stat_2 = gsl_sf_lngamma_e(a+x, &lg2); result->val = lg2.val - lg1.val; result->err = lg2.err + lg1.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_1, stat_2); } } else if(absx < 0.1*a && a > 15.0) { /* Be careful about the implied subtraction. * Note that both a+x and and a must be * large here since a is not small * and x is not relatively large. * So we calculate using Stirling for Log[Gamma(z)]. * * Log[Gamma(a+x)/Gamma(a)] = x(Log[a]-1) + (x+a-1/2)Log[1+x/a] * + (1/(1+eps) - 1) / (12 a) * - (1/(1+eps)^3 - 1) / (360 a^3) * + (1/(1+eps)^5 - 1) / (1260 a^5) * - (1/(1+eps)^7 - 1) / (1680 a^7) * + ... */ const double eps = x/a; const double den = 1.0 + eps; const double d3 = den*den*den; const double d5 = d3*den*den; const double d7 = d5*den*den; const double c1 = -eps/den; const double c3 = -eps*(3.0+eps*(3.0+eps))/d3; const double c5 = -eps*(5.0+eps*(10.0+eps*(10.0+eps*(5.0+eps))))/d5; const double c7 = -eps*(7.0+eps*(21.0+eps*(35.0+eps*(35.0+eps*(21.0+eps*(7.0+eps))))))/d7; const double p8 = gsl_sf_pow_int(1.0+eps,8); const double c8 = 1.0/p8 - 1.0; /* these need not */ const double c9 = 1.0/(p8*(1.0+eps)) - 1.0; /* be very accurate */ const double a4 = a*a*a*a; const double a6 = a4*a*a; const double ser_1 = c1 + c3/(30.0*a*a) + c5/(105.0*a4) + c7/(140.0*a6); const double ser_2 = c8/(99.0*a6*a*a) - 691.0/360360.0 * c9/(a6*a4); const double ser = (ser_1 + ser_2)/ (12.0*a); double term1 = x * log(a/M_E); double term2; gsl_sf_result ln_1peps; gsl_sf_log_1plusx_e(eps, &ln_1peps); /* log(1 + x/a) */ term2 = (x + a - 0.5) * ln_1peps.val; result->val = term1 + term2 + ser; result->err = GSL_DBL_EPSILON*fabs(term1); result->err += fabs((x + a - 0.5)*ln_1peps.err); result->err += fabs(ln_1peps.val) * GSL_DBL_EPSILON * (fabs(x) + fabs(a) + 0.5); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { gsl_sf_result poch_rel; int stat_p = pochrel_smallx(a, x, &poch_rel); double eps = x*poch_rel.val; int stat_e = gsl_sf_log_1plusx_e(eps, result); result->err = 2.0 * fabs(x * poch_rel.err / (1.0 + eps)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_e, stat_p); } } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_lnpoch_e(const double a, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(a <= 0.0 || a+x <= 0.0) { DOMAIN_ERROR(result); } else if(x == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { return lnpoch_pos(a, x, result); } } int gsl_sf_lnpoch_sgn_e(const double a, const double x, gsl_sf_result * result, double * sgn) { if(x == 0.0) { *sgn = 1.0; result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(a > 0.0 && a+x > 0.0) { *sgn = 1.0; return lnpoch_pos(a, x, result); } else if (a <= 0 && a == floor(a)) { /* Special cases for infinite denominator Gamma(a) */ if (a + x < 0 && x == floor(x)) { /* Handle the case where both a and a+x are negative integers. */ gsl_sf_result result_pos; /* Use the reflection formula AMS6.1.17 poch(-a,-x) = (-1)^x (a/(a+x)) 1/poch(a,x) */ int stat = lnpoch_pos (-a, -x, &result_pos); double f = log (a / (a + x)); double s = (fmod(x, 2) == 0) ? 1 : -1; result->val = f - result_pos.val; result->err = result_pos.err + 2.0 * GSL_DBL_EPSILON * f; *sgn = s; return stat; } else if (a + x == 0) { /* Handle a+x = 0 i.e. Gamma(0)/Gamma(a) */ /* poch (-a,a) == (-1)^a Gamma(a+1) */ int stat = gsl_sf_lngamma_sgn_e (-a + 1, result, sgn); double s = (fmod(-a, 2) == 0) ? 1 : -1; *sgn *= s; return stat; } else { /* Handle finite numerator, Gamma(a+x) for a+x != 0 or neg int */ result->val = GSL_NEGINF; result->err = 0.0; *sgn = 1; return GSL_SUCCESS; } } else if(a < 0.0 && a+x < 0.0) { /* Reduce to positive case using reflection. */ double sin_1 = sin(M_PI * (1.0 - a)); double sin_2 = sin(M_PI * (1.0 - a - x)); if(sin_1 == 0.0 || sin_2 == 0.0) { *sgn = 0.0; DOMAIN_ERROR(result); } else { gsl_sf_result lnp_pos; int stat_pp = lnpoch_pos(1.0-a, -x, &lnp_pos); double lnterm = log(fabs(sin_1/sin_2)); result->val = lnterm - lnp_pos.val; result->err = lnp_pos.err; result->err += 2.0 * GSL_DBL_EPSILON * (fabs(1.0-a) + fabs(1.0-a-x)) * fabs(lnterm); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); *sgn = GSL_SIGN(sin_1*sin_2); return stat_pp; } } else { /* Evaluate gamma ratio directly. */ gsl_sf_result lg_apn; gsl_sf_result lg_a; double s_apn, s_a; int stat_apn = gsl_sf_lngamma_sgn_e(a+x, &lg_apn, &s_apn); int stat_a = gsl_sf_lngamma_sgn_e(a, &lg_a, &s_a); if(stat_apn == GSL_SUCCESS && stat_a == GSL_SUCCESS) { result->val = lg_apn.val - lg_a.val; result->err = lg_apn.err + lg_a.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); *sgn = s_a * s_apn; return GSL_SUCCESS; } else if(stat_apn == GSL_EDOM || stat_a == GSL_EDOM){ *sgn = 0.0; DOMAIN_ERROR(result); } else { result->val = 0.0; result->err = 0.0; *sgn = 0.0; return GSL_FAILURE; } } } int gsl_sf_poch_e(const double a, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x == 0.0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else { gsl_sf_result lnpoch; double sgn; int stat_lnpoch = gsl_sf_lnpoch_sgn_e(a, x, &lnpoch, &sgn); if (lnpoch.val == GSL_NEGINF) { result->val = 0; result->err = 0; return stat_lnpoch; } else { int stat_exp = gsl_sf_exp_err_e(lnpoch.val, lnpoch.err, result); result->val *= sgn; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_exp, stat_lnpoch); } } } int gsl_sf_pochrel_e(const double a, const double x, gsl_sf_result * result) { const double absx = fabs(x); const double absa = fabs(a); /* CHECK_POINTER(result) */ if(absx > 0.1*absa || absx*log(GSL_MAX(absa,2.0)) > 0.1) { gsl_sf_result lnpoch; double sgn; int stat_poch = gsl_sf_lnpoch_sgn_e(a, x, &lnpoch, &sgn); if(lnpoch.val > GSL_LOG_DBL_MAX) { OVERFLOW_ERROR(result); } else { const double el = exp(lnpoch.val); result->val = (sgn*el - 1.0)/x; result->err = fabs(result->val) * (lnpoch.err + 2.0 * GSL_DBL_EPSILON); result->err += 2.0 * GSL_DBL_EPSILON * (fabs(sgn*el) + 1.0) / fabs(x); return stat_poch; } } else { return pochrel_smallx(a, x, result); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_lnpoch(const double a, const double x) { EVAL_RESULT(gsl_sf_lnpoch_e(a, x, &result)); } double gsl_sf_poch(const double a, const double x) { EVAL_RESULT(gsl_sf_poch_e(a, x, &result)); } double gsl_sf_pochrel(const double a, const double x) { EVAL_RESULT(gsl_sf_pochrel_e(a, x, &result)); } gsl/specfunc/atanint.c0000644000175000017500000000571513536674414013352 0ustar eddedd/* specfunc/atanint.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "chebyshev.h" #include "cheb_eval.c" static double atanint_data[21] = { 1.91040361296235937512, -0.4176351437656746940e-01, 0.275392550786367434e-02, -0.25051809526248881e-03, 0.2666981285121171e-04, -0.311890514107001e-05, 0.38833853132249e-06, -0.5057274584964e-07, 0.681225282949e-08, -0.94212561654e-09, 0.13307878816e-09, -0.1912678075e-10, 0.278912620e-11, -0.41174820e-12, 0.6142987e-13, -0.924929e-14, 0.140387e-14, -0.21460e-15, 0.3301e-16, -0.511e-17, 0.79e-18, }; static cheb_series atanint_cs = { atanint_data, 20, -1, 1, 10 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_atanint_e(const double x, gsl_sf_result * result) { const double ax = fabs(x); const double sgn = GSL_SIGN(x); /* CHECK_POINTER(result) */ if(ax == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(ax < 0.5*GSL_SQRT_DBL_EPSILON) { result->val = x; result->err = 0.0; return GSL_SUCCESS; } else if(ax <= 1.0) { const double t = 2.0 * (x*x - 0.5); gsl_sf_result result_c; cheb_eval_e(&atanint_cs, t, &result_c); result->val = x * result_c.val; result->err = x * result_c.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(ax < 1.0/GSL_SQRT_DBL_EPSILON) { const double t = 2.0 * (1.0/(x*x) - 0.5); gsl_sf_result result_c; cheb_eval_e(&atanint_cs, t, &result_c); result->val = sgn * (0.5*M_PI*log(ax) + result_c.val/ax); result->err = result_c.err/ax + fabs(result->val*GSL_DBL_EPSILON); result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { result->val = sgn * (0.5*M_PI*log(ax) + 1.0 / ax); result->err = 2.0 * fabs(result->val * GSL_DBL_EPSILON); return GSL_SUCCESS; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_atanint(const double x) { EVAL_RESULT(gsl_sf_atanint_e(x, &result)); } gsl/specfunc/bessel_Kn.c0000644000175000017500000001467613536674414013627 0ustar eddedd/* specfunc/bessel_Kn.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include "error.h" #include "bessel.h" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* [Abramowitz+Stegun, 9.6.11] * assumes n >= 1 */ static int bessel_Kn_scaled_small_x(const int n, const double x, gsl_sf_result * result) { int k; double y = 0.25 * x * x; double ln_x_2 = log(0.5*x); double ex = exp(x); gsl_sf_result ln_nm1_fact; double k_term; double term1, sum1, ln_pre1; double term2, sum2, pre2; gsl_sf_lnfact_e((unsigned int)(n-1), &ln_nm1_fact); ln_pre1 = -n*ln_x_2 + ln_nm1_fact.val; if(ln_pre1 > GSL_LOG_DBL_MAX - 3.0) GSL_ERROR ("error", GSL_EOVRFLW); sum1 = 1.0; k_term = 1.0; for(k=1; k<=n-1; k++) { k_term *= -y/(k * (n-k)); sum1 += k_term; } term1 = 0.5 * exp(ln_pre1) * sum1; pre2 = 0.5 * exp(n*ln_x_2); if(pre2 > 0.0) { const int KMAX = 20; gsl_sf_result psi_n; gsl_sf_result npk_fact; double yk = 1.0; double k_fact = 1.0; double psi_kp1 = -M_EULER; double psi_npkp1; gsl_sf_psi_int_e(n, &psi_n); gsl_sf_fact_e((unsigned int)n, &npk_fact); psi_npkp1 = psi_n.val + 1.0/n; sum2 = (psi_kp1 + psi_npkp1 - 2.0*ln_x_2)/npk_fact.val; for(k=1; kval = ex * (term1 + term2); result->err = ex * GSL_DBL_EPSILON * (fabs(ln_pre1)*fabs(term1) + fabs(term2)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_Kn_scaled_e(int n, const double x, gsl_sf_result * result) { n = abs(n); /* K(-n, z) = K(n, z) */ /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if(n == 0) { return gsl_sf_bessel_K0_scaled_e(x, result); } else if(n == 1) { return gsl_sf_bessel_K1_scaled_e(x, result); } else if(x <= 5.0) { return bessel_Kn_scaled_small_x(n, x, result); } else if(GSL_ROOT3_DBL_EPSILON * x > 0.25 * (n*n + 1)) { return gsl_sf_bessel_Knu_scaled_asympx_e((double)n, x, result); } else if(GSL_MIN(0.29/(n*n), 0.5/(n*n + x*x)) < GSL_ROOT3_DBL_EPSILON) { return gsl_sf_bessel_Knu_scaled_asymp_unif_e((double)n, x, result); } else { /* Upward recurrence. [Gradshteyn + Ryzhik, 8.471.1] */ double two_over_x = 2.0/x; gsl_sf_result r_b_jm1; gsl_sf_result r_b_j; int stat_0 = gsl_sf_bessel_K0_scaled_e(x, &r_b_jm1); int stat_1 = gsl_sf_bessel_K1_scaled_e(x, &r_b_j); double b_jm1 = r_b_jm1.val; double b_j = r_b_j.val; double b_jp1; int j; for(j=1; jval = b_j; result->err = n * (fabs(b_j) * (fabs(r_b_jm1.err/r_b_jm1.val) + fabs(r_b_j.err/r_b_j.val))); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_0, stat_1); } } int gsl_sf_bessel_Kn_e(const int n, const double x, gsl_sf_result * result) { const int status = gsl_sf_bessel_Kn_scaled_e(n, x, result); const double ex = exp(-x); result->val *= ex; result->err *= ex; result->err += x * GSL_DBL_EPSILON * fabs(result->val); return status; } int gsl_sf_bessel_Kn_scaled_array(const int nmin, const int nmax, const double x, double * result_array) { /* CHECK_POINTER(result_array) */ if(nmin < 0 || nmax < nmin || x <= 0.0) { int j; for(j=0; j<=nmax-nmin; j++) result_array[j] = 0.0; GSL_ERROR ("domain error", GSL_EDOM); } else if(nmax == 0) { gsl_sf_result b; int stat = gsl_sf_bessel_K0_scaled_e(x, &b); result_array[0] = b.val; return stat; } else { double two_over_x = 2.0/x; gsl_sf_result r_Knm1; gsl_sf_result r_Kn; int stat_0 = gsl_sf_bessel_Kn_scaled_e(nmin, x, &r_Knm1); int stat_1 = gsl_sf_bessel_Kn_scaled_e(nmin+1, x, &r_Kn); int stat = GSL_ERROR_SELECT_2(stat_0, stat_1); double Knp1; double Kn = r_Kn.val; double Knm1 = r_Knm1.val; int n; for(n=nmin+1; n<=nmax+1; n++) { if(Knm1 < GSL_DBL_MAX) { result_array[n-1-nmin] = Knm1; Knp1 = Knm1 + n * two_over_x * Kn; Knm1 = Kn; Kn = Knp1; } else { /* Overflow. Set the rest of the elements to * zero and bug out. * FIXME: Note: this relies on the convention * that the test x < DBL_MIN fails for x not * a number. This may be only an IEEE convention, * so the portability is unclear. */ int j; for(j=n; j<=nmax+1; j++) result_array[j-1-nmin] = 0.0; GSL_ERROR ("overflow", GSL_EOVRFLW); } } return stat; } } int gsl_sf_bessel_Kn_array(const int nmin, const int nmax, const double x, double * result_array) { int status = gsl_sf_bessel_Kn_scaled_array(nmin, nmax, x, result_array); double ex = exp(-x); int i; for(i=0; i<=nmax-nmin; i++) result_array[i] *= ex; return status; } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_Kn_scaled(const int n, const double x) { EVAL_RESULT(gsl_sf_bessel_Kn_scaled_e(n, x, &result)); } double gsl_sf_bessel_Kn(const int n, const double x) { EVAL_RESULT(gsl_sf_bessel_Kn_e(n, x, &result)); } gsl/specfunc/gsl_sf_expint.h0000644000175000017500000001045513536674414014562 0ustar eddedd/* specfunc/gsl_sf_expint.h * * Copyright (C) 2007 Brian Gough * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_EXPINT_H__ #define __GSL_SF_EXPINT_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* E_1(x) := Re[ Integrate[ Exp[-xt]/t, {t,1,Infinity}] ] * * x != 0.0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_expint_E1_e(const double x, gsl_sf_result * result); double gsl_sf_expint_E1(const double x); /* E_2(x) := Re[ Integrate[ Exp[-xt]/t^2, {t,1,Infinity}] ] * * x != 0.0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_expint_E2_e(const double x, gsl_sf_result * result); double gsl_sf_expint_E2(const double x); /* E_n(x) := Re[ Integrate[ Exp[-xt]/t^n, {t,1,Infinity}] ] * * x != 0.0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_expint_En_e(const int n, const double x, gsl_sf_result * result); double gsl_sf_expint_En(const int n, const double x); /* E_1_scaled(x) := exp(x) E_1(x) * * x != 0.0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_expint_E1_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_expint_E1_scaled(const double x); /* E_2_scaled(x) := exp(x) E_2(x) * * x != 0.0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_expint_E2_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_expint_E2_scaled(const double x); /* E_n_scaled(x) := exp(x) E_n(x) * * x != 0.0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_expint_En_scaled_e(const int n, const double x, gsl_sf_result * result); double gsl_sf_expint_En_scaled(const int n, const double x); /* Ei(x) := - PV Integrate[ Exp[-t]/t, {t,-x,Infinity}] * := PV Integrate[ Exp[t]/t, {t,-Infinity,x}] * * x != 0.0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_expint_Ei_e(const double x, gsl_sf_result * result); double gsl_sf_expint_Ei(const double x); /* Ei_scaled(x) := exp(-x) Ei(x) * * x != 0.0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_expint_Ei_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_expint_Ei_scaled(const double x); /* Shi(x) := Integrate[ Sinh[t]/t, {t,0,x}] * * exceptions: GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_Shi_e(const double x, gsl_sf_result * result); double gsl_sf_Shi(const double x); /* Chi(x) := Re[ M_EULER + log(x) + Integrate[(Cosh[t]-1)/t, {t,0,x}] ] * * x != 0.0 * exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW */ int gsl_sf_Chi_e(const double x, gsl_sf_result * result); double gsl_sf_Chi(const double x); /* Ei_3(x) := Integral[ Exp[-t^3], {t,0,x}] * * x >= 0.0 * exceptions: GSL_EDOM */ int gsl_sf_expint_3_e(const double x, gsl_sf_result * result); double gsl_sf_expint_3(double x); /* Si(x) := Integrate[ Sin[t]/t, {t,0,x}] * * exceptions: none */ int gsl_sf_Si_e(const double x, gsl_sf_result * result); double gsl_sf_Si(const double x); /* Ci(x) := -Integrate[ Cos[t]/t, {t,x,Infinity}] * * x > 0.0 * exceptions: GSL_EDOM */ int gsl_sf_Ci_e(const double x, gsl_sf_result * result); double gsl_sf_Ci(const double x); /* AtanInt(x) := Integral[ Arctan[t]/t, {t,0,x}] * * * exceptions: */ int gsl_sf_atanint_e(const double x, gsl_sf_result * result); double gsl_sf_atanint(const double x); __END_DECLS #endif /* __GSL_SF_EXPINT_H__ */ gsl/specfunc/erfc.c0000644000175000017500000002770413536674414012635 0ustar eddedd/* specfunc/erfc.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: J. Theiler (modifications by G. Jungman) */ /* * See Hart et al, Computer Approximations, John Wiley and Sons, New York (1968) * (This applies only to the erfc8 stuff, which is the part * of the original code that survives. I have replaced much of * the other stuff with Chebyshev fits. These are simpler and * more precise than the original approximations. [GJ]) */ #include #include #include #include #include #include "check.h" #include "chebyshev.h" #include "cheb_eval.c" #define LogRootPi_ 0.57236494292470008706 static double erfc8_sum(double x) { /* estimates erfc(x) valid for 8 < x < 100 */ /* This is based on index 5725 in Hart et al */ static double P[] = { 2.97886562639399288862, 7.409740605964741794425, 6.1602098531096305440906, 5.019049726784267463450058, 1.275366644729965952479585264, 0.5641895835477550741253201704 }; static double Q[] = { 3.3690752069827527677, 9.608965327192787870698, 17.08144074746600431571095, 12.0489519278551290360340491, 9.396034016235054150430579648, 2.260528520767326969591866945, 1.0 }; double num=0.0, den=0.0; int i; num = P[5]; for (i=4; i>=0; --i) { num = x*num + P[i]; } den = Q[6]; for (i=5; i>=0; --i) { den = x*den + Q[i]; } return num/den; } inline static double erfc8(double x) { double e; e = erfc8_sum(x); e *= exp(-x*x); return e; } inline static double log_erfc8(double x) { double e; e = erfc8_sum(x); e = log(e) - x*x; return e; } #if 0 /* Abramowitz+Stegun, 7.2.14 */ static double erfcasympsum(double x) { int i; double e = 1.; double coef = 1.; for (i=1; i<5; ++i) { /* coef *= -(2*i-1)/(2*x*x); ??? [GJ] */ coef *= -(2*i+1)/(i*(4*x*x*x*x)); e += coef; /* if (fabs(coef) < 1.0e-15) break; if (fabs(coef) > 1.0e10) break; [GJ]: These tests are not useful. This function is only used below. Took them out; they gum up the pipeline. */ } return e; } #endif /* 0 */ /* Abramowitz+Stegun, 7.1.5 */ static int erfseries(double x, gsl_sf_result * result) { double coef = x; double e = coef; double del; int k; for (k=1; k<30; ++k) { coef *= -x*x/k; del = coef/(2.0*k+1.0); e += del; } result->val = 2.0 / M_SQRTPI * e; result->err = 2.0 / M_SQRTPI * (fabs(del) + GSL_DBL_EPSILON); return GSL_SUCCESS; } /* Chebyshev fit for erfc((t+1)/2), -1 < t < 1 */ static double erfc_xlt1_data[20] = { 1.06073416421769980345174155056, -0.42582445804381043569204735291, 0.04955262679620434040357683080, 0.00449293488768382749558001242, -0.00129194104658496953494224761, -0.00001836389292149396270416979, 0.00002211114704099526291538556, -5.23337485234257134673693179020e-7, -2.78184788833537885382530989578e-7, 1.41158092748813114560316684249e-8, 2.72571296330561699984539141865e-9, -2.06343904872070629406401492476e-10, -2.14273991996785367924201401812e-11, 2.22990255539358204580285098119e-12, 1.36250074650698280575807934155e-13, -1.95144010922293091898995913038e-14, -6.85627169231704599442806370690e-16, 1.44506492869699938239521607493e-16, 2.45935306460536488037576200030e-18, -9.29599561220523396007359328540e-19 }; static cheb_series erfc_xlt1_cs = { erfc_xlt1_data, 19, -1, 1, 12 }; /* Chebyshev fit for erfc(x) exp(x^2), 1 < x < 5, x = 2t + 3, -1 < t < 1 */ static double erfc_x15_data[25] = { 0.44045832024338111077637466616, -0.143958836762168335790826895326, 0.044786499817939267247056666937, -0.013343124200271211203618353102, 0.003824682739750469767692372556, -0.001058699227195126547306482530, 0.000283859419210073742736310108, -0.000073906170662206760483959432, 0.000018725312521489179015872934, -4.62530981164919445131297264430e-6, 1.11558657244432857487884006422e-6, -2.63098662650834130067808832725e-7, 6.07462122724551777372119408710e-8, -1.37460865539865444777251011793e-8, 3.05157051905475145520096717210e-9, -6.65174789720310713757307724790e-10, 1.42483346273207784489792999706e-10, -3.00141127395323902092018744545e-11, 6.22171792645348091472914001250e-12, -1.26994639225668496876152836555e-12, 2.55385883033257575402681845385e-13, -5.06258237507038698392265499770e-14, 9.89705409478327321641264227110e-15, -1.90685978789192181051961024995e-15, 3.50826648032737849245113757340e-16 }; static cheb_series erfc_x15_cs = { erfc_x15_data, 24, -1, 1, 16 }; /* Chebyshev fit for erfc(x) x exp(x^2), 5 < x < 10, x = (5t + 15)/2, -1 < t < 1 */ static double erfc_x510_data[20] = { 1.11684990123545698684297865808, 0.003736240359381998520654927536, -0.000916623948045470238763619870, 0.000199094325044940833965078819, -0.000040276384918650072591781859, 7.76515264697061049477127605790e-6, -1.44464794206689070402099225301e-6, 2.61311930343463958393485241947e-7, -4.61833026634844152345304095560e-8, 8.00253111512943601598732144340e-9, -1.36291114862793031395712122089e-9, 2.28570483090160869607683087722e-10, -3.78022521563251805044056974560e-11, 6.17253683874528285729910462130e-12, -9.96019290955316888445830597430e-13, 1.58953143706980770269506726000e-13, -2.51045971047162509999527428316e-14, 3.92607828989125810013581287560e-15, -6.07970619384160374392535453420e-16, 9.12600607264794717315507477670e-17 }; static cheb_series erfc_x510_cs = { erfc_x510_data, 19, -1, 1, 12 }; #if 0 inline static double erfc_asymptotic(double x) { return exp(-x*x)/x * erfcasympsum(x) / M_SQRTPI; } inline static double log_erfc_asymptotic(double x) { return log(erfcasympsum(x)/x) - x*x - LogRootPi_; } #endif /* 0 */ /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_erfc_e(double x, gsl_sf_result * result) { const double ax = fabs(x); double e_val, e_err; /* CHECK_POINTER(result) */ if(ax <= 1.0) { double t = 2.0*ax - 1.0; gsl_sf_result c; cheb_eval_e(&erfc_xlt1_cs, t, &c); e_val = c.val; e_err = c.err; } else if(ax <= 5.0) { double ex2 = exp(-x*x); double t = 0.5*(ax-3.0); gsl_sf_result c; cheb_eval_e(&erfc_x15_cs, t, &c); e_val = ex2 * c.val; e_err = ex2 * (c.err + 2.0*fabs(x)*GSL_DBL_EPSILON); } else if(ax < 10.0) { double exterm = exp(-x*x) / ax; double t = (2.0*ax - 15.0)/5.0; gsl_sf_result c; cheb_eval_e(&erfc_x510_cs, t, &c); e_val = exterm * c.val; e_err = exterm * (c.err + 2.0*fabs(x)*GSL_DBL_EPSILON + GSL_DBL_EPSILON); } else { e_val = erfc8(ax); e_err = (x*x + 1.0) * GSL_DBL_EPSILON * fabs(e_val); } if(x < 0.0) { result->val = 2.0 - e_val; result->err = e_err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); } else { result->val = e_val; result->err = e_err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); } return GSL_SUCCESS; } int gsl_sf_log_erfc_e(double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x*x < 10.0*GSL_ROOT6_DBL_EPSILON) { const double y = x / M_SQRTPI; /* series for -1/2 Log[Erfc[Sqrt[Pi] y]] */ const double c3 = (4.0 - M_PI)/3.0; const double c4 = 2.0*(1.0 - M_PI/3.0); const double c5 = -0.001829764677455021; /* (96.0 - 40.0*M_PI + 3.0*M_PI*M_PI)/30.0 */ const double c6 = 0.02629651521057465; /* 2.0*(120.0 - 60.0*M_PI + 7.0*M_PI*M_PI)/45.0 */ const double c7 = -0.01621575378835404; const double c8 = 0.00125993961762116; const double c9 = 0.00556964649138; const double c10 = -0.0045563339802; const double c11 = 0.0009461589032; const double c12 = 0.0013200243174; const double c13 = -0.00142906; const double c14 = 0.00048204; double series = c8 + y*(c9 + y*(c10 + y*(c11 + y*(c12 + y*(c13 + c14*y))))); series = y*(1.0 + y*(1.0 + y*(c3 + y*(c4 + y*(c5 + y*(c6 + y*(c7 + y*series))))))); result->val = -2.0 * series; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } /* don't like use of log1p(); added above series stuff for small x instead, should be ok [GJ] else if (fabs(x) < 1.0) { gsl_sf_result result_erf; gsl_sf_erf_e(x, &result_erf); result->val = log1p(-result_erf.val); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } */ else if(x > 8.0) { result->val = log_erfc8(x); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { gsl_sf_result result_erfc; gsl_sf_erfc_e(x, &result_erfc); result->val = log(result_erfc.val); result->err = fabs(result_erfc.err / result_erfc.val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_erf_e(double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(fabs(x) < 1.0) { return erfseries(x, result); } else { gsl_sf_result result_erfc; gsl_sf_erfc_e(x, &result_erfc); result->val = 1.0 - result_erfc.val; result->err = result_erfc.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_erf_Z_e(double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ { const double ex2 = exp(-x*x/2.0); result->val = ex2 / (M_SQRT2 * M_SQRTPI); result->err = fabs(x * result->val) * GSL_DBL_EPSILON; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); CHECK_UNDERFLOW(result); return GSL_SUCCESS; } } int gsl_sf_erf_Q_e(double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ { gsl_sf_result result_erfc; int stat = gsl_sf_erfc_e(x/M_SQRT2, &result_erfc); result->val = 0.5 * result_erfc.val; result->err = 0.5 * result_erfc.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat; } } int gsl_sf_hazard_e(double x, gsl_sf_result * result) { if(x < 25.0) { gsl_sf_result result_ln_erfc; const int stat_l = gsl_sf_log_erfc_e(x/M_SQRT2, &result_ln_erfc); const double lnc = -0.22579135264472743236; /* ln(sqrt(2/pi)) */ const double arg = lnc - 0.5*x*x - result_ln_erfc.val; const int stat_e = gsl_sf_exp_e(arg, result); result->err += 3.0 * (1.0 + fabs(x)) * GSL_DBL_EPSILON * fabs(result->val); result->err += fabs(result_ln_erfc.err * result->val); return GSL_ERROR_SELECT_2(stat_l, stat_e); } else { const double ix2 = 1.0/(x*x); const double corrB = 1.0 - 9.0*ix2 * (1.0 - 11.0*ix2); const double corrM = 1.0 - 5.0*ix2 * (1.0 - 7.0*ix2 * corrB); const double corrT = 1.0 - ix2 * (1.0 - 3.0*ix2*corrM); result->val = x / corrT; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_erfc(double x) { EVAL_RESULT(gsl_sf_erfc_e(x, &result)); } double gsl_sf_log_erfc(double x) { EVAL_RESULT(gsl_sf_log_erfc_e(x, &result)); } double gsl_sf_erf(double x) { EVAL_RESULT(gsl_sf_erf_e(x, &result)); } double gsl_sf_erf_Z(double x) { EVAL_RESULT(gsl_sf_erf_Z_e(x, &result)); } double gsl_sf_erf_Q(double x) { EVAL_RESULT(gsl_sf_erf_Q_e(x, &result)); } double gsl_sf_hazard(double x) { EVAL_RESULT(gsl_sf_hazard_e(x, &result)); } gsl/specfunc/bessel_K0.c0000644000175000017500000001313713536674414013520 0ustar eddedd/* specfunc/bessel_K0.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * Copyright (C) 2016 Pavel Holoborodko, Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include "error.h" #include "chebyshev.h" #include "cheb_eval.c" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* Minimax rational approximation for [0,1), peak relative error = 2.04*GSL_DBL_EPSILON. Source: http://www.advanpix.com/?p=3812 */ static double k0_poly[8] = { 1.1593151565841244842077226e-01, 2.7898287891460317300886539e-01, 2.5248929932161220559969776e-02, 8.4603509072136578707676406e-04, 1.4914719243067801775856150e-05, 1.6271068931224552553548933e-07, 1.2082660336282566759313543e-09, 6.6117104672254184399933971e-12 }; static double i0_poly[7] = { 1.0000000000000000044974165e+00, 2.4999999999999822316775454e-01, 2.7777777777892149148858521e-02, 1.7361111083544590676709592e-03, 6.9444476047072424198677755e-05, 1.9288265756466775034067979e-06, 3.9908220583262192851839992e-08 }; /* Chebyshev expansion for [1,8], peak relative error = 1.28*GSL_DBL_EPSILON. Source: Pavel Holoborodko. */ static double ak0_data[24] = { -3.28737867094650101e-02, -4.49369057710236880e-02, +2.98149992004308095e-03, -3.03693649396187920e-04, +3.91085569307646836e-05, -5.86872422399215952e-06, +9.82873709937322009e-07, -1.78978645055651171e-07, +3.48332306845240957e-08, -7.15909210462546599e-09, +1.54019930048919494e-09, -3.44555485579194210e-10, +7.97356101783753023e-11, -1.90090968913069735e-11, +4.65295609304114621e-12, -1.16614287433470780e-12, +2.98554375218596891e-13, -7.79276979512292169e-14, +2.07027467168948402e-14, -5.58987860393825313e-15, +1.53202965950646914e-15, -4.25737536712188186e-16, +1.19840238501357389e-16, -3.41407346762502397e-17 }; static cheb_series ak0_cs = { ak0_data, 23, -1, 1, 10 }; /* Chebyshev expansion for [8,inf), peak relative error = 1.25*GSL_DBL_EPSILON. Source: SLATEC/dbsk0e.f */ static double ak02_data[14] = { -.1201869826307592240E-1, -.9174852691025695311E-2, +.1444550931775005821E-3, -.4013614175435709729E-5, +.1567831810852310673E-6, -.7770110438521737710E-8, +.4611182576179717883E-9, -.3158592997860565771E-10, +.2435018039365041128E-11, -.2074331387398347898E-12, +.1925787280589917085E-13, -.1927554805838956104E-14, +.2062198029197818278E-15, -.2341685117579242403E-16 }; static cheb_series ak02_cs = { ak02_data, 13, -1, 1, 8 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_K0_scaled_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if(x < 1.0) { const double lx = log(x); const double ex = exp(x); const double x2 = x*x; result->val = ex * (gsl_poly_eval(k0_poly,8,x2)-lx*(1.0+0.25*x2*gsl_poly_eval(i0_poly,7,0.25*x2))); result->err = ex * (1.6+fabs(lx)*0.6) * GSL_DBL_EPSILON; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x <= 8.0) { const double sx = sqrt(x); gsl_sf_result c; cheb_eval_e(&ak0_cs, (16.0/x-9.0)/7.0, &c); result->val = (1.203125 + c.val) / sx; /* 1.203125 = 77/64 */ result->err = c.err / sx; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double sx = sqrt(x); gsl_sf_result c; cheb_eval_e(&ak02_cs, 16.0/x-1.0, &c); result->val = (1.25 + c.val) / sx; result->err = (c.err + GSL_DBL_EPSILON) / sx; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_bessel_K0_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if(x < 1.0) { const double lx = log(x); const double x2 = x*x; result->val = gsl_poly_eval(k0_poly,8,x2)-lx*(1.0+0.25*x2*gsl_poly_eval(i0_poly,7,0.25*x2)); result->err = (1.6+fabs(lx)*0.6) * GSL_DBL_EPSILON; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { gsl_sf_result K0_scaled; int stat_K0 = gsl_sf_bessel_K0_scaled_e(x, &K0_scaled); int stat_e = gsl_sf_exp_mult_err_e(-x, GSL_DBL_EPSILON*fabs(x), K0_scaled.val, K0_scaled.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_K0); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_K0_scaled(const double x) { EVAL_RESULT(gsl_sf_bessel_K0_scaled_e(x, &result)); } double gsl_sf_bessel_K0(const double x) { EVAL_RESULT(gsl_sf_bessel_K0_e(x, &result)); } gsl/specfunc/bessel_k.c0000644000175000017500000001445313536674414013502 0ustar eddedd/* specfunc/bessel_k.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include "error.h" #include "check.h" #include "bessel.h" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* [Abramowitz+Stegun, 10.2.4 + 10.2.6] * with lmax=15, precision ~ 15D for x < 3 * * assumes l >= 1 */ static int bessel_kl_scaled_small_x(int l, const double x, gsl_sf_result * result) { gsl_sf_result num_fact; double den = gsl_sf_pow_int(x, l+1); int stat_df = gsl_sf_doublefact_e((unsigned int) (2*l-1), &num_fact); if(stat_df != GSL_SUCCESS || den == 0.0) { OVERFLOW_ERROR(result); } else { const int lmax = 50; gsl_sf_result ipos_term; double ineg_term; double sgn = (GSL_IS_ODD(l) ? -1.0 : 1.0); double ex = exp(x); double t = 0.5*x*x; double sum = 1.0; double t_coeff = 1.0; double t_power = 1.0; double delta; int stat_il; int i; for(i=1; ival = -sgn * 0.5*M_PI * (ex*ipos_term.val - ineg_term); result->val *= ex; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_il; } } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_k0_scaled_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else { result->val = M_PI/(2.0*x); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); CHECK_UNDERFLOW(result); return GSL_SUCCESS; } } int gsl_sf_bessel_k1_scaled_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if(x < (M_SQRTPI+1.0)/(M_SQRT2*GSL_SQRT_DBL_MAX)) { OVERFLOW_ERROR(result); } else { result->val = M_PI/(2.0*x) * (1.0 + 1.0/x); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); CHECK_UNDERFLOW(result); return GSL_SUCCESS; } } int gsl_sf_bessel_k2_scaled_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if(x < 2.0/GSL_ROOT3_DBL_MAX) { OVERFLOW_ERROR(result); } else { result->val = M_PI/(2.0*x) * (1.0 + 3.0/x * (1.0 + 1.0/x)); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); CHECK_UNDERFLOW(result); return GSL_SUCCESS; } } int gsl_sf_bessel_kl_scaled_e(int l, const double x, gsl_sf_result * result) { if(l < 0 || x <= 0.0) { DOMAIN_ERROR(result); } else if(l == 0) { return gsl_sf_bessel_k0_scaled_e(x, result); } else if(l == 1) { return gsl_sf_bessel_k1_scaled_e(x, result); } else if(l == 2) { return gsl_sf_bessel_k2_scaled_e(x, result); } else if(x < 3.0) { return bessel_kl_scaled_small_x(l, x, result); } else if(GSL_ROOT3_DBL_EPSILON * x > (l*l + l + 1)) { int status = gsl_sf_bessel_Knu_scaled_asympx_e(l + 0.5, x, result); double pre = sqrt((0.5*M_PI)/x); result->val *= pre; result->err *= pre; return status; } else if(GSL_MIN(0.29/(l*l+1.0), 0.5/(l*l+1.0+x*x)) < GSL_ROOT3_DBL_EPSILON) { int status = gsl_sf_bessel_Knu_scaled_asymp_unif_e(l + 0.5, x, result); double pre = sqrt((0.5*M_PI)/x); result->val *= pre; result->err *= pre; return status; } else { /* recurse upward */ gsl_sf_result r_bk; gsl_sf_result r_bkm; int stat_1 = gsl_sf_bessel_k1_scaled_e(x, &r_bk); int stat_0 = gsl_sf_bessel_k0_scaled_e(x, &r_bkm); double bkp; double bk = r_bk.val; double bkm = r_bkm.val; int j; for(j=1; jval = bk; result->err = fabs(bk) * (fabs(r_bk.err/r_bk.val) + fabs(r_bkm.err/r_bkm.val)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_1, stat_0); } } int gsl_sf_bessel_kl_scaled_array(const int lmax, const double x, double * result_array) { if(lmax < 0 || x <= 0.0) { GSL_ERROR("domain error", GSL_EDOM); } else if (lmax == 0) { gsl_sf_result result; int stat = gsl_sf_bessel_k0_scaled_e(x, &result); result_array[0] = result.val; return stat; } else { int ell; double kellp1, kell, kellm1; gsl_sf_result r_kell; gsl_sf_result r_kellm1; gsl_sf_bessel_k1_scaled_e(x, &r_kell); gsl_sf_bessel_k0_scaled_e(x, &r_kellm1); kell = r_kell.val; kellm1 = r_kellm1.val; result_array[0] = kellm1; result_array[1] = kell; for(ell = 1; ell < lmax; ell++) { kellp1 = (2*ell+1)/x * kell + kellm1; result_array[ell+1] = kellp1; kellm1 = kell; kell = kellp1; } return GSL_SUCCESS; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_k0_scaled(const double x) { EVAL_RESULT(gsl_sf_bessel_k0_scaled_e(x, &result)); } double gsl_sf_bessel_k1_scaled(const double x) { EVAL_RESULT(gsl_sf_bessel_k1_scaled_e(x, &result)); } double gsl_sf_bessel_k2_scaled(const double x) { EVAL_RESULT(gsl_sf_bessel_k2_scaled_e(x, &result)); } double gsl_sf_bessel_kl_scaled(const int l, const double x) { EVAL_RESULT(gsl_sf_bessel_kl_scaled_e(l, x, &result)); } gsl/specfunc/gsl_sf_log.h0000644000175000017500000000401613536674414014030 0ustar eddedd/* specfunc/gsl_sf_log.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_LOG_H__ #define __GSL_SF_LOG_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Provide a logarithm function with GSL semantics. * * exceptions: GSL_EDOM */ int gsl_sf_log_e(const double x, gsl_sf_result * result); double gsl_sf_log(const double x); /* Log(|x|) * * exceptions: GSL_EDOM */ int gsl_sf_log_abs_e(const double x, gsl_sf_result * result); double gsl_sf_log_abs(const double x); /* Complex Logarithm * exp(lnr + I theta) = zr + I zi * Returns argument in [-pi,pi]. * * exceptions: GSL_EDOM */ int gsl_sf_complex_log_e(const double zr, const double zi, gsl_sf_result * lnr, gsl_sf_result * theta); /* Log(1 + x) * * exceptions: GSL_EDOM */ int gsl_sf_log_1plusx_e(const double x, gsl_sf_result * result); double gsl_sf_log_1plusx(const double x); /* Log(1 + x) - x * * exceptions: GSL_EDOM */ int gsl_sf_log_1plusx_mx_e(const double x, gsl_sf_result * result); double gsl_sf_log_1plusx_mx(const double x); __END_DECLS #endif /* __GSL_SF_LOG_H__ */ gsl/specfunc/test_airy.c0000644000175000017500000002220413536674414013707 0ustar eddedd/* specfunc/test_airy.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include "test_sf.h" int test_airy(void) { int s = 0; int m = GSL_MODE_DEFAULT; gsl_sf_result r; /** functions */ TEST_SF(s, gsl_sf_airy_Ai_e, (-500.0, m, &r), 0.0725901201040411396, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_e, (-5.0, m, &r), 0.3507610090241142, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_e, (-0.3000000000000094, m, &r), 0.4309030952855831, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_e, (0.6999999999999907, m, &r), 0.1891624003981519, TEST_TOL0, GSL_SUCCESS); /* This original value seemed to be slightly inaccurate in the last place. I recomputed it with pari to get the new value which end in 885 instead of 882 */ /* TEST_SF(s, gsl_sf_airy_Ai_e, (1.649999999999991, m, &r), 0.05831058618720882, TEST_TOL0, GSL_SUCCESS); */ TEST_SF(s, gsl_sf_airy_Ai_e, (1.649999999999991, m, &r), 0.0583105861872088521, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_e, (2.54999999999999, m, &r), 0.01446149513295428, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_e, (3.499999999999987, m, &r), 0.002584098786989702, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_e, (5.39999999999998, m, &r), 4.272986169411866e-05, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_scaled_e, (-5.0, m, &r), 0.3507610090241142, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_scaled_e, (0.6999999999999907, m, &r), 0.2795125667681217, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_scaled_e, (1.649999999999991, m, &r), 0.2395493001442741, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_scaled_e, (2.54999999999999, m, &r), 0.2183658595899388, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_scaled_e, (3.499999999999987, m, &r), 0.2032920808163519, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_scaled_e, (5.39999999999998, m, &r), 0.1836050093282229, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_e, (-500.0, m, &r), -0.094688570132991028, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_e, (-5.0, m, &r), -0.1383691349016005, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_e, (0.6999999999999907, m, &r), 0.9733286558781599, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_e, (1.649999999999991, m, &r), 2.196407956850028, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_e, (2.54999999999999, m, &r), 6.973628612493443, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_e, (3.499999999999987, m, &r), 33.05550675461069, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_e, (5.39999999999998, m, &r), 1604.476078241272, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_scaled_e, (-5.0, m, &r), -0.1383691349016005, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_scaled_e, (0.6999999999999907, m, &r), 0.6587080754582302, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_scaled_e, (1.649999999999991, m, &r), 0.5346449995597539, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_scaled_e, (2.54999999999999, m, &r), 0.461835455542297, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_scaled_e, (3.499999999999987, m, &r), 0.4201771882353061, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_scaled_e, (5.39999999999998, m, &r), 0.3734050675720473, TEST_TOL0, GSL_SUCCESS); /** derivatives */ TEST_SF(s, gsl_sf_airy_Ai_deriv_e, (-5.0, m, &r), 0.3271928185544435, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_deriv_e, (-0.5500000000000094, m, &r), -0.1914604987143629, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_deriv_e, (0.4999999999999906, m, &r), -0.2249105326646850, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_deriv_e, (1.899999999999992, m, &r), -0.06043678178575718, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_deriv_e, (3.249999999999988, m, &r), -0.007792687926790889, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_deriv_e, (5.199999999999981, m, &r), -0.0001589434526459543, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_deriv_scaled_e, (-5.0, m, &r), 0.3271928185544435, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_deriv_scaled_e, (0.5499999999999906, m, &r), -0.2874057279170166, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_deriv_scaled_e, (1.499999999999991, m, &r), -0.3314199796863637, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_deriv_scaled_e, (2.49999999999999, m, &r), -0.3661089384751620, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_deriv_scaled_e, (3.649999999999986, m, &r), -0.3974033831453963, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Ai_deriv_scaled_e, (6.299999999999977, m, &r), -0.4508799189585947, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_deriv_e, (-5.0, m, &r), 0.778411773001899, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_deriv_e, (-0.5500000000000094, m, &r), 0.5155785358765014, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_deriv_e, (0.4999999999999906, m, &r), 0.5445725641405883, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_deriv_e, (1.899999999999992, m, &r), 3.495165862891568, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_deriv_e, (3.249999999999988, m, &r), 36.55485149250338, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_deriv_e, (5.199999999999981, m, &r), 2279.748293583233, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_deriv_scaled_e, (-5.0, m, &r), 0.778411773001899, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_deriv_scaled_e, (0.5499999999999906, m, &r), 0.4322811281817566, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_deriv_scaled_e, (1.499999999999991, m, &r), 0.5542307563918037, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_deriv_scaled_e, (2.49999999999999, m, &r), 0.6755384441644985, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_deriv_scaled_e, (3.649999999999986, m, &r), 0.7613959373000228, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_Bi_deriv_scaled_e, (6.299999999999977, m, &r), 0.8852064139737571, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Ai_e, (2, &r), -4.087949444130970617, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Ai_e, (50, &r), -38.02100867725525443, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Ai_e, (100, &r), -60.45555727411669871, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Ai_e, (110, &r), -64.43135670991324811, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Bi_e, (2, &r), -3.271093302836352716, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Bi_e, (50, &r), -37.76583438165180116, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Bi_e, (100, &r), -60.25336482580837088, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Bi_e, (110, &r), -64.2355167606561537, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Bi_e, (111, &r), -64.6268994819519378, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Bi_e, (200, &r), -95.88699147356682665, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Ai_deriv_e, (2, &r), -3.248197582179836561, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Ai_deriv_e, (50, &r), -37.76565910053887108, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Ai_deriv_e, (100, &r), -60.25329596442479317, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Ai_deriv_e, (110, &r), -64.23545617243546956, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Ai_deriv_e, (1000, &r), -280.9378080358935071, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Bi_deriv_e, (2, &r), -4.073155089071828216, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Bi_deriv_e, (50, &r), -38.02083574095788210, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Bi_deriv_e, (100, &r), -60.45548887257140819, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Bi_deriv_e, (110, &r), -64.43129648944845060, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Bi_deriv_e, (111, &r), -64.82208737584206093, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Bi_deriv_e, (200, &r), -96.04731050310324450, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_airy_zero_Bi_deriv_e, (1000, &r), -281.0315164471118527, TEST_TOL0, GSL_SUCCESS); return s; } gsl/specfunc/gsl_sf_synchrotron.h0000644000175000017500000000327313536674414015643 0ustar eddedd/* specfunc/gsl_sf_synchrotron.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_SYNCHROTRON_H__ #define __GSL_SF_SYNCHROTRON_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* First synchrotron function: * synchrotron_1(x) = x Integral[ K_{5/3}(t), {t, x, Infinity}] * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_synchrotron_1_e(const double x, gsl_sf_result * result); double gsl_sf_synchrotron_1(const double x); /* Second synchroton function: * synchrotron_2(x) = x * K_{2/3}(x) * * exceptions: GSL_EDOM, GSL_EUNDRFLW */ int gsl_sf_synchrotron_2_e(const double x, gsl_sf_result * result); double gsl_sf_synchrotron_2(const double x); __END_DECLS #endif /* __GSL_SF_SYNCHROTRON_H__ */ gsl/specfunc/test_legendre.c0000644000175000017500000014435013536675317014542 0ustar eddedd/* specfunc/test_legendre.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004 Gerard Jungman * Copyright (C) 2013 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include "test_sf.h" static double test_legendre_dx(const size_t l) { const double dx_max = 0.4; double dx; if (l < 1000) dx = exp((double)l / 1000.0) / exp(2.0); else dx = dx_max; return dx; } /* test_legendre_dx() */ /* test_legendre_sum() This routine computes the sum: Sum_{m=0}^l [P(l,m)(x)]^2 This sum should equate to 1.0 for Schmidt semi-normalized ALFs for all l. */ static double test_legendre_sum(const size_t l, double *p) { double sum = 0.0; size_t idx; size_t m; for (m = 0; m <= l; ++m) { idx = gsl_sf_legendre_array_index(l, m); sum += p[idx] * p[idx]; } return sum; } /* test_legendre_sum() */ /* test_legendre_sum_deriv() This routine computes the sum: Sum_{m=0}^l P(l,m)(x) * dP(l,m)/dx which should equal 0 in the case of Schmidt normalized ALFs. */ static double test_legendre_sum_deriv(const int l, double *p, double *dp) { double sum = 0.0; size_t idx; int m; for (m = 0; m <= l; ++m) { idx = gsl_sf_legendre_array_index(l, m); sum += p[idx] * dp[idx]; } return sum; } /* test_legendre_sum_deriv() */ /* test_legendre_sum_deriv2() This routine computes the sum: Sum_{m=0}^l P(l,m)(x) * dP(l,m)/dx which should equal 0 in the case of Schmidt normalized ALFs. */ static double test_legendre_sum_deriv2(const int l, double *p, double *dp, double *d2p) { double sum = 0.0; int m; for (m = 0; m <= l; ++m) { size_t idx = gsl_sf_legendre_array_index(l, m); sum += dp[idx] * dp[idx] + p[idx] * d2p[idx]; } return sum; } /* test_legendre_sum_deriv2() */ static void test_value(const size_t lmax, const size_t l, const size_t m, const double *p, const double expected, const double tol, const char *desc, const char *desc2) { size_t idx = gsl_sf_legendre_array_index(l, m); double value; if (l > lmax) return; value = p[idx]; gsl_test_rel(value, expected, tol, "%s %s lmax=%zu l=%zu m=%zu", desc, desc2, lmax, l, m); } /* test_value() */ /* Y_{lm} = factor * S_{lm} */ static double test_factor_spharm(const size_t l, const size_t m) { double factor = sqrt( (2.0 * l + 1.0) / 4.0 / M_PI); if (m == 0) return factor; else return (factor / sqrt(2.0)); } /* test_factor_spharm() */ /* N_{lm} = factor * S_{lm} */ static double test_factor_full(const size_t l, const size_t m) { double factor = sqrt(l + 0.5); if (m == 0) return factor; else return (factor / sqrt(2.0)); } /* test_factor_full() */ /* test that p = factor * p_expected */ static int test_legendre_compare(const size_t lmax, const double *p_expected, const double *p, double (*factor)(const size_t l, const size_t m), const char *desc, const char *desc2) { size_t l, m; for (l = 0; l <= lmax; ++l) { for (m = 0; m <= l; ++m) { size_t idx = gsl_sf_legendre_array_index(l, m); double fac = (*factor)(l, m); if (fabs(p_expected[idx]) < GSL_DBL_MIN) continue; gsl_test_rel(p[idx] / fac, p_expected[idx], 1.0e-10, "%s %s l=%zu m=%zu", desc, desc2, l, m); } } return 0; } /* test_legendre_compare() */ static int test_legendre_schmidt(const size_t lmax, const double csphase, const char *desc) { int s = 0; const size_t nlm = gsl_sf_legendre_nlm(lmax); size_t l; double x, dx; double *p, *p2, *dp, *d2p, *p_alt, *dp_alt; size_t dim; size_t i; const gsl_sf_legendre_t norm = GSL_SF_LEGENDRE_SCHMIDT; dim = gsl_sf_legendre_array_n(lmax); p = malloc(sizeof(double) * dim); p2 = malloc(sizeof(double) * dim); dp = malloc(sizeof(double) * dim); d2p = malloc(sizeof(double) * dim); p_alt = malloc(sizeof(double) * dim); dp_alt = malloc(sizeof(double) * dim); /* test specific values */ x = 0.5; gsl_sf_legendre_array(norm, lmax, x, p); test_value(lmax, 0, 0, p, 1.000000000000000, 1.0e-10, desc, "x=0.5"); test_value(lmax, 1, 0, p, 0.500000000000000, 1.0e-10, desc, "x=0.5"); test_value(lmax, 1, 1, p, 0.866025403784439, 1.0e-10, desc, "x=0.5"); test_value(lmax, 2, 0, p, -0.125000000000000, 1.0e-10, desc, "x=0.5"); test_value(lmax, 2, 1, p, 0.750000000000000, 1.0e-10, desc, "x=0.5"); test_value(lmax, 2, 2, p, 0.649519052838329, 1.0e-10, desc, "x=0.5"); test_value(lmax, 3, 0, p, -0.437500000000000, 1.0e-10, desc, "x=0.5"); test_value(lmax, 3, 2, p, 0.726184377413891, 1.0e-10, desc, "x=0.5"); test_value(lmax, 3, 3, p, 0.513489897661093, 1.0e-10, desc, "x=0.5"); x = 0.1; gsl_sf_legendre_array(norm, lmax, x, p); test_value(lmax, 2700, 500, p, -7.421910573369699e-3, 1.0e-10, desc, "x=0.1"); test_value(lmax, 2700, 2500, p, 2.717612388452281e-2, 1.0e-10, desc, "x=0.1"); test_value(lmax, 2700, 2700, p, 1.887509917445211e-7, 1.0e-10, desc, "x=0.1"); x = 0.15; gsl_sf_legendre_deriv_array(norm, lmax, x, p, dp); test_value(lmax, 0, 0, dp, 0.000000000000000, 1.0e-10, desc, "deriv x=0.15"); test_value(lmax, 1, 0, dp, 1.000000000000000, 1.0e-10, desc, "deriv x=0.15"); test_value(lmax, 1, 1, dp, -0.151716521227252, 1.0e-10, desc, "deriv x=0.15"); test_value(lmax, 2, 1, dp, 1.67303727048739, 1.0e-10, desc, "deriv x=0.15"); x = 0.23; gsl_sf_legendre_deriv2_array(norm, lmax, x, p, dp, d2p); test_value(lmax, 0, 0, d2p, 0.000000000000000, 1.0e-10, desc, "deriv2 x=0.23"); test_value(lmax, 1, 0, d2p, 0.000000000000000, 1.0e-10, desc, "deriv2 x=0.23"); test_value(lmax, 1, 1, d2p, -1.08494130865644, 1.0e-10, desc, "deriv2 x=0.23"); test_value(lmax, 2, 0, d2p, 3.000000000000000, 1.0e-10, desc, "deriv2 x=0.23"); test_value(lmax, 2, 1, d2p, -1.25090188696335, 1.0e-10, desc, "deriv2 x=0.23"); /* test array routines */ dx = test_legendre_dx(lmax); for (x = -1.0; x <= 1.0; x += dx) { s += gsl_sf_legendre_array_e(norm, lmax, x, csphase, p); for (l = 0; l <= lmax; ++l) { double sum = test_legendre_sum(l, p); double rhs = 1.0; gsl_test_rel(sum, rhs, 1.0e-10, "%s l=%zu, x=%f, sum=%.12e", desc, l, x, sum); } } /* test deriv array routines */ for (x = -1.0 + dx; x < 1.0 - dx; x += dx) { double u = sqrt((1.0 - x) * (1.0 + x)); double uinv = 1.0 / u; s += gsl_sf_legendre_array(norm, lmax, x, p2); s += gsl_sf_legendre_deriv_array(norm, lmax, x, p, dp); s += gsl_sf_legendre_deriv_alt_array(norm, lmax, x, p_alt, dp_alt); for (i = 0; i < nlm; ++i) { if (fabs(p2[i]) < GSL_DBL_MIN) continue; /* check p = p_alt = p2 */ gsl_test_rel(p[i], p2[i], 1.0e-10, "%s deriv i=%zu", desc, i); gsl_test_rel(p_alt[i], p2[i], 1.0e-10, "%s deriv_alt i=%zu", desc, i); /* check dp = -1/u*dp_alt */ gsl_test_rel(-uinv * dp_alt[i], dp[i], 1.0e-10, "%s deriv_alt x=%f i=%zu", desc, x, i); } for (l = 0; l <= lmax; ++l) { double sum = test_legendre_sum_deriv(l, p, dp); gsl_test_abs(sum, 0.0, 1.0e-10, "%s deriv l=%zu, x=%f, sum=%.12e", desc, l, x, sum); } } /* test deriv2 array routines */ for (x = -1.0 + dx; x < 1.0 - dx; x += dx) { s += gsl_sf_legendre_array(norm, lmax, x, p2); s += gsl_sf_legendre_deriv2_array(norm, lmax, x, p, dp, d2p); /* check p = p2 */ for (i = 0; i < nlm; ++i) { if (fabs(p2[i]) < 1.0e3 * GSL_DBL_EPSILON) gsl_test_abs(p[i], p2[i], 1.0e-10, "%s deriv2 i=%zu", desc, i); else gsl_test_rel(p[i], p2[i], 1.0e-10, "%s deriv2 i=%zu", desc, i); } for (l = 0; l <= lmax; ++l) { double sum = test_legendre_sum_deriv(l, p, dp); double sum2 = test_legendre_sum_deriv2(l, p, dp, d2p); gsl_test_abs(sum, 0.0, 1.0e-10, "%s deriv2 l=%zu, x=%f, sum=%.12e", desc, l, x, sum); gsl_test_abs(sum2, 0.0, 1.0e-6, "%s deriv2 l=%zu, x=%f, sum=%.12e", desc, l, x, sum2); } } free(p); free(p2); free(dp); free(d2p); free(p_alt); free(dp_alt); return s; } /* test_legendre_schmidt() */ /* test other normalizations (other than schmidt) */ static int test_legendre_norm(const gsl_sf_legendre_t norm_type, const size_t lmax, const double csphase, const char *desc) { int s = 0; double x, dx; double *p_schmidt, *dp_schmidt, *d2p_schmidt; double *p, *dp, *d2p; size_t dim; double (*factor)(const size_t l, const size_t m) = NULL; dim = gsl_sf_legendre_array_n(lmax); p = malloc(sizeof(double) * dim); dp = malloc(sizeof(double) * dim); d2p = malloc(sizeof(double) * dim); p_schmidt = malloc(sizeof(double) * dim); dp_schmidt = malloc(sizeof(double) * dim); d2p_schmidt = malloc(sizeof(double) * dim); if (norm_type == GSL_SF_LEGENDRE_SPHARM) { factor = &test_factor_spharm; } else if (norm_type == GSL_SF_LEGENDRE_FULL) { factor = &test_factor_full; /* test specific values (computed from GNU octave) */ x = 0.45; s += gsl_sf_legendre_array(norm_type, lmax, x, p); test_value(lmax, 0, 0, p, 0.707106781186548, 1.0e-10, desc, "x=0.45"); test_value(lmax, 1, 0, p, 0.551135192126215, 1.0e-10, desc, "x=0.45"); test_value(lmax, 1, 1, p, 0.773385414912901, 1.0e-10, desc, "x=0.45"); test_value(lmax, 2, 0, p, -0.310298495404022, 1.0e-10, desc, "x=0.45"); test_value(lmax, 2, 1, p, 0.778204062248457, 1.0e-10, desc, "x=0.45"); test_value(lmax, 2, 2, p, 0.772176054650104, 1.0e-10, desc, "x=0.45"); test_value(lmax, 3, 0, p, -0.83661120632398589, 1.0e-10, desc, "x=0.45"); test_value(lmax, 3, 1, p, 0.00904294765791280, 1.0e-10, desc, "x=0.45"); test_value(lmax, 3, 2, p, 0.91934361403343767, 1.0e-10, desc, "x=0.45"); test_value(lmax, 3, 3, p, 0.74482641545541073, 1.0e-10, desc, "x=0.45"); } /* * test the scale factors between the Schmidts and these * normalized functions */ dx = test_legendre_dx(lmax); for (x = -1.0; x <= 1.0; x += dx) { s += gsl_sf_legendre_array_e(GSL_SF_LEGENDRE_SCHMIDT, lmax, x, csphase, p_schmidt); s += gsl_sf_legendre_array_e(norm_type, lmax, x, csphase, p); test_legendre_compare(lmax, p_schmidt, p, factor, desc, "p"); } /* test derivatives */ for (x = -1.0 + dx; x < 1.0 - dx; x += dx) { s += gsl_sf_legendre_deriv_array_e(GSL_SF_LEGENDRE_SCHMIDT, lmax, x, csphase, p_schmidt, dp_schmidt); s += gsl_sf_legendre_deriv_array_e(norm_type, lmax, x, csphase, p, dp); test_legendre_compare(lmax, p_schmidt, p, factor, desc, "deriv p"); test_legendre_compare(lmax, dp_schmidt, dp, factor, desc, "deriv dp"); s += gsl_sf_legendre_deriv2_array_e(GSL_SF_LEGENDRE_SCHMIDT, lmax, x, csphase, p_schmidt, dp_schmidt, d2p_schmidt); s += gsl_sf_legendre_deriv2_array_e(norm_type, lmax, x, csphase, p, dp, d2p); test_legendre_compare(lmax, p_schmidt, p, factor, desc, "deriv2 p"); test_legendre_compare(lmax, dp_schmidt, dp, factor, desc, "deriv2 dp"); test_legendre_compare(lmax, d2p_schmidt, d2p, factor, desc, "deriv2 d2p"); } free(p); free(dp); free(d2p); free(p_schmidt); free(dp_schmidt); free(d2p_schmidt); return s; } /* test_legendre_norm() */ /* test_legendre_unnorm() This routine tests the unnormalized ALFs using the relation S(l,m)(x) = a(l,m) * P(l,m)(x) where a(l,0) = 1 a(l,1) = -sqrt(2)/sqrt(l * (l+1)) a(l,m+1) = a(l,m) / sqrt((l+m+1) * (l-m)), m > 1 and S(l,m) are the Schmidt semi-normalized ALFs */ static int test_legendre_unnorm(const size_t lmax_orig, const char *desc) { int s = 0; const int lmax = GSL_MIN(lmax_orig, 140); size_t l, m; double x, dx; double *p, *dp, *d2p, *p2; double *p_schmidt, *dp_schmidt, *d2p_schmidt; size_t dim; dim = gsl_sf_legendre_array_n(lmax); p = malloc(sizeof(double) * dim); dp = malloc(sizeof(double) * dim); d2p = malloc(sizeof(double) * dim); p2 = malloc(sizeof(double) * dim); p_schmidt = malloc(sizeof(double) * dim); dp_schmidt = malloc(sizeof(double) * dim); d2p_schmidt = malloc(sizeof(double) * dim); dx = test_legendre_dx(lmax); for (x = -1.0 + dx; x < 1.0 - dx; x += dx) { gsl_sf_legendre_deriv2_array(GSL_SF_LEGENDRE_SCHMIDT, lmax, x, p_schmidt, dp_schmidt, d2p_schmidt); gsl_sf_legendre_deriv2_array(GSL_SF_LEGENDRE_NONE, lmax, x, p, dp, d2p); for (l = 0; l <= (size_t) lmax; ++l) { double a_lm = sqrt(2.0 / (double)l / (l + 1.0)); size_t idx; /* test S(l,0) = P(l,0) */ idx = gsl_sf_legendre_array_index(l, 0); gsl_test_rel(p[idx], p_schmidt[idx], 1.0e-10, "legendre unnorm l=%zu, m=0, x=%f", l, x); gsl_test_rel(dp[idx], dp_schmidt[idx], 1.0e-10, "legendre unnorm deriv l=%zu, m=0, x=%f", l, x); if (l > 1) { gsl_test_rel(d2p[idx], d2p_schmidt[idx], 1.0e-10, "legendre unnorm deriv2 l=%zu, m=0, x=%f", l, x); } else { gsl_test_abs(d2p[idx], d2p_schmidt[idx], 1.0e-10, "legendre unnorm deriv2 l=%zu, m=0, x=%f", l, x); } /* test S(l,m) = a_{lm} * P(l,m) for m > 0 */ for (m = 1; m <= l; ++m) { idx = gsl_sf_legendre_array_index(l, m); gsl_test_rel(a_lm * p[idx], p_schmidt[idx], 1.0e-9, "legendre unnorm l=%zu, m=%zu, x=%f", l, m, x); gsl_test_abs(a_lm * dp[idx], dp_schmidt[idx], 1.0e-10, "legendre unnorm deriv l=%zu, m=%zu, x=%f", l, m, x); gsl_test_abs(a_lm * d2p[idx], d2p_schmidt[idx], 1.0e-10, "legendre unnorm deriv2 l=%zu, m=%zu, x=%f", l, m, x); a_lm /= sqrt((double) (l + m + 1)) * sqrt((double) (l - m)); } } gsl_sf_legendre_array(GSL_SF_LEGENDRE_NONE, lmax, x, p2); /* test if p = p2 */ for (l = 0; l <= (size_t) lmax; ++l) { for (m = 0; m <= l; ++m) { size_t idx = gsl_sf_legendre_array_index(l, m); gsl_test_rel(p2[idx], p[idx], 1.0e-10, "%s compare l=%zu, m=%zu, x=%f", desc, l, m, x); } } } free(p); free(p2); free(dp); free(d2p); free(p_schmidt); free(dp_schmidt); free(d2p_schmidt); return s; } /* test_legendre_unnorm() */ static int test_legendre_all(const size_t lmax) { int s = 0; s += test_legendre_schmidt(lmax, 1.0, "schmidt csphase=1"); s += test_legendre_schmidt(lmax, -1.0, "schmidt csphase=-1"); s += test_legendre_norm(GSL_SF_LEGENDRE_SPHARM, lmax, 1.0, "spharm csphase=1"); s += test_legendre_norm(GSL_SF_LEGENDRE_SPHARM, lmax, -1.0, "spharm csphase=-1"); s += test_legendre_norm(GSL_SF_LEGENDRE_FULL, lmax, 1.0, "full csphase=1"); s += test_legendre_norm(GSL_SF_LEGENDRE_FULL, lmax, -1.0, "full csphase=-1"); s += test_legendre_unnorm(lmax, "unnorm csphase=1"); return s; } /* test_legendre_all() */ int test_legendre(void) { gsl_sf_result r; double L[256], DL[256]; int s = 0; int sa; TEST_SF(s, gsl_sf_legendre_P1_e, (-0.5, &r), -0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_P1_e, ( 0.5, &r), 0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_P2_e, (0.0, &r), -0.5 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_P2_e, (0.5, &r), -0.125, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_P2_e, (1.0, &r), 1.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_P2_e, (100.0, &r), 14999.5 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_P3_e, ( -0.5, &r), 0.4375, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_P3_e, ( 0.5, &r), -0.4375, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_P3_e, ( 1.0, &r), 1.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_P3_e, (100.0, &r), 2.49985e+06, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (1, -0.5, &r), -0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (1, 1.0e-8, &r), 1.0e-08, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (1, 0.5, &r), 0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (1, 1.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (10, -0.5, &r), -0.1882286071777345, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (10, 1.0e-8, &r), -0.24609374999999864648, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (10, 0.5, &r), -0.18822860717773437500, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (10, 1.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (99, -0.5, &r), 0.08300778172138770477, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (99, 1.0e-8, &r), -7.958923738716563193e-08, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (99, 0.5, &r), -0.08300778172138770477, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (99, 0.999, &r), -0.3317727359254778874, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (99, 1.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (1000, -0.5, &r), -0.019168251091650277878, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (1000, 1.0e-8, &r), 0.0252250181770982897470252620, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (1000, 0.5, &r), -0.019168251091650277878, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (1000, 1.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (4000, -0.5, &r), -0.009585404456573080972, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (4000, 0.5, &r), -0.009585404456573080972, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Pl_e, (4000, 1.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); sa = 0; gsl_sf_legendre_Pl_array(100, 0.5, L); TEST_SF_VAL(sa, L[0], +0.0, 1.0, TEST_TOL1); TEST_SF_VAL(sa, L[10], +0.0, -0.18822860717773437500, TEST_TOL1); TEST_SF_VAL(sa, L[100], +0.0, -0.06051802596186118687, TEST_TOL1); gsl_test(sa, "gsl_sf_legendre_Pl_array(100, 0.5)"); s += sa; sa = 0; gsl_sf_legendre_Pl_deriv_array(100, 0.5, L, DL); TEST_SF_VAL(sa, DL[0], +0.0, 0.0, TEST_TOL1); TEST_SF_VAL(sa, DL[1], +0.0, 1.0, TEST_TOL1); TEST_SF_VAL(sa, DL[10], +0.0, -2.3171234130859375000, TEST_TOL1); TEST_SF_VAL(sa, DL[100], +0.0, -7.0331691653942815112, TEST_TOL1); gsl_test(sa, "gsl_sf_legendre_Pl_deriv_array(100, 0.5)"); s += sa; sa = 0; gsl_sf_legendre_Pl_deriv_array(10, 1.0, L, DL); TEST_SF_VAL(sa, DL[0], +0.0, 0.0, TEST_TOL1); TEST_SF_VAL(sa, DL[1], +0.0, 1.0, TEST_TOL1); TEST_SF_VAL(sa, DL[10], +0.0, 55.0, TEST_TOL1); gsl_test(sa, "gsl_sf_legendre_Pl_deriv_array(10, 1.0)"); s += sa; gsl_sf_legendre_Pl_deriv_array(10, 1.0 - 1.0e-11, L, DL); TEST_SF_VAL(sa, DL[0], +0.0, 0.0, TEST_TOL1); TEST_SF_VAL(sa, DL[1], +0.0, 1.0, TEST_TOL1); TEST_SF_VAL(sa, DL[10], +0.0, 54.999999985150000001, TEST_TOL1); gsl_test(sa, "gsl_sf_legendre_Pl_deriv_array(10, 1.0 - 1.0e-11)"); s += sa; gsl_sf_legendre_Pl_deriv_array(10, -1.0, L, DL); TEST_SF_VAL(sa, DL[0], +0.0, 0.0, TEST_TOL1); TEST_SF_VAL(sa, DL[1], +0.0, 1.0, TEST_TOL1); TEST_SF_VAL(sa, DL[10], +0.0, -55.0, TEST_TOL1); gsl_test(sa, "gsl_sf_legendre_Pl_deriv_array(10, -1.0)"); s += sa; gsl_sf_legendre_Pl_deriv_array(10, -1.0 + 1.0e-11, L, DL); TEST_SF_VAL(sa, DL[0], +0.0, 0.0, TEST_TOL1); TEST_SF_VAL(sa, DL[1], +0.0, 1.0, TEST_TOL1); TEST_SF_VAL(sa, DL[10], +0.0, -54.999999985150000001, TEST_TOL1); gsl_test(sa, "gsl_sf_legendre_Pl_deriv_array(10, -1.0 + 1.0e-11)"); s += sa; TEST_SF(s, gsl_sf_legendre_Plm_e, (10, 0, -0.5, &r), -0.18822860717773437500, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (10, 0, 1.0e-08, &r), -0.24609374999999864648, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (10, 0, 0.5, &r), -0.18822860717773437500, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (10, 1, -0.5, &r), -2.0066877394361256516, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (10, 1, 1.0e-08, &r), -2.7070312499999951725e-07, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (10, 1, 0.5, &r), 2.0066877394361256516, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (10, 5, -0.5, &r), -30086.169706116174977, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (10, 5, 1.0e-08, &r), -0.0025337812499999964949, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (10, 5, 0.5, &r), 30086.169706116174977, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (10, 5, 0.999, &r), -0.5036411489013270406, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (100, 5, -0.5, &r), -6.617107444248382171e+08, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (100, 5, 1.0e-08, &r), 817.8987598063712851, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (100, 5, 0.5, &r), 6.617107444248382171e+08, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Plm_e, (100, 5, 0.999, &r), -1.9831610803806212189e+09, TEST_TOL2, GSL_SUCCESS); #ifndef GSL_DISABLE_DEPRECATED sa = 0; gsl_sf_legendre_Plm_deriv_array(100, 2, -1.0 + 1.0/1125899906842624.0, L, DL); TEST_SF_VAL(sa, L[0], +0.0, 5.3290705182007490275e-15, TEST_TOL1); TEST_SF_VAL(sa, L[1], +0.0, -2.6645352591003721471e-14, TEST_TOL1); TEST_SF_VAL(sa, L[98], +0.0, 2.2646284847349109694e-08, TEST_TOL2); gsl_test(sa, "gsl_sf_legendre_Plm_deriv_array(100, 2, -1.0 + 2^(-50)"); s += sa; sa = 0; gsl_sf_legendre_Plm_deriv_array(100, 2, 1.0 - 1.0/1125899906842624.0, L, DL); TEST_SF_VAL(sa, L[0], +0.0, 5.3290705182007490275e-15, TEST_TOL1); TEST_SF_VAL(sa, L[1], +0.0, 2.6645352591003721471e-14, TEST_TOL1); TEST_SF_VAL(sa, L[10], +0.0, 5.3343995887188313290e-12, TEST_TOL1); TEST_SF_VAL(sa, L[98], +0.0, 2.2646284847349109694e-08, TEST_TOL2); gsl_test(sa, "gsl_sf_legendre_Plm_deriv_array(100, 2, 1.0 - 2^(-50)"); s += sa; sa = 0; gsl_sf_legendre_Plm_array(100, 5, 0.5, L); TEST_SF_VAL(sa, L[0], +0.0, -460.3466286991656682, TEST_TOL1); TEST_SF_VAL(sa, L[10], +0.0, 38852.51334152290535, TEST_TOL1 ); TEST_SF_VAL(sa, L[95], +0.0, 6.617107444248382171e+08, TEST_TOL1); gsl_test(sa, "gsl_sf_legendre_Plm_array(100, 5, 0.5)"); s += sa; sa = 0; gsl_sf_legendre_Plm_array(100, 5, 0.999, L); TEST_SF_VAL(sa, L[0], +0.0, -0.00016883550990916552255, TEST_TOL2); TEST_SF_VAL(sa, L[10], +0.0, -30.651334850159821525, TEST_TOL2 ); TEST_SF_VAL(sa, L[95], +0.0, -1.9831610803806212189e+09, TEST_TOL2); gsl_test(sa, "gsl_sf_legendre_Plm_array(100, 5, 0.999)"); s += sa; sa = 0; gsl_sf_legendre_Plm_array(100, 5, -0.999, L); TEST_SF_VAL(sa, L[0], +0.0, -0.00016883550990916552255, TEST_TOL2); TEST_SF_VAL(sa, L[10], +0.0, -30.651334850159821525, TEST_TOL2 ); TEST_SF_VAL(sa, L[95], +0.0, 1.9831610803806212189e+09, TEST_TOL2); gsl_test(sa, "gsl_sf_legendre_Plm_array(100, 5, -0.999)"); s += sa; sa = 0; gsl_sf_legendre_Plm_deriv_array(100, 2, 0.999, L, DL); TEST_SF_VAL(sa, L[0], +0.0, 0.00599700000000000000, TEST_TOL1); TEST_SF_VAL(sa, L[1], +0.0, 0.02995501500000000000, TEST_TOL1 ); TEST_SF_VAL(sa, DL[0], +0.0, -5.9940000000000000000, TEST_TOL1); TEST_SF_VAL(sa, DL[1], +0.0, -29.910045000000000000, TEST_TOL1 ); TEST_SF_VAL(sa, DL[2], +0.0, -89.490629790000000000, TEST_TOL1 ); TEST_SF_VAL(sa, DL[10], +0.0, -5703.9461633355291972, TEST_TOL1 ); TEST_SF_VAL(sa, DL[95], +0.0, 6.4518473603456858414E+06, TEST_TOL3); gsl_test(sa, "gsl_sf_legendre_Plm_deriv_array(100, 2, 0.999)"); s += sa; sa = 0; gsl_sf_legendre_Plm_deriv_array(100, 2, 1.0 - 1.0e-15, L, DL); TEST_SF_VAL(sa, DL[0], +0.0, -5.9999999999999940000, TEST_TOL1); TEST_SF_VAL(sa, DL[1], +0.0, -29.999999999999910000, TEST_TOL1 ); TEST_SF_VAL(sa, DL[2], +0.0, -89.999999999999490000, TEST_TOL1 ); TEST_SF_VAL(sa, DL[10], +0.0, -6005.9999999996936940, TEST_TOL1 ); TEST_SF_VAL(sa, DL[95], +0.0, -2.2586255999928454270e+07, TEST_TOL3); gsl_test(sa, "gsl_sf_legendre_Plm_deriv_array(100, 2, 1.0 - 1.0e-15)"); s += sa; sa = 0; gsl_sf_legendre_Plm_deriv_array(100, 2, -1.0 + 1.0e-15, L, DL); TEST_SF_VAL(sa, DL[0], +0.0, 5.9999999999999940000, TEST_TOL1); TEST_SF_VAL(sa, DL[1], +0.0, -29.999999999999910000, TEST_TOL1 ); TEST_SF_VAL(sa, DL[95], +0.0, -2.2586255999928454270e+07, TEST_TOL3); gsl_test(sa, "gsl_sf_legendre_Plm_deriv_array(100, 2, -1.0 + 1.0e-15)"); s += sa; sa = 0; gsl_sf_legendre_Plm_deriv_array(100, 5, 0.999, L, DL); TEST_SF_VAL(sa, DL[0], +0.0, 0.42187762481054616565, TEST_TOL1); TEST_SF_VAL(sa, DL[1], +0.0, 4.6341560284340909936, TEST_TOL1 ); TEST_SF_VAL(sa, DL[2], +0.0, 27.759505566959219127, TEST_TOL1 ); TEST_SF_VAL(sa, DL[10], +0.0, 76051.795860179545484, TEST_TOL1 ); TEST_SF_VAL(sa, DL[95], +0.0, 3.0344503083851936814e+12, TEST_TOL3); gsl_test(sa, "gsl_sf_legendre_Plm_deriv_array(100, 5, 0.999)"); s += sa; #endif /* !GSL_DISABLE_DEPRECATED */ TEST_SF(s, gsl_sf_legendre_sphPlm_e, (10, 0, -0.5, &r), -0.24332702369300133776, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_sphPlm_e, (10, 0, 0.5, &r), -0.24332702369300133776, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_sphPlm_e, (10, 0, 0.999, &r), 1.2225754122797385990, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_sphPlm_e, (10, 5, -0.5, &r), -0.3725739049803293972, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_sphPlm_e, (10, 5, 1.0e-08, &r), -3.1377233589376792243e-08, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_sphPlm_e, (10, 5, 0.5, &r), 0.3725739049803293972, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_sphPlm_e, (10, 5, 0.999, &r), -6.236870674727370094e-06, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_sphPlm_e, (10, 10, -0.5, &r), 0.12876871185785724117, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_sphPlm_e, (10, 10, 0.5, &r), 0.12876871185785724117, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_sphPlm_e, (10, 10, 0.999, &r), 1.7320802307583118647e-14, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_sphPlm_e, (200, 1, -0.5, &r), 0.3302975570099492931, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_sphPlm_e, (200, 1, 0.5, &r), -0.3302975570099492931, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_sphPlm_e, (200, 1, 0.999, &r), -1.4069792055546256912, TEST_TOL2, GSL_SUCCESS); /* Test case from alberto@physik.fu-berlin.de */ TEST_SF(s, gsl_sf_legendre_sphPlm_e, (3, 1, 0.0, &r), 0.323180184114150653007, TEST_TOL2, GSL_SUCCESS); /* Other test cases */ TEST_SF(s, gsl_sf_legendre_sphPlm_e, (200, 1, -0.5, &r), 0.3302975570099492931418227583, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_sphPlm_e, (140,135,1,&r), 0.0, TEST_TOL2, GSL_SUCCESS); #ifdef EXTENDED TEST_SF(s, gsl_sf_legendre_sphPlm_e, (140,135,0.99998689456491752,&r), -6.54265253269093276310395668335e-305, TEST_TOL6, GSL_SUCCESS); #endif #ifndef GSL_DISABLE_DEPRECATED sa = 0; gsl_sf_legendre_sphPlm_array(100, 5, 0.5, L); TEST_SF_VAL(sa, L[0], +0.0, -0.22609703187800460722, TEST_TOL1); TEST_SF_VAL(sa, L[10], +0.0, 0.07452710323813558940, TEST_TOL1); TEST_SF_VAL(sa, L[95], +0.0, 0.25865355990880161717, TEST_TOL1); gsl_test(sa, "gsl_sf_legendre_sphPlm_array(100, 5, 0.5)"); s += sa; sa = 0; gsl_sf_legendre_sphPlm_array(100, 2, 1.0 - 1.0/1125899906842624.0, L); TEST_SF_VAL(sa, L[0], +0.0, 6.8616082064776657177e-16, TEST_TOL2); TEST_SF_VAL(sa, L[10], +0.0, 4.8543150313086787324e-14, TEST_TOL2); TEST_SF_VAL(sa, L[95], +0.0, 8.3138984963650838973e-12, TEST_TOL2); gsl_test(sa, "gsl_sf_legendre_sphPlm_array(100, 2, 1.0 - 2^(-50))"); s += sa; sa = 0; gsl_sf_legendre_sphPlm_array(100, 2, -1.0 + 1.0/1125899906842624.0, L); TEST_SF_VAL(sa, L[0], +0.0, 6.8616082064776657177e-16, TEST_TOL2); TEST_SF_VAL(sa, L[95], +0.0, -8.3138984963650838973e-12, TEST_TOL2); gsl_test(sa, "gsl_sf_legendre_sphPlm_array(100, 2, -1.0 + 2^(-50))"); s += sa; sa = 0; gsl_sf_legendre_sphPlm_deriv_array(100, 0, 0.5, L, DL); TEST_SF_VAL(sa, DL[0], +0.0, 0.0, TEST_TOL1); TEST_SF_VAL(sa, DL[10], +0.0, -2.9953934850252897591, TEST_TOL1); TEST_SF_VAL(sa, DL[95], +0.0, -36.411811015111761007, TEST_TOL1); gsl_test(sa, "gsl_sf_legendre_sphPlm_deriv_array(100, 0, 0.5)"); s += sa; sa = 0; gsl_sf_legendre_sphPlm_deriv_array(100, 1, 0.5, L, DL); TEST_SF_VAL(sa, DL[0], +0.0, 0.19947114020071633897, TEST_TOL1); TEST_SF_VAL(sa, DL[1], +0.0, -0.44603102903819277863, TEST_TOL1); TEST_SF_VAL(sa, DL[10], +0.0, 1.3658895325030216565, TEST_TOL1); TEST_SF_VAL(sa, DL[99], +0.0, -27.925571865639037118, TEST_TOL1); gsl_test(sa, "gsl_sf_legendre_sphPlm_deriv_array(100, 1, 0.5)"); s += sa; sa = 0; gsl_sf_legendre_sphPlm_deriv_array(100, 1, 1.0 - 1.0/1125899906842624.0, L, DL); TEST_SF_VAL(sa, DL[0], +0.0, 8.1973898803378530946e+06, TEST_TOL1); TEST_SF_VAL(sa, DL[1], +0.0, 1.8329921010504257405e+07, TEST_TOL1); TEST_SF_VAL(sa, DL[10], +0.0, 1.8439572562895384115e+08, TEST_TOL1); TEST_SF_VAL(sa, DL[99], +0.0, 4.7682463136232210552e+09, TEST_TOL3); gsl_test(sa, "gsl_sf_legendre_sphPlm_deriv_array(100, 1, 1.0 - 2^(-50))"); s += sa; sa = 0; gsl_sf_legendre_sphPlm_deriv_array(100, 2, 0.5, L, DL); TEST_SF_VAL(sa, DL[0], +0.0, -0.38627420202318958034, TEST_TOL1); TEST_SF_VAL(sa, DL[1], +0.0, 0.25549636910832059085, TEST_TOL1); TEST_SF_VAL(sa, DL[2], +0.0, 1.5053547230039006279, TEST_TOL1); TEST_SF_VAL(sa, DL[10], +0.0, 0.73576559668648243477, TEST_TOL1); TEST_SF_VAL(sa, DL[98], +0.0, 28.444589950264378407, TEST_TOL1); gsl_test(sa, "gsl_sf_legendre_sphPlm_deriv_array(100, 2, 0.5)"); s += sa; sa = 0; gsl_sf_legendre_sphPlm_deriv_array(100, 5, 0.5, L, DL); TEST_SF_VAL(sa, DL[0], +0.0, 0.75365677292668202407, TEST_TOL1); TEST_SF_VAL(sa, DL[1], +0.0, 0.54346962777757450534, TEST_TOL1); TEST_SF_VAL(sa, DL[2], +0.0, -0.98309969029001383773, TEST_TOL1); TEST_SF_VAL(sa, DL[3], +0.0, -2.7728270988954534293, TEST_TOL1); TEST_SF_VAL(sa, DL[10], +0.0, -5.7407133315443482193, TEST_TOL1); TEST_SF_VAL(sa, DL[95], +0.0, -25.893934624747394561, TEST_TOL1); gsl_test(sa, "gsl_sf_legendre_sphPlm_deriv_array(100, 5, 0.5)"); s += sa; sa = 0; gsl_sf_legendre_sphPlm_deriv_array(100, 5, 1.0 - 1.0/1125899906842624.0, L, DL); TEST_SF_VAL(sa, DL[0], +0.0, 1.7374288379067753301e-22, TEST_TOL1); TEST_SF_VAL(sa, DL[1], +0.0, 6.2643887625426827113e-22, TEST_TOL1); TEST_SF_VAL(sa, DL[2], +0.0, 1.6482697200734667281e-21, TEST_TOL1); TEST_SF_VAL(sa, DL[95], +0.0, 3.9890549466071349506e-15, TEST_TOL2); gsl_test(sa, "gsl_sf_legendre_sphPlm_deriv_array(100, 5, 1.0 - 2^(-50))"); s += sa; gsl_sf_legendre_sphPlm_deriv_array(100, 5, -1.0 + 1.0/1125899906842624.0, L, DL); TEST_SF_VAL(sa, DL[0], +0.0, -1.7374288379067753301e-22, TEST_TOL1); TEST_SF_VAL(sa, DL[1], +0.0, 6.2643887625426827113e-22, TEST_TOL1); TEST_SF_VAL(sa, DL[2], +0.0, -1.6482697200734667281e-21, TEST_TOL1); TEST_SF_VAL(sa, DL[95], +0.0, 3.9890549466071349506e-15, TEST_TOL3); gsl_test(sa, "gsl_sf_legendre_sphPlm_deriv_array(100, 5, -1.0 + 2^(-50))"); s += sa; #endif /* !GSL_DISABLE_DEPRECATED */ TEST_SF(s, gsl_sf_conicalP_half_e, (0.0, -0.5, &r), 0.8573827581049917129, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (0.0, 0.5, &r), 0.8573827581049917129, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (0.0, 2.0, &r), 0.6062611623284649811, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (0.0, 100.0, &r), 0.07979045091636735635, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (10.0, -0.5, &r), 5.345484922591867188e+08, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (10.0, 0.5, &r), 15137.910380385258370, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (10.0, 2.0, &r), 0.4992680691891618544, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (10.0, 100.0, &r), -0.07272008163718195685, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (200.0, -1.0e-3, &r), 1.3347639529084185010e+136, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (200.0, 1.0e-8, &r), 1.0928098010940058507e+136, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (200.0, 0.5, &r), 3.895546021611205442e+90, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (200.0, 10.0, &r), -0.04308567180833581268, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (200.0, 100.0, &r), -0.04694669186576399194, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (200.0, 1000.0, &r), 0.023698140704121273277, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (200.0, 1.0e+8, &r), -0.00006790983312124277891, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (1.0e+8, 1.1, &r), 1.1599311133054742944, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_half_e, (1.0e+8, 100.0, &r), 0.07971967557381557875, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (0.0, -0.5, &r), 1.7956982494514644808, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (0.0, 0.5, &r), 0.8978491247257322404, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (0.0, 2.0, &r), 0.7984204253272901551, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (0.0, 100.0, &r), 0.4227531369388072584, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (10.0, -0.5, &r), 5.345484922591867181e+07, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (10.0, 0.5, &r), 1513.7910356104985334, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (10.0, 2.0, &r), 0.03439243987215615642, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (10.0, 100.0, &r), 0.003283756665952609624, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (200.0, -0.5, &r), 1.7699538115312304280e+179, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (200.0, 1.0e-8, &r), 5.464049005470029253e+133, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (200.0, 0.5, &r), 1.9477730108056027211e+88, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (200.0, 10.0, &r), 0.0012462575917716355362, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (200.0, 100.0, &r), -0.0003225881344802625149, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (200.0, 1000.0, &r), -0.00004330652890886567623, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (200.0, 1.0e+8, &r), 2.0943091278037078483e-07, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (1.0e+8, 1.1, &r), 2.092320445620989618e-09, 16.0*TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_mhalf_e, (1.0e+8, 100.0, &r), -3.359967833599016923e-11, 256.0*TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_0_e, (0.0, -0.5, &r), 1.3728805006183501647, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_0_e, (0.0, 0.5, &r), 1.0731820071493643751, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_0_e, (0.0, 2.0, &r), 0.9012862993604472987, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_0_e, (0.0, 100.0, &r), 0.30091748588199264556, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_0_e, (10.0, -0.5, &r), 1.6795592815421804669e+08, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_0_e, (10.0, 0.5, &r), 4826.034132009618240, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_0_e, (10.0, 2.0, &r), 0.18798468917758716146, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_0_e, (10.0, 100.0, &r), -0.008622130749987962529, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_0_e, (200.0, -0.5, &r), 2.502194818646823e+180, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_0_e, (1000.0, 100.0, &r), 0.0017908817653497715844, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_0_e, (1000.0, 1000.0, &r), -0.0006566893804926284301, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_0_e, (1000.0, 1.0e+8, &r), 2.3167213561756390068e-06, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_1_e, (0.0, -0.5, &r), 0.4939371126656998499, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_1_e, (0.0, 0.5, &r), 0.14933621085538265636, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_1_e, (0.0, 2.0, &r), -0.13666874968871549533, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_1_e, (0.0, 100.0, &r), -0.10544528203156629098, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_1_e, (10.0, -0.5, &r), 1.7253802958788312520e+09, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_1_e, (10.0, 0.5, &r), 46781.02294059967988, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_1_e, (10.0, 2.0, &r), 0.26613342643657444400, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_1_e, (10.0, 100.0, &r), -0.23281959695501029796, TEST_TOL2, GSL_SUCCESS); /* FIXME: Mathematica gets some brain-damaged numbers for * these x < 0 points. I have checked what I am doing in detail, * and it must be right because you can do it by summing * manifestly positive definite quantities. */ TEST_SF(s, gsl_sf_conicalP_1_e, (200.0, -0.999, &r), 2.71635193199341135e+270, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_1_e, (200.0, -0.9, &r), 4.2952493176812905e+234, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_1_e, (200.0, -0.5, &r), 5.01159205956053439e+182, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_1_e, (200.0, 0.999, &r), 195733.0396081538, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_1_e, (200.0, 10.0, &r), -2.9272610662414349553, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_1_e, (1000.0, 100.0, &r), -1.7783258105862399857, TEST_TOL6, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_1_e, (1000.0, 1000.0, &r), 0.4535161075156427179, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_1_e, (1000.0, 1.0e+8, &r), 0.0009983414549874888478, TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_sph_reg_e, (2, 1.0, -0.5, &r), 1.6406279287008789526, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_sph_reg_e, (10, 1.0, -0.5, &r), 0.000029315266725049129448, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_sph_reg_e, (20, 1.0, -0.5, &r), 7.335769429462034431e-15, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_sph_reg_e, (30, 1.0, -0.5, &r), 1.3235612394267378871e-26, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_sph_reg_e, (10, 1.0, 0.5, &r), 2.7016087199857873954e-10, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_sph_reg_e, (20, 1.0, 0.5, &r), 1.1782569701435933399e-24, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_sph_reg_e, (30, 1.0, 0.5, &r), 3.636240588303797919e-41, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_sph_reg_e, (10, 1.0, 2.0, &r), 2.4934929626284934483e-10, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_sph_reg_e, (20, 1.0, 2.0, &r), 1.1284762488012616191e-24, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_sph_reg_e, (30, 100.0, 100.0, &r), -1.6757772087159526048e-64, TEST_TOL6, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_cyl_reg_e, (2, 1.0, -0.5, &r), 2.2048510472375258708, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_cyl_reg_e, (10, 1.0, -0.5, &r), 0.00007335034531618655690, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_cyl_reg_e, (20, 1.0, -0.5, &r), 2.5419860619212164696e-14, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_cyl_reg_e, (30, 1.0, -0.5, &r), 5.579714972260536827e-26, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_cyl_reg_e, (10, 1.0, 0.5, &r), 1.1674078819646475282e-09, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_cyl_reg_e, (20, 1.0, 0.5, &r), 7.066408031229072207e-24, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_cyl_reg_e, (30, 1.0, 0.5, &r), 2.6541973286862588488e-40, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_cyl_reg_e, (10, 1.0, 2.0, &r), 1.0736109751890863051e-09, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_cyl_reg_e, (20, 1.0, 2.0, &r), 6.760965304863386741e-24, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_conicalP_cyl_reg_e, (30, 100.0, 100.0, &r), -4.268753482520651007e-63, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_0_e, (1.0e-06, 1.0e-06, &r), 0.9999999999998333333 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_0_e, (1.0, 0.0, &r), 1.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_0_e, (1.0, 1.0, &r), 0.7160229153604338713 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_0_e, (1.0, 100.0, &r), -3.767437313149604566e-44 , TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_0_e, (1.0, 500.0, &r), -6.665351935878582205e-218, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_0_e, (100.0, 1.0, &r), -0.004308757035378200029 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_0_e, (100.0, 10.0, &r), 7.508054627912986427e-07 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_0_e, (1000.0, 1.0, &r), 0.0007036067909088818319 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_0_e, (1.0e+08, 1.0, &r), 7.927485371429105968e-09 , TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_0_e, (1.0e+08, 100.0, &r), -3.627118904186918957e-52 , 32.0*TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_1_e, (1.0e-06, 1.0e-06, &r), 3.333333333334222222e-07, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_1_e, (1.0, 1.0e-10, &r), 4.714045207910316829e-11, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_1_e, (1.0, 1.0, &r), 0.3397013994799344639, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_1_e, (1.0, 100.0, &r), -7.200624449531811272e-44, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_1_e, (1.0, 500.0, &r), 4.192260336821728677e-218, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_1_e, (100.0, 0.01, &r), 0.30117664944267412324 , TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_1_e, (100.0, 1.0, &r), -0.007393833425336299309 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_1_e, (100.0, 10.0, &r), -5.031062029821254982e-07 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_1_e, (1000.0, 0.001, &r), 0.30116875865090396421 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_1_e, (1000.0, 1.0, &r), -0.0004776144516074971885 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_1_e, (1.0e+08, 1.0e-08, &r), 0.30116867893975679722 , TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_1_e, (1.0e+08, 1.0, &r), 3.0921097047369081582e-09, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_1_e, (1.0e+08, 100.0, &r), -6.496142701296286936e-52 , 32.0*TEST_SQRT_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 1.0e-06, 1.0e-06, &r), 1.1544011544013627977e-32, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 1.0, 1.0e-10, &r), 2.0224912016958766992e-52, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 1.0, 1.0, &r), 0.011498635037491577728, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 1.0, 5.0, &r), 0.0020696945662545205776, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 1.0, 7.0, &r), -0.0017555303787488993676, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 1.0, 10.0, &r), 0.00008999979724504887101, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 1.0, 100.0, &r), -4.185397793298567945e-44, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 1.0, 500.0, &r), 1.4235113901091961263e-217, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 100.0, 0.001, &r), 9.642762597222417946e-10, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 100.0, 0.002, &r), 3.0821201254308036109e-08, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 100.0, 0.01, &r), 0.00009281069019005840532, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 100.0, 1.0, &r), -0.008043100696178624653, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 100.0, 10.0, &r), -3.927678432813974207e-07, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 1000.0, 0.001, &r), 0.00009256365284253254503, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 1000.0, 0.01, &r), -0.05553733815473079983, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 1.0e+08, 1.0e-08, &r), 0.00009256115861125841299, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_H3d_e, (5, 1.0e+08, 100.0, &r), -6.496143209092860765e-52 , 128.0*TEST_SQRT_TOL0, GSL_SUCCESS); #if FIXME sa = 0; gsl_sf_legendre_H3d_array(100, 1.0, 3.0, L); TEST_SF_VAL(sa, L[0], +0.0, gsl_sf_legendre_H3d(0, 1.0, 3.0), 1.0e-12); TEST_SF_VAL(sa, L[1], +0.0, gsl_sf_legendre_H3d(1, 1.0, 3.0), 1.0e-12); TEST_SF_VAL(sa, L[10], +0.0, gsl_sf_legendre_H3d(10, 1.0, 3.0), 1.0e-12); TEST_SF_VAL(sa, L[100], +0.0, gsl_sf_legendre_H3d(100, 1.0, 3.0), 1.0e-12); gsl_test(sa, " gsl_sf_legendre_H3d_array(100, 1.0, 3.0)"); s += sa; #endif /* x = -1 + 2^-16 */ TEST_SF(s, gsl_sf_legendre_Q0_e, (-0.9999847412109375, &r), -5.8917472200477175158028143531855, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q0_e, (-0.5, &r), -0.5493061443340548457, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q0_e, (-1e-10, &r), -1.000000000000000000e-10, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q0_e, (0.0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q0_e, (1e-10, &r), 1.000000000000000000e-10, TEST_TOL0, GSL_SUCCESS); /* x = 1 - 2^-16 */ TEST_SF(s, gsl_sf_legendre_Q0_e, (0.9999847412109375, &r), 5.8917472200477175158028143531855, TEST_TOL4, GSL_SUCCESS); /* x = 1 + 2^-16 */ TEST_SF(s, gsl_sf_legendre_Q0_e, ( 1.0000152587890625, &r), 5.8917548494422489138325509750429, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q0_e, ( 1.5, &r), 0.8047189562170501873, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q0_e, ( 9.99, &r), 0.1004364599660005447, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q0_e, ( 10.0, &r), 0.1003353477310755806, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q0_e, ( 10.01, &r), 0.1002344395571710243, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q0_e, ( 100, &r), 0.010000333353334762015, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q0_e, ( 1e10, &r), 1.000000000000000000e-10, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, (-0.9999847412109375, &r), 4.8916573191196772369, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, (-0.5, &r), -0.7253469278329725772, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, (-0.01, &r), -0.9998999966664666524, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, (-1e-10, &r), -0.999999999999999999, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, (0.0, &r), -1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, (1e-10, &r), -0.999999999999999999, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, (0.0001, &r), -0.9999999899999999667, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, (0.01, &r), -0.9998999966664666524, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, (0.5, &r), -0.7253469278329725772, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, (0.9999847412109375, &r), 4.8916573191196772369, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, (1.0000152587890625, &r), 4.8918447504867045145, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, ( 1.5, &r), 0.20707843432557528095, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, ( 9.99, &r), 3.360235060345441639e-3, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, ( 10.0, &r), 3.353477310755806357e-3, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, ( 10.01, &r), 3.346739967281953346e-3, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, ( 100.0, &r), 3.333533347620158821e-5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Q1_e, ( 1e10, &r), 3.333333333333333333e-21, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Ql_e, (10, -0.5, &r), -0.29165813966586752393, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Ql_e, (10, 0.5, &r), 0.29165813966586752393, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Ql_e, (10, 1.5, &r), 0.000014714232718207477406, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Ql_e, (100, -0.5, &r), -0.09492507395207282096, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Ql_e, (100, 0.5, &r), 0.09492507395207282096, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Ql_e, (100, 1.5, &r), 1.1628163435044121988e-43, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Ql_e, (1000, -0.5, &r), -0.030105074974005303500, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Ql_e, (1000, 0.5, &r), 0.030105074974005303500, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_legendre_Ql_e, (1000, 1.1, &r), 1.0757258447825356443e-194, TEST_TOL3, GSL_SUCCESS); /* test associated legendre functions */ { size_t l; for (l = 0; l <= 10; ++l) test_legendre_all(l); test_legendre_all(140); test_legendre_all(1000); /*test_legendre_all(2700);*/ } return s; } gsl/specfunc/bessel_i.c0000644000175000017500000002147713536674414013504 0ustar eddedd/* specfunc/bessel_i.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "error.h" #include "bessel.h" /* i_{l+1}/i_l */ static int bessel_il_CF1(const int l, const double x, const double threshold, double * ratio) { const int kmax = 2000; double tk = 1.0; double sum = 1.0; double rhok = 0.0; int k; for(k=1; k<=kmax; k++) { double ak = (x/(2.0*l+1.0+2.0*k)) * (x/(2.0*l+3.0+2.0*k)); rhok = -ak*(1.0 + rhok)/(1.0 + ak*(1.0 + rhok)); tk *= rhok; sum += tk; if(fabs(tk/sum) < threshold) break; } *ratio = x/(2.0*l+3.0) * sum; if(k == kmax) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_i0_scaled_e(const double x, gsl_sf_result * result) { double ax = fabs(x); /* CHECK_POINTER(result) */ if(x == 0.0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(ax < 0.2) { const double eax = exp(-ax); const double y = ax*ax; const double c1 = 1.0/6.0; const double c2 = 1.0/120.0; const double c3 = 1.0/5040.0; const double c4 = 1.0/362880.0; const double c5 = 1.0/39916800.0; const double sum = 1.0 + y*(c1 + y*(c2 + y*(c3 + y*(c4 + y*c5)))); result->val = eax * sum; result->err = 2.0 * GSL_DBL_EPSILON * result->val; } else if(ax < -0.5*GSL_LOG_DBL_EPSILON) { result->val = (1.0 - exp(-2.0*ax))/(2.0*ax); result->err = 2.0 * GSL_DBL_EPSILON * result->val; } else { result->val = 1.0/(2.0*ax); result->err = 2.0 * GSL_DBL_EPSILON * result->val; } return GSL_SUCCESS; } int gsl_sf_bessel_i1_scaled_e(const double x, gsl_sf_result * result) { double ax = fabs(x); /* CHECK_POINTER(result) */ if(x == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(ax < 3.0*GSL_DBL_MIN) { UNDERFLOW_ERROR(result); } else if(ax < 0.25) { const double eax = exp(-ax); const double y = x*x; const double c1 = 1.0/10.0; const double c2 = 1.0/280.0; const double c3 = 1.0/15120.0; const double c4 = 1.0/1330560.0; const double c5 = 1.0/172972800.0; const double sum = 1.0 + y*(c1 + y*(c2 + y*(c3 + y*(c4 + y*c5)))); result->val = eax * x/3.0 * sum; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { double ex = exp(-2.0*ax); result->val = 0.5 * (ax*(1.0+ex) - (1.0-ex)) / (ax*ax); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); if(x < 0.0) result->val = -result->val; return GSL_SUCCESS; } } int gsl_sf_bessel_i2_scaled_e(const double x, gsl_sf_result * result) { double ax = fabs(x); /* CHECK_POINTER(result) */ if(x == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(ax < 4.0*GSL_SQRT_DBL_MIN) { UNDERFLOW_ERROR(result); } else if(ax < 0.25) { const double y = x*x; const double c1 = 1.0/14.0; const double c2 = 1.0/504.0; const double c3 = 1.0/33264.0; const double c4 = 1.0/3459456.0; const double c5 = 1.0/518918400.0; const double sum = 1.0 + y*(c1 + y*(c2 + y*(c3 + y*(c4 + y*c5)))); const double pre = exp(-ax) * x*x/15.0; result->val = pre * sum; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { double ex = exp(-2.0*ax); double x2 = x*x; result->val = 0.5 * ((3.0+x2)*(1.0-ex) - 3.0*ax*(1.0+ex))/(ax*ax*ax); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_bessel_il_scaled_e(const int l, double x, gsl_sf_result * result) { double sgn = 1.0; double ax = fabs(x); if(x < 0.0) { /* i_l(-x) = (-1)^l i_l(x) */ sgn = ( GSL_IS_ODD(l) ? -1.0 : 1.0 ); x = -x; } if(l < 0) { DOMAIN_ERROR(result); } else if(x == 0.0) { result->val = ( l == 0 ? 1.0 : 0.0 ); result->err = 0.0; return GSL_SUCCESS; } else if(l == 0) { gsl_sf_result il; int stat_il = gsl_sf_bessel_i0_scaled_e(x, &il); result->val = sgn * il.val; result->err = il.err; return stat_il; } else if(l == 1) { gsl_sf_result il; int stat_il = gsl_sf_bessel_i1_scaled_e(x, &il); result->val = sgn * il.val; result->err = il.err; return stat_il; } else if(l == 2) { gsl_sf_result il; int stat_il = gsl_sf_bessel_i2_scaled_e(x, &il); result->val = sgn * il.val; result->err = il.err; return stat_il; } else if(x*x < 10.0*(l+1.5)/M_E) { gsl_sf_result b; int stat = gsl_sf_bessel_IJ_taylor_e(l+0.5, x, 1, 50, GSL_DBL_EPSILON, &b); double pre = exp(-ax) * sqrt((0.5*M_PI)/x); result->val = sgn * pre * b.val; result->err = pre * b.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat; } else if(l < 150) { gsl_sf_result i0_scaled; int stat_i0 = gsl_sf_bessel_i0_scaled_e(ax, &i0_scaled); double rat; int stat_CF1 = bessel_il_CF1(l, ax, GSL_DBL_EPSILON, &rat); double iellp1 = rat * GSL_SQRT_DBL_MIN; double iell = GSL_SQRT_DBL_MIN; double iellm1; int ell; for(ell = l; ell >= 1; ell--) { iellm1 = iellp1 + (2*ell + 1)/x * iell; iellp1 = iell; iell = iellm1; } result->val = sgn * i0_scaled.val * (GSL_SQRT_DBL_MIN / iell); result->err = i0_scaled.err * (GSL_SQRT_DBL_MIN / iell); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_i0, stat_CF1); } else if(GSL_MIN(0.29/(l*l+1.0), 0.5/(l*l+1.0+x*x)) < 0.5*GSL_ROOT3_DBL_EPSILON) { int status = gsl_sf_bessel_Inu_scaled_asymp_unif_e(l + 0.5, x, result); double pre = sqrt((0.5*M_PI)/x); result->val *= sgn * pre; result->err *= pre; return status; } else { /* recurse down from safe values */ double rt_term = sqrt((0.5*M_PI)/x); const int LMAX = 2 + (int) (1.2 / GSL_ROOT6_DBL_EPSILON); gsl_sf_result r_iellp1; gsl_sf_result r_iell; int stat_a1 = gsl_sf_bessel_Inu_scaled_asymp_unif_e(LMAX + 1 + 0.5, x, &r_iellp1); int stat_a2 = gsl_sf_bessel_Inu_scaled_asymp_unif_e(LMAX + 0.5, x, &r_iell); double iellp1 = r_iellp1.val; double iell = r_iell.val; double iellm1 = 0.0; int ell; iellp1 *= rt_term; iell *= rt_term; for(ell = LMAX; ell >= l+1; ell--) { iellm1 = iellp1 + (2*ell + 1)/x * iell; iellp1 = iell; iell = iellm1; } result->val = sgn * iellm1; result->err = fabs(result->val)*(GSL_DBL_EPSILON + fabs(r_iellp1.err/r_iellp1.val) + fabs(r_iell.err/r_iell.val)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_a1, stat_a2); } } int gsl_sf_bessel_il_scaled_array(const int lmax, const double x, double * result_array) { if(x == 0.0) { int ell; result_array[0] = 1.0; for (ell = lmax; ell >= 1; ell--) { result_array[ell] = 0.0; }; return GSL_SUCCESS; } else { int ell; gsl_sf_result r_iellp1; gsl_sf_result r_iell; int stat_0 = gsl_sf_bessel_il_scaled_e(lmax+1, x, &r_iellp1); int stat_1 = gsl_sf_bessel_il_scaled_e(lmax, x, &r_iell); double iellp1 = r_iellp1.val; double iell = r_iell.val; double iellm1; result_array[lmax] = iell; for(ell = lmax; ell >= 1; ell--) { iellm1 = iellp1 + (2*ell + 1)/x * iell; iellp1 = iell; iell = iellm1; result_array[ell-1] = iellm1; } return GSL_ERROR_SELECT_2(stat_0, stat_1); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_i0_scaled(const double x) { EVAL_RESULT(gsl_sf_bessel_i0_scaled_e(x, &result)); } double gsl_sf_bessel_i1_scaled(const double x) { EVAL_RESULT(gsl_sf_bessel_i1_scaled_e(x, &result)); } double gsl_sf_bessel_i2_scaled(const double x) { EVAL_RESULT(gsl_sf_bessel_i2_scaled_e(x, &result)); } double gsl_sf_bessel_il_scaled(const int l, const double x) { EVAL_RESULT(gsl_sf_bessel_il_scaled_e(l, x, &result)); } gsl/specfunc/gamma.c0000644000175000017500000016652513536674414013005 0ustar eddedd/* specfunc/gamma.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include #include "error.h" #include "check.h" #include "chebyshev.h" #include "cheb_eval.c" #define LogRootTwoPi_ 0.9189385332046727418 /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ static struct {int n; double f; long i; } fact_table[GSL_SF_FACT_NMAX + 1] = { { 0, 1.0, 1L }, { 1, 1.0, 1L }, { 2, 2.0, 2L }, { 3, 6.0, 6L }, { 4, 24.0, 24L }, { 5, 120.0, 120L }, { 6, 720.0, 720L }, { 7, 5040.0, 5040L }, { 8, 40320.0, 40320L }, { 9, 362880.0, 362880L }, { 10, 3628800.0, 3628800L }, { 11, 39916800.0, 39916800L }, { 12, 479001600.0, 479001600L }, { 13, 6227020800.0, 0 }, { 14, 87178291200.0, 0 }, { 15, 1307674368000.0, 0 }, { 16, 20922789888000.0, 0 }, { 17, 355687428096000.0, 0 }, { 18, 6402373705728000.0, 0 }, { 19, 121645100408832000.0, 0 }, { 20, 2432902008176640000.0, 0 }, { 21, 51090942171709440000.0, 0 }, { 22, 1124000727777607680000.0, 0 }, { 23, 25852016738884976640000.0, 0 }, { 24, 620448401733239439360000.0, 0 }, { 25, 15511210043330985984000000.0, 0 }, { 26, 403291461126605635584000000.0, 0 }, { 27, 10888869450418352160768000000.0, 0 }, { 28, 304888344611713860501504000000.0, 0 }, { 29, 8841761993739701954543616000000.0, 0 }, { 30, 265252859812191058636308480000000.0, 0 }, { 31, 8222838654177922817725562880000000.0, 0 }, { 32, 263130836933693530167218012160000000.0, 0 }, { 33, 8683317618811886495518194401280000000.0, 0 }, { 34, 2.95232799039604140847618609644e38, 0 }, { 35, 1.03331479663861449296666513375e40, 0 }, { 36, 3.71993326789901217467999448151e41, 0 }, { 37, 1.37637530912263450463159795816e43, 0 }, { 38, 5.23022617466601111760007224100e44, 0 }, { 39, 2.03978820811974433586402817399e46, 0 }, { 40, 8.15915283247897734345611269600e47, 0 }, { 41, 3.34525266131638071081700620534e49, 0 }, { 42, 1.40500611775287989854314260624e51, 0 }, { 43, 6.04152630633738356373551320685e52, 0 }, { 44, 2.65827157478844876804362581101e54, 0 }, { 45, 1.19622220865480194561963161496e56, 0 }, { 46, 5.50262215981208894985030542880e57, 0 }, { 47, 2.58623241511168180642964355154e59, 0 }, { 48, 1.24139155925360726708622890474e61, 0 }, { 49, 6.08281864034267560872252163321e62, 0 }, { 50, 3.04140932017133780436126081661e64, 0 }, { 51, 1.55111875328738228022424301647e66, 0 }, { 52, 8.06581751709438785716606368564e67, 0 }, { 53, 4.27488328406002556429801375339e69, 0 }, { 54, 2.30843697339241380472092742683e71, 0 }, { 55, 1.26964033536582759259651008476e73, 0 }, { 56, 7.10998587804863451854045647464e74, 0 }, { 57, 4.05269195048772167556806019054e76, 0 }, { 58, 2.35056133128287857182947491052e78, 0 }, { 59, 1.38683118545689835737939019720e80, 0 }, { 60, 8.32098711274139014427634118320e81, 0 }, { 61, 5.07580213877224798800856812177e83, 0 }, { 62, 3.14699732603879375256531223550e85, 0 }, { 63, 1.982608315404440064116146708360e87, 0 }, { 64, 1.268869321858841641034333893350e89, 0 }, { 65, 8.247650592082470666723170306800e90, 0 }, { 66, 5.443449390774430640037292402480e92, 0 }, { 67, 3.647111091818868528824985909660e94, 0 }, { 68, 2.480035542436830599600990418570e96, 0 }, { 69, 1.711224524281413113724683388810e98, 0 }, { 70, 1.197857166996989179607278372170e100, 0 }, { 71, 8.504785885678623175211676442400e101, 0 }, { 72, 6.123445837688608686152407038530e103, 0 }, { 73, 4.470115461512684340891257138130e105, 0 }, { 74, 3.307885441519386412259530282210e107, 0 }, { 75, 2.480914081139539809194647711660e109, 0 }, { 76, 1.885494701666050254987932260860e111, 0 }, { 77, 1.451830920282858696340707840860e113, 0 }, { 78, 1.132428117820629783145752115870e115, 0 }, { 79, 8.946182130782975286851441715400e116, 0 }, { 80, 7.156945704626380229481153372320e118, 0 }, { 81, 5.797126020747367985879734231580e120, 0 }, { 82, 4.753643337012841748421382069890e122, 0 }, { 83, 3.945523969720658651189747118010e124, 0 }, { 84, 3.314240134565353266999387579130e126, 0 }, { 85, 2.817104114380550276949479442260e128, 0 }, { 86, 2.422709538367273238176552320340e130, 0 }, { 87, 2.107757298379527717213600518700e132, 0 }, { 88, 1.854826422573984391147968456460e134, 0 }, { 89, 1.650795516090846108121691926250e136, 0 }, { 90, 1.485715964481761497309522733620e138, 0 }, { 91, 1.352001527678402962551665687590e140, 0 }, { 92, 1.243841405464130725547532432590e142, 0 }, { 93, 1.156772507081641574759205162310e144, 0 }, { 94, 1.087366156656743080273652852570e146, 0 }, { 95, 1.032997848823905926259970209940e148, 0 }, { 96, 9.916779348709496892095714015400e149, 0 }, { 97, 9.619275968248211985332842594960e151, 0 }, { 98, 9.426890448883247745626185743100e153, 0 }, { 99, 9.332621544394415268169923885600e155, 0 }, { 100, 9.33262154439441526816992388563e157, 0 }, { 101, 9.42594775983835942085162312450e159, 0 }, { 102, 9.61446671503512660926865558700e161, 0 }, { 103, 9.90290071648618040754671525458e163, 0 }, { 104, 1.02990167451456276238485838648e166, 0 }, { 105, 1.08139675824029090050410130580e168, 0 }, { 106, 1.146280563734708354534347384148e170, 0 }, { 107, 1.226520203196137939351751701040e172, 0 }, { 108, 1.324641819451828974499891837120e174, 0 }, { 109, 1.443859583202493582204882102460e176, 0 }, { 110, 1.588245541522742940425370312710e178, 0 }, { 111, 1.762952551090244663872161047110e180, 0 }, { 112, 1.974506857221074023536820372760e182, 0 }, { 113, 2.231192748659813646596607021220e184, 0 }, { 114, 2.543559733472187557120132004190e186, 0 }, { 115, 2.925093693493015690688151804820e188, 0 }, { 116, 3.393108684451898201198256093590e190, 0 }, { 117, 3.96993716080872089540195962950e192, 0 }, { 118, 4.68452584975429065657431236281e194, 0 }, { 119, 5.57458576120760588132343171174e196, 0 }, { 120, 6.68950291344912705758811805409e198, 0 }, { 121, 8.09429852527344373968162284545e200, 0 }, { 122, 9.87504420083360136241157987140e202, 0 }, { 123, 1.21463043670253296757662432419e205, 0 }, { 124, 1.50614174151114087979501416199e207, 0 }, { 125, 1.88267717688892609974376770249e209, 0 }, { 126, 2.37217324288004688567714730514e211, 0 }, { 127, 3.01266001845765954480997707753e213, 0 }, { 128, 3.85620482362580421735677065923e215, 0 }, { 129, 4.97450422247728744039023415041e217, 0 }, { 130, 6.46685548922047367250730439554e219, 0 }, { 131, 8.47158069087882051098456875820e221, 0 }, { 132, 1.11824865119600430744996307608e224, 0 }, { 133, 1.48727070609068572890845089118e226, 0 }, { 134, 1.99294274616151887673732419418e228, 0 }, { 135, 2.69047270731805048359538766215e230, 0 }, { 136, 3.65904288195254865768972722052e232, 0 }, { 137, 5.01288874827499166103492629211e234, 0 }, { 138, 6.91778647261948849222819828311e236, 0 }, { 139, 9.61572319694108900419719561353e238, 0 }, { 140, 1.34620124757175246058760738589e241, 0 }, { 141, 1.89814375907617096942852641411e243, 0 }, { 142, 2.69536413788816277658850750804e245, 0 }, { 143, 3.85437071718007277052156573649e247, 0 }, { 144, 5.55029383273930478955105466055e249, 0 }, { 145, 8.04792605747199194484902925780e251, 0 }, { 146, 1.17499720439091082394795827164e254, 0 }, { 147, 1.72724589045463891120349865931e256, 0 }, { 148, 2.55632391787286558858117801578e258, 0 }, { 149, 3.80892263763056972698595524351e260, 0 }, { 150, 5.71338395644585459047893286526e262, 0 }, { 151, 8.62720977423324043162318862650e264, 0 }, { 152, 1.31133588568345254560672467123e267, 0 }, { 153, 2.00634390509568239477828874699e269, 0 }, { 154, 3.08976961384735088795856467036e271, 0 }, { 155, 4.78914290146339387633577523906e273, 0 }, { 156, 7.47106292628289444708380937294e275, 0 }, { 157, 1.17295687942641442819215807155e278, 0 }, { 158, 1.85327186949373479654360975305e280, 0 }, { 159, 2.94670227249503832650433950735e282, 0 }, { 160, 4.71472363599206132240694321176e284, 0 }, { 161, 7.59070505394721872907517857094e286, 0 }, { 162, 1.22969421873944943411017892849e289, 0 }, { 163, 2.00440157654530257759959165344e291, 0 }, { 164, 3.28721858553429622726333031164e293, 0 }, { 165, 5.42391066613158877498449501421e295, 0 }, { 166, 9.00369170577843736647426172359e297, 0 }, { 167, 1.50361651486499904020120170784e300, 0 }, { 168, 2.52607574497319838753801886917e302, 0 }, { 169, 4.26906800900470527493925188890e304, 0 }, { 170, 7.25741561530799896739672821113e306, 0 }, /* { 171, 1.24101807021766782342484052410e309, 0 }, { 172, 2.13455108077438865629072570146e311, 0 }, { 173, 3.69277336973969237538295546352e313, 0 }, { 174, 6.42542566334706473316634250653e315, 0 }, { 175, 1.12444949108573632830410993864e318, 0 }, { 176, 1.97903110431089593781523349201e320, 0 }, { 177, 3.50288505463028580993296328086e322, 0 }, { 178, 6.23513539724190874168067463993e324, 0 }, { 179, 1.11608923610630166476084076055e327, 0 }, { 180, 2.00896062499134299656951336898e329, 0 }, { 181, 3.63621873123433082379081919786e331, 0 }, { 182, 6.61791809084648209929929094011e333, 0 }, { 183, 1.21107901062490622417177024204e336, 0 }, { 184, 2.22838537954982745247605724535e338, 0 }, { 185, 4.12251295216718078708070590390e340, 0 }, { 186, 7.66787409103095626397011298130e342, 0 }, { 187, 1.43389245502278882136241112750e345, 0 }, { 188, 2.69571781544284298416133291969e347, 0 }, { 189, 5.09490667118697324006491921822e349, 0 }, { 190, 9.68032267525524915612334651460e351, 0 }, { 191, 1.84894163097375258881955918429e354, 0 }, { 192, 3.54996793146960497053355363384e356, 0 }, { 193, 6.85143810773633759312975851330e358, 0 }, { 194, 1.32917899290084949306717315158e361, 0 }, { 195, 2.59189903615665651148098764559e363, 0 }, { 196, 5.08012211086704676250273578535e365, 0 }, { 197, 1.00078405584080821221303894971e368, 0 }, { 198, 1.98155243056480026018181712043e370, 0 }, { 199, 3.94328933682395251776181606966e372, 0 }, { 200, 7.88657867364790503552363213932e374, 0 } */ }; static struct {int n; double f; long i; } doub_fact_table[GSL_SF_DOUBLEFACT_NMAX + 1] = { { 0, 1.000000000000000000000000000, 1L }, { 1, 1.000000000000000000000000000, 1L }, { 2, 2.000000000000000000000000000, 2L }, { 3, 3.000000000000000000000000000, 3L }, { 4, 8.000000000000000000000000000, 8L }, { 5, 15.00000000000000000000000000, 15L }, { 6, 48.00000000000000000000000000, 48L }, { 7, 105.0000000000000000000000000, 105L }, { 8, 384.0000000000000000000000000, 384L }, { 9, 945.0000000000000000000000000, 945L }, { 10, 3840.000000000000000000000000, 3840L }, { 11, 10395.00000000000000000000000, 10395L }, { 12, 46080.00000000000000000000000, 46080L }, { 13, 135135.0000000000000000000000, 135135L }, { 14, 645120.00000000000000000000000, 645120L }, { 15, 2.02702500000000000000000000000e6, 2027025L }, { 16, 1.03219200000000000000000000000e7, 10321920L }, { 17, 3.4459425000000000000000000000e7, 34459425L }, { 18, 1.85794560000000000000000000000e8, 185794560L }, { 19, 6.5472907500000000000000000000e8, 0 }, { 20, 3.7158912000000000000000000000e9, 0 }, { 21, 1.37493105750000000000000000000e10, 0 }, { 22, 8.1749606400000000000000000000e10, 0 }, { 23, 3.1623414322500000000000000000e11, 0 }, { 24, 1.96199055360000000000000000000e12, 0 }, { 25, 7.9058535806250000000000000000e12, 0 }, { 26, 5.1011754393600000000000000000e13, 0 }, { 27, 2.13458046676875000000000000000e14, 0 }, { 28, 1.42832912302080000000000000000e15, 0 }, { 29, 6.1902833536293750000000000000e15, 0 }, { 30, 4.2849873690624000000000000000e16, 0 }, { 31, 1.91898783962510625000000000000e17, 0 }, { 32, 1.37119595809996800000000000000e18, 0 }, { 33, 6.3326598707628506250000000000e18, 0 }, { 34, 4.6620662575398912000000000000e19, 0 }, { 35, 2.21643095476699771875000000000e20, 0 }, { 36, 1.67834385271436083200000000000e21, 0 }, { 37, 8.2007945326378915593750000000e21, 0 }, { 38, 6.3777066403145711616000000000e22, 0 }, { 39, 3.1983098677287777081562500000e23, 0 }, { 40, 2.55108265612582846464000000000e24, 0 }, { 41, 1.31130704576879886034406250000e25, 0 }, { 42, 1.07145471557284795514880000000e26, 0 }, { 43, 5.6386202968058350994794687500e26, 0 }, { 44, 4.7144007485205310026547200000e27, 0 }, { 45, 2.53737913356262579476576093750e28, 0 }, { 46, 2.16862434431944426122117120000e29, 0 }, { 47, 1.19256819277443412353990764062e30, 0 }, { 48, 1.04093968527333324538616217600e31, 0 }, { 49, 5.8435841445947272053455474391e31, 0 }, { 50, 5.2046984263666662269308108800e32, 0 }, { 51, 2.98022791374331087472622919392e33, 0 }, { 52, 2.70644318171066643800402165760e34, 0 }, { 53, 1.57952079428395476360490147278e35, 0 }, { 54, 1.46147931812375987652217169510e36, 0 }, { 55, 8.6873643685617511998269581003e36, 0 }, { 56, 8.1842841814930553085241614926e37, 0 }, { 57, 4.9517976900801981839013661172e38, 0 }, { 58, 4.7468848252659720789440136657e39, 0 }, { 59, 2.92156063714731692850180600912e40, 0 }, { 60, 2.84813089515958324736640819942e41, 0 }, { 61, 1.78215198865986332638610166557e42, 0 }, { 62, 1.76584115499894161336717308364e43, 0 }, { 63, 1.12275575285571389562324404931e44, 0 }, { 64, 1.13013833919932263255499077353e45, 0 }, { 65, 7.2979123935621403215510863205e45, 0 }, { 66, 7.4589130387155293748629391053e46, 0 }, { 67, 4.8896013036866340154392278347e47, 0 }, { 68, 5.0720608663265599749067985916e48, 0 }, { 69, 3.3738248995437774706530672060e49, 0 }, { 70, 3.5504426064285919824347590141e50, 0 }, { 71, 2.39541567867608200416367771623e51, 0 }, { 72, 2.55631867662858622735302649017e52, 0 }, { 73, 1.74865344543353986303948473285e53, 0 }, { 74, 1.89167582070515380824123960272e54, 0 }, { 75, 1.31149008407515489727961354964e55, 0 }, { 76, 1.43767362373591689426334209807e56, 0 }, { 77, 1.00984736473786927090530243322e57, 0 }, { 78, 1.12138542651401517752540683649e58, 0 }, { 79, 7.9777941814291672401518892225e58, 0 }, { 80, 8.9710834121121214202032546920e59, 0 }, { 81, 6.4620132869576254645230302702e60, 0 }, { 82, 7.3562883979319395645666688474e61, 0 }, { 83, 5.3634710281748291355541151243e62, 0 }, { 84, 6.1792822542628292342360018318e63, 0 }, { 85, 4.5589503739486047652209978556e64, 0 }, { 86, 5.3141827386660331414429615754e65, 0 }, { 87, 3.9662868253352861457422681344e66, 0 }, { 88, 4.6764808100261091644698061863e67, 0 }, { 89, 3.5299952745484046697106186396e68, 0 }, { 90, 4.2088327290234982480228255677e69, 0 }, { 91, 3.2122956998390482494366629620e70, 0 }, { 92, 3.8721261107016183881809995223e71, 0 }, { 93, 2.98743500085031487197609655470e72, 0 }, { 94, 3.6397985440595212848901395509e73, 0 }, { 95, 2.83806325080779912837729172696e74, 0 }, { 96, 3.4942066022971404334945339689e75, 0 }, { 97, 2.75292135328356515452597297515e76, 0 }, { 98, 3.4243224702511976248246432895e77, 0 }, { 99, 2.72539213975072950298071324540e78, 0 }, { 100, 3.4243224702511976248246432895e79, 0 }, { 101, 2.75264606114823679801052037785e80, 0 }, { 102, 3.4928089196562215773211361553e81, 0 }, { 103, 2.83522544298268390195083598919e82, 0 }, { 104, 3.6325212764424704404139816015e83, 0 }, { 105, 2.97698671513181809704837778865e84, 0 }, { 106, 3.8504725530290186668388204976e85, 0 }, { 107, 3.1853757851910453638417642339e86, 0 }, { 108, 4.1585103572713401601859261374e87, 0 }, { 109, 3.4720596058582394465875230149e88, 0 }, { 110, 4.5743613929984741762045187512e89, 0 }, { 111, 3.8539861625026457857121505465e90, 0 }, { 112, 5.1232847601582910773490610013e91, 0 }, { 113, 4.3550043636279897378547301176e92, 0 }, { 114, 5.8405446265804518281779295415e93, 0 }, { 115, 5.0082550181721881985329396352e94, 0 }, { 116, 6.7750317668333241206863982681e95, 0 }, { 117, 5.8596583712614601922835393732e96, 0 }, { 118, 7.9945374848633224624099499564e97, 0 }, { 119, 6.9729934618011376288174118541e98, 0 }, { 120, 9.5934449818359869548919399477e99, 0 }, { 121, 8.4373220887793765308690683435e100, 0 }, { 122, 1.17040028778399040849681667362e102, 0 }, { 123, 1.03779061691986331329689540625e103, 0 }, { 124, 1.45129635685214810653605267528e104, 0 }, { 125, 1.29723827114982914162111925781e105, 0 }, { 126, 1.82863340963370661423542637086e106, 0 }, { 127, 1.64749260436028300985882145742e107, 0 }, { 128, 2.34065076433114446622134575470e108, 0 }, { 129, 2.12526545962476508271787968008e109, 0 }, { 130, 3.04284599363048780608774948111e110, 0 }, { 131, 2.78409775210844225836042238090e111, 0 }, { 132, 4.0165567115922439040358293151e112, 0 }, { 133, 3.7028500103042282036193617666e113, 0 }, { 134, 5.3821859935336068314080112822e114, 0 }, { 135, 4.9988475139107080748861383849e115, 0 }, { 136, 7.3197729512057052907148953438e116, 0 }, { 137, 6.8484210940576700625940095873e117, 0 }, { 138, 1.01012866726638733011865555744e119, 0 }, { 139, 9.5193053207401613870056733264e119, 0 }, { 140, 1.41418013417294226216611778042e121, 0 }, { 141, 1.34222205022436275556779993902e122, 0 }, { 142, 2.00813579052557801227588724819e123, 0 }, { 143, 1.91937753182083874046195391280e124, 0 }, { 144, 2.89171553835683233767727763739e125, 0 }, { 145, 2.78309742114021617366983317355e126, 0 }, { 146, 4.2219046860009752130088253506e127, 0 }, { 147, 4.0911532090761177752946547651e128, 0 }, { 148, 6.2484189352814433152530615189e129, 0 }, { 149, 6.0958182815234154851890356000e130, 0 }, { 150, 9.3726284029221649728795922783e131, 0 }, { 151, 9.2046856051003573826354437561e132, 0 }, { 152, 1.42463951724416907587769802630e134, 0 }, { 153, 1.40831689758035467954322289468e135, 0 }, { 154, 2.19394485655602037685165496051e136, 0 }, { 155, 2.18289119124954975329199548675e137, 0 }, { 156, 3.4225539762273917878885817384e138, 0 }, { 157, 3.4271391702617931126684329142e139, 0 }, { 158, 5.4076352824392790248639591467e140, 0 }, { 159, 5.4491512807162510491428083336e141, 0 }, { 160, 8.6522164519028464397823346347e142, 0 }, { 161, 8.7731335619531641891199214170e143, 0 }, { 162, 1.40165906520826112324473821082e145, 0 }, { 163, 1.43002077059836576282654719098e146, 0 }, { 164, 2.29872086694154824212137066574e147, 0 }, { 165, 2.35953427148730350866380286512e148, 0 }, { 166, 3.8158766391229700819214753051e149, 0 }, { 167, 3.9404222333837968594685507847e150, 0 }, { 168, 6.4106727537265897376280785126e151, 0 }, { 169, 6.6593135744186166925018508262e152, 0 }, { 170, 1.08981436813352025539677334714e154, 0 }, { 171, 1.13874262122558345441781649128e155, 0 }, { 172, 1.87448071318965483928245015709e156, 0 }, { 173, 1.97002473472025937614282252992e157, 0 }, { 174, 3.2615964409499994203514632733e158, 0 }, { 175, 3.4475432857604539082499394274e159, 0 }, { 176, 5.7404097360719989798185753611e160, 0 }, { 177, 6.1021516157960034176023927864e161, 0 }, { 178, 1.02179293302081581840770641427e163, 0 }, { 179, 1.09228513922748461175082830877e164, 0 }, { 180, 1.83922727943746847313387154568e165, 0 }, { 181, 1.97703610200174714726899923887e166, 0 }, { 182, 3.3473936485761926211036462131e167, 0 }, { 183, 3.6179760666631972795022686071e168, 0 }, { 184, 6.1592043133801944228307090322e169, 0 }, { 185, 6.6932557233269149670791969232e170, 0 }, { 186, 1.14561200228871616264651187999e172, 0 }, { 187, 1.25163882026213309884380982464e173, 0 }, { 188, 2.15375056430278638577544233437e174, 0 }, { 189, 2.36559737029543155681480056857e175, 0 }, { 190, 4.0921260721752941329733404353e176, 0 }, { 191, 4.5182909772642742735162690860e177, 0 }, { 192, 7.8568820585765647353088136358e178, 0 }, { 193, 8.7203015861200493478863993359e179, 0 }, { 194, 1.52423511936385355864990984535e181, 0 }, { 195, 1.70045880929340962283784787050e182, 0 }, { 196, 2.98750083395315297495382329688e183, 0 }, { 197, 3.3499038543080169569905603049e184, 0 }, { 198, 5.9152516512272428904085701278e185, 0 }, { 199, 6.6663086700729537444112150067e186, 0 }, { 200, 1.18305033024544857808171402556e188, 0 }, { 201, 1.33992804268466370262665421635e189, 0 }, { 202, 2.38976166709580612772506233164e190, 0 }, { 203, 2.72005392664986731633210805920e191, 0 }, { 204, 4.8751138008754445005591271565e192, 0 }, { 205, 5.5761105496322279984808215214e193, 0 }, { 206, 1.00427344298034156711518019425e195, 0 }, { 207, 1.15425488377387119568553005492e196, 0 }, { 208, 2.08888876139911045959957480403e197, 0 }, { 209, 2.41239270708739079898275781478e198, 0 }, { 210, 4.3866663989381319651591070885e199, 0 }, { 211, 5.0901486119543945858536189892e200, 0 }, { 212, 9.2997327657488397661373070276e201, 0 }, { 213, 1.08420165434628604678682084470e203, 0 }, { 214, 1.99014281187025170995338370390e204, 0 }, { 215, 2.33103355684451500059166481610e205, 0 }, { 216, 4.2987084736397436934993088004e206, 0 }, { 217, 5.0583428183525975512839126509e207, 0 }, { 218, 9.3711844725346412518284931849e208, 0 }, { 219, 1.10777707721921886373117687056e210, 0 }, { 220, 2.06166058395762107540226850068e211, 0 }, { 221, 2.44818734065447368884590088393e212, 0 }, { 222, 4.5768864963859187873930360715e213, 0 }, { 223, 5.4594577696594763261263589712e214, 0 }, { 224, 1.02522257519044580837604008002e216, 0 }, { 225, 1.22837799817338217337843076851e217, 0 }, { 226, 2.31700301993040752692985058084e218, 0 }, { 227, 2.78841805585357753356903784452e219, 0 }, { 228, 5.2827668854413291614000593243e220, 0 }, { 229, 6.3854773479046925518730966640e221, 0 }, { 230, 1.21503638365150570712201364459e223, 0 }, { 231, 1.47504526736598397948268532937e224, 0 }, { 232, 2.81888441007149324052307165546e225, 0 }, { 233, 3.4368554729627426721946568174e226, 0 }, { 234, 6.5961895195672941828239876738e227, 0 }, { 235, 8.0766103614624452796574435210e228, 0 }, { 236, 1.55670072661788142714646109101e230, 0 }, { 237, 1.91415665566659953127881411447e231, 0 }, { 238, 3.7049477293505577966085773966e232, 0 }, { 239, 4.5748344070431728797563657336e233, 0 }, { 240, 8.8918745504413387118605857518e234, 0 }, { 241, 1.10253509209740466402128414180e236, 0 }, { 242, 2.15183364120680396827026175195e237, 0 }, { 243, 2.67916027379669333357172046456e238, 0 }, { 244, 5.2504740845446016825794386748e239, 0 }, { 245, 6.5639426708018986672507151382e240, 0 }, { 246, 1.29161662479797201391454191399e242, 0 }, { 247, 1.62129383968806897081092663913e243, 0 }, { 248, 3.2032092294989705945080639467e244, 0 }, { 249, 4.0370216608232917373192073314e245, 0 }, { 250, 8.0080230737474264862701598667e246, 0 }, { 251, 1.01329243686664622606712104019e248, 0 }, { 252, 2.01802181458435147454008028642e249, 0 }, { 253, 2.56362986527261495194981623168e250, 0 }, { 254, 5.1257754090442527453318039275e251, 0 }, { 255, 6.5372561564451681274720313908e252, 0 }, { 256, 1.31219850471532870280494180544e254, 0 }, { 257, 1.68007483220640820876031206743e255, 0 }, { 258, 3.3854721421655480532367498580e256, 0 }, { 259, 4.3513938154145972606892082546e257, 0 }, { 260, 8.8022275696304249384155496309e258, 0 }, { 261, 1.13571378582320988503988335446e260, 0 }, { 262, 2.30618362324317133386487400329e261, 0 }, { 263, 2.98692725671504199765489322224e262, 0 }, { 264, 6.0883247653619723214032673687e263, 0 }, { 265, 7.9153572302948612937854670389e264, 0 }, { 266, 1.61949438758628463749326912007e266, 0 }, { 267, 2.11340038048872796544071969939e267, 0 }, { 268, 4.3402449587312428284819612418e268, 0 }, { 269, 5.6850470235146782270355359914e269, 0 }, { 270, 1.17186613885743556369012953528e271, 0 }, { 271, 1.54064774337247779952663025366e272, 0 }, { 272, 3.1874758976922247332371523360e273, 0 }, { 273, 4.2059683394068643927077005925e274, 0 }, { 274, 8.7336839596766957690697974006e275, 0 }, { 275, 1.15664129333688770799461766294e277, 0 }, { 276, 2.41049677287076803226326408256e278, 0 }, { 277, 3.2038963825431789511450909263e279, 0 }, { 278, 6.7011810285807351296918741495e280, 0 }, { 279, 8.9388709072954692736948036845e281, 0 }, { 280, 1.87633068800260583631372476186e283, 0 }, { 281, 2.51182272495002686590823983534e284, 0 }, { 282, 5.2912525401673484584047038284e285, 0 }, { 283, 7.1084583116085760305203187340e286, 0 }, { 284, 1.50271572140752696218693588728e288, 0 }, { 285, 2.02591061880844416869829083919e289, 0 }, { 286, 4.2977669632255271118546366376e290, 0 }, { 287, 5.8143634759802347641640947085e291, 0 }, { 288, 1.23775688540895180821413535163e293, 0 }, { 289, 1.68035104455828784684342337075e294, 0 }, { 290, 3.5894949676859602438209925197e295, 0 }, { 291, 4.8898215396646176343143620089e296, 0 }, { 292, 1.04813253056430039119572981576e298, 0 }, { 293, 1.43271771112173296685410806860e299, 0 }, { 294, 3.08150963985904315011544565835e300, 0 }, { 295, 4.2265172478091122522196188024e301, 0 }, { 296, 9.1212685339827677243417191487e302, 0 }, { 297, 1.25527562259930633890922678431e304, 0 }, /* { 298, 2.71813802312686478185383230631e305, 0 }, { 299, 3.7532741115719259533385880851e306, 0 }, { 300, 8.1544140693805943455614969189e307, } */ }; /* Chebyshev coefficients for Gamma*(3/4(t+1)+1/2), -1val = (zr+0.5)*log1_r.val - zi*log1_i.val - (zr+7.5) + LogRootTwoPi_ + logAg_r.val; yi->val = zi*log1_r.val + (zr+0.5)*log1_i.val - zi + logAg_i.val; yr->err = 4.0 * GSL_DBL_EPSILON * fabs(yr->val); yi->err = 4.0 * GSL_DBL_EPSILON * fabs(yi->val); yi_tmp_val = yi->val; yi_tmp_err = yi->err; gsl_sf_angle_restrict_symm_err_e(yi_tmp_val, yi); yi->err += yi_tmp_err; return GSL_SUCCESS; } /* Lanczos method for real x > 0; * gamma=7, truncated at 1/(z+8) * [J. SIAM Numer. Anal, Ser. B, 1 (1964) 86] */ static int lngamma_lanczos(double x, gsl_sf_result * result) { int k; double Ag; double term1, term2; x -= 1.0; /* Lanczos writes z! instead of Gamma(z) */ Ag = lanczos_7_c[0]; for(k=1; k<=8; k++) { Ag += lanczos_7_c[k]/(x+k); } /* (x+0.5)*log(x+7.5) - (x+7.5) + LogRootTwoPi_ + log(Ag(x)) */ term1 = (x+0.5)*log((x+7.5)/M_E); term2 = LogRootTwoPi_ + log(Ag); result->val = term1 + (term2 - 7.0); result->err = 2.0 * GSL_DBL_EPSILON * (fabs(term1) + fabs(term2) + 7.0); result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } /* x = eps near zero * gives double-precision for |eps| < 0.02 */ static int lngamma_sgn_0(double eps, gsl_sf_result * lng, double * sgn) { /* calculate series for g(eps) = Gamma(eps) eps - 1/(1+eps) - eps/2 */ const double c1 = -0.07721566490153286061; const double c2 = -0.01094400467202744461; const double c3 = 0.09252092391911371098; const double c4 = -0.01827191316559981266; const double c5 = 0.01800493109685479790; const double c6 = -0.00685088537872380685; const double c7 = 0.00399823955756846603; const double c8 = -0.00189430621687107802; const double c9 = 0.00097473237804513221; const double c10 = -0.00048434392722255893; const double g6 = c6+eps*(c7+eps*(c8 + eps*(c9 + eps*c10))); const double g = eps*(c1+eps*(c2+eps*(c3+eps*(c4+eps*(c5+eps*g6))))); /* calculate Gamma(eps) eps, a positive quantity */ const double gee = g + 1.0/(1.0+eps) + 0.5*eps; lng->val = log(gee/fabs(eps)); lng->err = 4.0 * GSL_DBL_EPSILON * fabs(lng->val); *sgn = GSL_SIGN(eps); return GSL_SUCCESS; } /* x near a negative integer * Calculates sign as well as log(|gamma(x)|). * x = -N + eps * assumes N >= 1 */ static int lngamma_sgn_sing(int N, double eps, gsl_sf_result * lng, double * sgn) { if(eps == 0.0) { lng->val = 0.0; lng->err = 0.0; *sgn = 0.0; GSL_ERROR ("error", GSL_EDOM); } else if(N == 1) { /* calculate series for * g = eps gamma(-1+eps) + 1 + eps/2 (1+3eps)/(1-eps^2) * double-precision for |eps| < 0.02 */ const double c0 = 0.07721566490153286061; const double c1 = 0.08815966957356030521; const double c2 = -0.00436125434555340577; const double c3 = 0.01391065882004640689; const double c4 = -0.00409427227680839100; const double c5 = 0.00275661310191541584; const double c6 = -0.00124162645565305019; const double c7 = 0.00065267976121802783; const double c8 = -0.00032205261682710437; const double c9 = 0.00016229131039545456; const double g5 = c5 + eps*(c6 + eps*(c7 + eps*(c8 + eps*c9))); const double g = eps*(c0 + eps*(c1 + eps*(c2 + eps*(c3 + eps*(c4 + eps*g5))))); /* calculate eps gamma(-1+eps), a negative quantity */ const double gam_e = g - 1.0 - 0.5*eps*(1.0+3.0*eps)/(1.0 - eps*eps); lng->val = log(fabs(gam_e)/fabs(eps)); lng->err = 2.0 * GSL_DBL_EPSILON * fabs(lng->val); *sgn = ( eps > 0.0 ? -1.0 : 1.0 ); return GSL_SUCCESS; } else { double g; /* series for sin(Pi(N+1-eps))/(Pi eps) modulo the sign * double-precision for |eps| < 0.02 */ const double cs1 = -1.6449340668482264365; const double cs2 = 0.8117424252833536436; const double cs3 = -0.1907518241220842137; const double cs4 = 0.0261478478176548005; const double cs5 = -0.0023460810354558236; const double e2 = eps*eps; const double sin_ser = 1.0 + e2*(cs1+e2*(cs2+e2*(cs3+e2*(cs4+e2*cs5)))); /* calculate series for ln(gamma(1+N-eps)) * double-precision for |eps| < 0.02 */ double aeps = fabs(eps); double c1, c2, c3, c4, c5, c6, c7; double lng_ser; gsl_sf_result c0; gsl_sf_result psi_0; gsl_sf_result psi_1; gsl_sf_result psi_2; gsl_sf_result psi_3; gsl_sf_result psi_4; gsl_sf_result psi_5; gsl_sf_result psi_6; psi_2.val = 0.0; psi_3.val = 0.0; psi_4.val = 0.0; psi_5.val = 0.0; psi_6.val = 0.0; gsl_sf_lnfact_e(N, &c0); gsl_sf_psi_int_e(N+1, &psi_0); gsl_sf_psi_1_int_e(N+1, &psi_1); if(aeps > 0.00001) gsl_sf_psi_n_e(2, N+1.0, &psi_2); if(aeps > 0.0002) gsl_sf_psi_n_e(3, N+1.0, &psi_3); if(aeps > 0.001) gsl_sf_psi_n_e(4, N+1.0, &psi_4); if(aeps > 0.005) gsl_sf_psi_n_e(5, N+1.0, &psi_5); if(aeps > 0.01) gsl_sf_psi_n_e(6, N+1.0, &psi_6); c1 = psi_0.val; c2 = psi_1.val/2.0; c3 = psi_2.val/6.0; c4 = psi_3.val/24.0; c5 = psi_4.val/120.0; c6 = psi_5.val/720.0; c7 = psi_6.val/5040.0; lng_ser = c0.val-eps*(c1-eps*(c2-eps*(c3-eps*(c4-eps*(c5-eps*(c6-eps*c7)))))); /* calculate * g = ln(|eps gamma(-N+eps)|) * = -ln(gamma(1+N-eps)) + ln(|eps Pi/sin(Pi(N+1+eps))|) */ g = -lng_ser - log(sin_ser); lng->val = g - log(fabs(eps)); lng->err = c0.err + 2.0 * GSL_DBL_EPSILON * (fabs(g) + fabs(lng->val)); *sgn = ( GSL_IS_ODD(N) ? -1.0 : 1.0 ) * ( eps > 0.0 ? 1.0 : -1.0 ); return GSL_SUCCESS; } } /* This gets bad near the negative half axis. However, this * region can be avoided by use of the reflection formula, as usual. * Only the first two terms of the series are kept. */ #if 0 static int lngamma_complex_stirling(const double zr, const double zi, double * lg_r, double * arg) { double re_zinv, im_zinv; double re_zinv2, im_zinv2; double re_zinv3, im_zinv3; double re_zhlnz, im_zhlnz; double r, lnr, theta; gsl_sf_complex_log_e(zr, zi, &lnr, &theta); /* z = r e^{i theta} */ r = exp(lnr); re_zinv = (zr/r)/r; im_zinv = -(zi/r)/r; re_zinv2 = re_zinv*re_zinv - im_zinv*im_zinv; re_zinv2 = 2.0*re_zinv*im_zinv; re_zinv3 = re_zinv2*re_zinv - im_zinv2*im_zinv; re_zinv3 = re_zinv2*im_zinv + im_zinv2*re_zinv; re_zhlnz = (zr - 0.5)*lnr - zi*theta; im_zhlnz = zi*lnr + zr*theta; *lg_r = re_zhlnz - zr + 0.5*(M_LN2+M_LNPI) + re_zinv/12.0 - re_zinv3/360.0; *arg = im_zhlnz - zi + 1.0/12.0*im_zinv - im_zinv3/360.0; return GSL_SUCCESS; } #endif /* 0 */ inline static int lngamma_1_pade(const double eps, gsl_sf_result * result) { /* Use (2,2) Pade for Log[Gamma[1+eps]]/eps * plus a correction series. */ const double n1 = -1.0017419282349508699871138440; const double n2 = 1.7364839209922879823280541733; const double d1 = 1.2433006018858751556055436011; const double d2 = 5.0456274100274010152489597514; const double num = (eps + n1) * (eps + n2); const double den = (eps + d1) * (eps + d2); const double pade = 2.0816265188662692474880210318 * num / den; const double c0 = 0.004785324257581753; const double c1 = -0.01192457083645441; const double c2 = 0.01931961413960498; const double c3 = -0.02594027398725020; const double c4 = 0.03141928755021455; const double eps5 = eps*eps*eps*eps*eps; const double corr = eps5 * (c0 + eps*(c1 + eps*(c2 + eps*(c3 + c4*eps)))); result->val = eps * (pade + corr); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } inline static int lngamma_2_pade(const double eps, gsl_sf_result * result) { /* Use (2,2) Pade for Log[Gamma[2+eps]]/eps * plus a correction series. */ const double n1 = 1.000895834786669227164446568; const double n2 = 4.209376735287755081642901277; const double d1 = 2.618851904903217274682578255; const double d2 = 10.85766559900983515322922936; const double num = (eps + n1) * (eps + n2); const double den = (eps + d1) * (eps + d2); const double pade = 2.85337998765781918463568869 * num/den; const double c0 = 0.0001139406357036744; const double c1 = -0.0001365435269792533; const double c2 = 0.0001067287169183665; const double c3 = -0.0000693271800931282; const double c4 = 0.0000407220927867950; const double eps5 = eps*eps*eps*eps*eps; const double corr = eps5 * (c0 + eps*(c1 + eps*(c2 + eps*(c3 + c4*eps)))); result->val = eps * (pade + corr); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } /* series for gammastar(x) * double-precision for x > 10.0 */ static int gammastar_ser(const double x, gsl_sf_result * result) { /* Use the Stirling series for the correction to Log(Gamma(x)), * which is better behaved and easier to compute than the * regular Stirling series for Gamma(x). */ const double y = 1.0/(x*x); const double c0 = 1.0/12.0; const double c1 = -1.0/360.0; const double c2 = 1.0/1260.0; const double c3 = -1.0/1680.0; const double c4 = 1.0/1188.0; const double c5 = -691.0/360360.0; const double c6 = 1.0/156.0; const double c7 = -3617.0/122400.0; const double ser = c0 + y*(c1 + y*(c2 + y*(c3 + y*(c4 + y*(c5 + y*(c6 + y*c7)))))); result->val = exp(ser/x); result->err = 2.0 * GSL_DBL_EPSILON * result->val * GSL_MAX_DBL(1.0, ser/x); return GSL_SUCCESS; } /* Chebyshev expansion for log(gamma(x)/gamma(8)) * 5 < x < 10 * -1 < t < 1 */ static double gamma_5_10_data[24] = { -1.5285594096661578881275075214, 4.8259152300595906319768555035, 0.2277712320977614992970601978, -0.0138867665685617873604917300, 0.0012704876495201082588139723, -0.0001393841240254993658962470, 0.0000169709242992322702260663, -2.2108528820210580075775889168e-06, 3.0196602854202309805163918716e-07, -4.2705675000079118380587357358e-08, 6.2026423818051402794663551945e-09, -9.1993973208880910416311405656e-10, 1.3875551258028145778301211638e-10, -2.1218861491906788718519522978e-11, 3.2821736040381439555133562600e-12, -5.1260001009953791220611135264e-13, 8.0713532554874636696982146610e-14, -1.2798522376569209083811628061e-14, 2.0417711600852502310258808643e-15, -3.2745239502992355776882614137e-16, 5.2759418422036579482120897453e-17, -8.5354147151695233960425725513e-18, 1.3858639703888078291599886143e-18, -2.2574398807738626571560124396e-19 }; static const cheb_series gamma_5_10_cs = { gamma_5_10_data, 23, -1, 1, 11 }; /* gamma(x) for x >= 1/2 * assumes x >= 1/2 */ static int gamma_xgthalf(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x == 0.5) { result->val = 1.77245385090551602729817; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else if (x <= (GSL_SF_FACT_NMAX + 1.0) && x == floor(x)) { int n = (int) floor (x); result->val = fact_table[n - 1].f; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else if(fabs(x - 1.0) < 0.01) { /* Use series for Gamma[1+eps] - 1/(1+eps). */ const double eps = x - 1.0; const double c1 = 0.4227843350984671394; const double c2 = -0.01094400467202744461; const double c3 = 0.09252092391911371098; const double c4 = -0.018271913165599812664; const double c5 = 0.018004931096854797895; const double c6 = -0.006850885378723806846; const double c7 = 0.003998239557568466030; result->val = 1.0/x + eps*(c1+eps*(c2+eps*(c3+eps*(c4+eps*(c5+eps*(c6+eps*c7)))))); result->err = GSL_DBL_EPSILON; return GSL_SUCCESS; } else if(fabs(x - 2.0) < 0.01) { /* Use series for Gamma[1 + eps]. */ const double eps = x - 2.0; const double c1 = 0.4227843350984671394; const double c2 = 0.4118403304264396948; const double c3 = 0.08157691924708626638; const double c4 = 0.07424901075351389832; const double c5 = -0.00026698206874501476832; const double c6 = 0.011154045718130991049; const double c7 = -0.002852645821155340816; const double c8 = 0.0021039333406973880085; result->val = 1.0 + eps*(c1+eps*(c2+eps*(c3+eps*(c4+eps*(c5+eps*(c6+eps*(c7+eps*c8))))))); result->err = GSL_DBL_EPSILON; return GSL_SUCCESS; } else if(x < 5.0) { /* Exponentiating the logarithm is fine, as * long as the exponential is not so large * that it greatly amplifies the error. */ gsl_sf_result lg; lngamma_lanczos(x, &lg); result->val = exp(lg.val); result->err = result->val * (lg.err + 2.0 * GSL_DBL_EPSILON); return GSL_SUCCESS; } else if(x < 10.0) { /* This is a sticky area. The logarithm * is too large and the gammastar series * is not good. */ const double gamma_8 = 5040.0; const double t = (2.0*x - 15.0)/5.0; gsl_sf_result c; cheb_eval_e(&gamma_5_10_cs, t, &c); result->val = exp(c.val) * gamma_8; result->err = result->val * c.err; result->err += 2.0 * GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else if(x < GSL_SF_GAMMA_XMAX) { /* We do not want to exponentiate the logarithm * if x is large because of the inevitable * inflation of the error. So we carefully * use pow() and exp() with exact quantities. */ double p = pow(x, 0.5*x); double e = exp(-x); double q = (p * e) * p; double pre = M_SQRT2 * M_SQRTPI * q/sqrt(x); gsl_sf_result gstar; int stat_gs = gammastar_ser(x, &gstar); result->val = pre * gstar.val; result->err = (x + 2.5) * GSL_DBL_EPSILON * result->val; return stat_gs; } else { OVERFLOW_ERROR(result); } } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_lngamma_e(double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(fabs(x - 1.0) < 0.01) { /* Note that we must amplify the errors * from the Pade evaluations because of * the way we must pass the argument, i.e. * writing (1-x) is a loss of precision * when x is near 1. */ int stat = lngamma_1_pade(x - 1.0, result); result->err *= 1.0/(GSL_DBL_EPSILON + fabs(x - 1.0)); return stat; } else if(fabs(x - 2.0) < 0.01) { int stat = lngamma_2_pade(x - 2.0, result); result->err *= 1.0/(GSL_DBL_EPSILON + fabs(x - 2.0)); return stat; } else if(x >= 0.5) { return lngamma_lanczos(x, result); } else if(x == 0.0) { DOMAIN_ERROR(result); } else if(fabs(x) < 0.02) { double sgn; return lngamma_sgn_0(x, result, &sgn); } else if(x > -0.5/(GSL_DBL_EPSILON*M_PI)) { /* Try to extract a fractional * part from x. */ double z = 1.0 - x; double s = sin(M_PI*z); double as = fabs(s); if(s == 0.0) { DOMAIN_ERROR(result); } else if(as < M_PI*0.015) { /* x is near a negative integer, -N */ if(x < INT_MIN + 2.0) { result->val = 0.0; result->err = 0.0; GSL_ERROR ("error", GSL_EROUND); } else { int N = -(int)(x - 0.5); double eps = x + N; double sgn; return lngamma_sgn_sing(N, eps, result, &sgn); } } else { gsl_sf_result lg_z; lngamma_lanczos(z, &lg_z); result->val = M_LNPI - (log(as) + lg_z.val); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val) + lg_z.err; return GSL_SUCCESS; } } else { /* |x| was too large to extract any fractional part */ result->val = 0.0; result->err = 0.0; GSL_ERROR ("error", GSL_EROUND); } } int gsl_sf_lngamma_sgn_e(double x, gsl_sf_result * result_lg, double * sgn) { if(fabs(x - 1.0) < 0.01) { int stat = lngamma_1_pade(x - 1.0, result_lg); result_lg->err *= 1.0/(GSL_DBL_EPSILON + fabs(x - 1.0)); *sgn = 1.0; return stat; } else if(fabs(x - 2.0) < 0.01) { int stat = lngamma_2_pade(x - 2.0, result_lg); result_lg->err *= 1.0/(GSL_DBL_EPSILON + fabs(x - 2.0)); *sgn = 1.0; return stat; } else if(x >= 0.5) { *sgn = 1.0; return lngamma_lanczos(x, result_lg); } else if(x == 0.0) { *sgn = 0.0; DOMAIN_ERROR(result_lg); } else if(fabs(x) < 0.02) { return lngamma_sgn_0(x, result_lg, sgn); } else if(x > -0.5/(GSL_DBL_EPSILON*M_PI)) { /* Try to extract a fractional * part from x. */ double z = 1.0 - x; double s = sin(M_PI*x); double as = fabs(s); if(s == 0.0) { *sgn = 0.0; DOMAIN_ERROR(result_lg); } else if(as < M_PI*0.015) { /* x is near a negative integer, -N */ if(x < INT_MIN + 2.0) { result_lg->val = 0.0; result_lg->err = 0.0; *sgn = 0.0; GSL_ERROR ("error", GSL_EROUND); } else { int N = -(int)(x - 0.5); double eps = x + N; return lngamma_sgn_sing(N, eps, result_lg, sgn); } } else { gsl_sf_result lg_z; lngamma_lanczos(z, &lg_z); *sgn = (s > 0.0 ? 1.0 : -1.0); result_lg->val = M_LNPI - (log(as) + lg_z.val); result_lg->err = 2.0 * GSL_DBL_EPSILON * fabs(result_lg->val) + lg_z.err; return GSL_SUCCESS; } } else { /* |x| was too large to extract any fractional part */ result_lg->val = 0.0; result_lg->err = 0.0; *sgn = 0.0; GSL_ERROR ("x too large to extract fraction part", GSL_EROUND); } } int gsl_sf_gamma_e(const double x, gsl_sf_result * result) { if(x < 0.5) { int rint_x = (int)floor(x+0.5); double f_x = x - rint_x; double sgn_gamma = ( GSL_IS_EVEN(rint_x) ? 1.0 : -1.0 ); double sin_term = sgn_gamma * sin(M_PI * f_x) / M_PI; if(sin_term == 0.0) { DOMAIN_ERROR(result); } else if(x > -169.0) { gsl_sf_result g; gamma_xgthalf(1.0-x, &g); if(fabs(sin_term) * g.val * GSL_DBL_MIN < 1.0) { result->val = 1.0/(sin_term * g.val); result->err = fabs(g.err/g.val) * fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { UNDERFLOW_ERROR(result); } } else { /* It is hard to control it here. * We can only exponentiate the * logarithm and eat the loss of * precision. */ gsl_sf_result lng; double sgn; int stat_lng = gsl_sf_lngamma_sgn_e(x, &lng, &sgn); int stat_e = gsl_sf_exp_mult_err_e(lng.val, lng.err, sgn, 0.0, result); return GSL_ERROR_SELECT_2(stat_e, stat_lng); } } else { return gamma_xgthalf(x, result); } } int gsl_sf_gammastar_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if(x < 0.5) { gsl_sf_result lg; const int stat_lg = gsl_sf_lngamma_e(x, &lg); const double lx = log(x); const double c = 0.5*(M_LN2+M_LNPI); const double lnr_val = lg.val - (x-0.5)*lx + x - c; const double lnr_err = lg.err + 2.0 * GSL_DBL_EPSILON *((x+0.5)*fabs(lx) + c); const int stat_e = gsl_sf_exp_err_e(lnr_val, lnr_err, result); return GSL_ERROR_SELECT_2(stat_lg, stat_e); } else if(x < 2.0) { const double t = 4.0/3.0*(x-0.5) - 1.0; return cheb_eval_e(&gstar_a_cs, t, result); } else if(x < 10.0) { const double t = 0.25*(x-2.0) - 1.0; gsl_sf_result c; cheb_eval_e(&gstar_b_cs, t, &c); result->val = c.val/(x*x) + 1.0 + 1.0/(12.0*x); result->err = c.err/(x*x); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < 1.0/GSL_ROOT4_DBL_EPSILON) { return gammastar_ser(x, result); } else if(x < 1.0/GSL_DBL_EPSILON) { /* Use Stirling formula for Gamma(x). */ const double xi = 1.0/x; result->val = 1.0 + xi/12.0*(1.0 + xi/24.0*(1.0 - xi*(139.0/180.0 + 571.0/8640.0*xi))); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { result->val = 1.0; result->err = 1.0/x; return GSL_SUCCESS; } } int gsl_sf_gammainv_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if (x <= 0.0 && x == floor(x)) { /* negative integer */ result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(x < 0.5) { gsl_sf_result lng; double sgn; int stat_lng = gsl_sf_lngamma_sgn_e(x, &lng, &sgn); if(stat_lng == GSL_EDOM) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(stat_lng != GSL_SUCCESS) { result->val = 0.0; result->err = 0.0; return stat_lng; } else { return gsl_sf_exp_mult_err_e(-lng.val, lng.err, sgn, 0.0, result); } } else { gsl_sf_result g; int stat_g = gamma_xgthalf(x, &g); if(stat_g == GSL_EOVRFLW) { UNDERFLOW_ERROR(result); } else { result->val = 1.0/g.val; result->err = fabs(g.err/g.val) * fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); CHECK_UNDERFLOW(result); return GSL_SUCCESS; } } } int gsl_sf_lngamma_complex_e(double zr, double zi, gsl_sf_result * lnr, gsl_sf_result * arg) { if(zr <= 0.5) { /* Transform to right half plane using reflection; * in fact we do a little better by stopping at 1/2. */ double x = 1.0-zr; double y = -zi; gsl_sf_result a, b; gsl_sf_result lnsin_r, lnsin_i; int stat_l = lngamma_lanczos_complex(x, y, &a, &b); int stat_s = gsl_sf_complex_logsin_e(M_PI*zr, M_PI*zi, &lnsin_r, &lnsin_i); if(stat_s == GSL_SUCCESS) { int stat_r; lnr->val = M_LNPI - lnsin_r.val - a.val; lnr->err = lnsin_r.err + a.err + 2.0 * GSL_DBL_EPSILON * fabs(lnr->val); arg->val = -lnsin_i.val - b.val; arg->err = lnsin_i.err + b.err + 2.0 * GSL_DBL_EPSILON * fabs(arg->val); stat_r = gsl_sf_angle_restrict_symm_e(&(arg->val)); return GSL_ERROR_SELECT_2(stat_r, stat_l); } else { DOMAIN_ERROR_2(lnr,arg); } } else { /* otherwise plain vanilla Lanczos */ return lngamma_lanczos_complex(zr, zi, lnr, arg); } } int gsl_sf_taylorcoeff_e(const int n, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x < 0.0 || n < 0) { DOMAIN_ERROR(result); } else if(n == 0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(n == 1) { result->val = x; result->err = 0.0; return GSL_SUCCESS; } else if(x == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { const double log2pi = M_LNPI + M_LN2; const double ln_test = n*(log(x)+1.0) + 1.0 - (n+0.5)*log(n+1.0) + 0.5*log2pi; if(ln_test < GSL_LOG_DBL_MIN+1.0) { UNDERFLOW_ERROR(result); } else if(ln_test > GSL_LOG_DBL_MAX-1.0) { OVERFLOW_ERROR(result); } else { double product = 1.0; int k; for(k=1; k<=n; k++) { product *= (x/k); } result->val = product; result->err = n * GSL_DBL_EPSILON * product; CHECK_UNDERFLOW(result); return GSL_SUCCESS; } } } int gsl_sf_fact_e(const unsigned int n, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(n < 18) { result->val = fact_table[n].f; result->err = 0.0; return GSL_SUCCESS; } else if(n <= GSL_SF_FACT_NMAX){ result->val = fact_table[n].f; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { OVERFLOW_ERROR(result); } } int gsl_sf_doublefact_e(const unsigned int n, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(n < 26) { result->val = doub_fact_table[n].f; result->err = 0.0; return GSL_SUCCESS; } else if(n <= GSL_SF_DOUBLEFACT_NMAX){ result->val = doub_fact_table[n].f; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { OVERFLOW_ERROR(result); } } int gsl_sf_lnfact_e(const unsigned int n, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(n <= GSL_SF_FACT_NMAX){ result->val = log(fact_table[n].f); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { gsl_sf_lngamma_e(n+1.0, result); return GSL_SUCCESS; } } int gsl_sf_lndoublefact_e(const unsigned int n, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(n <= GSL_SF_DOUBLEFACT_NMAX){ result->val = log(doub_fact_table[n].f); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(GSL_IS_ODD(n)) { gsl_sf_result lg; gsl_sf_lngamma_e(0.5*(n+2.0), &lg); result->val = 0.5*(n+1.0) * M_LN2 - 0.5*M_LNPI + lg.val; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val) + lg.err; return GSL_SUCCESS; } else { gsl_sf_result lg; gsl_sf_lngamma_e(0.5*n+1.0, &lg); result->val = 0.5*n*M_LN2 + lg.val; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val) + lg.err; return GSL_SUCCESS; } } int gsl_sf_lnchoose_e(unsigned int n, unsigned int m, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(m > n) { DOMAIN_ERROR(result); } else if(m == n || m == 0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { gsl_sf_result nf; gsl_sf_result mf; gsl_sf_result nmmf; if(m*2 > n) m = n-m; gsl_sf_lnfact_e(n, &nf); gsl_sf_lnfact_e(m, &mf); gsl_sf_lnfact_e(n-m, &nmmf); result->val = nf.val - mf.val - nmmf.val; result->err = nf.err + mf.err + nmmf.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_choose_e(unsigned int n, unsigned int m, gsl_sf_result * result) { if(m > n) { DOMAIN_ERROR(result); } else if(m == n || m == 0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if (n <= GSL_SF_FACT_NMAX) { result->val = (fact_table[n].f / fact_table[m].f) / fact_table[n-m].f; result->err = 6.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { if(m*2 < n) m = n-m; if (n - m < 64) /* compute product for a manageable number of terms */ { double prod = 1.0; unsigned int k; for(k=n; k>=m+1; k--) { double tk = (double)k / (double)(k-m); if(tk > GSL_DBL_MAX/prod) { OVERFLOW_ERROR(result); } prod *= tk; } result->val = prod; result->err = 2.0 * GSL_DBL_EPSILON * prod * fabs(n-m); return GSL_SUCCESS; } else { gsl_sf_result lc; const int stat_lc = gsl_sf_lnchoose_e (n, m, &lc); const int stat_e = gsl_sf_exp_err_e(lc.val, lc.err, result); return GSL_ERROR_SELECT_2(stat_lc, stat_e); } } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_fact(const unsigned int n) { EVAL_RESULT(gsl_sf_fact_e(n, &result)); } double gsl_sf_lnfact(const unsigned int n) { EVAL_RESULT(gsl_sf_lnfact_e(n, &result)); } double gsl_sf_doublefact(const unsigned int n) { EVAL_RESULT(gsl_sf_doublefact_e(n, &result)); } double gsl_sf_lndoublefact(const unsigned int n) { EVAL_RESULT(gsl_sf_lndoublefact_e(n, &result)); } double gsl_sf_lngamma(const double x) { EVAL_RESULT(gsl_sf_lngamma_e(x, &result)); } double gsl_sf_gamma(const double x) { EVAL_RESULT(gsl_sf_gamma_e(x, &result)); } double gsl_sf_gammastar(const double x) { EVAL_RESULT(gsl_sf_gammastar_e(x, &result)); } double gsl_sf_gammainv(const double x) { EVAL_RESULT(gsl_sf_gammainv_e(x, &result)); } double gsl_sf_taylorcoeff(const int n, const double x) { EVAL_RESULT(gsl_sf_taylorcoeff_e(n, x, &result)); } double gsl_sf_choose(unsigned int n, unsigned int m) { EVAL_RESULT(gsl_sf_choose_e(n, m, &result)); } double gsl_sf_lnchoose(unsigned int n, unsigned int m) { EVAL_RESULT(gsl_sf_lnchoose_e(n, m, &result)); } gsl/specfunc/gsl_sf_coupling.h0000644000175000017500000001010513536674414015063 0ustar eddedd/* specfunc/gsl_sf_coupling.h * * Copyright (C) 1996,1997,1998,1999,2000,2001,2002 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_COUPLING_H__ #define __GSL_SF_COUPLING_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* 3j Symbols: / ja jb jc \ * \ ma mb mc / * * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_coupling_3j_e(int two_ja, int two_jb, int two_jc, int two_ma, int two_mb, int two_mc, gsl_sf_result * result ); double gsl_sf_coupling_3j(int two_ja, int two_jb, int two_jc, int two_ma, int two_mb, int two_mc ); /* 6j Symbols: / ja jb jc \ * \ jd je jf / * * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_coupling_6j_e(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf, gsl_sf_result * result ); double gsl_sf_coupling_6j(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf ); /* Racah W coefficients: * * W(a b c d; e f) = (-1)^{a+b+c+d} / a b e \ * \ d c f / * * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_coupling_RacahW_e(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf, gsl_sf_result * result ); double gsl_sf_coupling_RacahW(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf ); /* 9j Symbols: / ja jb jc \ * | jd je jf | * \ jg jh ji / * * exceptions: GSL_EDOM, GSL_EOVRFLW */ int gsl_sf_coupling_9j_e(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf, int two_jg, int two_jh, int two_ji, gsl_sf_result * result ); double gsl_sf_coupling_9j(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf, int two_jg, int two_jh, int two_ji ); /* INCORRECT version of 6j Symbols: * This function actually calculates * / ja jb je \ * \ jd jc jf / * It represents the original implementation, * which had the above permutation of the * arguments. This was wrong and confusing, * and I had to fix it. Sorry for the trouble. * [GJ] Tue Nov 26 12:53:39 MST 2002 * * exceptions: GSL_EDOM, GSL_EOVRFLW */ #ifndef GSL_DISABLE_DEPRECATED int gsl_sf_coupling_6j_INCORRECT_e(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf, gsl_sf_result * result ); double gsl_sf_coupling_6j_INCORRECT(int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf ); #endif /* !GSL_DISABLE_DEPRECATED */ __END_DECLS #endif /* __GSL_SF_COUPLING_H__ */ gsl/specfunc/exp.c0000644000175000017500000003723613536674414012513 0ustar eddedd/* specfunc/exp.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "error.h" /* Evaluate the continued fraction for exprel. * [Abramowitz+Stegun, 4.2.41] */ static int exprel_n_CF(const double N, const double x, gsl_sf_result * result) { const double RECUR_BIG = GSL_SQRT_DBL_MAX; const int maxiter = 5000; int n = 1; double Anm2 = 1.0; double Bnm2 = 0.0; double Anm1 = 0.0; double Bnm1 = 1.0; double a1 = 1.0; double b1 = 1.0; double a2 = -x; double b2 = N+1; double an, bn; double fn; double An = b1*Anm1 + a1*Anm2; /* A1 */ double Bn = b1*Bnm1 + a1*Bnm2; /* B1 */ /* One explicit step, before we get to the main pattern. */ n++; Anm2 = Anm1; Bnm2 = Bnm1; Anm1 = An; Bnm1 = Bn; An = b2*Anm1 + a2*Anm2; /* A2 */ Bn = b2*Bnm1 + a2*Bnm2; /* B2 */ fn = An/Bn; while(n < maxiter) { double old_fn; double del; n++; Anm2 = Anm1; Bnm2 = Bnm1; Anm1 = An; Bnm1 = Bn; an = ( GSL_IS_ODD(n) ? ((n-1)/2)*x : -(N+(n/2)-1)*x ); bn = N + n - 1; An = bn*Anm1 + an*Anm2; Bn = bn*Bnm1 + an*Bnm2; if(fabs(An) > RECUR_BIG || fabs(Bn) > RECUR_BIG) { An /= RECUR_BIG; Bn /= RECUR_BIG; Anm1 /= RECUR_BIG; Bnm1 /= RECUR_BIG; Anm2 /= RECUR_BIG; Bnm2 /= RECUR_BIG; } old_fn = fn; fn = An/Bn; del = old_fn/fn; if(fabs(del - 1.0) < 2.0*GSL_DBL_EPSILON) break; } result->val = fn; result->err = 4.0*(n+1.0)*GSL_DBL_EPSILON*fabs(fn); if(n == maxiter) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_exp_e(const double x, gsl_sf_result * result) { if(x > GSL_LOG_DBL_MAX) { OVERFLOW_ERROR(result); } else if(x < GSL_LOG_DBL_MIN) { UNDERFLOW_ERROR(result); } else { result->val = exp(x); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_exp_e10_e(const double x, gsl_sf_result_e10 * result) { if(x > INT_MAX-1) { OVERFLOW_ERROR_E10(result); } else if(x < INT_MIN+1) { UNDERFLOW_ERROR_E10(result); } else { const int N = (x > GSL_LOG_DBL_MAX || x < GSL_LOG_DBL_MIN) ? (int) floor(x/M_LN10) : 0; result->val = exp(x-N*M_LN10); result->err = 2.0 * (fabs(x)+1.0) * GSL_DBL_EPSILON * fabs(result->val); result->e10 = N; return GSL_SUCCESS; } } int gsl_sf_exp_mult_e(const double x, const double y, gsl_sf_result * result) { const double ay = fabs(y); if(y == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if( ( x < 0.5*GSL_LOG_DBL_MAX && x > 0.5*GSL_LOG_DBL_MIN) && (ay < 0.8*GSL_SQRT_DBL_MAX && ay > 1.2*GSL_SQRT_DBL_MIN) ) { const double ex = exp(x); result->val = y * ex; result->err = (2.0 + fabs(x)) * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double ly = log(ay); const double lnr = x + ly; if(lnr > GSL_LOG_DBL_MAX - 0.01) { OVERFLOW_ERROR(result); } else if(lnr < GSL_LOG_DBL_MIN + 0.01) { UNDERFLOW_ERROR(result); } else { const double sy = GSL_SIGN(y); const double M = floor(x); const double N = floor(ly); const double a = x - M; const double b = ly - N; const double berr = 2.0 * GSL_DBL_EPSILON * (fabs(ly) + fabs(N)); result->val = sy * exp(M+N) * exp(a+b); result->err = berr * fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * (M + N + 1.0) * fabs(result->val); return GSL_SUCCESS; } } } int gsl_sf_exp_mult_e10_e(const double x, const double y, gsl_sf_result_e10 * result) { const double ay = fabs(y); if(y == 0.0) { result->val = 0.0; result->err = 0.0; result->e10 = 0; return GSL_SUCCESS; } else if( ( x < 0.5*GSL_LOG_DBL_MAX && x > 0.5*GSL_LOG_DBL_MIN) && (ay < 0.8*GSL_SQRT_DBL_MAX && ay > 1.2*GSL_SQRT_DBL_MIN) ) { const double ex = exp(x); result->val = y * ex; result->err = (2.0 + fabs(x)) * GSL_DBL_EPSILON * fabs(result->val); result->e10 = 0; return GSL_SUCCESS; } else { const double ly = log(ay); const double l10_val = (x + ly)/M_LN10; if(l10_val > INT_MAX-1) { OVERFLOW_ERROR_E10(result); } else if(l10_val < INT_MIN+1) { UNDERFLOW_ERROR_E10(result); } else { const double sy = GSL_SIGN(y); const int N = (int) floor(l10_val); const double arg_val = (l10_val - N) * M_LN10; const double arg_err = 2.0 * GSL_DBL_EPSILON * (fabs(x) + fabs(ly) + M_LN10*fabs(N)); result->val = sy * exp(arg_val); result->err = arg_err * fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); result->e10 = N; return GSL_SUCCESS; } } } int gsl_sf_exp_mult_err_e(const double x, const double dx, const double y, const double dy, gsl_sf_result * result) { const double ay = fabs(y); if(y == 0.0) { result->val = 0.0; result->err = fabs(dy * exp(x)); return GSL_SUCCESS; } else if( ( x < 0.5*GSL_LOG_DBL_MAX && x > 0.5*GSL_LOG_DBL_MIN) && (ay < 0.8*GSL_SQRT_DBL_MAX && ay > 1.2*GSL_SQRT_DBL_MIN) ) { double ex = exp(x); result->val = y * ex; result->err = ex * (fabs(dy) + fabs(y*dx)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double ly = log(ay); const double lnr = x + ly; if(lnr > GSL_LOG_DBL_MAX - 0.01) { OVERFLOW_ERROR(result); } else if(lnr < GSL_LOG_DBL_MIN + 0.01) { UNDERFLOW_ERROR(result); } else { const double sy = GSL_SIGN(y); const double M = floor(x); const double N = floor(ly); const double a = x - M; const double b = ly - N; const double eMN = exp(M+N); const double eab = exp(a+b); result->val = sy * eMN * eab; result->err = eMN * eab * 2.0*GSL_DBL_EPSILON; result->err += eMN * eab * fabs(dy/y); result->err += eMN * eab * fabs(dx); return GSL_SUCCESS; } } } int gsl_sf_exp_mult_err_e10_e(const double x, const double dx, const double y, const double dy, gsl_sf_result_e10 * result) { const double ay = fabs(y); if(y == 0.0) { result->val = 0.0; result->err = fabs(dy * exp(x)); result->e10 = 0; return GSL_SUCCESS; } else if( ( x < 0.5*GSL_LOG_DBL_MAX && x > 0.5*GSL_LOG_DBL_MIN) && (ay < 0.8*GSL_SQRT_DBL_MAX && ay > 1.2*GSL_SQRT_DBL_MIN) ) { const double ex = exp(x); result->val = y * ex; result->err = ex * (fabs(dy) + fabs(y*dx)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); result->e10 = 0; return GSL_SUCCESS; } else { const double ly = log(ay); const double l10_val = (x + ly)/M_LN10; if(l10_val > INT_MAX-1) { OVERFLOW_ERROR_E10(result); } else if(l10_val < INT_MIN+1) { UNDERFLOW_ERROR_E10(result); } else { const double sy = GSL_SIGN(y); const int N = (int) floor(l10_val); const double arg_val = (l10_val - N) * M_LN10; const double arg_err = dy/fabs(y) + dx + 2.0*GSL_DBL_EPSILON*fabs(arg_val); result->val = sy * exp(arg_val); result->err = arg_err * fabs(result->val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); result->e10 = N; return GSL_SUCCESS; } } } int gsl_sf_expm1_e(const double x, gsl_sf_result * result) { const double cut = 0.002; if(x < GSL_LOG_DBL_MIN) { result->val = -1.0; result->err = GSL_DBL_EPSILON; return GSL_SUCCESS; } else if(x < -cut) { result->val = exp(x) - 1.0; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < cut) { result->val = x * (1.0 + 0.5*x*(1.0 + x/3.0*(1.0 + 0.25*x*(1.0 + 0.2*x)))); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < GSL_LOG_DBL_MAX) { result->val = exp(x) - 1.0; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { OVERFLOW_ERROR(result); } } int gsl_sf_exprel_e(const double x, gsl_sf_result * result) { const double cut = 0.002; if(x < GSL_LOG_DBL_MIN) { result->val = -1.0/x; result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < -cut) { result->val = (exp(x) - 1.0)/x; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < cut) { result->val = (1.0 + 0.5*x*(1.0 + x/3.0*(1.0 + 0.25*x*(1.0 + 0.2*x)))); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < GSL_LOG_DBL_MAX) { result->val = (exp(x) - 1.0)/x; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { OVERFLOW_ERROR(result); } } int gsl_sf_exprel_2_e(double x, gsl_sf_result * result) { const double cut = 0.002; if(x < GSL_LOG_DBL_MIN) { result->val = -2.0/x*(1.0 + 1.0/x); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < -cut) { result->val = 2.0*(exp(x) - 1.0 - x)/(x*x); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < cut) { result->val = (1.0 + 1.0/3.0*x*(1.0 + 0.25*x*(1.0 + 0.2*x*(1.0 + 1.0/6.0*x)))); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < GSL_LOG_DBL_MAX) { result->val = 2.0*(exp(x) - 1.0 - x)/(x*x); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { OVERFLOW_ERROR(result); } } int gsl_sf_exprel_n_CF_e(const double N, const double x, gsl_sf_result * result) { return exprel_n_CF(N, x, result); } int gsl_sf_exprel_n_e(const int N, const double x, gsl_sf_result * result) { if(N < 0) { DOMAIN_ERROR(result); } else if(x == 0.0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(fabs(x) < GSL_ROOT3_DBL_EPSILON * N) { result->val = 1.0 + x/(N+1) * (1.0 + x/(N+2)); result->err = 2.0 * GSL_DBL_EPSILON; return GSL_SUCCESS; } else if(N == 0) { return gsl_sf_exp_e(x, result); } else if(N == 1) { return gsl_sf_exprel_e(x, result); } else if(N == 2) { return gsl_sf_exprel_2_e(x, result); } else { if(x > N && (-x + N*(1.0 + log(x/N)) < GSL_LOG_DBL_EPSILON)) { /* x is much larger than n. * Ignore polynomial part, so * exprel_N(x) ~= e^x N!/x^N */ gsl_sf_result lnf_N; double lnr_val; double lnr_err; double lnterm; gsl_sf_lnfact_e(N, &lnf_N); lnterm = N*log(x); lnr_val = x + lnf_N.val - lnterm; lnr_err = GSL_DBL_EPSILON * (fabs(x) + fabs(lnf_N.val) + fabs(lnterm)); lnr_err += lnf_N.err; return gsl_sf_exp_err_e(lnr_val, lnr_err, result); } else if(x > N) { /* Write the identity * exprel_n(x) = e^x n! / x^n (1 - Gamma[n,x]/Gamma[n]) * then use the asymptotic expansion * Gamma[n,x] ~ x^(n-1) e^(-x) (1 + (n-1)/x + (n-1)(n-2)/x^2 + ...) */ double ln_x = log(x); gsl_sf_result lnf_N; double lg_N; double lnpre_val; double lnpre_err; gsl_sf_lnfact_e(N, &lnf_N); /* log(N!) */ lg_N = lnf_N.val - log(N); /* log(Gamma(N)) */ lnpre_val = x + lnf_N.val - N*ln_x; lnpre_err = GSL_DBL_EPSILON * (fabs(x) + fabs(lnf_N.val) + fabs(N*ln_x)); lnpre_err += lnf_N.err; if(lnpre_val < GSL_LOG_DBL_MAX - 5.0) { int stat_eG; gsl_sf_result bigG_ratio; gsl_sf_result pre; int stat_ex = gsl_sf_exp_err_e(lnpre_val, lnpre_err, &pre); double ln_bigG_ratio_pre = -x + (N-1)*ln_x - lg_N; double bigGsum = 1.0; double term = 1.0; int k; for(k=1; kval = pre.val * (1.0 - bigG_ratio.val); result->err = pre.val * (2.0*GSL_DBL_EPSILON + bigG_ratio.err); result->err += pre.err * fabs(1.0 - bigG_ratio.val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_ex; } else { result->val = 0.0; result->err = 0.0; return stat_eG; } } else { OVERFLOW_ERROR(result); } } else if(x > -10.0*N) { return exprel_n_CF(N, x, result); } else { /* x -> -Inf asymptotic: * exprel_n(x) ~ e^x n!/x^n - n/x (1 + (n-1)/x + (n-1)(n-2)/x + ...) * ~ - n/x (1 + (n-1)/x + (n-1)(n-2)/x + ...) */ double sum = 1.0; double term = 1.0; int k; for(k=1; kval = -N/x * sum; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } } int gsl_sf_exp_err_e(const double x, const double dx, gsl_sf_result * result) { const double adx = fabs(dx); /* CHECK_POINTER(result) */ if(x + adx > GSL_LOG_DBL_MAX) { OVERFLOW_ERROR(result); } else if(x - adx < GSL_LOG_DBL_MIN) { UNDERFLOW_ERROR(result); } else { const double ex = exp(x); const double edx = exp(adx); result->val = ex; result->err = ex * GSL_MAX_DBL(GSL_DBL_EPSILON, edx - 1.0/edx); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_exp_err_e10_e(const double x, const double dx, gsl_sf_result_e10 * result) { const double adx = fabs(dx); /* CHECK_POINTER(result) */ if(x + adx > INT_MAX - 1) { OVERFLOW_ERROR_E10(result); } else if(x - adx < INT_MIN + 1) { UNDERFLOW_ERROR_E10(result); } else { const int N = (int)floor(x/M_LN10); const double ex = exp(x-N*M_LN10); result->val = ex; result->err = ex * (2.0 * GSL_DBL_EPSILON * (fabs(x) + 1.0) + adx); result->e10 = N; return GSL_SUCCESS; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_exp(const double x) { EVAL_RESULT(gsl_sf_exp_e(x, &result)); } double gsl_sf_exp_mult(const double x, const double y) { EVAL_RESULT(gsl_sf_exp_mult_e(x, y, &result)); } double gsl_sf_expm1(const double x) { EVAL_RESULT(gsl_sf_expm1_e(x, &result)); } double gsl_sf_exprel(const double x) { EVAL_RESULT(gsl_sf_exprel_e(x, &result)); } double gsl_sf_exprel_2(const double x) { EVAL_RESULT(gsl_sf_exprel_2_e(x, &result)); } double gsl_sf_exprel_n(const int n, const double x) { EVAL_RESULT(gsl_sf_exprel_n_e(n, x, &result)); } gsl/specfunc/test_coulomb.c0000644000175000017500000004243413536674414014412 0ustar eddedd/* specfunc/test_coulomb.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include "test_sf.h" #define PRINT(n) printf("%22.18g %22.18g %22.18g %22.18g\n", F[n], Fp[n], G[n], Gp[n]) #define WKB_TOL (1.0e+04 * TEST_SQRT_TOL0) int test_coulomb(void) { gsl_sf_result r; int status = 0; int s = 0; char message_buff[2048]; /* const int kmax = 20; */ /* double F[kmax+1], Fp[kmax+1], G[kmax+1], Gp[kmax+1]; */ gsl_sf_result F, Fp, G, Gp; double Fe, Ge; double lam_min; double lam_F; double eta, x; int k_G; TEST_SF(s, gsl_sf_hydrogenicR_1_e, (3.0, 2.0, &r), 0.025759948256148471036, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hydrogenicR_1_e, (3.0, 10.0, &r), 9.724727052062819704e-13, TEST_TOL1, GSL_SUCCESS); status += s; TEST_SF(s, gsl_sf_hydrogenicR_e, (4, 1, 3.0, 0.0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_hydrogenicR_e, (4, 0, 3.0, 2.0, &r), -0.03623182256981820062, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hydrogenicR_e, (4, 1, 3.0, 2.0, &r), -0.028065049083129581005, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hydrogenicR_e, (4, 2, 3.0, 2.0, &r), 0.14583027278668431009, TEST_TOL0, GSL_SUCCESS); status += s; TEST_SF(s, gsl_sf_hydrogenicR_e, (100, 0, 3.0, 2.0, &r), -0.00007938950980052281367, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_hydrogenicR_e, (100, 10, 3.0, 2.0, &r), 7.112823375353605977e-12, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_hydrogenicR_e, (100, 90, 3.0, 2.0, &r), 5.845231751418131548e-245, TEST_TOL2, GSL_SUCCESS); status += s; lam_F = 0.0; k_G = 0; eta = 1.0; x = 5.0; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 0.6849374120059439677, TEST_TOL3); s += test_sf_check_result(message_buff, Fp, -0.7236423862556063963, TEST_TOL3); s += test_sf_check_result(message_buff, G, -0.8984143590920205487, TEST_TOL3); s += test_sf_check_result(message_buff, Gp, -0.5108047585190350106, TEST_TOL3); printf("%s", message_buff); gsl_test(s," gsl_sf_coulomb_wave_FG_e(1.0, 5.0, lam_F=0, lam_G=0)"); status += s; lam_F = 10.0; k_G = 2; eta = 1.0; x = 5.0; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 0.0006423773354915823698, TEST_TOL3); s += test_sf_check_result(message_buff, Fp, 0.0013299570958719702545, TEST_TOL3); s += test_sf_check_result(message_buff, G, 33.27615734455096130, TEST_TOL3); s += test_sf_check_result(message_buff, Gp, -45.49180102261540580, TEST_TOL3); printf("%s", message_buff); gsl_test(s," gsl_sf_coulomb_wave_FG_e(1.0, 5.0, lam_F=10, lam_G=8)"); status += s; lam_F = 4.0; k_G = 2; eta = 50.0; x = 120.0; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 0.0735194711823798495, TEST_TOL3); s += test_sf_check_result(message_buff, Fp, 0.6368149124126783325, TEST_TOL3); /* s += test_sf_check_result(message_buff, G, , TEST_TOL5); s += test_sf_check_result(message_buff, Gp, , TEST_TOL5); */ printf("%s", message_buff); gsl_test(s," gsl_sf_coulomb_wave_FG_e(50.0, 120.0, lam_F=4, lam_G=2)"); status += s; lam_F = 0.0; k_G = 0; eta = -1000.0; x = 1.0; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 9.68222518991341e-02, TEST_TOL3); s += test_sf_check_result(message_buff, Fp, 5.12063396274631e+00, TEST_TOL3); s += test_sf_check_result(message_buff, G, 1.13936784379472e-01, TEST_TOL3); s += test_sf_check_result(message_buff, Gp, -4.30243486522438e+00, TEST_TOL3); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(-1000.0, 1.0, lam_F=0, lam_G=0)"); status += s; lam_min = 0.0; eta = -50.0; x = 5.0; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 1.52236975714236e-01, TEST_TOL3); s += test_sf_check_result(message_buff, Fp, 2.03091041166137e+00, TEST_TOL3); s += test_sf_check_result(message_buff, G, 4.41680690236251e-01, TEST_TOL3); s += test_sf_check_result(message_buff, Gp, -6.76485374766869e-01, TEST_TOL3); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(-50.0, 5.0, lam_F=0, lam_G=0)"); status += s; lam_min = 0.0; eta = -50.0; x = 1000.0; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, -0.2267212182760888523, TEST_TOL3); s += test_sf_check_result(message_buff, Fp, -0.9961306810018401525, TEST_TOL3); s += test_sf_check_result(message_buff, G, -0.9497684438900352186, TEST_TOL3); s += test_sf_check_result(message_buff, Gp, 0.2377656295411961399, TEST_TOL3); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(-50.0, 1000.0, lam_F=0, lam_G=0)"); status += s; lam_F = 10.0; k_G = 0; eta = -50.0; x = 5.0; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, -3.681143602184922e-01, TEST_TOL3); s += test_sf_check_result(message_buff, Fp, 1.338467510317215e+00, TEST_TOL3); s += test_sf_check_result(message_buff, G, 3.315883246109351e-01, TEST_TOL3); s += test_sf_check_result(message_buff, Gp, 1.510888628136180e+00, TEST_TOL3); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(-50.0, 5.0, lam_F=10, lam_G=10)"); status += s; lam_F = 0.0; k_G = 0; eta = -4.0; x = 5.0; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 4.078627230056172e-01, TEST_TOL3); s += test_sf_check_result(message_buff, Fp, 1.098212336357310e+00, TEST_TOL3); s += test_sf_check_result(message_buff, G, 6.743270353832442e-01, TEST_TOL3); s += test_sf_check_result(message_buff, Gp, -6.361104272804447e-01, TEST_TOL3); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(-4.0, 5.0, lam_F=0, lam_G=0"); status += s; lam_F = 3.0; k_G = 0; eta = -4.0; x = 5.0; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, -2.568630935581323e-01, TEST_TOL3); s += test_sf_check_result(message_buff, Fp, 1.143229422014827e+00, TEST_TOL3); s += test_sf_check_result(message_buff, G, 7.879899223927996e-01, TEST_TOL3); s += test_sf_check_result(message_buff, Gp, 3.859905878106713e-01, TEST_TOL3); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(-4.0, 5.0, lam_F=3, lam_G=3"); status += s; lam_F = 0.0; k_G = 0; eta = 1.0; x = 2.0; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 6.61781613832681e-01, TEST_TOL3); s += test_sf_check_result(message_buff, Fp, 4.81557455709949e-01, TEST_TOL3); s += test_sf_check_result(message_buff, G, 1.27577878476828e+00, TEST_TOL3); s += test_sf_check_result(message_buff, Gp, -5.82728813097184e-01, TEST_TOL3); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(1.0, 2.0, lam_F=0, lam_G=0)"); status += s; lam_F = 0.0; k_G = 0; eta = 1.0; x = 0.5; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 0.08315404535022023302, TEST_TOL3); s += test_sf_check_result(message_buff, Fp, 0.22693874616222787568, TEST_TOL3); s += test_sf_check_result(message_buff, G, 3.1060069279548875140, TEST_TOL3); s += test_sf_check_result(message_buff, Gp, -3.549156038719924236, TEST_TOL3); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(1.0, 0.5, lam_F=0, lam_G=0)"); status += s; lam_F = 0.5; k_G = 0; eta = 1.0; x = 0.5; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 0.04049078073829290935, TEST_TOL3); s += test_sf_check_result(message_buff, Fp, 0.14194939168094778795, TEST_TOL3); s += test_sf_check_result(message_buff, G, 4.720553853049677897, TEST_TOL3); s += test_sf_check_result(message_buff, Gp, -8.148033852319180005, TEST_TOL3); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(1.0, 0.5, lam_F=0.5, lam_G=0.5)"); status += s; lam_F = 0.1; k_G = 0; eta = 1.0; x = 0.5; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 0.07365466672379703418, TEST_TOL5); s += test_sf_check_result(message_buff, Fp, 0.21147121807178518647, TEST_TOL5); s += test_sf_check_result(message_buff, G, 3.306705446241024890, TEST_TOL5); s += test_sf_check_result(message_buff, Gp, -4.082931670935696644, TEST_TOL5); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(1.0, 0.5, lam_F=0.1, lam_G=0.1)"); status += s; lam_F = 0.0; k_G = 0; eta = 8.0; x = 1.05; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 9.882706082810274357e-09, TEST_TOL5); s += test_sf_check_result(message_buff, Fp, 4.005167028235547770e-08, TEST_TOL5); s += test_sf_check_result(message_buff, G, 1.333127992006686320e+07, TEST_SQRT_TOL0); s += test_sf_check_result(message_buff, Gp, -4.715914530842402330e+07, TEST_SQRT_TOL0); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(8.0, 1.05, lam_F=0, lam_G=0)"); status += s; lam_F = 0.1; k_G = 0; eta = 8.0; x = 1.05; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 9.611416736061987761e-09, TEST_TOL5); s += test_sf_check_result(message_buff, Fp, 3.909628126126824140e-08, TEST_TOL5); s += test_sf_check_result(message_buff, G, 1.365928464219262581e+07, 4.0*TEST_SQRT_TOL0); s += test_sf_check_result(message_buff, Gp, -4.848117385783386850e+07, 4.0*TEST_SQRT_TOL0); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(8.0, 1.05, lam_F=0.1, lam_G=0.1)"); status += s; lam_F = 0.0; k_G = 0; eta = 50.0; x = 0.1; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 2.807788027954216071e-67, TEST_TOL5); s += test_sf_check_result(message_buff, Fp, 9.677600748751576606e-66, TEST_TOL5); s += test_sf_check_result(message_buff, G, 5.579810686998358766e+64, TEST_SQRT_TOL0); s += test_sf_check_result(message_buff, Gp, -1.638329512756321424e+66, TEST_SQRT_TOL0); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(50.0, 0.1, lam_F=0, lam_G=0)"); status += s; lam_F = 0.0; k_G = 0; eta = 10.0; x = 5.0; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 1.7207454091787930614e-06, 10.0*WKB_TOL); s += test_sf_check_result(message_buff, Fp, 3.0975994706405458046e-06, 10.0*WKB_TOL); s += test_sf_check_result(message_buff, G, 167637.56609459967623, 10.0*WKB_TOL); s += test_sf_check_result(message_buff, Gp, -279370.76655361803075, 10.0*WKB_TOL); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(10.0, 5.0, lam_F=0, lam_G=0)"); status += s; lam_F = 0.0; k_G = 0; eta = 25.0; x = 10.0; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 1.5451274501076114315e-16, 5.0*WKB_TOL); s += test_sf_check_result(message_buff, Fp, 3.1390869393378630928e-16, 5.0*WKB_TOL); s += test_sf_check_result(message_buff, G, 1.6177129008336318136e+15, 5.0*WKB_TOL); s += test_sf_check_result(message_buff, Gp, -3.1854062013149740860e+15, 5.0*WKB_TOL); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(25.0, 10.0, lam_F=0, lam_G=0)"); status += s; lam_F = 0.0; k_G = 0; eta = 1.0; x = 9.2; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, -0.25632012319757955655, TEST_TOL5); s += test_sf_check_result(message_buff, Fp, 0.91518792286724220370, TEST_TOL5); s += test_sf_check_result(message_buff, G, 1.03120585918973466110, TEST_SQRT_TOL0); s += test_sf_check_result(message_buff, Gp, 0.21946326717491250193, TEST_SQRT_TOL0); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(1.0, 9.2, lam_F=0, lam_G=0)"); status += s; lam_F = 0.0; eta = 10.0; x = 10.0; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 0.0016262711250135878249, WKB_TOL); s += test_sf_check_result(message_buff, Fp, 0.0017060476320792806014, WKB_TOL); s += test_sf_check_result(message_buff, G, 307.87321661090837987, WKB_TOL); s += test_sf_check_result(message_buff, Gp, -291.92772380826822871, WKB_TOL); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(10.0, 10.0, lam_F=0, lam_G=0)"); status += s; lam_F = 0.0; eta = 100.0; x = 1.0; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 8.999367996930662705e-126, 10.0*WKB_TOL); s += test_sf_check_result(message_buff, Fp, 1.292746745757069321e-124, 10.0*WKB_TOL); s += test_sf_check_result(message_buff, G, 3.936654148133683610e+123, 10.0*WKB_TOL); s += test_sf_check_result(message_buff, Gp, -5.456942268061526371e+124, 10.0*WKB_TOL); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(100.0, 1.0, lam_F=0, lam_G=0)"); status += s; /* compute F_1(eta=0,x=3.25), F'_1 and G_1(eta=0,x=3.25), G'_1 */ lam_F = 1.0; eta = 0.0; x = 3.25; k_G = 0; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, sin(x)/x - cos(x), TEST_TOL3); s += test_sf_check_result(message_buff, Fp, -sin(x)/(x*x) + cos(x)/x +sin(x), TEST_TOL3); s += test_sf_check_result(message_buff, G, cos(x)/x + sin(x), TEST_TOL3); s += test_sf_check_result(message_buff, Gp, -cos(x)/(x*x) - sin(x)/x + cos(x), TEST_TOL3); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(3.25, 0.0, lam_F=1, lam_G=1)"); status += s; /* compute F_1(eta=0,x=3.25), F'_1 and G_0(eta=0,x=3.25), G'_0 */ lam_F = 1.0; eta = 0.0; x = 3.25; k_G = 1; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, sin(x)/x - cos(x), TEST_TOL3); s += test_sf_check_result(message_buff, Fp, -sin(x)/(x*x) + cos(x)/x +sin(x), TEST_TOL3); s += test_sf_check_result(message_buff, G, cos(x), TEST_TOL3); s += test_sf_check_result(message_buff, Gp, -sin(x), TEST_TOL3); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(3.25, 0.0, lam_F=1, lam_G=0)"); status += s; #ifdef FIXME /* compute F_37(eta=0,x), F'_37 and G_36(eta=0,x), G'_36 for x=1.2693881947287221e-07 */ /* For eta=0 expanding A&S 4.3.1 gives FplusIG(L,r)={I*exp(-I*r)*sum(k=0,L,((L+k)!/(k!*(L-k)!))*(I^(L-k))*(2*r)^(-k)) or alternatively F+iG can be expressed in terms of bessel functions FplusIG(L,r)=sqrt(Pi*x/2)*besselh1(L+1/2,x)) */ lam_F = 37.0; eta = 0.0; x = 1.2693881947287221e-07; k_G = 1; gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge); s = 0; message_buff[0] = 0; s += test_sf_check_result(message_buff, F, 6.5890724278623412974127e-318 , TEST_TOL3); s += test_sf_check_result(message_buff, Fp, 1.97248369961623986509839591990e-309, TEST_TOL3); s += test_sf_check_result(message_buff, G, 4.46663541714903607940730e299, TEST_TOL3); s += test_sf_check_result(message_buff, Gp, -1.26674311046140805594543e308 , TEST_TOL3); printf("%s", message_buff); gsl_test(s, " gsl_sf_coulomb_wave_FG_e(1.2693881947287221e-07, 0.0, lam_F=37, lam_G=36)"); status += s; #endif return status; } gsl/specfunc/bessel_olver.c0000644000175000017500000007575013536675317014411 0ustar eddedd/* specfunc/bessel_olver.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "error.h" #include "bessel.h" #include "bessel_olver.h" #include "chebyshev.h" #include "cheb_eval.c" /* fit for f(x) = zofmzeta((x+1)/2), 0 <= mzeta <= 1 */ static double zofmzeta_a_data[20] = { 2.9332563730829348990, 0.4896518224847036624, 0.0228637617355380860, -0.0001715731377284693, -0.0000105927538148751, 1.0595602530419e-6, -4.68016051691e-8, 5.8310020e-12, 1.766537581e-10, -1.45034640e-11, 4.357772e-13, 4.60971e-14, -2.57571e-14, 2.26468e-14, -2.22053e-14, 2.08593e-14, -1.84454e-14, 1.50150e-14, -1.06506e-14, 5.5375e-15 }; static cheb_series zofmzeta_a_cs = { zofmzeta_a_data, 19, -1,1, 8 }; /* fit for f(x) = zofmzeta((9x+11)/2), 1 <= mzeta <= 10 */ static double zofmzeta_b_data[30] = { 22.40725276466303489, 10.39808258825165581, 1.092050144486018425, -0.071111274777921604, 0.008990125336059704, -0.001201950338088875, 0.000106686807968315, 0.000017406491576830, -0.000014946669657805, 6.189984487752e-6, -2.049466715178e-6, 5.87189458020e-7, -1.46077514157e-7, 2.9803936132e-8, -3.817692108e-9, -4.66980416e-10, 5.83860334e-10, -2.78825299e-10, 1.01682688e-10, -3.1209928e-11, 8.111122e-12, -1.663986e-12, 1.81364e-13, 5.3414e-14, -4.7234e-14, 2.1689e-14, -7.815e-15, 2.371e-15, -6.04e-16, 1.20e-16 }; static cheb_series zofmzeta_b_cs = { zofmzeta_b_data, 29, -1,1, 15 }; /* fit for f(x) = zofmzeta(mz(x))/mz(x)^(3/2), * mz(x) = (2/(x+1))^(2/3) 10 * 10 <= mzeta <= Inf */ static double zofmzeta_c_data[11] = { 1.3824761227122911500, 0.0244856101686774245, -0.0000842866496282540, 1.4656076569771e-6, -3.14874099476e-8, 7.561134833e-10, -1.94531643e-11, 5.245878e-13, -1.46380e-14, 4.192e-16, -1.23e-17 }; static cheb_series zofmzeta_c_cs = { zofmzeta_c_data, 10, -1,1, 6 }; /* Invert [Abramowitz+Stegun, 9.3.39]. * Assumes minus_zeta >= 0. */ double gsl_sf_bessel_Olver_zofmzeta(double minus_zeta) { if(minus_zeta < 1.0) { const double x = 2.0*minus_zeta - 1.0; gsl_sf_result c; cheb_eval_e(&zofmzeta_a_cs, x, &c); return c.val; } else if(minus_zeta < 10.0) { const double x = (2.0*minus_zeta - 11.0)/9.0; gsl_sf_result c; cheb_eval_e(&zofmzeta_b_cs, x, &c); return c.val; } else { const double TEN_32 = 31.62277660168379332; /* 10^(3/2) */ const double p = pow(minus_zeta, 3.0/2.0); const double x = 2.0*TEN_32/p - 1.0; gsl_sf_result c; cheb_eval_e(&zofmzeta_c_cs, x, &c); return c.val * p; } } /* Chebyshev fit for f(x) = z(x)^6 A_3(z(x)), z(x) = 22/(10(x+1)) */ static double A3_gt1_data[31] = { -0.123783199829515294670493131190, 0.104636462534700704670877382304, -0.067500816575851826744877535903, 0.035563362418888483652711005520, -0.0160738524035979408472979609051, 0.0064497878252851092073278056238, -0.00235408261133449663958121821593, 0.00079545702851302155411892534965, -0.00025214920745855079895784825637, 0.00007574004596069392921153301833, -0.00002172917966339623434407978263, 5.9914810727868915476543145465e-06, -1.5958781571808992162953719817e-06, 4.1232986512903717525448312012e-07, -1.0369725993417659101913919101e-07, 2.5457982304266541145999235022e-08, -6.1161715053791743082427422443e-09, 1.4409346199138658887871461320e-09, -3.3350445956255561668232014995e-10, 7.5950686572918996453336138108e-11, -1.7042296334409430377389900278e-11, 3.7723525020626230919721640081e-12, -8.2460237635733980528416501227e-13, 1.7816961527997797696251868875e-13, -3.8084101506541792942694560802e-14, 8.0593669930916099079755351563e-15, -1.6896565961641739017452636964e-15, 3.5115651805888443184822853595e-16, -7.2384771938569255638904297651e-17, 1.4806598977677176106283840244e-17, -3.0069285750787303634897997963e-18 }; static cheb_series A3_gt1_cs = { A3_gt1_data, 30, -1,1, 17 }; /* chebyshev expansion for f(x) = z(x)^8 A_4(z(x)), z(x) = 12/(5(x+1)) */ static double A4_gt1_data[30] = { 1.15309329391198493586724229008, -1.01812701728669338904729927846, 0.71964022270555684403652781941, -0.42359963977172689685150061355, 0.215024488759339557817435404261, -0.096751915348145944032096342479, 0.039413982058824310099856035361, -0.014775225692561697963781115014, 0.005162114514159370516947823271, -0.00169783446445524322560925166335, 0.00052995667873006847211519193478, -0.00015802027574996477115667974856, 0.000045254366680989687988902825193, -0.000012503722965474638015488600967, 3.3457656998119148699124716204e-06, -8.6981575241150758412492331833e-07, 2.2030895484325645640823940625e-07, -5.4493369492600677068285936533e-08, 1.3190457281724829107139385556e-08, -3.1301560183377379158951191769e-09, 7.2937802527123344842593076131e-10, -1.6712080137945140407348940109e-10, 3.7700053248213600430503521194e-11, -8.3824538848817227637828899571e-12, 1.8388741910049766865274037194e-12, -3.9835919980753778560117573063e-13, 8.5288827136546615604290389711e-14, -1.8060227869114416998653266836e-14, 3.7849342199690728470461022877e-15, -7.8552867468122209577151823365e-16 }; static cheb_series A4_gt1_cs = { A4_gt1_data, 17, /* 29, */ -1, 1, 17 }; /* Chebyshev fit for f(x) = z(x)^3 B_2(z(x)), z(x) = 12/(5(x+1)) */ static double B2_gt1_data[40] = { 0.00118587147272683864479328868589, 0.00034820459990648274622193981840, -0.00030411304425639768103075864567, 0.00002812066284012343531484682886, 0.00004493525295901613184489898748, -0.00003037629997093072196779489677, 0.00001125979647123875721949743970, -2.4832533969517775991951008218e-06, -9.9003813640537799587086928278e-08, 4.9259859656183110299492296029e-07, -3.7644120964426705960749504975e-07, 2.2887828521334625189639122509e-07, -1.3202687370822203731489855050e-07, 7.7019669092537400811434860763e-08, -4.6589706973010511603890144294e-08, 2.9396476233013923711978522963e-08, -1.9293230611988282919101954538e-08, 1.3099107013728717842406906896e-08, -9.1509111940885962831104149355e-09, 6.5483472971925614347299375295e-09, -4.7831253582139967461241674569e-09, 3.5562625457426178152760148639e-09, -2.6853389444008414186916562103e-09, 2.0554738667134200145781857289e-09, -1.5923172019517426277886522758e-09, 1.2465923213464381457319481498e-09, -9.8494846881180588507969988989e-10, 7.8438674499372126663957464312e-10, -6.2877567918342950225937136855e-10, 5.0662318868755257959686944117e-10, -4.0962270881243451160378710952e-10, 3.3168684677374908553161911299e-10, -2.6829406619847450633596163305e-10, 2.1603988122184568375561077873e-10, -1.7232373309560278402012124481e-10, 1.3512709089611470626617830434e-10, -1.0285354732538663013167579792e-10, 7.4211345443901713467637018423e-11, -4.8124980266864320351456993068e-11, 2.3666534694476306077416831958e-11 }; static cheb_series B2_gt1_cs = { B2_gt1_data, 39, -1, 1, 30 }; /* Chebyshev fit for f(x) = z(x)^6 B_3(z(x)), z(x) = 12/(5(x+1)) */ static double B3_gt1_data[30] = { -0.0102445379362695740863663926486, 0.0036618484329295342954730801917, 0.0026154252498599303282569321117, -0.0036187389410353156728771706336, 0.0021878564157692275944613452462, -0.0008219952303590803584426516821, 0.0001281773889155631494321316520, 0.0001000944653368032985720548637, -0.0001288293344663774273453147788, 0.00010136264202696513867821487205, -0.00007000275849659556221916572733, 0.00004694886396757430431607955146, -0.00003190003869717837686356945696, 0.00002231453668447775219665947479, -0.00001611102197712439539300336438, 0.00001196634424990735214466633513, -9.0986920398931223804111374679e-06, 7.0492613694235423068926562567e-06, -5.5425216624642184684300615394e-06, 4.4071884714230296614449244106e-06, -3.5328595506791663127928952625e-06, 2.84594975572077091520522824686e-06, -2.29592697828824392391071619788e-06, 1.84714740375289956396370322228e-06, -1.47383331248116454652025598620e-06, 1.15687781098593231076084710267e-06, -8.8174688524627071175315084910e-07, 6.3705856964426840441434605593e-07, -4.1358791499961929237755474814e-07, 2.0354151158738819867477996807e-07 }; static cheb_series B3_gt1_cs = { B3_gt1_data, 29, -1, 1, 29 }; /* Chebyshev fit for f(x) = z(x) B_2(z(x)), z(x) = 2(x+1)/5 */ static double B2_lt1_data[40] = { 0.00073681565841337130021924199490, 0.00033803599647571227535304316937, -0.00008251723219239754024210552679, -0.00003390879948656432545900779710, 0.00001961398056848881816694014889, -2.35593745904151401624656805567e-06, -1.79055017080406086541563835433e-06, 1.33129571185610681090725934031e-06, -5.38879444715436544130673956170e-07, 1.49603056041381416881299945557e-07, -1.83377228267274327911131293091e-08, -1.33191430762944336526965187651e-08, 1.60642096463700438411396889489e-08, -1.28932576330421806740136816643e-08, 9.6169275086179165484403221944e-09, -7.1818502280703532276832887290e-09, 5.4744009217215145730697754561e-09, -4.2680446690508456935030086136e-09, 3.3941665009266174865683284781e-09, -2.7440714072221673882163135170e-09, 2.2488361522108255229193038962e-09, -1.8638240716608748862087923337e-09, 1.5592350940805373500866440401e-09, -1.3145743937732330609242633070e-09, 1.1153716777215047842790244968e-09, -9.5117576805266622854647303110e-10, 8.1428799553234876296804561100e-10, -6.9893770813548773664326279169e-10, 6.0073113636087448745018831981e-10, -5.1627434258513453901420776514e-10, 4.4290993195074905891788459756e-10, -3.7852978599966867611179315200e-10, 3.2143959338863177145307610452e-10, -2.7025926680620777594992221143e-10, 2.2384857772457918539228234321e-10, -1.8125071664276678046551271701e-10, 1.4164870008713668767293008546e-10, -1.0433101857132782485813325981e-10, 6.8663910168392483929411418190e-11, -3.4068313177952244040559740439e-11 }; static cheb_series B2_lt1_cs = { B2_lt1_data, 39, -1, 1, 39 }; /* Chebyshev fit for f(x) = B_3(2(x+1)/5) */ static double B3_lt1_data[40] = { -0.00137160820526992057354001614451, -0.00025474937951101049982680561302, 0.00024762975547895881652073467771, 0.00005229657281480196749313930265, -0.00007488354272621512385016593760, 0.00001416880012891046449980449746, 0.00001528986060172183690742576230, -0.00001668672297078590514293325326, 0.00001061765189536459018739585094, -5.8220577442406209989680801335e-06, 3.3322423743855900506302033234e-06, -2.23292405803003860894449897815e-06, 1.74816651036678291794777245325e-06, -1.49581306041395051804547535093e-06, 1.32759146107893129050610165582e-06, -1.19376077392564467408373553343e-06, 1.07878303863211630544654040875e-06, -9.7743335011819134006676476250e-07, 8.8729318903693324226127054792e-07, -8.0671146292125665050876015280e-07, 7.3432860378667354971042255937e-07, -6.6897926072697370325310483359e-07, 6.0966619703735610352576581485e-07, -5.5554095284507959561958605420e-07, 5.0588335673197236002812826526e-07, -4.6008146297767601862670079590e-07, 4.1761348515688145911438168306e-07, -3.7803230006989446874174476515e-07, 3.4095248501364300041684648230e-07, -3.0603959751354749520615015472e-07, 2.7300134179365690589640458993e-07, -2.4158028250762304756044254231e-07, 2.1154781038298751985689113868e-07, -1.8269911328756771201465223313e-07, 1.5484895085808513749026173074e-07, -1.2782806851555809369226440495e-07, 1.0148011725394892565174207341e-07, -7.5658969771439627809239950461e-08, 5.0226342286491286957075289622e-08, -2.5049645660259882970547555831e-08 }; static cheb_series B3_lt1_cs = { B3_lt1_data, 39, -1, 1, 39 }; /* Chebyshev fit for f(x) = A_3(9(x+1)/20) */ static double A3_lt1_data[40] = { -0.00017982561472134418587634980117, -0.00036558603837525275836608884064, -0.00002819398055929628850294406363, 0.00016704539863875736769812786067, -0.00007098969970347674307623044850, -8.4470843942344237748899879940e-06, 0.0000273413090343147765148014327150, -0.0000199073838489821681991178018081, 0.0000100004176278235088881096950105, -3.9739852013143676487867902026e-06, 1.2265357766449574306882693267e-06, -1.88755584306424047416914864854e-07, -1.37482206060161206336523452036e-07, 2.10326379301853336795686477738e-07, -2.05583778245412633433934301948e-07, 1.82377384812654863038691147988e-07, -1.58130247846381041027699152436e-07, 1.36966982725588978654041029615e-07, -1.19250280944620257443805710485e-07, 1.04477169029350256435316644493e-07, -9.2064832489437534542041040184e-08, 8.1523798290458784610230199344e-08, -7.2471794980050867512294061891e-08, 6.4614432955971132569968860233e-08, -5.7724095125560946811081322985e-08, 5.1623107567436835158110947901e-08, -4.6171250746798606260216486042e-08, 4.1256621998650164023254101585e-08, -3.6788925543159819135102047082e-08, 3.2694499457951844422299750661e-08, -2.89125899697964696586521743928e-08, 2.53925288725374047626589488217e-08, -2.20915707933726481321465184207e-08, 1.89732166352720474944407102940e-08, -1.60058977893259856012119939554e-08, 1.31619294542205876946742394494e-08, -1.04166651771938038563454275883e-08, 7.7478015858156185064152078434e-09, -5.1347942579352613057675111787e-09, 2.5583541594586723967261504321e-09 }; static cheb_series A3_lt1_cs = { A3_lt1_data, 39, -1, 1, 39 }; /* chebyshev fit for f(x) = A_4(2(x+1)/5) */ static double A4_lt1_data[30] = { 0.00009054703770051610946958226736, 0.00033066000498098017589672988293, 0.00019737453734363989127226073272, -0.00015490809725932037720034762889, -0.00004514948935538730085479280454, 0.00007976881782603940889444573924, -0.00003314566154544740986264993251, -1.88212148790135672249935711657e-06, 0.0000114788756505519986352882940648, -9.2263039911196207101468331210e-06, 5.1401128250377780476084336340e-06, -2.38418218951722002658891397905e-06, 1.00664292214481531598338960828e-06, -4.23224678096490060264249970540e-07, 2.00132031535793489976535190025e-07, -1.18689501178886741400633921047e-07, 8.7819524319114212999768013738e-08, -7.3964150324206644900787216386e-08, 6.5780431507637165113885884236e-08, -5.9651053193022652369837650411e-08, 5.4447762662767276209052293773e-08, -4.9802057381568863702541294988e-08, 4.5571368194694340198117635845e-08, -4.1682117173547642845382848197e-08, 3.8084701352766049815367147717e-08, -3.4740302885185237434662649907e-08, 3.1616557064701510611273692060e-08, -2.8685739487689556252374879267e-08, 2.5923752117132254429002796600e-08, -2.3309428552190587304662883477e-08 }; static cheb_series A4_lt1_cs = { A4_lt1_data, 29, -1, 1, 29 }; static double olver_B0(double z, double abs_zeta) { if(z < 0.98) { const double t = 1.0/sqrt(1.0-z*z); return -5.0/(48.0*abs_zeta*abs_zeta) + t*(-3.0 + 5.0*t*t)/(24.0*sqrt(abs_zeta)); } else if(z < 1.02) { const double a = 1.0-z; const double c0 = 0.0179988721413553309252458658183; const double c1 = 0.0111992982212877614645974276203; const double c2 = 0.0059404069786014304317781160605; const double c3 = 0.0028676724516390040844556450173; const double c4 = 0.0012339189052567271708525111185; const double c5 = 0.0004169250674535178764734660248; const double c6 = 0.0000330173385085949806952777365; const double c7 = -0.0001318076238578203009990106425; const double c8 = -0.0001906870370050847239813945647; return c0 + a*(c1 + a*(c2 + a*(c3 + a*(c4 + a*(c5 + a*(c6 + a*(c7 + a*c8))))))); } else { const double t = 1.0/(z*sqrt(1.0 - 1.0/(z*z))); return -5.0/(48.0*abs_zeta*abs_zeta) + t*(3.0 + 5.0*t*t)/(24.0*sqrt(abs_zeta)); } } static double olver_B1(double z, double abs_zeta) { if(z < 0.88) { const double t = 1.0/sqrt(1.0-z*z); const double t2 = t*t; const double rz = sqrt(abs_zeta); const double z32 = rz*rz*rz; const double z92 = z32*z32*z32; const double term1 = t*t*t * (30375.0 - 369603.0*t2 + 765765.0*t2*t2 - 425425.0*t2*t2*t2)/414720.0; const double term2 = 85085.0/(663552.0*z92); const double term3 = 385.0/110592.*t*(3.0-5.0*t2)/(abs_zeta*abs_zeta*abs_zeta); const double term4 = 5.0/55296.0*t2*(81.0 - 462.0*t2 + 385.0*t2*t2)/z32; return -(term1 + term2 + term3 + term4)/rz; } else if(z < 1.12) { const double a = 1.0-z; const double c0 = -0.00149282953213429172050073403334; const double c1 = -0.00175640941909277865678308358128; const double c2 = -0.00113346148874174912576929663517; const double c3 = -0.00034691090981382974689396961817; const double c4 = 0.00022752516104839243675693256916; const double c5 = 0.00051764145724244846447294636552; const double c6 = 0.00058906174858194233998714243010; const double c7 = 0.00053485514521888073087240392846; const double c8 = 0.00042891792986220150647633418796; const double c9 = 0.00031639765900613633260381972850; const double c10 = 0.00021908147678699592975840749194; return c0+a*(c1+a*(c2+a*(c3+a*(c4+a*(c5+a*(c6+a*(c7+a*(c8+a*(c9+a*c10))))))))); } else { const double t = 1.0/(z*sqrt(1.0 - 1.0/(z*z))); const double t2 = t*t; const double rz = sqrt(abs_zeta); const double z32 = rz*rz*rz; const double z92 = z32*z32*z32; const double term1 = -t2*t * (30375.0 + 369603.0*t2 + 765765.0*t2*t2 + 425425.0*t2*t2*t2)/414720.0; const double term2 = 85085.0/(663552.0*z92); const double term3 = -385.0/110592.0*t*(3.0+5.0*t2)/(abs_zeta*abs_zeta*abs_zeta); const double term4 = 5.0/55296.0*t2*(81.0 + 462.0*t2 + 385.0*t2*t2)/z32; return (term1 + term2 + term3 + term4)/rz; } } static double olver_B2(double z) { if(z < 0.8) { const double x = 5.0*z/2.0 - 1.0; gsl_sf_result c; cheb_eval_e(&B2_lt1_cs, x, &c); return c.val / z; } else if(z <= 1.2) { const double a = 1.0-z; const double c0 = 0.00055221307672129279005986982501; const double c1 = 0.00089586516310476929281129228969; const double c2 = 0.00067015003441569770883539158863; const double c3 = 0.00010166263361949045682945811828; const double c4 = -0.00044086345133806887291336488582; const double c5 = -0.00073963081508788743392883072523; const double c6 = -0.00076745494377839561259903887331; const double c7 = -0.00060829038106040362291568012663; const double c8 = -0.00037128707528893496121336168683; const double c9 = -0.00014116325105702609866850307176; return c0+a*(c1+a*(c2+a*(c3+a*(c4+a*(c5+a*(c6+a*(c7+a*(c8+a*c9)))))))); } else { const double zi = 1.0/z; const double x = 12.0/5.0 * zi - 1.0; gsl_sf_result c; cheb_eval_e(&B2_gt1_cs, x, &c); return c.val * zi*zi*zi; } } static double olver_B3(double z) { if(z < 0.8) { const double x = 5.0*z/2.0 - 1.0; gsl_sf_result c; cheb_eval_e(&B3_lt1_cs, x, &c); return c.val; } else if(z < 1.2) { const double a = 1.0-z; const double c0 = -0.00047461779655995980754441833105; const double c1 = -0.00095572913429464297452176811898; const double c2 = -0.00080369634512082892655558133973; const double c3 = -0.00000727921669154784138080600339; const double c4 = 0.00093162500331581345235746518994; const double c5 = 0.00149848796913751497227188612403; const double c6 = 0.00148406039675949727870390426462; return c0 + a*(c1 + a*(c2 + a*(c3 + a*(c4 + a*(c5 + a*c6))))); } else { const double x = 12.0/(5.0*z) - 1.0; const double zi2 = 1.0/(z*z); gsl_sf_result c; cheb_eval_e(&B3_gt1_cs, x, &c); return c.val * zi2*zi2*zi2; } } static double olver_A1(double z, double abs_zeta, double * err) { if(z < 0.98) { double t = 1.0/sqrt(1.0-z*z); double rz = sqrt(abs_zeta); double t2 = t*t; double term1 = t2*(81.0 - 462.0*t2 + 385.0*t2*t2)/1152.0; double term2 = -455.0/(4608.0*abs_zeta*abs_zeta*abs_zeta); double term3 = 7.0*t*(-3.0 + 5.0*t2)/(1152.0*rz*rz*rz); *err = 2.0 * GSL_DBL_EPSILON * (fabs(term1) + fabs(term2) + fabs(term3)); return term1 + term2 + term3; } else if(z < 1.02) { const double a = 1.0-z; const double c0 = -0.00444444444444444444444444444444; const double c1 = -0.00184415584415584415584415584416; const double c2 = 0.00056812076812076812076812076812; const double c3 = 0.00168137865661675185484709294233; const double c4 = 0.00186744042139000122193399504324; const double c5 = 0.00161330105833747826430066790326; const double c6 = 0.00123177312220625816558607537838; const double c7 = 0.00087334711007377573881689318421; const double c8 = 0.00059004942455353250141217015410; const double sum = c0+a*(c1+a*(c2+a*(c3+a*(c4+a*(c5+a*(c6+a*(c7+a*c8))))))); *err = 2.0 * GSL_DBL_EPSILON * fabs(sum); return sum; } else { const double t = 1.0/(z*sqrt(1.0 - 1.0/(z*z))); const double rz = sqrt(abs_zeta); const double t2 = t*t; const double term1 = -t2*(81.0 + 462.0*t2 + 385.0*t2*t2)/1152.0; const double term2 = 455.0/(4608.0*abs_zeta*abs_zeta*abs_zeta); const double term3 = -7.0*t*(3.0 + 5.0*t2)/(1152.0*rz*rz*rz); *err = 2.0 * GSL_DBL_EPSILON * (fabs(term1) + fabs(term2) + fabs(term3)); return term1 + term2 + term3; } } static double olver_A2(double z, double abs_zeta) { if(z < 0.88) { double t = 1.0/sqrt(1.0-z*z); double t2 = t*t; double t4 = t2*t2; double t6 = t4*t2; double t8 = t4*t4; double rz = sqrt(abs_zeta); double z3 = abs_zeta*abs_zeta*abs_zeta; double z32 = rz*rz*rz; double z92 = z3*z32; double term1 = t4*(4465125.0 - 94121676.0*t2 + 349922430.0*t4 - 446185740.0*t6 + 185910725.0*t8)/39813120.0; double term2 = -40415375.0/(127401984.0*z3*z3); double term3 = -95095.0/15925248.0*t*(3.0-5.0*t2)/z92; double term4 = -455.0/5308416.0 *t2*(81.0 - 462.0*t2 + 385.0*t4)/z3; double term5 = -7.0/19906560.0*t*t2*(30375.0 - 369603.0*t2 + 765765.0*t4 - 425425.0*t6)/z32; return term1 + term2 + term3 + term4 + term5; } else if(z < 1.12) { double a = 1.0-z; const double c0 = 0.000693735541354588973636592684210; const double c1 = 0.000464483490365843307019777608010; const double c2 = -0.000289036254605598132482570468291; const double c3 = -0.000874764943953712638574497548110; const double c4 = -0.001029716376139865629968584679350; const double c5 = -0.000836857329713810600584714031650; const double c6 = -0.000488910893527218954998270124540; const double c7 = -0.000144236747940817220502256810151; const double c8 = 0.000114363800986163478038576460325; const double c9 = 0.000266806881492777536223944807117; const double c10 = -0.011975517576151069627471048587000; return c0+a*(c1+a*(c2+a*(c3+a*(c4+a*(c5+a*(c6+a*(c7+a*(c8+a*(c9+a*c10))))))))); } else { const double t = 1.0/(z*sqrt(1.0 - 1.0/(z*z))); const double t2 = t*t; const double t4 = t2*t2; const double t6 = t4*t2; const double t8 = t4*t4; const double rz = sqrt(abs_zeta); const double z3 = abs_zeta*abs_zeta*abs_zeta; const double z32 = rz*rz*rz; const double z92 = z3*z32; const double term1 = t4*(4465125.0 + 94121676.0*t2 + 349922430.0*t4 + 446185740.0*t6 + 185910725.0*t8)/39813120.0; const double term2 = -40415375.0/(127401984.0*z3*z3); const double term3 = 95095.0/15925248.0*t*(3.0+5.0*t2)/z92; const double term4 = -455.0/5308416.0 *t2*(81.0 + 462.0*t2 + 385.0*t4)/z3; const double term5 = 7.0/19906560.0*t*t2*(30375.0 + 369603.0*t2 + 765765.0*t4 + 425425.0*t6)/z32; return term1 + term2 + term3 + term4 + term5; } } static double olver_A3(double z) { if(z < 0.9) { const double x = 20.0*z/9.0 - 1.0; gsl_sf_result c; cheb_eval_e(&A3_lt1_cs, x, &c); return c.val; } else if(z < 1.1) { double a = 1.0-z; const double c0 = -0.000354211971457743840771125759200; const double c1 = -0.000312322527890318832782774881353; const double c2 = 0.000277947465383133980329617631915; const double c3 = 0.000919803044747966977054155192400; const double c4 = 0.001147600388275977640983696906320; const double c5 = 0.000869239326123625742931772044544; const double c6 = 0.000287392257282507334785281718027; return c0 + a*(c1 + a*(c2 + a*(c3 + a*(c4 + a*(c5 + a*c6))))); } else { const double x = 11.0/(5.0*z) - 1.0; const double zi2 = 1.0/(z*z); gsl_sf_result c; cheb_eval_e(&A3_gt1_cs, x, &c); return c.val * zi2*zi2*zi2; } } static double olver_A4(double z) { if(z < 0.8) { const double x = 5.0*z/2.0 - 1.0; gsl_sf_result c; cheb_eval_e(&A4_lt1_cs, x, &c); return c.val; } else if(z < 1.2) { double a = 1.0-z; const double c0 = 0.00037819419920177291402661228437; const double c1 = 0.00040494390552363233477213857527; const double c2 = -0.00045764735528936113047289344569; const double c3 = -0.00165361044229650225813161341879; const double c4 = -0.00217527517983360049717137015539; const double c5 = -0.00152003287866490735107772795537; return c0 + a*(c1 + a*(c2 + a*(c3 + a*(c4 + a*c5)))); } else { const double x = 12.0/(5.0*z) - 1.0; const double zi2 = 1.0/(z*z); gsl_sf_result c; cheb_eval_e(&A4_gt1_cs, x, &c); return c.val * zi2*zi2*zi2*zi2; } } inline static double olver_Asum(double nu, double z, double abs_zeta, double * err) { double nu2 = nu*nu; double A1_err; double A1 = olver_A1(z, abs_zeta, &A1_err); double A2 = olver_A2(z, abs_zeta); double A3 = olver_A3(z); double A4 = olver_A4(z); *err = A1_err/nu2 + GSL_DBL_EPSILON; return 1.0 + A1/nu2 + A2/(nu2*nu2) + A3/(nu2*nu2*nu2) + A4/(nu2*nu2*nu2*nu2); } inline static double olver_Bsum(double nu, double z, double abs_zeta) { double nu2 = nu*nu; double B0 = olver_B0(z, abs_zeta); double B1 = olver_B1(z, abs_zeta); double B2 = olver_B2(z); double B3 = olver_B3(z); return B0 + B1/nu2 + B2/(nu2*nu2) + B3/(nu2*nu2*nu2*nu2); } /* uniform asymptotic, nu -> Inf, [Abramowitz+Stegun, 9.3.35] * * error: * nu = 2: uniformly good to > 6D * nu = 5: uniformly good to > 8D * nu = 10: uniformly good to > 10D * nu = 20: uniformly good to > 13D * */ int gsl_sf_bessel_Jnu_asymp_Olver_e(double nu, double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0 || nu <= 0.0) { DOMAIN_ERROR(result); } else { double zeta, abs_zeta; double arg; double pre; double asum, bsum, asum_err; gsl_sf_result ai; gsl_sf_result aip; double z = x/nu; double crnu = pow(nu, 1.0/3.0); double nu3 = nu*nu*nu; double nu11 = nu3*nu3*nu3*nu*nu; int stat_a, stat_ap; if(fabs(1.0-z) < 0.02) { const double a = 1.0-z; const double c0 = 1.25992104989487316476721060728; const double c1 = 0.37797631496846194943016318218; const double c2 = 0.230385563409348235843147082474; const double c3 = 0.165909603649648694839821892031; const double c4 = 0.12931387086451008907; const double c5 = 0.10568046188858133991; const double c6 = 0.08916997952268186978; const double c7 = 0.07700014900618802456; pre = c0 + a*(c1 + a*(c2 + a*(c3 + a*(c4 + a*(c5 + a*(c6 + a*c7)))))); zeta = a * pre; pre = sqrt(2.0*sqrt(pre/(1.0+z))); abs_zeta = fabs(zeta); } else if(z < 1.0) { double rt = sqrt(1.0 - z*z); abs_zeta = pow(1.5*(log((1.0+rt)/z) - rt), 2.0/3.0); zeta = abs_zeta; pre = sqrt(2.0*sqrt(abs_zeta/(rt*rt))); } else { /* z > 1 */ double rt = z * sqrt(1.0 - 1.0/(z*z)); abs_zeta = pow(1.5*(rt - acos(1.0/z)), 2.0/3.0); zeta = -abs_zeta; pre = sqrt(2.0*sqrt(abs_zeta/(rt*rt))); } asum = olver_Asum(nu, z, abs_zeta, &asum_err); bsum = olver_Bsum(nu, z, abs_zeta); arg = crnu*crnu * zeta; stat_a = gsl_sf_airy_Ai_e(arg, GSL_MODE_DEFAULT, &ai); stat_ap = gsl_sf_airy_Ai_deriv_e(arg, GSL_MODE_DEFAULT, &aip); result->val = pre * (ai.val*asum/crnu + aip.val*bsum/(nu*crnu*crnu)); result->err = pre * (ai.err * fabs(asum/crnu)); result->err += pre * fabs(ai.val) * asum_err / crnu; result->err += pre * fabs(ai.val * asum) / (crnu*nu11); result->err += 8.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_a, stat_ap); } } /* uniform asymptotic, nu -> Inf, [Abramowitz+Stegun, 9.3.36] * * error: * nu = 2: uniformly good to > 6D * nu = 5: uniformly good to > 8D * nu = 10: uniformly good to > 10D * nu = 20: uniformly good to > 13D */ int gsl_sf_bessel_Ynu_asymp_Olver_e(double nu, double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0 || nu <= 0.0) { DOMAIN_ERROR(result); } else { double zeta, abs_zeta; double arg; double pre; double asum, bsum, asum_err; gsl_sf_result bi; gsl_sf_result bip; double z = x/nu; double crnu = pow(nu, 1.0/3.0); double nu3 = nu*nu*nu; double nu11 = nu3*nu3*nu3*nu*nu; int stat_b, stat_d; if(fabs(1.0-z) < 0.02) { const double a = 1.0-z; const double c0 = 1.25992104989487316476721060728; const double c1 = 0.37797631496846194943016318218; const double c2 = 0.230385563409348235843147082474; const double c3 = 0.165909603649648694839821892031; const double c4 = 0.12931387086451008907; const double c5 = 0.10568046188858133991; const double c6 = 0.08916997952268186978; const double c7 = 0.07700014900618802456; pre = c0 + a*(c1 + a*(c2 + a*(c3 + a*(c4 + a*(c5 + a*(c6 + a*c7)))))); zeta = a * pre; pre = sqrt(2.0*sqrt(pre/(1.0+z))); abs_zeta = fabs(zeta); } else if(z < 1.0) { double rt = sqrt(1.0 - z*z); abs_zeta = pow(1.5*(log((1.0+rt)/z) - rt), 2.0/3.0); zeta = abs_zeta; pre = sqrt(2.0*sqrt(abs_zeta/(rt*rt))); } else { /* z > 1 */ double rt = z * sqrt(1.0 - 1.0/(z*z)); double ac = acos(1.0/z); abs_zeta = pow(1.5*(rt - ac), 2.0/3.0); zeta = -abs_zeta; pre = sqrt(2.0*sqrt(abs_zeta)/rt); } asum = olver_Asum(nu, z, abs_zeta, &asum_err); bsum = olver_Bsum(nu, z, abs_zeta); arg = crnu*crnu * zeta; stat_b = gsl_sf_airy_Bi_e(arg, GSL_MODE_DEFAULT, &bi); stat_d = gsl_sf_airy_Bi_deriv_e(arg, GSL_MODE_DEFAULT, &bip); result->val = -pre * (bi.val*asum/crnu + bip.val*bsum/(nu*crnu*crnu)); result->err = pre * (bi.err * fabs(asum/crnu)); result->err += pre * fabs(bi.val) * asum_err / crnu; result->err += pre * fabs(bi.val*asum) / (crnu*nu11); result->err += 8.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_b, stat_d); } } gsl/specfunc/check.h0000644000175000017500000000017613536674414012772 0ustar eddedd/* check for underflow */ #define CHECK_UNDERFLOW(r) if (fabs((r)->val) < GSL_DBL_MIN) GSL_ERROR("underflow", GSL_EUNDRFLW); gsl/specfunc/bessel_temme.h0000644000175000017500000000235113536674414014356 0ustar eddedd/* specfunc/bessel_temme.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef BESSEL_TEMME_H_ #define BESSEL_TEMME_H_ #include int gsl_sf_bessel_Y_temme(const double nu, const double x, gsl_sf_result * Y_nu, gsl_sf_result * Y_nup1); int gsl_sf_bessel_K_scaled_temme(const double nu, const double x, double * K_nu, double * K_nup1, double * Kp_nu); #endif /* !BESSEL_TEMME_H_ */ gsl/specfunc/clausen.c0000644000175000017500000000526213536674414013343 0ustar eddedd/* specfunc/clausen.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "chebyshev.h" #include "cheb_eval.c" static double aclaus_data[15] = { 2.142694363766688447e+00, 0.723324281221257925e-01, 0.101642475021151164e-02, 0.3245250328531645e-04, 0.133315187571472e-05, 0.6213240591653e-07, 0.313004135337e-08, 0.16635723056e-09, 0.919659293e-11, 0.52400462e-12, 0.3058040e-13, 0.18197e-14, 0.1100e-15, 0.68e-17, 0.4e-18 }; static cheb_series aclaus_cs = { aclaus_data, 14, -1, 1, 8 /* FIXME: this is a guess, correct value needed here BJG */ }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_clausen_e(double x, gsl_sf_result *result) { const double x_cut = M_PI * GSL_SQRT_DBL_EPSILON; double sgn = 1.0; int status_red; if(x < 0.0) { x = -x; sgn = -1.0; } /* Argument reduction to [0, 2pi) */ status_red = gsl_sf_angle_restrict_pos_e(&x); /* Further reduction to [0,pi) */ if(x > M_PI) { /* simulated extra precision: 2PI = p0 + p1 */ const double p0 = 6.28125; const double p1 = 0.19353071795864769253e-02; x = (p0 - x) + p1; sgn = -sgn; } if(x == 0.0) { result->val = 0.0; result->err = 0.0; } else if(x < x_cut) { result->val = x * (1.0 - log(x)); result->err = x * GSL_DBL_EPSILON; } else { const double t = 2.0*(x*x / (M_PI*M_PI) - 0.5); gsl_sf_result result_c; cheb_eval_e(&aclaus_cs, t, &result_c); result->val = x * (result_c.val - log(x)); result->err = x * (result_c.err + GSL_DBL_EPSILON); } result->val *= sgn; return status_red; } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_clausen(const double x) { EVAL_RESULT(gsl_sf_clausen_e(x, &result)); } gsl/specfunc/gamma_inc.c0000644000175000017500000005043613536674414013627 0ustar eddedd/* specfunc/gamma_inc.c * * Copyright (C) 2007 Brian Gough * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include #include "error.h" /* The dominant part, * D(a,x) := x^a e^(-x) / Gamma(a+1) */ static int gamma_inc_D(const double a, const double x, gsl_sf_result * result) { if(a < 10.0) { double lnr; gsl_sf_result lg; gsl_sf_lngamma_e(a+1.0, &lg); lnr = a * log(x) - x - lg.val; result->val = exp(lnr); result->err = 2.0 * GSL_DBL_EPSILON * (fabs(lnr) + 1.0) * fabs(result->val); return GSL_SUCCESS; } else { gsl_sf_result gstar; gsl_sf_result ln_term; double term1; if (x < 0.5*a) { double u = x/a; double ln_u = log(u); ln_term.val = ln_u - u + 1.0; ln_term.err = (fabs(ln_u) + fabs(u) + 1.0) * GSL_DBL_EPSILON; } else { double mu = (x-a)/a; gsl_sf_log_1plusx_mx_e(mu, &ln_term); /* log(1+mu) - mu */ /* Propagate cancellation error from x-a, since the absolute error of mu=x-a is DBL_EPSILON */ ln_term.err += GSL_DBL_EPSILON * fabs(mu); }; gsl_sf_gammastar_e(a, &gstar); term1 = exp(a*ln_term.val)/sqrt(2.0*M_PI*a); result->val = term1/gstar.val; result->err = 2.0 * GSL_DBL_EPSILON * (fabs(a*ln_term.val) + 1.0) * fabs(result->val); /* Include propagated error from log term */ result->err += fabs(a) * ln_term.err * fabs(result->val); result->err += gstar.err/fabs(gstar.val) * fabs(result->val); return GSL_SUCCESS; } } /* P series representation. */ static int gamma_inc_P_series(const double a, const double x, gsl_sf_result * result) { const int nmax = 10000; gsl_sf_result D; int stat_D = gamma_inc_D(a, x, &D); /* Approximating the terms of the series using Stirling's approximation gives t_n = (x/a)^n * exp(-n(n+1)/(2a)), so the convergence condition is n^2 / (2a) + (1-(x/a) + (1/2a)) n >> -log(GSL_DBL_EPS) if we want t_n < O(1e-16) t_0. The condition below detects cases where the minimum value of n is > 5000 */ if (x > 0.995 * a && a > 1e5) { /* Difficult case: try continued fraction */ gsl_sf_result cf_res; int status = gsl_sf_exprel_n_CF_e(a, x, &cf_res); result->val = D.val * cf_res.val; result->err = fabs(D.val * cf_res.err) + fabs(D.err * cf_res.val); return status; } /* Series would require excessive number of terms */ if (x > (a + nmax)) { GSL_ERROR ("gamma_inc_P_series x>>a exceeds range", GSL_EMAXITER); } /* Normal case: sum the series */ { double sum = 1.0; double term = 1.0; double remainder; int n; /* Handle lower part of the series where t_n is increasing, |x| > a+n */ int nlow = (x > a) ? (x - a): 0; for(n=1; n < nlow; n++) { term *= x/(a+n); sum += term; } /* Handle upper part of the series where t_n is decreasing, |x| < a+n */ for (/* n = previous n */ ; nval = D.val * sum; result->err = D.err * fabs(sum) + fabs(D.val * remainder); result->err += (1.0 + n) * GSL_DBL_EPSILON * fabs(result->val); if(n == nmax && fabs(remainder/sum) > GSL_SQRT_DBL_EPSILON) GSL_ERROR ("gamma_inc_P_series failed to converge", GSL_EMAXITER); else return stat_D; } } /* Q large x asymptotic */ static int gamma_inc_Q_large_x(const double a, const double x, gsl_sf_result * result) { const int nmax = 5000; gsl_sf_result D; const int stat_D = gamma_inc_D(a, x, &D); double sum = 1.0; double term = 1.0; double last = 1.0; int n; for(n=1; n 1.0) break; if(fabs(term/sum) < GSL_DBL_EPSILON) break; sum += term; last = term; } result->val = D.val * (a/x) * sum; result->err = D.err * fabs((a/x) * sum); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); if(n == nmax) GSL_ERROR ("error in large x asymptotic", GSL_EMAXITER); else return stat_D; } /* Uniform asymptotic for x near a, a and x large. * See [Temme, p. 285] */ static int gamma_inc_Q_asymp_unif(const double a, const double x, gsl_sf_result * result) { const double rta = sqrt(a); const double eps = (x-a)/a; gsl_sf_result ln_term; const int stat_ln = gsl_sf_log_1plusx_mx_e(eps, &ln_term); /* log(1+eps) - eps */ const double eta = GSL_SIGN(eps) * sqrt(-2.0*ln_term.val); gsl_sf_result erfc; double R; double c0, c1; /* This used to say erfc(eta*M_SQRT2*rta), which is wrong. * The sqrt(2) is in the denominator. Oops. * Fixed: [GJ] Mon Nov 15 13:25:32 MST 2004 */ gsl_sf_erfc_e(eta*rta/M_SQRT2, &erfc); if(fabs(eps) < GSL_ROOT5_DBL_EPSILON) { c0 = -1.0/3.0 + eps*(1.0/12.0 - eps*(23.0/540.0 - eps*(353.0/12960.0 - eps*589.0/30240.0))); c1 = -1.0/540.0 - eps/288.0; } else { const double rt_term = sqrt(-2.0 * ln_term.val/(eps*eps)); const double lam = x/a; c0 = (1.0 - 1.0/rt_term)/eps; c1 = -(eta*eta*eta * (lam*lam + 10.0*lam + 1.0) - 12.0 * eps*eps*eps) / (12.0 * eta*eta*eta*eps*eps*eps); } R = exp(-0.5*a*eta*eta)/(M_SQRT2*M_SQRTPI*rta) * (c0 + c1/a); result->val = 0.5 * erfc.val + R; result->err = GSL_DBL_EPSILON * fabs(R * 0.5 * a*eta*eta) + 0.5 * erfc.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_ln; } /* Continued fraction which occurs in evaluation * of Q(a,x) or Gamma(a,x). * * 1 (1-a)/x 1/x (2-a)/x 2/x (3-a)/x * F(a,x) = ---- ------- ----- -------- ----- -------- ... * 1 + 1 + 1 + 1 + 1 + 1 + * * Hans E. Plesser, 2002-01-22 (hans dot plesser at itf dot nlh dot no). * * Split out from gamma_inc_Q_CF() by GJ [Tue Apr 1 13:16:41 MST 2003]. * See gamma_inc_Q_CF() below. * */ static int gamma_inc_F_CF(const double a, const double x, gsl_sf_result * result) { const int nmax = 5000; const double small = gsl_pow_3 (GSL_DBL_EPSILON); double hn = 1.0; /* convergent */ double Cn = 1.0 / small; double Dn = 1.0; int n; /* n == 1 has a_1, b_1, b_0 independent of a,x, so that has been done by hand */ for ( n = 2 ; n < nmax ; n++ ) { double an; double delta; if(GSL_IS_ODD(n)) an = 0.5*(n-1)/x; else an = (0.5*n-a)/x; Dn = 1.0 + an * Dn; if ( fabs(Dn) < small ) Dn = small; Cn = 1.0 + an/Cn; if ( fabs(Cn) < small ) Cn = small; Dn = 1.0 / Dn; delta = Cn * Dn; hn *= delta; if(fabs(delta-1.0) < GSL_DBL_EPSILON) break; } result->val = hn; result->err = 2.0*GSL_DBL_EPSILON * fabs(hn); result->err += GSL_DBL_EPSILON * (2.0 + 0.5*n) * fabs(result->val); if(n == nmax) GSL_ERROR ("error in CF for F(a,x)", GSL_EMAXITER); else return GSL_SUCCESS; } /* Continued fraction for Q. * * Q(a,x) = D(a,x) a/x F(a,x) * * Hans E. Plesser, 2002-01-22 (hans dot plesser at itf dot nlh dot no): * * Since the Gautschi equivalent series method for CF evaluation may lead * to singularities, I have replaced it with the modified Lentz algorithm * given in * * I J Thompson and A R Barnett * Coulomb and Bessel Functions of Complex Arguments and Order * J Computational Physics 64:490-509 (1986) * * In consequence, gamma_inc_Q_CF_protected() is now obsolete and has been * removed. * * Identification of terms between the above equation for F(a, x) and * the first equation in the appendix of Thompson&Barnett is as follows: * * b_0 = 0, b_n = 1 for all n > 0 * * a_1 = 1 * a_n = (n/2-a)/x for n even * a_n = (n-1)/(2x) for n odd * */ static int gamma_inc_Q_CF(const double a, const double x, gsl_sf_result * result) { gsl_sf_result D; gsl_sf_result F; const int stat_D = gamma_inc_D(a, x, &D); const int stat_F = gamma_inc_F_CF(a, x, &F); result->val = D.val * (a/x) * F.val; result->err = D.err * fabs((a/x) * F.val) + fabs(D.val * a/x * F.err); return GSL_ERROR_SELECT_2(stat_F, stat_D); } /* Useful for small a and x. Handles the subtraction analytically. */ static int gamma_inc_Q_series(const double a, const double x, gsl_sf_result * result) { double term1; /* 1 - x^a/Gamma(a+1) */ double sum; /* 1 + (a+1)/(a+2)(-x)/2! + (a+1)/(a+3)(-x)^2/3! + ... */ int stat_sum; double term2; /* a temporary variable used at the end */ { /* Evaluate series for 1 - x^a/Gamma(a+1), small a */ const double pg21 = -2.404113806319188570799476; /* PolyGamma[2,1] */ const double lnx = log(x); const double el = M_EULER+lnx; const double c1 = -el; const double c2 = M_PI*M_PI/12.0 - 0.5*el*el; const double c3 = el*(M_PI*M_PI/12.0 - el*el/6.0) + pg21/6.0; const double c4 = -0.04166666666666666667 * (-1.758243446661483480 + lnx) * (-0.764428657272716373 + lnx) * ( 0.723980571623507657 + lnx) * ( 4.107554191916823640 + lnx); const double c5 = -0.0083333333333333333 * (-2.06563396085715900 + lnx) * (-1.28459889470864700 + lnx) * (-0.27583535756454143 + lnx) * ( 1.33677371336239618 + lnx) * ( 5.17537282427561550 + lnx); const double c6 = -0.0013888888888888889 * (-2.30814336454783200 + lnx) * (-1.65846557706987300 + lnx) * (-0.88768082560020400 + lnx) * ( 0.17043847751371778 + lnx) * ( 1.92135970115863890 + lnx) * ( 6.22578557795474900 + lnx); const double c7 = -0.00019841269841269841 * (-2.5078657901291800 + lnx) * (-1.9478900888958200 + lnx) * (-1.3194837322612730 + lnx) * (-0.5281322700249279 + lnx) * ( 0.5913834939078759 + lnx) * ( 2.4876819633378140 + lnx) * ( 7.2648160783762400 + lnx); const double c8 = -0.00002480158730158730 * (-2.677341544966400 + lnx) * (-2.182810448271700 + lnx) * (-1.649350342277400 + lnx) * (-1.014099048290790 + lnx) * (-0.191366955370652 + lnx) * ( 0.995403817918724 + lnx) * ( 3.041323283529310 + lnx) * ( 8.295966556941250 + lnx); const double c9 = -2.75573192239859e-6 * (-2.8243487670469080 + lnx) * (-2.3798494322701120 + lnx) * (-1.9143674728689960 + lnx) * (-1.3814529102920370 + lnx) * (-0.7294312810261694 + lnx) * ( 0.1299079285269565 + lnx) * ( 1.3873333251885240 + lnx) * ( 3.5857258865210760 + lnx) * ( 9.3214237073814600 + lnx); const double c10 = -2.75573192239859e-7 * (-2.9540329644556910 + lnx) * (-2.5491366926991850 + lnx) * (-2.1348279229279880 + lnx) * (-1.6741881076349450 + lnx) * (-1.1325949616098420 + lnx) * (-0.4590034650618494 + lnx) * ( 0.4399352987435699 + lnx) * ( 1.7702236517651670 + lnx) * ( 4.1231539047474080 + lnx) * ( 10.342627908148680 + lnx); term1 = a*(c1+a*(c2+a*(c3+a*(c4+a*(c5+a*(c6+a*(c7+a*(c8+a*(c9+a*c10))))))))); } { /* Evaluate the sum. */ const int nmax = 5000; double t = 1.0; int n; sum = 1.0; for(n=1; nval = term1 + term2; result->err = GSL_DBL_EPSILON * (fabs(term1) + 2.0*fabs(term2)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_sum; } /* series for small a and x, but not defined for a == 0 */ static int gamma_inc_series(double a, double x, gsl_sf_result * result) { gsl_sf_result Q; gsl_sf_result G; const int stat_Q = gamma_inc_Q_series(a, x, &Q); const int stat_G = gsl_sf_gamma_e(a, &G); result->val = Q.val * G.val; result->err = fabs(Q.val * G.err) + fabs(Q.err * G.val); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_Q, stat_G); } static int gamma_inc_a_gt_0(double a, double x, gsl_sf_result * result) { /* x > 0 and a > 0; use result for Q */ gsl_sf_result Q; gsl_sf_result G; const int stat_Q = gsl_sf_gamma_inc_Q_e(a, x, &Q); const int stat_G = gsl_sf_gamma_e(a, &G); result->val = G.val * Q.val; result->err = fabs(G.val * Q.err) + fabs(G.err * Q.val); result->err += 2.0*GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_G, stat_Q); } static int gamma_inc_CF(double a, double x, gsl_sf_result * result) { gsl_sf_result F; gsl_sf_result pre; const double am1lgx = (a-1.0)*log(x); const int stat_F = gamma_inc_F_CF(a, x, &F); const int stat_E = gsl_sf_exp_err_e(am1lgx - x, GSL_DBL_EPSILON*fabs(am1lgx), &pre); result->val = F.val * pre.val; result->err = fabs(F.err * pre.val) + fabs(F.val * pre.err); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_F, stat_E); } /* evaluate Gamma(0,x), x > 0 */ #define GAMMA_INC_A_0(x, result) gsl_sf_expint_E1_e(x, result) /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_gamma_inc_Q_e(const double a, const double x, gsl_sf_result * result) { if(a < 0.0 || x < 0.0) { DOMAIN_ERROR(result); } else if(x == 0.0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(a == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(x <= 0.5*a) { /* If the series is quick, do that. It is * robust and simple. */ gsl_sf_result P; int stat_P = gamma_inc_P_series(a, x, &P); result->val = 1.0 - P.val; result->err = P.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_P; } else if(a >= 1.0e+06 && (x-a)*(x-a) < a) { /* Then try the difficult asymptotic regime. * This is the only way to do this region. */ return gamma_inc_Q_asymp_unif(a, x, result); } else if(a < 0.2 && x < 5.0) { /* Cancellations at small a must be handled * analytically; x should not be too big * either since the series terms grow * with x and log(x). */ return gamma_inc_Q_series(a, x, result); } else if(a <= x) { if(x <= 1.0e+06) { /* Continued fraction is excellent for x >~ a. * We do not let x be too large when x > a since * it is somewhat pointless to try this there; * the function is rapidly decreasing for * x large and x > a, and it will just * underflow in that region anyway. We * catch that case in the standard * large-x method. */ return gamma_inc_Q_CF(a, x, result); } else { return gamma_inc_Q_large_x(a, x, result); } } else { if(x > a - sqrt(a)) { /* Continued fraction again. The convergence * is a little slower here, but that is fine. * We have to trade that off against the slow * convergence of the series, which is the * only other option. */ return gamma_inc_Q_CF(a, x, result); } else { gsl_sf_result P; int stat_P = gamma_inc_P_series(a, x, &P); result->val = 1.0 - P.val; result->err = P.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_P; } } } int gsl_sf_gamma_inc_P_e(const double a, const double x, gsl_sf_result * result) { if(a <= 0.0 || x < 0.0) { DOMAIN_ERROR(result); } else if(x == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(x < 20.0 || x < 0.5*a) { /* Do the easy series cases. Robust and quick. */ return gamma_inc_P_series(a, x, result); } else if(a > 1.0e+06 && (x-a)*(x-a) < a) { /* Crossover region. Note that Q and P are * roughly the same order of magnitude here, * so the subtraction is stable. */ gsl_sf_result Q; int stat_Q = gamma_inc_Q_asymp_unif(a, x, &Q); result->val = 1.0 - Q.val; result->err = Q.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_Q; } else if(a <= x) { /* Q <~ P in this area, so the * subtractions are stable. */ gsl_sf_result Q; int stat_Q; if(a > 0.2*x) { stat_Q = gamma_inc_Q_CF(a, x, &Q); } else { stat_Q = gamma_inc_Q_large_x(a, x, &Q); } result->val = 1.0 - Q.val; result->err = Q.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_Q; } else { if((x-a)*(x-a) < a) { /* This condition is meant to insure * that Q is not very close to 1, * so the subtraction is stable. */ gsl_sf_result Q; int stat_Q = gamma_inc_Q_CF(a, x, &Q); result->val = 1.0 - Q.val; result->err = Q.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_Q; } else { return gamma_inc_P_series(a, x, result); } } } int gsl_sf_gamma_inc_e(const double a, const double x, gsl_sf_result * result) { if(x < 0.0) { DOMAIN_ERROR(result); } else if(x == 0.0) { return gsl_sf_gamma_e(a, result); } else if(a == 0.0) { return GAMMA_INC_A_0(x, result); } else if(a > 0.0) { return gamma_inc_a_gt_0(a, x, result); } else if(x > 0.25) { /* continued fraction seems to fail for x too small; otherwise it is ok, independent of the value of |x/a|, because of the non-oscillation in the expansion, i.e. the CF is un-conditionally convergent for a < 0 and x > 0 */ return gamma_inc_CF(a, x, result); } else if(fabs(a) < 0.5) { return gamma_inc_series(a, x, result); } else { /* a = fa + da; da >= 0 */ const double fa = floor(a); const double da = a - fa; gsl_sf_result g_da; const int stat_g_da = ( da > 0.0 ? gamma_inc_a_gt_0(da, x, &g_da) : GAMMA_INC_A_0(x, &g_da)); double alpha = da; double gax = g_da.val; /* Gamma(alpha-1,x) = 1/(alpha-1) (Gamma(a,x) - x^(alpha-1) e^-x) */ do { const double shift = exp(-x + (alpha-1.0)*log(x)); gax = (gax - shift) / (alpha - 1.0); alpha -= 1.0; } while(alpha > a); result->val = gax; result->err = 2.0*(1.0 + fabs(a))*GSL_DBL_EPSILON*fabs(gax); return stat_g_da; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_gamma_inc_P(const double a, const double x) { EVAL_RESULT(gsl_sf_gamma_inc_P_e(a, x, &result)); } double gsl_sf_gamma_inc_Q(const double a, const double x) { EVAL_RESULT(gsl_sf_gamma_inc_Q_e(a, x, &result)); } double gsl_sf_gamma_inc(const double a, const double x) { EVAL_RESULT(gsl_sf_gamma_inc_e(a, x, &result)); } gsl/specfunc/gsl_sf_result.h0000644000175000017500000000305113536674414014563 0ustar eddedd/* specfunc/gsl_sf_result.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_RESULT_H__ #define __GSL_SF_RESULT_H__ #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_sf_result_struct { double val; double err; }; typedef struct gsl_sf_result_struct gsl_sf_result; #define GSL_SF_RESULT_SET(r,v,e) do { (r)->val=(v); (r)->err=(e); } while(0) struct gsl_sf_result_e10_struct { double val; double err; int e10; }; typedef struct gsl_sf_result_e10_struct gsl_sf_result_e10; int gsl_sf_result_smash_e(const gsl_sf_result_e10 * re, gsl_sf_result * r); __END_DECLS #endif /* __GSL_SF_RESULT_H__ */ gsl/specfunc/hyperg_2F1.c0000644000175000017500000007117513536674414013625 0ustar eddedd/* specfunc/hyperg_2F1.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman * Copyright (C) 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include #include "error.h" #define locEPS (1000.0*GSL_DBL_EPSILON) /* Assumes c != negative integer. */ static int hyperg_2F1_series(const double a, const double b, const double c, const double x, gsl_sf_result * result ) { double sum_pos = 1.0; double sum_neg = 0.0; double del_pos = 1.0; double del_neg = 0.0; double del = 1.0; double del_prev; double k = 0.0; int i = 0; if(fabs(c) < GSL_DBL_EPSILON) { result->val = 0.0; /* FIXME: ?? */ result->err = 1.0; GSL_ERROR ("error", GSL_EDOM); } do { if(++i > 30000) { result->val = sum_pos - sum_neg; result->err = del_pos + del_neg; result->err += 2.0 * GSL_DBL_EPSILON * (sum_pos + sum_neg); result->err += 2.0 * GSL_DBL_EPSILON * (2.0*sqrt(k)+1.0) * fabs(result->val); GSL_ERROR ("error", GSL_EMAXITER); } del_prev = del; del *= (a+k)*(b+k) * x / ((c+k) * (k+1.0)); /* Gauss series */ if(del > 0.0) { del_pos = del; sum_pos += del; } else if(del == 0.0) { /* Exact termination (a or b was a negative integer). */ del_pos = 0.0; del_neg = 0.0; break; } else { del_neg = -del; sum_neg -= del; } /* * This stopping criteria is taken from the thesis * "Computation of Hypergeometic Functions" by J. Pearson, pg. 31 * (http://people.maths.ox.ac.uk/porterm/research/pearson_final.pdf) * and fixes bug #45926 */ if (fabs(del_prev / (sum_pos - sum_neg)) < GSL_DBL_EPSILON && fabs(del / (sum_pos - sum_neg)) < GSL_DBL_EPSILON) break; k += 1.0; } while(fabs((del_pos + del_neg)/(sum_pos-sum_neg)) > GSL_DBL_EPSILON); result->val = sum_pos - sum_neg; result->err = del_pos + del_neg; result->err += 2.0 * GSL_DBL_EPSILON * (sum_pos + sum_neg); result->err += 2.0 * GSL_DBL_EPSILON * (2.0*sqrt(k) + 1.0) * fabs(result->val); return GSL_SUCCESS; } /* a = aR + i aI, b = aR - i aI */ static int hyperg_2F1_conj_series(const double aR, const double aI, const double c, double x, gsl_sf_result * result) { if(c == 0.0) { result->val = 0.0; /* FIXME: should be Inf */ result->err = 0.0; GSL_ERROR ("error", GSL_EDOM); } else { double sum_pos = 1.0; double sum_neg = 0.0; double del_pos = 1.0; double del_neg = 0.0; double del = 1.0; double k = 0.0; do { del *= ((aR+k)*(aR+k) + aI*aI)/((k+1.0)*(c+k)) * x; if(del >= 0.0) { del_pos = del; sum_pos += del; } else { del_neg = -del; sum_neg -= del; } if(k > 30000) { result->val = sum_pos - sum_neg; result->err = del_pos + del_neg; result->err += 2.0 * GSL_DBL_EPSILON * (sum_pos + sum_neg); result->err += 2.0 * GSL_DBL_EPSILON * (2.0*sqrt(k)+1.0) * fabs(result->val); GSL_ERROR ("error", GSL_EMAXITER); } k += 1.0; } while(fabs((del_pos + del_neg)/(sum_pos - sum_neg)) > GSL_DBL_EPSILON); result->val = sum_pos - sum_neg; result->err = del_pos + del_neg; result->err += 2.0 * GSL_DBL_EPSILON * (sum_pos + sum_neg); result->err += 2.0 * GSL_DBL_EPSILON * (2.0*sqrt(k) + 1.0) * fabs(result->val); return GSL_SUCCESS; } } /* Luke's rational approximation. The most accesible * discussion is in [Kolbig, CPC 23, 51 (1981)]. * The convergence is supposedly guaranteed for x < 0. * You have to read Luke's books to see this and other * results. Unfortunately, the stability is not so * clear to me, although it seems very efficient when * it works. */ static int hyperg_2F1_luke(const double a, const double b, const double c, const double xin, gsl_sf_result * result) { int stat_iter; const double RECUR_BIG = 1.0e+50; const int nmax = 20000; int n = 3; const double x = -xin; const double x3 = x*x*x; const double t0 = a*b/c; const double t1 = (a+1.0)*(b+1.0)/(2.0*c); const double t2 = (a+2.0)*(b+2.0)/(2.0*(c+1.0)); double F = 1.0; double prec; double Bnm3 = 1.0; /* B0 */ double Bnm2 = 1.0 + t1 * x; /* B1 */ double Bnm1 = 1.0 + t2 * x * (1.0 + t1/3.0 * x); /* B2 */ double Anm3 = 1.0; /* A0 */ double Anm2 = Bnm2 - t0 * x; /* A1 */ double Anm1 = Bnm1 - t0*(1.0 + t2*x)*x + t0 * t1 * (c/(c+1.0)) * x*x; /* A2 */ while(1) { double npam1 = n + a - 1; double npbm1 = n + b - 1; double npcm1 = n + c - 1; double npam2 = n + a - 2; double npbm2 = n + b - 2; double npcm2 = n + c - 2; double tnm1 = 2*n - 1; double tnm3 = 2*n - 3; double tnm5 = 2*n - 5; double n2 = n*n; double F1 = (3.0*n2 + (a+b-6)*n + 2 - a*b - 2*(a+b)) / (2*tnm3*npcm1); double F2 = -(3.0*n2 - (a+b+6)*n + 2 - a*b)*npam1*npbm1/(4*tnm1*tnm3*npcm2*npcm1); double F3 = (npam2*npam1*npbm2*npbm1*(n-a-2)*(n-b-2)) / (8*tnm3*tnm3*tnm5*(n+c-3)*npcm2*npcm1); double E = -npam1*npbm1*(n-c-1) / (2*tnm3*npcm2*npcm1); double An = (1.0+F1*x)*Anm1 + (E + F2*x)*x*Anm2 + F3*x3*Anm3; double Bn = (1.0+F1*x)*Bnm1 + (E + F2*x)*x*Bnm2 + F3*x3*Bnm3; double r = An/Bn; prec = fabs((F - r)/F); F = r; if(prec < GSL_DBL_EPSILON || n > nmax) break; if(fabs(An) > RECUR_BIG || fabs(Bn) > RECUR_BIG) { An /= RECUR_BIG; Bn /= RECUR_BIG; Anm1 /= RECUR_BIG; Bnm1 /= RECUR_BIG; Anm2 /= RECUR_BIG; Bnm2 /= RECUR_BIG; Anm3 /= RECUR_BIG; Bnm3 /= RECUR_BIG; } else if(fabs(An) < 1.0/RECUR_BIG || fabs(Bn) < 1.0/RECUR_BIG) { An *= RECUR_BIG; Bn *= RECUR_BIG; Anm1 *= RECUR_BIG; Bnm1 *= RECUR_BIG; Anm2 *= RECUR_BIG; Bnm2 *= RECUR_BIG; Anm3 *= RECUR_BIG; Bnm3 *= RECUR_BIG; } n++; Bnm3 = Bnm2; Bnm2 = Bnm1; Bnm1 = Bn; Anm3 = Anm2; Anm2 = Anm1; Anm1 = An; } result->val = F; result->err = 2.0 * fabs(prec * F); result->err += 2.0 * GSL_DBL_EPSILON * (n+1.0) * fabs(F); /* FIXME: just a hack: there's a lot of shit going on here */ result->err *= 8.0 * (fabs(a) + fabs(b) + 1.0); stat_iter = (n >= nmax ? GSL_EMAXITER : GSL_SUCCESS ); return stat_iter; } /* Luke's rational approximation for the * case a = aR + i aI, b = aR - i aI. */ static int hyperg_2F1_conj_luke(const double aR, const double aI, const double c, const double xin, gsl_sf_result * result) { int stat_iter; const double RECUR_BIG = 1.0e+50; const int nmax = 10000; int n = 3; const double x = -xin; const double x3 = x*x*x; const double atimesb = aR*aR + aI*aI; const double apb = 2.0*aR; const double t0 = atimesb/c; const double t1 = (atimesb + apb + 1.0)/(2.0*c); const double t2 = (atimesb + 2.0*apb + 4.0)/(2.0*(c+1.0)); double F = 1.0; double prec; double Bnm3 = 1.0; /* B0 */ double Bnm2 = 1.0 + t1 * x; /* B1 */ double Bnm1 = 1.0 + t2 * x * (1.0 + t1/3.0 * x); /* B2 */ double Anm3 = 1.0; /* A0 */ double Anm2 = Bnm2 - t0 * x; /* A1 */ double Anm1 = Bnm1 - t0*(1.0 + t2*x)*x + t0 * t1 * (c/(c+1.0)) * x*x; /* A2 */ while(1) { double nm1 = n - 1; double nm2 = n - 2; double npam1_npbm1 = atimesb + nm1*apb + nm1*nm1; double npam2_npbm2 = atimesb + nm2*apb + nm2*nm2; double npcm1 = nm1 + c; double npcm2 = nm2 + c; double tnm1 = 2*n - 1; double tnm3 = 2*n - 3; double tnm5 = 2*n - 5; double n2 = n*n; double F1 = (3.0*n2 + (apb-6)*n + 2 - atimesb - 2*apb) / (2*tnm3*npcm1); double F2 = -(3.0*n2 - (apb+6)*n + 2 - atimesb)*npam1_npbm1/(4*tnm1*tnm3*npcm2*npcm1); double F3 = (npam2_npbm2*npam1_npbm1*(nm2*nm2 - nm2*apb + atimesb)) / (8*tnm3*tnm3*tnm5*(n+c-3)*npcm2*npcm1); double E = -npam1_npbm1*(n-c-1) / (2*tnm3*npcm2*npcm1); double An = (1.0+F1*x)*Anm1 + (E + F2*x)*x*Anm2 + F3*x3*Anm3; double Bn = (1.0+F1*x)*Bnm1 + (E + F2*x)*x*Bnm2 + F3*x3*Bnm3; double r = An/Bn; prec = fabs(F - r)/fabs(F); F = r; if(prec < GSL_DBL_EPSILON || n > nmax) break; if(fabs(An) > RECUR_BIG || fabs(Bn) > RECUR_BIG) { An /= RECUR_BIG; Bn /= RECUR_BIG; Anm1 /= RECUR_BIG; Bnm1 /= RECUR_BIG; Anm2 /= RECUR_BIG; Bnm2 /= RECUR_BIG; Anm3 /= RECUR_BIG; Bnm3 /= RECUR_BIG; } else if(fabs(An) < 1.0/RECUR_BIG || fabs(Bn) < 1.0/RECUR_BIG) { An *= RECUR_BIG; Bn *= RECUR_BIG; Anm1 *= RECUR_BIG; Bnm1 *= RECUR_BIG; Anm2 *= RECUR_BIG; Bnm2 *= RECUR_BIG; Anm3 *= RECUR_BIG; Bnm3 *= RECUR_BIG; } n++; Bnm3 = Bnm2; Bnm2 = Bnm1; Bnm1 = Bn; Anm3 = Anm2; Anm2 = Anm1; Anm1 = An; } result->val = F; result->err = 2.0 * fabs(prec * F); result->err += 2.0 * GSL_DBL_EPSILON * (n+1.0) * fabs(F); /* FIXME: see above */ result->err *= 8.0 * (fabs(aR) + fabs(aI) + 1.0); stat_iter = (n >= nmax ? GSL_EMAXITER : GSL_SUCCESS ); return stat_iter; } /* Do the reflection described in [Moshier, p. 334]. * Assumes a,b,c != neg integer. */ static int hyperg_2F1_reflect(const double a, const double b, const double c, const double x, gsl_sf_result * result) { const double d = c - a - b; const int intd = floor(d+0.5); const int d_integer = ( fabs(d - intd) < locEPS ); if(d_integer) { const double ln_omx = log(1.0 - x); const double ad = fabs(d); int stat_F2 = GSL_SUCCESS; double sgn_2; gsl_sf_result F1; gsl_sf_result F2; double d1, d2; gsl_sf_result lng_c; gsl_sf_result lng_ad2; gsl_sf_result lng_bd2; int stat_c; int stat_ad2; int stat_bd2; if(d >= 0.0) { d1 = d; d2 = 0.0; } else { d1 = 0.0; d2 = d; } stat_ad2 = gsl_sf_lngamma_e(a+d2, &lng_ad2); stat_bd2 = gsl_sf_lngamma_e(b+d2, &lng_bd2); stat_c = gsl_sf_lngamma_e(c, &lng_c); /* Evaluate F1. */ if(ad < GSL_DBL_EPSILON) { /* d = 0 */ F1.val = 0.0; F1.err = 0.0; } else { gsl_sf_result lng_ad; gsl_sf_result lng_ad1; gsl_sf_result lng_bd1; int stat_ad = gsl_sf_lngamma_e(ad, &lng_ad); int stat_ad1 = gsl_sf_lngamma_e(a+d1, &lng_ad1); int stat_bd1 = gsl_sf_lngamma_e(b+d1, &lng_bd1); if(stat_ad1 == GSL_SUCCESS && stat_bd1 == GSL_SUCCESS && stat_ad == GSL_SUCCESS) { /* Gamma functions in the denominator are ok. * Proceed with evaluation. */ int i; double sum1 = 1.0; double term = 1.0; double ln_pre1_val = lng_ad.val + lng_c.val + d2*ln_omx - lng_ad1.val - lng_bd1.val; double ln_pre1_err = lng_ad.err + lng_c.err + lng_ad1.err + lng_bd1.err + GSL_DBL_EPSILON * fabs(ln_pre1_val); int stat_e; /* Do F1 sum. */ for(i=1; ival = 0.0; result->err = 0.0; GSL_ERROR ("error", GSL_EOVRFLW); } } stat_F2 = GSL_ERROR_SELECT_2(stat_F2, stat_dall); } else { /* Gamma functions in the denominator not ok. * So the F2 term is zero. */ F2.val = 0.0; F2.err = 0.0; } /* end F2 evaluation */ sgn_2 = ( GSL_IS_ODD(intd) ? -1.0 : 1.0 ); result->val = F1.val + sgn_2 * F2.val; result->err = F1.err + F2. err; result->err += 2.0 * GSL_DBL_EPSILON * (fabs(F1.val) + fabs(F2.val)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_F2; } else { /* d not an integer */ gsl_sf_result pre1, pre2; double sgn1, sgn2; gsl_sf_result F1, F2; int status_F1, status_F2; /* These gamma functions appear in the denominator, so we * catch their harmless domain errors and set the terms to zero. */ gsl_sf_result ln_g1ca, ln_g1cb, ln_g2a, ln_g2b; double sgn_g1ca, sgn_g1cb, sgn_g2a, sgn_g2b; int stat_1ca = gsl_sf_lngamma_sgn_e(c-a, &ln_g1ca, &sgn_g1ca); int stat_1cb = gsl_sf_lngamma_sgn_e(c-b, &ln_g1cb, &sgn_g1cb); int stat_2a = gsl_sf_lngamma_sgn_e(a, &ln_g2a, &sgn_g2a); int stat_2b = gsl_sf_lngamma_sgn_e(b, &ln_g2b, &sgn_g2b); int ok1 = (stat_1ca == GSL_SUCCESS && stat_1cb == GSL_SUCCESS); int ok2 = (stat_2a == GSL_SUCCESS && stat_2b == GSL_SUCCESS); gsl_sf_result ln_gc, ln_gd, ln_gmd; double sgn_gc, sgn_gd, sgn_gmd; gsl_sf_lngamma_sgn_e( c, &ln_gc, &sgn_gc); gsl_sf_lngamma_sgn_e( d, &ln_gd, &sgn_gd); gsl_sf_lngamma_sgn_e(-d, &ln_gmd, &sgn_gmd); sgn1 = sgn_gc * sgn_gd * sgn_g1ca * sgn_g1cb; sgn2 = sgn_gc * sgn_gmd * sgn_g2a * sgn_g2b; if(ok1 && ok2) { double ln_pre1_val = ln_gc.val + ln_gd.val - ln_g1ca.val - ln_g1cb.val; double ln_pre2_val = ln_gc.val + ln_gmd.val - ln_g2a.val - ln_g2b.val + d*log(1.0-x); double ln_pre1_err = ln_gc.err + ln_gd.err + ln_g1ca.err + ln_g1cb.err; double ln_pre2_err = ln_gc.err + ln_gmd.err + ln_g2a.err + ln_g2b.err; if(ln_pre1_val < GSL_LOG_DBL_MAX && ln_pre2_val < GSL_LOG_DBL_MAX) { gsl_sf_exp_err_e(ln_pre1_val, ln_pre1_err, &pre1); gsl_sf_exp_err_e(ln_pre2_val, ln_pre2_err, &pre2); pre1.val *= sgn1; pre2.val *= sgn2; } else { OVERFLOW_ERROR(result); } } else if(ok1 && !ok2) { double ln_pre1_val = ln_gc.val + ln_gd.val - ln_g1ca.val - ln_g1cb.val; double ln_pre1_err = ln_gc.err + ln_gd.err + ln_g1ca.err + ln_g1cb.err; if(ln_pre1_val < GSL_LOG_DBL_MAX) { gsl_sf_exp_err_e(ln_pre1_val, ln_pre1_err, &pre1); pre1.val *= sgn1; pre2.val = 0.0; pre2.err = 0.0; } else { OVERFLOW_ERROR(result); } } else if(!ok1 && ok2) { double ln_pre2_val = ln_gc.val + ln_gmd.val - ln_g2a.val - ln_g2b.val + d*log(1.0-x); double ln_pre2_err = ln_gc.err + ln_gmd.err + ln_g2a.err + ln_g2b.err; if(ln_pre2_val < GSL_LOG_DBL_MAX) { pre1.val = 0.0; pre1.err = 0.0; gsl_sf_exp_err_e(ln_pre2_val, ln_pre2_err, &pre2); pre2.val *= sgn2; } else { OVERFLOW_ERROR(result); } } else { pre1.val = 0.0; pre2.val = 0.0; UNDERFLOW_ERROR(result); } status_F1 = hyperg_2F1_series( a, b, 1.0-d, 1.0-x, &F1); status_F2 = hyperg_2F1_series(c-a, c-b, 1.0+d, 1.0-x, &F2); result->val = pre1.val*F1.val + pre2.val*F2.val; result->err = fabs(pre1.val*F1.err) + fabs(pre2.val*F2.err); result->err += fabs(pre1.err*F1.val) + fabs(pre2.err*F2.val); result->err += 2.0 * GSL_DBL_EPSILON * (fabs(pre1.val*F1.val) + fabs(pre2.val*F2.val)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); if (status_F1) return status_F1; if (status_F2) return status_F2; return GSL_SUCCESS; } } static int pow_omx(const double x, const double p, gsl_sf_result * result) { double ln_omx; double ln_result; if(fabs(x) < GSL_ROOT5_DBL_EPSILON) { ln_omx = -x*(1.0 + x*(1.0/2.0 + x*(1.0/3.0 + x/4.0 + x*x/5.0))); } else { ln_omx = log(1.0-x); } ln_result = p * ln_omx; return gsl_sf_exp_err_e(ln_result, GSL_DBL_EPSILON * fabs(ln_result), result); } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_hyperg_2F1_e(double a, double b, const double c, const double x, gsl_sf_result * result) { const double d = c - a - b; const double rinta = floor(a + 0.5); const double rintb = floor(b + 0.5); const double rintc = floor(c + 0.5); const int a_neg_integer = ( a < 0.0 && fabs(a - rinta) < locEPS ); const int b_neg_integer = ( b < 0.0 && fabs(b - rintb) < locEPS ); const int c_neg_integer = ( c < 0.0 && fabs(c - rintc) < locEPS ); result->val = 0.0; result->err = 0.0; /* Handle x == 1.0 RJM */ if (fabs (x - 1.0) < locEPS && (c - a - b) > 0 && c != 0 && !c_neg_integer) { gsl_sf_result lngamc, lngamcab, lngamca, lngamcb; double lngamc_sgn, lngamca_sgn, lngamcb_sgn; int status; int stat1 = gsl_sf_lngamma_sgn_e (c, &lngamc, &lngamc_sgn); int stat2 = gsl_sf_lngamma_e (c - a - b, &lngamcab); int stat3 = gsl_sf_lngamma_sgn_e (c - a, &lngamca, &lngamca_sgn); int stat4 = gsl_sf_lngamma_sgn_e (c - b, &lngamcb, &lngamcb_sgn); if (stat1 != GSL_SUCCESS || stat2 != GSL_SUCCESS || stat3 != GSL_SUCCESS || stat4 != GSL_SUCCESS) { DOMAIN_ERROR (result); } status = gsl_sf_exp_err_e (lngamc.val + lngamcab.val - lngamca.val - lngamcb.val, lngamc.err + lngamcab.err + lngamca.err + lngamcb.err, result); result->val *= lngamc_sgn / (lngamca_sgn * lngamcb_sgn); return status; } if(x < -1.0 || 1.0 <= x) { DOMAIN_ERROR(result); } if(c_neg_integer) { /* If c is a negative integer, then either a or b must be a negative integer of smaller magnitude than c to ensure cancellation of the series. */ if(! (a_neg_integer && a > c + 0.1) && ! (b_neg_integer && b > c + 0.1)) { DOMAIN_ERROR(result); } } if(fabs(c-b) < locEPS || fabs(c-a) < locEPS) { return pow_omx(x, d, result); /* (1-x)^(c-a-b) */ } if(a >= 0.0 && b >= 0.0 && c >=0.0 && x >= 0.0 && x < 0.995) { /* Series has all positive definite * terms and x is not close to 1. */ return hyperg_2F1_series(a, b, c, x, result); } if(fabs(a) < 10.0 && fabs(b) < 10.0) { /* a and b are not too large, so we attempt * variations on the series summation. */ if(a_neg_integer) { return hyperg_2F1_series(rinta, b, c, x, result); } if(b_neg_integer) { return hyperg_2F1_series(a, rintb, c, x, result); } if(x < -0.25) { return hyperg_2F1_luke(a, b, c, x, result); } else if(x < 0.5) { return hyperg_2F1_series(a, b, c, x, result); } else { if(fabs(c) > 10.0) { return hyperg_2F1_series(a, b, c, x, result); } else { return hyperg_2F1_reflect(a, b, c, x, result); } } } else { /* Either a or b or both large. * Introduce some new variables ap,bp so that bp is * the larger in magnitude. */ double ap, bp; if(fabs(a) > fabs(b)) { bp = a; ap = b; } else { bp = b; ap = a; } if(x < 0.0) { /* What the hell, maybe Luke will converge. */ return hyperg_2F1_luke(a, b, c, x, result); } if(GSL_MAX_DBL(fabs(ap),1.0)*fabs(bp)*fabs(x) < 2.0*fabs(c)) { /* If c is large enough or x is small enough, * we can attempt the series anyway. */ return hyperg_2F1_series(a, b, c, x, result); } if(fabs(bp*bp*x*x) < 0.001*fabs(bp) && fabs(ap) < 10.0) { /* The famous but nearly worthless "large b" asymptotic. */ int stat = gsl_sf_hyperg_1F1_e(ap, c, bp*x, result); result->err = 0.001 * fabs(result->val); return stat; } /* We give up. */ result->val = 0.0; result->err = 0.0; GSL_ERROR ("error", GSL_EUNIMPL); } } int gsl_sf_hyperg_2F1_conj_e(const double aR, const double aI, const double c, const double x, gsl_sf_result * result) { const double ax = fabs(x); const double rintc = floor(c + 0.5); const int c_neg_integer = ( c < 0.0 && fabs(c - rintc) < locEPS ); result->val = 0.0; result->err = 0.0; if(ax >= 1.0 || c_neg_integer || c == 0.0) { DOMAIN_ERROR(result); } if( (ax < 0.25 && fabs(aR) < 20.0 && fabs(aI) < 20.0) || (c > 0.0 && x > 0.0) ) { return hyperg_2F1_conj_series(aR, aI, c, x, result); } else if(fabs(aR) < 10.0 && fabs(aI) < 10.0) { if(x < -0.25) { return hyperg_2F1_conj_luke(aR, aI, c, x, result); } else { return hyperg_2F1_conj_series(aR, aI, c, x, result); } } else { if(x < 0.0) { /* What the hell, maybe Luke will converge. */ return hyperg_2F1_conj_luke(aR, aI, c, x, result); } /* Give up. */ result->val = 0.0; result->err = 0.0; GSL_ERROR ("error", GSL_EUNIMPL); } } int gsl_sf_hyperg_2F1_renorm_e(const double a, const double b, const double c, const double x, gsl_sf_result * result ) { const double rinta = floor(a + 0.5); const double rintb = floor(b + 0.5); const double rintc = floor(c + 0.5); const int a_neg_integer = ( a < 0.0 && fabs(a - rinta) < locEPS ); const int b_neg_integer = ( b < 0.0 && fabs(b - rintb) < locEPS ); const int c_neg_integer = ( c < 0.0 && fabs(c - rintc) < locEPS ); if(c_neg_integer) { if((a_neg_integer && a > c+0.1) || (b_neg_integer && b > c+0.1)) { /* 2F1 terminates early */ result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { /* 2F1 does not terminate early enough, so something survives */ /* [Abramowitz+Stegun, 15.1.2] */ gsl_sf_result g1, g2, g3, g4, g5; double s1, s2, s3, s4, s5; int stat = 0; stat += gsl_sf_lngamma_sgn_e(a-c+1, &g1, &s1); stat += gsl_sf_lngamma_sgn_e(b-c+1, &g2, &s2); stat += gsl_sf_lngamma_sgn_e(a, &g3, &s3); stat += gsl_sf_lngamma_sgn_e(b, &g4, &s4); stat += gsl_sf_lngamma_sgn_e(-c+2, &g5, &s5); if(stat != 0) { DOMAIN_ERROR(result); } else { gsl_sf_result F; int stat_F = gsl_sf_hyperg_2F1_e(a-c+1, b-c+1, -c+2, x, &F); double ln_pre_val = g1.val + g2.val - g3.val - g4.val - g5.val; double ln_pre_err = g1.err + g2.err + g3.err + g4.err + g5.err; double sg = s1 * s2 * s3 * s4 * s5; int stat_e = gsl_sf_exp_mult_err_e(ln_pre_val, ln_pre_err, sg * F.val, F.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_F); } } } else { /* generic c */ gsl_sf_result F; gsl_sf_result lng; double sgn; int stat_g = gsl_sf_lngamma_sgn_e(c, &lng, &sgn); int stat_F = gsl_sf_hyperg_2F1_e(a, b, c, x, &F); int stat_e = gsl_sf_exp_mult_err_e(-lng.val, lng.err, sgn*F.val, F.err, result); return GSL_ERROR_SELECT_3(stat_e, stat_F, stat_g); } } int gsl_sf_hyperg_2F1_conj_renorm_e(const double aR, const double aI, const double c, const double x, gsl_sf_result * result ) { const double rintc = floor(c + 0.5); const double rinta = floor(aR + 0.5); const int a_neg_integer = ( aR < 0.0 && fabs(aR-rinta) < locEPS && aI == 0.0); const int c_neg_integer = ( c < 0.0 && fabs(c - rintc) < locEPS ); if(c_neg_integer) { if(a_neg_integer && aR > c+0.1) { /* 2F1 terminates early */ result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { /* 2F1 does not terminate early enough, so something survives */ /* [Abramowitz+Stegun, 15.1.2] */ gsl_sf_result g1, g2; gsl_sf_result g3; gsl_sf_result a1, a2; int stat = 0; stat += gsl_sf_lngamma_complex_e(aR-c+1, aI, &g1, &a1); stat += gsl_sf_lngamma_complex_e(aR, aI, &g2, &a2); stat += gsl_sf_lngamma_e(-c+2.0, &g3); if(stat != 0) { DOMAIN_ERROR(result); } else { gsl_sf_result F; int stat_F = gsl_sf_hyperg_2F1_conj_e(aR-c+1, aI, -c+2, x, &F); double ln_pre_val = 2.0*(g1.val - g2.val) - g3.val; double ln_pre_err = 2.0 * (g1.err + g2.err) + g3.err; int stat_e = gsl_sf_exp_mult_err_e(ln_pre_val, ln_pre_err, F.val, F.err, result); return GSL_ERROR_SELECT_2(stat_e, stat_F); } } } else { /* generic c */ gsl_sf_result F; gsl_sf_result lng; double sgn; int stat_g = gsl_sf_lngamma_sgn_e(c, &lng, &sgn); int stat_F = gsl_sf_hyperg_2F1_conj_e(aR, aI, c, x, &F); int stat_e = gsl_sf_exp_mult_err_e(-lng.val, lng.err, sgn*F.val, F.err, result); return GSL_ERROR_SELECT_3(stat_e, stat_F, stat_g); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_hyperg_2F1(double a, double b, double c, double x) { EVAL_RESULT(gsl_sf_hyperg_2F1_e(a, b, c, x, &result)); } double gsl_sf_hyperg_2F1_conj(double aR, double aI, double c, double x) { EVAL_RESULT(gsl_sf_hyperg_2F1_conj_e(aR, aI, c, x, &result)); } double gsl_sf_hyperg_2F1_renorm(double a, double b, double c, double x) { EVAL_RESULT(gsl_sf_hyperg_2F1_renorm_e(a, b, c, x, &result)); } double gsl_sf_hyperg_2F1_conj_renorm(double aR, double aI, double c, double x) { EVAL_RESULT(gsl_sf_hyperg_2F1_conj_renorm_e(aR, aI, c, x, &result)); } gsl/specfunc/ellint.c0000644000175000017500000004666413536674414013213 0ustar eddedd/* specfunc/ellint.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "error.h" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ inline static double locMAX3(double x, double y, double z) { double xy = GSL_MAX(x, y); return GSL_MAX(xy, z); } inline static double locMAX4(double x, double y, double z, double w) { double xy = GSL_MAX(x, y); double xyz = GSL_MAX(xy, z); return GSL_MAX(xyz, w); } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ /* based on Carlson's algorithms: [B. C. Carlson Numer. Math. 33, 1 (1979)] see also: [B.C. Carlson, Special Functions of Applied Mathematics (1977)] */ /* According to Carlson's algorithm, the errtol parameter typically effects the relative error in the following way: relative error < 16 errtol^6 / (1 - 2 errtol) errtol precision ------ ---------- 0.001 1.0e-17 0.003 2.0e-14 0.01 2.0e-11 0.03 2.0e-8 0.1 2.0e-5 */ int gsl_sf_ellint_RC_e(double x, double y, gsl_mode_t mode, gsl_sf_result * result) { const double lolim = 5.0 * GSL_DBL_MIN; const double uplim = 0.2 * GSL_DBL_MAX; const gsl_prec_t goal = GSL_MODE_PREC(mode); const double errtol = ( goal == GSL_PREC_DOUBLE ? 0.001 : 0.03 ); const double prec = gsl_prec_eps[goal]; const int nmax = 10000; if(x < 0.0 || y < 0.0 || x + y < lolim) { DOMAIN_ERROR(result); } else if(GSL_MAX(x, y) < uplim) { const double c1 = 1.0 / 7.0; const double c2 = 9.0 / 22.0; double xn = x; double yn = y; double mu, sn, lamda, s; int n = 0; while(1) { mu = (xn + yn + yn) / 3.0; sn = (yn + mu) / mu - 2.0; if (fabs(sn) < errtol) break; lamda = 2.0 * sqrt(xn) * sqrt(yn) + yn; xn = (xn + lamda) * 0.25; yn = (yn + lamda) * 0.25; n++; if(n==nmax) { MAXITER_ERROR (result); } } s = sn * sn * (0.3 + sn * (c1 + sn * (0.375 + sn * c2))); result->val = (1.0 + s) / sqrt(mu); result->err = prec * fabs(result->val); return GSL_SUCCESS; } else { DOMAIN_ERROR(result); } } int gsl_sf_ellint_RD_e(double x, double y, double z, gsl_mode_t mode, gsl_sf_result * result) { const gsl_prec_t goal = GSL_MODE_PREC(mode); const double errtol = ( goal == GSL_PREC_DOUBLE ? 0.001 : 0.03 ); const double prec = gsl_prec_eps[goal]; const double lolim = 2.0/pow(GSL_DBL_MAX, 2.0/3.0); const double uplim = pow(0.1*errtol/GSL_DBL_MIN, 2.0/3.0); const int nmax = 10000; if(GSL_MIN(x,y) < 0.0 || GSL_MIN(x+y,z) < lolim) { DOMAIN_ERROR(result); } else if(locMAX3(x,y,z) < uplim) { const double c1 = 3.0 / 14.0; const double c2 = 1.0 / 6.0; const double c3 = 9.0 / 22.0; const double c4 = 3.0 / 26.0; double xn = x; double yn = y; double zn = z; double sigma = 0.0; double power4 = 1.0; double ea, eb, ec, ed, ef, s1, s2; double mu, xndev, yndev, zndev; int n = 0; while(1) { double xnroot, ynroot, znroot, lamda; double epslon; mu = (xn + yn + 3.0 * zn) * 0.2; xndev = (mu - xn) / mu; yndev = (mu - yn) / mu; zndev = (mu - zn) / mu; epslon = locMAX3(fabs(xndev), fabs(yndev), fabs(zndev)); if (epslon < errtol) break; xnroot = sqrt(xn); ynroot = sqrt(yn); znroot = sqrt(zn); lamda = xnroot * (ynroot + znroot) + ynroot * znroot; sigma += power4 / (znroot * (zn + lamda)); power4 *= 0.25; xn = (xn + lamda) * 0.25; yn = (yn + lamda) * 0.25; zn = (zn + lamda) * 0.25; n++; if(n==nmax) { MAXITER_ERROR (result); } } ea = xndev * yndev; eb = zndev * zndev; ec = ea - eb; ed = ea - 6.0 * eb; ef = ed + ec + ec; s1 = ed * (- c1 + 0.25 * c3 * ed - 1.5 * c4 * zndev * ef); s2 = zndev * (c2 * ef + zndev * (- c3 * ec + zndev * c4 * ea)); result->val = 3.0 * sigma + power4 * (1.0 + s1 + s2) / (mu * sqrt(mu)); result->err = prec * fabs(result->val); return GSL_SUCCESS; } else { DOMAIN_ERROR(result); } } int gsl_sf_ellint_RF_e(double x, double y, double z, gsl_mode_t mode, gsl_sf_result * result) { const double lolim = 5.0 * GSL_DBL_MIN; const double uplim = 0.2 * GSL_DBL_MAX; const gsl_prec_t goal = GSL_MODE_PREC(mode); const double errtol = ( goal == GSL_PREC_DOUBLE ? 0.001 : 0.03 ); const double prec = gsl_prec_eps[goal]; const int nmax = 10000; if(x < 0.0 || y < 0.0 || z < 0.0) { DOMAIN_ERROR(result); } else if(x+y < lolim || x+z < lolim || y+z < lolim) { DOMAIN_ERROR(result); } else if(locMAX3(x,y,z) < uplim) { const double c1 = 1.0 / 24.0; const double c2 = 3.0 / 44.0; const double c3 = 1.0 / 14.0; double xn = x; double yn = y; double zn = z; double mu, xndev, yndev, zndev, e2, e3, s; int n = 0; while(1) { double epslon, lamda; double xnroot, ynroot, znroot; mu = (xn + yn + zn) / 3.0; xndev = 2.0 - (mu + xn) / mu; yndev = 2.0 - (mu + yn) / mu; zndev = 2.0 - (mu + zn) / mu; epslon = locMAX3(fabs(xndev), fabs(yndev), fabs(zndev)); if (epslon < errtol) break; xnroot = sqrt(xn); ynroot = sqrt(yn); znroot = sqrt(zn); lamda = xnroot * (ynroot + znroot) + ynroot * znroot; xn = (xn + lamda) * 0.25; yn = (yn + lamda) * 0.25; zn = (zn + lamda) * 0.25; n++; if(n==nmax) { MAXITER_ERROR (result); } } e2 = xndev * yndev - zndev * zndev; e3 = xndev * yndev * zndev; s = 1.0 + (c1 * e2 - 0.1 - c2 * e3) * e2 + c3 * e3; result->val = s / sqrt(mu); result->err = prec * fabs(result->val); return GSL_SUCCESS; } else { DOMAIN_ERROR(result); } } int gsl_sf_ellint_RJ_e(double x, double y, double z, double p, gsl_mode_t mode, gsl_sf_result * result) { const gsl_prec_t goal = GSL_MODE_PREC(mode); const double errtol = ( goal == GSL_PREC_DOUBLE ? 0.001 : 0.03 ); const double prec = gsl_prec_eps[goal]; const double lolim = pow(5.0 * GSL_DBL_MIN, 1.0/3.0); const double uplim = 0.3 * pow(0.2 * GSL_DBL_MAX, 1.0/3.0); const int nmax = 10000; if(x < 0.0 || y < 0.0 || z < 0.0) { DOMAIN_ERROR(result); } else if(x + y < lolim || x + z < lolim || y + z < lolim || p < lolim) { DOMAIN_ERROR(result); } else if(locMAX4(x,y,z,p) < uplim) { const double c1 = 3.0 / 14.0; const double c2 = 1.0 / 3.0; const double c3 = 3.0 / 22.0; const double c4 = 3.0 / 26.0; double xn = x; double yn = y; double zn = z; double pn = p; double sigma = 0.0; double power4 = 1.0; double mu, xndev, yndev, zndev, pndev; double ea, eb, ec, e2, e3, s1, s2, s3; int n = 0; while(1) { double xnroot, ynroot, znroot; double lamda, alfa, beta; double epslon; gsl_sf_result rcresult; int rcstatus; mu = (xn + yn + zn + pn + pn) * 0.2; xndev = (mu - xn) / mu; yndev = (mu - yn) / mu; zndev = (mu - zn) / mu; pndev = (mu - pn) / mu; epslon = locMAX4(fabs(xndev), fabs(yndev), fabs(zndev), fabs(pndev)); if(epslon < errtol) break; xnroot = sqrt(xn); ynroot = sqrt(yn); znroot = sqrt(zn); lamda = xnroot * (ynroot + znroot) + ynroot * znroot; alfa = pn * (xnroot + ynroot + znroot) + xnroot * ynroot * znroot; alfa = alfa * alfa; beta = pn * (pn + lamda) * (pn + lamda); rcstatus = gsl_sf_ellint_RC_e(alfa, beta, mode, &rcresult); if(rcstatus != GSL_SUCCESS) { result->val = 0.0; result->err = 0.0; return rcstatus; } sigma += power4 * rcresult.val; power4 *= 0.25; xn = (xn + lamda) * 0.25; yn = (yn + lamda) * 0.25; zn = (zn + lamda) * 0.25; pn = (pn + lamda) * 0.25; n++; if(n==nmax) { MAXITER_ERROR (result); } } ea = xndev * (yndev + zndev) + yndev * zndev; eb = xndev * yndev * zndev; ec = pndev * pndev; e2 = ea - 3.0 * ec; e3 = eb + 2.0 * pndev * (ea - ec); s1 = 1.0 + e2 * (- c1 + 0.75 * c3 * e2 - 1.5 * c4 * e3); s2 = eb * (0.5 * c2 + pndev * (- c3 - c3 + pndev * c4)); s3 = pndev * ea * (c2 - pndev * c3) - c2 * pndev * ec; result->val = 3.0 * sigma + power4 * (s1 + s2 + s3) / (mu * sqrt(mu)); result->err = prec * fabs(result->val); return GSL_SUCCESS; } else { DOMAIN_ERROR(result); } } /* [Carlson, Numer. Math. 33 (1979) 1, (4.1)] */ int gsl_sf_ellint_F_e(double phi, double k, gsl_mode_t mode, gsl_sf_result * result) { /* Angular reduction to -pi/2 < phi < pi/2 (we should really use an exact reduction but this will have to do for now) BJG */ double nc = floor(phi/M_PI + 0.5); double phi_red = phi - nc * M_PI; phi = phi_red; { double sin_phi = sin(phi); double sin2_phi = sin_phi*sin_phi; double x = 1.0 - sin2_phi; double y = 1.0 - k*k*sin2_phi; gsl_sf_result rf; int status = gsl_sf_ellint_RF_e(x, y, 1.0, mode, &rf); result->val = sin_phi * rf.val; result->err = GSL_DBL_EPSILON * fabs(result->val) + fabs(sin_phi*rf.err); if (nc == 0) { return status; } else { gsl_sf_result rk; /* add extra terms from periodicity */ const int rkstatus = gsl_sf_ellint_Kcomp_e(k, mode, &rk); result->val += 2*nc*rk.val; result->err += 2*fabs(nc)*rk.err; return GSL_ERROR_SELECT_2(status, rkstatus); } } } /* [Carlson, Numer. Math. 33 (1979) 1, (4.2)] */ int gsl_sf_ellint_E_e(double phi, double k, gsl_mode_t mode, gsl_sf_result * result) { /* Angular reduction to -pi/2 < phi < pi/2 (we should really use an exact reduction but this will have to do for now) BJG */ double nc = floor(phi/M_PI + 0.5); double phi_red = phi - nc * M_PI; phi = phi_red; { const double sin_phi = sin(phi); const double sin2_phi = sin_phi * sin_phi; const double x = 1.0 - sin2_phi; const double y = 1.0 - k*k*sin2_phi; if(x < GSL_DBL_EPSILON) { gsl_sf_result re; const int status = gsl_sf_ellint_Ecomp_e(k, mode, &re); /* could use A&S 17.4.14 to improve the value below */ result->val = 2*nc*re.val + GSL_SIGN(sin_phi) * re.val; result->err = 2*fabs(nc)*re.err + re.err; return status; } else { gsl_sf_result rf, rd; const double sin3_phi = sin2_phi * sin_phi; const int rfstatus = gsl_sf_ellint_RF_e(x, y, 1.0, mode, &rf); const int rdstatus = gsl_sf_ellint_RD_e(x, y, 1.0, mode, &rd); result->val = sin_phi * rf.val - k*k/3.0 * sin3_phi * rd.val; result->err = GSL_DBL_EPSILON * fabs(sin_phi * rf.val); result->err += fabs(sin_phi*rf.err); result->err += k*k/3.0 * GSL_DBL_EPSILON * fabs(sin3_phi * rd.val); result->err += k*k/3.0 * fabs(sin3_phi*rd.err); if (nc == 0) { return GSL_ERROR_SELECT_2(rfstatus, rdstatus); } else { gsl_sf_result re; /* add extra terms from periodicity */ const int restatus = gsl_sf_ellint_Ecomp_e(k, mode, &re); result->val += 2*nc*re.val; result->err += 2*fabs(nc)*re.err; return GSL_ERROR_SELECT_3(rfstatus, rdstatus, restatus); } } } } /* [Carlson, Numer. Math. 33 (1979) 1, (4.3)] */ int gsl_sf_ellint_P_e(double phi, double k, double n, gsl_mode_t mode, gsl_sf_result * result) { /* Angular reduction to -pi/2 < phi < pi/2 (we should really use an exact reduction but this will have to do for now) BJG */ double nc = floor(phi/M_PI + 0.5); double phi_red = phi - nc * M_PI; phi = phi_red; /* FIXME: need to handle the case of small x, as for E,F */ { const double sin_phi = sin(phi); const double sin2_phi = sin_phi * sin_phi; const double sin3_phi = sin2_phi * sin_phi; const double x = 1.0 - sin2_phi; const double y = 1.0 - k*k*sin2_phi; gsl_sf_result rf; gsl_sf_result rj; const int rfstatus = gsl_sf_ellint_RF_e(x, y, 1.0, mode, &rf); const int rjstatus = gsl_sf_ellint_RJ_e(x, y, 1.0, 1.0 + n*sin2_phi, mode, &rj); result->val = sin_phi * rf.val - n/3.0*sin3_phi * rj.val; result->err = GSL_DBL_EPSILON * fabs(sin_phi * rf.val); result->err += fabs(sin_phi * rf.err); result->err += n/3.0 * GSL_DBL_EPSILON * fabs(sin3_phi*rj.val); result->err += n/3.0 * fabs(sin3_phi*rj.err); if (nc == 0) { return GSL_ERROR_SELECT_2(rfstatus, rjstatus); } else { gsl_sf_result rp; /* add extra terms from periodicity */ const int rpstatus = gsl_sf_ellint_Pcomp_e(k, n, mode, &rp); result->val += 2*nc*rp.val; result->err += 2*fabs(nc)*rp.err; return GSL_ERROR_SELECT_3(rfstatus, rjstatus, rpstatus); } } } /* [Carlson, Numer. Math. 33 (1979) 1, (4.4)] */ int gsl_sf_ellint_D_e(double phi, double k, gsl_mode_t mode, gsl_sf_result * result) { /* Angular reduction to -pi/2 < phi < pi/2 (we should really use an exact reduction but this will have to do for now) BJG */ double nc = floor(phi/M_PI + 0.5); double phi_red = phi - nc * M_PI; phi = phi_red; /* FIXME: need to handle the case of small x, as for E,F */ { const double sin_phi = sin(phi); const double sin2_phi = sin_phi * sin_phi; const double sin3_phi = sin2_phi * sin_phi; const double x = 1.0 - sin2_phi; const double y = 1.0 - k*k*sin2_phi; gsl_sf_result rd; const int status = gsl_sf_ellint_RD_e(x, y, 1.0, mode, &rd); result->val = sin3_phi/3.0 * rd.val; result->err = GSL_DBL_EPSILON * fabs(result->val) + fabs(sin3_phi/3.0 * rd.err); if (nc == 0) { return status; } else { gsl_sf_result rd; /* add extra terms from periodicity */ const int rdstatus = gsl_sf_ellint_Dcomp_e(k, mode, &rd); result->val += 2*nc*rd.val; result->err += 2*fabs(nc)*rd.err; return GSL_ERROR_SELECT_2(status, rdstatus); } } } int gsl_sf_ellint_Dcomp_e(double k, gsl_mode_t mode, gsl_sf_result * result) { if(k*k >= 1.0) { DOMAIN_ERROR(result); } else { const double y = 1.0 - k*k; /* FIXME: still need to handle k~=~1 */ gsl_sf_result rd; const int status = gsl_sf_ellint_RD_e(0.0, y, 1.0, mode, &rd); result->val = (1.0/3.0) * rd.val; result->err = GSL_DBL_EPSILON * fabs(result->val) + fabs(1.0/3.0 * rd.err); return status; } } /* [Carlson, Numer. Math. 33 (1979) 1, (4.5)] */ int gsl_sf_ellint_Kcomp_e(double k, gsl_mode_t mode, gsl_sf_result * result) { if(k*k >= 1.0) { DOMAIN_ERROR(result); } else if(k*k >= 1.0 - GSL_SQRT_DBL_EPSILON) { /* [Abramowitz+Stegun, 17.3.34] */ const double y = 1.0 - k*k; const double a[] = { 1.38629436112, 0.09666344259, 0.03590092383 }; const double b[] = { 0.5, 0.12498593597, 0.06880248576 }; const double ta = a[0] + y*(a[1] + y*a[2]); const double tb = -log(y) * (b[0] + y*(b[1] + y*b[2])); result->val = ta + tb; result->err = 2.0 * GSL_DBL_EPSILON * (fabs(result->val) + fabs(k/y)); return GSL_SUCCESS; } else { /* This was previously computed as, return gsl_sf_ellint_RF_e(0.0, 1.0 - k*k, 1.0, mode, result); but this underestimated the total error for small k, since the argument y=1-k^2 is not exact (there is an absolute error of GSL_DBL_EPSILON near y=0 due to cancellation in the subtraction). Taking the singular behavior of -log(y) above gives an error of 0.5*epsilon/y near y=0. (BJG) */ double y = 1.0 - k*k; int status = gsl_sf_ellint_RF_e(0.0, y, 1.0, mode, result); result->err += 0.5 * GSL_DBL_EPSILON / y; return status ; } } /* [Carlson, Numer. Math. 33 (1979) 1, (4.6)] */ int gsl_sf_ellint_Ecomp_e(double k, gsl_mode_t mode, gsl_sf_result * result) { if(k*k >= 1.0) { DOMAIN_ERROR(result); } else if(k*k >= 1.0 - GSL_SQRT_DBL_EPSILON) { /* [Abramowitz+Stegun, 17.3.36] */ const double y = 1.0 - k*k; const double a[] = { 0.44325141463, 0.06260601220, 0.04757383546 }; const double b[] = { 0.24998368310, 0.09200180037, 0.04069697526 }; const double ta = 1.0 + y*(a[0] + y*(a[1] + a[2]*y)); const double tb = -y*log(y) * (b[0] + y*(b[1] + b[2]*y)); result->val = ta + tb; result->err = 2.0 * GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else { gsl_sf_result rf; gsl_sf_result rd; const double y = 1.0 - k*k; const int rfstatus = gsl_sf_ellint_RF_e(0.0, y, 1.0, mode, &rf); const int rdstatus = gsl_sf_ellint_RD_e(0.0, y, 1.0, mode, &rd); result->val = rf.val - k*k/3.0 * rd.val; result->err = rf.err + k*k/3.0 * rd.err; return GSL_ERROR_SELECT_2(rfstatus, rdstatus); } } /* [Carlson, Numer. Math. 33 (1979) 1, (4.3) phi=pi/2] */ int gsl_sf_ellint_Pcomp_e(double k, double n, gsl_mode_t mode, gsl_sf_result * result) { if(k*k >= 1.0) { DOMAIN_ERROR(result); } /* FIXME: need to handle k ~=~ 1 cancellations */ else { gsl_sf_result rf; gsl_sf_result rj; const double y = 1.0 - k*k; const int rfstatus = gsl_sf_ellint_RF_e(0.0, y, 1.0, mode, &rf); const int rjstatus = gsl_sf_ellint_RJ_e(0.0, y, 1.0, 1.0 + n, mode, &rj); result->val = rf.val - (n/3.0) * rj.val; result->err = rf.err + fabs(n/3.0) * rj.err; return GSL_ERROR_SELECT_2(rfstatus, rjstatus); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_ellint_Kcomp(double k, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_ellint_Kcomp_e(k, mode, &result)); } double gsl_sf_ellint_Ecomp(double k, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_ellint_Ecomp_e(k, mode, &result)); } double gsl_sf_ellint_Pcomp(double k, double n, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_ellint_Pcomp_e(k, n, mode, &result)); } double gsl_sf_ellint_Dcomp(double k, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_ellint_Dcomp_e(k, mode, &result)); } double gsl_sf_ellint_F(double phi, double k, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_ellint_F_e(phi, k, mode, &result)); } double gsl_sf_ellint_E(double phi, double k, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_ellint_E_e(phi, k, mode, &result)); } double gsl_sf_ellint_P(double phi, double k, double n, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_ellint_P_e(phi, k, n, mode, &result)); } double gsl_sf_ellint_D(double phi, double k, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_ellint_D_e(phi, k, mode, &result)); } double gsl_sf_ellint_RC(double x, double y, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_ellint_RC_e(x, y, mode, &result)); } double gsl_sf_ellint_RD(double x, double y, double z, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_ellint_RD_e(x, y, z, mode, &result)); } double gsl_sf_ellint_RF(double x, double y, double z, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_ellint_RF_e(x, y, z, mode, &result)); } double gsl_sf_ellint_RJ(double x, double y, double z, double p, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_ellint_RJ_e(x, y, z, p, mode, &result)); } gsl/specfunc/trig.c0000644000175000017500000004643113536674414012661 0ustar eddedd/* specfunc/trig.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "error.h" #include "chebyshev.h" #include "cheb_eval.c" /* sinh(x) series * double-precision for |x| < 1.0 */ inline static int sinh_series(const double x, double * result) { const double y = x*x; const double c0 = 1.0/6.0; const double c1 = 1.0/120.0; const double c2 = 1.0/5040.0; const double c3 = 1.0/362880.0; const double c4 = 1.0/39916800.0; const double c5 = 1.0/6227020800.0; const double c6 = 1.0/1307674368000.0; const double c7 = 1.0/355687428096000.0; *result = x*(1.0 + y*(c0+y*(c1+y*(c2+y*(c3+y*(c4+y*(c5+y*(c6+y*c7)))))))); return GSL_SUCCESS; } /* cosh(x)-1 series * double-precision for |x| < 1.0 */ inline static int cosh_m1_series(const double x, double * result) { const double y = x*x; const double c0 = 0.5; const double c1 = 1.0/24.0; const double c2 = 1.0/720.0; const double c3 = 1.0/40320.0; const double c4 = 1.0/3628800.0; const double c5 = 1.0/479001600.0; const double c6 = 1.0/87178291200.0; const double c7 = 1.0/20922789888000.0; const double c8 = 1.0/6402373705728000.0; *result = y*(c0+y*(c1+y*(c2+y*(c3+y*(c4+y*(c5+y*(c6+y*(c7+y*c8)))))))); return GSL_SUCCESS; } /* Chebyshev expansion for f(t) = sinc((t+1)/2), -1 < t < 1 */ static double sinc_data[17] = { 1.133648177811747875422, -0.532677564732557348781, -0.068293048346633177859, 0.033403684226353715020, 0.001485679893925747818, -0.000734421305768455295, -0.000016837282388837229, 0.000008359950146618018, 0.000000117382095601192, -0.000000058413665922724, -0.000000000554763755743, 0.000000000276434190426, 0.000000000001895374892, -0.000000000000945237101, -0.000000000000004900690, 0.000000000000002445383, 0.000000000000000009925 }; static cheb_series sinc_cs = { sinc_data, 16, -1, 1, 10 }; /* Chebyshev expansion for f(t) = g((t+1)Pi/8), -1val = x * (1.0 - x2/6.0); result->err = fabs(x*x2*x2 / 100.0); return GSL_SUCCESS; } else { double sgn_result = sgn_x; double y = floor(abs_x/(0.25*M_PI)); int octant = y - ldexp(floor(ldexp(y,-3)),3); int stat_cs; double z; if(GSL_IS_ODD(octant)) { octant += 1; octant &= 07; y += 1.0; } if(octant > 3) { octant -= 4; sgn_result = -sgn_result; } z = ((abs_x - y * P1) - y * P2) - y * P3; if(octant == 0) { gsl_sf_result sin_cs_result; const double t = 8.0*fabs(z)/M_PI - 1.0; stat_cs = cheb_eval_e(&sin_cs, t, &sin_cs_result); result->val = z * (1.0 + z*z * sin_cs_result.val); } else { /* octant == 2 */ gsl_sf_result cos_cs_result; const double t = 8.0*fabs(z)/M_PI - 1.0; stat_cs = cheb_eval_e(&cos_cs, t, &cos_cs_result); result->val = 1.0 - 0.5*z*z * (1.0 - z*z * cos_cs_result.val); } result->val *= sgn_result; if(abs_x > 1.0/GSL_DBL_EPSILON) { result->err = fabs(result->val); } else if(abs_x > 100.0/GSL_SQRT_DBL_EPSILON) { result->err = 2.0 * abs_x * GSL_DBL_EPSILON * fabs(result->val); } else if(abs_x > 0.1/GSL_SQRT_DBL_EPSILON) { result->err = 2.0 * GSL_SQRT_DBL_EPSILON * fabs(result->val); } else { result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); } return stat_cs; } } } int gsl_sf_cos_e(double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ { const double P1 = 7.85398125648498535156e-1; const double P2 = 3.77489470793079817668e-8; const double P3 = 2.69515142907905952645e-15; const double abs_x = fabs(x); if(abs_x < GSL_ROOT4_DBL_EPSILON) { const double x2 = x*x; result->val = 1.0 - 0.5*x2; result->err = fabs(x2*x2/12.0); return GSL_SUCCESS; } else { double sgn_result = 1.0; double y = floor(abs_x/(0.25*M_PI)); int octant = y - ldexp(floor(ldexp(y,-3)),3); int stat_cs; double z; if(GSL_IS_ODD(octant)) { octant += 1; octant &= 07; y += 1.0; } if(octant > 3) { octant -= 4; sgn_result = -sgn_result; } if(octant > 1) { sgn_result = -sgn_result; } z = ((abs_x - y * P1) - y * P2) - y * P3; if(octant == 0) { gsl_sf_result cos_cs_result; const double t = 8.0*fabs(z)/M_PI - 1.0; stat_cs = cheb_eval_e(&cos_cs, t, &cos_cs_result); result->val = 1.0 - 0.5*z*z * (1.0 - z*z * cos_cs_result.val); } else { /* octant == 2 */ gsl_sf_result sin_cs_result; const double t = 8.0*fabs(z)/M_PI - 1.0; stat_cs = cheb_eval_e(&sin_cs, t, &sin_cs_result); result->val = z * (1.0 + z*z * sin_cs_result.val); } result->val *= sgn_result; if(abs_x > 1.0/GSL_DBL_EPSILON) { result->err = fabs(result->val); } else if(abs_x > 100.0/GSL_SQRT_DBL_EPSILON) { result->err = 2.0 * abs_x * GSL_DBL_EPSILON * fabs(result->val); } else if(abs_x > 0.1/GSL_SQRT_DBL_EPSILON) { result->err = 2.0 * GSL_SQRT_DBL_EPSILON * fabs(result->val); } else { result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); } return stat_cs; } } } int gsl_sf_hypot_e(const double x, const double y, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x == 0.0 && y == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else { const double a = fabs(x); const double b = fabs(y); const double min = GSL_MIN_DBL(a,b); const double max = GSL_MAX_DBL(a,b); const double rat = min/max; const double root_term = sqrt(1.0 + rat*rat); if(max < GSL_DBL_MAX/root_term) { result->val = max * root_term; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { OVERFLOW_ERROR(result); } } } int gsl_sf_complex_sin_e(const double zr, const double zi, gsl_sf_result * szr, gsl_sf_result * szi) { /* CHECK_POINTER(szr) */ /* CHECK_POINTER(szi) */ if(fabs(zi) < 1.0) { double ch_m1, sh; sinh_series(zi, &sh); cosh_m1_series(zi, &ch_m1); szr->val = sin(zr)*(ch_m1 + 1.0); szi->val = cos(zr)*sh; szr->err = 2.0 * GSL_DBL_EPSILON * fabs(szr->val); szi->err = 2.0 * GSL_DBL_EPSILON * fabs(szi->val); return GSL_SUCCESS; } else if(fabs(zi) < GSL_LOG_DBL_MAX) { double ex = exp(zi); double ch = 0.5*(ex+1.0/ex); double sh = 0.5*(ex-1.0/ex); szr->val = sin(zr)*ch; szi->val = cos(zr)*sh; szr->err = 2.0 * GSL_DBL_EPSILON * fabs(szr->val); szi->err = 2.0 * GSL_DBL_EPSILON * fabs(szi->val); return GSL_SUCCESS; } else { OVERFLOW_ERROR_2(szr, szi); } } int gsl_sf_complex_cos_e(const double zr, const double zi, gsl_sf_result * czr, gsl_sf_result * czi) { /* CHECK_POINTER(czr) */ /* CHECK_POINTER(czi) */ if(fabs(zi) < 1.0) { double ch_m1, sh; sinh_series(zi, &sh); cosh_m1_series(zi, &ch_m1); czr->val = cos(zr)*(ch_m1 + 1.0); czi->val = -sin(zr)*sh; czr->err = 2.0 * GSL_DBL_EPSILON * fabs(czr->val); czi->err = 2.0 * GSL_DBL_EPSILON * fabs(czi->val); return GSL_SUCCESS; } else if(fabs(zi) < GSL_LOG_DBL_MAX) { double ex = exp(zi); double ch = 0.5*(ex+1.0/ex); double sh = 0.5*(ex-1.0/ex); czr->val = cos(zr)*ch; czi->val = -sin(zr)*sh; czr->err = 2.0 * GSL_DBL_EPSILON * fabs(czr->val); czi->err = 2.0 * GSL_DBL_EPSILON * fabs(czi->val); return GSL_SUCCESS; } else { OVERFLOW_ERROR_2(czr,czi); } } int gsl_sf_complex_logsin_e(const double zr, const double zi, gsl_sf_result * lszr, gsl_sf_result * lszi) { /* CHECK_POINTER(lszr) */ /* CHECK_POINTER(lszi) */ if(zi > 60.0) { lszr->val = -M_LN2 + zi; lszi->val = 0.5*M_PI - zr; lszr->err = 2.0 * GSL_DBL_EPSILON * fabs(lszr->val); lszi->err = 2.0 * GSL_DBL_EPSILON * fabs(lszi->val); } else if(zi < -60.0) { lszr->val = -M_LN2 - zi; lszi->val = -0.5*M_PI + zr; lszr->err = 2.0 * GSL_DBL_EPSILON * fabs(lszr->val); lszi->err = 2.0 * GSL_DBL_EPSILON * fabs(lszi->val); } else { gsl_sf_result sin_r, sin_i; int status; gsl_sf_complex_sin_e(zr, zi, &sin_r, &sin_i); /* ok by construction */ status = gsl_sf_complex_log_e(sin_r.val, sin_i.val, lszr, lszi); if(status == GSL_EDOM) { DOMAIN_ERROR_2(lszr, lszi); } } return gsl_sf_angle_restrict_symm_e(&(lszi->val)); } int gsl_sf_lnsinh_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x <= 0.0) { DOMAIN_ERROR(result); } else if(fabs(x) < 1.0) { double eps; sinh_series(x, &eps); result->val = log(eps); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < -0.5*GSL_LOG_DBL_EPSILON) { result->val = x + log(0.5*(1.0 - exp(-2.0*x))); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { result->val = -M_LN2 + x; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_lncosh_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(fabs(x) < 1.0) { double eps; cosh_m1_series(x, &eps); return gsl_sf_log_1plusx_e(eps, result); } else if(fabs(x) < -0.5*GSL_LOG_DBL_EPSILON) { result->val = fabs(x) + log(0.5*(1.0 + exp(-2.0*fabs(x)))); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { result->val = -M_LN2 + fabs(x); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } /* inline int gsl_sf_sincos_e(const double theta, double * s, double * c) { double tan_half = tan(0.5 * theta); double den = 1. + tan_half*tan_half; double cos_theta = (1.0 - tan_half*tan_half) / den; double sin_theta = 2.0 * tan_half / den; } */ int gsl_sf_polar_to_rect(const double r, const double theta, gsl_sf_result * x, gsl_sf_result * y) { double t = theta; int status = gsl_sf_angle_restrict_symm_e(&t); double c = cos(t); double s = sin(t); x->val = r * cos(t); y->val = r * sin(t); x->err = r * fabs(s * GSL_DBL_EPSILON * t); x->err += 2.0 * GSL_DBL_EPSILON * fabs(x->val); y->err = r * fabs(c * GSL_DBL_EPSILON * t); y->err += 2.0 * GSL_DBL_EPSILON * fabs(y->val); return status; } int gsl_sf_rect_to_polar(const double x, const double y, gsl_sf_result * r, gsl_sf_result * theta) { int stat_h = gsl_sf_hypot_e(x, y, r); if(r->val > 0.0) { theta->val = atan2(y, x); theta->err = 2.0 * GSL_DBL_EPSILON * fabs(theta->val); return stat_h; } else { DOMAIN_ERROR(theta); } } int gsl_sf_angle_restrict_symm_err_e(const double theta, gsl_sf_result * result) { /* synthetic extended precision constants */ const double P1 = 4 * 7.8539812564849853515625e-01; const double P2 = 4 * 3.7748947079307981766760e-08; const double P3 = 4 * 2.6951514290790594840552e-15; const double TwoPi = 2*(P1 + P2 + P3); const double y = GSL_SIGN(theta) * 2 * floor(fabs(theta)/TwoPi); double r = ((theta - y*P1) - y*P2) - y*P3; if(r > M_PI) { r = (((r-2*P1)-2*P2)-2*P3); } /* r-TwoPi */ else if (r < -M_PI) r = (((r+2*P1)+2*P2)+2*P3); /* r+TwoPi */ result->val = r; if(fabs(theta) > 0.0625/GSL_DBL_EPSILON) { result->val = GSL_NAN; result->err = GSL_NAN; GSL_ERROR ("error", GSL_ELOSS); } else if(fabs(theta) > 0.0625/GSL_SQRT_DBL_EPSILON) { result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val - theta); return GSL_SUCCESS; } else { double delta = fabs(result->val - theta); result->err = 2.0 * GSL_DBL_EPSILON * ((delta < M_PI) ? delta : M_PI); return GSL_SUCCESS; } } int gsl_sf_angle_restrict_pos_err_e(const double theta, gsl_sf_result * result) { /* synthetic extended precision constants */ const double P1 = 4 * 7.85398125648498535156e-01; const double P2 = 4 * 3.77489470793079817668e-08; const double P3 = 4 * 2.69515142907905952645e-15; const double TwoPi = 2*(P1 + P2 + P3); const double y = 2*floor(theta/TwoPi); double r = ((theta - y*P1) - y*P2) - y*P3; if(r > TwoPi) {r = (((r-2*P1)-2*P2)-2*P3); } /* r-TwoPi */ else if (r < 0) { /* may happen due to FP rounding */ r = (((r+2*P1)+2*P2)+2*P3); /* r+TwoPi */ } result->val = r; if(fabs(theta) > 0.0625/GSL_DBL_EPSILON) { result->val = GSL_NAN; result->err = fabs(result->val); GSL_ERROR ("error", GSL_ELOSS); } else if(fabs(theta) > 0.0625/GSL_SQRT_DBL_EPSILON) { result->err = GSL_DBL_EPSILON * fabs(result->val - theta); return GSL_SUCCESS; } else { double delta = fabs(result->val - theta); result->err = 2.0 * GSL_DBL_EPSILON * ((delta < M_PI) ? delta : M_PI); return GSL_SUCCESS; } } int gsl_sf_angle_restrict_symm_e(double * theta) { gsl_sf_result r; int stat = gsl_sf_angle_restrict_symm_err_e(*theta, &r); *theta = r.val; return stat; } int gsl_sf_angle_restrict_pos_e(double * theta) { gsl_sf_result r; int stat = gsl_sf_angle_restrict_pos_err_e(*theta, &r); *theta = r.val; return stat; } int gsl_sf_sin_err_e(const double x, const double dx, gsl_sf_result * result) { int stat_s = gsl_sf_sin_e(x, result); result->err += fabs(cos(x) * dx); result->err += GSL_DBL_EPSILON * fabs(result->val); return stat_s; } int gsl_sf_cos_err_e(const double x, const double dx, gsl_sf_result * result) { int stat_c = gsl_sf_cos_e(x, result); result->err += fabs(sin(x) * dx); result->err += GSL_DBL_EPSILON * fabs(result->val); return stat_c; } #if 0 int gsl_sf_sin_pi_x_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(-100.0 < x && x < 100.0) { result->val = sin(M_PI * x) / (M_PI * x); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double N = floor(x + 0.5); const double f = x - N; if(N < INT_MAX && N > INT_MIN) { /* Make it an integer if we can. Saves another * call to floor(). */ const int intN = (int)N; const double sign = ( GSL_IS_ODD(intN) ? -1.0 : 1.0 ); result->val = sign * sin(M_PI * f); result->err = GSL_DBL_EPSILON * fabs(result->val); } else if(N > 2.0/GSL_DBL_EPSILON || N < -2.0/GSL_DBL_EPSILON) { /* All integer-valued floating point numbers * bigger than 2/eps=2^53 are actually even. */ result->val = 0.0; result->err = 0.0; } else { const double resN = N - 2.0*floor(0.5*N); /* 0 for even N, 1 for odd N */ const double sign = ( fabs(resN) > 0.5 ? -1.0 : 1.0 ); result->val = sign * sin(M_PI*f); result->err = GSL_DBL_EPSILON * fabs(result->val); } return GSL_SUCCESS; } } #endif int gsl_sf_sinc_e(double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ { const double ax = fabs(x); if(ax < 0.8) { /* Do not go to the limit of the fit since * there is a zero there and the Chebyshev * accuracy will go to zero. */ return cheb_eval_e(&sinc_cs, 2.0*ax-1.0, result); } else if(ax < 100.0) { /* Small arguments are no problem. * We trust the library sin() to * roughly machine precision. */ result->val = sin(M_PI * ax)/(M_PI * ax); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { /* Large arguments must be handled separately. */ const double r = M_PI*ax; gsl_sf_result s; int stat_s = gsl_sf_sin_e(r, &s); result->val = s.val/r; result->err = s.err/r + 2.0 * GSL_DBL_EPSILON * fabs(result->val); return stat_s; } } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_sin(const double x) { EVAL_RESULT(gsl_sf_sin_e(x, &result)); } double gsl_sf_cos(const double x) { EVAL_RESULT(gsl_sf_cos_e(x, &result)); } double gsl_sf_hypot(const double x, const double y) { EVAL_RESULT(gsl_sf_hypot_e(x, y, &result)); } double gsl_sf_lnsinh(const double x) { EVAL_RESULT(gsl_sf_lnsinh_e(x, &result)); } double gsl_sf_lncosh(const double x) { EVAL_RESULT(gsl_sf_lncosh_e(x, &result)); } double gsl_sf_angle_restrict_symm(const double theta) { double result = theta; EVAL_DOUBLE(gsl_sf_angle_restrict_symm_e(&result)); } double gsl_sf_angle_restrict_pos(const double theta) { double result = theta; EVAL_DOUBLE(gsl_sf_angle_restrict_pos_e(&result)); } #if 0 double gsl_sf_sin_pi_x(const double x) { EVAL_RESULT(gsl_sf_sin_pi_x_e(x, &result)); } #endif double gsl_sf_sinc(const double x) { EVAL_RESULT(gsl_sf_sinc_e(x, &result)); } gsl/specfunc/bessel_j.c0000644000175000017500000002563013536674414013500 0ustar eddedd/* specfunc/bessel_j.c * * Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include "error.h" #include "bessel.h" #include "bessel_olver.h" /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_j0_e(const double x, gsl_sf_result * result) { double ax = fabs(x); /* CHECK_POINTER(result) */ if(ax < 0.5) { const double y = x*x; const double c1 = -1.0/6.0; const double c2 = 1.0/120.0; const double c3 = -1.0/5040.0; const double c4 = 1.0/362880.0; const double c5 = -1.0/39916800.0; const double c6 = 1.0/6227020800.0; result->val = 1.0 + y*(c1 + y*(c2 + y*(c3 + y*(c4 + y*(c5 + y*c6))))); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { result->val = sin(x) / x; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_bessel_j1_e(const double x, gsl_sf_result * result) { double ax = fabs(x); /* CHECK_POINTER(result) */ if(x == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(ax < 3.1*GSL_DBL_MIN) { UNDERFLOW_ERROR(result); } else if(ax < 0.25) { const double y = x*x; const double c1 = -1.0/10.0; const double c2 = 1.0/280.0; const double c3 = -1.0/15120.0; const double c4 = 1.0/1330560.0; const double c5 = -1.0/172972800.0; const double sum = 1.0 + y*(c1 + y*(c2 + y*(c3 + y*(c4 + y*c5)))); result->val = x/3.0 * sum; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double cos_x = cos(x); const double sin_x = sin(x); result->val = (sin_x/x - cos_x)/x; result->err = 2.0 * GSL_DBL_EPSILON * (fabs(sin_x/(x*x)) + fabs(cos_x/x)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_bessel_j2_e(const double x, gsl_sf_result * result) { double ax = fabs(x); /* CHECK_POINTER(result) */ if(x == 0.0) { result->val = 0.0; result->err = 0.0; return GSL_SUCCESS; } else if(ax < 4.0*GSL_SQRT_DBL_MIN) { UNDERFLOW_ERROR(result); } else if(ax < 1.3) { const double y = x*x; const double c1 = -1.0/14.0; const double c2 = 1.0/504.0; const double c3 = -1.0/33264.0; const double c4 = 1.0/3459456.0; const double c5 = -1.0/518918400; const double c6 = 1.0/105859353600.0; const double c7 = -1.0/28158588057600.0; const double c8 = 1.0/9461285587353600.0; const double c9 = -1.0/3916972233164390400.0; const double sum = 1.0+y*(c1+y*(c2+y*(c3+y*(c4+y*(c5+y*(c6+y*(c7+y*(c8+y*c9)))))))); result->val = y/15.0 * sum; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { /* bug #45730: switch from gsl_sf_{cos,sin} to cos/sin to fix large inputs */ #if 0 gsl_sf_result cos_result; gsl_sf_result sin_result; const int stat_cos = gsl_sf_cos_e(x, &cos_result); const int stat_sin = gsl_sf_sin_e(x, &sin_result); const double cos_x = cos_result.val; const double sin_x = sin_result.val; const double f = (3.0/(x*x) - 1.0); result->val = (f * sin_x - 3.0*cos_x/x)/x; result->err = fabs(f * sin_result.err/x) + fabs((3.0*cos_result.err/x)/x); result->err += 2.0 * GSL_DBL_EPSILON * (fabs(f*sin_x/x) + 3.0*fabs(cos_x/(x*x))); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_cos, stat_sin); #else const double cos_x = cos(x); const double sin_x = sin(x); const double f = (3.0/(x*x) - 1.0); result->val = (f * sin_x - 3.0*cos_x/x)/x; result->err = 2.0 * GSL_DBL_EPSILON * (fabs(f*sin_x/x) + 3.0*fabs(cos_x/(x*x))); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); /*return GSL_ERROR_SELECT_2(stat_cos, stat_sin);*/ return GSL_SUCCESS; #endif } } int gsl_sf_bessel_jl_e(const int l, const double x, gsl_sf_result * result) { if(l < 0 || x < 0.0) { DOMAIN_ERROR(result); } else if(x == 0.0) { result->val = ( l > 0 ? 0.0 : 1.0 ); result->err = 0.0; return GSL_SUCCESS; } else if(l == 0) { return gsl_sf_bessel_j0_e(x, result); } else if(l == 1) { return gsl_sf_bessel_j1_e(x, result); } else if(l == 2) { return gsl_sf_bessel_j2_e(x, result); } else if(x*x < 10.0*(l+0.5)/M_E) { gsl_sf_result b; int status = gsl_sf_bessel_IJ_taylor_e(l+0.5, x, -1, 50, GSL_DBL_EPSILON, &b); double pre = sqrt((0.5*M_PI)/x); result->val = pre * b.val; result->err = pre * b.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return status; } else if(GSL_ROOT4_DBL_EPSILON * x > (l*l + l + 1.0)) { gsl_sf_result b; int status = gsl_sf_bessel_Jnu_asympx_e(l + 0.5, x, &b); double pre = sqrt((0.5*M_PI)/x); result->val = pre * b.val; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val) + pre * b.err; return status; } else if(l > 1.0/GSL_ROOT6_DBL_EPSILON) { gsl_sf_result b; int status = gsl_sf_bessel_Jnu_asymp_Olver_e(l + 0.5, x, &b); double pre = sqrt((0.5*M_PI)/x); result->val = pre * b.val; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val) + pre * b.err; return status; } else if(x > 1000.0 && x > l*l) { /* We need this path to avoid feeding large x to CF1 below; */ gsl_sf_result b; int status = gsl_sf_bessel_Jnu_asympx_e(l + 0.5, x, &b); double pre = sqrt((0.5*M_PI)/x); result->val = pre * b.val; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val) + pre * b.err; return status; } else { double sgn; double ratio; /* The CF1 call will hit 10000 iterations for x > 10000 + l */ int stat_CF1 = gsl_sf_bessel_J_CF1(l+0.5, x, &ratio, &sgn); const double BESSEL_J_SMALL = GSL_DBL_MIN / GSL_DBL_EPSILON; double jellp1 = BESSEL_J_SMALL * ratio; double jell = BESSEL_J_SMALL; double jellm1; int ell; for(ell = l; ell > 0; ell--) { jellm1 = -jellp1 + (2*ell + 1)/x * jell; jellp1 = jell; jell = jellm1; } if(fabs(jell) > fabs(jellp1)) { gsl_sf_result j0_result; int stat_j0 = gsl_sf_bessel_j0_e(x, &j0_result); double pre = BESSEL_J_SMALL / jell; result->val = j0_result.val * pre; result->err = j0_result.err * fabs(pre); result->err += 4.0 * GSL_DBL_EPSILON * (0.5*l + 1.0) * fabs(result->val); return GSL_ERROR_SELECT_2(stat_j0, stat_CF1); } else { gsl_sf_result j1_result; int stat_j1 = gsl_sf_bessel_j1_e(x, &j1_result); double pre = BESSEL_J_SMALL / jellp1; result->val = j1_result.val * pre; result->err = j1_result.err * fabs(pre); result->err += 4.0 * GSL_DBL_EPSILON * (0.5*l + 1.0) * fabs(result->val); return GSL_ERROR_SELECT_2(stat_j1, stat_CF1); } } } int gsl_sf_bessel_jl_array(const int lmax, const double x, double * result_array) { /* CHECK_POINTER(result_array) */ if(lmax < 0 || x < 0.0) { int j; for(j=0; j<=lmax; j++) result_array[j] = 0.0; GSL_ERROR ("error", GSL_EDOM); } else if(x == 0.0) { int j; for(j=1; j<=lmax; j++) result_array[j] = 0.0; result_array[0] = 1.0; return GSL_SUCCESS; } else { gsl_sf_result r_jellp1; gsl_sf_result r_jell; int stat_0 = gsl_sf_bessel_jl_e(lmax+1, x, &r_jellp1); int stat_1 = gsl_sf_bessel_jl_e(lmax, x, &r_jell); double jellp1 = r_jellp1.val; double jell = r_jell.val; double jellm1; int ell; result_array[lmax] = jell; for(ell = lmax; ell >= 1; ell--) { jellm1 = -jellp1 + (2*ell + 1)/x * jell; jellp1 = jell; jell = jellm1; result_array[ell-1] = jellm1; } return GSL_ERROR_SELECT_2(stat_0, stat_1); } } int gsl_sf_bessel_jl_steed_array(const int lmax, const double x, double * jl_x) { /* CHECK_POINTER(jl_x) */ if(lmax < 0 || x < 0.0) { int j; for(j=0; j<=lmax; j++) jl_x[j] = 0.0; GSL_ERROR ("error", GSL_EDOM); } else if(x == 0.0) { int j; for(j=1; j<=lmax; j++) jl_x[j] = 0.0; jl_x[0] = 1.0; return GSL_SUCCESS; } else if(x < 2.0*GSL_ROOT4_DBL_EPSILON) { /* first two terms of Taylor series */ double inv_fact = 1.0; /* 1/(1 3 5 ... (2l+1)) */ double x_l = 1.0; /* x^l */ int l; for(l=0; l<=lmax; l++) { jl_x[l] = x_l * inv_fact; jl_x[l] *= 1.0 - 0.5*x*x/(2.0*l+3.0); inv_fact /= 2.0*l+3.0; x_l *= x; } return GSL_SUCCESS; } else { /* Steed/Barnett algorithm [Comp. Phys. Comm. 21, 297 (1981)] */ double x_inv = 1.0/x; double W = 2.0*x_inv; double F = 1.0; double FP = (lmax+1.0) * x_inv; double B = 2.0*FP + x_inv; double end = B + 20000.0*W; double D = 1.0/B; double del = -D; FP += del; /* continued fraction */ do { B += W; D = 1.0/(B-D); del *= (B*D - 1.); FP += del; if(D < 0.0) F = -F; if(B > end) { GSL_ERROR ("error", GSL_EMAXITER); } } while(fabs(del) >= fabs(FP) * GSL_DBL_EPSILON); FP *= F; if(lmax > 0) { /* downward recursion */ double XP2 = FP; double PL = lmax * x_inv; int L = lmax; int LP; jl_x[lmax] = F; for(LP = 1; LP<=lmax; LP++) { jl_x[L-1] = PL * jl_x[L] + XP2; FP = PL*jl_x[L-1] - jl_x[L]; XP2 = FP; PL -= x_inv; --L; } F = jl_x[0]; } /* normalization */ W = x_inv / hypot(FP, F); jl_x[0] = W*F; if(lmax > 0) { int L; for(L=1; L<=lmax; L++) { jl_x[L] *= W; } } return GSL_SUCCESS; } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_bessel_j0(const double x) { EVAL_RESULT(gsl_sf_bessel_j0_e(x, &result)); } double gsl_sf_bessel_j1(const double x) { EVAL_RESULT(gsl_sf_bessel_j1_e(x, &result)); } double gsl_sf_bessel_j2(const double x) { EVAL_RESULT(gsl_sf_bessel_j2_e(x, &result)); } double gsl_sf_bessel_jl(const int l, const double x) { EVAL_RESULT(gsl_sf_bessel_jl_e(l, x, &result)); } gsl/specfunc/hyperg.h0000644000175000017500000000433613536674414013215 0ustar eddedd/* specfunc/hyperg.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ /* Miscellaneous implementations of use * for evaluation of hypergeometric functions. */ #ifndef _HYPERG_H_ #define _HYPERG_H_ #include /* Direct implementation of 1F1 series. */ int gsl_sf_hyperg_1F1_series_e(const double a, const double b, const double x, gsl_sf_result * result); /* Implementation of the 1F1 related to the * incomplete gamma function: 1F1(1,b,x), b >= 1. */ int gsl_sf_hyperg_1F1_1_e(double b, double x, gsl_sf_result * result); /* 1F1(1,b,x) for integer b >= 1 */ int gsl_sf_hyperg_1F1_1_int_e(int b, double x, gsl_sf_result * result); /* Implementation of large b asymptotic. * [Bateman v. I, 6.13.3 (18)] * [Luke, The Special Functions and Their Approximations v. I, p. 129, 4.8 (4)] * * a^2 << b, |x|/|b| < 1 - delta */ int gsl_sf_hyperg_1F1_large_b_e(const double a, const double b, const double x, gsl_sf_result * result); /* Implementation of large b asymptotic. * * Assumes a > 0 is small, x > 0, and |x|<|b|. */ int gsl_sf_hyperg_U_large_b_e(const double a, const double b, const double x, gsl_sf_result * result, double * ln_multiplier ); /* Implementation of 2F0 asymptotic series. */ int gsl_sf_hyperg_2F0_series_e(const double a, const double b, const double x, int n_trunc, gsl_sf_result * result); #endif /* !_HYPERG_H_ */ gsl/specfunc/gegenbauer.c0000644000175000017500000001160013536674414014006 0ustar eddedd/* specfunc/gegenbauer.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "error.h" /* See: [Thompson, Atlas for Computing Mathematical Functions] */ int gsl_sf_gegenpoly_1_e(double lambda, double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(lambda == 0.0) { result->val = 2.0*x; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { result->val = 2.0*lambda*x; result->err = 4.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_gegenpoly_2_e(double lambda, double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(lambda == 0.0) { const double txx = 2.0*x*x; result->val = -1.0 + txx; result->err = 2.0 * GSL_DBL_EPSILON * fabs(txx); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { result->val = lambda*(-1.0 + 2.0*(1.0+lambda)*x*x); result->err = GSL_DBL_EPSILON * (2.0 * fabs(result->val) + fabs(lambda)); return GSL_SUCCESS; } } int gsl_sf_gegenpoly_3_e(double lambda, double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(lambda == 0.0) { result->val = x*(-2.0 + 4.0/3.0*x*x); result->err = GSL_DBL_EPSILON * (2.0 * fabs(result->val) + fabs(x)); return GSL_SUCCESS; } else { double c = 4.0 + lambda*(6.0 + 2.0*lambda); result->val = 2.0*lambda * x * ( -1.0 - lambda + c*x*x/3.0 ); result->err = GSL_DBL_EPSILON * (2.0 * fabs(result->val) + fabs(lambda * x)); return GSL_SUCCESS; } } int gsl_sf_gegenpoly_n_e(int n, double lambda, double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(lambda <= -0.5 || n < 0) { DOMAIN_ERROR(result); } else if(n == 0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(n == 1) { return gsl_sf_gegenpoly_1_e(lambda, x, result); } else if(n == 2) { return gsl_sf_gegenpoly_2_e(lambda, x, result); } else if(n == 3) { return gsl_sf_gegenpoly_3_e(lambda, x, result); } else { if(lambda == 0.0 && (x >= -1.0 && x <= 1.0)) { /* 2 T_n(x)/n */ const double z = n * acos(x); result->val = 2.0 * cos(z) / n; result->err = 2.0 * GSL_DBL_EPSILON * fabs(z * result->val); return GSL_SUCCESS; } else { int k; gsl_sf_result g2; gsl_sf_result g3; int stat_g2 = gsl_sf_gegenpoly_2_e(lambda, x, &g2); int stat_g3 = gsl_sf_gegenpoly_3_e(lambda, x, &g3); int stat_g = GSL_ERROR_SELECT_2(stat_g2, stat_g3); double gkm2 = g2.val; double gkm1 = g3.val; double gk = 0.0; for(k=4; k<=n; k++) { gk = (2.0*(k+lambda-1.0)*x*gkm1 - (k+2.0*lambda-2.0)*gkm2) / k; gkm2 = gkm1; gkm1 = gk; } result->val = gk; result->err = 2.0 * GSL_DBL_EPSILON * 0.5 * n * fabs(gk); return stat_g; } } } int gsl_sf_gegenpoly_array(int nmax, double lambda, double x, double * result_array) { int k; /* CHECK_POINTER(result_array) */ if(lambda <= -0.5 || nmax < 0) { GSL_ERROR("domain error", GSL_EDOM); } /* n == 0 */ result_array[0] = 1.0; if(nmax == 0) return GSL_SUCCESS; /* n == 1 */ if(lambda == 0.0) result_array[1] = 2.0*x; else result_array[1] = 2.0*lambda*x; /* n <= nmax */ for(k=2; k<=nmax; k++) { double term1 = 2.0*(k+lambda-1.0) * x * result_array[k-1]; double term2 = (k+2.0*lambda-2.0) * result_array[k-2]; result_array[k] = (term1 - term2) / k; } return GSL_SUCCESS; } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_gegenpoly_1(double lambda, double x) { EVAL_RESULT(gsl_sf_gegenpoly_1_e(lambda, x, &result)); } double gsl_sf_gegenpoly_2(double lambda, double x) { EVAL_RESULT(gsl_sf_gegenpoly_2_e(lambda, x, &result)); } double gsl_sf_gegenpoly_3(double lambda, double x) { EVAL_RESULT(gsl_sf_gegenpoly_3_e(lambda, x, &result)); } double gsl_sf_gegenpoly_n(int n, double lambda, double x) { EVAL_RESULT(gsl_sf_gegenpoly_n_e(n, lambda, x, &result)); } gsl/specfunc/laguerre.c0000644000175000017500000002331513536675317013521 0ustar eddedd/* specfunc/laguerre.c * * Copyright (C) 2007 Brian Gough * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include "error.h" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* based on the large 2b-4a asymptotic for 1F1 * [Abramowitz+Stegun, 13.5.21] * L^a_n(x) = (a+1)_n / n! 1F1(-n,a+1,x) * * The second term (ser_term2) is from Slater,"The Confluent * Hypergeometric Function" p.73. I think there may be an error in * the first term of the expression given there, comparing with AS * 13.5.21 (cf sin(a\pi+\Theta) vs sin(a\pi) + sin(\Theta)) - but the * second term appears correct. * */ static int laguerre_large_n(const int n, const double alpha, const double x, gsl_sf_result * result) { const double a = -n; const double b = alpha + 1.0; const double eta = 2.0*b - 4.0*a; const double cos2th = x/eta; const double sin2th = 1.0 - cos2th; const double eps = asin(sqrt(cos2th)); /* theta = pi/2 - eps */ const double pre_h = 0.25*M_PI*M_PI*eta*eta*cos2th*sin2th; gsl_sf_result lg_b; gsl_sf_result lnfact; int stat_lg = gsl_sf_lngamma_e(b+n, &lg_b); int stat_lf = gsl_sf_lnfact_e(n, &lnfact); double pre_term1 = 0.5*(1.0-b)*log(0.25*x*eta); double pre_term2 = 0.25*log(pre_h); double lnpre_val = lg_b.val - lnfact.val + 0.5*x + pre_term1 - pre_term2; double lnpre_err = lg_b.err + lnfact.err + GSL_DBL_EPSILON * (fabs(pre_term1)+fabs(pre_term2)); double phi1 = 0.25*eta*(2*eps + sin(2.0*eps)); double ser_term1 = -sin(phi1); double A1 = (1.0/12.0)*(5.0/(4.0*sin2th)+(3.0*b*b-6.0*b+2.0)*sin2th - 1.0); double ser_term2 = -A1 * cos(phi1)/(0.25*eta*sin(2.0*eps)); double ser_val = ser_term1 + ser_term2; double ser_err = ser_term2*ser_term2 + GSL_DBL_EPSILON * (fabs(ser_term1) + fabs(ser_term2)); int stat_e = gsl_sf_exp_mult_err_e(lnpre_val, lnpre_err, ser_val, ser_err, result); result->err += 2.0 * GSL_SQRT_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_3(stat_e, stat_lf, stat_lg); } /* Evaluate polynomial based on confluent hypergeometric representation. * * L^a_n(x) = (a+1)_n / n! 1F1(-n,a+1,x) * * assumes n > 0 and a != negative integer greater than -n */ static int laguerre_n_cp(const int n, const double a, const double x, gsl_sf_result * result) { gsl_sf_result lnfact; gsl_sf_result lg1; gsl_sf_result lg2; double s1, s2; int stat_f = gsl_sf_lnfact_e(n, &lnfact); int stat_g1 = gsl_sf_lngamma_sgn_e(a+1.0+n, &lg1, &s1); int stat_g2 = gsl_sf_lngamma_sgn_e(a+1.0, &lg2, &s2); double poly_1F1_val = 1.0; double poly_1F1_err = 0.0; int stat_e; int k; double lnpre_val = (lg1.val - lg2.val) - lnfact.val; double lnpre_err = lg1.err + lg2.err + lnfact.err + 2.0 * GSL_DBL_EPSILON * fabs(lnpre_val); for(k=n-1; k>=0; k--) { double t = (-n+k)/(a+1.0+k) * (x/(k+1)); double r = t + 1.0/poly_1F1_val; if(r > 0.9*GSL_DBL_MAX/poly_1F1_val) { /* internal error only, don't call the error handler */ INTERNAL_OVERFLOW_ERROR(result); } else { /* Collect the Horner terms. */ poly_1F1_val = 1.0 + t * poly_1F1_val; poly_1F1_err += GSL_DBL_EPSILON + fabs(t) * poly_1F1_err; } } stat_e = gsl_sf_exp_mult_err_e(lnpre_val, lnpre_err, poly_1F1_val, poly_1F1_err, result); return GSL_ERROR_SELECT_4(stat_e, stat_f, stat_g1, stat_g2); } /* Evaluate the polynomial based on the confluent hypergeometric * function in a safe way, with no restriction on the arguments. * * assumes x != 0 */ static int laguerre_n_poly_safe(const int n, const double a, const double x, gsl_sf_result * result) { const double b = a + 1.0; const double mx = -x; const double tc_sgn = (x < 0.0 ? 1.0 : (GSL_IS_ODD(n) ? -1.0 : 1.0)); gsl_sf_result tc; int stat_tc = gsl_sf_taylorcoeff_e(n, fabs(x), &tc); if(stat_tc == GSL_SUCCESS) { double term = tc.val * tc_sgn; double sum_val = term; double sum_err = tc.err; int k; for(k=n-1; k>=0; k--) { term *= ((b+k)/(n-k))*(k+1.0)/mx; sum_val += term; sum_err += 4.0 * GSL_DBL_EPSILON * fabs(term); } result->val = sum_val; result->err = sum_err + 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(stat_tc == GSL_EOVRFLW) { result->val = 0.0; /* FIXME: should be Inf */ result->err = 0.0; return stat_tc; } else { result->val = 0.0; result->err = 0.0; return stat_tc; } } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_laguerre_1_e(const double a, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ { result->val = 1.0 + a - x; result->err = 2.0 * GSL_DBL_EPSILON * (1.0 + fabs(a) + fabs(x)); return GSL_SUCCESS; } } int gsl_sf_laguerre_2_e(const double a, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(a == -2.0) { result->val = 0.5*x*x; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { double c0 = 0.5 * (2.0+a)*(1.0+a); double c1 = -(2.0+a); double c2 = -0.5/(2.0+a); result->val = c0 + c1*x*(1.0 + c2*x); result->err = 2.0 * GSL_DBL_EPSILON * (fabs(c0) + 2.0 * fabs(c1*x) * (1.0 + 2.0 * fabs(c2*x))); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_laguerre_3_e(const double a, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(a == -2.0) { double x2_6 = x*x/6.0; result->val = x2_6 * (3.0 - x); result->err = x2_6 * (3.0 + fabs(x)) * 2.0 * GSL_DBL_EPSILON; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(a == -3.0) { result->val = -x*x/6.0; result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { double c0 = (3.0+a)*(2.0+a)*(1.0+a) / 6.0; double c1 = -c0 * 3.0 / (1.0+a); double c2 = -1.0/(2.0+a); double c3 = -1.0/(3.0*(3.0+a)); result->val = c0 + c1*x*(1.0 + c2*x*(1.0 + c3*x)); result->err = 1.0 + 2.0 * fabs(c3*x); result->err = 1.0 + 2.0 * fabs(c2*x) * result->err; result->err = 2.0 * GSL_DBL_EPSILON * (fabs(c0) + 2.0 * fabs(c1*x) * result->err); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_laguerre_n_e(const int n, const double a, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(n < 0) { DOMAIN_ERROR(result); } else if(n == 0) { result->val = 1.0; result->err = 0.0; return GSL_SUCCESS; } else if(n == 1) { result->val = 1.0 + a - x; result->err = 2.0 * GSL_DBL_EPSILON * (1.0 + fabs(a) + fabs(x)); return GSL_SUCCESS; } else if(x == 0.0) { double product = a + 1.0; int k; for(k=2; k<=n; k++) { product *= (a + k)/k; } result->val = product; result->err = 2.0 * (n + 1.0) * GSL_DBL_EPSILON * fabs(product) + GSL_DBL_EPSILON; return GSL_SUCCESS; } else if(x < 0.0 && a > -1.0) { /* In this case all the terms in the polynomial * are of the same sign. Note that this also * catches overflows correctly. */ return laguerre_n_cp(n, a, x, result); } else if(n < 5 || (x > 0.0 && a < -n-1)) { /* Either the polynomial will not lose too much accuracy * or all the terms are negative. In any case, * the error estimate here is good. We try both * explicit summation methods, as they have different * characteristics. One may underflow/overflow while the * other does not. */ if(laguerre_n_cp(n, a, x, result) == GSL_SUCCESS) return GSL_SUCCESS; else return laguerre_n_poly_safe(n, a, x, result); } else if(n > 1.0e+07 && x > 0.0 && a > -1.0 && x < 2.0*(a+1.0)+4.0*n) { return laguerre_large_n(n, a, x, result); } else if(a >= 0.0 || (x > 0.0 && a < -n-1)) { gsl_sf_result lg2; int stat_lg2 = gsl_sf_laguerre_2_e(a, x, &lg2); double Lkm1 = 1.0 + a - x; double Lk = lg2.val; double Lkp1; int k; for(k=2; kval = Lk; result->err = (fabs(lg2.err/lg2.val) + GSL_DBL_EPSILON) * n * fabs(Lk); return stat_lg2; } else { /* Despair... or magic? */ return laguerre_n_poly_safe(n, a, x, result); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_laguerre_1(double a, double x) { EVAL_RESULT(gsl_sf_laguerre_1_e(a, x, &result)); } double gsl_sf_laguerre_2(double a, double x) { EVAL_RESULT(gsl_sf_laguerre_2_e(a, x, &result)); } double gsl_sf_laguerre_3(double a, double x) { EVAL_RESULT(gsl_sf_laguerre_3_e(a, x, &result)); } double gsl_sf_laguerre_n(int n, double a, double x) { EVAL_RESULT(gsl_sf_laguerre_n_e(n, a, x, &result)); } gsl/specfunc/dawson.c0000644000175000017500000002343413536674414013205 0ustar eddedd/* specfunc/dawson.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "error.h" #include "chebyshev.h" #include "cheb_eval.c" /* Based on ddaws.f, Fullerton, W., (LANL) */ /* Chebyshev expansions Series for DAW on the interval 0. to 1.00000E+00 with weighted error 8.95E-32 log weighted error 31.05 significant figures required 30.41 decimal places required 31.71 Series for DAW2 on the interval 0. to 1.60000E+01 with weighted error 1.61E-32 log weighted error 31.79 significant figures required 31.40 decimal places required 32.62 Series for DAWA on the interval 0. to 6.25000E-02 with weighted error 1.97E-32 log weighted error 31.71 significant figures required 29.79 decimal places required 32.64 */ static double daw_data[21] = { -0.6351734375145949201065127736293e-02, -0.2294071479677386939899824125866e+00, 0.2213050093908476441683979161786e-01, -0.1549265453892985046743057753375e-02, 0.8497327715684917456777542948066e-04, -0.3828266270972014924994099521309e-05, 0.1462854806250163197757148949539e-06, -0.4851982381825991798846715425114e-08, 0.1421463577759139790347568183304e-09, -0.3728836087920596525335493054088e-11, 0.8854942961778203370194565231369e-13, -0.1920757131350206355421648417493e-14, 0.3834325867246327588241074439253e-16, -0.7089154168175881633584099327999e-18, 0.1220552135889457674416901120000e-19, -0.1966204826605348760299451733333e-21, 0.2975845541376597189113173333333e-23, -0.4247069514800596951039999999999e-25, 0.5734270767391742798506666666666e-27, -0.7345836823178450261333333333333e-29, 0.8951937667516552533333333333333e-31 }; static cheb_series daw_cs = { daw_data, 15, /* 20, */ -1, 1, 9 }; static double daw2_data[45] = { -0.56886544105215527114160533733674e-01, -0.31811346996168131279322878048822e+00, 0.20873845413642236789741580198858e+00, -0.12475409913779131214073498314784e+00, 0.67869305186676777092847516423676e-01, -0.33659144895270939503068230966587e-01, 0.15260781271987971743682460381640e-01, -0.63483709625962148230586094788535e-02, 0.24326740920748520596865966109343e-02, -0.86219541491065032038526983549637e-03, 0.28376573336321625302857636538295e-03, -0.87057549874170423699396581464335e-04, 0.24986849985481658331800044137276e-04, -0.67319286764160294344603050339520e-05, 0.17078578785573543710504524047844e-05, -0.40917551226475381271896592490038e-06, 0.92828292216755773260751785312273e-07, -0.19991403610147617829845096332198e-07, 0.40963490644082195241210487868917e-08, -0.80032409540993168075706781753561e-09, 0.14938503128761465059143225550110e-09, -0.26687999885622329284924651063339e-10, 0.45712216985159458151405617724103e-11, -0.75187305222043565872243727326771e-12, 0.11893100052629681879029828987302e-12, -0.18116907933852346973490318263084e-13, 0.26611733684358969193001612199626e-14, -0.37738863052129419795444109905930e-15, 0.51727953789087172679680082229329e-16, -0.68603684084077500979419564670102e-17, 0.88123751354161071806469337321745e-18, -0.10974248249996606292106299624652e-18, 0.13261199326367178513595545891635e-19, -0.15562732768137380785488776571562e-20, 0.17751425583655720607833415570773e-21, -0.19695006967006578384953608765439e-22, 0.21270074896998699661924010120533e-23, -0.22375398124627973794182113962666e-24, 0.22942768578582348946971383125333e-25, -0.22943788846552928693329592319999e-26, 0.22391702100592453618342297600000e-27, -0.21338230616608897703678225066666e-28, 0.19866196585123531518028458666666e-29, -0.18079295866694391771955199999999e-30, 0.16090686015283030305450666666666e-31 }; static cheb_series daw2_cs = { daw2_data, 32, /* 44, */ -1, 1, 21 }; static double dawa_data[75] = { 0.1690485637765703755422637438849e-01, 0.8683252278406957990536107850768e-02, 0.2424864042417715453277703459889e-03, 0.1261182399572690001651949240377e-04, 0.1066453314636176955705691125906e-05, 0.1358159794790727611348424505728e-06, 0.2171042356577298398904312744743e-07, 0.2867010501805295270343676804813e-08, -0.1901336393035820112282492378024e-09, -0.3097780484395201125532065774268e-09, -0.1029414876057509247398132286413e-09, -0.6260356459459576150417587283121e-11, 0.8563132497446451216262303166276e-11, 0.3033045148075659292976266276257e-11, -0.2523618306809291372630886938826e-12, -0.4210604795440664513175461934510e-12, -0.4431140826646238312143429452036e-13, 0.4911210272841205205940037065117e-13, 0.1235856242283903407076477954739e-13, -0.5788733199016569246955765071069e-14, -0.2282723294807358620978183957030e-14, 0.7637149411014126476312362917590e-15, 0.3851546883566811728777594002095e-15, -0.1199932056928290592803237283045e-15, -0.6313439150094572347334270285250e-16, 0.2239559965972975375254912790237e-16, 0.9987925830076495995132891200749e-17, -0.4681068274322495334536246507252e-17, -0.1436303644349721337241628751534e-17, 0.1020822731410541112977908032130e-17, 0.1538908873136092072837389822372e-18, -0.2189157877645793888894790926056e-18, 0.2156879197938651750392359152517e-20, 0.4370219827442449851134792557395e-19, -0.8234581460977207241098927905177e-20, -0.7498648721256466222903202835420e-20, 0.3282536720735671610957612930039e-20, 0.8858064309503921116076561515151e-21, -0.9185087111727002988094460531485e-21, 0.2978962223788748988314166045791e-22, 0.1972132136618471883159505468041e-21, -0.5974775596362906638089584995117e-22, -0.2834410031503850965443825182441e-22, 0.2209560791131554514777150489012e-22, -0.5439955741897144300079480307711e-25, -0.5213549243294848668017136696470e-23, 0.1702350556813114199065671499076e-23, 0.6917400860836148343022185660197e-24, -0.6540941793002752512239445125802e-24, 0.6093576580439328960371824654636e-25, 0.1408070432905187461501945080272e-24, -0.6785886121054846331167674943755e-25, -0.9799732036214295711741583102225e-26, 0.2121244903099041332598960939160e-25, -0.5954455022548790938238802154487e-26, -0.3093088861875470177838847232049e-26, 0.2854389216344524682400691986104e-26, -0.3951289447379305566023477271811e-27, -0.5906000648607628478116840894453e-27, 0.3670236964668687003647889980609e-27, -0.4839958238042276256598303038941e-29, -0.9799265984210443869597404017022e-28, 0.4684773732612130606158908804300e-28, 0.5030877696993461051647667603155e-29, -0.1547395051706028239247552068295e-28, 0.6112180185086419243976005662714e-29, 0.1357913399124811650343602736158e-29, -0.2417687752768673088385304299044e-29, 0.8369074582074298945292887587291e-30, 0.2665413042788979165838319401566e-30, -0.3811653692354890336935691003712e-30, 0.1230054721884951464371706872585e-30, 0.4622506399041493508805536929983e-31, -0.6120087296881677722911435593001e-31, 0.1966024640193164686956230217896e-31 }; static cheb_series dawa_cs = { dawa_data, 34, /* 74, */ -1, 1, 12 }; /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_dawson_e(double x, gsl_sf_result * result) { const double xsml = 1.225 * GSL_SQRT_DBL_EPSILON; const double xbig = 1.0/(M_SQRT2*GSL_SQRT_DBL_EPSILON); const double xmax = 0.1 * GSL_DBL_MAX; const double y = fabs(x); if(y < xsml) { result->val = x; result->err = 0.0; return GSL_SUCCESS; } else if(y < 1.0) { gsl_sf_result result_c; cheb_eval_e(&daw_cs, 2.0*y*y - 1.0, &result_c); result->val = x * (0.75 + result_c.val); result->err = y * result_c.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(y < 4.0) { gsl_sf_result result_c; cheb_eval_e(&daw2_cs, 0.125*y*y - 1.0, &result_c); result->val = x * (0.25 + result_c.val); result->err = y * result_c.err; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(y < xbig) { gsl_sf_result result_c; cheb_eval_e(&dawa_cs, 32.0/(y*y) - 1.0, &result_c); result->val = (0.5 + result_c.val) / x; result->err = result_c.err / y; result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(y < xmax) { result->val = 0.5/x; result->err = 2.0 * GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else { UNDERFLOW_ERROR(result); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_dawson(double x) { EVAL_RESULT(gsl_sf_dawson_e(x, &result)); } gsl/specfunc/test_gamma.c0000644000175000017500000006774313536674414014046 0ustar eddedd/* specfunc/test_gamma.c * * Copyright (C) 2007 Brian Gough * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include "test_sf.h" int test_gamma(void) { gsl_sf_result r; gsl_sf_result r1, r2; double sgn; int s = 0; TEST_SF(s, gsl_sf_lngamma_e, (-0.1, &r), 2.368961332728788655 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lngamma_e, (-1.0/256.0, &r), 5.547444766967471595 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lngamma_e, (1.0e-08, &r), 18.420680738180208905 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lngamma_e, (0.1, &r), 2.252712651734205 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lngamma_e, (1.0 + 1.0/256.0, &r), -0.0022422226599611501448 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lngamma_e, (2.0 + 1.0/256.0, &r), 0.0016564177556961728692 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lngamma_e, (100.0, &r), 359.1342053695753 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lngamma_e, (-1.0-1.0/65536.0, &r), 11.090348438090047844 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lngamma_e, (-1.0-1.0/268435456.0, &r), 19.408121054103474300 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lngamma_e, (-100.5, &r), -364.9009683094273518 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lngamma_e, (-100-1.0/65536.0, &r), -352.6490910117097874 , TEST_TOL0, GSL_SUCCESS); TEST_SF_SGN(s, gsl_sf_lngamma_sgn_e, (0.7, &r, &sgn), 0.26086724653166651439, TEST_TOL1, 1.0, GSL_SUCCESS); TEST_SF_SGN(s, gsl_sf_lngamma_sgn_e, (0.1, &r, &sgn), 2.2527126517342059599, TEST_TOL0, 1.0, GSL_SUCCESS); TEST_SF_SGN(s, gsl_sf_lngamma_sgn_e, (-0.1, &r, &sgn), 2.368961332728788655, TEST_TOL0, -1.0, GSL_SUCCESS); TEST_SF_SGN(s, gsl_sf_lngamma_sgn_e, (-1.0-1.0/65536.0, &r, &sgn), 11.090348438090047844, TEST_TOL0, 1.0, GSL_SUCCESS); TEST_SF_SGN(s, gsl_sf_lngamma_sgn_e, (-2.0-1.0/256.0, &r, &sgn), 4.848447725860607213, TEST_TOL0, -1.0, GSL_SUCCESS); TEST_SF_SGN(s, gsl_sf_lngamma_sgn_e, (-2.0-1.0/65536.0, &r, &sgn), 10.397193628164674967, TEST_TOL0, -1.0, GSL_SUCCESS); TEST_SF_SGN(s, gsl_sf_lngamma_sgn_e, (-3.0-1.0/8.0, &r, &sgn), 0.15431112768404182427, TEST_TOL2, 1.0, GSL_SUCCESS); TEST_SF_SGN(s, gsl_sf_lngamma_sgn_e, (-100.5, &r, &sgn), -364.9009683094273518, TEST_TOL0, -1.0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_e, (1.0 + 1.0/4096.0, &r), 0.9998591371459403421 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_e, (1.0 + 1.0/32.0, &r), 0.9829010992836269148 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_e, (2.0 + 1.0/256.0, &r), 1.0016577903733583299 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_e, (9.0, &r), 40320.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_e, (10.0, &r), 362880.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_e, (100.0, &r), 9.332621544394415268e+155 , TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_e, (170.0, &r), 4.269068009004705275e+304 , TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_e, (171.0, &r), 7.257415615307998967e+306 , TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_e, (-10.5, &r), -2.640121820547716316e-07 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_e, (-11.25, &r), 6.027393816261931672e-08 , TEST_TOL0, GSL_SUCCESS); /* exp()... not my fault */ TEST_SF(s, gsl_sf_gamma_e, (-1.0+1.0/65536.0, &r), -65536.42280587818970 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammastar_e, (1.0e-08, &r), 3989.423555759890865 , TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammastar_e, (1.0e-05, &r), 126.17168469882690233 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammastar_e, (0.001, &r), 12.708492464364073506 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammastar_e, (1.5, &r), 1.0563442442685598666 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammastar_e, (3.0, &r), 1.0280645179187893045 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammastar_e, (9.0, &r), 1.0092984264218189715 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammastar_e, (11.0, &r), 1.0076024283104962850 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammastar_e, (100.0, &r), 1.0008336778720121418 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammastar_e, (1.0e+05, &r), 1.0000008333336805529 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammastar_e, (1.0e+20, &r), 1.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammainv_e, (1.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammainv_e, (2.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammainv_e, (3.0, &r), 0.5, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammainv_e, (4.0, &r), 1.0/6.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammainv_e, (10.0, &r), 1.0/362880.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammainv_e, (100.0, &r), 1.0715102881254669232e-156, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammainv_e, (0.0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammainv_e, (-1.0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammainv_e, (-2.0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammainv_e, (-3.0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammainv_e, (-4.0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammainv_e, (-10.5, &r), -1.0/2.640121820547716316e-07, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammainv_e, (-11.25, &r), 1.0/6.027393816261931672e-08, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gammainv_e, (-1.0+1.0/65536.0, &r), -1.0/65536.42280587818970 , TEST_TOL1, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_lngamma_complex_e, (5.0, 2.0, &r1, &r2), 2.7487017561338026749, TEST_TOL0, 3.0738434100497007915, TEST_TOL0, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_lngamma_complex_e, (100.0, 100.0, &r1, &r2), 315.07804459949331323, TEST_TOL1, 2.0821801804113110099, TEST_TOL3, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_lngamma_complex_e, (100.0, -1000.0, &r1, &r2), -882.3920483010362817000, TEST_TOL1, -2.1169293725678813270, TEST_TOL3, GSL_SUCCESS); TEST_SF_2(s, gsl_sf_lngamma_complex_e, (-100.0, -1.0, &r1, &r2), -365.0362469529239516000, TEST_TOL1, -3.0393820262864361140, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_taylorcoeff_e, (10, 1.0/1048576.0, &r), 1.7148961854776073928e-67 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_taylorcoeff_e, (10, 1.0/1024.0, &r), 2.1738891788497900281e-37 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_taylorcoeff_e, (10, 1.0, &r), 2.7557319223985890653e-07 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_taylorcoeff_e, (10, 5.0, &r), 2.6911444554673721340 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_taylorcoeff_e, (10, 500.0, &r), 2.6911444554673721340e+20 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_taylorcoeff_e, (100, 100.0, &r), 1.0715102881254669232e+42 , TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_taylorcoeff_e, (1000, 200.0, &r), 2.6628790558154746898e-267 , TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_taylorcoeff_e, (1000, 500.0, &r), 2.3193170139740855074e+131 , TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_fact_e, (0, &r), 1.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fact_e, (1, &r), 1.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fact_e, (7, &r), 5040.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_fact_e, (33, &r), 8.683317618811886496e+36 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_doublefact_e, (0, &r), 1.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_doublefact_e, (1, &r), 1.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_doublefact_e, (7, &r), 105.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_doublefact_e, (33, &r), 6.332659870762850625e+18 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnfact_e, (0, &r), 0.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnfact_e, (1, &r), 0.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnfact_e, (7, &r), 8.525161361065414300 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnfact_e, (33, &r), 85.05446701758151741 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lndoublefact_e, (0, &r), 0.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lndoublefact_e, (7, &r), 4.653960350157523371 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lndoublefact_e, (33, &r), 43.292252022541719660 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lndoublefact_e, (34, &r), 45.288575519655959140 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lndoublefact_e, (1034, &r), 3075.6383796271197707 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lndoublefact_e, (1035, &r), 3078.8839081731809169 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnchoose_e, (7,3, &r), 3.555348061489413680 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnchoose_e, (5,2, &r), 2.302585092994045684 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_choose_e, (7,3, &r), 35.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_choose_e, (7,4, &r), 35.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_choose_e, (5,2, &r), 10.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_choose_e, (5,3, &r), 10.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_choose_e, (500,495, &r), 255244687600.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_choose_e, (500,5, &r), 255244687600.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_choose_e, (500,200, &r), 5.054949849935532221e+144 , TEST_TOL5, GSL_SUCCESS); TEST_SF(s, gsl_sf_choose_e, (500,300, &r), 5.054949849935532221e+144 , TEST_TOL5, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnpoch_e, (5, 0.0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnpoch_e, (5, 1.0/65536.0, &r), 0.000022981557571259389129, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnpoch_e, (5, 1.0/256.0, &r), 0.005884960217985189004, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnpoch_e, (7,3, &r), 6.222576268071368616, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnpoch_e, (5,2, &r), 3.401197381662155375, TEST_TOL0, GSL_SUCCESS); TEST_SF_SGN(s, gsl_sf_lnpoch_sgn_e, (5.0, 0.0, &r, &sgn), 0.0, TEST_TOL1, 1.0, GSL_SUCCESS); TEST_SF_SGN(s, gsl_sf_lnpoch_sgn_e, (-4.5, 0.25, &r, &sgn), 0.7430116475119920117, TEST_TOL1, 1.0, GSL_SUCCESS); TEST_SF_SGN(s, gsl_sf_lnpoch_sgn_e, (-4.5, 1.25, &r, &sgn), 2.1899306304483174731, TEST_TOL1, -1.0, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (5, 0.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (7,3, &r), 504.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (5,2, &r), 30.0 , TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (5,1.0/256.0, &r), 1.0059023106151364982 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pochrel_e, (5,0, &r), 1.506117668431800472, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_pochrel_e, (7,3, &r), 503.0/3.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_pochrel_e, (5,2, &r), 29.0/2.0, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_pochrel_e, (5,0.01, &r), 1.5186393661368275330, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_pochrel_e, (-5.5,0.01, &r), 1.8584945633829063516, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_pochrel_e, (-5.5,-1.0/8.0, &r), 1.0883319303552135488, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_pochrel_e, (-5.5,-1.0/256.0, &r), 1.7678268037726177453, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_pochrel_e, (-5.5,-11.0, &r), 0.09090909090939652475, TEST_TOL0, GSL_SUCCESS); /* Add tests for special cases with negative arguments */ TEST_SF(s, gsl_sf_poch_e, (-9.0, -4.0, &r), 1.0/17160.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (-9.0, -3.0, &r), -1.0/1320.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (-9.0, -3.5, &r), 0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (-9.0, 4.0, &r), 3024.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (-9.0, 3.0, &r), -504.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (-9.0, 3.5, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (-9.0, 0.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (-8.0, -4.0, &r), 1.0/11880.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (-8.0, -3.0, &r), -1.0/990.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (-8.0, +4.0, &r), 1680.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (-8.0, +3.0, &r), -336.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (-3.0, +4.0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); /* FIXME: we should be able to get an exact answer for poch(-a,a) if gsl_sf_lngamma functions were fixed to handle integer arguments exactly as a special case */ TEST_SF(s, gsl_sf_poch_e, (-3.0, +3.0, &r), -6.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (-4.0, +4.0, &r), 24.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_poch_e, (-3.0, +100.0, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_P_e, (1e-100, 0.001, &r), 1.0, TEST_TOL0, GSL_SUCCESS) ; TEST_SF(s, gsl_sf_gamma_inc_P_e, (0.001, 0.001, &r), 0.9936876467088602902, TEST_TOL0, GSL_SUCCESS) ; TEST_SF(s, gsl_sf_gamma_inc_P_e, (0.001, 1.0, &r), 0.9997803916424144436, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_P_e, (0.001, 10.0, &r), 0.9999999958306921828, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_P_e, (1.0, 0.001, &r), 0.0009995001666250083319, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_P_e, (1.0, 1.01, &r), 0.6357810204284766802, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_P_e, (1.0, 10.0, &r), 0.9999546000702375151, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_P_e, (10.0, 10.01, &r), 0.5433207586693410570, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_P_e, (10.0, 20.0, &r), 0.9950045876916924128, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_P_e, (1000.0, 1000.1, &r), 0.5054666401440661753, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_P_e, (1000.0, 2000.0, &r), 1.0, TEST_TOL0, GSL_SUCCESS); /* Test for failure of the Gautschi recurrence (now fixed) for x = a - 2 */ TEST_SF(s, gsl_sf_gamma_inc_P_e, (34.0, 32.0, &r), 0.3849626436463866776322932129, TEST_TOL2, GSL_SUCCESS); /* and the next test is gamma_inc_P(37,35-20*eps) */ TEST_SF(s, gsl_sf_gamma_inc_P_e, (37.0, 3.499999999999999289e+01, &r), 0.3898035054195570860969333039, TEST_TOL2, GSL_SUCCESS); /* Regression test Martin Jansche BUG#12 */ TEST_SF(s, gsl_sf_gamma_inc_P_e, (10, 1e-16, &r), 2.755731922398588814734648067e-167, TEST_TOL2, GSL_SUCCESS); /* Regression test for gsl_cdf_chisq_Pinv, (0.05, 1263131.0) */ TEST_SF(s, gsl_sf_gamma_inc_P_e, (1263131.0, 1261282.3637, &r), 0.04994777516935182963821362168, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_P_e, (1263131.0, 1263131.0, &r), 0.500118321758657770672882362502514254, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (0.0, 0.001, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (0.001, 0.001, &r), 0.006312353291139709793, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (0.001, 1.0, &r), 0.00021960835758555639171, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (0.001, 2.0, &r), 0.00004897691783098147880, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (0.001, 5.0, &r), 1.1509813397308608541e-06, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (1.0, 0.001, &r), 0.9990004998333749917, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (1.0, 1.01, &r), 0.3642189795715233198, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (1.0, 10.0, &r), 0.00004539992976248485154, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (10.0, 10.01, &r), 0.4566792413306589430, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (10.0, 100.0, &r), 1.1253473960842733885e-31, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (1000.0, 1000.1, &r), 0.4945333598559338247, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (1000.0, 2000.0, &r), 6.847349459614753180e-136, TEST_TOL2, GSL_SUCCESS); /* designed to trap the a-x=1 problem */ TEST_SF(s, gsl_sf_gamma_inc_Q_e, (100, 99.0, &r), 0.5266956696005394, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (200, 199.0, &r), 0.5188414119121281, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_P_e, (100, 99.0, &r), 0.4733043303994607, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_P_e, (200, 199.0, &r), 0.4811585880878718, TEST_TOL2, GSL_SUCCESS); /* Test for x86 cancellation problems */ TEST_SF(s, gsl_sf_gamma_inc_P_e, (5670, 4574, &r), 3.063972328743934e-55, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (5670, 4574, &r), 1.0000000000000000, TEST_TOL2, GSL_SUCCESS); /* test suggested by Michel Lespinasse [gsl-discuss Sat, 13 Nov 2004] */ TEST_SF(s, gsl_sf_gamma_inc_Q_e, (1.0e+06-1.0, 1.0e+06-2.0, &r), 0.50026596175224547004, TEST_TOL3, GSL_SUCCESS); /* tests in asymptotic regime related to Lespinasse test */ TEST_SF(s, gsl_sf_gamma_inc_Q_e, (1.0e+06+2.0, 1.0e+06+1.0, &r), 0.50026596135330304336, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (1.0e+06, 1.0e+06-2.0, &r), 0.50066490399940144811, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_Q_e, (1.0e+07, 1.0e+07-2.0, &r), 0.50021026104978614908, TEST_TOL2, GSL_SUCCESS); /* non-normalized "Q" function */ TEST_SF(s, gsl_sf_gamma_inc_e, (-1.0/1048576.0, 1.0/1048576.0, &r), 13.285819596290624271, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-0.001, 1.0/1048576.0, &r), 13.381275128625328858, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-1.0, 1.0/1048576.0, &r), 1.0485617142715768655e+06, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-0.00001,0.001, &r), 6.3317681434563592142, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-0.0001,0.001, &r), 6.3338276439767189385, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-0.001, 0.001, &r), 6.3544709102510843793, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-0.5, 0.001, &r), 59.763880515942196981, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-1.0, 0.001, &r), 992.66896046923884234, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-3.5, 0.001, &r), 9.0224404490639003706e+09, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-10.5, 0.001, &r), 3.0083661558184815656e+30, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-0.001, 0.1, &r), 1.8249109609418620068, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-0.5, 0.1, &r), 3.4017693366916154163, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-10.0, 0.1, &r), 8.9490757483586989181e+08, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-10.5, 0.1, &r), 2.6967403834226421766e+09, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-0.001, 1.0, &r), 0.21928612679072766340, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-0.5, 1.0, &r), 0.17814771178156069019, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-1.0, 1.0, &r), 0.14849550677592204792, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-2.5, 1.0, &r), 0.096556648631275160264, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-1.0, 10.0, &r), 3.8302404656316087616e-07, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-0.001, 10.0, &r), 4.1470562324807320961e-06, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-0.5, 10.0, &r), 1.2609042613241570681e-06, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-1.0, 10.0, &r), 3.8302404656316087616e-07, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-10.5, 10.0, &r), 6.8404927328441566785e-17, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-100.0, 10.0, &r), 4.1238327669858313997e-107, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (-200.0, 10.0, &r), 2.1614091830529343423e-207, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, ( 0.0, 0.001, &r), 6.3315393641361493320, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, ( 0.001, 0.001, &r), 6.3087159394864007261, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, ( 1.0, 0.001, &r), 0.99900049983337499167, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, ( 10.0, 0.001, &r), 362880.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, ( 0.0, 1.0, &r), 0.21938393439552027368, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, ( 0.001, 1.0, &r), 0.21948181320730279613, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, ( 1.0, 1.0, &r), 0.36787944117144232160, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, ( 10.0, 1.0, &r), 362879.95956592242045, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (100.0, 1.0, &r), 9.3326215443944152682e+155, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, ( 0.0, 100.0, &r), 3.6835977616820321802e-46, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, ( 0.001, 100.0, &r), 3.7006367674063550631e-46, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, ( 1.0, 100.0, &r), 3.7200759760208359630e-44, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, ( 10.0, 100.0, &r), 4.0836606309106112723e-26, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_gamma_inc_e, (100.0, 100.0, &r), 4.5421981208626694294e+155, TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnbeta_e, (1.0e-8, 1.0e-8, &r), 19.113827924512310617 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnbeta_e, (1.0e-8, 0.01, &r), 18.420681743788563403 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnbeta_e, (1.0e-8, 1.0, &r), 18.420680743952365472 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnbeta_e, (1.0e-8, 10.0, &r), 18.420680715662683009 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnbeta_e, (1.0e-8, 1000.0, &r), 18.420680669107656949 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnbeta_e, (0.1, 0.1, &r), 2.9813614810376273949 , TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnbeta_e, (0.1, 1.0, &r), 2.3025850929940456840 , TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnbeta_e, (0.1, 100.0, &r), 1.7926462324527931217 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnbeta_e, (0.1, 1000, &r), 1.5619821298353164928 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnbeta_e, (1.0, 1.00025, &r), -0.0002499687552073570, TEST_TOL4, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnbeta_e, (1.0, 1.01, &r), -0.009950330853168082848 , TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnbeta_e, (1.0, 1000.0, &r), -6.907755278982137052 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnbeta_e, (100.0, 100.0, &r), -139.66525908670663927 , TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnbeta_e, (100.0, 1000.0, &r), -336.4348576477366051 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_lnbeta_e, (100.0, 1.0e+8, &r), -1482.9339185256447309 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (1.0, 1.0, &r), 1.0 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (1.0, 1.001, &r), 0.9990009990009990010 , TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (1.0, 5.0, &r), 0.2 , TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (1.0, 100.0, &r), 0.01 , TEST_TOL1, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (10.0, 100.0, &r), 2.3455339739604649879e-15 , TEST_TOL2, GSL_SUCCESS); /* Test negative arguments */ TEST_SF(s, gsl_sf_beta_e, (2.5, -0.1, &r), -11.43621278354402041480, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (2.5, -1.1, &r), 14.555179906328753255202, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (-0.25, -0.1, &r), -13.238937960945229110, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (-1.25, -0.1, &r), -14.298052997820847439, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (-100.1, -99.1, &r), -1.005181917797644630375787297e60, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (-100.1, 99.3, &r), 0.0004474258199579694011200969001, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (100.1, -99.3, &r), 1.328660939628876472028853747, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (-100.1, 1.2, &r), 0.00365530364287960795444856281, TEST_TOL3, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (100.1, -1.2, &r), 1203.895236907821059270698160, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (-100.1, -1.2, &r), -3236.073671884748847700283841, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (-100.001, 0.0099, &r), -853.946649365611147996495177, TEST_TOL4, GSL_SUCCESS); /* Other test cases */ TEST_SF(s, gsl_sf_beta_e, (1e-32, 1.5, &r), 1e32, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (1e-6, 0.5, &r), 1000001.386293677092419390336, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_e, (-1.5, 0.5, &r), 0.0, TEST_TOL0, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (1.0, 1.0, 0.0, &r), 0.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (1.0, 1.0, 1.0, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (0.1, 0.1, 1.0, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, ( 1.0, 1.0, 0.5, &r), 0.5, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, ( 0.1, 1.0, 0.5, &r), 0.9330329915368074160, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (10.0, 1.0, 0.5, &r), 0.0009765625000000000000, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (50.0, 1.0, 0.5, &r), 8.881784197001252323e-16, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, ( 1.0, 0.1, 0.5, &r), 0.06696700846319258402, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, ( 1.0, 10.0, 0.5, &r), 0.99902343750000000000, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, ( 1.0, 50.0, 0.5, &r), 0.99999999999999911180, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, ( 1.0, 1.0, 0.1, &r), 0.10, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, ( 1.0, 2.0, 0.1, &r), 0.19, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, ( 1.0, 2.0, 0.9, &r), 0.99, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (50.0, 60.0, 0.5, &r), 0.8309072939016694143, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (90.0, 90.0, 0.5, &r), 0.5, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, ( 500.0, 500.0, 0.6, &r), 0.9999999999157549630, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (5000.0, 5000.0, 0.4, &r), 4.518543727260666383e-91, TEST_TOL5, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (5000.0, 5000.0, 0.6, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (5000.0, 2000.0, 0.6, &r), 8.445388773903332659e-89, TEST_TOL5, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (-0.1, -0.1, 1.0, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (-0.1, -0.2, 1.0, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (-0.2, -0.1, 1.0, &r), 1.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (-0.1, -0.2, 0.5, &r), 0.675252001958389971991335, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (-0.2, -0.1, 0.5, &r), 0.324747998041610028008665, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (-0.1, -0.1, 0.0, &r), 0.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (-0.1, -0.2, 0.0, &r), 0.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (-0.2, -0.1, 0.0, &r), 0.0, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (-0.1, -0.2, 0.3, &r), 0.7469186777964287252, TEST_TOL2, GSL_SUCCESS); TEST_SF(s, gsl_sf_beta_inc_e, (-0.2, -0.1, 0.3, &r), 0.3995299653262016818, TEST_TOL2, GSL_SUCCESS); /* Bug report from Thomas Tanner */ TEST_SF(s, gsl_sf_beta_inc_e, (0.5, 101.5, 0.999457, &r), 1.0, TEST_TOL2, GSL_SUCCESS); return s; } gsl/specfunc/bessel_amp_phase.h0000644000175000017500000000276713536674414015217 0ustar eddedd/* specfunc/bessel_amp_phase.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef _BESSEL_AMP_PHASE_H_ #define _BESSEL_AMP_PHASE_H_ #include "chebyshev.h" extern const cheb_series _gsl_sf_bessel_amp_phase_bm0_cs; extern const cheb_series _gsl_sf_bessel_amp_phase_bth0_cs; extern const cheb_series _gsl_sf_bessel_amp_phase_bm1_cs; extern const cheb_series _gsl_sf_bessel_amp_phase_bth1_cs; /* large argument expansions [Abramowitz+Stegun, 9.2.28-29] * * thetanu_corr = thetanu - x + 1/2 nu Pi * * assumes x > 0 */ int gsl_sf_bessel_asymp_Mnu_e(const double nu, const double x, double * result); int gsl_sf_bessel_asymp_thetanu_corr_e(const double nu, const double x, double * result); /* w/o x term */ #endif /* !_BESSEL_AMP_PHASE_H_ */ gsl/specfunc/bessel.c0000644000175000017500000006643613536674414013200 0ustar eddedd/* specfunc/bessel.c * * Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ /* Miscellaneous support functions for Bessel function evaluations. */ #include #include #include #include #include #include #include #include #include "error.h" #include "bessel_amp_phase.h" #include "bessel_temme.h" #include "bessel.h" #define CubeRoot2_ 1.25992104989487316476721060728 /* Debye functions [Abramowitz+Stegun, 9.3.9-10] */ inline static double debye_u1(const double * tpow) { return (3.0*tpow[1] - 5.0*tpow[3])/24.0; } inline static double debye_u2(const double * tpow) { return (81.0*tpow[2] - 462.0*tpow[4] + 385.0*tpow[6])/1152.0; } inline static double debye_u3(const double * tpow) { return (30375.0*tpow[3] - 369603.0*tpow[5] + 765765.0*tpow[7] - 425425.0*tpow[9])/414720.0; } inline static double debye_u4(const double * tpow) { return (4465125.0*tpow[4] - 94121676.0*tpow[6] + 349922430.0*tpow[8] - 446185740.0*tpow[10] + 185910725.0*tpow[12])/39813120.0; } inline static double debye_u5(const double * tpow) { return (1519035525.0*tpow[5] - 49286948607.0*tpow[7] + 284499769554.0*tpow[9] - 614135872350.0*tpow[11] + 566098157625.0*tpow[13] - 188699385875.0*tpow[15])/6688604160.0; } #if 0 inline static double debye_u6(const double * tpow) { return (2757049477875.0*tpow[6] - 127577298354750.0*tpow[8] + 1050760774457901.0*tpow[10] - 3369032068261860.0*tpow[12] + 5104696716244125.0*tpow[14] - 3685299006138750.0*tpow[16] + 1023694168371875.0*tpow[18])/4815794995200.0; } #endif /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_bessel_IJ_taylor_e(const double nu, const double x, const int sign, const int kmax, const double threshold, gsl_sf_result * result ) { /* CHECK_POINTER(result) */ if(nu < 0.0 || x < 0.0) { DOMAIN_ERROR(result); } else if(x == 0.0) { if(nu == 0.0) { result->val = 1.0; result->err = 0.0; } else { result->val = 0.0; result->err = 0.0; } return GSL_SUCCESS; } else { gsl_sf_result prefactor; /* (x/2)^nu / Gamma(nu+1) */ gsl_sf_result sum; int stat_pre; int stat_sum; int stat_mul; if(nu == 0.0) { prefactor.val = 1.0; prefactor.err = 0.0; stat_pre = GSL_SUCCESS; } else if(nu < INT_MAX-1) { /* Separate the integer part and use * y^nu / Gamma(nu+1) = y^N /N! y^f / (N+1)_f, * to control the error. */ const int N = (int)floor(nu + 0.5); const double f = nu - N; gsl_sf_result poch_factor; gsl_sf_result tc_factor; const int stat_poch = gsl_sf_poch_e(N+1.0, f, &poch_factor); const int stat_tc = gsl_sf_taylorcoeff_e(N, 0.5*x, &tc_factor); const double p = pow(0.5*x,f); prefactor.val = tc_factor.val * p / poch_factor.val; prefactor.err = tc_factor.err * p / poch_factor.val; prefactor.err += fabs(prefactor.val) / poch_factor.val * poch_factor.err; prefactor.err += 2.0 * GSL_DBL_EPSILON * fabs(prefactor.val); stat_pre = GSL_ERROR_SELECT_2(stat_tc, stat_poch); } else { gsl_sf_result lg; const int stat_lg = gsl_sf_lngamma_e(nu+1.0, &lg); const double term1 = nu*log(0.5*x); const double term2 = lg.val; const double ln_pre = term1 - term2; const double ln_pre_err = GSL_DBL_EPSILON * (fabs(term1)+fabs(term2)) + lg.err; const int stat_ex = gsl_sf_exp_err_e(ln_pre, ln_pre_err, &prefactor); stat_pre = GSL_ERROR_SELECT_2(stat_ex, stat_lg); } /* Evaluate the sum. * [Abramowitz+Stegun, 9.1.10] * [Abramowitz+Stegun, 9.6.7] */ { const double y = sign * 0.25 * x*x; double sumk = 1.0; double term = 1.0; int k; for(k=1; k<=kmax; k++) { term *= y/((nu+k)*k); sumk += term; if(fabs(term/sumk) < threshold) break; } sum.val = sumk; sum.err = threshold * fabs(sumk); stat_sum = ( k >= kmax ? GSL_EMAXITER : GSL_SUCCESS ); } stat_mul = gsl_sf_multiply_err_e(prefactor.val, prefactor.err, sum.val, sum.err, result); return GSL_ERROR_SELECT_3(stat_mul, stat_pre, stat_sum); } } /* Hankel's Asymptotic Expansion - A&S 9.2.5 * * x >> nu*nu+1 * error ~ O( ((nu*nu+1)/x)^4 ) * * empirical error analysis: * choose GSL_ROOT4_MACH_EPS * x > (nu*nu + 1) * * This is not especially useful. When the argument gets * large enough for this to apply, the cos() and sin() * start loosing digits. However, this seems inevitable * for this particular method. * * Wed Jun 25 14:39:38 MDT 2003 [GJ] * This function was inconsistent since the Q term did not * go to relative order eps^2. That's why the error estimate * originally given was screwy (it didn't make sense that the * "empirical" error was coming out O(eps^3)). * With Q to proper order, the error is O(eps^4). * * Sat Mar 15 05:16:18 GMT 2008 [BG] * Extended to use additional terms in the series to gain * higher accuracy. * */ int gsl_sf_bessel_Jnu_asympx_e(const double nu, const double x, gsl_sf_result * result) { double mu = 4.0*nu*nu; double chi = x - (0.5*nu + 0.25)*M_PI; double P = 0.0; double Q = 0.0; double k = 0, t = 1; int convP, convQ; do { t *= (k == 0) ? 1 : -(mu - (2*k-1)*(2*k-1)) / (k * (8 * x)); convP = fabs(t) < GSL_DBL_EPSILON * fabs(P); P += t; k++; t *= (mu - (2*k-1)*(2*k-1)) / (k * (8 * x)); convQ = fabs(t) < GSL_DBL_EPSILON * fabs(Q); Q += t; /* To preserve the consistency of the series we need to exit when P and Q have the same number of terms */ if (convP && convQ && k > (nu / 2)) break; k++; } while (k < 1000); { double pre = sqrt(2.0/(M_PI*x)); double c = cos(chi); double s = sin(chi); result->val = pre * (c*P - s*Q); result->err = pre * GSL_DBL_EPSILON * (fabs(c*P) + fabs(s*Q) + fabs(t)) * (1 + fabs(x)); /* NB: final term accounts for phase error with large x */ } return GSL_SUCCESS; } /* x >> nu*nu+1 */ int gsl_sf_bessel_Ynu_asympx_e(const double nu, const double x, gsl_sf_result * result) { double ampl; double theta; double alpha = x; double beta = -0.5*nu*M_PI; int stat_a = gsl_sf_bessel_asymp_Mnu_e(nu, x, &l); int stat_t = gsl_sf_bessel_asymp_thetanu_corr_e(nu, x, &theta); double sin_alpha = sin(alpha); double cos_alpha = cos(alpha); double sin_chi = sin(beta + theta); double cos_chi = cos(beta + theta); double sin_term = sin_alpha * cos_chi + sin_chi * cos_alpha; double sin_term_mag = fabs(sin_alpha * cos_chi) + fabs(sin_chi * cos_alpha); result->val = ampl * sin_term; result->err = fabs(ampl) * GSL_DBL_EPSILON * sin_term_mag; result->err += fabs(result->val) * 2.0 * GSL_DBL_EPSILON; if(fabs(alpha) > 1.0/GSL_DBL_EPSILON) { result->err *= 0.5 * fabs(alpha); } else if(fabs(alpha) > 1.0/GSL_SQRT_DBL_EPSILON) { result->err *= 256.0 * fabs(alpha) * GSL_SQRT_DBL_EPSILON; } return GSL_ERROR_SELECT_2(stat_t, stat_a); } /* x >> nu*nu+1 */ int gsl_sf_bessel_Inu_scaled_asympx_e(const double nu, const double x, gsl_sf_result * result) { double mu = 4.0*nu*nu; double mum1 = mu-1.0; double mum9 = mu-9.0; double pre = 1.0/sqrt(2.0*M_PI*x); double r = mu/x; result->val = pre * (1.0 - mum1/(8.0*x) + mum1*mum9/(128.0*x*x)); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val) + pre * fabs(0.1*r*r*r); return GSL_SUCCESS; } /* x >> nu*nu+1 */ int gsl_sf_bessel_Knu_scaled_asympx_e(const double nu, const double x, gsl_sf_result * result) { double mu = 4.0*nu*nu; double mum1 = mu-1.0; double mum9 = mu-9.0; double pre = sqrt(M_PI/(2.0*x)); double r = nu/x; result->val = pre * (1.0 + mum1/(8.0*x) + mum1*mum9/(128.0*x*x)); result->err = 2.0 * GSL_DBL_EPSILON * fabs(result->val) + pre * fabs(0.1*r*r*r); return GSL_SUCCESS; } /* nu -> Inf; uniform in x > 0 [Abramowitz+Stegun, 9.7.7] * * error: * The error has the form u_N(t)/nu^N where 0 <= t <= 1. * It is not hard to show that |u_N(t)| is small for such t. * We have N=6 here, and |u_6(t)| < 0.025, so the error is clearly * bounded by 0.025/nu^6. This gives the asymptotic bound on nu * seen below as nu ~ 100. For general MACH_EPS it will be * nu > 0.5 / MACH_EPS^(1/6) * When t is small, the bound is even better because |u_N(t)| vanishes * as t->0. In fact u_N(t) ~ C t^N as t->0, with C ~= 0.1. * We write * err_N <= min(0.025, C(1/(1+(x/nu)^2))^3) / nu^6 * therefore * min(0.29/nu^2, 0.5/(nu^2+x^2)) < MACH_EPS^{1/3} * and this is the general form. * * empirical error analysis, assuming 14 digit requirement: * choose x > 50.000 nu ==> nu > 3 * choose x > 10.000 nu ==> nu > 15 * choose x > 2.000 nu ==> nu > 50 * choose x > 1.000 nu ==> nu > 75 * choose x > 0.500 nu ==> nu > 80 * choose x > 0.100 nu ==> nu > 83 * * This makes sense. For x << nu, the error will be of the form u_N(1)/nu^N, * since the polynomial term will be evaluated near t=1, so the bound * on nu will become constant for small x. Furthermore, increasing x with * nu fixed will decrease the error. */ int gsl_sf_bessel_Inu_scaled_asymp_unif_e(const double nu, const double x, gsl_sf_result * result) { int i; double z = x/nu; double root_term = hypot(1.0,z); double pre = 1.0/sqrt(2.0*M_PI*nu * root_term); double eta = root_term + log(z/(1.0+root_term)); double ex_arg = ( z < 1.0/GSL_ROOT3_DBL_EPSILON ? nu*(-z + eta) : -0.5*nu/z*(1.0 - 1.0/(12.0*z*z)) ); gsl_sf_result ex_result; int stat_ex = gsl_sf_exp_e(ex_arg, &ex_result); if(stat_ex == GSL_SUCCESS) { double t = 1.0/root_term; double sum; double tpow[16]; tpow[0] = 1.0; for(i=1; i<16; i++) tpow[i] = t * tpow[i-1]; sum = 1.0 + debye_u1(tpow)/nu + debye_u2(tpow)/(nu*nu) + debye_u3(tpow)/(nu*nu*nu) + debye_u4(tpow)/(nu*nu*nu*nu) + debye_u5(tpow)/(nu*nu*nu*nu*nu); result->val = pre * ex_result.val * sum; result->err = pre * ex_result.val / (nu*nu*nu*nu*nu*nu); result->err += pre * ex_result.err * fabs(sum); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { result->val = 0.0; result->err = 0.0; return stat_ex; } } /* nu -> Inf; uniform in x > 0 [Abramowitz+Stegun, 9.7.8] * * error: * identical to that above for Inu_scaled */ int gsl_sf_bessel_Knu_scaled_asymp_unif_e(const double nu, const double x, gsl_sf_result * result) { int i; double z = x/nu; double root_term = hypot(1.0,z); double pre = sqrt(M_PI/(2.0*nu*root_term)); double eta = root_term + log(z/(1.0+root_term)); double ex_arg = ( z < 1.0/GSL_ROOT3_DBL_EPSILON ? nu*(z - eta) : 0.5*nu/z*(1.0 + 1.0/(12.0*z*z)) ); gsl_sf_result ex_result; int stat_ex = gsl_sf_exp_e(ex_arg, &ex_result); if(stat_ex == GSL_SUCCESS) { double t = 1.0/root_term; double sum; double tpow[16]; tpow[0] = 1.0; for(i=1; i<16; i++) tpow[i] = t * tpow[i-1]; sum = 1.0 - debye_u1(tpow)/nu + debye_u2(tpow)/(nu*nu) - debye_u3(tpow)/(nu*nu*nu) + debye_u4(tpow)/(nu*nu*nu*nu) - debye_u5(tpow)/(nu*nu*nu*nu*nu); result->val = pre * ex_result.val * sum; result->err = pre * ex_result.err * fabs(sum); result->err += pre * ex_result.val / (nu*nu*nu*nu*nu*nu); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { result->val = 0.0; result->err = 0.0; return stat_ex; } } /* Evaluate J_mu(x),J_{mu+1}(x) and Y_mu(x),Y_{mu+1}(x) for |mu| < 1/2 */ int gsl_sf_bessel_JY_mu_restricted(const double mu, const double x, gsl_sf_result * Jmu, gsl_sf_result * Jmup1, gsl_sf_result * Ymu, gsl_sf_result * Ymup1) { /* CHECK_POINTER(Jmu) */ /* CHECK_POINTER(Jmup1) */ /* CHECK_POINTER(Ymu) */ /* CHECK_POINTER(Ymup1) */ if(x < 0.0 || fabs(mu) > 0.5) { Jmu->val = 0.0; Jmu->err = 0.0; Jmup1->val = 0.0; Jmup1->err = 0.0; Ymu->val = 0.0; Ymu->err = 0.0; Ymup1->val = 0.0; Ymup1->err = 0.0; GSL_ERROR ("error", GSL_EDOM); } else if(x == 0.0) { if(mu == 0.0) { Jmu->val = 1.0; Jmu->err = 0.0; } else { Jmu->val = 0.0; Jmu->err = 0.0; } Jmup1->val = 0.0; Jmup1->err = 0.0; Ymu->val = 0.0; Ymu->err = 0.0; Ymup1->val = 0.0; Ymup1->err = 0.0; GSL_ERROR ("error", GSL_EDOM); } else { int stat_Y; int stat_J; if(x < 2.0) { /* Use Taylor series for J and the Temme series for Y. * The Taylor series for J requires nu > 0, so we shift * up one and use the recursion relation to get Jmu, in * case mu < 0. */ gsl_sf_result Jmup2; int stat_J1 = gsl_sf_bessel_IJ_taylor_e(mu+1.0, x, -1, 100, GSL_DBL_EPSILON, Jmup1); int stat_J2 = gsl_sf_bessel_IJ_taylor_e(mu+2.0, x, -1, 100, GSL_DBL_EPSILON, &Jmup2); double c = 2.0*(mu+1.0)/x; Jmu->val = c * Jmup1->val - Jmup2.val; Jmu->err = c * Jmup1->err + Jmup2.err; Jmu->err += 2.0 * GSL_DBL_EPSILON * fabs(Jmu->val); stat_J = GSL_ERROR_SELECT_2(stat_J1, stat_J2); stat_Y = gsl_sf_bessel_Y_temme(mu, x, Ymu, Ymup1); return GSL_ERROR_SELECT_2(stat_J, stat_Y); } else if(x < 1000.0) { double P, Q; double J_ratio; double J_sgn; const int stat_CF1 = gsl_sf_bessel_J_CF1(mu, x, &J_ratio, &J_sgn); const int stat_CF2 = gsl_sf_bessel_JY_steed_CF2(mu, x, &P, &Q); double Jprime_J_ratio = mu/x - J_ratio; double gamma = (P - Jprime_J_ratio)/Q; Jmu->val = J_sgn * sqrt(2.0/(M_PI*x) / (Q + gamma*(P-Jprime_J_ratio))); Jmu->err = 4.0 * GSL_DBL_EPSILON * fabs(Jmu->val); Jmup1->val = J_ratio * Jmu->val; Jmup1->err = fabs(J_ratio) * Jmu->err; Ymu->val = gamma * Jmu->val; Ymu->err = fabs(gamma) * Jmu->err; Ymup1->val = Ymu->val * (mu/x - P - Q/gamma); Ymup1->err = Ymu->err * fabs(mu/x - P - Q/gamma) + 4.0*GSL_DBL_EPSILON*fabs(Ymup1->val); return GSL_ERROR_SELECT_2(stat_CF1, stat_CF2); } else { /* Use asymptotics for large argument. */ const int stat_J0 = gsl_sf_bessel_Jnu_asympx_e(mu, x, Jmu); const int stat_J1 = gsl_sf_bessel_Jnu_asympx_e(mu+1.0, x, Jmup1); const int stat_Y0 = gsl_sf_bessel_Ynu_asympx_e(mu, x, Ymu); const int stat_Y1 = gsl_sf_bessel_Ynu_asympx_e(mu+1.0, x, Ymup1); stat_J = GSL_ERROR_SELECT_2(stat_J0, stat_J1); stat_Y = GSL_ERROR_SELECT_2(stat_Y0, stat_Y1); return GSL_ERROR_SELECT_2(stat_J, stat_Y); } } } int gsl_sf_bessel_J_CF1(const double nu, const double x, double * ratio, double * sgn) { const double RECUR_BIG = GSL_SQRT_DBL_MAX; const double RECUR_SMALL = GSL_SQRT_DBL_MIN; const int maxiter = 10000; int n = 1; double Anm2 = 1.0; double Bnm2 = 0.0; double Anm1 = 0.0; double Bnm1 = 1.0; double a1 = x/(2.0*(nu+1.0)); double An = Anm1 + a1*Anm2; double Bn = Bnm1 + a1*Bnm2; double an; double fn = An/Bn; double dn = a1; double s = 1.0; while(n < maxiter) { double old_fn; double del; n++; Anm2 = Anm1; Bnm2 = Bnm1; Anm1 = An; Bnm1 = Bn; an = -x*x/(4.0*(nu+n-1.0)*(nu+n)); An = Anm1 + an*Anm2; Bn = Bnm1 + an*Bnm2; if(fabs(An) > RECUR_BIG || fabs(Bn) > RECUR_BIG) { An /= RECUR_BIG; Bn /= RECUR_BIG; Anm1 /= RECUR_BIG; Bnm1 /= RECUR_BIG; Anm2 /= RECUR_BIG; } else if(fabs(An) < RECUR_SMALL || fabs(Bn) < RECUR_SMALL) { An /= RECUR_SMALL; Bn /= RECUR_SMALL; Anm1 /= RECUR_SMALL; Bnm1 /= RECUR_SMALL; Anm2 /= RECUR_SMALL; Bnm2 /= RECUR_SMALL; } old_fn = fn; fn = An/Bn; del = old_fn/fn; dn = 1.0 / (2.0*(nu+n)/x - dn); if(dn < 0.0) s = -s; if(fabs(del - 1.0) < 2.0*GSL_DBL_EPSILON) break; } /* FIXME: we should return an error term here as well, because the error from this recurrence affects the overall error estimate. */ *ratio = fn; *sgn = s; if(n >= maxiter) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } /* Evaluate the continued fraction CF1 for J_{nu+1}/J_nu * using Gautschi (Euler) equivalent series. * This exhibits an annoying problem because the * a_k are not positive definite (in fact they are all negative). * There are cases when rho_k blows up. Example: nu=1,x=4. */ #if 0 int gsl_sf_bessel_J_CF1_ser(const double nu, const double x, double * ratio, double * sgn) { const int maxk = 20000; double tk = 1.0; double sum = 1.0; double rhok = 0.0; double dk = 0.0; double s = 1.0; int k; for(k=1; k 2 is a good cutoff. * Also requires |nu| < 1/2. */ int gsl_sf_bessel_K_scaled_steed_temme_CF2(const double nu, const double x, double * K_nu, double * K_nup1, double * Kp_nu) { const int maxiter = 10000; int i = 1; double bi = 2.0*(1.0 + x); double di = 1.0/bi; double delhi = di; double hi = di; double qi = 0.0; double qip1 = 1.0; double ai = -(0.25 - nu*nu); double a1 = ai; double ci = -ai; double Qi = -ai; double s = 1.0 + Qi*delhi; for(i=2; i<=maxiter; i++) { double dels; double tmp; ai -= 2.0*(i-1); ci = -ai*ci/i; tmp = (qi - bi*qip1)/ai; qi = qip1; qip1 = tmp; Qi += ci*qip1; bi += 2.0; di = 1.0/(bi + ai*di); delhi = (bi*di - 1.0) * delhi; hi += delhi; dels = Qi*delhi; s += dels; if(fabs(dels/s) < GSL_DBL_EPSILON) break; } hi *= -a1; *K_nu = sqrt(M_PI/(2.0*x)) / s; *K_nup1 = *K_nu * (nu + x + 0.5 - hi)/x; *Kp_nu = - *K_nup1 + nu/x * *K_nu; if(i == maxiter) GSL_ERROR ("error", GSL_EMAXITER); else return GSL_SUCCESS; } int gsl_sf_bessel_cos_pi4_e(double y, double eps, gsl_sf_result * result) { const double sy = sin(y); const double cy = cos(y); const double s = sy + cy; const double d = sy - cy; const double abs_sum = fabs(cy) + fabs(sy); double seps; double ceps; if(fabs(eps) < GSL_ROOT5_DBL_EPSILON) { const double e2 = eps*eps; seps = eps * (1.0 - e2/6.0 * (1.0 - e2/20.0)); ceps = 1.0 - e2/2.0 * (1.0 - e2/12.0); } else { seps = sin(eps); ceps = cos(eps); } result->val = (ceps * s - seps * d)/ M_SQRT2; result->err = 2.0 * GSL_DBL_EPSILON * (fabs(ceps) + fabs(seps)) * abs_sum / M_SQRT2; /* Try to account for error in evaluation of sin(y), cos(y). * This is a little sticky because we don't really know * how the library routines are doing their argument reduction. * However, we will make a reasonable guess. * FIXME ? */ if(y > 1.0/GSL_DBL_EPSILON) { result->err *= 0.5 * y; } else if(y > 1.0/GSL_SQRT_DBL_EPSILON) { result->err *= 256.0 * y * GSL_SQRT_DBL_EPSILON; } return GSL_SUCCESS; } int gsl_sf_bessel_sin_pi4_e(double y, double eps, gsl_sf_result * result) { const double sy = sin(y); const double cy = cos(y); const double s = sy + cy; const double d = sy - cy; const double abs_sum = fabs(cy) + fabs(sy); double seps; double ceps; if(fabs(eps) < GSL_ROOT5_DBL_EPSILON) { const double e2 = eps*eps; seps = eps * (1.0 - e2/6.0 * (1.0 - e2/20.0)); ceps = 1.0 - e2/2.0 * (1.0 - e2/12.0); } else { seps = sin(eps); ceps = cos(eps); } result->val = (ceps * d + seps * s)/ M_SQRT2; result->err = 2.0 * GSL_DBL_EPSILON * (fabs(ceps) + fabs(seps)) * abs_sum / M_SQRT2; /* Try to account for error in evaluation of sin(y), cos(y). * See above. * FIXME ? */ if(y > 1.0/GSL_DBL_EPSILON) { result->err *= 0.5 * y; } else if(y > 1.0/GSL_SQRT_DBL_EPSILON) { result->err *= 256.0 * y * GSL_SQRT_DBL_EPSILON; } return GSL_SUCCESS; } /************************************************************************ * * Asymptotic approximations 8.11.5, 8.12.5, and 8.42.7 from G.N.Watson, A Treatise on the Theory of Bessel Functions, 2nd Edition (Cambridge University Press, 1944). Higher terms in expansion for x near l given by Airey in Phil. Mag. 31, 520 (1916). This approximation is accurate to near 0.1% at the boundaries between the asymptotic regions; well away from the boundaries the accuracy is better than 10^{-5}. * * ************************************************************************/ #if 0 double besselJ_meissel(double nu, double x) { double beta = pow(nu, 0.325); double result; /* Fitted matching points. */ double llimit = 1.1 * beta; double ulimit = 1.3 * beta; double nu2 = nu * nu; if (nu < 5. && x < 1.) { /* Small argument and order. Use a Taylor expansion. */ int k; double xo2 = 0.5 * x; double gamfactor = pow(nu,nu) * exp(-nu) * sqrt(nu * 2. * M_PI) * (1. + 1./(12.*nu) + 1./(288.*nu*nu)); double prefactor = pow(xo2, nu) / gamfactor; double C[5]; C[0] = 1.; C[1] = -C[0] / (nu+1.); C[2] = -C[1] / (2.*(nu+2.)); C[3] = -C[2] / (3.*(nu+3.)); C[4] = -C[3] / (4.*(nu+4.)); result = 0.; for(k=0; k<5; k++) result += C[k] * pow(xo2, 2.*k); result *= prefactor; } else if(x < nu - llimit) { /* Small x region: x << l. */ double z = x / nu; double z2 = z*z; double rtomz2 = sqrt(1.-z2); double omz2_2 = (1.-z2)*(1.-z2); /* Calculate Meissel exponent. */ double term1 = 1./(24.*nu) * ((2.+3.*z2)/((1.-z2)*rtomz2) -2.); double term2 = - z2*(4. + z2)/(16.*nu2*(1.-z2)*omz2_2); double V_nu = term1 + term2; /* Calculate the harmless prefactor. */ double sterlingsum = 1. + 1./(12.*nu) + 1./(288*nu2); double harmless = 1. / (sqrt(rtomz2*2.*M_PI*nu) * sterlingsum); /* Calculate the logarithm of the nu dependent prefactor. */ double ln_nupre = rtomz2 + log(z) - log(1. + rtomz2); result = harmless * exp(nu*ln_nupre - V_nu); } else if(x < nu + ulimit) { /* Intermediate region 1: x near nu. */ double eps = 1.-nu/x; double eps_x = eps * x; double eps_x_2 = eps_x * eps_x; double xo6 = x/6.; double B[6]; static double gam[6] = {2.67894, 1.35412, 1., 0.89298, 0.902745, 1.}; static double sf[6] = {0.866025, 0.866025, 0., -0.866025, -0.866025, 0.}; /* Some terms are identically zero, because sf[] can be zero. * Some terms do not appear in the result. */ B[0] = 1.; B[1] = eps_x; /* B[2] = 0.5 * eps_x_2 - 1./20.; */ B[3] = eps_x * (eps_x_2/6. - 1./15.); B[4] = eps_x_2 * (eps_x_2 - 1.)/24. + 1./280.; /* B[5] = eps_x * (eps_x_2*(0.5*eps_x_2 - 1.)/60. + 43./8400.); */ result = B[0] * gam[0] * sf[0] / pow(xo6, 1./3.); result += B[1] * gam[1] * sf[1] / pow(xo6, 2./3.); result += B[3] * gam[3] * sf[3] / pow(xo6, 4./3.); result += B[4] * gam[4] * sf[4] / pow(xo6, 5./3.); result /= (3.*M_PI); } else { /* Region of very large argument. Use expansion * for x>>l, and we need not be very exacting. */ double secb = x/nu; double sec2b= secb*secb; double cotb = 1./sqrt(sec2b-1.); /* cotb=cot(beta) */ double beta = acos(nu/x); double trigarg = nu/cotb - nu*beta - 0.25 * M_PI; double cot3b = cotb * cotb * cotb; double cot6b = cot3b * cot3b; double sum1, sum2, expterm, prefactor, trigcos; sum1 = 2.0 + 3.0 * sec2b; trigarg -= sum1 * cot3b / (24.0 * nu); trigcos = cos(trigarg); sum2 = 4.0 + sec2b; expterm = sum2 * sec2b * cot6b / (16.0 * nu2); expterm = exp(-expterm); prefactor = sqrt(2. * cotb / (nu * M_PI)); result = prefactor * expterm * trigcos; } return result; } #endif gsl/specfunc/psi.c0000644000175000017500000006036413536674414012510 0ustar eddedd/* specfunc/psi.c * * Copyright (C) 2007 Brian Gough * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2005, 2006 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include #include #include "error.h" #include "chebyshev.h" #include "cheb_eval.c" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* Chebyshev fit for f(y) = Re(Psi(1+Iy)) + M_EULER - y^2/(1+y^2) - y^2/(2(4+y^2)) * 1 < y < 10 * ==> * y(x) = (9x + 11)/2, -1 < x < 1 * x(y) = (2y - 11)/9 * * g(x) := f(y(x)) */ static double r1py_data[] = { 1.59888328244976954803168395603, 0.67905625353213463845115658455, -0.068485802980122530009506482524, -0.005788184183095866792008831182, 0.008511258167108615980419855648, -0.004042656134699693434334556409, 0.001352328406159402601778462956, -0.000311646563930660566674525382, 0.000018507563785249135437219139, 0.000028348705427529850296492146, -0.000019487536014574535567541960, 8.0709788710834469408621587335e-06, -2.2983564321340518037060346561e-06, 3.0506629599604749843855962658e-07, 1.3042238632418364610774284846e-07, -1.2308657181048950589464690208e-07, 5.7710855710682427240667414345e-08, -1.8275559342450963966092636354e-08, 3.1020471300626589420759518930e-09, 6.8989327480593812470039430640e-10, -8.7182290258923059852334818997e-10, 4.4069147710243611798213548777e-10, -1.4727311099198535963467200277e-10, 2.7589682523262644748825844248e-11, 4.1871826756975856411554363568e-12, -6.5673460487260087541400767340e-12, 3.4487900886723214020103638000e-12, -1.1807251417448690607973794078e-12, 2.3798314343969589258709315574e-13, 2.1663630410818831824259465821e-15 }; static cheb_series r1py_cs = { r1py_data, 29, -1,1, 18 }; /* Chebyshev fits from SLATEC code for psi(x) Series for PSI on the interval 0. to 1.00000D+00 with weighted error 2.03E-17 log weighted error 16.69 significant figures required 16.39 decimal places required 17.37 Series for APSI on the interval 0. to 2.50000D-01 with weighted error 5.54E-17 log weighted error 16.26 significant figures required 14.42 decimal places required 16.86 */ static double psics_data[23] = { -.038057080835217922, .491415393029387130, -.056815747821244730, .008357821225914313, -.001333232857994342, .000220313287069308, -.000037040238178456, .000006283793654854, -.000001071263908506, .000000183128394654, -.000000031353509361, .000000005372808776, -.000000000921168141, .000000000157981265, -.000000000027098646, .000000000004648722, -.000000000000797527, .000000000000136827, -.000000000000023475, .000000000000004027, -.000000000000000691, .000000000000000118, -.000000000000000020 }; static cheb_series psi_cs = { psics_data, 22, -1, 1, 17 }; static double apsics_data[16] = { -.0204749044678185, -.0101801271534859, .0000559718725387, -.0000012917176570, .0000000572858606, -.0000000038213539, .0000000003397434, -.0000000000374838, .0000000000048990, -.0000000000007344, .0000000000001233, -.0000000000000228, .0000000000000045, -.0000000000000009, .0000000000000002, -.0000000000000000 }; static cheb_series apsi_cs = { apsics_data, 15, -1, 1, 9 }; #define PSI_TABLE_NMAX 100 static double psi_table[PSI_TABLE_NMAX+1] = { 0.0, /* Infinity */ /* psi(0) */ -M_EULER, /* psi(1) */ 0.42278433509846713939348790992, /* ... */ 0.92278433509846713939348790992, 1.25611766843180047272682124325, 1.50611766843180047272682124325, 1.70611766843180047272682124325, 1.87278433509846713939348790992, 2.01564147795560999653634505277, 2.14064147795560999653634505277, 2.25175258906672110764745616389, 2.35175258906672110764745616389, 2.44266167997581201673836525479, 2.52599501330914535007169858813, 2.60291809023222227314862166505, 2.67434666166079370172005023648, 2.74101332832746036838671690315, 2.80351332832746036838671690315, 2.86233685773922507426906984432, 2.91789241329478062982462539988, 2.97052399224214905087725697883, 3.02052399224214905087725697883, 3.06814303986119666992487602645, 3.11359758531574212447033057190, 3.15707584618530734186163491973, 3.1987425128519740085283015864, 3.2387425128519740085283015864, 3.2772040513135124700667631249, 3.3142410883505495071038001619, 3.3499553740648352213895144476, 3.3844381326855248765619282407, 3.4177714660188582098952615740, 3.4500295305349872421533260902, 3.4812795305349872421533260902, 3.5115825608380175451836291205, 3.5409943255438998981248055911, 3.5695657541153284695533770196, 3.5973435318931062473311547974, 3.6243705589201332743581818244, 3.6506863483938174848844976139, 3.6763273740348431259101386396, 3.7013273740348431259101386396, 3.7257176179372821503003825420, 3.7495271417468059598241920658, 3.7727829557002943319172153216, 3.7955102284275670591899425943, 3.8177324506497892814121648166, 3.8394715810845718901078169905, 3.8607481768292527411716467777, 3.8815815101625860745049801110, 3.9019896734278921969539597029, 3.9219896734278921969539597029, 3.9415975165651470989147440166, 3.9608282857959163296839747858, 3.9796962103242182164764276160, 3.9982147288427367349949461345, 4.0163965470245549168131279527, 4.0342536898816977739559850956, 4.0517975495308205809735289552, 4.0690389288411654085597358518, 4.0859880813835382899156680552, 4.1026547480502049565823347218, 4.1190481906731557762544658694, 4.1351772229312202923834981274, 4.1510502388042361653993711433, 4.1666752388042361653993711433, 4.1820598541888515500147557587, 4.1972113693403667015299072739, 4.2121367424746950597388624977, 4.2268426248276362362094507330, 4.2413353784508246420065521823, 4.2556210927365389277208378966, 4.2697055997787924488475984600, 4.2835944886676813377364873489, 4.2972931188046676391063503626, 4.3108066323181811526198638761, 4.3241399656515144859531972094, 4.3372978603883565912163551041, 4.3502848733753695782293421171, 4.3631053861958823987421626300, 4.3757636140439836645649474401, 4.3882636140439836645649474401, 4.4006092930563293435772931191, 4.4128044150075488557724150703, 4.4248526077786331931218126607, 4.4367573696833950978837174226, 4.4485220755657480390601880108, 4.4601499825424922251066996387, 4.4716442354160554434975042364, 4.4830078717796918071338678728, 4.4942438268358715824147667492, 4.5053549379469826935258778603, 4.5163439489359936825368668713, 4.5272135141533849868846929582, 4.5379662023254279976373811303, 4.5486045001977684231692960239, 4.5591308159872421073798223397, 4.5695474826539087740464890064, 4.5798567610044242379640147796, 4.5900608426370772991885045755, 4.6001618527380874001986055856 }; #define PSI_1_TABLE_NMAX 100 static double psi_1_table[PSI_1_TABLE_NMAX+1] = { 0.0, /* Infinity */ /* psi(1,0) */ M_PI*M_PI/6.0, /* psi(1,1) */ 0.644934066848226436472415, /* ... */ 0.394934066848226436472415, 0.2838229557371153253613041, 0.2213229557371153253613041, 0.1813229557371153253613041, 0.1535451779593375475835263, 0.1331370146940314251345467, 0.1175120146940314251345467, 0.1051663356816857461222010, 0.0951663356816857461222010, 0.0869018728717683907503002, 0.0799574284273239463058557, 0.0740402686640103368384001, 0.0689382278476838062261552, 0.0644937834032393617817108, 0.0605875334032393617817108, 0.0571273257907826143768665, 0.0540409060376961946237801, 0.0512708229352031198315363, 0.0487708229352031198315363, 0.0465032492390579951149830, 0.0444371335365786562720078, 0.0425467743683366902984728, 0.0408106632572255791873617, 0.0392106632572255791873617, 0.0377313733163971768204978, 0.0363596312039143235969038, 0.0350841209998326909438426, 0.0338950603577399442137594, 0.0327839492466288331026483, 0.0317433665203020901265817, 0.03076680402030209012658168, 0.02984853037475571730748159, 0.02898347847164153045627052, 0.02816715194102928555831133, 0.02739554700275768062003973, 0.02666508681283803124093089, 0.02597256603721476254286995, 0.02531510384129102815759710, 0.02469010384129102815759710, 0.02409521984367056414807896, 0.02352832641963428296894063, 0.02298749353699501850166102, 0.02247096461137518379091722, 0.02197713745088135663042339, 0.02150454765882086513703965, 0.02105185413233829383780923, 0.02061782635456051606003145, 0.02020133322669712580597065, 0.01980133322669712580597065, 0.01941686571420193164987683, 0.01904704322899483105816086, 0.01869104465298913508094477, 0.01834810912486842177504628, 0.01801753061247172756017024, 0.01769865306145131939690494, 0.01739086605006319997554452, 0.01709360088954001329302371, 0.01680632711763538818529605, 0.01652854933985761040751827, 0.01625980437882562975715546, 0.01599965869724394401313881, 0.01574770606433893015574400, 0.01550356543933893015574400, 0.01526687904880638577704578, 0.01503731063741979257227076, 0.01481454387422086185273411, 0.01459828089844231513993134, 0.01438824099085987447620523, 0.01418415935820681325171544, 0.01398578601958352422176106, 0.01379288478501562298719316, 0.01360523231738567365335942, 0.01342261726990576130858221, 0.01324483949212798353080444, 0.01307170929822216635628920, 0.01290304679189732236910755, 0.01273868124291638877278934, 0.01257845051066194236996928, 0.01242220051066194236996928, 0.01226978472038606978956995, 0.01212106372098095378719041, 0.01197590477193174490346273, 0.01183418141592267460867815, 0.01169577311142440471248438, 0.01156056489076458859566448, 0.01142844704164317229232189, 0.01129931481023821361463594, 0.01117306812421372175754719, 0.01104961133409026496742374, 0.01092885297157366069257770, 0.01081070552355853781923177, 0.01069508522063334415522437, 0.01058191183901270133041676, 0.01047110851491297833872701, 0.01036260157046853389428257, 0.01025632035036012704977199, /* ... */ 0.01015219706839427948625679, /* psi(1,99) */ 0.01005016666333357139524567 /* psi(1,100) */ }; /* digamma for x both positive and negative; we do both * cases here because of the way we use even/odd parts * of the function */ static int psi_x(const double x, gsl_sf_result * result) { const double y = fabs(x); if(x == 0.0 || x == -1.0 || x == -2.0) { DOMAIN_ERROR(result); } else if(y >= 2.0) { const double t = 8.0/(y*y)-1.0; gsl_sf_result result_c; cheb_eval_e(&apsi_cs, t, &result_c); if(x < 0.0) { const double s = sin(M_PI*x); const double c = cos(M_PI*x); if(fabs(s) < 2.0*GSL_SQRT_DBL_MIN) { DOMAIN_ERROR(result); } else { result->val = log(y) - 0.5/x + result_c.val - M_PI * c/s; result->err = M_PI*fabs(x)*GSL_DBL_EPSILON/(s*s); result->err += result_c.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } else { result->val = log(y) - 0.5/x + result_c.val; result->err = result_c.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } else { /* -2 < x < 2 */ gsl_sf_result result_c; if(x < -1.0) { /* x = -2 + v */ const double v = x + 2.0; const double t1 = 1.0/x; const double t2 = 1.0/(x+1.0); const double t3 = 1.0/v; cheb_eval_e(&psi_cs, 2.0*v-1.0, &result_c); result->val = -(t1 + t2 + t3) + result_c.val; result->err = GSL_DBL_EPSILON * (fabs(t1) + fabs(x/(t2*t2)) + fabs(x/(t3*t3))); result->err += result_c.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < 0.0) { /* x = -1 + v */ const double v = x + 1.0; const double t1 = 1.0/x; const double t2 = 1.0/v; cheb_eval_e(&psi_cs, 2.0*v-1.0, &result_c); result->val = -(t1 + t2) + result_c.val; result->err = GSL_DBL_EPSILON * (fabs(t1) + fabs(x/(t2*t2))); result->err += result_c.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x < 1.0) { /* x = v */ const double t1 = 1.0/x; cheb_eval_e(&psi_cs, 2.0*x-1.0, &result_c); result->val = -t1 + result_c.val; result->err = GSL_DBL_EPSILON * t1; result->err += result_c.err; result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { /* x = 1 + v */ const double v = x - 1.0; return cheb_eval_e(&psi_cs, 2.0*v-1.0, result); } } } /* psi(z) for large |z| in the right half-plane; [Abramowitz + Stegun, 6.3.18] */ static gsl_complex psi_complex_asymp(gsl_complex z) { /* coefficients in the asymptotic expansion for large z; * let w = z^(-2) and write the expression in the form * * ln(z) - 1/(2z) - 1/12 w (1 + c1 w + c2 w + c3 w + ... ) */ static const double c1 = -0.1; static const double c2 = 1.0/21.0; static const double c3 = -0.05; gsl_complex zi = gsl_complex_inverse(z); gsl_complex w = gsl_complex_mul(zi, zi); gsl_complex cs; /* Horner method evaluation of term in parentheses */ gsl_complex sum; sum = gsl_complex_mul_real(w, c3/c2); sum = gsl_complex_add_real(sum, 1.0); sum = gsl_complex_mul_real(sum, c2/c1); sum = gsl_complex_mul(sum, w); sum = gsl_complex_add_real(sum, 1.0); sum = gsl_complex_mul_real(sum, c1); sum = gsl_complex_mul(sum, w); sum = gsl_complex_add_real(sum, 1.0); /* correction added to log(z) */ cs = gsl_complex_mul(sum, w); cs = gsl_complex_mul_real(cs, -1.0/12.0); cs = gsl_complex_add(cs, gsl_complex_mul_real(zi, -0.5)); return gsl_complex_add(gsl_complex_log(z), cs); } /* psi(z) for complex z in the right half-plane */ static int psi_complex_rhp( gsl_complex z, gsl_sf_result * result_re, gsl_sf_result * result_im ) { int n_recurse = 0; int i; gsl_complex a; if(GSL_REAL(z) == 0.0 && GSL_IMAG(z) == 0.0) { result_re->val = 0.0; result_im->val = 0.0; result_re->err = 0.0; result_im->err = 0.0; return GSL_EDOM; } /* compute the number of recurrences to apply */ if(GSL_REAL(z) < 20.0 && fabs(GSL_IMAG(z)) < 20.0) { const double sp = sqrt(20.0 + GSL_IMAG(z)); const double sn = sqrt(20.0 - GSL_IMAG(z)); const double rhs = sp*sn - GSL_REAL(z); if(rhs > 0.0) n_recurse = ceil(rhs); } /* compute asymptotic at the large value z + n_recurse */ a = psi_complex_asymp(gsl_complex_add_real(z, n_recurse)); result_re->err = 2.0 * GSL_DBL_EPSILON * fabs(GSL_REAL(a)); result_im->err = 2.0 * GSL_DBL_EPSILON * fabs(GSL_IMAG(a)); /* descend recursively, if necessary */ for(i = n_recurse; i >= 1; --i) { gsl_complex zn = gsl_complex_add_real(z, i - 1.0); gsl_complex zn_inverse = gsl_complex_inverse(zn); a = gsl_complex_sub(a, zn_inverse); /* accumulate the error, to catch cancellations */ result_re->err += 2.0 * GSL_DBL_EPSILON * fabs(GSL_REAL(zn_inverse)); result_im->err += 2.0 * GSL_DBL_EPSILON * fabs(GSL_IMAG(zn_inverse)); } result_re->val = GSL_REAL(a); result_im->val = GSL_IMAG(a); result_re->err += 2.0 * GSL_DBL_EPSILON * fabs(result_re->val); result_im->err += 2.0 * GSL_DBL_EPSILON * fabs(result_im->val); return GSL_SUCCESS; } /* generic polygamma; assumes n >= 0 and x > 0 */ static int psi_n_xg0(const int n, const double x, gsl_sf_result * result) { if(n == 0) { return gsl_sf_psi_e(x, result); } else { /* Abramowitz + Stegun 6.4.10 */ gsl_sf_result ln_nf; gsl_sf_result hzeta; int stat_hz = gsl_sf_hzeta_e(n+1.0, x, &hzeta); int stat_nf = gsl_sf_lnfact_e((unsigned int) n, &ln_nf); int stat_e = gsl_sf_exp_mult_err_e(ln_nf.val, ln_nf.err, hzeta.val, hzeta.err, result); if(GSL_IS_EVEN(n)) result->val = -result->val; return GSL_ERROR_SELECT_3(stat_e, stat_nf, stat_hz); } } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_psi_int_e(const int n, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(n <= 0) { DOMAIN_ERROR(result); } else if(n <= PSI_TABLE_NMAX) { result->val = psi_table[n]; result->err = GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { /* Abramowitz+Stegun 6.3.18 */ const double c2 = -1.0/12.0; const double c3 = 1.0/120.0; const double c4 = -1.0/252.0; const double c5 = 1.0/240.0; const double ni2 = (1.0/n)*(1.0/n); const double ser = ni2 * (c2 + ni2 * (c3 + ni2 * (c4 + ni2*c5))); result->val = log(n) - 0.5/n + ser; result->err = GSL_DBL_EPSILON * (fabs(log(n)) + fabs(0.5/n) + fabs(ser)); result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_psi_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ return psi_x(x, result); } int gsl_sf_psi_1piy_e(const double y, gsl_sf_result * result) { const double ay = fabs(y); /* CHECK_POINTER(result) */ if(ay > 1000.0) { /* [Abramowitz+Stegun, 6.3.19] */ const double yi2 = 1.0/(ay*ay); const double lny = log(ay); const double sum = yi2 * (1.0/12.0 + 1.0/120.0 * yi2 + 1.0/252.0 * yi2*yi2); result->val = lny + sum; result->err = 2.0 * GSL_DBL_EPSILON * (fabs(lny) + fabs(sum)); return GSL_SUCCESS; } else if(ay > 10.0) { /* [Abramowitz+Stegun, 6.3.19] */ const double yi2 = 1.0/(ay*ay); const double lny = log(ay); const double sum = yi2 * (1.0/12.0 + yi2 * (1.0/120.0 + yi2 * (1.0/252.0 + yi2 * (1.0/240.0 + yi2 * (1.0/132.0 + 691.0/32760.0 * yi2))))); result->val = lny + sum; result->err = 2.0 * GSL_DBL_EPSILON * (fabs(lny) + fabs(sum)); return GSL_SUCCESS; } else if(ay > 1.0){ const double y2 = ay*ay; const double x = (2.0*ay - 11.0)/9.0; const double v = y2*(1.0/(1.0+y2) + 0.5/(4.0+y2)); gsl_sf_result result_c; cheb_eval_e(&r1py_cs, x, &result_c); result->val = result_c.val - M_EULER + v; result->err = result_c.err; result->err += 2.0 * GSL_DBL_EPSILON * (fabs(v) + M_EULER + fabs(result_c.val)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); result->err *= 5.0; /* FIXME: losing a digit somewhere... maybe at x=... ? */ return GSL_SUCCESS; } else { /* [Abramowitz+Stegun, 6.3.17] * * -M_EULER + y^2 Sum[1/n 1/(n^2 + y^2), {n,1,M}] * + Sum[1/n^3, {n,M+1,Infinity}] * - y^2 Sum[1/n^5, {n,M+1,Infinity}] * + y^4 Sum[1/n^7, {n,M+1,Infinity}] * - y^6 Sum[1/n^9, {n,M+1,Infinity}] * + O(y^8) * * We take M=50 for at least 15 digit precision. */ const int M = 50; const double y2 = y*y; const double c0 = 0.00019603999466879846570; const double c2 = 3.8426659205114376860e-08; const double c4 = 1.0041592839497643554e-11; const double c6 = 2.9516743763500191289e-15; const double p = c0 + y2 *(-c2 + y2*(c4 - y2*c6)); double sum = 0.0; double v; int n; for(n=1; n<=M; n++) { sum += 1.0/(n * (n*n + y*y)); } v = y2 * (sum + p); result->val = -M_EULER + v; result->err = GSL_DBL_EPSILON * (M_EULER + fabs(v)); result->err += 2.0 * GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } } int gsl_sf_psi_1_int_e(const int n, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(n <= 0) { DOMAIN_ERROR(result); } else if(n <= PSI_1_TABLE_NMAX) { result->val = psi_1_table[n]; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } else { /* Abramowitz+Stegun 6.4.12 * double-precision for n > 100 */ const double c0 = -1.0/30.0; const double c1 = 1.0/42.0; const double c2 = -1.0/30.0; const double ni2 = (1.0/n)*(1.0/n); const double ser = ni2*ni2 * (c0 + ni2*(c1 + c2*ni2)); result->val = (1.0 + 0.5/n + 1.0/(6.0*n*n) + ser) / n; result->err = GSL_DBL_EPSILON * result->val; return GSL_SUCCESS; } } int gsl_sf_psi_1_e(const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x == 0.0 || x == -1.0 || x == -2.0) { DOMAIN_ERROR(result); } else if(x > 0.0) { return psi_n_xg0(1, x, result); } else if(x > -5.0) { /* Abramowitz + Stegun 6.4.6 */ int M = -floor(x); double fx = x + M; double sum = 0.0; int m; if(fx == 0.0) DOMAIN_ERROR(result); for(m = 0; m < M; ++m) sum += 1.0/((x+m)*(x+m)); { int stat_psi = psi_n_xg0(1, fx, result); result->val += sum; result->err += M * GSL_DBL_EPSILON * sum; return stat_psi; } } else { /* Abramowitz + Stegun 6.4.7 */ const double sin_px = sin(M_PI * x); const double d = M_PI*M_PI/(sin_px*sin_px); gsl_sf_result r; int stat_psi = psi_n_xg0(1, 1.0-x, &r); result->val = d - r.val; result->err = r.err + 2.0*GSL_DBL_EPSILON*d; return stat_psi; } } int gsl_sf_psi_n_e(const int n, const double x, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(n == 0) { return gsl_sf_psi_e(x, result); } else if(n == 1) { return gsl_sf_psi_1_e(x, result); } else if(n < 0 || x <= 0.0) { DOMAIN_ERROR(result); } else { gsl_sf_result ln_nf; gsl_sf_result hzeta; int stat_hz = gsl_sf_hzeta_e(n+1.0, x, &hzeta); int stat_nf = gsl_sf_lnfact_e((unsigned int) n, &ln_nf); int stat_e = gsl_sf_exp_mult_err_e(ln_nf.val, ln_nf.err, hzeta.val, hzeta.err, result); if(GSL_IS_EVEN(n)) result->val = -result->val; return GSL_ERROR_SELECT_3(stat_e, stat_nf, stat_hz); } } int gsl_sf_complex_psi_e( const double x, const double y, gsl_sf_result * result_re, gsl_sf_result * result_im ) { if(x >= 0.0) { gsl_complex z = gsl_complex_rect(x, y); return psi_complex_rhp(z, result_re, result_im); } else { /* reflection formula [Abramowitz+Stegun, 6.3.7] */ gsl_complex z = gsl_complex_rect(x, y); gsl_complex omz = gsl_complex_rect(1.0 - x, -y); gsl_complex zpi = gsl_complex_mul_real(z, M_PI); gsl_complex cotzpi = gsl_complex_cot(zpi); int ret_val = psi_complex_rhp(omz, result_re, result_im); if(GSL_IS_REAL(GSL_REAL(cotzpi)) && GSL_IS_REAL(GSL_IMAG(cotzpi))) { result_re->val -= M_PI * GSL_REAL(cotzpi); result_im->val -= M_PI * GSL_IMAG(cotzpi); return ret_val; } else { GSL_ERROR("singularity", GSL_EDOM); } } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_psi_int(const int n) { EVAL_RESULT(gsl_sf_psi_int_e(n, &result)); } double gsl_sf_psi(const double x) { EVAL_RESULT(gsl_sf_psi_e(x, &result)); } double gsl_sf_psi_1piy(const double x) { EVAL_RESULT(gsl_sf_psi_1piy_e(x, &result)); } double gsl_sf_psi_1_int(const int n) { EVAL_RESULT(gsl_sf_psi_1_int_e(n, &result)); } double gsl_sf_psi_1(const double x) { EVAL_RESULT(gsl_sf_psi_1_e(x, &result)); } double gsl_sf_psi_n(const int n, const double x) { EVAL_RESULT(gsl_sf_psi_n_e(n, x, &result)); } gsl/specfunc/airy.c0000644000175000017500000005577213536674414012670 0ustar eddedd/* specfunc/airy.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "error.h" #include "check.h" #include "chebyshev.h" #include "cheb_eval_mode.c" /*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/ /* chebyshev expansions for Airy modulus and phase based on SLATEC r9aimp() Series for AM21 on the interval -1.25000D-01 to 0. with weighted error 2.89E-17 log weighted error 16.54 significant figures required 14.15 decimal places required 17.34 Series for ATH1 on the interval -1.25000D-01 to 0. with weighted error 2.53E-17 log weighted error 16.60 significant figures required 15.15 decimal places required 17.38 Series for AM22 on the interval -1.00000D+00 to -1.25000D-01 with weighted error 2.99E-17 log weighted error 16.52 significant figures required 14.57 decimal places required 17.28 Series for ATH2 on the interval -1.00000D+00 to -1.25000D-01 with weighted error 2.57E-17 log weighted error 16.59 significant figures required 15.07 decimal places required 17.34 */ static double am21_data[37] = { 0.0065809191761485, 0.0023675984685722, 0.0001324741670371, 0.0000157600904043, 0.0000027529702663, 0.0000006102679017, 0.0000001595088468, 0.0000000471033947, 0.0000000152933871, 0.0000000053590722, 0.0000000020000910, 0.0000000007872292, 0.0000000003243103, 0.0000000001390106, 0.0000000000617011, 0.0000000000282491, 0.0000000000132979, 0.0000000000064188, 0.0000000000031697, 0.0000000000015981, 0.0000000000008213, 0.0000000000004296, 0.0000000000002284, 0.0000000000001232, 0.0000000000000675, 0.0000000000000374, 0.0000000000000210, 0.0000000000000119, 0.0000000000000068, 0.0000000000000039, 0.0000000000000023, 0.0000000000000013, 0.0000000000000008, 0.0000000000000005, 0.0000000000000003, 0.0000000000000001, 0.0000000000000001 }; static cheb_series am21_cs = { am21_data, 36, -1, 1, 20 }; static double ath1_data[36] = { -0.07125837815669365, -0.00590471979831451, -0.00012114544069499, -0.00000988608542270, -0.00000138084097352, -0.00000026142640172, -0.00000006050432589, -0.00000001618436223, -0.00000000483464911, -0.00000000157655272, -0.00000000055231518, -0.00000000020545441, -0.00000000008043412, -0.00000000003291252, -0.00000000001399875, -0.00000000000616151, -0.00000000000279614, -0.00000000000130428, -0.00000000000062373, -0.00000000000030512, -0.00000000000015239, -0.00000000000007758, -0.00000000000004020, -0.00000000000002117, -0.00000000000001132, -0.00000000000000614, -0.00000000000000337, -0.00000000000000188, -0.00000000000000105, -0.00000000000000060, -0.00000000000000034, -0.00000000000000020, -0.00000000000000011, -0.00000000000000007, -0.00000000000000004, -0.00000000000000002 }; static cheb_series ath1_cs = { ath1_data, 35, -1, 1, 15 }; static double am22_data[33] = { -0.01562844480625341, 0.00778336445239681, 0.00086705777047718, 0.00015696627315611, 0.00003563962571432, 0.00000924598335425, 0.00000262110161850, 0.00000079188221651, 0.00000025104152792, 0.00000008265223206, 0.00000002805711662, 0.00000000976821090, 0.00000000347407923, 0.00000000125828132, 0.00000000046298826, 0.00000000017272825, 0.00000000006523192, 0.00000000002490471, 0.00000000000960156, 0.00000000000373448, 0.00000000000146417, 0.00000000000057826, 0.00000000000022991, 0.00000000000009197, 0.00000000000003700, 0.00000000000001496, 0.00000000000000608, 0.00000000000000248, 0.00000000000000101, 0.00000000000000041, 0.00000000000000017, 0.00000000000000007, 0.00000000000000002 }; static cheb_series am22_cs = { am22_data, 32, -1, 1, 15 }; static double ath2_data[32] = { 0.00440527345871877, -0.03042919452318455, -0.00138565328377179, -0.00018044439089549, -0.00003380847108327, -0.00000767818353522, -0.00000196783944371, -0.00000054837271158, -0.00000016254615505, -0.00000005053049981, -0.00000001631580701, -0.00000000543420411, -0.00000000185739855, -0.00000000064895120, -0.00000000023105948, -0.00000000008363282, -0.00000000003071196, -0.00000000001142367, -0.00000000000429811, -0.00000000000163389, -0.00000000000062693, -0.00000000000024260, -0.00000000000009461, -0.00000000000003716, -0.00000000000001469, -0.00000000000000584, -0.00000000000000233, -0.00000000000000093, -0.00000000000000037, -0.00000000000000015, -0.00000000000000006, -0.00000000000000002 }; static cheb_series ath2_cs = { ath2_data, 31, -1, 1, 16 }; /* Airy modulus and phase for x < -1 */ static int airy_mod_phase(const double x, gsl_mode_t mode, gsl_sf_result * mod, gsl_sf_result * phase) { gsl_sf_result result_m; gsl_sf_result result_p; double m, p; double sqx; if(x < -2.0) { double z = 16.0/(x*x*x) + 1.0; cheb_eval_mode_e(&am21_cs, z, mode, &result_m); cheb_eval_mode_e(&ath1_cs, z, mode, &result_p); } else if(x <= -1.0) { double z = (16.0/(x*x*x) + 9.0)/7.0; cheb_eval_mode_e(&am22_cs, z, mode, &result_m); cheb_eval_mode_e(&ath2_cs, z, mode, &result_p); } else { mod->val = 0.0; mod->err = 0.0; phase->val = 0.0; phase->err = 0.0; GSL_ERROR ("x is greater than 1.0", GSL_EDOM); } m = 0.3125 + result_m.val; p = -0.625 + result_p.val; sqx = sqrt(-x); mod->val = sqrt(m/sqx); mod->err = fabs(mod->val) * (GSL_DBL_EPSILON + fabs(result_m.err/result_m.val)); phase->val = M_PI_4 - x*sqx * p; phase->err = fabs(phase->val) * (GSL_DBL_EPSILON + fabs(result_p.err/result_p.val)); return GSL_SUCCESS; } /* Chebyshev series for Ai(x) with x in [-1,1] based on SLATEC ai(x) series for aif on the interval -1.00000d+00 to 1.00000d+00 with weighted error 1.09e-19 log weighted error 18.96 significant figures required 17.76 decimal places required 19.44 series for aig on the interval -1.00000d+00 to 1.00000d+00 with weighted error 1.51e-17 log weighted error 16.82 significant figures required 15.19 decimal places required 17.27 */ static double ai_data_f[9] = { -0.03797135849666999750, 0.05919188853726363857, 0.00098629280577279975, 0.00000684884381907656, 0.00000002594202596219, 0.00000000006176612774, 0.00000000000010092454, 0.00000000000000012014, 0.00000000000000000010 }; static cheb_series aif_cs = { ai_data_f, 8, -1, 1, 8 }; static double ai_data_g[8] = { 0.01815236558116127, 0.02157256316601076, 0.00025678356987483, 0.00000142652141197, 0.00000000457211492, 0.00000000000952517, 0.00000000000001392, 0.00000000000000001 }; static cheb_series aig_cs = { ai_data_g, 7, -1, 1, 7 }; /* Chebvyshev series for Bi(x) with x in [-1,1] based on SLATEC bi(x) series for bif on the interval -1.00000d+00 to 1.00000d+00 with weighted error 1.88e-19 log weighted error 18.72 significant figures required 17.74 decimal places required 19.20 series for big on the interval -1.00000d+00 to 1.00000d+00 with weighted error 2.61e-17 log weighted error 16.58 significant figures required 15.17 decimal places required 17.03 */ static double data_bif[9] = { -0.01673021647198664948, 0.10252335834249445610, 0.00170830925073815165, 0.00001186254546774468, 0.00000004493290701779, 0.00000000010698207143, 0.00000000000017480643, 0.00000000000000020810, 0.00000000000000000018 }; static cheb_series bif_cs = { data_bif, 8, -1, 1, 8 }; static double data_big[8] = { 0.02246622324857452, 0.03736477545301955, 0.00044476218957212, 0.00000247080756363, 0.00000000791913533, 0.00000000001649807, 0.00000000000002411, 0.00000000000000002 }; static cheb_series big_cs = { data_big, 7, -1, 1, 7 }; /* Chebyshev series for Bi(x) with x in [1,8] based on SLATEC bi(x) */ static double data_bif2[10] = { 0.0998457269381604100, 0.4786249778630055380, 0.0251552119604330118, 0.0005820693885232645, 0.0000074997659644377, 0.0000000613460287034, 0.0000000003462753885, 0.0000000000014288910, 0.0000000000000044962, 0.0000000000000000111 }; static cheb_series bif2_cs = { data_bif2, 9, -1, 1, 9 }; static double data_big2[10] = { 0.033305662145514340, 0.161309215123197068, 0.0063190073096134286, 0.0001187904568162517, 0.0000013045345886200, 0.0000000093741259955, 0.0000000000474580188, 0.0000000000001783107, 0.0000000000000005167, 0.0000000000000000011 }; static cheb_series big2_cs = { data_big2, 9, -1, 1, 9 }; /* chebyshev for Ai(x) asymptotic factor based on SLATEC aie() Series for AIP on the interval 0. to 1.00000D+00 with weighted error 5.10E-17 log weighted error 16.29 significant figures required 14.41 decimal places required 17.06 [GJ] Sun Apr 19 18:14:31 EDT 1998 There was something wrong with these coefficients. I was getting errors after 3 or 4 digits. So I recomputed this table. Now I get double precision agreement with Mathematica. But it does not seem possible that the small differences here would account for the original discrepancy. There must have been something wrong with my original usage... */ static double data_aip[36] = { -0.0187519297793867540198, -0.0091443848250055004725, 0.0009010457337825074652, -0.0001394184127221491507, 0.0000273815815785209370, -0.0000062750421119959424, 0.0000016064844184831521, -0.0000004476392158510354, 0.0000001334635874651668, -0.0000000420735334263215, 0.0000000139021990246364, -0.0000000047831848068048, 0.0000000017047897907465, -0.0000000006268389576018, 0.0000000002369824276612, -0.0000000000918641139267, 0.0000000000364278543037, -0.0000000000147475551725, 0.0000000000060851006556, -0.0000000000025552772234, 0.0000000000010906187250, -0.0000000000004725870319, 0.0000000000002076969064, -0.0000000000000924976214, 0.0000000000000417096723, -0.0000000000000190299093, 0.0000000000000087790676, -0.0000000000000040927557, 0.0000000000000019271068, -0.0000000000000009160199, 0.0000000000000004393567, -0.0000000000000002125503, 0.0000000000000001036735, -0.0000000000000000509642, 0.0000000000000000252377, -0.0000000000000000125793 /* -.0187519297793868 -.0091443848250055, .0009010457337825, -.0001394184127221, .0000273815815785, -.0000062750421119, .0000016064844184, -.0000004476392158, .0000001334635874, -.0000000420735334, .0000000139021990, -.0000000047831848, .0000000017047897, -.0000000006268389, .0000000002369824, -.0000000000918641, .0000000000364278, -.0000000000147475, .0000000000060851, -.0000000000025552, .0000000000010906, -.0000000000004725, .0000000000002076, -.0000000000000924, .0000000000000417, -.0000000000000190, .0000000000000087, -.0000000000000040, .0000000000000019, -.0000000000000009, .0000000000000004, -.0000000000000002, .0000000000000001, -.0000000000000000 */ }; static cheb_series aip_cs = { data_aip, 35, -1, 1, 17 }; /* chebyshev for Bi(x) asymptotic factor based on SLATEC bie() Series for BIP on the interval 1.25000D-01 to 3.53553D-01 with weighted error 1.91E-17 log weighted error 16.72 significant figures required 15.35 decimal places required 17.41 Series for BIP2 on the interval 0. to 1.25000D-01 with weighted error 1.05E-18 log weighted error 17.98 significant figures required 16.74 decimal places required 18.71 */ static double data_bip[24] = { -0.08322047477943447, 0.01146118927371174, 0.00042896440718911, -0.00014906639379950, -0.00001307659726787, 0.00000632759839610, -0.00000042226696982, -0.00000019147186298, 0.00000006453106284, -0.00000000784485467, -0.00000000096077216, 0.00000000070004713, -0.00000000017731789, 0.00000000002272089, 0.00000000000165404, -0.00000000000185171, 0.00000000000059576, -0.00000000000012194, 0.00000000000001334, 0.00000000000000172, -0.00000000000000145, 0.00000000000000049, -0.00000000000000011, 0.00000000000000001 }; static cheb_series bip_cs = { data_bip, 23, -1, 1, 14 }; static double data_bip2[29] = { -0.113596737585988679, 0.0041381473947881595, 0.0001353470622119332, 0.0000104273166530153, 0.0000013474954767849, 0.0000001696537405438, -0.0000000100965008656, -0.0000000167291194937, -0.0000000045815364485, 0.0000000003736681366, 0.0000000005766930320, 0.0000000000621812650, -0.0000000000632941202, -0.0000000000149150479, 0.0000000000078896213, 0.0000000000024960513, -0.0000000000012130075, -0.0000000000003740493, 0.0000000000002237727, 0.0000000000000474902, -0.0000000000000452616, -0.0000000000000030172, 0.0000000000000091058, -0.0000000000000009814, -0.0000000000000016429, 0.0000000000000005533, 0.0000000000000002175, -0.0000000000000001737, -0.0000000000000000010 }; static cheb_series bip2_cs = { data_bip2, 28, -1, 1, 10 }; /* assumes x >= 1.0 */ inline static int airy_aie(const double x, gsl_mode_t mode, gsl_sf_result * result) { double sqx = sqrt(x); double z = 2.0/(x*sqx) - 1.0; double y = sqrt(sqx); gsl_sf_result result_c; cheb_eval_mode_e(&aip_cs, z, mode, &result_c); result->val = (0.28125 + result_c.val)/y; result->err = result_c.err/y + GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } /* assumes x >= 2.0 */ static int airy_bie(const double x, gsl_mode_t mode, gsl_sf_result * result) { const double ATR = 8.7506905708484345; const double BTR = -2.0938363213560543; if(x < 4.0) { double sqx = sqrt(x); double z = ATR/(x*sqx) + BTR; double y = sqrt(sqx); gsl_sf_result result_c; cheb_eval_mode_e(&bip_cs, z, mode, &result_c); result->val = (0.625 + result_c.val)/y; result->err = result_c.err/y + GSL_DBL_EPSILON * fabs(result->val); } else { double sqx = sqrt(x); double z = 16.0/(x*sqx) - 1.0; double y = sqrt(sqx); gsl_sf_result result_c; cheb_eval_mode_e(&bip2_cs, z, mode, &result_c); result->val = (0.625 + result_c.val)/y; result->err = result_c.err/y + GSL_DBL_EPSILON * fabs(result->val); } return GSL_SUCCESS; } /*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_sf_airy_Ai_e(const double x, const gsl_mode_t mode, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x < -1.0) { gsl_sf_result mod; gsl_sf_result theta; gsl_sf_result cos_result; int stat_mp = airy_mod_phase(x, mode, &mod, &theta); int stat_cos = gsl_sf_cos_err_e(theta.val, theta.err, &cos_result); result->val = mod.val * cos_result.val; result->err = fabs(mod.val * cos_result.err) + fabs(cos_result.val * mod.err); result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_mp, stat_cos); } else if(x <= 1.0) { const double z = x*x*x; gsl_sf_result result_c0; gsl_sf_result result_c1; cheb_eval_mode_e(&aif_cs, z, mode, &result_c0); cheb_eval_mode_e(&aig_cs, z, mode, &result_c1); result->val = 0.375 + (result_c0.val - x*(0.25 + result_c1.val)); result->err = result_c0.err + fabs(x*result_c1.err); result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { double x32 = x * sqrt(x); double s = exp(-2.0*x32/3.0); gsl_sf_result result_aie; int stat_aie = airy_aie(x, mode, &result_aie); result->val = result_aie.val * s; result->err = result_aie.err * s + result->val * x32 * GSL_DBL_EPSILON; result->err += GSL_DBL_EPSILON * fabs(result->val); CHECK_UNDERFLOW(result); return stat_aie; } } int gsl_sf_airy_Ai_scaled_e(const double x, gsl_mode_t mode, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x < -1.0) { gsl_sf_result mod; gsl_sf_result theta; gsl_sf_result cos_result; int stat_mp = airy_mod_phase(x, mode, &mod, &theta); int stat_cos = gsl_sf_cos_err_e(theta.val, theta.err, &cos_result); result->val = mod.val * cos_result.val; result->err = fabs(mod.val * cos_result.err) + fabs(cos_result.val * mod.err); result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_mp, stat_cos); } else if(x <= 1.0) { const double z = x*x*x; gsl_sf_result result_c0; gsl_sf_result result_c1; cheb_eval_mode_e(&aif_cs, z, mode, &result_c0); cheb_eval_mode_e(&aig_cs, z, mode, &result_c1); result->val = 0.375 + (result_c0.val - x*(0.25 + result_c1.val)); result->err = result_c0.err + fabs(x*result_c1.err); result->err += GSL_DBL_EPSILON * fabs(result->val); if(x > 0.0) { const double scale = exp(2.0/3.0 * sqrt(z)); result->val *= scale; result->err *= scale; } return GSL_SUCCESS; } else { return airy_aie(x, mode, result); } } int gsl_sf_airy_Bi_e(const double x, gsl_mode_t mode, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x < -1.0) { gsl_sf_result mod; gsl_sf_result theta; gsl_sf_result sin_result; int stat_mp = airy_mod_phase(x, mode, &mod, &theta); int stat_sin = gsl_sf_sin_err_e(theta.val, theta.err, &sin_result); result->val = mod.val * sin_result.val; result->err = fabs(mod.val * sin_result.err) + fabs(sin_result.val * mod.err); result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_mp, stat_sin); } else if(x < 1.0) { const double z = x*x*x; gsl_sf_result result_c0; gsl_sf_result result_c1; cheb_eval_mode_e(&bif_cs, z, mode, &result_c0); cheb_eval_mode_e(&big_cs, z, mode, &result_c1); result->val = 0.625 + result_c0.val + x*(0.4375 + result_c1.val); result->err = result_c0.err + fabs(x * result_c1.err); result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else if(x <= 2.0) { const double z = (2.0*x*x*x - 9.0)/7.0; gsl_sf_result result_c0; gsl_sf_result result_c1; cheb_eval_mode_e(&bif2_cs, z, mode, &result_c0); cheb_eval_mode_e(&big2_cs, z, mode, &result_c1); result->val = 1.125 + result_c0.val + x*(0.625 + result_c1.val); result->err = result_c0.err + fabs(x * result_c1.err); result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { const double y = 2.0*x*sqrt(x)/3.0; const double s = exp(y); if(y > GSL_LOG_DBL_MAX - 1.0) { OVERFLOW_ERROR(result); } else { gsl_sf_result result_bie; int stat_bie = airy_bie(x, mode, &result_bie); result->val = result_bie.val * s; result->err = result_bie.err * s + fabs(1.5*y * (GSL_DBL_EPSILON * result->val)); result->err += GSL_DBL_EPSILON * fabs(result->val); return stat_bie; } } } int gsl_sf_airy_Bi_scaled_e(const double x, gsl_mode_t mode, gsl_sf_result * result) { /* CHECK_POINTER(result) */ if(x < -1.0) { gsl_sf_result mod; gsl_sf_result theta; gsl_sf_result sin_result; int stat_mp = airy_mod_phase(x, mode, &mod, &theta); int stat_sin = gsl_sf_sin_err_e(theta.val, theta.err, &sin_result); result->val = mod.val * sin_result.val; result->err = fabs(mod.val * sin_result.err) + fabs(sin_result.val * mod.err); result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_ERROR_SELECT_2(stat_mp, stat_sin); } else if(x < 1.0) { const double z = x*x*x; gsl_sf_result result_c0; gsl_sf_result result_c1; cheb_eval_mode_e(&bif_cs, z, mode, &result_c0); cheb_eval_mode_e(&big_cs, z, mode, &result_c1); result->val = 0.625 + result_c0.val + x*(0.4375 + result_c1.val); result->err = result_c0.err + fabs(x * result_c1.err); result->err += GSL_DBL_EPSILON * fabs(result->val); if(x > 0.0) { const double scale = exp(-2.0/3.0 * sqrt(z)); result->val *= scale; result->err *= scale; } return GSL_SUCCESS; } else if(x <= 2.0) { const double x3 = x*x*x; const double z = (2.0*x3 - 9.0)/7.0; const double s = exp(-2.0/3.0 * sqrt(x3)); gsl_sf_result result_c0; gsl_sf_result result_c1; cheb_eval_mode_e(&bif2_cs, z, mode, &result_c0); cheb_eval_mode_e(&big2_cs, z, mode, &result_c1); result->val = s * (1.125 + result_c0.val + x*(0.625 + result_c1.val)); result->err = s * (result_c0.err + fabs(x * result_c1.err)); result->err += GSL_DBL_EPSILON * fabs(result->val); return GSL_SUCCESS; } else { return airy_bie(x, mode, result); } } /*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/ #include "eval.h" double gsl_sf_airy_Ai(const double x, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_airy_Ai_e(x, mode, &result)); } double gsl_sf_airy_Ai_scaled(const double x, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_airy_Ai_scaled_e(x, mode, &result)); } double gsl_sf_airy_Bi(const double x, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_airy_Bi_e(x, mode, &result)); } double gsl_sf_airy_Bi_scaled(const double x, gsl_mode_t mode) { EVAL_RESULT(gsl_sf_airy_Bi_scaled_e(x, mode, &result)); } gsl/specfunc/gsl_sf_elljac.h0000644000175000017500000000252413536674414014503 0ustar eddedd/* specfunc/gsl_sf_elljac.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SF_ELLJAC_H__ #define __GSL_SF_ELLJAC_H__ #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Jacobian elliptic functions sn, dn, cn, * by descending Landen transformations * * exceptions: GSL_EDOM */ int gsl_sf_elljac_e(double u, double m, double * sn, double * cn, double * dn); __END_DECLS #endif /* __GSL_SF_ELLJAC_H__ */ gsl/pkgconfig.test0000755000175000017500000000036313536674414012607 0ustar eddedd#!/bin/sh set -e # skip test if we have no pkg-config pkg-config --version >/dev/null 2>&1 || exit 77 PKG_CONFIG_PATH=. export PKG_CONFIG_PATH pkg-config --define-variable=GSL_CBLAS_LIB=-lfoo --libs gsl | grep 'lfoo' > /dev/null 2>&1 exit 0 gsl/gsl_pow_int.h0000644000175000017500000000437513536674414012440 0ustar eddedd/* gsl_pow_int.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_POW_INT_H__ #define __GSL_POW_INT_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS INLINE_DECL double gsl_pow_2(const double x); INLINE_DECL double gsl_pow_3(const double x); INLINE_DECL double gsl_pow_4(const double x); INLINE_DECL double gsl_pow_5(const double x); INLINE_DECL double gsl_pow_6(const double x); INLINE_DECL double gsl_pow_7(const double x); INLINE_DECL double gsl_pow_8(const double x); INLINE_DECL double gsl_pow_9(const double x); #ifdef HAVE_INLINE INLINE_FUN double gsl_pow_2(const double x) { return x*x; } INLINE_FUN double gsl_pow_3(const double x) { return x*x*x; } INLINE_FUN double gsl_pow_4(const double x) { double x2 = x*x; return x2*x2; } INLINE_FUN double gsl_pow_5(const double x) { double x2 = x*x; return x2*x2*x; } INLINE_FUN double gsl_pow_6(const double x) { double x2 = x*x; return x2*x2*x2; } INLINE_FUN double gsl_pow_7(const double x) { double x3 = x*x*x; return x3*x3*x; } INLINE_FUN double gsl_pow_8(const double x) { double x2 = x*x; double x4 = x2*x2; return x4*x4; } INLINE_FUN double gsl_pow_9(const double x) { double x3 = x*x*x; return x3*x3*x3; } #endif double gsl_pow_int(double x, int n); double gsl_pow_uint(double x, unsigned int n); __END_DECLS #endif /* __GSL_POW_INT_H__ */ gsl/block/0000755000175000017500000000000014057135461011015 5ustar eddeddgsl/block/test_complex_io.c0000644000175000017500000000325613536674414014373 0ustar eddedd/* block/test_complex_io.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ void FUNCTION (test, text) (void); void FUNCTION (test, text) (void) { size_t i; { TYPE (gsl_block) *v = FUNCTION (gsl_block, calloc) (N); FILE *f = fopen ("test.txt", "w"); for (i = 0; i < N; i++) { v->data[2*i] = (ATOMIC)i ; v->data[2*i + 1] = (ATOMIC)(10*i + 1) ; }; FUNCTION (gsl_block, fprintf) (f, v, OUT_FORMAT); fclose (f); FUNCTION (gsl_block, free) (v); } { TYPE (gsl_block) *w = FUNCTION (gsl_block, calloc) (N); FILE *f = fopen ("test.txt", "r"); FUNCTION (gsl_block, fscanf) (f, w); status = 0; for (i = 0; i < N; i++) { if (w->data[2 * i] != (ATOMIC) i || w->data[2 * i + 1] != (ATOMIC) (10*i + 1)) status = 1; }; fclose (f); FUNCTION (gsl_block, free) (w); } gsl_test (status, NAME (gsl_block) "_fprintf and fscanf"); } gsl/block/gsl_block_long.h0000644000175000017500000000436213536674414014160 0ustar eddedd/* block/gsl_block_long.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BLOCK_LONG_H__ #define __GSL_BLOCK_LONG_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_block_long_struct { size_t size; long *data; }; typedef struct gsl_block_long_struct gsl_block_long; gsl_block_long *gsl_block_long_alloc (const size_t n); gsl_block_long *gsl_block_long_calloc (const size_t n); void gsl_block_long_free (gsl_block_long * b); int gsl_block_long_fread (FILE * stream, gsl_block_long * b); int gsl_block_long_fwrite (FILE * stream, const gsl_block_long * b); int gsl_block_long_fscanf (FILE * stream, gsl_block_long * b); int gsl_block_long_fprintf (FILE * stream, const gsl_block_long * b, const char *format); int gsl_block_long_raw_fread (FILE * stream, long * b, const size_t n, const size_t stride); int gsl_block_long_raw_fwrite (FILE * stream, const long * b, const size_t n, const size_t stride); int gsl_block_long_raw_fscanf (FILE * stream, long * b, const size_t n, const size_t stride); int gsl_block_long_raw_fprintf (FILE * stream, const long * b, const size_t n, const size_t stride, const char *format); size_t gsl_block_long_size (const gsl_block_long * b); long * gsl_block_long_data (const gsl_block_long * b); __END_DECLS #endif /* __GSL_BLOCK_LONG_H__ */ gsl/block/gsl_block_uchar.h0000644000175000017500000000450513536674414014322 0ustar eddedd/* block/gsl_block_uchar.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BLOCK_UCHAR_H__ #define __GSL_BLOCK_UCHAR_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_block_uchar_struct { size_t size; unsigned char *data; }; typedef struct gsl_block_uchar_struct gsl_block_uchar; gsl_block_uchar *gsl_block_uchar_alloc (const size_t n); gsl_block_uchar *gsl_block_uchar_calloc (const size_t n); void gsl_block_uchar_free (gsl_block_uchar * b); int gsl_block_uchar_fread (FILE * stream, gsl_block_uchar * b); int gsl_block_uchar_fwrite (FILE * stream, const gsl_block_uchar * b); int gsl_block_uchar_fscanf (FILE * stream, gsl_block_uchar * b); int gsl_block_uchar_fprintf (FILE * stream, const gsl_block_uchar * b, const char *format); int gsl_block_uchar_raw_fread (FILE * stream, unsigned char * b, const size_t n, const size_t stride); int gsl_block_uchar_raw_fwrite (FILE * stream, const unsigned char * b, const size_t n, const size_t stride); int gsl_block_uchar_raw_fscanf (FILE * stream, unsigned char * b, const size_t n, const size_t stride); int gsl_block_uchar_raw_fprintf (FILE * stream, const unsigned char * b, const size_t n, const size_t stride, const char *format); size_t gsl_block_uchar_size (const gsl_block_uchar * b); unsigned char * gsl_block_uchar_data (const gsl_block_uchar * b); __END_DECLS #endif /* __GSL_BLOCK_UCHAR_H__ */ gsl/block/Makefile.in0000664000175000017500000010662314057135461013074 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = block ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslblock_la_LIBADD = am_libgslblock_la_OBJECTS = init.lo file.lo block.lo libgslblock_la_OBJECTS = $(am_libgslblock_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslblock.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/block.Plo ./$(DEPDIR)/file.Plo \ ./$(DEPDIR)/init.Plo ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslblock_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslblock_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslblock.la pkginclude_HEADERS = gsl_block.h gsl_block_char.h gsl_block_complex_double.h gsl_block_complex_float.h gsl_block_complex_long_double.h gsl_block_double.h gsl_block_float.h gsl_block_int.h gsl_block_long.h gsl_block_long_double.h gsl_block_short.h gsl_block_uchar.h gsl_block_uint.h gsl_block_ulong.h gsl_block_ushort.h gsl_check_range.h AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c CLEANFILES = test.txt test.dat noinst_HEADERS = block_source.c init_source.c fprintf_source.c fwrite_source.c test_complex_source.c test_source.c test_io.c test_complex_io.c libgslblock_la_SOURCES = init.c file.c block.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu block/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu block/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslblock.la: $(libgslblock_la_OBJECTS) $(libgslblock_la_DEPENDENCIES) $(EXTRA_libgslblock_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslblock_la_OBJECTS) $(libgslblock_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/block.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/block.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/init.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/block.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/init.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/block/gsl_block_ushort.h0000644000175000017500000000455013536674414014544 0ustar eddedd/* block/gsl_block_ushort.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BLOCK_USHORT_H__ #define __GSL_BLOCK_USHORT_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_block_ushort_struct { size_t size; unsigned short *data; }; typedef struct gsl_block_ushort_struct gsl_block_ushort; gsl_block_ushort *gsl_block_ushort_alloc (const size_t n); gsl_block_ushort *gsl_block_ushort_calloc (const size_t n); void gsl_block_ushort_free (gsl_block_ushort * b); int gsl_block_ushort_fread (FILE * stream, gsl_block_ushort * b); int gsl_block_ushort_fwrite (FILE * stream, const gsl_block_ushort * b); int gsl_block_ushort_fscanf (FILE * stream, gsl_block_ushort * b); int gsl_block_ushort_fprintf (FILE * stream, const gsl_block_ushort * b, const char *format); int gsl_block_ushort_raw_fread (FILE * stream, unsigned short * b, const size_t n, const size_t stride); int gsl_block_ushort_raw_fwrite (FILE * stream, const unsigned short * b, const size_t n, const size_t stride); int gsl_block_ushort_raw_fscanf (FILE * stream, unsigned short * b, const size_t n, const size_t stride); int gsl_block_ushort_raw_fprintf (FILE * stream, const unsigned short * b, const size_t n, const size_t stride, const char *format); size_t gsl_block_ushort_size (const gsl_block_ushort * b); unsigned short * gsl_block_ushort_data (const gsl_block_ushort * b); __END_DECLS #endif /* __GSL_BLOCK_USHORT_H__ */ gsl/block/gsl_block_ulong.h0000644000175000017500000000450513536674414014344 0ustar eddedd/* block/gsl_block_ulong.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BLOCK_ULONG_H__ #define __GSL_BLOCK_ULONG_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_block_ulong_struct { size_t size; unsigned long *data; }; typedef struct gsl_block_ulong_struct gsl_block_ulong; gsl_block_ulong *gsl_block_ulong_alloc (const size_t n); gsl_block_ulong *gsl_block_ulong_calloc (const size_t n); void gsl_block_ulong_free (gsl_block_ulong * b); int gsl_block_ulong_fread (FILE * stream, gsl_block_ulong * b); int gsl_block_ulong_fwrite (FILE * stream, const gsl_block_ulong * b); int gsl_block_ulong_fscanf (FILE * stream, gsl_block_ulong * b); int gsl_block_ulong_fprintf (FILE * stream, const gsl_block_ulong * b, const char *format); int gsl_block_ulong_raw_fread (FILE * stream, unsigned long * b, const size_t n, const size_t stride); int gsl_block_ulong_raw_fwrite (FILE * stream, const unsigned long * b, const size_t n, const size_t stride); int gsl_block_ulong_raw_fscanf (FILE * stream, unsigned long * b, const size_t n, const size_t stride); int gsl_block_ulong_raw_fprintf (FILE * stream, const unsigned long * b, const size_t n, const size_t stride, const char *format); size_t gsl_block_ulong_size (const gsl_block_ulong * b); unsigned long * gsl_block_ulong_data (const gsl_block_ulong * b); __END_DECLS #endif /* __GSL_BLOCK_ULONG_H__ */ gsl/block/gsl_block_float.h0000644000175000017500000000442513536674414014326 0ustar eddedd/* block/gsl_block_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BLOCK_FLOAT_H__ #define __GSL_BLOCK_FLOAT_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_block_float_struct { size_t size; float *data; }; typedef struct gsl_block_float_struct gsl_block_float; gsl_block_float *gsl_block_float_alloc (const size_t n); gsl_block_float *gsl_block_float_calloc (const size_t n); void gsl_block_float_free (gsl_block_float * b); int gsl_block_float_fread (FILE * stream, gsl_block_float * b); int gsl_block_float_fwrite (FILE * stream, const gsl_block_float * b); int gsl_block_float_fscanf (FILE * stream, gsl_block_float * b); int gsl_block_float_fprintf (FILE * stream, const gsl_block_float * b, const char *format); int gsl_block_float_raw_fread (FILE * stream, float * b, const size_t n, const size_t stride); int gsl_block_float_raw_fwrite (FILE * stream, const float * b, const size_t n, const size_t stride); int gsl_block_float_raw_fscanf (FILE * stream, float * b, const size_t n, const size_t stride); int gsl_block_float_raw_fprintf (FILE * stream, const float * b, const size_t n, const size_t stride, const char *format); size_t gsl_block_float_size (const gsl_block_float * b); float * gsl_block_float_data (const gsl_block_float * b); __END_DECLS #endif /* __GSL_BLOCK_FLOAT_H__ */ gsl/block/test_complex_source.c0000644000175000017500000000711113536674414015256 0ustar eddedd/* block/test_complex_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ void FUNCTION (test, func) (void); void FUNCTION (test, binary) (void); void FUNCTION (test, trap) (void); void FUNCTION (test, func) (void) { TYPE (gsl_block) * b; ATOMIC * data; size_t i, size; b = FUNCTION (gsl_block, alloc) (N); gsl_test (b->data == 0, NAME (gsl_block) "_alloc returns valid pointer"); gsl_test (b->size != N, NAME (gsl_block) "_alloc returns valid size"); data = FUNCTION(gsl_block, data) (b); size = FUNCTION(gsl_block, size) (b); gsl_test (data == 0, NAME (gsl_block) "_data returns valid pointer"); gsl_test (size != N, NAME (gsl_block) "_size returns valid size"); FUNCTION (gsl_block, free) (b); /* free whatever is in v */ b = FUNCTION (gsl_block, calloc) (N); gsl_test (b->data == 0, NAME (gsl_block) "_calloc returns valid pointer"); gsl_test (b->size != N, NAME (gsl_block) "_calloc returns valid size"); data = FUNCTION(gsl_block, data) (b); size = FUNCTION(gsl_block, size) (b); gsl_test (data == 0, NAME (gsl_block) "_data returns valid pointer from calloc"); gsl_test (size != N, NAME (gsl_block) "_size returns valid size from calloc"); status = 0; for (i = 0; i < N; i++) { if (b->data[2 * i] != 0.0 || b->data[2 * i + 1] != 0.0) status = 1; }; gsl_test (status, NAME (gsl_block) "_calloc initializes array to zero"); FUNCTION (gsl_block, free) (b); } void FUNCTION (test, binary) (void) { size_t i; { TYPE (gsl_block) * v = FUNCTION (gsl_block, calloc) (N); FILE *f = fopen ("test.dat", "wb"); for (i = 0; i < N; i++) { v->data[2*i] = (ATOMIC)(N - i); v->data[2*i + 1] = (ATOMIC)(10*(N-i) + 1); }; FUNCTION (gsl_block, fwrite) (f, v); fclose (f); FUNCTION (gsl_block, free) (v); } { TYPE (gsl_block) * w = FUNCTION (gsl_block, calloc) (N); FILE *f = fopen ("test.dat", "rb"); FUNCTION (gsl_block, fread) (f, w); status = 0; for (i = 0; i < N; i++) { if (w->data[2 * i] != (ATOMIC) (N - i) || w->data[2 * i + 1] != (ATOMIC) (10*(N - i) + 1)) status = 1; }; fclose (f); FUNCTION (gsl_block, free) (w); } gsl_test (status, NAME (gsl_block) "_write and read"); } void FUNCTION (test, alloc_zero_length) (void) { TYPE (gsl_block) * b = FUNCTION (gsl_block, alloc) (0); gsl_test (b == 0, NAME (gsl_block) "_alloc permits zero length"); gsl_test (b->size != 0, NAME (gsl_block) "_alloc reflects zero length"); FUNCTION (gsl_block, free) (b); } void FUNCTION (test, calloc_zero_length) (void) { TYPE (gsl_block) * b = FUNCTION (gsl_block, calloc) (0); gsl_test (b == 0, NAME (gsl_block) "_calloc permits zero length"); gsl_test (b->size != 0, NAME (gsl_block) "_calloc reflects zero length"); FUNCTION (gsl_block, free) (b); } gsl/block/ChangeLog0000644000175000017500000000301213536674414012572 0ustar eddedd2017-01-07 Rhys Ulerich * init_source.c: permit zero-length blocks (#49988) * test_source.c: zero-length for alloc and calloc * test_complex_source.c: zero-length for alloc and calloc * test.c: rename trap as alloc_zero_length, add calloc tests 2009-07-09 Brian Gough * init_source.c (FUNCTION): handle NULL argument in free 2008-07-03 Brian Gough * Makefile.am (INCLUDES): remove top_builddir 2005-05-21 Brian Gough * Makefile.am (pkginclude_HEADERS): removed unused file gsl_block_complex.h 2004-06-03 Brian Gough * gsl_check_range.h: provide backwards-compatible support for GSL_RANGE_CHECK_OFF and GSL_RANGE_CHECK Sat Jul 15 21:45:10 2000 Brian Gough * init_source.c (FUNCTION): changed GSL_EDOM to GSL_EINVAL for invalid size arguments Sun May 28 12:22:26 2000 Brian Gough * test_complex_source.c (FUNCTION): use binary mode "b" when reading and writing binary files * test_source.c (FUNCTION): use binary mode "b" when reading and writing binary files Thu Mar 2 20:51:23 2000 Brian Gough * fprintf_source.c: all input is now done through an ATOMIC_IO type, since char has to be written/read using a different type (int). Fri Oct 1 15:48:31 1999 Brian Gough * this directory handles the memory management for vectors and matrices gsl/block/init_source.c0000644000175000017500000000371613536674414013522 0ustar eddedd/* block/init_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2009 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ TYPE (gsl_block) * FUNCTION (gsl_block, alloc) (const size_t n) { TYPE (gsl_block) * b; b = (TYPE (gsl_block) *) malloc (sizeof (TYPE (gsl_block))); if (b == 0) { GSL_ERROR_VAL ("failed to allocate space for block struct", GSL_ENOMEM, 0); } b->data = (ATOMIC *) malloc (MULTIPLICITY * n * sizeof (ATOMIC)); if (b->data == 0 && n > 0) /* malloc may return NULL when n == 0 */ { free (b); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for block data", GSL_ENOMEM, 0); } b->size = n; return b; } TYPE (gsl_block) * FUNCTION (gsl_block, calloc) (const size_t n) { size_t i; TYPE (gsl_block) * b = FUNCTION (gsl_block, alloc) (n); if (b == 0) return 0; /* initialize block to zero; the memset call takes care of padding bytes */ memset(b->data, 0, MULTIPLICITY * n * sizeof(ATOMIC)); for (i = 0; i < MULTIPLICITY * n; i++) { b->data[i] = 0; } return b; } void FUNCTION (gsl_block, free) (TYPE (gsl_block) * b) { RETURN_IF_NULL (b); free (b->data); free (b); } gsl/block/gsl_block_int.h0000644000175000017500000000431713536674414014013 0ustar eddedd/* block/gsl_block_int.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BLOCK_INT_H__ #define __GSL_BLOCK_INT_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_block_int_struct { size_t size; int *data; }; typedef struct gsl_block_int_struct gsl_block_int; gsl_block_int *gsl_block_int_alloc (const size_t n); gsl_block_int *gsl_block_int_calloc (const size_t n); void gsl_block_int_free (gsl_block_int * b); int gsl_block_int_fread (FILE * stream, gsl_block_int * b); int gsl_block_int_fwrite (FILE * stream, const gsl_block_int * b); int gsl_block_int_fscanf (FILE * stream, gsl_block_int * b); int gsl_block_int_fprintf (FILE * stream, const gsl_block_int * b, const char *format); int gsl_block_int_raw_fread (FILE * stream, int * b, const size_t n, const size_t stride); int gsl_block_int_raw_fwrite (FILE * stream, const int * b, const size_t n, const size_t stride); int gsl_block_int_raw_fscanf (FILE * stream, int * b, const size_t n, const size_t stride); int gsl_block_int_raw_fprintf (FILE * stream, const int * b, const size_t n, const size_t stride, const char *format); size_t gsl_block_int_size (const gsl_block_int * b); int * gsl_block_int_data (const gsl_block_int * b); __END_DECLS #endif /* __GSL_BLOCK_INT_H__ */ gsl/block/Makefile.am0000644000175000017500000000152013536674414013056 0ustar eddeddnoinst_LTLIBRARIES = libgslblock.la check_PROGRAMS = test pkginclude_HEADERS = gsl_block.h gsl_block_char.h gsl_block_complex_double.h gsl_block_complex_float.h gsl_block_complex_long_double.h gsl_block_double.h gsl_block_float.h gsl_block_int.h gsl_block_long.h gsl_block_long_double.h gsl_block_short.h gsl_block_uchar.h gsl_block_uint.h gsl_block_ulong.h gsl_block_ushort.h gsl_check_range.h AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c CLEANFILES = test.txt test.dat noinst_HEADERS = block_source.c init_source.c fprintf_source.c fwrite_source.c test_complex_source.c test_source.c test_io.c test_complex_io.c libgslblock_la_SOURCES = init.c file.c block.c gsl/block/test_io.c0000644000175000017500000000311413536674414012635 0ustar eddedd/* block/test_io.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ void FUNCTION (test, text) (void); void FUNCTION (test, text) (void) { size_t i; { TYPE (gsl_block) * v = FUNCTION (gsl_block, calloc) (N); FILE *f = fopen ("test.txt", "w"); for (i = 0; i < N; i++) { v->data[i] = (ATOMIC) i; }; FUNCTION (gsl_block, fprintf) (f, v, OUT_FORMAT); fclose (f); FUNCTION (gsl_block, free) (v); } { TYPE (gsl_block) * w = FUNCTION (gsl_block, calloc) (N); FILE *f = fopen ("test.txt", "r"); FUNCTION (gsl_block, fscanf) (f, w); status = 0; for (i = 0; i < N; i++) { if (w->data[i] != (ATOMIC) i) status = 1; }; gsl_test (status, NAME (gsl_block) "_fprintf and fscanf"); fclose (f); FUNCTION (gsl_block, free) (w); } } gsl/block/gsl_block_long_double.h0000644000175000017500000000474713536674414015521 0ustar eddedd/* block/gsl_block_long_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BLOCK_LONG_DOUBLE_H__ #define __GSL_BLOCK_LONG_DOUBLE_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_block_long_double_struct { size_t size; long double *data; }; typedef struct gsl_block_long_double_struct gsl_block_long_double; gsl_block_long_double *gsl_block_long_double_alloc (const size_t n); gsl_block_long_double *gsl_block_long_double_calloc (const size_t n); void gsl_block_long_double_free (gsl_block_long_double * b); int gsl_block_long_double_fread (FILE * stream, gsl_block_long_double * b); int gsl_block_long_double_fwrite (FILE * stream, const gsl_block_long_double * b); int gsl_block_long_double_fscanf (FILE * stream, gsl_block_long_double * b); int gsl_block_long_double_fprintf (FILE * stream, const gsl_block_long_double * b, const char *format); int gsl_block_long_double_raw_fread (FILE * stream, long double * b, const size_t n, const size_t stride); int gsl_block_long_double_raw_fwrite (FILE * stream, const long double * b, const size_t n, const size_t stride); int gsl_block_long_double_raw_fscanf (FILE * stream, long double * b, const size_t n, const size_t stride); int gsl_block_long_double_raw_fprintf (FILE * stream, const long double * b, const size_t n, const size_t stride, const char *format); size_t gsl_block_long_double_size (const gsl_block_long_double * b); long double * gsl_block_long_double_data (const gsl_block_long_double * b); __END_DECLS #endif /* __GSL_BLOCK_LONG_DOUBLE_H__ */ gsl/block/gsl_block_char.h0000644000175000017500000000436213536674414014136 0ustar eddedd/* block/gsl_block_char.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BLOCK_CHAR_H__ #define __GSL_BLOCK_CHAR_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_block_char_struct { size_t size; char *data; }; typedef struct gsl_block_char_struct gsl_block_char; gsl_block_char *gsl_block_char_alloc (const size_t n); gsl_block_char *gsl_block_char_calloc (const size_t n); void gsl_block_char_free (gsl_block_char * b); int gsl_block_char_fread (FILE * stream, gsl_block_char * b); int gsl_block_char_fwrite (FILE * stream, const gsl_block_char * b); int gsl_block_char_fscanf (FILE * stream, gsl_block_char * b); int gsl_block_char_fprintf (FILE * stream, const gsl_block_char * b, const char *format); int gsl_block_char_raw_fread (FILE * stream, char * b, const size_t n, const size_t stride); int gsl_block_char_raw_fwrite (FILE * stream, const char * b, const size_t n, const size_t stride); int gsl_block_char_raw_fscanf (FILE * stream, char * b, const size_t n, const size_t stride); int gsl_block_char_raw_fprintf (FILE * stream, const char * b, const size_t n, const size_t stride, const char *format); size_t gsl_block_char_size (const gsl_block_char * b); char * gsl_block_char_data (const gsl_block_char * b); __END_DECLS #endif /* __GSL_BLOCK_CHAR_H__ */ gsl/block/fprintf_source.c0000644000175000017500000000762613536674414014233 0ustar eddedd/* block/fprintf_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #if !(USES_LONGDOUBLE && !HAVE_PRINTF_LONGDOUBLE) int FUNCTION (gsl_block, fprintf) (FILE * stream, const TYPE(gsl_block) * b, const char *format) { size_t n = b->size ; ATOMIC * data = b->data ; size_t i; for (i = 0; i < n; i++) { int k; int status; for (k = 0; k < MULTIPLICITY; k++) { if (k > 0) { status = putc (' ', stream); if (status == EOF) { GSL_ERROR ("putc failed", GSL_EFAILED); } } status = fprintf (stream, format, data[MULTIPLICITY * i + k]); if (status < 0) { GSL_ERROR ("fprintf failed", GSL_EFAILED); } } status = putc ('\n', stream); if (status == EOF) { GSL_ERROR ("putc failed", GSL_EFAILED); } } return 0; } int FUNCTION (gsl_block, fscanf) (FILE * stream, TYPE(gsl_block) * b) { size_t n = b->size ; ATOMIC * data = b->data ; size_t i; for (i = 0; i < n; i++) { int k; for (k = 0; k < MULTIPLICITY; k++) { ATOMIC_IO tmp ; int status = fscanf (stream, IN_FORMAT, &tmp) ; data [MULTIPLICITY * i + k] = tmp; if (status != 1) { GSL_ERROR ("fscanf failed", GSL_EFAILED); } } } return GSL_SUCCESS; } int FUNCTION (gsl_block, raw_fprintf) (FILE * stream, const ATOMIC * data, const size_t n, const size_t stride, const char *format) { size_t i; for (i = 0; i < n; i++) { int k; int status; for (k = 0; k < MULTIPLICITY; k++) { if (k > 0) { status = putc (' ', stream); if (status == EOF) { GSL_ERROR ("putc failed", GSL_EFAILED); } } status = fprintf (stream, format, data[MULTIPLICITY * i * stride + k]); if (status < 0) { GSL_ERROR ("fprintf failed", GSL_EFAILED); } } status = putc ('\n', stream); if (status == EOF) { GSL_ERROR ("putc failed", GSL_EFAILED); } } return 0; } int FUNCTION (gsl_block, raw_fscanf) (FILE * stream, ATOMIC * data, const size_t n, const size_t stride) { size_t i; for (i = 0; i < n; i++) { int k; for (k = 0; k < MULTIPLICITY; k++) { ATOMIC_IO tmp; int status = fscanf (stream, IN_FORMAT, &tmp) ; data [MULTIPLICITY * i * stride + k] = tmp; if (status != 1) { GSL_ERROR ("fscanf failed", GSL_EFAILED); } } } return GSL_SUCCESS; } #endif gsl/block/fwrite_source.c0000644000175000017500000000551313536674414014054 0ustar eddedd/* block/fwrite_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION (gsl_block, fread) (FILE * stream, TYPE(gsl_block) * b) { size_t n = b->size ; ATOMIC * data = b->data ; size_t items = fread (data, MULTIPLICITY * sizeof (ATOMIC), n, stream); if (items != n) { GSL_ERROR ("fread failed", GSL_EFAILED); } return 0; } int FUNCTION (gsl_block, fwrite) (FILE * stream, const TYPE(gsl_block) * b) { size_t n = b->size ; ATOMIC * data = b->data ; size_t items = fwrite (data, MULTIPLICITY * sizeof (ATOMIC), n, stream); if (items != n) { GSL_ERROR ("fwrite failed", GSL_EFAILED); } return 0; } int FUNCTION (gsl_block, raw_fread) (FILE * stream, ATOMIC * data, const size_t n, const size_t stride) { if (stride == 1) { size_t items = fread (data, MULTIPLICITY * sizeof (ATOMIC), n, stream); if (items != n) { GSL_ERROR ("fread failed", GSL_EFAILED); } } else { size_t i; for (i = 0; i < n; i++) { size_t item = fread (data + MULTIPLICITY * i * stride, MULTIPLICITY * sizeof (ATOMIC), 1, stream); if (item != 1) { GSL_ERROR ("fread failed", GSL_EFAILED); } } } return GSL_SUCCESS; } int FUNCTION (gsl_block, raw_fwrite) (FILE * stream, const ATOMIC * data, const size_t n, const size_t stride) { if (stride == 1) { size_t items = fwrite (data, MULTIPLICITY * sizeof (ATOMIC), n, stream); if (items != n) { GSL_ERROR ("fwrite failed", GSL_EFAILED); } } else { size_t i; for (i = 0; i < n; i++) { size_t item = fwrite (data + MULTIPLICITY * i * stride, MULTIPLICITY * sizeof (ATOMIC), 1, stream); if (item != 1) { GSL_ERROR ("fwrite failed", GSL_EFAILED); } } } return GSL_SUCCESS; } gsl/block/gsl_block_complex_long_double.h0000644000175000017500000000531713536674414017242 0ustar eddedd/* block/gsl_block_complex_long_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BLOCK_COMPLEX_LONG_DOUBLE_H__ #define __GSL_BLOCK_COMPLEX_LONG_DOUBLE_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_block_complex_long_double_struct { size_t size; long double *data; }; typedef struct gsl_block_complex_long_double_struct gsl_block_complex_long_double; gsl_block_complex_long_double *gsl_block_complex_long_double_alloc (const size_t n); gsl_block_complex_long_double *gsl_block_complex_long_double_calloc (const size_t n); void gsl_block_complex_long_double_free (gsl_block_complex_long_double * b); int gsl_block_complex_long_double_fread (FILE * stream, gsl_block_complex_long_double * b); int gsl_block_complex_long_double_fwrite (FILE * stream, const gsl_block_complex_long_double * b); int gsl_block_complex_long_double_fscanf (FILE * stream, gsl_block_complex_long_double * b); int gsl_block_complex_long_double_fprintf (FILE * stream, const gsl_block_complex_long_double * b, const char *format); int gsl_block_complex_long_double_raw_fread (FILE * stream, long double * b, const size_t n, const size_t stride); int gsl_block_complex_long_double_raw_fwrite (FILE * stream, const long double * b, const size_t n, const size_t stride); int gsl_block_complex_long_double_raw_fscanf (FILE * stream, long double * b, const size_t n, const size_t stride); int gsl_block_complex_long_double_raw_fprintf (FILE * stream, const long double * b, const size_t n, const size_t stride, const char *format); size_t gsl_block_complex_long_double_size (const gsl_block_complex_long_double * b); long double * gsl_block_complex_long_double_data (const gsl_block_complex_long_double * b); __END_DECLS #endif /* __GSL_BLOCK_COMPLEX_LONG_DOUBLE_H__ */ gsl/block/gsl_block_complex_double.h0000644000175000017500000000456113536674414016223 0ustar eddedd/* block/gsl_block_complex_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BLOCK_COMPLEX_DOUBLE_H__ #define __GSL_BLOCK_COMPLEX_DOUBLE_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_block_complex_struct { size_t size; double *data; }; typedef struct gsl_block_complex_struct gsl_block_complex; gsl_block_complex *gsl_block_complex_alloc (const size_t n); gsl_block_complex *gsl_block_complex_calloc (const size_t n); void gsl_block_complex_free (gsl_block_complex * b); int gsl_block_complex_fread (FILE * stream, gsl_block_complex * b); int gsl_block_complex_fwrite (FILE * stream, const gsl_block_complex * b); int gsl_block_complex_fscanf (FILE * stream, gsl_block_complex * b); int gsl_block_complex_fprintf (FILE * stream, const gsl_block_complex * b, const char *format); int gsl_block_complex_raw_fread (FILE * stream, double * b, const size_t n, const size_t stride); int gsl_block_complex_raw_fwrite (FILE * stream, const double * b, const size_t n, const size_t stride); int gsl_block_complex_raw_fscanf (FILE * stream, double * b, const size_t n, const size_t stride); int gsl_block_complex_raw_fprintf (FILE * stream, const double * b, const size_t n, const size_t stride, const char *format); size_t gsl_block_complex_size (const gsl_block_complex * b); double * gsl_block_complex_data (const gsl_block_complex * b); __END_DECLS #endif /* __GSL_BLOCK_COMPLEX_DOUBLE_H__ */ gsl/block/gsl_block_complex_float.h0000644000175000017500000000477513536674414016065 0ustar eddedd/* block/gsl_block_complex_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BLOCK_COMPLEX_FLOAT_H__ #define __GSL_BLOCK_COMPLEX_FLOAT_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_block_complex_float_struct { size_t size; float *data; }; typedef struct gsl_block_complex_float_struct gsl_block_complex_float; gsl_block_complex_float *gsl_block_complex_float_alloc (const size_t n); gsl_block_complex_float *gsl_block_complex_float_calloc (const size_t n); void gsl_block_complex_float_free (gsl_block_complex_float * b); int gsl_block_complex_float_fread (FILE * stream, gsl_block_complex_float * b); int gsl_block_complex_float_fwrite (FILE * stream, const gsl_block_complex_float * b); int gsl_block_complex_float_fscanf (FILE * stream, gsl_block_complex_float * b); int gsl_block_complex_float_fprintf (FILE * stream, const gsl_block_complex_float * b, const char *format); int gsl_block_complex_float_raw_fread (FILE * stream, float * b, const size_t n, const size_t stride); int gsl_block_complex_float_raw_fwrite (FILE * stream, const float * b, const size_t n, const size_t stride); int gsl_block_complex_float_raw_fscanf (FILE * stream, float * b, const size_t n, const size_t stride); int gsl_block_complex_float_raw_fprintf (FILE * stream, const float * b, const size_t n, const size_t stride, const char *format); size_t gsl_block_complex_float_size (const gsl_block_complex_float * b); float * gsl_block_complex_float_data (const gsl_block_complex_float * b); __END_DECLS #endif /* __GSL_BLOCK_COMPLEX_FLOAT_H__ */ gsl/block/init.c0000644000175000017500000000337513536674414012143 0ustar eddedd#include #include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/block/gsl_block.h0000644000175000017500000000110413536674414013130 0ustar eddedd#ifndef __GSL_BLOCK_H__ #define __GSL_BLOCK_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif /* __GSL_BLOCK_H__ */ gsl/block/gsl_block_double.h0000644000175000017500000000421113536674414014464 0ustar eddedd/* block/gsl_block_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BLOCK_DOUBLE_H__ #define __GSL_BLOCK_DOUBLE_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_block_struct { size_t size; double *data; }; typedef struct gsl_block_struct gsl_block; gsl_block *gsl_block_alloc (const size_t n); gsl_block *gsl_block_calloc (const size_t n); void gsl_block_free (gsl_block * b); int gsl_block_fread (FILE * stream, gsl_block * b); int gsl_block_fwrite (FILE * stream, const gsl_block * b); int gsl_block_fscanf (FILE * stream, gsl_block * b); int gsl_block_fprintf (FILE * stream, const gsl_block * b, const char *format); int gsl_block_raw_fread (FILE * stream, double * b, const size_t n, const size_t stride); int gsl_block_raw_fwrite (FILE * stream, const double * b, const size_t n, const size_t stride); int gsl_block_raw_fscanf (FILE * stream, double * b, const size_t n, const size_t stride); int gsl_block_raw_fprintf (FILE * stream, const double * b, const size_t n, const size_t stride, const char *format); size_t gsl_block_size (const gsl_block * b); double * gsl_block_data (const gsl_block * b); __END_DECLS #endif /* __GSL_BLOCK_DOUBLE_H__ */ gsl/block/test_source.c0000644000175000017500000000672313536674414013537 0ustar eddedd/* block/test_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ void FUNCTION (test, func) (void); void FUNCTION (test, binary) (void); void FUNCTION (test, trap) (void); void FUNCTION (test, func) (void) { TYPE (gsl_block) * v; ATOMIC * data; size_t i, size; v = FUNCTION (gsl_block, alloc) (N); gsl_test (v->data == 0, NAME (gsl_block) "_alloc returns valid pointer"); gsl_test (v->size != N, NAME (gsl_block) "_alloc returns valid size"); data = FUNCTION(gsl_block, data) (v); size = FUNCTION(gsl_block, size) (v); gsl_test (data == 0, NAME (gsl_block) "_data returns valid pointer"); gsl_test (size != N, NAME (gsl_block) "_size returns valid size"); FUNCTION (gsl_block, free) (v); /* free whatever is in v */ v = FUNCTION (gsl_block, calloc) (N); gsl_test (v->data == 0, NAME (gsl_block) "_calloc returns valid pointer"); gsl_test (v->size != N, NAME (gsl_block) "_calloc returns valid size"); data = FUNCTION(gsl_block, data) (v); size = FUNCTION(gsl_block, size) (v); gsl_test (data == 0, NAME (gsl_block) "_data returns valid pointer from calloc"); gsl_test (size != N, NAME (gsl_block) "_size returns valid size from calloc"); status = 0; for (i = 0; i < N; i++) { if (v->data[i] != 0.0) status = 1; }; gsl_test (status, NAME (gsl_block) "_calloc initializes array to zero"); FUNCTION (gsl_block, free) (v); /* free whatever is in v */ } void FUNCTION (test, binary) (void) { size_t i; { TYPE (gsl_block) * v = FUNCTION (gsl_block, calloc) (N); FILE *f = fopen ("test.dat", "wb"); for (i = 0; i < N; i++) { v->data[i] = (ATOMIC)(N - i); }; FUNCTION (gsl_block, fwrite) (f, v); fclose (f); FUNCTION (gsl_block, free) (v); } { TYPE (gsl_block) * w = FUNCTION (gsl_block, calloc) (N); FILE *f = fopen ("test.dat", "rb"); FUNCTION (gsl_block, fread) (f, w); status = 0; for (i = 0; i < N; i++) { if (w->data[i] != (ATOMIC) (N - i)) status = 1; }; fclose (f); FUNCTION (gsl_block, free) (w); } gsl_test (status, NAME (gsl_block) "_write and read"); } void FUNCTION (test, alloc_zero_length) (void) { TYPE (gsl_block) * b = FUNCTION (gsl_block, alloc) (0); gsl_test (b == 0, NAME (gsl_block) "_alloc permits zero length"); gsl_test (b->size != 0, NAME (gsl_block) "_alloc reflects zero length"); FUNCTION (gsl_block, free) (b); } void FUNCTION (test, calloc_zero_length) (void) { TYPE (gsl_block) * b = FUNCTION (gsl_block, calloc) (0); gsl_test (b == 0, NAME (gsl_block) "_calloc permits zero length"); gsl_test (b->size != 0, NAME (gsl_block) "_calloc reflects zero length"); FUNCTION (gsl_block, free) (b); } gsl/block/block_source.c0000644000175000017500000000175613536674414013653 0ustar eddedd/* block/block_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ size_t FUNCTION(gsl_block,size) (const TYPE(gsl_block) * b) { return b->size ; } ATOMIC * FUNCTION(gsl_block,data) (const TYPE(gsl_block) * b) { return b->data ; } gsl/block/gsl_check_range.h0000644000175000017500000000305313536674414014274 0ustar eddedd/* vector/gsl_check_range.h * * Copyright (C) 2003, 2004, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_CHECK_RANGE_H__ #define __GSL_CHECK_RANGE_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS GSL_VAR int gsl_check_range; /* Turn range checking on by default, unless the user defines GSL_RANGE_CHECK_OFF, or defines GSL_RANGE_CHECK to 0 explicitly */ #ifdef GSL_RANGE_CHECK_OFF # ifndef GSL_RANGE_CHECK # define GSL_RANGE_CHECK 0 # else # error "cannot set both GSL_RANGE_CHECK and GSL_RANGE_CHECK_OFF" # endif #else # ifndef GSL_RANGE_CHECK # define GSL_RANGE_CHECK 1 # endif #endif __END_DECLS #endif /* __GSL_CHECK_RANGE_H__ */ gsl/block/gsl_block_uint.h0000644000175000017500000000444213536674414014177 0ustar eddedd/* block/gsl_block_uint.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BLOCK_UINT_H__ #define __GSL_BLOCK_UINT_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_block_uint_struct { size_t size; unsigned int *data; }; typedef struct gsl_block_uint_struct gsl_block_uint; gsl_block_uint *gsl_block_uint_alloc (const size_t n); gsl_block_uint *gsl_block_uint_calloc (const size_t n); void gsl_block_uint_free (gsl_block_uint * b); int gsl_block_uint_fread (FILE * stream, gsl_block_uint * b); int gsl_block_uint_fwrite (FILE * stream, const gsl_block_uint * b); int gsl_block_uint_fscanf (FILE * stream, gsl_block_uint * b); int gsl_block_uint_fprintf (FILE * stream, const gsl_block_uint * b, const char *format); int gsl_block_uint_raw_fread (FILE * stream, unsigned int * b, const size_t n, const size_t stride); int gsl_block_uint_raw_fwrite (FILE * stream, const unsigned int * b, const size_t n, const size_t stride); int gsl_block_uint_raw_fscanf (FILE * stream, unsigned int * b, const size_t n, const size_t stride); int gsl_block_uint_raw_fprintf (FILE * stream, const unsigned int * b, const size_t n, const size_t stride, const char *format); size_t gsl_block_uint_size (const gsl_block_uint * b); unsigned int * gsl_block_uint_data (const gsl_block_uint * b); __END_DECLS #endif /* __GSL_BLOCK_UINT_H__ */ gsl/block/test.c0000644000175000017500000001310413536674414012146 0ustar eddedd/* block/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include int status = 0; #ifndef DESC #define DESC "" #endif #define N 1027 #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "test_complex_source.c" #if HAVE_PRINTF_LONGDOUBLE #include "test_complex_io.c" #endif #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "test_complex_source.c" #include "test_complex_io.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "test_complex_source.c" #include "test_complex_io.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "test_source.c" #if HAVE_PRINTF_LONGDOUBLE #include "test_io.c" #endif #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "test_source.c" #include "test_io.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "test_source.c" #include "test_io.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "test_source.c" #include "test_io.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "test_source.c" #include "test_io.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "test_source.c" #include "test_io.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "test_source.c" #include "test_io.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "test_source.c" #include "test_io.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "test_source.c" #include "test_io.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "test_source.c" #include "test_io.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "test_source.c" #include "test_io.c" #include "templates_off.h" #undef BASE_CHAR void my_error_handler (const char *reason, const char *file, int line, int err); int main (void) { gsl_ieee_env_setup (); test_func (); test_float_func (); test_long_double_func (); test_ulong_func (); test_long_func (); test_uint_func (); test_int_func (); test_ushort_func (); test_short_func (); test_uchar_func (); test_char_func (); test_complex_func (); test_complex_float_func (); test_complex_long_double_func (); test_text (); test_float_text (); #if HAVE_PRINTF_LONGDOUBLE test_long_double_text (); #endif test_ulong_text (); test_long_text (); test_uint_text (); test_int_text (); test_ushort_text (); test_short_text (); test_uchar_text (); test_char_text (); test_complex_text (); test_complex_float_text (); #if HAVE_PRINTF_LONGDOUBLE test_complex_long_double_text (); #endif test_binary (); test_float_binary (); test_long_double_binary (); test_ulong_binary (); test_long_binary (); test_uint_binary (); test_int_binary (); test_ushort_binary (); test_short_binary (); test_uchar_binary (); test_char_binary (); test_complex_binary (); test_complex_float_binary (); test_complex_long_double_binary (); gsl_set_error_handler (&my_error_handler); test_alloc_zero_length (); test_float_alloc_zero_length (); test_long_double_alloc_zero_length (); test_ulong_alloc_zero_length (); test_long_alloc_zero_length (); test_uint_alloc_zero_length (); test_int_alloc_zero_length (); test_ushort_alloc_zero_length (); test_short_alloc_zero_length (); test_uchar_alloc_zero_length (); test_char_alloc_zero_length (); test_complex_alloc_zero_length (); test_complex_float_alloc_zero_length (); test_complex_long_double_alloc_zero_length (); test_calloc_zero_length (); test_float_calloc_zero_length (); test_long_double_calloc_zero_length (); test_ulong_calloc_zero_length (); test_long_calloc_zero_length (); test_uint_calloc_zero_length (); test_int_calloc_zero_length (); test_ushort_calloc_zero_length (); test_short_calloc_zero_length (); test_uchar_calloc_zero_length (); test_char_calloc_zero_length (); test_complex_calloc_zero_length (); test_complex_float_calloc_zero_length (); test_complex_long_double_calloc_zero_length (); exit (gsl_test_summary ()); } void my_error_handler (const char *reason, const char *file, int line, int err) { if (0) printf ("(caught [%s:%d: %s (%d)])\n", file, line, reason, err); status = 1; } gsl/block/gsl_block_short.h0000644000175000017500000000442513536674414014360 0ustar eddedd/* block/gsl_block_short.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BLOCK_SHORT_H__ #define __GSL_BLOCK_SHORT_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_block_short_struct { size_t size; short *data; }; typedef struct gsl_block_short_struct gsl_block_short; gsl_block_short *gsl_block_short_alloc (const size_t n); gsl_block_short *gsl_block_short_calloc (const size_t n); void gsl_block_short_free (gsl_block_short * b); int gsl_block_short_fread (FILE * stream, gsl_block_short * b); int gsl_block_short_fwrite (FILE * stream, const gsl_block_short * b); int gsl_block_short_fscanf (FILE * stream, gsl_block_short * b); int gsl_block_short_fprintf (FILE * stream, const gsl_block_short * b, const char *format); int gsl_block_short_raw_fread (FILE * stream, short * b, const size_t n, const size_t stride); int gsl_block_short_raw_fwrite (FILE * stream, const short * b, const size_t n, const size_t stride); int gsl_block_short_raw_fscanf (FILE * stream, short * b, const size_t n, const size_t stride); int gsl_block_short_raw_fprintf (FILE * stream, const short * b, const size_t n, const size_t stride, const char *format); size_t gsl_block_short_size (const gsl_block_short * b); short * gsl_block_short_data (const gsl_block_short * b); __END_DECLS #endif /* __GSL_BLOCK_SHORT_H__ */ gsl/block/file.c0000644000175000017500000000424713536674414012116 0ustar eddedd#include #include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "fwrite_source.c" #include "fprintf_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "fwrite_source.c" #include "fprintf_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "fwrite_source.c" #include "fprintf_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "fwrite_source.c" #include "fprintf_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "fwrite_source.c" #include "fprintf_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "fwrite_source.c" #include "fprintf_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "fwrite_source.c" #include "fprintf_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "fwrite_source.c" #include "fprintf_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "fwrite_source.c" #include "fprintf_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "fwrite_source.c" #include "fprintf_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "fwrite_source.c" #include "fprintf_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "fwrite_source.c" #include "fprintf_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "fwrite_source.c" #include "fprintf_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "fwrite_source.c" #include "fprintf_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/block/block.c0000644000175000017500000000337613536674414012273 0ustar eddedd#include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "block_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "block_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "block_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "block_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "block_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "block_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "block_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "block_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "block_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "block_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "block_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "block_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "block_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "block_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/matrix/0000755000175000017500000000000014057135461011227 5ustar eddeddgsl/matrix/minmax.c0000644000175000017500000000260313536674414012674 0ustar eddedd#include #include #include #include #define BASE_LONG_DOUBLE #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/matrix/swap_source.c0000644000175000017500000002304213536675317013740 0ustar eddedd/* matrix/swap_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION (gsl_matrix, swap_rows) (TYPE (gsl_matrix) * m, const size_t i, const size_t j) { const size_t size1 = m->size1; const size_t size2 = m->size2; if (i >= size1) { GSL_ERROR ("first row index is out of range", GSL_EINVAL); } if (j >= size1) { GSL_ERROR ("second row index is out of range", GSL_EINVAL); } if (i != j) { ATOMIC *row1 = m->data + MULTIPLICITY * i * m->tda; ATOMIC *row2 = m->data + MULTIPLICITY * j * m->tda; size_t k; for (k = 0; k < MULTIPLICITY * size2; k++) { ATOMIC tmp = row1[k] ; row1[k] = row2[k] ; row2[k] = tmp ; } } return GSL_SUCCESS; } int FUNCTION (gsl_matrix, swap_columns) (TYPE (gsl_matrix) * m, const size_t i, const size_t j) { const size_t size1 = m->size1; const size_t size2 = m->size2; if (i >= size2) { GSL_ERROR ("first column index is out of range", GSL_EINVAL); } if (j >= size2) { GSL_ERROR ("second column index is out of range", GSL_EINVAL); } if (i != j) { ATOMIC *col1 = m->data + MULTIPLICITY * i; ATOMIC *col2 = m->data + MULTIPLICITY * j; size_t p; for (p = 0; p < size1; p++) { size_t k; size_t n = p * MULTIPLICITY * m->tda; for (k = 0; k < MULTIPLICITY; k++) { ATOMIC tmp = col1[n+k] ; col1[n+k] = col2[n+k] ; col2[n+k] = tmp ; } } } return GSL_SUCCESS; } int FUNCTION (gsl_matrix, swap_rowcol) (TYPE (gsl_matrix) * m, const size_t i, const size_t j) { const size_t size1 = m->size1; const size_t size2 = m->size2; if (size1 != size2) { GSL_ERROR ("matrix must be square to swap row and column", GSL_ENOTSQR); } if (i >= size1) { GSL_ERROR ("row index is out of range", GSL_EINVAL); } if (j >= size2) { GSL_ERROR ("column index is out of range", GSL_EINVAL); } { ATOMIC *row = m->data + MULTIPLICITY * i * m->tda; ATOMIC *col = m->data + MULTIPLICITY * j; size_t p; for (p = 0; p < size1; p++) { size_t k; size_t r = p * MULTIPLICITY; size_t c = p * MULTIPLICITY * m->tda; for (k = 0; k < MULTIPLICITY; k++) { ATOMIC tmp = col[c+k] ; col[c+k] = row[r+k] ; row[r+k] = tmp ; } } } return GSL_SUCCESS; } int FUNCTION (gsl_matrix, transpose) (TYPE (gsl_matrix) * m) { const size_t size1 = m->size1; const size_t size2 = m->size2; size_t i, j, k; if (size1 != size2) { GSL_ERROR ("matrix must be square to take transpose", GSL_ENOTSQR); } for (i = 0; i < size1; i++) { for (j = i + 1 ; j < size2 ; j++) { for (k = 0; k < MULTIPLICITY; k++) { size_t e1 = (i * m->tda + j) * MULTIPLICITY + k ; size_t e2 = (j * m->tda + i) * MULTIPLICITY + k ; { ATOMIC tmp = m->data[e1] ; m->data[e1] = m->data[e2] ; m->data[e2] = tmp ; } } } } return GSL_SUCCESS; } int FUNCTION (gsl_matrix, transpose_memcpy) (TYPE (gsl_matrix) * dest, const TYPE (gsl_matrix) * src) { const size_t src_size1 = src->size1; const size_t src_size2 = src->size2; const size_t dest_size1 = dest->size1; const size_t dest_size2 = dest->size2; size_t i; if (dest_size2 != src_size1 || dest_size1 != src_size2) { GSL_ERROR ("dimensions of dest matrix must be transpose of src matrix", GSL_EBADLEN); } #if defined(BASE_DOUBLE) || defined(BASE_FLOAT) || defined(BASE_GSL_COMPLEX) || defined(BASE_GSL_COMPLEX_FLOAT) for (i = 0; i < src_size1; ++i) { VIEW (gsl_vector, const_view) a = FUNCTION (gsl_matrix, const_row) (src, i); VIEW (gsl_vector, view) b = FUNCTION (gsl_matrix, column) (dest, i); #if defined(BASE_DOUBLE) gsl_blas_dcopy(&a.vector, &b.vector); #elif defined(BASE_FLOAT) gsl_blas_scopy(&a.vector, &b.vector); #elif defined(BASE_GSL_COMPLEX) gsl_blas_zcopy(&a.vector, &b.vector); #elif defined(BASE_GSL_COMPLEX_FLOAT) gsl_blas_ccopy(&a.vector, &b.vector); #endif } #else for (i = 0; i < dest_size1; i++) { size_t j, k; for (j = 0 ; j < dest_size2; j++) { for (k = 0; k < MULTIPLICITY; k++) { size_t e1 = (i * dest->tda + j) * MULTIPLICITY + k ; size_t e2 = (j * src->tda + i) * MULTIPLICITY + k ; dest->data[e1] = src->data[e2] ; } } } #endif return GSL_SUCCESS; } int FUNCTION (gsl_matrix, transpose_tricpy) (CBLAS_UPLO_t Uplo_src, CBLAS_DIAG_t Diag, TYPE (gsl_matrix) * dest, const TYPE (gsl_matrix) * src) { const size_t M = src->size1; const size_t N = src->size2; const size_t K = GSL_MIN(M, N); size_t i; if (M != dest->size2 || N != dest->size1) { GSL_ERROR ("matrix sizes are different", GSL_EBADLEN); } #if defined(BASE_DOUBLE) || defined(BASE_FLOAT) || defined(BASE_GSL_COMPLEX) || defined(BASE_GSL_COMPLEX_FLOAT) if (Uplo_src == CblasLower) { for (i = 1; i < K; i++) { VIEW (gsl_vector, const_view) a = FUNCTION (gsl_matrix, const_subrow) (src, i, 0, i); VIEW (gsl_vector, view) b = FUNCTION (gsl_matrix, subcolumn) (dest, i, 0, i); #if defined(BASE_DOUBLE) gsl_blas_dcopy(&a.vector, &b.vector); #elif defined(BASE_FLOAT) gsl_blas_scopy(&a.vector, &b.vector); #elif defined(BASE_GSL_COMPLEX) gsl_blas_zcopy(&a.vector, &b.vector); #elif defined(BASE_GSL_COMPLEX_FLOAT) gsl_blas_ccopy(&a.vector, &b.vector); #endif } } else if (Uplo_src == CblasUpper) { for (i = 0; i < K - 1; i++) { VIEW (gsl_vector, const_view) a = FUNCTION (gsl_matrix, const_subrow) (src, i, i + 1, K - i - 1); VIEW (gsl_vector, view) b = FUNCTION (gsl_matrix, subcolumn) (dest, i, i + 1, K - i - 1); #if defined(BASE_DOUBLE) gsl_blas_dcopy(&a.vector, &b.vector); #elif defined(BASE_FLOAT) gsl_blas_scopy(&a.vector, &b.vector); #elif defined(BASE_GSL_COMPLEX) gsl_blas_zcopy(&a.vector, &b.vector); #elif defined(BASE_GSL_COMPLEX_FLOAT) gsl_blas_ccopy(&a.vector, &b.vector); #endif } } if (Diag == CblasNonUnit) { VIEW (gsl_vector, const_view) a = FUNCTION (gsl_matrix, const_diagonal) (src); VIEW (gsl_vector, view) b = FUNCTION (gsl_matrix, diagonal) (dest); #if defined(BASE_DOUBLE) gsl_blas_dcopy(&a.vector, &b.vector); #elif defined(BASE_FLOAT) gsl_blas_scopy(&a.vector, &b.vector); #elif defined(BASE_GSL_COMPLEX) gsl_blas_zcopy(&a.vector, &b.vector); #elif defined(BASE_GSL_COMPLEX_FLOAT) gsl_blas_ccopy(&a.vector, &b.vector); #endif } #else { const size_t src_tda = src->tda ; const size_t dest_tda = dest->tda ; size_t j, k; if (Uplo_src == CblasLower) { /* copy lower triangle of src to upper triangle of dest */ for (i = 0; i < K; i++) { for (j = 0; j < i; j++) { for (k = 0; k < MULTIPLICITY; k++) { size_t e1 = (j * dest_tda + i) * MULTIPLICITY + k ; size_t e2 = (i * src_tda + j) * MULTIPLICITY + k ; dest->data[e1] = src->data[e2]; } } } } else if (Uplo_src == CblasUpper) { /* copy upper triangle of src to lower triangle of dest */ for (i = 0; i < K; i++) { for (j = i + 1; j < K; j++) { for (k = 0; k < MULTIPLICITY; k++) { size_t e1 = (j * dest_tda + i) * MULTIPLICITY + k ; size_t e2 = (i * src_tda + j) * MULTIPLICITY + k ; dest->data[e1] = src->data[e2]; } } } } else { GSL_ERROR ("invalid Uplo_src parameter", GSL_EINVAL); } if (Diag == CblasNonUnit) { for (i = 0; i < K; i++) { for (k = 0; k < MULTIPLICITY; k++) { size_t e1 = (i * dest_tda + i) * MULTIPLICITY + k ; size_t e2 = (i * src_tda + i) * MULTIPLICITY + k ; dest->data[e1] = src->data[e2]; } } } } #endif return GSL_SUCCESS; } gsl/matrix/gsl_matrix_float.h0000664000175000017500000003100614057135461014740 0ustar eddedd/* matrix/gsl_matrix_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MATRIX_FLOAT_H__ #define __GSL_MATRIX_FLOAT_H__ #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size1; size_t size2; size_t tda; float * data; gsl_block_float * block; int owner; } gsl_matrix_float; typedef struct { gsl_matrix_float matrix; } _gsl_matrix_float_view; typedef _gsl_matrix_float_view gsl_matrix_float_view; typedef struct { gsl_matrix_float matrix; } _gsl_matrix_float_const_view; typedef const _gsl_matrix_float_const_view gsl_matrix_float_const_view; /* Allocation */ gsl_matrix_float * gsl_matrix_float_alloc (const size_t n1, const size_t n2); gsl_matrix_float * gsl_matrix_float_calloc (const size_t n1, const size_t n2); gsl_matrix_float * gsl_matrix_float_alloc_from_block (gsl_block_float * b, const size_t offset, const size_t n1, const size_t n2, const size_t d2); gsl_matrix_float * gsl_matrix_float_alloc_from_matrix (gsl_matrix_float * m, const size_t k1, const size_t k2, const size_t n1, const size_t n2); gsl_vector_float * gsl_vector_float_alloc_row_from_matrix (gsl_matrix_float * m, const size_t i); gsl_vector_float * gsl_vector_float_alloc_col_from_matrix (gsl_matrix_float * m, const size_t j); void gsl_matrix_float_free (gsl_matrix_float * m); /* Views */ _gsl_matrix_float_view gsl_matrix_float_submatrix (gsl_matrix_float * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_float_view gsl_matrix_float_row (gsl_matrix_float * m, const size_t i); _gsl_vector_float_view gsl_matrix_float_column (gsl_matrix_float * m, const size_t j); _gsl_vector_float_view gsl_matrix_float_diagonal (gsl_matrix_float * m); _gsl_vector_float_view gsl_matrix_float_subdiagonal (gsl_matrix_float * m, const size_t k); _gsl_vector_float_view gsl_matrix_float_superdiagonal (gsl_matrix_float * m, const size_t k); _gsl_vector_float_view gsl_matrix_float_subrow (gsl_matrix_float * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_float_view gsl_matrix_float_subcolumn (gsl_matrix_float * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_float_view gsl_matrix_float_view_array (float * base, const size_t n1, const size_t n2); _gsl_matrix_float_view gsl_matrix_float_view_array_with_tda (float * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_float_view gsl_matrix_float_view_vector (gsl_vector_float * v, const size_t n1, const size_t n2); _gsl_matrix_float_view gsl_matrix_float_view_vector_with_tda (gsl_vector_float * v, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_float_const_view gsl_matrix_float_const_submatrix (const gsl_matrix_float * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_float_const_view gsl_matrix_float_const_row (const gsl_matrix_float * m, const size_t i); _gsl_vector_float_const_view gsl_matrix_float_const_column (const gsl_matrix_float * m, const size_t j); _gsl_vector_float_const_view gsl_matrix_float_const_diagonal (const gsl_matrix_float * m); _gsl_vector_float_const_view gsl_matrix_float_const_subdiagonal (const gsl_matrix_float * m, const size_t k); _gsl_vector_float_const_view gsl_matrix_float_const_superdiagonal (const gsl_matrix_float * m, const size_t k); _gsl_vector_float_const_view gsl_matrix_float_const_subrow (const gsl_matrix_float * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_float_const_view gsl_matrix_float_const_subcolumn (const gsl_matrix_float * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_float_const_view gsl_matrix_float_const_view_array (const float * base, const size_t n1, const size_t n2); _gsl_matrix_float_const_view gsl_matrix_float_const_view_array_with_tda (const float * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_float_const_view gsl_matrix_float_const_view_vector (const gsl_vector_float * v, const size_t n1, const size_t n2); _gsl_matrix_float_const_view gsl_matrix_float_const_view_vector_with_tda (const gsl_vector_float * v, const size_t n1, const size_t n2, const size_t tda); /* Operations */ void gsl_matrix_float_set_zero (gsl_matrix_float * m); void gsl_matrix_float_set_identity (gsl_matrix_float * m); void gsl_matrix_float_set_all (gsl_matrix_float * m, float x); int gsl_matrix_float_fread (FILE * stream, gsl_matrix_float * m) ; int gsl_matrix_float_fwrite (FILE * stream, const gsl_matrix_float * m) ; int gsl_matrix_float_fscanf (FILE * stream, gsl_matrix_float * m); int gsl_matrix_float_fprintf (FILE * stream, const gsl_matrix_float * m, const char * format); int gsl_matrix_float_memcpy(gsl_matrix_float * dest, const gsl_matrix_float * src); int gsl_matrix_float_swap(gsl_matrix_float * m1, gsl_matrix_float * m2); int gsl_matrix_float_tricpy(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix_float * dest, const gsl_matrix_float * src); int gsl_matrix_float_swap_rows(gsl_matrix_float * m, const size_t i, const size_t j); int gsl_matrix_float_swap_columns(gsl_matrix_float * m, const size_t i, const size_t j); int gsl_matrix_float_swap_rowcol(gsl_matrix_float * m, const size_t i, const size_t j); int gsl_matrix_float_transpose (gsl_matrix_float * m); int gsl_matrix_float_transpose_memcpy (gsl_matrix_float * dest, const gsl_matrix_float * src); int gsl_matrix_float_transpose_tricpy (CBLAS_UPLO_t Uplo_src, CBLAS_DIAG_t Diag, gsl_matrix_float * dest, const gsl_matrix_float * src); float gsl_matrix_float_max (const gsl_matrix_float * m); float gsl_matrix_float_min (const gsl_matrix_float * m); void gsl_matrix_float_minmax (const gsl_matrix_float * m, float * min_out, float * max_out); void gsl_matrix_float_max_index (const gsl_matrix_float * m, size_t * imax, size_t *jmax); void gsl_matrix_float_min_index (const gsl_matrix_float * m, size_t * imin, size_t *jmin); void gsl_matrix_float_minmax_index (const gsl_matrix_float * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax); int gsl_matrix_float_equal (const gsl_matrix_float * a, const gsl_matrix_float * b); int gsl_matrix_float_isnull (const gsl_matrix_float * m); int gsl_matrix_float_ispos (const gsl_matrix_float * m); int gsl_matrix_float_isneg (const gsl_matrix_float * m); int gsl_matrix_float_isnonneg (const gsl_matrix_float * m); float gsl_matrix_float_norm1 (const gsl_matrix_float * m); int gsl_matrix_float_add (gsl_matrix_float * a, const gsl_matrix_float * b); int gsl_matrix_float_sub (gsl_matrix_float * a, const gsl_matrix_float * b); int gsl_matrix_float_mul_elements (gsl_matrix_float * a, const gsl_matrix_float * b); int gsl_matrix_float_div_elements (gsl_matrix_float * a, const gsl_matrix_float * b); int gsl_matrix_float_scale (gsl_matrix_float * a, const float x); int gsl_matrix_float_scale_rows (gsl_matrix_float * a, const gsl_vector_float * x); int gsl_matrix_float_scale_columns (gsl_matrix_float * a, const gsl_vector_float * x); int gsl_matrix_float_add_constant (gsl_matrix_float * a, const float x); int gsl_matrix_float_add_diagonal (gsl_matrix_float * a, const float x); /***********************************************************************/ /* The functions below are obsolete */ /***********************************************************************/ int gsl_matrix_float_get_row(gsl_vector_float * v, const gsl_matrix_float * m, const size_t i); int gsl_matrix_float_get_col(gsl_vector_float * v, const gsl_matrix_float * m, const size_t j); int gsl_matrix_float_set_row(gsl_matrix_float * m, const size_t i, const gsl_vector_float * v); int gsl_matrix_float_set_col(gsl_matrix_float * m, const size_t j, const gsl_vector_float * v); /***********************************************************************/ /* inline functions if you are using GCC */ INLINE_DECL float gsl_matrix_float_get(const gsl_matrix_float * m, const size_t i, const size_t j); INLINE_DECL void gsl_matrix_float_set(gsl_matrix_float * m, const size_t i, const size_t j, const float x); INLINE_DECL float * gsl_matrix_float_ptr(gsl_matrix_float * m, const size_t i, const size_t j); INLINE_DECL const float * gsl_matrix_float_const_ptr(const gsl_matrix_float * m, const size_t i, const size_t j); #ifdef HAVE_INLINE INLINE_FUN float gsl_matrix_float_get(const gsl_matrix_float * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ; } else if (j >= m->size2) { GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ; } } #endif return m->data[i * m->tda + j] ; } INLINE_FUN void gsl_matrix_float_set(gsl_matrix_float * m, const size_t i, const size_t j, const float x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ; } } #endif m->data[i * m->tda + j] = x ; } INLINE_FUN float * gsl_matrix_float_ptr(gsl_matrix_float * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (float *) (m->data + (i * m->tda + j)) ; } INLINE_FUN const float * gsl_matrix_float_const_ptr(const gsl_matrix_float * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (const float *) (m->data + (i * m->tda + j)) ; } #endif __END_DECLS #endif /* __GSL_MATRIX_FLOAT_H__ */ gsl/matrix/gsl_matrix_short.h0000664000175000017500000003100614057135461014772 0ustar eddedd/* matrix/gsl_matrix_short.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MATRIX_SHORT_H__ #define __GSL_MATRIX_SHORT_H__ #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size1; size_t size2; size_t tda; short * data; gsl_block_short * block; int owner; } gsl_matrix_short; typedef struct { gsl_matrix_short matrix; } _gsl_matrix_short_view; typedef _gsl_matrix_short_view gsl_matrix_short_view; typedef struct { gsl_matrix_short matrix; } _gsl_matrix_short_const_view; typedef const _gsl_matrix_short_const_view gsl_matrix_short_const_view; /* Allocation */ gsl_matrix_short * gsl_matrix_short_alloc (const size_t n1, const size_t n2); gsl_matrix_short * gsl_matrix_short_calloc (const size_t n1, const size_t n2); gsl_matrix_short * gsl_matrix_short_alloc_from_block (gsl_block_short * b, const size_t offset, const size_t n1, const size_t n2, const size_t d2); gsl_matrix_short * gsl_matrix_short_alloc_from_matrix (gsl_matrix_short * m, const size_t k1, const size_t k2, const size_t n1, const size_t n2); gsl_vector_short * gsl_vector_short_alloc_row_from_matrix (gsl_matrix_short * m, const size_t i); gsl_vector_short * gsl_vector_short_alloc_col_from_matrix (gsl_matrix_short * m, const size_t j); void gsl_matrix_short_free (gsl_matrix_short * m); /* Views */ _gsl_matrix_short_view gsl_matrix_short_submatrix (gsl_matrix_short * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_short_view gsl_matrix_short_row (gsl_matrix_short * m, const size_t i); _gsl_vector_short_view gsl_matrix_short_column (gsl_matrix_short * m, const size_t j); _gsl_vector_short_view gsl_matrix_short_diagonal (gsl_matrix_short * m); _gsl_vector_short_view gsl_matrix_short_subdiagonal (gsl_matrix_short * m, const size_t k); _gsl_vector_short_view gsl_matrix_short_superdiagonal (gsl_matrix_short * m, const size_t k); _gsl_vector_short_view gsl_matrix_short_subrow (gsl_matrix_short * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_short_view gsl_matrix_short_subcolumn (gsl_matrix_short * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_short_view gsl_matrix_short_view_array (short * base, const size_t n1, const size_t n2); _gsl_matrix_short_view gsl_matrix_short_view_array_with_tda (short * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_short_view gsl_matrix_short_view_vector (gsl_vector_short * v, const size_t n1, const size_t n2); _gsl_matrix_short_view gsl_matrix_short_view_vector_with_tda (gsl_vector_short * v, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_short_const_view gsl_matrix_short_const_submatrix (const gsl_matrix_short * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_short_const_view gsl_matrix_short_const_row (const gsl_matrix_short * m, const size_t i); _gsl_vector_short_const_view gsl_matrix_short_const_column (const gsl_matrix_short * m, const size_t j); _gsl_vector_short_const_view gsl_matrix_short_const_diagonal (const gsl_matrix_short * m); _gsl_vector_short_const_view gsl_matrix_short_const_subdiagonal (const gsl_matrix_short * m, const size_t k); _gsl_vector_short_const_view gsl_matrix_short_const_superdiagonal (const gsl_matrix_short * m, const size_t k); _gsl_vector_short_const_view gsl_matrix_short_const_subrow (const gsl_matrix_short * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_short_const_view gsl_matrix_short_const_subcolumn (const gsl_matrix_short * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_short_const_view gsl_matrix_short_const_view_array (const short * base, const size_t n1, const size_t n2); _gsl_matrix_short_const_view gsl_matrix_short_const_view_array_with_tda (const short * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_short_const_view gsl_matrix_short_const_view_vector (const gsl_vector_short * v, const size_t n1, const size_t n2); _gsl_matrix_short_const_view gsl_matrix_short_const_view_vector_with_tda (const gsl_vector_short * v, const size_t n1, const size_t n2, const size_t tda); /* Operations */ void gsl_matrix_short_set_zero (gsl_matrix_short * m); void gsl_matrix_short_set_identity (gsl_matrix_short * m); void gsl_matrix_short_set_all (gsl_matrix_short * m, short x); int gsl_matrix_short_fread (FILE * stream, gsl_matrix_short * m) ; int gsl_matrix_short_fwrite (FILE * stream, const gsl_matrix_short * m) ; int gsl_matrix_short_fscanf (FILE * stream, gsl_matrix_short * m); int gsl_matrix_short_fprintf (FILE * stream, const gsl_matrix_short * m, const char * format); int gsl_matrix_short_memcpy(gsl_matrix_short * dest, const gsl_matrix_short * src); int gsl_matrix_short_swap(gsl_matrix_short * m1, gsl_matrix_short * m2); int gsl_matrix_short_tricpy(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix_short * dest, const gsl_matrix_short * src); int gsl_matrix_short_swap_rows(gsl_matrix_short * m, const size_t i, const size_t j); int gsl_matrix_short_swap_columns(gsl_matrix_short * m, const size_t i, const size_t j); int gsl_matrix_short_swap_rowcol(gsl_matrix_short * m, const size_t i, const size_t j); int gsl_matrix_short_transpose (gsl_matrix_short * m); int gsl_matrix_short_transpose_memcpy (gsl_matrix_short * dest, const gsl_matrix_short * src); int gsl_matrix_short_transpose_tricpy (CBLAS_UPLO_t Uplo_src, CBLAS_DIAG_t Diag, gsl_matrix_short * dest, const gsl_matrix_short * src); short gsl_matrix_short_max (const gsl_matrix_short * m); short gsl_matrix_short_min (const gsl_matrix_short * m); void gsl_matrix_short_minmax (const gsl_matrix_short * m, short * min_out, short * max_out); void gsl_matrix_short_max_index (const gsl_matrix_short * m, size_t * imax, size_t *jmax); void gsl_matrix_short_min_index (const gsl_matrix_short * m, size_t * imin, size_t *jmin); void gsl_matrix_short_minmax_index (const gsl_matrix_short * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax); int gsl_matrix_short_equal (const gsl_matrix_short * a, const gsl_matrix_short * b); int gsl_matrix_short_isnull (const gsl_matrix_short * m); int gsl_matrix_short_ispos (const gsl_matrix_short * m); int gsl_matrix_short_isneg (const gsl_matrix_short * m); int gsl_matrix_short_isnonneg (const gsl_matrix_short * m); short gsl_matrix_short_norm1 (const gsl_matrix_short * m); int gsl_matrix_short_add (gsl_matrix_short * a, const gsl_matrix_short * b); int gsl_matrix_short_sub (gsl_matrix_short * a, const gsl_matrix_short * b); int gsl_matrix_short_mul_elements (gsl_matrix_short * a, const gsl_matrix_short * b); int gsl_matrix_short_div_elements (gsl_matrix_short * a, const gsl_matrix_short * b); int gsl_matrix_short_scale (gsl_matrix_short * a, const short x); int gsl_matrix_short_scale_rows (gsl_matrix_short * a, const gsl_vector_short * x); int gsl_matrix_short_scale_columns (gsl_matrix_short * a, const gsl_vector_short * x); int gsl_matrix_short_add_constant (gsl_matrix_short * a, const short x); int gsl_matrix_short_add_diagonal (gsl_matrix_short * a, const short x); /***********************************************************************/ /* The functions below are obsolete */ /***********************************************************************/ int gsl_matrix_short_get_row(gsl_vector_short * v, const gsl_matrix_short * m, const size_t i); int gsl_matrix_short_get_col(gsl_vector_short * v, const gsl_matrix_short * m, const size_t j); int gsl_matrix_short_set_row(gsl_matrix_short * m, const size_t i, const gsl_vector_short * v); int gsl_matrix_short_set_col(gsl_matrix_short * m, const size_t j, const gsl_vector_short * v); /***********************************************************************/ /* inline functions if you are using GCC */ INLINE_DECL short gsl_matrix_short_get(const gsl_matrix_short * m, const size_t i, const size_t j); INLINE_DECL void gsl_matrix_short_set(gsl_matrix_short * m, const size_t i, const size_t j, const short x); INLINE_DECL short * gsl_matrix_short_ptr(gsl_matrix_short * m, const size_t i, const size_t j); INLINE_DECL const short * gsl_matrix_short_const_ptr(const gsl_matrix_short * m, const size_t i, const size_t j); #ifdef HAVE_INLINE INLINE_FUN short gsl_matrix_short_get(const gsl_matrix_short * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ; } else if (j >= m->size2) { GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ; } } #endif return m->data[i * m->tda + j] ; } INLINE_FUN void gsl_matrix_short_set(gsl_matrix_short * m, const size_t i, const size_t j, const short x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ; } } #endif m->data[i * m->tda + j] = x ; } INLINE_FUN short * gsl_matrix_short_ptr(gsl_matrix_short * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (short *) (m->data + (i * m->tda + j)) ; } INLINE_FUN const short * gsl_matrix_short_const_ptr(const gsl_matrix_short * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (const short *) (m->data + (i * m->tda + j)) ; } #endif __END_DECLS #endif /* __GSL_MATRIX_SHORT_H__ */ gsl/matrix/gsl_matrix_uint.h0000664000175000017500000003072714057135461014623 0ustar eddedd/* matrix/gsl_matrix_uint.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MATRIX_UINT_H__ #define __GSL_MATRIX_UINT_H__ #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size1; size_t size2; size_t tda; unsigned int * data; gsl_block_uint * block; int owner; } gsl_matrix_uint; typedef struct { gsl_matrix_uint matrix; } _gsl_matrix_uint_view; typedef _gsl_matrix_uint_view gsl_matrix_uint_view; typedef struct { gsl_matrix_uint matrix; } _gsl_matrix_uint_const_view; typedef const _gsl_matrix_uint_const_view gsl_matrix_uint_const_view; /* Allocation */ gsl_matrix_uint * gsl_matrix_uint_alloc (const size_t n1, const size_t n2); gsl_matrix_uint * gsl_matrix_uint_calloc (const size_t n1, const size_t n2); gsl_matrix_uint * gsl_matrix_uint_alloc_from_block (gsl_block_uint * b, const size_t offset, const size_t n1, const size_t n2, const size_t d2); gsl_matrix_uint * gsl_matrix_uint_alloc_from_matrix (gsl_matrix_uint * m, const size_t k1, const size_t k2, const size_t n1, const size_t n2); gsl_vector_uint * gsl_vector_uint_alloc_row_from_matrix (gsl_matrix_uint * m, const size_t i); gsl_vector_uint * gsl_vector_uint_alloc_col_from_matrix (gsl_matrix_uint * m, const size_t j); void gsl_matrix_uint_free (gsl_matrix_uint * m); /* Views */ _gsl_matrix_uint_view gsl_matrix_uint_submatrix (gsl_matrix_uint * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_uint_view gsl_matrix_uint_row (gsl_matrix_uint * m, const size_t i); _gsl_vector_uint_view gsl_matrix_uint_column (gsl_matrix_uint * m, const size_t j); _gsl_vector_uint_view gsl_matrix_uint_diagonal (gsl_matrix_uint * m); _gsl_vector_uint_view gsl_matrix_uint_subdiagonal (gsl_matrix_uint * m, const size_t k); _gsl_vector_uint_view gsl_matrix_uint_superdiagonal (gsl_matrix_uint * m, const size_t k); _gsl_vector_uint_view gsl_matrix_uint_subrow (gsl_matrix_uint * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_uint_view gsl_matrix_uint_subcolumn (gsl_matrix_uint * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_uint_view gsl_matrix_uint_view_array (unsigned int * base, const size_t n1, const size_t n2); _gsl_matrix_uint_view gsl_matrix_uint_view_array_with_tda (unsigned int * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_uint_view gsl_matrix_uint_view_vector (gsl_vector_uint * v, const size_t n1, const size_t n2); _gsl_matrix_uint_view gsl_matrix_uint_view_vector_with_tda (gsl_vector_uint * v, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_uint_const_view gsl_matrix_uint_const_submatrix (const gsl_matrix_uint * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_uint_const_view gsl_matrix_uint_const_row (const gsl_matrix_uint * m, const size_t i); _gsl_vector_uint_const_view gsl_matrix_uint_const_column (const gsl_matrix_uint * m, const size_t j); _gsl_vector_uint_const_view gsl_matrix_uint_const_diagonal (const gsl_matrix_uint * m); _gsl_vector_uint_const_view gsl_matrix_uint_const_subdiagonal (const gsl_matrix_uint * m, const size_t k); _gsl_vector_uint_const_view gsl_matrix_uint_const_superdiagonal (const gsl_matrix_uint * m, const size_t k); _gsl_vector_uint_const_view gsl_matrix_uint_const_subrow (const gsl_matrix_uint * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_uint_const_view gsl_matrix_uint_const_subcolumn (const gsl_matrix_uint * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_uint_const_view gsl_matrix_uint_const_view_array (const unsigned int * base, const size_t n1, const size_t n2); _gsl_matrix_uint_const_view gsl_matrix_uint_const_view_array_with_tda (const unsigned int * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_uint_const_view gsl_matrix_uint_const_view_vector (const gsl_vector_uint * v, const size_t n1, const size_t n2); _gsl_matrix_uint_const_view gsl_matrix_uint_const_view_vector_with_tda (const gsl_vector_uint * v, const size_t n1, const size_t n2, const size_t tda); /* Operations */ void gsl_matrix_uint_set_zero (gsl_matrix_uint * m); void gsl_matrix_uint_set_identity (gsl_matrix_uint * m); void gsl_matrix_uint_set_all (gsl_matrix_uint * m, unsigned int x); int gsl_matrix_uint_fread (FILE * stream, gsl_matrix_uint * m) ; int gsl_matrix_uint_fwrite (FILE * stream, const gsl_matrix_uint * m) ; int gsl_matrix_uint_fscanf (FILE * stream, gsl_matrix_uint * m); int gsl_matrix_uint_fprintf (FILE * stream, const gsl_matrix_uint * m, const char * format); int gsl_matrix_uint_memcpy(gsl_matrix_uint * dest, const gsl_matrix_uint * src); int gsl_matrix_uint_swap(gsl_matrix_uint * m1, gsl_matrix_uint * m2); int gsl_matrix_uint_tricpy(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix_uint * dest, const gsl_matrix_uint * src); int gsl_matrix_uint_swap_rows(gsl_matrix_uint * m, const size_t i, const size_t j); int gsl_matrix_uint_swap_columns(gsl_matrix_uint * m, const size_t i, const size_t j); int gsl_matrix_uint_swap_rowcol(gsl_matrix_uint * m, const size_t i, const size_t j); int gsl_matrix_uint_transpose (gsl_matrix_uint * m); int gsl_matrix_uint_transpose_memcpy (gsl_matrix_uint * dest, const gsl_matrix_uint * src); int gsl_matrix_uint_transpose_tricpy (CBLAS_UPLO_t Uplo_src, CBLAS_DIAG_t Diag, gsl_matrix_uint * dest, const gsl_matrix_uint * src); unsigned int gsl_matrix_uint_max (const gsl_matrix_uint * m); unsigned int gsl_matrix_uint_min (const gsl_matrix_uint * m); void gsl_matrix_uint_minmax (const gsl_matrix_uint * m, unsigned int * min_out, unsigned int * max_out); void gsl_matrix_uint_max_index (const gsl_matrix_uint * m, size_t * imax, size_t *jmax); void gsl_matrix_uint_min_index (const gsl_matrix_uint * m, size_t * imin, size_t *jmin); void gsl_matrix_uint_minmax_index (const gsl_matrix_uint * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax); int gsl_matrix_uint_equal (const gsl_matrix_uint * a, const gsl_matrix_uint * b); int gsl_matrix_uint_isnull (const gsl_matrix_uint * m); int gsl_matrix_uint_ispos (const gsl_matrix_uint * m); int gsl_matrix_uint_isneg (const gsl_matrix_uint * m); int gsl_matrix_uint_isnonneg (const gsl_matrix_uint * m); unsigned int gsl_matrix_uint_norm1 (const gsl_matrix_uint * m); int gsl_matrix_uint_add (gsl_matrix_uint * a, const gsl_matrix_uint * b); int gsl_matrix_uint_sub (gsl_matrix_uint * a, const gsl_matrix_uint * b); int gsl_matrix_uint_mul_elements (gsl_matrix_uint * a, const gsl_matrix_uint * b); int gsl_matrix_uint_div_elements (gsl_matrix_uint * a, const gsl_matrix_uint * b); int gsl_matrix_uint_scale (gsl_matrix_uint * a, const unsigned int x); int gsl_matrix_uint_scale_rows (gsl_matrix_uint * a, const gsl_vector_uint * x); int gsl_matrix_uint_scale_columns (gsl_matrix_uint * a, const gsl_vector_uint * x); int gsl_matrix_uint_add_constant (gsl_matrix_uint * a, const unsigned int x); int gsl_matrix_uint_add_diagonal (gsl_matrix_uint * a, const unsigned int x); /***********************************************************************/ /* The functions below are obsolete */ /***********************************************************************/ int gsl_matrix_uint_get_row(gsl_vector_uint * v, const gsl_matrix_uint * m, const size_t i); int gsl_matrix_uint_get_col(gsl_vector_uint * v, const gsl_matrix_uint * m, const size_t j); int gsl_matrix_uint_set_row(gsl_matrix_uint * m, const size_t i, const gsl_vector_uint * v); int gsl_matrix_uint_set_col(gsl_matrix_uint * m, const size_t j, const gsl_vector_uint * v); /***********************************************************************/ /* inline functions if you are using GCC */ INLINE_DECL unsigned int gsl_matrix_uint_get(const gsl_matrix_uint * m, const size_t i, const size_t j); INLINE_DECL void gsl_matrix_uint_set(gsl_matrix_uint * m, const size_t i, const size_t j, const unsigned int x); INLINE_DECL unsigned int * gsl_matrix_uint_ptr(gsl_matrix_uint * m, const size_t i, const size_t j); INLINE_DECL const unsigned int * gsl_matrix_uint_const_ptr(const gsl_matrix_uint * m, const size_t i, const size_t j); #ifdef HAVE_INLINE INLINE_FUN unsigned int gsl_matrix_uint_get(const gsl_matrix_uint * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ; } else if (j >= m->size2) { GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ; } } #endif return m->data[i * m->tda + j] ; } INLINE_FUN void gsl_matrix_uint_set(gsl_matrix_uint * m, const size_t i, const size_t j, const unsigned int x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ; } } #endif m->data[i * m->tda + j] = x ; } INLINE_FUN unsigned int * gsl_matrix_uint_ptr(gsl_matrix_uint * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (unsigned int *) (m->data + (i * m->tda + j)) ; } INLINE_FUN const unsigned int * gsl_matrix_uint_const_ptr(const gsl_matrix_uint * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (const unsigned int *) (m->data + (i * m->tda + j)) ; } #endif __END_DECLS #endif /* __GSL_MATRIX_UINT_H__ */ gsl/matrix/Makefile.in0000664000175000017500000011555014057135461013305 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) test_static$(EXEEXT) subdir = matrix ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslmatrix_la_LIBADD = am_libgslmatrix_la_OBJECTS = init.lo matrix.lo file.lo rowcol.lo \ swap.lo copy.lo minmax.lo prop.lo oper.lo getset.lo view.lo \ submatrix.lo libgslmatrix_la_OBJECTS = $(am_libgslmatrix_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslmatrix.la ../vector/libgslvector.la \ ../blas/libgslblas.la ../cblas/libgslcblas.la \ ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la am_test_static_OBJECTS = test_static.$(OBJEXT) test_static_OBJECTS = $(am_test_static_OBJECTS) test_static_DEPENDENCIES = libgslmatrix.la ../vector/libgslvector.la \ ../blas/libgslblas.la ../cblas/libgslcblas.la \ ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/copy.Plo ./$(DEPDIR)/file.Plo \ ./$(DEPDIR)/getset.Plo ./$(DEPDIR)/init.Plo \ ./$(DEPDIR)/matrix.Plo ./$(DEPDIR)/minmax.Plo \ ./$(DEPDIR)/oper.Plo ./$(DEPDIR)/prop.Plo \ ./$(DEPDIR)/rowcol.Plo ./$(DEPDIR)/submatrix.Plo \ ./$(DEPDIR)/swap.Plo ./$(DEPDIR)/test.Po \ ./$(DEPDIR)/test_static.Po ./$(DEPDIR)/view.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslmatrix_la_SOURCES) $(test_SOURCES) \ $(test_static_SOURCES) DIST_SOURCES = $(libgslmatrix_la_SOURCES) $(test_SOURCES) \ $(test_static_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslmatrix.la pkginclude_HEADERS = gsl_matrix.h gsl_matrix_char.h gsl_matrix_complex_double.h gsl_matrix_complex_float.h gsl_matrix_complex_long_double.h gsl_matrix_double.h gsl_matrix_float.h gsl_matrix_int.h gsl_matrix_long.h gsl_matrix_long_double.h gsl_matrix_short.h gsl_matrix_uchar.h gsl_matrix_uint.h gsl_matrix_ulong.h gsl_matrix_ushort.h AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslmatrix.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_static_LDADD = libgslmatrix.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c test_static_SOURCES = test_static.c CLEANFILES = test.txt test.dat test_static.dat noinst_HEADERS = init_source.c file_source.c rowcol_source.c swap_source.c copy_source.c test_complex_source.c test_source.c minmax_source.c prop_source.c oper_source.c getset_source.c view_source.c submatrix_source.c oper_complex_source.c swap_complex_source.c libgslmatrix_la_SOURCES = init.c matrix.c file.c rowcol.c swap.c copy.c minmax.c prop.c oper.c getset.c view.c submatrix.c view.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu matrix/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu matrix/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslmatrix.la: $(libgslmatrix_la_OBJECTS) $(libgslmatrix_la_DEPENDENCIES) $(EXTRA_libgslmatrix_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslmatrix_la_OBJECTS) $(libgslmatrix_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) test_static$(EXEEXT): $(test_static_OBJECTS) $(test_static_DEPENDENCIES) $(EXTRA_test_static_DEPENDENCIES) @rm -f test_static$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_static_OBJECTS) $(test_static_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getset.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matrix.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minmax.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oper.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prop.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rowcol.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/submatrix.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swap.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_static.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/view.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_static.log: test_static$(EXEEXT) @p='test_static$(EXEEXT)'; \ b='test_static'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/copy.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/getset.Plo -rm -f ./$(DEPDIR)/init.Plo -rm -f ./$(DEPDIR)/matrix.Plo -rm -f ./$(DEPDIR)/minmax.Plo -rm -f ./$(DEPDIR)/oper.Plo -rm -f ./$(DEPDIR)/prop.Plo -rm -f ./$(DEPDIR)/rowcol.Plo -rm -f ./$(DEPDIR)/submatrix.Plo -rm -f ./$(DEPDIR)/swap.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_static.Po -rm -f ./$(DEPDIR)/view.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/copy.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/getset.Plo -rm -f ./$(DEPDIR)/init.Plo -rm -f ./$(DEPDIR)/matrix.Plo -rm -f ./$(DEPDIR)/minmax.Plo -rm -f ./$(DEPDIR)/oper.Plo -rm -f ./$(DEPDIR)/prop.Plo -rm -f ./$(DEPDIR)/rowcol.Plo -rm -f ./$(DEPDIR)/submatrix.Plo -rm -f ./$(DEPDIR)/swap.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_static.Po -rm -f ./$(DEPDIR)/view.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/matrix/gsl_matrix_long_double.h0000664000175000017500000003364014057135461016132 0ustar eddedd/* matrix/gsl_matrix_long_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MATRIX_LONG_DOUBLE_H__ #define __GSL_MATRIX_LONG_DOUBLE_H__ #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size1; size_t size2; size_t tda; long double * data; gsl_block_long_double * block; int owner; } gsl_matrix_long_double; typedef struct { gsl_matrix_long_double matrix; } _gsl_matrix_long_double_view; typedef _gsl_matrix_long_double_view gsl_matrix_long_double_view; typedef struct { gsl_matrix_long_double matrix; } _gsl_matrix_long_double_const_view; typedef const _gsl_matrix_long_double_const_view gsl_matrix_long_double_const_view; /* Allocation */ gsl_matrix_long_double * gsl_matrix_long_double_alloc (const size_t n1, const size_t n2); gsl_matrix_long_double * gsl_matrix_long_double_calloc (const size_t n1, const size_t n2); gsl_matrix_long_double * gsl_matrix_long_double_alloc_from_block (gsl_block_long_double * b, const size_t offset, const size_t n1, const size_t n2, const size_t d2); gsl_matrix_long_double * gsl_matrix_long_double_alloc_from_matrix (gsl_matrix_long_double * m, const size_t k1, const size_t k2, const size_t n1, const size_t n2); gsl_vector_long_double * gsl_vector_long_double_alloc_row_from_matrix (gsl_matrix_long_double * m, const size_t i); gsl_vector_long_double * gsl_vector_long_double_alloc_col_from_matrix (gsl_matrix_long_double * m, const size_t j); void gsl_matrix_long_double_free (gsl_matrix_long_double * m); /* Views */ _gsl_matrix_long_double_view gsl_matrix_long_double_submatrix (gsl_matrix_long_double * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_long_double_view gsl_matrix_long_double_row (gsl_matrix_long_double * m, const size_t i); _gsl_vector_long_double_view gsl_matrix_long_double_column (gsl_matrix_long_double * m, const size_t j); _gsl_vector_long_double_view gsl_matrix_long_double_diagonal (gsl_matrix_long_double * m); _gsl_vector_long_double_view gsl_matrix_long_double_subdiagonal (gsl_matrix_long_double * m, const size_t k); _gsl_vector_long_double_view gsl_matrix_long_double_superdiagonal (gsl_matrix_long_double * m, const size_t k); _gsl_vector_long_double_view gsl_matrix_long_double_subrow (gsl_matrix_long_double * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_long_double_view gsl_matrix_long_double_subcolumn (gsl_matrix_long_double * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_long_double_view gsl_matrix_long_double_view_array (long double * base, const size_t n1, const size_t n2); _gsl_matrix_long_double_view gsl_matrix_long_double_view_array_with_tda (long double * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_long_double_view gsl_matrix_long_double_view_vector (gsl_vector_long_double * v, const size_t n1, const size_t n2); _gsl_matrix_long_double_view gsl_matrix_long_double_view_vector_with_tda (gsl_vector_long_double * v, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_long_double_const_view gsl_matrix_long_double_const_submatrix (const gsl_matrix_long_double * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_long_double_const_view gsl_matrix_long_double_const_row (const gsl_matrix_long_double * m, const size_t i); _gsl_vector_long_double_const_view gsl_matrix_long_double_const_column (const gsl_matrix_long_double * m, const size_t j); _gsl_vector_long_double_const_view gsl_matrix_long_double_const_diagonal (const gsl_matrix_long_double * m); _gsl_vector_long_double_const_view gsl_matrix_long_double_const_subdiagonal (const gsl_matrix_long_double * m, const size_t k); _gsl_vector_long_double_const_view gsl_matrix_long_double_const_superdiagonal (const gsl_matrix_long_double * m, const size_t k); _gsl_vector_long_double_const_view gsl_matrix_long_double_const_subrow (const gsl_matrix_long_double * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_long_double_const_view gsl_matrix_long_double_const_subcolumn (const gsl_matrix_long_double * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_long_double_const_view gsl_matrix_long_double_const_view_array (const long double * base, const size_t n1, const size_t n2); _gsl_matrix_long_double_const_view gsl_matrix_long_double_const_view_array_with_tda (const long double * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_long_double_const_view gsl_matrix_long_double_const_view_vector (const gsl_vector_long_double * v, const size_t n1, const size_t n2); _gsl_matrix_long_double_const_view gsl_matrix_long_double_const_view_vector_with_tda (const gsl_vector_long_double * v, const size_t n1, const size_t n2, const size_t tda); /* Operations */ void gsl_matrix_long_double_set_zero (gsl_matrix_long_double * m); void gsl_matrix_long_double_set_identity (gsl_matrix_long_double * m); void gsl_matrix_long_double_set_all (gsl_matrix_long_double * m, long double x); int gsl_matrix_long_double_fread (FILE * stream, gsl_matrix_long_double * m) ; int gsl_matrix_long_double_fwrite (FILE * stream, const gsl_matrix_long_double * m) ; int gsl_matrix_long_double_fscanf (FILE * stream, gsl_matrix_long_double * m); int gsl_matrix_long_double_fprintf (FILE * stream, const gsl_matrix_long_double * m, const char * format); int gsl_matrix_long_double_memcpy(gsl_matrix_long_double * dest, const gsl_matrix_long_double * src); int gsl_matrix_long_double_swap(gsl_matrix_long_double * m1, gsl_matrix_long_double * m2); int gsl_matrix_long_double_tricpy(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix_long_double * dest, const gsl_matrix_long_double * src); int gsl_matrix_long_double_swap_rows(gsl_matrix_long_double * m, const size_t i, const size_t j); int gsl_matrix_long_double_swap_columns(gsl_matrix_long_double * m, const size_t i, const size_t j); int gsl_matrix_long_double_swap_rowcol(gsl_matrix_long_double * m, const size_t i, const size_t j); int gsl_matrix_long_double_transpose (gsl_matrix_long_double * m); int gsl_matrix_long_double_transpose_memcpy (gsl_matrix_long_double * dest, const gsl_matrix_long_double * src); int gsl_matrix_long_double_transpose_tricpy (CBLAS_UPLO_t Uplo_src, CBLAS_DIAG_t Diag, gsl_matrix_long_double * dest, const gsl_matrix_long_double * src); long double gsl_matrix_long_double_max (const gsl_matrix_long_double * m); long double gsl_matrix_long_double_min (const gsl_matrix_long_double * m); void gsl_matrix_long_double_minmax (const gsl_matrix_long_double * m, long double * min_out, long double * max_out); void gsl_matrix_long_double_max_index (const gsl_matrix_long_double * m, size_t * imax, size_t *jmax); void gsl_matrix_long_double_min_index (const gsl_matrix_long_double * m, size_t * imin, size_t *jmin); void gsl_matrix_long_double_minmax_index (const gsl_matrix_long_double * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax); int gsl_matrix_long_double_equal (const gsl_matrix_long_double * a, const gsl_matrix_long_double * b); int gsl_matrix_long_double_isnull (const gsl_matrix_long_double * m); int gsl_matrix_long_double_ispos (const gsl_matrix_long_double * m); int gsl_matrix_long_double_isneg (const gsl_matrix_long_double * m); int gsl_matrix_long_double_isnonneg (const gsl_matrix_long_double * m); long double gsl_matrix_long_double_norm1 (const gsl_matrix_long_double * m); int gsl_matrix_long_double_add (gsl_matrix_long_double * a, const gsl_matrix_long_double * b); int gsl_matrix_long_double_sub (gsl_matrix_long_double * a, const gsl_matrix_long_double * b); int gsl_matrix_long_double_mul_elements (gsl_matrix_long_double * a, const gsl_matrix_long_double * b); int gsl_matrix_long_double_div_elements (gsl_matrix_long_double * a, const gsl_matrix_long_double * b); int gsl_matrix_long_double_scale (gsl_matrix_long_double * a, const long double x); int gsl_matrix_long_double_scale_rows (gsl_matrix_long_double * a, const gsl_vector_long_double * x); int gsl_matrix_long_double_scale_columns (gsl_matrix_long_double * a, const gsl_vector_long_double * x); int gsl_matrix_long_double_add_constant (gsl_matrix_long_double * a, const long double x); int gsl_matrix_long_double_add_diagonal (gsl_matrix_long_double * a, const long double x); /***********************************************************************/ /* The functions below are obsolete */ /***********************************************************************/ int gsl_matrix_long_double_get_row(gsl_vector_long_double * v, const gsl_matrix_long_double * m, const size_t i); int gsl_matrix_long_double_get_col(gsl_vector_long_double * v, const gsl_matrix_long_double * m, const size_t j); int gsl_matrix_long_double_set_row(gsl_matrix_long_double * m, const size_t i, const gsl_vector_long_double * v); int gsl_matrix_long_double_set_col(gsl_matrix_long_double * m, const size_t j, const gsl_vector_long_double * v); /***********************************************************************/ /* inline functions if you are using GCC */ INLINE_DECL long double gsl_matrix_long_double_get(const gsl_matrix_long_double * m, const size_t i, const size_t j); INLINE_DECL void gsl_matrix_long_double_set(gsl_matrix_long_double * m, const size_t i, const size_t j, const long double x); INLINE_DECL long double * gsl_matrix_long_double_ptr(gsl_matrix_long_double * m, const size_t i, const size_t j); INLINE_DECL const long double * gsl_matrix_long_double_const_ptr(const gsl_matrix_long_double * m, const size_t i, const size_t j); #ifdef HAVE_INLINE INLINE_FUN long double gsl_matrix_long_double_get(const gsl_matrix_long_double * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ; } else if (j >= m->size2) { GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ; } } #endif return m->data[i * m->tda + j] ; } INLINE_FUN void gsl_matrix_long_double_set(gsl_matrix_long_double * m, const size_t i, const size_t j, const long double x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ; } } #endif m->data[i * m->tda + j] = x ; } INLINE_FUN long double * gsl_matrix_long_double_ptr(gsl_matrix_long_double * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (long double *) (m->data + (i * m->tda + j)) ; } INLINE_FUN const long double * gsl_matrix_long_double_const_ptr(const gsl_matrix_long_double * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (const long double *) (m->data + (i * m->tda + j)) ; } #endif __END_DECLS #endif /* __GSL_MATRIX_LONG_DOUBLE_H__ */ gsl/matrix/file_source.c0000644000175000017500000001052613536674414013705 0ustar eddedd/* matrix/file_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION (gsl_matrix, fread) (FILE * stream, TYPE (gsl_matrix) * m) { int status = 0; const size_t size1 = m->size1; const size_t size2 = m->size2; const size_t tda = m->tda; if (tda == size2) /* the rows are contiguous */ { status = FUNCTION (gsl_block, raw_fread) (stream, m->data, size1 * size2, 1); } else { size_t i; for (i = 0 ; i < size1 ; i++) /* read each row separately */ { status = FUNCTION (gsl_block, raw_fread) (stream, m->data + i * MULTIPLICITY * tda, size2, 1); if (status) break; } } return status; } int FUNCTION (gsl_matrix, fwrite) (FILE * stream, const TYPE (gsl_matrix) * m) { int status = 0; const size_t size1 = m->size1; const size_t size2 = m->size2; const size_t tda = m->tda; if (tda == size2) /* the rows are contiguous */ { status = FUNCTION (gsl_block, raw_fwrite) (stream, m->data, size1 * size2, 1); } else { size_t i; for (i = 0 ; i < size1 ; i++) /* write each row separately */ { status = FUNCTION (gsl_block, raw_fwrite) (stream, m->data + i * MULTIPLICITY * tda, size2, 1); if (status) break; } } return status; } #if !(USES_LONGDOUBLE && !HAVE_PRINTF_LONGDOUBLE) int FUNCTION (gsl_matrix, fprintf) (FILE * stream, const TYPE (gsl_matrix) * m, const char *format) { int status = 0; const size_t size1 = m->size1; const size_t size2 = m->size2; const size_t tda = m->tda; if (tda == size2) /* the rows are contiguous */ { status = FUNCTION (gsl_block, raw_fprintf) (stream, m->data, size1 * size2, 1, format); } else { size_t i; for (i = 0 ; i < size1 ; i++) /* print each row separately */ { status = FUNCTION (gsl_block, raw_fprintf) (stream, m->data + i * MULTIPLICITY * tda, size2, 1, format); if (status) break; } } return status; } int FUNCTION (gsl_matrix, fscanf) (FILE * stream, TYPE (gsl_matrix) * m) { int status = 0; const size_t size1 = m->size1; const size_t size2 = m->size2; const size_t tda = m->tda; if (tda == size2) /* the rows are contiguous */ { status = FUNCTION (gsl_block, raw_fscanf) (stream, m->data, size1 * size2, 1); } else { size_t i; for (i = 0 ; i < size1 ; i++) /* scan each row separately */ { status = FUNCTION (gsl_block, raw_fscanf) (stream, m->data + i * MULTIPLICITY * tda, size2, 1); if (status) break; } } return status; } #endif gsl/matrix/view_source.c0000644000175000017500000001310213536674414013731 0ustar eddedd/* matrix/view_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ QUALIFIED_VIEW (_gsl_matrix,view) FUNCTION (gsl_matrix, view_array) (QUALIFIER ATOMIC * array, const size_t n1, const size_t n2) { QUALIFIED_VIEW (_gsl_matrix,view) view = NULL_MATRIX_VIEW; { TYPE(gsl_matrix) m = NULL_MATRIX; m.data = (ATOMIC *)array; m.size1 = n1; m.size2 = n2; m.tda = n2; m.block = 0; m.owner = 0; view.matrix = m; return view; } } QUALIFIED_VIEW (_gsl_matrix,view) FUNCTION(gsl_matrix, view_array_with_tda) (QUALIFIER ATOMIC * base, const size_t n1, const size_t n2, const size_t tda) { QUALIFIED_VIEW (_gsl_matrix,view) view = NULL_MATRIX_VIEW; if (n2 > tda) { GSL_ERROR_VAL ("matrix dimension n2 must not exceed tda", GSL_EINVAL, view); } { TYPE(gsl_matrix) m = NULL_MATRIX; m.data = (ATOMIC *)base; m.size1 = n1; m.size2 = n2; m.tda = tda; m.block = 0; m.owner = 0; view.matrix = m; return view; } } QUALIFIED_VIEW (_gsl_matrix,view) FUNCTION(gsl_matrix, view_vector) (QUALIFIED_TYPE(gsl_vector) * v, const size_t n1, const size_t n2) { QUALIFIED_VIEW (_gsl_matrix,view) view = NULL_MATRIX_VIEW; if (v->stride != 1) { GSL_ERROR_VAL ("vector must have unit stride", GSL_EINVAL, view); } else if (n1 * n2 > v->size) { GSL_ERROR_VAL ("matrix size exceeds size of original", GSL_EINVAL, view); } { TYPE(gsl_matrix) m = NULL_MATRIX; m.data = v->data; m.size1 = n1; m.size2 = n2; m.tda = n2; m.block = v->block; m.owner = 0; view.matrix = m; return view; } } QUALIFIED_VIEW (_gsl_matrix,view) FUNCTION(gsl_matrix, view_vector_with_tda) (QUALIFIED_TYPE(gsl_vector) * v, const size_t n1, const size_t n2, const size_t tda) { QUALIFIED_VIEW (_gsl_matrix,view) view = NULL_MATRIX_VIEW; if (v->stride != 1) { GSL_ERROR_VAL ("vector must have unit stride", GSL_EINVAL, view); } else if (n2 > tda) { GSL_ERROR_VAL ("matrix dimension n2 must not exceed tda", GSL_EINVAL, view); } else if (n1 * tda > v->size) { GSL_ERROR_VAL ("matrix size exceeds size of original", GSL_EINVAL, view); } { TYPE(gsl_matrix) m = NULL_MATRIX; m.data = v->data; m.size1 = n1; m.size2 = n2; m.tda = tda; m.block = v->block; m.owner = 0; view.matrix = m; return view; } } #ifdef JUNK int FUNCTION (gsl_matrix, view_from_matrix) (TYPE(gsl_matrix) * m, TYPE(gsl_matrix) * mm, const size_t k1, const size_t k2, const size_t n1, const size_t n2) { if (k1 + n1 > mm->size1) { GSL_ERROR_VAL ("submatrix dimension 1 exceeds size of original", GSL_EINVAL, 0); } else if (k2 + n2 > mm->size2) { GSL_ERROR_VAL ("submatrix dimension 2 exceeds size of original", GSL_EINVAL, 0); } m->data = mm->data + k1 * mm->tda + k2 ; m->size1 = n1; m->size2 = n2; m->tda = mm->tda; m->block = mm->block; m->owner = 0; return GSL_SUCCESS; } int FUNCTION (gsl_vector, view_row_from_matrix) (TYPE(gsl_vector) * v, TYPE(gsl_matrix) * m, const size_t i) { const size_t column_length = m->size1; if (i >= column_length) { GSL_ERROR ("row index is out of range", GSL_EINVAL); } if (v->block != 0) { GSL_ERROR ("vector already has memory allocated to it", GSL_ENOMEM); } v->data = m->data + MULTIPLICITY * i * m->tda ; v->size = m->size2; v->stride = 1; return GSL_SUCCESS; } int FUNCTION (gsl_vector, view_col_from_matrix) (TYPE(gsl_vector) * v, TYPE(gsl_matrix) * m, const size_t j) { const size_t row_length = m->size2; if (j >= row_length) { GSL_ERROR_VAL ("column index is out of range", GSL_EINVAL, 0); } if (v->block != 0) { GSL_ERROR ("vector already has memory allocated to it", GSL_ENOMEM); } v->data = m->data + MULTIPLICITY * j ; v->size = m->size1; v->stride = m->tda; return GSL_SUCCESS; } #endif /* JUNK */ gsl/matrix/gsl_matrix_ulong.h0000664000175000017500000003130614057135461014762 0ustar eddedd/* matrix/gsl_matrix_ulong.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MATRIX_ULONG_H__ #define __GSL_MATRIX_ULONG_H__ #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size1; size_t size2; size_t tda; unsigned long * data; gsl_block_ulong * block; int owner; } gsl_matrix_ulong; typedef struct { gsl_matrix_ulong matrix; } _gsl_matrix_ulong_view; typedef _gsl_matrix_ulong_view gsl_matrix_ulong_view; typedef struct { gsl_matrix_ulong matrix; } _gsl_matrix_ulong_const_view; typedef const _gsl_matrix_ulong_const_view gsl_matrix_ulong_const_view; /* Allocation */ gsl_matrix_ulong * gsl_matrix_ulong_alloc (const size_t n1, const size_t n2); gsl_matrix_ulong * gsl_matrix_ulong_calloc (const size_t n1, const size_t n2); gsl_matrix_ulong * gsl_matrix_ulong_alloc_from_block (gsl_block_ulong * b, const size_t offset, const size_t n1, const size_t n2, const size_t d2); gsl_matrix_ulong * gsl_matrix_ulong_alloc_from_matrix (gsl_matrix_ulong * m, const size_t k1, const size_t k2, const size_t n1, const size_t n2); gsl_vector_ulong * gsl_vector_ulong_alloc_row_from_matrix (gsl_matrix_ulong * m, const size_t i); gsl_vector_ulong * gsl_vector_ulong_alloc_col_from_matrix (gsl_matrix_ulong * m, const size_t j); void gsl_matrix_ulong_free (gsl_matrix_ulong * m); /* Views */ _gsl_matrix_ulong_view gsl_matrix_ulong_submatrix (gsl_matrix_ulong * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_ulong_view gsl_matrix_ulong_row (gsl_matrix_ulong * m, const size_t i); _gsl_vector_ulong_view gsl_matrix_ulong_column (gsl_matrix_ulong * m, const size_t j); _gsl_vector_ulong_view gsl_matrix_ulong_diagonal (gsl_matrix_ulong * m); _gsl_vector_ulong_view gsl_matrix_ulong_subdiagonal (gsl_matrix_ulong * m, const size_t k); _gsl_vector_ulong_view gsl_matrix_ulong_superdiagonal (gsl_matrix_ulong * m, const size_t k); _gsl_vector_ulong_view gsl_matrix_ulong_subrow (gsl_matrix_ulong * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_ulong_view gsl_matrix_ulong_subcolumn (gsl_matrix_ulong * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_ulong_view gsl_matrix_ulong_view_array (unsigned long * base, const size_t n1, const size_t n2); _gsl_matrix_ulong_view gsl_matrix_ulong_view_array_with_tda (unsigned long * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_ulong_view gsl_matrix_ulong_view_vector (gsl_vector_ulong * v, const size_t n1, const size_t n2); _gsl_matrix_ulong_view gsl_matrix_ulong_view_vector_with_tda (gsl_vector_ulong * v, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_ulong_const_view gsl_matrix_ulong_const_submatrix (const gsl_matrix_ulong * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_ulong_const_view gsl_matrix_ulong_const_row (const gsl_matrix_ulong * m, const size_t i); _gsl_vector_ulong_const_view gsl_matrix_ulong_const_column (const gsl_matrix_ulong * m, const size_t j); _gsl_vector_ulong_const_view gsl_matrix_ulong_const_diagonal (const gsl_matrix_ulong * m); _gsl_vector_ulong_const_view gsl_matrix_ulong_const_subdiagonal (const gsl_matrix_ulong * m, const size_t k); _gsl_vector_ulong_const_view gsl_matrix_ulong_const_superdiagonal (const gsl_matrix_ulong * m, const size_t k); _gsl_vector_ulong_const_view gsl_matrix_ulong_const_subrow (const gsl_matrix_ulong * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_ulong_const_view gsl_matrix_ulong_const_subcolumn (const gsl_matrix_ulong * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_ulong_const_view gsl_matrix_ulong_const_view_array (const unsigned long * base, const size_t n1, const size_t n2); _gsl_matrix_ulong_const_view gsl_matrix_ulong_const_view_array_with_tda (const unsigned long * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_ulong_const_view gsl_matrix_ulong_const_view_vector (const gsl_vector_ulong * v, const size_t n1, const size_t n2); _gsl_matrix_ulong_const_view gsl_matrix_ulong_const_view_vector_with_tda (const gsl_vector_ulong * v, const size_t n1, const size_t n2, const size_t tda); /* Operations */ void gsl_matrix_ulong_set_zero (gsl_matrix_ulong * m); void gsl_matrix_ulong_set_identity (gsl_matrix_ulong * m); void gsl_matrix_ulong_set_all (gsl_matrix_ulong * m, unsigned long x); int gsl_matrix_ulong_fread (FILE * stream, gsl_matrix_ulong * m) ; int gsl_matrix_ulong_fwrite (FILE * stream, const gsl_matrix_ulong * m) ; int gsl_matrix_ulong_fscanf (FILE * stream, gsl_matrix_ulong * m); int gsl_matrix_ulong_fprintf (FILE * stream, const gsl_matrix_ulong * m, const char * format); int gsl_matrix_ulong_memcpy(gsl_matrix_ulong * dest, const gsl_matrix_ulong * src); int gsl_matrix_ulong_swap(gsl_matrix_ulong * m1, gsl_matrix_ulong * m2); int gsl_matrix_ulong_tricpy(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix_ulong * dest, const gsl_matrix_ulong * src); int gsl_matrix_ulong_swap_rows(gsl_matrix_ulong * m, const size_t i, const size_t j); int gsl_matrix_ulong_swap_columns(gsl_matrix_ulong * m, const size_t i, const size_t j); int gsl_matrix_ulong_swap_rowcol(gsl_matrix_ulong * m, const size_t i, const size_t j); int gsl_matrix_ulong_transpose (gsl_matrix_ulong * m); int gsl_matrix_ulong_transpose_memcpy (gsl_matrix_ulong * dest, const gsl_matrix_ulong * src); int gsl_matrix_ulong_transpose_tricpy (CBLAS_UPLO_t Uplo_src, CBLAS_DIAG_t Diag, gsl_matrix_ulong * dest, const gsl_matrix_ulong * src); unsigned long gsl_matrix_ulong_max (const gsl_matrix_ulong * m); unsigned long gsl_matrix_ulong_min (const gsl_matrix_ulong * m); void gsl_matrix_ulong_minmax (const gsl_matrix_ulong * m, unsigned long * min_out, unsigned long * max_out); void gsl_matrix_ulong_max_index (const gsl_matrix_ulong * m, size_t * imax, size_t *jmax); void gsl_matrix_ulong_min_index (const gsl_matrix_ulong * m, size_t * imin, size_t *jmin); void gsl_matrix_ulong_minmax_index (const gsl_matrix_ulong * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax); int gsl_matrix_ulong_equal (const gsl_matrix_ulong * a, const gsl_matrix_ulong * b); int gsl_matrix_ulong_isnull (const gsl_matrix_ulong * m); int gsl_matrix_ulong_ispos (const gsl_matrix_ulong * m); int gsl_matrix_ulong_isneg (const gsl_matrix_ulong * m); int gsl_matrix_ulong_isnonneg (const gsl_matrix_ulong * m); unsigned long gsl_matrix_ulong_norm1 (const gsl_matrix_ulong * m); int gsl_matrix_ulong_add (gsl_matrix_ulong * a, const gsl_matrix_ulong * b); int gsl_matrix_ulong_sub (gsl_matrix_ulong * a, const gsl_matrix_ulong * b); int gsl_matrix_ulong_mul_elements (gsl_matrix_ulong * a, const gsl_matrix_ulong * b); int gsl_matrix_ulong_div_elements (gsl_matrix_ulong * a, const gsl_matrix_ulong * b); int gsl_matrix_ulong_scale (gsl_matrix_ulong * a, const unsigned long x); int gsl_matrix_ulong_scale_rows (gsl_matrix_ulong * a, const gsl_vector_ulong * x); int gsl_matrix_ulong_scale_columns (gsl_matrix_ulong * a, const gsl_vector_ulong * x); int gsl_matrix_ulong_add_constant (gsl_matrix_ulong * a, const unsigned long x); int gsl_matrix_ulong_add_diagonal (gsl_matrix_ulong * a, const unsigned long x); /***********************************************************************/ /* The functions below are obsolete */ /***********************************************************************/ int gsl_matrix_ulong_get_row(gsl_vector_ulong * v, const gsl_matrix_ulong * m, const size_t i); int gsl_matrix_ulong_get_col(gsl_vector_ulong * v, const gsl_matrix_ulong * m, const size_t j); int gsl_matrix_ulong_set_row(gsl_matrix_ulong * m, const size_t i, const gsl_vector_ulong * v); int gsl_matrix_ulong_set_col(gsl_matrix_ulong * m, const size_t j, const gsl_vector_ulong * v); /***********************************************************************/ /* inline functions if you are using GCC */ INLINE_DECL unsigned long gsl_matrix_ulong_get(const gsl_matrix_ulong * m, const size_t i, const size_t j); INLINE_DECL void gsl_matrix_ulong_set(gsl_matrix_ulong * m, const size_t i, const size_t j, const unsigned long x); INLINE_DECL unsigned long * gsl_matrix_ulong_ptr(gsl_matrix_ulong * m, const size_t i, const size_t j); INLINE_DECL const unsigned long * gsl_matrix_ulong_const_ptr(const gsl_matrix_ulong * m, const size_t i, const size_t j); #ifdef HAVE_INLINE INLINE_FUN unsigned long gsl_matrix_ulong_get(const gsl_matrix_ulong * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ; } else if (j >= m->size2) { GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ; } } #endif return m->data[i * m->tda + j] ; } INLINE_FUN void gsl_matrix_ulong_set(gsl_matrix_ulong * m, const size_t i, const size_t j, const unsigned long x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ; } } #endif m->data[i * m->tda + j] = x ; } INLINE_FUN unsigned long * gsl_matrix_ulong_ptr(gsl_matrix_ulong * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (unsigned long *) (m->data + (i * m->tda + j)) ; } INLINE_FUN const unsigned long * gsl_matrix_ulong_const_ptr(const gsl_matrix_ulong * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (const unsigned long *) (m->data + (i * m->tda + j)) ; } #endif __END_DECLS #endif /* __GSL_MATRIX_ULONG_H__ */ gsl/matrix/view.c0000644000175000017500000000673113536674414012363 0ustar eddedd#include #include #include #include "view.h" #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_CHAR #define USE_QUALIFIER #define QUALIFIER const #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/matrix/rowcol.c0000644000175000017500000000710713536674414012714 0ustar eddedd#include #include #include #include #include #include "view.h" #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_CHAR #define USE_QUALIFIER #define QUALIFIER const #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "rowcol_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/matrix/gsl_matrix_ushort.h0000664000175000017500000003166514057135461015172 0ustar eddedd/* matrix/gsl_matrix_ushort.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MATRIX_USHORT_H__ #define __GSL_MATRIX_USHORT_H__ #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size1; size_t size2; size_t tda; unsigned short * data; gsl_block_ushort * block; int owner; } gsl_matrix_ushort; typedef struct { gsl_matrix_ushort matrix; } _gsl_matrix_ushort_view; typedef _gsl_matrix_ushort_view gsl_matrix_ushort_view; typedef struct { gsl_matrix_ushort matrix; } _gsl_matrix_ushort_const_view; typedef const _gsl_matrix_ushort_const_view gsl_matrix_ushort_const_view; /* Allocation */ gsl_matrix_ushort * gsl_matrix_ushort_alloc (const size_t n1, const size_t n2); gsl_matrix_ushort * gsl_matrix_ushort_calloc (const size_t n1, const size_t n2); gsl_matrix_ushort * gsl_matrix_ushort_alloc_from_block (gsl_block_ushort * b, const size_t offset, const size_t n1, const size_t n2, const size_t d2); gsl_matrix_ushort * gsl_matrix_ushort_alloc_from_matrix (gsl_matrix_ushort * m, const size_t k1, const size_t k2, const size_t n1, const size_t n2); gsl_vector_ushort * gsl_vector_ushort_alloc_row_from_matrix (gsl_matrix_ushort * m, const size_t i); gsl_vector_ushort * gsl_vector_ushort_alloc_col_from_matrix (gsl_matrix_ushort * m, const size_t j); void gsl_matrix_ushort_free (gsl_matrix_ushort * m); /* Views */ _gsl_matrix_ushort_view gsl_matrix_ushort_submatrix (gsl_matrix_ushort * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_ushort_view gsl_matrix_ushort_row (gsl_matrix_ushort * m, const size_t i); _gsl_vector_ushort_view gsl_matrix_ushort_column (gsl_matrix_ushort * m, const size_t j); _gsl_vector_ushort_view gsl_matrix_ushort_diagonal (gsl_matrix_ushort * m); _gsl_vector_ushort_view gsl_matrix_ushort_subdiagonal (gsl_matrix_ushort * m, const size_t k); _gsl_vector_ushort_view gsl_matrix_ushort_superdiagonal (gsl_matrix_ushort * m, const size_t k); _gsl_vector_ushort_view gsl_matrix_ushort_subrow (gsl_matrix_ushort * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_ushort_view gsl_matrix_ushort_subcolumn (gsl_matrix_ushort * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_ushort_view gsl_matrix_ushort_view_array (unsigned short * base, const size_t n1, const size_t n2); _gsl_matrix_ushort_view gsl_matrix_ushort_view_array_with_tda (unsigned short * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_ushort_view gsl_matrix_ushort_view_vector (gsl_vector_ushort * v, const size_t n1, const size_t n2); _gsl_matrix_ushort_view gsl_matrix_ushort_view_vector_with_tda (gsl_vector_ushort * v, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_ushort_const_view gsl_matrix_ushort_const_submatrix (const gsl_matrix_ushort * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_ushort_const_view gsl_matrix_ushort_const_row (const gsl_matrix_ushort * m, const size_t i); _gsl_vector_ushort_const_view gsl_matrix_ushort_const_column (const gsl_matrix_ushort * m, const size_t j); _gsl_vector_ushort_const_view gsl_matrix_ushort_const_diagonal (const gsl_matrix_ushort * m); _gsl_vector_ushort_const_view gsl_matrix_ushort_const_subdiagonal (const gsl_matrix_ushort * m, const size_t k); _gsl_vector_ushort_const_view gsl_matrix_ushort_const_superdiagonal (const gsl_matrix_ushort * m, const size_t k); _gsl_vector_ushort_const_view gsl_matrix_ushort_const_subrow (const gsl_matrix_ushort * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_ushort_const_view gsl_matrix_ushort_const_subcolumn (const gsl_matrix_ushort * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_ushort_const_view gsl_matrix_ushort_const_view_array (const unsigned short * base, const size_t n1, const size_t n2); _gsl_matrix_ushort_const_view gsl_matrix_ushort_const_view_array_with_tda (const unsigned short * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_ushort_const_view gsl_matrix_ushort_const_view_vector (const gsl_vector_ushort * v, const size_t n1, const size_t n2); _gsl_matrix_ushort_const_view gsl_matrix_ushort_const_view_vector_with_tda (const gsl_vector_ushort * v, const size_t n1, const size_t n2, const size_t tda); /* Operations */ void gsl_matrix_ushort_set_zero (gsl_matrix_ushort * m); void gsl_matrix_ushort_set_identity (gsl_matrix_ushort * m); void gsl_matrix_ushort_set_all (gsl_matrix_ushort * m, unsigned short x); int gsl_matrix_ushort_fread (FILE * stream, gsl_matrix_ushort * m) ; int gsl_matrix_ushort_fwrite (FILE * stream, const gsl_matrix_ushort * m) ; int gsl_matrix_ushort_fscanf (FILE * stream, gsl_matrix_ushort * m); int gsl_matrix_ushort_fprintf (FILE * stream, const gsl_matrix_ushort * m, const char * format); int gsl_matrix_ushort_memcpy(gsl_matrix_ushort * dest, const gsl_matrix_ushort * src); int gsl_matrix_ushort_swap(gsl_matrix_ushort * m1, gsl_matrix_ushort * m2); int gsl_matrix_ushort_tricpy(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix_ushort * dest, const gsl_matrix_ushort * src); int gsl_matrix_ushort_swap_rows(gsl_matrix_ushort * m, const size_t i, const size_t j); int gsl_matrix_ushort_swap_columns(gsl_matrix_ushort * m, const size_t i, const size_t j); int gsl_matrix_ushort_swap_rowcol(gsl_matrix_ushort * m, const size_t i, const size_t j); int gsl_matrix_ushort_transpose (gsl_matrix_ushort * m); int gsl_matrix_ushort_transpose_memcpy (gsl_matrix_ushort * dest, const gsl_matrix_ushort * src); int gsl_matrix_ushort_transpose_tricpy (CBLAS_UPLO_t Uplo_src, CBLAS_DIAG_t Diag, gsl_matrix_ushort * dest, const gsl_matrix_ushort * src); unsigned short gsl_matrix_ushort_max (const gsl_matrix_ushort * m); unsigned short gsl_matrix_ushort_min (const gsl_matrix_ushort * m); void gsl_matrix_ushort_minmax (const gsl_matrix_ushort * m, unsigned short * min_out, unsigned short * max_out); void gsl_matrix_ushort_max_index (const gsl_matrix_ushort * m, size_t * imax, size_t *jmax); void gsl_matrix_ushort_min_index (const gsl_matrix_ushort * m, size_t * imin, size_t *jmin); void gsl_matrix_ushort_minmax_index (const gsl_matrix_ushort * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax); int gsl_matrix_ushort_equal (const gsl_matrix_ushort * a, const gsl_matrix_ushort * b); int gsl_matrix_ushort_isnull (const gsl_matrix_ushort * m); int gsl_matrix_ushort_ispos (const gsl_matrix_ushort * m); int gsl_matrix_ushort_isneg (const gsl_matrix_ushort * m); int gsl_matrix_ushort_isnonneg (const gsl_matrix_ushort * m); unsigned short gsl_matrix_ushort_norm1 (const gsl_matrix_ushort * m); int gsl_matrix_ushort_add (gsl_matrix_ushort * a, const gsl_matrix_ushort * b); int gsl_matrix_ushort_sub (gsl_matrix_ushort * a, const gsl_matrix_ushort * b); int gsl_matrix_ushort_mul_elements (gsl_matrix_ushort * a, const gsl_matrix_ushort * b); int gsl_matrix_ushort_div_elements (gsl_matrix_ushort * a, const gsl_matrix_ushort * b); int gsl_matrix_ushort_scale (gsl_matrix_ushort * a, const unsigned short x); int gsl_matrix_ushort_scale_rows (gsl_matrix_ushort * a, const gsl_vector_ushort * x); int gsl_matrix_ushort_scale_columns (gsl_matrix_ushort * a, const gsl_vector_ushort * x); int gsl_matrix_ushort_add_constant (gsl_matrix_ushort * a, const unsigned short x); int gsl_matrix_ushort_add_diagonal (gsl_matrix_ushort * a, const unsigned short x); /***********************************************************************/ /* The functions below are obsolete */ /***********************************************************************/ int gsl_matrix_ushort_get_row(gsl_vector_ushort * v, const gsl_matrix_ushort * m, const size_t i); int gsl_matrix_ushort_get_col(gsl_vector_ushort * v, const gsl_matrix_ushort * m, const size_t j); int gsl_matrix_ushort_set_row(gsl_matrix_ushort * m, const size_t i, const gsl_vector_ushort * v); int gsl_matrix_ushort_set_col(gsl_matrix_ushort * m, const size_t j, const gsl_vector_ushort * v); /***********************************************************************/ /* inline functions if you are using GCC */ INLINE_DECL unsigned short gsl_matrix_ushort_get(const gsl_matrix_ushort * m, const size_t i, const size_t j); INLINE_DECL void gsl_matrix_ushort_set(gsl_matrix_ushort * m, const size_t i, const size_t j, const unsigned short x); INLINE_DECL unsigned short * gsl_matrix_ushort_ptr(gsl_matrix_ushort * m, const size_t i, const size_t j); INLINE_DECL const unsigned short * gsl_matrix_ushort_const_ptr(const gsl_matrix_ushort * m, const size_t i, const size_t j); #ifdef HAVE_INLINE INLINE_FUN unsigned short gsl_matrix_ushort_get(const gsl_matrix_ushort * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ; } else if (j >= m->size2) { GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ; } } #endif return m->data[i * m->tda + j] ; } INLINE_FUN void gsl_matrix_ushort_set(gsl_matrix_ushort * m, const size_t i, const size_t j, const unsigned short x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ; } } #endif m->data[i * m->tda + j] = x ; } INLINE_FUN unsigned short * gsl_matrix_ushort_ptr(gsl_matrix_ushort * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (unsigned short *) (m->data + (i * m->tda + j)) ; } INLINE_FUN const unsigned short * gsl_matrix_ushort_const_ptr(const gsl_matrix_ushort * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (const unsigned short *) (m->data + (i * m->tda + j)) ; } #endif __END_DECLS #endif /* __GSL_MATRIX_USHORT_H__ */ gsl/matrix/test_complex_source.c0000664000175000017500000007105614057135461015474 0ustar eddedd/* matrix/test_complex_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * Copyright (C) 2019 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ void FUNCTION (test, func) (const size_t M, const size_t N); void FUNCTION (test, ops) (const size_t P, const size_t Q); void FUNCTION (test, trap) (const size_t M, const size_t N); void FUNCTION (test, text) (const size_t M, const size_t N); void FUNCTION (test, binary) (const size_t M, const size_t N); void FUNCTION (test, binary_noncontiguous) (const size_t M, const size_t N); #define TEST(expr,desc) gsl_test((expr), NAME(gsl_matrix) desc " M=%d, N=%d", M, N) void FUNCTION (test, func) (const size_t M, const size_t N) { size_t i, j; int k = 0; TYPE (gsl_matrix) * m = FUNCTION (gsl_matrix, alloc) (M, N); gsl_test (m->data == 0, NAME (gsl_matrix) "_alloc returns valid pointer"); gsl_test (m->size1 != M, NAME (gsl_matrix) "_alloc returns valid size1"); gsl_test (m->size2 != N, NAME (gsl_matrix) "_alloc returns valid size2"); gsl_test (m->tda != N, NAME (gsl_matrix) "_alloc returns valid tda"); for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE z = ZERO; k++; GSL_REAL (z) = (ATOMIC) k; GSL_IMAG (z) = (ATOMIC) (k + 1000); FUNCTION (gsl_matrix, set) (m, i, j, z); } } status = 0; k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; if (m->data[2 * (i * N + j)] != k || m->data[2 * (i * N + j) + 1] != k + 1000) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_set writes into array"); status = 0; k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE z = FUNCTION (gsl_matrix, get) (m, i, j); k++; if (GSL_REAL (z) != k || GSL_IMAG (z) != k + 1000) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_get reads from array"); FUNCTION (gsl_matrix, free) (m); /* free whatever is in m */ m = FUNCTION (gsl_matrix, calloc) (M, N); { int status = (FUNCTION(gsl_matrix,isnull)(m) != 1); TEST (status, "_isnull" DESC " on calloc matrix"); status = (FUNCTION(gsl_matrix,ispos)(m) != 0); TEST (status, "_ispos" DESC " on calloc matrix"); status = (FUNCTION(gsl_matrix,isneg)(m) != 0); TEST (status, "_isneg" DESC " on calloc matrix"); } for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE z = ZERO; FUNCTION (gsl_matrix, set) (m, i, j, z); } } { status = (FUNCTION(gsl_matrix,isnull)(m) != 1); TEST (status, "_isnull" DESC " on null matrix") ; status = (FUNCTION(gsl_matrix,ispos)(m) != 0); TEST (status, "_ispos" DESC " on null matrix") ; status = (FUNCTION(gsl_matrix,isneg)(m) != 0); TEST (status, "_isneg" DESC " on null matrix") ; } k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE z = ZERO; k++; GSL_REAL (z) = (ATOMIC) (k % 10); GSL_IMAG (z) = (ATOMIC) ((k + 5) % 10); FUNCTION (gsl_matrix, set) (m, i, j, z); } } { status = (FUNCTION(gsl_matrix,isnull)(m) != 0); TEST (status, "_isnull" DESC " on non-negative matrix") ; status = (FUNCTION(gsl_matrix,ispos)(m) != 0); TEST (status, "_ispos" DESC " on non-negative matrix") ; status = (FUNCTION(gsl_matrix,isneg)(m) != 0); TEST (status, "_isneg" DESC " on non-negative matrix") ; } k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE z = ZERO; k++; GSL_REAL (z) = (ATOMIC) ((k % 10) - 5); GSL_IMAG (z) = (ATOMIC) (((k + 5) % 10) - 5); FUNCTION (gsl_matrix, set) (m, i, j, z); } } { status = (FUNCTION(gsl_matrix,isnull)(m) != 0); TEST (status, "_isnull" DESC " on mixed matrix") ; status = (FUNCTION(gsl_matrix,ispos)(m) != 0); TEST (status, "_ispos" DESC " on mixed matrix") ; status = (FUNCTION(gsl_matrix,isneg)(m) != 0); TEST (status, "_isneg" DESC " on mixed matrix") ; } k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE z = ZERO; k++; GSL_REAL (z) = -(ATOMIC) (k % 10); GSL_IMAG (z) = -(ATOMIC) ((k + 5) % 10); FUNCTION (gsl_matrix, set) (m, i, j, z); } } { status = (FUNCTION(gsl_matrix,isnull)(m) != 0); TEST (status, "_isnull" DESC " on non-positive matrix") ; status = (FUNCTION(gsl_matrix,ispos)(m) != 0); TEST (status, "_ispos" DESC " on non-positive matrix") ; status = (FUNCTION(gsl_matrix,isneg)(m) != 0); TEST (status, "_isneg" DESC " on non-positive matrix") ; } k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE z = ZERO; k++; GSL_REAL (z) = (ATOMIC) (k % 10 + 1); GSL_IMAG (z) = (ATOMIC) ((k + 5) % 10 + 1); FUNCTION (gsl_matrix, set) (m, i, j, z); } } { status = (FUNCTION(gsl_matrix,isnull)(m) != 0); TEST (status, "_isnull" DESC " on positive matrix") ; status = (FUNCTION(gsl_matrix,ispos)(m) != 1); TEST (status, "_ispos" DESC " on positive matrix") ; status = (FUNCTION(gsl_matrix,isneg)(m) != 0); TEST (status, "_isneg" DESC " on positive matrix") ; } k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE z = ZERO; k++; GSL_REAL (z) = -(ATOMIC) (k % 10 + 1); GSL_IMAG (z) = -(ATOMIC) ((k + 5) % 10 + 1); FUNCTION (gsl_matrix, set) (m, i, j, z); } } { status = (FUNCTION(gsl_matrix,isnull)(m) != 0); TEST (status, "_isnull" DESC " on negative matrix") ; status = (FUNCTION(gsl_matrix,ispos)(m) != 0); TEST (status, "_ispos" DESC " on negative matrix") ; status = (FUNCTION(gsl_matrix,isneg)(m) != 1); TEST (status, "_isneg" DESC " on negative matrix") ; } FUNCTION (gsl_matrix, free) (m); /* free whatever is in m */ } #if !(USES_LONGDOUBLE && !HAVE_PRINTF_LONGDOUBLE) void FUNCTION (test, text) (const size_t M, const size_t N) { TYPE (gsl_matrix) * m = FUNCTION (gsl_matrix, alloc) (M, N); size_t i, j, k; #ifdef NO_INLINE char filename[] = "test_static.dat"; #else char filename[] = "test.dat"; #endif /* write file */ { FILE *f = fopen(filename, "w"); k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE z; k++; GSL_REAL (z) = (ATOMIC) k; GSL_IMAG (z) = (ATOMIC) (k + 1000); FUNCTION (gsl_matrix, set) (m, i, j, z); } } FUNCTION (gsl_matrix, fprintf) (f, m, OUT_FORMAT); fclose(f); } /* read file */ { FILE *f = fopen(filename, "r"); TYPE (gsl_matrix) * mm = FUNCTION (gsl_matrix, alloc) (M, N); status = 0; FUNCTION (gsl_matrix, fscanf) (f, mm); k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; if (mm->data[2 * (i * N + j)] != k || mm->data[2 * (i * N + j) + 1] != k + 1000) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_fprintf and fscanf"); FUNCTION (gsl_matrix, free) (mm); fclose (f); } FUNCTION (gsl_matrix, free) (m); } #endif void FUNCTION (test, binary) (const size_t M, const size_t N) { TYPE (gsl_matrix) * m = FUNCTION (gsl_matrix, alloc) (M, N); size_t i, j, k; #ifdef NO_INLINE char filename[] = "test_static.dat"; #else char filename[] = "test.dat"; #endif /* write file */ { FILE *f = fopen(filename, "wb"); k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE z = ZERO; k++; GSL_REAL (z) = (ATOMIC) k; GSL_IMAG (z) = (ATOMIC) (k + 1000); FUNCTION (gsl_matrix, set) (m, i, j, z); } } FUNCTION (gsl_matrix, fwrite) (f, m); fclose(f); } /* read file */ { FILE *f = fopen(filename, "rb"); TYPE (gsl_matrix) * mm = FUNCTION (gsl_matrix, alloc) (M, N); status = 0; FUNCTION (gsl_matrix, fread) (f, mm); k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; if (mm->data[2 * (i * N + j)] != k || mm->data[2 * (i * N + j) + 1] != k + 1000) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_write and read"); FUNCTION (gsl_matrix, free) (mm); fclose (f); } FUNCTION (gsl_matrix, free) (m); } void FUNCTION (test, binary_noncontiguous) (const size_t M, const size_t N) { TYPE (gsl_matrix) * l = FUNCTION (gsl_matrix, calloc) (M+1, N+1); VIEW (gsl_matrix, view) m = FUNCTION (gsl_matrix, submatrix) (l, 0, 0, M, N); size_t i, j, k; #ifdef NO_INLINE char filename[] = "test_static.dat"; #else char filename[] = "test.dat"; #endif /* write file */ { FILE *f = fopen(filename, "wb"); k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE z = ZERO; k++; GSL_REAL (z) = (ATOMIC) k; GSL_IMAG (z) = (ATOMIC) (k + 1000); FUNCTION (gsl_matrix, set) (&m.matrix, i, j, z); } } FUNCTION (gsl_matrix, fwrite) (f, &m.matrix); fclose(f); } /* read file */ { FILE *f = fopen(filename, "rb"); TYPE (gsl_matrix) * ll = FUNCTION (gsl_matrix, alloc) (M+1, N+1); VIEW (gsl_matrix, view) mm = FUNCTION (gsl_matrix, submatrix) (ll, 0, 0, M, N); status = 0; FUNCTION (gsl_matrix, fread) (f, &mm.matrix); k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE z = FUNCTION (gsl_matrix, get) (&mm.matrix, i, j); k++; if (GSL_REAL (z) != k || GSL_IMAG (z) != k + 1000) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_write and read (noncontiguous)"); FUNCTION (gsl_matrix, free) (ll); fclose (f); } FUNCTION (gsl_matrix, free) (l); } void FUNCTION (test, trap) (const size_t M, const size_t N) { TYPE (gsl_matrix) * mc = FUNCTION (gsl_matrix, alloc) (M, N); size_t i = 0, j = 0; BASE z = { {(ATOMIC) 1.2, (ATOMIC) 3.4} }; BASE z1; status = 0; FUNCTION (gsl_matrix, set) (mc, i - 1, j, z); gsl_test (!status, NAME (gsl_matrix) "_set traps 1st index below lower bound"); status = 0; FUNCTION (gsl_matrix, set) (mc, i, j - 1, z); gsl_test (!status, NAME (gsl_matrix) "_set traps 2nd index below lower bound"); status = 0; FUNCTION (gsl_matrix, set) (mc, M + 1, 0, z); gsl_test (!status, NAME (gsl_matrix) "_set traps 1st index above upper bound"); status = 0; FUNCTION (gsl_matrix, set) (mc, 0, N + 1, z); gsl_test (!status, NAME (gsl_matrix) "_set traps 2nd index above upper bound"); status = 0; FUNCTION (gsl_matrix, set) (mc, M, 0, z); gsl_test (!status, NAME (gsl_matrix) "_set traps 1st index at upper bound"); status = 0; FUNCTION (gsl_matrix, set) (mc, 0, N, z); gsl_test (!status, NAME (gsl_matrix) "_set traps 2nd index at upper bound"); status = 0; z1 = FUNCTION (gsl_matrix, get) (mc, i - 1, 0); gsl_test (!status, NAME (gsl_matrix) "_get traps 1st index below lower bound"); gsl_test (GSL_REAL (z1) != 0, NAME (gsl_matrix) "_get, zero real for 1st index below l.b."); gsl_test (GSL_IMAG (z1) != 0, NAME (gsl_matrix) "_get, zero imag for 1st index below l.b."); status = 0; z1 = FUNCTION (gsl_matrix, get) (mc, 0, j - 1); gsl_test (!status, NAME (gsl_matrix) "_get traps 2nd index below lower bound"); gsl_test (GSL_REAL (z1) != 0, NAME (gsl_matrix) "_get, zero real for 2nd index below l.b."); gsl_test (GSL_IMAG (z1) != 0, NAME (gsl_matrix) "_get, zero imag for 2nd index below l.b."); status = 0; z1 = FUNCTION (gsl_matrix, get) (mc, M + 1, 0); gsl_test (!status, NAME (gsl_matrix) "_get traps 1st index above upper bound"); gsl_test (GSL_REAL (z1) != 0, NAME (gsl_matrix) "_get, zero real for 1st index above u.b."); gsl_test (GSL_IMAG (z1) != 0, NAME (gsl_matrix) "_get, zero imag for 1st index above u.b."); status = 0; z1 = FUNCTION (gsl_matrix, get) (mc, 0, N + 1); gsl_test (!status, NAME (gsl_matrix) "_get traps 2nd index above upper bound"); gsl_test (GSL_REAL (z1) != 0, NAME (gsl_matrix) "_get, zero real for 2nd index above u.b."); gsl_test (GSL_IMAG (z1) != 0, NAME (gsl_matrix) "_get, zero imag for 2nd index above u.b."); status = 0; z1 = FUNCTION (gsl_matrix, get) (mc, M, 0); gsl_test (!status, NAME (gsl_matrix) "_get traps 1st index at upper bound"); gsl_test (GSL_REAL (z1) != 0, NAME (gsl_matrix) "_get, zero real for 1st index at u.b."); gsl_test (GSL_IMAG (z1) != 0, NAME (gsl_matrix) "_get, zero imag for 1st index at u.b."); status = 0; z1 = FUNCTION (gsl_matrix, get) (mc, 0, N); gsl_test (!status, NAME (gsl_matrix) "_get traps 2nd index at upper bound"); gsl_test (GSL_REAL (z1) != 0, NAME (gsl_matrix) "_get, zero real for 2nd index at u.b."); gsl_test (GSL_IMAG (z1) != 0, NAME (gsl_matrix) "_get, zero imag for 2nd index at u.b."); FUNCTION (gsl_matrix, free) (mc); } void FUNCTION (test, ops) (const size_t P, const size_t Q) { TYPE (gsl_matrix) * a = FUNCTION (gsl_matrix, alloc) (P, Q); TYPE (gsl_matrix) * b = FUNCTION (gsl_matrix, alloc) (P, Q); TYPE (gsl_matrix) * c = FUNCTION (gsl_matrix, alloc) (Q, P); TYPE (gsl_matrix) * m = FUNCTION (gsl_matrix, alloc) (P, Q); size_t i, j; size_t k = 0; size_t status = 0; for (i = 0; i < P; i++) { for (j = 0; j < Q; j++) { BASE z, z1; GSL_REAL (z) = (ATOMIC) k; GSL_IMAG (z) = (ATOMIC) (k + 10); GSL_REAL (z1) = (ATOMIC) (k + 5); GSL_IMAG (z1) = (ATOMIC) (k + 20); FUNCTION (gsl_matrix, set) (a, i, j, z); FUNCTION (gsl_matrix, set) (b, i, j, z1); k++; } } { { int status = (FUNCTION(gsl_matrix,equal) (a,b) != 0); gsl_test (status, NAME (gsl_matrix) "_equal matrix unequal"); } FUNCTION (gsl_matrix, memcpy) (m, a); { int status = (FUNCTION(gsl_matrix,equal) (a,m) != 1); gsl_test (status, NAME (gsl_matrix) "_equal matrix equal"); } FUNCTION (gsl_matrix, add) (m, b); k = 0; status = 0; for (i = 0; i < P; i++) { for (j = 0; j < Q; j++) { BASE z = FUNCTION (gsl_matrix, get) (m, i, j); if (GSL_REAL (z) != (ATOMIC) (2 * k + 5) || GSL_IMAG (z) != (ATOMIC) (2 * k + 30)) status = 1; k++; } } gsl_test (status, NAME (gsl_matrix) "_add matrix addition"); } { FUNCTION (gsl_matrix, memcpy) (m, a); FUNCTION (gsl_matrix, sub) (m, b); k = 0; status = 0; for (i = 0; i < P; i++) { for (j = 0; j < Q; j++) { BASE z = FUNCTION (gsl_matrix, get) (m, i, j); if (GSL_REAL (z) != (ATOMIC) (-5) || GSL_IMAG (z) != (ATOMIC) (-10)) status = 1; k++; } } gsl_test (status, NAME (gsl_matrix) "_sub matrix subtraction"); } { FUNCTION (gsl_matrix, memcpy) (m, a); FUNCTION (gsl_matrix, mul_elements) (m, b); k = 0; status = 0; for (i = 0; i < P; i++) { for (j = 0; j < Q; j++) { ATOMIC real = -(ATOMIC) (25 * k + 200); ATOMIC imag = (ATOMIC) (2 * k * k + 35 * k + 50); BASE z = FUNCTION (gsl_matrix, get) (m, i, j); if (fabs (GSL_REAL (z) - real) > 100 * BASE_EPSILON || fabs (GSL_IMAG (z) - imag) > 100 * BASE_EPSILON) { status = 1; #ifdef DEBUG printf ("%d\t%d\n", i, j); printf (OUT_FORMAT "\n", GSL_REAL (z) + (ATOMIC) (25 * (ATOMIC) k + 200)); printf (OUT_FORMAT "\n", GSL_IMAG (z) - (ATOMIC) (2 * k * k + 35 * k + 50)); printf ("\n"); #endif } k++; } } gsl_test (status, NAME (gsl_matrix) "_mul_elements multiplication"); } { FUNCTION (gsl_matrix, memcpy) (m, a); FUNCTION (gsl_matrix, div_elements) (m, b); k = 0; status = 0; for (i = 0; i < P; i++) { for (j = 0; j < Q; j++) { ATOMIC denom = (2 * k * k + 50 * k + 425); ATOMIC real = (ATOMIC) (2 * k * k + 35 * k + 200) / denom; ATOMIC imag = ((ATOMIC) (50) - (ATOMIC) (5 * k)) / denom; BASE z = FUNCTION (gsl_matrix, get) (m, i, j); if (fabs (GSL_REAL (z) - real) > 100 * BASE_EPSILON || fabs (GSL_IMAG (z) - imag) > 100 * BASE_EPSILON) { #ifdef DEBUG printf (OUT_FORMAT "\t", GSL_REAL (z) - (ATOMIC) (2 * k * k + 35 * k + 200) / denom); printf (OUT_FORMAT "\n", GSL_IMAG (z) - ((ATOMIC) (50) - (ATOMIC) (5 * k)) / denom); #endif status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_div_elements division"); } { BASE s; GSL_SET_COMPLEX(&s, 2.0, 3.0); FUNCTION (gsl_matrix, memcpy) (m, a); FUNCTION (gsl_matrix, scale) (m, s); k = 0; status = 0; for (i = 0; i < P; i++) { for (j = 0; j < Q; j++) { ATOMIC real = (ATOMIC) (-(ATOMIC)k - 30); ATOMIC imag = (ATOMIC) (5 * (ATOMIC)k + 20); BASE z = FUNCTION (gsl_matrix, get) (m, i, j); if (GSL_REAL (z) != real || GSL_IMAG (z) != imag) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_scale"); } { TYPE (gsl_vector) * v = FUNCTION (gsl_vector, alloc) (P); for (i = 0; i < P; i++) { BASE s; GSL_SET_COMPLEX(&s, (ATOMIC) (i + 1), (ATOMIC) (i + 2)); FUNCTION (gsl_vector, set) (v, i, s); } FUNCTION (gsl_matrix, memcpy) (m, a); FUNCTION (gsl_matrix, scale_rows) (m, v); status = 0; for (i = 0; i < P; i++) { BASE s; GSL_SET_COMPLEX(&s, (ATOMIC) (i + 1), (ATOMIC) (i + 2)); for (j = 0; j < Q; j++) { BASE aij = FUNCTION (gsl_matrix, get) (a, i, j); ATOMIC real = GSL_REAL(aij)*(i+1) - GSL_IMAG(aij)*(i+2); ATOMIC imag = GSL_REAL(aij)*(i+2) + GSL_IMAG(aij)*(i+1); BASE mij = FUNCTION (gsl_matrix, get) (m, i, j); if (GSL_REAL (mij) != real || GSL_IMAG (mij) != imag) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_scale_rows[%zu,%zu]", P, Q); } { TYPE (gsl_vector) * v = FUNCTION (gsl_vector, alloc) (Q); for (i = 0; i < Q; i++) { BASE s; GSL_SET_COMPLEX(&s, (ATOMIC) (i + 1), (ATOMIC) (i + 2)); FUNCTION (gsl_vector, set) (v, i, s); } FUNCTION (gsl_matrix, memcpy) (m, a); FUNCTION (gsl_matrix, scale_columns) (m, v); status = 0; for (j = 0; j < Q; j++) { BASE s; GSL_SET_COMPLEX(&s, (ATOMIC) (i + 1), (ATOMIC) (i + 2)); for (i = 0; i < P; i++) { BASE aij = FUNCTION (gsl_matrix, get) (a, i, j); ATOMIC real = GSL_REAL(aij)*(j+1) - GSL_IMAG(aij)*(j+2); ATOMIC imag = GSL_REAL(aij)*(j+2) + GSL_IMAG(aij)*(j+1); BASE mij = FUNCTION (gsl_matrix, get) (m, i, j); if (GSL_REAL (mij) != real || GSL_IMAG (mij) != imag) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_scale_columns[%zu,%zu]", P, Q); } { BASE s; GSL_SET_COMPLEX(&s, 2.0, 3.0); FUNCTION (gsl_matrix, memcpy) (m, a); FUNCTION (gsl_matrix, add_constant) (m, s); k = 0; status = 0; for (i = 0; i < P; i++) { for (j = 0; j < Q; j++) { ATOMIC real = (ATOMIC) ((ATOMIC)k + 2); ATOMIC imag = (ATOMIC) ((ATOMIC)k + 10 + 3); BASE z = FUNCTION (gsl_matrix, get) (m, i, j); if (GSL_REAL (z) != real || GSL_IMAG (z) != imag) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_add_constant"); } { BASE s; GSL_SET_COMPLEX(&s, 2.0, 3.0); FUNCTION (gsl_matrix, memcpy) (m, a); FUNCTION (gsl_matrix, add_diagonal) (m, s); k = 0; status = 0; for (i = 0; i < P; i++) { for (j = 0; j < Q; j++) { ATOMIC real = (ATOMIC) ((ATOMIC)k + ((i==j) ? 2 : 0)); ATOMIC imag = (ATOMIC) ((ATOMIC)k + 10 +((i==j) ? 3 : 0)); BASE z = FUNCTION (gsl_matrix, get) (m, i, j); if (GSL_REAL (z) != real || GSL_IMAG (z) != imag) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_add_diagonal"); } { FUNCTION (gsl_matrix, swap) (a, b); k = 0; status = 0; for (i = 0; i < P; i++) { for (j = 0; j < Q; j++) { BASE x = FUNCTION (gsl_matrix, get) (a, i, j); BASE y = FUNCTION (gsl_matrix, get) (b, i, j); if (GSL_REAL (x) != (ATOMIC) (k + 5) || GSL_IMAG (x) != (ATOMIC) (k + 20) || GSL_REAL (y) != (ATOMIC) (k) || GSL_IMAG (y) != (ATOMIC) (k + 10)) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_swap"); } { FUNCTION (gsl_matrix, transpose_memcpy) (c, a); k = 0; status = 0; for (i = 0; i < P; i++) { for (j = 0; j < Q; j++) { BASE x = FUNCTION (gsl_matrix, get) (a, i, j); BASE y = FUNCTION (gsl_matrix, get) (c, j, i); if (GSL_REAL (x) != GSL_REAL (y) || GSL_IMAG (x) != GSL_IMAG (y)) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_transpose_memcpy"); } { FUNCTION (gsl_matrix, conjtrans_memcpy) (c, a); k = 0; status = 0; for (i = 0; i < P; i++) { for (j = 0; j < Q; j++) { BASE x = FUNCTION (gsl_matrix, get) (a, i, j); BASE y = FUNCTION (gsl_matrix, get) (c, j, i); if (GSL_REAL (x) != GSL_REAL (y) || GSL_IMAG (x) != -GSL_IMAG (y)) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_conjtrans_memcpy"); } { FUNCTION (gsl_matrix, set_zero) (m); FUNCTION (gsl_matrix, tricpy) (CblasLower, CblasUnit, m, a); k = 0; status = 0; for (i = 0; i < P; i++) { for (j = 0; j < GSL_MIN(i, Q); j++) { BASE x = FUNCTION (gsl_matrix, get) (m, i, j); BASE y = FUNCTION (gsl_matrix, get) (a, i, j); if (GSL_REAL (x) != GSL_REAL (y) || GSL_IMAG (x) != GSL_IMAG (y)) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_tricpy CblasLower CblasUnit"); } { FUNCTION (gsl_matrix, set_zero) (m); FUNCTION (gsl_matrix, tricpy) (CblasLower, CblasNonUnit, m, a); k = 0; status = 0; for (i = 0; i < P; i++) { for (j = 0; j < GSL_MIN(i + 1, Q); j++) { BASE x = FUNCTION (gsl_matrix, get) (m, i, j); BASE y = FUNCTION (gsl_matrix, get) (a, i, j); if (GSL_REAL (x) != GSL_REAL (y) || GSL_IMAG (x) != GSL_IMAG (y)) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_tricpy CblasLower CblasNonUnit"); } { FUNCTION (gsl_matrix, set_zero) (m); FUNCTION (gsl_matrix, tricpy) (CblasUpper, CblasUnit, m, a); k = 0; status = 0; for (i = 0; i < P; i++) { for (j = i + 1; j < Q; j++) { BASE x = FUNCTION (gsl_matrix, get) (m, i, j); BASE y = FUNCTION (gsl_matrix, get) (a, i, j); if (GSL_REAL (x) != GSL_REAL (y) || GSL_IMAG (x) != GSL_IMAG (y)) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_tricpy CblasUpper CblasUnit"); } { FUNCTION (gsl_matrix, set_zero) (m); FUNCTION (gsl_matrix, tricpy) (CblasUpper, CblasNonUnit, m, a); k = 0; status = 0; for (i = 0; i < P; i++) { for (j = i; j < Q; j++) { BASE x = FUNCTION (gsl_matrix, get) (m, i, j); BASE y = FUNCTION (gsl_matrix, get) (a, i, j); if (GSL_REAL (x) != GSL_REAL (y) || GSL_IMAG (x) != GSL_IMAG (y)) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_tricpy CblasUpper CblasNonUnit"); } { FUNCTION (gsl_matrix, set_zero) (c); FUNCTION (gsl_matrix, transpose_tricpy) (CblasLower, CblasUnit, c, a); k = 0; status = 0; for (i = 0; i < GSL_MIN(P, Q); i++) { for (j = 0; j < i; j++) { BASE x = FUNCTION (gsl_matrix, get) (a, i, j); BASE y = FUNCTION (gsl_matrix, get) (c, j, i); if (GSL_REAL (x) != GSL_REAL (y) || GSL_IMAG (x) != GSL_IMAG (y)) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_transpose_tricpy CblasLower CblasUnit"); } { FUNCTION (gsl_matrix, set_zero) (c); FUNCTION (gsl_matrix, transpose_tricpy) (CblasLower, CblasNonUnit, c, a); k = 0; status = 0; for (i = 0; i < GSL_MIN(P, Q); i++) { for (j = 0; j <= i; j++) { BASE x = FUNCTION (gsl_matrix, get) (a, i, j); BASE y = FUNCTION (gsl_matrix, get) (c, j, i); if (GSL_REAL (x) != GSL_REAL (y) || GSL_IMAG (x) != GSL_IMAG (y)) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_transpose_tricpy CblasLower CblasNonUnit"); } { FUNCTION (gsl_matrix, set_zero) (c); FUNCTION (gsl_matrix, transpose_tricpy) (CblasUpper, CblasUnit, c, a); k = 0; status = 0; for (i = 0; i < GSL_MIN(P, Q); i++) { for (j = i + 1; j < GSL_MIN(P, Q); j++) { BASE x = FUNCTION (gsl_matrix, get) (a, i, j); BASE y = FUNCTION (gsl_matrix, get) (c, j, i); if (GSL_REAL (x) != GSL_REAL (y) || GSL_IMAG (x) != GSL_IMAG (y)) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_transpose_tricpy CblasUpper CblasUnit"); } { FUNCTION (gsl_matrix, set_zero) (c); FUNCTION (gsl_matrix, transpose_tricpy) (CblasUpper, CblasNonUnit, c, a); k = 0; status = 0; for (i = 0; i < GSL_MIN(P, Q); i++) { for (j = i; j < GSL_MIN(P, Q); j++) { BASE x = FUNCTION (gsl_matrix, get) (a, i, j); BASE y = FUNCTION (gsl_matrix, get) (c, j, i); if (GSL_REAL (x) != GSL_REAL (y) || GSL_IMAG (x) != GSL_IMAG (y)) { status = 1; } k++; } } gsl_test (status, NAME (gsl_matrix) "_transpose_tricpy CblasUpper CblasNonUnit"); } FUNCTION (gsl_matrix, free) (a); FUNCTION (gsl_matrix, free) (b); FUNCTION (gsl_matrix, free) (c); FUNCTION (gsl_matrix, free) (m); } gsl/matrix/oper_complex_source.c0000664000175000017500000001521514057135461015455 0ustar eddedd/* matrix/oper_complex_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION (gsl_matrix, add) (TYPE (gsl_matrix) * a, const TYPE (gsl_matrix) * b) { const size_t M = a->size1; const size_t N = a->size2; if (b->size1 != M || b->size2 != N) { GSL_ERROR ("matrices must have same dimensions", GSL_EBADLEN); } else { const size_t tda_a = a->tda; const size_t tda_b = b->tda; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { const size_t aij = 2 * (i * tda_a + j); const size_t bij = 2 * (i * tda_b + j); a->data[aij] += b->data[bij]; a->data[aij + 1] += b->data[bij + 1]; } } return GSL_SUCCESS; } } int FUNCTION (gsl_matrix, sub) (TYPE (gsl_matrix) * a, const TYPE (gsl_matrix) * b) { const size_t M = a->size1; const size_t N = a->size2; if (b->size1 != M || b->size2 != N) { GSL_ERROR ("matrices must have same dimensions", GSL_EBADLEN); } else { const size_t tda_a = a->tda; const size_t tda_b = b->tda; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { const size_t aij = 2 * (i * tda_a + j); const size_t bij = 2 * (i * tda_b + j); a->data[aij] -= b->data[bij]; a->data[aij + 1] -= b->data[bij + 1]; } } return GSL_SUCCESS; } } int FUNCTION (gsl_matrix, mul_elements) (TYPE (gsl_matrix) * a, const TYPE (gsl_matrix) * b) { const size_t M = a->size1; const size_t N = a->size2; if (b->size1 != M || b->size2 != N) { GSL_ERROR ("matrices must have same dimensions", GSL_EBADLEN); } else { const size_t tda_a = a->tda; const size_t tda_b = b->tda; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { const size_t aij = 2 * (i * tda_a + j); const size_t bij = 2 * (i * tda_b + j); ATOMIC ar = a->data[aij]; ATOMIC ai = a->data[aij + 1]; ATOMIC br = b->data[bij]; ATOMIC bi = b->data[bij + 1]; a->data[aij] = ar * br - ai * bi; a->data[aij + 1] = ar * bi + ai * br; } } return GSL_SUCCESS; } } int FUNCTION (gsl_matrix, div_elements) (TYPE (gsl_matrix) * a, const TYPE (gsl_matrix) * b) { const size_t M = a->size1; const size_t N = a->size2; if (b->size1 != M || b->size2 != N) { GSL_ERROR ("matrices must have same dimensions", GSL_EBADLEN); } else { const size_t tda_a = a->tda; const size_t tda_b = b->tda; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { const size_t aij = 2 * (i * tda_a + j); const size_t bij = 2 * (i * tda_b + j); ATOMIC ar = a->data[aij]; ATOMIC ai = a->data[aij + 1]; ATOMIC br = b->data[bij]; ATOMIC bi = b->data[bij + 1]; ATOMIC s = 1.0 / hypot(br, bi); ATOMIC sbr = s * br; ATOMIC sbi = s * bi; a->data[aij] = (ar * sbr + ai * sbi) * s; a->data[aij + 1] = (ai * sbr - ar * sbi) * s; } } return GSL_SUCCESS; } } int FUNCTION (gsl_matrix, scale) (TYPE (gsl_matrix) * a, const BASE x) { const size_t M = a->size1; const size_t N = a->size2; const size_t tda = a->tda; size_t i, j; ATOMIC xr = GSL_REAL(x); ATOMIC xi = GSL_IMAG(x); for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { const size_t aij = 2 * (i * tda + j); ATOMIC ar = a->data[aij]; ATOMIC ai = a->data[aij + 1]; a->data[aij] = ar * xr - ai * xi; a->data[aij + 1] = ar * xi + ai * xr; } } return GSL_SUCCESS; } int FUNCTION(gsl_matrix, scale_rows) (TYPE(gsl_matrix) * a, const TYPE(gsl_vector) * x) { const size_t M = a->size1; if (x->size != M) { GSL_ERROR ("x must match number of rows of A", GSL_EBADLEN); } else { size_t i; for (i = 0; i < M; ++i) { const BASE xi = FUNCTION (gsl_vector, get) (x, i); VIEW (gsl_vector, view) v = FUNCTION (gsl_matrix, row) (a, i); FUNCTION (gsl_vector, scale) (&v.vector, xi); } return GSL_SUCCESS; } } int FUNCTION(gsl_matrix, scale_columns) (TYPE(gsl_matrix) * a, const TYPE(gsl_vector) * x) { const size_t N = a->size2; if (x->size != N) { GSL_ERROR ("x must match number of columns of A", GSL_EBADLEN); } else { size_t i; for (i = 0; i < N; ++i) { const BASE xi = FUNCTION (gsl_vector, get) (x, i); VIEW (gsl_vector, view) v = FUNCTION (gsl_matrix, column) (a, i); FUNCTION (gsl_vector, scale) (&v.vector, xi); } return GSL_SUCCESS; } } int FUNCTION (gsl_matrix, add_constant) (TYPE (gsl_matrix) * a, const BASE x) { const size_t M = a->size1; const size_t N = a->size2; const size_t tda = a->tda; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { a->data[2 * (i * tda + j)] += GSL_REAL (x); a->data[2 * (i * tda + j) + 1] += GSL_IMAG (x); } } return GSL_SUCCESS; } int FUNCTION (gsl_matrix, add_diagonal) (TYPE (gsl_matrix) * a, const BASE x) { const size_t M = a->size1; const size_t N = a->size2; const size_t tda = a->tda; const size_t loop_lim = (M < N ? M : N); size_t i; for (i = 0; i < loop_lim; i++) { a->data[2 * (i * tda + i)] += GSL_REAL (x); a->data[2 * (i * tda + i) + 1] += GSL_IMAG (x); } return GSL_SUCCESS; } gsl/matrix/ChangeLog0000644000175000017500000001751313536674414013017 0ustar eddedd2017-01-07 Rhys Ulerich * init_source.c: permit zero-dimensioned matrices (#49988) * submatrix_source.c: permit zero-dimensioned submatrices (#49988) * view_source.c: permit zero-dimensioned views * Audit for n-1 underflows when n = 0 2011-10-16 Rhys Ulerich * file_source.c: applied patch provided by Matthias Sitte which repairs failing binary_noncontiguous tests for complex-valued matrices 2011-10-16 Rhys Ulerich * test_source.c: added binary_noncontiguous test template * test_complex_source.c: added binary_noncontiguous test template * test.c: now running binary_noncontiguous 2010-04-07 Brian Gough * prop_source.c (FUNCTION): added a function to test if two matrices are equal 2009-07-09 Brian Gough * init_source.c (FUNCTION): handle NULL argument in free 2008-07-03 Brian Gough * matrix.c: compile all the inline matrix functions from header * gsl_matrix.h and all related files: use new inline declarations * Makefile.am (INCLUDES): use top_srcdir, remove top_builddir (noinst_HEADERS): remove matrix_source.c 2007-08-21 Brian Gough * prop_source.c (FUNCTION): added gsl_matrix_isnonneg 2007-02-17 Brian Gough * test_source.c (FUNCTION): avoid running negative value tests on char, because it can be unsigned. 2007-01-26 Brian Gough * minmax_source.c: added support for NaNs 2006-10-31 Brian Gough * prop_source.c (FUNCTION): added functions gsl_matrix_ispos, gsl_matrix_isneg 2003-01-01 Brian Gough * gsl_matrix_complex_float.h (gsl_matrix_complex_float_get): removed const from zero * matrix_source.c (FUNCTION): removed const from zero 2002-11-24 Brian Gough * Makefile.am: added libgslsys.a to link, to provide gsl_hypot for complex division Mon Jun 17 22:31:33 2002 Brian Gough * test_complex_source.c (FUNCTION): fixed non-constant initializer Wed May 1 21:33:44 2002 Brian Gough * gsl_matrix_complex_float.h (gsl_matrix_complex_float_get): moved constant zero inside GSL_RANGE_CHECK_OFF Sun Mar 24 20:28:48 2002 Brian Gough * oper_complex_source.c: complex matrix operations (from Toby White) Mon Feb 18 20:33:58 2002 Brian Gough * copy_source.c (gsl_matrix_swap): fixed prototype by removing const from second arg. Sun Jan 27 22:29:37 2002 Brian Gough * test.c: ensure that range check is working when running the tests Fri Sep 14 18:56:34 2001 Brian Gough * view_source.c: fixed cast for array type * view.c: added #includes for missing const qualified types * view_source.c: error for non-unit strides Fri Aug 3 14:11:23 2001 Brian Gough * added gsl_matrix_ptr and gsl_matrix_const_ptr functions Mon Jul 16 21:28:05 2001 Brian Gough * rowcol_source.c (FUNCTION): initialized view to NULL Fri Jul 13 21:29:27 2001 Brian Gough * changed views to be structs and used casts to initialize them Mon Jul 2 12:35:16 2001 Brian Gough * view.h: provide macros for initializing null vectors and views Sun Jul 1 22:44:51 2001 Brian Gough * introduction of new-style vector/matrix views Fri Jun 1 17:04:52 2001 Brian Gough * getset_source.c: made these routines work with the current matrix struct, previously they would give incorrect results Mon May 14 22:43:39 2001 Brian Gough * matrix_source.c (FUNCTION): removed unnecessary inline from static function definition Tue May 1 23:09:25 2001 Brian Gough * gsl_matrix_float.h (struct ): MS VC++ requires that the struct/typedef be made with a single definition Mon Mar 26 20:33:45 2001 Brian Gough * view_source.c: split view functions out into a separate file Sat Sep 9 16:47:16 2000 Brian Gough * added an owner field for indicating whether the underlying memory is owned by the vector. Changed the meaning of the block field to always be the address of the underlying block, even for subviews (previously the block field was set to NULL in this case). Thu Aug 17 19:46:22 2000 Brian Gough * swap_source.c (FUNCTION): added function gsl_matrix_transpose_memcpy for transposing rectangular matrices Sun Jul 16 10:40:15 2000 Brian Gough * init_source.c (FUNCTION): added gsl_matrix_view function for creating a matrix view of an ordinary C array Sat Jul 15 21:44:22 2000 Brian Gough * changed GSL_EDOM to GSL_EINVAL for invalid matrix size arguments Sat Jun 17 15:38:30 2000 Brian Gough * fixed up missing MULTIPLICITY factors in various functions Sun May 28 12:25:02 2000 Brian Gough * test_complex_source.c (FUNCTION): use binary mode "b" when reading and writing binary files * test_source.c (FUNCTION): use binary mode "b" when reading and writing binary files Thu May 4 20:58:59 2000 Brian Gough * oper.c: added simple arithmetic operations (+,-,*,/,scale,+const) Wed Apr 26 15:04:22 2000 Brian Gough * prop_source.c (FUNCTION): added function gsl_matrix_isnull Tue Apr 18 12:51:49 2000 Brian Gough * minmax_source.c (FUNCTION): fixed bug in minmax where coordinates would be incorrect for min or max in the first element * test_source.c (FUNCTION): added tests for max/min functions Thu Apr 13 18:39:27 2000 Brian Gough * minmax.c: added matrix max/min functions Sat Mar 25 20:29:41 2000 Brian Gough * swap_source.c (FUNCTION): renamed swap_cols to swap_columns, and renamed swap_rowcol to swap_row_column Tue Mar 21 21:15:22 2000 Brian Gough * matrix_source.c (FUNCTION): added set_all and set_zero functions Sat Mar 11 11:19:05 2000 Brian Gough * init_source.c (FUNCTION): added gsl_matrix_identity to set a matrix to the identity, and gsl_matrix_zero for zeroing a matrix * gsl_matrix.h: renamed struct element dim2 to tda (trailing dimension) following blas conventions for row-major matrices Thu Dec 2 21:17:16 1999 Brian Gough * rowcol_source.c (FUNCTION): added gsl_matrix_view_from_vector (Thanks to Fabrice Rossi) Sun Oct 31 20:01:39 1999 Brian Gough * copy.c copy_source.c: added gsl_matrix_copy function Tue Oct 19 14:13:35 1999 Brian Gough * added gsl_matrix_swap_row/col to exchange rows and columns Fri Oct 1 15:48:07 1999 Brian Gough * the matrix struct now supports a separate 'trailing dimension' to allow handling of submatrices * now uses separate block directory for memory management Mon Mar 1 20:05:52 1999 Brian Gough * rowcol_source.c: fix rowcol to use strides 1998-11-09 * test_source.c, test_complex_source.c: use macros to determine if we should run tests with long double printf/scanf, since these aren't supported on all platforms Mon Apr 6 15:06:38 1998 Brian Gough * make range checking the default, you have to define GSL_RANGE_CHECK_OFF to turn it off gsl/matrix/init_source.c0000644000175000017500000001226213536674414013730 0ustar eddedd/* matrix/init_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2009 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ TYPE (gsl_matrix) * FUNCTION (gsl_matrix, alloc) (const size_t n1, const size_t n2) { TYPE (gsl_block) * block; TYPE (gsl_matrix) * m; m = (TYPE (gsl_matrix) *) malloc (sizeof (TYPE (gsl_matrix))); if (m == 0) { GSL_ERROR_VAL ("failed to allocate space for matrix struct", GSL_ENOMEM, 0); } /* FIXME: n1*n2 could overflow for large dimensions */ block = FUNCTION(gsl_block, alloc) (n1 * n2) ; if (block == 0) { GSL_ERROR_VAL ("failed to allocate space for block", GSL_ENOMEM, 0); } m->data = block->data; m->size1 = n1; m->size2 = n2; m->tda = n2; m->block = block; m->owner = 1; return m; } TYPE (gsl_matrix) * FUNCTION (gsl_matrix, calloc) (const size_t n1, const size_t n2) { size_t i; TYPE (gsl_matrix) * m = FUNCTION (gsl_matrix, alloc) (n1, n2); if (m == 0) return 0; /* initialize matrix to zero */ memset(m->data, 0, MULTIPLICITY * n1 * n2 * sizeof(ATOMIC)); for (i = 0; i < MULTIPLICITY * n1 * n2; i++) { m->data[i] = 0; } return m; } TYPE (gsl_matrix) * FUNCTION (gsl_matrix, alloc_from_block) (TYPE(gsl_block) * block, const size_t offset, const size_t n1, const size_t n2, const size_t d2) { TYPE (gsl_matrix) * m; if (d2 < n2) { GSL_ERROR_VAL ("matrix dimension d2 must be greater than n2", GSL_EINVAL, 0); } else if (block->size < offset + n1 * d2) { GSL_ERROR_VAL ("matrix size exceeds available block size", GSL_EINVAL, 0); } m = (TYPE (gsl_matrix) *) malloc (sizeof (TYPE (gsl_matrix))); if (m == 0) { GSL_ERROR_VAL ("failed to allocate space for matrix struct", GSL_ENOMEM, 0); } m->data = block->data + MULTIPLICITY * offset; m->size1 = n1; m->size2 = n2; m->tda = d2; m->block = block; m->owner = 0; return m; } TYPE (gsl_matrix) * FUNCTION (gsl_matrix, alloc_from_matrix) (TYPE(gsl_matrix) * mm, const size_t k1, const size_t k2, const size_t n1, const size_t n2) { TYPE (gsl_matrix) * m; if (k1 + n1 > mm->size1) { GSL_ERROR_VAL ("submatrix dimension 1 exceeds size of original", GSL_EINVAL, 0); } else if (k2 + n2 > mm->size2) { GSL_ERROR_VAL ("submatrix dimension 2 exceeds size of original", GSL_EINVAL, 0); } m = (TYPE (gsl_matrix) *) malloc (sizeof (TYPE (gsl_matrix))); if (m == 0) { GSL_ERROR_VAL ("failed to allocate space for matrix struct", GSL_ENOMEM, 0); } m->data = mm->data + k1 * mm->tda + k2 ; m->size1 = n1; m->size2 = n2; m->tda = mm->tda; m->block = mm->block; m->owner = 0; return m; } void FUNCTION (gsl_matrix, free) (TYPE (gsl_matrix) * m) { RETURN_IF_NULL (m); if (m->owner) { FUNCTION(gsl_block, free) (m->block); } free (m); } void FUNCTION (gsl_matrix, set_identity) (TYPE (gsl_matrix) * m) { size_t i, j; ATOMIC * const data = m->data; const size_t p = m->size1 ; const size_t q = m->size2 ; const size_t tda = m->tda ; const BASE zero = ZERO; const BASE one = ONE; for (i = 0; i < p; i++) { for (j = 0; j < q; j++) { *(BASE *) (data + MULTIPLICITY * (i * tda + j)) = ((i == j) ? one : zero); } } } void FUNCTION (gsl_matrix, set_zero) (TYPE (gsl_matrix) * m) { size_t i, j; ATOMIC * const data = m->data; const size_t p = m->size1 ; const size_t q = m->size2 ; const size_t tda = m->tda ; const BASE zero = ZERO; for (i = 0; i < p; i++) { for (j = 0; j < q; j++) { *(BASE *) (data + MULTIPLICITY * (i * tda + j)) = zero; } } } void FUNCTION (gsl_matrix, set_all) (TYPE (gsl_matrix) * m, BASE x) { size_t i, j; ATOMIC * const data = m->data; const size_t p = m->size1 ; const size_t q = m->size2 ; const size_t tda = m->tda ; for (i = 0; i < p; i++) { for (j = 0; j < q; j++) { *(BASE *) (data + MULTIPLICITY * (i * tda + j)) = x; } } } gsl/matrix/getset_source.c0000644000175000017500000001167613536674414014270 0ustar eddedd/**********************************************************************/ /* The functions below are obsolete */ /**********************************************************************/ int FUNCTION (gsl_matrix, get_row) (TYPE (gsl_vector) * v, const TYPE (gsl_matrix) * m, const size_t i) { const size_t M = m->size1; const size_t N = m->size2; const size_t tda = m->tda; if (i >= M) { GSL_ERROR ("row index is out of range", GSL_EINVAL); } if (v->size != N) { GSL_ERROR ("matrix row size and vector length are not equal", GSL_EBADLEN); } { ATOMIC *v_data = v->data; const ATOMIC *row_data = m->data + MULTIPLICITY * i * tda; const size_t stride = v->stride ; size_t j; for (j = 0; j < N; j++) { unsigned int k; for (k = 0; k < MULTIPLICITY; k++) { v_data[MULTIPLICITY * stride * j + k] = row_data[MULTIPLICITY * j + k]; } } } return GSL_SUCCESS; } int FUNCTION (gsl_matrix, get_col) (TYPE (gsl_vector) * v, const TYPE (gsl_matrix) * m, const size_t j) { const size_t M = m->size1; const size_t N = m->size2; const size_t tda = m->tda; if (j >= N) { GSL_ERROR ("column index is out of range", GSL_EINVAL); } if (v->size != M) { GSL_ERROR ("matrix column size and vector length are not equal", GSL_EBADLEN); } { ATOMIC *v_data = v->data; const ATOMIC *column_data = m->data + MULTIPLICITY * j; const size_t stride = v->stride ; size_t i; for (i = 0; i < M; i++) { unsigned int k; for (k = 0; k < MULTIPLICITY; k++) { v_data[stride * MULTIPLICITY * i + k] = column_data[MULTIPLICITY * i * tda + k]; } } } return GSL_SUCCESS; } int FUNCTION (gsl_matrix, set_row) (TYPE (gsl_matrix) * m, const size_t i, const TYPE (gsl_vector) * v) { const size_t M = m->size1; const size_t N = m->size2; const size_t tda = m->tda; if (i >= M) { GSL_ERROR ("row index is out of range", GSL_EINVAL); } if (v->size != N) { GSL_ERROR ("matrix row size and vector length are not equal", GSL_EBADLEN); } { const ATOMIC *v_data = v->data; ATOMIC *row_data = m->data + MULTIPLICITY * i * tda; const size_t stride = v->stride ; size_t j; for (j = 0; j < N; j++) { unsigned int k; for (k = 0; k < MULTIPLICITY; k++) { row_data[MULTIPLICITY*j + k] = v_data[MULTIPLICITY * stride * j + k]; } } } return GSL_SUCCESS; } int FUNCTION (gsl_matrix, set_col) (TYPE (gsl_matrix) * m, const size_t j, const TYPE (gsl_vector) * v) { const size_t M = m->size1; const size_t N = m->size2; const size_t tda = m->tda; if (j >= N) { GSL_ERROR ("column index is out of range", GSL_EINVAL); } if (v->size != M) { GSL_ERROR ("matrix column size and vector length are not equal", GSL_EBADLEN); } { const ATOMIC *v_data = v->data; ATOMIC *column_data = m->data + MULTIPLICITY * j; const size_t stride = v->stride ; size_t i; for (i = 0; i < M; i++) { unsigned int k; for (k = 0; k < MULTIPLICITY; k++) { column_data[MULTIPLICITY * i * tda + k] = v_data[MULTIPLICITY * stride * i + k]; } } } return GSL_SUCCESS; } TYPE (gsl_vector) * FUNCTION (gsl_vector, alloc_row_from_matrix) (TYPE(gsl_matrix) * m, const size_t i) { TYPE (gsl_vector) * v; const size_t M = m->size1; if (i >= M) { GSL_ERROR_VAL ("row index is out of range", GSL_EINVAL, 0); } v = (TYPE (gsl_vector) *) malloc (sizeof (TYPE (gsl_vector))); if (v == 0) { GSL_ERROR_VAL ("failed to allocate space for vector struct", GSL_ENOMEM, 0); } v->data = m->data + MULTIPLICITY * i * m->tda ; v->size = m->size2; v->stride = 1; v->block = 0; return v; } TYPE (gsl_vector) * FUNCTION (gsl_vector, alloc_col_from_matrix) (TYPE(gsl_matrix) * m, const size_t j) { TYPE (gsl_vector) * v; const size_t N = m->size2; if (j >= N) { GSL_ERROR_VAL ("column index is out of range", GSL_EINVAL, 0); } v = (TYPE (gsl_vector) *) malloc (sizeof (TYPE (gsl_vector))); if (v == 0) { GSL_ERROR_VAL ("failed to allocate space for vector struct", GSL_ENOMEM, 0); } v->data = m->data + MULTIPLICITY * j ; v->size = m->size1; v->stride = m->tda; v->block = 0; return v; } gsl/matrix/Makefile.am0000664000175000017500000000266714057135461013300 0ustar eddeddnoinst_LTLIBRARIES = libgslmatrix.la check_PROGRAMS = test test_static pkginclude_HEADERS = gsl_matrix.h gsl_matrix_char.h gsl_matrix_complex_double.h gsl_matrix_complex_float.h gsl_matrix_complex_long_double.h gsl_matrix_double.h gsl_matrix_float.h gsl_matrix_int.h gsl_matrix_long.h gsl_matrix_long_double.h gsl_matrix_short.h gsl_matrix_uchar.h gsl_matrix_uint.h gsl_matrix_ulong.h gsl_matrix_ushort.h AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslmatrix.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_static_LDADD = libgslmatrix.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c test_static_SOURCES = test_static.c CLEANFILES = test.txt test.dat test_static.dat noinst_HEADERS = init_source.c file_source.c rowcol_source.c swap_source.c copy_source.c test_complex_source.c test_source.c minmax_source.c prop_source.c oper_source.c getset_source.c view_source.c submatrix_source.c oper_complex_source.c swap_complex_source.c libgslmatrix_la_SOURCES = init.c matrix.c file.c rowcol.c swap.c copy.c minmax.c prop.c oper.c getset.c view.c submatrix.c view.h gsl/matrix/gsl_matrix_complex_double.h0000664000175000017500000003154514057135461016644 0ustar eddedd/* matrix/gsl_matrix_complex_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MATRIX_COMPLEX_DOUBLE_H__ #define __GSL_MATRIX_COMPLEX_DOUBLE_H__ #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size1; size_t size2; size_t tda; double * data; gsl_block_complex * block; int owner; } gsl_matrix_complex ; typedef struct { gsl_matrix_complex matrix; } _gsl_matrix_complex_view; typedef _gsl_matrix_complex_view gsl_matrix_complex_view; typedef struct { gsl_matrix_complex matrix; } _gsl_matrix_complex_const_view; typedef const _gsl_matrix_complex_const_view gsl_matrix_complex_const_view; /* Allocation */ gsl_matrix_complex * gsl_matrix_complex_alloc (const size_t n1, const size_t n2); gsl_matrix_complex * gsl_matrix_complex_calloc (const size_t n1, const size_t n2); gsl_matrix_complex * gsl_matrix_complex_alloc_from_block (gsl_block_complex * b, const size_t offset, const size_t n1, const size_t n2, const size_t d2); gsl_matrix_complex * gsl_matrix_complex_alloc_from_matrix (gsl_matrix_complex * b, const size_t k1, const size_t k2, const size_t n1, const size_t n2); gsl_vector_complex * gsl_vector_complex_alloc_row_from_matrix (gsl_matrix_complex * m, const size_t i); gsl_vector_complex * gsl_vector_complex_alloc_col_from_matrix (gsl_matrix_complex * m, const size_t j); void gsl_matrix_complex_free (gsl_matrix_complex * m); /* Views */ _gsl_matrix_complex_view gsl_matrix_complex_submatrix (gsl_matrix_complex * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_complex_view gsl_matrix_complex_row (gsl_matrix_complex * m, const size_t i); _gsl_vector_complex_view gsl_matrix_complex_column (gsl_matrix_complex * m, const size_t j); _gsl_vector_complex_view gsl_matrix_complex_diagonal (gsl_matrix_complex * m); _gsl_vector_complex_view gsl_matrix_complex_subdiagonal (gsl_matrix_complex * m, const size_t k); _gsl_vector_complex_view gsl_matrix_complex_superdiagonal (gsl_matrix_complex * m, const size_t k); _gsl_vector_complex_view gsl_matrix_complex_subrow (gsl_matrix_complex * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_complex_view gsl_matrix_complex_subcolumn (gsl_matrix_complex * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_complex_view gsl_matrix_complex_view_array (double * base, const size_t n1, const size_t n2); _gsl_matrix_complex_view gsl_matrix_complex_view_array_with_tda (double * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_complex_view gsl_matrix_complex_view_vector (gsl_vector_complex * v, const size_t n1, const size_t n2); _gsl_matrix_complex_view gsl_matrix_complex_view_vector_with_tda (gsl_vector_complex * v, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_complex_const_view gsl_matrix_complex_const_submatrix (const gsl_matrix_complex * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_complex_const_view gsl_matrix_complex_const_row (const gsl_matrix_complex * m, const size_t i); _gsl_vector_complex_const_view gsl_matrix_complex_const_column (const gsl_matrix_complex * m, const size_t j); _gsl_vector_complex_const_view gsl_matrix_complex_const_diagonal (const gsl_matrix_complex * m); _gsl_vector_complex_const_view gsl_matrix_complex_const_subdiagonal (const gsl_matrix_complex * m, const size_t k); _gsl_vector_complex_const_view gsl_matrix_complex_const_superdiagonal (const gsl_matrix_complex * m, const size_t k); _gsl_vector_complex_const_view gsl_matrix_complex_const_subrow (const gsl_matrix_complex * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_complex_const_view gsl_matrix_complex_const_subcolumn (const gsl_matrix_complex * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_complex_const_view gsl_matrix_complex_const_view_array (const double * base, const size_t n1, const size_t n2); _gsl_matrix_complex_const_view gsl_matrix_complex_const_view_array_with_tda (const double * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_complex_const_view gsl_matrix_complex_const_view_vector (const gsl_vector_complex * v, const size_t n1, const size_t n2); _gsl_matrix_complex_const_view gsl_matrix_complex_const_view_vector_with_tda (const gsl_vector_complex * v, const size_t n1, const size_t n2, const size_t tda); /* Operations */ void gsl_matrix_complex_set_zero (gsl_matrix_complex * m); void gsl_matrix_complex_set_identity (gsl_matrix_complex * m); void gsl_matrix_complex_set_all (gsl_matrix_complex * m, gsl_complex x); int gsl_matrix_complex_fread (FILE * stream, gsl_matrix_complex * m) ; int gsl_matrix_complex_fwrite (FILE * stream, const gsl_matrix_complex * m) ; int gsl_matrix_complex_fscanf (FILE * stream, gsl_matrix_complex * m); int gsl_matrix_complex_fprintf (FILE * stream, const gsl_matrix_complex * m, const char * format); int gsl_matrix_complex_memcpy(gsl_matrix_complex * dest, const gsl_matrix_complex * src); int gsl_matrix_complex_swap(gsl_matrix_complex * m1, gsl_matrix_complex * m2); int gsl_matrix_complex_tricpy(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix_complex * dest, const gsl_matrix_complex * src); int gsl_matrix_complex_swap_rows(gsl_matrix_complex * m, const size_t i, const size_t j); int gsl_matrix_complex_swap_columns(gsl_matrix_complex * m, const size_t i, const size_t j); int gsl_matrix_complex_swap_rowcol(gsl_matrix_complex * m, const size_t i, const size_t j); int gsl_matrix_complex_transpose (gsl_matrix_complex * m); int gsl_matrix_complex_transpose_memcpy (gsl_matrix_complex * dest, const gsl_matrix_complex * src); int gsl_matrix_complex_transpose_tricpy(CBLAS_UPLO_t Uplo_src, CBLAS_DIAG_t Diag, gsl_matrix_complex * dest, const gsl_matrix_complex * src); int gsl_matrix_complex_conjtrans_memcpy (gsl_matrix_complex * dest, const gsl_matrix_complex * src); int gsl_matrix_complex_equal (const gsl_matrix_complex * a, const gsl_matrix_complex * b); int gsl_matrix_complex_isnull (const gsl_matrix_complex * m); int gsl_matrix_complex_ispos (const gsl_matrix_complex * m); int gsl_matrix_complex_isneg (const gsl_matrix_complex * m); int gsl_matrix_complex_isnonneg (const gsl_matrix_complex * m); int gsl_matrix_complex_add (gsl_matrix_complex * a, const gsl_matrix_complex * b); int gsl_matrix_complex_sub (gsl_matrix_complex * a, const gsl_matrix_complex * b); int gsl_matrix_complex_mul_elements (gsl_matrix_complex * a, const gsl_matrix_complex * b); int gsl_matrix_complex_div_elements (gsl_matrix_complex * a, const gsl_matrix_complex * b); int gsl_matrix_complex_scale (gsl_matrix_complex * a, const gsl_complex x); int gsl_matrix_complex_scale_rows (gsl_matrix_complex * a, const gsl_vector_complex * x); int gsl_matrix_complex_scale_columns (gsl_matrix_complex * a, const gsl_vector_complex * x); int gsl_matrix_complex_add_constant (gsl_matrix_complex * a, const gsl_complex x); int gsl_matrix_complex_add_diagonal (gsl_matrix_complex * a, const gsl_complex x); /***********************************************************************/ /* The functions below are obsolete */ /***********************************************************************/ int gsl_matrix_complex_get_row(gsl_vector_complex * v, const gsl_matrix_complex * m, const size_t i); int gsl_matrix_complex_get_col(gsl_vector_complex * v, const gsl_matrix_complex * m, const size_t j); int gsl_matrix_complex_set_row(gsl_matrix_complex * m, const size_t i, const gsl_vector_complex * v); int gsl_matrix_complex_set_col(gsl_matrix_complex * m, const size_t j, const gsl_vector_complex * v); /***********************************************************************/ /* inline functions if you are using GCC */ INLINE_DECL gsl_complex gsl_matrix_complex_get(const gsl_matrix_complex * m, const size_t i, const size_t j); INLINE_DECL void gsl_matrix_complex_set(gsl_matrix_complex * m, const size_t i, const size_t j, const gsl_complex x); INLINE_DECL gsl_complex * gsl_matrix_complex_ptr(gsl_matrix_complex * m, const size_t i, const size_t j); INLINE_DECL const gsl_complex * gsl_matrix_complex_const_ptr(const gsl_matrix_complex * m, const size_t i, const size_t j); #ifdef HAVE_INLINE INLINE_FUN gsl_complex gsl_matrix_complex_get(const gsl_matrix_complex * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { gsl_complex zero = {{0,0}}; if (i >= m->size1) { GSL_ERROR_VAL("first index out of range", GSL_EINVAL, zero) ; } else if (j >= m->size2) { GSL_ERROR_VAL("second index out of range", GSL_EINVAL, zero) ; } } #endif return *(gsl_complex *)(m->data + 2*(i * m->tda + j)) ; } INLINE_FUN void gsl_matrix_complex_set(gsl_matrix_complex * m, const size_t i, const size_t j, const gsl_complex x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ; } } #endif *(gsl_complex *)(m->data + 2*(i * m->tda + j)) = x ; } INLINE_FUN gsl_complex * gsl_matrix_complex_ptr(gsl_matrix_complex * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (gsl_complex *)(m->data + 2*(i * m->tda + j)) ; } INLINE_FUN const gsl_complex * gsl_matrix_complex_const_ptr(const gsl_matrix_complex * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (const gsl_complex *)(m->data + 2*(i * m->tda + j)) ; } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_MATRIX_COMPLEX_DOUBLE_H__ */ gsl/matrix/minmax_source.c0000644000175000017500000001256513536674414014264 0ustar eddedd/* matrix/minmax_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ BASE FUNCTION (gsl_matrix, max) (const TYPE (gsl_matrix) * m) { /* finds the largest element of a matrix */ const size_t M = m->size1; const size_t N = m->size2; const size_t tda = m->tda; BASE max = m->data[0 * tda + 0]; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE x = m->data[i * tda + j]; if (x > max) max = x; #ifdef FP if (isnan (x)) return x; #endif } } return max; } BASE FUNCTION (gsl_matrix, min) (const TYPE (gsl_matrix) * m) { /* finds the smallest element of a matrix */ const size_t M = m->size1; const size_t N = m->size2; const size_t tda = m->tda; BASE min = m->data[0 * tda + 0]; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE x = m->data[i * tda + j]; if (x < min) min = x; #ifdef FP if (isnan (x)) return x; #endif } } return min; } void FUNCTION (gsl_matrix, minmax) (const TYPE (gsl_matrix) * m, BASE * min_out, BASE * max_out) { /* finds the smallest and largest elements of a matrix */ const size_t M = m->size1; const size_t N = m->size2; const size_t tda = m->tda; BASE max = m->data[0 * tda + 0]; BASE min = m->data[0 * tda + 0]; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE x = m->data[i * tda + j]; if (x < min) { min = x; } if (x > max) { max = x; } #ifdef FP if (isnan (x)) { *min_out = x; *max_out = x; return; } #endif } } *min_out = min; *max_out = max; } void FUNCTION (gsl_matrix, max_index) (const TYPE (gsl_matrix) * m, size_t * imax_out, size_t *jmax_out) { /* finds the largest element of a matrix */ const size_t M = m->size1; const size_t N = m->size2; const size_t tda = m->tda; BASE max = m->data[0 * tda + 0]; size_t imax = 0, jmax = 0; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE x = m->data[i * tda + j]; if (x > max) { max = x; imax = i; jmax = j; } #ifdef FP if (isnan (x)) { *imax_out = i; *jmax_out = j; return; } #endif } } *imax_out = imax; *jmax_out = jmax; } void FUNCTION (gsl_matrix, min_index) (const TYPE (gsl_matrix) * m, size_t * imin_out, size_t *jmin_out) { /* finds the largest element of a matrix */ const size_t M = m->size1; const size_t N = m->size2; const size_t tda = m->tda; BASE min = m->data[0 * tda + 0]; size_t imin = 0, jmin = 0; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE x = m->data[i * tda + j]; if (x < min) { min = x; imin = i; jmin = j; } #ifdef FP if (isnan (x)) { *imin_out = i; *jmin_out = j; return; } #endif } } *imin_out = imin; *jmin_out = jmin; } void FUNCTION (gsl_matrix, minmax_index) (const TYPE (gsl_matrix) * m, size_t * imin_out, size_t * jmin_out, size_t * imax_out, size_t * jmax_out) { /* finds the smallest and largest elements of a matrix */ const size_t M = m->size1; const size_t N = m->size2; const size_t tda = m->tda; size_t imin = 0, jmin = 0, imax = 0, jmax = 0; BASE max = m->data[0 * tda + 0]; BASE min = m->data[0 * tda + 0]; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE x = m->data[i * tda + j]; if (x < min) { min = x; imin = i; jmin = j; } if (x > max) { max = x; imax = i; jmax = j; } #ifdef FP if (isnan (x)) { *imin_out = i; *jmin_out = j; *imax_out = i; *jmax_out = j; return; } #endif } } *imin_out = imin; *jmin_out = jmin; *imax_out = imax; *jmax_out = jmax; } gsl/matrix/matrix.c0000644000175000017500000000031113536674414012701 0ustar eddedd#include #include #include /* Compile all the inline matrix functions */ #define COMPILE_INLINE_STATIC #include "build.h" #include gsl/matrix/gsl_matrix_long.h0000664000175000017500000003042714057135461014600 0ustar eddedd/* matrix/gsl_matrix_long.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MATRIX_LONG_H__ #define __GSL_MATRIX_LONG_H__ #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size1; size_t size2; size_t tda; long * data; gsl_block_long * block; int owner; } gsl_matrix_long; typedef struct { gsl_matrix_long matrix; } _gsl_matrix_long_view; typedef _gsl_matrix_long_view gsl_matrix_long_view; typedef struct { gsl_matrix_long matrix; } _gsl_matrix_long_const_view; typedef const _gsl_matrix_long_const_view gsl_matrix_long_const_view; /* Allocation */ gsl_matrix_long * gsl_matrix_long_alloc (const size_t n1, const size_t n2); gsl_matrix_long * gsl_matrix_long_calloc (const size_t n1, const size_t n2); gsl_matrix_long * gsl_matrix_long_alloc_from_block (gsl_block_long * b, const size_t offset, const size_t n1, const size_t n2, const size_t d2); gsl_matrix_long * gsl_matrix_long_alloc_from_matrix (gsl_matrix_long * m, const size_t k1, const size_t k2, const size_t n1, const size_t n2); gsl_vector_long * gsl_vector_long_alloc_row_from_matrix (gsl_matrix_long * m, const size_t i); gsl_vector_long * gsl_vector_long_alloc_col_from_matrix (gsl_matrix_long * m, const size_t j); void gsl_matrix_long_free (gsl_matrix_long * m); /* Views */ _gsl_matrix_long_view gsl_matrix_long_submatrix (gsl_matrix_long * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_long_view gsl_matrix_long_row (gsl_matrix_long * m, const size_t i); _gsl_vector_long_view gsl_matrix_long_column (gsl_matrix_long * m, const size_t j); _gsl_vector_long_view gsl_matrix_long_diagonal (gsl_matrix_long * m); _gsl_vector_long_view gsl_matrix_long_subdiagonal (gsl_matrix_long * m, const size_t k); _gsl_vector_long_view gsl_matrix_long_superdiagonal (gsl_matrix_long * m, const size_t k); _gsl_vector_long_view gsl_matrix_long_subrow (gsl_matrix_long * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_long_view gsl_matrix_long_subcolumn (gsl_matrix_long * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_long_view gsl_matrix_long_view_array (long * base, const size_t n1, const size_t n2); _gsl_matrix_long_view gsl_matrix_long_view_array_with_tda (long * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_long_view gsl_matrix_long_view_vector (gsl_vector_long * v, const size_t n1, const size_t n2); _gsl_matrix_long_view gsl_matrix_long_view_vector_with_tda (gsl_vector_long * v, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_long_const_view gsl_matrix_long_const_submatrix (const gsl_matrix_long * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_long_const_view gsl_matrix_long_const_row (const gsl_matrix_long * m, const size_t i); _gsl_vector_long_const_view gsl_matrix_long_const_column (const gsl_matrix_long * m, const size_t j); _gsl_vector_long_const_view gsl_matrix_long_const_diagonal (const gsl_matrix_long * m); _gsl_vector_long_const_view gsl_matrix_long_const_subdiagonal (const gsl_matrix_long * m, const size_t k); _gsl_vector_long_const_view gsl_matrix_long_const_superdiagonal (const gsl_matrix_long * m, const size_t k); _gsl_vector_long_const_view gsl_matrix_long_const_subrow (const gsl_matrix_long * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_long_const_view gsl_matrix_long_const_subcolumn (const gsl_matrix_long * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_long_const_view gsl_matrix_long_const_view_array (const long * base, const size_t n1, const size_t n2); _gsl_matrix_long_const_view gsl_matrix_long_const_view_array_with_tda (const long * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_long_const_view gsl_matrix_long_const_view_vector (const gsl_vector_long * v, const size_t n1, const size_t n2); _gsl_matrix_long_const_view gsl_matrix_long_const_view_vector_with_tda (const gsl_vector_long * v, const size_t n1, const size_t n2, const size_t tda); /* Operations */ void gsl_matrix_long_set_zero (gsl_matrix_long * m); void gsl_matrix_long_set_identity (gsl_matrix_long * m); void gsl_matrix_long_set_all (gsl_matrix_long * m, long x); int gsl_matrix_long_fread (FILE * stream, gsl_matrix_long * m) ; int gsl_matrix_long_fwrite (FILE * stream, const gsl_matrix_long * m) ; int gsl_matrix_long_fscanf (FILE * stream, gsl_matrix_long * m); int gsl_matrix_long_fprintf (FILE * stream, const gsl_matrix_long * m, const char * format); int gsl_matrix_long_memcpy(gsl_matrix_long * dest, const gsl_matrix_long * src); int gsl_matrix_long_swap(gsl_matrix_long * m1, gsl_matrix_long * m2); int gsl_matrix_long_tricpy(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix_long * dest, const gsl_matrix_long * src); int gsl_matrix_long_swap_rows(gsl_matrix_long * m, const size_t i, const size_t j); int gsl_matrix_long_swap_columns(gsl_matrix_long * m, const size_t i, const size_t j); int gsl_matrix_long_swap_rowcol(gsl_matrix_long * m, const size_t i, const size_t j); int gsl_matrix_long_transpose (gsl_matrix_long * m); int gsl_matrix_long_transpose_memcpy (gsl_matrix_long * dest, const gsl_matrix_long * src); int gsl_matrix_long_transpose_tricpy (CBLAS_UPLO_t Uplo_src, CBLAS_DIAG_t Diag, gsl_matrix_long * dest, const gsl_matrix_long * src); long gsl_matrix_long_max (const gsl_matrix_long * m); long gsl_matrix_long_min (const gsl_matrix_long * m); void gsl_matrix_long_minmax (const gsl_matrix_long * m, long * min_out, long * max_out); void gsl_matrix_long_max_index (const gsl_matrix_long * m, size_t * imax, size_t *jmax); void gsl_matrix_long_min_index (const gsl_matrix_long * m, size_t * imin, size_t *jmin); void gsl_matrix_long_minmax_index (const gsl_matrix_long * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax); int gsl_matrix_long_equal (const gsl_matrix_long * a, const gsl_matrix_long * b); int gsl_matrix_long_isnull (const gsl_matrix_long * m); int gsl_matrix_long_ispos (const gsl_matrix_long * m); int gsl_matrix_long_isneg (const gsl_matrix_long * m); int gsl_matrix_long_isnonneg (const gsl_matrix_long * m); long gsl_matrix_long_norm1 (const gsl_matrix_long * m); int gsl_matrix_long_add (gsl_matrix_long * a, const gsl_matrix_long * b); int gsl_matrix_long_sub (gsl_matrix_long * a, const gsl_matrix_long * b); int gsl_matrix_long_mul_elements (gsl_matrix_long * a, const gsl_matrix_long * b); int gsl_matrix_long_div_elements (gsl_matrix_long * a, const gsl_matrix_long * b); int gsl_matrix_long_scale (gsl_matrix_long * a, const long x); int gsl_matrix_long_scale_rows (gsl_matrix_long * a, const gsl_vector_long * x); int gsl_matrix_long_scale_columns (gsl_matrix_long * a, const gsl_vector_long * x); int gsl_matrix_long_add_constant (gsl_matrix_long * a, const long x); int gsl_matrix_long_add_diagonal (gsl_matrix_long * a, const long x); /***********************************************************************/ /* The functions below are obsolete */ /***********************************************************************/ int gsl_matrix_long_get_row(gsl_vector_long * v, const gsl_matrix_long * m, const size_t i); int gsl_matrix_long_get_col(gsl_vector_long * v, const gsl_matrix_long * m, const size_t j); int gsl_matrix_long_set_row(gsl_matrix_long * m, const size_t i, const gsl_vector_long * v); int gsl_matrix_long_set_col(gsl_matrix_long * m, const size_t j, const gsl_vector_long * v); /***********************************************************************/ /* inline functions if you are using GCC */ INLINE_DECL long gsl_matrix_long_get(const gsl_matrix_long * m, const size_t i, const size_t j); INLINE_DECL void gsl_matrix_long_set(gsl_matrix_long * m, const size_t i, const size_t j, const long x); INLINE_DECL long * gsl_matrix_long_ptr(gsl_matrix_long * m, const size_t i, const size_t j); INLINE_DECL const long * gsl_matrix_long_const_ptr(const gsl_matrix_long * m, const size_t i, const size_t j); #ifdef HAVE_INLINE INLINE_FUN long gsl_matrix_long_get(const gsl_matrix_long * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ; } else if (j >= m->size2) { GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ; } } #endif return m->data[i * m->tda + j] ; } INLINE_FUN void gsl_matrix_long_set(gsl_matrix_long * m, const size_t i, const size_t j, const long x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ; } } #endif m->data[i * m->tda + j] = x ; } INLINE_FUN long * gsl_matrix_long_ptr(gsl_matrix_long * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (long *) (m->data + (i * m->tda + j)) ; } INLINE_FUN const long * gsl_matrix_long_const_ptr(const gsl_matrix_long * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (const long *) (m->data + (i * m->tda + j)) ; } #endif __END_DECLS #endif /* __GSL_MATRIX_LONG_H__ */ gsl/matrix/gsl_matrix_double.h0000664000175000017500000002646714057135461015124 0ustar eddedd/* matrix/gsl_matrix_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MATRIX_DOUBLE_H__ #define __GSL_MATRIX_DOUBLE_H__ #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size1; size_t size2; size_t tda; double * data; gsl_block * block; int owner; } gsl_matrix; typedef struct { gsl_matrix matrix; } _gsl_matrix_view; typedef _gsl_matrix_view gsl_matrix_view; typedef struct { gsl_matrix matrix; } _gsl_matrix_const_view; typedef const _gsl_matrix_const_view gsl_matrix_const_view; /* Allocation */ gsl_matrix * gsl_matrix_alloc (const size_t n1, const size_t n2); gsl_matrix * gsl_matrix_calloc (const size_t n1, const size_t n2); gsl_matrix * gsl_matrix_alloc_from_block (gsl_block * b, const size_t offset, const size_t n1, const size_t n2, const size_t d2); gsl_matrix * gsl_matrix_alloc_from_matrix (gsl_matrix * m, const size_t k1, const size_t k2, const size_t n1, const size_t n2); gsl_vector * gsl_vector_alloc_row_from_matrix (gsl_matrix * m, const size_t i); gsl_vector * gsl_vector_alloc_col_from_matrix (gsl_matrix * m, const size_t j); void gsl_matrix_free (gsl_matrix * m); /* Views */ _gsl_matrix_view gsl_matrix_submatrix (gsl_matrix * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_view gsl_matrix_row (gsl_matrix * m, const size_t i); _gsl_vector_view gsl_matrix_column (gsl_matrix * m, const size_t j); _gsl_vector_view gsl_matrix_diagonal (gsl_matrix * m); _gsl_vector_view gsl_matrix_subdiagonal (gsl_matrix * m, const size_t k); _gsl_vector_view gsl_matrix_superdiagonal (gsl_matrix * m, const size_t k); _gsl_vector_view gsl_matrix_subrow (gsl_matrix * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_view gsl_matrix_subcolumn (gsl_matrix * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_view gsl_matrix_view_array (double * base, const size_t n1, const size_t n2); _gsl_matrix_view gsl_matrix_view_array_with_tda (double * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_view gsl_matrix_view_vector (gsl_vector * v, const size_t n1, const size_t n2); _gsl_matrix_view gsl_matrix_view_vector_with_tda (gsl_vector * v, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_const_view gsl_matrix_const_submatrix (const gsl_matrix * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_const_view gsl_matrix_const_row (const gsl_matrix * m, const size_t i); _gsl_vector_const_view gsl_matrix_const_column (const gsl_matrix * m, const size_t j); _gsl_vector_const_view gsl_matrix_const_diagonal (const gsl_matrix * m); _gsl_vector_const_view gsl_matrix_const_subdiagonal (const gsl_matrix * m, const size_t k); _gsl_vector_const_view gsl_matrix_const_superdiagonal (const gsl_matrix * m, const size_t k); _gsl_vector_const_view gsl_matrix_const_subrow (const gsl_matrix * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_const_view gsl_matrix_const_subcolumn (const gsl_matrix * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_const_view gsl_matrix_const_view_array (const double * base, const size_t n1, const size_t n2); _gsl_matrix_const_view gsl_matrix_const_view_array_with_tda (const double * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_const_view gsl_matrix_const_view_vector (const gsl_vector * v, const size_t n1, const size_t n2); _gsl_matrix_const_view gsl_matrix_const_view_vector_with_tda (const gsl_vector * v, const size_t n1, const size_t n2, const size_t tda); /* Operations */ void gsl_matrix_set_zero (gsl_matrix * m); void gsl_matrix_set_identity (gsl_matrix * m); void gsl_matrix_set_all (gsl_matrix * m, double x); int gsl_matrix_fread (FILE * stream, gsl_matrix * m) ; int gsl_matrix_fwrite (FILE * stream, const gsl_matrix * m) ; int gsl_matrix_fscanf (FILE * stream, gsl_matrix * m); int gsl_matrix_fprintf (FILE * stream, const gsl_matrix * m, const char * format); int gsl_matrix_memcpy(gsl_matrix * dest, const gsl_matrix * src); int gsl_matrix_swap(gsl_matrix * m1, gsl_matrix * m2); int gsl_matrix_tricpy(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix * dest, const gsl_matrix * src); int gsl_matrix_swap_rows(gsl_matrix * m, const size_t i, const size_t j); int gsl_matrix_swap_columns(gsl_matrix * m, const size_t i, const size_t j); int gsl_matrix_swap_rowcol(gsl_matrix * m, const size_t i, const size_t j); int gsl_matrix_transpose (gsl_matrix * m); int gsl_matrix_transpose_memcpy (gsl_matrix * dest, const gsl_matrix * src); int gsl_matrix_transpose_tricpy (CBLAS_UPLO_t Uplo_src, CBLAS_DIAG_t Diag, gsl_matrix * dest, const gsl_matrix * src); double gsl_matrix_max (const gsl_matrix * m); double gsl_matrix_min (const gsl_matrix * m); void gsl_matrix_minmax (const gsl_matrix * m, double * min_out, double * max_out); void gsl_matrix_max_index (const gsl_matrix * m, size_t * imax, size_t *jmax); void gsl_matrix_min_index (const gsl_matrix * m, size_t * imin, size_t *jmin); void gsl_matrix_minmax_index (const gsl_matrix * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax); int gsl_matrix_equal (const gsl_matrix * a, const gsl_matrix * b); int gsl_matrix_isnull (const gsl_matrix * m); int gsl_matrix_ispos (const gsl_matrix * m); int gsl_matrix_isneg (const gsl_matrix * m); int gsl_matrix_isnonneg (const gsl_matrix * m); double gsl_matrix_norm1 (const gsl_matrix * m); int gsl_matrix_add (gsl_matrix * a, const gsl_matrix * b); int gsl_matrix_sub (gsl_matrix * a, const gsl_matrix * b); int gsl_matrix_mul_elements (gsl_matrix * a, const gsl_matrix * b); int gsl_matrix_div_elements (gsl_matrix * a, const gsl_matrix * b); int gsl_matrix_scale (gsl_matrix * a, const double x); int gsl_matrix_scale_rows (gsl_matrix * a, const gsl_vector * x); int gsl_matrix_scale_columns (gsl_matrix * a, const gsl_vector * x); int gsl_matrix_add_constant (gsl_matrix * a, const double x); int gsl_matrix_add_diagonal (gsl_matrix * a, const double x); /***********************************************************************/ /* The functions below are obsolete */ /***********************************************************************/ int gsl_matrix_get_row(gsl_vector * v, const gsl_matrix * m, const size_t i); int gsl_matrix_get_col(gsl_vector * v, const gsl_matrix * m, const size_t j); int gsl_matrix_set_row(gsl_matrix * m, const size_t i, const gsl_vector * v); int gsl_matrix_set_col(gsl_matrix * m, const size_t j, const gsl_vector * v); /***********************************************************************/ /* inline functions if you are using GCC */ INLINE_DECL double gsl_matrix_get(const gsl_matrix * m, const size_t i, const size_t j); INLINE_DECL void gsl_matrix_set(gsl_matrix * m, const size_t i, const size_t j, const double x); INLINE_DECL double * gsl_matrix_ptr(gsl_matrix * m, const size_t i, const size_t j); INLINE_DECL const double * gsl_matrix_const_ptr(const gsl_matrix * m, const size_t i, const size_t j); #ifdef HAVE_INLINE INLINE_FUN double gsl_matrix_get(const gsl_matrix * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ; } else if (j >= m->size2) { GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ; } } #endif return m->data[i * m->tda + j] ; } INLINE_FUN void gsl_matrix_set(gsl_matrix * m, const size_t i, const size_t j, const double x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ; } } #endif m->data[i * m->tda + j] = x ; } INLINE_FUN double * gsl_matrix_ptr(gsl_matrix * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (double *) (m->data + (i * m->tda + j)) ; } INLINE_FUN const double * gsl_matrix_const_ptr(const gsl_matrix * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (const double *) (m->data + (i * m->tda + j)) ; } #endif __END_DECLS #endif /* __GSL_MATRIX_DOUBLE_H__ */ gsl/matrix/gsl_matrix_char.h0000664000175000017500000003042714057135461014556 0ustar eddedd/* matrix/gsl_matrix_char.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MATRIX_CHAR_H__ #define __GSL_MATRIX_CHAR_H__ #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size1; size_t size2; size_t tda; char * data; gsl_block_char * block; int owner; } gsl_matrix_char; typedef struct { gsl_matrix_char matrix; } _gsl_matrix_char_view; typedef _gsl_matrix_char_view gsl_matrix_char_view; typedef struct { gsl_matrix_char matrix; } _gsl_matrix_char_const_view; typedef const _gsl_matrix_char_const_view gsl_matrix_char_const_view; /* Allocation */ gsl_matrix_char * gsl_matrix_char_alloc (const size_t n1, const size_t n2); gsl_matrix_char * gsl_matrix_char_calloc (const size_t n1, const size_t n2); gsl_matrix_char * gsl_matrix_char_alloc_from_block (gsl_block_char * b, const size_t offset, const size_t n1, const size_t n2, const size_t d2); gsl_matrix_char * gsl_matrix_char_alloc_from_matrix (gsl_matrix_char * m, const size_t k1, const size_t k2, const size_t n1, const size_t n2); gsl_vector_char * gsl_vector_char_alloc_row_from_matrix (gsl_matrix_char * m, const size_t i); gsl_vector_char * gsl_vector_char_alloc_col_from_matrix (gsl_matrix_char * m, const size_t j); void gsl_matrix_char_free (gsl_matrix_char * m); /* Views */ _gsl_matrix_char_view gsl_matrix_char_submatrix (gsl_matrix_char * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_char_view gsl_matrix_char_row (gsl_matrix_char * m, const size_t i); _gsl_vector_char_view gsl_matrix_char_column (gsl_matrix_char * m, const size_t j); _gsl_vector_char_view gsl_matrix_char_diagonal (gsl_matrix_char * m); _gsl_vector_char_view gsl_matrix_char_subdiagonal (gsl_matrix_char * m, const size_t k); _gsl_vector_char_view gsl_matrix_char_superdiagonal (gsl_matrix_char * m, const size_t k); _gsl_vector_char_view gsl_matrix_char_subrow (gsl_matrix_char * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_char_view gsl_matrix_char_subcolumn (gsl_matrix_char * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_char_view gsl_matrix_char_view_array (char * base, const size_t n1, const size_t n2); _gsl_matrix_char_view gsl_matrix_char_view_array_with_tda (char * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_char_view gsl_matrix_char_view_vector (gsl_vector_char * v, const size_t n1, const size_t n2); _gsl_matrix_char_view gsl_matrix_char_view_vector_with_tda (gsl_vector_char * v, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_char_const_view gsl_matrix_char_const_submatrix (const gsl_matrix_char * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_char_const_view gsl_matrix_char_const_row (const gsl_matrix_char * m, const size_t i); _gsl_vector_char_const_view gsl_matrix_char_const_column (const gsl_matrix_char * m, const size_t j); _gsl_vector_char_const_view gsl_matrix_char_const_diagonal (const gsl_matrix_char * m); _gsl_vector_char_const_view gsl_matrix_char_const_subdiagonal (const gsl_matrix_char * m, const size_t k); _gsl_vector_char_const_view gsl_matrix_char_const_superdiagonal (const gsl_matrix_char * m, const size_t k); _gsl_vector_char_const_view gsl_matrix_char_const_subrow (const gsl_matrix_char * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_char_const_view gsl_matrix_char_const_subcolumn (const gsl_matrix_char * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_char_const_view gsl_matrix_char_const_view_array (const char * base, const size_t n1, const size_t n2); _gsl_matrix_char_const_view gsl_matrix_char_const_view_array_with_tda (const char * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_char_const_view gsl_matrix_char_const_view_vector (const gsl_vector_char * v, const size_t n1, const size_t n2); _gsl_matrix_char_const_view gsl_matrix_char_const_view_vector_with_tda (const gsl_vector_char * v, const size_t n1, const size_t n2, const size_t tda); /* Operations */ void gsl_matrix_char_set_zero (gsl_matrix_char * m); void gsl_matrix_char_set_identity (gsl_matrix_char * m); void gsl_matrix_char_set_all (gsl_matrix_char * m, char x); int gsl_matrix_char_fread (FILE * stream, gsl_matrix_char * m) ; int gsl_matrix_char_fwrite (FILE * stream, const gsl_matrix_char * m) ; int gsl_matrix_char_fscanf (FILE * stream, gsl_matrix_char * m); int gsl_matrix_char_fprintf (FILE * stream, const gsl_matrix_char * m, const char * format); int gsl_matrix_char_memcpy(gsl_matrix_char * dest, const gsl_matrix_char * src); int gsl_matrix_char_swap(gsl_matrix_char * m1, gsl_matrix_char * m2); int gsl_matrix_char_tricpy(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix_char * dest, const gsl_matrix_char * src); int gsl_matrix_char_swap_rows(gsl_matrix_char * m, const size_t i, const size_t j); int gsl_matrix_char_swap_columns(gsl_matrix_char * m, const size_t i, const size_t j); int gsl_matrix_char_swap_rowcol(gsl_matrix_char * m, const size_t i, const size_t j); int gsl_matrix_char_transpose (gsl_matrix_char * m); int gsl_matrix_char_transpose_memcpy (gsl_matrix_char * dest, const gsl_matrix_char * src); int gsl_matrix_char_transpose_tricpy (CBLAS_UPLO_t Uplo_src, CBLAS_DIAG_t Diag, gsl_matrix_char * dest, const gsl_matrix_char * src); char gsl_matrix_char_max (const gsl_matrix_char * m); char gsl_matrix_char_min (const gsl_matrix_char * m); void gsl_matrix_char_minmax (const gsl_matrix_char * m, char * min_out, char * max_out); void gsl_matrix_char_max_index (const gsl_matrix_char * m, size_t * imax, size_t *jmax); void gsl_matrix_char_min_index (const gsl_matrix_char * m, size_t * imin, size_t *jmin); void gsl_matrix_char_minmax_index (const gsl_matrix_char * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax); int gsl_matrix_char_equal (const gsl_matrix_char * a, const gsl_matrix_char * b); int gsl_matrix_char_isnull (const gsl_matrix_char * m); int gsl_matrix_char_ispos (const gsl_matrix_char * m); int gsl_matrix_char_isneg (const gsl_matrix_char * m); int gsl_matrix_char_isnonneg (const gsl_matrix_char * m); char gsl_matrix_char_norm1 (const gsl_matrix_char * m); int gsl_matrix_char_add (gsl_matrix_char * a, const gsl_matrix_char * b); int gsl_matrix_char_sub (gsl_matrix_char * a, const gsl_matrix_char * b); int gsl_matrix_char_mul_elements (gsl_matrix_char * a, const gsl_matrix_char * b); int gsl_matrix_char_div_elements (gsl_matrix_char * a, const gsl_matrix_char * b); int gsl_matrix_char_scale (gsl_matrix_char * a, const char x); int gsl_matrix_char_scale_rows (gsl_matrix_char * a, const gsl_vector_char * x); int gsl_matrix_char_scale_columns (gsl_matrix_char * a, const gsl_vector_char * x); int gsl_matrix_char_add_constant (gsl_matrix_char * a, const char x); int gsl_matrix_char_add_diagonal (gsl_matrix_char * a, const char x); /***********************************************************************/ /* The functions below are obsolete */ /***********************************************************************/ int gsl_matrix_char_get_row(gsl_vector_char * v, const gsl_matrix_char * m, const size_t i); int gsl_matrix_char_get_col(gsl_vector_char * v, const gsl_matrix_char * m, const size_t j); int gsl_matrix_char_set_row(gsl_matrix_char * m, const size_t i, const gsl_vector_char * v); int gsl_matrix_char_set_col(gsl_matrix_char * m, const size_t j, const gsl_vector_char * v); /***********************************************************************/ /* inline functions if you are using GCC */ INLINE_DECL char gsl_matrix_char_get(const gsl_matrix_char * m, const size_t i, const size_t j); INLINE_DECL void gsl_matrix_char_set(gsl_matrix_char * m, const size_t i, const size_t j, const char x); INLINE_DECL char * gsl_matrix_char_ptr(gsl_matrix_char * m, const size_t i, const size_t j); INLINE_DECL const char * gsl_matrix_char_const_ptr(const gsl_matrix_char * m, const size_t i, const size_t j); #ifdef HAVE_INLINE INLINE_FUN char gsl_matrix_char_get(const gsl_matrix_char * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ; } else if (j >= m->size2) { GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ; } } #endif return m->data[i * m->tda + j] ; } INLINE_FUN void gsl_matrix_char_set(gsl_matrix_char * m, const size_t i, const size_t j, const char x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ; } } #endif m->data[i * m->tda + j] = x ; } INLINE_FUN char * gsl_matrix_char_ptr(gsl_matrix_char * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (char *) (m->data + (i * m->tda + j)) ; } INLINE_FUN const char * gsl_matrix_char_const_ptr(const gsl_matrix_char * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (const char *) (m->data + (i * m->tda + j)) ; } #endif __END_DECLS #endif /* __GSL_MATRIX_CHAR_H__ */ gsl/matrix/getset.c0000644000175000017500000000345113536674414012700 0ustar eddedd#include #include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "getset_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "getset_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "getset_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "getset_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "getset_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "getset_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "getset_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "getset_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "getset_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "getset_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "getset_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "getset_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "getset_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "getset_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/matrix/rowcol_source.c0000644000175000017500000001157413536674414014277 0ustar eddedd/* matrix/rowcol_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ QUALIFIED_VIEW(_gsl_vector,view) FUNCTION (gsl_matrix, row) (QUALIFIED_TYPE(gsl_matrix) * m, const size_t i) { QUALIFIED_VIEW(_gsl_vector,view) view = NULL_VECTOR_VIEW; if (i >= m->size1) { GSL_ERROR_VAL ("row index is out of range", GSL_EINVAL, view); } { TYPE(gsl_vector) v = NULL_VECTOR; v.data = m->data + i * MULTIPLICITY * m->tda; v.size = m->size2; v.stride = 1; v.block = m->block; v.owner = 0; view.vector = v; return view; } } QUALIFIED_VIEW(_gsl_vector,view) FUNCTION (gsl_matrix, column) (QUALIFIED_TYPE(gsl_matrix) * m, const size_t j) { QUALIFIED_VIEW(_gsl_vector,view) view = NULL_VECTOR_VIEW; if (j >= m->size2) { GSL_ERROR_VAL ("column index is out of range", GSL_EINVAL, view); } { TYPE(gsl_vector) v = NULL_VECTOR; v.data = m->data + j * MULTIPLICITY; v.size = m->size1; v.stride = m->tda; v.block = m->block; v.owner = 0; view.vector = v; return view; } } QUALIFIED_VIEW(_gsl_vector,view) FUNCTION (gsl_matrix, diagonal) (QUALIFIED_TYPE(gsl_matrix) * m) { QUALIFIED_VIEW(_gsl_vector,view) view = NULL_VECTOR_VIEW; TYPE(gsl_vector) v = NULL_VECTOR; v.data = m->data; v.size = GSL_MIN(m->size1,m->size2); v.stride = m->tda + 1; v.block = m->block; v.owner = 0; view.vector = v; return view; } QUALIFIED_VIEW(_gsl_vector,view) FUNCTION (gsl_matrix, subdiagonal) (QUALIFIED_TYPE(gsl_matrix) * m, const size_t k) { QUALIFIED_VIEW(_gsl_vector,view) view = NULL_VECTOR_VIEW; if (k >= m->size1) { GSL_ERROR_VAL ("subdiagonal index is out of range", GSL_EINVAL, view); } { TYPE(gsl_vector) v = NULL_VECTOR; v.data = m->data + k * MULTIPLICITY * m->tda; v.size = GSL_MIN(m->size1 - k, m->size2); v.stride = m->tda + 1; v.block = m->block; v.owner = 0; view.vector = v; return view; } } QUALIFIED_VIEW(_gsl_vector,view) FUNCTION (gsl_matrix, superdiagonal) (QUALIFIED_TYPE(gsl_matrix) * m, const size_t k) { QUALIFIED_VIEW(_gsl_vector,view) view = NULL_VECTOR_VIEW; if (k >= m->size2) { GSL_ERROR_VAL ("column index is out of range", GSL_EINVAL, view); } { TYPE(gsl_vector) v = NULL_VECTOR; v.data = m->data + k * MULTIPLICITY; v.size = GSL_MIN(m->size1, m->size2 - k); v.stride = m->tda + 1; v.block = m->block; v.owner = 0; view.vector = v; return view; } } QUALIFIED_VIEW(_gsl_vector,view) FUNCTION (gsl_matrix, subrow) (QUALIFIED_TYPE(gsl_matrix) * m, const size_t i, const size_t offset, const size_t n) { QUALIFIED_VIEW(_gsl_vector,view) view = NULL_VECTOR_VIEW; if (i >= m->size1) { GSL_ERROR_VAL ("row index is out of range", GSL_EINVAL, view); } else if (n == 0) { GSL_ERROR_VAL ("vector length n must be positive integer", GSL_EINVAL, view); } else if (offset + n > m->size2) { GSL_ERROR_VAL ("dimension n overflows matrix", GSL_EINVAL, view); } { TYPE(gsl_vector) v = NULL_VECTOR; v.data = m->data + MULTIPLICITY * (i * m->tda + offset); v.size = n; v.stride = 1; v.block = m->block; v.owner = 0; view.vector = v; return view; } } QUALIFIED_VIEW(_gsl_vector,view) FUNCTION (gsl_matrix, subcolumn) (QUALIFIED_TYPE(gsl_matrix) * m, const size_t j, const size_t offset, const size_t n) { QUALIFIED_VIEW(_gsl_vector,view) view = NULL_VECTOR_VIEW; if (j >= m->size2) { GSL_ERROR_VAL ("column index is out of range", GSL_EINVAL, view); } else if (n == 0) { GSL_ERROR_VAL ("vector length n must be positive integer", GSL_EINVAL, view); } else if (offset + n > m->size1) { GSL_ERROR_VAL ("dimension n overflows matrix", GSL_EINVAL, view); } { TYPE(gsl_vector) v = NULL_VECTOR; v.data = m->data + MULTIPLICITY * (offset * m->tda + j); v.size = n; v.stride = m->tda; v.block = m->block; v.owner = 0; view.vector = v; return view; } } gsl/matrix/gsl_matrix_complex_float.h0000664000175000017500000003415314057135461016475 0ustar eddedd/* matrix/gsl_matrix_complex_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MATRIX_COMPLEX_FLOAT_H__ #define __GSL_MATRIX_COMPLEX_FLOAT_H__ #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size1; size_t size2; size_t tda; float * data; gsl_block_complex_float * block; int owner; } gsl_matrix_complex_float ; typedef struct { gsl_matrix_complex_float matrix; } _gsl_matrix_complex_float_view; typedef _gsl_matrix_complex_float_view gsl_matrix_complex_float_view; typedef struct { gsl_matrix_complex_float matrix; } _gsl_matrix_complex_float_const_view; typedef const _gsl_matrix_complex_float_const_view gsl_matrix_complex_float_const_view; /* Allocation */ gsl_matrix_complex_float * gsl_matrix_complex_float_alloc (const size_t n1, const size_t n2); gsl_matrix_complex_float * gsl_matrix_complex_float_calloc (const size_t n1, const size_t n2); gsl_matrix_complex_float * gsl_matrix_complex_float_alloc_from_block (gsl_block_complex_float * b, const size_t offset, const size_t n1, const size_t n2, const size_t d2); gsl_matrix_complex_float * gsl_matrix_complex_float_alloc_from_matrix (gsl_matrix_complex_float * b, const size_t k1, const size_t k2, const size_t n1, const size_t n2); gsl_vector_complex_float * gsl_vector_complex_float_alloc_row_from_matrix (gsl_matrix_complex_float * m, const size_t i); gsl_vector_complex_float * gsl_vector_complex_float_alloc_col_from_matrix (gsl_matrix_complex_float * m, const size_t j); void gsl_matrix_complex_float_free (gsl_matrix_complex_float * m); /* Views */ _gsl_matrix_complex_float_view gsl_matrix_complex_float_submatrix (gsl_matrix_complex_float * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_complex_float_view gsl_matrix_complex_float_row (gsl_matrix_complex_float * m, const size_t i); _gsl_vector_complex_float_view gsl_matrix_complex_float_column (gsl_matrix_complex_float * m, const size_t j); _gsl_vector_complex_float_view gsl_matrix_complex_float_diagonal (gsl_matrix_complex_float * m); _gsl_vector_complex_float_view gsl_matrix_complex_float_subdiagonal (gsl_matrix_complex_float * m, const size_t k); _gsl_vector_complex_float_view gsl_matrix_complex_float_superdiagonal (gsl_matrix_complex_float * m, const size_t k); _gsl_vector_complex_float_view gsl_matrix_complex_float_subrow (gsl_matrix_complex_float * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_complex_float_view gsl_matrix_complex_float_subcolumn (gsl_matrix_complex_float * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_complex_float_view gsl_matrix_complex_float_view_array (float * base, const size_t n1, const size_t n2); _gsl_matrix_complex_float_view gsl_matrix_complex_float_view_array_with_tda (float * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_complex_float_view gsl_matrix_complex_float_view_vector (gsl_vector_complex_float * v, const size_t n1, const size_t n2); _gsl_matrix_complex_float_view gsl_matrix_complex_float_view_vector_with_tda (gsl_vector_complex_float * v, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_complex_float_const_view gsl_matrix_complex_float_const_submatrix (const gsl_matrix_complex_float * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_complex_float_const_view gsl_matrix_complex_float_const_row (const gsl_matrix_complex_float * m, const size_t i); _gsl_vector_complex_float_const_view gsl_matrix_complex_float_const_column (const gsl_matrix_complex_float * m, const size_t j); _gsl_vector_complex_float_const_view gsl_matrix_complex_float_const_diagonal (const gsl_matrix_complex_float * m); _gsl_vector_complex_float_const_view gsl_matrix_complex_float_const_subdiagonal (const gsl_matrix_complex_float * m, const size_t k); _gsl_vector_complex_float_const_view gsl_matrix_complex_float_const_superdiagonal (const gsl_matrix_complex_float * m, const size_t k); _gsl_vector_complex_float_const_view gsl_matrix_complex_float_const_subrow (const gsl_matrix_complex_float * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_complex_float_const_view gsl_matrix_complex_float_const_subcolumn (const gsl_matrix_complex_float * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_complex_float_const_view gsl_matrix_complex_float_const_view_array (const float * base, const size_t n1, const size_t n2); _gsl_matrix_complex_float_const_view gsl_matrix_complex_float_const_view_array_with_tda (const float * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_complex_float_const_view gsl_matrix_complex_float_const_view_vector (const gsl_vector_complex_float * v, const size_t n1, const size_t n2); _gsl_matrix_complex_float_const_view gsl_matrix_complex_float_const_view_vector_with_tda (const gsl_vector_complex_float * v, const size_t n1, const size_t n2, const size_t tda); /* Operations */ void gsl_matrix_complex_float_set_zero (gsl_matrix_complex_float * m); void gsl_matrix_complex_float_set_identity (gsl_matrix_complex_float * m); void gsl_matrix_complex_float_set_all (gsl_matrix_complex_float * m, gsl_complex_float x); int gsl_matrix_complex_float_fread (FILE * stream, gsl_matrix_complex_float * m) ; int gsl_matrix_complex_float_fwrite (FILE * stream, const gsl_matrix_complex_float * m) ; int gsl_matrix_complex_float_fscanf (FILE * stream, gsl_matrix_complex_float * m); int gsl_matrix_complex_float_fprintf (FILE * stream, const gsl_matrix_complex_float * m, const char * format); int gsl_matrix_complex_float_memcpy(gsl_matrix_complex_float * dest, const gsl_matrix_complex_float * src); int gsl_matrix_complex_float_swap(gsl_matrix_complex_float * m1, gsl_matrix_complex_float * m2); int gsl_matrix_complex_float_tricpy(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix_complex_float * dest, const gsl_matrix_complex_float * src); int gsl_matrix_complex_float_swap_rows(gsl_matrix_complex_float * m, const size_t i, const size_t j); int gsl_matrix_complex_float_swap_columns(gsl_matrix_complex_float * m, const size_t i, const size_t j); int gsl_matrix_complex_float_swap_rowcol(gsl_matrix_complex_float * m, const size_t i, const size_t j); int gsl_matrix_complex_float_transpose (gsl_matrix_complex_float * m); int gsl_matrix_complex_float_transpose_memcpy (gsl_matrix_complex_float * dest, const gsl_matrix_complex_float * src); int gsl_matrix_complex_float_transpose_tricpy(CBLAS_UPLO_t Uplo_src, CBLAS_DIAG_t Diag, gsl_matrix_complex_float * dest, const gsl_matrix_complex_float * src); int gsl_matrix_complex_float_conjtrans_memcpy (gsl_matrix_complex_float * dest, const gsl_matrix_complex_float * src); int gsl_matrix_complex_float_equal (const gsl_matrix_complex_float * a, const gsl_matrix_complex_float * b); int gsl_matrix_complex_float_isnull (const gsl_matrix_complex_float * m); int gsl_matrix_complex_float_ispos (const gsl_matrix_complex_float * m); int gsl_matrix_complex_float_isneg (const gsl_matrix_complex_float * m); int gsl_matrix_complex_float_isnonneg (const gsl_matrix_complex_float * m); int gsl_matrix_complex_float_add (gsl_matrix_complex_float * a, const gsl_matrix_complex_float * b); int gsl_matrix_complex_float_sub (gsl_matrix_complex_float * a, const gsl_matrix_complex_float * b); int gsl_matrix_complex_float_mul_elements (gsl_matrix_complex_float * a, const gsl_matrix_complex_float * b); int gsl_matrix_complex_float_div_elements (gsl_matrix_complex_float * a, const gsl_matrix_complex_float * b); int gsl_matrix_complex_float_scale (gsl_matrix_complex_float * a, const gsl_complex_float x); int gsl_matrix_complex_float_scale_rows (gsl_matrix_complex_float * a, const gsl_vector_complex_float * x); int gsl_matrix_complex_float_scale_columns (gsl_matrix_complex_float * a, const gsl_vector_complex_float * x); int gsl_matrix_complex_float_add_constant (gsl_matrix_complex_float * a, const gsl_complex_float x); int gsl_matrix_complex_float_add_diagonal (gsl_matrix_complex_float * a, const gsl_complex_float x); /***********************************************************************/ /* The functions below are obsolete */ /***********************************************************************/ int gsl_matrix_complex_float_get_row(gsl_vector_complex_float * v, const gsl_matrix_complex_float * m, const size_t i); int gsl_matrix_complex_float_get_col(gsl_vector_complex_float * v, const gsl_matrix_complex_float * m, const size_t j); int gsl_matrix_complex_float_set_row(gsl_matrix_complex_float * m, const size_t i, const gsl_vector_complex_float * v); int gsl_matrix_complex_float_set_col(gsl_matrix_complex_float * m, const size_t j, const gsl_vector_complex_float * v); /***********************************************************************/ /* inline functions if you are using GCC */ INLINE_DECL gsl_complex_float gsl_matrix_complex_float_get(const gsl_matrix_complex_float * m, const size_t i, const size_t j); INLINE_DECL void gsl_matrix_complex_float_set(gsl_matrix_complex_float * m, const size_t i, const size_t j, const gsl_complex_float x); INLINE_DECL gsl_complex_float * gsl_matrix_complex_float_ptr(gsl_matrix_complex_float * m, const size_t i, const size_t j); INLINE_DECL const gsl_complex_float * gsl_matrix_complex_float_const_ptr(const gsl_matrix_complex_float * m, const size_t i, const size_t j); #ifdef HAVE_INLINE INLINE_FUN gsl_complex_float gsl_matrix_complex_float_get(const gsl_matrix_complex_float * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { gsl_complex_float zero = {{0,0}}; if (i >= m->size1) { GSL_ERROR_VAL("first index out of range", GSL_EINVAL, zero) ; } else if (j >= m->size2) { GSL_ERROR_VAL("second index out of range", GSL_EINVAL, zero) ; } } #endif return *(gsl_complex_float *)(m->data + 2*(i * m->tda + j)) ; } INLINE_FUN void gsl_matrix_complex_float_set(gsl_matrix_complex_float * m, const size_t i, const size_t j, const gsl_complex_float x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ; } } #endif *(gsl_complex_float *)(m->data + 2*(i * m->tda + j)) = x ; } INLINE_FUN gsl_complex_float * gsl_matrix_complex_float_ptr(gsl_matrix_complex_float * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (gsl_complex_float *)(m->data + 2*(i * m->tda + j)) ; } INLINE_FUN const gsl_complex_float * gsl_matrix_complex_float_const_ptr(const gsl_matrix_complex_float * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (const gsl_complex_float *)(m->data + 2*(i * m->tda + j)) ; } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_MATRIX_COMPLEX_FLOAT_H__ */ gsl/matrix/oper_source.c0000664000175000017500000001216514057135461013727 0ustar eddedd/* matrix/oper_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION(gsl_matrix, add) (TYPE(gsl_matrix) * a, const TYPE(gsl_matrix) * b) { const size_t M = a->size1; const size_t N = a->size2; if (b->size1 != M || b->size2 != N) { GSL_ERROR ("matrices must have same dimensions", GSL_EBADLEN); } else { const size_t tda_a = a->tda; const size_t tda_b = b->tda; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { a->data[i * tda_a + j] += b->data[i * tda_b + j]; } } return GSL_SUCCESS; } } int FUNCTION(gsl_matrix, sub) (TYPE(gsl_matrix) * a, const TYPE(gsl_matrix) * b) { const size_t M = a->size1; const size_t N = a->size2; if (b->size1 != M || b->size2 != N) { GSL_ERROR ("matrices must have same dimensions", GSL_EBADLEN); } else { const size_t tda_a = a->tda; const size_t tda_b = b->tda; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { a->data[i * tda_a + j] -= b->data[i * tda_b + j]; } } return GSL_SUCCESS; } } int FUNCTION(gsl_matrix, mul_elements) (TYPE(gsl_matrix) * a, const TYPE(gsl_matrix) * b) { const size_t M = a->size1; const size_t N = a->size2; if (b->size1 != M || b->size2 != N) { GSL_ERROR ("matrices must have same dimensions", GSL_EBADLEN); } else { const size_t tda_a = a->tda; const size_t tda_b = b->tda; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { a->data[i * tda_a + j] *= b->data[i * tda_b + j]; } } return GSL_SUCCESS; } } int FUNCTION(gsl_matrix, div_elements) (TYPE(gsl_matrix) * a, const TYPE(gsl_matrix) * b) { const size_t M = a->size1; const size_t N = a->size2; if (b->size1 != M || b->size2 != N) { GSL_ERROR ("matrices must have same dimensions", GSL_EBADLEN); } else { const size_t tda_a = a->tda; const size_t tda_b = b->tda; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { a->data[i * tda_a + j] /= b->data[i * tda_b + j]; } } return GSL_SUCCESS; } } int FUNCTION(gsl_matrix, scale) (TYPE(gsl_matrix) * a, const ATOMIC x) { const size_t M = a->size1; const size_t N = a->size2; const size_t tda = a->tda; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { a->data[i * tda + j] *= x; } } return GSL_SUCCESS; } int FUNCTION(gsl_matrix, scale_rows) (TYPE(gsl_matrix) * a, const TYPE(gsl_vector) * x) { const size_t M = a->size1; if (x->size != M) { GSL_ERROR ("x must match number of rows of A", GSL_EBADLEN); } else { size_t i; for (i = 0; i < M; ++i) { const ATOMIC xi = FUNCTION (gsl_vector, get) (x, i); VIEW (gsl_vector, view) v = FUNCTION (gsl_matrix, row) (a, i); FUNCTION (gsl_vector, scale) (&v.vector, xi); } return GSL_SUCCESS; } } int FUNCTION(gsl_matrix, scale_columns) (TYPE(gsl_matrix) * a, const TYPE(gsl_vector) * x) { const size_t N = a->size2; if (x->size != N) { GSL_ERROR ("x must match number of columns of A", GSL_EBADLEN); } else { size_t i; for (i = 0; i < N; ++i) { const ATOMIC xi = FUNCTION (gsl_vector, get) (x, i); VIEW (gsl_vector, view) v = FUNCTION (gsl_matrix, column) (a, i); FUNCTION (gsl_vector, scale) (&v.vector, xi); } return GSL_SUCCESS; } } int FUNCTION(gsl_matrix, add_constant) (TYPE(gsl_matrix) * a, const ATOMIC x) { const size_t M = a->size1; const size_t N = a->size2; const size_t tda = a->tda; size_t i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { a->data[i * tda + j] += x; } } return GSL_SUCCESS; } int FUNCTION(gsl_matrix, add_diagonal) (TYPE(gsl_matrix) * a, const ATOMIC x) { const size_t M = a->size1; const size_t N = a->size2; const size_t tda = a->tda; const size_t loop_lim = ( M < N ? M : N ); size_t i; for (i = 0; i < loop_lim; i++) { a->data[i * tda + i] += x; } return GSL_SUCCESS; } gsl/matrix/gsl_matrix.h0000644000175000017500000000112613536674414013560 0ustar eddedd#ifndef __GSL_MATRIX_H__ #define __GSL_MATRIX_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif /* __GSL_MATRIX_H__ */ gsl/matrix/copy.c0000644000175000017500000000350013536675317012355 0ustar eddedd#include #include #include #include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/matrix/view.h0000644000175000017500000000024513536674414012362 0ustar eddedd#define NULL_VECTOR {0, 0, 0, 0, 0} #define NULL_VECTOR_VIEW {{0, 0, 0, 0, 0}} #define NULL_MATRIX {0, 0, 0, 0, 0, 0} #define NULL_MATRIX_VIEW {{0, 0, 0, 0, 0, 0}} gsl/matrix/init.c0000644000175000017500000000340513536674414012347 0ustar eddedd#include #include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/matrix/test_source.c0000664000175000017500000007055314057135461013746 0ustar eddedd/* matrix/test_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * Copyright (C) 2019 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ void FUNCTION (test, func) (const size_t M, const size_t N); void FUNCTION (test, ops) (const size_t M, const size_t N); void FUNCTION (test, trap) (const size_t M, const size_t N); void FUNCTION (test, text) (const size_t M, const size_t N); void FUNCTION (test, binary) (const size_t M, const size_t N); void FUNCTION (test, binary_noncontiguous) (const size_t M, const size_t N); #define TEST(expr,desc) gsl_test((expr), NAME(gsl_matrix) desc " M=%d, N=%d", M, N) void FUNCTION (test, func) (const size_t M, const size_t N) { TYPE (gsl_vector) * v; size_t i, j; size_t k = 0; TYPE (gsl_matrix) * m = FUNCTION (gsl_matrix, alloc) (M, N); gsl_test (m->data == 0, NAME (gsl_matrix) "_alloc returns valid pointer"); gsl_test (m->size1 != M, NAME (gsl_matrix) "_alloc returns valid size1"); gsl_test (m->size2 != N, NAME (gsl_matrix) "_alloc returns valid size2"); gsl_test (m->tda != N, NAME (gsl_matrix) "_alloc returns valid tda"); for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; FUNCTION (gsl_matrix, set) (m, i, j, (BASE) k); } } { status = 0; k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; if (m->data[i * N + j] != (BASE) k) status = 1; }; }; gsl_test (status, NAME (gsl_matrix) "_set writes into array"); } { status = 0; k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; if (FUNCTION (gsl_matrix, get) (m, i, j) != (BASE) k) status = 1; }; }; gsl_test (status, NAME (gsl_matrix) "_get reads from array"); } #if !defined(UNSIGNED) && !defined(BASE_CHAR) { ATOMIC norm1 = FUNCTION (gsl_matrix, norm1) (m); ATOMIC norm1_expected = N*M*(M+1)/2; status = (norm1 != norm1_expected); gsl_test (status, NAME (gsl_matrix) "_norm1"); } #endif FUNCTION (gsl_matrix, free) (m); /* free whatever is in m */ m = FUNCTION (gsl_matrix, calloc) (M, N); v = FUNCTION (gsl_vector, calloc) (N); { int status = (FUNCTION(gsl_matrix,isnull)(m) != 1); TEST (status, "_isnull" DESC " on calloc matrix"); status = (FUNCTION(gsl_matrix,ispos)(m) != 0); TEST (status, "_ispos" DESC " on calloc matrix"); status = (FUNCTION(gsl_matrix,isneg)(m) != 0); TEST (status, "_isneg" DESC " on calloc matrix"); status = (FUNCTION(gsl_matrix,isnonneg)(m) != 1); TEST (status, "_isnonneg" DESC " on calloc matrix"); } k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; FUNCTION (gsl_matrix, set) (m, i, j, (BASE) k); } } { status = 0; k = 0; for (i = 0; i < M; i++) { FUNCTION (gsl_matrix, get_row) (v, m, i); for (j = 0; j < N; j++) { k++; if (v->data[j] != (BASE) k) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_get_row extracts row"); } { BASE exp_max = FUNCTION(gsl_matrix, get) (m, 0, 0); BASE exp_min = FUNCTION(gsl_matrix, get) (m, 0, 0); size_t exp_imax = 0, exp_jmax = 0, exp_imin = 0, exp_jmin = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE k = FUNCTION(gsl_matrix, get) (m, i, j); if (k > exp_max) { exp_max = FUNCTION(gsl_matrix, get) (m, i, j); exp_imax = i; exp_jmax = j; } if (k < exp_min) { exp_min = FUNCTION(gsl_matrix, get) (m, i, j); exp_imin = i; exp_jmin = j; } } } { BASE max = FUNCTION(gsl_matrix, max) (m) ; gsl_test (max != exp_max, NAME(gsl_matrix) "_max returns correct maximum value"); } { BASE min = FUNCTION(gsl_matrix, min) (m) ; gsl_test (min != exp_min, NAME(gsl_matrix) "_min returns correct minimum value"); } { BASE min, max; FUNCTION(gsl_matrix, minmax) (m, &min, &max); gsl_test (max != exp_max, NAME(gsl_matrix) "_minmax returns correct maximum value"); gsl_test (min != exp_min, NAME(gsl_matrix) "_minmax returns correct minimum value"); } { size_t imax, jmax; FUNCTION(gsl_matrix, max_index) (m, &imax, &jmax) ; gsl_test (imax != exp_imax, NAME(gsl_matrix) "_max_index returns correct maximum i"); gsl_test (jmax != exp_jmax, NAME(gsl_matrix) "_max_index returns correct maximum j"); } { size_t imin, jmin; FUNCTION(gsl_matrix, min_index) (m, &imin, &jmin) ; gsl_test (imin != exp_imin, NAME(gsl_matrix) "_min_index returns correct minimum i"); gsl_test (jmin != exp_jmin, NAME(gsl_matrix) "_min_index returns correct minimum j"); } { size_t imin, jmin, imax, jmax; FUNCTION(gsl_matrix, minmax_index) (m, &imin, &jmin, &imax, &jmax); gsl_test (imax != exp_imax, NAME(gsl_matrix) "_minmax_index returns correct maximum i"); gsl_test (jmax != exp_jmax, NAME(gsl_matrix) "_minmax_index returns correct maximum j"); gsl_test (imin != exp_imin, NAME(gsl_matrix) "_minmax_index returns correct minimum i"); gsl_test (jmin != exp_jmin, NAME(gsl_matrix) "_minmax_index returns correct minimum j"); } #if FP FUNCTION(gsl_matrix,set)(m, 2, 3, GSL_NAN); exp_min = GSL_NAN; exp_max = GSL_NAN; exp_imin = 2; exp_jmin = 3; exp_imax = 2; exp_jmax = 3; { BASE max = FUNCTION(gsl_matrix, max) (m) ; gsl_test_abs (max,exp_max, 0, NAME(gsl_matrix) "_max returns correct maximum value for NaN"); } { BASE min = FUNCTION(gsl_matrix, min) (m) ; gsl_test_abs (min, exp_min, 0, NAME(gsl_matrix) "_min returns correct minimum value for NaN"); } { BASE min, max; FUNCTION(gsl_matrix, minmax) (m, &min, &max); gsl_test_abs (max, exp_max, 0, NAME(gsl_matrix) "_minmax returns correct maximum value for NaN"); gsl_test_abs (min, exp_min, 0, NAME(gsl_matrix) "_minmax returns correct minimum value for NaN"); } { size_t imax, jmax; FUNCTION(gsl_matrix, max_index) (m, &imax, &jmax) ; gsl_test (imax != exp_imax, NAME(gsl_matrix) "_max_index returns correct maximum i for NaN"); gsl_test (jmax != exp_jmax, NAME(gsl_matrix) "_max_index returns correct maximum j for NaN"); } { size_t imin, jmin; FUNCTION(gsl_matrix, min_index) (m, &imin, &jmin) ; gsl_test (imin != exp_imin, NAME(gsl_matrix) "_min_index returns correct minimum i for NaN"); gsl_test (jmin != exp_jmin, NAME(gsl_matrix) "_min_index returns correct minimum j for NaN"); } { size_t imin, jmin, imax, jmax; FUNCTION(gsl_matrix, minmax_index) (m, &imin, &jmin, &imax, &jmax); gsl_test (imax != exp_imax, NAME(gsl_matrix) "_minmax_index returns correct maximum i for NaN"); gsl_test (jmax != exp_jmax, NAME(gsl_matrix) "_minmax_index returns correct maximum j for NaN"); gsl_test (imin != exp_imin, NAME(gsl_matrix) "_minmax_index returns correct minimum i for NaN"); gsl_test (jmin != exp_jmin, NAME(gsl_matrix) "_minmax_index returns correct minimum j for NaN"); } #endif } for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { FUNCTION (gsl_matrix, set) (m, i, j, (ATOMIC) 0); } } { status = (FUNCTION(gsl_matrix,isnull)(m) != 1); TEST (status, "_isnull" DESC " on null matrix") ; status = (FUNCTION(gsl_matrix,ispos)(m) != 0); TEST (status, "_ispos" DESC " on null matrix") ; status = (FUNCTION(gsl_matrix,isneg)(m) != 0); TEST (status, "_isneg" DESC " on null matrix") ; status = (FUNCTION(gsl_matrix,isnonneg)(m) != 1); TEST (status, "_isnonneg" DESC " on null matrix") ; } k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; FUNCTION (gsl_matrix, set) (m, i, j, (ATOMIC) (k % 10)); } } { status = (FUNCTION(gsl_matrix,isnull)(m) != 0); TEST (status, "_isnull" DESC " on non-negative matrix") ; status = (FUNCTION(gsl_matrix,ispos)(m) != 0); TEST (status, "_ispos" DESC " on non-negative matrix") ; status = (FUNCTION(gsl_matrix,isneg)(m) != 0); TEST (status, "_isneg" DESC " on non-negative matrix") ; status = (FUNCTION(gsl_matrix,isnonneg)(m) != 1); TEST (status, "_isnonneg" DESC " on non-negative matrix") ; } #ifndef UNSIGNED k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { ATOMIC mij = ((++k) % 10) - (ATOMIC) 5; FUNCTION (gsl_matrix, set) (m, i, j, mij); } } { status = (FUNCTION(gsl_matrix,isnull)(m) != 0); TEST (status, "_isnull" DESC " on mixed matrix") ; status = (FUNCTION(gsl_matrix,ispos)(m) != 0); TEST (status, "_ispos" DESC " on mixed matrix") ; status = (FUNCTION(gsl_matrix,isneg)(m) != 0); TEST (status, "_isneg" DESC " on mixed matrix") ; status = (FUNCTION(gsl_matrix,isnonneg)(m) != 0); TEST (status, "_isnonneg" DESC " on mixed matrix") ; } k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; FUNCTION (gsl_matrix, set) (m, i, j, -(ATOMIC) (k % 10)); } } { status = (FUNCTION(gsl_matrix,isnull)(m) != 0); TEST (status, "_isnull" DESC " on non-positive matrix") ; status = (FUNCTION(gsl_matrix,ispos)(m) != 0); TEST (status, "_ispos" DESC " on non-positive matrix") ; status = (FUNCTION(gsl_matrix,isneg)(m) != 0); TEST (status, "_isneg" DESC " on non-positive matrix") ; status = (FUNCTION(gsl_matrix,isnonneg)(m) != 0); TEST (status, "_isnonneg" DESC " on non-positive matrix") ; } #endif k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; FUNCTION (gsl_matrix, set) (m, i, j, (ATOMIC) (k % 10 + 1)); } } { status = (FUNCTION(gsl_matrix,isnull)(m) != 0); TEST (status, "_isnull" DESC " on positive matrix") ; status = (FUNCTION(gsl_matrix,ispos)(m) != 1); TEST (status, "_ispos" DESC " on positive matrix") ; status = (FUNCTION(gsl_matrix,isneg)(m) != 0); TEST (status, "_isneg" DESC " on positive matrix") ; status = (FUNCTION(gsl_matrix,isnonneg)(m) != 1); TEST (status, "_isnonneg" DESC " on positive matrix") ; } #if (!defined(UNSIGNED) && !defined(BASE_CHAR)) k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; FUNCTION (gsl_matrix, set) (m, i, j, -(ATOMIC) (k % 10 + 1)); } } { status = (FUNCTION(gsl_matrix,isnull)(m) != 0); TEST (status, "_isnull" DESC " on negative matrix") ; status = (FUNCTION(gsl_matrix,ispos)(m) != 0); TEST (status, "_ispos" DESC " on negative matrix") ; status = (FUNCTION(gsl_matrix,isneg)(m) != 1); TEST (status, "_isneg" DESC " on negative matrix") ; status = (FUNCTION(gsl_matrix,isnonneg)(m) != 0); TEST (status, "_isnonneg" DESC " on negative matrix") ; } #endif FUNCTION (gsl_matrix, free) (m); FUNCTION (gsl_vector, free) (v); } void FUNCTION (test, ops) (const size_t M, const size_t N) { size_t i, j; TYPE (gsl_matrix) * a = FUNCTION (gsl_matrix, calloc) (M, N); TYPE (gsl_matrix) * b = FUNCTION (gsl_matrix, calloc) (M, N); TYPE (gsl_matrix) * c = FUNCTION (gsl_matrix, calloc) (N, M); TYPE (gsl_matrix) * m = FUNCTION (gsl_matrix, alloc) (M, N); for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { FUNCTION (gsl_matrix, set) (a, i, j, (BASE)(3 + i + 5 * j)); FUNCTION (gsl_matrix, set) (b, i, j, (BASE)(3 + 2 * i + 4 * j)); } } { int status = (FUNCTION(gsl_matrix,equal) (a,b) != 0); gsl_test (status, NAME (gsl_matrix) "_equal matrix unequal"); } FUNCTION (gsl_matrix, memcpy) (m, a); { int status = (FUNCTION(gsl_matrix,equal) (a,m) != 1); gsl_test (status, NAME (gsl_matrix) "_equal matrix equal"); } FUNCTION (gsl_matrix, add) (m, b); { int status = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE r = FUNCTION(gsl_matrix,get) (m,i,j); BASE x = FUNCTION(gsl_matrix,get) (a,i,j); BASE y = FUNCTION(gsl_matrix,get) (b,i,j); BASE z = x + y; if (r != z) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_add matrix addition"); } FUNCTION(gsl_matrix, memcpy) (m, a); FUNCTION(gsl_matrix, sub) (m, b); { int status = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE r = FUNCTION(gsl_matrix,get) (m,i,j); BASE x = FUNCTION(gsl_matrix,get) (a,i,j); BASE y = FUNCTION(gsl_matrix,get) (b,i,j); BASE z = x - y; if (r != z) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_sub matrix subtraction"); } FUNCTION(gsl_matrix, memcpy) (m, a); FUNCTION(gsl_matrix, mul_elements) (m, b); { int status = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE r = FUNCTION(gsl_matrix,get) (m,i,j); BASE x = FUNCTION(gsl_matrix,get) (a,i,j); BASE y = FUNCTION(gsl_matrix,get) (b,i,j); BASE z = x * y; if (r != z) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_mul_elements multiplication"); } FUNCTION(gsl_matrix, memcpy) (m, a); FUNCTION(gsl_matrix, div_elements) (m, b); { int status = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE r = FUNCTION(gsl_matrix,get) (m,i,j); BASE x = FUNCTION(gsl_matrix,get) (a,i,j); BASE y = FUNCTION(gsl_matrix,get) (b,i,j); BASE z = x / y; if (fabs(r - z) > 2 * GSL_FLT_EPSILON * fabs(z)) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_div_elements division"); } FUNCTION(gsl_matrix, memcpy) (m, a); FUNCTION(gsl_matrix, scale) (m, (ATOMIC) 2); { int status = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE r = FUNCTION(gsl_matrix,get) (m,i,j); BASE x = FUNCTION(gsl_matrix,get) (a,i,j); if (r != (ATOMIC)(2*x)) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_scale"); } FUNCTION(gsl_matrix, memcpy) (m, a); { int status = 0; TYPE (gsl_vector) * v = FUNCTION (gsl_vector, alloc) (M); for (i = 0; i < M; i++) FUNCTION (gsl_vector, set) (v, i, (ATOMIC) (i + 1)); FUNCTION (gsl_matrix, scale_rows) (m, v); for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE r = FUNCTION(gsl_matrix,get) (m,i,j); BASE x = FUNCTION(gsl_matrix,get) (a,i,j); if (r != (ATOMIC)((i+1)*x)) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_scale_rows[%zu,%zu]", M, N); FUNCTION (gsl_vector, free) (v); } FUNCTION(gsl_matrix, memcpy) (m, a); { int status = 0; TYPE (gsl_vector) * v = FUNCTION (gsl_vector, alloc) (N); for (i = 0; i < N; i++) FUNCTION (gsl_vector, set) (v, i, (ATOMIC) (i + 1)); FUNCTION (gsl_matrix, scale_columns) (m, v); for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE r = FUNCTION(gsl_matrix,get) (m,i,j); BASE x = FUNCTION(gsl_matrix,get) (a,i,j); if (r != (ATOMIC)((j+1)*x)) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_scale_columns[%zu,%zu]", M, N); FUNCTION (gsl_vector, free) (v); } FUNCTION(gsl_matrix, memcpy) (m, a); FUNCTION(gsl_matrix, add_constant) (m, (ATOMIC) 3); { int status = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE r = FUNCTION(gsl_matrix,get) (m,i,j); BASE x = FUNCTION(gsl_matrix,get) (a,i,j); BASE y = x + (ATOMIC) 3; if (fabs(r - y) > 2 * GSL_FLT_EPSILON * fabs(y)) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_add_constant"); } FUNCTION(gsl_matrix, memcpy) (m, a); FUNCTION(gsl_matrix, add_diagonal) (m, (ATOMIC) 5); { int status = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE r = FUNCTION(gsl_matrix,get) (m,i,j); BASE x = FUNCTION(gsl_matrix,get) (a,i,j); BASE y = (i == j) ? (x + (ATOMIC) 5) : x; if (fabs(r - y) > 2 * GSL_FLT_EPSILON * fabs(y)) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_add_diagonal"); } FUNCTION(gsl_matrix, swap) (a, b); { int status = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE x = FUNCTION(gsl_matrix,get) (a,i,j); BASE y = FUNCTION(gsl_matrix,get) (b,i,j); if (y != (BASE)(3 + i + 5 * j) || x != (BASE)(3 + 2 * i + 4 * j)) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_swap"); } FUNCTION (gsl_matrix, transpose_memcpy) (c, a); { int status = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { BASE aij = FUNCTION(gsl_matrix,get) (a,i,j); BASE cji = FUNCTION(gsl_matrix,get) (c,j,i); if (aij != cji) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_transpose_memcpy"); } FUNCTION (gsl_matrix, set_zero) (m); FUNCTION (gsl_matrix, tricpy) (CblasLower, CblasNonUnit, m, a); { int status = 0; for (i = 0; i < M; i++) { for (j = 0; j < GSL_MIN(i + 1, N); j++) { BASE r = FUNCTION(gsl_matrix,get) (m,i,j); BASE x = FUNCTION(gsl_matrix,get) (a,i,j); if (r != x) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_tricpy CblasLower CblasNonUnit"); } FUNCTION (gsl_matrix, set_zero) (m); FUNCTION (gsl_matrix, tricpy) (CblasLower, CblasUnit, m, b); { int status = 0; for (i = 0; i < M; i++) { for (j = 0; j < GSL_MIN(i, N); j++) { BASE r = FUNCTION(gsl_matrix,get) (m,i,j); BASE x = FUNCTION(gsl_matrix,get) (b,i,j); if (r != x) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_tricpy CblasLower CblasUnit"); } FUNCTION (gsl_matrix, set_zero) (m); FUNCTION (gsl_matrix, tricpy) (CblasUpper, CblasNonUnit, m, a); { int status = 0; for (i = 0; i < M; i++) { for (j = i; j < N; j++) { BASE r = FUNCTION(gsl_matrix,get) (m,i,j); BASE x = FUNCTION(gsl_matrix,get) (a,i,j); if (r != x) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_tricpy CblasUpper CblasNonUnit"); } FUNCTION (gsl_matrix, set_zero) (m); FUNCTION (gsl_matrix, tricpy) (CblasUpper, CblasUnit, m, b); { int status = 0; for (i = 0; i < M; i++) { for (j = i + 1; j < N; j++) { BASE r = FUNCTION(gsl_matrix,get) (m,i,j); BASE x = FUNCTION(gsl_matrix,get) (b,i,j); if (r != x) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_tricpy CblasUpper CblasUnit"); } FUNCTION (gsl_matrix, set_zero) (c); FUNCTION (gsl_matrix, transpose_tricpy) (CblasLower, CblasUnit, c, a); { int status = 0; for (i = 0; i < GSL_MIN(M, N); i++) { for (j = 0; j < i; j++) { BASE aij = FUNCTION(gsl_matrix,get) (a,i,j); BASE cji = FUNCTION(gsl_matrix,get) (c,j,i); if (aij != cji) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_transpose_tricpy CblasLower CblasUnit"); } FUNCTION (gsl_matrix, set_zero) (c); FUNCTION (gsl_matrix, transpose_tricpy) (CblasLower, CblasNonUnit, c, a); { int status = 0; for (i = 0; i < GSL_MIN(M, N); i++) { for (j = 0; j <= i; j++) { BASE aij = FUNCTION(gsl_matrix,get) (a,i,j); BASE cji = FUNCTION(gsl_matrix,get) (c,j,i); if (aij != cji) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_transpose_tricpy CblasLower CblasNonUnit"); } FUNCTION (gsl_matrix, set_zero) (c); FUNCTION (gsl_matrix, transpose_tricpy) (CblasUpper, CblasUnit, c, a); { int status = 0; for (i = 0; i < GSL_MIN(M, N); i++) { for (j = i + 1; j < GSL_MIN(M, N); j++) { BASE aij = FUNCTION(gsl_matrix,get) (a,i,j); BASE cji = FUNCTION(gsl_matrix,get) (c,j,i); if (aij != cji) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_transpose_tricpy CblasUpper CblasUnit"); } FUNCTION (gsl_matrix, set_zero) (c); FUNCTION (gsl_matrix, transpose_tricpy) (CblasUpper, CblasNonUnit, c, a); { int status = 0; for (i = 0; i < GSL_MIN(M, N); i++) { for (j = i; j < GSL_MIN(M, N); j++) { BASE aij = FUNCTION(gsl_matrix,get) (a,i,j); BASE cji = FUNCTION(gsl_matrix,get) (c,j,i); if (aij != cji) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_transpose_tricpy CblasUpper CblasNonUnit"); } FUNCTION(gsl_matrix, free) (a); FUNCTION(gsl_matrix, free) (b); FUNCTION(gsl_matrix, free) (c); FUNCTION(gsl_matrix, free) (m); } #if !(USES_LONGDOUBLE && !HAVE_PRINTF_LONGDOUBLE) void FUNCTION (test, text) (const size_t M, const size_t N) { TYPE (gsl_matrix) * m = FUNCTION (gsl_matrix, alloc) (M, N); size_t i, j, k; #ifdef NO_INLINE char filename[] = "test_static.dat"; #else char filename[] = "test.dat"; #endif { /* write file */ FILE *f = fopen(filename, "w"); k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; FUNCTION (gsl_matrix, set) (m, i, j, (BASE) k); } } FUNCTION (gsl_matrix, fprintf) (f, m, OUT_FORMAT); fclose(f); } /* read file */ { FILE *f = fopen(filename, "r"); TYPE (gsl_matrix) * mm = FUNCTION (gsl_matrix, alloc) (M, N); status = 0; FUNCTION (gsl_matrix, fscanf) (f, mm); k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; if (mm->data[i * N + j] != (BASE) k) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_fprintf and fscanf"); FUNCTION (gsl_matrix, free) (mm); fclose (f); } FUNCTION (gsl_matrix, free) (m); } #endif void FUNCTION (test, binary) (const size_t M, const size_t N) { TYPE (gsl_matrix) * m = FUNCTION (gsl_matrix, calloc) (M, N); size_t i, j, k; #ifdef NO_INLINE char filename[] = "test_static.dat"; #else char filename[] = "test.dat"; #endif /* write file */ { FILE *f = fopen(filename, "wb"); k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; FUNCTION (gsl_matrix, set) (m, i, j, (BASE) k); } } FUNCTION (gsl_matrix, fwrite) (f, m); fclose(f); } /* read file */ { FILE *f = fopen(filename, "rb"); TYPE (gsl_matrix) * mm = FUNCTION (gsl_matrix, alloc) (M, N); status = 0; FUNCTION (gsl_matrix, fread) (f, mm); k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; if (mm->data[i * N + j] != (BASE) k) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_write and read"); FUNCTION (gsl_matrix, free) (mm); fclose (f); } FUNCTION (gsl_matrix, free) (m); } void FUNCTION (test, binary_noncontiguous) (const size_t M, const size_t N) { TYPE (gsl_matrix) * l = FUNCTION (gsl_matrix, calloc) (M+1, N+1); VIEW (gsl_matrix, view) m = FUNCTION (gsl_matrix, submatrix) (l, 0, 0, M, N); size_t i, j, k; #ifdef NO_INLINE char filename[] = "test_static.dat"; #else char filename[] = "test.dat"; #endif /* write file */ { FILE *f = fopen(filename, "wb"); k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; FUNCTION (gsl_matrix, set) (&m.matrix, i, j, (BASE) k); } } FUNCTION (gsl_matrix, fwrite) (f, &m.matrix); fclose(f); } /* read file */ { FILE *f = fopen(filename, "rb"); TYPE (gsl_matrix) * ll = FUNCTION (gsl_matrix, alloc) (M+1, N+1); VIEW (gsl_matrix, view) mm = FUNCTION (gsl_matrix, submatrix) (ll, 0, 0, M, N); status = 0; FUNCTION (gsl_matrix, fread) (f, &mm.matrix); k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; if (FUNCTION (gsl_matrix, get) (&mm.matrix, i, j) != (BASE) k) status = 1; } } gsl_test (status, NAME (gsl_matrix) "_write and read (noncontiguous)"); FUNCTION (gsl_matrix, free) (ll); fclose (f); } FUNCTION (gsl_matrix, free) (l); } void FUNCTION (test, trap) (const size_t M, const size_t N) { TYPE (gsl_matrix) * m = FUNCTION (gsl_matrix, alloc) (M, N); size_t i = 0, j = 0; double x; status = 0; FUNCTION (gsl_matrix, set) (m, M + 1, 0, (BASE) 1.2); gsl_test (!status, NAME (gsl_matrix) "_set traps 1st index above upper bound"); status = 0; FUNCTION (gsl_matrix, set) (m, 0, N + 1, (BASE) 1.2); gsl_test (!status, NAME (gsl_matrix) "_set traps 2nd index above upper bound"); status = 0; FUNCTION (gsl_matrix, set) (m, M, 0, (BASE) 1.2); gsl_test (!status, NAME (gsl_matrix) "_set traps 1st index at upper bound"); status = 0; FUNCTION (gsl_matrix, set) (m, 0, N, (BASE) 1.2); gsl_test (!status, NAME (gsl_matrix) "_set traps 2nd index at upper bound"); status = 0; x = FUNCTION (gsl_matrix, get) (m, i - 1, 0); gsl_test (!status, NAME (gsl_matrix) "_get traps 1st index below lower bound"); gsl_test (x != 0, NAME (gsl_matrix) "_get returns zero for 1st index below lower bound"); status = 0; x = FUNCTION (gsl_matrix, get) (m, 0, j - 1); gsl_test (!status, NAME (gsl_matrix) "_get traps 2nd index below lower bound"); gsl_test (x != 0, NAME (gsl_matrix) "_get returns zero for 2nd index below lower bound"); status = 0; x = FUNCTION (gsl_matrix, get) (m, M + 1, 0); gsl_test (!status, NAME (gsl_matrix) "_get traps 1st index above upper bound"); gsl_test (x != 0, NAME (gsl_matrix) "_get returns zero for 1st index above upper bound"); status = 0; x = FUNCTION (gsl_matrix, get) (m, 0, N + 1); gsl_test (!status, NAME (gsl_matrix) "_get traps 2nd index above upper bound"); gsl_test (x != 0, NAME (gsl_matrix) "_get returns zero for 2nd index above upper bound"); status = 0; x = FUNCTION (gsl_matrix, get) (m, M, 0); gsl_test (!status, NAME (gsl_matrix) "_get traps 1st index at upper bound"); gsl_test (x != 0, NAME (gsl_matrix) "_get returns zero for 1st index at upper bound"); status = 0; x = FUNCTION (gsl_matrix, get) (m, 0, N); gsl_test (!status, NAME (gsl_matrix) "_get traps 2nd index at upper bound"); gsl_test (x != 0, NAME (gsl_matrix) "_get returns zero for 2nd index at upper bound"); FUNCTION (gsl_matrix, free) (m); } gsl/matrix/swap_complex_source.c0000664000175000017500000000315014057135461015455 0ustar eddedd/* matrix/swap_complex_source.c * * Copyright (C) 2020 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION (gsl_matrix, conjtrans_memcpy) (TYPE (gsl_matrix) * dest, const TYPE (gsl_matrix) * src) { const size_t src_size1 = src->size1; const size_t src_size2 = src->size2; const size_t dest_size1 = dest->size1; const size_t dest_size2 = dest->size2; size_t i; if (dest_size2 != src_size1 || dest_size1 != src_size2) { GSL_ERROR ("dimensions of dest matrix must be transpose of src matrix", GSL_EBADLEN); } for (i = 0; i < dest_size1; i++) { size_t j; for (j = 0 ; j < dest_size2; j++) { size_t e1 = (i * dest->tda + j) * 2; size_t e2 = (j * src->tda + i) * 2; dest->data[e1] = src->data[e2]; dest->data[e1 + 1] = -src->data[e2 + 1]; } } return GSL_SUCCESS; } gsl/matrix/TODO0000644000175000017500000000055413536674414011732 0ustar eddedd# -*- org -*- #+CATEGORY: matrix * Tests for subrowcol * Pretty print function * Clean up the tests. * Run tests where matrix tda != size2, note that tda is a physical dimension and size2 is the number of columns in the matrix. This will probably find a lot of bugs in the matrix logic. * Matrix norms that can be calculated analytically, e.g. Frobenius, etc gsl/matrix/submatrix_source.c0000644000175000017500000000347313536674414015007 0ustar eddedd/* matrix/submatrix_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ QUALIFIED_VIEW(_gsl_matrix,view) FUNCTION (gsl_matrix, submatrix) (QUALIFIED_TYPE(gsl_matrix) * m, const size_t i, const size_t j, const size_t n1, const size_t n2) { QUALIFIED_VIEW(_gsl_matrix,view) view = NULL_MATRIX_VIEW; if (i >= m->size1) { GSL_ERROR_VAL ("row index is out of range", GSL_EINVAL, view); } else if (j >= m->size2) { GSL_ERROR_VAL ("column index is out of range", GSL_EINVAL, view); } else if (i + n1 > m->size1) { GSL_ERROR_VAL ("first dimension overflows matrix", GSL_EINVAL, view); } else if (j + n2 > m->size2) { GSL_ERROR_VAL ("second dimension overflows matrix", GSL_EINVAL, view); } { TYPE(gsl_matrix) s = NULL_MATRIX; s.data = m->data + MULTIPLICITY * (i * m->tda + j); s.size1 = n1; s.size2 = n2; s.tda = m->tda; s.block = m->block; s.owner = 0; view.matrix = s; return view; } } gsl/matrix/prop_source.c0000664000175000017500000001077114057135461013743 0ustar eddedd/* matrix/prop_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION (gsl_matrix, equal) (const TYPE (gsl_matrix) * a, const TYPE (gsl_matrix) * b) { const size_t M = a->size1; const size_t N = a->size2; if (b->size1 != M || b->size2 != N) { GSL_ERROR_VAL ("matrices must have same dimensions", GSL_EBADLEN, 0); } else { const size_t tda_a = a->tda; const size_t tda_b = b->tda; size_t i, j, k; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { for (k = 0; k < MULTIPLICITY; k++) { if (a->data[(i * tda_a + j) * MULTIPLICITY + k] != b->data[(i * tda_b + j) * MULTIPLICITY + k]) { return 0; } } } } } return 1; } int FUNCTION (gsl_matrix, isnull) (const TYPE (gsl_matrix) * m) { const size_t size1 = m->size1; const size_t size2 = m->size2; const size_t tda = m->tda ; size_t i, j, k; for (i = 0; i < size1 ; i++) { for (j = 0; j < size2; j++) { for (k = 0; k < MULTIPLICITY; k++) { if (m->data[(i * tda + j) * MULTIPLICITY + k] != 0.0) { return 0; } } } } return 1; } int FUNCTION (gsl_matrix, ispos) (const TYPE (gsl_matrix) * m) { const size_t size1 = m->size1; const size_t size2 = m->size2; const size_t tda = m->tda ; size_t i, j, k; for (i = 0; i < size1 ; i++) { for (j = 0; j < size2; j++) { for (k = 0; k < MULTIPLICITY; k++) { if (m->data[(i * tda + j) * MULTIPLICITY + k] <= 0.0) { return 0; } } } } return 1; } int FUNCTION (gsl_matrix, isneg) (const TYPE (gsl_matrix) * m) { const size_t size1 = m->size1; const size_t size2 = m->size2; const size_t tda = m->tda ; size_t i, j, k; for (i = 0; i < size1 ; i++) { for (j = 0; j < size2; j++) { for (k = 0; k < MULTIPLICITY; k++) { if (m->data[(i * tda + j) * MULTIPLICITY + k] >= 0.0) { return 0; } } } } return 1; } int FUNCTION (gsl_matrix, isnonneg) (const TYPE (gsl_matrix) * m) { const size_t size1 = m->size1; const size_t size2 = m->size2; const size_t tda = m->tda ; size_t i, j, k; for (i = 0; i < size1 ; i++) { for (j = 0; j < size2; j++) { for (k = 0; k < MULTIPLICITY; k++) { if (m->data[(i * tda + j) * MULTIPLICITY + k] < 0.0) { return 0; } } } } return 1; } #if !defined(UNSIGNED) && !defined(BASE_GSL_COMPLEX) && !defined(BASE_GSL_COMPLEX_FLOAT) && !defined(BASE_GSL_COMPLEX_LONG) ATOMIC FUNCTION (gsl_matrix, norm1) (const TYPE (gsl_matrix) * m) { ATOMIC value = (ATOMIC) 0; size_t j; for (j = 0; j < m->size2; ++j) { VIEW (gsl_vector, const_view) mj = FUNCTION (gsl_matrix, const_column) (m, j); ATOMIC sum; #if defined(BASE_DOUBLE) sum = gsl_blas_dasum(&mj.vector); #elif defined(BASE_FLOAT) sum = gsl_blas_sasum(&mj.vector); #else { size_t i; sum = (ATOMIC) 0; for (i = 0; i < m->size1; ++i) { ATOMIC mij = FUNCTION (gsl_vector, get) (&mj.vector, i); if (mij >= (ATOMIC) 0) sum += mij; else sum += -mij; } } #endif if (sum > value) value = sum; } return value; } #endif gsl/matrix/gsl_matrix_int.h0000664000175000017500000003005014057135461014423 0ustar eddedd/* matrix/gsl_matrix_int.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MATRIX_INT_H__ #define __GSL_MATRIX_INT_H__ #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size1; size_t size2; size_t tda; int * data; gsl_block_int * block; int owner; } gsl_matrix_int; typedef struct { gsl_matrix_int matrix; } _gsl_matrix_int_view; typedef _gsl_matrix_int_view gsl_matrix_int_view; typedef struct { gsl_matrix_int matrix; } _gsl_matrix_int_const_view; typedef const _gsl_matrix_int_const_view gsl_matrix_int_const_view; /* Allocation */ gsl_matrix_int * gsl_matrix_int_alloc (const size_t n1, const size_t n2); gsl_matrix_int * gsl_matrix_int_calloc (const size_t n1, const size_t n2); gsl_matrix_int * gsl_matrix_int_alloc_from_block (gsl_block_int * b, const size_t offset, const size_t n1, const size_t n2, const size_t d2); gsl_matrix_int * gsl_matrix_int_alloc_from_matrix (gsl_matrix_int * m, const size_t k1, const size_t k2, const size_t n1, const size_t n2); gsl_vector_int * gsl_vector_int_alloc_row_from_matrix (gsl_matrix_int * m, const size_t i); gsl_vector_int * gsl_vector_int_alloc_col_from_matrix (gsl_matrix_int * m, const size_t j); void gsl_matrix_int_free (gsl_matrix_int * m); /* Views */ _gsl_matrix_int_view gsl_matrix_int_submatrix (gsl_matrix_int * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_int_view gsl_matrix_int_row (gsl_matrix_int * m, const size_t i); _gsl_vector_int_view gsl_matrix_int_column (gsl_matrix_int * m, const size_t j); _gsl_vector_int_view gsl_matrix_int_diagonal (gsl_matrix_int * m); _gsl_vector_int_view gsl_matrix_int_subdiagonal (gsl_matrix_int * m, const size_t k); _gsl_vector_int_view gsl_matrix_int_superdiagonal (gsl_matrix_int * m, const size_t k); _gsl_vector_int_view gsl_matrix_int_subrow (gsl_matrix_int * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_int_view gsl_matrix_int_subcolumn (gsl_matrix_int * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_int_view gsl_matrix_int_view_array (int * base, const size_t n1, const size_t n2); _gsl_matrix_int_view gsl_matrix_int_view_array_with_tda (int * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_int_view gsl_matrix_int_view_vector (gsl_vector_int * v, const size_t n1, const size_t n2); _gsl_matrix_int_view gsl_matrix_int_view_vector_with_tda (gsl_vector_int * v, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_int_const_view gsl_matrix_int_const_submatrix (const gsl_matrix_int * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_int_const_view gsl_matrix_int_const_row (const gsl_matrix_int * m, const size_t i); _gsl_vector_int_const_view gsl_matrix_int_const_column (const gsl_matrix_int * m, const size_t j); _gsl_vector_int_const_view gsl_matrix_int_const_diagonal (const gsl_matrix_int * m); _gsl_vector_int_const_view gsl_matrix_int_const_subdiagonal (const gsl_matrix_int * m, const size_t k); _gsl_vector_int_const_view gsl_matrix_int_const_superdiagonal (const gsl_matrix_int * m, const size_t k); _gsl_vector_int_const_view gsl_matrix_int_const_subrow (const gsl_matrix_int * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_int_const_view gsl_matrix_int_const_subcolumn (const gsl_matrix_int * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_int_const_view gsl_matrix_int_const_view_array (const int * base, const size_t n1, const size_t n2); _gsl_matrix_int_const_view gsl_matrix_int_const_view_array_with_tda (const int * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_int_const_view gsl_matrix_int_const_view_vector (const gsl_vector_int * v, const size_t n1, const size_t n2); _gsl_matrix_int_const_view gsl_matrix_int_const_view_vector_with_tda (const gsl_vector_int * v, const size_t n1, const size_t n2, const size_t tda); /* Operations */ void gsl_matrix_int_set_zero (gsl_matrix_int * m); void gsl_matrix_int_set_identity (gsl_matrix_int * m); void gsl_matrix_int_set_all (gsl_matrix_int * m, int x); int gsl_matrix_int_fread (FILE * stream, gsl_matrix_int * m) ; int gsl_matrix_int_fwrite (FILE * stream, const gsl_matrix_int * m) ; int gsl_matrix_int_fscanf (FILE * stream, gsl_matrix_int * m); int gsl_matrix_int_fprintf (FILE * stream, const gsl_matrix_int * m, const char * format); int gsl_matrix_int_memcpy(gsl_matrix_int * dest, const gsl_matrix_int * src); int gsl_matrix_int_swap(gsl_matrix_int * m1, gsl_matrix_int * m2); int gsl_matrix_int_tricpy(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix_int * dest, const gsl_matrix_int * src); int gsl_matrix_int_swap_rows(gsl_matrix_int * m, const size_t i, const size_t j); int gsl_matrix_int_swap_columns(gsl_matrix_int * m, const size_t i, const size_t j); int gsl_matrix_int_swap_rowcol(gsl_matrix_int * m, const size_t i, const size_t j); int gsl_matrix_int_transpose (gsl_matrix_int * m); int gsl_matrix_int_transpose_memcpy (gsl_matrix_int * dest, const gsl_matrix_int * src); int gsl_matrix_int_transpose_tricpy (CBLAS_UPLO_t Uplo_src, CBLAS_DIAG_t Diag, gsl_matrix_int * dest, const gsl_matrix_int * src); int gsl_matrix_int_max (const gsl_matrix_int * m); int gsl_matrix_int_min (const gsl_matrix_int * m); void gsl_matrix_int_minmax (const gsl_matrix_int * m, int * min_out, int * max_out); void gsl_matrix_int_max_index (const gsl_matrix_int * m, size_t * imax, size_t *jmax); void gsl_matrix_int_min_index (const gsl_matrix_int * m, size_t * imin, size_t *jmin); void gsl_matrix_int_minmax_index (const gsl_matrix_int * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax); int gsl_matrix_int_equal (const gsl_matrix_int * a, const gsl_matrix_int * b); int gsl_matrix_int_isnull (const gsl_matrix_int * m); int gsl_matrix_int_ispos (const gsl_matrix_int * m); int gsl_matrix_int_isneg (const gsl_matrix_int * m); int gsl_matrix_int_isnonneg (const gsl_matrix_int * m); int gsl_matrix_int_norm1 (const gsl_matrix_int * m); int gsl_matrix_int_add (gsl_matrix_int * a, const gsl_matrix_int * b); int gsl_matrix_int_sub (gsl_matrix_int * a, const gsl_matrix_int * b); int gsl_matrix_int_mul_elements (gsl_matrix_int * a, const gsl_matrix_int * b); int gsl_matrix_int_div_elements (gsl_matrix_int * a, const gsl_matrix_int * b); int gsl_matrix_int_scale (gsl_matrix_int * a, const int x); int gsl_matrix_int_scale_rows (gsl_matrix_int * a, const gsl_vector_int * x); int gsl_matrix_int_scale_columns (gsl_matrix_int * a, const gsl_vector_int * x); int gsl_matrix_int_add_constant (gsl_matrix_int * a, const int x); int gsl_matrix_int_add_diagonal (gsl_matrix_int * a, const int x); /***********************************************************************/ /* The functions below are obsolete */ /***********************************************************************/ int gsl_matrix_int_get_row(gsl_vector_int * v, const gsl_matrix_int * m, const size_t i); int gsl_matrix_int_get_col(gsl_vector_int * v, const gsl_matrix_int * m, const size_t j); int gsl_matrix_int_set_row(gsl_matrix_int * m, const size_t i, const gsl_vector_int * v); int gsl_matrix_int_set_col(gsl_matrix_int * m, const size_t j, const gsl_vector_int * v); /***********************************************************************/ /* inline functions if you are using GCC */ INLINE_DECL int gsl_matrix_int_get(const gsl_matrix_int * m, const size_t i, const size_t j); INLINE_DECL void gsl_matrix_int_set(gsl_matrix_int * m, const size_t i, const size_t j, const int x); INLINE_DECL int * gsl_matrix_int_ptr(gsl_matrix_int * m, const size_t i, const size_t j); INLINE_DECL const int * gsl_matrix_int_const_ptr(const gsl_matrix_int * m, const size_t i, const size_t j); #ifdef HAVE_INLINE INLINE_FUN int gsl_matrix_int_get(const gsl_matrix_int * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ; } else if (j >= m->size2) { GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ; } } #endif return m->data[i * m->tda + j] ; } INLINE_FUN void gsl_matrix_int_set(gsl_matrix_int * m, const size_t i, const size_t j, const int x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ; } } #endif m->data[i * m->tda + j] = x ; } INLINE_FUN int * gsl_matrix_int_ptr(gsl_matrix_int * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (int *) (m->data + (i * m->tda + j)) ; } INLINE_FUN const int * gsl_matrix_int_const_ptr(const gsl_matrix_int * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (const int *) (m->data + (i * m->tda + j)) ; } #endif __END_DECLS #endif /* __GSL_MATRIX_INT_H__ */ gsl/matrix/gsl_matrix_uchar.h0000664000175000017500000003130614057135461014740 0ustar eddedd/* matrix/gsl_matrix_uchar.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MATRIX_UCHAR_H__ #define __GSL_MATRIX_UCHAR_H__ #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size1; size_t size2; size_t tda; unsigned char * data; gsl_block_uchar * block; int owner; } gsl_matrix_uchar; typedef struct { gsl_matrix_uchar matrix; } _gsl_matrix_uchar_view; typedef _gsl_matrix_uchar_view gsl_matrix_uchar_view; typedef struct { gsl_matrix_uchar matrix; } _gsl_matrix_uchar_const_view; typedef const _gsl_matrix_uchar_const_view gsl_matrix_uchar_const_view; /* Allocation */ gsl_matrix_uchar * gsl_matrix_uchar_alloc (const size_t n1, const size_t n2); gsl_matrix_uchar * gsl_matrix_uchar_calloc (const size_t n1, const size_t n2); gsl_matrix_uchar * gsl_matrix_uchar_alloc_from_block (gsl_block_uchar * b, const size_t offset, const size_t n1, const size_t n2, const size_t d2); gsl_matrix_uchar * gsl_matrix_uchar_alloc_from_matrix (gsl_matrix_uchar * m, const size_t k1, const size_t k2, const size_t n1, const size_t n2); gsl_vector_uchar * gsl_vector_uchar_alloc_row_from_matrix (gsl_matrix_uchar * m, const size_t i); gsl_vector_uchar * gsl_vector_uchar_alloc_col_from_matrix (gsl_matrix_uchar * m, const size_t j); void gsl_matrix_uchar_free (gsl_matrix_uchar * m); /* Views */ _gsl_matrix_uchar_view gsl_matrix_uchar_submatrix (gsl_matrix_uchar * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_uchar_view gsl_matrix_uchar_row (gsl_matrix_uchar * m, const size_t i); _gsl_vector_uchar_view gsl_matrix_uchar_column (gsl_matrix_uchar * m, const size_t j); _gsl_vector_uchar_view gsl_matrix_uchar_diagonal (gsl_matrix_uchar * m); _gsl_vector_uchar_view gsl_matrix_uchar_subdiagonal (gsl_matrix_uchar * m, const size_t k); _gsl_vector_uchar_view gsl_matrix_uchar_superdiagonal (gsl_matrix_uchar * m, const size_t k); _gsl_vector_uchar_view gsl_matrix_uchar_subrow (gsl_matrix_uchar * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_uchar_view gsl_matrix_uchar_subcolumn (gsl_matrix_uchar * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_uchar_view gsl_matrix_uchar_view_array (unsigned char * base, const size_t n1, const size_t n2); _gsl_matrix_uchar_view gsl_matrix_uchar_view_array_with_tda (unsigned char * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_uchar_view gsl_matrix_uchar_view_vector (gsl_vector_uchar * v, const size_t n1, const size_t n2); _gsl_matrix_uchar_view gsl_matrix_uchar_view_vector_with_tda (gsl_vector_uchar * v, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_uchar_const_view gsl_matrix_uchar_const_submatrix (const gsl_matrix_uchar * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_uchar_const_view gsl_matrix_uchar_const_row (const gsl_matrix_uchar * m, const size_t i); _gsl_vector_uchar_const_view gsl_matrix_uchar_const_column (const gsl_matrix_uchar * m, const size_t j); _gsl_vector_uchar_const_view gsl_matrix_uchar_const_diagonal (const gsl_matrix_uchar * m); _gsl_vector_uchar_const_view gsl_matrix_uchar_const_subdiagonal (const gsl_matrix_uchar * m, const size_t k); _gsl_vector_uchar_const_view gsl_matrix_uchar_const_superdiagonal (const gsl_matrix_uchar * m, const size_t k); _gsl_vector_uchar_const_view gsl_matrix_uchar_const_subrow (const gsl_matrix_uchar * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_uchar_const_view gsl_matrix_uchar_const_subcolumn (const gsl_matrix_uchar * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_uchar_const_view gsl_matrix_uchar_const_view_array (const unsigned char * base, const size_t n1, const size_t n2); _gsl_matrix_uchar_const_view gsl_matrix_uchar_const_view_array_with_tda (const unsigned char * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_uchar_const_view gsl_matrix_uchar_const_view_vector (const gsl_vector_uchar * v, const size_t n1, const size_t n2); _gsl_matrix_uchar_const_view gsl_matrix_uchar_const_view_vector_with_tda (const gsl_vector_uchar * v, const size_t n1, const size_t n2, const size_t tda); /* Operations */ void gsl_matrix_uchar_set_zero (gsl_matrix_uchar * m); void gsl_matrix_uchar_set_identity (gsl_matrix_uchar * m); void gsl_matrix_uchar_set_all (gsl_matrix_uchar * m, unsigned char x); int gsl_matrix_uchar_fread (FILE * stream, gsl_matrix_uchar * m) ; int gsl_matrix_uchar_fwrite (FILE * stream, const gsl_matrix_uchar * m) ; int gsl_matrix_uchar_fscanf (FILE * stream, gsl_matrix_uchar * m); int gsl_matrix_uchar_fprintf (FILE * stream, const gsl_matrix_uchar * m, const char * format); int gsl_matrix_uchar_memcpy(gsl_matrix_uchar * dest, const gsl_matrix_uchar * src); int gsl_matrix_uchar_swap(gsl_matrix_uchar * m1, gsl_matrix_uchar * m2); int gsl_matrix_uchar_tricpy(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix_uchar * dest, const gsl_matrix_uchar * src); int gsl_matrix_uchar_swap_rows(gsl_matrix_uchar * m, const size_t i, const size_t j); int gsl_matrix_uchar_swap_columns(gsl_matrix_uchar * m, const size_t i, const size_t j); int gsl_matrix_uchar_swap_rowcol(gsl_matrix_uchar * m, const size_t i, const size_t j); int gsl_matrix_uchar_transpose (gsl_matrix_uchar * m); int gsl_matrix_uchar_transpose_memcpy (gsl_matrix_uchar * dest, const gsl_matrix_uchar * src); int gsl_matrix_uchar_transpose_tricpy (CBLAS_UPLO_t Uplo_src, CBLAS_DIAG_t Diag, gsl_matrix_uchar * dest, const gsl_matrix_uchar * src); unsigned char gsl_matrix_uchar_max (const gsl_matrix_uchar * m); unsigned char gsl_matrix_uchar_min (const gsl_matrix_uchar * m); void gsl_matrix_uchar_minmax (const gsl_matrix_uchar * m, unsigned char * min_out, unsigned char * max_out); void gsl_matrix_uchar_max_index (const gsl_matrix_uchar * m, size_t * imax, size_t *jmax); void gsl_matrix_uchar_min_index (const gsl_matrix_uchar * m, size_t * imin, size_t *jmin); void gsl_matrix_uchar_minmax_index (const gsl_matrix_uchar * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax); int gsl_matrix_uchar_equal (const gsl_matrix_uchar * a, const gsl_matrix_uchar * b); int gsl_matrix_uchar_isnull (const gsl_matrix_uchar * m); int gsl_matrix_uchar_ispos (const gsl_matrix_uchar * m); int gsl_matrix_uchar_isneg (const gsl_matrix_uchar * m); int gsl_matrix_uchar_isnonneg (const gsl_matrix_uchar * m); unsigned char gsl_matrix_uchar_norm1 (const gsl_matrix_uchar * m); int gsl_matrix_uchar_add (gsl_matrix_uchar * a, const gsl_matrix_uchar * b); int gsl_matrix_uchar_sub (gsl_matrix_uchar * a, const gsl_matrix_uchar * b); int gsl_matrix_uchar_mul_elements (gsl_matrix_uchar * a, const gsl_matrix_uchar * b); int gsl_matrix_uchar_div_elements (gsl_matrix_uchar * a, const gsl_matrix_uchar * b); int gsl_matrix_uchar_scale (gsl_matrix_uchar * a, const unsigned char x); int gsl_matrix_uchar_scale_rows (gsl_matrix_uchar * a, const gsl_vector_uchar * x); int gsl_matrix_uchar_scale_columns (gsl_matrix_uchar * a, const gsl_vector_uchar * x); int gsl_matrix_uchar_add_constant (gsl_matrix_uchar * a, const unsigned char x); int gsl_matrix_uchar_add_diagonal (gsl_matrix_uchar * a, const unsigned char x); /***********************************************************************/ /* The functions below are obsolete */ /***********************************************************************/ int gsl_matrix_uchar_get_row(gsl_vector_uchar * v, const gsl_matrix_uchar * m, const size_t i); int gsl_matrix_uchar_get_col(gsl_vector_uchar * v, const gsl_matrix_uchar * m, const size_t j); int gsl_matrix_uchar_set_row(gsl_matrix_uchar * m, const size_t i, const gsl_vector_uchar * v); int gsl_matrix_uchar_set_col(gsl_matrix_uchar * m, const size_t j, const gsl_vector_uchar * v); /***********************************************************************/ /* inline functions if you are using GCC */ INLINE_DECL unsigned char gsl_matrix_uchar_get(const gsl_matrix_uchar * m, const size_t i, const size_t j); INLINE_DECL void gsl_matrix_uchar_set(gsl_matrix_uchar * m, const size_t i, const size_t j, const unsigned char x); INLINE_DECL unsigned char * gsl_matrix_uchar_ptr(gsl_matrix_uchar * m, const size_t i, const size_t j); INLINE_DECL const unsigned char * gsl_matrix_uchar_const_ptr(const gsl_matrix_uchar * m, const size_t i, const size_t j); #ifdef HAVE_INLINE INLINE_FUN unsigned char gsl_matrix_uchar_get(const gsl_matrix_uchar * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ; } else if (j >= m->size2) { GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ; } } #endif return m->data[i * m->tda + j] ; } INLINE_FUN void gsl_matrix_uchar_set(gsl_matrix_uchar * m, const size_t i, const size_t j, const unsigned char x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ; } } #endif m->data[i * m->tda + j] = x ; } INLINE_FUN unsigned char * gsl_matrix_uchar_ptr(gsl_matrix_uchar * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (unsigned char *) (m->data + (i * m->tda + j)) ; } INLINE_FUN const unsigned char * gsl_matrix_uchar_const_ptr(const gsl_matrix_uchar * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (const unsigned char *) (m->data + (i * m->tda + j)) ; } #endif __END_DECLS #endif /* __GSL_MATRIX_UCHAR_H__ */ gsl/matrix/gsl_matrix_complex_long_double.h0000664000175000017500000003666714057135461017675 0ustar eddedd/* matrix/gsl_matrix_complex_long_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MATRIX_COMPLEX_LONG_DOUBLE_H__ #define __GSL_MATRIX_COMPLEX_LONG_DOUBLE_H__ #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size1; size_t size2; size_t tda; long double * data; gsl_block_complex_long_double * block; int owner; } gsl_matrix_complex_long_double ; typedef struct { gsl_matrix_complex_long_double matrix; } _gsl_matrix_complex_long_double_view; typedef _gsl_matrix_complex_long_double_view gsl_matrix_complex_long_double_view; typedef struct { gsl_matrix_complex_long_double matrix; } _gsl_matrix_complex_long_double_const_view; typedef const _gsl_matrix_complex_long_double_const_view gsl_matrix_complex_long_double_const_view; /* Allocation */ gsl_matrix_complex_long_double * gsl_matrix_complex_long_double_alloc (const size_t n1, const size_t n2); gsl_matrix_complex_long_double * gsl_matrix_complex_long_double_calloc (const size_t n1, const size_t n2); gsl_matrix_complex_long_double * gsl_matrix_complex_long_double_alloc_from_block (gsl_block_complex_long_double * b, const size_t offset, const size_t n1, const size_t n2, const size_t d2); gsl_matrix_complex_long_double * gsl_matrix_complex_long_double_alloc_from_matrix (gsl_matrix_complex_long_double * b, const size_t k1, const size_t k2, const size_t n1, const size_t n2); gsl_vector_complex_long_double * gsl_vector_complex_long_double_alloc_row_from_matrix (gsl_matrix_complex_long_double * m, const size_t i); gsl_vector_complex_long_double * gsl_vector_complex_long_double_alloc_col_from_matrix (gsl_matrix_complex_long_double * m, const size_t j); void gsl_matrix_complex_long_double_free (gsl_matrix_complex_long_double * m); /* Views */ _gsl_matrix_complex_long_double_view gsl_matrix_complex_long_double_submatrix (gsl_matrix_complex_long_double * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_complex_long_double_view gsl_matrix_complex_long_double_row (gsl_matrix_complex_long_double * m, const size_t i); _gsl_vector_complex_long_double_view gsl_matrix_complex_long_double_column (gsl_matrix_complex_long_double * m, const size_t j); _gsl_vector_complex_long_double_view gsl_matrix_complex_long_double_diagonal (gsl_matrix_complex_long_double * m); _gsl_vector_complex_long_double_view gsl_matrix_complex_long_double_subdiagonal (gsl_matrix_complex_long_double * m, const size_t k); _gsl_vector_complex_long_double_view gsl_matrix_complex_long_double_superdiagonal (gsl_matrix_complex_long_double * m, const size_t k); _gsl_vector_complex_long_double_view gsl_matrix_complex_long_double_subrow (gsl_matrix_complex_long_double * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_complex_long_double_view gsl_matrix_complex_long_double_subcolumn (gsl_matrix_complex_long_double * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_complex_long_double_view gsl_matrix_complex_long_double_view_array (long double * base, const size_t n1, const size_t n2); _gsl_matrix_complex_long_double_view gsl_matrix_complex_long_double_view_array_with_tda (long double * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_complex_long_double_view gsl_matrix_complex_long_double_view_vector (gsl_vector_complex_long_double * v, const size_t n1, const size_t n2); _gsl_matrix_complex_long_double_view gsl_matrix_complex_long_double_view_vector_with_tda (gsl_vector_complex_long_double * v, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_complex_long_double_const_view gsl_matrix_complex_long_double_const_submatrix (const gsl_matrix_complex_long_double * m, const size_t i, const size_t j, const size_t n1, const size_t n2); _gsl_vector_complex_long_double_const_view gsl_matrix_complex_long_double_const_row (const gsl_matrix_complex_long_double * m, const size_t i); _gsl_vector_complex_long_double_const_view gsl_matrix_complex_long_double_const_column (const gsl_matrix_complex_long_double * m, const size_t j); _gsl_vector_complex_long_double_const_view gsl_matrix_complex_long_double_const_diagonal (const gsl_matrix_complex_long_double * m); _gsl_vector_complex_long_double_const_view gsl_matrix_complex_long_double_const_subdiagonal (const gsl_matrix_complex_long_double * m, const size_t k); _gsl_vector_complex_long_double_const_view gsl_matrix_complex_long_double_const_superdiagonal (const gsl_matrix_complex_long_double * m, const size_t k); _gsl_vector_complex_long_double_const_view gsl_matrix_complex_long_double_const_subrow (const gsl_matrix_complex_long_double * m, const size_t i, const size_t offset, const size_t n); _gsl_vector_complex_long_double_const_view gsl_matrix_complex_long_double_const_subcolumn (const gsl_matrix_complex_long_double * m, const size_t j, const size_t offset, const size_t n); _gsl_matrix_complex_long_double_const_view gsl_matrix_complex_long_double_const_view_array (const long double * base, const size_t n1, const size_t n2); _gsl_matrix_complex_long_double_const_view gsl_matrix_complex_long_double_const_view_array_with_tda (const long double * base, const size_t n1, const size_t n2, const size_t tda); _gsl_matrix_complex_long_double_const_view gsl_matrix_complex_long_double_const_view_vector (const gsl_vector_complex_long_double * v, const size_t n1, const size_t n2); _gsl_matrix_complex_long_double_const_view gsl_matrix_complex_long_double_const_view_vector_with_tda (const gsl_vector_complex_long_double * v, const size_t n1, const size_t n2, const size_t tda); /* Operations */ void gsl_matrix_complex_long_double_set_zero (gsl_matrix_complex_long_double * m); void gsl_matrix_complex_long_double_set_identity (gsl_matrix_complex_long_double * m); void gsl_matrix_complex_long_double_set_all (gsl_matrix_complex_long_double * m, gsl_complex_long_double x); int gsl_matrix_complex_long_double_fread (FILE * stream, gsl_matrix_complex_long_double * m) ; int gsl_matrix_complex_long_double_fwrite (FILE * stream, const gsl_matrix_complex_long_double * m) ; int gsl_matrix_complex_long_double_fscanf (FILE * stream, gsl_matrix_complex_long_double * m); int gsl_matrix_complex_long_double_fprintf (FILE * stream, const gsl_matrix_complex_long_double * m, const char * format); int gsl_matrix_complex_long_double_memcpy(gsl_matrix_complex_long_double * dest, const gsl_matrix_complex_long_double * src); int gsl_matrix_complex_long_double_swap(gsl_matrix_complex_long_double * m1, gsl_matrix_complex_long_double * m2); int gsl_matrix_complex_long_double_tricpy(CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, gsl_matrix_complex_long_double * dest, const gsl_matrix_complex_long_double * src); int gsl_matrix_complex_long_double_swap_rows(gsl_matrix_complex_long_double * m, const size_t i, const size_t j); int gsl_matrix_complex_long_double_swap_columns(gsl_matrix_complex_long_double * m, const size_t i, const size_t j); int gsl_matrix_complex_long_double_swap_rowcol(gsl_matrix_complex_long_double * m, const size_t i, const size_t j); int gsl_matrix_complex_long_double_transpose (gsl_matrix_complex_long_double * m); int gsl_matrix_complex_long_double_transpose_memcpy (gsl_matrix_complex_long_double * dest, const gsl_matrix_complex_long_double * src); int gsl_matrix_complex_long_double_transpose_tricpy(CBLAS_UPLO_t Uplo_src, CBLAS_DIAG_t Diag, gsl_matrix_complex_long_double * dest, const gsl_matrix_complex_long_double * src); int gsl_matrix_complex_long_double_conjtrans_memcpy (gsl_matrix_complex_long_double * dest, const gsl_matrix_complex_long_double * src); int gsl_matrix_complex_long_double_equal (const gsl_matrix_complex_long_double * a, const gsl_matrix_complex_long_double * b); int gsl_matrix_complex_long_double_isnull (const gsl_matrix_complex_long_double * m); int gsl_matrix_complex_long_double_ispos (const gsl_matrix_complex_long_double * m); int gsl_matrix_complex_long_double_isneg (const gsl_matrix_complex_long_double * m); int gsl_matrix_complex_long_double_isnonneg (const gsl_matrix_complex_long_double * m); int gsl_matrix_complex_long_double_add (gsl_matrix_complex_long_double * a, const gsl_matrix_complex_long_double * b); int gsl_matrix_complex_long_double_sub (gsl_matrix_complex_long_double * a, const gsl_matrix_complex_long_double * b); int gsl_matrix_complex_long_double_mul_elements (gsl_matrix_complex_long_double * a, const gsl_matrix_complex_long_double * b); int gsl_matrix_complex_long_double_div_elements (gsl_matrix_complex_long_double * a, const gsl_matrix_complex_long_double * b); int gsl_matrix_complex_long_double_scale (gsl_matrix_complex_long_double * a, const gsl_complex_long_double x); int gsl_matrix_complex_long_double_scale_rows (gsl_matrix_complex_long_double * a, const gsl_vector_complex_long_double * x); int gsl_matrix_complex_long_double_scale_columns (gsl_matrix_complex_long_double * a, const gsl_vector_complex_long_double * x); int gsl_matrix_complex_long_double_add_constant (gsl_matrix_complex_long_double * a, const gsl_complex_long_double x); int gsl_matrix_complex_long_double_add_diagonal (gsl_matrix_complex_long_double * a, const gsl_complex_long_double x); /***********************************************************************/ /* The functions below are obsolete */ /***********************************************************************/ int gsl_matrix_complex_long_double_get_row(gsl_vector_complex_long_double * v, const gsl_matrix_complex_long_double * m, const size_t i); int gsl_matrix_complex_long_double_get_col(gsl_vector_complex_long_double * v, const gsl_matrix_complex_long_double * m, const size_t j); int gsl_matrix_complex_long_double_set_row(gsl_matrix_complex_long_double * m, const size_t i, const gsl_vector_complex_long_double * v); int gsl_matrix_complex_long_double_set_col(gsl_matrix_complex_long_double * m, const size_t j, const gsl_vector_complex_long_double * v); /***********************************************************************/ /* inline functions if you are using GCC */ INLINE_DECL gsl_complex_long_double gsl_matrix_complex_long_double_get(const gsl_matrix_complex_long_double * m, const size_t i, const size_t j); INLINE_DECL void gsl_matrix_complex_long_double_set(gsl_matrix_complex_long_double * m, const size_t i, const size_t j, const gsl_complex_long_double x); INLINE_DECL gsl_complex_long_double * gsl_matrix_complex_long_double_ptr(gsl_matrix_complex_long_double * m, const size_t i, const size_t j); INLINE_DECL const gsl_complex_long_double * gsl_matrix_complex_long_double_const_ptr(const gsl_matrix_complex_long_double * m, const size_t i, const size_t j); #ifdef HAVE_INLINE INLINE_FUN gsl_complex_long_double gsl_matrix_complex_long_double_get(const gsl_matrix_complex_long_double * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { gsl_complex_long_double zero = {{0,0}}; if (i >= m->size1) { GSL_ERROR_VAL("first index out of range", GSL_EINVAL, zero) ; } else if (j >= m->size2) { GSL_ERROR_VAL("second index out of range", GSL_EINVAL, zero) ; } } #endif return *(gsl_complex_long_double *)(m->data + 2*(i * m->tda + j)) ; } INLINE_FUN void gsl_matrix_complex_long_double_set(gsl_matrix_complex_long_double * m, const size_t i, const size_t j, const gsl_complex_long_double x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ; } } #endif *(gsl_complex_long_double *)(m->data + 2*(i * m->tda + j)) = x ; } INLINE_FUN gsl_complex_long_double * gsl_matrix_complex_long_double_ptr(gsl_matrix_complex_long_double * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (gsl_complex_long_double *)(m->data + 2*(i * m->tda + j)) ; } INLINE_FUN const gsl_complex_long_double * gsl_matrix_complex_long_double_const_ptr(const gsl_matrix_complex_long_double * m, const size_t i, const size_t j) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(1)) { if (i >= m->size1) { GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ; } else if (j >= m->size2) { GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ; } } #endif return (const gsl_complex_long_double *)(m->data + 2*(i * m->tda + j)) ; } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_MATRIX_COMPLEX_LONG_DOUBLE_H__ */ gsl/matrix/oper.c0000644000175000017500000000346013536674414012352 0ustar eddedd#include #include #include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "oper_complex_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "oper_complex_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "oper_complex_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/matrix/swap.c0000664000175000017500000000364414057135461012356 0ustar eddedd#include #include #include #include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "swap_source.c" #include "swap_complex_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "swap_source.c" #include "swap_complex_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "swap_source.c" #include "swap_complex_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/matrix/test.c0000644000175000017500000001462313536675317012372 0ustar eddedd/* matrix/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #if defined( _MSC_VER ) && defined( GSL_DLL ) #undef inline #define inline __forceinline #endif #if (!GSL_RANGE_CHECK) && defined(HAVE_INLINE) #undef GSL_RANGE_CHECK #define GSL_RANGE_CHECK 1 #endif #include #include #include #include #include #include #include #include int status = 0; #ifndef DESC #define DESC "" #endif #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "test_complex_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "test_complex_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "test_complex_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_CHAR void my_error_handler (const char *reason, const char *file, int line, int err); int main (void) { size_t M = 53; size_t N = 107; gsl_ieee_env_setup (); test_func (M, N); test_float_func (M, N); test_long_double_func (M, N); test_ulong_func (M, N); test_long_func (M, N); test_uint_func (M, N); test_int_func (M, N); test_ushort_func (M, N); test_short_func (M, N); test_uchar_func (M, N); test_char_func (M, N); test_complex_func (M, N); test_complex_float_func (M, N); test_complex_long_double_func (M, N); test_ops (M, N); test_float_ops (M, N); test_long_double_ops (M, N); test_ulong_ops (M, N); test_long_ops (M, N); test_uint_ops (M, N); test_int_ops (M, N); test_ushort_ops (M, N); test_short_ops (M, N); test_uchar_ops (M, N); test_char_ops (M, N); test_ops (N, M); test_float_ops (N, M); test_long_double_ops (N, M); test_ulong_ops (N, M); test_long_ops (N, M); test_uint_ops (N, M); test_int_ops (N, M); test_ushort_ops (N, M); test_short_ops (N, M); test_uchar_ops (N, M); test_char_ops (N, M); /* Must use smaller dimensions to prevent approximation of floats in float_mul_elements test*/ { const size_t P = 8; const size_t Q = 12; test_complex_ops (P, Q); test_complex_float_ops (P, Q); test_complex_long_double_ops (P, Q); } test_text (M, N); test_float_text (M, N); #if HAVE_PRINTF_LONGDOUBLE test_long_double_text (M, N); #endif test_ulong_text (M, N); test_long_text (M, N); test_uint_text (M, N); test_int_text (M, N); test_ushort_text (M, N); test_short_text (M, N); test_uchar_text (M, N); test_char_text (M, N); test_complex_text (M, N); test_complex_float_text (M, N); #if HAVE_PRINTF_LONGDOUBLE test_complex_long_double_text (M, N); #endif test_binary (M, N); test_float_binary (M, N); test_long_double_binary (M, N); test_ulong_binary (M, N); test_long_binary (M, N); test_uint_binary (M, N); test_int_binary (M, N); test_ushort_binary (M, N); test_short_binary (M, N); test_uchar_binary (M, N); test_char_binary (M, N); test_complex_binary (M, N); test_complex_float_binary (M, N); test_complex_long_double_binary (M, N); test_binary_noncontiguous (M, N); test_float_binary_noncontiguous (M, N); test_long_double_binary_noncontiguous (M, N); test_ulong_binary_noncontiguous (M, N); test_long_binary_noncontiguous (M, N); test_uint_binary_noncontiguous (M, N); test_int_binary_noncontiguous (M, N); test_ushort_binary_noncontiguous (M, N); test_short_binary_noncontiguous (M, N); test_uchar_binary_noncontiguous (M, N); test_char_binary_noncontiguous (M, N); test_complex_binary_noncontiguous (M, N); test_complex_float_binary_noncontiguous (M, N); test_complex_long_double_binary_noncontiguous (M, N); #if GSL_RANGE_CHECK gsl_set_error_handler (&my_error_handler); test_trap (M, N); test_float_trap (M, N); test_long_double_trap (M, N); test_ulong_trap (M, N); test_long_trap (M, N); test_uint_trap (M, N); test_int_trap (M, N); test_ushort_trap (M, N); test_short_trap (M, N); test_uchar_trap (M, N); test_char_trap (M, N); test_complex_trap (M, N); test_complex_float_trap (M, N); test_complex_long_double_trap (M, N); #endif exit (gsl_test_summary ()); } void my_error_handler (const char *reason, const char *file, int line, int err) { if (0) printf ("(caught [%s:%d: %s (%d)])\n", file, line, reason, err); status = 1; } gsl/matrix/copy_source.c0000644000175000017500000001702113536675317013740 0ustar eddedd/* matrix/copy_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * Copyright (C) 2019 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION (gsl_matrix, memcpy) (TYPE (gsl_matrix) * dest, const TYPE (gsl_matrix) * src) { const size_t src_size1 = src->size1; const size_t src_size2 = src->size2; const size_t dest_size1 = dest->size1; const size_t dest_size2 = dest->size2; size_t i; if (src_size1 != dest_size1 || src_size2 != dest_size2) { GSL_ERROR ("matrix sizes are different", GSL_EBADLEN); } #if defined(BASE_DOUBLE) || defined(BASE_FLOAT) || defined(BASE_GSL_COMPLEX) || defined(BASE_GSL_COMPLEX_FLOAT) for (i = 0; i < src_size1; ++i) { VIEW (gsl_vector, const_view) sv = FUNCTION (gsl_matrix, const_row) (src, i); VIEW (gsl_vector, view) dv = FUNCTION (gsl_matrix, row) (dest, i); #if defined(BASE_DOUBLE) gsl_blas_dcopy(&sv.vector, &dv.vector); #elif defined(BASE_FLOAT) gsl_blas_scopy(&sv.vector, &dv.vector); #elif defined(BASE_GSL_COMPLEX) gsl_blas_zcopy(&sv.vector, &dv.vector); #elif defined(BASE_GSL_COMPLEX_FLOAT) gsl_blas_ccopy(&sv.vector, &dv.vector); #endif } #else { const size_t src_tda = src->tda ; const size_t dest_tda = dest->tda ; size_t j; for (i = 0; i < src_size1 ; i++) { for (j = 0; j < MULTIPLICITY * src_size2; j++) { dest->data[MULTIPLICITY * dest_tda * i + j] = src->data[MULTIPLICITY * src_tda * i + j]; } } } #endif return GSL_SUCCESS; } int FUNCTION (gsl_matrix, swap) (TYPE (gsl_matrix) * dest, TYPE (gsl_matrix) * src) { const size_t src_size1 = src->size1; const size_t src_size2 = src->size2; const size_t dest_size1 = dest->size1; const size_t dest_size2 = dest->size2; size_t i; if (src_size1 != dest_size1 || src_size2 != dest_size2) { GSL_ERROR ("matrix sizes are different", GSL_EBADLEN); } #if defined(BASE_DOUBLE) || defined(BASE_FLOAT) || defined(BASE_GSL_COMPLEX) || defined(BASE_GSL_COMPLEX_FLOAT) for (i = 0; i < src_size1; ++i) { VIEW (gsl_vector, view) sv = FUNCTION (gsl_matrix, row) (src, i); VIEW (gsl_vector, view) dv = FUNCTION (gsl_matrix, row) (dest, i); #if defined(BASE_DOUBLE) gsl_blas_dswap(&sv.vector, &dv.vector); #elif defined(BASE_FLOAT) gsl_blas_sswap(&sv.vector, &dv.vector); #elif defined(BASE_GSL_COMPLEX) gsl_blas_zswap(&sv.vector, &dv.vector); #elif defined(BASE_GSL_COMPLEX_FLOAT) gsl_blas_cswap(&sv.vector, &dv.vector); #endif } #else { const size_t src_tda = src->tda ; const size_t dest_tda = dest->tda ; size_t j; for (i = 0; i < src_size1 ; i++) { for (j = 0; j < MULTIPLICITY * src_size2; j++) { ATOMIC tmp = src->data[MULTIPLICITY * src_tda * i + j]; src->data[MULTIPLICITY * src_tda * i + j] = dest->data[MULTIPLICITY * dest_tda * i + j]; dest->data[MULTIPLICITY * dest_tda * i + j] = tmp ; } } } #endif return GSL_SUCCESS; } int FUNCTION (gsl_matrix, tricpy) (CBLAS_UPLO_t Uplo, CBLAS_DIAG_t Diag, TYPE (gsl_matrix) * dest, const TYPE (gsl_matrix) * src) { const size_t M = src->size1; const size_t N = src->size2; size_t i; if (M != dest->size1 || N != dest->size2) { GSL_ERROR ("matrix sizes are different", GSL_EBADLEN); } #if defined(BASE_DOUBLE) || defined(BASE_FLOAT) || defined(BASE_GSL_COMPLEX) || defined(BASE_GSL_COMPLEX_FLOAT) if (Uplo == CblasLower) { for (i = 1; i < M; i++) { size_t k = GSL_MIN (i, N); VIEW (gsl_vector, const_view) a = FUNCTION (gsl_matrix, const_subrow) (src, i, 0, k); VIEW (gsl_vector, view) b = FUNCTION (gsl_matrix, subrow) (dest, i, 0, k); #if defined(BASE_DOUBLE) gsl_blas_dcopy(&a.vector, &b.vector); #elif defined(BASE_FLOAT) gsl_blas_scopy(&a.vector, &b.vector); #elif defined(BASE_GSL_COMPLEX) gsl_blas_zcopy(&a.vector, &b.vector); #elif defined(BASE_GSL_COMPLEX_FLOAT) gsl_blas_ccopy(&a.vector, &b.vector); #endif } } else if (Uplo == CblasUpper) { for (i = 0; i < GSL_MIN(M, N - 1); i++) { VIEW (gsl_vector, const_view) a = FUNCTION (gsl_matrix, const_subrow) (src, i, i + 1, N - i - 1); VIEW (gsl_vector, view) b = FUNCTION (gsl_matrix, subrow) (dest, i, i + 1, N - i - 1); #if defined(BASE_DOUBLE) gsl_blas_dcopy(&a.vector, &b.vector); #elif defined(BASE_FLOAT) gsl_blas_scopy(&a.vector, &b.vector); #elif defined(BASE_GSL_COMPLEX) gsl_blas_zcopy(&a.vector, &b.vector); #elif defined(BASE_GSL_COMPLEX_FLOAT) gsl_blas_ccopy(&a.vector, &b.vector); #endif } } if (Diag == CblasNonUnit) { VIEW (gsl_vector, const_view) a = FUNCTION (gsl_matrix, const_diagonal) (src); VIEW (gsl_vector, view) b = FUNCTION (gsl_matrix, diagonal) (dest); #if defined(BASE_DOUBLE) gsl_blas_dcopy(&a.vector, &b.vector); #elif defined(BASE_FLOAT) gsl_blas_scopy(&a.vector, &b.vector); #elif defined(BASE_GSL_COMPLEX) gsl_blas_zcopy(&a.vector, &b.vector); #elif defined(BASE_GSL_COMPLEX_FLOAT) gsl_blas_ccopy(&a.vector, &b.vector); #endif } #else { const size_t src_tda = src->tda ; const size_t dest_tda = dest->tda ; size_t j, k; if (Uplo == CblasLower) { for (i = 1; i < M ; i++) { for (j = 0; j < GSL_MIN(i, N); j++) { for (k = 0; k < MULTIPLICITY; k++) { size_t e1 = (i * dest_tda + j) * MULTIPLICITY + k ; size_t e2 = (i * src_tda + j) * MULTIPLICITY + k ; dest->data[e1] = src->data[e2]; } } } } else if (Uplo == CblasUpper) { for (i = 0; i < M ; i++) { for (j = i + 1; j < N; j++) { for (k = 0; k < MULTIPLICITY; k++) { size_t e1 = (i * dest_tda + j) * MULTIPLICITY + k ; size_t e2 = (i * src_tda + j) * MULTIPLICITY + k ; dest->data[e1] = src->data[e2]; } } } } else { GSL_ERROR ("invalid Uplo parameter", GSL_EINVAL); } if (Diag == CblasNonUnit) { for (i = 0; i < GSL_MIN(M, N); i++) { for (k = 0; k < MULTIPLICITY; k++) { size_t e1 = (i * dest_tda + i) * MULTIPLICITY + k ; size_t e2 = (i * src_tda + i) * MULTIPLICITY + k ; dest->data[e1] = src->data[e2]; } } } } #endif return GSL_SUCCESS; } gsl/matrix/submatrix.c0000644000175000017500000000723313536674414013425 0ustar eddedd#include #include #include #include #include #include "view.h" #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_CHAR #define USE_QUALIFIER #define QUALIFIER const #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "submatrix_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/matrix/file.c0000644000175000017500000000341513536674414012324 0ustar eddedd#include #include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/matrix/test_static.c0000644000175000017500000000015213536674414013726 0ustar eddedd #undef HAVE_INLINE #ifndef NO_INLINE #define NO_INLINE #endif #define DESC " (static)" #include "test.c" gsl/matrix/prop.c0000664000175000017500000000341314057135461012356 0ustar eddedd#include #include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/COPYING0000644000175000017500000010451313536674414010771 0ustar eddedd GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gsl/histogram/0000755000175000017500000000000014057135461011720 5ustar eddeddgsl/histogram/get.c0000644000175000017500000000331413536674414012653 0ustar eddedd/* histogram/get.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include "find.c" double gsl_histogram_get (const gsl_histogram * h, size_t i) { const size_t n = h->n; if (i >= n) { GSL_ERROR_VAL ("index lies outside valid range of 0 .. n - 1", GSL_EDOM, 0); } return h->bin[i]; } int gsl_histogram_get_range (const gsl_histogram * h, size_t i, double *lower, double *upper) { const size_t n = h->n; if (i >= n) { GSL_ERROR ("index lies outside valid range of 0 .. n - 1", GSL_EDOM); } *lower = h->range[i]; *upper = h->range[i + 1]; return GSL_SUCCESS; } int gsl_histogram_find (const gsl_histogram * h, const double x, size_t * i) { int status = find (h->n, h->range, x, i); if (status) { GSL_ERROR ("x not found in range of h", GSL_EDOM); } return GSL_SUCCESS; } gsl/histogram/maxval.c0000644000175000017500000000457613536674414013377 0ustar eddedd/* gsl_histogram_maxval.c * Copyright (C) 2000 Simone Piccardi * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /*************************************************************** * * File gsl_histogram_maxval.c: * Routine to find maximum and minumum content of a hisogram. * Need GSL library and header. * Contains the routines: * gsl_histogram_max_val find max content values * gsl_histogram_min_val find min content values * gsl_histogram_bin_max find coordinates of max contents bin * gsl_histogram_bin_min find coordinates of min contents bin * * Author: S. Piccardi * Jan. 2000 * ***************************************************************/ #include #include #include double gsl_histogram_max_val (const gsl_histogram * h) { const size_t n = h->n; size_t i; double max = h->bin[0]; for (i = 0; i < n; i++) { if (h->bin[i] > max) { max = h->bin[i]; } } return max; } size_t gsl_histogram_max_bin (const gsl_histogram * h) { size_t i; size_t imax = 0; double max = h->bin[0]; for (i = 0; i < h->n; i++) { if (h->bin[i] > max) { max = h->bin[i]; imax = i; } } return imax; } double gsl_histogram_min_val (const gsl_histogram * h) { size_t i; double min = h->bin[0]; for (i = 0; i < h->n; i++) { if (h->bin[i] < min) { min = h->bin[i]; } } return min; } size_t gsl_histogram_min_bin (const gsl_histogram * h) { size_t i; size_t imin = 0; double min = h->bin[0]; for (i = 0; i < h->n; i++) { if (h->bin[i] < min) { min = h->bin[i]; imin = i; } } return imin; } gsl/histogram/Makefile.in0000664000175000017500000012110714057135461013771 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = histogram ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslhistogram_la_LIBADD = am_libgslhistogram_la_OBJECTS = add.lo get.lo init.lo params.lo \ reset.lo file.lo pdf.lo add2d.lo get2d.lo init2d.lo \ params2d.lo reset2d.lo file2d.lo pdf2d.lo calloc_range.lo \ calloc_range2d.lo copy.lo copy2d.lo maxval.lo maxval2d.lo \ oper.lo oper2d.lo stat.lo stat2d.lo libgslhistogram_la_OBJECTS = $(am_libgslhistogram_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test1d.$(OBJEXT) test2d.$(OBJEXT) \ test1d_resample.$(OBJEXT) test2d_resample.$(OBJEXT) \ test1d_trap.$(OBJEXT) test2d_trap.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslhistogram.la ../block/libgslblock.la \ ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ ../test/libgsltest.la ../sys/libgslsys.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/add.Plo ./$(DEPDIR)/add2d.Plo \ ./$(DEPDIR)/calloc_range.Plo ./$(DEPDIR)/calloc_range2d.Plo \ ./$(DEPDIR)/copy.Plo ./$(DEPDIR)/copy2d.Plo \ ./$(DEPDIR)/file.Plo ./$(DEPDIR)/file2d.Plo \ ./$(DEPDIR)/get.Plo ./$(DEPDIR)/get2d.Plo ./$(DEPDIR)/init.Plo \ ./$(DEPDIR)/init2d.Plo ./$(DEPDIR)/maxval.Plo \ ./$(DEPDIR)/maxval2d.Plo ./$(DEPDIR)/oper.Plo \ ./$(DEPDIR)/oper2d.Plo ./$(DEPDIR)/params.Plo \ ./$(DEPDIR)/params2d.Plo ./$(DEPDIR)/pdf.Plo \ ./$(DEPDIR)/pdf2d.Plo ./$(DEPDIR)/reset.Plo \ ./$(DEPDIR)/reset2d.Plo ./$(DEPDIR)/stat.Plo \ ./$(DEPDIR)/stat2d.Plo ./$(DEPDIR)/test.Po \ ./$(DEPDIR)/test1d.Po ./$(DEPDIR)/test1d_resample.Po \ ./$(DEPDIR)/test1d_trap.Po ./$(DEPDIR)/test2d.Po \ ./$(DEPDIR)/test2d_resample.Po ./$(DEPDIR)/test2d_trap.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslhistogram_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslhistogram_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslhistogram.la pkginclude_HEADERS = gsl_histogram.h gsl_histogram2d.h AM_CPPFLAGS = -I$(top_srcdir) libgslhistogram_la_SOURCES = add.c get.c init.c params.c reset.c file.c pdf.c gsl_histogram.h add2d.c get2d.c init2d.c params2d.c reset2d.c file2d.c pdf2d.c gsl_histogram2d.h calloc_range.c calloc_range2d.c copy.c copy2d.c maxval.c maxval2d.c oper.c oper2d.c stat.c stat2d.c noinst_HEADERS = urand.c find.c find2d.c TESTS = $(check_PROGRAMS) EXTRA_DIST = urand.c test_SOURCES = test.c test1d.c test2d.c test1d_resample.c test2d_resample.c test1d_trap.c test2d_trap.c test_LDADD = libgslhistogram.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la CLEANFILES = test.txt test.dat all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu histogram/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu histogram/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslhistogram.la: $(libgslhistogram_la_OBJECTS) $(libgslhistogram_la_DEPENDENCIES) $(EXTRA_libgslhistogram_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslhistogram_la_OBJECTS) $(libgslhistogram_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add2d.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calloc_range.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calloc_range2d.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copy2d.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file2d.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get2d.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init2d.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxval.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxval2d.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oper.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oper2d.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/params.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/params2d.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdf2d.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reset.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reset2d.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat2d.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test1d.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test1d_resample.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test1d_trap.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test2d.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test2d_resample.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test2d_trap.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/add.Plo -rm -f ./$(DEPDIR)/add2d.Plo -rm -f ./$(DEPDIR)/calloc_range.Plo -rm -f ./$(DEPDIR)/calloc_range2d.Plo -rm -f ./$(DEPDIR)/copy.Plo -rm -f ./$(DEPDIR)/copy2d.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/file2d.Plo -rm -f ./$(DEPDIR)/get.Plo -rm -f ./$(DEPDIR)/get2d.Plo -rm -f ./$(DEPDIR)/init.Plo -rm -f ./$(DEPDIR)/init2d.Plo -rm -f ./$(DEPDIR)/maxval.Plo -rm -f ./$(DEPDIR)/maxval2d.Plo -rm -f ./$(DEPDIR)/oper.Plo -rm -f ./$(DEPDIR)/oper2d.Plo -rm -f ./$(DEPDIR)/params.Plo -rm -f ./$(DEPDIR)/params2d.Plo -rm -f ./$(DEPDIR)/pdf.Plo -rm -f ./$(DEPDIR)/pdf2d.Plo -rm -f ./$(DEPDIR)/reset.Plo -rm -f ./$(DEPDIR)/reset2d.Plo -rm -f ./$(DEPDIR)/stat.Plo -rm -f ./$(DEPDIR)/stat2d.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test1d.Po -rm -f ./$(DEPDIR)/test1d_resample.Po -rm -f ./$(DEPDIR)/test1d_trap.Po -rm -f ./$(DEPDIR)/test2d.Po -rm -f ./$(DEPDIR)/test2d_resample.Po -rm -f ./$(DEPDIR)/test2d_trap.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/add.Plo -rm -f ./$(DEPDIR)/add2d.Plo -rm -f ./$(DEPDIR)/calloc_range.Plo -rm -f ./$(DEPDIR)/calloc_range2d.Plo -rm -f ./$(DEPDIR)/copy.Plo -rm -f ./$(DEPDIR)/copy2d.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/file2d.Plo -rm -f ./$(DEPDIR)/get.Plo -rm -f ./$(DEPDIR)/get2d.Plo -rm -f ./$(DEPDIR)/init.Plo -rm -f ./$(DEPDIR)/init2d.Plo -rm -f ./$(DEPDIR)/maxval.Plo -rm -f ./$(DEPDIR)/maxval2d.Plo -rm -f ./$(DEPDIR)/oper.Plo -rm -f ./$(DEPDIR)/oper2d.Plo -rm -f ./$(DEPDIR)/params.Plo -rm -f ./$(DEPDIR)/params2d.Plo -rm -f ./$(DEPDIR)/pdf.Plo -rm -f ./$(DEPDIR)/pdf2d.Plo -rm -f ./$(DEPDIR)/reset.Plo -rm -f ./$(DEPDIR)/reset2d.Plo -rm -f ./$(DEPDIR)/stat.Plo -rm -f ./$(DEPDIR)/stat2d.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test1d.Po -rm -f ./$(DEPDIR)/test1d_resample.Po -rm -f ./$(DEPDIR)/test1d_trap.Po -rm -f ./$(DEPDIR)/test2d.Po -rm -f ./$(DEPDIR)/test2d_resample.Po -rm -f ./$(DEPDIR)/test2d_trap.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/histogram/get2d.c0000644000175000017500000000472313536674414013106 0ustar eddedd/* histogram/get2d.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include "find.c" double gsl_histogram2d_get (const gsl_histogram2d * h, const size_t i, const size_t j) { const size_t nx = h->nx; const size_t ny = h->ny; if (i >= nx) { GSL_ERROR_VAL ("index i lies outside valid range of 0 .. nx - 1", GSL_EDOM, 0); } if (j >= ny) { GSL_ERROR_VAL ("index j lies outside valid range of 0 .. ny - 1", GSL_EDOM, 0); } return h->bin[i * ny + j]; } int gsl_histogram2d_get_xrange (const gsl_histogram2d * h, const size_t i, double *xlower, double *xupper) { const size_t nx = h->nx; if (i >= nx) { GSL_ERROR ("index i lies outside valid range of 0 .. nx - 1", GSL_EDOM); } *xlower = h->xrange[i]; *xupper = h->xrange[i + 1]; return GSL_SUCCESS; } int gsl_histogram2d_get_yrange (const gsl_histogram2d * h, const size_t j, double *ylower, double *yupper) { const size_t ny = h->ny; if (j >= ny) { GSL_ERROR ("index j lies outside valid range of 0 .. ny - 1", GSL_EDOM); } *ylower = h->yrange[j]; *yupper = h->yrange[j + 1]; return GSL_SUCCESS; } int gsl_histogram2d_find (const gsl_histogram2d * h, const double x, const double y, size_t * i, size_t * j) { int status = find (h->nx, h->xrange, x, i); if (status) { GSL_ERROR ("x not found in range of h", GSL_EDOM); } status = find (h->ny, h->yrange, y, j); if (status) { GSL_ERROR ("y not found in range of h", GSL_EDOM); } return GSL_SUCCESS; } gsl/histogram/find.c0000644000175000017500000000361613536674414013021 0ustar eddedd/* histogram/find.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* determines whether to optimize for linear ranges */ #define LINEAR_OPT 1 static int find (const size_t n, const double range[], const double x, size_t * i); static int find (const size_t n, const double range[], const double x, size_t * i) { size_t i_linear, lower, upper, mid; if (x < range[0]) { return -1; } if (x >= range[n]) { return +1; } /* optimize for linear case */ #ifdef LINEAR_OPT { double u = (x - range[0]) / (range[n] - range[0]); i_linear = (size_t) (u * n); } if (x >= range[i_linear] && x < range[i_linear + 1]) { *i = i_linear; return 0; } #endif /* perform binary search */ upper = n ; lower = 0 ; while (upper - lower > 1) { mid = (upper + lower) / 2 ; if (x >= range[mid]) { lower = mid ; } else { upper = mid ; } } *i = lower ; /* sanity check the result */ if (x < range[lower] || x >= range[lower + 1]) { GSL_ERROR ("x not found in range", GSL_ESANITY); } return 0; } gsl/histogram/gsl_histogram2d.h0000644000175000017500000001301213536674414015165 0ustar eddedd/* histogram/gsl_histogram2d.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_HISTOGRAM2D_H__ #define __GSL_HISTOGRAM2D_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t nx, ny ; double * xrange ; double * yrange ; double * bin ; } gsl_histogram2d ; typedef struct { size_t nx, ny ; double * xrange ; double * yrange ; double * sum ; } gsl_histogram2d_pdf ; gsl_histogram2d * gsl_histogram2d_alloc (const size_t nx, const size_t ny); gsl_histogram2d * gsl_histogram2d_calloc (const size_t nx, const size_t ny); gsl_histogram2d * gsl_histogram2d_calloc_uniform (const size_t nx, const size_t ny, const double xmin, const double xmax, const double ymin, const double ymax); void gsl_histogram2d_free (gsl_histogram2d * h); int gsl_histogram2d_increment (gsl_histogram2d * h, double x, double y); int gsl_histogram2d_accumulate (gsl_histogram2d * h, double x, double y, double weight); int gsl_histogram2d_find (const gsl_histogram2d * h, const double x, const double y, size_t * i, size_t * j); double gsl_histogram2d_get (const gsl_histogram2d * h, const size_t i, const size_t j); int gsl_histogram2d_get_xrange (const gsl_histogram2d * h, const size_t i, double * xlower, double * xupper); int gsl_histogram2d_get_yrange (const gsl_histogram2d * h, const size_t j, double * ylower, double * yupper); double gsl_histogram2d_xmax (const gsl_histogram2d * h); double gsl_histogram2d_xmin (const gsl_histogram2d * h); size_t gsl_histogram2d_nx (const gsl_histogram2d * h); double gsl_histogram2d_ymax (const gsl_histogram2d * h); double gsl_histogram2d_ymin (const gsl_histogram2d * h); size_t gsl_histogram2d_ny (const gsl_histogram2d * h); void gsl_histogram2d_reset (gsl_histogram2d * h); gsl_histogram2d * gsl_histogram2d_calloc_range(size_t nx, size_t ny, double *xrange, double *yrange); int gsl_histogram2d_set_ranges_uniform (gsl_histogram2d * h, double xmin, double xmax, double ymin, double ymax); int gsl_histogram2d_set_ranges (gsl_histogram2d * h, const double xrange[], size_t xsize, const double yrange[], size_t ysize); int gsl_histogram2d_memcpy(gsl_histogram2d *dest, const gsl_histogram2d *source); gsl_histogram2d * gsl_histogram2d_clone(const gsl_histogram2d * source); double gsl_histogram2d_max_val(const gsl_histogram2d *h); void gsl_histogram2d_max_bin (const gsl_histogram2d *h, size_t *i, size_t *j); double gsl_histogram2d_min_val(const gsl_histogram2d *h); void gsl_histogram2d_min_bin (const gsl_histogram2d *h, size_t *i, size_t *j); double gsl_histogram2d_xmean (const gsl_histogram2d * h); double gsl_histogram2d_ymean (const gsl_histogram2d * h); double gsl_histogram2d_xsigma (const gsl_histogram2d * h); double gsl_histogram2d_ysigma (const gsl_histogram2d * h); double gsl_histogram2d_cov (const gsl_histogram2d * h); double gsl_histogram2d_sum (const gsl_histogram2d *h); int gsl_histogram2d_equal_bins_p(const gsl_histogram2d *h1, const gsl_histogram2d *h2) ; int gsl_histogram2d_add(gsl_histogram2d *h1, const gsl_histogram2d *h2); int gsl_histogram2d_sub(gsl_histogram2d *h1, const gsl_histogram2d *h2); int gsl_histogram2d_mul(gsl_histogram2d *h1, const gsl_histogram2d *h2); int gsl_histogram2d_div(gsl_histogram2d *h1, const gsl_histogram2d *h2); int gsl_histogram2d_scale(gsl_histogram2d *h, double scale); int gsl_histogram2d_shift(gsl_histogram2d *h, double shift); int gsl_histogram2d_fwrite (FILE * stream, const gsl_histogram2d * h) ; int gsl_histogram2d_fread (FILE * stream, gsl_histogram2d * h); int gsl_histogram2d_fprintf (FILE * stream, const gsl_histogram2d * h, const char * range_format, const char * bin_format); int gsl_histogram2d_fscanf (FILE * stream, gsl_histogram2d * h); gsl_histogram2d_pdf * gsl_histogram2d_pdf_alloc (const size_t nx, const size_t ny); int gsl_histogram2d_pdf_init (gsl_histogram2d_pdf * p, const gsl_histogram2d * h); void gsl_histogram2d_pdf_free (gsl_histogram2d_pdf * p); int gsl_histogram2d_pdf_sample (const gsl_histogram2d_pdf * p, double r1, double r2, double * x, double * y); __END_DECLS #endif /* __GSL_HISTOGRAM2D_H__ */ gsl/histogram/pdf2d.c0000644000175000017500000001055013536674414013073 0ustar eddedd/* histogram/pdf2d.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include "find.c" int gsl_histogram2d_pdf_sample (const gsl_histogram2d_pdf * p, double r1, double r2, double *x, double *y) { size_t k; int status; /* Wrap the exclusive top of the bin down to the inclusive bottom of the bin. Since this is a single point it should not affect the distribution. */ if (r2 == 1.0) { r2 = 0.0; } if (r1 == 1.0) { r1 = 0.0; } status = find (p->nx * p->ny, p->sum, r1, &k); if (status) { GSL_ERROR ("cannot find r1 in cumulative pdf", GSL_EDOM); } else { size_t i = k / p->ny; size_t j = k - (i * p->ny); double delta = (r1 - p->sum[k]) / (p->sum[k + 1] - p->sum[k]); *x = p->xrange[i] + delta * (p->xrange[i + 1] - p->xrange[i]); *y = p->yrange[j] + r2 * (p->yrange[j + 1] - p->yrange[j]); return GSL_SUCCESS; } } gsl_histogram2d_pdf * gsl_histogram2d_pdf_alloc (const size_t nx, const size_t ny) { const size_t n = nx * ny; gsl_histogram2d_pdf *p; if (n == 0) { GSL_ERROR_VAL ("histogram2d pdf length n must be positive integer", GSL_EDOM, 0); } p = (gsl_histogram2d_pdf *) malloc (sizeof (gsl_histogram2d_pdf)); if (p == 0) { GSL_ERROR_VAL ("failed to allocate space for histogram2d pdf struct", GSL_ENOMEM, 0); } p->xrange = (double *) malloc ((nx + 1) * sizeof (double)); if (p->xrange == 0) { free (p); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for histogram2d pdf xranges", GSL_ENOMEM, 0); } p->yrange = (double *) malloc ((ny + 1) * sizeof (double)); if (p->yrange == 0) { free (p->xrange); free (p); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for histogram2d pdf yranges", GSL_ENOMEM, 0); } p->sum = (double *) malloc ((n + 1) * sizeof (double)); if (p->sum == 0) { free (p->yrange); free (p->xrange); free (p); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for histogram2d pdf sums", GSL_ENOMEM, 0); } p->nx = nx; p->ny = ny; return p; } int gsl_histogram2d_pdf_init (gsl_histogram2d_pdf * p, const gsl_histogram2d * h) { size_t i; const size_t nx = p->nx; const size_t ny = p->ny; const size_t n = nx * ny; if (nx != h->nx || ny != h->ny) { GSL_ERROR ("histogram2d size must match pdf size", GSL_EDOM); } for (i = 0; i < n; i++) { if (h->bin[i] < 0) { GSL_ERROR ("histogram bins must be non-negative to compute" "a probability distribution", GSL_EDOM); } } for (i = 0; i < nx + 1; i++) { p->xrange[i] = h->xrange[i]; } for (i = 0; i < ny + 1; i++) { p->yrange[i] = h->yrange[i]; } { double mean = 0, sum = 0; for (i = 0; i < n; i++) { mean += (h->bin[i] - mean) / ((double) (i + 1)); } p->sum[0] = 0; for (i = 0; i < n; i++) { sum += (h->bin[i] / mean) / n; p->sum[i + 1] = sum; } } return GSL_SUCCESS; } void gsl_histogram2d_pdf_free (gsl_histogram2d_pdf * p) { RETURN_IF_NULL (p); free (p->xrange); free (p->yrange); free (p->sum); free (p); } gsl/histogram/urand.c0000644000175000017500000000173613536674414013213 0ustar eddedd/* histogram/urand.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static double urand (void); static double urand (void) { static unsigned long int x = 1; x = (1103515245 * x + 12345) & 0x7fffffffUL ; return x / 2147483648.0 ; } gsl/histogram/stat.c0000644000175000017500000000621313536674414013050 0ustar eddedd/* gsl_histogram_stat.c * Copyright (C) 2000 Simone Piccardi * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /*************************************************************** * * File gsl_histogram_stat.c: * Routines for statisticalcomputations on histograms. * Need GSL library and header. * Contains the routines: * gsl_histogram_mean compute histogram mean * gsl_histogram_sigma compute histogram sigma * * Author: S. Piccardi * Jan. 2000 * ***************************************************************/ #include #include #include #include #include /* FIXME: We skip negative values in the histogram h->bin[i] < 0, since those correspond to negative weights (BJG) */ double gsl_histogram_mean (const gsl_histogram * h) { const size_t n = h->n; size_t i; /* Compute the bin-weighted arithmetic mean M of a histogram using the recurrence relation M(n) = M(n-1) + (x[n] - M(n-1)) (w(n)/(W(n-1) + w(n))) W(n) = W(n-1) + w(n) */ long double wmean = 0; long double W = 0; for (i = 0; i < n; i++) { double xi = (h->range[i + 1] + h->range[i]) / 2; double wi = h->bin[i]; if (wi > 0) { W += wi; wmean += (xi - wmean) * (wi / W); } } return wmean; } double gsl_histogram_sigma (const gsl_histogram * h) { const size_t n = h->n; size_t i; long double wvariance = 0 ; long double wmean = 0; long double W = 0; /* Use a two-pass algorithm for stability. Could also use a single pass formula, as given in N.J.Higham 'Accuracy and Stability of Numerical Methods', p.12 */ /* Compute the mean */ for (i = 0; i < n; i++) { double xi = (h->range[i + 1] + h->range[i]) / 2; double wi = h->bin[i]; if (wi > 0) { W += wi; wmean += (xi - wmean) * (wi / W); } } /* Compute the variance */ W = 0.0; for (i = 0; i < n; i++) { double xi = ((h->range[i + 1]) + (h->range[i])) / 2; double wi = h->bin[i]; if (wi > 0) { const long double delta = (xi - wmean); W += wi ; wvariance += (delta * delta - wvariance) * (wi / W); } } { double sigma = sqrt (wvariance) ; return sigma; } } /* sum up all bins of histogram */ double gsl_histogram_sum(const gsl_histogram * h) { double sum=0; size_t i=0; size_t n; n=h->n; while(i < n) sum += h->bin[i++]; return sum; } gsl/histogram/file2d.c0000644000175000017500000001064413536674414013245 0ustar eddedd/* histogram/file2d.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include int gsl_histogram2d_fread (FILE * stream, gsl_histogram2d * h) { int status = gsl_block_raw_fread (stream, h->xrange, h->nx + 1, 1); if (status) return status; status = gsl_block_raw_fread (stream, h->yrange, h->ny + 1, 1); if (status) return status; status = gsl_block_raw_fread (stream, h->bin, h->nx * h->ny, 1); return status; } int gsl_histogram2d_fwrite (FILE * stream, const gsl_histogram2d * h) { int status = gsl_block_raw_fwrite (stream, h->xrange, h->nx + 1, 1); if (status) return status; status = gsl_block_raw_fwrite (stream, h->yrange, h->ny + 1, 1); if (status) return status; status = gsl_block_raw_fwrite (stream, h->bin, h->nx * h->ny, 1); return status; } int gsl_histogram2d_fprintf (FILE * stream, const gsl_histogram2d * h, const char *range_format, const char *bin_format) { size_t i, j; const size_t nx = h->nx; const size_t ny = h->ny; int status; for (i = 0; i < nx; i++) { for (j = 0; j < ny; j++) { status = fprintf (stream, range_format, h->xrange[i]); if (status < 0) { GSL_ERROR ("fprintf failed", GSL_EFAILED); } status = putc (' ', stream); if (status == EOF) { GSL_ERROR ("putc failed", GSL_EFAILED); } status = fprintf (stream, range_format, h->xrange[i + 1]); if (status < 0) { GSL_ERROR ("fprintf failed", GSL_EFAILED); } status = putc (' ', stream); if (status == EOF) { GSL_ERROR ("putc failed", GSL_EFAILED); } status = fprintf (stream, range_format, h->yrange[j]); if (status < 0) { GSL_ERROR ("fprintf failed", GSL_EFAILED); } status = putc (' ', stream); if (status == EOF) { GSL_ERROR ("putc failed", GSL_EFAILED); } status = fprintf (stream, range_format, h->yrange[j + 1]); if (status < 0) { GSL_ERROR ("fprintf failed", GSL_EFAILED); } status = putc (' ', stream); if (status == EOF) { GSL_ERROR ("putc failed", GSL_EFAILED); } status = fprintf (stream, bin_format, h->bin[i * ny + j]); if (status < 0) { GSL_ERROR ("fprintf failed", GSL_EFAILED); } status = putc ('\n', stream); if (status == EOF) { GSL_ERROR ("putc failed", GSL_EFAILED); } } status = putc ('\n', stream); if (status == EOF) { GSL_ERROR ("putc failed", GSL_EFAILED); } } return GSL_SUCCESS; } int gsl_histogram2d_fscanf (FILE * stream, gsl_histogram2d * h) { size_t i, j; const size_t nx = h->nx; const size_t ny = h->ny; double xupper, yupper; for (i = 0; i < nx; i++) { for (j = 0; j < ny; j++) { int status = fscanf (stream, "%lg %lg %lg %lg %lg", h->xrange + i, &xupper, h->yrange + j, &yupper, h->bin + i * ny + j); if (status != 5) { GSL_ERROR ("fscanf failed", GSL_EFAILED); } } h->yrange[ny] = yupper; } h->xrange[nx] = xupper; return GSL_SUCCESS; } gsl/histogram/ChangeLog0000644000175000017500000001172613536674414013510 0ustar eddedd2009-07-09 Brian Gough * pdf2d.c (gsl_histogram2d_pdf_free): handle NULL argument in free * pdf.c (gsl_histogram_pdf_free): handle NULL argument in free * init2d.c (gsl_histogram2d_free): handle NULL argument in free * init.c (gsl_histogram_free): handle NULL argument in free 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2004-11-28 Brian Gough * init2d.c (make_uniform): compute uniform range without cancellation error. * init.c (make_uniform): compute uniform range without cancellation error. Tue Aug 27 19:36:43 2002 Brian Gough * test2d.c (main): changed test output format from %g to %e for portability * test.c (main): changed test output format from %g to %e for portability Wed Mar 6 22:03:35 2002 Brian Gough * test2d.c (main): cleaned up the tests a bit * stat2d.c: added checks for wi>0 (Achim Gaedke) Sat Jan 26 17:09:10 2002 Brian Gough * stat2d.c: added include for sqrt Fri Jan 18 21:45:35 2002 Brian Gough * stat2d.c: functions to compute statistics of 2d histograms (Achim Gaedke) Mon Jan 14 19:34:31 2002 Brian Gough * stat.c (gsl_histogram_sum): new function to sum bins (Achim Gaedke) * maxval2d.c (gsl_histogram2d_sum): new function to sum bins (Achim Gaedke) Thu Oct 18 14:48:07 2001 Brian Gough * pdf2d.c (gsl_histogram2d_pdf_alloc): changed the definition of the pdf alloc function to be consistent with the rest of the library * pdf.c (gsl_histogram_pdf_alloc): changed the definition of the pdf alloc function to be consistent with the rest of the library * init2d.c (gsl_histogram2d_alloc): added an alloc function for consistency * init.c (gsl_histogram_alloc): added an alloc function for consistency Wed Sep 12 13:38:40 2001 Brian Gough * stat.c (gsl_histogram_mean): fixed calculation of mean/sigma and made it part of the library Sun Aug 19 13:31:35 2001 Brian Gough * test_gsl_histogram.sh: moved to top-level directory Sat Aug 18 22:21:26 2001 Brian Gough * gsl-histogram.c: moved to top-level directory Mon Jun 25 17:41:42 2001 Brian Gough * init2d.c (gsl_histogram2d_set_ranges_uniform): added range initialization functions suggested by Achim Gaedke * init.c (gsl_histogram_set_ranges_uniform): added range initialization functions suggested by Achim Gaedke Tue Apr 17 22:13:05 2001 Brian Gough * get2d.c: include "find.c" Mon Apr 16 20:13:45 2001 Brian Gough * get2d.c (gsl_histogram2d_get): removed unnecessary reference to find2d Mon Jan 22 13:55:13 2001 Brian Gough * find.c (find): optimize for the linear case, include own binary search for speed * add.c (gsl_histogram_accumulate): fix check of array bound for index Sun May 28 12:23:46 2000 Brian Gough * test2d.c (main): use binary mode "b" when reading and writing binary files * test.c (main): use binary mode "b" when reading and writing binary files Wed Apr 26 15:09:22 2000 Brian Gough * oper2d.c (gsl_histogram2d_shift): added function for shifting histogram by a constant offset * oper.c (gsl_histogram_shift): added function for shifting histogram by a constant offset Wed Apr 19 17:27:44 2000 Brian Gough * added numerous extensions from Simone Piccardi 2000-04-01 Mark Galassi * *.c: changed 0 -> GSL_SUCCESS where appropriate; THANKS to Dave Morrison. Fri Nov 19 15:31:51 1999 Brian Gough * gsl-histogram.c (main): free memory before exit, eliminates warning from checkergcc * test_gsl_histogram.sh: added a test for the gsl-histogram program Fri Oct 1 15:47:01 1999 Brian Gough * file.c file2d.c: converted to use new block i/o functions Wed Aug 18 11:41:40 1999 Brian Gough * eliminated obvious memory leaks from the tests, so that we can check that the _free functions work correctly * gsl-histogram.c (main): removed unused variable Fri Aug 6 11:19:37 1999 Brian Gough * removed dependence on rand() and RAND_MAX 1999-08-05 Mark Galassi * gsl-histogram.c (main): fixed a simple logic bug. Thanks to Barak Pearlmutter (bap@cs.unm.edu) for the patch. 1998-11-06 * used a cast of (int) when attempting to print size_t variables with %d Wed Sep 16 15:08:59 1998 Brian Gough * gsl-histogram.c (main): made the number of bins optional. If you don't specify it then it uses bins of width 1. gsl/histogram/Makefile.am0000644000175000017500000000144713536674414013771 0ustar eddeddnoinst_LTLIBRARIES = libgslhistogram.la pkginclude_HEADERS = gsl_histogram.h gsl_histogram2d.h AM_CPPFLAGS = -I$(top_srcdir) libgslhistogram_la_SOURCES = add.c get.c init.c params.c reset.c file.c pdf.c gsl_histogram.h add2d.c get2d.c init2d.c params2d.c reset2d.c file2d.c pdf2d.c gsl_histogram2d.h calloc_range.c calloc_range2d.c copy.c copy2d.c maxval.c maxval2d.c oper.c oper2d.c stat.c stat2d.c noinst_HEADERS = urand.c find.c find2d.c check_PROGRAMS = test TESTS = $(check_PROGRAMS) EXTRA_DIST = urand.c test_SOURCES = test.c test1d.c test2d.c test1d_resample.c test2d_resample.c test1d_trap.c test2d_trap.c test_LDADD = libgslhistogram.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la CLEANFILES = test.txt test.dat gsl/histogram/add.c0000644000175000017500000000265013536674414012626 0ustar eddedd/* histogram/add.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include "find.c" int gsl_histogram_increment (gsl_histogram * h, double x) { int status = gsl_histogram_accumulate (h, x, 1.0); return status; } int gsl_histogram_accumulate (gsl_histogram * h, double x, double weight) { const size_t n = h->n; size_t index = 0; int status = find (h->n, h->range, x, &index); if (status) { return GSL_EDOM; } if (index >= n) { GSL_ERROR ("index lies outside valid range of 0 .. n - 1", GSL_ESANITY); } h->bin[index] += weight; return GSL_SUCCESS; } gsl/histogram/init2d.c0000644000175000017500000001523013536674414013265 0ustar eddedd/* histogram/init2d.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include gsl_histogram2d * gsl_histogram2d_alloc (const size_t nx, const size_t ny) { gsl_histogram2d *h; if (nx == 0) { GSL_ERROR_VAL ("histogram2d length nx must be positive integer", GSL_EDOM, 0); } if (ny == 0) { GSL_ERROR_VAL ("histogram2d length ny must be positive integer", GSL_EDOM, 0); } h = (gsl_histogram2d *) malloc (sizeof (gsl_histogram2d)); if (h == 0) { GSL_ERROR_VAL ("failed to allocate space for histogram2d struct", GSL_ENOMEM, 0); } h->xrange = (double *) malloc ((nx + 1) * sizeof (double)); if (h->xrange == 0) { free (h); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for histogram2d x ranges", GSL_ENOMEM, 0); } h->yrange = (double *) malloc ((ny + 1) * sizeof (double)); if (h->yrange == 0) { free (h->xrange); free (h); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for histogram2d y ranges", GSL_ENOMEM, 0); } h->bin = (double *) malloc (nx * ny * sizeof (double)); if (h->bin == 0) { free (h->xrange); free (h->yrange); free (h); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for histogram bins", GSL_ENOMEM, 0); } h->nx = nx; h->ny = ny; return h; } static void make_uniform (double range[], size_t n, double xmin, double xmax) { size_t i; for (i = 0; i <= n; i++) { double f1 = ((double) (n-i) / (double) n); double f2 = ((double) i / (double) n); range[i] = f1 * xmin + f2 * xmax; } } gsl_histogram2d * gsl_histogram2d_calloc_uniform (const size_t nx, const size_t ny, const double xmin, const double xmax, const double ymin, const double ymax) { gsl_histogram2d *h; if (xmin >= xmax) { GSL_ERROR_VAL ("xmin must be less than xmax", GSL_EINVAL, 0); } if (ymin >= ymax) { GSL_ERROR_VAL ("ymin must be less than ymax", GSL_EINVAL, 0); } h = gsl_histogram2d_calloc (nx, ny); if (h == 0) { return h; } make_uniform (h->xrange, nx, xmin, xmax); make_uniform (h->yrange, ny, ymin, ymax); return h; } gsl_histogram2d * gsl_histogram2d_calloc (const size_t nx, const size_t ny) { gsl_histogram2d *h; if (nx == 0) { GSL_ERROR_VAL ("histogram2d length nx must be positive integer", GSL_EDOM, 0); } if (ny == 0) { GSL_ERROR_VAL ("histogram2d length ny must be positive integer", GSL_EDOM, 0); } h = (gsl_histogram2d *) malloc (sizeof (gsl_histogram2d)); if (h == 0) { GSL_ERROR_VAL ("failed to allocate space for histogram2d struct", GSL_ENOMEM, 0); } h->xrange = (double *) malloc ((nx + 1) * sizeof (double)); if (h->xrange == 0) { free (h); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for histogram2d x ranges", GSL_ENOMEM, 0); } h->yrange = (double *) malloc ((ny + 1) * sizeof (double)); if (h->yrange == 0) { free (h->xrange); free (h); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for histogram2d y ranges", GSL_ENOMEM, 0); } h->bin = (double *) malloc (nx * ny * sizeof (double)); if (h->bin == 0) { free (h->xrange); free (h->yrange); free (h); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for histogram bins", GSL_ENOMEM, 0); } { size_t i; for (i = 0; i < nx + 1; i++) { h->xrange[i] = i; } for (i = 0; i < ny + 1; i++) { h->yrange[i] = i; } for (i = 0; i < nx * ny; i++) { h->bin[i] = 0; } } h->nx = nx; h->ny = ny; return h; } void gsl_histogram2d_free (gsl_histogram2d * h) { RETURN_IF_NULL (h); free (h->xrange); free (h->yrange); free (h->bin); free (h); } int gsl_histogram2d_set_ranges_uniform (gsl_histogram2d * h, double xmin, double xmax, double ymin, double ymax) { size_t i; const size_t nx = h->nx, ny = h->ny; if (xmin >= xmax) { GSL_ERROR_VAL ("xmin must be less than xmax", GSL_EINVAL, 0); } if (ymin >= ymax) { GSL_ERROR_VAL ("ymin must be less than ymax", GSL_EINVAL, 0); } /* initialize ranges */ make_uniform (h->xrange, nx, xmin, xmax); make_uniform (h->yrange, ny, ymin, ymax); /* clear contents */ for (i = 0; i < nx * ny; i++) { h->bin[i] = 0; } return GSL_SUCCESS; } int gsl_histogram2d_set_ranges (gsl_histogram2d * h, const double xrange[], size_t xsize, const double yrange[], size_t ysize) { size_t i; const size_t nx = h->nx, ny = h->ny; if (xsize != (nx + 1)) { GSL_ERROR_VAL ("size of xrange must match size of histogram", GSL_EINVAL, 0); } if (ysize != (ny + 1)) { GSL_ERROR_VAL ("size of yrange must match size of histogram", GSL_EINVAL, 0); } /* initialize ranges */ for (i = 0; i <= nx; i++) { h->xrange[i] = xrange[i]; } for (i = 0; i <= ny; i++) { h->yrange[i] = yrange[i]; } /* clear contents */ for (i = 0; i < nx * ny; i++) { h->bin[i] = 0; } return GSL_SUCCESS; } gsl/histogram/calloc_range2d.c0000644000175000017500000000734013536674414014736 0ustar eddedd/* gsl_histogram2d_calloc_range.c * Copyright (C) 2000 Simone Piccardi * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /*************************************************************** * * File gsl_histogram2d_calloc_range.c: * Routine to create a variable binning 2D histogram providing * the input range vectors. Need GSL library and header. * Do range check and allocate the histogram data. * * Author: S. Piccardi * Jan. 2000 * ***************************************************************/ #include #include #include #include /* * Routine that create a 2D histogram using the given * values for X and Y ranges */ gsl_histogram2d * gsl_histogram2d_calloc_range (size_t nx, size_t ny, double *xrange, double *yrange) { size_t i, j; gsl_histogram2d *h; /* check arguments */ if (nx == 0) { GSL_ERROR_VAL ("histogram length nx must be positive integer", GSL_EDOM, 0); } if (ny == 0) { GSL_ERROR_VAL ("histogram length ny must be positive integer", GSL_EDOM, 0); } /* init ranges */ for (i = 0; i < nx; i++) { if (xrange[i] >= xrange[i + 1]) { GSL_ERROR_VAL ("histogram xrange not in increasing order", GSL_EDOM, 0); } } for (j = 0; j < ny; j++) { if (yrange[j] >= yrange[j + 1]) { GSL_ERROR_VAL ("histogram yrange not in increasing order" ,GSL_EDOM, 0); } } /* Allocate histogram */ h = (gsl_histogram2d *) malloc (sizeof (gsl_histogram2d)); if (h == 0) { GSL_ERROR_VAL ("failed to allocate space for histogram struct", GSL_ENOMEM, 0); } h->xrange = (double *) malloc ((nx + 1) * sizeof (double)); if (h->xrange == 0) { /* exception in constructor, avoid memory leak */ free (h); GSL_ERROR_VAL ("failed to allocate space for histogram xrange", GSL_ENOMEM, 0); } h->yrange = (double *) malloc ((ny + 1) * sizeof (double)); if (h->yrange == 0) { /* exception in constructor, avoid memory leak */ free (h); GSL_ERROR_VAL ("failed to allocate space for histogram yrange", GSL_ENOMEM, 0); } h->bin = (double *) malloc (nx * ny * sizeof (double)); if (h->bin == 0) { /* exception in constructor, avoid memory leak */ free (h->xrange); free (h->yrange); free (h); GSL_ERROR_VAL ("failed to allocate space for histogram bins", GSL_ENOMEM, 0); } /* init histogram */ /* init ranges */ for (i = 0; i <= nx; i++) { h->xrange[i] = xrange[i]; } for (j = 0; j <= ny; j++) { h->yrange[j] = yrange[j]; } /* clear contents */ for (i = 0; i < nx; i++) { for (j = 0; j < ny; j++) { h->bin[i * ny + j] = 0; } } h->nx = nx; h->ny = ny; return h; } gsl/histogram/params.c0000644000175000017500000000217413536674414013362 0ustar eddedd/* histogram/params.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include double gsl_histogram_max (const gsl_histogram * h) { const int n = h->n; return h->range[n]; } double gsl_histogram_min (const gsl_histogram * h) { return h->range[0]; } size_t gsl_histogram_bins (const gsl_histogram * h) { return h->n; } gsl/histogram/test2d.c0000644000175000017500000004355713536674414013316 0ustar eddedd/* histogram/test2d.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #define M 107 #define N 239 #define M1 17 #define N1 23 #define MR 10 #define NR 5 void test2d (void) { double xr[MR + 1] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 }; double yr[NR + 1] = { 90.0, 91.0, 92.0, 93.0, 94.0, 95.0 }; gsl_histogram2d *h, *h1, *g, *hr; size_t i, j, k; gsl_ieee_env_setup (); h = gsl_histogram2d_calloc (M, N); h1 = gsl_histogram2d_calloc (M, N); g = gsl_histogram2d_calloc (M, N); gsl_test (h->xrange == 0, "gsl_histogram2d_calloc returns valid xrange pointer"); gsl_test (h->yrange == 0, "gsl_histogram2d_calloc returns valid yrange pointer"); gsl_test (h->bin == 0, "gsl_histogram2d_calloc returns valid bin pointer"); gsl_test (h->nx != M, "gsl_histogram2d_calloc returns valid nx"); gsl_test (h->ny != N, "gsl_histogram2d_calloc returns valid ny"); hr = gsl_histogram2d_calloc_range (MR, NR, xr, yr); gsl_test (hr->xrange == 0, "gsl_histogram2d_calloc_range returns valid xrange pointer"); gsl_test (hr->yrange == 0, "gsl_histogram2d_calloc_range returns valid yrange pointer"); gsl_test (hr->bin == 0, "gsl_histogram2d_calloc_range returns valid bin pointer"); gsl_test (hr->nx != MR, "gsl_histogram2d_calloc_range returns valid nx"); gsl_test (hr->ny != NR, "gsl_histogram2d_calloc_range returns valid ny"); { int status = 0; for (i = 0; i <= MR; i++) { if (hr->xrange[i] != xr[i]) { status = 1; } }; gsl_test (status, "gsl_histogram2d_calloc_range creates xrange"); } { int status = 0; for (i = 0; i <= NR; i++) { if (hr->yrange[i] != yr[i]) { status = 1; } }; gsl_test (status, "gsl_histogram2d_calloc_range creates yrange"); } for (i = 0; i <= MR; i++) { hr->xrange[i] = 0.0; } for (i = 0; i <= NR; i++) { hr->yrange[i] = 0.0; } { int status = gsl_histogram2d_set_ranges (hr, xr, MR + 1, yr, NR + 1); for (i = 0; i <= MR; i++) { if (hr->xrange[i] != xr[i]) { status = 1; } }; gsl_test (status, "gsl_histogram2d_set_ranges sets xrange"); } { int status = 0; for (i = 0; i <= NR; i++) { if (hr->yrange[i] != yr[i]) { status = 1; } }; gsl_test (status, "gsl_histogram2d_set_ranges sets yrange"); } k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; gsl_histogram2d_accumulate (h, (double) i, (double) j, (double) k); }; } { int status = 0; k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; if (h->bin[i * N + j] != (double) k) { status = 1; } } } gsl_test (status, "gsl_histogram2d_accumulate writes into array"); } { int status = 0; k = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { k++; if (gsl_histogram2d_get (h, i, j) != (double) k) status = 1; }; } gsl_test (status, "gsl_histogram2d_get reads from array"); } for (i = 0; i <= M; i++) { h1->xrange[i] = 100.0 + i; } for (i = 0; i <= N; i++) { h1->yrange[i] = 900.0 + i * i; } gsl_histogram2d_memcpy (h1, h); { int status = 0; for (i = 0; i <= M; i++) { if (h1->xrange[i] != h->xrange[i]) status = 1; }; gsl_test (status, "gsl_histogram2d_memcpy copies bin xranges"); } { int status = 0; for (i = 0; i <= N; i++) { if (h1->yrange[i] != h->yrange[i]) status = 1; }; gsl_test (status, "gsl_histogram2d_memcpy copies bin yranges"); } { int status = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { if (gsl_histogram2d_get (h1, i, j) != gsl_histogram2d_get (h, i, j)) status = 1; } } gsl_test (status, "gsl_histogram2d_memcpy copies bin values"); } gsl_histogram2d_free (h1); h1 = gsl_histogram2d_clone (h); { int status = 0; for (i = 0; i <= M; i++) { if (h1->xrange[i] != h->xrange[i]) status = 1; }; gsl_test (status, "gsl_histogram2d_clone copies bin xranges"); } { int status = 0; for (i = 0; i <= N; i++) { if (h1->yrange[i] != h->yrange[i]) status = 1; }; gsl_test (status, "gsl_histogram2d_clone copies bin yranges"); } { int status = 0; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { if (gsl_histogram2d_get (h1, i, j) != gsl_histogram2d_get (h, i, j)) status = 1; } } gsl_test (status, "gsl_histogram2d_clone copies bin values"); } gsl_histogram2d_reset (h); { int status = 0; for (i = 0; i < M * N; i++) { if (h->bin[i] != 0) status = 1; } gsl_test (status, "gsl_histogram2d_reset zeros array"); } gsl_histogram2d_free (h); h = gsl_histogram2d_calloc (M1, N1); { int status = 0; for (i = 0; i < M1; i++) { for (j = 0; j < N1; j++) { gsl_histogram2d_increment (h, (double) i, (double) j); for (k = 0; k <= i * N1 + j; k++) { if (h->bin[k] != 1) { status = 1; } } for (k = i * N1 + j + 1; k < M1 * N1; k++) { if (h->bin[k] != 0) { status = 1; } } } } gsl_test (status, "gsl_histogram2d_increment increases bin value"); } gsl_histogram2d_free (h); h = gsl_histogram2d_calloc (M, N); { int status = 0; for (i = 0; i < M; i++) { double x0 = 0, x1 = 0; gsl_histogram2d_get_xrange (h, i, &x0, &x1); if (x0 != i || x1 != i + 1) { status = 1; } } gsl_test (status, "gsl_histogram2d_get_xlowerlimit and xupperlimit"); } { int status = 0; for (i = 0; i < N; i++) { double y0 = 0, y1 = 0; gsl_histogram2d_get_yrange (h, i, &y0, &y1); if (y0 != i || y1 != i + 1) { status = 1; } } gsl_test (status, "gsl_histogram2d_get_ylowerlimit and yupperlimit"); } { int status = 0; if (gsl_histogram2d_xmax (h) != M) status = 1; gsl_test (status, "gsl_histogram2d_xmax"); } { int status = 0; if (gsl_histogram2d_xmin (h) != 0) status = 1; gsl_test (status, "gsl_histogram2d_xmin"); } { int status = 0; if (gsl_histogram2d_nx (h) != M) status = 1; gsl_test (status, "gsl_histogram2d_nx"); } { int status = 0; if (gsl_histogram2d_ymax (h) != N) status = 1; gsl_test (status, "gsl_histogram2d_ymax"); } { int status = 0; if (gsl_histogram2d_ymin (h) != 0) status = 1; gsl_test (status, "gsl_histogram2d_ymin"); } { int status = 0; if (gsl_histogram2d_ny (h) != N) status = 1; gsl_test (status, "gsl_histogram2d_ny"); } h->bin[3 * N + 2] = 123456.0; h->bin[4 * N + 3] = -654321; { double max = gsl_histogram2d_max_val (h); gsl_test (max != 123456.0, "gsl_histogram2d_max_val finds maximum value"); } { double min = gsl_histogram2d_min_val (h); gsl_test (min != -654321.0, "gsl_histogram2d_min_val finds minimum value"); } { size_t imax, jmax; gsl_histogram2d_max_bin (h, &imax, &jmax); gsl_test (imax != 3 || jmax != 2, "gsl_histogram2d_max_bin finds maximum value bin"); } { size_t imin, jmin; gsl_histogram2d_min_bin (h, &imin, &jmin); gsl_test (imin != 4 || jmin != 3, "gsl_histogram2d_min_bin find minimum value bin"); } for (i = 0; i < M * N; i++) { h->bin[i] = i + 27; g->bin[i] = (i + 27) * (i + 1); } { double sum = gsl_histogram2d_sum (h); gsl_test (sum != N * M * 27 + ((N * M - 1) * N * M) / 2, "gsl_histogram2d_sum sums all bin values"); } { /* first test... */ const double xpos = 0.6; const double ypos = 0.85; double xmean; double ymean; size_t xbin; size_t ybin; gsl_histogram2d *h3 = gsl_histogram2d_alloc (M, N); gsl_histogram2d_set_ranges_uniform (h3, 0, 1, 0, 1); gsl_histogram2d_increment (h3, xpos, ypos); gsl_histogram2d_find (h3, xpos, ypos, &xbin, &ybin); xmean = gsl_histogram2d_xmean (h3); ymean = gsl_histogram2d_ymean (h3); { double expected_xmean = (h3->xrange[xbin] + h3->xrange[xbin + 1]) / 2.0; double expected_ymean = (h3->yrange[ybin] + h3->yrange[ybin + 1]) / 2.0; gsl_test_abs (xmean, expected_xmean, 100.0 * GSL_DBL_EPSILON, "gsl_histogram2d_xmean"); gsl_test_abs (ymean, expected_ymean, 100.0 * GSL_DBL_EPSILON, "gsl_histogram2d_ymean"); }; gsl_histogram2d_free (h3); } { /* test it with bivariate normal distribution */ const double xmean = 0.7; const double ymean = 0.7; const double xsigma = 0.1; const double ysigma = 0.1; const double correl = 0.5; const double norm = 10.0 / M_PI / xsigma / ysigma / sqrt (1.0 - correl * correl); size_t xbin; size_t ybin; gsl_histogram2d *h3 = gsl_histogram2d_alloc (M, N); gsl_histogram2d_set_ranges_uniform (h3, 0, 1, 0, 1); /* initialize with 2d gauss pdf in two directions */ for (xbin = 0; xbin < M; xbin++) { double xi = ((h3->xrange[xbin] + h3->xrange[xbin + 1]) / 2.0 - xmean) / xsigma; for (ybin = 0; ybin < N; ybin++) { double yi = ((h3->yrange[ybin] + h3->yrange[ybin + 1]) / 2.0 - ymean) / ysigma; double prob = norm * exp (-(xi * xi - 2.0 * correl * xi * yi + yi * yi) / 2.0 / (1 - correl * correl)); h3->bin[xbin * N + ybin] = prob; } } { double xs = gsl_histogram2d_xsigma (h3); double ys = gsl_histogram2d_ysigma (h3); /* evaluate results and compare with parameters */ gsl_test_abs (gsl_histogram2d_xmean (h3), xmean, 2.0/M, "gsl_histogram2d_xmean histogram mean(x)"); gsl_test_abs (gsl_histogram2d_ymean (h3), ymean, 2.0/N, "gsl_histogram2d_ymean histogram mean(y)"); gsl_test_abs (xs, xsigma, 2.0/M, "gsl_histogram2d_xsigma histogram stdev(x)"); gsl_test_abs (ys, ysigma, 2.0/N, "gsl_histogram2d_ysigma histogram stdev(y)"); gsl_test_abs (gsl_histogram2d_cov (h3) / xs / ys, correl, 2.0/((M < N) ? M : N), "gsl_histogram2d_cov histogram covariance"); } gsl_histogram2d_free (h3); } gsl_histogram2d_memcpy (h1, g); gsl_histogram2d_add (h1, h); { int status = 0; for (i = 0; i < M * N; i++) { if (h1->bin[i] != g->bin[i] + h->bin[i]) status = 1; } gsl_test (status, "gsl_histogram2d_add histogram addition"); } gsl_histogram2d_memcpy (h1, g); gsl_histogram2d_sub (h1, h); { int status = 0; for (i = 0; i < M * N; i++) { if (h1->bin[i] != g->bin[i] - h->bin[i]) status = 1; } gsl_test (status, "gsl_histogram2d_sub histogram subtraction"); } gsl_histogram2d_memcpy (h1, g); gsl_histogram2d_mul (h1, h); { int status = 0; for (i = 0; i < M * N; i++) { if (h1->bin[i] != g->bin[i] * h->bin[i]) status = 1; } gsl_test (status, "gsl_histogram2d_mul histogram multiplication"); } gsl_histogram2d_memcpy (h1, g); gsl_histogram2d_div (h1, h); { int status = 0; for (i = 0; i < M * N; i++) { if (h1->bin[i] != g->bin[i] / h->bin[i]) status = 1; } gsl_test (status, "gsl_histogram2d_div histogram division"); } gsl_histogram2d_memcpy (h1, g); gsl_histogram2d_scale (h1, 0.5); { int status = 0; for (i = 0; i < M * N; i++) { if (h1->bin[i] != 0.5 * g->bin[i]) status = 1; } gsl_test (status, "gsl_histogram2d_scale histogram scaling"); } gsl_histogram2d_memcpy (h1, g); gsl_histogram2d_shift (h1, 0.25); { int status = 0; for (i = 0; i < M * N; i++) { if (h1->bin[i] != 0.25 + g->bin[i]) status = 1; } gsl_test (status, "gsl_histogram2d_shift histogram shift"); } gsl_histogram2d_free (h); /* free whatever is in h */ h = gsl_histogram2d_calloc_uniform (M1, N1, 0.0, 5.0, 0.0, 5.0); gsl_test (h->xrange == 0, "gsl_histogram2d_calloc_uniform returns valid range pointer"); gsl_test (h->yrange == 0, "gsl_histogram2d_calloc_uniform returns valid range pointer"); gsl_test (h->bin == 0, "gsl_histogram2d_calloc_uniform returns valid bin pointer"); gsl_test (h->nx != M1, "gsl_histogram2d_calloc_uniform returns valid nx"); gsl_test (h->ny != N1, "gsl_histogram2d_calloc_uniform returns valid ny"); gsl_histogram2d_accumulate (h, 0.0, 3.01, 1.0); gsl_histogram2d_accumulate (h, 0.1, 2.01, 2.0); gsl_histogram2d_accumulate (h, 0.2, 1.01, 3.0); gsl_histogram2d_accumulate (h, 0.3, 0.01, 4.0); { size_t i1, i2, i3, i4; size_t j1, j2, j3, j4; double expected; int status; status = gsl_histogram2d_find (h, 0.0, 3.01, &i1, &j1); status = gsl_histogram2d_find (h, 0.1, 2.01, &i2, &j2); status = gsl_histogram2d_find (h, 0.2, 1.01, &i3, &j3); status = gsl_histogram2d_find (h, 0.3, 0.01, &i4, &j4); for (i = 0; i < M1; i++) { for (j = 0; j < N1; j++) { if (i == i1 && j == j1) { expected = 1.0; } else if (i == i2 && j == j2) { expected = 2.0; } else if (i == i3 && j == j3) { expected = 3.0; } else if (i == i4 && j == j4) { expected = 4.0; } else { expected = 0.0; } if (h->bin[i * N1 + j] != expected) { status = 1; } } } gsl_test (status, "gsl_histogram2d_find returns index"); } { FILE *f = fopen ("test.txt", "w"); gsl_histogram2d_fprintf (f, h, "%.19e", "%.19e"); fclose (f); } { FILE *f = fopen ("test.txt", "r"); gsl_histogram2d *hh = gsl_histogram2d_calloc (M1, N1); int status = 0; gsl_histogram2d_fscanf (f, hh); for (i = 0; i <= M1; i++) { if (h->xrange[i] != hh->xrange[i]) { printf ("xrange[%d] : %g orig vs %g\n", (int) i, h->xrange[i], hh->xrange[i]); status = 1; } } for (j = 0; j <= N1; j++) { if (h->yrange[j] != hh->yrange[j]) { printf ("yrange[%d] : %g orig vs %g\n", (int) j, h->yrange[j], hh->yrange[j]); status = 1; } } for (i = 0; i < M1 * N1; i++) { if (h->bin[i] != hh->bin[i]) { printf ("bin[%d] : %g orig vs %g\n", (int) i, h->bin[i], hh->bin[i]); status = 1; } } gsl_test (status, "gsl_histogram2d_fprintf and fscanf"); gsl_histogram2d_free (hh); fclose (f); } { FILE *f = fopen ("test.dat", "wb"); gsl_histogram2d_fwrite (f, h); fclose (f); } { FILE *f = fopen ("test.dat", "rb"); gsl_histogram2d *hh = gsl_histogram2d_calloc (M1, N1); int status = 0; gsl_histogram2d_fread (f, hh); for (i = 0; i <= M1; i++) { if (h->xrange[i] != hh->xrange[i]) { printf ("xrange[%d] : %g orig vs %g\n", (int) i, h->xrange[i], hh->xrange[i]); status = 1; } } for (j = 0; j <= N1; j++) { if (h->yrange[j] != hh->yrange[j]) { printf ("yrange[%d] : %g orig vs %g\n", (int) j, h->yrange[j], hh->yrange[j]); status = 1; } } for (i = 0; i < M1 * N1; i++) { if (h->bin[i] != hh->bin[i]) { printf ("bin[%d] : %g orig vs %g\n", (int) i, h->bin[i], hh->bin[i]); status = 1; } } gsl_test (status, "gsl_histogram2d_fwrite and fread"); gsl_histogram2d_free (hh); fclose (f); } gsl_histogram2d_free (h); gsl_histogram2d_free (h1); gsl_histogram2d_free (g); gsl_histogram2d_free (hr); } gsl/histogram/find2d.c0000644000175000017500000000255513536674414013250 0ustar eddedd/* histogram/find2d.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "find.c" static int find2d (const size_t nx, const double xrange[], const size_t ny, const double yrange[], const double x, const double y, size_t * i, size_t * j); static int find2d (const size_t nx, const double xrange[], const size_t ny, const double yrange[], const double x, const double y, size_t * i, size_t * j) { int status = find (nx, xrange, x, i); if (status) { return status; } status = find (ny, yrange, y, j); if (status) { return status; } return 0; } gsl/histogram/reset2d.c0000644000175000017500000000207613536674414013450 0ustar eddedd/* histogram/reset2d.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include void gsl_histogram2d_reset (gsl_histogram2d * h) { size_t i; const size_t nx = h->nx; const size_t ny = h->ny; for (i = 0; i < nx * ny; i++) { h->bin[i] = 0; } } gsl/histogram/reset.c0000644000175000017500000000202313536674414013212 0ustar eddedd/* histogram/reset.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include void gsl_histogram_reset (gsl_histogram * h) { size_t i; const size_t n = h->n; for (i = 0; i < n; i++) { h->bin[i] = 0; } } gsl/histogram/stat2d.c0000644000175000017500000001327213536674414013301 0ustar eddedd/* histogram/stat2d.c * Copyright (C) 2002 Achim Gaedke * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /*************************************************************** * * File histogram/stat2d.c: * Routine to return statistical values of the content of a 2D hisogram. * * Contains the routines: * gsl_histogram2d_sum sum up all bin values * gsl_histogram2d_xmean determine mean of x values * gsl_histogram2d_ymean determine mean of y values * * Author: Achim Gaedke Achim.Gaedke@zpr.uni-koeln.de * Jan. 2002 * ***************************************************************/ #include #include #include #include /* sum up all bins of histogram2d */ double gsl_histogram2d_sum (const gsl_histogram2d * h) { const size_t n = h->nx * h->ny; double sum = 0; size_t i = 0; while (i < n) sum += h->bin[i++]; return sum; } double gsl_histogram2d_xmean (const gsl_histogram2d * h) { const size_t nx = h->nx; const size_t ny = h->ny; size_t i; size_t j; /* Compute the bin-weighted arithmetic mean M of a histogram using the recurrence relation M(n) = M(n-1) + (x[n] - M(n-1)) (w(n)/(W(n-1) + w(n))) W(n) = W(n-1) + w(n) */ long double wmean = 0; long double W = 0; for (i = 0; i < nx; i++) { double xi = (h->xrange[i + 1] + h->xrange[i]) / 2.0; double wi = 0; for (j = 0; j < ny; j++) { double wij = h->bin[i * ny + j]; if (wij > 0) wi += wij; } if (wi > 0) { W += wi; wmean += (xi - wmean) * (wi / W); } } return wmean; } double gsl_histogram2d_ymean (const gsl_histogram2d * h) { const size_t nx = h->nx; const size_t ny = h->ny; size_t i; size_t j; /* Compute the bin-weighted arithmetic mean M of a histogram using the recurrence relation M(n) = M(n-1) + (x[n] - M(n-1)) (w(n)/(W(n-1) + w(n))) W(n) = W(n-1) + w(n) */ long double wmean = 0; long double W = 0; for (j = 0; j < ny; j++) { double yj = (h->yrange[j + 1] + h->yrange[j]) / 2.0; double wj = 0; for (i = 0; i < nx; i++) { double wij = h->bin[i * ny + j]; if (wij > 0) wj += wij; } if (wj > 0) { W += wj; wmean += (yj - wmean) * (wj / W); } } return wmean; } double gsl_histogram2d_xsigma (const gsl_histogram2d * h) { const double xmean = gsl_histogram2d_xmean (h); const size_t nx = h->nx; const size_t ny = h->ny; size_t i; size_t j; /* Compute the bin-weighted arithmetic mean M of a histogram using the recurrence relation M(n) = M(n-1) + (x[n] - M(n-1)) (w(n)/(W(n-1) + w(n))) W(n) = W(n-1) + w(n) */ long double wvariance = 0; long double W = 0; for (i = 0; i < nx; i++) { double xi = (h->xrange[i + 1] + h->xrange[i]) / 2 - xmean; double wi = 0; for (j = 0; j < ny; j++) { double wij = h->bin[i * ny + j]; if (wij > 0) wi += wij; } if (wi > 0) { W += wi; wvariance += ((xi * xi) - wvariance) * (wi / W); } } { double xsigma = sqrt (wvariance); return xsigma; } } double gsl_histogram2d_ysigma (const gsl_histogram2d * h) { const double ymean = gsl_histogram2d_ymean (h); const size_t nx = h->nx; const size_t ny = h->ny; size_t i; size_t j; /* Compute the bin-weighted arithmetic mean M of a histogram using the recurrence relation M(n) = M(n-1) + (x[n] - M(n-1)) (w(n)/(W(n-1) + w(n))) W(n) = W(n-1) + w(n) */ long double wvariance = 0; long double W = 0; for (j = 0; j < ny; j++) { double yj = (h->yrange[j + 1] + h->yrange[j]) / 2.0 - ymean; double wj = 0; for (i = 0; i < nx; i++) { double wij = h->bin[i * ny + j]; if (wij > 0) wj += wij; } if (wj > 0) { W += wj; wvariance += ((yj * yj) - wvariance) * (wj / W); } } { double ysigma = sqrt (wvariance); return ysigma; } } double gsl_histogram2d_cov (const gsl_histogram2d * h) { const double xmean = gsl_histogram2d_xmean (h); const double ymean = gsl_histogram2d_ymean (h); const size_t nx = h->nx; const size_t ny = h->ny; size_t i; size_t j; /* Compute the bin-weighted arithmetic mean M of a histogram using the recurrence relation M(n) = M(n-1) + (x[n] - M(n-1)) (w(n)/(W(n-1) + w(n))) W(n) = W(n-1) + w(n) */ long double wcovariance = 0; long double W = 0; for (j = 0; j < ny; j++) { for (i = 0; i < nx; i++) { double xi = (h->xrange[i + 1] + h->xrange[i]) / 2.0 - xmean; double yj = (h->yrange[j + 1] + h->yrange[j]) / 2.0 - ymean; double wij = h->bin[i * ny + j]; if (wij > 0) { W += wij; wcovariance += ((xi * yj) - wcovariance) * (wij / W); } } } return wcovariance; } gsl/histogram/calloc_range.c0000644000175000017500000000533313536674414014510 0ustar eddedd/* gsl_histogram_calloc_range.c * Copyright (C) 2000 Simone Piccardi * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /*************************************************************** * * File gsl_histogram_calloc_range.c: * Routine to create a variable binning histogram providing * an input range vector. Need GSL library and header. * Do range check and allocate the histogram data. * * Author: S. Piccardi * Jan. 2000 * ***************************************************************/ #include #include #include #include gsl_histogram * gsl_histogram_calloc_range (size_t n, double *range) { size_t i; gsl_histogram *h; /* check arguments */ if (n == 0) { GSL_ERROR_VAL ("histogram length n must be positive integer", GSL_EDOM, 0); } /* check ranges */ for (i = 0; i < n; i++) { if (range[i] >= range[i + 1]) { GSL_ERROR_VAL ("histogram bin extremes must be " "in increasing order", GSL_EDOM, 0); } } /* Allocate histogram */ h = (gsl_histogram *) malloc (sizeof (gsl_histogram)); if (h == 0) { GSL_ERROR_VAL ("failed to allocate space for histogram struct", GSL_ENOMEM, 0); } h->range = (double *) malloc ((n + 1) * sizeof (double)); if (h->range == 0) { /* exception in constructor, avoid memory leak */ free (h); GSL_ERROR_VAL ("failed to allocate space for histogram ranges", GSL_ENOMEM, 0); } h->bin = (double *) malloc (n * sizeof (double)); if (h->bin == 0) { /* exception in constructor, avoid memory leak */ free (h->range); free (h); GSL_ERROR_VAL ("failed to allocate space for histogram bins", GSL_ENOMEM, 0); } /* initialize ranges */ for (i = 0; i <= n; i++) { h->range[i] = range[i]; } /* clear contents */ for (i = 0; i < n; i++) { h->bin[i] = 0; } h->n = n; return h; } gsl/histogram/test1d_resample.c0000644000175000017500000000506613536674414015176 0ustar eddedd/* histogram/test1d_resample.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include "urand.c" void test1d_resample (void) { size_t i; int status = 0; gsl_histogram *h; gsl_ieee_env_setup (); h = gsl_histogram_calloc_uniform (10, 0.0, 1.0); gsl_histogram_increment (h, 0.1); gsl_histogram_increment (h, 0.2); gsl_histogram_increment (h, 0.2); gsl_histogram_increment (h, 0.3); { gsl_histogram_pdf *p = gsl_histogram_pdf_alloc (10); gsl_histogram *hh = gsl_histogram_calloc_uniform (100, 0.0, 1.0); gsl_histogram_pdf_init (p, h); for (i = 0; i < 100000; i++) { double u = urand(); double x = gsl_histogram_pdf_sample (p, u); gsl_histogram_increment (hh, x); } for (i = 0; i < 100; i++) { double y = gsl_histogram_get (hh, i) / 2500; double x, xmax; size_t k; double ya; gsl_histogram_get_range (hh, i, &x, &xmax); gsl_histogram_find (h, x, &k); ya = gsl_histogram_get (h, k); if (ya == 0) { if (y != 0) { printf ("%d: %g vs %g\n", (int) i, y, ya); status = 1; } } else { double err = 1 / sqrt (gsl_histogram_get (hh, i)); double sigma = fabs ((y - ya) / (ya * err)); if (sigma > 3) { status = 1; printf ("%g vs %g err=%g sigma=%g\n", y, ya, err, sigma); } } } gsl_histogram_pdf_free (p) ; gsl_histogram_free (hh); gsl_test (status, "gsl_histogram_pdf_sample within statistical errors"); } gsl_histogram_free (h); } gsl/histogram/copy2d.c0000644000175000017500000000447613536674414013306 0ustar eddedd/* gsl_histogram2d_copy.c * Copyright (C) 2000 Simone Piccardi * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /*************************************************************** * * File gsl_histogram2d_copy.c: * Routine to copy a 2D histogram. * Need GSL library and header. * * Author: S. Piccardi * Jan. 2000 * ***************************************************************/ #include #include #include #include /* * gsl_histogram2d_copy: * copy the contents of an histogram into another */ int gsl_histogram2d_memcpy (gsl_histogram2d * dest, const gsl_histogram2d * src) { size_t nx = src->nx; size_t ny = src->ny; size_t i; if (dest->nx != src->nx || dest->ny != src->ny) { GSL_ERROR ("histograms have different sizes, cannot copy", GSL_EINVAL); } for (i = 0; i <= nx; i++) { dest->xrange[i] = src->xrange[i]; } for (i = 0; i <= ny; i++) { dest->yrange[i] = src->yrange[i]; } for (i = 0; i < nx * ny; i++) { dest->bin[i] = src->bin[i]; } return GSL_SUCCESS; } /* * gsl_histogram2d_duplicate: * duplicate an histogram creating * an identical new one */ gsl_histogram2d * gsl_histogram2d_clone (const gsl_histogram2d * src) { size_t nx = src->nx; size_t ny = src->ny; size_t i; gsl_histogram2d *h; h = gsl_histogram2d_calloc_range (nx, ny, src->xrange, src->yrange); if (h == 0) { GSL_ERROR_VAL ("failed to allocate space for histogram struct", GSL_ENOMEM, 0); } for (i = 0; i < nx * ny; i++) { h->bin[i] = src->bin[i]; } return h; } gsl/histogram/test1d.c0000644000175000017500000002430513536674414013303 0ustar eddedd/* histogram/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #define N 397 #define NR 10 void test1d (void) { double xr[NR + 1] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0}; gsl_histogram *h, *h1, *hr, *g; size_t i, j; gsl_ieee_env_setup (); h = gsl_histogram_calloc (N); h1 = gsl_histogram_calloc (N); g = gsl_histogram_calloc (N); gsl_test (h->range == 0, "gsl_histogram_alloc returns valid range pointer"); gsl_test (h->bin == 0, "gsl_histogram_alloc returns valid bin pointer"); gsl_test (h->n != N, "gsl_histogram_alloc returns valid size"); hr = gsl_histogram_calloc_range (NR, xr); gsl_test (hr->range == 0, "gsl_histogram_calloc_range returns valid range pointer"); gsl_test (hr->bin == 0, "gsl_histogram_calloc_range returns valid bin pointer"); gsl_test (hr->n != NR, "gsl_histogram_calloc_range returns valid size"); { int status = 0; for (i = 0; i <= NR; i++) { if (hr->range[i] != xr[i]) { status = 1; } }; gsl_test (status, "gsl_histogram_calloc_range creates range"); } for (i = 0; i <= NR; i++) { hr->range[i] = 0.0; } { int status = gsl_histogram_set_ranges (hr, xr, NR+1); for (i = 0; i <= NR; i++) { if (hr->range[i] != xr[i]) { status = 1; } }; gsl_test (status, "gsl_histogram_set_range sets range"); } for (i = 0; i < N; i++) { gsl_histogram_accumulate (h, (double) i, (double) i); }; { int status = 0; for (i = 0; i < N; i++) { if (h->bin[i] != (double) i) { status = 1; } }; gsl_test (status, "gsl_histogram_accumulate writes into array"); } { int status = 0; for (i = 0; i < N; i++) { if (gsl_histogram_get (h, i) != i) status = 1; }; gsl_test (status, "gsl_histogram_get reads from array"); } for (i = 0; i <= N; i++) { h1->range[i] = 100.0 + i; } gsl_histogram_memcpy (h1, h); { int status = 0; for (i = 0; i <= N; i++) { if (h1->range[i] != h->range[i]) status = 1; }; gsl_test (status, "gsl_histogram_memcpy copies bin ranges"); } { int status = 0; for (i = 0; i < N; i++) { if (gsl_histogram_get (h1, i) != gsl_histogram_get (h, i)) status = 1; }; gsl_test (status, "gsl_histogram_memcpy copies bin values"); } gsl_histogram_free (h1); h1 = gsl_histogram_clone (h); { int status = 0; for (i = 0; i <= N; i++) { if (h1->range[i] != h->range[i]) status = 1; }; gsl_test (status, "gsl_histogram_clone copies bin ranges"); } { int status = 0; for (i = 0; i < N; i++) { if (gsl_histogram_get (h1, i) != gsl_histogram_get (h, i)) status = 1; }; gsl_test (status, "gsl_histogram_clone copies bin values"); } gsl_histogram_reset (h); { int status = 0; for (i = 0; i < N; i++) { if (h->bin[i] != 0) status = 1; } gsl_test (status, "gsl_histogram_reset zeros array"); } { int status = 0; for (i = 0; i < N; i++) { gsl_histogram_increment (h, (double) i); for (j = 0; j <= i; j++) { if (h->bin[j] != 1) { status = 1; } } for (j = i + 1; j < N; j++) { if (h->bin[j] != 0) { status = 1; } } } gsl_test (status, "gsl_histogram_increment increases bin value"); } { int status = 0; for (i = 0; i < N; i++) { double x0 = 0, x1 = 0; gsl_histogram_get_range (h, i, &x0, &x1); if (x0 != i || x1 != i + 1) { status = 1; } } gsl_test (status, "gsl_histogram_getbinrange returns bin range"); } { int status = 0; if (gsl_histogram_max (h) != N) status = 1; gsl_test (status, "gsl_histogram_max returns maximum"); } { int status = 0; if (gsl_histogram_min (h) != 0) status = 1; gsl_test (status, "gsl_histogram_min returns minimum"); } { int status = 0; if (gsl_histogram_bins (h) != N) status = 1; gsl_test (status, "gsl_histogram_bins returns number of bins"); } h->bin[2] = 123456.0; h->bin[4] = -654321; { double max = gsl_histogram_max_val (h); gsl_test (max != 123456.0, "gsl_histogram_max_val finds maximum value"); } { double min = gsl_histogram_min_val (h); gsl_test (min != -654321.0, "gsl_histogram_min_val finds minimum value"); } { size_t imax = gsl_histogram_max_bin (h); gsl_test (imax != 2, "gsl_histogram_max_bin finds maximum value bin"); } { size_t imin = gsl_histogram_min_bin (h); gsl_test (imin != 4, "gsl_histogram_min_bin find minimum value bin"); } for (i = 0; i < N; i++) { h->bin[i] = i + 27; g->bin[i] = (i + 27) * (i + 1); } { double sum=gsl_histogram_sum (h); gsl_test(sum != N*27+((N-1)*N)/2, "gsl_histogram_sum sums all bin values"); } gsl_histogram_memcpy (h1, g); gsl_histogram_add (h1, h); { int status = 0; for (i = 0; i < N; i++) { if (h1->bin[i] != g->bin[i] + h->bin[i]) status = 1; } gsl_test (status, "gsl_histogram_add histogram addition"); } gsl_histogram_memcpy (h1, g); gsl_histogram_sub (h1, h); { int status = 0; for (i = 0; i < N; i++) { if (h1->bin[i] != g->bin[i] - h->bin[i]) status = 1; } gsl_test (status, "gsl_histogram_sub histogram subtraction"); } gsl_histogram_memcpy (h1, g); gsl_histogram_mul (h1, h); { int status = 0; for (i = 0; i < N; i++) { if (h1->bin[i] != g->bin[i] * h->bin[i]) status = 1; } gsl_test (status, "gsl_histogram_mul histogram multiplication"); } gsl_histogram_memcpy (h1, g); gsl_histogram_div (h1, h); { int status = 0; for (i = 0; i < N; i++) { if (h1->bin[i] != g->bin[i] / h->bin[i]) status = 1; } gsl_test (status, "gsl_histogram_div histogram division"); } gsl_histogram_memcpy (h1, g); gsl_histogram_scale (h1, 0.5); { int status = 0; for (i = 0; i < N; i++) { if (h1->bin[i] != 0.5 * g->bin[i]) status = 1; } gsl_test (status, "gsl_histogram_scale histogram scaling"); } gsl_histogram_memcpy (h1, g); gsl_histogram_shift (h1, 0.25); { int status = 0; for (i = 0; i < N; i++) { if (h1->bin[i] != 0.25 + g->bin[i]) status = 1; } gsl_test (status, "gsl_histogram_shift histogram shift"); } gsl_histogram_free (h); /* free whatever is in h */ h = gsl_histogram_calloc_uniform (N, 0.0, 1.0); gsl_test (h->range == 0, "gsl_histogram_calloc_uniform returns valid range pointer"); gsl_test (h->bin == 0, "gsl_histogram_calloc_uniform returns valid bin pointer"); gsl_test (h->n != N, "gsl_histogram_calloc_uniform returns valid size"); gsl_histogram_accumulate (h, 0.0, 1.0); gsl_histogram_accumulate (h, 0.1, 2.0); gsl_histogram_accumulate (h, 0.2, 3.0); gsl_histogram_accumulate (h, 0.3, 4.0); { size_t i1, i2, i3, i4; double expected; int status = gsl_histogram_find (h, 0.0, &i1); status = gsl_histogram_find (h, 0.1, &i2); status = gsl_histogram_find (h, 0.2, &i3); status = gsl_histogram_find (h, 0.3, &i4); for (i = 0; i < N; i++) { if (i == i1) { expected = 1.0; } else if (i == i2) { expected = 2.0; } else if (i == i3) { expected = 3.0; } else if (i == i4) { expected = 4.0; } else { expected = 0.0; } if (h->bin[i] != expected) { status = 1; } } gsl_test (status, "gsl_histogram_find returns index"); } { FILE *f = fopen ("test.txt", "w"); gsl_histogram_fprintf (f, h, "%.19e", "%.19e"); fclose (f); } { FILE *f = fopen ("test.txt", "r"); gsl_histogram *hh = gsl_histogram_calloc (N); int status = 0; gsl_histogram_fscanf (f, hh); for (i = 0; i < N; i++) { if (h->range[i] != hh->range[i]) status = 1; if (h->bin[i] != hh->bin[i]) status = 1; } if (h->range[N] != hh->range[N]) status = 1; gsl_test (status, "gsl_histogram_fprintf and fscanf"); gsl_histogram_free (hh); fclose (f); } { FILE *f = fopen ("test.dat", "wb"); gsl_histogram_fwrite (f, h); fclose (f); } { FILE *f = fopen ("test.dat", "rb"); gsl_histogram *hh = gsl_histogram_calloc (N); int status = 0; gsl_histogram_fread (f, hh); for (i = 0; i < N; i++) { if (h->range[i] != hh->range[i]) status = 1; if (h->bin[i] != hh->bin[i]) status = 1; } if (h->range[N] != hh->range[N]) status = 1; gsl_test (status, "gsl_histogram_fwrite and fread"); gsl_histogram_free (hh); fclose (f); } gsl_histogram_free (h); gsl_histogram_free (g); gsl_histogram_free (h1); gsl_histogram_free (hr); } gsl/histogram/test1d_trap.c0000644000175000017500000001017013536674414014324 0ustar eddedd/* histogram/test_trap.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #define N 397 static void my_error_handler (const char *reason, const char *file, int line, int err); static int status = 0; void test1d_trap (void) { gsl_histogram *h; double result, lower, upper; size_t i; gsl_set_error_handler (&my_error_handler); gsl_ieee_env_setup (); status = 0; h = gsl_histogram_calloc (0); gsl_test (!status, "gsl_histogram_calloc traps zero-length histogram"); gsl_test (h != 0, "gsl_histogram_calloc returns NULL for zero-length histogram"); status = 0; h = gsl_histogram_calloc_uniform (0, 0.0, 1.0); gsl_test (!status, "gsl_histogram_calloc_uniform traps zero-length histogram"); gsl_test (h != 0, "gsl_histogram_calloc_uniform returns NULL for zero-length histogram"); status = 0; h = gsl_histogram_calloc_uniform (10, 1.0, 1.0); gsl_test (!status, "gsl_histogram_calloc_uniform traps equal endpoints"); gsl_test (h != 0, "gsl_histogram_calloc_uniform returns NULL for equal endpoints"); status = 0; h = gsl_histogram_calloc_uniform (10, 2.0, 1.0); gsl_test (!status, "gsl_histogram_calloc_uniform traps invalid range"); gsl_test (h != 0, "gsl_histogram_calloc_uniform returns NULL for invalid range"); h = gsl_histogram_calloc_uniform (N, 0.0, 1.0); status = gsl_histogram_accumulate (h, 1.0, 10.0); gsl_test (status != GSL_EDOM, "gsl_histogram_accumulate traps x at xmax"); status = gsl_histogram_accumulate (h, 2.0, 100.0); gsl_test (status != GSL_EDOM, "gsl_histogram_accumulate traps x above xmax"); status = gsl_histogram_accumulate (h, -1.0, 1000.0); gsl_test (status != GSL_EDOM, "gsl_histogram_accumulate traps x below xmin"); status = gsl_histogram_increment (h, 1.0); gsl_test (status != GSL_EDOM, "gsl_histogram_increment traps x at xmax"); status = gsl_histogram_increment (h, 2.0); gsl_test (status != GSL_EDOM, "gsl_histogram_increment traps x above xmax"); status = gsl_histogram_increment (h, -1.0); gsl_test (status != GSL_EDOM, "gsl_histogram_increment traps x below xmin"); result = gsl_histogram_get (h, N); gsl_test (result != 0, "gsl_histogram_get traps index at n"); result = gsl_histogram_get (h, N + 1); gsl_test (result != 0, "gsl_histogram_get traps index above n"); status = gsl_histogram_get_range (h, N, &lower, &upper); gsl_test (status != GSL_EDOM, "gsl_histogram_get_range traps index at n"); status = gsl_histogram_get_range (h, N + 1, &lower, &upper); gsl_test (status != GSL_EDOM, "gsl_histogram_get_range traps index above n"); status = 0; gsl_histogram_find (h, -0.01, &i); gsl_test (status != GSL_EDOM, "gsl_histogram_find traps x below xmin"); status = 0; gsl_histogram_find (h, 1.0, &i); gsl_test (status != GSL_EDOM, "gsl_histogram_find traps x at xmax"); status = 0; gsl_histogram_find (h, 1.1, &i); gsl_test (status != GSL_EDOM, "gsl_histogram_find traps x above xmax"); gsl_histogram_free (h); } static void my_error_handler (const char *reason, const char *file, int line, int err) { if (0) printf ("(caught [%s:%d: %s (%d)])\n", file, line, reason, err); status = 1; } gsl/histogram/add2d.c0000644000175000017500000000333013536674414013050 0ustar eddedd/* histogram/add2d.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include "find2d.c" int gsl_histogram2d_increment (gsl_histogram2d * h, double x, double y) { int status = gsl_histogram2d_accumulate (h, x, y, 1.0); return status; } int gsl_histogram2d_accumulate (gsl_histogram2d * h, double x, double y, double weight) { const size_t nx = h->nx; const size_t ny = h->ny; size_t i = 0, j = 0; int status = find2d (h->nx, h->xrange, h->ny, h->yrange, x, y, &i, &j); if (status) { return GSL_EDOM; } if (i >= nx) { GSL_ERROR ("index lies outside valid range of 0 .. nx - 1", GSL_ESANITY); } if (j >= ny) { GSL_ERROR ("index lies outside valid range of 0 .. ny - 1", GSL_ESANITY); } h->bin[i * ny + j] += weight; return GSL_SUCCESS; } gsl/histogram/oper2d.c0000644000175000017500000001025613536674414013272 0ustar eddedd/* gsl_histogram2d_oper.c * Copyright (C) 2000 Simone Piccardi * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /*************************************************************** * * File gsl_histogram2d_oper.c: * Routine to make operation on 2D histograms. * Need GSL library and header. * Contains the routines: * gsl_histogram2d_same_binning check if two histograms have the same binning * gsl_histogram2d_add add two histogram * gsl_histogram2d_sub subctract two histogram * gsl_histogram2d_mult multiply two histogram * gsl_histogram2d_div divide two histogram * gsl_histogram2d_scale scale histogram contents * * Author: S. Piccardi * Jan. 2000 * ***************************************************************/ #include #include #include #include /* * gsl_histogram2d_same_binning: * control if two histogram have the * same binning */ int gsl_histogram2d_equal_bins_p (const gsl_histogram2d * h1, const gsl_histogram2d * h2) { if ((h1->nx != h2->nx) || (h1->ny != h2->ny)) { return 0; } { size_t i; /* init ranges */ for (i = 0; i <= (h1->nx); i++) { if (h1->xrange[i] != h2->xrange[i]) { return 0; } } for (i = 0; i <= (h1->ny); i++) { if (h1->yrange[i] != h2->yrange[i]) { return 0; } } } return 1; } /* * gsl_histogram2d_add: * add two histogram */ int gsl_histogram2d_add (gsl_histogram2d * h1, const gsl_histogram2d * h2) { size_t i; if (!gsl_histogram2d_equal_bins_p (h1, h2)) { GSL_ERROR ("histograms have different binning", GSL_EINVAL); } for (i = 0; i < (h1->nx) * (h1->ny); i++) { h1->bin[i] += h2->bin[i]; } return GSL_SUCCESS; } /* * gsl_histogram2d_sub: * subtract two histogram */ int gsl_histogram2d_sub (gsl_histogram2d * h1, const gsl_histogram2d * h2) { size_t i; if (!gsl_histogram2d_equal_bins_p (h1, h2)) { GSL_ERROR ("histograms have different binning", GSL_EINVAL); } for (i = 0; i < (h1->nx) * (h1->ny); i++) { h1->bin[i] -= h2->bin[i]; } return GSL_SUCCESS; } /* * gsl_histogram2d_mult: * multiply two histogram */ int gsl_histogram2d_mul (gsl_histogram2d * h1, const gsl_histogram2d * h2) { size_t i; if (!gsl_histogram2d_equal_bins_p (h1, h2)) { GSL_ERROR ("histograms have different binning", GSL_EINVAL); } for (i = 0; i < (h1->nx) * (h1->ny); i++) { h1->bin[i] *= h2->bin[i]; } return GSL_SUCCESS; } /* * gsl_histogram2d_div: * divide two histogram */ int gsl_histogram2d_div (gsl_histogram2d * h1, const gsl_histogram2d * h2) { size_t i; if (!gsl_histogram2d_equal_bins_p (h1, h2)) { GSL_ERROR ("histograms have different binning", GSL_EINVAL); } for (i = 0; i < (h1->nx) * (h1->ny); i++) { h1->bin[i] /= h2->bin[i]; } return GSL_SUCCESS; } /* * gsl_histogram2d_scale: * scale a histogram by a numeric factor */ int gsl_histogram2d_scale (gsl_histogram2d * h, double scale) { size_t i; for (i = 0; i < (h->nx) * (h->ny); i++) { h->bin[i] *= scale; } return GSL_SUCCESS; } /* * gsl_histogram2d_shift: * shift a histogram by a numeric offset */ int gsl_histogram2d_shift (gsl_histogram2d * h, double shift) { size_t i; for (i = 0; i < (h->nx) * (h->ny); i++) { h->bin[i] += shift; } return GSL_SUCCESS; } gsl/histogram/gsl_histogram.h0000644000175000017500000001005413536674414014742 0ustar eddedd/* histogram/gsl_histogram.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_HISTOGRAM_H__ #define __GSL_HISTOGRAM_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t n ; double * range ; double * bin ; } gsl_histogram ; typedef struct { size_t n ; double * range ; double * sum ; } gsl_histogram_pdf ; gsl_histogram * gsl_histogram_alloc (size_t n); gsl_histogram * gsl_histogram_calloc (size_t n); gsl_histogram * gsl_histogram_calloc_uniform (const size_t n, const double xmin, const double xmax); void gsl_histogram_free (gsl_histogram * h); int gsl_histogram_increment (gsl_histogram * h, double x); int gsl_histogram_accumulate (gsl_histogram * h, double x, double weight); int gsl_histogram_find (const gsl_histogram * h, const double x, size_t * i); double gsl_histogram_get (const gsl_histogram * h, size_t i); int gsl_histogram_get_range (const gsl_histogram * h, size_t i, double * lower, double * upper); double gsl_histogram_max (const gsl_histogram * h); double gsl_histogram_min (const gsl_histogram * h); size_t gsl_histogram_bins (const gsl_histogram * h); void gsl_histogram_reset (gsl_histogram * h); gsl_histogram * gsl_histogram_calloc_range(size_t n, double * range); int gsl_histogram_set_ranges (gsl_histogram * h, const double range[], size_t size); int gsl_histogram_set_ranges_uniform (gsl_histogram * h, double xmin, double xmax); int gsl_histogram_memcpy(gsl_histogram * dest, const gsl_histogram * source); gsl_histogram * gsl_histogram_clone(const gsl_histogram * source); double gsl_histogram_max_val (const gsl_histogram * h); size_t gsl_histogram_max_bin (const gsl_histogram * h); double gsl_histogram_min_val (const gsl_histogram * h); size_t gsl_histogram_min_bin (const gsl_histogram * h); int gsl_histogram_equal_bins_p(const gsl_histogram *h1, const gsl_histogram *h2); int gsl_histogram_add(gsl_histogram *h1, const gsl_histogram *h2); int gsl_histogram_sub(gsl_histogram *h1, const gsl_histogram *h2); int gsl_histogram_mul(gsl_histogram *h1, const gsl_histogram *h2); int gsl_histogram_div(gsl_histogram *h1, const gsl_histogram *h2); int gsl_histogram_scale(gsl_histogram *h, double scale); int gsl_histogram_shift (gsl_histogram * h, double shift); double gsl_histogram_sigma (const gsl_histogram * h); double gsl_histogram_mean (const gsl_histogram * h); double gsl_histogram_sum (const gsl_histogram * h); int gsl_histogram_fwrite (FILE * stream, const gsl_histogram * h) ; int gsl_histogram_fread (FILE * stream, gsl_histogram * h); int gsl_histogram_fprintf (FILE * stream, const gsl_histogram * h, const char * range_format, const char * bin_format); int gsl_histogram_fscanf (FILE * stream, gsl_histogram * h); gsl_histogram_pdf * gsl_histogram_pdf_alloc (const size_t n); int gsl_histogram_pdf_init (gsl_histogram_pdf * p, const gsl_histogram * h); void gsl_histogram_pdf_free (gsl_histogram_pdf * p); double gsl_histogram_pdf_sample (const gsl_histogram_pdf * p, double r); __END_DECLS #endif /* __GSL_HISTOGRAM_H__ */ gsl/histogram/copy.c0000644000175000017500000000414513536674414013051 0ustar eddedd/* gsl_histogram_copy.c * Copyright (C) 2000 Simone Piccardi * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /*************************************************************** * * File gsl_histogram_copy.c: * Routine to copy an histogram. * Need GSL library and headers. * * Author: S. Piccardi * Jan. 2000 * ***************************************************************/ #include #include #include #include /* * gsl_histogram_copy: * copy the contents of an histogram into another */ int gsl_histogram_memcpy (gsl_histogram * dest, const gsl_histogram * src) { size_t n = src->n; size_t i; if (dest->n != src->n) { GSL_ERROR ("histograms have different sizes, cannot copy", GSL_EINVAL); } for (i = 0; i <= n; i++) { dest->range[i] = src->range[i]; } for (i = 0; i < n; i++) { dest->bin[i] = src->bin[i]; } return GSL_SUCCESS; } /* * gsl_histogram_duplicate: * duplicate an histogram creating * an identical new one */ gsl_histogram * gsl_histogram_clone (const gsl_histogram * src) { size_t n = src->n; size_t i; gsl_histogram *h; h = gsl_histogram_calloc_range (n, src->range); if (h == 0) { GSL_ERROR_VAL ("failed to allocate space for histogram struct", GSL_ENOMEM, 0); } for (i = 0; i < n; i++) { h->bin[i] = src->bin[i]; } return h; } gsl/histogram/init.c0000644000175000017500000000753513536674414013050 0ustar eddedd/* histogram/init.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include gsl_histogram * gsl_histogram_alloc (size_t n) { gsl_histogram *h; if (n == 0) { GSL_ERROR_VAL ("histogram length n must be positive integer", GSL_EDOM, 0); } h = (gsl_histogram *) malloc (sizeof (gsl_histogram)); if (h == 0) { GSL_ERROR_VAL ("failed to allocate space for histogram struct", GSL_ENOMEM, 0); } h->range = (double *) malloc ((n + 1) * sizeof (double)); if (h->range == 0) { free (h); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for histogram ranges", GSL_ENOMEM, 0); } h->bin = (double *) malloc (n * sizeof (double)); if (h->bin == 0) { free (h->range); free (h); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for histogram bins", GSL_ENOMEM, 0); } h->n = n; return h; } static void make_uniform (double range[], size_t n, double xmin, double xmax) { size_t i; for (i = 0; i <= n; i++) { double f1 = ((double) (n-i) / (double) n); double f2 = ((double) i / (double) n); range[i] = f1 * xmin + f2 * xmax; } } gsl_histogram * gsl_histogram_calloc_uniform (const size_t n, const double xmin, const double xmax) { gsl_histogram *h; if (xmin >= xmax) { GSL_ERROR_VAL ("xmin must be less than xmax", GSL_EINVAL, 0); } h = gsl_histogram_calloc (n); if (h == 0) { return h; } make_uniform (h->range, n, xmin, xmax); return h; } gsl_histogram * gsl_histogram_calloc (size_t n) { gsl_histogram * h = gsl_histogram_alloc (n); if (h == 0) { return h; } { size_t i; for (i = 0; i < n + 1; i++) { h->range[i] = i; } for (i = 0; i < n; i++) { h->bin[i] = 0; } } h->n = n; return h; } void gsl_histogram_free (gsl_histogram * h) { RETURN_IF_NULL (h); free (h->range); free (h->bin); free (h); } /* These initialization functions suggested by Achim Gaedke */ int gsl_histogram_set_ranges_uniform (gsl_histogram * h, double xmin, double xmax) { size_t i; const size_t n = h->n; if (xmin >= xmax) { GSL_ERROR ("xmin must be less than xmax", GSL_EINVAL); } /* initialize ranges */ make_uniform (h->range, n, xmin, xmax); /* clear contents */ for (i = 0; i < n; i++) { h->bin[i] = 0; } return GSL_SUCCESS; } int gsl_histogram_set_ranges (gsl_histogram * h, const double range[], size_t size) { size_t i; const size_t n = h->n; if (size != (n+1)) { GSL_ERROR ("size of range must match size of histogram", GSL_EINVAL); } /* initialize ranges */ for (i = 0; i <= n; i++) { h->range[i] = range[i]; } /* clear contents */ for (i = 0; i < n; i++) { h->bin[i] = 0; } return GSL_SUCCESS; } gsl/histogram/TODO0000644000175000017500000000020713536674414012416 0ustar eddedd# -*- org -*- #+CATEGORY: histogram * Implement N-d histograms (Simone Piccardi is working on something here). gsl/histogram/params2d.c0000644000175000017500000000263513536674414013612 0ustar eddedd/* histogram/params2d.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include double gsl_histogram2d_xmax (const gsl_histogram2d * h) { const int nx = h->nx; return h->xrange[nx]; } double gsl_histogram2d_xmin (const gsl_histogram2d * h) { return h->xrange[0]; } double gsl_histogram2d_ymax (const gsl_histogram2d * h) { const int ny = h->ny; return h->yrange[ny]; } double gsl_histogram2d_ymin (const gsl_histogram2d * h) { return h->yrange[0]; } size_t gsl_histogram2d_nx (const gsl_histogram2d * h) { return h->nx; } size_t gsl_histogram2d_ny (const gsl_histogram2d * h) { return h->ny; } gsl/histogram/oper.c0000644000175000017500000000750513536674414013047 0ustar eddedd/* gsl_histogram_oper.c * Copyright (C) 2000 Simone Piccardi * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /*************************************************************** * * File gsl_histogram_oper.c: * Routine to make operation on histograms. * Need GSL library and header. * Contains the routines: * gsl_histogram_same_binning check if two histograms have the same binning * gsl_histogram_add add two histograms * gsl_histogram_sub subctract two histograms * gsl_histogram_mult multiply two histograms * gsl_histogram_div divide two histograms * gsl_histogram_scale scale histogram contents * * Author: S. Piccardi * Jan. 2000 * ***************************************************************/ #include #include #include #include /* * gsl_histogram_same_binning: * control if two histograms have the * same binning */ int gsl_histogram_equal_bins_p (const gsl_histogram * h1, const gsl_histogram * h2) { if (h1->n != h2->n) { return 0; } { size_t i; /* init ranges */ for (i = 0; i <= h1->n; i++) { if (h1->range[i] != h2->range[i]) { return 0; } } } return 1; } /* * gsl_histogram_add: * add two histograms */ int gsl_histogram_add (gsl_histogram * h1, const gsl_histogram * h2) { size_t i; if (!gsl_histogram_equal_bins_p (h1, h2)) { GSL_ERROR ("histograms have different binning", GSL_EINVAL); } for (i = 0; i < h1->n; i++) { h1->bin[i] += h2->bin[i]; } return GSL_SUCCESS; } /* * gsl_histogram_sub: * subtract two histograms */ int gsl_histogram_sub (gsl_histogram * h1, const gsl_histogram * h2) { size_t i; if (!gsl_histogram_equal_bins_p (h1, h2)) { GSL_ERROR ("histograms have different binning", GSL_EINVAL); } for (i = 0; i < h1->n; i++) { h1->bin[i] -= h2->bin[i]; } return GSL_SUCCESS; } /* * gsl_histogram_mult: * multiply two histograms */ int gsl_histogram_mul (gsl_histogram * h1, const gsl_histogram * h2) { size_t i; if (!gsl_histogram_equal_bins_p (h1, h2)) { GSL_ERROR ("histograms have different binning", GSL_EINVAL); } for (i = 0; i < h1->n; i++) { h1->bin[i] *= h2->bin[i]; } return GSL_SUCCESS; } /* * gsl_histogram_div: * divide two histograms */ int gsl_histogram_div (gsl_histogram * h1, const gsl_histogram * h2) { size_t i; if (!gsl_histogram_equal_bins_p (h1, h2)) { GSL_ERROR ("histograms have different binning", GSL_EINVAL); } for (i = 0; i < h1->n; i++) { h1->bin[i] /= h2->bin[i]; } return GSL_SUCCESS; } /* * gsl_histogram_scale: * scale a histogram by a numeric factor */ int gsl_histogram_scale (gsl_histogram * h, double scale) { size_t i; for (i = 0; i < h->n; i++) { h->bin[i] *= scale; } return GSL_SUCCESS; } /* * gsl_histogram_shift: * shift a histogram by a numeric offset */ int gsl_histogram_shift (gsl_histogram * h, double shift) { size_t i; for (i = 0; i < h->n; i++) { h->bin[i] += shift; } return GSL_SUCCESS; } gsl/histogram/test.c0000644000175000017500000000236413536674414013057 0ustar eddedd/* histogram/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include void test1d (void); void test2d (void); void test1d_resample (void); void test2d_resample (void); void test1d_trap (void); void test2d_trap (void); int main (void) { test1d(); test2d(); test1d_resample(); test2d_resample(); test1d_trap(); test2d_trap(); exit (gsl_test_summary ()); } gsl/histogram/test2d_trap.c0000644000175000017500000001606713536674414014340 0ustar eddedd/* histogram/test2d_trap.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #define N 107 #define M 239 static void my_error_handler (const char *reason, const char *file, int line, int err); static int status = 0; void test2d_trap (void) { gsl_histogram2d *h; double result, lower, upper; size_t i, j; gsl_set_error_handler (&my_error_handler); gsl_ieee_env_setup (); status = 0; h = gsl_histogram2d_calloc (0, 10); gsl_test (!status, "gsl_histogram_calloc traps zero-width histogram"); gsl_test (h != 0, "gsl_histogram2d_calloc returns NULL for zero-width histogram"); status = 0; h = gsl_histogram2d_calloc (10, 0); gsl_test (!status, "gsl_histogram_calloc traps zero-length histogram"); gsl_test (h != 0, "gsl_histogram2d_calloc returns NULL for zero-length histogram"); status = 0; h = gsl_histogram2d_calloc_uniform (0, 10, 0.0, 1.0, 0.0, 1.0); gsl_test (!status, "gsl_histogram2d_calloc_uniform traps zero-width histogram"); gsl_test (h != 0, "gsl_histogram2d_calloc_uniform returns NULL for zero-width histogram"); status = 0; h = gsl_histogram2d_calloc_uniform (10, 0, 0.0, 1.0, 0.0, 1.0); gsl_test (!status, "gsl_histogram2d_calloc_uniform traps zero-length histogram"); gsl_test (h != 0, "gsl_histogram2d_calloc_uniform returns NULL for zero-length histogram"); status = 0; h = gsl_histogram2d_calloc_uniform (10, 10, 0.0, 1.0, 1.0, 1.0); gsl_test (!status, "gsl_histogram2d_calloc_uniform traps equal endpoints"); gsl_test (h != 0, "gsl_histogram2d_calloc_uniform returns NULL for equal endpoints"); status = 0; h = gsl_histogram2d_calloc_uniform (10, 10, 1.0, 1.0, 0.0, 1.0); gsl_test (!status, "gsl_histogram2d_calloc_uniform traps equal endpoints"); gsl_test (h != 0, "gsl_histogram2d_calloc_uniform returns NULL for equal endpoints"); status = 0; h = gsl_histogram2d_calloc_uniform (10, 10, 0.0, 1.0, 2.0, 1.0); gsl_test (!status, "gsl_histogram2d_calloc_uniform traps invalid range"); gsl_test (h != 0, "gsl_histogram2d_calloc_uniform returns NULL for invalid range"); status = 0; h = gsl_histogram2d_calloc_uniform (10, 10, 2.0, 1.0, 0.0, 1.0); gsl_test (!status, "gsl_histogram2d_calloc_uniform traps invalid range"); gsl_test (h != 0, "gsl_histogram2d_calloc_uniform returns NULL for invalid range"); h = gsl_histogram2d_calloc_uniform (N, M, 0.0, 1.0, 0.0, 1.0); status = gsl_histogram2d_accumulate (h, 1.0, 0.0, 10.0); gsl_test (status != GSL_EDOM, "gsl_histogram2d_accumulate traps x at xmax"); status = gsl_histogram2d_accumulate (h, 2.0, 0.0, 100.0); gsl_test (status != GSL_EDOM, "gsl_histogram2d_accumulate traps x above xmax"); status = gsl_histogram2d_accumulate (h, -1.0, 0.0, 1000.0); gsl_test (status != GSL_EDOM, "gsl_histogram2d_accumulate traps x below xmin"); status = gsl_histogram2d_accumulate (h, 0.0, 1.0, 10.0); gsl_test (status != GSL_EDOM, "gsl_histogram2d_accumulate traps y at ymax"); status = gsl_histogram2d_accumulate (h, 0.0, 2.0, 100.0); gsl_test (status != GSL_EDOM, "gsl_histogram2d_accumulate traps y above ymax"); status = gsl_histogram2d_accumulate (h, 0.0, -1.0, 1000.0); gsl_test (status != GSL_EDOM, "gsl_histogram2d_accumulate traps y below ymin"); status = gsl_histogram2d_increment (h, 1.0, 0.0); gsl_test (status != GSL_EDOM, "gsl_histogram2d_increment traps x at xmax"); status = gsl_histogram2d_increment (h, 2.0, 0.0); gsl_test (status != GSL_EDOM, "gsl_histogram2d_increment traps x above xmax"); status = gsl_histogram2d_increment (h, -1.0, 0.0); gsl_test (status != GSL_EDOM, "gsl_histogram2d_increment traps x below xmin"); status = gsl_histogram2d_increment (h, 0.0, 1.0); gsl_test (status != GSL_EDOM, "gsl_histogram2d_increment traps y at ymax"); status = gsl_histogram2d_increment (h, 0.0, 2.0); gsl_test (status != GSL_EDOM, "gsl_histogram2d_increment traps y above ymax"); status = gsl_histogram2d_increment (h, 0.0, -1.0); gsl_test (status != GSL_EDOM, "gsl_histogram2d_increment traps y below ymin"); result = gsl_histogram2d_get (h, N, 0); gsl_test (result != 0, "gsl_histogram2d_get traps x index at nx"); result = gsl_histogram2d_get (h, N + 1, 0); gsl_test (result != 0, "gsl_histogram2d_get traps x index above nx"); result = gsl_histogram2d_get (h, 0, M); gsl_test (result != 0, "gsl_histogram2d_get traps y index at ny"); result = gsl_histogram2d_get (h, 0, M + 1); gsl_test (result != 0, "gsl_histogram2d_get traps y index above ny"); status = gsl_histogram2d_get_xrange (h, N, &lower, &upper); gsl_test (status != GSL_EDOM, "gsl_histogram2d_get_xrange traps index at nx"); status = gsl_histogram2d_get_xrange (h, N + 1, &lower, &upper); gsl_test (status != GSL_EDOM, "gsl_histogram2d_get_xrange traps index above nx"); status = gsl_histogram2d_get_yrange (h, M, &lower, &upper); gsl_test (status != GSL_EDOM, "gsl_histogram2d_get_yrange traps index at ny"); status = gsl_histogram2d_get_yrange (h, M + 1, &lower, &upper); gsl_test (status != GSL_EDOM, "gsl_histogram2d_get_yrange traps index above ny"); status = 0; gsl_histogram2d_find (h, -0.01, 0.0, &i, &j); gsl_test (status != GSL_EDOM, "gsl_histogram2d_find traps x below xmin"); status = 0; gsl_histogram2d_find (h, 1.0, 0.0, &i, &j); gsl_test (status != GSL_EDOM, "gsl_histogram2d_find traps x at xmax"); status = 0; gsl_histogram2d_find (h, 1.1, 0.0, &i, &j); gsl_test (status != GSL_EDOM, "gsl_histogram2d_find traps x above xmax"); status = 0; gsl_histogram2d_find (h, 0.0, -0.01, &i, &j); gsl_test (status != GSL_EDOM, "gsl_histogram2d_find traps y below ymin"); status = 0; gsl_histogram2d_find (h, 0.0, 1.0, &i, &j); gsl_test (status != GSL_EDOM, "gsl_histogram2d_find traps y at ymax"); status = 0; gsl_histogram2d_find (h, 0.0, 1.1, &i, &j); gsl_test (status != GSL_EDOM, "gsl_histogram2d_find traps y above ymax"); gsl_histogram2d_free (h); } static void my_error_handler (const char *reason, const char *file, int line, int err) { if (0) printf ("(caught [%s:%d: %s (%d)])\n", file, line, reason, err); status = 1; } gsl/histogram/maxval2d.c0000644000175000017500000000640113536674414013612 0ustar eddedd/* gsl_histogram2d_maxval.c * Copyright (C) 2000 Simone Piccardi * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /*************************************************************** * * File gsl_histogram2d_maxval.c: * Routine to find maximum and minumum content of a 2D hisogram. * Need GSL library and header. * Contains the routines: * gsl_histogram2d_max_val find max content values * gsl_histogram2d_min_val find min content values * gsl_histogram2d_bin_max find coordinates of max contents bin * gsl_histogram2d_bin_min find coordinates of min contents bin * * Author: S. Piccardi * Jan. 2000 * ***************************************************************/ #include #include #include /* * Return the maximum contents value of a 2D histogram */ double gsl_histogram2d_max_val (const gsl_histogram2d * h) { const size_t nx = h->nx; const size_t ny = h->ny; size_t i; double max = h->bin[0 * ny + 0]; for (i = 0; i < nx * ny; i++) { if (h->bin[i] > max) { max = h->bin[i]; } } return max; } /* * Find the bin index for maximum value of a 2D histogram */ void gsl_histogram2d_max_bin (const gsl_histogram2d * h, size_t * imax_out, size_t * jmax_out) { const size_t nx = h->nx; const size_t ny = h->ny; size_t imax = 0, jmax = 0, i, j; double max = h->bin[0 * ny + 0]; for (i = 0; i < nx; i++) { for (j = 0; j < ny; j++) { double x = h->bin[i * ny + j]; if (x > max) { max = x; imax = i; jmax = j; } } } *imax_out = imax; *jmax_out = jmax; } /* * Return the minimum contents value of a 2D histogram */ double gsl_histogram2d_min_val (const gsl_histogram2d * h) { const size_t nx = h->nx; const size_t ny = h->ny; size_t i; double min = h->bin[0 * ny + 0]; for (i = 0; i < nx * ny; i++) { if (h->bin[i] < min) { min = h->bin[i]; } } return min; } /* * Find the bin index for minimum value of a 2D histogram */ void gsl_histogram2d_min_bin (const gsl_histogram2d * h, size_t * imin_out, size_t * jmin_out) { const size_t nx = h->nx; const size_t ny = h->ny; size_t imin = 0, jmin = 0, i, j; double min = h->bin[0 * ny + 0]; for (i = 0; i < nx; i++) { for (j = 0; j < ny; j++) { double x = h->bin[i * ny + j]; if (x < min) { min = x; imin = i; jmin = j; } } } *imin_out = imin; *jmin_out = jmin; } gsl/histogram/file.c0000644000175000017500000000565413536674414013024 0ustar eddedd/* histogram/file.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include int gsl_histogram_fread (FILE * stream, gsl_histogram * h) { int status = gsl_block_raw_fread (stream, h->range, h->n + 1, 1); if (status) return status; status = gsl_block_raw_fread (stream, h->bin, h->n, 1); return status; } int gsl_histogram_fwrite (FILE * stream, const gsl_histogram * h) { int status = gsl_block_raw_fwrite (stream, h->range, h->n + 1, 1); if (status) return status; status = gsl_block_raw_fwrite (stream, h->bin, h->n, 1); return status; } int gsl_histogram_fprintf (FILE * stream, const gsl_histogram * h, const char *range_format, const char *bin_format) { size_t i; const size_t n = h->n; for (i = 0; i < n; i++) { int status = fprintf (stream, range_format, h->range[i]); if (status < 0) { GSL_ERROR ("fprintf failed", GSL_EFAILED); } status = putc (' ', stream); if (status == EOF) { GSL_ERROR ("putc failed", GSL_EFAILED); } status = fprintf (stream, range_format, h->range[i + 1]); if (status < 0) { GSL_ERROR ("fprintf failed", GSL_EFAILED); } status = putc (' ', stream); if (status == EOF) { GSL_ERROR ("putc failed", GSL_EFAILED); } status = fprintf (stream, bin_format, h->bin[i]); if (status < 0) { GSL_ERROR ("fprintf failed", GSL_EFAILED); } status = putc ('\n', stream); if (status == EOF) { GSL_ERROR ("putc failed", GSL_EFAILED); } } return GSL_SUCCESS; } int gsl_histogram_fscanf (FILE * stream, gsl_histogram * h) { size_t i; const size_t n = h->n; double upper; for (i = 0; i < n; i++) { int status = fscanf (stream, "%lg %lg %lg", h->range + i, &upper, h->bin + i); if (status != 3) { GSL_ERROR ("fscanf failed", GSL_EFAILED); } } h->range[n] = upper; return GSL_SUCCESS; } gsl/histogram/test2d_resample.c0000644000175000017500000000631313536674414015173 0ustar eddedd/* histogram/test2d_resample.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include "urand.c" void test2d_resample (void) { size_t i, j; int status = 0; double total = 0; size_t N = 200000; gsl_histogram2d *h; gsl_ieee_env_setup (); h = gsl_histogram2d_calloc_uniform (10, 10, 0.0, 1.0, 0.0, 1.0); for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { double w = 10.0 * i + j; total += w; gsl_histogram2d_accumulate (h, 0.1 * i, 0.1 * i, w); } } { gsl_histogram2d_pdf *p = gsl_histogram2d_pdf_alloc (10,10); gsl_histogram2d *hh = gsl_histogram2d_calloc_uniform (20, 20, 0.0, 1.0, 0.0, 1.0); gsl_histogram2d_pdf_init (p, h); for (i = 0; i < N; i++) { double u = urand(); double v = urand(); double x, y; status = gsl_histogram2d_pdf_sample (p, u, v, &x, &y); status = gsl_histogram2d_increment (hh, x, y); } status = 0; for (i = 0; i < 20; i++) { for (j = 0; j < 20; j++) { double z = 4 * total * gsl_histogram2d_get (hh, i, j) / (double) N; size_t k1, k2; double ya; double x, xmax, y, ymax; gsl_histogram2d_get_xrange (hh, i, &x, &xmax); gsl_histogram2d_get_yrange (hh, j, &y, &ymax); gsl_histogram2d_find (h, x, y, &k1, &k2); ya = gsl_histogram2d_get (h, k1, k2); if (ya == 0) { if (z != 0) { status = 1; printf ("(%d,%d): %g vs %g\n", (int)i, (int)j, z, ya); } } else { double err = 1 / sqrt (gsl_histogram2d_get (hh, i, j)); double sigma = fabs ((z - ya) / (ya * err)); if (sigma > 3) { status = 1; printf ("%g vs %g err=%g sigma=%g\n", z, ya, err, sigma); } } } } gsl_histogram2d_pdf_free (p) ; gsl_histogram2d_free (hh) ; gsl_test (status, "gsl_histogram2d_pdf_sample within statistical errors"); } gsl_histogram2d_free (h) ; } gsl/histogram/pdf.c0000644000175000017500000000671313536674414012653 0ustar eddedd/* histogram/pdf.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include "find.c" double gsl_histogram_pdf_sample (const gsl_histogram_pdf * p, double r) { size_t i; int status; /* Wrap the exclusive top of the bin down to the inclusive bottom of the bin. Since this is a single point it should not affect the distribution. */ if (r == 1.0) { r = 0.0; } status = find (p->n, p->sum, r, &i); if (status) { GSL_ERROR_VAL ("cannot find r in cumulative pdf", GSL_EDOM, 0); } else { double delta = (r - p->sum[i]) / (p->sum[i + 1] - p->sum[i]); double x = p->range[i] + delta * (p->range[i + 1] - p->range[i]); return x; } } gsl_histogram_pdf * gsl_histogram_pdf_alloc (const size_t n) { gsl_histogram_pdf *p; if (n == 0) { GSL_ERROR_VAL ("histogram pdf length n must be positive integer", GSL_EDOM, 0); } p = (gsl_histogram_pdf *) malloc (sizeof (gsl_histogram_pdf)); if (p == 0) { GSL_ERROR_VAL ("failed to allocate space for histogram pdf struct", GSL_ENOMEM, 0); } p->range = (double *) malloc ((n + 1) * sizeof (double)); if (p->range == 0) { free (p); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for histogram pdf ranges", GSL_ENOMEM, 0); } p->sum = (double *) malloc ((n + 1) * sizeof (double)); if (p->sum == 0) { free (p->range); free (p); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for histogram pdf sums", GSL_ENOMEM, 0); } p->n = n; return p; } int gsl_histogram_pdf_init (gsl_histogram_pdf * p, const gsl_histogram * h) { size_t i; size_t n = p->n; if (n != h->n) { GSL_ERROR ("histogram length must match pdf length", GSL_EINVAL); } for (i = 0; i < n; i++) { if (h->bin[i] < 0) { GSL_ERROR ("histogram bins must be non-negative to compute" "a probability distribution", GSL_EDOM); } } for (i = 0; i < n + 1; i++) { p->range[i] = h->range[i]; } { double mean = 0, sum = 0; for (i = 0; i < n; i++) { mean += (h->bin[i] - mean) / ((double) (i + 1)); } p->sum[0] = 0; for (i = 0; i < n; i++) { sum += (h->bin[i] / mean) / n; p->sum[i + 1] = sum; } } return GSL_SUCCESS; } void gsl_histogram_pdf_free (gsl_histogram_pdf * p) { RETURN_IF_NULL (p); free (p->range); free (p->sum); free (p); } gsl/gsl/0000755000175000017500000000000014057135461010510 5ustar eddeddgsl/gsl/Makefile.in0000664000175000017500000003254214057135461012565 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = gsl ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gsl/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gsl/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ clean-local cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distclean-local distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am .PRECIOUS: Makefile header-links: remove-links HEADERLIST="$(top_srcdir)/gsl*.h $(top_srcdir)/*/gsl*.h"; \ for h in $$HEADERLIST; do \ BASENAME=`basename $$h`; \ test -r $$BASENAME || $(LN_S) $$h $$BASENAME; \ done remove-links: rm -f gsl*.h all: all-am header-links clean-local: remove-links distclean-local: remove-links # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/gsl/Makefile.am0000644000175000017500000000047713536674414012563 0ustar eddedd header-links: remove-links HEADERLIST="$(top_srcdir)/gsl*.h $(top_srcdir)/*/gsl*.h"; \ for h in $$HEADERLIST; do \ BASENAME=`basename $$h`; \ test -r $$BASENAME || $(LN_S) $$h $$BASENAME; \ done remove-links: rm -f gsl*.h all: all-am header-links clean-local: remove-links distclean-local: remove-links gsl/rng/0000755000175000017500000000000014057135461010511 5ustar eddeddgsl/rng/types.c0000644000175000017500000000520413536674414012031 0ustar eddedd/* rng/types.c * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #define N 100 const gsl_rng_type * gsl_rng_generator_types[N]; #define ADD(t) {if (i==N) abort(); gsl_rng_generator_types[i] = (t); i++; }; const gsl_rng_type ** gsl_rng_types_setup (void) { int i = 0; ADD(gsl_rng_borosh13); ADD(gsl_rng_cmrg); ADD(gsl_rng_coveyou); ADD(gsl_rng_fishman18); ADD(gsl_rng_fishman20); ADD(gsl_rng_fishman2x); ADD(gsl_rng_gfsr4); ADD(gsl_rng_knuthran); ADD(gsl_rng_knuthran2); ADD(gsl_rng_knuthran2002); ADD(gsl_rng_lecuyer21); ADD(gsl_rng_minstd); ADD(gsl_rng_mrg); ADD(gsl_rng_mt19937); ADD(gsl_rng_mt19937_1999); ADD(gsl_rng_mt19937_1998); ADD(gsl_rng_r250); ADD(gsl_rng_ran0); ADD(gsl_rng_ran1); ADD(gsl_rng_ran2); ADD(gsl_rng_ran3); ADD(gsl_rng_rand); ADD(gsl_rng_rand48); ADD(gsl_rng_random128_bsd); ADD(gsl_rng_random128_glibc2); ADD(gsl_rng_random128_libc5); ADD(gsl_rng_random256_bsd); ADD(gsl_rng_random256_glibc2); ADD(gsl_rng_random256_libc5); ADD(gsl_rng_random32_bsd); ADD(gsl_rng_random32_glibc2); ADD(gsl_rng_random32_libc5); ADD(gsl_rng_random64_bsd); ADD(gsl_rng_random64_glibc2); ADD(gsl_rng_random64_libc5); ADD(gsl_rng_random8_bsd); ADD(gsl_rng_random8_glibc2); ADD(gsl_rng_random8_libc5); ADD(gsl_rng_random_bsd); ADD(gsl_rng_random_glibc2); ADD(gsl_rng_random_libc5); ADD(gsl_rng_randu); ADD(gsl_rng_ranf); ADD(gsl_rng_ranlux); ADD(gsl_rng_ranlux389); ADD(gsl_rng_ranlxd1); ADD(gsl_rng_ranlxd2); ADD(gsl_rng_ranlxs0); ADD(gsl_rng_ranlxs1); ADD(gsl_rng_ranlxs2); ADD(gsl_rng_ranmar); ADD(gsl_rng_slatec); ADD(gsl_rng_taus); ADD(gsl_rng_taus2); ADD(gsl_rng_taus113); ADD(gsl_rng_transputer); ADD(gsl_rng_tt800); ADD(gsl_rng_uni); ADD(gsl_rng_uni32); ADD(gsl_rng_vax); ADD(gsl_rng_waterman14); ADD(gsl_rng_zuf); ADD(0); return gsl_rng_generator_types; } gsl/rng/ran3.c0000644000175000017500000000603613536674414011534 0ustar eddedd/* rng/ran3.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2010 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is an implementation of the algorithm used in Knuths's subtractive generator, with the Numerical Recipe's ran3 paramters. It is a subtractive lagged fibonnaci generator. */ static inline unsigned long int ran3_get (void *vstate); static double ran3_get_double (void *vstate); static void ran3_set (void *state, unsigned long int s); #define M_BIG 1000000000 #define M_SEED 161803398 typedef struct { unsigned int x; unsigned int y; unsigned long int buffer[56]; } ran3_state_t; static inline unsigned long int ran3_get (void *vstate) { ran3_state_t *state = (ran3_state_t *) vstate; long int j; state->x++; if (state->x == 56) state->x = 1; state->y++; if (state->y == 56) state->y = 1; j = state->buffer[state->x] - state->buffer[state->y]; if (j < 0) j += M_BIG; state->buffer[state->x] = j; return j; } static double ran3_get_double (void *vstate) { return ran3_get (vstate) / (double) M_BIG ; } static void ran3_set (void *vstate, unsigned long int s) { ran3_state_t *state = (ran3_state_t *) vstate; int i, i1; long int j, k; if (s == 0) s = 1; /* default seed is 1 */ j = (M_SEED - s) % M_BIG; /* Avoid potential problem with negative values */ if (j < 0) j += M_BIG; /* the zeroth element is never used, but we initialize it for consistency between states */ state->buffer[0] = 0; state->buffer[55] = j; k = 1; for (i = 1; i < 55; i++) { int n = (21 * i) % 55; state->buffer[n] = k; k = j - k; if (k < 0) k += M_BIG; j = state->buffer[n]; } for (i1 = 0; i1 < 4; i1++) { for (i = 1; i < 56; i++) { long int t = state->buffer[i] - state->buffer[1 + (i + 30) % 55]; if (t < 0) t += M_BIG; state->buffer[i] = t; } } state->x = 0; state->y = 31; return; } static const gsl_rng_type ran3_type = {"ran3", /* name */ M_BIG, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (ran3_state_t), &ran3_set, &ran3_get, &ran3_get_double}; const gsl_rng_type *gsl_rng_ran3 = &ran3_type; gsl/rng/gfsr4.c0000644000175000017500000001263113536674414011714 0ustar eddedd/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. From Robert M. Ziff, "Four-tap shift-register-sequence random-number generators," Computers in Physics 12(4), Jul/Aug 1998, pp 385-392. A generalized feedback shift-register (GFSR) is basically an xor-sum of particular past lagged values. A four-tap register looks like: ra[nd] = ra[nd-A] ^ ra[nd-B] ^ ra[nd-C] ^ ra[nd-D] Ziff notes that "it is now widely known" that two-tap registers have serious flaws, the most obvious one being the three-point correlation that comes from the defn of the generator. Nice mathematical properties can be derived for GFSR's, and numerics bears out the claim that 4-tap GFSR's with appropriately chosen offsets are as random as can be measured, using the author's test. This implementation uses the values suggested the the author's example on p392, but altered to fit the GSL framework. The "state" is 2^14 longs, or 64Kbytes; 2^14 is the smallest power of two that is larger than D, the largest offset. We really only need a state with the last D values, but by going to a power of two, we can do a masking operation instead of a modulo, and this is presumably faster, though I haven't actually tried it. The article actually suggested a short/fast hack: #define RandomInteger (++nd, ra[nd&M]=ra[(nd-A)&M]\ ^ra[(nd-B)&M]^ra[(nd-C)&M]^ra[(nd-D)&M]) so that (as long as you've defined nd,ra[M+1]), then you ca do things like: 'if (RandomInteger < p) {...}'. Note that n&M varies from 0 to M, *including* M, so that the array has to be of size M+1. Since M+1 is a power of two, n&M is a potentially quicker implementation of the equivalent n%(M+1). This implementation copyright (C) 1998 James Theiler, based on the example mt.c in the GSL, as implemented by Brian Gough. */ #include #include #include static inline unsigned long int gfsr4_get (void *vstate); static double gfsr4_get_double (void *vstate); static void gfsr4_set (void *state, unsigned long int s); /* Magic numbers */ #define A 471 #define B 1586 #define C 6988 #define D 9689 #define M 16383 /* = 2^14-1 */ /* #define M 0x0003fff */ typedef struct { int nd; unsigned long ra[M+1]; } gfsr4_state_t; static inline unsigned long gfsr4_get (void *vstate) { gfsr4_state_t *state = (gfsr4_state_t *) vstate; state->nd = ((state->nd)+1)&M; return state->ra[(state->nd)] = state->ra[((state->nd)+(M+1-A))&M]^ state->ra[((state->nd)+(M+1-B))&M]^ state->ra[((state->nd)+(M+1-C))&M]^ state->ra[((state->nd)+(M+1-D))&M]; } static double gfsr4_get_double (void * vstate) { return gfsr4_get (vstate) / 4294967296.0 ; } static void gfsr4_set (void *vstate, unsigned long int s) { gfsr4_state_t *state = (gfsr4_state_t *) vstate; int i, j; /* Masks for turning on the diagonal bit and turning off the leftmost bits */ unsigned long int msb = 0x80000000UL; unsigned long int mask = 0xffffffffUL; if (s == 0) s = 4357; /* the default seed is 4357 */ /* We use the congruence s_{n+1} = (69069*s_n) mod 2^32 to initialize the state. This works because ANSI-C unsigned long integer arithmetic is automatically modulo 2^32 (or a higher power of two), so we can safely ignore overflow. */ #define LCG(n) ((69069 * n) & 0xffffffffUL) /* Brian Gough suggests this to avoid low-order bit correlations */ for (i = 0; i <= M; i++) { unsigned long t = 0 ; unsigned long bit = msb ; for (j = 0; j < 32; j++) { s = LCG(s) ; if (s & msb) t |= bit ; bit >>= 1 ; } state->ra[i] = t ; } /* Perform the "orthogonalization" of the matrix */ /* Based on the orthogonalization used in r250, as suggested initially * by Kirkpatrick and Stoll, and pointed out to me by Brian Gough */ /* BJG: note that this orthogonalisation doesn't have any effect here because the the initial 6695 elements do not participate in the calculation. For practical purposes this orthogonalisation is somewhat irrelevant, because the probability of the original sequence being degenerate should be exponentially small. */ for (i=0; i<32; ++i) { int k=7+i*3; state->ra[k] &= mask; /* Turn off bits left of the diagonal */ state->ra[k] |= msb; /* Turn on the diagonal bit */ mask >>= 1; msb >>= 1; } state->nd = i; } static const gsl_rng_type gfsr4_type = {"gfsr4", /* name */ 0xffffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (gfsr4_state_t), &gfsr4_set, &gfsr4_get, &gfsr4_get_double}; const gsl_rng_type *gsl_rng_gfsr4 = &gfsr4_type; gsl/rng/ran0.c0000644000175000017500000000505013536674414011524 0ustar eddedd/* rng/ran0.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* This is an implementation of the algorithm used in Numerical Recipe's ran0 generator. It is the same as MINSTD with an XOR mask of 123459876 on the seed. The period of this generator is 2^31. Note, if you choose a seed of 123459876 it would give a degenerate series 0,0,0,0, ... I've made that into an error. */ static inline unsigned long int ran0_get (void *vstate); static double ran0_get_double (void *vstate); static void ran0_set (void *state, unsigned long int s); static const long int m = 2147483647, a = 16807, q = 127773, r = 2836; static const unsigned long int mask = 123459876; typedef struct { unsigned long int x; } ran0_state_t; static inline unsigned long int ran0_get (void *vstate) { ran0_state_t *state = (ran0_state_t *) vstate; const unsigned long int x = state->x; const long int h = x / q; const long int t = a * (x - h * q) - h * r; if (t < 0) { state->x = t + m; } else { state->x = t; } return state->x; } static double ran0_get_double (void *vstate) { return ran0_get (vstate) / 2147483647.0 ; } static void ran0_set (void *vstate, unsigned long int s) { ran0_state_t *state = (ran0_state_t *) vstate; if (s == mask) { GSL_ERROR_VOID ("ran0 should not use seed == mask", GSL_EINVAL); } state->x = s ^ mask; return; } static const gsl_rng_type ran0_type = {"ran0", /* name */ 2147483646, /* RAND_MAX */ 1, /* RAND_MIN */ sizeof (ran0_state_t), &ran0_set, &ran0_get, &ran0_get_double}; const gsl_rng_type *gsl_rng_ran0 = &ran0_type; gsl/rng/Makefile.in0000664000175000017500000012554214057135461012571 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = rng ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslrng_la_LIBADD = am_libgslrng_la_OBJECTS = borosh13.lo cmrg.lo coveyou.lo default.lo \ file.lo fishman18.lo fishman20.lo fishman2x.lo gfsr4.lo \ knuthran2.lo knuthran.lo knuthran2002.lo lecuyer21.lo \ minstd.lo mrg.lo mt.lo r250.lo ran0.lo ran1.lo ran2.lo ran3.lo \ rand48.lo rand.lo random.lo randu.lo ranf.lo ranlux.lo \ ranlxd.lo ranlxs.lo ranmar.lo rng.lo slatec.lo taus.lo \ taus113.lo transputer.lo tt.lo types.lo uni32.lo uni.lo vax.lo \ waterman14.lo zuf.lo inline.lo libgslrng_la_OBJECTS = $(am_libgslrng_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslrng.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/borosh13.Plo ./$(DEPDIR)/cmrg.Plo \ ./$(DEPDIR)/coveyou.Plo ./$(DEPDIR)/default.Plo \ ./$(DEPDIR)/file.Plo ./$(DEPDIR)/fishman18.Plo \ ./$(DEPDIR)/fishman20.Plo ./$(DEPDIR)/fishman2x.Plo \ ./$(DEPDIR)/gfsr4.Plo ./$(DEPDIR)/inline.Plo \ ./$(DEPDIR)/knuthran.Plo ./$(DEPDIR)/knuthran2.Plo \ ./$(DEPDIR)/knuthran2002.Plo ./$(DEPDIR)/lecuyer21.Plo \ ./$(DEPDIR)/minstd.Plo ./$(DEPDIR)/mrg.Plo ./$(DEPDIR)/mt.Plo \ ./$(DEPDIR)/r250.Plo ./$(DEPDIR)/ran0.Plo ./$(DEPDIR)/ran1.Plo \ ./$(DEPDIR)/ran2.Plo ./$(DEPDIR)/ran3.Plo ./$(DEPDIR)/rand.Plo \ ./$(DEPDIR)/rand48.Plo ./$(DEPDIR)/random.Plo \ ./$(DEPDIR)/randu.Plo ./$(DEPDIR)/ranf.Plo \ ./$(DEPDIR)/ranlux.Plo ./$(DEPDIR)/ranlxd.Plo \ ./$(DEPDIR)/ranlxs.Plo ./$(DEPDIR)/ranmar.Plo \ ./$(DEPDIR)/rng.Plo ./$(DEPDIR)/slatec.Plo \ ./$(DEPDIR)/taus.Plo ./$(DEPDIR)/taus113.Plo \ ./$(DEPDIR)/test.Po ./$(DEPDIR)/transputer.Plo \ ./$(DEPDIR)/tt.Plo ./$(DEPDIR)/types.Plo ./$(DEPDIR)/uni.Plo \ ./$(DEPDIR)/uni32.Plo ./$(DEPDIR)/vax.Plo \ ./$(DEPDIR)/waterman14.Plo ./$(DEPDIR)/zuf.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslrng_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslrng_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslrng.la pkginclude_HEADERS = gsl_rng.h AM_CPPFLAGS = -I$(top_srcdir) libgslrng_la_SOURCES = borosh13.c cmrg.c coveyou.c default.c file.c fishman18.c fishman20.c fishman2x.c gfsr4.c knuthran2.c knuthran.c knuthran2002.c lecuyer21.c minstd.c mrg.c mt.c r250.c ran0.c ran1.c ran2.c ran3.c rand48.c rand.c random.c randu.c ranf.c ranlux.c ranlxd.c ranlxs.c ranmar.c rng.c slatec.c taus.c taus113.c transputer.c tt.c types.c uni32.c uni.c vax.c waterman14.c zuf.c inline.c CLEANFILES = test.dat noinst_HEADERS = schrage.c test_SOURCES = test.c test_LDADD = libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la TESTS = $(check_PROGRAMS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu rng/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu rng/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslrng.la: $(libgslrng_la_OBJECTS) $(libgslrng_la_DEPENDENCIES) $(EXTRA_libgslrng_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslrng_la_OBJECTS) $(libgslrng_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/borosh13.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmrg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coveyou.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/default.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fishman18.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fishman20.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fishman2x.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfsr4.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inline.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/knuthran.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/knuthran2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/knuthran2002.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lecuyer21.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minstd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mrg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r250.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ran0.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ran1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ran2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ran3.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rand.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rand48.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/randu.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ranf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ranlux.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ranlxd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ranlxs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ranmar.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rng.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slatec.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taus.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taus113.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transputer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/types.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uni.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uni32.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vax.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/waterman14.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zuf.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/borosh13.Plo -rm -f ./$(DEPDIR)/cmrg.Plo -rm -f ./$(DEPDIR)/coveyou.Plo -rm -f ./$(DEPDIR)/default.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/fishman18.Plo -rm -f ./$(DEPDIR)/fishman20.Plo -rm -f ./$(DEPDIR)/fishman2x.Plo -rm -f ./$(DEPDIR)/gfsr4.Plo -rm -f ./$(DEPDIR)/inline.Plo -rm -f ./$(DEPDIR)/knuthran.Plo -rm -f ./$(DEPDIR)/knuthran2.Plo -rm -f ./$(DEPDIR)/knuthran2002.Plo -rm -f ./$(DEPDIR)/lecuyer21.Plo -rm -f ./$(DEPDIR)/minstd.Plo -rm -f ./$(DEPDIR)/mrg.Plo -rm -f ./$(DEPDIR)/mt.Plo -rm -f ./$(DEPDIR)/r250.Plo -rm -f ./$(DEPDIR)/ran0.Plo -rm -f ./$(DEPDIR)/ran1.Plo -rm -f ./$(DEPDIR)/ran2.Plo -rm -f ./$(DEPDIR)/ran3.Plo -rm -f ./$(DEPDIR)/rand.Plo -rm -f ./$(DEPDIR)/rand48.Plo -rm -f ./$(DEPDIR)/random.Plo -rm -f ./$(DEPDIR)/randu.Plo -rm -f ./$(DEPDIR)/ranf.Plo -rm -f ./$(DEPDIR)/ranlux.Plo -rm -f ./$(DEPDIR)/ranlxd.Plo -rm -f ./$(DEPDIR)/ranlxs.Plo -rm -f ./$(DEPDIR)/ranmar.Plo -rm -f ./$(DEPDIR)/rng.Plo -rm -f ./$(DEPDIR)/slatec.Plo -rm -f ./$(DEPDIR)/taus.Plo -rm -f ./$(DEPDIR)/taus113.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/transputer.Plo -rm -f ./$(DEPDIR)/tt.Plo -rm -f ./$(DEPDIR)/types.Plo -rm -f ./$(DEPDIR)/uni.Plo -rm -f ./$(DEPDIR)/uni32.Plo -rm -f ./$(DEPDIR)/vax.Plo -rm -f ./$(DEPDIR)/waterman14.Plo -rm -f ./$(DEPDIR)/zuf.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/borosh13.Plo -rm -f ./$(DEPDIR)/cmrg.Plo -rm -f ./$(DEPDIR)/coveyou.Plo -rm -f ./$(DEPDIR)/default.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/fishman18.Plo -rm -f ./$(DEPDIR)/fishman20.Plo -rm -f ./$(DEPDIR)/fishman2x.Plo -rm -f ./$(DEPDIR)/gfsr4.Plo -rm -f ./$(DEPDIR)/inline.Plo -rm -f ./$(DEPDIR)/knuthran.Plo -rm -f ./$(DEPDIR)/knuthran2.Plo -rm -f ./$(DEPDIR)/knuthran2002.Plo -rm -f ./$(DEPDIR)/lecuyer21.Plo -rm -f ./$(DEPDIR)/minstd.Plo -rm -f ./$(DEPDIR)/mrg.Plo -rm -f ./$(DEPDIR)/mt.Plo -rm -f ./$(DEPDIR)/r250.Plo -rm -f ./$(DEPDIR)/ran0.Plo -rm -f ./$(DEPDIR)/ran1.Plo -rm -f ./$(DEPDIR)/ran2.Plo -rm -f ./$(DEPDIR)/ran3.Plo -rm -f ./$(DEPDIR)/rand.Plo -rm -f ./$(DEPDIR)/rand48.Plo -rm -f ./$(DEPDIR)/random.Plo -rm -f ./$(DEPDIR)/randu.Plo -rm -f ./$(DEPDIR)/ranf.Plo -rm -f ./$(DEPDIR)/ranlux.Plo -rm -f ./$(DEPDIR)/ranlxd.Plo -rm -f ./$(DEPDIR)/ranlxs.Plo -rm -f ./$(DEPDIR)/ranmar.Plo -rm -f ./$(DEPDIR)/rng.Plo -rm -f ./$(DEPDIR)/slatec.Plo -rm -f ./$(DEPDIR)/taus.Plo -rm -f ./$(DEPDIR)/taus113.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/transputer.Plo -rm -f ./$(DEPDIR)/tt.Plo -rm -f ./$(DEPDIR)/types.Plo -rm -f ./$(DEPDIR)/uni.Plo -rm -f ./$(DEPDIR)/uni32.Plo -rm -f ./$(DEPDIR)/vax.Plo -rm -f ./$(DEPDIR)/waterman14.Plo -rm -f ./$(DEPDIR)/zuf.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # benchmark_SOURCES = benchmark.c # benchmark_LDADD = libgslrng.la ../err/libgslerr.la ../utils/libutils.la # rng_dump_SOURCES = rng-dump.c # rng_dump_LDADD = libgslrng.la ../err/libgslerr.la ../utils/libutils.la # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/rng/r250.c0000644000175000017500000001132413536674414011355 0ustar eddedd/* rng/r250.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is a shift-register random number generator. The sequence is x_n = x_{n-103} ^ x_{n-250} ("^" means XOR) defined on 32-bit words. BJG: Note that this implementation actually uses the sequence, x_n = x_{n-147} ^ x_{n-250} which generates the outputs in time-reversed order but is otherwise completely equivalent. The first 250 elements x_1 .. x_250 are first initialized as x_n = s_n, where s_n = (69069*s_{n-1}) mod 2^32 and s_0=s is the user-supplied seed. To ensure that the sequence does not lie on a subspace we force 32 of the entries to be linearly independent. We take the 32 elements x[3], x[10], x[17], x[24], ..., 213 and apply the following operations, x[3] &= 11111111111111111111111111111111 x[3] |= 10000000000000000000000000000000 x[10] &= 01111111111111111111111111111111 x[10] |= 01000000000000000000000000000000 x[17] &= 00111111111111111111111111111111 x[17] |= 00100000000000000000000000000000 .... ... x[206] &= 00000000000000000000000000000111 x[206] |= 00000000000000000000000000000100 x[213] &= 00000000000000000000000000000011 x[213] |= 00000000000000000000000000000010 x[220] &= 00000000000000000000000000000001 x[220] |= 00000000000000000000000000000001 i.e. if we consider the bits of the 32 elements as forming a 32x32 array then we are setting the diagonal bits of the array to one and masking the lower triangle below the diagonal to zero. With this initialization procedure the theoretical value of x_{10001} is 1100653588 for s = 1 (Actually I got this by running the original code). The subscript 10001 means (1) seed the generator with s = 1 and then do 10000 actual iterations. The period of this generator is about 2^250. The algorithm works for any number of bits. It is implemented here for 32 bits. From: S. Kirkpatrick and E. Stoll, "A very fast shift-register sequence random number generator", Journal of Computational Physics, 40, 517-526 (1981). */ static inline unsigned long int r250_get (void *vstate); static double r250_get_double (void *vstate); static void r250_set (void *state, unsigned long int s); typedef struct { int i; unsigned long x[250]; } r250_state_t; static inline unsigned long int r250_get (void *vstate) { r250_state_t *state = (r250_state_t *) vstate; unsigned long int k; int j; int i = state->i; if (i >= 147) { j = i - 147; } else { j = i + 103; } k = state->x[i] ^ state->x[j]; state->x[i] = k; if (i >= 249) { state->i = 0; } else { state->i = i + 1; } return k; } static double r250_get_double (void *vstate) { return r250_get (vstate) / 4294967296.0 ; } static void r250_set (void *vstate, unsigned long int s) { r250_state_t *state = (r250_state_t *) vstate; int i; if (s == 0) s = 1; /* default seed is 1 */ state->i = 0; #define LCG(n) ((69069 * n) & 0xffffffffUL) for (i = 0; i < 250; i++) /* Fill the buffer */ { s = LCG (s); state->x[i] = s; } { /* Masks for turning on the diagonal bit and turning off the leftmost bits */ unsigned long int msb = 0x80000000UL; unsigned long int mask = 0xffffffffUL; for (i = 0; i < 32; i++) { int k = 7 * i + 3; /* Select a word to operate on */ state->x[k] &= mask; /* Turn off bits left of the diagonal */ state->x[k] |= msb; /* Turn on the diagonal bit */ mask >>= 1; msb >>= 1; } } return; } static const gsl_rng_type r250_type = {"r250", /* name */ 0xffffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (r250_state_t), &r250_set, &r250_get, &r250_get_double}; const gsl_rng_type *gsl_rng_r250 = &r250_type; gsl/rng/lecuyer21.c0000644000175000017500000000434313536674414012503 0ustar eddedd/* rng/lecuyer21.c * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This generator is taken from * * Donald E. Knuth * The Art of Computer Programming * Volume 2 * Third Edition * Addison-Wesley * Page 108 * * This implementation copyright (C) 2001 Brian Gough, Carlo Perassi * and (C) 2003 Heiko Bauke. */ #include #include #include #define AAA 40692 #define MMM 2147483399UL #define QQQ 52774 #define RRR 3791 static inline unsigned long int ran_get (void *vstate); static double ran_get_double (void *vstate); static void ran_set (void *state, unsigned long int s); typedef struct { unsigned long int x; } ran_state_t; static inline unsigned long int ran_get (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; long int y = state->x; long int r = RRR * (y / QQQ); y = AAA * (y % QQQ) - r; if (y < 0) y += MMM; state->x = y; return state->x; } static double ran_get_double (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; return ran_get (state) / 2147483399.0; } static void ran_set (void *vstate, unsigned long int s) { ran_state_t *state = (ran_state_t *) vstate; if ((s%MMM) == 0) s = 1; /* default seed is 1 */ state->x = s % MMM; return; } static const gsl_rng_type ran_type = { "lecuyer21", /* name */ MMM-1, /* RAND_MAX */ 1, /* RAND_MIN */ sizeof (ran_state_t), &ran_set, &ran_get, &ran_get_double }; const gsl_rng_type *gsl_rng_lecuyer21 = &ran_type; gsl/rng/knuthran.c0000644000175000017500000001134713536674414012524 0ustar eddedd/* rng/knuthran.c * * Copyright (C) 2001, 2007 Brian Gough, Carlo Perassi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This generator is taken from * * Donald E. Knuth * The Art of Computer Programming * Volume 2 * Third Edition * Addison-Wesley * Section 3.6 * * The comments are taken from the book * Our comments are signed */ #include #include #include #define BUFLEN 2009 /* [Brian]: length of the buffer aa[] */ #define KK 100 /* the long lag */ #define LL 37 /* the short lag */ #define MM (1L << 30) /* the modulus */ #define TT 70 /* guaranteed separation between streams */ #define evenize(x) ((x) & (MM - 2)) /* make x even */ #define is_odd(x) ((x) & 1) /* the units bit of x */ #define mod_diff(x, y) (((x) - (y)) & (MM - 1)) /* (x - y) mod MM */ static inline void ran_array (unsigned long int aa[], unsigned int n, unsigned long int ran_x[]); static inline unsigned long int ran_get (void *vstate); static double ran_get_double (void *vstate); static void ran_set (void *state, unsigned long int s); typedef struct { unsigned int i; unsigned long int aa[BUFLEN]; /* [Carlo]: I can't pass n to ran_array like Knuth does */ unsigned long int ran_x[KK]; /* the generator state */ } ran_state_t; static inline void ran_array (unsigned long int aa[], unsigned int n, unsigned long int ran_x[]) { unsigned int i; unsigned int j; for (j = 0; j < KK; j++) aa[j] = ran_x[j]; for (; j < n; j++) aa[j] = mod_diff (aa[j - KK], aa[j - LL]); for (i = 0; i < LL; i++, j++) ran_x[i] = mod_diff (aa[j - KK], aa[j - LL]); for (; i < KK; i++, j++) ran_x[i] = mod_diff (aa[j - KK], ran_x[i - LL]); } static inline unsigned long int ran_get (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; unsigned int i = state->i; if (i == 0) { /* fill buffer with new random numbers */ ran_array (state->aa, BUFLEN, state->ran_x); } state->i = (i + 1) % BUFLEN; return state->aa[i]; } static double ran_get_double (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; return ran_get (state) / 1073741824.0; /* [Carlo]: RAND_MAX + 1 */ } static void ran_set (void *vstate, unsigned long int s) { ran_state_t *state = (ran_state_t *) vstate; long x[KK + KK - 1]; /* the preparation buffer */ register int j; register int t; register long ss = evenize (s + 2); for (j = 0; j < KK; j++) { x[j] = ss; /* bootstrap the buffer */ ss <<= 1; if (ss >= MM) /* cyclic shift 29 bits */ ss -= MM - 2; } for (; j < KK + KK - 1; j++) x[j] = 0; x[1]++; /* make x[1] (and only x[1]) odd */ ss = s & (MM - 1); t = TT - 1; while (t) { for (j = KK - 1; j > 0; j--) /* square */ x[j + j] = x[j]; for (j = KK + KK - 2; j > KK - LL; j -= 2) x[KK + KK - 1 - j] = evenize (x[j]); for (j = KK + KK - 2; j >= KK; j--) if (is_odd (x[j])) { x[j - (KK - LL)] = mod_diff (x[j - (KK - LL)], x[j]); x[j - KK] = mod_diff (x[j - KK], x[j]); } if (is_odd (ss)) { /* multiply by "z" */ for (j = KK; j > 0; j--) x[j] = x[j - 1]; x[0] = x[KK]; /* shift the buffer cyclically */ if (is_odd (x[KK])) x[LL] = mod_diff (x[LL], x[KK]); } if (ss) ss >>= 1; else t--; } state->i = 0; for (j = 0; j < LL; j++) state->ran_x[j + KK - LL] = x[j]; for (; j < KK; j++) state->ran_x[j - LL] = x[j]; return; } static const gsl_rng_type ran_type = { "knuthran", /* name */ 0x3fffffffUL, /* RAND_MAX *//* [Carlo]: (2 ^ 30) - 1 */ 0, /* RAND_MIN */ sizeof (ran_state_t), &ran_set, &ran_get, &ran_get_double }; const gsl_rng_type *gsl_rng_knuthran = &ran_type; gsl/rng/waterman14.c0000644000175000017500000000422113536674414012646 0ustar eddedd/* rng/waterman14.c * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This generator is taken from * * Donald E. Knuth * The Art of Computer Programming * Volume 2 * Third Edition * Addison-Wesley * Page 106-108 * * It is called "Waterman". * * This implementation copyright (C) 2001 Carlo Perassi * and (C) 2003 Heiko Bauke. */ #include #include #include #define AA 1566083941UL #define MM 0xffffffffUL /* 2 ^ 32 - 1 */ static inline unsigned long int ran_get (void *vstate); static double ran_get_double (void *vstate); static void ran_set (void *state, unsigned long int s); typedef struct { unsigned long int x; } ran_state_t; static inline unsigned long int ran_get (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; state->x = (AA * state->x) & MM; return state->x; } static double ran_get_double (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; return ran_get (state) / 4294967296.0; } static void ran_set (void *vstate, unsigned long int s) { ran_state_t *state = (ran_state_t *) vstate; if (s == 0) s = 1; /* default seed is 1 */ state->x = s & MM; return; } static const gsl_rng_type ran_type = { "waterman14", /* name */ MM, /* RAND_MAX */ 1, /* RAND_MIN */ sizeof (ran_state_t), &ran_set, &ran_get, &ran_get_double }; const gsl_rng_type *gsl_rng_waterman14 = &ran_type; gsl/rng/ranmar.c0000644000175000017500000000757013536674414012155 0ustar eddedd/* rng/ranmar.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is the RANMAR lagged fibonacci generator of Marsaglia, Zaman and Tsang. The sequence is a series of 24-bit integers, x_n, x_n = (y_n - c_n + 2^24) mod 2^24 where, y_n = (y_{n-97) - y_{n-33} + 2^24) mod 2^24 c_n = (c_{n-1} - 7654321 + 2^24 - 3) mod (2^24 - 3) The period of this generator is 2^144. The generator provides about 900 million different subsequences each of length O(10^30). Thus each seed up to 900,000,000 gives an independent sequence. Although it was good in its day this generator now has known statistical defects and has been superseded by RANLUX. From: F. James, "A Review of Pseudorandom number generators", Computer Physics Communications 60, 329 (1990). G. Marsaglia, A. Zaman and W.W. Tsang, Stat. Prob. Lett. 9, 35 (1990) */ static inline unsigned long int ranmar_get (void *vstate); static double ranmar_get_double (void *vstate); static void ranmar_set (void *state, unsigned long int s); static const unsigned long int two24 = 16777216; /* 2^24 */ typedef struct { unsigned int i; unsigned int j; long int carry; unsigned long int u[97]; } ranmar_state_t; static inline unsigned long int ranmar_get (void *vstate) { ranmar_state_t *state = (ranmar_state_t *) vstate; unsigned int i = state->i; unsigned int j = state->j; long int carry = state->carry; long int delta = state->u[i] - state->u[j]; if (delta < 0) delta += two24 ; state->u[i] = delta; if (i == 0) { i = 96; } else { i--; } state->i = i; if (j == 0) { j = 96; } else { j--; } state->j = j; carry += - 7654321 ; if (carry < 0) carry += two24 - 3; state->carry = carry ; delta += - carry ; if (delta < 0) delta += two24 ; return delta; } static double ranmar_get_double (void *vstate) { return ranmar_get (vstate) / 16777216.0 ; } static void ranmar_set (void *vstate, unsigned long int s) { ranmar_state_t *state = (ranmar_state_t *) vstate; unsigned long int ij = s / 30082 ; unsigned long int kl = s % 30082 ; int i = (ij / 177) % 177 + 2 ; int j = (ij % 177) + 2 ; int k = (kl / 169) % 178 + 1 ; int l = (kl % 169) ; int a, b; for (a = 0; a < 97; a++) { unsigned long int sum = 0 ; unsigned long int t = two24 ; for (b = 0; b < 24; b++) { unsigned long int m = (((i * j) % 179) * k) % 179 ; i = j ; j = k ; k = m ; l = (53 * l + 1) % 169 ; t >>= 1 ; if ((l * m) % 64 >= 32) sum += t ; } state->u[a] = sum ; } state->i = 96; state->j = 32; state->carry = 362436 ; } static const gsl_rng_type ranmar_type = {"ranmar", /* name */ 0x00ffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (ranmar_state_t), &ranmar_set, &ranmar_get, &ranmar_get_double}; const gsl_rng_type *gsl_rng_ranmar = &ranmar_type; gsl/rng/taus113.c0000644000175000017500000001256713536675317012103 0ustar eddedd/* rng/taus113.c * Copyright (C) 2002 Atakan Gurkan * Based on the file taus.c which has the notice * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* This is a maximally equidistributed combined, collision free Tausworthe generator, with a period ~2^{113}. The sequence is, x_n = (z1_n ^ z2_n ^ z3_n ^ z4_n) b = (((z1_n << 6) ^ z1_n) >> 13) z1_{n+1} = (((z1_n & 4294967294) << 18) ^ b) b = (((z2_n << 2) ^ z2_n) >> 27) z2_{n+1} = (((z2_n & 4294967288) << 2) ^ b) b = (((z3_n << 13) ^ z3_n) >> 21) z3_{n+1} = (((z3_n & 4294967280) << 7) ^ b) b = (((z4_n << 3) ^ z4_n) >> 12) z4_{n+1} = (((z4_n & 4294967168) << 13) ^ b) computed modulo 2^32. In the formulas above '^' means exclusive-or (C-notation), not exponentiation. The algorithm is for 32-bit integers, hence a bitmask is used to clear all but least significant 32 bits, after left shifts, to make the code work on architectures where integers are 64-bit. The generator is initialized with z{i+1} = (69069 * zi) MOD 2^32 where z0 is the seed provided During initialization a check is done to make sure that the initial seeds have a required number of their most significant bits set. After this, the state is passed through the RNG 10 times to ensure the state satisfies a recurrence relation. References: P. L'Ecuyer, "Tables of Maximally-Equidistributed Combined LFSR Generators", Mathematics of Computation, 68, 225 (1999), 261--269. http://www.iro.umontreal.ca/~lecuyer/myftp/papers/tausme2.ps P. L'Ecuyer, "Maximally Equidistributed Combined Tausworthe Generators", Mathematics of Computation, 65, 213 (1996), 203--213. http://www.iro.umontreal.ca/~lecuyer/myftp/papers/tausme.ps the online version of the latter contains corrections to the print version. */ #include #include #include #define LCG(n) ((69069UL * n) & 0xffffffffUL) #define MASK 0xffffffffUL static inline unsigned long int taus113_get (void *vstate); static double taus113_get_double (void *vstate); static void taus113_set (void *state, unsigned long int s); typedef struct { unsigned long int z1, z2, z3, z4; } taus113_state_t; static inline unsigned long taus113_get (void *vstate) { taus113_state_t *state = (taus113_state_t *) vstate; unsigned long b1, b2, b3, b4; b1 = ((((state->z1 << 6UL) & MASK) ^ state->z1) >> 13UL); state->z1 = ((((state->z1 & 4294967294UL) << 18UL) & MASK) ^ b1); b2 = ((((state->z2 << 2UL) & MASK) ^ state->z2) >> 27UL); state->z2 = ((((state->z2 & 4294967288UL) << 2UL) & MASK) ^ b2); b3 = ((((state->z3 << 13UL) & MASK) ^ state->z3) >> 21UL); state->z3 = ((((state->z3 & 4294967280UL) << 7UL) & MASK) ^ b3); b4 = ((((state->z4 << 3UL) & MASK) ^ state->z4) >> 12UL); state->z4 = ((((state->z4 & 4294967168UL) << 13UL) & MASK) ^ b4); return (state->z1 ^ state->z2 ^ state->z3 ^ state->z4); } static double taus113_get_double (void *vstate) { return taus113_get (vstate) / 4294967296.0; } static void taus113_set (void *vstate, unsigned long int s) { taus113_state_t *state = (taus113_state_t *) vstate; if (!s) s = 1UL; /* default seed is 1 */ state->z1 = LCG (s); if (state->z1 < 2UL) state->z1 += 2UL; state->z2 = LCG (state->z1); if (state->z2 < 8UL) state->z2 += 8UL; state->z3 = LCG (state->z2); if (state->z3 < 16UL) state->z3 += 16UL; state->z4 = LCG (state->z3); if (state->z4 < 128UL) state->z4 += 128UL; /* Calling RNG ten times to satify recurrence condition */ taus113_get (state); taus113_get (state); taus113_get (state); taus113_get (state); taus113_get (state); taus113_get (state); taus113_get (state); taus113_get (state); taus113_get (state); taus113_get (state); return; } static const gsl_rng_type taus113_type = { "taus113", /* name */ 0xffffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (taus113_state_t), &taus113_set, &taus113_get, &taus113_get_double }; const gsl_rng_type *gsl_rng_taus113 = &taus113_type; /* Rules for analytic calculations using GNU Emacs Calc: (used to find the values for the test program) [ LCG(n) := n * 69069 mod (2^32) ] [ b1(x) := rsh(xor(lsh(x, 6), x), 13), q1(x) := xor(lsh(and(x, 4294967294), 18), b1(x)), b2(x) := rsh(xor(lsh(x, 2), x), 27), q2(x) := xor(lsh(and(x, 4294967288), 2), b2(x)), b3(x) := rsh(xor(lsh(x, 13), x), 21), q3(x) := xor(lsh(and(x, 4294967280), 7), b3(x)), b4(x) := rsh(xor(lsh(x, 3), x), 12), q4(x) := xor(lsh(and(x, 4294967168), 13), b4(x)) ] [ S([z1,z2,z3,z4]) := [q1(z1), q2(z2), q3(z3), q4(z4)] ] */ gsl/rng/fishman2x.c0000644000175000017500000000551513536674414012571 0ustar eddedd/* rng/fishman2x.c * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This generator is taken from * * Donald E. Knuth * The Art of Computer Programming * Volume 2 * Third Edition * Addison-Wesley * Page 108 * * It is called "Fishman - L'Ecuyer" * * This implementation copyright (C) 2001 Carlo Perassi * and (C) 2003 Heiko Bauke. */ #include #include #include /* Fishman */ #define AAA_F 48271UL #define MMM_F 0x7fffffffUL /* 2 ^ 31 - 1 */ #define QQQ_F 44488UL #define RRR_F 3399UL /* L'Ecuyer */ #define AAA_L 40692UL #define MMM_L 0x7fffff07UL /* 2 ^ 31 - 249 */ #define QQQ_L 52774UL #define RRR_L 3791UL static inline unsigned long int ran_get (void *vstate); static double ran_get_double (void *vstate); static void ran_set (void *state, unsigned long int s); typedef struct { unsigned long int x; unsigned long int y; unsigned long int z; } ran_state_t; static inline unsigned long int ran_get (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; long int y, r; r = RRR_F * (state->x / QQQ_F); y = AAA_F * (state->x % QQQ_F) - r; if (y < 0) y += MMM_F; state->x = y; r = RRR_L * (state->y / QQQ_L); y = AAA_L * (state->y % QQQ_L) - r; if (y < 0) y += MMM_L; state->y = y; state->z = (state->x > state->y) ? (state->x - state->y) : MMM_F + state->x - state->y; return state->z; } static double ran_get_double (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; return ran_get (state) / 2147483647.0; } static void ran_set (void *vstate, unsigned long int s) { ran_state_t *state = (ran_state_t *) vstate; if ((s % MMM_F) == 0 || (s % MMM_L) == 0) s = 1; /* default seed is 1 */ state->x = s % MMM_F; state->y = s % MMM_L; state->z = (state->x > state->y) ? (state->x - state->y) : MMM_F + state->x - state->y; return; } static const gsl_rng_type ran_type = { "fishman2x", /* name */ MMM_F - 1, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (ran_state_t), &ran_set, &ran_get, &ran_get_double }; const gsl_rng_type *gsl_rng_fishman2x = &ran_type; gsl/rng/schrage.c0000644000175000017500000000352213536674414012302 0ustar eddedd/* rng/schrage.c * Copyright (C) 2003 Carlo Perassi and Heiko Bauke. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static inline unsigned long int schrage (unsigned long int a, unsigned long int b, unsigned long int m) { /* This is a modified version of Schrage's method. It ensures that no * overflow or underflow occurs even if a=ceil(sqrt(m)). Usual * Schrage's method works only until a=floor(sqrt(m)). */ unsigned long int q, t; if (a == 0UL) return 0UL; q = m / a; t = 2 * m - (m % a) * (b / q); if (t >= m) t -= m; t += a * (b % q); return (t >= m) ? (t - m) : t; } static inline unsigned long int schrage_mult (unsigned long int a, unsigned long int b, unsigned long int m, unsigned long int sqrtm) { /* To multiply a and b use Schrage's method 3 times. * represent a in base ceil(sqrt(m)) a = a1*ceil(sqrt(m)) + a0 * a*b = (a1*ceil(sqrt(m)) + a0)*b = a1*ceil(sqrt(m))*b + a0*b */ unsigned long int t0 = schrage (sqrtm, b, m); unsigned long int t1 = schrage (a / sqrtm, t0, m); unsigned long int t2 = schrage (a % sqrtm, b, m); unsigned long int t = t1 + t2; return (t >= m) ? (t - m) : t; } gsl/rng/ranlxs.c0000644000175000017500000001577113536674414012206 0ustar eddedd/* rng/ranlxs.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is an implementation of M. Luescher's second generation version of the RANLUX generator. Thanks to Martin Luescher for providing information on this generator. */ static unsigned long int ranlxs_get (void *vstate); static inline double ranlxs_get_double (void *vstate); static void ranlxs_set_lux (void *state, unsigned long int s, unsigned int luxury); static void ranlxs0_set (void *state, unsigned long int s); static void ranlxs1_set (void *state, unsigned long int s); static void ranlxs2_set (void *state, unsigned long int s); static const int next[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0}; static const int snext[24] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0}; static const double sbase = 16777216.0; /* 2^24 */ static const double sone_bit = 1.0 / 16777216.0; /* 1/2^24 */ static const double one_bit = 1.0 / 281474976710656.0; /* 1/2^48 */ static const double shift = 268435456.0; /* 2^28 */ #define RANLUX_STEP(x1,x2,i1,i2,i3) \ x1=xdbl[i1] - xdbl[i2]; \ if (x2 < 0) \ { \ x1-=one_bit; \ x2+=1; \ } \ xdbl[i3]=x2 typedef struct { double xdbl[12], ydbl[12]; /* doubles first so they are 8-byte aligned */ double carry; float xflt[24]; unsigned int ir; unsigned int jr; unsigned int is; unsigned int is_old; unsigned int pr; } ranlxs_state_t; static void increment_state (ranlxs_state_t * state); static void increment_state (ranlxs_state_t * state) { int k, kmax, m; double x, y1, y2, y3; float *xflt = state->xflt; double *xdbl = state->xdbl; double *ydbl = state->ydbl; double carry = state->carry; unsigned int ir = state->ir; unsigned int jr = state->jr; for (k = 0; ir > 0; ++k) { y1 = xdbl[jr] - xdbl[ir]; y2 = y1 - carry; if (y2 < 0) { carry = one_bit; y2 += 1; } else { carry = 0; } xdbl[ir] = y2; ir = next[ir]; jr = next[jr]; } kmax = state->pr - 12; for (; k <= kmax; k += 12) { y1 = xdbl[7] - xdbl[0]; y1 -= carry; RANLUX_STEP (y2, y1, 8, 1, 0); RANLUX_STEP (y3, y2, 9, 2, 1); RANLUX_STEP (y1, y3, 10, 3, 2); RANLUX_STEP (y2, y1, 11, 4, 3); RANLUX_STEP (y3, y2, 0, 5, 4); RANLUX_STEP (y1, y3, 1, 6, 5); RANLUX_STEP (y2, y1, 2, 7, 6); RANLUX_STEP (y3, y2, 3, 8, 7); RANLUX_STEP (y1, y3, 4, 9, 8); RANLUX_STEP (y2, y1, 5, 10, 9); RANLUX_STEP (y3, y2, 6, 11, 10); if (y3 < 0) { carry = one_bit; y3 += 1; } else { carry = 0; } xdbl[11] = y3; } kmax = state->pr; for (; k < kmax; ++k) { y1 = xdbl[jr] - xdbl[ir]; y2 = y1 - carry; if (y2 < 0) { carry = one_bit; y2 += 1; } else { carry = 0; } xdbl[ir] = y2; ydbl[ir] = y2 + shift; ir = next[ir]; jr = next[jr]; } ydbl[ir] = xdbl[ir] + shift; for (k = next[ir]; k > 0;) { ydbl[k] = xdbl[k] + shift; k = next[k]; } for (k = 0, m = 0; k < 12; ++k) { x = xdbl[k]; y2 = ydbl[k] - shift; if (y2 > x) y2 -= sone_bit; y1 = (x - y2) * sbase; xflt[m++] = (float) y1; xflt[m++] = (float) y2; } state->ir = ir; state->is = 2 * ir; state->is_old = 2 * ir; state->jr = jr; state->carry = carry; } static inline double ranlxs_get_double (void *vstate) { ranlxs_state_t *state = (ranlxs_state_t *) vstate; const unsigned int is = snext[state->is]; state->is = is; if (is == state->is_old) increment_state (state); return state->xflt[state->is]; } static unsigned long int ranlxs_get (void *vstate) { return ranlxs_get_double (vstate) * 16777216.0; /* 2^24 */ } static void ranlxs_set_lux (void *vstate, unsigned long int s, unsigned int luxury) { ranlxs_state_t *state = (ranlxs_state_t *) vstate; int ibit, jbit, i, k, m, xbit[31]; double x, y; long int seed; if (s == 0) s = 1; /* default seed is 1 */ seed = s; i = seed & 0x7FFFFFFFUL; /* Allowed seeds for ranlxs are 0 .. 2^31-1 */ for (k = 0; k < 31; ++k) { xbit[k] = i % 2; i /= 2; } ibit = 0; jbit = 18; for (k = 0; k < 12; ++k) { x = 0; for (m = 1; m <= 48; ++m) { y = (double) xbit[ibit]; x += x + y; xbit[ibit] = (xbit[ibit] + xbit[jbit]) % 2; ibit = (ibit + 1) % 31; jbit = (jbit + 1) % 31; } state->xdbl[k] = one_bit * x; } state->carry = 0; state->ir = 0; state->jr = 7; state->is = 23; state->is_old = 0; state->pr = luxury; } static void ranlxs0_set (void *vstate, unsigned long int s) { ranlxs_set_lux (vstate, s, 109); } void ranlxs1_set (void *vstate, unsigned long int s) { ranlxs_set_lux (vstate, s, 202); } static void ranlxs2_set (void *vstate, unsigned long int s) { ranlxs_set_lux (vstate, s, 397); } static const gsl_rng_type ranlxs0_type = {"ranlxs0", /* name */ 0x00ffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (ranlxs_state_t), &ranlxs0_set, &ranlxs_get, &ranlxs_get_double}; static const gsl_rng_type ranlxs1_type = {"ranlxs1", /* name */ 0x00ffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (ranlxs_state_t), &ranlxs1_set, &ranlxs_get, &ranlxs_get_double}; static const gsl_rng_type ranlxs2_type = {"ranlxs2", /* name */ 0x00ffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (ranlxs_state_t), &ranlxs2_set, &ranlxs_get, &ranlxs_get_double}; const gsl_rng_type *gsl_rng_ranlxs0 = &ranlxs0_type; const gsl_rng_type *gsl_rng_ranlxs1 = &ranlxs1_type; const gsl_rng_type *gsl_rng_ranlxs2 = &ranlxs2_type; gsl/rng/ranlxd.c0000644000175000017500000001321413536674414012155 0ustar eddedd/* rng/ranlxd.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is an implementation of Martin Luescher's second generation double-precision (48-bit) version of the RANLUX generator. Thanks to Martin Luescher for providing information on this generator. */ static inline unsigned long int ranlxd_get (void *vstate); static double ranlxd_get_double (void *vstate); static void ranlxd_set_lux (void *state, unsigned long int s, unsigned int luxury); static void ranlxd1_set (void *state, unsigned long int s); static void ranlxd2_set (void *state, unsigned long int s); static const int next[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0}; static const double one_bit = 1.0 / 281474976710656.0; /* 1/2^48 */ #define RANLUX_STEP(x1,x2,i1,i2,i3) \ x1=xdbl[i1] - xdbl[i2]; \ if (x2 < 0) \ { \ x1-=one_bit; \ x2+=1; \ } \ xdbl[i3]=x2 typedef struct { double xdbl[12]; double carry; unsigned int ir; unsigned int jr; unsigned int ir_old; unsigned int pr; } ranlxd_state_t; static inline void increment_state (ranlxd_state_t * state); static inline void increment_state (ranlxd_state_t * state) { int k, kmax; double y1, y2, y3; double *xdbl = state->xdbl; double carry = state->carry; unsigned int ir = state->ir; unsigned int jr = state->jr; for (k = 0; ir > 0; ++k) { y1 = xdbl[jr] - xdbl[ir]; y2 = y1 - carry; if (y2 < 0) { carry = one_bit; y2 += 1; } else { carry = 0; } xdbl[ir] = y2; ir = next[ir]; jr = next[jr]; } kmax = state->pr - 12; for (; k <= kmax; k += 12) { y1 = xdbl[7] - xdbl[0]; y1 -= carry; RANLUX_STEP (y2, y1, 8, 1, 0); RANLUX_STEP (y3, y2, 9, 2, 1); RANLUX_STEP (y1, y3, 10, 3, 2); RANLUX_STEP (y2, y1, 11, 4, 3); RANLUX_STEP (y3, y2, 0, 5, 4); RANLUX_STEP (y1, y3, 1, 6, 5); RANLUX_STEP (y2, y1, 2, 7, 6); RANLUX_STEP (y3, y2, 3, 8, 7); RANLUX_STEP (y1, y3, 4, 9, 8); RANLUX_STEP (y2, y1, 5, 10, 9); RANLUX_STEP (y3, y2, 6, 11, 10); if (y3 < 0) { carry = one_bit; y3 += 1; } else { carry = 0; } xdbl[11] = y3; } kmax = state->pr; for (; k < kmax; ++k) { y1 = xdbl[jr] - xdbl[ir]; y2 = y1 - carry; if (y2 < 0) { carry = one_bit; y2 += 1; } else { carry = 0; } xdbl[ir] = y2; ir = next[ir]; jr = next[jr]; } state->ir = ir; state->ir_old = ir; state->jr = jr; state->carry = carry; } static inline unsigned long int ranlxd_get (void *vstate) { return ranlxd_get_double (vstate) * 4294967296.0; /* 2^32 */ } static double ranlxd_get_double (void *vstate) { ranlxd_state_t *state = (ranlxd_state_t *) vstate; int ir = state->ir; state->ir = next[ir]; if (state->ir == state->ir_old) increment_state (state); return state->xdbl[state->ir]; } static void ranlxd_set_lux (void *vstate, unsigned long int s, unsigned int luxury) { ranlxd_state_t *state = (ranlxd_state_t *) vstate; int ibit, jbit, i, k, l, xbit[31]; double x, y; long int seed; if (s == 0) s = 1; /* default seed is 1 */ seed = s; i = seed & 0xFFFFFFFFUL; for (k = 0; k < 31; ++k) { xbit[k] = i % 2; i /= 2; } ibit = 0; jbit = 18; for (k = 0; k < 12; ++k) { x = 0; for (l = 1; l <= 48; ++l) { y = (double) ((xbit[ibit] + 1) % 2); x += x + y; xbit[ibit] = (xbit[ibit] + xbit[jbit]) % 2; ibit = (ibit + 1) % 31; jbit = (jbit + 1) % 31; } state->xdbl[k] = one_bit * x; } state->carry = 0; state->ir = 11; state->jr = 7; state->ir_old = 0; state->pr = luxury; } static void ranlxd1_set (void *vstate, unsigned long int s) { ranlxd_set_lux (vstate, s, 202); } static void ranlxd2_set (void *vstate, unsigned long int s) { ranlxd_set_lux (vstate, s, 397); } static const gsl_rng_type ranlxd1_type = {"ranlxd1", /* name */ 0xffffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (ranlxd_state_t), &ranlxd1_set, &ranlxd_get, &ranlxd_get_double}; static const gsl_rng_type ranlxd2_type = {"ranlxd2", /* name */ 0xffffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (ranlxd_state_t), &ranlxd2_set, &ranlxd_get, &ranlxd_get_double}; const gsl_rng_type *gsl_rng_ranlxd1 = &ranlxd1_type; const gsl_rng_type *gsl_rng_ranlxd2 = &ranlxd2_type; gsl/rng/ChangeLog0000644000175000017500000003075713536674414012306 0ustar eddedd2012-09-10 Rhys Ulerich * ranf.c Add include for gsl_sys.h to fix MSVC build. Thanks to Brian Gladman for the suggestion. 2011-04-28 Brian Gough * ranlxs.c (ranlxs_set_lux): enforce maximum seed of 2^31-1 (0x7FFFFFFF) for ranlxs 2010-01-07 Brian Gough * ran3.c (ran3_set): added a check for negative j 2009-07-09 Brian Gough * rng.c (gsl_rng_free): handle NULL argument in free 2008-10-13 Brian Gough * file.c: added (char *) to allow compilation with C++ compiler 2008-07-03 Brian Gough * rng.c: moved inline functions to inline.c * gsl_rng.h: use new inline declarations * inline.c: handle inline functions separately * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2007-01-28 Brian Gough * knuthran2002.c: added revised version from 9th printing 2007-01-04 Brian Gough * default.c (gsl_rng_env_setup): send newline to stderr not stdout 2006-04-13 Brian Gough * default.c (gsl_rng_env_setup): print a newline after list of generators in error message 2006-03-16 Brian Gough * test.c (main): added taus2 test 2006-02-19 Brian Gough * rng.c: added note about why range=max-min not max-min+1 2005-12-16 Brian Gough * rng.c (gsl_rng_uniform_int): catch the case n = 0 and return an error 2003-07-23 Brian Gough * file.c: added fwrite/fread functions 2003-06-12 Brian Gough * Makefile.am: removed benchmark programs from default build 2003-06-02 Brian Gough * waterman14.c: increased RAND_MIN to 1 * lecuyer21.c: corrections to RAND_MIN, RAND_MAX, floating point denominator and seeding modulus * fishman20.c (ran_get): use schrage multiplication to avoid overflow * coveyou.c: corrected value of RAND_MIN to 1 and RAND_MAX to 2^32-1 * borosh13.c: increased RAND_MIN to 1 * knuthran2.c (ran_get): use schrage multiplication to avoid overflow in intermediate results * fishman2x.c (ran_get): use schrage multiplication to avoid overflow in intermediate results * fishman18.c (ran_get): use schrage multiplication to avoid overflow in intermediate results * schrage.c (schrage): utility functions for multiplication of long integers * test.c (main): updated incorrect test values for gsl_rng_fishman18 gsl_rng_fishman2x gsl_rng_knuthran2 Mon Nov 25 19:27:10 2002 Brian Gough * taus.c (taus2_set): fixed bug in seeding for s3 (test should be for s3<16, not s3<8) Sun Nov 3 14:40:43 2002 Brian Gough * taus.c (taus2_set): fixed bug in seeding for s2 < 8 Mon Jun 17 21:04:10 2002 Brian Gough * mt.c (mt_set): ensure state counter mti is initialised by seeding routine Wed May 29 21:52:11 2002 Brian Gough * randu.c: removed unused variable m Tue May 7 22:34:52 2002 Brian Gough * mt.c (mt_1999_set): updated seeding procedure according to new release of MT19937 from the original authors. Fri Apr 26 21:17:05 2002 Brian Gough * taus.c (taus2_set): added alternate seeding procedure as described in erratum to P.L'Ecuyer's paper. Wed Apr 17 19:37:49 2002 Brian Gough * test.c (main): added missing test for gsl_rng_mt19937_1998 * gsl_rng.h: added missing declaration for gsl_rng_mt19937_1998 Sun Dec 2 15:45:24 2001 Brian Gough * Added new generators borosh13, coveyou, fishman18, fishman20, fishman2x, knuthran, knuthran2, lecuyer21, waterman14 from Knuth's Seminumerical Algorithms 3rd Ed. Implemented by Carlo Perassi. * gfsr4.c (gfsr4_get_double): increased divisor for double to 2^32, avoids generating exact result of 1.0 as specified in the documentation Mon Sep 3 10:32:01 2001 Brian Gough * mt.c (mt_1998_set): renamed macro to avoid duplicate definition Fri Aug 31 17:49:37 2001 Brian Gough * mt.c (mt_1998_set): added the original (buggy) MT19937 seeding routine as mt19937_1998 for compatibility. Wed May 2 15:35:38 2001 Brian Gough * ran1.c (ran1_get_double): use float constants for comparison for compatibility with original Numerical Recipes routines * ran2.c (ran2_get_double): ditto Fri Apr 27 18:47:07 2001 Brian Gough * types.c (gsl_rng_types_setup): added void to make prototype valid in ansi c Mon Apr 16 20:03:07 2001 Brian Gough * default.c (gsl_rng_env_setup): removed spurious argument to fprintf Tue Jan 23 13:24:26 2001 Brian Gough * types.c (gsl_rng_types_setup): provide a function that returns a list of all the generator types * default.c (gsl_rng_env_setup): get the list of generators from a function rather than having a list in the code itself. Display a list of the valid generators if the user provides an incorrect one. Fri Dec 8 20:30:58 2000 Brian Gough * ranlxs.c: renamed internal function ranlxs_set_impl to ranlxs_set * ranlxd.c: renamed internal function ranlxd_set_impl to ranlxd_set * ranlux.c: renamed internal function ranlux_set_impl to ranlux_set * random.c: renamed internal function random_get_impl function to random_get Sat Jul 29 14:29:54 2000 Brian Gough * test.c (main): updated test value for MT19937 for new seeding procedure * mt.c: The seeding procedure has been updated to match the 10/99 release of MT19937. Wed Mar 8 16:04:34 2000 Brian Gough * rng.c (gsl_rng_memcpy): generators must now be of the same type for a copy from one to the other to work. Thu Feb 24 16:41:48 2000 Brian Gough * ran3.c (ran3_set): initialize unused zeroth element of state to zero for consistency. Mon Feb 14 13:28:26 2000 Brian Gough * made all internal functions static Mon Dec 6 16:21:05 1999 Brian Gough * test.c (main): rewrote the tests to loop over all the generators Wed Aug 11 20:57:10 1999 Brian Gough * ranlxd.c, ranlxs.c: added ranlxd and ranlxs, second generation RANLUX generators from Martin Luescher. Mon Mar 1 21:12:28 1999 Brian Gough * test.c (rng_parallel_state_test): added some extra tests to fill a few holes in the net * gsl_rng.h: moved static class information (max, min, etc) out of the instance data. Originally I avoided this because of the overhead of the extra indirection (r->type->get vs r->get) for every get function call, but that turns out to be only about 10% at worst so it's worth the slight speed cost to make the code safer. Tue Nov 17 17:09:31 1998 Brian Gough * gfsr4.c: added #include which was missing 1998-11-04 * ranf.c: fix portability problems on alpha, by ensuring that shorts are correctly promoted to longs at the appropriate points * rand48.c: fix portability problems by ensuring that shorts are correctly promoted to longs at the appropriate points * rng-dump.c (main): write out file correctly by using chars instead of unsigned long ints, since these can vary in size on different architectures Wed Oct 28 15:02:22 1998 Brian Gough * rng.c: added #include to get prototype for memcpy Mon Sep 14 20:53:09 1998 Brian Gough * default.c (gsl_rng_env_setup): added gfsr4 1998-09-10 James Theiler * gfsr4.c: added new random number generator * Makefile.am: added gfsr4.c to SOURCES list * gsl_rng.h: added gfsr4 * test.c: added gfsr4 * benchmark.c: added gfsr4 Mon Aug 10 22:12:13 1998 Brian Gough * rng-dump.c: program to write out 3 million random numbers, suitable for testing with DIEHARD. Tue Aug 4 19:51:57 1998 Brian Gough * default.c (gsl_rng_env_setup): send default/enviroment output to stderr Mon Aug 3 18:25:52 1998 Brian Gough * mt.c: made constants static since they shouldn't be exported, added some speed improvements from Cokus' code (not all of them since they seemed to use more registers than available on the pentium). Thu Jul 9 13:56:20 1998 Brian Gough * slatec.c: renamed cmlib.c to slatec.c * transputer.c: renamed tds.c to transputer.c so the name is a bit more obvious * random.c: renamed random0 functions to random8, since obviously we can't have 0 bytes of state * default.c (gsl_rng_env_setup): made gsl_rng_mt19937 the default generator Wed Jul 8 17:06:54 1998 Brian Gough * added random() functions. There are three(!) versions: the original BSD, linux libc5 (had a typo in the multiplier, but got installed on millions of machines so is now a defacto standard) and GNU glibc2 (fixes the typo and has an improved seeding procedure) Sun Jul 5 15:59:29 1998 Brian Gough * rand.c: renamed rand.c to cmlib.c and bsdrand.c to rand.c. * ranf.c: added CRAY RANF, 48 bit generator * rand48.c: added the standard unix rand48() * changed all the routines to allow an additional callback for returning doubles. Now we can implement numerical recipes with its non-standard checks on the floating point results and also access the full state for getting 48-bit doubles out of rand48. Sat Jul 4 11:14:49 1998 Brian Gough * ranmar.c: added the RANMAR generator * tds.c: added the INMOS Transputer RNG * test.c (rng_min_test): added a test for RAND_MIN, to make sure none of the generators go below it. Statistically the test is not much good since it's very unlikely that an off-by-one error would show up unless we ran the test for > 4 billion numbers. However, the test might detect a gross error like a typo in RAND_MIN or a degeneracy 0,0,0,... for a multiplicative generator. * uni.c: fixed RAND_MAX here too * uni32.c: fixed RAND_MAX to m1-1, not m1 (since it's modulo m1 so m1 can't occur, only m1-1) Fri Jul 3 15:55:34 1998 Brian Gough * rng.c (gsl_rng_uniform_gt0_lt1): added a function which returns numbers in the range (0,1), i.e. excluding 0.0 and 1.0 * renamed bad_randu.c to randu.c * renamed bad_rand.c to bsdrand.c Mon Jun 29 18:11:08 1998 Brian Gough * added implementations of the numerical recipes algorithms ran0, ran1, ran2, ran3 Sun Jun 28 11:51:48 1998 Brian Gough * gsl_rng.h: added gsl_rng_uniform_pos which guarantees positive numbers, (0,1] * added a RAND_MIN entry to the gsl_rng/gsl_rng_type structs * gsl_rng.h: renamed gsl_rng_get_uni to gsl_rng_uniform Wed Jun 24 12:10:23 1998 Brian Gough * gsl_rng.h: added inline versions of gsl_rng_get and gsl_rng_get_uni * benchmark.c: added a simple benchmark program to measure rng's per second * test.c (N2): reduced the number of tests from 1 million to 100k to speed things up a bit * changed the generic seeding algorithm to s -> (69069*s) & 0xFFFFFFFF which covers all 32 bits. Sun Jun 21 23:24:36 1998 Brian Gough * added the MT19937 and TT880 mersenne prime generators Sat Jun 20 13:58:40 1998 Brian Gough * ensured that 32 bit quantities are defined as 'long', as required by ANSI. On a 16 bit platform 'int' is usually just 16 bits. * ranlux.c: added the RANLUX generator Fri Jun 19 11:12:06 1998 Brian Gough * removed the gsl- prefix from generator name strings Thu Jun 18 12:17:16 1998 Brian Gough * test.c: added a 10000 iteration check for cmrg * got rid of init_state values. It's simpler to generate them directly from the seed, the cost of creating an rng is not usually a big deal. * rng.c: eliminated the gsl_rng_internal struct since it was not really necessary Wed Jun 17 17:31:27 1998 Brian Gough * minstd.c: added Park and Millers MINSTD generator Thu Jun 11 18:08:40 1998 Brian Gough * this will be an alternate, thread-safe interface to the random number generators. gsl/rng/Makefile.am0000644000175000017500000000172313536674414012557 0ustar eddeddnoinst_LTLIBRARIES = libgslrng.la pkginclude_HEADERS = gsl_rng.h AM_CPPFLAGS = -I$(top_srcdir) libgslrng_la_SOURCES = borosh13.c cmrg.c coveyou.c default.c file.c fishman18.c fishman20.c fishman2x.c gfsr4.c knuthran2.c knuthran.c knuthran2002.c lecuyer21.c minstd.c mrg.c mt.c r250.c ran0.c ran1.c ran2.c ran3.c rand48.c rand.c random.c randu.c ranf.c ranlux.c ranlxd.c ranlxs.c ranmar.c rng.c slatec.c taus.c taus113.c transputer.c tt.c types.c uni32.c uni.c vax.c waterman14.c zuf.c inline.c CLEANFILES = test.dat noinst_HEADERS = schrage.c test_SOURCES = test.c test_LDADD = libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la TESTS = $(check_PROGRAMS) check_PROGRAMS = test # benchmark_SOURCES = benchmark.c # benchmark_LDADD = libgslrng.la ../err/libgslerr.la ../utils/libutils.la # rng_dump_SOURCES = rng-dump.c # rng_dump_LDADD = libgslrng.la ../err/libgslerr.la ../utils/libutils.la gsl/rng/ranlux.c0000644000175000017500000001242413536674414012200 0ustar eddedd/* rng/ranlux.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is a lagged fibonacci generator with skipping developed by Luescher. The sequence is a series of 24-bit integers, x_n, x_n = d_n + b_n where d_n = x_{n-10} - x_{n-24} - c_{n-1}, b_n = 0 if d_n >= 0 and b_n = 2^24 if d_n < 0, c_n = 0 if d_n >= 0 and c_n = 1 if d_n < 0, where after 24 samples a group of p integers are "skipped", to reduce correlations. By default p = 199, but can be increased to 365. The period of the generator is around 10^171. From: M. Luescher, "A portable high-quality random number generator for lattice field theory calculations", Computer Physics Communications, 79 (1994) 100-110. Available on the net as hep-lat/9309020 at http://xxx.lanl.gov/ See also, F. James, "RANLUX: A Fortran implementation of the high-quality pseudo-random number generator of Luscher", Computer Physics Communications, 79 (1994) 111-114 Kenneth G. Hamilton, F. James, "Acceleration of RANLUX", Computer Physics Communications, 101 (1997) 241-248 Kenneth G. Hamilton, "Assembler RANLUX for PCs", Computer Physics Communications, 101 (1997) 249-253 */ static inline unsigned long int ranlux_get (void *vstate); static double ranlux_get_double (void *vstate); static void ranlux_set_lux (void *state, unsigned long int s, unsigned int luxury); static void ranlux_set (void *state, unsigned long int s); static void ranlux389_set (void *state, unsigned long int s); static const unsigned long int mask_lo = 0x00ffffffUL; /* 2^24 - 1 */ static const unsigned long int mask_hi = ~0x00ffffffUL; static const unsigned long int two24 = 16777216; /* 2^24 */ typedef struct { unsigned int i; unsigned int j; unsigned int n; unsigned int skip; unsigned int carry; unsigned long int u[24]; } ranlux_state_t; static inline unsigned long int increment_state (ranlux_state_t * state); static inline unsigned long int increment_state (ranlux_state_t * state) { unsigned int i = state->i; unsigned int j = state->j; long int delta = state->u[j] - state->u[i] - state->carry; if (delta & mask_hi) { state->carry = 1; delta &= mask_lo; } else { state->carry = 0; } state->u[i] = delta; if (i == 0) { i = 23; } else { i--; } state->i = i; if (j == 0) { j = 23; } else { j--; } state->j = j; return delta; } static inline unsigned long int ranlux_get (void *vstate) { ranlux_state_t *state = (ranlux_state_t *) vstate; const unsigned int skip = state->skip; unsigned long int r = increment_state (state); state->n++; if (state->n == 24) { unsigned int i; state->n = 0; for (i = 0; i < skip; i++) increment_state (state); } return r; } static double ranlux_get_double (void *vstate) { return ranlux_get (vstate) / 16777216.0; } static void ranlux_set_lux (void *vstate, unsigned long int s, unsigned int luxury) { ranlux_state_t *state = (ranlux_state_t *) vstate; int i; long int seed; if (s == 0) s = 314159265; /* default seed is 314159265 */ seed = s; /* This is the initialization algorithm of F. James, widely in use for RANLUX. */ for (i = 0; i < 24; i++) { unsigned long int k = seed / 53668; seed = 40014 * (seed - k * 53668) - k * 12211; if (seed < 0) { seed += 2147483563; } state->u[i] = seed % two24; } state->i = 23; state->j = 9; state->n = 0; state->skip = luxury - 24; if (state->u[23] & mask_hi) { state->carry = 1; } else { state->carry = 0; } } static void ranlux_set (void *vstate, unsigned long int s) { ranlux_set_lux (vstate, s, 223); } static void ranlux389_set (void *vstate, unsigned long int s) { ranlux_set_lux (vstate, s, 389); } static const gsl_rng_type ranlux_type = {"ranlux", /* name */ 0x00ffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (ranlux_state_t), &ranlux_set, &ranlux_get, &ranlux_get_double}; static const gsl_rng_type ranlux389_type = {"ranlux389", /* name */ 0x00ffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (ranlux_state_t), &ranlux389_set, &ranlux_get, &ranlux_get_double}; const gsl_rng_type *gsl_rng_ranlux = &ranlux_type; const gsl_rng_type *gsl_rng_ranlux389 = &ranlux389_type; gsl/rng/gsl_rng.h0000644000175000017500000001545513536674414012336 0ustar eddedd/* rng/gsl_rng.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_RNG_H__ #define __GSL_RNG_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { const char *name; unsigned long int max; unsigned long int min; size_t size; void (*set) (void *state, unsigned long int seed); unsigned long int (*get) (void *state); double (*get_double) (void *state); } gsl_rng_type; typedef struct { const gsl_rng_type * type; void *state; } gsl_rng; /* These structs also need to appear in default.c so you can select them via the environment variable GSL_RNG_TYPE */ GSL_VAR const gsl_rng_type *gsl_rng_borosh13; GSL_VAR const gsl_rng_type *gsl_rng_coveyou; GSL_VAR const gsl_rng_type *gsl_rng_cmrg; GSL_VAR const gsl_rng_type *gsl_rng_fishman18; GSL_VAR const gsl_rng_type *gsl_rng_fishman20; GSL_VAR const gsl_rng_type *gsl_rng_fishman2x; GSL_VAR const gsl_rng_type *gsl_rng_gfsr4; GSL_VAR const gsl_rng_type *gsl_rng_knuthran; GSL_VAR const gsl_rng_type *gsl_rng_knuthran2; GSL_VAR const gsl_rng_type *gsl_rng_knuthran2002; GSL_VAR const gsl_rng_type *gsl_rng_lecuyer21; GSL_VAR const gsl_rng_type *gsl_rng_minstd; GSL_VAR const gsl_rng_type *gsl_rng_mrg; GSL_VAR const gsl_rng_type *gsl_rng_mt19937; GSL_VAR const gsl_rng_type *gsl_rng_mt19937_1999; GSL_VAR const gsl_rng_type *gsl_rng_mt19937_1998; GSL_VAR const gsl_rng_type *gsl_rng_r250; GSL_VAR const gsl_rng_type *gsl_rng_ran0; GSL_VAR const gsl_rng_type *gsl_rng_ran1; GSL_VAR const gsl_rng_type *gsl_rng_ran2; GSL_VAR const gsl_rng_type *gsl_rng_ran3; GSL_VAR const gsl_rng_type *gsl_rng_rand; GSL_VAR const gsl_rng_type *gsl_rng_rand48; GSL_VAR const gsl_rng_type *gsl_rng_random128_bsd; GSL_VAR const gsl_rng_type *gsl_rng_random128_glibc2; GSL_VAR const gsl_rng_type *gsl_rng_random128_libc5; GSL_VAR const gsl_rng_type *gsl_rng_random256_bsd; GSL_VAR const gsl_rng_type *gsl_rng_random256_glibc2; GSL_VAR const gsl_rng_type *gsl_rng_random256_libc5; GSL_VAR const gsl_rng_type *gsl_rng_random32_bsd; GSL_VAR const gsl_rng_type *gsl_rng_random32_glibc2; GSL_VAR const gsl_rng_type *gsl_rng_random32_libc5; GSL_VAR const gsl_rng_type *gsl_rng_random64_bsd; GSL_VAR const gsl_rng_type *gsl_rng_random64_glibc2; GSL_VAR const gsl_rng_type *gsl_rng_random64_libc5; GSL_VAR const gsl_rng_type *gsl_rng_random8_bsd; GSL_VAR const gsl_rng_type *gsl_rng_random8_glibc2; GSL_VAR const gsl_rng_type *gsl_rng_random8_libc5; GSL_VAR const gsl_rng_type *gsl_rng_random_bsd; GSL_VAR const gsl_rng_type *gsl_rng_random_glibc2; GSL_VAR const gsl_rng_type *gsl_rng_random_libc5; GSL_VAR const gsl_rng_type *gsl_rng_randu; GSL_VAR const gsl_rng_type *gsl_rng_ranf; GSL_VAR const gsl_rng_type *gsl_rng_ranlux; GSL_VAR const gsl_rng_type *gsl_rng_ranlux389; GSL_VAR const gsl_rng_type *gsl_rng_ranlxd1; GSL_VAR const gsl_rng_type *gsl_rng_ranlxd2; GSL_VAR const gsl_rng_type *gsl_rng_ranlxs0; GSL_VAR const gsl_rng_type *gsl_rng_ranlxs1; GSL_VAR const gsl_rng_type *gsl_rng_ranlxs2; GSL_VAR const gsl_rng_type *gsl_rng_ranmar; GSL_VAR const gsl_rng_type *gsl_rng_slatec; GSL_VAR const gsl_rng_type *gsl_rng_taus; GSL_VAR const gsl_rng_type *gsl_rng_taus2; GSL_VAR const gsl_rng_type *gsl_rng_taus113; GSL_VAR const gsl_rng_type *gsl_rng_transputer; GSL_VAR const gsl_rng_type *gsl_rng_tt800; GSL_VAR const gsl_rng_type *gsl_rng_uni; GSL_VAR const gsl_rng_type *gsl_rng_uni32; GSL_VAR const gsl_rng_type *gsl_rng_vax; GSL_VAR const gsl_rng_type *gsl_rng_waterman14; GSL_VAR const gsl_rng_type *gsl_rng_zuf; const gsl_rng_type ** gsl_rng_types_setup(void); GSL_VAR const gsl_rng_type *gsl_rng_default; GSL_VAR unsigned long int gsl_rng_default_seed; gsl_rng *gsl_rng_alloc (const gsl_rng_type * T); int gsl_rng_memcpy (gsl_rng * dest, const gsl_rng * src); gsl_rng *gsl_rng_clone (const gsl_rng * r); void gsl_rng_free (gsl_rng * r); void gsl_rng_set (const gsl_rng * r, unsigned long int seed); unsigned long int gsl_rng_max (const gsl_rng * r); unsigned long int gsl_rng_min (const gsl_rng * r); const char *gsl_rng_name (const gsl_rng * r); int gsl_rng_fread (FILE * stream, gsl_rng * r); int gsl_rng_fwrite (FILE * stream, const gsl_rng * r); size_t gsl_rng_size (const gsl_rng * r); void * gsl_rng_state (const gsl_rng * r); void gsl_rng_print_state (const gsl_rng * r); const gsl_rng_type * gsl_rng_env_setup (void); INLINE_DECL unsigned long int gsl_rng_get (const gsl_rng * r); INLINE_DECL double gsl_rng_uniform (const gsl_rng * r); INLINE_DECL double gsl_rng_uniform_pos (const gsl_rng * r); INLINE_DECL unsigned long int gsl_rng_uniform_int (const gsl_rng * r, unsigned long int n); #ifdef HAVE_INLINE INLINE_FUN unsigned long int gsl_rng_get (const gsl_rng * r) { return (r->type->get) (r->state); } INLINE_FUN double gsl_rng_uniform (const gsl_rng * r) { return (r->type->get_double) (r->state); } INLINE_FUN double gsl_rng_uniform_pos (const gsl_rng * r) { double x ; do { x = (r->type->get_double) (r->state) ; } while (x == 0) ; return x ; } /* Note: to avoid integer overflow in (range+1) we work with scale = range/n = (max-min)/n rather than scale=(max-min+1)/n, this reduces efficiency slightly but avoids having to check for the out of range value. Note that range is typically O(2^32) so the addition of 1 is negligible in most usage. */ INLINE_FUN unsigned long int gsl_rng_uniform_int (const gsl_rng * r, unsigned long int n) { unsigned long int offset = r->type->min; unsigned long int range = r->type->max - offset; unsigned long int scale; unsigned long int k; if (n > range || n == 0) { GSL_ERROR_VAL ("invalid n, either 0 or exceeds maximum value of generator", GSL_EINVAL, 0) ; } scale = range / n; do { k = (((r->type->get) (r->state)) - offset) / scale; } while (k >= n); return k; } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_RNG_H__ */ gsl/rng/knuthran2.c0000644000175000017500000000477213536674414012612 0ustar eddedd/* rng/knuthran2.c * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This generator is taken from * * Donald E. Knuth * The Art of Computer Programming * Volume 2 * Third Edition * Addison-Wesley * Page 108 * * This implementation copyright (C) 2001 Carlo Perassi * and (C) 2003 Heiko Bauke. */ #include #include #include #include "schrage.c" #define AA1 271828183UL #define AA2 1833324378UL /* = -314159269 mod (2 ^ 31 -1) */ #define MM 0x7fffffffUL /* 2 ^ 31 - 1 */ #define CEIL_SQRT_MM 46341UL /* sqrt(2 ^ 31 - 1) */ static inline unsigned long int ran_get (void *vstate); static double ran_get_double (void *vstate); static void ran_set (void *state, unsigned long int s); typedef struct { unsigned long int x0; unsigned long int x1; } ran_state_t; static inline unsigned long int ran_get (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; const unsigned long int xtmp = state->x1; state->x1 = schrage_mult (AA1, state->x1, MM, CEIL_SQRT_MM) + schrage_mult (AA2, state->x0, MM, CEIL_SQRT_MM); if (state->x1 >= MM) state->x1 -= MM; state->x0 = xtmp; return state->x1; } static double ran_get_double (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; return ran_get (state) / 2147483647.0; } static void ran_set (void *vstate, unsigned long int s) { ran_state_t *state = (ran_state_t *) vstate; if ((s % MM) == 0) s = 1; /* default seed is 1 */ state->x0 = s % MM; state->x1 = s % MM; return; } static const gsl_rng_type ran_type = { "knuthran2", /* name */ MM - 1L, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (ran_state_t), &ran_set, &ran_get, &ran_get_double }; const gsl_rng_type *gsl_rng_knuthran2 = &ran_type; gsl/rng/ranf.c0000644000175000017500000001023113536674414011607 0ustar eddedd/* rng/ranf.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* This is the CRAY RANF generator. The generator returns the upper 32 bits from each term of the sequence, x_{n+1} = (a x_n) mod m using 48-bit unsigned arithmetic, with a = 0x2875A2E7B175 and m = 2^48. The seed specifies the lower 32 bits of the initial value, x_1, with the lowest bit set (to prevent the seed taking an even value), and the upper 16 bits set to 0. There is a subtlety in the implementation of the seed. The initial state is put one step back by multiplying by the modular inverse of a mod m. This is done for compatibility with the original CRAY implementation. Note, you can only seed the generator with integers up to 2^32, while the CRAY uses wide integers which can cover all 2^48 states of the generator. The theoretical value of x_{10001} is 141091827447341. The period of this generator is 2^{46}. */ static inline void ranf_advance (void *vstate); static unsigned long int ranf_get (void *vstate); static double ranf_get_double (void *vstate); static void ranf_set (void *state, unsigned long int s); static const unsigned short int a0 = 0xB175 ; static const unsigned short int a1 = 0xA2E7 ; static const unsigned short int a2 = 0x2875 ; typedef struct { unsigned short int x0, x1, x2; } ranf_state_t; static inline void ranf_advance (void *vstate) { ranf_state_t *state = (ranf_state_t *) vstate; const unsigned long int x0 = (unsigned long int) state->x0 ; const unsigned long int x1 = (unsigned long int) state->x1 ; const unsigned long int x2 = (unsigned long int) state->x2 ; unsigned long int r ; r = a0 * x0 ; state->x0 = (r & 0xFFFF) ; r >>= 16 ; r += a0 * x1 + a1 * x0 ; state->x1 = (r & 0xFFFF) ; r >>= 16 ; r += a0 * x2 + a1 * x1 + a2 * x0 ; state->x2 = (r & 0xFFFF) ; } static unsigned long int ranf_get (void *vstate) { unsigned long int x1, x2; ranf_state_t *state = (ranf_state_t *) vstate; ranf_advance (state) ; x1 = (unsigned long int) state->x1; x2 = (unsigned long int) state->x2; return (x2 << 16) + x1; } static double ranf_get_double (void * vstate) { ranf_state_t *state = (ranf_state_t *) vstate; ranf_advance (state) ; return (ldexp((double) state->x2, -16) + ldexp((double) state->x1, -32) + ldexp((double) state->x0, -48)) ; } static void ranf_set (void *vstate, unsigned long int s) { ranf_state_t *state = (ranf_state_t *) vstate; unsigned short int x0, x1, x2 ; unsigned long int r ; unsigned long int b0 = 0xD6DD ; unsigned long int b1 = 0xB894 ; unsigned long int b2 = 0x5CEE ; if (s == 0) /* default seed */ { x0 = 0x9CD1 ; x1 = 0x53FC ; x2 = 0x9482 ; } else { x0 = (s | 1) & 0xFFFF ; x1 = s >> 16 & 0xFFFF ; x2 = 0 ; } r = b0 * x0 ; state->x0 = (r & 0xFFFF) ; r >>= 16 ; r += b0 * x1 + b1 * x0 ; state->x1 = (r & 0xFFFF) ; r >>= 16 ; r += b0 * x2 + b1 * x1 + b2 * x0 ; state->x2 = (r & 0xFFFF) ; return; } static const gsl_rng_type ranf_type = {"ranf", /* name */ 0xffffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (ranf_state_t), &ranf_set, &ranf_get, &ranf_get_double }; const gsl_rng_type *gsl_rng_ranf = &ranf_type; gsl/rng/rng.c0000644000175000017500000000617713536674414011465 0ustar eddedd/* rng/rng.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include gsl_rng * gsl_rng_alloc (const gsl_rng_type * T) { gsl_rng *r = (gsl_rng *) malloc (sizeof (gsl_rng)); if (r == 0) { GSL_ERROR_VAL ("failed to allocate space for rng struct", GSL_ENOMEM, 0); }; r->state = calloc (1, T->size); if (r->state == 0) { free (r); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for rng state", GSL_ENOMEM, 0); }; r->type = T; gsl_rng_set (r, gsl_rng_default_seed); /* seed the generator */ return r; } int gsl_rng_memcpy (gsl_rng * dest, const gsl_rng * src) { if (dest->type != src->type) { GSL_ERROR ("generators must be of the same type", GSL_EINVAL); } memcpy (dest->state, src->state, src->type->size); return GSL_SUCCESS; } gsl_rng * gsl_rng_clone (const gsl_rng * q) { gsl_rng *r = (gsl_rng *) malloc (sizeof (gsl_rng)); if (r == 0) { GSL_ERROR_VAL ("failed to allocate space for rng struct", GSL_ENOMEM, 0); }; r->state = malloc (q->type->size); if (r->state == 0) { free (r); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for rng state", GSL_ENOMEM, 0); }; r->type = q->type; memcpy (r->state, q->state, q->type->size); return r; } void gsl_rng_set (const gsl_rng * r, unsigned long int seed) { (r->type->set) (r->state, seed); } unsigned long int gsl_rng_max (const gsl_rng * r) { return r->type->max; } unsigned long int gsl_rng_min (const gsl_rng * r) { return r->type->min; } const char * gsl_rng_name (const gsl_rng * r) { return r->type->name; } size_t gsl_rng_size (const gsl_rng * r) { return r->type->size; } void * gsl_rng_state (const gsl_rng * r) { return r->state; } void gsl_rng_print_state (const gsl_rng * r) { size_t i; unsigned char *p = (unsigned char *) (r->state); const size_t n = r->type->size; for (i = 0; i < n; i++) { /* FIXME: we're assuming that a char is 8 bits */ printf ("%.2x", *(p + i)); } } void gsl_rng_free (gsl_rng * r) { RETURN_IF_NULL (r); free (r->state); free (r); } gsl/rng/inline.c0000644000175000017500000000203113536674414012136 0ustar eddedd/* rng/inline.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* Compile all the inline functions */ #define COMPILE_INLINE_STATIC #include "build.h" #include gsl/rng/default.c0000644000175000017500000000460013536674414012310 0ustar eddedd/* rng/default.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include /* The initial defaults are defined in the file mt.c, so we can get access to the static parts of the default generator. */ const gsl_rng_type * gsl_rng_env_setup (void) { unsigned long int seed = 0; const char *p = getenv ("GSL_RNG_TYPE"); if (p) { const gsl_rng_type **t, **t0 = gsl_rng_types_setup (); gsl_rng_default = 0; /* check GSL_RNG_TYPE against the names of all the generators */ for (t = t0; *t != 0; t++) { if (strcmp (p, (*t)->name) == 0) { gsl_rng_default = *t; break; } } if (gsl_rng_default == 0) { int i = 0; fprintf (stderr, "GSL_RNG_TYPE=%s not recognized\n", p); fprintf (stderr, "Valid generator types are:\n"); for (t = t0; *t != 0; t++) { fprintf (stderr, " %18s", (*t)->name); if ((++i) % 4 == 0) { fputc ('\n', stderr); } } fputc ('\n', stderr); GSL_ERROR_VAL ("unknown generator", GSL_EINVAL, 0); } fprintf (stderr, "GSL_RNG_TYPE=%s\n", gsl_rng_default->name); } else { gsl_rng_default = gsl_rng_mt19937; } p = getenv ("GSL_RNG_SEED"); if (p) { seed = strtoul (p, 0, 0); fprintf (stderr, "GSL_RNG_SEED=%lu\n", seed); }; gsl_rng_default_seed = seed; return gsl_rng_default; } gsl/rng/slatec.c0000644000175000017500000001661713536674414012152 0ustar eddedd/* rng/slatec.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /** * ====================================================================== * NIST Guide to Available Math Software. * Source for module RAND from package CMLIB. * Retrieved from TIBER on Fri Oct 11 11:43:42 1996. * ====================================================================== FUNCTION RAND(R) C***BEGIN PROLOGUE RAND C***DATE WRITTEN 770401 (YYMMDD) C***REVISION DATE 820801 (YYMMDD) C***CATEGORY NO. L6A21 C***KEYWORDS RANDOM NUMBER,SPECIAL FUNCTION,UNIFORM C***AUTHOR FULLERTON, W., (LANL) C***PURPOSE Generates a uniformly distributed random number. C***DESCRIPTION C C This pseudo-random number generator is portable among a wide C variety of computers. RAND(R) undoubtedly is not as good as many C readily available installation dependent versions, and so this C routine is not recommended for widespread usage. Its redeeming C feature is that the exact same random numbers (to within final round- C off error) can be generated from machine to machine. Thus, programs C that make use of random numbers can be easily transported to and C checked in a new environment. C The random numbers are generated by the linear congruential C method described, e.g., by Knuth in Seminumerical Methods (p.9), C Addison-Wesley, 1969. Given the I-th number of a pseudo-random C sequence, the I+1 -st number is generated from C X(I+1) = (A*X(I) + C) MOD M, C where here M = 2**22 = 4194304, C = 1731 and several suitable values C of the multiplier A are discussed below. Both the multiplier A and C random number X are represented in double precision as two 11-bit C words. The constants are chosen so that the period is the maximum C possible, 4194304. C In order that the same numbers be generated from machine to C machine, it is necessary that 23-bit integers be reducible modulo C 2**11 exactly, that 23-bit integers be added exactly, and that 11-bit C integers be multiplied exactly. Furthermore, if the restart option C is used (where R is between 0 and 1), then the product R*2**22 = C R*4194304 must be correct to the nearest integer. C The first four random numbers should be .0004127026, C .6750836372, .1614754200, and .9086198807. The tenth random number C is .5527787209, and the hundredth is .3600893021 . The thousandth C number should be .2176990509 . C In order to generate several effectively independent sequences C with the same generator, it is necessary to know the random number C for several widely spaced calls. The I-th random number times 2**22, C where I=K*P/8 and P is the period of the sequence (P = 2**22), is C still of the form L*P/8. In particular we find the I-th random C number multiplied by 2**22 is given by C I = 0 1*P/8 2*P/8 3*P/8 4*P/8 5*P/8 6*P/8 7*P/8 8*P/8 C RAND= 0 5*P/8 2*P/8 7*P/8 4*P/8 1*P/8 6*P/8 3*P/8 0 C Thus the 4*P/8 = 2097152 random number is 2097152/2**22. C Several multipliers have been subjected to the spectral test C (see Knuth, p. 82). Four suitable multipliers roughly in order of C goodness according to the spectral test are C 3146757 = 1536*2048 + 1029 = 2**21 + 2**20 + 2**10 + 5 C 2098181 = 1024*2048 + 1029 = 2**21 + 2**10 + 5 C 3146245 = 1536*2048 + 517 = 2**21 + 2**20 + 2**9 + 5 C 2776669 = 1355*2048 + 1629 = 5**9 + 7**7 + 1 C C In the table below LOG10(NU(I)) gives roughly the number of C random decimal digits in the random numbers considered I at a time. C C is the primary measure of goodness. In both cases bigger is better. C C LOG10 NU(I) C(I) C A I=2 I=3 I=4 I=5 I=2 I=3 I=4 I=5 C C 3146757 3.3 2.0 1.6 1.3 3.1 1.3 4.6 2.6 C 2098181 3.3 2.0 1.6 1.2 3.2 1.3 4.6 1.7 C 3146245 3.3 2.2 1.5 1.1 3.2 4.2 1.1 0.4 C 2776669 3.3 2.1 1.6 1.3 2.5 2.0 1.9 2.6 C Best C Possible 3.3 2.3 1.7 1.4 3.6 5.9 9.7 14.9 C C Input Argument -- C R If R=0., the next random number of the sequence is generated. C If R .LT. 0., the last generated number will be returned for C possible use in a restart procedure. C If R .GT. 0., the sequence of random numbers will start with C the seed R mod 1. This seed is also returned as the value of C RAND provided the arithmetic is done exactly. C C Output Value -- C RAND a pseudo-random number between 0. and 1. C***REFERENCES (NONE) C***ROUTINES CALLED (NONE) C***END PROLOGUE RAND DATA IA1, IA0, IA1MA0 /1536, 1029, 507/ DATA IC /1731/ DATA IX1, IX0 /0, 0/ C***FIRST EXECUTABLE STATEMENT RAND IF (R.LT.0.) GO TO 10 IF (R.GT.0.) GO TO 20 C C A*X = 2**22*IA1*IX1 + 2**11*(IA1*IX1 + (IA1-IA0)*(IX0-IX1) C + IA0*IX0) + IA0*IX0 C IY0 = IA0*IX0 IY1 = IA1*IX1 + IA1MA0*(IX0-IX1) + IY0 IY0 = IY0 + IC IX0 = MOD (IY0, 2048) IY1 = IY1 + (IY0-IX0)/2048 IX1 = MOD (IY1, 2048) C 10 RAND = IX1*2048 + IX0 RAND = RAND / 4194304. RETURN C 20 IX1 = AMOD(R,1.)*4194304. + 0.5 IX0 = MOD (IX1, 2048) IX1 = (IX1-IX0)/2048 GO TO 10 C END **/ #include #include #include static inline unsigned long int slatec_get (void *vstate); static double slatec_get_double (void *vstate); static void slatec_set (void *state, unsigned long int s); typedef struct { long int x0, x1; } slatec_state_t; static const long P = 4194304; static const long a1 = 1536; static const long a0 = 1029; static const long a1ma0 = 507; static const long c = 1731; static inline unsigned long int slatec_get (void *vstate) { long y0, y1; slatec_state_t *state = (slatec_state_t *) vstate; y0 = a0 * state->x0; y1 = a1 * state->x1 + a1ma0 * (state->x0 - state->x1) + y0; y0 = y0 + c; state->x0 = y0 % 2048; y1 = y1 + (y0 - state->x0) / 2048; state->x1 = y1 % 2048; return state->x1 * 2048 + state->x0; } static double slatec_get_double (void *vstate) { return slatec_get (vstate) / 4194304.0 ; } static void slatec_set (void *vstate, unsigned long int s) { slatec_state_t *state = (slatec_state_t *) vstate; /* Only eight seeds are permitted. This is pretty limiting, but at least we are guaranteed that the eight sequences are different */ s = s % 8; s *= P / 8; state->x0 = s % 2048; state->x1 = (s - state->x0) / 2048; } static const gsl_rng_type slatec_type = {"slatec", /* name */ 4194303, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (slatec_state_t), &slatec_set, &slatec_get, &slatec_get_double}; const gsl_rng_type *gsl_rng_slatec = &slatec_type; gsl/rng/uni32.c0000644000175000017500000001406313536674414011630 0ustar eddedd/* rng/uni32.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /** This is a lagged Fibonacci generator which supposedly excellent statistical properties (I do not concur) I got it from the net and translated into C. * ====================================================================== * NIST Guide to Available Math Software. * Fullsource for module UNI from package CMLIB. * Retrieved from CAMSUN on Tue Oct 8 14:04:10 1996. * ====================================================================== C***BEGIN PROLOGUE UNI C***DATE WRITTEN 810915 C***REVISION DATE 830805 C***CATEGORY NO. L6A21 C***KEYWORDS RANDOM NUMBERS, UNIFORM RANDOM NUMBERS C***AUTHOR BLUE, JAMES, SCIENTIFIC COMPUTING DIVISION, NBS C KAHANER, DAVID, SCIENTIFIC COMPUTING DIVISION, NBS C MARSAGLIA, GEORGE, COMPUTER SCIENCE DEPT., WASH STATE UNIV C C***PURPOSE THIS ROUTINE GENERATES QUASI UNIFORM RANDOM NUMBERS ON [0,1 C AND CAN BE USED ON ANY COMPUTER WITH WHICH ALLOWS INTEGERS C AT LEAST AS LARGE AS 32767. C***DESCRIPTION C C THIS ROUTINE GENERATES QUASI UNIFORM RANDOM NUMBERS ON THE INTER C [0,1). IT CAN BE USED WITH ANY COMPUTER WHICH ALLOWS C INTEGERS AT LEAST AS LARGE AS 32767. C C C USE C FIRST TIME.... C Z = UNI(JD) C HERE JD IS ANY N O N - Z E R O INTEGER. C THIS CAUSES INITIALIZATION OF THE PROGRAM C AND THE FIRST RANDOM NUMBER TO BE RETURNED AS Z. C SUBSEQUENT TIMES... C Z = UNI(0) C CAUSES THE NEXT RANDOM NUMBER TO BE RETURNED AS Z. C C C.................................................................. C NOTE: USERS WHO WISH TO TRANSPORT THIS PROGRAM FROM ONE COMPUTER C TO ANOTHER SHOULD READ THE FOLLOWING INFORMATION..... C C MACHINE DEPENDENCIES... C MDIG = A LOWER BOUND ON THE NUMBER OF BINARY DIGITS AVAILABLE C FOR REPRESENTING INTEGERS, INCLUDING THE SIGN BIT. C THIS VALUE MUST BE AT LEAST 16, BUT MAY BE INCREASED C IN LINE WITH REMARK A BELOW. C C REMARKS... C A. THIS PROGRAM CAN BE USED IN TWO WAYS: C (1) TO OBTAIN REPEATABLE RESULTS ON DIFFERENT COMPUTERS, C SET 'MDIG' TO THE SMALLEST OF ITS VALUES ON EACH, OR, C (2) TO ALLOW THE LONGEST SEQUENCE OF RANDOM NUMBERS TO BE C GENERATED WITHOUT CYCLING (REPEATING) SET 'MDIG' TO THE C LARGEST POSSIBLE VALUE. C B. THE SEQUENCE OF NUMBERS GENERATED DEPENDS ON THE INITIAL C INPUT 'JD' AS WELL AS THE VALUE OF 'MDIG'. C IF MDIG=16 ONE SHOULD FIND THAT Editors Note: set the seed using 152 in order to get uni(305) -jt C THE FIRST EVALUATION C Z=UNI(305) GIVES Z=.027832881... C THE SECOND EVALUATION C Z=UNI(0) GIVES Z=.56102176... C THE THIRD EVALUATION C Z=UNI(0) GIVES Z=.41456343... C THE THOUSANDTH EVALUATION C Z=UNI(0) GIVES Z=.19797357... C C***REFERENCES MARSAGLIA G., "COMMENTS ON THE PERFECT UNIFORM RANDOM C NUMBER GENERATOR", UNPUBLISHED NOTES, WASH S. U. C***ROUTINES CALLED I1MACH,XERROR C***END PROLOGUE UNI **/ #include #include #include static inline unsigned long int uni32_get (void *vstate); static double uni32_get_double (void *vstate); static void uni32_set (void *state, unsigned long int s); static const unsigned long int MDIG = 32; /* Machine digits in int */ static const unsigned long int m1 = 2147483647; /* 2^(MDIG-1) - 1 */ static const unsigned long int m2 = 65536; /* 2^(MDIG/2) */ typedef struct { int i, j; unsigned long m[17]; } uni32_state_t; static inline unsigned long uni32_get (void *vstate) { uni32_state_t *state = (uni32_state_t *) vstate; const long int i = state->i; const long int j = state->j; /* important k not be unsigned */ long int k = state->m[i] - state->m[j]; if (k < 0) k += m1; state->m[j] = k; if (i == 0) { state->i = 16; } else { (state->i)--; } if (j == 0) { state->j = 16; } else { (state->j)--; } return k; } static double uni32_get_double (void *vstate) { return uni32_get (vstate) / 2147483647.0 ; } static void uni32_set (void *vstate, unsigned long int s) { long int seed, k0, k1, j0, j1; int i; uni32_state_t *state = (uni32_state_t *) vstate; /* For this routine, the seeding is very elaborate! */ /* A flaw in this approach is that seeds 1,2 give exactly the same random number sequence! */ /*s = 2*s+1; *//* enforce seed be odd */ seed = (s < m1 ? s : m1); /* seed should be less than m1 */ seed -= (seed % 2 == 0 ? 1 : 0); k0 = 9069 % m2; k1 = 9069 / m2; j0 = seed % m2; j1 = seed / m2; for (i = 0; i < 17; i++) { seed = j0 * k0; j1 = (seed / m2 + j0 * k1 + j1 * k0) % (m2 / 2); j0 = seed % m2; state->m[i] = j0 + m2 * j1; } state->i = 4; state->j = 16; return; } static const gsl_rng_type uni32_type = {"uni32", /* name */ 2147483646, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (uni32_state_t), &uni32_set, &uni32_get, &uni32_get_double}; const gsl_rng_type *gsl_rng_uni32 = &uni32_type; gsl/rng/ran1.c0000644000175000017500000000570213536674414011531 0ustar eddedd/* rng/ran1.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is an implementation of the algorithm used in Numerical Recipe's ran1 generator. It is MINSTD with a 32-element shuffle-box. */ static inline unsigned long int ran1_get (void *vstate); static double ran1_get_double (void *vstate); static void ran1_set (void *state, unsigned long int s); static const long int m = 2147483647, a = 16807, q = 127773, r = 2836; #define N_SHUFFLE 32 #define N_DIV (1 + 2147483646/N_SHUFFLE) typedef struct { unsigned long int x; unsigned long int n; unsigned long int shuffle[N_SHUFFLE]; } ran1_state_t; static inline unsigned long int ran1_get (void *vstate) { ran1_state_t *state = (ran1_state_t *) vstate; const unsigned long int x = state->x; const long int h = x / q; const long int t = a * (x - h * q) - h * r; if (t < 0) { state->x = t + m; } else { state->x = t; } { unsigned long int j = state->n / N_DIV; state->n = state->shuffle[j]; state->shuffle[j] = state->x; } return state->n; } static double ran1_get_double (void *vstate) { float x_max = 1 - 1.2e-7f ; /* Numerical Recipes version of 1-FLT_EPS */ float x = ran1_get (vstate) / 2147483647.0f ; if (x > x_max) return x_max ; return x ; } static void ran1_set (void *vstate, unsigned long int s) { ran1_state_t *state = (ran1_state_t *) vstate; int i; if (s == 0) s = 1; /* default seed is 1 */ for (i = 0; i < 8; i++) { long int h = s / q; long int t = a * (s - h * q) - h * r; if (t < 0) t += m; s = t; } for (i = N_SHUFFLE - 1; i >= 0; i--) { long int h = s / q; long int t = a * (s - h * q) - h * r; if (t < 0) t += m; s = t; state->shuffle[i] = s; } state->x = s; state->n = s; return; } static const gsl_rng_type ran1_type = {"ran1", /* name */ 2147483646, /* RAND_MAX */ 1, /* RAND_MIN */ sizeof (ran1_state_t), &ran1_set, &ran1_get, &ran1_get_double}; const gsl_rng_type *gsl_rng_ran1 = &ran1_type; gsl/rng/minstd.c0000644000175000017500000000546713536674414012176 0ustar eddedd/* rng/minstd.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* MINSTD is Park and Miller's minimal standard generator (i.e. it's not particularly good). The sequence is x_{n+1} = (a x_n) mod m with a = 16807 and m = 2^31 - 1 = 2147483647. The seed specifies the initial value, x_1. The theoretical value of x_{10001} is 1043618065, starting with a seed of x_1 = 1. The period of this generator is 2^31. It is used as the RNUN subroutine in the IMSL Library and the RAND function in MATLAB. The generator is sometimes known by the acronym "GGL" (I'm not sure what that stands for). From: Park and Miller, "Random Number Generators: Good ones are hard to find" Communications of the ACM, October 1988, Volume 31, No 10, pages 1192-1201. */ static inline unsigned long int minstd_get (void *vstate); static double minstd_get_double (void *vstate); static void minstd_set (void *state, unsigned long int s); static const long int m = 2147483647, a = 16807, q = 127773, r = 2836; typedef struct { unsigned long int x; } minstd_state_t; static inline unsigned long int minstd_get (void *vstate) { minstd_state_t *state = (minstd_state_t *) vstate; const unsigned long int x = state->x; const long int h = x / q; const long int t = a * (x - h * q) - h * r; if (t < 0) { state->x = t + m; } else { state->x = t; } return state->x; } static double minstd_get_double (void *vstate) { return minstd_get (vstate) / 2147483647.0; } static void minstd_set (void *vstate, unsigned long int s) { minstd_state_t *state = (minstd_state_t *) vstate; if (s == 0) s = 1; /* default seed is 1 */ state->x = s; return; } static const gsl_rng_type minstd_type = {"minstd", /* name */ 2147483646, /* RAND_MAX */ 1, /* RAND_MIN */ sizeof (minstd_state_t), &minstd_set, &minstd_get, &minstd_get_double}; const gsl_rng_type *gsl_rng_minstd = &minstd_type; gsl/rng/fishman18.c0000644000175000017500000000443513536674414012470 0ustar eddedd/* rng/fishman18.c * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This generator is taken from * * Donald E. Knuth * The Art of Computer Programming * Volume 2 * Third Edition * Addison-Wesley * Page 106-108 * * It is called "Fishman - Moore III". * * This implementation copyright (C) 2001 Carlo Perassi * and (C) 2003 Heiko Bauke. */ #include #include #include #include "schrage.c" #define AA 62089911UL #define MM 0x7fffffffUL /* 2 ^ 31 - 1 */ #define CEIL_SQRT_MM 46341UL /* ceil(sqrt(2 ^ 31 - 1)) */ static inline unsigned long int ran_get (void *vstate); static double ran_get_double (void *vstate); static void ran_set (void *state, unsigned long int s); typedef struct { unsigned long int x; } ran_state_t; static inline unsigned long int ran_get (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; state->x = schrage_mult (AA, state->x, MM, CEIL_SQRT_MM); return state->x; } static double ran_get_double (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; return ran_get (state) / 2147483647.0; } static void ran_set (void *vstate, unsigned long int s) { ran_state_t *state = (ran_state_t *) vstate; if ((s % MM) == 0) s = 1; /* default seed is 1 */ state->x = s % MM; return; } static const gsl_rng_type ran_type = { "fishman18", /* name */ MM - 1, /* RAND_MAX */ 1, /* RAND_MIN */ sizeof (ran_state_t), &ran_set, &ran_get, &ran_get_double }; const gsl_rng_type *gsl_rng_fishman18 = &ran_type; gsl/rng/tt.c0000644000175000017500000000741513536674414011322 0ustar eddedd/* rng/tt.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is the TT800 twisted GSFR generator for 32 bit integers. It has been superceded by MT19937 (mt.c). The period is 2^800. This implementation is based on tt800.c, July 8th 1996 version by M. Matsumoto, email: matumoto@math.keio.ac.jp From: Makoto Matsumoto and Yoshiharu Kurita, "Twisted GFSR Generators II", ACM Transactions on Modelling and Computer Simulation, Vol. 4, No. 3, 1994, pages 254-266. */ static inline unsigned long int tt_get (void *vstate); static double tt_get_double (void *vstate); static void tt_set (void *state, unsigned long int s); #define N 25 #define M 7 typedef struct { int n; unsigned long int x[N]; } tt_state_t; static inline unsigned long int tt_get (void *vstate) { tt_state_t *state = (tt_state_t *) vstate; /* this is the magic vector, a */ const unsigned long mag01[2] = {0x00000000, 0x8ebfd028UL}; unsigned long int y; unsigned long int *const x = state->x; int n = state->n; if (n >= N) { int i; for (i = 0; i < N - M; i++) { x[i] = x[i + M] ^ (x[i] >> 1) ^ mag01[x[i] % 2]; } for (; i < N; i++) { x[i] = x[i + (M - N)] ^ (x[i] >> 1) ^ mag01[x[i] % 2]; }; n = 0; } y = x[n]; y ^= (y << 7) & 0x2b5b2500UL; /* s and b, magic vectors */ y ^= (y << 15) & 0xdb8b0000UL; /* t and c, magic vectors */ y &= 0xffffffffUL; /* you may delete this line if word size = 32 */ /* The following line was added by Makoto Matsumoto in the 1996 version to improve lower bit's correlation. Delete this line to use the code published in 1994. */ y ^= (y >> 16); /* added to the 1994 version */ state->n = n + 1; return y; } static double tt_get_double (void * vstate) { return tt_get (vstate) / 4294967296.0 ; } static void tt_set (void *vstate, unsigned long int s) { tt_state_t *state = (tt_state_t *) vstate; const tt_state_t init_state = {0, {0x95f24dabUL, 0x0b685215UL, 0xe76ccae7UL, 0xaf3ec239UL, 0x715fad23UL, 0x24a590adUL, 0x69e4b5efUL, 0xbf456141UL, 0x96bc1b7bUL, 0xa7bdf825UL, 0xc1de75b7UL, 0x8858a9c9UL, 0x2da87693UL, 0xb657f9ddUL, 0xffdc8a9fUL, 0x8121da71UL, 0x8b823ecbUL, 0x885d05f5UL, 0x4e20cd47UL, 0x5a9ad5d9UL, 0x512c0c03UL, 0xea857ccdUL, 0x4cc1d30fUL, 0x8891a8a1UL, 0xa6b7aadbUL}}; if (s == 0) /* default seed is given explicitly in the original code */ { *state = init_state; } else { int i; state->n = 0; state->x[0] = s & 0xffffffffUL; for (i = 1; i < N; i++) state->x[i] = (69069 * state->x[i - 1]) & 0xffffffffUL; } return; } static const gsl_rng_type tt_type = {"tt800", /* name */ 0xffffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (tt_state_t), &tt_set, &tt_get, &tt_get_double}; const gsl_rng_type *gsl_rng_tt800 = &tt_type; gsl/rng/mt.c0000644000175000017500000001465613536674414011320 0ustar eddedd/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Original implementation was copyright (C) 1997 Makoto Matsumoto and Takuji Nishimura. Coded by Takuji Nishimura, considering the suggestions by Topher Cooper and Marc Rieffel in July-Aug. 1997, "A C-program for MT19937: Integer version (1998/4/6)" This implementation copyright (C) 1998 Brian Gough. I reorganized the code to use the module framework of GSL. The license on this implementation was changed from LGPL to GPL, following paragraph 3 of the LGPL, version 2. Update: The seeding procedure has been updated to match the 10/99 release of MT19937. Update: The seeding procedure has been updated again to match the 2002 release of MT19937 The original code included the comment: "When you use this, send an email to: matumoto@math.keio.ac.jp with an appropriate reference to your work". Makoto Matsumoto has a web page with more information about the generator, http://www.math.keio.ac.jp/~matumoto/emt.html. The paper below has details of the algorithm. From: Makoto Matsumoto and Takuji Nishimura, "Mersenne Twister: A 623-dimensionally equidistributerd uniform pseudorandom number generator". ACM Transactions on Modeling and Computer Simulation, Vol. 8, No. 1 (Jan. 1998), Pages 3-30 You can obtain the paper directly from Makoto Matsumoto's web page. The period of this generator is 2^{19937} - 1. */ #include #include #include static inline unsigned long int mt_get (void *vstate); static double mt_get_double (void *vstate); static void mt_set (void *state, unsigned long int s); #define N 624 /* Period parameters */ #define M 397 /* most significant w-r bits */ static const unsigned long UPPER_MASK = 0x80000000UL; /* least significant r bits */ static const unsigned long LOWER_MASK = 0x7fffffffUL; typedef struct { unsigned long mt[N]; int mti; } mt_state_t; static inline unsigned long mt_get (void *vstate) { mt_state_t *state = (mt_state_t *) vstate; unsigned long k ; unsigned long int *const mt = state->mt; #define MAGIC(y) (((y)&0x1) ? 0x9908b0dfUL : 0) if (state->mti >= N) { /* generate N words at one time */ int kk; for (kk = 0; kk < N - M; kk++) { unsigned long y = (mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK); mt[kk] = mt[kk + M] ^ (y >> 1) ^ MAGIC(y); } for (; kk < N - 1; kk++) { unsigned long y = (mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK); mt[kk] = mt[kk + (M - N)] ^ (y >> 1) ^ MAGIC(y); } { unsigned long y = (mt[N - 1] & UPPER_MASK) | (mt[0] & LOWER_MASK); mt[N - 1] = mt[M - 1] ^ (y >> 1) ^ MAGIC(y); } state->mti = 0; } /* Tempering */ k = mt[state->mti]; k ^= (k >> 11); k ^= (k << 7) & 0x9d2c5680UL; k ^= (k << 15) & 0xefc60000UL; k ^= (k >> 18); state->mti++; return k; } static double mt_get_double (void * vstate) { return mt_get (vstate) / 4294967296.0 ; } static void mt_set (void *vstate, unsigned long int s) { mt_state_t *state = (mt_state_t *) vstate; int i; if (s == 0) s = 4357; /* the default seed is 4357 */ state->mt[0]= s & 0xffffffffUL; for (i = 1; i < N; i++) { /* See Knuth's "Art of Computer Programming" Vol. 2, 3rd Ed. p.106 for multiplier. */ state->mt[i] = (1812433253UL * (state->mt[i-1] ^ (state->mt[i-1] >> 30)) + i); state->mt[i] &= 0xffffffffUL; } state->mti = i; } static void mt_1999_set (void *vstate, unsigned long int s) { mt_state_t *state = (mt_state_t *) vstate; int i; if (s == 0) s = 4357; /* the default seed is 4357 */ /* This is the October 1999 version of the seeding procedure. It was updated by the original developers to avoid the periodicity in the simple congruence originally used. Note that an ANSI-C unsigned long integer arithmetic is automatically modulo 2^32 (or a higher power of two), so we can safely ignore overflow. */ #define LCG(x) ((69069 * x) + 1) &0xffffffffUL for (i = 0; i < N; i++) { state->mt[i] = s & 0xffff0000UL; s = LCG(s); state->mt[i] |= (s &0xffff0000UL) >> 16; s = LCG(s); } state->mti = i; } /* This is the original version of the seeding procedure, no longer used but available for compatibility with the original MT19937. */ static void mt_1998_set (void *vstate, unsigned long int s) { mt_state_t *state = (mt_state_t *) vstate; int i; if (s == 0) s = 4357; /* the default seed is 4357 */ state->mt[0] = s & 0xffffffffUL; #define LCG1998(n) ((69069 * n) & 0xffffffffUL) for (i = 1; i < N; i++) state->mt[i] = LCG1998 (state->mt[i - 1]); state->mti = i; } static const gsl_rng_type mt_type = {"mt19937", /* name */ 0xffffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (mt_state_t), &mt_set, &mt_get, &mt_get_double}; static const gsl_rng_type mt_1999_type = {"mt19937_1999", /* name */ 0xffffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (mt_state_t), &mt_1999_set, &mt_get, &mt_get_double}; static const gsl_rng_type mt_1998_type = {"mt19937_1998", /* name */ 0xffffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (mt_state_t), &mt_1998_set, &mt_get, &mt_get_double}; const gsl_rng_type *gsl_rng_mt19937 = &mt_type; const gsl_rng_type *gsl_rng_mt19937_1999 = &mt_1999_type; const gsl_rng_type *gsl_rng_mt19937_1998 = &mt_1998_type; /* MT19937 is the default generator, so define that here too */ const gsl_rng_type *gsl_rng_default = &mt_type; unsigned long int gsl_rng_default_seed = 0; gsl/rng/taus.c0000644000175000017500000001266413536674414011651 0ustar eddedd/* rng/taus.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is a maximally equidistributed combined Tausworthe generator. The sequence is, x_n = (s1_n ^ s2_n ^ s3_n) s1_{n+1} = (((s1_n & 4294967294) <<12) ^ (((s1_n <<13) ^ s1_n) >>19)) s2_{n+1} = (((s2_n & 4294967288) << 4) ^ (((s2_n << 2) ^ s2_n) >>25)) s3_{n+1} = (((s3_n & 4294967280) <<17) ^ (((s3_n << 3) ^ s3_n) >>11)) computed modulo 2^32. In the three formulas above '^' means exclusive-or (C-notation), not exponentiation. Note that the algorithm relies on the properties of 32-bit unsigned integers (it is formally defined on bit-vectors of length 32). I have added a bitmask to make it work on 64 bit machines. We initialize the generator with s1_1 .. s3_1 = s_n MOD m, where s_n = (69069 * s_{n-1}) mod 2^32, and s_0 = s is the user-supplied seed. The theoretical value of x_{10007} is 2733957125. The subscript 10007 means (1) seed the generator with s=1 (2) do six warm-up iterations, (3) then do 10000 actual iterations. The period of this generator is about 2^88. From: P. L'Ecuyer, "Maximally Equidistributed Combined Tausworthe Generators", Mathematics of Computation, 65, 213 (1996), 203--213. This is available on the net from L'Ecuyer's home page, http://www.iro.umontreal.ca/~lecuyer/myftp/papers/tausme.ps ftp://ftp.iro.umontreal.ca/pub/simulation/lecuyer/papers/tausme.ps Update: April 2002 There is an erratum in the paper "Tables of Maximally Equidistributed Combined LFSR Generators", Mathematics of Computation, 68, 225 (1999), 261--269: http://www.iro.umontreal.ca/~lecuyer/myftp/papers/tausme2.ps ... the k_j most significant bits of z_j must be non- zero, for each j. (Note: this restriction also applies to the computer code given in [4], but was mistakenly not mentioned in that paper.) This affects the seeding procedure by imposing the requirement s1 > 1, s2 > 7, s3 > 15. The generator taus2 has been added to satisfy this requirement. The original taus generator is unchanged. Update: November 2002 There was a bug in the correction to the seeding procedure for s2. It affected the following seeds 254679140 1264751179 1519430319 2274823218 2529502358 3284895257 3539574397 (s2 < 8). */ static inline unsigned long int taus_get (void *vstate); static double taus_get_double (void *vstate); static void taus_set (void *state, unsigned long int s); typedef struct { unsigned long int s1, s2, s3; } taus_state_t; static inline unsigned long taus_get (void *vstate) { taus_state_t *state = (taus_state_t *) vstate; #define MASK 0xffffffffUL #define TAUSWORTHE(s,a,b,c,d) (((s &c) <>b) state->s1 = TAUSWORTHE (state->s1, 13, 19, 4294967294UL, 12); state->s2 = TAUSWORTHE (state->s2, 2, 25, 4294967288UL, 4); state->s3 = TAUSWORTHE (state->s3, 3, 11, 4294967280UL, 17); return (state->s1 ^ state->s2 ^ state->s3); } static double taus_get_double (void *vstate) { return taus_get (vstate) / 4294967296.0 ; } static void taus_set (void *vstate, unsigned long int s) { taus_state_t *state = (taus_state_t *) vstate; if (s == 0) s = 1; /* default seed is 1 */ #define LCG(n) ((69069 * n) & 0xffffffffUL) state->s1 = LCG (s); state->s2 = LCG (state->s1); state->s3 = LCG (state->s2); /* "warm it up" */ taus_get (state); taus_get (state); taus_get (state); taus_get (state); taus_get (state); taus_get (state); return; } static void taus2_set (void *vstate, unsigned long int s) { taus_state_t *state = (taus_state_t *) vstate; if (s == 0) s = 1; /* default seed is 1 */ #define LCG(n) ((69069 * n) & 0xffffffffUL) state->s1 = LCG (s); if (state->s1 < 2) state->s1 += 2UL; state->s2 = LCG (state->s1); if (state->s2 < 8) state->s2 += 8UL; state->s3 = LCG (state->s2); if (state->s3 < 16) state->s3 += 16UL; /* "warm it up" */ taus_get (state); taus_get (state); taus_get (state); taus_get (state); taus_get (state); taus_get (state); return; } static const gsl_rng_type taus_type = {"taus", /* name */ 0xffffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (taus_state_t), &taus_set, &taus_get, &taus_get_double}; const gsl_rng_type *gsl_rng_taus = &taus_type; static const gsl_rng_type taus2_type = {"taus2", /* name */ 0xffffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (taus_state_t), &taus2_set, &taus_get, &taus_get_double}; const gsl_rng_type *gsl_rng_taus2 = &taus2_type; gsl/rng/randu.c0000644000175000017500000000502213536674414011774 0ustar eddedd/* rng/randu.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is a reincarnation of the infamously bad RANDU generator. The sequence is, x_{n+1} = (a x_n) mod m with a = 65539 and m = 2^31 = 2147483648. The seed specifies the initial value, x_1. The theoretical value of x_{10001} is 1623524161. The period of this generator is 2^29. Note: Knuth describes this generator as "really horrible". From: Park and Miller, "Random Number Generators: Good ones are hard to find" Communications of the ACM, October 1988, Volume 31, No 10, pages 1192-1201. */ static inline unsigned long int randu_get (void *vstate); static double randu_get_double (void *vstate); static void randu_set (void *state, unsigned long int s); static const long int a = 65539; /* static const unsigned long int m = 2147483648UL; */ typedef struct { unsigned long int x; } randu_state_t; static inline unsigned long int randu_get (void *vstate) { randu_state_t *state = (randu_state_t *) vstate; /* The following line relies on unsigned 32-bit arithmetic */ state->x = (a * state->x) & 0x7fffffffUL; return state->x; } static double randu_get_double (void *vstate) { return randu_get (vstate) / 2147483648.0 ; } static void randu_set (void *vstate, unsigned long int s) { randu_state_t *state = (randu_state_t *) vstate; if (s == 0) s = 1; /* default seed is 1 */ state->x = s; return; } static const gsl_rng_type randu_type = {"randu", /* name */ 0x7fffffffUL, /* RAND_MAX */ 1, /* RAND_MIN */ sizeof (randu_state_t), &randu_set, &randu_get, &randu_get_double}; const gsl_rng_type *gsl_rng_randu = &randu_type; gsl/rng/fishman20.c0000644000175000017500000000446213536674414012461 0ustar eddedd/* rng/fishman20.c * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This generator is taken from * * Donald E. Knuth * The Art of Computer Programming * Volume 2 * Third Edition * Addison-Wesley * Page 108 * * It is called "Fishman" * * This implementation copyright (C) 2001 Carlo Perassi * and (C) 2003 Heiko Bauke. */ #include #include #include static inline unsigned long int ran_get (void *vstate); static double ran_get_double (void *vstate); static void ran_set (void *state, unsigned long int s); static const long int m = 2147483647, a = 48271, q = 44488, r = 3399; typedef struct { unsigned long int x; } ran_state_t; static inline unsigned long int ran_get (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; const unsigned long int x = state->x; const long int h = x / q; const long int t = a * (x - h * q) - h * r; if (t < 0) { state->x = t + m; } else { state->x = t; } return state->x; } static double ran_get_double (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; return ran_get (state) / 2147483647.0; } static void ran_set (void *vstate, unsigned long int s) { ran_state_t *state = (ran_state_t *) vstate; if ((s%m) == 0) s = 1; /* default seed is 1 */ state->x = s & m; return; } static const gsl_rng_type ran_type = { "fishman20", /* name */ 2147483646, /* RAND_MAX */ 1, /* RAND_MIN */ sizeof (ran_state_t), &ran_set, &ran_get, &ran_get_double }; const gsl_rng_type *gsl_rng_fishman20 = &ran_type; gsl/rng/borosh13.c0000644000175000017500000000423113536674414012324 0ustar eddedd/* rng/borosh13.c * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This generator is taken from * * Donald E. Knuth * The Art of Computer Programming * Volume 2 * Third Edition * Addison-Wesley * Page 106-108 * * It is called "Borosh - Niederreiter" * * This implementation copyright (C) 2001 Carlo Perassi and * (C) 2003 Heiko Bauke. */ #include #include #include #define AA 1812433253UL #define MM 0xffffffffUL /* 2 ^ 32 - 1 */ static inline unsigned long int ran_get (void *vstate); static double ran_get_double (void *vstate); static void ran_set (void *state, unsigned long int s); typedef struct { unsigned long int x; } ran_state_t; static inline unsigned long int ran_get (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; state->x = (AA * state->x) & MM; return state->x; } static double ran_get_double (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; return ran_get (state) / 4294967296.0; } static void ran_set (void *vstate, unsigned long int s) { ran_state_t *state = (ran_state_t *) vstate; if (s == 0) s = 1; /* default seed is 1 */ state->x = s & MM; return; } static const gsl_rng_type ran_type = { "borosh13", /* name */ MM, /* RAND_MAX */ 1, /* RAND_MIN */ sizeof (ran_state_t), &ran_set, &ran_get, &ran_get_double }; const gsl_rng_type *gsl_rng_borosh13 = &ran_type; gsl/rng/ran2.c0000644000175000017500000000676413536674414011543 0ustar eddedd/* rng/ran2.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is an implementation of the algorithm used in Numerical Recipe's ran2 generator. It is a L'Ecuyer combined recursive generator with a 32-element shuffle-box. As far as I can tell, in general the effects of adding a shuffle box cannot be proven theoretically, so the period of this generator is unknown. The period of the underlying combined generator is O(2^60). */ static inline unsigned long int ran2_get (void *vstate); static double ran2_get_double (void *vstate); static void ran2_set (void *state, unsigned long int s); static const long int m1 = 2147483563, a1 = 40014, q1 = 53668, r1 = 12211; static const long int m2 = 2147483399, a2 = 40692, q2 = 52774, r2 = 3791; #define N_SHUFFLE 32 #define N_DIV (1 + 2147483562/N_SHUFFLE) typedef struct { unsigned long int x; unsigned long int y; unsigned long int n; unsigned long int shuffle[N_SHUFFLE]; } ran2_state_t; static inline unsigned long int ran2_get (void *vstate) { ran2_state_t *state = (ran2_state_t *) vstate; const unsigned long int x = state->x; const unsigned long int y = state->y; long int h1 = x / q1; long int t1 = a1 * (x - h1 * q1) - h1 * r1; long int h2 = y / q2; long int t2 = a2 * (y - h2 * q2) - h2 * r2; if (t1 < 0) t1 += m1; if (t2 < 0) t2 += m2; state->x = t1; state->y = t2; { unsigned long int j = state->n / N_DIV; long int delta = state->shuffle[j] - t2; if (delta < 1) delta += m1 - 1; state->n = delta; state->shuffle[j] = t1; } return state->n; } static double ran2_get_double (void *vstate) { float x_max = 1 - 1.2e-7f ; /* Numerical Recipes version of 1-FLT_EPS */ float x = ran2_get (vstate) / 2147483563.0f ; if (x > x_max) return x_max ; return x ; } static void ran2_set (void *vstate, unsigned long int s) { ran2_state_t *state = (ran2_state_t *) vstate; int i; if (s == 0) s = 1; /* default seed is 1 */ state->y = s; for (i = 0; i < 8; i++) { long int h = s / q1; long int t = a1 * (s - h * q1) - h * r1; if (t < 0) t += m1; s = t; } for (i = N_SHUFFLE - 1; i >= 0; i--) { long int h = s / q1; long int t = a1 * (s - h * q1) - h * r1; if (t < 0) t += m1; s = t; state->shuffle[i] = s; } state->x = s; state->n = s; return; } static const gsl_rng_type ran2_type = {"ran2", /* name */ 2147483562, /* RAND_MAX */ 1, /* RAND_MIN */ sizeof (ran2_state_t), &ran2_set, &ran2_get, &ran2_get_double}; const gsl_rng_type *gsl_rng_ran2 = &ran2_type; gsl/rng/random.c0000644000175000017500000004003313536674414012144 0ustar eddedd/* rng/random.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This file provides support for random() generators. There are three versions in widespread use today, - The original BSD version, e.g. on SunOS 4.1 and FreeBSD. - The Linux libc5 version, which is differs from the BSD version in its seeding procedure, possibly due to the introduction of a typo in the multiplier. - The GNU glibc2 version, which has a new (and better) seeding procedure. They all produce different numbers, due to the different seeding algorithms, but the algorithm for the generator is the same in each case. */ static inline long int random_get (int * i, int * j, int n, long int * x); static inline unsigned long int random8_get (void *vstate); static inline unsigned long int random32_get (void *vstate); static inline unsigned long int random64_get (void *vstate); static inline unsigned long int random128_get (void *vstate); static inline unsigned long int random256_get (void *vstate); static double random8_get_double (void *vstate); static double random32_get_double (void *vstate); static double random64_get_double (void *vstate); static double random128_get_double (void *vstate); static double random256_get_double (void *vstate); static void random8_glibc2_set (void *state, unsigned long int s); static void random32_glibc2_set (void *state, unsigned long int s); static void random64_glibc2_set (void *state, unsigned long int s); static void random128_glibc2_set (void *state, unsigned long int s); static void random256_glibc2_set (void *state, unsigned long int s); static void random8_libc5_set (void *state, unsigned long int s); static void random32_libc5_set (void *state, unsigned long int s); static void random64_libc5_set (void *state, unsigned long int s); static void random128_libc5_set (void *state, unsigned long int s); static void random256_libc5_set (void *state, unsigned long int s); static void random8_bsd_set (void *state, unsigned long int s); static void random32_bsd_set (void *state, unsigned long int s); static void random64_bsd_set (void *state, unsigned long int s); static void random128_bsd_set (void *state, unsigned long int s); static void random256_bsd_set (void *state, unsigned long int s); static void bsd_initialize (long int * x, int n, unsigned long int s); static void libc5_initialize (long int * x, int n, unsigned long int s); static void glibc2_initialize (long int * x, int n, unsigned long int s); typedef struct { long int x; } random8_state_t; typedef struct { int i, j; long int x[7]; } random32_state_t; typedef struct { int i, j; long int x[15]; } random64_state_t; typedef struct { int i, j; long int x[31]; } random128_state_t; typedef struct { int i, j; long int x[63]; } random256_state_t; static inline unsigned long int random8_get (void *vstate) { random8_state_t *state = (random8_state_t *) vstate; state->x = (1103515245 * state->x + 12345) & 0x7fffffffUL; return state->x; } static inline long int random_get (int * i, int * j, int n, long int * x) { long int k ; x[*i] += x[*j] ; k = (x[*i] >> 1) & 0x7FFFFFFF ; (*i)++ ; if (*i == n) *i = 0 ; (*j)++ ; if (*j == n) *j = 0 ; return k ; } static inline unsigned long int random32_get (void *vstate) { random32_state_t *state = (random32_state_t *) vstate; unsigned long int k = random_get (&state->i, &state->j, 7, state->x) ; return k ; } static inline unsigned long int random64_get (void *vstate) { random64_state_t *state = (random64_state_t *) vstate; long int k = random_get (&state->i, &state->j, 15, state->x) ; return k ; } static inline unsigned long int random128_get (void *vstate) { random128_state_t *state = (random128_state_t *) vstate; unsigned long int k = random_get (&state->i, &state->j, 31, state->x) ; return k ; } static inline unsigned long int random256_get (void *vstate) { random256_state_t *state = (random256_state_t *) vstate; long int k = random_get (&state->i, &state->j, 63, state->x) ; return k ; } static double random8_get_double (void *vstate) { return random8_get (vstate) / 2147483648.0 ; } static double random32_get_double (void *vstate) { return random32_get (vstate) / 2147483648.0 ; } static double random64_get_double (void *vstate) { return random64_get (vstate) / 2147483648.0 ; } static double random128_get_double (void *vstate) { return random128_get (vstate) / 2147483648.0 ; } static double random256_get_double (void *vstate) { return random256_get (vstate) / 2147483648.0 ; } static void random8_bsd_set (void *vstate, unsigned long int s) { random8_state_t *state = (random8_state_t *) vstate; if (s == 0) s = 1; state->x = s; } static void random32_bsd_set (void *vstate, unsigned long int s) { random32_state_t *state = (random32_state_t *) vstate; int i; bsd_initialize (state->x, 7, s) ; state->i = 3; state->j = 0; for (i = 0 ; i < 10 * 7 ; i++) random32_get (state) ; } static void random64_bsd_set (void *vstate, unsigned long int s) { random64_state_t *state = (random64_state_t *) vstate; int i; bsd_initialize (state->x, 15, s) ; state->i = 1; state->j = 0; for (i = 0 ; i < 10 * 15 ; i++) random64_get (state) ; } static void random128_bsd_set (void *vstate, unsigned long int s) { random128_state_t *state = (random128_state_t *) vstate; int i; bsd_initialize (state->x, 31, s) ; state->i = 3; state->j = 0; for (i = 0 ; i < 10 * 31 ; i++) random128_get (state) ; } static void random256_bsd_set (void *vstate, unsigned long int s) { random256_state_t *state = (random256_state_t *) vstate; int i; bsd_initialize (state->x, 63, s) ; state->i = 1; state->j = 0; for (i = 0 ; i < 10 * 63 ; i++) random256_get (state) ; } static void bsd_initialize (long int * x, int n, unsigned long int s) { int i; if (s == 0) s = 1 ; x[0] = s; for (i = 1 ; i < n ; i++) x[i] = 1103515245 * x[i-1] + 12345 ; } static void libc5_initialize (long int * x, int n, unsigned long int s) { int i; if (s == 0) s = 1 ; x[0] = s; for (i = 1 ; i < n ; i++) x[i] = 1103515145 * x[i-1] + 12345 ; } static void glibc2_initialize (long int * x, int n, unsigned long int s) { int i; if (s == 0) s = 1 ; x[0] = s; for (i = 1 ; i < n ; i++) { const long int h = s / 127773; const long int t = 16807 * (s - h * 127773) - h * 2836; if (t < 0) { s = t + 2147483647 ; } else { s = t ; } x[i] = s ; } } static void random8_glibc2_set (void *vstate, unsigned long int s) { random8_state_t *state = (random8_state_t *) vstate; if (s == 0) s = 1; state->x = s; } static void random32_glibc2_set (void *vstate, unsigned long int s) { random32_state_t *state = (random32_state_t *) vstate; int i; glibc2_initialize (state->x, 7, s) ; state->i = 3; state->j = 0; for (i = 0 ; i < 10 * 7 ; i++) random32_get (state) ; } static void random64_glibc2_set (void *vstate, unsigned long int s) { random64_state_t *state = (random64_state_t *) vstate; int i; glibc2_initialize (state->x, 15, s) ; state->i = 1; state->j = 0; for (i = 0 ; i < 10 * 15 ; i++) random64_get (state) ; } static void random128_glibc2_set (void *vstate, unsigned long int s) { random128_state_t *state = (random128_state_t *) vstate; int i; glibc2_initialize (state->x, 31, s) ; state->i = 3; state->j = 0; for (i = 0 ; i < 10 * 31 ; i++) random128_get (state) ; } static void random256_glibc2_set (void *vstate, unsigned long int s) { random256_state_t *state = (random256_state_t *) vstate; int i; glibc2_initialize (state->x, 63, s) ; state->i = 1; state->j = 0; for (i = 0 ; i < 10 * 63 ; i++) random256_get (state) ; } static void random8_libc5_set (void *vstate, unsigned long int s) { random8_state_t *state = (random8_state_t *) vstate; if (s == 0) s = 1; state->x = s; } static void random32_libc5_set (void *vstate, unsigned long int s) { random32_state_t *state = (random32_state_t *) vstate; int i; libc5_initialize (state->x, 7, s) ; state->i = 3; state->j = 0; for (i = 0 ; i < 10 * 7 ; i++) random32_get (state) ; } static void random64_libc5_set (void *vstate, unsigned long int s) { random64_state_t *state = (random64_state_t *) vstate; int i; libc5_initialize (state->x, 15, s) ; state->i = 1; state->j = 0; for (i = 0 ; i < 10 * 15 ; i++) random64_get (state) ; } static void random128_libc5_set (void *vstate, unsigned long int s) { random128_state_t *state = (random128_state_t *) vstate; int i; libc5_initialize (state->x, 31, s) ; state->i = 3; state->j = 0; for (i = 0 ; i < 10 * 31 ; i++) random128_get (state) ; } static void random256_libc5_set (void *vstate, unsigned long int s) { random256_state_t *state = (random256_state_t *) vstate; int i; libc5_initialize (state->x, 63, s) ; state->i = 1; state->j = 0; for (i = 0 ; i < 10 * 63 ; i++) random256_get (state) ; } static const gsl_rng_type random_glibc2_type = {"random-glibc2", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random128_state_t), &random128_glibc2_set, &random128_get, &random128_get_double}; static const gsl_rng_type random8_glibc2_type = {"random8-glibc2", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random8_state_t), &random8_glibc2_set, &random8_get, &random8_get_double}; static const gsl_rng_type random32_glibc2_type = {"random32-glibc2", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random32_state_t), &random32_glibc2_set, &random32_get, &random32_get_double}; static const gsl_rng_type random64_glibc2_type = {"random64-glibc2", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random64_state_t), &random64_glibc2_set, &random64_get, &random64_get_double}; static const gsl_rng_type random128_glibc2_type = {"random128-glibc2", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random128_state_t), &random128_glibc2_set, &random128_get, &random128_get_double}; static const gsl_rng_type random256_glibc2_type = {"random256-glibc2", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random256_state_t), &random256_glibc2_set, &random256_get, &random256_get_double}; static const gsl_rng_type random_libc5_type = {"random-libc5", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random128_state_t), &random128_libc5_set, &random128_get, &random128_get_double}; static const gsl_rng_type random8_libc5_type = {"random8-libc5", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random8_state_t), &random8_libc5_set, &random8_get, &random8_get_double}; static const gsl_rng_type random32_libc5_type = {"random32-libc5", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random32_state_t), &random32_libc5_set, &random32_get, &random32_get_double}; static const gsl_rng_type random64_libc5_type = {"random64-libc5", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random64_state_t), &random64_libc5_set, &random64_get, &random64_get_double}; static const gsl_rng_type random128_libc5_type = {"random128-libc5", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random128_state_t), &random128_libc5_set, &random128_get, &random128_get_double}; static const gsl_rng_type random256_libc5_type = {"random256-libc5", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random256_state_t), &random256_libc5_set, &random256_get, &random256_get_double}; static const gsl_rng_type random_bsd_type = {"random-bsd", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random128_state_t), &random128_bsd_set, &random128_get, &random128_get_double}; static const gsl_rng_type random8_bsd_type = {"random8-bsd", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random8_state_t), &random8_bsd_set, &random8_get, &random8_get_double}; static const gsl_rng_type random32_bsd_type = {"random32-bsd", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random32_state_t), &random32_bsd_set, &random32_get, &random32_get_double}; static const gsl_rng_type random64_bsd_type = {"random64-bsd", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random64_state_t), &random64_bsd_set, &random64_get, &random64_get_double}; static const gsl_rng_type random128_bsd_type = {"random128-bsd", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random128_state_t), &random128_bsd_set, &random128_get, &random128_get_double}; static const gsl_rng_type random256_bsd_type = {"random256-bsd", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (random256_state_t), &random256_bsd_set, &random256_get, &random256_get_double}; const gsl_rng_type *gsl_rng_random_libc5 = &random_libc5_type; const gsl_rng_type *gsl_rng_random8_libc5 = &random8_libc5_type; const gsl_rng_type *gsl_rng_random32_libc5 = &random32_libc5_type; const gsl_rng_type *gsl_rng_random64_libc5 = &random64_libc5_type; const gsl_rng_type *gsl_rng_random128_libc5 = &random128_libc5_type; const gsl_rng_type *gsl_rng_random256_libc5 = &random256_libc5_type; const gsl_rng_type *gsl_rng_random_glibc2 = &random_glibc2_type; const gsl_rng_type *gsl_rng_random8_glibc2 = &random8_glibc2_type; const gsl_rng_type *gsl_rng_random32_glibc2 = &random32_glibc2_type; const gsl_rng_type *gsl_rng_random64_glibc2 = &random64_glibc2_type; const gsl_rng_type *gsl_rng_random128_glibc2 = &random128_glibc2_type; const gsl_rng_type *gsl_rng_random256_glibc2 = &random256_glibc2_type; const gsl_rng_type *gsl_rng_random_bsd = &random_bsd_type; const gsl_rng_type *gsl_rng_random8_bsd = &random8_bsd_type; const gsl_rng_type *gsl_rng_random32_bsd = &random32_bsd_type; const gsl_rng_type *gsl_rng_random64_bsd = &random64_bsd_type; const gsl_rng_type *gsl_rng_random128_bsd = &random128_bsd_type; const gsl_rng_type *gsl_rng_random256_bsd = &random256_bsd_type; gsl/rng/mrg.c0000644000175000017500000000760013536674414011454 0ustar eddedd/* rng/mrg.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is a fifth-order multiple recursive generator. The sequence is, x_n = (a_1 x_{n-1} + a_5 x_{n-5}) mod m with a_1 = 107374182, a_2 = a_3 = a_4 = 0, a_5 = 104480 and m = 2^31-1. We initialize the generator with x_n = s_n MOD m for n = 1..5, where s_n = (69069 * s_{n-1}) mod 2^32, and s_0 = s is the user-supplied seed. NOTE: According to the paper the seeds must lie in the range [0, 2^31 - 2] with at least one non-zero value -- our seeding procedure satisfies these constraints. We then use 6 iterations of the generator to "warm up" the internal state. With this initialization procedure the theoretical value of z_{10006} is 2064828650 for s = 1. The subscript 10006 means (1) seed the generator with s = 1, (2) do the 6 warm-up iterations that are part of the seeding process, (3) then do 10000 actual iterations. The period of this generator is about 2^155. From: P. L'Ecuyer, F. Blouin, and R. Coutre, "A search for good multiple recursive random number generators", ACM Transactions on Modeling and Computer Simulation 3, 87-98 (1993). */ static inline unsigned long int mrg_get (void *vstate); static double mrg_get_double (void *vstate); static void mrg_set (void *state, unsigned long int s); static const long int m = 2147483647; static const long int a1 = 107374182, q1 = 20, r1 = 7; static const long int a5 = 104480, q5 = 20554, r5 = 1727; typedef struct { long int x1, x2, x3, x4, x5; } mrg_state_t; static inline unsigned long int mrg_get (void *vstate) { mrg_state_t *state = (mrg_state_t *) vstate; long int p1, h1, p5, h5; h5 = state->x5 / q5; p5 = a5 * (state->x5 - h5 * q5) - h5 * r5; if (p5 > 0) p5 -= m; h1 = state->x1 / q1; p1 = a1 * (state->x1 - h1 * q1) - h1 * r1; if (p1 < 0) p1 += m; state->x5 = state->x4; state->x4 = state->x3; state->x3 = state->x2; state->x2 = state->x1; state->x1 = p1 + p5; if (state->x1 < 0) state->x1 += m; return state->x1; } static double mrg_get_double (void *vstate) { return mrg_get (vstate) / 2147483647.0 ; } static void mrg_set (void *vstate, unsigned long int s) { /* An entirely adhoc way of seeding! This does **not** come from L'Ecuyer et al */ mrg_state_t *state = (mrg_state_t *) vstate; if (s == 0) s = 1; /* default seed is 1 */ #define LCG(n) ((69069 * n) & 0xffffffffUL) s = LCG (s); state->x1 = s % m; s = LCG (s); state->x2 = s % m; s = LCG (s); state->x3 = s % m; s = LCG (s); state->x4 = s % m; s = LCG (s); state->x5 = s % m; /* "warm it up" with at least 5 calls to go through all the x values */ mrg_get (state); mrg_get (state); mrg_get (state); mrg_get (state); mrg_get (state); mrg_get (state); return; } static const gsl_rng_type mrg_type = {"mrg", /* name */ 2147483646, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (mrg_state_t), &mrg_set, &mrg_get, &mrg_get_double}; const gsl_rng_type *gsl_rng_mrg = &mrg_type; gsl/rng/rand.c0000644000175000017500000000436613536674414011621 0ustar eddedd/* rng/rand.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is the old BSD rand() generator. The sequence is x_{n+1} = (a x_n + c) mod m with a = 1103515245, c = 12345 and m = 2^31 = 2147483648. The seed specifies the initial value, x_1. The theoretical value of x_{10001} is 1910041713. The period of this generator is 2^31. The rand() generator is not very good -- the low bits of successive numbers are correlated. */ static inline unsigned long int rand_get (void *vstate); static double rand_get_double (void *vstate); static void rand_set (void *state, unsigned long int s); typedef struct { unsigned long int x; } rand_state_t; static inline unsigned long int rand_get (void *vstate) { rand_state_t *state = (rand_state_t *) vstate; /* The following line relies on unsigned 32-bit arithmetic */ state->x = (1103515245 * state->x + 12345) & 0x7fffffffUL; return state->x; } static double rand_get_double (void *vstate) { return rand_get (vstate) / 2147483648.0 ; } static void rand_set (void *vstate, unsigned long int s) { rand_state_t *state = (rand_state_t *) vstate; state->x = s; return; } static const gsl_rng_type rand_type = {"rand", /* name */ 0x7fffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (rand_state_t), &rand_set, &rand_get, &rand_get_double}; const gsl_rng_type *gsl_rng_rand = &rand_type; gsl/rng/uni.c0000644000175000017500000001367213536674414011470 0ustar eddedd/* rng/uni.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /** This is a lagged Fibonacci generator which supposedly excellent statistical properties (I do not concur) I got it from the net and translated into C. * ====================================================================== * NIST Guide to Available Math Software. * Fullsource for module UNI from package CMLIB. * Retrieved from CAMSUN on Tue Oct 8 14:04:10 1996. * ====================================================================== C***BEGIN PROLOGUE UNI C***DATE WRITTEN 810915 C***REVISION DATE 830805 C***CATEGORY NO. L6A21 C***KEYWORDS RANDOM NUMBERS, UNIFORM RANDOM NUMBERS C***AUTHOR BLUE, JAMES, SCIENTIFIC COMPUTING DIVISION, NBS C KAHANER, DAVID, SCIENTIFIC COMPUTING DIVISION, NBS C MARSAGLIA, GEORGE, COMPUTER SCIENCE DEPT., WASH STATE UNIV C C***PURPOSE THIS ROUTINE GENERATES QUASI UNIFORM RANDOM NUMBERS ON [0,1 C AND CAN BE USED ON ANY COMPUTER WITH WHICH ALLOWS INTEGERS C AT LEAST AS LARGE AS 32767. C***DESCRIPTION C C THIS ROUTINE GENERATES QUASI UNIFORM RANDOM NUMBERS ON THE INTER C [0,1). IT CAN BE USED WITH ANY COMPUTER WHICH ALLOWS C INTEGERS AT LEAST AS LARGE AS 32767. C C C USE C FIRST TIME.... C Z = UNI(JD) C HERE JD IS ANY N O N - Z E R O INTEGER. C THIS CAUSES INITIALIZATION OF THE PROGRAM C AND THE FIRST RANDOM NUMBER TO BE RETURNED AS Z. C SUBSEQUENT TIMES... C Z = UNI(0) C CAUSES THE NEXT RANDOM NUMBER TO BE RETURNED AS Z. C C C.................................................................. C NOTE: USERS WHO WISH TO TRANSPORT THIS PROGRAM FROM ONE COMPUTER C TO ANOTHER SHOULD READ THE FOLLOWING INFORMATION..... C C MACHINE DEPENDENCIES... C MDIG = A LOWER BOUND ON THE NUMBER OF BINARY DIGITS AVAILABLE C FOR REPRESENTING INTEGERS, INCLUDING THE SIGN BIT. C THIS VALUE MUST BE AT LEAST 16, BUT MAY BE INCREASED C IN LINE WITH REMARK A BELOW. C C REMARKS... C A. THIS PROGRAM CAN BE USED IN TWO WAYS: C (1) TO OBTAIN REPEATABLE RESULTS ON DIFFERENT COMPUTERS, C SET 'MDIG' TO THE SMALLEST OF ITS VALUES ON EACH, OR, C (2) TO ALLOW THE LONGEST SEQUENCE OF RANDOM NUMBERS TO BE C GENERATED WITHOUT CYCLING (REPEATING) SET 'MDIG' TO THE C LARGEST POSSIBLE VALUE. C B. THE SEQUENCE OF NUMBERS GENERATED DEPENDS ON THE INITIAL C INPUT 'JD' AS WELL AS THE VALUE OF 'MDIG'. C IF MDIG=16 ONE SHOULD FIND THAT Editors Note: set the seed using 152 in order to get uni(305) -jt C THE FIRST EVALUATION C Z=UNI(305) GIVES Z=.027832881... C THE SECOND EVALUATION C Z=UNI(0) GIVES Z=.56102176... C THE THIRD EVALUATION C Z=UNI(0) GIVES Z=.41456343... C THE THOUSANDTH EVALUATION C Z=UNI(0) GIVES Z=.19797357... C C***REFERENCES MARSAGLIA G., "COMMENTS ON THE PERFECT UNIFORM RANDOM C NUMBER GENERATOR", UNPUBLISHED NOTES, WASH S. U. C***ROUTINES CALLED I1MACH,XERROR C***END PROLOGUE UNI **/ #include #include #include static inline unsigned long int uni_get (void *vstate); static double uni_get_double (void *vstate); static void uni_set (void *state, unsigned long int s); static const unsigned int MDIG = 16; /* Machine digits in int */ static const unsigned int m1 = 32767; /* 2^(MDIG-1) - 1 */ static const unsigned int m2 = 256; /* 2^(MDIG/2) */ typedef struct { int i, j; unsigned long m[17]; } uni_state_t; static inline unsigned long uni_get (void *vstate) { uni_state_t *state = (uni_state_t *) vstate; const int i = state->i; const int j = state->j; /* important k not be unsigned */ long k = state->m[i] - state->m[j]; if (k < 0) k += m1; state->m[j] = k; if (i == 0) { state->i = 16; } else { (state->i)--; } if (j == 0) { state->j = 16; } else { (state->j)--; } return k; } static double uni_get_double (void *vstate) { return uni_get (vstate) / 32767.0 ; } static void uni_set (void *vstate, unsigned long int s) { unsigned int i, seed, k0, k1, j0, j1; uni_state_t *state = (uni_state_t *) vstate; /* For this routine, the seeding is very elaborate! */ /* A flaw in this approach is that seeds 1,2 give exactly the same random number sequence! */ s = 2 * s + 1; /* enforce seed be odd */ seed = (s < m1 ? s : m1); /* seed should be less than m1 */ k0 = 9069 % m2; k1 = 9069 / m2; j0 = seed % m2; j1 = seed / m2; for (i = 0; i < 17; ++i) { seed = j0 * k0; j1 = (seed / m2 + j0 * k1 + j1 * k0) % (m2 / 2); j0 = seed % m2; state->m[i] = j0 + m2 * j1; } state->i = 4; state->j = 16; return; } static const gsl_rng_type uni_type = {"uni", /* name */ 32766, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (uni_state_t), &uni_set, &uni_get, &uni_get_double}; const gsl_rng_type *gsl_rng_uni = &uni_type; gsl/rng/TODO0000644000175000017500000000750413536674414011216 0ustar eddedd# -*- org -*- #+CATEGORY: rng * gfsr: for consistency (Charles A. Wemple). Make this change in 2.0 127a142 > state->nd = i-1; 133,134c148,149 < for (i=0; i<32; ++i) { < int k=7+i*3; --- > for (i=0; i<32; i++) { > int k=7*i+3; 141d155 < state->nd = i; * Sort out "const" in prototypes, it looks odd since there are consts for many functions which modify the state. (Applies to both qrng and rng) * New 64 bit generators in "Tables of 64-bit Mersenne Twisters", Takuji Nishimura, ACM Transactions on Modeling and Computer Simulation, Volumen 10, No 4, October 2000, p 348--357 * Need to run tests over the space of seeds, in addition to serial tests (DIEHARD) for the default seed. The congruences used for seeding will give poor initial vectors for some seed values, e.g. 2^n. Improve the seeding procedure by using a high-quality generator (e.g. hash functions, md5 or sha) to generate the initial vectors. Even if this is moderately expensive it is worthwhile since the seeding is usually a one-off cost at program initialization, and the results of all subsequent calls to the generator depend on it. The GSFR4 generator is particularly likely to benefit from this procedure. * Add SWNS generator Phys.Rev.E 50 (2) p. 1607-1615 (1994), Phys.Rev.E 60 (6), p.7626-7628 (1999) * Add get_array type methods which can provide optimized versions of each function (?). We should offer the possibility of eliminating function call overhead -- there are various possible ways to implement it. * Add ISAAC generator (??) * Add (A)RC4 and hash based random number generators MD5, SHA. This should give crypto quality randomness, and guarantee different sequences for each seed. Make the state (seed, count) where count increments on each call of the generator. Implement count as a big integer stored in separate unsigned integers so that the period is sufficiently long (e.g. 2^64 or 2^96). The generator would return HASH(seed, count) on each call. * Check that RANLXS will work on machines with non-standard width of float/dbl (original has checks for DBL_MANT_DIG ..) * mention more clearly why not all Cokus used (or recheck MT pages for improvements) * run the DIEHARD tests on all the generators, especially the ones we are listing as "Simulation Quality" -- some of those are a bit old and might fail one or two diehard tests. * Add NAG, missing, gave up! CDC 48-bit missing * Check out the bug fix to mrand48 that was made in glibc2, pr757 * Check out the following paper, On the anomaly of ran1() in Monte Carlo pricing of financial derivatives; Akira Tajima , Syoiti Ninomiya , and Shu Tezuka ; Winter simulation , 1996, Page 360, from ACM * The following papers have been published, I think we refer to them (or could do), Pierre L'Ecuyer, "Tables of Linear Congruential Generators of different size and good lattice structure", Mathematics of Computation, Vol 68, No 225, Jan 1999, p249-260 Pierre L'Ecuyer, "Tables of Maximally equidistributed combined LSFR generators", ibid, p261-270 * Look at this paper: I. Vattulainen, "Framework for testing random numbers in parallel calculations", Phys. Rev. E, 59, 6, June 1999, p7200 ---------------------------------------------------------------------- DONE x1. Improve the seeding for routines that use the LCG seed generator. It can only generate 130,000 different initial states. We should change it to provide 2^31 different initial states (this will also prevent the high bits being zero). DONE - we now use a 32-bit generator. x8. Get the macros from the faster MT19937 generator and use them. We need to make MT be the fastest of the simulation quality generators if it is the default. DONE. It didn't improve the speed on other platforms, so I just used the tricks which also worked on the pentium (e.g. changing mag[x&1] to x&1 ? mag[1] : mag[0]) gsl/rng/knuthran2002.c0000644000175000017500000001143013536674414013021 0ustar eddedd/* rng/knuthran2002.c * * Copyright (C) 2007 Brian Gough * Copyright (C) 2001, 2007 Brian Gough, Carlo Perassi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This generator is taken from * * Donald E. Knuth, The Art of Computer Programming, Volume 2, Section 3.6 * Third Edition, Addison-Wesley, * * The modifications introduced in the 9th printing (2002) are * included here; there's no backwards compatibility with the * original. [ see http://www-cs-faculty.stanford.edu/~knuth/taocp.html ] * */ #include #include #include #define BUFLEN 1009 /* length of the buffer aa[] */ #define KK 100 /* the long lag */ #define LL 37 /* the short lag */ #define MM (1L << 30) /* the modulus */ #define TT 70 /* guaranteed separation between streams */ #define is_odd(x) ((x) & 1) /* the units bit of x */ #define mod_diff(x, y) (((x) - (y)) & (MM - 1)) /* (x - y) mod MM */ static inline void ran_array (long int aa[], unsigned int n, long int ran_x[]); static inline unsigned long int ran_get (void *vstate); static double ran_get_double (void *vstate); static void ran_set (void *state, unsigned long int s); typedef struct { unsigned int i; long int aa[BUFLEN]; long int ran_x[KK]; /* the generator state */ } ran_state_t; static inline void ran_array (long int aa[], unsigned int n, long int ran_x[]) { unsigned int i; unsigned int j; for (j = 0; j < KK; j++) aa[j] = ran_x[j]; for (; j < n; j++) aa[j] = mod_diff (aa[j - KK], aa[j - LL]); for (i = 0; i < LL; i++, j++) ran_x[i] = mod_diff (aa[j - KK], aa[j - LL]); for (; i < KK; i++, j++) ran_x[i] = mod_diff (aa[j - KK], ran_x[i - LL]); } static inline unsigned long int ran_get (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; unsigned int i = state->i; unsigned long int v; if (i == 0) { /* fill buffer with new random numbers */ ran_array (state->aa, BUFLEN, state->ran_x); } v = state->aa[i]; state->i = (i + 1) % KK; return v; } static double ran_get_double (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; return ran_get (state) / 1073741824.0; /* RAND_MAX + 1 */ } static void ran_set (void *vstate, unsigned long int s) { ran_state_t *state = (ran_state_t *) vstate; long x[KK + KK - 1]; /* the preparation buffer */ register int j; register int t; register long ss; if (s == 0 ) s = 314159; /* default seed used by Knuth */ ss = (s + 2)&(MM-2); for (j = 0; j < KK; j++) { x[j] = ss; /* bootstrap the buffer */ ss <<= 1; if (ss >= MM) /* cyclic shift 29 bits */ ss -= MM - 2; } x[1]++; /* make x[1] (and only x[1]) odd */ ss = s & (MM - 1); t = TT - 1; while (t) { for (j = KK - 1; j > 0; j--) /* square */ { x[j + j] = x[j]; x[j + j - 1] = 0; } for (j = KK + KK - 2; j >= KK; j--) { x[j - (KK - LL)] = mod_diff (x[j - (KK - LL)], x[j]); x[j - KK] = mod_diff (x[j - KK], x[j]); } if (is_odd (ss)) { /* multiply by "z" */ for (j = KK; j > 0; j--) { x[j] = x[j - 1]; } x[0] = x[KK]; /* shift the buffer cyclically */ x[LL] = mod_diff (x[LL], x[KK]); } if (ss) ss >>= 1; else t--; } for (j = 0; j < LL; j++) state->ran_x[j + KK - LL] = x[j]; for (; j < KK; j++) state->ran_x[j - LL] = x[j]; for (j = 0; j< 10; j++) ran_array(x, KK+KK-1, state->ran_x); /* warm things up */ state->i = 0; return; } static const gsl_rng_type ran_type = { "knuthran2002", /* name */ 0x3fffffffUL, /* RAND_MAX = (2 ^ 30) - 1 */ 0, /* RAND_MIN */ sizeof (ran_state_t), &ran_set, &ran_get, &ran_get_double }; const gsl_rng_type *gsl_rng_knuthran2002 = &ran_type; gsl/rng/zuf.c0000644000175000017500000000671113536674414011475 0ustar eddedd/* rng/zuf.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* It is crucial that m == n-273 mod 607 at all times; For speed of execution, however, this is never enforced. Instead is is set in the initializer: note 607-273=334 Note also that the state.u[607] is not initialized */ static inline unsigned long int zuf_get (void *vstate); static double zuf_get_double (void *vstate); static void zuf_set (void *state, unsigned long int s); static const unsigned long int zuf_randmax = 16777216; /* 2^24 */ typedef struct { int n; unsigned long int u[607]; } zuf_state_t; /* The zufall package was implemented with float's, which is to say 24 bits of precision. Since I'm using long's instead, my RANDMAX reflects this. */ static inline unsigned long int zuf_get (void *vstate) { zuf_state_t *state = (zuf_state_t *) vstate; const int n = state->n; const int m = (n - 273 + 607) % 607; unsigned long int t = state->u[n] + state->u[m]; while (t > zuf_randmax) t -= zuf_randmax; state->u[n] = t; if (n == 606) { state->n = 0; } else { state->n = n + 1; } return t; } static double zuf_get_double (void *vstate) { return zuf_get (vstate) / 16777216.0 ; } static void zuf_set (void *vstate, unsigned long int s) { /* A very elaborate seeding procedure is provided with the zufall package; this is virtually a copy of that procedure */ /* Initialized data */ long int kl = 9373; long int ij = 1802; /* Local variables */ long int i, j, k, l, m; double x, y; long int ii, jj; zuf_state_t *state = (zuf_state_t *) vstate; state->n = 0; /* generates initial seed buffer by linear congruential */ /* method. Taken from Marsaglia, FSU report FSU-SCRI-87-50 */ /* variable seed should be 0 < seed <31328 */ if (s == 0) s = 1802; /* default seed is 1802 */ ij = s; i = ij / 177 % 177 + 2; j = ij % 177 + 2; k = kl / 169 % 178 + 1; l = kl % 169; for (ii = 0; ii < 607; ++ii) { x = 0.0; y = 0.5; /* 24 bits?? */ for (jj = 1; jj <= 24; ++jj) { m = i * j % 179 * k % 179; i = j; j = k; k = m; l = (l * 53 + 1) % 169; if (l * m % 64 >= 32) { x += y; } y *= 0.5; } state->u[ii] = (unsigned long int) (x * zuf_randmax); } } static const gsl_rng_type zuf_type = {"zuf", /* name */ 0x00ffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (zuf_state_t), &zuf_set, &zuf_get, &zuf_get_double}; const gsl_rng_type *gsl_rng_zuf = &zuf_type; gsl/rng/vax.c0000644000175000017500000000421213536674414011461 0ustar eddedd/* rng/vax.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is the old vax generator MTH$RANDOM. The sequence is, x_{n+1} = (a x_n + c) mod m with a = 69069, c = 1 and m = 2^32. The seed specifies the initial value, x_1. The theoretical value of x_{10001} is 3051034865. The period of this generator is 2^32. */ static inline unsigned long int vax_get (void *vstate); static double vax_get_double (void *vstate); static void vax_set (void *state, unsigned long int s); typedef struct { unsigned long int x; } vax_state_t; static inline unsigned long int vax_get (void *vstate) { vax_state_t *state = (vax_state_t *) vstate; state->x = (69069 * state->x + 1) & 0xffffffffUL; return state->x; } static double vax_get_double (void *vstate) { return vax_get (vstate) / 4294967296.0 ; } static void vax_set (void *vstate, unsigned long int s) { vax_state_t *state = (vax_state_t *) vstate; /* default seed is 0. The constant term c stops the series from collapsing to 0,0,0,0,0,... */ state->x = s; return; } static const gsl_rng_type vax_type = {"vax", /* name */ 0xffffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (vax_state_t), &vax_set, &vax_get, &vax_get_double}; const gsl_rng_type *gsl_rng_vax = &vax_type; gsl/rng/test.c0000644000175000017500000004255413536674414011655 0ustar eddedd/* rng/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include void rng_test (const gsl_rng_type * T, unsigned long int seed, unsigned int n, unsigned long int result); void rng_float_test (const gsl_rng_type * T); void generic_rng_test (const gsl_rng_type * T); void rng_state_test (const gsl_rng_type * T); void rng_parallel_state_test (const gsl_rng_type * T); void rng_read_write_test (const gsl_rng_type * T); int rng_max_test (gsl_rng * r, unsigned long int *kmax, unsigned long int ran_max) ; int rng_min_test (gsl_rng * r, unsigned long int *kmin, unsigned long int ran_min, unsigned long int ran_max) ; int rng_sum_test (gsl_rng * r, double *sigma); int rng_bin_test (gsl_rng * r, double *sigma); void rng_seed_test (const gsl_rng_type * T); #define N 10000 #define N2 200000 int main (void) { const gsl_rng_type ** rngs = gsl_rng_types_setup(); /* get all rng types */ const gsl_rng_type ** r ; gsl_ieee_env_setup (); gsl_rng_env_setup (); /* specific tests of known results for 10000 iterations with seed = 1 */ rng_test (gsl_rng_rand, 1, 10000, 1910041713); rng_test (gsl_rng_randu, 1, 10000, 1623524161); rng_test (gsl_rng_cmrg, 1, 10000, 719452880); rng_test (gsl_rng_minstd, 1, 10000, 1043618065); rng_test (gsl_rng_mrg, 1, 10000, 2064828650); rng_test (gsl_rng_taus, 1, 10000, 2733957125UL); rng_test (gsl_rng_taus2, 1, 10000, 2733957125UL); rng_test (gsl_rng_taus113, 1, 1000, 1925420673UL); rng_test (gsl_rng_transputer, 1, 10000, 1244127297UL); rng_test (gsl_rng_vax, 1, 10000, 3051034865UL); /* Borosh13 test value from PARI: (1812433253^10000)%(2^32) */ rng_test (gsl_rng_borosh13, 1, 10000, 2513433025UL); /* Fishman18 test value from PARI: (62089911^10000)%(2^31-1) */ rng_test (gsl_rng_fishman18, 1, 10000, 330402013UL); /* Fishman2x test value from PARI: ((48271^10000)%(2^31-1) - (40692^10000)%(2^31-249))%(2^31-1) */ rng_test (gsl_rng_fishman2x, 1, 10000, 540133597UL); /* Knuthran2 test value from PARI: { xn1=1; xn2=1; for (n=1,10000, xn = (271828183*xn1 - 314159269*xn2)%(2^31-1); xn2=xn1; xn1=xn; print(xn); ) } */ rng_test (gsl_rng_knuthran2, 1, 10000, 1084477620UL); /* Knuthran test value taken from p188 in Knuth Vol 2. 3rd Ed */ rng_test (gsl_rng_knuthran, 310952, 1009 * 2009 + 1, 461390032); /* Knuthran improved test value from Knuth's source */ rng_test (gsl_rng_knuthran2002, 310952, 1, 708622036); rng_test (gsl_rng_knuthran2002, 310952, 2, 1005450560); rng_test (gsl_rng_knuthran2002, 310952, 100 * 2009 + 1, 995235265); rng_test (gsl_rng_knuthran2002, 310952, 1009 * 2009 + 1, 704987132); /* Lecuyer21 test value from PARI: (40692^10000)%(2^31-249) */ rng_test (gsl_rng_lecuyer21, 1, 10000, 2006618587UL); /* Waterman14 test value from PARI: (1566083941^10000)%(2^32) */ rng_test (gsl_rng_waterman14, 1, 10000, 3776680385UL); /* specific tests of known results for 10000 iterations with seed = 6 */ /* Coveyou test value from PARI: x=6; for(n=1,10000,x=(x*(x+1))%(2^32);print(x);) */ rng_test (gsl_rng_coveyou, 6, 10000, 1416754246UL); /* Fishman20 test value from PARI: (6*48271^10000)%(2^31-1) */ rng_test (gsl_rng_fishman20, 6, 10000, 248127575UL); /* FIXME: the ranlux tests below were made by running the fortran code and getting the expected value from that. An analytic calculation would be preferable. */ rng_test (gsl_rng_ranlux, 314159265, 10000, 12077992); rng_test (gsl_rng_ranlux389, 314159265, 10000, 165942); rng_test (gsl_rng_ranlxs0, 1, 10000, 11904320); /* 0.709552764892578125 * ldexp(1.0,24) */ rng_test (gsl_rng_ranlxs1, 1, 10000, 8734328); /* 0.520606517791748047 * ldexp(1.0,24) */ rng_test (gsl_rng_ranlxs2, 1, 10000, 6843140); /* 0.407882928848266602 * ldexp(1.0,24) */ rng_test (gsl_rng_ranlxd1, 1, 10000, 1998227290UL); /* 0.465248546261094020 * ldexp(1.0,32) */ rng_test (gsl_rng_ranlxd2, 1, 10000, 3949287736UL); /* 0.919515205581550532 * ldexp(1.0,32) */ /* FIXME: the tests below were made by running the original code in the ../random directory and getting the expected value from that. An analytic calculation would be preferable. */ rng_test (gsl_rng_slatec, 1, 10000, 45776); rng_test (gsl_rng_uni, 1, 10000, 9214); rng_test (gsl_rng_uni32, 1, 10000, 1155229825); rng_test (gsl_rng_zuf, 1, 10000, 3970); /* The tests below were made by running the original code and getting the expected value from that. An analytic calculation would be preferable. */ rng_test (gsl_rng_r250, 1, 10000, 1100653588); rng_test (gsl_rng_mt19937, 4357, 1000, 1186927261); rng_test (gsl_rng_mt19937_1999, 4357, 1000, 1030650439); rng_test (gsl_rng_mt19937_1998, 4357, 1000, 1309179303); rng_test (gsl_rng_tt800, 0, 10000, 2856609219UL); rng_test (gsl_rng_ran0, 0, 10000, 1115320064); rng_test (gsl_rng_ran1, 0, 10000, 1491066076); rng_test (gsl_rng_ran2, 0, 10000, 1701364455); rng_test (gsl_rng_ran3, 0, 10000, 186340785); rng_test (gsl_rng_ranmar, 1, 10000, 14428370); rng_test (gsl_rng_rand48, 0, 10000, 0xDE095043UL); rng_test (gsl_rng_rand48, 1, 10000, 0xEDA54977UL); rng_test (gsl_rng_random_glibc2, 0, 10000, 1908609430); rng_test (gsl_rng_random8_glibc2, 0, 10000, 1910041713); rng_test (gsl_rng_random32_glibc2, 0, 10000, 1587395585); rng_test (gsl_rng_random64_glibc2, 0, 10000, 52848624); rng_test (gsl_rng_random128_glibc2, 0, 10000, 1908609430); rng_test (gsl_rng_random256_glibc2, 0, 10000, 179943260); rng_test (gsl_rng_random_bsd, 0, 10000, 1457025928); rng_test (gsl_rng_random8_bsd, 0, 10000, 1910041713); rng_test (gsl_rng_random32_bsd, 0, 10000, 1663114331); rng_test (gsl_rng_random64_bsd, 0, 10000, 864469165); rng_test (gsl_rng_random128_bsd, 0, 10000, 1457025928); rng_test (gsl_rng_random256_bsd, 0, 10000, 1216357476); rng_test (gsl_rng_random_libc5, 0, 10000, 428084942); rng_test (gsl_rng_random8_libc5, 0, 10000, 1910041713); rng_test (gsl_rng_random32_libc5, 0, 10000, 1967452027); rng_test (gsl_rng_random64_libc5, 0, 10000, 2106639801); rng_test (gsl_rng_random128_libc5, 0, 10000, 428084942); rng_test (gsl_rng_random256_libc5, 0, 10000, 116367984); rng_test (gsl_rng_ranf, 0, 10000, 2152890433UL); rng_test (gsl_rng_ranf, 2, 10000, 339327233); /* Test constant relationship between int and double functions */ for (r = rngs ; *r != 0; r++) rng_float_test (*r); /* Test save/restore functions */ for (r = rngs ; *r != 0; r++) rng_state_test (*r); for (r = rngs ; *r != 0; r++) rng_parallel_state_test (*r); for (r = rngs ; *r != 0; r++) rng_read_write_test (*r); /* generic statistical tests (these are just to make sure that we don't get any crazy results back from the generator, i.e. they aren't a test of the algorithm, just the implementation) */ for (r = rngs ; *r != 0; r++) generic_rng_test (*r); #ifdef TEST_SEEDS rng_seed_test (gsl_rng_mt19937); rng_seed_test (gsl_rng_ranlxs0); rng_seed_test (gsl_rng_ranlxs1); rng_seed_test (gsl_rng_ranlxs2); rng_seed_test (gsl_rng_ranlxd1); rng_seed_test (gsl_rng_ranlxd2); rng_seed_test (gsl_rng_ranlux); rng_seed_test (gsl_rng_ranlux389); rng_seed_test (gsl_rng_cmrg); rng_seed_test (gsl_rng_mrg); rng_seed_test (gsl_rng_taus); rng_seed_test (gsl_rng_taus2); rng_seed_test (gsl_rng_gfsr4); #endif exit (gsl_test_summary ()); } void rng_test (const gsl_rng_type * T, unsigned long int seed, unsigned int n, unsigned long int result) { gsl_rng *r = gsl_rng_alloc (T); unsigned int i; unsigned long int k = 0; int status; if (seed != 0) { gsl_rng_set (r, seed); } for (i = 0; i < n; i++) { k = gsl_rng_get (r); } status = (k != result); gsl_test (status, "%s, %u steps (%u observed vs %u expected)", gsl_rng_name (r), n, k, result); gsl_rng_free (r); } void rng_float_test (const gsl_rng_type * T) { gsl_rng *ri = gsl_rng_alloc (T); gsl_rng *rf = gsl_rng_alloc (T); double u, c ; unsigned int i; unsigned long int k = 0; int status = 0 ; do { k = gsl_rng_get (ri); u = gsl_rng_get (rf); } while (k == 0) ; c = k / u ; for (i = 0; i < N2; i++) { k = gsl_rng_get (ri); u = gsl_rng_get (rf); if (c*k != u) { status = 1 ; break ; } } gsl_test (status, "%s, ratio of int to double (%g observed vs %g expected)", gsl_rng_name (ri), c, k/u); gsl_rng_free (ri); gsl_rng_free (rf); } void rng_state_test (const gsl_rng_type * T) { unsigned long int test_a[N], test_b[N]; int i; gsl_rng *r = gsl_rng_alloc (T); gsl_rng *r_save = gsl_rng_alloc (T); for (i = 0; i < N; ++i) { gsl_rng_get (r); /* throw away N iterations */ } gsl_rng_memcpy (r_save, r); /* save the intermediate state */ for (i = 0; i < N; ++i) { test_a[i] = gsl_rng_get (r); } gsl_rng_memcpy (r, r_save); /* restore the intermediate state */ gsl_rng_free (r_save); for (i = 0; i < N; ++i) { test_b[i] = gsl_rng_get (r); } { int status = 0; for (i = 0; i < N; ++i) { status |= (test_b[i] != test_a[i]); } gsl_test (status, "%s, random number state consistency", gsl_rng_name (r)); } gsl_rng_free (r); } void rng_parallel_state_test (const gsl_rng_type * T) { unsigned long int test_a[N], test_b[N]; unsigned long int test_c[N], test_d[N]; double test_e[N], test_f[N]; int i; gsl_rng *r1 = gsl_rng_alloc (T); gsl_rng *r2 = gsl_rng_alloc (T); for (i = 0; i < N; ++i) { gsl_rng_get (r1); /* throw away N iterations */ } gsl_rng_memcpy (r2, r1); /* save the intermediate state */ for (i = 0; i < N; ++i) { /* check that there is no hidden state intermixed between r1 and r2 */ test_a[i] = gsl_rng_get (r1); test_b[i] = gsl_rng_get (r2); test_c[i] = gsl_rng_uniform_int (r1, 1234); test_d[i] = gsl_rng_uniform_int (r2, 1234); test_e[i] = gsl_rng_uniform (r1); test_f[i] = gsl_rng_uniform (r2); } { int status = 0; for (i = 0; i < N; ++i) { status |= (test_b[i] != test_a[i]); status |= (test_c[i] != test_d[i]); status |= (test_e[i] != test_f[i]); } gsl_test (status, "%s, parallel random number state consistency", gsl_rng_name (r1)); } gsl_rng_free (r1); gsl_rng_free (r2); } void rng_read_write_test (const gsl_rng_type * T) { unsigned long int test_a[N], test_b[N]; int i; gsl_rng *r = gsl_rng_alloc (T); for (i = 0; i < N; ++i) { gsl_rng_get (r); /* throw away N iterations */ } { /* save the state to a binary file */ FILE *f = fopen("test.dat", "wb"); gsl_rng_fwrite(f, r); fclose(f); } for (i = 0; i < N; ++i) { test_a[i] = gsl_rng_get (r); } { /* read the state from a binary file */ FILE *f = fopen("test.dat", "rb"); gsl_rng_fread(f, r); fclose(f); } for (i = 0; i < N; ++i) { test_b[i] = gsl_rng_get (r); } { int status = 0; for (i = 0; i < N; ++i) { status |= (test_b[i] != test_a[i]); } gsl_test (status, "%s, random number generator read and write", gsl_rng_name (r)); } gsl_rng_free (r); } void generic_rng_test (const gsl_rng_type * T) { gsl_rng *r = gsl_rng_alloc (T); const char *name = gsl_rng_name (r); unsigned long int kmax = 0, kmin = 1000; double sigma = 0; const unsigned long int ran_max = gsl_rng_max (r); const unsigned long int ran_min = gsl_rng_min (r); int status = rng_max_test (r, &kmax, ran_max); gsl_test (status, "%s, observed vs theoretical maximum (%lu vs %lu)", name, kmax, ran_max); status = rng_min_test (r, &kmin, ran_min, ran_max); gsl_test (status, "%s, observed vs theoretical minimum (%lu vs %lu)", name, kmin, ran_min); status = rng_sum_test (r, &sigma); gsl_test (status, "%s, sum test within acceptable sigma (observed %.2g sigma)", name, sigma); status = rng_bin_test (r, &sigma); gsl_test (status, "%s, bin test within acceptable chisq (observed %.2g sigma)", name, sigma); gsl_rng_set (r, 1); /* set seed to 1 */ status = rng_max_test (r, &kmax, ran_max); gsl_rng_set (r, 1); /* set seed to 1 */ status |= rng_min_test (r, &kmin, ran_min, ran_max); gsl_rng_set (r, 1); /* set seed to 1 */ status |= rng_sum_test (r, &sigma); gsl_test (status, "%s, max, min and sum tests for seed=1", name); gsl_rng_set (r, 12345); /* set seed to a "typical" value */ status = rng_max_test (r, &kmax, ran_max); gsl_rng_set (r, 12345); /* set seed to a "typical" value */ status |= rng_min_test (r, &kmin, ran_min, ran_max); gsl_rng_set (r, 12345); /* set seed to a "typical" value */ status |= rng_sum_test (r, &sigma); gsl_test (status, "%s, max, min and sum tests for non-default seeds", name); gsl_rng_free (r); } int rng_max_test (gsl_rng * r, unsigned long int *kmax, unsigned long int ran_max) { unsigned long int actual_uncovered; double expect_uncovered; int status; unsigned long int max = 0; int i; for (i = 0; i < N2; ++i) { unsigned long int k = gsl_rng_get (r); if (k > max) max = k; } *kmax = max; actual_uncovered = ran_max - max; expect_uncovered = (double) ran_max / (double) N2; status = (max > ran_max) || (actual_uncovered > 7 * expect_uncovered) ; return status; } int rng_min_test (gsl_rng * r, unsigned long int *kmin, unsigned long int ran_min, unsigned long int ran_max) { unsigned long int actual_uncovered; double expect_uncovered; int status; unsigned long int min = 1000000000UL; int i; for (i = 0; i < N2; ++i) { unsigned long int k = gsl_rng_get (r); if (k < min) min = k; } *kmin = min; actual_uncovered = min - ran_min; expect_uncovered = (double) ran_max / (double) N2; status = (min < ran_min) || (actual_uncovered > 7 * expect_uncovered); return status; } int rng_sum_test (gsl_rng * r, double *sigma) { double sum = 0; int i, status; for (i = 0; i < N2; ++i) { double x = gsl_rng_uniform (r) - 0.5; sum += x; } sum /= N2; /* expect the average to have a variance of 1/(12 n) */ *sigma = sum * sqrt (12.0 * N2); /* more than 3 sigma is an error (increased to 3.1 to avoid false alarms) */ status = (fabs (*sigma) > 3.1 || fabs(*sigma) < 0.003); if (status) { fprintf(stderr,"sum=%g, sigma=%g\n",sum,*sigma); } return status; } #define BINS 17 #define EXTRA 10 int rng_bin_test (gsl_rng * r, double *sigma) { int count[BINS+EXTRA]; double chisq = 0; int i, status; for (i = 0; i < BINS+EXTRA; i++) count[i] = 0 ; for (i = 0; i < N2; i++) { int j = gsl_rng_uniform_int (r, BINS); count[j]++ ; } chisq = 0 ; for (i = 0; i < BINS; i++) { double x = (double)N2/(double)BINS ; double d = (count[i] - x) ; chisq += (d*d) / x; } *sigma = sqrt(chisq/BINS) ; /* more than 3 sigma is an error */ status = (fabs (*sigma) > 3 || fabs(*sigma) < 0.003); for (i = BINS; i < BINS+EXTRA; i++) { if (count[i] != 0) { status = 1 ; gsl_test (status, "%s, wrote outside range in bin test " "(%d observed vs %d expected)", gsl_rng_name(r), i, BINS - 1); } } return status; } int rng_sanity_test (gsl_rng * r) { double sum = 0, sigma; int i, status = 0; for (i = 0; i < N2; ++i) { double x = gsl_rng_uniform (r); sum += x; if (x < 0.0 || x > 1.0) { fprintf(stderr,"x=%g out of range\n", x); return 1; } } sum /= N2; /* expect the average to have a variance of 1/(12 n) */ sigma = (sum - 0.5)* sqrt (12.0 * N2); /* more than 5 sigma is an error */ status = (fabs (sigma) > 5 || fabs(sigma) < 0.0001); if (status) { fprintf(stderr,"sum=%g, sigma=%g\n",sum,sigma); } return status; } void rng_seed_test (const gsl_rng_type * T) { gsl_rng *r = gsl_rng_alloc (T); const char *name = gsl_rng_name (r); unsigned long int i; int j; int status; for (i = 0xFFFFFFFFUL ; i > 0; i >>= 1) { for (j = 1; j >= -1 ; j--) { unsigned long int seed = i + j; if (j > 0 && seed < i) continue; gsl_rng_set (r, seed); status = rng_sanity_test (r); if (status) gsl_test (status, "%s, sanity tests for seed = %#lx", name, seed); } } } gsl/rng/file.c0000644000175000017500000000261513536674414011607 0ustar eddedd/* rng/file.c * * Copyright (C) 2003 Olaf Lenz * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include int gsl_rng_fread (FILE * stream, gsl_rng * r) { size_t n = r->type->size ; char * state = (char *)r->state; size_t items = fread (state, 1, n, stream); if (items != n) { GSL_ERROR ("fread failed", GSL_EFAILED); } return GSL_SUCCESS; } int gsl_rng_fwrite (FILE * stream, const gsl_rng * r) { size_t n = r->type->size ; char * state = (char *)r->state; size_t items = fwrite (state, 1, n, stream); if (items != n) { GSL_ERROR ("fwrite failed", GSL_EFAILED); } return GSL_SUCCESS; } gsl/rng/coveyou.c0000644000175000017500000000431213536674414012355 0ustar eddedd/* rng/coveyou.c * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This generator is taken from * * Donald E. Knuth * The Art of Computer Programming * Volume 2 * Third Edition * Addison-Wesley * Section 3.2.2 * * This implementation copyright (C) 2001 Carlo Perassi * and (C) 2003 Heiko Bauke. * Carlo Perassi reorganized the code to use the rng framework of GSL. */ #include #include #include #define MM 0xffffffffUL /* 2 ^ 32 - 1 */ static inline unsigned long int ran_get (void *vstate); static double ran_get_double (void *vstate); static void ran_set (void *state, unsigned long int s); typedef struct { unsigned long int x; } ran_state_t; static inline unsigned long int ran_get (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; state->x = (state->x * (state->x + 1)) & MM; return state->x; } static double ran_get_double (void *vstate) { ran_state_t *state = (ran_state_t *) vstate; return ran_get (state) / 4294967296.0; } static void ran_set (void *vstate, unsigned long int s) { ran_state_t *state = (ran_state_t *) vstate; unsigned long int diff = ((s % 4UL) - 2UL) % MM; if (diff) state->x = (s - diff) & MM; else state->x = s & MM; return; } static const gsl_rng_type ran_type = { "coveyou", /* name */ MM-1, /* RAND_MAX */ 2, /* RAND_MIN */ sizeof (ran_state_t), &ran_set, &ran_get, &ran_get_double }; const gsl_rng_type *gsl_rng_coveyou = &ran_type; gsl/rng/cmrg.c0000644000175000017500000001231013536674414011611 0ustar eddedd/* rng/cmrg.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is a combined multiple recursive generator. The sequence is, z_n = (x_n - y_n) mod m1 where the two underlying generators x and y are, x_n = (a_{1} x_{n-1} + a_{2} x_{n-2} + a_{3} x_{n-3}) mod m1 y_n = (b_{1} y_{n-1} + b_{2} y_{n-2} + b_{3} y_{n-3}) mod m2 with coefficients a11 ... a23, a_{1} = 0, a_{2} = 63308, a_{3} = -183326 b_{1} = 86098, b_{2} = 0, b_{3} = -539608 and moduli m1, m2, m1 = 2^31 - 1 = 2147483647 m2 = 2^31 - 2000169 = 2145483479 We initialize the generator with x_1 = s_1 MOD m1, x_2 = s_2 MOD m1, x_3 = s_3 MOD m1 y_1 = s_4 MOD m2, y_2 = s_5 MOD m2, y_3 = s_6 MOD m2 where s_n = (69069 * s_{n-1}) mod 2^32 and s_0 = s is the user-supplied seed. NOTE: According to the paper the initial values for x_n must lie in the range 0 <= x_n <= (m1 - 1) and the initial values for y_n must lie in the range 0 <= y_n <= (m2 - 1), with at least one non-zero value -- our seeding procedure satisfies these constraints. We then use 7 iterations of the generator to "warm up" the internal state. The theoretical value of z_{10008} is 719452880. The subscript 10008 means (1) seed the generator with s=1, (2) do the seven warm-up iterations that are part of the seeding process, (3) then do 10000 actual iterations. The period of this generator is about 2^205. From: P. L'Ecuyer, "Combined Multiple Recursive Random Number Generators," Operations Research, 44, 5 (1996), 816--822. This is available on the net from L'Ecuyer's home page, http://www.iro.umontreal.ca/~lecuyer/myftp/papers/combmrg.ps ftp://ftp.iro.umontreal.ca/pub/simulation/lecuyer/papers/combmrg.ps */ static inline unsigned long int cmrg_get (void *vstate); static double cmrg_get_double (void *vstate); static void cmrg_set (void *state, unsigned long int s); static const long int m1 = 2147483647, m2 = 2145483479; static const long int a2 = 63308, qa2 = 33921, ra2 = 12979; static const long int a3 = -183326, qa3 = 11714, ra3 = 2883; static const long int b1 = 86098, qb1 = 24919, rb1 = 7417; static const long int b3 = -539608, qb3 = 3976, rb3 = 2071; typedef struct { long int x1, x2, x3; /* first component */ long int y1, y2, y3; /* second component */ } cmrg_state_t; static inline unsigned long int cmrg_get (void *vstate) { cmrg_state_t *state = (cmrg_state_t *) vstate; /* Component 1 */ { long int h3 = state->x3 / qa3; long int p3 = -a3 * (state->x3 - h3 * qa3) - h3 * ra3; long int h2 = state->x2 / qa2; long int p2 = a2 * (state->x2 - h2 * qa2) - h2 * ra2; if (p3 < 0) p3 += m1; if (p2 < 0) p2 += m1; state->x3 = state->x2; state->x2 = state->x1; state->x1 = p2 - p3; if (state->x1 < 0) state->x1 += m1; } /* Component 2 */ { long int h3 = state->y3 / qb3; long int p3 = -b3 * (state->y3 - h3 * qb3) - h3 * rb3; long int h1 = state->y1 / qb1; long int p1 = b1 * (state->y1 - h1 * qb1) - h1 * rb1; if (p3 < 0) p3 += m2; if (p1 < 0) p1 += m2; state->y3 = state->y2; state->y2 = state->y1; state->y1 = p1 - p3; if (state->y1 < 0) state->y1 += m2; } if (state->x1 < state->y1) return (state->x1 - state->y1 + m1); else return (state->x1 - state->y1); } static double cmrg_get_double (void *vstate) { return cmrg_get (vstate) / 2147483647.0 ; } static void cmrg_set (void *vstate, unsigned long int s) { /* An entirely adhoc way of seeding! This does **not** come from L'Ecuyer et al */ cmrg_state_t *state = (cmrg_state_t *) vstate; if (s == 0) s = 1; /* default seed is 1 */ #define LCG(n) ((69069 * n) & 0xffffffffUL) s = LCG (s); state->x1 = s % m1; s = LCG (s); state->x2 = s % m1; s = LCG (s); state->x3 = s % m1; s = LCG (s); state->y1 = s % m2; s = LCG (s); state->y2 = s % m2; s = LCG (s); state->y3 = s % m2; /* "warm it up" */ cmrg_get (state); cmrg_get (state); cmrg_get (state); cmrg_get (state); cmrg_get (state); cmrg_get (state); cmrg_get (state); } static const gsl_rng_type cmrg_type = {"cmrg", /* name */ 2147483646, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (cmrg_state_t), &cmrg_set, &cmrg_get, &cmrg_get_double}; const gsl_rng_type *gsl_rng_cmrg = &cmrg_type; gsl/rng/rand48.c0000644000175000017500000000742713536674414011776 0ustar eddedd/* rng/rand48.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* This is the Unix rand48() generator. The generator returns the upper 32 bits from each term of the sequence, x_{n+1} = (a x_n + c) mod m using 48-bit unsigned arithmetic, with a = 0x5DEECE66D , c = 0xB and m = 2^48. The seed specifies the upper 32 bits of the initial value, x_1, with the lower 16 bits set to 0x330E. The theoretical value of x_{10001} is 244131582646046. The period of this generator is ? FIXME (probably around 2^48). */ static inline void rand48_advance (void *vstate); static unsigned long int rand48_get (void *vstate); static double rand48_get_double (void *vstate); static void rand48_set (void *state, unsigned long int s); static const unsigned short int a0 = 0xE66D ; static const unsigned short int a1 = 0xDEEC ; static const unsigned short int a2 = 0x0005 ; static const unsigned short int c0 = 0x000B ; typedef struct { unsigned short int x0, x1, x2; } rand48_state_t; static inline void rand48_advance (void *vstate) { rand48_state_t *state = (rand48_state_t *) vstate; /* work with unsigned long ints throughout to get correct integer promotions of any unsigned short ints */ const unsigned long int x0 = (unsigned long int) state->x0 ; const unsigned long int x1 = (unsigned long int) state->x1 ; const unsigned long int x2 = (unsigned long int) state->x2 ; unsigned long int a ; a = a0 * x0 + c0 ; state->x0 = (a & 0xFFFF) ; a >>= 16 ; /* although the next line may overflow we only need the top 16 bits in the following stage, so it does not matter */ a += a0 * x1 + a1 * x0 ; state->x1 = (a & 0xFFFF) ; a >>= 16 ; a += a0 * x2 + a1 * x1 + a2 * x0 ; state->x2 = (a & 0xFFFF) ; } static unsigned long int rand48_get (void *vstate) { unsigned long int x1, x2; rand48_state_t *state = (rand48_state_t *) vstate; rand48_advance (state) ; x2 = (unsigned long int) state->x2; x1 = (unsigned long int) state->x1; return (x2 << 16) + x1; } static double rand48_get_double (void * vstate) { rand48_state_t *state = (rand48_state_t *) vstate; rand48_advance (state) ; return (ldexp((double) state->x2, -16) + ldexp((double) state->x1, -32) + ldexp((double) state->x0, -48)) ; } static void rand48_set (void *vstate, unsigned long int s) { rand48_state_t *state = (rand48_state_t *) vstate; if (s == 0) /* default seed */ { state->x0 = 0x330E ; state->x1 = 0xABCD ; state->x2 = 0x1234 ; } else { state->x0 = 0x330E ; state->x1 = s & 0xFFFF ; state->x2 = (s >> 16) & 0xFFFF ; } return; } static const gsl_rng_type rand48_type = {"rand48", /* name */ 0xffffffffUL, /* RAND_MAX */ 0, /* RAND_MIN */ sizeof (rand48_state_t), &rand48_set, &rand48_get, &rand48_get_double }; const gsl_rng_type *gsl_rng_rand48 = &rand48_type; gsl/rng/transputer.c0000644000175000017500000000435413536674414013101 0ustar eddedd/* rng/transputer.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is the INMOS Transputer Development System generator. The sequence is, x_{n+1} = (a x_n) mod m with a = 1664525 and m = 2^32. The seed specifies the initial value, x_1. The theoretical value of x_{10001} is 1244127297. The period of this generator is 2^30. */ static inline unsigned long int transputer_get (void *vstate); static double transputer_get_double (void *vstate); static void transputer_set (void *state, unsigned long int s); typedef struct { unsigned long int x; } transputer_state_t; static unsigned long int transputer_get (void *vstate) { transputer_state_t *state = (transputer_state_t *) vstate; state->x = (1664525 * state->x) & 0xffffffffUL; return state->x; } static double transputer_get_double (void *vstate) { return transputer_get (vstate) / 4294967296.0 ; } static void transputer_set (void *vstate, unsigned long int s) { transputer_state_t *state = (transputer_state_t *) vstate; if (s == 0) s = 1 ; /* default seed is 1. */ state->x = s; return; } static const gsl_rng_type transputer_type = {"transputer", /* name */ 0xffffffffUL, /* RAND_MAX */ 1, /* RAND_MIN */ sizeof (transputer_state_t), &transputer_set, &transputer_get, &transputer_get_double}; const gsl_rng_type *gsl_rng_transputer = &transputer_type; gsl/rstat/0000755000175000017500000000000014057135461011060 5ustar eddeddgsl/rstat/Makefile.in0000664000175000017500000010607114057135461013134 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = rstat ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslrstat_la_LIBADD = am_libgslrstat_la_OBJECTS = rstat.lo rquantile.lo libgslrstat_la_OBJECTS = $(am_libgslrstat_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslrstat.la ../statistics/libgslstatistics.la \ ../sort/libgslsort.la ../ieee-utils/libgslieeeutils.la \ ../randist/libgslrandist.la ../rng/libgslrng.la \ ../specfunc/libgslspecfunc.la ../complex/libgslcomplex.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la ../vector/libgslvector.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/rquantile.Plo ./$(DEPDIR)/rstat.Plo \ ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslrstat_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslrstat_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslrstat.la pkginclude_HEADERS = gsl_rstat.h AM_CPPFLAGS = -I$(top_srcdir) libgslrstat_la_SOURCES = rstat.c rquantile.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslrstat.la ../statistics/libgslstatistics.la ../sort/libgslsort.la ../ieee-utils/libgslieeeutils.la ../randist/libgslrandist.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../complex/libgslcomplex.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../vector/libgslvector.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu rstat/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu rstat/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslrstat.la: $(libgslrstat_la_OBJECTS) $(libgslrstat_la_DEPENDENCIES) $(EXTRA_libgslrstat_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslrstat_la_OBJECTS) $(libgslrstat_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rquantile.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rstat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/rquantile.Plo -rm -f ./$(DEPDIR)/rstat.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/rquantile.Plo -rm -f ./$(DEPDIR)/rstat.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/rstat/rstat.c0000644000175000017500000001105713536674414012374 0ustar eddedd/* rstat/rstat.c * * Copyright (C) 2015 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include gsl_rstat_workspace * gsl_rstat_alloc(void) { gsl_rstat_workspace *w; w = calloc(1, sizeof(gsl_rstat_workspace)); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->median_workspace_p = gsl_rstat_quantile_alloc(0.5); if (w->median_workspace_p == 0) { GSL_ERROR_NULL ("failed to allocate space for median workspace", GSL_ENOMEM); } gsl_rstat_reset(w); return w; } /* gsl_rstat_alloc() */ void gsl_rstat_free(gsl_rstat_workspace *w) { if (w->median_workspace_p) gsl_rstat_quantile_free(w->median_workspace_p); free(w); } /* gsl_rstat_free() */ size_t gsl_rstat_n(const gsl_rstat_workspace *w) { return w->n; } /* gsl_rstat_n() */ /* add a data point to the running totals */ int gsl_rstat_add(const double x, gsl_rstat_workspace *w) { double delta = x - w->mean; double delta_n, delta_nsq, term1, n; /* update min and max */ if (w->n == 0) { w->min = x; w->max = x; } else { if (x < w->min) w->min = x; if (x > w->max) w->max = x; } /* update mean and variance */ n = (double) ++(w->n); delta_n = delta / n; delta_nsq = delta_n * delta_n; term1 = delta * delta_n * (n - 1.0); w->mean += delta_n; w->M4 += term1 * delta_nsq * (n * n - 3.0 * n + 3.0) + 6.0 * delta_nsq * w->M2 - 4.0 * delta_n * w->M3; w->M3 += term1 * delta_n * (n - 2.0) - 3.0 * delta_n * w->M2; w->M2 += term1; /* update median */ gsl_rstat_quantile_add(x, w->median_workspace_p); return GSL_SUCCESS; } /* gsl_rstat_add() */ double gsl_rstat_min(const gsl_rstat_workspace *w) { return w->min; } /* gsl_rstat_min() */ double gsl_rstat_max(const gsl_rstat_workspace *w) { return w->max; } /* gsl_rstat_max() */ double gsl_rstat_mean(const gsl_rstat_workspace *w) { return w->mean; } /* gsl_rstat_mean() */ double gsl_rstat_variance(const gsl_rstat_workspace *w) { if (w->n > 1) { double n = (double) w->n; return (w->M2 / (n - 1.0)); } else return 0.0; } /* gsl_rstat_variance() */ double gsl_rstat_sd(const gsl_rstat_workspace *w) { double var = gsl_rstat_variance(w); return (sqrt(var)); } /* gsl_rstat_sd() */ double gsl_rstat_rms(const gsl_rstat_workspace *w) { double rms = 0.0; if (w->n > 0) { double mean = gsl_rstat_mean(w); double sigma = gsl_rstat_sd(w); double n = (double) w->n; double a = sqrt((n - 1.0) / n); rms = gsl_hypot(mean, a * sigma); } return rms; } /* standard deviation of the mean: sigma / sqrt(n) */ double gsl_rstat_sd_mean(const gsl_rstat_workspace *w) { if (w->n > 0) { double sd = gsl_rstat_sd(w); return (sd / sqrt((double) w->n)); } else return 0.0; } /* gsl_rstat_sd_mean() */ double gsl_rstat_median(gsl_rstat_workspace *w) { return gsl_rstat_quantile_get(w->median_workspace_p); } double gsl_rstat_skew(const gsl_rstat_workspace *w) { if (w->n > 0) { double n = (double) w->n; double fac = pow(n - 1.0, 1.5) / n; return ((fac * w->M3) / pow(w->M2, 1.5)); } else return 0.0; } /* gsl_rstat_skew() */ double gsl_rstat_kurtosis(const gsl_rstat_workspace *w) { if (w->n > 0) { double n = (double) w->n; double fac = ((n - 1.0) / n) * (n - 1.0); return ((fac * w->M4) / (w->M2 * w->M2) - 3.0); } else return 0.0; } /* gsl_rstat_kurtosis() */ int gsl_rstat_reset(gsl_rstat_workspace *w) { int status; w->min = 0.0; w->max = 0.0; w->mean = 0.0; w->M2 = 0.0; w->M3 = 0.0; w->M4 = 0.0; w->n = 0; status = gsl_rstat_quantile_reset(w->median_workspace_p); return status; } /* gsl_rstat_reset() */ gsl/rstat/rquantile.c0000664000175000017500000001221414057135461013232 0ustar eddedd/* rstat/rquantile.c * * Copyright (C) 2015, 2016, 2017, 2018, 2019, 2020, 2021 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include /* * Running quantile calculation based on the paper * * [1] R. Jain and I. Chlamtac, "The P^2 algorithm for dynamic * calculation of quantiles and histograms without storing * observations", Communications of the ACM, October 1985 */ static double calc_psq(const double qp1, const double q, const double qm1, const double d, const double np1, const double n, const double nm1); gsl_rstat_quantile_workspace * gsl_rstat_quantile_alloc(const double p) { gsl_rstat_quantile_workspace *w; w = calloc(1, sizeof(gsl_rstat_quantile_workspace)); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->p = p; gsl_rstat_quantile_reset(w); return w; } /* gsl_rstat_quantile_alloc() */ void gsl_rstat_quantile_free(gsl_rstat_quantile_workspace *w) { free(w); } /* gsl_rstat_quantile_free() */ int gsl_rstat_quantile_reset(gsl_rstat_quantile_workspace *w) { const double p = w->p; size_t i; /* initialize positions n */ for (i = 0; i < 5; ++i) w->npos[i] = i + 1; /* initialize n' */ w->np[0] = 1.0; w->np[1] = 1.0 + 2.0 * p; w->np[2] = 1.0 + 4.0 * p; w->np[3] = 3.0 + 2.0 * p; w->np[4] = 5.0; /* initialize dn' */ w->dnp[0] = 0.0; w->dnp[1] = 0.5 * p; w->dnp[2] = p; w->dnp[3] = 0.5 * (1.0 + p); w->dnp[4] = 1.0; w->n = 0; return GSL_SUCCESS; } int gsl_rstat_quantile_add(const double x, gsl_rstat_quantile_workspace *w) { if (w->n < 5) { w->q[w->n] = x; } else { int i; int k = -1; if (w->n == 5) { /* initialization: sort the first five heights */ gsl_sort(w->q, 1, w->n); } /* step B1: find k such that q_k <= x < q_{k+1} */ if (x < w->q[0]) { w->q[0] = x; k = 0; } else if (x >= w->q[4]) { w->q[4] = x; k = 3; } else { for (i = 0; i <= 3; ++i) { if (w->q[i] <= x && x < w->q[i + 1]) { k = i; break; } } } if (k < 0) { /* we could get here if x is nan */ GSL_ERROR ("invalid input argument x", GSL_EINVAL); } /* step B2(a): update n_i */ for (i = k + 1; i <= 4; ++i) ++(w->npos[i]); /* step B2(b): update n_i' */ for (i = 0; i < 5; ++i) w->np[i] += w->dnp[i]; /* step B3: update heights */ for (i = 1; i <= 3; ++i) { double ni = (double) w->npos[i]; double d = w->np[i] - ni; if ((d >= 1.0 && (w->npos[i + 1] - w->npos[i] > 1)) || (d <= -1.0 && (w->npos[i - 1] - w->npos[i] < -1))) { int dsign = (d > 0.0) ? 1 : -1; double qp1 = w->q[i + 1]; double qi = w->q[i]; double qm1 = w->q[i - 1]; double np1 = (double) w->npos[i + 1]; double nm1 = (double) w->npos[i - 1]; double qp = calc_psq(qp1, qi, qm1, (double) dsign, np1, ni, nm1); if (qm1 < qp && qp < qp1) w->q[i] = qp; else { /* use linear formula */ w->q[i] += dsign * (w->q[i + dsign] - qi) / ((double) w->npos[i + dsign] - ni); } w->npos[i] += dsign; } } } ++(w->n); return GSL_SUCCESS; } /* gsl_rstat_quantile_add() */ double gsl_rstat_quantile_get(gsl_rstat_quantile_workspace *w) { if (w->n > 5) { return w->q[2]; } else { /* not yet initialized */ gsl_sort(w->q, 1, w->n); return gsl_stats_quantile_from_sorted_data(w->q, 1, w->n, w->p); } } /* gsl_rstat_quantile_get() */ static double calc_psq(const double qp1, const double q, const double qm1, const double d, const double np1, const double n, const double nm1) { double outer = d / (np1 - nm1); double inner_left = (n - nm1 + d) * (qp1 - q) / (np1 - n); double inner_right = (np1 - n - d) * (q - qm1) / (n - nm1); return q + outer * (inner_left + inner_right); } /* calc_psq() */ gsl/rstat/Makefile.am0000644000175000017500000000105113536674414013120 0ustar eddeddnoinst_LTLIBRARIES = libgslrstat.la pkginclude_HEADERS = gsl_rstat.h AM_CPPFLAGS = -I$(top_srcdir) libgslrstat_la_SOURCES = rstat.c rquantile.c check_PROGRAMS = test TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslrstat.la ../statistics/libgslstatistics.la ../sort/libgslsort.la ../ieee-utils/libgslieeeutils.la ../randist/libgslrandist.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../complex/libgslcomplex.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../vector/libgslvector.la gsl/rstat/gsl_rstat.h0000664000175000017500000000554514057135461013246 0ustar eddedd/* rstat/gsl_rstat.h * * Copyright (C) 2015 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_RSTAT_H__ #define __GSL_RSTAT_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { double p; /* p-quantile */ double q[5]; /* heights q_i */ int npos[5]; /* positions n_i */ double np[5]; /* desired positions n_i' */ double dnp[5]; /* increments dn_i' */ size_t n; /* number of data added */ } gsl_rstat_quantile_workspace; gsl_rstat_quantile_workspace *gsl_rstat_quantile_alloc(const double p); void gsl_rstat_quantile_free(gsl_rstat_quantile_workspace *w); int gsl_rstat_quantile_reset(gsl_rstat_quantile_workspace *w); int gsl_rstat_quantile_add(const double x, gsl_rstat_quantile_workspace *w); double gsl_rstat_quantile_get(gsl_rstat_quantile_workspace *w); typedef struct { double min; /* minimum value added */ double max; /* maximum value added */ double mean; /* current mean */ double M2; /* M_k = sum_{i=1..n} [ x_i - mean_n ]^k */ double M3; double M4; size_t n; /* number of data points added */ gsl_rstat_quantile_workspace *median_workspace_p; /* median workspace */ } gsl_rstat_workspace; gsl_rstat_workspace *gsl_rstat_alloc(void); void gsl_rstat_free(gsl_rstat_workspace *w); size_t gsl_rstat_n(const gsl_rstat_workspace *w); int gsl_rstat_add(const double x, gsl_rstat_workspace *w); double gsl_rstat_min(const gsl_rstat_workspace *w); double gsl_rstat_max(const gsl_rstat_workspace *w); double gsl_rstat_mean(const gsl_rstat_workspace *w); double gsl_rstat_variance(const gsl_rstat_workspace *w); double gsl_rstat_sd(const gsl_rstat_workspace *w); double gsl_rstat_rms(const gsl_rstat_workspace *w); double gsl_rstat_sd_mean(const gsl_rstat_workspace *w); double gsl_rstat_median(gsl_rstat_workspace *w); double gsl_rstat_skew(const gsl_rstat_workspace *w); double gsl_rstat_kurtosis(const gsl_rstat_workspace *w); int gsl_rstat_reset(gsl_rstat_workspace *w); __END_DECLS #endif /* __GSL_RSTAT_H__ */ gsl/rstat/test.c0000664000175000017500000001763014057135461012214 0ustar eddedd/* rstat/test.c * * Copyright (C) 2015, 2016, 2017, 2018, 2019, 2020, 2021 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include int random_data(const size_t n, double data[], gsl_rng *r) { size_t i; for (i = 0; i < n; ++i) data[i] = 2.0 * gsl_rng_uniform(r) - 1.0; return 0; } void test_basic(const size_t n, const double data[], const double tol, const char * desc) { gsl_rstat_workspace *rstat_workspace_p = gsl_rstat_alloc(); const double expected_mean = gsl_stats_mean(data, 1, n); const double expected_skew = gsl_stats_skew(data, 1, n); const double expected_kurtosis = gsl_stats_kurtosis(data, 1, n); double expected_rms = 0.0; double mean, var, sd, sd_mean, rms, skew, kurtosis; size_t i, num; int status; /* compute expected rms */ for (i = 0; i < n; ++i) expected_rms += data[i] * data[i]; expected_rms = sqrt(expected_rms / n); /* add data to rstat workspace */ for (i = 0; i < n; ++i) gsl_rstat_add(data[i], rstat_workspace_p); mean = gsl_rstat_mean(rstat_workspace_p); rms = gsl_rstat_rms(rstat_workspace_p); skew = gsl_rstat_skew(rstat_workspace_p); kurtosis = gsl_rstat_kurtosis(rstat_workspace_p); num = gsl_rstat_n(rstat_workspace_p); gsl_test_int(num, n, "%s n n=%zu", desc, n); gsl_test_rel(mean, expected_mean, tol, "%s mean n=%zu", desc, n); gsl_test_rel(rms, expected_rms, tol, "%s rms n=%zu", desc, n); gsl_test_rel(skew, expected_skew, tol, "%s skew n=%zu", desc, n); gsl_test_rel(kurtosis, expected_kurtosis, tol, "%s kurtosis n=%zu", desc, n); if (n > 1) { const double expected_var = gsl_stats_variance(data, 1, n); const double expected_sd = gsl_stats_sd(data, 1, n); const double expected_sd_mean = expected_sd / sqrt((double) n); var = gsl_rstat_variance(rstat_workspace_p); sd = gsl_rstat_sd(rstat_workspace_p); sd_mean = gsl_rstat_sd_mean(rstat_workspace_p); gsl_test_rel(var, expected_var, tol, "%s variance n=%zu", desc, n); gsl_test_rel(sd, expected_sd, tol, "%s stddev n=%zu", desc, n); gsl_test_rel(sd_mean, expected_sd_mean, tol, "%s stddev_mean n=%zu", desc, n); } if (n <= 5) { /* median should be exact for n <= 5 */ double * data_copy = malloc(n * sizeof(double)); double expected_median, median; memcpy(data_copy, data, n * sizeof(double)); expected_median = gsl_stats_median(data_copy, 1, n); median = gsl_rstat_median(rstat_workspace_p); gsl_test_rel(median, expected_median, tol, "%s median n=%zu", desc, n); free(data_copy); } status = gsl_rstat_reset(rstat_workspace_p); gsl_test_int(status, GSL_SUCCESS, "%s: rstat returned success", desc); num = gsl_rstat_n(rstat_workspace_p); gsl_test_int(num, 0, "n n=%zu" , n); gsl_rstat_free(rstat_workspace_p); } void test_quantile(const double p, const double data[], const size_t n, const double expected, const double tol, const char *desc) { gsl_rstat_quantile_workspace *w = gsl_rstat_quantile_alloc(p); double result; size_t i; for (i = 0; i < n; ++i) gsl_rstat_quantile_add(data[i], w); result = gsl_rstat_quantile_get(w); if (fabs(expected) < 1.0e-4) gsl_test_abs(result, expected, tol, "%s p=%g", desc, p); else gsl_test_rel(result, expected, tol, "%s p=%g", desc, p); gsl_rstat_quantile_free(w); } int main() { gsl_rng *r = gsl_rng_alloc(gsl_rng_default); const double tol1 = 1.0e-8; const double tol2 = 1.0e-3; gsl_ieee_env_setup(); { const size_t N = 2000000; double *data = malloc(N * sizeof(double)); double data2[5]; size_t i, j; char buf[64]; /* test1: test on small datasets n <= 5 (median will be exact in this case) */ for (i = 0; i < 100; ++i) { random_data(5, data2, r); for (j = 1; j <= 5; ++j) { sprintf(buf, "test1 j=%zu", j); test_basic(j, data2, tol1, buf); } } /* test2: test on large datasets */ random_data(N, data, r); for (i = 1; i <= 10; ++i) test_basic(i, data, tol1, "test2"); test_basic(100, data, tol1, "test2"); test_basic(1000, data, tol1, "test2"); test_basic(10000, data, tol1, "test2"); test_basic(50000, data, tol1, "test2"); test_basic(80000, data, tol1, "test2"); test_basic(1500000, data, tol1, "test2"); test_basic(2000000, data, tol1, "test2"); /* test3: add large constant */ for (i = 0; i < 5; ++i) data2[i] += 1.0e9; test_basic(5, data2, 1.0e-6, "test3"); free(data); } { /* dataset from Jain and Chlamtac paper */ const size_t n_jain = 20; const double data_jain[] = { 0.02, 0.15, 0.74, 3.39, 0.83, 22.37, 10.15, 15.43, 38.62, 15.92, 34.60, 10.28, 1.47, 0.40, 0.05, 11.39, 0.27, 0.42, 0.09, 11.37 }; double expected_jain = 4.44063435326; test_quantile(0.5, data_jain, n_jain, expected_jain, tol1, "jain"); } { size_t n = 1000000; double *data = malloc(n * sizeof(double)); double *sorted_data = malloc(n * sizeof(double)); gsl_rstat_workspace *rstat_workspace_p = gsl_rstat_alloc(); double p; size_t i; for (i = 0; i < n; ++i) { data[i] = gsl_ran_gaussian_tail(r, 1.3, 1.0); gsl_rstat_add(data[i], rstat_workspace_p); } memcpy(sorted_data, data, n * sizeof(double)); gsl_sort(sorted_data, 1, n); /* test quantile calculation */ for (p = 0.1; p <= 0.9; p += 0.1) { double expected = gsl_stats_quantile_from_sorted_data(sorted_data, 1, n, p); test_quantile(p, data, n, expected, tol2, "gauss"); } /* test mean, variance */ { const double expected_mean = gsl_stats_mean(data, 1, n); const double expected_var = gsl_stats_variance(data, 1, n); const double expected_sd = gsl_stats_sd(data, 1, n); const double expected_skew = gsl_stats_skew(data, 1, n); const double expected_kurtosis = gsl_stats_kurtosis(data, 1, n); const double expected_median = gsl_stats_quantile_from_sorted_data(sorted_data, 1, n, 0.5); const double mean = gsl_rstat_mean(rstat_workspace_p); const double var = gsl_rstat_variance(rstat_workspace_p); const double sd = gsl_rstat_sd(rstat_workspace_p); const double skew = gsl_rstat_skew(rstat_workspace_p); const double kurtosis = gsl_rstat_kurtosis(rstat_workspace_p); const double median = gsl_rstat_median(rstat_workspace_p); gsl_test_rel(mean, expected_mean, tol1, "mean"); gsl_test_rel(var, expected_var, tol1, "variance"); gsl_test_rel(sd, expected_sd, tol1, "stddev"); gsl_test_rel(skew, expected_skew, tol1, "skew"); gsl_test_rel(kurtosis, expected_kurtosis, tol1, "kurtosis"); gsl_test_abs(median, expected_median, tol2, "median"); } free(data); free(sorted_data); gsl_rstat_free(rstat_workspace_p); } gsl_rng_free(r); exit (gsl_test_summary()); } gsl/compile0000775000175000017500000001635014057135461011310 0ustar eddedd#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2020 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gsl/ChangeLog0000644000175000017500000007432613536674414011520 0ustar eddedd2012-10-25 Rhys Ulerich * templates_on.h: undef complex for MSVC Thank you to Victor Zverovich for reporting the problem and providing the patch 2012-06-04 Rhys Ulerich * cdf/beta.c: Update FSF address * cdf/betainv.c: Update FSF address * cdf/chisq.c: Update FSF address * cdf/chisqinv.c: Update FSF address * cdf/fdist.c: Update FSF address * cdf/fdistinv.c: Update FSF address * cdf/gamma.c: Update FSF address * cdf/gammainv.c: Update FSF address * cdf/gauss.c: Update FSF address * cdf/gaussinv.c: Update FSF address * cdf/geometric.c: Update FSF address * cdf/gsl_cdf.h: Update FSF address * cdf/hypergeometric.c: Update FSF address * cdf/nbinomial.c: Update FSF address * cdf/poisson.c: Update FSF address * cdf/tdist.c: Update FSF address * cdf/tdistinv.c: Update FSF address * cdf/test.c: Update FSF address * contrib/wigner.c: Update FSF address * contrib/wigner.h: Update FSF address * histogram/calloc_range.c: Update FSF address * histogram/calloc_range2d.c: Update FSF address * histogram/copy.c: Update FSF address * histogram/copy2d.c: Update FSF address * histogram/maxval.c: Update FSF address * histogram/maxval2d.c: Update FSF address * histogram/oper.c: Update FSF address * histogram/oper2d.c: Update FSF address * histogram/stat.c: Update FSF address * histogram/stat2d.c: Update FSF address * mdate-sh: Update FSF address * randist/discrete.c: Update FSF address * randist/gausszig.c: Update FSF address * rng/gfsr4.c: Update FSF address * rng/mt.c: Update FSF address * utils/getopt.c: Update FSF address * utils/getopt.h: Update FSF address * utils/getopt1.c: Update FSF address * utils/strerror.c: Update FSF address * utils/system.h: Update FSF address * utils/xmalloc.c: Update FSF address * utils/xstrdup.c: Update FSF address 2011-12-01 Rhys Ulerich * doc/integration.texi: Clarify that integration workspaces may be reused multiple times following discussion on gsl-help mailing list. Documentation ambiguity raised by Denes Molnar. 2011-04-13 Brian Gough * gsl_nan.h (GSL_NEGZERO): define negative zero as explicitly floating point, same for positive zero. 2011-04-01 Rhys Ulerich * doc/bspline.texi: Correct valid index range for Greville abscissae 2011-01-31 Peter Johansson * gsl.pc.in (GSL_CBLAS_LIB): allow user to choose cblas via pkg-config 2010-08-06 Brian Gough * ode-initval2: added Tuomo Keskitalo's new ode branch with a gsl_odeiv2 prefix which is intended to be the new default. Will retain gsl_odeiv for binary compatibility but old interface will be deprecated. 2010-05-25 Peter Johansson * configure.ac: added variable GSL_LIBM from macro AC_CHECK_LIBM * Makefile.am: added GSL_LIBM in edit substitution * gsl-config.in: using variable $GSL_LIBM rather than hard-coded -libm * gsl.pc.in: using variable $GSL_LIBM rather than hard-coded -libm 2010-04-24 Brian Gough * configure.ac: added macro for substituting isfinite by gsl_finite when needed. 2010-04-10 Giuseppe Scrivano * utils/memcpy.c (memcpy): Use the standand method signature. * utils/memmove.c (memmove): Likewise. 2010-01-18 Brian Gough * gsl_version.h.in, configure.ac: added GSL_MAJOR_VERSION and GSL_MINOR_VERSION macros 2009-07-09 Brian Gough * configure.ac: added RETURN_IF_NULL macro to handle null argument in free() type functions. 2009-05-09 Brian Gough * configure.ac: improve tests for C99 inline, and don't test when inline is not available * gsl_inline.h: added test for HAVE_C99_INLINE 2009-04-10 Brian Gough * Makefile.am: generate gsl-config gsl.pc from Makefile instead of configure, to allow make install prefix=... 2008-09-26 Brian Gough * configure.ac: handle test for SSE in cross-compilation (fall back to checking if the ldmxcsr instruction compiles) 2008-07-03 Brian Gough * Makefile.am: added gsl_inline.h and build.h * gsl_mode.h gsl_pow_int.h: use new inline declarations * gsl_minmax.h: new header file for minmax functions, use new inline declarations * gsl_math.h: moved minmax functions to separate header file * configure.ac: test for C99 inline as well * build.h gsl_inline.h: added new header to handle GNU-style and C99 inlines 2008-03-17 Brian Gough * configure.ac: remove hack to disable search for Fortran, Java, C++ required with earlier versions of autoconf 2007-09-01 Brian Gough * gsl.m4: changed default name to AX_PATH_GSL 2007-08-22 Brian Gough * configure.ac: started moving definitions out of acconfig.h (deprecated) 2007-07-30 Brian Gough * configure.ac: check ieeefp.h for isfinite 2007-04-23 Brian Gough * acconfig.h (finite): don't redefine finite in terms of isfinite, which causes problems with system headers, use gsl_finite instead. 2007-04-17 Brian Gough * configure.ac: use an actual floating point number instead of an integer for testing long double I/O. 2007-01-09 Brian Gough * gsl_math.h (M_PI_4): corrected typo in higher digits of M_PI_4 (at ~1e-20) 2006-11-02 Brian Gough * templates_on.h templates_off.h: added UNSIGNED definition for detecting types without negative values 2006-02-15 Brian Gough * configure.ac: restrict darwin IEEE detection to powerpc, because new x86 macs are different. * removed automatic addition of compilation flags on alpha, these should be specified on the command-line through CFLAGS. 2006-01-07 Brian Gough * templates_on.h: added an FP=1 definition for the floating point types, FP is undefined for integer types. 2005-08-05 Brian Gough * gsl/Makefile.am: need to remove makefile with later versions of automake 2005-04-05 Brian Gough * configure.ac: added ieeefp.h test for solaris 2005-01-13 Brian Gough * configure.ac: added case for 86_64 in IEEE arithmetic interface detection 2004-10-26 Brian Gough * test_gsl_histogram.sh: trim \r from test output for compatibility with Cygwin. 2004-07-29 Brian Gough * modified all makefiles to use TESTS=$(check_programs) to get correct EXEEXT behavior 2004-07-23 Brian Gough * added wavelet/ directory 2004-05-28 Brian Gough * configure.ac: ran configure script through Autoconf's autoupdate to use latest macro names 2004-05-17 Brian Gough * gsl.m4: fix m4 quoting of first argument to AC_DEFUN 2004-03-17 Brian Gough * gsl/Makefile.am (header-links): use test -r instead of test -e (to avoid problem on Solaris as described in autoconf documentation) 2003-12-20 Brian Gough * configure.ac: define _GNU_SOURCE when looking for fenv.h 2003-06-17 Brian Gough * configure.ac: converted configure.in to autoconf 2.5x, involved extensive renaming macros of HAVE_... to HAVE_DECL_.. and changing usage from #ifdef HAVE to #if HAVE 2003-06-16 Brian Gough * gsl/Makefile.am (header-links): added a test for the existing file to avoid spurious error messages when making the symlinks 2003-06-12 Brian Gough * configure.in: Tidying up, removed old test for bug in gcc 2.95 on PPC, removed OS/2 warning, removed references to clock function since benchmark programs are not shipped 2003-03-06 Brian Gough * gsl_types.h: changed from internal macro _DLL to GSL_DLL 2003-02-09 Brian Gough * configure.in: added [] quotes in AC_TRY_COMPILE to protect nested macros 2002-11-24 Brian Gough * configure.in: check for presence of non-ansi functions in header files before running AC_CHECK_FUNCS to look in libraries, to support compilation with -ansi. Fri Sep 6 15:00:40 2002 Brian Gough * acconfig.h (GSL_RANGE_CHECK_OFF): turned range checking off in acconfig.h as it overwrites config.h.in Wed Aug 7 22:34:36 2002 Brian Gough * config.h.in: fixed RANGE_CHECK_ON to GSL_RANGE_CHECK_ON Sun Jul 14 12:48:50 2002 Brian Gough * INSTALL: merged the MACHINES file into the installation notes. Fri Jun 14 22:09:52 2002 Brian Gough * gsl_types.h: define GSL_VAR macro as ANSI C 'export' or '__declspec(dllexport/dllimport)' depending on platform * changed 'export' to GSL_VAR macro throughout to make it easier to build nonstandard shared libraries such as DLLs Sun May 19 22:24:00 2002 Brian Gough * configure.in: changed AM_PROG_LIBTOOL to AC_PROG_LIBTOOL, use AC_SEARCH_LIBS to find math library Sat May 11 22:27:52 2002 Brian Gough * configure.in (ac_cv_func_printf_longdouble): fixed ieee comparisons test so it actually works (ac_cv_c_ieee_comparisons): added a test for denormalized values Fri Apr 26 19:53:31 2002 Brian Gough * Makefile.am (EXTRA_DIST): removed KNOWN-PROBLEMS Sun Feb 10 21:28:29 2002 Brian Gough * BUGS: added a list of known but unfixed bugs. 2002-02-07 Mark Galassi * THANKS: added Karsten Howes . Wed Jan 16 16:55:25 2002 Brian Gough * configure.in acconfig.h: check whether IEEE comparisons work for Inf, NaN and define HAVE_IEEE_COMPARISONS Tue Jan 8 21:38:23 2002 Brian Gough * config.h (GSL_RANGE_CHECK_OFF): turn off range checking when building the library, still on by default when compiling user applications Mon Nov 19 21:40:30 2001 Brian Gough * standardised all files to #include for exported header files rather than having some as #include "...", to simplify build procedure Fri Oct 19 15:19:45 2001 Brian Gough * gsl-histogram.c (main): use gsl_histogram_alloc instead of calloc Wed Oct 3 11:06:51 2001 Brian Gough * removed auto-expanding RCS tokens from comments as they interfere with making patches * configure.in: check for isinf(), finite(), isnan() as macros. Also check for isfinite() as an alternative to finite(). Sat Sep 29 18:04:35 2001 Brian Gough * gsl.m4: cleaned up arguments to GSL_CONFIG Wed Sep 19 17:41:13 2001 Brian Gough * gsl-histogram.c (main): turn off the display of mean and standard deviation it is too confusing because it is not the mean of the data itself. Tue Sep 18 20:08:39 2001 Brian Gough * test_gsl_histogram.sh: modified the expected test output to account for the mean,sigma lines now produced Wed Sep 12 13:39:55 2001 Brian Gough * gsl-histogram.c (main): print out the mean and standard deviation as comments Sun Sep 9 22:57:11 2001 Brian Gough * configure.in: print out a warning for OS/2 telling the user to run an extra script Fri Sep 7 14:32:01 2001 Brian Gough * gsl.pc.in: added pkg-config file * configure.in: avoid clobbering any LIBS specified, by not putting -lm in front of them. This allows the user to specify an alternate math library for the configure script. (ac_cv_func_printf_longdouble): added generation of gsl.pc for pkg-config Thu Sep 6 21:08:10 2001 Brian Gough * configure.in: added an option to specify an alternative math library Tue Sep 4 09:41:37 2001 Brian Gough * gsl.spec.in: autogenerate gsl.spec from gsl.spec.in Sun Aug 26 17:19:24 2001 Brian Gough * acconfig.h: fixed incorrect #ifdef for HAVE_FINITE (Henry Sobotka) Sat Aug 25 10:25:41 2001 Brian Gough * gsl_math.h: moved includes to beginning of file to avoid redefinition errors on OS/2 Tue Aug 21 23:54:45 2001 Brian Gough * gsl_nan.h (GSL_POSINF): removed incorrect use of _FPCLASS.. for MSVC, these are flags not numerical values. Thu Aug 9 22:51:00 2001 Brian Gough * config.h.in: added a macro for discarding a pointer, used to suppress warnings from gcc about unused parameters Sun Aug 5 20:35:09 2001 Brian Gough * configure.in: move PPC bug test to beginning of configure script, to save waiting for it to appear at the end Sat Jul 14 21:13:55 2001 Brian Gough * gsl_nan.h: use C99X macro INFINITY where available Fri Jul 13 21:31:01 2001 Brian Gough * templates_on.h: added macros for unqualified views, needed for initialization of views Mon Jul 9 11:22:16 2001 Brian Gough * configure.in: made check for extended precision registers independent of test for os ieee interface type Sun Jul 1 22:44:00 2001 Brian Gough * templates_on.h templates_off.h: modified to support views Wed Jun 27 12:15:19 2001 Brian Gough * configure.in: work around case of broken log1p in OpenBSD Mon Jun 25 10:21:17 2001 Brian Gough * configure.in: catch case of openbsd, which is not supported yet in ieee directory Mon Jun 18 22:31:26 2001 Brian Gough * configure.in (GSL_CFLAGS): now just uses includedir for gsl-config.in Wed Jun 6 18:10:18 2001 Brian Gough * removed explicit dependencies from Makefile.am's since automake now handles these automatically Tue May 29 12:40:08 2001 Brian Gough * configure.in: added missing wildcard to end of hpux11* to match different versions of hpux11, e.g. hpux11.2. Tue May 22 10:38:59 2001 Brian Gough * gsl.m4: try to make C-code compatible with C++, also changed return() to exit() as mentioned in the autoconf documentation. 2001-05-21 Mark Galassi * config.guess, config.sub: removed these auto-generated files from CVS since they are built for developers by autogen.sh. Tue May 15 10:59:43 2001 Brian Gough * autogen.sh: upgraded to latest libtool and automake Tue May 1 12:19:01 2001 Brian Gough * gsl_nan.h (GSL_NAN): added definitions for Microsoft Visual C++ Mon Apr 30 13:46:39 2001 Brian Gough * gsl_math.h: split out gsl_pow_int.h and gsl_nan.h Wed Mar 21 14:16:29 2001 Brian Gough * gsl-config.in (Usage): allow user to specify an external blas library through an environment variable 2000-12-14 Mark Galassi * gsl.spec, configure.in: upped the version to 0.7+ since the release has been made. 2000-10-26 Mark Galassi * ltconfig, ltmain.sh: removed these auto-generated files. 2000-10-26 Mark Galassi * stamp-h.in: removed this file because it is auto-generated. * scripts/mkknownproblems.sh: fixed it so it's slightly better, but it still assumes that you run it out of $(srcdir)/scripts. * scripts/knownproblems.pl: put in a more standard path for perl. * AUTHORS: some changes and additions. * KNOWN-PROBLEMS: updated the list of known problems. 2000-10-04 Mark Galassi * NEWS, configure.in, gsl.spec: upped the version to 0.7 as we are about to release. Thu Jul 20 20:20:04 2000 Brian Gough * gsl.m4: changed \? to \{0,1\} in the sed commands to allow for SGI sed (from Steve ROBBINS ) Sun Jul 9 19:34:03 2000 Brian Gough * gsl.m4: modified to accept x.y version numbers as the first argument in addition to x.y.z version numbers Mon Jun 12 22:18:27 2000 Brian Gough * Makefile.am (SUBLIBS): added missing complex lib to top-level SUBLIBS Sun Jun 11 17:39:18 2000 Brian Gough * gsl.spec (BuildRoot): fixed directory for install, it is now /usr/lib/ instead of /usr/lib/gsl/ Tue Jun 6 20:02:02 2000 Brian Gough * acconfig.h, configure.in: use HAVE_X86LINUX_IEEE_INTEFACE for x86 instead of generic HAVE_LINUX_IEEE_INTEFACE 2000-06-02 Mark Galassi * gsl.spec: added gsl.m4 to the list of files. * NEWS: added a mention of gsl.m4. * gsl.spec: small changes to fix the installation of doc files. * Makefile.am: added some files (like MACHINES, KNOWN-PROBLEMS, ...) to the distribution. * gsl.spec, configure.in, KNOWN-PROBLEMS: upped the version number to 0.6. Also: gsl.spec now installes files like MACHINES, KNOWN-PROBLEMS, NEWS,... into the package's %doc file list. Sun May 28 12:03:36 2000 Brian Gough * gsl/Makefile.am (header-links): use configurable macro variable $(LN_S) instead of explicit "ln -s" Mon May 15 19:16:31 2000 Brian Gough * added ieee mode setting to all tests, so that they can be run in double-precision even on extended precision architectures 2000-05-14 Steve Robbins * acconfig.h: * configure.in: look in both and /usr/include/float.h, to find FP_RND_RN, as some versions of GCC don't copy these symbols into the `fixed' header. Thu May 11 12:47:19 2000 Brian Gough * gsl_math.h (GSL_POSZERO): added macros for IEEE signed zeros, +0 and -0. They don't do anything useful yet, but use the macro so that will be possible to work around compilers that don't understand the difference between the constants -0 and +0. Wed May 10 11:30:15 2000 Brian Gough * gsl_math.h (GSL_POSINF): make use of HUGE_VAL which is actually +Inf when IEEE is available, and can be detected by the NAN being defined (it is only defined on IEEE machines) (GSL_NEGINF): as for GSL_POSINF Fri May 5 11:20:50 2000 Brian Gough * split out gsl_test code from err/ directory into test/ directory Thu May 4 12:14:42 2000 Brian Gough * added GPL headers throughout Mon May 1 22:11:32 2000 Brian Gough * modified all the makefiles to compile test programs as "test", for simpler automated builds Tue Apr 11 14:51:59 2000 Brian Gough * eigen/eigen_sort.c (gsl_eigen_sort_impl): updated occurrence of gsl_matrix_swap_cols to gsl_matrix_swap_columns * gsl.m4, Makefile.am: added gsl.m4 macros for autoconf support 2000-04-03 Mark Galassi * gsl-config.in, configure.in (GSL_CFLAGS): replaced my gsl-config script with Christopher Gabriel's, which is simpler. * autogen.sh: changed this into a no-brainer which does not invoke configure. Mon Apr 3 15:43:25 2000 Brian Gough * applied patch from C M Murphy to fix up missing consts in header files. Sat Apr 1 20:12:34 2000 Brian Gough * gsl_math.h: added some missing extra constants from BSD (e.g. M_PI_2) Wed Mar 15 11:16:14 2000 Brian Gough * added a directory for complex number support, complex/ Tue Mar 14 10:28:43 2000 Brian Gough * added support for including headers in C++ programs using __BEGIN_DECLS and __END_DECLS macros Sat Mar 11 11:18:33 2000 Brian Gough * templates_on.h: added a definition for ONE, to match ZERO * Changed matrix struct element dim2 to tda throughout Mon Mar 6 19:48:27 2000 Brian Gough * gsl_version.h: added simple release-number based support for accessing the version number at compile-time and run-time. This is not a complete solution but it will do for now, as libtool interface numbers are too complicated to worry about at the moment due to other problems with libtool. Thu Mar 2 20:52:50 2000 Brian Gough * templates_on.h (ATOMIC_IO): added an internal type for IO, for the cases where it isn't possible to read and write a type directly as text (e.g. char) 2000-02-23 Mark Galassi * Makefile.am, gsl.spec: added a gsl.spec. Seems to work. * gsl-config.in: overhauled gsl-config.in; should work better now. Tue Feb 15 18:55:05 2000 Brian Gough * added directory for permutation objects, permutation/ Sun Dec 5 14:20:43 1999 Brian Gough * added multidimensional minimisation directory, multimin/ 1999-12-03 Mark Galassi * configure.in: upped the version to 0.5+, so that snaphots built out of CVS will not be confused with the 0.5 release. * AUTHORS, README, HACKING: changed my email address. * README: updated with some of Brian's suggestions. * configure.in, NEWS: fixed the new version to 0.5. Tue Oct 19 11:15:16 1999 Brian Gough * added the eigen value directory, eigen/ 1999-08-30 Mark Galassi * gsl-config.in: started adding this script, for now cannibalized from gnome-config. Fri Aug 20 11:10:54 1999 Brian Gough * support for IEEE on Tru64 from Tim Mooney Mon Aug 16 21:10:23 1999 Brian Gough * added the minimization directory, min/ Fri Aug 6 11:15:58 1999 Brian Gough * configure.in: removed need to configure for rand() and RAND_MAX by providing a simple random number generator in the directories that used rand(). 1999-08-05 Mark Galassi * Makefile.am: put the THANKS file into the distribution. * autogen.sh: added the --add-missing option to automake. I'm surprised it was not already there. * configure.in: added a + to the version, indicating that any snapshots made from anonymous CVS in this state should be interpreted as "after 0.4.1 and before the next version", and no other promises. * THANKS: added this THANKS file. We appreciate all patches from people on the net, even those which are too small to warrant adding the author to the AUTHORS file. The THANKS file should include everyone who sent in patches. They should also be mentioned in the ChangeLog entry. Sat May 8 21:06:31 1999 Brian Gough * configure.in: now check for "extern inline" using a modified version of AC_C_INLINE, since we use "extern inline" but only checked for "inline", and some compilers only support the latter. Sun Apr 11 20:40:35 1999 Brian Gough * libraries and include files are now installed in pkglibdir and pkgincludedir (e.g. /usr/local/lib/gsl/ and /usr/local/include/gsl/ by default) * libraries are now built and installed separately Mon Mar 1 15:41:25 1999 Brian Gough * gsl_math.h: renamed gsl_fdf to gsl_function_fdf, so that it will be more obvious what it is Sun Feb 28 20:37:31 1999 Brian Gough * gsl_mode.h: added prototype for GSL_MODE_PREC(mt) Tue Feb 23 14:18:39 1999 Brian Gough * gsl_math.h (GSL_FDF_EVAL_F): improved names of macros Sat Feb 20 12:14:07 1999 Brian Gough * split out polynomial root finding algorithms into a new poly/ directory 1999-02-25 Mark Galassi * configure.in: upped the version to 0.4.1; this is ready for tagging. 1999-02-06 Mark Galassi * NEWS: udpated in occasion of the imminent 0.4.1 release. Sun Feb 14 20:47:07 1999 Brian Gough * Makefile.am: added gsl_mode.h to include_HEADERS Mon Feb 8 18:39:35 1999 Brian Gough * added new type gsl_function for arbitrary functions with parameters, and gsl_fdf for functions and their derivatives Mon Feb 8 18:39:35 1999 Brian Gough * gsl_complex.h: added GSL_SET_REAL(&z,x) and GSL_SET_IMAG(&z,y), changed GSL_COMPLEX_SET(z,x,y) to GSL_SET_COMPLEX(&z,x,y) to match. 1999-01-03 Mark Galassi * Makefile.am, autogen.sh: improved autogen.sh, based on the gtk+ autogen.sh. Added it to Makefile.am's EXTRA_DIST list. 1999-01-02 Mark Galassi * configure.in: introduced a test for hypot(), in case a system does not have it. 1999-01-03 Mark Galassi * autogen.sh: added this simple script which calls aclocal, automake --add-missind and autoconf, followed by ./configure with all the arguments. * configure, Makefile.in, */Makefile.in: removed these auto-generated files. Fri Dec 11 16:50:27 1998 Brian Gough * AUTHORS: corrected the spelling of Gerard Jungman's name (it's either Gerard or Jerry, but not Gerry) 1998-12-05 Mark Galassi * configure.in: made the version be 0.4after so it's clear that snapshots will be post-0.4. * HACKING: updated a bit to work with the new CVS repository. Mon Nov 23 16:09:21 1998 Brian Gough * gsl_config.h: removed, it was an unnecessary hack just for defining macros. Autoconf's config.h should be used by the programmer instead. Sat Nov 21 20:39:14 1998 Brian Gough * texinfo.tex: removed, this is a duplicate and shouldn't be needed in the top-level directory (it is in docs) * move any included headers in _source.c files into the master file that includes the _source.c, since this saves time when compiling * config.h.in: standardized on HAVE_PRINTF_LONGDOUBLE Fri Nov 20 15:14:53 1998 Brian Gough * replaced DBL_EPSILON, DBL_MAX, ... by GSL_DBL_EPSILON, GSL_DBL_MAX, ... * added sys directory for miscellaneous gsl system functions like max and min Thu Nov 19 22:46:43 1998 Brian Gough * config.h.in: removed MAX and MIN Wed Nov 18 10:40:18 1998 Brian Gough * gsl_math.h: added prototypes for inline functions GSL_MAX_INT etc Tue Nov 10 20:05:27 1998 Brian Gough * gsl_math.h: moved the MAX(a,b) and MIN(a,b) to gsl_math.h and renamed them GSL_MAX(a,b) and GSL_MIN(a,b) to avoid inevitable conflicts with system macros. Mon Nov 9 21:08:10 1998 Brian Gough * config.h: added MAX(a,b) and MIN(a,b) macros since we use these everywhere. We assume that if they are defined by the system then they do actually work. 1998-11-06 * configure.in: add -mieee on alpha platforms, also check for both scanf and printf working with long double 1998-08-31 James Theiler * Makefile.am (SUBDIRS): added utils directory * configure.in (AC_OUTPUT): added utils/Makefile * configure.in (AC_REPLACE_FUNCS): added strtol, strtoul; removed strerror since it's already hardcoded into the err/ directory 1998-08-30 Mark Galassi * configure.in: upped release number to 0.4; about to tag and make the release. 1998-08-20 Mark Galassi * configure.in: upped version to 0.4-interim as we prepare for a 0.4 snapshot. * NEWS: now refers to 0.4 instead of 0.3g. Also "commented out" (smile) the note that says "we need to do a better job with the news file", since it looks quite good now! 1998-08-19 Mark Galassi * doc/Makefile.am (EXTRA_DIST): added ran-exppow.tex, rand-levy.tex, rand-gumbel.tex and rand-bernoulli.tex to EXTRA_DIST. Now they are included in the distribution and a "make distcheck" goes further. Thu Jul 30 16:12:05 1998 Brian Gough * Makefile.am: now using a script to write the AR commands explicitly, this should be more portable Tue Jul 28 23:07:04 1998 Brian Gough * Makefile.am: new style single build of libgsl.a Fri Jul 10 19:57:49 1998 Brian Gough * configure.in: removed AC_FUNC_ALLOCA since we don't use alloca (it is not ansi) Sun Jun 28 14:31:31 1998 Brian Gough * replaced the random/ directory by the rng/ directory and made minor changes in randist/, siman/ to accommodate it Tue Jun 23 19:49:22 1998 Brian Gough * added a top-level file gsl_config.h for detecting features when users include the library headers. Currently it just turns on HAVE_INLINE if you are using GCC or C++. 1998-05-16 Mark Galassi * configure.in: Brian fixed the error where libgslerr.a was not being installed in the 0.3e release, so I just bumped it up to 0.3f to make a new release. 1998-05-14 Mark Galassi * configure.in: upped the version to 0.3e, and this time I might actually make the public snapshot! Wed Apr 8 18:30:48 1998 Brian Gough * Now using the automake variable check_PROGRAMS everywhere for the testing programs (no need to build them unless we do make check) Mon Apr 6 15:09:08 1998 Brian Gough * added matrix and vector subdirectories Wed Mar 18 10:27:27 1998 Brian Gough * gsl_complex.h: the typedef for 'complex' has been renamed to gsl_complex, to avoid conflicts with C++ bindings and libstdc++ 1998-02-09 Mark Galassi * configure.in: 0.3b is now released, so I upped the version number to 0.3c-interim. 1998-02-09 Mark Galassi * configure.in: upped version number to 0.3b 1998-01-30 Mark Galassi * AUTHORS: added Gerry Jungman to the authors list. gsl/Makefile.am0000664000175000017500000000676214057135461011774 0ustar eddedd## Process this file with automake to produce Makefile.in # AUTOMAKE_OPTIONS = readme-alpha SUBDIRS = gsl utils sys test err bst const complex cheb block vector matrix permutation combination multiset sort ieee-utils cblas blas linalg eigen specfunc dht qrng rng randist fft poly fit multifit multifit_nlinear multilarge multilarge_nlinear filter movstat rstat statistics siman sum integration interpolation histogram ode-initval ode-initval2 roots multiroots min multimin monte ntuple diff deriv cdf wavelet bspline spblas spmatrix splinalg doc SUBLIBS = block/libgslblock.la blas/libgslblas.la bspline/libgslbspline.la bst/libgslbst.la complex/libgslcomplex.la cheb/libgslcheb.la dht/libgsldht.la diff/libgsldiff.la deriv/libgslderiv.la eigen/libgsleigen.la err/libgslerr.la fft/libgslfft.la filter/libgslfilter.la fit/libgslfit.la histogram/libgslhistogram.la ieee-utils/libgslieeeutils.la integration/libgslintegration.la interpolation/libgslinterpolation.la linalg/libgsllinalg.la matrix/libgslmatrix.la min/libgslmin.la monte/libgslmonte.la multifit/libgslmultifit.la multifit_nlinear/libgslmultifit_nlinear.la multilarge/libgslmultilarge.la multilarge_nlinear/libgslmultilarge_nlinear.la multimin/libgslmultimin.la multiroots/libgslmultiroots.la ntuple/libgslntuple.la ode-initval/libgslodeiv.la ode-initval2/libgslodeiv2.la permutation/libgslpermutation.la combination/libgslcombination.la multiset/libgslmultiset.la poly/libgslpoly.la qrng/libgslqrng.la randist/libgslrandist.la rng/libgslrng.la roots/libgslroots.la siman/libgslsiman.la sort/libgslsort.la specfunc/libgslspecfunc.la movstat/libgslmovstat.la rstat/libgslrstat.la statistics/libgslstatistics.la sum/libgslsum.la sys/libgslsys.la test/libgsltest.la utils/libutils.la vector/libgslvector.la cdf/libgslcdf.la wavelet/libgslwavelet.la spmatrix/libgslspmatrix.la spblas/libgslspblas.la splinalg/libgslsplinalg.la pkginclude_HEADERS = gsl_math.h gsl_pow_int.h gsl_nan.h gsl_machine.h gsl_mode.h gsl_precision.h gsl_types.h gsl_version.h gsl_minmax.h gsl_inline.h bin_SCRIPTS = gsl-config pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA= gsl.pc CLEANFILES = gsl.pc gsl-config EXTRA_DIST = autogen.sh gsl-config.in gsl.pc.in configure.ac THANKS BUGS gsl.spec.in gsl.m4 test_gsl_histogram.sh pkgconfig.test lib_LTLIBRARIES = libgsl.la libgsl_la_SOURCES = version.c libgsl_la_LIBADD = $(GSL_LIBADD) $(SUBLIBS) libgsl_la_LDFLAGS = $(GSL_LDFLAGS) -version-info $(GSL_LT_VERSION) noinst_HEADERS = templates_on.h templates_off.h build.h m4datadir = $(datadir)/aclocal m4data_DATA = gsl.m4 bin_PROGRAMS = gsl-randist gsl-histogram gsl_randist_SOURCES = gsl-randist.c gsl_randist_LDADD = libgsl.la cblas/libgslcblas.la gsl_histogram_SOURCES = gsl-histogram.c gsl_histogram_LDADD = libgsl.la cblas/libgslcblas.la check_SCRIPTS = test_gsl_histogram.sh pkgconfig.test TESTS = test_gsl_histogram.sh pkgconfig.test #bin_PROGRAMS = main dummy #dummy_SOURCES = version.c #dummy_LDADD = $(SUBLIBS) #main_SOURCES = version.c env.c #main_LDADD = libgsl.la edit = $(SED) \ -e 's|@prefix[@]|$(prefix)|g' \ -e 's|@exec_prefix[@]|$(exec_prefix)|g' \ -e 's|@libdir[@]|$(libdir)|g' \ -e 's|@includedir[@]|$(includedir)|g' \ -e 's|@GSL_CFLAGS[@]|$(GSL_CFLAGS)|g' \ -e 's|@GSL_LIBM[@]|$(GSL_LIBM)|g' \ -e 's|@GSL_LIBS[@]|$(GSL_LIBS)|g' \ -e 's|@LIBS[@]|$(LIBS)|g' \ -e 's|@VERSION[@]|$(VERSION)|g' gsl-config gsl.pc: Makefile @rm -f $@ $@.tmp @$(edit) '$(srcdir)/$@.in' >>$@.tmp @chmod a-w $@.tmp @mv $@.tmp $@ @echo creating $@ gsl-config: $(srcdir)/gsl-config.in gsl.pc: $(srcdir)/gsl.pc.in gsl/templates_on.h0000644000175000017500000001443713536674414012606 0ustar eddedd/* If BASE is undefined we use function names like gsl_name() and assume that we are using doubles. If BASE is defined we used function names like gsl_BASE_name() and use BASE as the base datatype */ #if defined(BASE_GSL_COMPLEX_LONG) #define BASE gsl_complex_long_double #define SHORT complex_long_double #define SHORT_REAL long_double #define ATOMIC long double #define USES_LONGDOUBLE 1 #define MULTIPLICITY 2 #define FP 1 #define IN_FORMAT "%Lg" #define OUT_FORMAT "%Lg" #define ATOMIC_IO ATOMIC #define ZERO {{0.0L,0.0L}} #define ONE {{1.0L,0.0L}} #define BASE_EPSILON GSL_DBL_EPSILON #elif defined(BASE_GSL_COMPLEX) #if defined(_MSC_VER) && defined(complex) #undef complex #endif #define BASE gsl_complex #define SHORT complex #define SHORT_REAL #define ATOMIC double #define MULTIPLICITY 2 #define FP 1 #define IN_FORMAT "%lg" #define OUT_FORMAT "%g" #define ATOMIC_IO ATOMIC #define ZERO {{0.0,0.0}} #define ONE {{1.0,0.0}} #define BASE_EPSILON GSL_DBL_EPSILON #elif defined(BASE_GSL_COMPLEX_FLOAT) #define BASE gsl_complex_float #define SHORT complex_float #define SHORT_REAL float #define ATOMIC float #define MULTIPLICITY 2 #define FP 1 #define IN_FORMAT "%g" #define OUT_FORMAT "%g" #define ATOMIC_IO ATOMIC #define ZERO {{0.0F,0.0F}} #define ONE {{1.0F,0.0F}} #define BASE_EPSILON GSL_FLT_EPSILON #elif defined(BASE_LONG_DOUBLE) #define BASE long double #define SHORT long_double #define ATOMIC long double #define USES_LONGDOUBLE 1 #define MULTIPLICITY 1 #define FP 1 #define IN_FORMAT "%Lg" #define OUT_FORMAT "%Lg" #define ATOMIC_IO ATOMIC #define ZERO 0.0L #define ONE 1.0L #define BASE_EPSILON GSL_DBL_EPSILON #elif defined(BASE_DOUBLE) #define BASE double #define SHORT #define ATOMIC double #define MULTIPLICITY 1 #define FP 1 #define IN_FORMAT "%lg" #define OUT_FORMAT "%g" #define ATOMIC_IO ATOMIC #define ZERO 0.0 #define ONE 1.0 #define BASE_EPSILON GSL_DBL_EPSILON #elif defined(BASE_FLOAT) #define BASE float #define SHORT float #define ATOMIC float #define MULTIPLICITY 1 #define FP 1 #define IN_FORMAT "%g" #define OUT_FORMAT "%g" #define ATOMIC_IO ATOMIC #define ZERO 0.0F #define ONE 1.0F #define BASE_EPSILON GSL_FLT_EPSILON #elif defined(BASE_ULONG) #define BASE unsigned long #define SHORT ulong #define ATOMIC unsigned long #define MULTIPLICITY 1 #define IN_FORMAT "%lu" #define OUT_FORMAT "%lu" #define ATOMIC_IO ATOMIC #define ZERO 0UL #define ONE 1UL #define UNSIGNED 1 #elif defined(BASE_LONG) #define BASE long #define SHORT long #define ATOMIC long #define MULTIPLICITY 1 #define IN_FORMAT "%ld" #define OUT_FORMAT "%ld" #define ATOMIC_IO ATOMIC #define ZERO 0L #define ONE 1L #elif defined(BASE_UINT) #define BASE unsigned int #define SHORT uint #define ATOMIC unsigned int #define MULTIPLICITY 1 #define IN_FORMAT "%u" #define OUT_FORMAT "%u" #define ATOMIC_IO ATOMIC #define ZERO 0U #define ONE 1U #define UNSIGNED 1 #elif defined(BASE_INT) #define BASE int #define SHORT int #define ATOMIC int #define MULTIPLICITY 1 #define IN_FORMAT "%d" #define OUT_FORMAT "%d" #define ATOMIC_IO ATOMIC #define ZERO 0 #define ONE 1 #elif defined(BASE_USHORT) #define BASE unsigned short #define SHORT ushort #define ATOMIC unsigned short #define MULTIPLICITY 1 #define IN_FORMAT "%hu" #define OUT_FORMAT "%hu" #define ATOMIC_IO ATOMIC #define ZERO 0U #define ONE 1U #define UNSIGNED 1 #elif defined(BASE_SHORT) #define BASE short #define SHORT short #define ATOMIC short #define MULTIPLICITY 1 #define IN_FORMAT "%hd" #define OUT_FORMAT "%hd" #define ATOMIC_IO ATOMIC #define ZERO 0 #define ONE 1 #elif defined(BASE_UCHAR) #define BASE unsigned char #define SHORT uchar #define ATOMIC unsigned char #define MULTIPLICITY 1 #define IN_FORMAT "%u" #define OUT_FORMAT "%u" #define ATOMIC_IO unsigned int #define ZERO 0U #define ONE 1U #define UNSIGNED 1 #elif defined(BASE_CHAR) #define BASE char #define SHORT char #define ATOMIC char #define MULTIPLICITY 1 #define IN_FORMAT "%d" #define OUT_FORMAT "%d" #define ATOMIC_IO int #define ZERO 0 #define ONE 1 #ifdef __CHAR_UNSIGNED__ #define UNSIGNED 1 #endif #else #error unknown BASE_ directive in source.h #endif #define CONCAT2x(a,b) a ## _ ## b #define CONCAT2(a,b) CONCAT2x(a,b) #define CONCAT3x(a,b,c) a ## _ ## b ## _ ## c #define CONCAT3(a,b,c) CONCAT3x(a,b,c) #define CONCAT4x(a,b,c,d) a ## _ ## b ## _ ## c ## _ ## d #define CONCAT4(a,b,c,d) CONCAT4x(a,b,c,d) #ifndef USE_QUALIFIER #define QUALIFIER #endif #ifdef USE_QUALIFIER #if defined(BASE_DOUBLE) #define FUNCTION(dir,name) CONCAT3(dir,QUALIFIER,name) #define TYPE(dir) dir #define VIEW(dir,name) CONCAT2(dir,name) #define QUALIFIED_TYPE(dir) QUALIFIER dir #define QUALIFIED_VIEW(dir,name) CONCAT3(dir,QUALIFIER,name) #else #define FUNCTION(a,c) CONCAT4(a,SHORT,QUALIFIER,c) #define TYPE(dir) CONCAT2(dir,SHORT) #define VIEW(dir,name) CONCAT3(dir,SHORT,name) #define QUALIFIED_TYPE(dir) QUALIFIER CONCAT2(dir,SHORT) #define QUALIFIED_VIEW(dir,name) CONCAT4(dir,SHORT,QUALIFIER,name) #endif #if defined(BASE_GSL_COMPLEX) #define REAL_TYPE(dir) dir #define REAL_VIEW(dir,name) CONCAT2(dir,name) #define QUALIFIED_REAL_TYPE(dir) QUALIFIER dir #define QUALIFIED_REAL_VIEW(dir,name) CONCAT3(dir,QUALIFIER,name) #else #define REAL_TYPE(dir) CONCAT2(dir,SHORT_REAL) #define REAL_VIEW(dir,name) CONCAT3(dir,SHORT_REAL,name) #define QUALIFIED_REAL_TYPE(dir) QUALIFIER CONCAT2(dir,SHORT_REAL) #define QUALIFIED_REAL_VIEW(dir,name) CONCAT4(dir,SHORT_REAL,QUALIFIER,name) #endif #else #if defined(BASE_DOUBLE) #define FUNCTION(dir,name) CONCAT2(dir,name) #define TYPE(dir) dir #define VIEW(dir,name) CONCAT2(dir,name) #define QUALIFIED_TYPE(dir) TYPE(dir) #define QUALIFIED_VIEW(dir,name) CONCAT2(dir,name) #else #define FUNCTION(a,c) CONCAT3(a,SHORT,c) #define TYPE(dir) CONCAT2(dir,SHORT) #define VIEW(dir,name) CONCAT3(dir,SHORT,name) #define QUALIFIED_TYPE(dir) TYPE(dir) #define QUALIFIED_VIEW(dir,name) CONCAT3(dir,SHORT,name) #endif #if defined(BASE_GSL_COMPLEX) #define REAL_TYPE(dir) dir #define REAL_VIEW(dir,name) CONCAT2(dir,name) #define QUALIFIED_REAL_TYPE(dir) dir #define QUALIFIED_REAL_VIEW(dir,name) CONCAT2(dir,name) #else #define REAL_TYPE(dir) CONCAT2(dir,SHORT_REAL) #define REAL_VIEW(dir,name) CONCAT3(dir,SHORT_REAL,name) #define QUALIFIED_REAL_TYPE(dir) CONCAT2(dir,SHORT_REAL) #define QUALIFIED_REAL_VIEW(dir,name) CONCAT3(dir,SHORT_REAL,name) #endif #endif #define STRING(x) #x #define EXPAND(x) STRING(x) #define NAME(x) EXPAND(TYPE(x)) gsl/autogen.sh0000755000175000017500000000042213536674414011731 0ustar eddedd#! /bin/sh # Run this to generate all the auto-generated files needed by the GNU # configure program #libtoolize --automake #aclocal #autoheader #automake --add-missing --gnu --force-missing #autoconf autoreconf -i -f -v echo "Now use ./configure --enable-maintainer-mode" gsl/gsl_types.h0000644000175000017500000000217513536674414012121 0ustar eddedd/* gsl_types.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_TYPES_H__ #define __GSL_TYPES_H__ #ifndef GSL_VAR #ifdef WIN32 # ifdef GSL_DLL # ifdef DLL_EXPORT # define GSL_VAR extern __declspec(dllexport) # else # define GSL_VAR extern __declspec(dllimport) # endif # else # define GSL_VAR extern # endif #else # define GSL_VAR extern #endif #endif #endif /* __GSL_TYPES_H__ */ gsl/cblas/0000755000175000017500000000000014057135461011007 5ustar eddeddgsl/cblas/zherk.c0000644000175000017500000000065613536674414012314 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_zherk (const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const double alpha, const void *A, const int lda, const double beta, void *C, const int ldc) { #define BASE double #include "source_herk.h" #undef BASE } gsl/cblas/source_syrk_c.h0000644000175000017500000001415513536674414014047 0ustar eddedd/* blas/source_syrk_c.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j, k; int uplo, trans; CHECK_ARGS11(SYRK,Order,Uplo,Trans,N,K,alpha,A,lda,beta,C,ldc); { const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); const BASE beta_real = CONST_REAL0(beta); const BASE beta_imag = CONST_IMAG0(beta); if ((alpha_real == 0.0 && alpha_imag == 0.0) && (beta_real == 1.0 && beta_imag == 0.0)) return; if (Order == CblasRowMajor) { uplo = Uplo; /* FIXME: original blas does not make distinction between Trans and ConjTrans?? */ trans = (Trans == CblasNoTrans) ? CblasNoTrans : CblasTrans; } else { uplo = (Uplo == CblasUpper) ? CblasLower : CblasUpper; trans = (Trans == CblasNoTrans) ? CblasTrans : CblasNoTrans; } /* form y := beta*y */ if (beta_real == 0.0 && beta_imag == 0.0) { if (uplo == CblasUpper) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { REAL(C, ldc * i + j) = 0.0; IMAG(C, ldc * i + j) = 0.0; } } } else { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { REAL(C, ldc * i + j) = 0.0; IMAG(C, ldc * i + j) = 0.0; } } } } else if (!(beta_real == 1.0 && beta_imag == 0.0)) { if (uplo == CblasUpper) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { const BASE Cij_real = REAL(C, ldc * i + j); const BASE Cij_imag = IMAG(C, ldc * i + j); REAL(C, ldc * i + j) = beta_real * Cij_real - beta_imag * Cij_imag; IMAG(C, ldc * i + j) = beta_real * Cij_imag + beta_imag * Cij_real; } } } else { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { const BASE Cij_real = REAL(C, ldc * i + j); const BASE Cij_imag = IMAG(C, ldc * i + j); REAL(C, ldc * i + j) = beta_real * Cij_real - beta_imag * Cij_imag; IMAG(C, ldc * i + j) = beta_real * Cij_imag + beta_imag * Cij_real; } } } } if (alpha_real == 0.0 && alpha_imag == 0.0) return; if (uplo == CblasUpper && trans == CblasNoTrans) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < K; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = CONST_IMAG(A, i * lda + k); const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = CONST_IMAG(A, j * lda + k); temp_real += Aik_real * Ajk_real - Aik_imag * Ajk_imag; temp_imag += Aik_real * Ajk_imag + Aik_imag * Ajk_real; } REAL(C, i * ldc + j) += alpha_real * temp_real - alpha_imag * temp_imag; IMAG(C, i * ldc + j) += alpha_real * temp_imag + alpha_imag * temp_real; } } } else if (uplo == CblasUpper && trans == CblasTrans) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < K; k++) { const BASE Aki_real = CONST_REAL(A, k * lda + i); const BASE Aki_imag = CONST_IMAG(A, k * lda + i); const BASE Akj_real = CONST_REAL(A, k * lda + j); const BASE Akj_imag = CONST_IMAG(A, k * lda + j); temp_real += Aki_real * Akj_real - Aki_imag * Akj_imag; temp_imag += Aki_real * Akj_imag + Aki_imag * Akj_real; } REAL(C, i * ldc + j) += alpha_real * temp_real - alpha_imag * temp_imag; IMAG(C, i * ldc + j) += alpha_real * temp_imag + alpha_imag * temp_real; } } } else if (uplo == CblasLower && trans == CblasNoTrans) { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < K; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = CONST_IMAG(A, i * lda + k); const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = CONST_IMAG(A, j * lda + k); temp_real += Aik_real * Ajk_real - Aik_imag * Ajk_imag; temp_imag += Aik_real * Ajk_imag + Aik_imag * Ajk_real; } REAL(C, i * ldc + j) += alpha_real * temp_real - alpha_imag * temp_imag; IMAG(C, i * ldc + j) += alpha_real * temp_imag + alpha_imag * temp_real; } } } else if (uplo == CblasLower && trans == CblasTrans) { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < K; k++) { const BASE Aki_real = CONST_REAL(A, k * lda + i); const BASE Aki_imag = CONST_IMAG(A, k * lda + i); const BASE Akj_real = CONST_REAL(A, k * lda + j); const BASE Akj_imag = CONST_IMAG(A, k * lda + j); temp_real += Aki_real * Akj_real - Aki_imag * Akj_imag; temp_imag += Aki_real * Akj_imag + Aki_imag * Akj_real; } REAL(C, i * ldc + j) += alpha_real * temp_real - alpha_imag * temp_imag; IMAG(C, i * ldc + j) += alpha_real * temp_imag + alpha_imag * temp_real; } } } else { BLAS_ERROR("unrecognized operation"); } } } gsl/cblas/ssymv.c0000644000175000017500000000063713536674414012351 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_ssymv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *A, const int lda, const float *X, const int incX, const float beta, float *Y, const int incY) { #define BASE float #include "source_symv.h" #undef BASE } gsl/cblas/source_her2k.h0000644000175000017500000002542213536674414013567 0ustar eddedd/* blas/source_her2k.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j, k; int uplo, trans; CHECK_ARGS13(HER2K,Order,Uplo,Trans,N,K,alpha,A,lda,B,ldb,beta,C,ldc); { const BASE alpha_real = CONST_REAL0(alpha); BASE alpha_imag = CONST_IMAG0(alpha); if (beta == 1.0 && ((alpha_real == 0.0 && alpha_imag == 0.0) || K == 0)) return; if (Order == CblasRowMajor) { uplo = Uplo; trans = Trans; } else { uplo = (Uplo == CblasUpper) ? CblasLower : CblasUpper; trans = (Trans == CblasNoTrans) ? CblasConjTrans : CblasNoTrans; alpha_imag *= -1; /* conjugate alpha */ } /* form C := beta*C */ if (beta == 0.0) { if (uplo == CblasUpper) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { REAL(C, ldc * i + j) = 0.0; IMAG(C, ldc * i + j) = 0.0; } } } else { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { REAL(C, ldc * i + j) = 0.0; IMAG(C, ldc * i + j) = 0.0; } } } } else if (beta != 1.0) { if (uplo == CblasUpper) { for (i = 0; i < N; i++) { REAL(C, ldc * i + i) *= beta; IMAG(C, ldc * i + i) = 0.0; for (j = i + 1; j < N; j++) { REAL(C, ldc * i + j) *= beta; IMAG(C, ldc * i + j) *= beta; } } } else { for (i = 0; i < N; i++) { for (j = 0; j < i; j++) { REAL(C, ldc * i + j) *= beta; IMAG(C, ldc * i + j) *= beta; } REAL(C, ldc * i + i) *= beta; IMAG(C, ldc * i + i) = 0.0; } } } else { for (i = 0; i < N; i++) { IMAG(C, ldc * i + i) = 0.0; } } if (alpha_real == 0.0 && alpha_imag == 0.0) return; if (uplo == CblasUpper && trans == CblasNoTrans) { for (i = 0; i < N; i++) { /* Cii += alpha Aik conj(Bik) + conj(alpha) Bik conj(Aik) */ { BASE temp_real = 0.0; /* BASE temp_imag = 0.0; */ for (k = 0; k < K; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = CONST_IMAG(A, i * lda + k); /* temp1 = alpha * Aik */ const BASE temp1_real = alpha_real * Aik_real - alpha_imag * Aik_imag; const BASE temp1_imag = alpha_real * Aik_imag + alpha_imag * Aik_real; const BASE Bik_real = CONST_REAL(B, i * ldb + k); const BASE Bik_imag = CONST_IMAG(B, i * ldb + k); temp_real += temp1_real * Bik_real + temp1_imag * Bik_imag; } REAL(C, i * ldc + i) += 2 * temp_real; IMAG(C, i * ldc + i) = 0.0; } /* Cij += alpha Aik conj(Bjk) + conj(alpha) Bik conj(Ajk) */ for (j = i + 1; j < N; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < K; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = CONST_IMAG(A, i * lda + k); /* temp1 = alpha * Aik */ const BASE temp1_real = alpha_real * Aik_real - alpha_imag * Aik_imag; const BASE temp1_imag = alpha_real * Aik_imag + alpha_imag * Aik_real; const BASE Bik_real = CONST_REAL(B, i * ldb + k); const BASE Bik_imag = CONST_IMAG(B, i * ldb + k); const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = CONST_IMAG(A, j * lda + k); /* temp2 = alpha * Ajk */ const BASE temp2_real = alpha_real * Ajk_real - alpha_imag * Ajk_imag; const BASE temp2_imag = alpha_real * Ajk_imag + alpha_imag * Ajk_real; const BASE Bjk_real = CONST_REAL(B, j * ldb + k); const BASE Bjk_imag = CONST_IMAG(B, j * ldb + k); /* Cij += alpha * Aik * conj(Bjk) + conj(alpha) * Bik * conj(Ajk) */ temp_real += ((temp1_real * Bjk_real + temp1_imag * Bjk_imag) + (Bik_real * temp2_real + Bik_imag * temp2_imag)); temp_imag += ((temp1_real * (-Bjk_imag) + temp1_imag * Bjk_real) + (Bik_real * (-temp2_imag) + Bik_imag * temp2_real)); } REAL(C, i * ldc + j) += temp_real; IMAG(C, i * ldc + j) += temp_imag; } } } else if (uplo == CblasUpper && trans == CblasConjTrans) { for (k = 0; k < K; k++) { for (i = 0; i < N; i++) { BASE Aki_real = CONST_REAL(A, k * lda + i); BASE Aki_imag = CONST_IMAG(A, k * lda + i); BASE Bki_real = CONST_REAL(B, k * ldb + i); BASE Bki_imag = CONST_IMAG(B, k * ldb + i); /* temp1 = alpha * conj(Aki) */ BASE temp1_real = alpha_real * Aki_real - alpha_imag * (-Aki_imag); BASE temp1_imag = alpha_real * (-Aki_imag) + alpha_imag * Aki_real; /* temp2 = conj(alpha) * conj(Bki) */ BASE temp2_real = alpha_real * Bki_real - alpha_imag * Bki_imag; BASE temp2_imag = -(alpha_real * Bki_imag + alpha_imag * Bki_real); /* Cii += alpha * conj(Aki) * Bki + conj(alpha) * conj(Bki) * Aki */ { REAL(C, i * lda + i) += 2 * (temp1_real * Bki_real - temp1_imag * Bki_imag); IMAG(C, i * lda + i) = 0.0; } for (j = i + 1; j < N; j++) { BASE Akj_real = CONST_REAL(A, k * lda + j); BASE Akj_imag = CONST_IMAG(A, k * lda + j); BASE Bkj_real = CONST_REAL(B, k * ldb + j); BASE Bkj_imag = CONST_IMAG(B, k * ldb + j); /* Cij += alpha * conj(Aki) * Bkj + conj(alpha) * conj(Bki) * Akj */ REAL(C, i * lda + j) += (temp1_real * Bkj_real - temp1_imag * Bkj_imag) + (temp2_real * Akj_real - temp2_imag * Akj_imag); IMAG(C, i * lda + j) += (temp1_real * Bkj_imag + temp1_imag * Bkj_real) + (temp2_real * Akj_imag + temp2_imag * Akj_real); } } } } else if (uplo == CblasLower && trans == CblasNoTrans) { for (i = 0; i < N; i++) { /* Cij += alpha Aik conj(Bjk) + conj(alpha) Bik conj(Ajk) */ for (j = 0; j < i; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < K; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = CONST_IMAG(A, i * lda + k); /* temp1 = alpha * Aik */ const BASE temp1_real = alpha_real * Aik_real - alpha_imag * Aik_imag; const BASE temp1_imag = alpha_real * Aik_imag + alpha_imag * Aik_real; const BASE Bik_real = CONST_REAL(B, i * ldb + k); const BASE Bik_imag = CONST_IMAG(B, i * ldb + k); const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = CONST_IMAG(A, j * lda + k); /* temp2 = alpha * Ajk */ const BASE temp2_real = alpha_real * Ajk_real - alpha_imag * Ajk_imag; const BASE temp2_imag = alpha_real * Ajk_imag + alpha_imag * Ajk_real; const BASE Bjk_real = CONST_REAL(B, j * ldb + k); const BASE Bjk_imag = CONST_IMAG(B, j * ldb + k); /* Cij += alpha * Aik * conj(Bjk) + conj(alpha) * Bik * conj(Ajk) */ temp_real += ((temp1_real * Bjk_real + temp1_imag * Bjk_imag) + (Bik_real * temp2_real + Bik_imag * temp2_imag)); temp_imag += ((temp1_real * (-Bjk_imag) + temp1_imag * Bjk_real) + (Bik_real * (-temp2_imag) + Bik_imag * temp2_real)); } REAL(C, i * ldc + j) += temp_real; IMAG(C, i * ldc + j) += temp_imag; } /* Cii += alpha Aik conj(Bik) + conj(alpha) Bik conj(Aik) */ { BASE temp_real = 0.0; /* BASE temp_imag = 0.0; */ for (k = 0; k < K; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = CONST_IMAG(A, i * lda + k); /* temp1 = alpha * Aik */ const BASE temp1_real = alpha_real * Aik_real - alpha_imag * Aik_imag; const BASE temp1_imag = alpha_real * Aik_imag + alpha_imag * Aik_real; const BASE Bik_real = CONST_REAL(B, i * ldb + k); const BASE Bik_imag = CONST_IMAG(B, i * ldb + k); temp_real += temp1_real * Bik_real + temp1_imag * Bik_imag; } REAL(C, i * ldc + i) += 2 * temp_real; IMAG(C, i * ldc + i) = 0.0; } } } else if (uplo == CblasLower && trans == CblasConjTrans) { for (k = 0; k < K; k++) { for (i = 0; i < N; i++) { BASE Aki_real = CONST_REAL(A, k * lda + i); BASE Aki_imag = CONST_IMAG(A, k * lda + i); BASE Bki_real = CONST_REAL(B, k * ldb + i); BASE Bki_imag = CONST_IMAG(B, k * ldb + i); /* temp1 = alpha * conj(Aki) */ BASE temp1_real = alpha_real * Aki_real - alpha_imag * (-Aki_imag); BASE temp1_imag = alpha_real * (-Aki_imag) + alpha_imag * Aki_real; /* temp2 = conj(alpha) * conj(Bki) */ BASE temp2_real = alpha_real * Bki_real - alpha_imag * Bki_imag; BASE temp2_imag = -(alpha_real * Bki_imag + alpha_imag * Bki_real); for (j = 0; j < i; j++) { BASE Akj_real = CONST_REAL(A, k * lda + j); BASE Akj_imag = CONST_IMAG(A, k * lda + j); BASE Bkj_real = CONST_REAL(B, k * ldb + j); BASE Bkj_imag = CONST_IMAG(B, k * ldb + j); /* Cij += alpha * conj(Aki) * Bkj + conj(alpha) * conj(Bki) * Akj */ REAL(C, i * lda + j) += (temp1_real * Bkj_real - temp1_imag * Bkj_imag) + (temp2_real * Akj_real - temp2_imag * Akj_imag); IMAG(C, i * lda + j) += (temp1_real * Bkj_imag + temp1_imag * Bkj_real) + (temp2_real * Akj_imag + temp2_imag * Akj_real); } /* Cii += alpha * conj(Aki) * Bki + conj(alpha) * conj(Bki) * Aki */ { REAL(C, i * lda + i) += 2 * (temp1_real * Bki_real - temp1_imag * Bki_imag); IMAG(C, i * lda + i) = 0.0; } } } } else { BLAS_ERROR("unrecognized operation"); } } } gsl/cblas/ssyr.c0000644000175000017500000000053413536674414012164 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_ssyr (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *X, const int incX, float *A, const int lda) { #define BASE float #include "source_syr.h" #undef BASE } gsl/cblas/csscal.c0000644000175000017500000000032513536674414012432 0ustar eddedd#include #include #include "cblas.h" void cblas_csscal (const int N, const float alpha, void *X, const int incX) { #define BASE float #include "source_scal_c_s.h" #undef BASE } gsl/cblas/source_geru.h0000644000175000017500000000470013536674414013512 0ustar eddedd/* blas/source_geru.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; CHECK_ARGS10(CZ_GERU,order,M,N,alpha,X,incX,Y,incY,A,lda); { const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); if (order == CblasRowMajor) { INDEX ix = OFFSET(M, incX); for (i = 0; i < M; i++) { const BASE X_real = CONST_REAL(X, ix); const BASE X_imag = CONST_IMAG(X, ix); const BASE tmp_real = alpha_real * X_real - alpha_imag * X_imag; const BASE tmp_imag = alpha_imag * X_real + alpha_real * X_imag; INDEX jy = OFFSET(N, incY); for (j = 0; j < N; j++) { const BASE Y_real = CONST_REAL(Y, jy); const BASE Y_imag = CONST_IMAG(Y, jy); REAL(A, lda * i + j) += Y_real * tmp_real - Y_imag * tmp_imag; IMAG(A, lda * i + j) += Y_imag * tmp_real + Y_real * tmp_imag; jy += incY; } ix += incX; } } else if (order == CblasColMajor) { INDEX jy = OFFSET(N, incY); for (j = 0; j < N; j++) { const BASE Y_real = CONST_REAL(Y, jy); const BASE Y_imag = CONST_IMAG(Y, jy); const BASE tmp_real = alpha_real * Y_real - alpha_imag * Y_imag; const BASE tmp_imag = alpha_imag * Y_real + alpha_real * Y_imag; INDEX ix = OFFSET(M, incX); for (i = 0; i < M; i++) { const BASE X_real = CONST_REAL(X, ix); const BASE X_imag = CONST_IMAG(X, ix); REAL(A, i + lda * j) += X_real * tmp_real - X_imag * tmp_imag; IMAG(A, i + lda * j) += X_imag * tmp_real + X_real * tmp_imag; ix += incX; } jy += incY; } } else { BLAS_ERROR("unrecognized operation"); } } } gsl/cblas/ctrsm.c0000644000175000017500000000076513536674414012322 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" #include "hypot.c" void cblas_ctrsm (const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const void *alpha, const void *A, const int lda, void *B, const int ldb) { #define BASE float #include "source_trsm_c.h" #undef BASE } gsl/cblas/test_ger.c0000644000175000017500000001476413536674414013012 0ustar eddedd#include #include #include #include #include "tests.h" void test_ger (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int M = 1; int N = 1; int lda = 1; float alpha = 1.0f; float A[] = { -0.515f }; float X[] = { 0.611f }; int incX = -1; float Y[] = { -0.082f }; int incY = -1; float A_expected[] = { -0.565102f }; cblas_sger(order, M, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], flteps, "sger(case 1390)"); } }; }; { int order = 102; int M = 1; int N = 1; int lda = 1; float alpha = 1.0f; float A[] = { -0.515f }; float X[] = { 0.611f }; int incX = -1; float Y[] = { -0.082f }; int incY = -1; float A_expected[] = { -0.565102f }; cblas_sger(order, M, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], flteps, "sger(case 1391)"); } }; }; { int order = 101; int M = 1; int N = 1; int lda = 1; double alpha = 1; double A[] = { -0.809 }; double X[] = { -0.652 }; int incX = -1; double Y[] = { 0.712 }; int incY = -1; double A_expected[] = { -1.273224 }; cblas_dger(order, M, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], dbleps, "dger(case 1392)"); } }; }; { int order = 102; int M = 1; int N = 1; int lda = 1; double alpha = 1; double A[] = { -0.809 }; double X[] = { -0.652 }; int incX = -1; double Y[] = { 0.712 }; int incY = -1; double A_expected[] = { -1.273224 }; cblas_dger(order, M, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], dbleps, "dger(case 1393)"); } }; }; { int order = 101; int M = 1; int N = 1; int lda = 1; float alpha[2] = {0.0f, 0.0f}; float A[] = { -0.651f, 0.856f }; float X[] = { -0.38f, -0.235f }; int incX = -1; float Y[] = { -0.627f, 0.757f }; int incY = -1; float A_expected[] = { -0.651f, 0.856f }; cblas_cgeru(order, M, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], flteps, "cgeru(case 1394) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], flteps, "cgeru(case 1394) imag"); }; }; }; { int order = 101; int M = 1; int N = 1; int lda = 1; float alpha[2] = {0.0f, 0.0f}; float A[] = { -0.651f, 0.856f }; float X[] = { -0.38f, -0.235f }; int incX = -1; float Y[] = { -0.627f, 0.757f }; int incY = -1; float A_expected[] = { -0.651f, 0.856f }; cblas_cgerc(order, M, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], flteps, "cgerc(case 1395) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], flteps, "cgerc(case 1395) imag"); }; }; }; { int order = 102; int M = 1; int N = 1; int lda = 1; float alpha[2] = {0.0f, 0.0f}; float A[] = { -0.651f, 0.856f }; float X[] = { -0.38f, -0.235f }; int incX = -1; float Y[] = { -0.627f, 0.757f }; int incY = -1; float A_expected[] = { -0.651f, 0.856f }; cblas_cgeru(order, M, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], flteps, "cgeru(case 1396) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], flteps, "cgeru(case 1396) imag"); }; }; }; { int order = 102; int M = 1; int N = 1; int lda = 1; float alpha[2] = {0.0f, 0.0f}; float A[] = { -0.651f, 0.856f }; float X[] = { -0.38f, -0.235f }; int incX = -1; float Y[] = { -0.627f, 0.757f }; int incY = -1; float A_expected[] = { -0.651f, 0.856f }; cblas_cgerc(order, M, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], flteps, "cgerc(case 1397) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], flteps, "cgerc(case 1397) imag"); }; }; }; { int order = 101; int M = 1; int N = 1; int lda = 1; double alpha[2] = {-1, 0}; double A[] = { -0.426, 0.757 }; double X[] = { -0.579, -0.155 }; int incX = -1; double Y[] = { 0.831, 0.035 }; int incY = -1; double A_expected[] = { 0.049724, 0.90607 }; cblas_zgeru(order, M, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], dbleps, "zgeru(case 1398) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], dbleps, "zgeru(case 1398) imag"); }; }; }; { int order = 101; int M = 1; int N = 1; int lda = 1; double alpha[2] = {-1, 0}; double A[] = { -0.426, 0.757 }; double X[] = { -0.579, -0.155 }; int incX = -1; double Y[] = { 0.831, 0.035 }; int incY = -1; double A_expected[] = { 0.060574, 0.86554 }; cblas_zgerc(order, M, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], dbleps, "zgerc(case 1399) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], dbleps, "zgerc(case 1399) imag"); }; }; }; { int order = 102; int M = 1; int N = 1; int lda = 1; double alpha[2] = {-1, 0}; double A[] = { -0.426, 0.757 }; double X[] = { -0.579, -0.155 }; int incX = -1; double Y[] = { 0.831, 0.035 }; int incY = -1; double A_expected[] = { 0.049724, 0.90607 }; cblas_zgeru(order, M, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], dbleps, "zgeru(case 1400) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], dbleps, "zgeru(case 1400) imag"); }; }; }; { int order = 102; int M = 1; int N = 1; int lda = 1; double alpha[2] = {-1, 0}; double A[] = { -0.426, 0.757 }; double X[] = { -0.579, -0.155 }; int incX = -1; double Y[] = { 0.831, 0.035 }; int incY = -1; double A_expected[] = { 0.060574, 0.86554 }; cblas_zgerc(order, M, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], dbleps, "zgerc(case 1401) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], dbleps, "zgerc(case 1401) imag"); }; }; }; } gsl/cblas/source_swap_r.h0000644000175000017500000000177513536674414014054 0ustar eddedd/* blas/source_swap_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i; INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { const BASE tmp = X[ix]; X[ix] = Y[iy]; Y[iy] = tmp; ix += incX; iy += incY; } } gsl/cblas/source_asum_r.h0000644000175000017500000000173213536674414014040 0ustar eddedd/* blas/source_asum_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { BASE r = 0.0; INDEX i; INDEX ix = 0; if (incX <= 0) { return 0; } for (i = 0; i < N; i++) { r += fabs(X[ix]); ix += incX; } return r; } gsl/cblas/strsm.c0000644000175000017500000000074313536674414012336 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_strsm (const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const float alpha, const float *A, const int lda, float *B, const int ldb) { #define BASE float #include "source_trsm_r.h" #undef BASE } gsl/cblas/cher2k.c0000644000175000017500000000071613536674414012344 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_cher2k (const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const float beta, void *C, const int ldc) { #define BASE float #include "source_her2k.h" #undef BASE } gsl/cblas/source_tpsv_c.h0000644000175000017500000002017613536674414014053 0ustar eddedd/* blas/source_tpsv_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { const int conj = (TransA == CblasConjTrans) ? -1 : 1; const int Trans = (TransA != CblasConjTrans) ? TransA : CblasTrans; const int nonunit = (Diag == CblasNonUnit); INDEX i, j; CHECK_ARGS8(TPSV,order,Uplo,TransA,Diag,N,Ap,X,incX); if (N == 0) return; /* form x := inv( A )*x */ if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX) + incX * (N - 1); if (nonunit) { const BASE a_real = CONST_REAL(Ap, TPUP(N, (N - 1), (N - 1))); const BASE a_imag = conj * CONST_IMAG(Ap, TPUP(N, (N - 1), (N - 1))); const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (x_real * b_real + x_imag * b_imag) / s; IMAG(X, ix) = (x_imag * b_real - b_imag * x_real) / s; } ix -= incX; for (i = N - 1; i > 0 && i--;) { BASE tmp_real = REAL(X, ix); BASE tmp_imag = IMAG(X, ix); INDEX jx = ix + incX; for (j = i + 1; j < N; j++) { const BASE Aij_real = CONST_REAL(Ap, TPUP(N, i, j)); const BASE Aij_imag = conj * CONST_IMAG(Ap, TPUP(N, i, j)); const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); tmp_real -= Aij_real * x_real - Aij_imag * x_imag; tmp_imag -= Aij_real * x_imag + Aij_imag * x_real; jx += incX; } if (nonunit) { const BASE a_real = CONST_REAL(Ap, TPUP(N, i, i)); const BASE a_imag = conj * CONST_IMAG(Ap, TPUP(N, i, i)); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (tmp_real * b_real + tmp_imag * b_imag) / s; IMAG(X, ix) = (tmp_imag * b_real - tmp_real * b_imag) / s; } else { REAL(X, ix) = tmp_real; IMAG(X, ix) = tmp_imag; } ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasUpper)) { /* forward substitution */ INDEX ix = OFFSET(N, incX); if (nonunit) { const BASE a_real = CONST_REAL(Ap, TPLO(N, 0, 0)); const BASE a_imag = conj * CONST_IMAG(Ap, TPLO(N, 0, 0)); const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (x_real * b_real + x_imag * b_imag) / s; IMAG(X, ix) = (x_imag * b_real - b_imag * x_real) / s; } ix += incX; for (i = 1; i < N; i++) { BASE tmp_real = REAL(X, ix); BASE tmp_imag = IMAG(X, ix); INDEX jx = OFFSET(N, incX); for (j = 0; j < i; j++) { const BASE Aij_real = CONST_REAL(Ap, TPLO(N, i, j)); const BASE Aij_imag = conj * CONST_IMAG(Ap, TPLO(N, i, j)); const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); tmp_real -= Aij_real * x_real - Aij_imag * x_imag; tmp_imag -= Aij_real * x_imag + Aij_imag * x_real; jx += incX; } if (nonunit) { const BASE a_real = CONST_REAL(Ap, TPLO(N, i, i)); const BASE a_imag = conj * CONST_IMAG(Ap, TPLO(N, i, i)); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (tmp_real * b_real + tmp_imag * b_imag) / s; IMAG(X, ix) = (tmp_imag * b_real - tmp_real * b_imag) / s; } else { REAL(X, ix) = tmp_real; IMAG(X, ix) = tmp_imag; } ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasLower)) { /* form x := inv( A' )*x */ /* forward substitution */ INDEX ix = OFFSET(N, incX); if (nonunit) { const BASE a_real = CONST_REAL(Ap, TPUP(N, 0, 0)); const BASE a_imag = conj * CONST_IMAG(Ap, TPUP(N, 0, 0)); const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (x_real * b_real + x_imag * b_imag) / s; IMAG(X, ix) = (x_imag * b_real - b_imag * x_real) / s; } ix += incX; for (i = 1; i < N; i++) { BASE tmp_real = REAL(X, ix); BASE tmp_imag = IMAG(X, ix); INDEX jx = OFFSET(N, incX); for (j = 0; j < i; j++) { const BASE Aij_real = CONST_REAL(Ap, TPUP(N, j, i)); const BASE Aij_imag = conj * CONST_IMAG(Ap, TPUP(N, j, i)); const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); tmp_real -= Aij_real * x_real - Aij_imag * x_imag; tmp_imag -= Aij_real * x_imag + Aij_imag * x_real; jx += incX; } if (nonunit) { const BASE a_real = CONST_REAL(Ap, TPUP(N, i, i)); const BASE a_imag = conj * CONST_IMAG(Ap, TPUP(N, i, i)); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (tmp_real * b_real + tmp_imag * b_imag) / s; IMAG(X, ix) = (tmp_imag * b_real - tmp_real * b_imag) / s; } else { REAL(X, ix) = tmp_real; IMAG(X, ix) = tmp_imag; } ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasUpper)) { /* backsubstitution */ INDEX ix = OFFSET(N, incX) + incX * (N - 1); if (nonunit) { const BASE a_real = CONST_REAL(Ap, TPLO(N, (N - 1), (N - 1))); const BASE a_imag = conj * CONST_IMAG(Ap, TPLO(N, (N - 1), (N - 1))); const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (x_real * b_real + x_imag * b_imag) / s; IMAG(X, ix) = (x_imag * b_real - b_imag * x_real) / s; } ix -= incX; for (i = N - 1; i > 0 && i--;) { BASE tmp_real = REAL(X, ix); BASE tmp_imag = IMAG(X, ix); INDEX jx = ix + incX; for (j = i + 1; j < N; j++) { const BASE Aij_real = CONST_REAL(Ap, TPLO(N, j, i)); const BASE Aij_imag = conj * CONST_IMAG(Ap, TPLO(N, j, i)); const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); tmp_real -= Aij_real * x_real - Aij_imag * x_imag; tmp_imag -= Aij_real * x_imag + Aij_imag * x_real; jx += incX; } if (nonunit) { const BASE a_real = CONST_REAL(Ap, TPLO(N, i, i)); const BASE a_imag = conj * CONST_IMAG(Ap, TPLO(N, i, i)); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (tmp_real * b_real + tmp_imag * b_imag) / s; IMAG(X, ix) = (tmp_imag * b_real - tmp_real * b_imag) / s; } else { REAL(X, ix) = tmp_real; IMAG(X, ix) = tmp_imag; } ix -= incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/dspr.c0000644000175000017500000000052213536674414012131 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dspr (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *X, const int incX, double *Ap) { #define BASE double #include "source_spr.h" #undef BASE } gsl/cblas/dzasum.c0000644000175000017500000000031113536674414012460 0ustar eddedd#include #include #include "cblas.h" double cblas_dzasum (const int N, const void *X, const int incX) { #define BASE double #include "source_asum_c.h" #undef BASE } gsl/cblas/source_hpr2.h0000644000175000017500000001070313536674414013423 0ustar eddedd/* blas/source_hpr2.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; const int conj = (order == CblasColMajor) ? -1 : 1; CHECK_ARGS9(CZ_HPR2,order,Uplo,N,alpha,X,incX,Y,incY,Ap); { const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); if (alpha_real == 0.0 && alpha_imag == 0.0) return; if ((order == CblasRowMajor && Uplo == CblasUpper) || (order == CblasColMajor && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { const BASE Xi_real = CONST_REAL(X, ix); const BASE Xi_imag = CONST_IMAG(X, ix); /* tmp1 = alpha Xi */ const BASE tmp1_real = alpha_real * Xi_real - alpha_imag * Xi_imag; const BASE tmp1_imag = alpha_imag * Xi_real + alpha_real * Xi_imag; const BASE Yi_real = CONST_REAL(Y, iy); const BASE Yi_imag = CONST_IMAG(Y, iy); /* tmp2 = conj(alpha) Yi */ const BASE tmp2_real = alpha_real * Yi_real + alpha_imag * Yi_imag; const BASE tmp2_imag = -alpha_imag * Yi_real + alpha_real * Yi_imag; INDEX jx = ix + incX; INDEX jy = iy + incY; /* Aij = alpha*Xi*conj(Yj) + conj(alpha)*Yi*conj(Xj) */ REAL(Ap, TPUP(N, i, i)) += 2 * (tmp1_real * Yi_real + tmp1_imag * Yi_imag); IMAG(Ap, TPUP(N, i, i)) = 0; for (j = i + 1; j < N; j++) { const BASE Xj_real = CONST_REAL(X, jx); const BASE Xj_imag = CONST_IMAG(X, jx); const BASE Yj_real = CONST_REAL(Y, jy); const BASE Yj_imag = CONST_IMAG(Y, jy); REAL(Ap, TPUP(N, i, j)) += ((tmp1_real * Yj_real + tmp1_imag * Yj_imag) + (tmp2_real * Xj_real + tmp2_imag * Xj_imag)); IMAG(Ap, TPUP(N, i, j)) += conj * ((tmp1_imag * Yj_real - tmp1_real * Yj_imag) + (tmp2_imag * Xj_real - tmp2_real * Xj_imag)); jx += incX; jy += incY; } ix += incX; iy += incY; } } else if ((order == CblasRowMajor && Uplo == CblasLower) || (order == CblasColMajor && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { const BASE Xi_real = CONST_REAL(X, ix); const BASE Xi_imag = CONST_IMAG(X, ix); const BASE tmp1_real = alpha_real * Xi_real - alpha_imag * Xi_imag; const BASE tmp1_imag = alpha_imag * Xi_real + alpha_real * Xi_imag; const BASE Yi_real = CONST_REAL(Y, iy); const BASE Yi_imag = CONST_IMAG(Y, iy); const BASE tmp2_real = alpha_real * Yi_real + alpha_imag * Yi_imag; const BASE tmp2_imag = -alpha_imag * Yi_real + alpha_real * Yi_imag; INDEX jx = OFFSET(N, incX); INDEX jy = OFFSET(N, incY); /* Aij = alpha*Xi*conj(Yj) + conj(alpha)*Yi*conj(Xj) */ for (j = 0; j < i; j++) { const BASE Xj_real = CONST_REAL(X, jx); const BASE Xj_imag = CONST_IMAG(X, jx); const BASE Yj_real = CONST_REAL(Y, jy); const BASE Yj_imag = CONST_IMAG(Y, jy); REAL(Ap, TPLO(N, i, j)) += ((tmp1_real * Yj_real + tmp1_imag * Yj_imag) + (tmp2_real * Xj_real + tmp2_imag * Xj_imag)); IMAG(Ap, TPLO(N, i, j)) += conj * ((tmp1_imag * Yj_real - tmp1_real * Yj_imag) + (tmp2_imag * Xj_real - tmp2_real * Xj_imag)); jx += incX; jy += incY; } REAL(Ap, TPLO(N, i, i)) += 2 * (tmp1_real * Yi_real + tmp1_imag * Yi_imag); IMAG(Ap, TPLO(N, i, i)) = 0; ix += incX; iy += incY; } } else { BLAS_ERROR("unrecognized operation"); } } } gsl/cblas/stpmv.c0000644000175000017500000000060013536674414012327 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_stpmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const float *Ap, float *X, const int incX) { #define BASE float #include "source_tpmv_r.h" #undef BASE } gsl/cblas/source_trmv_r.h0000644000175000017500000000702313536674414014062 0ustar eddedd/* blas/source_trmv_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; const int nonunit = (Diag == CblasNonUnit); const int Trans = (TransA != CblasConjTrans) ? TransA : CblasTrans; CHECK_ARGS9(TRMV,order,Uplo,TransA,Diag,N,A,lda,X,incX); if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasLower)) { /* form x := A*x */ INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { BASE temp = 0.0; const INDEX j_min = i + 1; const INDEX j_max = N; INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { temp += X[jx] * A[lda * i + j]; jx += incX; } if (nonunit) { X[ix] = temp + X[ix] * A[lda * i + i]; } else { X[ix] += temp; } ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX) + (N - 1) * incX; for (i = N; i > 0 && i--;) { BASE temp = 0.0; const INDEX j_min = 0; const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { temp += X[jx] * A[lda * i + j]; jx += incX; } if (nonunit) { X[ix] = temp + X[ix] * A[lda * i + i]; } else { X[ix] += temp; } ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasLower)) { /* form x := A'*x */ INDEX ix = OFFSET(N, incX) + (N - 1) * incX; for (i = N; i > 0 && i--;) { BASE temp = 0.0; const INDEX j_min = 0; const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { temp += X[jx] * A[lda * j + i]; jx += incX; } if (nonunit) { X[ix] = temp + X[ix] * A[lda * i + i]; } else { X[ix] += temp; } ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { BASE temp = 0.0; const INDEX j_min = i + 1; const INDEX j_max = N; INDEX jx = OFFSET(N, incX) + (i + 1) * incX; for (j = j_min; j < j_max; j++) { temp += X[jx] * A[lda * j + i]; jx += incX; } if (nonunit) { X[ix] = temp + X[ix] * A[lda * i + i]; } else { X[ix] += temp; } ix += incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/source_symm_r.h0000644000175000017500000000701213536674414014055 0ustar eddedd/* blas/source_symm_r.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j, k; INDEX n1, n2; int uplo, side; CHECK_ARGS13(SYMM,Order,Side,Uplo,M,N,alpha,A,lda,B,ldb,beta,C,ldc); if (alpha == 0.0 && beta == 1.0) return; if (Order == CblasRowMajor) { n1 = M; n2 = N; uplo = Uplo; side = Side; } else { n1 = N; n2 = M; uplo = (Uplo == CblasUpper) ? CblasLower : CblasUpper; side = (Side == CblasLeft) ? CblasRight : CblasLeft; } /* form y := beta*y */ if (beta == 0.0) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { C[ldc * i + j] = 0.0; } } } else if (beta != 1.0) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { C[ldc * i + j] *= beta; } } } if (alpha == 0.0) return; if (side == CblasLeft && uplo == CblasUpper) { /* form C := alpha*A*B + C */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE temp1 = alpha * B[ldb * i + j]; BASE temp2 = 0.0; C[i * ldc + j] += temp1 * A[i * lda + i]; for (k = i + 1; k < n1; k++) { const BASE Aik = A[i * lda + k]; C[k * ldc + j] += Aik * temp1; temp2 += Aik * B[ldb * k + j]; } C[i * ldc + j] += alpha * temp2; } } } else if (side == CblasLeft && uplo == CblasLower) { /* form C := alpha*A*B + C */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE temp1 = alpha * B[ldb * i + j]; BASE temp2 = 0.0; for (k = 0; k < i; k++) { const BASE Aik = A[i * lda + k]; C[k * ldc + j] += Aik * temp1; temp2 += Aik * B[ldb * k + j]; } C[i * ldc + j] += temp1 * A[i * lda + i] + alpha * temp2; } } } else if (side == CblasRight && uplo == CblasUpper) { /* form C := alpha*B*A + C */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE temp1 = alpha * B[ldb * i + j]; BASE temp2 = 0.0; C[i * ldc + j] += temp1 * A[j * lda + j]; for (k = j + 1; k < n2; k++) { const BASE Ajk = A[j * lda + k]; C[i * ldc + k] += temp1 * Ajk; temp2 += B[ldb * i + k] * Ajk; } C[i * ldc + j] += alpha * temp2; } } } else if (side == CblasRight && uplo == CblasLower) { /* form C := alpha*B*A + C */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE temp1 = alpha * B[ldb * i + j]; BASE temp2 = 0.0; for (k = 0; k < j; k++) { const BASE Ajk = A[j * lda + k]; C[i * ldc + k] += temp1 * Ajk; temp2 += B[ldb * i + k] * Ajk; } C[i * ldc + j] += temp1 * A[j * lda + j] + alpha * temp2; } } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/Makefile.in0000664000175000017500000022241014057135461013057 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = cblas ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libgslcblas_la_LIBADD = am_libgslcblas_la_OBJECTS = sasum.lo saxpy.lo scasum.lo scnrm2.lo \ scopy.lo sdot.lo sdsdot.lo sgbmv.lo sgemm.lo sgemv.lo sger.lo \ snrm2.lo srot.lo srotg.lo srotm.lo srotmg.lo ssbmv.lo sscal.lo \ sspmv.lo sspr.lo sspr2.lo sswap.lo ssymm.lo ssymv.lo ssyr.lo \ ssyr2.lo ssyr2k.lo ssyrk.lo stbmv.lo stbsv.lo stpmv.lo \ stpsv.lo strmm.lo strmv.lo strsm.lo strsv.lo dasum.lo daxpy.lo \ dcopy.lo ddot.lo dgbmv.lo dgemm.lo dgemv.lo dger.lo dnrm2.lo \ drot.lo drotg.lo drotm.lo drotmg.lo dsbmv.lo dscal.lo dsdot.lo \ dspmv.lo dspr.lo dspr2.lo dswap.lo dsymm.lo dsymv.lo dsyr.lo \ dsyr2.lo dsyr2k.lo dsyrk.lo dtbmv.lo dtbsv.lo dtpmv.lo \ dtpsv.lo dtrmm.lo dtrmv.lo dtrsm.lo dtrsv.lo dzasum.lo \ dznrm2.lo caxpy.lo ccopy.lo cdotc_sub.lo cdotu_sub.lo cgbmv.lo \ cgemm.lo cgemv.lo cgerc.lo cgeru.lo chbmv.lo chemm.lo chemv.lo \ cher.lo cher2.lo cher2k.lo cherk.lo chpmv.lo chpr.lo chpr2.lo \ cscal.lo csscal.lo cswap.lo csymm.lo csyr2k.lo csyrk.lo \ ctbmv.lo ctbsv.lo ctpmv.lo ctpsv.lo ctrmm.lo ctrmv.lo ctrsm.lo \ ctrsv.lo zaxpy.lo zcopy.lo zdotc_sub.lo zdotu_sub.lo zdscal.lo \ zgbmv.lo zgemm.lo zgemv.lo zgerc.lo zgeru.lo zhbmv.lo zhemm.lo \ zhemv.lo zher.lo zher2.lo zher2k.lo zherk.lo zhpmv.lo zhpr.lo \ zhpr2.lo zscal.lo zswap.lo zsymm.lo zsyr2k.lo zsyrk.lo \ ztbmv.lo ztbsv.lo ztpmv.lo ztpsv.lo ztrmm.lo ztrmv.lo ztrsm.lo \ ztrsv.lo icamax.lo idamax.lo isamax.lo izamax.lo xerbla.lo libgslcblas_la_OBJECTS = $(am_libgslcblas_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libgslcblas_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libgslcblas_la_LDFLAGS) $(LDFLAGS) -o \ $@ am_test_OBJECTS = test.$(OBJEXT) test_amax.$(OBJEXT) \ test_asum.$(OBJEXT) test_axpy.$(OBJEXT) test_copy.$(OBJEXT) \ test_dot.$(OBJEXT) test_gbmv.$(OBJEXT) test_gemm.$(OBJEXT) \ test_gemv.$(OBJEXT) test_ger.$(OBJEXT) test_hbmv.$(OBJEXT) \ test_hemm.$(OBJEXT) test_hemv.$(OBJEXT) test_her.$(OBJEXT) \ test_her2.$(OBJEXT) test_her2k.$(OBJEXT) test_herk.$(OBJEXT) \ test_hpmv.$(OBJEXT) test_hpr.$(OBJEXT) test_hpr2.$(OBJEXT) \ test_nrm2.$(OBJEXT) test_rot.$(OBJEXT) test_rotg.$(OBJEXT) \ test_rotm.$(OBJEXT) test_rotmg.$(OBJEXT) test_sbmv.$(OBJEXT) \ test_scal.$(OBJEXT) test_spmv.$(OBJEXT) test_spr.$(OBJEXT) \ test_spr2.$(OBJEXT) test_swap.$(OBJEXT) test_symm.$(OBJEXT) \ test_symv.$(OBJEXT) test_syr.$(OBJEXT) test_syr2.$(OBJEXT) \ test_syr2k.$(OBJEXT) test_syrk.$(OBJEXT) test_tbmv.$(OBJEXT) \ test_tbsv.$(OBJEXT) test_tpmv.$(OBJEXT) test_tpsv.$(OBJEXT) \ test_trmm.$(OBJEXT) test_trmv.$(OBJEXT) test_trsm.$(OBJEXT) \ test_trsv.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslcblas.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/caxpy.Plo ./$(DEPDIR)/ccopy.Plo \ ./$(DEPDIR)/cdotc_sub.Plo ./$(DEPDIR)/cdotu_sub.Plo \ ./$(DEPDIR)/cgbmv.Plo ./$(DEPDIR)/cgemm.Plo \ ./$(DEPDIR)/cgemv.Plo ./$(DEPDIR)/cgerc.Plo \ ./$(DEPDIR)/cgeru.Plo ./$(DEPDIR)/chbmv.Plo \ ./$(DEPDIR)/chemm.Plo ./$(DEPDIR)/chemv.Plo \ ./$(DEPDIR)/cher.Plo ./$(DEPDIR)/cher2.Plo \ ./$(DEPDIR)/cher2k.Plo ./$(DEPDIR)/cherk.Plo \ ./$(DEPDIR)/chpmv.Plo ./$(DEPDIR)/chpr.Plo \ ./$(DEPDIR)/chpr2.Plo ./$(DEPDIR)/cscal.Plo \ ./$(DEPDIR)/csscal.Plo ./$(DEPDIR)/cswap.Plo \ ./$(DEPDIR)/csymm.Plo ./$(DEPDIR)/csyr2k.Plo \ ./$(DEPDIR)/csyrk.Plo ./$(DEPDIR)/ctbmv.Plo \ ./$(DEPDIR)/ctbsv.Plo ./$(DEPDIR)/ctpmv.Plo \ ./$(DEPDIR)/ctpsv.Plo ./$(DEPDIR)/ctrmm.Plo \ ./$(DEPDIR)/ctrmv.Plo ./$(DEPDIR)/ctrsm.Plo \ ./$(DEPDIR)/ctrsv.Plo ./$(DEPDIR)/dasum.Plo \ ./$(DEPDIR)/daxpy.Plo ./$(DEPDIR)/dcopy.Plo \ ./$(DEPDIR)/ddot.Plo ./$(DEPDIR)/dgbmv.Plo \ ./$(DEPDIR)/dgemm.Plo ./$(DEPDIR)/dgemv.Plo \ ./$(DEPDIR)/dger.Plo ./$(DEPDIR)/dnrm2.Plo \ ./$(DEPDIR)/drot.Plo ./$(DEPDIR)/drotg.Plo \ ./$(DEPDIR)/drotm.Plo ./$(DEPDIR)/drotmg.Plo \ ./$(DEPDIR)/dsbmv.Plo ./$(DEPDIR)/dscal.Plo \ ./$(DEPDIR)/dsdot.Plo ./$(DEPDIR)/dspmv.Plo \ ./$(DEPDIR)/dspr.Plo ./$(DEPDIR)/dspr2.Plo \ ./$(DEPDIR)/dswap.Plo ./$(DEPDIR)/dsymm.Plo \ ./$(DEPDIR)/dsymv.Plo ./$(DEPDIR)/dsyr.Plo \ ./$(DEPDIR)/dsyr2.Plo ./$(DEPDIR)/dsyr2k.Plo \ ./$(DEPDIR)/dsyrk.Plo ./$(DEPDIR)/dtbmv.Plo \ ./$(DEPDIR)/dtbsv.Plo ./$(DEPDIR)/dtpmv.Plo \ ./$(DEPDIR)/dtpsv.Plo ./$(DEPDIR)/dtrmm.Plo \ ./$(DEPDIR)/dtrmv.Plo ./$(DEPDIR)/dtrsm.Plo \ ./$(DEPDIR)/dtrsv.Plo ./$(DEPDIR)/dzasum.Plo \ ./$(DEPDIR)/dznrm2.Plo ./$(DEPDIR)/icamax.Plo \ ./$(DEPDIR)/idamax.Plo ./$(DEPDIR)/isamax.Plo \ ./$(DEPDIR)/izamax.Plo ./$(DEPDIR)/sasum.Plo \ ./$(DEPDIR)/saxpy.Plo ./$(DEPDIR)/scasum.Plo \ ./$(DEPDIR)/scnrm2.Plo ./$(DEPDIR)/scopy.Plo \ ./$(DEPDIR)/sdot.Plo ./$(DEPDIR)/sdsdot.Plo \ ./$(DEPDIR)/sgbmv.Plo ./$(DEPDIR)/sgemm.Plo \ ./$(DEPDIR)/sgemv.Plo ./$(DEPDIR)/sger.Plo \ ./$(DEPDIR)/snrm2.Plo ./$(DEPDIR)/srot.Plo \ ./$(DEPDIR)/srotg.Plo ./$(DEPDIR)/srotm.Plo \ ./$(DEPDIR)/srotmg.Plo ./$(DEPDIR)/ssbmv.Plo \ ./$(DEPDIR)/sscal.Plo ./$(DEPDIR)/sspmv.Plo \ ./$(DEPDIR)/sspr.Plo ./$(DEPDIR)/sspr2.Plo \ ./$(DEPDIR)/sswap.Plo ./$(DEPDIR)/ssymm.Plo \ ./$(DEPDIR)/ssymv.Plo ./$(DEPDIR)/ssyr.Plo \ ./$(DEPDIR)/ssyr2.Plo ./$(DEPDIR)/ssyr2k.Plo \ ./$(DEPDIR)/ssyrk.Plo ./$(DEPDIR)/stbmv.Plo \ ./$(DEPDIR)/stbsv.Plo ./$(DEPDIR)/stpmv.Plo \ ./$(DEPDIR)/stpsv.Plo ./$(DEPDIR)/strmm.Plo \ ./$(DEPDIR)/strmv.Plo ./$(DEPDIR)/strsm.Plo \ ./$(DEPDIR)/strsv.Plo ./$(DEPDIR)/test.Po \ ./$(DEPDIR)/test_amax.Po ./$(DEPDIR)/test_asum.Po \ ./$(DEPDIR)/test_axpy.Po ./$(DEPDIR)/test_copy.Po \ ./$(DEPDIR)/test_dot.Po ./$(DEPDIR)/test_gbmv.Po \ ./$(DEPDIR)/test_gemm.Po ./$(DEPDIR)/test_gemv.Po \ ./$(DEPDIR)/test_ger.Po ./$(DEPDIR)/test_hbmv.Po \ ./$(DEPDIR)/test_hemm.Po ./$(DEPDIR)/test_hemv.Po \ ./$(DEPDIR)/test_her.Po ./$(DEPDIR)/test_her2.Po \ ./$(DEPDIR)/test_her2k.Po ./$(DEPDIR)/test_herk.Po \ ./$(DEPDIR)/test_hpmv.Po ./$(DEPDIR)/test_hpr.Po \ ./$(DEPDIR)/test_hpr2.Po ./$(DEPDIR)/test_nrm2.Po \ ./$(DEPDIR)/test_rot.Po ./$(DEPDIR)/test_rotg.Po \ ./$(DEPDIR)/test_rotm.Po ./$(DEPDIR)/test_rotmg.Po \ ./$(DEPDIR)/test_sbmv.Po ./$(DEPDIR)/test_scal.Po \ ./$(DEPDIR)/test_spmv.Po ./$(DEPDIR)/test_spr.Po \ ./$(DEPDIR)/test_spr2.Po ./$(DEPDIR)/test_swap.Po \ ./$(DEPDIR)/test_symm.Po ./$(DEPDIR)/test_symv.Po \ ./$(DEPDIR)/test_syr.Po ./$(DEPDIR)/test_syr2.Po \ ./$(DEPDIR)/test_syr2k.Po ./$(DEPDIR)/test_syrk.Po \ ./$(DEPDIR)/test_tbmv.Po ./$(DEPDIR)/test_tbsv.Po \ ./$(DEPDIR)/test_tpmv.Po ./$(DEPDIR)/test_tpsv.Po \ ./$(DEPDIR)/test_trmm.Po ./$(DEPDIR)/test_trmv.Po \ ./$(DEPDIR)/test_trsm.Po ./$(DEPDIR)/test_trsv.Po \ ./$(DEPDIR)/xerbla.Plo ./$(DEPDIR)/zaxpy.Plo \ ./$(DEPDIR)/zcopy.Plo ./$(DEPDIR)/zdotc_sub.Plo \ ./$(DEPDIR)/zdotu_sub.Plo ./$(DEPDIR)/zdscal.Plo \ ./$(DEPDIR)/zgbmv.Plo ./$(DEPDIR)/zgemm.Plo \ ./$(DEPDIR)/zgemv.Plo ./$(DEPDIR)/zgerc.Plo \ ./$(DEPDIR)/zgeru.Plo ./$(DEPDIR)/zhbmv.Plo \ ./$(DEPDIR)/zhemm.Plo ./$(DEPDIR)/zhemv.Plo \ ./$(DEPDIR)/zher.Plo ./$(DEPDIR)/zher2.Plo \ ./$(DEPDIR)/zher2k.Plo ./$(DEPDIR)/zherk.Plo \ ./$(DEPDIR)/zhpmv.Plo ./$(DEPDIR)/zhpr.Plo \ ./$(DEPDIR)/zhpr2.Plo ./$(DEPDIR)/zscal.Plo \ ./$(DEPDIR)/zswap.Plo ./$(DEPDIR)/zsymm.Plo \ ./$(DEPDIR)/zsyr2k.Plo ./$(DEPDIR)/zsyrk.Plo \ ./$(DEPDIR)/ztbmv.Plo ./$(DEPDIR)/ztbsv.Plo \ ./$(DEPDIR)/ztpmv.Plo ./$(DEPDIR)/ztpsv.Plo \ ./$(DEPDIR)/ztrmm.Plo ./$(DEPDIR)/ztrmv.Plo \ ./$(DEPDIR)/ztrsm.Plo ./$(DEPDIR)/ztrsv.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslcblas_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslcblas_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ lib_LTLIBRARIES = libgslcblas.la libgslcblas_la_LDFLAGS = $(GSLCBLAS_LDFLAGS) -version-info $(GSL_LT_CBLAS_VERSION) pkginclude_HEADERS = gsl_cblas.h AM_CPPFLAGS = -I$(top_srcdir) libgslcblas_la_SOURCES = sasum.c saxpy.c scasum.c scnrm2.c scopy.c \ sdot.c sdsdot.c sgbmv.c sgemm.c sgemv.c sger.c snrm2.c srot.c \ srotg.c srotm.c srotmg.c ssbmv.c sscal.c sspmv.c sspr.c \ sspr2.c sswap.c ssymm.c ssymv.c ssyr.c ssyr2.c ssyr2k.c \ ssyrk.c stbmv.c stbsv.c stpmv.c stpsv.c strmm.c strmv.c \ strsm.c strsv.c dasum.c daxpy.c dcopy.c ddot.c dgbmv.c dgemm.c \ dgemv.c dger.c dnrm2.c drot.c drotg.c drotm.c drotmg.c dsbmv.c \ dscal.c dsdot.c dspmv.c dspr.c dspr2.c dswap.c dsymm.c dsymv.c \ dsyr.c dsyr2.c dsyr2k.c dsyrk.c dtbmv.c dtbsv.c dtpmv.c \ dtpsv.c dtrmm.c dtrmv.c dtrsm.c dtrsv.c dzasum.c dznrm2.c \ caxpy.c ccopy.c cdotc_sub.c cdotu_sub.c cgbmv.c cgemm.c \ cgemv.c cgerc.c cgeru.c chbmv.c chemm.c chemv.c cher.c cher2.c \ cher2k.c cherk.c chpmv.c chpr.c chpr2.c cscal.c csscal.c \ cswap.c csymm.c csyr2k.c csyrk.c ctbmv.c ctbsv.c ctpmv.c \ ctpsv.c ctrmm.c ctrmv.c ctrsm.c ctrsv.c zaxpy.c zcopy.c \ zdotc_sub.c zdotu_sub.c zdscal.c zgbmv.c zgemm.c zgemv.c \ zgerc.c zgeru.c zhbmv.c zhemm.c zhemv.c zher.c zher2.c \ zher2k.c zherk.c zhpmv.c zhpr.c zhpr2.c zscal.c zswap.c \ zsymm.c zsyr2k.c zsyrk.c ztbmv.c ztbsv.c ztpmv.c ztpsv.c \ ztrmm.c ztrmv.c ztrsm.c ztrsv.c icamax.c idamax.c isamax.c \ izamax.c xerbla.c noinst_HEADERS = tests.c tests.h error_cblas.h error_cblas_l2.h \ error_cblas_l3.h cblas.h source_asum_c.h source_asum_r.h \ source_axpy_c.h source_axpy_r.h source_copy_c.h \ source_copy_r.h source_dot_c.h source_dot_r.h source_gbmv_c.h \ source_gbmv_r.h source_gemm_c.h source_gemm_r.h \ source_gemv_c.h source_gemv_r.h source_ger.h source_gerc.h \ source_geru.h source_hbmv.h source_hemm.h source_hemv.h \ source_her.h source_her2.h source_her2k.h source_herk.h \ source_hpmv.h source_hpr.h source_hpr2.h source_iamax_c.h \ source_iamax_r.h source_nrm2_c.h source_nrm2_r.h source_rot.h \ source_rotg.h source_rotm.h source_rotmg.h source_sbmv.h \ source_scal_c.h source_scal_c_s.h source_scal_r.h \ source_spmv.h source_spr.h source_spr2.h source_swap_c.h \ source_swap_r.h source_symm_c.h source_symm_r.h source_symv.h \ source_syr.h source_syr2.h source_syr2k_c.h source_syr2k_r.h \ source_syrk_c.h source_syrk_r.h source_tbmv_c.h \ source_tbmv_r.h source_tbsv_c.h source_tbsv_r.h \ source_tpmv_c.h source_tpmv_r.h source_tpsv_c.h \ source_tpsv_r.h source_trmm_c.h source_trmm_r.h \ source_trmv_c.h source_trmv_r.h source_trsm_c.h \ source_trsm_r.h source_trsv_c.h source_trsv_r.h hypot.c TESTS = $(check_PROGRAMS) test_LDADD = libgslcblas.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la test_SOURCES = test.c test_amax.c test_asum.c test_axpy.c test_copy.c test_dot.c test_gbmv.c test_gemm.c test_gemv.c test_ger.c test_hbmv.c test_hemm.c test_hemv.c test_her.c test_her2.c test_her2k.c test_herk.c test_hpmv.c test_hpr.c test_hpr2.c test_nrm2.c test_rot.c test_rotg.c test_rotm.c test_rotmg.c test_sbmv.c test_scal.c test_spmv.c test_spr.c test_spr2.c test_swap.c test_symm.c test_symv.c test_syr.c test_syr2.c test_syr2k.c test_syrk.c test_tbmv.c test_tbsv.c test_tpmv.c test_tpsv.c test_trmm.c test_trmv.c test_trsm.c test_trsv.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cblas/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu cblas/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslcblas.la: $(libgslcblas_la_OBJECTS) $(libgslcblas_la_DEPENDENCIES) $(EXTRA_libgslcblas_la_DEPENDENCIES) $(AM_V_CCLD)$(libgslcblas_la_LINK) -rpath $(libdir) $(libgslcblas_la_OBJECTS) $(libgslcblas_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/caxpy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccopy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdotc_sub.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdotu_sub.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cgbmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cgemm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cgemv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cgerc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cgeru.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chbmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chemm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chemv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cher.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cher2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cher2k.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cherk.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chpmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chpr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chpr2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cscal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csscal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cswap.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csymm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csyr2k.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csyrk.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctbmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctbsv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctpmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctpsv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctrmm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctrmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctrsm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctrsv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dasum.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daxpy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dcopy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ddot.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dgbmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dgemm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dgemv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dger.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dnrm2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drot.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drotg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drotm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drotmg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsbmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dscal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsdot.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dspmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dspr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dspr2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dswap.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsymm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsymv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsyr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsyr2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsyr2k.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsyrk.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtbmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtbsv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtpmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtpsv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtrmm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtrmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtrsm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtrsv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dzasum.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dznrm2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icamax.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/idamax.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isamax.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/izamax.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sasum.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saxpy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scasum.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scnrm2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scopy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdot.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdsdot.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sgbmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sgemm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sgemv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sger.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snrm2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srot.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srotg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srotm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srotmg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssbmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sscal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sspmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sspr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sspr2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sswap.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssymm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssymv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssyr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssyr2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssyr2k.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssyrk.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stbmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stbsv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stpmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stpsv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strmm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strsm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strsv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_amax.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_asum.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_axpy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_copy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_dot.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_gbmv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_gemm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_gemv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ger.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hbmv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hemm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hemv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_her.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_her2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_her2k.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_herk.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hpmv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hpr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hpr2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_nrm2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_rot.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_rotg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_rotm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_rotmg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_sbmv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_scal.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_spmv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_spr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_spr2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_swap.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_symm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_symv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_syr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_syr2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_syr2k.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_syrk.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_tbmv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_tbsv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_tpmv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_tpsv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_trmm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_trmv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_trsm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_trsv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xerbla.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zaxpy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zcopy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zdotc_sub.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zdotu_sub.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zdscal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zgbmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zgemm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zgemv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zgerc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zgeru.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zhbmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zhemm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zhemv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zher.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zher2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zher2k.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zherk.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zhpmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zhpr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zhpr2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zscal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zswap.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zsymm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zsyr2k.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zsyrk.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ztbmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ztbsv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ztpmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ztpsv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ztrmm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ztrmv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ztrsm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ztrsv.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/caxpy.Plo -rm -f ./$(DEPDIR)/ccopy.Plo -rm -f ./$(DEPDIR)/cdotc_sub.Plo -rm -f ./$(DEPDIR)/cdotu_sub.Plo -rm -f ./$(DEPDIR)/cgbmv.Plo -rm -f ./$(DEPDIR)/cgemm.Plo -rm -f ./$(DEPDIR)/cgemv.Plo -rm -f ./$(DEPDIR)/cgerc.Plo -rm -f ./$(DEPDIR)/cgeru.Plo -rm -f ./$(DEPDIR)/chbmv.Plo -rm -f ./$(DEPDIR)/chemm.Plo -rm -f ./$(DEPDIR)/chemv.Plo -rm -f ./$(DEPDIR)/cher.Plo -rm -f ./$(DEPDIR)/cher2.Plo -rm -f ./$(DEPDIR)/cher2k.Plo -rm -f ./$(DEPDIR)/cherk.Plo -rm -f ./$(DEPDIR)/chpmv.Plo -rm -f ./$(DEPDIR)/chpr.Plo -rm -f ./$(DEPDIR)/chpr2.Plo -rm -f ./$(DEPDIR)/cscal.Plo -rm -f ./$(DEPDIR)/csscal.Plo -rm -f ./$(DEPDIR)/cswap.Plo -rm -f ./$(DEPDIR)/csymm.Plo -rm -f ./$(DEPDIR)/csyr2k.Plo -rm -f ./$(DEPDIR)/csyrk.Plo -rm -f ./$(DEPDIR)/ctbmv.Plo -rm -f ./$(DEPDIR)/ctbsv.Plo -rm -f ./$(DEPDIR)/ctpmv.Plo -rm -f ./$(DEPDIR)/ctpsv.Plo -rm -f ./$(DEPDIR)/ctrmm.Plo -rm -f ./$(DEPDIR)/ctrmv.Plo -rm -f ./$(DEPDIR)/ctrsm.Plo -rm -f ./$(DEPDIR)/ctrsv.Plo -rm -f ./$(DEPDIR)/dasum.Plo -rm -f ./$(DEPDIR)/daxpy.Plo -rm -f ./$(DEPDIR)/dcopy.Plo -rm -f ./$(DEPDIR)/ddot.Plo -rm -f ./$(DEPDIR)/dgbmv.Plo -rm -f ./$(DEPDIR)/dgemm.Plo -rm -f ./$(DEPDIR)/dgemv.Plo -rm -f ./$(DEPDIR)/dger.Plo -rm -f ./$(DEPDIR)/dnrm2.Plo -rm -f ./$(DEPDIR)/drot.Plo -rm -f ./$(DEPDIR)/drotg.Plo -rm -f ./$(DEPDIR)/drotm.Plo -rm -f ./$(DEPDIR)/drotmg.Plo -rm -f ./$(DEPDIR)/dsbmv.Plo -rm -f ./$(DEPDIR)/dscal.Plo -rm -f ./$(DEPDIR)/dsdot.Plo -rm -f ./$(DEPDIR)/dspmv.Plo -rm -f ./$(DEPDIR)/dspr.Plo -rm -f ./$(DEPDIR)/dspr2.Plo -rm -f ./$(DEPDIR)/dswap.Plo -rm -f ./$(DEPDIR)/dsymm.Plo -rm -f ./$(DEPDIR)/dsymv.Plo -rm -f ./$(DEPDIR)/dsyr.Plo -rm -f ./$(DEPDIR)/dsyr2.Plo -rm -f ./$(DEPDIR)/dsyr2k.Plo -rm -f ./$(DEPDIR)/dsyrk.Plo -rm -f ./$(DEPDIR)/dtbmv.Plo -rm -f ./$(DEPDIR)/dtbsv.Plo -rm -f ./$(DEPDIR)/dtpmv.Plo -rm -f ./$(DEPDIR)/dtpsv.Plo -rm -f ./$(DEPDIR)/dtrmm.Plo -rm -f ./$(DEPDIR)/dtrmv.Plo -rm -f ./$(DEPDIR)/dtrsm.Plo -rm -f ./$(DEPDIR)/dtrsv.Plo -rm -f ./$(DEPDIR)/dzasum.Plo -rm -f ./$(DEPDIR)/dznrm2.Plo -rm -f ./$(DEPDIR)/icamax.Plo -rm -f ./$(DEPDIR)/idamax.Plo -rm -f ./$(DEPDIR)/isamax.Plo -rm -f ./$(DEPDIR)/izamax.Plo -rm -f ./$(DEPDIR)/sasum.Plo -rm -f ./$(DEPDIR)/saxpy.Plo -rm -f ./$(DEPDIR)/scasum.Plo -rm -f ./$(DEPDIR)/scnrm2.Plo -rm -f ./$(DEPDIR)/scopy.Plo -rm -f ./$(DEPDIR)/sdot.Plo -rm -f ./$(DEPDIR)/sdsdot.Plo -rm -f ./$(DEPDIR)/sgbmv.Plo -rm -f ./$(DEPDIR)/sgemm.Plo -rm -f ./$(DEPDIR)/sgemv.Plo -rm -f ./$(DEPDIR)/sger.Plo -rm -f ./$(DEPDIR)/snrm2.Plo -rm -f ./$(DEPDIR)/srot.Plo -rm -f ./$(DEPDIR)/srotg.Plo -rm -f ./$(DEPDIR)/srotm.Plo -rm -f ./$(DEPDIR)/srotmg.Plo -rm -f ./$(DEPDIR)/ssbmv.Plo -rm -f ./$(DEPDIR)/sscal.Plo -rm -f ./$(DEPDIR)/sspmv.Plo -rm -f ./$(DEPDIR)/sspr.Plo -rm -f ./$(DEPDIR)/sspr2.Plo -rm -f ./$(DEPDIR)/sswap.Plo -rm -f ./$(DEPDIR)/ssymm.Plo -rm -f ./$(DEPDIR)/ssymv.Plo -rm -f ./$(DEPDIR)/ssyr.Plo -rm -f ./$(DEPDIR)/ssyr2.Plo -rm -f ./$(DEPDIR)/ssyr2k.Plo -rm -f ./$(DEPDIR)/ssyrk.Plo -rm -f ./$(DEPDIR)/stbmv.Plo -rm -f ./$(DEPDIR)/stbsv.Plo -rm -f ./$(DEPDIR)/stpmv.Plo -rm -f ./$(DEPDIR)/stpsv.Plo -rm -f ./$(DEPDIR)/strmm.Plo -rm -f ./$(DEPDIR)/strmv.Plo -rm -f ./$(DEPDIR)/strsm.Plo -rm -f ./$(DEPDIR)/strsv.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_amax.Po -rm -f ./$(DEPDIR)/test_asum.Po -rm -f ./$(DEPDIR)/test_axpy.Po -rm -f ./$(DEPDIR)/test_copy.Po -rm -f ./$(DEPDIR)/test_dot.Po -rm -f ./$(DEPDIR)/test_gbmv.Po -rm -f ./$(DEPDIR)/test_gemm.Po -rm -f ./$(DEPDIR)/test_gemv.Po -rm -f ./$(DEPDIR)/test_ger.Po -rm -f ./$(DEPDIR)/test_hbmv.Po -rm -f ./$(DEPDIR)/test_hemm.Po -rm -f ./$(DEPDIR)/test_hemv.Po -rm -f ./$(DEPDIR)/test_her.Po -rm -f ./$(DEPDIR)/test_her2.Po -rm -f ./$(DEPDIR)/test_her2k.Po -rm -f ./$(DEPDIR)/test_herk.Po -rm -f ./$(DEPDIR)/test_hpmv.Po -rm -f ./$(DEPDIR)/test_hpr.Po -rm -f ./$(DEPDIR)/test_hpr2.Po -rm -f ./$(DEPDIR)/test_nrm2.Po -rm -f ./$(DEPDIR)/test_rot.Po -rm -f ./$(DEPDIR)/test_rotg.Po -rm -f ./$(DEPDIR)/test_rotm.Po -rm -f ./$(DEPDIR)/test_rotmg.Po -rm -f ./$(DEPDIR)/test_sbmv.Po -rm -f ./$(DEPDIR)/test_scal.Po -rm -f ./$(DEPDIR)/test_spmv.Po -rm -f ./$(DEPDIR)/test_spr.Po -rm -f ./$(DEPDIR)/test_spr2.Po -rm -f ./$(DEPDIR)/test_swap.Po -rm -f ./$(DEPDIR)/test_symm.Po -rm -f ./$(DEPDIR)/test_symv.Po -rm -f ./$(DEPDIR)/test_syr.Po -rm -f ./$(DEPDIR)/test_syr2.Po -rm -f ./$(DEPDIR)/test_syr2k.Po -rm -f ./$(DEPDIR)/test_syrk.Po -rm -f ./$(DEPDIR)/test_tbmv.Po -rm -f ./$(DEPDIR)/test_tbsv.Po -rm -f ./$(DEPDIR)/test_tpmv.Po -rm -f ./$(DEPDIR)/test_tpsv.Po -rm -f ./$(DEPDIR)/test_trmm.Po -rm -f ./$(DEPDIR)/test_trmv.Po -rm -f ./$(DEPDIR)/test_trsm.Po -rm -f ./$(DEPDIR)/test_trsv.Po -rm -f ./$(DEPDIR)/xerbla.Plo -rm -f ./$(DEPDIR)/zaxpy.Plo -rm -f ./$(DEPDIR)/zcopy.Plo -rm -f ./$(DEPDIR)/zdotc_sub.Plo -rm -f ./$(DEPDIR)/zdotu_sub.Plo -rm -f ./$(DEPDIR)/zdscal.Plo -rm -f ./$(DEPDIR)/zgbmv.Plo -rm -f ./$(DEPDIR)/zgemm.Plo -rm -f ./$(DEPDIR)/zgemv.Plo -rm -f ./$(DEPDIR)/zgerc.Plo -rm -f ./$(DEPDIR)/zgeru.Plo -rm -f ./$(DEPDIR)/zhbmv.Plo -rm -f ./$(DEPDIR)/zhemm.Plo -rm -f ./$(DEPDIR)/zhemv.Plo -rm -f ./$(DEPDIR)/zher.Plo -rm -f ./$(DEPDIR)/zher2.Plo -rm -f ./$(DEPDIR)/zher2k.Plo -rm -f ./$(DEPDIR)/zherk.Plo -rm -f ./$(DEPDIR)/zhpmv.Plo -rm -f ./$(DEPDIR)/zhpr.Plo -rm -f ./$(DEPDIR)/zhpr2.Plo -rm -f ./$(DEPDIR)/zscal.Plo -rm -f ./$(DEPDIR)/zswap.Plo -rm -f ./$(DEPDIR)/zsymm.Plo -rm -f ./$(DEPDIR)/zsyr2k.Plo -rm -f ./$(DEPDIR)/zsyrk.Plo -rm -f ./$(DEPDIR)/ztbmv.Plo -rm -f ./$(DEPDIR)/ztbsv.Plo -rm -f ./$(DEPDIR)/ztpmv.Plo -rm -f ./$(DEPDIR)/ztpsv.Plo -rm -f ./$(DEPDIR)/ztrmm.Plo -rm -f ./$(DEPDIR)/ztrmv.Plo -rm -f ./$(DEPDIR)/ztrsm.Plo -rm -f ./$(DEPDIR)/ztrsv.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/caxpy.Plo -rm -f ./$(DEPDIR)/ccopy.Plo -rm -f ./$(DEPDIR)/cdotc_sub.Plo -rm -f ./$(DEPDIR)/cdotu_sub.Plo -rm -f ./$(DEPDIR)/cgbmv.Plo -rm -f ./$(DEPDIR)/cgemm.Plo -rm -f ./$(DEPDIR)/cgemv.Plo -rm -f ./$(DEPDIR)/cgerc.Plo -rm -f ./$(DEPDIR)/cgeru.Plo -rm -f ./$(DEPDIR)/chbmv.Plo -rm -f ./$(DEPDIR)/chemm.Plo -rm -f ./$(DEPDIR)/chemv.Plo -rm -f ./$(DEPDIR)/cher.Plo -rm -f ./$(DEPDIR)/cher2.Plo -rm -f ./$(DEPDIR)/cher2k.Plo -rm -f ./$(DEPDIR)/cherk.Plo -rm -f ./$(DEPDIR)/chpmv.Plo -rm -f ./$(DEPDIR)/chpr.Plo -rm -f ./$(DEPDIR)/chpr2.Plo -rm -f ./$(DEPDIR)/cscal.Plo -rm -f ./$(DEPDIR)/csscal.Plo -rm -f ./$(DEPDIR)/cswap.Plo -rm -f ./$(DEPDIR)/csymm.Plo -rm -f ./$(DEPDIR)/csyr2k.Plo -rm -f ./$(DEPDIR)/csyrk.Plo -rm -f ./$(DEPDIR)/ctbmv.Plo -rm -f ./$(DEPDIR)/ctbsv.Plo -rm -f ./$(DEPDIR)/ctpmv.Plo -rm -f ./$(DEPDIR)/ctpsv.Plo -rm -f ./$(DEPDIR)/ctrmm.Plo -rm -f ./$(DEPDIR)/ctrmv.Plo -rm -f ./$(DEPDIR)/ctrsm.Plo -rm -f ./$(DEPDIR)/ctrsv.Plo -rm -f ./$(DEPDIR)/dasum.Plo -rm -f ./$(DEPDIR)/daxpy.Plo -rm -f ./$(DEPDIR)/dcopy.Plo -rm -f ./$(DEPDIR)/ddot.Plo -rm -f ./$(DEPDIR)/dgbmv.Plo -rm -f ./$(DEPDIR)/dgemm.Plo -rm -f ./$(DEPDIR)/dgemv.Plo -rm -f ./$(DEPDIR)/dger.Plo -rm -f ./$(DEPDIR)/dnrm2.Plo -rm -f ./$(DEPDIR)/drot.Plo -rm -f ./$(DEPDIR)/drotg.Plo -rm -f ./$(DEPDIR)/drotm.Plo -rm -f ./$(DEPDIR)/drotmg.Plo -rm -f ./$(DEPDIR)/dsbmv.Plo -rm -f ./$(DEPDIR)/dscal.Plo -rm -f ./$(DEPDIR)/dsdot.Plo -rm -f ./$(DEPDIR)/dspmv.Plo -rm -f ./$(DEPDIR)/dspr.Plo -rm -f ./$(DEPDIR)/dspr2.Plo -rm -f ./$(DEPDIR)/dswap.Plo -rm -f ./$(DEPDIR)/dsymm.Plo -rm -f ./$(DEPDIR)/dsymv.Plo -rm -f ./$(DEPDIR)/dsyr.Plo -rm -f ./$(DEPDIR)/dsyr2.Plo -rm -f ./$(DEPDIR)/dsyr2k.Plo -rm -f ./$(DEPDIR)/dsyrk.Plo -rm -f ./$(DEPDIR)/dtbmv.Plo -rm -f ./$(DEPDIR)/dtbsv.Plo -rm -f ./$(DEPDIR)/dtpmv.Plo -rm -f ./$(DEPDIR)/dtpsv.Plo -rm -f ./$(DEPDIR)/dtrmm.Plo -rm -f ./$(DEPDIR)/dtrmv.Plo -rm -f ./$(DEPDIR)/dtrsm.Plo -rm -f ./$(DEPDIR)/dtrsv.Plo -rm -f ./$(DEPDIR)/dzasum.Plo -rm -f ./$(DEPDIR)/dznrm2.Plo -rm -f ./$(DEPDIR)/icamax.Plo -rm -f ./$(DEPDIR)/idamax.Plo -rm -f ./$(DEPDIR)/isamax.Plo -rm -f ./$(DEPDIR)/izamax.Plo -rm -f ./$(DEPDIR)/sasum.Plo -rm -f ./$(DEPDIR)/saxpy.Plo -rm -f ./$(DEPDIR)/scasum.Plo -rm -f ./$(DEPDIR)/scnrm2.Plo -rm -f ./$(DEPDIR)/scopy.Plo -rm -f ./$(DEPDIR)/sdot.Plo -rm -f ./$(DEPDIR)/sdsdot.Plo -rm -f ./$(DEPDIR)/sgbmv.Plo -rm -f ./$(DEPDIR)/sgemm.Plo -rm -f ./$(DEPDIR)/sgemv.Plo -rm -f ./$(DEPDIR)/sger.Plo -rm -f ./$(DEPDIR)/snrm2.Plo -rm -f ./$(DEPDIR)/srot.Plo -rm -f ./$(DEPDIR)/srotg.Plo -rm -f ./$(DEPDIR)/srotm.Plo -rm -f ./$(DEPDIR)/srotmg.Plo -rm -f ./$(DEPDIR)/ssbmv.Plo -rm -f ./$(DEPDIR)/sscal.Plo -rm -f ./$(DEPDIR)/sspmv.Plo -rm -f ./$(DEPDIR)/sspr.Plo -rm -f ./$(DEPDIR)/sspr2.Plo -rm -f ./$(DEPDIR)/sswap.Plo -rm -f ./$(DEPDIR)/ssymm.Plo -rm -f ./$(DEPDIR)/ssymv.Plo -rm -f ./$(DEPDIR)/ssyr.Plo -rm -f ./$(DEPDIR)/ssyr2.Plo -rm -f ./$(DEPDIR)/ssyr2k.Plo -rm -f ./$(DEPDIR)/ssyrk.Plo -rm -f ./$(DEPDIR)/stbmv.Plo -rm -f ./$(DEPDIR)/stbsv.Plo -rm -f ./$(DEPDIR)/stpmv.Plo -rm -f ./$(DEPDIR)/stpsv.Plo -rm -f ./$(DEPDIR)/strmm.Plo -rm -f ./$(DEPDIR)/strmv.Plo -rm -f ./$(DEPDIR)/strsm.Plo -rm -f ./$(DEPDIR)/strsv.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_amax.Po -rm -f ./$(DEPDIR)/test_asum.Po -rm -f ./$(DEPDIR)/test_axpy.Po -rm -f ./$(DEPDIR)/test_copy.Po -rm -f ./$(DEPDIR)/test_dot.Po -rm -f ./$(DEPDIR)/test_gbmv.Po -rm -f ./$(DEPDIR)/test_gemm.Po -rm -f ./$(DEPDIR)/test_gemv.Po -rm -f ./$(DEPDIR)/test_ger.Po -rm -f ./$(DEPDIR)/test_hbmv.Po -rm -f ./$(DEPDIR)/test_hemm.Po -rm -f ./$(DEPDIR)/test_hemv.Po -rm -f ./$(DEPDIR)/test_her.Po -rm -f ./$(DEPDIR)/test_her2.Po -rm -f ./$(DEPDIR)/test_her2k.Po -rm -f ./$(DEPDIR)/test_herk.Po -rm -f ./$(DEPDIR)/test_hpmv.Po -rm -f ./$(DEPDIR)/test_hpr.Po -rm -f ./$(DEPDIR)/test_hpr2.Po -rm -f ./$(DEPDIR)/test_nrm2.Po -rm -f ./$(DEPDIR)/test_rot.Po -rm -f ./$(DEPDIR)/test_rotg.Po -rm -f ./$(DEPDIR)/test_rotm.Po -rm -f ./$(DEPDIR)/test_rotmg.Po -rm -f ./$(DEPDIR)/test_sbmv.Po -rm -f ./$(DEPDIR)/test_scal.Po -rm -f ./$(DEPDIR)/test_spmv.Po -rm -f ./$(DEPDIR)/test_spr.Po -rm -f ./$(DEPDIR)/test_spr2.Po -rm -f ./$(DEPDIR)/test_swap.Po -rm -f ./$(DEPDIR)/test_symm.Po -rm -f ./$(DEPDIR)/test_symv.Po -rm -f ./$(DEPDIR)/test_syr.Po -rm -f ./$(DEPDIR)/test_syr2.Po -rm -f ./$(DEPDIR)/test_syr2k.Po -rm -f ./$(DEPDIR)/test_syrk.Po -rm -f ./$(DEPDIR)/test_tbmv.Po -rm -f ./$(DEPDIR)/test_tbsv.Po -rm -f ./$(DEPDIR)/test_tpmv.Po -rm -f ./$(DEPDIR)/test_tpsv.Po -rm -f ./$(DEPDIR)/test_trmm.Po -rm -f ./$(DEPDIR)/test_trmv.Po -rm -f ./$(DEPDIR)/test_trsm.Po -rm -f ./$(DEPDIR)/test_trsv.Po -rm -f ./$(DEPDIR)/xerbla.Plo -rm -f ./$(DEPDIR)/zaxpy.Plo -rm -f ./$(DEPDIR)/zcopy.Plo -rm -f ./$(DEPDIR)/zdotc_sub.Plo -rm -f ./$(DEPDIR)/zdotu_sub.Plo -rm -f ./$(DEPDIR)/zdscal.Plo -rm -f ./$(DEPDIR)/zgbmv.Plo -rm -f ./$(DEPDIR)/zgemm.Plo -rm -f ./$(DEPDIR)/zgemv.Plo -rm -f ./$(DEPDIR)/zgerc.Plo -rm -f ./$(DEPDIR)/zgeru.Plo -rm -f ./$(DEPDIR)/zhbmv.Plo -rm -f ./$(DEPDIR)/zhemm.Plo -rm -f ./$(DEPDIR)/zhemv.Plo -rm -f ./$(DEPDIR)/zher.Plo -rm -f ./$(DEPDIR)/zher2.Plo -rm -f ./$(DEPDIR)/zher2k.Plo -rm -f ./$(DEPDIR)/zherk.Plo -rm -f ./$(DEPDIR)/zhpmv.Plo -rm -f ./$(DEPDIR)/zhpr.Plo -rm -f ./$(DEPDIR)/zhpr2.Plo -rm -f ./$(DEPDIR)/zscal.Plo -rm -f ./$(DEPDIR)/zswap.Plo -rm -f ./$(DEPDIR)/zsymm.Plo -rm -f ./$(DEPDIR)/zsyr2k.Plo -rm -f ./$(DEPDIR)/zsyrk.Plo -rm -f ./$(DEPDIR)/ztbmv.Plo -rm -f ./$(DEPDIR)/ztbsv.Plo -rm -f ./$(DEPDIR)/ztpmv.Plo -rm -f ./$(DEPDIR)/ztpsv.Plo -rm -f ./$(DEPDIR)/ztrmm.Plo -rm -f ./$(DEPDIR)/ztrmv.Plo -rm -f ./$(DEPDIR)/ztrsm.Plo -rm -f ./$(DEPDIR)/ztrsv.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-pkgincludeHEADERS install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \ uninstall uninstall-am uninstall-libLTLIBRARIES \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/cblas/test_gbmv.c0000644000175000017500000004602413536674414013162 0ustar eddedd#include #include #include #include #include "tests.h" void test_gbmv (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int trans = 111; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; float alpha = -1.0f; float beta = -1.0f; float A[] = { 0.423f, -0.143f, -0.182f, -0.076f, -0.855f, 0.599f, 0.389f, -0.473f, 0.493f, -0.902f, -0.889f, -0.256f, 0.112f, 0.128f, -0.277f, -0.777f }; float X[] = { 0.488f, 0.029f, -0.633f, 0.84f }; int incX = -1; float Y[] = { 0.874f, 0.322f, -0.477f }; int incY = -1; float y_expected[] = { -0.101941f, 0.764086f, 0.481914f }; cblas_sgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sgbmv(case 794)"); } }; }; { int order = 102; int trans = 111; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; float alpha = -1.0f; float beta = -1.0f; float A[] = { 0.423f, -0.143f, -0.182f, -0.076f, -0.855f, 0.599f, 0.389f, -0.473f, 0.493f, -0.902f, -0.889f, -0.256f, 0.112f, 0.128f, -0.277f, -0.777f }; float X[] = { 0.488f, 0.029f, -0.633f, 0.84f }; int incX = -1; float Y[] = { 0.874f, 0.322f, -0.477f }; int incY = -1; float y_expected[] = { -0.656261f, 0.19575f, 0.055905f }; cblas_sgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sgbmv(case 795)"); } }; }; { int order = 101; int trans = 112; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; float alpha = 0.0f; float beta = 0.1f; float A[] = { -0.066f, -0.153f, -0.619f, 0.174f, 0.777f, 0.543f, 0.614f, -0.446f, -0.138f, -0.767f, 0.725f, 0.222f, 0.165f, -0.063f, -0.047f, 0.267f }; float X[] = { -0.096f, -0.007f, -0.657f }; int incX = -1; float Y[] = { -0.88f, 0.102f, -0.278f, 0.403f }; int incY = -1; float y_expected[] = { -0.088f, 0.0102f, -0.0278f, 0.0403f }; cblas_sgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sgbmv(case 796)"); } }; }; { int order = 102; int trans = 112; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; float alpha = 0.0f; float beta = 0.1f; float A[] = { -0.066f, -0.153f, -0.619f, 0.174f, 0.777f, 0.543f, 0.614f, -0.446f, -0.138f, -0.767f, 0.725f, 0.222f, 0.165f, -0.063f, -0.047f, 0.267f }; float X[] = { -0.096f, -0.007f, -0.657f }; int incX = -1; float Y[] = { -0.88f, 0.102f, -0.278f, 0.403f }; int incY = -1; float y_expected[] = { -0.088f, 0.0102f, -0.0278f, 0.0403f }; cblas_sgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sgbmv(case 797)"); } }; }; { int order = 101; int trans = 111; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; double alpha = 0.1; double beta = 0; double A[] = { -0.688, 0.29, 0.442, -0.001, 0.313, -0.073, 0.991, -0.654, -0.12, 0.416, 0.571, 0.932, -0.179, -0.724, 0.492, -0.965 }; double X[] = { 0.187, -0.338, -0.976, -0.052 }; int incX = -1; double Y[] = { -0.101, 0.8, 0.026 }; int incY = -1; double y_expected[] = { 0.0083289, -0.0279986, -0.0446472 }; cblas_dgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dgbmv(case 798)"); } }; }; { int order = 102; int trans = 111; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; double alpha = 0.1; double beta = 0; double A[] = { -0.688, 0.29, 0.442, -0.001, 0.313, -0.073, 0.991, -0.654, -0.12, 0.416, 0.571, 0.932, -0.179, -0.724, 0.492, -0.965 }; double X[] = { 0.187, -0.338, -0.976, -0.052 }; int incX = -1; double Y[] = { -0.101, 0.8, 0.026 }; int incY = -1; double y_expected[] = { -0.1141297, 0.0088824, -0.0320568 }; cblas_dgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dgbmv(case 799)"); } }; }; { int order = 101; int trans = 112; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; double alpha = -0.3; double beta = -0.3; double A[] = { 0.746, 0.262, -0.449, -0.954, -0.093, 0.108, -0.496, 0.927, 0.177, 0.729, -0.92, -0.469, 0.87, -0.877, -0.308, -0.806 }; double X[] = { 0.662, -0.887, 0.261 }; int incX = -1; double Y[] = { 0.771, 0.637, -0.177, -0.018 }; int incY = -1; double y_expected[] = { -0.048588, -0.467865, 0.0818433, -0.0398619 }; cblas_dgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dgbmv(case 800)"); } }; }; { int order = 102; int trans = 112; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; double alpha = -0.3; double beta = -0.3; double A[] = { 0.746, 0.262, -0.449, -0.954, -0.093, 0.108, -0.496, 0.927, 0.177, 0.729, -0.92, -0.469, 0.87, -0.877, -0.308, -0.806 }; double X[] = { 0.662, -0.887, 0.261 }; int incX = -1; double Y[] = { 0.771, 0.637, -0.177, -0.018 }; int incY = -1; double y_expected[] = { -0.404082, -0.2887797, 0.1876263, -0.1345935 }; cblas_dgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dgbmv(case 801)"); } }; }; { int order = 101; int trans = 111; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {0.0f, 0.1f}; float A[] = { -0.107f, 0.926f, -0.246f, -0.555f, -0.301f, 0.276f, 0.471f, -0.084f, -0.754f, 0.082f, -0.952f, -0.394f, 0.659f, 0.054f, 0.795f, 0.923f, 0.232f, -0.788f, 0.478f, 0.775f, -0.118f, 0.691f, -0.933f, 0.809f, 0.164f, -0.263f, -0.923f, -0.88f, 0.819f, -0.521f, -0.045f, 0.034f }; float X[] = { 0.407f, 0.895f, 0.301f, 0.769f, -0.269f, -0.465f, 0.455f, -0.628f }; int incX = -1; float Y[] = { -0.116f, -0.744f, -0.936f, -0.064f, -0.232f, -0.665f }; int incY = -1; float y_expected[] = { -0.806176f, -1.559f, -1.57611f, -0.155463f, 0.098816f, -0.274361f }; cblas_cgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "cgbmv(case 802) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "cgbmv(case 802) imag"); }; }; }; { int order = 102; int trans = 111; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {0.0f, 0.1f}; float A[] = { -0.107f, 0.926f, -0.246f, -0.555f, -0.301f, 0.276f, 0.471f, -0.084f, -0.754f, 0.082f, -0.952f, -0.394f, 0.659f, 0.054f, 0.795f, 0.923f, 0.232f, -0.788f, 0.478f, 0.775f, -0.118f, 0.691f, -0.933f, 0.809f, 0.164f, -0.263f, -0.923f, -0.88f, 0.819f, -0.521f, -0.045f, 0.034f }; float X[] = { 0.407f, 0.895f, 0.301f, 0.769f, -0.269f, -0.465f, 0.455f, -0.628f }; int incX = -1; float Y[] = { -0.116f, -0.744f, -0.936f, -0.064f, -0.232f, -0.665f }; int incY = -1; float y_expected[] = { -0.245235f, -0.313725f, -0.798094f, 0.691455f, -0.164015f, -0.242714f }; cblas_cgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "cgbmv(case 803) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "cgbmv(case 803) imag"); }; }; }; { int order = 101; int trans = 112; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; float alpha[2] = {-1.0f, 0.0f}; float beta[2] = {0.0f, 0.1f}; float A[] = { -0.258f, 0.838f, -0.106f, -0.066f, 0.395f, 0.982f, -0.546f, 0.565f, 0.14f, -0.18f, 0.165f, -0.186f, 0.499f, -0.038f, -0.305f, -0.653f, -0.811f, -0.466f, -0.674f, -0.013f, -0.552f, -0.807f, -0.536f, 0.864f, -0.027f, -0.606f, 0.459f, 0.564f, -0.968f, 0.717f, -0.312f, -0.485f }; float X[] = { -0.399f, 0.459f, 0.398f, 0.358f, -0.161f, -0.359f }; int incX = -1; float Y[] = { 0.572f, 0.293f, -0.813f, -0.096f, -0.611f, -0.717f, 0.736f, 0.259f }; int incY = -1; float y_expected[] = { -0.619961f, -0.011425f, -0.477499f, 0.059361f, -0.886984f, 0.44008f, -0.139432f, 0.04644f }; cblas_cgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "cgbmv(case 804) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "cgbmv(case 804) imag"); }; }; }; { int order = 102; int trans = 112; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; float alpha[2] = {-1.0f, 0.0f}; float beta[2] = {0.0f, 0.1f}; float A[] = { -0.258f, 0.838f, -0.106f, -0.066f, 0.395f, 0.982f, -0.546f, 0.565f, 0.14f, -0.18f, 0.165f, -0.186f, 0.499f, -0.038f, -0.305f, -0.653f, -0.811f, -0.466f, -0.674f, -0.013f, -0.552f, -0.807f, -0.536f, 0.864f, -0.027f, -0.606f, 0.459f, 0.564f, -0.968f, 0.717f, -0.312f, -0.485f }; float X[] = { -0.399f, 0.459f, 0.398f, 0.358f, -0.161f, -0.359f }; int incX = -1; float Y[] = { 0.572f, 0.293f, -0.813f, -0.096f, -0.611f, -0.717f, 0.736f, 0.259f }; int incY = -1; float y_expected[] = { -0.318227f, -0.172201f, -0.109343f, 0.698685f, 0.208261f, -0.269065f, 0.175074f, -0.507326f }; cblas_cgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "cgbmv(case 805) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "cgbmv(case 805) imag"); }; }; }; { int order = 101; int trans = 113; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; float alpha[2] = {-1.0f, 0.0f}; float beta[2] = {0.0f, 0.1f}; float A[] = { -0.804f, 0.232f, -0.448f, -0.558f, -0.078f, -0.056f, -0.345f, -0.379f, 0.369f, -0.662f, -0.169f, -0.391f, -0.215f, 0.467f, 0.374f, 0.889f, -0.698f, 0.734f, 0.377f, -0.955f, 0.498f, 0.151f, -0.725f, -0.728f, -0.655f, -0.581f, 0.389f, 0.949f, -0.553f, -0.434f, 0.237f, 0.641f }; float X[] = { -0.262f, -0.823f, -0.357f, -0.994f, -0.347f, -0.375f }; int incX = -1; float Y[] = { -0.683f, -0.87f, -0.708f, 0.071f, 0.575f, -0.575f, 0.845f, 0.032f }; int incY = -1; float y_expected[] = { 0.341749f, 0.301992f, -0.306848f, 0.109252f, -0.018347f, -0.747479f, -0.894201f, 0.713246f }; cblas_cgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "cgbmv(case 806) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "cgbmv(case 806) imag"); }; }; }; { int order = 102; int trans = 113; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; float alpha[2] = {-1.0f, 0.0f}; float beta[2] = {0.0f, 0.1f}; float A[] = { -0.804f, 0.232f, -0.448f, -0.558f, -0.078f, -0.056f, -0.345f, -0.379f, 0.369f, -0.662f, -0.169f, -0.391f, -0.215f, 0.467f, 0.374f, 0.889f, -0.698f, 0.734f, 0.377f, -0.955f, 0.498f, 0.151f, -0.725f, -0.728f, -0.655f, -0.581f, 0.389f, 0.949f, -0.553f, -0.434f, 0.237f, 0.641f }; float X[] = { -0.262f, -0.823f, -0.357f, -0.994f, -0.347f, -0.375f }; int incX = -1; float Y[] = { -0.683f, -0.87f, -0.708f, 0.071f, 0.575f, -0.575f, 0.845f, 0.032f }; int incY = -1; float y_expected[] = { -0.562773f, -0.455143f, -0.213881f, -0.466169f, -0.183683f, 0.097891f, -0.451416f, 0.052586f }; cblas_cgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "cgbmv(case 807) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "cgbmv(case 807) imag"); }; }; }; { int order = 101; int trans = 111; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; double alpha[2] = {0, 0.1}; double beta[2] = {1, 0}; double A[] = { -0.919, -0.002, 0.105, -0.338, -0.358, -0.715, -0.157, 0.307, 0.334, 0.121, 0.366, 0.029, -0.006, -0.662, -0.314, 0.061, -0.322, -0.865, -0.586, 0.556, 0.507, 0.581, 0.855, -0.09, 0.836, -0.788, -0.209, -0.694, -0.695, 0.11, -0.234, 0.17 }; double X[] = { 0.356, -0.76, -0.96, 0.437, -0.849, 0.397, -0.382, -0.826 }; int incX = -1; double Y[] = { 0.288, -0.832, 0.889, 0.576, -0.809, 0.4 }; int incY = -1; double y_expected[] = { 0.3241775, -0.6761577, 0.8458527, 0.5705165, -0.8597295, 0.4268499 }; cblas_zgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zgbmv(case 808) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zgbmv(case 808) imag"); }; }; }; { int order = 102; int trans = 111; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; double alpha[2] = {0, 0.1}; double beta[2] = {1, 0}; double A[] = { -0.919, -0.002, 0.105, -0.338, -0.358, -0.715, -0.157, 0.307, 0.334, 0.121, 0.366, 0.029, -0.006, -0.662, -0.314, 0.061, -0.322, -0.865, -0.586, 0.556, 0.507, 0.581, 0.855, -0.09, 0.836, -0.788, -0.209, -0.694, -0.695, 0.11, -0.234, 0.17 }; double X[] = { 0.356, -0.76, -0.96, 0.437, -0.849, 0.397, -0.382, -0.826 }; int incX = -1; double Y[] = { 0.288, -0.832, 0.889, 0.576, -0.809, 0.4 }; int incY = -1; double y_expected[] = { 0.4026074, -0.8033768, 0.7510795, 0.5671044, -0.8162255, 0.3349099 }; cblas_zgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zgbmv(case 809) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zgbmv(case 809) imag"); }; }; }; { int order = 101; int trans = 112; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; double alpha[2] = {1, 0}; double beta[2] = {1, 0}; double A[] = { 0.511, -0.707, -0.906, 0.345, -0.524, -0.933, 0.154, -0.529, -0.651, -0.851, 0.104, 0.532, -0.297, 0.477, 0.511, 0.469, -0.888, -0.789, 0.656, 0.288, -0.749, 0.961, 0.571, 0.539, 0.465, 0.647, 0.653, -0.994, -0.515, 0.297, 0.35, -0.707 }; double X[] = { -0.991, 0.658, -0.909, -0.99, -0.517, -0.071 }; int incX = -1; double Y[] = { 0.451, 0.351, -0.113, -0.62, 0.983, 0.511, 0.142, -0.186 }; int incY = -1; double y_expected[] = { 0.560921, -1.094193, -0.210397, -0.613323, 3.018979, 0.641612, 0.384166, 1.11801 }; cblas_zgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zgbmv(case 810) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zgbmv(case 810) imag"); }; }; }; { int order = 102; int trans = 112; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; double alpha[2] = {1, 0}; double beta[2] = {1, 0}; double A[] = { 0.511, -0.707, -0.906, 0.345, -0.524, -0.933, 0.154, -0.529, -0.651, -0.851, 0.104, 0.532, -0.297, 0.477, 0.511, 0.469, -0.888, -0.789, 0.656, 0.288, -0.749, 0.961, 0.571, 0.539, 0.465, 0.647, 0.653, -0.994, -0.515, 0.297, 0.35, -0.707 }; double X[] = { -0.991, 0.658, -0.909, -0.99, -0.517, -0.071 }; int incX = -1; double Y[] = { 0.451, 0.351, -0.113, -0.62, 0.983, 0.511, 0.142, -0.186 }; int incY = -1; double y_expected[] = { -0.435541, 0.015793, -0.926518, 1.122561, 1.671751, -0.257493, 0.187543, 1.066818 }; cblas_zgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zgbmv(case 811) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zgbmv(case 811) imag"); }; }; }; { int order = 101; int trans = 113; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; double alpha[2] = {0, 0.1}; double beta[2] = {-0.3, 0.1}; double A[] = { 0.534, 0.67, -0.621, 0.143, -0.794, 0.073, 0.414, -0.9, 0.155, -0.368, 0.122, -0.583, 0.03, 0.646, -0.768, -0.892, -0.741, -0.397, 0.626, 0.004, -0.515, 0.355, 0.196, -0.989, -0.982, 0.985, 0.445, 0.63, -0.849, -0.528, 0.146, -0.319 }; double X[] = { -0.199, -0.259, 0.386, -0.131, -0.867, 0.888 }; int incX = -1; double Y[] = { 0.106, 0.874, 0.962, 0.636, -0.759, 0.415, -0.053, 0.315 }; int incY = -1; double y_expected[] = { -0.139603, -0.250546, -0.3107376, -0.1144656, 0.2181809, -0.0877031, 0.0149724, -0.0224571 }; cblas_zgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zgbmv(case 812) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zgbmv(case 812) imag"); }; }; }; { int order = 102; int trans = 113; int M = 3; int N = 4; int KL = 1; int KU = 1; int lda = 4; double alpha[2] = {0, 0.1}; double beta[2] = {-0.3, 0.1}; double A[] = { 0.534, 0.67, -0.621, 0.143, -0.794, 0.073, 0.414, -0.9, 0.155, -0.368, 0.122, -0.583, 0.03, 0.646, -0.768, -0.892, -0.741, -0.397, 0.626, 0.004, -0.515, 0.355, 0.196, -0.989, -0.982, 0.985, 0.445, 0.63, -0.849, -0.528, 0.146, -0.319 }; double X[] = { -0.199, -0.259, 0.386, -0.131, -0.867, 0.888 }; int incX = -1; double Y[] = { 0.106, 0.874, 0.962, 0.636, -0.759, 0.415, -0.053, 0.315 }; int incY = -1; double y_expected[] = { -0.1642353, -0.2575697, -0.3610975, -0.1305629, 0.1713576, -0.2514988, 0.0195631, -0.0648656 }; cblas_zgbmv(order, trans, M, N, KU, KL, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zgbmv(case 813) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zgbmv(case 813) imag"); }; }; }; } gsl/cblas/zher.c0000644000175000017500000000053413536674414012134 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_zher (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const void *X, const int incX, void *A, const int lda) { #define BASE double #include "source_her.h" #undef BASE } gsl/cblas/source_hpr.h0000644000175000017500000000544313536674414013346 0ustar eddedd/* blas/source_hpr.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; const int conj = (order == CblasColMajor) ? -1 : 1; CHECK_ARGS7(CZ_HPR,order,Uplo,N,alpha,X,incX,A); if (alpha == 0.0) return; if ((order == CblasRowMajor && Uplo == CblasUpper) || (order == CblasColMajor && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { const BASE tmp_real = alpha * CONST_REAL(X, ix); const BASE tmp_imag = alpha * conj * CONST_IMAG(X, ix); INDEX jx = ix; { const BASE X_real = CONST_REAL(X, jx); const BASE X_imag = -conj * CONST_IMAG(X, jx); REAL(Ap, TPUP(N, i, i)) += X_real * tmp_real - X_imag * tmp_imag; IMAG(Ap, TPUP(N, i, i)) = 0; jx += incX; } for (j = i + 1; j < N; j++) { const BASE X_real = CONST_REAL(X, jx); const BASE X_imag = -conj * CONST_IMAG(X, jx); REAL(Ap, TPUP(N, i, j)) += X_real * tmp_real - X_imag * tmp_imag; IMAG(Ap, TPUP(N, i, j)) += X_imag * tmp_real + X_real * tmp_imag; jx += incX; } ix += incX; } } else if ((order == CblasRowMajor && Uplo == CblasLower) || (order == CblasColMajor && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { const BASE tmp_real = alpha * CONST_REAL(X, ix); const BASE tmp_imag = alpha * conj * CONST_IMAG(X, ix); INDEX jx = OFFSET(N, incX); for (j = 0; j < i; j++) { const BASE X_real = CONST_REAL(X, jx); const BASE X_imag = -conj * CONST_IMAG(X, jx); REAL(Ap, TPLO(N, i, j)) += X_real * tmp_real - X_imag * tmp_imag; IMAG(Ap, TPLO(N, i, j)) += X_imag * tmp_real + X_real * tmp_imag; jx += incX; } { const BASE X_real = CONST_REAL(X, jx); const BASE X_imag = -conj * CONST_IMAG(X, jx); REAL(Ap, TPLO(N, i, i)) += X_real * tmp_real - X_imag * tmp_imag; IMAG(Ap, TPLO(N, i, i)) = 0; jx += incX; } ix += incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/source_gemm_c.h0000644000175000017500000001423713536674414014005 0ustar eddedd/* blas/source_gemm_c.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j, k; INDEX n1, n2; INDEX ldf, ldg; int conjF, conjG, TransF, TransG; const BASE *F, *G; CHECK_ARGS14(GEMM,Order,TransA,TransB,M,N,K,alpha,A,lda,B,ldb,beta,C,ldc); { const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); const BASE beta_real = CONST_REAL0(beta); const BASE beta_imag = CONST_IMAG0(beta); if ((alpha_real == 0.0 && alpha_imag == 0.0) && (beta_real == 1.0 && beta_imag == 0.0)) return; if (Order == CblasRowMajor) { n1 = M; n2 = N; F = (const BASE *)A; ldf = lda; conjF = (TransA == CblasConjTrans) ? -1 : 1; TransF = (TransA == CblasNoTrans) ? CblasNoTrans : CblasTrans; G = (const BASE *)B; ldg = ldb; conjG = (TransB == CblasConjTrans) ? -1 : 1; TransG = (TransB == CblasNoTrans) ? CblasNoTrans : CblasTrans; } else { n1 = N; n2 = M; F = (const BASE *)B; ldf = ldb; conjF = (TransB == CblasConjTrans) ? -1 : 1; TransF = (TransB == CblasNoTrans) ? CblasNoTrans : CblasTrans; G = (const BASE *)A; ldg = lda; conjG = (TransA == CblasConjTrans) ? -1 : 1; TransG = (TransA == CblasNoTrans) ? CblasNoTrans : CblasTrans; } /* form y := beta*y */ if (beta_real == 0.0 && beta_imag == 0.0) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { REAL(C, ldc * i + j) = 0.0; IMAG(C, ldc * i + j) = 0.0; } } } else if (!(beta_real == 1.0 && beta_imag == 0.0)) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Cij_real = REAL(C, ldc * i + j); const BASE Cij_imag = IMAG(C, ldc * i + j); REAL(C, ldc * i + j) = beta_real * Cij_real - beta_imag * Cij_imag; IMAG(C, ldc * i + j) = beta_real * Cij_imag + beta_imag * Cij_real; } } } if (alpha_real == 0.0 && alpha_imag == 0.0) return; if (TransF == CblasNoTrans && TransG == CblasNoTrans) { /* form C := alpha*A*B + C */ for (k = 0; k < K; k++) { for (i = 0; i < n1; i++) { const BASE Fik_real = CONST_REAL(F, ldf * i + k); const BASE Fik_imag = conjF * CONST_IMAG(F, ldf * i + k); const BASE temp_real = alpha_real * Fik_real - alpha_imag * Fik_imag; const BASE temp_imag = alpha_real * Fik_imag + alpha_imag * Fik_real; if (!(temp_real == 0.0 && temp_imag == 0.0)) { for (j = 0; j < n2; j++) { const BASE Gkj_real = CONST_REAL(G, ldg * k + j); const BASE Gkj_imag = conjG * CONST_IMAG(G, ldg * k + j); REAL(C, ldc * i + j) += temp_real * Gkj_real - temp_imag * Gkj_imag; IMAG(C, ldc * i + j) += temp_real * Gkj_imag + temp_imag * Gkj_real; } } } } } else if (TransF == CblasNoTrans && TransG == CblasTrans) { /* form C := alpha*A*B' + C */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < K; k++) { const BASE Fik_real = CONST_REAL(F, ldf * i + k); const BASE Fik_imag = conjF * CONST_IMAG(F, ldf * i + k); const BASE Gjk_real = CONST_REAL(G, ldg * j + k); const BASE Gjk_imag = conjG * CONST_IMAG(G, ldg * j + k); temp_real += Fik_real * Gjk_real - Fik_imag * Gjk_imag; temp_imag += Fik_real * Gjk_imag + Fik_imag * Gjk_real; } REAL(C, ldc * i + j) += alpha_real * temp_real - alpha_imag * temp_imag; IMAG(C, ldc * i + j) += alpha_real * temp_imag + alpha_imag * temp_real; } } } else if (TransF == CblasTrans && TransG == CblasNoTrans) { for (k = 0; k < K; k++) { for (i = 0; i < n1; i++) { const BASE Fki_real = CONST_REAL(F, ldf * k + i); const BASE Fki_imag = conjF * CONST_IMAG(F, ldf * k + i); const BASE temp_real = alpha_real * Fki_real - alpha_imag * Fki_imag; const BASE temp_imag = alpha_real * Fki_imag + alpha_imag * Fki_real; if (!(temp_real == 0.0 && temp_imag == 0.0)) { for (j = 0; j < n2; j++) { const BASE Gkj_real = CONST_REAL(G, ldg * k + j); const BASE Gkj_imag = conjG * CONST_IMAG(G, ldg * k + j); REAL(C, ldc * i + j) += temp_real * Gkj_real - temp_imag * Gkj_imag; IMAG(C, ldc * i + j) += temp_real * Gkj_imag + temp_imag * Gkj_real; } } } } } else if (TransF == CblasTrans && TransG == CblasTrans) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < K; k++) { const BASE Fki_real = CONST_REAL(F, ldf * k + i); const BASE Fki_imag = conjF * CONST_IMAG(F, ldf * k + i); const BASE Gjk_real = CONST_REAL(G, ldg * j + k); const BASE Gjk_imag = conjG * CONST_IMAG(G, ldg * j + k); temp_real += Fki_real * Gjk_real - Fki_imag * Gjk_imag; temp_imag += Fki_real * Gjk_imag + Fki_imag * Gjk_real; } REAL(C, ldc * i + j) += alpha_real * temp_real - alpha_imag * temp_imag; IMAG(C, ldc * i + j) += alpha_real * temp_imag + alpha_imag * temp_real; } } } else { BLAS_ERROR("unrecognized operation"); } } } gsl/cblas/source_trsv_r.h0000644000175000017500000000735013536674414014073 0ustar eddedd/* blas/source_trsv_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { const int nonunit = (Diag == CblasNonUnit); INDEX ix, jx; INDEX i, j; const int Trans = (TransA != CblasConjTrans) ? TransA : CblasTrans; CHECK_ARGS9(TRSV,order,Uplo,TransA,Diag,N,A,lda,X,incX); if (N == 0) return; /* form x := inv( A )*x */ if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasLower)) { /* backsubstitution */ ix = OFFSET(N, incX) + incX * (N - 1); if (nonunit) { X[ix] = X[ix] / A[lda * (N - 1) + (N - 1)]; } ix -= incX; for (i = N - 1; i > 0 && i--;) { BASE tmp = X[ix]; jx = ix + incX; for (j = i + 1; j < N; j++) { const BASE Aij = A[lda * i + j]; tmp -= Aij * X[jx]; jx += incX; } if (nonunit) { X[ix] = tmp / A[lda * i + i]; } else { X[ix] = tmp; } ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasUpper)) { /* forward substitution */ ix = OFFSET(N, incX); if (nonunit) { X[ix] = X[ix] / A[lda * 0 + 0]; } ix += incX; for (i = 1; i < N; i++) { BASE tmp = X[ix]; jx = OFFSET(N, incX); for (j = 0; j < i; j++) { const BASE Aij = A[lda * i + j]; tmp -= Aij * X[jx]; jx += incX; } if (nonunit) { X[ix] = tmp / A[lda * i + i]; } else { X[ix] = tmp; } ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasLower)) { /* form x := inv( A' )*x */ /* forward substitution */ ix = OFFSET(N, incX); if (nonunit) { X[ix] = X[ix] / A[lda * 0 + 0]; } ix += incX; for (i = 1; i < N; i++) { BASE tmp = X[ix]; jx = OFFSET(N, incX); for (j = 0; j < i; j++) { const BASE Aji = A[lda * j + i]; tmp -= Aji * X[jx]; jx += incX; } if (nonunit) { X[ix] = tmp / A[lda * i + i]; } else { X[ix] = tmp; } ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasUpper)) { /* backsubstitution */ ix = OFFSET(N, incX) + (N - 1) * incX; if (nonunit) { X[ix] = X[ix] / A[lda * (N - 1) + (N - 1)]; } ix -= incX; for (i = N - 1; i > 0 && i--;) { BASE tmp = X[ix]; jx = ix + incX; for (j = i + 1; j < N; j++) { const BASE Aji = A[lda * j + i]; tmp -= Aji * X[jx]; jx += incX; } if (nonunit) { X[ix] = tmp / A[lda * i + i]; } else { X[ix] = tmp; } ix -= incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/test_sbmv.c0000644000175000017500000002327513536674414013201 0ustar eddedd#include #include #include #include #include "tests.h" void test_sbmv (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; float alpha = 1.0f; float beta = 0.0f; int N = 3; int k = 1; int lda = 3; float A[] = { 0.627f, -0.312f, 0.031f, 0.308f, 0.323f, -0.578f, 0.797f, 0.545f, -0.476f }; float X[] = { -0.542f, 0.606f, 0.727f }; int incX = -1; float Y[] = { 0.755f, 0.268f, -0.99f }; int incY = -1; float y_expected[] = { -0.236236f, -0.215242f, 0.266757f }; cblas_ssbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssbmv(case 1102)"); } }; }; { int order = 101; int uplo = 121; float alpha = 1.0f; float beta = 0.0f; int N = 3; int k = 1; int lda = 3; float A[] = { 0.627f, -0.312f, 0.031f, 0.308f, 0.323f, -0.578f, 0.797f, 0.545f, -0.476f }; float X[] = { -0.542f, 0.606f, 0.727f }; int incX = -1; float Y[] = { 0.755f, 0.268f, -0.99f }; int incY = -1; float y_expected[] = { -0.236236f, -0.215242f, 0.266757f }; cblas_ssbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssbmv(case 1103)"); } }; }; { int order = 101; int uplo = 122; float alpha = 1.0f; float beta = 0.0f; int N = 3; int k = 1; int lda = 3; float A[] = { 0.627f, -0.312f, 0.031f, 0.308f, 0.323f, -0.578f, 0.797f, 0.545f, -0.476f }; float X[] = { -0.542f, 0.606f, 0.727f }; int incX = -1; float Y[] = { 0.755f, 0.268f, -0.99f }; int incY = -1; float y_expected[] = { 0.187592f, -0.01232f, -0.040176f }; cblas_ssbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssbmv(case 1104)"); } }; }; { int order = 101; int uplo = 122; float alpha = 1.0f; float beta = 0.0f; int N = 3; int k = 1; int lda = 3; float A[] = { 0.627f, -0.312f, 0.031f, 0.308f, 0.323f, -0.578f, 0.797f, 0.545f, -0.476f }; float X[] = { -0.542f, 0.606f, 0.727f }; int incX = -1; float Y[] = { 0.755f, 0.268f, -0.99f }; int incY = -1; float y_expected[] = { 0.187592f, -0.01232f, -0.040176f }; cblas_ssbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssbmv(case 1105)"); } }; }; { int order = 102; int uplo = 121; float alpha = 1.0f; float beta = 0.0f; int N = 3; int k = 1; int lda = 3; float A[] = { 0.627f, -0.312f, 0.031f, 0.308f, 0.323f, -0.578f, 0.797f, 0.545f, -0.476f }; float X[] = { -0.542f, 0.606f, 0.727f }; int incX = -1; float Y[] = { 0.755f, 0.268f, -0.99f }; int incY = -1; float y_expected[] = { 0.187592f, -0.01232f, -0.040176f }; cblas_ssbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssbmv(case 1106)"); } }; }; { int order = 102; int uplo = 121; float alpha = 1.0f; float beta = 0.0f; int N = 3; int k = 1; int lda = 3; float A[] = { 0.627f, -0.312f, 0.031f, 0.308f, 0.323f, -0.578f, 0.797f, 0.545f, -0.476f }; float X[] = { -0.542f, 0.606f, 0.727f }; int incX = -1; float Y[] = { 0.755f, 0.268f, -0.99f }; int incY = -1; float y_expected[] = { 0.187592f, -0.01232f, -0.040176f }; cblas_ssbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssbmv(case 1107)"); } }; }; { int order = 102; int uplo = 122; float alpha = 1.0f; float beta = 0.0f; int N = 3; int k = 1; int lda = 3; float A[] = { 0.627f, -0.312f, 0.031f, 0.308f, 0.323f, -0.578f, 0.797f, 0.545f, -0.476f }; float X[] = { -0.542f, 0.606f, 0.727f }; int incX = -1; float Y[] = { 0.755f, 0.268f, -0.99f }; int incY = -1; float y_expected[] = { -0.236236f, -0.215242f, 0.266757f }; cblas_ssbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssbmv(case 1108)"); } }; }; { int order = 102; int uplo = 122; float alpha = 1.0f; float beta = 0.0f; int N = 3; int k = 1; int lda = 3; float A[] = { 0.627f, -0.312f, 0.031f, 0.308f, 0.323f, -0.578f, 0.797f, 0.545f, -0.476f }; float X[] = { -0.542f, 0.606f, 0.727f }; int incX = -1; float Y[] = { 0.755f, 0.268f, -0.99f }; int incY = -1; float y_expected[] = { -0.236236f, -0.215242f, 0.266757f }; cblas_ssbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssbmv(case 1109)"); } }; }; { int order = 101; int uplo = 121; double alpha = 0; double beta = 1; int N = 3; int k = 1; int lda = 3; double A[] = { 0.83, -0.568, -0.888, 0.281, -0.779, -0.148, 0.138, 0.053, -0.757 }; double X[] = { 0.166, 0.808, 0.723 }; int incX = -1; double Y[] = { 0.9, 0.99, -0.578 }; int incY = -1; double y_expected[] = { 0.9, 0.99, -0.578 }; cblas_dsbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsbmv(case 1110)"); } }; }; { int order = 101; int uplo = 121; double alpha = 0; double beta = 1; int N = 3; int k = 1; int lda = 3; double A[] = { 0.83, -0.568, -0.888, 0.281, -0.779, -0.148, 0.138, 0.053, -0.757 }; double X[] = { 0.166, 0.808, 0.723 }; int incX = -1; double Y[] = { 0.9, 0.99, -0.578 }; int incY = -1; double y_expected[] = { 0.9, 0.99, -0.578 }; cblas_dsbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsbmv(case 1111)"); } }; }; { int order = 101; int uplo = 122; double alpha = 0; double beta = 1; int N = 3; int k = 1; int lda = 3; double A[] = { 0.83, -0.568, -0.888, 0.281, -0.779, -0.148, 0.138, 0.053, -0.757 }; double X[] = { 0.166, 0.808, 0.723 }; int incX = -1; double Y[] = { 0.9, 0.99, -0.578 }; int incY = -1; double y_expected[] = { 0.9, 0.99, -0.578 }; cblas_dsbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsbmv(case 1112)"); } }; }; { int order = 101; int uplo = 122; double alpha = 0; double beta = 1; int N = 3; int k = 1; int lda = 3; double A[] = { 0.83, -0.568, -0.888, 0.281, -0.779, -0.148, 0.138, 0.053, -0.757 }; double X[] = { 0.166, 0.808, 0.723 }; int incX = -1; double Y[] = { 0.9, 0.99, -0.578 }; int incY = -1; double y_expected[] = { 0.9, 0.99, -0.578 }; cblas_dsbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsbmv(case 1113)"); } }; }; { int order = 102; int uplo = 121; double alpha = 0; double beta = 1; int N = 3; int k = 1; int lda = 3; double A[] = { 0.83, -0.568, -0.888, 0.281, -0.779, -0.148, 0.138, 0.053, -0.757 }; double X[] = { 0.166, 0.808, 0.723 }; int incX = -1; double Y[] = { 0.9, 0.99, -0.578 }; int incY = -1; double y_expected[] = { 0.9, 0.99, -0.578 }; cblas_dsbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsbmv(case 1114)"); } }; }; { int order = 102; int uplo = 121; double alpha = 0; double beta = 1; int N = 3; int k = 1; int lda = 3; double A[] = { 0.83, -0.568, -0.888, 0.281, -0.779, -0.148, 0.138, 0.053, -0.757 }; double X[] = { 0.166, 0.808, 0.723 }; int incX = -1; double Y[] = { 0.9, 0.99, -0.578 }; int incY = -1; double y_expected[] = { 0.9, 0.99, -0.578 }; cblas_dsbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsbmv(case 1115)"); } }; }; { int order = 102; int uplo = 122; double alpha = 0; double beta = 1; int N = 3; int k = 1; int lda = 3; double A[] = { 0.83, -0.568, -0.888, 0.281, -0.779, -0.148, 0.138, 0.053, -0.757 }; double X[] = { 0.166, 0.808, 0.723 }; int incX = -1; double Y[] = { 0.9, 0.99, -0.578 }; int incY = -1; double y_expected[] = { 0.9, 0.99, -0.578 }; cblas_dsbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsbmv(case 1116)"); } }; }; { int order = 102; int uplo = 122; double alpha = 0; double beta = 1; int N = 3; int k = 1; int lda = 3; double A[] = { 0.83, -0.568, -0.888, 0.281, -0.779, -0.148, 0.138, 0.053, -0.757 }; double X[] = { 0.166, 0.808, 0.723 }; int incX = -1; double Y[] = { 0.9, 0.99, -0.578 }; int incY = -1; double y_expected[] = { 0.9, 0.99, -0.578 }; cblas_dsbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsbmv(case 1117)"); } }; }; } gsl/cblas/dger.c0000644000175000017500000000056213536674414012106 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dger (const enum CBLAS_ORDER order, const int M, const int N, const double alpha, const double *X, const int incX, const double *Y, const int incY, double *A, const int lda) { #define BASE double #include "source_ger.h" #undef BASE } gsl/cblas/scopy.c0000644000175000017500000000035513536674414012322 0ustar eddedd#include #include #include "cblas.h" void cblas_scopy (const int N, const float *X, const int incX, float *Y, const int incY) { #define BASE float #include "source_copy_r.h" #undef BASE } gsl/cblas/test_syrk.c0000644000175000017500000004765613536674414013233 0ustar eddedd#include #include #include #include #include "tests.h" void test_syrk (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; int trans = 111; int N = 2; int K = 1; float alpha = -1.0f; float beta = 0.1f; float A[] = { 0.412f, -0.229f }; int lda = 1; float C[] = { 0.628f, -0.664f, -0.268f, 0.096f }; int ldc = 2; float C_expected[] = { -0.106944f, 0.027948f, -0.268f, -0.042841f }; cblas_ssyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyrk(case 1566)"); } }; }; { int order = 102; int uplo = 121; int trans = 111; int N = 2; int K = 1; float alpha = -1.0f; float beta = 0.1f; float A[] = { 0.101f, -0.653f }; int lda = 2; float C[] = { 0.432f, 0.107f, -0.952f, -0.532f }; int ldc = 2; float C_expected[] = { 0.032999f, 0.107f, -0.029247f, -0.479609f }; cblas_ssyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyrk(case 1567)"); } }; }; { int order = 101; int uplo = 121; int trans = 112; int N = 2; int K = 1; float alpha = 1.0f; float beta = 0.1f; float A[] = { 0.79f, 0.595f }; int lda = 2; float C[] = { 0.257f, 0.183f, -0.021f, -0.053f }; int ldc = 2; float C_expected[] = { 0.6498f, 0.48835f, -0.021f, 0.348725f }; cblas_ssyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyrk(case 1568)"); } }; }; { int order = 102; int uplo = 121; int trans = 112; int N = 2; int K = 1; float alpha = 1.0f; float beta = 0.1f; float A[] = { -0.181f, -0.654f }; int lda = 1; float C[] = { -0.4f, 0.615f, 0.147f, -0.163f }; int ldc = 2; float C_expected[] = { -0.007239f, 0.615f, 0.133074f, 0.411416f }; cblas_ssyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyrk(case 1569)"); } }; }; { int order = 101; int uplo = 122; int trans = 111; int N = 2; int K = 1; float alpha = 0.0f; float beta = -1.0f; float A[] = { -0.191f, 0.584f }; int lda = 1; float C[] = { -0.719f, -0.681f, -0.003f, 0.544f }; int ldc = 2; float C_expected[] = { 0.719f, -0.681f, 0.003f, -0.544f }; cblas_ssyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyrk(case 1570)"); } }; }; { int order = 102; int uplo = 122; int trans = 111; int N = 2; int K = 1; float alpha = 0.0f; float beta = -1.0f; float A[] = { 0.788f, 0.041f }; int lda = 2; float C[] = { 0.029f, 0.365f, 0.739f, -0.769f }; int ldc = 2; float C_expected[] = { -0.029f, -0.365f, 0.739f, 0.769f }; cblas_ssyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyrk(case 1571)"); } }; }; { int order = 101; int uplo = 122; int trans = 112; int N = 2; int K = 1; float alpha = -0.3f; float beta = -1.0f; float A[] = { 0.733f, 0.678f }; int lda = 2; float C[] = { -0.941f, 0.96f, 0.07f, -0.295f }; int ldc = 2; float C_expected[] = { 0.779813f, 0.96f, -0.219092f, 0.157095f }; cblas_ssyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyrk(case 1572)"); } }; }; { int order = 102; int uplo = 122; int trans = 112; int N = 2; int K = 1; float alpha = -0.3f; float beta = -1.0f; float A[] = { -0.87f, 0.675f }; int lda = 1; float C[] = { -0.602f, -0.432f, -0.984f, 0.384f }; int ldc = 2; float C_expected[] = { 0.37493f, 0.608175f, -0.984f, -0.520687f }; cblas_ssyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyrk(case 1573)"); } }; }; { int order = 101; int uplo = 121; int trans = 111; int N = 2; int K = 1; double alpha = 0.1; double beta = -0.3; double A[] = { 0.169, -0.875 }; int lda = 1; double C[] = { 0.159, 0.277, 0.865, 0.346 }; int ldc = 2; double C_expected[] = { -0.0448439, -0.0978875, 0.865, -0.0272375 }; cblas_dsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyrk(case 1574)"); } }; }; { int order = 102; int uplo = 121; int trans = 111; int N = 2; int K = 1; double alpha = 0.1; double beta = -0.3; double A[] = { 0.536, -0.725 }; int lda = 2; double C[] = { 0.154, -0.445, -0.841, -0.91 }; int ldc = 2; double C_expected[] = { -0.0174704, -0.445, 0.21344, 0.3255625 }; cblas_dsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyrk(case 1575)"); } }; }; { int order = 101; int uplo = 121; int trans = 112; int N = 2; int K = 1; double alpha = 0; double beta = -1; double A[] = { -0.07, 0.8 }; int lda = 2; double C[] = { 0.823, -0.88, -0.136, 0.793 }; int ldc = 2; double C_expected[] = { -0.823, 0.88, -0.136, -0.793 }; cblas_dsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyrk(case 1576)"); } }; }; { int order = 102; int uplo = 121; int trans = 112; int N = 2; int K = 1; double alpha = 0; double beta = -1; double A[] = { -0.058, 0.649 }; int lda = 1; double C[] = { -0.187, 0.294, -0.004, -0.933 }; int ldc = 2; double C_expected[] = { 0.187, 0.294, 0.004, 0.933 }; cblas_dsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyrk(case 1577)"); } }; }; { int order = 101; int uplo = 122; int trans = 111; int N = 2; int K = 1; double alpha = 1; double beta = -1; double A[] = { 0.263, -0.289 }; int lda = 1; double C[] = { 0.554, -0.679, 0.993, 0.758 }; int ldc = 2; double C_expected[] = { -0.484831, -0.679, -1.069007, -0.674479 }; cblas_dsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyrk(case 1578)"); } }; }; { int order = 102; int uplo = 122; int trans = 111; int N = 2; int K = 1; double alpha = 1; double beta = -1; double A[] = { -0.265, -0.837 }; int lda = 2; double C[] = { -0.994, 0.967, -0.34, -0.069 }; int ldc = 2; double C_expected[] = { 1.064225, -0.745195, -0.34, 0.769569 }; cblas_dsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyrk(case 1579)"); } }; }; { int order = 101; int uplo = 122; int trans = 112; int N = 2; int K = 1; double alpha = -0.3; double beta = 1; double A[] = { -0.464, 0.394 }; int lda = 2; double C[] = { -0.45, -0.447, 0.649, 0.055 }; int ldc = 2; double C_expected[] = { -0.5145888, -0.447, 0.7038448, 0.0084292 }; cblas_dsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyrk(case 1580)"); } }; }; { int order = 102; int uplo = 122; int trans = 112; int N = 2; int K = 1; double alpha = -0.3; double beta = 1; double A[] = { 0.815, 0.168 }; int lda = 1; double C[] = { 0.817, -0.957, -0.395, -0.382 }; int ldc = 2; double C_expected[] = { 0.6177325, -0.998076, -0.395, -0.3904672 }; cblas_dsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyrk(case 1581)"); } }; }; { int order = 101; int uplo = 121; int trans = 111; int N = 2; int K = 1; float alpha[2] = {0.0f, 0.0f}; float beta[2] = {-0.3f, 0.1f}; float A[] = { 0.447f, -0.507f, -0.425f, 0.701f }; int lda = 1; float C[] = { 0.16f, -0.245f, 0.922f, -0.437f, 0.24f, 0.008f, -0.095f, 0.749f }; int ldc = 2; float C_expected[] = { -0.0235f, 0.0895f, -0.2329f, 0.2233f, 0.24f, 0.008f, -0.0464f, -0.2342f }; cblas_csyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyrk(case 1582) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyrk(case 1582) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 111; int N = 2; int K = 1; float alpha[2] = {0.0f, 0.0f}; float beta[2] = {-0.3f, 0.1f}; float A[] = { -0.421f, -0.435f, -0.914f, -0.493f }; int lda = 2; float C[] = { -0.761f, -0.38f, 0.043f, -0.999f, 0.779f, 0.238f, 0.082f, 0.394f }; int ldc = 2; float C_expected[] = { 0.2663f, 0.0379f, 0.043f, -0.999f, -0.2575f, 0.0065f, -0.064f, -0.11f }; cblas_csyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyrk(case 1583) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyrk(case 1583) imag"); }; }; }; { int order = 101; int uplo = 121; int trans = 112; int N = 2; int K = 1; float alpha[2] = {-1.0f, 0.0f}; float beta[2] = {-0.3f, 0.1f}; float A[] = { 0.827f, -0.896f, 0.417f, 0.865f }; int lda = 2; float C[] = { -0.349f, -0.31f, 0.972f, 0.794f, -0.906f, -0.595f, -0.089f, -0.333f }; int ldc = 2; float C_expected[] = { 0.254587f, 1.54008f, -1.4909f, -0.482723f, -0.906f, -0.595f, 0.634336f, -0.63041f }; cblas_csyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyrk(case 1584) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyrk(case 1584) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 112; int N = 2; int K = 1; float alpha[2] = {-1.0f, 0.0f}; float beta[2] = {-0.3f, 0.1f}; float A[] = { 0.607f, 0.747f, -0.889f, 0.333f }; int lda = 1; float C[] = { 0.244f, 0.564f, 0.009f, 0.578f, -0.827f, 0.558f, -0.337f, 0.731f }; int ldc = 2; float C_expected[] = { 0.05996f, -1.05166f, 0.009f, 0.578f, 0.980674f, 0.211852f, -0.651432f, 0.339074f }; cblas_csyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyrk(case 1585) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyrk(case 1585) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 111; int N = 2; int K = 1; float alpha[2] = {1.0f, 0.0f}; float beta[2] = {0.0f, 1.0f}; float A[] = { 0.784f, -0.281f, -0.88f, 0.479f }; int lda = 1; float C[] = { 0.491f, 0.531f, 0.805f, -0.097f, 0.728f, 0.674f, -0.705f, -0.754f }; int ldc = 2; float C_expected[] = { 0.004695f, 0.050392f, 0.805f, -0.097f, -1.22932f, 1.35082f, 1.29896f, -1.54804f }; cblas_csyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyrk(case 1586) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyrk(case 1586) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 111; int N = 2; int K = 1; float alpha[2] = {1.0f, 0.0f}; float beta[2] = {0.0f, 1.0f}; float A[] = { 0.272f, -0.146f, 0.155f, 0.038f }; int lda = 2; float C[] = { 0.533f, -0.41f, -0.904f, 0.301f, -0.836f, 0.57f, -0.374f, -0.293f }; int ldc = 2; float C_expected[] = { 0.462668f, 0.453576f, -0.253292f, -0.916294f, -0.836f, 0.57f, 0.315581f, -0.36222f }; cblas_csyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyrk(case 1587) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyrk(case 1587) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 112; int N = 2; int K = 1; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {-1.0f, 0.0f}; float A[] = { -0.055f, -0.127f, -0.896f, -0.625f }; int lda = 2; float C[] = { -0.619f, 0.511f, -0.877f, 0.557f, -0.801f, -0.437f, -0.922f, 0.332f }; int ldc = 2; float C_expected[] = { 0.60503f, -0.524104f, -0.877f, 0.557f, 0.652833f, 0.406905f, -0.198f, 0.080191f }; cblas_csyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyrk(case 1588) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyrk(case 1588) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 112; int N = 2; int K = 1; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {-1.0f, 0.0f}; float A[] = { -0.528f, 0.759f, -0.079f, 0.952f }; int lda = 1; float C[] = { 0.775f, 0.855f, 0.786f, 0.525f, 0.85f, 0.044f, 0.658f, 0.947f }; int ldc = 2; float C_expected[] = { 0.026504f, -1.1523f, -0.223383f, -1.20586f, 0.85f, 0.044f, -0.507584f, -1.84706f }; cblas_csyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyrk(case 1589) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyrk(case 1589) imag"); }; }; }; { int order = 101; int uplo = 121; int trans = 111; int N = 2; int K = 1; double alpha[2] = {1, 0}; double beta[2] = {1, 0}; double A[] = { -0.049, -0.687, -0.434, 0.294 }; int lda = 1; double C[] = { 0.937, -0.113, 0.796, 0.293, 0.876, -0.199, -0.757, -0.103 }; int ldc = 2; double C_expected[] = { 0.467432, -0.045674, 1.019244, 0.576752, 0.876, -0.199, -0.65508, -0.358192 }; cblas_zsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyrk(case 1590) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyrk(case 1590) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 111; int N = 2; int K = 1; double alpha[2] = {1, 0}; double beta[2] = {1, 0}; double A[] = { 0.359, -0.364, 0.926, -0.69 }; int lda = 2; double C[] = { 0.306, 0.249, 0.28, 0.229, 0.866, 0.092, 0.886, -0.283 }; int ldc = 2; double C_expected[] = { 0.302385, -0.012352, 0.28, 0.229, 0.947274, -0.492774, 1.267376, -1.56088 }; cblas_zsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyrk(case 1591) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyrk(case 1591) imag"); }; }; }; { int order = 101; int uplo = 121; int trans = 112; int N = 2; int K = 1; double alpha[2] = {-0.3, 0.1}; double beta[2] = {0, 0}; double A[] = { 0.607, 0.555, -0.85, 0.831 }; int lda = 2; double C[] = { 0.069, 0.368, 0.551, -0.912, -0.243, -0.063, -0.924, 0.192 }; int ldc = 2; double C_expected[] = { -0.0855042, -0.1960886, 0.2898798, -0.1075156, -0.243, -0.063, 0.1316883, 0.4270039 }; cblas_zsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyrk(case 1592) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyrk(case 1592) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 112; int N = 2; int K = 1; double alpha[2] = {-0.3, 0.1}; double beta[2] = {0, 0}; double A[] = { 0.427, 0.86, -0.136, 0.002 }; int lda = 1; double C[] = { 0.398, -0.47, 0.011, -0.547, -0.106, 0.016, 0.681, 0.246 }; int ldc = 2; double C_expected[] = { 0.0937373, -0.2760591, 0.011, -0.547, 0.0295482, 0.0288526, -0.0054932, 0.0020124 }; cblas_zsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyrk(case 1593) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyrk(case 1593) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 111; int N = 2; int K = 1; double alpha[2] = {-0.3, 0.1}; double beta[2] = {1, 0}; double A[] = { 0.718, 0.023, 0.355, -0.492 }; int lda = 1; double C[] = { -0.637, -0.727, -0.475, -0.776, 0.802, -0.55, -0.837, 0.222 }; int ldc = 2; double C_expected[] = { -0.7948013, -0.6854089, -0.475, -0.776, 0.7566473, -0.4198521, -0.7672563, 0.3151921 }; cblas_zsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyrk(case 1594) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyrk(case 1594) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 111; int N = 2; int K = 1; double alpha[2] = {-0.3, 0.1}; double beta[2] = {1, 0}; double A[] = { 0.209, 0.139, -0.202, -0.223 }; int lda = 2; double C[] = { -0.695, 0.524, 0.212, -0.88, -0.752, 0.291, 0.684, -0.124 }; int ldc = 2; double C_expected[] = { -0.7081182, 0.5090054, 0.2228348, -0.8587166, -0.752, 0.291, 0.6776683, -0.1519201 }; cblas_zsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyrk(case 1595) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyrk(case 1595) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 112; int N = 2; int K = 1; double alpha[2] = {-0.3, 0.1}; double beta[2] = {1, 0}; double A[] = { -0.365, -0.624, 0.632, 0.348 }; int lda = 2; double C[] = { 0.877, 0.927, -0.377, 0.967, 0.008, 0.292, -0.779, 0.794 }; int ldc = 2; double C_expected[] = { 0.9082933, 0.7647289, -0.377, 0.967, 0.0641972, 0.4470636, -0.9064832, 0.6898704 }; cblas_zsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyrk(case 1596) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyrk(case 1596) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 112; int N = 2; int K = 1; double alpha[2] = {-0.3, 0.1}; double beta[2] = {1, 0}; double A[] = { -0.067, -0.586, 0.208, 0.331 }; int lda = 1; double C[] = { 0.584, -0.454, 0.93, 0.782, 0.489, -0.278, 0.081, -0.919 }; int ldc = 2; double C_expected[] = { 0.6778197, -0.5114479, 0.8903975, 0.8432225, 0.489, -0.278, 0.0871195, -0.9669385 }; cblas_zsyrk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyrk(case 1597) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyrk(case 1597) imag"); }; }; }; } gsl/cblas/zhemm.c0000644000175000017500000000070413536674414012303 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_zhemm (const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc) { #define BASE double #include "source_hemm.h" #undef BASE } gsl/cblas/sgemv.c0000644000175000017500000000066513536674414012312 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_sgemv (const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const float alpha, const float *A, const int lda, const float *X, const int incX, const float beta, float *Y, const int incY) { #define BASE float #include "source_gemv_r.h" #undef BASE } gsl/cblas/zgerc.c0000644000175000017500000000055713536674414012303 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_zgerc (const enum CBLAS_ORDER order, const int M, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda) { #define BASE double #include "source_gerc.h" #undef BASE } gsl/cblas/csyrk.c0000644000175000017500000000065513536674414012323 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_csyrk (const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *beta, void *C, const int ldc) { #define BASE float #include "source_syrk_c.h" #undef BASE } gsl/cblas/zsymm.c0000644000175000017500000000070613536674414012344 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_zsymm (const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc) { #define BASE double #include "source_symm_c.h" #undef BASE } gsl/cblas/source_gemv_c.h0000644000175000017500000001212413536674414014007 0ustar eddedd/* blas/source_gemv_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; INDEX lenX, lenY; const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); const BASE beta_real = CONST_REAL0(beta); const BASE beta_imag = CONST_IMAG0(beta); CHECK_ARGS12(GEMV,order,TransA,M,N,alpha,A,lda,X,incX,beta,Y,incY); if (M == 0 || N == 0) return; if ((alpha_real == 0.0 && alpha_imag == 0.0) && (beta_real == 1.0 && beta_imag == 0.0)) return; if (TransA == CblasNoTrans) { lenX = N; lenY = M; } else { lenX = M; lenY = N; } /* form y := beta*y */ if (beta_real == 0.0 && beta_imag == 0.0) { INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { REAL(Y, iy) = 0.0; IMAG(Y, iy) = 0.0; iy += incY; } } else if (!(beta_real == 1.0 && beta_imag == 0.0)) { INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { const BASE y_real = REAL(Y, iy); const BASE y_imag = IMAG(Y, iy); const BASE tmpR = y_real * beta_real - y_imag * beta_imag; const BASE tmpI = y_real * beta_imag + y_imag * beta_real; REAL(Y, iy) = tmpR; IMAG(Y, iy) = tmpI; iy += incY; } } if (alpha_real == 0.0 && alpha_imag == 0.0) return; if ((order == CblasRowMajor && TransA == CblasNoTrans) || (order == CblasColMajor && TransA == CblasTrans)) { /* form y := alpha*A*x + y */ INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { BASE dotR = 0.0; BASE dotI = 0.0; INDEX ix = OFFSET(lenX, incX); for (j = 0; j < lenX; j++) { const BASE x_real = CONST_REAL(X, ix); const BASE x_imag = CONST_IMAG(X, ix); const BASE A_real = CONST_REAL(A, lda * i + j); const BASE A_imag = CONST_IMAG(A, lda * i + j); dotR += A_real * x_real - A_imag * x_imag; dotI += A_real * x_imag + A_imag * x_real; ix += incX; } REAL(Y, iy) += alpha_real * dotR - alpha_imag * dotI; IMAG(Y, iy) += alpha_real * dotI + alpha_imag * dotR; iy += incY; } } else if ((order == CblasRowMajor && TransA == CblasTrans) || (order == CblasColMajor && TransA == CblasNoTrans)) { /* form y := alpha*A'*x + y */ INDEX ix = OFFSET(lenX, incX); for (j = 0; j < lenX; j++) { BASE x_real = CONST_REAL(X, ix); BASE x_imag = CONST_IMAG(X, ix); BASE tmpR = alpha_real * x_real - alpha_imag * x_imag; BASE tmpI = alpha_real * x_imag + alpha_imag * x_real; INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { const BASE A_real = CONST_REAL(A, lda * j + i); const BASE A_imag = CONST_IMAG(A, lda * j + i); REAL(Y, iy) += A_real * tmpR - A_imag * tmpI; IMAG(Y, iy) += A_real * tmpI + A_imag * tmpR; iy += incY; } ix += incX; } } else if (order == CblasRowMajor && TransA == CblasConjTrans) { /* form y := alpha*A^H*x + y */ INDEX ix = OFFSET(lenX, incX); for (j = 0; j < lenX; j++) { BASE x_real = CONST_REAL(X, ix); BASE x_imag = CONST_IMAG(X, ix); BASE tmpR = alpha_real * x_real - alpha_imag * x_imag; BASE tmpI = alpha_real * x_imag + alpha_imag * x_real; INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { const BASE A_real = CONST_REAL(A, lda * j + i); const BASE A_imag = CONST_IMAG(A, lda * j + i); REAL(Y, iy) += A_real * tmpR - (-A_imag) * tmpI; IMAG(Y, iy) += A_real * tmpI + (-A_imag) * tmpR; iy += incY; } ix += incX; } } else if (order == CblasColMajor && TransA == CblasConjTrans) { /* form y := alpha*A^H*x + y */ INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { BASE dotR = 0.0; BASE dotI = 0.0; INDEX ix = OFFSET(lenX, incX); for (j = 0; j < lenX; j++) { const BASE x_real = CONST_REAL(X, ix); const BASE x_imag = CONST_IMAG(X, ix); const BASE A_real = CONST_REAL(A, lda * i + j); const BASE A_imag = CONST_IMAG(A, lda * i + j); dotR += A_real * x_real - (-A_imag) * x_imag; dotI += A_real * x_imag + (-A_imag) * x_real; ix += incX; } REAL(Y, iy) += alpha_real * dotR - alpha_imag * dotI; IMAG(Y, iy) += alpha_real * dotI + alpha_imag * dotR; iy += incY; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/srotm.c0000644000175000017500000000036513536674414012332 0ustar eddedd#include #include #include "cblas.h" void cblas_srotm (const int N, float *X, const int incX, float *Y, const int incY, const float *P) { #define BASE float #include "source_rotm.h" #undef BASE } gsl/cblas/drot.c0000644000175000017500000000040513536674414012131 0ustar eddedd#include #include #include "cblas.h" void cblas_drot (const int N, double *X, const int incX, double *Y, const int incY, const double c, const double s) { #define BASE double #include "source_rot.h" #undef BASE } gsl/cblas/test_hpr2.c0000644000175000017500000001131113536674414013071 0ustar eddedd#include #include #include #include #include "tests.h" void test_hpr2 (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; int N = 1; float alpha[2] = {-1.0f, 0.0f}; float Ap[] = { 0.159f, -0.13f }; float X[] = { 0.854f, 0.851f }; int incX = -1; float Y[] = { 0.526f, -0.267f }; int incY = -1; float Ap_expected[] = { -0.284974f, 0.0f }; cblas_chpr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], flteps, "chpr2(case 1458) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], flteps, "chpr2(case 1458) imag"); }; }; }; { int order = 101; int uplo = 122; int N = 1; float alpha[2] = {-1.0f, 0.0f}; float Ap[] = { 0.159f, -0.13f }; float X[] = { 0.854f, 0.851f }; int incX = -1; float Y[] = { 0.526f, -0.267f }; int incY = -1; float Ap_expected[] = { -0.284974f, 0.0f }; cblas_chpr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], flteps, "chpr2(case 1459) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], flteps, "chpr2(case 1459) imag"); }; }; }; { int order = 102; int uplo = 121; int N = 1; float alpha[2] = {-1.0f, 0.0f}; float Ap[] = { 0.159f, -0.13f }; float X[] = { 0.854f, 0.851f }; int incX = -1; float Y[] = { 0.526f, -0.267f }; int incY = -1; float Ap_expected[] = { -0.284974f, 0.0f }; cblas_chpr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], flteps, "chpr2(case 1460) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], flteps, "chpr2(case 1460) imag"); }; }; }; { int order = 102; int uplo = 122; int N = 1; float alpha[2] = {-1.0f, 0.0f}; float Ap[] = { 0.159f, -0.13f }; float X[] = { 0.854f, 0.851f }; int incX = -1; float Y[] = { 0.526f, -0.267f }; int incY = -1; float Ap_expected[] = { -0.284974f, 0.0f }; cblas_chpr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], flteps, "chpr2(case 1461) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], flteps, "chpr2(case 1461) imag"); }; }; }; { int order = 101; int uplo = 121; int N = 1; double alpha[2] = {-0.3, 0.1}; double Ap[] = { 0.772, 0.997 }; double X[] = { -0.173, -0.839 }; int incX = -1; double Y[] = { 0.941, -0.422 }; int incY = -1; double Ap_expected[] = { 0.829742, 0.0 }; cblas_zhpr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], dbleps, "zhpr2(case 1462) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], dbleps, "zhpr2(case 1462) imag"); }; }; }; { int order = 101; int uplo = 122; int N = 1; double alpha[2] = {-0.3, 0.1}; double Ap[] = { 0.772, 0.997 }; double X[] = { -0.173, -0.839 }; int incX = -1; double Y[] = { 0.941, -0.422 }; int incY = -1; double Ap_expected[] = { 0.829742, 0.0 }; cblas_zhpr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], dbleps, "zhpr2(case 1463) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], dbleps, "zhpr2(case 1463) imag"); }; }; }; { int order = 102; int uplo = 121; int N = 1; double alpha[2] = {-0.3, 0.1}; double Ap[] = { 0.772, 0.997 }; double X[] = { -0.173, -0.839 }; int incX = -1; double Y[] = { 0.941, -0.422 }; int incY = -1; double Ap_expected[] = { 0.829742, 0.0 }; cblas_zhpr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], dbleps, "zhpr2(case 1464) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], dbleps, "zhpr2(case 1464) imag"); }; }; }; { int order = 102; int uplo = 122; int N = 1; double alpha[2] = {-0.3, 0.1}; double Ap[] = { 0.772, 0.997 }; double X[] = { -0.173, -0.839 }; int incX = -1; double Y[] = { 0.941, -0.422 }; int incY = -1; double Ap_expected[] = { 0.829742, 0.0 }; cblas_zhpr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], dbleps, "zhpr2(case 1465) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], dbleps, "zhpr2(case 1465) imag"); }; }; }; } gsl/cblas/ztbsv.c0000644000175000017500000000067313536674414012340 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" #include "hypot.c" void cblas_ztbsv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const void *A, const int lda, void *X, const int incX) { #define BASE double #include "source_tbsv_c.h" #undef BASE } gsl/cblas/zhpr2.c0000644000175000017500000000056013536674414012230 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_zhpr2 (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *Ap) { #define BASE double #include "source_hpr2.h" #undef BASE } gsl/cblas/cdotu_sub.c0000644000175000017500000000045113536674414013151 0ustar eddedd#include #include #include "cblas.h" void cblas_cdotu_sub (const int N, const void *X, const int incX, const void *Y, const int incY, void *result) { #define BASE float #define CONJ_SIGN 1.0 #include "source_dot_c.h" #undef CONJ_SIGN #undef BASE } gsl/cblas/dasum.c0000644000175000017500000000031213536674414012267 0ustar eddedd#include #include #include "cblas.h" double cblas_dasum (const int N, const double *X, const int incX) { #define BASE double #include "source_asum_r.h" #undef BASE } gsl/cblas/test_her.c0000644000175000017500000001032413536674414012777 0ustar eddedd#include #include #include #include #include "tests.h" void test_her (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; int N = 1; int lda = 1; float alpha = 1.0f; float A[] = { 0.188f, 0.856f }; float X[] = { -0.832f, -0.151f }; int incX = -1; float A_expected[] = { 0.903025f, 0.0f }; cblas_cher(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], flteps, "cher(case 1410) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], flteps, "cher(case 1410) imag"); }; }; }; { int order = 101; int uplo = 122; int N = 1; int lda = 1; float alpha = 1.0f; float A[] = { 0.188f, 0.856f }; float X[] = { -0.832f, -0.151f }; int incX = -1; float A_expected[] = { 0.903025f, 0.0f }; cblas_cher(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], flteps, "cher(case 1411) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], flteps, "cher(case 1411) imag"); }; }; }; { int order = 102; int uplo = 121; int N = 1; int lda = 1; float alpha = 1.0f; float A[] = { 0.188f, 0.856f }; float X[] = { -0.832f, -0.151f }; int incX = -1; float A_expected[] = { 0.903025f, 0.0f }; cblas_cher(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], flteps, "cher(case 1412) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], flteps, "cher(case 1412) imag"); }; }; }; { int order = 102; int uplo = 122; int N = 1; int lda = 1; float alpha = 1.0f; float A[] = { 0.188f, 0.856f }; float X[] = { -0.832f, -0.151f }; int incX = -1; float A_expected[] = { 0.903025f, 0.0f }; cblas_cher(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], flteps, "cher(case 1413) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], flteps, "cher(case 1413) imag"); }; }; }; { int order = 101; int uplo = 121; int N = 1; int lda = 1; double alpha = 0.1; double A[] = { 0.257, 0.326 }; double X[] = { 0.319, -0.009 }; int incX = -1; double A_expected[] = { 0.2671842, 0.0 }; cblas_zher(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], dbleps, "zher(case 1414) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], dbleps, "zher(case 1414) imag"); }; }; }; { int order = 101; int uplo = 122; int N = 1; int lda = 1; double alpha = 0.1; double A[] = { 0.257, 0.326 }; double X[] = { 0.319, -0.009 }; int incX = -1; double A_expected[] = { 0.2671842, 0.0 }; cblas_zher(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], dbleps, "zher(case 1415) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], dbleps, "zher(case 1415) imag"); }; }; }; { int order = 102; int uplo = 121; int N = 1; int lda = 1; double alpha = 0.1; double A[] = { 0.257, 0.326 }; double X[] = { 0.319, -0.009 }; int incX = -1; double A_expected[] = { 0.2671842, 0.0 }; cblas_zher(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], dbleps, "zher(case 1416) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], dbleps, "zher(case 1416) imag"); }; }; }; { int order = 102; int uplo = 122; int N = 1; int lda = 1; double alpha = 0.1; double A[] = { 0.257, 0.326 }; double X[] = { 0.319, -0.009 }; int incX = -1; double A_expected[] = { 0.2671842, 0.0 }; cblas_zher(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], dbleps, "zher(case 1417) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], dbleps, "zher(case 1417) imag"); }; }; }; } gsl/cblas/test_hpmv.c0000644000175000017500000002615113536674414013200 0ustar eddedd#include #include #include #include #include "tests.h" void test_hpmv (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; float alpha[2] = {-0.3f, 0.1f}; float beta[2] = {0.0f, 1.0f}; int N = 2; float A[] = { 0.339f, -0.102f, 0.908f, 0.097f, -0.808f, 0.236f }; float X[] = { 0.993f, -0.502f, -0.653f, 0.796f }; int incX = -1; float Y[] = { -0.35f, 0.339f, -0.269f, -0.122f }; int incY = -1; float y_expected[] = { -0.0627557f, -0.839323f, -0.0877262f, -0.169208f }; cblas_chpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chpmv(case 1118) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chpmv(case 1118) imag"); }; }; }; { int order = 101; int uplo = 121; float alpha[2] = {-0.3f, 0.1f}; float beta[2] = {0.0f, 1.0f}; int N = 2; float A[] = { 0.339f, -0.102f, 0.908f, 0.097f, -0.808f, 0.236f }; float X[] = { 0.993f, -0.502f, -0.653f, 0.796f }; int incX = -1; float Y[] = { -0.35f, 0.339f, -0.269f, -0.122f }; int incY = -1; float y_expected[] = { -0.0627557f, -0.839323f, -0.0877262f, -0.169208f }; cblas_chpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chpmv(case 1119) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chpmv(case 1119) imag"); }; }; }; { int order = 101; int uplo = 122; float alpha[2] = {-0.3f, 0.1f}; float beta[2] = {0.0f, 1.0f}; int N = 2; float A[] = { 0.339f, -0.102f, 0.908f, 0.097f, -0.808f, 0.236f }; float X[] = { 0.993f, -0.502f, -0.653f, 0.796f }; int incX = -1; float Y[] = { -0.35f, 0.339f, -0.269f, -0.122f }; int incY = -1; float y_expected[] = { -0.0037603f, -0.816761f, -0.0392456f, -0.121154f }; cblas_chpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chpmv(case 1120) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chpmv(case 1120) imag"); }; }; }; { int order = 101; int uplo = 122; float alpha[2] = {-0.3f, 0.1f}; float beta[2] = {0.0f, 1.0f}; int N = 2; float A[] = { 0.339f, -0.102f, 0.908f, 0.097f, -0.808f, 0.236f }; float X[] = { 0.993f, -0.502f, -0.653f, 0.796f }; int incX = -1; float Y[] = { -0.35f, 0.339f, -0.269f, -0.122f }; int incY = -1; float y_expected[] = { -0.0037603f, -0.816761f, -0.0392456f, -0.121154f }; cblas_chpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chpmv(case 1121) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chpmv(case 1121) imag"); }; }; }; { int order = 102; int uplo = 121; float alpha[2] = {-0.3f, 0.1f}; float beta[2] = {0.0f, 1.0f}; int N = 2; float A[] = { 0.339f, -0.102f, 0.908f, 0.097f, -0.808f, 0.236f }; float X[] = { 0.993f, -0.502f, -0.653f, 0.796f }; int incX = -1; float Y[] = { -0.35f, 0.339f, -0.269f, -0.122f }; int incY = -1; float y_expected[] = { -0.0627557f, -0.839323f, -0.0877262f, -0.169208f }; cblas_chpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chpmv(case 1122) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chpmv(case 1122) imag"); }; }; }; { int order = 102; int uplo = 121; float alpha[2] = {-0.3f, 0.1f}; float beta[2] = {0.0f, 1.0f}; int N = 2; float A[] = { 0.339f, -0.102f, 0.908f, 0.097f, -0.808f, 0.236f }; float X[] = { 0.993f, -0.502f, -0.653f, 0.796f }; int incX = -1; float Y[] = { -0.35f, 0.339f, -0.269f, -0.122f }; int incY = -1; float y_expected[] = { -0.0627557f, -0.839323f, -0.0877262f, -0.169208f }; cblas_chpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chpmv(case 1123) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chpmv(case 1123) imag"); }; }; }; { int order = 102; int uplo = 122; float alpha[2] = {-0.3f, 0.1f}; float beta[2] = {0.0f, 1.0f}; int N = 2; float A[] = { 0.339f, -0.102f, 0.908f, 0.097f, -0.808f, 0.236f }; float X[] = { 0.993f, -0.502f, -0.653f, 0.796f }; int incX = -1; float Y[] = { -0.35f, 0.339f, -0.269f, -0.122f }; int incY = -1; float y_expected[] = { -0.0037603f, -0.816761f, -0.0392456f, -0.121154f }; cblas_chpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chpmv(case 1124) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chpmv(case 1124) imag"); }; }; }; { int order = 102; int uplo = 122; float alpha[2] = {-0.3f, 0.1f}; float beta[2] = {0.0f, 1.0f}; int N = 2; float A[] = { 0.339f, -0.102f, 0.908f, 0.097f, -0.808f, 0.236f }; float X[] = { 0.993f, -0.502f, -0.653f, 0.796f }; int incX = -1; float Y[] = { -0.35f, 0.339f, -0.269f, -0.122f }; int incY = -1; float y_expected[] = { -0.0037603f, -0.816761f, -0.0392456f, -0.121154f }; cblas_chpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chpmv(case 1125) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chpmv(case 1125) imag"); }; }; }; { int order = 101; int uplo = 121; double alpha[2] = {1, 0}; double beta[2] = {0, 1}; int N = 2; double A[] = { 0.543, -0.737, 0.281, -0.053, -0.098, -0.826 }; double X[] = { 0.67, -0.857, -0.613, -0.927 }; int incX = -1; double Y[] = { -0.398, -0.934, -0.204, 0.183 }; int incY = -1; double y_expected[] = { 0.745218, -0.60699, -0.37301, -0.983688 }; cblas_zhpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhpmv(case 1126) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhpmv(case 1126) imag"); }; }; }; { int order = 101; int uplo = 121; double alpha[2] = {1, 0}; double beta[2] = {0, 1}; int N = 2; double A[] = { 0.543, -0.737, 0.281, -0.053, -0.098, -0.826 }; double X[] = { 0.67, -0.857, -0.613, -0.927 }; int incX = -1; double Y[] = { -0.398, -0.934, -0.204, 0.183 }; int incY = -1; double y_expected[] = { 0.745218, -0.60699, -0.37301, -0.983688 }; cblas_zhpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhpmv(case 1127) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhpmv(case 1127) imag"); }; }; }; { int order = 101; int uplo = 122; double alpha[2] = {1, 0}; double beta[2] = {0, 1}; int N = 2; double A[] = { 0.543, -0.737, 0.281, -0.053, -0.098, -0.826 }; double X[] = { 0.67, -0.857, -0.613, -0.927 }; int incX = -1; double Y[] = { -0.398, -0.934, -0.204, 0.183 }; int incY = -1; double y_expected[] = { 0.646956, -0.542012, -0.282168, -0.912668 }; cblas_zhpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhpmv(case 1128) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhpmv(case 1128) imag"); }; }; }; { int order = 101; int uplo = 122; double alpha[2] = {1, 0}; double beta[2] = {0, 1}; int N = 2; double A[] = { 0.543, -0.737, 0.281, -0.053, -0.098, -0.826 }; double X[] = { 0.67, -0.857, -0.613, -0.927 }; int incX = -1; double Y[] = { -0.398, -0.934, -0.204, 0.183 }; int incY = -1; double y_expected[] = { 0.646956, -0.542012, -0.282168, -0.912668 }; cblas_zhpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhpmv(case 1129) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhpmv(case 1129) imag"); }; }; }; { int order = 102; int uplo = 121; double alpha[2] = {1, 0}; double beta[2] = {0, 1}; int N = 2; double A[] = { 0.543, -0.737, 0.281, -0.053, -0.098, -0.826 }; double X[] = { 0.67, -0.857, -0.613, -0.927 }; int incX = -1; double Y[] = { -0.398, -0.934, -0.204, 0.183 }; int incY = -1; double y_expected[] = { 0.745218, -0.60699, -0.37301, -0.983688 }; cblas_zhpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhpmv(case 1130) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhpmv(case 1130) imag"); }; }; }; { int order = 102; int uplo = 121; double alpha[2] = {1, 0}; double beta[2] = {0, 1}; int N = 2; double A[] = { 0.543, -0.737, 0.281, -0.053, -0.098, -0.826 }; double X[] = { 0.67, -0.857, -0.613, -0.927 }; int incX = -1; double Y[] = { -0.398, -0.934, -0.204, 0.183 }; int incY = -1; double y_expected[] = { 0.745218, -0.60699, -0.37301, -0.983688 }; cblas_zhpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhpmv(case 1131) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhpmv(case 1131) imag"); }; }; }; { int order = 102; int uplo = 122; double alpha[2] = {1, 0}; double beta[2] = {0, 1}; int N = 2; double A[] = { 0.543, -0.737, 0.281, -0.053, -0.098, -0.826 }; double X[] = { 0.67, -0.857, -0.613, -0.927 }; int incX = -1; double Y[] = { -0.398, -0.934, -0.204, 0.183 }; int incY = -1; double y_expected[] = { 0.646956, -0.542012, -0.282168, -0.912668 }; cblas_zhpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhpmv(case 1132) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhpmv(case 1132) imag"); }; }; }; { int order = 102; int uplo = 122; double alpha[2] = {1, 0}; double beta[2] = {0, 1}; int N = 2; double A[] = { 0.543, -0.737, 0.281, -0.053, -0.098, -0.826 }; double X[] = { 0.67, -0.857, -0.613, -0.927 }; int incX = -1; double Y[] = { -0.398, -0.934, -0.204, 0.183 }; int incY = -1; double y_expected[] = { 0.646956, -0.542012, -0.282168, -0.912668 }; cblas_zhpmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhpmv(case 1133) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhpmv(case 1133) imag"); }; }; }; } gsl/cblas/ddot.c0000644000175000017500000000050413536674414012113 0ustar eddedd#include #include #include "cblas.h" double cblas_ddot (const int N, const double *X, const int incX, const double *Y, const int incY) { #define INIT_VAL 0.0 #define ACC_TYPE double #define BASE double #include "source_dot_r.h" #undef ACC_TYPE #undef BASE #undef INIT_VAL } gsl/cblas/source_rotmg.h0000644000175000017500000000552013536674414013701 0ustar eddedd/* blas/source_rotmg.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { const BASE G = 4096.0, G2 = G * G; BASE D1 = *d1, D2 = *d2, x = *b1, y = b2; BASE h11, h12, h21, h22, u; BASE c, s; /* case of d1 < 0, appendix A, second to last paragraph */ if (D1 < 0.0) { P[0] = -1; P[1] = 0; P[2] = 0; P[3] = 0; P[4] = 0; *d1 = 0; *d2 = 0; *b1 = 0; return; } if (D2 * y == 0.0) { P[0] = -2; /* case of H = I, page 315 */ return; } c = fabs(D1 * x * x); s = fabs(D2 * y * y); if (c > s) { /* case of equation A6 */ P[0] = 0.0; h11 = 1; h12 = (D2 * y) / (D1 * x); h21 = -y / x; h22 = 1; u = 1 - h21 * h12; if (u <= 0.0) { /* the case u <= 0 is rejected */ P[0] = -1; P[1] = 0; P[2] = 0; P[3] = 0; P[4] = 0; *d1 = 0; *d2 = 0; *b1 = 0; return; } D1 /= u; D2 /= u; x *= u; } else { /* case of equation A7 */ if (D2 * y * y < 0.0) { P[0] = -1; P[1] = 0; P[2] = 0; P[3] = 0; P[4] = 0; *d1 = 0; *d2 = 0; *b1 = 0; return; } P[0] = 1; h11 = (D1 * x) / (D2 * y); h12 = 1; h21 = -1; h22 = x / y; u = 1 + h11 * h22; D1 /= u; D2 /= u; { BASE tmp = D2; D2 = D1; D1 = tmp; } x = y * u; } /* rescale D1 to range [1/G2,G2] */ while (D1 <= 1.0 / G2 && D1 != 0.0) { P[0] = -1; D1 *= G2; x /= G; h11 /= G; h12 /= G; } while (D1 >= G2) { P[0] = -1; D1 /= G2; x *= G; h11 *= G; h12 *= G; } /* rescale D2 to range [1/G2,G2] */ while (fabs(D2) <= 1.0 / G2 && D2 != 0.0) { P[0] = -1; D2 *= G2; h21 /= G; h22 /= G; } while (fabs(D2) >= G2) { P[0] = -1; D2 /= G2; h21 *= G; h22 *= G; } *d1 = D1; *d2 = D2; *b1 = x; if (P[0] == -1.0) { P[1] = h11; P[2] = h21; P[3] = h12; P[4] = h22; } else if (P[0] == 0.0) { P[2] = h21; P[3] = h12; } else if (P[0] == 1.0) { P[1] = h11; P[4] = h22; } } gsl/cblas/source_trsm_c.h0000644000175000017500000003622713536674414014050 0ustar eddedd/* blas/source_trsm_c.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j, k; INDEX n1, n2; const int nonunit = (Diag == CblasNonUnit); const int conj = (TransA == CblasConjTrans) ? -1 : 1; int side, uplo, trans; CHECK_ARGS12(TRSM,Order,Side,Uplo,TransA,Diag,M,N,alpha,A,lda,B,ldb); { const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); if (Order == CblasRowMajor) { n1 = M; n2 = N; side = Side; uplo = Uplo; trans = TransA; trans = (TransA == CblasNoTrans) ? CblasNoTrans : CblasTrans; } else { n1 = N; n2 = M; side = (Side == CblasLeft) ? CblasRight : CblasLeft; /* exchanged */ uplo = (Uplo == CblasUpper) ? CblasLower : CblasUpper; /* exchanged */ trans = (TransA == CblasNoTrans) ? CblasNoTrans : CblasTrans; /* same */ } if (side == CblasLeft && uplo == CblasUpper && trans == CblasNoTrans) { /* form B := alpha * inv(TriU(A)) *B */ if (!(alpha_real == 1.0 && alpha_imag == 0.0)) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = alpha_real * Bij_real - alpha_imag * Bij_imag; IMAG(B, ldb * i + j) = alpha_real * Bij_imag + alpha_imag * Bij_real; } } } for (i = n1; i > 0 && i--;) { if (nonunit) { const BASE Aii_real = CONST_REAL(A, lda * i + i); const BASE Aii_imag = conj * CONST_IMAG(A, lda * i + i); const BASE s = xhypot(Aii_real, Aii_imag); const BASE a_real = Aii_real / s; const BASE a_imag = Aii_imag / s; for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = (Bij_real * a_real + Bij_imag * a_imag) / s; IMAG(B, ldb * i + j) = (Bij_imag * a_real - Bij_real * a_imag) / s; } } for (k = 0; k < i; k++) { const BASE Aki_real = CONST_REAL(A, k * lda + i); const BASE Aki_imag = conj * CONST_IMAG(A, k * lda + i); for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * k + j) -= Aki_real * Bij_real - Aki_imag * Bij_imag; IMAG(B, ldb * k + j) -= Aki_real * Bij_imag + Aki_imag * Bij_real; } } } } else if (side == CblasLeft && uplo == CblasUpper && trans == CblasTrans) { /* form B := alpha * inv(TriU(A))' *B */ if (!(alpha_real == 1.0 && alpha_imag == 0.0)) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = alpha_real * Bij_real - alpha_imag * Bij_imag; IMAG(B, ldb * i + j) = alpha_real * Bij_imag + alpha_imag * Bij_real; } } } for (i = 0; i < n1; i++) { if (nonunit) { const BASE Aii_real = CONST_REAL(A, lda * i + i); const BASE Aii_imag = conj * CONST_IMAG(A, lda * i + i); const BASE s = xhypot(Aii_real, Aii_imag); const BASE a_real = Aii_real / s; const BASE a_imag = Aii_imag / s; for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = (Bij_real * a_real + Bij_imag * a_imag) / s; IMAG(B, ldb * i + j) = (Bij_imag * a_real - Bij_real * a_imag) / s; } } for (k = i + 1; k < n1; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = conj * CONST_IMAG(A, i * lda + k); for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * k + j) -= Aik_real * Bij_real - Aik_imag * Bij_imag; IMAG(B, ldb * k + j) -= Aik_real * Bij_imag + Aik_imag * Bij_real; } } } } else if (side == CblasLeft && uplo == CblasLower && trans == CblasNoTrans) { /* form B := alpha * inv(TriL(A))*B */ if (!(alpha_real == 1.0 && alpha_imag == 0.0)) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = alpha_real * Bij_real - alpha_imag * Bij_imag; IMAG(B, ldb * i + j) = alpha_real * Bij_imag + alpha_imag * Bij_real; } } } for (i = 0; i < n1; i++) { if (nonunit) { const BASE Aii_real = CONST_REAL(A, lda * i + i); const BASE Aii_imag = conj * CONST_IMAG(A, lda * i + i); const BASE s = xhypot(Aii_real, Aii_imag); const BASE a_real = Aii_real / s; const BASE a_imag = Aii_imag / s; for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = (Bij_real * a_real + Bij_imag * a_imag) / s; IMAG(B, ldb * i + j) = (Bij_imag * a_real - Bij_real * a_imag) / s; } } for (k = i + 1; k < n1; k++) { const BASE Aki_real = CONST_REAL(A, k * lda + i); const BASE Aki_imag = conj * CONST_IMAG(A, k * lda + i); for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * k + j) -= Aki_real * Bij_real - Aki_imag * Bij_imag; IMAG(B, ldb * k + j) -= Aki_real * Bij_imag + Aki_imag * Bij_real; } } } } else if (side == CblasLeft && uplo == CblasLower && trans == CblasTrans) { /* form B := alpha * TriL(A)' *B */ if (!(alpha_real == 1.0 && alpha_imag == 0.0)) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = alpha_real * Bij_real - alpha_imag * Bij_imag; IMAG(B, ldb * i + j) = alpha_real * Bij_imag + alpha_imag * Bij_real; } } } for (i = n1; i > 0 && i--;) { if (nonunit) { const BASE Aii_real = CONST_REAL(A, lda * i + i); const BASE Aii_imag = conj * CONST_IMAG(A, lda * i + i); const BASE s = xhypot(Aii_real, Aii_imag); const BASE a_real = Aii_real / s; const BASE a_imag = Aii_imag / s; for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = (Bij_real * a_real + Bij_imag * a_imag) / s; IMAG(B, ldb * i + j) = (Bij_imag * a_real - Bij_real * a_imag) / s; } } for (k = 0; k < i; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = conj * CONST_IMAG(A, i * lda + k); for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * k + j) -= Aik_real * Bij_real - Aik_imag * Bij_imag; IMAG(B, ldb * k + j) -= Aik_real * Bij_imag + Aik_imag * Bij_real; } } } } else if (side == CblasRight && uplo == CblasUpper && trans == CblasNoTrans) { /* form B := alpha * B * inv(TriU(A)) */ if (!(alpha_real == 1.0 && alpha_imag == 0.0)) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = alpha_real * Bij_real - alpha_imag * Bij_imag; IMAG(B, ldb * i + j) = alpha_real * Bij_imag + alpha_imag * Bij_real; } } } for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { if (nonunit) { const BASE Ajj_real = CONST_REAL(A, lda * j + j); const BASE Ajj_imag = conj * CONST_IMAG(A, lda * j + j); const BASE s = xhypot(Ajj_real, Ajj_imag); const BASE a_real = Ajj_real / s; const BASE a_imag = Ajj_imag / s; const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = (Bij_real * a_real + Bij_imag * a_imag) / s; IMAG(B, ldb * i + j) = (Bij_imag * a_real - Bij_real * a_imag) / s; } { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); for (k = j + 1; k < n2; k++) { const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = conj * CONST_IMAG(A, j * lda + k); REAL(B, ldb * i + k) -= Ajk_real * Bij_real - Ajk_imag * Bij_imag; IMAG(B, ldb * i + k) -= Ajk_real * Bij_imag + Ajk_imag * Bij_real; } } } } } else if (side == CblasRight && uplo == CblasUpper && trans == CblasTrans) { /* form B := alpha * B * inv(TriU(A))' */ if (!(alpha_real == 1.0 && alpha_imag == 0.0)) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = alpha_real * Bij_real - alpha_imag * Bij_imag; IMAG(B, ldb * i + j) = alpha_real * Bij_imag + alpha_imag * Bij_real; } } } for (i = 0; i < n1; i++) { for (j = n2; j > 0 && j--;) { if (nonunit) { const BASE Ajj_real = CONST_REAL(A, lda * j + j); const BASE Ajj_imag = conj * CONST_IMAG(A, lda * j + j); const BASE s = xhypot(Ajj_real, Ajj_imag); const BASE a_real = Ajj_real / s; const BASE a_imag = Ajj_imag / s; const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = (Bij_real * a_real + Bij_imag * a_imag) / s; IMAG(B, ldb * i + j) = (Bij_imag * a_real - Bij_real * a_imag) / s; } { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); for (k = 0; k < j; k++) { const BASE Akj_real = CONST_REAL(A, k * lda + j); const BASE Akj_imag = conj * CONST_IMAG(A, k * lda + j); REAL(B, ldb * i + k) -= Akj_real * Bij_real - Akj_imag * Bij_imag; IMAG(B, ldb * i + k) -= Akj_real * Bij_imag + Akj_imag * Bij_real; } } } } } else if (side == CblasRight && uplo == CblasLower && trans == CblasNoTrans) { /* form B := alpha * B * inv(TriL(A)) */ if (!(alpha_real == 1.0 && alpha_imag == 0.0)) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = alpha_real * Bij_real - alpha_imag * Bij_imag; IMAG(B, ldb * i + j) = alpha_real * Bij_imag + alpha_imag * Bij_real; } } } for (i = 0; i < n1; i++) { for (j = n2; j > 0 && j--;) { if (nonunit) { const BASE Ajj_real = CONST_REAL(A, lda * j + j); const BASE Ajj_imag = conj * CONST_IMAG(A, lda * j + j); const BASE s = xhypot(Ajj_real, Ajj_imag); const BASE a_real = Ajj_real / s; const BASE a_imag = Ajj_imag / s; const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = (Bij_real * a_real + Bij_imag * a_imag) / s; IMAG(B, ldb * i + j) = (Bij_imag * a_real - Bij_real * a_imag) / s; } { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); for (k = 0; k < j; k++) { const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = conj * CONST_IMAG(A, j * lda + k); REAL(B, ldb * i + k) -= Ajk_real * Bij_real - Ajk_imag * Bij_imag; IMAG(B, ldb * i + k) -= Ajk_real * Bij_imag + Ajk_imag * Bij_real; } } } } } else if (side == CblasRight && uplo == CblasLower && trans == CblasTrans) { /* form B := alpha * B * inv(TriL(A))' */ if (!(alpha_real == 1.0 && alpha_imag == 0.0)) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = alpha_real * Bij_real - alpha_imag * Bij_imag; IMAG(B, ldb * i + j) = alpha_real * Bij_imag + alpha_imag * Bij_real; } } } for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { if (nonunit) { const BASE Ajj_real = CONST_REAL(A, lda * j + j); const BASE Ajj_imag = conj * CONST_IMAG(A, lda * j + j); const BASE s = xhypot(Ajj_real, Ajj_imag); const BASE a_real = Ajj_real / s; const BASE a_imag = Ajj_imag / s; const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); REAL(B, ldb * i + j) = (Bij_real * a_real + Bij_imag * a_imag) / s; IMAG(B, ldb * i + j) = (Bij_imag * a_real - Bij_real * a_imag) / s; } { const BASE Bij_real = REAL(B, ldb * i + j); const BASE Bij_imag = IMAG(B, ldb * i + j); for (k = j + 1; k < n2; k++) { const BASE Akj_real = CONST_REAL(A, k * lda + j); const BASE Akj_imag = conj * CONST_IMAG(A, k * lda + j); REAL(B, ldb * i + k) -= Akj_real * Bij_real - Akj_imag * Bij_imag; IMAG(B, ldb * i + k) -= Akj_real * Bij_imag + Akj_imag * Bij_real; } } } } } else { BLAS_ERROR("unrecognized operation"); } } } gsl/cblas/source_gerc.h0000644000175000017500000000470213536674414013472 0ustar eddedd/* blas/source_gerc.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; CHECK_ARGS10(CZ_GERC,order,M,N,alpha,X,incX,Y,incY,A,lda); { const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); if (order == CblasRowMajor) { INDEX ix = OFFSET(M, incX); for (i = 0; i < M; i++) { const BASE X_real = CONST_REAL(X, ix); const BASE X_imag = CONST_IMAG(X, ix); const BASE tmp_real = alpha_real * X_real - alpha_imag * X_imag; const BASE tmp_imag = alpha_imag * X_real + alpha_real * X_imag; INDEX jy = OFFSET(N, incY); for (j = 0; j < N; j++) { const BASE Y_real = CONST_REAL(Y, jy); const BASE Y_imag = -CONST_IMAG(Y, jy); REAL(A, lda * i + j) += Y_real * tmp_real - Y_imag * tmp_imag; IMAG(A, lda * i + j) += Y_imag * tmp_real + Y_real * tmp_imag; jy += incY; } ix += incX; } } else if (order == CblasColMajor) { INDEX jy = OFFSET(N, incY); for (j = 0; j < N; j++) { const BASE Y_real = CONST_REAL(Y, jy); const BASE Y_imag = -CONST_IMAG(Y, jy); const BASE tmp_real = alpha_real * Y_real - alpha_imag * Y_imag; const BASE tmp_imag = alpha_imag * Y_real + alpha_real * Y_imag; INDEX ix = OFFSET(M, incX); for (i = 0; i < M; i++) { const BASE X_real = CONST_REAL(X, ix); const BASE X_imag = CONST_IMAG(X, ix); REAL(A, i + lda * j) += X_real * tmp_real - X_imag * tmp_imag; IMAG(A, i + lda * j) += X_imag * tmp_real + X_real * tmp_imag; ix += incX; } jy += incY; } } else { BLAS_ERROR("unrecognized operation"); } } } gsl/cblas/dscal.c0000644000175000017500000000032613536674414012251 0ustar eddedd#include #include #include "cblas.h" void cblas_dscal (const int N, const double alpha, double *X, const int incX) { #define BASE double #include "source_scal_r.h" #undef BASE } gsl/cblas/ztbmv.c0000644000175000017500000000064713536674414012333 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_ztbmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const void *A, const int lda, void *X, const int incX) { #define BASE double #include "source_tbmv_c.h" #undef BASE } gsl/cblas/zsyrk.c0000644000175000017500000000065613536674414012353 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_zsyrk (const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *beta, void *C, const int ldc) { #define BASE double #include "source_syrk_c.h" #undef BASE } gsl/cblas/test_syr.c0000644000175000017500000000653013536674414013042 0ustar eddedd#include #include #include #include #include "tests.h" void test_syr (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; int N = 1; int lda = 1; float alpha = 0.1f; float A[] = { -0.291f }; float X[] = { 0.845f }; int incX = -1; float A_expected[] = { -0.219597f }; cblas_ssyr(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], flteps, "ssyr(case 1402)"); } }; }; { int order = 101; int uplo = 122; int N = 1; int lda = 1; float alpha = 0.1f; float A[] = { -0.291f }; float X[] = { 0.845f }; int incX = -1; float A_expected[] = { -0.219597f }; cblas_ssyr(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], flteps, "ssyr(case 1403)"); } }; }; { int order = 102; int uplo = 121; int N = 1; int lda = 1; float alpha = 0.1f; float A[] = { -0.291f }; float X[] = { 0.845f }; int incX = -1; float A_expected[] = { -0.219597f }; cblas_ssyr(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], flteps, "ssyr(case 1404)"); } }; }; { int order = 102; int uplo = 122; int N = 1; int lda = 1; float alpha = 0.1f; float A[] = { -0.291f }; float X[] = { 0.845f }; int incX = -1; float A_expected[] = { -0.219597f }; cblas_ssyr(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], flteps, "ssyr(case 1405)"); } }; }; { int order = 101; int uplo = 121; int N = 1; int lda = 1; double alpha = -0.3; double A[] = { -0.65 }; double X[] = { -0.891 }; int incX = -1; double A_expected[] = { -0.8881643 }; cblas_dsyr(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], dbleps, "dsyr(case 1406)"); } }; }; { int order = 101; int uplo = 122; int N = 1; int lda = 1; double alpha = -0.3; double A[] = { -0.65 }; double X[] = { -0.891 }; int incX = -1; double A_expected[] = { -0.8881643 }; cblas_dsyr(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], dbleps, "dsyr(case 1407)"); } }; }; { int order = 102; int uplo = 121; int N = 1; int lda = 1; double alpha = -0.3; double A[] = { -0.65 }; double X[] = { -0.891 }; int incX = -1; double A_expected[] = { -0.8881643 }; cblas_dsyr(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], dbleps, "dsyr(case 1408)"); } }; }; { int order = 102; int uplo = 122; int N = 1; int lda = 1; double alpha = -0.3; double A[] = { -0.65 }; double X[] = { -0.891 }; int incX = -1; double A_expected[] = { -0.8881643 }; cblas_dsyr(order, uplo, N, alpha, X, incX, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], dbleps, "dsyr(case 1409)"); } }; }; } gsl/cblas/error_cblas_l2.h0000644000175000017500000001562213536674414014067 0ustar eddedd/* cblas/error_cblas_l2.h * * Copyright (C) 2010 José Luis García Pallero * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __ERROR_CBLAS_L2_H__ #define __ERROR_CBLAS_L2_H__ #include #include "error_cblas.h" /* * ============================================================================= * Prototypes for level 2 BLAS * ============================================================================= */ /* * Routines with standard 4 prefixes (S, D, C, Z) */ /* cblas_xgemv() */ #define CBLAS_ERROR_GEMV(pos,order,TransA,M,N,alpha,A,lda,X,incX,beta,Y,incY) \ CHECK_ORDER(pos,1,order); \ CHECK_TRANSPOSE(pos,2,TransA); \ CHECK_DIM(pos,3,M); \ CHECK_DIM(pos,4,N); \ if((order)==CblasRowMajor) { \ if((lda) #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_zgemv (const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY) { #define BASE double #include "source_gemv_c.h" #undef BASE } gsl/cblas/source_trsv_c.h0000644000175000017500000002003113536674414014043 0ustar eddedd/* blas/source_trsv_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { const int conj = (TransA == CblasConjTrans) ? -1 : 1; const int Trans = (TransA != CblasConjTrans) ? TransA : CblasTrans; const int nonunit = (Diag == CblasNonUnit); INDEX i, j; INDEX ix, jx; CHECK_ARGS9(TRSV,order,Uplo,TransA,Diag,N,A,lda,X,incX); if (N == 0) return; /* form x := inv( A )*x */ if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasLower)) { ix = OFFSET(N, incX) + incX * (N - 1); if (nonunit) { const BASE a_real = CONST_REAL(A, lda * (N - 1) + (N - 1)); const BASE a_imag = conj * CONST_IMAG(A, lda * (N - 1) + (N - 1)); const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (x_real * b_real + x_imag * b_imag) / s; IMAG(X, ix) = (x_imag * b_real - b_imag * x_real) / s; } ix -= incX; for (i = N - 1; i > 0 && i--;) { BASE tmp_real = REAL(X, ix); BASE tmp_imag = IMAG(X, ix); jx = ix + incX; for (j = i + 1; j < N; j++) { const BASE Aij_real = CONST_REAL(A, lda * i + j); const BASE Aij_imag = conj * CONST_IMAG(A, lda * i + j); const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); tmp_real -= Aij_real * x_real - Aij_imag * x_imag; tmp_imag -= Aij_real * x_imag + Aij_imag * x_real; jx += incX; } if (nonunit) { const BASE a_real = CONST_REAL(A, lda * i + i); const BASE a_imag = conj * CONST_IMAG(A, lda * i + i); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (tmp_real * b_real + tmp_imag * b_imag) / s; IMAG(X, ix) = (tmp_imag * b_real - tmp_real * b_imag) / s; } else { REAL(X, ix) = tmp_real; IMAG(X, ix) = tmp_imag; } ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasUpper)) { /* forward substitution */ ix = OFFSET(N, incX); if (nonunit) { const BASE a_real = CONST_REAL(A, lda * 0 + 0); const BASE a_imag = conj * CONST_IMAG(A, lda * 0 + 0); const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (x_real * b_real + x_imag * b_imag) / s; IMAG(X, ix) = (x_imag * b_real - b_imag * x_real) / s; } ix += incX; for (i = 1; i < N; i++) { BASE tmp_real = REAL(X, ix); BASE tmp_imag = IMAG(X, ix); jx = OFFSET(N, incX); for (j = 0; j < i; j++) { const BASE Aij_real = CONST_REAL(A, lda * i + j); const BASE Aij_imag = conj * CONST_IMAG(A, lda * i + j); const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); tmp_real -= Aij_real * x_real - Aij_imag * x_imag; tmp_imag -= Aij_real * x_imag + Aij_imag * x_real; jx += incX; } if (nonunit) { const BASE a_real = CONST_REAL(A, lda * i + i); const BASE a_imag = conj * CONST_IMAG(A, lda * i + i); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (tmp_real * b_real + tmp_imag * b_imag) / s; IMAG(X, ix) = (tmp_imag * b_real - tmp_real * b_imag) / s; } else { REAL(X, ix) = tmp_real; IMAG(X, ix) = tmp_imag; } ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasLower)) { /* form x := inv( A' )*x */ /* forward substitution */ ix = OFFSET(N, incX); if (nonunit) { const BASE a_real = CONST_REAL(A, lda * 0 + 0); const BASE a_imag = conj * CONST_IMAG(A, lda * 0 + 0); const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (x_real * b_real + x_imag * b_imag) / s; IMAG(X, ix) = (x_imag * b_real - b_imag * x_real) / s; } ix += incX; for (i = 1; i < N; i++) { BASE tmp_real = REAL(X, ix); BASE tmp_imag = IMAG(X, ix); jx = OFFSET(N, incX); for (j = 0; j < i; j++) { const BASE Aij_real = CONST_REAL(A, lda * j + i); const BASE Aij_imag = conj * CONST_IMAG(A, lda * j + i); const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); tmp_real -= Aij_real * x_real - Aij_imag * x_imag; tmp_imag -= Aij_real * x_imag + Aij_imag * x_real; jx += incX; } if (nonunit) { const BASE a_real = CONST_REAL(A, lda * i + i); const BASE a_imag = conj * CONST_IMAG(A, lda * i + i); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (tmp_real * b_real + tmp_imag * b_imag) / s; IMAG(X, ix) = (tmp_imag * b_real - tmp_real * b_imag) / s; } else { REAL(X, ix) = tmp_real; IMAG(X, ix) = tmp_imag; } ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasUpper)) { /* backsubstitution */ ix = OFFSET(N, incX) + incX * (N - 1); if (nonunit) { const BASE a_real = CONST_REAL(A, lda * (N - 1) + (N - 1)); const BASE a_imag = conj * CONST_IMAG(A, lda * (N - 1) + (N - 1)); const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (x_real * b_real + x_imag * b_imag) / s; IMAG(X, ix) = (x_imag * b_real - b_imag * x_real) / s; } ix -= incX; for (i = N - 1; i > 0 && i--;) { BASE tmp_real = REAL(X, ix); BASE tmp_imag = IMAG(X, ix); jx = ix + incX; for (j = i + 1; j < N; j++) { const BASE Aij_real = CONST_REAL(A, lda * j + i); const BASE Aij_imag = conj * CONST_IMAG(A, lda * j + i); const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); tmp_real -= Aij_real * x_real - Aij_imag * x_imag; tmp_imag -= Aij_real * x_imag + Aij_imag * x_real; jx += incX; } if (nonunit) { const BASE a_real = CONST_REAL(A, lda * i + i); const BASE a_imag = conj * CONST_IMAG(A, lda * i + i); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (tmp_real * b_real + tmp_imag * b_imag) / s; IMAG(X, ix) = (tmp_imag * b_real - tmp_real * b_imag) / s; } else { REAL(X, ix) = tmp_real; IMAG(X, ix) = tmp_imag; } ix -= incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/ChangeLog0000644000175000017500000000237013536674414012572 0ustar eddedd2010-10-12 Brian Gough * added error checking to selected cblas functions (José Luis García Pallero) 2009-06-24 Brian Gough * source_scal_c.h source_scal_r.h: remove needless use of OFFSET macro when incX is known to be positive 2003-01-21 Brian Gough * test.m: skip trans=113 for complex matrix on SYRK tests. Tue Feb 19 20:50:27 2002 Brian Gough * gsl_cblas.h: added extern "C" Mon Jul 2 22:21:00 2001 Brian Gough * test.c: added missing #include Fri Apr 27 19:53:10 2001 Brian Gough * source_tpmv_r.h: moved index declarations to more restricted scope * source_rotmg.h: changed declaration y1 to y in order to avoid confusion with function y0(x) in C library. Also changed x1 to x. * source_syr2k_r.h: error where lda was used instead of ldb in syr2k_r was not picked up by any tests! Now fixed Thu Apr 12 16:46:16 2001 Brian Gough * all routines now included for Level 1, 2, 3-- passes blas test suite for numerical results, but no error handling yet * split out from blas directory to make an independent blas library gsl/cblas/source_ger.h0000644000175000017500000000277513536674414013337 0ustar eddedd/* blas/source_ger.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; CHECK_ARGS10(SD_GER,order,M,N,alpha,X,incX,Y,incY,A,lda); if (order == CblasRowMajor) { INDEX ix = OFFSET(M, incX); for (i = 0; i < M; i++) { const BASE tmp = alpha * X[ix]; INDEX jy = OFFSET(N, incY); for (j = 0; j < N; j++) { A[lda * i + j] += Y[jy] * tmp; jy += incY; } ix += incX; } } else if (order == CblasColMajor) { INDEX jy = OFFSET(N, incY); for (j = 0; j < N; j++) { const BASE tmp = alpha * Y[jy]; INDEX ix = OFFSET(M, incX); for (i = 0; i < M; i++) { A[i + lda * j] += X[ix] * tmp; ix += incX; } jy += incY; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/chemm.c0000644000175000017500000000070313536674414012253 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_chemm (const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc) { #define BASE float #include "source_hemm.h" #undef BASE } gsl/cblas/source_tbsv_r.h0000644000175000017500000000755313536674414014060 0ustar eddedd/* blas/source_tbsv_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { const int nonunit = (Diag == CblasNonUnit); INDEX i, j; const int Trans = (TransA != CblasConjTrans) ? TransA : CblasTrans; CHECK_ARGS10(TBSV,order,Uplo,TransA,Diag,N,K,A,lda,X,incX); if (N == 0) return; /* form x := inv( A )*x */ if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasLower)) { /* backsubstitution */ INDEX ix = OFFSET(N, incX) + incX * (N - 1); for (i = N; i > 0 && i--;) { BASE tmp = X[ix]; const INDEX j_min = i + 1; const INDEX j_max = GSL_MIN(N, i + K + 1); INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { const BASE Aij = A[lda * i + (j - i)]; tmp -= Aij * X[jx]; jx += incX; } if (nonunit) { X[ix] = tmp / A[lda * i + 0]; } else { X[ix] = tmp; } ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasUpper)) { /* forward substitution */ INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { BASE tmp = X[ix]; const INDEX j_min = (i > K ? i - K : 0); const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { const BASE Aij = A[lda * i + (K + j - i)]; tmp -= Aij * X[jx]; jx += incX; } if (nonunit) { X[ix] = tmp / A[lda * i + K]; } else { X[ix] = tmp; } ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasLower)) { /* form x := inv( A' )*x */ /* forward substitution */ INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { BASE tmp = X[ix]; const INDEX j_min = (K > i ? 0 : i - K); const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { const BASE Aji = A[(i - j) + lda * j]; tmp -= Aji * X[jx]; jx += incX; } if (nonunit) { X[ix] = tmp / A[0 + lda * i]; } else { X[ix] = tmp; } ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasUpper)) { /* backsubstitution */ INDEX ix = OFFSET(N, incX) + (N - 1) * incX; for (i = N; i > 0 && i--;) { BASE tmp = X[ix]; const INDEX j_min = i + 1; const INDEX j_max = GSL_MIN(N, i + K + 1); INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { const BASE Aji = A[(K + i - j) + lda * j]; tmp -= Aji * X[jx]; jx += incX; } if (nonunit) { X[ix] = tmp / A[K + lda * i]; } else { X[ix] = tmp; } ix -= incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/dgemm.c0000644000175000017500000000076613536674414012264 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_dgemm (const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const double alpha, const double *A, const int lda, const double *B, const int ldb, const double beta, double *C, const int ldc) { #define BASE double #include "source_gemm_r.h" #undef BASE } gsl/cblas/sdot.c0000644000175000017500000000047713536674414012143 0ustar eddedd#include #include #include "cblas.h" float cblas_sdot (const int N, const float *X, const int incX, const float *Y, const int incY) { #define INIT_VAL 0.0 #define ACC_TYPE float #define BASE float #include "source_dot_r.h" #undef ACC_TYPE #undef BASE #undef INIT_VAL } gsl/cblas/ssymm.c0000644000175000017500000000071013536674414012330 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_ssymm (const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc) { #define BASE float #include "source_symm_r.h" #undef BASE } gsl/cblas/Makefile.am0000644000175000017500000000626113536674414013057 0ustar eddeddlib_LTLIBRARIES = libgslcblas.la libgslcblas_la_LDFLAGS = $(GSLCBLAS_LDFLAGS) -version-info $(GSL_LT_CBLAS_VERSION) pkginclude_HEADERS = gsl_cblas.h AM_CPPFLAGS = -I$(top_srcdir) libgslcblas_la_SOURCES = sasum.c saxpy.c scasum.c scnrm2.c scopy.c sdot.c sdsdot.c sgbmv.c sgemm.c sgemv.c sger.c snrm2.c srot.c srotg.c srotm.c srotmg.c ssbmv.c sscal.c sspmv.c sspr.c sspr2.c sswap.c ssymm.c ssymv.c ssyr.c ssyr2.c ssyr2k.c ssyrk.c stbmv.c stbsv.c stpmv.c stpsv.c strmm.c strmv.c strsm.c strsv.c dasum.c daxpy.c dcopy.c ddot.c dgbmv.c dgemm.c dgemv.c dger.c dnrm2.c drot.c drotg.c drotm.c drotmg.c dsbmv.c dscal.c dsdot.c dspmv.c dspr.c dspr2.c dswap.c dsymm.c dsymv.c dsyr.c dsyr2.c dsyr2k.c dsyrk.c dtbmv.c dtbsv.c dtpmv.c dtpsv.c dtrmm.c dtrmv.c dtrsm.c dtrsv.c dzasum.c dznrm2.c caxpy.c ccopy.c cdotc_sub.c cdotu_sub.c cgbmv.c cgemm.c cgemv.c cgerc.c cgeru.c chbmv.c chemm.c chemv.c cher.c cher2.c cher2k.c cherk.c chpmv.c chpr.c chpr2.c cscal.c csscal.c cswap.c csymm.c csyr2k.c csyrk.c ctbmv.c ctbsv.c ctpmv.c ctpsv.c ctrmm.c ctrmv.c ctrsm.c ctrsv.c zaxpy.c zcopy.c zdotc_sub.c zdotu_sub.c zdscal.c zgbmv.c zgemm.c zgemv.c zgerc.c zgeru.c zhbmv.c zhemm.c zhemv.c zher.c zher2.c zher2k.c zherk.c zhpmv.c zhpr.c zhpr2.c zscal.c zswap.c zsymm.c zsyr2k.c zsyrk.c ztbmv.c ztbsv.c ztpmv.c ztpsv.c ztrmm.c ztrmv.c ztrsm.c ztrsv.c icamax.c idamax.c isamax.c izamax.c xerbla.c noinst_HEADERS = tests.c tests.h error_cblas.h error_cblas_l2.h error_cblas_l3.h cblas.h source_asum_c.h source_asum_r.h source_axpy_c.h source_axpy_r.h source_copy_c.h source_copy_r.h source_dot_c.h source_dot_r.h source_gbmv_c.h source_gbmv_r.h source_gemm_c.h source_gemm_r.h source_gemv_c.h source_gemv_r.h source_ger.h source_gerc.h source_geru.h source_hbmv.h source_hemm.h source_hemv.h source_her.h source_her2.h source_her2k.h source_herk.h source_hpmv.h source_hpr.h source_hpr2.h source_iamax_c.h source_iamax_r.h source_nrm2_c.h source_nrm2_r.h source_rot.h source_rotg.h source_rotm.h source_rotmg.h source_sbmv.h source_scal_c.h source_scal_c_s.h source_scal_r.h source_spmv.h source_spr.h source_spr2.h source_swap_c.h source_swap_r.h source_symm_c.h source_symm_r.h source_symv.h source_syr.h source_syr2.h source_syr2k_c.h source_syr2k_r.h source_syrk_c.h source_syrk_r.h source_tbmv_c.h source_tbmv_r.h source_tbsv_c.h source_tbsv_r.h source_tpmv_c.h source_tpmv_r.h source_tpsv_c.h source_tpsv_r.h source_trmm_c.h source_trmm_r.h source_trmv_c.h source_trmv_r.h source_trsm_c.h source_trsm_r.h source_trsv_c.h source_trsv_r.h hypot.c check_PROGRAMS = test TESTS = $(check_PROGRAMS) test_LDADD = libgslcblas.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la test_SOURCES = test.c test_amax.c test_asum.c test_axpy.c test_copy.c test_dot.c test_gbmv.c test_gemm.c test_gemv.c test_ger.c test_hbmv.c test_hemm.c test_hemv.c test_her.c test_her2.c test_her2k.c test_herk.c test_hpmv.c test_hpr.c test_hpr2.c test_nrm2.c test_rot.c test_rotg.c test_rotm.c test_rotmg.c test_sbmv.c test_scal.c test_spmv.c test_spr.c test_spr2.c test_swap.c test_symm.c test_symv.c test_syr.c test_syr2.c test_syr2k.c test_syrk.c test_tbmv.c test_tbsv.c test_tpmv.c test_tpsv.c test_trmm.c test_trmv.c test_trsm.c test_trsv.c gsl/cblas/source_gbmv_r.h0000644000175000017500000000537413536674414014034 0ustar eddedd/* blas/source_gbmv_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; INDEX lenX, lenY, L, U; const int Trans = (TransA != CblasConjTrans) ? TransA : CblasTrans; CHECK_ARGS14(GBMV,order,TransA,M,N,KL,KU,alpha,A,lda,X,incX,beta,Y,incY); if (M == 0 || N == 0) return; if (alpha == 0.0 && beta == 1.0) return; if (Trans == CblasNoTrans) { lenX = N; lenY = M; L = KL; U = KU; } else { lenX = M; lenY = N; L = KU; U = KL; } /* form y := beta*y */ if (beta == 0.0) { INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { Y[iy] = 0; iy += incY; } } else if (beta != 1.0) { INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { Y[iy] *= beta; iy += incY; } } if (alpha == 0.0) return; if ((order == CblasRowMajor && Trans == CblasNoTrans) || (order == CblasColMajor && Trans == CblasTrans)) { /* form y := alpha*A*x + y */ INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { BASE temp = 0.0; const INDEX j_min = (i > L ? i - L : 0); const INDEX j_max = GSL_MIN(lenX, i + U + 1); INDEX jx = OFFSET(lenX, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { temp += X[jx] * A[(L - i + j) + i * lda]; jx += incX; } Y[iy] += alpha * temp; iy += incY; } } else if ((order == CblasRowMajor && Trans == CblasTrans) || (order == CblasColMajor && Trans == CblasNoTrans)) { /* form y := alpha*A'*x + y */ INDEX jx = OFFSET(lenX, incX); for (j = 0; j < lenX; j++) { const BASE temp = alpha * X[jx]; if (temp != 0.0) { const INDEX i_min = (j > U ? j - U : 0); const INDEX i_max = GSL_MIN(lenY, j + L + 1); INDEX iy = OFFSET(lenY, incY) + i_min * incY; for (i = i_min; i < i_max; i++) { Y[iy] += temp * A[lda * j + (U + i - j)]; iy += incY; } } jx += incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/source_rotm.h0000644000175000017500000000270413536674414013533 0ustar eddedd/* blas/source_rotm.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX n; INDEX i = OFFSET(N, incX); INDEX j = OFFSET(N, incY); BASE h11, h21, h12, h22; if (P[0] == -1.0) { h11 = P[1]; h21 = P[2]; h12 = P[3]; h22 = P[4]; } else if (P[0] == 0.0) { h11 = 1.0; h21 = P[2]; h12 = P[3]; h22 = 1.0; } else if (P[0] == 1.0) { h11 = P[1]; h21 = -1.0; h12 = 1.0; h22 = P[4]; } else if (P[0] == -2.0) { return; } else { BLAS_ERROR("unrecognized value of P[0]"); return; } for (n = 0; n < N; n++) { const BASE w = X[i]; const BASE z = Y[j]; X[i] = h11 * w + h12 * z; Y[j] = h21 * w + h22 * z; i += incX; j += incY; } } gsl/cblas/test_syr2.c0000644000175000017500000000735113536674414013126 0ustar eddedd#include #include #include #include #include "tests.h" void test_syr2 (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; int N = 1; int lda = 1; float alpha = 0.0f; float A[] = { 0.862f }; float X[] = { 0.823f }; int incX = -1; float Y[] = { 0.699f }; int incY = -1; float A_expected[] = { 0.862f }; cblas_ssyr2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], flteps, "ssyr2(case 1434)"); } }; }; { int order = 101; int uplo = 122; int N = 1; int lda = 1; float alpha = 0.0f; float A[] = { 0.862f }; float X[] = { 0.823f }; int incX = -1; float Y[] = { 0.699f }; int incY = -1; float A_expected[] = { 0.862f }; cblas_ssyr2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], flteps, "ssyr2(case 1435)"); } }; }; { int order = 102; int uplo = 121; int N = 1; int lda = 1; float alpha = 0.0f; float A[] = { 0.862f }; float X[] = { 0.823f }; int incX = -1; float Y[] = { 0.699f }; int incY = -1; float A_expected[] = { 0.862f }; cblas_ssyr2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], flteps, "ssyr2(case 1436)"); } }; }; { int order = 102; int uplo = 122; int N = 1; int lda = 1; float alpha = 0.0f; float A[] = { 0.862f }; float X[] = { 0.823f }; int incX = -1; float Y[] = { 0.699f }; int incY = -1; float A_expected[] = { 0.862f }; cblas_ssyr2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], flteps, "ssyr2(case 1437)"); } }; }; { int order = 101; int uplo = 121; int N = 1; int lda = 1; double alpha = 0; double A[] = { -0.824 }; double X[] = { 0.684 }; int incX = -1; double Y[] = { 0.965 }; int incY = -1; double A_expected[] = { -0.824 }; cblas_dsyr2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], dbleps, "dsyr2(case 1438)"); } }; }; { int order = 101; int uplo = 122; int N = 1; int lda = 1; double alpha = 0; double A[] = { -0.824 }; double X[] = { 0.684 }; int incX = -1; double Y[] = { 0.965 }; int incY = -1; double A_expected[] = { -0.824 }; cblas_dsyr2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], dbleps, "dsyr2(case 1439)"); } }; }; { int order = 102; int uplo = 121; int N = 1; int lda = 1; double alpha = 0; double A[] = { -0.824 }; double X[] = { 0.684 }; int incX = -1; double Y[] = { 0.965 }; int incY = -1; double A_expected[] = { -0.824 }; cblas_dsyr2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], dbleps, "dsyr2(case 1440)"); } }; }; { int order = 102; int uplo = 122; int N = 1; int lda = 1; double alpha = 0; double A[] = { -0.824 }; double X[] = { 0.684 }; int incX = -1; double Y[] = { 0.965 }; int incY = -1; double A_expected[] = { -0.824 }; cblas_dsyr2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[i], A_expected[i], dbleps, "dsyr2(case 1441)"); } }; }; } gsl/cblas/sger.c0000644000175000017500000000055513536674414012127 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_sger (const enum CBLAS_ORDER order, const int M, const int N, const float alpha, const float *X, const int incX, const float *Y, const int incY, float *A, const int lda) { #define BASE float #include "source_ger.h" #undef BASE } gsl/cblas/cgerc.c0000644000175000017500000000055613536674414012253 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_cgerc (const enum CBLAS_ORDER order, const int M, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda) { #define BASE float #include "source_gerc.h" #undef BASE } gsl/cblas/source_hemv.h0000644000175000017500000001230013536674414013502 0ustar eddedd/* blas/source_hemv.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { const int conj = (order == CblasColMajor) ? -1 : 1; INDEX i, j; CHECK_ARGS11(CZ_HEMV,order,Uplo,N,alpha,A,lda,X,incX,beta,Y,incY); { const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); const BASE beta_real = CONST_REAL0(beta); const BASE beta_imag = CONST_IMAG0(beta); if ((alpha_real == 0.0 && alpha_imag == 0.0) && (beta_real == 1.0 && beta_imag == 0.0)) return; /* form y := beta*y */ if (beta_real == 0.0 && beta_imag == 0.0) { INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { REAL(Y, iy) = 0.0; IMAG(Y, iy) = 0.0; iy += incY; } } else if (!(beta_real == 1.0 && beta_imag == 0.0)) { INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { const BASE y_real = REAL(Y, iy); const BASE y_imag = IMAG(Y, iy); const BASE tmpR = y_real * beta_real - y_imag * beta_imag; const BASE tmpI = y_real * beta_imag + y_imag * beta_real; REAL(Y, iy) = tmpR; IMAG(Y, iy) = tmpI; iy += incY; } } if (alpha_real == 0.0 && alpha_imag == 0.0) return; /* form y := alpha*A*x + y */ if ((order == CblasRowMajor && Uplo == CblasUpper) || (order == CblasColMajor && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { BASE x_real = CONST_REAL(X, ix); BASE x_imag = CONST_IMAG(X, ix); BASE temp1_real = alpha_real * x_real - alpha_imag * x_imag; BASE temp1_imag = alpha_real * x_imag + alpha_imag * x_real; BASE temp2_real = 0.0; BASE temp2_imag = 0.0; const INDEX j_min = i + 1; const INDEX j_max = N; INDEX jx = OFFSET(N, incX) + j_min * incX; INDEX jy = OFFSET(N, incY) + j_min * incY; BASE Aii_real = CONST_REAL(A, lda * i + i); /* Aii_imag is zero */ REAL(Y, iy) += temp1_real * Aii_real; IMAG(Y, iy) += temp1_imag * Aii_real; for (j = j_min; j < j_max; j++) { BASE Aij_real = CONST_REAL(A, lda * i + j); BASE Aij_imag = conj * CONST_IMAG(A, lda * i + j); REAL(Y, jy) += temp1_real * Aij_real - temp1_imag * (-Aij_imag); IMAG(Y, jy) += temp1_real * (-Aij_imag) + temp1_imag * Aij_real; x_real = CONST_REAL(X, jx); x_imag = CONST_IMAG(X, jx); temp2_real += x_real * Aij_real - x_imag * Aij_imag; temp2_imag += x_real * Aij_imag + x_imag * Aij_real; jx += incX; jy += incY; } REAL(Y, iy) += alpha_real * temp2_real - alpha_imag * temp2_imag; IMAG(Y, iy) += alpha_real * temp2_imag + alpha_imag * temp2_real; ix += incX; iy += incY; } } else if ((order == CblasRowMajor && Uplo == CblasLower) || (order == CblasColMajor && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX) + (N - 1) * incX; INDEX iy = OFFSET(N, incY) + (N - 1) * incY; for (i = N; i > 0 && i--;) { BASE x_real = CONST_REAL(X, ix); BASE x_imag = CONST_IMAG(X, ix); BASE temp1_real = alpha_real * x_real - alpha_imag * x_imag; BASE temp1_imag = alpha_real * x_imag + alpha_imag * x_real; BASE temp2_real = 0.0; BASE temp2_imag = 0.0; const INDEX j_min = 0; const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; INDEX jy = OFFSET(N, incY) + j_min * incY; BASE Aii_real = CONST_REAL(A, lda * i + i); /* Aii_imag is zero */ REAL(Y, iy) += temp1_real * Aii_real; IMAG(Y, iy) += temp1_imag * Aii_real; for (j = j_min; j < j_max; j++) { BASE Aij_real = CONST_REAL(A, lda * i + j); BASE Aij_imag = conj * CONST_IMAG(A, lda * i + j); REAL(Y, jy) += temp1_real * Aij_real - temp1_imag * (-Aij_imag); IMAG(Y, jy) += temp1_real * (-Aij_imag) + temp1_imag * Aij_real; x_real = CONST_REAL(X, jx); x_imag = CONST_IMAG(X, jx); temp2_real += x_real * Aij_real - x_imag * Aij_imag; temp2_imag += x_real * Aij_imag + x_imag * Aij_real; jx += incX; jy += incY; } REAL(Y, iy) += alpha_real * temp2_real - alpha_imag * temp2_imag; IMAG(Y, iy) += alpha_real * temp2_imag + alpha_imag * temp2_real; ix -= incX; iy -= incY; } } else { BLAS_ERROR("unrecognized operation"); } } } gsl/cblas/source_scal_r.h0000644000175000017500000000167213536674414014020 0ustar eddedd/* blas/source_scal_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i; INDEX ix = 0; if (incX <= 0) { return; } for (i = 0; i < N; i++) { X[ix] *= alpha; ix += incX; } } gsl/cblas/source_symm_c.h0000644000175000017500000002105513536674414014041 0ustar eddedd/* blas/source_symm_c.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j, k; INDEX n1, n2; int uplo, side; CHECK_ARGS13(SYMM,Order,Side,Uplo,M,N,alpha,A,lda,B,ldb,beta,C,ldc); { const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); const BASE beta_real = CONST_REAL0(beta); const BASE beta_imag = CONST_IMAG0(beta); if ((alpha_real == 0.0 && alpha_imag == 0.0) && (beta_real == 1.0 && beta_imag == 0.0)) return; if (Order == CblasRowMajor) { n1 = M; n2 = N; uplo = Uplo; side = Side; } else { n1 = N; n2 = M; uplo = (Uplo == CblasUpper) ? CblasLower : CblasUpper; side = (Side == CblasLeft) ? CblasRight : CblasLeft; } /* form y := beta*y */ if (beta_real == 0.0 && beta_imag == 0.0) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { REAL(C, ldc * i + j) = 0.0; IMAG(C, ldc * i + j) = 0.0; } } } else if (!(beta_real == 1.0 && beta_imag == 0.0)) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Cij_real = REAL(C, ldc * i + j); const BASE Cij_imag = IMAG(C, ldc * i + j); REAL(C, ldc * i + j) = beta_real * Cij_real - beta_imag * Cij_imag; IMAG(C, ldc * i + j) = beta_real * Cij_imag + beta_imag * Cij_real; } } } if (alpha_real == 0.0 && alpha_imag == 0.0) return; if (side == CblasLeft && uplo == CblasUpper) { /* form C := alpha*A*B + C */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = CONST_REAL(B, ldb * i + j); const BASE Bij_imag = CONST_IMAG(B, ldb * i + j); const BASE temp1_real = alpha_real * Bij_real - alpha_imag * Bij_imag; const BASE temp1_imag = alpha_real * Bij_imag + alpha_imag * Bij_real; BASE temp2_real = 0.0; BASE temp2_imag = 0.0; { const BASE Aii_real = CONST_REAL(A, i * lda + i); const BASE Aii_imag = CONST_IMAG(A, i * lda + i); REAL(C, i * ldc + j) += temp1_real * Aii_real - temp1_imag * Aii_imag; IMAG(C, i * ldc + j) += temp1_real * Aii_imag + temp1_imag * Aii_real; } for (k = i + 1; k < n1; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = CONST_IMAG(A, i * lda + k); const BASE Bkj_real = CONST_REAL(B, ldb * k + j); const BASE Bkj_imag = CONST_IMAG(B, ldb * k + j); REAL(C, k * ldc + j) += Aik_real * temp1_real - Aik_imag * temp1_imag; IMAG(C, k * ldc + j) += Aik_real * temp1_imag + Aik_imag * temp1_real; temp2_real += Aik_real * Bkj_real - Aik_imag * Bkj_imag; temp2_imag += Aik_real * Bkj_imag + Aik_imag * Bkj_real; } REAL(C, i * ldc + j) += alpha_real * temp2_real - alpha_imag * temp2_imag; IMAG(C, i * ldc + j) += alpha_real * temp2_imag + alpha_imag * temp2_real; } } } else if (side == CblasLeft && uplo == CblasLower) { /* form C := alpha*A*B + C */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = CONST_REAL(B, ldb * i + j); const BASE Bij_imag = CONST_IMAG(B, ldb * i + j); const BASE temp1_real = alpha_real * Bij_real - alpha_imag * Bij_imag; const BASE temp1_imag = alpha_real * Bij_imag + alpha_imag * Bij_real; BASE temp2_real = 0.0; BASE temp2_imag = 0.0; for (k = 0; k < i; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = CONST_IMAG(A, i * lda + k); const BASE Bkj_real = CONST_REAL(B, ldb * k + j); const BASE Bkj_imag = CONST_IMAG(B, ldb * k + j); REAL(C, k * ldc + j) += Aik_real * temp1_real - Aik_imag * temp1_imag; IMAG(C, k * ldc + j) += Aik_real * temp1_imag + Aik_imag * temp1_real; temp2_real += Aik_real * Bkj_real - Aik_imag * Bkj_imag; temp2_imag += Aik_real * Bkj_imag + Aik_imag * Bkj_real; } { const BASE Aii_real = CONST_REAL(A, i * lda + i); const BASE Aii_imag = CONST_IMAG(A, i * lda + i); REAL(C, i * ldc + j) += temp1_real * Aii_real - temp1_imag * Aii_imag; IMAG(C, i * ldc + j) += temp1_real * Aii_imag + temp1_imag * Aii_real; } REAL(C, i * ldc + j) += alpha_real * temp2_real - alpha_imag * temp2_imag; IMAG(C, i * ldc + j) += alpha_real * temp2_imag + alpha_imag * temp2_real; } } } else if (side == CblasRight && uplo == CblasUpper) { /* form C := alpha*B*A + C */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = CONST_REAL(B, ldb * i + j); const BASE Bij_imag = CONST_IMAG(B, ldb * i + j); const BASE temp1_real = alpha_real * Bij_real - alpha_imag * Bij_imag; const BASE temp1_imag = alpha_real * Bij_imag + alpha_imag * Bij_real; BASE temp2_real = 0.0; BASE temp2_imag = 0.0; { const BASE Ajj_real = CONST_REAL(A, j * lda + j); const BASE Ajj_imag = CONST_IMAG(A, j * lda + j); REAL(C, i * ldc + j) += temp1_real * Ajj_real - temp1_imag * Ajj_imag; IMAG(C, i * ldc + j) += temp1_real * Ajj_imag + temp1_imag * Ajj_real; } for (k = j + 1; k < n2; k++) { const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = CONST_IMAG(A, j * lda + k); const BASE Bik_real = CONST_REAL(B, ldb * i + k); const BASE Bik_imag = CONST_IMAG(B, ldb * i + k); REAL(C, i * ldc + k) += temp1_real * Ajk_real - temp1_imag * Ajk_imag; IMAG(C, i * ldc + k) += temp1_real * Ajk_imag + temp1_imag * Ajk_real; temp2_real += Bik_real * Ajk_real - Bik_imag * Ajk_imag; temp2_imag += Bik_real * Ajk_imag + Bik_imag * Ajk_real; } REAL(C, i * ldc + j) += alpha_real * temp2_real - alpha_imag * temp2_imag; IMAG(C, i * ldc + j) += alpha_real * temp2_imag + alpha_imag * temp2_real; } } } else if (side == CblasRight && uplo == CblasLower) { /* form C := alpha*B*A + C */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = CONST_REAL(B, ldb * i + j); const BASE Bij_imag = CONST_IMAG(B, ldb * i + j); const BASE temp1_real = alpha_real * Bij_real - alpha_imag * Bij_imag; const BASE temp1_imag = alpha_real * Bij_imag + alpha_imag * Bij_real; BASE temp2_real = 0.0; BASE temp2_imag = 0.0; for (k = 0; k < j; k++) { const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = CONST_IMAG(A, j * lda + k); const BASE Bik_real = CONST_REAL(B, ldb * i + k); const BASE Bik_imag = CONST_IMAG(B, ldb * i + k); REAL(C, i * ldc + k) += temp1_real * Ajk_real - temp1_imag * Ajk_imag; IMAG(C, i * ldc + k) += temp1_real * Ajk_imag + temp1_imag * Ajk_real; temp2_real += Bik_real * Ajk_real - Bik_imag * Ajk_imag; temp2_imag += Bik_real * Ajk_imag + Bik_imag * Ajk_real; } { const BASE Ajj_real = CONST_REAL(A, j * lda + j); const BASE Ajj_imag = CONST_IMAG(A, j * lda + j); REAL(C, i * ldc + j) += temp1_real * Ajj_real - temp1_imag * Ajj_imag; IMAG(C, i * ldc + j) += temp1_real * Ajj_imag + temp1_imag * Ajj_real; } REAL(C, i * ldc + j) += alpha_real * temp2_real - alpha_imag * temp2_imag; IMAG(C, i * ldc + j) += alpha_real * temp2_imag + alpha_imag * temp2_real; } } } else { BLAS_ERROR("unrecognized operation"); } } } gsl/cblas/drotmg.c0000644000175000017500000000033213536674414012454 0ustar eddedd#include #include #include "cblas.h" void cblas_drotmg (double *d1, double *d2, double *b1, const double b2, double *P) { #define BASE double #include "source_rotmg.h" #undef BASE } gsl/cblas/source_sbmv.h0000644000175000017500000000546713536674414013532 0ustar eddedd/* blas/source_sbmv.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; CHECK_ARGS12(SD_SBMV,order,Uplo,N,K,alpha,A,lda,X,incX,beta,Y,incY); if (N == 0) return; if (alpha == 0.0 && beta == 1.0) return; /* form y := beta*y */ if (beta == 0.0) { INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { Y[iy] = 0.0; iy += incY; } } else if (beta != 1.0) { INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { Y[iy] *= beta; iy += incY; } } if (alpha == 0.0) return; /* form y := alpha*A*x + y */ if ((order == CblasRowMajor && Uplo == CblasUpper) || (order == CblasColMajor && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { BASE tmp1 = alpha * X[ix]; BASE tmp2 = 0.0; const INDEX j_min = i + 1; const INDEX j_max = GSL_MIN(N, i + K + 1); INDEX jx = OFFSET(N, incX) + j_min * incX; INDEX jy = OFFSET(N, incY) + j_min * incY; Y[iy] += tmp1 * A[0 + i * lda]; for (j = j_min; j < j_max; j++) { BASE Aij = A[(j - i) + i * lda]; Y[jy] += tmp1 * Aij; tmp2 += Aij * X[jx]; jx += incX; jy += incY; } Y[iy] += alpha * tmp2; ix += incX; iy += incY; } } else if ((order == CblasRowMajor && Uplo == CblasLower) || (order == CblasColMajor && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { BASE tmp1 = alpha * X[ix]; BASE tmp2 = 0.0; const INDEX j_min = (i > K) ? i - K : 0; const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; INDEX jy = OFFSET(N, incY) + j_min * incY; for (j = j_min; j < j_max; j++) { BASE Aij = A[(K - i + j) + i * lda]; Y[jy] += tmp1 * Aij; tmp2 += Aij * X[jx]; jx += incX; jy += incY; } Y[iy] += tmp1 * A[K + i * lda] + alpha * tmp2; ix += incX; iy += incY; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/test_tpmv.c0000644000175000017500000012305113536674414013211 0ustar eddedd#include #include #include #include #include "tests.h" void test_tpmv (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.587f, 0.14f, 0.841f }; float X[] = { -0.213f, 0.885f }; int incX = -1; float x_expected[] = { -0.179133f, -0.549315f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 974)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.587f, 0.14f, 0.841f }; float X[] = { -0.213f, 0.885f }; int incX = -1; float x_expected[] = { -0.213f, 0.85518f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 975)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.587f, 0.14f, 0.841f }; float X[] = { -0.213f, 0.885f }; int incX = -1; float x_expected[] = { -0.055233f, -0.519495f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 976)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.587f, 0.14f, 0.841f }; float X[] = { -0.213f, 0.885f }; int incX = -1; float x_expected[] = { -0.0891f, 0.885f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 977)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.587f, 0.14f, 0.841f }; float X[] = { -0.213f, 0.885f }; int incX = -1; float x_expected[] = { -0.179133f, -0.549315f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 978)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.587f, 0.14f, 0.841f }; float X[] = { -0.213f, 0.885f }; int incX = -1; float x_expected[] = { -0.213f, 0.85518f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 979)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.587f, 0.14f, 0.841f }; float X[] = { -0.213f, 0.885f }; int incX = -1; float x_expected[] = { -0.055233f, -0.519495f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 980)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.587f, 0.14f, 0.841f }; float X[] = { -0.213f, 0.885f }; int incX = -1; float x_expected[] = { -0.0891f, 0.885f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 981)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.765f, 0.968f, -0.956f }; float X[] = { 0.243f, -0.274f }; int incX = -1; float x_expected[] = { -0.49754f, 0.20961f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 982)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.765f, 0.968f, -0.956f }; float X[] = { 0.243f, -0.274f }; int incX = -1; float x_expected[] = { -0.022232f, -0.274f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 983)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.765f, 0.968f, -0.956f }; float X[] = { 0.243f, -0.274f }; int incX = -1; float x_expected[] = { -0.232308f, 0.444834f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 984)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.765f, 0.968f, -0.956f }; float X[] = { 0.243f, -0.274f }; int incX = -1; float x_expected[] = { 0.243f, -0.038776f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 985)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.765f, 0.968f, -0.956f }; float X[] = { 0.243f, -0.274f }; int incX = -1; float x_expected[] = { -0.49754f, 0.20961f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 986)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.765f, 0.968f, -0.956f }; float X[] = { 0.243f, -0.274f }; int incX = -1; float x_expected[] = { -0.022232f, -0.274f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 987)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.765f, 0.968f, -0.956f }; float X[] = { 0.243f, -0.274f }; int incX = -1; float x_expected[] = { -0.232308f, 0.444834f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 988)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.765f, 0.968f, -0.956f }; float X[] = { 0.243f, -0.274f }; int incX = -1; float x_expected[] = { 0.243f, -0.038776f }; cblas_stpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpmv(case 989)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.393, -0.221, 0.356 }; double X[] = { -0.062, -0.221 }; int incX = -1; double x_expected[] = { -0.022072, -0.073151 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 990)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.393, -0.221, 0.356 }; double X[] = { -0.062, -0.221 }; int incX = -1; double x_expected[] = { -0.062, -0.207298 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 991)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.393, -0.221, 0.356 }; double X[] = { -0.062, -0.221 }; int incX = -1; double x_expected[] = { 0.026769, -0.086853 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 992)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.393, -0.221, 0.356 }; double X[] = { -0.062, -0.221 }; int incX = -1; double x_expected[] = { -0.013159, -0.221 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 993)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.393, -0.221, 0.356 }; double X[] = { -0.062, -0.221 }; int incX = -1; double x_expected[] = { -0.022072, -0.073151 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 994)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.393, -0.221, 0.356 }; double X[] = { -0.062, -0.221 }; int incX = -1; double x_expected[] = { -0.062, -0.207298 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 995)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.393, -0.221, 0.356 }; double X[] = { -0.062, -0.221 }; int incX = -1; double x_expected[] = { 0.026769, -0.086853 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 996)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.393, -0.221, 0.356 }; double X[] = { -0.062, -0.221 }; int incX = -1; double x_expected[] = { -0.013159, -0.221 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 997)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.694, 0.501, 0.019 }; double X[] = { -0.928, 0.365 }; int incX = -1; double x_expected[] = { 0.165233, 0.25331 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 998)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.694, 0.501, 0.019 }; double X[] = { -0.928, 0.365 }; int incX = -1; double x_expected[] = { -0.745135, 0.365 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 999)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.694, 0.501, 0.019 }; double X[] = { -0.928, 0.365 }; int incX = -1; double x_expected[] = { -0.017632, -0.211618 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 1000)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.694, 0.501, 0.019 }; double X[] = { -0.928, 0.365 }; int incX = -1; double x_expected[] = { -0.928, -0.099928 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 1001)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.694, 0.501, 0.019 }; double X[] = { -0.928, 0.365 }; int incX = -1; double x_expected[] = { 0.165233, 0.25331 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 1002)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.694, 0.501, 0.019 }; double X[] = { -0.928, 0.365 }; int incX = -1; double x_expected[] = { -0.745135, 0.365 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 1003)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.694, 0.501, 0.019 }; double X[] = { -0.928, 0.365 }; int incX = -1; double x_expected[] = { -0.017632, -0.211618 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 1004)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.694, 0.501, 0.019 }; double X[] = { -0.928, 0.365 }; int incX = -1; double x_expected[] = { -0.928, -0.099928 }; cblas_dtpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpmv(case 1005)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 2; float A[] = { 0.362f, -0.849f, -0.612f, -0.718f, 0.503f, -0.923f }; float X[] = { 0.904f, 0.461f, -0.367f, 0.153f }; int incX = -1; float x_expected[] = { 0.880215f, -0.602509f, -0.225207f, -0.564235f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1006) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1006) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 2; float A[] = { 0.362f, -0.849f, -0.612f, -0.718f, 0.503f, -0.923f }; float X[] = { 0.904f, 0.461f, -0.367f, 0.153f }; int incX = -1; float x_expected[] = { 0.904f, 0.461f, -0.58925f, -0.778204f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1007) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1007) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 2; float A[] = { 0.362f, -0.849f, -0.612f, -0.718f, 0.503f, -0.923f }; float X[] = { 0.904f, 0.461f, -0.367f, 0.153f }; int incX = -1; float x_expected[] = { 1.21467f, -0.432639f, -0.002957f, 0.366969f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1008) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1008) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 2; float A[] = { 0.362f, -0.849f, -0.612f, -0.718f, 0.503f, -0.923f }; float X[] = { 0.904f, 0.461f, -0.367f, 0.153f }; int incX = -1; float x_expected[] = { 1.23846f, 0.63087f, -0.367f, 0.153f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1009) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1009) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 2; float A[] = { 0.362f, -0.849f, -0.612f, -0.718f, 0.503f, -0.923f }; float X[] = { 0.904f, 0.461f, -0.367f, 0.153f }; int incX = -1; float x_expected[] = { 0.880215f, -0.602509f, -0.225207f, -0.564235f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1010) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1010) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 2; float A[] = { 0.362f, -0.849f, -0.612f, -0.718f, 0.503f, -0.923f }; float X[] = { 0.904f, 0.461f, -0.367f, 0.153f }; int incX = -1; float x_expected[] = { 0.904f, 0.461f, -0.58925f, -0.778204f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1011) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1011) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 2; float A[] = { 0.362f, -0.849f, -0.612f, -0.718f, 0.503f, -0.923f }; float X[] = { 0.904f, 0.461f, -0.367f, 0.153f }; int incX = -1; float x_expected[] = { 1.21467f, -0.432639f, -0.002957f, 0.366969f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1012) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1012) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 2; float A[] = { 0.362f, -0.849f, -0.612f, -0.718f, 0.503f, -0.923f }; float X[] = { 0.904f, 0.461f, -0.367f, 0.153f }; int incX = -1; float x_expected[] = { 1.23846f, 0.63087f, -0.367f, 0.153f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1013) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1013) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.876f, -0.697f, -0.519f, -0.223f, 0.526f, -0.077f }; float X[] = { 0.338f, -0.807f, 0.444f, -0.748f }; int incX = -1; float x_expected[] = { -0.281591f, -0.161308f, -0.9103f, 0.34578f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1014) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1014) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.876f, -0.697f, -0.519f, -0.223f, 0.526f, -0.077f }; float X[] = { 0.338f, -0.807f, 0.444f, -0.748f }; int incX = -1; float x_expected[] = { -0.05924f, -0.5178f, 0.444f, -0.748f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1015) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1015) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.876f, -0.697f, -0.519f, -0.223f, 0.526f, -0.077f }; float X[] = { 0.338f, -0.807f, 0.444f, -0.748f }; int incX = -1; float x_expected[] = { 0.115649f, -0.450508f, -1.26568f, 0.689239f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1016) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1016) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.876f, -0.697f, -0.519f, -0.223f, 0.526f, -0.077f }; float X[] = { 0.338f, -0.807f, 0.444f, -0.748f }; int incX = -1; float x_expected[] = { 0.338f, -0.807f, 0.088617f, -0.404541f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1017) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1017) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.876f, -0.697f, -0.519f, -0.223f, 0.526f, -0.077f }; float X[] = { 0.338f, -0.807f, 0.444f, -0.748f }; int incX = -1; float x_expected[] = { -0.281591f, -0.161308f, -0.9103f, 0.34578f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1018) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1018) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.876f, -0.697f, -0.519f, -0.223f, 0.526f, -0.077f }; float X[] = { 0.338f, -0.807f, 0.444f, -0.748f }; int incX = -1; float x_expected[] = { -0.05924f, -0.5178f, 0.444f, -0.748f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1019) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1019) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.876f, -0.697f, -0.519f, -0.223f, 0.526f, -0.077f }; float X[] = { 0.338f, -0.807f, 0.444f, -0.748f }; int incX = -1; float x_expected[] = { 0.115649f, -0.450508f, -1.26568f, 0.689239f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1020) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1020) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.876f, -0.697f, -0.519f, -0.223f, 0.526f, -0.077f }; float X[] = { 0.338f, -0.807f, 0.444f, -0.748f }; int incX = -1; float x_expected[] = { 0.338f, -0.807f, 0.088617f, -0.404541f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1021) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1021) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 131; int N = 2; float A[] = { 0.869f, -0.091f, -0.859f, 0.008f, -0.921f, -0.321f }; float X[] = { -0.122f, -0.364f, 0.602f, -0.96f }; int incX = -1; float x_expected[] = { -0.295592f, 1.11591f, 0.610498f, -0.779458f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1022) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1022) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 132; int N = 2; float A[] = { 0.869f, -0.091f, -0.859f, 0.008f, -0.921f, -0.321f }; float X[] = { -0.122f, -0.364f, 0.602f, -0.96f }; int incX = -1; float x_expected[] = { -0.646798f, 0.455824f, 0.602f, -0.96f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1023) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1023) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 131; int N = 2; float A[] = { 0.869f, -0.091f, -0.859f, 0.008f, -0.921f, -0.321f }; float X[] = { -0.122f, -0.364f, 0.602f, -0.96f }; int incX = -1; float x_expected[] = { 0.229206f, 0.296082f, 0.712384f, -0.465806f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1024) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1024) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 132; int N = 2; float A[] = { 0.869f, -0.091f, -0.859f, 0.008f, -0.921f, -0.321f }; float X[] = { -0.122f, -0.364f, 0.602f, -0.96f }; int incX = -1; float x_expected[] = { -0.122f, -0.364f, 0.703886f, -0.646348f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1025) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1025) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 131; int N = 2; float A[] = { 0.869f, -0.091f, -0.859f, 0.008f, -0.921f, -0.321f }; float X[] = { -0.122f, -0.364f, 0.602f, -0.96f }; int incX = -1; float x_expected[] = { -0.295592f, 1.11591f, 0.610498f, -0.779458f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1026) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1026) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 132; int N = 2; float A[] = { 0.869f, -0.091f, -0.859f, 0.008f, -0.921f, -0.321f }; float X[] = { -0.122f, -0.364f, 0.602f, -0.96f }; int incX = -1; float x_expected[] = { -0.646798f, 0.455824f, 0.602f, -0.96f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1027) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1027) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 131; int N = 2; float A[] = { 0.869f, -0.091f, -0.859f, 0.008f, -0.921f, -0.321f }; float X[] = { -0.122f, -0.364f, 0.602f, -0.96f }; int incX = -1; float x_expected[] = { 0.229206f, 0.296082f, 0.712384f, -0.465806f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1028) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1028) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 132; int N = 2; float A[] = { 0.869f, -0.091f, -0.859f, 0.008f, -0.921f, -0.321f }; float X[] = { -0.122f, -0.364f, 0.602f, -0.96f }; int incX = -1; float x_expected[] = { -0.122f, -0.364f, 0.703886f, -0.646348f }; cblas_ctpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpmv(case 1029) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpmv(case 1029) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.254, 0.263, -0.271, -0.595, -0.182, -0.672 }; double X[] = { -0.042, -0.705, -0.255, -0.854 }; int incX = -1; double x_expected[] = { -0.466116, 0.156534, -0.248261, -0.067936 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1030) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1030) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.254, 0.263, -0.271, -0.595, -0.182, -0.672 }; double X[] = { -0.042, -0.705, -0.255, -0.854 }; int incX = -1; double x_expected[] = { -0.042, -0.705, -0.663093, -0.637955 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1031) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1031) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.254, 0.263, -0.271, -0.595, -0.182, -0.672 }; double X[] = { -0.042, -0.705, -0.255, -0.854 }; int incX = -1; double x_expected[] = { -0.905141, 0.539693, 0.159832, -0.283981 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1032) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1032) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.254, 0.263, -0.271, -0.595, -0.182, -0.672 }; double X[] = { -0.042, -0.705, -0.255, -0.854 }; int incX = -1; double x_expected[] = { -0.481025, -0.321841, -0.255, -0.854 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1033) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1033) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.254, 0.263, -0.271, -0.595, -0.182, -0.672 }; double X[] = { -0.042, -0.705, -0.255, -0.854 }; int incX = -1; double x_expected[] = { -0.466116, 0.156534, -0.248261, -0.067936 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1034) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1034) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.254, 0.263, -0.271, -0.595, -0.182, -0.672 }; double X[] = { -0.042, -0.705, -0.255, -0.854 }; int incX = -1; double x_expected[] = { -0.042, -0.705, -0.663093, -0.637955 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1035) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1035) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.254, 0.263, -0.271, -0.595, -0.182, -0.672 }; double X[] = { -0.042, -0.705, -0.255, -0.854 }; int incX = -1; double x_expected[] = { -0.905141, 0.539693, 0.159832, -0.283981 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1036) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1036) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.254, 0.263, -0.271, -0.595, -0.182, -0.672 }; double X[] = { -0.042, -0.705, -0.255, -0.854 }; int incX = -1; double x_expected[] = { -0.481025, -0.321841, -0.255, -0.854 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1037) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1037) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.421, -0.407, -0.595, -0.387, 0.884, -0.498 }; double X[] = { -0.008, 0.904, -0.689, -0.679 }; int incX = -1; double x_expected[] = { 0.590302, 1.473768, -0.566422, -0.005436 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1038) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1038) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.421, -0.407, -0.595, -0.387, 0.884, -0.498 }; double X[] = { -0.008, 0.904, -0.689, -0.679 }; int incX = -1; double x_expected[] = { 0.139182, 1.574648, -0.689, -0.679 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1039) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1039) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.421, -0.407, -0.595, -0.387, 0.884, -0.498 }; double X[] = { -0.008, 0.904, -0.689, -0.679 }; int incX = -1; double x_expected[] = { 0.44312, 0.80312, -0.211814, -0.54022 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1040) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1040) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.421, -0.407, -0.595, -0.387, 0.884, -0.498 }; double X[] = { -0.008, 0.904, -0.689, -0.679 }; int incX = -1; double x_expected[] = { -0.008, 0.904, -0.334392, -1.213784 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1041) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1041) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.421, -0.407, -0.595, -0.387, 0.884, -0.498 }; double X[] = { -0.008, 0.904, -0.689, -0.679 }; int incX = -1; double x_expected[] = { 0.590302, 1.473768, -0.566422, -0.005436 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1042) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1042) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.421, -0.407, -0.595, -0.387, 0.884, -0.498 }; double X[] = { -0.008, 0.904, -0.689, -0.679 }; int incX = -1; double x_expected[] = { 0.139182, 1.574648, -0.689, -0.679 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1043) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1043) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.421, -0.407, -0.595, -0.387, 0.884, -0.498 }; double X[] = { -0.008, 0.904, -0.689, -0.679 }; int incX = -1; double x_expected[] = { 0.44312, 0.80312, -0.211814, -0.54022 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1044) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1044) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.421, -0.407, -0.595, -0.387, 0.884, -0.498 }; double X[] = { -0.008, 0.904, -0.689, -0.679 }; int incX = -1; double x_expected[] = { -0.008, 0.904, -0.334392, -1.213784 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1045) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1045) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 131; int N = 2; double A[] = { -0.743, -0.078, 0.77, 0.505, 0.157, -0.986 }; double X[] = { -0.641, 0.565, -0.406, -0.948 }; int incX = -1; double x_expected[] = { -1.449087, -1.068251, 0.375602, 0.672696 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1046) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1046) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 132; int N = 2; double A[] = { -0.743, -0.078, 0.77, 0.505, 0.157, -0.986 }; double X[] = { -0.641, 0.565, -0.406, -0.948 }; int incX = -1; double x_expected[] = { -1.43236, 0.04007, -0.406, -0.948 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1047) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1047) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 131; int N = 2; double A[] = { -0.743, -0.078, 0.77, 0.505, 0.157, -0.986 }; double X[] = { -0.641, 0.565, -0.406, -0.948 }; int incX = -1; double x_expected[] = { -0.657727, -0.543321, 0.167357, 1.431451 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1048) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1048) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 132; int N = 2; double A[] = { -0.743, -0.078, 0.77, 0.505, 0.157, -0.986 }; double X[] = { -0.641, 0.565, -0.406, -0.948 }; int incX = -1; double x_expected[] = { -0.641, 0.565, -0.614245, -0.189245 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1049) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1049) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 131; int N = 2; double A[] = { -0.743, -0.078, 0.77, 0.505, 0.157, -0.986 }; double X[] = { -0.641, 0.565, -0.406, -0.948 }; int incX = -1; double x_expected[] = { -1.449087, -1.068251, 0.375602, 0.672696 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1050) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1050) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 132; int N = 2; double A[] = { -0.743, -0.078, 0.77, 0.505, 0.157, -0.986 }; double X[] = { -0.641, 0.565, -0.406, -0.948 }; int incX = -1; double x_expected[] = { -1.43236, 0.04007, -0.406, -0.948 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1051) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1051) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 131; int N = 2; double A[] = { -0.743, -0.078, 0.77, 0.505, 0.157, -0.986 }; double X[] = { -0.641, 0.565, -0.406, -0.948 }; int incX = -1; double x_expected[] = { -0.657727, -0.543321, 0.167357, 1.431451 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1052) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1052) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 132; int N = 2; double A[] = { -0.743, -0.078, 0.77, 0.505, 0.157, -0.986 }; double X[] = { -0.641, 0.565, -0.406, -0.948 }; int incX = -1; double x_expected[] = { -0.641, 0.565, -0.614245, -0.189245 }; cblas_ztpmv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpmv(case 1053) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpmv(case 1053) imag"); }; }; }; } gsl/cblas/test_tbsv.c0000644000175000017500000015223413536674414013206 0ustar eddedd#include #include #include #include #include "tests.h" void test_tbsv (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.681f, 0.209f, 0.436f, -0.369f, 0.786f, -0.84f, 0.86f, -0.233f, 0.734f }; float X[] = { -0.305f, 0.61f, -0.831f }; int incX = -1; float x_expected[] = { -0.354651f, -2.40855f, 0.481076f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1230)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.681f, 0.209f, 0.436f, -0.369f, 0.786f, -0.84f, 0.86f, -0.233f, 0.734f }; float X[] = { -0.305f, 0.61f, -0.831f }; int incX = -1; float x_expected[] = { -0.305f, 0.84973f, -1.00859f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1231)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.681f, 0.209f, 0.436f, -0.369f, 0.786f, -0.84f, 0.86f, -0.233f, 0.734f }; float X[] = { -0.305f, 0.61f, -0.831f }; int incX = -1; float x_expected[] = { -2.71619f, -1.09055f, -3.97608f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1232)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.681f, 0.209f, 0.436f, -0.369f, 0.786f, -0.84f, 0.86f, -0.233f, 0.734f }; float X[] = { -0.305f, 0.61f, -0.831f }; int incX = -1; float x_expected[] = { -0.56589f, 0.303361f, -0.831f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1233)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.681f, 0.209f, 0.436f, -0.369f, 0.786f, -0.84f, 0.86f, -0.233f, 0.734f }; float X[] = { -0.305f, 0.61f, -0.831f }; int incX = -1; float x_expected[] = { 1.30901f, -0.656172f, -5.13458f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1234)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.681f, 0.209f, 0.436f, -0.369f, 0.786f, -0.84f, 0.86f, -0.233f, 0.734f }; float X[] = { -0.305f, 0.61f, -0.831f }; int incX = -1; float x_expected[] = { -0.305f, 0.8723f, -0.509121f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1235)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.681f, 0.209f, 0.436f, -0.369f, 0.786f, -0.84f, 0.86f, -0.233f, 0.734f }; float X[] = { -0.305f, 0.61f, -0.831f }; int incX = -1; float x_expected[] = { 0.524539f, -0.961964f, 1.22026f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1236)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.681f, 0.209f, 0.436f, -0.369f, 0.786f, -0.84f, 0.86f, -0.233f, 0.734f }; float X[] = { -0.305f, 0.61f, -0.831f }; int incX = -1; float x_expected[] = { -0.920972f, 0.783679f, -0.831f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1237)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.022f, 0.795f, -0.389f, -0.205f, -0.121f, 0.323f, 0.133f, 0.679f, 0.742f }; float X[] = { 0.144f, 0.635f, 0.116f }; int incX = -1; float x_expected[] = { 16.8676f, 17.3503f, 5.27273f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1238)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.022f, 0.795f, -0.389f, -0.205f, -0.121f, 0.323f, 0.133f, 0.679f, 0.742f }; float X[] = { 0.144f, 0.635f, 0.116f }; int incX = -1; float x_expected[] = { 0.209676f, 0.54278f, 0.116f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1239)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.022f, 0.795f, -0.389f, -0.205f, -0.121f, 0.323f, 0.133f, 0.679f, 0.742f }; float X[] = { 0.144f, 0.635f, 0.116f }; int incX = -1; float x_expected[] = { 0.212077f, -5.01482f, -1.14722f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1240)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.022f, 0.795f, -0.389f, -0.205f, -0.121f, 0.323f, 0.133f, 0.679f, 0.742f }; float X[] = { 0.144f, 0.635f, 0.116f }; int incX = -1; float x_expected[] = { 0.144f, 0.615848f, 0.242249f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1241)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.022f, 0.795f, -0.389f, -0.205f, -0.121f, 0.323f, 0.133f, 0.679f, 0.742f }; float X[] = { 0.144f, 0.635f, 0.116f }; int incX = -1; float x_expected[] = { 1.28844f, -5.49514f, 0.145912f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1242)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.022f, 0.795f, -0.389f, -0.205f, -0.121f, 0.323f, 0.133f, 0.679f, 0.742f }; float X[] = { 0.144f, 0.635f, 0.116f }; int incX = -1; float x_expected[] = { 0.0563823f, 0.65878f, 0.116f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1243)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.022f, 0.795f, -0.389f, -0.205f, -0.121f, 0.323f, 0.133f, 0.679f, 0.742f }; float X[] = { 0.144f, 0.635f, 0.116f }; int incX = -1; float x_expected[] = { 1.08271f, -3.73662f, 140.301f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1244)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.022f, 0.795f, -0.389f, -0.205f, -0.121f, 0.323f, 0.133f, 0.679f, 0.742f }; float X[] = { 0.144f, 0.635f, 0.116f }; int incX = -1; float x_expected[] = { 0.144f, 0.652424f, -0.402677f }; cblas_stbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbsv(case 1245)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.619, -0.443, 0.957, -0.633, -0.698, 0.783, -0.343, -0.603, 0.735 }; double X[] = { 0.332, 0.588, 0.252 }; int incX = -1; double x_expected[] = { -0.967930029155, 0.138412575592, 0.506166027443 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1246)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.619, -0.443, 0.957, -0.633, -0.698, 0.783, -0.343, -0.603, 0.735 }; double X[] = { 0.332, 0.588, 0.252 }; int incX = -1; double x_expected[] = { 0.332, 0.819736, 0.615143048 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1247)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.619, -0.443, 0.957, -0.633, -0.698, 0.783, -0.343, -0.603, 0.735 }; double X[] = { 0.332, 0.588, 0.252 }; int incX = -1; double x_expected[] = { -0.364842154056, -0.326531140246, -0.568848758465 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1248)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.619, -0.443, 0.957, -0.633, -0.698, 0.783, -0.343, -0.603, 0.735 }; double X[] = { 0.332, 0.588, 0.252 }; int incX = -1; double x_expected[] = { 0.588397988, 0.747516, 0.252 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1249)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.619, -0.443, 0.957, -0.633, -0.698, 0.783, -0.343, -0.603, 0.735 }; double X[] = { 0.332, 0.588, 0.252 }; int incX = -1; double x_expected[] = { -0.550580431177, -0.571849444278, 0.248263427151 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1250)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.619, -0.443, 0.957, -0.633, -0.698, 0.783, -0.343, -0.603, 0.735 }; double X[] = { 0.332, 0.588, 0.252 }; int incX = -1; double x_expected[] = { 0.332, 0.701876, 0.696287508 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1251)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.619, -0.443, 0.957, -0.633, -0.698, 0.783, -0.343, -0.603, 0.735 }; double X[] = { 0.332, 0.588, 0.252 }; int incX = -1; double x_expected[] = { 1.50217883761, -1.21382140588, 0.407108239095 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1252)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.619, -0.443, 0.957, -0.633, -0.698, 0.783, -0.343, -0.603, 0.735 }; double X[] = { 0.332, 0.588, 0.252 }; int incX = -1; double x_expected[] = { 0.820345928, 0.699636, 0.252 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1253)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.199, 0.303, -0.705, -0.013, -0.678, 0.547, 0.756, -0.177, -0.079 }; double X[] = { 0.58, 0.558, -0.54 }; int incX = -1; double x_expected[] = { 18.994209959, 20.323927329, 2.7135678392 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1254)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.199, 0.303, -0.705, -0.013, -0.678, 0.547, 0.756, -0.177, -0.079 }; double X[] = { 0.58, 0.558, -0.54 }; int incX = -1; double x_expected[] = { 1.06925836, 0.72162, -0.54 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1255)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.199, 0.303, -0.705, -0.013, -0.678, 0.547, 0.756, -0.177, -0.079 }; double X[] = { 0.58, 0.558, -0.54 }; int incX = -1; double x_expected[] = { -3.27683615819, -4.47682615869, -1.97425326753 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1256)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.199, 0.303, -0.705, -0.013, -0.678, 0.547, 0.756, -0.177, -0.079 }; double X[] = { 0.58, 0.558, -0.54 }; int incX = -1; double x_expected[] = { 0.58, 0.11952, -0.53844624 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1257)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.199, 0.303, -0.705, -0.013, -0.678, 0.547, 0.756, -0.177, -0.079 }; double X[] = { 0.58, 0.558, -0.54 }; int incX = -1; double x_expected[] = { -6.6461072986, -0.788837290809, -1.78217821782 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1258)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.199, 0.303, -0.705, -0.013, -0.678, 0.547, 0.756, -0.177, -0.079 }; double X[] = { 0.58, 0.558, -0.54 }; int incX = -1; double x_expected[] = { 0.16345912, 0.55098, -0.54 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1259)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.199, 0.303, -0.705, -0.013, -0.678, 0.547, 0.756, -0.177, -0.079 }; double X[] = { 0.58, 0.558, -0.54 }; int incX = -1; double x_expected[] = { 0.767195767196, -82.9352869353, -123.564783625 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1260)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.199, 0.303, -0.705, -0.013, -0.678, 0.547, 0.756, -0.177, -0.079 }; double X[] = { 0.58, 0.558, -0.54 }; int incX = -1; double x_expected[] = { 0.58, 0.95124, -0.82822572 }; cblas_dtbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbsv(case 1261)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.975f, -0.667f, 0.813f, -0.962f, -0.961f, 0.226f, -0.503f, 0.809f, 0.81f, -0.162f, -0.027f, -0.044f, 0.212f, 0.563f, 0.446f, -0.392f, 0.798f, -0.07f }; float X[] = { 0.11f, 0.787f, -0.826f, 0.809f, -0.437f, 0.592f }; int incX = -1; float x_expected[] = { 1.28871f, 0.289887f, 1.76043f, 1.27481f, 1.56506f, -2.35181f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1262) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1262) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.975f, -0.667f, 0.813f, -0.962f, -0.961f, 0.226f, -0.503f, 0.809f, 0.81f, -0.162f, -0.027f, -0.044f, 0.212f, 0.563f, 0.446f, -0.392f, 0.798f, -0.07f }; float X[] = { 0.11f, 0.787f, -0.826f, 0.809f, -0.437f, 0.592f }; int incX = -1; float x_expected[] = { 0.11f, 0.787f, -1.04259f, 0.18935f, 0.228474f, -0.564917f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1263) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1263) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.975f, -0.667f, 0.813f, -0.962f, -0.961f, 0.226f, -0.503f, 0.809f, 0.81f, -0.162f, -0.027f, -0.044f, 0.212f, 0.563f, 0.446f, -0.392f, 0.798f, -0.07f }; float X[] = { 0.11f, 0.787f, -0.826f, 0.809f, -0.437f, 0.592f }; int incX = -1; float x_expected[] = { -0.0906249f, 3.09442f, -1.60036f, 1.28475f, -0.582941f, 0.0383898f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1264) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1264) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.975f, -0.667f, 0.813f, -0.962f, -0.961f, 0.226f, -0.503f, 0.809f, 0.81f, -0.162f, -0.027f, -0.044f, 0.212f, 0.563f, 0.446f, -0.392f, 0.798f, -0.07f }; float X[] = { 0.11f, 0.787f, -0.826f, 0.809f, -0.437f, 0.592f }; int incX = -1; float x_expected[] = { 1.05233f, 0.79657f, -0.566883f, 1.46031f, -0.437f, 0.592f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1265) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1265) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.975f, -0.667f, 0.813f, -0.962f, -0.961f, 0.226f, -0.503f, 0.809f, 0.81f, -0.162f, -0.027f, -0.044f, 0.212f, 0.563f, 0.446f, -0.392f, 0.798f, -0.07f }; float X[] = { 0.11f, 0.787f, -0.826f, 0.809f, -0.437f, 0.592f }; int incX = -1; float x_expected[] = { -0.735844f, 1.11782f, -0.28244f, 1.16117f, -0.66707f, 0.938302f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1266) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1266) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.975f, -0.667f, 0.813f, -0.962f, -0.961f, 0.226f, -0.503f, 0.809f, 0.81f, -0.162f, -0.027f, -0.044f, 0.212f, 0.563f, 0.446f, -0.392f, 0.798f, -0.07f }; float X[] = { 0.11f, 0.787f, -0.826f, 0.809f, -0.437f, 0.592f }; int incX = -1; float x_expected[] = { 0.11f, 0.787f, -0.406239f, 0.580226f, -0.171935f, 1.2125f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1267) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1267) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.975f, -0.667f, 0.813f, -0.962f, -0.961f, 0.226f, -0.503f, 0.809f, 0.81f, -0.162f, -0.027f, -0.044f, 0.212f, 0.563f, 0.446f, -0.392f, 0.798f, -0.07f }; float X[] = { 0.11f, 0.787f, -0.826f, 0.809f, -0.437f, 0.592f }; int incX = -1; float x_expected[] = { 1.70081f, 2.20477f, 1.32753f, -0.522112f, 0.0223652f, -0.62248f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1268) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1268) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.975f, -0.667f, 0.813f, -0.962f, -0.961f, 0.226f, -0.503f, 0.809f, 0.81f, -0.162f, -0.027f, -0.044f, 0.212f, 0.563f, 0.446f, -0.392f, 0.798f, -0.07f }; float X[] = { 0.11f, 0.787f, -0.826f, 0.809f, -0.437f, 0.592f }; int incX = -1; float x_expected[] = { 0.967596f, 0.693563f, -1.04022f, -0.09269f, -0.437f, 0.592f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1269) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1269) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.33f, -0.236f, 0.267f, -0.139f, 0.25f, 0.509f, 0.86f, -0.089f, -0.018f, -0.847f, 0.424f, -0.573f, 0.097f, -0.663f, 0.65f, -0.811f, 0.283f, 0.032f }; float X[] = { -0.509f, 0.608f, 0.021f, -0.848f, -0.134f, 0.179f }; int incX = -1; float x_expected[] = { -1.11985f, 0.801655f, 0.273814f, -1.09438f, -0.52531f, 0.166748f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1270) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1270) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.33f, -0.236f, 0.267f, -0.139f, 0.25f, 0.509f, 0.86f, -0.089f, -0.018f, -0.847f, 0.424f, -0.573f, 0.097f, -0.663f, 0.65f, -0.811f, 0.283f, 0.032f }; float X[] = { -0.509f, 0.608f, 0.021f, -0.848f, -0.134f, 0.179f }; int incX = -1; float x_expected[] = { 0.266087f, 0.618557f, 0.031897f, -0.914419f, -0.134f, 0.179f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1271) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1271) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.33f, -0.236f, 0.267f, -0.139f, 0.25f, 0.509f, 0.86f, -0.089f, -0.018f, -0.847f, 0.424f, -0.573f, 0.097f, -0.663f, 0.65f, -0.811f, 0.283f, 0.032f }; float X[] = { -0.509f, 0.608f, 0.021f, -0.848f, -0.134f, 0.179f }; int incX = -1; float x_expected[] = { -0.762749f, -0.016292f, 1.59299f, 0.158751f, -4.75603f, -1.78591f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1272) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1272) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.33f, -0.236f, 0.267f, -0.139f, 0.25f, 0.509f, 0.86f, -0.089f, -0.018f, -0.847f, 0.424f, -0.573f, 0.097f, -0.663f, 0.65f, -0.811f, 0.283f, 0.032f }; float X[] = { -0.509f, 0.608f, 0.021f, -0.848f, -0.134f, 0.179f }; int incX = -1; float x_expected[] = { -0.509f, 0.608f, -0.332731f, -1.24444f, 0.262904f, 1.21961f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1273) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1273) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.33f, -0.236f, 0.267f, -0.139f, 0.25f, 0.509f, 0.86f, -0.089f, -0.018f, -0.847f, 0.424f, -0.573f, 0.097f, -0.663f, 0.65f, -0.811f, 0.283f, 0.032f }; float X[] = { -0.509f, 0.608f, 0.021f, -0.848f, -0.134f, 0.179f }; int incX = -1; float x_expected[] = { -1.76046f, 0.0455463f, 1.38348f, 0.700097f, -0.669451f, 0.321896f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1274) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1274) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.33f, -0.236f, 0.267f, -0.139f, 0.25f, 0.509f, 0.86f, -0.089f, -0.018f, -0.847f, 0.424f, -0.573f, 0.097f, -0.663f, 0.65f, -0.811f, 0.283f, 0.032f }; float X[] = { -0.509f, 0.608f, 0.021f, -0.848f, -0.134f, 0.179f }; int incX = -1; float x_expected[] = { 0.151523f, 0.78611f, 0.120309f, -1.01387f, -0.134f, 0.179f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1275) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1275) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.33f, -0.236f, 0.267f, -0.139f, 0.25f, 0.509f, 0.86f, -0.089f, -0.018f, -0.847f, 0.424f, -0.573f, 0.097f, -0.663f, 0.65f, -0.811f, 0.283f, 0.032f }; float X[] = { -0.509f, 0.608f, 0.021f, -0.848f, -0.134f, 0.179f }; int incX = -1; float x_expected[] = { -1.00779f, -0.620278f, 0.81164f, -1.90759f, -1.32022f, 1.48356f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1276) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1276) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.33f, -0.236f, 0.267f, -0.139f, 0.25f, 0.509f, 0.86f, -0.089f, -0.018f, -0.847f, 0.424f, -0.573f, 0.097f, -0.663f, 0.65f, -0.811f, 0.283f, 0.032f }; float X[] = { -0.509f, 0.608f, 0.021f, -0.848f, -0.134f, 0.179f }; int incX = -1; float x_expected[] = { -0.509f, 0.608f, -0.503138f, -1.26818f, 0.176615f, 0.447668f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1277) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1277) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.041f, -0.61f, 0.099f, -0.393f, 0.357f, -0.984f, -0.576f, -0.342f, -0.903f, -0.083f, -0.157f, -0.694f, 0.768f, 0.688f, 0.203f, -0.079f, 0.298f, -0.424f }; float X[] = { -0.037f, -0.599f, 0.959f, -0.499f, 0.296f, 0.034f }; int incX = -1; float x_expected[] = { -0.613838f, -1.13321f, -1.34847f, 0.0432903f, 0.0879552f, -0.479334f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1278) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1278) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.041f, -0.61f, 0.099f, -0.393f, 0.357f, -0.984f, -0.576f, -0.342f, -0.903f, -0.083f, -0.157f, -0.694f, 0.768f, 0.688f, 0.203f, -0.079f, 0.298f, -0.424f }; float X[] = { -0.037f, -0.599f, 0.959f, -0.499f, 0.296f, 0.034f }; int incX = -1; float x_expected[] = { 0.76323f, -1.23595f, 0.943058f, -0.618694f, 0.296f, 0.034f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1279) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1279) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.041f, -0.61f, 0.099f, -0.393f, 0.357f, -0.984f, -0.576f, -0.342f, -0.903f, -0.083f, -0.157f, -0.694f, 0.768f, 0.688f, 0.203f, -0.079f, 0.298f, -0.424f }; float X[] = { -0.037f, -0.599f, 0.959f, -0.499f, 0.296f, 0.034f }; int incX = -1; float x_expected[] = { -1.15557f, -2.50103f, -3.85402f, -1.04833f, 0.414582f, 5.91218f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1280) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1280) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.041f, -0.61f, 0.099f, -0.393f, 0.357f, -0.984f, -0.576f, -0.342f, -0.903f, -0.083f, -0.157f, -0.694f, 0.768f, 0.688f, 0.203f, -0.079f, 0.298f, -0.424f }; float X[] = { -0.037f, -0.599f, 0.959f, -0.499f, 0.296f, 0.034f }; int incX = -1; float x_expected[] = { -0.037f, -0.599f, 1.39953f, -0.064424f, 1.0801f, -0.481747f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1281) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1281) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.041f, -0.61f, 0.099f, -0.393f, 0.357f, -0.984f, -0.576f, -0.342f, -0.903f, -0.083f, -0.157f, -0.694f, 0.768f, 0.688f, 0.203f, -0.079f, 0.298f, -0.424f }; float X[] = { -0.037f, -0.599f, 0.959f, -0.499f, 0.296f, 0.034f }; int incX = -1; float x_expected[] = { -3.0802f, -9.09377f, -1.05845f, 0.99239f, 0.259763f, -0.687744f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1282) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1282) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.041f, -0.61f, 0.099f, -0.393f, 0.357f, -0.984f, -0.576f, -0.342f, -0.903f, -0.083f, -0.157f, -0.694f, 0.768f, 0.688f, 0.203f, -0.079f, 0.298f, -0.424f }; float X[] = { -0.037f, -0.599f, 0.959f, -0.499f, 0.296f, 0.034f }; int incX = -1; float x_expected[] = { -0.513897f, 0.632031f, 1.14112f, -0.580648f, 0.296f, 0.034f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1283) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1283) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.041f, -0.61f, 0.099f, -0.393f, 0.357f, -0.984f, -0.576f, -0.342f, -0.903f, -0.083f, -0.157f, -0.694f, 0.768f, 0.688f, 0.203f, -0.079f, 0.298f, -0.424f }; float X[] = { -0.037f, -0.599f, 0.959f, -0.499f, 0.296f, 0.034f }; int incX = -1; float x_expected[] = { 0.360899f, -0.456643f, -2.31803f, 0.257877f, 1.56928f, -0.922115f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1284) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1284) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.041f, -0.61f, 0.099f, -0.393f, 0.357f, -0.984f, -0.576f, -0.342f, -0.903f, -0.083f, -0.157f, -0.694f, 0.768f, 0.688f, 0.203f, -0.079f, 0.298f, -0.424f }; float X[] = { -0.037f, -0.599f, 0.959f, -0.499f, 0.296f, 0.034f }; int incX = -1; float x_expected[] = { -0.037f, -0.599f, 0.875872f, -1.03683f, -0.198184f, -0.207572f }; cblas_ctbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbsv(case 1285) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbsv(case 1285) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.474, 0.715, 0.061, 0.532, 0.004, -0.318, 0.37, -0.692, -0.166, 0.039, -0.946, 0.857, -0.922, -0.491, 0.012, -0.217, -0.674, -0.429 }; double X[] = { -0.123, 0.122, 0.981, 0.321, 0.942, 0.98 }; int incX = -1; double x_expected[] = { 0.0490338308139, -0.158433417494, 0.261604043488, 1.28058846321, 1.77633350191, -1.07039599422 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1286) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1286) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.474, 0.715, 0.061, 0.532, 0.004, -0.318, 0.37, -0.692, -0.166, 0.039, -0.946, 0.857, -0.922, -0.491, 0.012, -0.217, -0.674, -0.429 }; double X[] = { -0.123, 0.122, 0.981, 0.321, 0.942, 0.98 }; int incX = -1; double x_expected[] = { -0.123, 0.122, 0.96534, 0.346049, 1.067212328, 0.445330131 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1287) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1287) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.474, 0.715, 0.061, 0.532, 0.004, -0.318, 0.37, -0.692, -0.166, 0.039, -0.946, 0.857, -0.922, -0.491, 0.012, -0.217, -0.674, -0.429 }; double X[] = { -0.123, 0.122, 0.981, 0.321, 0.942, 0.98 }; int incX = -1; double x_expected[] = { 72.7437666278, 10.4206532927, -4.34946941374, -14.8012581742, 2.01859491883, -1.53922125931 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1288) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1288) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.474, 0.715, 0.061, 0.532, 0.004, -0.318, 0.37, -0.692, -0.166, 0.039, -0.946, 0.857, -0.922, -0.491, 0.012, -0.217, -0.674, -0.429 }; double X[] = { -0.123, 0.122, 0.981, 0.321, 0.942, 0.98 }; int incX = -1; double x_expected[] = { -0.464775024, 0.662224708, -0.0457, 0.610264, 0.942, 0.98 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1289) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1289) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.474, 0.715, 0.061, 0.532, 0.004, -0.318, 0.37, -0.692, -0.166, 0.039, -0.946, 0.857, -0.922, -0.491, 0.012, -0.217, -0.674, -0.429 }; double X[] = { -0.123, 0.122, 0.981, 0.321, 0.942, 0.98 }; int incX = -1; double x_expected[] = { -0.591747295323, -0.534096923761, -4.60251824353, 1.70172936273, -4.94687072873, -3.32536493524 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1290) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1290) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.474, 0.715, 0.061, 0.532, 0.004, -0.318, 0.37, -0.692, -0.166, 0.039, -0.946, 0.857, -0.922, -0.491, 0.012, -0.217, -0.674, -0.429 }; double X[] = { -0.123, 0.122, 0.981, 0.321, 0.942, 0.98 }; int incX = -1; double x_expected[] = { -0.123, 0.122, 0.807692, 0.373091, 0.384974988, 1.400879194 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1291) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1291) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.474, 0.715, 0.061, 0.532, 0.004, -0.318, 0.37, -0.692, -0.166, 0.039, -0.946, 0.857, -0.922, -0.491, 0.012, -0.217, -0.674, -0.429 }; double X[] = { -0.123, 0.122, 0.981, 0.321, 0.942, 0.98 }; int incX = -1; double x_expected[] = { -0.129998778267, -0.116630230861, 0.993340886904, 0.530739563688, 1.55891621291, -0.284019181928 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1292) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1292) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.474, 0.715, 0.061, 0.532, 0.004, -0.318, 0.37, -0.692, -0.166, 0.039, -0.946, 0.857, -0.922, -0.491, 0.012, -0.217, -0.674, -0.429 }; double X[] = { -0.123, 0.122, 0.981, 0.321, 0.942, 0.98 }; int incX = -1; double x_expected[] = { 0.107496032, 0.025821594, 1.444898, -0.239924, 0.942, 0.98 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1293) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1293) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.872, -0.841, 0.108, -0.744, 0.231, -0.513, -0.973, 0.087, 0.348, 0.196, 0.447, 0.307, 0.632, -0.949, 0.322, 0.277, 0.282, 0.831 }; double X[] = { -0.373, 0.566, 0.92, 0.627, 0.293, -0.434 }; int incX = -1; double x_expected[] = { -0.825842176606, 0.212941473892, -0.548817434511, -0.703261551538, 0.0746069436827, 0.425751789407 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1294) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1294) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.872, -0.841, 0.108, -0.744, 0.231, -0.513, -0.973, 0.087, 0.348, 0.196, 0.447, 0.307, 0.632, -0.949, 0.322, 0.277, 0.282, 0.831 }; double X[] = { -0.373, 0.566, 0.92, 0.627, 0.293, -0.434 }; int incX = -1; double x_expected[] = { -0.619710352, 0.018225936, 1.211252, 0.891864, 0.293, -0.434 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1295) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1295) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.872, -0.841, 0.108, -0.744, 0.231, -0.513, -0.973, 0.087, 0.348, 0.196, 0.447, 0.307, 0.632, -0.949, 0.322, 0.277, 0.282, 0.831 }; double X[] = { -0.373, 0.566, 0.92, 0.627, 0.293, -0.434 }; int incX = -1; double x_expected[] = { 0.203289119964, 1.58288482537, -1.7720160159, 0.479463518178, -0.511241930019, -1.79333888299 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1296) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1296) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.872, -0.841, 0.108, -0.744, 0.231, -0.513, -0.973, 0.087, 0.348, 0.196, 0.447, 0.307, 0.632, -0.949, 0.322, 0.277, 0.282, 0.831 }; double X[] = { -0.373, 0.566, 0.92, 0.627, 0.293, -0.434 }; int incX = -1; double x_expected[] = { -0.373, 0.566, 0.618602, -0.084689, 0.887531803, -0.570220771 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1297) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1297) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.872, -0.841, 0.108, -0.744, 0.231, -0.513, -0.973, 0.087, 0.348, 0.196, 0.447, 0.307, 0.632, -0.949, 0.322, 0.277, 0.282, 0.831 }; double X[] = { -0.373, 0.566, 0.92, 0.627, 0.293, -0.434 }; int incX = -1; double x_expected[] = { 1.72799012007, 13.4612400765, 4.46126528205, -0.0212528722047, 0.627282377919, 0.302760084926 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1298) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1298) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.872, -0.841, 0.108, -0.744, 0.231, -0.513, -0.973, 0.087, 0.348, 0.196, 0.447, 0.307, 0.632, -0.949, 0.322, 0.277, 0.282, 0.831 }; double X[] = { -0.373, 0.566, 0.92, 0.627, 0.293, -0.434 }; int incX = -1; double x_expected[] = { -1.280839615, 1.560525655, 1.167331, 0.179227, 0.293, -0.434 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1299) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1299) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.872, -0.841, 0.108, -0.744, 0.231, -0.513, -0.973, 0.087, 0.348, 0.196, 0.447, 0.307, 0.632, -0.949, 0.322, 0.277, 0.282, 0.831 }; double X[] = { -0.373, 0.566, 0.92, 0.627, 0.293, -0.434 }; int incX = -1; double x_expected[] = { -0.594503951847, 0.00287302167266, -1.08185265666, -0.859860374254, 0.0331027077244, 1.28233265933 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1300) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1300) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.872, -0.841, 0.108, -0.744, 0.231, -0.513, -0.973, 0.087, 0.348, 0.196, 0.447, 0.307, 0.632, -0.949, 0.322, 0.277, 0.282, 0.831 }; double X[] = { -0.373, 0.566, 0.92, 0.627, 0.293, -0.434 }; int incX = -1; double x_expected[] = { -0.373, 0.566, 1.16074, 0.50314, -0.20669608, 0.37525144 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1301) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1301) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.404, 0.667, 0.861, 0.22, 0.298, -0.858, -0.682, -0.969, 0.327, -0.86, 0.125, 0.606, -0.143, -0.865, -0.036, 0.23, -0.776, 0.079 }; double X[] = { 0.028, -0.804, 0.582, -0.078, -0.126, 0.459 }; int incX = -1; double x_expected[] = { 0.0654496252357, 0.224007771015, -0.752486084395, -0.554870892947, -0.587163401057, 0.166737652215 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1302) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1302) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.404, 0.667, 0.861, 0.22, 0.298, -0.858, -0.682, -0.969, 0.327, -0.86, 0.125, 0.606, -0.143, -0.865, -0.036, 0.23, -0.776, 0.079 }; double X[] = { 0.028, -0.804, 0.582, -0.078, -0.126, 0.459 }; int incX = -1; double x_expected[] = { -0.595558802, -1.147174647, 0.589506, -0.500919, -0.126, 0.459 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1303) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1303) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.404, 0.667, 0.861, 0.22, 0.298, -0.858, -0.682, -0.969, 0.327, -0.86, 0.125, 0.606, -0.143, -0.865, -0.036, 0.23, -0.776, 0.079 }; double X[] = { 0.028, -0.804, 0.582, -0.078, -0.126, 0.459 }; int incX = -1; double x_expected[] = { 3.39346077201, 0.652889512141, -2.33602680355, -2.7859245153, -5.04672104102, -0.334110541026 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1304) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1304) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.404, 0.667, 0.861, 0.22, 0.298, -0.858, -0.682, -0.969, 0.327, -0.86, 0.125, 0.606, -0.143, -0.865, -0.036, 0.23, -0.776, 0.079 }; double X[] = { 0.028, -0.804, 0.582, -0.078, -0.126, 0.459 }; int incX = -1; double x_expected[] = { 0.028, -0.804, -0.109456, -0.217192, -0.41110804, 0.41693792 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1305) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1305) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.404, 0.667, 0.861, 0.22, 0.298, -0.858, -0.682, -0.969, 0.327, -0.86, 0.125, 0.606, -0.143, -0.865, -0.036, 0.23, -0.776, 0.079 }; double X[] = { 0.028, -0.804, 0.582, -0.078, -0.126, 0.459 }; int incX = -1; double x_expected[] = { 7.16970224467, -0.772071373678, 0.833386981173, -0.673826630129, -0.26524050899, 0.465327628365 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1306) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1306) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.404, 0.667, 0.861, 0.22, 0.298, -0.858, -0.682, -0.969, 0.327, -0.86, 0.125, 0.606, -0.143, -0.865, -0.036, 0.23, -0.776, 0.079 }; double X[] = { 0.028, -0.804, 0.582, -0.078, -0.126, 0.459 }; int incX = -1; double x_expected[] = { 0.471459157, -1.566755859, 0.940839, 0.357132, -0.126, 0.459 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1307) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1307) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.404, 0.667, 0.861, 0.22, 0.298, -0.858, -0.682, -0.969, 0.327, -0.86, 0.125, 0.606, -0.143, -0.865, -0.036, 0.23, -0.776, 0.079 }; double X[] = { 0.028, -0.804, 0.582, -0.078, -0.126, 0.459 }; int incX = -1; double x_expected[] = { -0.909961830373, 0.118063054039, -0.0169425582229, -1.00055409731, -1.37205489923, 0.994032418785 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1308) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1308) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.404, 0.667, 0.861, 0.22, 0.298, -0.858, -0.682, -0.969, 0.327, -0.86, 0.125, 0.606, -0.143, -0.865, -0.036, 0.23, -0.776, 0.079 }; double X[] = { 0.028, -0.804, 0.582, -0.078, -0.126, 0.459 }; int incX = -1; double x_expected[] = { 0.028, -0.804, -0.118596, 0.160828, -0.059271004, 0.294435972 }; cblas_ztbsv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbsv(case 1309) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbsv(case 1309) imag"); }; }; }; } gsl/cblas/zscal.c0000644000175000017500000000032313536674414012274 0ustar eddedd#include #include #include "cblas.h" void cblas_zscal (const int N, const void *alpha, void *X, const int incX) { #define BASE double #include "source_scal_c.h" #undef BASE } gsl/cblas/strsv.c0000644000175000017500000000063313536674414012345 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_strsv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const float *A, const int lda, float *X, const int incX) { #define BASE float #include "source_trsv_r.h" #undef BASE } gsl/cblas/zhbmv.c0000644000175000017500000000065213536674414012313 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_zhbmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const int K, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY) { #define BASE double #include "source_hbmv.h" #undef BASE } gsl/cblas/test_dot.c0000644000175000017500000002112213536674414013005 0ustar eddedd#include #include #include #include #include "tests.h" void test_dot (void) { const double flteps = 1e-4, dbleps = 1e-6; { int N = 1; float alpha = 0.0f; float X[] = { 0.733f }; float Y[] = { 0.825f }; int incX = 1; int incY = -1; float expected = 0.604725f; float f; f = cblas_sdsdot (N, alpha, X, incX, Y, incY); gsl_test_rel(f, expected, flteps, "sdsdot(case 1)"); }; { int N = 1; float alpha = 0.1f; float X[] = { 0.733f }; float Y[] = { 0.825f }; int incX = 1; int incY = -1; float expected = 0.704725f; float f; f = cblas_sdsdot (N, alpha, X, incX, Y, incY); gsl_test_rel(f, expected, flteps, "sdsdot(case 2)"); }; { int N = 1; float alpha = 1.0f; float X[] = { 0.733f }; float Y[] = { 0.825f }; int incX = 1; int incY = -1; float expected = 1.604725f; float f; f = cblas_sdsdot (N, alpha, X, incX, Y, incY); gsl_test_rel(f, expected, flteps, "sdsdot(case 3)"); }; { int N = 1; float alpha = 0.0f; float X[] = { -0.812f }; float Y[] = { -0.667f }; int incX = -1; int incY = 1; float expected = 0.541604f; float f; f = cblas_sdsdot (N, alpha, X, incX, Y, incY); gsl_test_rel(f, expected, flteps, "sdsdot(case 4)"); }; { int N = 1; float alpha = 0.1f; float X[] = { -0.812f }; float Y[] = { -0.667f }; int incX = -1; int incY = 1; float expected = 0.641604f; float f; f = cblas_sdsdot (N, alpha, X, incX, Y, incY); gsl_test_rel(f, expected, flteps, "sdsdot(case 5)"); }; { int N = 1; float alpha = 1.0f; float X[] = { -0.812f }; float Y[] = { -0.667f }; int incX = -1; int incY = 1; float expected = 1.541604f; float f; f = cblas_sdsdot (N, alpha, X, incX, Y, incY); gsl_test_rel(f, expected, flteps, "sdsdot(case 6)"); }; { int N = 1; float alpha = 0.0f; float X[] = { 0.481f }; float Y[] = { 0.523f }; int incX = -1; int incY = -1; float expected = 0.251563f; float f; f = cblas_sdsdot (N, alpha, X, incX, Y, incY); gsl_test_rel(f, expected, flteps, "sdsdot(case 7)"); }; { int N = 1; float alpha = 0.1f; float X[] = { 0.481f }; float Y[] = { 0.523f }; int incX = -1; int incY = -1; float expected = 0.351563f; float f; f = cblas_sdsdot (N, alpha, X, incX, Y, incY); gsl_test_rel(f, expected, flteps, "sdsdot(case 8)"); }; { int N = 1; float alpha = 1.0f; float X[] = { 0.481f }; float Y[] = { 0.523f }; int incX = -1; int incY = -1; float expected = 1.251563f; float f; f = cblas_sdsdot (N, alpha, X, incX, Y, incY); gsl_test_rel(f, expected, flteps, "sdsdot(case 9)"); }; { int N = 1; float X[] = { 0.785f }; float Y[] = { -0.7f }; int incX = 1; int incY = -1; float expected = -0.5495f; float f; f = cblas_sdot(N, X, incX, Y, incY); gsl_test_rel(f, expected, flteps, "sdot(case 10)"); }; { int N = 1; double X[] = { 0.79 }; double Y[] = { -0.679 }; int incX = 1; int incY = -1; double expected = -0.53641; double f; f = cblas_ddot(N, X, incX, Y, incY); gsl_test_rel(f, expected, dbleps, "ddot(case 11)"); }; { int N = 1; float X[] = { 0.474f, -0.27f }; float Y[] = { -0.144f, -0.392f }; int incX = 1; int incY = -1; float expected[2] = {-0.174096f, -0.146928f}; float f[2]; cblas_cdotu_sub(N, X, incX, Y, incY, &f); gsl_test_rel(f[0], expected[0], flteps, "cdotu(case 12) real"); gsl_test_rel(f[1], expected[1], flteps, "cdotu(case 12) imag"); }; { int N = 1; float X[] = { 0.474f, -0.27f }; float Y[] = { -0.144f, -0.392f }; int incX = 1; int incY = -1; float expected[2] = {0.037584f, -0.224688f}; float f[2]; cblas_cdotc_sub(N, X, incX, Y, incY, &f); gsl_test_rel(f[0], expected[0], flteps, "cdotc(case 13) real"); gsl_test_rel(f[1], expected[1], flteps, "cdotc(case 13) imag"); }; { int N = 1; double X[] = { -0.87, -0.631 }; double Y[] = { -0.7, -0.224 }; int incX = 1; int incY = -1; double expected[2] = {0.467656, 0.63658}; double f[2]; cblas_zdotu_sub(N, X, incX, Y, incY, &f); gsl_test_rel(f[0], expected[0], dbleps, "zdotu(case 14) real"); gsl_test_rel(f[1], expected[1], dbleps, "zdotu(case 14) imag"); }; { int N = 1; double X[] = { -0.87, -0.631 }; double Y[] = { -0.7, -0.224 }; int incX = 1; int incY = -1; double expected[2] = {0.750344, -0.24682}; double f[2]; cblas_zdotc_sub(N, X, incX, Y, incY, &f); gsl_test_rel(f[0], expected[0], dbleps, "zdotc(case 15) real"); gsl_test_rel(f[1], expected[1], dbleps, "zdotc(case 15) imag"); }; { int N = 1; float X[] = { -0.457f }; float Y[] = { 0.839f }; int incX = -1; int incY = 1; float expected = -0.383423f; float f; f = cblas_sdot(N, X, incX, Y, incY); gsl_test_rel(f, expected, flteps, "sdot(case 16)"); }; { int N = 1; double X[] = { 0.949 }; double Y[] = { -0.873 }; int incX = -1; int incY = 1; double expected = -0.828477; double f; f = cblas_ddot(N, X, incX, Y, incY); gsl_test_rel(f, expected, dbleps, "ddot(case 17)"); }; { int N = 1; float X[] = { 0.852f, -0.045f }; float Y[] = { 0.626f, -0.164f }; int incX = -1; int incY = 1; float expected[2] = {0.525972f, -0.167898f}; float f[2]; cblas_cdotu_sub(N, X, incX, Y, incY, &f); gsl_test_rel(f[0], expected[0], flteps, "cdotu(case 18) real"); gsl_test_rel(f[1], expected[1], flteps, "cdotu(case 18) imag"); }; { int N = 1; float X[] = { 0.852f, -0.045f }; float Y[] = { 0.626f, -0.164f }; int incX = -1; int incY = 1; float expected[2] = {0.540732f, -0.111558f}; float f[2]; cblas_cdotc_sub(N, X, incX, Y, incY, &f); gsl_test_rel(f[0], expected[0], flteps, "cdotc(case 19) real"); gsl_test_rel(f[1], expected[1], flteps, "cdotc(case 19) imag"); }; { int N = 1; double X[] = { -0.786, -0.341 }; double Y[] = { -0.271, -0.896 }; int incX = -1; int incY = 1; double expected[2] = {-0.09253, 0.796667}; double f[2]; cblas_zdotu_sub(N, X, incX, Y, incY, &f); gsl_test_rel(f[0], expected[0], dbleps, "zdotu(case 20) real"); gsl_test_rel(f[1], expected[1], dbleps, "zdotu(case 20) imag"); }; { int N = 1; double X[] = { -0.786, -0.341 }; double Y[] = { -0.271, -0.896 }; int incX = -1; int incY = 1; double expected[2] = {0.518542, 0.611845}; double f[2]; cblas_zdotc_sub(N, X, incX, Y, incY, &f); gsl_test_rel(f[0], expected[0], dbleps, "zdotc(case 21) real"); gsl_test_rel(f[1], expected[1], dbleps, "zdotc(case 21) imag"); }; { int N = 1; float X[] = { -0.088f }; float Y[] = { -0.165f }; int incX = -1; int incY = -1; float expected = 0.01452f; float f; f = cblas_sdot(N, X, incX, Y, incY); gsl_test_rel(f, expected, flteps, "sdot(case 22)"); }; { int N = 1; double X[] = { -0.434 }; double Y[] = { -0.402 }; int incX = -1; int incY = -1; double expected = 0.174468; double f; f = cblas_ddot(N, X, incX, Y, incY); gsl_test_rel(f, expected, dbleps, "ddot(case 23)"); }; { int N = 1; float X[] = { -0.347f, 0.899f }; float Y[] = { -0.113f, -0.858f }; int incX = -1; int incY = -1; float expected[2] = {0.810553f, 0.196139f}; float f[2]; cblas_cdotu_sub(N, X, incX, Y, incY, &f); gsl_test_rel(f[0], expected[0], flteps, "cdotu(case 24) real"); gsl_test_rel(f[1], expected[1], flteps, "cdotu(case 24) imag"); }; { int N = 1; float X[] = { -0.347f, 0.899f }; float Y[] = { -0.113f, -0.858f }; int incX = -1; int incY = -1; float expected[2] = {-0.732131f, 0.399313f}; float f[2]; cblas_cdotc_sub(N, X, incX, Y, incY, &f); gsl_test_rel(f[0], expected[0], flteps, "cdotc(case 25) real"); gsl_test_rel(f[1], expected[1], flteps, "cdotc(case 25) imag"); }; { int N = 1; double X[] = { -0.897, -0.204 }; double Y[] = { -0.759, 0.557 }; int incX = -1; int incY = -1; double expected[2] = {0.794451, -0.344793}; double f[2]; cblas_zdotu_sub(N, X, incX, Y, incY, &f); gsl_test_rel(f[0], expected[0], dbleps, "zdotu(case 26) real"); gsl_test_rel(f[1], expected[1], dbleps, "zdotu(case 26) imag"); }; { int N = 1; double X[] = { -0.897, -0.204 }; double Y[] = { -0.759, 0.557 }; int incX = -1; int incY = -1; double expected[2] = {0.567195, -0.654465}; double f[2]; cblas_zdotc_sub(N, X, incX, Y, incY, &f); gsl_test_rel(f[0], expected[0], dbleps, "zdotc(case 27) real"); gsl_test_rel(f[1], expected[1], dbleps, "zdotc(case 27) imag"); }; } gsl/cblas/source_spr2.h0000644000175000017500000000401513536674414013435 0ustar eddedd/* blas/source_spr2.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; CHECK_ARGS9(SD_SPR2,order,Uplo,N,alpha,X,incX,Y,incY,A); if (N == 0) return; if (alpha == 0.0) return; if ((order == CblasRowMajor && Uplo == CblasUpper) || (order == CblasColMajor && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { const BASE tmp1 = alpha * X[ix]; const BASE tmp2 = alpha * Y[iy]; INDEX jx = ix; INDEX jy = iy; for (j = i; j < N; j++) { Ap[TPUP(N, i, j)] += tmp1 * Y[jy] + tmp2 * X[jx]; jx += incX; jy += incY; } ix += incX; iy += incY; } } else if ((order == CblasRowMajor && Uplo == CblasLower) || (order == CblasColMajor && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { const BASE tmp1 = alpha * X[ix]; const BASE tmp2 = alpha * Y[iy]; INDEX jx = OFFSET(N, incX); INDEX jy = OFFSET(N, incY); for (j = 0; j <= i; j++) { Ap[TPLO(N, i, j)] += tmp1 * Y[jy] + tmp2 * X[jx]; jx += incX; jy += incY; } ix += incX; iy += incY; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/ssyr2.c0000644000175000017500000000060013536674414012240 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_ssyr2 (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *X, const int incX, const float *Y, const int incY, float *A, const int lda) { #define BASE float #include "source_syr2.h" #undef BASE } gsl/cblas/error_cblas_l3.h0000644000175000017500000001537013536674414014070 0ustar eddedd/* cblas/error_cblas_l3.h * * Copyright (C) 2010 José Luis García Pallero * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __ERROR_CBLAS_L3_H__ #define __ERROR_CBLAS_L3_H__ #include #include "error_cblas.h" /* * ============================================================================= * Prototypes for level 3 BLAS * ============================================================================= */ /* * Routines with standard 4 prefixes (S, D, C, Z) */ /* cblas_xgemm() */ #define CBLAS_ERROR_GEMM(pos,Order,TransA,TransB,M,N,K,alpha,A,lda,B,ldb,beta,C,ldc) \ { \ enum CBLAS_TRANSPOSE __transF=CblasNoTrans,__transG=CblasNoTrans; \ if((Order)==CblasRowMajor) { \ __transF = ((TransA)!=CblasConjTrans) ? (TransA) : CblasTrans; \ __transG = ((TransB)!=CblasConjTrans) ? (TransB) : CblasTrans; \ } else { \ __transF = ((TransB)!=CblasConjTrans) ? (TransB) : CblasTrans; \ __transG = ((TransA)!=CblasConjTrans) ? (TransA) : CblasTrans; \ } \ CHECK_ORDER(pos,1,Order); \ CHECK_TRANSPOSE(pos,2,TransA); \ CHECK_TRANSPOSE(pos,3,TransB); \ CHECK_DIM(pos,4,M); \ CHECK_DIM(pos,5,N); \ CHECK_DIM(pos,6,K); \ if((Order)==CblasRowMajor) { \ if(__transF==CblasNoTrans) { \ if((lda) #include #include "cblas.h" #include "error_cblas_l2.h" #include "hypot.c" void cblas_ctpsv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *Ap, void *X, const int incX) { #define BASE float #include "source_tpsv_c.h" #undef BASE } gsl/cblas/dsbmv.c0000644000175000017500000000066213536674414012301 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dsbmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const int K, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY) { #define BASE double #include "source_sbmv.h" #undef BASE } gsl/cblas/dtrmm.c0000644000175000017500000000074713536674414012315 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_dtrmm (const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const double alpha, const double *A, const int lda, double *B, const int ldb) { #define BASE double #include "source_trmm_r.h" #undef BASE } gsl/cblas/dspr2.c0000644000175000017500000000056713536674414012224 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dspr2 (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *X, const int incX, const double *Y, const int incY, double *Ap) { #define BASE double #include "source_spr2.h" #undef BASE } gsl/cblas/zhemv.c0000644000175000017500000000063513536674414012317 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_zhemv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY) { #define BASE double #include "source_hemv.h" #undef BASE } gsl/cblas/idamax.c0000644000175000017500000000032113536674414012421 0ustar eddedd#include #include #include "cblas.h" CBLAS_INDEX cblas_idamax (const int N, const double *X, const int incX) { #define BASE double #include "source_iamax_r.h" #undef BASE } gsl/cblas/cher2.c0000644000175000017500000000057513536674414012174 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_cher2 (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda) { #define BASE float #include "source_her2.h" #undef BASE } gsl/cblas/ssyr2k.c0000644000175000017500000000074113536674414012421 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_ssyr2k (const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc) { #define BASE float #include "source_syr2k_r.h" #undef BASE } gsl/cblas/dsyr2.c0000644000175000017500000000060513536674414012226 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dsyr2 (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *X, const int incX, const double *Y, const int incY, double *A, const int lda) { #define BASE double #include "source_syr2.h" #undef BASE } gsl/cblas/dsyr.c0000644000175000017500000000054013536674414012142 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dsyr (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *X, const int incX, double *A, const int lda) { #define BASE double #include "source_syr.h" #undef BASE } gsl/cblas/sdsdot.c0000644000175000017500000000053113536674414012461 0ustar eddedd#include #include #include "cblas.h" float cblas_sdsdot (const int N, const float alpha, const float *X, const int incX, const float *Y, const int incY) { #define INIT_VAL alpha #define ACC_TYPE double #define BASE float #include "source_dot_r.h" #undef ACC_TYPE #undef BASE #undef INIT_VAL } gsl/cblas/sgemm.c0000644000175000017500000000076013536674414012275 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_sgemm (const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc) { #define BASE float #include "source_gemm_r.h" #undef BASE } gsl/cblas/ctrmm.c0000644000175000017500000000074113536674414012306 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_ctrmm (const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const void *alpha, const void *A, const int lda, void *B, const int ldb) { #define BASE float #include "source_trmm_c.h" #undef BASE } gsl/cblas/zhpmv.c0000644000175000017500000000060213536674414012324 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_zhpmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *Ap, const void *X, const int incX, const void *beta, void *Y, const int incY) { #define BASE double #include "source_hpmv.h" #undef BASE } gsl/cblas/sspmv.c0000644000175000017500000000060413536674414012332 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_sspmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *Ap, const float *X, const int incX, const float beta, float *Y, const int incY) { #define BASE float #include "source_spmv.h" #undef BASE } gsl/cblas/source_trmm_r.h0000644000175000017500000001245513536674414014056 0ustar eddedd/* blas/source_trmm_r.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j, k; INDEX n1, n2; const int nonunit = (Diag == CblasNonUnit); int side, uplo, trans; CHECK_ARGS12(TRMM,Order,Side,Uplo,TransA,Diag,M,N,alpha,A,lda,B,ldb); if (Order == CblasRowMajor) { n1 = M; n2 = N; side = Side; uplo = Uplo; trans = (TransA == CblasConjTrans) ? CblasTrans : TransA; } else { n1 = N; n2 = M; side = (Side == CblasLeft) ? CblasRight : CblasLeft; uplo = (Uplo == CblasUpper) ? CblasLower : CblasUpper; trans = (TransA == CblasConjTrans) ? CblasTrans : TransA; } if (side == CblasLeft && uplo == CblasUpper && trans == CblasNoTrans) { /* form B := alpha * TriU(A)*B */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { BASE temp = 0.0; if (nonunit) { temp = A[i * lda + i] * B[i * ldb + j]; } else { temp = B[i * ldb + j]; } for (k = i + 1; k < n1; k++) { temp += A[lda * i + k] * B[k * ldb + j]; } B[ldb * i + j] = alpha * temp; } } } else if (side == CblasLeft && uplo == CblasUpper && trans == CblasTrans) { /* form B := alpha * (TriU(A))' *B */ for (i = n1; i > 0 && i--;) { for (j = 0; j < n2; j++) { BASE temp = 0.0; for (k = 0; k < i; k++) { temp += A[lda * k + i] * B[k * ldb + j]; } if (nonunit) { temp += A[i * lda + i] * B[i * ldb + j]; } else { temp += B[i * ldb + j]; } B[ldb * i + j] = alpha * temp; } } } else if (side == CblasLeft && uplo == CblasLower && trans == CblasNoTrans) { /* form B := alpha * TriL(A)*B */ for (i = n1; i > 0 && i--;) { for (j = 0; j < n2; j++) { BASE temp = 0.0; for (k = 0; k < i; k++) { temp += A[lda * i + k] * B[k * ldb + j]; } if (nonunit) { temp += A[i * lda + i] * B[i * ldb + j]; } else { temp += B[i * ldb + j]; } B[ldb * i + j] = alpha * temp; } } } else if (side == CblasLeft && uplo == CblasLower && trans == CblasTrans) { /* form B := alpha * TriL(A)' *B */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { BASE temp = 0.0; if (nonunit) { temp = A[i * lda + i] * B[i * ldb + j]; } else { temp = B[i * ldb + j]; } for (k = i + 1; k < n1; k++) { temp += A[lda * k + i] * B[k * ldb + j]; } B[ldb * i + j] = alpha * temp; } } } else if (side == CblasRight && uplo == CblasUpper && trans == CblasNoTrans) { /* form B := alpha * B * TriU(A) */ for (i = 0; i < n1; i++) { for (j = n2; j > 0 && j--;) { BASE temp = 0.0; for (k = 0; k < j; k++) { temp += A[lda * k + j] * B[i * ldb + k]; } if (nonunit) { temp += A[j * lda + j] * B[i * ldb + j]; } else { temp += B[i * ldb + j]; } B[ldb * i + j] = alpha * temp; } } } else if (side == CblasRight && uplo == CblasUpper && trans == CblasTrans) { /* form B := alpha * B * (TriU(A))' */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { BASE temp = 0.0; if (nonunit) { temp = A[j * lda + j] * B[i * ldb + j]; } else { temp = B[i * ldb + j]; } for (k = j + 1; k < n2; k++) { temp += A[lda * j + k] * B[i * ldb + k]; } B[ldb * i + j] = alpha * temp; } } } else if (side == CblasRight && uplo == CblasLower && trans == CblasNoTrans) { /* form B := alpha *B * TriL(A) */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { BASE temp = 0.0; if (nonunit) { temp = A[j * lda + j] * B[i * ldb + j]; } else { temp = B[i * ldb + j]; } for (k = j + 1; k < n2; k++) { temp += A[lda * k + j] * B[i * ldb + k]; } B[ldb * i + j] = alpha * temp; } } } else if (side == CblasRight && uplo == CblasLower && trans == CblasTrans) { /* form B := alpha * B * TriL(A)' */ for (i = 0; i < n1; i++) { for (j = n2; j > 0 && j--;) { BASE temp = 0.0; for (k = 0; k < j; k++) { temp += A[lda * j + k] * B[i * ldb + k]; } if (nonunit) { temp += A[j * lda + j] * B[i * ldb + j]; } else { temp += B[i * ldb + j]; } B[ldb * i + j] = alpha * temp; } } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/dgbmv.c0000644000175000017500000000074413536674414012266 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dgbmv (const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const int KL, const int KU, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY) { #define BASE double #include "source_gbmv_r.h" #undef BASE } gsl/cblas/test_tpsv.c0000644000175000017500000012343113536674414013221 0ustar eddedd#include #include #include #include #include "tests.h" void test_tpsv (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.31929f, 0.360168f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1310)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.144f, -0.04432f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1311)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.417992f, -0.0839895f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1312)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.12704f, 0.032f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1313)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.31929f, 0.360168f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1314)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.144f, -0.04432f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1315)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.417992f, -0.0839895f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1316)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.12704f, 0.032f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1317)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.417992f, -0.0839895f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1318)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.12704f, 0.032f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1319)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.31929f, 0.360168f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1320)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.144f, -0.04432f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1321)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.417992f, -0.0839895f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1322)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.12704f, 0.032f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1323)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.31929f, 0.360168f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1324)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.381f, 0.53f, 0.451f }; float X[] = { 0.144f, 0.032f }; int incX = -1; float x_expected[] = { 0.144f, -0.04432f }; cblas_stpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stpsv(case 1325)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { 1.67142857143, 1.42438631791 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1326)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { -0.702, -1.150996 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1327)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { 4.76584842388, -1.86197183099 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1328)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { -1.163378, -0.661 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1329)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { 1.67142857143, 1.42438631791 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1330)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { -0.702, -1.150996 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1331)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { 4.76584842388, -1.86197183099 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1332)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { -1.163378, -0.661 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1333)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { 4.76584842388, -1.86197183099 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1334)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { -1.163378, -0.661 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1335)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { 1.67142857143, 1.42438631791 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1336)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { -0.702, -1.150996 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1337)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { 4.76584842388, -1.86197183099 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1338)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { -1.163378, -0.661 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1339)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { 1.67142857143, 1.42438631791 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1340)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.355, -0.698, -0.42 }; double X[] = { -0.702, -0.661 }; int incX = -1; double x_expected[] = { -0.702, -1.150996 }; cblas_dtpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtpsv(case 1341)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -1.05533f, 0.0529057f, -3.93625f, 1.36003f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1342) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1342) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -0.133f, 0.998f, 0.818576f, 0.163438f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1343) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1343) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -2.48362f, 1.13085f, -1.67581f, -0.273264f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1344) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1344) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { 0.431924f, 0.679112f, -0.072f, 0.642f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1345) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1345) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -1.05533f, 0.0529057f, -3.93625f, 1.36003f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1346) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1346) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -0.133f, 0.998f, 0.818576f, 0.163438f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1347) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1347) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -2.48362f, 1.13085f, -1.67581f, -0.273264f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1348) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1348) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { 0.431924f, 0.679112f, -0.072f, 0.642f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1349) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1349) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -2.48362f, 1.13085f, -1.67581f, -0.273264f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1350) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1350) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { 0.431924f, 0.679112f, -0.072f, 0.642f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1351) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1351) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -1.05533f, 0.0529057f, -3.93625f, 1.36003f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1352) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1352) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -0.133f, 0.998f, 0.818576f, 0.163438f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1353) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1353) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -2.48362f, 1.13085f, -1.67581f, -0.273264f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1354) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1354) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { 0.431924f, 0.679112f, -0.072f, 0.642f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1355) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1355) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -1.05533f, 0.0529057f, -3.93625f, 1.36003f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1356) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1356) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -0.133f, 0.998f, 0.818576f, 0.163438f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1357) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1357) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { 2.15867f, 1.69498f, 1.69471f, 0.104738f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1358) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1358) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -0.613252f, 0.561896f, -0.072f, 0.642f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1359) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1359) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { 1.00465f, 0.327432f, 3.44853f, 2.273f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1360) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1360) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -0.133f, 0.998f, -0.806168f, -0.053086f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1361) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1361) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 131; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { 2.15867f, 1.69498f, 1.69471f, 0.104738f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1362) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1362) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 132; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -0.613252f, 0.561896f, -0.072f, 0.642f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1363) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1363) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 131; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { 1.00465f, 0.327432f, 3.44853f, 2.273f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1364) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1364) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 132; int N = 2; float A[] = { -0.019f, -0.38f, 0.588f, 0.814f, 0.173f, -0.937f }; float X[] = { -0.133f, 0.998f, -0.072f, 0.642f }; int incX = -1; float x_expected[] = { -0.133f, 0.998f, -0.806168f, -0.053086f }; cblas_ctpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctpsv(case 1365) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctpsv(case 1365) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 0.430509772467, -0.0927067365535, -0.611144484555, 0.999982608216 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1366) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1366) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 0.344, -0.143, -0.795928, -0.523879 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1367) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1367) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 1.00136463678, -1.84591534629, -1.12140892769, 0.696784840869 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1368) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1368) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 1.707508, -0.042521, -0.668, -0.945 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1369) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1369) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 0.430509772467, -0.0927067365535, -0.611144484555, 0.999982608216 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1370) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1370) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 0.344, -0.143, -0.795928, -0.523879 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1371) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1371) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 1.00136463678, -1.84591534629, -1.12140892769, 0.696784840869 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1372) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1372) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 1.707508, -0.042521, -0.668, -0.945 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1373) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1373) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 1.00136463678, -1.84591534629, -1.12140892769, 0.696784840869 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1374) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1374) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 1.707508, -0.042521, -0.668, -0.945 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1375) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1375) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 0.430509772467, -0.0927067365535, -0.611144484555, 0.999982608216 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1376) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1376) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 0.344, -0.143, -0.795928, -0.523879 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1377) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1377) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 1.00136463678, -1.84591534629, -1.12140892769, 0.696784840869 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1378) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1378) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 1.707508, -0.042521, -0.668, -0.945 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1379) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1379) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 0.430509772467, -0.0927067365535, -0.611144484555, 0.999982608216 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1380) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1380) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 0.344, -0.143, -0.795928, -0.523879 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1381) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1381) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { -1.47384781823, -0.286556198408, 1.03098932879, -0.824698794397 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1382) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1382) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { -0.016172, 1.175911, -0.668, -0.945 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1383) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1383) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 0.369363905801, -0.239798891331, 1.1759505739, -1.40027235656 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1384) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1384) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 0.344, -0.143, -1.05676, -1.151335 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1385) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1385) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 131; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { -1.47384781823, -0.286556198408, 1.03098932879, -0.824698794397 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1386) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1386) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 132; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { -0.016172, 1.175911, -0.668, -0.945 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1387) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1387) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 131; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 0.369363905801, -0.239798891331, 1.1759505739, -1.40027235656 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1388) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1388) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 132; int N = 2; double A[] = { 0.052, 0.875, 0.751, -0.912, 0.832, -0.153 }; double X[] = { 0.344, -0.143, -0.668, -0.945 }; int incX = -1; double x_expected[] = { 0.344, -0.143, -1.05676, -1.151335 }; cblas_ztpsv(order, uplo, trans, diag, N, A, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztpsv(case 1389) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztpsv(case 1389) imag"); }; }; }; } gsl/cblas/dtrmv.c0000644000175000017500000000063613536674414012323 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dtrmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const double *A, const int lda, double *X, const int incX) { #define BASE double #include "source_trmv_r.h" #undef BASE } gsl/cblas/source_tpsv_r.h0000644000175000017500000000745213536674414014074 0ustar eddedd/* blas/source_tpsv_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; const int nonunit = (Diag == CblasNonUnit); const int Trans = (TransA != CblasConjTrans) ? TransA : CblasTrans; CHECK_ARGS8(TPSV,order,Uplo,TransA,Diag,N,Ap,X,incX); if (N == 0) return; /* form x := inv( A )*x */ if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasLower)) { /* backsubstitution */ INDEX ix = OFFSET(N, incX) + incX * (N - 1); if (nonunit) { X[ix] = X[ix] / Ap[TPUP(N, (N - 1), (N - 1))]; } ix -= incX; for (i = N - 1; i > 0 && i--;) { BASE tmp = X[ix]; INDEX jx = ix + incX; for (j = i + 1; j < N; j++) { const BASE Aij = Ap[TPUP(N, i, j)]; tmp -= Aij * X[jx]; jx += incX; } if (nonunit) { X[ix] = tmp / Ap[TPUP(N, i, i)]; } else { X[ix] = tmp; } ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasUpper)) { /* forward substitution */ INDEX ix = OFFSET(N, incX); if (nonunit) { X[ix] = X[ix] / Ap[TPLO(N, 0, 0)]; } ix += incX; for (i = 1; i < N; i++) { BASE tmp = X[ix]; INDEX jx = OFFSET(N, incX); for (j = 0; j < i; j++) { const BASE Aij = Ap[TPLO(N, i, j)]; tmp -= Aij * X[jx]; jx += incX; } if (nonunit) { X[ix] = tmp / Ap[TPLO(N, i, j)]; } else { X[ix] = tmp; } ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasLower)) { /* form x := inv( A' )*x */ /* forward substitution */ INDEX ix = OFFSET(N, incX); if (nonunit) { X[ix] = X[ix] / Ap[TPUP(N, 0, 0)]; } ix += incX; for (i = 1; i < N; i++) { BASE tmp = X[ix]; INDEX jx = OFFSET(N, incX); for (j = 0; j < i; j++) { const BASE Aji = Ap[TPUP(N, j, i)]; tmp -= Aji * X[jx]; jx += incX; } if (nonunit) { X[ix] = tmp / Ap[TPUP(N, i, i)]; } else { X[ix] = tmp; } ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasUpper)) { /* backsubstitution */ INDEX ix = OFFSET(N, incX) + (N - 1) * incX; if (nonunit) { X[ix] = X[ix] / Ap[TPLO(N, (N - 1), (N - 1))]; } ix -= incX; for (i = N - 1; i > 0 && i--;) { BASE tmp = X[ix]; INDEX jx = ix + incX; for (j = i + 1; j < N; j++) { const BASE Aji = Ap[TPLO(N, j, i)]; tmp -= Aji * X[jx]; jx += incX; } if (nonunit) { X[ix] = tmp / Ap[TPLO(N, i, i)]; } else { X[ix] = tmp; } ix -= incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/ctrsv.c0000644000175000017500000000065513536674414012331 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" #include "hypot.c" void cblas_ctrsv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *A, const int lda, void *X, const int incX) { #define BASE float #include "source_trsv_c.h" #undef BASE } gsl/cblas/source_copy_r.h0000644000175000017500000000172113536674414014043 0ustar eddedd/* blas/source_copy_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i; INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { Y[iy] = X[ix]; ix += incX; iy += incY; } } gsl/cblas/dznrm2.c0000644000175000017500000000031113536674414012371 0ustar eddedd#include #include #include "cblas.h" double cblas_dznrm2 (const int N, const void *X, const int incX) { #define BASE double #include "source_nrm2_c.h" #undef BASE } gsl/cblas/cswap.c0000644000175000017500000000033013536674414012273 0ustar eddedd#include #include #include "cblas.h" void cblas_cswap (const int N, void *X, const int incX, void *Y, const int incY) { #define BASE float #include "source_swap_c.h" #undef BASE } gsl/cblas/source_syrk_r.h0000644000175000017500000000616213536674414014065 0ustar eddedd/* blas/source_syrk_r.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j, k; int uplo, trans; CHECK_ARGS11(SYRK,Order,Uplo,Trans,N,K,alpha,A,lda,beta,C,ldc); if (alpha == 0.0 && beta == 1.0) return; if (Order == CblasRowMajor) { uplo = Uplo; trans = (Trans == CblasConjTrans) ? CblasTrans : Trans; } else { uplo = (Uplo == CblasUpper) ? CblasLower : CblasUpper; if (Trans == CblasTrans || Trans == CblasConjTrans) { trans = CblasNoTrans; } else { trans = CblasTrans; } } /* form y := beta*y */ if (beta == 0.0) { if (uplo == CblasUpper) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { C[ldc * i + j] = 0.0; } } } else { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { C[ldc * i + j] = 0.0; } } } } else if (beta != 1.0) { if (uplo == CblasUpper) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { C[ldc * i + j] *= beta; } } } else { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { C[ldc * i + j] *= beta; } } } } if (alpha == 0.0) return; if (uplo == CblasUpper && trans == CblasNoTrans) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { BASE temp = 0.0; for (k = 0; k < K; k++) { temp += A[i * lda + k] * A[j * lda + k]; } C[i * ldc + j] += alpha * temp; } } } else if (uplo == CblasUpper && trans == CblasTrans) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { BASE temp = 0.0; for (k = 0; k < K; k++) { temp += A[k * lda + i] * A[k * lda + j]; } C[i * ldc + j] += alpha * temp; } } } else if (uplo == CblasLower && trans == CblasNoTrans) { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { BASE temp = 0.0; for (k = 0; k < K; k++) { temp += A[i * lda + k] * A[j * lda + k]; } C[i * ldc + j] += alpha * temp; } } } else if (uplo == CblasLower && trans == CblasTrans) { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { BASE temp = 0.0; for (k = 0; k < K; k++) { temp += A[k * lda + i] * A[k * lda + j]; } C[i * ldc + j] += alpha * temp; } } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/source_axpy_r.h0000644000175000017500000000251713536674414014056 0ustar eddedd/* blas/source_axpy_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i; if (alpha == 0.0) { return; } if (incX == 1 && incY == 1) { const INDEX m = N % 4; for (i = 0; i < m; i++) { Y[i] += alpha * X[i]; } for (i = m; i + 3 < N; i += 4) { Y[i] += alpha * X[i]; Y[i + 1] += alpha * X[i + 1]; Y[i + 2] += alpha * X[i + 2]; Y[i + 3] += alpha * X[i + 3]; } } else { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { Y[iy] += alpha * X[ix]; ix += incX; iy += incY; } } } gsl/cblas/source_gemv_r.h0000644000175000017500000000467413536674414014041 0ustar eddedd/* blas/source_gemv_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; INDEX lenX, lenY; const int Trans = (TransA != CblasConjTrans) ? TransA : CblasTrans; CHECK_ARGS12(GEMV,order,TransA,M,N,alpha,A,lda,X,incX,beta,Y,incY); if (M == 0 || N == 0) return; if (alpha == 0.0 && beta == 1.0) return; if (Trans == CblasNoTrans) { lenX = N; lenY = M; } else { lenX = M; lenY = N; } /* form y := beta*y */ if (beta == 0.0) { INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { Y[iy] = 0.0; iy += incY; } } else if (beta != 1.0) { INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { Y[iy] *= beta; iy += incY; } } if (alpha == 0.0) return; if ((order == CblasRowMajor && Trans == CblasNoTrans) || (order == CblasColMajor && Trans == CblasTrans)) { /* form y := alpha*A*x + y */ INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { BASE temp = 0.0; INDEX ix = OFFSET(lenX, incX); for (j = 0; j < lenX; j++) { temp += X[ix] * A[lda * i + j]; ix += incX; } Y[iy] += alpha * temp; iy += incY; } } else if ((order == CblasRowMajor && Trans == CblasTrans) || (order == CblasColMajor && Trans == CblasNoTrans)) { /* form y := alpha*A'*x + y */ INDEX ix = OFFSET(lenX, incX); for (j = 0; j < lenX; j++) { const BASE temp = alpha * X[ix]; if (temp != 0.0) { INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { Y[iy] += temp * A[lda * j + i]; iy += incY; } } ix += incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/dtpsv.c0000644000175000017500000000060313536674414012321 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dtpsv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const double *Ap, double *X, const int incX) { #define BASE double #include "source_tpsv_r.h" #undef BASE } gsl/cblas/sgbmv.c0000644000175000017500000000072113536674414012300 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_sgbmv (const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const int KL, const int KU, const float alpha, const float *A, const int lda, const float *X, const int incX, const float beta, float *Y, const int incY) { #define BASE float #include "source_gbmv_r.h" #undef BASE } gsl/cblas/source_trmm_c.h0000644000175000017500000003113213536674414014030 0ustar eddedd/* blas/source_trmm_c.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j, k; INDEX n1, n2; const int nonunit = (Diag == CblasNonUnit); const int conj = (TransA == CblasConjTrans) ? -1 : 1; int side, uplo, trans; CHECK_ARGS12(TRMM,Order,Side,Uplo,TransA,Diag,M,N,alpha,A,lda,B,ldb); { const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); if (Order == CblasRowMajor) { n1 = M; n2 = N; side = Side; uplo = Uplo; trans = (TransA == CblasNoTrans) ? CblasNoTrans : CblasTrans; } else { n1 = N; n2 = M; side = (Side == CblasLeft) ? CblasRight : CblasLeft; /* exchanged */ uplo = (Uplo == CblasUpper) ? CblasLower : CblasUpper; /* exchanged */ trans = (TransA == CblasNoTrans) ? CblasNoTrans : CblasTrans; /* same */ } if (side == CblasLeft && uplo == CblasUpper && trans == CblasNoTrans) { /* form B := alpha * TriU(A)*B */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; if (nonunit) { const BASE Aii_real = CONST_REAL(A, i * lda + i); const BASE Aii_imag = conj * CONST_IMAG(A, i * lda + i); const BASE Bij_real = REAL(B, i * ldb + j); const BASE Bij_imag = IMAG(B, i * ldb + j); temp_real = Aii_real * Bij_real - Aii_imag * Bij_imag; temp_imag = Aii_real * Bij_imag + Aii_imag * Bij_real; } else { temp_real = REAL(B, i * ldb + j); temp_imag = IMAG(B, i * ldb + j); } for (k = i + 1; k < n1; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = conj * CONST_IMAG(A, i * lda + k); const BASE Bkj_real = REAL(B, k * ldb + j); const BASE Bkj_imag = IMAG(B, k * ldb + j); temp_real += Aik_real * Bkj_real - Aik_imag * Bkj_imag; temp_imag += Aik_real * Bkj_imag + Aik_imag * Bkj_real; } REAL(B, ldb * i + j) = alpha_real * temp_real - alpha_imag * temp_imag; IMAG(B, ldb * i + j) = alpha_real * temp_imag + alpha_imag * temp_real; } } } else if (side == CblasLeft && uplo == CblasUpper && trans == CblasTrans) { /* form B := alpha * (TriU(A))' *B */ for (i = n1; i > 0 && i--;) { for (j = 0; j < n2; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < i; k++) { const BASE Aki_real = CONST_REAL(A, k * lda + i); const BASE Aki_imag = conj * CONST_IMAG(A, k * lda + i); const BASE Bkj_real = REAL(B, k * ldb + j); const BASE Bkj_imag = IMAG(B, k * ldb + j); temp_real += Aki_real * Bkj_real - Aki_imag * Bkj_imag; temp_imag += Aki_real * Bkj_imag + Aki_imag * Bkj_real; } if (nonunit) { const BASE Aii_real = CONST_REAL(A, i * lda + i); const BASE Aii_imag = conj * CONST_IMAG(A, i * lda + i); const BASE Bij_real = REAL(B, i * ldb + j); const BASE Bij_imag = IMAG(B, i * ldb + j); temp_real += Aii_real * Bij_real - Aii_imag * Bij_imag; temp_imag += Aii_real * Bij_imag + Aii_imag * Bij_real; } else { temp_real += REAL(B, i * ldb + j); temp_imag += IMAG(B, i * ldb + j); } REAL(B, ldb * i + j) = alpha_real * temp_real - alpha_imag * temp_imag; IMAG(B, ldb * i + j) = alpha_real * temp_imag + alpha_imag * temp_real; } } } else if (side == CblasLeft && uplo == CblasLower && trans == CblasNoTrans) { /* form B := alpha * TriL(A)*B */ for (i = n1; i > 0 && i--;) { for (j = 0; j < n2; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < i; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = conj * CONST_IMAG(A, i * lda + k); const BASE Bkj_real = REAL(B, k * ldb + j); const BASE Bkj_imag = IMAG(B, k * ldb + j); temp_real += Aik_real * Bkj_real - Aik_imag * Bkj_imag; temp_imag += Aik_real * Bkj_imag + Aik_imag * Bkj_real; } if (nonunit) { const BASE Aii_real = CONST_REAL(A, i * lda + i); const BASE Aii_imag = conj * CONST_IMAG(A, i * lda + i); const BASE Bij_real = REAL(B, i * ldb + j); const BASE Bij_imag = IMAG(B, i * ldb + j); temp_real += Aii_real * Bij_real - Aii_imag * Bij_imag; temp_imag += Aii_real * Bij_imag + Aii_imag * Bij_real; } else { temp_real += REAL(B, i * ldb + j); temp_imag += IMAG(B, i * ldb + j); } REAL(B, ldb * i + j) = alpha_real * temp_real - alpha_imag * temp_imag; IMAG(B, ldb * i + j) = alpha_real * temp_imag + alpha_imag * temp_real; } } } else if (side == CblasLeft && uplo == CblasLower && trans == CblasTrans) { /* form B := alpha * TriL(A)' *B */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; if (nonunit) { const BASE Aii_real = CONST_REAL(A, i * lda + i); const BASE Aii_imag = conj * CONST_IMAG(A, i * lda + i); const BASE Bij_real = REAL(B, i * ldb + j); const BASE Bij_imag = IMAG(B, i * ldb + j); temp_real = Aii_real * Bij_real - Aii_imag * Bij_imag; temp_imag = Aii_real * Bij_imag + Aii_imag * Bij_real; } else { temp_real = REAL(B, i * ldb + j); temp_imag = IMAG(B, i * ldb + j); } for (k = i + 1; k < n1; k++) { const BASE Aki_real = CONST_REAL(A, k * lda + i); const BASE Aki_imag = conj * CONST_IMAG(A, k * lda + i); const BASE Bkj_real = REAL(B, k * ldb + j); const BASE Bkj_imag = IMAG(B, k * ldb + j); temp_real += Aki_real * Bkj_real - Aki_imag * Bkj_imag; temp_imag += Aki_real * Bkj_imag + Aki_imag * Bkj_real; } REAL(B, ldb * i + j) = alpha_real * temp_real - alpha_imag * temp_imag; IMAG(B, ldb * i + j) = alpha_real * temp_imag + alpha_imag * temp_real; } } } else if (side == CblasRight && uplo == CblasUpper && trans == CblasNoTrans) { /* form B := alpha * B * TriU(A) */ for (i = 0; i < n1; i++) { for (j = n2; j > 0 && j--;) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < j; k++) { const BASE Akj_real = CONST_REAL(A, k * lda + j); const BASE Akj_imag = conj * CONST_IMAG(A, k * lda + j); const BASE Bik_real = REAL(B, i * ldb + k); const BASE Bik_imag = IMAG(B, i * ldb + k); temp_real += Akj_real * Bik_real - Akj_imag * Bik_imag; temp_imag += Akj_real * Bik_imag + Akj_imag * Bik_real; } if (nonunit) { const BASE Ajj_real = CONST_REAL(A, j * lda + j); const BASE Ajj_imag = conj * CONST_IMAG(A, j * lda + j); const BASE Bij_real = REAL(B, i * ldb + j); const BASE Bij_imag = IMAG(B, i * ldb + j); temp_real += Ajj_real * Bij_real - Ajj_imag * Bij_imag; temp_imag += Ajj_real * Bij_imag + Ajj_imag * Bij_real; } else { temp_real += REAL(B, i * ldb + j); temp_imag += IMAG(B, i * ldb + j); } REAL(B, ldb * i + j) = alpha_real * temp_real - alpha_imag * temp_imag; IMAG(B, ldb * i + j) = alpha_real * temp_imag + alpha_imag * temp_real; } } } else if (side == CblasRight && uplo == CblasUpper && trans == CblasTrans) { /* form B := alpha * B * (TriU(A))' */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; if (nonunit) { const BASE Ajj_real = CONST_REAL(A, j * lda + j); const BASE Ajj_imag = conj * CONST_IMAG(A, j * lda + j); const BASE Bij_real = REAL(B, i * ldb + j); const BASE Bij_imag = IMAG(B, i * ldb + j); temp_real = Ajj_real * Bij_real - Ajj_imag * Bij_imag; temp_imag = Ajj_real * Bij_imag + Ajj_imag * Bij_real; } else { temp_real = REAL(B, i * ldb + j); temp_imag = IMAG(B, i * ldb + j); } for (k = j + 1; k < n2; k++) { const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = conj * CONST_IMAG(A, j * lda + k); const BASE Bik_real = REAL(B, i * ldb + k); const BASE Bik_imag = IMAG(B, i * ldb + k); temp_real += Ajk_real * Bik_real - Ajk_imag * Bik_imag; temp_imag += Ajk_real * Bik_imag + Ajk_imag * Bik_real; } REAL(B, ldb * i + j) = alpha_real * temp_real - alpha_imag * temp_imag; IMAG(B, ldb * i + j) = alpha_real * temp_imag + alpha_imag * temp_real; } } } else if (side == CblasRight && uplo == CblasLower && trans == CblasNoTrans) { /* form B := alpha *B * TriL(A) */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; if (nonunit) { const BASE Ajj_real = CONST_REAL(A, j * lda + j); const BASE Ajj_imag = conj * CONST_IMAG(A, j * lda + j); const BASE Bij_real = REAL(B, i * ldb + j); const BASE Bij_imag = IMAG(B, i * ldb + j); temp_real = Ajj_real * Bij_real - Ajj_imag * Bij_imag; temp_imag = Ajj_real * Bij_imag + Ajj_imag * Bij_real; } else { temp_real = REAL(B, i * ldb + j); temp_imag = IMAG(B, i * ldb + j); } for (k = j + 1; k < n2; k++) { const BASE Akj_real = CONST_REAL(A, k * lda + j); const BASE Akj_imag = conj * CONST_IMAG(A, k * lda + j); const BASE Bik_real = REAL(B, i * ldb + k); const BASE Bik_imag = IMAG(B, i * ldb + k); temp_real += Akj_real * Bik_real - Akj_imag * Bik_imag; temp_imag += Akj_real * Bik_imag + Akj_imag * Bik_real; } REAL(B, ldb * i + j) = alpha_real * temp_real - alpha_imag * temp_imag; IMAG(B, ldb * i + j) = alpha_real * temp_imag + alpha_imag * temp_real; } } } else if (side == CblasRight && uplo == CblasLower && trans == CblasTrans) { /* form B := alpha * B * TriL(A)' */ for (i = 0; i < n1; i++) { for (j = n2; j > 0 && j--;) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < j; k++) { const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = conj * CONST_IMAG(A, j * lda + k); const BASE Bik_real = REAL(B, i * ldb + k); const BASE Bik_imag = IMAG(B, i * ldb + k); temp_real += Ajk_real * Bik_real - Ajk_imag * Bik_imag; temp_imag += Ajk_real * Bik_imag + Ajk_imag * Bik_real; } if (nonunit) { const BASE Ajj_real = CONST_REAL(A, j * lda + j); const BASE Ajj_imag = conj * CONST_IMAG(A, j * lda + j); const BASE Bij_real = REAL(B, i * ldb + j); const BASE Bij_imag = IMAG(B, i * ldb + j); temp_real += Ajj_real * Bij_real - Ajj_imag * Bij_imag; temp_imag += Ajj_real * Bij_imag + Ajj_imag * Bij_real; } else { temp_real += REAL(B, i * ldb + j); temp_imag += IMAG(B, i * ldb + j); } REAL(B, ldb * i + j) = alpha_real * temp_real - alpha_imag * temp_imag; IMAG(B, ldb * i + j) = alpha_real * temp_imag + alpha_imag * temp_real; } } } else { BLAS_ERROR("unrecognized operation"); } } } gsl/cblas/csyr2k.c0000644000175000017500000000072013536674414012376 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_csyr2k (const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc) { #define BASE float #include "source_syr2k_c.h" #undef BASE } gsl/cblas/sspr2.c0000644000175000017500000000056313536674414012237 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_sspr2 (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *X, const int incX, const float *Y, const int incY, float *Ap) { #define BASE double #include "source_spr2.h" #undef BASE } gsl/cblas/source_gemm_r.h0000644000175000017500000000617013536674414014021 0ustar eddedd/* blas/source_gemm_r.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j, k; INDEX n1, n2; INDEX ldf, ldg; int TransF, TransG; const BASE *F, *G; CHECK_ARGS14(GEMM,Order,TransA,TransB,M,N,K,alpha,A,lda,B,ldb,beta,C,ldc); if (alpha == 0.0 && beta == 1.0) return; if (Order == CblasRowMajor) { n1 = M; n2 = N; F = A; ldf = lda; TransF = (TransA == CblasConjTrans) ? CblasTrans : TransA; G = B; ldg = ldb; TransG = (TransB == CblasConjTrans) ? CblasTrans : TransB; } else { n1 = N; n2 = M; F = B; ldf = ldb; TransF = (TransB == CblasConjTrans) ? CblasTrans : TransB; G = A; ldg = lda; TransG = (TransA == CblasConjTrans) ? CblasTrans : TransA; } /* form y := beta*y */ if (beta == 0.0) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { C[ldc * i + j] = 0.0; } } } else if (beta != 1.0) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { C[ldc * i + j] *= beta; } } } if (alpha == 0.0) return; if (TransF == CblasNoTrans && TransG == CblasNoTrans) { /* form C := alpha*A*B + C */ for (k = 0; k < K; k++) { for (i = 0; i < n1; i++) { const BASE temp = alpha * F[ldf * i + k]; if (temp != 0.0) { for (j = 0; j < n2; j++) { C[ldc * i + j] += temp * G[ldg * k + j]; } } } } } else if (TransF == CblasNoTrans && TransG == CblasTrans) { /* form C := alpha*A*B' + C */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { BASE temp = 0.0; for (k = 0; k < K; k++) { temp += F[ldf * i + k] * G[ldg * j + k]; } C[ldc * i + j] += alpha * temp; } } } else if (TransF == CblasTrans && TransG == CblasNoTrans) { for (k = 0; k < K; k++) { for (i = 0; i < n1; i++) { const BASE temp = alpha * F[ldf * k + i]; if (temp != 0.0) { for (j = 0; j < n2; j++) { C[ldc * i + j] += temp * G[ldg * k + j]; } } } } } else if (TransF == CblasTrans && TransG == CblasTrans) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { BASE temp = 0.0; for (k = 0; k < K; k++) { temp += F[ldf * k + i] * G[ldg * j + k]; } C[ldc * i + j] += alpha * temp; } } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/zhpr.c0000644000175000017500000000051613536674414012147 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_zhpr (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const void *X, const int incX, void *Ap) { #define BASE double #include "source_hpr.h" #undef BASE } gsl/cblas/snrm2.c0000644000175000017500000000030713536674414012223 0ustar eddedd#include #include #include "cblas.h" float cblas_snrm2 (const int N, const float *X, const int incX) { #define BASE float #include "source_nrm2_r.h" #undef BASE } gsl/cblas/test_swap.c0000644000175000017500000001611713536674414013201 0ustar eddedd#include #include #include #include #include "tests.h" void test_swap (void) { const double flteps = 1e-4, dbleps = 1e-6; { int N = 1; float X[] = { 0.539f }; int incX = 1; float Y[] = { -0.262f }; int incY = -1; float expected1[] = { -0.262f }; float expected2[] = { 0.539f }; cblas_sswap(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], expected1[i], flteps, "sswap(case 88)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected2[i], flteps, "sswap(case 89)"); } }; }; { int N = 1; double X[] = { 0.906 }; int incX = 1; double Y[] = { 0.373 }; int incY = -1; double expected1[] = { 0.373 }; double expected2[] = { 0.906 }; cblas_dswap(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], expected1[i], dbleps, "dswap(case 90)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected2[i], dbleps, "dswap(case 91)"); } }; }; { int N = 1; float X[] = { -0.316f, -0.529f }; int incX = 1; float Y[] = { -0.313f, 0.363f }; int incY = -1; float expected1[] = { -0.313f, 0.363f }; float expected2[] = { -0.316f, -0.529f }; cblas_cswap(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected1[2*i], flteps, "cswap(case 92) real"); gsl_test_rel(X[2*i+1], expected1[2*i+1], flteps, "cswap(case 92) imag"); }; }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected2[2*i], flteps, "cswap(case 93) real"); gsl_test_rel(Y[2*i+1], expected2[2*i+1], flteps, "cswap(case 93) imag"); }; }; }; { int N = 1; double X[] = { 0.512, -0.89 }; int incX = 1; double Y[] = { -0.225, -0.511 }; int incY = -1; double expected1[] = { -0.225, -0.511 }; double expected2[] = { 0.512, -0.89 }; cblas_zswap(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected1[2*i], dbleps, "zswap(case 94) real"); gsl_test_rel(X[2*i+1], expected1[2*i+1], dbleps, "zswap(case 94) imag"); }; }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected2[2*i], dbleps, "zswap(case 95) real"); gsl_test_rel(Y[2*i+1], expected2[2*i+1], dbleps, "zswap(case 95) imag"); }; }; }; { int N = 1; float X[] = { 0.336f }; int incX = -1; float Y[] = { -0.431f }; int incY = 1; float expected1[] = { -0.431f }; float expected2[] = { 0.336f }; cblas_sswap(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], expected1[i], flteps, "sswap(case 96)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected2[i], flteps, "sswap(case 97)"); } }; }; { int N = 1; double X[] = { 0.764 }; int incX = -1; double Y[] = { -0.293 }; int incY = 1; double expected1[] = { -0.293 }; double expected2[] = { 0.764 }; cblas_dswap(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], expected1[i], dbleps, "dswap(case 98)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected2[i], dbleps, "dswap(case 99)"); } }; }; { int N = 1; float X[] = { -0.239f, 0.361f }; int incX = -1; float Y[] = { 0.149f, 0.347f }; int incY = 1; float expected1[] = { 0.149f, 0.347f }; float expected2[] = { -0.239f, 0.361f }; cblas_cswap(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected1[2*i], flteps, "cswap(case 100) real"); gsl_test_rel(X[2*i+1], expected1[2*i+1], flteps, "cswap(case 100) imag"); }; }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected2[2*i], flteps, "cswap(case 101) real"); gsl_test_rel(Y[2*i+1], expected2[2*i+1], flteps, "cswap(case 101) imag"); }; }; }; { int N = 1; double X[] = { -0.171, -0.936 }; int incX = -1; double Y[] = { 0.495, -0.835 }; int incY = 1; double expected1[] = { 0.495, -0.835 }; double expected2[] = { -0.171, -0.936 }; cblas_zswap(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected1[2*i], dbleps, "zswap(case 102) real"); gsl_test_rel(X[2*i+1], expected1[2*i+1], dbleps, "zswap(case 102) imag"); }; }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected2[2*i], dbleps, "zswap(case 103) real"); gsl_test_rel(Y[2*i+1], expected2[2*i+1], dbleps, "zswap(case 103) imag"); }; }; }; { int N = 1; float X[] = { -0.405f }; int incX = -1; float Y[] = { -0.213f }; int incY = -1; float expected1[] = { -0.213f }; float expected2[] = { -0.405f }; cblas_sswap(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], expected1[i], flteps, "sswap(case 104)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected2[i], flteps, "sswap(case 105)"); } }; }; { int N = 1; double X[] = { -0.761 }; int incX = -1; double Y[] = { -0.585 }; int incY = -1; double expected1[] = { -0.585 }; double expected2[] = { -0.761 }; cblas_dswap(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], expected1[i], dbleps, "dswap(case 106)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected2[i], dbleps, "dswap(case 107)"); } }; }; { int N = 1; float X[] = { 0.853f, 0.146f }; int incX = -1; float Y[] = { 0.009f, -0.178f }; int incY = -1; float expected1[] = { 0.009f, -0.178f }; float expected2[] = { 0.853f, 0.146f }; cblas_cswap(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected1[2*i], flteps, "cswap(case 108) real"); gsl_test_rel(X[2*i+1], expected1[2*i+1], flteps, "cswap(case 108) imag"); }; }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected2[2*i], flteps, "cswap(case 109) real"); gsl_test_rel(Y[2*i+1], expected2[2*i+1], flteps, "cswap(case 109) imag"); }; }; }; { int N = 1; double X[] = { -0.228, 0.386 }; int incX = -1; double Y[] = { 0.988, -0.084 }; int incY = -1; double expected1[] = { 0.988, -0.084 }; double expected2[] = { -0.228, 0.386 }; cblas_zswap(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected1[2*i], dbleps, "zswap(case 110) real"); gsl_test_rel(X[2*i+1], expected1[2*i+1], dbleps, "zswap(case 110) imag"); }; }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected2[2*i], dbleps, "zswap(case 111) real"); gsl_test_rel(Y[2*i+1], expected2[2*i+1], dbleps, "zswap(case 111) imag"); }; }; }; } gsl/cblas/source_her.h0000644000175000017500000000541713536674414013334 0ustar eddedd/* blas/source_her.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; const int conj = (order == CblasColMajor) ? -1 : 1; CHECK_ARGS8(CZ_HER,order,Uplo,N,alpha,X,incX,A,lda); if (alpha == 0.0) return; if ((order == CblasRowMajor && Uplo == CblasUpper) || (order == CblasColMajor && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { const BASE tmp_real = alpha * CONST_REAL(X, ix); const BASE tmp_imag = alpha * conj * CONST_IMAG(X, ix); INDEX jx = ix; { const BASE X_real = CONST_REAL(X, jx); const BASE X_imag = -conj * CONST_IMAG(X, jx); REAL(A, lda * i + i) += X_real * tmp_real - X_imag * tmp_imag; IMAG(A, lda * i + i) = 0; jx += incX; } for (j = i + 1; j < N; j++) { const BASE X_real = CONST_REAL(X, jx); const BASE X_imag = -conj * CONST_IMAG(X, jx); REAL(A, lda * i + j) += X_real * tmp_real - X_imag * tmp_imag; IMAG(A, lda * i + j) += X_imag * tmp_real + X_real * tmp_imag; jx += incX; } ix += incX; } } else if ((order == CblasRowMajor && Uplo == CblasLower) || (order == CblasColMajor && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { const BASE tmp_real = alpha * CONST_REAL(X, ix); const BASE tmp_imag = alpha * conj * CONST_IMAG(X, ix); INDEX jx = OFFSET(N, incX); for (j = 0; j < i; j++) { const BASE X_real = CONST_REAL(X, jx); const BASE X_imag = -conj * CONST_IMAG(X, jx); REAL(A, lda * i + j) += X_real * tmp_real - X_imag * tmp_imag; IMAG(A, lda * i + j) += X_imag * tmp_real + X_real * tmp_imag; jx += incX; } { const BASE X_real = CONST_REAL(X, jx); const BASE X_imag = -conj * CONST_IMAG(X, jx); REAL(A, lda * i + i) += X_real * tmp_real - X_imag * tmp_imag; IMAG(A, lda * i + i) = 0; jx += incX; } ix += incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/ztrsm.c0000644000175000017500000000076613536674414012352 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" #include "hypot.c" void cblas_ztrsm (const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const void *alpha, const void *A, const int lda, void *B, const int ldb) { #define BASE double #include "source_trsm_c.h" #undef BASE } gsl/cblas/test_trsv.c0000644000175000017500000011554113536674414013226 0ustar eddedd#include #include #include #include #include "tests.h" void test_trsv (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.995f }; float X[] = { 0.348f }; int incX = -1; float x_expected[] = { 0.349749f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1150)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.995f }; float X[] = { 0.348f }; int incX = -1; float x_expected[] = { 0.348f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1151)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.995f }; float X[] = { 0.348f }; int incX = -1; float x_expected[] = { 0.349749f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1152)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.995f }; float X[] = { 0.348f }; int incX = -1; float x_expected[] = { 0.348f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1153)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.995f }; float X[] = { 0.348f }; int incX = -1; float x_expected[] = { 0.349749f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1154)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.995f }; float X[] = { 0.348f }; int incX = -1; float x_expected[] = { 0.348f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1155)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.995f }; float X[] = { 0.348f }; int incX = -1; float x_expected[] = { 0.349749f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1156)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.995f }; float X[] = { 0.348f }; int incX = -1; float x_expected[] = { 0.348f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1157)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.793f }; float X[] = { 0.338f }; int incX = -1; float x_expected[] = { 0.42623f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1158)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.793f }; float X[] = { 0.338f }; int incX = -1; float x_expected[] = { 0.338f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1159)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.793f }; float X[] = { 0.338f }; int incX = -1; float x_expected[] = { 0.42623f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1160)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.793f }; float X[] = { 0.338f }; int incX = -1; float x_expected[] = { 0.338f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1161)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.793f }; float X[] = { 0.338f }; int incX = -1; float x_expected[] = { 0.42623f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1162)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.793f }; float X[] = { 0.338f }; int incX = -1; float x_expected[] = { 0.338f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1163)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.793f }; float X[] = { 0.338f }; int incX = -1; float x_expected[] = { 0.42623f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1164)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.793f }; float X[] = { 0.338f }; int incX = -1; float x_expected[] = { 0.338f }; cblas_strsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strsv(case 1165)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.21 }; double X[] = { 0.473 }; int incX = -1; double x_expected[] = { -2.25238095238 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1166)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.21 }; double X[] = { 0.473 }; int incX = -1; double x_expected[] = { 0.473 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1167)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.21 }; double X[] = { 0.473 }; int incX = -1; double x_expected[] = { -2.25238095238 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1168)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.21 }; double X[] = { 0.473 }; int incX = -1; double x_expected[] = { 0.473 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1169)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.21 }; double X[] = { 0.473 }; int incX = -1; double x_expected[] = { -2.25238095238 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1170)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.21 }; double X[] = { 0.473 }; int incX = -1; double x_expected[] = { 0.473 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1171)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.21 }; double X[] = { 0.473 }; int incX = -1; double x_expected[] = { -2.25238095238 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1172)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.21 }; double X[] = { 0.473 }; int incX = -1; double x_expected[] = { 0.473 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1173)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.748 }; double X[] = { 0.979 }; int incX = -1; double x_expected[] = { 1.30882352941 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1174)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.748 }; double X[] = { 0.979 }; int incX = -1; double x_expected[] = { 0.979 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1175)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.748 }; double X[] = { 0.979 }; int incX = -1; double x_expected[] = { 1.30882352941 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1176)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.748 }; double X[] = { 0.979 }; int incX = -1; double x_expected[] = { 0.979 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1177)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.748 }; double X[] = { 0.979 }; int incX = -1; double x_expected[] = { 1.30882352941 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1178)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.748 }; double X[] = { 0.979 }; int incX = -1; double x_expected[] = { 0.979 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1179)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.748 }; double X[] = { 0.979 }; int incX = -1; double x_expected[] = { 1.30882352941 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1180)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.748 }; double X[] = { 0.979 }; int incX = -1; double x_expected[] = { 0.979 }; cblas_dtrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrsv(case 1181)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.529f, -0.348f }; float X[] = { -0.95f, 0.343f }; int incX = -1; float x_expected[] = { -1.55112f, -0.372004f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1182) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1182) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.529f, -0.348f }; float X[] = { -0.95f, 0.343f }; int incX = -1; float x_expected[] = { -0.95f, 0.343f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1183) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1183) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.529f, -0.348f }; float X[] = { -0.95f, 0.343f }; int incX = -1; float x_expected[] = { -1.55112f, -0.372004f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1184) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1184) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.529f, -0.348f }; float X[] = { -0.95f, 0.343f }; int incX = -1; float x_expected[] = { -0.95f, 0.343f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1185) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1185) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.529f, -0.348f }; float X[] = { -0.95f, 0.343f }; int incX = -1; float x_expected[] = { -1.55112f, -0.372004f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1186) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1186) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.529f, -0.348f }; float X[] = { -0.95f, 0.343f }; int incX = -1; float x_expected[] = { -0.95f, 0.343f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1187) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1187) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.529f, -0.348f }; float X[] = { -0.95f, 0.343f }; int incX = -1; float x_expected[] = { -1.55112f, -0.372004f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1188) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1188) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.529f, -0.348f }; float X[] = { -0.95f, 0.343f }; int incX = -1; float x_expected[] = { -0.95f, 0.343f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1189) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1189) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.6f, 0.041f }; float X[] = { 0.896f, -0.447f }; int incX = -1; float x_expected[] = { 1.43572f, -0.843108f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1190) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1190) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.6f, 0.041f }; float X[] = { 0.896f, -0.447f }; int incX = -1; float x_expected[] = { 0.896f, -0.447f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1191) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1191) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.6f, 0.041f }; float X[] = { 0.896f, -0.447f }; int incX = -1; float x_expected[] = { 1.43572f, -0.843108f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1192) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1192) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.6f, 0.041f }; float X[] = { 0.896f, -0.447f }; int incX = -1; float x_expected[] = { 0.896f, -0.447f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1193) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1193) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.6f, 0.041f }; float X[] = { 0.896f, -0.447f }; int incX = -1; float x_expected[] = { 1.43572f, -0.843108f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1194) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1194) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.6f, 0.041f }; float X[] = { 0.896f, -0.447f }; int incX = -1; float x_expected[] = { 0.896f, -0.447f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1195) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1195) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.6f, 0.041f }; float X[] = { 0.896f, -0.447f }; int incX = -1; float x_expected[] = { 1.43572f, -0.843108f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1196) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1196) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.6f, 0.041f }; float X[] = { 0.896f, -0.447f }; int incX = -1; float x_expected[] = { 0.896f, -0.447f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1197) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1197) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.397f, 0.683f }; float X[] = { 0.765f, 0.18f }; int incX = -1; float x_expected[] = { 0.289642f, 0.951701f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1198) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1198) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.397f, 0.683f }; float X[] = { 0.765f, 0.18f }; int incX = -1; float x_expected[] = { 0.765f, 0.18f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1199) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1199) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.397f, 0.683f }; float X[] = { 0.765f, 0.18f }; int incX = -1; float x_expected[] = { 0.289642f, 0.951701f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1200) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1200) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.397f, 0.683f }; float X[] = { 0.765f, 0.18f }; int incX = -1; float x_expected[] = { 0.765f, 0.18f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1201) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1201) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.397f, 0.683f }; float X[] = { 0.765f, 0.18f }; int incX = -1; float x_expected[] = { 0.289642f, 0.951701f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1202) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1202) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.397f, 0.683f }; float X[] = { 0.765f, 0.18f }; int incX = -1; float x_expected[] = { 0.765f, 0.18f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1203) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1203) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.397f, 0.683f }; float X[] = { 0.765f, 0.18f }; int incX = -1; float x_expected[] = { 0.289642f, 0.951701f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1204) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1204) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.397f, 0.683f }; float X[] = { 0.765f, 0.18f }; int incX = -1; float x_expected[] = { 0.765f, 0.18f }; cblas_ctrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrsv(case 1205) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrsv(case 1205) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.977, -0.955 }; double X[] = { -0.627, 0.281 }; int incX = -1; double x_expected[] = { -0.471957414573, -0.173714770642 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1206) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1206) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.977, -0.955 }; double X[] = { -0.627, 0.281 }; int incX = -1; double x_expected[] = { -0.627, 0.281 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1207) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1207) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.977, -0.955 }; double X[] = { -0.627, 0.281 }; int incX = -1; double x_expected[] = { -0.471957414573, -0.173714770642 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1208) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1208) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.977, -0.955 }; double X[] = { -0.627, 0.281 }; int incX = -1; double x_expected[] = { -0.627, 0.281 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1209) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1209) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.977, -0.955 }; double X[] = { -0.627, 0.281 }; int incX = -1; double x_expected[] = { -0.471957414573, -0.173714770642 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1210) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1210) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.977, -0.955 }; double X[] = { -0.627, 0.281 }; int incX = -1; double x_expected[] = { -0.627, 0.281 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1211) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1211) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.977, -0.955 }; double X[] = { -0.627, 0.281 }; int incX = -1; double x_expected[] = { -0.471957414573, -0.173714770642 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1212) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1212) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.977, -0.955 }; double X[] = { -0.627, 0.281 }; int incX = -1; double x_expected[] = { -0.627, 0.281 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1213) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1213) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.076, -0.16 }; double X[] = { 0.3, -0.874 }; int incX = -1; double x_expected[] = { 5.18357980622, -0.587200407955 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1214) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1214) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.076, -0.16 }; double X[] = { 0.3, -0.874 }; int incX = -1; double x_expected[] = { 0.3, -0.874 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1215) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1215) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.076, -0.16 }; double X[] = { 0.3, -0.874 }; int incX = -1; double x_expected[] = { 5.18357980622, -0.587200407955 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1216) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1216) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.076, -0.16 }; double X[] = { 0.3, -0.874 }; int incX = -1; double x_expected[] = { 0.3, -0.874 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1217) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1217) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.076, -0.16 }; double X[] = { 0.3, -0.874 }; int incX = -1; double x_expected[] = { 5.18357980622, -0.587200407955 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1218) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1218) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.076, -0.16 }; double X[] = { 0.3, -0.874 }; int incX = -1; double x_expected[] = { 0.3, -0.874 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1219) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1219) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.076, -0.16 }; double X[] = { 0.3, -0.874 }; int incX = -1; double x_expected[] = { 5.18357980622, -0.587200407955 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1220) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1220) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.076, -0.16 }; double X[] = { 0.3, -0.874 }; int incX = -1; double x_expected[] = { 0.3, -0.874 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1221) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1221) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.372, -0.745 }; double X[] = { -0.085, -0.303 }; int incX = -1; double x_expected[] = { -0.371144591432, -0.0712292456544 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1222) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1222) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.372, -0.745 }; double X[] = { -0.085, -0.303 }; int incX = -1; double x_expected[] = { -0.085, -0.303 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1223) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1223) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.372, -0.745 }; double X[] = { -0.085, -0.303 }; int incX = -1; double x_expected[] = { -0.371144591432, -0.0712292456544 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1224) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1224) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.372, -0.745 }; double X[] = { -0.085, -0.303 }; int incX = -1; double x_expected[] = { -0.085, -0.303 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1225) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1225) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.372, -0.745 }; double X[] = { -0.085, -0.303 }; int incX = -1; double x_expected[] = { -0.371144591432, -0.0712292456544 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1226) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1226) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.372, -0.745 }; double X[] = { -0.085, -0.303 }; int incX = -1; double x_expected[] = { -0.085, -0.303 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1227) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1227) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.372, -0.745 }; double X[] = { -0.085, -0.303 }; int incX = -1; double x_expected[] = { -0.371144591432, -0.0712292456544 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1228) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1228) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.372, -0.745 }; double X[] = { -0.085, -0.303 }; int incX = -1; double x_expected[] = { -0.085, -0.303 }; cblas_ztrsv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrsv(case 1229) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrsv(case 1229) imag"); }; }; }; } gsl/cblas/source_swap_c.h0000644000175000017500000000220213536674414014017 0ustar eddedd/* blas/source_swap_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i; INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { const BASE tmp_real = REAL(X, ix); const BASE tmp_imag = IMAG(X, ix); REAL(X, ix) = REAL(Y, iy); IMAG(X, ix) = IMAG(Y, iy); REAL(Y, iy) = tmp_real; IMAG(Y, iy) = tmp_imag; ix += incX; iy += incY; } } gsl/cblas/sasum.c0000644000175000017500000000030713536674414012312 0ustar eddedd#include #include #include "cblas.h" float cblas_sasum (const int N, const float *X, const int incX) { #define BASE float #include "source_asum_r.h" #undef BASE } gsl/cblas/zgeru.c0000644000175000017500000000055713536674414012325 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_zgeru (const enum CBLAS_ORDER order, const int M, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda) { #define BASE double #include "source_geru.h" #undef BASE } gsl/cblas/dtpmv.c0000644000175000017500000000060313536674414012313 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dtpmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const double *Ap, double *X, const int incX) { #define BASE double #include "source_tpmv_r.h" #undef BASE } gsl/cblas/test_trsm.c0000644000175000017500000036547313536674414013230 0ustar eddedd#include #include #include #include #include "tests.h" void test_trsm (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { -0.279f, 0.058f, 0.437f, 0.462f }; int lda = 2; float B[] = { 0.578f, 0.473f, -0.34f, -0.128f, 0.503f, 0.2f }; int ldb = 3; float B_expected[] = { 0.638784f, 0.440702f, -0.392589f, 0.0831169f, -0.326623f, -0.12987f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1822)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { -0.735f, -0.861f, 0.772f, -0.242f }; int lda = 2; float B[] = { -0.793f, -0.162f, -0.844f, 0.143f, -0.379f, -0.46f }; int ldb = 3; float B_expected[] = { 0.200963f, 0.146496f, 0.372018f, -0.0429f, 0.1137f, 0.138f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1823)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { -0.498f, 0.777f, -0.913f, 0.779f }; int lda = 2; float B[] = { -0.831f, -0.663f, -0.098f, -0.894f, -0.059f, 0.468f }; int ldb = 3; float B_expected[] = { -0.500602f, -0.399398f, -0.0590361f, -0.242426f, -0.445379f, -0.249422f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1824)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { -0.543f, 0.095f, -0.933f, -0.669f }; int lda = 2; float B[] = { 0.068f, 0.715f, 0.012f, -0.785f, 0.378f, 0.251f }; int ldb = 3; float B_expected[] = { -0.0204f, -0.2145f, -0.0036f, 0.216467f, -0.313528f, -0.0786588f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1825)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.75f, 0.777f, -0.025f, 0.572f }; int lda = 2; float B[] = { 0.03f, 0.392f, -0.056f, 0.399f, -0.489f, -0.167f }; int ldb = 2; float B_expected[] = { -0.0188531f, -0.205594f, 0.0154245f, -0.209266f, 0.19852f, 0.0875874f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1826)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.899f, -0.447f, 0.338f, -0.74f }; int lda = 2; float B[] = { 0.964f, -0.104f, -0.199f, 0.503f, -0.386f, -0.764f }; int ldb = 2; float B_expected[] = { -0.299746f, 0.0312f, 0.110704f, -0.1509f, 0.0383304f, 0.2292f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1827)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.279f, 0.73f, -0.366f, 0.583f }; int lda = 2; float B[] = { -0.572f, 0.75f, 0.603f, 0.697f, 0.908f, 0.119f }; int ldb = 2; float B_expected[] = { 0.615054f, -1.15607f, -0.648387f, 0.453212f, -0.976344f, 1.16129f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1828)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.581f, -0.911f, 0.438f, 0.731f }; int lda = 2; float B[] = { 0.519f, 0.831f, 0.822f, 0.182f, 0.571f, -0.357f }; int ldb = 2; float B_expected[] = { -0.1557f, -0.391143f, -0.2466f, -0.279253f, -0.1713f, -0.0489543f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1829)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.065f, 0.099f, 0.48f, 0.746f, -0.739f, 0.695f, 0.197f, 0.621f, 0.063f }; int lda = 3; float B[] = { 0.01f, -0.612f, 0.756f, -0.225f, 0.546f, 0.432f }; int ldb = 3; float B_expected[] = { -0.0461538f, -0.254627f, -0.439373f, 1.03846f, 0.360768f, -13.9491f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1830)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { -0.86f, -0.653f, 0.87f, -0.037f, 0.788f, 0.015f, 0.028f, -0.804f, -0.357f }; int lda = 3; float B[] = { -0.546f, 0.892f, -0.085f, -0.541f, -0.207f, 0.765f }; int ldb = 3; float B_expected[] = { 0.1638f, -0.160639f, -0.114596f, 0.1623f, 0.168082f, -0.373222f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1831)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.872f, -0.35f, 0.518f, -0.8f, -0.13f, -0.832f, 0.426f, 0.195f, -0.735f }; int lda = 3; float B[] = { 0.773f, 0.069f, 0.45f, 0.189f, 0.504f, 0.996f }; int ldb = 3; float B_expected[] = { 0.0431742f, 0.434741f, 0.183673f, 1.36286f, 1.77287f, 0.406531f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1832)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { -0.053f, -0.132f, -0.515f, -0.411f, 0.134f, 0.657f, 0.072f, -0.007f, -0.34f }; int lda = 3; float B[] = { 0.494f, 0.072f, -0.882f, -0.112f, 0.904f, 0.755f }; int ldb = 3; float B_expected[] = { -0.175368f, -0.0197478f, 0.2646f, -0.0622068f, -0.272786f, -0.2265f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1833)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { -0.154f, -0.54f, 0.146f, -0.106f, -0.478f, 0.938f, -0.731f, 0.25f, -0.4f }; int lda = 3; float B[] = { -0.88f, -0.555f, 0.642f, 0.751f, -0.859f, -0.409f }; int ldb = 2; float B_expected[] = { -1.71429f, -1.08117f, 0.783084f, 0.711096f, 2.97803f, 2.11352f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1834)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.249f, -0.451f, -0.781f, 0.157f, -0.02f, 0.57f, 0.309f, -0.159f, 0.266f }; int lda = 3; float B[] = { -0.546f, 0.839f, 0.392f, -0.445f, -0.818f, 0.953f }; int ldb = 2; float B_expected[] = { 0.1638f, -0.2517f, -0.143317f, 0.173017f, 0.171998f, -0.180615f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1835)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.299f, 0.626f, -0.471f, 0.208f, -0.842f, 0.674f, 0.03f, 0.628f, 0.534f }; int lda = 3; float B[] = { 0.831f, -0.997f, -0.366f, 0.307f, -0.426f, 0.806f }; int ldb = 2; float B_expected[] = { -0.584851f, 0.816906f, 0.0611706f, -0.25308f, 0.239326f, -0.452809f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1836)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.301f, 0.168f, 0.934f, 0.107f, 0.068f, 0.384f, -0.201f, 0.116f, -0.436f }; int lda = 3; float B[] = { 0.773f, -0.304f, -0.402f, 0.642f, -0.102f, -0.095f }; int ldb = 2; float B_expected[] = { -0.278767f, 0.0987764f, 0.10885f, -0.203544f, 0.0306f, 0.0285f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1837)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { -0.616f, 0.304f, 0.403f, 0.739f }; int lda = 2; float B[] = { 0.273f, -0.609f, 0.858f, 0.993f, -0.738f, -0.353f }; int ldb = 3; float B_expected[] = { -0.443182f, 0.988636f, -1.39286f, 1.52602f, -1.40534f, 0.0953025f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1838)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { 0.811f, 0.257f, 0.98f, -0.956f }; int lda = 2; float B[] = { 0.996f, 0.329f, 0.273f, -0.744f, 0.662f, -0.31f }; int ldb = 3; float B_expected[] = { 0.996f, 0.329f, 0.273f, -0.999972f, 0.577447f, -0.380161f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1839)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { 0.845f, 0.064f, 0.29f, -0.291f }; int lda = 2; float B[] = { 0.878f, 0.156f, 0.217f, 0.082f, -0.869f, 0.595f }; int ldb = 3; float B_expected[] = { 1.13576f, -0.840253f, 0.958527f, -0.281787f, 2.98625f, -2.04467f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1840)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { 0.836f, 0.359f, -0.415f, 0.154f }; int lda = 2; float B[] = { 0.652f, 0.614f, 0.922f, -0.063f, 0.313f, -0.316f }; int ldb = 3; float B_expected[] = { 0.625855f, 0.743895f, 0.79086f, -0.063f, 0.313f, -0.316f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1841)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { 0.94f, -0.656f, 0.645f, -0.634f }; int lda = 2; float B[] = { -0.948f, -0.596f, -0.799f, 0.133f, -0.843f, -0.179f }; int ldb = 2; float B_expected[] = { -1.00851f, -0.0859454f, -0.85f, -1.07453f, -0.896809f, -0.630034f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1842)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { -0.332f, 0.705f, -0.792f, -0.033f }; int lda = 2; float B[] = { 0.561f, 0.883f, -0.136f, 0.203f, -0.531f, 0.733f }; int ldb = 2; float B_expected[] = { 0.561f, 1.32731f, -0.136f, 0.095288f, -0.531f, 0.312448f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1843)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { 0.991f, 0.614f, 0.108f, -0.125f }; int lda = 2; float B[] = { -0.723f, 0.885f, 0.336f, 0.584f, 0.742f, -0.438f }; int ldb = 2; float B_expected[] = { 3.65703f, -7.08f, 3.23371f, -4.672f, -1.42226f, 3.504f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1844)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { -0.626f, 0.912f, -0.003f, 0.761f }; int lda = 2; float B[] = { 0.736f, -0.383f, 0.0f, -0.238f, 0.013f, 0.473f }; int ldb = 2; float B_expected[] = { 1.0853f, -0.383f, 0.217056f, -0.238f, -0.418376f, 0.473f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1845)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { -0.416f, 0.599f, -0.705f, 0.326f, 0.184f, 0.079f, -0.173f, 0.125f, 0.567f }; int lda = 3; float B[] = { 0.466f, 0.907f, -0.85f, -0.342f, -0.058f, -0.379f }; int ldb = 3; float B_expected[] = { 9.44495f, 5.57299f, -1.49912f, 1.91427f, -0.0282283f, -0.66843f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1846)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { -0.75f, 0.856f, 0.773f, -0.241f, -0.357f, -0.683f, -0.718f, 0.69f, -0.486f }; int lda = 3; float B[] = { -0.532f, -0.817f, 0.85f, -0.135f, 0.797f, 0.981f }; int ldb = 3; float B_expected[] = { -0.986649f, -0.23645f, 0.85f, -2.14908f, 1.46702f, 0.981f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1847)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { 0.765f, -0.408f, 0.404f, 0.764f, 0.157f, -0.741f, 0.844f, 0.206f, -0.215f }; int lda = 3; float B[] = { -0.859f, 0.563f, -0.61f, 0.2f, 0.816f, -0.692f }; int ldb = 3; float B_expected[] = { -1.12288f, 9.05017f, 7.1006f, 0.261438f, 3.92523f, 8.00582f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1848)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { 0.354f, -0.931f, 0.18f, 0.391f, 0.01f, 0.429f, 0.685f, 0.332f, -0.643f }; int lda = 3; float B[] = { -0.645f, 0.847f, 0.014f, 0.83f, 0.761f, 0.187f }; int ldb = 3; float B_expected[] = { -0.645f, 1.09919f, 0.0908923f, 0.83f, 0.43647f, -0.526458f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1849)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { 0.569f, 0.85f, 0.642f, -0.051f, 0.724f, 0.201f, 0.87f, -0.638f, 0.008f }; int lda = 3; float B[] = { -0.923f, 0.27f, -0.319f, -0.856f, -0.533f, 0.183f }; int ldb = 2; float B_expected[] = { 94.9456f, -32.8005f, -59.1516f, 18.9755f, -66.625f, 22.875f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1850)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { 0.244f, 0.931f, 0.857f, -0.295f, 0.551f, 0.832f, 0.744f, -0.326f, 0.111f }; int lda = 3; float B[] = { -0.478f, -0.252f, -0.155f, 0.419f, -0.192f, 0.291f }; int ldb = 2; float B_expected[] = { -0.399342f, -0.316914f, -0.217592f, 0.513866f, -0.192f, 0.291f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1851)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { 0.36f, 0.356f, -0.858f, 0.879f, 0.641f, 0.989f, 0.998f, -0.005f, 0.64f }; int lda = 3; float B[] = { -0.634f, -0.529f, -0.344f, 0.375f, -0.168f, 0.465f }; int ldb = 2; float B_expected[] = { -1.76111f, -1.46944f, 0.441428f, 1.40113f, -3.30563f, -3.40859f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1852)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 1.0f; float A[] = { 0.389f, 0.997f, 0.909f, -0.598f, -0.43f, -0.345f, -0.897f, 0.119f, -0.285f }; int lda = 3; float B[] = { 0.779f, -0.129f, 0.016f, 0.599f, -0.668f, -0.638f }; int ldb = 2; float B_expected[] = { 0.779f, -0.129f, -0.760663f, 0.727613f, -1.63854f, -0.269713f }; cblas_strsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strsm(case 1853)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { -0.876, -0.503, -0.062, -0.987 }; int lda = 2; double B[] = { 0.219, -0.986, -0.0, -0.605, 0.289, 0.641 }; int ldb = 3; double B_expected[] = { 0.601967125138, -1.29370052694, -0.372910623494, -0.612968591692, 0.292806484296, 0.649442755826 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1854)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { -0.266, -0.505, -0.55, 0.524 }; int lda = 2; double B[] = { 0.1, -0.105, 0.757, 0.522, -0.269, -0.142 }; int ldb = 3; double B_expected[] = { -0.36361, 0.240845, -0.68529, -0.522, 0.269, 0.142 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1855)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.101, 0.871, 0.202, 0.169 }; int lda = 2; double B[] = { 0.018, 0.292, -0.573, 0.866, 0.749, 0.99 }; int ldb = 3; double B_expected[] = { -0.178217821782, -2.89108910891, 5.67326732673, -4.91124260355, -0.976331360947, -12.6390532544 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1856)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { -0.387, -0.739, -0.599, 0.114 }; int lda = 2; double B[] = { 0.7, 0.473, 0.86, -0.557, 0.283, 0.62 }; int ldb = 3; double B_expected[] = { -0.7, -0.473, -0.86, 0.1377, -0.566327, -1.13514 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1857)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { -0.683, -0.009, -0.451, -0.185 }; int lda = 2; double B[] = { 0.552, 0.083, -0.976, 0.22, -0.895, -0.301 }; int ldb = 2; double B_expected[] = { 0.511946499941, 0.448648648649, -2.21423766373, 1.18918918919, -0.236033397966, -1.62702702703 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1858)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { -0.141, 0.944, 0.529, 0.636 }; int lda = 2; double B[] = { 0.178, -0.22, -0.645, -0.585, -0.342, -0.594 }; int ldb = 2; double B_expected[] = { -0.29438, 0.22, 0.335535, 0.585, 0.027774, 0.594 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1859)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.541, 0.584, -0.394, 0.371 }; int lda = 2; double B[] = { 0.668, 0.848, -0.816, -0.925, -0.145, 0.746 }; int ldb = 2; double B_expected[] = { -1.23475046211, -0.342063962613, 1.50831792976, 0.118982018923, 0.268022181146, -2.43268181614 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1860)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.836, -0.024, 0.226, 0.416 }; int lda = 2; double B[] = { -0.172, -0.601, 0.542, 0.25, 0.746, 0.55 }; int ldb = 2; double B_expected[] = { 0.172, 0.605128, -0.542, -0.263008, -0.746, -0.567904 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1861)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.544, 0.721, 0.623, 0.392, -0.808, -0.022, -0.665, -0.616, -0.735 }; int lda = 3; double B[] = { -0.526, -0.486, -0.716, 0.361, 0.365, -0.492 }; int ldb = 3; double B_expected[] = { 0.966911764706, 0.261316067268, -0.162398536147, -0.663602941176, -0.140417971025, -1.22766726121 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1862)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.907, 0.558, -0.233, 0.073, -0.734, -0.058, -0.115, 0.513, 0.503 }; int lda = 3; double B[] = { -0.606, -0.124, 0.641, -0.074, -0.053, -0.734 }; int ldb = 3; double B_expected[] = { 0.606, -0.214148, -0.512222584, 0.074, 0.011708, 0.751921064 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1863)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.9, 0.063, -0.652, -0.841, 0.251, -0.8, 0.365, 0.809, 0.336 }; int lda = 3; double B[] = { -0.584, -0.058, -0.964, -0.214, -0.632, -0.611 }; int ldb = 3; double B_expected[] = { -8.93978245747, -9.01617340163, 2.86904761905, -3.62368367799, -3.34313934737, 1.81845238095 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1864)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.934, -0.608, 0.49, 0.351, -0.301, 0.602, 0.873, 0.031, -0.2 }; int lda = 3; double B[] = { -0.541, -0.729, -0.382, 0.741, 0.546, -0.833 }; int ldb = 3; double B_expected[] = { -0.044208458, 0.717158, 0.382, -1.267499127, -0.571823, 0.833 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1865)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { -0.339, 0.049, 0.734, -0.182, 0.427, 0.193, -0.959, -0.679, 0.269 }; int lda = 3; double B[] = { 0.824, 0.907, 0.632, -0.348, -0.646, 0.741 }; int ldb = 2; double B_expected[] = { 2.43067846608, 2.67551622419, -0.444066789635, 1.95537225481, 9.9460940476, 11.7193971004 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1866)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.766, -0.422, -0.518, 0.517, 0.669, 0.337, -0.579, 0.885, -0.677 }; int lda = 3; double B[] = { 0.211, -0.911, -0.685, -0.777, -0.919, 0.282 }; int ldb = 2; double B_expected[] = { -0.211, 0.911, 0.794087, 0.306013, 0.094064005, -0.025352505 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1867)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { -0.686, -0.256, 0.028, 0.371, 0.469, 0.115, 0.284, 0.139, 0.677 }; int lda = 3; double B[] = { -0.877, -0.818, 0.191, 0.468, 0.889, -0.002 }; int ldb = 2; double B_expected[] = { -1.30020532939, -0.819646768394, -0.0852626506631, -0.998592183627, -1.31314623338, 0.00295420974889 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1868)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { -0.819, -0.523, 0.042, 0.545, -0.292, 0.283, 0.224, 0.247, -0.325 }; int lda = 3; double B[] = { 0.153, -0.272, -0.226, 0.987, -0.216, -0.218 }; int ldb = 2; double B_expected[] = { -0.075843944, -0.285622962, 0.164872, -1.048694, 0.216, 0.218 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1869)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.164, 0.486, 0.891, -0.508 }; int lda = 2; double B[] = { 0.368, 0.761, -0.349, 0.324, 0.241, 0.561 }; int ldb = 3; double B_expected[] = { -2.24390243902, -4.64024390244, 2.12804878049, -1.50893028615, -3.96487900903, 3.14021989629 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1870)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { -0.019, -0.382, -0.579, 0.76 }; int lda = 2; double B[] = { -0.596, -0.074, 0.576, 0.861, -0.44, 0.842 }; int ldb = 3; double B_expected[] = { 0.596, 0.074, -0.576, -0.633328, 0.468268, -1.062032 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1871)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.449, -0.367, -0.268, 0.1 }; int lda = 2; double B[] = { 0.58, -0.203, 0.053, 0.792, 0.355, -0.685 }; int ldb = 3; double B_expected[] = { -6.01906458797, -1.66681514477, 3.9706013363, -7.92, -3.55, 6.85 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1872)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.159, 0.333, 0.515, 0.715 }; int lda = 2; double B[] = { -0.631, 0.472, 0.796, 0.278, 0.802, 0.298 }; int ldb = 3; double B_expected[] = { 0.77417, -0.05897, -0.64253, -0.278, -0.802, -0.298 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1873)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.056, -0.493, 0.619, -0.028 }; int lda = 2; double B[] = { -0.32, -0.217, 0.301, 0.729, -0.847, -0.577 }; int ldb = 2; double B_expected[] = { 5.71428571429, 118.576530612, -5.375, -92.7901785714, 15.125, 313.763392857 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1874)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { -0.595, 0.64, 0.109, 0.969 }; int lda = 2; double B[] = { 0.186, -0.435, -0.747, 0.212, 0.257, 0.804 }; int ldb = 2; double B_expected[] = { -0.186, 0.455274, 0.747, -0.293423, -0.257, -0.775987 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1875)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.484, 0.769, 0.91, 0.817 }; int lda = 2; double B[] = { -0.668, 0.544, 0.753, 0.796, -0.74, -0.091 }; int ldb = 2; double B_expected[] = { 2.4380974539, -0.665850673195, -0.0077814418807, -0.97429620563, 1.35195534965, 0.111383108935 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1876)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { -0.725, 0.73, -0.095, 0.123 }; int lda = 2; double B[] = { -0.26, 0.579, 0.393, -0.18, 0.358, 0.839 }; int ldb = 2; double B_expected[] = { 0.68267, -0.579, -0.5244, 0.18, 0.25447, -0.839 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1877)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { -0.009, 0.237, -0.563, 0.993, 0.508, 0.771, 0.745, 0.233, 0.255 }; int lda = 3; double B[] = { -0.328, -0.482, 0.083, -0.125, -0.712, -0.757 }; int ldb = 3; double B_expected[] = { 21.9110553583, 1.44282075035, -0.325490196078, -281.330646047, -3.10396016674, 2.96862745098 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1878)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { -0.484, -0.131, 0.563, -0.095, 0.012, -0.988, -0.722, 0.738, 0.05 }; int lda = 3; double B[] = { -0.069, -0.137, -0.45, -0.24, 0.221, -0.509 }; int ldb = 3; double B_expected[] = { -0.1081604, 0.5816, 0.45, -0.009639148, 0.281892, 0.509 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1879)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.521, 0.487, -0.961, 0.903, -0.045, 0.059, -0.61, -0.328, 0.883 }; int lda = 3; double B[] = { -0.772, 0.079, -0.227, 0.998, 0.302, -0.099 }; int ldb = 3; double B_expected[] = { 1.48176583493, 31.4896566432, 12.9778986844, -1.91554702495, -31.7275325229, -12.9967319963 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1880)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.642, 0.511, 0.762, 0.804, -0.28, -0.318, 0.382, -0.165, -0.007 }; int lda = 3; double B[] = { 0.987, 0.436, -0.783, 0.175, -0.973, -0.319 }; int ldb = 3; double B_expected[] = { -0.987, 0.357548, 1.21902942, -0.175, 1.1137, 0.5696105 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1881)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { -0.995, 0.625, 0.16, -0.127, -0.722, -0.355, -0.14, -0.146, -0.756 }; int lda = 3; double B[] = { 0.676, 0.038, 0.543, 0.296, -0.44, 0.751 }; int ldb = 2; double B_expected[] = { 0.650272121575, -0.128270318012, 0.869769452872, 0.209093640534, -0.582010582011, 0.993386243386 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1882)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { -0.619, 0.548, 0.064, -0.483, -0.508, -0.819, 0.237, 0.852, -0.512 }; int lda = 3; double B[] = { -0.169, 0.429, -0.789, 0.79, 0.479, 0.817 }; int ldb = 2; double B_expected[] = { 0.860726164, -0.280732428, 1.197108, -0.093916, -0.479, -0.817 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1883)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.794, -0.098, 0.442, -0.991, 0.049, 0.079, -0.8, -0.762, 0.395 }; int lda = 3; double B[] = { 0.496, -0.734, -0.679, -0.697, 0.426, 0.094 }; int ldb = 2; double B_expected[] = { -0.624685138539, 0.92443324937, 12.6077725801, 16.0733562947, -2.90102076605, -4.48707504683 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1884)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = -1; double A[] = { 0.848, -0.765, 0.528, -0.693, 0.252, -0.135, -0.507, 0.954, -0.056 }; int lda = 3; double B[] = { 0.791, -0.787, 0.636, 0.271, -0.905, -0.974 }; int ldb = 2; double B_expected[] = { -0.791, 0.787, -1.241115, 0.331055, 1.155097475, 0.603156425 }; cblas_dtrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrsm(case 1885)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { 0.491f, -0.317f, -0.14f, -0.739f, -0.969f, -0.518f, 0.702f, -0.287f }; int lda = 2; float B[] = { -0.962f, -0.38f, 0.656f, 0.587f, -0.195f, -0.862f, -0.679f, 0.598f, 0.919f, 0.714f, -0.513f, 0.726f }; int ldb = 3; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1886) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1886) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { -0.6f, 0.338f, -0.048f, -0.926f, 0.236f, 0.362f, 0.605f, 0.562f }; int lda = 2; float B[] = { -0.009f, 0.371f, -0.989f, 0.728f, -0.062f, 0.113f, 0.714f, 0.604f, -0.293f, 0.859f, -0.875f, 0.216f }; int ldb = 3; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1887) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1887) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { -0.889f, -0.479f, -0.526f, 0.077f, -0.704f, 0.242f, 0.458f, -0.553f }; int lda = 2; float B[] = { -0.554f, 0.966f, 0.076f, 0.42f, 0.85f, 0.369f, 0.124f, -0.476f, -0.007f, 0.428f, 0.452f, -0.214f }; int ldb = 3; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1888) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1888) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { 0.947f, 0.444f, 0.079f, -0.597f, 0.978f, -0.64f, 0.82f, 0.808f }; int lda = 2; float B[] = { -0.899f, -0.964f, -0.714f, 0.422f, -0.084f, -0.78f, -0.609f, -0.595f, 0.748f, -0.926f, 0.242f, -0.474f }; int ldb = 3; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1889) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1889) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { -0.547f, -0.763f, -0.805f, 0.498f, 0.786f, -0.082f, 0.922f, 0.538f }; int lda = 2; float B[] = { -0.074f, -0.617f, 0.359f, -0.383f, -0.172f, 0.911f, -0.934f, 0.066f, -0.67f, 0.895f, 0.92f, 0.255f }; int ldb = 2; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1890) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1890) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { -0.096f, -0.362f, -0.311f, -0.347f, 0.161f, -0.517f, -0.393f, 0.572f }; int lda = 2; float B[] = { 0.742f, -0.419f, -0.391f, 0.846f, -0.255f, -0.364f, 0.006f, -0.496f, 0.118f, -0.593f, 0.773f, 0.053f }; int ldb = 2; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1891) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1891) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { 0.669f, 0.845f, 0.657f, -0.43f, 0.19f, 0.206f, -0.305f, 0.761f }; int lda = 2; float B[] = { -0.457f, 0.857f, -0.203f, 0.942f, 0.462f, 0.52f, 0.521f, -0.609f, 0.069f, 0.005f, -0.419f, 0.806f }; int ldb = 2; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1892) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1892) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { -0.269f, -0.87f, -0.592f, 0.813f, 0.977f, -0.848f, 0.282f, -0.311f }; int lda = 2; float B[] = { -0.654f, 0.857f, -0.834f, 0.796f, 0.414f, -0.499f, 0.961f, 0.643f, 0.117f, 0.758f, -0.189f, -0.768f }; int ldb = 2; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1893) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1893) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { 0.361f, -0.818f, 0.039f, 0.275f, 0.541f, -0.615f, 0.025f, -0.691f, -0.697f, 0.976f, 0.746f, 0.607f, 0.651f, -0.918f, -0.702f, 0.37f, -0.668f, -0.114f }; int lda = 3; float B[] = { 0.218f, 0.75f, 0.575f, -0.702f, 0.7f, -0.41f, 0.374f, 0.489f, -0.876f, 0.842f, -0.848f, 0.901f }; int ldb = 3; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1894) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1894) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { 0.483f, 0.088f, -0.192f, 0.17f, 0.683f, 0.293f, -0.773f, 0.365f, -0.28f, 0.257f, 0.818f, 0.45f, -0.551f, -0.051f, 0.899f, -0.127f, -0.915f, 0.152f }; int lda = 3; float B[] = { 0.732f, -0.394f, 0.073f, -0.082f, 0.918f, -0.53f, 0.67f, 0.149f, -0.344f, -0.65f, -0.62f, -0.632f }; int ldb = 3; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1895) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1895) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { 0.508f, -0.251f, 0.655f, -0.315f, -0.26f, 0.229f, 0.05f, -0.276f, -0.993f, 0.647f, -0.547f, -0.34f, 0.781f, -0.819f, 0.865f, 0.361f, -0.028f, 0.178f }; int lda = 3; float B[] = { 0.972f, 0.048f, 0.71f, -0.168f, -0.274f, 0.92f, 0.789f, 0.485f, 0.578f, 0.73f, -0.931f, 0.288f }; int ldb = 3; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1896) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1896) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { -0.874f, 0.651f, 0.074f, -0.862f, -0.42f, 0.066f, -0.845f, 0.482f, -0.44f, 0.724f, 0.137f, -0.123f, -0.63f, -0.011f, -0.187f, -0.205f, 0.976f, -0.81f }; int lda = 3; float B[] = { 0.539f, 0.131f, 0.986f, 0.615f, 0.983f, -0.22f, 0.144f, 0.677f, 0.561f, -0.494f, -0.433f, -0.089f }; int ldb = 3; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1897) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1897) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { 0.284f, 0.871f, -0.835f, 0.926f, 0.459f, -0.889f, 0.387f, 0.319f, -0.366f, 0.884f, 0.236f, 0.921f, 0.619f, -0.41f, -0.709f, -0.372f, 0.06f, 0.551f }; int lda = 3; float B[] = { 0.354f, 0.245f, 0.552f, 0.77f, -0.524f, -0.973f, -0.814f, -0.835f, -0.976f, 0.396f, -0.726f, -0.204f }; int ldb = 2; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1898) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1898) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { -0.98f, -0.854f, -0.832f, 0.514f, -0.028f, -0.857f, 0.066f, 0.415f, -0.316f, 0.538f, -0.465f, -0.691f, 0.286f, 0.954f, -0.486f, -0.574f, -0.429f, 0.992f }; int lda = 3; float B[] = { 0.295f, 0.578f, -0.167f, 0.106f, -0.782f, 0.668f, 0.278f, 0.855f, 0.038f, 0.976f, 0.167f, -0.777f }; int ldb = 2; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1899) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1899) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { 0.534f, 0.782f, 0.282f, 0.581f, 0.804f, -0.68f, 0.234f, -0.758f, 0.033f, -0.503f, 0.981f, -0.839f, 0.919f, 0.175f, 0.152f, -0.683f, -0.346f, -0.279f }; int lda = 3; float B[] = { 0.135f, -0.969f, -0.314f, -0.026f, -0.284f, 0.529f, 0.781f, -0.413f, -0.018f, -0.859f, -0.817f, -0.849f }; int ldb = 2; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1900) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1900) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.0f}; float A[] = { -0.426f, 0.148f, 0.889f, 0.217f, 0.779f, -0.963f, -0.516f, -0.366f, 0.721f, 0.4f, -0.976f, -0.365f, 0.532f, 0.188f, 0.176f, 0.082f, -0.691f, -0.833f }; int lda = 3; float B[] = { -0.71f, 0.72f, 0.533f, 0.395f, -0.749f, 0.151f, 0.871f, 0.445f, 0.195f, -0.38f, -0.318f, -0.833f }; int ldb = 2; float B_expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1901) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1901) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { -0.068f, 0.806f, -0.621f, 0.037f, 0.096f, -0.312f, 0.416f, 0.428f }; int lda = 2; float B[] = { 0.481f, 0.192f, -0.954f, -0.958f, -0.015f, -0.203f, -0.352f, 0.08f, -0.662f, 0.681f, -0.571f, 0.146f }; int ldb = 3; float B_expected[] = { 0.612512f, 0.186537f, -1.27483f, -1.08103f, -0.0395775f, -0.248522f, 0.0478574f, -0.671409f, -3.31165f, 0.315466f, -1.07961f, -0.629312f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1902) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1902) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { 0.863f, 0.689f, 0.171f, -0.164f, 0.065f, -0.727f, -0.245f, -0.556f }; int lda = 2; float B[] = { 0.711f, -0.616f, -0.684f, 0.823f, 0.491f, 0.06f, -0.776f, 0.768f, 0.391f, 0.897f, 0.779f, -0.875f }; int ldb = 3; float B_expected[] = { 0.616f, 0.711f, -0.823f, -0.684f, -0.06f, 0.491f, -0.98994f, -0.796557f, -0.644091f, 0.372992f, 0.804736f, 0.685199f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1903) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1903) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { 0.718f, -0.323f, 0.264f, 0.081f, -0.73f, 0.809f, -0.349f, -0.543f }; int lda = 2; float B[] = { 0.862f, 0.676f, -0.085f, 0.204f, 0.063f, -0.124f, 0.162f, 0.754f, -0.978f, -0.097f, 0.986f, 0.943f }; int ldb = 3; float B_expected[] = { -1.32203f, -1.00495f, 1.84655f, 0.329156f, -1.66053f, -2.19061f, 0.420449f, -1.11835f, 1.19333f, 0.945621f, -0.495118f, -2.05487f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1904) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1904) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { -0.515f, -0.166f, -0.364f, 0.24f, 0.056f, 0.023f, 0.05f, 0.853f }; int lda = 2; float B[] = { 0.779f, 0.443f, -0.852f, 0.037f, -0.649f, 0.554f, 0.469f, 0.632f, 0.224f, -0.148f, 0.457f, -0.78f }; int ldb = 3; float B_expected[] = { -0.396821f, 0.767272f, -0.040136f, -0.867948f, -0.587169f, -0.692532f, -0.632f, 0.469f, 0.148f, 0.224f, 0.78f, 0.457f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1905) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1905) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { 0.576f, 0.785f, 0.297f, -0.561f, -0.164f, 0.463f, -0.454f, 0.803f }; int lda = 2; float B[] = { -0.78f, -0.792f, 0.223f, 0.206f, -0.097f, 0.504f, 0.721f, 0.205f, 0.508f, -0.8f, -0.469f, 0.283f }; int ldb = 2; float B_expected[] = { -0.164671f, -1.12975f, 0.510941f, 0.652691f, -0.386549f, 0.358405f, 0.959415f, -0.414847f, 0.906729f, -0.353789f, -0.734462f, 0.786484f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1906) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1906) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { -0.04f, 0.917f, 0.327f, -0.115f, -0.656f, -0.811f, -0.646f, 0.78f }; int lda = 2; float B[] = { 0.131f, 0.677f, -0.431f, -0.652f, -0.415f, 0.094f, -0.253f, 0.496f, 0.797f, 0.166f, 0.737f, -0.685f }; int ldb = 2; float B_expected[] = { -0.677f, 0.131f, 0.101647f, -0.894111f, -0.094f, -0.415f, -0.221099f, -0.601474f, -0.166f, 0.797f, -0.070263f, 1.12521f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1907) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1907) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { 0.769f, -0.384f, -0.522f, -0.086f, -0.129f, -0.574f, 0.56f, -0.809f }; int lda = 2; float B[] = { 0.367f, 0.169f, -0.321f, -0.982f, -0.563f, -0.051f, -0.742f, 0.595f, 0.067f, -0.183f, -0.524f, 0.77f }; int ldb = 2; float B_expected[] = { -0.178752f, 0.912513f, 0.836303f, 0.634945f, 0.817549f, -0.921899f, 0.275884f, -0.926446f, 0.49345f, -0.309856f, -0.00752416f, -0.946584f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1908) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1908) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { 0.758f, 0.228f, 0.263f, 0.731f, 0.171f, 0.051f, 0.968f, 0.731f }; int lda = 2; float B[] = { 0.783f, 0.422f, -0.649f, -0.428f, 0.216f, 0.659f, -0.608f, -0.239f, -0.588f, 0.01f, -0.009f, -0.374f }; int ldb = 2; float B_expected[] = { -1.00898f, 0.640819f, 0.428f, -0.649f, -1.1663f, 0.201195f, 0.239f, -0.608f, -0.114941f, -0.859027f, 0.374f, -0.009f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1909) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1909) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { 0.601f, -0.017f, 0.518f, -0.975f, -0.394f, 0.396f, 0.395f, -0.374f, -0.321f, 0.221f, 0.809f, 0.74f, -0.009f, 0.88f, 0.057f, 0.65f, 0.761f, -0.839f }; int lda = 3; float B[] = { -0.644f, 0.29f, 0.458f, 0.755f, -0.725f, 0.313f, 0.537f, 0.945f, 0.377f, 0.776f, -0.686f, -0.561f }; int ldb = 3; float B_expected[] = { -5.28862f, 4.51343f, 4.18447f, 0.519474f, 0.288441f, -0.634688f, -7.53878f, 2.5597f, 2.79299f, 2.44873f, 0.781327f, -0.0400353f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1910) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1910) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { 0.746f, 0.079f, -0.151f, -0.433f, 0.524f, -0.201f, 0.198f, -0.368f, -0.449f, 0.693f, -0.14f, -0.574f, -0.242f, -0.584f, -0.298f, 0.41f, -0.234f, 0.92f }; int lda = 3; float B[] = { -0.787f, 0.186f, -0.104f, -0.142f, -0.548f, 0.332f, -0.66f, 0.413f, 0.046f, 0.818f, -0.783f, -0.376f }; int ldb = 3; float B_expected[] = { 0.320805f, -0.445083f, 0.410072f, -0.371288f, -0.332f, -0.548f, -0.566249f, -0.287942f, -0.315918f, 0.152204f, 0.376f, -0.783f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1911) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1911) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { -0.623f, -0.229f, 0.653f, -0.19f, 0.42f, -0.181f, -0.061f, 0.963f, 0.422f, 0.989f, 0.919f, -0.352f, -0.849f, 0.052f, 0.02f, -0.771f, -0.38f, -0.566f }; int lda = 3; float B[] = { 0.018f, 0.461f, -0.184f, 0.334f, 0.075f, 0.694f, 0.022f, 0.239f, 0.971f, -0.339f, 0.203f, 0.083f }; int ldb = 3; float B_expected[] = { 0.642534f, -0.265073f, -0.901268f, 0.171623f, 1.29999f, 0.384146f, 0.326529f, -0.155337f, 0.629902f, 0.0571184f, -0.761884f, -0.282697f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1912) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1912) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { 0.35f, 0.154f, 0.397f, -0.709f, 0.587f, -0.895f, -0.848f, 0.933f, -0.887f, -0.393f, 0.824f, 0.182f, 0.159f, 0.303f, -0.011f, -0.363f, 0.875f, 0.991f }; int lda = 3; float B[] = { -0.513f, 0.564f, 0.404f, -0.635f, 0.924f, 0.238f, -0.059f, 0.96f, 0.341f, 0.483f, -0.844f, 0.84f }; int ldb = 3; float B_expected[] = { -0.564f, -0.513f, -0.321901f, 0.495188f, -0.487057f, 1.06506f, -0.96f, -0.059f, -1.35213f, 1.18665f, -1.15086f, -1.02151f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1913) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1913) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { 0.87f, 0.914f, -0.097f, -0.138f, 0.894f, -0.173f, 0.648f, -0.327f, 0.7f, 0.816f, 0.63f, 0.637f, -0.671f, 0.322f, -0.922f, 0.618f, 0.93f, 0.654f }; int lda = 3; float B[] = { -0.347f, -0.273f, -0.384f, 0.02f, 0.392f, -0.206f, 0.347f, 0.269f, 0.016f, 0.797f, 0.699f, -0.966f }; int ldb = 2; float B_expected[] = { -0.443754f, 0.343363f, 0.300599f, -0.548484f, 0.757674f, 0.722159f, 0.224607f, -0.673284f, -0.565323f, 0.414754f, 1.04867f, 0.014162f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1914) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1914) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { 0.965f, -0.191f, 0.489f, 0.84f, 0.011f, -0.951f, 0.067f, -0.21f, -0.911f, 0.767f, -0.162f, 0.274f, -0.502f, -0.445f, 0.492f, 0.023f, -0.818f, 0.859f }; int lda = 3; float B[] = { 0.66f, -0.303f, 0.223f, 0.261f, -0.252f, -0.238f, -0.012f, -0.485f, 0.783f, -0.196f, -0.57f, 0.929f }; int ldb = 2; float B_expected[] = { 0.177032f, 1.21679f, -0.596808f, -0.300881f, 0.159577f, -0.641744f, 0.928958f, 0.289807f, 0.196f, 0.783f, -0.929f, -0.57f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1915) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1915) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { -0.652f, 0.046f, -0.229f, 0.473f, -0.783f, -0.211f, 0.698f, 0.201f, -0.153f, 0.918f, -0.996f, -0.186f, 0.84f, -0.545f, -0.457f, 0.057f, 0.649f, 0.77f }; int lda = 3; float B[] = { -0.227f, 0.14f, 0.165f, -0.945f, -0.212f, -0.522f, 0.908f, 0.722f, -0.208f, 0.969f, 0.721f, -0.816f }; int ldb = 2; float B_expected[] = { 0.189219f, 0.361509f, -1.42444f, -0.353565f, -0.361882f, -0.741783f, 1.80537f, 1.02311f, -1.24128f, 0.407779f, 2.0229f, -0.0912412f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1916) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1916) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 1.0f}; float A[] = { -0.945f, 0.36f, 0.3f, 0.128f, -0.27f, -0.834f, 0.349f, -0.6f, -0.293f, 0.122f, -0.481f, -0.681f, -0.815f, -0.195f, 0.728f, 0.016f, 0.037f, 0.989f }; int lda = 3; float B[] = { -0.97f, 0.784f, 0.488f, 0.39f, -0.482f, -0.518f, -0.797f, 0.271f, 0.257f, 0.637f, 0.118f, -0.993f }; int ldb = 2; float B_expected[] = { -0.784f, -0.97f, -0.39f, 0.488f, 0.62904f, -0.090648f, -0.091536f, -0.89348f, 0.3246f, -0.273981f, 1.04514f, -0.5676f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1917) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1917) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { 0.795f, 0.073f, 0.104f, -0.261f, -0.712f, 0.881f, -0.474f, -0.906f }; int lda = 2; float B[] = { -0.41f, -0.191f, -0.359f, -0.718f, -0.902f, 0.646f, -0.703f, -0.809f, -0.342f, -0.783f, -0.053f, 0.917f }; int ldb = 3; float B_expected[] = { 0.0285203f, -0.0489535f, 0.0936712f, -0.036556f, -0.0702473f, -0.11991f, -0.0924979f, -0.0235243f, -0.0742841f, -0.0262764f, 0.074552f, 0.0886899f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1918) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1918) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { -0.281f, -0.111f, 0.055f, -0.643f, 0.33f, -0.663f, 0.32f, 0.423f }; int lda = 2; float B[] = { 0.103f, 0.357f, -0.591f, 0.833f, -0.906f, -0.192f, -0.391f, -0.622f, -0.345f, -0.58f, -0.132f, -0.874f }; int ldb = 3; float B_expected[] = { -0.0357f, 0.0103f, -0.0833f, -0.0591f, 0.0192f, -0.0906f, 0.0707864f, -0.0167114f, 0.0245802f, 0.0223124f, 0.0280882f, -0.0205626f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1919) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1919) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { 0.311f, -0.648f, -0.732f, 0.825f, 0.152f, -0.529f, -0.353f, 0.568f }; int lda = 2; float B[] = { 0.86f, -0.991f, -0.992f, -0.617f, 0.137f, -0.585f, -0.467f, 0.632f, 0.672f, 0.777f, -0.609f, 0.511f }; int ldb = 3; float B_expected[] = { 0.0795347f, -0.0537122f, -0.0885393f, -0.0194836f, -0.0386006f, -0.0674606f, 0.109194f, -0.0434058f, -0.0240177f, -0.151722f, 0.117678f, -0.0168304f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1920) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1920) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { 0.318f, -0.946f, -0.389f, 0.051f, 0.322f, -0.626f, -0.839f, -0.252f }; int lda = 2; float B[] = { 0.372f, -0.23f, 0.515f, 0.213f, 0.222f, 0.296f, -0.524f, 0.442f, -0.581f, -0.409f, 0.894f, -0.246f }; int ldb = 3; float B_expected[] = { 0.00443f, 0.081742f, -0.0708404f, 0.0446048f, 0.0184432f, -0.0219864f, -0.0442f, -0.0524f, 0.0409f, -0.0581f, 0.0246f, 0.0894f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1921) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1921) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { -0.411f, 0.34f, -0.85f, 0.557f, -0.918f, 0.484f, -0.889f, 0.561f }; int lda = 2; float B[] = { -0.763f, -0.514f, -0.744f, -0.948f, -0.312f, 0.818f, -0.686f, 0.341f, -0.043f, 0.235f, -0.201f, 0.874f }; int ldb = 2; float B_expected[] = { 0.0169288f, 0.17164f, -0.0683166f, -0.0596556f, 0.155447f, -0.0526808f, -0.086698f, 0.101645f, 0.039085f, -0.0218708f, 0.0437248f, -0.0036776f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1922) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1922) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { 0.046f, 0.571f, 0.825f, 0.665f, 0.658f, -0.977f, 0.247f, -0.944f }; int lda = 2; float B[] = { -0.342f, 0.089f, -0.975f, 0.027f, -0.621f, -0.127f, 0.937f, -0.332f, -0.357f, -0.213f, 0.57f, 0.134f }; int ldb = 2; float B_expected[] = { -0.0089f, -0.0342f, -0.0302572f, -0.0663011f, 0.0127f, -0.0621f, -0.0358283f, 0.122154f, 0.0213f, -0.0357f, -0.0622943f, 0.0596805f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1923) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1923) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { 0.655f, 0.051f, -0.864f, 0.04f, -0.45f, 0.276f, -0.365f, 0.766f }; int lda = 2; float B[] = { 0.12f, 0.036f, 0.425f, -0.145f, -0.772f, -0.483f, -0.154f, -0.327f, 0.532f, 0.59f, 0.305f, 0.443f }; int ldb = 2; float B_expected[] = { -0.0745593f, 0.00123365f, -0.0525674f, -0.00611891f, 0.0752311f, -0.0558274f, -0.0001932f, 0.0425972f, -0.0986826f, -0.00963885f, -0.00999124f, -0.0625937f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1924) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1924) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { 0.253f, -0.163f, -0.061f, -0.032f, -0.764f, 0.863f, 0.051f, 0.669f }; int lda = 2; float B[] = { 0.966f, 0.42f, -0.765f, 0.186f, -0.798f, 0.278f, -0.37f, -0.484f, -0.724f, -0.682f, 0.034f, 0.352f }; int ldb = 2; float B_expected[] = { -0.0455826f, 0.0925287f, -0.0186f, -0.0765f, -0.0260316f, -0.0836058f, 0.0484f, -0.037f, 0.0661616f, -0.0710662f, -0.0352f, 0.0034f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1925) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1925) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { 0.017f, -0.631f, -0.052f, 0.296f, -0.486f, -0.279f, -0.378f, 0.997f, 0.533f, 0.87f, 0.808f, 0.007f, 0.185f, -0.263f, -0.757f, -0.856f, 0.575f, -0.81f }; int lda = 3; float B[] = { -0.238f, -0.924f, 0.494f, -0.089f, 0.96f, 0.959f, 0.415f, 0.39f, -0.744f, -0.881f, -0.594f, 0.629f }; int ldb = 3; float B_expected[] = { 0.0798921f, -0.243487f, 0.0441094f, -0.0391653f, 0.0229218f, 0.134667f, 0.192099f, 0.152741f, 0.154557f, 0.0857677f, -0.0854154f, 0.0170199f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1926) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1926) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { -0.977f, -0.949f, 0.192f, 0.803f, -0.964f, -0.162f, 0.799f, -0.081f, -0.055f, 0.014f, 0.99f, 0.804f, 0.913f, -0.898f, -0.057f, 0.51f, 0.453f, 0.622f }; int lda = 3; float B[] = { -0.852f, -0.001f, -0.955f, -0.97f, -0.071f, -0.664f, -0.077f, -0.746f, 0.228f, -0.948f, 0.476f, -0.285f }; int ldb = 3; float B_expected[] = { 0.0840343f, -0.066376f, 0.0369724f, -0.0350854f, 0.0664f, -0.0071f, 0.105481f, 0.0565767f, 0.0283146f, -0.00141f, 0.0285f, 0.0476f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1927) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1927) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { 0.822f, 0.618f, -0.935f, 0.49f, 0.885f, -0.488f, 0.412f, 0.861f, -0.144f, 0.906f, -0.054f, 0.455f, 0.213f, 0.34f, -0.465f, 0.107f, -0.611f, 0.088f }; int lda = 3; float B[] = { 0.476f, -0.297f, -0.966f, -0.038f, -0.346f, -0.81f, -0.749f, -0.065f, -0.225f, -0.663f, 0.073f, -0.379f }; int ldb = 3; float B_expected[] = { -0.00473086f, 0.0543508f, 0.139511f, -0.0231317f, -0.199775f, 0.100154f, 0.0488188f, -0.054416f, -0.0610839f, 0.0929832f, -0.0289368f, -0.113983f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1928) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1928) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { -0.188f, 0.741f, 0.583f, 0.527f, 0.025f, 0.216f, -0.44f, -0.071f, -0.126f, -0.093f, 0.743f, -0.476f, 0.661f, -0.66f, 0.564f, -0.943f, -0.976f, -0.035f }; int lda = 3; float B[] = { -0.648f, -0.367f, -0.402f, -0.309f, 0.412f, 0.531f, -0.248f, 0.181f, 0.507f, 0.502f, -0.593f, 0.404f }; int ldb = 3; float B_expected[] = { 0.0367f, -0.0648f, 0.0424472f, -0.0713177f, -0.21132f, 0.0600063f, -0.0181f, -0.0248f, -0.0599248f, 0.0410731f, 0.0277256f, 0.00238266f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1929) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1929) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { 0.76f, -0.021f, -0.011f, 0.14f, 0.699f, 0.94f, 0.296f, 0.333f, 0.654f, -0.917f, 0.008f, -0.999f, -0.963f, 0.687f, -0.481f, 0.106f, 0.128f, -0.165f }; int lda = 3; float B[] = { -0.742f, 0.774f, -0.335f, -0.99f, 0.799f, 0.901f, 0.753f, -0.085f, -0.042f, -0.591f, 0.202f, 0.515f }; int ldb = 2; float B_expected[] = { 0.313744f, -0.259345f, -0.290807f, 0.212822f, -0.00668591f, -0.0164417f, 0.10903f, 0.137068f, 0.157578f, -0.23594f, -0.0747323f, 0.254147f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1930) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1930) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { 0.582f, -0.175f, -0.48f, 0.567f, -0.571f, 0.062f, 0.038f, -0.625f, 0.737f, 0.799f, -0.569f, -0.932f, 0.522f, -0.763f, 0.156f, -0.524f, 0.138f, 0.007f }; int lda = 3; float B[] = { 0.998f, 0.6f, 0.555f, -0.737f, -0.162f, 0.263f, 0.317f, -0.092f, 0.302f, -0.671f, 0.418f, -0.814f }; int ldb = 2; float B_expected[] = { -0.106233f, 0.0480583f, 0.0514817f, -0.0392668f, -0.0209428f, -0.0560716f, 0.0184048f, -0.0174744f, 0.0671f, 0.0302f, 0.0814f, 0.0418f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1931) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1931) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { 0.964f, 0.509f, 0.48f, -0.833f, 0.867f, 0.51f, -0.643f, 0.115f, -0.594f, -0.409f, -0.174f, 0.527f, 0.676f, 0.431f, 0.261f, -0.239f, 0.816f, -0.231f }; int lda = 3; float B[] = { -0.659f, -0.029f, -0.581f, -0.938f, -0.904f, -0.445f, 0.119f, 0.709f, -0.649f, 0.825f, 0.532f, -0.453f }; int ldb = 2; float B_expected[] = { 0.0305784f, -0.0522153f, 0.100975f, -0.00695419f, -0.055793f, 0.11446f, 0.0887801f, 0.177079f, -0.177262f, 0.0336107f, -0.0717714f, 0.251108f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1932) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1932) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {0.0f, 0.1f}; float A[] = { 0.859f, 0.745f, 0.03f, -0.98f, -0.402f, 0.38f, -0.214f, 0.605f, 0.342f, -0.059f, -0.096f, 0.606f, -0.543f, 0.503f, 0.63f, -0.269f, 0.252f, 0.626f }; int lda = 3; float B[] = { 0.85f, 0.642f, 0.679f, -0.254f, 0.192f, 0.766f, -0.869f, -0.09f, 0.68f, -0.898f, 0.272f, -0.651f }; int ldb = 2; float B_expected[] = { -0.0642f, 0.085f, 0.0254f, 0.0679f, 0.008626f, 0.079566f, 0.07478f, -0.113829f, -0.0156973f, 0.0906397f, 0.125668f, 0.0985369f }; cblas_ctrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrsm(case 1933) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrsm(case 1933) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.189, 0.519, -0.455, -0.444, -0.21, -0.507, -0.591, 0.859 }; int lda = 2; double B[] = { -0.779, -0.484, 0.249, -0.107, -0.755, -0.047, 0.941, 0.675, -0.757, 0.645, -0.649, 0.242 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1934) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1934) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { -0.988, 0.73, 0.279, -0.967, -0.288, -0.095, -0.821, 0.178 }; int lda = 2; double B[] = { 0.702, 0.943, -0.235, -0.565, 0.279, -0.146, 0.816, 0.473, 0.893, 0.877, -0.797, -0.159 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1935) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1935) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.716, -0.549, 0.436, -0.822, -0.029, -0.586, 0.791, -0.159 }; int lda = 2; double B[] = { 0.021, 0.391, 0.296, -0.154, -0.513, 0.738, -0.336, 0.317, 0.502, 0.543, 0.027, 0.802 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1936) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1936) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.715, -0.875, -0.501, 0.425, -0.928, -0.929, -0.542, 0.915 }; int lda = 2; double B[] = { 0.065, 0.679, -0.545, 0.042, 0.199, -0.86, 0.159, 0.943, 0.19, 0.403, 0.994, 0.76 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1937) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1937) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { -0.936, -0.989, -0.57, 0.018, -0.821, 0.516, -0.479, 0.209 }; int lda = 2; double B[] = { 0.722, -0.756, -0.828, -0.191, -0.981, -0.466, 0.347, 0.85, -0.596, -0.826, -0.182, -0.321 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1938) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1938) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.693, 0.976, -0.356, -0.313, 0.926, -0.164, -0.337, 0.056 }; int lda = 2; double B[] = { -0.988, -0.633, -0.745, -0.392, -0.362, -0.708, -0.706, -0.093, -0.177, 0.837, 0.391, -0.853 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1939) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1939) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { -0.483, -0.383, 0.357, 0.889, 0.523, -0.148, -0.592, 0.481 }; int lda = 2; double B[] = { -0.41, 0.994, -0.779, -0.354, 0.571, 0.51, -0.526, 0.934, 0.469, 0.735, -0.47, -0.164 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1940) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1940) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { -0.576, -0.089, 0.953, -0.317, 0.408, 0.618, 0.092, -0.84 }; int lda = 2; double B[] = { 0.141, -0.32, -0.007, -0.682, -0.068, -0.412, 0.675, -0.809, 0.931, -0.257, -0.048, 0.633 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1941) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1941) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.269, 0.567, 0.497, -0.969, 0.957, 0.538, -0.921, 0.639, 0.599, -0.436, -0.045, 0.164, 0.827, 0.489, -0.729, 0.723, -0.01, 0.934 }; int lda = 3; double B[] = { -0.391, 0.434, -0.349, -0.456, -0.541, 0.289, 0.31, 0.447, 0.971, -0.626, -0.77, -0.882 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1942) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1942) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { -0.523, -0.364, -0.492, 0.294, 0.71, -0.401, 0.947, -0.008, 0.235, -0.47, 0.298, -0.603, -0.193, 0.598, 0.122, -0.733, -0.827, 0.491 }; int lda = 3; double B[] = { 0.872, 0.441, 0.518, 0.607, -0.04, -0.976, 0.201, -0.136, -0.958, -0.501, -0.549, -0.4 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1943) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1943) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { -0.177, -0.965, 0.589, -0.236, -0.303, -0.301, 0.982, 0.006, -0.73, 0.241, 0.636, -0.672, 0.886, 0.952, 0.501, -0.803, -0.823, -0.09 }; int lda = 3; double B[] = { -0.475, -0.646, -0.666, -0.886, 0.04, -0.736, -0.592, -0.995, 0.259, 0.701, -0.033, 0.616 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1944) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1944) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { -0.76, -0.29, -0.601, 0.327, 0.383, 0.883, 0.589, -0.708, 0.912, -0.982, 0.629, 0.879, -0.578, -0.814, 0.168, 0.91, 0.328, 0.223 }; int lda = 3; double B[] = { 0.381, 0.829, 0.096, 0.382, 0.664, 0.006, -0.376, -0.338, 0.344, -0.889, -0.175, 0.083 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1945) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1945) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.129, -0.161, 0.102, 0.443, -0.138, 0.677, -0.87, 0.327, 0.917, 0.446, 0.798, -0.91, -0.574, 0.333, -0.626, 0.14, 0.109, 0.161 }; int lda = 3; double B[] = { -0.689, -0.94, -0.814, 0.761, 0.389, 0.03, -0.175, -0.739, -0.904, 0.463, -0.511, 0.615 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1946) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1946) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.062, 0.756, 0.179, 0.359, -0.047, -0.197, 0.678, 0.873, 0.003, -0.996, 0.507, -0.491, -0.726, -0.833, -0.118, -0.71, 0.714, 0.638 }; int lda = 3; double B[] = { -0.614, 0.193, 0.881, 0.538, 0.183, -0.034, 0.099, -0.154, -0.121, 0.842, -0.182, -0.229 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1947) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1947) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { -0.874, 0.171, 0.637, 0.554, 0.852, -0.203, 0.455, 0.619, -0.128, 0.759, 0.342, 0.372, 0.669, -0.537, -0.76, -0.348, -0.714, 0.573 }; int lda = 3; double B[] = { -0.434, 0.921, -0.949, 0.282, -0.665, 0.223, -0.633, 0.921, -0.73, 0.457, -0.021, -0.844 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1948) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1948) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { -0.189, -0.931, 0.414, 0.288, -0.245, 0.252, -0.465, -0.073, 0.327, 0.176, -0.067, 0.1, 0.124, 0.885, -0.731, -0.303, 0.954, -0.763 }; int lda = 3; double B[] = { 0.818, 0.948, -0.749, 0.808, -0.959, -0.797, 0.727, 0.701, 0.244, -0.801, 0.354, -0.781 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1949) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1949) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { -0.65, -0.279, -0.543, -0.097, -0.641, 0.984, 0.507, -0.809 }; int lda = 2; double B[] = { -0.176, 0.87, -0.681, 0.409, -0.878, 0.522, 0.348, 0.679, -0.975, -0.815, -0.608, 0.86 }; int ldb = 3; double B_expected[] = { 0.256485077177, 1.22837025149, -0.656630178218, 0.911076645728, -0.849544610576, 1.16772760977, -0.193804546743, -0.283833884163, -0.811035478317, 1.16349859839, 0.292241175557, -0.141827660937 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1950) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1950) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { 0.23, -0.597, 0.068, 0.945, 0.045, -0.436, 0.113, 0.035 }; int lda = 2; double B[] = { -0.744, -0.465, -0.742, 0.996, -0.835, 0.712, -0.968, 0.053, -0.813, 0.36, 0.572, -0.489 }; int ldb = 3; double B_expected[] = { 0.744, 0.465, 0.742, -0.996, 0.835, -0.712, 1.356833, -0.7877, -0.178676, -0.993462, -1.30162, -0.251659 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1951) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1951) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { -0.689, -0.396, 0.415, -0.567, 0.001, 0.513, 0.837, 0.045 }; int lda = 2; double B[] = { -0.012, 0.2, 0.22, 0.81, -0.586, -0.198, 0.16, -0.958, -0.125, 0.833, 0.344, 0.213 }; int ldb = 3; double B_expected[] = { -0.573154258944, 0.525131422048, 1.33801555643, 0.47629585874, -0.770607912552, -0.160087833623, -0.129249609305, 1.15151282248, 0.0955601670381, -1.00035867087, -0.423449388979, -0.231714190557 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1952) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1952) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { 0.102, 0.86, -0.067, 0.12, 0.92, 0.441, 0.367, -0.104 }; int lda = 2; double B[] = { 0.386, 0.59, 0.222, 0.824, 0.091, 0.486, 0.43, 0.766, 0.576, 0.042, 0.013, -0.008 }; int ldb = 3; double B_expected[] = { -0.328206, 0.30435, 0.289398, -0.531344, -0.075512, -0.487627, -0.43, -0.766, -0.576, -0.042, -0.013, 0.008 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1953) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1953) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { -0.087, 0.925, -0.315, 0.251, 0.7, -0.223, 0.448, 0.373 }; int lda = 2; double B[] = { -0.333, -0.495, 0.995, -0.229, 0.425, -0.269, -0.756, -0.783, -0.214, 0.582, -0.351, -0.095 }; int ldb = 2; double B_expected[] = { 0.496880191475, -0.406733596387, -0.965186357327, 2.19761676664, 0.331095906598, 0.428318547163, 1.17655095681, 0.263745306399, -0.645240814927, -0.170663836866, 1.18578937767, -0.829739852214 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1954) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1954) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { 0.717, 0.572, -0.304, 0.878, 0.625, -0.615, -0.565, -0.643 }; int lda = 2; double B[] = { -0.383, -0.669, -0.043, -0.09, -0.999, -0.427, 0.834, 0.539, -0.973, -0.481, 0.071, -0.71 }; int ldb = 2; double B_expected[] = { 0.383, 0.669, -0.60781, -0.09258, 0.999, 0.427, -1.72098, -0.19149, 0.973, 0.481, -0.97494, 1.00777 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1955) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1955) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { 0.143, -0.022, 0.487, 0.444, 0.138, -0.871, 0.572, -0.093 }; int lda = 2; double B[] = { -0.073, -0.9, -0.688, 0.436, -0.213, -0.733, 0.809, -0.618, 0.696, 0.259, 0.494, 0.162 }; int ldb = 2; double B_expected[] = { -6.10129128737, 3.22195959384, 1.29255909931, -0.552083922664, 8.05253150033, 8.35261031753, -1.54904967648, 0.828563601552, -3.66721033067, 1.50334288416, -0.796532800529, -0.412722990296 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1956) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1956) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { 0.544, 0.918, -0.524, 0.547, -0.839, 0.4, -0.548, 0.49 }; int lda = 2; double B[] = { 0.475, -0.594, 0.252, -0.717, 0.867, 0.07, 0.264, 0.538, 0.028, 0.482, -0.59, -0.533 }; int ldb = 2; double B_expected[] = { -0.214849, 1.107552, -0.252, 0.717, -1.299622, -0.207504, -0.264, -0.538, 0.572711, -0.525438, 0.59, 0.533 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1957) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1957) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { -0.038, -0.116, -0.476, -0.818, 0.961, 0.271, -0.593, 0.548, -0.86, 0.429, -0.396, -0.559, 0.766, -0.326, -0.335, 0.633, -0.532, 0.317 }; int lda = 3; double B[] = { -0.459, 0.904, 0.887, 0.07, -0.497, -0.48, -0.313, 0.864, -0.029, -0.754, -0.566, -0.108 }; int ldb = 3; double B_expected[] = { -4.58258258525, -3.00717937382, 0.0668903493808, 0.800759804641, -0.292673260098, -1.0766492922, -0.911020412982, 7.68812066826, -0.0359723342287, -0.157963939743, -0.695872108638, -0.617653117365 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1958) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1958) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { 0.886, 0.945, 0.065, 0.882, -0.46, -0.095, 0.823, -0.245, -0.825, 0.904, -0.214, -0.268, -0.935, -0.017, 0.902, 0.561, 0.954, -0.665 }; int lda = 3; double B[] = { 0.076, -0.043, 0.873, -0.831, -0.329, -0.896, -0.174, 0.653, 0.489, 0.25, -0.896, 0.609 }; int ldb = 3; double B_expected[] = { 1.037824842, 1.333886264, -1.042722, 1.110916, 0.329, 0.896, 0.529073224, -0.720680322, -0.134044, -0.140198, 0.896, -0.609 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1959) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1959) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { -0.691, -0.056, -0.339, -0.483, -0.975, -0.052, -0.198, 0.576, -0.075, 0.718, -0.321, 0.728, -0.124, 0.774, 0.685, -0.112, 0.178, 0.275 }; int lda = 3; double B[] = { -0.062, -0.391, 0.326, 0.42, -0.203, 0.45, 0.338, 0.991, -0.47, -0.363, 0.766, -0.961 }; int ldb = 3; double B_expected[] = { -0.134697690677, -0.554930433172, -0.526377715671, 0.991348747823, -2.94323584375, -1.92805449726, 0.601422754501, 1.38541291715, 0.201151053335, -1.95287726277, 5.96201044303, 2.1797020274 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1960) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1960) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { -0.318, 0.067, -0.097, 0.359, -0.688, 0.307, -0.63, -0.616, 0.193, 0.817, -0.792, -0.117, -0.501, -0.929, -0.595, -0.144, 0.453, 0.658 }; int lda = 3; double B[] = { -0.249, -0.206, 0.424, -0.681, -0.464, 0.21, 0.541, 0.082, 0.803, -0.461, -0.638, 0.358 }; int ldb = 3; double B_expected[] = { 0.249, 0.206, -0.394026, 0.964164, 0.024089914, 0.641464836, -0.541, -0.082, -1.093318, 0.076084, -0.218343306, -1.013838812 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1961) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1961) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { 0.691, 0.808, -0.178, 0.489, 0.159, -0.646, -0.692, -0.968, -0.146, -0.281, -0.385, 0.773, 0.704, 0.782, 0.551, -0.727, 0.669, 0.858 }; int lda = 3; double B[] = { -0.657, -0.69, -0.051, 0.28, -0.846, 0.304, 0.052, 0.543, 0.613, -0.98, 0.983, -0.484 }; int ldb = 2; double B_expected[] = { 2.42007211075, -0.148130095453, 4.93683906416, -0.804178199722, 1.76852672271, 0.633536755193, 4.41638755104, -0.0400468884046, 0.363887727302, 0.998182854971, -0.204739276437, 0.986048279795 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1962) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1962) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { -0.244, -0.925, -0.539, 0.422, 0.285, -0.954, -0.347, -0.255, -0.616, -0.979, 0.631, -0.864, -0.053, -0.715, -0.749, -0.973, -0.409, -0.247 }; int lda = 3; double B[] = { 0.922, -0.728, 0.588, -0.715, -0.92, -0.065, -0.583, 0.178, 0.996, 0.215, -0.614, -0.443 }; int ldb = 2; double B_expected[] = { -0.416484258, -0.267425916, -0.851455486, 1.594186448, 0.383191, -1.065143, 0.611847, 0.751229, -0.996, -0.215, 0.614, 0.443 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1963) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1963) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { 0.992, 0.172, -0.646, 0.067, -0.823, -0.013, -0.55, -0.438, -0.44, -0.302, 0.99, -0.373, 0.513, -0.106, -0.591, -0.504, 0.929, -0.318 }; int lda = 3; double B[] = { 0.467, 0.227, 0.988, -0.709, -0.272, -0.601, 0.719, -0.133, 0.203, 0.937, -0.382, -0.334 }; int ldb = 2; double B_expected[] = { -0.495544804508, -0.142909570186, -0.846593689328, 0.861506163875, -0.485462670276, -0.898345893497, 1.07522946065, -2.43403194583, 0.315527055267, -0.271726799352, -1.73234815305, 3.5434654009 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1964) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1964) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {-1, 0}; double A[] = { -0.692, -0.245, -0.874, 0.77, 0.07, 0.01, 0.018, -0.42, -0.405, -0.387, 0.888, -0.912, -0.81, 0.314, 0.66, -0.895, -0.556, 0.157 }; int lda = 3; double B[] = { -0.801, 0.542, 0.699, 0.574, -0.56, 0.043, 0.742, -0.331, -0.614, 0.776, -0.335, 0.131 }; int ldb = 2; double B_expected[] = { 0.801, -0.542, -0.699, -0.574, 0.842734, -1.133478, -1.794906, 0.367554, 0.837894144, 1.029031872, 1.63685728, -2.047172224 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1965) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1965) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.035, -0.456, 0.152, 0.976, 0.687, -0.527, -0.571, 0.832 }; int lda = 2; double B[] = { -0.868, 0.033, -0.131, -0.936, 0.993, 0.104, -0.684, 0.851, 0.523, 0.836, -0.205, 0.319 }; int ldb = 3; double B_expected[] = { -0.188683836853, 0.0217191541444, -0.044222393276, -0.201868895253, 0.218228063549, 0.00605705652583, 0.252579293874, 0.0800538768738, -0.099911150161, 0.0758372341381, -0.116723296822, -0.16542230206 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1966) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1966) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.481, -0.442, 0.69, 0.415, 0.983, -0.466, 0.503, -0.147 }; int lda = 2; double B[] = { -0.287, -0.777, -0.187, 0.061, 0.631, 0.797, 0.833, -0.49, -0.188, 0.386, -0.904, -0.793 }; int ldb = 3; double B_expected[] = { 0.0777, -0.0287, -0.0061, -0.0187, -0.0797, 0.0631, 0.0072975, 0.1353485, -0.0266305, -0.0084285, 0.1081065, -0.1670145 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1967) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1967) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.286, 0.025, -0.111, 0.724, -0.973, -0.071, 0.527, -0.334 }; int lda = 2; double B[] = { -0.381, -0.131, 0.33, 0.09, 0.35, 0.062, -0.874, 0.252, 0.924, 0.251, 0.559, -0.619 }; int ldb = 3; double B_expected[] = { 0.38447496828, 0.401499279514, -0.210140860451, -0.584596680596, -0.443343106286, -0.127686958741, -0.109102585509, -0.096697792106, 0.045298174859, 0.146623168116, 0.131759250934, 0.0225662432408 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1968) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1968) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.862, -0.003, 0.975, 0.364, -0.996, 0.909, -0.316, -0.816 }; int lda = 2; double B[] = { 0.167, 0.961, 0.116, 0.675, 0.086, 0.259, -0.483, 0.898, 0.434, 0.723, 0.505, 0.042 }; int ldb = 3; double B_expected[] = { -0.1416361, -0.113035, -0.1789614, -0.0108943, -0.0759877, 0.0550802, -0.0898, -0.0483, -0.0723, 0.0434, -0.0042, 0.0505 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1969) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1969) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.826, -0.025, 0.638, -0.183, -0.184, 0.806, 0.131, 0.764 }; int lda = 2; double B[] = { -0.038, 0.14, -0.31, -0.494, -0.974, -0.396, -0.217, 0.519, -0.656, -0.737, 0.383, -0.03 }; int ldb = 2; double B_expected[] = { 0.0167945280502, 0.00510879322186, 0.0315562985639, 0.0579039669012, -0.0514636821443, 0.116360058046, 0.0192833017545, -0.206389577002, -0.0915450409357, 0.0766481525141, 0.0107002286761, -0.100817314679 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1970) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1970) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { 0.282, -0.433, -0.793, -0.008, -0.999, 0.377, -0.979, 0.421 }; int lda = 2; double B[] = { 0.622, -0.722, 0.605, -0.877, 0.935, -0.906, 0.719, -0.607, 0.022, -0.326, -0.905, 0.323 }; int ldb = 2; double B_expected[] = { 0.0722, 0.0622, 0.1363784, 0.1498572, 0.0906, 0.0935, 0.1159599, 0.1994627, 0.0326, 0.0022, -0.000562, -0.076012 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1971) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1971) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { 0.934, 0.007, -0.958, 0.434, 0.263, 0.776, 0.097, 0.83 }; int lda = 2; double B[] = { -0.405, 0.251, 0.13, 0.388, -0.664, -0.732, -0.779, -0.5, 0.775, -0.299, -0.45, 0.923 }; int ldb = 2; double B_expected[] = { -0.026920633021, -0.0986978374343, -0.020841203536, -0.0443113292253, 0.157683298836, 0.0261984465224, 0.099536165222, 0.0486084240644, 0.127725373746, -0.0161073528761, 0.0406652355905, -0.115957262473 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1972) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1972) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.169, -0.768, -0.529, 0.236, -0.506, 0.691, -0.786, -0.36 }; int lda = 2; double B[] = { 0.289, -0.985, 0.931, 0.652, -0.861, -0.51, -0.753, -0.542, -0.822, 0.174, 0.799, 0.8 }; int ldb = 2; double B_expected[] = { 0.0420376, 0.0627627, -0.0652, 0.0931, 0.0974426, -0.1131425, 0.0542, -0.0753, -0.0785764, -0.0588129, -0.08, 0.0799 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1973) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1973) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { 0.834, 0.53, 0.278, 0.293, 0.66, 0.497, -0.664, 0.429, -0.294, -0.661, 0.52, -0.247, 0.392, -0.227, 0.209, -0.902, 0.843, 0.37 }; int lda = 3; double B[] = { -0.738, 0.166, 0.721, -0.541, -0.963, -0.832, -0.376, -0.718, 0.765, -0.547, 0.451, -0.581 }; int ldb = 3; double B_expected[] = { -0.115188282202, -0.000411685478887, 0.105497263516, -0.0083759187965, 0.124793492766, -0.0594619308146, 0.0499107469, -0.0152598288542, 0.00927285309719, -0.0831454824908, 0.0380996260983, 0.0702216627003 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1974) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1974) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { 0.531, -0.691, 0.801, 0.437, 0.402, 0.788, 0.824, 0.599, -0.362, 0.076, 0.192, 0.229, -0.259, -0.279, 0.79, -0.797, 0.728, 0.397 }; int lda = 3; double B[] = { -0.049, 0.642, 0.36, 0.428, 0.523, -0.612, 0.459, -0.664, 0.328, 0.513, -0.225, 0.273 }; int ldb = 3; double B_expected[] = { -0.0941948813, -0.0387898759, -0.0665271, 0.0399732, 0.0612, 0.0523, 0.1143807788, -0.0091687866, -0.0409059, 0.0308683, -0.0273, -0.0225 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1975) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1975) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { 0.169, -0.092, -0.13, 0.001, 0.573, 0.256, 0.632, -0.09, -0.942, 0.948, 0.595, -0.337, 0.01, -0.786, 0.944, 0.906, -0.832, -0.566 }; int lda = 3; double B[] = { -0.461, -0.112, 0.674, -0.268, -0.286, -0.657, 0.329, 0.91, 0.73, 0.488, -0.363, -0.01 }; int ldb = 3; double B_expected[] = { -0.0634274139095, -0.238252532073, -0.142693434208, -0.0938542376785, -0.0907100858097, -0.0412217911039, -0.333617825793, 0.376288993923, -0.0317846476268, 0.175075250306, -0.125200687799, -0.118937960805 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1976) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1976) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.53, 0.141, 0.235, 0.474, -0.964, -0.441, 0.197, -0.703, 0.942, 0.98, 0.741, 0.499, -0.738, 0.234, -0.27, -0.158, 0.804, -0.878 }; int lda = 3; double B[] = { 0.46, -0.508, 0.918, -0.516, 0.012, -0.451, -0.676, 0.551, -0.38, 0.053, 0.645, 0.785 }; int ldb = 3; double B_expected[] = { 0.0508, 0.046, 0.0739304, 0.0470256, 0.0992176528, 0.0480511088, -0.0551, -0.0676, -0.0419681, 0.0140525, -0.112456492, 0.0121429348 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1977) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1977) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { 0.286, 0.548, 0.637, -0.856, -0.739, 0.307, -0.049, -0.342, -0.39, 0.618, -0.757, -0.453, -0.533, 0.131, 0.431, 0.087, -0.776, -0.439 }; int lda = 3; double B[] = { 0.968, 0.032, 0.013, 0.684, -0.485, 0.613, 0.316, 0.812, -0.459, 0.34, -0.268, -0.565 }; int ldb = 2; double B_expected[] = { -0.126374952238, 0.0484874156039, -0.0755178690743, -0.200973083054, 0.138328459491, -0.0263170966956, 0.00492064241274, -0.0787874374991, 0.00784239970713, 0.0635860998343, -0.0699577429529, -0.00504052726328 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1978) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1978) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.911, 0.645, -0.525, 0.045, -0.654, -0.896, -0.39, 0.419, 0.867, 0.561, -0.842, -0.835, -0.249, -0.384, 0.575, -0.41, 0.105, -0.282 }; int lda = 3; double B[] = { 0.777, 0.361, 0.535, 0.441, 0.508, 0.439, -0.347, 0.131, -0.874, 0.646, 0.917, 0.746 }; int ldb = 2; double B_expected[] = { -0.155796389, 0.112639999, 0.0226368685, 0.111048763, -0.042589, 0.127541, 0.067392, -0.0568415, -0.0646, -0.0874, -0.0746, 0.0917 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1979) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1979) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.519, 0.318, -0.318, 0.73, 0.721, 0.302, -0.604, 0.721, 0.387, 0.673, -0.549, -0.136, 0.101, 0.676, -0.064, -0.659, -0.141, 0.991 }; int lda = 3; double B[] = { -0.856, -0.128, 0.721, -0.511, 0.175, -0.341, 0.832, -0.662, 0.652, -0.939, -0.775, -0.899 }; int ldb = 2; double B_expected[] = { 0.055542329649, 0.130900846188, -0.133470180979, -0.0571415846795, -0.13942012508, 0.0150972236507, 0.0782230770838, 0.0522994181773, -0.00621452256957, -0.0615971232698, 0.0222285648871, 0.258910370231 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1980) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1980) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.092, -0.392, 0.108, -0.918, 0.505, -0.974, 0.213, 0.97, -0.465, 0.604, -0.737, -0.578, -0.051, -0.43, 0.066, -0.934, -0.347, 0.157 }; int lda = 3; double B[] = { -0.489, 0.673, -0.232, 0.668, -0.396, -0.569, 0.763, 0.581, 0.117, -0.249, 0.272, -0.832 }; int ldb = 2; double B_expected[] = { -0.0673, -0.0489, -0.0668, -0.0232, 0.0192782, 0.0274626, -0.0721832, 0.140128, 0.0413393162, 0.1110418366, 0.1221321656, 0.2489754256 }; cblas_ztrsm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrsm(case 1981) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrsm(case 1981) imag"); }; }; }; } gsl/cblas/zher2k.c0000644000175000017500000000072013536674414012366 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_zher2k (const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const double beta, void *C, const int ldc) { #define BASE double #include "source_her2k.h" #undef BASE } gsl/cblas/source_trsm_r.h0000644000175000017500000001447613536674414014071 0ustar eddedd/* blas/source_trsm_r.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j, k; INDEX n1, n2; const int nonunit = (Diag == CblasNonUnit); int side, uplo, trans; CHECK_ARGS12(TRSM,Order,Side,Uplo,TransA,Diag,M,N,alpha,A,lda,B,ldb); if (Order == CblasRowMajor) { n1 = M; n2 = N; side = Side; uplo = Uplo; trans = (TransA == CblasConjTrans) ? CblasTrans : TransA; } else { n1 = N; n2 = M; side = (Side == CblasLeft) ? CblasRight : CblasLeft; uplo = (Uplo == CblasUpper) ? CblasLower : CblasUpper; trans = (TransA == CblasConjTrans) ? CblasTrans : TransA; } if (side == CblasLeft && uplo == CblasUpper && trans == CblasNoTrans) { /* form B := alpha * inv(TriU(A)) *B */ if (alpha != 1.0) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { B[ldb * i + j] *= alpha; } } } for (i = n1; i > 0 && i--;) { if (nonunit) { BASE Aii = A[lda * i + i]; for (j = 0; j < n2; j++) { B[ldb * i + j] /= Aii; } } for (k = 0; k < i; k++) { const BASE Aki = A[k * lda + i]; for (j = 0; j < n2; j++) { B[ldb * k + j] -= Aki * B[ldb * i + j]; } } } } else if (side == CblasLeft && uplo == CblasUpper && trans == CblasTrans) { /* form B := alpha * inv(TriU(A))' *B */ if (alpha != 1.0) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { B[ldb * i + j] *= alpha; } } } for (i = 0; i < n1; i++) { if (nonunit) { BASE Aii = A[lda * i + i]; for (j = 0; j < n2; j++) { B[ldb * i + j] /= Aii; } } for (k = i + 1; k < n1; k++) { const BASE Aik = A[i * lda + k]; for (j = 0; j < n2; j++) { B[ldb * k + j] -= Aik * B[ldb * i + j]; } } } } else if (side == CblasLeft && uplo == CblasLower && trans == CblasNoTrans) { /* form B := alpha * inv(TriL(A))*B */ if (alpha != 1.0) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { B[ldb * i + j] *= alpha; } } } for (i = 0; i < n1; i++) { if (nonunit) { BASE Aii = A[lda * i + i]; for (j = 0; j < n2; j++) { B[ldb * i + j] /= Aii; } } for (k = i + 1; k < n1; k++) { const BASE Aki = A[k * lda + i]; for (j = 0; j < n2; j++) { B[ldb * k + j] -= Aki * B[ldb * i + j]; } } } } else if (side == CblasLeft && uplo == CblasLower && trans == CblasTrans) { /* form B := alpha * TriL(A)' *B */ if (alpha != 1.0) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { B[ldb * i + j] *= alpha; } } } for (i = n1; i > 0 && i--;) { if (nonunit) { BASE Aii = A[lda * i + i]; for (j = 0; j < n2; j++) { B[ldb * i + j] /= Aii; } } for (k = 0; k < i; k++) { const BASE Aik = A[i * lda + k]; for (j = 0; j < n2; j++) { B[ldb * k + j] -= Aik * B[ldb * i + j]; } } } } else if (side == CblasRight && uplo == CblasUpper && trans == CblasNoTrans) { /* form B := alpha * B * inv(TriU(A)) */ if (alpha != 1.0) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { B[ldb * i + j] *= alpha; } } } for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { if (nonunit) { BASE Ajj = A[lda * j + j]; B[ldb * i + j] /= Ajj; } { BASE Bij = B[ldb * i + j]; for (k = j + 1; k < n2; k++) { B[ldb * i + k] -= A[j * lda + k] * Bij; } } } } } else if (side == CblasRight && uplo == CblasUpper && trans == CblasTrans) { /* form B := alpha * B * inv(TriU(A))' */ if (alpha != 1.0) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { B[ldb * i + j] *= alpha; } } } for (i = 0; i < n1; i++) { for (j = n2; j > 0 && j--;) { if (nonunit) { BASE Ajj = A[lda * j + j]; B[ldb * i + j] /= Ajj; } { BASE Bij = B[ldb * i + j]; for (k = 0; k < j; k++) { B[ldb * i + k] -= A[k * lda + j] * Bij; } } } } } else if (side == CblasRight && uplo == CblasLower && trans == CblasNoTrans) { /* form B := alpha * B * inv(TriL(A)) */ if (alpha != 1.0) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { B[ldb * i + j] *= alpha; } } } for (i = 0; i < n1; i++) { for (j = n2; j > 0 && j--;) { if (nonunit) { BASE Ajj = A[lda * j + j]; B[ldb * i + j] /= Ajj; } { BASE Bij = B[ldb * i + j]; for (k = 0; k < j; k++) { B[ldb * i + k] -= A[j * lda + k] * Bij; } } } } } else if (side == CblasRight && uplo == CblasLower && trans == CblasTrans) { /* form B := alpha * B * inv(TriL(A))' */ if (alpha != 1.0) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { B[ldb * i + j] *= alpha; } } } for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { if (nonunit) { BASE Ajj = A[lda * j + j]; B[ldb * i + j] /= Ajj; } { BASE Bij = B[ldb * i + j]; for (k = j + 1; k < n2; k++) { B[ldb * i + k] -= A[k * lda + j] * Bij; } } } } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/test_rot.c0000644000175000017500000003117213536674414013031 0ustar eddedd#include #include #include #include #include "tests.h" void test_rot (void) { const double flteps = 1e-4, dbleps = 1e-6; { int N = 1; float c = 0.0f; float s = 0.0f; float X[] = { -0.314f }; int incX = 1; float Y[] = { -0.406f }; int incY = -1; float x_expected[] = { 0.0f }; float y_expected[] = { 0.0f }; cblas_srot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srot(case 558)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srot(case 559)"); } }; }; { int N = 1; float c = 0.866025403784f; float s = 0.5f; float X[] = { -0.314f }; int incX = 1; float Y[] = { -0.406f }; int incY = -1; float x_expected[] = { -0.474932f }; float y_expected[] = { -0.194606f }; cblas_srot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srot(case 560)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srot(case 561)"); } }; }; { int N = 1; float c = 0.0f; float s = -1.0f; float X[] = { -0.314f }; int incX = 1; float Y[] = { -0.406f }; int incY = -1; float x_expected[] = { 0.406f }; float y_expected[] = { -0.314f }; cblas_srot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srot(case 562)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srot(case 563)"); } }; }; { int N = 1; float c = -1.0f; float s = 0.0f; float X[] = { -0.314f }; int incX = 1; float Y[] = { -0.406f }; int incY = -1; float x_expected[] = { 0.314f }; float y_expected[] = { 0.406f }; cblas_srot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srot(case 564)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srot(case 565)"); } }; }; { int N = 1; double c = 0; double s = 0; double X[] = { -0.493 }; int incX = 1; double Y[] = { -0.014 }; int incY = -1; double x_expected[] = { 0.0 }; double y_expected[] = { 0.0 }; cblas_drot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drot(case 566)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drot(case 567)"); } }; }; { int N = 1; double c = 0.866025403784; double s = 0.5; double X[] = { -0.493 }; int incX = 1; double Y[] = { -0.014 }; int incY = -1; double x_expected[] = { -0.433950524066 }; double y_expected[] = { 0.234375644347 }; cblas_drot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drot(case 568)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drot(case 569)"); } }; }; { int N = 1; double c = 0; double s = -1; double X[] = { -0.493 }; int incX = 1; double Y[] = { -0.014 }; int incY = -1; double x_expected[] = { 0.014 }; double y_expected[] = { -0.493 }; cblas_drot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drot(case 570)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drot(case 571)"); } }; }; { int N = 1; double c = -1; double s = 0; double X[] = { -0.493 }; int incX = 1; double Y[] = { -0.014 }; int incY = -1; double x_expected[] = { 0.493 }; double y_expected[] = { 0.014 }; cblas_drot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drot(case 572)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drot(case 573)"); } }; }; { int N = 1; float c = 0.0f; float s = 0.0f; float X[] = { -0.808f }; int incX = -1; float Y[] = { -0.511f }; int incY = 1; float x_expected[] = { 0.0f }; float y_expected[] = { 0.0f }; cblas_srot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srot(case 574)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srot(case 575)"); } }; }; { int N = 1; float c = 0.866025403784f; float s = 0.5f; float X[] = { -0.808f }; int incX = -1; float Y[] = { -0.511f }; int incY = 1; float x_expected[] = { -0.955249f }; float y_expected[] = { -0.038539f }; cblas_srot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srot(case 576)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srot(case 577)"); } }; }; { int N = 1; float c = 0.0f; float s = -1.0f; float X[] = { -0.808f }; int incX = -1; float Y[] = { -0.511f }; int incY = 1; float x_expected[] = { 0.511f }; float y_expected[] = { -0.808f }; cblas_srot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srot(case 578)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srot(case 579)"); } }; }; { int N = 1; float c = -1.0f; float s = 0.0f; float X[] = { -0.808f }; int incX = -1; float Y[] = { -0.511f }; int incY = 1; float x_expected[] = { 0.808f }; float y_expected[] = { 0.511f }; cblas_srot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srot(case 580)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srot(case 581)"); } }; }; { int N = 1; double c = 0; double s = 0; double X[] = { -0.176 }; int incX = -1; double Y[] = { -0.165 }; int incY = 1; double x_expected[] = { 0.0 }; double y_expected[] = { 0.0 }; cblas_drot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drot(case 582)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drot(case 583)"); } }; }; { int N = 1; double c = 0.866025403784; double s = 0.5; double X[] = { -0.176 }; int incX = -1; double Y[] = { -0.165 }; int incY = 1; double x_expected[] = { -0.234920471066 }; double y_expected[] = { -0.0548941916244 }; cblas_drot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drot(case 584)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drot(case 585)"); } }; }; { int N = 1; double c = 0; double s = -1; double X[] = { -0.176 }; int incX = -1; double Y[] = { -0.165 }; int incY = 1; double x_expected[] = { 0.165 }; double y_expected[] = { -0.176 }; cblas_drot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drot(case 586)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drot(case 587)"); } }; }; { int N = 1; double c = -1; double s = 0; double X[] = { -0.176 }; int incX = -1; double Y[] = { -0.165 }; int incY = 1; double x_expected[] = { 0.176 }; double y_expected[] = { 0.165 }; cblas_drot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drot(case 588)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drot(case 589)"); } }; }; { int N = 1; float c = 0.0f; float s = 0.0f; float X[] = { -0.201f }; int incX = -1; float Y[] = { 0.087f }; int incY = -1; float x_expected[] = { 0.0f }; float y_expected[] = { 0.0f }; cblas_srot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srot(case 590)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srot(case 591)"); } }; }; { int N = 1; float c = 0.866025403784f; float s = 0.5f; float X[] = { -0.201f }; int incX = -1; float Y[] = { 0.087f }; int incY = -1; float x_expected[] = { -0.130571f }; float y_expected[] = { 0.175844f }; cblas_srot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srot(case 592)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srot(case 593)"); } }; }; { int N = 1; float c = 0.0f; float s = -1.0f; float X[] = { -0.201f }; int incX = -1; float Y[] = { 0.087f }; int incY = -1; float x_expected[] = { -0.087f }; float y_expected[] = { -0.201f }; cblas_srot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srot(case 594)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srot(case 595)"); } }; }; { int N = 1; float c = -1.0f; float s = 0.0f; float X[] = { -0.201f }; int incX = -1; float Y[] = { 0.087f }; int incY = -1; float x_expected[] = { 0.201f }; float y_expected[] = { -0.087f }; cblas_srot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srot(case 596)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srot(case 597)"); } }; }; { int N = 1; double c = 0; double s = 0; double X[] = { -0.464 }; int incX = -1; double Y[] = { 0.7 }; int incY = -1; double x_expected[] = { 0.0 }; double y_expected[] = { 0.0 }; cblas_drot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drot(case 598)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drot(case 599)"); } }; }; { int N = 1; double c = 0.866025403784; double s = 0.5; double X[] = { -0.464 }; int incX = -1; double Y[] = { 0.7 }; int incY = -1; double x_expected[] = { -0.051835787356 }; double y_expected[] = { 0.838217782649 }; cblas_drot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drot(case 600)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drot(case 601)"); } }; }; { int N = 1; double c = 0; double s = -1; double X[] = { -0.464 }; int incX = -1; double Y[] = { 0.7 }; int incY = -1; double x_expected[] = { -0.7 }; double y_expected[] = { -0.464 }; cblas_drot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drot(case 602)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drot(case 603)"); } }; }; { int N = 1; double c = -1; double s = 0; double X[] = { -0.464 }; int incX = -1; double Y[] = { 0.7 }; int incY = -1; double x_expected[] = { 0.464 }; double y_expected[] = { -0.7 }; cblas_drot(N, X, incX, Y, incY, c, s); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drot(case 604)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drot(case 605)"); } }; }; } gsl/cblas/test_axpy.c0000644000175000017500000001170113536674414013202 0ustar eddedd#include #include #include #include #include "tests.h" void test_axpy (void) { const double flteps = 1e-4, dbleps = 1e-6; { int N = 1; float alpha = 0.0f; float X[] = { 0.018f }; int incX = 1; float Y[] = { -0.417f }; int incY = -1; float expected[] = { -0.417f }; cblas_saxpy(N, alpha, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected[i], flteps, "saxpy(case 64)"); } }; }; { int N = 1; double alpha = 0; double X[] = { 0.071 }; int incX = 1; double Y[] = { -0.888 }; int incY = -1; double expected[] = { -0.888 }; cblas_daxpy(N, alpha, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected[i], dbleps, "daxpy(case 65)"); } }; }; { int N = 1; float alpha[2] = {1.0f, 0.0f}; float X[] = { -0.542f, -0.362f }; int incX = 1; float Y[] = { -0.459f, -0.433f }; int incY = -1; float expected[] = { -1.001f, -0.795f }; cblas_caxpy(N, alpha, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected[2*i], flteps, "caxpy(case 66) real"); gsl_test_rel(Y[2*i+1], expected[2*i+1], flteps, "caxpy(case 66) imag"); }; }; }; { int N = 1; double alpha[2] = {-1, 0}; double X[] = { 0.003, -0.514 }; int incX = 1; double Y[] = { -0.529, 0.743 }; int incY = -1; double expected[] = { -0.532, 1.257 }; cblas_zaxpy(N, alpha, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected[2*i], dbleps, "zaxpy(case 67) real"); gsl_test_rel(Y[2*i+1], expected[2*i+1], dbleps, "zaxpy(case 67) imag"); }; }; }; { int N = 1; float alpha = 0.1f; float X[] = { 0.771f }; int incX = -1; float Y[] = { 0.507f }; int incY = 1; float expected[] = { 0.5841f }; cblas_saxpy(N, alpha, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected[i], flteps, "saxpy(case 68)"); } }; }; { int N = 1; double alpha = -0.3; double X[] = { 0.029 }; int incX = -1; double Y[] = { -0.992 }; int incY = 1; double expected[] = { -1.0007 }; cblas_daxpy(N, alpha, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected[i], dbleps, "daxpy(case 69)"); } }; }; { int N = 1; float alpha[2] = {-0.3f, 0.1f}; float X[] = { 0.194f, -0.959f }; int incX = -1; float Y[] = { 0.096f, 0.032f }; int incY = 1; float expected[] = { 0.1337f, 0.3391f }; cblas_caxpy(N, alpha, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected[2*i], flteps, "caxpy(case 70) real"); gsl_test_rel(Y[2*i+1], expected[2*i+1], flteps, "caxpy(case 70) imag"); }; }; }; { int N = 1; double alpha[2] = {0, 1}; double X[] = { 0.776, -0.671 }; int incX = -1; double Y[] = { 0.39, 0.404 }; int incY = 1; double expected[] = { 1.061, 1.18 }; cblas_zaxpy(N, alpha, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected[2*i], dbleps, "zaxpy(case 71) real"); gsl_test_rel(Y[2*i+1], expected[2*i+1], dbleps, "zaxpy(case 71) imag"); }; }; }; { int N = 1; float alpha = 1.0f; float X[] = { 0.647f }; int incX = -1; float Y[] = { 0.016f }; int incY = -1; float expected[] = { 0.663f }; cblas_saxpy(N, alpha, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected[i], flteps, "saxpy(case 72)"); } }; }; { int N = 1; double alpha = -1; double X[] = { -0.558 }; int incX = -1; double Y[] = { 0.308 }; int incY = -1; double expected[] = { 0.866 }; cblas_daxpy(N, alpha, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected[i], dbleps, "daxpy(case 73)"); } }; }; { int N = 1; float alpha[2] = {-0.3f, 0.1f}; float X[] = { 0.899f, -0.624f }; int incX = -1; float Y[] = { 0.155f, -0.33f }; int incY = -1; float expected[] = { -0.0523f, -0.0529f }; cblas_caxpy(N, alpha, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected[2*i], flteps, "caxpy(case 74) real"); gsl_test_rel(Y[2*i+1], expected[2*i+1], flteps, "caxpy(case 74) imag"); }; }; }; { int N = 1; double alpha[2] = {0, 1}; double X[] = { -0.451, 0.768 }; int incX = -1; double Y[] = { 0.007, 0.732 }; int incY = -1; double expected[] = { -0.761, 0.281 }; cblas_zaxpy(N, alpha, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected[2*i], dbleps, "zaxpy(case 75) real"); gsl_test_rel(Y[2*i+1], expected[2*i+1], dbleps, "zaxpy(case 75) imag"); }; }; }; } gsl/cblas/dtbmv.c0000644000175000017500000000065313536674414012302 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dtbmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const double *A, const int lda, double *X, const int incX) { #define BASE double #include "source_tbmv_r.h" #undef BASE } gsl/cblas/source_spmv.h0000644000175000017500000000541113536674414013535 0ustar eddedd/* blas/source_spmv.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; CHECK_ARGS10(SD_SPMV,order,Uplo,N,alpha,Ap,X,incX,beta,Y,incY); if (alpha == 0.0 && beta == 1.0) return; /* form y := beta*y */ if (beta == 0.0) { INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { Y[iy] = 0.0; iy += incY; } } else if (beta != 1.0) { INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { Y[iy] *= beta; iy += incY; } } if (alpha == 0.0) return; /* form y := alpha*A*x + y */ if ((order == CblasRowMajor && Uplo == CblasUpper) || (order == CblasColMajor && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { BASE tmp1 = alpha * X[ix]; BASE tmp2 = 0.0; const INDEX j_min = i + 1; const INDEX j_max = N; INDEX jx = OFFSET(N, incX) + j_min * incX; INDEX jy = OFFSET(N, incY) + j_min * incY; Y[iy] += tmp1 * Ap[TPUP(N, i, i)]; for (j = j_min; j < j_max; j++) { const BASE apk = Ap[TPUP(N, i, j)]; Y[jy] += tmp1 * apk; tmp2 += apk * X[jx]; jy += incY; jx += incX; } Y[iy] += alpha * tmp2; ix += incX; iy += incY; } } else if ((order == CblasRowMajor && Uplo == CblasLower) || (order == CblasColMajor && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { BASE tmp1 = alpha * X[ix]; BASE tmp2 = 0.0; const INDEX j_min = 0; const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; INDEX jy = OFFSET(N, incY) + j_min * incY; Y[iy] += tmp1 * Ap[TPLO(N, i, i)]; for (j = j_min; j < j_max; j++) { const BASE apk = Ap[TPLO(N, i, j)]; Y[jy] += tmp1 * apk; tmp2 += apk * X[jx]; jy += incY; jx += incX; } Y[iy] += alpha * tmp2; ix += incX; iy += incY; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/test_scal.c0000644000175000017500000005076213536674414013155 0ustar eddedd#include #include #include #include #include "tests.h" void test_scal (void) { const double flteps = 1e-4, dbleps = 1e-6; { int N = 1; float alpha = 0.0f; float X[] = { 0.651f }; int incX = -1; float expected[] = { 0.651f }; cblas_sscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], expected[i], flteps, "sscal(case 112)"); } }; }; { int N = 1; float alpha = 0.1f; float X[] = { 0.651f }; int incX = -1; float expected[] = { 0.651f }; cblas_sscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], expected[i], flteps, "sscal(case 113)"); } }; }; { int N = 1; float alpha = 1.0f; float X[] = { 0.651f }; int incX = -1; float expected[] = { 0.651f }; cblas_sscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], expected[i], flteps, "sscal(case 114)"); } }; }; { int N = 1; double alpha = 0; double X[] = { 0.686 }; int incX = -1; double expected[] = { 0.686 }; cblas_dscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], expected[i], dbleps, "dscal(case 115)"); } }; }; { int N = 1; double alpha = 0.1; double X[] = { 0.686 }; int incX = -1; double expected[] = { 0.686 }; cblas_dscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], expected[i], dbleps, "dscal(case 116)"); } }; }; { int N = 1; double alpha = 1; double X[] = { 0.686 }; int incX = -1; double expected[] = { 0.686 }; cblas_dscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], expected[i], dbleps, "dscal(case 117)"); } }; }; { int N = 1; float alpha[2] = {0.0f, 0.0f}; float X[] = { 0.986f, -0.775f }; int incX = -1; float expected[] = { 0.986f, -0.775f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 118) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 118) imag"); }; }; }; { int N = 1; float alpha[2] = {0.1f, 0.0f}; float X[] = { 0.986f, -0.775f }; int incX = -1; float expected[] = { 0.986f, -0.775f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 119) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 119) imag"); }; }; }; { int N = 1; float alpha[2] = {1.0f, 0.0f}; float X[] = { 0.986f, -0.775f }; int incX = -1; float expected[] = { 0.986f, -0.775f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 120) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 120) imag"); }; }; }; { int N = 1; float alpha[2] = {0.0f, 0.1f}; float X[] = { 0.986f, -0.775f }; int incX = -1; float expected[] = { 0.986f, -0.775f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 121) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 121) imag"); }; }; }; { int N = 1; float alpha[2] = {0.1f, 0.2f}; float X[] = { 0.986f, -0.775f }; int incX = -1; float expected[] = { 0.986f, -0.775f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 122) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 122) imag"); }; }; }; { int N = 1; float alpha[2] = {1.0f, 0.3f}; float X[] = { 0.986f, -0.775f }; int incX = -1; float expected[] = { 0.986f, -0.775f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 123) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 123) imag"); }; }; }; { int N = 1; double alpha[2] = {0, 0}; double X[] = { 0.454, -0.478 }; int incX = -1; double expected[] = { 0.454, -0.478 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 124) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 124) imag"); }; }; }; { int N = 1; double alpha[2] = {0.1, 0}; double X[] = { 0.454, -0.478 }; int incX = -1; double expected[] = { 0.454, -0.478 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 125) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 125) imag"); }; }; }; { int N = 1; double alpha[2] = {1, 0}; double X[] = { 0.454, -0.478 }; int incX = -1; double expected[] = { 0.454, -0.478 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 126) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 126) imag"); }; }; }; { int N = 1; double alpha[2] = {0, 0.1}; double X[] = { 0.454, -0.478 }; int incX = -1; double expected[] = { 0.454, -0.478 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 127) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 127) imag"); }; }; }; { int N = 1; double alpha[2] = {0.1, 0.2}; double X[] = { 0.454, -0.478 }; int incX = -1; double expected[] = { 0.454, -0.478 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 128) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 128) imag"); }; }; }; { int N = 1; double alpha[2] = {1, 0.3}; double X[] = { 0.454, -0.478 }; int incX = -1; double expected[] = { 0.454, -0.478 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 129) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 129) imag"); }; }; }; { int N = 2; float alpha = 0.0f; float X[] = { 0.389f, -0.236f }; int incX = 1; float expected[] = { 0.0f, -0.0f }; cblas_sscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], expected[i], flteps, "sscal(case 130)"); } }; }; { int N = 2; float alpha = 0.1f; float X[] = { 0.389f, -0.236f }; int incX = 1; float expected[] = { 0.0389f, -0.0236f }; cblas_sscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], expected[i], flteps, "sscal(case 131)"); } }; }; { int N = 2; float alpha = 1.0f; float X[] = { 0.389f, -0.236f }; int incX = 1; float expected[] = { 0.389f, -0.236f }; cblas_sscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], expected[i], flteps, "sscal(case 132)"); } }; }; { int N = 2; double alpha = 0; double X[] = { -0.429, -0.183 }; int incX = 1; double expected[] = { -0.0, -0.0 }; cblas_dscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], expected[i], dbleps, "dscal(case 133)"); } }; }; { int N = 2; double alpha = 0.1; double X[] = { -0.429, -0.183 }; int incX = 1; double expected[] = { -0.0429, -0.0183 }; cblas_dscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], expected[i], dbleps, "dscal(case 134)"); } }; }; { int N = 2; double alpha = 1; double X[] = { -0.429, -0.183 }; int incX = 1; double expected[] = { -0.429, -0.183 }; cblas_dscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], expected[i], dbleps, "dscal(case 135)"); } }; }; { int N = 2; float alpha[2] = {0.0f, 0.0f}; float X[] = { -0.603f, 0.239f, 0.339f, -0.58f }; int incX = 1; float expected[] = { -0.0f, 0.0f, 0.0f, 0.0f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 136) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 136) imag"); }; }; }; { int N = 2; float alpha[2] = {0.1f, 0.0f}; float X[] = { -0.603f, 0.239f, 0.339f, -0.58f }; int incX = 1; float expected[] = { -0.0603f, 0.0239f, 0.0339f, -0.058f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 137) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 137) imag"); }; }; }; { int N = 2; float alpha[2] = {1.0f, 0.0f}; float X[] = { -0.603f, 0.239f, 0.339f, -0.58f }; int incX = 1; float expected[] = { -0.603f, 0.239f, 0.339f, -0.58f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 138) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 138) imag"); }; }; }; { int N = 2; float alpha[2] = {0.0f, 0.1f}; float X[] = { -0.603f, 0.239f, 0.339f, -0.58f }; int incX = 1; float expected[] = { -0.0239f, -0.0603f, 0.058f, 0.0339f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 139) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 139) imag"); }; }; }; { int N = 2; float alpha[2] = {0.1f, 0.2f}; float X[] = { -0.603f, 0.239f, 0.339f, -0.58f }; int incX = 1; float expected[] = { -0.1081f, -0.0967f, 0.1499f, 0.0098f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 140) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 140) imag"); }; }; }; { int N = 2; float alpha[2] = {1.0f, 0.3f}; float X[] = { -0.603f, 0.239f, 0.339f, -0.58f }; int incX = 1; float expected[] = { -0.6747f, 0.0581f, 0.513f, -0.4783f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 141) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 141) imag"); }; }; }; { int N = 2; double alpha[2] = {0, 0}; double X[] = { -0.956, 0.613, 0.443, 0.503 }; int incX = 1; double expected[] = { -0.0, 0.0, 0.0, 0.0 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 142) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 142) imag"); }; }; }; { int N = 2; double alpha[2] = {0.1, 0}; double X[] = { -0.956, 0.613, 0.443, 0.503 }; int incX = 1; double expected[] = { -0.0956, 0.0613, 0.0443, 0.0503 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 143) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 143) imag"); }; }; }; { int N = 2; double alpha[2] = {1, 0}; double X[] = { -0.956, 0.613, 0.443, 0.503 }; int incX = 1; double expected[] = { -0.956, 0.613, 0.443, 0.503 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 144) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 144) imag"); }; }; }; { int N = 2; double alpha[2] = {0, 0.1}; double X[] = { -0.956, 0.613, 0.443, 0.503 }; int incX = 1; double expected[] = { -0.0613, -0.0956, -0.0503, 0.0443 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 145) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 145) imag"); }; }; }; { int N = 2; double alpha[2] = {0.1, 0.2}; double X[] = { -0.956, 0.613, 0.443, 0.503 }; int incX = 1; double expected[] = { -0.2182, -0.1299, -0.0563, 0.1389 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 146) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 146) imag"); }; }; }; { int N = 2; double alpha[2] = {1, 0.3}; double X[] = { -0.956, 0.613, 0.443, 0.503 }; int incX = 1; double expected[] = { -1.1399, 0.3262, 0.2921, 0.6359 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 147) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 147) imag"); }; }; }; { int N = 2; float alpha = 0.0f; float X[] = { 0.629f, -0.419f }; int incX = -1; float expected[] = { 0.629f, -0.419f }; cblas_sscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], expected[i], flteps, "sscal(case 148)"); } }; }; { int N = 2; float alpha = 0.1f; float X[] = { 0.629f, -0.419f }; int incX = -1; float expected[] = { 0.629f, -0.419f }; cblas_sscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], expected[i], flteps, "sscal(case 149)"); } }; }; { int N = 2; float alpha = 1.0f; float X[] = { 0.629f, -0.419f }; int incX = -1; float expected[] = { 0.629f, -0.419f }; cblas_sscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], expected[i], flteps, "sscal(case 150)"); } }; }; { int N = 2; double alpha = 0; double X[] = { 0.398, -0.656 }; int incX = -1; double expected[] = { 0.398, -0.656 }; cblas_dscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], expected[i], dbleps, "dscal(case 151)"); } }; }; { int N = 2; double alpha = 0.1; double X[] = { 0.398, -0.656 }; int incX = -1; double expected[] = { 0.398, -0.656 }; cblas_dscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], expected[i], dbleps, "dscal(case 152)"); } }; }; { int N = 2; double alpha = 1; double X[] = { 0.398, -0.656 }; int incX = -1; double expected[] = { 0.398, -0.656 }; cblas_dscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[i], expected[i], dbleps, "dscal(case 153)"); } }; }; { int N = 2; float alpha[2] = {0.0f, 0.0f}; float X[] = { 0.736f, 0.331f, -0.318f, 0.622f }; int incX = -1; float expected[] = { 0.736f, 0.331f, -0.318f, 0.622f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 154) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 154) imag"); }; }; }; { int N = 2; float alpha[2] = {0.1f, 0.0f}; float X[] = { 0.736f, 0.331f, -0.318f, 0.622f }; int incX = -1; float expected[] = { 0.736f, 0.331f, -0.318f, 0.622f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 155) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 155) imag"); }; }; }; { int N = 2; float alpha[2] = {1.0f, 0.0f}; float X[] = { 0.736f, 0.331f, -0.318f, 0.622f }; int incX = -1; float expected[] = { 0.736f, 0.331f, -0.318f, 0.622f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 156) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 156) imag"); }; }; }; { int N = 2; float alpha[2] = {0.0f, 0.1f}; float X[] = { 0.736f, 0.331f, -0.318f, 0.622f }; int incX = -1; float expected[] = { 0.736f, 0.331f, -0.318f, 0.622f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 157) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 157) imag"); }; }; }; { int N = 2; float alpha[2] = {0.1f, 0.2f}; float X[] = { 0.736f, 0.331f, -0.318f, 0.622f }; int incX = -1; float expected[] = { 0.736f, 0.331f, -0.318f, 0.622f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 158) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 158) imag"); }; }; }; { int N = 2; float alpha[2] = {1.0f, 0.3f}; float X[] = { 0.736f, 0.331f, -0.318f, 0.622f }; int incX = -1; float expected[] = { 0.736f, 0.331f, -0.318f, 0.622f }; cblas_cscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], flteps, "cscal(case 159) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], flteps, "cscal(case 159) imag"); }; }; }; { int N = 2; double alpha[2] = {0, 0}; double X[] = { 0.521, -0.811, 0.556, -0.147 }; int incX = -1; double expected[] = { 0.521, -0.811, 0.556, -0.147 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 160) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 160) imag"); }; }; }; { int N = 2; double alpha[2] = {0.1, 0}; double X[] = { 0.521, -0.811, 0.556, -0.147 }; int incX = -1; double expected[] = { 0.521, -0.811, 0.556, -0.147 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 161) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 161) imag"); }; }; }; { int N = 2; double alpha[2] = {1, 0}; double X[] = { 0.521, -0.811, 0.556, -0.147 }; int incX = -1; double expected[] = { 0.521, -0.811, 0.556, -0.147 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 162) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 162) imag"); }; }; }; { int N = 2; double alpha[2] = {0, 0.1}; double X[] = { 0.521, -0.811, 0.556, -0.147 }; int incX = -1; double expected[] = { 0.521, -0.811, 0.556, -0.147 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 163) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 163) imag"); }; }; }; { int N = 2; double alpha[2] = {0.1, 0.2}; double X[] = { 0.521, -0.811, 0.556, -0.147 }; int incX = -1; double expected[] = { 0.521, -0.811, 0.556, -0.147 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 164) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 164) imag"); }; }; }; { int N = 2; double alpha[2] = {1, 0.3}; double X[] = { 0.521, -0.811, 0.556, -0.147 }; int incX = -1; double expected[] = { 0.521, -0.811, 0.556, -0.147 }; cblas_zscal(N, alpha, X, incX); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(X[2*i], expected[2*i], dbleps, "zscal(case 165) real"); gsl_test_rel(X[2*i+1], expected[2*i+1], dbleps, "zscal(case 165) imag"); }; }; }; } gsl/cblas/test_trmm.c0000644000175000017500000036501613536674414013213 0ustar eddedd#include #include #include #include #include "tests.h" void test_trmm (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.18f, 0.199f, 0.122f, -0.547f }; int lda = 2; float B[] = { -0.874f, -0.383f, 0.458f, 0.124f, -0.221f, -0.107f }; int ldb = 3; float B_expected[] = { 0.0397932f, 0.0338757f, -0.0183441f, 0.0203484f, -0.0362661f, -0.0175587f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1662)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.195f, -0.453f, -0.579f, 0.697f }; int lda = 2; float B[] = { 0.736f, 0.131f, 0.533f, 0.692f, -0.672f, -0.435f }; int ldb = 3; float B_expected[] = { -0.126757f, -0.130625f, -0.219017f, -0.2076f, 0.2016f, 0.1305f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1663)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { -0.53f, 0.787f, 0.889f, -0.379f }; int lda = 2; float B[] = { -0.355f, 0.002f, 0.266f, 0.972f, 0.712f, -0.353f }; int ldb = 3; float B_expected[] = { -0.056445f, 3.18e-04f, 0.042294f, 0.205195f, 0.080421f, -0.111078f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1664)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.198f, -0.673f, 0.792f, 0.781f }; int lda = 2; float B[] = { 0.901f, 0.719f, -0.339f, -0.36f, 0.539f, 0.192f }; int ldb = 3; float B_expected[] = { -0.2703f, -0.2157f, 0.1017f, -0.106078f, -0.332534f, 0.0229464f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1665)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { -0.522f, 0.851f, 0.586f, 0.196f }; int lda = 2; float B[] = { 0.335f, 0.617f, 0.118f, -0.143f, 0.677f, 0.456f }; int ldb = 2; float B_expected[] = { -0.0560076f, -0.0362796f, 0.0436182f, 0.0084084f, 0.0258534f, -0.0268128f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1666)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { -0.006f, -0.613f, -0.966f, -0.758f }; int lda = 2; float B[] = { 0.64f, -0.723f, -0.765f, 0.801f, 0.376f, 0.91f }; int ldb = 2; float B_expected[] = { -0.401525f, 0.2169f, 0.46163f, -0.2403f, 0.150918f, -0.273f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1667)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.738f, 0.913f, -0.227f, 0.787f }; int lda = 2; float B[] = { 0.194f, 0.988f, -0.274f, -0.652f, -0.281f, -0.359f }; int ldb = 2; float B_expected[] = { -0.0429516f, -0.286403f, 0.0606636f, 0.228986f, 0.0622134f, 0.161726f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1668)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.952f, 0.598f, 0.25f, -0.508f }; int lda = 2; float B[] = { 0.036f, 0.745f, -0.606f, 0.215f, 0.943f, -0.933f }; int ldb = 2; float B_expected[] = { -0.0108f, -0.229958f, 0.1818f, 0.0442164f, -0.2829f, 0.110726f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1669)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { -0.251f, 0.372f, -0.168f, 0.217f, -0.179f, 0.863f, -0.057f, 0.256f, 0.093f }; int lda = 3; float B[] = { -0.727f, -0.461f, 0.162f, 0.579f, -0.305f, -0.735f }; int ldb = 3; float B_expected[] = { -0.0547431f, 0.0563775f, 0.0781923f, 0.0435987f, -0.0809949f, 0.128653f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1670)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { -0.014f, 0.204f, 0.163f, 0.842f, -0.918f, -0.748f, -0.859f, -0.463f, 0.292f }; int lda = 3; float B[] = { -0.587f, -0.625f, -0.994f, 0.681f, -0.577f, -0.434f }; int ldb = 3; float B_expected[] = { 0.1761f, 0.223424f, 0.186654f, -0.2043f, 0.131423f, -0.0325797f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1671)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { -0.682f, -0.71f, 0.475f, -0.59f, -0.748f, 0.548f, 0.245f, 0.761f, -0.4f }; int lda = 3; float B[] = { 0.565f, 0.967f, -0.969f, 0.184f, 0.349f, -0.552f }; int ldb = 3; float B_expected[] = { 0.357979f, 0.438217f, -0.11628f, 0.139991f, 0.204337f, -0.06624f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1672)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.617f, -0.998f, -0.97f, 0.364f, 0.09f, 0.588f, -0.263f, 0.584f, 0.463f }; int lda = 3; float B[] = { 0.773f, 0.074f, -0.388f, 0.825f, -0.608f, 0.788f }; int ldb = 3; float B_expected[] = { -0.270594f, 0.0457776f, 0.1164f, -0.118933f, 0.0443424f, -0.2364f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1673)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.217f, -0.672f, -0.378f, -0.005f, -0.586f, -0.426f, 0.765f, -0.239f, -0.145f }; int lda = 3; float B[] = { 0.01f, 0.387f, -0.953f, -0.374f, -0.673f, -0.724f }; int ldb = 2; float B_expected[] = { -6.51e-04f, -0.0251937f, -0.167522f, -0.0651687f, -0.0999006f, -0.147126f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1674)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { 0.962f, 0.515f, 0.292f, 0.354f, -0.366f, 0.455f, 0.134f, -0.564f, -0.303f }; int lda = 3; float B[] = { -0.337f, 0.718f, -0.866f, -0.454f, -0.439f, -0.668f }; int ldb = 2; float B_expected[] = { 0.1011f, -0.2154f, 0.295589f, 0.0599484f, -0.0012798f, 0.0947196f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1675)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { -0.228f, -0.097f, 0.205f, 0.875f, -0.162f, 0.542f, -0.839f, -0.935f, 0.2f }; int lda = 3; float B[] = { -0.125f, -0.676f, 0.181f, 0.741f, 0.216f, 0.766f }; int ldb = 2; float B_expected[] = { -0.0165669f, -0.0717843f, -0.026325f, -0.088539f, -0.01296f, -0.04596f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1676)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha = -0.3f; float A[] = { -0.854f, -0.502f, 0.591f, -0.934f, -0.729f, 0.063f, 0.352f, 0.126f, -0.905f }; int lda = 3; float B[] = { -0.626f, -0.694f, -0.889f, -0.251f, -0.42f, -0.353f }; int ldb = 2; float B_expected[] = { 0.128383f, 0.232986f, 0.274638f, 0.0819717f, 0.126f, 0.1059f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1677)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { -0.755f, 0.12f, 0.525f, 0.917f }; int lda = 2; float B[] = { -0.927f, -0.813f, 0.624f, -0.366f, -0.864f, -0.046f }; int ldb = 3; float B_expected[] = { 0.0699885f, 0.0613815f, -0.047112f, -0.0446862f, -0.0889848f, 0.0032698f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1678)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { -0.444f, 0.515f, 0.081f, -0.69f }; int lda = 2; float B[] = { 0.571f, -0.098f, -0.226f, -0.587f, 0.788f, -0.629f }; int ldb = 3; float B_expected[] = { 0.0571f, -0.0098f, -0.0226f, -0.0292935f, 0.073753f, -0.074539f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1679)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { -0.954f, 0.651f, -0.982f, 0.388f }; int lda = 2; float B[] = { -0.927f, -0.281f, -0.918f, -0.527f, -0.652f, -0.393f }; int ldb = 3; float B_expected[] = { 0.140187f, 0.0908338f, 0.12617f, -0.0204476f, -0.0252976f, -0.0152484f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1680)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { 0.811f, 0.852f, 0.224f, 0.443f }; int lda = 2; float B[] = { -0.493f, -0.497f, -0.605f, 0.433f, -0.082f, -0.077f }; int ldb = 3; float B_expected[] = { -0.0396008f, -0.0515368f, -0.0622248f, 0.0433f, -0.0082f, -0.0077f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1681)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { -0.777f, 0.812f, 0.254f, 0.97f }; int lda = 2; float B[] = { -0.509f, 0.171f, 0.986f, -0.644f, -0.97f, 0.814f }; int ldb = 2; float B_expected[] = { 0.0395493f, 0.0036584f, -0.0766122f, -0.0374236f, 0.075369f, 0.05432f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1682)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { 0.962f, 0.912f, -0.238f, -0.336f }; int lda = 2; float B[] = { -0.666f, 0.066f, -0.176f, 0.402f, 0.286f, -0.703f }; int ldb = 2; float B_expected[] = { -0.0666f, 0.0224508f, -0.0176f, 0.0443888f, 0.0286f, -0.0771068f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1683)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { 0.859f, -0.547f, 0.076f, 0.542f }; int lda = 2; float B[] = { 0.402f, 0.945f, -0.242f, -0.062f, 0.714f, 0.468f }; int ldb = 2; float B_expected[] = { -0.0171597f, 0.051219f, -0.0173964f, -0.0033604f, 0.035733f, 0.0253656f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1684)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { -0.779f, 0.435f, 0.612f, -0.723f }; int lda = 2; float B[] = { 0.512f, -0.987f, -0.167f, 0.047f, -0.701f, -0.25f }; int ldb = 2; float B_expected[] = { 0.0082655f, -0.0987f, -0.0146555f, 0.0047f, -0.080975f, -0.025f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1685)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { -0.757f, 0.396f, -0.927f, -0.558f, -0.289f, -0.66f, 0.83f, 0.363f, -0.13f }; int lda = 3; float B[] = { 0.041f, 0.333f, -0.682f, 0.193f, 0.581f, 0.963f }; int ldb = 3; float B_expected[] = { 0.0733045f, 0.0353883f, 0.008866f, -0.0808726f, -0.0803489f, -0.012519f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1686)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { -0.75f, 0.674f, -0.576f, 0.376f, -0.46f, -0.813f, 0.419f, 0.792f, 0.226f }; int lda = 3; float B[] = { 0.511f, -0.544f, 0.938f, -0.126f, -0.873f, 0.118f }; int ldb = 3; float B_expected[] = { -0.0395944f, -0.130659f, 0.0938f, -0.078237f, -0.0968934f, 0.0118f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1687)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { -0.045f, -0.809f, 0.654f, 0.611f, -0.038f, -0.105f, -0.946f, 0.474f, -0.097f }; int lda = 3; float B[] = { -0.625f, -0.123f, -0.48f, -0.088f, -0.757f, 0.974f }; int ldb = 3; float B_expected[] = { 0.0028125f, -0.0377201f, 0.0579508f, 3.96e-04f, -0.0025002f, -0.0370048f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1688)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { 0.713f, 0.781f, 0.084f, -0.498f, 0.692f, 0.125f, 0.706f, -0.118f, -0.907f }; int lda = 3; float B[] = { 0.442f, -0.563f, 0.065f, -0.18f, 0.63f, -0.328f }; int ldb = 3; float B_expected[] = { 0.0442f, -0.0783116f, 0.0443486f, -0.018f, 0.071964f, -0.052942f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1689)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { -0.442f, 0.566f, 0.064f, 0.962f, -0.669f, 0.416f, 0.761f, -0.359f, 0.863f }; int lda = 3; float B[] = { 0.261f, -0.659f, -0.536f, 0.694f, -0.305f, -0.675f }; int ldb = 2; float B_expected[] = { -0.0863099f, 0.0445231f, 0.0468079f, -0.0221961f, -0.0263215f, -0.0582525f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1690)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { 0.386f, 0.643f, -0.028f, -0.758f, -0.63f, -0.043f, 0.666f, -0.088f, 0.382f }; int lda = 3; float B[] = { -0.241f, 0.766f, 0.656f, -0.977f, 0.274f, 0.565f }; int ldb = 2; float B_expected[] = { -0.0555764f, 0.188286f, 0.0631888f, -0.102672f, 0.0274f, 0.0565f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1691)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { -0.855f, -0.587f, 0.062f, 0.372f, 0.48f, -0.63f, -0.786f, -0.437f, -0.431f }; int lda = 3; float B[] = { 0.116f, 0.534f, 0.043f, 0.73f, 0.945f, 0.528f }; int ldb = 2; float B_expected[] = { -0.009918f, -0.045657f, -0.0047452f, 0.0036942f, -0.0427193f, -0.065436f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1692)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha = 0.1f; float A[] = { -0.068f, 0.119f, -0.244f, -0.05f, 0.685f, 0.752f, -0.059f, -0.935f, -0.571f }; int lda = 3; float B[] = { -0.753f, -0.319f, 0.164f, 0.979f, 0.885f, -0.822f }; int ldb = 2; float B_expected[] = { -0.0753f, -0.0319f, 0.0074393f, 0.0941039f, 0.119206f, -7.956e-04f }; cblas_strmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], flteps, "strmm(case 1693)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -0.3; double A[] = { 0.174, -0.308, 0.997, -0.484 }; int lda = 2; double B[] = { -0.256, -0.178, 0.098, 0.004, 0.97, -0.408 }; int ldb = 3; double B_expected[] = { 0.0137328, 0.0989196, -0.0428148, 5.808e-04, 0.140844, -0.0592416 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1694)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -0.3; double A[] = { 0.722, -0.372, 0.466, -0.831 }; int lda = 2; double B[] = { 0.322, -0.183, 0.849, -0.051, -0.343, -0.98 }; int ldb = 3; double B_expected[] = { -0.1022916, 0.0166212, -0.364068, 0.0153, 0.1029, 0.294 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1695)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -0.3; double A[] = { -0.656, -0.066, 0.582, 0.141 }; int lda = 2; double B[] = { 0.73, 0.407, 0.721, 0.086, -0.294, 0.941 }; int ldb = 3; double B_expected[] = { 0.143664, 0.0800976, 0.1418928, -0.1310958, -0.058626, -0.1656909 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1696)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -0.3; double A[] = { -0.341, 0.386, -0.578, 0.863 }; int lda = 2; double B[] = { -0.306, -0.047, -0.162, -0.784, 0.472, 0.137 }; int ldb = 3; double B_expected[] = { 0.0918, 0.0141, 0.0486, 0.1821396, -0.1497498, -0.0691908 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1697)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -0.3; double A[] = { 0.844, -0.832, 0.179, -0.775 }; int lda = 2; double B[] = { -0.415, -0.547, -0.023, 0.42, 0.917, 0.485 }; int ldb = 2; double B_expected[] = { 0.1344519, -0.1271775, -0.0167304, 0.09765, -0.2582289, 0.1127625 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1698)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -0.3; double A[] = { 0.239, 0.34, 0.964, -0.575 }; int lda = 2; double B[] = { 0.762, -0.038, -0.8, 0.626, -0.701, 0.639 }; int ldb = 2; double B_expected[] = { -0.2176104, 0.0114, 0.0589608, -0.1878, 0.0255012, -0.1917 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1699)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -0.3; double A[] = { 0.785, -0.0, -0.592, -0.661 }; int lda = 2; double B[] = { -0.215, 0.953, 0.527, -0.418, -0.675, 0.283 }; int ldb = 2; double B_expected[] = { 0.0506325, 0.1889799, -0.1241085, -0.0828894, 0.1589625, 0.0561189 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1700)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -0.3; double A[] = { -0.423, -0.807, -0.683, -0.225 }; int lda = 2; double B[] = { 0.149, -0.129, 0.149, -0.234, 0.275, 0.658 }; int ldb = 2; double B_expected[] = { -0.0447, 0.0747729, -0.0447, 0.1062729, -0.0825, -0.1308225 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1701)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -0.3; double A[] = { -0.276, 0.434, 0.917, 0.682, -0.32, 0.557, -0.302, 0.989, -0.043 }; int lda = 3; double B[] = { -0.943, 0.839, 0.759, 0.752, 0.807, 0.288 }; int ldb = 3; double B_expected[] = { -0.0780804, 0.2033226, 0.1290135, 0.0622656, -0.0204384, -0.3380097 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1702)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -0.3; double A[] = { -0.731, -0.953, -0.666, 0.684, 0.38, 0.419, -0.361, 0.378, -0.423 }; int lda = 3; double B[] = { -0.983, 0.479, -0.136, 0.048, 0.745, -0.408 }; int ldb = 3; double B_expected[] = { 0.2949, -0.4247397, -0.2158137, -0.0144, -0.2097768, 0.0383439 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1703)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -0.3; double A[] = { -0.953, -0.983, 0.237, 0.128, -0.378, 0.607, 0.41, 0.418, -0.221 }; int lda = 3; double B[] = { -0.561, -0.114, -0.148, 0.488, 0.146, -0.688 }; int ldb = 3; double B_expected[] = { -0.1378083, 0.0056316, -0.0098124, 0.2185368, 0.1028316, -0.0456144 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1704)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -0.3; double A[] = { 0.277, -0.587, 0.885, -0.933, -0.582, 0.528, 0.268, -0.804, 0.62 }; int lda = 3; double B[] = { -0.831, -0.319, -0.547, -0.577, 0.295, -0.31 }; int ldb = 3; double B_expected[] = { 0.2039907, -0.0362364, 0.1641, 0.2805945, -0.163272, 0.093 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1705)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -0.3; double A[] = { 0.256, 0.554, 0.342, 0.318, -0.824, -0.119, -0.399, -0.653, -0.83 }; int lda = 3; double B[] = { -0.577, 0.861, -0.439, -0.916, 0.452, -0.168 }; int ldb = 2; double B_expected[] = { 0.0443136, -0.0661248, -0.053475, -0.3085746, -0.042519, -0.1182147 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1706)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -0.3; double A[] = { 0.837, -0.03, 0.552, -0.43, 0.841, 0.035, 0.7, 0.637, 0.095 }; int lda = 3; double B[] = { -0.82, -0.362, -0.252, -0.062, -0.942, -0.299 }; int ldb = 2; double B_expected[] = { 0.246, 0.1086, -0.03018, -0.028098, 0.5029572, 0.1775682 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1707)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha = -0.3; double A[] = { -0.074, 0.49, 0.802, -0.454, 0.626, 0.123, -0.959, 0.971, 0.75 }; int lda = 3; double B[] = { -0.545, -0.107, 0.096, 0.183, 0.185, -0.218 }; int ldb = 2; double B_expected[] = { -0.070722, 0.0231744, -0.0248553, -0.0263232, -0.041625, 0.04905 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1708)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha = -0.3; double A[] = { 0.048, 0.148, 0.834, -0.98, -0.009, -0.727, 0.241, 0.276, 0.518 }; int lda = 3; double B[] = { -0.664, -0.136, -0.793, -0.742, 0.126, -0.131 }; int ldb = 2; double B_expected[] = { 0.202884, 0.106521, 0.2653806, 0.1940289, -0.0378, 0.0393 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1709)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = 0.1; double A[] = { 0.427, 0.495, 0.282, 0.158 }; int lda = 2; double B[] = { 0.899, -0.375, 0.376, -0.831, 0.431, -0.387 }; int ldb = 3; double B_expected[] = { 0.0383873, -0.0160125, 0.0160552, 0.0313707, -0.0117527, 0.0124974 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1710)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = 0.1; double A[] = { 0.632, -0.174, 0.608, -0.669 }; int lda = 2; double B[] = { -0.335, 0.535, -0.978, 0.31, 0.023, -0.853 }; int ldb = 3; double B_expected[] = { -0.0335, 0.0535, -0.0978, 0.036829, -0.007009, -0.0682828 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1711)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = 0.1; double A[] = { -0.779, -0.73, 0.343, -0.665 }; int lda = 2; double B[] = { -0.976, -0.2, 0.661, -0.975, -0.965, -0.861 }; int ldb = 3; double B_expected[] = { 0.0425879, -0.0175195, -0.0810242, 0.0648375, 0.0641725, 0.0572565 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1712)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = 0.1; double A[] = { -0.127, -0.634, -0.384, -0.815 }; int lda = 2; double B[] = { -0.348, 0.748, 0.893, 0.91, 0.153, -0.408 }; int ldb = 3; double B_expected[] = { -0.069744, 0.0689248, 0.1049672, 0.091, 0.0153, -0.0408 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1713)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = 0.1; double A[] = { -0.603, -0.617, 0.402, -0.918 }; int lda = 2; double B[] = { 0.051, -0.096, 0.476, 0.377, 0.931, 0.291 }; int ldb = 2; double B_expected[] = { -0.0030753, 0.010863, -0.0287028, -0.0154734, -0.0561393, 0.0107124 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1714)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = 0.1; double A[] = { 0.67, -0.475, 0.032, -0.036 }; int lda = 2; double B[] = { -0.19, 0.829, 0.942, 0.885, 0.087, 0.321 }; int ldb = 2; double B_expected[] = { -0.019, 0.082292, 0.0942, 0.0915144, 0.0087, 0.0323784 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1715)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = 0.1; double A[] = { -0.64, 0.595, 0.642, -0.921 }; int lda = 2; double B[] = { -0.278, -0.83, 0.922, -0.701, -0.598, -0.232 }; int ldb = 2; double B_expected[] = { -0.031593, 0.076443, -0.1007175, 0.0645621, 0.024468, 0.0213672 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1716)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = 0.1; double A[] = { 0.842, 0.625, 0.967, 0.341 }; int lda = 2; double B[] = { -0.679, -0.846, -0.921, 0.672, 0.292, 0.752 }; int ldb = 2; double B_expected[] = { -0.120775, -0.0846, -0.0501, 0.0672, 0.0762, 0.0752 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1717)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = 0.1; double A[] = { -0.612, 0.593, 0.113, -0.658, 0.703, -0.023, -0.384, 0.439, 0.958 }; int lda = 3; double B[] = { -0.858, -0.559, 0.499, -0.114, 0.57, 0.847 }; int ldb = 3; double B_expected[] = { 0.0249996, -0.0404454, 0.0478042, 0.0503489, 0.0381229, 0.0811426 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1718)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = 0.1; double A[] = { 0.844, 0.205, -0.692, -0.401, -0.823, 0.342, -0.384, 0.344, 0.18 }; int lda = 3; double B[] = { 0.823, -0.181, 0.141, 0.932, 0.097, -0.636 }; int ldb = 3; double B_expected[] = { 0.0688323, -0.0132778, 0.0141, 0.1391997, -0.0120512, -0.0636 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1719)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = 0.1; double A[] = { 0.065, 0.678, 0.044, -0.472, 0.932, -0.388, 0.432, -0.167, -0.277 }; int lda = 3; double B[] = { 0.675, -0.468, -0.564, 0.71, -0.624, 0.023 }; int ldb = 3; double B_expected[] = { 0.0043875, -0.0754776, 0.0525984, 0.004615, -0.0916688, 0.0404557 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1720)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = 0.1; double A[] = { 0.649, -0.171, -0.462, 0.593, 0.131, -0.317, -0.254, -0.948, 0.002 }; int lda = 3; double B[] = { -0.519, -0.501, -0.024, -0.767, -0.591, -0.738 }; int ldb = 3; double B_expected[] = { -0.0519, -0.0808767, 0.0582774, -0.0767, -0.1045831, 0.0017086 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1721)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = 0.1; double A[] = { -0.023, -0.872, -0.313, -0.698, 0.06, -0.838, -0.455, -0.715, -0.257 }; int lda = 3; double B[] = { -0.17, -0.184, -0.243, 0.907, -0.423, 0.665 }; int ldb = 2; double B_expected[] = { 0.0365989, -0.0931429, 0.0287865, -0.0421055, 0.0108711, -0.0170905 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1722)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = 0.1; double A[] = { 0.792, 0.338, -0.155, 0.009, 0.485, -0.633, -0.08, -0.579, 0.223 }; int lda = 3; double B[] = { -0.19, 0.201, 0.685, 0.663, 0.302, -0.506 }; int ldb = 2; double B_expected[] = { -0.0207995, 0.0247447, 0.0510142, 0.0955974, 0.0302, -0.0506 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1723)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha = 0.1; double A[] = { -0.076, 0.103, -0.021, -0.866, 0.777, 0.723, 0.378, 0.98, -0.32 }; int lda = 3; double B[] = { 0.739, -0.996, 0.182, 0.626, 0.291, -0.267 }; int ldb = 2; double B_expected[] = { -0.0056164, 0.0075696, 0.0217531, 0.0383814, 0.0022947, 0.0558954 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1724)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha = 0.1; double A[] = { 0.469, 0.822, -0.619, 0.953, -0.706, 0.318, 0.559, -0.68, -0.208 }; int lda = 3; double B[] = { 0.362, 0.719, -0.661, -0.504, 0.595, -0.771 }; int ldb = 2; double B_expected[] = { 0.0362, 0.0719, -0.0363436, 0.0087018, 0.0160724, -0.1376333 }; cblas_dtrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[i], B_expected[i], dbleps, "dtrmm(case 1725)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { -0.023f, 0.762f, -0.687f, -0.039f, -0.459f, 0.047f, 0.189f, 0.33f }; int lda = 2; float B[] = { 0.827f, -0.561f, 0.641f, -0.229f, -0.884f, -0.533f, -0.624f, -0.138f, 0.073f, 0.924f, -0.501f, -0.164f }; int ldb = 3; float B_expected[] = { -0.831767f, -0.762219f, -0.14564f, 0.143926f, -0.764269f, 0.529142f, 0.072396f, 0.232002f, 0.291123f, -0.198726f, 0.040569f, 0.196326f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1726) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1726) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { 0.24f, 0.581f, 0.06f, 0.064f, 0.981f, 0.792f, 0.242f, -0.529f }; int lda = 2; float B[] = { -0.649f, -0.774f, -0.43f, -0.447f, -0.266f, 0.285f, 0.787f, 0.274f, 0.449f, -0.912f, 0.435f, 0.601f }; int ldb = 3; float B_expected[] = { 0.619316f, 0.707192f, 0.344692f, 0.472984f, 0.278364f, -0.3489f, -0.787f, -0.274f, -0.449f, 0.912f, -0.435f, -0.601f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1727) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1727) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { 0.68f, -0.728f, -0.59f, -0.434f, -0.936f, 0.915f, 0.236f, -0.118f }; int lda = 2; float B[] = { 0.461f, 0.48f, 0.224f, 0.215f, -0.419f, -0.525f, 0.113f, -0.582f, 0.468f, 0.269f, 0.943f, -0.587f }; int ldb = 3; float B_expected[] = { -0.66292f, 0.009208f, -0.30884f, 0.016872f, 0.66712f, 0.051968f, 0.912704f, 0.178151f, 0.264199f, -0.01198f, -1.02584f, 0.141791f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1728) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1728) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { 0.699f, -0.709f, -0.775f, 0.779f, 0.5f, 0.774f, -0.399f, -0.843f }; int lda = 2; float B[] = { 0.538f, 0.556f, -0.186f, -0.678f, -0.413f, -0.612f, -0.216f, -0.519f, -0.344f, -0.578f, -0.938f, -0.848f }; int ldb = 3; float B_expected[] = { -0.538f, -0.556f, 0.186f, 0.678f, 0.413f, 0.612f, 0.377344f, -0.175412f, -0.087772f, 1.06096f, 0.670812f, 1.47366f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1729) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1729) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { 0.527f, 0.318f, -0.224f, 0.547f, -0.765f, -0.469f, 0.233f, 0.023f }; int lda = 2; float B[] = { 0.54f, -0.418f, -0.892f, -0.118f, -0.296f, 0.019f, 0.786f, -0.145f, 0.136f, 0.472f, 0.731f, 0.333f }; int ldb = 2; float B_expected[] = { -1.04454f, -0.460052f, 0.205122f, 0.04801f, 0.831329f, 0.341824f, -0.186473f, 0.015707f, 0.481462f, 0.305592f, -0.162664f, -0.094402f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1730) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1730) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { -0.109f, -0.852f, 0.395f, 0.871f, 0.378f, -0.493f, 0.51f, 0.973f }; int lda = 2; float B[] = { -0.867f, -0.758f, 0.687f, -0.596f, -0.912f, -0.561f, -0.389f, 0.21f, -0.561f, 0.132f, 0.689f, 0.653f }; int ldb = 2; float B_expected[] = { 0.901142f, 1.32198f, -0.687f, 0.596f, 0.955512f, 0.289843f, 0.389f, -0.21f, -0.021371f, -0.039157f, -0.689f, -0.653f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1731) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1731) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { 0.686f, 0.349f, 0.299f, -0.462f, 0.009f, -0.693f, -0.478f, -0.617f }; int lda = 2; float B[] = { -0.409f, 0.986f, -0.854f, 0.346f, 0.444f, -0.659f, 0.027f, 0.007f, 0.842f, -0.473f, 0.825f, 0.866f }; int ldb = 2; float B_expected[] = { 0.624688f, -0.533655f, -0.954935f, -0.845302f, -0.534575f, 0.297118f, 0.180289f, 0.422174f, -0.742689f, 0.03062f, -0.173204f, 1.4534f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1732) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1732) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { -0.286f, 0.661f, 0.372f, 0.28f, 0.482f, 0.267f, -0.436f, 0.844f }; int lda = 2; float B[] = { 0.0f, -0.513f, 0.91f, 0.109f, 0.587f, -0.183f, 0.112f, 0.362f, -0.256f, -0.518f, -0.933f, 0.066f }; int ldb = 2; float B_expected[] = { 0.0f, 0.513f, -1.05364f, 0.081836f, -0.587f, 0.183f, -0.381604f, -0.458284f, 0.256f, 0.518f, 0.883192f, 0.198376f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1733) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1733) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { 0.678f, 0.717f, 0.228f, 0.001f, -0.16f, -0.387f, -0.281f, -0.002f, 0.623f, 0.162f, -0.594f, 0.632f, 0.566f, 0.352f, -0.411f, 0.574f, 0.314f, -0.139f }; int lda = 3; float B[] = { -0.823f, -0.042f, 0.171f, -0.928f, 0.66f, 0.965f, 0.472f, 0.006f, -0.083f, 0.937f, -0.814f, 0.9f }; int ldb = 3; float B_expected[] = { 0.52788f, 0.618567f, -0.069267f, 0.560841f, -0.941723f, -1.19579f, -0.315714f, -0.342492f, 0.095893f, -0.572145f, 0.746576f, 0.396912f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1734) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1734) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { 0.346f, 0.915f, -0.227f, -0.066f, -0.166f, -0.921f, -0.373f, 0.312f, -0.824f, 0.699f, -0.114f, -0.152f, 0.862f, -0.077f, 0.221f, -0.757f, -0.413f, -0.494f }; int lda = 3; float B[] = { -0.02f, -0.247f, -0.62f, 0.651f, -0.07f, -0.491f, 0.042f, 0.936f, 0.272f, -0.582f, 0.012f, -0.534f }; int ldb = 3; float B_expected[] = { 0.02f, 0.247f, 0.631762f, -0.708389f, 0.124535f, 0.411552f, -0.042f, -0.936f, -0.324242f, 0.797244f, -0.747612f, 0.703054f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1735) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1735) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { -0.493f, -0.882f, -0.82f, 0.627f, 0.301f, -0.903f, -0.092f, 0.787f, -0.426f, -0.854f, -0.993f, 0.118f, 0.615f, 0.362f, -0.238f, -0.076f, 0.817f, -0.286f }; int lda = 3; float B[] = { 0.395f, 0.074f, -0.191f, -0.548f, 0.858f, 0.323f, -0.734f, 0.612f, 0.895f, 0.849f, 0.811f, 0.402f }; int ldb = 3; float B_expected[] = { -0.730125f, -0.024468f, 0.566282f, -0.25448f, -0.793364f, -0.018503f, -0.504384f, -1.51274f, -0.18131f, 1.28332f, -0.777559f, -0.096488f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1736) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1736) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { -0.033f, -0.383f, 0.116f, 0.797f, -0.99f, 0.765f, 0.915f, 0.002f, 0.228f, 0.077f, 0.597f, -0.454f, -0.629f, 0.424f, -0.89f, 0.339f, -0.484f, 0.169f }; int lda = 3; float B[] = { -0.377f, -0.451f, -0.464f, -0.673f, 0.231f, -0.712f, -0.457f, -0.588f, 0.373f, -0.754f, -0.468f, 0.433f }; int ldb = 3; float B_expected[] = { 0.643625f, 0.521931f, 0.428222f, -0.038989f, -0.231f, 0.712f, 0.003417f, 1.74795f, -0.642733f, 1.29802f, 0.468f, -0.433f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1737) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1737) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { 0.946f, -0.007f, 0.677f, -0.923f, 0.651f, -0.685f, 0.591f, 0.135f, 0.171f, 0.979f, -0.029f, -0.008f, -0.049f, 0.174f, 0.578f, 0.388f, 0.187f, -0.479f }; int lda = 3; float B[] = { -0.607f, -0.907f, -0.156f, -0.141f, -0.254f, 0.364f, 0.209f, 0.955f, 0.93f, 0.962f, 0.494f, 0.079f }; int ldb = 2; float B_expected[] = { 0.580571f, 0.853773f, 0.148563f, 0.132294f, 0.636082f, 0.804404f, 0.972367f, -0.263525f, -0.534225f, 0.214911f, 0.087341f, -0.390994f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1738) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1738) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { 0.203f, -0.791f, -0.415f, -0.56f, 0.782f, -0.691f, -0.441f, 0.545f, -0.09f, 0.595f, -0.438f, 0.952f, 0.88f, 0.944f, -0.55f, -0.762f, -0.035f, -0.949f }; int lda = 3; float B[] = { -0.035f, 0.448f, 0.487f, -0.108f, -0.482f, -0.708f, -0.317f, 0.816f, -0.547f, 0.22f, -0.654f, 0.57f }; int ldb = 2; float B_expected[] = { 0.035f, -0.448f, -0.487f, 0.108f, 0.710725f, 0.924643f, 0.472907f, -1.12904f, 1.27511f, -1.33788f, -0.672654f, -0.727442f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1739) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1739) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { -0.09f, 0.742f, 0.081f, 0.459f, -0.54f, 0.04f, 0.574f, -0.858f, 0.704f, 0.686f, -0.9f, -0.519f, 0.538f, -0.934f, 0.467f, 0.376f, 0.149f, 0.322f }; int lda = 3; float B[] = { 0.307f, 0.294f, -0.428f, -0.7f, 0.496f, 0.167f, -0.611f, 0.904f, -0.846f, -0.411f, 0.29f, 0.004f }; int ldb = 2; float B_expected[] = { -0.191025f, -0.630625f, 0.063267f, 0.452361f, -0.782713f, -1.2668f, 1.30921f, -0.06316f, -0.006288f, 0.333651f, -0.041922f, -0.093976f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1740) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1740) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-1.0f, 0.0f}; float A[] = { 0.434f, 0.691f, 0.983f, -0.481f, -0.156f, -0.117f, -0.231f, 0.526f, 0.935f, 0.417f, -0.142f, -0.541f, 0.529f, 0.014f, 0.266f, 0.086f, 0.666f, 0.033f }; int lda = 3; float B[] = { 0.972f, -0.219f, -0.735f, -0.967f, 0.084f, -0.355f, -0.152f, -0.156f, 0.267f, 0.928f, 0.708f, -0.267f }; int ldb = 2; float B_expected[] = { -0.950741f, 0.784376f, 1.10114f, 1.08842f, -0.548134f, 0.631223f, 0.396983f, 0.501114f, -0.267f, -0.928f, -0.708f, 0.267f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1741) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1741) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.25f, -0.779f, -0.138f, -0.017f, -0.319f, -0.555f, 0.674f, -0.256f }; int lda = 2; float B[] = { -0.651f, -0.525f, 0.409f, -0.932f, 0.359f, 0.321f, 0.419f, 0.027f, 0.67f, 0.328f, 0.446f, -0.615f }; int ldb = 3; float B_expected[] = { 0.0100296f, -0.216136f, 0.257045f, -0.0571445f, -0.0121016f, 0.124004f, -0.110514f, 0.0386878f, -0.1561f, -0.0050383f, 0.028185f, 0.183634f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1742) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1742) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { 0.012f, 0.978f, 0.617f, -0.361f, -0.349f, 0.712f, 0.008f, 0.305f }; int lda = 2; float B[] = { -0.771f, -0.335f, -0.565f, 0.866f, -0.516f, -0.869f, -0.097f, -0.711f, 0.308f, 0.207f, -0.459f, 0.766f }; int ldb = 3; float B_expected[] = { 0.2648f, 0.0234f, 0.0829f, -0.3163f, 0.2417f, 0.2091f, 0.272029f, 0.122445f, -0.176135f, -0.256384f, 0.285714f, -0.233939f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1743) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1743) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.063f, -0.605f, 0.473f, 0.763f, 0.548f, -0.167f, -0.825f, 0.011f }; int lda = 2; float B[] = { -0.262f, 0.135f, -0.333f, -0.671f, 0.91f, 0.874f, 0.305f, -0.255f, 0.882f, 0.883f, 0.088f, -0.473f }; int ldb = 3; float B_expected[] = { -0.0627538f, 0.0344746f, -0.131779f, -0.149516f, -0.0442507f, 0.307921f, 0.053273f, -0.089001f, 0.293086f, 0.141896f, -0.0189002f, -0.124098f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1744) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1744) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.493f, -0.852f, -0.567f, 0.21f, 0.168f, 0.666f, -0.328f, 0.803f }; int lda = 2; float B[] = { 0.24f, -0.578f, 0.293f, -0.233f, -0.348f, -0.853f, -0.145f, 0.192f, -0.785f, -0.72f, -0.508f, 0.023f }; int ldb = 3; float B_expected[] = { 0.037901f, 0.201471f, -0.104515f, 0.327095f, 0.253345f, 0.311373f, 0.0243f, -0.0721f, 0.3075f, 0.1375f, 0.1501f, -0.0577f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1745) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1745) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.089f, -0.135f, 0.987f, 0.936f, 0.353f, 0.638f, 0.845f, 0.343f }; int lda = 2; float B[] = { 0.744f, 0.445f, 0.835f, 0.273f, 0.702f, 0.03f, -0.618f, 0.141f, -0.303f, -0.399f, 0.63f, -0.037f }; int ldb = 2; float B_expected[] = { 0.0158468f, 0.0413994f, -0.292082f, -0.285588f, 0.0272724f, 0.0233892f, 0.0660084f, -0.143882f, 0.0004278f, -0.0256146f, -0.19286f, 0.114065f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1746) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1746) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { 0.187f, -0.741f, 0.287f, -0.599f, -0.293f, -0.297f, 0.778f, -0.056f }; int lda = 2; float B[] = { -0.335f, -0.713f, 0.081f, -0.589f, -0.256f, -0.809f, -0.473f, 0.418f, 0.646f, -0.447f, -0.147f, 0.314f }; int ldb = 2; float B_expected[] = { 0.1718f, 0.1804f, 0.0378414f, 0.0809182f, 0.1577f, 0.2171f, 0.118373f, -0.283147f, -0.1491f, 0.1987f, 0.1154f, -0.122836f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1747) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1747) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.259f, -0.645f, -0.09f, 0.709f, 0.729f, -0.023f, -0.792f, 0.03f }; int lda = 2; float B[] = { 0.904f, -0.402f, 0.753f, 0.104f, 0.38f, 0.944f, -0.715f, -0.378f, -0.16f, 0.254f, -0.68f, 0.183f }; int ldb = 2; float B_expected[] = { 0.185924f, -0.0771597f, 0.185827f, -0.0420162f, -0.156592f, 0.373034f, -0.201079f, -0.0256158f, 0.0051007f, 0.152025f, -0.143387f, 0.102908f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1748) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1748) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.938f, 0.25f, -0.509f, 0.377f, -0.063f, 0.166f, 0.227f, -0.24f }; int lda = 2; float B[] = { 0.756f, -0.08f, -0.657f, -0.837f, -0.714f, 0.781f, 0.239f, -0.953f, 0.26f, 0.696f, -0.183f, 0.668f }; int ldb = 2; float B_expected[] = { -0.431623f, 0.111093f, 0.2808f, 0.1854f, 0.007293f, -0.454491f, 0.0236f, 0.3098f, -0.059093f, -0.075968f, -0.0119f, -0.2187f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1749) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1749) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { 0.055f, -0.682f, 0.361f, 0.521f, -0.192f, -0.664f, -0.167f, 0.731f, -0.668f, 0.983f, 0.608f, 0.533f, -0.513f, -0.781f, 0.878f, 0.875f, 0.804f, -0.179f }; int lda = 3; float B[] = { -0.038f, -0.787f, -0.209f, -0.686f, -0.073f, -0.662f, 0.938f, -0.301f, -0.871f, 0.699f, 0.561f, 0.823f }; int ldb = 3; float B_expected[] = { 0.224558f, -0.0087435f, -0.317863f, 0.168822f, 0.105075f, 0.138035f, 0.256887f, 0.377119f, 0.113231f, 0.136832f, -0.235636f, -0.108546f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1750) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1750) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.397f, -0.154f, -0.944f, -0.137f, 0.65f, -0.49f, -0.883f, 0.273f, -0.137f, 0.655f, 0.531f, 0.676f, 0.052f, 0.03f, -0.602f, 0.002f, 0.005f, 0.984f }; int lda = 3; float B[] = { -0.446f, 0.091f, 0.793f, -0.221f, 0.386f, 0.354f, -0.063f, 0.105f, -0.128f, 0.189f, -0.079f, 0.749f }; int ldb = 3; float B_expected[] = { 0.216958f, -0.149634f, -0.25039f, 0.0074932f, -0.1512f, -0.0676f, -0.166784f, -0.100965f, 0.14955f, -0.227622f, -0.0512f, -0.2326f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1751) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1751) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.976f, -0.488f, -0.762f, -0.057f, 0.812f, 0.006f, 0.06f, -0.271f, 0.832f, -0.232f, 0.188f, -0.466f, -0.051f, -0.745f, 0.909f, -0.091f, -0.559f, 0.595f }; int lda = 3; float B[] = { 0.644f, -0.584f, 0.456f, 0.443f, -0.909f, 0.43f, 0.771f, -0.075f, -0.408f, 0.303f, 0.03f, 0.529f }; int ldb = 3; float B_expected[] = { 0.24849f, -0.168067f, -0.114085f, 0.0202884f, 0.0152508f, 0.284926f, 0.267034f, 0.0120048f, 0.0596364f, -0.0643158f, 0.284594f, 0.0837608f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1752) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1752) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { 0.924f, -0.247f, -0.131f, 0.932f, -0.415f, 0.454f, -0.539f, 0.693f, -0.725f, -0.601f, 0.565f, 0.002f, -0.118f, 0.626f, -0.968f, 0.874f, 0.156f, -0.227f }; int lda = 3; float B[] = { 0.793f, -0.15f, -0.967f, 0.821f, 0.37f, -0.572f, -0.156f, 0.106f, -0.877f, -0.297f, 0.448f, -0.576f }; int ldb = 3; float B_expected[] = { -0.2229f, 0.1243f, 0.242003f, -0.564467f, -0.0068716f, 0.568213f, 0.0362f, -0.0474f, 0.306136f, 0.0520352f, -0.336053f, 0.500406f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1753) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1753) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { 0.671f, 0.477f, 0.227f, 0.685f, -0.648f, 0.277f, -0.295f, -0.632f, 0.509f, -0.798f, 0.875f, 0.89f, -0.34f, -0.786f, -0.453f, 0.511f, -0.189f, 0.385f }; int lda = 3; float B[] = { -0.895f, -0.148f, 0.934f, 0.229f, 0.958f, -0.55f, 0.49f, 0.586f, -0.871f, 0.618f, -0.0f, -0.543f }; int ldb = 2; float B_expected[] = { 0.162976f, 0.110656f, -0.12507f, -0.0587256f, 0.138701f, 0.543589f, -0.313677f, 0.0534812f, 0.067207f, 0.12831f, -0.0729792f, -0.0098826f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1754) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1754) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.438f, -0.618f, 0.524f, 0.525f, -0.268f, -0.502f, -0.685f, 0.28f, 0.508f, 0.664f, -0.492f, 0.772f, -0.997f, 0.693f, 0.63f, -0.328f, -0.521f, -0.869f }; int lda = 3; float B[] = { 0.527f, 0.999f, -0.078f, 0.599f, 0.004f, -0.615f, -0.281f, -0.328f, 0.456f, -0.666f, 0.309f, -0.69f }; int ldb = 2; float B_expected[] = { -0.45115f, -0.650085f, -0.277633f, -0.456478f, 0.0965652f, 0.362528f, 0.1802f, 0.227951f, -0.0702f, 0.2454f, -0.0237f, 0.2379f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1755) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1755) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.454f, 0.517f, -0.794f, -0.181f, 0.292f, 0.954f, -0.93f, -0.128f, 0.123f, -0.997f, 0.325f, -0.317f, -0.988f, 0.732f, 0.637f, 0.457f, -0.665f, 0.529f }; int lda = 3; float B[] = { -0.055f, 0.803f, -0.981f, -0.627f, 0.147f, -0.656f, -0.824f, -0.366f, -0.445f, -0.151f, 0.686f, -0.368f }; int ldb = 2; float B_expected[] = { 0.156354f, 0.078881f, -0.208608f, 0.143709f, 0.219569f, 0.211768f, -0.204943f, -0.415655f, 0.191227f, 0.0071854f, 0.136999f, 0.0773624f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1756) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1756) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { 0.623f, -0.129f, -0.419f, -0.006f, 0.21f, -0.165f, 0.218f, 0.915f, 0.736f, 0.07f, 0.502f, -0.809f, 0.242f, -0.015f, 0.67f, -0.956f, 0.153f, 0.365f }; int lda = 3; float B[] = { -0.927f, 0.383f, -0.471f, 0.443f, -0.731f, -0.949f, -0.142f, -0.65f, 0.159f, -0.624f, -0.822f, 0.107f }; int ldb = 2; float B_expected[] = { 0.2398f, -0.2076f, 0.097f, -0.18f, 0.212478f, 0.297146f, 0.065877f, 0.255638f, 0.359717f, -0.0280276f, 0.426852f, -0.164392f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1757) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1757) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.628f, -0.771f, 0.827f, -0.979f, 0.395f, -0.166f, 0.88f, 0.958f }; int lda = 2; float B[] = { 0.297f, 0.49f, 0.425f, -0.386f, 0.672f, 0.992f, -0.077f, 0.761f, 0.393f, -0.605f, -0.273f, 0.725f }; int ldb = 3; float B_expected[] = { 0.177165f, -0.0328107f, -0.0662201f, -0.167954f, 0.366541f, -0.0872256f, -0.2721f, -0.389113f, -0.0674816f, 0.293174f, -0.249446f, -0.709453f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1758) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1758) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.876f, 0.752f, -0.148f, 0.972f, -0.508f, -0.752f, -0.861f, 0.074f }; int lda = 2; float B[] = { 0.878f, -0.987f, -0.896f, 0.519f, -0.355f, -0.117f, 0.329f, 0.068f, -0.644f, 0.344f, -0.187f, -0.343f }; int ldb = 3; float B_expected[] = { -0.1647f, 0.3839f, 0.2169f, -0.2453f, 0.1182f, -0.0004f, 0.292026f, 0.115771f, -0.111733f, -0.342122f, 0.0725176f, -0.0306312f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1759) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1759) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { 0.072f, -0.966f, 0.648f, 0.43f, -0.623f, -0.221f, -0.622f, 0.977f }; int lda = 2; float B[] = { 0.0f, 0.028f, 0.857f, -0.171f, -0.933f, 0.159f, 0.315f, -0.297f, -0.864f, 0.519f, -0.601f, -0.119f }; int ldb = 3; float B_expected[] = { 0.0216306f, -0.0927642f, -0.225266f, -0.0253344f, 0.0408658f, 0.302549f, 0.158132f, -0.0117036f, -0.365472f, -0.0519459f, -0.143387f, -0.172603f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1760) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1760) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.903f, -0.972f, -0.812f, 0.605f, 0.085f, -0.025f, -0.443f, 0.518f }; int lda = 2; float B[] = { -0.725f, -0.451f, 0.779f, 0.969f, 0.25f, 0.021f, 0.029f, -0.382f, 0.022f, 0.957f, 0.704f, 0.832f }; int ldb = 3; float B_expected[] = { 0.26217f, 0.073525f, -0.332173f, -0.239574f, -0.097644f, -0.003892f, 0.0295f, 0.1175f, -0.1023f, -0.2849f, -0.2944f, -0.1792f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1761) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1761) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.322f, -0.981f, 0.193f, -0.604f, 0.87f, -0.384f, 0.463f, -0.502f }; int lda = 2; float B[] = { -0.447f, 0.21f, 0.928f, -0.496f, 0.889f, -0.354f, -0.258f, -0.149f, 0.98f, -0.958f, 0.106f, -0.579f }; int ldb = 2; float B_expected[] = { 0.0692355f, 0.14563f, -0.0874638f, -0.0532654f, -0.116915f, -0.289728f, -0.242902f, 0.136003f, -0.314257f, -0.318533f, -0.400862f, 0.357622f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1762) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1762) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.924f, -0.553f, 0.985f, -0.793f, 0.406f, 0.741f, -0.956f, 0.945f }; int lda = 2; float B[] = { 0.736f, -0.81f, 0.028f, 0.474f, 0.14f, -0.03f, -0.756f, 0.923f, -0.515f, 0.532f, -0.321f, 0.326f }; int ldb = 2; float B_expected[] = { -0.1398f, 0.3166f, 0.122042f, 0.0927314f, -0.039f, 0.023f, 0.135709f, -0.314263f, 0.1013f, -0.2111f, -0.0515973f, -0.29067f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1763) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1763) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { 0.04f, -0.41f, -0.643f, 0.988f, 0.86f, -0.281f, -0.017f, 0.389f }; int lda = 2; float B[] = { 0.204f, 0.524f, -0.558f, -0.736f, 0.26f, -0.202f, -0.757f, 0.346f, 0.917f, 0.541f, -0.108f, -0.965f }; int ldb = 2; float B_expected[] = { 0.059601f, -0.396251f, 0.060088f, -0.096554f, -0.338942f, -0.0950055f, -0.073098f, -0.071831f, 0.208251f, -0.444353f, 0.106223f, -0.05488f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1764) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1764) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { 0.375f, 0.153f, -0.343f, -0.742f, 0.563f, 0.473f, 0.451f, -0.433f }; int lda = 2; float B[] = { -0.804f, -0.016f, -0.715f, -0.902f, -0.89f, 0.155f, -0.408f, 0.419f, 0.078f, -0.691f, -0.717f, -0.637f }; int ldb = 2; float B_expected[] = { -0.0094443f, 0.0821961f, 0.3047f, 0.1991f, 0.347432f, -0.0186595f, 0.0805f, -0.1665f, -0.138523f, 0.381015f, 0.2788f, 0.1194f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1765) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1765) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.867f, -0.597f, -0.577f, 0.735f, 0.827f, -0.104f, -0.861f, -0.802f, -0.288f, 0.293f, 0.593f, 0.228f, -0.469f, 0.942f, 0.193f, 0.591f, 0.241f, 0.382f }; int lda = 3; float B[] = { -0.812f, -0.874f, -0.18f, -0.81f, 0.023f, 0.352f, 0.559f, 0.237f, -0.835f, 0.037f, -0.762f, 0.782f }; int ldb = 3; float B_expected[] = { -0.331628f, -0.278177f, -0.0214727f, -0.156013f, -0.0496067f, -0.0088131f, 0.119788f, -0.469291f, -0.0804714f, -0.263663f, -0.0824792f, -0.132356f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1766) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1766) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.258f, -0.812f, -0.858f, -0.107f, -0.151f, 0.785f, 0.717f, 0.992f, -0.649f, -0.242f, -0.454f, 0.916f, 0.86f, 0.834f, -0.244f, 0.391f, 0.818f, -0.714f }; int lda = 3; float B[] = { 0.163f, 0.441f, 0.54f, 0.679f, 0.071f, -0.76f, 0.345f, -0.956f, 0.654f, -0.217f, -0.892f, 0.106f }; int ldb = 3; float B_expected[] = { 0.296566f, -0.0905963f, -0.0393822f, -0.306541f, 0.0547f, 0.2351f, -0.0059345f, 0.0071855f, -0.402014f, -0.049978f, 0.257f, -0.121f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1767) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1767) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { 0.525f, 0.182f, 0.851f, -0.348f, -0.046f, 0.839f, -0.045f, -0.149f, -0.992f, 0.588f, -0.01f, -0.409f, 0.527f, 0.263f, -0.509f, -0.026f, 0.284f, 0.507f }; int lda = 3; float B[] = { 0.909f, 0.216f, 0.38f, 0.198f, -0.412f, -0.102f, -0.456f, 0.079f, 0.504f, -0.782f, -0.88f, 0.079f }; int ldb = 3; float B_expected[] = { -0.149757f, 0.0672651f, 0.129501f, 0.054878f, -0.0469462f, 0.0277224f, 0.0550599f, -0.0598423f, 0.244521f, -0.217471f, 0.0955519f, -0.37895f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1768) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1768) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { 0.893f, -0.758f, 0.145f, 0.623f, -0.018f, -0.733f, -0.144f, -0.192f, 0.53f, 0.773f, -0.771f, 0.36f, 0.932f, -0.771f, 0.997f, -0.671f, 0.574f, -0.771f }; int lda = 3; float B[] = { 0.592f, 0.985f, -0.62f, -0.095f, -0.344f, -0.607f, 0.759f, 0.085f, -0.609f, 0.068f, -0.084f, -0.575f }; int ldb = 3; float B_expected[] = { -0.2761f, -0.2363f, 0.280628f, -0.052484f, 0.306154f, -0.187624f, -0.2362f, 0.0504f, 0.200236f, -0.133908f, 0.0536278f, 0.0659354f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1769) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1769) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { 0.503f, -0.057f, -0.581f, -0.77f, -0.907f, -0.843f, 0.56f, -0.554f, 0.054f, 0.988f, 0.868f, -0.627f, 0.645f, -0.246f, -0.958f, 0.66f, 0.956f, 0.99f }; int lda = 3; float B[] = { 0.282f, -0.442f, 0.564f, -0.691f, -0.743f, 0.113f, -0.395f, 0.312f, -0.167f, -0.568f, 0.508f, 0.912f }; int ldb = 2; float B_expected[] = { 0.180092f, 0.260648f, -0.045069f, -0.102868f, -0.0964434f, -0.432702f, -0.0404678f, 0.280779f, 0.254359f, 0.0411062f, -0.453454f, 0.0281672f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1770) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1770) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { -0.851f, 0.296f, -0.683f, -0.53f, 0.38f, -0.837f, 0.977f, 0.189f, -0.624f, -0.664f, 0.73f, -0.882f, 0.105f, -0.868f, 0.362f, -0.006f, -0.435f, 0.757f }; int lda = 3; float B[] = { -0.259f, -0.091f, 0.606f, -0.983f, -0.238f, 0.057f, 0.358f, 0.18f, -0.71f, 0.058f, 0.511f, 0.717f }; int ldb = 2; float B_expected[] = { 0.241746f, 0.119591f, -0.0907286f, 0.148899f, 0.141237f, -0.0716576f, -0.205866f, -0.078918f, 0.2072f, -0.0884f, -0.225f, -0.164f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1771) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1771) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { 0.956f, 0.972f, 0.771f, 0.187f, 0.948f, 0.303f, -0.854f, 0.123f, 0.704f, 0.152f, 0.347f, 0.595f, -0.865f, 0.75f, -0.041f, -0.572f, 0.749f, 0.216f }; int lda = 3; float B[] = { -0.821f, -0.098f, 0.347f, -0.639f, 0.314f, -0.009f, -0.725f, 0.45f, 0.536f, 0.801f, 0.431f, 0.936f }; int ldb = 2; float B_expected[] = { 0.193607f, -0.29931f, 0.18163f, 0.255513f, 0.127098f, -0.0503344f, 0.101243f, 0.0097718f, -0.0060322f, -0.148016f, -0.251411f, -0.0777231f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1772) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1772) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; float alpha[2] = {-0.3f, 0.1f}; float A[] = { 0.78f, -0.205f, 0.073f, -0.859f, 0.568f, -0.599f, -0.947f, -0.514f, 0.835f, 0.176f, 0.27f, -0.617f, 0.171f, -0.074f, 0.939f, -0.469f, -0.471f, 0.25f }; int lda = 3; float B[] = { -0.279f, 0.16f, -0.495f, 0.658f, 0.071f, 0.557f, -0.116f, 0.095f, -0.104f, 0.503f, -0.775f, -0.03f }; int ldb = 2; float B_expected[] = { 0.0677f, -0.0759f, 0.0827f, -0.2469f, -0.0068598f, -0.107386f, 0.243424f, 0.0129156f, 0.142748f, -0.254568f, 0.461939f, -0.154419f }; cblas_ctrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], flteps, "ctrmm(case 1773) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], flteps, "ctrmm(case 1773) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.463, 0.033, -0.929, 0.949, 0.864, 0.986, 0.393, 0.885 }; int lda = 2; double B[] = { -0.321, -0.852, -0.337, -0.175, 0.607, -0.613, 0.688, 0.973, -0.331, -0.35, 0.719, -0.553 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1774) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1774) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.608, -0.393, 0.921, 0.282, -0.857, -0.286, -0.31, -0.057 }; int lda = 2; double B[] = { -0.548, 0.728, 0.391, -0.506, 0.186, 0.97, -0.435, 0.375, -0.995, -0.496, 0.99, 0.186 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1775) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1775) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.253, 0.969, 0.654, -0.016, -0.774, -0.11, -0.101, -0.287 }; int lda = 2; double B[] = { -0.34, -0.268, -0.52, 0.021, -0.875, 0.98, 0.255, 0.564, -0.478, -0.818, -0.043, 0.224 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1776) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1776) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { -0.64, -0.222, 0.922, 0.417, -0.724, 0.012, 0.418, 0.39 }; int lda = 2; double B[] = { 0.619, -0.024, -0.068, 0.219, 0.374, -0.937, 0.79, 0.166, -0.92, 0.753, -0.017, 0.076 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1777) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1777) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.57, 0.987, 0.116, -0.691, -0.603, -0.778, 0.14, -0.073 }; int lda = 2; double B[] = { 0.421, -0.055, 0.92, 0.664, 0.835, 0.861, -0.392, -0.897, -0.346, 0.516, -0.068, -0.156 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1778) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1778) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { -0.754, 0.904, 0.089, 0.206, 0.974, -0.946, -0.55, -0.675 }; int lda = 2; double B[] = { -0.42, -0.372, 0.628, 0.148, 0.344, -0.924, -0.802, -0.307, 0.427, 0.116, 0.916, -0.384 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1779) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1779) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.152, -0.898, -0.024, 0.719, 0.992, -0.841, 0.901, 0.202 }; int lda = 2; double B[] = { 0.243, -0.811, 0.68, 0.118, 0.946, -0.632, 0.729, -0.942, 0.308, 0.507, -0.838, 0.594 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1780) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1780) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.119, -0.849, 0.425, -0.273, -0.918, 0.196, -0.871, -0.39 }; int lda = 2; double B[] = { 0.709, 0.33, -0.207, 0.012, -0.017, 0.787, -0.385, 0.739, -0.874, 0.188, -0.039, 0.692 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1781) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1781) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.837, -0.603, 0.755, -0.92, 0.892, -0.009, -0.741, 0.271, -0.325, -0.861, 0.902, -0.088, 0.091, 0.256, 0.209, -0.724, 0.28, -0.604 }; int lda = 3; double B[] = { 0.455, -0.215, -0.668, 0.917, -0.985, 0.477, 0.564, -0.524, -0.202, -0.53, -0.88, -0.688 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1782) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1782) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { -0.991, 0.253, 0.813, 0.497, -0.268, 0.623, 0.82, -0.946, -0.883, 0.333, -0.265, -0.371, 0.131, -0.812, -0.365, 0.45, 0.929, -0.704 }; int lda = 3; double B[] = { 0.783, -0.756, 0.635, 0.56, 0.434, -0.831, -0.34, -0.531, -0.277, 0.874, 0.986, 0.157 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1783) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1783) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.265, -0.592, -0.721, -0.838, -0.952, 0.115, -0.34, -0.789, -0.265, -0.779, -0.676, 0.048, 0.78, -0.272, -0.651, 0.272, 0.8, -0.693 }; int lda = 3; double B[] = { -0.609, 0.028, -0.818, 0.289, -0.41, -0.25, -0.917, 0.463, 0.942, 0.692, -0.516, 0.378 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1784) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1784) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.962, 0.945, -0.58, -0.358, -0.769, 0.751, -0.068, -0.321, 0.938, 0.183, -0.17, 0.251, -0.248, -0.092, -0.818, 0.928, -0.059, -0.222 }; int lda = 3; double B[] = { 0.015, -0.852, -0.565, 0.16, -0.095, 0.073, 0.405, 0.509, 0.082, -0.478, -0.365, 0.824 }; int ldb = 3; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1785) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1785) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.616, 0.669, 0.323, -0.238, 0.153, 0.891, -0.4, 0.996, 0.689, -0.736, -0.259, -0.707, 0.993, 0.13, -0.829, -0.564, -0.09, 0.118 }; int lda = 3; double B[] = { 0.113, 0.724, 0.148, -0.309, -0.833, -0.791, 0.354, -0.528, 0.313, 0.421, 0.28, 0.371 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1786) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1786) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { 0.957, -0.713, 0.976, 0.183, -0.145, -0.858, -0.497, -0.605, -0.742, 0.686, 0.272, 0.83, -0.606, -0.099, -0.807, 0.767, 0.254, 0.244 }; int lda = 3; double B[] = { -0.124, -0.19, 0.665, -0.74, 0.505, -0.194, 0.588, -0.421, -0.727, 0.308, -0.802, -0.278 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1787) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1787) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { -0.649, 0.856, 0.969, 0.382, 0.963, 0.567, 0.599, 0.018, -0.924, 0.578, -0.531, -0.091, -0.454, -0.834, 0.97, -0.126, -0.859, 0.879 }; int lda = 3; double B[] = { 0.35, 0.824, -0.084, 0.662, -0.752, 0.872, 0.129, 0.969, -0.539, 0.907, 0.316, -0.675 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1788) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1788) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 111; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0}; double A[] = { -0.315, -0.459, 0.327, -0.132, -0.283, 0.173, -0.356, -0.427, 0.508, 0.347, -0.804, -0.849, 0.779, 0.673, 0.019, -0.869, 0.999, -0.338 }; int lda = 3; double B[] = { 0.678, -0.171, 0.136, -0.268, -0.578, -0.431, 0.978, -0.749, 0.333, -0.757, 0.658, 0.456 }; int ldb = 2; double B_expected[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1789) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1789) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.532, -0.877, 0.308, -0.807, 0.013, 0.891, 0.077, -0.004 }; int lda = 2; double B[] = { 0.634, -0.969, 0.228, -0.097, 0.419, 0.903, 0.21, 0.313, -0.819, -0.028, 0.574, -0.762 }; int ldb = 3; double B_expected[] = { 0.004051, -0.1187101, 0.0148352, -0.0206365, 0.0847859, 0.0569023, 0.0786829, -0.0569289, 0.0212752, -0.007123, 0.0120979, 0.0898923 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1790) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1790) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.77, -0.037, -0.021, -0.831, -0.663, -0.241, -0.273, -0.023 }; int lda = 2; double B[] = { 0.354, -0.95, -0.944, -0.497, 0.741, 0.084, -0.3, 0.023, -0.056, 0.063, -0.117, -0.498 }; int ldb = 3; double B_expected[] = { 0.095, 0.0354, 0.0497, -0.0944, -0.0084, 0.0741, 0.0251224, -0.1096884, -0.0857901, -0.0449183, 0.1115535, -0.0062757 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1791) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1791) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.623, 0.379, 0.903, -0.378, -0.088, 0.24, -0.964, 0.558 }; int lda = 2; double B[] = { -0.137, 0.706, 0.457, 0.399, -0.69, -0.7, 0.34, 0.479, 0.539, -0.133, 0.876, -0.347 }; int ldb = 3; double B_expected[] = { 0.0452313, -0.0327103, -0.006569, -0.0451444, -0.0415366, 0.0701362, 0.0272036, -0.0595042, -0.0428974, -0.0445382, -0.0823316, -0.0650838 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1792) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1792) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { 0.253, 0.657, 0.636, 0.827, -0.107, 0.353, 0.425, -0.365 }; int lda = 2; double B[] = { -0.402, -0.409, 0.421, -0.333, -0.771, -0.099, 0.697, -0.812, -0.653, 0.823, 0.994, 0.998 }; int ldb = 3; double B_expected[] = { 0.0076075, -0.0189943, 0.065157, 0.0200352, -0.0145096, -0.1229652, 0.0812, 0.0697, -0.0823, -0.0653, -0.0998, 0.0994 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1793) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1793) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.57, -0.805, -0.66, -0.421, 0.643, -0.534, -0.988, -0.581 }; int lda = 2; double B[] = { -0.279, -0.253, 0.976, -0.051, 0.294, 0.451, 0.187, -0.177, 0.31, -0.714, -0.104, -0.177 }; int ldb = 2; double B_expected[] = { -0.0368805, -0.0044635, 0.0530361, -0.1308418, 0.049374, 0.0195475, -0.0199226, 0.0142283, -0.015743, -0.075147, 0.0389342, -0.0182031 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1794) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1794) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.594, 0.273, 0.457, 0.295, 0.434, -0.227, -0.662, 0.623 }; int lda = 2; double B[] = { -0.582, -0.581, 0.259, -0.833, -0.864, -0.284, 0.965, -0.459, -0.539, -0.551, -0.969, 0.09 }; int ldb = 2; double B_expected[] = { 0.0581, -0.0582, 0.095304, -0.0125475, 0.0284, -0.0864, 0.0386128, 0.0525556, 0.0551, -0.0539, 0.0026781, -0.1328003 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1795) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1795) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { 0.398, 0.323, 0.31, 0.718, 0.181, 0.665, 0.402, 0.317 }; int lda = 2; double B[] = { 0.812, -0.244, -0.415, 0.602, 0.901, -0.017, 0.786, -0.119, 0.448, -0.75, 0.851, 0.172 }; int ldb = 2; double B_expected[] = { -0.0053814, -0.0158898, -0.0110449, -0.0357664, -0.0811715, 0.0693191, -0.0201324, 0.0353695, -0.0510542, 0.0560868, -0.0338911, 0.0287578 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1796) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1796) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { 0.265, -0.578, 0.218, -0.093, -0.172, 0.414, 0.448, 0.696 }; int lda = 2; double B[] = { 0.02, -0.254, 0.152, 0.304, 0.289, 0.247, 0.705, 0.419, -0.735, 0.788, -0.942, -0.71 }; int ldb = 2; double B_expected[] = { 0.0201864, 0.0081408, -0.0304, 0.0152, -0.0272777, 0.0481657, -0.0419, 0.0705, -0.0720826, -0.1006386, 0.071, -0.0942 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1797) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1797) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { 0.971, 0.532, 0.175, 0.455, 0.191, 0.493, 0.882, -0.944, 0.358, 0.142, -0.065, 0.632, -0.319, -0.101, 0.578, 0.476, -0.773, 0.912 }; int lda = 3; double B[] = { 0.018, -0.131, 0.964, -0.467, -0.729, -0.794, 0.874, 0.361, 0.744, -0.958, 0.162, 0.555 }; int ldb = 3; double B_expected[] = { 0.0271781, 0.0720558, 0.0439416, 0.0960619, 0.0051086, 0.1287645, -0.117224, 0.0980019, 0.0171007, 0.0041098, 0.0281271, -0.0631386 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1798) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1798) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.506, -0.263, -0.994, 0.681, 0.889, -0.5, -0.912, 0.741, -0.329, -0.912, 0.332, -0.001, -0.484, 0.942, -0.728, -0.104, -0.216, 0.679 }; int lda = 3; double B[] = { 0.562, -0.354, 0.742, -0.177, -0.627, -0.762, 0.476, 0.758, 0.675, -0.504, -0.33, 0.186 }; int ldb = 3; double B_expected[] = { 0.0036678, -0.0993414, 0.0429357, 0.0533074, 0.0762, -0.0627, -0.2049005, -0.0052096, 0.0441918, 0.0565626, -0.0186, -0.033 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1799) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1799) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.341, -0.27, 0.001, 0.939, 0.714, 0.803, -0.508, -0.331, -0.563, -0.725, -0.902, -0.793, 0.461, 0.127, -0.597, -0.498, 0.394, -0.019 }; int lda = 3; double B[] = { 0.015, 0.803, 0.497, 0.667, 0.803, 0.775, 0.026, 0.908, 0.535, -0.111, 0.379, -0.036 }; int ldb = 3; double B_expected[] = { 0.0277873, 0.0211695, 0.1148735, 0.0461937, -0.0016476, 0.0271498, 0.0316648, 0.0236294, 0.0795252, -0.009434, -0.0200342, -0.0329361 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1800) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1800) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { 0.132, 0.903, -0.235, -0.294, -0.09, 0.74, -0.707, -0.855, 0.632, 0.543, -0.558, -0.416, -0.99, -0.088, -0.189, -0.371, -0.844, -0.737 }; int lda = 3; double B[] = { -0.257, 0.159, 0.689, 0.785, 0.398, -0.128, -0.098, -0.735, -0.307, 0.032, 0.517, 0.049 }; int ldb = 3; double B_expected[] = { -0.0159, -0.0257, -0.0892322, 0.1006644, 0.0666778, 0.0827436, 0.0735, -0.0098, -0.0635435, -0.0866139, -0.0893123, 0.0619235 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1801) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1801) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { 0.993, 0.709, 0.225, -0.704, -0.396, 0.656, -0.588, -0.085, -0.024, 0.264, -0.988, -0.67, 0.665, -0.165, -0.778, -0.43, 0.71, -0.35 }; int lda = 3; double B[] = { 0.321, 0.614, 0.058, 0.983, 0.153, -0.647, 0.342, -0.518, -0.071, -0.533, -0.424, 0.283 }; int ldb = 2; double B_expected[] = { -0.0861992, -0.0396692, -0.155091, -0.1119744, -0.0501124, -0.0006816, -0.0064866, 0.0580106, 0.035358, -0.023696, -0.034933, -0.020199 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1802) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1802) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { 0.034, -0.02, -0.401, -0.892, 0.329, -0.799, -0.018, 0.564, 0.095, 0.965, -0.105, 0.756, -0.583, -0.706, -0.436, -0.145, 0.921, 0.416 }; int lda = 3; double B[] = { 0.972, 0.157, -0.029, 0.674, 0.914, 0.434, 0.132, -0.116, -0.907, 0.316, -0.423, 0.321 }; int ldb = 2; double B_expected[] = { -0.1120798, 0.1462649, -0.0862031, 0.0507283, -0.0427739, 0.1355272, 0.0194621, 0.0362973, -0.0316, -0.0907, -0.0321, -0.0423 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1803) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1803) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { -0.195, -0.36, 0.834, -0.505, -0.87, -0.787, 0.997, 0.965, -0.046, -0.591, 0.082, 0.552, 0.414, -0.013, -0.048, -0.766, 0.728, 0.088 }; int lda = 3; double B[] = { -0.916, -0.162, -0.863, 0.67, -0.079, -0.27, -0.191, 0.995, 0.981, -0.25, -0.149, 0.248 }; int ldb = 2; double B_expected[] = { -0.036135, 0.01203, -0.018003, 0.0409485, -0.0386581, -0.100169, -0.1061706, 0.0215439, -0.0700412, 0.1548156, -0.0239871, 0.0582902 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1804) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1804) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 112; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 0.1}; double A[] = { 0.553, -0.63, -0.079, 0.351, 0.865, -0.062, 0.165, -0.634, -0.513, 0.216, -0.521, 0.349, 0.54, 0.545, -0.719, -0.306, 0.501, 0.757 }; int lda = 3; double B[] = { -0.311, 0.088, -0.328, 0.977, 0.659, -0.06, -0.276, 0.872, -0.734, -0.01, -0.668, -0.327 }; int ldb = 2; double B_expected[] = { -0.0088, -0.0311, -0.0977, -0.0328, 0.0176113, 0.0652681, -0.0679689, -0.0593015, -0.0346653, -0.1319958, 0.0012195, -0.1051678 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1805) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1805) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { 0.993, -0.018, 0.162, -0.222, 0.188, 0.672, -0.675, -0.345 }; int lda = 2; double B[] = { 0.476, -0.009, 0.725, -0.925, -0.245, 0.308, 0.515, 0.1, -0.072, -0.757, 0.212, 0.571 }; int ldb = 3; double B_expected[] = { 0.000369, 0.47283, 0.905475, 0.736575, -0.301434, -0.248829, -0.214389, -0.303015, -0.497235, 0.632565, 0.316779, -0.448161 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1806) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1806) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { -0.78, 0.346, -0.663, -0.86, -0.496, -0.154, 0.356, 0.228 }; int lda = 2; double B[] = { 0.578, 0.492, 0.775, 0.353, 0.198, -0.519, -0.52, -0.677, -0.438, 0.313, 0.941, -0.56 }; int ldb = 3; double B_expected[] = { -0.492, 0.578, -0.353, 0.775, 0.519, 0.198, 0.506116, -1.326334, -0.745461, -1.255405, 0.045623, 1.256066 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1807) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1807) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { 0.455, 0.442, 0.062, 0.815, 0.03, 0.55, 0.592, -0.487 }; int lda = 2; double B[] = { -0.451, 0.01, 0.174, -0.775, 0.22, -0.644, 0.858, -0.004, 0.59, -0.395, -0.943, 0.824 }; int ldb = 3; double B_expected[] = { 0.268128, -0.177245, 0.765883, -0.46293, -0.15311, 0.240362, -0.415478, 0.509884, -0.05349, 0.541645, -0.028567, -0.959544 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1808) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1808) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { -0.268, -0.886, -0.805, 0.875, 0.481, 0.095, -0.057, 0.605 }; int lda = 2; double B[] = { 0.708, -0.638, 0.408, -0.512, 0.175, 0.181, -0.919, -0.126, 0.708, -0.51, 0.212, 0.114 }; int ldb = 3; double B_expected[] = { 0.611301, 0.253991, 0.82457, 0.700098, -0.215694, 0.287802, 0.126, -0.919, 0.51, 0.708, -0.114, 0.212 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1809) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1809) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { 0.881, 0.555, 0.774, 0.148, -0.915, 0.336, 0.103, 0.381 }; int lda = 2; double B[] = { 0.163, 0.963, -0.017, 0.921, 0.809, 0.846, 0.905, -0.43, 0.894, -0.371, -0.988, -0.487 }; int ldb = 2; double B_expected[] = { -0.757938, 0.678068, 0.834573, 0.523573, -0.296331, 1.182259, 1.435009, -0.526594, 0.823021, 0.581709, -0.365348, -1.229977 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1810) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1810) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { 0.719, -0.513, 0.169, -0.524, 0.352, 0.823, -0.741, -0.355 }; int lda = 2; double B[] = { 0.717, 0.052, -0.777, 0.277, -0.962, 0.894, 0.905, -0.216, -0.707, 0.016, 0.481, 0.935 }; int ldb = 2; double B_expected[] = { -0.052, 0.717, 0.294787, -0.48182, -0.894, -0.962, -0.890414, 1.302138, -0.016, -0.707, -1.522493, 0.245304 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1811) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1811) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { 0.501, -0.136, -0.502, 0.669, -0.498, -0.4, -0.518, 0.833 }; int lda = 2; double B[] = { -0.385, 0.88, 0.726, 0.911, 0.839, 0.573, -0.881, -0.517, -0.861, -0.278, 0.941, 0.822 }; int ldb = 2; double B_expected[] = { 0.554496, -0.067558, 1.076656, 0.382795, -1.2501, 0.4388, -1.001679, 0.025697, 1.298547, -0.316017, 1.209649, 0.197288 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1812) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1812) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { 0.049, 0.641, -0.9, 0.246, -0.734, -0.686, 0.76, -0.869 }; int lda = 2; double B[] = { -0.37, 0.206, -0.731, -0.573, 0.638, -0.417, -0.29, -0.719, 0.107, -0.333, 0.556, 0.124 }; int ldb = 2; double B_expected[] = { -0.901526, 0.146942, 0.573, -0.731, -0.30144, 0.722126, 0.719, -0.29, 0.581376, -0.362896, -0.124, 0.556 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1813) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1813) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { 0.553, 0.338, 0.229, -0.828, -0.594, -0.036, -0.335, -0.249, 0.083, -0.197, 0.995, 0.85, -0.988, 0.596, -0.254, 0.179, 0.441, -0.859 }; int lda = 3; double B[] = { -0.058, -0.225, 0.884, 0.348, 0.123, -0.151, 0.891, 0.711, -0.792, 0.552, 0.033, -0.178 }; int ldb = 3; double B_expected[] = { -0.800945, -0.261458, 0.051763, -0.001149, -0.039066, 0.183952, 0.330423, 0.081423, 0.315368, -0.292945, 0.050151, 0.167455 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1814) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1814) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { -0.257, -0.565, -0.123, 0.129, 0.817, -0.516, -0.613, -0.42, -0.494, 0.122, -0.593, -0.972, -0.695, -0.968, 0.848, -0.2, -0.17, 0.436 }; int lda = 3; double B[] = { -0.274, 0.105, -0.899, -0.33, -0.318, -0.096, -0.237, 0.327, 0.046, 0.584, -0.459, -0.182 }; int ldb = 3; double B_expected[] = { -0.019041, -0.416263, 0.582168, -0.617114, 0.096, -0.318, 0.136304, -0.448413, -0.245778, 0.495091, 0.182, -0.459 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1815) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1815) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { -0.127, 0.025, 0.036, 0.612, 0.773, 0.953, 0.074, -0.006, 0.373, 0.292, -0.052, -0.319, -0.878, -0.401, 0.486, -0.493, -0.316, 0.003 }; int lda = 3; double B[] = { 0.794, -0.666, -0.406, 0.622, -0.512, -0.761, 0.161, -0.137, -0.626, 0.408, 0.536, 0.66 }; int ldb = 3; double B_expected[] = { -0.064732, -0.117488, -0.306038, 0.092938, -1.247288, -0.774519, -0.013374, -0.023872, -0.325804, -0.101626, 0.135651, -0.759197 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1816) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1816) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { -0.724, -0.423, 0.028, 0.043, 0.812, -0.568, 0.294, -0.375, -0.85, -0.119, -0.338, -0.415, 0.976, 0.507, 0.913, 0.697, 0.323, 0.206 }; int lda = 3; double B[] = { 0.427, 0.621, -0.212, -0.942, -0.08, 0.416, 0.465, -0.972, -0.529, -0.252, -0.19, 0.073 }; int ldb = 3; double B_expected[] = { -0.621, 0.427, 0.599301, -0.319337, -0.093325, -0.198531, 0.972, 0.465, 0.363393, -0.02779, 0.97279, -0.887585 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1817) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1817) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { 0.501, -0.632, 0.663, 0.151, -0.523, -0.71, -0.811, 0.8, -0.06, 0.994, -0.962, 0.827, -0.543, 0.719, -0.264, -0.942, 0.365, 0.051 }; int lda = 3; double B[] = { -0.974, 0.094, -0.533, 0.633, -0.982, -0.383, -0.297, 0.734, -0.092, -0.15, 0.215, -0.232 }; int ldb = 2; double B_expected[] = { -0.675337, -0.115274, 0.406006, -0.122575, -0.952024, -0.156194, -0.514956, 0.9092, 0.050058, -0.04123, 0.095645, 0.066643 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1818) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1818) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { 0.669, 0.332, -0.661, 0.611, 0.279, -0.133, -0.033, 0.06, 0.788, -0.407, -0.644, 0.958, 0.247, -0.161, 0.125, -0.184, 0.041, -0.045 }; int lda = 3; double B[] = { -0.603, 0.88, 0.668, -0.152, 0.082, 0.033, 0.733, -0.557, 0.722, 0.024, -0.754, 0.458 }; int ldb = 2; double B_expected[] = { -0.996161, -0.429256, 0.185867, 0.350415, -0.168848, 0.167834, 0.638486, 0.554478, -0.024, 0.722, -0.458, -0.754 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1819) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1819) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 113; int diag = 131; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { -0.91, 0.05, -0.944, 0.748, -0.712, 0.619, -0.28, -0.906, 0.314, 0.943, -0.719, -0.983, 0.474, -0.115, -0.859, 0.837, 0.364, -0.164 }; int lda = 3; double B[] = { -0.278, -0.34, 0.584, 0.43, -0.794, -0.465, -0.65, 0.461, 0.24, 0.003, 0.948, -0.778 }; int ldb = 2; double B_expected[] = { -0.3233, 0.23598, 0.4205, -0.50994, -1.131636, -0.679699, 0.085048, 0.000967, -0.008447, 1.102325, 1.765785, 0.337213 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1820) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1820) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int trans = 113; int diag = 132; int M = 2; int N = 3; double alpha[2] = {0, 1}; double A[] = { -0.39, -0.916, 0.257, -0.082, -0.802, 0.215, -0.155, 0.911, -0.099, 0.41, 0.057, 0.105, 0.94, -0.17, -0.714, -0.861, 0.292, -0.231 }; int lda = 3; double B[] = { -0.453, -0.542, 0.135, 0.518, -0.199, 0.776, 0.784, -0.28, -0.499, -0.377, -0.795, -0.965 }; int ldb = 2; double B_expected[] = { 0.542, -0.453, -0.518, 0.135, -0.59956, -0.270977, 0.135804, 0.776219, -0.220206, -0.182087, 1.507741, -0.776612 }; cblas_ztrmm(order, side, uplo, trans, diag, M, N, alpha, A, lda, B, ldb); { int i; for (i = 0; i < 6; i++) { gsl_test_rel(B[2*i], B_expected[2*i], dbleps, "ztrmm(case 1821) real"); gsl_test_rel(B[2*i+1], B_expected[2*i+1], dbleps, "ztrmm(case 1821) imag"); }; }; }; } gsl/cblas/drotg.c0000644000175000017500000000030413536674414012276 0ustar eddedd#include #include #include "cblas.h" void cblas_drotg (double *a, double *b, double *c, double *s) { #define BASE double #include "source_rotg.h" #undef BASE } gsl/cblas/cdotc_sub.c0000644000175000017500000000045413536674414013132 0ustar eddedd#include #include #include "cblas.h" void cblas_cdotc_sub (const int N, const void *X, const int incX, const void *Y, const int incY, void *result) { #define BASE float #define CONJ_SIGN (-1.0) #include "source_dot_c.h" #undef CONJ_SIGN #undef BASE } gsl/cblas/hypot.c0000644000175000017500000000065613536674414012334 0ustar eddedd#include static double xhypot (const double x, const double y); static double xhypot (const double x, const double y) { double xabs = fabs(x) ; double yabs = fabs(y) ; double min, max; if (xabs < yabs) { min = xabs ; max = yabs ; } else { min = yabs ; max = xabs ; } if (min == 0) { return max ; } { double u = min / max ; return max * sqrt (1 + u * u) ; } } gsl/cblas/dsymm.c0000644000175000017500000000073313536674414012316 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_dsymm (const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const double alpha, const double *A, const int lda, const double *B, const int ldb, const double beta, double *C, const int ldc) { #define BASE double #include "source_symm_r.h" #undef BASE } gsl/cblas/xerbla.c0000644000175000017500000000226613536674414012445 0ustar eddedd/* xerbla.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include "cblas.h" void cblas_xerbla (int p, const char *rout, const char *form, ...) { va_list ap; va_start (ap, form); if (p) { fprintf (stderr, "Parameter %d to routine %s was incorrect\n", p, rout); } vfprintf (stderr, form, ap); va_end (ap); abort (); } gsl/cblas/dsymv.c0000644000175000017500000000064513536674414012331 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dsymv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY) { #define BASE double #include "source_symv.h" #undef BASE } gsl/cblas/source_tbmv_c.h0000644000175000017500000001432113536674414014022 0ustar eddedd/* blas/source_tbmv_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { const int conj = (TransA == CblasConjTrans) ? -1 : 1; const int Trans = (TransA != CblasConjTrans) ? TransA : CblasTrans; const int nonunit = (Diag == CblasNonUnit); INDEX i, j; CHECK_ARGS10(TBMV,order,Uplo,TransA,Diag,N,K,A,lda,X,incX); if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasLower)) { /* form x := A*x */ INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { BASE temp_r = 0.0; BASE temp_i = 0.0; const INDEX j_min = i + 1; const INDEX j_max = GSL_MIN(N, i + K + 1); INDEX jx = OFFSET(N, incX) + incX * j_min; for (j = j_min; j < j_max; j++) { const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); const BASE A_real = CONST_REAL(A, lda * i + (j - i)); const BASE A_imag = conj * CONST_IMAG(A, lda * i + (j - i)); temp_r += A_real * x_real - A_imag * x_imag; temp_i += A_real * x_imag + A_imag * x_real; jx += incX; } if (nonunit) { const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE A_real = CONST_REAL(A, lda * i + 0); const BASE A_imag = conj * CONST_IMAG(A, lda * i + 0); REAL(X, ix) = temp_r + (A_real * x_real - A_imag * x_imag); IMAG(X, ix) = temp_i + (A_real * x_imag + A_imag * x_real); } else { REAL(X, ix) += temp_r; IMAG(X, ix) += temp_i; } ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX) + (N - 1) * incX; for (i = N; i > 0 && i--;) { /* N-1 ... 0 */ BASE temp_r = 0.0; BASE temp_i = 0.0; const INDEX j_min = (K > i ? 0 : i - K); const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); const BASE A_real = CONST_REAL(A, lda * i + (K - i + j)); const BASE A_imag = conj * CONST_IMAG(A, lda * i + (K - i + j)); temp_r += A_real * x_real - A_imag * x_imag; temp_i += A_real * x_imag + A_imag * x_real; jx += incX; } if (nonunit) { const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE A_real = CONST_REAL(A, lda * i + K); const BASE A_imag = conj * CONST_IMAG(A, lda * i + K); REAL(X, ix) = temp_r + (A_real * x_real - A_imag * x_imag); IMAG(X, ix) = temp_i + (A_real * x_imag + A_imag * x_real); } else { REAL(X, ix) += temp_r; IMAG(X, ix) += temp_i; } ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasLower)) { /* form x := A'*x */ INDEX ix = OFFSET(N, incX) + (N - 1) * incX; for (i = N; i > 0 && i--;) { /* N-1 ... 0 */ BASE temp_r = 0.0; BASE temp_i = 0.0; const INDEX j_min = (K > i ? 0 : i - K); const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); const BASE A_real = CONST_REAL(A, lda * j + (i - j)); const BASE A_imag = conj * CONST_IMAG(A, lda * j + (i - j)); temp_r += A_real * x_real - A_imag * x_imag; temp_i += A_real * x_imag + A_imag * x_real; jx += incX; } if (nonunit) { const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE A_real = CONST_REAL(A, lda * i + 0); const BASE A_imag = conj * CONST_IMAG(A, lda * i + 0); REAL(X, ix) = temp_r + (A_real * x_real - A_imag * x_imag); IMAG(X, ix) = temp_i + (A_real * x_imag + A_imag * x_real); } else { REAL(X, ix) += temp_r; IMAG(X, ix) += temp_i; } ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { BASE temp_r = 0.0; BASE temp_i = 0.0; const INDEX j_min = i + 1; const INDEX j_max = GSL_MIN(N, i + K + 1); INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); const BASE A_real = CONST_REAL(A, lda * j + (K - j + i)); const BASE A_imag = conj * CONST_IMAG(A, lda * j + (K - j + i)); temp_r += A_real * x_real - A_imag * x_imag; temp_i += A_real * x_imag + A_imag * x_real; jx += incX; } if (nonunit) { const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE A_real = CONST_REAL(A, lda * i + K); const BASE A_imag = conj * CONST_IMAG(A, lda * i + K); REAL(X, ix) = temp_r + (A_real * x_real - A_imag * x_imag); IMAG(X, ix) = temp_i + (A_real * x_imag + A_imag * x_real); } else { REAL(X, ix) += temp_r; IMAG(X, ix) += temp_i; } ix += incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/test_hpr.c0000644000175000017500000001141213536674414013011 0ustar eddedd#include #include #include #include #include "tests.h" void test_hpr (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; int N = 2; float alpha = 0.1f; float Ap[] = { -0.273f, -0.499f, -0.305f, -0.277f, 0.238f, -0.369f }; float X[] = { 0.638f, -0.905f, 0.224f, 0.182f }; int incX = -1; float Ap_expected[] = { -0.26467f, 0.0f, -0.30718f, -0.245116f, 0.360607f, 0.0f }; cblas_chpr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], flteps, "chpr(case 1418) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], flteps, "chpr(case 1418) imag"); }; }; }; { int order = 101; int uplo = 122; int N = 2; float alpha = 0.1f; float Ap[] = { -0.273f, -0.499f, -0.305f, -0.277f, 0.238f, -0.369f }; float X[] = { 0.638f, -0.905f, 0.224f, 0.182f }; int incX = -1; float Ap_expected[] = { -0.26467f, 0.0f, -0.30718f, -0.308884f, 0.360607f, 0.0f }; cblas_chpr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], flteps, "chpr(case 1419) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], flteps, "chpr(case 1419) imag"); }; }; }; { int order = 102; int uplo = 121; int N = 2; float alpha = 0.1f; float Ap[] = { -0.273f, -0.499f, -0.305f, -0.277f, 0.238f, -0.369f }; float X[] = { 0.638f, -0.905f, 0.224f, 0.182f }; int incX = -1; float Ap_expected[] = { -0.26467f, 0.0f, -0.30718f, -0.245116f, 0.360607f, 0.0f }; cblas_chpr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], flteps, "chpr(case 1420) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], flteps, "chpr(case 1420) imag"); }; }; }; { int order = 102; int uplo = 122; int N = 2; float alpha = 0.1f; float Ap[] = { -0.273f, -0.499f, -0.305f, -0.277f, 0.238f, -0.369f }; float X[] = { 0.638f, -0.905f, 0.224f, 0.182f }; int incX = -1; float Ap_expected[] = { -0.26467f, 0.0f, -0.30718f, -0.308884f, 0.360607f, 0.0f }; cblas_chpr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], flteps, "chpr(case 1421) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], flteps, "chpr(case 1421) imag"); }; }; }; { int order = 101; int uplo = 121; int N = 2; double alpha = 1; double Ap[] = { 0.265, 0.362, -0.855, 0.035, 0.136, 0.133 }; double X[] = { -0.278, -0.686, -0.736, -0.918 }; int incX = -1; double Ap_expected[] = { 1.64942, 0.0, -0.020644, -0.214692, 0.68388, 0.0 }; cblas_zhpr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], dbleps, "zhpr(case 1422) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], dbleps, "zhpr(case 1422) imag"); }; }; }; { int order = 101; int uplo = 122; int N = 2; double alpha = 1; double Ap[] = { 0.265, 0.362, -0.855, 0.035, 0.136, 0.133 }; double X[] = { -0.278, -0.686, -0.736, -0.918 }; int incX = -1; double Ap_expected[] = { 1.64942, 0.0, -0.020644, 0.284692, 0.68388, 0.0 }; cblas_zhpr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], dbleps, "zhpr(case 1423) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], dbleps, "zhpr(case 1423) imag"); }; }; }; { int order = 102; int uplo = 121; int N = 2; double alpha = 1; double Ap[] = { 0.265, 0.362, -0.855, 0.035, 0.136, 0.133 }; double X[] = { -0.278, -0.686, -0.736, -0.918 }; int incX = -1; double Ap_expected[] = { 1.64942, 0.0, -0.020644, -0.214692, 0.68388, 0.0 }; cblas_zhpr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], dbleps, "zhpr(case 1424) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], dbleps, "zhpr(case 1424) imag"); }; }; }; { int order = 102; int uplo = 122; int N = 2; double alpha = 1; double Ap[] = { 0.265, 0.362, -0.855, 0.035, 0.136, 0.133 }; double X[] = { -0.278, -0.686, -0.736, -0.918 }; int incX = -1; double Ap_expected[] = { 1.64942, 0.0, -0.020644, 0.284692, 0.68388, 0.0 }; cblas_zhpr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[2*i], Ap_expected[2*i], dbleps, "zhpr(case 1425) real"); gsl_test_rel(Ap[2*i+1], Ap_expected[2*i+1], dbleps, "zhpr(case 1425) imag"); }; }; }; } gsl/cblas/source_tpmv_c.h0000644000175000017500000001367613536674414014054 0ustar eddedd/* blas/source_tpmv_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; const int conj = (TransA == CblasConjTrans) ? -1 : 1; const int Trans = (TransA != CblasConjTrans) ? TransA : CblasTrans; const int nonunit = (Diag == CblasNonUnit); CHECK_ARGS8(TPMV,order,Uplo,TransA,Diag,N,Ap,X,incX); if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasLower)) { /* form x:= A*x */ INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { const BASE Aii_real = CONST_REAL(Ap, TPUP(N, i, i)); const BASE Aii_imag = conj * CONST_IMAG(Ap, TPUP(N, i, i)); BASE temp_r; BASE temp_i; if (nonunit) { BASE x_real = REAL(X, ix); BASE x_imag = IMAG(X, ix); temp_r = Aii_real * x_real - Aii_imag * x_imag; temp_i = Aii_real * x_imag + Aii_imag * x_real; } else { temp_r = REAL(X, ix); temp_i = IMAG(X, ix); } { INDEX jx = OFFSET(N, incX) + (i + 1) * incX; for (j = i + 1; j < N; j++) { const BASE Aij_real = CONST_REAL(Ap, TPUP(N, i, j)); const BASE Aij_imag = conj * CONST_IMAG(Ap, TPUP(N, i, j)); BASE x_real = REAL(X, jx); BASE x_imag = IMAG(X, jx); temp_r += Aij_real * x_real - Aij_imag * x_imag; temp_i += Aij_real * x_imag + Aij_imag * x_real; jx += incX; } } REAL(X, ix) = temp_r; IMAG(X, ix) = temp_i; ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX) + incX * (N - 1); for (i = N; i > 0 && i--;) { const BASE Aii_real = CONST_REAL(Ap, TPLO(N, i, i)); const BASE Aii_imag = conj * CONST_IMAG(Ap, TPLO(N, i, i)); BASE temp_r; BASE temp_i; if (nonunit) { BASE x_real = REAL(X, ix); BASE x_imag = IMAG(X, ix); temp_r = Aii_real * x_real - Aii_imag * x_imag; temp_i = Aii_real * x_imag + Aii_imag * x_real; } else { temp_r = REAL(X, ix); temp_i = IMAG(X, ix); } { INDEX jx = OFFSET(N, incX); for (j = 0; j < i; j++) { const BASE Aij_real = CONST_REAL(Ap, TPLO(N, i, j)); const BASE Aij_imag = conj * CONST_IMAG(Ap, TPLO(N, i, j)); BASE x_real = REAL(X, jx); BASE x_imag = IMAG(X, jx); temp_r += Aij_real * x_real - Aij_imag * x_imag; temp_i += Aij_real * x_imag + Aij_imag * x_real; jx += incX; } } REAL(X, ix) = temp_r; IMAG(X, ix) = temp_i; ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasLower)) { /* form x := A'*x */ INDEX ix = OFFSET(N, incX) + incX * (N - 1); for (i = N; i > 0 && i--;) { const BASE Aii_real = CONST_REAL(Ap, TPUP(N, i, i)); const BASE Aii_imag = conj * CONST_IMAG(Ap, TPUP(N, i, i)); BASE temp_r; BASE temp_i; if (nonunit) { BASE x_real = REAL(X, ix); BASE x_imag = IMAG(X, ix); temp_r = Aii_real * x_real - Aii_imag * x_imag; temp_i = Aii_real * x_imag + Aii_imag * x_real; } else { temp_r = REAL(X, ix); temp_i = IMAG(X, ix); } { INDEX jx = OFFSET(N, incX); for (j = 0; j < i; j++) { BASE x_real = REAL(X, jx); BASE x_imag = IMAG(X, jx); const BASE Aji_real = CONST_REAL(Ap, TPUP(N, j, i)); const BASE Aji_imag = conj * CONST_IMAG(Ap, TPUP(N, j, i)); temp_r += Aji_real * x_real - Aji_imag * x_imag; temp_i += Aji_real * x_imag + Aji_imag * x_real; jx += incX; } } REAL(X, ix) = temp_r; IMAG(X, ix) = temp_i; ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { const BASE Aii_real = CONST_REAL(Ap, TPLO(N, i, i)); const BASE Aii_imag = conj * CONST_IMAG(Ap, TPLO(N, i, i)); BASE temp_r; BASE temp_i; if (nonunit) { BASE x_real = REAL(X, ix); BASE x_imag = IMAG(X, ix); temp_r = Aii_real * x_real - Aii_imag * x_imag; temp_i = Aii_real * x_imag + Aii_imag * x_real; } else { temp_r = REAL(X, ix); temp_i = IMAG(X, ix); } { INDEX jx = OFFSET(N, incX) + (i + 1) * incX; for (j = i + 1; j < N; j++) { BASE x_real = REAL(X, jx); BASE x_imag = IMAG(X, jx); const BASE Aji_real = CONST_REAL(Ap, TPLO(N, j, i)); const BASE Aji_imag = conj * CONST_IMAG(Ap, TPLO(N, j, i)); temp_r += Aji_real * x_real - Aji_imag * x_imag; temp_i += Aji_real * x_imag + Aji_imag * x_real; jx += incX; } } REAL(X, ix) = temp_r; IMAG(X, ix) = temp_i; ix += incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/ctbsv.c0000644000175000017500000000067213536674414012310 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" #include "hypot.c" void cblas_ctbsv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const void *A, const int lda, void *X, const int incX) { #define BASE float #include "source_tbsv_c.h" #undef BASE } gsl/cblas/zdotu_sub.c0000644000175000017500000000045213536674414013201 0ustar eddedd#include #include #include "cblas.h" void cblas_zdotu_sub (const int N, const void *X, const int incX, const void *Y, const int incY, void *result) { #define BASE double #define CONJ_SIGN 1.0 #include "source_dot_c.h" #undef CONJ_SIGN #undef BASE } gsl/cblas/test_gemv.c0000644000175000017500000003054713536674414013170 0ustar eddedd#include #include #include #include #include "tests.h" void test_gemv (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int trans = 111; int M = 1; int N = 1; int lda = 1; float alpha = 1.0f; float beta = -0.3f; float A[] = { -0.805f }; float X[] = { -0.965f }; int incX = -1; float Y[] = { 0.537f }; int incY = -1; float y_expected[] = { 0.615725f }; cblas_sgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sgemv(case 774)"); } }; }; { int order = 102; int trans = 111; int M = 1; int N = 1; int lda = 1; float alpha = 1.0f; float beta = -0.3f; float A[] = { -0.805f }; float X[] = { -0.965f }; int incX = -1; float Y[] = { 0.537f }; int incY = -1; float y_expected[] = { 0.615725f }; cblas_sgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sgemv(case 775)"); } }; }; { int order = 101; int trans = 112; int M = 1; int N = 1; int lda = 1; float alpha = 1.0f; float beta = 0.0f; float A[] = { -0.805f }; float X[] = { -0.965f }; int incX = -1; float Y[] = { 0.537f }; int incY = -1; float y_expected[] = { 0.776825f }; cblas_sgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sgemv(case 776)"); } }; }; { int order = 102; int trans = 112; int M = 1; int N = 1; int lda = 1; float alpha = 1.0f; float beta = 0.0f; float A[] = { -0.805f }; float X[] = { -0.965f }; int incX = -1; float Y[] = { 0.537f }; int incY = -1; float y_expected[] = { 0.776825f }; cblas_sgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sgemv(case 777)"); } }; }; { int order = 101; int trans = 111; int M = 1; int N = 1; int lda = 1; double alpha = -0.3; double beta = -1; double A[] = { -0.047 }; double X[] = { 0.672 }; int incX = -1; double Y[] = { 0.554 }; int incY = -1; double y_expected[] = { -0.5445248 }; cblas_dgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dgemv(case 778)"); } }; }; { int order = 102; int trans = 111; int M = 1; int N = 1; int lda = 1; double alpha = -0.3; double beta = -1; double A[] = { -0.047 }; double X[] = { 0.672 }; int incX = -1; double Y[] = { 0.554 }; int incY = -1; double y_expected[] = { -0.5445248 }; cblas_dgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dgemv(case 779)"); } }; }; { int order = 101; int trans = 112; int M = 1; int N = 1; int lda = 1; double alpha = -1; double beta = 1; double A[] = { -0.047 }; double X[] = { 0.672 }; int incX = -1; double Y[] = { 0.554 }; int incY = -1; double y_expected[] = { 0.585584 }; cblas_dgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dgemv(case 780)"); } }; }; { int order = 102; int trans = 112; int M = 1; int N = 1; int lda = 1; double alpha = -1; double beta = 1; double A[] = { -0.047 }; double X[] = { 0.672 }; int incX = -1; double Y[] = { 0.554 }; int incY = -1; double y_expected[] = { 0.585584 }; cblas_dgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dgemv(case 781)"); } }; }; { int order = 101; int trans = 111; int M = 1; int N = 1; int lda = 1; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {0.0f, 1.0f}; float A[] = { 0.629f, 0.801f }; float X[] = { 0.778f, -0.073f }; int incX = -1; float Y[] = { -0.976f, -0.682f }; int incY = -1; float y_expected[] = { 0.624274f, -0.921216f }; cblas_cgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "cgemv(case 782) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "cgemv(case 782) imag"); }; }; }; { int order = 102; int trans = 111; int M = 1; int N = 1; int lda = 1; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {0.0f, 1.0f}; float A[] = { 0.629f, 0.801f }; float X[] = { 0.778f, -0.073f }; int incX = -1; float Y[] = { -0.976f, -0.682f }; int incY = -1; float y_expected[] = { 0.624274f, -0.921216f }; cblas_cgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "cgemv(case 783) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "cgemv(case 783) imag"); }; }; }; { int order = 101; int trans = 112; int M = 1; int N = 1; int lda = 1; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {-0.3f, 0.1f}; float A[] = { 0.629f, 0.801f }; float X[] = { 0.778f, -0.073f }; int incX = -1; float Y[] = { -0.976f, -0.682f }; int incY = -1; float y_expected[] = { -0.216261f, 0.654835f }; cblas_cgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "cgemv(case 784) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "cgemv(case 784) imag"); }; }; }; { int order = 102; int trans = 112; int M = 1; int N = 1; int lda = 1; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {-0.3f, 0.1f}; float A[] = { 0.629f, 0.801f }; float X[] = { 0.778f, -0.073f }; int incX = -1; float Y[] = { -0.976f, -0.682f }; int incY = -1; float y_expected[] = { -0.216261f, 0.654835f }; cblas_cgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "cgemv(case 785) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "cgemv(case 785) imag"); }; }; }; { int order = 101; int trans = 113; int M = 1; int N = 1; int lda = 1; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {-0.3f, 0.1f}; float A[] = { 0.629f, 0.801f }; float X[] = { 0.778f, -0.073f }; int incX = -1; float Y[] = { -0.976f, -0.682f }; int incY = -1; float y_expected[] = { 0.427909f, 0.150089f }; cblas_cgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "cgemv(case 786) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "cgemv(case 786) imag"); }; }; }; { int order = 102; int trans = 113; int M = 1; int N = 1; int lda = 1; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {-0.3f, 0.1f}; float A[] = { 0.629f, 0.801f }; float X[] = { 0.778f, -0.073f }; int incX = -1; float Y[] = { -0.976f, -0.682f }; int incY = -1; float y_expected[] = { 0.427909f, 0.150089f }; cblas_cgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "cgemv(case 787) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "cgemv(case 787) imag"); }; }; }; { int order = 101; int trans = 111; int M = 1; int N = 1; int lda = 1; double alpha[2] = {0, 0.1}; double beta[2] = {1, 0}; double A[] = { 0.932, -0.724 }; double X[] = { 0.334, -0.317 }; int incX = -1; double Y[] = { 0.348, 0.07 }; int incY = -1; double y_expected[] = { 0.401726, 0.078178 }; cblas_zgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zgemv(case 788) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zgemv(case 788) imag"); }; }; }; { int order = 102; int trans = 111; int M = 1; int N = 1; int lda = 1; double alpha[2] = {0, 0.1}; double beta[2] = {1, 0}; double A[] = { 0.932, -0.724 }; double X[] = { 0.334, -0.317 }; int incX = -1; double Y[] = { 0.348, 0.07 }; int incY = -1; double y_expected[] = { 0.401726, 0.078178 }; cblas_zgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zgemv(case 789) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zgemv(case 789) imag"); }; }; }; { int order = 101; int trans = 112; int M = 1; int N = 1; int lda = 1; double alpha[2] = {-0.3, 0.1}; double beta[2] = {0, 1}; double A[] = { 0.932, -0.724 }; double X[] = { 0.334, -0.317 }; int incX = -1; double Y[] = { 0.348, 0.07 }; int incY = -1; double y_expected[] = { -0.040808, 0.517356 }; cblas_zgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zgemv(case 790) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zgemv(case 790) imag"); }; }; }; { int order = 102; int trans = 112; int M = 1; int N = 1; int lda = 1; double alpha[2] = {-0.3, 0.1}; double beta[2] = {0, 1}; double A[] = { 0.932, -0.724 }; double X[] = { 0.334, -0.317 }; int incX = -1; double Y[] = { 0.348, 0.07 }; int incY = -1; double y_expected[] = { -0.040808, 0.517356 }; cblas_zgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zgemv(case 791) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zgemv(case 791) imag"); }; }; }; { int order = 101; int trans = 113; int M = 1; int N = 1; int lda = 1; double alpha[2] = {1, 0}; double beta[2] = {0, 0}; double A[] = { 0.932, -0.724 }; double X[] = { 0.334, -0.317 }; int incX = -1; double Y[] = { 0.348, 0.07 }; int incY = -1; double y_expected[] = { 0.540796, -0.053628 }; cblas_zgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zgemv(case 792) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zgemv(case 792) imag"); }; }; }; { int order = 102; int trans = 113; int M = 1; int N = 1; int lda = 1; double alpha[2] = {1, 0}; double beta[2] = {0, 0}; double A[] = { 0.932, -0.724 }; double X[] = { 0.334, -0.317 }; int incX = -1; double Y[] = { 0.348, 0.07 }; int incY = -1; double y_expected[] = { 0.540796, -0.053628 }; cblas_zgemv(order, trans, M, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zgemv(case 793) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zgemv(case 793) imag"); }; }; }; } gsl/cblas/source_syr2.h0000644000175000017500000000401413536674414013445 0ustar eddedd/* blas/source_syr2.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; CHECK_ARGS10(SD_SYR2,order,Uplo,N,alpha,X,incX,Y,incY,A,lda); if (N == 0) return; if (alpha == 0.0) return; if ((order == CblasRowMajor && Uplo == CblasUpper) || (order == CblasColMajor && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { const BASE tmp1 = alpha * X[ix]; const BASE tmp2 = alpha * Y[iy]; INDEX jx = ix; INDEX jy = iy; for (j = i; j < N; j++) { A[lda * i + j] += tmp1 * Y[jy] + tmp2 * X[jx]; jx += incX; jy += incY; } ix += incX; iy += incY; } } else if ((order == CblasRowMajor && Uplo == CblasLower) || (order == CblasColMajor && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { const BASE tmp1 = alpha * X[ix]; const BASE tmp2 = alpha * Y[iy]; INDEX jx = OFFSET(N, incX); INDEX jy = OFFSET(N, incY); for (j = 0; j <= i; j++) { A[lda * i + j] += tmp1 * Y[jy] + tmp2 * X[jx]; jx += incX; jy += incY; } ix += incX; iy += incY; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/test_hbmv.c0000644000175000017500000003372113536674414013163 0ustar eddedd#include #include #include #include #include "tests.h" void test_hbmv (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 3; int k = 1; int lda = 3; float A[] = { 0.937f, -0.035f, 0.339f, 0.847f, 0.022f, 0.153f, -0.785f, 0.193f, -0.731f, -0.166f, -0.243f, -0.319f, 0.173f, -0.24f, 0.079f, -0.058f, 0.124f, 0.445f }; float X[] = { -0.093f, -0.103f, -0.537f, -0.151f, 0.094f, 0.954f }; int incX = -1; float Y[] = { 0.029f, -0.391f, -0.256f, 0.031f, -0.478f, 0.098f }; int incY = -1; float y_expected[] = { 0.02698f, 0.521724f, -0.379354f, 1.27743f, -0.25427f, -0.043268f }; cblas_chbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chbmv(case 1086) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chbmv(case 1086) imag"); }; }; }; { int order = 101; int uplo = 121; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 3; int k = 1; int lda = 3; float A[] = { 0.937f, -0.035f, 0.339f, 0.847f, 0.022f, 0.153f, -0.785f, 0.193f, -0.731f, -0.166f, -0.243f, -0.319f, 0.173f, -0.24f, 0.079f, -0.058f, 0.124f, 0.445f }; float X[] = { -0.093f, -0.103f, -0.537f, -0.151f, 0.094f, 0.954f }; int incX = -1; float Y[] = { 0.029f, -0.391f, -0.256f, 0.031f, -0.478f, 0.098f }; int incY = -1; float y_expected[] = { 0.02698f, 0.521724f, -0.379354f, 1.27743f, -0.25427f, -0.043268f }; cblas_chbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chbmv(case 1087) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chbmv(case 1087) imag"); }; }; }; { int order = 101; int uplo = 122; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 3; int k = 1; int lda = 3; float A[] = { 0.937f, -0.035f, 0.339f, 0.847f, 0.022f, 0.153f, -0.785f, 0.193f, -0.731f, -0.166f, -0.243f, -0.319f, 0.173f, -0.24f, 0.079f, -0.058f, 0.124f, 0.445f }; float X[] = { -0.093f, -0.103f, -0.537f, -0.151f, 0.094f, 0.954f }; int incX = -1; float Y[] = { 0.029f, -0.391f, -0.256f, 0.031f, -0.478f, 0.098f }; int incY = -1; float y_expected[] = { -0.06422f, -0.016288f, 0.734206f, 0.108366f, -0.411982f, 0.347068f }; cblas_chbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chbmv(case 1088) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chbmv(case 1088) imag"); }; }; }; { int order = 101; int uplo = 122; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 3; int k = 1; int lda = 3; float A[] = { 0.937f, -0.035f, 0.339f, 0.847f, 0.022f, 0.153f, -0.785f, 0.193f, -0.731f, -0.166f, -0.243f, -0.319f, 0.173f, -0.24f, 0.079f, -0.058f, 0.124f, 0.445f }; float X[] = { -0.093f, -0.103f, -0.537f, -0.151f, 0.094f, 0.954f }; int incX = -1; float Y[] = { 0.029f, -0.391f, -0.256f, 0.031f, -0.478f, 0.098f }; int incY = -1; float y_expected[] = { -0.06422f, -0.016288f, 0.734206f, 0.108366f, -0.411982f, 0.347068f }; cblas_chbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chbmv(case 1089) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chbmv(case 1089) imag"); }; }; }; { int order = 102; int uplo = 121; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 3; int k = 1; int lda = 3; float A[] = { 0.937f, -0.035f, 0.339f, 0.847f, 0.022f, 0.153f, -0.785f, 0.193f, -0.731f, -0.166f, -0.243f, -0.319f, 0.173f, -0.24f, 0.079f, -0.058f, 0.124f, 0.445f }; float X[] = { -0.093f, -0.103f, -0.537f, -0.151f, 0.094f, 0.954f }; int incX = -1; float Y[] = { 0.029f, -0.391f, -0.256f, 0.031f, -0.478f, 0.098f }; int incY = -1; float y_expected[] = { 0.19354f, 0.056192f, 0.72585f, 0.42717f, -0.2047f, 0.405354f }; cblas_chbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chbmv(case 1090) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chbmv(case 1090) imag"); }; }; }; { int order = 102; int uplo = 121; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 3; int k = 1; int lda = 3; float A[] = { 0.937f, -0.035f, 0.339f, 0.847f, 0.022f, 0.153f, -0.785f, 0.193f, -0.731f, -0.166f, -0.243f, -0.319f, 0.173f, -0.24f, 0.079f, -0.058f, 0.124f, 0.445f }; float X[] = { -0.093f, -0.103f, -0.537f, -0.151f, 0.094f, 0.954f }; int incX = -1; float Y[] = { 0.029f, -0.391f, -0.256f, 0.031f, -0.478f, 0.098f }; int incY = -1; float y_expected[] = { 0.19354f, 0.056192f, 0.72585f, 0.42717f, -0.2047f, 0.405354f }; cblas_chbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chbmv(case 1091) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chbmv(case 1091) imag"); }; }; }; { int order = 102; int uplo = 122; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 3; int k = 1; int lda = 3; float A[] = { 0.937f, -0.035f, 0.339f, 0.847f, 0.022f, 0.153f, -0.785f, 0.193f, -0.731f, -0.166f, -0.243f, -0.319f, 0.173f, -0.24f, 0.079f, -0.058f, 0.124f, 0.445f }; float X[] = { -0.093f, -0.103f, -0.537f, -0.151f, 0.094f, 0.954f }; int incX = -1; float Y[] = { 0.029f, -0.391f, -0.256f, 0.031f, -0.478f, 0.098f }; int incY = -1; float y_expected[] = { -0.151304f, 0.471592f, -0.507714f, -0.304446f, -1.16395f, -0.299062f }; cblas_chbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chbmv(case 1092) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chbmv(case 1092) imag"); }; }; }; { int order = 102; int uplo = 122; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 3; int k = 1; int lda = 3; float A[] = { 0.937f, -0.035f, 0.339f, 0.847f, 0.022f, 0.153f, -0.785f, 0.193f, -0.731f, -0.166f, -0.243f, -0.319f, 0.173f, -0.24f, 0.079f, -0.058f, 0.124f, 0.445f }; float X[] = { -0.093f, -0.103f, -0.537f, -0.151f, 0.094f, 0.954f }; int incX = -1; float Y[] = { 0.029f, -0.391f, -0.256f, 0.031f, -0.478f, 0.098f }; int incY = -1; float y_expected[] = { -0.151304f, 0.471592f, -0.507714f, -0.304446f, -1.16395f, -0.299062f }; cblas_chbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chbmv(case 1093) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chbmv(case 1093) imag"); }; }; }; { int order = 101; int uplo = 121; double alpha[2] = {1, 0}; double beta[2] = {1, 0}; int N = 3; int k = 1; int lda = 3; double A[] = { 0.662, 0.24, -0.311, -0.345, -0.782, 0.904, -0.842, 0.065, -0.168, -0.855, -0.692, 0.113, 0.009, -0.707, -0.981, 0.019, -0.687, 0.861 }; double X[] = { 0.873, -0.509, 0.398, 0.471, 0.214, 0.878 }; int incX = -1; double Y[] = { -0.441, -0.781, 0.979, -0.911, 0.879, 0.807 }; int incY = -1; double y_expected[] = { -0.902712, -0.524419, -0.307439, -2.167713, 1.059385, 1.104445 }; cblas_zhbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhbmv(case 1094) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhbmv(case 1094) imag"); }; }; }; { int order = 101; int uplo = 121; double alpha[2] = {1, 0}; double beta[2] = {1, 0}; int N = 3; int k = 1; int lda = 3; double A[] = { 0.662, 0.24, -0.311, -0.345, -0.782, 0.904, -0.842, 0.065, -0.168, -0.855, -0.692, 0.113, 0.009, -0.707, -0.981, 0.019, -0.687, 0.861 }; double X[] = { 0.873, -0.509, 0.398, 0.471, 0.214, 0.878 }; int incX = -1; double Y[] = { -0.441, -0.781, 0.979, -0.911, 0.879, 0.807 }; int incY = -1; double y_expected[] = { -0.902712, -0.524419, -0.307439, -2.167713, 1.059385, 1.104445 }; cblas_zhbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhbmv(case 1095) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhbmv(case 1095) imag"); }; }; }; { int order = 101; int uplo = 122; double alpha[2] = {1, 0}; double beta[2] = {1, 0}; int N = 3; int k = 1; int lda = 3; double A[] = { 0.662, 0.24, -0.311, -0.345, -0.782, 0.904, -0.842, 0.065, -0.168, -0.855, -0.692, 0.113, 0.009, -0.707, -0.981, 0.019, -0.687, 0.861 }; double X[] = { 0.873, -0.509, 0.398, 0.471, 0.214, 0.878 }; int incX = -1; double Y[] = { -0.441, -0.781, 0.979, -0.911, 0.879, 0.807 }; int incY = -1; double y_expected[] = { -0.960834, -0.558818, 1.042598, -1.102864, 0.507945, 0.11149 }; cblas_zhbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhbmv(case 1096) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhbmv(case 1096) imag"); }; }; }; { int order = 101; int uplo = 122; double alpha[2] = {1, 0}; double beta[2] = {1, 0}; int N = 3; int k = 1; int lda = 3; double A[] = { 0.662, 0.24, -0.311, -0.345, -0.782, 0.904, -0.842, 0.065, -0.168, -0.855, -0.692, 0.113, 0.009, -0.707, -0.981, 0.019, -0.687, 0.861 }; double X[] = { 0.873, -0.509, 0.398, 0.471, 0.214, 0.878 }; int incX = -1; double Y[] = { -0.441, -0.781, 0.979, -0.911, 0.879, 0.807 }; int incY = -1; double y_expected[] = { -0.960834, -0.558818, 1.042598, -1.102864, 0.507945, 0.11149 }; cblas_zhbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhbmv(case 1097) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhbmv(case 1097) imag"); }; }; }; { int order = 102; int uplo = 121; double alpha[2] = {1, 0}; double beta[2] = {1, 0}; int N = 3; int k = 1; int lda = 3; double A[] = { 0.662, 0.24, -0.311, -0.345, -0.782, 0.904, -0.842, 0.065, -0.168, -0.855, -0.692, 0.113, 0.009, -0.707, -0.981, 0.019, -0.687, 0.861 }; double X[] = { 0.873, -0.509, 0.398, 0.471, 0.214, 0.878 }; int incX = -1; double Y[] = { -0.441, -0.781, 0.979, -0.911, 0.879, 0.807 }; int incY = -1; double y_expected[] = { -1.626828, 0.003954, 0.437012, -2.365106, 0.446715, 0.16323 }; cblas_zhbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhbmv(case 1098) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhbmv(case 1098) imag"); }; }; }; { int order = 102; int uplo = 121; double alpha[2] = {1, 0}; double beta[2] = {1, 0}; int N = 3; int k = 1; int lda = 3; double A[] = { 0.662, 0.24, -0.311, -0.345, -0.782, 0.904, -0.842, 0.065, -0.168, -0.855, -0.692, 0.113, 0.009, -0.707, -0.981, 0.019, -0.687, 0.861 }; double X[] = { 0.873, -0.509, 0.398, 0.471, 0.214, 0.878 }; int incX = -1; double Y[] = { -0.441, -0.781, 0.979, -0.911, 0.879, 0.807 }; int incY = -1; double y_expected[] = { -1.626828, 0.003954, 0.437012, -2.365106, 0.446715, 0.16323 }; cblas_zhbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhbmv(case 1099) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhbmv(case 1099) imag"); }; }; }; { int order = 102; int uplo = 122; double alpha[2] = {1, 0}; double beta[2] = {1, 0}; int N = 3; int k = 1; int lda = 3; double A[] = { 0.662, 0.24, -0.311, -0.345, -0.782, 0.904, -0.842, 0.065, -0.168, -0.855, -0.692, 0.113, 0.009, -0.707, -0.981, 0.019, -0.687, 0.861 }; double X[] = { 0.873, -0.509, 0.398, 0.471, 0.214, 0.878 }; int incX = -1; double Y[] = { -0.441, -0.781, 0.979, -0.911, 0.879, 0.807 }; int incY = -1; double y_expected[] = { -0.097302, -1.204999, 1.168771, -0.822543, 0.734395, 1.379065 }; cblas_zhbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhbmv(case 1100) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhbmv(case 1100) imag"); }; }; }; { int order = 102; int uplo = 122; double alpha[2] = {1, 0}; double beta[2] = {1, 0}; int N = 3; int k = 1; int lda = 3; double A[] = { 0.662, 0.24, -0.311, -0.345, -0.782, 0.904, -0.842, 0.065, -0.168, -0.855, -0.692, 0.113, 0.009, -0.707, -0.981, 0.019, -0.687, 0.861 }; double X[] = { 0.873, -0.509, 0.398, 0.471, 0.214, 0.878 }; int incX = -1; double Y[] = { -0.441, -0.781, 0.979, -0.911, 0.879, 0.807 }; int incY = -1; double y_expected[] = { -0.097302, -1.204999, 1.168771, -0.822543, 0.734395, 1.379065 }; cblas_zhbmv(order, uplo, N, k, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhbmv(case 1101) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhbmv(case 1101) imag"); }; }; }; } gsl/cblas/test_rotmg.c0000644000175000017500000001430113536674414013350 0ustar eddedd#include #include #include #include #include "tests.h" void test_rotmg (void) { const double flteps = 1e-4, dbleps = 1e-6; { float d1 = -1630.28519312f; float d2 = 44320.1964703f; float b1 = 1274.7681352f; float b2 = 0.983006912864f; float h[] = { -999.0f, -999.1f, -999.2f, -999.3f, -999.4f }; float d1_expected = 0.0f; float d2_expected = 0.0f; float b1_expected = 0.0f; float h0_expected = -1.0f; float h11_expected = 0.0f; float h21_expected = 0.0f; float h12_expected = 0.0f; float h22_expected = 0.0f; cblas_srotmg(&d1, &d2, &b1, b2, h); gsl_test_rel(d1, d1_expected, flteps, "srotmg(case 606)"); gsl_test_rel(d2, d2_expected, flteps, "srotmg(case 607)"); gsl_test_rel(b1, b1_expected, flteps, "srotmg(case 608)"); gsl_test_rel(h[0], h0_expected, flteps, "srotmg(case 609)"); gsl_test_rel(h[1], h11_expected, flteps, "srotmg(case 610)"); gsl_test_rel(h[2], h21_expected, flteps, "srotmg(case 611)"); gsl_test_rel(h[3], h12_expected, flteps, "srotmg(case 612)"); gsl_test_rel(h[4], h22_expected, flteps, "srotmg(case 613)"); }; { double d1 = 0.0890831089656; double d2 = 24998.3892082; double b1 = 34657.8864443; double b2 = 1.27708980357; double h[] = { -999.0, -999.1, -999.2, -999.3, -999.4 }; double d1_expected = 0.0890491788526; double d2_expected = 24988.8677829; double b1_expected = 34671.0920237; double h0_expected = 0; double h11_expected = -999.1; double h21_expected = -3.6848461767e-05; double h12_expected = 10.34036867; double h22_expected = -999.4; cblas_drotmg(&d1, &d2, &b1, b2, h); gsl_test_rel(d1, d1_expected, dbleps, "drotmg(case 614)"); gsl_test_rel(d2, d2_expected, dbleps, "drotmg(case 615)"); gsl_test_rel(b1, b1_expected, dbleps, "drotmg(case 616)"); gsl_test_rel(h[0], h0_expected, dbleps, "drotmg(case 617)"); gsl_test_rel(h[1], h11_expected, dbleps, "drotmg(case 618)"); gsl_test_rel(h[2], h21_expected, dbleps, "drotmg(case 619)"); gsl_test_rel(h[3], h12_expected, dbleps, "drotmg(case 620)"); gsl_test_rel(h[4], h22_expected, dbleps, "drotmg(case 621)"); }; { float d1 = 0.00100326116366f; float d2 = -1.20359225232f; float b1 = -7.45489498808f; float b2 = 0.159616854019f; float h[] = { -999.0f, -999.1f, -999.2f, -999.3f, -999.4f }; float d1_expected = 0.00222932574734f; float d2_expected = -2.67447728926f; float b1_expected = -3.35491869218f; float h0_expected = 0.0f; float h11_expected = -999.1f; float h21_expected = 0.0214110130692f; float h12_expected = 25.6863620142f; float h22_expected = -999.4f; cblas_srotmg(&d1, &d2, &b1, b2, h); gsl_test_rel(d1, d1_expected, flteps, "srotmg(case 622)"); gsl_test_rel(d2, d2_expected, flteps, "srotmg(case 623)"); gsl_test_rel(b1, b1_expected, flteps, "srotmg(case 624)"); gsl_test_rel(h[0], h0_expected, flteps, "srotmg(case 625)"); gsl_test_rel(h[1], h11_expected, flteps, "srotmg(case 626)"); gsl_test_rel(h[2], h21_expected, flteps, "srotmg(case 627)"); gsl_test_rel(h[3], h12_expected, flteps, "srotmg(case 628)"); gsl_test_rel(h[4], h22_expected, flteps, "srotmg(case 629)"); }; { double d1 = -49.1978123005; double d2 = 0.228703451277; double b1 = 1.8901039144; double b2 = 7081.47754386; double h[] = { -999.0, -999.1, -999.2, -999.3, -999.4 }; double d1_expected = 0; double d2_expected = 0; double b1_expected = 0; double h0_expected = -1; double h11_expected = 0; double h21_expected = 0; double h12_expected = 0; double h22_expected = 0; cblas_drotmg(&d1, &d2, &b1, b2, h); gsl_test_rel(d1, d1_expected, dbleps, "drotmg(case 630)"); gsl_test_rel(d2, d2_expected, dbleps, "drotmg(case 631)"); gsl_test_rel(b1, b1_expected, dbleps, "drotmg(case 632)"); gsl_test_rel(h[0], h0_expected, dbleps, "drotmg(case 633)"); gsl_test_rel(h[1], h11_expected, dbleps, "drotmg(case 634)"); gsl_test_rel(h[2], h21_expected, dbleps, "drotmg(case 635)"); gsl_test_rel(h[3], h12_expected, dbleps, "drotmg(case 636)"); gsl_test_rel(h[4], h22_expected, dbleps, "drotmg(case 637)"); }; { float d1 = 0.00760694276009f; float d2 = -1.07649167228f; float b1 = -22584.0076391f; float b2 = -0.00305597817159f; float h[] = { -999.0f, -999.1f, -999.2f, -999.3f, -999.4f }; float d1_expected = 0.00760694276011f; float d2_expected = -1.07649167228f; float b1_expected = -22584.007639f; float h0_expected = 0.0f; float h11_expected = -999.1f; float h21_expected = -1.35316026298e-07f; float h12_expected = -1.91491615001e-05f; float h22_expected = -999.4f; cblas_srotmg(&d1, &d2, &b1, b2, h); gsl_test_rel(d1, d1_expected, flteps, "srotmg(case 638)"); gsl_test_rel(d2, d2_expected, flteps, "srotmg(case 639)"); gsl_test_rel(b1, b1_expected, flteps, "srotmg(case 640)"); gsl_test_rel(h[0], h0_expected, flteps, "srotmg(case 641)"); gsl_test_rel(h[1], h11_expected, flteps, "srotmg(case 642)"); gsl_test_rel(h[2], h21_expected, flteps, "srotmg(case 643)"); gsl_test_rel(h[3], h12_expected, flteps, "srotmg(case 644)"); gsl_test_rel(h[4], h22_expected, flteps, "srotmg(case 645)"); }; { double d1 = 0.000283076346391; double d2 = 20.1907649901; double b1 = -0.274927034914; double b2 = 18.6645358259; double h[] = { -999.0, -999.1, -999.2, -999.3, -999.4 }; double d1_expected = 20.1907649287; double d2_expected = 0.00028307634553; double b1_expected = 18.6645358827; double h0_expected = 1; double h11_expected = -2.06514743478e-07; double h21_expected = -999.2; double h12_expected = -999.3; double h22_expected = -0.0147299154652; cblas_drotmg(&d1, &d2, &b1, b2, h); gsl_test_rel(d1, d1_expected, dbleps, "drotmg(case 646)"); gsl_test_rel(d2, d2_expected, dbleps, "drotmg(case 647)"); gsl_test_rel(b1, b1_expected, dbleps, "drotmg(case 648)"); gsl_test_rel(h[0], h0_expected, dbleps, "drotmg(case 649)"); gsl_test_rel(h[1], h11_expected, dbleps, "drotmg(case 650)"); gsl_test_rel(h[2], h21_expected, dbleps, "drotmg(case 651)"); gsl_test_rel(h[3], h12_expected, dbleps, "drotmg(case 652)"); gsl_test_rel(h[4], h22_expected, dbleps, "drotmg(case 653)"); }; } gsl/cblas/source_hbmv.h0000644000175000017500000001246713536674414013515 0ustar eddedd/* blas/source_hbmv.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; const int conj = (order == CblasColMajor) ? -1 : 1; CHECK_ARGS12(CZ_HBMV,order,Uplo,N,K,alpha,A,lda,X,incX,beta,Y,incY); { const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); const BASE beta_real = CONST_REAL0(beta); const BASE beta_imag = CONST_IMAG0(beta); if (N == 0) return; if ((alpha_real == 0.0 && alpha_imag == 0.0) && (beta_real == 1.0 && beta_imag == 0.0)) return; /* form y := beta*y */ if (beta_real == 0.0 && beta_imag == 0.0) { INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { REAL(Y, iy) = 0.0; IMAG(Y, iy) = 0.0; iy += incY; } } else if (!(beta_real == 1.0 && beta_imag == 0.0)) { INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { const BASE y_real = REAL(Y, iy); const BASE y_imag = IMAG(Y, iy); const BASE tmpR = y_real * beta_real - y_imag * beta_imag; const BASE tmpI = y_real * beta_imag + y_imag * beta_real; REAL(Y, iy) = tmpR; IMAG(Y, iy) = tmpI; iy += incY; } } if (alpha_real == 0.0 && alpha_imag == 0.0) return; /* form y := alpha*A*x + y */ if ((order == CblasRowMajor && Uplo == CblasUpper) || (order == CblasColMajor && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { BASE x_real = CONST_REAL(X, ix); BASE x_imag = CONST_IMAG(X, ix); BASE temp1_real = alpha_real * x_real - alpha_imag * x_imag; BASE temp1_imag = alpha_real * x_imag + alpha_imag * x_real; BASE temp2_real = 0.0; BASE temp2_imag = 0.0; const INDEX j_min = i + 1; const INDEX j_max = GSL_MIN(N, i + K + 1); INDEX jx = OFFSET(N, incX) + j_min * incX; INDEX jy = OFFSET(N, incY) + j_min * incY; BASE Aii_real = CONST_REAL(A, lda * i + 0); /* Aii_imag is zero */ REAL(Y, iy) += temp1_real * Aii_real; IMAG(Y, iy) += temp1_imag * Aii_real; for (j = j_min; j < j_max; j++) { BASE Aij_real = CONST_REAL(A, lda * i + (j - i)); BASE Aij_imag = conj * CONST_IMAG(A, lda * i + (j - i)); REAL(Y, jy) += temp1_real * Aij_real - temp1_imag * (-Aij_imag); IMAG(Y, jy) += temp1_real * (-Aij_imag) + temp1_imag * Aij_real; x_real = CONST_REAL(X, jx); x_imag = CONST_IMAG(X, jx); temp2_real += x_real * Aij_real - x_imag * Aij_imag; temp2_imag += x_real * Aij_imag + x_imag * Aij_real; jx += incX; jy += incY; } REAL(Y, iy) += alpha_real * temp2_real - alpha_imag * temp2_imag; IMAG(Y, iy) += alpha_real * temp2_imag + alpha_imag * temp2_real; ix += incX; iy += incY; } } else if ((order == CblasRowMajor && Uplo == CblasLower) || (order == CblasColMajor && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { BASE x_real = CONST_REAL(X, ix); BASE x_imag = CONST_IMAG(X, ix); BASE temp1_real = alpha_real * x_real - alpha_imag * x_imag; BASE temp1_imag = alpha_real * x_imag + alpha_imag * x_real; BASE temp2_real = 0.0; BASE temp2_imag = 0.0; const INDEX j_min = (K > i ? 0 : i - K); const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; INDEX jy = OFFSET(N, incY) + j_min * incY; for (j = j_min; j < j_max; j++) { BASE Aij_real = CONST_REAL(A, i * lda + (K - i + j)); BASE Aij_imag = conj * CONST_IMAG(A, i * lda + (K - i + j)); REAL(Y, jy) += temp1_real * Aij_real - temp1_imag * (-Aij_imag); IMAG(Y, jy) += temp1_real * (-Aij_imag) + temp1_imag * Aij_real; x_real = CONST_REAL(X, jx); x_imag = CONST_IMAG(X, jx); temp2_real += x_real * Aij_real - x_imag * Aij_imag; temp2_imag += x_real * Aij_imag + x_imag * Aij_real; jx += incX; jy += incY; } { BASE Aii_real = CONST_REAL(A, lda * i + K); /* Aii_imag is zero */ REAL(Y, iy) += temp1_real * Aii_real; IMAG(Y, iy) += temp1_imag * Aii_real; } REAL(Y, iy) += alpha_real * temp2_real - alpha_imag * temp2_imag; IMAG(Y, iy) += alpha_real * temp2_imag + alpha_imag * temp2_real; ix += incX; iy += incY; } } else { BLAS_ERROR("unrecognized operation"); } } } gsl/cblas/source_iamax_r.h0000644000175000017500000000206513536674414014172 0ustar eddedd/* blas/source_iamax_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { BASE max = 0.0; INDEX ix = 0; INDEX i; CBLAS_INDEX result = 0; if (incX <= 0) { return 0; } for (i = 0; i < N; i++) { if (fabs(X[ix]) > max) { max = fabs(X[ix]); result = i; } ix += incX; } return result; } gsl/cblas/chpr.c0000644000175000017500000000051413536674414012116 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_chpr (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const void *X, const int incX, void *Ap) { #define BASE float #include "source_hpr.h" #undef BASE } gsl/cblas/test_spr2.c0000644000175000017500000001001113536674414013100 0ustar eddedd#include #include #include #include #include "tests.h" void test_spr2 (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; int N = 2; float alpha = -1.0f; float Ap[] = { 0.493f, -0.175f, -0.831f }; float X[] = { -0.163f, 0.489f }; int incX = -1; float Y[] = { 0.154f, 0.769f }; int incY = -1; float Ap_expected[] = { -0.259082f, -0.124959f, -0.780796f }; cblas_sspr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], flteps, "sspr2(case 1442)"); } }; }; { int order = 101; int uplo = 122; int N = 2; float alpha = -1.0f; float Ap[] = { 0.493f, -0.175f, -0.831f }; float X[] = { -0.163f, 0.489f }; int incX = -1; float Y[] = { 0.154f, 0.769f }; int incY = -1; float Ap_expected[] = { -0.259082f, -0.124959f, -0.780796f }; cblas_sspr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], flteps, "sspr2(case 1443)"); } }; }; { int order = 102; int uplo = 121; int N = 2; float alpha = -1.0f; float Ap[] = { 0.493f, -0.175f, -0.831f }; float X[] = { -0.163f, 0.489f }; int incX = -1; float Y[] = { 0.154f, 0.769f }; int incY = -1; float Ap_expected[] = { -0.259082f, -0.124959f, -0.780796f }; cblas_sspr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], flteps, "sspr2(case 1444)"); } }; }; { int order = 102; int uplo = 122; int N = 2; float alpha = -1.0f; float Ap[] = { 0.493f, -0.175f, -0.831f }; float X[] = { -0.163f, 0.489f }; int incX = -1; float Y[] = { 0.154f, 0.769f }; int incY = -1; float Ap_expected[] = { -0.259082f, -0.124959f, -0.780796f }; cblas_sspr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], flteps, "sspr2(case 1445)"); } }; }; { int order = 101; int uplo = 121; int N = 2; double alpha = 0; double Ap[] = { 0.938, 0.342, 0.74 }; double X[] = { 0.216, -0.566 }; int incX = -1; double Y[] = { -0.845, 0.282 }; int incY = -1; double Ap_expected[] = { 0.938, 0.342, 0.74 }; cblas_dspr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], dbleps, "dspr2(case 1446)"); } }; }; { int order = 101; int uplo = 122; int N = 2; double alpha = 0; double Ap[] = { 0.938, 0.342, 0.74 }; double X[] = { 0.216, -0.566 }; int incX = -1; double Y[] = { -0.845, 0.282 }; int incY = -1; double Ap_expected[] = { 0.938, 0.342, 0.74 }; cblas_dspr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], dbleps, "dspr2(case 1447)"); } }; }; { int order = 102; int uplo = 121; int N = 2; double alpha = 0; double Ap[] = { 0.938, 0.342, 0.74 }; double X[] = { 0.216, -0.566 }; int incX = -1; double Y[] = { -0.845, 0.282 }; int incY = -1; double Ap_expected[] = { 0.938, 0.342, 0.74 }; cblas_dspr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], dbleps, "dspr2(case 1448)"); } }; }; { int order = 102; int uplo = 122; int N = 2; double alpha = 0; double Ap[] = { 0.938, 0.342, 0.74 }; double X[] = { 0.216, -0.566 }; int incX = -1; double Y[] = { -0.845, 0.282 }; int incY = -1; double Ap_expected[] = { 0.938, 0.342, 0.74 }; cblas_dspr2(order, uplo, N, alpha, X, incX, Y, incY, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], dbleps, "dspr2(case 1449)"); } }; }; } gsl/cblas/source_tpmv_r.h0000644000175000017500000000637113536674414014065 0ustar eddedd/* blas/source_tpmv_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; const int nonunit = (Diag == CblasNonUnit); const int Trans = (TransA != CblasConjTrans) ? TransA : CblasTrans; CHECK_ARGS8(TPMV,order,Uplo,TransA,Diag,N,Ap,X,incX); if (N == 0) return; if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasLower)) { /* form x:= A*x */ INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { BASE atmp = Ap[TPUP(N, i, i)]; BASE temp = (nonunit ? X[ix] * atmp : X[ix]); INDEX jx = OFFSET(N, incX) + (i + 1) * incX; for (j = i + 1; j < N; j++) { atmp = Ap[TPUP(N, i, j)]; temp += atmp * X[jx]; jx += incX; } X[ix] = temp; ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX) + (N - 1) * incX; for (i = N; i > 0 && i--;) { BASE atmp = Ap[TPLO(N, i, i)]; BASE temp = (nonunit ? X[ix] * atmp : X[ix]); INDEX jx = OFFSET(N, incX); for (j = 0; j < i; j++) { atmp = Ap[TPLO(N, i, j)]; temp += atmp * X[jx]; jx += incX; } X[ix] = temp; ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasLower)) { /* form x := A'*x */ INDEX ix = OFFSET(N, incX) + (N - 1) * incX; for (i = N; i > 0 && i--;) { BASE atmp = Ap[TPUP(N, i, i)]; BASE temp = (nonunit ? X[ix] * atmp : X[ix]); INDEX jx = OFFSET(N, incX); for (j = 0; j < i; j++) { atmp = Ap[TPUP(N, j, i)]; temp += atmp * X[jx]; jx += incX; } X[ix] = temp; ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { BASE atmp = Ap[TPLO(N, i, i)]; BASE temp = (nonunit ? X[ix] * atmp : X[ix]); INDEX jx = OFFSET(N, incX) + (i + 1) * incX; for (j = i + 1; j < N; j++) { atmp = Ap[TPLO(N, j, i)]; temp += atmp * X[jx]; jx += incX; } X[ix] = temp; ix += incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/test_herk.c0000644000175000017500000002621013536674414013153 0ustar eddedd#include #include #include #include #include "tests.h" void test_herk (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; int trans = 111; int N = 2; int K = 1; float alpha = 0.0f; float beta = 0.1f; float A[] = { -0.617f, 0.179f, -0.626f, 0.334f }; int lda = 1; float C[] = { 0.346f, -0.903f, 0.022f, -0.839f, -0.715f, 0.049f, -0.338f, 0.149f }; int ldc = 2; float C_expected[] = { 0.0346f, 0.0f, 0.0022f, -0.0839f, -0.715f, 0.049f, -0.0338f, 0.0f }; cblas_cherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cherk(case 1598) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cherk(case 1598) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 111; int N = 2; int K = 1; float alpha = 0.0f; float beta = 0.1f; float A[] = { -0.356f, -0.308f, 0.493f, -0.351f }; int lda = 2; float C[] = { -0.898f, -0.905f, 0.002f, -0.219f, 0.881f, 0.879f, 0.275f, -0.351f }; int ldc = 2; float C_expected[] = { -0.0898f, 0.0f, 0.002f, -0.219f, 0.0881f, 0.0879f, 0.0275f, 0.0f }; cblas_cherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cherk(case 1599) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cherk(case 1599) imag"); }; }; }; { int order = 101; int uplo = 121; int trans = 113; int N = 2; int K = 1; float alpha = 0.1f; float beta = 1.0f; float A[] = { -0.103f, -0.951f, -0.601f, -0.041f }; int lda = 2; float C[] = { -0.918f, -0.018f, 0.991f, -0.789f, -0.698f, -0.067f, 0.956f, -0.599f }; int ldc = 2; float C_expected[] = { -0.826499f, 0.0f, 1.00109f, -0.845733f, -0.698f, -0.067f, 0.992288f, 0.0f }; cblas_cherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cherk(case 1600) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cherk(case 1600) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 113; int N = 2; int K = 1; float alpha = 0.1f; float beta = 1.0f; float A[] = { -0.237f, 0.925f, -0.904f, -0.091f }; int lda = 1; float C[] = { -0.572f, 0.915f, 0.398f, 0.222f, 0.016f, 0.288f, -0.078f, -0.507f }; int ldc = 2; float C_expected[] = { -0.480821f, 0.0f, 0.398f, 0.222f, 0.0290073f, 0.373777f, 0.0045497f, 0.0f }; cblas_cherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cherk(case 1601) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cherk(case 1601) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 111; int N = 2; int K = 1; float alpha = -0.3f; float beta = 0.0f; float A[] = { 0.963f, -0.23f, -0.435f, 0.289f }; int lda = 1; float C[] = { 0.282f, -0.272f, -0.516f, -0.594f, -0.001f, 0.155f, -0.39f, -0.354f }; int ldc = 2; float C_expected[] = { -0.294081f, 0.0f, -0.516f, -0.594f, 0.145613f, -0.0534771f, -0.0818238f, 0.0f }; cblas_cherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cherk(case 1602) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cherk(case 1602) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 111; int N = 2; int K = 1; float alpha = -0.3f; float beta = 0.0f; float A[] = { 0.674f, 0.1f, -0.098f, 0.552f }; int lda = 2; float C[] = { 0.089f, -0.523f, -0.551f, 0.618f, 0.67f, 0.247f, 0.975f, -0.714f }; int ldc = 2; float C_expected[] = { -0.139283f, 0.0f, 0.0032556f, -0.114554f, 0.67f, 0.247f, -0.0942924f, 0.0f }; cblas_cherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cherk(case 1603) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cherk(case 1603) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 113; int N = 2; int K = 1; float alpha = 1.0f; float beta = 0.1f; float A[] = { 0.033f, -0.864f, 0.168f, 0.524f }; int lda = 2; float C[] = { 0.788f, 0.016f, -0.436f, 0.749f, -0.89f, -0.87f, 0.421f, -0.203f }; int ldc = 2; float C_expected[] = { 0.826385f, 0.0f, -0.436f, 0.749f, -0.536192f, -0.249444f, 0.3449f, 0.0f }; cblas_cherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cherk(case 1604) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cherk(case 1604) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 113; int N = 2; int K = 1; float alpha = 1.0f; float beta = 0.1f; float A[] = { 0.957f, -0.079f, 0.935f, 0.232f }; int lda = 1; float C[] = { -0.744f, -0.061f, 0.195f, -0.574f, 0.551f, 0.478f, -0.337f, 0.1f }; int ldc = 2; float C_expected[] = { 0.84769f, 0.0f, 0.895967f, -0.353289f, 0.551f, 0.478f, 0.894349f, 0.0f }; cblas_cherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cherk(case 1605) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cherk(case 1605) imag"); }; }; }; { int order = 101; int uplo = 121; int trans = 111; int N = 2; int K = 1; double alpha = 1; double beta = 1; double A[] = { 0.934, 0.664, 0.426, 0.263 }; int lda = 1; double C[] = { 0.251, -0.97, 0.76, -0.349, 0.152, -0.899, -0.17, 0.707 }; int ldc = 2; double C_expected[] = { 1.564252, 0.0, 1.332516, -0.311778, 0.152, -0.899, 0.080645, 0.0 }; cblas_zherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zherk(case 1606) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zherk(case 1606) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 111; int N = 2; int K = 1; double alpha = 1; double beta = 1; double A[] = { 0.16, 0.464, -0.623, 0.776 }; int lda = 2; double C[] = { 0.771, -0.449, 0.776, 0.112, -0.134, 0.317, 0.547, -0.551 }; int ldc = 2; double C_expected[] = { 1.011896, 0.0, 0.776, 0.112, 0.126384, -0.096232, 1.537305, 0.0 }; cblas_zherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zherk(case 1607) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zherk(case 1607) imag"); }; }; }; { int order = 101; int uplo = 121; int trans = 113; int N = 2; int K = 1; double alpha = 0.1; double beta = 1; double A[] = { 0.787, 0.057, -0.49, 0.47 }; int lda = 2; double C[] = { -0.758, 0.912, 0.992, -0.356, 0.584, 0.806, 0.965, 0.674 }; int ldc = 2; double C_expected[] = { -0.6957382, 0.0, 0.956116, -0.316218, 0.584, 0.806, 1.0111, 0.0 }; cblas_zherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zherk(case 1608) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zherk(case 1608) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 113; int N = 2; int K = 1; double alpha = 0.1; double beta = 1; double A[] = { 0.961, -0.384, 0.165, 0.395 }; int lda = 1; double C[] = { -0.186, 0.404, -0.873, 0.09, -0.451, -0.972, -0.203, -0.304 }; int ldc = 2; double C_expected[] = { -0.0789023, 0.0, -0.873, 0.09, -0.4503115, -0.9277045, -0.184675, 0.0 }; cblas_zherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zherk(case 1609) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zherk(case 1609) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 111; int N = 2; int K = 1; double alpha = 0; double beta = -0.3; double A[] = { 0.04, 0.608, 0.21, -0.44 }; int lda = 1; double C[] = { 0.285, -0.943, 0.581, -0.56, 0.112, 0.529, 0.16, -0.913 }; int ldc = 2; double C_expected[] = { -0.0855, 0.0, 0.581, -0.56, -0.0336, -0.1587, -0.048, 0.0 }; cblas_zherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zherk(case 1610) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zherk(case 1610) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 111; int N = 2; int K = 1; double alpha = 0; double beta = -0.3; double A[] = { -0.984, -0.398, -0.379, 0.919 }; int lda = 2; double C[] = { -0.44, -0.087, 0.156, -0.945, -0.943, -0.355, 0.577, 0.053 }; int ldc = 2; double C_expected[] = { 0.132, 0.0, -0.0468, 0.2835, -0.943, -0.355, -0.1731, 0.0 }; cblas_zherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zherk(case 1611) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zherk(case 1611) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 113; int N = 2; int K = 1; double alpha = 1; double beta = -1; double A[] = { 0.269, -0.428, -0.029, 0.964 }; int lda = 2; double C[] = { 0.473, -0.932, -0.689, -0.072, -0.952, -0.862, 0.001, 0.282 }; int ldc = 2; double C_expected[] = { -0.217455, 0.0, -0.689, -0.072, 0.531607, 0.615096, 0.929137, 0.0 }; cblas_zherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zherk(case 1612) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zherk(case 1612) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 113; int N = 2; int K = 1; double alpha = 1; double beta = -1; double A[] = { -0.303, -0.037, -0.411, -0.243 }; int lda = 1; double C[] = { 0.652, -0.227, -0.849, 0.87, -0.051, -0.535, 0.418, -0.681 }; int ldc = 2; double C_expected[] = { -0.558822, 0.0, 0.982524, -0.928422, -0.051, -0.535, -0.19003, 0.0 }; cblas_zherk(order, uplo, trans, N, K, alpha, A, lda, beta, C, ldc); { int i; for (i = 0; i < 4; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zherk(case 1613) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zherk(case 1613) imag"); }; }; }; } gsl/cblas/caxpy.c0000644000175000017500000000037613536674414012314 0ustar eddedd#include #include #include "cblas.h" void cblas_caxpy (const int N, const void *alpha, const void *X, const int incX, void *Y, const int incY) { #define BASE float #include "source_axpy_c.h" #undef BASE } gsl/cblas/chemv.c0000644000175000017500000000063413536674414012267 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_chemv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY) { #define BASE float #include "source_hemv.h" #undef BASE } gsl/cblas/test_her2k.c0000644000175000017500000002570513536674414013245 0ustar eddedd#include #include #include #include #include "tests.h" void test_her2k (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; int trans = 111; int N = 1; int K = 2; float alpha[2] = {-1.0f, 0.0f}; float beta = -0.3f; float A[] = { 0.178f, 0.545f, -0.491f, 0.979f }; int lda = 2; float B[] = { -0.665f, -0.531f, -0.4f, 0.227f }; int ldb = 2; float C[] = { 0.115f, -0.193f }; int ldc = 1; float C_expected[] = { -0.056236f, 0.0f }; cblas_cher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cher2k(case 1646) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cher2k(case 1646) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 111; int N = 1; int K = 2; float alpha[2] = {-1.0f, 0.0f}; float beta = -0.3f; float A[] = { -0.808f, 0.447f, 0.145f, -0.226f }; int lda = 2; float B[] = { -0.413f, 0.904f, -0.585f, 0.717f }; int ldb = 2; float C[] = { -0.725f, -0.244f }; int ldc = 1; float C_expected[] = { -0.76435f, 0.0f }; cblas_cher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cher2k(case 1647) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cher2k(case 1647) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 111; int N = 1; int K = 2; float alpha[2] = {-1.0f, 0.0f}; float beta = -0.3f; float A[] = { 0.337f, -0.737f, -0.993f, 0.69f }; int lda = 1; float B[] = { -0.39f, -0.836f, -0.32f, 0.368f }; int ldb = 1; float C[] = { 0.844f, -0.763f }; int ldc = 1; float C_expected[] = { -2.36596f, 0.0f }; cblas_cher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cher2k(case 1648) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cher2k(case 1648) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 111; int N = 1; int K = 2; float alpha[2] = {-1.0f, 0.0f}; float beta = -0.3f; float A[] = { 0.386f, -0.465f, 0.719f, -0.378f }; int lda = 1; float B[] = { 0.099f, -0.879f, 0.864f, 0.141f }; int ldb = 1; float C[] = { -0.599f, -0.47f }; int ldc = 1; float C_expected[] = { -1.85003f, 0.0f }; cblas_cher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cher2k(case 1649) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cher2k(case 1649) imag"); }; }; }; { int order = 101; int uplo = 121; int trans = 113; int N = 1; int K = 2; float alpha[2] = {0.0f, 1.0f}; float beta = -1.0f; float A[] = { 0.128f, 0.431f, -0.26f, 0.75f }; int lda = 1; float B[] = { 0.276f, 0.058f, 0.904f, -0.116f }; int ldb = 1; float C[] = { 0.914f, -0.262f }; int ldc = 1; float C_expected[] = { 0.604744f, 0.0f }; cblas_cher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cher2k(case 1650) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cher2k(case 1650) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 113; int N = 1; int K = 2; float alpha[2] = {0.0f, 1.0f}; float beta = -1.0f; float A[] = { 0.72f, 0.783f, -0.737f, 0.375f }; int lda = 1; float B[] = { 0.531f, 0.167f, 0.203f, -0.221f }; int ldb = 1; float C[] = { 0.618f, 0.392f }; int ldc = 1; float C_expected[] = { -0.200438f, 0.0f }; cblas_cher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cher2k(case 1651) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cher2k(case 1651) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 113; int N = 1; int K = 2; float alpha[2] = {0.0f, 1.0f}; float beta = -1.0f; float A[] = { -0.372f, -0.735f, -0.711f, 0.051f }; int lda = 2; float B[] = { 0.257f, 0.097f, 0.338f, -0.484f }; int ldb = 2; float C[] = { -0.142f, -0.197f }; int ldc = 1; float C_expected[] = { -0.817394f, 0.0f }; cblas_cher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cher2k(case 1652) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cher2k(case 1652) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 113; int N = 1; int K = 2; float alpha[2] = {0.0f, 1.0f}; float beta = -1.0f; float A[] = { 0.1f, -0.878f, 0.28f, -0.381f }; int lda = 2; float B[] = { -0.208f, 0.309f, -0.276f, 0.123f }; int ldb = 2; float C[] = { 0.483f, -0.541f }; int ldc = 1; float C_expected[] = { -0.03812f, 0.0f }; cblas_cher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cher2k(case 1653) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cher2k(case 1653) imag"); }; }; }; { int order = 101; int uplo = 121; int trans = 111; int N = 1; int K = 2; double alpha[2] = {1, 0}; double beta = 1; double A[] = { 0.515, -0.034, 0.067, 0.66 }; int lda = 2; double B[] = { 0.408, -0.85, -0.945, -0.799 }; int ldb = 2; double C[] = { -0.918, -0.985 }; int ldc = 1; double C_expected[] = { -1.62127, 0.0 }; cblas_zher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zher2k(case 1654) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zher2k(case 1654) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 111; int N = 1; int K = 2; double alpha[2] = {1, 0}; double beta = 1; double A[] = { -0.009, 0.495, -0.008, -0.973 }; int lda = 2; double B[] = { -0.239, -0.373, -0.032, -0.539 }; int ldb = 2; double C[] = { 0.443, -0.245 }; int ldc = 1; double C_expected[] = { 1.127438, 0.0 }; cblas_zher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zher2k(case 1655) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zher2k(case 1655) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 111; int N = 1; int K = 2; double alpha[2] = {1, 0}; double beta = 1; double A[] = { 0.531, 0.721, -0.848, 0.826 }; int lda = 1; double B[] = { -0.711, -0.2, -0.92, -0.676 }; int ldb = 1; double C[] = { -0.447, 0.701 }; int ldc = 1; double C_expected[] = { -1.046914, 0.0 }; cblas_zher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zher2k(case 1656) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zher2k(case 1656) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 111; int N = 1; int K = 2; double alpha[2] = {1, 0}; double beta = 1; double A[] = { 0.68, 0.079, 0.837, -0.814 }; int lda = 1; double B[] = { -0.986, 0.024, 0.584, -0.248 }; int ldb = 1; double C[] = { 0.477, -0.551 }; int ldc = 1; double C_expected[] = { 0.521192, 0.0 }; cblas_zher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zher2k(case 1657) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zher2k(case 1657) imag"); }; }; }; { int order = 101; int uplo = 121; int trans = 113; int N = 1; int K = 2; double alpha[2] = {-1, 0}; double beta = 0.1; double A[] = { -0.63, 0.787, 0.426, -0.568 }; int lda = 1; double B[] = { -0.228, 0.302, 0.83, 0.023 }; int ldb = 1; double C[] = { 0.354, -0.85 }; int ldc = 1; double C_expected[] = { -1.40826, 0.0 }; cblas_zher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zher2k(case 1658) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zher2k(case 1658) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 113; int N = 1; int K = 2; double alpha[2] = {-1, 0}; double beta = 0.1; double A[] = { 0.224, -0.191, 0.46, 0.464 }; int lda = 1; double B[] = { -0.815, 0.634, 0.066, -0.873 }; int ldb = 1; double C[] = { -0.49, -0.606 }; int ldc = 1; double C_expected[] = { 1.307732, 0.0 }; cblas_zher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zher2k(case 1659) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zher2k(case 1659) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 113; int N = 1; int K = 2; double alpha[2] = {-1, 0}; double beta = 0.1; double A[] = { 0.943, 0.075, 0.15, -0.141 }; int lda = 2; double B[] = { -0.962, 0.422, -0.592, -0.789 }; int ldb = 2; double C[] = { 0.728, 0.601 }; int ldc = 1; double C_expected[] = { 1.778934, 0.0 }; cblas_zher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zher2k(case 1660) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zher2k(case 1660) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 113; int N = 1; int K = 2; double alpha[2] = {-1, 0}; double beta = 0.1; double A[] = { -0.93, -0.386, 0.565, 0.141 }; int lda = 2; double B[] = { -0.801, 0.022, 0.558, -0.932 }; int ldb = 2; double C[] = { 0.068, 0.501 }; int ldc = 1; double C_expected[] = { -1.833792, 0.0 }; cblas_zher2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zher2k(case 1661) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zher2k(case 1661) imag"); }; }; }; } gsl/cblas/test_trmv.c0000644000175000017500000011525113536674414013216 0ustar eddedd#include #include #include #include #include "tests.h" void test_trmv (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.987f }; float X[] = { -0.138f }; int incX = -1; float x_expected[] = { -0.136206f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 814)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.987f }; float X[] = { -0.138f }; int incX = -1; float x_expected[] = { -0.138f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 815)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.987f }; float X[] = { -0.138f }; int incX = -1; float x_expected[] = { -0.136206f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 816)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.987f }; float X[] = { -0.138f }; int incX = -1; float x_expected[] = { -0.138f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 817)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.987f }; float X[] = { -0.138f }; int incX = -1; float x_expected[] = { -0.136206f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 818)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.987f }; float X[] = { -0.138f }; int incX = -1; float x_expected[] = { -0.138f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 819)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.987f }; float X[] = { -0.138f }; int incX = -1; float x_expected[] = { -0.136206f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 820)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.987f }; float X[] = { -0.138f }; int incX = -1; float x_expected[] = { -0.138f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 821)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { -0.329f }; float X[] = { 0.463f }; int incX = -1; float x_expected[] = { -0.152327f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 822)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { -0.329f }; float X[] = { 0.463f }; int incX = -1; float x_expected[] = { 0.463f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 823)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { -0.329f }; float X[] = { 0.463f }; int incX = -1; float x_expected[] = { -0.152327f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 824)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { -0.329f }; float X[] = { 0.463f }; int incX = -1; float x_expected[] = { 0.463f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 825)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { -0.329f }; float X[] = { 0.463f }; int incX = -1; float x_expected[] = { -0.152327f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 826)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { -0.329f }; float X[] = { 0.463f }; int incX = -1; float x_expected[] = { 0.463f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 827)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { -0.329f }; float X[] = { 0.463f }; int incX = -1; float x_expected[] = { -0.152327f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 828)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { -0.329f }; float X[] = { 0.463f }; int incX = -1; float x_expected[] = { 0.463f }; cblas_strmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "strmv(case 829)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.429 }; double X[] = { -0.899 }; int incX = -1; double x_expected[] = { 0.385671 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 830)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.429 }; double X[] = { -0.899 }; int incX = -1; double x_expected[] = { -0.899 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 831)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.429 }; double X[] = { -0.899 }; int incX = -1; double x_expected[] = { 0.385671 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 832)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.429 }; double X[] = { -0.899 }; int incX = -1; double x_expected[] = { -0.899 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 833)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.429 }; double X[] = { -0.899 }; int incX = -1; double x_expected[] = { 0.385671 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 834)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.429 }; double X[] = { -0.899 }; int incX = -1; double x_expected[] = { -0.899 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 835)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.429 }; double X[] = { -0.899 }; int incX = -1; double x_expected[] = { 0.385671 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 836)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.429 }; double X[] = { -0.899 }; int incX = -1; double x_expected[] = { -0.899 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 837)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.842 }; double X[] = { 0.192 }; int incX = -1; double x_expected[] = { 0.161664 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 838)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.842 }; double X[] = { 0.192 }; int incX = -1; double x_expected[] = { 0.192 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 839)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.842 }; double X[] = { 0.192 }; int incX = -1; double x_expected[] = { 0.161664 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 840)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.842 }; double X[] = { 0.192 }; int incX = -1; double x_expected[] = { 0.192 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 841)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.842 }; double X[] = { 0.192 }; int incX = -1; double x_expected[] = { 0.161664 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 842)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.842 }; double X[] = { 0.192 }; int incX = -1; double x_expected[] = { 0.192 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 843)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.842 }; double X[] = { 0.192 }; int incX = -1; double x_expected[] = { 0.161664 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 844)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.842 }; double X[] = { 0.192 }; int incX = -1; double x_expected[] = { 0.192 }; cblas_dtrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtrmv(case 845)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { -0.162f, -0.108f }; float X[] = { 0.542f, 0.461f }; int incX = -1; float x_expected[] = { -0.038016f, -0.133218f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 846) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 846) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { -0.162f, -0.108f }; float X[] = { 0.542f, 0.461f }; int incX = -1; float x_expected[] = { 0.542f, 0.461f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 847) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 847) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { -0.162f, -0.108f }; float X[] = { 0.542f, 0.461f }; int incX = -1; float x_expected[] = { -0.038016f, -0.133218f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 848) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 848) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { -0.162f, -0.108f }; float X[] = { 0.542f, 0.461f }; int incX = -1; float x_expected[] = { 0.542f, 0.461f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 849) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 849) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { -0.162f, -0.108f }; float X[] = { 0.542f, 0.461f }; int incX = -1; float x_expected[] = { -0.038016f, -0.133218f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 850) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 850) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { -0.162f, -0.108f }; float X[] = { 0.542f, 0.461f }; int incX = -1; float x_expected[] = { 0.542f, 0.461f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 851) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 851) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { -0.162f, -0.108f }; float X[] = { 0.542f, 0.461f }; int incX = -1; float x_expected[] = { -0.038016f, -0.133218f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 852) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 852) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { -0.162f, -0.108f }; float X[] = { 0.542f, 0.461f }; int incX = -1; float x_expected[] = { 0.542f, 0.461f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 853) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 853) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.547f, 0.583f }; float X[] = { -0.302f, 0.434f }; int incX = -1; float x_expected[] = { -0.418216f, 0.061332f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 854) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 854) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.547f, 0.583f }; float X[] = { -0.302f, 0.434f }; int incX = -1; float x_expected[] = { -0.302f, 0.434f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 855) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 855) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.547f, 0.583f }; float X[] = { -0.302f, 0.434f }; int incX = -1; float x_expected[] = { -0.418216f, 0.061332f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 856) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 856) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.547f, 0.583f }; float X[] = { -0.302f, 0.434f }; int incX = -1; float x_expected[] = { -0.302f, 0.434f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 857) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 857) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.547f, 0.583f }; float X[] = { -0.302f, 0.434f }; int incX = -1; float x_expected[] = { -0.418216f, 0.061332f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 858) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 858) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.547f, 0.583f }; float X[] = { -0.302f, 0.434f }; int incX = -1; float x_expected[] = { -0.302f, 0.434f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 859) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 859) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.547f, 0.583f }; float X[] = { -0.302f, 0.434f }; int incX = -1; float x_expected[] = { -0.418216f, 0.061332f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 860) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 860) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.547f, 0.583f }; float X[] = { -0.302f, 0.434f }; int incX = -1; float x_expected[] = { -0.302f, 0.434f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 861) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 861) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.216f, 0.192f }; float X[] = { -0.564f, -0.297f }; int incX = -1; float x_expected[] = { -0.178848f, 0.044136f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 862) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 862) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.216f, 0.192f }; float X[] = { -0.564f, -0.297f }; int incX = -1; float x_expected[] = { -0.564f, -0.297f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 863) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 863) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.216f, 0.192f }; float X[] = { -0.564f, -0.297f }; int incX = -1; float x_expected[] = { -0.178848f, 0.044136f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 864) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 864) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.216f, 0.192f }; float X[] = { -0.564f, -0.297f }; int incX = -1; float x_expected[] = { -0.564f, -0.297f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 865) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 865) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.216f, 0.192f }; float X[] = { -0.564f, -0.297f }; int incX = -1; float x_expected[] = { -0.178848f, 0.044136f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 866) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 866) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.216f, 0.192f }; float X[] = { -0.564f, -0.297f }; int incX = -1; float x_expected[] = { -0.564f, -0.297f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 867) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 867) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 131; int N = 1; int lda = 1; float A[] = { 0.216f, 0.192f }; float X[] = { -0.564f, -0.297f }; int incX = -1; float x_expected[] = { -0.178848f, 0.044136f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 868) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 868) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 132; int N = 1; int lda = 1; float A[] = { 0.216f, 0.192f }; float X[] = { -0.564f, -0.297f }; int incX = -1; float x_expected[] = { -0.564f, -0.297f }; cblas_ctrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctrmv(case 869) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctrmv(case 869) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.693, -0.22 }; double X[] = { -0.101, 0.889 }; int incX = -1; double x_expected[] = { 0.125587, 0.638297 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 870) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 870) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.693, -0.22 }; double X[] = { -0.101, 0.889 }; int incX = -1; double x_expected[] = { -0.101, 0.889 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 871) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 871) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.693, -0.22 }; double X[] = { -0.101, 0.889 }; int incX = -1; double x_expected[] = { 0.125587, 0.638297 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 872) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 872) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.693, -0.22 }; double X[] = { -0.101, 0.889 }; int incX = -1; double x_expected[] = { -0.101, 0.889 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 873) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 873) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.693, -0.22 }; double X[] = { -0.101, 0.889 }; int incX = -1; double x_expected[] = { 0.125587, 0.638297 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 874) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 874) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.693, -0.22 }; double X[] = { -0.101, 0.889 }; int incX = -1; double x_expected[] = { -0.101, 0.889 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 875) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 875) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { 0.693, -0.22 }; double X[] = { -0.101, 0.889 }; int incX = -1; double x_expected[] = { 0.125587, 0.638297 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 876) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 876) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { 0.693, -0.22 }; double X[] = { -0.101, 0.889 }; int incX = -1; double x_expected[] = { -0.101, 0.889 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 877) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 877) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.216, -0.623 }; double X[] = { 0.048, 0.293 }; int incX = -1; double x_expected[] = { 0.172171, -0.093192 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 878) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 878) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.216, -0.623 }; double X[] = { 0.048, 0.293 }; int incX = -1; double x_expected[] = { 0.048, 0.293 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 879) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 879) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.216, -0.623 }; double X[] = { 0.048, 0.293 }; int incX = -1; double x_expected[] = { 0.172171, -0.093192 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 880) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 880) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.216, -0.623 }; double X[] = { 0.048, 0.293 }; int incX = -1; double x_expected[] = { 0.048, 0.293 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 881) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 881) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.216, -0.623 }; double X[] = { 0.048, 0.293 }; int incX = -1; double x_expected[] = { 0.172171, -0.093192 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 882) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 882) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.216, -0.623 }; double X[] = { 0.048, 0.293 }; int incX = -1; double x_expected[] = { 0.048, 0.293 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 883) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 883) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.216, -0.623 }; double X[] = { 0.048, 0.293 }; int incX = -1; double x_expected[] = { 0.172171, -0.093192 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 884) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 884) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.216, -0.623 }; double X[] = { 0.048, 0.293 }; int incX = -1; double x_expected[] = { 0.048, 0.293 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 885) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 885) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.345, -0.851 }; double X[] = { -0.708, 0.298 }; int incX = -1; double x_expected[] = { -0.009338, -0.705318 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 886) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 886) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.345, -0.851 }; double X[] = { -0.708, 0.298 }; int incX = -1; double x_expected[] = { -0.708, 0.298 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 887) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 887) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.345, -0.851 }; double X[] = { -0.708, 0.298 }; int incX = -1; double x_expected[] = { -0.009338, -0.705318 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 888) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 888) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.345, -0.851 }; double X[] = { -0.708, 0.298 }; int incX = -1; double x_expected[] = { -0.708, 0.298 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 889) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 889) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.345, -0.851 }; double X[] = { -0.708, 0.298 }; int incX = -1; double x_expected[] = { -0.009338, -0.705318 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 890) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 890) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.345, -0.851 }; double X[] = { -0.708, 0.298 }; int incX = -1; double x_expected[] = { -0.708, 0.298 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 891) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 891) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 131; int N = 1; int lda = 1; double A[] = { -0.345, -0.851 }; double X[] = { -0.708, 0.298 }; int incX = -1; double x_expected[] = { -0.009338, -0.705318 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 892) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 892) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 132; int N = 1; int lda = 1; double A[] = { -0.345, -0.851 }; double X[] = { -0.708, 0.298 }; int incX = -1; double x_expected[] = { -0.708, 0.298 }; cblas_ztrmv(order, uplo, trans, diag, N, A, lda, X, incX); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztrmv(case 893) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztrmv(case 893) imag"); }; }; }; } gsl/cblas/dsdot.c0000644000175000017500000000050313536674414012275 0ustar eddedd#include #include #include "cblas.h" double cblas_dsdot (const int N, const float *X, const int incX, const float *Y, const int incY) { #define INIT_VAL 0.0 #define ACC_TYPE double #define BASE float #include "source_dot_r.h" #undef ACC_TYPE #undef BASE #undef INIT_VAL } gsl/cblas/tests.h0000644000175000017500000000176013536674414012335 0ustar eddeddvoid test_dot (void); void test_nrm2 (void); void test_asum (void); void test_amax (void); void test_axpy (void); void test_copy (void); void test_swap (void); void test_scal (void); void test_rotg (void); void test_rot (void); void test_rotmg (void); void test_rotm (void); void test_gemv (void); void test_gbmv (void); void test_trmv (void); void test_tbmv (void); void test_tpmv (void); void test_symv (void); void test_hemv (void); void test_hbmv (void); void test_sbmv (void); void test_hpmv (void); void test_spmv (void); void test_trsv (void); void test_tbsv (void); void test_tpsv (void); void test_ger (void); void test_syr (void); void test_her (void); void test_hpr (void); void test_spr (void); void test_syr2 (void); void test_spr2 (void); void test_her2 (void); void test_hpr2 (void); void test_gemm (void); void test_symm (void); void test_hemm (void); void test_syrk (void); void test_herk (void); void test_syr2k (void); void test_her2k (void); void test_trmm (void); void test_trsm (void); gsl/cblas/source_tbsv_c.h0000644000175000017500000001514413536674414014034 0ustar eddedd/* blas/source_tbsv_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { const int conj = (TransA == CblasConjTrans) ? -1 : 1; const int Trans = (TransA != CblasConjTrans) ? TransA : CblasTrans; const int nonunit = (Diag == CblasNonUnit); INDEX i, j; CHECK_ARGS10(TBSV,order,Uplo,TransA,Diag,N,K,A,lda,X,incX); if (N == 0) return; /* form x := inv( A )*x */ if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX) + incX * (N - 1); for (i = N; i > 0 && i--;) { BASE tmp_real = REAL(X, ix); BASE tmp_imag = IMAG(X, ix); const INDEX j_min = i + 1; const INDEX j_max = GSL_MIN(N, i + K + 1); INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { const BASE Aij_real = CONST_REAL(A, lda * i + (j - i)); const BASE Aij_imag = conj * CONST_IMAG(A, lda * i + (j - i)); const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); tmp_real -= Aij_real * x_real - Aij_imag * x_imag; tmp_imag -= Aij_real * x_imag + Aij_imag * x_real; jx += incX; } if (nonunit) { const BASE a_real = CONST_REAL(A, lda * i + 0); const BASE a_imag = conj * CONST_IMAG(A, lda * i + 0); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (tmp_real * b_real + tmp_imag * b_imag) / s; IMAG(X, ix) = (tmp_imag * b_real - tmp_real * b_imag) / s; } else { REAL(X, ix) = tmp_real; IMAG(X, ix) = tmp_imag; } ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasUpper)) { /* forward substitution */ INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { BASE tmp_real = REAL(X, ix); BASE tmp_imag = IMAG(X, ix); const INDEX j_min = (K > i ? 0 : i - K); const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { const BASE Aij_real = CONST_REAL(A, lda * i + (K + j - i)); const BASE Aij_imag = conj * CONST_IMAG(A, lda * i + (K + j - i)); const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); tmp_real -= Aij_real * x_real - Aij_imag * x_imag; tmp_imag -= Aij_real * x_imag + Aij_imag * x_real; jx += incX; } if (nonunit) { const BASE a_real = CONST_REAL(A, lda * i + K); const BASE a_imag = conj * CONST_IMAG(A, lda * i + K); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (tmp_real * b_real + tmp_imag * b_imag) / s; IMAG(X, ix) = (tmp_imag * b_real - tmp_real * b_imag) / s; } else { REAL(X, ix) = tmp_real; IMAG(X, ix) = tmp_imag; } ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasLower)) { /* form x := inv( A' )*x */ /* forward substitution */ INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { BASE tmp_real = REAL(X, ix); BASE tmp_imag = IMAG(X, ix); const INDEX j_min = (K > i ? 0 : i - K); const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { const BASE Aij_real = CONST_REAL(A, (i - j) + lda * j); const BASE Aij_imag = conj * CONST_IMAG(A, (i - j) + lda * j); const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); tmp_real -= Aij_real * x_real - Aij_imag * x_imag; tmp_imag -= Aij_real * x_imag + Aij_imag * x_real; jx += incX; } if (nonunit) { const BASE a_real = CONST_REAL(A, 0 + lda * i); const BASE a_imag = conj * CONST_IMAG(A, 0 + lda * i); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (tmp_real * b_real + tmp_imag * b_imag) / s; IMAG(X, ix) = (tmp_imag * b_real - tmp_real * b_imag) / s; } else { REAL(X, ix) = tmp_real; IMAG(X, ix) = tmp_imag; } ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasUpper)) { /* backsubstitution */ INDEX ix = OFFSET(N, incX) + incX * (N - 1); for (i = N; i > 0 && i--;) { BASE tmp_real = REAL(X, ix); BASE tmp_imag = IMAG(X, ix); const INDEX j_min = i + 1; const INDEX j_max = GSL_MIN(N, i + K + 1); INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { const BASE Aij_real = CONST_REAL(A, (K + i - j) + lda * j); const BASE Aij_imag = conj * CONST_IMAG(A, (K + i - j) + lda * j); const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); tmp_real -= Aij_real * x_real - Aij_imag * x_imag; tmp_imag -= Aij_real * x_imag + Aij_imag * x_real; jx += incX; } if (nonunit) { const BASE a_real = CONST_REAL(A, K + lda * i); const BASE a_imag = conj * CONST_IMAG(A, K + lda * i); const BASE s = xhypot(a_real, a_imag); const BASE b_real = a_real / s; const BASE b_imag = a_imag / s; REAL(X, ix) = (tmp_real * b_real + tmp_imag * b_imag) / s; IMAG(X, ix) = (tmp_imag * b_real - tmp_real * b_imag) / s; } else { REAL(X, ix) = tmp_real; IMAG(X, ix) = tmp_imag; } ix -= incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/dcopy.c0000644000175000017500000000036013536674414012277 0ustar eddedd#include #include #include "cblas.h" void cblas_dcopy (const int N, const double *X, const int incX, double *Y, const int incY) { #define BASE double #include "source_copy_r.h" #undef BASE } gsl/cblas/strmm.c0000644000175000017500000000074313536674414012330 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_strmm (const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const float alpha, const float *A, const int lda, float *B, const int ldb) { #define BASE float #include "source_trmm_r.h" #undef BASE } gsl/cblas/source_scal_c_s.h0000644000175000017500000000173413536674414014322 0ustar eddedd/* blas/source_scal_c_s.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i; INDEX ix = 0; if (incX <= 0) { return; } for (i = 0; i < N; i++) { REAL(X, ix) *= alpha; IMAG(X, ix) *= alpha; ix += incX; } } gsl/cblas/scnrm2.c0000644000175000017500000000030713536674414012366 0ustar eddedd#include #include #include "cblas.h" float cblas_scnrm2 (const int N, const void *X, const int incX) { #define BASE float #include "source_nrm2_c.h" #undef BASE } gsl/cblas/sspr.c0000644000175000017500000000051613536674414012153 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_sspr (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *X, const int incX, float *Ap) { #define BASE float #include "source_spr.h" #undef BASE } gsl/cblas/ztrsv.c0000644000175000017500000000065613536674414012361 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" #include "hypot.c" void cblas_ztrsv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *A, const int lda, void *X, const int incX) { #define BASE double #include "source_trsv_c.h" #undef BASE } gsl/cblas/test_syr2k.c0000644000175000017500000004715413536674414013306 0ustar eddedd#include #include #include #include #include "tests.h" void test_syr2k (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; int trans = 111; int N = 1; int K = 2; float alpha = 0.1f; float beta = 1.0f; float A[] = { -0.915f, 0.445f }; int lda = 2; float B[] = { 0.213f, -0.194f }; int ldb = 2; float C[] = { -0.117f }; int ldc = 1; float C_expected[] = { -0.173245f }; cblas_ssyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyr2k(case 1614)"); } }; }; { int order = 101; int uplo = 122; int trans = 111; int N = 1; int K = 2; float alpha = 0.1f; float beta = 1.0f; float A[] = { 0.089f, -0.889f }; int lda = 2; float B[] = { -0.384f, 0.518f }; int ldb = 2; float C[] = { 0.069f }; int ldc = 1; float C_expected[] = { -0.0299356f }; cblas_ssyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyr2k(case 1615)"); } }; }; { int order = 102; int uplo = 121; int trans = 111; int N = 1; int K = 2; float alpha = 0.1f; float beta = 1.0f; float A[] = { 0.492f, 0.021f }; int lda = 1; float B[] = { -0.804f, -0.912f }; int ldb = 1; float C[] = { -0.851f }; int ldc = 1; float C_expected[] = { -0.933944f }; cblas_ssyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyr2k(case 1616)"); } }; }; { int order = 102; int uplo = 122; int trans = 111; int N = 1; int K = 2; float alpha = 0.1f; float beta = 1.0f; float A[] = { -0.376f, 0.689f }; int lda = 1; float B[] = { 0.21f, 0.406f }; int ldb = 1; float C[] = { -0.581f }; int ldc = 1; float C_expected[] = { -0.540845f }; cblas_ssyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyr2k(case 1617)"); } }; }; { int order = 101; int uplo = 121; int trans = 112; int N = 1; int K = 2; float alpha = 1.0f; float beta = -0.3f; float A[] = { 0.629f, -0.883f }; int lda = 1; float B[] = { -0.165f, 0.02f }; int ldb = 1; float C[] = { 0.236f }; int ldc = 1; float C_expected[] = { -0.31369f }; cblas_ssyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyr2k(case 1618)"); } }; }; { int order = 101; int uplo = 122; int trans = 112; int N = 1; int K = 2; float alpha = 1.0f; float beta = -0.3f; float A[] = { 0.412f, -0.411f }; int lda = 1; float B[] = { 0.313f, 0.301f }; int ldb = 1; float C[] = { 0.222f }; int ldc = 1; float C_expected[] = { -0.05611f }; cblas_ssyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyr2k(case 1619)"); } }; }; { int order = 102; int uplo = 121; int trans = 112; int N = 1; int K = 2; float alpha = 1.0f; float beta = -0.3f; float A[] = { -0.02f, 0.593f }; int lda = 2; float B[] = { -0.144f, 0.846f }; int ldb = 2; float C[] = { -0.645f }; int ldc = 1; float C_expected[] = { 1.20262f }; cblas_ssyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyr2k(case 1620)"); } }; }; { int order = 102; int uplo = 122; int trans = 112; int N = 1; int K = 2; float alpha = 1.0f; float beta = -0.3f; float A[] = { 0.253f, 0.937f }; int lda = 2; float B[] = { 0.24f, -0.27f }; int ldb = 2; float C[] = { 0.128f }; int ldc = 1; float C_expected[] = { -0.42294f }; cblas_ssyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssyr2k(case 1621)"); } }; }; { int order = 101; int uplo = 121; int trans = 111; int N = 1; int K = 2; double alpha = 0.1; double beta = 0; double A[] = { -0.225, 0.857 }; int lda = 2; double B[] = { -0.933, 0.994 }; int ldb = 2; double C[] = { 0.177 }; int ldc = 1; double C_expected[] = { 0.2123566 }; cblas_dsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyr2k(case 1622)"); } }; }; { int order = 101; int uplo = 122; int trans = 111; int N = 1; int K = 2; double alpha = 0.1; double beta = 0; double A[] = { -0.955, 0.112 }; int lda = 2; double B[] = { -0.695, 0.719 }; int ldb = 2; double C[] = { 0.069 }; int ldc = 1; double C_expected[] = { 0.1488506 }; cblas_dsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyr2k(case 1623)"); } }; }; { int order = 102; int uplo = 121; int trans = 111; int N = 1; int K = 2; double alpha = 0.1; double beta = 0; double A[] = { 0.216, 0.911 }; int lda = 1; double B[] = { -0.074, -0.256 }; int ldb = 1; double C[] = { -0.621 }; int ldc = 1; double C_expected[] = { -0.04984 }; cblas_dsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyr2k(case 1624)"); } }; }; { int order = 102; int uplo = 122; int trans = 111; int N = 1; int K = 2; double alpha = 0.1; double beta = 0; double A[] = { -0.343, -0.381 }; int lda = 1; double B[] = { -0.433, -0.087 }; int ldb = 1; double C[] = { -0.889 }; int ldc = 1; double C_expected[] = { 0.0363332 }; cblas_dsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyr2k(case 1625)"); } }; }; { int order = 101; int uplo = 121; int trans = 112; int N = 1; int K = 2; double alpha = 1; double beta = -1; double A[] = { -0.633, 0.219 }; int lda = 1; double B[] = { 0.817, -0.683 }; int ldb = 1; double C[] = { -0.294 }; int ldc = 1; double C_expected[] = { -1.039476 }; cblas_dsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyr2k(case 1626)"); } }; }; { int order = 101; int uplo = 122; int trans = 112; int N = 1; int K = 2; double alpha = 1; double beta = -1; double A[] = { -0.887, -0.43 }; int lda = 1; double B[] = { 0.557, 0.912 }; int ldb = 1; double C[] = { 0.831 }; int ldc = 1; double C_expected[] = { -2.603438 }; cblas_dsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyr2k(case 1627)"); } }; }; { int order = 102; int uplo = 121; int trans = 112; int N = 1; int K = 2; double alpha = 1; double beta = -1; double A[] = { 0.397, -0.173 }; int lda = 2; double B[] = { 0.155, -0.99 }; int ldb = 2; double C[] = { 0.621 }; int ldc = 1; double C_expected[] = { -0.15539 }; cblas_dsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyr2k(case 1628)"); } }; }; { int order = 102; int uplo = 122; int trans = 112; int N = 1; int K = 2; double alpha = 1; double beta = -1; double A[] = { 0.833, -0.52 }; int lda = 2; double B[] = { 0.28, 0.481 }; int ldb = 2; double C[] = { 0.455 }; int ldc = 1; double C_expected[] = { -0.48876 }; cblas_dsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsyr2k(case 1629)"); } }; }; { int order = 101; int uplo = 121; int trans = 111; int N = 1; int K = 2; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {0.0f, 0.0f}; float A[] = { -0.248f, -0.037f, -0.124f, 0.998f }; int lda = 2; float B[] = { -0.608f, -0.115f, -0.718f, -0.551f }; int ldb = 2; float C[] = { 0.187f, -0.329f }; int ldc = 1; float C_expected[] = { 0.119445f, 0.157092f }; cblas_csyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyr2k(case 1630) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyr2k(case 1630) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 111; int N = 1; int K = 2; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {0.0f, 0.0f}; float A[] = { 0.068f, 0.751f, -0.449f, -0.598f }; int lda = 2; float B[] = { 0.616f, 0.805f, -0.635f, 0.773f }; int ldb = 2; float C[] = { -0.287f, 0.917f }; int ldc = 1; float C_expected[] = { -0.110002f, 0.0369404f }; cblas_csyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyr2k(case 1631) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyr2k(case 1631) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 111; int N = 1; int K = 2; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {0.0f, 0.0f}; float A[] = { -0.396f, -0.603f, -0.131f, -0.288f }; int lda = 1; float B[] = { -0.64f, -0.444f, -0.085f, 0.936f }; int ldb = 1; float C[] = { 0.375f, -0.434f }; int ldc = 1; float C_expected[] = { -0.0927216f, 0.0532822f }; cblas_csyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyr2k(case 1632) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyr2k(case 1632) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 111; int N = 1; int K = 2; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {0.0f, 0.0f}; float A[] = { 0.655f, 0.16f, 0.45f, -0.747f }; int lda = 1; float B[] = { 0.923f, 0.432f, -0.986f, 0.259f }; int ldb = 1; float C[] = { 0.752f, 0.576f }; int ldc = 1; float C_expected[] = { -0.256746f, 0.0570436f }; cblas_csyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyr2k(case 1633) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyr2k(case 1633) imag"); }; }; }; { int order = 101; int uplo = 121; int trans = 112; int N = 1; int K = 2; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {0.0f, 0.0f}; float A[] = { -0.765f, 0.487f, 0.7f, 0.768f }; int lda = 1; float B[] = { -0.529f, 0.056f, -0.584f, 0.928f }; int ldb = 1; float C[] = { -0.426f, 0.836f }; int ldc = 1; float C_expected[] = { 0.019875f, -0.148818f }; cblas_csyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyr2k(case 1634) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyr2k(case 1634) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 112; int N = 1; int K = 2; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {0.0f, 0.0f}; float A[] = { 0.25f, 0.489f, 0.8f, -0.642f }; int lda = 1; float B[] = { -0.732f, -0.856f, -0.654f, 0.591f }; int ldb = 1; float C[] = { -0.101f, 0.322f }; int ldc = 1; float C_expected[] = { -0.064144f, 0.0183612f }; cblas_csyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyr2k(case 1635) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyr2k(case 1635) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 112; int N = 1; int K = 2; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {0.0f, 0.0f}; float A[] = { -0.579f, -0.971f, 0.521f, -0.824f }; int lda = 2; float B[] = { -0.227f, 0.907f, 0.457f, -0.274f }; int ldb = 2; float C[] = { 0.21f, -0.718f }; int ldc = 1; float C_expected[] = { 0.164812f, 0.20489f }; cblas_csyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyr2k(case 1636) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyr2k(case 1636) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 112; int N = 1; int K = 2; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {0.0f, 0.0f}; float A[] = { -0.83f, -0.512f, -0.667f, -0.436f }; int lda = 2; float B[] = { -0.443f, 0.82f, -0.259f, -0.618f }; int ldb = 2; float C[] = { 0.583f, 0.668f }; int ldc = 1; float C_expected[] = { -0.0142692f, 0.138167f }; cblas_csyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csyr2k(case 1637) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csyr2k(case 1637) imag"); }; }; }; { int order = 101; int uplo = 121; int trans = 111; int N = 1; int K = 2; double alpha[2] = {0, 0}; double beta[2] = {-0.3, 0.1}; double A[] = { -0.315, 0.03, 0.281, 0.175 }; int lda = 2; double B[] = { -0.832, -0.964, 0.291, 0.476 }; int ldb = 2; double C[] = { -0.341, 0.743 }; int ldc = 1; double C_expected[] = { 0.028, -0.257 }; cblas_zsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyr2k(case 1638) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyr2k(case 1638) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 111; int N = 1; int K = 2; double alpha[2] = {0, 0}; double beta[2] = {-0.3, 0.1}; double A[] = { -0.159, -0.489, -0.11, 0.611 }; int lda = 2; double B[] = { -0.285, -0.048, -0.673, -0.492 }; int ldb = 2; double C[] = { 0.496, -0.626 }; int ldc = 1; double C_expected[] = { -0.0862, 0.2374 }; cblas_zsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyr2k(case 1639) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyr2k(case 1639) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 111; int N = 1; int K = 2; double alpha[2] = {0, 0}; double beta[2] = {-0.3, 0.1}; double A[] = { 0.796, 0.872, -0.919, 0.748 }; int lda = 1; double B[] = { -0.945, 0.915, -0.252, -0.276 }; int ldb = 1; double C[] = { 0.07, -0.957 }; int ldc = 1; double C_expected[] = { 0.0747, 0.2941 }; cblas_zsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyr2k(case 1640) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyr2k(case 1640) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 111; int N = 1; int K = 2; double alpha[2] = {0, 0}; double beta[2] = {-0.3, 0.1}; double A[] = { 0.984, 0.526, 0.284, 0.806 }; int lda = 1; double B[] = { -0.509, -0.178, 0.188, -0.221 }; int ldb = 1; double C[] = { -0.388, 0.795 }; int ldc = 1; double C_expected[] = { 0.0369, -0.2773 }; cblas_zsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyr2k(case 1641) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyr2k(case 1641) imag"); }; }; }; { int order = 101; int uplo = 121; int trans = 112; int N = 1; int K = 2; double alpha[2] = {1, 0}; double beta[2] = {0, 0.1}; double A[] = { 0.628, 0.846, -0.645, 0.032 }; int lda = 1; double B[] = { 0.545, -0.54, 0.493, -0.035 }; int ldb = 1; double C[] = { -0.16, -0.06 }; int ldc = 1; double C_expected[] = { 0.97047, 0.304602 }; cblas_zsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyr2k(case 1642) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyr2k(case 1642) imag"); }; }; }; { int order = 101; int uplo = 122; int trans = 112; int N = 1; int K = 2; double alpha[2] = {1, 0}; double beta[2] = {0, 0.1}; double A[] = { -0.556, -0.946, 0.177, -0.859 }; int lda = 1; double B[] = { 0.423, -0.91, 0.736, -0.251 }; int ldb = 1; double C[] = { -0.478, 0.519 }; int ldc = 1; double C_expected[] = { -2.41467, -1.189498 }; cblas_zsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyr2k(case 1643) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyr2k(case 1643) imag"); }; }; }; { int order = 102; int uplo = 121; int trans = 112; int N = 1; int K = 2; double alpha[2] = {1, 0}; double beta[2] = {0, 0.1}; double A[] = { -0.582, 0.09, -0.176, 0.784 }; int lda = 2; double B[] = { 0.687, -0.859, 0.945, 0.756 }; int ldb = 2; double C[] = { -0.663, -0.186 }; int ldc = 1; double C_expected[] = { -2.144496, 2.272884 }; cblas_zsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyr2k(case 1644) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyr2k(case 1644) imag"); }; }; }; { int order = 102; int uplo = 122; int trans = 112; int N = 1; int K = 2; double alpha[2] = {1, 0}; double beta[2] = {0, 0.1}; double A[] = { 0.231, -0.452, -0.112, -0.837 }; int lda = 2; double B[] = { -0.258, 0.464, -0.224, 0.893 }; int ldb = 2; double C[] = { -0.448, 0.046 }; int ldc = 1; double C_expected[] = { 1.840718, 0.577744 }; cblas_zsyr2k(order, uplo, trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsyr2k(case 1645) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsyr2k(case 1645) imag"); }; }; }; } gsl/cblas/test_spmv.c0000644000175000017500000002021113536674414013202 0ustar eddedd#include #include #include #include #include "tests.h" void test_spmv (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; float alpha = 0.1f; float beta = -0.3f; int N = 2; float A[] = { -0.174f, 0.878f, 0.478f }; float X[] = { 0.503f, 0.313f }; int incX = -1; float Y[] = { -0.565f, -0.109f }; int incY = -1; float y_expected[] = { 0.221025f, 0.0714172f }; cblas_sspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sspmv(case 1134)"); } }; }; { int order = 101; int uplo = 121; float alpha = 0.1f; float beta = -0.3f; int N = 2; float A[] = { -0.174f, 0.878f, 0.478f }; float X[] = { 0.503f, 0.313f }; int incX = -1; float Y[] = { -0.565f, -0.109f }; int incY = -1; float y_expected[] = { 0.221025f, 0.0714172f }; cblas_sspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sspmv(case 1135)"); } }; }; { int order = 101; int uplo = 122; float alpha = 0.1f; float beta = -0.3f; int N = 2; float A[] = { -0.174f, 0.878f, 0.478f }; float X[] = { 0.503f, 0.313f }; int incX = -1; float Y[] = { -0.565f, -0.109f }; int incY = -1; float y_expected[] = { 0.221025f, 0.0714172f }; cblas_sspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sspmv(case 1136)"); } }; }; { int order = 101; int uplo = 122; float alpha = 0.1f; float beta = -0.3f; int N = 2; float A[] = { -0.174f, 0.878f, 0.478f }; float X[] = { 0.503f, 0.313f }; int incX = -1; float Y[] = { -0.565f, -0.109f }; int incY = -1; float y_expected[] = { 0.221025f, 0.0714172f }; cblas_sspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sspmv(case 1137)"); } }; }; { int order = 102; int uplo = 121; float alpha = 0.1f; float beta = -0.3f; int N = 2; float A[] = { -0.174f, 0.878f, 0.478f }; float X[] = { 0.503f, 0.313f }; int incX = -1; float Y[] = { -0.565f, -0.109f }; int incY = -1; float y_expected[] = { 0.221025f, 0.0714172f }; cblas_sspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sspmv(case 1138)"); } }; }; { int order = 102; int uplo = 121; float alpha = 0.1f; float beta = -0.3f; int N = 2; float A[] = { -0.174f, 0.878f, 0.478f }; float X[] = { 0.503f, 0.313f }; int incX = -1; float Y[] = { -0.565f, -0.109f }; int incY = -1; float y_expected[] = { 0.221025f, 0.0714172f }; cblas_sspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sspmv(case 1139)"); } }; }; { int order = 102; int uplo = 122; float alpha = 0.1f; float beta = -0.3f; int N = 2; float A[] = { -0.174f, 0.878f, 0.478f }; float X[] = { 0.503f, 0.313f }; int incX = -1; float Y[] = { -0.565f, -0.109f }; int incY = -1; float y_expected[] = { 0.221025f, 0.0714172f }; cblas_sspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sspmv(case 1140)"); } }; }; { int order = 102; int uplo = 122; float alpha = 0.1f; float beta = -0.3f; int N = 2; float A[] = { -0.174f, 0.878f, 0.478f }; float X[] = { 0.503f, 0.313f }; int incX = -1; float Y[] = { -0.565f, -0.109f }; int incY = -1; float y_expected[] = { 0.221025f, 0.0714172f }; cblas_sspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "sspmv(case 1141)"); } }; }; { int order = 101; int uplo = 121; double alpha = -1; double beta = 0.1; int N = 2; double A[] = { -0.181, -0.071, -0.038 }; double X[] = { -0.015, 0.132 }; int incX = -1; double Y[] = { -0.449, -0.219 }; int incY = -1; double y_expected[] = { -0.036098, 9.27e-04 }; cblas_dspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dspmv(case 1142)"); } }; }; { int order = 101; int uplo = 121; double alpha = -1; double beta = 0.1; int N = 2; double A[] = { -0.181, -0.071, -0.038 }; double X[] = { -0.015, 0.132 }; int incX = -1; double Y[] = { -0.449, -0.219 }; int incY = -1; double y_expected[] = { -0.036098, 9.27e-04 }; cblas_dspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dspmv(case 1143)"); } }; }; { int order = 101; int uplo = 122; double alpha = -1; double beta = 0.1; int N = 2; double A[] = { -0.181, -0.071, -0.038 }; double X[] = { -0.015, 0.132 }; int incX = -1; double Y[] = { -0.449, -0.219 }; int incY = -1; double y_expected[] = { -0.036098, 9.27e-04 }; cblas_dspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dspmv(case 1144)"); } }; }; { int order = 101; int uplo = 122; double alpha = -1; double beta = 0.1; int N = 2; double A[] = { -0.181, -0.071, -0.038 }; double X[] = { -0.015, 0.132 }; int incX = -1; double Y[] = { -0.449, -0.219 }; int incY = -1; double y_expected[] = { -0.036098, 9.27e-04 }; cblas_dspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dspmv(case 1145)"); } }; }; { int order = 102; int uplo = 121; double alpha = -1; double beta = 0.1; int N = 2; double A[] = { -0.181, -0.071, -0.038 }; double X[] = { -0.015, 0.132 }; int incX = -1; double Y[] = { -0.449, -0.219 }; int incY = -1; double y_expected[] = { -0.036098, 9.27e-04 }; cblas_dspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dspmv(case 1146)"); } }; }; { int order = 102; int uplo = 121; double alpha = -1; double beta = 0.1; int N = 2; double A[] = { -0.181, -0.071, -0.038 }; double X[] = { -0.015, 0.132 }; int incX = -1; double Y[] = { -0.449, -0.219 }; int incY = -1; double y_expected[] = { -0.036098, 9.27e-04 }; cblas_dspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dspmv(case 1147)"); } }; }; { int order = 102; int uplo = 122; double alpha = -1; double beta = 0.1; int N = 2; double A[] = { -0.181, -0.071, -0.038 }; double X[] = { -0.015, 0.132 }; int incX = -1; double Y[] = { -0.449, -0.219 }; int incY = -1; double y_expected[] = { -0.036098, 9.27e-04 }; cblas_dspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dspmv(case 1148)"); } }; }; { int order = 102; int uplo = 122; double alpha = -1; double beta = 0.1; int N = 2; double A[] = { -0.181, -0.071, -0.038 }; double X[] = { -0.015, 0.132 }; int incX = -1; double Y[] = { -0.449, -0.219 }; int incY = -1; double y_expected[] = { -0.036098, 9.27e-04 }; cblas_dspmv(order, uplo, N, alpha, A, X, incX, beta, Y, incY); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dspmv(case 1149)"); } }; }; } gsl/cblas/zsyr2k.c0000644000175000017500000000072113536674414012426 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_zsyr2k (const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc) { #define BASE double #include "source_syr2k_c.h" #undef BASE } gsl/cblas/dsyr2k.c0000644000175000017500000000074713536674414012410 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_dsyr2k (const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const double alpha, const double *A, const int lda, const double *B, const int ldb, const double beta, double *C, const int ldc) { #define BASE double #include "source_syr2k_r.h" #undef BASE } gsl/cblas/csymm.c0000644000175000017500000000070513536674414012314 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_csymm (const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc) { #define BASE float #include "source_symm_c.h" #undef BASE } gsl/cblas/srotg.c0000644000175000017500000000027713536674414012326 0ustar eddedd#include #include #include "cblas.h" void cblas_srotg (float *a, float *b, float *c, float *s) { #define BASE float #include "source_rotg.h" #undef BASE } gsl/cblas/source_dot_r.h0000644000175000017500000000177313536674414013666 0ustar eddedd/* blas/source_dot_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { ACC_TYPE r = INIT_VAL; INDEX i; INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { r += X[ix] * Y[iy]; ix += incX; iy += incY; } return r; } gsl/cblas/daxpy.c0000644000175000017500000000040413536674414012305 0ustar eddedd#include #include #include "cblas.h" void cblas_daxpy (const int N, const double alpha, const double *X, const int incX, double *Y, const int incY) { #define BASE double #include "source_axpy_r.h" #undef BASE } gsl/cblas/ssbmv.c0000644000175000017500000000065413536674414012321 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_ssbmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const int K, const float alpha, const float *A, const int lda, const float *X, const int incX, const float beta, float *Y, const int incY) { #define BASE float #include "source_sbmv.h" #undef BASE } gsl/cblas/cgbmv.c0000644000175000017500000000071613536674414012264 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_cgbmv (const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const int KL, const int KU, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY) { #define BASE float #include "source_gbmv_c.h" #undef BASE } gsl/cblas/isamax.c0000644000175000017500000000031713536674414012445 0ustar eddedd#include #include #include "cblas.h" CBLAS_INDEX cblas_isamax (const int N, const float *X, const int incX) { #define BASE float #include "source_iamax_r.h" #undef BASE } gsl/cblas/test_rotm.c0000644000175000017500000010502513536674414013205 0ustar eddedd#include #include #include #include #include "tests.h" void test_rotm (void) { const double flteps = 1e-4, dbleps = 1e-6; { int N = 1; float h[] = { -1.0f, -4.44982e+03f, -15.5826f, 7.091334e+04f, 2.95912e+04f }; float X[] = { -0.034f }; int incX = 1; float Y[] = { -0.56f }; int incY = -1; float x_expected[] = { -3.956017e+04f }; float y_expected[] = { -1.657054e+04f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 654)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 655)"); } }; }; { int N = 1; float h[] = { 0.0f, 15.9728f, 6.400638e+03f, 1.733082e-05f, 1.524511e-04f }; float X[] = { -0.034f }; int incX = 1; float Y[] = { -0.56f }; int incY = -1; float x_expected[] = { -0.0340097f }; float y_expected[] = { -218.182f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 656)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 657)"); } }; }; { int N = 1; float h[] = { 1.0f, 5.688411e+04f, 5.914789e+03f, 0.00210473f, 0.0231019f }; float X[] = { -0.034f }; int incX = 1; float Y[] = { -0.56f }; int incY = -1; float x_expected[] = { -1.93462e+03f }; float y_expected[] = { 0.0210629f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 658)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 659)"); } }; }; { int N = 1; float h[] = { -2.0f, -0.582083f, 0.00103161f, -3.429851e-05f, 7.411469e-05f }; float X[] = { -0.034f }; int incX = 1; float Y[] = { -0.56f }; int incY = -1; float x_expected[] = { -0.034f }; float y_expected[] = { -0.56f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 660)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 661)"); } }; }; { int N = 1; float h[] = { -1.0f, 115.163f, -6.715448e+04f, -258.695f, -16.2552f }; float X[] = { -0.034f }; int incX = 1; float Y[] = { -0.56f }; int incY = -1; float x_expected[] = { 140.954f }; float y_expected[] = { 2.292355e+03f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 662)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 663)"); } }; }; { int N = 1; float h[] = { 0.0f, -3.314862e+03f, -442.976f, -214.586f, -25.9716f }; float X[] = { -0.034f }; int incX = 1; float Y[] = { -0.56f }; int incY = -1; float x_expected[] = { 120.134f }; float y_expected[] = { 14.5012f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 664)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 665)"); } }; }; { int N = 1; float h[] = { 1.0f, -1.177304e+03f, -1.236662e-04f, -0.186585f, 1.15841f }; float X[] = { -0.034f }; int incX = 1; float Y[] = { -0.56f }; int incY = -1; float x_expected[] = { 39.4683f }; float y_expected[] = { -0.614711f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 666)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 667)"); } }; }; { int N = 1; float h[] = { -2.0f, -88.9796f, 0.808226f, 1.106582e-05f, -0.00862288f }; float X[] = { -0.034f }; int incX = 1; float Y[] = { -0.56f }; int incY = -1; float x_expected[] = { -0.034f }; float y_expected[] = { -0.56f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 668)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 669)"); } }; }; { int N = 1; float h[] = { -1.0f, -0.00225865f, 8.338551e+04f, -1.98282f, -2.409905e-05f }; float X[] = { -0.034f }; int incX = 1; float Y[] = { -0.56f }; int incY = -1; float x_expected[] = { 1.11046f }; float y_expected[] = { -2.835107e+03f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 670)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 671)"); } }; }; { int N = 1; float h[] = { 0.0f, 0.258779f, 74.2802f, 0.923299f, 4.847128e+03f }; float X[] = { -0.034f }; int incX = 1; float Y[] = { -0.56f }; int incY = -1; float x_expected[] = { -0.551048f }; float y_expected[] = { -3.08553f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 672)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 673)"); } }; }; { int N = 1; double h[] = { -1.0, -8.00850735044, 0.0204647351647, 1.898461360078e-04, -4.32701487194 }; double X[] = { 0.84 }; int incX = 1; double Y[] = { -0.711 }; int incY = -1; double x_expected[] = { -6.72728115497 }; double y_expected[] = { 3.09369795149 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 674)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 675)"); } }; }; { int N = 1; double h[] = { 0.0, 1.230610998905e+04, 210.056650134, 9.20757074452, 2.072879691524e+03 }; double X[] = { 0.84 }; int incX = 1; double Y[] = { -0.711 }; int incY = -1; double x_expected[] = { -5.70658279935 }; double y_expected[] = { 175.736586112 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 676)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 677)"); } }; }; { int N = 1; double h[] = { 1.0, -1.244580625511e+03, 1.11154682624, 2.269384716089e-05, -0.0143785338883 }; double X[] = { 0.84 }; int incX = 1; double Y[] = { -0.711 }; int incY = -1; double x_expected[] = { -1.046158725429e+03 }; double y_expected[] = { -0.829776862405 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 678)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 679)"); } }; }; { int N = 1; double h[] = { -2.0, 293.927527276, -2.614737743134e+03, 10.3164975867, -7.947030813329e+03 }; double X[] = { 0.84 }; int incX = 1; double Y[] = { -0.711 }; int incY = -1; double x_expected[] = { 0.84 }; double y_expected[] = { -0.711 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 680)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 681)"); } }; }; { int N = 1; double h[] = { -1.0, -0.0178609251786, 0.00983044958941, 105.944529127, 1.687350579234e-05 }; double X[] = { 0.84 }; int incX = 1; double Y[] = { -0.711 }; int incY = -1; double x_expected[] = { -75.3415633866 }; double y_expected[] = { 0.00824558059248 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 682)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 683)"); } }; }; { int N = 1; double h[] = { 0.0, 6.241999071283e-05, 2.495425882445e+03, 304.604891146, 1.604644714854e+04 }; double X[] = { 0.84 }; int incX = 1; double Y[] = { -0.711 }; int incY = -1; double x_expected[] = { -215.734077605 }; double y_expected[] = { 2.095446741254e+03 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 684)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 685)"); } }; }; { int N = 1; double h[] = { 1.0, -0.058097639487, 8.386083625428e+03, -10.5233229994, 184.653245391 }; double X[] = { 0.84 }; int incX = 1; double Y[] = { -0.711 }; int incY = -1; double x_expected[] = { -0.759802017169 }; double y_expected[] = { -132.128457473 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 686)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 687)"); } }; }; { int N = 1; double h[] = { -2.0, -92.8754629217, 1.467547244529e-04, -3.197881072301e-04, -1.89874629713 }; double X[] = { 0.84 }; int incX = 1; double Y[] = { -0.711 }; int incY = -1; double x_expected[] = { 0.84 }; double y_expected[] = { -0.711 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 688)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 689)"); } }; }; { int N = 1; double h[] = { -1.0, -0.0961996230646, -2.248344186185e-05, -316.856396787, 1.663969157848e+03 }; double X[] = { 0.84 }; int incX = 1; double Y[] = { -0.711 }; int incY = -1; double x_expected[] = { 225.204090432 }; double y_expected[] = { -1.183082090116e+03 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 690)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 691)"); } }; }; { int N = 1; double h[] = { 0.0, -201.862043128, 4.999906166451e-04, -0.0653365534487, 586.454083328 }; double X[] = { 0.84 }; int incX = 1; double Y[] = { -0.711 }; int incY = -1; double x_expected[] = { 0.886454289502 }; double y_expected[] = { -0.710580007882 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 692)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 693)"); } }; }; { int N = 1; float h[] = { -1.0f, 162.86f, 1.379231e-04f, 9.67285f, 0.929218f }; float X[] = { 0.629f }; int incX = -1; float Y[] = { 0.386f }; int incY = 1; float x_expected[] = { 106.173f }; float y_expected[] = { 0.358765f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 694)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 695)"); } }; }; { int N = 1; float h[] = { 0.0f, 537.387f, -21.6404f, -1.017074e+03f, -1.730546e-05f }; float X[] = { 0.629f }; int incX = -1; float Y[] = { 0.386f }; int incY = 1; float x_expected[] = { -391.961f }; float y_expected[] = { -13.2258f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 696)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 697)"); } }; }; { int N = 1; float h[] = { 1.0f, -1.339977e-05f, 0.00522784f, 2.020352e-05f, -0.0654088f }; float X[] = { 0.629f }; int incX = -1; float Y[] = { 0.386f }; int incY = 1; float x_expected[] = { 0.385992f }; float y_expected[] = { -0.654248f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 698)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 699)"); } }; }; { int N = 1; float h[] = { -2.0f, -50.922f, 31.5261f, -0.194913f, 0.206417f }; float X[] = { 0.629f }; int incX = -1; float Y[] = { 0.386f }; int incY = 1; float x_expected[] = { 0.629f }; float y_expected[] = { 0.386f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 700)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 701)"); } }; }; { int N = 1; float h[] = { -1.0f, 1.15659f, 2.599832e+04f, 435.891f, 1.546671e+03f }; float X[] = { 0.629f }; int incX = -1; float Y[] = { 0.386f }; int incY = 1; float x_expected[] = { 168.981f }; float y_expected[] = { 1.694996e+04f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 702)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 703)"); } }; }; { int N = 1; float h[] = { 0.0f, 3.359889e-04f, -0.00134822f, -12.9136f, -5.655622e+04f }; float X[] = { 0.629f }; int incX = -1; float Y[] = { 0.386f }; int incY = 1; float x_expected[] = { -4.35566f }; float y_expected[] = { 0.385152f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 704)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 705)"); } }; }; { int N = 1; float h[] = { 1.0f, 2.75119e-05f, 1.70314f, 18.4063f, 185.731f }; float X[] = { 0.629f }; int incX = -1; float Y[] = { 0.386f }; int incY = 1; float x_expected[] = { 0.386017f }; float y_expected[] = { 71.063f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 706)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 707)"); } }; }; { int N = 1; float h[] = { -2.0f, -1.031009e-04f, -3.378602e+04f, 7.869358e-05f, 157.303f }; float X[] = { 0.629f }; int incX = -1; float Y[] = { 0.386f }; int incY = 1; float x_expected[] = { 0.629f }; float y_expected[] = { 0.386f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 708)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 709)"); } }; }; { int N = 1; float h[] = { -1.0f, 0.00207419f, -89.9374f, -1.40414f, -25.1433f }; float X[] = { 0.629f }; int incX = -1; float Y[] = { 0.386f }; int incY = 1; float x_expected[] = { -0.540694f }; float y_expected[] = { -66.276f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 710)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 711)"); } }; }; { int N = 1; float h[] = { 0.0f, -4.972562e+04f, 3.65698e-05f, 632.116f, 0.195207f }; float X[] = { 0.629f }; int incX = -1; float Y[] = { 0.386f }; int incY = 1; float x_expected[] = { 244.626f }; float y_expected[] = { 0.386023f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 712)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 713)"); } }; }; { int N = 1; double h[] = { -1.0, 8.64768339859, -105.906731008, -347.053994991, -1.28802789909 }; double X[] = { -0.674 }; int incX = -1; double Y[] = { -0.645 }; int incY = 1; double x_expected[] = { 218.021288159 }; double y_expected[] = { 72.2119146942 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 714)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 715)"); } }; }; { int N = 1; double h[] = { 0.0, 0.926057152065, 3.315158944851e-04, -1.203638835886e+03, 0.00197484344868 }; double X[] = { -0.674 }; int incX = -1; double Y[] = { -0.645 }; int incY = 1; double x_expected[] = { 775.673049147 }; double y_expected[] = { -0.645223441713 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 716)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 717)"); } }; }; { int N = 1; double h[] = { 1.0, -9.404298701289e-05, -0.00380843381223, -0.0767212569647, -3.66628238398 }; double X[] = { -0.674 }; int incX = -1; double Y[] = { -0.645 }; int incY = 1; double x_expected[] = { -0.644936615027 }; double y_expected[] = { 3.03875213767 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 718)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 719)"); } }; }; { int N = 1; double h[] = { -2.0, 0.0900662226146, 0.00250500071094, 6.46624826995, -2.159443948633e-05 }; double X[] = { -0.674 }; int incX = -1; double Y[] = { -0.645 }; int incY = 1; double x_expected[] = { -0.674 }; double y_expected[] = { -0.645 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 720)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 721)"); } }; }; { int N = 1; double h[] = { -1.0, 8.011686652935e+03, -23.8989526115, -1.104879849207e+04, 0.108740065261 }; double X[] = { -0.674 }; int incX = -1; double Y[] = { -0.645 }; int incY = 1; double x_expected[] = { 1.726598223305e+03 }; double y_expected[] = { 16.0377567181 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 722)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 723)"); } }; }; { int N = 1; double h[] = { 0.0, 5.162681717012e-05, 48.059409562, -4.701209666609e+04, -6.80333644488e+04 }; double X[] = { -0.674 }; int incX = -1; double Y[] = { -0.645 }; int incY = 1; double x_expected[] = { 3.032212834963e+04 }; double y_expected[] = { -33.0370420448 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 724)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 725)"); } }; }; { int N = 1; double h[] = { 1.0, -5.554806445579e-04, 5.101973060197e+04, -5.932040237374e+03, 3.91045757161 }; double X[] = { -0.674 }; int incX = -1; double Y[] = { -0.645 }; int incY = 1; double x_expected[] = { -0.644625606046 }; double y_expected[] = { -1.84824513369 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 726)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 727)"); } }; }; { int N = 1; double h[] = { -2.0, -1.697234884626e-05, 101.466514367, 5.772202675851e+03, -6.884724590773e-04 }; double X[] = { -0.674 }; int incX = -1; double Y[] = { -0.645 }; int incY = 1; double x_expected[] = { -0.674 }; double y_expected[] = { -0.645 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 728)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 729)"); } }; }; { int N = 1; double h[] = { -1.0, -0.0199779342753, 13.013123509, -17.8393347684, 0.129333249919 }; double X[] = { -0.674 }; int incX = -1; double Y[] = { -0.645 }; int incY = 1; double x_expected[] = { 11.5198360534 }; double y_expected[] = { -8.85426519126 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 730)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 731)"); } }; }; { int N = 1; double h[] = { 0.0, -6.673799053773e+04, 587.759435538, 3.493966594965e+04, 2.098374142331e-05 }; double X[] = { -0.674 }; int incX = -1; double Y[] = { -0.645 }; int incY = 1; double x_expected[] = { -2.253675853752e+04 }; double y_expected[] = { -396.794859553 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 732)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 733)"); } }; }; { int N = 1; float h[] = { -1.0f, 0.070033f, 0.034824f, -0.00740144f, -0.153474f }; float X[] = { -0.111f }; int incX = -1; float Y[] = { -0.103f }; int incY = -1; float x_expected[] = { -0.00701131f }; float y_expected[] = { 0.0119423f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 734)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 735)"); } }; }; { int N = 1; float h[] = { 0.0f, 7.618016e-04f, -0.00396806f, -92.8408f, -0.0018571f }; float X[] = { -0.111f }; int incX = -1; float Y[] = { -0.103f }; int incY = -1; float x_expected[] = { 9.4516f }; float y_expected[] = { -0.10256f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 736)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 737)"); } }; }; { int N = 1; float h[] = { 1.0f, -5.833806e+03f, 0.00265668f, -587.573f, 0.0972416f }; float X[] = { -0.111f }; int incX = -1; float Y[] = { -0.103f }; int incY = -1; float x_expected[] = { 647.449f }; float y_expected[] = { 0.100984f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 738)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 739)"); } }; }; { int N = 1; float h[] = { -2.0f, -8.93339e+04f, -5.16022e-05f, 2.589784e-05f, -7.52586f }; float X[] = { -0.111f }; int incX = -1; float Y[] = { -0.103f }; int incY = -1; float x_expected[] = { -0.111f }; float y_expected[] = { -0.103f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 740)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 741)"); } }; }; { int N = 1; float h[] = { -1.0f, 0.125135f, 0.00586453f, 1.100694e-05f, -0.0137436f }; float X[] = { -0.111f }; int incX = -1; float Y[] = { -0.103f }; int incY = -1; float x_expected[] = { -0.0138912f }; float y_expected[] = { 7.64631e-04f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 742)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 743)"); } }; }; { int N = 1; float h[] = { 0.0f, -0.0996414f, 0.00505806f, 1.321441e-05f, 1.151406e-04f }; float X[] = { -0.111f }; int incX = -1; float Y[] = { -0.103f }; int incY = -1; float x_expected[] = { -0.111001f }; float y_expected[] = { -0.103561f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 744)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 745)"); } }; }; { int N = 1; float h[] = { 1.0f, 8.18165f, 169.902f, -1.453316e-05f, 1.539957e+03f }; float X[] = { -0.111f }; int incX = -1; float Y[] = { -0.103f }; int incY = -1; float x_expected[] = { -1.01116f }; float y_expected[] = { -158.505f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 746)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 747)"); } }; }; { int N = 1; float h[] = { -2.0f, 1.827623e-04f, -0.0528808f, 24.7305f, 328.39f }; float X[] = { -0.111f }; int incX = -1; float Y[] = { -0.103f }; int incY = -1; float x_expected[] = { -0.111f }; float y_expected[] = { -0.103f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 748)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 749)"); } }; }; { int N = 1; float h[] = { -1.0f, -0.0876053f, 7.858704e+04f, -4.758389e+03f, -0.0114841f }; float X[] = { -0.111f }; int incX = -1; float Y[] = { -0.103f }; int incY = -1; float x_expected[] = { 490.124f }; float y_expected[] = { -8.72316e+03f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 750)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 751)"); } }; }; { int N = 1; float h[] = { 0.0f, 0.00192188f, -1.031412e-05f, -0.00123957f, 0.312197f }; float X[] = { -0.111f }; int incX = -1; float Y[] = { -0.103f }; int incY = -1; float x_expected[] = { -0.110872f }; float y_expected[] = { -0.102999f }; cblas_srotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "srotm(case 752)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "srotm(case 753)"); } }; }; { int N = 1; double h[] = { -1.0, -0.0253351881542, -0.105247702585, -7.18405641016, -5.409804811228e+04 }; double X[] = { 0.203 }; int incX = -1; double Y[] = { -0.03 }; int incY = -1; double x_expected[] = { 0.21037864911 }; double y_expected[] = { 1.622920078085e+03 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 754)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 755)"); } }; }; { int N = 1; double h[] = { 0.0, 8.503080247483e+03, -6.186691885896e-05, -0.201279925805, -5.810746179529e-05 }; double X[] = { 0.203 }; int incX = -1; double Y[] = { -0.03 }; int incY = -1; double x_expected[] = { 0.209038397774 }; double y_expected[] = { -0.0300125589845 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 756)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 757)"); } }; }; { int N = 1; double h[] = { 1.0, 0.351101212426, 64.9574703355, 3.015315809025e-05, -5.291308403203e-04 }; double X[] = { 0.203 }; int incX = -1; double Y[] = { -0.03 }; int incY = -1; double x_expected[] = { 0.0412735461225 }; double y_expected[] = { -0.202984126075 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 758)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 759)"); } }; }; { int N = 1; double h[] = { -2.0, 0.0220262018719, -0.00311338149392, -70.6413298654, 31.8952671416 }; double X[] = { 0.203 }; int incX = -1; double Y[] = { -0.03 }; int incY = -1; double x_expected[] = { 0.203 }; double y_expected[] = { -0.03 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 760)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 761)"); } }; }; { int N = 1; double h[] = { -1.0, 1.549812806922e+04, -4.868519165134e+04, -5.230242596804e+04, 1.58043443456e+04 }; double X[] = { 0.203 }; int incX = -1; double Y[] = { -0.03 }; int incY = -1; double x_expected[] = { 4.715192777093e+03 }; double y_expected[] = { -1.035722423559e+04 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 762)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 763)"); } }; }; { int N = 1; double h[] = { 0.0, -3.30917942895, -0.0100316602276, -0.0222191220411, -0.0881815578726 }; double X[] = { 0.203 }; int incX = -1; double Y[] = { -0.03 }; int incY = -1; double x_expected[] = { 0.203666573661 }; double y_expected[] = { -0.0320364270262 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 764)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 765)"); } }; }; { int N = 1; double h[] = { 1.0, 5.68327898035, 1.646867755046e-04, -0.106527931872, -28.2458905362 }; double X[] = { 0.203 }; int incX = -1; double Y[] = { -0.03 }; int incY = -1; double x_expected[] = { 1.12370563301 }; double y_expected[] = { 0.644376716086 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 766)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 767)"); } }; }; { int N = 1; double h[] = { -2.0, 2.20585352008, 1.117638462348e+03, -0.116329468158, 0.00362096329059 }; double X[] = { 0.203 }; int incX = -1; double Y[] = { -0.03 }; int incY = -1; double x_expected[] = { 0.203 }; double y_expected[] = { -0.03 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 768)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 769)"); } }; }; { int N = 1; double h[] = { -1.0, -0.00182683798892, -2.288460066516e-05, -37.55844708, -9.54075659826e-05 }; double X[] = { 0.203 }; int incX = -1; double Y[] = { -0.03 }; int incY = -1; double x_expected[] = { 1.12638256429 }; double y_expected[] = { -1.783346955549e-06 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 770)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 771)"); } }; }; { int N = 1; double h[] = { 0.0, 1.02690456955e-04, -20.1292302013, -1.703870486677e-04, 5.17477399477 }; double X[] = { 0.203 }; int incX = -1; double Y[] = { -0.03 }; int incY = -1; double x_expected[] = { 0.203005111611 }; double y_expected[] = { -4.11623373087 }; cblas_drotm(N, X, incX, Y, incY, h); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "drotm(case 772)"); } }; { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "drotm(case 773)"); } }; }; } gsl/cblas/source_gbmv_c.h0000644000175000017500000001353613536674414014014 0ustar eddedd/* blas/source_gbmv_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; INDEX lenX, lenY, L, U; const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); const BASE beta_real = CONST_REAL0(beta); const BASE beta_imag = CONST_IMAG0(beta); CHECK_ARGS14(GBMV,order,TransA,M,N,KL,KU,alpha,A,lda,X,incX,beta,Y,incY); if (M == 0 || N == 0) return; if ((alpha_real == 0.0 && alpha_imag == 0.0) && (beta_real == 1.0 && beta_imag == 0.0)) return; if (TransA == CblasNoTrans) { lenX = N; lenY = M; L = KL; U = KU; } else { lenX = M; lenY = N; L = KU; U = KL; } /* form y := beta*y */ if (beta_real == 0.0 && beta_imag == 0.0) { INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { REAL(Y, iy) = 0.0; IMAG(Y, iy) = 0.0; iy += incY; } } else if (!(beta_real == 1.0 && beta_imag == 0.0)) { INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { const BASE y_real = REAL(Y, iy); const BASE y_imag = IMAG(Y, iy); const BASE tmpR = y_real * beta_real - y_imag * beta_imag; const BASE tmpI = y_real * beta_imag + y_imag * beta_real; REAL(Y, iy) = tmpR; IMAG(Y, iy) = tmpI; iy += incY; } } if (alpha_real == 0.0 && alpha_imag == 0.0) return; if ((order == CblasRowMajor && TransA == CblasNoTrans) || (order == CblasColMajor && TransA == CblasTrans)) { /* form y := alpha*A*x + y */ INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { BASE dotR = 0.0; BASE dotI = 0.0; const INDEX j_min = (i > L ? i - L : 0); const INDEX j_max = GSL_MIN(lenX, i + U + 1); INDEX ix = OFFSET(lenX, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { const BASE x_real = CONST_REAL(X, ix); const BASE x_imag = CONST_IMAG(X, ix); const BASE A_real = CONST_REAL(A, lda * i + (L + j - i)); const BASE A_imag = CONST_IMAG(A, lda * i + (L + j - i)); dotR += A_real * x_real - A_imag * x_imag; dotI += A_real * x_imag + A_imag * x_real; ix += incX; } REAL(Y, iy) += alpha_real * dotR - alpha_imag * dotI; IMAG(Y, iy) += alpha_real * dotI + alpha_imag * dotR; iy += incY; } } else if ((order == CblasRowMajor && TransA == CblasTrans) || (order == CblasColMajor && TransA == CblasNoTrans)) { /* form y := alpha*A'*x + y */ INDEX ix = OFFSET(lenX, incX); for (j = 0; j < lenX; j++) { const BASE x_real = CONST_REAL(X, ix); const BASE x_imag = CONST_IMAG(X, ix); BASE tmpR = alpha_real * x_real - alpha_imag * x_imag; BASE tmpI = alpha_real * x_imag + alpha_imag * x_real; if (!(tmpR == 0.0 && tmpI == 0.0)) { const INDEX i_min = (j > U ? j - U : 0); const INDEX i_max = GSL_MIN(lenY, j + L + 1); INDEX iy = OFFSET(lenY, incY) + i_min * incY; for (i = i_min; i < i_max; i++) { const BASE A_real = CONST_REAL(A, lda * j + (U + i - j)); const BASE A_imag = CONST_IMAG(A, lda * j + (U + i - j)); REAL(Y, iy) += A_real * tmpR - A_imag * tmpI; IMAG(Y, iy) += A_real * tmpI + A_imag * tmpR; iy += incY; } } ix += incX; } } else if (order == CblasRowMajor && TransA == CblasConjTrans) { /* form y := alpha*A^H*x + y */ INDEX ix = OFFSET(lenX, incX); for (j = 0; j < lenX; j++) { const BASE x_real = CONST_REAL(X, ix); const BASE x_imag = CONST_IMAG(X, ix); BASE tmpR = alpha_real * x_real - alpha_imag * x_imag; BASE tmpI = alpha_real * x_imag + alpha_imag * x_real; if (!(tmpR == 0.0 && tmpI == 0.0)) { const INDEX i_min = (j > U ? j - U : 0); const INDEX i_max = GSL_MIN(lenY, j + L + 1); INDEX iy = OFFSET(lenY, incY) + i_min * incY; for (i = i_min; i < i_max; i++) { const BASE A_real = CONST_REAL(A, lda * j + (U + i - j)); const BASE A_imag = CONST_IMAG(A, lda * j + (U + i - j)); REAL(Y, iy) += A_real * tmpR - (-A_imag) * tmpI; IMAG(Y, iy) += A_real * tmpI + (-A_imag) * tmpR; iy += incY; } } ix += incX; } } else if (order == CblasColMajor && TransA == CblasConjTrans) { /* form y := alpha*A^H*x + y */ INDEX iy = OFFSET(lenY, incY); for (i = 0; i < lenY; i++) { BASE dotR = 0.0; BASE dotI = 0.0; const INDEX j_min = (i > L ? i - L : 0); const INDEX j_max = GSL_MIN(lenX, i + U + 1); INDEX ix = OFFSET(lenX, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { const BASE x_real = CONST_REAL(X, ix); const BASE x_imag = CONST_IMAG(X, ix); const BASE A_real = CONST_REAL(A, lda * i + (L + j - i)); const BASE A_imag = CONST_IMAG(A, lda * i + (L + j - i)); dotR += A_real * x_real - (-A_imag) * x_imag; dotI += A_real * x_imag + (-A_imag) * x_real; ix += incX; } REAL(Y, iy) += alpha_real * dotR - alpha_imag * dotI; IMAG(Y, iy) += alpha_real * dotI + alpha_imag * dotR; iy += incY; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/chpr2.c0000644000175000017500000000055713536674414012207 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_chpr2 (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *Ap) { #define BASE float #include "source_hpr2.h" #undef BASE } gsl/cblas/ztrmm.c0000644000175000017500000000074213536674414012336 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_ztrmm (const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const void *alpha, const void *A, const int lda, void *B, const int ldb) { #define BASE double #include "source_trmm_c.h" #undef BASE } gsl/cblas/source_axpy_c.h0000644000175000017500000000247213536674414014037 0ustar eddedd/* blas/source_axpy_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i; INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); if (fabs(alpha_real) == 0 && fabs(alpha_imag) == 0) { return; } for (i = 0; i < N; i++) { const BASE x_real = CONST_REAL(X, ix); const BASE x_imag = CONST_IMAG(X, ix); REAL(Y, iy) += (alpha_real * x_real - alpha_imag * x_imag); IMAG(Y, iy) += (alpha_real * x_imag + alpha_imag * x_real); ix += incX; iy += incY; } } gsl/cblas/TODO0000644000175000017500000000063113536674414011506 0ustar eddedd# -*- org -*- #+CATEGORY: cblas use macros so that all complex arithmetic can use native complex types if compiler supports them make sure double/float are replaced by BASE everywhere well... not _everywhere_; internal accumulations should be done in double always; there's no reason not too, it's safer and maybe even faster [GJ] gbmv_c : use conj*imag instead of having branches form Trans & ConjTrans gsl/cblas/test_hemv.c0000644000175000017500000002375113536674414013170 0ustar eddedd#include #include #include #include #include "tests.h" void test_hemv (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; float alpha[2] = {1.0f, 0.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 1; int lda = 1; float A[] = { -0.434f, 0.837f }; float X[] = { 0.209f, -0.935f }; int incX = -1; float Y[] = { 0.346f, -0.412f }; int incY = -1; float y_expected[] = { -0.153306f, 0.56399f }; cblas_chemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chemv(case 1070) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chemv(case 1070) imag"); }; }; }; { int order = 101; int uplo = 121; float alpha[2] = {1.0f, 0.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 1; int lda = 1; float A[] = { -0.434f, 0.837f }; float X[] = { 0.209f, -0.935f }; int incX = -1; float Y[] = { 0.346f, -0.412f }; int incY = -1; float y_expected[] = { -0.153306f, 0.56399f }; cblas_chemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chemv(case 1071) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chemv(case 1071) imag"); }; }; }; { int order = 101; int uplo = 122; float alpha[2] = {1.0f, 0.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 1; int lda = 1; float A[] = { -0.434f, 0.837f }; float X[] = { 0.209f, -0.935f }; int incX = -1; float Y[] = { 0.346f, -0.412f }; int incY = -1; float y_expected[] = { -0.153306f, 0.56399f }; cblas_chemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chemv(case 1072) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chemv(case 1072) imag"); }; }; }; { int order = 101; int uplo = 122; float alpha[2] = {1.0f, 0.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 1; int lda = 1; float A[] = { -0.434f, 0.837f }; float X[] = { 0.209f, -0.935f }; int incX = -1; float Y[] = { 0.346f, -0.412f }; int incY = -1; float y_expected[] = { -0.153306f, 0.56399f }; cblas_chemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chemv(case 1073) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chemv(case 1073) imag"); }; }; }; { int order = 102; int uplo = 121; float alpha[2] = {1.0f, 0.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 1; int lda = 1; float A[] = { -0.434f, 0.837f }; float X[] = { 0.209f, -0.935f }; int incX = -1; float Y[] = { 0.346f, -0.412f }; int incY = -1; float y_expected[] = { -0.153306f, 0.56399f }; cblas_chemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chemv(case 1074) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chemv(case 1074) imag"); }; }; }; { int order = 102; int uplo = 121; float alpha[2] = {1.0f, 0.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 1; int lda = 1; float A[] = { -0.434f, 0.837f }; float X[] = { 0.209f, -0.935f }; int incX = -1; float Y[] = { 0.346f, -0.412f }; int incY = -1; float y_expected[] = { -0.153306f, 0.56399f }; cblas_chemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chemv(case 1075) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chemv(case 1075) imag"); }; }; }; { int order = 102; int uplo = 122; float alpha[2] = {1.0f, 0.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 1; int lda = 1; float A[] = { -0.434f, 0.837f }; float X[] = { 0.209f, -0.935f }; int incX = -1; float Y[] = { 0.346f, -0.412f }; int incY = -1; float y_expected[] = { -0.153306f, 0.56399f }; cblas_chemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chemv(case 1076) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chemv(case 1076) imag"); }; }; }; { int order = 102; int uplo = 122; float alpha[2] = {1.0f, 0.0f}; float beta[2] = {-0.3f, 0.1f}; int N = 1; int lda = 1; float A[] = { -0.434f, 0.837f }; float X[] = { 0.209f, -0.935f }; int incX = -1; float Y[] = { 0.346f, -0.412f }; int incY = -1; float y_expected[] = { -0.153306f, 0.56399f }; cblas_chemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], flteps, "chemv(case 1077) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], flteps, "chemv(case 1077) imag"); }; }; }; { int order = 101; int uplo = 121; double alpha[2] = {0, 0}; double beta[2] = {1, 0}; int N = 1; int lda = 1; double A[] = { 0.036, -0.966 }; double X[] = { -0.695, 0.886 }; int incX = -1; double Y[] = { 0.486, 0.629 }; int incY = -1; double y_expected[] = { 0.486, 0.629 }; cblas_zhemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhemv(case 1078) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhemv(case 1078) imag"); }; }; }; { int order = 101; int uplo = 121; double alpha[2] = {0, 0}; double beta[2] = {1, 0}; int N = 1; int lda = 1; double A[] = { 0.036, -0.966 }; double X[] = { -0.695, 0.886 }; int incX = -1; double Y[] = { 0.486, 0.629 }; int incY = -1; double y_expected[] = { 0.486, 0.629 }; cblas_zhemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhemv(case 1079) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhemv(case 1079) imag"); }; }; }; { int order = 101; int uplo = 122; double alpha[2] = {0, 0}; double beta[2] = {1, 0}; int N = 1; int lda = 1; double A[] = { 0.036, -0.966 }; double X[] = { -0.695, 0.886 }; int incX = -1; double Y[] = { 0.486, 0.629 }; int incY = -1; double y_expected[] = { 0.486, 0.629 }; cblas_zhemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhemv(case 1080) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhemv(case 1080) imag"); }; }; }; { int order = 101; int uplo = 122; double alpha[2] = {0, 0}; double beta[2] = {1, 0}; int N = 1; int lda = 1; double A[] = { 0.036, -0.966 }; double X[] = { -0.695, 0.886 }; int incX = -1; double Y[] = { 0.486, 0.629 }; int incY = -1; double y_expected[] = { 0.486, 0.629 }; cblas_zhemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhemv(case 1081) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhemv(case 1081) imag"); }; }; }; { int order = 102; int uplo = 121; double alpha[2] = {0, 0}; double beta[2] = {1, 0}; int N = 1; int lda = 1; double A[] = { 0.036, -0.966 }; double X[] = { -0.695, 0.886 }; int incX = -1; double Y[] = { 0.486, 0.629 }; int incY = -1; double y_expected[] = { 0.486, 0.629 }; cblas_zhemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhemv(case 1082) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhemv(case 1082) imag"); }; }; }; { int order = 102; int uplo = 121; double alpha[2] = {0, 0}; double beta[2] = {1, 0}; int N = 1; int lda = 1; double A[] = { 0.036, -0.966 }; double X[] = { -0.695, 0.886 }; int incX = -1; double Y[] = { 0.486, 0.629 }; int incY = -1; double y_expected[] = { 0.486, 0.629 }; cblas_zhemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhemv(case 1083) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhemv(case 1083) imag"); }; }; }; { int order = 102; int uplo = 122; double alpha[2] = {0, 0}; double beta[2] = {1, 0}; int N = 1; int lda = 1; double A[] = { 0.036, -0.966 }; double X[] = { -0.695, 0.886 }; int incX = -1; double Y[] = { 0.486, 0.629 }; int incY = -1; double y_expected[] = { 0.486, 0.629 }; cblas_zhemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhemv(case 1084) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhemv(case 1084) imag"); }; }; }; { int order = 102; int uplo = 122; double alpha[2] = {0, 0}; double beta[2] = {1, 0}; int N = 1; int lda = 1; double A[] = { 0.036, -0.966 }; double X[] = { -0.695, 0.886 }; int incX = -1; double Y[] = { 0.486, 0.629 }; int incY = -1; double y_expected[] = { 0.486, 0.629 }; cblas_zhemv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], y_expected[2*i], dbleps, "zhemv(case 1085) real"); gsl_test_rel(Y[2*i+1], y_expected[2*i+1], dbleps, "zhemv(case 1085) imag"); }; }; }; } gsl/cblas/source_spr.h0000644000175000017500000000332213536674414013353 0ustar eddedd/* blas/source_spr.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; CHECK_ARGS7(SD_SPR,order,Uplo,N,alpha,X,incX,Ap); if (N == 0) return; if (alpha == 0.0) return; if ((order == CblasRowMajor && Uplo == CblasUpper) || (order == CblasColMajor && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { const BASE tmp = alpha * X[ix]; INDEX jx = ix; for (j = i; j < N; j++) { Ap[TPUP(N, i, j)] += X[jx] * tmp; jx += incX; } ix += incX; } } else if ((order == CblasRowMajor && Uplo == CblasLower) || (order == CblasColMajor && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { const BASE tmp = alpha * X[ix]; INDEX jx = OFFSET(N, incX); for (j = 0; j <= i; j++) { Ap[TPLO(N, i, j)] += X[jx] * tmp; jx += incX; } ix += incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/chpmv.c0000644000175000017500000000060113536674414012274 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_chpmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *Ap, const void *X, const int incX, const void *beta, void *Y, const int incY) { #define BASE float #include "source_hpmv.h" #undef BASE } gsl/cblas/zcopy.c0000644000175000017500000000035413536674414012330 0ustar eddedd#include #include #include "cblas.h" void cblas_zcopy (const int N, const void *X, const int incX, void *Y, const int incY) { #define BASE double #include "source_copy_c.h" #undef BASE } gsl/cblas/dtrsm.c0000644000175000017500000000074713536674414012323 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_dtrsm (const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const double alpha, const double *A, const int lda, double *B, const int ldb) { #define BASE double #include "source_trsm_r.h" #undef BASE } gsl/cblas/zgemm.c0000644000175000017500000000075613536674414012311 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_zgemm (const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc) { #define BASE double #include "source_gemm_c.h" #undef BASE } gsl/cblas/stbsv.c0000644000175000017500000000065013536674414012324 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_stbsv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const float *A, const int lda, float *X, const int incX) { #define BASE float #include "source_tbsv_r.h" #undef BASE } gsl/cblas/test_symv.c0000644000175000017500000001740113536674414013222 0ustar eddedd#include #include #include #include #include "tests.h" void test_symv (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; float alpha = 1.0f; float beta = -1.0f; int N = 1; int lda = 1; float A[] = { -0.428f }; float X[] = { -0.34f }; int incX = -1; float Y[] = { -0.888f }; int incY = -1; float y_expected[] = { 1.03352f }; cblas_ssymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssymv(case 1054)"); } }; }; { int order = 101; int uplo = 121; float alpha = 1.0f; float beta = -1.0f; int N = 1; int lda = 1; float A[] = { -0.428f }; float X[] = { -0.34f }; int incX = -1; float Y[] = { -0.888f }; int incY = -1; float y_expected[] = { 1.03352f }; cblas_ssymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssymv(case 1055)"); } }; }; { int order = 101; int uplo = 122; float alpha = 1.0f; float beta = -1.0f; int N = 1; int lda = 1; float A[] = { -0.428f }; float X[] = { -0.34f }; int incX = -1; float Y[] = { -0.888f }; int incY = -1; float y_expected[] = { 1.03352f }; cblas_ssymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssymv(case 1056)"); } }; }; { int order = 101; int uplo = 122; float alpha = 1.0f; float beta = -1.0f; int N = 1; int lda = 1; float A[] = { -0.428f }; float X[] = { -0.34f }; int incX = -1; float Y[] = { -0.888f }; int incY = -1; float y_expected[] = { 1.03352f }; cblas_ssymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssymv(case 1057)"); } }; }; { int order = 102; int uplo = 121; float alpha = 1.0f; float beta = -1.0f; int N = 1; int lda = 1; float A[] = { -0.428f }; float X[] = { -0.34f }; int incX = -1; float Y[] = { -0.888f }; int incY = -1; float y_expected[] = { 1.03352f }; cblas_ssymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssymv(case 1058)"); } }; }; { int order = 102; int uplo = 121; float alpha = 1.0f; float beta = -1.0f; int N = 1; int lda = 1; float A[] = { -0.428f }; float X[] = { -0.34f }; int incX = -1; float Y[] = { -0.888f }; int incY = -1; float y_expected[] = { 1.03352f }; cblas_ssymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssymv(case 1059)"); } }; }; { int order = 102; int uplo = 122; float alpha = 1.0f; float beta = -1.0f; int N = 1; int lda = 1; float A[] = { -0.428f }; float X[] = { -0.34f }; int incX = -1; float Y[] = { -0.888f }; int incY = -1; float y_expected[] = { 1.03352f }; cblas_ssymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssymv(case 1060)"); } }; }; { int order = 102; int uplo = 122; float alpha = 1.0f; float beta = -1.0f; int N = 1; int lda = 1; float A[] = { -0.428f }; float X[] = { -0.34f }; int incX = -1; float Y[] = { -0.888f }; int incY = -1; float y_expected[] = { 1.03352f }; cblas_ssymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], flteps, "ssymv(case 1061)"); } }; }; { int order = 101; int uplo = 121; double alpha = 0; double beta = -0.3; int N = 1; int lda = 1; double A[] = { 0.544 }; double X[] = { -0.601 }; int incX = -1; double Y[] = { -0.852 }; int incY = -1; double y_expected[] = { 0.2556 }; cblas_dsymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsymv(case 1062)"); } }; }; { int order = 101; int uplo = 121; double alpha = 0; double beta = -0.3; int N = 1; int lda = 1; double A[] = { 0.544 }; double X[] = { -0.601 }; int incX = -1; double Y[] = { -0.852 }; int incY = -1; double y_expected[] = { 0.2556 }; cblas_dsymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsymv(case 1063)"); } }; }; { int order = 101; int uplo = 122; double alpha = 0; double beta = -0.3; int N = 1; int lda = 1; double A[] = { 0.544 }; double X[] = { -0.601 }; int incX = -1; double Y[] = { -0.852 }; int incY = -1; double y_expected[] = { 0.2556 }; cblas_dsymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsymv(case 1064)"); } }; }; { int order = 101; int uplo = 122; double alpha = 0; double beta = -0.3; int N = 1; int lda = 1; double A[] = { 0.544 }; double X[] = { -0.601 }; int incX = -1; double Y[] = { -0.852 }; int incY = -1; double y_expected[] = { 0.2556 }; cblas_dsymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsymv(case 1065)"); } }; }; { int order = 102; int uplo = 121; double alpha = 0; double beta = -0.3; int N = 1; int lda = 1; double A[] = { 0.544 }; double X[] = { -0.601 }; int incX = -1; double Y[] = { -0.852 }; int incY = -1; double y_expected[] = { 0.2556 }; cblas_dsymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsymv(case 1066)"); } }; }; { int order = 102; int uplo = 121; double alpha = 0; double beta = -0.3; int N = 1; int lda = 1; double A[] = { 0.544 }; double X[] = { -0.601 }; int incX = -1; double Y[] = { -0.852 }; int incY = -1; double y_expected[] = { 0.2556 }; cblas_dsymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsymv(case 1067)"); } }; }; { int order = 102; int uplo = 122; double alpha = 0; double beta = -0.3; int N = 1; int lda = 1; double A[] = { 0.544 }; double X[] = { -0.601 }; int incX = -1; double Y[] = { -0.852 }; int incY = -1; double y_expected[] = { 0.2556 }; cblas_dsymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsymv(case 1068)"); } }; }; { int order = 102; int uplo = 122; double alpha = 0; double beta = -0.3; int N = 1; int lda = 1; double A[] = { 0.544 }; double X[] = { -0.601 }; int incX = -1; double Y[] = { -0.852 }; int incY = -1; double y_expected[] = { 0.2556 }; cblas_dsymv(order, uplo, N, alpha, A, lda, X, incX, beta, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], y_expected[i], dbleps, "dsymv(case 1069)"); } }; }; } gsl/cblas/source_nrm2_r.h0000644000175000017500000000243713536674414013754 0ustar eddedd/* blas/source_nrm2_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { BASE scale = 0.0; BASE ssq = 1.0; INDEX i; INDEX ix = 0; if (N <= 0 || incX <= 0) { return 0; } else if (N == 1) { return fabs(X[0]); } for (i = 0; i < N; i++) { const BASE x = X[ix]; if (x != 0.0) { const BASE ax = fabs(x); if (scale < ax) { ssq = 1.0 + ssq * (scale / ax) * (scale / ax); scale = ax; } else { ssq += (ax / scale) * (ax / scale); } } ix += incX; } return scale * sqrt(ssq); } gsl/cblas/error_cblas.h0000644000175000017500000000617013536674414013470 0ustar eddedd/* cblas/error_cblas.h * * Copyright (C) 2010 José Luis García Pallero * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __ERROR_CBLAS_H__ #define __ERROR_CBLAS_H__ #define CHECK_ARGS_X(FUNCTION,VAR,ARGS) do { int VAR = 0 ; \ CBLAS_ERROR_##FUNCTION ARGS ; \ if (VAR) cblas_xerbla(pos,__FILE__,""); } while (0) #define CHECK_ARGS7(FUNCTION,A1,A2,A3,A4,A5,A6,A7) \ CHECK_ARGS_X(FUNCTION,pos,(pos,A1,A2,A3,A4,A5,A6,A7)) #define CHECK_ARGS8(FUNCTION,A1,A2,A3,A4,A5,A6,A7,A8) \ CHECK_ARGS_X(FUNCTION,pos,(pos,A1,A2,A3,A4,A5,A6,A7,A8)) #define CHECK_ARGS9(FUNCTION,A1,A2,A3,A4,A5,A6,A7,A8,A9) \ CHECK_ARGS_X(FUNCTION,pos,(pos,A1,A2,A3,A4,A5,A6,A7,A8,A9)) #define CHECK_ARGS10(FUNCTION,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) \ CHECK_ARGS_X(FUNCTION,pos,(pos,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)) #define CHECK_ARGS11(FUNCTION,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) \ CHECK_ARGS_X(FUNCTION,pos,(pos,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)) #define CHECK_ARGS12(FUNCTION,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12) \ CHECK_ARGS_X(FUNCTION,pos,(pos,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12)) #define CHECK_ARGS13(FUNCTION,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13) \ CHECK_ARGS_X(FUNCTION,pos,(pos,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13)) #define CHECK_ARGS14(FUNCTION,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14) \ CHECK_ARGS_X(FUNCTION,pos,(pos,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14)) /* check if CBLAS_ORDER is correct */ #define CHECK_ORDER(pos,posIfError,order) \ if(((order)!=CblasRowMajor)&&((order)!=CblasColMajor)) \ pos = posIfError; /* check if CBLAS_TRANSPOSE is correct */ #define CHECK_TRANSPOSE(pos,posIfError,Trans) \ if(((Trans)!=CblasNoTrans)&&((Trans)!=CblasTrans)&&((Trans)!=CblasConjTrans)) \ pos = posIfError; /* check if CBLAS_UPLO is correct */ #define CHECK_UPLO(pos,posIfError,Uplo) \ if(((Uplo)!=CblasUpper)&&((Uplo)!=CblasLower)) \ pos = posIfError; /* check if CBLAS_DIAG is correct */ #define CHECK_DIAG(pos,posIfError,Diag) \ if(((Diag)!=CblasNonUnit)&&((Diag)!=CblasUnit)) \ pos = posIfError; /* check if CBLAS_SIDE is correct */ #define CHECK_SIDE(pos,posIfError,Side) \ if(((Side)!=CblasLeft)&&((Side)!=CblasRight)) \ pos = posIfError; /* check if a dimension argument is correct */ #define CHECK_DIM(pos,posIfError,dim) \ if((dim)<0) \ pos = posIfError; /* check if a stride argument is correct */ #define CHECK_STRIDE(pos,posIfError,stride) \ if((stride)==0) \ pos = posIfError; #endif /* __ERROR_CBLAS_H__ */ gsl/cblas/ccopy.c0000644000175000017500000000035313536674414012300 0ustar eddedd#include #include #include "cblas.h" void cblas_ccopy (const int N, const void *X, const int incX, void *Y, const int incY) { #define BASE float #include "source_copy_c.h" #undef BASE } gsl/cblas/source_syr.h0000644000175000017500000000331713536674414013370 0ustar eddedd/* blas/source_syr.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; CHECK_ARGS8(SD_SYR,order,Uplo,N,alpha,X,incX,A,lda); if (N == 0) return; if (alpha == 0.0) return; if ((order == CblasRowMajor && Uplo == CblasUpper) || (order == CblasColMajor && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { const BASE tmp = alpha * X[ix]; INDEX jx = ix; for (j = i; j < N; j++) { A[lda * i + j] += X[jx] * tmp; jx += incX; } ix += incX; } } else if ((order == CblasRowMajor && Uplo == CblasLower) || (order == CblasColMajor && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { const BASE tmp = alpha * X[ix]; INDEX jx = OFFSET(N, incX); for (j = 0; j <= i; j++) { A[lda * i + j] += X[jx] * tmp; jx += incX; } ix += incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/zgbmv.c0000644000175000017500000000071713536674414012314 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_zgbmv (const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const int KL, const int KU, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY) { #define BASE double #include "source_gbmv_c.h" #undef BASE } gsl/cblas/drotm.c0000644000175000017500000000037113536674414012310 0ustar eddedd#include #include #include "cblas.h" void cblas_drotm (const int N, double *X, const int incX, double *Y, const int incY, const double *P) { #define BASE double #include "source_rotm.h" #undef BASE } gsl/cblas/tests.c0000644000175000017500000000127413536674414012330 0ustar eddedd test_dot (); test_nrm2 (); test_asum (); test_amax (); test_axpy (); test_copy (); test_swap (); test_scal (); test_rotg (); test_rot (); test_rotmg (); test_rotm (); test_gemv (); test_gbmv (); test_trmv (); test_tbmv (); test_tpmv (); test_symv (); test_hemv (); test_hbmv (); test_sbmv (); test_hpmv (); test_spmv (); test_trsv (); test_tbsv (); test_tpsv (); test_ger (); test_syr (); test_her (); test_hpr (); test_spr (); test_syr2 (); test_spr2 (); test_her2 (); test_hpr2 (); test_gemm (); test_symm (); test_hemm (); test_syrk (); test_herk (); test_syr2k (); test_her2k (); test_trmm (); test_trsm (); gsl/cblas/test_spr.c0000644000175000017500000000710413536674414013027 0ustar eddedd#include #include #include #include #include "tests.h" void test_spr (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; int N = 2; float alpha = -0.3f; float Ap[] = { -0.764f, -0.257f, -0.064f }; float X[] = { 0.455f, -0.285f }; int incX = -1; float Ap_expected[] = { -0.788367f, -0.218097f, -0.126108f }; cblas_sspr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], flteps, "sspr(case 1426)"); } }; }; { int order = 101; int uplo = 122; int N = 2; float alpha = -0.3f; float Ap[] = { -0.764f, -0.257f, -0.064f }; float X[] = { 0.455f, -0.285f }; int incX = -1; float Ap_expected[] = { -0.788367f, -0.218097f, -0.126108f }; cblas_sspr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], flteps, "sspr(case 1427)"); } }; }; { int order = 102; int uplo = 121; int N = 2; float alpha = -0.3f; float Ap[] = { -0.764f, -0.257f, -0.064f }; float X[] = { 0.455f, -0.285f }; int incX = -1; float Ap_expected[] = { -0.788367f, -0.218097f, -0.126108f }; cblas_sspr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], flteps, "sspr(case 1428)"); } }; }; { int order = 102; int uplo = 122; int N = 2; float alpha = -0.3f; float Ap[] = { -0.764f, -0.257f, -0.064f }; float X[] = { 0.455f, -0.285f }; int incX = -1; float Ap_expected[] = { -0.788367f, -0.218097f, -0.126108f }; cblas_sspr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], flteps, "sspr(case 1429)"); } }; }; { int order = 101; int uplo = 121; int N = 2; double alpha = -1; double Ap[] = { 0.819, 0.175, -0.809 }; double X[] = { -0.645, -0.222 }; int incX = -1; double Ap_expected[] = { 0.769716, 0.03181, -1.225025 }; cblas_dspr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], dbleps, "dspr(case 1430)"); } }; }; { int order = 101; int uplo = 122; int N = 2; double alpha = -1; double Ap[] = { 0.819, 0.175, -0.809 }; double X[] = { -0.645, -0.222 }; int incX = -1; double Ap_expected[] = { 0.769716, 0.03181, -1.225025 }; cblas_dspr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], dbleps, "dspr(case 1431)"); } }; }; { int order = 102; int uplo = 121; int N = 2; double alpha = -1; double Ap[] = { 0.819, 0.175, -0.809 }; double X[] = { -0.645, -0.222 }; int incX = -1; double Ap_expected[] = { 0.769716, 0.03181, -1.225025 }; cblas_dspr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], dbleps, "dspr(case 1432)"); } }; }; { int order = 102; int uplo = 122; int N = 2; double alpha = -1; double Ap[] = { 0.819, 0.175, -0.809 }; double X[] = { -0.645, -0.222 }; int incX = -1; double Ap_expected[] = { 0.769716, 0.03181, -1.225025 }; cblas_dspr(order, uplo, N, alpha, X, incX, Ap); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(Ap[i], Ap_expected[i], dbleps, "dspr(case 1433)"); } }; }; } gsl/cblas/saxpy.c0000644000175000017500000000040013536674414012320 0ustar eddedd#include #include #include "cblas.h" void cblas_saxpy (const int N, const float alpha, const float *X, const int incX, float *Y, const int incY) { #define BASE float #include "source_axpy_r.h" #undef BASE } gsl/cblas/source_symv.h0000644000175000017500000000540613536674414013552 0ustar eddedd/* blas/source_symv.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; CHECK_ARGS11(SD_SYMV,order,Uplo,N,alpha,A,lda,X,incX,beta,Y,incY); if (alpha == 0.0 && beta == 1.0) return; /* form y := beta*y */ if (beta == 0.0) { INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { Y[iy] = 0.0; iy += incY; } } else if (beta != 1.0) { INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { Y[iy] *= beta; iy += incY; } } if (alpha == 0.0) return; /* form y := alpha*A*x + y */ if ((order == CblasRowMajor && Uplo == CblasUpper) || (order == CblasColMajor && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { BASE temp1 = alpha * X[ix]; BASE temp2 = 0.0; const INDEX j_min = i + 1; const INDEX j_max = N; INDEX jx = OFFSET(N, incX) + j_min * incX; INDEX jy = OFFSET(N, incY) + j_min * incY; Y[iy] += temp1 * A[lda * i + i]; for (j = j_min; j < j_max; j++) { Y[jy] += temp1 * A[lda * i + j]; temp2 += X[jx] * A[lda * i + j]; jx += incX; jy += incY; } Y[iy] += alpha * temp2; ix += incX; iy += incY; } } else if ((order == CblasRowMajor && Uplo == CblasLower) || (order == CblasColMajor && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX) + (N - 1) * incX; INDEX iy = OFFSET(N, incY) + (N - 1) * incY; for (i = N; i > 0 && i--;) { BASE temp1 = alpha * X[ix]; BASE temp2 = 0.0; const INDEX j_min = 0; const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; INDEX jy = OFFSET(N, incY) + j_min * incY; Y[iy] += temp1 * A[lda * i + i]; for (j = j_min; j < j_max; j++) { Y[jy] += temp1 * A[lda * i + j]; temp2 += X[jx] * A[lda * i + j]; jx += incX; jy += incY; } Y[iy] += alpha * temp2; ix -= incX; iy -= incY; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/source_herk.h0000644000175000017500000001215413536674414013503 0ustar eddedd/* blas/source_herk.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j, k; int uplo, trans; CHECK_ARGS11(HERK,Order,Uplo,Trans,N,K,alpha,A,lda,beta,C,ldc); if (beta == 1.0 && (alpha == 0.0 || K == 0)) return; if (Order == CblasRowMajor) { uplo = Uplo; trans = Trans; } else { uplo = (Uplo == CblasUpper) ? CblasLower : CblasUpper; trans = (Trans == CblasNoTrans) ? CblasConjTrans : CblasNoTrans; } /* form y := beta*y */ if (beta == 0.0) { if (uplo == CblasUpper) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { REAL(C, ldc * i + j) = 0.0; IMAG(C, ldc * i + j) = 0.0; } } } else { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { REAL(C, ldc * i + j) = 0.0; IMAG(C, ldc * i + j) = 0.0; } } } } else if (beta != 1.0) { if (uplo == CblasUpper) { for (i = 0; i < N; i++) { REAL(C, ldc * i + i) *= beta; IMAG(C, ldc * i + i) = 0; for (j = i + 1; j < N; j++) { REAL(C, ldc * i + j) *= beta; IMAG(C, ldc * i + j) *= beta; } } } else { for (i = 0; i < N; i++) { for (j = 0; j < i; j++) { REAL(C, ldc * i + j) *= beta; IMAG(C, ldc * i + j) *= beta; } REAL(C, ldc * i + i) *= beta; IMAG(C, ldc * i + i) = 0; } } } else { /* set imaginary part of Aii to zero */ for (i = 0; i < N; i++) { IMAG(C, ldc * i + i) = 0.0; } } if (alpha == 0.0) return; if (uplo == CblasUpper && trans == CblasNoTrans) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < K; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = CONST_IMAG(A, i * lda + k); const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = -CONST_IMAG(A, j * lda + k); temp_real += Aik_real * Ajk_real - Aik_imag * Ajk_imag; temp_imag += Aik_real * Ajk_imag + Aik_imag * Ajk_real; } REAL(C, i * ldc + j) += alpha * temp_real; IMAG(C, i * ldc + j) += alpha * temp_imag; } } } else if (uplo == CblasUpper && trans == CblasConjTrans) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < K; k++) { const BASE Aki_real = CONST_REAL(A, k * lda + i); const BASE Aki_imag = -CONST_IMAG(A, k * lda + i); const BASE Akj_real = CONST_REAL(A, k * lda + j); const BASE Akj_imag = CONST_IMAG(A, k * lda + j); temp_real += Aki_real * Akj_real - Aki_imag * Akj_imag; temp_imag += Aki_real * Akj_imag + Aki_imag * Akj_real; } REAL(C, i * ldc + j) += alpha * temp_real; IMAG(C, i * ldc + j) += alpha * temp_imag; } } } else if (uplo == CblasLower && trans == CblasNoTrans) { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < K; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = CONST_IMAG(A, i * lda + k); const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = -CONST_IMAG(A, j * lda + k); temp_real += Aik_real * Ajk_real - Aik_imag * Ajk_imag; temp_imag += Aik_real * Ajk_imag + Aik_imag * Ajk_real; } REAL(C, i * ldc + j) += alpha * temp_real; IMAG(C, i * ldc + j) += alpha * temp_imag; } } } else if (uplo == CblasLower && trans == CblasConjTrans) { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < K; k++) { const BASE Aki_real = CONST_REAL(A, k * lda + i); const BASE Aki_imag = -CONST_IMAG(A, k * lda + i); const BASE Akj_real = CONST_REAL(A, k * lda + j); const BASE Akj_imag = CONST_IMAG(A, k * lda + j); temp_real += Aki_real * Akj_real - Aki_imag * Akj_imag; temp_imag += Aki_real * Akj_imag + Aki_imag * Akj_real; } REAL(C, i * ldc + j) += alpha * temp_real; IMAG(C, i * ldc + j) += alpha * temp_imag; } } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/source_dot_c.h0000644000175000017500000000250013536674414013634 0ustar eddedd/* blas/source_dot_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { BASE r_real = 0.0; BASE r_imag = 0.0; INDEX i; INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { const BASE x_real = CONST_REAL(X, ix); const BASE x_imag = CONST_IMAG(X, ix); const BASE y_real = CONST_REAL(Y, iy); const BASE y_imag = CONST_IMAG(Y, iy); r_real += x_real * y_real - CONJ_SIGN * x_imag * y_imag; r_imag += x_real * y_imag + CONJ_SIGN * x_imag * y_real; ix += incX; iy += incY; } REAL0(result) = r_real; IMAG0(result) = r_imag; } gsl/cblas/source_iamax_c.h0000644000175000017500000000215013536674414014146 0ustar eddedd/* blas/source_iamax_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { BASE max = 0.0; INDEX ix = 0; INDEX i; CBLAS_INDEX result = 0; if (incX <= 0) { return 0; } for (i = 0; i < N; i++) { const BASE a = fabs(CONST_REAL(X, ix)) + fabs(CONST_IMAG(X, ix)); if (a > max) { max = a; result = i; } ix += incX; } return result; } gsl/cblas/cgemm.c0000644000175000017500000000075513536674414012261 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_cgemm (const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc) { #define BASE float #include "source_gemm_c.h" #undef BASE } gsl/cblas/source_syr2k_r.h0000644000175000017500000000652013536674414014145 0ustar eddedd/* blas/source_syr2k_r.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j, k; int uplo, trans; CHECK_ARGS13(SYR2K,Order,Uplo,Trans,N,K,alpha,A,lda,B,ldb,beta,C,ldc); if (alpha == 0.0 && beta == 1.0) return; if (Order == CblasRowMajor) { uplo = Uplo; trans = (Trans == CblasConjTrans) ? CblasTrans : Trans; } else { uplo = (Uplo == CblasUpper) ? CblasLower : CblasUpper; if (Trans == CblasTrans || Trans == CblasConjTrans) { trans = CblasNoTrans; } else { trans = CblasTrans; } } /* form C := beta*C */ if (beta == 0.0) { if (uplo == CblasUpper) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { C[ldc * i + j] = 0.0; } } } else { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { C[ldc * i + j] = 0.0; } } } } else if (beta != 1.0) { if (uplo == CblasUpper) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { C[ldc * i + j] *= beta; } } } else { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { C[ldc * i + j] *= beta; } } } } if (alpha == 0.0) return; if (uplo == CblasUpper && trans == CblasNoTrans) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { BASE temp = 0.0; for (k = 0; k < K; k++) { temp += (A[i * lda + k] * B[j * ldb + k] + B[i * ldb + k] * A[j * lda + k]); } C[i * ldc + j] += alpha * temp; } } } else if (uplo == CblasUpper && trans == CblasTrans) { for (k = 0; k < K; k++) { for (i = 0; i < N; i++) { BASE temp1 = alpha * A[k * lda + i]; BASE temp2 = alpha * B[k * ldb + i]; for (j = i; j < N; j++) { C[i * lda + j] += temp1 * B[k * ldb + j] + temp2 * A[k * lda + j]; } } } } else if (uplo == CblasLower && trans == CblasNoTrans) { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { BASE temp = 0.0; for (k = 0; k < K; k++) { temp += (A[i * lda + k] * B[j * ldb + k] + B[i * ldb + k] * A[j * lda + k]); } C[i * ldc + j] += alpha * temp; } } } else if (uplo == CblasLower && trans == CblasTrans) { for (k = 0; k < K; k++) { for (i = 0; i < N; i++) { BASE temp1 = alpha * A[k * lda + i]; BASE temp2 = alpha * B[k * ldb + i]; for (j = 0; j <= i; j++) { C[i * lda + j] += temp1 * B[k * ldb + j] + temp2 * A[k * lda + j]; } } } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/source_syr2k_c.h0000644000175000017500000001714113536674414014127 0ustar eddedd/* blas/source_syr2k_c.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j, k; int uplo, trans; CHECK_ARGS13(SYR2K,Order,Uplo,Trans,N,K,alpha,A,lda,B,ldb,beta,C,ldc); { const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); const BASE beta_real = CONST_REAL0(beta); const BASE beta_imag = CONST_IMAG0(beta); if ((alpha_real == 0.0 && alpha_imag == 0.0) && (beta_real == 1.0 && beta_imag == 0.0)) return; if (Order == CblasRowMajor) { uplo = Uplo; trans = Trans; } else { uplo = (Uplo == CblasUpper) ? CblasLower : CblasUpper; trans = (Trans == CblasNoTrans) ? CblasTrans : CblasNoTrans; } /* form C := beta*C */ if (beta_real == 0.0 && beta_imag == 0.0) { if (uplo == CblasUpper) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { REAL(C, ldc * i + j) = 0.0; IMAG(C, ldc * i + j) = 0.0; } } } else { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { REAL(C, ldc * i + j) = 0.0; IMAG(C, ldc * i + j) = 0.0; } } } } else if (!(beta_real == 1.0 && beta_imag == 0.0)) { if (uplo == CblasUpper) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { const BASE Cij_real = REAL(C, ldc * i + j); const BASE Cij_imag = IMAG(C, ldc * i + j); REAL(C, ldc * i + j) = beta_real * Cij_real - beta_imag * Cij_imag; IMAG(C, ldc * i + j) = beta_real * Cij_imag + beta_imag * Cij_real; } } } else { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { const BASE Cij_real = REAL(C, ldc * i + j); const BASE Cij_imag = IMAG(C, ldc * i + j); REAL(C, ldc * i + j) = beta_real * Cij_real - beta_imag * Cij_imag; IMAG(C, ldc * i + j) = beta_real * Cij_imag + beta_imag * Cij_real; } } } } if (alpha_real == 0.0 && alpha_imag == 0.0) return; if (uplo == CblasUpper && trans == CblasNoTrans) { for (i = 0; i < N; i++) { for (j = i; j < N; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < K; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = CONST_IMAG(A, i * lda + k); const BASE Bik_real = CONST_REAL(B, i * ldb + k); const BASE Bik_imag = CONST_IMAG(B, i * ldb + k); const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = CONST_IMAG(A, j * lda + k); const BASE Bjk_real = CONST_REAL(B, j * ldb + k); const BASE Bjk_imag = CONST_IMAG(B, j * ldb + k); temp_real += ((Aik_real * Bjk_real - Aik_imag * Bjk_imag) + (Bik_real * Ajk_real - Bik_imag * Ajk_imag)); temp_imag += ((Aik_real * Bjk_imag + Aik_imag * Bjk_real) + (Bik_real * Ajk_imag + Bik_imag * Ajk_real)); } REAL(C, i * ldc + j) += alpha_real * temp_real - alpha_imag * temp_imag; IMAG(C, i * ldc + j) += alpha_real * temp_imag + alpha_imag * temp_real; } } } else if (uplo == CblasUpper && trans == CblasTrans) { for (k = 0; k < K; k++) { for (i = 0; i < N; i++) { BASE Aki_real = CONST_REAL(A, k * lda + i); BASE Aki_imag = CONST_IMAG(A, k * lda + i); BASE Bki_real = CONST_REAL(B, k * ldb + i); BASE Bki_imag = CONST_IMAG(B, k * ldb + i); BASE temp1_real = alpha_real * Aki_real - alpha_imag * Aki_imag; BASE temp1_imag = alpha_real * Aki_imag + alpha_imag * Aki_real; BASE temp2_real = alpha_real * Bki_real - alpha_imag * Bki_imag; BASE temp2_imag = alpha_real * Bki_imag + alpha_imag * Bki_real; for (j = i; j < N; j++) { BASE Akj_real = CONST_REAL(A, k * lda + j); BASE Akj_imag = CONST_IMAG(A, k * lda + j); BASE Bkj_real = CONST_REAL(B, k * ldb + j); BASE Bkj_imag = CONST_IMAG(B, k * ldb + j); REAL(C, i * lda + j) += (temp1_real * Bkj_real - temp1_imag * Bkj_imag) + (temp2_real * Akj_real - temp2_imag * Akj_imag); IMAG(C, i * lda + j) += (temp1_real * Bkj_imag + temp1_imag * Bkj_real) + (temp2_real * Akj_imag + temp2_imag * Akj_real); } } } } else if (uplo == CblasLower && trans == CblasNoTrans) { for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { BASE temp_real = 0.0; BASE temp_imag = 0.0; for (k = 0; k < K; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = CONST_IMAG(A, i * lda + k); const BASE Bik_real = CONST_REAL(B, i * ldb + k); const BASE Bik_imag = CONST_IMAG(B, i * ldb + k); const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = CONST_IMAG(A, j * lda + k); const BASE Bjk_real = CONST_REAL(B, j * ldb + k); const BASE Bjk_imag = CONST_IMAG(B, j * ldb + k); temp_real += ((Aik_real * Bjk_real - Aik_imag * Bjk_imag) + (Bik_real * Ajk_real - Bik_imag * Ajk_imag)); temp_imag += ((Aik_real * Bjk_imag + Aik_imag * Bjk_real) + (Bik_real * Ajk_imag + Bik_imag * Ajk_real)); } REAL(C, i * ldc + j) += alpha_real * temp_real - alpha_imag * temp_imag; IMAG(C, i * ldc + j) += alpha_real * temp_imag + alpha_imag * temp_real; } } } else if (uplo == CblasLower && trans == CblasTrans) { for (k = 0; k < K; k++) { for (i = 0; i < N; i++) { BASE Aki_real = CONST_REAL(A, k * lda + i); BASE Aki_imag = CONST_IMAG(A, k * lda + i); BASE Bki_real = CONST_REAL(B, k * ldb + i); BASE Bki_imag = CONST_IMAG(B, k * ldb + i); BASE temp1_real = alpha_real * Aki_real - alpha_imag * Aki_imag; BASE temp1_imag = alpha_real * Aki_imag + alpha_imag * Aki_real; BASE temp2_real = alpha_real * Bki_real - alpha_imag * Bki_imag; BASE temp2_imag = alpha_real * Bki_imag + alpha_imag * Bki_real; for (j = 0; j <= i; j++) { BASE Akj_real = CONST_REAL(A, k * lda + j); BASE Akj_imag = CONST_IMAG(A, k * lda + j); BASE Bkj_real = CONST_REAL(B, k * ldb + j); BASE Bkj_imag = CONST_IMAG(B, k * ldb + j); REAL(C, i * lda + j) += (temp1_real * Bkj_real - temp1_imag * Bkj_imag) + (temp2_real * Akj_real - temp2_imag * Akj_imag); IMAG(C, i * lda + j) += (temp1_real * Bkj_imag + temp1_imag * Bkj_real) + (temp2_real * Akj_imag + temp2_imag * Akj_real); } } } } else { BLAS_ERROR("unrecognized operation"); } } } gsl/cblas/dtbsv.c0000644000175000017500000000065313536674414012310 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dtbsv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const double *A, const int lda, double *X, const int incX) { #define BASE double #include "source_tbsv_r.h" #undef BASE } gsl/cblas/test_gemm.c0000644000175000017500000012251713536674414013156 0ustar eddedd#include #include #include #include #include "tests.h" void test_gemm (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int transA = 111; int transB = 111; int M = 1; int N = 2; int K = 4; float alpha = 1.0f; float beta = 0.0f; float A[] = { 0.199f, 0.237f, 0.456f, 0.377f }; int lda = 4; float B[] = { 0.842f, -0.734f, 0.323f, -0.957f, -0.303f, -0.873f, -0.871f, -0.819f }; int ldb = 2; float C[] = { 0.498f, -0.925f }; int ldc = 2; float C_expected[] = { -0.222426f, -1.07973f }; cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1466)"); } }; }; { int order = 102; int transA = 111; int transB = 111; int M = 1; int N = 2; int K = 4; float alpha = 1.0f; float beta = 0.0f; float A[] = { -0.83f, 0.922f, -0.228f, -0.003f }; int lda = 1; float B[] = { 0.072f, 0.345f, 0.944f, -0.39f, -0.577f, 0.656f, -0.693f, -0.453f }; int ldb = 4; float C[] = { 0.583f, 0.522f }; int ldc = 1; float C_expected[] = { 0.044268f, 1.24311f }; cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1467)"); } }; }; { int order = 101; int transA = 111; int transB = 112; int M = 1; int N = 2; int K = 4; float alpha = 0.1f; float beta = 0.1f; float A[] = { -0.838f, 0.622f, -0.494f, 0.304f }; int lda = 4; float B[] = { 0.147f, 0.134f, 0.169f, 0.734f, -0.7f, 0.541f, -0.794f, -0.256f }; int ldb = 4; float C[] = { -0.632f, -0.559f }; int ldc = 2; float C_expected[] = { -0.0532188f, 0.0678514f }; cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1468)"); } }; }; { int order = 102; int transA = 111; int transB = 112; int M = 1; int N = 2; int K = 4; float alpha = 0.1f; float beta = 0.1f; float A[] = { -0.937f, 0.635f, 0.596f, -0.51f }; int lda = 1; float B[] = { -0.688f, -0.265f, 0.049f, 0.133f, -0.918f, -0.147f, 0.977f, -0.21f }; int ldb = 2; float C[] = { 0.844f, 0.999f }; int ldc = 1; float C_expected[] = { 0.0474373f, 0.135125f }; cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1469)"); } }; }; { int order = 101; int transA = 112; int transB = 111; int M = 1; int N = 2; int K = 4; float alpha = -0.3f; float beta = 0.1f; float A[] = { -0.165f, 0.638f, 0.346f, -0.697f }; int lda = 1; float B[] = { 0.499f, -0.73f, 0.262f, 0.759f, 0.664f, 0.997f, -0.702f, -0.839f }; int ldb = 2; float C[] = { 0.17f, 0.425f }; int ldc = 2; float C_expected[] = { -0.224158f, -0.417831f }; cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1470)"); } }; }; { int order = 102; int transA = 112; int transB = 111; int M = 1; int N = 2; int K = 4; float alpha = -0.3f; float beta = 0.1f; float A[] = { -0.603f, -0.714f, -0.893f, 0.046f }; int lda = 4; float B[] = { 0.859f, -0.694f, -0.868f, -0.98f, -0.103f, 0.567f, -0.277f, -0.734f }; int ldb = 4; float C[] = { 0.517f, -0.622f }; int ldc = 1; float C_expected[] = { -0.160575f, -0.0234604f }; cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1471)"); } }; }; { int order = 101; int transA = 112; int transB = 112; int M = 1; int N = 2; int K = 4; float alpha = 0.1f; float beta = 1.0f; float A[] = { -0.087f, -0.047f, -0.051f, -0.615f }; int lda = 1; float B[] = { -0.722f, -0.077f, 0.563f, 0.501f, 0.855f, 0.605f, 0.556f, -0.627f }; int ldb = 4; float C[] = { -0.181f, -0.89f }; int ldc = 2; float C_expected[] = { -0.208039f, -0.864557f }; cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1472)"); } }; }; { int order = 102; int transA = 112; int transB = 112; int M = 1; int N = 2; int K = 4; float alpha = 0.1f; float beta = 1.0f; float A[] = { -0.753f, -0.074f, -0.247f, -0.19f }; int lda = 4; float B[] = { 0.061f, 0.743f, 0.22f, -0.682f, 0.733f, 0.417f, 0.772f, 0.665f }; int ldb = 2; float C[] = { -0.253f, 0.972f }; int ldc = 1; float C_expected[] = { -0.291994f, 0.898164f }; cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1473)"); } }; }; { int order = 101; int transA = 111; int transB = 111; int M = 1; int N = 2; int K = 4; double alpha = 0; double beta = 0; double A[] = { 0.017, 0.191, 0.863, -0.97 }; int lda = 4; double B[] = { -0.207, -0.916, -0.278, 0.403, 0.885, 0.409, -0.772, -0.27 }; int ldb = 2; double C[] = { -0.274, -0.858 }; int ldc = 2; double C_expected[] = { 0.0, 0.0 }; cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1474)"); } }; }; { int order = 102; int transA = 111; int transB = 111; int M = 1; int N = 2; int K = 4; double alpha = 0; double beta = 0; double A[] = { 0.571, 0.081, 0.109, 0.988 }; int lda = 1; double B[] = { -0.048, -0.753, -0.8, -0.89, -0.535, -0.017, -0.018, -0.544 }; int ldb = 4; double C[] = { -0.876, -0.792 }; int ldc = 1; double C_expected[] = { 0.0, 0.0 }; cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1475)"); } }; }; { int order = 101; int transA = 111; int transB = 112; int M = 1; int N = 2; int K = 4; double alpha = -0.3; double beta = 1; double A[] = { 0.939, 0.705, 0.977, 0.4 }; int lda = 4; double B[] = { -0.089, -0.822, 0.937, 0.159, 0.789, -0.413, -0.172, 0.88 }; int ldb = 4; double C[] = { -0.619, 0.063 }; int ldc = 2; double C_expected[] = { -0.7137904, -0.1270986 }; cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1476)"); } }; }; { int order = 102; int transA = 111; int transB = 112; int M = 1; int N = 2; int K = 4; double alpha = -0.3; double beta = 1; double A[] = { -0.795, 0.81, 0.388, 0.09 }; int lda = 1; double B[] = { -0.847, 0.031, -0.938, 0.09, -0.286, -0.478, -0.981, 0.881 }; int ldb = 2; double C[] = { -0.242, -0.02 }; int ldc = 1; double C_expected[] = { -0.1562981, -0.0026243 }; cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1477)"); } }; }; { int order = 101; int transA = 112; int transB = 111; int M = 1; int N = 2; int K = 4; double alpha = -1; double beta = 0; double A[] = { -0.556, 0.532, 0.746, 0.673 }; int lda = 1; double B[] = { -0.525, 0.967, 0.687, -0.024, 0.527, 0.485, 0.109, -0.46 }; int ldb = 2; double C[] = { -0.495, 0.859 }; int ldc = 2; double C_expected[] = { -1.123883, 0.49819 }; cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1478)"); } }; }; { int order = 102; int transA = 112; int transB = 111; int M = 1; int N = 2; int K = 4; double alpha = -1; double beta = 0; double A[] = { -0.358, 0.224, -0.941, 0.513 }; int lda = 4; double B[] = { -0.201, -0.159, -0.586, -0.016, -0.324, 0.411, 0.115, -0.229 }; int ldb = 4; double C[] = { 0.558, 0.596 }; int ldc = 1; double C_expected[] = { -0.57956, 0.017636 }; cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1479)"); } }; }; { int order = 101; int transA = 112; int transB = 112; int M = 1; int N = 2; int K = 4; double alpha = -0.3; double beta = 1; double A[] = { -0.586, 0.809, 0.709, -0.524 }; int lda = 1; double B[] = { 0.768, 0.7, 0.619, -0.478, -0.129, -0.778, -0.432, 0.454 }; int ldb = 4; double C[] = { 0.042, 0.252 }; int ldc = 2; double C_expected[] = { -0.1996785, 0.5813976 }; cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1480)"); } }; }; { int order = 102; int transA = 112; int transB = 112; int M = 1; int N = 2; int K = 4; double alpha = -0.3; double beta = 1; double A[] = { -0.164, 0.522, 0.948, -0.624 }; int lda = 4; double B[] = { -0.142, 0.778, 0.359, 0.622, -0.637, -0.757, -0.282, -0.805 }; int ldb = 2; double C[] = { -0.09, 0.183 }; int ldc = 1; double C_expected[] = { -0.0248334, 0.1884672 }; cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1481)"); } }; }; { int order = 101; int transA = 111; int transB = 111; int M = 1; int N = 2; int K = 4; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {0.0f, 0.0f}; float A[] = { -0.082f, -0.281f, -0.096f, 0.913f, 0.974f, -0.706f, -0.773f, 0.522f }; int lda = 4; float B[] = { 0.745f, -0.664f, 0.352f, -0.733f, 0.304f, -0.555f, -0.493f, -0.089f, 0.188f, 0.631f, 0.235f, 0.152f, -0.299f, -0.731f, -0.686f, -0.332f }; int ldb = 2; float C[] = { -0.179f, -0.284f, -0.996f, -0.414f }; int ldc = 2; float C_expected[] = { -1.06679f, 1.47116f, 0.599689f, 0.933532f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1482) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1482) imag"); }; }; }; { int order = 102; int transA = 111; int transB = 111; int M = 1; int N = 2; int K = 4; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {0.0f, 0.0f}; float A[] = { 0.044f, -0.33f, 0.279f, 0.712f, -0.363f, -0.788f, -0.768f, -0.551f }; int lda = 1; float B[] = { 0.138f, 0.927f, -0.178f, -0.864f, 0.888f, 0.844f, -0.199f, 0.706f, -0.034f, 0.483f, 0.499f, 0.664f, 0.648f, 0.324f, 0.97f, 0.609f }; int ldb = 4; float C[] = { -0.129f, 0.842f, 0.214f, -0.626f }; int ldc = 1; float C_expected[] = { 1.81122f, 1.76205f, 1.0574f, -0.564966f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1483) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1483) imag"); }; }; }; { int order = 101; int transA = 111; int transB = 112; int M = 1; int N = 2; int K = 4; float alpha[2] = {0.0f, 0.0f}; float beta[2] = {-1.0f, 0.0f}; float A[] = { 0.812f, -0.471f, 0.241f, 0.795f, 0.439f, 0.131f, -0.636f, 0.531f }; int lda = 4; float B[] = { 0.062f, 0.807f, 0.873f, 0.372f, 0.239f, 0.804f, 0.537f, -0.954f, -0.396f, 0.838f, 0.081f, 0.15f, 0.489f, -0.438f, 0.165f, 0.429f }; int ldb = 4; float C[] = { 0.868f, 0.329f, -0.509f, 0.724f }; int ldc = 2; float C_expected[] = { -0.868f, -0.329f, 0.509f, -0.724f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1484) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1484) imag"); }; }; }; { int order = 102; int transA = 111; int transB = 112; int M = 1; int N = 2; int K = 4; float alpha[2] = {0.0f, 0.0f}; float beta[2] = {-1.0f, 0.0f}; float A[] = { 0.832f, 0.198f, 0.794f, -0.522f, -0.319f, 0.578f, 0.332f, 0.746f }; int lda = 1; float B[] = { -0.361f, 0.187f, -0.163f, -0.781f, 0.536f, 0.888f, -0.969f, 0.899f, 0.961f, -0.583f, 0.753f, 0.29f, -0.997f, 0.729f, -0.352f, -0.2f }; int ldb = 2; float C[] = { 0.864f, 0.735f, -0.074f, -0.228f }; int ldc = 1; float C_expected[] = { -0.864f, -0.735f, 0.074f, 0.228f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1485) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1485) imag"); }; }; }; { int order = 101; int transA = 111; int transB = 113; int M = 1; int N = 2; int K = 4; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {0.0f, 0.1f}; float A[] = { 0.149f, 0.187f, 0.263f, -0.715f, -0.882f, -0.907f, 0.87f, -0.527f }; int lda = 4; float B[] = { -0.915f, -0.249f, -0.986f, -0.799f, -0.136f, 0.712f, 0.964f, 0.799f, -0.569f, 0.686f, 0.603f, 0.758f, 0.161f, -0.698f, -0.263f, -0.256f }; int ldb = 4; float C[] = { 0.622f, -0.824f, -0.482f, -0.161f }; int ldc = 2; float C_expected[] = { -0.246901f, 0.083044f, 1.25556f, 0.009106f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1486) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1486) imag"); }; }; }; { int order = 102; int transA = 111; int transB = 113; int M = 1; int N = 2; int K = 4; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {0.0f, 0.1f}; float A[] = { 0.963f, -0.943f, -0.734f, -0.253f, 0.832f, 0.545f, -0.815f, -0.434f }; int lda = 1; float B[] = { 0.23f, -0.211f, 0.906f, 0.232f, -0.339f, 0.597f, -0.919f, 0.793f, 0.535f, 0.526f, 0.119f, 0.053f, 0.751f, 0.044f, 0.752f, -0.469f }; int ldb = 2; float C[] = { 0.483f, -0.266f, -0.224f, -0.692f }; int ldc = 1; float C_expected[] = { -0.047537f, 0.667177f, 1.02025f, 0.823778f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1487) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1487) imag"); }; }; }; { int order = 101; int transA = 112; int transB = 111; int M = 1; int N = 2; int K = 4; float alpha[2] = {-0.3f, 0.1f}; float beta[2] = {-1.0f, 0.0f}; float A[] = { -0.657f, -0.497f, -0.293f, -0.168f, -0.943f, -0.181f, 0.569f, 0.91f }; int lda = 1; float B[] = { -0.047f, 0.796f, -0.913f, 0.998f, 0.365f, 0.467f, -0.627f, -0.523f, 0.885f, 0.234f, -0.494f, 0.071f, -0.361f, -0.154f, -0.055f, -0.32f }; int ldb = 2; float C[] = { 0.956f, 0.268f, 0.152f, 0.717f }; int ldc = 2; float C_expected[] = { -0.668685f, 0.134477f, -0.715786f, -0.478065f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1488) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1488) imag"); }; }; }; { int order = 102; int transA = 112; int transB = 111; int M = 1; int N = 2; int K = 4; float alpha[2] = {-0.3f, 0.1f}; float beta[2] = {-1.0f, 0.0f}; float A[] = { 0.394f, -0.482f, 0.631f, -0.833f, 0.221f, 0.672f, 0.2f, 0.967f }; int lda = 4; float B[] = { 0.708f, 0.695f, 0.111f, -0.912f, 0.376f, 0.606f, -0.997f, -0.741f, 0.349f, 0.543f, 0.372f, -0.563f, 0.129f, -0.295f, -0.672f, -0.95f }; int ldb = 4; float C[] = { 0.436f, 0.752f, 0.074f, 0.209f }; int ldc = 1; float C_expected[] = { -0.325083f, -0.301952f, -0.283022f, 0.339919f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1489) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1489) imag"); }; }; }; { int order = 101; int transA = 112; int transB = 112; int M = 1; int N = 2; int K = 4; float alpha[2] = {1.0f, 0.0f}; float beta[2] = {-0.3f, 0.1f}; float A[] = { 0.827f, -0.862f, 0.373f, -0.265f, -0.9f, 0.892f, -0.319f, 0.151f }; int lda = 1; float B[] = { 0.603f, 0.816f, -0.511f, 0.831f, -0.36f, -0.954f, -0.978f, 0.485f, 0.675f, 0.186f, 0.463f, 0.144f, 0.851f, -0.458f, 0.766f, -0.213f }; int ldb = 4; float C[] = { -0.335f, 0.333f, -0.4f, 0.422f }; int ldc = 2; float C_expected[] = { 2.7126f, 0.702111f, 0.437661f, 0.691294f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1490) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1490) imag"); }; }; }; { int order = 102; int transA = 112; int transB = 112; int M = 1; int N = 2; int K = 4; float alpha[2] = {1.0f, 0.0f}; float beta[2] = {-0.3f, 0.1f}; float A[] = { 0.966f, 0.476f, -0.013f, -0.655f, 0.773f, -0.543f, -0.231f, -0.353f }; int lda = 4; float B[] = { -0.684f, 0.144f, 0.018f, -0.77f, -0.688f, 0.909f, -0.094f, -0.938f, -0.757f, 0.574f, -0.479f, 0.473f, 0.0f, 0.064f, -0.168f, 0.858f }; int ldb = 2; float C[] = { -0.912f, 0.54f, 0.756f, 0.024f }; int ldc = 1; float C_expected[] = { -0.156236f, 0.839112f, -0.230206f, -0.106256f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1491) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1491) imag"); }; }; }; { int order = 101; int transA = 112; int transB = 113; int M = 1; int N = 2; int K = 4; float alpha[2] = {0.0f, 0.0f}; float beta[2] = {1.0f, 0.0f}; float A[] = { 0.66f, -0.113f, -0.663f, -0.856f, 0.614f, -0.344f, -0.964f, -0.532f }; int lda = 1; float B[] = { -0.606f, -0.965f, -0.279f, -0.312f, 0.63f, 0.967f, 0.041f, -0.557f, 0.663f, 0.619f, -0.134f, 0.261f, -0.388f, 0.525f, 0.222f, 0.538f }; int ldb = 4; float C[] = { 0.114f, -0.376f, -0.851f, -0.682f }; int ldc = 2; float C_expected[] = { 0.114f, -0.376f, -0.851f, -0.682f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1492) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1492) imag"); }; }; }; { int order = 102; int transA = 112; int transB = 113; int M = 1; int N = 2; int K = 4; float alpha[2] = {0.0f, 0.0f}; float beta[2] = {1.0f, 0.0f}; float A[] = { 0.212f, -0.752f, 0.679f, 0.49f, -0.029f, -0.488f, 0.567f, 0.374f }; int lda = 4; float B[] = { -0.914f, 0.734f, -0.845f, 0.059f, -0.297f, 0.152f, -0.417f, -0.669f, 0.831f, -0.544f, 0.022f, 0.102f, -0.379f, -0.357f, -0.394f, -0.588f }; int ldb = 2; float C[] = { -0.584f, 0.373f, 0.235f, 0.521f }; int ldc = 1; float C_expected[] = { -0.584f, 0.373f, 0.235f, 0.521f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1493) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1493) imag"); }; }; }; { int order = 101; int transA = 113; int transB = 111; int M = 1; int N = 2; int K = 4; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {-1.0f, 0.0f}; float A[] = { 0.135f, 0.128f, 0.909f, -0.963f, 0.299f, -0.944f, 0.944f, 0.942f }; int lda = 1; float B[] = { 0.924f, -0.317f, -0.992f, -0.854f, -0.435f, 0.102f, 0.126f, 0.862f, 0.952f, 0.68f, 0.545f, 0.168f, 0.752f, 0.549f, 0.687f, -0.76f }; int ldb = 2; float C[] = { -0.369f, -0.33f, 0.849f, -0.632f }; int ldc = 2; float C_expected[] = { 0.326537f, 0.37603f, -0.86067f, 0.529817f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1494) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1494) imag"); }; }; }; { int order = 102; int transA = 113; int transB = 111; int M = 1; int N = 2; int K = 4; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {-1.0f, 0.0f}; float A[] = { 0.061f, -0.271f, -0.043f, -0.023f, 0.694f, 0.333f, 0.733f, -0.967f }; int lda = 4; float B[] = { 0.088f, -0.607f, 0.589f, 0.375f, -0.897f, -0.954f, -0.216f, -0.195f, -0.865f, -0.511f, -0.219f, 0.535f, 0.976f, 0.582f, 0.464f, -0.041f }; int ldb = 4; float C[] = { 0.533f, -0.63f, 0.405f, 0.667f }; int ldc = 1; float C_expected[] = { -0.459906f, 0.552595f, -0.425391f, -0.533626f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1495) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1495) imag"); }; }; }; { int order = 101; int transA = 113; int transB = 112; int M = 1; int N = 2; int K = 4; float alpha[2] = {0.0f, 0.0f}; float beta[2] = {1.0f, 0.0f}; float A[] = { -0.676f, -0.116f, 0.707f, -0.256f, -0.893f, -0.966f, 0.159f, -0.246f }; int lda = 1; float B[] = { 0.059f, 0.281f, -0.93f, -0.263f, 0.583f, -0.11f, 0.639f, -0.96f, -0.878f, 0.984f, 0.058f, 0.977f, -0.567f, 0.561f, -0.048f, -0.798f }; int ldb = 4; float C[] = { 0.362f, -0.808f, 0.428f, -0.112f }; int ldc = 2; float C_expected[] = { 0.362f, -0.808f, 0.428f, -0.112f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1496) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1496) imag"); }; }; }; { int order = 102; int transA = 113; int transB = 112; int M = 1; int N = 2; int K = 4; float alpha[2] = {0.0f, 0.0f}; float beta[2] = {1.0f, 0.0f}; float A[] = { -0.915f, 0.439f, 0.171f, -0.019f, 0.843f, 0.944f, -0.581f, 0.856f }; int lda = 4; float B[] = { -0.284f, 0.207f, -0.27f, 0.832f, 0.894f, -0.626f, -0.305f, -0.006f, 0.562f, -0.744f, -0.533f, 0.126f, -0.375f, -0.333f, 0.275f, 0.748f }; int ldb = 2; float C[] = { -0.763f, -0.829f, 0.708f, -0.613f }; int ldc = 1; float C_expected[] = { -0.763f, -0.829f, 0.708f, -0.613f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1497) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1497) imag"); }; }; }; { int order = 101; int transA = 113; int transB = 113; int M = 1; int N = 2; int K = 4; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {0.0f, 1.0f}; float A[] = { 0.496f, -0.9f, 0.825f, -0.678f, 0.41f, -0.585f, -0.264f, 0.308f }; int lda = 1; float B[] = { 0.907f, 0.972f, -0.724f, 0.745f, -0.601f, 0.589f, 0.759f, -0.521f, -0.161f, -0.321f, 0.341f, -0.981f, -0.378f, -0.671f, -0.314f, -0.878f }; int ldb = 4; float C[] = { -0.293f, 0.07f, 0.087f, -0.542f }; int ldc = 2; float C_expected[] = { 0.10357f, -0.163927f, 0.444626f, -0.0076744f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1498) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1498) imag"); }; }; }; { int order = 102; int transA = 113; int transB = 113; int M = 1; int N = 2; int K = 4; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {0.0f, 1.0f}; float A[] = { -0.225f, -0.629f, -0.939f, -0.836f, -0.841f, -0.794f, 0.836f, -0.65f }; int lda = 4; float B[] = { 0.869f, -0.453f, 0.8f, -0.947f, 0.545f, 0.716f, -0.507f, -0.228f, 0.722f, 0.372f, 0.77f, 0.317f, -0.153f, -0.524f, -0.465f, -0.684f }; int ldb = 2; float C[] = { -0.896f, 0.91f, -0.973f, -0.269f }; int ldc = 1; float C_expected[] = { -1.18974f, -1.0134f, 0.189027f, -1.14494f }; cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1499) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1499) imag"); }; }; }; { int order = 101; int transA = 111; int transB = 111; int M = 1; int N = 2; int K = 4; double alpha[2] = {1, 0}; double beta[2] = {-1, 0}; double A[] = { -0.33, 0.457, 0.428, -0.19, 0.86, -0.53, 0.058, -0.942 }; int lda = 4; double B[] = { 0.434, 0.653, -0.124, 0.191, -0.112, -0.84, -0.72, 0.075, -0.503, -0.109, 0.3, -0.898, 0.489, 0.384, 0.993, -0.804 }; int ldb = 2; double C[] = { -0.792, -0.155, -0.608, -0.243 }; int ldc = 2; double C_expected[] = { 0.042563, -0.465908, -0.649991, -1.621116 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1500) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1500) imag"); }; }; }; { int order = 102; int transA = 111; int transB = 111; int M = 1; int N = 2; int K = 4; double alpha[2] = {1, 0}; double beta[2] = {-1, 0}; double A[] = { 0.726, -0.438, -0.23, -0.054, -0.019, 0.902, -0.883, -0.235 }; int lda = 1; double B[] = { 0.159, -0.18, 0.386, -0.167, 0.971, -0.072, 0.87, -0.839, 0.474, 0.956, -0.235, 0.332, 0.826, -0.056, -0.941, 0.01 }; int ldb = 4; double C[] = { -0.799, 0.973, -0.549, -0.177 }; int ldc = 1; double C_expected[] = { -0.181084, 0.257841, 2.251901, 1.558195 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1501) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1501) imag"); }; }; }; { int order = 101; int transA = 111; int transB = 112; int M = 1; int N = 2; int K = 4; double alpha[2] = {0, 0.1}; double beta[2] = {1, 0}; double A[] = { 0.109, 0.892, -0.723, 0.793, 0.109, -0.419, -0.534, 0.448 }; int lda = 4; double B[] = { -0.875, -0.31, -0.027, 0.067, 0.274, -0.126, -0.548, 0.497, 0.681, 0.388, 0.909, 0.889, 0.982, -0.074, -0.788, 0.233 }; int ldb = 4; double C[] = { 0.503, 0.067, 0.239, 0.876 }; int ldc = 2; double C_expected[] = { 0.6553584, 0.0864583, 0.2559136, 0.7518389 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1502) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1502) imag"); }; }; }; { int order = 102; int transA = 111; int transB = 112; int M = 1; int N = 2; int K = 4; double alpha[2] = {0, 0.1}; double beta[2] = {1, 0}; double A[] = { 0.334, 0.192, -0.992, -0.168, 0.154, -0.75, -0.797, -0.76 }; int lda = 1; double B[] = { -0.82, 0.147, -0.237, 0.68, 0.317, 0.257, -0.406, -0.802, 0.058, 0.012, -0.832, 0.949, -0.263, -0.085, -0.064, 0.492 }; int ldb = 2; double C[] = { 0.079, -0.602, -0.392, 0.316 }; int ldc = 1; double C_expected[] = { 0.0980569, -0.6430449, -0.539207, 0.4226848 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1503) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1503) imag"); }; }; }; { int order = 101; int transA = 111; int transB = 113; int M = 1; int N = 2; int K = 4; double alpha[2] = {0, 0}; double beta[2] = {-1, 0}; double A[] = { -0.305, -0.698, -0.072, -0.383, 0.364, -0.656, 0.819, 0.194 }; int lda = 4; double B[] = { 0.682, 0.498, -0.389, 0.923, -0.853, -0.558, -0.722, -0.085, -0.27, 0.026, -0.107, -0.036, 0.644, -0.327, -0.894, 0.34 }; int ldb = 4; double C[] = { 0.981, -0.336, -0.377, -0.41 }; int ldc = 2; double C_expected[] = { -0.981, 0.336, 0.377, 0.41 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1504) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1504) imag"); }; }; }; { int order = 102; int transA = 111; int transB = 113; int M = 1; int N = 2; int K = 4; double alpha[2] = {0, 0}; double beta[2] = {-1, 0}; double A[] = { -0.306, -0.709, -0.196, 0.285, 0.873, -0.802, 0.715, -0.179 }; int lda = 1; double B[] = { 0.028, 0.109, 0.87, -0.446, 0.735, 0.731, 0.021, -0.186, 0.541, 0.97, -0.333, 0.002, -0.089, -0.01, 0.331, 0.851 }; int ldb = 2; double C[] = { 0.902, -0.584, -0.695, -0.607 }; int ldc = 1; double C_expected[] = { -0.902, 0.584, 0.695, 0.607 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1505) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1505) imag"); }; }; }; { int order = 101; int transA = 112; int transB = 111; int M = 1; int N = 2; int K = 4; double alpha[2] = {-1, 0}; double beta[2] = {1, 0}; double A[] = { 0.517, -0.136, 0.72, -0.237, 0.121, -0.66, 0.005, 0.759 }; int lda = 1; double B[] = { -0.606, 0.049, 0.807, -0.236, -0.258, -0.412, 0.75, -0.659, 0.993, -0.029, -0.968, 0.707, -0.362, -0.005, 0.096, -0.241 }; int ldb = 2; double C[] = { 0.63, 0.922, 0.025, -0.535 }; int ldc = 2; double C_expected[] = { 1.117044, 1.983417, -1.276831, -0.447092 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1506) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1506) imag"); }; }; }; { int order = 102; int transA = 112; int transB = 111; int M = 1; int N = 2; int K = 4; double alpha[2] = {-1, 0}; double beta[2] = {1, 0}; double A[] = { 0.064, 0.371, -0.01, -0.262, 0.143, -0.081, 0.1, -0.062 }; int lda = 4; double B[] = { -0.749, 0.289, -0.239, -0.226, 0.284, 0.668, 0.305, 0.075, -0.36, 0.166, -0.416, 0.234, -0.267, 0.525, 0.116, -0.561 }; int ldb = 4; double C[] = { 0.671, 0.763, 0.444, -0.246 }; int ldc = 1; double C_expected[] = { 0.753107, 0.896395, 0.481996, -0.263126 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1507) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1507) imag"); }; }; }; { int order = 101; int transA = 112; int transB = 112; int M = 1; int N = 2; int K = 4; double alpha[2] = {1, 0}; double beta[2] = {-0.3, 0.1}; double A[] = { -0.956, -0.751, 0.671, -0.633, 0.648, -0.042, 0.948, 0.826 }; int lda = 1; double B[] = { 0.921, 0.506, -0.609, 0.817, -0.686, 0.991, 0.616, -0.482, -0.02, -0.34, 0.559, 0.976, 0.431, 0.385, -0.164, -0.778 }; int ldb = 4; double C[] = { 0.074, -0.01, 0.165, 0.166 }; int ldc = 2; double C_expected[] = { 0.166046, 0.491557, 1.473191, -0.033821 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1508) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1508) imag"); }; }; }; { int order = 102; int transA = 112; int transB = 112; int M = 1; int N = 2; int K = 4; double alpha[2] = {1, 0}; double beta[2] = {-0.3, 0.1}; double A[] = { -0.698, -0.062, 0.023, 0.704, 0.443, -0.46, 0.541, 0.296 }; int lda = 4; double B[] = { 0.787, -0.199, 0.835, -0.276, -0.515, 0.467, -0.76, -0.483, 0.015, -0.394, -0.748, 0.02, 0.573, 0.3, -0.088, -0.238 }; int ldb = 2; double C[] = { 0.935, -0.655, -0.797, 0.071 }; int ldc = 1; double C_expected[] = { -1.070679, 0.178755, -0.344714, -0.308137 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1509) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1509) imag"); }; }; }; { int order = 101; int transA = 112; int transB = 113; int M = 1; int N = 2; int K = 4; double alpha[2] = {0, 0.1}; double beta[2] = {-0.3, 0.1}; double A[] = { -0.202, -0.219, 0.741, 0.527, 0.054, 0.16, -0.359, 0.338 }; int lda = 1; double B[] = { -0.872, 0.995, 0.722, 0.618, -0.27, 0.939, -0.743, 0.547, -0.864, 0.376, -0.997, -0.63, 0.887, -0.454, 0.436, -0.039 }; int ldb = 4; double C[] = { -0.684, 0.463, -0.386, -0.524 }; int ldc = 2; double C_expected[] = { 0.1423153, -0.066679, 0.1175618, 0.0012949 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1510) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1510) imag"); }; }; }; { int order = 102; int transA = 112; int transB = 113; int M = 1; int N = 2; int K = 4; double alpha[2] = {0, 0.1}; double beta[2] = {-0.3, 0.1}; double A[] = { -0.855, -0.173, -0.679, 0.824, 0.469, 0.786, 0.757, -0.109 }; int lda = 4; double B[] = { 0.483, -0.888, -0.757, 0.551, -0.81, 0.23, -0.078, 0.725, -0.592, 0.394, 0.884, 0.802, -0.813, -0.016, -0.853, 0.783 }; int ldb = 2; double C[] = { 0.181, -0.368, -0.864, -0.784 }; int ldc = 1; double C_expected[] = { 0.1728438, 0.1183508, 0.2526999, 0.3004174 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1511) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1511) imag"); }; }; }; { int order = 101; int transA = 113; int transB = 111; int M = 1; int N = 2; int K = 4; double alpha[2] = {-1, 0}; double beta[2] = {-0.3, 0.1}; double A[] = { 0.446, -0.65, -0.724, 0.014, 0.792, -0.695, -0.81, -0.358 }; int lda = 1; double B[] = { -0.08, 0.216, 0.689, 0.699, 0.073, -0.346, 0.821, -0.668, -0.798, 0.869, 0.451, -0.061, -0.41, 0.316, 0.104, -0.514 }; int ldb = 2; double C[] = { -0.476, 0.211, -0.912, -0.243 }; int ldc = 2; double C_expected[] = { 1.372475, -0.135616, 0.549353, -1.968747 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1512) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1512) imag"); }; }; }; { int order = 102; int transA = 113; int transB = 111; int M = 1; int N = 2; int K = 4; double alpha[2] = {-1, 0}; double beta[2] = {-0.3, 0.1}; double A[] = { 0.669, 0.046, -0.094, 0.666, 0.23, 0.448, -0.795, -0.142 }; int lda = 4; double B[] = { 0.037, -0.154, -0.739, 0.905, 0.793, -0.53, -0.34, 0.428, 0.072, -0.263, -0.603, -0.905, 0.681, -0.083, -0.511, -0.337 }; int ldb = 4; double C[] = { 0.247, 0.575, -0.836, -0.883 }; int ldc = 1; double C_expected[] = { -0.975939, 0.415528, 0.275533, 0.002716 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1513) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1513) imag"); }; }; }; { int order = 101; int transA = 113; int transB = 112; int M = 1; int N = 2; int K = 4; double alpha[2] = {0, 0}; double beta[2] = {-1, 0}; double A[] = { 0.369, 0.506, 0.217, -0.739, -0.395, 0.16, -0.329, -0.954 }; int lda = 1; double B[] = { -0.622, -0.945, 0.416, -0.884, 0.797, -0.74, 0.519, -0.789, -0.348, 0.563, -0.398, -0.956, 0.227, 0.84, -0.079, 0.847 }; int ldb = 4; double C[] = { 0.833, 0.761, 0.074, -0.448 }; int ldc = 2; double C_expected[] = { -0.833, -0.761, -0.074, 0.448 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1514) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1514) imag"); }; }; }; { int order = 102; int transA = 113; int transB = 112; int M = 1; int N = 2; int K = 4; double alpha[2] = {0, 0}; double beta[2] = {-1, 0}; double A[] = { -0.141, 0.275, 0.717, 0.775, -0.701, -0.689, -0.883, -0.077 }; int lda = 4; double B[] = { -0.526, -0.437, 0.133, -0.209, -0.83, 0.328, 0.916, -0.337, 0.762, -0.664, -0.566, 0.955, 0.168, 0.488, -0.172, -0.535 }; int ldb = 2; double C[] = { -0.88, 0.945, 0.416, 0.99 }; int ldc = 1; double C_expected[] = { 0.88, -0.945, -0.416, -0.99 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1515) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1515) imag"); }; }; }; { int order = 101; int transA = 113; int transB = 113; int M = 1; int N = 2; int K = 4; double alpha[2] = {-0.3, 0.1}; double beta[2] = {0, 0.1}; double A[] = { -0.534, -0.013, -0.258, -0.31, -0.211, -0.883, -0.89, -0.499 }; int lda = 1; double B[] = { -0.185, -0.798, -0.34, 0.716, 0.035, 0.968, -0.26, 0.784, -0.889, -0.344, -0.685, -0.647, -0.764, 0.03, 0.626, -0.989 }; int ldb = 4; double C[] = { -0.793, -0.551, 0.182, 0.838 }; int ldc = 2; double C_expected[] = { -0.5507177, -0.0286821, 0.2222276, 0.5197398 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1516) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1516) imag"); }; }; }; { int order = 102; int transA = 113; int transB = 113; int M = 1; int N = 2; int K = 4; double alpha[2] = {-0.3, 0.1}; double beta[2] = {0, 0.1}; double A[] = { 0.575, -0.128, -0.702, 0.758, 0.383, -0.914, 0.157, 0.368 }; int lda = 4; double B[] = { 0.572, -0.841, 0.223, -0.334, -0.823, -0.84, 0.671, -0.871, 0.241, 0.927, -0.344, 0.281, -0.034, -0.104, 0.587, -0.329 }; int ldb = 2; double C[] = { -0.612, 0.167, 0.647, 0.447 }; int ldc = 1; double C_expected[] = { -0.7876717, 0.0341179, -0.0800018, 0.5717566 }; cblas_zgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zgemm(case 1517) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zgemm(case 1517) imag"); }; }; }; } gsl/cblas/dsyrk.c0000644000175000017500000000066413536674414012324 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_dsyrk (const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const double alpha, const double *A, const int lda, const double beta, double *C, const int ldc) { #define BASE double #include "source_syrk_r.h" #undef BASE } gsl/cblas/source_nrm2_c.h0000644000175000017500000000300313536674414013723 0ustar eddedd/* blas/source_nrm2_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { BASE scale = 0.0; BASE ssq = 1.0; INDEX i; INDEX ix = 0; if (N == 0 || incX < 1) { return 0; } for (i = 0; i < N; i++) { const BASE x = CONST_REAL(X, ix); const BASE y = CONST_IMAG(X, ix); if (x != 0.0) { const BASE ax = fabs(x); if (scale < ax) { ssq = 1.0 + ssq * (scale / ax) * (scale / ax); scale = ax; } else { ssq += (ax / scale) * (ax / scale); } } if (y != 0.0) { const BASE ay = fabs(y); if (scale < ay) { ssq = 1.0 + ssq * (scale / ay) * (scale / ay); scale = ay; } else { ssq += (ay / scale) * (ay / scale); } } ix += incX; } return scale * sqrt(ssq); } gsl/cblas/icamax.c0000644000175000017500000000031613536674414012424 0ustar eddedd#include #include #include "cblas.h" CBLAS_INDEX cblas_icamax (const int N, const void *X, const int incX) { #define BASE float #include "source_iamax_c.h" #undef BASE } gsl/cblas/zdscal.c0000644000175000017500000000032713536674414012444 0ustar eddedd#include #include #include "cblas.h" void cblas_zdscal (const int N, const double alpha, void *X, const int incX) { #define BASE double #include "source_scal_c_s.h" #undef BASE } gsl/cblas/ctrmv.c0000644000175000017500000000063113536674414012315 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_ctrmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *A, const int lda, void *X, const int incX) { #define BASE float #include "source_trmv_c.h" #undef BASE } gsl/cblas/dnrm2.c0000644000175000017500000000031213536674414012200 0ustar eddedd#include #include #include "cblas.h" double cblas_dnrm2 (const int N, const double *X, const int incX) { #define BASE double #include "source_nrm2_r.h" #undef BASE } gsl/cblas/dspmv.c0000644000175000017500000000062713536674414012320 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dspmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *Ap, const double *X, const int incX, const double beta, double *Y, const int incY) { #define BASE double #include "source_spmv.h" #undef BASE } gsl/cblas/source_rotg.h0000644000175000017500000000246513536674414013531 0ustar eddedd/* blas/source_rotg.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { const BASE roe = (fabs(*a) > fabs(*b) ? *a : *b); const BASE scale = fabs(*a) + fabs(*b); BASE r, z; if (scale != 0.0) { const BASE aos = *a / scale; const BASE bos = *b / scale; r = scale * sqrt(aos * aos + bos * bos); r = GSL_SIGN(roe) * r; *c = *a / r; *s = *b / r; z = 1.0; if (fabs(*a) > fabs(*b)) z = *s; if (fabs(*b) >= fabs(*a) && *c != 0.0) z = 1.0 / (*c); } else { *c = 1.0; *s = 0.0; r = 0.0; z = 0.0; } *a = r; *b = z; } gsl/cblas/ctbmv.c0000644000175000017500000000064613536674414012303 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_ctbmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const void *A, const int lda, void *X, const int incX) { #define BASE float #include "source_tbmv_c.h" #undef BASE } gsl/cblas/test_hemm.c0000644000175000017500000002746413536674414013164 0ustar eddedd#include #include #include #include #include "tests.h" void test_hemm (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int side = 141; int uplo = 121; int M = 1; int N = 2; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {0.0f, 0.1f}; float A[] = { -0.126f, 0.079f }; int lda = 1; float B[] = { -0.954f, -0.059f, 0.296f, -0.988f }; int ldb = 2; float C[] = { -0.859f, -0.731f, 0.737f, 0.593f }; int ldc = 2; float C_expected[] = { 0.0723566f, -0.0738796f, -0.0717488f, 0.0699704f }; cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1550) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1550) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int M = 1; int N = 2; float alpha[2] = {0.0f, 0.1f}; float beta[2] = {0.0f, 0.1f}; float A[] = { 0.652f, 0.584f }; int lda = 1; float B[] = { -0.983f, -0.734f, -0.422f, -0.825f }; int ldb = 1; float C[] = { 0.387f, 0.341f, -0.734f, 0.632f }; int ldc = 1; float C_expected[] = { 0.0137568f, -0.0253916f, -0.00941f, -0.100914f }; cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1551) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1551) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int M = 1; int N = 2; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {-1.0f, 0.0f}; float A[] = { 0.78f, 0.885f, 0.507f, 0.765f, 0.911f, -0.461f, 0.707f, 0.508f }; int lda = 2; float B[] = { -0.905f, 0.633f, 0.85f, -0.943f }; int ldb = 2; float C[] = { 0.045f, -0.237f, 0.078f, -0.252f }; int ldc = 2; float C_expected[] = { 0.589611f, -0.759345f, 0.960095f, -0.09013f }; cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1552) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1552) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int M = 1; int N = 2; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {-1.0f, 0.0f}; float A[] = { 0.947f, 0.939f, -0.267f, -0.819f, -0.827f, -0.937f, 0.991f, 0.838f }; int lda = 2; float B[] = { 0.871f, -0.988f, -0.232f, -0.434f }; int ldb = 1; float C[] = { -0.261f, 0.927f, -0.351f, -0.203f }; int ldc = 1; float C_expected[] = { 1.0551f, 0.496359f, 0.780145f, -1.67298f }; cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1553) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1553) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int M = 1; int N = 2; float alpha[2] = {-1.0f, 0.0f}; float beta[2] = {0.0f, 0.0f}; float A[] = { -0.593f, -0.9f }; int lda = 1; float B[] = { -0.861f, 0.747f, -0.984f, 0.595f }; int ldb = 2; float C[] = { -0.589f, -0.671f, -0.011f, -0.417f }; int ldc = 2; float C_expected[] = { -0.510573f, 0.442971f, -0.583512f, 0.352835f }; cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1554) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1554) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int M = 1; int N = 2; float alpha[2] = {-1.0f, 0.0f}; float beta[2] = {0.0f, 0.0f}; float A[] = { -0.79f, 0.132f }; int lda = 1; float B[] = { -0.243f, -0.12f, 0.633f, -0.556f }; int ldb = 1; float C[] = { -0.658f, -0.74f, -0.47f, 0.481f }; int ldc = 1; float C_expected[] = { -0.19197f, -0.0948f, 0.50007f, -0.43924f }; cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1555) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1555) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int M = 1; int N = 2; float alpha[2] = {-0.3f, 0.1f}; float beta[2] = {0.0f, 1.0f}; float A[] = { -0.114f, -0.515f, -0.513f, -0.527f, -0.995f, 0.986f, 0.229f, -0.076f }; int lda = 2; float B[] = { 0.084f, 0.522f, 0.61f, 0.694f }; int ldb = 2; float C[] = { 0.802f, 0.136f, -0.161f, -0.364f }; int ldc = 2; float C_expected[] = { 0.269101f, 0.716492f, 0.237088f, 0.0290666f }; cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1556) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1556) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int M = 1; int N = 2; float alpha[2] = {-0.3f, 0.1f}; float beta[2] = {0.0f, 1.0f}; float A[] = { 0.798f, -0.324f, -0.693f, -0.893f, -0.223f, 0.749f, 0.102f, -0.357f }; int lda = 2; float B[] = { -0.572f, -0.569f, -0.391f, -0.938f }; int ldb = 1; float C[] = { 0.152f, -0.834f, -0.633f, -0.473f }; int ldc = 1; float C_expected[] = { 1.08642f, -0.113853f, 0.234826f, -0.48289f }; cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1557) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1557) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int M = 1; int N = 2; double alpha[2] = {0, 0.1}; double beta[2] = {0, 0.1}; double A[] = { -0.359, 0.089 }; int lda = 1; double B[] = { -0.451, -0.337, -0.901, -0.871 }; int ldb = 2; double C[] = { 0.729, 0.631, 0.364, 0.246 }; int ldc = 2; double C_expected[] = { -0.0751983, 0.0890909, -0.0558689, 0.0687459 }; cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1558) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1558) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int M = 1; int N = 2; double alpha[2] = {0, 0.1}; double beta[2] = {0, 0.1}; double A[] = { 0.044, -0.496 }; int lda = 1; double B[] = { -0.674, 0.281, 0.366, 0.888 }; int ldb = 1; double C[] = { -0.9, 0.919, 0.857, -0.049 }; int ldc = 1; double C_expected[] = { -0.0931364, -0.0929656, 0.0009928, 0.0873104 }; cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1559) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1559) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int M = 1; int N = 2; double alpha[2] = {0, 0}; double beta[2] = {0, 0.1}; double A[] = { -0.314, 0.115, 0.114, 0.878, 0.961, -0.224, 0.973, 0.771 }; int lda = 2; double B[] = { 0.5, -0.016, -0.5, 0.149 }; int ldb = 2; double C[] = { -0.054, 0.064, 0.02, 0.245 }; int ldc = 2; double C_expected[] = { -0.0064, -0.0054, -0.0245, 0.002 }; cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1560) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1560) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int M = 1; int N = 2; double alpha[2] = {0, 0}; double beta[2] = {0, 0.1}; double A[] = { 0.186, 0.578, 0.797, -0.957, -0.539, -0.969, -0.21, 0.354 }; int lda = 2; double B[] = { 0.641, -0.968, 0.15, -0.569 }; int ldb = 1; double C[] = { -0.556, -0.9, 0.197, 0.31 }; int ldc = 1; double C_expected[] = { 0.09, -0.0556, -0.031, 0.0197 }; cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1561) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1561) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int M = 1; int N = 2; double alpha[2] = {1, 0}; double beta[2] = {1, 0}; double A[] = { 0.323, 0.641 }; int lda = 1; double B[] = { -0.188, 0.091, -0.235, 0.523 }; int ldb = 2; double C[] = { 0.919, 0.806, 0.823, -0.94 }; int ldc = 2; double C_expected[] = { 0.858276, 0.835393, 0.747095, -0.771071 }; cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1562) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1562) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int M = 1; int N = 2; double alpha[2] = {1, 0}; double beta[2] = {1, 0}; double A[] = { -0.688, 0.915 }; int lda = 1; double B[] = { 0.914, -0.204, 0.205, -0.476 }; int ldb = 1; double C[] = { 0.27, -0.628, -0.079, 0.507 }; int ldc = 1; double C_expected[] = { -0.358832, -0.487648, -0.22004, 0.834488 }; cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1563) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1563) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int M = 1; int N = 2; double alpha[2] = {0, 1}; double beta[2] = {0, 0.1}; double A[] = { 0.681, 0.574, -0.425, -0.64, 0.792, 0.661, -0.009, 0.005 }; int lda = 2; double B[] = { -0.221, 0.554, -0.465, -0.95 }; int ldb = 2; double C[] = { 0.331, -0.958, -0.826, -0.972 }; int ldc = 2; double C_expected[] = { 0.778291, 0.142269, -0.496199, 0.112747 }; cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1564) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1564) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int M = 1; int N = 2; double alpha[2] = {0, 1}; double beta[2] = {0, 0.1}; double A[] = { 0.959, 0.34, -0.23, 0.064, 0.516, -0.275, 0.714, 0.899 }; int lda = 2; double B[] = { -0.502, -0.987, -0.134, 0.215 }; int ldb = 1; double C[] = { 0.929, 0.181, -0.16, -0.921 }; int ldc = 1; double C_expected[] = { 0.986459, -0.371458, -0.320548, -0.059384 }; cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1565) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1565) imag"); }; }; }; } gsl/cblas/gsl_cblas.h0000644000175000017500000010161513536674414013124 0ustar eddedd/* blas/gsl_cblas.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* This is a copy of the CBLAS standard header. * We carry this around so we do not have to * break our model for flexible BLAS functionality. */ #ifndef __GSL_CBLAS_H__ #define __GSL_CBLAS_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus #define __BEGIN_DECLS extern "C" { #define __END_DECLS } #else #define __BEGIN_DECLS /* empty */ #define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* * Enumerated and derived types */ #define CBLAS_INDEX size_t /* this may vary between platforms */ enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102}; enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113}; enum CBLAS_UPLO {CblasUpper=121, CblasLower=122}; enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132}; enum CBLAS_SIDE {CblasLeft=141, CblasRight=142}; /* * =========================================================================== * Prototypes for level 1 BLAS functions (complex are recast as routines) * =========================================================================== */ float cblas_sdsdot(const int N, const float alpha, const float *X, const int incX, const float *Y, const int incY); double cblas_dsdot(const int N, const float *X, const int incX, const float *Y, const int incY); float cblas_sdot(const int N, const float *X, const int incX, const float *Y, const int incY); double cblas_ddot(const int N, const double *X, const int incX, const double *Y, const int incY); /* * Functions having prefixes Z and C only */ void cblas_cdotu_sub(const int N, const void *X, const int incX, const void *Y, const int incY, void *dotu); void cblas_cdotc_sub(const int N, const void *X, const int incX, const void *Y, const int incY, void *dotc); void cblas_zdotu_sub(const int N, const void *X, const int incX, const void *Y, const int incY, void *dotu); void cblas_zdotc_sub(const int N, const void *X, const int incX, const void *Y, const int incY, void *dotc); /* * Functions having prefixes S D SC DZ */ float cblas_snrm2(const int N, const float *X, const int incX); float cblas_sasum(const int N, const float *X, const int incX); double cblas_dnrm2(const int N, const double *X, const int incX); double cblas_dasum(const int N, const double *X, const int incX); float cblas_scnrm2(const int N, const void *X, const int incX); float cblas_scasum(const int N, const void *X, const int incX); double cblas_dznrm2(const int N, const void *X, const int incX); double cblas_dzasum(const int N, const void *X, const int incX); /* * Functions having standard 4 prefixes (S D C Z) */ CBLAS_INDEX cblas_isamax(const int N, const float *X, const int incX); CBLAS_INDEX cblas_idamax(const int N, const double *X, const int incX); CBLAS_INDEX cblas_icamax(const int N, const void *X, const int incX); CBLAS_INDEX cblas_izamax(const int N, const void *X, const int incX); /* * =========================================================================== * Prototypes for level 1 BLAS routines * =========================================================================== */ /* * Routines with standard 4 prefixes (s, d, c, z) */ void cblas_sswap(const int N, float *X, const int incX, float *Y, const int incY); void cblas_scopy(const int N, const float *X, const int incX, float *Y, const int incY); void cblas_saxpy(const int N, const float alpha, const float *X, const int incX, float *Y, const int incY); void cblas_dswap(const int N, double *X, const int incX, double *Y, const int incY); void cblas_dcopy(const int N, const double *X, const int incX, double *Y, const int incY); void cblas_daxpy(const int N, const double alpha, const double *X, const int incX, double *Y, const int incY); void cblas_cswap(const int N, void *X, const int incX, void *Y, const int incY); void cblas_ccopy(const int N, const void *X, const int incX, void *Y, const int incY); void cblas_caxpy(const int N, const void *alpha, const void *X, const int incX, void *Y, const int incY); void cblas_zswap(const int N, void *X, const int incX, void *Y, const int incY); void cblas_zcopy(const int N, const void *X, const int incX, void *Y, const int incY); void cblas_zaxpy(const int N, const void *alpha, const void *X, const int incX, void *Y, const int incY); /* * Routines with S and D prefix only */ void cblas_srotg(float *a, float *b, float *c, float *s); void cblas_srotmg(float *d1, float *d2, float *b1, const float b2, float *P); void cblas_srot(const int N, float *X, const int incX, float *Y, const int incY, const float c, const float s); void cblas_srotm(const int N, float *X, const int incX, float *Y, const int incY, const float *P); void cblas_drotg(double *a, double *b, double *c, double *s); void cblas_drotmg(double *d1, double *d2, double *b1, const double b2, double *P); void cblas_drot(const int N, double *X, const int incX, double *Y, const int incY, const double c, const double s); void cblas_drotm(const int N, double *X, const int incX, double *Y, const int incY, const double *P); /* * Routines with S D C Z CS and ZD prefixes */ void cblas_sscal(const int N, const float alpha, float *X, const int incX); void cblas_dscal(const int N, const double alpha, double *X, const int incX); void cblas_cscal(const int N, const void *alpha, void *X, const int incX); void cblas_zscal(const int N, const void *alpha, void *X, const int incX); void cblas_csscal(const int N, const float alpha, void *X, const int incX); void cblas_zdscal(const int N, const double alpha, void *X, const int incX); /* * =========================================================================== * Prototypes for level 2 BLAS * =========================================================================== */ /* * Routines with standard 4 prefixes (S, D, C, Z) */ void cblas_sgemv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const float alpha, const float *A, const int lda, const float *X, const int incX, const float beta, float *Y, const int incY); void cblas_sgbmv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const int KL, const int KU, const float alpha, const float *A, const int lda, const float *X, const int incX, const float beta, float *Y, const int incY); void cblas_strmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const float *A, const int lda, float *X, const int incX); void cblas_stbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const float *A, const int lda, float *X, const int incX); void cblas_stpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const float *Ap, float *X, const int incX); void cblas_strsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const float *A, const int lda, float *X, const int incX); void cblas_stbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const float *A, const int lda, float *X, const int incX); void cblas_stpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const float *Ap, float *X, const int incX); void cblas_dgemv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY); void cblas_dgbmv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const int KL, const int KU, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY); void cblas_dtrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const double *A, const int lda, double *X, const int incX); void cblas_dtbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const double *A, const int lda, double *X, const int incX); void cblas_dtpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const double *Ap, double *X, const int incX); void cblas_dtrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const double *A, const int lda, double *X, const int incX); void cblas_dtbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const double *A, const int lda, double *X, const int incX); void cblas_dtpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const double *Ap, double *X, const int incX); void cblas_cgemv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_cgbmv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const int KL, const int KU, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_ctrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *A, const int lda, void *X, const int incX); void cblas_ctbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const void *A, const int lda, void *X, const int incX); void cblas_ctpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *Ap, void *X, const int incX); void cblas_ctrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *A, const int lda, void *X, const int incX); void cblas_ctbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const void *A, const int lda, void *X, const int incX); void cblas_ctpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *Ap, void *X, const int incX); void cblas_zgemv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_zgbmv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const int KL, const int KU, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_ztrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *A, const int lda, void *X, const int incX); void cblas_ztbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const void *A, const int lda, void *X, const int incX); void cblas_ztpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *Ap, void *X, const int incX); void cblas_ztrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *A, const int lda, void *X, const int incX); void cblas_ztbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const void *A, const int lda, void *X, const int incX); void cblas_ztpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *Ap, void *X, const int incX); /* * Routines with S and D prefixes only */ void cblas_ssymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *A, const int lda, const float *X, const int incX, const float beta, float *Y, const int incY); void cblas_ssbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const int K, const float alpha, const float *A, const int lda, const float *X, const int incX, const float beta, float *Y, const int incY); void cblas_sspmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *Ap, const float *X, const int incX, const float beta, float *Y, const int incY); void cblas_sger(const enum CBLAS_ORDER order, const int M, const int N, const float alpha, const float *X, const int incX, const float *Y, const int incY, float *A, const int lda); void cblas_ssyr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *X, const int incX, float *A, const int lda); void cblas_sspr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *X, const int incX, float *Ap); void cblas_ssyr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *X, const int incX, const float *Y, const int incY, float *A, const int lda); void cblas_sspr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *X, const int incX, const float *Y, const int incY, float *A); void cblas_dsymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY); void cblas_dsbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const int K, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY); void cblas_dspmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *Ap, const double *X, const int incX, const double beta, double *Y, const int incY); void cblas_dger(const enum CBLAS_ORDER order, const int M, const int N, const double alpha, const double *X, const int incX, const double *Y, const int incY, double *A, const int lda); void cblas_dsyr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *X, const int incX, double *A, const int lda); void cblas_dspr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *X, const int incX, double *Ap); void cblas_dsyr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *X, const int incX, const double *Y, const int incY, double *A, const int lda); void cblas_dspr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *X, const int incX, const double *Y, const int incY, double *A); /* * Routines with C and Z prefixes only */ void cblas_chemv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_chbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const int K, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_chpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *Ap, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_cgeru(const enum CBLAS_ORDER order, const int M, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda); void cblas_cgerc(const enum CBLAS_ORDER order, const int M, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda); void cblas_cher(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const void *X, const int incX, void *A, const int lda); void cblas_chpr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const void *X, const int incX, void *A); void cblas_cher2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda); void cblas_chpr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *Ap); void cblas_zhemv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_zhbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const int K, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_zhpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *Ap, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_zgeru(const enum CBLAS_ORDER order, const int M, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda); void cblas_zgerc(const enum CBLAS_ORDER order, const int M, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda); void cblas_zher(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const void *X, const int incX, void *A, const int lda); void cblas_zhpr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const void *X, const int incX, void *A); void cblas_zher2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda); void cblas_zhpr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *Ap); /* * =========================================================================== * Prototypes for level 3 BLAS * =========================================================================== */ /* * Routines with standard 4 prefixes (S, D, C, Z) */ void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc); void cblas_ssymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc); void cblas_ssyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const float alpha, const float *A, const int lda, const float beta, float *C, const int ldc); void cblas_ssyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc); void cblas_strmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const float alpha, const float *A, const int lda, float *B, const int ldb); void cblas_strsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const float alpha, const float *A, const int lda, float *B, const int ldb); void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const double alpha, const double *A, const int lda, const double *B, const int ldb, const double beta, double *C, const int ldc); void cblas_dsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const double alpha, const double *A, const int lda, const double *B, const int ldb, const double beta, double *C, const int ldc); void cblas_dsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const double alpha, const double *A, const int lda, const double beta, double *C, const int ldc); void cblas_dsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const double alpha, const double *A, const int lda, const double *B, const int ldb, const double beta, double *C, const int ldc); void cblas_dtrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const double alpha, const double *A, const int lda, double *B, const int ldb); void cblas_dtrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const double alpha, const double *A, const int lda, double *B, const int ldb); void cblas_cgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_csymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_csyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *beta, void *C, const int ldc); void cblas_csyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_ctrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const void *alpha, const void *A, const int lda, void *B, const int ldb); void cblas_ctrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const void *alpha, const void *A, const int lda, void *B, const int ldb); void cblas_zgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_zsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_zsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *beta, void *C, const int ldc); void cblas_zsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_ztrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const void *alpha, const void *A, const int lda, void *B, const int ldb); void cblas_ztrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const void *alpha, const void *A, const int lda, void *B, const int ldb); /* * Routines with prefixes C and Z only */ void cblas_chemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_cherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const float alpha, const void *A, const int lda, const float beta, void *C, const int ldc); void cblas_cher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const float beta, void *C, const int ldc); void cblas_zhemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_zherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const double alpha, const void *A, const int lda, const double beta, void *C, const int ldc); void cblas_zher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const double beta, void *C, const int ldc); void cblas_xerbla(int p, const char *rout, const char *form, ...); __END_DECLS #endif /* __GSL_CBLAS_H__ */ gsl/cblas/cblas.h0000644000175000017500000000170413536674414012255 0ustar eddedd#define INDEX int #define OFFSET(N, incX) ((incX) > 0 ? 0 : ((N) - 1) * (-(incX))) #define BLAS_ERROR(x) cblas_xerbla(0, __FILE__, x); #define CONJUGATE(x) ((x) == CblasConjTrans) #define TRANSPOSE(x) ((x) == CblasTrans || (x) == CblasConjTrans) #define UPPER(x) ((x) == CblasUpper) #define LOWER(x) ((x) == CblasLower) /* Handling of packed complex types... */ #define REAL(a,i) (((BASE *) a)[2*(i)]) #define IMAG(a,i) (((BASE *) a)[2*(i)+1]) #define REAL0(a) (((BASE *)a)[0]) #define IMAG0(a) (((BASE *)a)[1]) #define CONST_REAL(a,i) (((const BASE *) a)[2*(i)]) #define CONST_IMAG(a,i) (((const BASE *) a)[2*(i)+1]) #define CONST_REAL0(a) (((const BASE *)a)[0]) #define CONST_IMAG0(a) (((const BASE *)a)[1]) #define GB(KU,KL,lda,i,j) ((KU+1+(i-j))*lda + j) #define TRCOUNT(N,i) ((((i)+1)*(2*(N)-(i)))/2) /* #define TBUP(N,i,j) */ /* #define TBLO(N,i,j) */ #define TPUP(N,i,j) (TRCOUNT(N,(i)-1)+(j)-(i)) #define TPLO(N,i,j) (((i)*((i)+1))/2 + (j)) gsl/cblas/source_copy_c.h0000644000175000017500000000201013536674414014014 0ustar eddedd/* blas/source_copy_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i; INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { REAL(Y, iy) = CONST_REAL(X, ix); IMAG(Y, iy) = CONST_IMAG(X, ix); ix += incX; iy += incY; } } gsl/cblas/srot.c0000644000175000017500000000040013536674414012143 0ustar eddedd#include #include #include "cblas.h" void cblas_srot (const int N, float *X, const int incX, float *Y, const int incY, const float c, const float s) { #define BASE float #include "source_rot.h" #undef BASE } gsl/cblas/stbmv.c0000644000175000017500000000065013536674414012316 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_stbmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const float *A, const int lda, float *X, const int incX) { #define BASE float #include "source_tbmv_r.h" #undef BASE } gsl/cblas/test.c0000644000175000017500000000204113536674414012136 0ustar eddedd/* blas/test.c * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include "tests.h" int main (void) { gsl_ieee_env_setup (); #include "tests.c" exit (gsl_test_summary()); } gsl/cblas/ztpmv.c0000644000175000017500000000057713536674414012353 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_ztpmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *Ap, void *X, const int incX) { #define BASE double #include "source_tpmv_c.h" #undef BASE } gsl/cblas/cgeru.c0000644000175000017500000000055613536674414012275 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_cgeru (const enum CBLAS_ORDER order, const int M, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda) { #define BASE float #include "source_geru.h" #undef BASE } gsl/cblas/cgemv.c0000644000175000017500000000066213536674414012267 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_cgemv (const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY) { #define BASE float #include "source_gemv_c.h" #undef BASE } gsl/cblas/test_asum.c0000644000175000017500000000523513536674414013173 0ustar eddedd#include #include #include #include #include "tests.h" void test_asum (void) { const double flteps = 1e-4, dbleps = 1e-6; { int N = 1; float X[] = { 0.239f }; int incX = -1; float expected = 0.0f; float f; f = cblas_sasum(N, X, incX); gsl_test_rel(f, expected, flteps, "sasum(case 40)"); }; { int N = 1; double X[] = { -0.413 }; int incX = -1; double expected = 0; double f; f = cblas_dasum(N, X, incX); gsl_test_rel(f, expected, dbleps, "dasum(case 41)"); }; { int N = 1; float X[] = { 0.1f, 0.017f }; int incX = -1; float expected = 0.0f; float f; f = cblas_scasum(N, X, incX); gsl_test_rel(f, expected, flteps, "scasum(case 42)"); }; { int N = 1; double X[] = { -0.651, 0.079 }; int incX = -1; double expected = 0; double f; f = cblas_dzasum(N, X, incX); gsl_test_rel(f, expected, dbleps, "dzasum(case 43)"); }; { int N = 2; float X[] = { 0.899f, -0.72f }; int incX = 1; float expected = 1.619f; float f; f = cblas_sasum(N, X, incX); gsl_test_rel(f, expected, flteps, "sasum(case 44)"); }; { int N = 2; double X[] = { 0.271, -0.012 }; int incX = 1; double expected = 0.283; double f; f = cblas_dasum(N, X, incX); gsl_test_rel(f, expected, dbleps, "dasum(case 45)"); }; { int N = 2; float X[] = { -0.567f, -0.645f, 0.098f, 0.256f }; int incX = 1; float expected = 1.566f; float f; f = cblas_scasum(N, X, incX); gsl_test_rel(f, expected, flteps, "scasum(case 46)"); }; { int N = 2; double X[] = { -0.046, -0.671, -0.323, 0.785 }; int incX = 1; double expected = 1.825; double f; f = cblas_dzasum(N, X, incX); gsl_test_rel(f, expected, dbleps, "dzasum(case 47)"); }; { int N = 2; float X[] = { 0.169f, 0.833f }; int incX = -1; float expected = 0.0f; float f; f = cblas_sasum(N, X, incX); gsl_test_rel(f, expected, flteps, "sasum(case 48)"); }; { int N = 2; double X[] = { -0.586, -0.486 }; int incX = -1; double expected = 0; double f; f = cblas_dasum(N, X, incX); gsl_test_rel(f, expected, dbleps, "dasum(case 49)"); }; { int N = 2; float X[] = { -0.314f, -0.318f, -0.835f, -0.807f }; int incX = -1; float expected = 0.0f; float f; f = cblas_scasum(N, X, incX); gsl_test_rel(f, expected, flteps, "scasum(case 50)"); }; { int N = 2; double X[] = { -0.927, 0.152, -0.554, -0.844 }; int incX = -1; double expected = 0; double f; f = cblas_dzasum(N, X, incX); gsl_test_rel(f, expected, dbleps, "dzasum(case 51)"); }; } gsl/cblas/source_hemm.h0000644000175000017500000002050013536674414013472 0ustar eddedd/* blas/source_hemm.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j, k; INDEX n1, n2; int uplo, side; CHECK_ARGS13(HEMM,Order,Side,Uplo,M,N,alpha,A,lda,B,ldb,beta,C,ldc); { const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); const BASE beta_real = CONST_REAL0(beta); const BASE beta_imag = CONST_IMAG0(beta); if ((alpha_real == 0.0 && alpha_imag == 0.0) && (beta_real == 1.0 && beta_imag == 0.0)) return; if (Order == CblasRowMajor) { n1 = M; n2 = N; uplo = Uplo; side = Side; } else { n1 = N; n2 = M; uplo = (Uplo == CblasUpper) ? CblasLower : CblasUpper; side = (Side == CblasLeft) ? CblasRight : CblasLeft; } /* form y := beta*y */ if (beta_real == 0.0 && beta_imag == 0.0) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { REAL(C, ldc * i + j) = 0.0; IMAG(C, ldc * i + j) = 0.0; } } } else if (!(beta_real == 1.0 && beta_imag == 0.0)) { for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Cij_real = REAL(C, ldc * i + j); const BASE Cij_imag = IMAG(C, ldc * i + j); REAL(C, ldc * i + j) = beta_real * Cij_real - beta_imag * Cij_imag; IMAG(C, ldc * i + j) = beta_real * Cij_imag + beta_imag * Cij_real; } } } if (alpha_real == 0.0 && alpha_imag == 0.0) return; if (side == CblasLeft && uplo == CblasUpper) { /* form C := alpha*A*B + C */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = CONST_REAL(B, ldb * i + j); const BASE Bij_imag = CONST_IMAG(B, ldb * i + j); const BASE temp1_real = alpha_real * Bij_real - alpha_imag * Bij_imag; const BASE temp1_imag = alpha_real * Bij_imag + alpha_imag * Bij_real; BASE temp2_real = 0.0; BASE temp2_imag = 0.0; { const BASE Aii_real = CONST_REAL(A, i * lda + i); /* const BASE Aii_imag = 0.0; */ REAL(C, i * ldc + j) += temp1_real * Aii_real; IMAG(C, i * ldc + j) += temp1_imag * Aii_real; } for (k = i + 1; k < n1; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = CONST_IMAG(A, i * lda + k); const BASE Bkj_real = CONST_REAL(B, ldb * k + j); const BASE Bkj_imag = CONST_IMAG(B, ldb * k + j); REAL(C, k * ldc + j) += Aik_real * temp1_real - (-Aik_imag) * temp1_imag; IMAG(C, k * ldc + j) += Aik_real * temp1_imag + (-Aik_imag) * temp1_real; temp2_real += Aik_real * Bkj_real - Aik_imag * Bkj_imag; temp2_imag += Aik_real * Bkj_imag + Aik_imag * Bkj_real; } REAL(C, i * ldc + j) += alpha_real * temp2_real - alpha_imag * temp2_imag; IMAG(C, i * ldc + j) += alpha_real * temp2_imag + alpha_imag * temp2_real; } } } else if (side == CblasLeft && uplo == CblasLower) { /* form C := alpha*A*B + C */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = CONST_REAL(B, ldb * i + j); const BASE Bij_imag = CONST_IMAG(B, ldb * i + j); const BASE temp1_real = alpha_real * Bij_real - alpha_imag * Bij_imag; const BASE temp1_imag = alpha_real * Bij_imag + alpha_imag * Bij_real; BASE temp2_real = 0.0; BASE temp2_imag = 0.0; for (k = 0; k < i; k++) { const BASE Aik_real = CONST_REAL(A, i * lda + k); const BASE Aik_imag = CONST_IMAG(A, i * lda + k); const BASE Bkj_real = CONST_REAL(B, ldb * k + j); const BASE Bkj_imag = CONST_IMAG(B, ldb * k + j); REAL(C, k * ldc + j) += Aik_real * temp1_real - (-Aik_imag) * temp1_imag; IMAG(C, k * ldc + j) += Aik_real * temp1_imag + (-Aik_imag) * temp1_real; temp2_real += Aik_real * Bkj_real - Aik_imag * Bkj_imag; temp2_imag += Aik_real * Bkj_imag + Aik_imag * Bkj_real; } { const BASE Aii_real = CONST_REAL(A, i * lda + i); /* const BASE Aii_imag = 0.0; */ REAL(C, i * ldc + j) += temp1_real * Aii_real; IMAG(C, i * ldc + j) += temp1_imag * Aii_real; } REAL(C, i * ldc + j) += alpha_real * temp2_real - alpha_imag * temp2_imag; IMAG(C, i * ldc + j) += alpha_real * temp2_imag + alpha_imag * temp2_real; } } } else if (side == CblasRight && uplo == CblasUpper) { /* form C := alpha*B*A + C */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = CONST_REAL(B, ldb * i + j); const BASE Bij_imag = CONST_IMAG(B, ldb * i + j); const BASE temp1_real = alpha_real * Bij_real - alpha_imag * Bij_imag; const BASE temp1_imag = alpha_real * Bij_imag + alpha_imag * Bij_real; BASE temp2_real = 0.0; BASE temp2_imag = 0.0; { const BASE Ajj_real = CONST_REAL(A, j * lda + j); /* const BASE Ajj_imag = 0.0; */ REAL(C, i * ldc + j) += temp1_real * Ajj_real; IMAG(C, i * ldc + j) += temp1_imag * Ajj_real; } for (k = j + 1; k < n2; k++) { const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = CONST_IMAG(A, j * lda + k); const BASE Bik_real = CONST_REAL(B, ldb * i + k); const BASE Bik_imag = CONST_IMAG(B, ldb * i + k); REAL(C, i * ldc + k) += temp1_real * Ajk_real - temp1_imag * Ajk_imag; IMAG(C, i * ldc + k) += temp1_real * Ajk_imag + temp1_imag * Ajk_real; temp2_real += Bik_real * Ajk_real - Bik_imag * (-Ajk_imag); temp2_imag += Bik_real * (-Ajk_imag) + Bik_imag * Ajk_real; } REAL(C, i * ldc + j) += alpha_real * temp2_real - alpha_imag * temp2_imag; IMAG(C, i * ldc + j) += alpha_real * temp2_imag + alpha_imag * temp2_real; } } } else if (side == CblasRight && uplo == CblasLower) { /* form C := alpha*B*A + C */ for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { const BASE Bij_real = CONST_REAL(B, ldb * i + j); const BASE Bij_imag = CONST_IMAG(B, ldb * i + j); const BASE temp1_real = alpha_real * Bij_real - alpha_imag * Bij_imag; const BASE temp1_imag = alpha_real * Bij_imag + alpha_imag * Bij_real; BASE temp2_real = 0.0; BASE temp2_imag = 0.0; for (k = 0; k < j; k++) { const BASE Ajk_real = CONST_REAL(A, j * lda + k); const BASE Ajk_imag = CONST_IMAG(A, j * lda + k); const BASE Bik_real = CONST_REAL(B, ldb * i + k); const BASE Bik_imag = CONST_IMAG(B, ldb * i + k); REAL(C, i * ldc + k) += temp1_real * Ajk_real - temp1_imag * Ajk_imag; IMAG(C, i * ldc + k) += temp1_real * Ajk_imag + temp1_imag * Ajk_real; temp2_real += Bik_real * Ajk_real - Bik_imag * (-Ajk_imag); temp2_imag += Bik_real * (-Ajk_imag) + Bik_imag * Ajk_real; } { const BASE Ajj_real = CONST_REAL(A, j * lda + j); /* const BASE Ajj_imag = 0.0; */ REAL(C, i * ldc + j) += temp1_real * Ajj_real; IMAG(C, i * ldc + j) += temp1_imag * Ajj_real; } REAL(C, i * ldc + j) += alpha_real * temp2_real - alpha_imag * temp2_imag; IMAG(C, i * ldc + j) += alpha_real * temp2_imag + alpha_imag * temp2_real; } } } else { BLAS_ERROR("unrecognized operation"); } } } gsl/cblas/srotmg.c0000644000175000017500000000032413536674414012474 0ustar eddedd#include #include #include "cblas.h" void cblas_srotmg (float *d1, float *d2, float *b1, const float b2, float *P) { #define BASE float #include "source_rotmg.h" #undef BASE } gsl/cblas/test_nrm2.c0000644000175000017500000000527213536674414013105 0ustar eddedd#include #include #include #include #include "tests.h" void test_nrm2 (void) { const double flteps = 1e-4, dbleps = 1e-6; { int N = 1; float X[] = { 0.317f }; int incX = -1; float expected = 0.0f; float f; f = cblas_snrm2(N, X, incX); gsl_test_rel(f, expected, flteps, "snrm2(case 28)"); }; { int N = 1; double X[] = { 0.071 }; int incX = -1; double expected = 0; double f; f = cblas_dnrm2(N, X, incX); gsl_test_rel(f, expected, dbleps, "dnrm2(case 29)"); }; { int N = 1; float X[] = { 0.776f, 0.983f }; int incX = -1; float expected = 0.0f; float f; f = cblas_scnrm2(N, X, incX); gsl_test_rel(f, expected, flteps, "scnrm2(case 30)"); }; { int N = 1; double X[] = { 0.549, -0.354 }; int incX = -1; double expected = 0; double f; f = cblas_dznrm2(N, X, incX); gsl_test_rel(f, expected, dbleps, "dznrm2(case 31)"); }; { int N = 2; float X[] = { 0.14f, -0.632f }; int incX = 1; float expected = 0.647320631527f; float f; f = cblas_snrm2(N, X, incX); gsl_test_rel(f, expected, flteps, "snrm2(case 32)"); }; { int N = 2; double X[] = { 0.696, -0.804 }; int incX = 1; double expected = 1.06340584915; double f; f = cblas_dnrm2(N, X, incX); gsl_test_rel(f, expected, dbleps, "dnrm2(case 33)"); }; { int N = 2; float X[] = { 0.281f, -0.063f, 0.367f, 0.232f }; int incX = 1; float expected = 0.521001919382f; float f; f = cblas_scnrm2(N, X, incX); gsl_test_rel(f, expected, flteps, "scnrm2(case 34)"); }; { int N = 2; double X[] = { -0.359, -0.76, -0.906, -0.108 }; int incX = 1; double expected = 1.24055672986; double f; f = cblas_dznrm2(N, X, incX); gsl_test_rel(f, expected, dbleps, "dznrm2(case 35)"); }; { int N = 2; float X[] = { 0.918f, -0.126f }; int incX = -1; float expected = 0.0f; float f; f = cblas_snrm2(N, X, incX); gsl_test_rel(f, expected, flteps, "snrm2(case 36)"); }; { int N = 2; double X[] = { 0.217, -0.588 }; int incX = -1; double expected = 0; double f; f = cblas_dnrm2(N, X, incX); gsl_test_rel(f, expected, dbleps, "dnrm2(case 37)"); }; { int N = 2; float X[] = { 0.31f, 0.059f, -0.442f, 0.987f }; int incX = -1; float expected = 0.0f; float f; f = cblas_scnrm2(N, X, incX); gsl_test_rel(f, expected, flteps, "scnrm2(case 38)"); }; { int N = 2; double X[] = { 0.609, 0.615, -0.143, -0.957 }; int incX = -1; double expected = 0; double f; f = cblas_dznrm2(N, X, incX); gsl_test_rel(f, expected, dbleps, "dznrm2(case 39)"); }; } gsl/cblas/dgemv.c0000644000175000017500000000067313536674414012272 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dgemv (const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY) { #define BASE double #include "source_gemv_r.h" #undef BASE } gsl/cblas/test_copy.c0000644000175000017500000001103213536674414013170 0ustar eddedd#include #include #include #include #include "tests.h" void test_copy (void) { const double flteps = 1e-4, dbleps = 1e-6; { int N = 1; float X[] = { 0.898f }; int incX = 1; float Y[] = { 0.699f }; int incY = -1; float expected[] = { 0.898f }; cblas_scopy(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected[i], flteps, "scopy(case 76)"); } }; }; { int N = 1; double X[] = { 0.002 }; int incX = 1; double Y[] = { -0.921 }; int incY = -1; double expected[] = { 0.002 }; cblas_dcopy(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected[i], dbleps, "dcopy(case 77)"); } }; }; { int N = 1; float X[] = { -0.166f, 0.639f }; int incX = 1; float Y[] = { 0.863f, 0.613f }; int incY = -1; float expected[] = { -0.166f, 0.639f }; cblas_ccopy(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected[2*i], flteps, "ccopy(case 78) real"); gsl_test_rel(Y[2*i+1], expected[2*i+1], flteps, "ccopy(case 78) imag"); }; }; }; { int N = 1; double X[] = { 0.315, -0.324 }; int incX = 1; double Y[] = { -0.312, -0.748 }; int incY = -1; double expected[] = { 0.315, -0.324 }; cblas_zcopy(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected[2*i], dbleps, "zcopy(case 79) real"); gsl_test_rel(Y[2*i+1], expected[2*i+1], dbleps, "zcopy(case 79) imag"); }; }; }; { int N = 1; float X[] = { 0.222f }; int incX = -1; float Y[] = { 0.522f }; int incY = 1; float expected[] = { 0.222f }; cblas_scopy(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected[i], flteps, "scopy(case 80)"); } }; }; { int N = 1; double X[] = { 0.021 }; int incX = -1; double Y[] = { 0.898 }; int incY = 1; double expected[] = { 0.021 }; cblas_dcopy(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected[i], dbleps, "dcopy(case 81)"); } }; }; { int N = 1; float X[] = { 0.376f, 0.229f }; int incX = -1; float Y[] = { 0.143f, -0.955f }; int incY = 1; float expected[] = { 0.376f, 0.229f }; cblas_ccopy(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected[2*i], flteps, "ccopy(case 82) real"); gsl_test_rel(Y[2*i+1], expected[2*i+1], flteps, "ccopy(case 82) imag"); }; }; }; { int N = 1; double X[] = { -0.265, -0.84 }; int incX = -1; double Y[] = { -0.156, 0.939 }; int incY = 1; double expected[] = { -0.265, -0.84 }; cblas_zcopy(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected[2*i], dbleps, "zcopy(case 83) real"); gsl_test_rel(Y[2*i+1], expected[2*i+1], dbleps, "zcopy(case 83) imag"); }; }; }; { int N = 1; float X[] = { 0.074f }; int incX = -1; float Y[] = { -0.802f }; int incY = -1; float expected[] = { 0.074f }; cblas_scopy(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected[i], flteps, "scopy(case 84)"); } }; }; { int N = 1; double X[] = { -0.374 }; int incX = -1; double Y[] = { -0.161 }; int incY = -1; double expected[] = { -0.374 }; cblas_dcopy(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[i], expected[i], dbleps, "dcopy(case 85)"); } }; }; { int N = 1; float X[] = { 0.084f, 0.778f }; int incX = -1; float Y[] = { 0.31f, -0.797f }; int incY = -1; float expected[] = { 0.084f, 0.778f }; cblas_ccopy(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected[2*i], flteps, "ccopy(case 86) real"); gsl_test_rel(Y[2*i+1], expected[2*i+1], flteps, "ccopy(case 86) imag"); }; }; }; { int N = 1; double X[] = { 0.831, -0.282 }; int incX = -1; double Y[] = { -0.62, 0.32 }; int incY = -1; double expected[] = { 0.831, -0.282 }; cblas_zcopy(N, X, incX, Y, incY); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(Y[2*i], expected[2*i], dbleps, "zcopy(case 87) real"); gsl_test_rel(Y[2*i+1], expected[2*i+1], dbleps, "zcopy(case 87) imag"); }; }; }; } gsl/cblas/source_scal_c.h0000644000175000017500000000230613536674414013774 0ustar eddedd/* blas/source_scal_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i; INDEX ix = 0; const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); if (incX <= 0) { return; } for (i = 0; i < N; i++) { const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); REAL(X, ix) = x_real * alpha_real - x_imag * alpha_imag; IMAG(X, ix) = x_real * alpha_imag + x_imag * alpha_real; ix += incX; } } gsl/cblas/cscal.c0000644000175000017500000000032213536674414012244 0ustar eddedd#include #include #include "cblas.h" void cblas_cscal (const int N, const void *alpha, void *X, const int incX) { #define BASE float #include "source_scal_c.h" #undef BASE } gsl/cblas/source_her2.h0000644000175000017500000001065113536674414013412 0ustar eddedd/* blas/source_her2.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; const int conj = (order == CblasColMajor) ? -1 : 1; CHECK_ARGS10(CZ_HER2,order,Uplo,N,alpha,X,incX,Y,incY,A,lda); { const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); if (alpha_real == 0.0 && alpha_imag == 0.0) return; if ((order == CblasRowMajor && Uplo == CblasUpper) || (order == CblasColMajor && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { const BASE Xi_real = CONST_REAL(X, ix); const BASE Xi_imag = CONST_IMAG(X, ix); /* tmp1 = alpha Xi */ const BASE tmp1_real = alpha_real * Xi_real - alpha_imag * Xi_imag; const BASE tmp1_imag = alpha_imag * Xi_real + alpha_real * Xi_imag; const BASE Yi_real = CONST_REAL(Y, iy); const BASE Yi_imag = CONST_IMAG(Y, iy); /* tmp2 = conj(alpha) Yi */ const BASE tmp2_real = alpha_real * Yi_real + alpha_imag * Yi_imag; const BASE tmp2_imag = -alpha_imag * Yi_real + alpha_real * Yi_imag; INDEX jx = ix + incX; INDEX jy = iy + incY; /* Aij = alpha*Xi*conj(Yj) + conj(alpha)*Yi*conj(Xj) */ REAL(A, lda * i + i) += 2 * (tmp1_real * Yi_real + tmp1_imag * Yi_imag); IMAG(A, lda * i + i) = 0; for (j = i + 1; j < N; j++) { const BASE Xj_real = CONST_REAL(X, jx); const BASE Xj_imag = CONST_IMAG(X, jx); const BASE Yj_real = CONST_REAL(Y, jy); const BASE Yj_imag = CONST_IMAG(Y, jy); REAL(A, lda * i + j) += ((tmp1_real * Yj_real + tmp1_imag * Yj_imag) + (tmp2_real * Xj_real + tmp2_imag * Xj_imag)); IMAG(A, lda * i + j) += conj * ((tmp1_imag * Yj_real - tmp1_real * Yj_imag) + (tmp2_imag * Xj_real - tmp2_real * Xj_imag)); jx += incX; jy += incY; } ix += incX; iy += incY; } } else if ((order == CblasRowMajor && Uplo == CblasLower) || (order == CblasColMajor && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { const BASE Xi_real = CONST_REAL(X, ix); const BASE Xi_imag = CONST_IMAG(X, ix); const BASE tmp1_real = alpha_real * Xi_real - alpha_imag * Xi_imag; const BASE tmp1_imag = alpha_imag * Xi_real + alpha_real * Xi_imag; const BASE Yi_real = CONST_REAL(Y, iy); const BASE Yi_imag = CONST_IMAG(Y, iy); const BASE tmp2_real = alpha_real * Yi_real + alpha_imag * Yi_imag; const BASE tmp2_imag = -alpha_imag * Yi_real + alpha_real * Yi_imag; INDEX jx = OFFSET(N, incX); INDEX jy = OFFSET(N, incY); /* Aij = alpha*Xi*conj(Yj) + conj(alpha)*Yi*conj(Xj) */ for (j = 0; j < i; j++) { const BASE Xj_real = CONST_REAL(X, jx); const BASE Xj_imag = CONST_IMAG(X, jx); const BASE Yj_real = CONST_REAL(Y, jy); const BASE Yj_imag = CONST_IMAG(Y, jy); REAL(A, lda * i + j) += ((tmp1_real * Yj_real + tmp1_imag * Yj_imag) + (tmp2_real * Xj_real + tmp2_imag * Xj_imag)); IMAG(A, lda * i + j) += conj * ((tmp1_imag * Yj_real - tmp1_real * Yj_imag) + (tmp2_imag * Xj_real - tmp2_real * Xj_imag)); jx += incX; jy += incY; } REAL(A, lda * i + i) += 2 * (tmp1_real * Yi_real + tmp1_imag * Yi_imag); IMAG(A, lda * i + i) = 0; ix += incX; iy += incY; } } else { BLAS_ERROR("unrecognized operation"); } } } gsl/cblas/scasum.c0000644000175000017500000000030713536674414012455 0ustar eddedd#include #include #include "cblas.h" float cblas_scasum (const int N, const void *X, const int incX) { #define BASE float #include "source_asum_c.h" #undef BASE } gsl/cblas/zher2.c0000644000175000017500000000057613536674414012224 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_zher2 (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda) { #define BASE double #include "source_her2.h" #undef BASE } gsl/cblas/source_tbmv_r.h0000644000175000017500000000677313536674414014055 0ustar eddedd/* blas/source_tbmv_r.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; const int nonunit = (Diag == CblasNonUnit); const int Trans = (TransA != CblasConjTrans) ? TransA : CblasTrans; CHECK_ARGS10 (TBMV,order,Uplo,TransA,Diag,N,K,A,lda,X,incX); if (N == 0) return; if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasLower)) { /* form x := A*x */ INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { BASE temp = (nonunit ? A[lda * i + 0] : 1.0) * X[ix]; const INDEX j_min = i + 1; const INDEX j_max = GSL_MIN(N, i + K + 1); INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { temp += X[jx] * A[lda * i + (j - i)]; jx += incX; } X[ix] = temp; ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX) + (N - 1) * incX; for (i = N; i > 0 && i--;) { BASE temp = (nonunit ? A[lda * i + K] : 1.0) * X[ix]; const INDEX j_min = (i > K ? i - K : 0); const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { temp += X[jx] * A[lda * i + (K - i + j)]; jx += incX; } X[ix] = temp; ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasLower)) { /* form x := A'*x */ INDEX ix = OFFSET(N, incX) + (N - 1) * incX; for (i = N; i > 0 && i--;) { BASE temp = 0.0; const INDEX j_min = (K > i ? 0 : i - K); const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { temp += X[jx] * A[lda * j + (i - j)]; jx += incX; } if (nonunit) { X[ix] = temp + X[ix] * A[lda * i + 0]; } else { X[ix] += temp; } ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { BASE temp = 0.0; const INDEX j_min = i + 1; const INDEX j_max = GSL_MIN(N, i + K + 1); INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < j_max; j++) { temp += X[jx] * A[lda * j + (K - j + i)]; jx += incX; } if (nonunit) { X[ix] = temp + X[ix] * A[lda * i + K]; } else { X[ix] += temp; } ix += incX; } } } gsl/cblas/zaxpy.c0000644000175000017500000000037713536674414012344 0ustar eddedd#include #include #include "cblas.h" void cblas_zaxpy (const int N, const void *alpha, const void *X, const int incX, void *Y, const int incY) { #define BASE double #include "source_axpy_c.h" #undef BASE } gsl/cblas/ctpmv.c0000644000175000017500000000057613536674414012323 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_ctpmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *Ap, void *X, const int incX) { #define BASE float #include "source_tpmv_c.h" #undef BASE } gsl/cblas/test_tbmv.c0000644000175000017500000015104113536674414013173 0ustar eddedd#include #include #include #include #include "tests.h" void test_tbmv (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.439f, -0.484f, -0.952f, -0.508f, 0.381f, -0.889f, -0.192f, -0.279f, -0.155f }; float X[] = { -0.089f, -0.688f, -0.203f }; int incX = -1; float x_expected[] = { 0.017088f, 0.315595f, 0.243875f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 894)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.439f, -0.484f, -0.952f, -0.508f, 0.381f, -0.889f, -0.192f, -0.279f, -0.155f }; float X[] = { -0.089f, -0.688f, -0.203f }; int incX = -1; float x_expected[] = { -0.089f, -0.721909f, 0.129992f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 895)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.439f, -0.484f, -0.952f, -0.508f, 0.381f, -0.889f, -0.192f, -0.279f, -0.155f }; float X[] = { -0.089f, -0.688f, -0.203f }; int incX = -1; float x_expected[] = { 0.156927f, -0.159004f, 0.098252f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 896)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.439f, -0.484f, -0.952f, -0.508f, 0.381f, -0.889f, -0.192f, -0.279f, -0.155f }; float X[] = { -0.089f, -0.688f, -0.203f }; int incX = -1; float x_expected[] = { 0.043096f, -0.584876f, -0.203f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 897)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.439f, -0.484f, -0.952f, -0.508f, 0.381f, -0.889f, -0.192f, -0.279f, -0.155f }; float X[] = { -0.089f, -0.688f, -0.203f }; int incX = -1; float x_expected[] = { 0.024831f, -0.24504f, 0.447756f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 898)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.439f, -0.484f, -0.952f, -0.508f, 0.381f, -0.889f, -0.192f, -0.279f, -0.155f }; float X[] = { -0.089f, -0.688f, -0.203f }; int incX = -1; float x_expected[] = { -0.089f, -0.670912f, 0.146504f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 899)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.439f, -0.484f, -0.952f, -0.508f, 0.381f, -0.889f, -0.192f, -0.279f, -0.155f }; float X[] = { -0.089f, -0.688f, -0.203f }; int incX = -1; float x_expected[] = { -0.24504f, 0.447756f, -0.089117f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 900)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.439f, -0.484f, -0.952f, -0.508f, 0.381f, -0.889f, -0.192f, -0.279f, -0.155f }; float X[] = { -0.089f, -0.688f, -0.203f }; int incX = -1; float x_expected[] = { -0.351128f, -0.589748f, -0.203f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 901)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.94f, -0.091f, 0.984f, -0.276f, -0.342f, -0.484f, -0.665f, -0.2f, 0.349f }; float X[] = { 0.023f, -0.501f, -0.562f }; int incX = -1; float x_expected[] = { 0.156047f, 0.189418f, -0.52828f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 902)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.94f, -0.091f, 0.984f, -0.276f, -0.342f, -0.484f, -0.665f, -0.2f, 0.349f }; float X[] = { 0.023f, -0.501f, -0.562f }; int incX = -1; float x_expected[] = { 0.194342f, -0.449858f, -0.562f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 903)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.94f, -0.091f, 0.984f, -0.276f, -0.342f, -0.484f, -0.665f, -0.2f, 0.349f }; float X[] = { 0.023f, -0.501f, -0.562f }; int incX = -1; float x_expected[] = { -0.0046f, 0.156047f, 0.189418f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 904)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.94f, -0.091f, 0.984f, -0.276f, -0.342f, -0.484f, -0.665f, -0.2f, 0.349f }; float X[] = { 0.023f, -0.501f, -0.562f }; int incX = -1; float x_expected[] = { 0.023f, -0.516295f, -0.423724f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 905)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.94f, -0.091f, 0.984f, -0.276f, -0.342f, -0.484f, -0.665f, -0.2f, 0.349f }; float X[] = { 0.023f, -0.501f, -0.562f }; int incX = -1; float x_expected[] = { 0.328565f, 0.326454f, 0.051142f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 906)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.94f, -0.091f, 0.984f, -0.276f, -0.342f, -0.484f, -0.665f, -0.2f, 0.349f }; float X[] = { 0.023f, -0.501f, -0.562f }; int incX = -1; float x_expected[] = { 0.356165f, -0.345888f, -0.562f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 907)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.94f, -0.091f, 0.984f, -0.276f, -0.342f, -0.484f, -0.665f, -0.2f, 0.349f }; float X[] = { 0.023f, -0.501f, -0.562f }; int incX = -1; float x_expected[] = { -0.015295f, 0.13041f, -0.482689f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 908)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.94f, -0.091f, 0.984f, -0.276f, -0.342f, -0.484f, -0.665f, -0.2f, 0.349f }; float X[] = { 0.023f, -0.501f, -0.562f }; int incX = -1; float x_expected[] = { 0.023f, -0.508866f, -0.516409f }; cblas_stbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], flteps, "stbmv(case 909)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.566, 0.955, -0.086, -0.856, 0.177, 0.974, -0.652, -0.884, 0.77 }; double X[] = { -0.77, -0.818, 0.337 }; int incX = -1; double x_expected[] = { 0.50204, 0.563918, -0.590448 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 910)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.566, 0.955, -0.086, -0.856, 0.177, 0.974, -0.652, -0.884, 0.77 }; double X[] = { -0.77, -0.818, 0.337 }; int incX = -1; double x_expected[] = { -0.77, -0.95429, -0.44419 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 911)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.566, 0.955, -0.086, -0.856, 0.177, 0.974, -0.652, -0.884, 0.77 }; double X[] = { -0.77, -0.818, 0.337 }; int incX = -1; double x_expected[] = { 1.214016, -0.433258, 0.321835 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 912)"); } }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.566, 0.955, -0.086, -0.856, 0.177, 0.974, -0.652, -0.884, 0.77 }; double X[] = { -0.77, -0.818, 0.337 }; int incX = -1; double x_expected[] = { -0.236664, -1.106472, 0.337 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 913)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.566, 0.955, -0.086, -0.856, 0.177, 0.974, -0.652, -0.884, 0.77 }; double X[] = { -0.77, -0.818, 0.337 }; int incX = -1; double x_expected[] = { 0.68068, 0.357254, 1.022043 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 914)"); } }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.566, 0.955, -0.086, -0.856, 0.177, 0.974, -0.652, -0.884, 0.77 }; double X[] = { -0.77, -0.818, 0.337 }; int incX = -1; double x_expected[] = { -0.77, -0.31596, 1.037208 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 915)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.566, 0.955, -0.086, -0.856, 0.177, 0.974, -0.652, -0.884, 0.77 }; double X[] = { -0.77, -0.818, 0.337 }; int incX = -1; double x_expected[] = { 0.357254, 1.022043, 0.190742 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 916)"); } }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.566, 0.955, -0.086, -0.856, 0.177, 0.974, -0.652, -0.884, 0.77 }; double X[] = { -0.77, -0.818, 0.337 }; int incX = -1; double x_expected[] = { -0.914786, -0.496165, 0.337 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 917)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.188, 0.6, -0.743, -0.803, 0.449, -0.681, -0.464, -0.029, 0.553 }; double X[] = { -0.851, 0.481, 0.155 }; int incX = -1; double x_expected[] = { 0.610833, -0.293243, 0.02914 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 918)"); } }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.188, 0.6, -0.743, -0.803, 0.449, -0.681, -0.464, -0.029, 0.553 }; double X[] = { -0.851, 0.481, 0.155 }; int incX = -1; double x_expected[] = { -0.635031, 0.574, 0.155 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 919)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.188, 0.6, -0.743, -0.803, 0.449, -0.681, -0.464, -0.029, 0.553 }; double X[] = { -0.851, 0.481, 0.155 }; int incX = -1; double x_expected[] = { 0.024679, 0.610833, -0.293243 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 920)"); } }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.188, 0.6, -0.743, -0.803, 0.449, -0.681, -0.464, -0.029, 0.553 }; double X[] = { -0.851, 0.481, 0.155 }; int incX = -1; double x_expected[] = { -0.851, 0.875864, -0.231243 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 921)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.188, 0.6, -0.743, -0.803, 0.449, -0.681, -0.464, -0.029, 0.553 }; double X[] = { -0.851, 0.481, 0.155 }; int incX = -1; double x_expected[] = { -0.198505, 0.091504, 0.093 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 922)"); } }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.188, 0.6, -0.743, -0.803, 0.449, -0.681, -0.464, -0.029, 0.553 }; double X[] = { -0.851, 0.481, 0.155 }; int incX = -1; double x_expected[] = { -1.074184, 0.356535, 0.155 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 923)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.188, 0.6, -0.743, -0.803, 0.449, -0.681, -0.464, -0.029, 0.553 }; double X[] = { -0.851, 0.481, 0.155 }; int incX = -1; double x_expected[] = { 0.394864, -0.768342, 0.31774 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 924)"); } }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.188, 0.6, -0.743, -0.803, 0.449, -0.681, -0.464, -0.029, 0.553 }; double X[] = { -0.851, 0.481, 0.155 }; int incX = -1; double x_expected[] = { -0.851, 0.098901, 0.4436 }; cblas_dtbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[i], x_expected[i], dbleps, "dtbmv(case 925)"); } }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.824f, -0.45f, -0.987f, 0.758f, 0.42f, -0.357f, 0.147f, -0.191f, 0.88f, 0.63f, 0.155f, -0.573f, 0.224f, 0.146f, 0.501f, -0.889f, 0.456f, 0.796f }; float X[] = { -0.46f, 0.069f, 0.308f, -0.003f, -0.236f, 0.605f }; int incX = -1; float x_expected[] = { -0.113114f, -0.051704f, -0.403567f, -0.288349f, -0.223936f, 0.841145f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 926) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 926) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.824f, -0.45f, -0.987f, 0.758f, 0.42f, -0.357f, 0.147f, -0.191f, 0.88f, 0.63f, 0.155f, -0.573f, 0.224f, 0.146f, 0.501f, -0.889f, 0.456f, 0.796f }; float X[] = { -0.46f, 0.069f, 0.308f, -0.003f, -0.236f, 0.605f }; int incX = -1; float x_expected[] = { -0.46f, 0.069f, -0.14027f, -0.23208f, -0.537722f, 0.841425f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 927) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 927) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.824f, -0.45f, -0.987f, 0.758f, 0.42f, -0.357f, 0.147f, -0.191f, 0.88f, 0.63f, 0.155f, -0.573f, 0.224f, 0.146f, 0.501f, -0.889f, 0.456f, 0.796f }; float X[] = { -0.46f, 0.069f, 0.308f, -0.003f, -0.236f, 0.605f }; int incX = -1; float x_expected[] = { -0.099689f, 0.487805f, 0.353793f, 0.325411f, -0.225658f, -0.776023f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 928) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 928) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.824f, -0.45f, -0.987f, 0.758f, 0.42f, -0.357f, 0.147f, -0.191f, 0.88f, 0.63f, 0.155f, -0.573f, 0.224f, 0.146f, 0.501f, -0.889f, 0.456f, 0.796f }; float X[] = { -0.46f, 0.069f, 0.308f, -0.003f, -0.236f, 0.605f }; int incX = -1; float x_expected[] = { -0.39057f, 0.113296f, 0.388863f, 0.131011f, -0.236f, 0.605f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 929) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 929) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.824f, -0.45f, -0.987f, 0.758f, 0.42f, -0.357f, 0.147f, -0.191f, 0.88f, 0.63f, 0.155f, -0.573f, 0.224f, 0.146f, 0.501f, -0.889f, 0.456f, 0.796f }; float X[] = { -0.46f, 0.069f, 0.308f, -0.003f, -0.236f, 0.605f }; int incX = -1; float x_expected[] = { -0.169119f, 0.443509f, 0.159816f, 0.139696f, -0.180955f, -0.835292f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 930) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 930) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.824f, -0.45f, -0.987f, 0.758f, 0.42f, -0.357f, 0.147f, -0.191f, 0.88f, 0.63f, 0.155f, -0.573f, 0.224f, 0.146f, 0.501f, -0.889f, 0.456f, 0.796f }; float X[] = { -0.46f, 0.069f, 0.308f, -0.003f, -0.236f, 0.605f }; int incX = -1; float x_expected[] = { -0.46f, 0.069f, 0.194886f, -0.054704f, -0.191297f, 0.545731f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 931) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 931) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { 0.824f, -0.45f, -0.987f, 0.758f, 0.42f, -0.357f, 0.147f, -0.191f, 0.88f, 0.63f, 0.155f, -0.573f, 0.224f, 0.146f, 0.501f, -0.889f, 0.456f, 0.796f }; float X[] = { -0.46f, 0.069f, 0.308f, -0.003f, -0.236f, 0.605f }; int incX = -1; float x_expected[] = { 0.159816f, 0.139696f, -0.180955f, -0.835292f, 0.077786f, 0.60472f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 932) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 932) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { 0.824f, -0.45f, -0.987f, 0.758f, 0.42f, -0.357f, 0.147f, -0.191f, 0.88f, 0.63f, 0.155f, -0.573f, 0.224f, 0.146f, 0.501f, -0.889f, 0.456f, 0.796f }; float X[] = { -0.46f, 0.069f, 0.308f, -0.003f, -0.236f, 0.605f }; int incX = -1; float x_expected[] = { -0.18707f, 0.2604f, 0.082342f, -0.779023f, -0.236f, 0.605f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 933) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 933) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.814f, 0.043f, -0.755f, -0.094f, 0.876f, 0.257f, 0.406f, 0.491f, -0.27f, -0.787f, 0.545f, 0.732f, -0.512f, -0.085f, 0.234f, 0.001f, -0.225f, -0.002f }; float X[] = { 0.411f, -0.308f, -0.912f, 0.811f, -0.894f, -0.116f }; int incX = -1; float x_expected[] = { 0.647885f, 0.621535f, -0.104407f, 0.05309f, 0.732704f, 0.055982f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 934) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 934) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.814f, 0.043f, -0.755f, -0.094f, 0.876f, 0.257f, 0.406f, 0.491f, -0.27f, -0.787f, 0.545f, 0.732f, -0.512f, -0.085f, 0.234f, 0.001f, -0.225f, -0.002f }; float X[] = { 0.411f, -0.308f, -0.912f, 0.811f, -0.894f, -0.116f }; int incX = -1; float x_expected[] = { 1.2955f, 0.190774f, -0.247934f, 0.982616f, -0.894f, -0.116f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 935) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 935) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.814f, 0.043f, -0.755f, -0.094f, 0.876f, 0.257f, 0.406f, 0.491f, -0.27f, -0.787f, 0.545f, 0.732f, -0.512f, -0.085f, 0.234f, 0.001f, -0.225f, -0.002f }; float X[] = { 0.411f, -0.308f, -0.912f, 0.811f, -0.894f, -0.116f }; int incX = -1; float x_expected[] = { 0.096482f, -0.071661f, 0.647885f, 0.621535f, -0.104407f, 0.05309f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 936) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 936) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.814f, 0.043f, -0.755f, -0.094f, 0.876f, 0.257f, 0.406f, 0.491f, -0.27f, -0.787f, 0.545f, 0.732f, -0.512f, -0.085f, 0.234f, 0.001f, -0.225f, -0.002f }; float X[] = { 0.411f, -0.308f, -0.912f, 0.811f, -0.894f, -0.116f }; int incX = -1; float x_expected[] = { 0.411f, -0.308f, -1.14861f, 0.933761f, -1.66247f, -0.234526f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 937) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 937) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.814f, 0.043f, -0.755f, -0.094f, 0.876f, 0.257f, 0.406f, 0.491f, -0.27f, -0.787f, 0.545f, 0.732f, -0.512f, -0.085f, 0.234f, 0.001f, -0.225f, -0.002f }; float X[] = { 0.411f, -0.308f, -0.912f, 0.811f, -0.894f, -0.116f }; int incX = -1; float x_expected[] = { 0.632361f, -0.409373f, 0.578489f, 0.012724f, 0.664066f, 0.171616f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 938) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 938) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.814f, 0.043f, -0.755f, -0.094f, 0.876f, 0.257f, 0.406f, 0.491f, -0.27f, -0.787f, 0.545f, 0.732f, -0.512f, -0.085f, 0.234f, 0.001f, -0.225f, -0.002f }; float X[] = { 0.411f, -0.308f, -0.912f, 0.811f, -0.894f, -0.116f }; int incX = -1; float x_expected[] = { 0.946879f, -0.645712f, -1.21801f, 0.32495f, -0.894f, -0.116f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 939) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 939) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.814f, 0.043f, -0.755f, -0.094f, 0.876f, 0.257f, 0.406f, 0.491f, -0.27f, -0.787f, 0.545f, 0.732f, -0.512f, -0.085f, 0.234f, 0.001f, -0.225f, -0.002f }; float X[] = { 0.411f, -0.308f, -0.912f, 0.811f, -0.894f, -0.116f }; int incX = -1; float x_expected[] = { -0.236612f, 0.122761f, -1.12184f, -0.358823f, 1.4975f, -0.470595f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 940) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 940) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.814f, 0.043f, -0.755f, -0.094f, 0.876f, 0.257f, 0.406f, 0.491f, -0.27f, -0.787f, 0.545f, 0.732f, -0.512f, -0.085f, 0.234f, 0.001f, -0.225f, -0.002f }; float X[] = { 0.411f, -0.308f, -0.912f, 0.811f, -0.894f, -0.116f }; int incX = -1; float x_expected[] = { 0.411f, -0.308f, -1.26537f, 0.570703f, -0.129206f, -0.642577f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 941) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 941) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.675f, 0.047f, 0.695f, 0.724f, -0.438f, 0.991f, -0.188f, -0.06f, -0.093f, 0.302f, 0.842f, -0.753f, 0.465f, -0.972f, -0.058f, 0.988f, 0.093f, 0.164f }; float X[] = { 0.065f, -0.082f, -0.746f, 0.775f, 0.694f, -0.954f }; int incX = -1; float x_expected[] = { 0.413357f, 0.178267f, -0.114618f, -1.35595f, -0.513288f, 0.611332f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 942) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 942) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.675f, 0.047f, 0.695f, 0.724f, -0.438f, 0.991f, -0.188f, -0.06f, -0.093f, 0.302f, 0.842f, -0.753f, 0.465f, -0.972f, -0.058f, 0.988f, 0.093f, 0.164f }; float X[] = { 0.065f, -0.082f, -0.746f, 0.775f, 0.694f, -0.954f }; int incX = -1; float x_expected[] = { 0.368428f, 0.071217f, -0.954366f, -0.390486f, 0.694f, -0.954f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 943) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 943) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.675f, 0.047f, 0.695f, 0.724f, -0.438f, 0.991f, -0.188f, -0.06f, -0.093f, 0.302f, 0.842f, -0.753f, 0.465f, -0.972f, -0.058f, 0.988f, 0.093f, 0.164f }; float X[] = { 0.065f, -0.082f, -0.746f, 0.775f, 0.694f, -0.954f }; int incX = -1; float x_expected[] = { -0.084786f, -0.059464f, 0.413357f, 0.178267f, -0.114618f, -1.35595f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 944) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 944) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.675f, 0.047f, 0.695f, 0.724f, -0.438f, 0.991f, -0.188f, -0.06f, -0.093f, 0.302f, 0.842f, -0.753f, 0.465f, -0.972f, -0.058f, 0.988f, 0.093f, 0.164f }; float X[] = { 0.065f, -0.082f, -0.746f, 0.775f, 0.694f, -0.954f }; int incX = -1; float x_expected[] = { 0.065f, -0.082f, -0.636071f, 0.80005f, 0.787748f, -1.14446f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 945) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 945) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.675f, 0.047f, 0.695f, 0.724f, -0.438f, 0.991f, -0.188f, -0.06f, -0.093f, 0.302f, 0.842f, -0.753f, 0.465f, -0.972f, -0.058f, 0.988f, 0.093f, 0.164f }; float X[] = { 0.065f, -0.082f, -0.746f, 0.775f, 0.694f, -0.954f }; int incX = -1; float x_expected[] = { -1.18498f, -0.424201f, 0.230196f, 0.374209f, -0.208366f, -1.16549f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 946) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 946) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.675f, 0.047f, 0.695f, 0.724f, -0.438f, 0.991f, -0.188f, -0.06f, -0.093f, 0.302f, 0.842f, -0.753f, 0.465f, -0.972f, -0.058f, 0.988f, 0.093f, 0.164f }; float X[] = { 0.065f, -0.082f, -0.746f, 0.775f, 0.694f, -0.954f }; int incX = -1; float x_expected[] = { -1.03519f, -0.446737f, -0.819232f, 0.995992f, 0.694f, -0.954f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 947) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 947) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; float A[] = { -0.675f, 0.047f, 0.695f, 0.724f, -0.438f, 0.991f, -0.188f, -0.06f, -0.093f, 0.302f, 0.842f, -0.753f, 0.465f, -0.972f, -0.058f, 0.988f, 0.093f, 0.164f }; float X[] = { 0.065f, -0.082f, -0.746f, 0.775f, 0.694f, -0.954f }; int incX = -1; float x_expected[] = { 0.109929f, 0.02505f, 0.062939f, -0.202464f, -0.470658f, 1.69006f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 948) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 948) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; float A[] = { -0.675f, 0.047f, 0.695f, 0.724f, -0.438f, 0.991f, -0.188f, -0.06f, -0.093f, 0.302f, 0.842f, -0.753f, 0.465f, -0.972f, -0.058f, 0.988f, 0.093f, 0.164f }; float X[] = { 0.065f, -0.082f, -0.746f, 0.775f, 0.694f, -0.954f }; int incX = -1; float x_expected[] = { 0.065f, -0.082f, -0.776809f, 0.762996f, 0.73663f, 0.124729f }; cblas_ctbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], flteps, "ctbmv(case 949) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], flteps, "ctbmv(case 949) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.212, 0.612, 0.189, -0.046, -0.124, 0.82, 0.753, 0.727, 0.331, 0.116, 0.504, -0.673, -0.888, -0.277, -0.361, -0.909, 0.982, -0.124 }; double X[] = { 0.064, 0.169, -0.81, -0.779, -0.641, -0.103 }; int incX = -1; double x_expected[] = { -0.010019, -0.1678, -0.042017, -1.112094, 0.010004, -0.480427 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 950) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 950) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.212, 0.612, 0.189, -0.046, -0.124, 0.82, 0.753, 0.727, 0.331, 0.116, 0.504, -0.673, -0.888, -0.277, -0.361, -0.909, 0.982, -0.124 }; double X[] = { 0.064, 0.169, -0.81, -0.779, -0.641, -0.103 }; int incX = -1; double x_expected[] = { 0.064, 0.169, -0.80842, -0.715637, -0.829924, -0.212971 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 951) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 951) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.212, 0.612, 0.189, -0.046, -0.124, 0.82, 0.753, 0.727, 0.331, 0.116, 0.504, -0.673, -0.888, -0.277, -0.361, -0.909, 0.982, -0.124 }; double X[] = { 0.064, 0.169, -0.81, -0.779, -0.641, -0.103 }; int incX = -1; double x_expected[] = { 0.634014, 0.796937, -0.585538, -0.895375, -0.125887, 0.010019 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 952) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 952) imag"); }; }; }; { int order = 101; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.212, 0.612, 0.189, -0.046, -0.124, 0.82, 0.753, 0.727, 0.331, 0.116, 0.504, -0.673, -0.888, -0.277, -0.361, -0.909, 0.982, -0.124 }; double X[] = { 0.064, 0.169, -0.81, -0.779, -0.641, -0.103 }; int incX = -1; double x_expected[] = { 0.567497, 1.085122, -1.217792, -1.322566, -0.641, -0.103 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 953) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 953) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.212, 0.612, 0.189, -0.046, -0.124, 0.82, 0.753, 0.727, 0.331, 0.116, 0.504, -0.673, -0.888, -0.277, -0.361, -0.909, 0.982, -0.124 }; double X[] = { 0.064, 0.169, -0.81, -0.779, -0.641, -0.103 }; int incX = -1; double x_expected[] = { 0.130517, -0.119185, -0.187765, -0.519609, -0.169484, -1.165438 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 954) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 954) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.212, 0.612, 0.189, -0.046, -0.124, 0.82, 0.753, 0.727, 0.331, 0.116, 0.504, -0.673, -0.888, -0.277, -0.361, -0.909, 0.982, -0.124 }; double X[] = { 0.064, 0.169, -0.81, -0.779, -0.641, -0.103 }; int incX = -1; double x_expected[] = { 0.064, 0.169, -0.820019, -0.9468, -0.684597, -1.278457 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 955) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 955) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.212, 0.612, 0.189, -0.046, -0.124, 0.82, 0.753, 0.727, 0.331, 0.116, 0.504, -0.673, -0.888, -0.277, -0.361, -0.909, 0.982, -0.124 }; double X[] = { 0.064, 0.169, -0.81, -0.779, -0.641, -0.103 }; int incX = -1; double x_expected[] = { -0.187765, -0.519609, -0.169484, -1.165438, 0.198928, -0.370456 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 956) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 956) imag"); }; }; }; { int order = 102; int trans = 111; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.212, 0.612, 0.189, -0.046, -0.124, 0.82, 0.753, 0.727, 0.331, 0.116, 0.504, -0.673, -0.888, -0.277, -0.361, -0.909, 0.982, -0.124 }; double X[] = { 0.064, 0.169, -0.81, -0.779, -0.641, -0.103 }; int incX = -1; double x_expected[] = { -0.113746, -0.182809, -0.935887, -0.768981, -0.641, -0.103 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 957) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 957) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.374, -0.308, 0.792, 0.884, -0.794, -0.055, -0.281, 0.527, 0.246, 0.762, 0.853, 0.891, -0.231, 0.384, 0.373, -0.717, -0.957, -0.338 }; double X[] = { 0.884, 0.636, 0.921, 0.282, -0.649, 0.188 }; int incX = -1; double x_expected[] = { -0.436746, 0.963714, -1.087615, -0.018695, 0.30063, 0.12958 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 958) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 958) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.374, -0.308, 0.792, 0.884, -0.794, -0.055, -0.281, 0.527, 0.246, 0.762, 0.853, 0.891, -0.231, 0.384, 0.373, -0.717, -0.957, -0.338 }; double X[] = { 0.884, 0.636, 0.921, 0.282, -0.649, 0.188 }; int incX = -1; double x_expected[] = { 0.895682, 1.407174, 0.2408, -0.14282, -0.649, 0.188 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 959) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 959) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.374, -0.308, 0.792, 0.884, -0.794, -0.055, -0.281, 0.527, 0.246, 0.762, 0.853, 0.891, -0.231, 0.384, 0.373, -0.717, -0.957, -0.338 }; double X[] = { 0.884, 0.636, 0.921, 0.282, -0.649, 0.188 }; int incX = -1; double x_expected[] = { 0.785744, -0.3966, -0.436746, 0.963714, -1.087615, -0.018695 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 960) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 960) imag"); }; }; }; { int order = 101; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.374, -0.308, 0.792, 0.884, -0.794, -0.055, -0.281, 0.527, 0.246, 0.762, 0.853, 0.891, -0.231, 0.384, 0.373, -0.717, -0.957, -0.338 }; double X[] = { 0.884, 0.636, 0.921, 0.282, -0.649, 0.188 }; int incX = -1; double x_expected[] = { 0.884, 0.636, 0.472572, 0.47454, -1.056415, 0.594125 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 961) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 961) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.374, -0.308, 0.792, 0.884, -0.794, -0.055, -0.281, 0.527, 0.246, 0.762, 0.853, 0.891, -0.231, 0.384, 0.373, -0.717, -0.957, -0.338 }; double X[] = { 0.884, 0.636, 0.921, 0.282, -0.649, 0.188 }; int incX = -1; double x_expected[] = { 0.464705, -0.108078, 0.094975, 0.376323, -0.6802, -0.42482 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 962) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 962) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.374, -0.308, 0.792, 0.884, -0.794, -0.055, -0.281, 0.527, 0.246, 0.762, 0.853, 0.891, -0.231, 0.384, 0.373, -0.717, -0.957, -0.338 }; double X[] = { 0.884, 0.636, 0.921, 0.282, -0.649, 0.188 }; int incX = -1; double x_expected[] = { 0.562961, 0.924522, 1.004293, -0.112851, -0.649, 0.188 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 963) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 963) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { -0.374, -0.308, 0.792, 0.884, -0.794, -0.055, -0.281, 0.527, 0.246, 0.762, 0.853, 0.891, -0.231, 0.384, 0.373, -0.717, -0.957, -0.338 }; double X[] = { 0.884, 0.636, 0.921, 0.282, -0.649, 0.188 }; int incX = -1; double x_expected[] = { -0.448428, 0.19254, -0.674583, 1.236189, 0.780774, 1.167088 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 964) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 964) imag"); }; }; }; { int order = 102; int trans = 112; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { -0.374, -0.308, 0.792, 0.884, -0.794, -0.055, -0.281, 0.527, 0.246, 0.762, 0.853, 0.891, -0.231, 0.384, 0.373, -0.717, -0.957, -0.338 }; double X[] = { 0.884, 0.636, 0.921, 0.282, -0.649, 0.188 }; int incX = -1; double x_expected[] = { 0.884, 0.636, 0.653832, 1.112064, -0.168856, 1.225508 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 965) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 965) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.002, 0.95, -0.363, 0.084, -0.646, 0.816, -0.407, 0.099, -0.02, -0.906, -0.874, 0.191, -0.328, -0.968, 0.79, 0.826, -0.795, 0.277 }; double X[] = { -0.591, -0.084, 0.707, 0.945, 0.326, 0.428 }; int incX = -1; double x_expected[] = { -0.59515, 0.077106, -0.27658, -0.637356, 0.407252, -0.308844 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 966) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 966) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.002, 0.95, -0.363, 0.084, -0.646, 0.816, -0.407, 0.099, -0.02, -0.906, -0.874, 0.191, -0.328, -0.968, 0.79, 0.826, -0.795, 0.277 }; double X[] = { -0.591, -0.084, 0.707, 0.945, 0.326, 0.428 }; int incX = -1; double x_expected[] = { -1.46131, 0.537642, 0.624614, 0.762252, 0.326, 0.428 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 967) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 967) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.002, 0.95, -0.363, 0.084, -0.646, 0.816, -0.407, 0.099, -0.02, -0.906, -0.874, 0.191, -0.328, -0.968, 0.79, 0.826, -0.795, 0.277 }; double X[] = { -0.591, -0.084, 0.707, 0.945, 0.326, 0.428 }; int incX = -1; double x_expected[] = { -0.536274, 0.421806, -0.59515, 0.077106, -0.27658, -0.637356 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 968) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 968) imag"); }; }; }; { int order = 101; int trans = 113; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.002, 0.95, -0.363, 0.084, -0.646, 0.816, -0.407, 0.099, -0.02, -0.906, -0.874, 0.191, -0.328, -0.968, 0.79, 0.826, -0.795, 0.277 }; double X[] = { -0.591, -0.084, 0.707, 0.945, 0.326, 0.428 }; int incX = -1; double x_expected[] = { -0.591, -0.084, 0.98216, 0.400464, 0.131806, -0.026608 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 969) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 969) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.002, 0.95, -0.363, 0.084, -0.646, 0.816, -0.407, 0.099, -0.02, -0.906, -0.874, 0.191, -0.328, -0.968, 0.79, 0.826, -0.795, 0.277 }; double X[] = { -0.591, -0.084, 0.707, 0.945, 0.326, 0.428 }; int incX = -1; double x_expected[] = { -1.68293, 0.796222, -0.96062, 0.415172, -0.082386, -0.182748 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 970) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 970) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 121; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.002, 0.95, -0.363, 0.084, -0.646, 0.816, -0.407, 0.099, -0.02, -0.906, -0.874, 0.191, -0.328, -0.968, 0.79, 0.826, -0.795, 0.277 }; double X[] = { -0.591, -0.084, 0.707, 0.945, 0.326, 0.428 }; int incX = -1; double x_expected[] = { -1.737656, 0.290416, 0.61669, 0.73853, 0.326, 0.428 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 971) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 971) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 131; int N = 3; int K = 1; int lda = 3; double A[] = { 0.002, 0.95, -0.363, 0.084, -0.646, 0.816, -0.407, 0.099, -0.02, -0.906, -0.874, 0.191, -0.328, -0.968, 0.79, 0.826, -0.795, 0.277 }; double X[] = { -0.591, -0.084, 0.707, 0.945, 0.326, 0.428 }; int incX = -1; double x_expected[] = { 0.27516, -0.544536, -0.10627, -0.988374, 0.229991, -0.711267 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 972) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 972) imag"); }; }; }; { int order = 102; int trans = 113; int uplo = 122; int diag = 132; int N = 3; int K = 1; int lda = 3; double A[] = { 0.002, 0.95, -0.363, 0.084, -0.646, 0.816, -0.407, 0.099, -0.02, -0.906, -0.874, 0.191, -0.328, -0.968, 0.79, 0.826, -0.795, 0.277 }; double X[] = { -0.591, -0.084, 0.707, 0.945, 0.326, 0.428 }; int incX = -1; double x_expected[] = { -0.591, -0.084, 0.794924, 0.411234, 0.148739, 0.025577 }; cblas_ztbmv(order, uplo, trans, diag, N, K, A, lda, X, incX); { int i; for (i = 0; i < 3; i++) { gsl_test_rel(X[2*i], x_expected[2*i], dbleps, "ztbmv(case 973) real"); gsl_test_rel(X[2*i+1], x_expected[2*i+1], dbleps, "ztbmv(case 973) imag"); }; }; }; } gsl/cblas/strmv.c0000644000175000017500000000063313536674414012337 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_strmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const float *A, const int lda, float *X, const int incX) { #define BASE float #include "source_trmv_r.h" #undef BASE } gsl/cblas/dswap.c0000644000175000017500000000035213536674414012300 0ustar eddedd#include #include #include "cblas.h" void cblas_dswap (const int N, double *X, const int incX, double *Y, const int incY) { #define BASE double #include "source_swap_r.h" #undef BASE } gsl/cblas/sswap.c0000644000175000017500000000033213536674414012315 0ustar eddedd#include #include #include "cblas.h" void cblas_sswap (const int N, float *X, const int incX, float *Y, const int incY) { #define BASE float #include "source_swap_r.h" #undef BASE } gsl/cblas/ztrmv.c0000644000175000017500000000063213536674414012345 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_ztrmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *A, const int lda, void *X, const int incX) { #define BASE double #include "source_trmv_c.h" #undef BASE } gsl/cblas/test_amax.c0000644000175000017500000000466113536674414013156 0ustar eddedd#include #include #include #include #include "tests.h" void test_amax (void) { { int N = 1; float X[] = { -0.388f }; int incX = -1; int expected = 0; int k; k = cblas_isamax(N, X, incX); gsl_test_int(k, expected, "samax(case 52)"); }; { int N = 1; double X[] = { 0.247 }; int incX = -1; int expected = 0; int k; k = cblas_idamax(N, X, incX); gsl_test_int(k, expected, "damax(case 53)"); }; { int N = 1; float X[] = { 0.704f, 0.665f }; int incX = -1; int expected = 0; int k; k = cblas_icamax(N, X, incX); gsl_test_int(k, expected, "camax(case 54)"); }; { int N = 1; double X[] = { -0.599, -0.758 }; int incX = -1; int expected = 0; int k; k = cblas_izamax(N, X, incX); gsl_test_int(k, expected, "zamax(case 55)"); }; { int N = 2; float X[] = { 0.909f, 0.037f }; int incX = 1; int expected = 0; int k; k = cblas_isamax(N, X, incX); gsl_test_int(k, expected, "samax(case 56)"); }; { int N = 2; double X[] = { 0.271, -0.426 }; int incX = 1; int expected = 1; int k; k = cblas_idamax(N, X, incX); gsl_test_int(k, expected, "damax(case 57)"); }; { int N = 2; float X[] = { -0.648f, 0.317f, 0.62f, 0.392f }; int incX = 1; int expected = 1; int k; k = cblas_icamax(N, X, incX); gsl_test_int(k, expected, "camax(case 58)"); }; { int N = 2; double X[] = { -0.789, 0.352, 0.562, 0.697 }; int incX = 1; int expected = 1; int k; k = cblas_izamax(N, X, incX); gsl_test_int(k, expected, "zamax(case 59)"); }; { int N = 2; float X[] = { 0.487f, 0.918f }; int incX = -1; int expected = 0; int k; k = cblas_isamax(N, X, incX); gsl_test_int(k, expected, "samax(case 60)"); }; { int N = 2; double X[] = { 0.537, 0.826 }; int incX = -1; int expected = 0; int k; k = cblas_idamax(N, X, incX); gsl_test_int(k, expected, "damax(case 61)"); }; { int N = 2; float X[] = { 0.993f, 0.172f, -0.825f, 0.873f }; int incX = -1; int expected = 0; int k; k = cblas_icamax(N, X, incX); gsl_test_int(k, expected, "camax(case 62)"); }; { int N = 2; double X[] = { 0.913, -0.436, -0.134, 0.129 }; int incX = -1; int expected = 0; int k; k = cblas_izamax(N, X, incX); gsl_test_int(k, expected, "zamax(case 63)"); }; } gsl/cblas/ssyrk.c0000644000175000017500000000065713536674414012345 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_ssyrk (const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const float alpha, const float *A, const int lda, const float beta, float *C, const int ldc) { #define BASE float #include "source_syrk_r.h" #undef BASE } gsl/cblas/zswap.c0000644000175000017500000000033113536674414012323 0ustar eddedd#include #include #include "cblas.h" void cblas_zswap (const int N, void *X, const int incX, void *Y, const int incY) { #define BASE double #include "source_swap_c.h" #undef BASE } gsl/cblas/cherk.c0000644000175000017500000000065313536674414012262 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l3.h" void cblas_cherk (const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const float alpha, const void *A, const int lda, const float beta, void *C, const int ldc) { #define BASE float #include "source_herk.h" #undef BASE } gsl/cblas/test_her2.c0000644000175000017500000001147513536674414013071 0ustar eddedd#include #include #include #include #include "tests.h" void test_her2 (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int uplo = 121; int N = 1; int lda = 1; float alpha[2] = {-1.0f, 0.0f}; float A[] = { -0.821f, 0.954f }; float X[] = { 0.532f, 0.802f }; int incX = -1; float Y[] = { 0.016f, -0.334f }; int incY = -1; float A_expected[] = { -0.302288f, 0.0f }; cblas_cher2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], flteps, "cher2(case 1450) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], flteps, "cher2(case 1450) imag"); }; }; }; { int order = 101; int uplo = 122; int N = 1; int lda = 1; float alpha[2] = {-1.0f, 0.0f}; float A[] = { -0.821f, 0.954f }; float X[] = { 0.532f, 0.802f }; int incX = -1; float Y[] = { 0.016f, -0.334f }; int incY = -1; float A_expected[] = { -0.302288f, 0.0f }; cblas_cher2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], flteps, "cher2(case 1451) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], flteps, "cher2(case 1451) imag"); }; }; }; { int order = 102; int uplo = 121; int N = 1; int lda = 1; float alpha[2] = {-1.0f, 0.0f}; float A[] = { -0.821f, 0.954f }; float X[] = { 0.532f, 0.802f }; int incX = -1; float Y[] = { 0.016f, -0.334f }; int incY = -1; float A_expected[] = { -0.302288f, 0.0f }; cblas_cher2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], flteps, "cher2(case 1452) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], flteps, "cher2(case 1452) imag"); }; }; }; { int order = 102; int uplo = 122; int N = 1; int lda = 1; float alpha[2] = {-1.0f, 0.0f}; float A[] = { -0.821f, 0.954f }; float X[] = { 0.532f, 0.802f }; int incX = -1; float Y[] = { 0.016f, -0.334f }; int incY = -1; float A_expected[] = { -0.302288f, 0.0f }; cblas_cher2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], flteps, "cher2(case 1453) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], flteps, "cher2(case 1453) imag"); }; }; }; { int order = 101; int uplo = 121; int N = 1; int lda = 1; double alpha[2] = {-0.3, 0.1}; double A[] = { -0.334, 0.286 }; double X[] = { -0.14, -0.135 }; int incX = -1; double Y[] = { 0.455, 0.358 }; int incY = -1; double A_expected[] = { -0.264521, 0.0 }; cblas_zher2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], dbleps, "zher2(case 1454) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], dbleps, "zher2(case 1454) imag"); }; }; }; { int order = 101; int uplo = 122; int N = 1; int lda = 1; double alpha[2] = {-0.3, 0.1}; double A[] = { -0.334, 0.286 }; double X[] = { -0.14, -0.135 }; int incX = -1; double Y[] = { 0.455, 0.358 }; int incY = -1; double A_expected[] = { -0.264521, 0.0 }; cblas_zher2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], dbleps, "zher2(case 1455) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], dbleps, "zher2(case 1455) imag"); }; }; }; { int order = 102; int uplo = 121; int N = 1; int lda = 1; double alpha[2] = {-0.3, 0.1}; double A[] = { -0.334, 0.286 }; double X[] = { -0.14, -0.135 }; int incX = -1; double Y[] = { 0.455, 0.358 }; int incY = -1; double A_expected[] = { -0.264521, 0.0 }; cblas_zher2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], dbleps, "zher2(case 1456) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], dbleps, "zher2(case 1456) imag"); }; }; }; { int order = 102; int uplo = 122; int N = 1; int lda = 1; double alpha[2] = {-0.3, 0.1}; double A[] = { -0.334, 0.286 }; double X[] = { -0.14, -0.135 }; int incX = -1; double Y[] = { 0.455, 0.358 }; int incY = -1; double A_expected[] = { -0.264521, 0.0 }; cblas_zher2(order, uplo, N, alpha, X, incX, Y, incY, A, lda); { int i; for (i = 0; i < 1; i++) { gsl_test_rel(A[2*i], A_expected[2*i], dbleps, "zher2(case 1457) real"); gsl_test_rel(A[2*i+1], A_expected[2*i+1], dbleps, "zher2(case 1457) imag"); }; }; }; } gsl/cblas/source_rot.h0000644000175000017500000000204513536674414013354 0ustar eddedd/* blas/source_rot.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i; INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { const BASE x = X[ix]; const BASE y = Y[iy]; X[ix] = c * x + s * y; Y[iy] = -s * x + c * y; ix += incX; iy += incY; } } gsl/cblas/source_trmv_c.h0000644000175000017500000001356313536674414014051 0ustar eddedd/* blas/source_trmv_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { const int conj = (TransA == CblasConjTrans) ? -1 : 1; const int Trans = (TransA != CblasConjTrans) ? TransA : CblasTrans; const int nonunit = (Diag == CblasNonUnit); INDEX i, j; CHECK_ARGS9(TRMV,order,Uplo,TransA,Diag,N,A,lda,X,incX); if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasLower)) { /* form x := A*x */ INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { BASE temp_r = 0.0; BASE temp_i = 0.0; const INDEX j_min = i + 1; INDEX jx = OFFSET(N, incX) + incX * j_min; for (j = j_min; j < N; j++) { const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); const BASE A_real = CONST_REAL(A, lda * i + j); const BASE A_imag = conj * CONST_IMAG(A, lda * i + j); temp_r += A_real * x_real - A_imag * x_imag; temp_i += A_real * x_imag + A_imag * x_real; jx += incX; } if (nonunit) { const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE A_real = CONST_REAL(A, lda * i + i); const BASE A_imag = conj * CONST_IMAG(A, lda * i + i); REAL(X, ix) = temp_r + (A_real * x_real - A_imag * x_imag); IMAG(X, ix) = temp_i + (A_real * x_imag + A_imag * x_real); } else { REAL(X, ix) += temp_r; IMAG(X, ix) += temp_i; } ix += incX; } } else if ((order == CblasRowMajor && Trans == CblasNoTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasTrans && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX) + (N - 1) * incX; for (i = N; i > 0 && i--;) { BASE temp_r = 0.0; BASE temp_i = 0.0; const INDEX j_max = i; INDEX jx = OFFSET(N, incX); for (j = 0; j < j_max; j++) { const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); const BASE A_real = CONST_REAL(A, lda * i + j); const BASE A_imag = conj * CONST_IMAG(A, lda * i + j); temp_r += A_real * x_real - A_imag * x_imag; temp_i += A_real * x_imag + A_imag * x_real; jx += incX; } if (nonunit) { const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE A_real = CONST_REAL(A, lda * i + i); const BASE A_imag = conj * CONST_IMAG(A, lda * i + i); REAL(X, ix) = temp_r + (A_real * x_real - A_imag * x_imag); IMAG(X, ix) = temp_i + (A_real * x_imag + A_imag * x_real); } else { REAL(X, ix) += temp_r; IMAG(X, ix) += temp_i; } ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasUpper) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasLower)) { /* form x := A'*x */ INDEX ix = OFFSET(N, incX) + (N - 1) * incX; for (i = N; i > 0 && i--;) { BASE temp_r = 0.0; BASE temp_i = 0.0; const INDEX j_max = i; INDEX jx = OFFSET(N, incX); for (j = 0; j < j_max; j++) { const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); const BASE A_real = CONST_REAL(A, lda * j + i); const BASE A_imag = conj * CONST_IMAG(A, lda * j + i); temp_r += A_real * x_real - A_imag * x_imag; temp_i += A_real * x_imag + A_imag * x_real; jx += incX; } if (nonunit) { const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE A_real = CONST_REAL(A, lda * i + i); const BASE A_imag = conj * CONST_IMAG(A, lda * i + i); REAL(X, ix) = temp_r + (A_real * x_real - A_imag * x_imag); IMAG(X, ix) = temp_i + (A_real * x_imag + A_imag * x_real); } else { REAL(X, ix) += temp_r; IMAG(X, ix) += temp_i; } ix -= incX; } } else if ((order == CblasRowMajor && Trans == CblasTrans && Uplo == CblasLower) || (order == CblasColMajor && Trans == CblasNoTrans && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); for (i = 0; i < N; i++) { BASE temp_r = 0.0; BASE temp_i = 0.0; const INDEX j_min = i + 1; INDEX jx = OFFSET(N, incX) + j_min * incX; for (j = j_min; j < N; j++) { const BASE x_real = REAL(X, jx); const BASE x_imag = IMAG(X, jx); const BASE A_real = CONST_REAL(A, lda * j + i); const BASE A_imag = conj * CONST_IMAG(A, lda * j + i); temp_r += A_real * x_real - A_imag * x_imag; temp_i += A_real * x_imag + A_imag * x_real; jx += incX; } if (nonunit) { const BASE x_real = REAL(X, ix); const BASE x_imag = IMAG(X, ix); const BASE A_real = CONST_REAL(A, lda * i + i); const BASE A_imag = conj * CONST_IMAG(A, lda * i + i); REAL(X, ix) = temp_r + (A_real * x_real - A_imag * x_imag); IMAG(X, ix) = temp_i + (A_real * x_imag + A_imag * x_real); } else { REAL(X, ix) += temp_r; IMAG(X, ix) += temp_i; } ix += incX; } } else { BLAS_ERROR("unrecognized operation"); } } gsl/cblas/test_rotg.c0000644000175000017500000013527713536674414013213 0ustar eddedd#include #include #include #include #include "tests.h" void test_rotg (void) { const double flteps = 1e-4, dbleps = 1e-6; { float a = -1.5f; float b = -1.5f; float c; float s; float r_expected = -2.12132034356f; float z_expected = 1.41421356237f; float c_expected = 0.707106781187f; float s_expected = 0.707106781187f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 166)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 167)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 168)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 169)"); }; { float a = -1.5f; float b = -1.0f; float c; float s; float r_expected = -1.80277563773f; float z_expected = 0.554700196225f; float c_expected = 0.832050294338f; float s_expected = 0.554700196225f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 170)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 171)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 172)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 173)"); }; { float a = -1.5f; float b = -0.1f; float c; float s; float r_expected = -1.50332963784f; float z_expected = 0.0665190105238f; float c_expected = 0.997785157857f; float s_expected = 0.0665190105238f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 174)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 175)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 176)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 177)"); }; { float a = -1.5f; float b = 0.0f; float c; float s; float r_expected = -1.5f; float z_expected = -0.0f; float c_expected = 1.0f; float s_expected = -0.0f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 178)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 179)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 180)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 181)"); }; { float a = -1.5f; float b = 0.1f; float c; float s; float r_expected = -1.50332963784f; float z_expected = -0.0665190105238f; float c_expected = 0.997785157857f; float s_expected = -0.0665190105238f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 182)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 183)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 184)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 185)"); }; { float a = -1.5f; float b = 1.0f; float c; float s; float r_expected = -1.80277563773f; float z_expected = -0.554700196225f; float c_expected = 0.832050294338f; float s_expected = -0.554700196225f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 186)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 187)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 188)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 189)"); }; { float a = -1.5f; float b = 1.5f; float c; float s; float r_expected = 2.12132034356f; float z_expected = -1.41421356237f; float c_expected = -0.707106781187f; float s_expected = 0.707106781187f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 190)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 191)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 192)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 193)"); }; { float a = -1.0f; float b = -1.5f; float c; float s; float r_expected = -1.80277563773f; float z_expected = 1.80277563773f; float c_expected = 0.554700196225f; float s_expected = 0.832050294338f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 194)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 195)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 196)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 197)"); }; { float a = -1.0f; float b = -1.0f; float c; float s; float r_expected = -1.41421356237f; float z_expected = 1.41421356237f; float c_expected = 0.707106781187f; float s_expected = 0.707106781187f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 198)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 199)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 200)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 201)"); }; { float a = -1.0f; float b = -0.1f; float c; float s; float r_expected = -1.00498756211f; float z_expected = 0.099503719021f; float c_expected = 0.99503719021f; float s_expected = 0.099503719021f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 202)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 203)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 204)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 205)"); }; { float a = -1.0f; float b = 0.0f; float c; float s; float r_expected = -1.0f; float z_expected = -0.0f; float c_expected = 1.0f; float s_expected = -0.0f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 206)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 207)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 208)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 209)"); }; { float a = -1.0f; float b = 0.1f; float c; float s; float r_expected = -1.00498756211f; float z_expected = -0.099503719021f; float c_expected = 0.99503719021f; float s_expected = -0.099503719021f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 210)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 211)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 212)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 213)"); }; { float a = -1.0f; float b = 1.0f; float c; float s; float r_expected = 1.41421356237f; float z_expected = -1.41421356237f; float c_expected = -0.707106781187f; float s_expected = 0.707106781187f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 214)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 215)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 216)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 217)"); }; { float a = -1.0f; float b = 1.5f; float c; float s; float r_expected = 1.80277563773f; float z_expected = -1.80277563773f; float c_expected = -0.554700196225f; float s_expected = 0.832050294338f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 218)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 219)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 220)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 221)"); }; { float a = -0.1f; float b = -1.5f; float c; float s; float r_expected = -1.50332963784f; float z_expected = 15.0332963784f; float c_expected = 0.0665190105238f; float s_expected = 0.997785157857f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 222)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 223)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 224)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 225)"); }; { float a = -0.1f; float b = -1.0f; float c; float s; float r_expected = -1.00498756211f; float z_expected = 10.0498756211f; float c_expected = 0.099503719021f; float s_expected = 0.99503719021f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 226)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 227)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 228)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 229)"); }; { float a = -0.1f; float b = -0.1f; float c; float s; float r_expected = -0.141421356237f; float z_expected = 1.41421356237f; float c_expected = 0.707106781187f; float s_expected = 0.707106781187f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 230)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 231)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 232)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 233)"); }; { float a = -0.1f; float b = 0.0f; float c; float s; float r_expected = -0.1f; float z_expected = -0.0f; float c_expected = 1.0f; float s_expected = -0.0f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 234)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 235)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 236)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 237)"); }; { float a = -0.1f; float b = 0.1f; float c; float s; float r_expected = 0.141421356237f; float z_expected = -1.41421356237f; float c_expected = -0.707106781187f; float s_expected = 0.707106781187f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 238)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 239)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 240)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 241)"); }; { float a = -0.1f; float b = 1.0f; float c; float s; float r_expected = 1.00498756211f; float z_expected = -10.0498756211f; float c_expected = -0.099503719021f; float s_expected = 0.99503719021f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 242)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 243)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 244)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 245)"); }; { float a = -0.1f; float b = 1.5f; float c; float s; float r_expected = 1.50332963784f; float z_expected = -15.0332963784f; float c_expected = -0.0665190105238f; float s_expected = 0.997785157857f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 246)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 247)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 248)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 249)"); }; { float a = 0.0f; float b = -1.5f; float c; float s; float r_expected = -1.5f; float z_expected = 1.0f; float c_expected = -0.0f; float s_expected = 1.0f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 250)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 251)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 252)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 253)"); }; { float a = 0.0f; float b = -1.0f; float c; float s; float r_expected = -1.0f; float z_expected = 1.0f; float c_expected = -0.0f; float s_expected = 1.0f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 254)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 255)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 256)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 257)"); }; { float a = 0.0f; float b = -0.1f; float c; float s; float r_expected = -0.1f; float z_expected = 1.0f; float c_expected = -0.0f; float s_expected = 1.0f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 258)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 259)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 260)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 261)"); }; { float a = 0.0f; float b = 0.0f; float c; float s; float r_expected = 0.0f; float z_expected = 0.0f; float c_expected = 1.0f; float s_expected = 0.0f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 262)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 263)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 264)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 265)"); }; { float a = 0.0f; float b = 0.1f; float c; float s; float r_expected = 0.1f; float z_expected = 1.0f; float c_expected = 0.0f; float s_expected = 1.0f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 266)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 267)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 268)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 269)"); }; { float a = 0.0f; float b = 1.0f; float c; float s; float r_expected = 1.0f; float z_expected = 1.0f; float c_expected = 0.0f; float s_expected = 1.0f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 270)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 271)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 272)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 273)"); }; { float a = 0.0f; float b = 1.5f; float c; float s; float r_expected = 1.5f; float z_expected = 1.0f; float c_expected = 0.0f; float s_expected = 1.0f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 274)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 275)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 276)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 277)"); }; { float a = 0.1f; float b = -1.5f; float c; float s; float r_expected = -1.50332963784f; float z_expected = -15.0332963784f; float c_expected = -0.0665190105238f; float s_expected = 0.997785157857f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 278)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 279)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 280)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 281)"); }; { float a = 0.1f; float b = -1.0f; float c; float s; float r_expected = -1.00498756211f; float z_expected = -10.0498756211f; float c_expected = -0.099503719021f; float s_expected = 0.99503719021f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 282)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 283)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 284)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 285)"); }; { float a = 0.1f; float b = -0.1f; float c; float s; float r_expected = -0.141421356237f; float z_expected = -1.41421356237f; float c_expected = -0.707106781187f; float s_expected = 0.707106781187f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 286)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 287)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 288)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 289)"); }; { float a = 0.1f; float b = 0.0f; float c; float s; float r_expected = 0.1f; float z_expected = 0.0f; float c_expected = 1.0f; float s_expected = 0.0f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 290)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 291)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 292)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 293)"); }; { float a = 0.1f; float b = 0.1f; float c; float s; float r_expected = 0.141421356237f; float z_expected = 1.41421356237f; float c_expected = 0.707106781187f; float s_expected = 0.707106781187f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 294)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 295)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 296)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 297)"); }; { float a = 0.1f; float b = 1.0f; float c; float s; float r_expected = 1.00498756211f; float z_expected = 10.0498756211f; float c_expected = 0.099503719021f; float s_expected = 0.99503719021f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 298)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 299)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 300)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 301)"); }; { float a = 0.1f; float b = 1.5f; float c; float s; float r_expected = 1.50332963784f; float z_expected = 15.0332963784f; float c_expected = 0.0665190105238f; float s_expected = 0.997785157857f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 302)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 303)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 304)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 305)"); }; { float a = 1.0f; float b = -1.5f; float c; float s; float r_expected = -1.80277563773f; float z_expected = -1.80277563773f; float c_expected = -0.554700196225f; float s_expected = 0.832050294338f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 306)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 307)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 308)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 309)"); }; { float a = 1.0f; float b = -1.0f; float c; float s; float r_expected = -1.41421356237f; float z_expected = -1.41421356237f; float c_expected = -0.707106781187f; float s_expected = 0.707106781187f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 310)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 311)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 312)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 313)"); }; { float a = 1.0f; float b = -0.1f; float c; float s; float r_expected = 1.00498756211f; float z_expected = -0.099503719021f; float c_expected = 0.99503719021f; float s_expected = -0.099503719021f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 314)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 315)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 316)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 317)"); }; { float a = 1.0f; float b = 0.0f; float c; float s; float r_expected = 1.0f; float z_expected = 0.0f; float c_expected = 1.0f; float s_expected = 0.0f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 318)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 319)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 320)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 321)"); }; { float a = 1.0f; float b = 0.1f; float c; float s; float r_expected = 1.00498756211f; float z_expected = 0.099503719021f; float c_expected = 0.99503719021f; float s_expected = 0.099503719021f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 322)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 323)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 324)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 325)"); }; { float a = 1.0f; float b = 1.0f; float c; float s; float r_expected = 1.41421356237f; float z_expected = 1.41421356237f; float c_expected = 0.707106781187f; float s_expected = 0.707106781187f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 326)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 327)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 328)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 329)"); }; { float a = 1.0f; float b = 1.5f; float c; float s; float r_expected = 1.80277563773f; float z_expected = 1.80277563773f; float c_expected = 0.554700196225f; float s_expected = 0.832050294338f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 330)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 331)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 332)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 333)"); }; { float a = 1.5f; float b = -1.5f; float c; float s; float r_expected = -2.12132034356f; float z_expected = -1.41421356237f; float c_expected = -0.707106781187f; float s_expected = 0.707106781187f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 334)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 335)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 336)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 337)"); }; { float a = 1.5f; float b = -1.0f; float c; float s; float r_expected = 1.80277563773f; float z_expected = -0.554700196225f; float c_expected = 0.832050294338f; float s_expected = -0.554700196225f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 338)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 339)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 340)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 341)"); }; { float a = 1.5f; float b = -0.1f; float c; float s; float r_expected = 1.50332963784f; float z_expected = -0.0665190105238f; float c_expected = 0.997785157857f; float s_expected = -0.0665190105238f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 342)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 343)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 344)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 345)"); }; { float a = 1.5f; float b = 0.0f; float c; float s; float r_expected = 1.5f; float z_expected = 0.0f; float c_expected = 1.0f; float s_expected = 0.0f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 346)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 347)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 348)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 349)"); }; { float a = 1.5f; float b = 0.1f; float c; float s; float r_expected = 1.50332963784f; float z_expected = 0.0665190105238f; float c_expected = 0.997785157857f; float s_expected = 0.0665190105238f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 350)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 351)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 352)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 353)"); }; { float a = 1.5f; float b = 1.0f; float c; float s; float r_expected = 1.80277563773f; float z_expected = 0.554700196225f; float c_expected = 0.832050294338f; float s_expected = 0.554700196225f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 354)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 355)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 356)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 357)"); }; { float a = 1.5f; float b = 1.5f; float c; float s; float r_expected = 2.12132034356f; float z_expected = 1.41421356237f; float c_expected = 0.707106781187f; float s_expected = 0.707106781187f; cblas_srotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, flteps, "srotg(case 358)"); gsl_test_rel(b, z_expected, flteps, "srotg(case 359)"); gsl_test_rel(c, c_expected, flteps, "srotg(case 360)"); gsl_test_rel(s, s_expected, flteps, "srotg(case 361)"); }; { double a = -1.5; double b = -1.5; double c; double s; double r_expected = -2.12132034356; double z_expected = 1.41421356237; double c_expected = 0.707106781187; double s_expected = 0.707106781187; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 362)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 363)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 364)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 365)"); }; { double a = -1.5; double b = -1; double c; double s; double r_expected = -1.80277563773; double z_expected = 0.554700196225; double c_expected = 0.832050294338; double s_expected = 0.554700196225; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 366)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 367)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 368)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 369)"); }; { double a = -1.5; double b = -0.1; double c; double s; double r_expected = -1.50332963784; double z_expected = 0.0665190105238; double c_expected = 0.997785157857; double s_expected = 0.0665190105238; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 370)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 371)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 372)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 373)"); }; { double a = -1.5; double b = 0; double c; double s; double r_expected = -1.5; double z_expected = -0; double c_expected = 1; double s_expected = -0; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 374)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 375)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 376)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 377)"); }; { double a = -1.5; double b = 0.1; double c; double s; double r_expected = -1.50332963784; double z_expected = -0.0665190105238; double c_expected = 0.997785157857; double s_expected = -0.0665190105238; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 378)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 379)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 380)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 381)"); }; { double a = -1.5; double b = 1; double c; double s; double r_expected = -1.80277563773; double z_expected = -0.554700196225; double c_expected = 0.832050294338; double s_expected = -0.554700196225; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 382)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 383)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 384)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 385)"); }; { double a = -1.5; double b = 1.5; double c; double s; double r_expected = 2.12132034356; double z_expected = -1.41421356237; double c_expected = -0.707106781187; double s_expected = 0.707106781187; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 386)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 387)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 388)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 389)"); }; { double a = -1; double b = -1.5; double c; double s; double r_expected = -1.80277563773; double z_expected = 1.80277563773; double c_expected = 0.554700196225; double s_expected = 0.832050294338; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 390)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 391)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 392)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 393)"); }; { double a = -1; double b = -1; double c; double s; double r_expected = -1.41421356237; double z_expected = 1.41421356237; double c_expected = 0.707106781187; double s_expected = 0.707106781187; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 394)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 395)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 396)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 397)"); }; { double a = -1; double b = -0.1; double c; double s; double r_expected = -1.00498756211; double z_expected = 0.099503719021; double c_expected = 0.99503719021; double s_expected = 0.099503719021; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 398)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 399)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 400)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 401)"); }; { double a = -1; double b = 0; double c; double s; double r_expected = -1; double z_expected = -0; double c_expected = 1; double s_expected = -0; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 402)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 403)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 404)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 405)"); }; { double a = -1; double b = 0.1; double c; double s; double r_expected = -1.00498756211; double z_expected = -0.099503719021; double c_expected = 0.99503719021; double s_expected = -0.099503719021; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 406)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 407)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 408)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 409)"); }; { double a = -1; double b = 1; double c; double s; double r_expected = 1.41421356237; double z_expected = -1.41421356237; double c_expected = -0.707106781187; double s_expected = 0.707106781187; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 410)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 411)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 412)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 413)"); }; { double a = -1; double b = 1.5; double c; double s; double r_expected = 1.80277563773; double z_expected = -1.80277563773; double c_expected = -0.554700196225; double s_expected = 0.832050294338; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 414)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 415)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 416)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 417)"); }; { double a = -0.1; double b = -1.5; double c; double s; double r_expected = -1.50332963784; double z_expected = 15.0332963784; double c_expected = 0.0665190105238; double s_expected = 0.997785157857; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 418)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 419)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 420)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 421)"); }; { double a = -0.1; double b = -1; double c; double s; double r_expected = -1.00498756211; double z_expected = 10.0498756211; double c_expected = 0.099503719021; double s_expected = 0.99503719021; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 422)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 423)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 424)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 425)"); }; { double a = -0.1; double b = -0.1; double c; double s; double r_expected = -0.141421356237; double z_expected = 1.41421356237; double c_expected = 0.707106781187; double s_expected = 0.707106781187; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 426)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 427)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 428)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 429)"); }; { double a = -0.1; double b = 0; double c; double s; double r_expected = -0.1; double z_expected = -0; double c_expected = 1; double s_expected = -0; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 430)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 431)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 432)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 433)"); }; { double a = -0.1; double b = 0.1; double c; double s; double r_expected = 0.141421356237; double z_expected = -1.41421356237; double c_expected = -0.707106781187; double s_expected = 0.707106781187; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 434)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 435)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 436)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 437)"); }; { double a = -0.1; double b = 1; double c; double s; double r_expected = 1.00498756211; double z_expected = -10.0498756211; double c_expected = -0.099503719021; double s_expected = 0.99503719021; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 438)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 439)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 440)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 441)"); }; { double a = -0.1; double b = 1.5; double c; double s; double r_expected = 1.50332963784; double z_expected = -15.0332963784; double c_expected = -0.0665190105238; double s_expected = 0.997785157857; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 442)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 443)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 444)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 445)"); }; { double a = 0; double b = -1.5; double c; double s; double r_expected = -1.5; double z_expected = 1; double c_expected = -0; double s_expected = 1; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 446)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 447)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 448)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 449)"); }; { double a = 0; double b = -1; double c; double s; double r_expected = -1; double z_expected = 1; double c_expected = -0; double s_expected = 1; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 450)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 451)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 452)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 453)"); }; { double a = 0; double b = -0.1; double c; double s; double r_expected = -0.1; double z_expected = 1; double c_expected = -0; double s_expected = 1; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 454)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 455)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 456)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 457)"); }; { double a = 0; double b = 0; double c; double s; double r_expected = 0; double z_expected = 0; double c_expected = 1; double s_expected = 0; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 458)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 459)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 460)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 461)"); }; { double a = 0; double b = 0.1; double c; double s; double r_expected = 0.1; double z_expected = 1; double c_expected = 0; double s_expected = 1; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 462)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 463)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 464)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 465)"); }; { double a = 0; double b = 1; double c; double s; double r_expected = 1; double z_expected = 1; double c_expected = 0; double s_expected = 1; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 466)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 467)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 468)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 469)"); }; { double a = 0; double b = 1.5; double c; double s; double r_expected = 1.5; double z_expected = 1; double c_expected = 0; double s_expected = 1; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 470)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 471)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 472)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 473)"); }; { double a = 0.1; double b = -1.5; double c; double s; double r_expected = -1.50332963784; double z_expected = -15.0332963784; double c_expected = -0.0665190105238; double s_expected = 0.997785157857; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 474)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 475)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 476)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 477)"); }; { double a = 0.1; double b = -1; double c; double s; double r_expected = -1.00498756211; double z_expected = -10.0498756211; double c_expected = -0.099503719021; double s_expected = 0.99503719021; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 478)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 479)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 480)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 481)"); }; { double a = 0.1; double b = -0.1; double c; double s; double r_expected = -0.141421356237; double z_expected = -1.41421356237; double c_expected = -0.707106781187; double s_expected = 0.707106781187; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 482)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 483)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 484)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 485)"); }; { double a = 0.1; double b = 0; double c; double s; double r_expected = 0.1; double z_expected = 0; double c_expected = 1; double s_expected = 0; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 486)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 487)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 488)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 489)"); }; { double a = 0.1; double b = 0.1; double c; double s; double r_expected = 0.141421356237; double z_expected = 1.41421356237; double c_expected = 0.707106781187; double s_expected = 0.707106781187; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 490)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 491)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 492)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 493)"); }; { double a = 0.1; double b = 1; double c; double s; double r_expected = 1.00498756211; double z_expected = 10.0498756211; double c_expected = 0.099503719021; double s_expected = 0.99503719021; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 494)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 495)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 496)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 497)"); }; { double a = 0.1; double b = 1.5; double c; double s; double r_expected = 1.50332963784; double z_expected = 15.0332963784; double c_expected = 0.0665190105238; double s_expected = 0.997785157857; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 498)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 499)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 500)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 501)"); }; { double a = 1; double b = -1.5; double c; double s; double r_expected = -1.80277563773; double z_expected = -1.80277563773; double c_expected = -0.554700196225; double s_expected = 0.832050294338; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 502)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 503)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 504)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 505)"); }; { double a = 1; double b = -1; double c; double s; double r_expected = -1.41421356237; double z_expected = -1.41421356237; double c_expected = -0.707106781187; double s_expected = 0.707106781187; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 506)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 507)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 508)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 509)"); }; { double a = 1; double b = -0.1; double c; double s; double r_expected = 1.00498756211; double z_expected = -0.099503719021; double c_expected = 0.99503719021; double s_expected = -0.099503719021; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 510)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 511)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 512)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 513)"); }; { double a = 1; double b = 0; double c; double s; double r_expected = 1; double z_expected = 0; double c_expected = 1; double s_expected = 0; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 514)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 515)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 516)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 517)"); }; { double a = 1; double b = 0.1; double c; double s; double r_expected = 1.00498756211; double z_expected = 0.099503719021; double c_expected = 0.99503719021; double s_expected = 0.099503719021; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 518)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 519)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 520)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 521)"); }; { double a = 1; double b = 1; double c; double s; double r_expected = 1.41421356237; double z_expected = 1.41421356237; double c_expected = 0.707106781187; double s_expected = 0.707106781187; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 522)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 523)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 524)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 525)"); }; { double a = 1; double b = 1.5; double c; double s; double r_expected = 1.80277563773; double z_expected = 1.80277563773; double c_expected = 0.554700196225; double s_expected = 0.832050294338; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 526)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 527)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 528)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 529)"); }; { double a = 1.5; double b = -1.5; double c; double s; double r_expected = -2.12132034356; double z_expected = -1.41421356237; double c_expected = -0.707106781187; double s_expected = 0.707106781187; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 530)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 531)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 532)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 533)"); }; { double a = 1.5; double b = -1; double c; double s; double r_expected = 1.80277563773; double z_expected = -0.554700196225; double c_expected = 0.832050294338; double s_expected = -0.554700196225; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 534)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 535)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 536)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 537)"); }; { double a = 1.5; double b = -0.1; double c; double s; double r_expected = 1.50332963784; double z_expected = -0.0665190105238; double c_expected = 0.997785157857; double s_expected = -0.0665190105238; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 538)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 539)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 540)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 541)"); }; { double a = 1.5; double b = 0; double c; double s; double r_expected = 1.5; double z_expected = 0; double c_expected = 1; double s_expected = 0; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 542)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 543)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 544)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 545)"); }; { double a = 1.5; double b = 0.1; double c; double s; double r_expected = 1.50332963784; double z_expected = 0.0665190105238; double c_expected = 0.997785157857; double s_expected = 0.0665190105238; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 546)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 547)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 548)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 549)"); }; { double a = 1.5; double b = 1; double c; double s; double r_expected = 1.80277563773; double z_expected = 0.554700196225; double c_expected = 0.832050294338; double s_expected = 0.554700196225; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 550)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 551)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 552)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 553)"); }; { double a = 1.5; double b = 1.5; double c; double s; double r_expected = 2.12132034356; double z_expected = 1.41421356237; double c_expected = 0.707106781187; double s_expected = 0.707106781187; cblas_drotg(&a, &b, &c, &s); gsl_test_rel(a, r_expected, dbleps, "drotg(case 554)"); gsl_test_rel(b, z_expected, dbleps, "drotg(case 555)"); gsl_test_rel(c, c_expected, dbleps, "drotg(case 556)"); gsl_test_rel(s, s_expected, dbleps, "drotg(case 557)"); }; } gsl/cblas/stpsv.c0000644000175000017500000000060013536674414012335 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_stpsv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const float *Ap, float *X, const int incX) { #define BASE float #include "source_tpsv_r.h" #undef BASE } gsl/cblas/test_symm.c0000644000175000017500000005075413536674414013221 0ustar eddedd#include #include #include #include #include "tests.h" void test_symm (void) { const double flteps = 1e-4, dbleps = 1e-6; { int order = 101; int side = 141; int uplo = 121; int M = 1; int N = 2; float alpha = -0.3f; float beta = -1.0f; float A[] = { -0.581f }; int lda = 1; float B[] = { 0.157f, 0.451f }; int ldb = 2; float C[] = { -0.869f, -0.871f }; int ldc = 2; float C_expected[] = { 0.896365f, 0.949609f }; cblas_ssymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssymm(case 1518)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int M = 1; int N = 2; float alpha = -0.3f; float beta = -1.0f; float A[] = { 0.874f }; int lda = 1; float B[] = { 0.085f, 0.069f }; int ldb = 1; float C[] = { -0.495f, -0.828f }; int ldc = 1; float C_expected[] = { 0.472713f, 0.809908f }; cblas_ssymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssymm(case 1519)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int M = 1; int N = 2; float alpha = -1.0f; float beta = 0.0f; float A[] = { -0.671f, -0.343f, 0.6f, 0.177f }; int lda = 2; float B[] = { 0.043f, 0.01f }; int ldb = 2; float C[] = { 0.988f, 0.478f }; int ldc = 2; float C_expected[] = { 0.032283f, 0.012979f }; cblas_ssymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssymm(case 1520)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int M = 1; int N = 2; float alpha = -1.0f; float beta = 0.0f; float A[] = { 0.069f, 0.096f, 0.139f, -0.044f }; int lda = 2; float B[] = { -0.448f, 0.07f }; int ldb = 1; float C[] = { 0.361f, 0.995f }; int ldc = 1; float C_expected[] = { 0.021182f, 0.065352f }; cblas_ssymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssymm(case 1521)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int M = 1; int N = 2; float alpha = 0.0f; float beta = -0.3f; float A[] = { 0.745f }; int lda = 1; float B[] = { -0.269f, 0.448f }; int ldb = 2; float C[] = { -0.986f, 0.2f }; int ldc = 2; float C_expected[] = { 0.2958f, -0.06f }; cblas_ssymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssymm(case 1522)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int M = 1; int N = 2; float alpha = 0.0f; float beta = -0.3f; float A[] = { 0.96f }; int lda = 1; float B[] = { 0.392f, -0.07f }; int ldb = 1; float C[] = { -0.235f, 0.554f }; int ldc = 1; float C_expected[] = { 0.0705f, -0.1662f }; cblas_ssymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssymm(case 1523)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int M = 1; int N = 2; float alpha = -0.3f; float beta = 0.1f; float A[] = { -0.839f, 0.498f, -0.215f, -0.314f }; int lda = 2; float B[] = { -0.66f, 0.593f }; int ldb = 2; float C[] = { -0.806f, 0.525f }; int ldc = 2; float C_expected[] = { -0.208474f, 0.0657906f }; cblas_ssymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssymm(case 1524)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int M = 1; int N = 2; float alpha = -0.3f; float beta = 0.1f; float A[] = { 0.994f, -0.117f, -0.639f, 0.925f }; int lda = 2; float B[] = { -0.478f, 0.147f }; int ldb = 1; float C[] = { -0.814f, 0.316f }; int ldc = 1; float C_expected[] = { 0.0662993f, -0.0259703f }; cblas_ssymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], flteps, "ssymm(case 1525)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int M = 1; int N = 2; double alpha = -0.3; double beta = 1; double A[] = { -0.981 }; int lda = 1; double B[] = { -0.823, 0.83 }; int ldb = 2; double C[] = { 0.991, 0.382 }; int ldc = 2; double C_expected[] = { 0.7487911, 0.626269 }; cblas_dsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsymm(case 1526)"); } }; }; { int order = 102; int side = 141; int uplo = 121; int M = 1; int N = 2; double alpha = -0.3; double beta = 1; double A[] = { -0.248 }; int lda = 1; double B[] = { 0.74, 0.068 }; int ldb = 1; double C[] = { -0.905, 0.742 }; int ldc = 1; double C_expected[] = { -0.849944, 0.7470592 }; cblas_dsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsymm(case 1527)"); } }; }; { int order = 101; int side = 142; int uplo = 121; int M = 1; int N = 2; double alpha = -1; double beta = 1; double A[] = { 0.591, -0.01, -0.192, -0.376 }; int lda = 2; double B[] = { 0.561, 0.946 }; int ldb = 2; double C[] = { 0.763, 0.189 }; int ldc = 2; double C_expected[] = { 0.440909, 0.550306 }; cblas_dsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsymm(case 1528)"); } }; }; { int order = 102; int side = 142; int uplo = 121; int M = 1; int N = 2; double alpha = -1; double beta = 1; double A[] = { -0.786, 0.87, 0.222, -0.043 }; int lda = 2; double B[] = { -0.503, -0.526 }; int ldb = 1; double C[] = { -0.027, -0.391 }; int ldc = 1; double C_expected[] = { -0.305586, -0.301952 }; cblas_dsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsymm(case 1529)"); } }; }; { int order = 101; int side = 141; int uplo = 122; int M = 1; int N = 2; double alpha = 0.1; double beta = 0.1; double A[] = { -0.468 }; int lda = 1; double B[] = { -0.881, 0.692 }; int ldb = 2; double C[] = { -0.812, -0.395 }; int ldc = 2; double C_expected[] = { -0.0399692, -0.0718856 }; cblas_dsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsymm(case 1530)"); } }; }; { int order = 102; int side = 141; int uplo = 122; int M = 1; int N = 2; double alpha = 0.1; double beta = 0.1; double A[] = { 0.849 }; int lda = 1; double B[] = { -0.887, 0.518 }; int ldb = 1; double C[] = { 0.414, -0.251 }; int ldc = 1; double C_expected[] = { -0.0339063, 0.0188782 }; cblas_dsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsymm(case 1531)"); } }; }; { int order = 101; int side = 142; int uplo = 122; int M = 1; int N = 2; double alpha = -1; double beta = 1; double A[] = { 0.457, 0.624, 0.807, 0.349 }; int lda = 2; double B[] = { -0.609, 0.03 }; int ldb = 2; double C[] = { 0.719, -0.624 }; int ldc = 2; double C_expected[] = { 0.973103, -0.143007 }; cblas_dsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsymm(case 1532)"); } }; }; { int order = 102; int side = 142; int uplo = 122; int M = 1; int N = 2; double alpha = -1; double beta = 1; double A[] = { -0.133, -0.117, -0.163, 0.795 }; int lda = 2; double B[] = { -0.882, 0.549 }; int ldb = 1; double C[] = { 0.715, -0.327 }; int ldc = 1; double C_expected[] = { 0.661927, -0.866649 }; cblas_dsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[i], C_expected[i], dbleps, "dsymm(case 1533)"); } }; }; { int order = 101; int side = 141; int uplo = 121; int M = 1; int N = 2; float alpha[2] = {-1.0f, 0.0f}; float beta[2] = {1.0f, 0.0f}; float A[] = { 0.476f, 0.816f }; int lda = 1; float B[] = { 0.282f, 0.852f, -0.891f, -0.588f }; int ldb = 2; float C[] = { 0.9f, 0.486f, -0.78f, -0.637f }; int ldc = 2; float C_expected[] = { 1.461f, -0.149664f, -0.835692f, 0.369944f }; cblas_csymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csymm(case 1534) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csymm(case 1534) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int M = 1; int N = 2; float alpha[2] = {-1.0f, 0.0f}; float beta[2] = {1.0f, 0.0f}; float A[] = { 0.048f, 0.172f }; int lda = 1; float B[] = { 0.786f, 0.783f, 0.809f, -0.569f }; int ldb = 1; float C[] = { -0.227f, -0.215f, 0.881f, 0.233f }; int ldc = 1; float C_expected[] = { -0.130052f, -0.387776f, 0.7443f, 0.121164f }; cblas_csymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csymm(case 1535) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csymm(case 1535) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int M = 1; int N = 2; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {0.0f, 1.0f}; float A[] = { -0.495f, -0.012f, 0.843f, -0.986f, -0.243f, 0.833f, 0.921f, 0.004f }; int lda = 2; float B[] = { 0.876f, 0.612f, 0.805f, -0.57f }; int ldb = 2; float C[] = { 0.938f, -0.24f, -0.874f, -0.062f }; int ldc = 2; float C_expected[] = { 1.82769f, 0.628319f, 0.93157f, 1.21158f }; cblas_csymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csymm(case 1536) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csymm(case 1536) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int M = 1; int N = 2; float alpha[2] = {0.0f, 1.0f}; float beta[2] = {0.0f, 1.0f}; float A[] = { -0.812f, 0.83f, 0.705f, 0.15f, -0.463f, 0.901f, -0.547f, -0.483f }; int lda = 2; float B[] = { -0.808f, -0.664f, 0.352f, -0.102f }; int ldb = 1; float C[] = { -0.64f, 0.399f, 0.896f, -0.163f }; int ldc = 1; float C_expected[] = { -0.631906f, 0.496142f, 0.697798f, 1.62656f }; cblas_csymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csymm(case 1537) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csymm(case 1537) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int M = 1; int N = 2; float alpha[2] = {-1.0f, 0.0f}; float beta[2] = {0.0f, 1.0f}; float A[] = { 0.342f, -0.906f }; int lda = 1; float B[] = { 0.676f, 0.863f, -0.517f, -0.138f }; int ldb = 2; float C[] = { 0.274f, 0.388f, -0.271f, 0.205f }; int ldc = 2; float C_expected[] = { -1.40107f, 0.59131f, 0.096842f, -0.692206f }; cblas_csymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csymm(case 1538) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csymm(case 1538) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int M = 1; int N = 2; float alpha[2] = {-1.0f, 0.0f}; float beta[2] = {0.0f, 1.0f}; float A[] = { 0.418f, 0.354f }; int lda = 1; float B[] = { -0.74f, 0.018f, 0.395f, 0.248f }; int ldb = 1; float C[] = { -0.162f, 0.175f, -0.853f, 0.652f }; int ldc = 1; float C_expected[] = { 0.140692f, 0.092436f, -0.729318f, -1.09649f }; cblas_csymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csymm(case 1539) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csymm(case 1539) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int M = 1; int N = 2; float alpha[2] = {-0.3f, 0.1f}; float beta[2] = {0.0f, 0.1f}; float A[] = { 0.12f, 0.496f, 0.313f, -0.136f, 0.987f, 0.532f, 0.58f, -0.687f }; int lda = 2; float B[] = { -0.587f, 0.278f, 0.857f, 0.136f }; int ldb = 2; float C[] = { 0.162f, 0.249f, -0.665f, 0.456f }; int ldc = 2; float C_expected[] = { -0.22769f, -0.0269913f, 0.0502096f, 0.0841558f }; cblas_csymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csymm(case 1540) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csymm(case 1540) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int M = 1; int N = 2; float alpha[2] = {-0.3f, 0.1f}; float beta[2] = {0.0f, 0.1f}; float A[] = { 0.579f, -0.859f, 0.192f, -0.737f, 0.396f, -0.498f, 0.751f, -0.379f }; int lda = 2; float B[] = { 0.84f, -0.755f, -0.019f, -0.063f }; int ldb = 1; float C[] = { 0.04f, 0.639f, -0.876f, -0.778f }; int ldc = 1; float C_expected[] = { 0.115459f, 0.329813f, 0.288206f, 0.110315f }; cblas_csymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], flteps, "csymm(case 1541) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "csymm(case 1541) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 121; int M = 1; int N = 2; double alpha[2] = {0, 0}; double beta[2] = {0, 0}; double A[] = { 0.511, -0.486 }; int lda = 1; double B[] = { 0.985, -0.923, -0.234, -0.756 }; int ldb = 2; double C[] = { -0.16, 0.049, 0.618, -0.349 }; int ldc = 2; double C_expected[] = { 0.0, 0.0, 0.0, 0.0 }; cblas_zsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsymm(case 1542) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsymm(case 1542) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 121; int M = 1; int N = 2; double alpha[2] = {0, 0}; double beta[2] = {0, 0}; double A[] = { 0.46, -0.816 }; int lda = 1; double B[] = { 0.404, 0.113, -0.904, -0.627 }; int ldb = 1; double C[] = { 0.114, 0.318, 0.636, -0.839 }; int ldc = 1; double C_expected[] = { 0.0, 0.0, 0.0, 0.0 }; cblas_zsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsymm(case 1543) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsymm(case 1543) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 121; int M = 1; int N = 2; double alpha[2] = {-1, 0}; double beta[2] = {-0.3, 0.1}; double A[] = { -0.835, 0.344, 0.975, 0.634, 0.312, -0.659, -0.624, -0.175 }; int lda = 2; double B[] = { -0.707, -0.846, 0.825, -0.661 }; int ldb = 2; double C[] = { 0.352, -0.499, 0.267, 0.548 }; int ldc = 2; double C_expected[] = { -2.160518, -0.156877, 0.648536, 0.867299 }; cblas_zsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsymm(case 1544) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsymm(case 1544) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 121; int M = 1; int N = 2; double alpha[2] = {-1, 0}; double beta[2] = {-0.3, 0.1}; double A[] = { -0.409, 0.013, -0.308, -0.317, -0.535, -0.697, -0.385, 0.119 }; int lda = 2; double B[] = { 0.299, -0.233, 0.093, 0.664 }; int ldb = 1; double C[] = { 0.699, 0.47, -0.347, -0.182 }; int ldc = 1; double C_expected[] = { -0.550491, 0.249777, 0.559487, 0.348221 }; cblas_zsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsymm(case 1545) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsymm(case 1545) imag"); }; }; }; { int order = 101; int side = 141; int uplo = 122; int M = 1; int N = 2; double alpha[2] = {1, 0}; double beta[2] = {0, 1}; double A[] = { -0.151, 0.635 }; int lda = 1; double B[] = { 0.711, -0.869, 0.153, 0.647 }; int ldb = 2; double C[] = { -0.299, 0.43, -0.307, 0.133 }; int ldc = 2; double C_expected[] = { 0.014454, 0.283704, -0.566948, -0.307542 }; cblas_zsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsymm(case 1546) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsymm(case 1546) imag"); }; }; }; { int order = 102; int side = 141; int uplo = 122; int M = 1; int N = 2; double alpha[2] = {1, 0}; double beta[2] = {0, 1}; double A[] = { 0.793, -0.543 }; int lda = 1; double B[] = { 0.054, -0.045, 0.989, 0.453 }; int ldb = 1; double C[] = { 0.443, -0.641, -0.809, -0.83 }; int ldc = 1; double C_expected[] = { 0.659387, 0.377993, 1.860256, -0.986798 }; cblas_zsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsymm(case 1547) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsymm(case 1547) imag"); }; }; }; { int order = 101; int side = 142; int uplo = 122; int M = 1; int N = 2; double alpha[2] = {1, 0}; double beta[2] = {-1, 0}; double A[] = { -0.432, -0.293, -0.819, 0.44, -0.818, -0.258, -0.836, 0.683 }; int lda = 2; double B[] = { -0.259, -0.878, 0.161, 0.744 }; int ldb = 2; double C[] = { 0.436, -0.655, -0.61, -0.875 }; int ldc = 2; double C_expected[] = { -0.521112, 0.460053, -0.04741, 1.148005 }; cblas_zsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsymm(case 1548) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsymm(case 1548) imag"); }; }; }; { int order = 102; int side = 142; int uplo = 122; int M = 1; int N = 2; double alpha[2] = {1, 0}; double beta[2] = {-1, 0}; double A[] = { -0.656, 0.378, -0.688, 0.676, 0.967, -0.804, 0.455, -0.425 }; int lda = 2; double B[] = { 0.791, -0.947, -0.945, -0.444 }; int ldb = 1; double C[] = { 0.014, -0.814, -0.091, -0.417 }; int ldc = 1; double C_expected[] = { 0.775374, 1.400882, -0.431711, 1.802857 }; cblas_zsymm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc); { int i; for (i = 0; i < 2; i++) { gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zsymm(case 1549) real"); gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zsymm(case 1549) imag"); }; }; }; } gsl/cblas/izamax.c0000644000175000017500000000031713536674414012454 0ustar eddedd#include #include #include "cblas.h" CBLAS_INDEX cblas_izamax (const int N, const void *X, const int incX) { #define BASE double #include "source_iamax_c.h" #undef BASE } gsl/cblas/cher.c0000644000175000017500000000053213536674414012103 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_cher (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const void *X, const int incX, void *A, const int lda) { #define BASE float #include "source_her.h" #undef BASE } gsl/cblas/chbmv.c0000644000175000017500000000065113536674414012263 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_chbmv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const int K, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY) { #define BASE float #include "source_hbmv.h" #undef BASE } gsl/cblas/source_hpmv.h0000644000175000017500000001230113536674414013516 0ustar eddedd/* blas/source_hpmv.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { INDEX i, j; const int conj = (order == CblasColMajor) ? -1 : 1; CHECK_ARGS10(CZ_HPMV,order,Uplo,N,alpha,Ap,X,incX,beta,Y,incY); { const BASE alpha_real = CONST_REAL0(alpha); const BASE alpha_imag = CONST_IMAG0(alpha); const BASE beta_real = CONST_REAL0(beta); const BASE beta_imag = CONST_IMAG0(beta); if ((alpha_real == 0.0 && alpha_imag == 0.0) && (beta_real == 1.0 && beta_imag == 0.0)) return; /* form y := beta*y */ if (beta_real == 0.0 && beta_imag == 0.0) { INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { REAL(Y, iy) = 0.0; IMAG(Y, iy) = 0.0; iy += incY; } } else if (!(beta_real == 1.0 && beta_imag == 0.0)) { INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { const BASE y_real = REAL(Y, iy); const BASE y_imag = IMAG(Y, iy); const BASE tmpR = y_real * beta_real - y_imag * beta_imag; const BASE tmpI = y_real * beta_imag + y_imag * beta_real; REAL(Y, iy) = tmpR; IMAG(Y, iy) = tmpI; iy += incY; } } if (alpha_real == 0.0 && alpha_imag == 0.0) return; /* form y := alpha*A*x + y */ if ((order == CblasRowMajor && Uplo == CblasUpper) || (order == CblasColMajor && Uplo == CblasLower)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { BASE x_real = CONST_REAL(X, ix); BASE x_imag = CONST_IMAG(X, ix); BASE temp1_real = alpha_real * x_real - alpha_imag * x_imag; BASE temp1_imag = alpha_real * x_imag + alpha_imag * x_real; BASE temp2_real = 0.0; BASE temp2_imag = 0.0; const INDEX j_min = i + 1; const INDEX j_max = N; INDEX jx = OFFSET(N, incX) + j_min * incX; INDEX jy = OFFSET(N, incY) + j_min * incY; BASE Aii_real = CONST_REAL(Ap, TPUP(N, i, i)); /* Aii_imag is zero */ REAL(Y, iy) += temp1_real * Aii_real; IMAG(Y, iy) += temp1_imag * Aii_real; for (j = j_min; j < j_max; j++) { BASE Aij_real = CONST_REAL(Ap, TPUP(N, i, j)); BASE Aij_imag = conj * CONST_IMAG(Ap, TPUP(N, i, j)); REAL(Y, jy) += temp1_real * Aij_real - temp1_imag * (-Aij_imag); IMAG(Y, jy) += temp1_real * (-Aij_imag) + temp1_imag * Aij_real; x_real = CONST_REAL(X, jx); x_imag = CONST_IMAG(X, jx); temp2_real += x_real * Aij_real - x_imag * Aij_imag; temp2_imag += x_real * Aij_imag + x_imag * Aij_real; jx += incX; jy += incY; } REAL(Y, iy) += alpha_real * temp2_real - alpha_imag * temp2_imag; IMAG(Y, iy) += alpha_real * temp2_imag + alpha_imag * temp2_real; ix += incX; iy += incY; } } else if ((order == CblasRowMajor && Uplo == CblasLower) || (order == CblasColMajor && Uplo == CblasUpper)) { INDEX ix = OFFSET(N, incX); INDEX iy = OFFSET(N, incY); for (i = 0; i < N; i++) { BASE x_real = CONST_REAL(X, ix); BASE x_imag = CONST_IMAG(X, ix); BASE temp1_real = alpha_real * x_real - alpha_imag * x_imag; BASE temp1_imag = alpha_real * x_imag + alpha_imag * x_real; BASE temp2_real = 0.0; BASE temp2_imag = 0.0; const INDEX j_min = 0; const INDEX j_max = i; INDEX jx = OFFSET(N, incX) + j_min * incX; INDEX jy = OFFSET(N, incY) + j_min * incY; BASE Aii_real = CONST_REAL(Ap, TPLO(N, i, i)); /* Aii_imag is zero */ REAL(Y, iy) += temp1_real * Aii_real; IMAG(Y, iy) += temp1_imag * Aii_real; for (j = j_min; j < j_max; j++) { BASE Aij_real = CONST_REAL(Ap, TPLO(N, i, j)); BASE Aij_imag = conj * CONST_IMAG(Ap, TPLO(N, i, j)); REAL(Y, jy) += temp1_real * Aij_real - temp1_imag * (-Aij_imag); IMAG(Y, jy) += temp1_real * (-Aij_imag) + temp1_imag * Aij_real; x_real = CONST_REAL(X, jx); x_imag = CONST_IMAG(X, jx); temp2_real += x_real * Aij_real - x_imag * Aij_imag; temp2_imag += x_real * Aij_imag + x_imag * Aij_real; jx += incX; jy += incY; } REAL(Y, iy) += alpha_real * temp2_real - alpha_imag * temp2_imag; IMAG(Y, iy) += alpha_real * temp2_imag + alpha_imag * temp2_real; ix += incX; iy += incY; } } else { BLAS_ERROR("unrecognized operation"); } } } gsl/cblas/ztpsv.c0000644000175000017500000000062313536674414012351 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" #include "hypot.c" void cblas_ztpsv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *Ap, void *X, const int incX) { #define BASE double #include "source_tpsv_c.h" #undef BASE } gsl/cblas/dtrsv.c0000644000175000017500000000063613536674414012331 0ustar eddedd#include #include #include "cblas.h" #include "error_cblas_l2.h" void cblas_dtrsv (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const double *A, const int lda, double *X, const int incX) { #define BASE double #include "source_trsv_r.h" #undef BASE } gsl/cblas/zdotc_sub.c0000644000175000017500000000045513536674414013162 0ustar eddedd#include #include #include "cblas.h" void cblas_zdotc_sub (const int N, const void *X, const int incX, const void *Y, const int incY, void *result) { #define BASE double #define CONJ_SIGN (-1.0) #include "source_dot_c.h" #undef CONJ_SIGN #undef BASE } gsl/cblas/sscal.c0000644000175000017500000000032313536674414012265 0ustar eddedd#include #include #include "cblas.h" void cblas_sscal (const int N, const float alpha, float *X, const int incX) { #define BASE float #include "source_scal_r.h" #undef BASE } gsl/cblas/source_asum_c.h0000644000175000017500000000200013536674414014006 0ustar eddedd/* blas/source_asum_c.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ { BASE r = 0.0; INDEX i; INDEX ix = 0; if (incX <= 0) { return 0; } for (i = 0; i < N; i++) { r += fabs(CONST_REAL(X, ix)) + fabs(CONST_IMAG(X, ix)); ix += incX; } return r; } gsl/multilarge/0000755000175000017500000000000014057135461012070 5ustar eddeddgsl/multilarge/multilarge.c0000664000175000017500000002536214057135461014413 0ustar eddedd/* multilarge.c * * Copyright (C) 2015 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include gsl_multilarge_linear_workspace * gsl_multilarge_linear_alloc(const gsl_multilarge_linear_type *T, const size_t p) { gsl_multilarge_linear_workspace *w; w = calloc(1, sizeof(gsl_multilarge_linear_workspace)); if (w == NULL) { GSL_ERROR_NULL("failed to allocate space for workspace", GSL_ENOMEM); } w->type = T; w->state = w->type->alloc(p); if (w->state == NULL) { gsl_multilarge_linear_free(w); GSL_ERROR_NULL("failed to allocate space for multilarge state", GSL_ENOMEM); } w->p = p; /* initialize newly allocated state */ gsl_multilarge_linear_reset(w); return w; } void gsl_multilarge_linear_free(gsl_multilarge_linear_workspace *w) { RETURN_IF_NULL(w); if (w->state) w->type->free(w->state); free(w); } const char * gsl_multilarge_linear_name(const gsl_multilarge_linear_workspace *w) { return w->type->name; } int gsl_multilarge_linear_reset(gsl_multilarge_linear_workspace *w) { int status = w->type->reset(w->state); return status; } int gsl_multilarge_linear_accumulate(gsl_matrix * X, gsl_vector * y, gsl_multilarge_linear_workspace * w) { int status = w->type->accumulate(X, y, w->state); return status; } int gsl_multilarge_linear_solve(const double lambda, gsl_vector * c, double * rnorm, double * snorm, gsl_multilarge_linear_workspace * w) { int status = w->type->solve(lambda, c, rnorm, snorm, w->state); return status; } int gsl_multilarge_linear_rcond(double *rcond, gsl_multilarge_linear_workspace * w) { int status = w->type->rcond(rcond, w->state); return status; } int gsl_multilarge_linear_lcurve(gsl_vector * reg_param, gsl_vector * rho, gsl_vector * eta, gsl_multilarge_linear_workspace * w) { const size_t len = reg_param->size; if (len != rho->size) { GSL_ERROR ("reg_param and rho have different sizes", GSL_EBADLEN); } else if (len != eta->size) { GSL_ERROR ("reg_param and eta have different sizes", GSL_EBADLEN); } else { int status = w->type->lcurve(reg_param, rho, eta, w->state); return status; } } /* gsl_multilarge_linear_wstdform1() Using regularization matrix L = diag(l_1,l_2,...,l_p), transform to Tikhonov standard form: X~ = sqrt(W) X L^{-1} y~ = sqrt(W) y c~ = L c Inputs: L - Tikhonov matrix as a vector of diagonal elements p-by-1; or NULL for L = I X - least squares matrix n-by-p y - right hand side vector n-by-1 w - weight vector n-by-1; or NULL for W = I Xs - least squares matrix in standard form X~ n-by-p ys - right hand side vector in standard form y~ n-by-1 work - workspace Return: success/error Notes: 1) It is allowed for X = Xs and y = ys */ int gsl_multilarge_linear_wstdform1 (const gsl_vector * L, const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_multilarge_linear_workspace * work) { const size_t n = X->size1; const size_t p = X->size2; (void) work; if (L != NULL && p != L->size) { GSL_ERROR("L vector does not match X", GSL_EBADLEN); } else if (n != y->size) { GSL_ERROR("y vector does not match X", GSL_EBADLEN); } else if (w != NULL && n != w->size) { GSL_ERROR("weight vector does not match X", GSL_EBADLEN); } else if (n != Xs->size1 || p != Xs->size2) { GSL_ERROR("Xs matrix dimensions do not match X", GSL_EBADLEN); } else if (n != ys->size) { GSL_ERROR("ys vector must be length n", GSL_EBADLEN); } else { int status = GSL_SUCCESS; /* compute Xs = sqrt(W) X and ys = sqrt(W) y */ status = gsl_multifit_linear_applyW(X, w, y, Xs, ys); if (status) return status; if (L != NULL) { size_t j; /* construct X~ = sqrt(W) X * L^{-1} matrix */ for (j = 0; j < p; ++j) { gsl_vector_view Xj = gsl_matrix_column(Xs, j); double lj = gsl_vector_get(L, j); if (lj == 0.0) { GSL_ERROR("L matrix is singular", GSL_EDOM); } gsl_vector_scale(&Xj.vector, 1.0 / lj); } } return status; } } int gsl_multilarge_linear_stdform1 (const gsl_vector * L, const gsl_matrix * X, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_multilarge_linear_workspace * work) { int status; status = gsl_multilarge_linear_wstdform1(L, X, NULL, y, Xs, ys, work); return status; } int gsl_multilarge_linear_L_decomp (gsl_matrix * L, gsl_vector * tau) { const size_t m = L->size1; const size_t p = L->size2; if (m < p) { GSL_ERROR("m < p not yet supported", GSL_EBADLEN); } else { int status; status = gsl_multifit_linear_L_decomp(L, tau); return status; } } int gsl_multilarge_linear_wstdform2 (const gsl_matrix * LQR, const gsl_vector * Ltau, const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_multilarge_linear_workspace * work) { const size_t m = LQR->size1; const size_t n = X->size1; const size_t p = X->size2; (void) Ltau; if (p != work->p) { GSL_ERROR("X has wrong number of columns", GSL_EBADLEN); } else if (p != LQR->size2) { GSL_ERROR("LQR and X matrices have different numbers of columns", GSL_EBADLEN); } else if (n != y->size) { GSL_ERROR("y vector does not match X", GSL_EBADLEN); } else if (w != NULL && n != w->size) { GSL_ERROR("weights vector must be length n", GSL_EBADLEN); } else if (m < p) { GSL_ERROR("m < p not yet supported", GSL_EBADLEN); } else if (n != Xs->size1 || p != Xs->size2) { GSL_ERROR("Xs matrix must be n-by-p", GSL_EBADLEN); } else if (n != ys->size) { GSL_ERROR("ys vector must have length n", GSL_EBADLEN); } else { int status; size_t i; gsl_matrix_const_view R = gsl_matrix_const_submatrix(LQR, 0, 0, p, p); /* compute Xs = sqrt(W) X and ys = sqrt(W) y */ status = gsl_multifit_linear_applyW(X, w, y, Xs, ys); if (status) return status; /* compute X~ = X R^{-1} using QR decomposition of L */ for (i = 0; i < n; ++i) { gsl_vector_view v = gsl_matrix_row(Xs, i); /* solve: R^T y = X_i */ gsl_blas_dtrsv(CblasUpper, CblasTrans, CblasNonUnit, &R.matrix, &v.vector); } return GSL_SUCCESS; } } int gsl_multilarge_linear_stdform2 (const gsl_matrix * LQR, const gsl_vector * Ltau, const gsl_matrix * X, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_multilarge_linear_workspace * work) { int status; status = gsl_multilarge_linear_wstdform2(LQR, Ltau, X, NULL, y, Xs, ys, work); return status; } /* gsl_multilarge_linear_genform1() Backtransform regularized solution vector using matrix L = diag(L) */ int gsl_multilarge_linear_genform1 (const gsl_vector * L, const gsl_vector * cs, gsl_vector * c, gsl_multilarge_linear_workspace * work) { if (L->size != work->p) { GSL_ERROR("L vector does not match workspace", GSL_EBADLEN); } else if (L->size != cs->size) { GSL_ERROR("cs vector does not match L", GSL_EBADLEN); } else if (L->size != c->size) { GSL_ERROR("c vector does not match L", GSL_EBADLEN); } else { /* compute true solution vector c = L^{-1} c~ */ gsl_vector_memcpy(c, cs); gsl_vector_div(c, L); return GSL_SUCCESS; } } int gsl_multilarge_linear_genform2 (const gsl_matrix * LQR, const gsl_vector * Ltau, const gsl_vector * cs, gsl_vector * c, gsl_multilarge_linear_workspace * work) { const size_t m = LQR->size1; const size_t p = LQR->size2; (void) Ltau; (void) work; if (p != c->size) { GSL_ERROR("c vector does not match LQR", GSL_EBADLEN); } else if (m < p) { GSL_ERROR("m < p not yet supported", GSL_EBADLEN); } else if (p != cs->size) { GSL_ERROR("cs vector size does not match c", GSL_EBADLEN); } else { int s; gsl_matrix_const_view R = gsl_matrix_const_submatrix(LQR, 0, 0, p, p); /* R factor of L */ /* solve R c = cs for true solution c, using QR decomposition of L */ gsl_vector_memcpy(c, cs); s = gsl_blas_dtrsv(CblasUpper, CblasNoTrans, CblasNonUnit, &R.matrix, c); return s; } } const gsl_matrix * gsl_multilarge_linear_matrix_ptr (const gsl_multilarge_linear_workspace * work) { return work->type->matrix_ptr(work->state); } const gsl_vector * gsl_multilarge_linear_rhs_ptr (const gsl_multilarge_linear_workspace * work) { return work->type->rhs_ptr(work->state); } gsl/multilarge/Makefile.in0000664000175000017500000010713314057135461014144 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = multilarge ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslmultilarge_la_LIBADD = am_libgslmultilarge_la_OBJECTS = multilarge.lo normal.lo tsqr.lo libgslmultilarge_la_OBJECTS = $(am_libgslmultilarge_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslmultilarge.la ../test/libgsltest.la \ ../multifit/libgslmultifit.la ../eigen/libgsleigen.la \ ../linalg/libgsllinalg.la ../blas/libgslblas.la \ ../cblas/libgslcblas.la ../permutation/libgslpermutation.la \ ../matrix/libgslmatrix.la ../vector/libgslvector.la \ ../block/libgslblock.la ../sys/libgslsys.la \ ../utils/libutils.la ../rng/libgslrng.la \ ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ ../complex/libgslcomplex.la ../min/libgslmin.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/multilarge.Plo \ ./$(DEPDIR)/normal.Plo ./$(DEPDIR)/test.Po \ ./$(DEPDIR)/tsqr.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslmultilarge_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslmultilarge_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslmultilarge.la pkginclude_HEADERS = gsl_multilarge.h libgslmultilarge_la_SOURCES = multilarge.c normal.c tsqr.c AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslmultilarge.la ../test/libgsltest.la ../multifit/libgslmultifit.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../utils/libutils.la ../rng/libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../complex/libgslcomplex.la ../min/libgslmin.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu multilarge/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu multilarge/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslmultilarge.la: $(libgslmultilarge_la_OBJECTS) $(libgslmultilarge_la_DEPENDENCIES) $(EXTRA_libgslmultilarge_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslmultilarge_la_OBJECTS) $(libgslmultilarge_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multilarge.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/normal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsqr.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/multilarge.Plo -rm -f ./$(DEPDIR)/normal.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/tsqr.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/multilarge.Plo -rm -f ./$(DEPDIR)/normal.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/tsqr.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/multilarge/normal.c0000664000175000017500000003115714057135461013535 0ustar eddedd/* normal.c * * Copyright (C) 2015, 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include typedef struct { size_t p; /* number of columns of LS matrix */ gsl_matrix *ATA; /* A^T A, p-by-p */ gsl_vector *ATb; /* A^T b, p-by-1 */ double normb; /* || b || */ gsl_matrix *work_ATA; /* workspace for chol(ATA), p-by-p */ gsl_vector *workp; /* workspace size p */ gsl_vector *work3p; /* workspace size 3*p */ gsl_vector *D; /* scale factors for ATA, size p */ gsl_vector *c; /* solution vector for L-curve */ int eigen; /* 1 if eigenvalues computed */ double eval_min; /* minimum eigenvalue */ double eval_max; /* maximum eigenvalue */ gsl_eigen_symm_workspace *eigen_p; } normal_state_t; static void *normal_alloc(const size_t p); static void normal_free(void *vstate); static int normal_reset(void *vstate); static int normal_accumulate(gsl_matrix * A, gsl_vector * b, void * vstate); static int normal_solve(const double lambda, gsl_vector * x, double * rnorm, double * snorm, void * vstate); static int normal_rcond(double * rcond, void * vstate); static int normal_lcurve(gsl_vector * reg_param, gsl_vector * rho, gsl_vector * eta, void * vstate); static const gsl_matrix * normal_ATA(const void * vstate); static const gsl_vector * normal_ATb(const void * vstate); static int normal_solve_system(const double lambda, gsl_vector * x, normal_state_t *state); static int normal_solve_cholesky(gsl_matrix * ATA, const gsl_vector * ATb, gsl_vector * x, normal_state_t *state); static int normal_calc_norms(const gsl_vector *x, double *rnorm, double *snorm, normal_state_t *state); static int normal_eigen(normal_state_t *state); /* normal_alloc() Allocate workspace for solving large linear least squares problems using the normal equations approach Inputs: p - number of columns of LS matrix Return: pointer to workspace */ static void * normal_alloc(const size_t p) { normal_state_t *state; if (p == 0) { GSL_ERROR_NULL("p must be a positive integer", GSL_EINVAL); } state = calloc(1, sizeof(normal_state_t)); if (!state) { GSL_ERROR_NULL("failed to allocate normal state", GSL_ENOMEM); } state->p = p; state->ATA = gsl_matrix_alloc(p, p); if (state->ATA == NULL) { normal_free(state); GSL_ERROR_NULL("failed to allocate ATA matrix", GSL_ENOMEM); } state->work_ATA = gsl_matrix_alloc(p, p); if (state->work_ATA == NULL) { normal_free(state); GSL_ERROR_NULL("failed to allocate temporary ATA matrix", GSL_ENOMEM); } state->ATb = gsl_vector_alloc(p); if (state->ATb == NULL) { normal_free(state); GSL_ERROR_NULL("failed to allocate ATb vector", GSL_ENOMEM); } state->D = gsl_vector_alloc(p); if (state->D == NULL) { normal_free(state); GSL_ERROR_NULL("failed to allocate D vector", GSL_ENOMEM); } state->workp = gsl_vector_alloc(p); if (state->workp == NULL) { normal_free(state); GSL_ERROR_NULL("failed to allocate temporary ATb vector", GSL_ENOMEM); } state->work3p = gsl_vector_alloc(3 * p); if (state->work3p == NULL) { normal_free(state); GSL_ERROR_NULL("failed to allocate work3p", GSL_ENOMEM); } state->c = gsl_vector_alloc(p); if (state->c == NULL) { normal_free(state); GSL_ERROR_NULL("failed to allocate c vector", GSL_ENOMEM); } state->eigen_p = gsl_eigen_symm_alloc(p); if (state->eigen_p == NULL) { normal_free(state); GSL_ERROR_NULL("failed to allocate eigen workspace", GSL_ENOMEM); } normal_reset(state); return state; } static void normal_free(void *vstate) { normal_state_t *state = (normal_state_t *) vstate; if (state->ATA) gsl_matrix_free(state->ATA); if (state->work_ATA) gsl_matrix_free(state->work_ATA); if (state->ATb) gsl_vector_free(state->ATb); if (state->D) gsl_vector_free(state->D); if (state->workp) gsl_vector_free(state->workp); if (state->work3p) gsl_vector_free(state->work3p); if (state->c) gsl_vector_free(state->c); if (state->eigen_p) gsl_eigen_symm_free(state->eigen_p); free(state); } static int normal_reset(void *vstate) { normal_state_t *state = (normal_state_t *) vstate; gsl_matrix_set_zero(state->ATA); gsl_vector_set_zero(state->ATb); state->normb = 0.0; state->eigen = 0; state->eval_min = 0.0; state->eval_max = 0.0; return GSL_SUCCESS; } /* normal_accumulate() Add a new block of rows to the normal equations system Inputs: A - new block of rows, n-by-p b - new rhs vector n-by-1 vstate - workspace Return: success/error */ static int normal_accumulate(gsl_matrix * A, gsl_vector * b, void * vstate) { normal_state_t *state = (normal_state_t *) vstate; const size_t n = A->size1; if (A->size2 != state->p) { GSL_ERROR("columns of A do not match workspace", GSL_EBADLEN); } else if (n != b->size) { GSL_ERROR("A and b have different numbers of rows", GSL_EBADLEN); } else { int s; /* ATA += A^T A, using only the lower half of the matrix */ s = gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, A, 1.0, state->ATA); if (s) return s; /* ATb += A^T b */ s = gsl_blas_dgemv(CblasTrans, 1.0, A, b, 1.0, state->ATb); if (s) return s; /* update || b || */ state->normb = gsl_hypot(state->normb, gsl_blas_dnrm2(b)); return GSL_SUCCESS; } } /* normal_solve() Solve normal equations system: (A^T A + \lambda^2 I) x = A^T b using Cholesky decomposition Inputs: lambda - regularization parameter x - (output) solution vector p-by-1 rnorm - (output) residual norm ||b - A x|| snorm - (output) solution norm ||x|| vstate - workspace Return: success/error */ static int normal_solve(const double lambda, gsl_vector * x, double * rnorm, double * snorm, void * vstate) { normal_state_t *state = (normal_state_t *) vstate; if (x->size != state->p) { GSL_ERROR("solution vector does not match workspace", GSL_EBADLEN); } else { int status; /* solve system (A^T A) x = A^T b */ status = normal_solve_system(lambda, x, state); if (status) { GSL_ERROR("failed to solve normal equations", status); } /* compute residual norm ||y - X c|| and solution norm ||x|| */ normal_calc_norms(x, rnorm, snorm, state); return GSL_SUCCESS; } } static int normal_rcond(double * rcond, void * vstate) { normal_state_t *state = (normal_state_t *) vstate; int status = GSL_SUCCESS; double rcond_ATA; status = gsl_linalg_cholesky_rcond(state->work_ATA, &rcond_ATA, state->work3p); if (status == GSL_SUCCESS) *rcond = sqrt(rcond_ATA); return status; } /* normal_lcurve() Compute L-curve of least squares system Inputs: reg_param - (output) vector of regularization parameters rho - (output) vector of residual norms eta - (output) vector of solution norms vstate - workspace Return: success/error */ static int normal_lcurve(gsl_vector * reg_param, gsl_vector * rho, gsl_vector * eta, void * vstate) { normal_state_t *state = (normal_state_t *) vstate; int status; double smin, smax; /* minimum/maximum singular values */ size_t i; if (state->eigen == 0) { status = normal_eigen(state); if (status) return status; } if (state->eval_max < 0.0) { GSL_ERROR("matrix is not positive definite", GSL_EDOM); } /* compute singular values which are sqrts of eigenvalues */ smax = sqrt(state->eval_max); if (state->eval_min > 0.0) smin = sqrt(state->eval_min); else smin = 0.0; /* compute vector of regularization parameters */ gsl_multifit_linear_lreg(smin, smax, reg_param); /* solve normal equations for each regularization parameter */ for (i = 0; i < reg_param->size; ++i) { double lambda = gsl_vector_get(reg_param, i); double rnorm, snorm; status = normal_solve_system(lambda, state->c, state); if (status) return status; /* compute ||y - X c|| and ||c|| */ normal_calc_norms(state->c, &rnorm, &snorm, state); gsl_vector_set(rho, i, rnorm); gsl_vector_set(eta, i, snorm); } return GSL_SUCCESS; } static const gsl_matrix * normal_ATA(const void * vstate) { const normal_state_t *state = (const normal_state_t *) vstate; return state->ATA; } static const gsl_vector * normal_ATb(const void * vstate) { const normal_state_t *state = (const normal_state_t *) vstate; return state->ATb; } /* normal_solve_system() Compute solution to normal equations: (A^T A + lambda^2*I) x = A^T b using LDL decomposition. Inputs: x - (output) solution vector state - workspace Return: success/error */ static int normal_solve_system(const double lambda, gsl_vector * x, normal_state_t *state) { int status; const double lambda_sq = lambda * lambda; gsl_vector_view d = gsl_matrix_diagonal(state->work_ATA); /* copy ATA matrix to temporary workspace and regularize */ gsl_matrix_tricpy(CblasLower, CblasNonUnit, state->work_ATA, state->ATA); gsl_vector_add_constant(&d.vector, lambda_sq); /* solve with Cholesky decomposition */ status = normal_solve_cholesky(state->work_ATA, state->ATb, x, state); if (status) return status; return status; } static int normal_solve_cholesky(gsl_matrix * ATA, const gsl_vector * ATb, gsl_vector * x, normal_state_t *state) { int status; status = gsl_linalg_cholesky_decomp2(ATA, state->D); if (status) return status; status = gsl_linalg_cholesky_solve2(ATA, state->D, ATb, x); if (status) return status; return GSL_SUCCESS; } /* normal_calc_norms() Compute residual norm ||y - X c|| and solution norm ||c|| Inputs: x - solution vector rnorm - (output) residual norm ||y - X c|| snorm - (output) solution norm ||c|| state - workspace */ static int normal_calc_norms(const gsl_vector *x, double *rnorm, double *snorm, normal_state_t *state) { double r2; /* compute solution norm ||x|| */ *snorm = gsl_blas_dnrm2(x); /* compute residual norm ||b - Ax|| */ /* compute: A^T A x - 2 A^T b */ gsl_vector_memcpy(state->workp, state->ATb); gsl_blas_dsymv(CblasLower, 1.0, state->ATA, x, -2.0, state->workp); /* compute: x^T A^T A x - 2 x^T A^T b */ gsl_blas_ddot(x, state->workp, &r2); /* add b^T b */ r2 += state->normb * state->normb; *rnorm = sqrt(r2); return GSL_SUCCESS; } /* normal_eigen() Compute eigenvalues of A^T A matrix, which are stored in state->workp on output. Also, state->eval_min and state->eval_max are set to the minimum/maximum eigenvalues */ static int normal_eigen(normal_state_t *state) { int status; /* copy lower triangle of ATA to temporary workspace */ gsl_matrix_tricpy(CblasLower, CblasNonUnit, state->work_ATA, state->ATA); /* compute eigenvalues of ATA */ status = gsl_eigen_symm(state->work_ATA, state->workp, state->eigen_p); if (status) return status; gsl_vector_minmax(state->workp, &state->eval_min, &state->eval_max); state->eigen = 1; return GSL_SUCCESS; } static const gsl_multilarge_linear_type normal_type = { "normal", normal_alloc, normal_reset, normal_accumulate, normal_solve, normal_rcond, normal_lcurve, normal_ATA, normal_ATb, normal_free }; const gsl_multilarge_linear_type * gsl_multilarge_linear_normal = &normal_type; gsl/multilarge/Makefile.am0000644000175000017500000000127513536674414014140 0ustar eddeddnoinst_LTLIBRARIES = libgslmultilarge.la pkginclude_HEADERS = gsl_multilarge.h libgslmultilarge_la_SOURCES = multilarge.c normal.c tsqr.c AM_CPPFLAGS = -I$(top_srcdir) check_PROGRAMS = test TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslmultilarge.la ../test/libgsltest.la ../multifit/libgslmultifit.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../utils/libutils.la ../rng/libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../complex/libgslcomplex.la ../min/libgslmin.la gsl/multilarge/gsl_multilarge.h0000664000175000017500000001311514057135461015256 0ustar eddedd/* gsl_multilarge.h * * Copyright (C) 2015 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MULTILARGE_H__ #define __GSL_MULTILARGE_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* iteration solver type */ typedef struct { const char *name; void * (*alloc) (const size_t p); int (*reset) (void *); int (*accumulate) (gsl_matrix * X, gsl_vector * y, void *); int (*solve) (const double lambda, gsl_vector * c, double * rnorm, double * snorm, void *); int (*rcond) (double * rcond, void *); int (*lcurve) (gsl_vector * reg_param, gsl_vector * rho, gsl_vector * eta, void *); const gsl_matrix * (*matrix_ptr) (const void *); const gsl_vector * (*rhs_ptr) (const void *); void (*free) (void *); } gsl_multilarge_linear_type; typedef struct { const gsl_multilarge_linear_type * type; void * state; size_t p; } gsl_multilarge_linear_workspace; /* available types */ GSL_VAR const gsl_multilarge_linear_type * gsl_multilarge_linear_normal; GSL_VAR const gsl_multilarge_linear_type * gsl_multilarge_linear_tsqr; /* * Prototypes */ gsl_multilarge_linear_workspace * gsl_multilarge_linear_alloc(const gsl_multilarge_linear_type * T, const size_t p); void gsl_multilarge_linear_free(gsl_multilarge_linear_workspace * w); const char *gsl_multilarge_linear_name(const gsl_multilarge_linear_workspace * w); int gsl_multilarge_linear_reset(gsl_multilarge_linear_workspace * w); int gsl_multilarge_linear_accumulate(gsl_matrix * X, gsl_vector * y, gsl_multilarge_linear_workspace * w); int gsl_multilarge_linear_solve(const double lambda, gsl_vector * c, double * rnorm, double * snorm, gsl_multilarge_linear_workspace * w); int gsl_multilarge_linear_rcond(double *rcond, gsl_multilarge_linear_workspace * w); int gsl_multilarge_linear_lcurve(gsl_vector * reg_param, gsl_vector * rho, gsl_vector * eta, gsl_multilarge_linear_workspace * w); int gsl_multilarge_linear_wstdform1 (const gsl_vector * L, const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_multilarge_linear_workspace * work); int gsl_multilarge_linear_stdform1 (const gsl_vector * L, const gsl_matrix * X, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_multilarge_linear_workspace * work); int gsl_multilarge_linear_L_decomp (gsl_matrix * L, gsl_vector * tau); int gsl_multilarge_linear_wstdform2 (const gsl_matrix * LQR, const gsl_vector * Ltau, const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_multilarge_linear_workspace * work); int gsl_multilarge_linear_stdform2 (const gsl_matrix * LQR, const gsl_vector * Ltau, const gsl_matrix * X, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_multilarge_linear_workspace * work); int gsl_multilarge_linear_genform1 (const gsl_vector * L, const gsl_vector * cs, gsl_vector * c, gsl_multilarge_linear_workspace * work); int gsl_multilarge_linear_genform2 (const gsl_matrix * LQR, const gsl_vector * Ltau, const gsl_vector * cs, gsl_vector * c, gsl_multilarge_linear_workspace * work); const gsl_matrix * gsl_multilarge_linear_matrix_ptr (const gsl_multilarge_linear_workspace * work); const gsl_vector * gsl_multilarge_linear_rhs_ptr (const gsl_multilarge_linear_workspace * work); __END_DECLS #endif /* __GSL_MULTILARGE_H__ */ gsl/multilarge/tsqr.c0000664000175000017500000003004314057135461013227 0ustar eddedd/* tsqr.c * * Copyright (C) 2015, 2019 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This module implements the sequential TSQR algorithm * described in * * [1] Demmel, J., Grigori, L., Hoemmen, M. F., and Langou, J. * "Communication-optimal parallel and sequential QR and LU factorizations", * UCB Technical Report No. UCB/EECS-2008-89, 2008. * * The algorithm operates on a tall least squares system: * * [ A_1 ] x = [ b_1 ] * [ A_2 ] [ b_2 ] * [ ... ] [ ... ] * [ A_k ] [ b_k ] * * as follows: * * 1. Initialize * a. [Q_1,R_1] = qr(A_1) * b. z_1 = Q_1^T b_1 * 2. Loop i = 2:k * a. [Q_i,R_i] = qr( [ R_{i-1} ; A_i ] ) * b. z_i = Q_i^T [ z_{i-1} ; b_i ] * 3. Output: * a. R = R_k * b. Q^T b = z_k * * Step 2(a) is optimized to take advantage * of the sparse structure of the matrix */ #include #include #include #include #include #include #include #include #include typedef struct { size_t p; /* number of columns of LS matrix */ int nblocks; /* number of blocks processed */ double rnorm; /* || b - A x || residual norm */ int svd; /* SVD of R factor has been computed */ gsl_matrix *T; /* block reflector matrix, p-by-p */ gsl_matrix *R; /* R factor, p-by-p */ gsl_vector *QTb; /* [ Q^T b ; b_i ], size p-by-1 */ gsl_vector *work; /* workspace, size p */ gsl_vector *work3; /* workspace, size 3*p */ gsl_multifit_linear_workspace * multifit_workspace_p; } tsqr_state_t; static void *tsqr_alloc(const size_t p); static void tsqr_free(void *vstate); static int tsqr_reset(void *vstate); static int tsqr_accumulate(gsl_matrix * A, gsl_vector * b, void * vstate); static int tsqr_solve(const double lambda, gsl_vector * x, double * rnorm, double * snorm, void * vstate); static int tsqr_rcond(double * rcond, void * vstate); static int tsqr_lcurve(gsl_vector * reg_param, gsl_vector * rho, gsl_vector * eta, void * vstate); static const gsl_matrix * tsqr_R(const void * vstate); static const gsl_vector * tsqr_QTb(const void * vstate); static int tsqr_svd(tsqr_state_t * state); /* tsqr_alloc() Allocate workspace for solving large linear least squares problems using the TSQR approach Inputs: p - number of columns of LS matrix Return: pointer to workspace */ static void * tsqr_alloc(const size_t p) { tsqr_state_t *state; if (p == 0) { GSL_ERROR_NULL("p must be a positive integer", GSL_EINVAL); } state = calloc(1, sizeof(tsqr_state_t)); if (!state) { GSL_ERROR_NULL("failed to allocate tsqr state", GSL_ENOMEM); } state->p = p; state->nblocks = 0; state->rnorm = 0.0; state->R = gsl_matrix_alloc(p, p); if (state->R == NULL) { tsqr_free(state); GSL_ERROR_NULL("failed to allocate R matrix", GSL_ENOMEM); } state->QTb = gsl_vector_alloc(p); if (state->QTb == NULL) { tsqr_free(state); GSL_ERROR_NULL("failed to allocate QTb vector", GSL_ENOMEM); } state->T = gsl_matrix_alloc(p, p); if (state->T == NULL) { tsqr_free(state); GSL_ERROR_NULL("failed to allocate T matrix", GSL_ENOMEM); } state->work = gsl_vector_alloc(p); if (state->work == NULL) { tsqr_free(state); GSL_ERROR_NULL("failed to allocate workspace vector", GSL_ENOMEM); } state->work3 = gsl_vector_alloc(3 * p); if (state->work3 == NULL) { tsqr_free(state); GSL_ERROR_NULL("failed to allocate work3 vector", GSL_ENOMEM); } state->multifit_workspace_p = gsl_multifit_linear_alloc(p, p); if (state->multifit_workspace_p == NULL) { tsqr_free(state); GSL_ERROR_NULL("failed to allocate multifit workspace", GSL_ENOMEM); } return state; } static void tsqr_free(void *vstate) { tsqr_state_t *state = (tsqr_state_t *) vstate; if (state->R) gsl_matrix_free(state->R); if (state->QTb) gsl_vector_free(state->QTb); if (state->T) gsl_matrix_free(state->T); if (state->work) gsl_vector_free(state->work); if (state->work3) gsl_vector_free(state->work3); if (state->multifit_workspace_p) gsl_multifit_linear_free(state->multifit_workspace_p); free(state); } static int tsqr_reset(void *vstate) { tsqr_state_t *state = (tsqr_state_t *) vstate; gsl_matrix_set_zero(state->R); gsl_vector_set_zero(state->QTb); state->nblocks = 0; state->rnorm = 0.0; state->svd = 0; return GSL_SUCCESS; } /* tsqr_accumulate() Add a new block of rows to the QR system Inputs: A - new block of rows, n-by-p b - new rhs vector n-by-1 vstate - workspace Return: success/error Notes: 1) On output, the upper triangular portion of state->R(1:p,1:p) contains current R matrix 2) state->QTb(1:p) contains current Q^T b vector 3) A and b are destroyed */ static int tsqr_accumulate(gsl_matrix * A, gsl_vector * b, void * vstate) { tsqr_state_t *state = (tsqr_state_t *) vstate; const size_t n = A->size1; const size_t p = A->size2; if (p != state->p) { GSL_ERROR("columns of A do not match workspace", GSL_EBADLEN); } else if (n != b->size) { GSL_ERROR("A and b have different numbers of rows", GSL_EBADLEN); } else if (state->nblocks == 0 && n < p) { GSL_ERROR ("n must be >= p", GSL_EBADLEN); } else if (state->nblocks == 0) { int status; gsl_matrix_view R = gsl_matrix_submatrix(A, 0, 0, p, p); gsl_vector_view QTb = gsl_vector_subvector(state->QTb, 0, p); gsl_vector_view b1 = gsl_vector_subvector(b, 0, p); /* this is the first matrix block A_1, compute its (dense) QR decomposition */ /* compute QR decomposition of A */ status = gsl_linalg_QR_decomp_r(A, state->T); if (status) return status; /* store upper triangular R factor in state->R */ gsl_matrix_tricpy(CblasUpper, CblasNonUnit, state->R, &R.matrix); /* compute Q^T b and keep the first p elements */ gsl_linalg_QR_QTvec_r(A, state->T, b, state->work); gsl_vector_memcpy(&QTb.vector, &b1.vector); if (n > p) { gsl_vector_view b2 = gsl_vector_subvector(b, p, n - p); state->rnorm = gsl_blas_dnrm2(&b2.vector); } else state->rnorm = 0.0; state->nblocks = 1; return GSL_SUCCESS; } else { int status; /* compute QR decomposition of [ R_{i-1} ; A_i ], accounting for * sparse structure */ status = gsl_linalg_QR_UR_decomp(state->R, A, state->T); if (status) return status; /* * Compute: * * Q^T [ QTb_{i-1} ] = [ QTb_{i-1} - w ] * [ b_i ] [ b_i - V~ w ] * * where: * * w = T^T (QTb_{i-1} + V~^T b_i) * * p * V = [ I ] p * [ V~ ] n */ gsl_vector_memcpy(state->work, state->QTb); gsl_blas_dgemv(CblasTrans, 1.0, A, b, 1.0, state->work); /* w := w + V~^T b */ gsl_blas_dtrmv(CblasUpper, CblasTrans, CblasNonUnit, state->T, state->work); /* w := T^T w */ gsl_vector_sub(state->QTb, state->work); /* QTb := QTb - w */ /* update residual norm */ gsl_blas_dgemv(CblasNoTrans, -1.0, A, state->work, 1.0, b); /* b := b - V~ w */ state->rnorm = gsl_hypot(state->rnorm, gsl_blas_dnrm2(b)); return GSL_SUCCESS; } } /* tsqr_solve() Solve the least squares system: chi^2 = || QTb - R x ||^2 + lambda^2 || x ||^2 using the SVD of R Inputs: lambda - regularization parameter x - (output) solution vector p-by-1 rnorm - (output) residual norm ||b - A x|| snorm - (output) solution norm ||x|| vstate - workspace Return: success/error */ static int tsqr_solve(const double lambda, gsl_vector * x, double * rnorm, double * snorm, void * vstate) { tsqr_state_t *state = (tsqr_state_t *) vstate; if (x->size != state->p) { GSL_ERROR ("solution vector does not match workspace", GSL_EBADLEN); } else if (lambda < 0.0) { GSL_ERROR ("regularization parameter should be non-negative", GSL_EINVAL); } else { if (lambda == 0.0) { /* solve: R x = Q^T b */ gsl_vector_memcpy(x, state->QTb); gsl_blas_dtrsv(CblasUpper, CblasNoTrans, CblasNonUnit, state->R, x); *rnorm = state->rnorm; *snorm = gsl_blas_dnrm2(x); } else { int status; /* compute SVD of R if not already computed */ if (state->svd == 0) { status = tsqr_svd(state); if (status) return status; } status = gsl_multifit_linear_solve(lambda, state->R, state->QTb, x, rnorm, snorm, state->multifit_workspace_p); if (status) return status; *rnorm = gsl_hypot(*rnorm, state->rnorm); } return GSL_SUCCESS; } } /* tsqr_lcurve() Compute L-curve of least squares system Inputs: reg_param - (output) vector of regularization parameters rho - (output) vector of residual norms eta - (output) vector of solution norms vstate - workspace Return: success/error */ static int tsqr_lcurve(gsl_vector * reg_param, gsl_vector * rho, gsl_vector * eta, void * vstate) { tsqr_state_t *state = (tsqr_state_t *) vstate; int status; size_t i; /* compute SVD of R if not already computed */ if (state->svd == 0) { status = tsqr_svd(state); if (status) return status; } status = gsl_multifit_linear_lcurve(state->QTb, reg_param, rho, eta, state->multifit_workspace_p); /* now add contribution to rnorm from Q2 factor */ for (i = 0; i < rho->size; ++i) { double *rhoi = gsl_vector_ptr(rho, i); *rhoi = gsl_hypot(*rhoi, state->rnorm); } return status; } static const gsl_matrix * tsqr_R(const void * vstate) { const tsqr_state_t *state = (const tsqr_state_t *) vstate; return state->R; } static const gsl_vector * tsqr_QTb(const void * vstate) { const tsqr_state_t *state = (const tsqr_state_t *) vstate; return state->QTb; } static int tsqr_rcond(double * rcond, void * vstate) { tsqr_state_t *state = (tsqr_state_t *) vstate; return gsl_linalg_tri_rcond(CblasUpper, state->R, rcond, state->work3); } /* tsqr_svd() Compute the SVD of the upper triangular R factor. This allows us to compute the upper/lower bounds on the regularization parameter and compute the matrix reciprocal condition number. Inputs: state - workspace Return: success/error */ static int tsqr_svd(tsqr_state_t * state) { int status; status = gsl_multifit_linear_svd(state->R, state->multifit_workspace_p); if (status) { GSL_ERROR("error computing SVD of R", status); } state->svd = 1; return GSL_SUCCESS; } static const gsl_multilarge_linear_type tsqr_type = { "tsqr", tsqr_alloc, tsqr_reset, tsqr_accumulate, tsqr_solve, tsqr_rcond, tsqr_lcurve, tsqr_R, tsqr_QTb, tsqr_free }; const gsl_multilarge_linear_type * gsl_multilarge_linear_tsqr = &tsqr_type; gsl/multilarge/test.c0000644000175000017500000003524113536675317013232 0ustar eddedd/* multilarge/test.c * * Copyright (C) 2015 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include static void test_random_matrix_orth(gsl_matrix *m, const gsl_rng *r); static void test_random_matrix_ill(gsl_matrix *m, const gsl_rng *r); static void test_random_vector(gsl_vector *v, const gsl_rng *r, const double lower, const double upper); static void test_random_matrix(gsl_matrix *m, const gsl_rng *r, const double lower, const double upper); static void test_random_vector_noise(const gsl_rng *r, gsl_vector *y); static void test_compare_vectors(const double tol, const gsl_vector * a, const gsl_vector * b, const char * desc); static void test_multifit_solve(const double lambda, const gsl_matrix * X, const gsl_vector * y, const gsl_vector * wts, const gsl_vector * diagL, const gsl_matrix * L, double *rnorm, double *snorm, gsl_vector * c); static void test_multilarge_solve(const gsl_multilarge_linear_type * T, const double lambda, const gsl_matrix * X, const gsl_vector * y, gsl_vector * wts, const gsl_vector * diagL, const gsl_matrix * L, double *rnorm, double *snorm, gsl_vector * c); /* generate random square orthogonal matrix via QR decomposition */ static void test_random_matrix_orth(gsl_matrix *m, const gsl_rng *r) { const size_t M = m->size1; gsl_matrix *A = gsl_matrix_alloc(M, M); gsl_vector *tau = gsl_vector_alloc(M); gsl_matrix *R = gsl_matrix_alloc(M, M); test_random_matrix(A, r, -1.0, 1.0); gsl_linalg_QR_decomp(A, tau); gsl_linalg_QR_unpack(A, tau, m, R); gsl_matrix_free(A); gsl_matrix_free(R); gsl_vector_free(tau); } /* construct ill-conditioned matrix via SVD */ static void test_random_matrix_ill(gsl_matrix *m, const gsl_rng *r) { const size_t M = m->size1; const size_t N = m->size2; gsl_matrix *U = gsl_matrix_alloc(M, M); gsl_matrix *V = gsl_matrix_alloc(N, N); gsl_vector *S = gsl_vector_alloc(N); gsl_matrix_view Uv = gsl_matrix_submatrix(U, 0, 0, M, N); const double smin = 16.0 * GSL_DBL_EPSILON; const double smax = 10.0; const double ratio = pow(smin / smax, 1.0 / (N - 1.0)); double s; size_t j; test_random_matrix_orth(U, r); test_random_matrix_orth(V, r); /* compute U * S */ s = smax; for (j = 0; j < N; ++j) { gsl_vector_view uj = gsl_matrix_column(U, j); gsl_vector_scale(&uj.vector, s); s *= ratio; } /* compute m = (U * S) * V' */ gsl_blas_dgemm(CblasNoTrans, CblasTrans, 1.0, &Uv.matrix, V, 0.0, m); gsl_matrix_free(U); gsl_matrix_free(V); gsl_vector_free(S); } static void test_random_vector(gsl_vector *v, const gsl_rng *r, const double lower, const double upper) { size_t i; size_t N = v->size; for (i = 0; i < N; ++i) { gsl_vector_set(v, i, gsl_rng_uniform(r) * (upper - lower) + lower); } } static void test_random_matrix(gsl_matrix *m, const gsl_rng *r, const double lower, const double upper) { size_t i, j; size_t M = m->size1; size_t N = m->size2; for (i = 0; i < M; ++i) { for (j = 0; j < N; ++j) { gsl_matrix_set(m, i, j, gsl_rng_uniform(r) * (upper - lower) + lower); } } } static void test_random_vector_noise(const gsl_rng *r, gsl_vector *y) { size_t i; for (i = 0; i < y->size; ++i) { double *ptr = gsl_vector_ptr(y, i); *ptr += 1.0e-3 * gsl_rng_uniform(r); } } static void test_compare_vectors(const double tol, const gsl_vector * a, const gsl_vector * b, const char * desc) { size_t i; for (i = 0; i < a->size; ++i) { double ai = gsl_vector_get(a, i); double bi = gsl_vector_get(b, i); gsl_test_rel(bi, ai, tol, "%s i=%zu", desc, i); } } /* solve least squares system with multifit SVD */ static void test_multifit_solve(const double lambda, const gsl_matrix * X, const gsl_vector * y, const gsl_vector * wts, const gsl_vector * diagL, const gsl_matrix * L, double *rnorm, double *snorm, gsl_vector * c) { const size_t n = X->size1; const size_t p = X->size2; gsl_multifit_linear_workspace *w = gsl_multifit_linear_alloc(n, p); gsl_matrix *Xs = gsl_matrix_alloc(n, p); gsl_vector *ys = gsl_vector_alloc(n); gsl_vector *cs = gsl_vector_alloc(p); gsl_matrix *LQR = NULL; gsl_vector *Ltau = NULL; gsl_matrix *M = NULL; /* convert to standard form */ if (diagL) { gsl_multifit_linear_wstdform1(diagL, X, wts, y, Xs, ys, w); } else if (L) { const size_t m = L->size1; LQR = gsl_matrix_alloc(m, p); Ltau = gsl_vector_alloc(GSL_MIN(m, p)); M = (m >= p) ? gsl_matrix_alloc(m, p) : gsl_matrix_alloc(n, p); gsl_matrix_memcpy(LQR, L); gsl_multifit_linear_L_decomp(LQR, Ltau); gsl_multifit_linear_wstdform2(LQR, Ltau, X, wts, y, Xs, ys, M, w); } else { gsl_matrix_memcpy(Xs, X); gsl_vector_memcpy(ys, y); } gsl_multifit_linear_svd(Xs, w); gsl_multifit_linear_solve(lambda, Xs, ys, cs, rnorm, snorm, w); /* convert to general form */ if (diagL) gsl_multifit_linear_genform1(diagL, cs, c, w); else if (L) gsl_multifit_linear_wgenform2(LQR, Ltau, X, wts, y, cs, M, c, w); else gsl_vector_memcpy(c, cs); gsl_multifit_linear_free(w); gsl_matrix_free(Xs); gsl_vector_free(ys); gsl_vector_free(cs); if (LQR) gsl_matrix_free(LQR); if (Ltau) gsl_vector_free(Ltau); if (M) gsl_matrix_free(M); } /* solve least squares system with multilarge */ static void test_multilarge_solve(const gsl_multilarge_linear_type * T, const double lambda, const gsl_matrix * X, const gsl_vector * y, gsl_vector * wts, const gsl_vector * diagL, const gsl_matrix * L, double *rnorm, double *snorm, gsl_vector * c) { const size_t n = X->size1; const size_t p = X->size2; const size_t nblock = 5; const size_t nrows = n / nblock; /* number of rows per block */ gsl_multilarge_linear_workspace *w = gsl_multilarge_linear_alloc(T, p); gsl_matrix *Xs = gsl_matrix_alloc(nrows, p); gsl_vector *ys = gsl_vector_alloc(nrows); gsl_vector *cs = gsl_vector_alloc(p); gsl_matrix *LQR = NULL; gsl_vector *Ltau = NULL; size_t rowidx = 0; if (L) { const size_t m = L->size1; LQR = gsl_matrix_alloc(m, p); Ltau = gsl_vector_alloc(p); gsl_matrix_memcpy(LQR, L); gsl_multilarge_linear_L_decomp(LQR, Ltau); } while (rowidx < n) { size_t nleft = n - rowidx; size_t nr = GSL_MIN(nrows, nleft); gsl_matrix_const_view Xv = gsl_matrix_const_submatrix(X, rowidx, 0, nr, p); gsl_vector_const_view yv = gsl_vector_const_subvector(y, rowidx, nr); gsl_vector_view wv; gsl_matrix_view Xsv = gsl_matrix_submatrix(Xs, 0, 0, nr, p); gsl_vector_view ysv = gsl_vector_subvector(ys, 0, nr); if (wts) wv = gsl_vector_subvector(wts, rowidx, nr); /* convert to standard form */ if (diagL) { gsl_multilarge_linear_wstdform1(diagL, &Xv.matrix, wts ? &wv.vector : NULL, &yv.vector, &Xsv.matrix, &ysv.vector, w); } else if (L) { gsl_multilarge_linear_wstdform2(LQR, Ltau, &Xv.matrix, wts ? &wv.vector : NULL, &yv.vector, &Xsv.matrix, &ysv.vector, w); } else { gsl_matrix_memcpy(&Xsv.matrix, &Xv.matrix); gsl_vector_memcpy(&ysv.vector, &yv.vector); } gsl_multilarge_linear_accumulate(&Xsv.matrix, &ysv.vector, w); rowidx += nr; } gsl_multilarge_linear_solve(lambda, cs, rnorm, snorm, w); if (diagL) gsl_multilarge_linear_genform1(diagL, cs, c, w); else if (L) gsl_multilarge_linear_genform2(LQR, Ltau, cs, c, w); else gsl_vector_memcpy(c, cs); gsl_multilarge_linear_free(w); gsl_matrix_free(Xs); gsl_vector_free(ys); gsl_vector_free(cs); if (LQR) gsl_matrix_free(LQR); if (Ltau) gsl_vector_free(Ltau); } static void test_random(const gsl_multilarge_linear_type * T, const size_t n, const size_t p, const double tol, const gsl_rng * r) { const double tol1 = 1.0e3 * tol; gsl_matrix *X = gsl_matrix_alloc(n, p); gsl_vector *y = gsl_vector_alloc(n); gsl_vector *c = gsl_vector_alloc(p); gsl_vector *w = gsl_vector_alloc(n); gsl_vector *diagL = gsl_vector_alloc(p); gsl_matrix *Lsqr = gsl_matrix_alloc(p, p); gsl_matrix *Ltall = gsl_matrix_alloc(5*p, p); gsl_vector *c0 = gsl_vector_alloc(p); gsl_vector *c1 = gsl_vector_alloc(p); double rnorm0, snorm0; double rnorm1, snorm1; char str[2048]; size_t i; /* generate LS system */ /*XXXtest_random_matrix_ill(X, r);*/ test_random_matrix(X, r, -1.0, 1.0); test_random_vector(c, r, -1.0, 1.0); /* compute y = X c + noise */ gsl_blas_dgemv(CblasNoTrans, 1.0, X, c, 0.0, y); test_random_vector_noise(r, y); /* random weights */ test_random_vector(w, r, 0.0, 1.0); /* random diag(L) */ test_random_vector(diagL, r, 1.0, 5.0); /* random square L */ test_random_matrix(Lsqr, r, -5.0, 5.0); /* random tall L */ test_random_matrix(Ltall, r, -10.0, 10.0); for (i = 0; i < 5; ++i) { double lambda = i == 0 ? 0.0 : pow(10.0, -(double) i); /* unweighted with L = I */ { test_multifit_solve(lambda, X, y, NULL, NULL, NULL, &rnorm0, &snorm0, c0); test_multilarge_solve(T, lambda, X, y, NULL, NULL, NULL, &rnorm1, &snorm1, c1); sprintf(str, "random %s unweighted stdform n=%zu p=%zu lambda=%g", T->name, n, p, lambda); test_compare_vectors(tol, c0, c1, str); gsl_test_rel(rnorm1, rnorm0, tol1, "rnorm %s", str); gsl_test_rel(snorm1, snorm0, tol, "snorm %s", str); } /* weighted, L = diag(L) */ { test_multifit_solve(lambda, X, y, w, diagL, NULL, &rnorm0, &snorm0, c0); test_multilarge_solve(T, lambda, X, y, w, diagL, NULL, &rnorm1, &snorm1, c1); sprintf(str, "random %s weighted diag(L) n=%zu p=%zu lambda=%g", T->name, n, p, lambda); test_compare_vectors(tol, c0, c1, str); gsl_test_rel(rnorm1, rnorm0, tol1, "rnorm %s", str); gsl_test_rel(snorm1, snorm0, tol, "snorm %s", str); } /* unweighted, L = diag(L) */ { test_multifit_solve(lambda, X, y, NULL, diagL, NULL, &rnorm0, &snorm0, c0); test_multilarge_solve(T, lambda, X, y, NULL, diagL, NULL, &rnorm1, &snorm1, c1); sprintf(str, "random %s unweighted diag(L) n=%zu p=%zu lambda=%g", T->name, n, p, lambda); test_compare_vectors(tol, c0, c1, str); gsl_test_rel(rnorm1, rnorm0, tol1, "rnorm %s", str); gsl_test_rel(snorm1, snorm0, tol, "snorm %s", str); } /* weighted, L = square */ { test_multifit_solve(lambda, X, y, w, NULL, Lsqr, &rnorm0, &snorm0, c0); test_multilarge_solve(T, lambda, X, y, w, NULL, Lsqr, &rnorm1, &snorm1, c1); sprintf(str, "random %s weighted Lsqr n=%zu p=%zu lambda=%g", T->name, n, p, lambda); test_compare_vectors(tol, c0, c1, str); gsl_test_rel(rnorm1, rnorm0, tol1, "rnorm %s", str); gsl_test_rel(snorm1, snorm0, tol, "snorm %s", str); } /* unweighted, L = square */ { test_multifit_solve(lambda, X, y, NULL, NULL, Lsqr, &rnorm0, &snorm0, c0); test_multilarge_solve(T, lambda, X, y, NULL, NULL, Lsqr, &rnorm1, &snorm1, c1); sprintf(str, "random %s unweighted Lsqr n=%zu p=%zu lambda=%g", T->name, n, p, lambda); test_compare_vectors(tol, c0, c1, str); gsl_test_rel(rnorm1, rnorm0, tol1, "rnorm %s", str); gsl_test_rel(snorm1, snorm0, tol, "snorm %s", str); } /* weighted, L = tall */ { test_multifit_solve(lambda, X, y, w, NULL, Ltall, &rnorm0, &snorm0, c0); test_multilarge_solve(T, lambda, X, y, w, NULL, Ltall, &rnorm1, &snorm1, c1); sprintf(str, "random %s weighted Ltall n=%zu p=%zu lambda=%g", T->name, n, p, lambda); test_compare_vectors(tol, c0, c1, str); gsl_test_rel(rnorm1, rnorm0, tol1, "rnorm %s", str); gsl_test_rel(snorm1, snorm0, tol, "snorm %s", str); } /* unweighted, L = tall */ { test_multifit_solve(lambda, X, y, NULL, NULL, Ltall, &rnorm0, &snorm0, c0); test_multilarge_solve(T, lambda, X, y, NULL, NULL, Ltall, &rnorm1, &snorm1, c1); sprintf(str, "random %s unweighted Ltall n=%zu p=%zu lambda=%g", T->name, n, p, lambda); test_compare_vectors(tol, c0, c1, str); gsl_test_rel(rnorm1, rnorm0, tol1, "rnorm %s", str); gsl_test_rel(snorm1, snorm0, tol, "snorm %s", str); } } gsl_matrix_free(X); gsl_vector_free(y); gsl_vector_free(c); gsl_vector_free(w); gsl_vector_free(diagL); gsl_matrix_free(Lsqr); gsl_matrix_free(Ltall); gsl_vector_free(c0); gsl_vector_free(c1); } int main (void) { gsl_rng *r = gsl_rng_alloc(gsl_rng_default); gsl_ieee_env_setup(); { const double tol1 = 1.0e-8; const double tol2 = 1.0e-11; const size_t n_vals[] = { 200, 356, 501 }; const size_t p_vals[] = { 10, 21, 34 }; size_t i; for (i = 0; i < 1; ++i) { size_t n = n_vals[i]; size_t p = p_vals[i]; /* generate random ill-conditioned LS system and test */ test_random(gsl_multilarge_linear_normal, n, p, tol1, r); test_random(gsl_multilarge_linear_tsqr, n, p, tol2, r); } } gsl_rng_free(r); exit (gsl_test_summary ()); } gsl/ode-initval2/0000755000175000017500000000000014057135461012220 5ustar eddeddgsl/ode-initval2/modnewton1.c0000644000175000017500000002571613536674414014501 0ustar eddedd/* ode-initval2/modnewton1.c * * Copyright (C) 2008, 2009, 2010 Tuomo Keskitalo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* A modified Newton iteration method for solving non-linear equations in implicit Runge-Kutta methods. */ /* References: Ascher, U.M., Petzold, L.R., Computer methods for ordinary differential and differential-algebraic equations, SIAM, Philadelphia, 1998. ISBN 0898714125, 9780898714128 Hairer, E., Wanner, G., Solving Ordinary Differential Equations II: Stiff and Differential-Algebraic Problems, Springer, 1996. ISBN 3540604529, 9783540604525 */ #include #include #include #include #include #include #include #include #include "odeiv_util.h" typedef struct { /* iteration matrix I - h A (*) J */ gsl_matrix *IhAJ; /* permutation for LU-decomposition */ gsl_permutation *p; /* difference vector for kth Newton iteration */ gsl_vector *dYk; /* scaled dYk with desired error level */ gsl_vector *dScal; /* current Runge-Kutta points (absolute values) */ double *Yk; /* function values at points Yk */ double *fYk; /* right hand side of Newton iteration formula */ gsl_vector *rhs; /* stopping criterion value from previous step */ double eeta_prev; } modnewton1_state_t; static void * modnewton1_alloc (size_t dim, size_t stage) { modnewton1_state_t *state = (modnewton1_state_t *) malloc (sizeof (modnewton1_state_t)); if (state == 0) { GSL_ERROR_NULL ("failed to allocate space for modnewton1_state_t", GSL_ENOMEM); } state->IhAJ = gsl_matrix_alloc (dim * stage, dim * stage); if (state->IhAJ == 0) { free (state); GSL_ERROR_NULL ("failed to allocate space for IhAJ", GSL_ENOMEM); } state->p = gsl_permutation_alloc (dim * stage); if (state->p == 0) { gsl_matrix_free (state->IhAJ); free (state); GSL_ERROR_NULL ("failed to allocate space for p", GSL_ENOMEM); } state->dYk = gsl_vector_alloc (dim * stage); if (state->dYk == 0) { gsl_permutation_free (state->p); gsl_matrix_free (state->IhAJ); free (state); GSL_ERROR_NULL ("failed to allocate space for dYk", GSL_ENOMEM); } state->dScal = gsl_vector_alloc (dim * stage); if (state->dScal == 0) { gsl_vector_free (state->dYk); gsl_permutation_free (state->p); gsl_matrix_free (state->IhAJ); free (state); GSL_ERROR_NULL ("failed to allocate space for dScal", GSL_ENOMEM); } state->Yk = (double *) malloc (dim * stage * sizeof (double)); if (state->Yk == 0) { gsl_vector_free (state->dScal); gsl_vector_free (state->dYk); gsl_permutation_free (state->p); gsl_matrix_free (state->IhAJ); free (state); GSL_ERROR_NULL ("failed to allocate space for Yk", GSL_ENOMEM); } state->fYk = (double *) malloc (dim * stage * sizeof (double)); if (state->fYk == 0) { free (state->Yk); gsl_vector_free (state->dScal); gsl_vector_free (state->dYk); gsl_permutation_free (state->p); gsl_matrix_free (state->IhAJ); free (state); GSL_ERROR_NULL ("failed to allocate space for Yk", GSL_ENOMEM); } state->rhs = gsl_vector_alloc (dim * stage); if (state->rhs == 0) { free (state->fYk); free (state->Yk); gsl_vector_free (state->dScal); gsl_vector_free (state->dYk); gsl_permutation_free (state->p); gsl_matrix_free (state->IhAJ); free (state); GSL_ERROR_NULL ("failed to allocate space for rhs", GSL_ENOMEM); } state->eeta_prev = GSL_DBL_MAX; return state; } static int modnewton1_init (void *vstate, const gsl_matrix * A, const double h, const gsl_matrix * dfdy, const gsl_odeiv2_system * sys) { /* Initializes the method by forming the iteration matrix IhAJ and generating its LU-decomposition */ modnewton1_state_t *state = (modnewton1_state_t *) vstate; gsl_matrix *const IhAJ = state->IhAJ; gsl_permutation *const p = state->p; const size_t dim = sys->dimension; const size_t stage = A->size1; state->eeta_prev = GSL_DBL_MAX; /* Generate IhAJ */ { size_t i, j, k, m; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) for (k = 0; k < stage; k++) for (m = 0; m < stage; m++) { size_t x = dim * k + i; size_t y = dim * m + j; if (x != y) gsl_matrix_set (IhAJ, x, y, -h * gsl_matrix_get (A, k, m) * gsl_matrix_get (dfdy, i, j)); else gsl_matrix_set (IhAJ, x, y, 1.0 - h * gsl_matrix_get (A, k, m) * gsl_matrix_get (dfdy, i, j)); } } /* decompose */ { int signum; int s = gsl_linalg_LU_decomp (IhAJ, p, &signum); if (s != GSL_SUCCESS) return s; } return GSL_SUCCESS; } static int modnewton1_solve (void *vstate, const gsl_matrix * A, const double c[], const double t, const double h, const double y0[], const gsl_odeiv2_system * sys, double YZ[], const double errlev[]) { /* Solves the non-linear equation system resulting from implicit Runge-Kutta methods by a modified Newton iteration. The modified Newton iteration with this problem is stated in the form IhAJ * dYk = rhs in which IhAJ is the iteration matrix: IhAJ = (I - hA (*) J) in which (*) is the Kronecker matrix product (size of IhAJ = dim*stage, dim*stage), dYk is the Runge-Kutta point (Y) difference vector for kth Newton iteration: dYk = Y(k+1) - Y(k), and rhs = Y(k) - y0 - h * sum j=1..stage (a_j * f(Y(k))) This function solves dYk by LU-decomposition of IhAJ with partial pivoting. */ modnewton1_state_t *state = (modnewton1_state_t *) vstate; gsl_matrix *const IhAJ = state->IhAJ; gsl_permutation *const p = state->p; gsl_vector *const dYk = state->dYk; double *const Yk = state->Yk; double *const fYk = state->fYk; gsl_vector *const rhs = state->rhs; double *const eeta_prev = &(state->eeta_prev); gsl_vector *const dScal = state->dScal; const size_t dim = sys->dimension; const size_t stage = A->size1; int status = GSL_CONTINUE; /* Convergence status for Newton iteration */ /* Set starting values for iteration. Use starting values of Y(k) = y0. FIXME: Implement better initial guess described in Hairer and Wanner. */ { size_t j, m; gsl_vector_set_zero (dYk); for (j = 0; j < stage; j++) for (m = 0; m < dim; m++) Yk[j * dim + m] = y0[m]; } /* Loop modified Newton iterations */ { size_t iter = 0; size_t j, m, n; /* Maximum number of Newton iterations. */ const size_t max_iter = 7; double dScal_norm = 0.0; /* Newton iteration step length */ double dScal_norm_prev = 0.0; /* Previous dScal_norm */ while (status == GSL_CONTINUE && iter < max_iter) { iter++; /* Update Y(k) and evaluate function */ for (j = 0; j < stage; j++) { for (m = 0; m < dim; m++) { Yk[j * dim + m] += gsl_vector_get (dYk, j * dim + m); } { int s = GSL_ODEIV_FN_EVAL (sys, t + c[j] * h, &Yk[j * dim], &fYk[j * dim]); if (s != GSL_SUCCESS) { return s; } } } /* Calculate rhs */ for (j = 0; j < stage; j++) for (m = 0; m < dim; m++) { double sum = 0; for (n = 0; n < stage; n++) sum += gsl_matrix_get (A, j, n) * fYk[n * dim + m]; gsl_vector_set (rhs, j * dim + m, -1.0 * Yk[j * dim + m] + y0[m] + h * sum); } /* Solve dYk */ { int s = gsl_linalg_LU_solve (IhAJ, p, rhs, dYk); if (s != GSL_SUCCESS) { return s; } } /* Evaluate convergence according to method by Hairer and Wanner, section IV.8. The iteration step is normalized by desired error level before calculation of the norm, to take the tolerance on each component of y into account. */ { /* relative change in two Newton iteration steps */ double theta_k; /* transformation of theta_k */ double eeta_k = 0.0; for (j = 0; j < stage; j++) for (m = 0; m < dim; m++) { gsl_vector_set (dScal, j * dim + m, gsl_vector_get (dYk, j * dim + m) / errlev[m]); } dScal_norm_prev = dScal_norm; dScal_norm = gsl_blas_dnrm2 (dScal); theta_k = dScal_norm / dScal_norm_prev; if (iter > 1) { /* check for increase in step size, which indicates divergence */ if (theta_k >= 1.0) { return GSL_FAILURE; } eeta_k = theta_k / (1.0 - theta_k); } else { eeta_k = pow (GSL_MAX_DBL (*eeta_prev, GSL_DBL_EPSILON), 0.8); } *eeta_prev = eeta_k; if (eeta_k * dScal_norm < 1.0) { status = GSL_SUCCESS; } } } } /* No convergence reached within allowed iterations */ if (status != GSL_SUCCESS) { return GSL_FAILURE; } /* Give solution in YZ */ else { size_t j, m; for (j = 0; j < stage; j++) for (m = 0; m < dim; m++) YZ[j * dim + m] = Yk[j * dim + m] + gsl_vector_get (dYk, j * dim + m); return status; } } static void modnewton1_free (void *vstate) { modnewton1_state_t *state = (modnewton1_state_t *) vstate; gsl_vector_free (state->rhs); free (state->fYk); free (state->Yk); gsl_vector_free (state->dScal); gsl_vector_free (state->dYk); gsl_permutation_free (state->p); gsl_matrix_free (state->IhAJ); free (state); } gsl/ode-initval2/Makefile.in0000664000175000017500000011411514057135461014272 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = ode-initval2 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslodeiv2_la_LIBADD = am_libgslodeiv2_la_OBJECTS = control.lo cstd.lo cscal.lo evolve.lo \ step.lo rk2.lo rk2imp.lo rk4.lo rk4imp.lo rkf45.lo rk8pd.lo \ rkck.lo bsimp.lo rk1imp.lo msadams.lo msbdf.lo driver.lo libgslodeiv2_la_OBJECTS = $(am_libgslodeiv2_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslodeiv2.la ../linalg/libgsllinalg.la \ ../blas/libgslblas.la ../cblas/libgslcblas.la \ ../matrix/libgslmatrix.la ../permutation/libgslpermutation.la \ ../vector/libgslvector.la ../block/libgslblock.la \ ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/bsimp.Plo ./$(DEPDIR)/control.Plo \ ./$(DEPDIR)/cscal.Plo ./$(DEPDIR)/cstd.Plo \ ./$(DEPDIR)/driver.Plo ./$(DEPDIR)/evolve.Plo \ ./$(DEPDIR)/msadams.Plo ./$(DEPDIR)/msbdf.Plo \ ./$(DEPDIR)/rk1imp.Plo ./$(DEPDIR)/rk2.Plo \ ./$(DEPDIR)/rk2imp.Plo ./$(DEPDIR)/rk4.Plo \ ./$(DEPDIR)/rk4imp.Plo ./$(DEPDIR)/rk8pd.Plo \ ./$(DEPDIR)/rkck.Plo ./$(DEPDIR)/rkf45.Plo \ ./$(DEPDIR)/step.Plo ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslodeiv2_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslodeiv2_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslodeiv2.la pkginclude_HEADERS = gsl_odeiv2.h AM_CPPFLAGS = -I$(top_srcdir) libgslodeiv2_la_SOURCES = control.c cstd.c cscal.c evolve.c step.c rk2.c rk2imp.c rk4.c rk4imp.c rkf45.c rk8pd.c rkck.c bsimp.c rk1imp.c msadams.c msbdf.c driver.c noinst_HEADERS = odeiv_util.h step_utils.c rksubs.c modnewton1.c control_utils.c TESTS = $(check_PROGRAMS) test_LDADD = libgslodeiv2.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../permutation/libgslpermutation.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ode-initval2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ode-initval2/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslodeiv2.la: $(libgslodeiv2_la_OBJECTS) $(libgslodeiv2_la_DEPENDENCIES) $(EXTRA_libgslodeiv2_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslodeiv2_la_OBJECTS) $(libgslodeiv2_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bsimp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/control.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cscal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cstd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/driver.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evolve.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msadams.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msbdf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rk1imp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rk2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rk2imp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rk4.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rk4imp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rk8pd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rkck.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rkf45.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/step.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/bsimp.Plo -rm -f ./$(DEPDIR)/control.Plo -rm -f ./$(DEPDIR)/cscal.Plo -rm -f ./$(DEPDIR)/cstd.Plo -rm -f ./$(DEPDIR)/driver.Plo -rm -f ./$(DEPDIR)/evolve.Plo -rm -f ./$(DEPDIR)/msadams.Plo -rm -f ./$(DEPDIR)/msbdf.Plo -rm -f ./$(DEPDIR)/rk1imp.Plo -rm -f ./$(DEPDIR)/rk2.Plo -rm -f ./$(DEPDIR)/rk2imp.Plo -rm -f ./$(DEPDIR)/rk4.Plo -rm -f ./$(DEPDIR)/rk4imp.Plo -rm -f ./$(DEPDIR)/rk8pd.Plo -rm -f ./$(DEPDIR)/rkck.Plo -rm -f ./$(DEPDIR)/rkf45.Plo -rm -f ./$(DEPDIR)/step.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/bsimp.Plo -rm -f ./$(DEPDIR)/control.Plo -rm -f ./$(DEPDIR)/cscal.Plo -rm -f ./$(DEPDIR)/cstd.Plo -rm -f ./$(DEPDIR)/driver.Plo -rm -f ./$(DEPDIR)/evolve.Plo -rm -f ./$(DEPDIR)/msadams.Plo -rm -f ./$(DEPDIR)/msbdf.Plo -rm -f ./$(DEPDIR)/rk1imp.Plo -rm -f ./$(DEPDIR)/rk2.Plo -rm -f ./$(DEPDIR)/rk2imp.Plo -rm -f ./$(DEPDIR)/rk4.Plo -rm -f ./$(DEPDIR)/rk4imp.Plo -rm -f ./$(DEPDIR)/rk8pd.Plo -rm -f ./$(DEPDIR)/rkck.Plo -rm -f ./$(DEPDIR)/rkf45.Plo -rm -f ./$(DEPDIR)/step.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/ode-initval2/bsimp.c0000644000175000017500000003316013536674414013510 0ustar eddedd/* ode-initval2/bsimp.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Bulirsch-Stoer Implicit */ /* Author: G. Jungman */ /* Bader-Deuflhard implicit extrapolative stepper. * [Numer. Math., 41, 373 (1983)] */ #include #include #include #include #include #include #include #include "odeiv_util.h" #include "step_utils.c" #define SEQUENCE_COUNT 8 #define SEQUENCE_MAX 7 /* Bader-Deuflhard extrapolation sequence */ static const int bd_sequence[SEQUENCE_COUNT] = { 2, 6, 10, 14, 22, 34, 50, 70 }; typedef struct { gsl_matrix *d; /* workspace for extrapolation */ gsl_matrix *a_mat; /* workspace for linear system matrix */ gsl_permutation *p_vec; /* workspace for LU permutation */ double x[SEQUENCE_MAX]; /* workspace for extrapolation */ /* state info */ size_t k_current; size_t k_choice; double h_next; double eps; /* workspace for extrapolation step */ double *yp; double *y_save; double *yerr_save; double *y_extrap_save; double *y_extrap_sequence; double *extrap_work; double *dfdt; double *y_temp; double *delta_temp; double *weight; gsl_matrix *dfdy; /* workspace for the basic stepper */ double *rhs_temp; double *delta; /* order of last step */ size_t order; } bsimp_state_t; /* Compute weighting factor */ static void compute_weights (const double y[], double w[], size_t dim) { size_t i; for (i = 0; i < dim; i++) { double u = fabs (y[i]); w[i] = (u > 0.0) ? u : 1.0; } } /* Calculate a choice for the "order" of the method, using the * Deuflhard criteria. */ static size_t bsimp_deuf_kchoice (double eps, size_t dimension) { const double safety_f = 0.25; const double small_eps = safety_f * eps; double a_work[SEQUENCE_COUNT]; double alpha[SEQUENCE_MAX][SEQUENCE_MAX]; int i, k; a_work[0] = bd_sequence[0] + 1.0; for (k = 0; k < SEQUENCE_MAX; k++) { a_work[k + 1] = a_work[k] + bd_sequence[k + 1]; } for (i = 0; i < SEQUENCE_MAX; i++) { alpha[i][i] = 1.0; for (k = 0; k < i; k++) { const double tmp1 = a_work[k + 1] - a_work[i + 1]; const double tmp2 = (a_work[i + 1] - a_work[0] + 1.0) * (2 * k + 1); alpha[k][i] = pow (small_eps, tmp1 / tmp2); } } a_work[0] += dimension; for (k = 0; k < SEQUENCE_MAX; k++) { a_work[k + 1] = a_work[k] + bd_sequence[k + 1]; } for (k = 0; k < SEQUENCE_MAX - 1; k++) { if (a_work[k + 2] > a_work[k + 1] * alpha[k][k + 1]) break; } return k; } static void poly_extrap (gsl_matrix * d, const double x[], const unsigned int i_step, const double x_i, const double y_i[], double y_0[], double y_0_err[], double work[], const size_t dim) { size_t j, k; DBL_MEMCPY (y_0_err, y_i, dim); DBL_MEMCPY (y_0, y_i, dim); if (i_step == 0) { for (j = 0; j < dim; j++) { gsl_matrix_set (d, 0, j, y_i[j]); } } else { DBL_MEMCPY (work, y_i, dim); for (k = 0; k < i_step; k++) { double delta = 1.0 / (x[i_step - k - 1] - x_i); const double f1 = delta * x_i; const double f2 = delta * x[i_step - k - 1]; for (j = 0; j < dim; j++) { const double q_kj = gsl_matrix_get (d, k, j); gsl_matrix_set (d, k, j, y_0_err[j]); delta = work[j] - q_kj; y_0_err[j] = f1 * delta; work[j] = f2 * delta; y_0[j] += y_0_err[j]; } } for (j = 0; j < dim; j++) { gsl_matrix_set (d, i_step, j, y_0_err[j]); } } } /* Basic implicit Bulirsch-Stoer step. Divide the step h_total into * n_step smaller steps and do the Bader-Deuflhard semi-implicit * iteration. */ static int bsimp_step_local (void *vstate, size_t dim, const double t0, const double h_total, const unsigned int n_step, const double y[], const double yp[], const double dfdt[], const gsl_matrix * dfdy, double y_out[], const gsl_odeiv2_system * sys) { bsimp_state_t *state = (bsimp_state_t *) vstate; gsl_matrix *const a_mat = state->a_mat; gsl_permutation *const p_vec = state->p_vec; double *const delta = state->delta; double *const y_temp = state->y_temp; double *const delta_temp = state->delta_temp; double *const rhs_temp = state->rhs_temp; double *const w = state->weight; gsl_vector_view y_temp_vec = gsl_vector_view_array (y_temp, dim); gsl_vector_view delta_temp_vec = gsl_vector_view_array (delta_temp, dim); gsl_vector_view rhs_temp_vec = gsl_vector_view_array (rhs_temp, dim); const double h = h_total / n_step; double t = t0 + h; double sum; /* This is the factor sigma referred to in equation 3.4 of the paper. A relative change in y exceeding sigma indicates a runaway behavior. According to the authors suitable values for sigma are >>1. I have chosen a value of 100*dim. BJG */ const double max_sum = 100.0 * dim; int signum, status; size_t i, j; size_t n_inter; /* Calculate the matrix for the linear system. */ for (i = 0; i < dim; i++) { for (j = 0; j < dim; j++) { gsl_matrix_set (a_mat, i, j, -h * gsl_matrix_get (dfdy, i, j)); } gsl_matrix_set (a_mat, i, i, gsl_matrix_get (a_mat, i, i) + 1.0); } /* LU decomposition for the linear system. */ gsl_linalg_LU_decomp (a_mat, p_vec, &signum); /* Compute weighting factors */ compute_weights (y, w, dim); /* Initial step. */ for (i = 0; i < dim; i++) { y_temp[i] = h * (yp[i] + h * dfdt[i]); } gsl_linalg_LU_solve (a_mat, p_vec, &y_temp_vec.vector, &delta_temp_vec.vector); sum = 0.0; for (i = 0; i < dim; i++) { const double di = delta_temp[i]; delta[i] = di; y_temp[i] = y[i] + di; sum += fabs (di) / w[i]; } if (sum > max_sum) { return GSL_EFAILED; } /* Intermediate steps. */ status = GSL_ODEIV_FN_EVAL (sys, t, y_temp, y_out); if (status) { return status; } for (n_inter = 1; n_inter < n_step; n_inter++) { for (i = 0; i < dim; i++) { rhs_temp[i] = h * y_out[i] - delta[i]; } gsl_linalg_LU_solve (a_mat, p_vec, &rhs_temp_vec.vector, &delta_temp_vec.vector); sum = 0.0; for (i = 0; i < dim; i++) { delta[i] += 2.0 * delta_temp[i]; y_temp[i] += delta[i]; sum += fabs (delta[i]) / w[i]; } if (sum > max_sum) { return GSL_EFAILED; } t += h; status = GSL_ODEIV_FN_EVAL (sys, t, y_temp, y_out); if (status) { return status; } } /* Final step. */ for (i = 0; i < dim; i++) { rhs_temp[i] = h * y_out[i] - delta[i]; } gsl_linalg_LU_solve (a_mat, p_vec, &rhs_temp_vec.vector, &delta_temp_vec.vector); sum = 0.0; for (i = 0; i < dim; i++) { y_out[i] = y_temp[i] + delta_temp[i]; sum += fabs (delta_temp[i]) / w[i]; } if (sum > max_sum) { return GSL_EFAILED; } return GSL_SUCCESS; } static void * bsimp_alloc (size_t dim) { bsimp_state_t *state = (bsimp_state_t *) malloc (sizeof (bsimp_state_t)); state->d = gsl_matrix_alloc (SEQUENCE_MAX, dim); state->a_mat = gsl_matrix_alloc (dim, dim); state->p_vec = gsl_permutation_alloc (dim); state->yp = (double *) malloc (dim * sizeof (double)); state->y_save = (double *) malloc (dim * sizeof (double)); state->yerr_save = (double *) malloc (dim * sizeof (double)); state->y_extrap_save = (double *) malloc (dim * sizeof (double)); state->y_extrap_sequence = (double *) malloc (dim * sizeof (double)); state->extrap_work = (double *) malloc (dim * sizeof (double)); state->dfdt = (double *) malloc (dim * sizeof (double)); state->y_temp = (double *) malloc (dim * sizeof (double)); state->delta_temp = (double *) malloc (dim * sizeof (double)); state->weight = (double *) malloc (dim * sizeof (double)); state->dfdy = gsl_matrix_alloc (dim, dim); state->rhs_temp = (double *) malloc (dim * sizeof (double)); state->delta = (double *) malloc (dim * sizeof (double)); { size_t k_choice = bsimp_deuf_kchoice (GSL_SQRT_DBL_EPSILON, dim); /*FIXME: choice of epsilon? */ state->k_choice = k_choice; state->k_current = k_choice; state->order = 2 * k_choice; } state->h_next = -GSL_SQRT_DBL_MAX; return state; } /* Perform the basic semi-implicit extrapolation * step, of size h, at a Deuflhard determined order. */ static int bsimp_apply (void *vstate, size_t dim, double t, double h, double y[], double yerr[], const double dydt_in[], double dydt_out[], const gsl_odeiv2_system * sys) { bsimp_state_t *state = (bsimp_state_t *) vstate; double *const x = state->x; double *const yp = state->yp; double *const y_save = state->y_save; double *const yerr_save = state->yerr_save; double *const y_extrap_sequence = state->y_extrap_sequence; double *const y_extrap_save = state->y_extrap_save; double *const extrap_work = state->extrap_work; double *const dfdt = state->dfdt; gsl_matrix *d = state->d; gsl_matrix *dfdy = state->dfdy; const double t_local = t; size_t i, k; if (h + t_local == t_local) { return GSL_EUNDRFLW; /* FIXME: error condition */ } DBL_MEMCPY (y_extrap_save, y, dim); /* Save inputs */ DBL_MEMCPY (y_save, y, dim); DBL_MEMCPY (yerr_save, yerr, dim); /* Evaluate the derivative. */ if (dydt_in != NULL) { DBL_MEMCPY (yp, dydt_in, dim); } else { int s = GSL_ODEIV_FN_EVAL (sys, t_local, y, yp); if (s != GSL_SUCCESS) { return s; } } /* Evaluate the Jacobian for the system. */ { int s = GSL_ODEIV_JA_EVAL (sys, t_local, y, dfdy->data, dfdt); if (s != GSL_SUCCESS) { return s; } } /* Make a series of refined extrapolations, * up to the specified maximum order, which * was calculated based on the Deuflhard * criterion upon state initialization. */ for (k = 0; k <= state->k_current; k++) { const unsigned int N = bd_sequence[k]; const double r = (h / N); const double x_k = r * r; int status = bsimp_step_local (state, dim, t_local, h, N, y_extrap_save, yp, dfdt, dfdy, y_extrap_sequence, sys); if (status == GSL_EFAILED) { /* If the local step fails, set the error to infinity in order to force a reduction in the step size */ for (i = 0; i < dim; i++) { yerr[i] = GSL_POSINF; } break; } else if (status != GSL_SUCCESS) { return status; } x[k] = x_k; poly_extrap (d, x, k, x_k, y_extrap_sequence, y, yerr, extrap_work, dim); } /* Evaluate dydt_out[]. */ if (dydt_out != NULL) { int s = GSL_ODEIV_FN_EVAL (sys, t + h, y, dydt_out); if (s != GSL_SUCCESS) { DBL_MEMCPY (y, y_save, dim); DBL_MEMCPY (yerr, yerr_save, dim); return s; } } return GSL_SUCCESS; } static unsigned int bsimp_order (void *vstate) { bsimp_state_t *state = (bsimp_state_t *) vstate; return state->order; } static int bsimp_reset (void *vstate, size_t dim) { bsimp_state_t *state = (bsimp_state_t *) vstate; state->h_next = 0; DBL_ZERO_MEMSET (state->yp, dim); return GSL_SUCCESS; } static void bsimp_free (void *vstate) { bsimp_state_t *state = (bsimp_state_t *) vstate; free (state->delta); free (state->rhs_temp); gsl_matrix_free (state->dfdy); free (state->weight); free (state->delta_temp); free (state->y_temp); free (state->dfdt); free (state->extrap_work); free (state->y_extrap_sequence); free (state->y_extrap_save); free (state->y_save); free (state->yerr_save); free (state->yp); gsl_permutation_free (state->p_vec); gsl_matrix_free (state->a_mat); gsl_matrix_free (state->d); free (state); } static const gsl_odeiv2_step_type bsimp_type = { "bsimp", /* name */ 1, /* can use dydt_in */ 1, /* gives exact dydt_out */ &bsimp_alloc, &bsimp_apply, &stepper_set_driver_null, &bsimp_reset, &bsimp_order, &bsimp_free }; const gsl_odeiv2_step_type *gsl_odeiv2_step_bsimp = &bsimp_type; gsl/ode-initval2/step.c0000664000175000017500000000503714057135461013346 0ustar eddedd/* ode-initval/odeiv.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include gsl_odeiv2_step * gsl_odeiv2_step_alloc (const gsl_odeiv2_step_type * T, size_t dim) { gsl_odeiv2_step *s = (gsl_odeiv2_step *) malloc (sizeof (gsl_odeiv2_step)); if (s == 0) { GSL_ERROR_NULL ("failed to allocate space for ode struct", GSL_ENOMEM); }; s->type = T; s->dimension = dim; s->state = s->type->alloc (dim); if (s->state == 0) { free (s); /* exception in constructor, avoid memory leak */ GSL_ERROR_NULL ("failed to allocate space for ode state", GSL_ENOMEM); }; return s; } const char * gsl_odeiv2_step_name (const gsl_odeiv2_step * s) { return s->type->name; } unsigned int gsl_odeiv2_step_order (const gsl_odeiv2_step * s) { return s->type->order (s->state); } int gsl_odeiv2_step_apply (gsl_odeiv2_step * s, double t, double h, double y[], double yerr[], const double dydt_in[], double dydt_out[], const gsl_odeiv2_system * dydt) { return s->type->apply (s->state, s->dimension, t, h, y, yerr, dydt_in, dydt_out, dydt); } int gsl_odeiv2_step_reset (gsl_odeiv2_step * s) { return s->type->reset (s->state, s->dimension); } void gsl_odeiv2_step_free (gsl_odeiv2_step * s) { RETURN_IF_NULL (s); s->type->free (s->state); free (s); } int gsl_odeiv2_step_set_driver (gsl_odeiv2_step * s, const gsl_odeiv2_driver * d) { if (d != NULL) { s->type->set_driver (s->state, d); } else { GSL_ERROR ("driver pointer is null", GSL_EFAULT); } return GSL_SUCCESS; } gsl/ode-initval2/cstd.c0000664000175000017500000001220514057135461013323 0ustar eddedd/* ode-initval2/cstd.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include "control_utils.c" typedef struct { double eps_abs; double eps_rel; double a_y; double a_dydt; } std_control_state_t; static void * std_control_alloc (void) { std_control_state_t *s = (std_control_state_t *) malloc (sizeof (std_control_state_t)); if (s == 0) { GSL_ERROR_NULL ("failed to allocate space for std_control_state", GSL_ENOMEM); } return s; } static int std_control_init (void *vstate, double eps_abs, double eps_rel, double a_y, double a_dydt) { std_control_state_t *s = (std_control_state_t *) vstate; if (eps_abs < 0) { GSL_ERROR ("eps_abs is negative", GSL_EINVAL); } else if (eps_rel < 0) { GSL_ERROR ("eps_rel is negative", GSL_EINVAL); } else if (a_y < 0) { GSL_ERROR ("a_y is negative", GSL_EINVAL); } else if (a_dydt < 0) { GSL_ERROR ("a_dydt is negative", GSL_EINVAL); } s->eps_rel = eps_rel; s->eps_abs = eps_abs; s->a_y = a_y; s->a_dydt = a_dydt; return GSL_SUCCESS; } static int std_control_hadjust (void *vstate, size_t dim, unsigned int ord, const double y[], const double yerr[], const double yp[], double *h) { std_control_state_t *state = (std_control_state_t *) vstate; const double eps_abs = state->eps_abs; const double eps_rel = state->eps_rel; const double a_y = state->a_y; const double a_dydt = state->a_dydt; const double S = 0.9; const double h_old = *h; double rmax = DBL_MIN; size_t i; for (i = 0; i < dim; i++) { const double D0 = eps_rel * (a_y * fabs (y[i]) + a_dydt * fabs (h_old * yp[i])) + eps_abs; const double r = fabs (yerr[i]) / fabs (D0); rmax = GSL_MAX_DBL (r, rmax); } if (rmax > 1.1) { /* decrease step, no more than factor of 5, but a fraction S more than scaling suggests (for better accuracy) */ double r = S / pow (rmax, 1.0 / ord); if (r < 0.2) r = 0.2; *h = r * h_old; return GSL_ODEIV_HADJ_DEC; } else if (rmax < 0.5) { /* increase step, no more than factor of 5 */ double r = S / pow (rmax, 1.0 / (ord + 1.0)); if (r > 5.0) r = 5.0; if (r < 1.0) /* don't allow any decrease caused by S<1 */ r = 1.0; *h = r * h_old; return GSL_ODEIV_HADJ_INC; } else { /* no change */ return GSL_ODEIV_HADJ_NIL; } } static int std_control_errlevel (void *vstate, const double y, const double dydt, const double h, const size_t ind, double *errlev) { std_control_state_t *state = (std_control_state_t *) vstate; const double eps_abs = state->eps_abs; const double eps_rel = state->eps_rel; const double a_y = state->a_y; const double a_dydt = state->a_dydt; *errlev = eps_rel * (a_y * fabs (y) + a_dydt * fabs (h * dydt)) + eps_abs; if (*errlev <= 0.0) { GSL_ERROR ("errlev <= zero", GSL_ESANITY); } (void) ind; return GSL_SUCCESS; } static void std_control_free (void *vstate) { std_control_state_t *state = (std_control_state_t *) vstate; free (state); } static const gsl_odeiv2_control_type std_control_type = { "standard", /* name */ &std_control_alloc, &std_control_init, &std_control_hadjust, &std_control_errlevel, &control_set_driver_null, &std_control_free }; const gsl_odeiv2_control_type *gsl_odeiv2_control_standard = &std_control_type; gsl_odeiv2_control * gsl_odeiv2_control_standard_new (double eps_abs, double eps_rel, double a_y, double a_dydt) { gsl_odeiv2_control *c = gsl_odeiv2_control_alloc (gsl_odeiv2_control_standard); int status = gsl_odeiv2_control_init (c, eps_abs, eps_rel, a_y, a_dydt); if (status != GSL_SUCCESS) { gsl_odeiv2_control_free (c); GSL_ERROR_NULL ("error trying to initialize control", status); } return c; } gsl_odeiv2_control * gsl_odeiv2_control_y_new (double eps_abs, double eps_rel) { return gsl_odeiv2_control_standard_new (eps_abs, eps_rel, 1.0, 0.0); } gsl_odeiv2_control * gsl_odeiv2_control_yp_new (double eps_abs, double eps_rel) { return gsl_odeiv2_control_standard_new (eps_abs, eps_rel, 0.0, 1.0); } gsl/ode-initval2/ChangeLog0000644000175000017500000003177213536674414014013 0ustar eddedd2018-03-18 Tuomo Keskitalo * rk2imp.c and evolve.c: Added debug printouts, run indent -gnu -nut. Thanks for Dominic Steinitz for the additions! * test.c: Added identifiers to debug printouts. 2017-11-04 Tuomo Keskitalo * cscal.c: Corrected bug #52336 in cscal.c: Decreased maximum step length increase coefficient (now named maxscale) from 5.0 to 4.9 because value of 5.0 hits a singularity in msbdf stepper with order 3, causing a floating point exception. Thanks to Andrew Benson for reporting this bug! 2017-10-22 Tuomo Keskitalo * msadams.c: Corrected bug #52230 in msadams_apply, where solver crashed to order change -2 error. This could happen in a very rare case when two consecutive failed steps suggest decreasing order. Fix is to reset solver if that happens. Thanks for Michael Kaufman for reporting this bug and testing the fix! 2013-06-08 Tuomo Keskitalo * driver.c: Removed redundant if clause. Thanks to David Binderman for the report! 2013-01-27 Tuomo Keskitalo * msbdf.c: Corrected bug which enabled order to be changed by two (first by stability enhancement, then by order evaluation after a rejected step). Thanks for Frantisek Kluknavsky and Andreas Schwab for bug reports! * msbdf.c: Added more state variables explicitly to be reset in msbdf_reset. *msbdf.c: Added abscorscaled to remove division of abscor for use in msbdf_eval_order and subsequent backwards multiplication. *test.c: test_extreme_problems: Increased ringmod case tolerances from 1e-7 to 1e-12 to increase precision. Because that increases computational burden, I also decreased end time from 1e-3 to 1e-5. That decreased the acidity of the test significantly, but the test case is now more appropriate for normal "make check". Thanks for Frantisek Kluknavsky for pointing out bad design of the test case. 2012-09-10 Rhys Ulerich * test.c: Correct two out-of-order declarations. Thanks to Brian Gladman for spotting the problem. 2012-03-10 Tuomo Keskitalo * driver.c: Added function gsl_odeiv2_driver_reset_hstart to allow resetting step size, possibly change its sign, too. Check for non-zero hstart in initializations. * test.c: Modified test_driver to carry out tests with all steppers. Small printout changes. 2012-01-21 Tuomo Keskitalo * rkf45.c: Bug correction: Set gives_exact_dydt_out to 1 in rkf45_type 2012-01-14 Tuomo Keskitalo * evolve.c: Modified initial derivative evaluation in evolve_apply to reuse previously calculated values. This saves calls to the user function. Thanks for Illes Farkas for pointing out redundant function calls! 2011-06-28 Brian Gough * rk4imp.c (rk4imp_apply): use M_SQRT3 instead of sqrt(3) in array initialiser. 2011-05-02 Brian Gough * gsl_odeiv2.h: fix header guard to __GSL_ODEIV2_H__ 2011-05-01 Tuomo Keskitalo * Replaced ChangeLog with contents of ode-initval2 development log file (ChangeLog-odeiv2_development) and reformatted the log file. 2010-10-16 Tuomo Keskitalo * Modified evolve and driver so that when user function returns GSL_EBADFUNC, then ode-initval2 functions return immediately with that same return value. * Corrected bug in msadams for saving ordm1coeff to state. Thanks to Andrew Benson for pointing out this bug! 2010-10-10 Tuomo Keskitalo * driver.c: Corrected error in driver_evolve_apply, integration to negative direction should work now. * Added evolve_apply_fixed_step and driver_apply_fixed_step for users who want to use a constant step size to evolve the system. * test.c: added test cases for driver (negative evolution, apply_fixed_step). * gsl_odeiv2.h: cleaning and add apply_fixed_step functions. * doc/ode-initval.texi: Replaced derivative apostrophe with \prime (because my new system fails to make ps otherwise). Added new documentation about apply_fixed_step functions. 2010-10-09 Tuomo Keskitalo * ode-initval2 bzr development branch now at savannah: http://bzr.savannah.gnu.org/r/gsl/ode-initval2/ 2010-01-02 Tuomo Keskitalo * Changes from ode-initval2-0.9 to ode-initval2-1.0: * Removed set_control member from step object and added a set_driver member to evolve, control and step objects, so that the driver object and consequently evolve, control and step objects are all accessible from another. Currently only some steppers utilize this. They access the control_errlevel function via state->driver->c instead of state->control. This modification to the framework enables implementation of more efficient ODE solvers, which utilize communication among evolve, control and stepper objects. This also means that some steppers now require a driver object, and it is best to use those stepper methods through driver object functions. * cstd.c and cscal.c: Added a sanity check for errlev <= 0 * run indent -gnu -nut for *.c *.h * driver.c: added function odeiv2_driver_alloc_standard_new and odeiv2_driver_alloc_yp_new * driver.c: changed n and nmax in driver struct to unsigned long int * modified documentation accordingly with small nomenclature changes and made year updates to source files 2009-11-01 Tuomo Keskitalo * Merged with master and modified source to be published as a package for gsl-1.13. 2009-05-09 Tuomo Keskitalo * Agreed with Brian Gough that the modification I've made cannot be incorporated to GSL until a major version number change, due to changes in API. * Replated rk2imp with imprk2 and rk4imp with imprk4. Also renamed impeuler to rk1imp for consistency. * Deleted steppers that are deprecated considering new major release: gear1, gear2, and rk2simp. Modified test.c accordingly. 2009-05-01 Tuomo Keskitalo * Merged with master (evolve.c and test.c needed some manual work). * driver.c: Modified alloc-functions to minimal interface, added set_hmax, set_nmax and set_hmin functions. * test.c: Added test for minimum allowed step size. Applied indent -gnu -nut. * doc/ode-initval.texi: Updated documentation, added Driver section, updated examples. 2009-04-05 Tuomo Keskitalo * Several uninitialized variable corrections from Brian Gough added * modnewton1, impeuler, imprk2, imprk4: removed unneeded arguments from solve and init * msadams and msbdf modifications: * added ordprevbackup, ordwaitbackup (backups) and failcount (to detect repeated steps rejections). * added checks to make sure order is not changed by more than one order. Added sanity check to catch it. * corrected failure and rejection handling for first step * Added a heuristic stability enhancement for msbdf. This is yet to be tested in practice. * test.c: Added more benchmark test cases. The results seem sensible. * test.c: Note for benchmark_precision: msbdf performs badly in rhs_func_exp. Newton iteration starts to fail to converge at some point, and this forces very small step sizes to be used. I currently think that this is not a bug, but that msbdf is just not suitable for this problem. I think that msbdf's prediction step does not give a good initial guess for Newton iteration in this case. * I tried to increase max_iter in msbdf from 3 to 7 (value used in modnewton1), and as a result, the performance was better for this case (Newton iteration convergence was better). However, I would not increase max_iter, because the default value of 3 is the value used by the authors in the references, and because it would decrease the efficiency of msbdf (method would use more function evaluations per step, and convergence might still not be achieved). It is best to useanother stepper in this kind of a case. 2009-02-28 Tuomo Keskitalo * new stepper: msbdf. This is a variable-coefficient linear multistep backward differentiation formula (BDF) method in Nordsieck form. It appears to handle stiff cases well and it is efficient! * test.c: Ordered functions in file. Added extreme test case. * modnewton1: Convergence test now takes the desired error level via control object into account. Modified steppers that use modnewton1 accordingly. * modnewton1: Removed reuse_decomp. The variable was useless since iteration matrix is reconstructed at each stepper call. * modnewton1: Dropped max_iter from 10 to 7. Hairer and Wanner suggests a "relatively high number", but many iterations per step is costly. * steppers that use step doubling for error estimates: Introduced constant GSL_ODEIV_ERR_SAFETY in gsl_odeiv.h that is used to multiply the error estimates (yerr). This way user can modify this coefficient in one place if a change is wanted. * driver.c: This is a high level wrapper for ode-initval, which was wished for in TODO. Added test_driver to test.c to test it. Is this functionality enough? * ode-initval.texi: Added documentation for new steppers. Moved note about user error codes to system definition. * Some finetuning / code cleanup. 2009-01-21 Tuomo Keskitalo * New explicit stepper: msadams (An explicit variable-coefficient linear multistep Adams method in Nordsieck form). Functional iteration is used to solve the non-linear equation system. The algorithms described in the references (see msadams.c) have been adapted to fit GSL odeiv framework. Currently this is beta, but the stepper now passes the odeiv test suite. * control.c, cstd.c, cscal.c: Added errlev function which calculates desired error level. This is used in masadams (and can be used in imp* steppers, too) to control accuracy of functional iteration. User must call gsl_odeiv_step_set_control after allocating step and control objects to pass the information about control object to stepper. This change (or something similar) is needed to pass tolerance for the stepper routines that need it. Modified stepper routines accordingly. * evolve.c: Changed the step length scaling coefficient for stepper failure from 0.1 to 0.5, because msadams seems to cope much better with this change in stiff[0,1] test case. * gsl_odeiv.h: gsl_odeiv_control and control_type introduced earlier because gsl_odeiv_step_type now refers to it. 2008-11-01 Tuomo Keskitalo * New implicit solvers: imprk4 (replaces imprk42 in previous test package), imprk2 (replaces imprk21 in previous test package) and impeuler, which use modified Newton iteration to solve the implicit equations. I decided to dump imprk42 and imprk21 because I was unsure how to calculate the error estimates for them. I think that these new implicit methods could be used instead of rk4imp, rk2imp, gear2 and gear1, which use functional iteration (which is inefficient for stiff problems.) However, even these new solvers can not be used efficiently for truly nasty stiff problems, and better solvers are still needed. * modnewton1.c: a modified Newton solver for solution of non-linear equations of implicit solvers. Jacobian evaluation has been moved from modnewton1 to imprk2, imprk4 and impeuler. * evolve.c: modification to decrease step size if stepper fails, instead of giving up immediately. * evolve.c: A bug fix: Exit with GSL_FAILURE if step size reaches machine precision instead of continuing with old step size. * test.c: added Robertson stiff test * test.c: embedded test_oregonator to test_compare_stiff_probelms to test several stiff problems. Note: the tested integration interval is rather short due to inefficiency of solvers other than bsimp in these problems. * test.c: modified test_compare_vanderpol and test_compare_stiff_problems to check against results from first ode-solver. Changed rk4 or bsimp to first place. * test.c: modified stepfn and stepfn2 and expanded these to be tested with all explicit solvers * test.c: removed stepfn3 and added test_broken and test_stepsize_fail to check that evolve decreases step size below machine precision and exits with a failure code in the end if user functions fail continuously. * Changes in ode-initval.texi: * removed untrue sentence concerning stepping functions: "The step-size @var{h} will be set to the step-size which caused the error." * Changed gsl_odeiv_system variable name from dydt to sys for clarity * added "explicit" or "implicit" to stepper introductions for clarity * reformulated description of evolve_apply and step_apply and made changes to reflect the modifications to the code. * clarified the point on integrating over discontinuities. It is best to integrate in sequences. * removed the text suggesting the user to force a step size to integrate over the edge of a discontinuity. The applicability of this kind of a numerical tweak depends on the case, and should in my opinion not to be included in a reference book. gsl/ode-initval2/odeiv_util.h0000644000175000017500000000136513536674414014550 0ustar eddedd#define DBL_MEMCPY(dest,src,n) memcpy((dest),(src),(n)*sizeof(double)) #define DBL_ZERO_MEMSET(dest,n) memset((dest),0,(n)*sizeof(double)) /* Error estimation safety coefficient for methods that use step * doubling for error estimates. Error estimates are multiplied by * this constant to ensure that the error of a step is not * underestimated. * * The default safety value of 8.0 ensures 90% of samples lie within * the error (assuming a Gaussian distribution with prior * p(sigma) = 1 / sigma). Value of 1.0 conforms to equation * by Ascher and Petzold (reference: Ascher, U.M., Petzold, L.R., * Computer methods for ordinary differential and * differential-algebraic equations, SIAM, Philadelphia, 1998). */ #define ODEIV_ERR_SAFETY 8.0 gsl/ode-initval2/Makefile.am0000644000175000017500000000142113536674414014261 0ustar eddeddnoinst_LTLIBRARIES = libgslodeiv2.la pkginclude_HEADERS = gsl_odeiv2.h AM_CPPFLAGS = -I$(top_srcdir) libgslodeiv2_la_SOURCES = control.c cstd.c cscal.c evolve.c step.c rk2.c rk2imp.c rk4.c rk4imp.c rkf45.c rk8pd.c rkck.c bsimp.c rk1imp.c msadams.c msbdf.c driver.c noinst_HEADERS = odeiv_util.h step_utils.c rksubs.c modnewton1.c control_utils.c check_PROGRAMS = test TESTS = $(check_PROGRAMS) test_LDADD = libgslodeiv2.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../permutation/libgslpermutation.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c gsl/ode-initval2/step_utils.c0000644000175000017500000000175013536674414014571 0ustar eddedd/* ode-initval2/step_utils.c * * Copyright (C) 2009 Tuomo Keskitalo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static int stepper_set_driver_null (void *vstate, const gsl_odeiv2_driver * d) { /* Dummy set function for those steppers that do not need pointer to driver object. */ return GSL_SUCCESS; } gsl/ode-initval2/msadams.c0000664000175000017500000007715214057135461014027 0ustar eddedd/* ode-initval2/msadams.c * * Copyright (C) 2009, 2010 Tuomo Keskitalo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* A variable-coefficient linear multistep Adams method in Nordsieck form. This stepper uses explicit Adams-Bashforth (predictor) and implicit Adams-Moulton (corrector) methods in P(EC)^m functional iteration mode. Method order varies dynamically between 1 and 12. References: Byrne, G. D., and Hindmarsh, A. C., A Polyalgorithm for the Numerical Solution of Ordinary Differential Equations, ACM Trans. Math. Software, 1 (1975), pp. 71-96. Brown, P. N., Byrne, G. D., and Hindmarsh, A. C., VODE: A Variable-coefficient ODE Solver, SIAM J. Sci. Stat. Comput. 10, (1989), pp. 1038-1051. Hindmarsh, A. C., Brown, P. N., Grant, K. E., Lee, S. L., Serban, R., Shumaker, D. E., and Woodward, C. S., SUNDIALS: Suite of Nonlinear and Differential/Algebraic Equation Solvers, ACM Trans. Math. Software 31 (2005), pp. 363-396. Note: The algorithms have been adapted for GSL ode-initval2 framework. */ #include #include #include #include #include #include #include #include "odeiv_util.h" /* Maximum order of Adams methods */ #define MSADAMS_MAX_ORD 12 typedef struct { /* Nordsieck history matrix. Includes concatenated Nordsieck vectors [y_n, h*y_n', (h^2/2!)*y_n'', ..., (h^ord/ord!)*d^(ord)(y_n)]. Nordsieck vector number i is located at z[i*dim] (i=0..ord). */ double *z; double *zbackup; /* backup of Nordsieck matrix */ double *ytmp; /* work area */ double *ytmp2; /* work area */ double *pc; /* product term coefficients */ double *l; /* polynomial coefficients */ double *hprev; /* previous step sizes */ double *hprevbackup; /* backup of hprev */ double *errlev; /* desired error level of y */ gsl_vector *abscor; /* absolute y values for correction */ gsl_vector *relcor; /* relative y values for correction */ gsl_vector *svec; /* saved abscor & work area */ gsl_vector *tempvec; /* work area */ const gsl_odeiv2_driver *driver; /* pointer to gsl_odeiv2_driver object */ long int ni; /* stepper call counter */ size_t ord; /* current order of method */ size_t ordprev; /* order of previous call */ size_t ordprevbackup; /* backup of ordprev */ double tprev; /* t point of previous call */ size_t ordwait; /* counter for order change */ size_t ordwaitbackup; /* backup of ordwait */ size_t failord; /* order of convergence failure */ double failt; /* t point of convergence failure */ double ordm1coeff; /* saved order-1 coefficiet */ double ordp1coeffprev; /* saved order+1 coefficient */ size_t failcount; /* counter for rejected steps */ } msadams_state_t; /* Introduce msadams_reset for use in msadams_alloc and _apply */ static int msadams_reset (void *, size_t); static void * msadams_alloc (size_t dim) { msadams_state_t *state = (msadams_state_t *) malloc (sizeof (msadams_state_t)); if (state == 0) { GSL_ERROR_NULL ("failed to allocate space for msadams_state", GSL_ENOMEM); } state->z = (double *) malloc ((MSADAMS_MAX_ORD + 1) * dim * sizeof (double)); if (state->z == 0) { free (state); GSL_ERROR_NULL ("failed to allocate space for z", GSL_ENOMEM); } state->zbackup = (double *) malloc ((MSADAMS_MAX_ORD + 1) * dim * sizeof (double)); if (state->zbackup == 0) { free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for zbackup", GSL_ENOMEM); } state->ytmp = (double *) malloc (dim * sizeof (double)); if (state->ytmp == 0) { free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for ytmp", GSL_ENOMEM); } state->ytmp2 = (double *) malloc (dim * sizeof (double)); if (state->ytmp2 == 0) { free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for ytmp2", GSL_ENOMEM); } state->pc = (double *) malloc ((MSADAMS_MAX_ORD + 1) * sizeof (double)); if (state->pc == 0) { free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for pc", GSL_ENOMEM); } state->l = (double *) malloc ((MSADAMS_MAX_ORD + 1) * sizeof (double)); if (state->l == 0) { free (state->pc); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for l", GSL_ENOMEM); } state->hprev = (double *) malloc (MSADAMS_MAX_ORD * sizeof (double)); if (state->hprev == 0) { free (state->l); free (state->pc); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for hprev", GSL_ENOMEM); } state->hprevbackup = (double *) malloc (MSADAMS_MAX_ORD * sizeof (double)); if (state->hprevbackup == 0) { free (state->hprev); free (state->l); free (state->pc); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for hprevbackup", GSL_ENOMEM); } state->errlev = (double *) malloc (dim * sizeof (double)); if (state->errlev == 0) { free (state->hprevbackup); free (state->hprev); free (state->l); free (state->pc); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for errlev", GSL_ENOMEM); } state->abscor = gsl_vector_alloc (dim); if (state->abscor == 0) { free (state->errlev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->pc); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for abscor", GSL_ENOMEM); } state->relcor = gsl_vector_alloc (dim); if (state->relcor == 0) { gsl_vector_free (state->abscor); free (state->errlev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->pc); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for relcor", GSL_ENOMEM); } state->svec = gsl_vector_alloc (dim); if (state->svec == 0) { gsl_vector_free (state->relcor); gsl_vector_free (state->abscor); free (state->errlev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->pc); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for svec", GSL_ENOMEM); } state->tempvec = gsl_vector_alloc (dim); if (state->tempvec == 0) { gsl_vector_free (state->svec); gsl_vector_free (state->relcor); gsl_vector_free (state->abscor); free (state->errlev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->pc); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for tempvec", GSL_ENOMEM); } msadams_reset ((void *) state, dim); state->driver = NULL; return state; } static int msadams_failurehandler (void *vstate, const size_t dim, const double t) { /* Internal failure handler routine for msadams. Adjusted strategy for GSL: Decrease order if this is the second time a failure has occurred at this order and point. */ msadams_state_t *state = (msadams_state_t *) vstate; const size_t ord = state->ord; if (ord > 1 && (ord - state->ordprev == 0) && ord == state->failord && t == state->failt) { state->ord--; } /* Save information about failure */ state->failord = ord; state->failt = t; state->ni++; /* Force reinitialization if failure took place at lowest order */ if (ord == 1) { msadams_reset (vstate, dim); } return GSL_SUCCESS; } static int msadams_calccoeffs (const size_t ord, const size_t ordwait, const double h, const double hprev[], double pc[], double l[], double *errcoeff, double *ordm1coeff, double *ordp1coeff, double *ordp2coeff) { /* Calculates coefficients (l) of polynomial Lambda, error and auxiliary order change evaluation coefficients. */ if (ord == 1) { l[0] = 1.0; l[1] = 1.0; *errcoeff = 0.5; *ordp1coeff = 1.0; *ordp2coeff = 12.0; } else { size_t i, j; double hsum = h; double st1 = 0.0; /* sum term coefficients */ double st2 = 0.0; /* Calculate coefficients (pc) of product terms */ DBL_ZERO_MEMSET (pc, MSADAMS_MAX_ORD + 1); pc[0] = 1.0; for (i = 1; i < ord; i++) { /* Calculate auxiliary coefficient used in evaluation of change of order */ if (i == ord - 1 && ordwait == 1) { int s = 1; *ordm1coeff = 0.0; for (j = 0; j < ord - 1; j++) { *ordm1coeff += s * pc[j] / (j + 2); s = -s; } *ordm1coeff = pc[ord - 2] / (ord * (*ordm1coeff)); } for (j = i; j > 0; j--) { pc[j] += pc[j - 1] * h / hsum; } hsum += hprev[i - 1]; } /* Calculate sum term 1 for error estimation */ { int s = 1; for (i = 0; i < ord; i++) { st1 += s * pc[i] / (i + 1.0); s = -s; } } /* Calculate sum term 2 for error estimation */ { int s = 1; for (i = 0; i < ord; i++) { st2 += s * pc[i] / (i + 2.0); s = -s; } } /* Calculate the actual polynomial coefficients (l) */ DBL_ZERO_MEMSET (l, MSADAMS_MAX_ORD + 1); l[0] = 1.0; for (i = 1; i < ord + 1; i++) { l[i] = pc[i - 1] / (i * st1); } #ifdef DEBUG { size_t di; printf ("-- calccoeffs l: "); for (di = 0; di < ord + 1; di++) { printf ("%.5e ", l[di]); } printf ("\n"); printf ("-- calccoeffs pc: "); for (di = 0; di < ord; di++) { printf ("%.5e ", pc[di]); } printf ("\n"); printf ("-- calccoeffs st1=%.5e, st2=%.5e\n", st1, st2); } #endif /* Calculate error coefficient */ *errcoeff = (h / hsum) * (st2 / st1); /* Calculate auxiliary coefficients used in evaluation of change of order */ if (ordwait < 2) { int s = 1; *ordp1coeff = hsum / (h * l[ord]); *ordp2coeff = 0.0; for (i = ord; i > 0; i--) { pc[i] += pc[i - 1] * (h / hsum); } for (i = 0; i < ord + 1; i++) { *ordp2coeff += s * pc[i] / (i + 2); s = -s; } *ordp2coeff = (ord + 1) * st1 / (*ordp2coeff); } } #ifdef DEBUG printf ("-- calccoeffs ordm1coeff=%.5e ", *ordm1coeff); printf ("ordp1coeff=%.5e ", *ordp1coeff); printf ("ordp2coeff=%.5e ", *ordp2coeff); printf ("errcoeff=%.5e\n", *errcoeff); #endif return GSL_SUCCESS; } static int msadams_corrector (void *vstate, const gsl_odeiv2_system * sys, const double t, const double h, const size_t dim, const double z[], const double errlev[], const double l[], const double errcoeff, gsl_vector * abscor, gsl_vector * relcor, double ytmp[], double ytmp2[]) { /* Calculates the correction step (abscor). Non-linear equation system is solved by functional iteration. */ size_t mi, i; const size_t max_iter = 3; /* Maximum number of iterations */ double convrate = 1.0; /* convergence rate */ double stepnorm = 0.0; /* norm of correction step */ double stepnormprev = 0.0; /* Evaluate at predicted values */ { int s = GSL_ODEIV_FN_EVAL (sys, t + h, z, ytmp); if (s == GSL_EBADFUNC) { return s; } if (s != GSL_SUCCESS) { msadams_failurehandler (vstate, dim, t); #ifdef DEBUG printf ("-- FAIL at user function evaluation\n"); #endif return s; } } /* Calculate correction step (abscor) */ gsl_vector_set_zero (abscor); for (mi = 0; mi < max_iter; mi++) { const double safety = 0.3; const double safety2 = 0.1; /* Calculate new y values to ytmp2 */ for (i = 0; i < dim; i++) { ytmp[i] *= h; ytmp[i] -= z[1 * dim + i]; ytmp[i] /= l[1]; ytmp2[i] = z[0 * dim + i] + ytmp[i]; } #ifdef DEBUG { size_t di; printf ("-- dstep: "); for (di = 0; di < dim; di++) { printf ("%.5e ", ytmp[di]); } printf ("\n"); } #endif /* Convergence test. Norms used are root-mean-square norms. */ for (i = 0; i < dim; i++) { gsl_vector_set (relcor, i, (ytmp[i] - gsl_vector_get (abscor, i)) / errlev[i]); gsl_vector_set (abscor, i, ytmp[i]); } stepnorm = gsl_blas_dnrm2 (relcor) / sqrt (dim); if (mi > 0) { convrate = GSL_MAX_DBL (safety * convrate, stepnorm / stepnormprev); } else { convrate = 1.0; } { const double convtest = GSL_MIN_DBL (convrate, 1.0) * stepnorm * errcoeff / safety2; #ifdef DEBUG printf ("-- func iter loop %d, errcoeff=%.5e, stepnorm =%.5e, convrate = %.5e, convtest = %.5e\n", (int) mi, errcoeff, stepnorm, convrate, convtest); #endif if (convtest <= 1.0) { break; } } /* Check for divergence during iteration */ { const double div_const = 2.0; if (mi > 1 && stepnorm > div_const * stepnormprev) { msadams_failurehandler (vstate, dim, t); #ifdef DEBUG printf ("-- FAIL, diverging functional iteration\n"); #endif return GSL_FAILURE; } } /* Evaluate at new y */ { int s = GSL_ODEIV_FN_EVAL (sys, t + h, ytmp2, ytmp); if (s == GSL_EBADFUNC) { return s; } if (s != GSL_SUCCESS) { msadams_failurehandler (vstate, dim, t); #ifdef DEBUG printf ("-- FAIL at user function evaluation\n"); #endif return s; } } stepnormprev = stepnorm; } #ifdef DEBUG printf ("-- functional iteration exit at mi=%d\n", (int) mi); #endif /* Handle convergence failure */ if (mi == max_iter) { msadams_failurehandler (vstate, dim, t); #ifdef DEBUG printf ("-- FAIL, max_iter reached\n"); #endif return GSL_FAILURE; } return GSL_SUCCESS; } static int msadams_eval_order (gsl_vector * abscor, gsl_vector * tempvec, gsl_vector * svec, const double errcoeff, const size_t dim, const double errlev[], const double ordm1coeff, const double ordp1coeff, const double ordp1coeffprev, const double ordp2coeff, const double hprev[], const double h, const double z[], size_t * ord, size_t * ordwait) { /* Evaluates and executes change in method order (current, current-1 or current+1). Order which maximizes the step length is selected. */ size_t i; /* step size estimates at current order, order-1 and order+1 */ double ordest = 0.0; double ordm1est = 0.0; double ordp1est = 0.0; const double safety = 1e-6; const double bias = 6.0; const double bias2 = 10.0; /* Relative step length estimate for current order */ ordest = 1.0 / (pow (bias * gsl_blas_dnrm2 (abscor) / sqrt (dim) * errcoeff, 1.0 / (*ord + 1)) + safety); /* Relative step length estimate for order ord - 1 */ if (*ord > 1) { for (i = 0; i < dim; i++) { gsl_vector_set (tempvec, i, z[*ord * dim + i] / errlev[i]); } ordm1est = 1.0 / (pow (bias * gsl_blas_dnrm2 (tempvec) / sqrt (dim) / ordm1coeff, 1.0 / (*ord)) + safety); } else { ordm1est = 0.0; } /* Relative step length estimate for order ord + 1 */ if (*ord < MSADAMS_MAX_ORD) { const double c = -ordp1coeff / ordp1coeffprev * pow (h / hprev[1], *ord + 1); for (i = 0; i < dim; i++) { gsl_vector_set (svec, i, gsl_vector_get (svec, i) * c + gsl_vector_get (abscor, i)); } ordp1est = 1.0 / (pow (bias2 * gsl_blas_dnrm2 (svec) / sqrt (dim) / ordp2coeff, 1.0 / (*ord + 2)) + safety); } else { ordp1est = 0.0; } #ifdef DEBUG printf ("-- eval_order ord=%d, ordest=%.5e, ordm1est=%.5e, ordp1est=%.5e\n", (int) *ord, ordest, ordm1est, ordp1est); #endif /* Choose order that maximises step size and increases step size markedly compared to current step */ { const double min_incr = 1.5; if (ordm1est > ordest && ordm1est > ordp1est && ordm1est > min_incr) { *ord -= 1; #ifdef DEBUG printf ("-- eval_order order DECREASED to %d\n", (int) *ord); #endif } else if (ordp1est > ordest && ordp1est > ordm1est && ordp1est > min_incr) { *ord += 1; #ifdef DEBUG printf ("-- eval_order order INCREASED to %d\n", (int) *ord); #endif } } *ordwait = *ord + 2; return GSL_SUCCESS; } static int msadams_apply (void *vstate, size_t dim, double t, double h, double y[], double yerr[], const double dydt_in[], double dydt_out[], const gsl_odeiv2_system * sys) { /* Conducts a step by Adams linear multistep methods. */ msadams_state_t *state = (msadams_state_t *) vstate; double *const z = state->z; double *const zbackup = state->zbackup; double *const ytmp = state->ytmp; double *const ytmp2 = state->ytmp2; double *const pc = state->pc; double *const l = state->l; double *const hprev = state->hprev; double *const hprevbackup = state->hprevbackup; double *const errlev = state->errlev; gsl_vector *const abscor = state->abscor; gsl_vector *const relcor = state->relcor; gsl_vector *const svec = state->svec; gsl_vector *const tempvec = state->tempvec; size_t ord = state->ord; double ordm1coeff = 0.0; double ordp1coeff = 0.0; double ordp2coeff = 0.0; double errcoeff = 0.0; /* error coefficient */ int deltaord; #ifdef DEBUG { size_t di; printf ("msadams_apply: t=%.5e, ord=%d, h=%.5e, y:", t, (int) ord, h); for (di = 0; di < dim; di++) { printf ("%.5e ", y[di]); } printf ("\n"); } #endif /* Check if t is the same as on previous stepper call (or last failed call). This means that calculation of previous step failed or the step was rejected, and therefore previous state will be restored or the method will be reset. */ if (state->ni > 0 && (t == state->tprev || t == state->failt)) { if (state->ni == 1) { /* No step has been accepted yet, reset method */ msadams_reset (vstate, dim); #ifdef DEBUG printf ("-- first step was REJECTED, msadams_reset called\n"); #endif } else { /* A succesful step has been saved, restore previous state. */ /* If previous step suggests order increase, but the step was rejected, then do not increase order. */ if (ord > state->ordprev) { state->ord = state->ordprev; ord = state->ord; } /* Restore previous state */ DBL_MEMCPY (z, zbackup, (MSADAMS_MAX_ORD + 1) * dim); DBL_MEMCPY (hprev, hprevbackup, MSADAMS_MAX_ORD); state->ordprev = state->ordprevbackup; state->ordwait = state->ordwaitbackup; #ifdef DEBUG printf ("-- previous step was REJECTED, state restored\n"); #endif } state->failcount++; { const size_t max_failcount = 3; /* If step is repeatedly rejected, then reset method */ if (state->failcount > max_failcount && state->ni > 1) { msadams_reset (vstate, dim); ord = state->ord; #ifdef DEBUG printf ("-- max_failcount reached, msadams_reset called\n"); #endif } /* Attempt to decrease order twice is indicative of system stiffness. Reset method to enable fast recovery. */ else if ((int)state->ordprev - (int)ord >= 2) { msadams_reset (vstate, dim); ord = state->ord; #ifdef DEBUG printf ("-- order decreased by two, msadams_reset called\n"); #endif } } } else { /* The previous step was accepted. Backup current state. */ DBL_MEMCPY (zbackup, z, (MSADAMS_MAX_ORD + 1) * dim); DBL_MEMCPY (hprevbackup, hprev, MSADAMS_MAX_ORD); state->ordprevbackup = state->ordprev; state->ordwaitbackup = state->ordwait; state->failcount = 0; #ifdef DEBUG if (state->ni > 0) { printf ("-- previous step was ACCEPTED, state saved\n"); } #endif } #ifdef DEBUG printf ("-- ord=%d, ni=%ld, ordwait=%d\n", (int) ord, state->ni, (int) state->ordwait); printf ("-- ordprev: %d\n", (int) state->ordprev); #endif /* Get desired error levels via gsl_odeiv2_control object through driver object, which is a requirement for this stepper. */ if (state->driver == NULL) { return GSL_EFAULT; } else { size_t i; for (i = 0; i < dim; i++) { if (dydt_in != NULL) { gsl_odeiv2_control_errlevel (state->driver->c, y[i], dydt_in[i], h, i, &errlev[i]); } else { gsl_odeiv2_control_errlevel (state->driver->c, y[i], 0.0, h, i, &errlev[i]); } } } #ifdef DEBUG { size_t di; printf ("-- errlev: "); for (di = 0; di < dim; di++) { printf ("%.5e ", errlev[di]); } printf ("\n"); } #endif /* On first call initialize Nordsieck matrix */ if (state->ni == 0) { size_t i; DBL_ZERO_MEMSET (z, (MSADAMS_MAX_ORD + 1) * dim); if (dydt_in != NULL) { DBL_MEMCPY (ytmp, dydt_in, dim); } else { int s = GSL_ODEIV_FN_EVAL (sys, t, y, ytmp); if (s != GSL_SUCCESS) { return s; } } DBL_MEMCPY (&z[0 * dim], y, dim); DBL_MEMCPY (&z[1 * dim], ytmp, dim); for (i = 0; i < dim; i++) { z[1 * dim + i] *= h; } } /* Sanity check */ deltaord = ord - state->ordprev; if (deltaord > 1 || deltaord < -1) { printf ("-- order change %d\n", deltaord); GSL_ERROR ("msadams_apply too large order change", GSL_ESANITY); } /* Modify Nordsieck matrix if order or step length has been changed */ /* If order increased by 1, initialize new Nordsieck vector */ if (deltaord == 1) { DBL_ZERO_MEMSET (&z[ord * dim], dim); #ifdef DEBUG printf ("-- order increase detected, Nordsieck modified\n"); #endif } /* If order decreased by 1, adjust Nordsieck matrix */ if (deltaord == -1) { double hsum = 0.0; size_t i, j; /* Calculate coefficients used in adjustment to l */ DBL_ZERO_MEMSET (l, MSADAMS_MAX_ORD + 1); l[1] = 1.0; for (i = 1; i < ord; i++) { hsum += hprev[i - 1]; for (j = i + 1; j > 0; j--) { l[j] *= hsum / hprev[0]; l[j] += l[j - 1]; } } for (i = 1; i < ord; i++) { l[i + 1] = (ord + 1) * l[i] / (i + 1); } /* Scale Nordsieck matrix */ for (i = 2; i < ord + 1; i++) for (j = 0; j < dim; j++) { z[i * dim + j] += -l[i] * z[(ord + 1) * dim + j]; } #ifdef DEBUG printf ("-- order decrease detected, Nordsieck modified\n"); #endif } /* Scale Nordsieck vectors if step size has been changed */ if (state->ni > 0 && h != hprev[0]) { size_t i, j; const double hrel = h / hprev[0]; double coeff = hrel; for (i = 1; i < ord + 1; i++) { for (j = 0; j < dim; j++) { z[i * dim + j] *= coeff; } coeff *= hrel; } #ifdef DEBUG printf ("-- h != hprev, Nordsieck modified\n"); #endif } /* Calculate polynomial coefficients (l), error coefficient and auxiliary coefficients */ msadams_calccoeffs (ord, state->ordwait, h, hprev, pc, l, &errcoeff, º1coeff, &ordp1coeff, &ordp2coeff); /* Carry out the prediction step */ { size_t i, j, k; for (i = 1; i < ord + 1; i++) for (j = ord; j > i - 1; j--) for (k = 0; k < dim; k++) { z[(j - 1) * dim + k] += z[j * dim + k]; } #ifdef DEBUG { size_t di; printf ("-- predicted y: "); for (di = 0; di < dim; di++) { printf ("%.5e ", z[di]); } printf ("\n"); } #endif } /* Calculate correction step to abscor */ { int s; s = msadams_corrector (vstate, sys, t, h, dim, z, errlev, l, errcoeff, abscor, relcor, ytmp, ytmp2); if (s != GSL_SUCCESS) { return s; } } { /* Add accepted final correction step to Nordsieck matrix */ size_t i, j; for (i = 0; i < ord + 1; i++) for (j = 0; j < dim; j++) { z[i * dim + j] += l[i] * gsl_vector_get (abscor, j); } #ifdef DEBUG { size_t di; printf ("-- corrected y: "); for (di = 0; di < dim; di++) { printf ("%.5e ", z[di]); } printf ("\n"); } #endif /* Derivatives at output */ if (dydt_out != NULL) { int s = GSL_ODEIV_FN_EVAL (sys, t + h, z, dydt_out); if (s == GSL_EBADFUNC) { return s; } if (s != GSL_SUCCESS) { msadams_failurehandler (vstate, dim, t); #ifdef DEBUG printf ("-- FAIL at user function evaluation\n"); #endif return s; } } /* Calculate error estimate */ for (i = 0; i < dim; i++) { yerr[i] = fabs (gsl_vector_get (abscor, i)) * errcoeff; } #ifdef DEBUG { size_t di; printf ("-- yerr: "); for (di = 0; di < dim; di++) { printf ("%.5e ", yerr[di]); } printf ("\n"); } #endif /* Save y values */ for (i = 0; i < dim; i++) { y[i] = z[0 * dim + i]; } } /* Scale abscor with errlev for later use in norm calculations */ { size_t i; for (i = 0; i < dim; i++) { gsl_vector_set (abscor, i, gsl_vector_get (abscor, i) / errlev[i]); } } /* Save items needed for evaluation of order increase on next call, if needed */ if (state->ordwait == 1 && ord < MSADAMS_MAX_ORD) { size_t i; state->ordp1coeffprev = ordp1coeff; state->ordm1coeff = ordm1coeff; for (i = 0; i < dim; i++) { gsl_vector_set (svec, i, gsl_vector_get (abscor, i)); } } /* Consider and execute order change for next step */ if (state->ordwait == 0) { msadams_eval_order (abscor, tempvec, svec, errcoeff, dim, errlev, state->ordm1coeff, ordp1coeff, state->ordp1coeffprev, ordp2coeff, hprev, h, z, &(state->ord), &(state->ordwait)); } /* Save information about current step in state and update counters */ { size_t i; state->ordprev = ord; for (i = MSADAMS_MAX_ORD - 1; i > 0; i--) { hprev[i] = hprev[i - 1]; } hprev[0] = h; #ifdef DEBUG { size_t di; printf ("-- hprev: "); for (di = 0; di < MSADAMS_MAX_ORD; di++) { printf ("%.5e ", hprev[di]); } printf ("\n"); } #endif state->tprev = t; state->ordwait--; state->ni++; } return GSL_SUCCESS; } static int msadams_set_driver (void *vstate, const gsl_odeiv2_driver * d) { msadams_state_t *state = (msadams_state_t *) vstate; state->driver = d; return GSL_SUCCESS; } static int msadams_reset (void *vstate, size_t dim) { msadams_state_t *state = (msadams_state_t *) vstate; state->ni = 0; state->ord = 1; state->ordprev = 1; state->ordprevbackup = 1; state->ordwait = 2; state->ordwaitbackup = 2; state->failord = 0; state->failt = GSL_NAN; state->failcount = 0; DBL_ZERO_MEMSET (state->hprev, MSADAMS_MAX_ORD); DBL_ZERO_MEMSET (state->z, (MSADAMS_MAX_ORD + 1) * dim); #ifdef DEBUG printf ("-- msadams_reset called\n"); #endif return GSL_SUCCESS; } static unsigned int msadams_order (void *vstate) { msadams_state_t *state = (msadams_state_t *) vstate; return state->ord; } static void msadams_free (void *vstate) { msadams_state_t *state = (msadams_state_t *) vstate; gsl_vector_free (state->tempvec); gsl_vector_free (state->svec); gsl_vector_free (state->relcor); gsl_vector_free (state->abscor); free (state->errlev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->pc); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); } static const gsl_odeiv2_step_type msadams_type = { "msadams", /* name */ 1, /* can use dydt_in? */ 1, /* gives exact dydt_out? */ &msadams_alloc, &msadams_apply, &msadams_set_driver, &msadams_reset, &msadams_order, &msadams_free }; const gsl_odeiv2_step_type *gsl_odeiv2_step_msadams = &msadams_type; gsl/ode-initval2/rk1imp.c0000644000175000017500000002741013536674414013602 0ustar eddedd/* ode-initval2/rk1imp.c * * Copyright (C) 2009, 2010 Tuomo Keskitalo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Implicit Euler a.k.a backward Euler method. */ /* Reference: Ascher, U.M., Petzold, L.R., Computer methods for ordinary differential and differential-algebraic equations, SIAM, Philadelphia, 1998. */ #include #include #include #include #include #include #include "odeiv_util.h" #include "rksubs.c" #include "modnewton1.c" /* Stage of method */ #define RK1IMP_STAGE 1 typedef struct { gsl_matrix *A; /* Runge-Kutta coefficients */ double *y_onestep; /* Result with one step */ double *y_twostep; /* Result with two half steps */ double *ytmp; /* Temporary work space */ double *y_save; /* Backup space */ double *YZ; /* Runge-Kutta points */ double *fYZ; /* Derivatives at YZ */ gsl_matrix *dfdy; /* Jacobian matrix */ double *dfdt; /* time derivative of f */ modnewton1_state_t *esol; /* nonlinear equation solver */ double *errlev; /* desired error level of y */ const gsl_odeiv2_driver *driver; /* pointer to driver object */ } rk1imp_state_t; static void * rk1imp_alloc (size_t dim) { rk1imp_state_t *state = (rk1imp_state_t *) malloc (sizeof (rk1imp_state_t)); if (state == 0) { GSL_ERROR_NULL ("failed to allocate space for rk1imp_state", GSL_ENOMEM); } state->A = gsl_matrix_alloc (RK1IMP_STAGE, RK1IMP_STAGE); if (state->A == 0) { free (state); GSL_ERROR_NULL ("failed to allocate space for A", GSL_ENOMEM); } state->y_onestep = (double *) malloc (dim * sizeof (double)); if (state->y_onestep == 0) { gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for y_onestep", GSL_ENOMEM); } state->y_twostep = (double *) malloc (dim * sizeof (double)); if (state->y_twostep == 0) { free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for y_onestep", GSL_ENOMEM); } state->ytmp = (double *) malloc (dim * sizeof (double)); if (state->ytmp == 0) { free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for ytmp", GSL_ENOMEM); } state->y_save = (double *) malloc (dim * sizeof (double)); if (state->y_save == 0) { free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for y_save", GSL_ENOMEM); } state->YZ = (double *) malloc (dim * RK1IMP_STAGE * sizeof (double)); if (state->YZ == 0) { free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for YZ", GSL_ENOMEM); } state->fYZ = (double *) malloc (dim * RK1IMP_STAGE * sizeof (double)); if (state->fYZ == 0) { free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for fYZ", GSL_ENOMEM); } state->dfdt = (double *) malloc (dim * sizeof (double)); if (state->dfdt == 0) { free (state->fYZ); free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for dfdt", GSL_ENOMEM); } state->dfdy = gsl_matrix_alloc (dim, dim); if (state->dfdy == 0) { free (state->dfdt); free (state->fYZ); free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for dfdy", GSL_ENOMEM); } state->esol = modnewton1_alloc (dim, RK1IMP_STAGE); if (state->esol == 0) { gsl_matrix_free (state->dfdy); free (state->dfdt); free (state->fYZ); free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for esol", GSL_ENOMEM); } state->errlev = (double *) malloc (dim * sizeof (double)); if (state->errlev == 0) { modnewton1_free (state->esol); gsl_matrix_free (state->dfdy); free (state->dfdt); free (state->fYZ); free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for errlev", GSL_ENOMEM); } state->driver = NULL; return state; } static int rk1imp_apply (void *vstate, size_t dim, double t, double h, double y[], double yerr[], const double dydt_in[], double dydt_out[], const gsl_odeiv2_system * sys) { /* Makes an implicit Euler step with size h and estimates the local error of the step by step doubling. */ rk1imp_state_t *state = (rk1imp_state_t *) vstate; double *const y_onestep = state->y_onestep; double *const y_twostep = state->y_twostep; double *const ytmp = state->ytmp; double *const y_save = state->y_save; double *const YZ = state->YZ; double *const fYZ = state->fYZ; gsl_matrix *const dfdy = state->dfdy; double *const dfdt = state->dfdt; double *const errlev = state->errlev; const modnewton1_state_t *esol = state->esol; /* Runge-Kutta coefficients */ gsl_matrix *A = state->A; const double b[] = { 1.0 }; const double c[] = { 1.0 }; gsl_matrix_set (A, 0, 0, 1.0); if (esol == NULL) { GSL_ERROR ("no non-linear equation solver speficied", GSL_EINVAL); } /* Get desired error levels via gsl_odeiv2_control object through driver object, which is a requirement for this stepper. */ if (state->driver == NULL) { return GSL_EFAULT; } else { size_t i; for (i = 0; i < dim; i++) { if (dydt_in != NULL) { gsl_odeiv2_control_errlevel (state->driver->c, y[i], dydt_in[i], h, i, &errlev[i]); } else { gsl_odeiv2_control_errlevel (state->driver->c, y[i], 0.0, h, i, &errlev[i]); } } } /* Evaluate Jacobian for modnewton1 */ { int s = GSL_ODEIV_JA_EVAL (sys, t, y, dfdy->data, dfdt); if (s != GSL_SUCCESS) { return s; } } /* Calculate a single step with size h */ { int s = modnewton1_init ((void *) esol, A, h, dfdy, sys); if (s != GSL_SUCCESS) { return s; } } { int s = modnewton1_solve ((void *) esol, A, c, t, h, y, sys, YZ, errlev); if (s != GSL_SUCCESS) { return s; } } { int s = GSL_ODEIV_FN_EVAL (sys, t + c[0] * h, YZ, fYZ); if (s != GSL_SUCCESS) { return s; } } { int s = rksubs (y_onestep, h, y, fYZ, b, RK1IMP_STAGE, dim); if (s != GSL_SUCCESS) return s; } /* Error estimation by step doubling */ { int s = modnewton1_init ((void *) esol, A, h / 2.0, dfdy, sys); if (s != GSL_SUCCESS) { return s; } } /* 1st half step */ { int s = modnewton1_solve ((void *) esol, A, c, t, h / 2.0, y, sys, YZ, errlev); if (s != GSL_SUCCESS) { return s; } } { int s = GSL_ODEIV_FN_EVAL (sys, t + c[0] * h / 2.0, YZ, fYZ); if (s != GSL_SUCCESS) { return s; } } { int s = rksubs (ytmp, h / 2.0, y, fYZ, b, RK1IMP_STAGE, dim); if (s != GSL_SUCCESS) return s; } /* Save original y values in case of error */ DBL_MEMCPY (y_save, y, dim); /* 2nd half step */ { int s = modnewton1_solve ((void *) esol, A, c, t + h / 2.0, h / 2.0, ytmp, sys, YZ, errlev); if (s != GSL_SUCCESS) { return s; } } { int s = GSL_ODEIV_FN_EVAL (sys, t + h / 2.0 + c[0] * h / 2.0, YZ, fYZ); if (s != GSL_SUCCESS) { return s; } } { /* Note: rk1imp returns y using the results from two half steps instead of the single step since the results are freely available and more precise. */ int s = rksubs (y_twostep, h / 2.0, ytmp, fYZ, b, RK1IMP_STAGE, dim); if (s != GSL_SUCCESS) { DBL_MEMCPY (y, y_save, dim); return s; } } DBL_MEMCPY (y, y_twostep, dim); /* Error estimation */ { size_t i; for (i = 0; i < dim; i++) { yerr[i] = ODEIV_ERR_SAFETY * 0.5 * fabs (y_twostep[i] - y_onestep[i]); } } /* Derivatives at output */ if (dydt_out != NULL) { int s = GSL_ODEIV_FN_EVAL (sys, t + h, y, dydt_out); if (s != GSL_SUCCESS) { /* Restore original values */ DBL_MEMCPY (y, y_save, dim); return s; } } return GSL_SUCCESS; } static int rk1imp_set_driver (void *vstate, const gsl_odeiv2_driver * d) { rk1imp_state_t *state = (rk1imp_state_t *) vstate; state->driver = d; return GSL_SUCCESS; } static int rk1imp_reset (void *vstate, size_t dim) { rk1imp_state_t *state = (rk1imp_state_t *) vstate; DBL_ZERO_MEMSET (state->y_onestep, dim); DBL_ZERO_MEMSET (state->y_twostep, dim); DBL_ZERO_MEMSET (state->ytmp, dim); DBL_ZERO_MEMSET (state->y_save, dim); DBL_ZERO_MEMSET (state->YZ, dim); DBL_ZERO_MEMSET (state->fYZ, dim); return GSL_SUCCESS; } static unsigned int rk1imp_order (void *vstate) { rk1imp_state_t *state = (rk1imp_state_t *) vstate; state = 0; /* prevent warnings about unused parameters */ return 1; } static void rk1imp_free (void *vstate) { rk1imp_state_t *state = (rk1imp_state_t *) vstate; free (state->errlev); modnewton1_free (state->esol); gsl_matrix_free (state->dfdy); free (state->dfdt); free (state->fYZ); free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); } static const gsl_odeiv2_step_type rk1imp_type = { "rk1imp", /* name */ 1, /* can use dydt_in? */ 1, /* gives exact dydt_out? */ &rk1imp_alloc, &rk1imp_apply, &rk1imp_set_driver, &rk1imp_reset, &rk1imp_order, &rk1imp_free }; const gsl_odeiv2_step_type *gsl_odeiv2_step_rk1imp = &rk1imp_type; gsl/ode-initval2/rk8pd.c0000644000175000017500000002775313536674414013441 0ustar eddedd/* ode-initval2/rk8pd.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Runge-Kutta 8(9), Prince-Dormand * * High Order Embedded Runge-Kutta Formulae * P.J. Prince and J.R. Dormand * J. Comp. Appl. Math.,7, pp. 67-75, 1981 */ /* Author: G. Jungman */ #include #include #include #include #include #include "odeiv_util.h" #include "step_utils.c" /* Prince-Dormand constants */ static const double Abar[] = { 14005451.0 / 335480064.0, 0.0, 0.0, 0.0, 0.0, -59238493.0 / 1068277825.0, 181606767.0 / 758867731.0, 561292985.0 / 797845732.0, -1041891430.0 / 1371343529.0, 760417239.0 / 1151165299.0, 118820643.0 / 751138087.0, -528747749.0 / 2220607170.0, 1.0 / 4.0 }; static const double A[] = { 13451932.0 / 455176623.0, 0.0, 0.0, 0.0, 0.0, -808719846.0 / 976000145.0, 1757004468.0 / 5645159321.0, 656045339.0 / 265891186.0, -3867574721.0 / 1518517206.0, 465885868.0 / 322736535.0, 53011238.0 / 667516719.0, 2.0 / 45.0 }; static const double ah[] = { 1.0 / 18.0, 1.0 / 12.0, 1.0 / 8.0, 5.0 / 16.0, 3.0 / 8.0, 59.0 / 400.0, 93.0 / 200.0, 5490023248.0 / 9719169821.0, 13.0 / 20.0, 1201146811.0 / 1299019798.0 }; static const double b21 = 1.0 / 18.0; static const double b3[] = { 1.0 / 48.0, 1.0 / 16.0 }; static const double b4[] = { 1.0 / 32.0, 0.0, 3.0 / 32.0 }; static const double b5[] = { 5.0 / 16.0, 0.0, -75.0 / 64.0, 75.0 / 64.0 }; static const double b6[] = { 3.0 / 80.0, 0.0, 0.0, 3.0 / 16.0, 3.0 / 20.0 }; static const double b7[] = { 29443841.0 / 614563906.0, 0.0, 0.0, 77736538.0 / 692538347.0, -28693883.0 / 1125000000.0, 23124283.0 / 1800000000.0 }; static const double b8[] = { 16016141.0 / 946692911.0, 0.0, 0.0, 61564180.0 / 158732637.0, 22789713.0 / 633445777.0, 545815736.0 / 2771057229.0, -180193667.0 / 1043307555.0 }; static const double b9[] = { 39632708.0 / 573591083.0, 0.0, 0.0, -433636366.0 / 683701615.0, -421739975.0 / 2616292301.0, 100302831.0 / 723423059.0, 790204164.0 / 839813087.0, 800635310.0 / 3783071287.0 }; static const double b10[] = { 246121993.0 / 1340847787.0, 0.0, 0.0, -37695042795.0 / 15268766246.0, -309121744.0 / 1061227803.0, -12992083.0 / 490766935.0, 6005943493.0 / 2108947869.0, 393006217.0 / 1396673457.0, 123872331.0 / 1001029789.0 }; static const double b11[] = { -1028468189.0 / 846180014.0, 0.0, 0.0, 8478235783.0 / 508512852.0, 1311729495.0 / 1432422823.0, -10304129995.0 / 1701304382.0, -48777925059.0 / 3047939560.0, 15336726248.0 / 1032824649.0, -45442868181.0 / 3398467696.0, 3065993473.0 / 597172653.0 }; static const double b12[] = { 185892177.0 / 718116043.0, 0.0, 0.0, -3185094517.0 / 667107341.0, -477755414.0 / 1098053517.0, -703635378.0 / 230739211.0, 5731566787.0 / 1027545527.0, 5232866602.0 / 850066563.0, -4093664535.0 / 808688257.0, 3962137247.0 / 1805957418.0, 65686358.0 / 487910083.0 }; static const double b13[] = { 403863854.0 / 491063109.0, 0.0, 0.0, -5068492393.0 / 434740067.0, -411421997.0 / 543043805.0, 652783627.0 / 914296604.0, 11173962825.0 / 925320556.0, -13158990841.0 / 6184727034.0, 3936647629.0 / 1978049680.0, -160528059.0 / 685178525.0, 248638103.0 / 1413531060.0, 0.0 }; typedef struct { double *k[13]; double *ytmp; double *y0; } rk8pd_state_t; static void * rk8pd_alloc (size_t dim) { rk8pd_state_t *state = (rk8pd_state_t *) malloc (sizeof (rk8pd_state_t)); int i, j; if (state == 0) { GSL_ERROR_NULL ("failed to allocate space for rk8pd_state", GSL_ENOMEM); } state->ytmp = (double *) malloc (dim * sizeof (double)); if (state->ytmp == 0) { free (state); GSL_ERROR_NULL ("failed to allocate space for ytmp", GSL_ENOMEM); } state->y0 = (double *) malloc (dim * sizeof (double)); if (state->y0 == 0) { free (state->ytmp); free (state); GSL_ERROR_NULL ("failed to allocate space for y0", GSL_ENOMEM); } for (i = 0; i < 13; i++) { state->k[i] = (double *) malloc (dim * sizeof (double)); if (state->k[i] == 0) { for (j = 0; j < i; j++) { free (state->k[j]); } free (state->y0); free (state->ytmp); free (state); GSL_ERROR_NULL ("failed to allocate space for k's", GSL_ENOMEM); } } return state; } static int rk8pd_apply (void *vstate, size_t dim, double t, double h, double y[], double yerr[], const double dydt_in[], double dydt_out[], const gsl_odeiv2_system * sys) { rk8pd_state_t *state = (rk8pd_state_t *) vstate; size_t i; double *const ytmp = state->ytmp; double *const y0 = state->y0; /* Note that k1 is stored in state->k[0] due to zero-based indexing */ double *const k1 = state->k[0]; double *const k2 = state->k[1]; double *const k3 = state->k[2]; double *const k4 = state->k[3]; double *const k5 = state->k[4]; double *const k6 = state->k[5]; double *const k7 = state->k[6]; double *const k8 = state->k[7]; double *const k9 = state->k[8]; double *const k10 = state->k[9]; double *const k11 = state->k[10]; double *const k12 = state->k[11]; double *const k13 = state->k[12]; DBL_MEMCPY (y0, y, dim); /* k1 step */ if (dydt_in != NULL) { DBL_MEMCPY (k1, dydt_in, dim); } else { int s = GSL_ODEIV_FN_EVAL (sys, t, y, k1); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + b21 * h * k1[i]; /* k2 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[0] * h, ytmp, k2); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b3[0] * k1[i] + b3[1] * k2[i]); /* k3 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[1] * h, ytmp, k3); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b4[0] * k1[i] + b4[2] * k3[i]); /* k4 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[2] * h, ytmp, k4); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b5[0] * k1[i] + b5[2] * k3[i] + b5[3] * k4[i]); /* k5 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[3] * h, ytmp, k5); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b6[0] * k1[i] + b6[3] * k4[i] + b6[4] * k5[i]); /* k6 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[4] * h, ytmp, k6); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b7[0] * k1[i] + b7[3] * k4[i] + b7[4] * k5[i] + b7[5] * k6[i]); /* k7 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[5] * h, ytmp, k7); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b8[0] * k1[i] + b8[3] * k4[i] + b8[4] * k5[i] + b8[5] * k6[i] + b8[6] * k7[i]); /* k8 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[6] * h, ytmp, k8); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b9[0] * k1[i] + b9[3] * k4[i] + b9[4] * k5[i] + b9[5] * k6[i] + b9[6] * k7[i] + b9[7] * k8[i]); /* k9 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[7] * h, ytmp, k9); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b10[0] * k1[i] + b10[3] * k4[i] + b10[4] * k5[i] + b10[5] * k6[i] + b10[6] * k7[i] + b10[7] * k8[i] + b10[8] * k9[i]); /* k10 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[8] * h, ytmp, k10); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b11[0] * k1[i] + b11[3] * k4[i] + b11[4] * k5[i] + b11[5] * k6[i] + b11[6] * k7[i] + b11[7] * k8[i] + b11[8] * k9[i] + b11[9] * k10[i]); /* k11 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[9] * h, ytmp, k11); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b12[0] * k1[i] + b12[3] * k4[i] + b12[4] * k5[i] + b12[5] * k6[i] + b12[6] * k7[i] + b12[7] * k8[i] + b12[8] * k9[i] + b12[9] * k10[i] + b12[10] * k11[i]); /* k12 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + h, ytmp, k12); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b13[0] * k1[i] + b13[3] * k4[i] + b13[4] * k5[i] + b13[5] * k6[i] + b13[6] * k7[i] + b13[7] * k8[i] + b13[8] * k9[i] + b13[9] * k10[i] + b13[10] * k11[i] + b13[11] * k12[i]); /* k13 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + h, ytmp, k13); if (s != GSL_SUCCESS) { return s; } } /* final sum */ for (i = 0; i < dim; i++) { const double ksum8 = Abar[0] * k1[i] + Abar[5] * k6[i] + Abar[6] * k7[i] + Abar[7] * k8[i] + Abar[8] * k9[i] + Abar[9] * k10[i] + Abar[10] * k11[i] + Abar[11] * k12[i] + Abar[12] * k13[i]; y[i] += h * ksum8; } /* Evaluate dydt_out[]. */ if (dydt_out != NULL) { int s = GSL_ODEIV_FN_EVAL (sys, t + h, y, dydt_out); if (s != GSL_SUCCESS) { /* Restore initial values */ DBL_MEMCPY (y, y0, dim); return s; } } /* error estimate */ for (i = 0; i < dim; i++) { const double ksum8 = Abar[0] * k1[i] + Abar[5] * k6[i] + Abar[6] * k7[i] + Abar[7] * k8[i] + Abar[8] * k9[i] + Abar[9] * k10[i] + Abar[10] * k11[i] + Abar[11] * k12[i] + Abar[12] * k13[i]; const double ksum7 = A[0] * k1[i] + A[5] * k6[i] + A[6] * k7[i] + A[7] * k8[i] + A[8] * k9[i] + A[9] * k10[i] + A[10] * k11[i] + A[11] * k12[i]; yerr[i] = h * (ksum7 - ksum8); } return GSL_SUCCESS; } static int rk8pd_reset (void *vstate, size_t dim) { rk8pd_state_t *state = (rk8pd_state_t *) vstate; int i; for (i = 0; i < 13; i++) { DBL_ZERO_MEMSET (state->k[i], dim); } DBL_ZERO_MEMSET (state->y0, dim); DBL_ZERO_MEMSET (state->ytmp, dim); return GSL_SUCCESS; } static unsigned int rk8pd_order (void *vstate) { rk8pd_state_t *state = (rk8pd_state_t *) vstate; state = 0; /* prevent warnings about unused parameters */ return 8; } static void rk8pd_free (void *vstate) { rk8pd_state_t *state = (rk8pd_state_t *) vstate; int i; for (i = 0; i < 13; i++) { free (state->k[i]); } free (state->y0); free (state->ytmp); free (state); } static const gsl_odeiv2_step_type rk8pd_type = { "rk8pd", /* name */ 1, /* can use dydt_in */ 1, /* gives exact dydt_out */ &rk8pd_alloc, &rk8pd_apply, &stepper_set_driver_null, &rk8pd_reset, &rk8pd_order, &rk8pd_free }; const gsl_odeiv2_step_type *gsl_odeiv2_step_rk8pd = &rk8pd_type; gsl/ode-initval2/gsl_odeiv2.h0000644000175000017500000003272513536674414014446 0ustar eddedd/* ode-initval/odeiv2.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ /* Modified by Tuomo Keskitalo */ #ifndef __GSL_ODEIV2_H__ #define __GSL_ODEIV2_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Description of a system of ODEs. * * y' = f(t,y) = dydt(t, y) * * The system is specified by giving the right-hand-side * of the equation and possibly a jacobian function. * * Some methods require the jacobian function, which calculates * the matrix dfdy and the vector dfdt. The matrix dfdy conforms * to the GSL standard, being a continuous range of floating point * values, in row-order. * * As with GSL function objects, user-supplied parameter * data is also present. */ typedef struct { int (*function) (double t, const double y[], double dydt[], void *params); int (*jacobian) (double t, const double y[], double *dfdy, double dfdt[], void *params); size_t dimension; void *params; } gsl_odeiv2_system; /* Function evaluation macros */ #define GSL_ODEIV_FN_EVAL(S,t,y,f) (*((S)->function))(t,y,f,(S)->params) #define GSL_ODEIV_JA_EVAL(S,t,y,dfdy,dfdt) (*((S)->jacobian))(t,y,dfdy,dfdt,(S)->params) /* Type definitions */ typedef struct gsl_odeiv2_step_struct gsl_odeiv2_step; typedef struct gsl_odeiv2_control_struct gsl_odeiv2_control; typedef struct gsl_odeiv2_evolve_struct gsl_odeiv2_evolve; typedef struct gsl_odeiv2_driver_struct gsl_odeiv2_driver; /* Stepper object * * Opaque object for stepping an ODE system from t to t+h. * In general the object has some state which facilitates * iterating the stepping operation. */ typedef struct { const char *name; int can_use_dydt_in; int gives_exact_dydt_out; void *(*alloc) (size_t dim); int (*apply) (void *state, size_t dim, double t, double h, double y[], double yerr[], const double dydt_in[], double dydt_out[], const gsl_odeiv2_system * dydt); int (*set_driver) (void *state, const gsl_odeiv2_driver * d); int (*reset) (void *state, size_t dim); unsigned int (*order) (void *state); void (*free) (void *state); } gsl_odeiv2_step_type; struct gsl_odeiv2_step_struct { const gsl_odeiv2_step_type *type; size_t dimension; void *state; }; /* Available stepper types */ GSL_VAR const gsl_odeiv2_step_type *gsl_odeiv2_step_rk2; GSL_VAR const gsl_odeiv2_step_type *gsl_odeiv2_step_rk4; GSL_VAR const gsl_odeiv2_step_type *gsl_odeiv2_step_rkf45; GSL_VAR const gsl_odeiv2_step_type *gsl_odeiv2_step_rkck; GSL_VAR const gsl_odeiv2_step_type *gsl_odeiv2_step_rk8pd; GSL_VAR const gsl_odeiv2_step_type *gsl_odeiv2_step_rk2imp; GSL_VAR const gsl_odeiv2_step_type *gsl_odeiv2_step_rk4imp; GSL_VAR const gsl_odeiv2_step_type *gsl_odeiv2_step_bsimp; GSL_VAR const gsl_odeiv2_step_type *gsl_odeiv2_step_rk1imp; GSL_VAR const gsl_odeiv2_step_type *gsl_odeiv2_step_msadams; GSL_VAR const gsl_odeiv2_step_type *gsl_odeiv2_step_msbdf; /* Stepper object methods */ gsl_odeiv2_step *gsl_odeiv2_step_alloc (const gsl_odeiv2_step_type * T, size_t dim); int gsl_odeiv2_step_reset (gsl_odeiv2_step * s); void gsl_odeiv2_step_free (gsl_odeiv2_step * s); const char *gsl_odeiv2_step_name (const gsl_odeiv2_step * s); unsigned int gsl_odeiv2_step_order (const gsl_odeiv2_step * s); int gsl_odeiv2_step_apply (gsl_odeiv2_step * s, double t, double h, double y[], double yerr[], const double dydt_in[], double dydt_out[], const gsl_odeiv2_system * dydt); int gsl_odeiv2_step_set_driver (gsl_odeiv2_step * s, const gsl_odeiv2_driver * d); /* Step size control object. */ typedef struct { const char *name; void *(*alloc) (void); int (*init) (void *state, double eps_abs, double eps_rel, double a_y, double a_dydt); int (*hadjust) (void *state, size_t dim, unsigned int ord, const double y[], const double yerr[], const double yp[], double *h); int (*errlevel) (void *state, const double y, const double dydt, const double h, const size_t ind, double *errlev); int (*set_driver) (void *state, const gsl_odeiv2_driver * d); void (*free) (void *state); } gsl_odeiv2_control_type; struct gsl_odeiv2_control_struct { const gsl_odeiv2_control_type *type; void *state; }; /* Possible return values for an hadjust() evolution method */ #define GSL_ODEIV_HADJ_INC 1 /* step was increased */ #define GSL_ODEIV_HADJ_NIL 0 /* step unchanged */ #define GSL_ODEIV_HADJ_DEC (-1) /* step decreased */ /* General step size control methods. * * The hadjust() method controls the adjustment of * step size given the result of a step and the error. * Valid hadjust() methods must return one of the codes below. * errlevel function calculates the desired error level D0. * * The general data can be used by specializations * to store state and control their heuristics. */ gsl_odeiv2_control *gsl_odeiv2_control_alloc (const gsl_odeiv2_control_type * T); int gsl_odeiv2_control_init (gsl_odeiv2_control * c, double eps_abs, double eps_rel, double a_y, double a_dydt); void gsl_odeiv2_control_free (gsl_odeiv2_control * c); int gsl_odeiv2_control_hadjust (gsl_odeiv2_control * c, gsl_odeiv2_step * s, const double y[], const double yerr[], const double dydt[], double *h); const char *gsl_odeiv2_control_name (const gsl_odeiv2_control * c); int gsl_odeiv2_control_errlevel (gsl_odeiv2_control * c, const double y, const double dydt, const double h, const size_t ind, double *errlev); int gsl_odeiv2_control_set_driver (gsl_odeiv2_control * c, const gsl_odeiv2_driver * d); /* Available control object constructors. * * The standard control object is a four parameter heuristic * defined as follows: * D0 = eps_abs + eps_rel * (a_y |y| + a_dydt h |y'|) * D1 = |yerr| * q = consistency order of method (q=4 for 4(5) embedded RK) * S = safety factor (0.9 say) * * / (D0/D1)^(1/(q+1)) D0 >= D1 * h_NEW = S h_OLD * | * \ (D0/D1)^(1/q) D0 < D1 * * This encompasses all the standard error scaling methods. * * The y method is the standard method with a_y=1, a_dydt=0. * The yp method is the standard method with a_y=0, a_dydt=1. */ gsl_odeiv2_control *gsl_odeiv2_control_standard_new (double eps_abs, double eps_rel, double a_y, double a_dydt); gsl_odeiv2_control *gsl_odeiv2_control_y_new (double eps_abs, double eps_rel); gsl_odeiv2_control *gsl_odeiv2_control_yp_new (double eps_abs, double eps_rel); /* This controller computes errors using different absolute errors for * each component * * D0 = eps_abs * scale_abs[i] + eps_rel * (a_y |y| + a_dydt h |y'|) */ gsl_odeiv2_control *gsl_odeiv2_control_scaled_new (double eps_abs, double eps_rel, double a_y, double a_dydt, const double scale_abs[], size_t dim); /* Evolution object */ struct gsl_odeiv2_evolve_struct { size_t dimension; double *y0; double *yerr; double *dydt_in; double *dydt_out; double last_step; unsigned long int count; unsigned long int failed_steps; const gsl_odeiv2_driver *driver; }; /* Evolution object methods */ gsl_odeiv2_evolve *gsl_odeiv2_evolve_alloc (size_t dim); int gsl_odeiv2_evolve_apply (gsl_odeiv2_evolve * e, gsl_odeiv2_control * con, gsl_odeiv2_step * step, const gsl_odeiv2_system * dydt, double *t, double t1, double *h, double y[]); int gsl_odeiv2_evolve_apply_fixed_step (gsl_odeiv2_evolve * e, gsl_odeiv2_control * con, gsl_odeiv2_step * step, const gsl_odeiv2_system * dydt, double *t, const double h0, double y[]); int gsl_odeiv2_evolve_reset (gsl_odeiv2_evolve * e); void gsl_odeiv2_evolve_free (gsl_odeiv2_evolve * e); int gsl_odeiv2_evolve_set_driver (gsl_odeiv2_evolve * e, const gsl_odeiv2_driver * d); /* Driver object * * This is a high level wrapper for step, control and * evolve objects. */ struct gsl_odeiv2_driver_struct { const gsl_odeiv2_system *sys; /* ODE system */ gsl_odeiv2_step *s; /* stepper object */ gsl_odeiv2_control *c; /* control object */ gsl_odeiv2_evolve *e; /* evolve object */ double h; /* step size */ double hmin; /* minimum step size allowed */ double hmax; /* maximum step size allowed */ unsigned long int n; /* number of steps taken */ unsigned long int nmax; /* Maximum number of steps allowed */ }; /* Driver object methods */ gsl_odeiv2_driver *gsl_odeiv2_driver_alloc_y_new (const gsl_odeiv2_system * sys, const gsl_odeiv2_step_type * T, const double hstart, const double epsabs, const double epsrel); gsl_odeiv2_driver *gsl_odeiv2_driver_alloc_yp_new (const gsl_odeiv2_system * sys, const gsl_odeiv2_step_type * T, const double hstart, const double epsabs, const double epsrel); gsl_odeiv2_driver *gsl_odeiv2_driver_alloc_scaled_new (const gsl_odeiv2_system * sys, const gsl_odeiv2_step_type * T, const double hstart, const double epsabs, const double epsrel, const double a_y, const double a_dydt, const double scale_abs[]); gsl_odeiv2_driver *gsl_odeiv2_driver_alloc_standard_new (const gsl_odeiv2_system * sys, const gsl_odeiv2_step_type * T, const double hstart, const double epsabs, const double epsrel, const double a_y, const double a_dydt); int gsl_odeiv2_driver_set_hmin (gsl_odeiv2_driver * d, const double hmin); int gsl_odeiv2_driver_set_hmax (gsl_odeiv2_driver * d, const double hmax); int gsl_odeiv2_driver_set_nmax (gsl_odeiv2_driver * d, const unsigned long int nmax); int gsl_odeiv2_driver_apply (gsl_odeiv2_driver * d, double *t, const double t1, double y[]); int gsl_odeiv2_driver_apply_fixed_step (gsl_odeiv2_driver * d, double *t, const double h, const unsigned long int n, double y[]); int gsl_odeiv2_driver_reset (gsl_odeiv2_driver * d); int gsl_odeiv2_driver_reset_hstart (gsl_odeiv2_driver * d, const double hstart); void gsl_odeiv2_driver_free (gsl_odeiv2_driver * state); __END_DECLS #endif /* __GSL_ODEIV2_H__ */ gsl/ode-initval2/rk2imp.c0000644000175000017500000003353113536674414013604 0ustar eddedd/* ode-initval2/rk2imp.c * * Copyright (C) 2009, 2010 Tuomo Keskitalo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Based on rk2imp.c by Gerard Jungman */ /* Runge-Kutta 2, Gaussian implicit. Also known as implicit midpoint rule. Error estimation is carried out by the step doubling method. */ /* Reference: Ascher, U.M., Petzold, L.R., Computer methods for ordinary differential and differential-algebraic equations, SIAM, Philadelphia, 1998. */ #include #include #include #include #include #include #include "odeiv_util.h" #include "rksubs.c" #include "modnewton1.c" /* Stage of method */ #define RK2IMP_STAGE 1 typedef struct { gsl_matrix *A; /* Runge-Kutta coefficients */ double *y_onestep; /* Result with one step */ double *y_twostep; /* Result with two half steps */ double *ytmp; /* Temporary work space */ double *y_save; /* Backup space */ double *YZ; /* Runge-Kutta points */ double *fYZ; /* Derivatives at YZ */ gsl_matrix *dfdy; /* Jacobian matrix */ double *dfdt; /* time derivative of f */ modnewton1_state_t *esol; /* nonlinear equation solver */ double *errlev; /* desired error level of y */ const gsl_odeiv2_driver *driver; /* pointer to driver object */ } rk2imp_state_t; static void * rk2imp_alloc (size_t dim) { rk2imp_state_t *state = (rk2imp_state_t *) malloc (sizeof (rk2imp_state_t)); if (state == 0) { GSL_ERROR_NULL ("failed to allocate space for rk2imp_state", GSL_ENOMEM); } state->A = gsl_matrix_alloc (RK2IMP_STAGE, RK2IMP_STAGE); if (state->A == 0) { free (state); GSL_ERROR_NULL ("failed to allocate space for A", GSL_ENOMEM); } state->y_onestep = (double *) malloc (dim * sizeof (double)); if (state->y_onestep == 0) { gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for y_onestep", GSL_ENOMEM); } state->y_twostep = (double *) malloc (dim * sizeof (double)); if (state->y_twostep == 0) { free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for y_onestep", GSL_ENOMEM); } state->ytmp = (double *) malloc (dim * sizeof (double)); if (state->ytmp == 0) { free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for ytmp", GSL_ENOMEM); } state->y_save = (double *) malloc (dim * sizeof (double)); if (state->y_save == 0) { free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for y_save", GSL_ENOMEM); } state->YZ = (double *) malloc (dim * RK2IMP_STAGE * sizeof (double)); if (state->YZ == 0) { free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for YZ", GSL_ENOMEM); } state->fYZ = (double *) malloc (dim * RK2IMP_STAGE * sizeof (double)); if (state->fYZ == 0) { free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for fYZ", GSL_ENOMEM); } state->dfdt = (double *) malloc (dim * sizeof (double)); if (state->dfdt == 0) { free (state->fYZ); free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for dfdt", GSL_ENOMEM); } state->dfdy = gsl_matrix_alloc (dim, dim); if (state->dfdy == 0) { free (state->dfdt); free (state->fYZ); free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for dfdy", GSL_ENOMEM); } state->esol = modnewton1_alloc (dim, RK2IMP_STAGE); if (state->esol == 0) { gsl_matrix_free (state->dfdy); free (state->dfdt); free (state->fYZ); free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for esol", GSL_ENOMEM); } state->errlev = (double *) malloc (dim * sizeof (double)); if (state->errlev == 0) { modnewton1_free (state->esol); gsl_matrix_free (state->dfdy); free (state->dfdt); free (state->fYZ); free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for errlev", GSL_ENOMEM); } state->driver = NULL; return state; } static int rk2imp_apply (void *vstate, size_t dim, double t, double h, double y[], double yerr[], const double dydt_in[], double dydt_out[], const gsl_odeiv2_system * sys) { /* Makes a Gaussian implicit 4th order Runge-Kutta step with size h and estimates the local error of the step by step doubling. */ rk2imp_state_t *state = (rk2imp_state_t *) vstate; double *const y_onestep = state->y_onestep; double *const y_twostep = state->y_twostep; double *const ytmp = state->ytmp; double *const y_save = state->y_save; double *const YZ = state->YZ; double *const fYZ = state->fYZ; gsl_matrix *const dfdy = state->dfdy; double *const dfdt = state->dfdt; double *const errlev = state->errlev; const modnewton1_state_t *esol = state->esol; #ifdef DEBUG { size_t di; printf ("rk2imp_apply: t=%.5e, h=%.5e, y:", t, h); for (di = 0; di < dim; di++) { printf ("%.5e ", y[di]); } printf ("\n"); } #endif /* Runge-Kutta coefficients */ gsl_matrix *A = state->A; const double b[] = { 1.0 }; const double c[] = { 0.5 }; gsl_matrix_set (A, 0, 0, 0.5); if (esol == NULL) { GSL_ERROR ("no non-linear equation solver speficied", GSL_EINVAL); } /* Get desired error levels via gsl_odeiv2_control object through driver object, which is a requirement for this stepper. */ if (state->driver == NULL) { return GSL_EFAULT; } else { size_t i; for (i = 0; i < dim; i++) { if (dydt_in != NULL) { gsl_odeiv2_control_errlevel (state->driver->c, y[i], dydt_in[i], h, i, &errlev[i]); } else { gsl_odeiv2_control_errlevel (state->driver->c, y[i], 0.0, h, i, &errlev[i]); } } } /* Evaluate Jacobian for modnewton1 */ { #ifdef DEBUG printf ("-- evaluate jacobian\n"); #endif int s = GSL_ODEIV_JA_EVAL (sys, t, y, dfdy->data, dfdt); if (s != GSL_SUCCESS) { #ifdef DEBUG printf ("-- FAIL at jacobian function evaluation\n"); #endif return s; } #ifdef DEBUG size_t M; size_t N; size_t i; size_t j; M = dfdy->size1; N = dfdy->size2; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { double aij = gsl_matrix_get (dfdy, i, j); printf ("(%3lu,%3lu)[%lu,%lu]: %22.18g\n", M, N, i, j, aij); } } #endif } /* Calculate a single step with size h */ { int s = modnewton1_init ((void *) esol, A, h, dfdy, sys); if (s != GSL_SUCCESS) { return s; } #ifdef DEBUG size_t M; size_t N; size_t i; size_t j; printf ("-- modnewton1_init IhAJ:\n"); M = esol->IhAJ->size1; N = esol->IhAJ->size2; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { double aij = gsl_matrix_get (esol->IhAJ, i, j); printf ("(%3lu,%3lu)[%lu,%lu]: %22.18g\n", M, N, i, j, aij); } } printf ("-- modnewton1_init p:\n"); M = esol->p->size; for (i = 0; i < M; i++) { double pi = gsl_permutation_get (esol->p, i); printf ("(%3lu)[%lu]: %22.18g\n", M, i, pi); } #endif } { int s = modnewton1_solve ((void *) esol, A, c, t, h, y, sys, YZ, errlev); #ifdef DEBUG printf ("-- modnewton1_solve s=%d\n", s); #endif if (s != GSL_SUCCESS) { return s; } } #ifdef DEBUG { size_t di; printf ("YZ:"); for (di = 0; di < dim * RK2IMP_STAGE; di++) { printf ("%.5e ", YZ[di]); } printf ("\n"); } #endif { int s = GSL_ODEIV_FN_EVAL (sys, t + c[0] * h, YZ, fYZ); if (s != GSL_SUCCESS) { return s; } } #ifdef DEBUG { size_t di; printf ("fYZ:"); for (di = 0; di < dim * RK2IMP_STAGE; di++) { printf ("%.5e ", fYZ[di]); } printf ("\n"); } #endif { int s = rksubs (y_onestep, h, y, fYZ, b, RK2IMP_STAGE, dim); if (s != GSL_SUCCESS) { return s; } } /* Error estimation by step doubling */ { int s = modnewton1_init ((void *) esol, A, h / 2.0, dfdy, sys); if (s != GSL_SUCCESS) { return s; } } /* 1st half step */ { int s = modnewton1_solve ((void *) esol, A, c, t, h / 2.0, y, sys, YZ, errlev); if (s != GSL_SUCCESS) return s; } { int s = GSL_ODEIV_FN_EVAL (sys, t + c[0] * h / 2.0, YZ, fYZ); if (s != GSL_SUCCESS) { return s; } } { int s = rksubs (ytmp, h / 2.0, y, fYZ, b, RK2IMP_STAGE, dim); if (s != GSL_SUCCESS) { return s; } } /* Save original y values in case of error */ DBL_MEMCPY (y_save, y, dim); /* 2nd half step */ { int s = modnewton1_solve ((void *) esol, A, c, t + h / 2.0, h / 2.0, ytmp, sys, YZ, errlev); if (s != GSL_SUCCESS) { return s; } } { int s = GSL_ODEIV_FN_EVAL (sys, t + h / 2.0 + c[0] * h / 2.0, YZ, fYZ); if (s != GSL_SUCCESS) { return s; } } { /* Note: rk2imp returns y using the results from two half steps instead of the single step since the results are freely available and more precise. */ int s = rksubs (y_twostep, h / 2.0, ytmp, fYZ, b, RK2IMP_STAGE, dim); if (s != GSL_SUCCESS) { DBL_MEMCPY (y, y_save, dim); return s; } } DBL_MEMCPY (y, y_twostep, dim); /* Error estimation */ { size_t i; for (i = 0; i < dim; i++) { yerr[i] = ODEIV_ERR_SAFETY * 0.5 * fabs (y_twostep[i] - y_onestep[i]) / 3.0; } } #ifdef DEBUG { size_t i; printf ("-- error estimates: "); for (i = 0; i < dim; i++) { printf ("%.5e ", yerr[i]); } printf ("\n"); } #endif /* Derivatives at output */ if (dydt_out != NULL) { int s = GSL_ODEIV_FN_EVAL (sys, t + h, y, dydt_out); if (s != GSL_SUCCESS) { /* Restore original values */ DBL_MEMCPY (y, y_save, dim); return s; } } return GSL_SUCCESS; } static int rk2imp_set_driver (void *vstate, const gsl_odeiv2_driver * d) { rk2imp_state_t *state = (rk2imp_state_t *) vstate; state->driver = d; return GSL_SUCCESS; } static int rk2imp_reset (void *vstate, size_t dim) { rk2imp_state_t *state = (rk2imp_state_t *) vstate; DBL_ZERO_MEMSET (state->y_onestep, dim); DBL_ZERO_MEMSET (state->y_twostep, dim); DBL_ZERO_MEMSET (state->ytmp, dim); DBL_ZERO_MEMSET (state->y_save, dim); DBL_ZERO_MEMSET (state->YZ, dim); DBL_ZERO_MEMSET (state->fYZ, dim); return GSL_SUCCESS; } static unsigned int rk2imp_order (void *vstate) { rk2imp_state_t *state = (rk2imp_state_t *) vstate; state = 0; /* prevent warnings about unused parameters */ return 2; } static void rk2imp_free (void *vstate) { rk2imp_state_t *state = (rk2imp_state_t *) vstate; free (state->errlev); modnewton1_free (state->esol); gsl_matrix_free (state->dfdy); free (state->dfdt); free (state->fYZ); free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); } static const gsl_odeiv2_step_type rk2imp_type = { "rk2imp", /* name */ 1, /* can use dydt_in? */ 1, /* gives exact dydt_out? */ &rk2imp_alloc, &rk2imp_apply, &rk2imp_set_driver, &rk2imp_reset, &rk2imp_order, &rk2imp_free }; const gsl_odeiv2_step_type *gsl_odeiv2_step_rk2imp = &rk2imp_type; gsl/ode-initval2/rkck.c0000644000175000017500000002071313536674414013330 0ustar eddedd/* ode-initval2/rkck.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Runge-Kutta 4(5), Cash-Karp */ /* Reference: Cash, J.R., Karp, A.H., ACM Transactions of Mathematical Software, vol. 16 (1990) 201-222. */ /* Author: G. Jungman */ #include #include #include #include #include #include "odeiv_util.h" #include "step_utils.c" /* Cash-Karp constants */ static const double ah[] = { 1.0 / 5.0, 0.3, 3.0 / 5.0, 1.0, 7.0 / 8.0 }; static const double b21 = 1.0 / 5.0; static const double b3[] = { 3.0 / 40.0, 9.0 / 40.0 }; static const double b4[] = { 0.3, -0.9, 1.2 }; static const double b5[] = { -11.0 / 54.0, 2.5, -70.0 / 27.0, 35.0 / 27.0 }; static const double b6[] = { 1631.0 / 55296.0, 175.0 / 512.0, 575.0 / 13824.0, 44275.0 / 110592.0, 253.0 / 4096.0 }; static const double c1 = 37.0 / 378.0; static const double c3 = 250.0 / 621.0; static const double c4 = 125.0 / 594.0; static const double c6 = 512.0 / 1771.0; /* These are the differences of fifth and fourth order coefficients for error estimation */ static const double ec[] = { 0.0, 37.0 / 378.0 - 2825.0 / 27648.0, 0.0, 250.0 / 621.0 - 18575.0 / 48384.0, 125.0 / 594.0 - 13525.0 / 55296.0, -277.0 / 14336.0, 512.0 / 1771.0 - 0.25 }; typedef struct { double *k1; double *k2; double *k3; double *k4; double *k5; double *k6; double *y0; double *ytmp; } rkck_state_t; static void * rkck_alloc (size_t dim) { rkck_state_t *state = (rkck_state_t *) malloc (sizeof (rkck_state_t)); if (state == 0) { GSL_ERROR_NULL ("failed to allocate space for rkck_state", GSL_ENOMEM); } state->k1 = (double *) malloc (dim * sizeof (double)); if (state->k1 == 0) { free (state); GSL_ERROR_NULL ("failed to allocate space for k1", GSL_ENOMEM); } state->k2 = (double *) malloc (dim * sizeof (double)); if (state->k2 == 0) { free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for k2", GSL_ENOMEM); } state->k3 = (double *) malloc (dim * sizeof (double)); if (state->k3 == 0) { free (state->k2); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for k3", GSL_ENOMEM); } state->k4 = (double *) malloc (dim * sizeof (double)); if (state->k4 == 0) { free (state->k3); free (state->k2); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for k4", GSL_ENOMEM); } state->k5 = (double *) malloc (dim * sizeof (double)); if (state->k5 == 0) { free (state->k4); free (state->k3); free (state->k2); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for k5", GSL_ENOMEM); } state->k6 = (double *) malloc (dim * sizeof (double)); if (state->k6 == 0) { free (state->k5); free (state->k4); free (state->k3); free (state->k2); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for k6", GSL_ENOMEM); } state->y0 = (double *) malloc (dim * sizeof (double)); if (state->y0 == 0) { free (state->k6); free (state->k5); free (state->k4); free (state->k3); free (state->k2); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for y0", GSL_ENOMEM); } state->ytmp = (double *) malloc (dim * sizeof (double)); if (state->ytmp == 0) { free (state->y0); free (state->k6); free (state->k5); free (state->k4); free (state->k3); free (state->k2); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for ytmp", GSL_ENOMEM); } return state; } static int rkck_apply (void *vstate, size_t dim, double t, double h, double y[], double yerr[], const double dydt_in[], double dydt_out[], const gsl_odeiv2_system * sys) { rkck_state_t *state = (rkck_state_t *) vstate; size_t i; double *const k1 = state->k1; double *const k2 = state->k2; double *const k3 = state->k3; double *const k4 = state->k4; double *const k5 = state->k5; double *const k6 = state->k6; double *const ytmp = state->ytmp; double *const y0 = state->y0; DBL_MEMCPY (y0, y, dim); /* k1 step */ if (dydt_in != NULL) { DBL_MEMCPY (k1, dydt_in, dim); } else { int s = GSL_ODEIV_FN_EVAL (sys, t, y, k1); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + b21 * h * k1[i]; /* k2 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[0] * h, ytmp, k2); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b3[0] * k1[i] + b3[1] * k2[i]); /* k3 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[1] * h, ytmp, k3); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b4[0] * k1[i] + b4[1] * k2[i] + b4[2] * k3[i]); /* k4 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[2] * h, ytmp, k4); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b5[0] * k1[i] + b5[1] * k2[i] + b5[2] * k3[i] + b5[3] * k4[i]); /* k5 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[3] * h, ytmp, k5); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b6[0] * k1[i] + b6[1] * k2[i] + b6[2] * k3[i] + b6[3] * k4[i] + b6[4] * k5[i]); /* k6 step and final sum */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[4] * h, ytmp, k6); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) { const double d_i = c1 * k1[i] + c3 * k3[i] + c4 * k4[i] + c6 * k6[i]; y[i] += h * d_i; } /* Evaluate dydt_out[]. */ if (dydt_out != NULL) { int s = GSL_ODEIV_FN_EVAL (sys, t + h, y, dydt_out); if (s != GSL_SUCCESS) { /* Restore initial values */ DBL_MEMCPY (y, y0, dim); return s; } } /* difference between 4th and 5th order */ for (i = 0; i < dim; i++) { yerr[i] = h * (ec[1] * k1[i] + ec[3] * k3[i] + ec[4] * k4[i] + ec[5] * k5[i] + ec[6] * k6[i]); } return GSL_SUCCESS; } static int rkck_reset (void *vstate, size_t dim) { rkck_state_t *state = (rkck_state_t *) vstate; DBL_ZERO_MEMSET (state->k1, dim); DBL_ZERO_MEMSET (state->k2, dim); DBL_ZERO_MEMSET (state->k3, dim); DBL_ZERO_MEMSET (state->k4, dim); DBL_ZERO_MEMSET (state->k5, dim); DBL_ZERO_MEMSET (state->k6, dim); DBL_ZERO_MEMSET (state->ytmp, dim); DBL_ZERO_MEMSET (state->y0, dim); return GSL_SUCCESS; } static unsigned int rkck_order (void *vstate) { rkck_state_t *state = (rkck_state_t *) vstate; state = 0; /* prevent warnings about unused parameters */ return 5; /* FIXME: should this be 4? */ } static void rkck_free (void *vstate) { rkck_state_t *state = (rkck_state_t *) vstate; free (state->ytmp); free (state->y0); free (state->k6); free (state->k5); free (state->k4); free (state->k3); free (state->k2); free (state->k1); free (state); } static const gsl_odeiv2_step_type rkck_type = { "rkck", /* name */ 1, /* can use dydt_in */ 1, /* gives exact dydt_out */ &rkck_alloc, &rkck_apply, &stepper_set_driver_null, &rkck_reset, &rkck_order, &rkck_free }; const gsl_odeiv2_step_type *gsl_odeiv2_step_rkck = &rkck_type; gsl/ode-initval2/rkf45.c0000644000175000017500000002107413536674414013332 0ustar eddedd/* ode-initval2/rkf45.c * * Copyright (C) 2001, 2004, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Runge-Kutta-Fehlberg 4(5)*/ /* Reference eg. Hairer, E., Norsett S.P., Wanner, G. Solving ordinary differential equations I, Nonstiff Problems, 2nd revised edition, Springer, 2000. */ #include #include #include #include #include #include "odeiv_util.h" #include "step_utils.c" /* Runge-Kutta-Fehlberg coefficients. Zero elements left out */ static const double ah[] = { 1.0 / 4.0, 3.0 / 8.0, 12.0 / 13.0, 1.0, 1.0 / 2.0 }; static const double b3[] = { 3.0 / 32.0, 9.0 / 32.0 }; static const double b4[] = { 1932.0 / 2197.0, -7200.0 / 2197.0, 7296.0 / 2197.0 }; static const double b5[] = { 8341.0 / 4104.0, -32832.0 / 4104.0, 29440.0 / 4104.0, -845.0 / 4104.0 }; static const double b6[] = { -6080.0 / 20520.0, 41040.0 / 20520.0, -28352.0 / 20520.0, 9295.0 / 20520.0, -5643.0 / 20520.0 }; static const double c1 = 902880.0 / 7618050.0; static const double c3 = 3953664.0 / 7618050.0; static const double c4 = 3855735.0 / 7618050.0; static const double c5 = -1371249.0 / 7618050.0; static const double c6 = 277020.0 / 7618050.0; /* These are the differences of fifth and fourth order coefficients for error estimation */ static const double ec[] = { 0.0, 1.0 / 360.0, 0.0, -128.0 / 4275.0, -2197.0 / 75240.0, 1.0 / 50.0, 2.0 / 55.0 }; typedef struct { double *k1; double *k2; double *k3; double *k4; double *k5; double *k6; double *y0; double *ytmp; } rkf45_state_t; static void * rkf45_alloc (size_t dim) { rkf45_state_t *state = (rkf45_state_t *) malloc (sizeof (rkf45_state_t)); if (state == 0) { GSL_ERROR_NULL ("failed to allocate space for rkf45_state", GSL_ENOMEM); } state->k1 = (double *) malloc (dim * sizeof (double)); if (state->k1 == 0) { free (state); GSL_ERROR_NULL ("failed to allocate space for k1", GSL_ENOMEM); } state->k2 = (double *) malloc (dim * sizeof (double)); if (state->k2 == 0) { free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for k2", GSL_ENOMEM); } state->k3 = (double *) malloc (dim * sizeof (double)); if (state->k3 == 0) { free (state->k2); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for k3", GSL_ENOMEM); } state->k4 = (double *) malloc (dim * sizeof (double)); if (state->k4 == 0) { free (state->k3); free (state->k2); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for k4", GSL_ENOMEM); } state->k5 = (double *) malloc (dim * sizeof (double)); if (state->k5 == 0) { free (state->k4); free (state->k3); free (state->k2); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for k5", GSL_ENOMEM); } state->k6 = (double *) malloc (dim * sizeof (double)); if (state->k6 == 0) { free (state->k5); free (state->k4); free (state->k3); free (state->k2); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for k6", GSL_ENOMEM); } state->y0 = (double *) malloc (dim * sizeof (double)); if (state->y0 == 0) { free (state->k6); free (state->k5); free (state->k4); free (state->k3); free (state->k2); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for y0", GSL_ENOMEM); } state->ytmp = (double *) malloc (dim * sizeof (double)); if (state->ytmp == 0) { free (state->y0); free (state->k6); free (state->k5); free (state->k4); free (state->k3); free (state->k2); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for ytmp", GSL_ENOMEM); } return state; } static int rkf45_apply (void *vstate, size_t dim, double t, double h, double y[], double yerr[], const double dydt_in[], double dydt_out[], const gsl_odeiv2_system * sys) { rkf45_state_t *state = (rkf45_state_t *) vstate; size_t i; double *const k1 = state->k1; double *const k2 = state->k2; double *const k3 = state->k3; double *const k4 = state->k4; double *const k5 = state->k5; double *const k6 = state->k6; double *const ytmp = state->ytmp; double *const y0 = state->y0; DBL_MEMCPY (y0, y, dim); /* k1 step */ if (dydt_in != NULL) { DBL_MEMCPY (k1, dydt_in, dim); } else { int s = GSL_ODEIV_FN_EVAL (sys, t, y, k1); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + ah[0] * h * k1[i]; /* k2 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[0] * h, ytmp, k2); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b3[0] * k1[i] + b3[1] * k2[i]); /* k3 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[1] * h, ytmp, k3); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b4[0] * k1[i] + b4[1] * k2[i] + b4[2] * k3[i]); /* k4 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[2] * h, ytmp, k4); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b5[0] * k1[i] + b5[1] * k2[i] + b5[2] * k3[i] + b5[3] * k4[i]); /* k5 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[3] * h, ytmp, k5); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) ytmp[i] = y[i] + h * (b6[0] * k1[i] + b6[1] * k2[i] + b6[2] * k3[i] + b6[3] * k4[i] + b6[4] * k5[i]); /* k6 step and final sum */ { int s = GSL_ODEIV_FN_EVAL (sys, t + ah[4] * h, ytmp, k6); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) { const double d_i = c1 * k1[i] + c3 * k3[i] + c4 * k4[i] + c5 * k5[i] + c6 * k6[i]; y[i] += h * d_i; } /* Derivatives at output */ if (dydt_out != NULL) { int s = GSL_ODEIV_FN_EVAL (sys, t + h, y, dydt_out); if (s != GSL_SUCCESS) { /* Restore initial values */ DBL_MEMCPY (y, y0, dim); return s; } } /* difference between 4th and 5th order */ for (i = 0; i < dim; i++) { yerr[i] = h * (ec[1] * k1[i] + ec[3] * k3[i] + ec[4] * k4[i] + ec[5] * k5[i] + ec[6] * k6[i]); } return GSL_SUCCESS; } static int rkf45_reset (void *vstate, size_t dim) { rkf45_state_t *state = (rkf45_state_t *) vstate; DBL_ZERO_MEMSET (state->k1, dim); DBL_ZERO_MEMSET (state->k2, dim); DBL_ZERO_MEMSET (state->k3, dim); DBL_ZERO_MEMSET (state->k4, dim); DBL_ZERO_MEMSET (state->k5, dim); DBL_ZERO_MEMSET (state->k6, dim); DBL_ZERO_MEMSET (state->ytmp, dim); DBL_ZERO_MEMSET (state->y0, dim); return GSL_SUCCESS; } static unsigned int rkf45_order (void *vstate) { rkf45_state_t *state = (rkf45_state_t *) vstate; state = 0; /* prevent warnings about unused parameters */ return 5; } static void rkf45_free (void *vstate) { rkf45_state_t *state = (rkf45_state_t *) vstate; free (state->ytmp); free (state->y0); free (state->k6); free (state->k5); free (state->k4); free (state->k3); free (state->k2); free (state->k1); free (state); } static const gsl_odeiv2_step_type rkf45_type = { "rkf45", /* name */ 1, /* can use dydt_in */ 1, /* gives exact dydt_out */ &rkf45_alloc, &rkf45_apply, &stepper_set_driver_null, &rkf45_reset, &rkf45_order, &rkf45_free }; const gsl_odeiv2_step_type *gsl_odeiv2_step_rkf45 = &rkf45_type; gsl/ode-initval2/control_utils.c0000664000175000017500000000201714057135461015266 0ustar eddedd/* ode-initval2/control_utils.c * * Copyright (C) 2009 Tuomo Keskitalo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static int control_set_driver_null (void *vstate, const gsl_odeiv2_driver * d) { /* Dummy set function for those control objects that do not need pointer to driver object. */ (void) vstate; (void) d; return GSL_SUCCESS; } gsl/ode-initval2/evolve.c0000664000175000017500000002255214057135461013674 0ustar eddedd/* ode-initval/evolve.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include "odeiv_util.h" gsl_odeiv2_evolve * gsl_odeiv2_evolve_alloc (size_t dim) { gsl_odeiv2_evolve *e = (gsl_odeiv2_evolve *) malloc (sizeof (gsl_odeiv2_evolve)); if (e == 0) { GSL_ERROR_NULL ("failed to allocate space for evolve struct", GSL_ENOMEM); } e->y0 = (double *) malloc (dim * sizeof (double)); if (e->y0 == 0) { free (e); GSL_ERROR_NULL ("failed to allocate space for y0", GSL_ENOMEM); } e->yerr = (double *) malloc (dim * sizeof (double)); if (e->yerr == 0) { free (e->y0); free (e); GSL_ERROR_NULL ("failed to allocate space for yerr", GSL_ENOMEM); } e->dydt_in = (double *) malloc (dim * sizeof (double)); if (e->dydt_in == 0) { free (e->yerr); free (e->y0); free (e); GSL_ERROR_NULL ("failed to allocate space for dydt_in", GSL_ENOMEM); } e->dydt_out = (double *) malloc (dim * sizeof (double)); if (e->dydt_out == 0) { free (e->dydt_in); free (e->yerr); free (e->y0); free (e); GSL_ERROR_NULL ("failed to allocate space for dydt_out", GSL_ENOMEM); } e->dimension = dim; e->count = 0; e->failed_steps = 0; e->last_step = 0.0; e->driver = NULL; return e; } int gsl_odeiv2_evolve_reset (gsl_odeiv2_evolve * e) { e->count = 0; e->failed_steps = 0; e->last_step = 0.0; return GSL_SUCCESS; } void gsl_odeiv2_evolve_free (gsl_odeiv2_evolve * e) { RETURN_IF_NULL (e); free (e->dydt_out); free (e->dydt_in); free (e->yerr); free (e->y0); free (e); } /* Evolution framework method. * * Uses an adaptive step control object */ int gsl_odeiv2_evolve_apply (gsl_odeiv2_evolve * e, gsl_odeiv2_control * con, gsl_odeiv2_step * step, const gsl_odeiv2_system * dydt, double *t, double t1, double *h, double y[]) { const double t0 = *t; double h0 = *h; int step_status; int final_step = 0; double dt = t1 - t0; /* remaining time, possibly less than h */ if (e->dimension != step->dimension) { GSL_ERROR ("step dimension must match evolution size", GSL_EINVAL); } if ((dt < 0.0 && h0 > 0.0) || (dt > 0.0 && h0 < 0.0)) { GSL_ERROR ("step direction must match interval direction", GSL_EINVAL); } /* Save y in case of failure in a step */ DBL_MEMCPY (e->y0, y, e->dimension); /* Calculate initial dydt once or reuse previous value if the method can benefit. */ if (step->type->can_use_dydt_in) { if (e->count == 0) { int status = GSL_ODEIV_FN_EVAL (dydt, t0, y, e->dydt_in); if (status) { return status; } } else { DBL_MEMCPY (e->dydt_in, e->dydt_out, e->dimension); } } try_step: if ((dt >= 0.0 && h0 > dt) || (dt < 0.0 && h0 < dt)) { h0 = dt; final_step = 1; } else { final_step = 0; } if (step->type->can_use_dydt_in) { step_status = gsl_odeiv2_step_apply (step, t0, h0, y, e->yerr, e->dydt_in, e->dydt_out, dydt); } else { step_status = gsl_odeiv2_step_apply (step, t0, h0, y, e->yerr, NULL, e->dydt_out, dydt); } /* Return if stepper indicates a pointer or user function failure */ if (step_status == GSL_EFAULT || step_status == GSL_EBADFUNC) { return step_status; } /* Check for stepper internal failure */ if (step_status != GSL_SUCCESS) { /* Stepper was unable to calculate step. Try decreasing step size. */ double h_old = h0; h0 *= 0.5; #ifdef DEBUG printf ("-- gsl_odeiv2_evolve_apply h0=%.5e\n", h0); #endif /* Check that an actual decrease in h0 occured and the suggested h0 will change the time by at least 1 ulp */ { double t_curr = GSL_COERCE_DBL (*t); double t_next = GSL_COERCE_DBL ((*t) + h0); if (fabs (h0) < fabs (h_old) && t_next != t_curr) { /* Step was decreased. Undo step, and try again with new h0. */ DBL_MEMCPY (y, e->y0, dydt->dimension); e->failed_steps++; goto try_step; } else { #ifdef DEBUG printf ("-- gsl_odeiv2_evolve_apply h0=%.5e, t0=%.5e, step_status=%d\n", h0, t0, step_status); #endif *h = h0; /* notify user of step-size which caused the failure */ *t = t0; /* restore original t value */ return step_status; } } } e->count++; e->last_step = h0; if (final_step) { *t = t1; } else { *t = t0 + h0; } if (con != NULL) { /* Check error and attempt to adjust the step. */ double h_old = h0; const int hadjust_status = gsl_odeiv2_control_hadjust (con, step, y, e->yerr, e->dydt_out, &h0); if (hadjust_status == GSL_ODEIV_HADJ_DEC) { /* Check that the reported status is correct (i.e. an actual decrease in h0 occured) and the suggested h0 will change the time by at least 1 ulp */ double t_curr = GSL_COERCE_DBL (*t); double t_next = GSL_COERCE_DBL ((*t) + h0); if (fabs (h0) < fabs (h_old) && t_next != t_curr) { /* Step was decreased. Undo step, and try again with new h0. */ DBL_MEMCPY (y, e->y0, dydt->dimension); e->failed_steps++; goto try_step; } else { /* Can not obtain required error tolerance, and can not decrease step-size any further, so give up and return GSL_FAILURE. */ *h = h0; /* notify user of step-size which caused the failure */ return GSL_FAILURE; } } } /* Suggest step size for next time-step. Change of step size is not suggested in the final step, because that step can be very small compared to previous step, to reach t1. */ if (final_step == 0) { *h = h0; } return step_status; } /* Evolves the system using the user specified constant step size h. */ int gsl_odeiv2_evolve_apply_fixed_step (gsl_odeiv2_evolve * e, gsl_odeiv2_control * con, gsl_odeiv2_step * step, const gsl_odeiv2_system * dydt, double *t, const double h, double y[]) { const double t0 = *t; int step_status; if (e->dimension != step->dimension) { GSL_ERROR ("step dimension must match evolution size", GSL_EINVAL); } /* Save y in case of failure in a step */ DBL_MEMCPY (e->y0, y, e->dimension); /* Calculate initial dydt once if the method can benefit. */ if (step->type->can_use_dydt_in) { int status = GSL_ODEIV_FN_EVAL (dydt, t0, y, e->dydt_in); if (status) { return status; } } if (step->type->can_use_dydt_in) { step_status = gsl_odeiv2_step_apply (step, t0, h, y, e->yerr, e->dydt_in, e->dydt_out, dydt); } else { step_status = gsl_odeiv2_step_apply (step, t0, h, y, e->yerr, NULL, e->dydt_out, dydt); } /* Return the stepper return value in case of an error */ if (step_status != GSL_SUCCESS) { return step_status; } if (con != NULL) { /* Calculate error level. Fail if error level exceeds desired error level. */ double htemp = h; const int hadjust_status = gsl_odeiv2_control_hadjust (con, step, y, e->yerr, e->dydt_out, &htemp); if (hadjust_status == GSL_ODEIV_HADJ_DEC) { DBL_MEMCPY (y, e->y0, dydt->dimension); e->failed_steps++; return GSL_FAILURE; } } /* Step is accepted, update status */ e->count++; e->last_step = h; *t = t0 + h; return GSL_SUCCESS; } int gsl_odeiv2_evolve_set_driver (gsl_odeiv2_evolve * e, const gsl_odeiv2_driver * d) { if (d != NULL) { e->driver = d; } else { GSL_ERROR ("driver pointer is null", GSL_EFAULT); } return GSL_SUCCESS; } gsl/ode-initval2/driver.c0000664000175000017500000002777614057135461013704 0ustar eddedd/* ode-initval2/driver.c * * Copyright (C) 2009, 2010 Tuomo Keskitalo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Driver routine for odeiv2. This is a wrapper for low level GSL functions that allows a simple interface to step, control and evolve layers. */ #include #include #include #include #include static gsl_odeiv2_driver * driver_alloc (const gsl_odeiv2_system * sys, const double hstart, const gsl_odeiv2_step_type * T) { /* Allocates and initializes an ODE driver system. Step and evolve objects are allocated here, but control object is allocated in another function. */ gsl_odeiv2_driver *state; if (sys == NULL) { GSL_ERROR_NULL ("gsl_odeiv2_system must be defined", GSL_EINVAL); } state = (gsl_odeiv2_driver *) calloc (1, sizeof (gsl_odeiv2_driver)); if (state == NULL) { GSL_ERROR_NULL ("failed to allocate space for driver state", GSL_ENOMEM); } { const size_t dim = sys->dimension; if (dim == 0) { gsl_odeiv2_driver_free(state); GSL_ERROR_NULL ("gsl_odeiv2_system dimension must be a positive integer", GSL_EINVAL); } state->sys = sys; state->s = gsl_odeiv2_step_alloc (T, dim); if (state->s == NULL) { gsl_odeiv2_driver_free(state); GSL_ERROR_NULL ("failed to allocate step object", GSL_ENOMEM); } state->e = gsl_odeiv2_evolve_alloc (dim); } if (state->e == NULL) { gsl_odeiv2_driver_free(state); GSL_ERROR_NULL ("failed to allocate evolve object", GSL_ENOMEM); } if (hstart > 0.0 || hstart < 0.0) { state->h = hstart; } else { gsl_odeiv2_driver_free(state); GSL_ERROR_NULL ("invalid hstart", GSL_EINVAL); } state->h = hstart; state->hmin = 0.0; state->hmax = GSL_DBL_MAX; state->nmax = 0; state->n = 0; state->c = NULL; return state; } int gsl_odeiv2_driver_set_hmin (gsl_odeiv2_driver * d, const double hmin) { /* Sets minimum allowed step size fabs(hmin) for driver. It is required that hmin <= fabs(h) <= hmax. */ if ((fabs (hmin) > fabs (d->h)) || (fabs (hmin) > d->hmax)) { GSL_ERROR ("hmin <= fabs(h) <= hmax required", GSL_EINVAL); } d->hmin = fabs (hmin); return GSL_SUCCESS; } int gsl_odeiv2_driver_set_hmax (gsl_odeiv2_driver * d, const double hmax) { /* Sets maximum allowed step size fabs(hmax) for driver. It is required that hmin <= fabs(h) <= hmax. */ if ((fabs (hmax) < fabs (d->h)) || (fabs (hmax) < d->hmin)) { GSL_ERROR ("hmin <= fabs(h) <= hmax required", GSL_EINVAL); } if (hmax > 0.0 || hmax < 0.0) { d->hmax = fabs (hmax); } else { GSL_ERROR ("invalid hmax", GSL_EINVAL); } return GSL_SUCCESS; } int gsl_odeiv2_driver_set_nmax (gsl_odeiv2_driver * d, const unsigned long int nmax) { /* Sets maximum number of allowed steps (nmax) for driver */ d->nmax = nmax; return GSL_SUCCESS; } gsl_odeiv2_driver * gsl_odeiv2_driver_alloc_y_new (const gsl_odeiv2_system * sys, const gsl_odeiv2_step_type * T, const double hstart, const double epsabs, const double epsrel) { /* Initializes an ODE driver system with control object of type y_new. */ gsl_odeiv2_driver *state = driver_alloc (sys, hstart, T); if (state == NULL) { GSL_ERROR_NULL ("failed to allocate driver object", GSL_ENOMEM); } if (epsabs >= 0.0 && epsrel >= 0.0) { state->c = gsl_odeiv2_control_y_new (epsabs, epsrel); if (state->c == NULL) { gsl_odeiv2_driver_free (state); GSL_ERROR_NULL ("failed to allocate control object", GSL_ENOMEM); } } else { gsl_odeiv2_driver_free (state); GSL_ERROR_NULL ("epsabs and epsrel must be positive", GSL_EINVAL); } /* Distribute pointer to driver object */ gsl_odeiv2_step_set_driver (state->s, state); gsl_odeiv2_evolve_set_driver (state->e, state); gsl_odeiv2_control_set_driver (state->c, state); return state; } gsl_odeiv2_driver * gsl_odeiv2_driver_alloc_yp_new (const gsl_odeiv2_system * sys, const gsl_odeiv2_step_type * T, const double hstart, const double epsabs, const double epsrel) { /* Initializes an ODE driver system with control object of type yp_new. */ gsl_odeiv2_driver *state = driver_alloc (sys, hstart, T); if (state == NULL) { GSL_ERROR_NULL ("failed to allocate driver object", GSL_ENOMEM); } if (epsabs >= 0.0 && epsrel >= 0.0) { state->c = gsl_odeiv2_control_yp_new (epsabs, epsrel); if (state->c == NULL) { gsl_odeiv2_driver_free (state); GSL_ERROR_NULL ("failed to allocate control object", GSL_ENOMEM); } } else { gsl_odeiv2_driver_free (state); GSL_ERROR_NULL ("epsabs and epsrel must be positive", GSL_EINVAL); } /* Distribute pointer to driver object */ gsl_odeiv2_step_set_driver (state->s, state); gsl_odeiv2_evolve_set_driver (state->e, state); gsl_odeiv2_control_set_driver (state->c, state); return state; } gsl_odeiv2_driver * gsl_odeiv2_driver_alloc_standard_new (const gsl_odeiv2_system * sys, const gsl_odeiv2_step_type * T, const double hstart, const double epsabs, const double epsrel, const double a_y, const double a_dydt) { /* Initializes an ODE driver system with control object of type standard_new. */ gsl_odeiv2_driver *state = driver_alloc (sys, hstart, T); if (state == NULL) { GSL_ERROR_NULL ("failed to allocate driver object", GSL_ENOMEM); } if (epsabs >= 0.0 && epsrel >= 0.0) { state->c = gsl_odeiv2_control_standard_new (epsabs, epsrel, a_y, a_dydt); if (state->c == NULL) { gsl_odeiv2_driver_free (state); GSL_ERROR_NULL ("failed to allocate control object", GSL_ENOMEM); } } else { gsl_odeiv2_driver_free (state); GSL_ERROR_NULL ("epsabs and epsrel must be positive", GSL_EINVAL); } /* Distribute pointer to driver object */ gsl_odeiv2_step_set_driver (state->s, state); gsl_odeiv2_evolve_set_driver (state->e, state); gsl_odeiv2_control_set_driver (state->c, state); return state; } gsl_odeiv2_driver * gsl_odeiv2_driver_alloc_scaled_new (const gsl_odeiv2_system * sys, const gsl_odeiv2_step_type * T, const double hstart, const double epsabs, const double epsrel, const double a_y, const double a_dydt, const double scale_abs[]) { /* Initializes an ODE driver system with control object of type scaled_new. */ gsl_odeiv2_driver *state = driver_alloc (sys, hstart, T); if (state == NULL) { GSL_ERROR_NULL ("failed to allocate driver object", GSL_ENOMEM); } if (epsabs >= 0.0 && epsrel >= 0.0) { state->c = gsl_odeiv2_control_scaled_new (epsabs, epsrel, a_y, a_dydt, scale_abs, sys->dimension); if (state->c == NULL) { gsl_odeiv2_driver_free (state); GSL_ERROR_NULL ("failed to allocate control object", GSL_ENOMEM); } } else { gsl_odeiv2_driver_free (state); GSL_ERROR_NULL ("epsabs and epsrel must be positive", GSL_EINVAL); } /* Distribute pointer to driver object */ gsl_odeiv2_step_set_driver (state->s, state); gsl_odeiv2_evolve_set_driver (state->e, state); gsl_odeiv2_control_set_driver (state->c, state); return state; } int gsl_odeiv2_driver_apply (gsl_odeiv2_driver * d, double *t, const double t1, double y[]) { /* Main driver function that evolves the system from t to t1. In beginning vector y contains the values of dependent variables at t. This function returns values at t=t1 in y. In case of unrecoverable error, y and t contains the values after the last successful step. */ int sign = 0; d->n = 0; /* Determine integration direction sign */ if (d->h > 0.0) { sign = 1; } else { sign = -1; } /* Check that t, t1 and step direction are sensible */ if (sign * (t1 - *t) < 0.0) { GSL_ERROR ("integration limits and/or step direction not consistent", GSL_EINVAL); } /* Evolution loop */ while (sign * (t1 - *t) > 0.0) { int s = gsl_odeiv2_evolve_apply (d->e, d->c, d->s, d->sys, t, t1, &(d->h), y); if (s != GSL_SUCCESS) { return s; } /* Check for maximum allowed steps */ if ((d->nmax > 0) && (d->n > d->nmax)) { return GSL_EMAXITER; } /* Set step size if maximum size is exceeded */ if (fabs (d->h) > d->hmax) { d->h = sign * d->hmax; } /* Check for too small step size */ if (fabs (d->h) < d->hmin) { return GSL_ENOPROG; } d->n++; } return GSL_SUCCESS; } int gsl_odeiv2_driver_apply_fixed_step (gsl_odeiv2_driver * d, double *t, const double h, const unsigned long int n, double y[]) { /* Alternative driver function that evolves the system from t using * n steps of size h. In the beginning vector y contains the values * of dependent variables at t. This function returns values at t = * t + n * h in y. In case of an unrecoverable error, y and t * contains the values after the last successful step. */ unsigned long int i; d->n = 0; /* Evolution loop */ for (i = 0; i < n; i++) { int s = gsl_odeiv2_evolve_apply_fixed_step (d->e, d->c, d->s, d->sys, t, h, y); if (s != GSL_SUCCESS) { return s; } d->n++; } return GSL_SUCCESS; } int gsl_odeiv2_driver_reset (gsl_odeiv2_driver * d) { /* Reset the driver. Resets evolve and step objects. */ { int s = gsl_odeiv2_evolve_reset (d->e); if (s != GSL_SUCCESS) { return s; } } { int s = gsl_odeiv2_step_reset (d->s); if (s != GSL_SUCCESS) { return s; } } return GSL_SUCCESS; } int gsl_odeiv2_driver_reset_hstart (gsl_odeiv2_driver * d, const double hstart) { /* Resets current driver and sets initial step size to hstart */ gsl_odeiv2_driver_reset (d); if ((d->hmin > fabs (hstart)) || (fabs (hstart) > d->hmax)) { GSL_ERROR ("hmin <= fabs(h) <= hmax required", GSL_EINVAL); } if (hstart > 0.0 || hstart < 0.0) { d->h = hstart; } else { GSL_ERROR ("invalid hstart", GSL_EINVAL); } return GSL_SUCCESS; } void gsl_odeiv2_driver_free (gsl_odeiv2_driver * state) { if (state->c) gsl_odeiv2_control_free (state->c); if (state->e) gsl_odeiv2_evolve_free (state->e); if (state->s) gsl_odeiv2_step_free (state->s); free (state); } gsl/ode-initval2/TODO0000644000175000017500000000653713536674414012732 0ustar eddedd* Implement other stepping methods from well-known packages such as RKSUITE, DASSL, etc * The entry below has been downgraded from a bug. We use the coefficients given in the original paper by Prince and Dormand, and it is true that these are inexact (the values in the paper are said to be accurate 18 figures). If somebody publishes exact versions we will use them, but at present it is better to stick with the published versions of the coefficients them use our own. ---------------------------------------------------------------------- BUG#8 -- inexact coefficients in rk8pd.c From: Luc Maisonobe To: gsl-discuss@sources.redhat.com Subject: further thoughts about Dormand-Prince 8 (RK8PD) Date: Wed, 14 Aug 2002 10:50:49 +0200 I was looking for some references concerning Runge-Kutta methods when I noticed GSL had an high order one. I also found a question in the list archive (April 2002) about the references of this method which is implemented in rk8pd.c. It was said the coefficients were taken from the "Numerical Algorithms with C" book by Engeln-Mullges and Uhlig. I have checked the coefficients somewhat with a little java tool I have developped (see http://www.spaceroots.org/archive.htm#RKCheckSoftware) and found they were not exact. I think this method is really the method that is already in rksuite (http://www.netlib.org/ode/rksuite/) were the coefficients are given as real values with 30 decimal digits. The coefficients have probably been approximated as fractions later on. However, these approximations are not perfect, they are good only for the first 16 or 18 digits depending on the coefficient. This has no consequence for practical purposes since they are stored in double variables, but give a false impression of beeing exact expressions. Well, there are even some coefficients that should really be rational numbers but for which wrong numerators and denominators are given. As an example, the first and fourth elements of the b7 array are given as 29443841.0 / 614563906.0 and 77736538.0 / 692538347, hence the sum off all elements of the b7 array (which should theoretically be equal to ah[5]) only approximate this. For these two coefficients, this could have been avoided using 215595617.0 / 4500000000.0 and 202047683.0 / 1800000000.0, which also looks more coherent with the other coefficients. The rksuite comments say this method is described in this paper : High Order Embedded Runge-Kutta Formulae P.J. Prince and J.R. Dormand J. Comp. Appl. Math.,7, pp. 67-75, 1981 It also says the method is an 8(7) method (i.e. the coefficients set used to advance integration is order 8 and error estimation is order 7). If I use my tool to check the order, I am forced to check the order conditions numerically with a tolerance since I do not have an exact expression of the coefficients. Since even if some conditions are not mathematically met, the residuals are small and could be below the tolerance. There are tolerance values for which such numerical test dedeuce the method is of order 9, as is said in GSL. However, I am not convinced, there are to few parameters for the large number of order conditions needed at order 9. I would suggest to correct the coefficients in rk8pd.c (just put the literal constants of rksuite) and to add the reference to the article. ---------------------------------------------------------------------- gsl/ode-initval2/rksubs.c0000644000175000017500000000307713536674414013713 0ustar eddedd/* ode-initval2/rksubs.c * * Copyright (C) 2008, 2009, 2010 Tuomo Keskitalo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static int rksubs (double y[], const double h, const double y0[], const double fY[], const double b[], const size_t stage, const size_t dim) { /* The final substitution step in Runge-Kutta equation: Calculates new values y by substituting the value of step size (h), current initial values of y (y0), function f values at Runge-Kutta points (fY), Runge-Kutta b-coefficients (b) and method stage (stage) into the equation y = y0 + h * sum j=1..stage (b_j * fY_j) dim is the number of ODEs. */ size_t i, j; for (i = 0; i < dim; i++) { y[i] = 0.0; for (j = 0; j < stage; j++) y[i] += b[j] * fY[j * dim + i]; } for (i = 0; i < dim; i++) { y[i] *= h; y[i] += y0[i]; } return GSL_SUCCESS; } gsl/ode-initval2/rk4imp.c0000644000175000017500000003113013536674414013577 0ustar eddedd/* ode-initval2/rk4imp.c * * Copyright (C) 2009, 2010 Tuomo Keskitalo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Based on rk4imp.c by Gerard Jungman */ /* Gaussian implicit 4th order Runge-Kutta method. Error estimation is carried out by the step doubling method. */ /* References: Ascher, U.M., Petzold, L.R., Computer methods for ordinary differential and differential-algebraic equations, SIAM, Philadelphia, 1998. ISBN 0898714125, 9780898714128 */ #include #include #include #include #include #include #include "odeiv_util.h" #include "rksubs.c" #include "modnewton1.c" /* Stage of method */ #define RK4IMP_STAGE 2 typedef struct { gsl_matrix *A; /* Runge-Kutta coefficients */ double *y_onestep; /* Result with one step */ double *y_twostep; /* Result with two half steps */ double *ytmp; /* Temporary work space */ double *y_save; /* Backup space */ double *YZ; /* Runge-Kutta points */ double *fYZ; /* Derivatives at YZ */ gsl_matrix *dfdy; /* Jacobian matrix */ double *dfdt; /* time derivative of f */ modnewton1_state_t *esol; /* nonlinear equation solver */ double *errlev; /* desired error level of y */ const gsl_odeiv2_driver *driver; /* pointer to driver object */ } rk4imp_state_t; static void * rk4imp_alloc (size_t dim) { rk4imp_state_t *state = (rk4imp_state_t *) malloc (sizeof (rk4imp_state_t)); if (state == 0) { GSL_ERROR_NULL ("failed to allocate space for rk4imp_state", GSL_ENOMEM); } state->A = gsl_matrix_alloc (RK4IMP_STAGE, RK4IMP_STAGE); if (state->A == 0) { free (state); GSL_ERROR_NULL ("failed to allocate space for A", GSL_ENOMEM); } state->y_onestep = (double *) malloc (dim * sizeof (double)); if (state->y_onestep == 0) { gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for y_onestep", GSL_ENOMEM); } state->y_twostep = (double *) malloc (dim * sizeof (double)); if (state->y_twostep == 0) { free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for y_onestep", GSL_ENOMEM); } state->ytmp = (double *) malloc (dim * sizeof (double)); if (state->ytmp == 0) { free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for ytmp", GSL_ENOMEM); } state->y_save = (double *) malloc (dim * sizeof (double)); if (state->y_save == 0) { free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for y_save", GSL_ENOMEM); } state->YZ = (double *) malloc (dim * RK4IMP_STAGE * sizeof (double)); if (state->YZ == 0) { free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for YZ", GSL_ENOMEM); } state->fYZ = (double *) malloc (dim * RK4IMP_STAGE * sizeof (double)); if (state->fYZ == 0) { free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for fYZ", GSL_ENOMEM); } state->dfdt = (double *) malloc (dim * sizeof (double)); if (state->dfdt == 0) { free (state->fYZ); free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for dfdt", GSL_ENOMEM); } state->dfdy = gsl_matrix_alloc (dim, dim); if (state->dfdy == 0) { free (state->dfdt); free (state->fYZ); free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for dfdy", GSL_ENOMEM); } state->esol = modnewton1_alloc (dim, RK4IMP_STAGE); if (state->esol == 0) { gsl_matrix_free (state->dfdy); free (state->dfdt); free (state->fYZ); free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for esol", GSL_ENOMEM); } state->errlev = (double *) malloc (dim * sizeof (double)); if (state->errlev == 0) { modnewton1_free (state->esol); gsl_matrix_free (state->dfdy); free (state->dfdt); free (state->fYZ); free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); GSL_ERROR_NULL ("failed to allocate space for errlev", GSL_ENOMEM); } state->driver = NULL; return state; } static int rk4imp_apply (void *vstate, size_t dim, double t, double h, double y[], double yerr[], const double dydt_in[], double dydt_out[], const gsl_odeiv2_system * sys) { /* Makes a Gaussian implicit 4th order Runge-Kutta with step size h and estimates the local error of the step. */ rk4imp_state_t *state = (rk4imp_state_t *) vstate; double *const y_onestep = state->y_onestep; double *const y_twostep = state->y_twostep; double *const ytmp = state->ytmp; double *const y_save = state->y_save; double *const YZ = state->YZ; /* Runge-Kutta points */ double *const fYZ = state->fYZ; gsl_matrix *const dfdy = state->dfdy; double *const dfdt = state->dfdt; double *const errlev = state->errlev; const modnewton1_state_t *esol = state->esol; /* Runge-Kutta coefficients */ gsl_matrix *A = state->A; const double b[] = { 0.5, 0.5 }; const double c[] = { (3.0 - M_SQRT3) / 6.0, (3.0 + M_SQRT3) / 6.0 }; gsl_matrix_set (A, 0, 0, 1.0 / 4); gsl_matrix_set (A, 0, 1, (3 - 2 * sqrt (3)) / 12); gsl_matrix_set (A, 1, 0, (3 + 2 * sqrt (3)) / 12); gsl_matrix_set (A, 1, 1, 1.0 / 4); if (esol == NULL) { GSL_ERROR ("no non-linear equation solver speficied", GSL_EINVAL); } /* Get desired error levels via gsl_odeiv2_control object through driver object, which is a requirement for this stepper. */ if (state->driver == NULL) { return GSL_EFAULT; } else { size_t i; for (i = 0; i < dim; i++) { if (dydt_in != NULL) { gsl_odeiv2_control_errlevel (state->driver->c, y[i], dydt_in[i], h, i, &errlev[i]); } else { gsl_odeiv2_control_errlevel (state->driver->c, y[i], 0.0, h, i, &errlev[i]); } } } /* Evaluate Jacobian for modnewton1 */ { int s = GSL_ODEIV_JA_EVAL (sys, t, y, dfdy->data, dfdt); if (s != GSL_SUCCESS) { return s; } } /* Calculate a single step with size h */ { int s = modnewton1_init ((void *) esol, A, h, dfdy, sys); if (s != GSL_SUCCESS) { return s; } } { int s = modnewton1_solve ((void *) esol, A, c, t, h, y, sys, YZ, errlev); if (s != GSL_SUCCESS) { return s; } } { size_t j; for (j = 0; j < RK4IMP_STAGE; j++) { int s = GSL_ODEIV_FN_EVAL (sys, t + c[j] * h, &YZ[j * dim], &fYZ[j * dim]); if (s != GSL_SUCCESS) { return s; } } } { int s = rksubs (y_onestep, h, y, fYZ, b, RK4IMP_STAGE, dim); if (s != GSL_SUCCESS) { return s; } } /* Error estimation by step doubling */ { int s = modnewton1_init ((void *) esol, A, h / 2.0, dfdy, sys); if (s != GSL_SUCCESS) { return s; } } /* 1st half step */ { int s = modnewton1_solve ((void *) esol, A, c, t, h / 2.0, y, sys, YZ, errlev); if (s != GSL_SUCCESS) { return s; } } { size_t j; for (j = 0; j < RK4IMP_STAGE; j++) { int s = GSL_ODEIV_FN_EVAL (sys, t + c[j] * h / 2.0, &YZ[j * dim], &fYZ[j * dim]); if (s != GSL_SUCCESS) { return s; } } } { int s = rksubs (ytmp, h / 2.0, y, fYZ, b, RK4IMP_STAGE, dim); if (s != GSL_SUCCESS) return s; } /* Save original y values in case of error */ DBL_MEMCPY (y_save, y, dim); /* 2nd half step */ { int s = modnewton1_solve ((void *) esol, A, c, t + h / 2.0, h / 2.0, ytmp, sys, YZ, errlev); if (s != GSL_SUCCESS) { return s; } } { size_t j; for (j = 0; j < RK4IMP_STAGE; j++) { int s = GSL_ODEIV_FN_EVAL (sys, t + h / 2.0 + c[j] * h / 2.0, &YZ[j * dim], &fYZ[j * dim]); if (s != GSL_SUCCESS) { return s; } } } { int s = rksubs (y_twostep, h / 2.0, ytmp, fYZ, b, RK4IMP_STAGE, dim); if (s != GSL_SUCCESS) { DBL_MEMCPY (y, y_save, dim); return s; } } /* Note: rk4imp returns y using the results from two half steps instead of the single step since the results are freely available and more precise. */ DBL_MEMCPY (y, y_twostep, dim); /* Error estimation */ { size_t i; for (i = 0; i < dim; i++) { yerr[i] = ODEIV_ERR_SAFETY * 0.5 * fabs (y_twostep[i] - y_onestep[i]) / 15.0; } } /* Derivatives at output */ if (dydt_out != NULL) { int s = GSL_ODEIV_FN_EVAL (sys, t + h, y, dydt_out); if (s != GSL_SUCCESS) { /* Restore original values */ DBL_MEMCPY (y, y_save, dim); return s; } } return GSL_SUCCESS; } static int rk4imp_set_driver (void *vstate, const gsl_odeiv2_driver * d) { rk4imp_state_t *state = (rk4imp_state_t *) vstate; state->driver = d; return GSL_SUCCESS; } static int rk4imp_reset (void *vstate, size_t dim) { rk4imp_state_t *state = (rk4imp_state_t *) vstate; DBL_ZERO_MEMSET (state->y_onestep, dim); DBL_ZERO_MEMSET (state->y_twostep, dim); DBL_ZERO_MEMSET (state->ytmp, dim); DBL_ZERO_MEMSET (state->y_save, dim); DBL_ZERO_MEMSET (state->YZ, dim * RK4IMP_STAGE); DBL_ZERO_MEMSET (state->fYZ, dim * RK4IMP_STAGE); return GSL_SUCCESS; } static unsigned int rk4imp_order (void *vstate) { rk4imp_state_t *state = (rk4imp_state_t *) vstate; state = 0; /* prevent warnings about unused parameters */ return 4; } static void rk4imp_free (void *vstate) { rk4imp_state_t *state = (rk4imp_state_t *) vstate; free (state->errlev); modnewton1_free (state->esol); gsl_matrix_free (state->dfdy); free (state->dfdt); free (state->fYZ); free (state->YZ); free (state->y_save); free (state->ytmp); free (state->y_twostep); free (state->y_onestep); gsl_matrix_free (state->A); free (state); } static const gsl_odeiv2_step_type rk4imp_type = { "rk4imp", /* name */ 1, /* can use dydt_in? */ 1, /* gives exact dydt_out? */ &rk4imp_alloc, &rk4imp_apply, &rk4imp_set_driver, &rk4imp_reset, &rk4imp_order, &rk4imp_free }; const gsl_odeiv2_step_type *gsl_odeiv2_step_rk4imp = &rk4imp_type; gsl/ode-initval2/test.c0000644000175000017500000016524013536674414013362 0ustar eddedd/* ode-initval/test.c * * Copyright (C) 2009, 2010 Tuomo Keskitalo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Some functions and tests based on test.c by G. Jungman. */ #include #include #include #include #include #include #include #include #include #include #include #include #include "odeiv_util.h" /* Maximum number of ODE equations */ #define MAXEQ 15 /* Maximum number of ODE solvers */ #define MAXNS 20 /* Track number of function and jacobian evaluations in tests with global variables */ int nfe; int nje; /**********************************************************/ /* ODE test system definitions */ /**********************************************************/ /* RHS for f=2. Solution y = 2 * t + t0 */ int rhs_linear (double t, const double y[], double f[], void *params) { extern int nfe; nfe += 1; f[0] = 2.0; return GSL_SUCCESS; } int jac_linear (double t, const double y[], double *dfdy, double dfdt[], void *params) { extern int nje; nje += 1; dfdy[0] = 0.0; dfdt[0] = 0.0; return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_lin = { rhs_linear, jac_linear, 1, 0 }; /* RHS for f=y. Equals y=exp(t) with initial value y(0)=1.0 */ int rhs_exp (double t, const double y[], double f[], void *params) { extern int nfe; nfe += 1; f[0] = y[0]; return GSL_SUCCESS; } int jac_exp (double t, const double y[], double *dfdy, double dfdt[], void *params) { extern int nje; nje += 1; dfdy[0] = y[0]; dfdt[0] = 0.0; return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_exp = { rhs_exp, jac_exp, 1, 0 }; int rhs_sin (double t, const double y[], double f[], void *params) { extern int nfe; nfe += 1; f[0] = -y[1]; f[1] = y[0]; return GSL_SUCCESS; } int jac_sin (double t, const double y[], double *dfdy, double dfdt[], void *params) { extern int nje; nje += 1; dfdy[0] = 0.0; dfdy[1] = -1.0; dfdy[2] = 1.0; dfdy[3] = 0.0; dfdt[0] = 0.0; dfdt[1] = 0.0; return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_sin = { rhs_sin, jac_sin, 2, 0 }; /* Sine/cosine with random failures */ static int rhs_xsin_reset = 0; static int jac_xsin_reset = 0; int rhs_xsin (double t, const double y[], double f[], void *params) { static int n = 0, m = 0; extern int nfe; nfe += 1; if (rhs_xsin_reset) { rhs_xsin_reset = 0; n = 0; m = 1; } n++; if (n >= m) { m = n * 1.3; return GSL_EFAILED; } if (n > 40 && n < 65) { f[0] = GSL_NAN; f[1] = GSL_NAN; return GSL_EFAILED; } f[0] = -y[1]; f[1] = y[0]; return GSL_SUCCESS; } int jac_xsin (double t, const double y[], double *dfdy, double dfdt[], void *params) { static int n = 0; extern int nje; nje += 1; if (jac_xsin_reset) { jac_xsin_reset = 0; n = 0; } n++; if (n > 50 && n < 55) { dfdy[0] = GSL_NAN; dfdy[1] = GSL_NAN; dfdy[2] = GSL_NAN; dfdy[3] = GSL_NAN; dfdt[0] = GSL_NAN; dfdt[1] = GSL_NAN; return GSL_EFAILED; } dfdy[0] = 0.0; dfdy[1] = -1.0; dfdy[2] = 1.0; dfdy[3] = 0.0; dfdt[0] = 0.0; dfdt[1] = 0.0; return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_xsin = { rhs_xsin, jac_xsin, 2, 0 }; /* RHS for classic stiff example dy0 / dt = 998 * y0 + 1998 * y1 y0(0) = 1.0 dy1 / dt = -999 * y0 - 1999 * y1 y1(0) = 0.0 solution is y0 = 2 * exp(-t) - exp(-1000 * t) y1 = - exp(-t) + exp(-1000 * t) */ int rhs_stiff (double t, const double y[], double f[], void *params) { extern int nfe; nfe += 1; f[0] = 998.0 * y[0] + 1998.0 * y[1]; f[1] = -999.0 * y[0] - 1999.0 * y[1]; return GSL_SUCCESS; } int jac_stiff (double t, const double y[], double *dfdy, double dfdt[], void *params) { extern int nje; nje += 1; dfdy[0] = 998.0; dfdy[1] = 1998.0; dfdy[2] = -999.0; dfdy[3] = -1999.0; dfdt[0] = 0.0; dfdt[1] = 0.0; return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_stiff = { rhs_stiff, jac_stiff, 2, 0 }; /* Cosine function */ int rhs_cos (double t, const double *y, double *dydt, void *params) { dydt[0] = cos (t); return GSL_SUCCESS; } int jac_cos (double t, const double y[], double *dfdy, double dfdt[], void *params) { dfdy[0] = 0.0; dfdt[0] = -sin (t); return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_cos = { rhs_cos, jac_cos, 1, 0 }; /* Broken problem for testing numerical problems in user function that leads to decrease of step size in gsl_odeiv2_evolve below machine precision. */ int rhs_broken (double t, const double y[], double f[], void *params) { if (t < 10.0) { f[0] = 1.0; } else { f[0] = GSL_NAN; return 123; } return GSL_SUCCESS; } int jac_broken (double t, const double y[], double *dfdy, double dfdt[], void *params) { if (t < 10.0) { dfdy[0] = 0.0; dfdt[0] = 0.0; } else { dfdy[0] = GSL_NAN; dfdt[0] = GSL_NAN; return 123; } return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_broken = { rhs_broken, jac_broken, 1, 0 }; /* Immediate user break (at t > 1.5) test sine system */ int rhs_sin_ub (double t, const double y[], double f[], void *params) { extern int nfe; nfe += 1; f[0] = -y[1]; f[1] = y[0]; if (t > 1.5) { return GSL_EBADFUNC; } return GSL_SUCCESS; } int jac_sin_ub (double t, const double y[], double *dfdy, double dfdt[], void *params) { extern int nje; nje += 1; dfdy[0] = 0.0; dfdy[1] = -1.0; dfdy[2] = 1.0; dfdy[3] = 0.0; dfdt[0] = 0.0; dfdt[1] = 0.0; if (t > 1.5) { return GSL_EBADFUNC; } return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_sin_ub = { rhs_sin_ub, jac_sin_ub, 2, 0 }; /* Badly scaled random function */ int rhs_br (double t, const double *y, double *dydt, void *params) { dydt[0] = (rand () - RAND_MAX / 2) * 2e100; return GSL_SUCCESS; } int jac_br (double t, const double y[], double *dfdy, double dfdt[], void *params) { dfdy[0] = (rand () - RAND_MAX / 2) * 2e100; dfdt[0] = (rand () - RAND_MAX / 2) * 2e100; return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_br = { rhs_br, jac_br, 1, 0 }; /* stepfn and stepfn2 based on testcases from Frank Reininghaus */ /* Derivative change at t=0, small derivative */ int rhs_stepfn (double t, const double *y, double *dydt, void *params) { if (t >= 1.0) dydt[0] = 1; else dydt[0] = 0; return GSL_SUCCESS; } int jac_stepfn (double t, const double y[], double *dfdy, double dfdt[], void *params) { dfdy[0] = 0.0; dfdt[0] = 0.0; return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_stepfn = { rhs_stepfn, jac_stepfn, 1, 0 }; /* Derivative change at t=0, large derivative */ int rhs_stepfn2 (double t, const double *y, double *dydt, void *params) { if (t >= 0.0) dydt[0] = 1e300; else dydt[0] = 0; return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_stepfn2 = { rhs_stepfn2, jac_stepfn, 1, 0 }; /* Volterra-Lotka predator-prey model f0 = (a - b * y1) * y0 y0(0) = 2.725 f1 = (-c + d * y0) * y1 y1(0) = 1.0 */ int rhs_vl (double t, const double y[], double f[], void *params) { const double a = -1.0; const double b = -1.0; const double c = -2.0; const double d = -1.0; extern int nfe; nfe += 1; f[0] = (a - b * y[1]) * y[0]; f[1] = (-c + d * y[0]) * y[1]; return GSL_SUCCESS; } int jac_vl (double t, const double y[], double *dfdy, double dfdt[], void *params) { const double a = -1.0; const double b = -1.0; const double c = -2.0; const double d = -1.0; extern int nje; nje += 1; dfdy[0] = a - b * y[1]; dfdy[1] = -b * y[0]; dfdy[2] = d * y[1]; dfdy[3] = -c + d * y[0]; dfdt[0] = 0.0; dfdt[1] = 0.0; return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_vl = { rhs_vl, jac_vl, 2, 0 }; /* van Der Pol oscillator f0 = y1 y0(0) = 1.0 f1 = -y0 + mu * y1 * (1 - y0^2) y1(0) = 0.0 */ int rhs_vanderpol (double t, const double y[], double f[], void *params) { const double mu = 10.0; extern int nfe; nfe += 1; f[0] = y[1]; f[1] = -y[0] + mu * y[1] * (1.0 - y[0] * y[0]); return GSL_SUCCESS; } int jac_vanderpol (double t, const double y[], double *dfdy, double dfdt[], void *params) { const double mu = 10.0; extern int nje; nje += 1; dfdy[0] = 0.0; dfdy[1] = 1.0; dfdy[2] = -2.0 * mu * y[0] * y[1] - 1.0; dfdy[3] = mu * (1.0 - y[0] * y[0]); dfdt[0] = 0.0; dfdt[1] = 0.0; return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_vanderpol = { rhs_vanderpol, jac_vanderpol, 2, 0 }; /* Stiff trigonometric example f0 = -50 * (y0 - cos(t)) y0(0) = 0.0 */ int rhs_stifftrig (double t, const double y[], double f[], void *params) { extern int nfe; nfe += 1; f[0] = -50 * (y[0] - cos (t)); return GSL_SUCCESS; } int jac_stifftrig (double t, const double y[], double *dfdy, double dfdt[], void *params) { extern int nje; nje += 1; dfdy[0] = -50; dfdt[0] = -50 * sin (t); return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_stifftrig = { rhs_stifftrig, jac_stifftrig, 1, 0 }; /* The Oregonator - chemical Belusov-Zhabotinskii reaction y0(0) = 1.0, y1(0) = 2.0, y2(0) = 3.0 */ int rhs_oregonator (double t, const double y[], double f[], void *params) { const double c1 = 77.27; const double c2 = 8.375e-6; const double c3 = 0.161; extern int nfe; nfe += 1; f[0] = c1 * (y[1] + y[0] * (1 - c2 * y[0] - y[1])); f[1] = 1 / c1 * (y[2] - y[1] * (1 + y[0])); f[2] = c3 * (y[0] - y[2]); return GSL_SUCCESS; } int jac_oregonator (double t, const double y[], double *dfdy, double dfdt[], void *params) { const double c1 = 77.27; const double c2 = 8.375e-6; const double c3 = 0.161; extern int nje; nje += 1; dfdy[0] = c1 * (1 - 2 * c2 * y[0] - y[1]); dfdy[1] = c1 * (1 - y[0]); dfdy[2] = 0.0; dfdy[3] = 1 / c1 * (-y[1]); dfdy[4] = 1 / c1 * (-1 - y[0]); dfdy[5] = 1 / c1; dfdy[6] = c3; dfdy[7] = 0.0; dfdy[8] = -c3; dfdt[0] = 0.0; dfdt[1] = 0.0; dfdt[2] = 0.0; return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_oregonator = { rhs_oregonator, jac_oregonator, 3, 0 }; /* E5 - a stiff badly scaled chemical problem by Enright, Hull & Lindberg (1975): Comparing numerical methods for stiff systems of ODEs. BIT, vol. 15, pp. 10-48. f0 = -a * y0 - b * y0 * y2 y0(0) = 1.76e-3 f1 = a * y0 - m * c * y1 * y2 y1(0) = 0.0 f2 = a * y0 - b * y0 * y2 - m * c * y1 * y2 + c * y3 y2(0) = 0.0 f3 = b * y0 * y2 - c * y3 y3(0) = 0.0 */ int rhs_e5 (double t, const double y[], double f[], void *params) { const double a = 7.89e-10; const double b = 1.1e7; const double c = 1.13e3; const double m = 1.0e6; extern int nfe; nfe += 1; f[0] = -a * y[0] - b * y[0] * y[2]; f[1] = a * y[0] - m * c * y[1] * y[2]; f[3] = b * y[0] * y[2] - c * y[3]; f[2] = f[1] - f[3]; return GSL_SUCCESS; } int jac_e5 (double t, const double y[], double *dfdy, double dfdt[], void *params) { const double a = 7.89e-10; const double b = 1.1e7; const double c = 1.13e3; const double m = 1.0e6; extern int nje; nje += 1; dfdy[0] = -a - b * y[2]; dfdy[1] = 0.0; dfdy[2] = -b * y[0]; dfdy[3] = 0.0; dfdy[4] = a; dfdy[5] = -m * c * y[2]; dfdy[6] = -m * c * y[1]; dfdy[7] = 0.0; dfdy[8] = a - b * y[2]; dfdy[9] = -m * c * y[2]; dfdy[10] = -b * y[0] - m * c * y[1]; dfdy[11] = c; dfdy[12] = b * y[2]; dfdy[13] = 0.0; dfdy[14] = b * y[0]; dfdy[15] = -c; dfdt[0] = 0.0; dfdt[1] = 0.0; dfdt[2] = 0.0; dfdt[3] = 0.0; return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_e5 = { rhs_e5, jac_e5, 4, 0 }; /* Chemical reaction system of H.H. Robertson (1966): The solution of a set of reaction rate equations. In: J. Walsh, ed.: Numer. Anal., an Introduction, Academ. Press, pp. 178-182. f0 = -a * y0 + b * y1 * y2 y0(0) = 1.0 f1 = a * y0 - b * y1 * y2 - c * y1^2 y1(0) = 0.0 f2 = c * y1^2 y2(0) = 0.0 */ int rhs_robertson (double t, const double y[], double f[], void *params) { const double a = 0.04; const double b = 1.0e4; const double c = 3.0e7; extern int nfe; nfe += 1; f[0] = -a * y[0] + b * y[1] * y[2]; f[2] = c * y[1] * y[1]; f[1] = -f[0] - f[2]; return GSL_SUCCESS; } int jac_robertson (double t, const double y[], double *dfdy, double dfdt[], void *params) { const double a = 0.04; const double b = 1.0e4; const double c = 3.0e7; extern int nje; nje += 1; dfdy[0] = -a; dfdy[1] = b * y[2]; dfdy[2] = b * y[1]; dfdy[3] = a; dfdy[4] = -b * y[2] - 2 * c * y[1]; dfdy[5] = -b * y[1]; dfdy[6] = 0.0; dfdy[7] = 2 * c * y[1]; dfdy[8] = 0.0; dfdt[0] = 0.0; dfdt[1] = 0.0; dfdt[2] = 0.0; return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_robertson = { rhs_robertson, jac_robertson, 3, 0 }; /* A two-dimensional oscillating Brusselator system. f0 = a + y0^2 * y1 - (b + 1) * y0 y0(0) = 1.5 f1 = b * y0 - y0^2 * y1 y1(0) = 3.0 */ int rhs_brusselator (double t, const double y[], double f[], void *params) { const double a = 1.0; const double b = 3.0; extern int nfe; nfe += 1; f[0] = a + y[0] * y[0] * y[1] - (b + 1.0) * y[0]; f[1] = b * y[0] - y[0] * y[0] * y[1]; return GSL_SUCCESS; } int jac_brusselator (double t, const double y[], double *dfdy, double dfdt[], void *params) { const double b = 3.0; extern int nje; nje += 1; dfdy[0] = 2 * y[0] * y[1] - (b + 1.0); dfdy[1] = y[0] * y[0]; dfdy[2] = b - 2 * y[0] * y[1]; dfdy[3] = -y[0] * y[0]; dfdt[0] = 0; dfdt[1] = 0; return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_brusselator = { rhs_brusselator, jac_brusselator, 2, 0 }; /* Ring Modulator, stiff ODE of dimension 15. Reference: Walter M. Lioen, Jacques J.B. de Swart, Test Set for Initial Value Problem Solvers, Release 2.1 September 1999, http://ftp.cwi.nl/IVPtestset/software.htm */ #define NRINGMOD 15 int rhs_ringmod (double t, const double y[], double f[], void *params) { const double c = 1.6e-8; const double cs = 2e-12; const double cp = 1e-8; const double r = 25e3; const double rp = 50e0; const double lh = 4.45e0; const double ls1 = 2e-3; const double ls2 = 5e-4; const double ls3 = 5e-4; const double rg1 = 36.3; const double rg2 = 17.3; const double rg3 = 17.3; const double ri = 5e1; const double rc = 6e2; const double gamma = 40.67286402e-9; const double delta = 17.7493332; const double pi = 3.141592653589793238462643383; const double uin1 = 0.5 * sin (2e3 * pi * t); const double uin2 = 2 * sin (2e4 * pi * t); const double ud1 = +y[2] - y[4] - y[6] - uin2; const double ud2 = -y[3] + y[5] - y[6] - uin2; const double ud3 = +y[3] + y[4] + y[6] + uin2; const double ud4 = -y[2] - y[5] + y[6] + uin2; const double qud1 = gamma * (exp (delta * ud1) - 1.0); const double qud2 = gamma * (exp (delta * ud2) - 1.0); const double qud3 = gamma * (exp (delta * ud3) - 1.0); const double qud4 = gamma * (exp (delta * ud4) - 1.0); extern int nfe; nfe += 1; f[0] = (y[7] - 0.5 * y[9] + 0.5 * y[10] + y[13] - y[0] / r) / c; f[1] = (y[8] - 0.5 * y[11] + 0.5 * y[12] + y[14] - y[1] / r) / c; f[2] = (y[9] - qud1 + qud4) / cs; f[3] = (-y[10] + qud2 - qud3) / cs; f[4] = (y[11] + qud1 - qud3) / cs; f[5] = (-y[12] - qud2 + qud4) / cs; f[6] = (-y[6] / rp + qud1 + qud2 - qud3 - qud4) / cp; f[7] = -y[0] / lh; f[8] = -y[1] / lh; f[9] = (0.5 * y[0] - y[2] - rg2 * y[9]) / ls2; f[10] = (-0.5 * y[0] + y[3] - rg3 * y[10]) / ls3; f[11] = (0.5 * y[1] - y[4] - rg2 * y[11]) / ls2; f[12] = (-0.5 * y[1] + y[5] - rg3 * y[12]) / ls3; f[13] = (-y[0] + uin1 - (ri + rg1) * y[13]) / ls1; f[14] = (-y[1] - (rc + rg1) * y[14]) / ls1; return GSL_SUCCESS; } int jac_ringmod (double t, const double y[], double *dfdy, double dfdt[], void *params) { const double c = 1.6e-8; const double cs = 2e-12; const double cp = 1e-8; const double r = 25e3; const double rp = 50e0; const double lh = 4.45e0; const double ls1 = 2e-3; const double ls2 = 5e-4; const double ls3 = 5e-4; const double rg1 = 36.3; const double rg2 = 17.3; const double rg3 = 17.3; const double ri = 5e1; const double rc = 6e2; const double gamma = 40.67286402e-9; const double delta = 17.7493332; const double pi = 3.141592653589793238462643383; const double uin2 = 2 * sin (2e4 * pi * t); const double ud1 = +y[2] - y[4] - y[6] - uin2; const double ud2 = -y[3] + y[5] - y[6] - uin2; const double ud3 = +y[3] + y[4] + y[6] + uin2; const double ud4 = -y[2] - y[5] + y[6] + uin2; const double qpud1 = gamma * delta * exp (delta * ud1); const double qpud2 = gamma * delta * exp (delta * ud2); const double qpud3 = gamma * delta * exp (delta * ud3); const double qpud4 = gamma * delta * exp (delta * ud4); extern int nje; size_t i; nje += 1; for (i = 0; i < NRINGMOD * NRINGMOD; i++) { dfdy[i] = 0.0; } dfdy[0 * NRINGMOD + 0] = -1 / (c * r); dfdy[0 * NRINGMOD + 7] = 1 / c; dfdy[0 * NRINGMOD + 9] = -0.5 / c; dfdy[0 * NRINGMOD + 10] = -dfdy[0 * NRINGMOD + 9]; dfdy[0 * NRINGMOD + 13] = dfdy[0 * NRINGMOD + 7]; dfdy[1 * NRINGMOD + 1] = dfdy[0 * NRINGMOD + 0]; dfdy[1 * NRINGMOD + 8] = dfdy[0 * NRINGMOD + 7]; dfdy[1 * NRINGMOD + 11] = dfdy[0 * NRINGMOD + 9]; dfdy[1 * NRINGMOD + 12] = dfdy[0 * NRINGMOD + 10]; dfdy[1 * NRINGMOD + 14] = dfdy[0 * NRINGMOD + 13]; dfdy[2 * NRINGMOD + 2] = (-qpud1 - qpud4) / cs; dfdy[2 * NRINGMOD + 4] = qpud1 / cs; dfdy[2 * NRINGMOD + 5] = -qpud4 / cs; dfdy[2 * NRINGMOD + 6] = (qpud1 + qpud4) / cs; dfdy[2 * NRINGMOD + 9] = 1 / cs; dfdy[3 * NRINGMOD + 3] = (-qpud2 - qpud3) / cs; dfdy[3 * NRINGMOD + 4] = -qpud3 / cs; dfdy[3 * NRINGMOD + 5] = qpud2 / cs; dfdy[3 * NRINGMOD + 6] = (-qpud2 - qpud3) / cs; dfdy[3 * NRINGMOD + 10] = -1 / cs; dfdy[4 * NRINGMOD + 2] = qpud1 / cs; dfdy[4 * NRINGMOD + 3] = -qpud3 / cs; dfdy[4 * NRINGMOD + 4] = (-qpud1 - qpud3) / cs; dfdy[4 * NRINGMOD + 6] = (-qpud1 - qpud3) / cs; dfdy[4 * NRINGMOD + 11] = 1 / cs; dfdy[5 * NRINGMOD + 2] = -qpud4 / cs; dfdy[5 * NRINGMOD + 3] = qpud2 / cs; dfdy[5 * NRINGMOD + 5] = (-qpud2 - qpud4) / cs; dfdy[5 * NRINGMOD + 6] = (qpud2 + qpud4) / cs; dfdy[5 * NRINGMOD + 12] = -1 / cs; dfdy[6 * NRINGMOD + 2] = (qpud1 + qpud4) / cp; dfdy[6 * NRINGMOD + 3] = (-qpud2 - qpud3) / cp; dfdy[6 * NRINGMOD + 4] = (-qpud1 - qpud3) / cp; dfdy[6 * NRINGMOD + 5] = (qpud2 + qpud4) / cp; dfdy[6 * NRINGMOD + 6] = (-qpud1 - qpud2 - qpud3 - qpud4 - 1 / rp) / cp; dfdy[7 * NRINGMOD + 0] = -1 / lh; dfdy[8 * NRINGMOD + 1] = dfdy[7 * NRINGMOD + 0]; dfdy[9 * NRINGMOD + 0] = 0.5 / ls2; dfdy[9 * NRINGMOD + 2] = -1 / ls2; dfdy[9 * NRINGMOD + 9] = -rg2 / ls2; dfdy[10 * NRINGMOD + 0] = -0.5 / ls3; dfdy[10 * NRINGMOD + 3] = 1 / ls3; dfdy[10 * NRINGMOD + 10] = -rg3 / ls3; dfdy[11 * NRINGMOD + 1] = dfdy[9 * NRINGMOD + 0]; dfdy[11 * NRINGMOD + 4] = dfdy[9 * NRINGMOD + 2]; dfdy[11 * NRINGMOD + 11] = dfdy[9 * NRINGMOD + 9]; dfdy[12 * NRINGMOD + 1] = dfdy[10 * NRINGMOD + 0]; dfdy[12 * NRINGMOD + 5] = dfdy[10 * NRINGMOD + 3]; dfdy[12 * NRINGMOD + 12] = dfdy[10 * NRINGMOD + 10]; dfdy[13 * NRINGMOD + 0] = -1 / ls1; dfdy[13 * NRINGMOD + 13] = -(ri + rg1) / ls1; dfdy[14 * NRINGMOD + 1] = dfdy[13 * NRINGMOD + 0]; dfdy[14 * NRINGMOD + 14] = -(rc + rg1) / ls1; for (i = 0; i < NRINGMOD; i++) { dfdt[i] = 0.0; } return GSL_SUCCESS; } gsl_odeiv2_system rhs_func_ringmod = { rhs_ringmod, jac_ringmod, NRINGMOD, NULL }; /**********************************************************/ /* Functions for carrying out tests */ /**********************************************************/ void test_odeiv_stepper (const gsl_odeiv2_step_type * T, const gsl_odeiv2_system * sys, const double h, const double t, const char desc[], const double ystart[], const double yfin[], const double relerr) { /* tests stepper T with one fixed length step advance of system sys and compares the result with given values yfin */ double y[MAXEQ] = { 0.0 }; double yerr[MAXEQ] = { 0.0 }; double scale_abs[MAXEQ]; size_t ne = sys->dimension; size_t i; gsl_odeiv2_driver *d; for (i = 0; i < MAXEQ; i++) { scale_abs[i] = 1.0; } d = gsl_odeiv2_driver_alloc_scaled_new (sys, T, h, relerr, relerr, 1.0, 0.0, scale_abs); DBL_MEMCPY (y, ystart, MAXEQ); { int s = gsl_odeiv2_step_apply (d->s, t, h, y, yerr, 0, 0, sys); if (s != GSL_SUCCESS) { gsl_test (s, "test_odeiv_stepper: %s step_apply returned %d", desc, s); } } for (i = 0; i < ne; i++) { gsl_test_rel (y[i], yfin[i], relerr, "%s %s step(%d)", gsl_odeiv2_step_name (d->s), desc, i); } gsl_odeiv2_driver_free (d); } void test_stepper (const gsl_odeiv2_step_type * T) { /* Tests stepper T with a step of selected systems */ double y[MAXEQ] = { 0.0 }; double yfin[MAXEQ] = { 0.0 }; /* Step length */ double h; /* Required tolerance */ double err_target; /* classic stiff */ h = 1e-7; err_target = 1e-4; y[0] = 1.0; y[1] = 0.0; { const double e1 = exp (-h); const double e2 = exp (-1000.0 * h); yfin[0] = 2.0 * e1 - e2; yfin[1] = -e1 + e2; } test_odeiv_stepper (T, &rhs_func_stiff, h, 0.0, "classic_stiff", y, yfin, err_target); /* linear */ h = 1e-1; err_target = 1e-10; y[0] = 0.58; yfin[0] = y[0] + 2 * h; test_odeiv_stepper (T, &rhs_func_lin, h, 0.0, "linear", y, yfin, err_target); /* exponential */ h = 1e-4; err_target = 1e-8; y[0] = exp (2.7); yfin[0] = exp (2.7 + h); test_odeiv_stepper (T, &rhs_func_exp, h, 2.7, "exponential", y, yfin, err_target); /* cosine-sine */ h = 1e-3; err_target = 1e-6; y[0] = cos (1.2); y[1] = sin (1.2); yfin[0] = cos (1.2 + h); yfin[1] = sin (1.2 + h); test_odeiv_stepper (T, &rhs_func_sin, h, 1.2, "cosine-sine", y, yfin, err_target); } void test_evolve_system (const gsl_odeiv2_step_type * T, const gsl_odeiv2_system * sys, double t0, double t1, double hstart, double y[], double yfin[], double err_target, const char *desc) { /* Tests system sys with stepper T. Step length is controlled by error estimation from the stepper. */ int steps = 0; size_t i; double t = t0; double h = hstart; /* Tolerance factor in testing errors */ const double factor = 10; gsl_odeiv2_driver *d = gsl_odeiv2_driver_alloc_standard_new (sys, T, h, err_target, err_target, 1.0, 0.0); double *y_orig = (double *) malloc (sys->dimension * sizeof (double)); int s = 0; extern int nfe, nje; nfe = 0; nje = 0; while (t < t1) { double t_orig = t; memcpy (y_orig, y, sys->dimension * sizeof (double)); s = gsl_odeiv2_evolve_apply (d->e, d->c, d->s, sys, &t, t1, &h, y); #ifdef DEBUG printf ("test_evolve_system at: %.5e %.5e %.5e %d\n", t, y[0], y[1], gsl_odeiv2_step_order (d->s)); #endif if (s != GSL_SUCCESS) { /* check that t and y are unchanged */ gsl_test_abs (t, t_orig, 0.0, "%s t must be restored on failure", gsl_odeiv2_step_name (d->s)); for (i = 0; i < sys->dimension; i++) { gsl_test_abs (y[i], y_orig[i], 0.0, "%s y must be restored on failure", gsl_odeiv2_step_name (d->s), desc, i); } if (sys != &rhs_func_xsin) { /* apart from xsin, other functions should not return errors */ gsl_test (s, "%s evolve_apply returned %d", gsl_odeiv2_step_name (d->s), s); break; } } if (steps > 100000) { gsl_test (GSL_EFAILED, "%s evolve_apply reached maxiter", gsl_odeiv2_step_name (d->s)); break; } steps++; } gsl_test (s, "%s %s [%g,%g], %d steps (nfe %d, nje %d) completed", gsl_odeiv2_step_name (d->s), desc, t0, t1, steps, nfe, nje); /* err_target is target error of one step. Test if stepper has made larger error than (tolerance factor times) the number of steps times the err_target. */ for (i = 0; i < sys->dimension; i++) { gsl_test_abs (y[i], yfin[i], factor * d->e->count * err_target, "%s %s evolve(%d)", gsl_odeiv2_step_name (d->s), desc, i); } free (y_orig); gsl_odeiv2_driver_free (d); } int sys_driver (const gsl_odeiv2_step_type * T, const gsl_odeiv2_system * sys, double t0, double t1, double hstart, double y[], double epsabs, double epsrel, const char desc[]) { /* This function evolves a system sys with stepper T from t0 to t1. Step length is varied via error control with possibly different absolute and relative error tolerances. */ int s = 0; int steps = 0; double t = t0; double h = hstart; gsl_odeiv2_driver *d = gsl_odeiv2_driver_alloc_standard_new (sys, T, h, epsabs, epsrel, 1.0, 0.0); extern int nfe, nje; nfe = 0; nje = 0; while (t < t1) { s = gsl_odeiv2_evolve_apply (d->e, d->c, d->s, sys, &t, t1, &h, y); #ifdef DEBUG printf ("sys_driver at: %.5e %.5e %.5e %d\n", t, y[0], y[1], gsl_odeiv2_step_order (d->s)); #endif if (s != GSL_SUCCESS) { gsl_test (s, "sys_driver: %s evolve_apply returned %d", gsl_odeiv2_step_name (d->s), s); break; } if (steps > 1e7) { gsl_test (GSL_EMAXITER, "sys_driver: %s evolve_apply reached maxiter at t=%g", gsl_odeiv2_step_name (d->s), t); s = GSL_EMAXITER; break; } steps++; } gsl_test (s, "%s %s [%g,%g], %d steps (nfe %d, nje %d) completed", gsl_odeiv2_step_name (d->s), desc, t0, t1, steps, nfe, nje); gsl_odeiv2_driver_free (d); return s; } void test_evolve_linear (const gsl_odeiv2_step_type * T, double h, double err) { /* Test linear evolve */ double y[1]; double yfin[1]; y[0] = 1.0; yfin[0] = 9.0; test_evolve_system (T, &rhs_func_lin, 0.0, 4.0, h, y, yfin, err, "linear[0,4]"); } void test_evolve_exp (const gsl_odeiv2_step_type * T, double h, double err) { /* Test exponential evolve */ double y[1]; double yfin[1]; y[0] = 1.0; yfin[0] = exp (2.0); test_evolve_system (T, &rhs_func_exp, 0.0, 2.0, h, y, yfin, err, "exp[0,2]"); } void test_evolve_sin (const gsl_odeiv2_step_type * T, double h, double err) { /* Test sinusoidal evolve */ double y[2]; double yfin[2]; y[0] = 1.0; y[1] = 0.0; yfin[0] = cos (2.0); yfin[1] = sin (2.0); test_evolve_system (T, &rhs_func_sin, 0.0, 2.0, h, y, yfin, err, "sine[0,2]"); } void test_evolve_xsin (const gsl_odeiv2_step_type * T, double h, double err) { /* Test sinusoidal evolve including a failing window */ double y[2]; double yfin[2]; y[0] = 1.0; y[1] = 0.0; yfin[0] = cos (2.0); yfin[1] = sin (2.0); rhs_xsin_reset = 1; jac_xsin_reset = 1; test_evolve_system (T, &rhs_func_xsin, 0.0, 2.0, h, y, yfin, err, "sine[0,2] w/errors"); } void test_evolve_stiff1 (const gsl_odeiv2_step_type * T, double h, double err) { /* Test classical stiff problem evolve, t=[0,1] */ double y[2]; double yfin[2]; y[0] = 1.0; y[1] = 0.0; { double arg = 1.0; double e1 = exp (-arg); double e2 = exp (-1000.0 * arg); yfin[0] = 2.0 * e1 - e2; yfin[1] = -e1 + e2; } test_evolve_system (T, &rhs_func_stiff, 0.0, 1.0, h, y, yfin, err, "stiff[0,1]"); } void test_evolve_stiff5 (const gsl_odeiv2_step_type * T, double h, double err) { /* Test classical stiff problem evolve, t=[0,5] */ double y[2]; double yfin[2]; y[0] = 1.0; y[1] = 0.0; { double arg = 5.0; double e1 = exp (-arg); double e2 = exp (-1000.0 * arg); yfin[0] = 2.0 * e1 - e2; yfin[1] = -e1 + e2; } test_evolve_system (T, &rhs_func_stiff, 0.0, 5.0, h, y, yfin, err, "stiff[0,5]"); } void test_evolve_negative_h (const gsl_odeiv2_step_type * T, double h, double err) { /* Test evolution in negative direction */ /* Tolerance factor in testing errors */ const double factor = 10; const gsl_odeiv2_system sys = rhs_func_cos; double t = 0; double t1 = -4.0; double y = 0.0; double yfin = sin (t1); gsl_odeiv2_driver *d; /* Make initial h negative */ h = -fabs (h); d = gsl_odeiv2_driver_alloc_standard_new (&sys, T, h, err, err, 1.0, 0.0); while (t > t1) { int status = gsl_odeiv2_evolve_apply (d->e, d->c, d->s, &sys, &t, t1, &h, &y); if (status != GSL_SUCCESS) { gsl_test (status, "%s evolve_apply returned %d for negative h", gsl_odeiv2_step_name (d->s), status); break; } } gsl_test_abs (y, yfin, factor * d->e->count * err, "%s evolution with negative h", gsl_odeiv2_step_name (d->s)); gsl_odeiv2_driver_free (d); } void test_broken (const gsl_odeiv2_step_type * T, double h, double err) { /* Check for gsl_odeiv2_evolve_apply. The user function fails at t>=10, which in this test causes step size to decrease below machine precision and return with a failure code. */ /* Tolerance factor in testing errors */ const double factor = 10; const gsl_odeiv2_system sys = rhs_func_broken; gsl_odeiv2_driver *d = gsl_odeiv2_driver_alloc_y_new (&sys, T, h, err, err); double t = 0; double t1 = 100.0; double y = 0.0; const double final_max_h = GSL_DBL_EPSILON; int status; while (t < t1) { status = gsl_odeiv2_evolve_apply (d->e, d->c, d->s, &sys, &t, t1, &h, &y); if (status != GSL_SUCCESS) { break; } } gsl_test_abs (h + final_max_h, final_max_h, factor * final_max_h, "%s test_broken: step size at break point", gsl_odeiv2_step_name (d->s)); gsl_test_abs (t, 10.0, factor * err, "%s test_broken: point of break", gsl_odeiv2_step_name (d->s)); /* GSL_FAILURE results from stepper failure, 123 from user function */ if (status != GSL_FAILURE && status != 123) { gsl_test (status, "%s test_broken: evolve return value %d", gsl_odeiv2_step_name (d->s), status); } else { gsl_test (GSL_SUCCESS, "%s test_broken: evolve return value %d", gsl_odeiv2_step_name (d->s), status); } gsl_odeiv2_driver_free (d); } void test_stepsize_fail (const gsl_odeiv2_step_type * T, double h) { /* Check for gsl_odeiv2_evolve_apply. The user function works apparently fine (returns GSL_SUCCESS) but is faulty in this case. gsl_odeiv2_evolve_apply therefore decreases the step-size below machine precision and therefore stops with GSL_FAILURE. */ /* Error tolerance */ const double epsabs = 1e-16; const double epsrel = 1e-6; /* Tolerance factor in testing errors */ const double factor = 10; const double final_max_h = GSL_DBL_EPSILON; const gsl_odeiv2_system sys = rhs_func_br; gsl_odeiv2_driver *d = gsl_odeiv2_driver_alloc_y_new (&sys, T, h, epsabs, epsrel); double t = 1.0; double t1 = 1e5; double y = 0.0; int status; while (t < t1) { status = gsl_odeiv2_evolve_apply (d->e, d->c, d->s, &sys, &t, t1, &h, &y); if (status != GSL_SUCCESS) { break; } } gsl_test_abs (h + final_max_h, final_max_h, factor * final_max_h, "%s test_stepsize_fail: step size at break point", gsl_odeiv2_step_name (d->s)); gsl_test_abs (t, 1.0, 1e-6, "%s test_stepsize_fail: point of break", gsl_odeiv2_step_name (d->s)); gsl_test_int (status, GSL_FAILURE, "%s test_stepsize_fail: evolve return value", gsl_odeiv2_step_name (d->s)); gsl_odeiv2_driver_free (d); } void test_user_break (const gsl_odeiv2_step_type * T, double h) { /* Tests for user signaled immediate break */ const double tol = 1e-8; gsl_odeiv2_driver *d = gsl_odeiv2_driver_alloc_y_new (&rhs_func_sin_ub, T, h, tol, tol); double y[] = { 1.0, 0.0 }; double t = 0.0; const double t1 = 8.25; int s = gsl_odeiv2_driver_apply (d, &t, t1, y); gsl_test ((s - GSL_EBADFUNC), "%s test_user_break returned %d", gsl_odeiv2_step_name (d->s), s); gsl_odeiv2_driver_free (d); } void test_stepfn (const gsl_odeiv2_step_type * T) { /* Test evolve on a small derivative change at t=0 */ double epsabs = 1e-16; double epsrel = 1e-6; const gsl_odeiv2_system sys = rhs_func_stepfn; double t = 0.0; double h = 1e-6; double y = 0.0; int i = 0; int status = 0; gsl_odeiv2_driver *d = gsl_odeiv2_driver_alloc_y_new (&sys, T, h, epsabs, epsrel); while (t < 2 && i < 1000000) { status = gsl_odeiv2_evolve_apply (d->e, d->c, d->s, &sys, &t, 2, &h, &y); #ifdef DEBUG printf ("test_stepfn at: i=%d status=%d t=%g h=%g y=%g\n", i, status, t, h, y); #endif if (status != GSL_SUCCESS) break; i++; } gsl_test (status, "evolve step function, return value (stepfn/%s): %d", gsl_odeiv2_step_name (d->s), status); gsl_test_abs (t, 2, 1e-16, "evolve step function, t (stepfn/%s)", gsl_odeiv2_step_name (d->s)); gsl_test_rel (y, 1, epsrel, "evolve step function, y (stepfn/%s)", gsl_odeiv2_step_name (d->s)); gsl_odeiv2_driver_free (d); } void test_stepfn2 (const gsl_odeiv2_step_type * T) { /* Test evolve on a large derivative change at t=0 */ double epsabs = 1e-16; double epsrel = 1e-6; const gsl_odeiv2_system sys = rhs_func_stepfn2; double t = -1.0; double h = 1e-6; double y = 0.0; int i = 0; int status; const int maxiter = 100000; gsl_odeiv2_driver *d = gsl_odeiv2_driver_alloc_yp_new (&sys, T, h, epsabs, epsrel); while (t < 1.0 && i < maxiter) { status = gsl_odeiv2_evolve_apply (d->e, d->c, d->s, &sys, &t, 1.0, &h, &y); #ifdef DEBUG printf ("test_stepfn2 at: i=%d status=%d t=%g h=%g y=%g\n", i, status, t, h, y); #endif if (status != GSL_SUCCESS) break; i++; } if (i >= maxiter) printf ("FAIL: evolve big step function, (stepfn2/%s) reached maxiter\n", gsl_odeiv2_step_name (d->s)); gsl_test_abs (t, 1.0, 1e-16, "evolve big step function, t (stepfn2/%s)", gsl_odeiv2_step_name (d->s)); gsl_test_rel (y, 1e300, epsrel, "evolve big step function, y (stepfn2/%s)", gsl_odeiv2_step_name (d->s)); gsl_odeiv2_driver_free (d); } void test_nonstiff_problems (void) { /* Compares output of non-stiff (or only moderately stiff) problems with several steppers */ const gsl_odeiv2_step_type *steppers[MAXNS]; /* Required error tolerance for each stepper. */ double err_target[MAXNS]; /* initial values for each ode-solver */ double y[MAXEQ * MAXNS]; size_t i, k, p; /* Number of problems to test */ #define CONST_NONSTIFF_NPROB 4 /* Problems, their names and number of equations */ const gsl_odeiv2_system *prob[] = { &rhs_func_vl, &rhs_func_vanderpol, &rhs_func_stifftrig, &rhs_func_brusselator }; const char *probname[] = { "volterra-lotka", "vanderpol", "stifftrig", "brusselator" }; const size_t sd[] = { 2, 2, 1, 2 }; /* Integration interval for problems */ const double start[CONST_NONSTIFF_NPROB] = { 0.0 }; const double end[] = { 9.0, 100.0, 1.5, 20.0 }; const double epsabs = 1e-8; const double epsrel = 1e-8; const double initstepsize = 1e-5; /* Steppers */ steppers[0] = gsl_odeiv2_step_rk4; err_target[0] = 1e-6; steppers[1] = gsl_odeiv2_step_rk2; err_target[1] = 1e-6; steppers[2] = gsl_odeiv2_step_rkf45; err_target[2] = 1e-6; steppers[3] = gsl_odeiv2_step_rkck; err_target[3] = 1e-6; steppers[4] = gsl_odeiv2_step_rk8pd; err_target[4] = 1e-6; steppers[5] = gsl_odeiv2_step_rk1imp; err_target[5] = 1e-3; steppers[6] = gsl_odeiv2_step_rk2imp; err_target[6] = 1e-5; steppers[7] = gsl_odeiv2_step_rk4imp; err_target[7] = 1e-6; steppers[8] = gsl_odeiv2_step_bsimp; err_target[8] = 1e-6; steppers[9] = gsl_odeiv2_step_msadams; err_target[9] = 1e-5; steppers[10] = gsl_odeiv2_step_msbdf; err_target[10] = 1e-5; steppers[11] = 0; /* Loop over problems */ for (p = 0; p < CONST_NONSTIFF_NPROB; p++) { /* Initialize */ for (i = 0; i < MAXNS * MAXEQ; i++) { y[i] = 0.0; } for (i = 0; i < MAXNS; i++) { switch (p) { case 0: y[i * sd[p]] = 2.725; y[i * sd[p] + 1] = 1.0; break; case 1: y[i * sd[p]] = 1.0; y[i * sd[p] + 1] = 0.0; break; case 2: y[i * sd[p]] = 0.0; break; case 3: y[i * sd[p]] = 1.5; y[i * sd[p] + 1] = 3.0; break; default: gsl_test (GSL_EFAILED, "test_nonstiff_problems: initialization error\n"); return; } } /* Call each solver for the problem */ for (i = 0; steppers[i] != 0; i++) { int s = sys_driver (steppers[i], prob[p], start[p], end[p], initstepsize, &y[sd[p] * i], epsabs, epsrel, probname[p]); if (s != GSL_SUCCESS) { gsl_test (s, "test_nonstiff_problems %s %s", steppers[i]->name, probname[p]); } } /* Compare results */ for (i = 1; steppers[i] != 0; i++) for (k = 0; k < sd[p]; k++) { const double val1 = y[k]; const double val2 = y[sd[p] * i + k]; gsl_test_rel (val1, val2, (GSL_MAX (err_target[0], err_target[i])), "%s/%s %s [%d]", steppers[0]->name, steppers[i]->name, probname[p], k); } } } void test_stiff_problems (void) { /* Compares output of stiff problems with several steppers */ const gsl_odeiv2_step_type *steppers[MAXNS]; /* Required error tolerance for each stepper. */ double err_target[MAXNS]; /* initial values for each ode-solver */ double y[MAXEQ * MAXNS]; size_t i, k, p; /* Number of problems to test */ #define CONST_STIFF_NPROB 3 /* Problems, their names and number of equations */ const gsl_odeiv2_system *prob[] = { &rhs_func_oregonator, &rhs_func_e5, &rhs_func_robertson }; const char *probname[] = { "oregonator", "e5", "robertson" }; const size_t sd[] = { 3, 4, 3 }; /* Integration interval for problems */ const double start[CONST_STIFF_NPROB] = { 0.0 }; const double end[] = { 360.0, 1e4, 1e4 }; const double epsabs = 1e-40; const double epsrel = 1e-7; const double initstepsize = 1e-5; /* Steppers */ steppers[0] = gsl_odeiv2_step_bsimp; err_target[0] = 1e-6; steppers[1] = gsl_odeiv2_step_rk1imp; err_target[1] = 5e-3; steppers[2] = gsl_odeiv2_step_rk2imp; err_target[2] = 5e-5; steppers[3] = gsl_odeiv2_step_rk4imp; err_target[3] = 5e-5; steppers[4] = gsl_odeiv2_step_msbdf; err_target[4] = 1e-4; steppers[5] = 0; /* Loop over problems */ for (p = 0; p < CONST_STIFF_NPROB; p++) { /* Initialize */ for (i = 0; i < MAXNS * MAXEQ; i++) { y[i] = 0.0; } for (i = 0; i < MAXNS; i++) { switch (p) { case 0: y[i * sd[p]] = 1.0; y[i * sd[p] + 1] = 2.0; y[i * sd[p] + 2] = 3.0; break; case 1: y[i * sd[p]] = 1.76e-3; y[i * sd[p] + 1] = 0.0; y[i * sd[p] + 2] = 0.0; y[i * sd[p] + 3] = 0.0; break; case 2: y[i * sd[p]] = 1.0; y[i * sd[p] + 1] = 0.0; y[i * sd[p] + 2] = 0.0; break; default: gsl_test (GSL_EFAILED, "test_stiff_problems: initialization error\n"); return; } } /* Call each solver for the problem */ for (i = 0; steppers[i] != 0; i++) { int s = sys_driver (steppers[i], prob[p], start[p], end[p], initstepsize, &y[sd[p] * i], epsabs, epsrel, probname[p]); if (s != GSL_SUCCESS) { gsl_test (s, "test_stiff_problems %s %s", steppers[i]->name, probname[p]); } } /* Compare results */ for (i = 1; steppers[i] != 0; i++) for (k = 0; k < sd[p]; k++) { const double val1 = y[k]; const double val2 = y[sd[p] * i + k]; gsl_test_rel (val1, val2, (GSL_MAX (err_target[0], err_target[i])), "%s/%s %s [%d]", steppers[0]->name, steppers[i]->name, probname[p], k); } } } void test_extreme_problems (void) { /* Compares output of numerically particularly demanding problems with several steppers */ const gsl_odeiv2_step_type *steppers[MAXNS]; /* Required error tolerance for each stepper. */ double err_target[MAXNS]; /* initial values for each ode-solver */ double y[MAXEQ * MAXNS]; size_t i, k, p; /* Number of problems to test */ #define CONST_EXTREME_NPROB 3 /* Problems, their names and number of equations */ const gsl_odeiv2_system *prob[] = { &rhs_func_e5, &rhs_func_robertson, &rhs_func_ringmod }; const char *probname[] = { "e5_bigt", "robertson_bigt", "ringmod" }; const size_t sd[] = { 4, 3, NRINGMOD }; /* Integration interval for problems */ const double start[CONST_EXTREME_NPROB] = { 0.0 }; const double end[CONST_EXTREME_NPROB] = { 1e11, 1e11, 1e-5 }; const double epsabs[CONST_EXTREME_NPROB] = { 1e1 * GSL_DBL_MIN, 1e1 * GSL_DBL_MIN, 1e-12 }; const double epsrel[CONST_EXTREME_NPROB] = { 1e-12, 1e-12, 1e-12 }; const double initstepsize[CONST_EXTREME_NPROB] = { 1e-5, 1e-5, 1e-10 }; /* Steppers */ steppers[0] = gsl_odeiv2_step_bsimp; err_target[0] = 1e-3; steppers[1] = gsl_odeiv2_step_msbdf; err_target[1] = 1e-3; steppers[2] = 0; /* Loop over problems */ for (p = 0; p < CONST_EXTREME_NPROB; p++) { /* Initialize */ for (i = 0; i < MAXNS * MAXEQ; i++) { y[i] = 0.0; } for (i = 0; i < MAXNS; i++) { switch (p) { case 0: y[i * sd[p]] = 1.76e-3; y[i * sd[p] + 1] = 0.0; y[i * sd[p] + 2] = 0.0; y[i * sd[p] + 3] = 0.0; break; case 1: y[i * sd[p]] = 1.0; y[i * sd[p] + 1] = 0.0; y[i * sd[p] + 2] = 0.0; break; case 2: { size_t j; for (j = 0; j < NRINGMOD; j++) { y[i * sd[p] + j] = 0.0; } } break; default: gsl_test (GSL_EFAILED, "test_extreme_problems: initialization error\n"); return; } } /* Call each solver for the problem */ for (i = 0; steppers[i] != 0; i++) { int s = sys_driver (steppers[i], prob[p], start[p], end[p], initstepsize[p], &y[sd[p] * i], epsabs[p], epsrel[p], probname[p]); if (s != GSL_SUCCESS) { printf ("start=%.5e, initstepsize=%.5e\n", start[p], initstepsize[p]); gsl_test (s, "test_extreme_problems %s %s", steppers[i]->name, probname[p]); } } /* Compare results */ for (i = 1; steppers[i] != 0; i++) for (k = 0; k < sd[p]; k++) { const double val1 = y[k]; const double val2 = y[sd[p] * i + k]; gsl_test_rel (val1, val2, (GSL_MAX (err_target[0], err_target[i])), "%s/%s %s [%d]", steppers[0]->name, steppers[i]->name, probname[p], k); } } } void test_driver (const gsl_odeiv2_step_type * T) { /* Tests for gsl_odeiv2_driver object */ int s; const double tol = 1e-8; const double hmax = 1e-2; double y[] = { 1.0, 0.0 }; double t = 0.0; const double tinit = 0.0; const double t1 = 8.25; const double t2 = 100; const double t3 = -2.5; const size_t minsteps = ceil (t1 / hmax); const size_t maxsteps = 20; const double hmin = 1e-10; const unsigned long int nfsteps = 100000; const double hfixed = 0.000025; gsl_odeiv2_driver *d = gsl_odeiv2_driver_alloc_y_new (&rhs_func_sin, T, 1e-3, tol, tol); gsl_odeiv2_driver_set_hmax (d, hmax); s = gsl_odeiv2_driver_apply (d, &t, t1, y); if (s != GSL_SUCCESS) { gsl_test (s, "%s test_driver apply returned %d", gsl_odeiv2_step_name (d->s), s); } /* Test that result is correct */ gsl_test_rel (y[0], cos (t1), d->n * tol, "%s test_driver y0", gsl_odeiv2_step_name (d->s)); gsl_test_rel (y[1], sin (t1), d->n * tol, "%s test_driver y1", gsl_odeiv2_step_name (d->s)); /* Test that maximum step length is obeyed */ if (d->n < minsteps) { gsl_test (1, "%s test_driver steps %d < minsteps %d \n", gsl_odeiv2_step_name (d->s), d->n, minsteps); } else { gsl_test (0, "%s test_driver max step length test", gsl_odeiv2_step_name (d->s)); } /* Test changing integration direction from forward to backward */ gsl_odeiv2_driver_reset_hstart (d, -1e-3); s = gsl_odeiv2_driver_apply (d, &t, tinit, y); if (s != GSL_SUCCESS) { gsl_test (s, "%s test_driver apply returned %d", gsl_odeiv2_step_name (d->s), s); } gsl_test_rel (y[0], cos (tinit), d->n * tol, "%s test_driver y0", gsl_odeiv2_step_name (d->s)); gsl_test_rel (y[1], sin (tinit), d->n * tol, "%s test_driver y1", gsl_odeiv2_step_name (d->s)); gsl_odeiv2_driver_free (d); /* Test that maximum number of steps is obeyed */ d = gsl_odeiv2_driver_alloc_y_new (&rhs_func_sin, T, 1e-3, tol, tol); gsl_odeiv2_driver_set_hmax (d, hmax); gsl_odeiv2_driver_set_nmax (d, maxsteps); s = gsl_odeiv2_driver_apply (d, &t, t2, y); if (d->n != maxsteps + 1) { gsl_test (1, "%s test_driver steps %d, expected %d", gsl_odeiv2_step_name (d->s), d->n, maxsteps + 1); } else { gsl_test (0, "%s test_driver max steps test", gsl_odeiv2_step_name (d->s)); } gsl_odeiv2_driver_free (d); /* Test that minimum step length is obeyed */ d = gsl_odeiv2_driver_alloc_y_new (&rhs_func_broken, T, 1e-3, tol, tol); gsl_odeiv2_driver_set_hmin (d, hmin); y[0] = 0.0; t = 0.0; s = gsl_odeiv2_driver_apply (d, &t, t2, y); if (s != GSL_ENOPROG) { gsl_test (1, "%s test_driver min step test returned %d", gsl_odeiv2_step_name (d->s), s); } else { gsl_test (0, "%s test_driver min step test", gsl_odeiv2_step_name (d->s)); } gsl_odeiv2_driver_free (d); /* Test negative integration direction */ d = gsl_odeiv2_driver_alloc_y_new (&rhs_func_sin, T, -1e-3, tol, tol); y[0] = 1.0; y[1] = 0.0; t = 2.5; s = gsl_odeiv2_driver_apply (d, &t, t3, y); { const double tol = 1e-3; const double test = fabs (t - t3); const double val = fabs (sin (-5.0) - y[1]); if (test > GSL_DBL_EPSILON) { gsl_test (1, "%s test_driver negative dir diff %e, expected less than %e", gsl_odeiv2_step_name (d->s), test, GSL_DBL_EPSILON); } else if (val > tol) { gsl_test (1, "%s test_driver negative dir val %e, expected less than %e", gsl_odeiv2_step_name (d->s), val, tol); } else { gsl_test (s, "%s test_driver negative direction test", gsl_odeiv2_step_name (d->s)); } } /* Test driver_apply_fixed_step */ gsl_odeiv2_driver_reset_hstart (d, 1e-3); s = gsl_odeiv2_driver_apply_fixed_step (d, &t, hfixed, nfsteps, y); if (s != GSL_SUCCESS) { gsl_test (s, "%s test_driver apply_fixed_step returned %d", gsl_odeiv2_step_name (d->s), s); } { const double tol = 1e-3; const double val = fabs (sin (-2.5) - y[1]); if (fabs (t) > nfsteps * GSL_DBL_EPSILON) { gsl_test (1, "%s test_driver apply_fixed_step t %e, expected less than %e", gsl_odeiv2_step_name (d->s), fabs (t), nfsteps * GSL_DBL_EPSILON); } else if (val > tol) { gsl_test (1, "%s test_driver apply_fixed_step val %e, expected less than %e", gsl_odeiv2_step_name (d->s), val, tol); } else { gsl_test (s, "%s test_driver apply_fixed_step test", gsl_odeiv2_step_name (d->s)); } } gsl_odeiv2_driver_free (d); } void benchmark_precision (void) { /* Tests steppers with several error tolerances and evaluates their performance and precision. */ /* Maximum number of tolerances to be tested */ #define MAXNT 12 const gsl_odeiv2_step_type *steppers[MAXNS]; /* Required error tolerance for each stepper. */ double err_target[MAXNS]; /* initial values for each ode-solver */ double y[MAXEQ * MAXNS * MAXNT]; /* precise results from e.g. analytical solution */ double yres[MAXEQ]; size_t i, j, k, p; /* Number of problems to test */ #define CONST_BENCHMARK_PRECISION_NPROB 3 /* Problems, their names and number of equations */ const gsl_odeiv2_system *prob[] = { &rhs_func_sin, &rhs_func_exp, &rhs_func_stiff }; const char *probname[] = { "rhs_func_sin", "rhs_func_exp", "rhs_func_stiff" }; const size_t sd[] = { 2, 1, 2 }; /* Integration interval for problems */ const double start[] = { 0.0, 0.0, 0.0 }; const double end[] = { 2.4, 8.4, 1.2 }; const double epsabs[] = { 1e-4, 1e-6, 1e-8, 1e-10, 1e-12, 1e-14, 0 }; const double epsrel[] = { 1e-4, 1e-6, 1e-8, 1e-10, 1e-12, 1e-14, 0 }; const double initstepsize = 1e-5; /* number of function and jacobian evaluations */ extern int nfe, nje; int nnfe[MAXNS * MAXNT] = { 0.0 }; int nnje[MAXNS * MAXNT] = { 0.0 }; /* Steppers */ steppers[0] = gsl_odeiv2_step_rk4; err_target[0] = 1e-6; steppers[1] = gsl_odeiv2_step_rk2; err_target[1] = 1e-6; steppers[2] = gsl_odeiv2_step_rkf45; err_target[2] = 1e-6; steppers[3] = gsl_odeiv2_step_rkck; err_target[3] = 1e-6; steppers[4] = gsl_odeiv2_step_rk8pd; err_target[4] = 1e-6; steppers[5] = gsl_odeiv2_step_rk1imp; err_target[5] = 1e-3; steppers[6] = gsl_odeiv2_step_rk2imp; err_target[6] = 1e-5; steppers[7] = gsl_odeiv2_step_rk4imp; err_target[7] = 1e-6; steppers[8] = gsl_odeiv2_step_bsimp; err_target[8] = 1e-6; steppers[9] = gsl_odeiv2_step_msadams; err_target[9] = 1e-5; steppers[10] = gsl_odeiv2_step_msbdf; err_target[10] = 1e-5; steppers[11] = 0; /* Loop over problems */ for (p = 0; p < CONST_BENCHMARK_PRECISION_NPROB; p++) { /* Initialize */ for (i = 0; i < MAXNS * MAXEQ * MAXNT; i++) { y[i] = 0.0; } for (i = 0; i < MAXNS * MAXNT; i++) { switch (p) { case 0: y[i * sd[p]] = 1.0; y[i * sd[p] + 1] = 0.0; yres[0] = cos (2.4); yres[1] = sin (2.4); break; case 1: y[i * sd[p]] = 1.0; yres[0] = exp (8.4); break; case 2: y[i * sd[p]] = 1.0; y[i * sd[p] + 1] = 0.0; yres[0] = 2 * exp (-1.2) - exp (-1000 * 1.2); yres[1] = -exp (-1.2) + exp (-1000 * 1.2); break; default: gsl_test (GSL_EFAILED, "benchmark_precision: initialization error\n"); return; } } /* Call each solver for the problem */ for (i = 0; steppers[i] != 0; i++) for (j = 0; epsrel[j] != 0; j++) { int s = sys_driver (steppers[i], prob[p], start[p], end[p], initstepsize, &y[sd[p] * (j + i * MAXNT)], epsabs[j], epsrel[j], probname[p]); if (s != GSL_SUCCESS) { for (k = 0; k < sd[p]; k++) { y[sd[p] * (j + i * MAXNT) + k] = GSL_NAN; } } else { nnfe[j + i * MAXNT] = nfe; nnje[j + i * MAXNT] = nje; } } /* Print results */ printf ("benchmark_precision: diff = (y_true - y) / y_true with %s\n epsrel: ", probname[p]); for (i = 0; epsrel[i] != 0.0; i++) { printf ("%12.0e ", epsrel[i]); } printf ("\n"); for (i = 0; steppers[i] != 0; i++) { for (k = 0; k < sd[p]; k++) { printf ("%8s diff[%d]: ", steppers[i]->name, (int) k); for (j = 0; epsrel[j] != 0; j++) { const double diff = (yres[k] - y[sd[p] * (j + i * MAXNT) + k]) / yres[k]; printf ("%12.5e ", diff); } printf ("\n"); } } printf ("\n"); /* Print number of function/jacobian evaluations */ printf ("benchmark_precision: number of function/jacobian evaluations with %s\n epsrel: ", probname[p]); for (i = 0; epsrel[i] != 0.0; i++) { printf ("%12.0e ", epsrel[i]); } printf ("\n"); for (i = 0; steppers[i] != 0; i++) { printf ("%8s nfe/nje: ", steppers[i]->name); for (j = 0; epsrel[j] != 0; j++) { printf ("%9d %9d | ", nnfe[j + i * MAXNT], nnje[j + i * MAXNT]); } printf ("\n"); } printf ("\n"); } } void test_evolve_temp (const gsl_odeiv2_step_type * T, double h, double err) { /* Temporary test */ double y[3]; double yfin[3]; y[0] = 1.0; y[1] = 0.0; y[2] = 0.0; yfin[0] = 0; yfin[1] = 0; yfin[2] = 0; test_evolve_system (T, &rhs_func_stiff, 0.0, 1.0, h, y, yfin, err, "temp"); } /**********************************************************/ /* Main function */ /**********************************************************/ int main (void) { /* Benchmark routine to compare stepper performance */ /* benchmark_precision(); return 0; */ /* Test single problem, for debugging purposes */ /* test_evolve_temp (gsl_odeiv2_step_msadams, 1e-3, 1e-8); return 0; */ int i; struct ptype { const gsl_odeiv2_step_type *type; double h; } p[MAXNS]; struct ptype explicit_stepper[MAXNS]; p[0].type = gsl_odeiv2_step_rk4; p[0].h = 1.0e-3; p[1].type = gsl_odeiv2_step_rk2; p[1].h = 1.0e-3; p[2].type = gsl_odeiv2_step_rkf45; p[2].h = 1.0e-3; p[3].type = gsl_odeiv2_step_rkck; p[3].h = 1.0e-3; p[4].type = gsl_odeiv2_step_rk8pd; p[4].h = 1.0e-3; p[5].type = gsl_odeiv2_step_rk1imp; p[5].h = 1.0e-3; p[6].type = gsl_odeiv2_step_rk2imp; p[6].h = 1.0e-3; p[7].type = gsl_odeiv2_step_rk4imp; p[7].h = 1.0e-3; p[8].type = gsl_odeiv2_step_bsimp; p[8].h = 1.0e-3; p[9].type = gsl_odeiv2_step_msadams; p[9].h = 1.0e-3; p[10].type = gsl_odeiv2_step_msbdf; p[10].h = 1.0e-3; p[11].type = 0; gsl_ieee_env_setup (); /* Basic tests for all steppers */ for (i = 0; p[i].type != 0; i++) { test_stepper (p[i].type); test_evolve_linear (p[i].type, p[i].h, 1e-10); test_evolve_exp (p[i].type, p[i].h, 1e-5); test_evolve_sin (p[i].type, p[i].h, 1e-8); test_evolve_xsin (p[i].type, p[i].h, 1e-8); test_evolve_xsin (p[i].type, 0.1, 1e-8); test_evolve_stiff1 (p[i].type, p[i].h, 1e-7); test_evolve_stiff5 (p[i].type, p[i].h, 1e-7); test_evolve_negative_h (p[i].type, p[i].h, 1e-7); test_broken (p[i].type, p[i].h, 1e-8); test_stepsize_fail (p[i].type, p[i].h); test_user_break (p[i].type, p[i].h); test_driver (p[i].type); } /* Derivative test for explicit steppers */ explicit_stepper[0].type = gsl_odeiv2_step_rk4; explicit_stepper[0].h = 1.0e-3; explicit_stepper[1].type = gsl_odeiv2_step_rk2; explicit_stepper[1].h = 1.0e-3; explicit_stepper[2].type = gsl_odeiv2_step_rkf45; explicit_stepper[2].h = 1.0e-3; explicit_stepper[3].type = gsl_odeiv2_step_rkck; explicit_stepper[3].h = 1.0e-3; explicit_stepper[4].type = gsl_odeiv2_step_rk8pd; explicit_stepper[4].h = 1.0e-3; explicit_stepper[5].type = gsl_odeiv2_step_msadams; explicit_stepper[5].h = 1.0e-3; explicit_stepper[6].type = 0; for (i = 0; explicit_stepper[i].type != 0; i++) { test_stepfn (explicit_stepper[i].type); test_stepfn2 (explicit_stepper[i].type); } /* Special tests */ test_nonstiff_problems (); test_stiff_problems (); test_extreme_problems (); exit (gsl_test_summary ()); } gsl/ode-initval2/control.c0000664000175000017500000000553014057135461014051 0ustar eddedd/* ode-initval/control.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include gsl_odeiv2_control * gsl_odeiv2_control_alloc (const gsl_odeiv2_control_type * T) { gsl_odeiv2_control *c = (gsl_odeiv2_control *) malloc (sizeof (gsl_odeiv2_control)); if (c == 0) { GSL_ERROR_NULL ("failed to allocate space for control struct", GSL_ENOMEM); }; c->type = T; c->state = c->type->alloc (); if (c->state == 0) { free (c); /* exception in constructor, avoid memory leak */ GSL_ERROR_NULL ("failed to allocate space for control state", GSL_ENOMEM); }; return c; } int gsl_odeiv2_control_init (gsl_odeiv2_control * c, double eps_abs, double eps_rel, double a_y, double a_dydt) { return c->type->init (c->state, eps_abs, eps_rel, a_y, a_dydt); } void gsl_odeiv2_control_free (gsl_odeiv2_control * c) { RETURN_IF_NULL (c); c->type->free (c->state); free (c); } const char * gsl_odeiv2_control_name (const gsl_odeiv2_control * c) { return c->type->name; } int gsl_odeiv2_control_hadjust (gsl_odeiv2_control * c, gsl_odeiv2_step * s, const double y[], const double yerr[], const double dydt[], double *h) { return c->type->hadjust (c->state, s->dimension, s->type->order (s->state), y, yerr, dydt, h); } int gsl_odeiv2_control_errlevel (gsl_odeiv2_control * c, const double y, const double dydt, const double h, const size_t ind, double *errlev) { return c->type->errlevel (c->state, y, dydt, h, ind, errlev); } int gsl_odeiv2_control_set_driver (gsl_odeiv2_control * c, const gsl_odeiv2_driver * d) { if (d != NULL) { c->type->set_driver (c->state, d); } else { GSL_ERROR ("driver pointer is null", GSL_EFAULT); } return GSL_SUCCESS; } gsl/ode-initval2/cscal.c0000664000175000017500000001262114057135461013455 0ustar eddedd/* ode-initval2/cscal.c * * Copyright (C) 2002, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include "control_utils.c" typedef struct { double eps_abs; double eps_rel; double a_y; double a_dydt; double *scale_abs; } sc_control_state_t; static void * sc_control_alloc (void) { sc_control_state_t *s = (sc_control_state_t *) malloc (sizeof (sc_control_state_t)); if (s == 0) { GSL_ERROR_NULL ("failed to allocate space for sc_control_state", GSL_ENOMEM); } return s; } static int sc_control_init (void *vstate, double eps_abs, double eps_rel, double a_y, double a_dydt) { sc_control_state_t *s = (sc_control_state_t *) vstate; if (eps_abs < 0) { GSL_ERROR ("eps_abs is negative", GSL_EINVAL); } else if (eps_rel < 0) { GSL_ERROR ("eps_rel is negative", GSL_EINVAL); } else if (a_y < 0) { GSL_ERROR ("a_y is negative", GSL_EINVAL); } else if (a_dydt < 0) { GSL_ERROR ("a_dydt is negative", GSL_EINVAL); } s->eps_rel = eps_rel; s->eps_abs = eps_abs; s->a_y = a_y; s->a_dydt = a_dydt; return GSL_SUCCESS; } static int sc_control_hadjust (void *vstate, size_t dim, unsigned int ord, const double y[], const double yerr[], const double yp[], double *h) { sc_control_state_t *state = (sc_control_state_t *) vstate; const double eps_abs = state->eps_abs; const double eps_rel = state->eps_rel; const double a_y = state->a_y; const double a_dydt = state->a_dydt; const double *scale_abs = state->scale_abs; const double S = 0.9; const double h_old = *h; double rmax = DBL_MIN; size_t i; for (i = 0; i < dim; i++) { const double D0 = eps_rel * (a_y * fabs (y[i]) + a_dydt * fabs (h_old * yp[i])) + eps_abs * scale_abs[i]; const double r = fabs (yerr[i]) / fabs (D0); rmax = GSL_MAX_DBL (r, rmax); } if (rmax > 1.1) { /* decrease step, no more than factor of 5, but a fraction S more than scaling suggests (for better accuracy) */ double r = S / pow (rmax, 1.0 / ord); if (r < 0.2) r = 0.2; *h = r * h_old; return GSL_ODEIV_HADJ_DEC; } else if (rmax < 0.5) { /* increase step, no more than factor of maxscale */ double r = S / pow (rmax, 1.0 / (ord + 1.0)); const double maxscale = 4.9; if (r > maxscale) r = maxscale; if (r < 1.0) /* don't allow any decrease caused by S<1 */ r = 1.0; *h = r * h_old; return GSL_ODEIV_HADJ_INC; } else { /* no change */ return GSL_ODEIV_HADJ_NIL; } } static int sc_control_errlevel (void *vstate, const double y, const double dydt, const double h, const size_t ind, double *errlev) { sc_control_state_t *state = (sc_control_state_t *) vstate; const double eps_abs = state->eps_abs; const double eps_rel = state->eps_rel; const double a_y = state->a_y; const double a_dydt = state->a_dydt; const double *scale_abs = state->scale_abs; *errlev = eps_rel * (a_y * fabs (y) + a_dydt * fabs (h * dydt)) + eps_abs * scale_abs[ind]; if (*errlev <= 0.0) { GSL_ERROR ("errlev <= zero", GSL_ESANITY); } return GSL_SUCCESS; } static void sc_control_free (void *vstate) { sc_control_state_t *state = (sc_control_state_t *) vstate; free (state->scale_abs); free (state); } static const gsl_odeiv2_control_type sc_control_type = { "scaled", /* name */ &sc_control_alloc, &sc_control_init, &sc_control_hadjust, &sc_control_errlevel, &control_set_driver_null, &sc_control_free }; const gsl_odeiv2_control_type *gsl_odeiv2_control_scaled = &sc_control_type; gsl_odeiv2_control * gsl_odeiv2_control_scaled_new (double eps_abs, double eps_rel, double a_y, double a_dydt, const double scale_abs[], size_t dim) { gsl_odeiv2_control *c = gsl_odeiv2_control_alloc (gsl_odeiv2_control_scaled); int status = gsl_odeiv2_control_init (c, eps_abs, eps_rel, a_y, a_dydt); if (status != GSL_SUCCESS) { gsl_odeiv2_control_free (c); GSL_ERROR_NULL ("error trying to initialize control", status); } { sc_control_state_t *s = (sc_control_state_t *) c->state; s->scale_abs = (double *) malloc (dim * sizeof (double)); if (s->scale_abs == 0) { free (s); GSL_ERROR_NULL ("failed to allocate space for scale_abs", GSL_ENOMEM); } memcpy (s->scale_abs, scale_abs, dim * sizeof (double)); } return c; } gsl/ode-initval2/rk4.c0000644000175000017500000001662213536674414013102 0ustar eddedd/* ode-initval/rk4.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Runge-Kutta 4th order, Classical */ /* Author: G. Jungman */ /* Reference: Abramowitz & Stegun, section 25.5. equation 25.5.10 Error estimation by step doubling, see eg. Ascher, U.M., Petzold, L.R., Computer methods for ordinary differential and differential-algebraic equations, SIAM, Philadelphia, 1998. */ #include #include #include #include #include #include "odeiv_util.h" #include "step_utils.c" typedef struct { double *k; double *k1; double *y0; double *ytmp; double *y_onestep; } rk4_state_t; static void * rk4_alloc (size_t dim) { rk4_state_t *state = (rk4_state_t *) malloc (sizeof (rk4_state_t)); if (state == 0) { GSL_ERROR_NULL ("failed to allocate space for rk4_state", GSL_ENOMEM); } state->k = (double *) malloc (dim * sizeof (double)); if (state->k == 0) { free (state); GSL_ERROR_NULL ("failed to allocate space for k", GSL_ENOMEM); } state->k1 = (double *) malloc (dim * sizeof (double)); if (state->k1 == 0) { free (state->k); free (state); GSL_ERROR_NULL ("failed to allocate space for k1", GSL_ENOMEM); } state->y0 = (double *) malloc (dim * sizeof (double)); if (state->y0 == 0) { free (state->k); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for y0", GSL_ENOMEM); } state->ytmp = (double *) malloc (dim * sizeof (double)); if (state->ytmp == 0) { free (state->y0); free (state->k); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for ytmp", GSL_ENOMEM); } state->y_onestep = (double *) malloc (dim * sizeof (double)); if (state->y_onestep == 0) { free (state->ytmp); free (state->y0); free (state->k); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for ytmp", GSL_ENOMEM); } return state; } static int rk4_step (double *y, const rk4_state_t * state, const double h, const double t, const size_t dim, const gsl_odeiv2_system * sys) { /* Makes a Runge-Kutta 4th order advance with step size h. */ /* initial values of variables y. */ const double *y0 = state->y0; /* work space */ double *ytmp = state->ytmp; /* Runge-Kutta coefficients. Contains values of coefficient k1 in the beginning */ double *k = state->k; size_t i; /* k1 step */ for (i = 0; i < dim; i++) { y[i] += h / 6.0 * k[i]; ytmp[i] = y0[i] + 0.5 * h * k[i]; } /* k2 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + 0.5 * h, ytmp, k); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) { y[i] += h / 3.0 * k[i]; ytmp[i] = y0[i] + 0.5 * h * k[i]; } /* k3 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + 0.5 * h, ytmp, k); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) { y[i] += h / 3.0 * k[i]; ytmp[i] = y0[i] + h * k[i]; } /* k4 step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + h, ytmp, k); if (s != GSL_SUCCESS) { return s; } } for (i = 0; i < dim; i++) { y[i] += h / 6.0 * k[i]; } return GSL_SUCCESS; } static int rk4_apply (void *vstate, size_t dim, double t, double h, double y[], double yerr[], const double dydt_in[], double dydt_out[], const gsl_odeiv2_system * sys) { rk4_state_t *state = (rk4_state_t *) vstate; size_t i; double *const k = state->k; double *const k1 = state->k1; double *const y0 = state->y0; double *const y_onestep = state->y_onestep; DBL_MEMCPY (y0, y, dim); if (dydt_in != NULL) { DBL_MEMCPY (k, dydt_in, dim); } else { int s = GSL_ODEIV_FN_EVAL (sys, t, y0, k); if (s != GSL_SUCCESS) { return s; } } /* Error estimation is done by step doubling procedure */ /* Save first point derivatives */ DBL_MEMCPY (k1, k, dim); /* First traverse h with one step (save to y_onestep) */ DBL_MEMCPY (y_onestep, y, dim); { int s = rk4_step (y_onestep, state, h, t, dim, sys); if (s != GSL_SUCCESS) { return s; } } /* Then with two steps with half step length (save to y) */ DBL_MEMCPY (k, k1, dim); { int s = rk4_step (y, state, h / 2.0, t, dim, sys); if (s != GSL_SUCCESS) { /* Restore original values */ DBL_MEMCPY (y, y0, dim); return s; } } /* Update before second step */ { int s = GSL_ODEIV_FN_EVAL (sys, t + h / 2.0, y, k); if (s != GSL_SUCCESS) { /* Restore original values */ DBL_MEMCPY (y, y0, dim); return s; } } /* Save original y0 to k1 for possible failures */ DBL_MEMCPY (k1, y0, dim); /* Update y0 for second step */ DBL_MEMCPY (y0, y, dim); { int s = rk4_step (y, state, h / 2.0, t + h / 2.0, dim, sys); if (s != GSL_SUCCESS) { /* Restore original values */ DBL_MEMCPY (y, k1, dim); return s; } } /* Derivatives at output */ if (dydt_out != NULL) { int s = GSL_ODEIV_FN_EVAL (sys, t + h, y, dydt_out); if (s != GSL_SUCCESS) { /* Restore original values */ DBL_MEMCPY (y, k1, dim); return s; } } /* Error estimation */ for (i = 0; i < dim; i++) { yerr[i] = ODEIV_ERR_SAFETY * 0.5 * (y[i] - y_onestep[i]) / 15.0; } return GSL_SUCCESS; } static int rk4_reset (void *vstate, size_t dim) { rk4_state_t *state = (rk4_state_t *) vstate; DBL_ZERO_MEMSET (state->k, dim); DBL_ZERO_MEMSET (state->k1, dim); DBL_ZERO_MEMSET (state->y0, dim); DBL_ZERO_MEMSET (state->ytmp, dim); DBL_ZERO_MEMSET (state->y_onestep, dim); return GSL_SUCCESS; } static unsigned int rk4_order (void *vstate) { rk4_state_t *state = (rk4_state_t *) vstate; state = 0; /* prevent warnings about unused parameters */ return 4; } static void rk4_free (void *vstate) { rk4_state_t *state = (rk4_state_t *) vstate; free (state->k); free (state->k1); free (state->y0); free (state->ytmp); free (state->y_onestep); free (state); } static const gsl_odeiv2_step_type rk4_type = { "rk4", /* name */ 1, /* can use dydt_in */ 1, /* gives exact dydt_out */ &rk4_alloc, &rk4_apply, &stepper_set_driver_null, &rk4_reset, &rk4_order, &rk4_free }; const gsl_odeiv2_step_type *gsl_odeiv2_step_rk4 = &rk4_type; gsl/ode-initval2/msbdf.c0000664000175000017500000013103714057135461013466 0ustar eddedd/* ode-initval2/msbdf.c * * Copyright (C) 2009, 2010 Tuomo Keskitalo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* A variable-coefficient linear multistep backward differentiation formula (BDF) method in Nordsieck form. This stepper uses the explicit BDF formula as predictor and implicit BDF formula as corrector. A modified Newton iteration method is used to solve the system of non-linear equations. Method order varies dynamically between 1 and 5. References: Byrne, G. D., and Hindmarsh, A. C., A Polyalgorithm for the Numerical Solution of Ordinary Differential Equations, ACM Trans. Math. Software, 1 (1975), pp. 71-96. Brown, P. N., Byrne, G. D., and Hindmarsh, A. C., VODE: A Variable-coefficient ODE Solver, SIAM J. Sci. Stat. Comput. 10, (1989), pp. 1038-1051. Hindmarsh, A. C., Brown, P. N., Grant, K. E., Lee, S. L., Serban, R., Shumaker, D. E., and Woodward, C. S., SUNDIALS: Suite of Nonlinear and Differential/Algebraic Equation Solvers, ACM Trans. Math. Software 31 (2005), pp. 363-396. Note: The algorithms have been adapted for GSL ode-initval2 framework. */ #include #include #include #include #include #include #include #include #include "odeiv_util.h" /* Maximum order of BDF methods */ #define MSBDF_MAX_ORD 5 /* Steps until Jacobian evaluation is forced */ #define MSBDF_JAC_WAIT 50 /* Steps until iteration matrix M evaluation is forced */ #define MSBDF_M_WAIT 20 typedef struct { /* Nordsieck history matrix. Includes concatenated Nordsieck vectors [y_n, h*y_n', (h^2/2!)*y_n'', ..., (h^ord/ord!)*d^(ord)(y_n)]. Nordsieck vector number i is located at z[i*dim] (i=0..ord). */ double *z; double *zbackup; /* backup of Nordsieck matrix */ double *ytmp; /* work area */ double *ytmp2; /* work area */ double *l; /* polynomial coefficients */ double *hprev; /* previous step sizes */ double *hprevbackup; /* backup of hprev */ size_t *ordprev; /* orders of previous calls */ size_t *ordprevbackup; /* backup of ordprev */ double *errlev; /* desired error level of y */ gsl_vector *abscor; /* absolute y values for correction */ gsl_vector *abscorscaled; /* scaled abscor for order evaluation */ gsl_vector *relcor; /* relative y values for correction */ gsl_vector *svec; /* saved abscor & work area */ gsl_vector *tempvec; /* work area */ const gsl_odeiv2_driver *driver; /* pointer to gsl_odeiv2_driver object */ gsl_matrix *dfdy; /* Jacobian */ double *dfdt; /* storage for time derivative of f */ gsl_matrix *M; /* Newton iteration matrix */ gsl_permutation *p; /* permutation for LU decomposition of M */ gsl_vector *rhs; /* right hand side equations (-G) */ long int ni; /* stepper call counter */ size_t ord; /* current order of method */ double tprev; /* t point of previous call */ size_t ordwait; /* counter for order change */ size_t ordwaitbackup; /* backup of ordwait */ size_t failord; /* order of convergence failure */ double failt; /* t point of convergence failure */ double ordp1coeffprev; /* saved order coefficient */ size_t nJ; /* step counter for Jacobian evaluation */ size_t nM; /* step counter for update of M */ double gammaprev; /* gamma of previous call */ double gammaprevbackup; /* backup of gammaprev */ size_t failcount; /* counter for rejected steps */ } msbdf_state_t; /* Introduce msbdf_reset for use in msbdf_alloc and _apply */ static int msbdf_reset (void *, size_t); static void * msbdf_alloc (size_t dim) { msbdf_state_t *state = (msbdf_state_t *) malloc (sizeof (msbdf_state_t)); if (state == 0) { GSL_ERROR_NULL ("failed to allocate space for msbdf_state", GSL_ENOMEM); } state->z = (double *) malloc ((MSBDF_MAX_ORD + 1) * dim * sizeof (double)); if (state->z == 0) { free (state); GSL_ERROR_NULL ("failed to allocate space for z", GSL_ENOMEM); } state->zbackup = (double *) malloc ((MSBDF_MAX_ORD + 1) * dim * sizeof (double)); if (state->zbackup == 0) { free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for zbackup", GSL_ENOMEM); } state->ytmp = (double *) malloc (dim * sizeof (double)); if (state->ytmp == 0) { free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for ytmp", GSL_ENOMEM); } state->ytmp2 = (double *) malloc (dim * sizeof (double)); if (state->ytmp2 == 0) { free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for ytmp2", GSL_ENOMEM); } state->l = (double *) malloc ((MSBDF_MAX_ORD + 1) * sizeof (double)); if (state->l == 0) { free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for l", GSL_ENOMEM); } state->hprev = (double *) malloc (MSBDF_MAX_ORD * sizeof (double)); if (state->hprev == 0) { free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for hprev", GSL_ENOMEM); } state->hprevbackup = (double *) malloc (MSBDF_MAX_ORD * sizeof (double)); if (state->hprevbackup == 0) { free (state->hprev); free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for hprevbackup", GSL_ENOMEM); } state->ordprev = (size_t *) malloc (MSBDF_MAX_ORD * sizeof (size_t)); if (state->ordprev == 0) { free (state->hprevbackup); free (state->hprev); free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for ordprev", GSL_ENOMEM); } state->ordprevbackup = (size_t *) malloc (MSBDF_MAX_ORD * sizeof (size_t)); if (state->ordprevbackup == 0) { free (state->ordprev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for ordprevbackup", GSL_ENOMEM); } state->errlev = (double *) malloc (dim * sizeof (double)); if (state->errlev == 0) { free (state->ordprevbackup); free (state->ordprev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for errlev", GSL_ENOMEM); } state->abscor = gsl_vector_alloc (dim); if (state->abscor == 0) { free (state->errlev); free (state->ordprevbackup); free (state->ordprev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for abscor", GSL_ENOMEM); } state->relcor = gsl_vector_alloc (dim); if (state->relcor == 0) { gsl_vector_free (state->abscor); free (state->errlev); free (state->ordprevbackup); free (state->ordprev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for relcor", GSL_ENOMEM); } state->svec = gsl_vector_alloc (dim); if (state->svec == 0) { gsl_vector_free (state->relcor); gsl_vector_free (state->abscor); free (state->errlev); free (state->ordprevbackup); free (state->ordprev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for svec", GSL_ENOMEM); } state->tempvec = gsl_vector_alloc (dim); if (state->tempvec == 0) { gsl_vector_free (state->svec); gsl_vector_free (state->relcor); gsl_vector_free (state->abscor); free (state->errlev); free (state->ordprevbackup); free (state->ordprev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for tempvec", GSL_ENOMEM); } state->dfdy = gsl_matrix_alloc (dim, dim); if (state->dfdy == 0) { gsl_vector_free (state->tempvec); gsl_vector_free (state->svec); gsl_vector_free (state->relcor); gsl_vector_free (state->abscor); free (state->errlev); free (state->ordprevbackup); free (state->ordprev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for dfdy", GSL_ENOMEM); } state->dfdt = (double *) malloc (dim * sizeof (double)); if (state->dfdt == 0) { gsl_matrix_free (state->dfdy); gsl_vector_free (state->tempvec); gsl_vector_free (state->svec); gsl_vector_free (state->relcor); gsl_vector_free (state->abscor); free (state->errlev); free (state->ordprevbackup); free (state->ordprev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for dfdt", GSL_ENOMEM); } state->M = gsl_matrix_alloc (dim, dim); if (state->M == 0) { free (state->dfdt); gsl_matrix_free (state->dfdy); gsl_vector_free (state->tempvec); gsl_vector_free (state->svec); gsl_vector_free (state->relcor); gsl_vector_free (state->abscor); free (state->errlev); free (state->ordprevbackup); free (state->ordprev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for M", GSL_ENOMEM); } state->p = gsl_permutation_alloc (dim); if (state->p == 0) { gsl_matrix_free (state->M); free (state->dfdt); gsl_matrix_free (state->dfdy); gsl_vector_free (state->tempvec); gsl_vector_free (state->svec); gsl_vector_free (state->relcor); gsl_vector_free (state->abscor); free (state->errlev); free (state->ordprevbackup); free (state->ordprev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for p", GSL_ENOMEM); } state->rhs = gsl_vector_alloc (dim); if (state->rhs == 0) { gsl_permutation_free (state->p); gsl_matrix_free (state->M); free (state->dfdt); gsl_matrix_free (state->dfdy); gsl_vector_free (state->tempvec); gsl_vector_free (state->svec); gsl_vector_free (state->relcor); gsl_vector_free (state->abscor); free (state->errlev); free (state->ordprevbackup); free (state->ordprev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for rhs", GSL_ENOMEM); } state->abscorscaled = gsl_vector_alloc (dim); if (state->abscorscaled == 0) { gsl_vector_free (state->rhs); gsl_permutation_free (state->p); gsl_matrix_free (state->M); free (state->dfdt); gsl_matrix_free (state->dfdy); gsl_vector_free (state->tempvec); gsl_vector_free (state->svec); gsl_vector_free (state->relcor); gsl_vector_free (state->abscor); free (state->errlev); free (state->ordprevbackup); free (state->ordprev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); GSL_ERROR_NULL ("failed to allocate space for abscorscaled", GSL_ENOMEM); } msbdf_reset ((void *) state, dim); state->driver = NULL; return state; } static int msbdf_failurehandler (void *vstate, const size_t dim, const double t) { /* Internal failure handler routine for msbdf. Adjusted strategy for GSL: Decrease order if this is the second time a failure has occurred at this order and point. */ msbdf_state_t *state = (msbdf_state_t *) vstate; const size_t ord = state->ord; if (ord > 1 && (ord - state->ordprev[0] == 0) && ord == state->failord && t == state->failt) { state->ord--; } /* Save information about failure */ state->failord = ord; state->failt = t; state->ni++; /* Force reinitialization if failure took place at lowest order */ if (ord == 1) { msbdf_reset (vstate, dim); } return GSL_SUCCESS; } static int msbdf_calccoeffs (const size_t ord, const size_t ordwait, const double h, const double hprev[], double l[], double *errcoeff, double *ordm1coeff, double *ordp1coeff, double *ordp2coeff, double *gamma) { /* Calculates coefficients (l) of polynomial Lambda, error and auxiliary order change evaluation coefficients. */ if (ord == 1) { l[0] = 1.0; l[1] = 1.0; *errcoeff = 0.5; *ordp1coeff = 2.0; { const double hsum = h + hprev[0]; const double a5 = -1.5; const double a6 = -1.0 - h / hsum; const double c2 = 2.0 / (1.0 - a6 + a5); *ordp2coeff = fabs (c2 * (h / hsum) * 3.0 * a5); } } else { size_t i, j; double hsum = h; double coeff1 = -1.0; double x; /* Calculate the actual polynomial coefficients (l) */ DBL_ZERO_MEMSET (l, MSBDF_MAX_ORD + 1); l[0] = 1.0; l[1] = 1.0; for (i = 2; i < ord; i++) { hsum += hprev[i - 2]; coeff1 += -1.0 / i; for (j = i; j > 0; j--) { l[j] += h / hsum * l[j - 1]; } } coeff1 += -1.0 / ord; x = -l[1] - coeff1; for (i = ord; i > 0; i--) { l[i] += l[i - 1] * x; } #ifdef DEBUG { size_t di; printf ("-- calccoeffs l: "); for (di = 0; di < ord + 1; di++) { printf ("%.5e ", l[di]); } printf ("\n"); } #endif hsum += hprev[ord - 2]; { const double coeff2 = -l[1] - h / hsum; const double a1 = 1.0 - coeff2 + coeff1; const double a2 = 1.0 + ord * a1; /* Calculate error coefficient */ *errcoeff = fabs (a1 / (coeff1 * a2)); /* Calculate auxiliary coefficients used in evaluation of change of order */ if (ordwait < 2) { const double a3 = coeff1 + 1.0 / ord; const double a4 = coeff2 + h / hsum; const double c1 = a3 / (1.0 - a4 + a3); *ordm1coeff = fabs (c1 / (x / l[ord])); *ordp1coeff = fabs (a2 / (l[ord] * (h / hsum) / x)); hsum += hprev[ord - 1]; { const double a5 = coeff1 - 1.0 / (ord + 1.0); const double a6 = coeff2 - h / hsum; const double c2 = a2 / (1.0 - a6 + a5); *ordp2coeff = fabs (c2 * (h / hsum) * (ord + 2) * a5); } } } } *gamma = h / l[1]; #ifdef DEBUG printf ("-- calccoeffs ordm1coeff=%.5e ", *ordm1coeff); printf ("ordp1coeff=%.5e ", *ordp1coeff); printf ("ordp2coeff=%.5e ", *ordp2coeff); printf ("errcoeff=%.5e\n", *errcoeff); #endif return GSL_SUCCESS; } static int msbdf_update (void *vstate, const size_t dim, gsl_matrix * dfdy, double *dfdt, const double t, const double *y, const gsl_odeiv2_system * sys, gsl_matrix * M, gsl_permutation * p, const size_t iter, size_t * nJ, size_t * nM, const double tprev, const double failt, const double gamma, const double gammaprev, const double hratio) { /* Evaluates Jacobian dfdy and updates iteration matrix M if criteria for update is met. */ /* Jacobian is evaluated - at first step - if MSBDF_JAC_WAIT steps have been made without re-evaluation - in case of a convergence failure if --- change in gamma is small, or --- convergence failure resulted in step size decrease */ const double c = 0.2; const double gammarel = fabs (gamma / gammaprev - 1.0); if (*nJ == 0 || *nJ > MSBDF_JAC_WAIT || (t == failt && (gammarel < c || hratio < 1.0))) { #ifdef DEBUG printf ("-- evaluate jacobian\n"); #endif int s = GSL_ODEIV_JA_EVAL (sys, t, y, dfdy->data, dfdt); if (s == GSL_EBADFUNC) { return s; } if (s != GSL_SUCCESS) { msbdf_failurehandler (vstate, dim, t); #ifdef DEBUG printf ("-- FAIL at jacobian function evaluation\n"); #endif return s; } /* Reset counter */ *nJ = 0; } /* Iteration matrix M (and it's LU decomposition) is generated - at first step - if MSBDF_M_WAIT steps have been made without an update - if change in gamma is significant (e.g. change in step size) - if previous step was rejected */ if (*nM == 0 || *nM > MSBDF_M_WAIT || gammarel >= c || t == tprev || t == failt) { #ifdef DEBUG printf ("-- update M, gamma=%.5e\n", gamma); #endif size_t i; gsl_matrix_memcpy (M, dfdy); gsl_matrix_scale (M, -gamma); for (i = 0; i < dim; i++) { gsl_matrix_set (M, i, i, gsl_matrix_get (M, i, i) + 1.0); } { int signum; int s = gsl_linalg_LU_decomp (M, p, &signum); if (s != GSL_SUCCESS) { return GSL_FAILURE; } } /* Reset counter */ *nM = 0; } return GSL_SUCCESS; } static int msbdf_corrector (void *vstate, const gsl_odeiv2_system * sys, const double t, const double h, const size_t dim, const double z[], const double errlev[], const double l[], const double errcoeff, gsl_vector * abscor, gsl_vector * relcor, double ytmp[], double ytmp2[], gsl_matrix * dfdy, double dfdt[], gsl_matrix * M, gsl_permutation * p, gsl_vector * rhs, size_t * nJ, size_t * nM, const double tprev, const double failt, const double gamma, const double gammaprev, const double hprev0) { /* Calculates the correction step (abscor). Equation system M = I - gamma * dfdy = -G is solved by Newton iteration. */ size_t mi, i; const size_t max_iter = 3; /* Maximum number of iterations */ double convrate = 1.0; /* convergence rate */ double stepnorm = 0.0; /* norm of correction step */ double stepnormprev = 0.0; /* previous norm value */ /* Evaluate at predicted values */ { int s = GSL_ODEIV_FN_EVAL (sys, t + h, z, ytmp); if (s == GSL_EBADFUNC) { return s; } if (s != GSL_SUCCESS) { msbdf_failurehandler (vstate, dim, t); #ifdef DEBUG printf ("-- FAIL at user function evaluation\n"); #endif return s; } } /* Calculate correction step (abscor) */ gsl_vector_set_zero (abscor); for (mi = 0; mi < max_iter; mi++) { const double safety = 0.3; const double safety2 = 0.1; /* Generate or update Jacobian and/or iteration matrix M if needed */ if (mi == 0) { int s = msbdf_update (vstate, dim, dfdy, dfdt, t + h, z, sys, M, p, mi, nJ, nM, tprev, failt, gamma, gammaprev, h / hprev0); if (s != GSL_SUCCESS) { return s; } } /* Evaluate the right hand side (-G) */ for (i = 0; i < dim; i++) { const double r = -1.0 * gsl_vector_get (abscor, i) - z[1 * dim + i] / l[1] + gamma * ytmp[i]; gsl_vector_set (rhs, i, r); } /* Solve system of equations */ { int s = gsl_linalg_LU_solve (M, p, rhs, relcor); if (s != GSL_SUCCESS) { msbdf_failurehandler (vstate, dim, t); #ifdef DEBUG printf ("-- FAIL at LU_solve\n"); #endif return GSL_FAILURE; } } #ifdef DEBUG { size_t di; printf ("-- dstep: "); for (di = 0; di < dim; di++) { printf ("%.5e ", gsl_vector_get (relcor, di)); } printf ("\n"); } #endif /* Add iteration results */ for (i = 0; i < dim; i++) { const double r = gsl_vector_get (abscor, i) + gsl_vector_get (relcor, i); gsl_vector_set (abscor, i, r); ytmp2[i] = z[i] + r; gsl_vector_set (relcor, i, gsl_vector_get (relcor, i) / errlev[i]); } #ifdef DEBUG { size_t di; printf ("-- abscor: "); for (di = 0; di < dim; di++) { printf ("%.5e ", gsl_vector_get (abscor, di)); } printf ("\n"); } #endif /* Convergence test. Norms used are root-mean-square norms. */ stepnorm = gsl_blas_dnrm2 (relcor) / sqrt (dim); if (mi > 0) { convrate = GSL_MAX_DBL (safety * convrate, stepnorm / stepnormprev); } else { convrate = 1.0; } { const double convtest = GSL_MIN_DBL (convrate, 1.0) * stepnorm * errcoeff / safety2; #ifdef DEBUG printf ("-- newt iter loop %d, errcoeff=%.5e, stepnorm =%.5e, convrate = %.5e, convtest = %.5e\n", (int) mi, errcoeff, stepnorm, convrate, convtest); #endif if (convtest <= 1.0) { break; } } /* Check for divergence during iteration */ { const double div_const = 2.0; if (mi > 1 && stepnorm > div_const * stepnormprev) { msbdf_failurehandler (vstate, dim, t); #ifdef DEBUG printf ("-- FAIL, diverging Newton iteration\n"); #endif return GSL_FAILURE; } } /* Evaluate at new y */ { int s = GSL_ODEIV_FN_EVAL (sys, t + h, ytmp2, ytmp); if (s == GSL_EBADFUNC) { return s; } if (s != GSL_SUCCESS) { msbdf_failurehandler (vstate, dim, t); #ifdef DEBUG printf ("-- FAIL at user function evaluation\n"); #endif return s; } } stepnormprev = stepnorm; } #ifdef DEBUG printf ("-- Newton iteration exit at mi=%d\n", (int) mi); #endif /* Handle convergence failure */ if (mi == max_iter) { msbdf_failurehandler (vstate, dim, t); #ifdef DEBUG printf ("-- FAIL, max_iter reached\n"); #endif return GSL_FAILURE; } return GSL_SUCCESS; } static int msbdf_eval_order (gsl_vector * abscorscaled, gsl_vector * tempvec, gsl_vector * svec, const double errcoeff, const size_t dim, const double errlev[], const double ordm1coeff, const double ordp1coeff, const double ordp1coeffprev, const double ordp2coeff, const double hprev[], const double h, const double z[], size_t * ord) { /* Evaluates and executes change in method order (current, current-1 or current+1). Order which maximizes the step length is selected. */ size_t i; /* step size estimates at current order, order-1 and order+1 */ double ordest = 0.0; double ordm1est = 0.0; double ordp1est = 0.0; const double safety = 1e-6; const double bias = 6.0; const double bias2 = 10.0; const double min_incr = 1.5; /* Relative step length estimate for current order */ ordest = 1.0 / (pow (bias * gsl_blas_dnrm2 (abscorscaled) / sqrt (dim) * errcoeff, 1.0 / (*ord + 1)) + safety); /* Relative step length estimate for order ord - 1 */ if (*ord > 1) { for (i = 0; i < dim; i++) { gsl_vector_set (tempvec, i, z[*ord * dim + i] / errlev[i]); } ordm1est = 1.0 / (pow (bias * gsl_blas_dnrm2 (tempvec) / sqrt (dim) / ordm1coeff, 1.0 / (*ord)) + safety); } else { ordm1est = 0.0; } /* Relative step length estimate for order ord + 1 */ if (*ord < MSBDF_MAX_ORD) { const double c = -ordp1coeff / ordp1coeffprev * pow (h / hprev[1], *ord + 1); for (i = 0; i < dim; i++) { gsl_vector_set (svec, i, gsl_vector_get (svec, i) * c + gsl_vector_get (abscorscaled, i)); } ordp1est = 1.0 / (pow (bias2 * gsl_blas_dnrm2 (svec) / sqrt (dim) / ordp2coeff, 1.0 / (*ord + 2)) + safety); } else { ordp1est = 0.0; } #ifdef DEBUG printf ("-- eval_order ord=%d, ordest=%.5e, ordm1est=%.5e, ordp1est=%.5e\n", (int) *ord, ordest, ordm1est, ordp1est); #endif /* Choose order that maximises step size and increases step size markedly compared to current step */ if (ordm1est > ordest && ordm1est > ordp1est && ordm1est > min_incr) { *ord -= 1; #ifdef DEBUG printf ("-- eval_order order DECREASED to %d\n", (int) *ord); #endif } else if (ordp1est > ordest && ordp1est > ordm1est && ordp1est > min_incr) { *ord += 1; #ifdef DEBUG printf ("-- eval_order order INCREASED to %d\n", (int) *ord); #endif } return GSL_SUCCESS; } static int msbdf_check_no_order_decrease (size_t const ordprev[]) { /* Checks if order has not been decreased according to order history array. Used in stability enhancement. */ size_t i; for (i = 0; i < MSBDF_MAX_ORD - 1; i++) { if (ordprev[i + 1] > ordprev[i]) { return 0; } } return 1; } static int msbdf_check_step_size_decrease (double const hprev[]) { /* Checks if step size has decreased markedly according to step size history array. Used in stability enhancement. */ size_t i; double max = fabs (hprev[0]); const double min = fabs (hprev[0]); const double decrease_limit = 0.5; for (i = 1; i < MSBDF_MAX_ORD; i++) { const double h = fabs (hprev[i]); if (h > min && h > max) { max = h; } } if (min / max < decrease_limit) { return 1; } return 0; } static int msbdf_apply (void *vstate, size_t dim, double t, double h, double y[], double yerr[], const double dydt_in[], double dydt_out[], const gsl_odeiv2_system * sys) { /* Carries out a step by BDF linear multistep methods. */ msbdf_state_t *state = (msbdf_state_t *) vstate; double *const z = state->z; double *const zbackup = state->zbackup; double *const ytmp = state->ytmp; double *const ytmp2 = state->ytmp2; double *const l = state->l; double *const hprev = state->hprev; double *const hprevbackup = state->hprevbackup; size_t *const ordprev = state->ordprev; size_t *const ordprevbackup = state->ordprevbackup; double *const errlev = state->errlev; gsl_vector *const abscor = state->abscor; gsl_vector *const abscorscaled = state->abscorscaled; gsl_vector *const relcor = state->relcor; gsl_vector *const svec = state->svec; gsl_vector *const tempvec = state->tempvec; size_t ord = state->ord; /* order for this step */ double ordm1coeff = 0.0; double ordp1coeff = 0.0; double ordp2coeff = 0.0; double errcoeff = 0.0; /* error coefficient */ double gamma = 0.0; /* gamma coefficient */ const size_t max_failcount = 3; size_t i; #ifdef DEBUG { size_t di; printf ("msbdf_apply: t=%.5e, ord=%d, h=%.5e, y:", t, (int) ord, h); for (di = 0; di < dim; di++) { printf ("%.5e ", y[di]); } printf ("\n"); } #endif /* Check if t is the same as on previous stepper call (or last failed call). This means that calculation of previous step failed or the step was rejected, and therefore previous state will be restored or the method will be reset. */ if (state->ni > 0 && (t == state->tprev || t == state->failt)) { if (state->ni == 1) { /* No step has been accepted yet, reset method */ msbdf_reset (vstate, dim); #ifdef DEBUG printf ("-- first step was REJECTED, msbdf_reset called\n"); #endif } else { /* A succesful step has been saved, restore previous state. */ /* If previous step suggests order increase, but the step was rejected, then do not increase order. */ if (ord > ordprev[0]) { state->ord = ordprev[0]; ord = state->ord; } /* Restore previous state */ DBL_MEMCPY (z, zbackup, (MSBDF_MAX_ORD + 1) * dim); DBL_MEMCPY (hprev, hprevbackup, MSBDF_MAX_ORD); for (i = 0; i < MSBDF_MAX_ORD; i++) { ordprev[i] = ordprevbackup[i]; } state->ordwait = state->ordwaitbackup; state->gammaprev = state->gammaprevbackup; #ifdef DEBUG printf ("-- previous step was REJECTED, state restored\n"); #endif } /* If step is repeatedly rejected, then reset method */ state->failcount++; if (state->failcount > max_failcount && state->ni > 1) { msbdf_reset (vstate, dim); ord = state->ord; #ifdef DEBUG printf ("-- max_failcount reached, msbdf_reset called\n"); #endif } } else { /* The previous step was accepted. Backup current state. */ DBL_MEMCPY (zbackup, z, (MSBDF_MAX_ORD + 1) * dim); DBL_MEMCPY (hprevbackup, hprev, MSBDF_MAX_ORD); for (i = 0; i < MSBDF_MAX_ORD; i++) { ordprevbackup[i] = ordprev[i]; } state->ordwaitbackup = state->ordwait; state->gammaprevbackup = state->gammaprev; state->failcount = 0; #ifdef DEBUG if (state->ni > 0) { printf ("-- previous step was ACCEPTED, state saved\n"); } #endif } #ifdef DEBUG printf ("-- ord=%d, ni=%ld, ordwait=%d\n", (int) ord, state->ni, (int) state->ordwait); size_t di; printf ("-- ordprev: "); for (di = 0; di < MSBDF_MAX_ORD; di++) { printf ("%d ", (int) ordprev[di]); } printf ("\n"); #endif /* Get desired error levels via gsl_odeiv2_control object through driver object, which is a requirement for this stepper. */ if (state->driver == NULL) { return GSL_EFAULT; } else { size_t i; for (i = 0; i < dim; i++) { if (dydt_in != NULL) { gsl_odeiv2_control_errlevel (state->driver->c, y[i], dydt_in[i], h, i, &errlev[i]); } else { gsl_odeiv2_control_errlevel (state->driver->c, y[i], 0.0, h, i, &errlev[i]); } } } #ifdef DEBUG { size_t di; printf ("-- errlev: "); for (di = 0; di < dim; di++) { printf ("%.5e ", errlev[di]); } printf ("\n"); } #endif /* On first call initialize Nordsieck matrix */ if (state->ni == 0) { size_t i; DBL_ZERO_MEMSET (z, (MSBDF_MAX_ORD + 1) * dim); if (dydt_in != NULL) { DBL_MEMCPY (ytmp, dydt_in, dim); } else { int s = GSL_ODEIV_FN_EVAL (sys, t, y, ytmp); if (s != GSL_SUCCESS) { return s; } } DBL_MEMCPY (&z[0 * dim], y, dim); DBL_MEMCPY (&z[1 * dim], ytmp, dim); for (i = 0; i < dim; i++) { z[1 * dim + i] *= h; } } /* Stability enhancement heuristic for msbdf: If order > 1 and order has not been changed, check for decrease in step size, that is not accompanied by a decrease in method order. This condition may be indication of BDF method stability problems, a change in ODE system, or convergence problems in Newton iteration. In all cases, the strategy is to decrease method order. */ #ifdef DEBUG printf ("-- check_no_order_decrease %d, check_step_size_decrease %d\n", msbdf_check_no_order_decrease (ordprev), msbdf_check_step_size_decrease (hprev)); #endif if (ord > 1 && ord - ordprev[0] == 0 && msbdf_check_no_order_decrease (ordprev) && msbdf_check_step_size_decrease (hprev)) { state->ord--; state->ordwait = ord + 2; ord = state->ord; #ifdef DEBUG printf ("-- stability enhancement decreased order to %d\n", (int) ord); #endif } /* Sanity check */ { const int deltaord = ord - ordprev[0]; if (deltaord > 1 || deltaord < -1) { printf ("-- order change %d\n", deltaord); GSL_ERROR ("msbdf_apply too large order change", GSL_ESANITY); } /* Modify Nordsieck matrix if order or step length has been changed */ /* If order increased by 1, adjust Nordsieck matrix */ if (deltaord == 1) { if (ord > 2) { size_t i, j; double hsum = h; double coeff1 = -1.0; double coeff2 = 1.0; double hrelprev = 1.0; double hrelprod = 1.0; double hrel = 0.0; /* Calculate coefficients used in adjustment to l */ DBL_ZERO_MEMSET (l, MSBDF_MAX_ORD + 1); l[2] = 1.0; for (i = 1; i < ord - 1; i++) { hsum += hprev[i]; hrel = hsum / h; hrelprod *= hrel; coeff1 -= 1.0 / (i + 1); coeff2 += 1.0 / hrel; for (j = i + 2; j > 1; j--) { l[j] *= hrelprev; l[j] += l[j - 1]; } hrelprev = hrel; } /* Scale Nordsieck matrix */ { const double c = (-coeff1 - coeff2) / hrelprod; for (i = 0; i < dim; i++) { z[ord * dim + i] = c * gsl_vector_get (abscor, i); } } for (i = 2; i < ord; i++) for (j = 0; j < dim; j++) { z[i * dim + j] += l[i] * z[ord * dim + j]; } } else { /* zero new vector for order incease from 1 to 2 */ DBL_ZERO_MEMSET (&z[ord * dim], dim); } #ifdef DEBUG printf ("-- order increase detected, Nordsieck modified\n"); #endif } /* If order decreased by 1, adjust Nordsieck matrix */ if (deltaord == -1) { size_t i, j; double hsum = 0.0; /* Calculate coefficients used in adjustment to l */ DBL_ZERO_MEMSET (l, MSBDF_MAX_ORD + 1); l[2] = 1.0; for (i = 1; i < ord; i++) { hsum += hprev[i - 1]; for (j = i + 2; j > 1; j--) { l[j] *= hsum / h; l[j] += l[j - 1]; } } /* Scale Nordsieck matrix */ for (i = 2; i < ord + 1; i++) for (j = 0; j < dim; j++) { z[i * dim + j] += -l[i] * z[(ord + 1) * dim + j]; } #ifdef DEBUG printf ("-- order decrease detected, Nordsieck modified\n"); #endif } /* Scale Nordsieck vectors if step size has been changed */ if (state->ni > 0 && h != hprev[0]) { size_t i, j; const double hrel = h / hprev[0]; double coeff = hrel; for (i = 1; i < ord + 1; i++) { for (j = 0; j < dim; j++) { z[i * dim + j] *= coeff; } coeff *= hrel; } #ifdef DEBUG printf ("-- h != hprev, Nordsieck modified\n"); #endif } /* Calculate polynomial coefficients (l), error coefficient and auxiliary coefficients */ msbdf_calccoeffs (ord, state->ordwait, h, hprev, l, &errcoeff, º1coeff, &ordp1coeff, &ordp2coeff, &gamma); /* Carry out the prediction step */ { size_t i, j, k; for (i = 1; i < ord + 1; i++) for (j = ord; j > i - 1; j--) for (k = 0; k < dim; k++) { z[(j - 1) * dim + k] += z[j * dim + k]; } #ifdef DEBUG { size_t di; printf ("-- predicted y: "); for (di = 0; di < dim; di++) { printf ("%.5e ", z[di]); } printf ("\n"); } #endif } /* Calculate correction step to abscor */ { int s; s = msbdf_corrector (vstate, sys, t, h, dim, z, errlev, l, errcoeff, abscor, relcor, ytmp, ytmp2, state->dfdy, state->dfdt, state->M, state->p, state->rhs, &(state->nJ), &(state->nM), state->tprev, state->failt, gamma, state->gammaprev, hprev[0]); if (s != GSL_SUCCESS) { return s; } } { /* Add accepted final correction step to Nordsieck matrix */ size_t i, j; for (i = 0; i < ord + 1; i++) for (j = 0; j < dim; j++) { z[i * dim + j] += l[i] * gsl_vector_get (abscor, j); } #ifdef DEBUG { size_t di; printf ("---- l: "); for (di = 0; di < ord + 1; di++) { printf ("%.5e ", l[di]); } printf ("\n"); printf ("-- corrected y: "); for (di = 0; di < dim; di++) { printf ("%.5e ", z[di]); } printf ("\n"); } #endif /* Derivatives at output */ if (dydt_out != NULL) { int s = GSL_ODEIV_FN_EVAL (sys, t + h, z, dydt_out); if (s == GSL_EBADFUNC) { return s; } if (s != GSL_SUCCESS) { msbdf_failurehandler (vstate, dim, t); #ifdef DEBUG printf ("-- FAIL at user function evaluation\n"); #endif return s; } } /* Calculate error estimate */ for (i = 0; i < dim; i++) { yerr[i] = fabs (gsl_vector_get (abscor, i)) * errcoeff; } #ifdef DEBUG { size_t di; printf ("-- yerr: "); for (di = 0; di < dim; di++) { printf ("%.5e ", yerr[di]); } printf ("\n"); } #endif /* Save y values */ for (i = 0; i < dim; i++) { y[i] = z[0 * dim + i]; } } /* Scale abscor with errlev for later use in norm calculations in order evaluation in msbdf_eval_order */ { size_t i; for (i = 0; i < dim; i++) { gsl_vector_set (abscorscaled, i, gsl_vector_get (abscor, i) / errlev[i]); } } /* Save items needed for evaluation of order increase on next call, if needed */ if (state->ordwait == 1 && ord < MSBDF_MAX_ORD) { size_t i; state->ordp1coeffprev = ordp1coeff; for (i = 0; i < dim; i++) { gsl_vector_set (svec, i, gsl_vector_get (abscorscaled, i)); } } /* Consider and execute order change for next step if order is unchanged. */ if (state->ordwait == 0) { if (ord - ordprev[0] == 0) { msbdf_eval_order (abscorscaled, tempvec, svec, errcoeff, dim, errlev, ordm1coeff, ordp1coeff, state->ordp1coeffprev, ordp2coeff, hprev, h, z, &(state->ord)); state->ordwait = state->ord + 2; } else { /* Postpone order evaluation if order has been modified elsewhere */ state->ordwait = 2; } } /* Save information about current step in state and update counters */ { size_t i; for (i = MSBDF_MAX_ORD - 1; i > 0; i--) { hprev[i] = hprev[i - 1]; ordprev[i] = ordprev[i - 1]; } } hprev[0] = h; ordprev[0] = ord; #ifdef DEBUG { size_t di; printf ("-- hprev: "); for (di = 0; di < MSBDF_MAX_ORD; di++) { printf ("%.5e ", hprev[di]); } printf ("\n"); } #endif state->tprev = t; state->ordwait--; state->ni++; state->gammaprev = gamma; state->nJ++; state->nM++; #ifdef DEBUG printf ("-- nJ=%d, nM=%d\n", (int) state->nJ, (int) state->nM); #endif } return GSL_SUCCESS; } static int msbdf_set_driver (void *vstate, const gsl_odeiv2_driver * d) { msbdf_state_t *state = (msbdf_state_t *) vstate; state->driver = d; return GSL_SUCCESS; } static int msbdf_reset (void *vstate, size_t dim) { msbdf_state_t *state = (msbdf_state_t *) vstate; size_t i; state->ni = 0; state->ord = 1; state->ordwait = 2; state->ordwaitbackup = 2; state->failord = 0; state->failt = GSL_NAN; state->tprev = GSL_NAN; state->gammaprev = 1.0; state->gammaprevbackup = 1.0; state->nJ = 0; state->nM = 0; state->failcount = 0; state->ordp1coeffprev = 0.0; DBL_ZERO_MEMSET (state->hprev, MSBDF_MAX_ORD); DBL_ZERO_MEMSET (state->hprevbackup, MSBDF_MAX_ORD); DBL_ZERO_MEMSET (state->z, (MSBDF_MAX_ORD + 1) * dim); DBL_ZERO_MEMSET (state->zbackup, (MSBDF_MAX_ORD + 1) * dim); for (i = 0; i < MSBDF_MAX_ORD; i++) { state->ordprev[i] = 1; state->ordprevbackup[i] = 1; } #ifdef DEBUG printf ("-- msbdf_reset called\n"); #endif return GSL_SUCCESS; } static unsigned int msbdf_order (void *vstate) { msbdf_state_t *state = (msbdf_state_t *) vstate; return state->ord; } static void msbdf_free (void *vstate) { msbdf_state_t *state = (msbdf_state_t *) vstate; gsl_vector_free (state->rhs); gsl_permutation_free (state->p); gsl_matrix_free (state->M); free (state->dfdt); gsl_matrix_free (state->dfdy); gsl_vector_free (state->tempvec); gsl_vector_free (state->svec); gsl_vector_free (state->relcor); gsl_vector_free (state->abscor); gsl_vector_free (state->abscorscaled); free (state->errlev); free (state->ordprevbackup); free (state->ordprev); free (state->hprevbackup); free (state->hprev); free (state->l); free (state->ytmp2); free (state->ytmp); free (state->zbackup); free (state->z); free (state); } static const gsl_odeiv2_step_type msbdf_type = { "msbdf", /* name */ 1, /* can use dydt_in? */ 1, /* gives exact dydt_out? */ &msbdf_alloc, &msbdf_apply, &msbdf_set_driver, &msbdf_reset, &msbdf_order, &msbdf_free }; const gsl_odeiv2_step_type *gsl_odeiv2_step_msbdf = &msbdf_type; gsl/ode-initval2/rk2.c0000644000175000017500000001236713536674414013102 0ustar eddedd/* ode-initval/rk2.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Runge-Kutta 2(3), Euler-Cauchy */ /* Author: G. Jungman */ /* Reference: Abramowitz & Stegun, section 25.5. Runge-Kutta 2nd (25.5.7) and 3rd (25.5.8) order methods */ #include #include #include #include #include #include "odeiv_util.h" #include "step_utils.c" typedef struct { double *k1; double *k2; double *k3; double *ytmp; } rk2_state_t; static void * rk2_alloc (size_t dim) { rk2_state_t *state = (rk2_state_t *) malloc (sizeof (rk2_state_t)); if (state == 0) { GSL_ERROR_NULL ("failed to allocate space for rk2_state", GSL_ENOMEM); } state->k1 = (double *) malloc (dim * sizeof (double)); if (state->k1 == 0) { free (state); GSL_ERROR_NULL ("failed to allocate space for k1", GSL_ENOMEM); } state->k2 = (double *) malloc (dim * sizeof (double)); if (state->k2 == 0) { free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for k2", GSL_ENOMEM); } state->k3 = (double *) malloc (dim * sizeof (double)); if (state->k3 == 0) { free (state->k2); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for k3", GSL_ENOMEM); } state->ytmp = (double *) malloc (dim * sizeof (double)); if (state->ytmp == 0) { free (state->k3); free (state->k2); free (state->k1); free (state); GSL_ERROR_NULL ("failed to allocate space for ytmp", GSL_ENOMEM); } return state; } static int rk2_apply (void *vstate, size_t dim, double t, double h, double y[], double yerr[], const double dydt_in[], double dydt_out[], const gsl_odeiv2_system * sys) { rk2_state_t *state = (rk2_state_t *) vstate; size_t i; double *const k1 = state->k1; double *const k2 = state->k2; double *const k3 = state->k3; double *const ytmp = state->ytmp; /* k1 step */ /* k1 = f(t,y) */ if (dydt_in != NULL) { DBL_MEMCPY (k1, dydt_in, dim); } else { int s = GSL_ODEIV_FN_EVAL (sys, t, y, k1); if (s != GSL_SUCCESS) { return s; } } /* k2 step */ /* k2 = f(t + 0.5*h, y + 0.5*k1) */ for (i = 0; i < dim; i++) { ytmp[i] = y[i] + 0.5 * h * k1[i]; } { int s = GSL_ODEIV_FN_EVAL (sys, t + 0.5 * h, ytmp, k2); if (s != GSL_SUCCESS) { return s; } } /* k3 step */ /* for 3rd order estimates, is used for error estimation k3 = f(t + h, y - k1 + 2*k2) */ for (i = 0; i < dim; i++) { ytmp[i] = y[i] + h * (-k1[i] + 2.0 * k2[i]); } { int s = GSL_ODEIV_FN_EVAL (sys, t + h, ytmp, k3); if (s != GSL_SUCCESS) { return s; } } /* final sum */ for (i = 0; i < dim; i++) { /* Save original values if derivative evaluation below fails */ ytmp[i] = y[i]; { const double ksum3 = (k1[i] + 4.0 * k2[i] + k3[i]) / 6.0; y[i] += h * ksum3; } } /* Derivatives at output */ if (dydt_out != NULL) { int s = GSL_ODEIV_FN_EVAL (sys, t + h, y, dydt_out); if (s != GSL_SUCCESS) { /* Restore original values */ DBL_MEMCPY (y, ytmp, dim); return s; } } /* Error estimation */ for (i = 0; i < dim; i++) { const double ksum3 = (k1[i] + 4.0 * k2[i] + k3[i]) / 6.0; yerr[i] = h * (k2[i] - ksum3); } return GSL_SUCCESS; } static int rk2_reset (void *vstate, size_t dim) { rk2_state_t *state = (rk2_state_t *) vstate; DBL_ZERO_MEMSET (state->k1, dim); DBL_ZERO_MEMSET (state->k2, dim); DBL_ZERO_MEMSET (state->k3, dim); DBL_ZERO_MEMSET (state->ytmp, dim); return GSL_SUCCESS; } static unsigned int rk2_order (void *vstate) { rk2_state_t *state = (rk2_state_t *) vstate; state = 0; /* prevent warnings about unused parameters */ return 2; } static void rk2_free (void *vstate) { rk2_state_t *state = (rk2_state_t *) vstate; free (state->k1); free (state->k2); free (state->k3); free (state->ytmp); free (state); } static const gsl_odeiv2_step_type rk2_type = { "rk2", /* name */ 1, /* can use dydt_in */ 1, /* gives exact dydt_out */ &rk2_alloc, &rk2_apply, &stepper_set_driver_null, &rk2_reset, &rk2_order, &rk2_free }; const gsl_odeiv2_step_type *gsl_odeiv2_step_rk2 = &rk2_type; gsl/movstat/0000755000175000017500000000000014057135461011420 5ustar eddeddgsl/movstat/test_median.c0000644000175000017500000001513213536674414014071 0ustar eddedd/* movstat/test_median.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include /* compute filtered data by explicitely constructing window, sorting it and finding median */ int slow_movmedian(const gsl_movstat_end_t etype, const gsl_vector * x, gsl_vector * y, const int H, const int J) { const size_t n = x->size; const int K = H + J + 1; double *window = malloc(K * sizeof(double)); size_t i; for (i = 0; i < n; ++i) { size_t wsize = gsl_movstat_fill(etype, x, i, H, J, window); double yi = gsl_stats_median(window, 1, wsize); gsl_vector_set(y, i, yi); } free(window); return GSL_SUCCESS; } /* test root sequence */ static void test_median_root(const double tol, const size_t n, const size_t K, const gsl_movstat_end_t etype) { gsl_movstat_workspace *w = gsl_movstat_alloc(K); gsl_vector *x = gsl_vector_alloc(n); gsl_vector *y = gsl_vector_alloc(n); char buf[2048]; size_t i; /* test a root sequence (square input): x = [zero one zero] */ gsl_vector_set_all(x, 0.0); for (i = n / 3; i <= n / 2; ++i) gsl_vector_set(x, i, 1.0); /* compute y = median(x) and test y = x */ gsl_movstat_median(etype, x, y, w); sprintf(buf, "n=%zu K=%zu endtype=%u SMF root sequence", n, K, etype); compare_vectors(tol, y, x, buf); gsl_vector_free(x); gsl_vector_free(y); gsl_movstat_free(w); } static double func_median(const size_t n, double x[], void * params) { (void) params; return gsl_stats_median(x, 1, n); } static void test_median_proc(const double tol, const size_t n, const size_t H, const size_t J, const gsl_movstat_end_t etype, gsl_rng *rng_p) { gsl_movstat_workspace *w; gsl_vector *x = gsl_vector_alloc(n); gsl_vector *y = gsl_vector_alloc(n); gsl_vector *z = gsl_vector_alloc(n); gsl_movstat_function F; char buf[2048]; F.function = func_median; F.params = NULL; if (H == J) w = gsl_movstat_alloc(2*H + 1); else w = gsl_movstat_alloc2(H, J); /* test moving median with random input */ random_vector(x, rng_p); /* y = median(x) with slow brute force algorithm */ slow_movmedian(etype, x, y, H, J); /* z = median(x) */ gsl_movstat_median(etype, x, z, w); /* test y = z */ sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u median random", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = median(x) in-place */ gsl_vector_memcpy(z, x); gsl_movstat_median(etype, z, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u median random in-place", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = median(x) with user-defined function */ gsl_movstat_apply(etype, &F, x, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u median user", n, H, J, etype); compare_vectors(tol, z, y, buf); gsl_vector_free(x); gsl_vector_free(y); gsl_vector_free(z); gsl_movstat_free(w); } static void test_median(gsl_rng * rng_p) { test_median_root(GSL_DBL_EPSILON, 1000, 3, GSL_MOVSTAT_END_PADZERO); test_median_root(GSL_DBL_EPSILON, 200, 15, GSL_MOVSTAT_END_PADVALUE); test_median_root(GSL_DBL_EPSILON, 100, 5, GSL_MOVSTAT_END_TRUNCATE); test_median_proc(GSL_DBL_EPSILON, 1000, 0, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_median_proc(GSL_DBL_EPSILON, 1000, 1, 1, GSL_MOVSTAT_END_PADZERO, rng_p); test_median_proc(GSL_DBL_EPSILON, 100, 150, 150, GSL_MOVSTAT_END_PADZERO, rng_p); test_median_proc(GSL_DBL_EPSILON, 5000, 8, 8, GSL_MOVSTAT_END_PADZERO, rng_p); test_median_proc(GSL_DBL_EPSILON, 5000, 0, 5, GSL_MOVSTAT_END_PADZERO, rng_p); test_median_proc(GSL_DBL_EPSILON, 5000, 5, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_median_proc(GSL_DBL_EPSILON, 5000, 15, 10, GSL_MOVSTAT_END_PADZERO, rng_p); test_median_proc(GSL_DBL_EPSILON, 5000, 10, 15, GSL_MOVSTAT_END_PADZERO, rng_p); test_median_proc(GSL_DBL_EPSILON, 50, 100, 150, GSL_MOVSTAT_END_PADZERO, rng_p); test_median_proc(GSL_DBL_EPSILON, 50, 150, 100, GSL_MOVSTAT_END_PADZERO, rng_p); test_median_proc(GSL_DBL_EPSILON, 50, 100, 100, GSL_MOVSTAT_END_PADZERO, rng_p); test_median_proc(GSL_DBL_EPSILON, 1000, 0, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_median_proc(GSL_DBL_EPSILON, 1000, 1, 1, GSL_MOVSTAT_END_PADVALUE, rng_p); test_median_proc(GSL_DBL_EPSILON, 100, 150, 150, GSL_MOVSTAT_END_PADVALUE, rng_p); test_median_proc(GSL_DBL_EPSILON, 5000, 8, 8, GSL_MOVSTAT_END_PADVALUE, rng_p); test_median_proc(GSL_DBL_EPSILON, 5000, 0, 5, GSL_MOVSTAT_END_PADVALUE, rng_p); test_median_proc(GSL_DBL_EPSILON, 5000, 5, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_median_proc(GSL_DBL_EPSILON, 5000, 15, 10, GSL_MOVSTAT_END_PADVALUE, rng_p); test_median_proc(GSL_DBL_EPSILON, 5000, 10, 15, GSL_MOVSTAT_END_PADVALUE, rng_p); test_median_proc(GSL_DBL_EPSILON, 50, 100, 150, GSL_MOVSTAT_END_PADVALUE, rng_p); test_median_proc(GSL_DBL_EPSILON, 50, 150, 100, GSL_MOVSTAT_END_PADVALUE, rng_p); test_median_proc(GSL_DBL_EPSILON, 50, 100, 100, GSL_MOVSTAT_END_PADVALUE, rng_p); test_median_proc(GSL_DBL_EPSILON, 1000, 0, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_median_proc(GSL_DBL_EPSILON, 1000, 1, 1, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_median_proc(GSL_DBL_EPSILON, 100, 150, 150, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_median_proc(GSL_DBL_EPSILON, 5000, 8, 8, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_median_proc(GSL_DBL_EPSILON, 5000, 0, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_median_proc(GSL_DBL_EPSILON, 5000, 5, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_median_proc(GSL_DBL_EPSILON, 5000, 15, 10, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_median_proc(GSL_DBL_EPSILON, 5000, 10, 15, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_median_proc(GSL_DBL_EPSILON, 50, 100, 150, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_median_proc(GSL_DBL_EPSILON, 50, 150, 100, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_median_proc(GSL_DBL_EPSILON, 50, 100, 100, GSL_MOVSTAT_END_TRUNCATE, rng_p); } gsl/movstat/movvariance.c0000644000175000017500000000354113536674414014110 0ustar eddedd/* movstat/movvar.c * * Routines related to a moving window variance * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* gsl_movstat_variance() Apply moving variance to input vector Inputs: endtype - end point handling criteria x - input vector, size n y - output vector, size n w - workspace */ int gsl_movstat_variance(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w) { int status = gsl_movstat_apply_accum(endtype, x, gsl_movstat_accum_variance, NULL, y, NULL, w); return status; } /* gsl_movstat_sd() Apply moving standard deviation to input vector Inputs: endtype - end point handling criteria x - input vector, size n y - output vector, size n w - workspace */ int gsl_movstat_sd(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w) { int status = gsl_movstat_apply_accum(endtype, x, gsl_movstat_accum_sd, NULL, y, NULL, w); return status; } gsl/movstat/snacc.c0000644000175000017500000000563113536674414012667 0ustar eddedd/* movstat/snacc.c * * Moving window S_n accumulator * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include typedef double snacc_type_t; typedef snacc_type_t ringbuf_type_t; #include "ringbuf.c" typedef struct { snacc_type_t *window; /* linear array for current window */ snacc_type_t *work; /* workspace */ ringbuf *rbuf; /* ring buffer storing current window */ } snacc_state_t; static size_t snacc_size(const size_t n) { size_t size = 0; size += sizeof(snacc_state_t); size += 2 * n * sizeof(snacc_type_t); size += ringbuf_size(n); return size; } static int snacc_init(const size_t n, void * vstate) { snacc_state_t * state = (snacc_state_t *) vstate; state->window = (snacc_type_t *) ((unsigned char *) vstate + sizeof(snacc_state_t)); state->work = (snacc_type_t *) ((unsigned char *) state->window + n * sizeof(snacc_type_t)); state->rbuf = (ringbuf *) ((unsigned char *) state->work + n * sizeof(snacc_type_t)); ringbuf_init(n, state->rbuf); return GSL_SUCCESS; } static int snacc_insert(const snacc_type_t x, void * vstate) { snacc_state_t * state = (snacc_state_t *) vstate; /* add new element to ring buffer */ ringbuf_insert(x, state->rbuf); return GSL_SUCCESS; } static int snacc_delete(void * vstate) { snacc_state_t * state = (snacc_state_t *) vstate; if (!ringbuf_is_empty(state->rbuf)) ringbuf_pop_back(state->rbuf); return GSL_SUCCESS; } /* FIXME XXX: this is inefficient - could be improved by maintaining a sorted ring buffer */ static int snacc_get(void * params, snacc_type_t * result, const void * vstate) { const snacc_state_t * state = (const snacc_state_t *) vstate; size_t n = ringbuf_copy(state->window, state->rbuf); (void) params; gsl_sort(state->window, 1, n); *result = gsl_stats_Sn_from_sorted_data(state->window, 1, n, state->work); return GSL_SUCCESS; } static const gsl_movstat_accum sn_accum_type = { snacc_size, snacc_init, snacc_insert, snacc_delete, snacc_get }; const gsl_movstat_accum *gsl_movstat_accum_Sn = &sn_accum_type; gsl/movstat/Makefile.in0000664000175000017500000011674314057135461013503 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = movstat ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslmovstat_la_LIBADD = am_libgslmovstat_la_OBJECTS = alloc.lo apply.lo fill.lo funcacc.lo \ madacc.lo medacc.lo mmacc.lo movmad.lo movmean.lo movmedian.lo \ movminmax.lo movsum.lo movSn.lo movQn.lo movqqr.lo \ movvariance.lo mvacc.lo qnacc.lo qqracc.lo snacc.lo sumacc.lo libgslmovstat_la_OBJECTS = $(am_libgslmovstat_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslmovstat.la ../statistics/libgslstatistics.la \ ../sort/libgslsort.la ../ieee-utils/libgslieeeutils.la \ ../randist/libgslrandist.la ../rng/libgslrng.la \ ../specfunc/libgslspecfunc.la ../complex/libgslcomplex.la \ ../err/libgslerr.la ../test/libgsltest.la \ ../vector/libgslvector.la ../blas/libgslblas.la \ ../cblas/libgslcblas.la ../block/libgslblock.la \ ../sys/libgslsys.la ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/alloc.Plo ./$(DEPDIR)/apply.Plo \ ./$(DEPDIR)/fill.Plo ./$(DEPDIR)/funcacc.Plo \ ./$(DEPDIR)/madacc.Plo ./$(DEPDIR)/medacc.Plo \ ./$(DEPDIR)/mmacc.Plo ./$(DEPDIR)/movQn.Plo \ ./$(DEPDIR)/movSn.Plo ./$(DEPDIR)/movmad.Plo \ ./$(DEPDIR)/movmean.Plo ./$(DEPDIR)/movmedian.Plo \ ./$(DEPDIR)/movminmax.Plo ./$(DEPDIR)/movqqr.Plo \ ./$(DEPDIR)/movsum.Plo ./$(DEPDIR)/movvariance.Plo \ ./$(DEPDIR)/mvacc.Plo ./$(DEPDIR)/qnacc.Plo \ ./$(DEPDIR)/qqracc.Plo ./$(DEPDIR)/snacc.Plo \ ./$(DEPDIR)/sumacc.Plo ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslmovstat_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslmovstat_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslmovstat.la pkginclude_HEADERS = gsl_movstat.h AM_CPPFLAGS = -I$(top_srcdir) libgslmovstat_la_SOURCES = \ alloc.c \ apply.c \ fill.c \ funcacc.c \ madacc.c \ medacc.c \ mmacc.c \ movmad.c \ movmean.c \ movmedian.c \ movminmax.c \ movsum.c \ movSn.c \ movQn.c \ movqqr.c \ movvariance.c \ mvacc.c \ qnacc.c \ qqracc.c \ snacc.c \ sumacc.c noinst_HEADERS = deque.c ringbuf.c test_mad.c test_mean.c test_median.c test_minmax.c test_Qn.c test_qqr.c test_Sn.c test_sum.c test_variance.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslmovstat.la ../statistics/libgslstatistics.la ../sort/libgslsort.la ../ieee-utils/libgslieeeutils.la ../randist/libgslrandist.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../complex/libgslcomplex.la ../err/libgslerr.la ../test/libgsltest.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../sys/libgslsys.la ../utils/libutils.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu movstat/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu movstat/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslmovstat.la: $(libgslmovstat_la_OBJECTS) $(libgslmovstat_la_DEPENDENCIES) $(EXTRA_libgslmovstat_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslmovstat_la_OBJECTS) $(libgslmovstat_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apply.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fill.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/funcacc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/madacc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/medacc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmacc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movQn.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movSn.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movmad.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movmean.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movmedian.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movminmax.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movqqr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movsum.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movvariance.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mvacc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qnacc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qqracc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snacc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sumacc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/alloc.Plo -rm -f ./$(DEPDIR)/apply.Plo -rm -f ./$(DEPDIR)/fill.Plo -rm -f ./$(DEPDIR)/funcacc.Plo -rm -f ./$(DEPDIR)/madacc.Plo -rm -f ./$(DEPDIR)/medacc.Plo -rm -f ./$(DEPDIR)/mmacc.Plo -rm -f ./$(DEPDIR)/movQn.Plo -rm -f ./$(DEPDIR)/movSn.Plo -rm -f ./$(DEPDIR)/movmad.Plo -rm -f ./$(DEPDIR)/movmean.Plo -rm -f ./$(DEPDIR)/movmedian.Plo -rm -f ./$(DEPDIR)/movminmax.Plo -rm -f ./$(DEPDIR)/movqqr.Plo -rm -f ./$(DEPDIR)/movsum.Plo -rm -f ./$(DEPDIR)/movvariance.Plo -rm -f ./$(DEPDIR)/mvacc.Plo -rm -f ./$(DEPDIR)/qnacc.Plo -rm -f ./$(DEPDIR)/qqracc.Plo -rm -f ./$(DEPDIR)/snacc.Plo -rm -f ./$(DEPDIR)/sumacc.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/alloc.Plo -rm -f ./$(DEPDIR)/apply.Plo -rm -f ./$(DEPDIR)/fill.Plo -rm -f ./$(DEPDIR)/funcacc.Plo -rm -f ./$(DEPDIR)/madacc.Plo -rm -f ./$(DEPDIR)/medacc.Plo -rm -f ./$(DEPDIR)/mmacc.Plo -rm -f ./$(DEPDIR)/movQn.Plo -rm -f ./$(DEPDIR)/movSn.Plo -rm -f ./$(DEPDIR)/movmad.Plo -rm -f ./$(DEPDIR)/movmean.Plo -rm -f ./$(DEPDIR)/movmedian.Plo -rm -f ./$(DEPDIR)/movminmax.Plo -rm -f ./$(DEPDIR)/movqqr.Plo -rm -f ./$(DEPDIR)/movsum.Plo -rm -f ./$(DEPDIR)/movvariance.Plo -rm -f ./$(DEPDIR)/mvacc.Plo -rm -f ./$(DEPDIR)/qnacc.Plo -rm -f ./$(DEPDIR)/qqracc.Plo -rm -f ./$(DEPDIR)/snacc.Plo -rm -f ./$(DEPDIR)/sumacc.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/movstat/movSn.c0000644000175000017500000000315013536674414012674 0ustar eddedd/* movstat/movSn.c * * Compute moving "S_n" statistic from Croux and Rousseeuw, 1992 * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include /* gsl_movstat_Sn() Calculate moving S_n statistic for input vector Inputs: endtype - how to handle end points x - input vector, size n xscale - (output) vector of "S_n" statistics, size n xscale_i = (S_n)_i for i-th window: w - workspace */ int gsl_movstat_Sn(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * xscale, gsl_movstat_workspace * w) { int status = gsl_movstat_apply_accum(endtype, x, gsl_movstat_accum_Sn, NULL, xscale, NULL, w); return status; } gsl/movstat/test_variance.c0000644000175000017500000001463513536674414014433 0ustar eddedd/* movstat/test_variance.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* compute moving variance by explicitely constructing window and computing variance */ int slow_movvar(const gsl_movstat_end_t etype, const gsl_vector * x, gsl_vector * y, const int H, const int J) { const size_t n = x->size; const int K = H + J + 1; double *window = malloc(K * sizeof(double)); size_t i; for (i = 0; i < n; ++i) { size_t wsize = gsl_movstat_fill(etype, x, i, H, J, window); double variance = (wsize > 1) ? gsl_stats_variance(window, 1, wsize) : 0.0; gsl_vector_set(y, i, variance); } free(window); return GSL_SUCCESS; } /* compute moving variance by explicitely constructing window and computing variance */ int slow_movsd(const gsl_movstat_end_t etype, const gsl_vector * x, gsl_vector * y, const int H, const int J) { const size_t n = x->size; const int K = H + J + 1; double *window = malloc(K * sizeof(double)); size_t i; for (i = 0; i < n; ++i) { size_t wsize = gsl_movstat_fill(etype, x, i, H, J, window); double sd = (wsize > 1) ? gsl_stats_sd(window, 1, wsize) : 0.0; gsl_vector_set(y, i, sd); } free(window); return GSL_SUCCESS; } static double func_var(const size_t n, double x[], void * params) { (void) params; if (n > 1) return gsl_stats_variance(x, 1, n); else return 0.0; } static double func_sd(const size_t n, double x[], void * params) { (void) params; if (n > 1) return gsl_stats_sd(x, 1, n); else return 0.0; } static void test_variance_proc(const double tol, const size_t n, const size_t H, const size_t J, const gsl_movstat_end_t etype, gsl_rng * rng_p) { gsl_movstat_workspace * w = gsl_movstat_alloc2(H, J); gsl_vector * x = gsl_vector_alloc(n); gsl_vector * y = gsl_vector_alloc(n); gsl_vector * z = gsl_vector_alloc(n); gsl_movstat_function F1, F2; char buf[2048]; F1.function = func_var; F1.params = NULL; F2.function = func_sd; F2.params = NULL; random_vector(x, rng_p); /* test variance */ /* y = variance(x) with slow brute force method */ slow_movvar(etype, x, y, H, J); /* y = variance(x) with fast method */ gsl_movstat_variance(etype, x, z, w); /* test y = z */ sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u variance random", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = variance(x) in-place */ gsl_vector_memcpy(z, x); gsl_movstat_variance(etype, z, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u variance random in-place", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = variance(x) with user-defined function */ gsl_movstat_apply(etype, &F1, x, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u variance user", n, H, J, etype); compare_vectors(tol, z, y, buf); /* test standard deviation */ /* y = stddev(x) with slow brute force method */ slow_movsd(etype, x, y, H, J); /* y = stddev(x) with fast method */ gsl_movstat_sd(etype, x, z, w); /* test y = z */ sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u stddev random", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = stddev(x) in-place */ gsl_vector_memcpy(z, x); gsl_movstat_sd(etype, z, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u stddev random in-place", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = stddev(x) with user-defined function */ gsl_movstat_apply(etype, &F2, x, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u stddev user", n, H, J, etype); compare_vectors(tol, z, y, buf); gsl_movstat_free(w); gsl_vector_free(x); gsl_vector_free(y); gsl_vector_free(z); } static void test_variance(gsl_rng * rng_p) { const double eps = 1.0e-10; test_variance_proc(eps, 1000, 0, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_variance_proc(eps, 1000, 3, 3, GSL_MOVSTAT_END_PADZERO, rng_p); test_variance_proc(eps, 1000, 0, 5, GSL_MOVSTAT_END_PADZERO, rng_p); test_variance_proc(eps, 1000, 5, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_variance_proc(eps, 2000, 10, 5, GSL_MOVSTAT_END_PADZERO, rng_p); test_variance_proc(eps, 2000, 5, 10, GSL_MOVSTAT_END_PADZERO, rng_p); test_variance_proc(eps, 20, 50, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_variance_proc(eps, 20, 10, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_variance_proc(eps, 20, 50, 10, GSL_MOVSTAT_END_PADZERO, rng_p); test_variance_proc(eps, 1000, 0, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_variance_proc(eps, 1000, 3, 3, GSL_MOVSTAT_END_PADVALUE, rng_p); test_variance_proc(eps, 1000, 1, 5, GSL_MOVSTAT_END_PADVALUE, rng_p); test_variance_proc(eps, 1000, 5, 1, GSL_MOVSTAT_END_PADVALUE, rng_p); test_variance_proc(eps, 2000, 10, 5, GSL_MOVSTAT_END_PADVALUE, rng_p); test_variance_proc(eps, 2000, 5, 10, GSL_MOVSTAT_END_PADVALUE, rng_p); test_variance_proc(eps, 20, 50, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_variance_proc(eps, 20, 10, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_variance_proc(eps, 20, 50, 10, GSL_MOVSTAT_END_PADVALUE, rng_p); test_variance_proc(eps, 1000, 0, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_variance_proc(eps, 1000, 3, 3, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_variance_proc(eps, 1000, 0, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_variance_proc(eps, 1000, 5, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_variance_proc(eps, 2000, 10, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_variance_proc(eps, 2000, 5, 10, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_variance_proc(eps, 20, 50, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_variance_proc(eps, 20, 10, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_variance_proc(eps, 20, 50, 10, GSL_MOVSTAT_END_TRUNCATE, rng_p); } gsl/movstat/qnacc.c0000644000175000017500000000630413536674414012663 0ustar eddedd/* movstat/qnacc.c * * Moving window Q_n accumulator * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include typedef double qnacc_type_t; typedef qnacc_type_t ringbuf_type_t; #include "ringbuf.c" typedef struct { qnacc_type_t *window; /* linear array for current window */ qnacc_type_t *work; /* workspace, length 3*n */ int *work_int; /* integer workspace, length 5*n */ ringbuf *rbuf; /* ring buffer storing current window */ } qnacc_state_t; static size_t qnacc_size(const size_t n) { size_t size = 0; size += sizeof(qnacc_state_t); size += n * sizeof(qnacc_type_t); /* window */ size += 3 * n * sizeof(qnacc_type_t); /* work */ size += 5 * n * sizeof(int); /* work_int */ size += ringbuf_size(n); return size; } static int qnacc_init(const size_t n, void * vstate) { qnacc_state_t * state = (qnacc_state_t *) vstate; state->window = (qnacc_type_t *) ((unsigned char *) vstate + sizeof(qnacc_state_t)); state->work = (qnacc_type_t *) ((unsigned char *) state->window + n * sizeof(qnacc_type_t)); state->work_int = (int *) ((unsigned char *) state->work + 3 * n * sizeof(qnacc_type_t)); state->rbuf = (ringbuf *) ((unsigned char *) state->work_int + 5 * n * sizeof(int)); ringbuf_init(n, state->rbuf); return GSL_SUCCESS; } static int qnacc_insert(const qnacc_type_t x, void * vstate) { qnacc_state_t * state = (qnacc_state_t *) vstate; /* add new element to ring buffer */ ringbuf_insert(x, state->rbuf); return GSL_SUCCESS; } static int qnacc_delete(void * vstate) { qnacc_state_t * state = (qnacc_state_t *) vstate; if (!ringbuf_is_empty(state->rbuf)) ringbuf_pop_back(state->rbuf); return GSL_SUCCESS; } /* FIXME XXX: this is inefficient - could be improved by maintaining a sorted ring buffer */ static int qnacc_get(void * params, qnacc_type_t * result, const void * vstate) { const qnacc_state_t * state = (const qnacc_state_t *) vstate; size_t n = ringbuf_copy(state->window, state->rbuf); (void) params; gsl_sort(state->window, 1, n); *result = gsl_stats_Qn_from_sorted_data(state->window, 1, n, state->work, state->work_int); return GSL_SUCCESS; } static const gsl_movstat_accum qn_accum_type = { qnacc_size, qnacc_init, qnacc_insert, qnacc_delete, qnacc_get }; const gsl_movstat_accum *gsl_movstat_accum_Qn = &qn_accum_type; gsl/movstat/test_minmax.c0000644000175000017500000002362713536674414014135 0ustar eddedd/* movstat/test_minmax.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* compute filtered data by explicitely constructing window and finding min/max */ int slow_minmax(const gsl_movstat_end_t etype, const gsl_vector * x, gsl_vector * y_min, gsl_vector * y_max, const int H, const int J) { const size_t n = x->size; const int K = H + J + 1; double *window = malloc(K * sizeof(double)); size_t i; for (i = 0; i < n; ++i) { size_t wsize = gsl_movstat_fill(etype, x, i, H, J, window); gsl_vector_view v = gsl_vector_view_array(window, wsize); double min, max; gsl_vector_minmax(&v.vector, &min, &max); gsl_vector_set(y_min, i, min); gsl_vector_set(y_max, i, max); } free(window); return GSL_SUCCESS; } static double func_min(const size_t n, double x[], void * params) { gsl_vector_view v = gsl_vector_view_array(x, n); (void) params; return gsl_vector_min(&v.vector); } static double func_max(const size_t n, double x[], void * params) { gsl_vector_view v = gsl_vector_view_array(x, n); (void) params; return gsl_vector_max(&v.vector); } static void test_minmax_x(const double tol, const gsl_vector * x, const int H, const int J, const gsl_movstat_end_t endtype, const char * desc) { const size_t n = x->size; gsl_vector * u_min = gsl_vector_alloc(n); gsl_vector * y_min = gsl_vector_alloc(n); gsl_vector * z_min = gsl_vector_alloc(n); gsl_vector * u_max = gsl_vector_alloc(n); gsl_vector * y_max = gsl_vector_alloc(n); gsl_vector * z_max = gsl_vector_alloc(n); gsl_movstat_workspace * w = gsl_movstat_alloc2(H, J); gsl_movstat_function F1, F2; char buf[2048]; F1.function = func_min; F1.params = NULL; F2.function = func_max; F2.params = NULL; /* compute moving min/max */ gsl_movstat_min(endtype, x, u_min, w); gsl_movstat_max(endtype, x, u_max, w); gsl_movstat_minmax(endtype, x, y_min, y_max, w); /* compute moving min/max with slow brute force method */ slow_minmax(endtype, x, z_min, z_max, H, J); sprintf(buf, "test_minmax: %s min endtype=%d n=%zu H=%d J=%d", desc, endtype, n, H, J); compare_vectors(tol, u_min, z_min, buf); sprintf(buf, "test_minmax: %s max endtype=%d n=%zu H=%d J=%d", desc, endtype, n, H, J); compare_vectors(tol, u_max, z_max, buf); sprintf(buf, "test_minmax: %s minmax(minimum) endtype=%d n=%zu H=%d J=%d", desc, endtype, n, H, J); compare_vectors(tol, y_min, z_min, buf); sprintf(buf, "test_minmax: %s minmax(maximum) endtype=%d n=%zu H=%d J=%d", desc, endtype, n, H, J); compare_vectors(tol, y_max, z_max, buf); /* in-place tests */ gsl_vector_memcpy(u_min, x); gsl_vector_memcpy(u_max, x); gsl_movstat_min(endtype, u_min, u_min, w); gsl_movstat_max(endtype, u_max, u_max, w); sprintf(buf, "test_minmax: %s in-place min endtype=%d n=%zu H=%d J=%d", desc, endtype, n, H, J); compare_vectors(tol, u_min, z_min, buf); sprintf(buf, "test_minmax: %s in-place max endtype=%d n=%zu H=%d J=%d", desc, endtype, n, H, J); compare_vectors(tol, u_max, z_max, buf); /* user-defined function tests */ gsl_movstat_apply(endtype, &F1, x, z_min, w); sprintf(buf, "n=%zu H=%d J=%d endtype=%u min user", n, H, J, endtype); compare_vectors(tol, z_min, y_min, buf); gsl_movstat_apply(endtype, &F2, x, z_max, w); sprintf(buf, "n=%zu H=%d J=%d endtype=%u max user", n, H, J, endtype); compare_vectors(tol, z_max, y_max, buf); gsl_vector_free(u_min); gsl_vector_free(y_min); gsl_vector_free(z_min); gsl_vector_free(u_max); gsl_vector_free(y_max); gsl_vector_free(z_max); gsl_movstat_free(w); } /* test alternating sequence [a,b,a,b,...] input */ static void test_minmax_alt(const double tol, const size_t n, const int H, const int J, const gsl_movstat_end_t endtype) { const double a = 5.0; const double b = -5.0; gsl_vector * x = gsl_vector_alloc(n); size_t i; for (i = 0; i < n; ++i) { if (i % 2 == 0) gsl_vector_set(x, i, a); else gsl_vector_set(x, i, b); } test_minmax_x(tol, x, H, J, endtype, "alternating"); gsl_vector_free(x); } /* test noisy sine wave input */ static void test_minmax_sine(const double tol, const size_t n, const int H, const int J, const gsl_movstat_end_t endtype, gsl_rng * rng_p) { gsl_vector * x = gsl_vector_alloc(n); /* construct noisy sine signal */ test_noisy_sine(0.5, x, rng_p); test_minmax_x(tol, x, H, J, endtype, "noisy_sine"); gsl_vector_free(x); } /* test random input */ static void test_minmax_random(const double tol, const size_t n, const int H, const int J, const gsl_movstat_end_t endtype, gsl_rng * rng_p) { gsl_vector * x = gsl_vector_alloc(n); /* construct random input signal */ random_vector(x, rng_p); test_minmax_x(tol, x, H, J, endtype, "random"); gsl_vector_free(x); } static void test_minmax(gsl_rng * rng_p) { /* alternating input */ test_minmax_alt(GSL_DBL_EPSILON, 1000, 7, 7, GSL_MOVSTAT_END_PADZERO); test_minmax_alt(GSL_DBL_EPSILON, 1000, 5, 2, GSL_MOVSTAT_END_PADZERO); test_minmax_alt(GSL_DBL_EPSILON, 500, 1, 3, GSL_MOVSTAT_END_PADZERO); test_minmax_alt(GSL_DBL_EPSILON, 20, 50, 10, GSL_MOVSTAT_END_PADZERO); test_minmax_alt(GSL_DBL_EPSILON, 20, 10, 50, GSL_MOVSTAT_END_PADZERO); /* noisy sine wave input */ test_minmax_sine(GSL_DBL_EPSILON, 1000, 5, 7, GSL_MOVSTAT_END_PADZERO, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 2000, 0, 2, GSL_MOVSTAT_END_PADZERO, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 500, 3, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 20, 50, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 20, 10, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 20, 50, 10, GSL_MOVSTAT_END_PADZERO, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 500, 5, 7, GSL_MOVSTAT_END_PADVALUE, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 1000, 10, 20, GSL_MOVSTAT_END_PADVALUE, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 1000, 3, 3, GSL_MOVSTAT_END_PADVALUE, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 20, 50, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 20, 10, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 20, 50, 10, GSL_MOVSTAT_END_PADVALUE, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 500, 5, 7, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 1000, 10, 20, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 1000, 3, 3, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 1000, 30, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 1000, 5, 30, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 20, 50, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 20, 10, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_minmax_sine(GSL_DBL_EPSILON, 20, 50, 10, GSL_MOVSTAT_END_TRUNCATE, rng_p); /* random input */ test_minmax_random(GSL_DBL_EPSILON, 1000, 0, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_minmax_random(GSL_DBL_EPSILON, 1000, 5, 7, GSL_MOVSTAT_END_PADZERO, rng_p); test_minmax_random(GSL_DBL_EPSILON, 2000, 0, 2, GSL_MOVSTAT_END_PADZERO, rng_p); test_minmax_random(GSL_DBL_EPSILON, 500, 3, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_minmax_random(GSL_DBL_EPSILON, 500, 10, 5, GSL_MOVSTAT_END_PADZERO, rng_p); test_minmax_random(GSL_DBL_EPSILON, 500, 5, 10, GSL_MOVSTAT_END_PADZERO, rng_p); test_minmax_random(GSL_DBL_EPSILON, 20, 50, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_minmax_random(GSL_DBL_EPSILON, 20, 10, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_minmax_random(GSL_DBL_EPSILON, 20, 50, 10, GSL_MOVSTAT_END_PADZERO, rng_p); test_minmax_random(GSL_DBL_EPSILON, 1000, 0, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 1000, 5, 7, GSL_MOVSTAT_END_PADVALUE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 2000, 0, 2, GSL_MOVSTAT_END_PADVALUE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 500, 3, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 500, 10, 5, GSL_MOVSTAT_END_PADVALUE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 500, 5, 10, GSL_MOVSTAT_END_PADVALUE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 20, 50, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 20, 10, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 20, 50, 10, GSL_MOVSTAT_END_PADVALUE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 1000, 0, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 1000, 5, 7, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 2000, 0, 2, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 500, 3, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 500, 10, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 500, 5, 10, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 20, 50, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 20, 10, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_minmax_random(GSL_DBL_EPSILON, 20, 50, 10, GSL_MOVSTAT_END_TRUNCATE, rng_p); } gsl/movstat/qqracc.c0000644000175000017500000000602113536674414013044 0ustar eddedd/* movstat/qqracc.c * * Moving window QQR accumulator * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include typedef double qqracc_type_t; typedef qqracc_type_t ringbuf_type_t; #include "ringbuf.c" typedef struct { qqracc_type_t *window; /* linear array for current window */ ringbuf *rbuf; /* ring buffer storing current window */ } qqracc_state_t; static size_t qqracc_size(const size_t n) { size_t size = 0; size += sizeof(qqracc_state_t); size += n * sizeof(qqracc_type_t); size += ringbuf_size(n); return size; } static int qqracc_init(const size_t n, void * vstate) { qqracc_state_t * state = (qqracc_state_t *) vstate; state->window = (qqracc_type_t *) ((unsigned char *) vstate + sizeof(qqracc_state_t)); state->rbuf = (ringbuf *) ((unsigned char *) state->window + n * sizeof(qqracc_type_t)); ringbuf_init(n, state->rbuf); return GSL_SUCCESS; } static int qqracc_insert(const qqracc_type_t x, void * vstate) { qqracc_state_t * state = (qqracc_state_t *) vstate; /* add new element to ring buffer */ ringbuf_insert(x, state->rbuf); return GSL_SUCCESS; } static int qqracc_delete(void * vstate) { qqracc_state_t * state = (qqracc_state_t *) vstate; if (!ringbuf_is_empty(state->rbuf)) ringbuf_pop_back(state->rbuf); return GSL_SUCCESS; } /* FIXME XXX: this is inefficient - could be improved by maintaining a sorted ring buffer */ static int qqracc_get(void * params, qqracc_type_t * result, const void * vstate) { const qqracc_state_t * state = (const qqracc_state_t *) vstate; double q = *(double *) params; size_t n = ringbuf_copy(state->window, state->rbuf); double quant1, quant2; gsl_sort(state->window, 1, n); /* compute q-quantile and (1-q)-quantile */ quant1 = gsl_stats_quantile_from_sorted_data(state->window, 1, n, q); quant2 = gsl_stats_quantile_from_sorted_data(state->window, 1, n, 1.0 - q); /* compute q-quantile range */ *result = quant2 - quant1; return GSL_SUCCESS; } static const gsl_movstat_accum qqr_accum_type = { qqracc_size, qqracc_init, qqracc_insert, qqracc_delete, qqracc_get }; const gsl_movstat_accum *gsl_movstat_accum_qqr = &qqr_accum_type; gsl/movstat/fill.c0000644000175000017500000000600713536674414012524 0ustar eddedd/* movstat/fill.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include /* gsl_movstat_fill() Fill window for sample 'idx' from x using given end conditions Inputs: endtype - how to handle end points x - input vector, length n idx - index of center sample in window in [0,n-1] H - number of samples left of center to include J - number of samples right of center to include window - (output) window of samples centered on x_{idx}, W_{idx}^{H,J}, length H + J + 1 Return: size of filled window (<= H + J + 1) */ size_t gsl_movstat_fill(const gsl_movstat_end_t endtype, const gsl_vector * x, const size_t idx, const size_t H, const size_t J, double * window) { if (idx >= x->size) { GSL_ERROR_VAL ("window center index must be between 0 and n - 1", GSL_EDOM, 0); } else { const int n = (int) x->size; const int iidx = (int) idx; const int iH = (int) H; const int iJ = (int) J; int idx1, idx2, j; size_t window_size; if (endtype == GSL_MOVSTAT_END_TRUNCATE) { idx1 = GSL_MAX(iidx - iH, 0); idx2 = GSL_MIN(iidx + iJ, n - 1); } else { idx1 = iidx - iH; idx2 = iidx + iJ; } window_size = (size_t) (idx2 - idx1 + 1); /* fill sliding window */ for (j = idx1; j <= idx2; ++j) { int widx = j - idx1; if (j < 0) { /* initial condition */ if (endtype == GSL_MOVSTAT_END_PADZERO) window[widx] = 0.0; else if (endtype == GSL_MOVSTAT_END_PADVALUE) window[widx] = gsl_vector_get(x, 0); } else if (j >= n) { if (endtype == GSL_MOVSTAT_END_PADZERO) window[widx] = 0.0; else if (endtype == GSL_MOVSTAT_END_PADVALUE) window[widx] = gsl_vector_get(x, n - 1); } else { window[widx] = gsl_vector_get(x, j); } } return window_size; } } gsl/movstat/ringbuf.c0000644000175000017500000001140413536674414013227 0ustar eddedd/* movstat/ringbuf.c * * Ring buffer module * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_RINGBUF_C__ #define __GSL_RINGBUF_C__ /*typedef int ringbuf_type;*/ typedef struct { ringbuf_type_t *array; int head; int tail; int size; /* total elements allocated */ } ringbuf; static size_t ringbuf_size(const size_t n); static int ringbuf_empty(ringbuf * d); static int ringbuf_is_empty(const ringbuf * d); static int ringbuf_is_full(const ringbuf * d); static int ringbuf_insert(const ringbuf_type_t x, ringbuf * d); static int ringbuf_pop_back(ringbuf * b); static ringbuf_type_t ringbuf_peek(const int i, const ringbuf * b); static ringbuf_type_t ringbuf_peek_front(const ringbuf * d); static ringbuf_type_t ringbuf_peek_back(const ringbuf * d); static size_t ringbuf_copy(double * dest, const ringbuf * b); static int ringbuf_n(const ringbuf * b); static size_t ringbuf_size(const size_t n) { size_t size = 0; size += sizeof(ringbuf); size += n * sizeof(ringbuf_type_t); /* b->array */ return size; } static int ringbuf_init(const size_t n, ringbuf * b) { b->array = (ringbuf_type_t *) ((char *) b + sizeof(ringbuf)); b->head = -1; b->tail = 0; b->size = (int) n; return GSL_SUCCESS; } /* empty the buffer */ static int ringbuf_empty(ringbuf * b) { b->head = -1; b->tail = 0; return GSL_SUCCESS; } /* check if buffer is empty */ static int ringbuf_is_empty(const ringbuf * b) { return (b->head == -1); } /* check if buffer is full */ static int ringbuf_is_full(const ringbuf * b) { return ((b->head == 0 && b->tail == b->size - 1) || (b->head == b->tail + 1)); } /* insert element into buffer, overwriting oldest element if necessary */ static int ringbuf_insert(const ringbuf_type_t x, ringbuf * b) { if (b->head == -1) /* buffer is empty */ { b->head = 0; b->tail = 0; } else if (b->head == 0) /* head is in first position, wrap to end */ { b->head = b->size - 1; if (b->tail == b->head && b->size > 1) --(b->tail); /* buffer is full so decrease tail */ } else /* decrement head */ { --(b->head); if (b->tail == b->head) { /* buffer is full so update tail */ if (b->tail == 0) b->tail = b->size - 1; else --(b->tail); } } /* insert element */ b->array[b->head] = x; return GSL_SUCCESS; } static int ringbuf_pop_back(ringbuf * b) { if (ringbuf_is_empty(b) || b->tail < 0) { GSL_ERROR("buffer is empty", GSL_EBADLEN); } else { if (b->head == b->tail) /* buffer has only one element */ { b->head = -1; b->tail = -1; } else if (b->tail == 0) /* tail is in first position, wrap to end */ { b->tail = b->size - 1; } else /* decrement tail */ { --(b->tail); } return GSL_SUCCESS; } } static ringbuf_type_t ringbuf_peek(const int i, const ringbuf * b) { if (ringbuf_is_empty(b)) { GSL_ERROR("buffer is empty", GSL_EBADLEN); } else { return b->array[(b->head + i) % b->size]; } } static ringbuf_type_t ringbuf_peek_front(const ringbuf * b) { if (ringbuf_is_empty(b)) { GSL_ERROR("buffer is empty", GSL_EBADLEN); } else { return b->array[b->head]; } } static ringbuf_type_t ringbuf_peek_back(const ringbuf * b) { if (ringbuf_is_empty(b) || b->tail < 0) { GSL_ERROR("buffer is empty", GSL_EBADLEN); } else { return b->array[b->tail]; } } static size_t ringbuf_copy(double * dest, const ringbuf * b) { if (ringbuf_is_empty(b) || b->tail < 0) { return 0; } else { const int n = ringbuf_n(b); int i; for (i = 0; i < n; ++i) dest[i] = b->array[(b->head + i) % b->size]; return (size_t) n; } } static int ringbuf_n(const ringbuf * b) { const int n = (b->head > b->tail) ? (b->size - b->head + b->tail + 1) : (b->tail - b->head + 1); return n; } #endif /* __GSL_RINGBUF_C__ */ gsl/movstat/test_qqr.c0000644000175000017500000001224513536674414013441 0ustar eddedd/* movstat/test_qqr.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* compute moving QQR by explicitely constructing window and computing QQR */ int slow_movqqr(const gsl_movstat_end_t etype, const double q, const gsl_vector * x, gsl_vector * y, const int H, const int J) { const size_t n = x->size; const int K = H + J + 1; double *window = malloc(K * sizeof(double)); size_t i; for (i = 0; i < n; ++i) { size_t wsize = gsl_movstat_fill(etype, x, i, H, J, window); double quant1, quant2; gsl_sort(window, 1, wsize); quant1 = gsl_stats_quantile_from_sorted_data(window, 1, wsize, q); quant2 = gsl_stats_quantile_from_sorted_data(window, 1, wsize, 1.0 - q); gsl_vector_set(y, i, quant2 - quant1); } free(window); return GSL_SUCCESS; } static double func_qqr(const size_t n, double x[], void * params) { double q = *(double *) params; double quant1, quant2; (void) params; gsl_sort(x, 1, n); quant1 = gsl_stats_quantile_from_sorted_data(x, 1, n, q); quant2 = gsl_stats_quantile_from_sorted_data(x, 1, n, 1.0 - q); return (quant2 - quant1); } static void test_qqr_proc(const double tol, const double q, const size_t n, const size_t H, const size_t J, const gsl_movstat_end_t etype, gsl_rng * rng_p) { gsl_movstat_workspace * w = gsl_movstat_alloc2(H, J); gsl_vector * x = gsl_vector_alloc(n); gsl_vector * y = gsl_vector_alloc(n); gsl_vector * z = gsl_vector_alloc(n); gsl_movstat_function F; char buf[2048]; F.function = func_qqr; F.params = (void *) &q; random_vector(x, rng_p); /* y = QQR(x) with slow brute force method */ slow_movqqr(etype, q, x, y, H, J); /* y = QQR(x) with fast method */ gsl_movstat_qqr(etype, x, q, z, w); /* test y = z */ sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u QQR random", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = QQR(x) in-place */ gsl_vector_memcpy(z, x); gsl_movstat_qqr(etype, z, q, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u QQR random in-place", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = QQR(x) with user-defined function */ gsl_movstat_apply(etype, &F, x, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u QQR user", n, H, J, etype); compare_vectors(tol, z, y, buf); gsl_movstat_free(w); gsl_vector_free(x); gsl_vector_free(y); gsl_vector_free(z); } static void test_qqr(gsl_rng * rng_p) { const double eps = 1.0e-10; test_qqr_proc(eps, 0.1, 100, 0, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_qqr_proc(eps, 0.1, 1000, 3, 3, GSL_MOVSTAT_END_PADZERO, rng_p); test_qqr_proc(eps, 0.2, 1000, 0, 5, GSL_MOVSTAT_END_PADZERO, rng_p); test_qqr_proc(eps, 0.3, 1000, 5, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_qqr_proc(eps, 0.25, 2000, 10, 5, GSL_MOVSTAT_END_PADZERO, rng_p); test_qqr_proc(eps, 0.4, 2000, 5, 10, GSL_MOVSTAT_END_PADZERO, rng_p); test_qqr_proc(eps, 0.25, 20, 50, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_qqr_proc(eps, 0.25, 20, 10, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_qqr_proc(eps, 0.25, 20, 50, 10, GSL_MOVSTAT_END_PADZERO, rng_p); test_qqr_proc(eps, 0.1, 100, 0, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_qqr_proc(eps, 0.1, 1000, 3, 3, GSL_MOVSTAT_END_PADVALUE, rng_p); test_qqr_proc(eps, 0.2, 1000, 0, 5, GSL_MOVSTAT_END_PADVALUE, rng_p); test_qqr_proc(eps, 0.3, 1000, 5, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_qqr_proc(eps, 0.25, 2000, 10, 5, GSL_MOVSTAT_END_PADVALUE, rng_p); test_qqr_proc(eps, 0.4, 2000, 5, 10, GSL_MOVSTAT_END_PADVALUE, rng_p); test_qqr_proc(eps, 0.25, 20, 50, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_qqr_proc(eps, 0.25, 20, 10, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_qqr_proc(eps, 0.25, 20, 50, 10, GSL_MOVSTAT_END_PADVALUE, rng_p); test_qqr_proc(eps, 0.1, 100, 0, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_qqr_proc(eps, 0.1, 1000, 3, 3, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_qqr_proc(eps, 0.2, 1000, 0, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_qqr_proc(eps, 0.3, 1000, 5, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_qqr_proc(eps, 0.25, 2000, 10, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_qqr_proc(eps, 0.4, 2000, 5, 10, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_qqr_proc(eps, 0.25, 20, 50, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_qqr_proc(eps, 0.25, 20, 10, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_qqr_proc(eps, 0.25, 20, 50, 10, GSL_MOVSTAT_END_TRUNCATE, rng_p); } gsl/movstat/movminmax.c0000644000175000017500000000464313536674414013615 0ustar eddedd/* movstat/movminmax.c * * Routines related to a moving window min/max * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* gsl_movstat_minmax() Apply minmax filter to input vector Inputs: endtype - end point handling criteria x - input vector, size n y_min - output vector of minimum values, size n y_max - output vector of maximum values, size n w - workspace */ int gsl_movstat_minmax(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y_min, gsl_vector * y_max, gsl_movstat_workspace * w) { int status = gsl_movstat_apply_accum(endtype, x, gsl_movstat_accum_minmax, NULL, y_min, y_max, w); return status; } /* gsl_movstat_min() Apply minimum filter to input vector Inputs: endtype - end point handling criteria x - input vector, size n y - output vector of minimum values, size n w - workspace */ int gsl_movstat_min(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w) { int status = gsl_movstat_apply_accum(endtype, x, gsl_movstat_accum_min, NULL, y, NULL, w); return status; } /* gsl_movstat_max() Apply maximum filter to input vector Inputs: endtype - end point handling criteria x - input vector, size n y - output vector of maximum values, size n w - workspace */ int gsl_movstat_max(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w) { int status = gsl_movstat_apply_accum(endtype, x, gsl_movstat_accum_max, NULL, y, NULL, w); return status; } gsl/movstat/Makefile.am0000644000175000017500000000246213536675317013472 0ustar eddeddnoinst_LTLIBRARIES = libgslmovstat.la pkginclude_HEADERS = gsl_movstat.h AM_CPPFLAGS = -I$(top_srcdir) libgslmovstat_la_SOURCES = \ alloc.c \ apply.c \ fill.c \ funcacc.c \ madacc.c \ medacc.c \ mmacc.c \ movmad.c \ movmean.c \ movmedian.c \ movminmax.c \ movsum.c \ movSn.c \ movQn.c \ movqqr.c \ movvariance.c \ mvacc.c \ qnacc.c \ qqracc.c \ snacc.c \ sumacc.c noinst_HEADERS = deque.c ringbuf.c test_mad.c test_mean.c test_median.c test_minmax.c test_Qn.c test_qqr.c test_Sn.c test_sum.c test_variance.c check_PROGRAMS = test TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslmovstat.la ../statistics/libgslstatistics.la ../sort/libgslsort.la ../ieee-utils/libgslieeeutils.la ../randist/libgslrandist.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../complex/libgslcomplex.la ../err/libgslerr.la ../test/libgsltest.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../sys/libgslsys.la ../utils/libutils.la gsl/movstat/test_mean.c0000644000175000017500000001123513536674414013554 0ustar eddedd/* movstat/test_mean.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* compute moving mean by explicitely constructing window and computing mean */ int slow_movmean(const gsl_movstat_end_t etype, const gsl_vector * x, gsl_vector * y, const int H, const int J) { const size_t n = x->size; const int K = H + J + 1; double *window = malloc(K * sizeof(double)); size_t i; for (i = 0; i < n; ++i) { size_t wsize = gsl_movstat_fill(etype, x, i, H, J, window); double mean = gsl_stats_mean(window, 1, wsize); gsl_vector_set(y, i, mean); } free(window); return GSL_SUCCESS; } static double func_mean(const size_t n, double x[], void * params) { (void) params; return gsl_stats_mean(x, 1, n); } static void test_mean_proc(const double tol, const size_t n, const size_t H, const size_t J, const gsl_movstat_end_t etype, gsl_rng * rng_p) { gsl_movstat_workspace * w = gsl_movstat_alloc2(H, J); gsl_vector * x = gsl_vector_alloc(n); gsl_vector * y = gsl_vector_alloc(n); gsl_vector * z = gsl_vector_alloc(n); gsl_movstat_function F; char buf[2048]; F.function = func_mean; F.params = NULL; random_vector(x, rng_p); /* y = mean(x) with slow brute force method */ slow_movmean(etype, x, y, H, J); /* y = mean(x) with fast method */ gsl_movstat_mean(etype, x, z, w); /* test y = z */ sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u mean random", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = mean(x) in-place */ gsl_vector_memcpy(z, x); gsl_movstat_mean(etype, z, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u mean random in-place", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = mean(x) with user-defined function */ gsl_movstat_apply(etype, &F, x, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u mean user", n, H, J, etype); compare_vectors(tol, z, y, buf); gsl_movstat_free(w); gsl_vector_free(x); gsl_vector_free(y); gsl_vector_free(z); } static void test_mean(gsl_rng * rng_p) { const double eps = 1.0e-10; test_mean_proc(eps, 1000, 0, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_mean_proc(eps, 1000, 3, 3, GSL_MOVSTAT_END_PADZERO, rng_p); test_mean_proc(eps, 1000, 0, 5, GSL_MOVSTAT_END_PADZERO, rng_p); test_mean_proc(eps, 1000, 5, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_mean_proc(eps, 2000, 10, 5, GSL_MOVSTAT_END_PADZERO, rng_p); test_mean_proc(eps, 2000, 5, 10, GSL_MOVSTAT_END_PADZERO, rng_p); test_mean_proc(eps, 20, 50, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_mean_proc(eps, 20, 10, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_mean_proc(eps, 20, 50, 10, GSL_MOVSTAT_END_PADZERO, rng_p); test_mean_proc(eps, 1000, 0, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mean_proc(eps, 1000, 3, 3, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mean_proc(eps, 1000, 0, 5, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mean_proc(eps, 1000, 5, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mean_proc(eps, 2000, 10, 5, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mean_proc(eps, 2000, 5, 10, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mean_proc(eps, 20, 50, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mean_proc(eps, 20, 10, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mean_proc(eps, 20, 50, 10, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mean_proc(eps, 1000, 0, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mean_proc(eps, 1000, 3, 3, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mean_proc(eps, 1000, 0, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mean_proc(eps, 1000, 5, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mean_proc(eps, 2000, 10, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mean_proc(eps, 2000, 5, 10, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mean_proc(eps, 20, 50, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mean_proc(eps, 20, 10, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mean_proc(eps, 20, 50, 10, GSL_MOVSTAT_END_TRUNCATE, rng_p); } gsl/movstat/alloc.c0000644000175000017500000001036013536674414012665 0ustar eddedd/* movstat/alloc.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* gsl_movstat_alloc() Allocate a workspace for moving window statistics. The window around sample x_i is defined as: W_i^{H,J} = {x_{i-H},...,x_i,...x_{i+J}} The total window size is: K = H + J + 1 Inputs: K - total samples in window (H = J = K / 2) Return: pointer to workspace Notes: 1) If K is even, it is rounded up to the next odd */ gsl_movstat_workspace * gsl_movstat_alloc(const size_t K) { const size_t H = K / 2; return gsl_movstat_alloc_with_size(0, H, H); } /* gsl_movstat_alloc2() Allocate a workspace for moving window statistics. The window around sample x_i is defined as: W_i^{H,J} = {x_{i-H},...,x_i,...x_{i+J}} The total window size is: K = H + J + 1 Inputs: H - number of samples before current sample J - number of samples after current sample Return: pointer to workspace */ gsl_movstat_workspace * gsl_movstat_alloc2(const size_t H, const size_t J) { return gsl_movstat_alloc_with_size(0, H, J); } /* gsl_movstat_alloc_with_size() Allocate a workspace for moving window statistics with predefined workspace size for accumulators. The window around sample x_i is defined as: W_i^{H,J} = {x_{i-H},...,x_i,...x_{i+J}} The total window size is: K = H + J + 1 Inputs: accum_state_size - state size for accumulator (set to zero to use default value) H - number of samples before current sample J - number of samples after current sample Return: pointer to workspace */ gsl_movstat_workspace * gsl_movstat_alloc_with_size(const size_t accum_state_size, const size_t H, const size_t J) { gsl_movstat_workspace *w; size_t state_size = accum_state_size; w = calloc(1, sizeof(gsl_movstat_workspace)); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->H = H; w->J = J; w->K = H + J + 1; if (state_size == 0) { /* * determine maximum number of bytes needed for the various accumulators; * the accumulators will all share the same workspace */ state_size = GSL_MAX(state_size, (gsl_movstat_accum_mad->size)(w->K)); /* MAD accumulator */ state_size = GSL_MAX(state_size, (gsl_movstat_accum_mean->size)(w->K)); /* mean/variance/sd accumulator */ state_size = GSL_MAX(state_size, (gsl_movstat_accum_min->size)(w->K)); /* min/max accumulator */ state_size = GSL_MAX(state_size, (gsl_movstat_accum_sum->size)(w->K)); /* sum accumulator */ state_size = GSL_MAX(state_size, (gsl_movstat_accum_median->size)(w->K)); /* median accumulator */ state_size = GSL_MAX(state_size, (gsl_movstat_accum_Qn->size)(w->K)); /* Q_n accumulator */ state_size = GSL_MAX(state_size, (gsl_movstat_accum_qqr->size)(w->K)); /* QQR accumulator */ state_size = GSL_MAX(state_size, (gsl_movstat_accum_Sn->size)(w->K)); /* S_n accumulator */ } w->state = malloc(state_size); if (w->state == 0) { gsl_movstat_free(w); GSL_ERROR_NULL ("failed to allocate space for accumulator state", GSL_ENOMEM); } w->work = malloc(w->K * sizeof(double)); if (w->work == 0) { gsl_movstat_free(w); GSL_ERROR_NULL ("failed to allocate space for work", GSL_ENOMEM); } w->state_size = state_size; return w; } void gsl_movstat_free(gsl_movstat_workspace * w) { if (w->work) free(w->work); if (w->state) free(w->state); free(w); } gsl/movstat/deque.c0000644000175000017500000001154513536674414012704 0ustar eddedd/* movstat/deque.c * * Double-ended queue based on a circular buffer * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ typedef int deque_type_t; typedef struct { int head; int tail; int size; /* total elements allocated */ deque_type_t *array; } deque; static size_t deque_size(const size_t n); static int deque_init(const size_t n, deque * d); static int deque_empty(deque * d); static int deque_is_empty(const deque * d); static int deque_is_full(const deque * d); static int deque_push_front(const deque_type_t x, deque * d); static int deque_push_back(const deque_type_t x, deque * d); static int deque_pop_front(deque * d); static int deque_pop_back(deque * d); static deque_type_t deque_peek_front(const deque * d); static deque_type_t deque_peek_back(const deque * d); static size_t deque_size(const size_t n) { size_t size = 0; size += sizeof(deque); size += n * sizeof(deque_type_t); /* array */ return size; } static int deque_init(const size_t n, deque * d) { d->head = -1; d->tail = 0; d->size = (int) n; d->array = (deque_type_t *) ((unsigned char *) d + sizeof(deque)); return GSL_SUCCESS; } /* empty the queue */ static int deque_empty(deque * d) { d->head = -1; d->tail = 0; return GSL_SUCCESS; } /* check if queue is empty */ static int deque_is_empty(const deque * d) { return (d->head == -1); } /* check if queue is full */ static int deque_is_full(const deque * d) { return ((d->head == 0 && d->tail == d->size - 1) || (d->head == d->tail + 1)); } static int deque_push_front(const deque_type_t x, deque * d) { if (deque_is_full(d)) { GSL_ERROR("deque is full", GSL_EOVRFLW); } else { if (d->head == -1) /* queue is empty */ { d->head = 0; d->tail = 0; } else if (d->head == 0) /* head is in first position, wrap to end */ { d->head = d->size - 1; } else /* decrement head */ { --(d->head); } /* insert element */ d->array[d->head] = x; return GSL_SUCCESS; } } static int deque_push_back(const deque_type_t x, deque * d) { if (deque_is_full(d)) { GSL_ERROR("deque is full", GSL_EOVRFLW); } else { if (d->head == -1) /* queue is empty */ { d->head = 0; d->tail = 0; } else if (d->tail == d->size - 1) /* tail is in last position, wrap to 0 */ { d->tail = 0; } else /* increment tail */ { ++(d->tail); } /* insert element */ d->array[d->tail] = x; return GSL_SUCCESS; } } static int deque_pop_front(deque * d) { if (deque_is_empty(d)) { GSL_ERROR("cannot pop element from empty queue", GSL_EOVRFLW); } else { if (d->head == d->tail) /* queue has only one element */ { d->head = -1; d->tail = -1; } else if (d->head == d->size - 1) /* head is in last position, wrap to 0 */ { d->head = 0; } else /* increment head */ { ++(d->head); } return GSL_SUCCESS; } } static int deque_pop_back(deque * d) { if (deque_is_empty(d)) { GSL_ERROR("cannot pop element from empty queue", GSL_EOVRFLW); } else { if (d->head == d->tail) /* queue has only one element */ { d->head = -1; d->tail = -1; } else if (d->tail == 0) /* tail is in first position, wrap to end */ { d->tail = d->size - 1; } else /* decrement tail */ { --(d->tail); } return GSL_SUCCESS; } } static deque_type_t deque_peek_front(const deque * d) { if (deque_is_empty(d)) { GSL_ERROR("queue is empty", GSL_EBADLEN); } else { return d->array[d->head]; } } static deque_type_t deque_peek_back(const deque * d) { if (deque_is_empty(d) || d->tail < 0) { GSL_ERROR("queue is empty", GSL_EBADLEN); } else { return d->array[d->tail]; } } gsl/movstat/sumacc.c0000644000175000017500000000507013536674414013050 0ustar eddedd/* movstat/sumacc.c * * Moving window sum accumulator * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include typedef double ringbuf_type_t; #include "ringbuf.c" typedef struct { double sum; /* current window sum */ ringbuf *rbuf; /* ring buffer storing current window */ } sumacc_state_t; static size_t sumacc_size(const size_t n) { size_t size = 0; size += sizeof(sumacc_state_t); size += ringbuf_size(n); return size; } static int sumacc_init(const size_t n, void * vstate) { sumacc_state_t * state = (sumacc_state_t *) vstate; state->sum = 0.0; state->rbuf = (ringbuf *) ((unsigned char *) vstate + sizeof(sumacc_state_t)); ringbuf_init(n, state->rbuf); return GSL_SUCCESS; } static int sumacc_insert(const double x, void * vstate) { sumacc_state_t * state = (sumacc_state_t *) vstate; if (ringbuf_is_full(state->rbuf)) { /* subtract oldest element from sum */ state->sum -= ringbuf_peek_back(state->rbuf); } /* add new element to sum and ring buffer */ state->sum += x; ringbuf_insert(x, state->rbuf); return GSL_SUCCESS; } static int sumacc_delete(void * vstate) { sumacc_state_t * state = (sumacc_state_t *) vstate; if (!ringbuf_is_empty(state->rbuf)) { state->sum -= ringbuf_peek_back(state->rbuf); ringbuf_pop_back(state->rbuf); } return GSL_SUCCESS; } static int sumacc_get(void * params, double * result, const void * vstate) { const sumacc_state_t * state = (const sumacc_state_t *) vstate; (void) params; *result = state->sum; return GSL_SUCCESS; } static const gsl_movstat_accum sum_accum_type = { sumacc_size, sumacc_init, sumacc_insert, sumacc_delete, sumacc_get }; const gsl_movstat_accum *gsl_movstat_accum_sum = &sum_accum_type; gsl/movstat/test_mad.c0000644000175000017500000001420613536674414013376 0ustar eddedd/* movstat/test_mad.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* compute filtered data by explicitely constructing window and finding MAD */ int slow_movmad(const gsl_movstat_end_t etype, const gsl_vector * x, gsl_vector * y, const int H, const int J) { const size_t n = x->size; const int K = H + J + 1; double *window = malloc(K * sizeof(double)); size_t i; for (i = 0; i < n; ++i) { size_t wsize = gsl_movstat_fill(etype, x, i, H, J, window); double median = gsl_stats_median(window, 1, wsize); double mad; size_t j; for (j = 0; j < wsize; ++j) window[j] = fabs(window[j] - median); mad = gsl_stats_median(window, 1, wsize); gsl_vector_set(y, i, mad); } free(window); return GSL_SUCCESS; } static double func_mad(const size_t n, double x[], void * params) { double *work = malloc(n * sizeof(double)); double mad; (void) params; mad = gsl_stats_mad0(x, 1, n, work); free(work); return mad; } static void test_mad_proc(const double tol, const size_t n, const size_t H, const size_t J, const gsl_movstat_end_t etype, gsl_rng *rng_p) { const double scale = 1.482602218505602; gsl_movstat_workspace *w; gsl_vector *x = gsl_vector_alloc(n); gsl_vector *y = gsl_vector_alloc(n); gsl_vector *z = gsl_vector_alloc(n); gsl_vector *med1 = gsl_vector_alloc(n); gsl_vector *med2 = gsl_vector_alloc(n); gsl_movstat_function F; char buf[2048]; F.function = func_mad; F.params = NULL; if (H == J) w = gsl_movstat_alloc(2*H + 1); else w = gsl_movstat_alloc2(H, J); /* test moving MAD with random input */ random_vector(x, rng_p); /* y = MAD(x) with slow brute force algorithm */ slow_movmad(etype, x, y, H, J); /* z = MAD(x) */ gsl_movstat_mad0(etype, x, med1, z, w); /* med2 = median(x) */ gsl_movstat_median(etype, x, med2, w); /* test y = z */ sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u MAD0 random", n, H, J, etype); compare_vectors(tol, z, y, buf); /* test med1 = med2 */ sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u MAD0 random median test", n, H, J, etype); compare_vectors(tol, med1, med2, buf); /* z = MAD(x) in-place */ gsl_vector_memcpy(z, x); gsl_movstat_mad0(etype, z, med1, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u MAD0 random in-place", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = MAD(x) with user-defined function */ gsl_movstat_apply(etype, &F, x, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u MAD0 user", n, H, J, etype); compare_vectors(tol, z, y, buf); /* test scaled MAD function */ /* z = MAD(x) */ gsl_movstat_mad(etype, x, med1, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u MAD random", n, H, J, etype); gsl_vector_scale(y, scale); compare_vectors(tol, z, y, buf); gsl_vector_free(x); gsl_vector_free(y); gsl_vector_free(z); gsl_vector_free(med1); gsl_vector_free(med2); gsl_movstat_free(w); } static void test_mad(gsl_rng * rng_p) { test_mad_proc(GSL_DBL_EPSILON, 100, 0, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_mad_proc(GSL_DBL_EPSILON, 1000, 1, 1, GSL_MOVSTAT_END_PADZERO, rng_p); test_mad_proc(GSL_DBL_EPSILON, 5000, 8, 8, GSL_MOVSTAT_END_PADZERO, rng_p); test_mad_proc(GSL_DBL_EPSILON, 5000, 0, 5, GSL_MOVSTAT_END_PADZERO, rng_p); test_mad_proc(GSL_DBL_EPSILON, 5000, 5, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_mad_proc(GSL_DBL_EPSILON, 5000, 15, 10, GSL_MOVSTAT_END_PADZERO, rng_p); test_mad_proc(GSL_DBL_EPSILON, 5000, 10, 15, GSL_MOVSTAT_END_PADZERO, rng_p); test_mad_proc(GSL_DBL_EPSILON, 50, 100, 150, GSL_MOVSTAT_END_PADZERO, rng_p); test_mad_proc(GSL_DBL_EPSILON, 50, 150, 100, GSL_MOVSTAT_END_PADZERO, rng_p); test_mad_proc(GSL_DBL_EPSILON, 50, 100, 100, GSL_MOVSTAT_END_PADZERO, rng_p); test_mad_proc(GSL_DBL_EPSILON, 100, 0, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 1000, 1, 1, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 5000, 8, 8, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 5000, 0, 5, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 5000, 5, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 5000, 15, 10, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 5000, 10, 15, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 50, 100, 150, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 50, 150, 100, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 50, 100, 100, GSL_MOVSTAT_END_PADVALUE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 100, 0, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 1000, 1, 1, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 5000, 8, 8, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 5000, 0, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 5000, 5, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 5000, 15, 10, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 5000, 10, 15, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 50, 100, 150, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 50, 150, 100, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_mad_proc(GSL_DBL_EPSILON, 50, 100, 100, GSL_MOVSTAT_END_TRUNCATE, rng_p); } gsl/movstat/movQn.c0000644000175000017500000000315013536674414012672 0ustar eddedd/* movstat/movQn.c * * Compute moving "Q_n" statistic from Croux and Rousseeuw, 1992 * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include /* gsl_movstat_Qn() Calculate moving Q_n statistic for input vector Inputs: endtype - how to handle end points x - input vector, size n xscale - (output) vector of "Q_n" statistics, size n xscale_i = (Q_n)_i for i-th window: w - workspace */ int gsl_movstat_Qn(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * xscale, gsl_movstat_workspace * w) { int status = gsl_movstat_apply_accum(endtype, x, gsl_movstat_accum_Qn, NULL, xscale, NULL, w); return status; } gsl/movstat/mvacc.c0000644000175000017500000001125513536674414012670 0ustar eddedd/* movstat/mvacc.c * * Moving window mean/variance accumulator - based on a modification * to Welford's algorithm, discussed here: * * https://stackoverflow.com/a/6664212 * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include typedef double ringbuf_type_t; #include "ringbuf.c" typedef struct { size_t n; /* window size */ size_t k; /* number of samples currently in window */ double mean; /* current window mean */ double M2; /* current window M2 */ ringbuf *rbuf; /* ring buffer storing current window */ } mvacc_state_t; static size_t mvacc_size(const size_t n) { size_t size = 0; size += sizeof(mvacc_state_t); size += ringbuf_size(n); return size; } static int mvacc_init(const size_t n, void * vstate) { mvacc_state_t * state = (mvacc_state_t *) vstate; state->n = n; state->k = 0; state->mean = 0.0; state->M2 = 0.0; state->rbuf = (ringbuf *) ((unsigned char *) vstate + sizeof(mvacc_state_t)); ringbuf_init(n, state->rbuf); return GSL_SUCCESS; } static int mvacc_insert(const double x, void * vstate) { mvacc_state_t * state = (mvacc_state_t *) vstate; if (ringbuf_is_full(state->rbuf)) { /* remove oldest window element and add new one */ double old = ringbuf_peek_back(state->rbuf); double prev_mean = state->mean; state->mean += (x - old) / (double) state->n; state->M2 += ((old - prev_mean) + (x - state->mean)) * (x - old); } else { double delta = x - state->mean; /* * Welford algorithm: * * mu_new = mu_old + (x - mu_old) / n * M2_new = M2_old + (x - mu_old) * (x - mu_new) */ ++(state->k); state->mean += delta / (double) state->k; state->M2 += delta * (x - state->mean); } /* add new element to ring buffer */ ringbuf_insert(x, state->rbuf); return GSL_SUCCESS; } static int mvacc_delete(void * vstate) { mvacc_state_t * state = (mvacc_state_t *) vstate; if (!ringbuf_is_empty(state->rbuf)) { if (state->k > 1) { /* * mu_new = mu_old + (mu_old - x_old) / (n - 1) * M2_new = M2_old - (mu_old - x_old) * (mu_new - x_old) */ double old = ringbuf_peek_back(state->rbuf); double prev_mean = state->mean; double delta = prev_mean - old; state->mean += delta / (state->k - 1.0); state->M2 -= delta * (state->mean - old); } else if (state->k == 1) { state->mean = 0.0; state->M2 = 0.0; } ringbuf_pop_back(state->rbuf); --(state->k); } return GSL_SUCCESS; } static int mvacc_mean(void * params, double * result, const void * vstate) { const mvacc_state_t * state = (const mvacc_state_t *) vstate; (void) params; *result = state->mean; return GSL_SUCCESS; } static int mvacc_variance(void * params, double * result, const void * vstate) { const mvacc_state_t * state = (const mvacc_state_t *) vstate; (void) params; if (state->k < 2) *result = 0.0; else *result = state->M2 / (state->k - 1.0); return GSL_SUCCESS; } static int mvacc_sd(void * params, double * result, const void * vstate) { double variance; int status = mvacc_variance(params, &variance, vstate); *result = sqrt(variance); return status; } static const gsl_movstat_accum mean_accum_type = { mvacc_size, mvacc_init, mvacc_insert, mvacc_delete, mvacc_mean }; const gsl_movstat_accum *gsl_movstat_accum_mean = &mean_accum_type; static const gsl_movstat_accum variance_accum_type = { mvacc_size, mvacc_init, mvacc_insert, mvacc_delete, mvacc_variance }; const gsl_movstat_accum *gsl_movstat_accum_variance = &variance_accum_type; static const gsl_movstat_accum sd_accum_type = { mvacc_size, mvacc_init, mvacc_insert, mvacc_delete, mvacc_sd }; const gsl_movstat_accum *gsl_movstat_accum_sd = &sd_accum_type; gsl/movstat/movmedian.c0000644000175000017500000000261713536674414013560 0ustar eddedd/* movstat/movmedian.c * * Routines related to a moving window median * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* gsl_movstat_median() Apply median filter to input vector Inputs: endtype - end point handling criteria x - input vector, size n y - output vector, size n w - workspace */ int gsl_movstat_median(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w) { int status = gsl_movstat_apply_accum(endtype, x, gsl_movstat_accum_median, NULL, y, NULL, w); return status; } gsl/movstat/test_Sn.c0000644000175000017500000001231013536674414013207 0ustar eddedd/* movstat/test_Sn.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* calculate S_n statistic for input vector using slow/naive algorithm */ static int slow_movSn(const gsl_movstat_end_t etype, const gsl_vector * x, gsl_vector * y, const int H, const int J) { const size_t n = x->size; const int K = H + J + 1; double *window = malloc(K * sizeof(double)); double *work = malloc(K * sizeof(double)); size_t i; for (i = 0; i < n; ++i) { size_t wsize = gsl_movstat_fill(etype, x, i, H, J, window); double Sn; gsl_sort(window, 1, wsize); Sn = gsl_stats_Sn_from_sorted_data(window, 1, wsize, work); gsl_vector_set(y, i, Sn); } free(window); free(work); return GSL_SUCCESS; } static double func_Sn(const size_t n, double x[], void * params) { double *work = malloc(n * sizeof(double)); double Sn; (void) params; gsl_sort(x, 1, n); Sn = gsl_stats_Sn_from_sorted_data(x, 1, n, work); free(work); return Sn; } static void test_Sn_proc(const double tol, const size_t n, const size_t H, const size_t J, const gsl_movstat_end_t etype, gsl_rng *rng_p) { gsl_movstat_workspace *w; gsl_vector *x = gsl_vector_alloc(n); gsl_vector *y = gsl_vector_alloc(n); gsl_vector *z = gsl_vector_alloc(n); gsl_movstat_function F; char buf[2048]; F.function = func_Sn; F.params = NULL; if (H == J) w = gsl_movstat_alloc(2*H + 1); else w = gsl_movstat_alloc2(H, J); /* test moving median with random input */ random_vector(x, rng_p); /* y = S_n(x) with slow brute force algorithm */ slow_movSn(etype, x, y, H, J); /* z = S_n(x) */ gsl_movstat_Sn(etype, x, z, w); /* test y = z */ sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u Sn random", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = S_n(x) in-place */ gsl_vector_memcpy(z, x); gsl_movstat_Sn(etype, z, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u Sn random in-place", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = S_n(x) with user-defined function */ gsl_movstat_apply(etype, &F, x, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u Sn user", n, H, J, etype); compare_vectors(tol, z, y, buf); gsl_vector_free(x); gsl_vector_free(y); gsl_vector_free(z); gsl_movstat_free(w); } static void test_Sn(gsl_rng * rng_p) { test_Sn_proc(GSL_DBL_EPSILON, 1000, 0, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 1000, 5, 5, GSL_MOVSTAT_END_PADZERO, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 1000, 5, 2, GSL_MOVSTAT_END_PADZERO, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 1000, 2, 5, GSL_MOVSTAT_END_PADZERO, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 2000, 50, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 2000, 0, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 20, 50, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 20, 1, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 20, 50, 1, GSL_MOVSTAT_END_PADZERO, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 1000, 0, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 1000, 5, 5, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 1000, 5, 2, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 1000, 2, 5, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 2000, 50, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 2000, 0, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 20, 50, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 20, 1, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 20, 50, 1, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 1000, 0, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 1000, 5, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 1000, 5, 2, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 1000, 2, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 2000, 50, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 2000, 0, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 20, 50, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 20, 1, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Sn_proc(GSL_DBL_EPSILON, 20, 50, 1, GSL_MOVSTAT_END_TRUNCATE, rng_p); } gsl/movstat/gsl_movstat.h0000644000175000017500000001376413536675317014160 0ustar eddedd/* movstat/gsl_movstat.h * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MOVSTAT_H__ #define __GSL_MOVSTAT_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef enum { GSL_MOVSTAT_END_PADZERO, GSL_MOVSTAT_END_PADVALUE, GSL_MOVSTAT_END_TRUNCATE } gsl_movstat_end_t; /* accumulator struct * size - return number of bytes needed for accumulator with maximum of n elements * init - initialize accumulator state * insert - insert a single sample into accumulator; if there are already n * samples in accumulator, oldest sample is overwritten * delete_oldest - delete oldest sample from accumulator * get - return accumulated value */ typedef struct { size_t (*size) (const size_t n); int (*init) (const size_t n, void * vstate); int (*insert) (const double x, void * vstate); int (*delete_oldest) (void * vstate); int (*get) (void * params, double * result, const void * vstate); } gsl_movstat_accum; typedef struct { double (* function) (const size_t n, double x[], void * params); void * params; } gsl_movstat_function; #define GSL_MOVSTAT_FN_EVAL(F,n,x) (*((F)->function))((n),(x),(F)->params) /* workspace for moving window statistics */ typedef struct { size_t H; /* number of previous samples in window */ size_t J; /* number of after samples in window */ size_t K; /* window size K = H + J + 1 */ double *work; /* workspace, size K */ void *state; /* state workspace for various accumulators */ size_t state_size; /* bytes allocated for 'state' */ } gsl_movstat_workspace; /* alloc.c */ gsl_movstat_workspace *gsl_movstat_alloc(const size_t K); gsl_movstat_workspace *gsl_movstat_alloc2(const size_t H, const size_t J); gsl_movstat_workspace *gsl_movstat_alloc_with_size(const size_t accum_state_size, const size_t H, const size_t J); void gsl_movstat_free(gsl_movstat_workspace * w); /* apply.c */ int gsl_movstat_apply_accum(const gsl_movstat_end_t endtype, const gsl_vector * x, const gsl_movstat_accum * accum, void * accum_params, gsl_vector * y, gsl_vector * z, gsl_movstat_workspace * w); int gsl_movstat_apply(const gsl_movstat_end_t endtype, const gsl_movstat_function * F, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w); /* fill.c */ size_t gsl_movstat_fill(const gsl_movstat_end_t endtype, const gsl_vector * x, const size_t idx, const size_t H, const size_t J, double * window); int gsl_movstat_mean(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w); int gsl_movstat_variance(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w); int gsl_movstat_sd(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w); int gsl_movstat_median(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w); int gsl_movstat_min(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w); int gsl_movstat_max(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w); int gsl_movstat_minmax(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y_min, gsl_vector * y_max, gsl_movstat_workspace * w); int gsl_movstat_mad0(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * xmedian, gsl_vector * xmad, gsl_movstat_workspace * w); int gsl_movstat_mad(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * xmedian, gsl_vector * xmad, gsl_movstat_workspace * w); int gsl_movstat_qqr(const gsl_movstat_end_t endtype, const gsl_vector * x, const double q, gsl_vector * xqqr, gsl_movstat_workspace * w); int gsl_movstat_Sn(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * xscale, gsl_movstat_workspace * w); int gsl_movstat_Qn(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * xscale, gsl_movstat_workspace * w); int gsl_movstat_sum(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w); /* accumulator variables */ GSL_VAR const gsl_movstat_accum * gsl_movstat_accum_mad; GSL_VAR const gsl_movstat_accum * gsl_movstat_accum_max; GSL_VAR const gsl_movstat_accum * gsl_movstat_accum_mean; GSL_VAR const gsl_movstat_accum * gsl_movstat_accum_median; GSL_VAR const gsl_movstat_accum * gsl_movstat_accum_min; GSL_VAR const gsl_movstat_accum * gsl_movstat_accum_minmax; GSL_VAR const gsl_movstat_accum * gsl_movstat_accum_sd; GSL_VAR const gsl_movstat_accum * gsl_movstat_accum_Sn; GSL_VAR const gsl_movstat_accum * gsl_movstat_accum_sum; GSL_VAR const gsl_movstat_accum * gsl_movstat_accum_Qn; GSL_VAR const gsl_movstat_accum * gsl_movstat_accum_qqr; GSL_VAR const gsl_movstat_accum * gsl_movstat_accum_userfunc; GSL_VAR const gsl_movstat_accum * gsl_movstat_accum_variance; __END_DECLS #endif /* __GSL_MOVSTAT_H__ */ gsl/movstat/test_Qn.c0000644000175000017500000001257213536674414013217 0ustar eddedd/* movstat/test_Qn.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include /* calculate Q_n statistic for input vector using slow/naive algorithm */ static int slow_movQn(const gsl_movstat_end_t etype, const gsl_vector * x, gsl_vector * y, const int H, const int J) { const size_t n = x->size; const int K = H + J + 1; double *window = malloc(K * sizeof(double)); double *work = malloc(3 * K * sizeof(double)); int *work_int = malloc(5 * K * sizeof(int)); size_t i; for (i = 0; i < n; ++i) { size_t wsize = gsl_movstat_fill(etype, x, i, H, J, window); double Qn; gsl_sort(window, 1, wsize); Qn = gsl_stats_Qn_from_sorted_data(window, 1, wsize, work, work_int); gsl_vector_set(y, i, Qn); } free(window); free(work); free(work_int); return GSL_SUCCESS; } static double func_Qn(const size_t n, double x[], void * params) { double *work = malloc(3 * n * sizeof(double)); int *work_int = malloc(5 * n * sizeof(int)); double Qn; (void) params; gsl_sort(x, 1, n); Qn = gsl_stats_Qn_from_sorted_data(x, 1, n, work, work_int); free(work); free(work_int); return Qn; } static void test_Qn_proc(const double tol, const size_t n, const size_t H, const size_t J, const gsl_movstat_end_t etype, gsl_rng *rng_p) { gsl_movstat_workspace *w; gsl_vector *x = gsl_vector_alloc(n); gsl_vector *y = gsl_vector_alloc(n); gsl_vector *z = gsl_vector_alloc(n); gsl_movstat_function F; char buf[2048]; F.function = func_Qn; F.params = NULL; if (H == J) w = gsl_movstat_alloc(2*H + 1); else w = gsl_movstat_alloc2(H, J); /* test moving median with random input */ random_vector(x, rng_p); /* y = Q_n(x) with slow brute force algorithm */ slow_movQn(etype, x, y, H, J); /* z = Q_n(x) */ gsl_movstat_Qn(etype, x, z, w); /* test y = z */ sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u Qn random", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = Q_n(x) in-place */ gsl_vector_memcpy(z, x); gsl_movstat_Qn(etype, z, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u Qn random in-place", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = Q_n(x) with user-defined function */ gsl_movstat_apply(etype, &F, x, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u Qn user", n, H, J, etype); compare_vectors(tol, z, y, buf); gsl_vector_free(x); gsl_vector_free(y); gsl_vector_free(z); gsl_movstat_free(w); } static void test_Qn(gsl_rng * rng_p) { test_Qn_proc(GSL_DBL_EPSILON, 1000, 0, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 1000, 5, 5, GSL_MOVSTAT_END_PADZERO, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 1000, 5, 2, GSL_MOVSTAT_END_PADZERO, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 1000, 2, 5, GSL_MOVSTAT_END_PADZERO, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 2000, 50, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 2000, 0, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 20, 50, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 20, 1, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 20, 50, 1, GSL_MOVSTAT_END_PADZERO, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 1000, 0, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 1000, 5, 5, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 1000, 5, 2, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 1000, 2, 5, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 2000, 50, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 2000, 0, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 20, 50, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 20, 1, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 20, 50, 1, GSL_MOVSTAT_END_PADVALUE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 1000, 0, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 1000, 5, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 1000, 5, 2, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 1000, 2, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 2000, 50, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 2000, 0, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 20, 50, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 20, 1, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_Qn_proc(GSL_DBL_EPSILON, 20, 50, 1, GSL_MOVSTAT_END_TRUNCATE, rng_p); } gsl/movstat/movsum.c0000644000175000017500000000257513536674414013132 0ustar eddedd/* movstat/movsum.c * * Routines related to a moving window sum * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* gsl_movstat_sum() Apply moving sum to input vector Inputs: endtype - end point handling criteria x - input vector, size n y - output vector, size n w - workspace */ int gsl_movstat_sum(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w) { int status = gsl_movstat_apply_accum(endtype, x, gsl_movstat_accum_sum, NULL, y, NULL, w); return status; } gsl/movstat/funcacc.c0000644000175000017500000000541613536674414013203 0ustar eddedd/* movstat/funcacc.c * * Moving window accumulator for arbitrary user-defined function * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include typedef double funcacc_type_t; typedef funcacc_type_t ringbuf_type_t; #include "ringbuf.c" typedef struct { funcacc_type_t *window; /* linear array for current window */ ringbuf *rbuf; /* ring buffer storing current window */ } funcacc_state_t; static size_t funcacc_size(const size_t n) { size_t size = 0; size += sizeof(funcacc_state_t); size += n * sizeof(funcacc_type_t); size += ringbuf_size(n); return size; } static int funcacc_init(const size_t n, void * vstate) { funcacc_state_t * state = (funcacc_state_t *) vstate; state->window = (funcacc_type_t *) ((unsigned char *) vstate + sizeof(funcacc_state_t)); state->rbuf = (ringbuf *) ((unsigned char *) state->window + n * sizeof(funcacc_type_t)); ringbuf_init(n, state->rbuf); return GSL_SUCCESS; } static int funcacc_insert(const funcacc_type_t x, void * vstate) { funcacc_state_t * state = (funcacc_state_t *) vstate; /* add new element to ring buffer */ ringbuf_insert(x, state->rbuf); return GSL_SUCCESS; } static int funcacc_delete(void * vstate) { funcacc_state_t * state = (funcacc_state_t *) vstate; if (!ringbuf_is_empty(state->rbuf)) ringbuf_pop_back(state->rbuf); return GSL_SUCCESS; } static int funcacc_get(void * params, funcacc_type_t * result, const void * vstate) { const funcacc_state_t * state = (const funcacc_state_t *) vstate; gsl_movstat_function *f = (gsl_movstat_function *) params; size_t n = ringbuf_copy(state->window, state->rbuf); *result = GSL_MOVSTAT_FN_EVAL(f, n, state->window); return GSL_SUCCESS; } static const gsl_movstat_accum func_accum_type = { funcacc_size, funcacc_init, funcacc_insert, funcacc_delete, funcacc_get }; const gsl_movstat_accum *gsl_movstat_accum_userfunc = &func_accum_type; gsl/movstat/apply.c0000644000175000017500000001471113536675317012727 0ustar eddedd/* movstat/apply.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include /* gsl_movstat_apply_accum() Apply moving window statistic to input vector. This is a generalized routine to handle window endpoints and apply a given accumulator to the input vector. Inputs: endtype - end point handling criteria x - input vector, size n accum - accumulator to apply moving window statistic accum_params - parameters to pass to accumulator y - output vector, size n z - second output vector (i.e. minmax), size n; can be NULL w - workspace Notes: 1) It is allowed to have x = y for in-place moving statistics */ int gsl_movstat_apply_accum(const gsl_movstat_end_t endtype, const gsl_vector * x, const gsl_movstat_accum * accum, void * accum_params, gsl_vector * y, gsl_vector * z, gsl_movstat_workspace * w) { if (x->size != y->size) { GSL_ERROR("input and output vectors must have same length", GSL_EBADLEN); } else if (z != NULL && x->size != z->size) { GSL_ERROR("input and output vectors must have same length", GSL_EBADLEN); } else { const int n = (int) x->size; const int H = w->H; /* number of samples to left of current sample */ const int J = w->J; /* number of samples to right of current sample */ int i; double x1 = 0.0; /* pad values for data edges */ double xN = 0.0; double result[2]; /* initialize accumulator */ (accum->init)(w->K, w->state); /* pad initial window if necessary */ if (endtype != GSL_MOVSTAT_END_TRUNCATE) { if (endtype == GSL_MOVSTAT_END_PADZERO) { x1 = 0.0; xN = 0.0; } else if (endtype == GSL_MOVSTAT_END_PADVALUE) { x1 = gsl_vector_get(x, 0); xN = gsl_vector_get(x, n - 1); } /* pad initial windows with H values */ for (i = 0; i < H; ++i) (accum->insert)(x1, w->state); } else if (accum->delete_oldest == NULL) /* FIXME XXX */ { /* save last K - 1 samples of x for later (needed for in-place input/output) */ int idx1 = GSL_MAX(n - J - H, 0); int idx2 = n - 1; for (i = idx1; i <= idx2; ++i) w->work[i - idx1] = gsl_vector_get(x, i); } /* process input vector and fill y(0:n - J - 1) */ for (i = 0; i < n; ++i) { double xi = gsl_vector_get(x, i); int idx = i - J; (accum->insert)(xi, w->state); if (idx >= 0) { (accum->get)(accum_params, result, w->state); gsl_vector_set(y, idx, result[0]); if (z != NULL) gsl_vector_set(z, idx, result[1]); } } if (endtype == GSL_MOVSTAT_END_TRUNCATE) { /* need to fill y(n-J:n-1) using shrinking windows */ int idx1 = GSL_MAX(n - J, 0); int idx2 = n - 1; if (accum->delete_oldest == NULL) { int wsize = n - GSL_MAX(n - J - H, 0); /* size of work array */ for (i = idx1; i <= idx2; ++i) { int nsamp = n - GSL_MAX(i - H, 0); /* number of samples in this window */ int j; (accum->init)(w->K, w->state); for (j = wsize - nsamp; j < wsize; ++j) (accum->insert)(w->work[j], w->state); /* yi = acc_get [ work(i:K-2) ] */ (accum->get)(accum_params, result, w->state); gsl_vector_set(y, i, result[0]); if (z != NULL) gsl_vector_set(z, i, result[1]); } } else { for (i = idx1; i <= idx2; ++i) { if (i - H > 0) { /* delete oldest window sample as we move closer to edge */ (accum->delete_oldest)(w->state); } /* yi = acc_get [ work(i:K-2) ] */ (accum->get)(accum_params, result, w->state); gsl_vector_set(y, i, result[0]); if (z != NULL) gsl_vector_set(z, i, result[1]); } } } else { /* pad final windows and fill y(n-J:n-1) */ for (i = 0; i < J; ++i) { int idx = n - J + i; (accum->insert)(xN, w->state); if (idx >= 0) { (accum->get)(accum_params, result, w->state); gsl_vector_set(y, idx, result[0]); if (z != NULL) gsl_vector_set(z, idx, result[1]); } } } return GSL_SUCCESS; } } /* gsl_movstat_apply() Apply user-defined moving window function to input vector Inputs: endtype - end point handling criteria F - user-defined function x - input vector, size n y - output vector, size n w - workspace */ int gsl_movstat_apply(const gsl_movstat_end_t endtype, const gsl_movstat_function * F, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w) { int status = gsl_movstat_apply_accum(endtype, x, gsl_movstat_accum_userfunc, (void *) F, y, NULL, w); return status; } gsl/movstat/TODO0000644000175000017500000000017013536674414012115 0ustar eddedd1. medacc: add delete function and convert to movstat_apply format 2. remove gsl_math.h / gsl_function_vec -- not used? gsl/movstat/movmean.c0000644000175000017500000000260313536674414013236 0ustar eddedd/* movstat/movmean.c * * Routines related to a moving window mean * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* gsl_movstat_mean() Apply moving mean to input vector Inputs: endtype - end point handling criteria x - input vector, size n y - output vector, size n w - workspace */ int gsl_movstat_mean(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * y, gsl_movstat_workspace * w) { int status = gsl_movstat_apply_accum(endtype, x, gsl_movstat_accum_mean, NULL, y, NULL, w); return status; } gsl/movstat/medacc.c0000644000175000017500000001616613536674414013021 0ustar eddedd/* movstat/medacc.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * Original copyright notice: * Copyright (c) 2011 ashelly.myopenid.com under */ #include #include #include #include #include #include #define ItemLess(a,b) ((a)<(b)) #define ItemMean(a,b) (((a)+(b))/2) #define minCt(m) (((m)->ct-1)/2) /* count of items in minheap */ #define maxCt(m) (((m)->ct)/2) /* count of items in maxheap */ typedef double medacc_type_t; typedef struct { int n; /* window size */ int idx; /* position in circular queue */ int ct; /* count of items in queue */ medacc_type_t *data; /* circular queue of values, size k */ int *pos; /* index into `heap` for each value, size 2*k */ int *heap; /* max/median/min heap holding indices into `data` */ } medacc_state_t; static size_t medacc_size(const size_t n); static int medacc_init(const size_t n, void * vstate); static int medacc_insert(const medacc_type_t x, void * vstate); static int medacc_delete(void * vstate); static int medacc_get(void * params, medacc_type_t * result, const void * vstate); static int mmless(const medacc_state_t * state, const int i, const int j); static int mmexchange(medacc_state_t * state, const int i, const int j); static int mmCmpExch(medacc_state_t * state, const int i, const int j); static void minSortDown(medacc_state_t * state, int i); static void maxSortDown(medacc_state_t * state, int i); static int minSortUp(medacc_state_t * state, int i); static int maxSortUp(medacc_state_t * state, int i); static size_t medacc_size(const size_t n) { size_t size = 0; size += sizeof(medacc_state_t); size += n * sizeof(medacc_type_t); size += 2 * n * sizeof(int); return size; } static int medacc_init(const size_t n, void * vstate) { medacc_state_t * state = (medacc_state_t *) vstate; int k = (int) n; state->n = n; state->ct = 0; state->idx = 0; state->data = (medacc_type_t *) ((unsigned char *) vstate + sizeof(medacc_state_t)); state->pos = (int *) ((unsigned char *) state->data + n * sizeof(medacc_type_t)); state->heap = state->pos + n + (n/2); /* points to middle of storage */ /* set up initial heap fill pattern: median,max,min,max,... */ while (k--) { state->pos[k] = ((k + 1)/2) * ((k & 1) ? -1 : 1); state->heap[state->pos[k]] = k; } return GSL_SUCCESS; } static int medacc_insert(const medacc_type_t x, void * vstate) { medacc_state_t * state = (medacc_state_t *) vstate; int isNew = (state->ct < (int) state->n); int p = state->pos[state->idx]; medacc_type_t old = state->data[state->idx]; state->data[state->idx] = x; state->idx = (state->idx + 1) % state->n; state->ct += isNew; if (p > 0) /* new item is in minHeap */ { if (!isNew && ItemLess(old, x)) minSortDown(state, p * 2); else if (minSortUp(state, p)) maxSortDown(state, -1); } else if (p < 0) /* new item is in maxHeap */ { if (!isNew && ItemLess(x, old)) maxSortDown(state, p * 2); else if (maxSortUp(state, p)) minSortDown(state, 1); } else /* new item is at median */ { if (maxCt(state)) maxSortDown(state, -1); if (minCt(state)) minSortDown(state, 1); } return GSL_SUCCESS; } static int medacc_delete(void * vstate) { medacc_state_t * state = (medacc_state_t *) vstate; if (state->ct > 0) { int p = state->pos[(state->idx - state->ct + state->n) % state->n]; if (p > 0) /* oldest item is in minHeap */ { mmexchange(state, p, minCt(state)); --(state->ct); minSortDown(state, 2 * p); } else if (p < 0) /* oldest item is in maxHeap */ { mmexchange(state, p, maxCt(state)); --(state->ct); maxSortDown(state, 2 * p); } else if (p == 0) /* oldest item is at median */ { } } return GSL_SUCCESS; } /* returns median (or average of 2 when item count is even) */ static int medacc_get(void * params, medacc_type_t * result, const void * vstate) { const medacc_state_t * state = (const medacc_state_t *) vstate; medacc_type_t median = state->data[state->heap[0]]; (void) params; if ((state->ct & 1) == 0) median = ItemMean(median, state->data[state->heap[-1]]); *result = median; return GSL_SUCCESS; } /* returns 1 if heap[i] < heap[j] */ static int mmless(const medacc_state_t * state, const int i, const int j) { return ItemLess(state->data[state->heap[i]], state->data[state->heap[j]]); } /* swaps items i and j in heap, maintains indexes */ static int mmexchange(medacc_state_t * state, const int i, const int j) { int t = state->heap[i]; state->heap[i] = state->heap[j]; state->heap[j] = t; state->pos[state->heap[i]] = i; state->pos[state->heap[j]] = j; return 1; } /* swaps items i and j if i < j; returns true if swapped */ static int mmCmpExch(medacc_state_t * state, const int i, const int j) { return (mmless(state, i, j) && mmexchange(state , i, j)); } /* maintains minheap property for all items below i/2. */ static void minSortDown(medacc_state_t * state, int i) { for (; i <= minCt(state); i *= 2) { if (i > 1 && i < minCt(state) && mmless(state, i + 1, i)) ++i; if (!mmCmpExch(state, i, i / 2)) break; } } /* maintains maxheap property for all items below i/2. (negative indexes) */ static void maxSortDown(medacc_state_t * state, int i) { for (; i >= -maxCt(state); i *= 2) { if (i < -1 && i > -maxCt(state) && mmless(state, i, i - 1)) --i; if (!mmCmpExch(state, i / 2, i)) break; } } /* maintains minheap property for all items above i, including median returns true if median changed */ static int minSortUp(medacc_state_t * state, int i) { while (i > 0 && mmCmpExch(state, i, i / 2)) i /= 2; return (i == 0); } /* maintains maxheap property for all items above i, including median returns true if median changed */ static int maxSortUp(medacc_state_t * state, int i) { while (i<0 && mmCmpExch(state, i / 2, i)) i /= 2; return (i == 0); } static const gsl_movstat_accum median_accum_type = { medacc_size, medacc_init, medacc_insert, NULL, /* XXX FIXME */ medacc_get }; const gsl_movstat_accum *gsl_movstat_accum_median = &median_accum_type; gsl/movstat/mmacc.c0000644000175000017500000001651013536674414012656 0ustar eddedd/* movstat/mmacc.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This module contains routines for tracking minimum/maximum values of a * moving fixed-sized window. It is based on the algorithm of: * * [1] Daniel Lemire, Streaming Maximum-Minimum Filter Using No More than Three Comparisons per Element, * Nordic Journal of Computing, Volume 13, Number 4, pages 328-339, 2006 * * Also available as a preprint here: https://arxiv.org/abs/cs/0610046 */ #include #include #include #include #include #include typedef double mmacc_type_t; typedef mmacc_type_t ringbuf_type_t; #include "deque.c" #include "ringbuf.c" typedef struct { size_t n; /* window size */ size_t k; /* number of samples in current window */ mmacc_type_t xprev; /* previous sample added to window */ ringbuf *rbuf; /* ring buffer storing current window, size n */ deque *minque; /* double-ended queue of min values (L) */ deque *maxque; /* double-ended queue of max values (U) */ } mmacc_state_t; static size_t mmacc_size(const size_t n); static int mmacc_init(const size_t n, void * vstate); static int mmacc_insert(const mmacc_type_t x, void * vstate); static int mmacc_delete(void * vstate); static int mmacc_min(void * params, mmacc_type_t * result, const void * vstate); static int mmacc_max(void * params, mmacc_type_t * result, const void * vstate); static int mmacc_minmax(void * params, mmacc_type_t * result, const void * vstate); static size_t mmacc_size(const size_t n) { size_t size = 0; size += sizeof(mmacc_state_t); size += ringbuf_size(n); /* rbuf */ size += 2 * deque_size(n + 1); /* minque/maxque */ return size; } static int mmacc_init(const size_t n, void * vstate) { mmacc_state_t * state = (mmacc_state_t *) vstate; state->n = n; state->k = 0; state->xprev = 0.0; state->rbuf = (ringbuf *) ((unsigned char *) vstate + sizeof(mmacc_state_t)); state->minque = (deque *) ((unsigned char *) state->rbuf + ringbuf_size(n)); state->maxque = (deque *) ((unsigned char *) state->minque + deque_size(n + 1)); ringbuf_init(n, state->rbuf); deque_init(n + 1, state->minque); deque_init(n + 1, state->maxque); return GSL_SUCCESS; } static int mmacc_insert(const mmacc_type_t x, void * vstate) { mmacc_state_t * state = (mmacc_state_t *) vstate; int head, tail; if (state->k == 0) { /* first sample */ ringbuf_insert(x, state->rbuf); head = state->rbuf->head; deque_push_back(head, state->maxque); deque_push_back(head, state->minque); } else { if (x > state->xprev) { deque_pop_back(state->maxque); while (!deque_is_empty(state->maxque)) { if (x <= state->rbuf->array[deque_peek_back(state->maxque)]) break; deque_pop_back(state->maxque); } } else { deque_pop_back(state->minque); while (!deque_is_empty(state->minque)) { if (x >= state->rbuf->array[deque_peek_back(state->minque)]) break; deque_pop_back(state->minque); } } /* store new sample into ring buffer */ tail = state->rbuf->tail; ringbuf_insert(x, state->rbuf); head = state->rbuf->head; deque_push_back(head, state->maxque); deque_push_back(head, state->minque); if (state->k == state->n) { /* * window is full - check if oldest window element is a global minimum/maximum * of current window - if so pop it from U/L queues; * the check head != tail ensures there is more than 1 element in the * queue, do not pop if queue has only 1 element, since this element would * be the newest sample */ if (state->maxque->head != state->maxque->tail && tail == deque_peek_front(state->maxque)) deque_pop_front(state->maxque); else if (state->minque->head != state->minque->tail && tail == deque_peek_front(state->minque)) deque_pop_front(state->minque); } } if (state->k < state->n) ++(state->k); state->xprev = x; return GSL_SUCCESS; } static int mmacc_delete(void * vstate) { mmacc_state_t * state = (mmacc_state_t *) vstate; if (state->k > 0) { /* * check if oldest window element is a global minimum/maximum; if so * pop it from U/L queues */ if (state->rbuf->tail == deque_peek_front(state->maxque)) deque_pop_front(state->maxque); else if (state->rbuf->tail == deque_peek_front(state->minque)) deque_pop_front(state->minque); /* remove oldest element from ring buffer */ ringbuf_pop_back(state->rbuf); --(state->k); } return GSL_SUCCESS; } static int mmacc_min(void * params, mmacc_type_t * result, const void * vstate) { const mmacc_state_t * state = (const mmacc_state_t *) vstate; (void) params; if (state->k == 0) { GSL_ERROR ("no samples yet added to workspace", GSL_EINVAL); } else { *result = state->rbuf->array[deque_peek_front(state->minque)]; return GSL_SUCCESS; } } static int mmacc_max(void * params, mmacc_type_t * result, const void * vstate) { const mmacc_state_t * state = (const mmacc_state_t *) vstate; (void) params; if (state->k == 0) { GSL_ERROR ("no samples yet added to workspace", GSL_EINVAL); } else { *result = state->rbuf->array[deque_peek_front(state->maxque)]; return GSL_SUCCESS; } } static int mmacc_minmax(void * params, mmacc_type_t * result, const void * vstate) { const mmacc_state_t * state = (const mmacc_state_t *) vstate; (void) params; if (state->k == 0) { GSL_ERROR ("no samples yet added to workspace", GSL_EINVAL); } else { result[0] = state->rbuf->array[deque_peek_front(state->minque)]; result[1] = state->rbuf->array[deque_peek_front(state->maxque)]; return GSL_SUCCESS; } } static const gsl_movstat_accum min_accum_type = { mmacc_size, mmacc_init, mmacc_insert, mmacc_delete, mmacc_min }; const gsl_movstat_accum *gsl_movstat_accum_min = &min_accum_type; static const gsl_movstat_accum max_accum_type = { mmacc_size, mmacc_init, mmacc_insert, mmacc_delete, mmacc_max }; const gsl_movstat_accum *gsl_movstat_accum_max = &max_accum_type; static const gsl_movstat_accum minmax_accum_type = { mmacc_size, mmacc_init, mmacc_insert, mmacc_delete, mmacc_minmax }; const gsl_movstat_accum *gsl_movstat_accum_minmax = &minmax_accum_type; gsl/movstat/test_sum.c0000644000175000017500000001177613536674414013452 0ustar eddedd/* movstat/test_sum.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* compute moving sum by explicitely constructing window and summing elements */ int slow_movsum(const gsl_movstat_end_t etype, const gsl_vector * x, gsl_vector * y, const int H, const int J) { const size_t n = x->size; const int K = H + J + 1; double *window = malloc(K * sizeof(double)); size_t i; for (i = 0; i < n; ++i) { size_t wsize = gsl_movstat_fill(etype, x, i, H, J, window); double sum = 0.0; size_t j; for (j = 0; j < wsize; ++j) sum += window[j]; gsl_vector_set(y, i, sum); } free(window); return GSL_SUCCESS; } static double func_sum(const size_t n, double x[], void * params) { double sum = 0.0; size_t i; (void) params; for (i = 0; i < n; ++i) sum += x[i]; return sum; } static void test_sum_proc(const double tol, const size_t n, const size_t H, const size_t J, const gsl_movstat_end_t etype, gsl_rng * rng_p) { gsl_movstat_workspace * w = gsl_movstat_alloc2(H, J); gsl_vector * x = gsl_vector_alloc(n); gsl_vector * y = gsl_vector_alloc(n); gsl_vector * z = gsl_vector_alloc(n); gsl_movstat_function F; char buf[2048]; F.function = func_sum; F.params = NULL; random_vector(x, rng_p); /* y = sum(x) with slow brute force method */ slow_movsum(etype, x, y, H, J); /* y = sum(x) with fast method */ gsl_movstat_sum(etype, x, z, w); /* test y = z */ sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u sum random", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = sum(x) in-place */ gsl_vector_memcpy(z, x); gsl_movstat_sum(etype, z, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u sum random in-place", n, H, J, etype); compare_vectors(tol, z, y, buf); /* z = sum(x) with user-defined function */ gsl_movstat_apply(etype, &F, x, z, w); sprintf(buf, "n=%zu H=%zu J=%zu endtype=%u sum user", n, H, J, etype); compare_vectors(tol, z, y, buf); gsl_movstat_free(w); gsl_vector_free(x); gsl_vector_free(y); gsl_vector_free(z); } static void test_sum(gsl_rng * rng_p) { test_sum_proc(GSL_DBL_EPSILON, 1000, 0, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_sum_proc(GSL_DBL_EPSILON, 1000, 3, 3, GSL_MOVSTAT_END_PADZERO, rng_p); test_sum_proc(GSL_DBL_EPSILON, 1000, 0, 5, GSL_MOVSTAT_END_PADZERO, rng_p); test_sum_proc(GSL_DBL_EPSILON, 1000, 5, 0, GSL_MOVSTAT_END_PADZERO, rng_p); test_sum_proc(GSL_DBL_EPSILON, 2000, 10, 5, GSL_MOVSTAT_END_PADZERO, rng_p); test_sum_proc(GSL_DBL_EPSILON, 2000, 5, 10, GSL_MOVSTAT_END_PADZERO, rng_p); test_sum_proc(GSL_DBL_EPSILON, 20, 50, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_sum_proc(GSL_DBL_EPSILON, 20, 10, 50, GSL_MOVSTAT_END_PADZERO, rng_p); test_sum_proc(GSL_DBL_EPSILON, 20, 50, 10, GSL_MOVSTAT_END_PADZERO, rng_p); test_sum_proc(GSL_DBL_EPSILON, 1000, 0, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 1000, 3, 3, GSL_MOVSTAT_END_PADVALUE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 1000, 0, 5, GSL_MOVSTAT_END_PADVALUE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 1000, 5, 0, GSL_MOVSTAT_END_PADVALUE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 2000, 10, 5, GSL_MOVSTAT_END_PADVALUE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 2000, 5, 10, GSL_MOVSTAT_END_PADVALUE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 20, 50, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 20, 10, 50, GSL_MOVSTAT_END_PADVALUE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 20, 50, 10, GSL_MOVSTAT_END_PADVALUE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 1000, 0, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 1000, 3, 3, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 1000, 0, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 1000, 5, 0, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 2000, 10, 5, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 2000, 5, 10, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 20, 50, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 20, 10, 50, GSL_MOVSTAT_END_TRUNCATE, rng_p); test_sum_proc(GSL_DBL_EPSILON, 20, 50, 10, GSL_MOVSTAT_END_TRUNCATE, rng_p); } gsl/movstat/movmad.c0000644000175000017500000000623113536674414013060 0ustar eddedd/* movstat/movmad.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include /* gsl_movstat_mad() Apply a moving MAD to an input vector (with scale factor to make an unbiased estimate of sigma) Inputs: endtype - how to handle end points x - input vector, size n xmedian - (output) vector of median values of x, size n xmedian_i = median of window centered on x_i xmad - (output) vector of estimated standard deviations of x, size n xmad_i = MAD of i-th window: 1.4826 * median(|x_i - xmedian_i|) w - workspace */ int gsl_movstat_mad(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * xmedian, gsl_vector * xmad, gsl_movstat_workspace * w) { if (x->size != xmedian->size) { GSL_ERROR("x and xmedian vectors must have same length", GSL_EBADLEN); } else if (x->size != xmad->size) { GSL_ERROR("x and xmad vectors must have same length", GSL_EBADLEN); } else { double scale = 1.482602218505602; int status = gsl_movstat_apply_accum(endtype, x, gsl_movstat_accum_mad, &scale, xmedian, xmad, w); return status; } } /* gsl_movstat_mad0() Apply a moving MAD to an input vector (without scale factor to make an unbiased estimate of sigma) Inputs: endtype - how to handle end points x - input vector, size n xmedian - (output) vector of median values of x, size n xmedian_i = median of window centered on x_i xmad - (output) vector of estimated standard deviations of x, size n xmad_i = MAD of i-th window: median(|x_i - xmedian_i|) w - workspace */ int gsl_movstat_mad0(const gsl_movstat_end_t endtype, const gsl_vector * x, gsl_vector * xmedian, gsl_vector * xmad, gsl_movstat_workspace * w) { if (x->size != xmedian->size) { GSL_ERROR("x and xmedian vectors must have same length", GSL_EBADLEN); } else if (x->size != xmad->size) { GSL_ERROR("x and xmad vectors must have same length", GSL_EBADLEN); } else { double scale = 1.0; int status = gsl_movstat_apply_accum(endtype, x, gsl_movstat_accum_mad, &scale, xmedian, xmad, w); return status; } } gsl/movstat/test.c0000644000175000017500000000502513536674414012554 0ustar eddedd/* movstat/test.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include /* compare two vectors */ static void compare_vectors(const double tol, const gsl_vector * v, const gsl_vector * expected, const char * desc) { const size_t n = v->size; size_t i; for (i = 0; i < n; ++i) { double vi = gsl_vector_get(v, i); double ui = gsl_vector_get(expected, i); gsl_test_rel(vi, ui, tol, "%s i=%zu", desc, i); } } /* generate random vector with elements in [-1,1] */ static void random_vector(gsl_vector * v, gsl_rng * r) { size_t i; for (i = 0; i < v->size; ++i) { double vi = 2.0 * gsl_rng_uniform(r) - 1.0; /* in [-1,1] */ gsl_vector_set(v, i, vi); } } static int test_noisy_sine(const double sigma, gsl_vector * x, gsl_rng * r) { const size_t n = x->size; size_t i; for (i = 0; i < n; ++i) { double ti = (double) i / (n - 1.0); double xi = sin(2.0 * M_PI * ti) + sin(2.0 * M_PI * 40.0 * ti); double ei = gsl_ran_gaussian(r, sigma); gsl_vector_set(x, i, xi + ei); } return GSL_SUCCESS; } #include "test_mad.c" #include "test_mean.c" #include "test_median.c" #include "test_minmax.c" #include "test_Qn.c" #include "test_qqr.c" #include "test_sum.c" #include "test_Sn.c" #include "test_variance.c" int main() { gsl_rng *r = gsl_rng_alloc(gsl_rng_default); test_mean(r); test_median(r); test_minmax(r); test_mad(r); test_Qn(r); test_qqr(r); test_sum(r); test_Sn(r); test_variance(r); gsl_rng_free(r); exit (gsl_test_summary()); } gsl/movstat/madacc.c0000644000175000017500000001054613536674414013011 0ustar eddedd/* movstat/madacc.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This module contains routines for computing the median absolute deviation (MAD) * of a moving fixed-sized window. */ #include #include #include #include #include #include #include typedef double madacc_type_t; typedef madacc_type_t ringbuf_type_t; #include "ringbuf.c" typedef struct { size_t n; /* window size */ const gsl_movstat_accum *medacc; /* median accumulator */ void *median_state; /* median accumulator workspace */ ringbuf *rbuf; /* ring buffer storing current window, size n */ madacc_type_t *work; /* workspace, size n */ } madacc_state_t; static size_t madacc_size(const size_t n); static int madacc_init(const size_t n, void * vstate); static int madacc_insert(const madacc_type_t x, void * vstate); static int madacc_delete(void * vstate); static int madacc_medmad(void * params, madacc_type_t * result, const void * vstate); static size_t madacc_size(const size_t n) { size_t size = 0; const gsl_movstat_accum * acc = gsl_movstat_accum_median; size += sizeof(madacc_state_t); size += (acc->size)(n); /* median accumulator */ size += ringbuf_size(n); /* rbuf */ size += n * sizeof(madacc_type_t); /* work */ return size; } static int madacc_init(const size_t n, void * vstate) { madacc_state_t * state = (madacc_state_t *) vstate; state->n = n; state->medacc = gsl_movstat_accum_median; state->median_state = (void *) ((unsigned char *) vstate + sizeof(madacc_state_t)); state->rbuf = (ringbuf *) ((unsigned char *) state->median_state + (state->medacc->size)(n)); state->work = (madacc_type_t *) ((unsigned char *) state->rbuf + ringbuf_size(n)); (state->medacc->init)(n, state->median_state); ringbuf_init(n, state->rbuf); return GSL_SUCCESS; } static int madacc_insert(const madacc_type_t x, void * vstate) { madacc_state_t * state = (madacc_state_t *) vstate; /* insert element into median accumulator */ (state->medacc->insert)(x, state->median_state); /* insert element into ring buffer */ ringbuf_insert(x, state->rbuf); return GSL_SUCCESS; } static int madacc_delete(void * vstate) { madacc_state_t * state = (madacc_state_t *) vstate; if (!ringbuf_is_empty(state->rbuf)) ringbuf_pop_back(state->rbuf); return GSL_SUCCESS; } static int madacc_medmad(void * params, madacc_type_t * result, const void * vstate) { const madacc_state_t * state = (const madacc_state_t *) vstate; if (ringbuf_is_empty(state->rbuf)) { GSL_ERROR("no samples yet added to workspace", GSL_EINVAL); } else { int status; const double scale = *(double *) params; const int n = ringbuf_n(state->rbuf); int i; double median, mad; /* compute median of current window */ status = (state->medacc->get)(NULL, &median, state->median_state); if (status) return status; /* compute current window absolute deviations from median */ for (i = 0; i < n; ++i) { double xi = state->rbuf->array[(state->rbuf->head + i) % state->rbuf->size]; state->work[i] = fabs(xi - median); } /* compute MAD of current window */ mad = gsl_stats_median(state->work, 1, n); result[0] = median; result[1] = scale * mad; return GSL_SUCCESS; } } static const gsl_movstat_accum mad_accum_type = { madacc_size, madacc_init, madacc_insert, NULL, /*XXX*/ madacc_medmad }; const gsl_movstat_accum *gsl_movstat_accum_mad = &mad_accum_type; gsl/movstat/movqqr.c0000644000175000017500000000364113536674414013124 0ustar eddedd/* movstat/movqqr.c * * Compute moving q-quantile range * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include /* gsl_movstat_qqr() Apply a moving q-quantile range to an input vector Inputs: endtype - how to handle end points x - input vector, size n q - quantile \in [0,0.5] xqqr - (output) vector of q-quantile ranges of x, size n xqqr_i = q-quantile range of i-th window: w - workspace */ int gsl_movstat_qqr(const gsl_movstat_end_t endtype, const gsl_vector * x, const double q, gsl_vector * xqqr, gsl_movstat_workspace * w) { if (x->size != xqqr->size) { GSL_ERROR("x and xqqr vectors must have same length", GSL_EBADLEN); } else if (q < 0.0 || q > 0.5) { GSL_ERROR("q must be between 0 and 0.5", GSL_EDOM); } else { double qq = q; int status = gsl_movstat_apply_accum(endtype, x, gsl_movstat_accum_qqr, (void *) &qq, xqqr, NULL, w); return status; } } gsl/multimin/0000755000175000017500000000000014057135461011561 5ustar eddeddgsl/multimin/vector_bfgs.c0000644000175000017500000002074113536674414014243 0ustar eddedd/* multimin/vector_bfgs.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Fabrice Rossi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* vector_bfgs.c -- Limited memory Broyden-Fletcher-Goldfarb-Shanno method */ /* Modified by Brian Gough to use single iteration structure */ #include #include #include #include "directional_minimize.c" typedef struct { int iter; double step; double max_step; double tol; gsl_vector *x1; gsl_vector *dx1; gsl_vector *x2; double g0norm; double pnorm; gsl_vector *p; gsl_vector *x0; gsl_vector *g0; gsl_vector *dx0; gsl_vector *dg0; } vector_bfgs_state_t; static int vector_bfgs_alloc (void *vstate, size_t n) { vector_bfgs_state_t *state = (vector_bfgs_state_t *) vstate; state->x1 = gsl_vector_calloc (n); if (state->x1 == 0) { GSL_ERROR ("failed to allocate space for x1", GSL_ENOMEM); } state->dx1 = gsl_vector_calloc (n); if (state->dx1 == 0) { gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for dx1", GSL_ENOMEM); } state->x2 = gsl_vector_calloc (n); if (state->x2 == 0) { gsl_vector_free (state->dx1); gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for x2", GSL_ENOMEM); } state->p = gsl_vector_calloc (n); if (state->p == 0) { gsl_vector_free (state->x2); gsl_vector_free (state->dx1); gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for p", GSL_ENOMEM); } state->x0 = gsl_vector_calloc (n); if (state->x0 == 0) { gsl_vector_free (state->p); gsl_vector_free (state->x2); gsl_vector_free (state->dx1); gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for g0", GSL_ENOMEM); } state->g0 = gsl_vector_calloc (n); if (state->g0 == 0) { gsl_vector_free (state->x0); gsl_vector_free (state->p); gsl_vector_free (state->x2); gsl_vector_free (state->dx1); gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for g0", GSL_ENOMEM); } state->dx0 = gsl_vector_calloc (n); if (state->dx0 == 0) { gsl_vector_free (state->g0); gsl_vector_free (state->x0); gsl_vector_free (state->p); gsl_vector_free (state->x2); gsl_vector_free (state->dx1); gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for g0", GSL_ENOMEM); } state->dg0 = gsl_vector_calloc (n); if (state->dg0 == 0) { gsl_vector_free (state->dx0); gsl_vector_free (state->g0); gsl_vector_free (state->x0); gsl_vector_free (state->p); gsl_vector_free (state->x2); gsl_vector_free (state->dx1); gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for g0", GSL_ENOMEM); } return GSL_SUCCESS; } static int vector_bfgs_set (void *vstate, gsl_multimin_function_fdf * fdf, const gsl_vector * x, double *f, gsl_vector * gradient, double step_size, double tol) { vector_bfgs_state_t *state = (vector_bfgs_state_t *) vstate; state->iter = 0; state->step = step_size; state->max_step = step_size; state->tol = tol; GSL_MULTIMIN_FN_EVAL_F_DF (fdf, x, f, gradient); /* Use the gradient as the initial direction */ gsl_vector_memcpy (state->x0, x); gsl_vector_memcpy (state->p, gradient); gsl_vector_memcpy (state->g0, gradient); { double gnorm = gsl_blas_dnrm2 (gradient); state->pnorm = gnorm; state->g0norm = gnorm; } return GSL_SUCCESS; } static void vector_bfgs_free (void *vstate) { vector_bfgs_state_t *state = (vector_bfgs_state_t *) vstate; gsl_vector_free (state->dg0); gsl_vector_free (state->dx0); gsl_vector_free (state->g0); gsl_vector_free (state->x0); gsl_vector_free (state->p); gsl_vector_free (state->x2); gsl_vector_free (state->dx1); gsl_vector_free (state->x1); } static int vector_bfgs_restart (void *vstate) { vector_bfgs_state_t *state = (vector_bfgs_state_t *) vstate; state->iter = 0; return GSL_SUCCESS; } static int vector_bfgs_iterate (void *vstate, gsl_multimin_function_fdf * fdf, gsl_vector * x, double *f, gsl_vector * gradient, gsl_vector * dx) { vector_bfgs_state_t *state = (vector_bfgs_state_t *) vstate; gsl_vector *x1 = state->x1; gsl_vector *dx1 = state->dx1; gsl_vector *x2 = state->x2; gsl_vector *p = state->p; gsl_vector *g0 = state->g0; gsl_vector *x0 = state->x0; double pnorm = state->pnorm; double g0norm = state->g0norm; double fa = *f, fb, fc; double dir; double stepa = 0.0, stepb, stepc = state->step, tol = state->tol; double g1norm; double pg; if (pnorm == 0.0 || g0norm == 0.0) { gsl_vector_set_zero (dx); return GSL_ENOPROG; } /* Determine which direction is downhill, +p or -p */ gsl_blas_ddot (p, gradient, &pg); dir = (pg >= 0.0) ? +1.0 : -1.0; /* Compute new trial point at x_c= x - step * p, where p is the current direction */ take_step (x, p, stepc, dir / pnorm, x1, dx); /* Evaluate function and gradient at new point xc */ fc = GSL_MULTIMIN_FN_EVAL_F (fdf, x1); if (fc < fa) { /* Success, reduced the function value */ state->step = stepc * 2.0; *f = fc; gsl_vector_memcpy (x, x1); GSL_MULTIMIN_FN_EVAL_DF (fdf, x1, gradient); return GSL_SUCCESS; } #ifdef DEBUG printf ("got stepc = %g fc = %g\n", stepc, fc); #endif /* Do a line minimisation in the region (xa,fa) (xc,fc) to find an intermediate (xb,fb) satisifying fa > fb < fc. Choose an initial xb based on parabolic interpolation */ intermediate_point (fdf, x, p, dir / pnorm, pg, stepa, stepc, fa, fc, x1, dx1, gradient, &stepb, &fb); if (stepb == 0.0) { return GSL_ENOPROG; } minimize (fdf, x, p, dir / pnorm, stepa, stepb, stepc, fa, fb, fc, tol, x1, dx1, x2, dx, gradient, &(state->step), f, &g1norm); gsl_vector_memcpy (x, x2); /* Choose a new direction for the next step */ state->iter = (state->iter + 1) % x->size; if (state->iter == 0) { gsl_vector_memcpy (p, gradient); state->pnorm = g1norm; } else { /* This is the BFGS update: */ /* p' = g1 - A dx - B dg */ /* A = - (1+ dg.dg/dx.dg) B + dg.g/dx.dg */ /* B = dx.g/dx.dg */ gsl_vector *dx0 = state->dx0; gsl_vector *dg0 = state->dg0; double dxg, dgg, dxdg, dgnorm, A, B; /* dx0 = x - x0 */ gsl_vector_memcpy (dx0, x); gsl_blas_daxpy (-1.0, x0, dx0); /* dg0 = g - g0 */ gsl_vector_memcpy (dg0, gradient); gsl_blas_daxpy (-1.0, g0, dg0); gsl_blas_ddot (dx0, gradient, &dxg); gsl_blas_ddot (dg0, gradient, &dgg); gsl_blas_ddot (dx0, dg0, &dxdg); dgnorm = gsl_blas_dnrm2 (dg0); if (dxdg != 0) { B = dxg / dxdg; A = -(1.0 + dgnorm * dgnorm / dxdg) * B + dgg / dxdg; } else { B = 0; A = 0; } gsl_vector_memcpy (p, gradient); gsl_blas_daxpy (-A, dx0, p); gsl_blas_daxpy (-B, dg0, p); state->pnorm = gsl_blas_dnrm2 (p); } gsl_vector_memcpy (g0, gradient); gsl_vector_memcpy (x0, x); state->g0norm = gsl_blas_dnrm2 (g0); #ifdef DEBUG printf ("updated directions\n"); printf ("p: "); gsl_vector_fprintf (stdout, p, "%g"); printf ("g: "); gsl_vector_fprintf (stdout, gradient, "%g"); #endif return GSL_SUCCESS; } static const gsl_multimin_fdfminimizer_type vector_bfgs_type = { "vector_bfgs", /* name */ sizeof (vector_bfgs_state_t), &vector_bfgs_alloc, &vector_bfgs_set, &vector_bfgs_iterate, &vector_bfgs_restart, &vector_bfgs_free }; const gsl_multimin_fdfminimizer_type * gsl_multimin_fdfminimizer_vector_bfgs = &vector_bfgs_type; gsl/multimin/Makefile.in0000664000175000017500000011376514057135461013645 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = multimin ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslmultimin_la_LIBADD = am_libgslmultimin_la_OBJECTS = fdfminimizer.lo steepest_descent.lo \ conjugate_fr.lo conjugate_pr.lo convergence.lo diff.lo \ vector_bfgs.lo vector_bfgs2.lo fminimizer.lo simplex.lo \ simplex2.lo libgslmultimin_la_OBJECTS = $(am_libgslmultimin_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_funcs.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslmultimin.la ../min/libgslmin.la \ ../poly/libgslpoly.la ../blas/libgslblas.la \ ../cblas/libgslcblas.la ../linalg/libgsllinalg.la \ ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la \ ../vector/libgslvector.la ../block/libgslblock.la \ ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/conjugate_fr.Plo \ ./$(DEPDIR)/conjugate_pr.Plo ./$(DEPDIR)/convergence.Plo \ ./$(DEPDIR)/diff.Plo ./$(DEPDIR)/fdfminimizer.Plo \ ./$(DEPDIR)/fminimizer.Plo ./$(DEPDIR)/simplex.Plo \ ./$(DEPDIR)/simplex2.Plo ./$(DEPDIR)/steepest_descent.Plo \ ./$(DEPDIR)/test.Po ./$(DEPDIR)/test_funcs.Po \ ./$(DEPDIR)/vector_bfgs.Plo ./$(DEPDIR)/vector_bfgs2.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslmultimin_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslmultimin_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslmultimin.la pkginclude_HEADERS = gsl_multimin.h AM_CPPFLAGS = -I$(top_srcdir) libgslmultimin_la_SOURCES = fdfminimizer.c steepest_descent.c conjugate_fr.c conjugate_pr.c convergence.c diff.c vector_bfgs.c vector_bfgs2.c fminimizer.c simplex.c simplex2.c noinst_HEADERS = directional_minimize.c linear_minimize.c linear_wrapper.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_funcs.c test_funcs.h test_LDADD = libgslmultimin.la ../min/libgslmin.la ../poly/libgslpoly.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu multimin/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu multimin/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslmultimin.la: $(libgslmultimin_la_OBJECTS) $(libgslmultimin_la_DEPENDENCIES) $(EXTRA_libgslmultimin_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslmultimin_la_OBJECTS) $(libgslmultimin_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conjugate_fr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conjugate_pr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convergence.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diff.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdfminimizer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fminimizer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simplex.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simplex2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/steepest_descent.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_funcs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector_bfgs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector_bfgs2.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/conjugate_fr.Plo -rm -f ./$(DEPDIR)/conjugate_pr.Plo -rm -f ./$(DEPDIR)/convergence.Plo -rm -f ./$(DEPDIR)/diff.Plo -rm -f ./$(DEPDIR)/fdfminimizer.Plo -rm -f ./$(DEPDIR)/fminimizer.Plo -rm -f ./$(DEPDIR)/simplex.Plo -rm -f ./$(DEPDIR)/simplex2.Plo -rm -f ./$(DEPDIR)/steepest_descent.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_funcs.Po -rm -f ./$(DEPDIR)/vector_bfgs.Plo -rm -f ./$(DEPDIR)/vector_bfgs2.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/conjugate_fr.Plo -rm -f ./$(DEPDIR)/conjugate_pr.Plo -rm -f ./$(DEPDIR)/convergence.Plo -rm -f ./$(DEPDIR)/diff.Plo -rm -f ./$(DEPDIR)/fdfminimizer.Plo -rm -f ./$(DEPDIR)/fminimizer.Plo -rm -f ./$(DEPDIR)/simplex.Plo -rm -f ./$(DEPDIR)/simplex2.Plo -rm -f ./$(DEPDIR)/steepest_descent.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_funcs.Po -rm -f ./$(DEPDIR)/vector_bfgs.Plo -rm -f ./$(DEPDIR)/vector_bfgs2.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile #demo_SOURCES = demo.c #demo_LDADD = libgslmultimin.la ../min/libgslmin.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../linalg/libgsllinalg.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/multimin/test_funcs.h0000644000175000017500000000574513536674414014131 0ustar eddedd/* multimin/test_funcs.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Fabrice Rossi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ extern unsigned int fcount, gcount; typedef void (*initpt_function) (gsl_vector * x); extern gsl_multimin_function_fdf simpleabs; extern gsl_multimin_function simpleabs_fmin; void simpleabs_initpt (gsl_vector * x); void simpleabs_initpt1 (gsl_vector * x); double simpleabs_f (const gsl_vector * x, void *params); void simpleabs_df (const gsl_vector * x, void *params, gsl_vector * df); void simpleabs_fdf (const gsl_vector * x, void *params, double * f, gsl_vector * df); extern gsl_multimin_function_fdf rosenbrock; extern gsl_multimin_function rosenbrock_fmin; void rosenbrock_initpt (gsl_vector * x); void rosenbrock_initpt1 (gsl_vector * x); double rosenbrock_f (const gsl_vector * x, void *params); void rosenbrock_df (const gsl_vector * x, void *params, gsl_vector * df); void rosenbrock_fdf (const gsl_vector * x, void *params, double * f, gsl_vector * df); extern gsl_multimin_function_fdf wood; extern gsl_multimin_function wood_fmin; void wood_initpt (gsl_vector * x); double wood_f (const gsl_vector * x, void *params); void wood_df (const gsl_vector * x, void *params, gsl_vector * df); void wood_fdf (const gsl_vector * x, void *params, double * f, gsl_vector * df); extern gsl_multimin_function_fdf roth; extern gsl_multimin_function roth_fmin; void roth_initpt (gsl_vector * x); double roth_f (const gsl_vector * x, void *params); void roth_df (const gsl_vector * x, void *params, gsl_vector * df); void roth_fdf (const gsl_vector * x, void *params, double * f, gsl_vector * df); extern gsl_multimin_function_fdf Nrosenbrock; void Nrosenbrock_df (const gsl_vector * x, void *params, gsl_vector * df); void Nrosenbrock_fdf (const gsl_vector * x, void *params, double * f, gsl_vector * df); extern gsl_multimin_function_fdf Nroth; void Nroth_df (const gsl_vector * x, void *params, gsl_vector * df); void Nroth_fdf (const gsl_vector * x, void *params, double * f, gsl_vector * df); extern gsl_multimin_function_fdf Nwood; void Nwood_df (const gsl_vector * x, void *params, gsl_vector * df); void Nwood_fdf (const gsl_vector * x, void *params, double * f, gsl_vector * df); extern gsl_multimin_function spring_fmin; void spring_initpt (gsl_vector * x); double spring_f (const gsl_vector *x, void *params); gsl/multimin/linear_minimize.c0000644000175000017500000001415013536674414015110 0ustar eddedd#include #include #include /* Find a minimum in x=[0,1] of the interpolating quadratic through * (0,f0) (1,f1) with derivative fp0 at x=0. The interpolating * polynomial is q(x) = f0 + fp0 * z + (f1-f0-fp0) * z^2 */ static double interp_quad (double f0, double fp0, double f1, double zl, double zh) { double fl = f0 + zl*(fp0 + zl*(f1 - f0 -fp0)); double fh = f0 + zh*(fp0 + zh*(f1 - f0 -fp0)); double c = 2 * (f1 - f0 - fp0); /* curvature */ double zmin = zl, fmin = fl; if (fh < fmin) { zmin = zh; fmin = fh; } if (c > 0) /* positive curvature required for a minimum */ { double z = -fp0 / c; /* location of minimum */ if (z > zl && z < zh) { double f = f0 + z*(fp0 + z*(f1 - f0 -fp0)); if (f < fmin) { zmin = z; fmin = f; }; } } return zmin; } /* Find a minimum in x=[0,1] of the interpolating cubic through * (0,f0) (1,f1) with derivatives fp0 at x=0 and fp1 at x=1. * * The interpolating polynomial is: * * c(x) = f0 + fp0 * z + eta * z^2 + xi * z^3 * * where eta=3*(f1-f0)-2*fp0-fp1, xi=fp0+fp1-2*(f1-f0). */ static double cubic (double c0, double c1, double c2, double c3, double z) { return c0 + z * (c1 + z * (c2 + z * c3)); } static void check_extremum (double c0, double c1, double c2, double c3, double z, double *zmin, double *fmin) { /* could make an early return by testing curvature >0 for minimum */ double y = cubic (c0, c1, c2, c3, z); if (y < *fmin) { *zmin = z; /* accepted new point*/ *fmin = y; } } static double interp_cubic (double f0, double fp0, double f1, double fp1, double zl, double zh) { double eta = 3 * (f1 - f0) - 2 * fp0 - fp1; double xi = fp0 + fp1 - 2 * (f1 - f0); double c0 = f0, c1 = fp0, c2 = eta, c3 = xi; double zmin, fmin; double z0, z1; zmin = zl; fmin = cubic(c0, c1, c2, c3, zl); check_extremum (c0, c1, c2, c3, zh, &zmin, &fmin); { int n = gsl_poly_solve_quadratic (3 * c3, 2 * c2, c1, &z0, &z1); if (n == 2) /* found 2 roots */ { if (z0 > zl && z0 < zh) check_extremum (c0, c1, c2, c3, z0, &zmin, &fmin); if (z1 > zl && z1 < zh) check_extremum (c0, c1, c2, c3, z1, &zmin, &fmin); } else if (n == 1) /* found 1 root */ { if (z0 > zl && z0 < zh) check_extremum (c0, c1, c2, c3, z0, &zmin, &fmin); } } return zmin; } static double interpolate (double a, double fa, double fpa, double b, double fb, double fpb, double xmin, double xmax, int order) { /* Map [a,b] to [0,1] */ double z, alpha, zmin, zmax; zmin = (xmin - a) / (b - a); zmax = (xmax - a) / (b - a); if (zmin > zmax) { double tmp = zmin; zmin = zmax; zmax = tmp; }; if (order > 2 && GSL_IS_REAL(fpb)) { z = interp_cubic (fa, fpa * (b - a), fb, fpb * (b - a), zmin, zmax); } else { z = interp_quad (fa, fpa * (b - a), fb, zmin, zmax); } alpha = a + z * (b - a); return alpha; } /* recommended values from Fletcher are rho = 0.01, sigma = 0.1, tau1 = 9, tau2 = 0.05, tau3 = 0.5 */ static int minimize (gsl_function_fdf * fn, double rho, double sigma, double tau1, double tau2, double tau3, int order, double alpha1, double *alpha_new) { double f0, fp0, falpha, falpha_prev, fpalpha, fpalpha_prev, delta, alpha_next; double alpha = alpha1, alpha_prev = 0.0; double a, b, fa, fb, fpa, fpb; const size_t bracket_iters = 100, section_iters = 100; size_t i = 0; GSL_FN_FDF_EVAL_F_DF (fn, 0.0, &f0, &fp0); falpha_prev = f0; fpalpha_prev = fp0; /* Avoid uninitialized variables morning */ a = 0.0; b = alpha; fa = f0; fb = 0.0; fpa = fp0; fpb = 0.0; /* Begin bracketing */ while (i++ < bracket_iters) { falpha = GSL_FN_FDF_EVAL_F (fn, alpha); /* Fletcher's rho test */ if (falpha > f0 + alpha * rho * fp0 || falpha >= falpha_prev) { a = alpha_prev; fa = falpha_prev; fpa = fpalpha_prev; b = alpha; fb = falpha; fpb = GSL_NAN; break; /* goto sectioning */ } fpalpha = GSL_FN_FDF_EVAL_DF (fn, alpha); /* Fletcher's sigma test */ if (fabs (fpalpha) <= -sigma * fp0) { *alpha_new = alpha; return GSL_SUCCESS; } if (fpalpha >= 0) { a = alpha; fa = falpha; fpa = fpalpha; b = alpha_prev; fb = falpha_prev; fpb = fpalpha_prev; break; /* goto sectioning */ } delta = alpha - alpha_prev; { double lower = alpha + delta; double upper = alpha + tau1 * delta; alpha_next = interpolate (alpha_prev, falpha_prev, fpalpha_prev, alpha, falpha, fpalpha, lower, upper, order); } alpha_prev = alpha; falpha_prev = falpha; fpalpha_prev = fpalpha; alpha = alpha_next; } /* Sectioning of bracket [a,b] */ while (i++ < section_iters) { delta = b - a; { double lower = a + tau2 * delta; double upper = b - tau3 * delta; alpha = interpolate (a, fa, fpa, b, fb, fpb, lower, upper, order); } falpha = GSL_FN_FDF_EVAL_F (fn, alpha); if ((a-alpha)*fpa <= GSL_DBL_EPSILON) { /* roundoff prevents progress */ return GSL_ENOPROG; }; if (falpha > f0 + rho * alpha * fp0 || falpha >= fa) { /* a_next = a; */ b = alpha; fb = falpha; fpb = GSL_NAN; } else { fpalpha = GSL_FN_FDF_EVAL_DF (fn, alpha); if (fabs(fpalpha) <= -sigma * fp0) { *alpha_new = alpha; return GSL_SUCCESS; /* terminate */ } if ( ((b-a) >= 0 && fpalpha >= 0) || ((b-a) <=0 && fpalpha <= 0)) { b = a; fb = fa; fpb = fpa; a = alpha; fa = falpha; fpa = fpalpha; } else { a = alpha; fa = falpha; fpa = fpalpha; } } } return GSL_SUCCESS; } gsl/multimin/simplex.c0000644000175000017500000002605713536674414013427 0ustar eddedd/* multimin/simplex.c * * Copyright (C) 2007 Brian Gough * Copyright (C) 2002 Tuomo Keskitalo, Ivo Alxneit * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* - Originally written by Tuomo Keskitalo - Corrections to nmsimplex_iterate and other functions by Ivo Alxneit - Additional help by Brian Gough */ /* The Simplex method of Nelder and Mead, also known as the polytope search alogorithm. Ref: Nelder, J.A., Mead, R., Computer Journal 7 (1965) pp. 308-313. This implementation uses n+1 corner points in the simplex. */ #include #include #include #include typedef struct { gsl_matrix *x1; /* simplex corner points */ gsl_vector *y1; /* function value at corner points */ gsl_vector *ws1; /* workspace 1 for algorithm */ gsl_vector *ws2; /* workspace 2 for algorithm */ } nmsimplex_state_t; static double nmsimplex_move_corner (const double coeff, const nmsimplex_state_t * state, size_t corner, gsl_vector * xc, const gsl_multimin_function * f) { /* moves a simplex corner scaled by coeff (negative value represents mirroring by the middle point of the "other" corner points) and gives new corner in xc and function value at xc as a return value */ gsl_matrix *x1 = state->x1; size_t i, j; double newval, mp; for (j = 0; j < x1->size2; j++) { mp = 0.0; for (i = 0; i < x1->size1; i++) { if (i != corner) { mp += (gsl_matrix_get (x1, i, j)); } } mp /= (double) (x1->size1 - 1); newval = mp - coeff * (mp - gsl_matrix_get (x1, corner, j)); gsl_vector_set (xc, j, newval); } newval = GSL_MULTIMIN_FN_EVAL (f, xc); return newval; } static int nmsimplex_contract_by_best (nmsimplex_state_t * state, size_t best, gsl_vector * xc, gsl_multimin_function * f) { /* Function contracts the simplex in respect to best valued corner. That is, all corners besides the best corner are moved. */ /* the xc vector is simply work space here */ gsl_matrix *x1 = state->x1; gsl_vector *y1 = state->y1; size_t i, j; double newval; int status = GSL_SUCCESS; for (i = 0; i < x1->size1; i++) { if (i != best) { for (j = 0; j < x1->size2; j++) { newval = 0.5 * (gsl_matrix_get (x1, i, j) + gsl_matrix_get (x1, best, j)); gsl_matrix_set (x1, i, j, newval); } /* evaluate function in the new point */ gsl_matrix_get_row (xc, x1, i); newval = GSL_MULTIMIN_FN_EVAL (f, xc); gsl_vector_set (y1, i, newval); /* notify caller that we found at least one bad function value. we finish the contraction (and do not abort) to allow the user to handle the situation */ if(!gsl_finite(newval)) { status = GSL_EBADFUNC; } } } return status; } static int nmsimplex_calc_center (const nmsimplex_state_t * state, gsl_vector * mp) { /* calculates the center of the simplex to mp */ gsl_matrix *x1 = state->x1; size_t i, j; double val; for (j = 0; j < x1->size2; j++) { val = 0.0; for (i = 0; i < x1->size1; i++) { val += gsl_matrix_get (x1, i, j); } val /= x1->size1; gsl_vector_set (mp, j, val); } return GSL_SUCCESS; } static double nmsimplex_size (nmsimplex_state_t * state) { /* calculates simplex size as average sum of length of vectors from simplex center to corner points: ( sum ( || y - y_middlepoint || ) ) / n */ gsl_vector *s = state->ws1; gsl_vector *mp = state->ws2; gsl_matrix *x1 = state->x1; size_t i; double ss = 0.0; /* Calculate middle point */ nmsimplex_calc_center (state, mp); for (i = 0; i < x1->size1; i++) { gsl_matrix_get_row (s, x1, i); gsl_blas_daxpy (-1.0, mp, s); ss += gsl_blas_dnrm2 (s); } return ss / (double) (x1->size1); } static int nmsimplex_alloc (void *vstate, size_t n) { nmsimplex_state_t *state = (nmsimplex_state_t *) vstate; if (n == 0) { GSL_ERROR("invalid number of parameters specified", GSL_EINVAL); } state->x1 = gsl_matrix_alloc (n + 1, n); if (state->x1 == NULL) { GSL_ERROR ("failed to allocate space for x1", GSL_ENOMEM); } state->y1 = gsl_vector_alloc (n + 1); if (state->y1 == NULL) { gsl_matrix_free(state->x1); GSL_ERROR ("failed to allocate space for y", GSL_ENOMEM); } state->ws1 = gsl_vector_alloc (n); if (state->ws1 == NULL) { gsl_matrix_free(state->x1); gsl_vector_free(state->y1); GSL_ERROR ("failed to allocate space for ws1", GSL_ENOMEM); } state->ws2 = gsl_vector_alloc (n); if (state->ws2 == NULL) { gsl_matrix_free(state->x1); gsl_vector_free(state->y1); gsl_vector_free(state->ws1); GSL_ERROR ("failed to allocate space for ws2", GSL_ENOMEM); } return GSL_SUCCESS; } static int nmsimplex_set (void *vstate, gsl_multimin_function * f, const gsl_vector * x, double *size, const gsl_vector * step_size) { int status; size_t i; double val; nmsimplex_state_t *state = (nmsimplex_state_t *) vstate; gsl_vector *xtemp = state->ws1; if (xtemp->size != x->size) { GSL_ERROR("incompatible size of x", GSL_EINVAL); } if (xtemp->size != step_size->size) { GSL_ERROR("incompatible size of step_size", GSL_EINVAL); } /* first point is the original x0 */ val = GSL_MULTIMIN_FN_EVAL (f, x); if (!gsl_finite(val)) { GSL_ERROR("non-finite function value encountered", GSL_EBADFUNC); } gsl_matrix_set_row (state->x1, 0, x); gsl_vector_set (state->y1, 0, val); /* following points are initialized to x0 + step_size */ for (i = 0; i < x->size; i++) { status = gsl_vector_memcpy (xtemp, x); if (status != 0) { GSL_ERROR ("vector memcopy failed", GSL_EFAILED); } val = gsl_vector_get (xtemp, i) + gsl_vector_get (step_size, i); gsl_vector_set (xtemp, i, val); val = GSL_MULTIMIN_FN_EVAL (f, xtemp); if (!gsl_finite(val)) { GSL_ERROR("non-finite function value encountered", GSL_EBADFUNC); } gsl_matrix_set_row (state->x1, i + 1, xtemp); gsl_vector_set (state->y1, i + 1, val); } /* Initialize simplex size */ *size = nmsimplex_size (state); return GSL_SUCCESS; } static void nmsimplex_free (void *vstate) { nmsimplex_state_t *state = (nmsimplex_state_t *) vstate; gsl_matrix_free (state->x1); gsl_vector_free (state->y1); gsl_vector_free (state->ws1); gsl_vector_free (state->ws2); } static int nmsimplex_iterate (void *vstate, gsl_multimin_function * f, gsl_vector * x, double *size, double *fval) { /* Simplex iteration tries to minimize function f value */ /* Includes corrections from Ivo Alxneit */ nmsimplex_state_t *state = (nmsimplex_state_t *) vstate; /* xc and xc2 vectors store tried corner point coordinates */ gsl_vector *xc = state->ws1; gsl_vector *xc2 = state->ws2; gsl_vector *y1 = state->y1; gsl_matrix *x1 = state->x1; size_t n = y1->size; size_t i; size_t hi, s_hi, lo; double dhi, ds_hi, dlo; int status; double val, val2; if (xc->size != x->size) { GSL_ERROR("incompatible size of x", GSL_EINVAL); } /* get index of highest, second highest and lowest point */ dhi = dlo = gsl_vector_get (y1, 0); hi = 0; lo = 0; ds_hi = gsl_vector_get(y1, 1); s_hi = 1; for (i = 1; i < n; i++) { val = (gsl_vector_get (y1, i)); if (val < dlo) { dlo = val; lo = i; } else if (val > dhi) { ds_hi = dhi; s_hi = hi; dhi = val; hi = i; } else if (val > ds_hi) { ds_hi = val; s_hi = i; } } /* reflect the highest value */ val = nmsimplex_move_corner (-1.0, state, hi, xc, f); if (gsl_finite(val) && val < gsl_vector_get (y1, lo)) { /* reflected point becomes lowest point, try expansion */ val2 = nmsimplex_move_corner (-2.0, state, hi, xc2, f); if (gsl_finite(val2) && val2 < gsl_vector_get (y1, lo)) { gsl_matrix_set_row (x1, hi, xc2); gsl_vector_set (y1, hi, val2); } else { gsl_matrix_set_row (x1, hi, xc); gsl_vector_set (y1, hi, val); } } /* reflection does not improve things enough or we got a non-finite (illegal) function value */ else if (!gsl_finite(val) || val > gsl_vector_get (y1, s_hi)) { if (gsl_finite(val) && val <= gsl_vector_get (y1, hi)) { /* if trial point is better than highest point, replace highest point */ gsl_matrix_set_row (x1, hi, xc); gsl_vector_set (y1, hi, val); } /* try one dimensional contraction */ val2 = nmsimplex_move_corner (0.5, state, hi, xc2, f); if (gsl_finite(val2) && val2 <= gsl_vector_get (y1, hi)) { gsl_matrix_set_row (state->x1, hi, xc2); gsl_vector_set (y1, hi, val2); } else { /* contract the whole simplex in respect to the best point */ status = nmsimplex_contract_by_best (state, lo, xc, f); if (status != GSL_SUCCESS) { GSL_ERROR ("nmsimplex_contract_by_best failed", GSL_EFAILED); } } } else { /* trial point is better than second highest point. Replace highest point by it */ gsl_matrix_set_row (x1, hi, xc); gsl_vector_set (y1, hi, val); } /* return lowest point of simplex as x */ lo = gsl_vector_min_index (y1); gsl_matrix_get_row (x, x1, lo); *fval = gsl_vector_get (y1, lo); /* Update simplex size */ *size = nmsimplex_size (state); return GSL_SUCCESS; } static const gsl_multimin_fminimizer_type nmsimplex_type = { "nmsimplex", /* name */ sizeof (nmsimplex_state_t), &nmsimplex_alloc, &nmsimplex_set, &nmsimplex_iterate, &nmsimplex_free }; const gsl_multimin_fminimizer_type * gsl_multimin_fminimizer_nmsimplex = &nmsimplex_type; gsl/multimin/ChangeLog0000644000175000017500000001330313536674414013342 0ustar eddedd2010-04-07 Brian Gough * test.c (test_fdf): handle case of GSL_ENOPROG from early returns * test_funcs.c (simpleabs_f): new test function with non-zero first derivatives around minimum * steepest_descent.c (steepest_descent_iterate): return early if trial point does not move within machine precision * directional_minimize.c (intermediate_point): return early with step=0 if trial point does not move from initial point within machine precision 2009-08-05 Brian Gough * simplex2.c (contract_by_best): update the size and center to avoid old values being used * test.c (main): added a testcase for the spring function 2009-07-11 Brian Gough * simplex2.c (nmsimplex_set_rand): provide alternative initialisation which randomizes the initial simplex 2009-07-09 Brian Gough * fminimizer.c (gsl_multimin_fminimizer_free): handle NULL argument in free * fdfminimizer.c (gsl_multimin_fdfminimizer_free): handle NULL argument in free 2008-11-29 Brian Gough * test.c (test_f): extended fminimizer test to allow type to be passed in as a parameter * simplex2.c: use BLAS, keep track of center in state to avoid unnecessary computation, compute size as RMS value to allow linear update. 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2008-05-06 Brian Gough * simplex.c (nmsimplex_iterate): fix search for second highest point 2007-07-30 Brian Gough * history.c: removed (unused file) 2007-02-20 Brian Gough * vector_bfgs2.c (vector_bfgs2_iterate): use positive step size 2007-02-17 Brian Gough * linear_minimize.c (minimize): return GSL_ENOPROG for roundoff 2007-02-14 Brian Gough * linear_minimize.c: made all functions static * linear_wrapper.c: made all functions static 2007-02-08 Brian Gough * linear_wrapper.c: convert multidimensional function to one-dimensional for line minimisation * linear_minimize.c: one-dimensional minimisation from Fletcher * vector_bfgs2.c: added Fletcher's implementation 2006-02-18 Brian Gough * vector_bfgs.c (vector_bfgs_iterate): avoid division by zero if dxdg == 0 2003-07-24 Brian Gough * simplex.c (nmsimplex_set): changed index variable i from int to size_t 2003-04-17 Brian Gough * simplex.c (nmsimplex_iterate): bug fix to find the second highest point correctly * vector_bfgs.c (vector_bfgs_iterate): no need to update g0norm on each downhill step, since g0norm is the norm for the initial gradient. * conjugate_pr.c (conjugate_pr_iterate): no need to update g0norm on each downhill step, since g0norm is the norm for the initial gradient. * conjugate_fr.c (conjugate_fr_iterate): no need to update g0norm on each downhill step, since g0norm is the norm for the initial gradient. Sun Sep 30 20:50:00 2002 Tuomo Keskitalo * Added Nelder-Mead Simplex optimization algorithm and fminimizer structure. Sun Feb 10 21:57:36 2002 Brian Gough * conjugate_pr.c (conjugate_pr_iterate): return error ENOPROG if cannot find downward step * conjugate_fr.c (conjugate_fr_iterate): return error ENOPROG if cannot find downward step * vector_bfgs.c (vector_bfgs_iterate): return error ENOPROG if cannot find downward step Thu Oct 25 11:56:06 2001 Brian Gough * added a tolerance parameter for the line minimizations Wed Oct 24 23:18:46 2001 Brian Gough * modified all routines to use a single minimiztion iteration, instead of nested iterations for line and gradient search. Thu Oct 18 22:56:52 2001 Brian Gough * renamed gsl_multimin_f_minimizer to gsl_multimin_fminimizer for consistency with rest of the library * renamed gsl_multimin_fdf_minimizer to gsl_multimin_fdfminimizer for consistency with rest of the library Mon Oct 8 21:41:51 2001 Brian Gough * diff.c (gsl_multimin_diff): pass params argument using GSL_MULTIMIN_FN_EVAL (3 occurrences) Sun Jul 15 17:54:15 2001 Brian Gough * fdfminimizer.c (gsl_multimin_fdf_minimizer_alloc): eliminated use of interval type Sat Apr 28 11:29:08 2001 Brian Gough * diff.c (gsl_multimin_diff): made indices unsigned Mon Apr 23 13:22:31 2001 Brian Gough * gsl_multimin.h diff.c: made starting_point const throughout to avoid compiler warnings * made internal functions static * gsl_multimin.h: added missing prototype for gsl_multimin_diff Tue Apr 17 22:15:37 2001 Brian Gough * gsl_multimin.h: added missing prototype for gsl_multimin_compute_ep Sun Feb 18 16:35:21 2001 Brian Gough * fdfminimizer.c (gsl_multimin_fdf_minimizer_alloc): modified to account for change in calling convection of gsl_min_fminimizer_alloc Fri May 5 16:08:34 2000 Brian Gough * test.c (test_fdf): fixed warning about "control reaches end of non-void function" by changing test_fdf to return type void Tue May 2 19:20:46 2000 Brian Gough * test.c (main): added return gsl_test_summary() to main, so that test results are returned through the exit status. Mon Feb 14 13:12:16 2000 Brian Gough * made all internal functions static gsl/multimin/Makefile.am0000644000175000017500000000232613536674414013627 0ustar eddeddnoinst_LTLIBRARIES = libgslmultimin.la pkginclude_HEADERS = gsl_multimin.h AM_CPPFLAGS = -I$(top_srcdir) libgslmultimin_la_SOURCES = fdfminimizer.c steepest_descent.c conjugate_fr.c conjugate_pr.c convergence.c diff.c vector_bfgs.c vector_bfgs2.c fminimizer.c simplex.c simplex2.c noinst_HEADERS = directional_minimize.c linear_minimize.c linear_wrapper.c check_PROGRAMS = test #demo TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_funcs.c test_funcs.h test_LDADD = libgslmultimin.la ../min/libgslmin.la ../poly/libgslpoly.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la #demo_SOURCES = demo.c #demo_LDADD = libgslmultimin.la ../min/libgslmin.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../linalg/libgsllinalg.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la gsl/multimin/gsl_multimin.h0000644000175000017500000001521313536674414014446 0ustar eddedd/* multimin/gsl_multimin.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Fabrice Rossi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Modified by Tuomo Keskitalo to include fminimizer and Nelder Mead related lines */ #ifndef __GSL_MULTIMIN_H__ #define __GSL_MULTIMIN_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Definition of an arbitrary real-valued function with gsl_vector input and */ /* parameters */ struct gsl_multimin_function_struct { double (* f) (const gsl_vector * x, void * params); size_t n; void * params; }; typedef struct gsl_multimin_function_struct gsl_multimin_function; #define GSL_MULTIMIN_FN_EVAL(F,x) (*((F)->f))(x,(F)->params) /* Definition of an arbitrary differentiable real-valued function */ /* with gsl_vector input and parameters */ struct gsl_multimin_function_fdf_struct { double (* f) (const gsl_vector * x, void * params); void (* df) (const gsl_vector * x, void * params,gsl_vector * df); void (* fdf) (const gsl_vector * x, void * params,double *f,gsl_vector * df); size_t n; void * params; }; typedef struct gsl_multimin_function_fdf_struct gsl_multimin_function_fdf; #define GSL_MULTIMIN_FN_EVAL_F(F,x) (*((F)->f))(x,(F)->params) #define GSL_MULTIMIN_FN_EVAL_DF(F,x,g) (*((F)->df))(x,(F)->params,(g)) #define GSL_MULTIMIN_FN_EVAL_F_DF(F,x,y,g) (*((F)->fdf))(x,(F)->params,(y),(g)) int gsl_multimin_diff (const gsl_multimin_function * f, const gsl_vector * x, gsl_vector * g); /* minimization of non-differentiable functions */ typedef struct { const char *name; size_t size; int (*alloc) (void *state, size_t n); int (*set) (void *state, gsl_multimin_function * f, const gsl_vector * x, double * size, const gsl_vector * step_size); int (*iterate) (void *state, gsl_multimin_function * f, gsl_vector * x, double * size, double * fval); void (*free) (void *state); } gsl_multimin_fminimizer_type; typedef struct { /* multi dimensional part */ const gsl_multimin_fminimizer_type *type; gsl_multimin_function *f; double fval; gsl_vector * x; double size; void *state; } gsl_multimin_fminimizer; gsl_multimin_fminimizer * gsl_multimin_fminimizer_alloc(const gsl_multimin_fminimizer_type *T, size_t n); int gsl_multimin_fminimizer_set (gsl_multimin_fminimizer * s, gsl_multimin_function * f, const gsl_vector * x, const gsl_vector * step_size); void gsl_multimin_fminimizer_free(gsl_multimin_fminimizer *s); const char * gsl_multimin_fminimizer_name (const gsl_multimin_fminimizer * s); int gsl_multimin_fminimizer_iterate(gsl_multimin_fminimizer *s); gsl_vector * gsl_multimin_fminimizer_x (const gsl_multimin_fminimizer * s); double gsl_multimin_fminimizer_minimum (const gsl_multimin_fminimizer * s); double gsl_multimin_fminimizer_size (const gsl_multimin_fminimizer * s); /* Convergence test functions */ int gsl_multimin_test_gradient(const gsl_vector * g, double epsabs); int gsl_multimin_test_size(const double size, double epsabs); /* minimisation of differentiable functions */ typedef struct { const char *name; size_t size; int (*alloc) (void *state, size_t n); int (*set) (void *state, gsl_multimin_function_fdf * fdf, const gsl_vector * x, double * f, gsl_vector * gradient, double step_size, double tol); int (*iterate) (void *state,gsl_multimin_function_fdf * fdf, gsl_vector * x, double * f, gsl_vector * gradient, gsl_vector * dx); int (*restart) (void *state); void (*free) (void *state); } gsl_multimin_fdfminimizer_type; typedef struct { /* multi dimensional part */ const gsl_multimin_fdfminimizer_type *type; gsl_multimin_function_fdf *fdf; double f; gsl_vector * x; gsl_vector * gradient; gsl_vector * dx; void *state; } gsl_multimin_fdfminimizer; gsl_multimin_fdfminimizer * gsl_multimin_fdfminimizer_alloc(const gsl_multimin_fdfminimizer_type *T, size_t n); int gsl_multimin_fdfminimizer_set (gsl_multimin_fdfminimizer * s, gsl_multimin_function_fdf *fdf, const gsl_vector * x, double step_size, double tol); void gsl_multimin_fdfminimizer_free(gsl_multimin_fdfminimizer *s); const char * gsl_multimin_fdfminimizer_name (const gsl_multimin_fdfminimizer * s); int gsl_multimin_fdfminimizer_iterate(gsl_multimin_fdfminimizer *s); int gsl_multimin_fdfminimizer_restart(gsl_multimin_fdfminimizer *s); gsl_vector * gsl_multimin_fdfminimizer_x (const gsl_multimin_fdfminimizer * s); gsl_vector * gsl_multimin_fdfminimizer_dx (const gsl_multimin_fdfminimizer * s); gsl_vector * gsl_multimin_fdfminimizer_gradient (const gsl_multimin_fdfminimizer * s); double gsl_multimin_fdfminimizer_minimum (const gsl_multimin_fdfminimizer * s); GSL_VAR const gsl_multimin_fdfminimizer_type *gsl_multimin_fdfminimizer_steepest_descent; GSL_VAR const gsl_multimin_fdfminimizer_type *gsl_multimin_fdfminimizer_conjugate_pr; GSL_VAR const gsl_multimin_fdfminimizer_type *gsl_multimin_fdfminimizer_conjugate_fr; GSL_VAR const gsl_multimin_fdfminimizer_type *gsl_multimin_fdfminimizer_vector_bfgs; GSL_VAR const gsl_multimin_fdfminimizer_type *gsl_multimin_fdfminimizer_vector_bfgs2; GSL_VAR const gsl_multimin_fminimizer_type *gsl_multimin_fminimizer_nmsimplex; GSL_VAR const gsl_multimin_fminimizer_type *gsl_multimin_fminimizer_nmsimplex2; GSL_VAR const gsl_multimin_fminimizer_type *gsl_multimin_fminimizer_nmsimplex2rand; __END_DECLS #endif /* __GSL_MULTIMIN_H__ */ gsl/multimin/conjugate_pr.c0000644000175000017500000001523013536674414014415 0ustar eddedd/* multimin/conjugate_pr.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Fabrice Rossi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* conjugate_pr.c -- Conjugate gradient Polak-Ribiere algorithm */ /* Modified by Brian Gough to use single iteration structure */ #include #include #include #include "directional_minimize.c" typedef struct { int iter; double step; double max_step; double tol; gsl_vector *x1; gsl_vector *dx1; gsl_vector *x2; double pnorm; gsl_vector *p; double g0norm; gsl_vector *g0; } conjugate_pr_state_t; static int conjugate_pr_alloc (void *vstate, size_t n) { conjugate_pr_state_t *state = (conjugate_pr_state_t *) vstate; state->x1 = gsl_vector_calloc (n); if (state->x1 == 0) { GSL_ERROR ("failed to allocate space for x1", GSL_ENOMEM); } state->dx1 = gsl_vector_calloc (n); if (state->dx1 == 0) { gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for dx1", GSL_ENOMEM); } state->x2 = gsl_vector_calloc (n); if (state->x2 == 0) { gsl_vector_free (state->dx1); gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for x2", GSL_ENOMEM); } state->p = gsl_vector_calloc (n); if (state->p == 0) { gsl_vector_free (state->x2); gsl_vector_free (state->dx1); gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for p", GSL_ENOMEM); } state->g0 = gsl_vector_calloc (n); if (state->g0 == 0) { gsl_vector_free (state->p); gsl_vector_free (state->x2); gsl_vector_free (state->dx1); gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for g0", GSL_ENOMEM); } return GSL_SUCCESS; } static int conjugate_pr_set (void *vstate, gsl_multimin_function_fdf * fdf, const gsl_vector * x, double *f, gsl_vector * gradient, double step_size, double tol) { conjugate_pr_state_t *state = (conjugate_pr_state_t *) vstate; state->iter = 0; state->step = step_size; state->max_step = step_size; state->tol = tol; GSL_MULTIMIN_FN_EVAL_F_DF (fdf, x, f, gradient); /* Use the gradient as the initial direction */ gsl_vector_memcpy (state->p, gradient); gsl_vector_memcpy (state->g0, gradient); { double gnorm = gsl_blas_dnrm2 (gradient); state->pnorm = gnorm; state->g0norm = gnorm; } return GSL_SUCCESS; } static void conjugate_pr_free (void *vstate) { conjugate_pr_state_t *state = (conjugate_pr_state_t *) vstate; gsl_vector_free (state->g0); gsl_vector_free (state->p); gsl_vector_free (state->x2); gsl_vector_free (state->dx1); gsl_vector_free (state->x1); } static int conjugate_pr_restart (void *vstate) { conjugate_pr_state_t *state = (conjugate_pr_state_t *) vstate; state->iter = 0; return GSL_SUCCESS; } static int conjugate_pr_iterate (void *vstate, gsl_multimin_function_fdf * fdf, gsl_vector * x, double *f, gsl_vector * gradient, gsl_vector * dx) { conjugate_pr_state_t *state = (conjugate_pr_state_t *) vstate; gsl_vector *x1 = state->x1; gsl_vector *dx1 = state->dx1; gsl_vector *x2 = state->x2; gsl_vector *p = state->p; gsl_vector *g0 = state->g0; double pnorm = state->pnorm; double g0norm = state->g0norm; double fa = *f, fb, fc; double dir; double stepa = 0.0, stepb, stepc = state->step, tol = state->tol; double g1norm; double pg; if (pnorm == 0.0 || g0norm == 0.0) { gsl_vector_set_zero (dx); return GSL_ENOPROG; } /* Determine which direction is downhill, +p or -p */ gsl_blas_ddot (p, gradient, &pg); dir = (pg >= 0.0) ? +1.0 : -1.0; /* Compute new trial point at x_c= x - step * p, where p is the current direction */ take_step (x, p, stepc, dir / pnorm, x1, dx); /* Evaluate function and gradient at new point xc */ fc = GSL_MULTIMIN_FN_EVAL_F (fdf, x1); if (fc < fa) { /* Success, reduced the function value */ state->step = stepc * 2.0; *f = fc; gsl_vector_memcpy (x, x1); GSL_MULTIMIN_FN_EVAL_DF (fdf, x1, gradient); return GSL_SUCCESS; } #ifdef DEBUG printf ("got stepc = %g fc = %g\n", stepc, fc); #endif /* Do a line minimisation in the region (xa,fa) (xc,fc) to find an intermediate (xb,fb) satisifying fa > fb < fc. Choose an initial xb based on parabolic interpolation */ intermediate_point (fdf, x, p, dir / pnorm, pg, stepa, stepc, fa, fc, x1, dx1, gradient, &stepb, &fb); if (stepb == 0.0) { return GSL_ENOPROG; } minimize (fdf, x, p, dir / pnorm, stepa, stepb, stepc, fa, fb, fc, tol, x1, dx1, x2, dx, gradient, &(state->step), f, &g1norm); gsl_vector_memcpy (x, x2); /* Choose a new conjugate direction for the next step */ state->iter = (state->iter + 1) % x->size; if (state->iter == 0) { gsl_vector_memcpy (p, gradient); state->pnorm = g1norm; } else { /* p' = g1 - beta * p */ double g0g1, beta; gsl_blas_daxpy (-1.0, gradient, g0); /* g0' = g0 - g1 */ gsl_blas_ddot(g0, gradient, &g0g1); /* g1g0 = (g0-g1).g1 */ beta = g0g1 / (g0norm*g0norm); /* beta = -((g1 - g0).g1)/(g0.g0) */ gsl_blas_dscal (-beta, p); gsl_blas_daxpy (1.0, gradient, p); state->pnorm = gsl_blas_dnrm2 (p); } state->g0norm = g1norm; gsl_vector_memcpy (g0, gradient); #ifdef DEBUG printf ("updated conjugate directions\n"); printf ("p: "); gsl_vector_fprintf (stdout, p, "%g"); printf ("g: "); gsl_vector_fprintf (stdout, gradient, "%g"); #endif return GSL_SUCCESS; } static const gsl_multimin_fdfminimizer_type conjugate_pr_type = { "conjugate_pr", /* name */ sizeof (conjugate_pr_state_t), &conjugate_pr_alloc, &conjugate_pr_set, &conjugate_pr_iterate, &conjugate_pr_restart, &conjugate_pr_free }; const gsl_multimin_fdfminimizer_type * gsl_multimin_fdfminimizer_conjugate_pr = &conjugate_pr_type; gsl/multimin/diff.c0000644000175000017500000000305613536674414012650 0ustar eddedd/* multimin/diff.c * * Copyright (C) 2000 David Morrison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include int gsl_multimin_diff (const gsl_multimin_function * f, const gsl_vector * x, gsl_vector * g) { size_t i, n = f->n; double h = GSL_SQRT_DBL_EPSILON; gsl_vector * x1 = gsl_vector_alloc (n); /* FIXME: pass as argument */ gsl_vector_memcpy (x1, x); for (i = 0; i < n; i++) { double fl, fh; double xi = gsl_vector_get (x, i); double dx = fabs(xi) * h; if (dx == 0.0) dx = h; gsl_vector_set (x1, i, xi + dx); fh = GSL_MULTIMIN_FN_EVAL(f, x1); gsl_vector_set (x1, i, xi - dx); fl = GSL_MULTIMIN_FN_EVAL(f, x1); gsl_vector_set (x1, i, xi); gsl_vector_set (g, i, (fh - fl) / (2.0 * dx)); } gsl_vector_free (x1); return GSL_SUCCESS; } gsl/multimin/vector_bfgs2.c0000644000175000017500000002033613536674414014325 0ustar eddedd/* multimin/vector_bfgs2.c * * Copyright (C) 2007, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ /* vector_bfgs2.c -- Fletcher's implementation of the BFGS method, using the line minimisation algorithm from from R.Fletcher, "Practical Methods of Optimization", Second Edition, ISBN 0471915475. Algorithms 2.6.2 and 2.6.4. */ /* Thanks to Alan Irwin irwin@beluga.phys.uvic.ca. for suggesting this algorithm and providing sample fortran benchmarks */ #include #include #include #include "linear_minimize.c" #include "linear_wrapper.c" typedef struct { int iter; double step; double g0norm; double pnorm; double delta_f; double fp0; /* f'(0) for f(x-alpha*p) */ gsl_vector *x0; gsl_vector *g0; gsl_vector *p; /* work space */ gsl_vector *dx0; gsl_vector *dg0; gsl_vector *x_alpha; gsl_vector *g_alpha; /* wrapper function */ wrapper_t wrap; /* minimization parameters */ double rho; double sigma; double tau1; double tau2; double tau3; int order; } vector_bfgs2_state_t; static int vector_bfgs2_alloc (void *vstate, size_t n) { vector_bfgs2_state_t *state = (vector_bfgs2_state_t *) vstate; state->p = gsl_vector_calloc (n); if (state->p == 0) { GSL_ERROR ("failed to allocate space for p", GSL_ENOMEM); } state->x0 = gsl_vector_calloc (n); if (state->x0 == 0) { gsl_vector_free (state->p); GSL_ERROR ("failed to allocate space for g0", GSL_ENOMEM); } state->g0 = gsl_vector_calloc (n); if (state->g0 == 0) { gsl_vector_free (state->x0); gsl_vector_free (state->p); GSL_ERROR ("failed to allocate space for g0", GSL_ENOMEM); } state->dx0 = gsl_vector_calloc (n); if (state->dx0 == 0) { gsl_vector_free (state->g0); gsl_vector_free (state->x0); gsl_vector_free (state->p); GSL_ERROR ("failed to allocate space for g0", GSL_ENOMEM); } state->dg0 = gsl_vector_calloc (n); if (state->dg0 == 0) { gsl_vector_free (state->dx0); gsl_vector_free (state->g0); gsl_vector_free (state->x0); gsl_vector_free (state->p); GSL_ERROR ("failed to allocate space for g0", GSL_ENOMEM); } state->x_alpha = gsl_vector_calloc (n); if (state->x_alpha == 0) { gsl_vector_free (state->dg0); gsl_vector_free (state->dx0); gsl_vector_free (state->g0); gsl_vector_free (state->x0); gsl_vector_free (state->p); GSL_ERROR ("failed to allocate space for g0", GSL_ENOMEM); } state->g_alpha = gsl_vector_calloc (n); if (state->g_alpha == 0) { gsl_vector_free (state->x_alpha); gsl_vector_free (state->dg0); gsl_vector_free (state->dx0); gsl_vector_free (state->g0); gsl_vector_free (state->x0); gsl_vector_free (state->p); GSL_ERROR ("failed to allocate space for g0", GSL_ENOMEM); } return GSL_SUCCESS; } static int vector_bfgs2_set (void *vstate, gsl_multimin_function_fdf * fdf, const gsl_vector * x, double *f, gsl_vector * gradient, double step_size, double tol) { vector_bfgs2_state_t *state = (vector_bfgs2_state_t *) vstate; state->iter = 0; state->step = step_size; state->delta_f = 0; GSL_MULTIMIN_FN_EVAL_F_DF (fdf, x, f, gradient); /* Use the gradient as the initial direction */ gsl_vector_memcpy (state->x0, x); gsl_vector_memcpy (state->g0, gradient); state->g0norm = gsl_blas_dnrm2 (state->g0); gsl_vector_memcpy (state->p, gradient); gsl_blas_dscal (-1 / state->g0norm, state->p); state->pnorm = gsl_blas_dnrm2 (state->p); /* should be 1 */ state->fp0 = -state->g0norm; /* Prepare the wrapper */ prepare_wrapper (&state->wrap, fdf, state->x0, *f, state->g0, state->p, state->x_alpha, state->g_alpha); /* Prepare 1d minimisation parameters */ state->rho = 0.01; state->sigma = tol; state->tau1 = 9; state->tau2 = 0.05; state->tau3 = 0.5; state->order = 3; /* use cubic interpolation where possible */ return GSL_SUCCESS; } static void vector_bfgs2_free (void *vstate) { vector_bfgs2_state_t *state = (vector_bfgs2_state_t *) vstate; gsl_vector_free (state->x_alpha); gsl_vector_free (state->g_alpha); gsl_vector_free (state->dg0); gsl_vector_free (state->dx0); gsl_vector_free (state->g0); gsl_vector_free (state->x0); gsl_vector_free (state->p); } static int vector_bfgs2_restart (void *vstate) { vector_bfgs2_state_t *state = (vector_bfgs2_state_t *) vstate; state->iter = 0; return GSL_SUCCESS; } static int vector_bfgs2_iterate (void *vstate, gsl_multimin_function_fdf * fdf, gsl_vector * x, double *f, gsl_vector * gradient, gsl_vector * dx) { vector_bfgs2_state_t *state = (vector_bfgs2_state_t *) vstate; double alpha = 0.0, alpha1; gsl_vector *x0 = state->x0; gsl_vector *g0 = state->g0; gsl_vector *p = state->p; double g0norm = state->g0norm; double pnorm = state->pnorm; double delta_f = state->delta_f; double pg, dir; int status; double f0 = *f; if (pnorm == 0.0 || g0norm == 0.0 || state->fp0 == 0) { gsl_vector_set_zero (dx); return GSL_ENOPROG; } if (delta_f < 0) { double del = GSL_MAX_DBL (-delta_f, 10 * GSL_DBL_EPSILON * fabs(f0)); alpha1 = GSL_MIN_DBL (1.0, 2.0 * del / (-state->fp0)); } else { alpha1 = fabs(state->step); } /* line minimisation, with cubic interpolation (order = 3) */ status = minimize (&state->wrap.fdf_linear, state->rho, state->sigma, state->tau1, state->tau2, state->tau3, state->order, alpha1, &alpha); if (status != GSL_SUCCESS) { return status; } update_position (&(state->wrap), alpha, x, f, gradient); state->delta_f = *f - f0; /* Choose a new direction for the next step */ { /* This is the BFGS update: */ /* p' = g1 - A dx - B dg */ /* A = - (1+ dg.dg/dx.dg) B + dg.g/dx.dg */ /* B = dx.g/dx.dg */ gsl_vector *dx0 = state->dx0; gsl_vector *dg0 = state->dg0; double dxg, dgg, dxdg, dgnorm, A, B; /* dx0 = x - x0 */ gsl_vector_memcpy (dx0, x); gsl_blas_daxpy (-1.0, x0, dx0); gsl_vector_memcpy (dx, dx0); /* keep a copy */ /* dg0 = g - g0 */ gsl_vector_memcpy (dg0, gradient); gsl_blas_daxpy (-1.0, g0, dg0); gsl_blas_ddot (dx0, gradient, &dxg); gsl_blas_ddot (dg0, gradient, &dgg); gsl_blas_ddot (dx0, dg0, &dxdg); dgnorm = gsl_blas_dnrm2 (dg0); if (dxdg != 0) { B = dxg / dxdg; A = -(1.0 + dgnorm * dgnorm / dxdg) * B + dgg / dxdg; } else { B = 0; A = 0; } gsl_vector_memcpy (p, gradient); gsl_blas_daxpy (-A, dx0, p); gsl_blas_daxpy (-B, dg0, p); } gsl_vector_memcpy (g0, gradient); gsl_vector_memcpy (x0, x); state->g0norm = gsl_blas_dnrm2 (g0); state->pnorm = gsl_blas_dnrm2 (p); /* update direction and fp0 */ gsl_blas_ddot (p, gradient, &pg); dir = (pg >= 0.0) ? -1.0 : +1.0; gsl_blas_dscal (dir / state->pnorm, p); state->pnorm = gsl_blas_dnrm2 (p); gsl_blas_ddot (p, g0, &state->fp0); change_direction (&state->wrap); return GSL_SUCCESS; } static const gsl_multimin_fdfminimizer_type vector_bfgs2_type = { "vector_bfgs2", /* name */ sizeof (vector_bfgs2_state_t), &vector_bfgs2_alloc, &vector_bfgs2_set, &vector_bfgs2_iterate, &vector_bfgs2_restart, &vector_bfgs2_free }; const gsl_multimin_fdfminimizer_type * gsl_multimin_fdfminimizer_vector_bfgs2 = &vector_bfgs2_type; gsl/multimin/fminimizer.c0000644000175000017500000000626013536674414014111 0ustar eddedd/* multimin/fminimizer.c * * Copyright (C) 2002, 2009 Tuomo Keskitalo, Ivo Alxneit * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include gsl_multimin_fminimizer * gsl_multimin_fminimizer_alloc (const gsl_multimin_fminimizer_type * T, size_t n) { int status; gsl_multimin_fminimizer *s = (gsl_multimin_fminimizer *) malloc (sizeof (gsl_multimin_fminimizer)); if (s == 0) { GSL_ERROR_VAL ("failed to allocate space for minimizer struct", GSL_ENOMEM, 0); } s->type = T; s->x = gsl_vector_calloc (n); if (s->x == 0) { free (s); GSL_ERROR_VAL ("failed to allocate space for x", GSL_ENOMEM, 0); } s->state = malloc (T->size); if (s->state == 0) { gsl_vector_free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for minimizer state", GSL_ENOMEM, 0); } status = (T->alloc) (s->state, n); if (status != GSL_SUCCESS) { free (s->state); gsl_vector_free (s->x); free (s); GSL_ERROR_VAL ("failed to initialize minimizer state", GSL_ENOMEM, 0); } return s; } int gsl_multimin_fminimizer_set (gsl_multimin_fminimizer * s, gsl_multimin_function * f, const gsl_vector * x, const gsl_vector * step_size) { if (s->x->size != f->n) { GSL_ERROR ("function incompatible with solver size", GSL_EBADLEN); } if (x->size != f->n || step_size->size != f->n) { GSL_ERROR ("vector length not compatible with function", GSL_EBADLEN); } s->f = f; gsl_vector_memcpy (s->x,x); return (s->type->set) (s->state, s->f, s->x, &(s->size), step_size); } void gsl_multimin_fminimizer_free (gsl_multimin_fminimizer * s) { RETURN_IF_NULL (s); (s->type->free) (s->state); free (s->state); gsl_vector_free (s->x); free (s); } int gsl_multimin_fminimizer_iterate (gsl_multimin_fminimizer * s) { return (s->type->iterate) (s->state, s->f, s->x, &(s->size), &(s->fval)); } const char * gsl_multimin_fminimizer_name (const gsl_multimin_fminimizer * s) { return s->type->name; } gsl_vector * gsl_multimin_fminimizer_x (const gsl_multimin_fminimizer * s) { return s->x; } double gsl_multimin_fminimizer_minimum (const gsl_multimin_fminimizer * s) { return s->fval; } double gsl_multimin_fminimizer_size (const gsl_multimin_fminimizer * s) { return s->size; } gsl/multimin/TODO0000644000175000017500000000033613536674414012262 0ustar eddedd# -*- org -*- #+CATEGORY: multimin * Check behavior of conjugate_fr in multimin -- the demo results look odd. * Should have made f and df return int instead of void. * Handle errors via GSL_NAN similar to min.h in min/ gsl/multimin/convergence.c0000644000175000017500000000264613536674414014242 0ustar eddedd/* multimin/convergence.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Fabrice Rossi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include int gsl_multimin_test_gradient (const gsl_vector *g, double epsabs) { double norm; if (epsabs < 0.0) { GSL_ERROR ("absolute tolerance is negative", GSL_EBADTOL); } norm = gsl_blas_dnrm2(g); if (norm < epsabs) { return GSL_SUCCESS; } return GSL_CONTINUE; } int gsl_multimin_test_size (const double size, double epsabs) { if (epsabs < 0.0) { GSL_ERROR ("absolute tolerance is negative", GSL_EBADTOL); } if (size < epsabs) { return GSL_SUCCESS; } return GSL_CONTINUE; } gsl/multimin/simplex2.c0000644000175000017500000004142413536674414013504 0ustar eddedd/* multimin/simplex2.c * * Copyright (C) 2007, 2008, 2009 Brian Gough * Copyright (C) 2002 Tuomo Keskitalo, Ivo Alxneit * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* - Originally written by Tuomo Keskitalo - Corrections to nmsimplex_iterate and other functions by Ivo Alxneit - Additional help by Brian Gough - Optimisations added by Brian Gough + use BLAS for frequently-called functions + keep track of the center to avoid unnecessary computation + compute size as RMS value, allowing linear update on each step instead of recomputing from all N+1 vectors. */ /* The Simplex method of Nelder and Mead, also known as the polytope search alogorithm. Ref: Nelder, J.A., Mead, R., Computer Journal 7 (1965) pp. 308-313. This implementation uses n+1 corner points in the simplex. */ #include #include #include #include #include typedef struct { gsl_matrix *x1; /* simplex corner points */ gsl_vector *y1; /* function value at corner points */ gsl_vector *ws1; /* workspace 1 for algorithm */ gsl_vector *ws2; /* workspace 2 for algorithm */ gsl_vector *center; /* center of all points */ gsl_vector *delta; /* current step */ gsl_vector *xmc; /* x - center (workspace) */ double S2; unsigned long count; } nmsimplex_state_t; static int compute_center (const nmsimplex_state_t * state, gsl_vector * center); static double compute_size (nmsimplex_state_t * state, const gsl_vector * center); static double try_corner_move (const double coeff, const nmsimplex_state_t * state, size_t corner, gsl_vector * xc, const gsl_multimin_function * f) { /* moves a simplex corner scaled by coeff (negative value represents mirroring by the middle point of the "other" corner points) and gives new corner in xc and function value at xc as a return value */ gsl_matrix *x1 = state->x1; const size_t P = x1->size1; double newval; /* xc = (1-coeff)*(P/(P-1)) * center(all) + ((P*coeff-1)/(P-1))*x_corner */ { double alpha = (1 - coeff) * P / (P - 1.0); double beta = (P * coeff - 1.0) / (P - 1.0); gsl_vector_const_view row = gsl_matrix_const_row (x1, corner); gsl_vector_memcpy (xc, state->center); gsl_blas_dscal (alpha, xc); gsl_blas_daxpy (beta, &row.vector, xc); } newval = GSL_MULTIMIN_FN_EVAL (f, xc); return newval; } static void update_point (nmsimplex_state_t * state, size_t i, const gsl_vector * x, double val) { gsl_vector_const_view x_orig = gsl_matrix_const_row (state->x1, i); const size_t P = state->x1->size1; /* Compute delta = x - x_orig */ gsl_vector_memcpy (state->delta, x); gsl_blas_daxpy (-1.0, &x_orig.vector, state->delta); /* Compute xmc = x_orig - c */ gsl_vector_memcpy (state->xmc, &x_orig.vector); gsl_blas_daxpy (-1.0, state->center, state->xmc); /* Update size: S2' = S2 + (2/P) * (x_orig - c).delta + (P-1)*(delta/P)^2 */ { double d = gsl_blas_dnrm2 (state->delta); double xmcd; gsl_blas_ddot (state->xmc, state->delta, &xmcd); state->S2 += (2.0 / P) * xmcd + ((P - 1.0) / P) * (d * d / P); } /* Update center: c' = c + (x - x_orig) / P */ { double alpha = 1.0 / P; gsl_blas_daxpy (-alpha, &x_orig.vector, state->center); gsl_blas_daxpy (alpha, x, state->center); } gsl_matrix_set_row (state->x1, i, x); gsl_vector_set (state->y1, i, val); } static int contract_by_best (nmsimplex_state_t * state, size_t best, gsl_vector * xc, gsl_multimin_function * f) { /* Function contracts the simplex in respect to best valued corner. That is, all corners besides the best corner are moved. (This function is rarely called in practice, since it is the last choice, hence not optimised - BJG) */ /* the xc vector is simply work space here */ gsl_matrix *x1 = state->x1; gsl_vector *y1 = state->y1; size_t i, j; double newval; int status = GSL_SUCCESS; for (i = 0; i < x1->size1; i++) { if (i != best) { for (j = 0; j < x1->size2; j++) { newval = 0.5 * (gsl_matrix_get (x1, i, j) + gsl_matrix_get (x1, best, j)); gsl_matrix_set (x1, i, j, newval); } /* evaluate function in the new point */ gsl_matrix_get_row (xc, x1, i); newval = GSL_MULTIMIN_FN_EVAL (f, xc); gsl_vector_set (y1, i, newval); /* notify caller that we found at least one bad function value. we finish the contraction (and do not abort) to allow the user to handle the situation */ if (!gsl_finite (newval)) { status = GSL_EBADFUNC; } } } /* We need to update the centre and size as well */ compute_center (state, state->center); compute_size (state, state->center); return status; } static int compute_center (const nmsimplex_state_t * state, gsl_vector * center) { /* calculates the center of the simplex and stores in center */ gsl_matrix *x1 = state->x1; const size_t P = x1->size1; size_t i; gsl_vector_set_zero (center); for (i = 0; i < P; i++) { gsl_vector_const_view row = gsl_matrix_const_row (x1, i); gsl_blas_daxpy (1.0, &row.vector, center); } { const double alpha = 1.0 / P; gsl_blas_dscal (alpha, center); } return GSL_SUCCESS; } static double compute_size (nmsimplex_state_t * state, const gsl_vector * center) { /* calculates simplex size as rms sum of length of vectors from simplex center to corner points: sqrt( sum ( || y - y_middlepoint ||^2 ) / n ) */ gsl_vector *s = state->ws1; gsl_matrix *x1 = state->x1; const size_t P = x1->size1; size_t i; double ss = 0.0; for (i = 0; i < P; i++) { double t; gsl_matrix_get_row (s, x1, i); gsl_blas_daxpy (-1.0, center, s); t = gsl_blas_dnrm2 (s); ss += t * t; } /* Store squared size in the state */ state->S2 = (ss / P); return sqrt (ss / P); } static int nmsimplex_alloc (void *vstate, size_t n) { nmsimplex_state_t *state = (nmsimplex_state_t *) vstate; if (n == 0) { GSL_ERROR ("invalid number of parameters specified", GSL_EINVAL); } state->x1 = gsl_matrix_alloc (n + 1, n); if (state->x1 == NULL) { GSL_ERROR ("failed to allocate space for x1", GSL_ENOMEM); } state->y1 = gsl_vector_alloc (n + 1); if (state->y1 == NULL) { gsl_matrix_free (state->x1); GSL_ERROR ("failed to allocate space for y", GSL_ENOMEM); } state->ws1 = gsl_vector_alloc (n); if (state->ws1 == NULL) { gsl_matrix_free (state->x1); gsl_vector_free (state->y1); GSL_ERROR ("failed to allocate space for ws1", GSL_ENOMEM); } state->ws2 = gsl_vector_alloc (n); if (state->ws2 == NULL) { gsl_matrix_free (state->x1); gsl_vector_free (state->y1); gsl_vector_free (state->ws1); GSL_ERROR ("failed to allocate space for ws2", GSL_ENOMEM); } state->center = gsl_vector_alloc (n); if (state->center == NULL) { gsl_matrix_free (state->x1); gsl_vector_free (state->y1); gsl_vector_free (state->ws1); gsl_vector_free (state->ws2); GSL_ERROR ("failed to allocate space for center", GSL_ENOMEM); } state->delta = gsl_vector_alloc (n); if (state->delta == NULL) { gsl_matrix_free (state->x1); gsl_vector_free (state->y1); gsl_vector_free (state->ws1); gsl_vector_free (state->ws2); gsl_vector_free (state->center); GSL_ERROR ("failed to allocate space for delta", GSL_ENOMEM); } state->xmc = gsl_vector_alloc (n); if (state->xmc == NULL) { gsl_matrix_free (state->x1); gsl_vector_free (state->y1); gsl_vector_free (state->ws1); gsl_vector_free (state->ws2); gsl_vector_free (state->center); gsl_vector_free (state->delta); GSL_ERROR ("failed to allocate space for xmc", GSL_ENOMEM); } state->count = 0; return GSL_SUCCESS; } static void nmsimplex_free (void *vstate) { nmsimplex_state_t *state = (nmsimplex_state_t *) vstate; gsl_matrix_free (state->x1); gsl_vector_free (state->y1); gsl_vector_free (state->ws1); gsl_vector_free (state->ws2); gsl_vector_free (state->center); gsl_vector_free (state->delta); gsl_vector_free (state->xmc); } static int nmsimplex_set (void *vstate, gsl_multimin_function * f, const gsl_vector * x, double *size, const gsl_vector * step_size) { int status; size_t i; double val; nmsimplex_state_t *state = (nmsimplex_state_t *) vstate; gsl_vector *xtemp = state->ws1; if (xtemp->size != x->size) { GSL_ERROR ("incompatible size of x", GSL_EINVAL); } if (xtemp->size != step_size->size) { GSL_ERROR ("incompatible size of step_size", GSL_EINVAL); } /* first point is the original x0 */ val = GSL_MULTIMIN_FN_EVAL (f, x); if (!gsl_finite (val)) { GSL_ERROR ("non-finite function value encountered", GSL_EBADFUNC); } gsl_matrix_set_row (state->x1, 0, x); gsl_vector_set (state->y1, 0, val); /* following points are initialized to x0 + step_size */ for (i = 0; i < x->size; i++) { status = gsl_vector_memcpy (xtemp, x); if (status != 0) { GSL_ERROR ("vector memcopy failed", GSL_EFAILED); } { double xi = gsl_vector_get (x, i); double si = gsl_vector_get (step_size, i); gsl_vector_set (xtemp, i, xi + si); val = GSL_MULTIMIN_FN_EVAL (f, xtemp); } if (!gsl_finite (val)) { GSL_ERROR ("non-finite function value encountered", GSL_EBADFUNC); } gsl_matrix_set_row (state->x1, i + 1, xtemp); gsl_vector_set (state->y1, i + 1, val); } compute_center (state, state->center); /* Initialize simplex size */ *size = compute_size (state, state->center); state->count++; return GSL_SUCCESS; } static int nmsimplex_iterate (void *vstate, gsl_multimin_function * f, gsl_vector * x, double *size, double *fval) { /* Simplex iteration tries to minimize function f value */ /* Includes corrections from Ivo Alxneit */ nmsimplex_state_t *state = (nmsimplex_state_t *) vstate; /* xc and xc2 vectors store tried corner point coordinates */ gsl_vector *xc = state->ws1; gsl_vector *xc2 = state->ws2; gsl_vector *y1 = state->y1; gsl_matrix *x1 = state->x1; const size_t n = y1->size; size_t i; size_t hi, s_hi, lo; double dhi, ds_hi, dlo; int status; double val, val2; if (xc->size != x->size) { GSL_ERROR ("incompatible size of x", GSL_EINVAL); } /* get index of highest, second highest and lowest point */ dhi = dlo = gsl_vector_get (y1, 0); hi = 0; lo = 0; ds_hi = gsl_vector_get (y1, 1); s_hi = 1; for (i = 1; i < n; i++) { val = (gsl_vector_get (y1, i)); if (val < dlo) { dlo = val; lo = i; } else if (val > dhi) { ds_hi = dhi; s_hi = hi; dhi = val; hi = i; } else if (val > ds_hi) { ds_hi = val; s_hi = i; } } /* try reflecting the highest value point */ val = try_corner_move (-1.0, state, hi, xc, f); if (gsl_finite (val) && val < gsl_vector_get (y1, lo)) { /* reflected point is lowest, try expansion */ val2 = try_corner_move (-2.0, state, hi, xc2, f); if (gsl_finite (val2) && val2 < gsl_vector_get (y1, lo)) { update_point (state, hi, xc2, val2); } else { update_point (state, hi, xc, val); } } else if (!gsl_finite (val) || val > gsl_vector_get (y1, s_hi)) { /* reflection does not improve things enough, or we got a non-finite function value */ if (gsl_finite (val) && val <= gsl_vector_get (y1, hi)) { /* if trial point is better than highest point, replace highest point */ update_point (state, hi, xc, val); } /* try one-dimensional contraction */ val2 = try_corner_move (0.5, state, hi, xc2, f); if (gsl_finite (val2) && val2 <= gsl_vector_get (y1, hi)) { update_point (state, hi, xc2, val2); } else { /* contract the whole simplex about the best point */ status = contract_by_best (state, lo, xc, f); if (status != GSL_SUCCESS) { GSL_ERROR ("contraction failed", GSL_EFAILED); } } } else { /* trial point is better than second highest point. Replace highest point by it */ update_point (state, hi, xc, val); } /* return lowest point of simplex as x */ lo = gsl_vector_min_index (y1); gsl_matrix_get_row (x, x1, lo); *fval = gsl_vector_get (y1, lo); /* Update simplex size */ { double S2 = state->S2; if (S2 > 0) { *size = sqrt (S2); } else { /* recompute if accumulated error has made size invalid */ *size = compute_size (state, state->center); } } return GSL_SUCCESS; } static const gsl_multimin_fminimizer_type nmsimplex_type = { "nmsimplex2", /* name */ sizeof (nmsimplex_state_t), &nmsimplex_alloc, &nmsimplex_set, &nmsimplex_iterate, &nmsimplex_free }; const gsl_multimin_fminimizer_type * gsl_multimin_fminimizer_nmsimplex2 = &nmsimplex_type; static inline double ran_unif (unsigned long *seed) { unsigned long s = *seed; *seed = (s * 69069 + 1) & 0xffffffffUL; return (*seed) / 4294967296.0; } static int nmsimplex_set_rand (void *vstate, gsl_multimin_function * f, const gsl_vector * x, double *size, const gsl_vector * step_size) { size_t i, j; double val; nmsimplex_state_t *state = (nmsimplex_state_t *) vstate; gsl_vector *xtemp = state->ws1; if (xtemp->size != x->size) { GSL_ERROR ("incompatible size of x", GSL_EINVAL); } if (xtemp->size != step_size->size) { GSL_ERROR ("incompatible size of step_size", GSL_EINVAL); } /* first point is the original x0 */ val = GSL_MULTIMIN_FN_EVAL (f, x); if (!gsl_finite (val)) { GSL_ERROR ("non-finite function value encountered", GSL_EBADFUNC); } gsl_matrix_set_row (state->x1, 0, x); gsl_vector_set (state->y1, 0, val); { gsl_matrix_view m = gsl_matrix_submatrix (state->x1, 1, 0, x->size, x->size); /* generate a random orthornomal basis */ unsigned long seed = state->count ^ 0x12345678; ran_unif (&seed); /* warm it up */ gsl_matrix_set_identity (&m.matrix); /* start with random reflections */ for (i = 0; i < x->size; i++) { double s = ran_unif (&seed); if (s > 0.5) gsl_matrix_set (&m.matrix, i, i, -1.0); } /* apply random rotations */ for (i = 0; i < x->size; i++) { for (j = i + 1; j < x->size; j++) { /* rotate columns i and j by a random angle */ double angle = 2.0 * M_PI * ran_unif (&seed); double c = cos (angle), s = sin (angle); gsl_vector_view c_i = gsl_matrix_column (&m.matrix, i); gsl_vector_view c_j = gsl_matrix_column (&m.matrix, j); gsl_blas_drot (&c_i.vector, &c_j.vector, c, s); } } /* scale the orthonormal basis by the user-supplied step_size in each dimension, and use as an offset from the central point x */ for (i = 0; i < x->size; i++) { double x_i = gsl_vector_get (x, i); double s_i = gsl_vector_get (step_size, i); gsl_vector_view c_i = gsl_matrix_column (&m.matrix, i); for (j = 0; j < x->size; j++) { double x_ij = gsl_vector_get (&c_i.vector, j); gsl_vector_set (&c_i.vector, j, x_i + s_i * x_ij); } } /* compute the function values at each offset point */ for (i = 0; i < x->size; i++) { gsl_vector_view r_i = gsl_matrix_row (&m.matrix, i); val = GSL_MULTIMIN_FN_EVAL (f, &r_i.vector); if (!gsl_finite (val)) { GSL_ERROR ("non-finite function value encountered", GSL_EBADFUNC); } gsl_vector_set (state->y1, i + 1, val); } } compute_center (state, state->center); /* Initialize simplex size */ *size = compute_size (state, state->center); state->count++; return GSL_SUCCESS; } static const gsl_multimin_fminimizer_type nmsimplex2rand_type = { "nmsimplex2rand", /* name */ sizeof (nmsimplex_state_t), &nmsimplex_alloc, &nmsimplex_set_rand, &nmsimplex_iterate, &nmsimplex_free }; const gsl_multimin_fminimizer_type * gsl_multimin_fminimizer_nmsimplex2rand = &nmsimplex2rand_type; gsl/multimin/conjugate_fr.c0000644000175000017500000001474013536674414014410 0ustar eddedd/* multimin/conjugate_fr.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Fabrice Rossi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* conjugate_fr.c -- Conjugate gradient Fletcher-Reeve algorithm */ /* Modified by Brian Gough to use single iteration structure */ #include #include #include #include "directional_minimize.c" typedef struct { int iter; double step; double max_step; double tol; gsl_vector *x1; gsl_vector *dx1; gsl_vector *x2; double pnorm; gsl_vector *p; double g0norm; gsl_vector *g0; } conjugate_fr_state_t; static int conjugate_fr_alloc (void *vstate, size_t n) { conjugate_fr_state_t *state = (conjugate_fr_state_t *) vstate; state->x1 = gsl_vector_calloc (n); if (state->x1 == 0) { GSL_ERROR ("failed to allocate space for x1", GSL_ENOMEM); } state->dx1 = gsl_vector_calloc (n); if (state->dx1 == 0) { gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for dx1", GSL_ENOMEM); } state->x2 = gsl_vector_calloc (n); if (state->x2 == 0) { gsl_vector_free (state->dx1); gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for x2", GSL_ENOMEM); } state->p = gsl_vector_calloc (n); if (state->p == 0) { gsl_vector_free (state->x2); gsl_vector_free (state->dx1); gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for p", GSL_ENOMEM); } state->g0 = gsl_vector_calloc (n); if (state->g0 == 0) { gsl_vector_free (state->p); gsl_vector_free (state->x2); gsl_vector_free (state->dx1); gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for g0", GSL_ENOMEM); } return GSL_SUCCESS; } static int conjugate_fr_set (void *vstate, gsl_multimin_function_fdf * fdf, const gsl_vector * x, double *f, gsl_vector * gradient, double step_size, double tol) { conjugate_fr_state_t *state = (conjugate_fr_state_t *) vstate; state->iter = 0; state->step = step_size; state->max_step = step_size; state->tol = tol; GSL_MULTIMIN_FN_EVAL_F_DF (fdf, x, f, gradient); /* Use the gradient as the initial direction */ gsl_vector_memcpy (state->p, gradient); gsl_vector_memcpy (state->g0, gradient); { double gnorm = gsl_blas_dnrm2 (gradient); state->pnorm = gnorm; state->g0norm = gnorm; } return GSL_SUCCESS; } static void conjugate_fr_free (void *vstate) { conjugate_fr_state_t *state = (conjugate_fr_state_t *) vstate; gsl_vector_free (state->g0); gsl_vector_free (state->p); gsl_vector_free (state->x2); gsl_vector_free (state->dx1); gsl_vector_free (state->x1); } static int conjugate_fr_restart (void *vstate) { conjugate_fr_state_t *state = (conjugate_fr_state_t *) vstate; state->iter = 0; return GSL_SUCCESS; } static int conjugate_fr_iterate (void *vstate, gsl_multimin_function_fdf * fdf, gsl_vector * x, double *f, gsl_vector * gradient, gsl_vector * dx) { conjugate_fr_state_t *state = (conjugate_fr_state_t *) vstate; gsl_vector *x1 = state->x1; gsl_vector *dx1 = state->dx1; gsl_vector *x2 = state->x2; gsl_vector *p = state->p; gsl_vector *g0 = state->g0; double pnorm = state->pnorm; double g0norm = state->g0norm; double fa = *f, fb, fc; double dir; double stepa = 0.0, stepb, stepc = state->step, tol = state->tol; double g1norm; double pg; if (pnorm == 0.0 || g0norm == 0.0) { gsl_vector_set_zero (dx); return GSL_ENOPROG; } /* Determine which direction is downhill, +p or -p */ gsl_blas_ddot (p, gradient, &pg); dir = (pg >= 0.0) ? +1.0 : -1.0; /* Compute new trial point at x_c= x - step * p, where p is the current direction */ take_step (x, p, stepc, dir / pnorm, x1, dx); /* Evaluate function and gradient at new point xc */ fc = GSL_MULTIMIN_FN_EVAL_F (fdf, x1); if (fc < fa) { /* Success, reduced the function value */ state->step = stepc * 2.0; *f = fc; gsl_vector_memcpy (x, x1); GSL_MULTIMIN_FN_EVAL_DF (fdf, x1, gradient); return GSL_SUCCESS; } #ifdef DEBUG printf ("got stepc = %g fc = %g\n", stepc, fc); #endif /* Do a line minimisation in the region (xa,fa) (xc,fc) to find an intermediate (xb,fb) satisifying fa > fb < fc. Choose an initial xb based on parabolic interpolation */ intermediate_point (fdf, x, p, dir / pnorm, pg, stepa, stepc, fa, fc, x1, dx1, gradient, &stepb, &fb); if (stepb == 0.0) { return GSL_ENOPROG; } minimize (fdf, x, p, dir / pnorm, stepa, stepb, stepc, fa, fb, fc, tol, x1, dx1, x2, dx, gradient, &(state->step), f, &g1norm); gsl_vector_memcpy (x, x2); /* Choose a new conjugate direction for the next step */ state->iter = (state->iter + 1) % x->size; if (state->iter == 0) { gsl_vector_memcpy (p, gradient); state->pnorm = g1norm; } else { /* p' = g1 - beta * p */ double beta = -pow (g1norm / g0norm, 2.0); gsl_blas_dscal (-beta, p); gsl_blas_daxpy (1.0, gradient, p); state->pnorm = gsl_blas_dnrm2 (p); } state->g0norm = g1norm; gsl_vector_memcpy (g0, gradient); #ifdef DEBUG printf ("updated conjugate directions\n"); printf ("p: "); gsl_vector_fprintf (stdout, p, "%g"); printf ("g: "); gsl_vector_fprintf (stdout, gradient, "%g"); #endif return GSL_SUCCESS; } static const gsl_multimin_fdfminimizer_type conjugate_fr_type = { "conjugate_fr", /* name */ sizeof (conjugate_fr_state_t), &conjugate_fr_alloc, &conjugate_fr_set, &conjugate_fr_iterate, &conjugate_fr_restart, &conjugate_fr_free }; const gsl_multimin_fdfminimizer_type * gsl_multimin_fdfminimizer_conjugate_fr = &conjugate_fr_type; gsl/multimin/linear_wrapper.c0000644000175000017500000000773413536674414014761 0ustar eddeddtypedef struct { gsl_function_fdf fdf_linear; gsl_multimin_function_fdf *fdf; /* fixed values */ const gsl_vector *x; const gsl_vector *g; const gsl_vector *p; /* cached values, for x(alpha) = x + alpha * p */ double f_alpha; double df_alpha; gsl_vector *x_alpha; gsl_vector *g_alpha; /* cache "keys" */ double f_cache_key; double df_cache_key; double x_cache_key; double g_cache_key; } wrapper_t; static void moveto (double alpha, wrapper_t * w) { if (alpha == w->x_cache_key) /* using previously cached position */ { return; } /* set x_alpha = x + alpha * p */ gsl_vector_memcpy (w->x_alpha, w->x); gsl_blas_daxpy (alpha, w->p, w->x_alpha); w->x_cache_key = alpha; } static double slope (wrapper_t * w) /* compute gradient . direction */ { double df; gsl_blas_ddot (w->g_alpha, w->p, &df); return df; } static double wrap_f (double alpha, void *params) { wrapper_t *w = (wrapper_t *) params; if (alpha == w->f_cache_key) /* using previously cached f(alpha) */ { return w->f_alpha; } moveto (alpha, w); w->f_alpha = GSL_MULTIMIN_FN_EVAL_F (w->fdf, w->x_alpha); w->f_cache_key = alpha; return w->f_alpha; } static double wrap_df (double alpha, void *params) { wrapper_t *w = (wrapper_t *) params; if (alpha == w->df_cache_key) /* using previously cached df(alpha) */ { return w->df_alpha; } moveto (alpha, w); if (alpha != w->g_cache_key) { GSL_MULTIMIN_FN_EVAL_DF (w->fdf, w->x_alpha, w->g_alpha); w->g_cache_key = alpha; } w->df_alpha = slope (w); w->df_cache_key = alpha; return w->df_alpha; } static void wrap_fdf (double alpha, void *params, double *f, double *df) { wrapper_t *w = (wrapper_t *) params; /* Check for previously cached values */ if (alpha == w->f_cache_key && alpha == w->df_cache_key) { *f = w->f_alpha; *df = w->df_alpha; return; } if (alpha == w->f_cache_key || alpha == w->df_cache_key) { *f = wrap_f (alpha, params); *df = wrap_df (alpha, params); return; } moveto (alpha, w); GSL_MULTIMIN_FN_EVAL_F_DF (w->fdf, w->x_alpha, &w->f_alpha, w->g_alpha); w->f_cache_key = alpha; w->g_cache_key = alpha; w->df_alpha = slope (w); w->df_cache_key = alpha; *f = w->f_alpha; *df = w->df_alpha; } static void prepare_wrapper (wrapper_t * w, gsl_multimin_function_fdf * fdf, const gsl_vector * x, double f, const gsl_vector *g, const gsl_vector * p, gsl_vector * x_alpha, gsl_vector *g_alpha) { w->fdf_linear.f = &wrap_f; w->fdf_linear.df = &wrap_df; w->fdf_linear.fdf = &wrap_fdf; w->fdf_linear.params = (void *)w; /* pointer to "self" */ w->fdf = fdf; w->x = x; w->g = g; w->p = p; w->x_alpha = x_alpha; w->g_alpha = g_alpha; gsl_vector_memcpy(w->x_alpha, w->x); w->x_cache_key = 0.0; w->f_alpha = f; w->f_cache_key = 0.0; gsl_vector_memcpy(w->g_alpha, w->g); w->g_cache_key = 0.0; w->df_alpha = slope(w); w->df_cache_key = 0.0; } static void update_position (wrapper_t * w, double alpha, gsl_vector *x, double *f, gsl_vector *g) { /* ensure that everything is fully cached */ { double f_alpha, df_alpha; wrap_fdf (alpha, w, &f_alpha, &df_alpha); } ; *f = w->f_alpha; gsl_vector_memcpy(x, w->x_alpha); gsl_vector_memcpy(g, w->g_alpha); } static void change_direction (wrapper_t * w) { /* Convert the cache values from the end of the current minimisation to those needed for the start of the next minimisation, alpha=0 */ /* The new x_alpha for alpha=0 is the current position */ gsl_vector_memcpy (w->x_alpha, w->x); w->x_cache_key = 0.0; /* The function value does not change */ w->f_cache_key = 0.0; /* The new g_alpha for alpha=0 is the current gradient at the endpoint */ gsl_vector_memcpy (w->g_alpha, w->g); w->g_cache_key = 0.0; /* Calculate the slope along the new direction vector, p */ w->df_alpha = slope (w); w->df_cache_key = 0.0; } gsl/multimin/fdfminimizer.c0000644000175000017500000001014213536674414014415 0ustar eddedd/* multimin/fdfminimizer.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Fabrice Rossi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include gsl_multimin_fdfminimizer * gsl_multimin_fdfminimizer_alloc (const gsl_multimin_fdfminimizer_type * T, size_t n) { int status; gsl_multimin_fdfminimizer *s = (gsl_multimin_fdfminimizer *) malloc (sizeof (gsl_multimin_fdfminimizer)); if (s == 0) { GSL_ERROR_VAL ("failed to allocate space for minimizer struct", GSL_ENOMEM, 0); } s->type = T; s->x = gsl_vector_calloc (n); if (s->x == 0) { free (s); GSL_ERROR_VAL ("failed to allocate space for x", GSL_ENOMEM, 0); } s->gradient = gsl_vector_calloc (n); if (s->gradient == 0) { gsl_vector_free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for gradient", GSL_ENOMEM, 0); } s->dx = gsl_vector_calloc (n); if (s->dx == 0) { gsl_vector_free (s->x); gsl_vector_free (s->gradient); free (s); GSL_ERROR_VAL ("failed to allocate space for dx", GSL_ENOMEM, 0); } s->state = malloc (T->size); if (s->state == 0) { gsl_vector_free (s->x); gsl_vector_free (s->gradient); gsl_vector_free (s->dx); free (s); GSL_ERROR_VAL ("failed to allocate space for minimizer state", GSL_ENOMEM, 0); } status = (T->alloc) (s->state, n); if (status != GSL_SUCCESS) { free (s->state); gsl_vector_free (s->x); gsl_vector_free (s->gradient); gsl_vector_free (s->dx); free (s); GSL_ERROR_VAL ("failed to initialize minimizer state", GSL_ENOMEM, 0); } return s; } int gsl_multimin_fdfminimizer_set (gsl_multimin_fdfminimizer * s, gsl_multimin_function_fdf * fdf, const gsl_vector * x, double step_size, double tol) { if (s->x->size != fdf->n) { GSL_ERROR ("function incompatible with solver size", GSL_EBADLEN); } if (x->size != fdf->n) { GSL_ERROR ("vector length not compatible with function", GSL_EBADLEN); } s->fdf = fdf; gsl_vector_memcpy (s->x,x); gsl_vector_set_zero (s->dx); return (s->type->set) (s->state, s->fdf, s->x, &(s->f), s->gradient, step_size, tol); } void gsl_multimin_fdfminimizer_free (gsl_multimin_fdfminimizer * s) { RETURN_IF_NULL (s); (s->type->free) (s->state); free (s->state); gsl_vector_free (s->dx); gsl_vector_free (s->gradient); gsl_vector_free (s->x); free (s); } int gsl_multimin_fdfminimizer_iterate (gsl_multimin_fdfminimizer * s) { return (s->type->iterate) (s->state, s->fdf, s->x, &(s->f), s->gradient, s->dx); } int gsl_multimin_fdfminimizer_restart (gsl_multimin_fdfminimizer * s) { return (s->type->restart) (s->state); } const char * gsl_multimin_fdfminimizer_name (const gsl_multimin_fdfminimizer * s) { return s->type->name; } gsl_vector * gsl_multimin_fdfminimizer_x (const gsl_multimin_fdfminimizer * s) { return s->x; } gsl_vector * gsl_multimin_fdfminimizer_dx (const gsl_multimin_fdfminimizer * s) { return s->dx; } gsl_vector * gsl_multimin_fdfminimizer_gradient (const gsl_multimin_fdfminimizer * s) { return s->gradient; } double gsl_multimin_fdfminimizer_minimum (const gsl_multimin_fdfminimizer * s) { return s->f; } gsl/multimin/test.c0000644000175000017500000001372013536674414012716 0ustar eddedd/* multimin/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Fabrice Rossi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Modified by Tuomo Keskitalo to add Nelder Mead Simplex test suite */ #include #include #include #include #include #include #include "test_funcs.h" unsigned int fcount, gcount; int test_fdf(const char * desc, gsl_multimin_function_fdf *f, initpt_function initpt, const gsl_multimin_fdfminimizer_type *T); int test_f(const char * desc, gsl_multimin_function *f, initpt_function initpt, const gsl_multimin_fminimizer_type *T); int main (void) { gsl_ieee_env_setup (); { const gsl_multimin_fdfminimizer_type *fdfminimizers[6]; const gsl_multimin_fdfminimizer_type ** T; fdfminimizers[0] = gsl_multimin_fdfminimizer_steepest_descent; fdfminimizers[1] = gsl_multimin_fdfminimizer_conjugate_pr; fdfminimizers[2] = gsl_multimin_fdfminimizer_conjugate_fr; fdfminimizers[3] = gsl_multimin_fdfminimizer_vector_bfgs; fdfminimizers[4] = gsl_multimin_fdfminimizer_vector_bfgs2; fdfminimizers[5] = 0; T = fdfminimizers; while (*T != 0) { test_fdf("Roth", &roth, roth_initpt,*T); test_fdf("Wood", &wood, wood_initpt,*T); test_fdf("Rosenbrock", &rosenbrock, rosenbrock_initpt,*T); test_fdf("Rosenbrock1", &rosenbrock, rosenbrock_initpt1,*T); test_fdf("SimpleAbs", &simpleabs, simpleabs_initpt,*T); T++; } T = fdfminimizers; while (*T != 0) { test_fdf("NRoth", &Nroth, roth_initpt,*T); test_fdf("NWood", &Nwood, wood_initpt,*T); test_fdf("NRosenbrock", &Nrosenbrock, rosenbrock_initpt,*T); T++; } } { const gsl_multimin_fminimizer_type *fminimizers[4]; const gsl_multimin_fminimizer_type ** T; fminimizers[0] = gsl_multimin_fminimizer_nmsimplex; fminimizers[1] = gsl_multimin_fminimizer_nmsimplex2; fminimizers[2] = gsl_multimin_fminimizer_nmsimplex2rand; fminimizers[3] = 0; T = fminimizers; while (*T != 0) { test_f("Roth", &roth_fmin, roth_initpt,*T); test_f("Wood", &wood_fmin, wood_initpt,*T); test_f("Rosenbrock", &rosenbrock_fmin, rosenbrock_initpt,*T); test_f("Spring", &spring_fmin, spring_initpt,*T); T++; } } exit (gsl_test_summary()); } int test_fdf(const char * desc, gsl_multimin_function_fdf *f, initpt_function initpt, const gsl_multimin_fdfminimizer_type *T) { int status; size_t iter = 0; double step_size; gsl_vector *x = gsl_vector_alloc (f->n); gsl_multimin_fdfminimizer *s; fcount = 0; gcount = 0; (*initpt) (x); step_size = 0.1 * gsl_blas_dnrm2 (x); s = gsl_multimin_fdfminimizer_alloc(T, f->n); gsl_multimin_fdfminimizer_set (s, f, x, step_size, 0.1); #ifdef DEBUG printf("x "); gsl_vector_fprintf (stdout, s->x, "%g"); printf("g "); gsl_vector_fprintf (stdout, s->gradient, "%g"); #endif do { iter++; status = gsl_multimin_fdfminimizer_iterate(s); #ifdef DEBUG printf("%i: \n",iter); printf("x "); gsl_vector_fprintf (stdout, s->x, "%g"); printf("g "); gsl_vector_fprintf (stdout, s->gradient, "%g"); printf("f(x) %g\n",s->f); printf("dx %g\n",gsl_blas_dnrm2(s->dx)); printf("status=%d\n", status); printf("\n"); #endif if (status == GSL_ENOPROG) break; status = gsl_multimin_test_gradient(s->gradient,1e-3); } while (iter < 5000 && status == GSL_CONTINUE); /* If no error in iteration, test for numerical convergence */ if (status == GSL_CONTINUE || status == GSL_ENOPROG) status = (fabs(s->f) > 1e-5); gsl_test(status, "%s, on %s: %i iters (fn+g=%d+%d), f(x)=%g", gsl_multimin_fdfminimizer_name(s),desc, iter, fcount, gcount, s->f); gsl_multimin_fdfminimizer_free(s); gsl_vector_free(x); return status; } int test_f(const char * desc, gsl_multimin_function *f, initpt_function initpt, const gsl_multimin_fminimizer_type *T) { int status; size_t i, iter = 0; gsl_vector *x = gsl_vector_alloc (f->n); gsl_vector *step_size = gsl_vector_alloc (f->n); gsl_multimin_fminimizer *s; fcount = 0; gcount = 0; (*initpt) (x); for (i = 0; i < f->n; i++) gsl_vector_set (step_size, i, 1); s = gsl_multimin_fminimizer_alloc(T, f->n); gsl_multimin_fminimizer_set (s, f, x, step_size); #ifdef DEBUG printf("x "); gsl_vector_fprintf (stdout, s->x, "%g"); #endif do { iter++; status = gsl_multimin_fminimizer_iterate(s); #ifdef DEBUG printf("%i: \n",iter); printf("x "); gsl_vector_fprintf (stdout, s->x, "%g"); printf("f(x) %g\n", gsl_multimin_fminimizer_minimum (s)); printf("size: %g\n", gsl_multimin_fminimizer_size (s)); printf("\n"); #endif status = gsl_multimin_test_size (gsl_multimin_fminimizer_size (s), 1e-3); } while (iter < 5000 && status == GSL_CONTINUE); status |= (fabs(s->fval) > 1e-5); gsl_test(status, "%s, on %s: %d iter (fn=%d), f(x)=%g", gsl_multimin_fminimizer_name(s),desc, iter, fcount, s->fval); gsl_multimin_fminimizer_free(s); gsl_vector_free(x); gsl_vector_free(step_size); return status; } gsl/multimin/directional_minimize.c0000644000175000017500000001325313536674414016136 0ustar eddedd/* multimin/directional_minimize.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Fabrice Rossi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void take_step (const gsl_vector * x, const gsl_vector * p, double step, double lambda, gsl_vector * x1, gsl_vector * dx) { gsl_vector_set_zero (dx); gsl_blas_daxpy (-step * lambda, p, dx); gsl_vector_memcpy (x1, x); gsl_blas_daxpy (1.0, dx, x1); } static void intermediate_point (gsl_multimin_function_fdf * fdf, const gsl_vector * x, const gsl_vector * p, double lambda, double pg, double stepa, double stepc, double fa, double fc, gsl_vector * x1, gsl_vector * dx, gsl_vector * gradient, double * step, double * f) { double stepb, fb; trial: { double u = fabs (pg * lambda * stepc); stepb = 0.5 * stepc * u / ((fc - fa) + u); } take_step (x, p, stepb, lambda, x1, dx); if (gsl_vector_equal (x, x1)) { /* Take fast exit if trial point does not move from initial point */ #ifdef DEBUG printf ("fast exit x == x1 for stepb = %g\n", stepb); #endif *step = 0; *f = fa; GSL_MULTIMIN_FN_EVAL_DF(fdf, x1, gradient); return ; } fb = GSL_MULTIMIN_FN_EVAL_F (fdf, x1); #ifdef DEBUG printf ("trying stepb = %g fb = %.18e\n", stepb, fb); #endif if (fb >= fa && stepb > 0.0) { /* downhill step failed, reduce step-size and try again */ fc = fb; stepc = stepb; goto trial; } #ifdef DEBUG printf ("ok!\n"); #endif *step = stepb; *f = fb; GSL_MULTIMIN_FN_EVAL_DF(fdf, x1, gradient); } static void minimize (gsl_multimin_function_fdf * fdf, const gsl_vector * x, const gsl_vector * p, double lambda, double stepa, double stepb, double stepc, double fa, double fb, double fc, double tol, gsl_vector * x1, gsl_vector * dx1, gsl_vector * x2, gsl_vector * dx2, gsl_vector * gradient, double * step, double * f, double * gnorm) { /* Starting at (x0, f0) move along the direction p to find a minimum f(x0 - lambda * p), returning the new point x1 = x0-lambda*p, f1=f(x1) and g1 = grad(f) at x1. */ double u = stepb; double v = stepa; double w = stepc; double fu = fb; double fv = fa; double fw = fc; double old2 = fabs(w - v); double old1 = fabs(v - u); double stepm, fm, pg, gnorm1; int iter = 0; gsl_vector_memcpy (x2, x1); gsl_vector_memcpy (dx2, dx1); *f = fb; *step = stepb; *gnorm = gsl_blas_dnrm2 (gradient); mid_trial: iter++; if (iter > 10) { return; /* MAX ITERATIONS */ } { double dw = w - u; double dv = v - u; double du = 0.0; double e1 = ((fv - fu) * dw * dw + (fu - fw) * dv * dv); double e2 = 2.0 * ((fv - fu) * dw + (fu - fw) * dv); if (e2 != 0.0) { du = e1 / e2; } if (du > 0.0 && du < (stepc - stepb) && fabs(du) < 0.5 * old2) { stepm = u + du; } else if (du < 0.0 && du > (stepa - stepb) && fabs(du) < 0.5 * old2) { stepm = u + du; } else if ((stepc - stepb) > (stepb - stepa)) { stepm = 0.38 * (stepc - stepb) + stepb; } else { stepm = stepb - 0.38 * (stepb - stepa); } } take_step (x, p, stepm, lambda, x1, dx1); fm = GSL_MULTIMIN_FN_EVAL_F (fdf, x1); #ifdef DEBUG printf ("trying stepm = %g fm = %.18e\n", stepm, fm); #endif if (fm > fb) { if (fm < fv) { w = v; v = stepm; fw = fv; fv = fm; } else if (fm < fw) { w = stepm; fw = fm; } if (stepm < stepb) { stepa = stepm; fa = fm; } else { stepc = stepm; fc = fm; } goto mid_trial; } else if (fm <= fb) { old2 = old1; old1 = fabs(u - stepm); w = v; v = u; u = stepm; fw = fv; fv = fu; fu = fm; gsl_vector_memcpy (x2, x1); gsl_vector_memcpy (dx2, dx1); GSL_MULTIMIN_FN_EVAL_DF (fdf, x1, gradient); gsl_blas_ddot (p, gradient, &pg); gnorm1 = gsl_blas_dnrm2 (gradient); #ifdef DEBUG printf ("p: "); gsl_vector_fprintf(stdout, p, "%g"); printf ("g: "); gsl_vector_fprintf(stdout, gradient, "%g"); printf ("gnorm: %.18e\n", gnorm1); printf ("pg: %.18e\n", pg); printf ("orth: %g\n", fabs (pg * lambda/ gnorm1)); #endif *f = fm; *step = stepm; *gnorm = gnorm1; if (fabs (pg * lambda / gnorm1) < tol) { #ifdef DEBUG printf("ok!\n"); #endif return; /* SUCCESS */ } if (stepm < stepb) { stepc = stepb; fc = fb; stepb = stepm; fb = fm; } else { stepa = stepb; fa = fb; stepb = stepm; fb = fm; } goto mid_trial; } } gsl/multimin/steepest_descent.c0000644000175000017500000001015513536674414015277 0ustar eddedd/* multimin/steepest_descent.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Fabrice Rossi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* steepest_descent.c -- the steepest descent algorithm */ /* Modified by Brian Gough to use single iteration structure */ #include #include #include #include typedef struct { double step; double max_step; double tol; gsl_vector *x1; gsl_vector *g1; } steepest_descent_state_t; static int steepest_descent_alloc (void *vstate, size_t n) { steepest_descent_state_t *state = (steepest_descent_state_t *) vstate; state->x1 = gsl_vector_alloc (n); if (state->x1 == NULL) { GSL_ERROR ("failed to allocate space for x1", GSL_ENOMEM); } state->g1 = gsl_vector_alloc (n); if (state->g1 == NULL) { gsl_vector_free (state->x1); GSL_ERROR ("failed to allocate space for g1", GSL_ENOMEM); } return GSL_SUCCESS; } static int steepest_descent_set (void *vstate, gsl_multimin_function_fdf * fdf, const gsl_vector * x, double *f, gsl_vector * gradient, double step_size, double tol) { steepest_descent_state_t *state = (steepest_descent_state_t *) vstate; GSL_MULTIMIN_FN_EVAL_F_DF (fdf, x, f, gradient); state->step = step_size; state->max_step = step_size; state->tol = tol; return GSL_SUCCESS; } static void steepest_descent_free (void *vstate) { steepest_descent_state_t *state = (steepest_descent_state_t *) vstate; gsl_vector_free (state->x1); gsl_vector_free (state->g1); } static int steepest_descent_restart (void *vstate) { steepest_descent_state_t *state = (steepest_descent_state_t *) vstate; state->step = state->max_step; return GSL_SUCCESS; } static int steepest_descent_iterate (void *vstate, gsl_multimin_function_fdf * fdf, gsl_vector * x, double *f, gsl_vector * gradient, gsl_vector * dx) { steepest_descent_state_t *state = (steepest_descent_state_t *) vstate; gsl_vector *x1 = state->x1; gsl_vector *g1 = state->g1; double f0 = *f; double f1; double step = state->step, tol = state->tol; int failed = 0; /* compute new trial point at x1= x - step * dir, where dir is the normalized gradient */ double gnorm = gsl_blas_dnrm2 (gradient); if (gnorm == 0.0) { gsl_vector_set_zero (dx); return GSL_ENOPROG; } trial: gsl_vector_set_zero (dx); gsl_blas_daxpy (-step / gnorm, gradient, dx); gsl_vector_memcpy (x1, x); gsl_blas_daxpy (1.0, dx, x1); if (gsl_vector_equal (x, x1)) { return GSL_ENOPROG; } /* evaluate function and gradient at new point x1 */ GSL_MULTIMIN_FN_EVAL_F_DF (fdf, x1, &f1, g1); if (f1 > f0) { /* downhill step failed, reduce step-size and try again */ failed = 1; step *= tol; goto trial; } if (failed) step *= tol; else step *= 2.0; state->step = step; gsl_vector_memcpy (x, x1); gsl_vector_memcpy (gradient, g1); *f = f1; return GSL_SUCCESS; } static const gsl_multimin_fdfminimizer_type steepest_descent_type = { "steepest_descent", /* name */ sizeof (steepest_descent_state_t), &steepest_descent_alloc, &steepest_descent_set, &steepest_descent_iterate, &steepest_descent_restart, &steepest_descent_free }; const gsl_multimin_fdfminimizer_type * gsl_multimin_fdfminimizer_steepest_descent = &steepest_descent_type; gsl/multimin/test_funcs.c0000644000175000017500000001713413536674414014117 0ustar eddedd/* multimin/test_funcs.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Fabrice Rossi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include "test_funcs.h" gsl_multimin_function_fdf simpleabs = {&simpleabs_f, &simpleabs_df, &simpleabs_fdf, 2, 0}; gsl_multimin_function simpleabs_fmin = {&simpleabs_f, 2, 0}; void simpleabs_initpt (gsl_vector * x) { gsl_vector_set (x, 0, 1.0); gsl_vector_set (x, 1, 2.0); } void simpleabs_initpt1 (gsl_vector * x) { gsl_vector_set (x, 0, 1.0); gsl_vector_set (x, 1, 1.0); } double simpleabs_f (const gsl_vector * x, void *params) { double u = gsl_vector_get(x,0); double v = gsl_vector_get(x,1); double a = u - 1; double b = v - 2; fcount++; return fabs(a) + fabs(b); } void simpleabs_df (const gsl_vector * x, void *params, gsl_vector * df) { double u = gsl_vector_get(x,0); double v = gsl_vector_get(x,1); gcount++; gsl_vector_set(df,0, GSL_SIGN(u-1)); gsl_vector_set(df,1, GSL_SIGN(v-2)); } void simpleabs_fdf (const gsl_vector * x, void *params, double * f, gsl_vector * df) { double u = gsl_vector_get(x,0); double v = gsl_vector_get(x,1); double a = u - 1; double b = v - 2; gcount++; *f = fabs(a) + fabs(b); gsl_vector_set(df,0, GSL_SIGN(u-1)); gsl_vector_set(df,1, GSL_SIGN(v-2)); } gsl_multimin_function_fdf rosenbrock = {&rosenbrock_f, &rosenbrock_df, &rosenbrock_fdf, 2, 0}; gsl_multimin_function rosenbrock_fmin = {&rosenbrock_f, 2, 0}; void rosenbrock_initpt (gsl_vector * x) { gsl_vector_set (x, 0, -1.2); gsl_vector_set (x, 1, 1.0); } void rosenbrock_initpt1 (gsl_vector * x) { gsl_vector_set (x, 0, 1.0); gsl_vector_set (x, 1, 1.0); } double rosenbrock_f (const gsl_vector * x, void *params) { double u = gsl_vector_get(x,0); double v = gsl_vector_get(x,1); double a = u - 1; double b = u * u - v; fcount++; return a * a + 10 * b * b; } void rosenbrock_df (const gsl_vector * x, void *params, gsl_vector * df) { double u = gsl_vector_get(x,0); double v = gsl_vector_get(x,1); double b = u * u - v; gcount++; gsl_vector_set(df,0,2 * (u - 1) + 40 * u * b); gsl_vector_set(df,1,-20 * b); } void rosenbrock_fdf (const gsl_vector * x, void *params, double * f, gsl_vector * df) { double u = gsl_vector_get(x,0); double v = gsl_vector_get(x,1); double a = u - 1; double b = u * u - v; gcount++; *f = a * a + 10 * b * b; gsl_vector_set(df,0,2 * (u - 1) + 40 * u * b); gsl_vector_set(df,1,-20 * b); } gsl_multimin_function_fdf roth = {&roth_f, &roth_df, &roth_fdf, 2, 0}; gsl_multimin_function roth_fmin = {&roth_f, 2, 0}; void roth_initpt (gsl_vector * x) { gsl_vector_set (x, 0, 4.5); gsl_vector_set (x, 1, 3.5); } double roth_f (const gsl_vector * x, void *params) { double u = gsl_vector_get(x,0); double v = gsl_vector_get(x,1); double a = -13.0 + u + ((5.0 - v)*v - 2.0)*v; double b = -29.0 + u + ((v + 1.0)*v - 14.0)*v; fcount++; return a * a + b * b; } void roth_df (const gsl_vector * x, void *params, gsl_vector * df) { double u = gsl_vector_get(x,0); double v = gsl_vector_get(x,1); double a = -13.0 + u + ((5.0 - v)*v - 2.0)*v; double b = -29.0 + u + ((v + 1.0)*v - 14.0)*v; double c = -2 + v * (10 - 3 * v); double d = -14 + v * (2 + 3 * v); gcount++; gsl_vector_set(df,0,2 * a + 2 * b); gsl_vector_set(df,1,2 * a * c + 2 * b * d); } void roth_fdf (const gsl_vector * x, void *params, double * f, gsl_vector * df) { *f = roth_f (x,params); roth_df(x,params,df); } gsl_multimin_function_fdf wood = {&wood_f, &wood_df, &wood_fdf, 4, 0}; gsl_multimin_function wood_fmin = {&wood_f, 4, 0}; void wood_initpt (gsl_vector * x) { gsl_vector_set (x, 0, -3.0); gsl_vector_set (x, 1, -1.0); gsl_vector_set (x, 2, -3.0); gsl_vector_set (x, 3, -1.0); } double wood_f (const gsl_vector * x, void *params) { double u1 = gsl_vector_get(x,0); double u2 = gsl_vector_get(x,1); double u3 = gsl_vector_get(x,2); double u4 = gsl_vector_get(x,3); double t1 = u1 * u1 - u2; double t2 = u3 * u3 - u4; fcount++; return 100 * t1 * t1 + (1 - u1) * (1 - u1) + 90 * t2 * t2 + (1 - u3) * (1 - u3) + 10.1 * ( (1 - u2) * (1 - u2) + (1 - u4) * (1 - u4) ) + 19.8 * (1 - u2) * (1 - u4); } void wood_df (const gsl_vector * x, void *params, gsl_vector * df) { double u1 = gsl_vector_get(x,0); double u2 = gsl_vector_get(x,1); double u3 = gsl_vector_get(x,2); double u4 = gsl_vector_get(x,3); double t1 = u1 * u1 - u2; double t2 = u3 * u3 - u4; gcount++; gsl_vector_set(df,0, 400 * u1 * t1 - 2 * (1 - u1) ); gsl_vector_set(df,1, -200 * t1 - 20.2 * (1 - u2) - 19.8 * (1 - u4) ); gsl_vector_set(df,2, 360 * u3 * t2 - 2 * (1 - u3) ); gsl_vector_set(df,3, -180 * t2 - 20.2 * (1 - u4) - 19.8 * (1 - u2) ); } void wood_fdf (const gsl_vector * x, void *params, double * f, gsl_vector * df) { wood_df(x,params,df); *f=wood_f(x,params); } gsl_multimin_function_fdf Nrosenbrock = {&rosenbrock_f, &Nrosenbrock_df, &Nrosenbrock_fdf, 2, 0}; void Nrosenbrock_df (const gsl_vector * x, void *params, gsl_vector * df) { gsl_multimin_function F ; F.f = rosenbrock_f; F.params = params; F.n = x->size; gsl_multimin_diff (&F, x, df); } void Nrosenbrock_fdf (const gsl_vector * x, void *params, double * f, gsl_vector * df) { *f = rosenbrock_f (x, params); Nrosenbrock_df (x, params, df); } gsl_multimin_function_fdf Nroth = {&roth_f, &Nroth_df, &Nroth_fdf, 2, 0}; void Nroth_df (const gsl_vector * x, void *params, gsl_vector * df) { gsl_multimin_function F ; F.f = roth_f; F.params = params; F.n = x->size; gsl_multimin_diff (&F, x, df); } void Nroth_fdf (const gsl_vector * x, void *params, double * f, gsl_vector * df) { *f = roth_f (x, params); Nroth_df (x, params, df); } gsl_multimin_function_fdf Nwood = {&wood_f, &Nwood_df, &Nwood_fdf, 4, 0}; void Nwood_df (const gsl_vector * x, void *params, gsl_vector * df) { gsl_multimin_function F ; F.f = wood_f; F.params = params; F.n = x->size; gsl_multimin_diff (&F, x, df); } void Nwood_fdf (const gsl_vector * x, void *params, double * f, gsl_vector * df) { *f = wood_f (x, params); Nwood_df (x, params, df); } gsl_multimin_function spring_fmin = { &spring_f, 3, 0 }; void spring_initpt (gsl_vector * x) { gsl_vector_set (x, 0, 1.0); gsl_vector_set (x, 1, 0.0); gsl_vector_set (x, 2, 7.0 * M_PI); } double spring_f (const gsl_vector * x, void *params) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double x2 = gsl_vector_get (x, 2); double theta = atan2 (x1, x0); double r = sqrt (x0 * x0 + x1 * x1); double z = x2; while (z > M_PI) z -= 2.0 * M_PI; while (z < -M_PI) z += 2.0 * M_PI; { double tmz = theta - z; double rm1 = r - 1.0; double ret = 0.1 * (expm1 (tmz * tmz + rm1 * rm1) + fabs (x2 / 10.0)); return ret; } } gsl/poly/0000755000175000017500000000000014057135461010706 5ustar eddeddgsl/poly/balance.c0000644000175000017500000000615113536674414012451 0ustar eddedd/* poly/balance.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void balance_companion_matrix (double *m, size_t n); #define RADIX 2 #define RADIX2 (RADIX*RADIX) static void balance_companion_matrix (double *m, size_t nc) { int not_converged = 1; double row_norm = 0; double col_norm = 0; while (not_converged) { size_t i, j; double g, f, s; not_converged = 0; for (i = 0; i < nc; i++) { /* column norm, excluding the diagonal */ if (i != nc - 1) { col_norm = fabs (MAT (m, i + 1, i, nc)); } else { col_norm = 0; for (j = 0; j < nc - 1; j++) { col_norm += fabs (MAT (m, j, nc - 1, nc)); } } /* row norm, excluding the diagonal */ if (i == 0) { row_norm = fabs (MAT (m, 0, nc - 1, nc)); } else if (i == nc - 1) { row_norm = fabs (MAT (m, i, i - 1, nc)); } else { row_norm = (fabs (MAT (m, i, i - 1, nc)) + fabs (MAT (m, i, nc - 1, nc))); } if (col_norm == 0 || row_norm == 0) { continue; } g = row_norm / RADIX; f = 1; s = col_norm + row_norm; while (col_norm < g) { f *= RADIX; col_norm *= RADIX2; } g = row_norm * RADIX; while (col_norm > g) { f /= RADIX; col_norm /= RADIX2; } if ((row_norm + col_norm) < 0.95 * s * f) { not_converged = 1; g = 1 / f; if (i == 0) { MAT (m, 0, nc - 1, nc) *= g; } else { MAT (m, i, i - 1, nc) *= g; MAT (m, i, nc - 1, nc) *= g; } if (i == nc - 1) { for (j = 0; j < nc; j++) { MAT (m, j, i, nc) *= f; } } else { MAT (m, i + 1, i, nc) *= f; } } } } } gsl/poly/Makefile.in0000664000175000017500000011047214057135461012762 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = poly ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslpoly_la_LIBADD = am_libgslpoly_la_OBJECTS = dd.lo eval.lo solve_quadratic.lo \ solve_cubic.lo zsolve_quadratic.lo zsolve_cubic.lo zsolve.lo \ zsolve_init.lo deriv.lo libgslpoly_la_OBJECTS = $(am_libgslpoly_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslpoly.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la ../sort/libgslsort.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dd.Plo ./$(DEPDIR)/deriv.Plo \ ./$(DEPDIR)/eval.Plo ./$(DEPDIR)/solve_cubic.Plo \ ./$(DEPDIR)/solve_quadratic.Plo ./$(DEPDIR)/test.Po \ ./$(DEPDIR)/zsolve.Plo ./$(DEPDIR)/zsolve_cubic.Plo \ ./$(DEPDIR)/zsolve_init.Plo ./$(DEPDIR)/zsolve_quadratic.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslpoly_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslpoly_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslpoly.la pkginclude_HEADERS = gsl_poly.h AM_CPPFLAGS = -I$(top_srcdir) libgslpoly_la_SOURCES = dd.c eval.c solve_quadratic.c solve_cubic.c zsolve_quadratic.c zsolve_cubic.c zsolve.c zsolve_init.c deriv.c noinst_HEADERS = balance.c companion.c qr.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslpoly.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../sort/libgslsort.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu poly/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu poly/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslpoly.la: $(libgslpoly_la_OBJECTS) $(libgslpoly_la_DEPENDENCIES) $(EXTRA_libgslpoly_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslpoly_la_OBJECTS) $(libgslpoly_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deriv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eval.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/solve_cubic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/solve_quadratic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zsolve.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zsolve_cubic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zsolve_init.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zsolve_quadratic.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/dd.Plo -rm -f ./$(DEPDIR)/deriv.Plo -rm -f ./$(DEPDIR)/eval.Plo -rm -f ./$(DEPDIR)/solve_cubic.Plo -rm -f ./$(DEPDIR)/solve_quadratic.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/zsolve.Plo -rm -f ./$(DEPDIR)/zsolve_cubic.Plo -rm -f ./$(DEPDIR)/zsolve_init.Plo -rm -f ./$(DEPDIR)/zsolve_quadratic.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/dd.Plo -rm -f ./$(DEPDIR)/deriv.Plo -rm -f ./$(DEPDIR)/eval.Plo -rm -f ./$(DEPDIR)/solve_cubic.Plo -rm -f ./$(DEPDIR)/solve_quadratic.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/zsolve.Plo -rm -f ./$(DEPDIR)/zsolve_cubic.Plo -rm -f ./$(DEPDIR)/zsolve_init.Plo -rm -f ./$(DEPDIR)/zsolve_quadratic.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/poly/companion.c0000644000175000017500000000226413536674414013050 0ustar eddedd/* poly/companion.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void set_companion_matrix (const double *a, size_t n, double *m); static void set_companion_matrix (const double *a, size_t nc, double *m) { size_t i, j; for (i = 0; i < nc; i++) for (j = 0; j < nc; j++) MAT (m, i, j, nc) = 0.0; for (i = 1; i < nc; i++) MAT (m, i, i - 1, nc) = 1.0; for (i = 0; i < nc; i++) MAT (m, i, nc - 1, nc) = -a[i] / a[nc]; } gsl/poly/zsolve.c0000644000175000017500000000412213536674414012402 0ustar eddedd/* poly/zsolve.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* zsolve.c - finds the complex roots of = 0 */ #include #include #include #include #include #include #include /* C-style matrix elements */ #define MAT(m,i,j,n) ((m)[(i)*(n) + (j)]) /* Fortran-style matrix elements */ #define FMAT(m,i,j,n) ((m)[((i)-1)*(n) + ((j)-1)]) #include "companion.c" #include "balance.c" #include "qr.c" int gsl_poly_complex_solve (const double *a, size_t n, gsl_poly_complex_workspace * w, gsl_complex_packed_ptr z) { int status; double *m; if (n == 0) { GSL_ERROR ("number of terms must be a positive integer", GSL_EINVAL); } if (n == 1) { GSL_ERROR ("cannot solve for only one term", GSL_EINVAL); } if (a[n - 1] == 0) { GSL_ERROR ("leading term of polynomial must be non-zero", GSL_EINVAL) ; } if (w->nc != n - 1) { GSL_ERROR ("size of workspace does not match polynomial", GSL_EINVAL); } m = w->matrix; set_companion_matrix (a, n - 1, m); balance_companion_matrix (m, n - 1); status = qr_companion (m, n - 1, z); if (status) { GSL_ERROR("root solving qr method failed to converge", GSL_EFAILED); } return GSL_SUCCESS; } gsl/poly/ChangeLog0000644000175000017500000000720613536674414012474 0ustar eddedd2013-10-13 Rhys Ulerich * test.c Update stale names from "gsl_poly_eval_dp" to "gsl_poly_eval_derivs" in the test log. Thanks to Mark Jourdain for pointing out the inconsistency. 2011-04-13 Brian Gough * solve_quadratic.c (gsl_poly_solve_quadratic): simplify the case where b==0 and disc>0 (gsl_poly_solve_quadratic): delay the evaluation of the discriminant until it is needed 2009-07-09 Brian Gough * zsolve_init.c (gsl_poly_complex_workspace_free): handle NULL argument in free 2009-05-09 Brian Gough * zsolve_cubic.c (gsl_poly_complex_solve_cubic): test R2 < Q3 directly, to avoid argument of acos exceeding 1 due to extended precision. * solve_cubic.c (gsl_poly_solve_cubic): ditto 2008-07-03 Brian Gough * gsl_poly.h: use new inline declarations * inline.c: handle inline functions in separate file * dd.c: move gsl_poly_dd_eval to inline.c * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2008-04-28 Brian Gough * dd.c (gsl_poly_dd_taylor): use new descending loop convention 2007-12-17 Brian Gough * eval.c: added functions for complex polynomials 2005-07-03 Brian Gough * test.c (main): added tests for linear case * zsolve_quadratic.c (gsl_poly_complex_solve_quadratic): handle the linear case * solve_quadratic.c (gsl_poly_solve_quadratic): handle the linear case 2005-05-19 Brian Gough * Makefile.am (noinst_HEADERS): removed norm.c (unused) Sun Dec 2 22:02:31 2001 Brian Gough * dd.c: added divided differences code from Dan, Ho-Jin Wed Oct 31 18:42:10 2001 Brian Gough * qr.c (qr_companion): increased maximum number of iterations from 30 to 60 Thu Jun 28 11:24:51 2001 Brian Gough * test.c (main): fixed a subtle bug in the test where the array for the complex results was too small by a factor of two Mon Apr 30 12:36:08 2001 Brian Gough * eval.c (gsl_poly_eval): added eval function from specfunc Tue Aug 24 12:02:47 1999 Brian Gough * zsolve.c: added general solver using QR method 1999-08-22 Mark Galassi * Makefile.am (libgslpoly_a_SOURCES): for now commented out zsolve.c, since it has some strange errors that make it look like it was not committed. Tue Aug 17 14:23:47 1999 Brian Gough * zsolve_cubic.c (gsl_poly_complex_solve_cubic): compute the discriminant without division so that it is exact for exact inputs * solve_cubic.c (gsl_poly_solve_cubic): compute the discriminant without division so that it is exact for exact inputs * changed the way roots are counted to make all the routines consistent. Conincident roots are no longer a special case, now they are made up of separate roots which happen to have the same values. * zsolve_quadratic.c (gsl_poly_complex_solve_quadratic): in the case of a multiple root set all the returned values r0 = r1 = root, rather than just setting one and leaving the others potentially unset. * solve_quadratic.c (gsl_poly_solve_quadratic): ditto Tue Aug 3 19:36:26 1999 Brian Gough * gsl_poly.h: changed all functions to take separate variables for roots (z0, z1, z2) of variable-length arrays Sat Feb 20 12:13:46 1999 Brian Gough * split out polynomial root finding algorithms into a new poly/ directory gsl/poly/dd.c0000644000175000017500000000636613536674414011463 0ustar eddedd/* interpolation/interp_poly.c * * Copyright (C) 2001 DAN, HO-JIN * Copyright (C) 2013 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Modified for standalone use in polynomial directory, B.Gough 2001 */ #include #include #include int gsl_poly_dd_init (double dd[], const double xa[], const double ya[], size_t size) { size_t i, j; /* Newton's divided differences */ dd[0] = ya[0]; for (j = size - 1; j >= 1; j--) { dd[j] = (ya[j] - ya[j - 1]) / (xa[j] - xa[j - 1]); } for (i = 2; i < size; i++) { for (j = size - 1; j >= i; j--) { dd[j] = (dd[j] - dd[j - 1]) / (xa[j] - xa[j - i]); } } return GSL_SUCCESS; } int gsl_poly_dd_taylor (double c[], double xp, const double dd[], const double xa[], size_t size, double w[]) { size_t i, j; for (i = 0; i < size; i++) { c[i] = 0.0; w[i] = 0.0; } w[size - 1] = 1.0; c[0] = dd[0]; for (i = size - 1; i-- > 0;) { w[i] = -w[i + 1] * (xa[size - 2 - i] - xp); for (j = i + 1; j < size - 1; j++) { w[j] = w[j] - w[j + 1] * (xa[size - 2 - i] - xp); } for (j = i; j < size; j++) { c[j - i] += w[j] * dd[size - i - 1]; } } return GSL_SUCCESS; } /* gsl_poly_dd_hermite_init() Compute divided difference representation of data for Hermite polynomial interpolation Inputs: dd - (output) array of size 2*size containing divided differences, dd[k] = f[z_0,z_1,...,z_k] za - (output) array of size 2*size containing z values xa - x data ya - y data dya - dy/dx data size - size of xa,ya,dya arrays Return: success */ int gsl_poly_dd_hermite_init (double dd[], double za[], const double xa[], const double ya[], const double dya[], const size_t size) { const size_t N = 2 * size; size_t i, j; /* Hermite divided differences */ dd[0] = ya[0]; /* compute: dd[j] = f[z_{j-1},z_j] for j \in [1,N-1] */ for (j = 0; j < size; ++j) { za[2*j] = xa[j]; za[2*j + 1] = xa[j]; if (j != 0) { dd[2*j] = (ya[j] - ya[j - 1]) / (xa[j] - xa[j - 1]); dd[2*j - 1] = dya[j - 1]; } } dd[N - 1] = dya[size - 1]; for (i = 2; i < N; i++) { for (j = N - 1; j >= i; j--) { dd[j] = (dd[j] - dd[j - 1]) / (za[j] - za[j - i]); } } return GSL_SUCCESS; } /* gsl_poly_dd_hermite_init() */ gsl/poly/Makefile.am0000644000175000017500000000100613536674414012746 0ustar eddeddnoinst_LTLIBRARIES = libgslpoly.la pkginclude_HEADERS = gsl_poly.h AM_CPPFLAGS = -I$(top_srcdir) libgslpoly_la_SOURCES = dd.c eval.c solve_quadratic.c solve_cubic.c zsolve_quadratic.c zsolve_cubic.c zsolve.c zsolve_init.c deriv.c noinst_HEADERS = balance.c companion.c qr.c TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_SOURCES = test.c test_LDADD = libgslpoly.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../sort/libgslsort.la gsl/poly/solve_quadratic.c0000644000175000017500000000405613536674414014253 0ustar eddedd/* poly/solve_quadratic.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* solve_quadratic.c - finds the real roots of a x^2 + b x + c = 0 */ #include #include #include int gsl_poly_solve_quadratic (double a, double b, double c, double *x0, double *x1) { if (a == 0) /* Handle linear case */ { if (b == 0) { return 0; } else { *x0 = -c / b; return 1; }; } { double disc = b * b - 4 * a * c; if (disc > 0) { if (b == 0) { double r = sqrt (-c / a); *x0 = -r; *x1 = r; } else { double sgnb = (b > 0 ? 1 : -1); double temp = -0.5 * (b + sgnb * sqrt (disc)); double r1 = temp / a ; double r2 = c / temp ; if (r1 < r2) { *x0 = r1 ; *x1 = r2 ; } else { *x0 = r2 ; *x1 = r1 ; } } return 2; } else if (disc == 0) { *x0 = -0.5 * b / a ; *x1 = -0.5 * b / a ; return 2 ; } else { return 0; } } } gsl/poly/solve_cubic.c0000644000175000017500000000565513536674414013371 0ustar eddedd/* poly/solve_cubic.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* solve_cubic.c - finds the real roots of x^3 + a x^2 + b x + c = 0 */ #include #include #include #include #define SWAP(a,b) do { double tmp = b ; b = a ; a = tmp ; } while(0) int gsl_poly_solve_cubic (double a, double b, double c, double *x0, double *x1, double *x2) { double q = (a * a - 3 * b); double r = (2 * a * a * a - 9 * a * b + 27 * c); double Q = q / 9; double R = r / 54; double Q3 = Q * Q * Q; double R2 = R * R; double CR2 = 729 * r * r; double CQ3 = 2916 * q * q * q; if (R == 0 && Q == 0) { *x0 = - a / 3 ; *x1 = - a / 3 ; *x2 = - a / 3 ; return 3 ; } else if (CR2 == CQ3) { /* this test is actually R2 == Q3, written in a form suitable for exact computation with integers */ /* Due to finite precision some double roots may be missed, and considered to be a pair of complex roots z = x +/- epsilon i close to the real axis. */ double sqrtQ = sqrt (Q); if (R > 0) { *x0 = -2 * sqrtQ - a / 3; *x1 = sqrtQ - a / 3; *x2 = sqrtQ - a / 3; } else { *x0 = - sqrtQ - a / 3; *x1 = - sqrtQ - a / 3; *x2 = 2 * sqrtQ - a / 3; } return 3 ; } else if (R2 < Q3) { double sgnR = (R >= 0 ? 1 : -1); double ratio = sgnR * sqrt (R2 / Q3); double theta = acos (ratio); double norm = -2 * sqrt (Q); *x0 = norm * cos (theta / 3) - a / 3; *x1 = norm * cos ((theta + 2.0 * M_PI) / 3) - a / 3; *x2 = norm * cos ((theta - 2.0 * M_PI) / 3) - a / 3; /* Sort *x0, *x1, *x2 into increasing order */ if (*x0 > *x1) SWAP(*x0, *x1) ; if (*x1 > *x2) { SWAP(*x1, *x2) ; if (*x0 > *x1) SWAP(*x0, *x1) ; } return 3; } else { double sgnR = (R >= 0 ? 1 : -1); double A = -sgnR * pow (fabs (R) + sqrt (R2 - Q3), 1.0/3.0); double B = Q / A ; *x0 = A + B - a / 3; return 1; } } gsl/poly/zsolve_init.c0000644000175000017500000000346713536674414013440 0ustar eddedd/* poly/zsolve_init.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include gsl_poly_complex_workspace * gsl_poly_complex_workspace_alloc (size_t n) { size_t nc ; gsl_poly_complex_workspace * w ; if (n == 0) { GSL_ERROR_VAL ("matrix size n must be positive integer", GSL_EDOM, 0); } w = (gsl_poly_complex_workspace *) malloc (sizeof(gsl_poly_complex_workspace)); if (w == 0) { GSL_ERROR_VAL ("failed to allocate space for struct", GSL_ENOMEM, 0); } nc = n - 1; w->nc = nc; w->matrix = (double *) malloc (nc * nc * sizeof(double)); if (w->matrix == 0) { free (w) ; /* error in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for workspace matrix", GSL_ENOMEM, 0); } return w ; } void gsl_poly_complex_workspace_free (gsl_poly_complex_workspace * w) { RETURN_IF_NULL (w); free(w->matrix) ; free(w); } gsl/poly/zsolve_quadratic.c0000644000175000017500000000505713536674414014447 0ustar eddedd/* poly/zsolve_quadratic.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* complex_solve_quadratic.c - finds complex roots of a x^2 + b x + c = 0 */ #include #include #include #include int gsl_poly_complex_solve_quadratic (double a, double b, double c, gsl_complex *z0, gsl_complex *z1) { double disc = b * b - 4 * a * c; if (a == 0) /* Handle linear case */ { if (b == 0) { return 0; } else { GSL_REAL(*z0) = -c / b; GSL_IMAG(*z0) = 0; return 1; }; } if (disc > 0) { if (b == 0) { double s = fabs (0.5 * sqrt (disc) / a); GSL_REAL (*z0) = -s; GSL_IMAG (*z0) = 0; GSL_REAL (*z1) = s; GSL_IMAG (*z1) = 0; } else { double sgnb = (b > 0 ? 1 : -1); double temp = -0.5 * (b + sgnb * sqrt (disc)); double r1 = temp / a; double r2 = c / temp; if (r1 < r2) { GSL_REAL (*z0) = r1; GSL_IMAG (*z0) = 0; GSL_REAL (*z1) = r2; GSL_IMAG (*z1) = 0; } else { GSL_REAL (*z0) = r2; GSL_IMAG (*z0) = 0; GSL_REAL (*z1) = r1; GSL_IMAG (*z1) = 0; } } return 2; } else if (disc == 0) { GSL_REAL (*z0) = -0.5 * b / a; GSL_IMAG (*z0) = 0; GSL_REAL (*z1) = -0.5 * b / a; GSL_IMAG (*z1) = 0; return 2; } else { double s = fabs (0.5 * sqrt (-disc) / a); GSL_REAL (*z0) = -0.5 * b / a; GSL_IMAG (*z0) = -s; GSL_REAL (*z1) = -0.5 * b / a; GSL_IMAG (*z1) = s; return 2; } } gsl/poly/qr.c0000644000175000017500000001253613536674414011512 0ustar eddedd/* poly/qr.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static int qr_companion (double *h, size_t nc, gsl_complex_packed_ptr z); static int qr_companion (double *h, size_t nc, gsl_complex_packed_ptr zroot) { double t = 0.0; size_t iterations, e, i, j, k, m; double w, x, y, s, z; double p = 0, q = 0, r = 0; /* FIXME: if p,q,r, are not set to zero then the compiler complains that they ``might be used uninitialized in this function''. Looking at the code this does seem possible, so this should be checked. */ int notlast; size_t n = nc; next_root: if (n == 0) return GSL_SUCCESS ; iterations = 0; next_iteration: for (e = n; e >= 2; e--) { double a1 = fabs (FMAT (h, e, e - 1, nc)); double a2 = fabs (FMAT (h, e - 1, e - 1, nc)); double a3 = fabs (FMAT (h, e, e, nc)); if (a1 <= GSL_DBL_EPSILON * (a2 + a3)) break; } x = FMAT (h, n, n, nc); if (e == n) { GSL_SET_COMPLEX_PACKED (zroot, n-1, x + t, 0); /* one real root */ n--; goto next_root; /*continue;*/ } y = FMAT (h, n - 1, n - 1, nc); w = FMAT (h, n - 1, n, nc) * FMAT (h, n, n - 1, nc); if (e == n - 1) { p = (y - x) / 2; q = p * p + w; y = sqrt (fabs (q)); x += t; if (q > 0) /* two real roots */ { if (p < 0) y = -y; y += p; GSL_SET_COMPLEX_PACKED (zroot, n-1, x - w / y, 0); GSL_SET_COMPLEX_PACKED (zroot, n-2, x + y, 0); } else { GSL_SET_COMPLEX_PACKED (zroot, n-1, x + p, -y); GSL_SET_COMPLEX_PACKED (zroot, n-2, x + p, y); } n -= 2; goto next_root; /*continue;*/ } /* No more roots found yet, do another iteration */ if (iterations == 120) /* increased from 30 to 120 */ { /* too many iterations - give up! */ return GSL_FAILURE ; } if (iterations % 10 == 0 && iterations > 0) { /* use an exceptional shift */ t += x; for (i = 1; i <= n; i++) { FMAT (h, i, i, nc) -= x; } s = fabs (FMAT (h, n, n - 1, nc)) + fabs (FMAT (h, n - 1, n - 2, nc)); y = 0.75 * s; x = y; w = -0.4375 * s * s; } iterations++; for (m = n - 2; m >= e; m--) { double a1, a2, a3; z = FMAT (h, m, m, nc); r = x - z; s = y - z; p = FMAT (h, m, m + 1, nc) + (r * s - w) / FMAT (h, m + 1, m, nc); q = FMAT (h, m + 1, m + 1, nc) - z - r - s; r = FMAT (h, m + 2, m + 1, nc); s = fabs (p) + fabs (q) + fabs (r); p /= s; q /= s; r /= s; if (m == e) break; a1 = fabs (FMAT (h, m, m - 1, nc)); a2 = fabs (FMAT (h, m - 1, m - 1, nc)); a3 = fabs (FMAT (h, m + 1, m + 1, nc)); if (a1 * (fabs (q) + fabs (r)) <= GSL_DBL_EPSILON * fabs (p) * (a2 + a3)) break; } for (i = m + 2; i <= n; i++) { FMAT (h, i, i - 2, nc) = 0; } for (i = m + 3; i <= n; i++) { FMAT (h, i, i - 3, nc) = 0; } /* double QR step */ for (k = m; k <= n - 1; k++) { notlast = (k != n - 1); if (k != m) { p = FMAT (h, k, k - 1, nc); q = FMAT (h, k + 1, k - 1, nc); r = notlast ? FMAT (h, k + 2, k - 1, nc) : 0.0; x = fabs (p) + fabs (q) + fabs (r); if (x == 0) continue; /* FIXME????? */ p /= x; q /= x; r /= x; } s = sqrt (p * p + q * q + r * r); if (p < 0) s = -s; if (k != m) { FMAT (h, k, k - 1, nc) = -s * x; } else if (e != m) { FMAT (h, k, k - 1, nc) *= -1; } p += s; x = p / s; y = q / s; z = r / s; q /= p; r /= p; /* do row modifications */ for (j = k; j <= n; j++) { p = FMAT (h, k, j, nc) + q * FMAT (h, k + 1, j, nc); if (notlast) { p += r * FMAT (h, k + 2, j, nc); FMAT (h, k + 2, j, nc) -= p * z; } FMAT (h, k + 1, j, nc) -= p * y; FMAT (h, k, j, nc) -= p * x; } j = (k + 3 < n) ? (k + 3) : n; /* do column modifications */ for (i = e; i <= j; i++) { p = x * FMAT (h, i, k, nc) + y * FMAT (h, i, k + 1, nc); if (notlast) { p += z * FMAT (h, i, k + 2, nc); FMAT (h, i, k + 2, nc) -= p * r; } FMAT (h, i, k + 1, nc) -= p * q; FMAT (h, i, k, nc) -= p; } } goto next_iteration; } gsl/poly/zsolve_cubic.c0000644000175000017500000001017413536674414013553 0ustar eddedd/* poly/zsolve_cubic.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* zsolve_cubic.c - finds the complex roots of x^3 + a x^2 + b x + c = 0 */ #include #include #include #include #include #define SWAP(a,b) do { double tmp = b ; b = a ; a = tmp ; } while(0) int gsl_poly_complex_solve_cubic (double a, double b, double c, gsl_complex *z0, gsl_complex *z1, gsl_complex *z2) { double q = (a * a - 3 * b); double r = (2 * a * a * a - 9 * a * b + 27 * c); double Q = q / 9; double R = r / 54; double Q3 = Q * Q * Q; double R2 = R * R; double CR2 = 729 * r * r; double CQ3 = 2916 * q * q * q; if (R == 0 && Q == 0) { GSL_REAL (*z0) = -a / 3; GSL_IMAG (*z0) = 0; GSL_REAL (*z1) = -a / 3; GSL_IMAG (*z1) = 0; GSL_REAL (*z2) = -a / 3; GSL_IMAG (*z2) = 0; return 3; } else if (CR2 == CQ3) { /* this test is actually R2 == Q3, written in a form suitable for exact computation with integers */ /* Due to finite precision some double roots may be missed, and will be considered to be a pair of complex roots z = x +/- epsilon i close to the real axis. */ double sqrtQ = sqrt (Q); if (R > 0) { GSL_REAL (*z0) = -2 * sqrtQ - a / 3; GSL_IMAG (*z0) = 0; GSL_REAL (*z1) = sqrtQ - a / 3; GSL_IMAG (*z1) = 0; GSL_REAL (*z2) = sqrtQ - a / 3; GSL_IMAG (*z2) = 0; } else { GSL_REAL (*z0) = -sqrtQ - a / 3; GSL_IMAG (*z0) = 0; GSL_REAL (*z1) = -sqrtQ - a / 3; GSL_IMAG (*z1) = 0; GSL_REAL (*z2) = 2 * sqrtQ - a / 3; GSL_IMAG (*z2) = 0; } return 3; } else if (R2 < Q3) { double sgnR = (R >= 0 ? 1 : -1); double ratio = sgnR * sqrt (R2 / Q3); double theta = acos (ratio); double norm = -2 * sqrt (Q); double r0 = norm * cos (theta / 3) - a / 3; double r1 = norm * cos ((theta + 2.0 * M_PI) / 3) - a / 3; double r2 = norm * cos ((theta - 2.0 * M_PI) / 3) - a / 3; /* Sort r0, r1, r2 into increasing order */ if (r0 > r1) SWAP (r0, r1); if (r1 > r2) { SWAP (r1, r2); if (r0 > r1) SWAP (r0, r1); } GSL_REAL (*z0) = r0; GSL_IMAG (*z0) = 0; GSL_REAL (*z1) = r1; GSL_IMAG (*z1) = 0; GSL_REAL (*z2) = r2; GSL_IMAG (*z2) = 0; return 3; } else { double sgnR = (R >= 0 ? 1 : -1); double A = -sgnR * pow (fabs (R) + sqrt (R2 - Q3), 1.0 / 3.0); double B = Q / A; if (A + B < 0) { GSL_REAL (*z0) = A + B - a / 3; GSL_IMAG (*z0) = 0; GSL_REAL (*z1) = -0.5 * (A + B) - a / 3; GSL_IMAG (*z1) = -(sqrt (3.0) / 2.0) * fabs(A - B); GSL_REAL (*z2) = -0.5 * (A + B) - a / 3; GSL_IMAG (*z2) = (sqrt (3.0) / 2.0) * fabs(A - B); } else { GSL_REAL (*z0) = -0.5 * (A + B) - a / 3; GSL_IMAG (*z0) = -(sqrt (3.0) / 2.0) * fabs(A - B); GSL_REAL (*z1) = -0.5 * (A + B) - a / 3; GSL_IMAG (*z1) = (sqrt (3.0) / 2.0) * fabs(A - B); GSL_REAL (*z2) = A + B - a / 3; GSL_IMAG (*z2) = 0; } return 3; } } gsl/poly/TODO0000644000175000017500000001333213536674414011407 0ustar eddedd# -*- org -*- #+CATEGORY: poly * Estimate error on general poly roots using Newton method? Allow for multiple roots and higher derivatives * Newton-Maehly (Newton with implicit deflation) * Jenkins-Traub * Brian Smith's adaptation of Laguerre's method * Hirano's method, SIAM J Num Anal 19 (1982) 793-99 by Murota * Carstensen, Petkovic, "On iteration methods without derivatives for the simultaneous determination of polynomial zeros", J. Comput. Appl. Math., 45 (1993) 251-267 * Investigate this, > NA Digest Sunday, July 11, 1999 Volume 99 : Issue 28 > > From: Murakami Hiroshi > Date: Sun, 11 Jul 1999 18:56:54 +0900 (JST) > Subject: Code for Wilf's Complex Bisection Method > > A sample demo source of root finding method for the general complex > coefficient polynomial is placed to URL . > It is about 8KB in size and is a tar and gnu-zipped file. > The algorithm is taken from the following reference: > HERBERT S.WILF,"A Global Bisection Algorithm for Computing the Zeros > of Polynomials in the Complex Plane",ACM.vol.25,No.3,July 1978,pp.415-420. > > The Wilf's method is the complex plane version of the Sturm bi-section > method for the real polynomial. And theoretically very interesting. > For the given complex interval (complex rectilinear region and sides are > parallel to the x-y axis), the procedure gives the count of the complex > roots of the polynomial inside the interval. Thus, successive bi-section > or quad-section of the interval can give the sequence of the shrinking > intervals containing the root inside to attain the required accuracies. > The source code is written mostly Fortran77 language, however some > violations are intensionally left as: 1: The DO-ENDDO loop structure. > 2: The longer than 6 letter names. 3: The use of under-score letter. > 4: The use of include statement. > The code will be placed in the public domain. > * Investigate this From: "Steven G. Johnson" To: help-gsl@gnu.org Subject: [Help-gsl] (in)accuracy of gsl_poly_complex_solve for repeated roots? Date: Sun, 05 Jun 2005 16:25:40 -0400 Precedence: list Envelope-to: bjg@network-theory.co.uk Hi, I noticed that gsl_poly_complex_solve seems to be surprisingly inaccurate. For example, if you ask it for the roots of 1 + 4x + 6x^2 + 4x^3 + x^4, which should have x = -1 as a four-fold root (note that the coefficients and solutions are exactly representable), it gives roots: -0.999903+9.66605e-05i -0.999903-9.66605e-05i -1.0001+9.66834e-05i -1.0001-9.66834e-05i i.e. it is accurate to only 4 significant digits. (On the other hand, when I have 4 distinct real roots it seems to be accurate to machine precision.) If this kind of catastrophic accuracy loss is intrinsic to the algorithm when repeated roots are encountered, please note it in the manual. However, I suspect that there may be algorithms to obtain higher accuracy for multiple roots. I found the below references in a literature search on the topic, which you may want to look into. (The first reference can be found online at http://www.neiu.edu/~zzeng/multroot.htm) Cordially, Steven G. Johnson --------------------------------------------------------------------- Algorithm 835: MULTROOT - a Matlab package for computing polynomial roots and multiplicities Zeng, Z. (Dept. of Math., Northeastern Illinois Univ., Chicago, IL, USA) Source: ACM Transactions on Mathematical Software, v 30, n 2, June 2004, p 218-36 ISSN: 0098-3500 CODEN: ACMSCU Publisher: ACM, USA Abstract: MULTROOT is a collection of Matlab modules for accurate computation of polynomial roots, especially roots with nontrivial multiplicities. As a blackbox-type software, MULTROOT requires the polynomial coefficients as the only input, and outputs the computed roots, multiplicities, backward error, estimated forward error, and the structure-preserving condition number. The most significant features of MULTROOT are the multiplicity identification capability and high accuracy on multiple roots without using multiprecision arithmetic, even if the polynomial coefficients are inexact. A comprehensive test suite of polynomials that are collected from the literature is included for numerical experiments and performance comparison (21 refs.) --------------------------------------------------------------------- Ten methods to bound multiple roots of polynomials Rump, S.M. (Inst. fur Informatik III, Tech. Univ. Hamburg-Harburg, Hamburg, Germany) Source: Journal of Computational and Applied Mathematics, v 156, n 2, 15 July 2003, p 403-32 ISSN: 0377-0427 CODEN: JCAMDI Publisher: Elsevier, Netherlands Abstract: Given a univariate polynomial P with a k-fold multiple root or a k-fold root cluster near some z, we discuss nine different methods to compute a disc near z which either contains exactly or contains at least k roots of P. Many of the presented methods are known and of those some are new. We are especially interested in the behavior of methods when implemented in a rigorous way, that is, when taking into account all possible effects of rounding errors. In other words, every result shall be mathematically correct. We display extensive test sets comparing the methods under different circumstances. Based on the results, we present a tenth, hybrid method combining five of the previous methods which, for give z, (i) detects the number k of roots near z and (ii) computes an including disc with in most cases a radius of the order of the numerical sensitivity of the root cluster. Therefore, the resulting discs are numerically nearly optimal _______________________________________________ Help-gsl mailing list Help-gsl@gnu.org http://lists.gnu.org/mailman/listinfo/help-gsl gsl/poly/gsl_poly.h0000644000175000017500000001244013536674414012717 0ustar eddedd/* poly/gsl_poly.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_POLY_H__ #define __GSL_POLY_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Evaluate polynomial * * c[0] + c[1] x + c[2] x^2 + ... + c[len-1] x^(len-1) * * exceptions: none */ /* real polynomial, real x */ INLINE_DECL double gsl_poly_eval(const double c[], const int len, const double x); /* real polynomial, complex x */ INLINE_DECL gsl_complex gsl_poly_complex_eval (const double c [], const int len, const gsl_complex z); /* complex polynomial, complex x */ INLINE_DECL gsl_complex gsl_complex_poly_complex_eval (const gsl_complex c [], const int len, const gsl_complex z); int gsl_poly_eval_derivs(const double c[], const size_t lenc, const double x, double res[], const size_t lenres); #ifdef HAVE_INLINE INLINE_FUN double gsl_poly_eval(const double c[], const int len, const double x) { int i; double ans = c[len-1]; for(i=len-1; i>0; i--) ans = c[i-1] + x * ans; return ans; } INLINE_FUN gsl_complex gsl_poly_complex_eval(const double c[], const int len, const gsl_complex z) { int i; gsl_complex ans; GSL_SET_COMPLEX (&ans, c[len-1], 0.0); for(i=len-1; i>0; i--) { /* The following three lines are equivalent to ans = gsl_complex_add_real (gsl_complex_mul (z, ans), c[i-1]); but faster */ double tmp = c[i-1] + GSL_REAL (z) * GSL_REAL (ans) - GSL_IMAG (z) * GSL_IMAG (ans); GSL_SET_IMAG (&ans, GSL_IMAG (z) * GSL_REAL (ans) + GSL_REAL (z) * GSL_IMAG (ans)); GSL_SET_REAL (&ans, tmp); } return ans; } INLINE_FUN gsl_complex gsl_complex_poly_complex_eval(const gsl_complex c[], const int len, const gsl_complex z) { int i; gsl_complex ans = c[len-1]; for(i=len-1; i>0; i--) { /* The following three lines are equivalent to ans = gsl_complex_add (c[i-1], gsl_complex_mul (x, ans)); but faster */ double tmp = GSL_REAL (c[i-1]) + GSL_REAL (z) * GSL_REAL (ans) - GSL_IMAG (z) * GSL_IMAG (ans); GSL_SET_IMAG (&ans, GSL_IMAG (c[i-1]) + GSL_IMAG (z) * GSL_REAL (ans) + GSL_REAL (z) * GSL_IMAG (ans)); GSL_SET_REAL (&ans, tmp); } return ans; } #endif /* HAVE_INLINE */ /* Work with divided-difference polynomials, Abramowitz & Stegun 25.2.26 */ int gsl_poly_dd_init (double dd[], const double x[], const double y[], size_t size); INLINE_DECL double gsl_poly_dd_eval (const double dd[], const double xa[], const size_t size, const double x); #ifdef HAVE_INLINE INLINE_FUN double gsl_poly_dd_eval(const double dd[], const double xa[], const size_t size, const double x) { size_t i; double y = dd[size - 1]; for (i = size - 1; i--;) y = dd[i] + (x - xa[i]) * y; return y; } #endif /* HAVE_INLINE */ int gsl_poly_dd_taylor (double c[], double xp, const double dd[], const double x[], size_t size, double w[]); int gsl_poly_dd_hermite_init (double dd[], double z[], const double xa[], const double ya[], const double dya[], const size_t size); /* Solve for real or complex roots of the standard quadratic equation, * returning the number of real roots. * * Roots are returned ordered. */ int gsl_poly_solve_quadratic (double a, double b, double c, double * x0, double * x1); int gsl_poly_complex_solve_quadratic (double a, double b, double c, gsl_complex * z0, gsl_complex * z1); /* Solve for real roots of the cubic equation * x^3 + a x^2 + b x + c = 0, returning the * number of real roots. * * Roots are returned ordered. */ int gsl_poly_solve_cubic (double a, double b, double c, double * x0, double * x1, double * x2); int gsl_poly_complex_solve_cubic (double a, double b, double c, gsl_complex * z0, gsl_complex * z1, gsl_complex * z2); /* Solve for the complex roots of a general real polynomial */ typedef struct { size_t nc ; double * matrix ; } gsl_poly_complex_workspace ; gsl_poly_complex_workspace * gsl_poly_complex_workspace_alloc (size_t n); void gsl_poly_complex_workspace_free (gsl_poly_complex_workspace * w); int gsl_poly_complex_solve (const double * a, size_t n, gsl_poly_complex_workspace * w, gsl_complex_packed_ptr z); __END_DECLS #endif /* __GSL_POLY_H__ */ gsl/poly/test.c0000644000175000017500000005543113536674414012050 0ustar eddedd/* poly/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include /* sort by Re(z) then by Im(z) */ static int cmp_cplx(const double *a, const double *b) { double r = a[0] - b[0]; if (r == 0.0) { double t = a[1] - b[1]; return t < 0.0 ? -1 : t > 0.0 ? 1 : 0; } else if (r < 0.0) return -1; else return 1; } int main (void) { const double eps = 100.0 * GSL_DBL_EPSILON; gsl_ieee_env_setup (); /* Polynomial evaluation */ { double x, y; double c[3] = { 1.0, 0.5, 0.3 }; x = 0.5; y = gsl_poly_eval (c, 3, x); gsl_test_rel (y, 1 + 0.5 * x + 0.3 * x * x, eps, "gsl_poly_eval({1, 0.5, 0.3}, 0.5)"); } { double x, y; double d[11] = { 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1 }; x = 1.0; y = gsl_poly_eval (d, 11, x); gsl_test_rel (y, 1.0, eps, "gsl_poly_eval({1,-1, 1, -1, 1, -1, 1, -1, 1, -1, 1}, 1.0)"); } { gsl_complex x, y; double c[1] = {0.3}; GSL_SET_REAL (&x, 0.75); GSL_SET_IMAG (&x, 1.2); y = gsl_poly_complex_eval (c, 1, x); gsl_test_rel (GSL_REAL (y), 0.3, eps, "y.real, gsl_poly_complex_eval ({0.3}, 0.75 + 1.2i)"); gsl_test_rel (GSL_IMAG (y), 0.0, eps, "y.imag, gsl_poly_complex_eval ({0.3}, 0.75 + 1.2i)"); } { gsl_complex x, y; double c[4] = {2.1, -1.34, 0.76, 0.45}; GSL_SET_REAL (&x, 0.49); GSL_SET_IMAG (&x, 0.95); y = gsl_poly_complex_eval (c, 4, x); gsl_test_rel (GSL_REAL (y), 0.3959143, eps, "y.real, gsl_poly_complex_eval ({2.1, -1.34, 0.76, 0.45}, 0.49 + 0.95i)"); gsl_test_rel (GSL_IMAG (y), -0.6433305, eps, "y.imag, gsl_poly_complex_eval ({2.1, -1.34, 0.76, 0.45}, 0.49 + 0.95i)"); } { gsl_complex x, y; gsl_complex c[1]; GSL_SET_REAL (&c[0], 0.674); GSL_SET_IMAG (&c[0], -1.423); GSL_SET_REAL (&x, -1.44); GSL_SET_IMAG (&x, 9.55); y = gsl_complex_poly_complex_eval (c, 1, x); gsl_test_rel (GSL_REAL (y), 0.674, eps, "y.real, gsl_complex_poly_complex_eval ({0.674 - 1.423i}, -1.44 + 9.55i)"); gsl_test_rel (GSL_IMAG (y), -1.423, eps, "y.imag, gsl_complex_poly_complex_eval ({0.674 - 1.423i}, -1.44 + 9.55i)"); } { gsl_complex x, y; gsl_complex c[4]; GSL_SET_REAL (&c[0], -2.31); GSL_SET_IMAG (&c[0], 0.44); GSL_SET_REAL (&c[1], 4.21); GSL_SET_IMAG (&c[1], -3.19); GSL_SET_REAL (&c[2], 0.93); GSL_SET_IMAG (&c[2], 1.04); GSL_SET_REAL (&c[3], -0.42); GSL_SET_IMAG (&c[3], 0.68); GSL_SET_REAL (&x, 0.49); GSL_SET_IMAG (&x, 0.95); y = gsl_complex_poly_complex_eval (c, 4, x); gsl_test_rel (GSL_REAL (y), 1.82462012, eps, "y.real, gsl_complex_poly_complex_eval ({-2.31 + 0.44i, 4.21 - 3.19i, 0.93 + 1.04i, -0.42 + 0.68i}, 0.49 + 0.95i)"); gsl_test_rel (GSL_IMAG (y), 2.30389412, eps, "y.imag, gsl_complex_poly_complex_eval ({-2.31 + 0.44i, 4.21 - 3.19i, 0.93 + 1.04i, -0.42 + 0.68i}, 0.49 + 0.95i)"); } /* Quadratic */ { double x0, x1; int n = gsl_poly_solve_quadratic (4.0, -20.0, 26.0, &x0, &x1); gsl_test (n != 0, "gsl_poly_solve_quadratic, no roots, (2x - 5)^2 = -1"); } { double x0, x1; int n = gsl_poly_solve_quadratic (4.0, -20.0, 25.0, &x0, &x1); gsl_test (n != 2, "gsl_poly_solve_quadratic, one root, (2x - 5)^2 = 0"); gsl_test_rel (x0, 2.5, 1e-9, "x0, (2x - 5)^2 = 0"); gsl_test_rel (x1, 2.5, 1e-9, "x1, (2x - 5)^2 = 0"); gsl_test (x0 != x1, "x0 == x1, (2x - 5)^2 = 0"); } { double x0, x1; int n = gsl_poly_solve_quadratic (4.0, -20.0, 21.0, &x0, &x1); gsl_test (n != 2, "gsl_poly_solve_quadratic, two roots, (2x - 5)^2 = 4"); gsl_test_rel (x0, 1.5, 1e-9, "x0, (2x - 5)^2 = 4"); gsl_test_rel (x1, 3.5, 1e-9, "x1, (2x - 5)^2 = 4"); } { double x0, x1; int n = gsl_poly_solve_quadratic (4.0, 7.0, 0.0, &x0, &x1); gsl_test (n != 2, "gsl_poly_solve_quadratic, two roots, x(4x + 7) = 0"); gsl_test_rel (x0, -1.75, 1e-9, "x0, x(4x + 7) = 0"); gsl_test_rel (x1, 0.0, 1e-9, "x1, x(4x + 7) = 0"); } { double x0, x1; int n = gsl_poly_solve_quadratic (5.0, 0.0, -20.0, &x0, &x1); gsl_test (n != 2, "gsl_poly_solve_quadratic, two roots b = 0, 5 x^2 = 20"); gsl_test_rel (x0, -2.0, 1e-9, "x0, 5 x^2 = 20"); gsl_test_rel (x1, 2.0, 1e-9, "x1, 5 x^2 = 20"); } { double x0, x1; int n = gsl_poly_solve_quadratic (0.0, 3.0, -21.0, &x0, &x1); gsl_test (n != 1, "gsl_poly_solve_quadratic, one root (linear) 3 x - 21 = 0"); gsl_test_rel (x0, 7.0, 1e-9, "x0, 3x - 21 = 0"); } { double x0, x1; int n = gsl_poly_solve_quadratic (0.0, 0.0, 1.0, &x0, &x1); gsl_test (n != 0, "gsl_poly_solve_quadratic, no roots 1 = 0"); } /* Cubic */ { double x0, x1, x2; int n = gsl_poly_solve_cubic (0.0, 0.0, -27.0, &x0, &x1, &x2); gsl_test (n != 1, "gsl_poly_solve_cubic, one root, x^3 = 27"); gsl_test_rel (x0, 3.0, 1e-9, "x0, x^3 = 27"); } { double x0, x1, x2; int n = gsl_poly_solve_cubic (-51.0, 867.0, -4913.0, &x0, &x1, &x2); gsl_test (n != 3, "gsl_poly_solve_cubic, three roots, (x-17)^3=0"); gsl_test_rel (x0, 17.0, 1e-9, "x0, (x-17)^3=0"); gsl_test_rel (x1, 17.0, 1e-9, "x1, (x-17)^3=0"); gsl_test_rel (x2, 17.0, 1e-9, "x2, (x-17)^3=0"); } { double x0, x1, x2; int n = gsl_poly_solve_cubic (-57.0, 1071.0, -6647.0, &x0, &x1, &x2); gsl_test (n != 3, "gsl_poly_solve_cubic, three roots, (x-17)(x-17)(x-23)=0"); gsl_test_rel (x0, 17.0, 1e-9, "x0, (x-17)(x-17)(x-23)=0"); gsl_test_rel (x1, 17.0, 1e-9, "x1, (x-17)(x-17)(x-23)=0"); gsl_test_rel (x2, 23.0, 1e-9, "x2, (x-17)(x-17)(x-23)=0"); } { double x0, x1, x2; int n = gsl_poly_solve_cubic (-11.0, -493.0, +6647.0, &x0, &x1, &x2); gsl_test (n != 3, "gsl_poly_solve_cubic, three roots, (x+23)(x-17)(x-17)=0"); gsl_test_rel (x0, -23.0, 1e-9, "x0, (x+23)(x-17)(x-17)=0"); gsl_test_rel (x1, 17.0, 1e-9, "x1, (x+23)(x-17)(x-17)=0"); gsl_test_rel (x2, 17.0, 1e-9, "x2, (x+23)(x-17)(x-17)=0"); } { double x0, x1, x2; int n = gsl_poly_solve_cubic (-143.0, 5087.0, -50065.0, &x0, &x1, &x2); gsl_test (n != 3, "gsl_poly_solve_cubic, three roots, (x-17)(x-31)(x-95)=0"); gsl_test_rel (x0, 17.0, 1e-9, "x0, (x-17)(x-31)(x-95)=0"); gsl_test_rel (x1, 31.0, 1e-9, "x1, (x-17)(x-31)(x-95)=0"); gsl_test_rel (x2, 95.0, 1e-9, "x2, (x-17)(x-31)(x-95)=0"); } { double x0, x1, x2; int n = gsl_poly_solve_cubic (-109.0, 803.0, 50065.0, &x0, &x1, &x2); gsl_test (n != 3, "gsl_poly_solve_cubic, three roots, (x+17)(x-31)(x-95)=0"); gsl_test_rel (x0, -17.0, 1e-9, "x0, (x+17)(x-31)(x-95)=0"); gsl_test_rel (x1, 31.0, 1e-9, "x1, (x+17)(x-31)(x-95)=0"); gsl_test_rel (x2, 95.0, 1e-9, "x2, (x+17)(x-31)(x-95)=0"); } /* Quadratic with complex roots */ { gsl_complex z0, z1; int n = gsl_poly_complex_solve_quadratic (4.0, -20.0, 26.0, &z0, &z1); gsl_test (n != 2, "gsl_poly_complex_solve_quadratic, 2 roots (2x - 5)^2 = -1"); gsl_test_rel (GSL_REAL (z0), 2.5, 1e-9, "z0.real, (2x - 5)^2 = -1"); gsl_test_rel (GSL_IMAG (z0), -0.5, 1e-9, "z0.imag, (2x - 5)^2 = -1"); gsl_test_rel (GSL_REAL (z1), 2.5, 1e-9, "z1.real, (2x - 5)^2 = -1"); gsl_test_rel (GSL_IMAG (z1), 0.5, 1e-9, "z1.imag, (2x - 5)^2 = -1"); } { gsl_complex z0, z1; int n = gsl_poly_complex_solve_quadratic (4.0, -20.0, 25.0, &z0, &z1); gsl_test (n != 2, "gsl_poly_complex_solve_quadratic, one root, (2x - 5)^2 = 0"); gsl_test_rel (GSL_REAL (z0), 2.5, 1e-9, "z0.real, (2x - 5)^2 = 0"); gsl_test_rel (GSL_IMAG (z0), 0.0, 1e-9, "z0.imag (2x - 5)^2 = 0"); gsl_test_rel (GSL_REAL (z1), 2.5, 1e-9, "z1.real, (2x - 5)^2 = 0"); gsl_test_rel (GSL_IMAG (z1), 0.0, 1e-9, "z1.imag (2x - 5)^2 = 0"); gsl_test (GSL_REAL (z0) != GSL_REAL (z1), "z0.real == z1.real, (2x - 5)^2 = 0"); gsl_test (GSL_IMAG (z0) != GSL_IMAG (z1), "z0.imag == z1.imag, (2x - 5)^2 = 0"); } { gsl_complex z0, z1; int n = gsl_poly_complex_solve_quadratic (4.0, -20.0, 21.0, &z0, &z1); gsl_test (n != 2, "gsl_poly_complex_solve_quadratic, two roots, (2x - 5)^2 = 4"); gsl_test_rel (GSL_REAL (z0), 1.5, 1e-9, "z0.real, (2x - 5)^2 = 4"); gsl_test_rel (GSL_IMAG (z0), 0.0, 1e-9, "z0.imag, (2x - 5)^2 = 4"); gsl_test_rel (GSL_REAL (z1), 3.5, 1e-9, "z1.real, (2x - 5)^2 = 4"); gsl_test_rel (GSL_IMAG (z1), 0.0, 1e-9, "z1.imag, (2x - 5)^2 = 4"); } { gsl_complex z0, z1; int n = gsl_poly_complex_solve_quadratic (4.0, 7.0, 0.0, &z0, &z1); gsl_test (n != 2, "gsl_poly_complex_solve_quadratic, two roots, x(4x + 7) = 0"); gsl_test_rel (GSL_REAL (z0), -1.75, 1e-9, "z0.real, x(4x + 7) = 0"); gsl_test_rel (GSL_IMAG (z0), 0.0, 1e-9, "z0.imag, x(4x + 7) = 0"); gsl_test_rel (GSL_REAL (z1), 0.0, 1e-9, "z1.real, x(4x + 7) = 0"); gsl_test_rel (GSL_IMAG (z1), 0.0, 1e-9, "z1.imag, x(4x + 7) = 0"); } { gsl_complex z0, z1; int n = gsl_poly_complex_solve_quadratic (5.0, 0.0, -20.0, &z0, &z1); gsl_test (n != 2, "gsl_poly_complex_solve_quadratic, two roots b = 0, 5 x^2 = 20"); gsl_test_rel (GSL_REAL (z0), -2.0, 1e-9, "z0.real, 5 x^2 = 20"); gsl_test_rel (GSL_IMAG (z0), 0.0, 1e-9, "z0.imag, 5 x^2 = 20"); gsl_test_rel (GSL_REAL (z1), 2.0, 1e-9, "z1.real, 5 x^2 = 20"); gsl_test_rel (GSL_IMAG (z1), 0.0, 1e-9, "z1.imag, 5 x^2 = 20"); } { gsl_complex z0, z1; int n = gsl_poly_complex_solve_quadratic (5.0, 0.0, 20.0, &z0, &z1); gsl_test (n != 2, "gsl_poly_complex_solve_quadratic, two roots b = 0, 5 x^2 = -20"); gsl_test_rel (GSL_REAL (z0), 0.0, 1e-9, "z0.real, 5 x^2 = -20"); gsl_test_rel (GSL_IMAG (z0), -2.0, 1e-9, "z0.imag, 5 x^2 = -20"); gsl_test_rel (GSL_REAL (z1), 0.0, 1e-9, "z1.real, 5 x^2 = -20"); gsl_test_rel (GSL_IMAG (z1), 2.0, 1e-9, "z1.imag, 5 x^2 = -20"); } { gsl_complex z0, z1; int n = gsl_poly_complex_solve_quadratic (0.0, 3.0, -21.0, &z0, &z1); gsl_test (n != 1, "gsl_poly_complex_solve_quadratic, one root (linear) 3 x - 21 = 0"); gsl_test_rel (GSL_REAL (z0), 7.0, 1e-9, "z0.real, 3x - 21 = 0"); gsl_test_rel (GSL_IMAG (z0), 0.0, 1e-9, "z0.imag, 3x - 21 = 0"); } { gsl_complex z0, z1; int n = gsl_poly_complex_solve_quadratic (0.0, 0.0, 1.0, &z0, &z1); gsl_test (n != 0, "gsl_poly_complex_solve_quadratic, no roots 1 = 0"); } /* Cubic with complex roots */ { gsl_complex z0, z1, z2; int n = gsl_poly_complex_solve_cubic (0.0, 0.0, -27.0, &z0, &z1, &z2); gsl_test (n != 3, "gsl_poly_complex_solve_cubic, three root, x^3 = 27"); gsl_test_rel (GSL_REAL (z0), -1.5, 1e-9, "z0.real, x^3 = 27"); gsl_test_rel (GSL_IMAG (z0), -1.5 * sqrt (3.0), 1e-9, "z0.imag, x^3 = 27"); gsl_test_rel (GSL_REAL (z1), -1.5, 1e-9, "z1.real, x^3 = 27"); gsl_test_rel (GSL_IMAG (z1), 1.5 * sqrt (3.0), 1e-9, "z1.imag, x^3 = 27"); gsl_test_rel (GSL_REAL (z2), 3.0, 1e-9, "z2.real, x^3 = 27"); gsl_test_rel (GSL_IMAG (z2), 0.0, 1e-9, "z2.imag, x^3 = 27"); } { gsl_complex z0, z1, z2; int n = gsl_poly_complex_solve_cubic (-1.0, 1.0, 39.0, &z0, &z1, &z2); gsl_test (n != 3, "gsl_poly_complex_solve_cubic, three root, (x+3)(x^2-4x+13) = 0"); gsl_test_rel (GSL_REAL (z0), -3.0, 1e-9, "z0.real, (x+3)(x^2+1) = 0"); gsl_test_rel (GSL_IMAG (z0), 0.0, 1e-9, "z0.imag, (x+3)(x^2+1) = 0"); gsl_test_rel (GSL_REAL (z1), 2.0, 1e-9, "z1.real, (x+3)(x^2+1) = 0"); gsl_test_rel (GSL_IMAG (z1), -3.0, 1e-9, "z1.imag, (x+3)(x^2+1) = 0"); gsl_test_rel (GSL_REAL (z2), 2.0, 1e-9, "z2.real, (x+3)(x^2+1) = 0"); gsl_test_rel (GSL_IMAG (z2), 3.0, 1e-9, "z2.imag, (x+3)(x^2+1) = 0"); } { gsl_complex z0, z1, z2; int n = gsl_poly_complex_solve_cubic (-51.0, 867.0, -4913.0, &z0, &z1, &z2); gsl_test (n != 3, "gsl_poly_complex_solve_cubic, three roots, (x-17)^3=0"); gsl_test_rel (GSL_REAL (z0), 17.0, 1e-9, "z0.real, (x-17)^3=0"); gsl_test_rel (GSL_IMAG (z0), 0.0, 1e-9, "z0.imag, (x-17)^3=0"); gsl_test_rel (GSL_REAL (z1), 17.0, 1e-9, "z1.real, (x-17)^3=0"); gsl_test_rel (GSL_IMAG (z1), 0.0, 1e-9, "z1.imag, (x-17)^3=0"); gsl_test_rel (GSL_REAL (z2), 17.0, 1e-9, "z2.real, (x-17)^3=0"); gsl_test_rel (GSL_IMAG (z2), 0.0, 1e-9, "z2.imag, (x-17)^3=0"); } { gsl_complex z0, z1, z2; int n = gsl_poly_complex_solve_cubic (-57.0, 1071.0, -6647.0, &z0, &z1, &z2); gsl_test (n != 3, "gsl_poly_complex_solve_cubic, three roots, (x-17)(x-17)(x-23)=0"); gsl_test_rel (GSL_REAL (z0), 17.0, 1e-9, "z0.real, (x-17)(x-17)(x-23)=0"); gsl_test_rel (GSL_IMAG (z0), 0.0, 1e-9, "z0.imag, (x-17)(x-17)(x-23)=0"); gsl_test_rel (GSL_REAL (z1), 17.0, 1e-9, "z1.real, (x-17)(x-17)(x-23)=0"); gsl_test_rel (GSL_IMAG (z1), 0.0, 1e-9, "z1.imag, (x-17)(x-17)(x-23)=0"); gsl_test_rel (GSL_REAL (z2), 23.0, 1e-9, "z2.real, (x-17)(x-17)(x-23)=0"); gsl_test_rel (GSL_IMAG (z2), 0.0, 1e-9, "z2.imag, (x-17)(x-17)(x-23)=0"); } { gsl_complex z0, z1, z2; int n = gsl_poly_complex_solve_cubic (-11.0, -493.0, +6647.0, &z0, &z1, &z2); gsl_test (n != 3, "gsl_poly_complex_solve_cubic, three roots, (x+23)(x-17)(x-17)=0"); gsl_test_rel (GSL_REAL (z0), -23.0, 1e-9, "z0.real, (x+23)(x-17)(x-17)=0"); gsl_test_rel (GSL_IMAG (z0), 0.0, 1e-9, "z0.imag, (x+23)(x-17)(x-17)=0"); gsl_test_rel (GSL_REAL (z1), 17.0, 1e-9, "z1.real, (x+23)(x-17)(x-17)=0"); gsl_test_rel (GSL_IMAG (z1), 0.0, 1e-9, "z1.imag, (x+23)(x-17)(x-17)=0"); gsl_test_rel (GSL_REAL (z2), 17.0, 1e-9, "z2.real, (x+23)(x-17)(x-17)=0"); gsl_test_rel (GSL_IMAG (z2), 0.0, 1e-9, "z2.imag, (x+23)(x-17)(x-17)=0"); } { gsl_complex z0, z1, z2; int n = gsl_poly_complex_solve_cubic (-143.0, 5087.0, -50065.0, &z0, &z1, &z2); gsl_test (n != 3, "gsl_poly_complex_solve_cubic, three roots, (x-17)(x-31)(x-95)=0"); gsl_test_rel (GSL_REAL (z0), 17.0, 1e-9, "z0.real, (x-17)(x-31)(x-95)=0"); gsl_test_rel (GSL_IMAG (z0), 0.0, 1e-9, "z0.imag, (x-17)(x-31)(x-95)=0"); gsl_test_rel (GSL_REAL (z1), 31.0, 1e-9, "z1.real, (x-17)(x-31)(x-95)=0"); gsl_test_rel (GSL_IMAG (z1), 0.0, 1e-9, "z1.imag, (x-17)(x-31)(x-95)=0"); gsl_test_rel (GSL_REAL (z2), 95.0, 1e-9, "z2.real, (x-17)(x-31)(x-95)=0"); gsl_test_rel (GSL_IMAG (z2), 0.0, 1e-9, "z2.imag, (x-17)(x-31)(x-95)=0"); } { /* Wilkinson polynomial: y = (x-1)(x-2)(x-3)(x-4)(x-5) */ double a[6] = { -120, 274, -225, 85, -15, 1 }; double z[6*2]; gsl_poly_complex_workspace *w = gsl_poly_complex_workspace_alloc (6); int status = gsl_poly_complex_solve (a, 6, w, z); gsl_poly_complex_workspace_free (w); gsl_test (status, "gsl_poly_complex_solve, 5th-order Wilkinson polynomial"); gsl_test_rel (z[0], 1.0, 1e-9, "z0.real, 5th-order polynomial"); gsl_test_rel (z[1], 0.0, 1e-9, "z0.imag, 5th-order polynomial"); gsl_test_rel (z[2], 2.0, 1e-9, "z1.real, 5th-order polynomial"); gsl_test_rel (z[3], 0.0, 1e-9, "z1.imag, 5th-order polynomial"); gsl_test_rel (z[4], 3.0, 1e-9, "z2.real, 5th-order polynomial"); gsl_test_rel (z[5], 0.0, 1e-9, "z2.imag, 5th-order polynomial"); gsl_test_rel (z[6], 4.0, 1e-9, "z3.real, 5th-order polynomial"); gsl_test_rel (z[7], 0.0, 1e-9, "z3.imag, 5th-order polynomial"); gsl_test_rel (z[8], 5.0, 1e-9, "z4.real, 5th-order polynomial"); gsl_test_rel (z[9], 0.0, 1e-9, "z4.imag, 5th-order polynomial"); } { /* : 8-th order polynomial y = x^8 + x^4 + 1 */ double a[9] = { 1, 0, 0, 0, 1, 0, 0, 0, 1 }; double z[8*2]; double C = 0.5; double S = sqrt (3.0) / 2.0; gsl_poly_complex_workspace *w = gsl_poly_complex_workspace_alloc (9); int status = gsl_poly_complex_solve (a, 9, w, z); gsl_poly_complex_workspace_free (w); gsl_test (status, "gsl_poly_complex_solve, 8th-order polynomial"); gsl_test_rel (z[0], -S, 1e-9, "z0.real, 8th-order polynomial"); gsl_test_rel (z[1], C, 1e-9, "z0.imag, 8th-order polynomial"); gsl_test_rel (z[2], -S, 1e-9, "z1.real, 8th-order polynomial"); gsl_test_rel (z[3], -C, 1e-9, "z1.imag, 8th-order polynomial"); gsl_test_rel (z[4], -C, 1e-9, "z2.real, 8th-order polynomial"); gsl_test_rel (z[5], S, 1e-9, "z2.imag, 8th-order polynomial"); gsl_test_rel (z[6], -C, 1e-9, "z3.real, 8th-order polynomial"); gsl_test_rel (z[7], -S, 1e-9, "z3.imag, 8th-order polynomial"); gsl_test_rel (z[8], C, 1e-9, "z4.real, 8th-order polynomial"); gsl_test_rel (z[9], S, 1e-9, "z4.imag, 8th-order polynomial"); gsl_test_rel (z[10], C, 1e-9, "z5.real, 8th-order polynomial"); gsl_test_rel (z[11], -S, 1e-9, "z5.imag, 8th-order polynomial"); gsl_test_rel (z[12], S, 1e-9, "z6.real, 8th-order polynomial"); gsl_test_rel (z[13], C, 1e-9, "z6.imag, 8th-order polynomial"); gsl_test_rel (z[14], S, 1e-9, "z7.real, 8th-order polynomial"); gsl_test_rel (z[15], -C, 1e-9, "z7.imag, 8th-order polynomial"); } { /* 15-th order polynomial y = (x + 1) * (x^10 + x^9 + 2 * x^7 + 4 * x^2 + 4 * x + 8) * (x - 1)^2 * (x - 2)^2 Problem reported by Munagala Ramanath (bug #39055) */ double a[16] = { 32, -48, -8, 28, -8, 16, -16, 12, -16, 6, 10, -17, 10, 2, -4, 1 }; double z[16*2]; double expected[16*2] = { -1.6078107423472359, 0.00000000000000000, -1.3066982484920768, 0.00000000000000000, -1.0000000000000000, 0.00000000000000000, -0.65893856175240950, -0.83459757287426684, -0.65893856175240950, 0.83459757287426684, -0.070891117403341281, -1.1359249087587791, -0.070891117403341281, 1.1359249087587791, 0.57284747839410854, -1.1987808988289705, 0.57284747839410854, 1.1987808988289705, 1.0000000000000000, 0.00000000000000000, 1.0000000000000000, 0.00000000000000000, 1.1142366961812986, -0.48083981203389980, 1.1142366961812986, 0.48083981203389980, 2.0000000000000000, 0.00000000000000000, 2.0000000000000000, 0.00000000000000000 }; int i; gsl_poly_complex_workspace *w = gsl_poly_complex_workspace_alloc (16); int status = gsl_poly_complex_solve (a, 16, w, z); gsl_poly_complex_workspace_free (w); gsl_test (status, "gsl_poly_complex_solve, 15th-order polynomial"); gsl_heapsort(z, 15, 2 * sizeof(double), (gsl_comparison_fn_t) &cmp_cplx); for (i = 0; i<15; i++) { gsl_test_rel (z[2*i], expected[2*i], 1e-7, "z%d.real, 15th-order polynomial", i); gsl_test_rel (z[2*i+1], expected[2*i+1], 1e-7, "z%d.imag, 15th-order polynomial", i); } } { int i; double xa[7] = {0.16, 0.97, 1.94, 2.74, 3.58, 3.73, 4.70 }; double ya[7] = {0.73, 1.11, 1.49, 1.84, 2.30, 2.41, 3.07 }; double dd_expected[7] = { 7.30000000000000e-01, 4.69135802469136e-01, -4.34737219941284e-02, 2.68681098870099e-02, -3.22937056934996e-03, 6.12763259971375e-03, -6.45402453527083e-03 }; double dd[7], coeff[7], work[7]; gsl_poly_dd_init (dd, xa, ya, 7); for (i = 0; i < 7; i++) { gsl_test_rel (dd[i], dd_expected[i], 1e-10, "divided difference dd[%d]", i); } for (i = 0; i < 7; i++) { double y = gsl_poly_dd_eval(dd, xa, 7, xa[i]); gsl_test_rel (y, ya[i], 1e-10, "divided difference y[%d]", i); } gsl_poly_dd_taylor (coeff, 1.5, dd, xa, 7, work); for (i = 0; i < 7; i++) { double y = gsl_poly_eval(coeff, 7, xa[i] - 1.5); gsl_test_rel (y, ya[i], 1e-10, "taylor expansion about 1.5 y[%d]", i); } } { size_t i; double xa[3] = { 1.3, 1.6, 1.9 }; double ya[3] = { 0.6200860, 0.4554022, 0.2818186 }; double dya[3] = { -0.5220232, -0.5698959, -0.5811571 }; double dd_expected[6] = { 6.200860000000e-01, -5.220232000000e-01, -8.974266666667e-02, 6.636555555556e-02, 2.666666666662e-03, -2.774691357989e-03 }; double dd[6], za[6], coeff[6], work[6]; gsl_poly_dd_hermite_init(dd, za, xa, ya, dya, 3); for (i = 0; i < 6; i++) { gsl_test_rel (dd[i], dd_expected[i], 1e-10, "hermite divided difference dd[%d]", i); } for (i = 0; i < 3; i++) { double y = gsl_poly_dd_eval(dd, za, 6, xa[i]); gsl_test_rel (y, ya[i], 1e-10, "hermite divided difference y[%d]", i); } for (i = 0; i < 3; i++) { gsl_poly_dd_taylor(coeff, xa[i], dd, za, 6, work); gsl_test_rel (coeff[1], dya[i], 1e-10, "hermite divided difference dy/dx[%d]", i); } } { double c[6] = { +1.0, -2.0, +3.0, -4.0, +5.0, -6.0 }; double dc[6]; double x; x = -0.5; gsl_poly_eval_derivs(c, 6, x, dc, 6); gsl_test_rel (dc[0], c[0] + c[1]*x + c[2]*x*x + c[3]*x*x*x + c[4]*x*x*x*x + c[5]*x*x*x*x*x , eps, "gsl_poly_eval_derivs({+1, -2, +3, -4, +5, -6}, 3.75)"); gsl_test_rel (dc[1], c[1] + 2.0*c[2]*x + 3.0*c[3]*x*x + 4.0*c[4]*x*x*x + 5.0*c[5]*x*x*x*x , eps, "gsl_poly_eval_derivs({+1, -2, +3, -4, +5, -6} deriv 1, -12.375)"); gsl_test_rel (dc[2], 2.0*c[2] + 3.0*2.0*c[3]*x + 4.0*3.0*c[4]*x*x + 5.0*4.0*c[5]*x*x*x , eps, "gsl_poly_eval_derivs({+1, -2, +3, -4, +5, -6} deriv 2, +48.0)"); gsl_test_rel (dc[3], 3.0*2.0*c[3] + 4.0*3.0*2.0*c[4]*x + 5.0*4.0*3.0*c[5]*x*x , eps,"gsl_poly_eval_derivs({+1, -2, +3, -4, +5, -6} deriv 3, -174.0)"); gsl_test_rel (dc[4], 4.0*3.0*2.0*c[4] + 5.0*4.0*3.0*2.0*c[5]*x, eps, "gsl_poly_eval_derivs({+1, -2, +3, -4, +5, -6} deriv 4, +480.0)"); gsl_test_rel (dc[5], 5.0*4.0*3.0*2.0*c[5] , eps, "gsl_poly_eval_derivs({+1, -2, +3, -4, +5, -6} deriv 5, -720.0)"); } /* now summarize the results */ exit (gsl_test_summary ()); } gsl/poly/eval.c0000644000175000017500000000175313536674414012016 0ustar eddedd/* poly/eval.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * Complex functions Copyright (C) 2007 Frank Reininghaus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include /* Compile all the inline functions */ #define COMPILE_INLINE_STATIC #include "build.h" #include gsl/poly/deriv.c0000644000175000017500000000304313536674414012172 0ustar eddedd/* poly/eval.c * * Copyright (C) 2009 Marc JOURDAIN * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include int gsl_poly_eval_derivs (const double c[], const size_t lenc, const double x, double res[], const size_t lenres) { size_t i, n, nmax; size_t k, l, lmax; for (i = 0, n = 0, nmax = 0; i < lenres; i++) { if (n < lenc) { res[i] = c[lenc - 1]; nmax = n; n++; } else res[i] = 0.0; } for (i = 0; i < lenc - 1; i++) { k = (lenc - 1) - i; res[0] = ((x * res[0]) + c[k - 1]); lmax = (nmax < k) ? nmax : k - 1; for (l = 1; l <= lmax; l++) { res[l] = ((x * res[l]) + res[l - 1]); } } { double f = 1.0; for (i = 2; i <= nmax; i++) { f *= i; res[i] *= f; } } return GSL_SUCCESS; } gsl/test-driver0000755000175000017500000000761113536674414012135 0ustar eddedd#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2012-06-27.10; # UTC # Copyright (C) 2011-2013 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then estatus=1 fi case $estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gsl/gsl.pc.in0000644000175000017500000000036613536674414011455 0ustar eddeddprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ GSL_CBLAS_LIB=-lgslcblas Name: GSL Description: GNU Scientific Library Version: @VERSION@ Libs: @GSL_LIBS@ ${GSL_CBLAS_LIB} @GSL_LIBM@ @LIBS@ Cflags: @GSL_CFLAGS@ gsl/sys/0000755000175000017500000000000014057135461010541 5ustar eddeddgsl/sys/ldfrexp.c0000644000175000017500000000436113536674414012364 0ustar eddedd/* sys/ldfrexp.c * * Copyright (C) 2002, Gert Van den Eynde * Copyright (C) 2007, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include double gsl_ldexp (const double x, const int e) { int ex; if (x == 0.0) { return x; } { double y = gsl_frexp (x, &ex); double e2 = e + ex, p2; if (e2 >= DBL_MAX_EXP) { y *= pow (2.0, e2 - DBL_MAX_EXP + 1); e2 = DBL_MAX_EXP - 1; } else if (e2 <= DBL_MIN_EXP) { y *= pow (2.0, e2 - DBL_MIN_EXP - 1); e2 = DBL_MIN_EXP + 1; } p2 = pow (2.0, e2); return y * p2; } } double gsl_frexp (const double x, int *e) { if (x == 0.0) { *e = 0; return 0.0; } else if (!gsl_finite (x)) { *e = 0; return x; } else if (fabs (x) >= 0.5 && fabs (x) < 1) /* Handle the common case */ { *e = 0; return x; } else { double ex = ceil (log (fabs (x)) / M_LN2); int ei = (int) ex; double f; /* Prevent underflow and overflow of 2**(-ei) */ if (ei < DBL_MIN_EXP) ei = DBL_MIN_EXP; if (ei > -DBL_MIN_EXP) ei = -DBL_MIN_EXP; f = x * pow (2.0, -ei); if (!gsl_finite (f)) { /* This should not happen */ *e = 0; return f; } while (fabs (f) >= 1.0) { ei++; f /= 2.0; } while (fabs (f) > 0 && fabs (f) < 0.5) { ei--; f *= 2.0; } *e = ei; return f; } } gsl/sys/minmax.c0000644000175000017500000000221313536674414012203 0ustar eddedd/* sys/minmax.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include /* Compile all the inline functions */ #define COMPILE_INLINE_STATIC #include "build.h" #include /* Define some static functions which are always available */ double gsl_max (double a, double b) { return GSL_MAX (a, b); } double gsl_min (double a, double b) { return GSL_MIN (a, b); } gsl/sys/pow_int.c0000644000175000017500000000256213536674414012400 0ustar eddedd/* sys/pow_int.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include /* Compile all the inline functions */ #define COMPILE_INLINE_STATIC #include "build.h" #include double gsl_pow_int(double x, int n) { unsigned int un; if(n < 0) { x = 1.0/x; un = -n; } else { un = n; } return gsl_pow_uint(x, un); } double gsl_pow_uint(double x, unsigned int n) { double value = 1.0; /* repeated squaring method * returns 0.0^0 = 1.0, so continuous in x */ do { if(n & 1) value *= x; /* for n odd */ n >>= 1; x *= x; } while (n); return value; } gsl/sys/Makefile.in0000664000175000017500000011102714057135461012612 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = sys ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslsys_la_LIBADD = am_libgslsys_la_OBJECTS = minmax.lo prec.lo hypot.lo log1p.lo expm1.lo \ coerce.lo invhyp.lo pow_int.lo infnan.lo fdiv.lo fcmp.lo \ ldfrexp.lo libgslsys_la_OBJECTS = $(am_libgslsys_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslsys.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/coerce.Plo ./$(DEPDIR)/expm1.Plo \ ./$(DEPDIR)/fcmp.Plo ./$(DEPDIR)/fdiv.Plo \ ./$(DEPDIR)/hypot.Plo ./$(DEPDIR)/infnan.Plo \ ./$(DEPDIR)/invhyp.Plo ./$(DEPDIR)/ldfrexp.Plo \ ./$(DEPDIR)/log1p.Plo ./$(DEPDIR)/minmax.Plo \ ./$(DEPDIR)/pow_int.Plo ./$(DEPDIR)/prec.Plo \ ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslsys_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslsys_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslsys.la pkginclude_HEADERS = gsl_sys.h libgslsys_la_SOURCES = minmax.c prec.c hypot.c log1p.c expm1.c coerce.c invhyp.c pow_int.c infnan.c fdiv.c fcmp.c ldfrexp.c AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslsys.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la libgslsys.la ../utils/libutils.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu sys/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslsys.la: $(libgslsys_la_OBJECTS) $(libgslsys_la_DEPENDENCIES) $(EXTRA_libgslsys_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslsys_la_OBJECTS) $(libgslsys_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coerce.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expm1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcmp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdiv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hypot.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/infnan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/invhyp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldfrexp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log1p.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minmax.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_int.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prec.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/coerce.Plo -rm -f ./$(DEPDIR)/expm1.Plo -rm -f ./$(DEPDIR)/fcmp.Plo -rm -f ./$(DEPDIR)/fdiv.Plo -rm -f ./$(DEPDIR)/hypot.Plo -rm -f ./$(DEPDIR)/infnan.Plo -rm -f ./$(DEPDIR)/invhyp.Plo -rm -f ./$(DEPDIR)/ldfrexp.Plo -rm -f ./$(DEPDIR)/log1p.Plo -rm -f ./$(DEPDIR)/minmax.Plo -rm -f ./$(DEPDIR)/pow_int.Plo -rm -f ./$(DEPDIR)/prec.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/coerce.Plo -rm -f ./$(DEPDIR)/expm1.Plo -rm -f ./$(DEPDIR)/fcmp.Plo -rm -f ./$(DEPDIR)/fdiv.Plo -rm -f ./$(DEPDIR)/hypot.Plo -rm -f ./$(DEPDIR)/infnan.Plo -rm -f ./$(DEPDIR)/invhyp.Plo -rm -f ./$(DEPDIR)/ldfrexp.Plo -rm -f ./$(DEPDIR)/log1p.Plo -rm -f ./$(DEPDIR)/minmax.Plo -rm -f ./$(DEPDIR)/pow_int.Plo -rm -f ./$(DEPDIR)/prec.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/sys/log1p.c0000644000175000017500000000203313536674414011734 0ustar eddedd/* sys/log1p.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include double gsl_log1p (const double x) { volatile double y, z; y = 1 + x; z = y - 1; return log(y) - (z-x)/y ; /* cancels errors with IEEE arithmetic */ } gsl/sys/ChangeLog0000644000175000017500000001216413536674414012326 0ustar eddedd2011-05-20 Brian Gough * hypot.c (gsl_hypot): handle case where x or y is infinite 2010-10-12 Brian Gough * pow_int.c (gsl_pow_uint): added function gsl_pow_uint(x,n) for unsigned n (larger range) (gsl_pow_int): handle case where n=MIN_INT correctly 2010-02-15 Brian Gough * infnan.c: use #error if gsl_isnan or gsl_finite cannot be defined 2009-08-21 Brian Gough * test.c (main): move x/=2 outside test of while loops because it is (possibly) not volatile. 2008-10-13 Brian Gough * log1p.c: use gsl_sys.h header file * infnan.c: use gsl_sys.h header file * hypot.c: use gsl_sys.h header file * fdiv.c: use gsl_sys.h header file * coerce.c: use gsl_sys.h header file 2008-10-08 Brian Gough * infnan.c (gsl_isinf): handle the case where isinf(-inf) returns +1 2008-07-03 Brian Gough * prec.c: compile inline functions from header here * pow_int.c: compile inline functions from header here * minmax.c: compile inline functions from header here 2008-03-18 Brian Gough * test.c (main): use volatile to avoid extended precision in loop * ldfrexp.c (gsl_ldexp): added a test for x==0 2007-11-04 Brian Gough * ldfrexp.c (gsl_ldexp): handle full range of double precision (gsl_frexp): handle full range of double precision 2007-07-30 Brian Gough * infnan.c (gsl_finite): use isfinite (c99) in preference to finite 2007-07-23 Brian Gough * log1p.c (gsl_log1p): added another volatile to prevent unwanted optimisation 2007-04-03 Brian Gough * infnan.c (gsl_isinf): now return -1 for -Inf instead of +1 * test.c (main): add test for -inf * infnan.c (gsl_finite): always use finite where available (gsl_isnan): always use isnan where available (gsl_isinf): always use isinf where available 2005-11-14 Brian Gough * test.c: added tests for constants 2005-04-05 Brian Gough * infnan.c: added #include ieeefp.h for Solaris 2004-12-22 Brian Gough * infnan.c (gsl_isinf): added missing return type of int 2003-09-02 Brian Gough * infnan.c (gsl_isinf): added fallback for missing isinf (IRIX) 2003-07-24 Brian Gough * invhyp.c: removed duplicate declarations * ldfrexp.c: removed duplicate declarations * expm1.c: removed duplicate declaration of gsl_expm1 2003-01-02 Brian Gough * infnan.c (gsl_isnan): fall back to isnan,isinf,finite/isfinite if available and IEEE comparisons do not work Wed Dec 11 17:29:24 2002 Brian Gough * ldfrexp.c: fix include to use instead of 2002-08-25 Brian Gough * fcmp.c (gsl_fcmp): approximate comparison of floating point numbers using Knuth's algorithm * ldfrexp.c (gsl_ldexp): portable replacement for ldexp() (gsl_frexp): portable replacement for frexp() Wed Jan 16 16:35:58 2002 Brian Gough * test.c (main): only test gsl_isnan, gsl_isinf, gsl_finite functions if they have been compiled in. * infnan.c (gsl_isnan): #ifdef out the gsl_isnan, gsl_isinf and gsl_finite functions if IEEE comparisons for nans and infs are not supported (HAVE_IEEE_COMPARISONS). Tue Aug 21 22:54:08 2001 Brian Gough * test.c (main): use inf/inf to generate a nan, because MSVC optimizes inf-inf to zero Sun May 6 14:28:57 2001 Brian Gough * infnan.c: added gsl_isnan, gsl_isinf, gsl_isreal Sun Feb 25 11:54:21 2001 Brian Gough * invhyp.c: added gsl_acosh, gsl_asinh, gsl_atanh Mon Jan 29 10:53:06 2001 Brian Gough * hypot.c: removed the inline from gsl_hypot, since this is the static version of the function * test.c (main): added an underflow test for gsl_hypot Thu Nov 16 19:28:38 2000 Brian Gough * coerce.c: added functions for coercing values out of registers so they are correctly rounded Sun Oct 22 15:00:24 2000 Brian Gough * expm1.c (gsl_expm1): added gsl_expm1, a substitute for BSD's expm1 Mon Apr 3 16:58:53 2000 Brian Gough * params.c (main): added parentheses around negative output values Tue Mar 21 12:44:07 2000 Brian Gough * hypot.c: added a quick gsl_hypot function for sqrt(x^2+y^2) 1999-07-14 Mark Galassi * prec.c (GSL_MODE_PREC): surrounded this with function with an #ifndef, since it might already be defined as a macro. In truth, this function might be completely unnecessary, since the logic in ../gsl_mode.h seems to cover all cases. Fri Nov 20 17:41:35 1998 Brian Gough * params.c: added program for printing ieee parameters gsl/sys/Makefile.am0000644000175000017500000000065513536674414012612 0ustar eddeddnoinst_LTLIBRARIES = libgslsys.la pkginclude_HEADERS = gsl_sys.h libgslsys_la_SOURCES = minmax.c prec.c hypot.c log1p.c expm1.c coerce.c invhyp.c pow_int.c infnan.c fdiv.c fcmp.c ldfrexp.c AM_CPPFLAGS = -I$(top_srcdir) check_PROGRAMS = test TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslsys.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la libgslsys.la ../utils/libutils.la gsl/sys/invhyp.c0000644000175000017500000000417213536674414012235 0ustar eddedd/* sys/invhyp.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_acosh (const double x) { if (x > 1.0 / GSL_SQRT_DBL_EPSILON) { return log (x) + M_LN2; } else if (x > 2) { return log (2 * x - 1 / (sqrt (x * x - 1) + x)); } else if (x > 1) { double t = x - 1; return log1p (t + sqrt (2 * t + t * t)); } else if (x == 1) { return 0; } else { return GSL_NAN; } } double gsl_asinh (const double x) { double a = fabs (x); double s = (x < 0) ? -1 : 1; if (a > 1 / GSL_SQRT_DBL_EPSILON) { return s * (log (a) + M_LN2); } else if (a > 2) { return s * log (2 * a + 1 / (a + sqrt (a * a + 1))); } else if (a > GSL_SQRT_DBL_EPSILON) { double a2 = a * a; return s * log1p (a + a2 / (1 + sqrt (1 + a2))); } else { return x; } } double gsl_atanh (const double x) { double a = fabs (x); double s = (x < 0) ? -1 : 1; if (a > 1) { return GSL_NAN; } else if (a == 1) { return (x < 0) ? GSL_NEGINF : GSL_POSINF; } else if (a >= 0.5) { return s * 0.5 * log1p (2 * a / (1 - a)); } else if (a > GSL_DBL_EPSILON) { return s * 0.5 * log1p (2 * a + 2 * a * a / (1 - a)); } else { return x; } } gsl/sys/fdiv.c0000644000175000017500000000163113536674414011645 0ustar eddedd/* sys/fdiv.c * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include double gsl_fdiv (const double x, const double y) { return x / y; } gsl/sys/coerce.c0000644000175000017500000000233113536674414012153 0ustar eddedd/* sys/coerce.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include double gsl_coerce_double (const double x) { volatile double y; y = x; return y; } float gsl_coerce_float (const float x) { volatile float y; y = x; return y; } /* The following function is not needed, but is included for completeness */ long double gsl_coerce_long_double (const long double x) { volatile long double y; y = x; return y; } gsl/sys/infnan.c0000644000175000017500000000527213536674414012173 0ustar eddedd/* sys/infnan.c * * Copyright (C) 2001, 2004, 2007, 2010 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #if HAVE_IEEEFP_H #include #endif #include double gsl_nan (void) { return gsl_fdiv (0.0, 0.0); } double gsl_posinf (void) { return gsl_fdiv (+1.0, 0.0); } double gsl_neginf (void) { return gsl_fdiv (-1.0, 0.0); } int gsl_isnan (const double x); int gsl_isinf (const double x); int gsl_finite (const double x); #if defined(_MSC_VER) /* Microsoft Visual C++ */ #include int gsl_isnan (const double x) { return _isnan(x); } int gsl_isinf (const double x) { int fpc = _fpclass(x); if (fpc == _FPCLASS_PINF) return +1; else if (fpc == _FPCLASS_NINF) return -1; else return 0; } int gsl_finite (const double x) { return _finite(x); } #else # if HAVE_DECL_ISFINITE int gsl_finite (const double x) { return isfinite(x); } # elif HAVE_DECL_FINITE int gsl_finite (const double x) { return finite(x); } # elif HAVE_IEEE_COMPARISONS int gsl_finite (const double x) { const double y = x - x; int status = (y == y); return status; } # else # error "cannot define gsl_finite without HAVE_DECL_FINITE or HAVE_IEEE_COMPARISONS" # endif # if HAVE_DECL_ISNAN int gsl_isnan (const double x) { return isnan(x); } #elif HAVE_IEEE_COMPARISONS int gsl_isnan (const double x) { int status = (x != x); return status; } # else # error "cannot define gsl_isnan without HAVE_DECL_ISNAN or HAVE_IEEE_COMPARISONS" # endif # if HAVE_DECL_ISINF int gsl_isinf (const double x) { /* isinf(3): In glibc 2.01 and earlier, isinf() returns a non-zero value (actually: 1) if x is an infinity (positive or negative). (This is all that C99 requires.) */ if (isinf(x)) { return (x > 0) ? 1 : -1; } else { return 0; } } # else int gsl_isinf (const double x) { if (! gsl_finite(x) && ! gsl_isnan(x)) { return (x > 0 ? +1 : -1); } else { return 0; } } # endif #endif gsl/sys/hypot.c0000644000175000017500000000367713536674414012074 0ustar eddedd/* sys/hypot.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough, Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include double gsl_hypot (const double x, const double y) { double xabs = fabs(x) ; double yabs = fabs(y) ; double min, max; /* Follow the optional behavior of the ISO C standard and return +Inf when any of the argument is +-Inf, even if the other is NaN. http://pubs.opengroup.org/onlinepubs/009695399/functions/hypot.html */ if (gsl_isinf(x) || gsl_isinf(y)) { return GSL_POSINF; } if (xabs < yabs) { min = xabs ; max = yabs ; } else { min = yabs ; max = xabs ; } if (min == 0) { return max ; } { double u = min / max ; return max * sqrt (1 + u * u) ; } } double gsl_hypot3(const double x, const double y, const double z) { double xabs = fabs(x); double yabs = fabs(y); double zabs = fabs(z); double w = GSL_MAX(xabs, GSL_MAX(yabs, zabs)); if (w == 0.0) { return (0.0); } else { double r = w * sqrt((xabs / w) * (xabs / w) + (yabs / w) * (yabs / w) + (zabs / w) * (zabs / w)); return r; } } gsl/sys/fcmp.c0000644000175000017500000000320713536674414011643 0ustar eddedd/* sys/gsl_compare.c * * Copyright (C) 2002 Gert Van den Eynde * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * Based on fcmp 1.2.2 Copyright (c) 1998-2000 Theodore C. Belding * University of Michigan Center for the Study of Complex Systems * Ted.Belding@umich.edu * */ #include #include #include int gsl_fcmp (const double x1, const double x2, const double epsilon) { int exponent; double delta, difference; /* Find exponent of largest absolute value */ { double max = (fabs (x1) > fabs (x2)) ? x1 : x2; frexp (max, &exponent); } /* Form a neighborhood of size 2 * delta */ delta = ldexp (epsilon, exponent); difference = x1 - x2; if (difference > delta) /* x1 > x2 */ { return 1; } else if (difference < -delta) /* x1 < x2 */ { return -1; } else /* -delta <= difference <= delta */ { return 0; /* x1 ~=~ x2 */ } } gsl/sys/prec.c0000644000175000017500000000342713536674414011653 0ustar eddedd/* sys/prec.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include /* Compile all the inline functions */ #define COMPILE_INLINE_STATIC #include "build.h" #include #include const double gsl_prec_eps[_GSL_PREC_T_NUM] = { GSL_DBL_EPSILON, GSL_FLT_EPSILON, GSL_SFLT_EPSILON }; const double gsl_prec_sqrt_eps[_GSL_PREC_T_NUM] = { GSL_SQRT_DBL_EPSILON, GSL_SQRT_FLT_EPSILON, GSL_SQRT_SFLT_EPSILON }; const double gsl_prec_root3_eps[_GSL_PREC_T_NUM] = { GSL_ROOT3_DBL_EPSILON, GSL_ROOT3_FLT_EPSILON, GSL_ROOT3_SFLT_EPSILON }; const double gsl_prec_root4_eps[_GSL_PREC_T_NUM] = { GSL_ROOT4_DBL_EPSILON, GSL_ROOT4_FLT_EPSILON, GSL_ROOT4_SFLT_EPSILON }; const double gsl_prec_root5_eps[_GSL_PREC_T_NUM] = { GSL_ROOT5_DBL_EPSILON, GSL_ROOT5_FLT_EPSILON, GSL_ROOT5_SFLT_EPSILON }; const double gsl_prec_root6_eps[_GSL_PREC_T_NUM] = { GSL_ROOT6_DBL_EPSILON, GSL_ROOT6_FLT_EPSILON, GSL_ROOT6_SFLT_EPSILON }; gsl/sys/gsl_sys.h0000644000175000017500000000364213536674414012411 0ustar eddedd/* sys/gsl_sys.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SYS_H__ #define __GSL_SYS_H__ #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS double gsl_log1p (const double x); double gsl_expm1 (const double x); double gsl_hypot (const double x, const double y); double gsl_hypot3 (const double x, const double y, const double z); double gsl_acosh (const double x); double gsl_asinh (const double x); double gsl_atanh (const double x); int gsl_isnan (const double x); int gsl_isinf (const double x); int gsl_finite (const double x); double gsl_nan (void); double gsl_posinf (void); double gsl_neginf (void); double gsl_fdiv (const double x, const double y); double gsl_coerce_double (const double x); float gsl_coerce_float (const float x); long double gsl_coerce_long_double (const long double x); double gsl_ldexp(const double x, const int e); double gsl_frexp(const double x, int * e); int gsl_fcmp (const double x1, const double x2, const double epsilon); __END_DECLS #endif /* __GSL_SYS_H__ */ gsl/sys/test.c0000644000175000017500000004436013536674414011702 0ustar eddedd/* sys/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include int main (void) { double y, y_expected; int e, e_expected; gsl_ieee_env_setup (); /* Test for expm1 */ y = gsl_expm1 (0.0); y_expected = 0.0; gsl_test_rel (y, y_expected, 1e-15, "gsl_expm1(0.0)"); y = gsl_expm1 (1e-10); y_expected = 1.000000000050000000002e-10; gsl_test_rel (y, y_expected, 1e-15, "gsl_expm1(1e-10)"); y = gsl_expm1 (-1e-10); y_expected = -9.999999999500000000017e-11; gsl_test_rel (y, y_expected, 1e-15, "gsl_expm1(-1e-10)"); y = gsl_expm1 (0.1); y_expected = 0.1051709180756476248117078264902; gsl_test_rel (y, y_expected, 1e-15, "gsl_expm1(0.1)"); y = gsl_expm1 (-0.1); y_expected = -0.09516258196404042683575094055356; gsl_test_rel (y, y_expected, 1e-15, "gsl_expm1(-0.1)"); y = gsl_expm1 (10.0); y_expected = 22025.465794806716516957900645284; gsl_test_rel (y, y_expected, 1e-15, "gsl_expm1(10.0)"); y = gsl_expm1 (-10.0); y_expected = -0.99995460007023751514846440848444; gsl_test_rel (y, y_expected, 1e-15, "gsl_expm1(-10.0)"); /* Test for log1p */ y = gsl_log1p (0.0); y_expected = 0.0; gsl_test_rel (y, y_expected, 1e-15, "gsl_log1p(0.0)"); y = gsl_log1p (1e-10); y_expected = 9.9999999995000000000333333333308e-11; gsl_test_rel (y, y_expected, 1e-15, "gsl_log1p(1e-10)"); y = gsl_log1p (0.1); y_expected = 0.095310179804324860043952123280765; gsl_test_rel (y, y_expected, 1e-15, "gsl_log1p(0.1)"); y = gsl_log1p (10.0); y_expected = 2.3978952727983705440619435779651; gsl_test_rel (y, y_expected, 1e-15, "gsl_log1p(10.0)"); /* Test for gsl_hypot */ y = gsl_hypot (0.0, 0.0); y_expected = 0.0; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(0.0, 0.0)"); y = gsl_hypot (1e-10, 1e-10); y_expected = 1.414213562373095048801688e-10; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(1e-10, 1e-10)"); y = gsl_hypot (1e-38, 1e-38); y_expected = 1.414213562373095048801688e-38; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(1e-38, 1e-38)"); y = gsl_hypot (1e-10, -1.0); y_expected = 1.000000000000000000005; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(1e-10, -1)"); y = gsl_hypot (-1.0, 1e-10); y_expected = 1.000000000000000000005; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(-1, 1e-10)"); y = gsl_hypot (1e307, 1e301); y_expected = 1.000000000000499999999999e307; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(1e307, 1e301)"); y = gsl_hypot (1e301, 1e307); y_expected = 1.000000000000499999999999e307; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(1e301, 1e307)"); y = gsl_hypot (1e307, 1e307); y_expected = 1.414213562373095048801688e307; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(1e307, 1e307)"); /* Test +-Inf, finite */ y = gsl_hypot (GSL_POSINF, 1.2); y_expected = GSL_POSINF; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(GSL_POSINF, 1.2)"); y = gsl_hypot (GSL_NEGINF, 1.2); y_expected = GSL_POSINF; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(GSL_NEGINF, 1.2)"); y = gsl_hypot (1.2, GSL_POSINF); y_expected = GSL_POSINF; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(1.2, GSL_POSINF)"); y = gsl_hypot (1.2, GSL_NEGINF); y_expected = GSL_POSINF; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(1.2, GSL_NEGINF)"); /* Test NaN, finite */ y = gsl_hypot (GSL_NAN, 1.2); y_expected = GSL_NAN; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(GSL_NAN, 1.2)"); y = gsl_hypot (1.2, GSL_NAN); y_expected = GSL_NAN; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(1.2, GSL_NAN)"); /* Test NaN, NaN */ y = gsl_hypot (GSL_NAN, GSL_NAN); y_expected = GSL_NAN; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(GSL_NAN, GSL_NAN)"); /* Test +Inf, NaN */ y = gsl_hypot (GSL_POSINF, GSL_NAN); y_expected = GSL_POSINF; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(GSL_POSINF, GSL_NAN)"); /* Test -Inf, NaN */ y = gsl_hypot (GSL_NEGINF, GSL_NAN); y_expected = GSL_POSINF; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(GSL_NEGINF, GSL_NAN)"); /* Test NaN, +Inf */ y = gsl_hypot (GSL_NAN, GSL_POSINF); y_expected = GSL_POSINF; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(GSL_NAN, GSL_POSINF)"); /* Test NaN, -Inf */ y = gsl_hypot (GSL_NAN, GSL_NEGINF); y_expected = GSL_POSINF; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot(GSL_NAN, GSL_NEGINF)"); /* Test for gsl_hypot3 */ y = gsl_hypot3 (0.0, 0.0, 0.0); y_expected = 0.0; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot3(0.0, 0.0, 0.0)"); y = gsl_hypot3 (1e-10, 1e-10, 1e-10); y_expected = 1.732050807568877293527446e-10; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot3(1e-10, 1e-10, 1e-10)"); y = gsl_hypot3 (1e-38, 1e-38, 1e-38); y_expected = 1.732050807568877293527446e-38; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot3(1e-38, 1e-38, 1e-38)"); y = gsl_hypot3 (1e-10, 1e-10, -1.0); y_expected = 1.000000000000000000099; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot3(1e-10, 1e-10, -1)"); y = gsl_hypot3 (1e-10, -1.0, 1e-10); y_expected = 1.000000000000000000099; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot3(1e-10, -1, 1e-10)"); y = gsl_hypot3 (-1.0, 1e-10, 1e-10); y_expected = 1.000000000000000000099; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot3(-1, 1e-10, 1e-10)"); y = gsl_hypot3 (1e307, 1e301, 1e301); y_expected = 1.0000000000009999999999995e307; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot3(1e307, 1e301, 1e301)"); y = gsl_hypot3 (1e307, 1e307, 1e307); y_expected = 1.732050807568877293527446e307; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot3(1e307, 1e307, 1e307)"); y = gsl_hypot3 (1e307, 1e-307, 1e-307); y_expected = 1.0e307; gsl_test_rel (y, y_expected, 1e-15, "gsl_hypot3(1e307, 1e-307, 1e-307)"); /* Test for acosh */ y = gsl_acosh (1.0); y_expected = 0.0; gsl_test_rel (y, y_expected, 1e-15, "gsl_acosh(1.0)"); y = gsl_acosh (1.1); y_expected = 4.435682543851151891329110663525e-1; gsl_test_rel (y, y_expected, 1e-15, "gsl_acosh(1.1)"); y = gsl_acosh (10.0); y_expected = 2.9932228461263808979126677137742e0; gsl_test_rel (y, y_expected, 1e-15, "gsl_acosh(10.0)"); y = gsl_acosh (1e10); y_expected = 2.3718998110500402149594646668302e1; gsl_test_rel (y, y_expected, 1e-15, "gsl_acosh(1e10)"); /* Test for asinh */ y = gsl_asinh (0.0); y_expected = 0.0; gsl_test_rel (y, y_expected, 1e-15, "gsl_asinh(0.0)"); y = gsl_asinh (1e-10); y_expected = 9.9999999999999999999833333333346e-11; gsl_test_rel (y, y_expected, 1e-15, "gsl_asinh(1e-10)"); y = gsl_asinh (-1e-10); y_expected = -9.9999999999999999999833333333346e-11; gsl_test_rel (y, y_expected, 1e-15, "gsl_asinh(1e-10)"); y = gsl_asinh (0.1); y_expected = 9.983407889920756332730312470477e-2; gsl_test_rel (y, y_expected, 1e-15, "gsl_asinh(0.1)"); y = gsl_asinh (-0.1); y_expected = -9.983407889920756332730312470477e-2; gsl_test_rel (y, y_expected, 1e-15, "gsl_asinh(-0.1)"); y = gsl_asinh (1.0); y_expected = 8.8137358701954302523260932497979e-1; gsl_test_rel (y, y_expected, 1e-15, "gsl_asinh(1.0)"); y = gsl_asinh (-1.0); y_expected = -8.8137358701954302523260932497979e-1; gsl_test_rel (y, y_expected, 1e-15, "gsl_asinh(-1.0)"); y = gsl_asinh (10.0); y_expected = 2.9982229502979697388465955375965e0; gsl_test_rel (y, y_expected, 1e-15, "gsl_asinh(10)"); y = gsl_asinh (-10.0); y_expected = -2.9982229502979697388465955375965e0; gsl_test_rel (y, y_expected, 1e-15, "gsl_asinh(-10)"); y = gsl_asinh (1e10); y_expected = 2.3718998110500402149599646668302e1; gsl_test_rel (y, y_expected, 1e-15, "gsl_asinh(1e10)"); y = gsl_asinh (-1e10); y_expected = -2.3718998110500402149599646668302e1; gsl_test_rel (y, y_expected, 1e-15, "gsl_asinh(-1e10)"); /* Test for atanh */ y = gsl_atanh (0.0); y_expected = 0.0; gsl_test_rel (y, y_expected, 1e-15, "gsl_atanh(0.0)"); y = gsl_atanh (1e-20); y_expected = 1e-20; gsl_test_rel (y, y_expected, 1e-15, "gsl_atanh(1e-20)"); y = gsl_atanh (-1e-20); y_expected = -1e-20; gsl_test_rel (y, y_expected, 1e-15, "gsl_atanh(-1e-20)"); y = gsl_atanh (0.1); y_expected = 1.0033534773107558063572655206004e-1; gsl_test_rel (y, y_expected, 1e-15, "gsl_atanh(0.1)"); y = gsl_atanh (-0.1); y_expected = -1.0033534773107558063572655206004e-1; gsl_test_rel (y, y_expected, 1e-15, "gsl_atanh(-0.1)"); y = gsl_atanh (0.9); y_expected = 1.4722194895832202300045137159439e0; gsl_test_rel (y, y_expected, 1e-15, "gsl_atanh(0.9)"); y = gsl_atanh (-0.9); y_expected = -1.4722194895832202300045137159439e0; gsl_test_rel (y, y_expected, 1e-15, "gsl_atanh(0.9)"); /* Test for pow_int */ y = gsl_pow_2 (-3.14); y_expected = pow (-3.14, 2.0); gsl_test_rel (y, y_expected, 1e-15, "gsl_pow_2(-3.14)"); y = gsl_pow_3 (-3.14); y_expected = pow (-3.14, 3.0); gsl_test_rel (y, y_expected, 1e-15, "gsl_pow_3(-3.14)"); y = gsl_pow_4 (-3.14); y_expected = pow (-3.14, 4.0); gsl_test_rel (y, y_expected, 1e-15, "gsl_pow_4(-3.14)"); y = gsl_pow_5 (-3.14); y_expected = pow (-3.14, 5.0); gsl_test_rel (y, y_expected, 1e-15, "gsl_pow_5(-3.14)"); y = gsl_pow_6 (-3.14); y_expected = pow (-3.14, 6.0); gsl_test_rel (y, y_expected, 1e-15, "gsl_pow_6(-3.14)"); y = gsl_pow_7 (-3.14); y_expected = pow (-3.14, 7.0); gsl_test_rel (y, y_expected, 1e-15, "gsl_pow_7(-3.14)"); y = gsl_pow_8 (-3.14); y_expected = pow (-3.14, 8.0); gsl_test_rel (y, y_expected, 1e-15, "gsl_pow_8(-3.14)"); y = gsl_pow_9 (-3.14); y_expected = pow (-3.14, 9.0); gsl_test_rel (y, y_expected, 1e-15, "gsl_pow_9(-3.14)"); { int n; for (n = -9; n < 10; n++) { y = gsl_pow_int (-3.14, n); y_expected = pow (-3.14, n); gsl_test_rel (y, y_expected, 1e-15, "gsl_pow_int(-3.14,%d)", n); } } { unsigned int n; for (n = 0; n < 10; n++) { y = gsl_pow_uint (-3.14, n); y_expected = pow (-3.14, n); gsl_test_rel (y, y_expected, 1e-15, "gsl_pow_uint(-3.14,%d)", n); } } /* Test case for n at INT_MAX, INT_MIN */ { double u = 1.0000001; int n = INT_MAX; y = gsl_pow_int (u, n); y_expected = pow (u, n); gsl_test_rel (y, y_expected, 1e-6, "gsl_pow_int(%.7f,%d)", u, n); n = INT_MIN; y = gsl_pow_int (u, n); y_expected = pow (u, n); gsl_test_rel (y, y_expected, 1e-6, "gsl_pow_int(%.7f,%d)", u, n); } /* Test for ldexp */ y = gsl_ldexp (M_PI, -2); y_expected = M_PI_4; gsl_test_rel (y, y_expected, 1e-15, "gsl_ldexp(pi,-2)"); y = gsl_ldexp (1.0, 2); y_expected = 4.000000; gsl_test_rel (y, y_expected, 1e-15, "gsl_ldexp(1.0,2)"); y = gsl_ldexp (0.0, 2); y_expected = 0.0; gsl_test_rel (y, y_expected, 1e-15, "gsl_ldexp(0.0,2)"); y = gsl_ldexp (9.999999999999998890e-01, 1024); y_expected = GSL_DBL_MAX; gsl_test_rel (y, y_expected, 1e-15, "gsl_ldexp DBL_MAX"); y = gsl_ldexp (1e308, -2000); y_expected = 8.7098098162172166755761e-295; gsl_test_rel (y, y_expected, 1e-15, "gsl_ldexp(1e308,-2000)"); y = gsl_ldexp (GSL_DBL_MIN, 2000); y_expected = 2.554675596204441378334779940e294; gsl_test_rel (y, y_expected, 1e-15, "gsl_ldexp(DBL_MIN,2000)"); /* Test subnormals */ { int i = 0; volatile double x = GSL_DBL_MIN; y_expected = 2.554675596204441378334779940e294; x /= 2; while (x > 0) { i++ ; y = gsl_ldexp (x, 2000 + i); gsl_test_rel (y, y_expected, 1e-15, "gsl_ldexp(DBL_MIN/2**%d,%d)",i,2000+i); x /= 2; } } /* Test for frexp */ y = gsl_frexp (0.0, &e); y_expected = 0; e_expected = 0; gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(0) fraction"); gsl_test_int (e, e_expected, "gsl_frexp(0) exponent"); y = gsl_frexp (M_PI, &e); y_expected = M_PI_4; e_expected = 2; gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(pi) fraction"); gsl_test_int (e, e_expected, "gsl_frexp(pi) exponent"); y = gsl_frexp (2.0, &e); y_expected = 0.5; e_expected = 2; gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(2.0) fraction"); gsl_test_int (e, e_expected, "gsl_frexp(2.0) exponent"); y = gsl_frexp (1.0 / 4.0, &e); y_expected = 0.5; e_expected = -1; gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(0.25) fraction"); gsl_test_int (e, e_expected, "gsl_frexp(0.25) exponent"); y = gsl_frexp (1.0 / 4.0 - 4.0 * GSL_DBL_EPSILON, &e); y_expected = 0.999999999999996447; e_expected = -2; gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(0.25-eps) fraction"); gsl_test_int (e, e_expected, "gsl_frexp(0.25-eps) exponent"); y = gsl_frexp (GSL_DBL_MAX, &e); y_expected = 9.999999999999998890e-01; e_expected = 1024; gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(DBL_MAX) fraction"); gsl_test_int (e, e_expected, "gsl_frexp(DBL_MAX) exponent"); y = gsl_frexp (-GSL_DBL_MAX, &e); y_expected = -9.999999999999998890e-01; e_expected = 1024; gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(-DBL_MAX) fraction"); gsl_test_int (e, e_expected, "gsl_frexp(-DBL_MAX) exponent"); y = gsl_frexp (GSL_DBL_MIN, &e); y_expected = 0.5; e_expected = -1021; gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(DBL_MIN) fraction"); gsl_test_int (e, e_expected, "gsl_frexp(DBL_MIN) exponent"); y = gsl_frexp (-GSL_DBL_MIN, &e); y_expected = -0.5; e_expected = -1021; gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(-DBL_MIN) fraction"); gsl_test_int (e, e_expected, "gsl_frexp(-DBL_MIN) exponent"); /* Test subnormals */ { int i = 0; volatile double x = GSL_DBL_MIN; y_expected = 0.5; e_expected = -1021; x /= 2; while (x > 0) { e_expected--; i++ ; y = gsl_frexp (x, &e); gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(DBL_MIN/2**%d) fraction",i); gsl_test_int (e, e_expected, "gsl_frexp(DBL_MIN/2**%d) exponent", i); x /= 2; } } /* Test for approximate floating point comparison */ { double x, y; int i; x = M_PI; y = 22.0 / 7.0; /* test the basic function */ for (i = 0; i < 10; i++) { double tol = pow (10, -i); int res = gsl_fcmp (x, y, tol); gsl_test_int (res, -(i >= 4), "gsl_fcmp(%.5f,%.5f,%g)", x, y, tol); } for (i = 0; i < 10; i++) { double tol = pow (10, -i); int res = gsl_fcmp (y, x, tol); gsl_test_int (res, (i >= 4), "gsl_fcmp(%.5f,%.5f,%g)", y, x, tol); } } #if HAVE_IEEE_COMPARISONS /* Test for isinf, isnan, finite */ { double zero, one, inf, nan; int s; zero = 0.0; one = 1.0; inf = exp (1.0e10); nan = inf / inf; s = gsl_isinf (zero); gsl_test_int (s, 0, "gsl_isinf(0)"); s = gsl_isinf (one); gsl_test_int (s, 0, "gsl_isinf(1)"); s = gsl_isinf (inf); gsl_test_int (s, 1, "gsl_isinf(inf)"); s = gsl_isinf (-inf); gsl_test_int (s, -1, "gsl_isinf(-inf)"); s = gsl_isinf (nan); gsl_test_int (s, 0, "gsl_isinf(nan)"); s = gsl_isnan (zero); gsl_test_int (s, 0, "gsl_isnan(0)"); s = gsl_isnan (one); gsl_test_int (s, 0, "gsl_isnan(1)"); s = gsl_isnan (inf); gsl_test_int (s, 0, "gsl_isnan(inf)"); s = gsl_isnan (-inf); gsl_test_int (s, 0, "gsl_isnan(-inf)"); s = gsl_isnan (nan) != 0; gsl_test_int (s, 1, "gsl_isnan(nan)"); s = gsl_finite (zero); gsl_test_int (s, 1, "gsl_finite(0)"); s = gsl_finite (one); gsl_test_int (s, 1, "gsl_finite(1)"); s = gsl_finite (inf); gsl_test_int (s, 0, "gsl_finite(inf)"); s = gsl_finite (-inf); gsl_test_int (s, 0, "gsl_finite(-inf)"); s = gsl_finite (nan); gsl_test_int (s, 0, "gsl_finite(nan)"); } #endif { double x = gsl_fdiv (2.0, 3.0); gsl_test_rel (x, 2.0 / 3.0, 4 * GSL_DBL_EPSILON, "gsl_fdiv(2,3)"); } /* Test constants in gsl_math.h */ { double x = log(M_E); gsl_test_rel (x, 1.0, 4 * GSL_DBL_EPSILON, "ln(M_E)"); } { double x=pow(2.0,M_LOG2E); gsl_test_rel (x, exp(1.0), 4 * GSL_DBL_EPSILON, "2^M_LOG2E"); } { double x=pow(10.0,M_LOG10E); gsl_test_rel (x, exp(1.0), 4 * GSL_DBL_EPSILON, "10^M_LOG10E"); } { double x=pow(M_SQRT2, 2.0); gsl_test_rel (x, 2.0, 4 * GSL_DBL_EPSILON, "M_SQRT2^2"); } { double x=pow(M_SQRT1_2, 2.0); gsl_test_rel (x, 1.0/2.0, 4 * GSL_DBL_EPSILON, "M_SQRT1_2"); } { double x=pow(M_SQRT3, 2.0); gsl_test_rel (x, 3.0, 4 * GSL_DBL_EPSILON, "M_SQRT3^2"); } { double x = M_PI; gsl_test_rel (x, 3.1415926535897932384626433832795, 4 * GSL_DBL_EPSILON, "M_PI"); } { double x = 2 * M_PI_2; gsl_test_rel (x, M_PI, 4 * GSL_DBL_EPSILON, "2*M_PI_2"); } { double x = 4 * M_PI_4; gsl_test_rel (x, M_PI, 4 * GSL_DBL_EPSILON, "4*M_PI_4"); } { double x = pow(M_SQRTPI, 2.0); gsl_test_rel (x, M_PI, 4 * GSL_DBL_EPSILON, "M_SQRTPI^2"); } { double x = pow(M_2_SQRTPI, 2.0); gsl_test_rel (x, 4/M_PI, 4 * GSL_DBL_EPSILON, "M_SQRTPI^2"); } { double x = M_1_PI; gsl_test_rel (x, 1/M_PI, 4 * GSL_DBL_EPSILON, "M_1_SQRTPI"); } { double x = M_2_PI; gsl_test_rel (x, 2.0/M_PI, 4 * GSL_DBL_EPSILON, "M_2_PI"); } { double x = exp(M_LN10); gsl_test_rel (x, 10, 4 * GSL_DBL_EPSILON, "exp(M_LN10)"); } { double x = exp(M_LN2); gsl_test_rel (x, 2, 4 * GSL_DBL_EPSILON, "exp(M_LN2)"); } { double x = exp(M_LNPI); gsl_test_rel (x, M_PI, 4 * GSL_DBL_EPSILON, "exp(M_LNPI)"); } { double x = M_EULER; gsl_test_rel (x, 0.5772156649015328606065120900824, 4 * GSL_DBL_EPSILON, "M_EULER"); } exit (gsl_test_summary ()); } gsl/sys/expm1.c0000644000175000017500000000253713536674414011755 0ustar eddedd/* sys/expm1.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include double gsl_expm1 (const double x) { /* FIXME: this should be improved */ if (fabs(x) < M_LN2) { /* Compute the taylor series S = x + (1/2!) x^2 + (1/3!) x^3 + ... */ double i = 1.0; double sum = x; double term = x / 1.0; do { i++ ; term *= x/i; sum += term; } while (fabs(term) > fabs(sum) * GSL_DBL_EPSILON) ; return sum ; } else { return exp(x) - 1; } } gsl/cheb/0000755000175000017500000000000014057135461010624 5ustar eddeddgsl/cheb/Makefile.in0000664000175000017500000010602414057135461012676 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = cheb ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslcheb_la_LIBADD = am_libgslcheb_la_OBJECTS = deriv.lo eval.lo init.lo integ.lo libgslcheb_la_OBJECTS = $(am_libgslcheb_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslcheb.la ../ieee-utils/libgslieeeutils.la \ ../test/libgsltest.la ../sys/libgslsys.la ../err/libgslerr.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/deriv.Plo ./$(DEPDIR)/eval.Plo \ ./$(DEPDIR)/init.Plo ./$(DEPDIR)/integ.Plo ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslcheb_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslcheb_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslcheb.la pkginclude_HEADERS = gsl_chebyshev.h AM_CPPFLAGS = -I$(top_srcdir) libgslcheb_la_SOURCES = deriv.c eval.c init.c integ.c TESTS = $(check_PROGRAMS) test_LDADD = libgslcheb.la ../ieee-utils/libgslieeeutils.la ../test/libgsltest.la ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la test_SOURCES = test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cheb/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu cheb/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslcheb.la: $(libgslcheb_la_OBJECTS) $(libgslcheb_la_DEPENDENCIES) $(EXTRA_libgslcheb_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslcheb_la_OBJECTS) $(libgslcheb_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deriv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eval.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/integ.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/deriv.Plo -rm -f ./$(DEPDIR)/eval.Plo -rm -f ./$(DEPDIR)/init.Plo -rm -f ./$(DEPDIR)/integ.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/deriv.Plo -rm -f ./$(DEPDIR)/eval.Plo -rm -f ./$(DEPDIR)/init.Plo -rm -f ./$(DEPDIR)/integ.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/cheb/ChangeLog0000644000175000017500000000415413536674414012411 0ustar eddedd2010-03-12 Brian Gough * deriv.c (gsl_cheb_calc_deriv): shift loop variable to avoid unsigned integer wraparound when n < 3 2009-07-09 Brian Gough * init.c (gsl_cheb_free): handle NULL argument in free 2008-11-18 Brian Gough * gsl_chebyshev.h: added auxiliary functions * init.c (gsl_cheb_order, gsl_cheb_size, gsl_cheb_coeffs): added auxiliary functions 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2007-01-29 Brian Gough * eval.c (gsl_cheb_eval_mode_e): compute error consistently with other routines 2004-12-29 Brian Gough * gsl_chebyshev.h: added const to declaration of gsl_cheb_eval_mode to match definition 2004-12-24 Brian Gough * eval.c (gsl_cheb_eval_n_err): use eval_order instead of cs->order for error estimate 2004-12-23 Brian Gough * eval.c (gsl_cheb_eval_mode): added missing function 2004-08-27 Brian Gough * test.c (main): make the hard-coded tolerances a variable, ftol 2003-06-09 Brian Gough * test.c (main): added some tests for the coefficients 2003-02-09 Brian Gough * gsl_chebyshev.h: added missing #include for gsl_math (to declare gsl_function) fixes Debian Bug#179665 Fri May 24 19:23:47 2002 Brian Gough * init.c (gsl_cheb_free): added missing free() for cs->f Fri Aug 24 19:18:23 2001 Brian Gough * test.c (main): renamed fsin to f_sin to avoid conflicts with irix math libs. Sun May 6 09:49:28 2001 Brian Gough * eval.c (gsl_cheb_eval_err): take roundoff into account when computing evaluation error (important when result is near zero). (gsl_cheb_eval_n_err): ditto Tue Apr 24 17:08:29 2001 Brian Gough * made deriv/integ functions thread safe * split out from specfunc directory gsl/cheb/Makefile.am0000644000175000017500000000057413536674414012675 0ustar eddeddnoinst_LTLIBRARIES = libgslcheb.la pkginclude_HEADERS = gsl_chebyshev.h AM_CPPFLAGS = -I$(top_srcdir) libgslcheb_la_SOURCES = deriv.c eval.c init.c integ.c TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_LDADD = libgslcheb.la ../ieee-utils/libgslieeeutils.la ../test/libgsltest.la ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la test_SOURCES = test.c gsl/cheb/integ.c0000644000175000017500000000346513536674414012115 0ustar eddedd/* cheb/integ.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include int gsl_cheb_calc_integ(gsl_cheb_series * integ, const gsl_cheb_series * f) { const size_t n = f->order + 1; const double con = 0.25 * (f->b - f->a); if(integ->order != f->order) { GSL_ERROR ("order of chebyshev series must be equal", GSL_ENOMEM); } /* set the other parameters in the chebyshev struct */ integ->a = f->a; integ->b = f->b; /* FIXME: should probably set integ->f[] as well */ if(n == 1) { integ->c[0] = 0.; } else if(n == 2) { integ->c[1] = con * f->c[0]; integ->c[0] = 2.0 * integ->c[1]; } else { double sum = 0.0; double fac = 1.0; size_t i; for(i=1; i<=n-2; i++) { integ->c[i] = con * (f->c[i-1] - f->c[i+1])/((double)i); sum += fac * integ->c[i]; fac = -fac; } integ->c[n-1] = con * f->c[n-2]/(n-1.0); sum += fac * integ->c[n-1]; integ->c[0] = 2.0 * sum; } return GSL_SUCCESS; } gsl/cheb/gsl_chebyshev.h0000664000175000017500000001066114057135461013630 0ustar eddedd/* cheb/gsl_chebyshev.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_CHEBYSHEV_H__ #define __GSL_CHEBYSHEV_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* data for a Chebyshev series over a given interval */ struct gsl_cheb_series_struct { double * c; /* coefficients */ size_t order; /* order of expansion */ double a; /* lower interval point */ double b; /* upper interval point */ /* The following exists (mostly) for the benefit * of the implementation. It is an effective single * precision order, for use in single precision * evaluation. Users can use it if they like, but * only they know how to calculate it, since it is * specific to the approximated function. By default, * order_sp = order. * It is used explicitly only by the gsl_cheb_eval_mode * functions, which are not meant for casual use. */ size_t order_sp; /* Additional elements not used by specfunc */ double * f; /* function evaluated at chebyschev points */ }; typedef struct gsl_cheb_series_struct gsl_cheb_series; /* Calculate a Chebyshev series of specified order over * a specified interval, for a given function. * Return 0 on failure. */ gsl_cheb_series * gsl_cheb_alloc(const size_t order); /* Free a Chebyshev series previously calculated with gsl_cheb_alloc(). */ void gsl_cheb_free(gsl_cheb_series * cs); /* Calculate a Chebyshev series using the storage provided. * Uses the interval (a,b) and the order with which it * was initially created. * */ int gsl_cheb_init(gsl_cheb_series * cs, const gsl_function * func, const double a, const double b); /* Return the order, size of coefficient array and coefficient array ptr */ size_t gsl_cheb_order (const gsl_cheb_series * cs); size_t gsl_cheb_size (const gsl_cheb_series * cs); double *gsl_cheb_coeffs (const gsl_cheb_series * cs); /* Evaluate a Chebyshev series at a given point. * No errors can occur for a struct obtained from gsl_cheb_new(). */ double gsl_cheb_eval(const gsl_cheb_series * cs, const double x); int gsl_cheb_eval_err(const gsl_cheb_series * cs, const double x, double * result, double * abserr); /* Evaluate a Chebyshev series at a given point, to (at most) the given order. * No errors can occur for a struct obtained from gsl_cheb_new(). */ double gsl_cheb_eval_n(const gsl_cheb_series * cs, const size_t order, const double x); int gsl_cheb_eval_n_err(const gsl_cheb_series * cs, const size_t order, const double x, double * result, double * abserr); /* Evaluate a Chebyshev series at a given point, using the default * order for double precision mode(s) and the single precision * order for other modes. * No errors can occur for a struct obtained from gsl_cheb_new(). */ double gsl_cheb_eval_mode(const gsl_cheb_series * cs, const double x, gsl_mode_t mode); int gsl_cheb_eval_mode_e(const gsl_cheb_series * cs, const double x, gsl_mode_t mode, double * result, double * abserr); /* Compute the derivative of a Chebyshev series. */ int gsl_cheb_calc_deriv(gsl_cheb_series * deriv, const gsl_cheb_series * cs); /* Compute the integral of a Chebyshev series. The * integral is fixed by the condition that it equals zero at * the left end-point, ie it is precisely * Integrate[cs(t; a,b), {t, a, x}] */ int gsl_cheb_calc_integ(gsl_cheb_series * integ, const gsl_cheb_series * cs); __END_DECLS #endif /* __GSL_CHEBYSHEV_H__ */ gsl/cheb/init.c0000644000175000017500000000540713536674414011750 0ustar eddedd/* cheb/init.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * Copyright (C) 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /*-*-*-*-*-*-*-*-*-*-*-* Allocators *-*-*-*-*-*-*-*-*-*-*-*/ gsl_cheb_series * gsl_cheb_alloc(const size_t order) { gsl_cheb_series * cs = (gsl_cheb_series *) malloc(sizeof(gsl_cheb_series)); if(cs == 0) { GSL_ERROR_VAL("failed to allocate gsl_cheb_series struct", GSL_ENOMEM, 0); } cs->order = order; cs->order_sp = order; cs->c = (double *) malloc((order+1) * sizeof(double)); if(cs->c == 0) { GSL_ERROR_VAL("failed to allocate cheb coefficients", GSL_ENOMEM, 0); } cs->f = (double *) malloc((order+1) * sizeof(double)); if(cs->f == 0) { GSL_ERROR_VAL("failed to allocate cheb function space", GSL_ENOMEM, 0); } return cs; } void gsl_cheb_free(gsl_cheb_series * cs) { RETURN_IF_NULL (cs); free(cs->f); free(cs->c); free(cs); } /*-*-*-*-*-*-*-*-*-*-*-* Initializer *-*-*-*-*-*-*-*-*-*-*-*/ int gsl_cheb_init(gsl_cheb_series * cs, const gsl_function *func, const double a, const double b) { size_t k, j; if(a >= b) { GSL_ERROR_VAL("null function interval [a,b]", GSL_EDOM, 0); } cs->a = a; cs->b = b; /* cs->err = 0.0; */ { double bma = 0.5 * (cs->b - cs->a); double bpa = 0.5 * (cs->b + cs->a); double fac = 2.0/(cs->order +1.0); for(k = 0; k<=cs->order; k++) { double y = cos(M_PI * (k+0.5)/(cs->order+1)); cs->f[k] = GSL_FN_EVAL(func, (y*bma + bpa)); } for(j = 0; j<=cs->order; j++) { double sum = 0.0; for(k = 0; k<=cs->order; k++) sum += cs->f[k]*cos(M_PI * j*(k+0.5)/(cs->order+1)); cs->c[j] = fac * sum; } } return GSL_SUCCESS; } size_t gsl_cheb_order (const gsl_cheb_series * cs) { return cs->order; } size_t gsl_cheb_size (const gsl_cheb_series * cs) { return (cs->order + 1); } double * gsl_cheb_coeffs (const gsl_cheb_series * cs) { return cs->c; } gsl/cheb/TODO0000644000175000017500000000015313536674414011322 0ustar eddedd# -*- org -*- #+CATEGORY: cheb Provide a way to save/restore coefficients, or access the coefficient data.gsl/cheb/test.c0000644000175000017500000001744013536674414011764 0ustar eddedd/* cheb/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include double f_T0 (double x, void * p) { p = 0; return 1.0; } double f_T1 (double x, void * p) { p = 0; return x; } double f_T2 (double x, void * p) { p = 0; return 2*x*x - 1; } double f_sin (double x, void * p) { p = 0; return sin(x); } double f_DP (double x, void * p) { p = 0; return 2.0; } double f_P (double x, void * p) { p = 0; return 2.0*x + 3.0; } double f_IP1 (double x, void * p) { p = 0; return 30*(x+5.0)/10.0; /* first order approximation to integral over -5,5 */ } double f_IP2 (double x, void * p) { p = 0; return x*x + 3*x - 10.0; } void test_dim (const size_t n, const double a, const double b, gsl_function * F, gsl_function * DF, gsl_function *IF) { double tol = 100.0 * GSL_DBL_EPSILON; double x; gsl_cheb_series * cs = gsl_cheb_alloc(n); gsl_cheb_series * csd = gsl_cheb_alloc(n); gsl_cheb_series * csi = gsl_cheb_alloc(n); gsl_cheb_init(cs, F, a, b); for(x=a; xc, "gsl_cheb_coeffs"); } for (i = 0; iorder; i++) { double c_exp = (i == 0) ? 2.0 : 0.0; gsl_test_abs (cs->c[i], c_exp, tol, "c[%d] for T_0(x)", i); } gsl_cheb_init(cs, &F_T1, -1.0, 1.0); for (i = 0; iorder; i++) { double c_exp = (i == 1) ? 1.0 : 0.0; gsl_test_abs (cs->c[i], c_exp, tol, "c[%d] for T_1(x)", i); } gsl_cheb_init(cs, &F_T2, -1.0, 1.0); for (i = 0; iorder; i++) { double c_exp = (i == 2) ? 1.0 : 0.0; gsl_test_abs (cs->c[i], c_exp, tol, "c[%d] for T_2(x)", i); } gsl_cheb_init(cs, &F_sin, -M_PI, M_PI); gsl_test_abs (cs->c[0], 0.0, tol, "c[0] for F_sin(x)"); gsl_test_abs (cs->c[1], 5.69230686359506e-01, tol, "c[1] for F_sin(x)"); gsl_test_abs (cs->c[2], 0.0, tol, "c[2] for F_sin(x)"); gsl_test_abs (cs->c[3], -6.66916672405979e-01, tol, "c[3] for F_sin(x)"); gsl_test_abs (cs->c[4], 0.0, tol, "c[4] for F_sin(x)"); gsl_test_abs (cs->c[5], 1.04282368734237e-01, tol, "c[5] for F_sin(x)"); for(x=-M_PI; x #include #include #include #include /* For efficiency there are separate implementations of each of these functions */ double gsl_cheb_eval (const gsl_cheb_series * cs, const double x) { size_t i; double d1 = 0.0; double d2 = 0.0; double y = (2.0 * x - cs->a - cs->b) / (cs->b - cs->a); double y2 = 2.0 * y; for (i = cs->order; i >= 1; i--) { double temp = d1; d1 = y2 * d1 - d2 + cs->c[i]; d2 = temp; } return y * d1 - d2 + 0.5 * cs->c[0]; } double gsl_cheb_eval_n (const gsl_cheb_series * cs, const size_t n, const double x) { size_t i; double d1 = 0.0; double d2 = 0.0; size_t eval_order = GSL_MIN (n, cs->order); double y = (2.0 * x - cs->a - cs->b) / (cs->b - cs->a); double y2 = 2.0 * y; for (i = eval_order; i >= 1; i--) { double temp = d1; d1 = y2 * d1 - d2 + cs->c[i]; d2 = temp; } return y * d1 - d2 + 0.5 * cs->c[0]; } int gsl_cheb_eval_err (const gsl_cheb_series * cs, const double x, double *result, double *abserr) { size_t i; double d1 = 0.0; double d2 = 0.0; double y = (2. * x - cs->a - cs->b) / (cs->b - cs->a); double y2 = 2.0 * y; double absc = 0.0; for (i = cs->order; i >= 1; i--) { double temp = d1; d1 = y2 * d1 - d2 + cs->c[i]; d2 = temp; } *result = y * d1 - d2 + 0.5 * cs->c[0]; /* Estimate cumulative numerical error */ for (i = 0; i <= cs->order; i++) { absc += fabs(cs->c[i]); } /* Combine truncation error and numerical error */ *abserr = fabs (cs->c[cs->order]) + absc * GSL_DBL_EPSILON; return GSL_SUCCESS; } int gsl_cheb_eval_n_err (const gsl_cheb_series * cs, const size_t n, const double x, double *result, double *abserr) { size_t i; double d1 = 0.0; double d2 = 0.0; double y = (2. * x - cs->a - cs->b) / (cs->b - cs->a); double y2 = 2.0 * y; double absc = 0.0; size_t eval_order = GSL_MIN (n, cs->order); for (i = eval_order; i >= 1; i--) { double temp = d1; d1 = y2 * d1 - d2 + cs->c[i]; d2 = temp; } *result = y * d1 - d2 + 0.5 * cs->c[0]; /* Estimate cumulative numerical error */ for (i = 0; i <= eval_order; i++) { absc += fabs(cs->c[i]); } /* Combine truncation error and numerical error */ *abserr = fabs (cs->c[eval_order]) + absc * GSL_DBL_EPSILON; return GSL_SUCCESS; } int gsl_cheb_eval_mode_e (const gsl_cheb_series * cs, const double x, gsl_mode_t mode, double *result, double *abserr) { size_t i; double d1 = 0.0; double d2 = 0.0; double y = (2. * x - cs->a - cs->b) / (cs->b - cs->a); double y2 = 2.0 * y; double absc = 0.0; size_t eval_order; if (GSL_MODE_PREC (mode) == GSL_PREC_DOUBLE) eval_order = cs->order; else eval_order = cs->order_sp; for (i = eval_order; i >= 1; i--) { double temp = d1; d1 = y2 * d1 - d2 + cs->c[i]; d2 = temp; } *result = y * d1 - d2 + 0.5 * cs->c[0]; /* Estimate cumulative numerical error */ for (i = 0; i <= eval_order; i++) { absc += fabs(cs->c[i]); } /* Combine truncation error and numerical error */ *abserr = fabs (cs->c[eval_order]) + absc * GSL_DBL_EPSILON; return GSL_SUCCESS; } double gsl_cheb_eval_mode (const gsl_cheb_series * cs, const double x, gsl_mode_t mode) { double result, abserr; int status = gsl_cheb_eval_mode_e (cs, x, mode, &result, &abserr); if (status != GSL_SUCCESS) { GSL_ERROR_VAL("gsl_cheb_eval_mode", status, result); }; return result; } gsl/cheb/deriv.c0000644000175000017500000000327413536674414012116 0ustar eddedd/* cheb/deriv.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include int gsl_cheb_calc_deriv(gsl_cheb_series * deriv, const gsl_cheb_series * f) { const size_t n = f->order + 1; const double con = 2.0 / (f->b - f->a); size_t i; if(deriv->order != f->order) { GSL_ERROR ("order of chebyshev series must be equal", GSL_ENOMEM); } /* set the other parameters in the chebyshev struct */ deriv->a = f->a; deriv->b = f->b; /* error in derivative is n^2 c_n */ /* deriv->err = n * n * f->c[n-1];*/ /* FIXME: should probably set deriv->f[] as well */ deriv->c[n-1] = 0.0; if(n > 1) { deriv->c[n-2] = 2.0 *(n-1.0) * f->c[n-1]; for(i = n; i>=3; i--) deriv->c[i-3] = deriv->c[i-1] + 2.0 *(i-2.0) * f->c[i-2]; for(i = 0 ; ic[i] *= con; } return GSL_SUCCESS; } gsl/splinalg/0000755000175000017500000000000014057135461011534 5ustar eddeddgsl/splinalg/gsl_splinalg.h0000644000175000017500000000467113536674414014402 0ustar eddedd/* gsl_splinalg.h * * Copyright (C) 2012-2014 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SPLINALG_H__ #define __GSL_SPLINALG_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* iteration solver type */ typedef struct { const char *name; void * (*alloc) (const size_t n, const size_t m); int (*iterate) (const gsl_spmatrix *A, const gsl_vector *b, const double tol, gsl_vector *x, void *); double (*normr)(const void *); void (*free) (void *); } gsl_splinalg_itersolve_type; typedef struct { const gsl_splinalg_itersolve_type * type; double normr; /* current residual norm || b - A x || */ void * state; } gsl_splinalg_itersolve; /* available types */ GSL_VAR const gsl_splinalg_itersolve_type * gsl_splinalg_itersolve_gmres; /* * Prototypes */ gsl_splinalg_itersolve * gsl_splinalg_itersolve_alloc(const gsl_splinalg_itersolve_type *T, const size_t n, const size_t m); void gsl_splinalg_itersolve_free(gsl_splinalg_itersolve *w); const char *gsl_splinalg_itersolve_name(const gsl_splinalg_itersolve *w); int gsl_splinalg_itersolve_iterate(const gsl_spmatrix *A, const gsl_vector *b, const double tol, gsl_vector *x, gsl_splinalg_itersolve *w); double gsl_splinalg_itersolve_normr(const gsl_splinalg_itersolve *w); __END_DECLS #endif /* __GSL_SPLINALG_H__ */ gsl/splinalg/Makefile.in0000664000175000017500000010625014057135461013607 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = splinalg ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslsplinalg_la_LIBADD = am_libgslsplinalg_la_OBJECTS = itersolve.lo gmres.lo libgslsplinalg_la_OBJECTS = $(am_libgslsplinalg_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslsplinalg.la ../spmatrix/libgslspmatrix.la \ ../spblas/libgslspblas.la ../bst/libgslbst.la \ ../test/libgsltest.la ../linalg/libgsllinalg.la \ ../blas/libgslblas.la ../cblas/libgslcblas.la \ ../matrix/libgslmatrix.la ../vector/libgslvector.la \ ../block/libgslblock.la ../sys/libgslsys.la \ ../utils/libutils.la ../rng/libgslrng.la ../err/libgslerr.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/gmres.Plo ./$(DEPDIR)/itersolve.Plo \ ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslsplinalg_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslsplinalg_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslsplinalg.la pkginclude_HEADERS = gsl_splinalg.h libgslsplinalg_la_SOURCES = itersolve.c gmres.c AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslsplinalg.la ../spmatrix/libgslspmatrix.la ../spblas/libgslspblas.la ../bst/libgslbst.la ../test/libgsltest.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../utils/libutils.la ../rng/libgslrng.la ../err/libgslerr.la test_SOURCES = test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu splinalg/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu splinalg/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslsplinalg.la: $(libgslsplinalg_la_OBJECTS) $(libgslsplinalg_la_DEPENDENCIES) $(EXTRA_libgslsplinalg_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslsplinalg_la_OBJECTS) $(libgslsplinalg_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gmres.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itersolve.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/gmres.Plo -rm -f ./$(DEPDIR)/itersolve.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/gmres.Plo -rm -f ./$(DEPDIR)/itersolve.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/splinalg/Makefile.am0000644000175000017500000000111613536675317013601 0ustar eddeddnoinst_LTLIBRARIES = libgslsplinalg.la check_PROGRAMS = test pkginclude_HEADERS = gsl_splinalg.h libgslsplinalg_la_SOURCES = itersolve.c gmres.c AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslsplinalg.la ../spmatrix/libgslspmatrix.la ../spblas/libgslspblas.la ../bst/libgslbst.la ../test/libgsltest.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../sys/libgslsys.la ../utils/libutils.la ../rng/libgslrng.la ../err/libgslerr.la test_SOURCES = test.c gsl/splinalg/itersolve.c0000644000175000017500000000447013536674414013730 0ustar eddedd/* itersolve.c * * Copyright (C) 2014 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include gsl_splinalg_itersolve * gsl_splinalg_itersolve_alloc(const gsl_splinalg_itersolve_type *T, const size_t n, const size_t m) { gsl_splinalg_itersolve *w; w = calloc(1, sizeof(gsl_splinalg_itersolve)); if (w == NULL) { GSL_ERROR_NULL("failed to allocate space for itersolve struct", GSL_ENOMEM); } w->type = T; w->normr = 0.0; w->state = w->type->alloc(n, m); if (w->state == NULL) { gsl_splinalg_itersolve_free(w); GSL_ERROR_NULL("failed to allocate space for itersolve state", GSL_ENOMEM); } return w; } /* gsl_splinalg_itersolve_alloc() */ void gsl_splinalg_itersolve_free(gsl_splinalg_itersolve *w) { RETURN_IF_NULL(w); if (w->state) w->type->free(w->state); free(w); } const char * gsl_splinalg_itersolve_name(const gsl_splinalg_itersolve *w) { return w->type->name; } int gsl_splinalg_itersolve_iterate(const gsl_spmatrix *A, const gsl_vector *b, const double tol, gsl_vector *x, gsl_splinalg_itersolve *w) { int status = w->type->iterate(A, b, tol, x, w->state); /* store current residual */ w->normr = w->type->normr(w->state); return status; } double gsl_splinalg_itersolve_normr(const gsl_splinalg_itersolve *w) { return w->normr; } gsl/splinalg/test.c0000644000175000017500000002300213536674414012663 0ustar eddedd/* test.c * * Copyright (C) 2012-2014 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* create_random_sparse() Create a random sparse matrix with approximately M*N*density non-zero entries Inputs: M - number of rows N - number of columns density - sparse density \in [0,1] 0 = no non-zero entries 1 = all m*n entries are filled r - random number generator Return: pointer to sparse matrix in triplet format (must be freed by caller) Notes: 1) non-zero matrix entries are uniformly distributed in [0,1] */ static gsl_spmatrix * create_random_sparse(const size_t M, const size_t N, const double density, const gsl_rng *r) { size_t nnzwanted = (size_t) floor(M * N * GSL_MIN(density, 1.0)); gsl_spmatrix *m = gsl_spmatrix_alloc_nzmax(M, N, nnzwanted, GSL_SPMATRIX_TRIPLET); size_t i; /* set diagonal entries to try to ensure non-singularity */ for (i = 0; i < GSL_MIN(M, N); ++i) { double x = gsl_rng_uniform(r); gsl_spmatrix_set(m, i, i, x); } while (gsl_spmatrix_nnz(m) < nnzwanted) { /* generate a random row and column */ size_t i = gsl_rng_uniform(r) * M; size_t j = gsl_rng_uniform(r) * N; /* generate random m_{ij} and add it */ double x = gsl_rng_uniform(r); gsl_spmatrix_set(m, i, j, x); } return m; } /* create_random_sparse() */ static void create_random_vector(gsl_vector *v, const gsl_rng *r) { size_t i; for (i = 0; i < v->size; ++i) { double x = gsl_rng_uniform(r); gsl_vector_set(v, i, x); } } /* create_random_vector() */ /* test_poisson() Solve u''(x) = -pi^2 sin(pi*x), u(x) = sin(pi*x) epsrel is the relative error threshold with the exact solution */ static void test_poisson(const size_t N, const double epsrel, const int compress) { const gsl_splinalg_itersolve_type *T = gsl_splinalg_itersolve_gmres; const size_t n = N - 2; /* subtract 2 to exclude boundaries */ const double h = 1.0 / (N - 1.0); /* grid spacing */ const double tol = 1.0e-9; const size_t max_iter = 10; size_t iter = 0; gsl_spmatrix *A = gsl_spmatrix_alloc(n ,n); /* triplet format */ gsl_spmatrix *B; gsl_vector *b = gsl_vector_alloc(n); /* right hand side vector */ gsl_vector *u = gsl_vector_calloc(n); /* solution vector, u0 = 0 */ gsl_splinalg_itersolve *w = gsl_splinalg_itersolve_alloc(T, n, 0); const char *desc = gsl_splinalg_itersolve_name(w); size_t i; int status; /* construct the sparse matrix for the finite difference equation */ /* first row of matrix */ gsl_spmatrix_set(A, 0, 0, -2.0); gsl_spmatrix_set(A, 0, 1, 1.0); /* loop over interior grid points */ for (i = 1; i < n - 1; ++i) { gsl_spmatrix_set(A, i, i + 1, 1.0); gsl_spmatrix_set(A, i, i, -2.0); gsl_spmatrix_set(A, i, i - 1, 1.0); } /* last row of matrix */ gsl_spmatrix_set(A, n - 1, n - 1, -2.0); gsl_spmatrix_set(A, n - 1, n - 2, 1.0); /* scale by h^2 */ gsl_spmatrix_scale(A, 1.0 / (h * h)); /* construct right hand side vector */ for (i = 0; i < n; ++i) { double xi = (i + 1) * h; double bi = -M_PI * M_PI * sin(M_PI * xi); gsl_vector_set(b, i, bi); } if (compress) B = gsl_spmatrix_compcol(A); else B = A; /* solve the system */ do { status = gsl_splinalg_itersolve_iterate(B, b, tol, u, w); } while (status == GSL_CONTINUE && ++iter < max_iter); gsl_test(status, "%s poisson status s=%d N=%zu", desc, status, N); /* check solution against analytic */ for (i = 0; i < n; ++i) { double xi = (i + 1) * h; double u_gsl = gsl_vector_get(u, i); double u_exact = sin(M_PI * xi); gsl_test_rel(u_gsl, u_exact, epsrel, "%s poisson N=%zu i=%zu", desc, N, i); } /* check that the residual satisfies ||r|| <= tol*||b|| */ { gsl_vector *r = gsl_vector_alloc(n); double normr, normb; gsl_vector_memcpy(r, b); gsl_spblas_dgemv(CblasNoTrans, -1.0, A, u, 1.0, r); normr = gsl_blas_dnrm2(r); normb = gsl_blas_dnrm2(b); status = (normr <= tol*normb) != 1; gsl_test(status, "%s poisson residual N=%zu normr=%.12e normb=%.12e", desc, N, normr, normb); gsl_vector_free(r); } gsl_splinalg_itersolve_free(w); gsl_spmatrix_free(A); gsl_vector_free(b); gsl_vector_free(u); if (compress) gsl_spmatrix_free(B); } /* test_poisson() */ /* test_toeplitz() Test Toeplitz matrix T = A + B + C where: A = diag(a,-1) B = diag(b) C = diag(c,1) rhs = ones(n,1) */ static void test_toeplitz(const size_t N, const double a, const double b, const double c) { int status; const double tol = 1.0e-10; const size_t max_iter = 10; const gsl_splinalg_itersolve_type *T = gsl_splinalg_itersolve_gmres; const char *desc; gsl_spmatrix *A; gsl_vector *rhs, *x; gsl_splinalg_itersolve *w; size_t i, iter = 0; if (N <= 1) return; A = gsl_spmatrix_alloc(N ,N); rhs = gsl_vector_alloc(N); x = gsl_vector_calloc(N); w = gsl_splinalg_itersolve_alloc(T, N, 0); desc = gsl_splinalg_itersolve_name(w); /* first row */ gsl_spmatrix_set(A, 0, 0, b); gsl_spmatrix_set(A, 0, 1, c); /* interior rows */ for (i = 1; i < N - 1; ++i) { gsl_spmatrix_set(A, i, i - 1, a); gsl_spmatrix_set(A, i, i, b); gsl_spmatrix_set(A, i, i + 1, c); } /* last row */ gsl_spmatrix_set(A, N - 1, N - 2, a); gsl_spmatrix_set(A, N - 1, N - 1, b); /* set rhs vector */ gsl_vector_set_all(rhs, 1.0); /* solve the system */ do { status = gsl_splinalg_itersolve_iterate(A, rhs, tol, x, w); } while (status == GSL_CONTINUE && ++iter < max_iter); gsl_test(status, "%s toeplitz status s=%d N=%zu a=%f b=%f c=%f", desc, status, N, a, b, c); /* check that the residual satisfies ||r|| <= tol*||b|| */ { gsl_vector *r = gsl_vector_alloc(N); double normr, normb; gsl_vector_memcpy(r, rhs); gsl_spblas_dgemv(CblasNoTrans, -1.0, A, x, 1.0, r); normr = gsl_blas_dnrm2(r); normb = gsl_blas_dnrm2(rhs); status = (normr <= tol*normb) != 1; gsl_test(status, "%s toeplitz residual N=%zu a=%f b=%f c=%f normr=%.12e normb=%.12e", desc, N, a, b, c, normr, normb); gsl_vector_free(r); } gsl_vector_free(x); gsl_vector_free(rhs); gsl_spmatrix_free(A); gsl_splinalg_itersolve_free(w); } /* test_toeplitz() */ static void test_random(const size_t N, const gsl_rng *r, const int compress) { const gsl_splinalg_itersolve_type *T = gsl_splinalg_itersolve_gmres; const double tol = 1.0e-8; int status; gsl_spmatrix *A = create_random_sparse(N, N, 0.3, r); gsl_spmatrix *B; gsl_vector *b = gsl_vector_alloc(N); gsl_vector *x = gsl_vector_calloc(N); /* these random matrices require all N iterations to converge */ gsl_splinalg_itersolve *w = gsl_splinalg_itersolve_alloc(T, N, N); const char *desc = gsl_splinalg_itersolve_name(w); create_random_vector(b, r); if (compress) B = gsl_spmatrix_compcol(A); else B = A; status = gsl_splinalg_itersolve_iterate(B, b, tol, x, w); gsl_test(status, "%s random status s=%d N=%zu", desc, status, N); /* check that the residual satisfies ||r|| <= tol*||b|| */ { gsl_vector *res = gsl_vector_alloc(N); double normr, normb; gsl_vector_memcpy(res, b); gsl_spblas_dgemv(CblasNoTrans, -1.0, A, x, 1.0, res); normr = gsl_blas_dnrm2(res); normb = gsl_blas_dnrm2(b); status = (normr <= tol*normb) != 1; gsl_test(status, "%s random residual N=%zu normr=%.12e normb=%.12e", desc, N, normr, normb); gsl_vector_free(res); } gsl_spmatrix_free(A); gsl_vector_free(b); gsl_vector_free(x); gsl_splinalg_itersolve_free(w); if (compress) gsl_spmatrix_free(B); } /* test_random() */ int main() { gsl_rng *r = gsl_rng_alloc(gsl_rng_default); size_t n; test_poisson(7, 1.0e-1, 0); test_poisson(7, 1.0e-1, 1); test_poisson(543, 1.0e-5, 0); test_poisson(543, 1.0e-5, 1); test_poisson(1000, 1.0e-6, 0); test_poisson(1000, 1.0e-6, 1); test_poisson(5000, 1.0e-7, 0); test_poisson(5000, 1.0e-7, 1); test_toeplitz(15, 0.01, 1.0, 0.01); test_toeplitz(15, 1.0, 1.0, 0.01); test_toeplitz(50, 1.0, 2.0, 0.01); test_toeplitz(1000, 0.5, 1.0, 0.01); for (n = 1; n <= 100; ++n) { test_random(n, r, 0); test_random(n, r, 1); } gsl_rng_free(r); exit (gsl_test_summary()); } /* main() */ gsl/splinalg/gmres.c0000644000175000017500000003123213536674414013025 0ustar eddedd/* gmres.c * * Copyright (C) 2014 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include /* * The code in this module is based on the Householder GMRES * algorithm described in * * [1] H. F. Walker, Implementation of the GMRES method using * Householder transformations, SIAM J. Sci. Stat. Comput. * 9(1), 1988. * * [2] Y. Saad, Iterative methods for sparse linear systems, * 2nd edition, SIAM, 2003. */ typedef struct { size_t n; /* size of linear system */ size_t m; /* dimension of Krylov subspace K_m */ gsl_vector *r; /* residual vector r = b - A*x */ gsl_matrix *H; /* Hessenberg matrix n-by-(m+1) */ gsl_vector *tau; /* householder scalars */ gsl_vector *y; /* least squares rhs and solution vector */ double *c; /* Givens rotations */ double *s; double normr; /* residual norm ||r|| */ } gmres_state_t; static void gmres_free(void *vstate); static int gmres_iterate(const gsl_spmatrix *A, const gsl_vector *b, const double tol, gsl_vector *x, void *vstate); /* gmres_alloc() Allocate a GMRES workspace for solving an n-by-n system A x = b Inputs: n - size of system krylov_m - size of Krylov subspace (ie: number of inner iterations) if this parameter is 0, the value GSL_MIN(n,10) is used Return: pointer to workspace */ static void * gmres_alloc(const size_t n, const size_t m) { gmres_state_t *state; if (n == 0) { GSL_ERROR_NULL("matrix dimension n must be a positive integer", GSL_EINVAL); } state = calloc(1, sizeof(gmres_state_t)); if (!state) { GSL_ERROR_NULL("failed to allocate gmres state", GSL_ENOMEM); } state->n = n; /* compute size of Krylov subspace */ if (m == 0) state->m = GSL_MIN(n, 10); else state->m = GSL_MIN(n, m); state->r = gsl_vector_alloc(n); if (!state->r) { gmres_free(state); GSL_ERROR_NULL("failed to allocate r vector", GSL_ENOMEM); } state->H = gsl_matrix_alloc(n, state->m + 1); if (!state->H) { gmres_free(state); GSL_ERROR_NULL("failed to allocate H matrix", GSL_ENOMEM); } state->tau = gsl_vector_alloc(state->m + 1); if (!state->tau) { gmres_free(state); GSL_ERROR_NULL("failed to allocate tau vector", GSL_ENOMEM); } state->y = gsl_vector_alloc(state->m + 1); if (!state->y) { gmres_free(state); GSL_ERROR_NULL("failed to allocate y vector", GSL_ENOMEM); } state->c = malloc(state->m * sizeof(double)); state->s = malloc(state->m * sizeof(double)); if (!state->c || !state->s) { gmres_free(state); GSL_ERROR_NULL("failed to allocate Givens vectors", GSL_ENOMEM); } state->normr = 0.0; return state; } /* gmres_alloc() */ static void gmres_free(void *vstate) { gmres_state_t *state = (gmres_state_t *) vstate; if (state->r) gsl_vector_free(state->r); if (state->H) gsl_matrix_free(state->H); if (state->tau) gsl_vector_free(state->tau); if (state->y) gsl_vector_free(state->y); if (state->c) free(state->c); if (state->s) free(state->s); free(state); } /* gmres_free() */ /* gmres_iterate() Solve A*x = b using GMRES algorithm Inputs: A - sparse square matrix b - right hand side vector tol - stopping tolerance (see below) x - (input/output) on input, initial estimate x_0; on output, solution vector work - workspace Return: GSL_SUCCESS if converged to solution (solution stored in x). In this case the following will be true: ||b - A*x|| <= tol * ||b|| GSL_CONTINUE if not yet converged; in this case x contains the most recent solution vector and calling this function more times with the input x could result in convergence (ie: restarted GMRES) Notes: 1) Based on algorithm 2.2 of (Walker, 1998 [1]) and algorithm 6.10 of (Saad, 2003 [2]) 2) On output, work->normr contains ||b - A*x|| */ static int gmres_iterate(const gsl_spmatrix *A, const gsl_vector *b, const double tol, gsl_vector *x, void *vstate) { const size_t N = A->size1; gmres_state_t *state = (gmres_state_t *) vstate; if (N != A->size2) { GSL_ERROR("matrix must be square", GSL_ENOTSQR); } else if (N != b->size) { GSL_ERROR("matrix does not match right hand side", GSL_EBADLEN); } else if (N != x->size) { GSL_ERROR("matrix does not match solution vector", GSL_EBADLEN); } else if (N != state->n) { GSL_ERROR("matrix does not match workspace", GSL_EBADLEN); } else { int status = GSL_SUCCESS; const size_t maxit = state->m; const double normb = gsl_blas_dnrm2(b); /* ||b|| */ const double reltol = tol * normb; /* tol*||b|| */ double normr; /* ||r|| */ size_t m, k; double tau; /* householder scalar */ gsl_matrix *H = state->H; /* Hessenberg matrix */ gsl_vector *r = state->r; /* residual vector */ gsl_vector *w = state->y; /* least squares RHS */ gsl_matrix_view Rm; /* R_m = H(1:m,2:m+1) */ gsl_vector_view ym; /* y(1:m) */ gsl_vector_view h0 = gsl_matrix_column(H, 0); /* * The Hessenberg matrix will have the following structure: * * H = [ ||r_0|| | v_1 v_2 ... v_m ] * [ u_1 | u_2 u_3 ... u_{m+1} ] * * where v_j are the orthonormal vectors spanning the Krylov * subpsace of length j + 1 and u_{j+1} are the householder * vectors of length n - j - 1. * In fact, u_{j+1} has length n - j since u_{j+1}[0] = 1, * but this 1 is not stored. */ gsl_matrix_set_zero(H); /* Step 1a: compute r = b - A*x_0 */ gsl_vector_memcpy(r, b); gsl_spblas_dgemv(CblasNoTrans, -1.0, A, x, 1.0, r); /* Step 1b */ gsl_vector_memcpy(&h0.vector, r); tau = gsl_linalg_householder_transform(&h0.vector); /* store tau_1 */ gsl_vector_set(state->tau, 0, tau); /* initialize w (stored in state->y) */ gsl_vector_set_zero(w); gsl_vector_set(w, 0, gsl_vector_get(&h0.vector, 0)); for (m = 1; m <= maxit; ++m) { size_t j = m - 1; /* C indexing */ double c, s; /* Givens rotation */ /* v_m */ gsl_vector_view vm = gsl_matrix_column(H, m); /* v_m(m:end) */ gsl_vector_view vv = gsl_vector_subvector(&vm.vector, j, N - j); /* householder vector u_m for projection P_m */ gsl_vector_view um = gsl_matrix_subcolumn(H, j, j, N - j); /* Step 2a: form v_m = P_m e_m = e_m - tau_m w_m */ gsl_vector_set_zero(&vm.vector); gsl_vector_memcpy(&vv.vector, &um.vector); tau = gsl_vector_get(state->tau, j); /* tau_m */ gsl_vector_scale(&vv.vector, -tau); gsl_vector_set(&vv.vector, 0, 1.0 - tau); /* Step 2a: v_m <- P_1 P_2 ... P_{m-1} v_m */ for (k = j; k > 0 && k--; ) { gsl_vector_view uk = gsl_matrix_subcolumn(H, k, k, N - k); gsl_vector_view vk = gsl_vector_subvector(&vm.vector, k, N - k); tau = gsl_vector_get(state->tau, k); gsl_linalg_householder_hv(tau, &uk.vector, &vk.vector); } /* Step 2a: v_m <- A*v_m */ gsl_spblas_dgemv(CblasNoTrans, 1.0, A, &vm.vector, 0.0, r); gsl_vector_memcpy(&vm.vector, r); /* Step 2a: v_m <- P_m ... P_1 v_m */ for (k = 0; k <= j; ++k) { gsl_vector_view uk = gsl_matrix_subcolumn(H, k, k, N - k); gsl_vector_view vk = gsl_vector_subvector(&vm.vector, k, N - k); tau = gsl_vector_get(state->tau, k); gsl_linalg_householder_hv(tau, &uk.vector, &vk.vector); } /* Steps 2c,2d: find P_{m+1} and set v_m <- P_{m+1} v_m */ if (m < N) { /* householder vector u_{m+1} for projection P_{m+1} */ gsl_vector_view ump1 = gsl_matrix_subcolumn(H, m, m, N - m); tau = gsl_linalg_householder_transform(&ump1.vector); gsl_vector_set(state->tau, j + 1, tau); } /* Step 2e: v_m <- J_{m-1} ... J_1 v_m */ for (k = 0; k < j; ++k) { gsl_linalg_givens_gv(&vm.vector, k, k + 1, state->c[k], state->s[k]); } if (m < N) { /* Step 2g: find givens rotation J_m for v_m(m:m+1) */ gsl_linalg_givens(gsl_vector_get(&vm.vector, j), gsl_vector_get(&vm.vector, j + 1), &c, &s); /* store givens rotation for later use */ state->c[j] = c; state->s[j] = s; /* Step 2h: v_m <- J_m v_m */ gsl_linalg_givens_gv(&vm.vector, j, j + 1, c, s); /* Step 2h: w <- J_m w */ gsl_linalg_givens_gv(w, j, j + 1, c, s); } /* * Step 2i: R_m = [ R_{m-1}, v_m ] - already taken care * of due to our memory storage scheme */ /* Step 2j: check residual w_{m+1} for convergence */ normr = fabs(gsl_vector_get(w, j + 1)); if (normr <= reltol) { /* * method has converged, break out of loop to compute * update to solution vector x */ break; } } /* * At this point, we have either converged to a solution or * completed all maxit iterations. In either case, compute * an update to the solution vector x and test again for * convergence. */ /* rewind m if we exceeded maxit iterations */ if (m > maxit) m--; /* Step 3a: solve triangular system R_m y_m = w, in place */ Rm = gsl_matrix_submatrix(H, 0, 1, m, m); ym = gsl_vector_subvector(w, 0, m); gsl_blas_dtrsv(CblasUpper, CblasNoTrans, CblasNonUnit, &Rm.matrix, &ym.vector); /* * Step 3b: update solution vector x; the loop below * uses a different but equivalent formulation from * Saad, algorithm 6.10, step 14; store Krylov projection * V_m y_m in 'r' */ gsl_vector_set_zero(r); for (k = m; k > 0 && k--; ) { double ymk = gsl_vector_get(&ym.vector, k); gsl_vector_view uk = gsl_matrix_subcolumn(H, k, k, N - k); gsl_vector_view rk = gsl_vector_subvector(r, k, N - k); /* r <- n_k e_k + r */ gsl_vector_set(r, k, gsl_vector_get(r, k) + ymk); /* r <- P_k r */ tau = gsl_vector_get(state->tau, k); gsl_linalg_householder_hv(tau, &uk.vector, &rk.vector); } /* x <- x + V_m y_m */ gsl_vector_add(x, r); /* compute new residual r = b - A*x */ gsl_vector_memcpy(r, b); gsl_spblas_dgemv(CblasNoTrans, -1.0, A, x, 1.0, r); normr = gsl_blas_dnrm2(r); if (normr <= reltol) status = GSL_SUCCESS; /* converged */ else status = GSL_CONTINUE; /* not yet converged */ /* store residual norm */ state->normr = normr; return status; } } /* gmres_iterate() */ static double gmres_normr(const void *vstate) { const gmres_state_t *state = (const gmres_state_t *) vstate; return state->normr; } /* gmres_normr() */ static const gsl_splinalg_itersolve_type gmres_type = { "gmres", &gmres_alloc, &gmres_iterate, &gmres_normr, &gmres_free }; const gsl_splinalg_itersolve_type * gsl_splinalg_itersolve_gmres = &gmres_type; gsl/complex/0000755000175000017500000000000014057135461011372 5ustar eddeddgsl/complex/Makefile.in0000664000175000017500000011402014057135461013437 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) test_c11$(EXEEXT) subdir = complex ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslcomplex_la_LIBADD = am_libgslcomplex_la_OBJECTS = math.lo inline.lo libgslcomplex_la_OBJECTS = $(am_libgslcomplex_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslcomplex.la ../err/libgslerr.la \ ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la am__objects_1 = test_c11-test.$(OBJEXT) am_test_c11_OBJECTS = $(am__objects_1) test_c11_OBJECTS = $(am_test_c11_OBJECTS) test_c11_DEPENDENCIES = $(test_LDADD) test_c11_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_c11_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/inline.Plo ./$(DEPDIR)/math.Plo \ ./$(DEPDIR)/test.Po ./$(DEPDIR)/test_c11-test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslcomplex_la_SOURCES) $(test_SOURCES) \ $(test_c11_SOURCES) DIST_SOURCES = $(libgslcomplex_la_SOURCES) $(test_SOURCES) \ $(test_c11_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslcomplex.la pkginclude_HEADERS = gsl_complex.h gsl_complex_math.h test_source.c AM_CPPFLAGS = -I$(top_srcdir) libgslcomplex_la_SOURCES = math.c inline.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c results.h results1.h results2.h results_real.h results_zreal.h test_LDADD = libgslcomplex.la ../err/libgslerr.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_c11_SOURCES = $(test_SOURCES) test_c11_CFLAGS = -DTEST_C11 test_c11_LDADD = $(test_LDADD) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu complex/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu complex/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslcomplex.la: $(libgslcomplex_la_OBJECTS) $(libgslcomplex_la_DEPENDENCIES) $(EXTRA_libgslcomplex_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslcomplex_la_OBJECTS) $(libgslcomplex_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) test_c11$(EXEEXT): $(test_c11_OBJECTS) $(test_c11_DEPENDENCIES) $(EXTRA_test_c11_DEPENDENCIES) @rm -f test_c11$(EXEEXT) $(AM_V_CCLD)$(test_c11_LINK) $(test_c11_OBJECTS) $(test_c11_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inline.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/math.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_c11-test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< test_c11-test.o: test.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_c11_CFLAGS) $(CFLAGS) -MT test_c11-test.o -MD -MP -MF $(DEPDIR)/test_c11-test.Tpo -c -o test_c11-test.o `test -f 'test.c' || echo '$(srcdir)/'`test.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_c11-test.Tpo $(DEPDIR)/test_c11-test.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test.c' object='test_c11-test.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_c11_CFLAGS) $(CFLAGS) -c -o test_c11-test.o `test -f 'test.c' || echo '$(srcdir)/'`test.c test_c11-test.obj: test.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_c11_CFLAGS) $(CFLAGS) -MT test_c11-test.obj -MD -MP -MF $(DEPDIR)/test_c11-test.Tpo -c -o test_c11-test.obj `if test -f 'test.c'; then $(CYGPATH_W) 'test.c'; else $(CYGPATH_W) '$(srcdir)/test.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_c11-test.Tpo $(DEPDIR)/test_c11-test.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test.c' object='test_c11-test.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_c11_CFLAGS) $(CFLAGS) -c -o test_c11-test.obj `if test -f 'test.c'; then $(CYGPATH_W) 'test.c'; else $(CYGPATH_W) '$(srcdir)/test.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_c11.log: test_c11$(EXEEXT) @p='test_c11$(EXEEXT)'; \ b='test_c11'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/inline.Plo -rm -f ./$(DEPDIR)/math.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_c11-test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/inline.Plo -rm -f ./$(DEPDIR)/math.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_c11-test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile results: emacs -batch -l test.el -f test1 | sed 's/00\+e/0e/g' > results1.h emacs -batch -l test.el -f test2 | sed 's/00\+e/0e/g' > results.h emacs -batch -l test.el -f test3 | sed 's/00\+e/0e/g' > results_real.h emacs -batch -l test.el -f test4 | sed 's/00\+e/0e/g' > results2.h emacs -batch -l test.el -f test5 | sed 's/00\+e/0e/g' > results_zreal.h # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/complex/ChangeLog0000644000175000017500000000505513536674414013160 0ustar eddedd2010-05-06 Brian Gough * test.c (main): added tests for functions like pow_real 2008-07-03 Brian Gough * math.c: handle inline functions separately * gsl_complex_math.h: add declarations for inline functions * inline.c: separate file for inline functions * Makefile.am (INCLUDES): use top_srcdir 2007-09-14 Brian Gough * test.c: add a margin of safety on tests for released versions, as in special functions 2007-08-30 Brian Gough * Makefile.am (test_SOURCES): added missing file results2.h 2007-08-30 Brian Gough * Makefile.am (test_SOURCES): added missing file results2.h 2007-08-15 Brian Gough * math.c (gsl_complex_pow): handle (0,0)^(0,0) (x,y)^(1,0) and (x,y)^(-1,0) as special cases 2003-01-25 Brian Gough * math.c (gsl_complex_arccsc_real): fixed bug for incorrect sign of imaginary part when -1 * math.c (gsl_complex_arg): enforce special case arg(0,0) = 0.0 Mon Sep 10 22:57:27 2001 Brian Gough * math.c (gsl_complex_div_real gsl_complex_div_real): added missing functions div_real and div_imag Mon Aug 27 18:58:41 2001 Brian Gough * test.el: trim the tests down to a more reasonable size Thu Aug 9 15:48:48 2001 Brian Gough * math.c (gsl_complex_tanh): improve accuracy for large R Fri Jul 27 23:29:10 2001 Brian Gough * math.c (gsl_complex_cos): avoid returning negative zero for the imaginary part when the argument is purely real Wed Mar 21 14:40:34 2001 Brian Gough * gsl_complex.h (GSL_COMPLEX_P): added macro to point to beginning of complex array within the struct Mon Dec 4 12:29:12 2000 Brian Gough * math.c (gsl_complex_rect): changed the function gsl_complex_xy to gsl_complex_rect, since this is more meaningful Sun Oct 22 13:55:09 2000 Brian Gough * math.c: changed calls to gsl_hypot() to hypot() so that the system function is used in preference (the configure script will define hypot to gsl_hypot if hypot is unavailable), similar change for functions log1p and gsl_log1p also Wed Mar 15 11:17:21 2000 Brian Gough * gsl_complex.h: moved into complex/ subdirectory from top-level gsl/complex/Makefile.am0000664000175000017500000000167114057135461013435 0ustar eddeddnoinst_LTLIBRARIES = libgslcomplex.la pkginclude_HEADERS = gsl_complex.h gsl_complex_math.h test_source.c AM_CPPFLAGS = -I$(top_srcdir) libgslcomplex_la_SOURCES = math.c inline.c TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_c11 test_SOURCES = test.c results.h results1.h results2.h results_real.h results_zreal.h test_LDADD = libgslcomplex.la ../err/libgslerr.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_c11_SOURCES = $(test_SOURCES) test_c11_CFLAGS = -DTEST_C11 test_c11_LDADD = $(test_LDADD) results: emacs -batch -l test.el -f test1 | sed 's/00\+e/0e/g' > results1.h emacs -batch -l test.el -f test2 | sed 's/00\+e/0e/g' > results.h emacs -batch -l test.el -f test3 | sed 's/00\+e/0e/g' > results_real.h emacs -batch -l test.el -f test4 | sed 's/00\+e/0e/g' > results2.h emacs -batch -l test.el -f test5 | sed 's/00\+e/0e/g' > results_zreal.h gsl/complex/inline.c0000644000175000017500000000161613536674414013027 0ustar eddedd/* complex/inline.c * * Copyright (C) 2008 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Compile all the inline functions */ #define COMPILE_INLINE_STATIC #include "build.h" #include gsl/complex/results.h0000644000175000017500000172434713536674414013275 0ustar eddedd {FN (sqrt), ARG(0.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (sqrt), ARG(0.0e+00,1.19209289550781250e-07), RES(2.44140625e-4, 2.44140625e-4)}, {FN (sqrt), ARG(0.0e+00,-1.19209289550781250e-07), RES(2.44140625e-4, -2.44140625e-4)}, {FN (sqrt), ARG(0.0e+00,5.0e-01), RES(5e-1, 5e-1)}, {FN (sqrt), ARG(0.0e+00,-5.0e-01), RES(5e-1, -5e-1)}, {FN (sqrt), ARG(0.0e+00,1.0e+00), RES(7.0710678118654752440e-1, 7.0710678118654752440e-1)}, {FN (sqrt), ARG(0.0e+00,-1.0e+00), RES(7.0710678118654752440e-1, -7.0710678118654752440e-1)}, {FN (sqrt), ARG(0.0e+00,2.0e+00), RES(1, 1)}, {FN (sqrt), ARG(0.0e+00,-2.0e+00), RES(1, -1)}, {FN (sqrt), ARG(0.0e+00,8.3886080e+06), RES(2048, 2048)}, {FN (sqrt), ARG(0.0e+00,-8.3886080e+06), RES(2048, -2048)}, {FN (sqrt), ARG(1.19209289550781250e-07,0.0e+00), RES(3.4526698300124390840e-4, 0.0)}, {FN (sqrt), ARG(-1.19209289550781250e-07,0.0e+00), RES(0, 3.4526698300124390840e-4)}, {FN (sqrt), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(3.7933934912842707699e-4, 1.5712750315077700799e-4)}, {FN (sqrt), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(3.7933934912842707699e-4, -1.5712750315077700799e-4)}, {FN (sqrt), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(1.5712750315077700799e-4, 3.7933934912842707699e-4)}, {FN (sqrt), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.5712750315077700799e-4, -3.7933934912842707699e-4)}, {FN (sqrt), ARG(1.19209289550781250e-07,5.0e-01), RES(5.0000005960464832810e-1, 4.9999994039535877732e-1)}, {FN (sqrt), ARG(1.19209289550781250e-07,-5.0e-01), RES(5.0000005960464832810e-1, -4.9999994039535877732e-1)}, {FN (sqrt), ARG(-1.19209289550781250e-07,5.0e-01), RES(4.9999994039535877732e-1, 5.0000005960464832810e-1)}, {FN (sqrt), ARG(-1.19209289550781250e-07,-5.0e-01), RES(4.9999994039535877732e-1, -5.0000005960464832810e-1)}, {FN (sqrt), ARG(1.19209289550781250e-07,1.0e+00), RES(7.0710682333339729137e-1, 7.0710673903970026958e-1)}, {FN (sqrt), ARG(1.19209289550781250e-07,-1.0e+00), RES(7.0710682333339729137e-1, -7.0710673903970026958e-1)}, {FN (sqrt), ARG(-1.19209289550781250e-07,1.0e+00), RES(7.0710673903970026958e-1, 7.0710682333339729137e-1)}, {FN (sqrt), ARG(-1.19209289550781250e-07,-1.0e+00), RES(7.0710673903970026958e-1, -7.0710682333339729137e-1)}, {FN (sqrt), ARG(1.19209289550781250e-07,2.0e+00), RES(1.0000000298023228318e0, 9.9999997019767805639e-1)}, {FN (sqrt), ARG(1.19209289550781250e-07,-2.0e+00), RES(1.0000000298023228318e0, -9.9999997019767805639e-1)}, {FN (sqrt), ARG(-1.19209289550781250e-07,2.0e+00), RES(9.9999997019767805639e-1, 1.0000000298023228318e0)}, {FN (sqrt), ARG(-1.19209289550781250e-07,-2.0e+00), RES(9.9999997019767805639e-1, -1.0000000298023228318e0)}, {FN (sqrt), ARG(1.19209289550781250e-07,8.3886080e+06), RES(2.0480000000000145519e3, 2.0479999999999854481e3)}, {FN (sqrt), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(2.0480000000000145519e3, -2.0479999999999854481e3)}, {FN (sqrt), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(2.0479999999999854481e3, 2.0480000000000145519e3)}, {FN (sqrt), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(2.0479999999999854481e3, -2.0480000000000145519e3)}, {FN (sqrt), ARG(5.0e-01,0.0e+00), RES(7.0710678118654752440e-1, 0.0)}, {FN (sqrt), ARG(-5.0e-01,0.0e+00), RES(0, 7.0710678118654752440e-1)}, {FN (sqrt), ARG(5.0e-01,1.19209289550781250e-07), RES(7.0710678118655254870e-1, 8.4293697021787464631e-8)}, {FN (sqrt), ARG(5.0e-01,-1.19209289550781250e-07), RES(7.0710678118655254870e-1, -8.4293697021787464631e-8)}, {FN (sqrt), ARG(-5.0e-01,1.19209289550781250e-07), RES(8.4293697021787464631e-8, 7.0710678118655254870e-1)}, {FN (sqrt), ARG(-5.0e-01,-1.19209289550781250e-07), RES(8.4293697021787464631e-8, -7.0710678118655254870e-1)}, {FN (sqrt), ARG(5.0e-01,5.0e-01), RES(7.7688698701501865367e-1, 3.2179712645279131237e-1)}, {FN (sqrt), ARG(5.0e-01,-5.0e-01), RES(7.7688698701501865367e-1, -3.2179712645279131237e-1)}, {FN (sqrt), ARG(-5.0e-01,5.0e-01), RES(3.2179712645279131237e-1, 7.7688698701501865367e-1)}, {FN (sqrt), ARG(-5.0e-01,-5.0e-01), RES(3.2179712645279131237e-1, -7.7688698701501865367e-1)}, {FN (sqrt), ARG(5.0e-01,1.0e+00), RES(8.9945371997393363613e-1, 5.5589297025142117199e-1)}, {FN (sqrt), ARG(5.0e-01,-1.0e+00), RES(8.9945371997393363613e-1, -5.5589297025142117199e-1)}, {FN (sqrt), ARG(-5.0e-01,1.0e+00), RES(5.5589297025142117199e-1, 8.9945371997393363613e-1)}, {FN (sqrt), ARG(-5.0e-01,-1.0e+00), RES(5.5589297025142117199e-1, -8.9945371997393363613e-1)}, {FN (sqrt), ARG(5.0e-01,2.0e+00), RES(1.1317139242778694103e0, 8.8361553087551326576e-1)}, {FN (sqrt), ARG(5.0e-01,-2.0e+00), RES(1.1317139242778694103e0, -8.8361553087551326576e-1)}, {FN (sqrt), ARG(-5.0e-01,2.0e+00), RES(8.8361553087551326576e-1, 1.1317139242778694103e0)}, {FN (sqrt), ARG(-5.0e-01,-2.0e+00), RES(8.8361553087551326576e-1, -1.1317139242778694103e0)}, {FN (sqrt), ARG(5.0e-01,8.3886080e+06), RES(2.0480000610351571595e3, 2.0479999389648446595e3)}, {FN (sqrt), ARG(5.0e-01,-8.3886080e+06), RES(2.0480000610351571595e3, -2.0479999389648446595e3)}, {FN (sqrt), ARG(-5.0e-01,8.3886080e+06), RES(2.0479999389648446595e3, 2.0480000610351571595e3)}, {FN (sqrt), ARG(-5.0e-01,-8.3886080e+06), RES(2.0479999389648446595e3, -2.0480000610351571595e3)}, {FN (sqrt), ARG(1.0e+00,0.0e+00), RES(1e0, 0.0)}, {FN (sqrt), ARG(-1.0e+00,0.0e+00), RES(0, 1)}, {FN (sqrt), ARG(1.0e+00,1.19209289550781250e-07), RES(1.0000000000000017764e0, 5.9604644775390519121e-8)}, {FN (sqrt), ARG(1.0e+00,-1.19209289550781250e-07), RES(1.0000000000000017764e0, -5.9604644775390519121e-8)}, {FN (sqrt), ARG(-1.0e+00,1.19209289550781250e-07), RES(5.9604644775390519121e-8, 1.0000000000000017764e0)}, {FN (sqrt), ARG(-1.0e+00,-1.19209289550781250e-07), RES(5.9604644775390519121e-8, -1.0000000000000017764e0)}, {FN (sqrt), ARG(1.0e+00,5.0e-01), RES(1.0290855136357461252e0, 2.4293413587832283909e-1)}, {FN (sqrt), ARG(1.0e+00,-5.0e-01), RES(1.0290855136357461252e0, -2.4293413587832283909e-1)}, {FN (sqrt), ARG(-1.0e+00,5.0e-01), RES(2.4293413587832283909e-1, 1.0290855136357461252e0)}, {FN (sqrt), ARG(-1.0e+00,-5.0e-01), RES(2.4293413587832283909e-1, -1.0290855136357461252e0)}, {FN (sqrt), ARG(1.0e+00,1.0e+00), RES(1.0986841134678099660e0, 4.5508986056222734130e-1)}, {FN (sqrt), ARG(1.0e+00,-1.0e+00), RES(1.0986841134678099660e0, -4.5508986056222734130e-1)}, {FN (sqrt), ARG(-1.0e+00,1.0e+00), RES(4.5508986056222734130e-1, 1.0986841134678099660e0)}, {FN (sqrt), ARG(-1.0e+00,-1.0e+00), RES(4.5508986056222734130e-1, -1.0986841134678099660e0)}, {FN (sqrt), ARG(1.0e+00,2.0e+00), RES(1.2720196495140689643e0, 7.8615137775742328607e-1)}, {FN (sqrt), ARG(1.0e+00,-2.0e+00), RES(1.2720196495140689643e0, -7.8615137775742328607e-1)}, {FN (sqrt), ARG(-1.0e+00,2.0e+00), RES(7.8615137775742328607e-1, 1.2720196495140689643e0)}, {FN (sqrt), ARG(-1.0e+00,-2.0e+00), RES(7.8615137775742328607e-1, -1.2720196495140689643e0)}, {FN (sqrt), ARG(1.0e+00,8.3886080e+06), RES(2.0480001220703161380e3, 2.0479998779296911380e3)}, {FN (sqrt), ARG(1.0e+00,-8.3886080e+06), RES(2.0480001220703161380e3, -2.0479998779296911380e3)}, {FN (sqrt), ARG(-1.0e+00,8.3886080e+06), RES(2.0479998779296911380e3, 2.0480001220703161380e3)}, {FN (sqrt), ARG(-1.0e+00,-8.3886080e+06), RES(2.0479998779296911380e3, -2.0480001220703161380e3)}, {FN (sqrt), ARG(2.0e+00,0.0e+00), RES(1.4142135623730950488e0, 0.0)}, {FN (sqrt), ARG(-2.0e+00,0.0e+00), RES(0, 1.4142135623730950488e0)}, {FN (sqrt), ARG(2.0e+00,1.19209289550781250e-07), RES(1.4142135623730956768e0, 4.2146848510894013070e-8)}, {FN (sqrt), ARG(2.0e+00,-1.19209289550781250e-07), RES(1.4142135623730956768e0, -4.2146848510894013070e-8)}, {FN (sqrt), ARG(-2.0e+00,1.19209289550781250e-07), RES(4.2146848510894013070e-8, 1.4142135623730956768e0)}, {FN (sqrt), ARG(-2.0e+00,-1.19209289550781250e-07), RES(4.2146848510894013070e-8, -1.4142135623730956768e0)}, {FN (sqrt), ARG(2.0e+00,5.0e-01), RES(1.4250531240639470060e0, 1.7543205637629383228e-1)}, {FN (sqrt), ARG(2.0e+00,-5.0e-01), RES(1.4250531240639470060e0, -1.7543205637629383228e-1)}, {FN (sqrt), ARG(-2.0e+00,5.0e-01), RES(1.7543205637629383228e-1, 1.4250531240639470060e0)}, {FN (sqrt), ARG(-2.0e+00,-5.0e-01), RES(1.7543205637629383228e-1, -1.4250531240639470060e0)}, {FN (sqrt), ARG(2.0e+00,1.0e+00), RES(1.4553466902253548081e0, 3.4356074972251246414e-1)}, {FN (sqrt), ARG(2.0e+00,-1.0e+00), RES(1.4553466902253548081e0, -3.4356074972251246414e-1)}, {FN (sqrt), ARG(-2.0e+00,1.0e+00), RES(3.4356074972251246414e-1, 1.4553466902253548081e0)}, {FN (sqrt), ARG(-2.0e+00,-1.0e+00), RES(3.4356074972251246414e-1, -1.4553466902253548081e0)}, {FN (sqrt), ARG(2.0e+00,2.0e+00), RES(1.5537739740300373073e0, 6.4359425290558262474e-1)}, {FN (sqrt), ARG(2.0e+00,-2.0e+00), RES(1.5537739740300373073e0, -6.4359425290558262474e-1)}, {FN (sqrt), ARG(-2.0e+00,2.0e+00), RES(6.4359425290558262474e-1, 1.5537739740300373073e0)}, {FN (sqrt), ARG(-2.0e+00,-2.0e+00), RES(6.4359425290558262474e-1, -1.5537739740300373073e0)}, {FN (sqrt), ARG(2.0e+00,8.3886080e+06), RES(2.0480002441406395519e3, 2.0479997558593895519e3)}, {FN (sqrt), ARG(2.0e+00,-8.3886080e+06), RES(2.0480002441406395519e3, -2.0479997558593895519e3)}, {FN (sqrt), ARG(-2.0e+00,8.3886080e+06), RES(2.0479997558593895519e3, 2.0480002441406395519e3)}, {FN (sqrt), ARG(-2.0e+00,-8.3886080e+06), RES(2.0479997558593895519e3, -2.0480002441406395519e3)}, {FN (sqrt), ARG(8.3886080e+06,0.0e+00), RES(2.8963093757400986599e3, 0.0)}, {FN (sqrt), ARG(-8.3886080e+06,0.0e+00), RES(0, 2.8963093757400986599e3)}, {FN (sqrt), ARG(8.3886080e+06,1.19209289550781250e-07), RES(2.8963093757400986599e3, 2.0579515874459976458e-11)}, {FN (sqrt), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(2.8963093757400986599e3, -2.0579515874459976458e-11)}, {FN (sqrt), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(2.0579515874459976458e-11, 2.8963093757400986599e3)}, {FN (sqrt), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(2.0579515874459976458e-11, -2.8963093757400986599e3)}, {FN (sqrt), ARG(8.3886080e+06,5.0e-01), RES(2.8963093757400999462e3, 8.6316745750310938767e-5)}, {FN (sqrt), ARG(8.3886080e+06,-5.0e-01), RES(2.8963093757400999462e3, -8.6316745750310938767e-5)}, {FN (sqrt), ARG(-8.3886080e+06,5.0e-01), RES(8.6316745750310938767e-5, 2.8963093757400999462e3)}, {FN (sqrt), ARG(-8.3886080e+06,-5.0e-01), RES(8.6316745750310938767e-5, -2.8963093757400999462e3)}, {FN (sqrt), ARG(8.3886080e+06,1.0e+00), RES(2.8963093757401038048e3, 1.7263349150062164754e-4)}, {FN (sqrt), ARG(8.3886080e+06,-1.0e+00), RES(2.8963093757401038048e3, -1.7263349150062164754e-4)}, {FN (sqrt), ARG(-8.3886080e+06,1.0e+00), RES(1.7263349150062164754e-4, 2.8963093757401038048e3)}, {FN (sqrt), ARG(-8.3886080e+06,-1.0e+00), RES(1.7263349150062164754e-4, -2.8963093757401038048e3)}, {FN (sqrt), ARG(8.3886080e+06,2.0e+00), RES(2.8963093757401192395e3, 3.4526698300124145513e-4)}, {FN (sqrt), ARG(8.3886080e+06,-2.0e+00), RES(2.8963093757401192395e3, -3.4526698300124145513e-4)}, {FN (sqrt), ARG(-8.3886080e+06,2.0e+00), RES(3.4526698300124145513e-4, 2.8963093757401192395e3)}, {FN (sqrt), ARG(-8.3886080e+06,-2.0e+00), RES(3.4526698300124145513e-4, -2.8963093757401192395e3)}, {FN (sqrt), ARG(8.3886080e+06,8.3886080e+06), RES(3.1821290988135164054e3, 1.3180810299506332155e3)}, {FN (sqrt), ARG(8.3886080e+06,-8.3886080e+06), RES(3.1821290988135164054e3, -1.3180810299506332155e3)}, {FN (sqrt), ARG(-8.3886080e+06,8.3886080e+06), RES(1.3180810299506332155e3, 3.1821290988135164054e3)}, {FN (sqrt), ARG(-8.3886080e+06,-8.3886080e+06), RES(1.3180810299506332155e3, -3.1821290988135164054e3)}, {FN (log), ARG(1.19209289550781250e-07,0.0e+00), RES(-1.5942385152878742117e1, 0.0)}, {FN (log), ARG(-1.19209289550781250e-07,0.0e+00), RES(-1.5942385152878742117e1, 3.1415926535897932385e0)}, {FN (log), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(-1.5595811562598769462e1, 7.8539816339744830962e-1)}, {FN (log), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(-1.5595811562598769462e1, -7.8539816339744830962e-1)}, {FN (log), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(-1.5595811562598769462e1, 2.3561944901923449288e0)}, {FN (log), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(-1.5595811562598769462e1, -2.3561944901923449288e0)}, {FN (log), ARG(1.19209289550781250e-07,5.0e-01), RES(-6.9314718055991688771e-1, 1.5707960883763175177e0)}, {FN (log), ARG(1.19209289550781250e-07,-5.0e-01), RES(-6.9314718055991688771e-1, -1.5707960883763175177e0)}, {FN (log), ARG(-1.19209289550781250e-07,5.0e-01), RES(-6.9314718055991688771e-1, 1.5707965652134757208e0)}, {FN (log), ARG(-1.19209289550781250e-07,-5.0e-01), RES(-6.9314718055991688771e-1, -1.5707965652134757208e0)}, {FN (log), ARG(1.19209289550781250e-07,1.0e+00), RES(7.1054273576009513716e-15, 1.5707962075856070685e0)}, {FN (log), ARG(1.19209289550781250e-07,-1.0e+00), RES(7.1054273576009513716e-15, -1.5707962075856070685e0)}, {FN (log), ARG(-1.19209289550781250e-07,1.0e+00), RES(7.1054273576009513716e-15, 1.570796446004186170e0)}, {FN (log), ARG(-1.19209289550781250e-07,-1.0e+00), RES(7.1054273576009513716e-15, -1.570796446004186170e0)}, {FN (log), ARG(1.19209289550781250e-07,2.0e+00), RES(6.9314718055994708577e-1, 1.5707962671902518438e0)}, {FN (log), ARG(1.19209289550781250e-07,-2.0e+00), RES(6.9314718055994708577e-1, -1.5707962671902518438e0)}, {FN (log), ARG(-1.19209289550781250e-07,2.0e+00), RES(6.9314718055994708577e-1, 1.5707963863995413946e0)}, {FN (log), ARG(-1.19209289550781250e-07,-2.0e+00), RES(6.9314718055994708577e-1, -1.5707963863995413946e0)}, {FN (log), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.5942385152878742117e1, 1.5707963267948824084e0)}, {FN (log), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.5942385152878742117e1, -1.5707963267948824084e0)}, {FN (log), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(1.5942385152878742117e1, 1.5707963267949108301e0)}, {FN (log), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(1.5942385152878742117e1, -1.5707963267949108301e0)}, {FN (log), ARG(5.0e-01,0.0e+00), RES(-6.9314718055994530942e-1, 0.0)}, {FN (log), ARG(-5.0e-01,0.0e+00), RES(-6.9314718055994530942e-1, 3.1415926535897932385e0)}, {FN (log), ARG(5.0e-01,1.19209289550781250e-07), RES(-6.9314718055991688771e-1, 2.3841857910155798249e-7)}, {FN (log), ARG(5.0e-01,-1.19209289550781250e-07), RES(-6.9314718055991688771e-1, -2.3841857910155798249e-7)}, {FN (log), ARG(-5.0e-01,1.19209289550781250e-07), RES(-6.9314718055991688771e-1, 3.1415924151712141369e0)}, {FN (log), ARG(-5.0e-01,-1.19209289550781250e-07), RES(-6.9314718055991688771e-1, -3.1415924151712141369e0)}, {FN (log), ARG(5.0e-01,5.0e-01), RES(-3.4657359027997265471e-1, 7.8539816339744830962e-1)}, {FN (log), ARG(5.0e-01,-5.0e-01), RES(-3.4657359027997265471e-1, -7.8539816339744830962e-1)}, {FN (log), ARG(-5.0e-01,5.0e-01), RES(-3.4657359027997265471e-1, 2.3561944901923449288e0)}, {FN (log), ARG(-5.0e-01,-5.0e-01), RES(-3.4657359027997265471e-1, -2.3561944901923449288e0)}, {FN (log), ARG(5.0e-01,1.0e+00), RES(1.1157177565710487788e-1, 1.1071487177940905030e0)}, {FN (log), ARG(5.0e-01,-1.0e+00), RES(1.1157177565710487788e-1, -1.1071487177940905030e0)}, {FN (log), ARG(-5.0e-01,1.0e+00), RES(1.1157177565710487788e-1, 2.0344439357957027354e0)}, {FN (log), ARG(-5.0e-01,-1.0e+00), RES(1.1157177565710487788e-1, -2.0344439357957027354e0)}, {FN (log), ARG(5.0e-01,2.0e+00), RES(7.2345949146816273071e-1, 1.3258176636680324651e0)}, {FN (log), ARG(5.0e-01,-2.0e+00), RES(7.2345949146816273071e-1, -1.3258176636680324651e0)}, {FN (log), ARG(-5.0e-01,2.0e+00), RES(7.2345949146816273071e-1, 1.8157749899217607734e0)}, {FN (log), ARG(-5.0e-01,-2.0e+00), RES(7.2345949146816273071e-1, -1.8157749899217607734e0)}, {FN (log), ARG(5.0e-01,8.3886080e+06), RES(1.5942385152878743893e1, 1.5707962671902518438e0)}, {FN (log), ARG(5.0e-01,-8.3886080e+06), RES(1.5942385152878743893e1, -1.5707962671902518438e0)}, {FN (log), ARG(-5.0e-01,8.3886080e+06), RES(1.5942385152878743893e1, 1.5707963863995413946e0)}, {FN (log), ARG(-5.0e-01,-8.3886080e+06), RES(1.5942385152878743893e1, -1.5707963863995413946e0)}, {FN (log), ARG(1.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (log), ARG(-1.0e+00,0.0e+00), RES(0, 3.1415926535897932385e0)}, {FN (log), ARG(1.0e+00,1.19209289550781250e-07), RES(7.1054273576009513716e-15, 1.1920928955078068531e-7)}, {FN (log), ARG(1.0e+00,-1.19209289550781250e-07), RES(7.1054273576009513716e-15, -1.1920928955078068531e-7)}, {FN (log), ARG(-1.0e+00,1.19209289550781250e-07), RES(7.1054273576009513716e-15, 3.1415925343805036877e0)}, {FN (log), ARG(-1.0e+00,-1.19209289550781250e-07), RES(7.1054273576009513716e-15, -3.1415925343805036877e0)}, {FN (log), ARG(1.0e+00,5.0e-01), RES(1.1157177565710487788e-1, 4.6364760900080611621e-1)}, {FN (log), ARG(1.0e+00,-5.0e-01), RES(1.1157177565710487788e-1, -4.6364760900080611621e-1)}, {FN (log), ARG(-1.0e+00,5.0e-01), RES(1.1157177565710487788e-1, 2.6779450445889871222e0)}, {FN (log), ARG(-1.0e+00,-5.0e-01), RES(1.1157177565710487788e-1, -2.6779450445889871222e0)}, {FN (log), ARG(1.0e+00,1.0e+00), RES(3.4657359027997265471e-1, 7.8539816339744830962e-1)}, {FN (log), ARG(1.0e+00,-1.0e+00), RES(3.4657359027997265471e-1, -7.8539816339744830962e-1)}, {FN (log), ARG(-1.0e+00,1.0e+00), RES(3.4657359027997265471e-1, 2.3561944901923449288e0)}, {FN (log), ARG(-1.0e+00,-1.0e+00), RES(3.4657359027997265471e-1, -2.3561944901923449288e0)}, {FN (log), ARG(1.0e+00,2.0e+00), RES(8.0471895621705018730e-1, 1.1071487177940905030e0)}, {FN (log), ARG(1.0e+00,-2.0e+00), RES(8.0471895621705018730e-1, -1.1071487177940905030e0)}, {FN (log), ARG(-1.0e+00,2.0e+00), RES(8.0471895621705018730e-1, 2.0344439357957027354e0)}, {FN (log), ARG(-1.0e+00,-2.0e+00), RES(8.0471895621705018730e-1, -2.0344439357957027354e0)}, {FN (log), ARG(1.0e+00,8.3886080e+06), RES(1.5942385152878749222e1, 1.5707962075856070685e0)}, {FN (log), ARG(1.0e+00,-8.3886080e+06), RES(1.5942385152878749222e1, -1.5707962075856070685e0)}, {FN (log), ARG(-1.0e+00,8.3886080e+06), RES(1.5942385152878749222e1, 1.570796446004186170e0)}, {FN (log), ARG(-1.0e+00,-8.3886080e+06), RES(1.5942385152878749222e1, -1.570796446004186170e0)}, {FN (log), ARG(2.0e+00,0.0e+00), RES(6.9314718055994530942e-1, 0.0)}, {FN (log), ARG(-2.0e+00,0.0e+00), RES(6.9314718055994530942e-1, 3.1415926535897932385e0)}, {FN (log), ARG(2.0e+00,1.19209289550781250e-07), RES(6.9314718055994708577e-1, 5.9604644775390554414e-8)}, {FN (log), ARG(2.0e+00,-1.19209289550781250e-07), RES(6.9314718055994708577e-1, -5.9604644775390554414e-8)}, {FN (log), ARG(-2.0e+00,1.19209289550781250e-07), RES(6.9314718055994708577e-1, 3.1415925939851484631e0)}, {FN (log), ARG(-2.0e+00,-1.19209289550781250e-07), RES(6.9314718055994708577e-1, -3.1415925939851484631e0)}, {FN (log), ARG(2.0e+00,5.0e-01), RES(7.2345949146816273071e-1, 2.4497866312686415417e-1)}, {FN (log), ARG(2.0e+00,-5.0e-01), RES(7.2345949146816273071e-1, -2.4497866312686415417e-1)}, {FN (log), ARG(-2.0e+00,5.0e-01), RES(7.2345949146816273071e-1, 2.8966139904629290843e0)}, {FN (log), ARG(-2.0e+00,-5.0e-01), RES(7.2345949146816273071e-1, -2.8966139904629290843e0)}, {FN (log), ARG(2.0e+00,1.0e+00), RES(8.0471895621705018730e-1, 4.6364760900080611621e-1)}, {FN (log), ARG(2.0e+00,-1.0e+00), RES(8.0471895621705018730e-1, -4.6364760900080611621e-1)}, {FN (log), ARG(-2.0e+00,1.0e+00), RES(8.0471895621705018730e-1, 2.6779450445889871222e0)}, {FN (log), ARG(-2.0e+00,-1.0e+00), RES(8.0471895621705018730e-1, -2.6779450445889871222e0)}, {FN (log), ARG(2.0e+00,2.0e+00), RES(1.0397207708399179641e0, 7.8539816339744830962e-1)}, {FN (log), ARG(2.0e+00,-2.0e+00), RES(1.0397207708399179641e0, -7.8539816339744830962e-1)}, {FN (log), ARG(-2.0e+00,2.0e+00), RES(1.0397207708399179641e0, 2.3561944901923449288e0)}, {FN (log), ARG(-2.0e+00,-2.0e+00), RES(1.0397207708399179641e0, -2.3561944901923449288e0)}, {FN (log), ARG(2.0e+00,8.3886080e+06), RES(1.5942385152878770538e1, 1.5707960883763175177e0)}, {FN (log), ARG(2.0e+00,-8.3886080e+06), RES(1.5942385152878770538e1, -1.5707960883763175177e0)}, {FN (log), ARG(-2.0e+00,8.3886080e+06), RES(1.5942385152878770538e1, 1.5707965652134757208e0)}, {FN (log), ARG(-2.0e+00,-8.3886080e+06), RES(1.5942385152878770538e1, -1.5707965652134757208e0)}, {FN (log), ARG(8.3886080e+06,0.0e+00), RES(1.5942385152878742117e1, 0.0)}, {FN (log), ARG(-8.3886080e+06,0.0e+00), RES(1.5942385152878742117e1, 3.1415926535897932385e0)}, {FN (log), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.5942385152878742117e1, 1.4210854715202003717e-14)}, {FN (log), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.5942385152878742117e1, -1.4210854715202003717e-14)}, {FN (log), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(1.5942385152878742117e1, 3.1415926535897790276e0)}, {FN (log), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(1.5942385152878742117e1, -3.1415926535897790276e0)}, {FN (log), ARG(8.3886080e+06,5.0e-01), RES(1.5942385152878743893e1, 5.9604644775390554414e-8)}, {FN (log), ARG(8.3886080e+06,-5.0e-01), RES(1.5942385152878743893e1, -5.9604644775390554414e-8)}, {FN (log), ARG(-8.3886080e+06,5.0e-01), RES(1.5942385152878743893e1, 3.1415925939851484631e0)}, {FN (log), ARG(-8.3886080e+06,-5.0e-01), RES(1.5942385152878743893e1, -3.1415925939851484631e0)}, {FN (log), ARG(8.3886080e+06,1.0e+00), RES(1.5942385152878749222e1, 1.1920928955078068531e-7)}, {FN (log), ARG(8.3886080e+06,-1.0e+00), RES(1.5942385152878749222e1, -1.1920928955078068531e-7)}, {FN (log), ARG(-8.3886080e+06,1.0e+00), RES(1.5942385152878749222e1, 3.1415925343805036877e0)}, {FN (log), ARG(-8.3886080e+06,-1.0e+00), RES(1.5942385152878749222e1, -3.1415925343805036877e0)}, {FN (log), ARG(8.3886080e+06,2.0e+00), RES(1.5942385152878770538e1, 2.3841857910155798249e-7)}, {FN (log), ARG(8.3886080e+06,-2.0e+00), RES(1.5942385152878770538e1, -2.3841857910155798249e-7)}, {FN (log), ARG(-8.3886080e+06,2.0e+00), RES(1.5942385152878770538e1, 3.1415924151712141369e0)}, {FN (log), ARG(-8.3886080e+06,-2.0e+00), RES(1.5942385152878770538e1, -3.1415924151712141369e0)}, {FN (log), ARG(8.3886080e+06,8.3886080e+06), RES(1.6288958743158714771e1, 7.8539816339744830962e-1)}, {FN (log), ARG(8.3886080e+06,-8.3886080e+06), RES(1.6288958743158714771e1, -7.8539816339744830962e-1)}, {FN (log), ARG(-8.3886080e+06,8.3886080e+06), RES(1.6288958743158714771e1, 2.3561944901923449288e0)}, {FN (log), ARG(-8.3886080e+06,-8.3886080e+06), RES(1.6288958743158714771e1, -2.3561944901923449288e0)}, {FN (log), ARG(0.0e+00,1.19209289550781250e-07), RES(-1.5942385152878742117e1, 1.5707963267948966192e0)}, {FN (log), ARG(0.0e+00,-1.19209289550781250e-07), RES(-1.5942385152878742117e1, -1.5707963267948966192e0)}, {FN (log), ARG(0.0e+00,5.0e-01), RES(-6.9314718055994530942e-1, 1.5707963267948966192e0)}, {FN (log), ARG(0.0e+00,-5.0e-01), RES(-6.9314718055994530942e-1, -1.5707963267948966192e0)}, {FN (log), ARG(0.0e+00,1.0e+00), RES(0, 1.5707963267948966192e0)}, {FN (log), ARG(0.0e+00,-1.0e+00), RES(0, -1.5707963267948966192e0)}, {FN (log), ARG(0.0e+00,2.0e+00), RES(6.9314718055994530942e-1, 1.5707963267948966192e0)}, {FN (log), ARG(0.0e+00,-2.0e+00), RES(6.9314718055994530942e-1, -1.5707963267948966192e0)}, {FN (log), ARG(0.0e+00,8.3886080e+06), RES(1.5942385152878742117e1, 1.5707963267948966192e0)}, {FN (log), ARG(0.0e+00,-8.3886080e+06), RES(1.5942385152878742117e1, -1.5707963267948966192e0)}, {FN (log), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(-1.5595811562598769462e1, 7.8539816339744830962e-1)}, {FN (log), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(-1.5595811562598769462e1, -7.8539816339744830962e-1)}, {FN (log), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(-1.5595811562598769462e1, 2.3561944901923449288e0)}, {FN (log), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(-1.5595811562598769462e1, -2.3561944901923449288e0)}, {FN (log), ARG(1.19209289550781250e-07,5.0e-01), RES(-6.9314718055991688771e-1, 1.5707960883763175177e0)}, {FN (log), ARG(1.19209289550781250e-07,-5.0e-01), RES(-6.9314718055991688771e-1, -1.5707960883763175177e0)}, {FN (log), ARG(-1.19209289550781250e-07,5.0e-01), RES(-6.9314718055991688771e-1, 1.5707965652134757208e0)}, {FN (log), ARG(-1.19209289550781250e-07,-5.0e-01), RES(-6.9314718055991688771e-1, -1.5707965652134757208e0)}, {FN (log), ARG(1.19209289550781250e-07,1.0e+00), RES(7.1054273576009513716e-15, 1.5707962075856070685e0)}, {FN (log), ARG(1.19209289550781250e-07,-1.0e+00), RES(7.1054273576009513716e-15, -1.5707962075856070685e0)}, {FN (log), ARG(-1.19209289550781250e-07,1.0e+00), RES(7.1054273576009513716e-15, 1.570796446004186170e0)}, {FN (log), ARG(-1.19209289550781250e-07,-1.0e+00), RES(7.1054273576009513716e-15, -1.570796446004186170e0)}, {FN (log), ARG(1.19209289550781250e-07,2.0e+00), RES(6.9314718055994708577e-1, 1.5707962671902518438e0)}, {FN (log), ARG(1.19209289550781250e-07,-2.0e+00), RES(6.9314718055994708577e-1, -1.5707962671902518438e0)}, {FN (log), ARG(-1.19209289550781250e-07,2.0e+00), RES(6.9314718055994708577e-1, 1.5707963863995413946e0)}, {FN (log), ARG(-1.19209289550781250e-07,-2.0e+00), RES(6.9314718055994708577e-1, -1.5707963863995413946e0)}, {FN (log), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.5942385152878742117e1, 1.5707963267948824084e0)}, {FN (log), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.5942385152878742117e1, -1.5707963267948824084e0)}, {FN (log), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(1.5942385152878742117e1, 1.5707963267949108301e0)}, {FN (log), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(1.5942385152878742117e1, -1.5707963267949108301e0)}, {FN (log), ARG(5.0e-01,1.19209289550781250e-07), RES(-6.9314718055991688771e-1, 2.3841857910155798249e-7)}, {FN (log), ARG(5.0e-01,-1.19209289550781250e-07), RES(-6.9314718055991688771e-1, -2.3841857910155798249e-7)}, {FN (log), ARG(-5.0e-01,1.19209289550781250e-07), RES(-6.9314718055991688771e-1, 3.1415924151712141369e0)}, {FN (log), ARG(-5.0e-01,-1.19209289550781250e-07), RES(-6.9314718055991688771e-1, -3.1415924151712141369e0)}, {FN (log), ARG(5.0e-01,5.0e-01), RES(-3.4657359027997265471e-1, 7.8539816339744830962e-1)}, {FN (log), ARG(5.0e-01,-5.0e-01), RES(-3.4657359027997265471e-1, -7.8539816339744830962e-1)}, {FN (log), ARG(-5.0e-01,5.0e-01), RES(-3.4657359027997265471e-1, 2.3561944901923449288e0)}, {FN (log), ARG(-5.0e-01,-5.0e-01), RES(-3.4657359027997265471e-1, -2.3561944901923449288e0)}, {FN (log), ARG(5.0e-01,1.0e+00), RES(1.1157177565710487788e-1, 1.1071487177940905030e0)}, {FN (log), ARG(5.0e-01,-1.0e+00), RES(1.1157177565710487788e-1, -1.1071487177940905030e0)}, {FN (log), ARG(-5.0e-01,1.0e+00), RES(1.1157177565710487788e-1, 2.0344439357957027354e0)}, {FN (log), ARG(-5.0e-01,-1.0e+00), RES(1.1157177565710487788e-1, -2.0344439357957027354e0)}, {FN (log), ARG(5.0e-01,2.0e+00), RES(7.2345949146816273071e-1, 1.3258176636680324651e0)}, {FN (log), ARG(5.0e-01,-2.0e+00), RES(7.2345949146816273071e-1, -1.3258176636680324651e0)}, {FN (log), ARG(-5.0e-01,2.0e+00), RES(7.2345949146816273071e-1, 1.8157749899217607734e0)}, {FN (log), ARG(-5.0e-01,-2.0e+00), RES(7.2345949146816273071e-1, -1.8157749899217607734e0)}, {FN (log), ARG(5.0e-01,8.3886080e+06), RES(1.5942385152878743893e1, 1.5707962671902518438e0)}, {FN (log), ARG(5.0e-01,-8.3886080e+06), RES(1.5942385152878743893e1, -1.5707962671902518438e0)}, {FN (log), ARG(-5.0e-01,8.3886080e+06), RES(1.5942385152878743893e1, 1.5707963863995413946e0)}, {FN (log), ARG(-5.0e-01,-8.3886080e+06), RES(1.5942385152878743893e1, -1.5707963863995413946e0)}, {FN (log), ARG(1.0e+00,1.19209289550781250e-07), RES(7.1054273576009513716e-15, 1.1920928955078068531e-7)}, {FN (log), ARG(1.0e+00,-1.19209289550781250e-07), RES(7.1054273576009513716e-15, -1.1920928955078068531e-7)}, {FN (log), ARG(-1.0e+00,1.19209289550781250e-07), RES(7.1054273576009513716e-15, 3.1415925343805036877e0)}, {FN (log), ARG(-1.0e+00,-1.19209289550781250e-07), RES(7.1054273576009513716e-15, -3.1415925343805036877e0)}, {FN (log), ARG(1.0e+00,5.0e-01), RES(1.1157177565710487788e-1, 4.6364760900080611621e-1)}, {FN (log), ARG(1.0e+00,-5.0e-01), RES(1.1157177565710487788e-1, -4.6364760900080611621e-1)}, {FN (log), ARG(-1.0e+00,5.0e-01), RES(1.1157177565710487788e-1, 2.6779450445889871222e0)}, {FN (log), ARG(-1.0e+00,-5.0e-01), RES(1.1157177565710487788e-1, -2.6779450445889871222e0)}, {FN (log), ARG(1.0e+00,1.0e+00), RES(3.4657359027997265471e-1, 7.8539816339744830962e-1)}, {FN (log), ARG(1.0e+00,-1.0e+00), RES(3.4657359027997265471e-1, -7.8539816339744830962e-1)}, {FN (log), ARG(-1.0e+00,1.0e+00), RES(3.4657359027997265471e-1, 2.3561944901923449288e0)}, {FN (log), ARG(-1.0e+00,-1.0e+00), RES(3.4657359027997265471e-1, -2.3561944901923449288e0)}, {FN (log), ARG(1.0e+00,2.0e+00), RES(8.0471895621705018730e-1, 1.1071487177940905030e0)}, {FN (log), ARG(1.0e+00,-2.0e+00), RES(8.0471895621705018730e-1, -1.1071487177940905030e0)}, {FN (log), ARG(-1.0e+00,2.0e+00), RES(8.0471895621705018730e-1, 2.0344439357957027354e0)}, {FN (log), ARG(-1.0e+00,-2.0e+00), RES(8.0471895621705018730e-1, -2.0344439357957027354e0)}, {FN (log), ARG(1.0e+00,8.3886080e+06), RES(1.5942385152878749222e1, 1.5707962075856070685e0)}, {FN (log), ARG(1.0e+00,-8.3886080e+06), RES(1.5942385152878749222e1, -1.5707962075856070685e0)}, {FN (log), ARG(-1.0e+00,8.3886080e+06), RES(1.5942385152878749222e1, 1.570796446004186170e0)}, {FN (log), ARG(-1.0e+00,-8.3886080e+06), RES(1.5942385152878749222e1, -1.570796446004186170e0)}, {FN (log), ARG(2.0e+00,1.19209289550781250e-07), RES(6.9314718055994708577e-1, 5.9604644775390554414e-8)}, {FN (log), ARG(2.0e+00,-1.19209289550781250e-07), RES(6.9314718055994708577e-1, -5.9604644775390554414e-8)}, {FN (log), ARG(-2.0e+00,1.19209289550781250e-07), RES(6.9314718055994708577e-1, 3.1415925939851484631e0)}, {FN (log), ARG(-2.0e+00,-1.19209289550781250e-07), RES(6.9314718055994708577e-1, -3.1415925939851484631e0)}, {FN (log), ARG(2.0e+00,5.0e-01), RES(7.2345949146816273071e-1, 2.4497866312686415417e-1)}, {FN (log), ARG(2.0e+00,-5.0e-01), RES(7.2345949146816273071e-1, -2.4497866312686415417e-1)}, {FN (log), ARG(-2.0e+00,5.0e-01), RES(7.2345949146816273071e-1, 2.8966139904629290843e0)}, {FN (log), ARG(-2.0e+00,-5.0e-01), RES(7.2345949146816273071e-1, -2.8966139904629290843e0)}, {FN (log), ARG(2.0e+00,1.0e+00), RES(8.0471895621705018730e-1, 4.6364760900080611621e-1)}, {FN (log), ARG(2.0e+00,-1.0e+00), RES(8.0471895621705018730e-1, -4.6364760900080611621e-1)}, {FN (log), ARG(-2.0e+00,1.0e+00), RES(8.0471895621705018730e-1, 2.6779450445889871222e0)}, {FN (log), ARG(-2.0e+00,-1.0e+00), RES(8.0471895621705018730e-1, -2.6779450445889871222e0)}, {FN (log), ARG(2.0e+00,2.0e+00), RES(1.0397207708399179641e0, 7.8539816339744830962e-1)}, {FN (log), ARG(2.0e+00,-2.0e+00), RES(1.0397207708399179641e0, -7.8539816339744830962e-1)}, {FN (log), ARG(-2.0e+00,2.0e+00), RES(1.0397207708399179641e0, 2.3561944901923449288e0)}, {FN (log), ARG(-2.0e+00,-2.0e+00), RES(1.0397207708399179641e0, -2.3561944901923449288e0)}, {FN (log), ARG(2.0e+00,8.3886080e+06), RES(1.5942385152878770538e1, 1.5707960883763175177e0)}, {FN (log), ARG(2.0e+00,-8.3886080e+06), RES(1.5942385152878770538e1, -1.5707960883763175177e0)}, {FN (log), ARG(-2.0e+00,8.3886080e+06), RES(1.5942385152878770538e1, 1.5707965652134757208e0)}, {FN (log), ARG(-2.0e+00,-8.3886080e+06), RES(1.5942385152878770538e1, -1.5707965652134757208e0)}, {FN (log), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.5942385152878742117e1, 1.4210854715202003717e-14)}, {FN (log), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.5942385152878742117e1, -1.4210854715202003717e-14)}, {FN (log), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(1.5942385152878742117e1, 3.1415926535897790276e0)}, {FN (log), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(1.5942385152878742117e1, -3.1415926535897790276e0)}, {FN (log), ARG(8.3886080e+06,5.0e-01), RES(1.5942385152878743893e1, 5.9604644775390554414e-8)}, {FN (log), ARG(8.3886080e+06,-5.0e-01), RES(1.5942385152878743893e1, -5.9604644775390554414e-8)}, {FN (log), ARG(-8.3886080e+06,5.0e-01), RES(1.5942385152878743893e1, 3.1415925939851484631e0)}, {FN (log), ARG(-8.3886080e+06,-5.0e-01), RES(1.5942385152878743893e1, -3.1415925939851484631e0)}, {FN (log), ARG(8.3886080e+06,1.0e+00), RES(1.5942385152878749222e1, 1.1920928955078068531e-7)}, {FN (log), ARG(8.3886080e+06,-1.0e+00), RES(1.5942385152878749222e1, -1.1920928955078068531e-7)}, {FN (log), ARG(-8.3886080e+06,1.0e+00), RES(1.5942385152878749222e1, 3.1415925343805036877e0)}, {FN (log), ARG(-8.3886080e+06,-1.0e+00), RES(1.5942385152878749222e1, -3.1415925343805036877e0)}, {FN (log), ARG(8.3886080e+06,2.0e+00), RES(1.5942385152878770538e1, 2.3841857910155798249e-7)}, {FN (log), ARG(8.3886080e+06,-2.0e+00), RES(1.5942385152878770538e1, -2.3841857910155798249e-7)}, {FN (log), ARG(-8.3886080e+06,2.0e+00), RES(1.5942385152878770538e1, 3.1415924151712141369e0)}, {FN (log), ARG(-8.3886080e+06,-2.0e+00), RES(1.5942385152878770538e1, -3.1415924151712141369e0)}, {FN (log), ARG(8.3886080e+06,8.3886080e+06), RES(1.6288958743158714771e1, 7.8539816339744830962e-1)}, {FN (log), ARG(8.3886080e+06,-8.3886080e+06), RES(1.6288958743158714771e1, -7.8539816339744830962e-1)}, {FN (log), ARG(-8.3886080e+06,8.3886080e+06), RES(1.6288958743158714771e1, 2.3561944901923449288e0)}, {FN (log), ARG(-8.3886080e+06,-8.3886080e+06), RES(1.6288958743158714771e1, -2.3561944901923449288e0)}, {FN (log10), ARG(1.19209289550781250e-07,0.0e+00), RES(-6.9236899002715674899e0, 0.0)}, {FN (log10), ARG(-1.19209289550781250e-07,0.0e+00), RES(-6.9236899002715674899e0, 1.3643763538418413475e0)}, {FN (log10), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(-6.7731749024395768923e0, 3.4109408846046033687e-1)}, {FN (log10), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(-6.7731749024395768923e0, -3.4109408846046033687e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(-6.7731749024395768923e0, 1.0232822653813810106e0)}, {FN (log10), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(-6.7731749024395768923e0, -1.0232822653813810106e0)}, {FN (log10), ARG(1.19209289550781250e-07,5.0e-01), RES(-3.0102999566396885182e-1, 6.8218807337704738672e-1)}, {FN (log10), ARG(1.19209289550781250e-07,-5.0e-01), RES(-3.0102999566396885182e-1, -6.8218807337704738672e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,5.0e-01), RES(-3.0102999566396885182e-1, 6.8218828046479396076e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,-5.0e-01), RES(-3.0102999566396885182e-1, -6.8218828046479396076e-1)}, {FN (log10), ARG(1.19209289550781250e-07,1.0e+00), RES(3.0858478929704968280e-15, 6.8218812514898403023e-1)}, {FN (log10), ARG(1.19209289550781250e-07,-1.0e+00), RES(3.0858478929704968280e-15, -6.8218812514898403023e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,1.0e+00), RES(3.0858478929704968280e-15, 6.8218822869285731725e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,-1.0e+00), RES(3.0858478929704968280e-15, -6.8218822869285731725e-1)}, {FN (log10), ARG(1.19209289550781250e-07,2.0e+00), RES(3.0102999566398196668e-1, 6.8218815103495235199e-1)}, {FN (log10), ARG(1.19209289550781250e-07,-2.0e+00), RES(3.0102999566398196668e-1, -6.8218815103495235199e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,2.0e+00), RES(3.0102999566398196668e-1, 6.8218820280688899550e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,-2.0e+00), RES(3.0102999566398196668e-1, -6.8218820280688899550e-1)}, {FN (log10), ARG(1.19209289550781250e-07,8.3886080e+06), RES(6.9236899002715674899e0, 6.8218817692091450205e-1)}, {FN (log10), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(6.9236899002715674899e0, -6.8218817692091450205e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(6.9236899002715674899e0, 6.8218817692092684544e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(6.9236899002715674899e0, -6.8218817692092684544e-1)}, {FN (log10), ARG(5.0e-01,0.0e+00), RES(-3.0102999566398119521e-1, 0.0)}, {FN (log10), ARG(-5.0e-01,0.0e+00), RES(-3.0102999566398119521e-1, 1.3643763538418413475e0)}, {FN (log10), ARG(5.0e-01,1.19209289550781250e-07), RES(-3.0102999566396885182e-1, 1.0354387328702058762e-7)}, {FN (log10), ARG(5.0e-01,-1.19209289550781250e-07), RES(-3.0102999566396885182e-1, -1.0354387328702058762e-7)}, {FN (log10), ARG(-5.0e-01,1.19209289550781250e-07), RES(-3.0102999566396885182e-1, 1.3643762502979680605e0)}, {FN (log10), ARG(-5.0e-01,-1.19209289550781250e-07), RES(-3.0102999566396885182e-1, -1.3643762502979680605e0)}, {FN (log10), ARG(5.0e-01,5.0e-01), RES(-1.5051499783199059761e-1, 3.4109408846046033687e-1)}, {FN (log10), ARG(5.0e-01,-5.0e-01), RES(-1.5051499783199059761e-1, -3.4109408846046033687e-1)}, {FN (log10), ARG(-5.0e-01,5.0e-01), RES(-1.5051499783199059761e-1, 1.0232822653813810106e0)}, {FN (log10), ARG(-5.0e-01,-5.0e-01), RES(-1.5051499783199059761e-1, -1.0232822653813810106e0)}, {FN (log10), ARG(5.0e-01,1.0e+00), RES(4.8455006504028207179e-2, 4.8082857878423410270e-1)}, {FN (log10), ARG(5.0e-01,-1.0e+00), RES(4.8455006504028207179e-2, -4.8082857878423410270e-1)}, {FN (log10), ARG(-5.0e-01,1.0e+00), RES(4.8455006504028207179e-2, 8.8354777505760724478e-1)}, {FN (log10), ARG(-5.0e-01,-1.0e+00), RES(4.8455006504028207179e-2, -8.8354777505760724478e-1)}, {FN (log10), ARG(5.0e-01,2.0e+00), RES(3.1419446502515576906e-1, 5.7579529534088794354e-1)}, {FN (log10), ARG(5.0e-01,-2.0e+00), RES(3.1419446502515576906e-1, -5.7579529534088794354e-1)}, {FN (log10), ARG(-5.0e-01,2.0e+00), RES(3.1419446502515576906e-1, 7.8858105850095340394e-1)}, {FN (log10), ARG(-5.0e-01,-2.0e+00), RES(3.1419446502515576906e-1, -7.8858105850095340394e-1)}, {FN (log10), ARG(5.0e-01,8.3886080e+06), RES(6.9236899002715682614e0, 6.8218815103495235199e-1)}, {FN (log10), ARG(5.0e-01,-8.3886080e+06), RES(6.9236899002715682614e0, -6.8218815103495235199e-1)}, {FN (log10), ARG(-5.0e-01,8.3886080e+06), RES(6.9236899002715682614e0, 6.8218820280688899550e-1)}, {FN (log10), ARG(-5.0e-01,-8.3886080e+06), RES(6.9236899002715682614e0, -6.8218820280688899550e-1)}, {FN (log10), ARG(1.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (log10), ARG(-1.0e+00,0.0e+00), RES(0, 1.3643763538418413475e0)}, {FN (log10), ARG(1.0e+00,1.19209289550781250e-07), RES(3.0858478929704968280e-15, 5.1771936643511029532e-8)}, {FN (log10), ARG(1.0e+00,-1.19209289550781250e-07), RES(3.0858478929704968280e-15, -5.1771936643511029532e-8)}, {FN (log10), ARG(-1.0e+00,1.19209289550781250e-07), RES(3.0858478929704968280e-15, 1.3643763020699047040e0)}, {FN (log10), ARG(-1.0e+00,-1.19209289550781250e-07), RES(3.0858478929704968280e-15, -1.3643763020699047040e0)}, {FN (log10), ARG(1.0e+00,5.0e-01), RES(4.8455006504028207179e-2, 2.0135959813668657104e-1)}, {FN (log10), ARG(1.0e+00,-5.0e-01), RES(4.8455006504028207179e-2, -2.0135959813668657104e-1)}, {FN (log10), ARG(-1.0e+00,5.0e-01), RES(4.8455006504028207179e-2, 1.1630167557051547764e0)}, {FN (log10), ARG(-1.0e+00,-5.0e-01), RES(4.8455006504028207179e-2, -1.1630167557051547764e0)}, {FN (log10), ARG(1.0e+00,1.0e+00), RES(1.5051499783199059761e-1, 3.4109408846046033687e-1)}, {FN (log10), ARG(1.0e+00,-1.0e+00), RES(1.5051499783199059761e-1, -3.4109408846046033687e-1)}, {FN (log10), ARG(-1.0e+00,1.0e+00), RES(1.5051499783199059761e-1, 1.0232822653813810106e0)}, {FN (log10), ARG(-1.0e+00,-1.0e+00), RES(1.5051499783199059761e-1, -1.0232822653813810106e0)}, {FN (log10), ARG(1.0e+00,2.0e+00), RES(3.4948500216800940239e-1, 4.8082857878423410270e-1)}, {FN (log10), ARG(1.0e+00,-2.0e+00), RES(3.4948500216800940239e-1, -4.8082857878423410270e-1)}, {FN (log10), ARG(-1.0e+00,2.0e+00), RES(3.4948500216800940239e-1, 8.8354777505760724478e-1)}, {FN (log10), ARG(-1.0e+00,-2.0e+00), RES(3.4948500216800940239e-1, -8.8354777505760724478e-1)}, {FN (log10), ARG(1.0e+00,8.3886080e+06), RES(6.9236899002715705758e0, 6.8218812514898403023e-1)}, {FN (log10), ARG(1.0e+00,-8.3886080e+06), RES(6.9236899002715705758e0, -6.8218812514898403023e-1)}, {FN (log10), ARG(-1.0e+00,8.3886080e+06), RES(6.9236899002715705758e0, 6.8218822869285731725e-1)}, {FN (log10), ARG(-1.0e+00,-8.3886080e+06), RES(6.9236899002715705758e0, -6.8218822869285731725e-1)}, {FN (log10), ARG(2.0e+00,0.0e+00), RES(3.0102999566398119521e-1, 0.0)}, {FN (log10), ARG(-2.0e+00,0.0e+00), RES(3.0102999566398119521e-1, 1.3643763538418413475e0)}, {FN (log10), ARG(2.0e+00,1.19209289550781250e-07), RES(3.0102999566398196668e-1, 2.5885968321755606731e-8)}, {FN (log10), ARG(2.0e+00,-1.19209289550781250e-07), RES(3.0102999566398196668e-1, -2.5885968321755606731e-8)}, {FN (log10), ARG(-2.0e+00,1.19209289550781250e-07), RES(3.0102999566398196668e-1, 1.3643763279558730257e0)}, {FN (log10), ARG(-2.0e+00,-1.19209289550781250e-07), RES(3.0102999566398196668e-1, -1.3643763279558730257e0)}, {FN (log10), ARG(2.0e+00,5.0e-01), RES(3.1419446502515576906e-1, 1.0639288158003273020e-1)}, {FN (log10), ARG(2.0e+00,-5.0e-01), RES(3.1419446502515576906e-1, -1.0639288158003273020e-1)}, {FN (log10), ARG(-2.0e+00,5.0e-01), RES(3.1419446502515576906e-1, 1.2579834722618086173e0)}, {FN (log10), ARG(-2.0e+00,-5.0e-01), RES(3.1419446502515576906e-1, -1.2579834722618086173e0)}, {FN (log10), ARG(2.0e+00,1.0e+00), RES(3.4948500216800940239e-1, 2.0135959813668657104e-1)}, {FN (log10), ARG(2.0e+00,-1.0e+00), RES(3.4948500216800940239e-1, -2.0135959813668657104e-1)}, {FN (log10), ARG(-2.0e+00,1.0e+00), RES(3.4948500216800940239e-1, 1.1630167557051547764e0)}, {FN (log10), ARG(-2.0e+00,-1.0e+00), RES(3.4948500216800940239e-1, -1.1630167557051547764e0)}, {FN (log10), ARG(2.0e+00,2.0e+00), RES(4.5154499349597179282e-1, 3.4109408846046033687e-1)}, {FN (log10), ARG(2.0e+00,-2.0e+00), RES(4.5154499349597179282e-1, -3.4109408846046033687e-1)}, {FN (log10), ARG(-2.0e+00,2.0e+00), RES(4.5154499349597179282e-1, 1.0232822653813810106e0)}, {FN (log10), ARG(-2.0e+00,-2.0e+00), RES(4.5154499349597179282e-1, -1.0232822653813810106e0)}, {FN (log10), ARG(2.0e+00,8.3886080e+06), RES(6.9236899002715798333e0, 6.8218807337704738672e-1)}, {FN (log10), ARG(2.0e+00,-8.3886080e+06), RES(6.9236899002715798333e0, -6.8218807337704738672e-1)}, {FN (log10), ARG(-2.0e+00,8.3886080e+06), RES(6.9236899002715798333e0, 6.8218828046479396076e-1)}, {FN (log10), ARG(-2.0e+00,-8.3886080e+06), RES(6.9236899002715798333e0, -6.8218828046479396076e-1)}, {FN (log10), ARG(8.3886080e+06,0.0e+00), RES(6.9236899002715674899e0, 0.0)}, {FN (log10), ARG(-8.3886080e+06,0.0e+00), RES(6.9236899002715674899e0, 1.3643763538418413475e0)}, {FN (log10), ARG(8.3886080e+06,1.19209289550781250e-07), RES(6.9236899002715674899e0, 6.1716957859410375086e-15)}, {FN (log10), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(6.9236899002715674899e0, -6.1716957859410375086e-15)}, {FN (log10), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(6.9236899002715674899e0, 1.3643763538418351758e0)}, {FN (log10), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(6.9236899002715674899e0, -1.3643763538418351758e0)}, {FN (log10), ARG(8.3886080e+06,5.0e-01), RES(6.9236899002715682614e0, 2.5885968321755606731e-8)}, {FN (log10), ARG(8.3886080e+06,-5.0e-01), RES(6.9236899002715682614e0, -2.5885968321755606731e-8)}, {FN (log10), ARG(-8.3886080e+06,5.0e-01), RES(6.9236899002715682614e0, 1.3643763279558730257e0)}, {FN (log10), ARG(-8.3886080e+06,-5.0e-01), RES(6.9236899002715682614e0, -1.3643763279558730257e0)}, {FN (log10), ARG(8.3886080e+06,1.0e+00), RES(6.9236899002715705758e0, 5.1771936643511029532e-8)}, {FN (log10), ARG(8.3886080e+06,-1.0e+00), RES(6.9236899002715705758e0, -5.1771936643511029532e-8)}, {FN (log10), ARG(-8.3886080e+06,1.0e+00), RES(6.9236899002715705758e0, 1.3643763020699047040e0)}, {FN (log10), ARG(-8.3886080e+06,-1.0e+00), RES(6.9236899002715705758e0, -1.3643763020699047040e0)}, {FN (log10), ARG(8.3886080e+06,2.0e+00), RES(6.9236899002715798333e0, 1.0354387328702058762e-7)}, {FN (log10), ARG(8.3886080e+06,-2.0e+00), RES(6.9236899002715798333e0, -1.0354387328702058762e-7)}, {FN (log10), ARG(-8.3886080e+06,2.0e+00), RES(6.9236899002715798333e0, 1.3643762502979680605e0)}, {FN (log10), ARG(-8.3886080e+06,-2.0e+00), RES(6.9236899002715798333e0, -1.3643762502979680605e0)}, {FN (log10), ARG(8.3886080e+06,8.3886080e+06), RES(7.0742048981035580875e0, 3.4109408846046033687e-1)}, {FN (log10), ARG(8.3886080e+06,-8.3886080e+06), RES(7.0742048981035580875e0, -3.4109408846046033687e-1)}, {FN (log10), ARG(-8.3886080e+06,8.3886080e+06), RES(7.0742048981035580875e0, 1.0232822653813810106e0)}, {FN (log10), ARG(-8.3886080e+06,-8.3886080e+06), RES(7.0742048981035580875e0, -1.0232822653813810106e0)}, {FN (log10), ARG(0.0e+00,1.19209289550781250e-07), RES(-6.9236899002715674899e0, 6.8218817692092067374e-1)}, {FN (log10), ARG(0.0e+00,-1.19209289550781250e-07), RES(-6.9236899002715674899e0, -6.8218817692092067374e-1)}, {FN (log10), ARG(0.0e+00,5.0e-01), RES(-3.0102999566398119521e-1, 6.8218817692092067374e-1)}, {FN (log10), ARG(0.0e+00,-5.0e-01), RES(-3.0102999566398119521e-1, -6.8218817692092067374e-1)}, {FN (log10), ARG(0.0e+00,1.0e+00), RES(0, 6.8218817692092067374e-1)}, {FN (log10), ARG(0.0e+00,-1.0e+00), RES(0, -6.8218817692092067374e-1)}, {FN (log10), ARG(0.0e+00,2.0e+00), RES(3.0102999566398119521e-1, 6.8218817692092067374e-1)}, {FN (log10), ARG(0.0e+00,-2.0e+00), RES(3.0102999566398119521e-1, -6.8218817692092067374e-1)}, {FN (log10), ARG(0.0e+00,8.3886080e+06), RES(6.9236899002715674899e0, 6.8218817692092067374e-1)}, {FN (log10), ARG(0.0e+00,-8.3886080e+06), RES(6.9236899002715674899e0, -6.8218817692092067374e-1)}, {FN (log10), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(-6.7731749024395768923e0, 3.4109408846046033687e-1)}, {FN (log10), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(-6.7731749024395768923e0, -3.4109408846046033687e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(-6.7731749024395768923e0, 1.0232822653813810106e0)}, {FN (log10), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(-6.7731749024395768923e0, -1.0232822653813810106e0)}, {FN (log10), ARG(1.19209289550781250e-07,5.0e-01), RES(-3.0102999566396885182e-1, 6.8218807337704738672e-1)}, {FN (log10), ARG(1.19209289550781250e-07,-5.0e-01), RES(-3.0102999566396885182e-1, -6.8218807337704738672e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,5.0e-01), RES(-3.0102999566396885182e-1, 6.8218828046479396076e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,-5.0e-01), RES(-3.0102999566396885182e-1, -6.8218828046479396076e-1)}, {FN (log10), ARG(1.19209289550781250e-07,1.0e+00), RES(3.0858478929704968280e-15, 6.8218812514898403023e-1)}, {FN (log10), ARG(1.19209289550781250e-07,-1.0e+00), RES(3.0858478929704968280e-15, -6.8218812514898403023e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,1.0e+00), RES(3.0858478929704968280e-15, 6.8218822869285731725e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,-1.0e+00), RES(3.0858478929704968280e-15, -6.8218822869285731725e-1)}, {FN (log10), ARG(1.19209289550781250e-07,2.0e+00), RES(3.0102999566398196668e-1, 6.8218815103495235199e-1)}, {FN (log10), ARG(1.19209289550781250e-07,-2.0e+00), RES(3.0102999566398196668e-1, -6.8218815103495235199e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,2.0e+00), RES(3.0102999566398196668e-1, 6.8218820280688899550e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,-2.0e+00), RES(3.0102999566398196668e-1, -6.8218820280688899550e-1)}, {FN (log10), ARG(1.19209289550781250e-07,8.3886080e+06), RES(6.9236899002715674899e0, 6.8218817692091450205e-1)}, {FN (log10), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(6.9236899002715674899e0, -6.8218817692091450205e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(6.9236899002715674899e0, 6.8218817692092684544e-1)}, {FN (log10), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(6.9236899002715674899e0, -6.8218817692092684544e-1)}, {FN (log10), ARG(5.0e-01,1.19209289550781250e-07), RES(-3.0102999566396885182e-1, 1.0354387328702058762e-7)}, {FN (log10), ARG(5.0e-01,-1.19209289550781250e-07), RES(-3.0102999566396885182e-1, -1.0354387328702058762e-7)}, {FN (log10), ARG(-5.0e-01,1.19209289550781250e-07), RES(-3.0102999566396885182e-1, 1.3643762502979680605e0)}, {FN (log10), ARG(-5.0e-01,-1.19209289550781250e-07), RES(-3.0102999566396885182e-1, -1.3643762502979680605e0)}, {FN (log10), ARG(5.0e-01,5.0e-01), RES(-1.5051499783199059761e-1, 3.4109408846046033687e-1)}, {FN (log10), ARG(5.0e-01,-5.0e-01), RES(-1.5051499783199059761e-1, -3.4109408846046033687e-1)}, {FN (log10), ARG(-5.0e-01,5.0e-01), RES(-1.5051499783199059761e-1, 1.0232822653813810106e0)}, {FN (log10), ARG(-5.0e-01,-5.0e-01), RES(-1.5051499783199059761e-1, -1.0232822653813810106e0)}, {FN (log10), ARG(5.0e-01,1.0e+00), RES(4.8455006504028207179e-2, 4.8082857878423410270e-1)}, {FN (log10), ARG(5.0e-01,-1.0e+00), RES(4.8455006504028207179e-2, -4.8082857878423410270e-1)}, {FN (log10), ARG(-5.0e-01,1.0e+00), RES(4.8455006504028207179e-2, 8.8354777505760724478e-1)}, {FN (log10), ARG(-5.0e-01,-1.0e+00), RES(4.8455006504028207179e-2, -8.8354777505760724478e-1)}, {FN (log10), ARG(5.0e-01,2.0e+00), RES(3.1419446502515576906e-1, 5.7579529534088794354e-1)}, {FN (log10), ARG(5.0e-01,-2.0e+00), RES(3.1419446502515576906e-1, -5.7579529534088794354e-1)}, {FN (log10), ARG(-5.0e-01,2.0e+00), RES(3.1419446502515576906e-1, 7.8858105850095340394e-1)}, {FN (log10), ARG(-5.0e-01,-2.0e+00), RES(3.1419446502515576906e-1, -7.8858105850095340394e-1)}, {FN (log10), ARG(5.0e-01,8.3886080e+06), RES(6.9236899002715682614e0, 6.8218815103495235199e-1)}, {FN (log10), ARG(5.0e-01,-8.3886080e+06), RES(6.9236899002715682614e0, -6.8218815103495235199e-1)}, {FN (log10), ARG(-5.0e-01,8.3886080e+06), RES(6.9236899002715682614e0, 6.8218820280688899550e-1)}, {FN (log10), ARG(-5.0e-01,-8.3886080e+06), RES(6.9236899002715682614e0, -6.8218820280688899550e-1)}, {FN (log10), ARG(1.0e+00,1.19209289550781250e-07), RES(3.0858478929704968280e-15, 5.1771936643511029532e-8)}, {FN (log10), ARG(1.0e+00,-1.19209289550781250e-07), RES(3.0858478929704968280e-15, -5.1771936643511029532e-8)}, {FN (log10), ARG(-1.0e+00,1.19209289550781250e-07), RES(3.0858478929704968280e-15, 1.3643763020699047040e0)}, {FN (log10), ARG(-1.0e+00,-1.19209289550781250e-07), RES(3.0858478929704968280e-15, -1.3643763020699047040e0)}, {FN (log10), ARG(1.0e+00,5.0e-01), RES(4.8455006504028207179e-2, 2.0135959813668657104e-1)}, {FN (log10), ARG(1.0e+00,-5.0e-01), RES(4.8455006504028207179e-2, -2.0135959813668657104e-1)}, {FN (log10), ARG(-1.0e+00,5.0e-01), RES(4.8455006504028207179e-2, 1.1630167557051547764e0)}, {FN (log10), ARG(-1.0e+00,-5.0e-01), RES(4.8455006504028207179e-2, -1.1630167557051547764e0)}, {FN (log10), ARG(1.0e+00,1.0e+00), RES(1.5051499783199059761e-1, 3.4109408846046033687e-1)}, {FN (log10), ARG(1.0e+00,-1.0e+00), RES(1.5051499783199059761e-1, -3.4109408846046033687e-1)}, {FN (log10), ARG(-1.0e+00,1.0e+00), RES(1.5051499783199059761e-1, 1.0232822653813810106e0)}, {FN (log10), ARG(-1.0e+00,-1.0e+00), RES(1.5051499783199059761e-1, -1.0232822653813810106e0)}, {FN (log10), ARG(1.0e+00,2.0e+00), RES(3.4948500216800940239e-1, 4.8082857878423410270e-1)}, {FN (log10), ARG(1.0e+00,-2.0e+00), RES(3.4948500216800940239e-1, -4.8082857878423410270e-1)}, {FN (log10), ARG(-1.0e+00,2.0e+00), RES(3.4948500216800940239e-1, 8.8354777505760724478e-1)}, {FN (log10), ARG(-1.0e+00,-2.0e+00), RES(3.4948500216800940239e-1, -8.8354777505760724478e-1)}, {FN (log10), ARG(1.0e+00,8.3886080e+06), RES(6.9236899002715705758e0, 6.8218812514898403023e-1)}, {FN (log10), ARG(1.0e+00,-8.3886080e+06), RES(6.9236899002715705758e0, -6.8218812514898403023e-1)}, {FN (log10), ARG(-1.0e+00,8.3886080e+06), RES(6.9236899002715705758e0, 6.8218822869285731725e-1)}, {FN (log10), ARG(-1.0e+00,-8.3886080e+06), RES(6.9236899002715705758e0, -6.8218822869285731725e-1)}, {FN (log10), ARG(2.0e+00,1.19209289550781250e-07), RES(3.0102999566398196668e-1, 2.5885968321755606731e-8)}, {FN (log10), ARG(2.0e+00,-1.19209289550781250e-07), RES(3.0102999566398196668e-1, -2.5885968321755606731e-8)}, {FN (log10), ARG(-2.0e+00,1.19209289550781250e-07), RES(3.0102999566398196668e-1, 1.3643763279558730257e0)}, {FN (log10), ARG(-2.0e+00,-1.19209289550781250e-07), RES(3.0102999566398196668e-1, -1.3643763279558730257e0)}, {FN (log10), ARG(2.0e+00,5.0e-01), RES(3.1419446502515576906e-1, 1.0639288158003273020e-1)}, {FN (log10), ARG(2.0e+00,-5.0e-01), RES(3.1419446502515576906e-1, -1.0639288158003273020e-1)}, {FN (log10), ARG(-2.0e+00,5.0e-01), RES(3.1419446502515576906e-1, 1.2579834722618086173e0)}, {FN (log10), ARG(-2.0e+00,-5.0e-01), RES(3.1419446502515576906e-1, -1.2579834722618086173e0)}, {FN (log10), ARG(2.0e+00,1.0e+00), RES(3.4948500216800940239e-1, 2.0135959813668657104e-1)}, {FN (log10), ARG(2.0e+00,-1.0e+00), RES(3.4948500216800940239e-1, -2.0135959813668657104e-1)}, {FN (log10), ARG(-2.0e+00,1.0e+00), RES(3.4948500216800940239e-1, 1.1630167557051547764e0)}, {FN (log10), ARG(-2.0e+00,-1.0e+00), RES(3.4948500216800940239e-1, -1.1630167557051547764e0)}, {FN (log10), ARG(2.0e+00,2.0e+00), RES(4.5154499349597179282e-1, 3.4109408846046033687e-1)}, {FN (log10), ARG(2.0e+00,-2.0e+00), RES(4.5154499349597179282e-1, -3.4109408846046033687e-1)}, {FN (log10), ARG(-2.0e+00,2.0e+00), RES(4.5154499349597179282e-1, 1.0232822653813810106e0)}, {FN (log10), ARG(-2.0e+00,-2.0e+00), RES(4.5154499349597179282e-1, -1.0232822653813810106e0)}, {FN (log10), ARG(2.0e+00,8.3886080e+06), RES(6.9236899002715798333e0, 6.8218807337704738672e-1)}, {FN (log10), ARG(2.0e+00,-8.3886080e+06), RES(6.9236899002715798333e0, -6.8218807337704738672e-1)}, {FN (log10), ARG(-2.0e+00,8.3886080e+06), RES(6.9236899002715798333e0, 6.8218828046479396076e-1)}, {FN (log10), ARG(-2.0e+00,-8.3886080e+06), RES(6.9236899002715798333e0, -6.8218828046479396076e-1)}, {FN (log10), ARG(8.3886080e+06,1.19209289550781250e-07), RES(6.9236899002715674899e0, 6.1716957859410375086e-15)}, {FN (log10), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(6.9236899002715674899e0, -6.1716957859410375086e-15)}, {FN (log10), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(6.9236899002715674899e0, 1.3643763538418351758e0)}, {FN (log10), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(6.9236899002715674899e0, -1.3643763538418351758e0)}, {FN (log10), ARG(8.3886080e+06,5.0e-01), RES(6.9236899002715682614e0, 2.5885968321755606731e-8)}, {FN (log10), ARG(8.3886080e+06,-5.0e-01), RES(6.9236899002715682614e0, -2.5885968321755606731e-8)}, {FN (log10), ARG(-8.3886080e+06,5.0e-01), RES(6.9236899002715682614e0, 1.3643763279558730257e0)}, {FN (log10), ARG(-8.3886080e+06,-5.0e-01), RES(6.9236899002715682614e0, -1.3643763279558730257e0)}, {FN (log10), ARG(8.3886080e+06,1.0e+00), RES(6.9236899002715705758e0, 5.1771936643511029532e-8)}, {FN (log10), ARG(8.3886080e+06,-1.0e+00), RES(6.9236899002715705758e0, -5.1771936643511029532e-8)}, {FN (log10), ARG(-8.3886080e+06,1.0e+00), RES(6.9236899002715705758e0, 1.3643763020699047040e0)}, {FN (log10), ARG(-8.3886080e+06,-1.0e+00), RES(6.9236899002715705758e0, -1.3643763020699047040e0)}, {FN (log10), ARG(8.3886080e+06,2.0e+00), RES(6.9236899002715798333e0, 1.0354387328702058762e-7)}, {FN (log10), ARG(8.3886080e+06,-2.0e+00), RES(6.9236899002715798333e0, -1.0354387328702058762e-7)}, {FN (log10), ARG(-8.3886080e+06,2.0e+00), RES(6.9236899002715798333e0, 1.3643762502979680605e0)}, {FN (log10), ARG(-8.3886080e+06,-2.0e+00), RES(6.9236899002715798333e0, -1.3643762502979680605e0)}, {FN (log10), ARG(8.3886080e+06,8.3886080e+06), RES(7.0742048981035580875e0, 3.4109408846046033687e-1)}, {FN (log10), ARG(8.3886080e+06,-8.3886080e+06), RES(7.0742048981035580875e0, -3.4109408846046033687e-1)}, {FN (log10), ARG(-8.3886080e+06,8.3886080e+06), RES(7.0742048981035580875e0, 1.0232822653813810106e0)}, {FN (log10), ARG(-8.3886080e+06,-8.3886080e+06), RES(7.0742048981035580875e0, -1.0232822653813810106e0)}, {FN (exp), ARG(0.0e+00,-3.45266983001243932001e-04), RES(9.9999994039535581673e-1, -3.4526697614140534807e-4)}, {FN (exp), ARG(0.0e+00,3.45266983001243932001e-04), RES(9.9999994039535581673e-1, 3.4526697614140534807e-4)}, {FN (exp), ARG(0.0e+00,1.57045105981189525579e+00), RES(3.4526697614152485627e-4, 9.9999994039535581669e-1)}, {FN (exp), ARG(0.0e+00,-1.57045105981189525579e+00), RES(3.4526697614152485627e-4, -9.9999994039535581669e-1)}, {FN (exp), ARG(0.0e+00,1.57114159377789786021e+00), RES(-3.4526697614140239160e-4, 9.9999994039535581673e-1)}, {FN (exp), ARG(0.0e+00,-1.57114159377789786021e+00), RES(-3.4526697614140239160e-4, -9.9999994039535581673e-1)}, {FN (exp), ARG(0.0e+00,3.14124738660679181379e+00), RES(-9.9999994039535581667e-1, 3.4526697614158608860e-4)}, {FN (exp), ARG(0.0e+00,-3.14124738660679181379e+00), RES(-9.9999994039535581667e-1, -3.4526697614158608860e-4)}, {FN (exp), ARG(0.0e+00,3.14193792057279441821e+00), RES(-9.9999994039535581675e-1, -3.4526697614134115926e-4)}, {FN (exp), ARG(0.0e+00,-3.14193792057279441821e+00), RES(-9.9999994039535581675e-1, 3.4526697614134115926e-4)}, {FN (exp), ARG(0.0e+00,4.71204371340168837179e+00), RES(-3.4526697614164732094e-4, -9.9999994039535581664e-1)}, {FN (exp), ARG(0.0e+00,-4.71204371340168837179e+00), RES(-3.4526697614164732094e-4, 9.9999994039535581664e-1)}, {FN (exp), ARG(0.0e+00,4.71273424736769097620e+00), RES(3.4526697614127992692e-4, -9.9999994039535581677e-1)}, {FN (exp), ARG(0.0e+00,-4.71273424736769097620e+00), RES(3.4526697614127992692e-4, 9.9999994039535581677e-1)}, {FN (exp), ARG(0.0e+00,6.28284004019658492979e+00), RES(9.9999994039535581662e-1, -3.4526697614170855328e-4)}, {FN (exp), ARG(0.0e+00,-6.28284004019658492979e+00), RES(9.9999994039535581662e-1, 3.4526697614170855328e-4)}, {FN (exp), ARG(0.0e+00,6.28353057416258753420e+00), RES(9.9999994039535581679e-1, 3.4526697614121869459e-4)}, {FN (exp), ARG(0.0e+00,-6.28353057416258753420e+00), RES(9.9999994039535581679e-1, -3.4526697614121869459e-4)}, {FN (exp), ARG(0.0e+00,9.42443269378637893396e+00), RES(-9.9999994039535581689e-1, 3.4526697614094283958e-4)}, {FN (exp), ARG(0.0e+00,-9.42443269378637893396e+00), RES(-9.9999994039535581689e-1, -3.4526697614094283958e-4)}, {FN (exp), ARG(0.0e+00,9.42512322775237976202e+00), RES(-9.9999994039535581714e-1, -3.4526697614020805155e-4)}, {FN (exp), ARG(0.0e+00,-9.42512322775237976202e+00), RES(-9.9999994039535581714e-1, 3.4526697614020805155e-4)}, {FN (exp), ARG(1.19209289550781250e-07,-3.45266983001243932001e-04), RES(1.0000000596046453675e0, -3.4526701730043873250e-4)}, {FN (exp), ARG(1.19209289550781250e-07,3.45266983001243932001e-04), RES(1.0000000596046453675e0, 3.4526701730043873250e-4)}, {FN (exp), ARG(-1.19209289550781250e-07,-3.45266983001243932001e-04), RES(9.9999982118608047680e-1, -3.4526693498237687017e-4)}, {FN (exp), ARG(-1.19209289550781250e-07,3.45266983001243932001e-04), RES(9.9999982118608047680e-1, 3.4526693498237687017e-4)}, {FN (exp), ARG(1.19209289550781250e-07,1.57045105981189525579e+00), RES(3.4526701730055824072e-4, 1.0000000596046453675e0)}, {FN (exp), ARG(1.19209289550781250e-07,-1.57045105981189525579e+00), RES(3.4526701730055824072e-4, -1.0000000596046453675e0)}, {FN (exp), ARG(-1.19209289550781250e-07,1.57045105981189525579e+00), RES(3.4526693498249637836e-4, 9.9999982118608047676e-1)}, {FN (exp), ARG(-1.19209289550781250e-07,-1.57045105981189525579e+00), RES(3.4526693498249637836e-4, -9.9999982118608047676e-1)}, {FN (exp), ARG(1.19209289550781250e-07,1.57114159377789786021e+00), RES(-3.4526701730043577603e-4, 1.0000000596046453675e0)}, {FN (exp), ARG(1.19209289550781250e-07,-1.57114159377789786021e+00), RES(-3.4526701730043577603e-4, -1.0000000596046453675e0)}, {FN (exp), ARG(-1.19209289550781250e-07,1.57114159377789786021e+00), RES(-3.4526693498237391370e-4, 9.9999982118608047680e-1)}, {FN (exp), ARG(-1.19209289550781250e-07,-1.57114159377789786021e+00), RES(-3.4526693498237391370e-4, -9.9999982118608047680e-1)}, {FN (exp), ARG(1.19209289550781250e-07,3.14124738660679181379e+00), RES(-1.0000000596046453674e0, 3.4526701730061947306e-4)}, {FN (exp), ARG(1.19209289550781250e-07,-3.14124738660679181379e+00), RES(-1.0000000596046453674e0, -3.4526701730061947306e-4)}, {FN (exp), ARG(-1.19209289550781250e-07,3.14124738660679181379e+00), RES(-9.9999982118608047674e-1, 3.4526693498255761069e-4)}, {FN (exp), ARG(-1.19209289550781250e-07,-3.14124738660679181379e+00), RES(-9.9999982118608047674e-1, -3.4526693498255761069e-4)}, {FN (exp), ARG(1.19209289550781250e-07,3.14193792057279441821e+00), RES(-1.0000000596046453675e0, -3.4526701730037454368e-4)}, {FN (exp), ARG(1.19209289550781250e-07,-3.14193792057279441821e+00), RES(-1.0000000596046453675e0, 3.4526701730037454368e-4)}, {FN (exp), ARG(-1.19209289550781250e-07,3.14193792057279441821e+00), RES(-9.9999982118608047682e-1, -3.4526693498231268137e-4)}, {FN (exp), ARG(-1.19209289550781250e-07,-3.14193792057279441821e+00), RES(-9.9999982118608047682e-1, 3.4526693498231268137e-4)}, {FN (exp), ARG(1.19209289550781250e-07,4.71204371340168837179e+00), RES(-3.4526701730068070540e-4, -1.0000000596046453674e0)}, {FN (exp), ARG(1.19209289550781250e-07,-4.71204371340168837179e+00), RES(-3.4526701730068070540e-4, 1.0000000596046453674e0)}, {FN (exp), ARG(-1.19209289550781250e-07,4.71204371340168837179e+00), RES(-3.4526693498261884302e-4, -9.9999982118608047672e-1)}, {FN (exp), ARG(-1.19209289550781250e-07,-4.71204371340168837179e+00), RES(-3.4526693498261884302e-4, 9.9999982118608047672e-1)}, {FN (exp), ARG(1.19209289550781250e-07,4.71273424736769097620e+00), RES(3.4526701730031331134e-4, -1.0000000596046453676e0)}, {FN (exp), ARG(1.19209289550781250e-07,-4.71273424736769097620e+00), RES(3.4526701730031331134e-4, 1.0000000596046453676e0)}, {FN (exp), ARG(-1.19209289550781250e-07,4.71273424736769097620e+00), RES(3.4526693498225144904e-4, -9.9999982118608047684e-1)}, {FN (exp), ARG(-1.19209289550781250e-07,-4.71273424736769097620e+00), RES(3.4526693498225144904e-4, 9.9999982118608047684e-1)}, {FN (exp), ARG(1.19209289550781250e-07,6.28284004019658492979e+00), RES(1.0000000596046453674e0, -3.4526701730074193775e-4)}, {FN (exp), ARG(1.19209289550781250e-07,-6.28284004019658492979e+00), RES(1.0000000596046453674e0, 3.4526701730074193775e-4)}, {FN (exp), ARG(-1.19209289550781250e-07,6.28284004019658492979e+00), RES(9.9999982118608047670e-1, -3.4526693498268007535e-4)}, {FN (exp), ARG(-1.19209289550781250e-07,-6.28284004019658492979e+00), RES(9.9999982118608047670e-1, 3.4526693498268007535e-4)}, {FN (exp), ARG(1.19209289550781250e-07,6.28353057416258753420e+00), RES(1.0000000596046453676e0, 3.452670173002520790e-4)}, {FN (exp), ARG(1.19209289550781250e-07,-6.28353057416258753420e+00), RES(1.0000000596046453676e0, -3.452670173002520790e-4)}, {FN (exp), ARG(-1.19209289550781250e-07,6.28353057416258753420e+00), RES(9.9999982118608047687e-1, 3.4526693498219021671e-4)}, {FN (exp), ARG(-1.19209289550781250e-07,-6.28353057416258753420e+00), RES(9.9999982118608047687e-1, -3.4526693498219021671e-4)}, {FN (exp), ARG(1.19209289550781250e-07,9.42443269378637893396e+00), RES(-1.0000000596046453677e0, 3.4526701729997622396e-4)}, {FN (exp), ARG(1.19209289550781250e-07,-9.42443269378637893396e+00), RES(-1.0000000596046453677e0, -3.4526701729997622396e-4)}, {FN (exp), ARG(-1.19209289550781250e-07,9.42443269378637893396e+00), RES(-9.9999982118608047696e-1, 3.4526693498191436174e-4)}, {FN (exp), ARG(-1.19209289550781250e-07,-9.42443269378637893396e+00), RES(-9.9999982118608047696e-1, -3.4526693498191436174e-4)}, {FN (exp), ARG(1.19209289550781250e-07,9.42512322775237976202e+00), RES(-1.0000000596046453679e0, -3.4526701729924143584e-4)}, {FN (exp), ARG(1.19209289550781250e-07,-9.42512322775237976202e+00), RES(-1.0000000596046453679e0, 3.4526701729924143584e-4)}, {FN (exp), ARG(-1.19209289550781250e-07,9.42512322775237976202e+00), RES(-9.9999982118608047721e-1, -3.4526693498117957380e-4)}, {FN (exp), ARG(-1.19209289550781250e-07,-9.42512322775237976202e+00), RES(-9.9999982118608047721e-1, 3.4526693498117957380e-4)}, {FN (exp), ARG(5.0e-01,-3.45266983001243932001e-04), RES(1.6487211724286834494e0, -5.6924900763464865323e-4)}, {FN (exp), ARG(5.0e-01,3.45266983001243932001e-04), RES(1.6487211724286834494e0, 5.6924900763464865323e-4)}, {FN (exp), ARG(-5.0e-01,-3.45266983001243932001e-04), RES(6.0653062356058926519e-1, -2.0941500681603265022e-4)}, {FN (exp), ARG(-5.0e-01,3.45266983001243932001e-04), RES(6.0653062356058926519e-1, 2.0941500681603265022e-4)}, {FN (exp), ARG(5.0e-01,1.57045105981189525579e+00), RES(5.6924900763484568894e-4, 1.6487211724286834493e0)}, {FN (exp), ARG(5.0e-01,-1.57045105981189525579e+00), RES(5.6924900763484568894e-4, -1.6487211724286834493e0)}, {FN (exp), ARG(-5.0e-01,1.57045105981189525579e+00), RES(2.0941500681610513560e-4, 6.0653062356058926516e-1)}, {FN (exp), ARG(-5.0e-01,-1.57045105981189525579e+00), RES(2.0941500681610513560e-4, -6.0653062356058926516e-1)}, {FN (exp), ARG(5.0e-01,1.57114159377789786021e+00), RES(-5.6924900763464377883e-4, 1.6487211724286834494e0)}, {FN (exp), ARG(5.0e-01,-1.57114159377789786021e+00), RES(-5.6924900763464377883e-4, -1.6487211724286834494e0)}, {FN (exp), ARG(-5.0e-01,1.57114159377789786021e+00), RES(-2.0941500681603085702e-4, 6.0653062356058926519e-1)}, {FN (exp), ARG(-5.0e-01,-1.57114159377789786021e+00), RES(-2.0941500681603085702e-4, -6.0653062356058926519e-1)}, {FN (exp), ARG(5.0e-01,3.14124738660679181379e+00), RES(-1.6487211724286834493e0, 5.6924900763494664399e-4)}, {FN (exp), ARG(5.0e-01,-3.14124738660679181379e+00), RES(-1.6487211724286834493e0, -5.6924900763494664399e-4)}, {FN (exp), ARG(-5.0e-01,3.14124738660679181379e+00), RES(-6.0653062356058926515e-1, 2.0941500681614227489e-4)}, {FN (exp), ARG(-5.0e-01,-3.14124738660679181379e+00), RES(-6.0653062356058926515e-1, -2.0941500681614227489e-4)}, {FN (exp), ARG(5.0e-01,3.14193792057279441821e+00), RES(-1.6487211724286834494e0, -5.6924900763454282377e-4)}, {FN (exp), ARG(5.0e-01,-3.14193792057279441821e+00), RES(-1.6487211724286834494e0, 5.6924900763454282377e-4)}, {FN (exp), ARG(-5.0e-01,3.14193792057279441821e+00), RES(-6.0653062356058926520e-1, -2.0941500681599371773e-4)}, {FN (exp), ARG(-5.0e-01,-3.14193792057279441821e+00), RES(-6.0653062356058926520e-1, 2.0941500681599371773e-4)}, {FN (exp), ARG(5.0e-01,4.71204371340168837179e+00), RES(-5.6924900763504759905e-4, -1.6487211724286834492e0)}, {FN (exp), ARG(5.0e-01,-4.71204371340168837179e+00), RES(-5.6924900763504759905e-4, 1.6487211724286834492e0)}, {FN (exp), ARG(-5.0e-01,4.71204371340168837179e+00), RES(-2.0941500681617941418e-4, -6.0653062356058926514e-1)}, {FN (exp), ARG(-5.0e-01,-4.71204371340168837179e+00), RES(-2.0941500681617941418e-4, 6.0653062356058926514e-1)}, {FN (exp), ARG(5.0e-01,4.71273424736769097620e+00), RES(5.6924900763444186872e-4, -1.6487211724286834494e0)}, {FN (exp), ARG(5.0e-01,-4.71273424736769097620e+00), RES(5.6924900763444186872e-4, 1.6487211724286834494e0)}, {FN (exp), ARG(-5.0e-01,4.71273424736769097620e+00), RES(2.0941500681595657844e-4, -6.0653062356058926521e-1)}, {FN (exp), ARG(-5.0e-01,-4.71273424736769097620e+00), RES(2.0941500681595657844e-4, 6.0653062356058926521e-1)}, {FN (exp), ARG(5.0e-01,6.28284004019658492979e+00), RES(1.6487211724286834492e0, -5.6924900763514855410e-4)}, {FN (exp), ARG(5.0e-01,-6.28284004019658492979e+00), RES(1.6487211724286834492e0, 5.6924900763514855410e-4)}, {FN (exp), ARG(-5.0e-01,6.28284004019658492979e+00), RES(6.0653062356058926512e-1, -2.0941500681621655347e-4)}, {FN (exp), ARG(-5.0e-01,-6.28284004019658492979e+00), RES(6.0653062356058926512e-1, 2.0941500681621655347e-4)}, {FN (exp), ARG(5.0e-01,6.28353057416258753420e+00), RES(1.6487211724286834495e0, 5.6924900763434091366e-4)}, {FN (exp), ARG(5.0e-01,-6.28353057416258753420e+00), RES(1.6487211724286834495e0, -5.6924900763434091366e-4)}, {FN (exp), ARG(-5.0e-01,6.28353057416258753420e+00), RES(6.0653062356058926523e-1, 2.0941500681591943916e-4)}, {FN (exp), ARG(-5.0e-01,-6.28353057416258753420e+00), RES(6.0653062356058926523e-1, -2.0941500681591943916e-4)}, {FN (exp), ARG(5.0e-01,9.42443269378637893396e+00), RES(-1.6487211724286834496e0, 5.6924900763388610565e-4)}, {FN (exp), ARG(5.0e-01,-9.42443269378637893396e+00), RES(-1.6487211724286834496e0, -5.6924900763388610565e-4)}, {FN (exp), ARG(-5.0e-01,9.42443269378637893396e+00), RES(-6.0653062356058926528e-1, 2.0941500681575212464e-4)}, {FN (exp), ARG(-5.0e-01,-9.42443269378637893396e+00), RES(-6.0653062356058926528e-1, -2.0941500681575212464e-4)}, {FN (exp), ARG(5.0e-01,9.42512322775237976202e+00), RES(-1.6487211724286834501e0, -5.6924900763267464498e-4)}, {FN (exp), ARG(5.0e-01,-9.42512322775237976202e+00), RES(-1.6487211724286834501e0, 5.6924900763267464498e-4)}, {FN (exp), ARG(-5.0e-01,9.42512322775237976202e+00), RES(-6.0653062356058926544e-1, -2.0941500681530645317e-4)}, {FN (exp), ARG(-5.0e-01,-9.42512322775237976202e+00), RES(-6.0653062356058926544e-1, 2.0941500681530645317e-4)}, {FN (exp), ARG(1.0e+00,-3.45266983001243932001e-04), RES(2.7182816664368240602e0, -9.3853294721218487636e-4)}, {FN (exp), ARG(1.0e+00,3.45266983001243932001e-04), RES(2.7182816664368240602e0, 9.3853294721218487636e-4)}, {FN (exp), ARG(-1.0e+00,-3.45266983001243932001e-04), RES(3.6787941924411912823e-1, -1.2701662223785390836e-4)}, {FN (exp), ARG(-1.0e+00,3.45266983001243932001e-04), RES(3.6787941924411912823e-1, 1.2701662223785390836e-4)}, {FN (exp), ARG(1.0e+00,1.57045105981189525579e+00), RES(9.3853294721250973333e-4, 2.7182816664368240601e0)}, {FN (exp), ARG(1.0e+00,-1.57045105981189525579e+00), RES(9.3853294721250973333e-4, -2.7182816664368240601e0)}, {FN (exp), ARG(-1.0e+00,1.57045105981189525579e+00), RES(1.2701662223789787297e-4, 3.6787941924411912822e-1)}, {FN (exp), ARG(-1.0e+00,-1.57045105981189525579e+00), RES(1.2701662223789787297e-4, -3.6787941924411912822e-1)}, {FN (exp), ARG(1.0e+00,1.57114159377789786021e+00), RES(-9.3853294721217683983e-4, 2.7182816664368240602e0)}, {FN (exp), ARG(1.0e+00,-1.57114159377789786021e+00), RES(-9.3853294721217683983e-4, -2.7182816664368240602e0)}, {FN (exp), ARG(-1.0e+00,1.57114159377789786021e+00), RES(-1.2701662223785282074e-4, 3.6787941924411912823e-1)}, {FN (exp), ARG(-1.0e+00,-1.57114159377789786021e+00), RES(-1.2701662223785282074e-4, -3.6787941924411912823e-1)}, {FN (exp), ARG(1.0e+00,3.14124738660679181379e+00), RES(-2.718281666436824060e0, 9.3853294721267618008e-4)}, {FN (exp), ARG(1.0e+00,-3.14124738660679181379e+00), RES(-2.718281666436824060e0, -9.3853294721267618008e-4)}, {FN (exp), ARG(-1.0e+00,3.14124738660679181379e+00), RES(-3.6787941924411912821e-1, 1.2701662223792039909e-4)}, {FN (exp), ARG(-1.0e+00,-3.14124738660679181379e+00), RES(-3.6787941924411912821e-1, -1.2701662223792039909e-4)}, {FN (exp), ARG(1.0e+00,3.14193792057279441821e+00), RES(-2.7182816664368240603e0, -9.3853294721201039309e-4)}, {FN (exp), ARG(1.0e+00,-3.14193792057279441821e+00), RES(-2.7182816664368240603e0, 9.3853294721201039309e-4)}, {FN (exp), ARG(-1.0e+00,3.14193792057279441821e+00), RES(-3.6787941924411912824e-1, -1.2701662223783029462e-4)}, {FN (exp), ARG(-1.0e+00,-3.14193792057279441821e+00), RES(-3.6787941924411912824e-1, 1.2701662223783029462e-4)}, {FN (exp), ARG(1.0e+00,4.71204371340168837179e+00), RES(-9.3853294721284262682e-4, -2.718281666436824060e0)}, {FN (exp), ARG(1.0e+00,-4.71204371340168837179e+00), RES(-9.3853294721284262682e-4, 2.718281666436824060e0)}, {FN (exp), ARG(-1.0e+00,4.71204371340168837179e+00), RES(-1.2701662223794292521e-4, -3.6787941924411912820e-1)}, {FN (exp), ARG(-1.0e+00,-4.71204371340168837179e+00), RES(-1.2701662223794292521e-4, 3.6787941924411912820e-1)}, {FN (exp), ARG(1.0e+00,4.71273424736769097620e+00), RES(9.3853294721184394634e-4, -2.7182816664368240603e0)}, {FN (exp), ARG(1.0e+00,-4.71273424736769097620e+00), RES(9.3853294721184394634e-4, 2.7182816664368240603e0)}, {FN (exp), ARG(-1.0e+00,4.71273424736769097620e+00), RES(1.2701662223780776850e-4, -3.6787941924411912825e-1)}, {FN (exp), ARG(-1.0e+00,-4.71273424736769097620e+00), RES(1.2701662223780776850e-4, 3.6787941924411912825e-1)}, {FN (exp), ARG(1.0e+00,6.28284004019658492979e+00), RES(2.7182816664368240599e0, -9.3853294721300907357e-4)}, {FN (exp), ARG(1.0e+00,-6.28284004019658492979e+00), RES(2.7182816664368240599e0, 9.3853294721300907357e-4)}, {FN (exp), ARG(-1.0e+00,6.28284004019658492979e+00), RES(3.6787941924411912819e-1, -1.2701662223796545132e-4)}, {FN (exp), ARG(-1.0e+00,-6.28284004019658492979e+00), RES(3.6787941924411912819e-1, 1.2701662223796545132e-4)}, {FN (exp), ARG(1.0e+00,6.28353057416258753420e+00), RES(2.7182816664368240604e0, 9.3853294721167749959e-4)}, {FN (exp), ARG(1.0e+00,-6.28353057416258753420e+00), RES(2.7182816664368240604e0, -9.3853294721167749959e-4)}, {FN (exp), ARG(-1.0e+00,6.28353057416258753420e+00), RES(3.6787941924411912825e-1, 1.2701662223778524238e-4)}, {FN (exp), ARG(-1.0e+00,-6.28353057416258753420e+00), RES(3.6787941924411912825e-1, -1.2701662223778524238e-4)}, {FN (exp), ARG(1.0e+00,9.42443269378637893396e+00), RES(-2.7182816664368240606e0, 9.3853294721092764795e-4)}, {FN (exp), ARG(1.0e+00,-9.42443269378637893396e+00), RES(-2.7182816664368240606e0, -9.3853294721092764795e-4)}, {FN (exp), ARG(-1.0e+00,9.42443269378637893396e+00), RES(-3.6787941924411912829e-1, 1.270166222376837610e-4)}, {FN (exp), ARG(-1.0e+00,-9.42443269378637893396e+00), RES(-3.6787941924411912829e-1, -1.270166222376837610e-4)}, {FN (exp), ARG(1.0e+00,9.42512322775237976202e+00), RES(-2.7182816664368240613e0, -9.3853294720893028698e-4)}, {FN (exp), ARG(1.0e+00,-9.42512322775237976202e+00), RES(-2.7182816664368240613e0, 9.3853294720893028698e-4)}, {FN (exp), ARG(-1.0e+00,9.42512322775237976202e+00), RES(-3.6787941924411912838e-1, -1.2701662223741344759e-4)}, {FN (exp), ARG(-1.0e+00,-9.42512322775237976202e+00), RES(-3.6787941924411912838e-1, 1.2701662223741344759e-4)}, {FN (exp), ARG(2.0e+00,-3.45266983001243932001e-04), RES(7.3890556585085906002e0, -2.5511970558169944872e-3)}, {FN (exp), ARG(2.0e+00,3.45266983001243932001e-04), RES(7.3890556585085906002e0, 2.5511970558169944872e-3)}, {FN (exp), ARG(-2.0e+00,-3.45266983001243932001e-04), RES(1.3533527517000128913e-1, -4.6726804008345889445e-5)}, {FN (exp), ARG(-2.0e+00,3.45266983001243932001e-04), RES(1.3533527517000128913e-1, 4.6726804008345889445e-5)}, {FN (exp), ARG(2.0e+00,1.57045105981189525579e+00), RES(2.551197055817877540e-3, 7.3890556585085905999e0)}, {FN (exp), ARG(2.0e+00,-1.57045105981189525579e+00), RES(2.551197055817877540e-3, -7.3890556585085905999e0)}, {FN (exp), ARG(-2.0e+00,1.57045105981189525579e+00), RES(4.6726804008362063122e-5, 1.3533527517000128913e-1)}, {FN (exp), ARG(-2.0e+00,-1.57045105981189525579e+00), RES(4.6726804008362063122e-5, -1.3533527517000128913e-1)}, {FN (exp), ARG(2.0e+00,1.57114159377789786021e+00), RES(-2.5511970558169726417e-3, 7.3890556585085906002e0)}, {FN (exp), ARG(2.0e+00,-1.57114159377789786021e+00), RES(-2.5511970558169726417e-3, -7.3890556585085906002e0)}, {FN (exp), ARG(-2.0e+00,1.57114159377789786021e+00), RES(-4.6726804008345489330e-5, 1.3533527517000128913e-1)}, {FN (exp), ARG(-2.0e+00,-1.57114159377789786021e+00), RES(-4.6726804008345489330e-5, -1.3533527517000128913e-1)}, {FN (exp), ARG(2.0e+00,3.14124738660679181379e+00), RES(-7.3890556585085905998e0, 2.5511970558183299892e-3)}, {FN (exp), ARG(2.0e+00,-3.14124738660679181379e+00), RES(-7.3890556585085905998e0, -2.5511970558183299892e-3)}, {FN (exp), ARG(-2.0e+00,3.14124738660679181379e+00), RES(-1.3533527517000128912e-1, 4.6726804008370350017e-5)}, {FN (exp), ARG(-2.0e+00,-3.14124738660679181379e+00), RES(-1.3533527517000128912e-1, -4.6726804008370350017e-5)}, {FN (exp), ARG(2.0e+00,3.14193792057279441821e+00), RES(-7.3890556585085906004e0, -2.5511970558165201925e-3)}, {FN (exp), ARG(2.0e+00,-3.14193792057279441821e+00), RES(-7.3890556585085906004e0, 2.5511970558165201925e-3)}, {FN (exp), ARG(-2.0e+00,3.14193792057279441821e+00), RES(-1.3533527517000128914e-1, -4.6726804008337202435e-5)}, {FN (exp), ARG(-2.0e+00,-3.14193792057279441821e+00), RES(-1.3533527517000128914e-1, 4.6726804008337202435e-5)}, {FN (exp), ARG(2.0e+00,4.71204371340168837179e+00), RES(-2.5511970558187824384e-3, -7.3890556585085905996e0)}, {FN (exp), ARG(2.0e+00,-4.71204371340168837179e+00), RES(-2.5511970558187824384e-3, 7.3890556585085905996e0)}, {FN (exp), ARG(-2.0e+00,4.71204371340168837179e+00), RES(-4.6726804008378636913e-5, -1.3533527517000128912e-1)}, {FN (exp), ARG(-2.0e+00,-4.71204371340168837179e+00), RES(-4.6726804008378636913e-5, 1.3533527517000128912e-1)}, {FN (exp), ARG(2.0e+00,4.71273424736769097620e+00), RES(2.5511970558160677434e-3, -7.3890556585085906006e0)}, {FN (exp), ARG(2.0e+00,-4.71273424736769097620e+00), RES(2.5511970558160677434e-3, 7.3890556585085906006e0)}, {FN (exp), ARG(-2.0e+00,4.71273424736769097620e+00), RES(4.6726804008328915539e-5, -1.3533527517000128914e-1)}, {FN (exp), ARG(-2.0e+00,-4.71273424736769097620e+00), RES(4.6726804008328915539e-5, 1.3533527517000128914e-1)}, {FN (exp), ARG(2.0e+00,6.28284004019658492979e+00), RES(7.3890556585085905995e0, -2.5511970558192348875e-3)}, {FN (exp), ARG(2.0e+00,-6.28284004019658492979e+00), RES(7.3890556585085905995e0, 2.5511970558192348875e-3)}, {FN (exp), ARG(-2.0e+00,6.28284004019658492979e+00), RES(1.3533527517000128912e-1, -4.6726804008386923808e-5)}, {FN (exp), ARG(-2.0e+00,-6.28284004019658492979e+00), RES(1.3533527517000128912e-1, 4.6726804008386923808e-5)}, {FN (exp), ARG(2.0e+00,6.28353057416258753420e+00), RES(7.3890556585085906007e0, 2.5511970558156152942e-3)}, {FN (exp), ARG(2.0e+00,-6.28353057416258753420e+00), RES(7.3890556585085906007e0, -2.5511970558156152942e-3)}, {FN (exp), ARG(-2.0e+00,6.28353057416258753420e+00), RES(1.3533527517000128914e-1, 4.6726804008320628644e-5)}, {FN (exp), ARG(-2.0e+00,-6.28353057416258753420e+00), RES(1.3533527517000128914e-1, -4.6726804008320628644e-5)}, {FN (exp), ARG(2.0e+00,9.42443269378637893396e+00), RES(-7.3890556585085906014e0, 2.5511970558135769861e-3)}, {FN (exp), ARG(2.0e+00,-9.42443269378637893396e+00), RES(-7.3890556585085906014e0, -2.5511970558135769861e-3)}, {FN (exp), ARG(-2.0e+00,9.42443269378637893396e+00), RES(-1.3533527517000128916e-1, 4.6726804008283295729e-5)}, {FN (exp), ARG(-2.0e+00,-9.42443269378637893396e+00), RES(-1.3533527517000128916e-1, -4.6726804008283295729e-5)}, {FN (exp), ARG(2.0e+00,9.42512322775237976202e+00), RES(-7.3890556585085906033e0, -2.5511970558081475961e-3)}, {FN (exp), ARG(2.0e+00,-9.42512322775237976202e+00), RES(-7.3890556585085906033e0, 2.5511970558081475961e-3)}, {FN (exp), ARG(-2.0e+00,9.42512322775237976202e+00), RES(-1.3533527517000128919e-1, -4.6726804008183852982e-5)}, {FN (exp), ARG(-2.0e+00,-9.42512322775237976202e+00), RES(-1.3533527517000128919e-1, 4.6726804008183852982e-5)}, {FN (sin), ARG(-3.45266983001243932001e-04,0.0e+00), RES(-3.4526697614140534807e-4, 0.0)}, {FN (sin), ARG(3.45266983001243932001e-04,0.0e+00), RES(3.4526697614140534807e-4, 0.0)}, {FN (sin), ARG(-3.45266983001243932001e-04,1.19209289550781250e-07), RES(-3.4526697614140780134e-4, 1.1920928244535424533e-7)}, {FN (sin), ARG(-3.45266983001243932001e-04,-1.19209289550781250e-07), RES(-3.4526697614140780134e-4, -1.1920928244535424533e-7)}, {FN (sin), ARG(3.45266983001243932001e-04,1.19209289550781250e-07), RES(3.4526697614140780134e-4, 1.1920928244535424533e-7)}, {FN (sin), ARG(3.45266983001243932001e-04,-1.19209289550781250e-07), RES(3.4526697614140780134e-4, -1.1920928244535424533e-7)}, {FN (sin), ARG(-3.45266983001243932001e-04,5.0e-01), RES(-3.8933200722534065172e-4, 5.2109527443404709209e-1)}, {FN (sin), ARG(-3.45266983001243932001e-04,-5.0e-01), RES(-3.8933200722534065172e-4, -5.2109527443404709209e-1)}, {FN (sin), ARG(3.45266983001243932001e-04,5.0e-01), RES(3.8933200722534065172e-4, 5.2109527443404709209e-1)}, {FN (sin), ARG(3.45266983001243932001e-04,-5.0e-01), RES(3.8933200722534065172e-4, -5.2109527443404709209e-1)}, {FN (sin), ARG(-3.45266983001243932001e-04,1.0e+00), RES(-5.3277478472501939236e-4, 1.1752011235963524660e0)}, {FN (sin), ARG(-3.45266983001243932001e-04,-1.0e+00), RES(-5.3277478472501939236e-4, -1.1752011235963524660e0)}, {FN (sin), ARG(3.45266983001243932001e-04,1.0e+00), RES(5.3277478472501939236e-4, 1.1752011235963524660e0)}, {FN (sin), ARG(3.45266983001243932001e-04,-1.0e+00), RES(5.3277478472501939236e-4, -1.1752011235963524660e0)}, {FN (sin), ARG(-3.45266983001243932001e-04,2.0e+00), RES(-1.2989619299126701883e-3, 3.6268601916692946556e0)}, {FN (sin), ARG(-3.45266983001243932001e-04,-2.0e+00), RES(-1.2989619299126701883e-3, -3.6268601916692946556e0)}, {FN (sin), ARG(3.45266983001243932001e-04,2.0e+00), RES(1.2989619299126701883e-3, 3.6268601916692946556e0)}, {FN (sin), ARG(3.45266983001243932001e-04,-2.0e+00), RES(1.2989619299126701883e-3, -3.6268601916692946556e0)}, {FN (sin), ARG(1.57045105981189525579e+00,0.0e+00), RES(9.9999994039535581669e-1, 0.0)}, {FN (sin), ARG(-1.57045105981189525579e+00,0.0e+00), RES(-9.9999994039535581669e-1, 0.0)}, {FN (sin), ARG(1.57045105981189525579e+00,1.19209289550781250e-07), RES(9.9999994039536292211e-1, 4.1159030931177815679e-11)}, {FN (sin), ARG(1.57045105981189525579e+00,-1.19209289550781250e-07), RES(9.9999994039536292211e-1, -4.1159030931177815679e-11)}, {FN (sin), ARG(-1.57045105981189525579e+00,1.19209289550781250e-07), RES(-9.9999994039536292211e-1, 4.1159030931177815679e-11)}, {FN (sin), ARG(-1.57045105981189525579e+00,-1.19209289550781250e-07), RES(-9.9999994039536292211e-1, -4.1159030931177815679e-11)}, {FN (sin), ARG(1.57045105981189525579e+00,5.0e-01), RES(1.1276258979946363572e0, 1.7991700040937027667e-4)}, {FN (sin), ARG(1.57045105981189525579e+00,-5.0e-01), RES(1.1276258979946363572e0, -1.7991700040937027667e-4)}, {FN (sin), ARG(-1.57045105981189525579e+00,5.0e-01), RES(-1.1276258979946363572e0, 1.7991700040937027667e-4)}, {FN (sin), ARG(-1.57045105981189525579e+00,-5.0e-01), RES(-1.1276258979946363572e0, -1.7991700040937027667e-4)}, {FN (sin), ARG(1.57045105981189525579e+00,1.0e+00), RES(1.5430805428404715942e0, 4.0575816248730593018e-4)}, {FN (sin), ARG(1.57045105981189525579e+00,-1.0e+00), RES(1.5430805428404715942e0, -4.0575816248730593018e-4)}, {FN (sin), ARG(-1.57045105981189525579e+00,1.0e+00), RES(-1.5430805428404715942e0, 4.0575816248730593018e-4)}, {FN (sin), ARG(-1.57045105981189525579e+00,-1.0e+00), RES(-1.5430805428404715942e0, -4.0575816248730593018e-4)}, {FN (sin), ARG(1.57045105981189525579e+00,2.0e+00), RES(3.7621954668392959445e0, 1.2522351259047577385e-3)}, {FN (sin), ARG(1.57045105981189525579e+00,-2.0e+00), RES(3.7621954668392959445e0, -1.2522351259047577385e-3)}, {FN (sin), ARG(-1.57045105981189525579e+00,2.0e+00), RES(-3.7621954668392959445e0, 1.2522351259047577385e-3)}, {FN (sin), ARG(-1.57045105981189525579e+00,-2.0e+00), RES(-3.7621954668392959445e0, -1.2522351259047577385e-3)}, {FN (sin), ARG(1.57114159377789786021e+00,0.0e+00), RES(9.9999994039535581673e-1, 0.0)}, {FN (sin), ARG(-1.57114159377789786021e+00,0.0e+00), RES(-9.9999994039535581673e-1, 0.0)}, {FN (sin), ARG(1.57114159377789786021e+00,1.19209289550781250e-07), RES(9.9999994039536292216e-1, -4.1159030931163216752e-11)}, {FN (sin), ARG(1.57114159377789786021e+00,-1.19209289550781250e-07), RES(9.9999994039536292216e-1, 4.1159030931163216752e-11)}, {FN (sin), ARG(-1.57114159377789786021e+00,1.19209289550781250e-07), RES(-9.9999994039536292216e-1, -4.1159030931163216752e-11)}, {FN (sin), ARG(-1.57114159377789786021e+00,-1.19209289550781250e-07), RES(-9.9999994039536292216e-1, 4.1159030931163216752e-11)}, {FN (sin), ARG(1.57114159377789786021e+00,5.0e-01), RES(1.1276258979946363573e0, -1.7991700040930646090e-4)}, {FN (sin), ARG(1.57114159377789786021e+00,-5.0e-01), RES(1.1276258979946363573e0, 1.7991700040930646090e-4)}, {FN (sin), ARG(-1.57114159377789786021e+00,5.0e-01), RES(-1.1276258979946363573e0, -1.7991700040930646090e-4)}, {FN (sin), ARG(-1.57114159377789786021e+00,-5.0e-01), RES(-1.1276258979946363573e0, 1.7991700040930646090e-4)}, {FN (sin), ARG(1.57114159377789786021e+00,1.0e+00), RES(1.5430805428404715942e0, -4.0575816248716200955e-4)}, {FN (sin), ARG(1.57114159377789786021e+00,-1.0e+00), RES(1.5430805428404715942e0, 4.0575816248716200955e-4)}, {FN (sin), ARG(-1.57114159377789786021e+00,1.0e+00), RES(-1.5430805428404715942e0, -4.0575816248716200955e-4)}, {FN (sin), ARG(-1.57114159377789786021e+00,-1.0e+00), RES(-1.5430805428404715942e0, 4.0575816248716200955e-4)}, {FN (sin), ARG(1.57114159377789786021e+00,2.0e+00), RES(3.7621954668392959447e0, -1.2522351259043135762e-3)}, {FN (sin), ARG(1.57114159377789786021e+00,-2.0e+00), RES(3.7621954668392959447e0, 1.2522351259043135762e-3)}, {FN (sin), ARG(-1.57114159377789786021e+00,2.0e+00), RES(-3.7621954668392959447e0, -1.2522351259043135762e-3)}, {FN (sin), ARG(-1.57114159377789786021e+00,-2.0e+00), RES(-3.7621954668392959447e0, 1.2522351259043135762e-3)}, {FN (sin), ARG(3.14124738660679181379e+00,0.0e+00), RES(3.4526697614158608860e-4, 0.0)}, {FN (sin), ARG(-3.14124738660679181379e+00,0.0e+00), RES(-3.4526697614158608860e-4, 0.0)}, {FN (sin), ARG(3.14124738660679181379e+00,1.19209289550781250e-07), RES(3.4526697614158854187e-4, -1.1920928244535424532e-7)}, {FN (sin), ARG(3.14124738660679181379e+00,-1.19209289550781250e-07), RES(3.4526697614158854187e-4, 1.1920928244535424532e-7)}, {FN (sin), ARG(-3.14124738660679181379e+00,1.19209289550781250e-07), RES(-3.4526697614158854187e-4, -1.1920928244535424532e-7)}, {FN (sin), ARG(-3.14124738660679181379e+00,-1.19209289550781250e-07), RES(-3.4526697614158854187e-4, 1.1920928244535424532e-7)}, {FN (sin), ARG(3.14124738660679181379e+00,5.0e-01), RES(3.8933200722554445944e-4, -5.2109527443404709206e-1)}, {FN (sin), ARG(3.14124738660679181379e+00,-5.0e-01), RES(3.8933200722554445944e-4, 5.2109527443404709206e-1)}, {FN (sin), ARG(-3.14124738660679181379e+00,5.0e-01), RES(-3.8933200722554445944e-4, -5.2109527443404709206e-1)}, {FN (sin), ARG(-3.14124738660679181379e+00,-5.0e-01), RES(-3.8933200722554445944e-4, 5.2109527443404709206e-1)}, {FN (sin), ARG(3.14124738660679181379e+00,1.0e+00), RES(5.3277478472529828958e-4, -1.1752011235963524659e0)}, {FN (sin), ARG(3.14124738660679181379e+00,-1.0e+00), RES(5.3277478472529828958e-4, 1.1752011235963524659e0)}, {FN (sin), ARG(-3.14124738660679181379e+00,1.0e+00), RES(-5.3277478472529828958e-4, -1.1752011235963524659e0)}, {FN (sin), ARG(-3.14124738660679181379e+00,-1.0e+00), RES(-5.3277478472529828958e-4, 1.1752011235963524659e0)}, {FN (sin), ARG(3.14124738660679181379e+00,2.0e+00), RES(1.2989619299133501696e-3, -3.6268601916692946553e0)}, {FN (sin), ARG(3.14124738660679181379e+00,-2.0e+00), RES(1.2989619299133501696e-3, 3.6268601916692946553e0)}, {FN (sin), ARG(-3.14124738660679181379e+00,2.0e+00), RES(-1.2989619299133501696e-3, -3.6268601916692946553e0)}, {FN (sin), ARG(-3.14124738660679181379e+00,-2.0e+00), RES(-1.2989619299133501696e-3, 3.6268601916692946553e0)}, {FN (sin), ARG(3.14193792057279441821e+00,0.0e+00), RES(-3.4526697614134115926e-4, 0.0)}, {FN (sin), ARG(-3.14193792057279441821e+00,0.0e+00), RES(3.4526697614134115926e-4, 0.0)}, {FN (sin), ARG(3.14193792057279441821e+00,1.19209289550781250e-07), RES(-3.4526697614134361253e-4, -1.1920928244535424533e-7)}, {FN (sin), ARG(3.14193792057279441821e+00,-1.19209289550781250e-07), RES(-3.4526697614134361253e-4, 1.1920928244535424533e-7)}, {FN (sin), ARG(-3.14193792057279441821e+00,1.19209289550781250e-07), RES(3.4526697614134361253e-4, -1.1920928244535424533e-7)}, {FN (sin), ARG(-3.14193792057279441821e+00,-1.19209289550781250e-07), RES(3.4526697614134361253e-4, 1.1920928244535424533e-7)}, {FN (sin), ARG(3.14193792057279441821e+00,5.0e-01), RES(-3.8933200722526827075e-4, -5.2109527443404709211e-1)}, {FN (sin), ARG(3.14193792057279441821e+00,-5.0e-01), RES(-3.8933200722526827075e-4, 5.2109527443404709211e-1)}, {FN (sin), ARG(-3.14193792057279441821e+00,5.0e-01), RES(3.8933200722526827075e-4, -5.2109527443404709211e-1)}, {FN (sin), ARG(-3.14193792057279441821e+00,-5.0e-01), RES(3.8933200722526827075e-4, 5.2109527443404709211e-1)}, {FN (sin), ARG(3.14193792057279441821e+00,1.0e+00), RES(-5.3277478472492034385e-4, -1.1752011235963524660e0)}, {FN (sin), ARG(3.14193792057279441821e+00,-1.0e+00), RES(-5.3277478472492034385e-4, 1.1752011235963524660e0)}, {FN (sin), ARG(-3.14193792057279441821e+00,1.0e+00), RES(5.3277478472492034385e-4, -1.1752011235963524660e0)}, {FN (sin), ARG(-3.14193792057279441821e+00,-1.0e+00), RES(5.3277478472492034385e-4, 1.1752011235963524660e0)}, {FN (sin), ARG(3.14193792057279441821e+00,2.0e+00), RES(-1.2989619299124286975e-3, -3.6268601916692946556e0)}, {FN (sin), ARG(3.14193792057279441821e+00,-2.0e+00), RES(-1.2989619299124286975e-3, 3.6268601916692946556e0)}, {FN (sin), ARG(-3.14193792057279441821e+00,2.0e+00), RES(1.2989619299124286975e-3, -3.6268601916692946556e0)}, {FN (sin), ARG(-3.14193792057279441821e+00,-2.0e+00), RES(1.2989619299124286975e-3, 3.6268601916692946556e0)}, {FN (sin), ARG(4.71204371340168837179e+00,0.0e+00), RES(-9.9999994039535581664e-1, 0.0)}, {FN (sin), ARG(-4.71204371340168837179e+00,0.0e+00), RES(9.9999994039535581664e-1, 0.0)}, {FN (sin), ARG(4.71204371340168837179e+00,1.19209289550781250e-07), RES(-9.9999994039536292207e-1, -4.1159030931192414605e-11)}, {FN (sin), ARG(4.71204371340168837179e+00,-1.19209289550781250e-07), RES(-9.9999994039536292207e-1, 4.1159030931192414605e-11)}, {FN (sin), ARG(-4.71204371340168837179e+00,1.19209289550781250e-07), RES(9.9999994039536292207e-1, -4.1159030931192414605e-11)}, {FN (sin), ARG(-4.71204371340168837179e+00,-1.19209289550781250e-07), RES(9.9999994039536292207e-1, 4.1159030931192414605e-11)}, {FN (sin), ARG(4.71204371340168837179e+00,5.0e-01), RES(-1.1276258979946363572e0, -1.7991700040943409243e-4)}, {FN (sin), ARG(4.71204371340168837179e+00,-5.0e-01), RES(-1.1276258979946363572e0, 1.7991700040943409243e-4)}, {FN (sin), ARG(-4.71204371340168837179e+00,5.0e-01), RES(1.1276258979946363572e0, -1.7991700040943409243e-4)}, {FN (sin), ARG(-4.71204371340168837179e+00,-5.0e-01), RES(1.1276258979946363572e0, 1.7991700040943409243e-4)}, {FN (sin), ARG(4.71204371340168837179e+00,1.0e+00), RES(-1.5430805428404715941e0, -4.0575816248744985081e-4)}, {FN (sin), ARG(4.71204371340168837179e+00,-1.0e+00), RES(-1.5430805428404715941e0, 4.0575816248744985081e-4)}, {FN (sin), ARG(-4.71204371340168837179e+00,1.0e+00), RES(1.5430805428404715941e0, -4.0575816248744985081e-4)}, {FN (sin), ARG(-4.71204371340168837179e+00,-1.0e+00), RES(1.5430805428404715941e0, 4.0575816248744985081e-4)}, {FN (sin), ARG(4.71204371340168837179e+00,2.0e+00), RES(-3.7621954668392959444e0, -1.2522351259052019007e-3)}, {FN (sin), ARG(4.71204371340168837179e+00,-2.0e+00), RES(-3.7621954668392959444e0, 1.2522351259052019007e-3)}, {FN (sin), ARG(-4.71204371340168837179e+00,2.0e+00), RES(3.7621954668392959444e0, -1.2522351259052019007e-3)}, {FN (sin), ARG(-4.71204371340168837179e+00,-2.0e+00), RES(3.7621954668392959444e0, 1.2522351259052019007e-3)}, {FN (sin), ARG(4.71273424736769097620e+00,0.0e+00), RES(-9.9999994039535581677e-1, 0.0)}, {FN (sin), ARG(-4.71273424736769097620e+00,0.0e+00), RES(9.9999994039535581677e-1, 0.0)}, {FN (sin), ARG(4.71273424736769097620e+00,1.19209289550781250e-07), RES(-9.9999994039536292220e-1, 4.1159030931148617825e-11)}, {FN (sin), ARG(4.71273424736769097620e+00,-1.19209289550781250e-07), RES(-9.9999994039536292220e-1, -4.1159030931148617825e-11)}, {FN (sin), ARG(-4.71273424736769097620e+00,1.19209289550781250e-07), RES(9.9999994039536292220e-1, 4.1159030931148617825e-11)}, {FN (sin), ARG(-4.71273424736769097620e+00,-1.19209289550781250e-07), RES(9.9999994039536292220e-1, -4.1159030931148617825e-11)}, {FN (sin), ARG(4.71273424736769097620e+00,5.0e-01), RES(-1.1276258979946363573e0, 1.7991700040924264514e-4)}, {FN (sin), ARG(4.71273424736769097620e+00,-5.0e-01), RES(-1.1276258979946363573e0, -1.7991700040924264514e-4)}, {FN (sin), ARG(-4.71273424736769097620e+00,5.0e-01), RES(1.1276258979946363573e0, 1.7991700040924264514e-4)}, {FN (sin), ARG(-4.71273424736769097620e+00,-5.0e-01), RES(1.1276258979946363573e0, -1.7991700040924264514e-4)}, {FN (sin), ARG(4.71273424736769097620e+00,1.0e+00), RES(-1.5430805428404715943e0, 4.0575816248701808892e-4)}, {FN (sin), ARG(4.71273424736769097620e+00,-1.0e+00), RES(-1.5430805428404715943e0, -4.0575816248701808892e-4)}, {FN (sin), ARG(-4.71273424736769097620e+00,1.0e+00), RES(1.5430805428404715943e0, 4.0575816248701808892e-4)}, {FN (sin), ARG(-4.71273424736769097620e+00,-1.0e+00), RES(1.5430805428404715943e0, -4.0575816248701808892e-4)}, {FN (sin), ARG(4.71273424736769097620e+00,2.0e+00), RES(-3.7621954668392959448e0, 1.2522351259038694139e-3)}, {FN (sin), ARG(4.71273424736769097620e+00,-2.0e+00), RES(-3.7621954668392959448e0, -1.2522351259038694139e-3)}, {FN (sin), ARG(-4.71273424736769097620e+00,2.0e+00), RES(3.7621954668392959448e0, 1.2522351259038694139e-3)}, {FN (sin), ARG(-4.71273424736769097620e+00,-2.0e+00), RES(3.7621954668392959448e0, -1.2522351259038694139e-3)}, {FN (sin), ARG(6.28284004019658492979e+00,0.0e+00), RES(-3.4526697614170855328e-4, 0.0)}, {FN (sin), ARG(-6.28284004019658492979e+00,0.0e+00), RES(3.4526697614170855328e-4, 0.0)}, {FN (sin), ARG(6.28284004019658492979e+00,1.19209289550781250e-07), RES(-3.4526697614171100655e-4, 1.1920928244535424532e-7)}, {FN (sin), ARG(6.28284004019658492979e+00,-1.19209289550781250e-07), RES(-3.4526697614171100655e-4, -1.1920928244535424532e-7)}, {FN (sin), ARG(-6.28284004019658492979e+00,1.19209289550781250e-07), RES(3.4526697614171100655e-4, 1.1920928244535424532e-7)}, {FN (sin), ARG(-6.28284004019658492979e+00,-1.19209289550781250e-07), RES(3.4526697614171100655e-4, -1.1920928244535424532e-7)}, {FN (sin), ARG(6.28284004019658492979e+00,5.0e-01), RES(-3.8933200722568255379e-4, 5.2109527443404709204e-1)}, {FN (sin), ARG(6.28284004019658492979e+00,-5.0e-01), RES(-3.8933200722568255379e-4, -5.2109527443404709204e-1)}, {FN (sin), ARG(-6.28284004019658492979e+00,5.0e-01), RES(3.8933200722568255379e-4, 5.2109527443404709204e-1)}, {FN (sin), ARG(-6.28284004019658492979e+00,-5.0e-01), RES(3.8933200722568255379e-4, -5.2109527443404709204e-1)}, {FN (sin), ARG(6.28284004019658492979e+00,1.0e+00), RES(-5.3277478472548726245e-4, 1.1752011235963524659e0)}, {FN (sin), ARG(6.28284004019658492979e+00,-1.0e+00), RES(-5.3277478472548726245e-4, -1.1752011235963524659e0)}, {FN (sin), ARG(-6.28284004019658492979e+00,1.0e+00), RES(5.3277478472548726245e-4, 1.1752011235963524659e0)}, {FN (sin), ARG(-6.28284004019658492979e+00,-1.0e+00), RES(5.3277478472548726245e-4, -1.1752011235963524659e0)}, {FN (sin), ARG(6.28284004019658492979e+00,2.0e+00), RES(-1.2989619299138109057e-3, 3.6268601916692946552e0)}, {FN (sin), ARG(6.28284004019658492979e+00,-2.0e+00), RES(-1.2989619299138109057e-3, -3.6268601916692946552e0)}, {FN (sin), ARG(-6.28284004019658492979e+00,2.0e+00), RES(1.2989619299138109057e-3, 3.6268601916692946552e0)}, {FN (sin), ARG(-6.28284004019658492979e+00,-2.0e+00), RES(1.2989619299138109057e-3, -3.6268601916692946552e0)}, {FN (sin), ARG(6.28353057416258753420e+00,0.0e+00), RES(3.4526697614121869459e-4, 0.0)}, {FN (sin), ARG(-6.28353057416258753420e+00,0.0e+00), RES(-3.4526697614121869459e-4, 0.0)}, {FN (sin), ARG(6.28353057416258753420e+00,1.19209289550781250e-07), RES(3.4526697614122114786e-4, 1.1920928244535424534e-7)}, {FN (sin), ARG(6.28353057416258753420e+00,-1.19209289550781250e-07), RES(3.4526697614122114786e-4, -1.1920928244535424534e-7)}, {FN (sin), ARG(-6.28353057416258753420e+00,1.19209289550781250e-07), RES(-3.4526697614122114786e-4, 1.1920928244535424534e-7)}, {FN (sin), ARG(-6.28353057416258753420e+00,-1.19209289550781250e-07), RES(-3.4526697614122114786e-4, -1.1920928244535424534e-7)}, {FN (sin), ARG(6.28353057416258753420e+00,5.0e-01), RES(3.8933200722513017641e-4, 5.2109527443404709213e-1)}, {FN (sin), ARG(6.28353057416258753420e+00,-5.0e-01), RES(3.8933200722513017641e-4, -5.2109527443404709213e-1)}, {FN (sin), ARG(-6.28353057416258753420e+00,5.0e-01), RES(-3.8933200722513017641e-4, 5.2109527443404709213e-1)}, {FN (sin), ARG(-6.28353057416258753420e+00,-5.0e-01), RES(-3.8933200722513017641e-4, -5.2109527443404709213e-1)}, {FN (sin), ARG(6.28353057416258753420e+00,1.0e+00), RES(5.3277478472473137099e-4, 1.1752011235963524661e0)}, {FN (sin), ARG(6.28353057416258753420e+00,-1.0e+00), RES(5.3277478472473137099e-4, -1.1752011235963524661e0)}, {FN (sin), ARG(-6.28353057416258753420e+00,1.0e+00), RES(-5.3277478472473137099e-4, 1.1752011235963524661e0)}, {FN (sin), ARG(-6.28353057416258753420e+00,-1.0e+00), RES(-5.3277478472473137099e-4, -1.1752011235963524661e0)}, {FN (sin), ARG(6.28353057416258753420e+00,2.0e+00), RES(1.2989619299119679614e-3, 3.6268601916692946558e0)}, {FN (sin), ARG(6.28353057416258753420e+00,-2.0e+00), RES(1.2989619299119679614e-3, -3.6268601916692946558e0)}, {FN (sin), ARG(-6.28353057416258753420e+00,2.0e+00), RES(-1.2989619299119679614e-3, 3.6268601916692946558e0)}, {FN (sin), ARG(-6.28353057416258753420e+00,-2.0e+00), RES(-1.2989619299119679614e-3, -3.6268601916692946558e0)}, {FN (sin), ARG(9.42443269378637893396e+00,0.0e+00), RES(3.4526697614094283958e-4, 0.0)}, {FN (sin), ARG(-9.42443269378637893396e+00,0.0e+00), RES(-3.4526697614094283958e-4, 0.0)}, {FN (sin), ARG(9.42443269378637893396e+00,1.19209289550781250e-07), RES(3.4526697614094529285e-4, -1.1920928244535424535e-7)}, {FN (sin), ARG(9.42443269378637893396e+00,-1.19209289550781250e-07), RES(3.4526697614094529285e-4, 1.1920928244535424535e-7)}, {FN (sin), ARG(-9.42443269378637893396e+00,1.19209289550781250e-07), RES(-3.4526697614094529285e-4, -1.1920928244535424535e-7)}, {FN (sin), ARG(-9.42443269378637893396e+00,-1.19209289550781250e-07), RES(-3.4526697614094529285e-4, 1.1920928244535424535e-7)}, {FN (sin), ARG(9.42443269378637893396e+00,5.0e-01), RES(3.8933200722481911514e-4, -5.2109527443404709218e-1)}, {FN (sin), ARG(9.42443269378637893396e+00,-5.0e-01), RES(3.8933200722481911514e-4, 5.2109527443404709218e-1)}, {FN (sin), ARG(-9.42443269378637893396e+00,5.0e-01), RES(-3.8933200722481911514e-4, -5.2109527443404709218e-1)}, {FN (sin), ARG(-9.42443269378637893396e+00,-5.0e-01), RES(-3.8933200722481911514e-4, 5.2109527443404709218e-1)}, {FN (sin), ARG(9.42443269378637893396e+00,1.0e+00), RES(5.3277478472430570447e-4, -1.1752011235963524662e0)}, {FN (sin), ARG(9.42443269378637893396e+00,-1.0e+00), RES(5.3277478472430570447e-4, 1.1752011235963524662e0)}, {FN (sin), ARG(-9.42443269378637893396e+00,1.0e+00), RES(-5.3277478472430570447e-4, -1.1752011235963524662e0)}, {FN (sin), ARG(-9.42443269378637893396e+00,-1.0e+00), RES(-5.3277478472430570447e-4, 1.1752011235963524662e0)}, {FN (sin), ARG(9.42443269378637893396e+00,2.0e+00), RES(1.2989619299109301409e-3, -3.6268601916692946561e0)}, {FN (sin), ARG(9.42443269378637893396e+00,-2.0e+00), RES(1.2989619299109301409e-3, 3.6268601916692946561e0)}, {FN (sin), ARG(-9.42443269378637893396e+00,2.0e+00), RES(-1.2989619299109301409e-3, -3.6268601916692946561e0)}, {FN (sin), ARG(-9.42443269378637893396e+00,-2.0e+00), RES(-1.2989619299109301409e-3, 3.6268601916692946561e0)}, {FN (sin), ARG(9.42512322775237976202e+00,0.0e+00), RES(-3.4526697614020805155e-4, 0.0)}, {FN (sin), ARG(-9.42512322775237976202e+00,0.0e+00), RES(3.4526697614020805155e-4, 0.0)}, {FN (sin), ARG(9.42512322775237976202e+00,1.19209289550781250e-07), RES(-3.4526697614021050482e-4, -1.1920928244535424538e-7)}, {FN (sin), ARG(9.42512322775237976202e+00,-1.19209289550781250e-07), RES(-3.4526697614021050482e-4, 1.1920928244535424538e-7)}, {FN (sin), ARG(-9.42512322775237976202e+00,1.19209289550781250e-07), RES(3.4526697614021050482e-4, -1.1920928244535424538e-7)}, {FN (sin), ARG(-9.42512322775237976202e+00,-1.19209289550781250e-07), RES(3.4526697614021050482e-4, 1.1920928244535424538e-7)}, {FN (sin), ARG(9.42512322775237976202e+00,5.0e-01), RES(-3.8933200722399054908e-4, -5.2109527443404709231e-1)}, {FN (sin), ARG(9.42512322775237976202e+00,-5.0e-01), RES(-3.8933200722399054908e-4, 5.2109527443404709231e-1)}, {FN (sin), ARG(-9.42512322775237976202e+00,5.0e-01), RES(3.8933200722399054908e-4, -5.2109527443404709231e-1)}, {FN (sin), ARG(-9.42512322775237976202e+00,-5.0e-01), RES(3.8933200722399054908e-4, 5.2109527443404709231e-1)}, {FN (sin), ARG(9.42512322775237976202e+00,1.0e+00), RES(-5.3277478472317186729e-4, -1.1752011235963524665e0)}, {FN (sin), ARG(9.42512322775237976202e+00,-1.0e+00), RES(-5.3277478472317186729e-4, 1.1752011235963524665e0)}, {FN (sin), ARG(-9.42512322775237976202e+00,1.0e+00), RES(5.3277478472317186729e-4, -1.1752011235963524665e0)}, {FN (sin), ARG(-9.42512322775237976202e+00,-1.0e+00), RES(5.3277478472317186729e-4, 1.1752011235963524665e0)}, {FN (sin), ARG(9.42512322775237976202e+00,2.0e+00), RES(-1.2989619299081657245e-3, -3.6268601916692946571e0)}, {FN (sin), ARG(9.42512322775237976202e+00,-2.0e+00), RES(-1.2989619299081657245e-3, 3.6268601916692946571e0)}, {FN (sin), ARG(-9.42512322775237976202e+00,2.0e+00), RES(1.2989619299081657245e-3, -3.6268601916692946571e0)}, {FN (sin), ARG(-9.42512322775237976202e+00,-2.0e+00), RES(1.2989619299081657245e-3, 3.6268601916692946571e0)}, {FN (cos), ARG(-3.45266983001243932001e-04,0.0e+00), RES(9.9999994039535581673e-1, 0.0)}, {FN (cos), ARG(3.45266983001243932001e-04,0.0e+00), RES(9.9999994039535581673e-1, 0.0)}, {FN (cos), ARG(-3.45266983001243932001e-04,1.19209289550781250e-07), RES(9.9999994039536292216e-1, 4.1159030931163569191e-11)}, {FN (cos), ARG(-3.45266983001243932001e-04,-1.19209289550781250e-07), RES(9.9999994039536292216e-1, -4.1159030931163569191e-11)}, {FN (cos), ARG(3.45266983001243932001e-04,1.19209289550781250e-07), RES(9.9999994039536292216e-1, -4.1159030931163569191e-11)}, {FN (cos), ARG(3.45266983001243932001e-04,-1.19209289550781250e-07), RES(9.9999994039536292216e-1, 4.1159030931163569191e-11)}, {FN (cos), ARG(-3.45266983001243932001e-04,5.0e-01), RES(1.1276258979946363573e0, 1.7991700040930800151e-4)}, {FN (cos), ARG(-3.45266983001243932001e-04,-5.0e-01), RES(1.1276258979946363573e0, -1.7991700040930800151e-4)}, {FN (cos), ARG(3.45266983001243932001e-04,5.0e-01), RES(1.1276258979946363573e0, -1.7991700040930800151e-4)}, {FN (cos), ARG(3.45266983001243932001e-04,-5.0e-01), RES(1.1276258979946363573e0, 1.7991700040930800151e-4)}, {FN (cos), ARG(-3.45266983001243932001e-04,1.0e+00), RES(1.5430805428404715942e0, 4.057581624871654840e-4)}, {FN (cos), ARG(-3.45266983001243932001e-04,-1.0e+00), RES(1.5430805428404715942e0, -4.057581624871654840e-4)}, {FN (cos), ARG(3.45266983001243932001e-04,1.0e+00), RES(1.5430805428404715942e0, -4.057581624871654840e-4)}, {FN (cos), ARG(3.45266983001243932001e-04,-1.0e+00), RES(1.5430805428404715942e0, 4.057581624871654840e-4)}, {FN (cos), ARG(-3.45266983001243932001e-04,2.0e+00), RES(3.7621954668392959447e0, 1.2522351259043242989e-3)}, {FN (cos), ARG(-3.45266983001243932001e-04,-2.0e+00), RES(3.7621954668392959447e0, -1.2522351259043242989e-3)}, {FN (cos), ARG(3.45266983001243932001e-04,2.0e+00), RES(3.7621954668392959447e0, -1.2522351259043242989e-3)}, {FN (cos), ARG(3.45266983001243932001e-04,-2.0e+00), RES(3.7621954668392959447e0, 1.2522351259043242989e-3)}, {FN (cos), ARG(1.57045105981189525579e+00,0.0e+00), RES(3.4526697614152485627e-4, 0.0)}, {FN (cos), ARG(-1.57045105981189525579e+00,0.0e+00), RES(3.4526697614152485627e-4, 0.0)}, {FN (cos), ARG(1.57045105981189525579e+00,1.19209289550781250e-07), RES(3.4526697614152730954e-4, -1.1920928244535424532e-7)}, {FN (cos), ARG(1.57045105981189525579e+00,-1.19209289550781250e-07), RES(3.4526697614152730954e-4, 1.1920928244535424532e-7)}, {FN (cos), ARG(-1.57045105981189525579e+00,1.19209289550781250e-07), RES(3.4526697614152730954e-4, 1.1920928244535424532e-7)}, {FN (cos), ARG(-1.57045105981189525579e+00,-1.19209289550781250e-07), RES(3.4526697614152730954e-4, -1.1920928244535424532e-7)}, {FN (cos), ARG(1.57045105981189525579e+00,5.0e-01), RES(3.8933200722547541227e-4, -5.2109527443404709207e-1)}, {FN (cos), ARG(1.57045105981189525579e+00,-5.0e-01), RES(3.8933200722547541227e-4, 5.2109527443404709207e-1)}, {FN (cos), ARG(-1.57045105981189525579e+00,5.0e-01), RES(3.8933200722547541227e-4, 5.2109527443404709207e-1)}, {FN (cos), ARG(-1.57045105981189525579e+00,-5.0e-01), RES(3.8933200722547541227e-4, -5.2109527443404709207e-1)}, {FN (cos), ARG(1.57045105981189525579e+00,1.0e+00), RES(5.3277478472520380315e-4, -1.1752011235963524659e0)}, {FN (cos), ARG(1.57045105981189525579e+00,-1.0e+00), RES(5.3277478472520380315e-4, 1.1752011235963524659e0)}, {FN (cos), ARG(-1.57045105981189525579e+00,1.0e+00), RES(5.3277478472520380315e-4, 1.1752011235963524659e0)}, {FN (cos), ARG(-1.57045105981189525579e+00,-1.0e+00), RES(5.3277478472520380315e-4, -1.1752011235963524659e0)}, {FN (cos), ARG(1.57045105981189525579e+00,2.0e+00), RES(1.2989619299131198016e-3, -3.6268601916692946554e0)}, {FN (cos), ARG(1.57045105981189525579e+00,-2.0e+00), RES(1.2989619299131198016e-3, 3.6268601916692946554e0)}, {FN (cos), ARG(-1.57045105981189525579e+00,2.0e+00), RES(1.2989619299131198016e-3, 3.6268601916692946554e0)}, {FN (cos), ARG(-1.57045105981189525579e+00,-2.0e+00), RES(1.2989619299131198016e-3, -3.6268601916692946554e0)}, {FN (cos), ARG(1.57114159377789786021e+00,0.0e+00), RES(-3.4526697614140239160e-4, 0.0)}, {FN (cos), ARG(-1.57114159377789786021e+00,0.0e+00), RES(-3.4526697614140239160e-4, 0.0)}, {FN (cos), ARG(1.57114159377789786021e+00,1.19209289550781250e-07), RES(-3.4526697614140484486e-4, -1.1920928244535424533e-7)}, {FN (cos), ARG(1.57114159377789786021e+00,-1.19209289550781250e-07), RES(-3.4526697614140484486e-4, 1.1920928244535424533e-7)}, {FN (cos), ARG(-1.57114159377789786021e+00,1.19209289550781250e-07), RES(-3.4526697614140484486e-4, 1.1920928244535424533e-7)}, {FN (cos), ARG(-1.57114159377789786021e+00,-1.19209289550781250e-07), RES(-3.4526697614140484486e-4, -1.1920928244535424533e-7)}, {FN (cos), ARG(1.57114159377789786021e+00,5.0e-01), RES(-3.8933200722533731792e-4, -5.2109527443404709209e-1)}, {FN (cos), ARG(1.57114159377789786021e+00,-5.0e-01), RES(-3.8933200722533731792e-4, 5.2109527443404709209e-1)}, {FN (cos), ARG(-1.57114159377789786021e+00,5.0e-01), RES(-3.8933200722533731792e-4, 5.2109527443404709209e-1)}, {FN (cos), ARG(-1.57114159377789786021e+00,-5.0e-01), RES(-3.8933200722533731792e-4, -5.2109527443404709209e-1)}, {FN (cos), ARG(1.57114159377789786021e+00,1.0e+00), RES(-5.3277478472501483029e-4, -1.1752011235963524660e0)}, {FN (cos), ARG(1.57114159377789786021e+00,-1.0e+00), RES(-5.3277478472501483029e-4, 1.1752011235963524660e0)}, {FN (cos), ARG(-1.57114159377789786021e+00,1.0e+00), RES(-5.3277478472501483029e-4, 1.1752011235963524660e0)}, {FN (cos), ARG(-1.57114159377789786021e+00,-1.0e+00), RES(-5.3277478472501483029e-4, -1.1752011235963524660e0)}, {FN (cos), ARG(1.57114159377789786021e+00,2.0e+00), RES(-1.2989619299126590655e-3, -3.6268601916692946556e0)}, {FN (cos), ARG(1.57114159377789786021e+00,-2.0e+00), RES(-1.2989619299126590655e-3, 3.6268601916692946556e0)}, {FN (cos), ARG(-1.57114159377789786021e+00,2.0e+00), RES(-1.2989619299126590655e-3, 3.6268601916692946556e0)}, {FN (cos), ARG(-1.57114159377789786021e+00,-2.0e+00), RES(-1.2989619299126590655e-3, -3.6268601916692946556e0)}, {FN (cos), ARG(3.14124738660679181379e+00,0.0e+00), RES(-9.9999994039535581667e-1, 0.0)}, {FN (cos), ARG(-3.14124738660679181379e+00,0.0e+00), RES(-9.9999994039535581667e-1, 0.0)}, {FN (cos), ARG(3.14124738660679181379e+00,1.19209289550781250e-07), RES(-9.9999994039536292209e-1, -4.1159030931185115142e-11)}, {FN (cos), ARG(3.14124738660679181379e+00,-1.19209289550781250e-07), RES(-9.9999994039536292209e-1, 4.1159030931185115142e-11)}, {FN (cos), ARG(-3.14124738660679181379e+00,1.19209289550781250e-07), RES(-9.9999994039536292209e-1, 4.1159030931185115142e-11)}, {FN (cos), ARG(-3.14124738660679181379e+00,-1.19209289550781250e-07), RES(-9.9999994039536292209e-1, -4.1159030931185115142e-11)}, {FN (cos), ARG(3.14124738660679181379e+00,5.0e-01), RES(-1.1276258979946363572e0, -1.7991700040940218455e-4)}, {FN (cos), ARG(3.14124738660679181379e+00,-5.0e-01), RES(-1.1276258979946363572e0, 1.7991700040940218455e-4)}, {FN (cos), ARG(-3.14124738660679181379e+00,5.0e-01), RES(-1.1276258979946363572e0, 1.7991700040940218455e-4)}, {FN (cos), ARG(-3.14124738660679181379e+00,-5.0e-01), RES(-1.1276258979946363572e0, -1.7991700040940218455e-4)}, {FN (cos), ARG(3.14124738660679181379e+00,1.0e+00), RES(-1.5430805428404715941e0, -4.0575816248737789049e-4)}, {FN (cos), ARG(3.14124738660679181379e+00,-1.0e+00), RES(-1.5430805428404715941e0, 4.0575816248737789049e-4)}, {FN (cos), ARG(-3.14124738660679181379e+00,1.0e+00), RES(-1.5430805428404715941e0, 4.0575816248737789049e-4)}, {FN (cos), ARG(-3.14124738660679181379e+00,-1.0e+00), RES(-1.5430805428404715941e0, -4.0575816248737789049e-4)}, {FN (cos), ARG(3.14124738660679181379e+00,2.0e+00), RES(-3.7621954668392959444e0, -1.2522351259049798196e-3)}, {FN (cos), ARG(3.14124738660679181379e+00,-2.0e+00), RES(-3.7621954668392959444e0, 1.2522351259049798196e-3)}, {FN (cos), ARG(-3.14124738660679181379e+00,2.0e+00), RES(-3.7621954668392959444e0, 1.2522351259049798196e-3)}, {FN (cos), ARG(-3.14124738660679181379e+00,-2.0e+00), RES(-3.7621954668392959444e0, -1.2522351259049798196e-3)}, {FN (cos), ARG(3.14193792057279441821e+00,0.0e+00), RES(-9.9999994039535581675e-1, 0.0)}, {FN (cos), ARG(-3.14193792057279441821e+00,0.0e+00), RES(-9.9999994039535581675e-1, 0.0)}, {FN (cos), ARG(3.14193792057279441821e+00,1.19209289550781250e-07), RES(-9.9999994039536292218e-1, 4.1159030931155917289e-11)}, {FN (cos), ARG(3.14193792057279441821e+00,-1.19209289550781250e-07), RES(-9.9999994039536292218e-1, -4.1159030931155917289e-11)}, {FN (cos), ARG(-3.14193792057279441821e+00,1.19209289550781250e-07), RES(-9.9999994039536292218e-1, -4.1159030931155917289e-11)}, {FN (cos), ARG(-3.14193792057279441821e+00,-1.19209289550781250e-07), RES(-9.9999994039536292218e-1, 4.1159030931155917289e-11)}, {FN (cos), ARG(3.14193792057279441821e+00,5.0e-01), RES(-1.1276258979946363573e0, 1.7991700040927455302e-4)}, {FN (cos), ARG(3.14193792057279441821e+00,-5.0e-01), RES(-1.1276258979946363573e0, -1.7991700040927455302e-4)}, {FN (cos), ARG(-3.14193792057279441821e+00,5.0e-01), RES(-1.1276258979946363573e0, -1.7991700040927455302e-4)}, {FN (cos), ARG(-3.14193792057279441821e+00,-5.0e-01), RES(-1.1276258979946363573e0, 1.7991700040927455302e-4)}, {FN (cos), ARG(3.14193792057279441821e+00,1.0e+00), RES(-1.5430805428404715943e0, 4.0575816248709004923e-4)}, {FN (cos), ARG(3.14193792057279441821e+00,-1.0e+00), RES(-1.5430805428404715943e0, -4.0575816248709004923e-4)}, {FN (cos), ARG(-3.14193792057279441821e+00,1.0e+00), RES(-1.5430805428404715943e0, -4.0575816248709004923e-4)}, {FN (cos), ARG(-3.14193792057279441821e+00,-1.0e+00), RES(-1.5430805428404715943e0, 4.0575816248709004923e-4)}, {FN (cos), ARG(3.14193792057279441821e+00,2.0e+00), RES(-3.7621954668392959448e0, 1.2522351259040914950e-3)}, {FN (cos), ARG(3.14193792057279441821e+00,-2.0e+00), RES(-3.7621954668392959448e0, -1.2522351259040914950e-3)}, {FN (cos), ARG(-3.14193792057279441821e+00,2.0e+00), RES(-3.7621954668392959448e0, -1.2522351259040914950e-3)}, {FN (cos), ARG(-3.14193792057279441821e+00,-2.0e+00), RES(-3.7621954668392959448e0, 1.2522351259040914950e-3)}, {FN (cos), ARG(4.71204371340168837179e+00,0.0e+00), RES(-3.4526697614164732094e-4, 0.0)}, {FN (cos), ARG(-4.71204371340168837179e+00,0.0e+00), RES(-3.4526697614164732094e-4, 0.0)}, {FN (cos), ARG(4.71204371340168837179e+00,1.19209289550781250e-07), RES(-3.4526697614164977421e-4, 1.1920928244535424532e-7)}, {FN (cos), ARG(4.71204371340168837179e+00,-1.19209289550781250e-07), RES(-3.4526697614164977421e-4, -1.1920928244535424532e-7)}, {FN (cos), ARG(-4.71204371340168837179e+00,1.19209289550781250e-07), RES(-3.4526697614164977421e-4, -1.1920928244535424532e-7)}, {FN (cos), ARG(-4.71204371340168837179e+00,-1.19209289550781250e-07), RES(-3.4526697614164977421e-4, 1.1920928244535424532e-7)}, {FN (cos), ARG(4.71204371340168837179e+00,5.0e-01), RES(-3.8933200722561350661e-4, 5.2109527443404709205e-1)}, {FN (cos), ARG(4.71204371340168837179e+00,-5.0e-01), RES(-3.8933200722561350661e-4, -5.2109527443404709205e-1)}, {FN (cos), ARG(-4.71204371340168837179e+00,5.0e-01), RES(-3.8933200722561350661e-4, -5.2109527443404709205e-1)}, {FN (cos), ARG(-4.71204371340168837179e+00,-5.0e-01), RES(-3.8933200722561350661e-4, 5.2109527443404709205e-1)}, {FN (cos), ARG(4.71204371340168837179e+00,1.0e+00), RES(-5.3277478472539277601e-4, 1.1752011235963524659e0)}, {FN (cos), ARG(4.71204371340168837179e+00,-1.0e+00), RES(-5.3277478472539277601e-4, -1.1752011235963524659e0)}, {FN (cos), ARG(-4.71204371340168837179e+00,1.0e+00), RES(-5.3277478472539277601e-4, -1.1752011235963524659e0)}, {FN (cos), ARG(-4.71204371340168837179e+00,-1.0e+00), RES(-5.3277478472539277601e-4, 1.1752011235963524659e0)}, {FN (cos), ARG(4.71204371340168837179e+00,2.0e+00), RES(-1.2989619299135805376e-3, 3.6268601916692946552e0)}, {FN (cos), ARG(4.71204371340168837179e+00,-2.0e+00), RES(-1.2989619299135805376e-3, -3.6268601916692946552e0)}, {FN (cos), ARG(-4.71204371340168837179e+00,2.0e+00), RES(-1.2989619299135805376e-3, -3.6268601916692946552e0)}, {FN (cos), ARG(-4.71204371340168837179e+00,-2.0e+00), RES(-1.2989619299135805376e-3, 3.6268601916692946552e0)}, {FN (cos), ARG(4.71273424736769097620e+00,0.0e+00), RES(3.4526697614127992692e-4, 0.0)}, {FN (cos), ARG(-4.71273424736769097620e+00,0.0e+00), RES(3.4526697614127992692e-4, 0.0)}, {FN (cos), ARG(4.71273424736769097620e+00,1.19209289550781250e-07), RES(3.4526697614128238019e-4, 1.1920928244535424533e-7)}, {FN (cos), ARG(4.71273424736769097620e+00,-1.19209289550781250e-07), RES(3.4526697614128238019e-4, -1.1920928244535424533e-7)}, {FN (cos), ARG(-4.71273424736769097620e+00,1.19209289550781250e-07), RES(3.4526697614128238019e-4, -1.1920928244535424533e-7)}, {FN (cos), ARG(-4.71273424736769097620e+00,-1.19209289550781250e-07), RES(3.4526697614128238019e-4, 1.1920928244535424533e-7)}, {FN (cos), ARG(4.71273424736769097620e+00,5.0e-01), RES(3.8933200722519922358e-4, 5.2109527443404709212e-1)}, {FN (cos), ARG(4.71273424736769097620e+00,-5.0e-01), RES(3.8933200722519922358e-4, -5.2109527443404709212e-1)}, {FN (cos), ARG(-4.71273424736769097620e+00,5.0e-01), RES(3.8933200722519922358e-4, -5.2109527443404709212e-1)}, {FN (cos), ARG(-4.71273424736769097620e+00,-5.0e-01), RES(3.8933200722519922358e-4, 5.2109527443404709212e-1)}, {FN (cos), ARG(4.71273424736769097620e+00,1.0e+00), RES(5.3277478472482585742e-4, 1.1752011235963524660e0)}, {FN (cos), ARG(4.71273424736769097620e+00,-1.0e+00), RES(5.3277478472482585742e-4, -1.1752011235963524660e0)}, {FN (cos), ARG(-4.71273424736769097620e+00,1.0e+00), RES(5.3277478472482585742e-4, -1.1752011235963524660e0)}, {FN (cos), ARG(-4.71273424736769097620e+00,-1.0e+00), RES(5.3277478472482585742e-4, 1.1752011235963524660e0)}, {FN (cos), ARG(4.71273424736769097620e+00,2.0e+00), RES(1.2989619299121983294e-3, 3.6268601916692946557e0)}, {FN (cos), ARG(4.71273424736769097620e+00,-2.0e+00), RES(1.2989619299121983294e-3, -3.6268601916692946557e0)}, {FN (cos), ARG(-4.71273424736769097620e+00,2.0e+00), RES(1.2989619299121983294e-3, -3.6268601916692946557e0)}, {FN (cos), ARG(-4.71273424736769097620e+00,-2.0e+00), RES(1.2989619299121983294e-3, 3.6268601916692946557e0)}, {FN (cos), ARG(6.28284004019658492979e+00,0.0e+00), RES(9.9999994039535581662e-1, 0.0)}, {FN (cos), ARG(-6.28284004019658492979e+00,0.0e+00), RES(9.9999994039535581662e-1, 0.0)}, {FN (cos), ARG(6.28284004019658492979e+00,1.19209289550781250e-07), RES(9.9999994039536292205e-1, 4.1159030931199714069e-11)}, {FN (cos), ARG(6.28284004019658492979e+00,-1.19209289550781250e-07), RES(9.9999994039536292205e-1, -4.1159030931199714069e-11)}, {FN (cos), ARG(-6.28284004019658492979e+00,1.19209289550781250e-07), RES(9.9999994039536292205e-1, -4.1159030931199714069e-11)}, {FN (cos), ARG(-6.28284004019658492979e+00,-1.19209289550781250e-07), RES(9.9999994039536292205e-1, 4.1159030931199714069e-11)}, {FN (cos), ARG(6.28284004019658492979e+00,5.0e-01), RES(1.1276258979946363572e0, 1.7991700040946600032e-4)}, {FN (cos), ARG(6.28284004019658492979e+00,-5.0e-01), RES(1.1276258979946363572e0, -1.7991700040946600032e-4)}, {FN (cos), ARG(-6.28284004019658492979e+00,5.0e-01), RES(1.1276258979946363572e0, -1.7991700040946600032e-4)}, {FN (cos), ARG(-6.28284004019658492979e+00,-5.0e-01), RES(1.1276258979946363572e0, 1.7991700040946600032e-4)}, {FN (cos), ARG(6.28284004019658492979e+00,1.0e+00), RES(1.5430805428404715941e0, 4.0575816248752181112e-4)}, {FN (cos), ARG(6.28284004019658492979e+00,-1.0e+00), RES(1.5430805428404715941e0, -4.0575816248752181112e-4)}, {FN (cos), ARG(-6.28284004019658492979e+00,1.0e+00), RES(1.5430805428404715941e0, -4.0575816248752181112e-4)}, {FN (cos), ARG(-6.28284004019658492979e+00,-1.0e+00), RES(1.5430805428404715941e0, 4.0575816248752181112e-4)}, {FN (cos), ARG(6.28284004019658492979e+00,2.0e+00), RES(3.7621954668392959443e0, 1.2522351259054239819e-3)}, {FN (cos), ARG(6.28284004019658492979e+00,-2.0e+00), RES(3.7621954668392959443e0, -1.2522351259054239819e-3)}, {FN (cos), ARG(-6.28284004019658492979e+00,2.0e+00), RES(3.7621954668392959443e0, -1.2522351259054239819e-3)}, {FN (cos), ARG(-6.28284004019658492979e+00,-2.0e+00), RES(3.7621954668392959443e0, 1.2522351259054239819e-3)}, {FN (cos), ARG(6.28353057416258753420e+00,0.0e+00), RES(9.9999994039535581679e-1, 0.0)}, {FN (cos), ARG(-6.28353057416258753420e+00,0.0e+00), RES(9.9999994039535581679e-1, 0.0)}, {FN (cos), ARG(6.28353057416258753420e+00,1.19209289550781250e-07), RES(9.9999994039536292222e-1, -4.1159030931141318362e-11)}, {FN (cos), ARG(6.28353057416258753420e+00,-1.19209289550781250e-07), RES(9.9999994039536292222e-1, 4.1159030931141318362e-11)}, {FN (cos), ARG(-6.28353057416258753420e+00,1.19209289550781250e-07), RES(9.9999994039536292222e-1, 4.1159030931141318362e-11)}, {FN (cos), ARG(-6.28353057416258753420e+00,-1.19209289550781250e-07), RES(9.9999994039536292222e-1, -4.1159030931141318362e-11)}, {FN (cos), ARG(6.28353057416258753420e+00,5.0e-01), RES(1.1276258979946363574e0, -1.7991700040921073725e-4)}, {FN (cos), ARG(6.28353057416258753420e+00,-5.0e-01), RES(1.1276258979946363574e0, 1.7991700040921073725e-4)}, {FN (cos), ARG(-6.28353057416258753420e+00,5.0e-01), RES(1.1276258979946363574e0, 1.7991700040921073725e-4)}, {FN (cos), ARG(-6.28353057416258753420e+00,-5.0e-01), RES(1.1276258979946363574e0, -1.7991700040921073725e-4)}, {FN (cos), ARG(6.28353057416258753420e+00,1.0e+00), RES(1.5430805428404715943e0, -4.0575816248694612861e-4)}, {FN (cos), ARG(6.28353057416258753420e+00,-1.0e+00), RES(1.5430805428404715943e0, 4.0575816248694612861e-4)}, {FN (cos), ARG(-6.28353057416258753420e+00,1.0e+00), RES(1.5430805428404715943e0, 4.0575816248694612861e-4)}, {FN (cos), ARG(-6.28353057416258753420e+00,-1.0e+00), RES(1.5430805428404715943e0, -4.0575816248694612861e-4)}, {FN (cos), ARG(6.28353057416258753420e+00,2.0e+00), RES(3.7621954668392959449e0, -1.2522351259036473328e-3)}, {FN (cos), ARG(6.28353057416258753420e+00,-2.0e+00), RES(3.7621954668392959449e0, 1.2522351259036473328e-3)}, {FN (cos), ARG(-6.28353057416258753420e+00,2.0e+00), RES(3.7621954668392959449e0, 1.2522351259036473328e-3)}, {FN (cos), ARG(-6.28353057416258753420e+00,-2.0e+00), RES(3.7621954668392959449e0, -1.2522351259036473328e-3)}, {FN (cos), ARG(9.42443269378637893396e+00,0.0e+00), RES(-9.9999994039535581689e-1, 0.0)}, {FN (cos), ARG(-9.42443269378637893396e+00,0.0e+00), RES(-9.9999994039535581689e-1, 0.0)}, {FN (cos), ARG(9.42443269378637893396e+00,1.19209289550781250e-07), RES(-9.9999994039536292231e-1, -4.1159030931108433883e-11)}, {FN (cos), ARG(9.42443269378637893396e+00,-1.19209289550781250e-07), RES(-9.9999994039536292231e-1, 4.1159030931108433883e-11)}, {FN (cos), ARG(-9.42443269378637893396e+00,1.19209289550781250e-07), RES(-9.9999994039536292231e-1, 4.1159030931108433883e-11)}, {FN (cos), ARG(-9.42443269378637893396e+00,-1.19209289550781250e-07), RES(-9.9999994039536292231e-1, -4.1159030931108433883e-11)}, {FN (cos), ARG(9.42443269378637893396e+00,5.0e-01), RES(-1.1276258979946363575e0, -1.7991700040906699050e-4)}, {FN (cos), ARG(9.42443269378637893396e+00,-5.0e-01), RES(-1.1276258979946363575e0, 1.7991700040906699050e-4)}, {FN (cos), ARG(-9.42443269378637893396e+00,5.0e-01), RES(-1.1276258979946363575e0, 1.7991700040906699050e-4)}, {FN (cos), ARG(-9.42443269378637893396e+00,-5.0e-01), RES(-1.1276258979946363575e0, -1.7991700040906699050e-4)}, {FN (cos), ARG(9.42443269378637893396e+00,1.0e+00), RES(-1.5430805428404715945e0, -4.0575816248662194348e-4)}, {FN (cos), ARG(9.42443269378637893396e+00,-1.0e+00), RES(-1.5430805428404715945e0, 4.0575816248662194348e-4)}, {FN (cos), ARG(-9.42443269378637893396e+00,1.0e+00), RES(-1.5430805428404715945e0, 4.0575816248662194348e-4)}, {FN (cos), ARG(-9.42443269378637893396e+00,-1.0e+00), RES(-1.5430805428404715945e0, -4.0575816248662194348e-4)}, {FN (cos), ARG(9.42443269378637893396e+00,2.0e+00), RES(-3.7621954668392959453e0, -1.2522351259026468452e-3)}, {FN (cos), ARG(9.42443269378637893396e+00,-2.0e+00), RES(-3.7621954668392959453e0, 1.2522351259026468452e-3)}, {FN (cos), ARG(-9.42443269378637893396e+00,2.0e+00), RES(-3.7621954668392959453e0, 1.2522351259026468452e-3)}, {FN (cos), ARG(-9.42443269378637893396e+00,-2.0e+00), RES(-3.7621954668392959453e0, -1.2522351259026468452e-3)}, {FN (cos), ARG(9.42512322775237976202e+00,0.0e+00), RES(-9.9999994039535581714e-1, 0.0)}, {FN (cos), ARG(-9.42512322775237976202e+00,0.0e+00), RES(-9.9999994039535581714e-1, 0.0)}, {FN (cos), ARG(9.42512322775237976202e+00,1.19209289550781250e-07), RES(-9.9999994039536292257e-1, 4.1159030931020840323e-11)}, {FN (cos), ARG(9.42512322775237976202e+00,-1.19209289550781250e-07), RES(-9.9999994039536292257e-1, -4.1159030931020840323e-11)}, {FN (cos), ARG(-9.42512322775237976202e+00,1.19209289550781250e-07), RES(-9.9999994039536292257e-1, -4.1159030931020840323e-11)}, {FN (cos), ARG(-9.42512322775237976202e+00,-1.19209289550781250e-07), RES(-9.9999994039536292257e-1, 4.1159030931020840323e-11)}, {FN (cos), ARG(9.42512322775237976202e+00,5.0e-01), RES(-1.1276258979946363577e0, 1.7991700040868409591e-4)}, {FN (cos), ARG(9.42512322775237976202e+00,-5.0e-01), RES(-1.1276258979946363577e0, -1.7991700040868409591e-4)}, {FN (cos), ARG(-9.42512322775237976202e+00,5.0e-01), RES(-1.1276258979946363577e0, -1.7991700040868409591e-4)}, {FN (cos), ARG(-9.42512322775237976202e+00,-5.0e-01), RES(-1.1276258979946363577e0, 1.7991700040868409591e-4)}, {FN (cos), ARG(9.42512322775237976202e+00,1.0e+00), RES(-1.5430805428404715949e0, 4.0575816248575841970e-4)}, {FN (cos), ARG(9.42512322775237976202e+00,-1.0e+00), RES(-1.5430805428404715949e0, -4.0575816248575841970e-4)}, {FN (cos), ARG(-9.42512322775237976202e+00,1.0e+00), RES(-1.5430805428404715949e0, -4.0575816248575841970e-4)}, {FN (cos), ARG(-9.42512322775237976202e+00,-1.0e+00), RES(-1.5430805428404715949e0, 4.0575816248575841970e-4)}, {FN (cos), ARG(9.42512322775237976202e+00,2.0e+00), RES(-3.7621954668392959462e0, 1.2522351258999818715e-3)}, {FN (cos), ARG(9.42512322775237976202e+00,-2.0e+00), RES(-3.7621954668392959462e0, -1.2522351258999818715e-3)}, {FN (cos), ARG(-9.42512322775237976202e+00,2.0e+00), RES(-3.7621954668392959462e0, -1.2522351258999818715e-3)}, {FN (cos), ARG(-9.42512322775237976202e+00,-2.0e+00), RES(-3.7621954668392959462e0, 1.2522351258999818715e-3)}, {FN (tan), ARG(-3.45266983001243932001e-04,0.0e+00), RES(-3.4526699672092183585e-4, 0.0)}, {FN (tan), ARG(3.45266983001243932001e-04,0.0e+00), RES(3.4526699672092183585e-4, 0.0)}, {FN (tan), ARG(-3.45266983001243932001e-04,1.19209289550781250e-07), RES(-3.4526699672091692931e-4, 1.1920930376163652989e-7)}, {FN (tan), ARG(-3.45266983001243932001e-04,-1.19209289550781250e-07), RES(-3.4526699672091692931e-4, -1.1920930376163652989e-7)}, {FN (tan), ARG(3.45266983001243932001e-04,1.19209289550781250e-07), RES(3.4526699672091692931e-4, 1.1920930376163652989e-7)}, {FN (tan), ARG(3.45266983001243932001e-04,-1.19209289550781250e-07), RES(3.4526699672091692931e-4, -1.1920930376163652989e-7)}, {FN (tan), ARG(-3.45266983001243932001e-04,5.0e-01), RES(-2.7153443992655805934e-4, 4.6211720058436229979e-1)}, {FN (tan), ARG(-3.45266983001243932001e-04,-5.0e-01), RES(-2.7153443992655805934e-4, -4.6211720058436229979e-1)}, {FN (tan), ARG(3.45266983001243932001e-04,5.0e-01), RES(2.7153443992655805934e-4, 4.6211720058436229979e-1)}, {FN (tan), ARG(3.45266983001243932001e-04,-5.0e-01), RES(2.7153443992655805934e-4, -4.6211720058436229979e-1)}, {FN (tan), ARG(-3.45266983001243932001e-04,1.0e+00), RES(-1.4500326960274960880e-4, 7.6159419408485704836e-1)}, {FN (tan), ARG(-3.45266983001243932001e-04,-1.0e+00), RES(-1.4500326960274960880e-4, -7.6159419408485704836e-1)}, {FN (tan), ARG(3.45266983001243932001e-04,1.0e+00), RES(1.4500326960274960880e-4, 7.6159419408485704836e-1)}, {FN (tan), ARG(3.45266983001243932001e-04,-1.0e+00), RES(1.4500326960274960880e-4, -7.6159419408485704836e-1)}, {FN (tan), ARG(-3.45266983001243932001e-04,2.0e+00), RES(-2.4393395410435306874e-5, 9.6402758819508310556e-1)}, {FN (tan), ARG(-3.45266983001243932001e-04,-2.0e+00), RES(-2.4393395410435306874e-5, -9.6402758819508310556e-1)}, {FN (tan), ARG(3.45266983001243932001e-04,2.0e+00), RES(2.4393395410435306874e-5, 9.6402758819508310556e-1)}, {FN (tan), ARG(3.45266983001243932001e-04,-2.0e+00), RES(2.4393395410435306874e-5, -9.6402758819508310556e-1)}, {FN (tan), ARG(1.57045105981189525579e+00,0.0e+00), RES(2.8963092606501007060e3, 0.0)}, {FN (tan), ARG(-1.57045105981189525579e+00,0.0e+00), RES(-2.8963092606501007060e3, 0.0)}, {FN (tan), ARG(1.57045105981189525579e+00,1.19209289550781250e-07), RES(2.8963089153831588642e3, 9.9999992052646305569e-1)}, {FN (tan), ARG(1.57045105981189525579e+00,-1.19209289550781250e-07), RES(2.8963089153831588642e3, -9.9999992052646305569e-1)}, {FN (tan), ARG(-1.57045105981189525579e+00,1.19209289550781250e-07), RES(-2.8963089153831588642e3, 9.9999992052646305569e-1)}, {FN (tan), ARG(-1.57045105981189525579e+00,-1.19209289550781250e-07), RES(-2.8963089153831588642e3, -9.9999992052646305569e-1)}, {FN (tan), ARG(1.57045105981189525579e+00,5.0e-01), RES(1.2715121175455623363e-3, 2.1639524637389325996e0)}, {FN (tan), ARG(1.57045105981189525579e+00,-5.0e-01), RES(1.2715121175455623363e-3, -2.1639524637389325996e0)}, {FN (tan), ARG(-1.57045105981189525579e+00,5.0e-01), RES(-1.2715121175455623363e-3, 2.1639524637389325996e0)}, {FN (tan), ARG(-1.57045105981189525579e+00,-5.0e-01), RES(-1.2715121175455623363e-3, -2.1639524637389325996e0)}, {FN (tan), ARG(1.57045105981189525579e+00,1.0e+00), RES(2.4999454374276273814e-4, 1.3130351721648674823e0)}, {FN (tan), ARG(1.57045105981189525579e+00,-1.0e+00), RES(2.4999454374276273814e-4, -1.3130351721648674823e0)}, {FN (tan), ARG(-1.57045105981189525579e+00,1.0e+00), RES(-2.4999454374276273814e-4, 1.3130351721648674823e0)}, {FN (tan), ARG(-1.57045105981189525579e+00,-1.0e+00), RES(-2.4999454374276273814e-4, -1.3130351721648674823e0)}, {FN (tan), ARG(1.57045105981189525579e+00,2.0e+00), RES(2.6247825506572821595e-5, 1.0373147113268752620e0)}, {FN (tan), ARG(1.57045105981189525579e+00,-2.0e+00), RES(2.6247825506572821595e-5, -1.0373147113268752620e0)}, {FN (tan), ARG(-1.57045105981189525579e+00,2.0e+00), RES(-2.6247825506572821595e-5, 1.0373147113268752620e0)}, {FN (tan), ARG(-1.57045105981189525579e+00,-2.0e+00), RES(-2.6247825506572821595e-5, -1.0373147113268752620e0)}, {FN (tan), ARG(1.57114159377789786021e+00,0.0e+00), RES(-2.8963092606511280143e3, 0.0)}, {FN (tan), ARG(-1.57114159377789786021e+00,0.0e+00), RES(2.8963092606511280143e3, 0.0)}, {FN (tan), ARG(1.57114159377789786021e+00,1.19209289550781250e-07), RES(-2.8963089153841861720e3, 9.9999992052717244672e-1)}, {FN (tan), ARG(1.57114159377789786021e+00,-1.19209289550781250e-07), RES(-2.8963089153841861720e3, -9.9999992052717244672e-1)}, {FN (tan), ARG(-1.57114159377789786021e+00,1.19209289550781250e-07), RES(2.8963089153841861720e3, 9.9999992052717244672e-1)}, {FN (tan), ARG(-1.57114159377789786021e+00,-1.19209289550781250e-07), RES(2.8963089153841861720e3, -9.9999992052717244672e-1)}, {FN (tan), ARG(1.57114159377789786021e+00,5.0e-01), RES(-1.2715121175451113370e-3, 2.1639524637389326002e0)}, {FN (tan), ARG(1.57114159377789786021e+00,-5.0e-01), RES(-1.2715121175451113370e-3, -2.1639524637389326002e0)}, {FN (tan), ARG(-1.57114159377789786021e+00,5.0e-01), RES(1.2715121175451113370e-3, 2.1639524637389326002e0)}, {FN (tan), ARG(-1.57114159377789786021e+00,-5.0e-01), RES(1.2715121175451113370e-3, -2.1639524637389326002e0)}, {FN (tan), ARG(1.57114159377789786021e+00,1.0e+00), RES(-2.4999454374267406620e-4, 1.3130351721648674824e0)}, {FN (tan), ARG(1.57114159377789786021e+00,-1.0e+00), RES(-2.4999454374267406620e-4, -1.3130351721648674824e0)}, {FN (tan), ARG(-1.57114159377789786021e+00,1.0e+00), RES(2.4999454374267406620e-4, 1.3130351721648674824e0)}, {FN (tan), ARG(-1.57114159377789786021e+00,-1.0e+00), RES(2.4999454374267406620e-4, -1.3130351721648674824e0)}, {FN (tan), ARG(1.57114159377789786021e+00,2.0e+00), RES(-2.6247825506563511609e-5, 1.0373147113268752620e0)}, {FN (tan), ARG(1.57114159377789786021e+00,-2.0e+00), RES(-2.6247825506563511609e-5, -1.0373147113268752620e0)}, {FN (tan), ARG(-1.57114159377789786021e+00,2.0e+00), RES(2.6247825506563511609e-5, 1.0373147113268752620e0)}, {FN (tan), ARG(-1.57114159377789786021e+00,-2.0e+00), RES(2.6247825506563511609e-5, -1.0373147113268752620e0)}, {FN (tan), ARG(3.14124738660679181379e+00,0.0e+00), RES(-3.4526699672110257641e-4, 0.0)}, {FN (tan), ARG(-3.14124738660679181379e+00,0.0e+00), RES(3.4526699672110257641e-4, 0.0)}, {FN (tan), ARG(3.14124738660679181379e+00,1.19209289550781250e-07), RES(-3.4526699672109766987e-4, 1.1920930376163652991e-7)}, {FN (tan), ARG(3.14124738660679181379e+00,-1.19209289550781250e-07), RES(-3.4526699672109766987e-4, -1.1920930376163652991e-7)}, {FN (tan), ARG(-3.14124738660679181379e+00,1.19209289550781250e-07), RES(3.4526699672109766987e-4, 1.1920930376163652991e-7)}, {FN (tan), ARG(-3.14124738660679181379e+00,-1.19209289550781250e-07), RES(3.4526699672109766987e-4, -1.1920930376163652991e-7)}, {FN (tan), ARG(3.14124738660679181379e+00,5.0e-01), RES(-2.7153443992670020234e-4, 4.6211720058436229984e-1)}, {FN (tan), ARG(3.14124738660679181379e+00,-5.0e-01), RES(-2.7153443992670020234e-4, -4.6211720058436229984e-1)}, {FN (tan), ARG(-3.14124738660679181379e+00,5.0e-01), RES(2.7153443992670020234e-4, 4.6211720058436229984e-1)}, {FN (tan), ARG(-3.14124738660679181379e+00,-5.0e-01), RES(2.7153443992670020234e-4, -4.6211720058436229984e-1)}, {FN (tan), ARG(3.14124738660679181379e+00,1.0e+00), RES(-1.4500326960282551519e-4, 7.6159419408485704840e-1)}, {FN (tan), ARG(3.14124738660679181379e+00,-1.0e+00), RES(-1.4500326960282551519e-4, -7.6159419408485704840e-1)}, {FN (tan), ARG(-3.14124738660679181379e+00,1.0e+00), RES(1.4500326960282551519e-4, 7.6159419408485704840e-1)}, {FN (tan), ARG(-3.14124738660679181379e+00,-1.0e+00), RES(1.4500326960282551519e-4, -7.6159419408485704840e-1)}, {FN (tan), ARG(3.14124738660679181379e+00,2.0e+00), RES(-2.4393395410448076340e-5, 9.6402758819508310557e-1)}, {FN (tan), ARG(3.14124738660679181379e+00,-2.0e+00), RES(-2.4393395410448076340e-5, -9.6402758819508310557e-1)}, {FN (tan), ARG(-3.14124738660679181379e+00,2.0e+00), RES(2.4393395410448076340e-5, 9.6402758819508310557e-1)}, {FN (tan), ARG(-3.14124738660679181379e+00,-2.0e+00), RES(2.4393395410448076340e-5, -9.6402758819508310557e-1)}, {FN (tan), ARG(3.14193792057279441821e+00,0.0e+00), RES(3.4526699672085764703e-4, 0.0)}, {FN (tan), ARG(-3.14193792057279441821e+00,0.0e+00), RES(-3.4526699672085764703e-4, 0.0)}, {FN (tan), ARG(3.14193792057279441821e+00,1.19209289550781250e-07), RES(3.4526699672085274049e-4, 1.1920930376163652989e-7)}, {FN (tan), ARG(3.14193792057279441821e+00,-1.19209289550781250e-07), RES(3.4526699672085274049e-4, -1.1920930376163652989e-7)}, {FN (tan), ARG(-3.14193792057279441821e+00,1.19209289550781250e-07), RES(-3.4526699672085274049e-4, 1.1920930376163652989e-7)}, {FN (tan), ARG(-3.14193792057279441821e+00,-1.19209289550781250e-07), RES(-3.4526699672085274049e-4, -1.1920930376163652989e-7)}, {FN (tan), ARG(3.14193792057279441821e+00,5.0e-01), RES(2.7153443992650757820e-4, 4.6211720058436229978e-1)}, {FN (tan), ARG(3.14193792057279441821e+00,-5.0e-01), RES(2.7153443992650757820e-4, -4.6211720058436229978e-1)}, {FN (tan), ARG(-3.14193792057279441821e+00,5.0e-01), RES(-2.7153443992650757820e-4, 4.6211720058436229978e-1)}, {FN (tan), ARG(-3.14193792057279441821e+00,-5.0e-01), RES(-2.7153443992650757820e-4, -4.6211720058436229978e-1)}, {FN (tan), ARG(3.14193792057279441821e+00,1.0e+00), RES(1.4500326960272265115e-4, 7.6159419408485704835e-1)}, {FN (tan), ARG(3.14193792057279441821e+00,-1.0e+00), RES(1.4500326960272265115e-4, -7.6159419408485704835e-1)}, {FN (tan), ARG(-3.14193792057279441821e+00,1.0e+00), RES(-1.4500326960272265115e-4, 7.6159419408485704835e-1)}, {FN (tan), ARG(-3.14193792057279441821e+00,-1.0e+00), RES(-1.4500326960272265115e-4, -7.6159419408485704835e-1)}, {FN (tan), ARG(3.14193792057279441821e+00,2.0e+00), RES(2.4393395410430771882e-5, 9.6402758819508310556e-1)}, {FN (tan), ARG(3.14193792057279441821e+00,-2.0e+00), RES(2.4393395410430771882e-5, -9.6402758819508310556e-1)}, {FN (tan), ARG(-3.14193792057279441821e+00,2.0e+00), RES(-2.4393395410430771882e-5, 9.6402758819508310556e-1)}, {FN (tan), ARG(-3.14193792057279441821e+00,-2.0e+00), RES(-2.4393395410430771882e-5, -9.6402758819508310556e-1)}, {FN (tan), ARG(4.71204371340168837179e+00,0.0e+00), RES(2.8963092606490733978e3, 0.0)}, {FN (tan), ARG(-4.71204371340168837179e+00,0.0e+00), RES(-2.8963092606490733978e3, 0.0)}, {FN (tan), ARG(4.71204371340168837179e+00,1.19209289550781250e-07), RES(2.8963089153821315563e3, 9.9999992052575366466e-1)}, {FN (tan), ARG(4.71204371340168837179e+00,-1.19209289550781250e-07), RES(2.8963089153821315563e3, -9.9999992052575366466e-1)}, {FN (tan), ARG(-4.71204371340168837179e+00,1.19209289550781250e-07), RES(-2.8963089153821315563e3, 9.9999992052575366466e-1)}, {FN (tan), ARG(-4.71204371340168837179e+00,-1.19209289550781250e-07), RES(-2.8963089153821315563e3, -9.9999992052575366466e-1)}, {FN (tan), ARG(4.71204371340168837179e+00,5.0e-01), RES(1.2715121175460133355e-3, 2.1639524637389325989e0)}, {FN (tan), ARG(4.71204371340168837179e+00,-5.0e-01), RES(1.2715121175460133355e-3, -2.1639524637389325989e0)}, {FN (tan), ARG(-4.71204371340168837179e+00,5.0e-01), RES(-1.2715121175460133355e-3, 2.1639524637389325989e0)}, {FN (tan), ARG(-4.71204371340168837179e+00,-5.0e-01), RES(-1.2715121175460133355e-3, -2.1639524637389325989e0)}, {FN (tan), ARG(4.71204371340168837179e+00,1.0e+00), RES(2.4999454374285141007e-4, 1.3130351721648674822e0)}, {FN (tan), ARG(4.71204371340168837179e+00,-1.0e+00), RES(2.4999454374285141007e-4, -1.3130351721648674822e0)}, {FN (tan), ARG(-4.71204371340168837179e+00,1.0e+00), RES(-2.4999454374285141007e-4, 1.3130351721648674822e0)}, {FN (tan), ARG(-4.71204371340168837179e+00,-1.0e+00), RES(-2.4999454374285141007e-4, -1.3130351721648674822e0)}, {FN (tan), ARG(4.71204371340168837179e+00,2.0e+00), RES(2.6247825506582131582e-5, 1.0373147113268752620e0)}, {FN (tan), ARG(4.71204371340168837179e+00,-2.0e+00), RES(2.6247825506582131582e-5, -1.0373147113268752620e0)}, {FN (tan), ARG(-4.71204371340168837179e+00,2.0e+00), RES(-2.6247825506582131582e-5, 1.0373147113268752620e0)}, {FN (tan), ARG(-4.71204371340168837179e+00,-2.0e+00), RES(-2.6247825506582131582e-5, -1.0373147113268752620e0)}, {FN (tan), ARG(4.71273424736769097620e+00,0.0e+00), RES(-2.8963092606521553225e3, 0.0)}, {FN (tan), ARG(-4.71273424736769097620e+00,0.0e+00), RES(2.8963092606521553225e3, 0.0)}, {FN (tan), ARG(4.71273424736769097620e+00,1.19209289550781250e-07), RES(-2.8963089153852134799e3, 9.9999992052788183776e-1)}, {FN (tan), ARG(4.71273424736769097620e+00,-1.19209289550781250e-07), RES(-2.8963089153852134799e3, -9.9999992052788183776e-1)}, {FN (tan), ARG(-4.71273424736769097620e+00,1.19209289550781250e-07), RES(2.8963089153852134799e3, 9.9999992052788183776e-1)}, {FN (tan), ARG(-4.71273424736769097620e+00,-1.19209289550781250e-07), RES(2.8963089153852134799e3, -9.9999992052788183776e-1)}, {FN (tan), ARG(4.71273424736769097620e+00,5.0e-01), RES(-1.2715121175446603377e-3, 2.1639524637389326009e0)}, {FN (tan), ARG(4.71273424736769097620e+00,-5.0e-01), RES(-1.2715121175446603377e-3, -2.1639524637389326009e0)}, {FN (tan), ARG(-4.71273424736769097620e+00,5.0e-01), RES(1.2715121175446603377e-3, 2.1639524637389326009e0)}, {FN (tan), ARG(-4.71273424736769097620e+00,-5.0e-01), RES(1.2715121175446603377e-3, -2.1639524637389326009e0)}, {FN (tan), ARG(4.71273424736769097620e+00,1.0e+00), RES(-2.4999454374258539427e-4, 1.3130351721648674825e0)}, {FN (tan), ARG(4.71273424736769097620e+00,-1.0e+00), RES(-2.4999454374258539427e-4, -1.3130351721648674825e0)}, {FN (tan), ARG(-4.71273424736769097620e+00,1.0e+00), RES(2.4999454374258539427e-4, 1.3130351721648674825e0)}, {FN (tan), ARG(-4.71273424736769097620e+00,-1.0e+00), RES(2.4999454374258539427e-4, -1.3130351721648674825e0)}, {FN (tan), ARG(4.71273424736769097620e+00,2.0e+00), RES(-2.6247825506554201622e-5, 1.0373147113268752620e0)}, {FN (tan), ARG(4.71273424736769097620e+00,-2.0e+00), RES(-2.6247825506554201622e-5, -1.0373147113268752620e0)}, {FN (tan), ARG(-4.71273424736769097620e+00,2.0e+00), RES(2.6247825506554201622e-5, 1.0373147113268752620e0)}, {FN (tan), ARG(-4.71273424736769097620e+00,-2.0e+00), RES(2.6247825506554201622e-5, -1.0373147113268752620e0)}, {FN (tan), ARG(6.28284004019658492979e+00,0.0e+00), RES(-3.4526699672122504111e-4, 0.0)}, {FN (tan), ARG(-6.28284004019658492979e+00,0.0e+00), RES(3.4526699672122504111e-4, 0.0)}, {FN (tan), ARG(6.28284004019658492979e+00,1.19209289550781250e-07), RES(-3.4526699672122013457e-4, 1.1920930376163652992e-7)}, {FN (tan), ARG(6.28284004019658492979e+00,-1.19209289550781250e-07), RES(-3.4526699672122013457e-4, -1.1920930376163652992e-7)}, {FN (tan), ARG(-6.28284004019658492979e+00,1.19209289550781250e-07), RES(3.4526699672122013457e-4, 1.1920930376163652992e-7)}, {FN (tan), ARG(-6.28284004019658492979e+00,-1.19209289550781250e-07), RES(3.4526699672122013457e-4, -1.1920930376163652992e-7)}, {FN (tan), ARG(6.28284004019658492979e+00,5.0e-01), RES(-2.7153443992679651442e-4, 4.6211720058436229987e-1)}, {FN (tan), ARG(6.28284004019658492979e+00,-5.0e-01), RES(-2.7153443992679651442e-4, -4.6211720058436229987e-1)}, {FN (tan), ARG(-6.28284004019658492979e+00,5.0e-01), RES(2.7153443992679651442e-4, 4.6211720058436229987e-1)}, {FN (tan), ARG(-6.28284004019658492979e+00,-5.0e-01), RES(2.7153443992679651442e-4, -4.6211720058436229987e-1)}, {FN (tan), ARG(6.28284004019658492979e+00,1.0e+00), RES(-1.4500326960287694721e-4, 7.6159419408485704843e-1)}, {FN (tan), ARG(6.28284004019658492979e+00,-1.0e+00), RES(-1.4500326960287694721e-4, -7.6159419408485704843e-1)}, {FN (tan), ARG(-6.28284004019658492979e+00,1.0e+00), RES(1.4500326960287694721e-4, 7.6159419408485704843e-1)}, {FN (tan), ARG(-6.28284004019658492979e+00,-1.0e+00), RES(1.4500326960287694721e-4, -7.6159419408485704843e-1)}, {FN (tan), ARG(6.28284004019658492979e+00,2.0e+00), RES(-2.4393395410456728569e-5, 9.6402758819508310558e-1)}, {FN (tan), ARG(6.28284004019658492979e+00,-2.0e+00), RES(-2.4393395410456728569e-5, -9.6402758819508310558e-1)}, {FN (tan), ARG(-6.28284004019658492979e+00,2.0e+00), RES(2.4393395410456728569e-5, 9.6402758819508310558e-1)}, {FN (tan), ARG(-6.28284004019658492979e+00,-2.0e+00), RES(2.4393395410456728569e-5, -9.6402758819508310558e-1)}, {FN (tan), ARG(6.28353057416258753420e+00,0.0e+00), RES(3.4526699672073518233e-4, 0.0)}, {FN (tan), ARG(-6.28353057416258753420e+00,0.0e+00), RES(-3.4526699672073518233e-4, 0.0)}, {FN (tan), ARG(6.28353057416258753420e+00,1.19209289550781250e-07), RES(3.4526699672073027579e-4, 1.1920930376163652988e-7)}, {FN (tan), ARG(6.28353057416258753420e+00,-1.19209289550781250e-07), RES(3.4526699672073027579e-4, -1.1920930376163652988e-7)}, {FN (tan), ARG(-6.28353057416258753420e+00,1.19209289550781250e-07), RES(-3.4526699672073027579e-4, 1.1920930376163652988e-7)}, {FN (tan), ARG(-6.28353057416258753420e+00,-1.19209289550781250e-07), RES(-3.4526699672073027579e-4, -1.1920930376163652988e-7)}, {FN (tan), ARG(6.28353057416258753420e+00,5.0e-01), RES(2.7153443992641126612e-4, 4.6211720058436229974e-1)}, {FN (tan), ARG(6.28353057416258753420e+00,-5.0e-01), RES(2.7153443992641126612e-4, -4.6211720058436229974e-1)}, {FN (tan), ARG(-6.28353057416258753420e+00,5.0e-01), RES(-2.7153443992641126612e-4, 4.6211720058436229974e-1)}, {FN (tan), ARG(-6.28353057416258753420e+00,-5.0e-01), RES(-2.7153443992641126612e-4, -4.6211720058436229974e-1)}, {FN (tan), ARG(6.28353057416258753420e+00,1.0e+00), RES(1.4500326960267121913e-4, 7.6159419408485704832e-1)}, {FN (tan), ARG(6.28353057416258753420e+00,-1.0e+00), RES(1.4500326960267121913e-4, -7.6159419408485704832e-1)}, {FN (tan), ARG(-6.28353057416258753420e+00,1.0e+00), RES(-1.4500326960267121913e-4, 7.6159419408485704832e-1)}, {FN (tan), ARG(-6.28353057416258753420e+00,-1.0e+00), RES(-1.4500326960267121913e-4, -7.6159419408485704832e-1)}, {FN (tan), ARG(6.28353057416258753420e+00,2.0e+00), RES(2.4393395410422119654e-5, 9.6402758819508310555e-1)}, {FN (tan), ARG(6.28353057416258753420e+00,-2.0e+00), RES(2.4393395410422119654e-5, -9.6402758819508310555e-1)}, {FN (tan), ARG(-6.28353057416258753420e+00,2.0e+00), RES(-2.4393395410422119654e-5, 9.6402758819508310555e-1)}, {FN (tan), ARG(-6.28353057416258753420e+00,-2.0e+00), RES(-2.4393395410422119654e-5, -9.6402758819508310555e-1)}, {FN (tan), ARG(9.42443269378637893396e+00,0.0e+00), RES(-3.4526699672045932728e-4, 0.0)}, {FN (tan), ARG(-9.42443269378637893396e+00,0.0e+00), RES(3.4526699672045932728e-4, 0.0)}, {FN (tan), ARG(9.42443269378637893396e+00,1.19209289550781250e-07), RES(-3.4526699672045442074e-4, 1.1920930376163652985e-7)}, {FN (tan), ARG(9.42443269378637893396e+00,-1.19209289550781250e-07), RES(-3.4526699672045442074e-4, -1.1920930376163652985e-7)}, {FN (tan), ARG(-9.42443269378637893396e+00,1.19209289550781250e-07), RES(3.4526699672045442074e-4, 1.1920930376163652985e-7)}, {FN (tan), ARG(-9.42443269378637893396e+00,-1.19209289550781250e-07), RES(3.4526699672045442074e-4, -1.1920930376163652985e-7)}, {FN (tan), ARG(9.42443269378637893396e+00,5.0e-01), RES(-2.7153443992619432056e-4, 4.6211720058436229968e-1)}, {FN (tan), ARG(9.42443269378637893396e+00,-5.0e-01), RES(-2.7153443992619432056e-4, -4.6211720058436229968e-1)}, {FN (tan), ARG(-9.42443269378637893396e+00,5.0e-01), RES(2.7153443992619432056e-4, 4.6211720058436229968e-1)}, {FN (tan), ARG(-9.42443269378637893396e+00,-5.0e-01), RES(2.7153443992619432056e-4, -4.6211720058436229968e-1)}, {FN (tan), ARG(9.42443269378637893396e+00,1.0e+00), RES(-1.4500326960255536711e-4, 7.6159419408485704826e-1)}, {FN (tan), ARG(9.42443269378637893396e+00,-1.0e+00), RES(-1.4500326960255536711e-4, -7.6159419408485704826e-1)}, {FN (tan), ARG(-9.42443269378637893396e+00,1.0e+00), RES(1.4500326960255536711e-4, 7.6159419408485704826e-1)}, {FN (tan), ARG(-9.42443269378637893396e+00,-1.0e+00), RES(1.4500326960255536711e-4, -7.6159419408485704826e-1)}, {FN (tan), ARG(9.42443269378637893396e+00,2.0e+00), RES(-2.4393395410402630273e-5, 9.6402758819508310554e-1)}, {FN (tan), ARG(9.42443269378637893396e+00,-2.0e+00), RES(-2.4393395410402630273e-5, -9.6402758819508310554e-1)}, {FN (tan), ARG(-9.42443269378637893396e+00,2.0e+00), RES(2.4393395410402630273e-5, 9.6402758819508310554e-1)}, {FN (tan), ARG(-9.42443269378637893396e+00,-2.0e+00), RES(2.4393395410402630273e-5, -9.6402758819508310554e-1)}, {FN (tan), ARG(9.42512322775237976202e+00,0.0e+00), RES(3.4526699671972453911e-4, 0.0)}, {FN (tan), ARG(-9.42512322775237976202e+00,0.0e+00), RES(-3.4526699671972453911e-4, 0.0)}, {FN (tan), ARG(9.42512322775237976202e+00,1.19209289550781250e-07), RES(3.4526699671971963257e-4, 1.1920930376163652979e-7)}, {FN (tan), ARG(9.42512322775237976202e+00,-1.19209289550781250e-07), RES(3.4526699671971963257e-4, -1.1920930376163652979e-7)}, {FN (tan), ARG(-9.42512322775237976202e+00,1.19209289550781250e-07), RES(-3.4526699671971963257e-4, 1.1920930376163652979e-7)}, {FN (tan), ARG(-9.42512322775237976202e+00,-1.19209289550781250e-07), RES(-3.4526699671971963257e-4, -1.1920930376163652979e-7)}, {FN (tan), ARG(9.42512322775237976202e+00,5.0e-01), RES(2.7153443992561644811e-4, 4.6211720058436229949e-1)}, {FN (tan), ARG(9.42512322775237976202e+00,-5.0e-01), RES(2.7153443992561644811e-4, -4.6211720058436229949e-1)}, {FN (tan), ARG(-9.42512322775237976202e+00,5.0e-01), RES(-2.7153443992561644811e-4, 4.6211720058436229949e-1)}, {FN (tan), ARG(-9.42512322775237976202e+00,-5.0e-01), RES(-2.7153443992561644811e-4, -4.6211720058436229949e-1)}, {FN (tan), ARG(9.42512322775237976202e+00,1.0e+00), RES(1.450032696022467750e-4, 7.6159419408485704810e-1)}, {FN (tan), ARG(9.42512322775237976202e+00,-1.0e+00), RES(1.450032696022467750e-4, -7.6159419408485704810e-1)}, {FN (tan), ARG(-9.42512322775237976202e+00,1.0e+00), RES(-1.450032696022467750e-4, 7.6159419408485704810e-1)}, {FN (tan), ARG(-9.42512322775237976202e+00,-1.0e+00), RES(-1.450032696022467750e-4, -7.6159419408485704810e-1)}, {FN (tan), ARG(9.42512322775237976202e+00,2.0e+00), RES(2.439339541035071690e-5, 9.6402758819508310550e-1)}, {FN (tan), ARG(9.42512322775237976202e+00,-2.0e+00), RES(2.439339541035071690e-5, -9.6402758819508310550e-1)}, {FN (tan), ARG(-9.42512322775237976202e+00,2.0e+00), RES(-2.439339541035071690e-5, 9.6402758819508310550e-1)}, {FN (tan), ARG(-9.42512322775237976202e+00,-2.0e+00), RES(-2.439339541035071690e-5, -9.6402758819508310550e-1)}, {FN (tan), ARG(0.0e+00,1.0e+03), RES(0.0, 1.0)}, {FN (tan), ARG(0.0e+00,-1.0e+03), RES(0.0, -1.0)}, {FN (tan), ARG(0.0e+00,-1.23456e+05), RES(0.0, -1.0)}, {FN (tan), ARG(1.0e+03,0.0e+00), RES(1.470324155702718e+00, 0.0)}, {FN (tan), ARG(-1.0e+03,0.0e+00), RES(-1.470324155702718e+00, 0.0)}, {FN (arcsin), ARG(0.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (arcsin), ARG(0.0e+00,1.19209289550781250e-07), RES(0, 1.1920928955078096766e-7)}, {FN (arcsin), ARG(0.0e+00,-1.19209289550781250e-07), RES(0, -1.1920928955078096766e-7)}, {FN (arcsin), ARG(0.0e+00,5.0e-01), RES(0, 4.8121182505960344750e-1)}, {FN (arcsin), ARG(0.0e+00,-5.0e-01), RES(0, -4.8121182505960344750e-1)}, {FN (arcsin), ARG(0.0e+00,1.0e+00), RES(0, 8.8137358701954302523e-1)}, {FN (arcsin), ARG(0.0e+00,-1.0e+00), RES(0, -8.8137358701954302523e-1)}, {FN (arcsin), ARG(0.0e+00,2.0e+00), RES(0, 1.4436354751788103425e0)}, {FN (arcsin), ARG(0.0e+00,-2.0e+00), RES(0, -1.4436354751788103425e0)}, {FN (arcsin), ARG(0.0e+00,8.3886080e+06), RES(0, 1.6635532333438690979e1)}, {FN (arcsin), ARG(0.0e+00,-8.3886080e+06), RES(0, -1.6635532333438690979e1)}, {FN (arcsin), ARG(1.19209289550781250e-07,0.0e+00), RES(1.1920928955078153234e-7, 0.0)}, {FN (arcsin), ARG(-1.19209289550781250e-07,0.0e+00), RES(-1.1920928955078153234e-7, 0.0)}, {FN (arcsin), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(1.1920928955078068531e-7, 1.1920928955078181469e-7)}, {FN (arcsin), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.1920928955078068531e-7, -1.1920928955078181469e-7)}, {FN (arcsin), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(-1.1920928955078068531e-7, 1.1920928955078181469e-7)}, {FN (arcsin), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(-1.1920928955078068531e-7, -1.1920928955078181469e-7)}, {FN (arcsin), ARG(1.19209289550781250e-07,5.0e-01), RES(1.0662402999400097805e-7, 4.8121182505960598961e-1)}, {FN (arcsin), ARG(1.19209289550781250e-07,-5.0e-01), RES(1.0662402999400097805e-7, -4.8121182505960598961e-1)}, {FN (arcsin), ARG(-1.19209289550781250e-07,5.0e-01), RES(-1.0662402999400097805e-7, 4.8121182505960598961e-1)}, {FN (arcsin), ARG(-1.19209289550781250e-07,-5.0e-01), RES(-1.0662402999400097805e-7, -4.8121182505960598961e-1)}, {FN (arcsin), ARG(1.19209289550781250e-07,1.0e+00), RES(8.4293697021788013662e-8, 8.8137358701954553738e-1)}, {FN (arcsin), ARG(1.19209289550781250e-07,-1.0e+00), RES(8.4293697021788013662e-8, -8.8137358701954553738e-1)}, {FN (arcsin), ARG(-1.19209289550781250e-07,1.0e+00), RES(-8.4293697021788013662e-8, 8.8137358701954553738e-1)}, {FN (arcsin), ARG(-1.19209289550781250e-07,-1.0e+00), RES(-8.4293697021788013662e-8, -8.8137358701954553738e-1)}, {FN (arcsin), ARG(1.19209289550781250e-07,2.0e+00), RES(5.3312014997000413263e-8, 1.4436354751788116136e0)}, {FN (arcsin), ARG(1.19209289550781250e-07,-2.0e+00), RES(5.3312014997000413263e-8, -1.4436354751788116136e0)}, {FN (arcsin), ARG(-1.19209289550781250e-07,2.0e+00), RES(-5.3312014997000413263e-8, 1.4436354751788116136e0)}, {FN (arcsin), ARG(-1.19209289550781250e-07,-2.0e+00), RES(-5.3312014997000413263e-8, -1.4436354751788116136e0)}, {FN (arcsin), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.4210854715201902743e-14, 1.6635532333438690979e1)}, {FN (arcsin), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.4210854715201902743e-14, -1.6635532333438690979e1)}, {FN (arcsin), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(-1.4210854715201902743e-14, 1.6635532333438690979e1)}, {FN (arcsin), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(-1.4210854715201902743e-14, -1.6635532333438690979e1)}, {FN (arcsin), ARG(5.0e-01,0.0e+00), RES(5.2359877559829887308e-1, 0.0)}, {FN (arcsin), ARG(-5.0e-01,0.0e+00), RES(-5.2359877559829887308e-1, 0.0)}, {FN (arcsin), ARG(5.0e-01,1.19209289550781250e-07), RES(5.2359877559829340332e-1, 1.3765103082409432364e-7)}, {FN (arcsin), ARG(5.0e-01,-1.19209289550781250e-07), RES(5.2359877559829340332e-1, -1.3765103082409432364e-7)}, {FN (arcsin), ARG(-5.0e-01,1.19209289550781250e-07), RES(-5.2359877559829340332e-1, 1.3765103082409432364e-7)}, {FN (arcsin), ARG(-5.0e-01,-1.19209289550781250e-07), RES(-5.2359877559829340332e-1, -1.3765103082409432364e-7)}, {FN (arcsin), ARG(5.0e-01,5.0e-01), RES(4.5227844715119068206e-1, 5.3063753095251782602e-1)}, {FN (arcsin), ARG(5.0e-01,-5.0e-01), RES(4.5227844715119068206e-1, -5.3063753095251782602e-1)}, {FN (arcsin), ARG(-5.0e-01,5.0e-01), RES(-4.5227844715119068206e-1, 5.3063753095251782602e-1)}, {FN (arcsin), ARG(-5.0e-01,-5.0e-01), RES(-4.5227844715119068206e-1, -5.3063753095251782602e-1)}, {FN (arcsin), ARG(5.0e-01,1.0e+00), RES(3.4943906285721329363e-1, 9.2613303135018242455e-1)}, {FN (arcsin), ARG(5.0e-01,-1.0e+00), RES(3.4943906285721329363e-1, -9.2613303135018242455e-1)}, {FN (arcsin), ARG(-5.0e-01,1.0e+00), RES(-3.4943906285721329363e-1, 9.2613303135018242455e-1)}, {FN (arcsin), ARG(-5.0e-01,-1.0e+00), RES(-3.4943906285721329363e-1, -9.2613303135018242455e-1)}, {FN (arcsin), ARG(5.0e-01,2.0e+00), RES(2.2101863562288385890e-1, 1.4657153519472905218e0)}, {FN (arcsin), ARG(5.0e-01,-2.0e+00), RES(2.2101863562288385890e-1, -1.4657153519472905218e0)}, {FN (arcsin), ARG(-5.0e-01,2.0e+00), RES(-2.2101863562288385890e-1, 1.4657153519472905218e0)}, {FN (arcsin), ARG(-5.0e-01,-2.0e+00), RES(-2.2101863562288385890e-1, -1.4657153519472905218e0)}, {FN (arcsin), ARG(5.0e-01,8.3886080e+06), RES(5.9604644775390130897e-8, 1.6635532333438692755e1)}, {FN (arcsin), ARG(5.0e-01,-8.3886080e+06), RES(5.9604644775390130897e-8, -1.6635532333438692755e1)}, {FN (arcsin), ARG(-5.0e-01,8.3886080e+06), RES(-5.9604644775390130897e-8, 1.6635532333438692755e1)}, {FN (arcsin), ARG(-5.0e-01,-8.3886080e+06), RES(-5.9604644775390130897e-8, -1.6635532333438692755e1)}, {FN (arcsin), ARG(1.0e+00,0.0e+00), RES(1.5707963267948966192e0, 0.0)}, {FN (arcsin), ARG(-1.0e+00,0.0e+00), RES(-1.5707963267948966192e0, 0.0)}, {FN (arcsin), ARG(1.0e+00,1.19209289550781250e-07), RES(1.5704510598153252947e0, 3.4526698643116312881e-4)}, {FN (arcsin), ARG(1.0e+00,-1.19209289550781250e-07), RES(1.5704510598153252947e0, -3.4526698643116312881e-4)}, {FN (arcsin), ARG(-1.0e+00,1.19209289550781250e-07), RES(-1.5704510598153252947e0, 3.4526698643116312881e-4)}, {FN (arcsin), ARG(-1.0e+00,-1.19209289550781250e-07), RES(-1.5704510598153252947e0, -3.4526698643116312881e-4)}, {FN (arcsin), ARG(1.0e+00,5.0e-01), RES(8.9590748120889023907e-1, 7.3285767597364526089e-1)}, {FN (arcsin), ARG(1.0e+00,-5.0e-01), RES(8.9590748120889023907e-1, -7.3285767597364526089e-1)}, {FN (arcsin), ARG(-1.0e+00,5.0e-01), RES(-8.9590748120889023907e-1, 7.3285767597364526089e-1)}, {FN (arcsin), ARG(-1.0e+00,-5.0e-01), RES(-8.9590748120889023907e-1, -7.3285767597364526089e-1)}, {FN (arcsin), ARG(1.0e+00,1.0e+00), RES(6.6623943249251525510e-1, 1.0612750619050356520e0)}, {FN (arcsin), ARG(1.0e+00,-1.0e+00), RES(6.6623943249251525510e-1, -1.0612750619050356520e0)}, {FN (arcsin), ARG(-1.0e+00,1.0e+00), RES(-6.6623943249251525510e-1, 1.0612750619050356520e0)}, {FN (arcsin), ARG(-1.0e+00,-1.0e+00), RES(-6.6623943249251525510e-1, -1.0612750619050356520e0)}, {FN (arcsin), ARG(1.0e+00,2.0e+00), RES(4.2707858639247612548e-1, 1.5285709194809981613e0)}, {FN (arcsin), ARG(1.0e+00,-2.0e+00), RES(4.2707858639247612548e-1, -1.5285709194809981613e0)}, {FN (arcsin), ARG(-1.0e+00,2.0e+00), RES(-4.2707858639247612548e-1, 1.5285709194809981613e0)}, {FN (arcsin), ARG(-1.0e+00,-2.0e+00), RES(-4.2707858639247612548e-1, -1.5285709194809981613e0)}, {FN (arcsin), ARG(1.0e+00,8.3886080e+06), RES(1.1920928955077983828e-7, 1.6635532333438698084e1)}, {FN (arcsin), ARG(1.0e+00,-8.3886080e+06), RES(1.1920928955077983828e-7, -1.6635532333438698084e1)}, {FN (arcsin), ARG(-1.0e+00,8.3886080e+06), RES(-1.1920928955077983828e-7, 1.6635532333438698084e1)}, {FN (arcsin), ARG(-1.0e+00,-8.3886080e+06), RES(-1.1920928955077983828e-7, -1.6635532333438698084e1)}, {FN (arcsin), ARG(2.0e+00,0.0e+00), RES(1.5707963267948966192e0, -1.3169578969248167086e0)}, {FN (arcsin), ARG(-2.0e+00,0.0e+00), RES(-1.5707963267948966192e0, 1.3169578969248167086e0)}, {FN (arcsin), ARG(2.0e+00,1.19209289550781250e-07), RES(1.5707962579693812072e0, 1.3169578969248194435e0)}, {FN (arcsin), ARG(2.0e+00,-1.19209289550781250e-07), RES(1.5707962579693812072e0, -1.3169578969248194435e0)}, {FN (arcsin), ARG(-2.0e+00,1.19209289550781250e-07), RES(-1.5707962579693812072e0, 1.3169578969248194435e0)}, {FN (arcsin), ARG(-2.0e+00,-1.19209289550781250e-07), RES(-1.5707962579693812072e0, -1.3169578969248194435e0)}, {FN (arcsin), ARG(2.0e+00,5.0e-01), RES(1.2930420702371826591e0, 1.3618009008578457882e0)}, {FN (arcsin), ARG(2.0e+00,-5.0e-01), RES(1.2930420702371826591e0, -1.3618009008578457882e0)}, {FN (arcsin), ARG(-2.0e+00,5.0e-01), RES(-1.2930420702371826591e0, 1.3618009008578457882e0)}, {FN (arcsin), ARG(-2.0e+00,-5.0e-01), RES(-1.2930420702371826591e0, -1.3618009008578457882e0)}, {FN (arcsin), ARG(2.0e+00,1.0e+00), RES(1.0634400235777520562e0, 1.4693517443681852733e0)}, {FN (arcsin), ARG(2.0e+00,-1.0e+00), RES(1.0634400235777520562e0, -1.4693517443681852733e0)}, {FN (arcsin), ARG(-2.0e+00,1.0e+00), RES(-1.0634400235777520562e0, 1.4693517443681852733e0)}, {FN (arcsin), ARG(-2.0e+00,-1.0e+00), RES(-1.0634400235777520562e0, -1.4693517443681852733e0)}, {FN (arcsin), ARG(2.0e+00,2.0e+00), RES(7.5424914469804604071e-1, 1.7343245214879664480e0)}, {FN (arcsin), ARG(2.0e+00,-2.0e+00), RES(7.5424914469804604071e-1, -1.7343245214879664480e0)}, {FN (arcsin), ARG(-2.0e+00,2.0e+00), RES(-7.5424914469804604071e-1, 1.7343245214879664480e0)}, {FN (arcsin), ARG(-2.0e+00,-2.0e+00), RES(-7.5424914469804604071e-1, -1.7343245214879664480e0)}, {FN (arcsin), ARG(2.0e+00,8.3886080e+06), RES(2.3841857910155628843e-7, 1.663553233343871940e1)}, {FN (arcsin), ARG(2.0e+00,-8.3886080e+06), RES(2.3841857910155628843e-7, -1.663553233343871940e1)}, {FN (arcsin), ARG(-2.0e+00,8.3886080e+06), RES(-2.3841857910155628843e-7, 1.663553233343871940e1)}, {FN (arcsin), ARG(-2.0e+00,-8.3886080e+06), RES(-2.3841857910155628843e-7, -1.663553233343871940e1)}, {FN (arcsin), ARG(8.3886080e+06,0.0e+00), RES(1.5707963267948966192e0, -1.6635532333438683873e1)}, {FN (arcsin), ARG(-8.3886080e+06,0.0e+00), RES(-1.5707963267948966192e0, 1.6635532333438683873e1)}, {FN (arcsin), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.5707963267948824084e0, 1.6635532333438683873e1)}, {FN (arcsin), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.5707963267948824084e0, -1.6635532333438683873e1)}, {FN (arcsin), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(-1.5707963267948824084e0, 1.6635532333438683873e1)}, {FN (arcsin), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(-1.5707963267948824084e0, -1.6635532333438683873e1)}, {FN (arcsin), ARG(8.3886080e+06,5.0e-01), RES(1.5707962671902518438e0, 1.6635532333438685650e1)}, {FN (arcsin), ARG(8.3886080e+06,-5.0e-01), RES(1.5707962671902518438e0, -1.6635532333438685650e1)}, {FN (arcsin), ARG(-8.3886080e+06,5.0e-01), RES(-1.5707962671902518438e0, 1.6635532333438685650e1)}, {FN (arcsin), ARG(-8.3886080e+06,-5.0e-01), RES(-1.5707962671902518438e0, -1.6635532333438685650e1)}, {FN (arcsin), ARG(8.3886080e+06,1.0e+00), RES(1.5707962075856070684e0, 1.6635532333438690979e1)}, {FN (arcsin), ARG(8.3886080e+06,-1.0e+00), RES(1.5707962075856070684e0, -1.6635532333438690979e1)}, {FN (arcsin), ARG(-8.3886080e+06,1.0e+00), RES(-1.5707962075856070684e0, 1.6635532333438690979e1)}, {FN (arcsin), ARG(-8.3886080e+06,-1.0e+00), RES(-1.5707962075856070684e0, -1.6635532333438690979e1)}, {FN (arcsin), ARG(8.3886080e+06,2.0e+00), RES(1.5707960883763175177e0, 1.6635532333438712295e1)}, {FN (arcsin), ARG(8.3886080e+06,-2.0e+00), RES(1.5707960883763175177e0, -1.6635532333438712295e1)}, {FN (arcsin), ARG(-8.3886080e+06,2.0e+00), RES(-1.5707960883763175177e0, 1.6635532333438712295e1)}, {FN (arcsin), ARG(-8.3886080e+06,-2.0e+00), RES(-1.5707960883763175177e0, -1.6635532333438712295e1)}, {FN (arcsin), ARG(8.3886080e+06,8.3886080e+06), RES(7.8539816339744653326e-1, 1.6982105923718660081e1)}, {FN (arcsin), ARG(8.3886080e+06,-8.3886080e+06), RES(7.8539816339744653326e-1, -1.6982105923718660081e1)}, {FN (arcsin), ARG(-8.3886080e+06,8.3886080e+06), RES(-7.8539816339744653326e-1, 1.6982105923718660081e1)}, {FN (arcsin), ARG(-8.3886080e+06,-8.3886080e+06), RES(-7.8539816339744653326e-1, -1.6982105923718660081e1)}, {FN (arccos), ARG(0.0e+00,0.0e+00), RES(1.5707963267948966192e0, 0.0)}, {FN (arccos), ARG(0.0e+00,1.19209289550781250e-07), RES(1.5707963267948966192e0, -1.1920928955078096766e-7)}, {FN (arccos), ARG(0.0e+00,-1.19209289550781250e-07), RES(1.5707963267948966192e0, 1.1920928955078096766e-7)}, {FN (arccos), ARG(0.0e+00,5.0e-01), RES(1.5707963267948966192e0, -4.8121182505960344750e-1)}, {FN (arccos), ARG(0.0e+00,-5.0e-01), RES(1.5707963267948966192e0, 4.8121182505960344750e-1)}, {FN (arccos), ARG(0.0e+00,1.0e+00), RES(1.5707963267948966192e0, -8.8137358701954302523e-1)}, {FN (arccos), ARG(0.0e+00,-1.0e+00), RES(1.5707963267948966192e0, 8.8137358701954302523e-1)}, {FN (arccos), ARG(0.0e+00,2.0e+00), RES(1.5707963267948966192e0, -1.4436354751788103425e0)}, {FN (arccos), ARG(0.0e+00,-2.0e+00), RES(1.5707963267948966192e0, 1.4436354751788103425e0)}, {FN (arccos), ARG(0.0e+00,8.3886080e+06), RES(1.5707963267948966192e0, -1.6635532333438690979e1)}, {FN (arccos), ARG(0.0e+00,-8.3886080e+06), RES(1.5707963267948966192e0, 1.6635532333438690979e1)}, {FN (arccos), ARG(1.19209289550781250e-07,0.0e+00), RES(1.5707962075856070684e0, 0.0)}, {FN (arccos), ARG(-1.19209289550781250e-07,0.0e+00), RES(1.570796446004186170e0, 0.0)}, {FN (arccos), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(1.5707962075856070685e0, -1.1920928955078181469e-7)}, {FN (arccos), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.5707962075856070685e0, 1.1920928955078181469e-7)}, {FN (arccos), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(1.570796446004186170e0, -1.1920928955078181469e-7)}, {FN (arccos), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.570796446004186170e0, 1.1920928955078181469e-7)}, {FN (arccos), ARG(1.19209289550781250e-07,5.0e-01), RES(1.5707962201708666252e0, -4.8121182505960598961e-1)}, {FN (arccos), ARG(1.19209289550781250e-07,-5.0e-01), RES(1.5707962201708666252e0, 4.8121182505960598961e-1)}, {FN (arccos), ARG(-1.19209289550781250e-07,5.0e-01), RES(1.5707964334189266132e0, -4.8121182505960598961e-1)}, {FN (arccos), ARG(-1.19209289550781250e-07,-5.0e-01), RES(1.5707964334189266132e0, 4.8121182505960598961e-1)}, {FN (arccos), ARG(1.19209289550781250e-07,1.0e+00), RES(1.5707962425011995974e0, -8.8137358701954553738e-1)}, {FN (arccos), ARG(1.19209289550781250e-07,-1.0e+00), RES(1.5707962425011995974e0, 8.8137358701954553738e-1)}, {FN (arccos), ARG(-1.19209289550781250e-07,1.0e+00), RES(1.5707964110885936410e0, -8.8137358701954553738e-1)}, {FN (arccos), ARG(-1.19209289550781250e-07,-1.0e+00), RES(1.5707964110885936410e0, 8.8137358701954553738e-1)}, {FN (arccos), ARG(1.19209289550781250e-07,2.0e+00), RES(1.5707962734828816222e0, -1.4436354751788116136e0)}, {FN (arccos), ARG(1.19209289550781250e-07,-2.0e+00), RES(1.5707962734828816222e0, 1.4436354751788116136e0)}, {FN (arccos), ARG(-1.19209289550781250e-07,2.0e+00), RES(1.5707963801069116162e0, -1.4436354751788116136e0)}, {FN (arccos), ARG(-1.19209289550781250e-07,-2.0e+00), RES(1.5707963801069116162e0, 1.4436354751788116136e0)}, {FN (arccos), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.5707963267948824084e0, -1.6635532333438690979e1)}, {FN (arccos), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.5707963267948824084e0, 1.6635532333438690979e1)}, {FN (arccos), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(1.5707963267949108301e0, -1.6635532333438690979e1)}, {FN (arccos), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(1.5707963267949108301e0, 1.6635532333438690979e1)}, {FN (arccos), ARG(5.0e-01,0.0e+00), RES(1.0471975511965977462e0, 0.0)}, {FN (arccos), ARG(-5.0e-01,0.0e+00), RES(2.0943951023931954923e0, 0.0)}, {FN (arccos), ARG(5.0e-01,1.19209289550781250e-07), RES(1.0471975511966032159e0, -1.3765103082409432364e-7)}, {FN (arccos), ARG(5.0e-01,-1.19209289550781250e-07), RES(1.0471975511966032159e0, 1.3765103082409432364e-7)}, {FN (arccos), ARG(-5.0e-01,1.19209289550781250e-07), RES(2.0943951023931900225e0, -1.3765103082409432364e-7)}, {FN (arccos), ARG(-5.0e-01,-1.19209289550781250e-07), RES(2.0943951023931900225e0, 1.3765103082409432364e-7)}, {FN (arccos), ARG(5.0e-01,5.0e-01), RES(1.1185178796437059372e0, -5.3063753095251782602e-1)}, {FN (arccos), ARG(5.0e-01,-5.0e-01), RES(1.1185178796437059372e0, 5.3063753095251782602e-1)}, {FN (arccos), ARG(-5.0e-01,5.0e-01), RES(2.0230747739460873013e0, -5.3063753095251782602e-1)}, {FN (arccos), ARG(-5.0e-01,-5.0e-01), RES(2.0230747739460873013e0, 5.3063753095251782602e-1)}, {FN (arccos), ARG(5.0e-01,1.0e+00), RES(1.2213572639376833256e0, -9.2613303135018242455e-1)}, {FN (arccos), ARG(5.0e-01,-1.0e+00), RES(1.2213572639376833256e0, 9.2613303135018242455e-1)}, {FN (arccos), ARG(-5.0e-01,1.0e+00), RES(1.9202353896521099129e0, -9.2613303135018242455e-1)}, {FN (arccos), ARG(-5.0e-01,-1.0e+00), RES(1.9202353896521099129e0, 9.2613303135018242455e-1)}, {FN (arccos), ARG(5.0e-01,2.0e+00), RES(1.3497776911720127603e0, -1.4657153519472905218e0)}, {FN (arccos), ARG(5.0e-01,-2.0e+00), RES(1.3497776911720127603e0, 1.4657153519472905218e0)}, {FN (arccos), ARG(-5.0e-01,2.0e+00), RES(1.7918149624177804781e0, -1.4657153519472905218e0)}, {FN (arccos), ARG(-5.0e-01,-2.0e+00), RES(1.7918149624177804781e0, 1.4657153519472905218e0)}, {FN (arccos), ARG(5.0e-01,8.3886080e+06), RES(1.5707962671902518438e0, -1.6635532333438692755e1)}, {FN (arccos), ARG(5.0e-01,-8.3886080e+06), RES(1.5707962671902518438e0, 1.6635532333438692755e1)}, {FN (arccos), ARG(-5.0e-01,8.3886080e+06), RES(1.5707963863995413946e0, -1.6635532333438692755e1)}, {FN (arccos), ARG(-5.0e-01,-8.3886080e+06), RES(1.5707963863995413946e0, 1.6635532333438692755e1)}, {FN (arccos), ARG(1.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (arccos), ARG(-1.0e+00,0.0e+00), RES(3.1415926535897932385e0, 0.0)}, {FN (arccos), ARG(1.0e+00,1.19209289550781250e-07), RES(3.4526697957132450399e-4, -3.4526698643116312881e-4)}, {FN (arccos), ARG(1.0e+00,-1.19209289550781250e-07), RES(3.4526697957132450399e-4, 3.4526698643116312881e-4)}, {FN (arccos), ARG(-1.0e+00,1.19209289550781250e-07), RES(3.1412473866102219140e0, -3.4526698643116312881e-4)}, {FN (arccos), ARG(-1.0e+00,-1.19209289550781250e-07), RES(3.1412473866102219140e0, 3.4526698643116312881e-4)}, {FN (arccos), ARG(1.0e+00,5.0e-01), RES(6.7488884558600638016e-1, -7.3285767597364526089e-1)}, {FN (arccos), ARG(1.0e+00,-5.0e-01), RES(6.7488884558600638016e-1, 7.3285767597364526089e-1)}, {FN (arccos), ARG(-1.0e+00,5.0e-01), RES(2.4667038080037868583e0, -7.3285767597364526089e-1)}, {FN (arccos), ARG(-1.0e+00,-5.0e-01), RES(2.4667038080037868583e0, 7.3285767597364526089e-1)}, {FN (arccos), ARG(1.0e+00,1.0e+00), RES(9.0455689430238136413e-1, -1.0612750619050356520e0)}, {FN (arccos), ARG(1.0e+00,-1.0e+00), RES(9.0455689430238136413e-1, 1.0612750619050356520e0)}, {FN (arccos), ARG(-1.0e+00,1.0e+00), RES(2.2370357592874118743e0, -1.0612750619050356520e0)}, {FN (arccos), ARG(-1.0e+00,-1.0e+00), RES(2.2370357592874118743e0, 1.0612750619050356520e0)}, {FN (arccos), ARG(1.0e+00,2.0e+00), RES(1.1437177404024204938e0, -1.5285709194809981613e0)}, {FN (arccos), ARG(1.0e+00,-2.0e+00), RES(1.1437177404024204938e0, 1.5285709194809981613e0)}, {FN (arccos), ARG(-1.0e+00,2.0e+00), RES(1.9978749131873727447e0, -1.5285709194809981613e0)}, {FN (arccos), ARG(-1.0e+00,-2.0e+00), RES(1.9978749131873727447e0, 1.5285709194809981613e0)}, {FN (arccos), ARG(1.0e+00,8.3886080e+06), RES(1.5707962075856070685e0, -1.6635532333438698084e1)}, {FN (arccos), ARG(1.0e+00,-8.3886080e+06), RES(1.5707962075856070685e0, 1.6635532333438698084e1)}, {FN (arccos), ARG(-1.0e+00,8.3886080e+06), RES(1.570796446004186170e0, -1.6635532333438698084e1)}, {FN (arccos), ARG(-1.0e+00,-8.3886080e+06), RES(1.570796446004186170e0, 1.6635532333438698084e1)}, {FN (arccos), ARG(2.0e+00,0.0e+00), RES(0, 1.3169578969248167086e0)}, {FN (arccos), ARG(-2.0e+00,0.0e+00), RES(3.1415926535897932385e0, -1.3169578969248167086e0)}, {FN (arccos), ARG(2.0e+00,1.19209289550781250e-07), RES(6.8825515412047433504e-8, -1.3169578969248194435e0)}, {FN (arccos), ARG(2.0e+00,-1.19209289550781250e-07), RES(6.8825515412047433504e-8, 1.3169578969248194435e0)}, {FN (arccos), ARG(-2.0e+00,1.19209289550781250e-07), RES(3.1415925847642778264e0, -1.3169578969248194435e0)}, {FN (arccos), ARG(-2.0e+00,-1.19209289550781250e-07), RES(3.1415925847642778264e0, 1.3169578969248194435e0)}, {FN (arccos), ARG(2.0e+00,5.0e-01), RES(2.7775425655771396018e-1, -1.3618009008578457882e0)}, {FN (arccos), ARG(2.0e+00,-5.0e-01), RES(2.7775425655771396018e-1, 1.3618009008578457882e0)}, {FN (arccos), ARG(-2.0e+00,5.0e-01), RES(2.8638383970320792783e0, -1.3618009008578457882e0)}, {FN (arccos), ARG(-2.0e+00,-5.0e-01), RES(2.8638383970320792783e0, 1.3618009008578457882e0)}, {FN (arccos), ARG(2.0e+00,1.0e+00), RES(5.0735630321714456304e-1, -1.4693517443681852733e0)}, {FN (arccos), ARG(2.0e+00,-1.0e+00), RES(5.0735630321714456304e-1, 1.4693517443681852733e0)}, {FN (arccos), ARG(-2.0e+00,1.0e+00), RES(2.6342363503726486754e0, -1.4693517443681852733e0)}, {FN (arccos), ARG(-2.0e+00,-1.0e+00), RES(2.6342363503726486754e0, 1.4693517443681852733e0)}, {FN (arccos), ARG(2.0e+00,2.0e+00), RES(8.1654718209685057852e-1, -1.7343245214879664480e0)}, {FN (arccos), ARG(2.0e+00,-2.0e+00), RES(8.1654718209685057852e-1, 1.7343245214879664480e0)}, {FN (arccos), ARG(-2.0e+00,2.0e+00), RES(2.3250454714929426599e0, -1.7343245214879664480e0)}, {FN (arccos), ARG(-2.0e+00,-2.0e+00), RES(2.3250454714929426599e0, 1.7343245214879664480e0)}, {FN (arccos), ARG(2.0e+00,8.3886080e+06), RES(1.5707960883763175177e0, -1.663553233343871940e1)}, {FN (arccos), ARG(2.0e+00,-8.3886080e+06), RES(1.5707960883763175177e0, 1.663553233343871940e1)}, {FN (arccos), ARG(-2.0e+00,8.3886080e+06), RES(1.5707965652134757208e0, -1.663553233343871940e1)}, {FN (arccos), ARG(-2.0e+00,-8.3886080e+06), RES(1.5707965652134757208e0, 1.663553233343871940e1)}, {FN (arccos), ARG(8.3886080e+06,0.0e+00), RES(0, 1.6635532333438683873e1)}, {FN (arccos), ARG(-8.3886080e+06,0.0e+00), RES(3.1415926535897932385e0, -1.6635532333438683873e1)}, {FN (arccos), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.4210854715202104692e-14, -1.6635532333438683873e1)}, {FN (arccos), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.4210854715202104692e-14, 1.6635532333438683873e1)}, {FN (arccos), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(3.1415926535897790276e0, -1.6635532333438683873e1)}, {FN (arccos), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(3.1415926535897790276e0, 1.6635532333438683873e1)}, {FN (arccos), ARG(8.3886080e+06,5.0e-01), RES(5.9604644775390977930e-8, -1.6635532333438685650e1)}, {FN (arccos), ARG(8.3886080e+06,-5.0e-01), RES(5.9604644775390977930e-8, 1.6635532333438685650e1)}, {FN (arccos), ARG(-8.3886080e+06,5.0e-01), RES(3.1415925939851484631e0, -1.6635532333438685650e1)}, {FN (arccos), ARG(-8.3886080e+06,-5.0e-01), RES(3.1415925939851484631e0, 1.6635532333438685650e1)}, {FN (arccos), ARG(8.3886080e+06,1.0e+00), RES(1.1920928955078153234e-7, -1.6635532333438690979e1)}, {FN (arccos), ARG(8.3886080e+06,-1.0e+00), RES(1.1920928955078153234e-7, 1.6635532333438690979e1)}, {FN (arccos), ARG(-8.3886080e+06,1.0e+00), RES(3.1415925343805036877e0, -1.6635532333438690979e1)}, {FN (arccos), ARG(-8.3886080e+06,-1.0e+00), RES(3.1415925343805036877e0, 1.6635532333438690979e1)}, {FN (arccos), ARG(8.3886080e+06,2.0e+00), RES(2.3841857910155967656e-7, -1.6635532333438712295e1)}, {FN (arccos), ARG(8.3886080e+06,-2.0e+00), RES(2.3841857910155967656e-7, 1.6635532333438712295e1)}, {FN (arccos), ARG(-8.3886080e+06,2.0e+00), RES(3.1415924151712141369e0, -1.6635532333438712295e1)}, {FN (arccos), ARG(-8.3886080e+06,-2.0e+00), RES(3.1415924151712141369e0, 1.6635532333438712295e1)}, {FN (arccos), ARG(8.3886080e+06,8.3886080e+06), RES(7.8539816339745008597e-1, -1.6982105923718660081e1)}, {FN (arccos), ARG(8.3886080e+06,-8.3886080e+06), RES(7.8539816339745008597e-1, 1.6982105923718660081e1)}, {FN (arccos), ARG(-8.3886080e+06,8.3886080e+06), RES(2.3561944901923431525e0, -1.6982105923718660081e1)}, {FN (arccos), ARG(-8.3886080e+06,-8.3886080e+06), RES(2.3561944901923431525e0, 1.6982105923718660081e1)}, {FN (arctan), ARG(0.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (arctan), ARG(0.0e+00,1.19209289550781250e-07), RES(0, 1.1920928955078181469e-7)}, {FN (arctan), ARG(0.0e+00,-1.19209289550781250e-07), RES(0, -1.1920928955078181469e-7)}, {FN (arctan), ARG(0.0e+00,5.0e-01), RES(0, 5.4930614433405484570e-1)}, {FN (arctan), ARG(0.0e+00,-5.0e-01), RES(0, -5.4930614433405484570e-1)}, {FN (arctan), ARG(0.0e+00,2.0e+00), RES(1.5707963267948966192e0, 5.4930614433405484570e-1)}, {FN (arctan), ARG(0.0e+00,-2.0e+00), RES(-1.5707963267948966192e0, -5.4930614433405484570e-1)}, {FN (arctan), ARG(0.0e+00,8.3886080e+06), RES(1.5707963267948966192e0, 1.1920928955078181469e-7)}, {FN (arctan), ARG(0.0e+00,-8.3886080e+06), RES(-1.5707963267948966192e0, -1.1920928955078181469e-7)}, {FN (arctan), ARG(1.19209289550781250e-07,0.0e+00), RES(1.1920928955078068531e-7, 0.0)}, {FN (arctan), ARG(-1.19209289550781250e-07,0.0e+00), RES(-1.1920928955078068531e-7, 0.0)}, {FN (arctan), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(1.1920928955078237938e-7, 1.1920928955078012062e-7)}, {FN (arctan), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.1920928955078237938e-7, -1.1920928955078012062e-7)}, {FN (arctan), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(-1.1920928955078237938e-7, 1.1920928955078012062e-7)}, {FN (arctan), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(-1.1920928955078237938e-7, -1.1920928955078012062e-7)}, {FN (arctan), ARG(1.19209289550781250e-07,5.0e-01), RES(1.5894571940103932425e-7, 5.4930614433404221383e-1)}, {FN (arctan), ARG(1.19209289550781250e-07,-5.0e-01), RES(1.5894571940103932425e-7, -5.4930614433404221383e-1)}, {FN (arctan), ARG(-1.19209289550781250e-07,5.0e-01), RES(-1.5894571940103932425e-7, 5.4930614433404221383e-1)}, {FN (arctan), ARG(-1.19209289550781250e-07,-5.0e-01), RES(-1.5894571940103932425e-7, -5.4930614433404221383e-1)}, {FN (arctan), ARG(1.19209289550781250e-07,1.0e+00), RES(7.8539819319977069731e-1, 8.3177661667193446012e0)}, {FN (arctan), ARG(1.19209289550781250e-07,-1.0e+00), RES(7.8539819319977069731e-1, -8.3177661667193446012e0)}, {FN (arctan), ARG(-1.19209289550781250e-07,1.0e+00), RES(-7.8539819319977069731e-1, 8.3177661667193446012e0)}, {FN (arctan), ARG(-1.19209289550781250e-07,-1.0e+00), RES(-7.8539819319977069731e-1, -8.3177661667193446012e0)}, {FN (arctan), ARG(1.19209289550781250e-07,2.0e+00), RES(1.5707962870584667690e0, 5.4930614433405168773e-1)}, {FN (arctan), ARG(1.19209289550781250e-07,-2.0e+00), RES(1.5707962870584667690e0, -5.4930614433405168773e-1)}, {FN (arctan), ARG(-1.19209289550781250e-07,2.0e+00), RES(-1.5707962870584667690e0, 5.4930614433405168773e-1)}, {FN (arctan), ARG(-1.19209289550781250e-07,-2.0e+00), RES(-1.5707962870584667690e0, -5.4930614433405168773e-1)}, {FN (arctan), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.5707963267948966192e0, 1.1920928955078181469e-7)}, {FN (arctan), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.5707963267948966192e0, -1.1920928955078181469e-7)}, {FN (arctan), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(-1.5707963267948966192e0, 1.1920928955078181469e-7)}, {FN (arctan), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(-1.5707963267948966192e0, -1.1920928955078181469e-7)}, {FN (arctan), ARG(5.0e-01,0.0e+00), RES(4.6364760900080611621e-1, 0.0)}, {FN (arctan), ARG(-5.0e-01,0.0e+00), RES(-4.6364760900080611621e-1, 0.0)}, {FN (arctan), ARG(5.0e-01,1.19209289550781250e-07), RES(4.6364760900081066369e-1, 9.5367431640625072280e-8)}, {FN (arctan), ARG(5.0e-01,-1.19209289550781250e-07), RES(4.6364760900081066369e-1, -9.5367431640625072280e-8)}, {FN (arctan), ARG(-5.0e-01,1.19209289550781250e-07), RES(-4.6364760900081066369e-1, 9.5367431640625072280e-8)}, {FN (arctan), ARG(-5.0e-01,-1.19209289550781250e-07), RES(-4.6364760900081066369e-1, -9.5367431640625072280e-8)}, {FN (arctan), ARG(5.0e-01,5.0e-01), RES(5.5357435889704525151e-1, 4.0235947810852509365e-1)}, {FN (arctan), ARG(5.0e-01,-5.0e-01), RES(5.5357435889704525151e-1, -4.0235947810852509365e-1)}, {FN (arctan), ARG(-5.0e-01,5.0e-01), RES(-5.5357435889704525151e-1, 4.0235947810852509365e-1)}, {FN (arctan), ARG(-5.0e-01,-5.0e-01), RES(-5.5357435889704525151e-1, -4.0235947810852509365e-1)}, {FN (arctan), ARG(5.0e-01,1.0e+00), RES(9.0788749496088038670e-1, 7.0830333601405402006e-1)}, {FN (arctan), ARG(5.0e-01,-1.0e+00), RES(9.0788749496088038670e-1, -7.0830333601405402006e-1)}, {FN (arctan), ARG(-5.0e-01,1.0e+00), RES(-9.0788749496088038670e-1, 7.0830333601405402006e-1)}, {FN (arctan), ARG(-5.0e-01,-1.0e+00), RES(-9.0788749496088038670e-1, -7.0830333601405402006e-1)}, {FN (arctan), ARG(5.0e-01,2.0e+00), RES(1.4215468610018069803e0, 5.0037000005253101744e-1)}, {FN (arctan), ARG(5.0e-01,-2.0e+00), RES(1.4215468610018069803e0, -5.0037000005253101744e-1)}, {FN (arctan), ARG(-5.0e-01,2.0e+00), RES(-1.4215468610018069803e0, 5.0037000005253101744e-1)}, {FN (arctan), ARG(-5.0e-01,-2.0e+00), RES(-1.4215468610018069803e0, -5.0037000005253101744e-1)}, {FN (arctan), ARG(5.0e-01,8.3886080e+06), RES(1.5707963267948895138e0, 1.1920928955078139117e-7)}, {FN (arctan), ARG(5.0e-01,-8.3886080e+06), RES(1.5707963267948895138e0, -1.1920928955078139117e-7)}, {FN (arctan), ARG(-5.0e-01,8.3886080e+06), RES(-1.5707963267948895138e0, 1.1920928955078139117e-7)}, {FN (arctan), ARG(-5.0e-01,-8.3886080e+06), RES(-1.5707963267948895138e0, -1.1920928955078139117e-7)}, {FN (arctan), ARG(1.0e+00,0.0e+00), RES(7.8539816339744830962e-1, 0.0)}, {FN (arctan), ARG(-1.0e+00,0.0e+00), RES(-7.8539816339744830962e-1, 0.0)}, {FN (arctan), ARG(1.0e+00,1.19209289550781250e-07), RES(7.8539816339745186233e-1, 5.9604644775390483828e-8)}, {FN (arctan), ARG(1.0e+00,-1.19209289550781250e-07), RES(7.8539816339745186233e-1, -5.9604644775390483828e-8)}, {FN (arctan), ARG(-1.0e+00,1.19209289550781250e-07), RES(-7.8539816339745186233e-1, 5.9604644775390483828e-8)}, {FN (arctan), ARG(-1.0e+00,-1.19209289550781250e-07), RES(-7.8539816339745186233e-1, -5.9604644775390483828e-8)}, {FN (arctan), ARG(1.0e+00,5.0e-01), RES(8.4757566067082902713e-1, 2.3887786125685909036e-1)}, {FN (arctan), ARG(1.0e+00,-5.0e-01), RES(8.4757566067082902713e-1, -2.3887786125685909036e-1)}, {FN (arctan), ARG(-1.0e+00,5.0e-01), RES(-8.4757566067082902713e-1, 2.3887786125685909036e-1)}, {FN (arctan), ARG(-1.0e+00,-5.0e-01), RES(-8.4757566067082902713e-1, -2.3887786125685909036e-1)}, {FN (arctan), ARG(1.0e+00,1.0e+00), RES(1.0172219678978513677e0, 4.0235947810852509365e-1)}, {FN (arctan), ARG(1.0e+00,-1.0e+00), RES(1.0172219678978513677e0, -4.0235947810852509365e-1)}, {FN (arctan), ARG(-1.0e+00,1.0e+00), RES(-1.0172219678978513677e0, 4.0235947810852509365e-1)}, {FN (arctan), ARG(-1.0e+00,-1.0e+00), RES(-1.0172219678978513677e0, -4.0235947810852509365e-1)}, {FN (arctan), ARG(1.0e+00,2.0e+00), RES(1.3389725222944935611e0, 4.0235947810852509365e-1)}, {FN (arctan), ARG(1.0e+00,-2.0e+00), RES(1.3389725222944935611e0, -4.0235947810852509365e-1)}, {FN (arctan), ARG(-1.0e+00,2.0e+00), RES(-1.3389725222944935611e0, 4.0235947810852509365e-1)}, {FN (arctan), ARG(-1.0e+00,-2.0e+00), RES(-1.3389725222944935611e0, -4.0235947810852509365e-1)}, {FN (arctan), ARG(1.0e+00,8.3886080e+06), RES(1.5707963267948824084e0, 1.1920928955078012062e-7)}, {FN (arctan), ARG(1.0e+00,-8.3886080e+06), RES(1.5707963267948824084e0, -1.1920928955078012062e-7)}, {FN (arctan), ARG(-1.0e+00,8.3886080e+06), RES(-1.5707963267948824084e0, 1.1920928955078012062e-7)}, {FN (arctan), ARG(-1.0e+00,-8.3886080e+06), RES(-1.5707963267948824084e0, -1.1920928955078012062e-7)}, {FN (arctan), ARG(2.0e+00,0.0e+00), RES(1.1071487177940905030e0, 0.0)}, {FN (arctan), ARG(-2.0e+00,0.0e+00), RES(-1.1071487177940905030e0, 0.0)}, {FN (arctan), ARG(2.0e+00,1.19209289550781250e-07), RES(1.1071487177940916399e0, 2.3841857910156200307e-8)}, {FN (arctan), ARG(2.0e+00,-1.19209289550781250e-07), RES(1.1071487177940916399e0, -2.3841857910156200307e-8)}, {FN (arctan), ARG(-2.0e+00,1.19209289550781250e-07), RES(-1.1071487177940916399e0, 2.3841857910156200307e-8)}, {FN (arctan), ARG(-2.0e+00,-1.19209289550781250e-07), RES(-1.1071487177940916399e0, -2.3841857910156200307e-8)}, {FN (arctan), ARG(2.0e+00,5.0e-01), RES(1.1265564408348223487e0, 9.6415620202996167238e-2)}, {FN (arctan), ARG(2.0e+00,-5.0e-01), RES(1.1265564408348223487e0, -9.6415620202996167238e-2)}, {FN (arctan), ARG(-2.0e+00,5.0e-01), RES(-1.1265564408348223487e0, 9.6415620202996167238e-2)}, {FN (arctan), ARG(-2.0e+00,-5.0e-01), RES(-1.1265564408348223487e0, -9.6415620202996167238e-2)}, {FN (arctan), ARG(2.0e+00,1.0e+00), RES(1.1780972450961724644e0, 1.7328679513998632735e-1)}, {FN (arctan), ARG(2.0e+00,-1.0e+00), RES(1.1780972450961724644e0, -1.7328679513998632735e-1)}, {FN (arctan), ARG(-2.0e+00,1.0e+00), RES(-1.1780972450961724644e0, 1.7328679513998632735e-1)}, {FN (arctan), ARG(-2.0e+00,-1.0e+00), RES(-1.1780972450961724644e0, -1.7328679513998632735e-1)}, {FN (arctan), ARG(2.0e+00,2.0e+00), RES(1.3112232696716351433e0, 2.3887786125685909036e-1)}, {FN (arctan), ARG(2.0e+00,-2.0e+00), RES(1.3112232696716351433e0, -2.3887786125685909036e-1)}, {FN (arctan), ARG(-2.0e+00,2.0e+00), RES(-1.3112232696716351433e0, 2.3887786125685909036e-1)}, {FN (arctan), ARG(-2.0e+00,-2.0e+00), RES(-1.3112232696716351433e0, -2.3887786125685909036e-1)}, {FN (arctan), ARG(2.0e+00,8.3886080e+06), RES(1.5707963267948681975e0, 1.1920928955077503843e-7)}, {FN (arctan), ARG(2.0e+00,-8.3886080e+06), RES(1.5707963267948681975e0, -1.1920928955077503843e-7)}, {FN (arctan), ARG(-2.0e+00,8.3886080e+06), RES(-1.5707963267948681975e0, 1.1920928955077503843e-7)}, {FN (arctan), ARG(-2.0e+00,-8.3886080e+06), RES(-1.5707963267948681975e0, -1.1920928955077503843e-7)}, {FN (arctan), ARG(8.3886080e+06,0.0e+00), RES(1.5707962075856070685e0, 0.0)}, {FN (arctan), ARG(-8.3886080e+06,0.0e+00), RES(-1.5707962075856070685e0, 0.0)}, {FN (arctan), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.5707962075856070685e0, 1.6940658945085766040e-21)}, {FN (arctan), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.5707962075856070685e0, -1.6940658945085766040e-21)}, {FN (arctan), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(-1.5707962075856070685e0, 1.6940658945085766040e-21)}, {FN (arctan), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(-1.5707962075856070685e0, -1.6940658945085766040e-21)}, {FN (arctan), ARG(8.3886080e+06,5.0e-01), RES(1.5707962075856070685e0, 7.1054273576008756410e-15)}, {FN (arctan), ARG(8.3886080e+06,-5.0e-01), RES(1.5707962075856070685e0, -7.1054273576008756410e-15)}, {FN (arctan), ARG(-8.3886080e+06,5.0e-01), RES(-1.5707962075856070685e0, 7.1054273576008756410e-15)}, {FN (arctan), ARG(-8.3886080e+06,-5.0e-01), RES(-1.5707962075856070685e0, -7.1054273576008756410e-15)}, {FN (arctan), ARG(8.3886080e+06,1.0e+00), RES(1.5707962075856070685e0, 1.4210854715201599821e-14)}, {FN (arctan), ARG(8.3886080e+06,-1.0e+00), RES(1.5707962075856070685e0, -1.4210854715201599821e-14)}, {FN (arctan), ARG(-8.3886080e+06,1.0e+00), RES(-1.5707962075856070685e0, 1.4210854715201599821e-14)}, {FN (arctan), ARG(-8.3886080e+06,-1.0e+00), RES(-1.5707962075856070685e0, -1.4210854715201599821e-14)}, {FN (arctan), ARG(8.3886080e+06,2.0e+00), RES(1.5707962075856070685e0, 2.8421709430401987951e-14)}, {FN (arctan), ARG(8.3886080e+06,-2.0e+00), RES(1.5707962075856070685e0, -2.8421709430401987951e-14)}, {FN (arctan), ARG(-8.3886080e+06,2.0e+00), RES(-1.5707962075856070685e0, 2.8421709430401987951e-14)}, {FN (arctan), ARG(-8.3886080e+06,-2.0e+00), RES(-1.5707962075856070685e0, -2.8421709430401987951e-14)}, {FN (arctan), ARG(8.3886080e+06,8.3886080e+06), RES(1.5707962671902518438e0, 5.9604644775390483828e-8)}, {FN (arctan), ARG(8.3886080e+06,-8.3886080e+06), RES(1.5707962671902518438e0, -5.9604644775390483828e-8)}, {FN (arctan), ARG(-8.3886080e+06,8.3886080e+06), RES(-1.5707962671902518438e0, 5.9604644775390483828e-8)}, {FN (arctan), ARG(-8.3886080e+06,-8.3886080e+06), RES(-1.5707962671902518438e0, -5.9604644775390483828e-8)}, {FN (sinh), ARG(0.0e+00,-3.45266983001243932001e-04), RES(0, -3.4526697614140534807e-4)}, {FN (sinh), ARG(0.0e+00,3.45266983001243932001e-04), RES(0, 3.4526697614140534807e-4)}, {FN (sinh), ARG(0.0e+00,1.57045105981189525579e+00), RES(0, 9.9999994039535581669e-1)}, {FN (sinh), ARG(0.0e+00,-1.57045105981189525579e+00), RES(0, -9.9999994039535581669e-1)}, {FN (sinh), ARG(0.0e+00,1.57114159377789786021e+00), RES(0, 9.9999994039535581673e-1)}, {FN (sinh), ARG(0.0e+00,-1.57114159377789786021e+00), RES(0, -9.9999994039535581673e-1)}, {FN (sinh), ARG(0.0e+00,3.14124738660679181379e+00), RES(0, 3.4526697614158608860e-4)}, {FN (sinh), ARG(0.0e+00,-3.14124738660679181379e+00), RES(0, -3.4526697614158608860e-4)}, {FN (sinh), ARG(0.0e+00,3.14193792057279441821e+00), RES(0, -3.4526697614134115926e-4)}, {FN (sinh), ARG(0.0e+00,-3.14193792057279441821e+00), RES(0, 3.4526697614134115926e-4)}, {FN (sinh), ARG(0.0e+00,4.71204371340168837179e+00), RES(0, -9.9999994039535581664e-1)}, {FN (sinh), ARG(0.0e+00,-4.71204371340168837179e+00), RES(0, 9.9999994039535581664e-1)}, {FN (sinh), ARG(0.0e+00,4.71273424736769097620e+00), RES(0, -9.9999994039535581677e-1)}, {FN (sinh), ARG(0.0e+00,-4.71273424736769097620e+00), RES(0, 9.9999994039535581677e-1)}, {FN (sinh), ARG(0.0e+00,6.28284004019658492979e+00), RES(0, -3.4526697614170855328e-4)}, {FN (sinh), ARG(0.0e+00,-6.28284004019658492979e+00), RES(0, 3.4526697614170855328e-4)}, {FN (sinh), ARG(0.0e+00,6.28353057416258753420e+00), RES(0, 3.4526697614121869459e-4)}, {FN (sinh), ARG(0.0e+00,-6.28353057416258753420e+00), RES(0, -3.4526697614121869459e-4)}, {FN (sinh), ARG(0.0e+00,9.42443269378637893396e+00), RES(0, 3.4526697614094283958e-4)}, {FN (sinh), ARG(0.0e+00,-9.42443269378637893396e+00), RES(0, -3.4526697614094283958e-4)}, {FN (sinh), ARG(0.0e+00,9.42512322775237976202e+00), RES(0, -3.4526697614020805155e-4)}, {FN (sinh), ARG(0.0e+00,-9.42512322775237976202e+00), RES(0, 3.4526697614020805155e-4)}, {FN (sinh), ARG(1.19209289550781250e-07,-3.45266983001243932001e-04), RES(1.1920928244535424533e-7, -3.4526697614140780134e-4)}, {FN (sinh), ARG(1.19209289550781250e-07,3.45266983001243932001e-04), RES(1.1920928244535424533e-7, 3.4526697614140780134e-4)}, {FN (sinh), ARG(-1.19209289550781250e-07,-3.45266983001243932001e-04), RES(-1.1920928244535424533e-7, -3.4526697614140780134e-4)}, {FN (sinh), ARG(-1.19209289550781250e-07,3.45266983001243932001e-04), RES(-1.1920928244535424533e-7, 3.4526697614140780134e-4)}, {FN (sinh), ARG(1.19209289550781250e-07,1.57045105981189525579e+00), RES(4.1159030931177815679e-11, 9.9999994039536292211e-1)}, {FN (sinh), ARG(1.19209289550781250e-07,-1.57045105981189525579e+00), RES(4.1159030931177815679e-11, -9.9999994039536292211e-1)}, {FN (sinh), ARG(-1.19209289550781250e-07,1.57045105981189525579e+00), RES(-4.1159030931177815679e-11, 9.9999994039536292211e-1)}, {FN (sinh), ARG(-1.19209289550781250e-07,-1.57045105981189525579e+00), RES(-4.1159030931177815679e-11, -9.9999994039536292211e-1)}, {FN (sinh), ARG(1.19209289550781250e-07,1.57114159377789786021e+00), RES(-4.1159030931163216752e-11, 9.9999994039536292216e-1)}, {FN (sinh), ARG(1.19209289550781250e-07,-1.57114159377789786021e+00), RES(-4.1159030931163216752e-11, -9.9999994039536292216e-1)}, {FN (sinh), ARG(-1.19209289550781250e-07,1.57114159377789786021e+00), RES(4.1159030931163216752e-11, 9.9999994039536292216e-1)}, {FN (sinh), ARG(-1.19209289550781250e-07,-1.57114159377789786021e+00), RES(4.1159030931163216752e-11, -9.9999994039536292216e-1)}, {FN (sinh), ARG(1.19209289550781250e-07,3.14124738660679181379e+00), RES(-1.1920928244535424532e-7, 3.4526697614158854187e-4)}, {FN (sinh), ARG(1.19209289550781250e-07,-3.14124738660679181379e+00), RES(-1.1920928244535424532e-7, -3.4526697614158854187e-4)}, {FN (sinh), ARG(-1.19209289550781250e-07,3.14124738660679181379e+00), RES(1.1920928244535424532e-7, 3.4526697614158854187e-4)}, {FN (sinh), ARG(-1.19209289550781250e-07,-3.14124738660679181379e+00), RES(1.1920928244535424532e-7, -3.4526697614158854187e-4)}, {FN (sinh), ARG(1.19209289550781250e-07,3.14193792057279441821e+00), RES(-1.1920928244535424533e-7, -3.4526697614134361253e-4)}, {FN (sinh), ARG(1.19209289550781250e-07,-3.14193792057279441821e+00), RES(-1.1920928244535424533e-7, 3.4526697614134361253e-4)}, {FN (sinh), ARG(-1.19209289550781250e-07,3.14193792057279441821e+00), RES(1.1920928244535424533e-7, -3.4526697614134361253e-4)}, {FN (sinh), ARG(-1.19209289550781250e-07,-3.14193792057279441821e+00), RES(1.1920928244535424533e-7, 3.4526697614134361253e-4)}, {FN (sinh), ARG(1.19209289550781250e-07,4.71204371340168837179e+00), RES(-4.1159030931192414605e-11, -9.9999994039536292207e-1)}, {FN (sinh), ARG(1.19209289550781250e-07,-4.71204371340168837179e+00), RES(-4.1159030931192414605e-11, 9.9999994039536292207e-1)}, {FN (sinh), ARG(-1.19209289550781250e-07,4.71204371340168837179e+00), RES(4.1159030931192414605e-11, -9.9999994039536292207e-1)}, {FN (sinh), ARG(-1.19209289550781250e-07,-4.71204371340168837179e+00), RES(4.1159030931192414605e-11, 9.9999994039536292207e-1)}, {FN (sinh), ARG(1.19209289550781250e-07,4.71273424736769097620e+00), RES(4.1159030931148617825e-11, -9.9999994039536292220e-1)}, {FN (sinh), ARG(1.19209289550781250e-07,-4.71273424736769097620e+00), RES(4.1159030931148617825e-11, 9.9999994039536292220e-1)}, {FN (sinh), ARG(-1.19209289550781250e-07,4.71273424736769097620e+00), RES(-4.1159030931148617825e-11, -9.9999994039536292220e-1)}, {FN (sinh), ARG(-1.19209289550781250e-07,-4.71273424736769097620e+00), RES(-4.1159030931148617825e-11, 9.9999994039536292220e-1)}, {FN (sinh), ARG(1.19209289550781250e-07,6.28284004019658492979e+00), RES(1.1920928244535424532e-7, -3.4526697614171100655e-4)}, {FN (sinh), ARG(1.19209289550781250e-07,-6.28284004019658492979e+00), RES(1.1920928244535424532e-7, 3.4526697614171100655e-4)}, {FN (sinh), ARG(-1.19209289550781250e-07,6.28284004019658492979e+00), RES(-1.1920928244535424532e-7, -3.4526697614171100655e-4)}, {FN (sinh), ARG(-1.19209289550781250e-07,-6.28284004019658492979e+00), RES(-1.1920928244535424532e-7, 3.4526697614171100655e-4)}, {FN (sinh), ARG(1.19209289550781250e-07,6.28353057416258753420e+00), RES(1.1920928244535424534e-7, 3.4526697614122114786e-4)}, {FN (sinh), ARG(1.19209289550781250e-07,-6.28353057416258753420e+00), RES(1.1920928244535424534e-7, -3.4526697614122114786e-4)}, {FN (sinh), ARG(-1.19209289550781250e-07,6.28353057416258753420e+00), RES(-1.1920928244535424534e-7, 3.4526697614122114786e-4)}, {FN (sinh), ARG(-1.19209289550781250e-07,-6.28353057416258753420e+00), RES(-1.1920928244535424534e-7, -3.4526697614122114786e-4)}, {FN (sinh), ARG(1.19209289550781250e-07,9.42443269378637893396e+00), RES(-1.1920928244535424535e-7, 3.4526697614094529285e-4)}, {FN (sinh), ARG(1.19209289550781250e-07,-9.42443269378637893396e+00), RES(-1.1920928244535424535e-7, -3.4526697614094529285e-4)}, {FN (sinh), ARG(-1.19209289550781250e-07,9.42443269378637893396e+00), RES(1.1920928244535424535e-7, 3.4526697614094529285e-4)}, {FN (sinh), ARG(-1.19209289550781250e-07,-9.42443269378637893396e+00), RES(1.1920928244535424535e-7, -3.4526697614094529285e-4)}, {FN (sinh), ARG(1.19209289550781250e-07,9.42512322775237976202e+00), RES(-1.1920928244535424538e-7, -3.4526697614021050482e-4)}, {FN (sinh), ARG(1.19209289550781250e-07,-9.42512322775237976202e+00), RES(-1.1920928244535424538e-7, 3.4526697614021050482e-4)}, {FN (sinh), ARG(-1.19209289550781250e-07,9.42512322775237976202e+00), RES(1.1920928244535424538e-7, -3.4526697614021050482e-4)}, {FN (sinh), ARG(-1.19209289550781250e-07,-9.42512322775237976202e+00), RES(1.1920928244535424538e-7, 3.4526697614021050482e-4)}, {FN (sinh), ARG(5.0e-01,-3.45266983001243932001e-04), RES(5.2109527443404709209e-1, -3.8933200722534065172e-4)}, {FN (sinh), ARG(5.0e-01,3.45266983001243932001e-04), RES(5.2109527443404709209e-1, 3.8933200722534065172e-4)}, {FN (sinh), ARG(-5.0e-01,-3.45266983001243932001e-04), RES(-5.2109527443404709209e-1, -3.8933200722534065172e-4)}, {FN (sinh), ARG(-5.0e-01,3.45266983001243932001e-04), RES(-5.2109527443404709209e-1, 3.8933200722534065172e-4)}, {FN (sinh), ARG(5.0e-01,1.57045105981189525579e+00), RES(1.7991700040937027667e-4, 1.1276258979946363572e0)}, {FN (sinh), ARG(5.0e-01,-1.57045105981189525579e+00), RES(1.7991700040937027667e-4, -1.1276258979946363572e0)}, {FN (sinh), ARG(-5.0e-01,1.57045105981189525579e+00), RES(-1.7991700040937027667e-4, 1.1276258979946363572e0)}, {FN (sinh), ARG(-5.0e-01,-1.57045105981189525579e+00), RES(-1.7991700040937027667e-4, -1.1276258979946363572e0)}, {FN (sinh), ARG(5.0e-01,1.57114159377789786021e+00), RES(-1.7991700040930646090e-4, 1.1276258979946363573e0)}, {FN (sinh), ARG(5.0e-01,-1.57114159377789786021e+00), RES(-1.7991700040930646090e-4, -1.1276258979946363573e0)}, {FN (sinh), ARG(-5.0e-01,1.57114159377789786021e+00), RES(1.7991700040930646090e-4, 1.1276258979946363573e0)}, {FN (sinh), ARG(-5.0e-01,-1.57114159377789786021e+00), RES(1.7991700040930646090e-4, -1.1276258979946363573e0)}, {FN (sinh), ARG(5.0e-01,3.14124738660679181379e+00), RES(-5.2109527443404709206e-1, 3.8933200722554445944e-4)}, {FN (sinh), ARG(5.0e-01,-3.14124738660679181379e+00), RES(-5.2109527443404709206e-1, -3.8933200722554445944e-4)}, {FN (sinh), ARG(-5.0e-01,3.14124738660679181379e+00), RES(5.2109527443404709206e-1, 3.8933200722554445944e-4)}, {FN (sinh), ARG(-5.0e-01,-3.14124738660679181379e+00), RES(5.2109527443404709206e-1, -3.8933200722554445944e-4)}, {FN (sinh), ARG(5.0e-01,3.14193792057279441821e+00), RES(-5.2109527443404709211e-1, -3.8933200722526827075e-4)}, {FN (sinh), ARG(5.0e-01,-3.14193792057279441821e+00), RES(-5.2109527443404709211e-1, 3.8933200722526827075e-4)}, {FN (sinh), ARG(-5.0e-01,3.14193792057279441821e+00), RES(5.2109527443404709211e-1, -3.8933200722526827075e-4)}, {FN (sinh), ARG(-5.0e-01,-3.14193792057279441821e+00), RES(5.2109527443404709211e-1, 3.8933200722526827075e-4)}, {FN (sinh), ARG(5.0e-01,4.71204371340168837179e+00), RES(-1.7991700040943409243e-4, -1.1276258979946363572e0)}, {FN (sinh), ARG(5.0e-01,-4.71204371340168837179e+00), RES(-1.7991700040943409243e-4, 1.1276258979946363572e0)}, {FN (sinh), ARG(-5.0e-01,4.71204371340168837179e+00), RES(1.7991700040943409243e-4, -1.1276258979946363572e0)}, {FN (sinh), ARG(-5.0e-01,-4.71204371340168837179e+00), RES(1.7991700040943409243e-4, 1.1276258979946363572e0)}, {FN (sinh), ARG(5.0e-01,4.71273424736769097620e+00), RES(1.7991700040924264514e-4, -1.1276258979946363573e0)}, {FN (sinh), ARG(5.0e-01,-4.71273424736769097620e+00), RES(1.7991700040924264514e-4, 1.1276258979946363573e0)}, {FN (sinh), ARG(-5.0e-01,4.71273424736769097620e+00), RES(-1.7991700040924264514e-4, -1.1276258979946363573e0)}, {FN (sinh), ARG(-5.0e-01,-4.71273424736769097620e+00), RES(-1.7991700040924264514e-4, 1.1276258979946363573e0)}, {FN (sinh), ARG(5.0e-01,6.28284004019658492979e+00), RES(5.2109527443404709204e-1, -3.8933200722568255379e-4)}, {FN (sinh), ARG(5.0e-01,-6.28284004019658492979e+00), RES(5.2109527443404709204e-1, 3.8933200722568255379e-4)}, {FN (sinh), ARG(-5.0e-01,6.28284004019658492979e+00), RES(-5.2109527443404709204e-1, -3.8933200722568255379e-4)}, {FN (sinh), ARG(-5.0e-01,-6.28284004019658492979e+00), RES(-5.2109527443404709204e-1, 3.8933200722568255379e-4)}, {FN (sinh), ARG(5.0e-01,6.28353057416258753420e+00), RES(5.2109527443404709213e-1, 3.8933200722513017641e-4)}, {FN (sinh), ARG(5.0e-01,-6.28353057416258753420e+00), RES(5.2109527443404709213e-1, -3.8933200722513017641e-4)}, {FN (sinh), ARG(-5.0e-01,6.28353057416258753420e+00), RES(-5.2109527443404709213e-1, 3.8933200722513017641e-4)}, {FN (sinh), ARG(-5.0e-01,-6.28353057416258753420e+00), RES(-5.2109527443404709213e-1, -3.8933200722513017641e-4)}, {FN (sinh), ARG(5.0e-01,9.42443269378637893396e+00), RES(-5.2109527443404709218e-1, 3.8933200722481911514e-4)}, {FN (sinh), ARG(5.0e-01,-9.42443269378637893396e+00), RES(-5.2109527443404709218e-1, -3.8933200722481911514e-4)}, {FN (sinh), ARG(-5.0e-01,9.42443269378637893396e+00), RES(5.2109527443404709218e-1, 3.8933200722481911514e-4)}, {FN (sinh), ARG(-5.0e-01,-9.42443269378637893396e+00), RES(5.2109527443404709218e-1, -3.8933200722481911514e-4)}, {FN (sinh), ARG(5.0e-01,9.42512322775237976202e+00), RES(-5.2109527443404709231e-1, -3.8933200722399054908e-4)}, {FN (sinh), ARG(5.0e-01,-9.42512322775237976202e+00), RES(-5.2109527443404709231e-1, 3.8933200722399054908e-4)}, {FN (sinh), ARG(-5.0e-01,9.42512322775237976202e+00), RES(5.2109527443404709231e-1, -3.8933200722399054908e-4)}, {FN (sinh), ARG(-5.0e-01,-9.42512322775237976202e+00), RES(5.2109527443404709231e-1, 3.8933200722399054908e-4)}, {FN (sinh), ARG(1.0e+00,-3.45266983001243932001e-04), RES(1.1752011235963524660e0, -5.3277478472501939236e-4)}, {FN (sinh), ARG(1.0e+00,3.45266983001243932001e-04), RES(1.1752011235963524660e0, 5.3277478472501939236e-4)}, {FN (sinh), ARG(-1.0e+00,-3.45266983001243932001e-04), RES(-1.1752011235963524660e0, -5.3277478472501939236e-4)}, {FN (sinh), ARG(-1.0e+00,3.45266983001243932001e-04), RES(-1.1752011235963524660e0, 5.3277478472501939236e-4)}, {FN (sinh), ARG(1.0e+00,1.57045105981189525579e+00), RES(4.0575816248730593018e-4, 1.5430805428404715942e0)}, {FN (sinh), ARG(1.0e+00,-1.57045105981189525579e+00), RES(4.0575816248730593018e-4, -1.5430805428404715942e0)}, {FN (sinh), ARG(-1.0e+00,1.57045105981189525579e+00), RES(-4.0575816248730593018e-4, 1.5430805428404715942e0)}, {FN (sinh), ARG(-1.0e+00,-1.57045105981189525579e+00), RES(-4.0575816248730593018e-4, -1.5430805428404715942e0)}, {FN (sinh), ARG(1.0e+00,1.57114159377789786021e+00), RES(-4.0575816248716200955e-4, 1.5430805428404715942e0)}, {FN (sinh), ARG(1.0e+00,-1.57114159377789786021e+00), RES(-4.0575816248716200955e-4, -1.5430805428404715942e0)}, {FN (sinh), ARG(-1.0e+00,1.57114159377789786021e+00), RES(4.0575816248716200955e-4, 1.5430805428404715942e0)}, {FN (sinh), ARG(-1.0e+00,-1.57114159377789786021e+00), RES(4.0575816248716200955e-4, -1.5430805428404715942e0)}, {FN (sinh), ARG(1.0e+00,3.14124738660679181379e+00), RES(-1.1752011235963524659e0, 5.3277478472529828958e-4)}, {FN (sinh), ARG(1.0e+00,-3.14124738660679181379e+00), RES(-1.1752011235963524659e0, -5.3277478472529828958e-4)}, {FN (sinh), ARG(-1.0e+00,3.14124738660679181379e+00), RES(1.1752011235963524659e0, 5.3277478472529828958e-4)}, {FN (sinh), ARG(-1.0e+00,-3.14124738660679181379e+00), RES(1.1752011235963524659e0, -5.3277478472529828958e-4)}, {FN (sinh), ARG(1.0e+00,3.14193792057279441821e+00), RES(-1.1752011235963524660e0, -5.3277478472492034385e-4)}, {FN (sinh), ARG(1.0e+00,-3.14193792057279441821e+00), RES(-1.1752011235963524660e0, 5.3277478472492034385e-4)}, {FN (sinh), ARG(-1.0e+00,3.14193792057279441821e+00), RES(1.1752011235963524660e0, -5.3277478472492034385e-4)}, {FN (sinh), ARG(-1.0e+00,-3.14193792057279441821e+00), RES(1.1752011235963524660e0, 5.3277478472492034385e-4)}, {FN (sinh), ARG(1.0e+00,4.71204371340168837179e+00), RES(-4.0575816248744985081e-4, -1.5430805428404715941e0)}, {FN (sinh), ARG(1.0e+00,-4.71204371340168837179e+00), RES(-4.0575816248744985081e-4, 1.5430805428404715941e0)}, {FN (sinh), ARG(-1.0e+00,4.71204371340168837179e+00), RES(4.0575816248744985081e-4, -1.5430805428404715941e0)}, {FN (sinh), ARG(-1.0e+00,-4.71204371340168837179e+00), RES(4.0575816248744985081e-4, 1.5430805428404715941e0)}, {FN (sinh), ARG(1.0e+00,4.71273424736769097620e+00), RES(4.0575816248701808892e-4, -1.5430805428404715943e0)}, {FN (sinh), ARG(1.0e+00,-4.71273424736769097620e+00), RES(4.0575816248701808892e-4, 1.5430805428404715943e0)}, {FN (sinh), ARG(-1.0e+00,4.71273424736769097620e+00), RES(-4.0575816248701808892e-4, -1.5430805428404715943e0)}, {FN (sinh), ARG(-1.0e+00,-4.71273424736769097620e+00), RES(-4.0575816248701808892e-4, 1.5430805428404715943e0)}, {FN (sinh), ARG(1.0e+00,6.28284004019658492979e+00), RES(1.1752011235963524659e0, -5.3277478472548726245e-4)}, {FN (sinh), ARG(1.0e+00,-6.28284004019658492979e+00), RES(1.1752011235963524659e0, 5.3277478472548726245e-4)}, {FN (sinh), ARG(-1.0e+00,6.28284004019658492979e+00), RES(-1.1752011235963524659e0, -5.3277478472548726245e-4)}, {FN (sinh), ARG(-1.0e+00,-6.28284004019658492979e+00), RES(-1.1752011235963524659e0, 5.3277478472548726245e-4)}, {FN (sinh), ARG(1.0e+00,6.28353057416258753420e+00), RES(1.1752011235963524661e0, 5.3277478472473137099e-4)}, {FN (sinh), ARG(1.0e+00,-6.28353057416258753420e+00), RES(1.1752011235963524661e0, -5.3277478472473137099e-4)}, {FN (sinh), ARG(-1.0e+00,6.28353057416258753420e+00), RES(-1.1752011235963524661e0, 5.3277478472473137099e-4)}, {FN (sinh), ARG(-1.0e+00,-6.28353057416258753420e+00), RES(-1.1752011235963524661e0, -5.3277478472473137099e-4)}, {FN (sinh), ARG(1.0e+00,9.42443269378637893396e+00), RES(-1.1752011235963524662e0, 5.3277478472430570447e-4)}, {FN (sinh), ARG(1.0e+00,-9.42443269378637893396e+00), RES(-1.1752011235963524662e0, -5.3277478472430570447e-4)}, {FN (sinh), ARG(-1.0e+00,9.42443269378637893396e+00), RES(1.1752011235963524662e0, 5.3277478472430570447e-4)}, {FN (sinh), ARG(-1.0e+00,-9.42443269378637893396e+00), RES(1.1752011235963524662e0, -5.3277478472430570447e-4)}, {FN (sinh), ARG(1.0e+00,9.42512322775237976202e+00), RES(-1.1752011235963524665e0, -5.3277478472317186729e-4)}, {FN (sinh), ARG(1.0e+00,-9.42512322775237976202e+00), RES(-1.1752011235963524665e0, 5.3277478472317186729e-4)}, {FN (sinh), ARG(-1.0e+00,9.42512322775237976202e+00), RES(1.1752011235963524665e0, -5.3277478472317186729e-4)}, {FN (sinh), ARG(-1.0e+00,-9.42512322775237976202e+00), RES(1.1752011235963524665e0, 5.3277478472317186729e-4)}, {FN (sinh), ARG(2.0e+00,-3.45266983001243932001e-04), RES(3.6268601916692946556e0, -1.2989619299126701883e-3)}, {FN (sinh), ARG(2.0e+00,3.45266983001243932001e-04), RES(3.6268601916692946556e0, 1.2989619299126701883e-3)}, {FN (sinh), ARG(-2.0e+00,-3.45266983001243932001e-04), RES(-3.6268601916692946556e0, -1.2989619299126701883e-3)}, {FN (sinh), ARG(-2.0e+00,3.45266983001243932001e-04), RES(-3.6268601916692946556e0, 1.2989619299126701883e-3)}, {FN (sinh), ARG(2.0e+00,1.57045105981189525579e+00), RES(1.2522351259047577385e-3, 3.7621954668392959445e0)}, {FN (sinh), ARG(2.0e+00,-1.57045105981189525579e+00), RES(1.2522351259047577385e-3, -3.7621954668392959445e0)}, {FN (sinh), ARG(-2.0e+00,1.57045105981189525579e+00), RES(-1.2522351259047577385e-3, 3.7621954668392959445e0)}, {FN (sinh), ARG(-2.0e+00,-1.57045105981189525579e+00), RES(-1.2522351259047577385e-3, -3.7621954668392959445e0)}, {FN (sinh), ARG(2.0e+00,1.57114159377789786021e+00), RES(-1.2522351259043135762e-3, 3.7621954668392959447e0)}, {FN (sinh), ARG(2.0e+00,-1.57114159377789786021e+00), RES(-1.2522351259043135762e-3, -3.7621954668392959447e0)}, {FN (sinh), ARG(-2.0e+00,1.57114159377789786021e+00), RES(1.2522351259043135762e-3, 3.7621954668392959447e0)}, {FN (sinh), ARG(-2.0e+00,-1.57114159377789786021e+00), RES(1.2522351259043135762e-3, -3.7621954668392959447e0)}, {FN (sinh), ARG(2.0e+00,3.14124738660679181379e+00), RES(-3.6268601916692946553e0, 1.2989619299133501696e-3)}, {FN (sinh), ARG(2.0e+00,-3.14124738660679181379e+00), RES(-3.6268601916692946553e0, -1.2989619299133501696e-3)}, {FN (sinh), ARG(-2.0e+00,3.14124738660679181379e+00), RES(3.6268601916692946553e0, 1.2989619299133501696e-3)}, {FN (sinh), ARG(-2.0e+00,-3.14124738660679181379e+00), RES(3.6268601916692946553e0, -1.2989619299133501696e-3)}, {FN (sinh), ARG(2.0e+00,3.14193792057279441821e+00), RES(-3.6268601916692946556e0, -1.2989619299124286975e-3)}, {FN (sinh), ARG(2.0e+00,-3.14193792057279441821e+00), RES(-3.6268601916692946556e0, 1.2989619299124286975e-3)}, {FN (sinh), ARG(-2.0e+00,3.14193792057279441821e+00), RES(3.6268601916692946556e0, -1.2989619299124286975e-3)}, {FN (sinh), ARG(-2.0e+00,-3.14193792057279441821e+00), RES(3.6268601916692946556e0, 1.2989619299124286975e-3)}, {FN (sinh), ARG(2.0e+00,4.71204371340168837179e+00), RES(-1.2522351259052019007e-3, -3.7621954668392959444e0)}, {FN (sinh), ARG(2.0e+00,-4.71204371340168837179e+00), RES(-1.2522351259052019007e-3, 3.7621954668392959444e0)}, {FN (sinh), ARG(-2.0e+00,4.71204371340168837179e+00), RES(1.2522351259052019007e-3, -3.7621954668392959444e0)}, {FN (sinh), ARG(-2.0e+00,-4.71204371340168837179e+00), RES(1.2522351259052019007e-3, 3.7621954668392959444e0)}, {FN (sinh), ARG(2.0e+00,4.71273424736769097620e+00), RES(1.2522351259038694139e-3, -3.7621954668392959448e0)}, {FN (sinh), ARG(2.0e+00,-4.71273424736769097620e+00), RES(1.2522351259038694139e-3, 3.7621954668392959448e0)}, {FN (sinh), ARG(-2.0e+00,4.71273424736769097620e+00), RES(-1.2522351259038694139e-3, -3.7621954668392959448e0)}, {FN (sinh), ARG(-2.0e+00,-4.71273424736769097620e+00), RES(-1.2522351259038694139e-3, 3.7621954668392959448e0)}, {FN (sinh), ARG(2.0e+00,6.28284004019658492979e+00), RES(3.6268601916692946552e0, -1.2989619299138109057e-3)}, {FN (sinh), ARG(2.0e+00,-6.28284004019658492979e+00), RES(3.6268601916692946552e0, 1.2989619299138109057e-3)}, {FN (sinh), ARG(-2.0e+00,6.28284004019658492979e+00), RES(-3.6268601916692946552e0, -1.2989619299138109057e-3)}, {FN (sinh), ARG(-2.0e+00,-6.28284004019658492979e+00), RES(-3.6268601916692946552e0, 1.2989619299138109057e-3)}, {FN (sinh), ARG(2.0e+00,6.28353057416258753420e+00), RES(3.6268601916692946558e0, 1.2989619299119679614e-3)}, {FN (sinh), ARG(2.0e+00,-6.28353057416258753420e+00), RES(3.6268601916692946558e0, -1.2989619299119679614e-3)}, {FN (sinh), ARG(-2.0e+00,6.28353057416258753420e+00), RES(-3.6268601916692946558e0, 1.2989619299119679614e-3)}, {FN (sinh), ARG(-2.0e+00,-6.28353057416258753420e+00), RES(-3.6268601916692946558e0, -1.2989619299119679614e-3)}, {FN (sinh), ARG(2.0e+00,9.42443269378637893396e+00), RES(-3.6268601916692946561e0, 1.2989619299109301409e-3)}, {FN (sinh), ARG(2.0e+00,-9.42443269378637893396e+00), RES(-3.6268601916692946561e0, -1.2989619299109301409e-3)}, {FN (sinh), ARG(-2.0e+00,9.42443269378637893396e+00), RES(3.6268601916692946561e0, 1.2989619299109301409e-3)}, {FN (sinh), ARG(-2.0e+00,-9.42443269378637893396e+00), RES(3.6268601916692946561e0, -1.2989619299109301409e-3)}, {FN (sinh), ARG(2.0e+00,9.42512322775237976202e+00), RES(-3.6268601916692946571e0, -1.2989619299081657245e-3)}, {FN (sinh), ARG(2.0e+00,-9.42512322775237976202e+00), RES(-3.6268601916692946571e0, 1.2989619299081657245e-3)}, {FN (sinh), ARG(-2.0e+00,9.42512322775237976202e+00), RES(3.6268601916692946571e0, -1.2989619299081657245e-3)}, {FN (sinh), ARG(-2.0e+00,-9.42512322775237976202e+00), RES(3.6268601916692946571e0, 1.2989619299081657245e-3)}, {FN (cosh), ARG(0.0e+00,-3.45266983001243932001e-04), RES(9.9999994039535581673e-1, 0.0)}, {FN (cosh), ARG(0.0e+00,3.45266983001243932001e-04), RES(9.9999994039535581673e-1, 0.0)}, {FN (cosh), ARG(0.0e+00,1.57045105981189525579e+00), RES(3.4526697614152485627e-4, 0.0)}, {FN (cosh), ARG(0.0e+00,-1.57045105981189525579e+00), RES(3.4526697614152485627e-4, 0.0)}, {FN (cosh), ARG(0.0e+00,1.57114159377789786021e+00), RES(-3.4526697614140239160e-4, 0.0)}, {FN (cosh), ARG(0.0e+00,-1.57114159377789786021e+00), RES(-3.4526697614140239160e-4, 0.0)}, {FN (cosh), ARG(0.0e+00,3.14124738660679181379e+00), RES(-9.9999994039535581667e-1, 0.0)}, {FN (cosh), ARG(0.0e+00,-3.14124738660679181379e+00), RES(-9.9999994039535581667e-1, 0.0)}, {FN (cosh), ARG(0.0e+00,3.14193792057279441821e+00), RES(-9.9999994039535581675e-1, 0.0)}, {FN (cosh), ARG(0.0e+00,-3.14193792057279441821e+00), RES(-9.9999994039535581675e-1, 0.0)}, {FN (cosh), ARG(0.0e+00,4.71204371340168837179e+00), RES(-3.4526697614164732094e-4, 0.0)}, {FN (cosh), ARG(0.0e+00,-4.71204371340168837179e+00), RES(-3.4526697614164732094e-4, 0.0)}, {FN (cosh), ARG(0.0e+00,4.71273424736769097620e+00), RES(3.4526697614127992692e-4, 0.0)}, {FN (cosh), ARG(0.0e+00,-4.71273424736769097620e+00), RES(3.4526697614127992692e-4, 0.0)}, {FN (cosh), ARG(0.0e+00,6.28284004019658492979e+00), RES(9.9999994039535581662e-1, 0.0)}, {FN (cosh), ARG(0.0e+00,-6.28284004019658492979e+00), RES(9.9999994039535581662e-1, 0.0)}, {FN (cosh), ARG(0.0e+00,6.28353057416258753420e+00), RES(9.9999994039535581679e-1, 0.0)}, {FN (cosh), ARG(0.0e+00,-6.28353057416258753420e+00), RES(9.9999994039535581679e-1, 0.0)}, {FN (cosh), ARG(0.0e+00,9.42443269378637893396e+00), RES(-9.9999994039535581689e-1, 0.0)}, {FN (cosh), ARG(0.0e+00,-9.42443269378637893396e+00), RES(-9.9999994039535581689e-1, 0.0)}, {FN (cosh), ARG(0.0e+00,9.42512322775237976202e+00), RES(-9.9999994039535581714e-1, 0.0)}, {FN (cosh), ARG(0.0e+00,-9.42512322775237976202e+00), RES(-9.9999994039535581714e-1, 0.0)}, {FN (cosh), ARG(1.19209289550781250e-07,-3.45266983001243932001e-04), RES(9.9999994039536292216e-1, -4.1159030931163569191e-11)}, {FN (cosh), ARG(1.19209289550781250e-07,3.45266983001243932001e-04), RES(9.9999994039536292216e-1, 4.1159030931163569191e-11)}, {FN (cosh), ARG(-1.19209289550781250e-07,-3.45266983001243932001e-04), RES(9.9999994039536292216e-1, 4.1159030931163569191e-11)}, {FN (cosh), ARG(-1.19209289550781250e-07,3.45266983001243932001e-04), RES(9.9999994039536292216e-1, -4.1159030931163569191e-11)}, {FN (cosh), ARG(1.19209289550781250e-07,1.57045105981189525579e+00), RES(3.4526697614152730954e-4, 1.1920928244535424532e-7)}, {FN (cosh), ARG(1.19209289550781250e-07,-1.57045105981189525579e+00), RES(3.4526697614152730954e-4, -1.1920928244535424532e-7)}, {FN (cosh), ARG(-1.19209289550781250e-07,1.57045105981189525579e+00), RES(3.4526697614152730954e-4, -1.1920928244535424532e-7)}, {FN (cosh), ARG(-1.19209289550781250e-07,-1.57045105981189525579e+00), RES(3.4526697614152730954e-4, 1.1920928244535424532e-7)}, {FN (cosh), ARG(1.19209289550781250e-07,1.57114159377789786021e+00), RES(-3.4526697614140484486e-4, 1.1920928244535424533e-7)}, {FN (cosh), ARG(1.19209289550781250e-07,-1.57114159377789786021e+00), RES(-3.4526697614140484486e-4, -1.1920928244535424533e-7)}, {FN (cosh), ARG(-1.19209289550781250e-07,1.57114159377789786021e+00), RES(-3.4526697614140484486e-4, -1.1920928244535424533e-7)}, {FN (cosh), ARG(-1.19209289550781250e-07,-1.57114159377789786021e+00), RES(-3.4526697614140484486e-4, 1.1920928244535424533e-7)}, {FN (cosh), ARG(1.19209289550781250e-07,3.14124738660679181379e+00), RES(-9.9999994039536292209e-1, 4.1159030931185115142e-11)}, {FN (cosh), ARG(1.19209289550781250e-07,-3.14124738660679181379e+00), RES(-9.9999994039536292209e-1, -4.1159030931185115142e-11)}, {FN (cosh), ARG(-1.19209289550781250e-07,3.14124738660679181379e+00), RES(-9.9999994039536292209e-1, -4.1159030931185115142e-11)}, {FN (cosh), ARG(-1.19209289550781250e-07,-3.14124738660679181379e+00), RES(-9.9999994039536292209e-1, 4.1159030931185115142e-11)}, {FN (cosh), ARG(1.19209289550781250e-07,3.14193792057279441821e+00), RES(-9.9999994039536292218e-1, -4.1159030931155917289e-11)}, {FN (cosh), ARG(1.19209289550781250e-07,-3.14193792057279441821e+00), RES(-9.9999994039536292218e-1, 4.1159030931155917289e-11)}, {FN (cosh), ARG(-1.19209289550781250e-07,3.14193792057279441821e+00), RES(-9.9999994039536292218e-1, 4.1159030931155917289e-11)}, {FN (cosh), ARG(-1.19209289550781250e-07,-3.14193792057279441821e+00), RES(-9.9999994039536292218e-1, -4.1159030931155917289e-11)}, {FN (cosh), ARG(1.19209289550781250e-07,4.71204371340168837179e+00), RES(-3.4526697614164977421e-4, -1.1920928244535424532e-7)}, {FN (cosh), ARG(1.19209289550781250e-07,-4.71204371340168837179e+00), RES(-3.4526697614164977421e-4, 1.1920928244535424532e-7)}, {FN (cosh), ARG(-1.19209289550781250e-07,4.71204371340168837179e+00), RES(-3.4526697614164977421e-4, 1.1920928244535424532e-7)}, {FN (cosh), ARG(-1.19209289550781250e-07,-4.71204371340168837179e+00), RES(-3.4526697614164977421e-4, -1.1920928244535424532e-7)}, {FN (cosh), ARG(1.19209289550781250e-07,4.71273424736769097620e+00), RES(3.4526697614128238019e-4, -1.1920928244535424533e-7)}, {FN (cosh), ARG(1.19209289550781250e-07,-4.71273424736769097620e+00), RES(3.4526697614128238019e-4, 1.1920928244535424533e-7)}, {FN (cosh), ARG(-1.19209289550781250e-07,4.71273424736769097620e+00), RES(3.4526697614128238019e-4, 1.1920928244535424533e-7)}, {FN (cosh), ARG(-1.19209289550781250e-07,-4.71273424736769097620e+00), RES(3.4526697614128238019e-4, -1.1920928244535424533e-7)}, {FN (cosh), ARG(1.19209289550781250e-07,6.28284004019658492979e+00), RES(9.9999994039536292205e-1, -4.1159030931199714069e-11)}, {FN (cosh), ARG(1.19209289550781250e-07,-6.28284004019658492979e+00), RES(9.9999994039536292205e-1, 4.1159030931199714069e-11)}, {FN (cosh), ARG(-1.19209289550781250e-07,6.28284004019658492979e+00), RES(9.9999994039536292205e-1, 4.1159030931199714069e-11)}, {FN (cosh), ARG(-1.19209289550781250e-07,-6.28284004019658492979e+00), RES(9.9999994039536292205e-1, -4.1159030931199714069e-11)}, {FN (cosh), ARG(1.19209289550781250e-07,6.28353057416258753420e+00), RES(9.9999994039536292222e-1, 4.1159030931141318362e-11)}, {FN (cosh), ARG(1.19209289550781250e-07,-6.28353057416258753420e+00), RES(9.9999994039536292222e-1, -4.1159030931141318362e-11)}, {FN (cosh), ARG(-1.19209289550781250e-07,6.28353057416258753420e+00), RES(9.9999994039536292222e-1, -4.1159030931141318362e-11)}, {FN (cosh), ARG(-1.19209289550781250e-07,-6.28353057416258753420e+00), RES(9.9999994039536292222e-1, 4.1159030931141318362e-11)}, {FN (cosh), ARG(1.19209289550781250e-07,9.42443269378637893396e+00), RES(-9.9999994039536292231e-1, 4.1159030931108433883e-11)}, {FN (cosh), ARG(1.19209289550781250e-07,-9.42443269378637893396e+00), RES(-9.9999994039536292231e-1, -4.1159030931108433883e-11)}, {FN (cosh), ARG(-1.19209289550781250e-07,9.42443269378637893396e+00), RES(-9.9999994039536292231e-1, -4.1159030931108433883e-11)}, {FN (cosh), ARG(-1.19209289550781250e-07,-9.42443269378637893396e+00), RES(-9.9999994039536292231e-1, 4.1159030931108433883e-11)}, {FN (cosh), ARG(1.19209289550781250e-07,9.42512322775237976202e+00), RES(-9.9999994039536292257e-1, -4.1159030931020840323e-11)}, {FN (cosh), ARG(1.19209289550781250e-07,-9.42512322775237976202e+00), RES(-9.9999994039536292257e-1, 4.1159030931020840323e-11)}, {FN (cosh), ARG(-1.19209289550781250e-07,9.42512322775237976202e+00), RES(-9.9999994039536292257e-1, 4.1159030931020840323e-11)}, {FN (cosh), ARG(-1.19209289550781250e-07,-9.42512322775237976202e+00), RES(-9.9999994039536292257e-1, -4.1159030931020840323e-11)}, {FN (cosh), ARG(5.0e-01,-3.45266983001243932001e-04), RES(1.1276258979946363573e0, -1.7991700040930800151e-4)}, {FN (cosh), ARG(5.0e-01,3.45266983001243932001e-04), RES(1.1276258979946363573e0, 1.7991700040930800151e-4)}, {FN (cosh), ARG(-5.0e-01,-3.45266983001243932001e-04), RES(1.1276258979946363573e0, 1.7991700040930800151e-4)}, {FN (cosh), ARG(-5.0e-01,3.45266983001243932001e-04), RES(1.1276258979946363573e0, -1.7991700040930800151e-4)}, {FN (cosh), ARG(5.0e-01,1.57045105981189525579e+00), RES(3.8933200722547541227e-4, 5.2109527443404709207e-1)}, {FN (cosh), ARG(5.0e-01,-1.57045105981189525579e+00), RES(3.8933200722547541227e-4, -5.2109527443404709207e-1)}, {FN (cosh), ARG(-5.0e-01,1.57045105981189525579e+00), RES(3.8933200722547541227e-4, -5.2109527443404709207e-1)}, {FN (cosh), ARG(-5.0e-01,-1.57045105981189525579e+00), RES(3.8933200722547541227e-4, 5.2109527443404709207e-1)}, {FN (cosh), ARG(5.0e-01,1.57114159377789786021e+00), RES(-3.8933200722533731792e-4, 5.2109527443404709209e-1)}, {FN (cosh), ARG(5.0e-01,-1.57114159377789786021e+00), RES(-3.8933200722533731792e-4, -5.2109527443404709209e-1)}, {FN (cosh), ARG(-5.0e-01,1.57114159377789786021e+00), RES(-3.8933200722533731792e-4, -5.2109527443404709209e-1)}, {FN (cosh), ARG(-5.0e-01,-1.57114159377789786021e+00), RES(-3.8933200722533731792e-4, 5.2109527443404709209e-1)}, {FN (cosh), ARG(5.0e-01,3.14124738660679181379e+00), RES(-1.1276258979946363572e0, 1.7991700040940218455e-4)}, {FN (cosh), ARG(5.0e-01,-3.14124738660679181379e+00), RES(-1.1276258979946363572e0, -1.7991700040940218455e-4)}, {FN (cosh), ARG(-5.0e-01,3.14124738660679181379e+00), RES(-1.1276258979946363572e0, -1.7991700040940218455e-4)}, {FN (cosh), ARG(-5.0e-01,-3.14124738660679181379e+00), RES(-1.1276258979946363572e0, 1.7991700040940218455e-4)}, {FN (cosh), ARG(5.0e-01,3.14193792057279441821e+00), RES(-1.1276258979946363573e0, -1.7991700040927455302e-4)}, {FN (cosh), ARG(5.0e-01,-3.14193792057279441821e+00), RES(-1.1276258979946363573e0, 1.7991700040927455302e-4)}, {FN (cosh), ARG(-5.0e-01,3.14193792057279441821e+00), RES(-1.1276258979946363573e0, 1.7991700040927455302e-4)}, {FN (cosh), ARG(-5.0e-01,-3.14193792057279441821e+00), RES(-1.1276258979946363573e0, -1.7991700040927455302e-4)}, {FN (cosh), ARG(5.0e-01,4.71204371340168837179e+00), RES(-3.8933200722561350661e-4, -5.2109527443404709205e-1)}, {FN (cosh), ARG(5.0e-01,-4.71204371340168837179e+00), RES(-3.8933200722561350661e-4, 5.2109527443404709205e-1)}, {FN (cosh), ARG(-5.0e-01,4.71204371340168837179e+00), RES(-3.8933200722561350661e-4, 5.2109527443404709205e-1)}, {FN (cosh), ARG(-5.0e-01,-4.71204371340168837179e+00), RES(-3.8933200722561350661e-4, -5.2109527443404709205e-1)}, {FN (cosh), ARG(5.0e-01,4.71273424736769097620e+00), RES(3.8933200722519922358e-4, -5.2109527443404709212e-1)}, {FN (cosh), ARG(5.0e-01,-4.71273424736769097620e+00), RES(3.8933200722519922358e-4, 5.2109527443404709212e-1)}, {FN (cosh), ARG(-5.0e-01,4.71273424736769097620e+00), RES(3.8933200722519922358e-4, 5.2109527443404709212e-1)}, {FN (cosh), ARG(-5.0e-01,-4.71273424736769097620e+00), RES(3.8933200722519922358e-4, -5.2109527443404709212e-1)}, {FN (cosh), ARG(5.0e-01,6.28284004019658492979e+00), RES(1.1276258979946363572e0, -1.7991700040946600032e-4)}, {FN (cosh), ARG(5.0e-01,-6.28284004019658492979e+00), RES(1.1276258979946363572e0, 1.7991700040946600032e-4)}, {FN (cosh), ARG(-5.0e-01,6.28284004019658492979e+00), RES(1.1276258979946363572e0, 1.7991700040946600032e-4)}, {FN (cosh), ARG(-5.0e-01,-6.28284004019658492979e+00), RES(1.1276258979946363572e0, -1.7991700040946600032e-4)}, {FN (cosh), ARG(5.0e-01,6.28353057416258753420e+00), RES(1.1276258979946363574e0, 1.7991700040921073725e-4)}, {FN (cosh), ARG(5.0e-01,-6.28353057416258753420e+00), RES(1.1276258979946363574e0, -1.7991700040921073725e-4)}, {FN (cosh), ARG(-5.0e-01,6.28353057416258753420e+00), RES(1.1276258979946363574e0, -1.7991700040921073725e-4)}, {FN (cosh), ARG(-5.0e-01,-6.28353057416258753420e+00), RES(1.1276258979946363574e0, 1.7991700040921073725e-4)}, {FN (cosh), ARG(5.0e-01,9.42443269378637893396e+00), RES(-1.1276258979946363575e0, 1.7991700040906699050e-4)}, {FN (cosh), ARG(5.0e-01,-9.42443269378637893396e+00), RES(-1.1276258979946363575e0, -1.7991700040906699050e-4)}, {FN (cosh), ARG(-5.0e-01,9.42443269378637893396e+00), RES(-1.1276258979946363575e0, -1.7991700040906699050e-4)}, {FN (cosh), ARG(-5.0e-01,-9.42443269378637893396e+00), RES(-1.1276258979946363575e0, 1.7991700040906699050e-4)}, {FN (cosh), ARG(5.0e-01,9.42512322775237976202e+00), RES(-1.1276258979946363577e0, -1.7991700040868409591e-4)}, {FN (cosh), ARG(5.0e-01,-9.42512322775237976202e+00), RES(-1.1276258979946363577e0, 1.7991700040868409591e-4)}, {FN (cosh), ARG(-5.0e-01,9.42512322775237976202e+00), RES(-1.1276258979946363577e0, 1.7991700040868409591e-4)}, {FN (cosh), ARG(-5.0e-01,-9.42512322775237976202e+00), RES(-1.1276258979946363577e0, -1.7991700040868409591e-4)}, {FN (cosh), ARG(1.0e+00,-3.45266983001243932001e-04), RES(1.5430805428404715942e0, -4.057581624871654840e-4)}, {FN (cosh), ARG(1.0e+00,3.45266983001243932001e-04), RES(1.5430805428404715942e0, 4.057581624871654840e-4)}, {FN (cosh), ARG(-1.0e+00,-3.45266983001243932001e-04), RES(1.5430805428404715942e0, 4.057581624871654840e-4)}, {FN (cosh), ARG(-1.0e+00,3.45266983001243932001e-04), RES(1.5430805428404715942e0, -4.057581624871654840e-4)}, {FN (cosh), ARG(1.0e+00,1.57045105981189525579e+00), RES(5.3277478472520380315e-4, 1.1752011235963524659e0)}, {FN (cosh), ARG(1.0e+00,-1.57045105981189525579e+00), RES(5.3277478472520380315e-4, -1.1752011235963524659e0)}, {FN (cosh), ARG(-1.0e+00,1.57045105981189525579e+00), RES(5.3277478472520380315e-4, -1.1752011235963524659e0)}, {FN (cosh), ARG(-1.0e+00,-1.57045105981189525579e+00), RES(5.3277478472520380315e-4, 1.1752011235963524659e0)}, {FN (cosh), ARG(1.0e+00,1.57114159377789786021e+00), RES(-5.3277478472501483029e-4, 1.1752011235963524660e0)}, {FN (cosh), ARG(1.0e+00,-1.57114159377789786021e+00), RES(-5.3277478472501483029e-4, -1.1752011235963524660e0)}, {FN (cosh), ARG(-1.0e+00,1.57114159377789786021e+00), RES(-5.3277478472501483029e-4, -1.1752011235963524660e0)}, {FN (cosh), ARG(-1.0e+00,-1.57114159377789786021e+00), RES(-5.3277478472501483029e-4, 1.1752011235963524660e0)}, {FN (cosh), ARG(1.0e+00,3.14124738660679181379e+00), RES(-1.5430805428404715941e0, 4.0575816248737789049e-4)}, {FN (cosh), ARG(1.0e+00,-3.14124738660679181379e+00), RES(-1.5430805428404715941e0, -4.0575816248737789049e-4)}, {FN (cosh), ARG(-1.0e+00,3.14124738660679181379e+00), RES(-1.5430805428404715941e0, -4.0575816248737789049e-4)}, {FN (cosh), ARG(-1.0e+00,-3.14124738660679181379e+00), RES(-1.5430805428404715941e0, 4.0575816248737789049e-4)}, {FN (cosh), ARG(1.0e+00,3.14193792057279441821e+00), RES(-1.5430805428404715943e0, -4.0575816248709004923e-4)}, {FN (cosh), ARG(1.0e+00,-3.14193792057279441821e+00), RES(-1.5430805428404715943e0, 4.0575816248709004923e-4)}, {FN (cosh), ARG(-1.0e+00,3.14193792057279441821e+00), RES(-1.5430805428404715943e0, 4.0575816248709004923e-4)}, {FN (cosh), ARG(-1.0e+00,-3.14193792057279441821e+00), RES(-1.5430805428404715943e0, -4.0575816248709004923e-4)}, {FN (cosh), ARG(1.0e+00,4.71204371340168837179e+00), RES(-5.3277478472539277601e-4, -1.1752011235963524659e0)}, {FN (cosh), ARG(1.0e+00,-4.71204371340168837179e+00), RES(-5.3277478472539277601e-4, 1.1752011235963524659e0)}, {FN (cosh), ARG(-1.0e+00,4.71204371340168837179e+00), RES(-5.3277478472539277601e-4, 1.1752011235963524659e0)}, {FN (cosh), ARG(-1.0e+00,-4.71204371340168837179e+00), RES(-5.3277478472539277601e-4, -1.1752011235963524659e0)}, {FN (cosh), ARG(1.0e+00,4.71273424736769097620e+00), RES(5.3277478472482585742e-4, -1.1752011235963524660e0)}, {FN (cosh), ARG(1.0e+00,-4.71273424736769097620e+00), RES(5.3277478472482585742e-4, 1.1752011235963524660e0)}, {FN (cosh), ARG(-1.0e+00,4.71273424736769097620e+00), RES(5.3277478472482585742e-4, 1.1752011235963524660e0)}, {FN (cosh), ARG(-1.0e+00,-4.71273424736769097620e+00), RES(5.3277478472482585742e-4, -1.1752011235963524660e0)}, {FN (cosh), ARG(1.0e+00,6.28284004019658492979e+00), RES(1.5430805428404715941e0, -4.0575816248752181112e-4)}, {FN (cosh), ARG(1.0e+00,-6.28284004019658492979e+00), RES(1.5430805428404715941e0, 4.0575816248752181112e-4)}, {FN (cosh), ARG(-1.0e+00,6.28284004019658492979e+00), RES(1.5430805428404715941e0, 4.0575816248752181112e-4)}, {FN (cosh), ARG(-1.0e+00,-6.28284004019658492979e+00), RES(1.5430805428404715941e0, -4.0575816248752181112e-4)}, {FN (cosh), ARG(1.0e+00,6.28353057416258753420e+00), RES(1.5430805428404715943e0, 4.0575816248694612861e-4)}, {FN (cosh), ARG(1.0e+00,-6.28353057416258753420e+00), RES(1.5430805428404715943e0, -4.0575816248694612861e-4)}, {FN (cosh), ARG(-1.0e+00,6.28353057416258753420e+00), RES(1.5430805428404715943e0, -4.0575816248694612861e-4)}, {FN (cosh), ARG(-1.0e+00,-6.28353057416258753420e+00), RES(1.5430805428404715943e0, 4.0575816248694612861e-4)}, {FN (cosh), ARG(1.0e+00,9.42443269378637893396e+00), RES(-1.5430805428404715945e0, 4.0575816248662194348e-4)}, {FN (cosh), ARG(1.0e+00,-9.42443269378637893396e+00), RES(-1.5430805428404715945e0, -4.0575816248662194348e-4)}, {FN (cosh), ARG(-1.0e+00,9.42443269378637893396e+00), RES(-1.5430805428404715945e0, -4.0575816248662194348e-4)}, {FN (cosh), ARG(-1.0e+00,-9.42443269378637893396e+00), RES(-1.5430805428404715945e0, 4.0575816248662194348e-4)}, {FN (cosh), ARG(1.0e+00,9.42512322775237976202e+00), RES(-1.5430805428404715949e0, -4.0575816248575841970e-4)}, {FN (cosh), ARG(1.0e+00,-9.42512322775237976202e+00), RES(-1.5430805428404715949e0, 4.0575816248575841970e-4)}, {FN (cosh), ARG(-1.0e+00,9.42512322775237976202e+00), RES(-1.5430805428404715949e0, 4.0575816248575841970e-4)}, {FN (cosh), ARG(-1.0e+00,-9.42512322775237976202e+00), RES(-1.5430805428404715949e0, -4.0575816248575841970e-4)}, {FN (cosh), ARG(2.0e+00,-3.45266983001243932001e-04), RES(3.7621954668392959447e0, -1.2522351259043242989e-3)}, {FN (cosh), ARG(2.0e+00,3.45266983001243932001e-04), RES(3.7621954668392959447e0, 1.2522351259043242989e-3)}, {FN (cosh), ARG(-2.0e+00,-3.45266983001243932001e-04), RES(3.7621954668392959447e0, 1.2522351259043242989e-3)}, {FN (cosh), ARG(-2.0e+00,3.45266983001243932001e-04), RES(3.7621954668392959447e0, -1.2522351259043242989e-3)}, {FN (cosh), ARG(2.0e+00,1.57045105981189525579e+00), RES(1.2989619299131198016e-3, 3.6268601916692946554e0)}, {FN (cosh), ARG(2.0e+00,-1.57045105981189525579e+00), RES(1.2989619299131198016e-3, -3.6268601916692946554e0)}, {FN (cosh), ARG(-2.0e+00,1.57045105981189525579e+00), RES(1.2989619299131198016e-3, -3.6268601916692946554e0)}, {FN (cosh), ARG(-2.0e+00,-1.57045105981189525579e+00), RES(1.2989619299131198016e-3, 3.6268601916692946554e0)}, {FN (cosh), ARG(2.0e+00,1.57114159377789786021e+00), RES(-1.2989619299126590655e-3, 3.6268601916692946556e0)}, {FN (cosh), ARG(2.0e+00,-1.57114159377789786021e+00), RES(-1.2989619299126590655e-3, -3.6268601916692946556e0)}, {FN (cosh), ARG(-2.0e+00,1.57114159377789786021e+00), RES(-1.2989619299126590655e-3, -3.6268601916692946556e0)}, {FN (cosh), ARG(-2.0e+00,-1.57114159377789786021e+00), RES(-1.2989619299126590655e-3, 3.6268601916692946556e0)}, {FN (cosh), ARG(2.0e+00,3.14124738660679181379e+00), RES(-3.7621954668392959444e0, 1.2522351259049798196e-3)}, {FN (cosh), ARG(2.0e+00,-3.14124738660679181379e+00), RES(-3.7621954668392959444e0, -1.2522351259049798196e-3)}, {FN (cosh), ARG(-2.0e+00,3.14124738660679181379e+00), RES(-3.7621954668392959444e0, -1.2522351259049798196e-3)}, {FN (cosh), ARG(-2.0e+00,-3.14124738660679181379e+00), RES(-3.7621954668392959444e0, 1.2522351259049798196e-3)}, {FN (cosh), ARG(2.0e+00,3.14193792057279441821e+00), RES(-3.7621954668392959448e0, -1.2522351259040914950e-3)}, {FN (cosh), ARG(2.0e+00,-3.14193792057279441821e+00), RES(-3.7621954668392959448e0, 1.2522351259040914950e-3)}, {FN (cosh), ARG(-2.0e+00,3.14193792057279441821e+00), RES(-3.7621954668392959448e0, 1.2522351259040914950e-3)}, {FN (cosh), ARG(-2.0e+00,-3.14193792057279441821e+00), RES(-3.7621954668392959448e0, -1.2522351259040914950e-3)}, {FN (cosh), ARG(2.0e+00,4.71204371340168837179e+00), RES(-1.2989619299135805376e-3, -3.6268601916692946552e0)}, {FN (cosh), ARG(2.0e+00,-4.71204371340168837179e+00), RES(-1.2989619299135805376e-3, 3.6268601916692946552e0)}, {FN (cosh), ARG(-2.0e+00,4.71204371340168837179e+00), RES(-1.2989619299135805376e-3, 3.6268601916692946552e0)}, {FN (cosh), ARG(-2.0e+00,-4.71204371340168837179e+00), RES(-1.2989619299135805376e-3, -3.6268601916692946552e0)}, {FN (cosh), ARG(2.0e+00,4.71273424736769097620e+00), RES(1.2989619299121983294e-3, -3.6268601916692946557e0)}, {FN (cosh), ARG(2.0e+00,-4.71273424736769097620e+00), RES(1.2989619299121983294e-3, 3.6268601916692946557e0)}, {FN (cosh), ARG(-2.0e+00,4.71273424736769097620e+00), RES(1.2989619299121983294e-3, 3.6268601916692946557e0)}, {FN (cosh), ARG(-2.0e+00,-4.71273424736769097620e+00), RES(1.2989619299121983294e-3, -3.6268601916692946557e0)}, {FN (cosh), ARG(2.0e+00,6.28284004019658492979e+00), RES(3.7621954668392959443e0, -1.2522351259054239819e-3)}, {FN (cosh), ARG(2.0e+00,-6.28284004019658492979e+00), RES(3.7621954668392959443e0, 1.2522351259054239819e-3)}, {FN (cosh), ARG(-2.0e+00,6.28284004019658492979e+00), RES(3.7621954668392959443e0, 1.2522351259054239819e-3)}, {FN (cosh), ARG(-2.0e+00,-6.28284004019658492979e+00), RES(3.7621954668392959443e0, -1.2522351259054239819e-3)}, {FN (cosh), ARG(2.0e+00,6.28353057416258753420e+00), RES(3.7621954668392959449e0, 1.2522351259036473328e-3)}, {FN (cosh), ARG(2.0e+00,-6.28353057416258753420e+00), RES(3.7621954668392959449e0, -1.2522351259036473328e-3)}, {FN (cosh), ARG(-2.0e+00,6.28353057416258753420e+00), RES(3.7621954668392959449e0, -1.2522351259036473328e-3)}, {FN (cosh), ARG(-2.0e+00,-6.28353057416258753420e+00), RES(3.7621954668392959449e0, 1.2522351259036473328e-3)}, {FN (cosh), ARG(2.0e+00,9.42443269378637893396e+00), RES(-3.7621954668392959453e0, 1.2522351259026468452e-3)}, {FN (cosh), ARG(2.0e+00,-9.42443269378637893396e+00), RES(-3.7621954668392959453e0, -1.2522351259026468452e-3)}, {FN (cosh), ARG(-2.0e+00,9.42443269378637893396e+00), RES(-3.7621954668392959453e0, -1.2522351259026468452e-3)}, {FN (cosh), ARG(-2.0e+00,-9.42443269378637893396e+00), RES(-3.7621954668392959453e0, 1.2522351259026468452e-3)}, {FN (cosh), ARG(2.0e+00,9.42512322775237976202e+00), RES(-3.7621954668392959462e0, -1.2522351258999818715e-3)}, {FN (cosh), ARG(2.0e+00,-9.42512322775237976202e+00), RES(-3.7621954668392959462e0, 1.2522351258999818715e-3)}, {FN (cosh), ARG(-2.0e+00,9.42512322775237976202e+00), RES(-3.7621954668392959462e0, 1.2522351258999818715e-3)}, {FN (cosh), ARG(-2.0e+00,-9.42512322775237976202e+00), RES(-3.7621954668392959462e0, -1.2522351258999818715e-3)}, {FN (tanh), ARG(0.0e+00,-3.45266983001243932001e-04), RES(0, -3.4526699672092183585e-4)}, {FN (tanh), ARG(0.0e+00,3.45266983001243932001e-04), RES(0, 3.4526699672092183585e-4)}, {FN (tanh), ARG(0.0e+00,1.57045105981189525579e+00), RES(0, 2.8963092606501007060e3)}, {FN (tanh), ARG(0.0e+00,-1.57045105981189525579e+00), RES(0, -2.8963092606501007060e3)}, {FN (tanh), ARG(0.0e+00,1.57114159377789786021e+00), RES(0, -2.8963092606511280143e3)}, {FN (tanh), ARG(0.0e+00,-1.57114159377789786021e+00), RES(0, 2.8963092606511280143e3)}, {FN (tanh), ARG(0.0e+00,3.14124738660679181379e+00), RES(0, -3.4526699672110257641e-4)}, {FN (tanh), ARG(0.0e+00,-3.14124738660679181379e+00), RES(0, 3.4526699672110257641e-4)}, {FN (tanh), ARG(0.0e+00,3.14193792057279441821e+00), RES(0, 3.4526699672085764703e-4)}, {FN (tanh), ARG(0.0e+00,-3.14193792057279441821e+00), RES(0, -3.4526699672085764703e-4)}, {FN (tanh), ARG(0.0e+00,4.71204371340168837179e+00), RES(0, 2.8963092606490733978e3)}, {FN (tanh), ARG(0.0e+00,-4.71204371340168837179e+00), RES(0, -2.8963092606490733978e3)}, {FN (tanh), ARG(0.0e+00,4.71273424736769097620e+00), RES(0, -2.8963092606521553225e3)}, {FN (tanh), ARG(0.0e+00,-4.71273424736769097620e+00), RES(0, 2.8963092606521553225e3)}, {FN (tanh), ARG(0.0e+00,6.28284004019658492979e+00), RES(0, -3.4526699672122504111e-4)}, {FN (tanh), ARG(0.0e+00,-6.28284004019658492979e+00), RES(0, 3.4526699672122504111e-4)}, {FN (tanh), ARG(0.0e+00,6.28353057416258753420e+00), RES(0, 3.4526699672073518233e-4)}, {FN (tanh), ARG(0.0e+00,-6.28353057416258753420e+00), RES(0, -3.4526699672073518233e-4)}, {FN (tanh), ARG(0.0e+00,9.42443269378637893396e+00), RES(0, -3.4526699672045932728e-4)}, {FN (tanh), ARG(0.0e+00,-9.42443269378637893396e+00), RES(0, 3.4526699672045932728e-4)}, {FN (tanh), ARG(0.0e+00,9.42512322775237976202e+00), RES(0, 3.4526699671972453911e-4)}, {FN (tanh), ARG(0.0e+00,-9.42512322775237976202e+00), RES(0, -3.4526699671972453911e-4)}, {FN (tanh), ARG(1.19209289550781250e-07,-3.45266983001243932001e-04), RES(1.1920930376163652989e-7, -3.4526699672091692931e-4)}, {FN (tanh), ARG(1.19209289550781250e-07,3.45266983001243932001e-04), RES(1.1920930376163652989e-7, 3.4526699672091692931e-4)}, {FN (tanh), ARG(-1.19209289550781250e-07,-3.45266983001243932001e-04), RES(-1.1920930376163652989e-7, -3.4526699672091692931e-4)}, {FN (tanh), ARG(-1.19209289550781250e-07,3.45266983001243932001e-04), RES(-1.1920930376163652989e-7, 3.4526699672091692931e-4)}, {FN (tanh), ARG(1.19209289550781250e-07,1.57045105981189525579e+00), RES(9.9999992052646305569e-1, 2.8963089153831588642e3)}, {FN (tanh), ARG(1.19209289550781250e-07,-1.57045105981189525579e+00), RES(9.9999992052646305569e-1, -2.8963089153831588642e3)}, {FN (tanh), ARG(-1.19209289550781250e-07,1.57045105981189525579e+00), RES(-9.9999992052646305569e-1, 2.8963089153831588642e3)}, {FN (tanh), ARG(-1.19209289550781250e-07,-1.57045105981189525579e+00), RES(-9.9999992052646305569e-1, -2.8963089153831588642e3)}, {FN (tanh), ARG(1.19209289550781250e-07,1.57114159377789786021e+00), RES(9.9999992052717244672e-1, -2.8963089153841861720e3)}, {FN (tanh), ARG(1.19209289550781250e-07,-1.57114159377789786021e+00), RES(9.9999992052717244672e-1, 2.8963089153841861720e3)}, {FN (tanh), ARG(-1.19209289550781250e-07,1.57114159377789786021e+00), RES(-9.9999992052717244672e-1, -2.8963089153841861720e3)}, {FN (tanh), ARG(-1.19209289550781250e-07,-1.57114159377789786021e+00), RES(-9.9999992052717244672e-1, 2.8963089153841861720e3)}, {FN (tanh), ARG(1.19209289550781250e-07,3.14124738660679181379e+00), RES(1.1920930376163652991e-7, -3.4526699672109766987e-4)}, {FN (tanh), ARG(1.19209289550781250e-07,-3.14124738660679181379e+00), RES(1.1920930376163652991e-7, 3.4526699672109766987e-4)}, {FN (tanh), ARG(-1.19209289550781250e-07,3.14124738660679181379e+00), RES(-1.1920930376163652991e-7, -3.4526699672109766987e-4)}, {FN (tanh), ARG(-1.19209289550781250e-07,-3.14124738660679181379e+00), RES(-1.1920930376163652991e-7, 3.4526699672109766987e-4)}, {FN (tanh), ARG(1.19209289550781250e-07,3.14193792057279441821e+00), RES(1.1920930376163652989e-7, 3.4526699672085274049e-4)}, {FN (tanh), ARG(1.19209289550781250e-07,-3.14193792057279441821e+00), RES(1.1920930376163652989e-7, -3.4526699672085274049e-4)}, {FN (tanh), ARG(-1.19209289550781250e-07,3.14193792057279441821e+00), RES(-1.1920930376163652989e-7, 3.4526699672085274049e-4)}, {FN (tanh), ARG(-1.19209289550781250e-07,-3.14193792057279441821e+00), RES(-1.1920930376163652989e-7, -3.4526699672085274049e-4)}, {FN (tanh), ARG(1.19209289550781250e-07,4.71204371340168837179e+00), RES(9.9999992052575366466e-1, 2.8963089153821315563e3)}, {FN (tanh), ARG(1.19209289550781250e-07,-4.71204371340168837179e+00), RES(9.9999992052575366466e-1, -2.8963089153821315563e3)}, {FN (tanh), ARG(-1.19209289550781250e-07,4.71204371340168837179e+00), RES(-9.9999992052575366466e-1, 2.8963089153821315563e3)}, {FN (tanh), ARG(-1.19209289550781250e-07,-4.71204371340168837179e+00), RES(-9.9999992052575366466e-1, -2.8963089153821315563e3)}, {FN (tanh), ARG(1.19209289550781250e-07,4.71273424736769097620e+00), RES(9.9999992052788183776e-1, -2.8963089153852134799e3)}, {FN (tanh), ARG(1.19209289550781250e-07,-4.71273424736769097620e+00), RES(9.9999992052788183776e-1, 2.8963089153852134799e3)}, {FN (tanh), ARG(-1.19209289550781250e-07,4.71273424736769097620e+00), RES(-9.9999992052788183776e-1, -2.8963089153852134799e3)}, {FN (tanh), ARG(-1.19209289550781250e-07,-4.71273424736769097620e+00), RES(-9.9999992052788183776e-1, 2.8963089153852134799e3)}, {FN (tanh), ARG(1.19209289550781250e-07,6.28284004019658492979e+00), RES(1.1920930376163652992e-7, -3.4526699672122013457e-4)}, {FN (tanh), ARG(1.19209289550781250e-07,-6.28284004019658492979e+00), RES(1.1920930376163652992e-7, 3.4526699672122013457e-4)}, {FN (tanh), ARG(-1.19209289550781250e-07,6.28284004019658492979e+00), RES(-1.1920930376163652992e-7, -3.4526699672122013457e-4)}, {FN (tanh), ARG(-1.19209289550781250e-07,-6.28284004019658492979e+00), RES(-1.1920930376163652992e-7, 3.4526699672122013457e-4)}, {FN (tanh), ARG(1.19209289550781250e-07,6.28353057416258753420e+00), RES(1.1920930376163652988e-7, 3.4526699672073027579e-4)}, {FN (tanh), ARG(1.19209289550781250e-07,-6.28353057416258753420e+00), RES(1.1920930376163652988e-7, -3.4526699672073027579e-4)}, {FN (tanh), ARG(-1.19209289550781250e-07,6.28353057416258753420e+00), RES(-1.1920930376163652988e-7, 3.4526699672073027579e-4)}, {FN (tanh), ARG(-1.19209289550781250e-07,-6.28353057416258753420e+00), RES(-1.1920930376163652988e-7, -3.4526699672073027579e-4)}, {FN (tanh), ARG(1.19209289550781250e-07,9.42443269378637893396e+00), RES(1.1920930376163652985e-7, -3.4526699672045442074e-4)}, {FN (tanh), ARG(1.19209289550781250e-07,-9.42443269378637893396e+00), RES(1.1920930376163652985e-7, 3.4526699672045442074e-4)}, {FN (tanh), ARG(-1.19209289550781250e-07,9.42443269378637893396e+00), RES(-1.1920930376163652985e-7, -3.4526699672045442074e-4)}, {FN (tanh), ARG(-1.19209289550781250e-07,-9.42443269378637893396e+00), RES(-1.1920930376163652985e-7, 3.4526699672045442074e-4)}, {FN (tanh), ARG(1.19209289550781250e-07,9.42512322775237976202e+00), RES(1.1920930376163652979e-7, 3.4526699671971963257e-4)}, {FN (tanh), ARG(1.19209289550781250e-07,-9.42512322775237976202e+00), RES(1.1920930376163652979e-7, -3.4526699671971963257e-4)}, {FN (tanh), ARG(-1.19209289550781250e-07,9.42512322775237976202e+00), RES(-1.1920930376163652979e-7, 3.4526699671971963257e-4)}, {FN (tanh), ARG(-1.19209289550781250e-07,-9.42512322775237976202e+00), RES(-1.1920930376163652979e-7, -3.4526699671971963257e-4)}, {FN (tanh), ARG(5.0e-01,-3.45266983001243932001e-04), RES(4.6211720058436229979e-1, -2.7153443992655805934e-4)}, {FN (tanh), ARG(5.0e-01,3.45266983001243932001e-04), RES(4.6211720058436229979e-1, 2.7153443992655805934e-4)}, {FN (tanh), ARG(-5.0e-01,-3.45266983001243932001e-04), RES(-4.6211720058436229979e-1, -2.7153443992655805934e-4)}, {FN (tanh), ARG(-5.0e-01,3.45266983001243932001e-04), RES(-4.6211720058436229979e-1, 2.7153443992655805934e-4)}, {FN (tanh), ARG(5.0e-01,1.57045105981189525579e+00), RES(2.1639524637389325996e0, 1.2715121175455623363e-3)}, {FN (tanh), ARG(5.0e-01,-1.57045105981189525579e+00), RES(2.1639524637389325996e0, -1.2715121175455623363e-3)}, {FN (tanh), ARG(-5.0e-01,1.57045105981189525579e+00), RES(-2.1639524637389325996e0, 1.2715121175455623363e-3)}, {FN (tanh), ARG(-5.0e-01,-1.57045105981189525579e+00), RES(-2.1639524637389325996e0, -1.2715121175455623363e-3)}, {FN (tanh), ARG(5.0e-01,1.57114159377789786021e+00), RES(2.1639524637389326002e0, -1.2715121175451113370e-3)}, {FN (tanh), ARG(5.0e-01,-1.57114159377789786021e+00), RES(2.1639524637389326002e0, 1.2715121175451113370e-3)}, {FN (tanh), ARG(-5.0e-01,1.57114159377789786021e+00), RES(-2.1639524637389326002e0, -1.2715121175451113370e-3)}, {FN (tanh), ARG(-5.0e-01,-1.57114159377789786021e+00), RES(-2.1639524637389326002e0, 1.2715121175451113370e-3)}, {FN (tanh), ARG(5.0e-01,3.14124738660679181379e+00), RES(4.6211720058436229984e-1, -2.7153443992670020234e-4)}, {FN (tanh), ARG(5.0e-01,-3.14124738660679181379e+00), RES(4.6211720058436229984e-1, 2.7153443992670020234e-4)}, {FN (tanh), ARG(-5.0e-01,3.14124738660679181379e+00), RES(-4.6211720058436229984e-1, -2.7153443992670020234e-4)}, {FN (tanh), ARG(-5.0e-01,-3.14124738660679181379e+00), RES(-4.6211720058436229984e-1, 2.7153443992670020234e-4)}, {FN (tanh), ARG(5.0e-01,3.14193792057279441821e+00), RES(4.6211720058436229978e-1, 2.7153443992650757820e-4)}, {FN (tanh), ARG(5.0e-01,-3.14193792057279441821e+00), RES(4.6211720058436229978e-1, -2.7153443992650757820e-4)}, {FN (tanh), ARG(-5.0e-01,3.14193792057279441821e+00), RES(-4.6211720058436229978e-1, 2.7153443992650757820e-4)}, {FN (tanh), ARG(-5.0e-01,-3.14193792057279441821e+00), RES(-4.6211720058436229978e-1, -2.7153443992650757820e-4)}, {FN (tanh), ARG(5.0e-01,4.71204371340168837179e+00), RES(2.1639524637389325989e0, 1.2715121175460133355e-3)}, {FN (tanh), ARG(5.0e-01,-4.71204371340168837179e+00), RES(2.1639524637389325989e0, -1.2715121175460133355e-3)}, {FN (tanh), ARG(-5.0e-01,4.71204371340168837179e+00), RES(-2.1639524637389325989e0, 1.2715121175460133355e-3)}, {FN (tanh), ARG(-5.0e-01,-4.71204371340168837179e+00), RES(-2.1639524637389325989e0, -1.2715121175460133355e-3)}, {FN (tanh), ARG(5.0e-01,4.71273424736769097620e+00), RES(2.1639524637389326009e0, -1.2715121175446603377e-3)}, {FN (tanh), ARG(5.0e-01,-4.71273424736769097620e+00), RES(2.1639524637389326009e0, 1.2715121175446603377e-3)}, {FN (tanh), ARG(-5.0e-01,4.71273424736769097620e+00), RES(-2.1639524637389326009e0, -1.2715121175446603377e-3)}, {FN (tanh), ARG(-5.0e-01,-4.71273424736769097620e+00), RES(-2.1639524637389326009e0, 1.2715121175446603377e-3)}, {FN (tanh), ARG(5.0e-01,6.28284004019658492979e+00), RES(4.6211720058436229987e-1, -2.7153443992679651442e-4)}, {FN (tanh), ARG(5.0e-01,-6.28284004019658492979e+00), RES(4.6211720058436229987e-1, 2.7153443992679651442e-4)}, {FN (tanh), ARG(-5.0e-01,6.28284004019658492979e+00), RES(-4.6211720058436229987e-1, -2.7153443992679651442e-4)}, {FN (tanh), ARG(-5.0e-01,-6.28284004019658492979e+00), RES(-4.6211720058436229987e-1, 2.7153443992679651442e-4)}, {FN (tanh), ARG(5.0e-01,6.28353057416258753420e+00), RES(4.6211720058436229974e-1, 2.7153443992641126612e-4)}, {FN (tanh), ARG(5.0e-01,-6.28353057416258753420e+00), RES(4.6211720058436229974e-1, -2.7153443992641126612e-4)}, {FN (tanh), ARG(-5.0e-01,6.28353057416258753420e+00), RES(-4.6211720058436229974e-1, 2.7153443992641126612e-4)}, {FN (tanh), ARG(-5.0e-01,-6.28353057416258753420e+00), RES(-4.6211720058436229974e-1, -2.7153443992641126612e-4)}, {FN (tanh), ARG(5.0e-01,9.42443269378637893396e+00), RES(4.6211720058436229968e-1, -2.7153443992619432056e-4)}, {FN (tanh), ARG(5.0e-01,-9.42443269378637893396e+00), RES(4.6211720058436229968e-1, 2.7153443992619432056e-4)}, {FN (tanh), ARG(-5.0e-01,9.42443269378637893396e+00), RES(-4.6211720058436229968e-1, -2.7153443992619432056e-4)}, {FN (tanh), ARG(-5.0e-01,-9.42443269378637893396e+00), RES(-4.6211720058436229968e-1, 2.7153443992619432056e-4)}, {FN (tanh), ARG(5.0e-01,9.42512322775237976202e+00), RES(4.6211720058436229949e-1, 2.7153443992561644811e-4)}, {FN (tanh), ARG(5.0e-01,-9.42512322775237976202e+00), RES(4.6211720058436229949e-1, -2.7153443992561644811e-4)}, {FN (tanh), ARG(-5.0e-01,9.42512322775237976202e+00), RES(-4.6211720058436229949e-1, 2.7153443992561644811e-4)}, {FN (tanh), ARG(-5.0e-01,-9.42512322775237976202e+00), RES(-4.6211720058436229949e-1, -2.7153443992561644811e-4)}, {FN (tanh), ARG(1.0e+00,-3.45266983001243932001e-04), RES(7.6159419408485704836e-1, -1.4500326960274960880e-4)}, {FN (tanh), ARG(1.0e+00,3.45266983001243932001e-04), RES(7.6159419408485704836e-1, 1.4500326960274960880e-4)}, {FN (tanh), ARG(-1.0e+00,-3.45266983001243932001e-04), RES(-7.6159419408485704836e-1, -1.4500326960274960880e-4)}, {FN (tanh), ARG(-1.0e+00,3.45266983001243932001e-04), RES(-7.6159419408485704836e-1, 1.4500326960274960880e-4)}, {FN (tanh), ARG(1.0e+00,1.57045105981189525579e+00), RES(1.3130351721648674823e0, 2.4999454374276273814e-4)}, {FN (tanh), ARG(1.0e+00,-1.57045105981189525579e+00), RES(1.3130351721648674823e0, -2.4999454374276273814e-4)}, {FN (tanh), ARG(-1.0e+00,1.57045105981189525579e+00), RES(-1.3130351721648674823e0, 2.4999454374276273814e-4)}, {FN (tanh), ARG(-1.0e+00,-1.57045105981189525579e+00), RES(-1.3130351721648674823e0, -2.4999454374276273814e-4)}, {FN (tanh), ARG(1.0e+00,1.57114159377789786021e+00), RES(1.3130351721648674824e0, -2.4999454374267406620e-4)}, {FN (tanh), ARG(1.0e+00,-1.57114159377789786021e+00), RES(1.3130351721648674824e0, 2.4999454374267406620e-4)}, {FN (tanh), ARG(-1.0e+00,1.57114159377789786021e+00), RES(-1.3130351721648674824e0, -2.4999454374267406620e-4)}, {FN (tanh), ARG(-1.0e+00,-1.57114159377789786021e+00), RES(-1.3130351721648674824e0, 2.4999454374267406620e-4)}, {FN (tanh), ARG(1.0e+00,3.14124738660679181379e+00), RES(7.6159419408485704840e-1, -1.4500326960282551519e-4)}, {FN (tanh), ARG(1.0e+00,-3.14124738660679181379e+00), RES(7.6159419408485704840e-1, 1.4500326960282551519e-4)}, {FN (tanh), ARG(-1.0e+00,3.14124738660679181379e+00), RES(-7.6159419408485704840e-1, -1.4500326960282551519e-4)}, {FN (tanh), ARG(-1.0e+00,-3.14124738660679181379e+00), RES(-7.6159419408485704840e-1, 1.4500326960282551519e-4)}, {FN (tanh), ARG(1.0e+00,3.14193792057279441821e+00), RES(7.6159419408485704835e-1, 1.4500326960272265115e-4)}, {FN (tanh), ARG(1.0e+00,-3.14193792057279441821e+00), RES(7.6159419408485704835e-1, -1.4500326960272265115e-4)}, {FN (tanh), ARG(-1.0e+00,3.14193792057279441821e+00), RES(-7.6159419408485704835e-1, 1.4500326960272265115e-4)}, {FN (tanh), ARG(-1.0e+00,-3.14193792057279441821e+00), RES(-7.6159419408485704835e-1, -1.4500326960272265115e-4)}, {FN (tanh), ARG(1.0e+00,4.71204371340168837179e+00), RES(1.3130351721648674822e0, 2.4999454374285141007e-4)}, {FN (tanh), ARG(1.0e+00,-4.71204371340168837179e+00), RES(1.3130351721648674822e0, -2.4999454374285141007e-4)}, {FN (tanh), ARG(-1.0e+00,4.71204371340168837179e+00), RES(-1.3130351721648674822e0, 2.4999454374285141007e-4)}, {FN (tanh), ARG(-1.0e+00,-4.71204371340168837179e+00), RES(-1.3130351721648674822e0, -2.4999454374285141007e-4)}, {FN (tanh), ARG(1.0e+00,4.71273424736769097620e+00), RES(1.3130351721648674825e0, -2.4999454374258539427e-4)}, {FN (tanh), ARG(1.0e+00,-4.71273424736769097620e+00), RES(1.3130351721648674825e0, 2.4999454374258539427e-4)}, {FN (tanh), ARG(-1.0e+00,4.71273424736769097620e+00), RES(-1.3130351721648674825e0, -2.4999454374258539427e-4)}, {FN (tanh), ARG(-1.0e+00,-4.71273424736769097620e+00), RES(-1.3130351721648674825e0, 2.4999454374258539427e-4)}, {FN (tanh), ARG(1.0e+00,6.28284004019658492979e+00), RES(7.6159419408485704843e-1, -1.4500326960287694721e-4)}, {FN (tanh), ARG(1.0e+00,-6.28284004019658492979e+00), RES(7.6159419408485704843e-1, 1.4500326960287694721e-4)}, {FN (tanh), ARG(-1.0e+00,6.28284004019658492979e+00), RES(-7.6159419408485704843e-1, -1.4500326960287694721e-4)}, {FN (tanh), ARG(-1.0e+00,-6.28284004019658492979e+00), RES(-7.6159419408485704843e-1, 1.4500326960287694721e-4)}, {FN (tanh), ARG(1.0e+00,6.28353057416258753420e+00), RES(7.6159419408485704832e-1, 1.4500326960267121913e-4)}, {FN (tanh), ARG(1.0e+00,-6.28353057416258753420e+00), RES(7.6159419408485704832e-1, -1.4500326960267121913e-4)}, {FN (tanh), ARG(-1.0e+00,6.28353057416258753420e+00), RES(-7.6159419408485704832e-1, 1.4500326960267121913e-4)}, {FN (tanh), ARG(-1.0e+00,-6.28353057416258753420e+00), RES(-7.6159419408485704832e-1, -1.4500326960267121913e-4)}, {FN (tanh), ARG(1.0e+00,9.42443269378637893396e+00), RES(7.6159419408485704826e-1, -1.4500326960255536711e-4)}, {FN (tanh), ARG(1.0e+00,-9.42443269378637893396e+00), RES(7.6159419408485704826e-1, 1.4500326960255536711e-4)}, {FN (tanh), ARG(-1.0e+00,9.42443269378637893396e+00), RES(-7.6159419408485704826e-1, -1.4500326960255536711e-4)}, {FN (tanh), ARG(-1.0e+00,-9.42443269378637893396e+00), RES(-7.6159419408485704826e-1, 1.4500326960255536711e-4)}, {FN (tanh), ARG(1.0e+00,9.42512322775237976202e+00), RES(7.6159419408485704810e-1, 1.450032696022467750e-4)}, {FN (tanh), ARG(1.0e+00,-9.42512322775237976202e+00), RES(7.6159419408485704810e-1, -1.450032696022467750e-4)}, {FN (tanh), ARG(-1.0e+00,9.42512322775237976202e+00), RES(-7.6159419408485704810e-1, 1.450032696022467750e-4)}, {FN (tanh), ARG(-1.0e+00,-9.42512322775237976202e+00), RES(-7.6159419408485704810e-1, -1.450032696022467750e-4)}, {FN (tanh), ARG(2.0e+00,-3.45266983001243932001e-04), RES(9.6402758819508310556e-1, -2.4393395410435306874e-5)}, {FN (tanh), ARG(2.0e+00,3.45266983001243932001e-04), RES(9.6402758819508310556e-1, 2.4393395410435306874e-5)}, {FN (tanh), ARG(-2.0e+00,-3.45266983001243932001e-04), RES(-9.6402758819508310556e-1, -2.4393395410435306874e-5)}, {FN (tanh), ARG(-2.0e+00,3.45266983001243932001e-04), RES(-9.6402758819508310556e-1, 2.4393395410435306874e-5)}, {FN (tanh), ARG(2.0e+00,1.57045105981189525579e+00), RES(1.0373147113268752620e0, 2.6247825506572821595e-5)}, {FN (tanh), ARG(2.0e+00,-1.57045105981189525579e+00), RES(1.0373147113268752620e0, -2.6247825506572821595e-5)}, {FN (tanh), ARG(-2.0e+00,1.57045105981189525579e+00), RES(-1.0373147113268752620e0, 2.6247825506572821595e-5)}, {FN (tanh), ARG(-2.0e+00,-1.57045105981189525579e+00), RES(-1.0373147113268752620e0, -2.6247825506572821595e-5)}, {FN (tanh), ARG(2.0e+00,1.57114159377789786021e+00), RES(1.0373147113268752620e0, -2.6247825506563511609e-5)}, {FN (tanh), ARG(2.0e+00,-1.57114159377789786021e+00), RES(1.0373147113268752620e0, 2.6247825506563511609e-5)}, {FN (tanh), ARG(-2.0e+00,1.57114159377789786021e+00), RES(-1.0373147113268752620e0, -2.6247825506563511609e-5)}, {FN (tanh), ARG(-2.0e+00,-1.57114159377789786021e+00), RES(-1.0373147113268752620e0, 2.6247825506563511609e-5)}, {FN (tanh), ARG(2.0e+00,3.14124738660679181379e+00), RES(9.6402758819508310557e-1, -2.4393395410448076340e-5)}, {FN (tanh), ARG(2.0e+00,-3.14124738660679181379e+00), RES(9.6402758819508310557e-1, 2.4393395410448076340e-5)}, {FN (tanh), ARG(-2.0e+00,3.14124738660679181379e+00), RES(-9.6402758819508310557e-1, -2.4393395410448076340e-5)}, {FN (tanh), ARG(-2.0e+00,-3.14124738660679181379e+00), RES(-9.6402758819508310557e-1, 2.4393395410448076340e-5)}, {FN (tanh), ARG(2.0e+00,3.14193792057279441821e+00), RES(9.6402758819508310556e-1, 2.4393395410430771882e-5)}, {FN (tanh), ARG(2.0e+00,-3.14193792057279441821e+00), RES(9.6402758819508310556e-1, -2.4393395410430771882e-5)}, {FN (tanh), ARG(-2.0e+00,3.14193792057279441821e+00), RES(-9.6402758819508310556e-1, 2.4393395410430771882e-5)}, {FN (tanh), ARG(-2.0e+00,-3.14193792057279441821e+00), RES(-9.6402758819508310556e-1, -2.4393395410430771882e-5)}, {FN (tanh), ARG(2.0e+00,4.71204371340168837179e+00), RES(1.0373147113268752620e0, 2.6247825506582131582e-5)}, {FN (tanh), ARG(2.0e+00,-4.71204371340168837179e+00), RES(1.0373147113268752620e0, -2.6247825506582131582e-5)}, {FN (tanh), ARG(-2.0e+00,4.71204371340168837179e+00), RES(-1.0373147113268752620e0, 2.6247825506582131582e-5)}, {FN (tanh), ARG(-2.0e+00,-4.71204371340168837179e+00), RES(-1.0373147113268752620e0, -2.6247825506582131582e-5)}, {FN (tanh), ARG(2.0e+00,4.71273424736769097620e+00), RES(1.0373147113268752620e0, -2.6247825506554201622e-5)}, {FN (tanh), ARG(2.0e+00,-4.71273424736769097620e+00), RES(1.0373147113268752620e0, 2.6247825506554201622e-5)}, {FN (tanh), ARG(-2.0e+00,4.71273424736769097620e+00), RES(-1.0373147113268752620e0, -2.6247825506554201622e-5)}, {FN (tanh), ARG(-2.0e+00,-4.71273424736769097620e+00), RES(-1.0373147113268752620e0, 2.6247825506554201622e-5)}, {FN (tanh), ARG(2.0e+00,6.28284004019658492979e+00), RES(9.6402758819508310558e-1, -2.4393395410456728569e-5)}, {FN (tanh), ARG(2.0e+00,-6.28284004019658492979e+00), RES(9.6402758819508310558e-1, 2.4393395410456728569e-5)}, {FN (tanh), ARG(-2.0e+00,6.28284004019658492979e+00), RES(-9.6402758819508310558e-1, -2.4393395410456728569e-5)}, {FN (tanh), ARG(-2.0e+00,-6.28284004019658492979e+00), RES(-9.6402758819508310558e-1, 2.4393395410456728569e-5)}, {FN (tanh), ARG(2.0e+00,6.28353057416258753420e+00), RES(9.6402758819508310555e-1, 2.4393395410422119654e-5)}, {FN (tanh), ARG(2.0e+00,-6.28353057416258753420e+00), RES(9.6402758819508310555e-1, -2.4393395410422119654e-5)}, {FN (tanh), ARG(-2.0e+00,6.28353057416258753420e+00), RES(-9.6402758819508310555e-1, 2.4393395410422119654e-5)}, {FN (tanh), ARG(-2.0e+00,-6.28353057416258753420e+00), RES(-9.6402758819508310555e-1, -2.4393395410422119654e-5)}, {FN (tanh), ARG(2.0e+00,9.42443269378637893396e+00), RES(9.6402758819508310554e-1, -2.4393395410402630273e-5)}, {FN (tanh), ARG(2.0e+00,-9.42443269378637893396e+00), RES(9.6402758819508310554e-1, 2.4393395410402630273e-5)}, {FN (tanh), ARG(-2.0e+00,9.42443269378637893396e+00), RES(-9.6402758819508310554e-1, -2.4393395410402630273e-5)}, {FN (tanh), ARG(-2.0e+00,-9.42443269378637893396e+00), RES(-9.6402758819508310554e-1, 2.4393395410402630273e-5)}, {FN (tanh), ARG(2.0e+00,9.42512322775237976202e+00), RES(9.6402758819508310550e-1, 2.439339541035071690e-5)}, {FN (tanh), ARG(2.0e+00,-9.42512322775237976202e+00), RES(9.6402758819508310550e-1, -2.439339541035071690e-5)}, {FN (tanh), ARG(-2.0e+00,9.42512322775237976202e+00), RES(-9.6402758819508310550e-1, 2.439339541035071690e-5)}, {FN (tanh), ARG(-2.0e+00,-9.42512322775237976202e+00), RES(-9.6402758819508310550e-1, -2.439339541035071690e-5)}, {FN (arcsinh), ARG(0.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (arcsinh), ARG(0.0e+00,1.19209289550781250e-07), RES(0, 1.1920928955078153234e-7)}, {FN (arcsinh), ARG(0.0e+00,-1.19209289550781250e-07), RES(0, -1.1920928955078153234e-7)}, {FN (arcsinh), ARG(0.0e+00,5.0e-01), RES(0, 5.2359877559829887308e-1)}, {FN (arcsinh), ARG(0.0e+00,-5.0e-01), RES(0, -5.2359877559829887308e-1)}, {FN (arcsinh), ARG(0.0e+00,1.0e+00), RES(0, 1.5707963267948966192e0)}, {FN (arcsinh), ARG(0.0e+00,-1.0e+00), RES(0, -1.5707963267948966192e0)}, {FN (arcsinh), ARG(0.0e+00,2.0e+00), RES(1.3169578969248167086e0, 1.5707963267948966192e0)}, {FN (arcsinh), ARG(0.0e+00,-2.0e+00), RES(-1.3169578969248167086e0, -1.5707963267948966192e0)}, {FN (arcsinh), ARG(0.0e+00,8.3886080e+06), RES(1.6635532333438683873e1, 1.5707963267948966192e0)}, {FN (arcsinh), ARG(0.0e+00,-8.3886080e+06), RES(-1.6635532333438683873e1, -1.5707963267948966192e0)}, {FN (arcsinh), ARG(1.19209289550781250e-07,0.0e+00), RES(1.1920928955078096766e-7, 0.0)}, {FN (arcsinh), ARG(-1.19209289550781250e-07,0.0e+00), RES(-1.1920928955078096766e-7, 0.0)}, {FN (arcsinh), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(1.1920928955078181469e-7, 1.1920928955078068531e-7)}, {FN (arcsinh), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.1920928955078181469e-7, -1.1920928955078068531e-7)}, {FN (arcsinh), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(-1.1920928955078181469e-7, 1.1920928955078068531e-7)}, {FN (arcsinh), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(-1.1920928955078181469e-7, -1.1920928955078068531e-7)}, {FN (arcsinh), ARG(1.19209289550781250e-07,5.0e-01), RES(1.3765103082409432364e-7, 5.2359877559829340332e-1)}, {FN (arcsinh), ARG(1.19209289550781250e-07,-5.0e-01), RES(1.3765103082409432364e-7, -5.2359877559829340332e-1)}, {FN (arcsinh), ARG(-1.19209289550781250e-07,5.0e-01), RES(-1.3765103082409432364e-7, 5.2359877559829340332e-1)}, {FN (arcsinh), ARG(-1.19209289550781250e-07,-5.0e-01), RES(-1.3765103082409432364e-7, -5.2359877559829340332e-1)}, {FN (arcsinh), ARG(1.19209289550781250e-07,1.0e+00), RES(3.4526698643116312881e-4, 1.5704510598153252947e0)}, {FN (arcsinh), ARG(1.19209289550781250e-07,-1.0e+00), RES(3.4526698643116312881e-4, -1.5704510598153252947e0)}, {FN (arcsinh), ARG(-1.19209289550781250e-07,1.0e+00), RES(-3.4526698643116312881e-4, 1.5704510598153252947e0)}, {FN (arcsinh), ARG(-1.19209289550781250e-07,-1.0e+00), RES(-3.4526698643116312881e-4, -1.5704510598153252947e0)}, {FN (arcsinh), ARG(1.19209289550781250e-07,2.0e+00), RES(1.3169578969248194435e0, 1.5707962579693812072e0)}, {FN (arcsinh), ARG(1.19209289550781250e-07,-2.0e+00), RES(1.3169578969248194435e0, -1.5707962579693812072e0)}, {FN (arcsinh), ARG(-1.19209289550781250e-07,2.0e+00), RES(-1.3169578969248194435e0, 1.5707962579693812072e0)}, {FN (arcsinh), ARG(-1.19209289550781250e-07,-2.0e+00), RES(-1.3169578969248194435e0, -1.5707962579693812072e0)}, {FN (arcsinh), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.6635532333438683873e1, 1.5707963267948824084e0)}, {FN (arcsinh), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.6635532333438683873e1, -1.5707963267948824084e0)}, {FN (arcsinh), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(-1.6635532333438683873e1, 1.5707963267948824084e0)}, {FN (arcsinh), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(-1.6635532333438683873e1, -1.5707963267948824084e0)}, {FN (arcsinh), ARG(5.0e-01,0.0e+00), RES(4.8121182505960344750e-1, 0.0)}, {FN (arcsinh), ARG(-5.0e-01,0.0e+00), RES(-4.8121182505960344750e-1, 0.0)}, {FN (arcsinh), ARG(5.0e-01,1.19209289550781250e-07), RES(4.8121182505960598961e-1, 1.0662402999400097805e-7)}, {FN (arcsinh), ARG(5.0e-01,-1.19209289550781250e-07), RES(4.8121182505960598961e-1, -1.0662402999400097805e-7)}, {FN (arcsinh), ARG(-5.0e-01,1.19209289550781250e-07), RES(-4.8121182505960598961e-1, 1.0662402999400097805e-7)}, {FN (arcsinh), ARG(-5.0e-01,-1.19209289550781250e-07), RES(-4.8121182505960598961e-1, -1.0662402999400097805e-7)}, {FN (arcsinh), ARG(5.0e-01,5.0e-01), RES(5.3063753095251782602e-1, 4.5227844715119068206e-1)}, {FN (arcsinh), ARG(5.0e-01,-5.0e-01), RES(5.3063753095251782602e-1, -4.5227844715119068206e-1)}, {FN (arcsinh), ARG(-5.0e-01,5.0e-01), RES(-5.3063753095251782602e-1, 4.5227844715119068206e-1)}, {FN (arcsinh), ARG(-5.0e-01,-5.0e-01), RES(-5.3063753095251782602e-1, -4.5227844715119068206e-1)}, {FN (arcsinh), ARG(5.0e-01,1.0e+00), RES(7.3285767597364526089e-1, 8.9590748120889023907e-1)}, {FN (arcsinh), ARG(5.0e-01,-1.0e+00), RES(7.3285767597364526089e-1, -8.9590748120889023907e-1)}, {FN (arcsinh), ARG(-5.0e-01,1.0e+00), RES(-7.3285767597364526089e-1, 8.9590748120889023907e-1)}, {FN (arcsinh), ARG(-5.0e-01,-1.0e+00), RES(-7.3285767597364526089e-1, -8.9590748120889023907e-1)}, {FN (arcsinh), ARG(5.0e-01,2.0e+00), RES(1.3618009008578457882e0, 1.2930420702371826591e0)}, {FN (arcsinh), ARG(5.0e-01,-2.0e+00), RES(1.3618009008578457882e0, -1.2930420702371826591e0)}, {FN (arcsinh), ARG(-5.0e-01,2.0e+00), RES(-1.3618009008578457882e0, 1.2930420702371826591e0)}, {FN (arcsinh), ARG(-5.0e-01,-2.0e+00), RES(-1.3618009008578457882e0, -1.2930420702371826591e0)}, {FN (arcsinh), ARG(5.0e-01,8.3886080e+06), RES(1.6635532333438685650e1, 1.5707962671902518438e0)}, {FN (arcsinh), ARG(5.0e-01,-8.3886080e+06), RES(1.6635532333438685650e1, -1.5707962671902518438e0)}, {FN (arcsinh), ARG(-5.0e-01,8.3886080e+06), RES(-1.6635532333438685650e1, 1.5707962671902518438e0)}, {FN (arcsinh), ARG(-5.0e-01,-8.3886080e+06), RES(-1.6635532333438685650e1, -1.5707962671902518438e0)}, {FN (arcsinh), ARG(1.0e+00,0.0e+00), RES(8.8137358701954302523e-1, 0.0)}, {FN (arcsinh), ARG(-1.0e+00,0.0e+00), RES(-8.8137358701954302523e-1, 0.0)}, {FN (arcsinh), ARG(1.0e+00,1.19209289550781250e-07), RES(8.8137358701954553738e-1, 8.4293697021788013662e-8)}, {FN (arcsinh), ARG(1.0e+00,-1.19209289550781250e-07), RES(8.8137358701954553738e-1, -8.4293697021788013662e-8)}, {FN (arcsinh), ARG(-1.0e+00,1.19209289550781250e-07), RES(-8.8137358701954553738e-1, 8.4293697021788013662e-8)}, {FN (arcsinh), ARG(-1.0e+00,-1.19209289550781250e-07), RES(-8.8137358701954553738e-1, -8.4293697021788013662e-8)}, {FN (arcsinh), ARG(1.0e+00,5.0e-01), RES(9.2613303135018242455e-1, 3.4943906285721329363e-1)}, {FN (arcsinh), ARG(1.0e+00,-5.0e-01), RES(9.2613303135018242455e-1, -3.4943906285721329363e-1)}, {FN (arcsinh), ARG(-1.0e+00,5.0e-01), RES(-9.2613303135018242455e-1, 3.4943906285721329363e-1)}, {FN (arcsinh), ARG(-1.0e+00,-5.0e-01), RES(-9.2613303135018242455e-1, -3.4943906285721329363e-1)}, {FN (arcsinh), ARG(1.0e+00,1.0e+00), RES(1.0612750619050356520e0, 6.6623943249251525510e-1)}, {FN (arcsinh), ARG(1.0e+00,-1.0e+00), RES(1.0612750619050356520e0, -6.6623943249251525510e-1)}, {FN (arcsinh), ARG(-1.0e+00,1.0e+00), RES(-1.0612750619050356520e0, 6.6623943249251525510e-1)}, {FN (arcsinh), ARG(-1.0e+00,-1.0e+00), RES(-1.0612750619050356520e0, -6.6623943249251525510e-1)}, {FN (arcsinh), ARG(1.0e+00,2.0e+00), RES(1.4693517443681852733e0, 1.0634400235777520562e0)}, {FN (arcsinh), ARG(1.0e+00,-2.0e+00), RES(1.4693517443681852733e0, -1.0634400235777520562e0)}, {FN (arcsinh), ARG(-1.0e+00,2.0e+00), RES(-1.4693517443681852733e0, 1.0634400235777520562e0)}, {FN (arcsinh), ARG(-1.0e+00,-2.0e+00), RES(-1.4693517443681852733e0, -1.0634400235777520562e0)}, {FN (arcsinh), ARG(1.0e+00,8.3886080e+06), RES(1.6635532333438690979e1, 1.5707962075856070684e0)}, {FN (arcsinh), ARG(1.0e+00,-8.3886080e+06), RES(1.6635532333438690979e1, -1.5707962075856070684e0)}, {FN (arcsinh), ARG(-1.0e+00,8.3886080e+06), RES(-1.6635532333438690979e1, 1.5707962075856070684e0)}, {FN (arcsinh), ARG(-1.0e+00,-8.3886080e+06), RES(-1.6635532333438690979e1, -1.5707962075856070684e0)}, {FN (arcsinh), ARG(2.0e+00,0.0e+00), RES(1.4436354751788103425e0, 0.0)}, {FN (arcsinh), ARG(-2.0e+00,0.0e+00), RES(-1.4436354751788103425e0, 0.0)}, {FN (arcsinh), ARG(2.0e+00,1.19209289550781250e-07), RES(1.4436354751788116136e0, 5.3312014997000413263e-8)}, {FN (arcsinh), ARG(2.0e+00,-1.19209289550781250e-07), RES(1.4436354751788116136e0, -5.3312014997000413263e-8)}, {FN (arcsinh), ARG(-2.0e+00,1.19209289550781250e-07), RES(-1.4436354751788116136e0, 5.3312014997000413263e-8)}, {FN (arcsinh), ARG(-2.0e+00,-1.19209289550781250e-07), RES(-1.4436354751788116136e0, -5.3312014997000413263e-8)}, {FN (arcsinh), ARG(2.0e+00,5.0e-01), RES(1.4657153519472905218e0, 2.2101863562288385890e-1)}, {FN (arcsinh), ARG(2.0e+00,-5.0e-01), RES(1.4657153519472905218e0, -2.2101863562288385890e-1)}, {FN (arcsinh), ARG(-2.0e+00,5.0e-01), RES(-1.4657153519472905218e0, 2.2101863562288385890e-1)}, {FN (arcsinh), ARG(-2.0e+00,-5.0e-01), RES(-1.4657153519472905218e0, -2.2101863562288385890e-1)}, {FN (arcsinh), ARG(2.0e+00,1.0e+00), RES(1.5285709194809981613e0, 4.2707858639247612548e-1)}, {FN (arcsinh), ARG(2.0e+00,-1.0e+00), RES(1.5285709194809981613e0, -4.2707858639247612548e-1)}, {FN (arcsinh), ARG(-2.0e+00,1.0e+00), RES(-1.5285709194809981613e0, 4.2707858639247612548e-1)}, {FN (arcsinh), ARG(-2.0e+00,-1.0e+00), RES(-1.5285709194809981613e0, -4.2707858639247612548e-1)}, {FN (arcsinh), ARG(2.0e+00,2.0e+00), RES(1.7343245214879664480e0, 7.5424914469804604071e-1)}, {FN (arcsinh), ARG(2.0e+00,-2.0e+00), RES(1.7343245214879664480e0, -7.5424914469804604071e-1)}, {FN (arcsinh), ARG(-2.0e+00,2.0e+00), RES(-1.7343245214879664480e0, 7.5424914469804604071e-1)}, {FN (arcsinh), ARG(-2.0e+00,-2.0e+00), RES(-1.7343245214879664480e0, -7.5424914469804604071e-1)}, {FN (arcsinh), ARG(2.0e+00,8.3886080e+06), RES(1.6635532333438712295e1, 1.5707960883763175177e0)}, {FN (arcsinh), ARG(2.0e+00,-8.3886080e+06), RES(1.6635532333438712295e1, -1.5707960883763175177e0)}, {FN (arcsinh), ARG(-2.0e+00,8.3886080e+06), RES(-1.6635532333438712295e1, 1.5707960883763175177e0)}, {FN (arcsinh), ARG(-2.0e+00,-8.3886080e+06), RES(-1.6635532333438712295e1, -1.5707960883763175177e0)}, {FN (arcsinh), ARG(8.3886080e+06,0.0e+00), RES(1.6635532333438690979e1, 0.0)}, {FN (arcsinh), ARG(-8.3886080e+06,0.0e+00), RES(-1.6635532333438690979e1, 0.0)}, {FN (arcsinh), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.6635532333438690979e1, 1.4210854715201902743e-14)}, {FN (arcsinh), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.6635532333438690979e1, -1.4210854715201902743e-14)}, {FN (arcsinh), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(-1.6635532333438690979e1, 1.4210854715201902743e-14)}, {FN (arcsinh), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(-1.6635532333438690979e1, -1.4210854715201902743e-14)}, {FN (arcsinh), ARG(8.3886080e+06,5.0e-01), RES(1.6635532333438692755e1, 5.9604644775390130897e-8)}, {FN (arcsinh), ARG(8.3886080e+06,-5.0e-01), RES(1.6635532333438692755e1, -5.9604644775390130897e-8)}, {FN (arcsinh), ARG(-8.3886080e+06,5.0e-01), RES(-1.6635532333438692755e1, 5.9604644775390130897e-8)}, {FN (arcsinh), ARG(-8.3886080e+06,-5.0e-01), RES(-1.6635532333438692755e1, -5.9604644775390130897e-8)}, {FN (arcsinh), ARG(8.3886080e+06,1.0e+00), RES(1.6635532333438698084e1, 1.1920928955077983828e-7)}, {FN (arcsinh), ARG(8.3886080e+06,-1.0e+00), RES(1.6635532333438698084e1, -1.1920928955077983828e-7)}, {FN (arcsinh), ARG(-8.3886080e+06,1.0e+00), RES(-1.6635532333438698084e1, 1.1920928955077983828e-7)}, {FN (arcsinh), ARG(-8.3886080e+06,-1.0e+00), RES(-1.6635532333438698084e1, -1.1920928955077983828e-7)}, {FN (arcsinh), ARG(8.3886080e+06,2.0e+00), RES(1.663553233343871940e1, 2.3841857910155628843e-7)}, {FN (arcsinh), ARG(8.3886080e+06,-2.0e+00), RES(1.663553233343871940e1, -2.3841857910155628843e-7)}, {FN (arcsinh), ARG(-8.3886080e+06,2.0e+00), RES(-1.663553233343871940e1, 2.3841857910155628843e-7)}, {FN (arcsinh), ARG(-8.3886080e+06,-2.0e+00), RES(-1.663553233343871940e1, -2.3841857910155628843e-7)}, {FN (arcsinh), ARG(8.3886080e+06,8.3886080e+06), RES(1.6982105923718660081e1, 7.8539816339744653326e-1)}, {FN (arcsinh), ARG(8.3886080e+06,-8.3886080e+06), RES(1.6982105923718660081e1, -7.8539816339744653326e-1)}, {FN (arcsinh), ARG(-8.3886080e+06,8.3886080e+06), RES(-1.6982105923718660081e1, 7.8539816339744653326e-1)}, {FN (arcsinh), ARG(-8.3886080e+06,-8.3886080e+06), RES(-1.6982105923718660081e1, -7.8539816339744653326e-1)}, {FN (arccosh), ARG(0.0e+00,0.0e+00), RES(0, 1.5707963267948966192e0)}, {FN (arccosh), ARG(0.0e+00,1.19209289550781250e-07), RES(1.1920928955078096766e-7, 1.5707963267948966192e0)}, {FN (arccosh), ARG(0.0e+00,-1.19209289550781250e-07), RES(1.1920928955078096766e-7, -1.5707963267948966192e0)}, {FN (arccosh), ARG(0.0e+00,5.0e-01), RES(4.8121182505960344750e-1, 1.5707963267948966192e0)}, {FN (arccosh), ARG(0.0e+00,-5.0e-01), RES(4.8121182505960344750e-1, -1.5707963267948966192e0)}, {FN (arccosh), ARG(0.0e+00,1.0e+00), RES(8.8137358701954302523e-1, 1.5707963267948966192e0)}, {FN (arccosh), ARG(0.0e+00,-1.0e+00), RES(8.8137358701954302523e-1, -1.5707963267948966192e0)}, {FN (arccosh), ARG(0.0e+00,2.0e+00), RES(1.4436354751788103425e0, 1.5707963267948966192e0)}, {FN (arccosh), ARG(0.0e+00,-2.0e+00), RES(1.4436354751788103425e0, -1.5707963267948966192e0)}, {FN (arccosh), ARG(0.0e+00,8.3886080e+06), RES(1.6635532333438690979e1, 1.5707963267948966192e0)}, {FN (arccosh), ARG(0.0e+00,-8.3886080e+06), RES(1.6635532333438690979e1, -1.5707963267948966192e0)}, {FN (arccosh), ARG(1.19209289550781250e-07,0.0e+00), RES(0, 1.5707962075856070684e0)}, {FN (arccosh), ARG(-1.19209289550781250e-07,0.0e+00), RES(0, 1.570796446004186170e0)}, {FN (arccosh), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(1.1920928955078181469e-7, 1.5707962075856070685e0)}, {FN (arccosh), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.1920928955078181469e-7, -1.5707962075856070685e0)}, {FN (arccosh), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(1.1920928955078181469e-7, 1.570796446004186170e0)}, {FN (arccosh), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.1920928955078181469e-7, -1.570796446004186170e0)}, {FN (arccosh), ARG(1.19209289550781250e-07,5.0e-01), RES(4.8121182505960598961e-1, 1.5707962201708666252e0)}, {FN (arccosh), ARG(1.19209289550781250e-07,-5.0e-01), RES(4.8121182505960598961e-1, -1.5707962201708666252e0)}, {FN (arccosh), ARG(-1.19209289550781250e-07,5.0e-01), RES(4.8121182505960598961e-1, 1.5707964334189266132e0)}, {FN (arccosh), ARG(-1.19209289550781250e-07,-5.0e-01), RES(4.8121182505960598961e-1, -1.5707964334189266132e0)}, {FN (arccosh), ARG(1.19209289550781250e-07,1.0e+00), RES(8.8137358701954553738e-1, 1.5707962425011995974e0)}, {FN (arccosh), ARG(1.19209289550781250e-07,-1.0e+00), RES(8.8137358701954553738e-1, -1.5707962425011995974e0)}, {FN (arccosh), ARG(-1.19209289550781250e-07,1.0e+00), RES(8.8137358701954553738e-1, 1.5707964110885936410e0)}, {FN (arccosh), ARG(-1.19209289550781250e-07,-1.0e+00), RES(8.8137358701954553738e-1, -1.5707964110885936410e0)}, {FN (arccosh), ARG(1.19209289550781250e-07,2.0e+00), RES(1.4436354751788116136e0, 1.5707962734828816222e0)}, {FN (arccosh), ARG(1.19209289550781250e-07,-2.0e+00), RES(1.4436354751788116136e0, -1.5707962734828816222e0)}, {FN (arccosh), ARG(-1.19209289550781250e-07,2.0e+00), RES(1.4436354751788116136e0, 1.5707963801069116162e0)}, {FN (arccosh), ARG(-1.19209289550781250e-07,-2.0e+00), RES(1.4436354751788116136e0, -1.5707963801069116162e0)}, {FN (arccosh), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.6635532333438690979e1, 1.5707963267948824084e0)}, {FN (arccosh), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.6635532333438690979e1, -1.5707963267948824084e0)}, {FN (arccosh), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(1.6635532333438690979e1, 1.5707963267949108301e0)}, {FN (arccosh), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(1.6635532333438690979e1, -1.5707963267949108301e0)}, {FN (arccosh), ARG(5.0e-01,0.0e+00), RES(0, 1.0471975511965977462e0)}, {FN (arccosh), ARG(-5.0e-01,0.0e+00), RES(0, 2.0943951023931954923e0)}, {FN (arccosh), ARG(5.0e-01,1.19209289550781250e-07), RES(1.3765103082409432364e-7, 1.0471975511966032159e0)}, {FN (arccosh), ARG(5.0e-01,-1.19209289550781250e-07), RES(1.3765103082409432364e-7, -1.0471975511966032159e0)}, {FN (arccosh), ARG(-5.0e-01,1.19209289550781250e-07), RES(1.3765103082409432364e-7, 2.0943951023931900225e0)}, {FN (arccosh), ARG(-5.0e-01,-1.19209289550781250e-07), RES(1.3765103082409432364e-7, -2.0943951023931900225e0)}, {FN (arccosh), ARG(5.0e-01,5.0e-01), RES(5.3063753095251782602e-1, 1.1185178796437059372e0)}, {FN (arccosh), ARG(5.0e-01,-5.0e-01), RES(5.3063753095251782602e-1, -1.1185178796437059372e0)}, {FN (arccosh), ARG(-5.0e-01,5.0e-01), RES(5.3063753095251782602e-1, 2.0230747739460873013e0)}, {FN (arccosh), ARG(-5.0e-01,-5.0e-01), RES(5.3063753095251782602e-1, -2.0230747739460873013e0)}, {FN (arccosh), ARG(5.0e-01,1.0e+00), RES(9.2613303135018242455e-1, 1.2213572639376833256e0)}, {FN (arccosh), ARG(5.0e-01,-1.0e+00), RES(9.2613303135018242455e-1, -1.2213572639376833256e0)}, {FN (arccosh), ARG(-5.0e-01,1.0e+00), RES(9.2613303135018242455e-1, 1.9202353896521099129e0)}, {FN (arccosh), ARG(-5.0e-01,-1.0e+00), RES(9.2613303135018242455e-1, -1.9202353896521099129e0)}, {FN (arccosh), ARG(5.0e-01,2.0e+00), RES(1.4657153519472905218e0, 1.3497776911720127603e0)}, {FN (arccosh), ARG(5.0e-01,-2.0e+00), RES(1.4657153519472905218e0, -1.3497776911720127603e0)}, {FN (arccosh), ARG(-5.0e-01,2.0e+00), RES(1.4657153519472905218e0, 1.7918149624177804781e0)}, {FN (arccosh), ARG(-5.0e-01,-2.0e+00), RES(1.4657153519472905218e0, -1.7918149624177804781e0)}, {FN (arccosh), ARG(5.0e-01,8.3886080e+06), RES(1.6635532333438692755e1, 1.5707962671902518438e0)}, {FN (arccosh), ARG(5.0e-01,-8.3886080e+06), RES(1.6635532333438692755e1, -1.5707962671902518438e0)}, {FN (arccosh), ARG(-5.0e-01,8.3886080e+06), RES(1.6635532333438692755e1, 1.5707963863995413946e0)}, {FN (arccosh), ARG(-5.0e-01,-8.3886080e+06), RES(1.6635532333438692755e1, -1.5707963863995413946e0)}, {FN (arccosh), ARG(1.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (arccosh), ARG(-1.0e+00,0.0e+00), RES(0, 3.1415926535897932385e0)}, {FN (arccosh), ARG(1.0e+00,1.19209289550781250e-07), RES(3.4526698643116312881e-4, 3.4526697957132450399e-4)}, {FN (arccosh), ARG(1.0e+00,-1.19209289550781250e-07), RES(3.4526698643116312881e-4, -3.4526697957132450399e-4)}, {FN (arccosh), ARG(-1.0e+00,1.19209289550781250e-07), RES(3.4526698643116312881e-4, 3.1412473866102219140e0)}, {FN (arccosh), ARG(-1.0e+00,-1.19209289550781250e-07), RES(3.4526698643116312881e-4, -3.1412473866102219140e0)}, {FN (arccosh), ARG(1.0e+00,5.0e-01), RES(7.3285767597364526089e-1, 6.7488884558600638016e-1)}, {FN (arccosh), ARG(1.0e+00,-5.0e-01), RES(7.3285767597364526089e-1, -6.7488884558600638016e-1)}, {FN (arccosh), ARG(-1.0e+00,5.0e-01), RES(7.3285767597364526089e-1, 2.4667038080037868583e0)}, {FN (arccosh), ARG(-1.0e+00,-5.0e-01), RES(7.3285767597364526089e-1, -2.4667038080037868583e0)}, {FN (arccosh), ARG(1.0e+00,1.0e+00), RES(1.0612750619050356520e0, 9.0455689430238136413e-1)}, {FN (arccosh), ARG(1.0e+00,-1.0e+00), RES(1.0612750619050356520e0, -9.0455689430238136413e-1)}, {FN (arccosh), ARG(-1.0e+00,1.0e+00), RES(1.0612750619050356520e0, 2.2370357592874118743e0)}, {FN (arccosh), ARG(-1.0e+00,-1.0e+00), RES(1.0612750619050356520e0, -2.2370357592874118743e0)}, {FN (arccosh), ARG(1.0e+00,2.0e+00), RES(1.5285709194809981613e0, 1.1437177404024204938e0)}, {FN (arccosh), ARG(1.0e+00,-2.0e+00), RES(1.5285709194809981613e0, -1.1437177404024204938e0)}, {FN (arccosh), ARG(-1.0e+00,2.0e+00), RES(1.5285709194809981613e0, 1.9978749131873727447e0)}, {FN (arccosh), ARG(-1.0e+00,-2.0e+00), RES(1.5285709194809981613e0, -1.9978749131873727447e0)}, {FN (arccosh), ARG(1.0e+00,8.3886080e+06), RES(1.6635532333438698084e1, 1.5707962075856070685e0)}, {FN (arccosh), ARG(1.0e+00,-8.3886080e+06), RES(1.6635532333438698084e1, -1.5707962075856070685e0)}, {FN (arccosh), ARG(-1.0e+00,8.3886080e+06), RES(1.6635532333438698084e1, 1.570796446004186170e0)}, {FN (arccosh), ARG(-1.0e+00,-8.3886080e+06), RES(1.6635532333438698084e1, -1.570796446004186170e0)}, {FN (arccosh), ARG(2.0e+00,0.0e+00), RES(1.3169578969248167086e0, 0.0)}, {FN (arccosh), ARG(-2.0e+00,0.0e+00), RES(1.3169578969248167086e0, 3.1415926535897932385e0)}, {FN (arccosh), ARG(2.0e+00,1.19209289550781250e-07), RES(1.3169578969248194435e0, 6.8825515412047433504e-8)}, {FN (arccosh), ARG(2.0e+00,-1.19209289550781250e-07), RES(1.3169578969248194435e0, -6.8825515412047433504e-8)}, {FN (arccosh), ARG(-2.0e+00,1.19209289550781250e-07), RES(1.3169578969248194435e0, 3.1415925847642778264e0)}, {FN (arccosh), ARG(-2.0e+00,-1.19209289550781250e-07), RES(1.3169578969248194435e0, -3.1415925847642778264e0)}, {FN (arccosh), ARG(2.0e+00,5.0e-01), RES(1.3618009008578457882e0, 2.7775425655771396018e-1)}, {FN (arccosh), ARG(2.0e+00,-5.0e-01), RES(1.3618009008578457882e0, -2.7775425655771396018e-1)}, {FN (arccosh), ARG(-2.0e+00,5.0e-01), RES(1.3618009008578457882e0, 2.8638383970320792783e0)}, {FN (arccosh), ARG(-2.0e+00,-5.0e-01), RES(1.3618009008578457882e0, -2.8638383970320792783e0)}, {FN (arccosh), ARG(2.0e+00,1.0e+00), RES(1.4693517443681852733e0, 5.0735630321714456304e-1)}, {FN (arccosh), ARG(2.0e+00,-1.0e+00), RES(1.4693517443681852733e0, -5.0735630321714456304e-1)}, {FN (arccosh), ARG(-2.0e+00,1.0e+00), RES(1.4693517443681852733e0, 2.6342363503726486754e0)}, {FN (arccosh), ARG(-2.0e+00,-1.0e+00), RES(1.4693517443681852733e0, -2.6342363503726486754e0)}, {FN (arccosh), ARG(2.0e+00,2.0e+00), RES(1.7343245214879664480e0, 8.1654718209685057852e-1)}, {FN (arccosh), ARG(2.0e+00,-2.0e+00), RES(1.7343245214879664480e0, -8.1654718209685057852e-1)}, {FN (arccosh), ARG(-2.0e+00,2.0e+00), RES(1.7343245214879664480e0, 2.3250454714929426599e0)}, {FN (arccosh), ARG(-2.0e+00,-2.0e+00), RES(1.7343245214879664480e0, -2.3250454714929426599e0)}, {FN (arccosh), ARG(2.0e+00,8.3886080e+06), RES(1.663553233343871940e1, 1.5707960883763175177e0)}, {FN (arccosh), ARG(2.0e+00,-8.3886080e+06), RES(1.663553233343871940e1, -1.5707960883763175177e0)}, {FN (arccosh), ARG(-2.0e+00,8.3886080e+06), RES(1.663553233343871940e1, 1.5707965652134757208e0)}, {FN (arccosh), ARG(-2.0e+00,-8.3886080e+06), RES(1.663553233343871940e1, -1.5707965652134757208e0)}, {FN (arccosh), ARG(8.3886080e+06,0.0e+00), RES(1.6635532333438683873e1, 0.0)}, {FN (arccosh), ARG(-8.3886080e+06,0.0e+00), RES(1.6635532333438683873e1, 3.1415926535897932385e0)}, {FN (arccosh), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.6635532333438683873e1, 1.4210854715202104692e-14)}, {FN (arccosh), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.6635532333438683873e1, -1.4210854715202104692e-14)}, {FN (arccosh), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(1.6635532333438683873e1, 3.1415926535897790276e0)}, {FN (arccosh), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(1.6635532333438683873e1, -3.1415926535897790276e0)}, {FN (arccosh), ARG(8.3886080e+06,5.0e-01), RES(1.6635532333438685650e1, 5.9604644775390977930e-8)}, {FN (arccosh), ARG(8.3886080e+06,-5.0e-01), RES(1.6635532333438685650e1, -5.9604644775390977930e-8)}, {FN (arccosh), ARG(-8.3886080e+06,5.0e-01), RES(1.6635532333438685650e1, 3.1415925939851484631e0)}, {FN (arccosh), ARG(-8.3886080e+06,-5.0e-01), RES(1.6635532333438685650e1, -3.1415925939851484631e0)}, {FN (arccosh), ARG(8.3886080e+06,1.0e+00), RES(1.6635532333438690979e1, 1.1920928955078153234e-7)}, {FN (arccosh), ARG(8.3886080e+06,-1.0e+00), RES(1.6635532333438690979e1, -1.1920928955078153234e-7)}, {FN (arccosh), ARG(-8.3886080e+06,1.0e+00), RES(1.6635532333438690979e1, 3.1415925343805036877e0)}, {FN (arccosh), ARG(-8.3886080e+06,-1.0e+00), RES(1.6635532333438690979e1, -3.1415925343805036877e0)}, {FN (arccosh), ARG(8.3886080e+06,2.0e+00), RES(1.6635532333438712295e1, 2.3841857910155967656e-7)}, {FN (arccosh), ARG(8.3886080e+06,-2.0e+00), RES(1.6635532333438712295e1, -2.3841857910155967656e-7)}, {FN (arccosh), ARG(-8.3886080e+06,2.0e+00), RES(1.6635532333438712295e1, 3.1415924151712141369e0)}, {FN (arccosh), ARG(-8.3886080e+06,-2.0e+00), RES(1.6635532333438712295e1, -3.1415924151712141369e0)}, {FN (arccosh), ARG(8.3886080e+06,8.3886080e+06), RES(1.6982105923718660081e1, 7.8539816339745008597e-1)}, {FN (arccosh), ARG(8.3886080e+06,-8.3886080e+06), RES(1.6982105923718660081e1, -7.8539816339745008597e-1)}, {FN (arccosh), ARG(-8.3886080e+06,8.3886080e+06), RES(1.6982105923718660081e1, 2.3561944901923431525e0)}, {FN (arccosh), ARG(-8.3886080e+06,-8.3886080e+06), RES(1.6982105923718660081e1, -2.3561944901923431525e0)}, {FN (arctanh), ARG(0.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (arctanh), ARG(0.0e+00,1.19209289550781250e-07), RES(0, 1.1920928955078068531e-7)}, {FN (arctanh), ARG(0.0e+00,-1.19209289550781250e-07), RES(0, -1.1920928955078068531e-7)}, {FN (arctanh), ARG(0.0e+00,5.0e-01), RES(0, 4.6364760900080611621e-1)}, {FN (arctanh), ARG(0.0e+00,-5.0e-01), RES(0, -4.6364760900080611621e-1)}, {FN (arctanh), ARG(0.0e+00,1.0e+00), RES(0, 7.8539816339744830962e-1)}, {FN (arctanh), ARG(0.0e+00,-1.0e+00), RES(0, -7.8539816339744830962e-1)}, {FN (arctanh), ARG(0.0e+00,2.0e+00), RES(0, 1.1071487177940905030e0)}, {FN (arctanh), ARG(0.0e+00,-2.0e+00), RES(0, -1.1071487177940905030e0)}, {FN (arctanh), ARG(0.0e+00,8.3886080e+06), RES(0, 1.5707962075856070685e0)}, {FN (arctanh), ARG(0.0e+00,-8.3886080e+06), RES(0, -1.5707962075856070685e0)}, {FN (arctanh), ARG(1.19209289550781250e-07,0.0e+00), RES(1.1920928955078181469e-7, 0.0)}, {FN (arctanh), ARG(-1.19209289550781250e-07,0.0e+00), RES(-1.1920928955078181469e-7, 0.0)}, {FN (arctanh), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(1.1920928955078012062e-7, 1.1920928955078237938e-7)}, {FN (arctanh), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.1920928955078012062e-7, -1.1920928955078237938e-7)}, {FN (arctanh), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(-1.1920928955078012062e-7, 1.1920928955078237938e-7)}, {FN (arctanh), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(-1.1920928955078012062e-7, -1.1920928955078237938e-7)}, {FN (arctanh), ARG(1.19209289550781250e-07,5.0e-01), RES(9.5367431640625072280e-8, 4.6364760900081066369e-1)}, {FN (arctanh), ARG(1.19209289550781250e-07,-5.0e-01), RES(9.5367431640625072280e-8, -4.6364760900081066369e-1)}, {FN (arctanh), ARG(-1.19209289550781250e-07,5.0e-01), RES(-9.5367431640625072280e-8, 4.6364760900081066369e-1)}, {FN (arctanh), ARG(-1.19209289550781250e-07,-5.0e-01), RES(-9.5367431640625072280e-8, -4.6364760900081066369e-1)}, {FN (arctanh), ARG(1.19209289550781250e-07,1.0e+00), RES(5.9604644775390483828e-8, 7.8539816339745186233e-1)}, {FN (arctanh), ARG(1.19209289550781250e-07,-1.0e+00), RES(5.9604644775390483828e-8, -7.8539816339745186233e-1)}, {FN (arctanh), ARG(-1.19209289550781250e-07,1.0e+00), RES(-5.9604644775390483828e-8, 7.8539816339745186233e-1)}, {FN (arctanh), ARG(-1.19209289550781250e-07,-1.0e+00), RES(-5.9604644775390483828e-8, -7.8539816339745186233e-1)}, {FN (arctanh), ARG(1.19209289550781250e-07,2.0e+00), RES(2.3841857910156200307e-8, 1.1071487177940916399e0)}, {FN (arctanh), ARG(1.19209289550781250e-07,-2.0e+00), RES(2.3841857910156200307e-8, -1.1071487177940916399e0)}, {FN (arctanh), ARG(-1.19209289550781250e-07,2.0e+00), RES(-2.3841857910156200307e-8, 1.1071487177940916399e0)}, {FN (arctanh), ARG(-1.19209289550781250e-07,-2.0e+00), RES(-2.3841857910156200307e-8, -1.1071487177940916399e0)}, {FN (arctanh), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.6940658945085766040e-21, 1.5707962075856070685e0)}, {FN (arctanh), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.6940658945085766040e-21, -1.5707962075856070685e0)}, {FN (arctanh), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(-1.6940658945085766040e-21, 1.5707962075856070685e0)}, {FN (arctanh), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(-1.6940658945085766040e-21, -1.5707962075856070685e0)}, {FN (arctanh), ARG(5.0e-01,0.0e+00), RES(5.4930614433405484570e-1, 0.0)}, {FN (arctanh), ARG(-5.0e-01,0.0e+00), RES(-5.4930614433405484570e-1, 0.0)}, {FN (arctanh), ARG(5.0e-01,1.19209289550781250e-07), RES(5.4930614433404221383e-1, 1.5894571940103932425e-7)}, {FN (arctanh), ARG(5.0e-01,-1.19209289550781250e-07), RES(5.4930614433404221383e-1, -1.5894571940103932425e-7)}, {FN (arctanh), ARG(-5.0e-01,1.19209289550781250e-07), RES(-5.4930614433404221383e-1, 1.5894571940103932425e-7)}, {FN (arctanh), ARG(-5.0e-01,-1.19209289550781250e-07), RES(-5.4930614433404221383e-1, -1.5894571940103932425e-7)}, {FN (arctanh), ARG(5.0e-01,5.0e-01), RES(4.0235947810852509365e-1, 5.5357435889704525151e-1)}, {FN (arctanh), ARG(5.0e-01,-5.0e-01), RES(4.0235947810852509365e-1, -5.5357435889704525151e-1)}, {FN (arctanh), ARG(-5.0e-01,5.0e-01), RES(-4.0235947810852509365e-1, 5.5357435889704525151e-1)}, {FN (arctanh), ARG(-5.0e-01,-5.0e-01), RES(-4.0235947810852509365e-1, -5.5357435889704525151e-1)}, {FN (arctanh), ARG(5.0e-01,1.0e+00), RES(2.3887786125685909036e-1, 8.4757566067082902713e-1)}, {FN (arctanh), ARG(5.0e-01,-1.0e+00), RES(2.3887786125685909036e-1, -8.4757566067082902713e-1)}, {FN (arctanh), ARG(-5.0e-01,1.0e+00), RES(-2.3887786125685909036e-1, 8.4757566067082902713e-1)}, {FN (arctanh), ARG(-5.0e-01,-1.0e+00), RES(-2.3887786125685909036e-1, -8.4757566067082902713e-1)}, {FN (arctanh), ARG(5.0e-01,2.0e+00), RES(9.6415620202996167238e-2, 1.1265564408348223487e0)}, {FN (arctanh), ARG(5.0e-01,-2.0e+00), RES(9.6415620202996167238e-2, -1.1265564408348223487e0)}, {FN (arctanh), ARG(-5.0e-01,2.0e+00), RES(-9.6415620202996167238e-2, 1.1265564408348223487e0)}, {FN (arctanh), ARG(-5.0e-01,-2.0e+00), RES(-9.6415620202996167238e-2, -1.1265564408348223487e0)}, {FN (arctanh), ARG(5.0e-01,8.3886080e+06), RES(7.1054273576008756410e-15, 1.5707962075856070685e0)}, {FN (arctanh), ARG(5.0e-01,-8.3886080e+06), RES(7.1054273576008756410e-15, -1.5707962075856070685e0)}, {FN (arctanh), ARG(-5.0e-01,8.3886080e+06), RES(-7.1054273576008756410e-15, 1.5707962075856070685e0)}, {FN (arctanh), ARG(-5.0e-01,-8.3886080e+06), RES(-7.1054273576008756410e-15, -1.5707962075856070685e0)}, {FN (arctanh), ARG(1.0e+00,1.19209289550781250e-07), RES(8.3177661667193446012e0, 7.8539819319977069731e-1)}, {FN (arctanh), ARG(1.0e+00,-1.19209289550781250e-07), RES(8.3177661667193446012e0, -7.8539819319977069731e-1)}, {FN (arctanh), ARG(-1.0e+00,1.19209289550781250e-07), RES(-8.3177661667193446012e0, 7.8539819319977069731e-1)}, {FN (arctanh), ARG(-1.0e+00,-1.19209289550781250e-07), RES(-8.3177661667193446012e0, -7.8539819319977069731e-1)}, {FN (arctanh), ARG(1.0e+00,5.0e-01), RES(7.0830333601405402006e-1, 9.0788749496088038670e-1)}, {FN (arctanh), ARG(1.0e+00,-5.0e-01), RES(7.0830333601405402006e-1, -9.0788749496088038670e-1)}, {FN (arctanh), ARG(-1.0e+00,5.0e-01), RES(-7.0830333601405402006e-1, 9.0788749496088038670e-1)}, {FN (arctanh), ARG(-1.0e+00,-5.0e-01), RES(-7.0830333601405402006e-1, -9.0788749496088038670e-1)}, {FN (arctanh), ARG(1.0e+00,1.0e+00), RES(4.0235947810852509365e-1, 1.0172219678978513677e0)}, {FN (arctanh), ARG(1.0e+00,-1.0e+00), RES(4.0235947810852509365e-1, -1.0172219678978513677e0)}, {FN (arctanh), ARG(-1.0e+00,1.0e+00), RES(-4.0235947810852509365e-1, 1.0172219678978513677e0)}, {FN (arctanh), ARG(-1.0e+00,-1.0e+00), RES(-4.0235947810852509365e-1, -1.0172219678978513677e0)}, {FN (arctanh), ARG(1.0e+00,2.0e+00), RES(1.7328679513998632735e-1, 1.1780972450961724644e0)}, {FN (arctanh), ARG(1.0e+00,-2.0e+00), RES(1.7328679513998632735e-1, -1.1780972450961724644e0)}, {FN (arctanh), ARG(-1.0e+00,2.0e+00), RES(-1.7328679513998632735e-1, 1.1780972450961724644e0)}, {FN (arctanh), ARG(-1.0e+00,-2.0e+00), RES(-1.7328679513998632735e-1, -1.1780972450961724644e0)}, {FN (arctanh), ARG(1.0e+00,8.3886080e+06), RES(1.4210854715201599821e-14, 1.5707962075856070685e0)}, {FN (arctanh), ARG(1.0e+00,-8.3886080e+06), RES(1.4210854715201599821e-14, -1.5707962075856070685e0)}, {FN (arctanh), ARG(-1.0e+00,8.3886080e+06), RES(-1.4210854715201599821e-14, 1.5707962075856070685e0)}, {FN (arctanh), ARG(-1.0e+00,-8.3886080e+06), RES(-1.4210854715201599821e-14, -1.5707962075856070685e0)}, {FN (arctanh), ARG(2.0e+00,0.0e+00), RES(5.4930614433405484570e-1, -1.5707963267948966192e0)}, {FN (arctanh), ARG(-2.0e+00,0.0e+00), RES(-5.4930614433405484570e-1, 1.5707963267948966192e0)}, {FN (arctanh), ARG(2.0e+00,1.19209289550781250e-07), RES(5.4930614433405168773e-1, 1.5707962870584667690e0)}, {FN (arctanh), ARG(2.0e+00,-1.19209289550781250e-07), RES(5.4930614433405168773e-1, -1.5707962870584667690e0)}, {FN (arctanh), ARG(-2.0e+00,1.19209289550781250e-07), RES(-5.4930614433405168773e-1, 1.5707962870584667690e0)}, {FN (arctanh), ARG(-2.0e+00,-1.19209289550781250e-07), RES(-5.4930614433405168773e-1, -1.5707962870584667690e0)}, {FN (arctanh), ARG(2.0e+00,5.0e-01), RES(5.0037000005253101744e-1, 1.4215468610018069803e0)}, {FN (arctanh), ARG(2.0e+00,-5.0e-01), RES(5.0037000005253101744e-1, -1.4215468610018069803e0)}, {FN (arctanh), ARG(-2.0e+00,5.0e-01), RES(-5.0037000005253101744e-1, 1.4215468610018069803e0)}, {FN (arctanh), ARG(-2.0e+00,-5.0e-01), RES(-5.0037000005253101744e-1, -1.4215468610018069803e0)}, {FN (arctanh), ARG(2.0e+00,1.0e+00), RES(4.0235947810852509365e-1, 1.3389725222944935611e0)}, {FN (arctanh), ARG(2.0e+00,-1.0e+00), RES(4.0235947810852509365e-1, -1.3389725222944935611e0)}, {FN (arctanh), ARG(-2.0e+00,1.0e+00), RES(-4.0235947810852509365e-1, 1.3389725222944935611e0)}, {FN (arctanh), ARG(-2.0e+00,-1.0e+00), RES(-4.0235947810852509365e-1, -1.3389725222944935611e0)}, {FN (arctanh), ARG(2.0e+00,2.0e+00), RES(2.3887786125685909036e-1, 1.3112232696716351433e0)}, {FN (arctanh), ARG(2.0e+00,-2.0e+00), RES(2.3887786125685909036e-1, -1.3112232696716351433e0)}, {FN (arctanh), ARG(-2.0e+00,2.0e+00), RES(-2.3887786125685909036e-1, 1.3112232696716351433e0)}, {FN (arctanh), ARG(-2.0e+00,-2.0e+00), RES(-2.3887786125685909036e-1, -1.3112232696716351433e0)}, {FN (arctanh), ARG(2.0e+00,8.3886080e+06), RES(2.8421709430401987951e-14, 1.5707962075856070685e0)}, {FN (arctanh), ARG(2.0e+00,-8.3886080e+06), RES(2.8421709430401987951e-14, -1.5707962075856070685e0)}, {FN (arctanh), ARG(-2.0e+00,8.3886080e+06), RES(-2.8421709430401987951e-14, 1.5707962075856070685e0)}, {FN (arctanh), ARG(-2.0e+00,-8.3886080e+06), RES(-2.8421709430401987951e-14, -1.5707962075856070685e0)}, {FN (arctanh), ARG(8.3886080e+06,0.0e+00), RES(1.1920928955078181469e-7, -1.5707963267948966192e0)}, {FN (arctanh), ARG(-8.3886080e+06,0.0e+00), RES(-1.1920928955078181469e-7, 1.5707963267948966192e0)}, {FN (arctanh), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.1920928955078181469e-7, 1.5707963267948966192e0)}, {FN (arctanh), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.1920928955078181469e-7, -1.5707963267948966192e0)}, {FN (arctanh), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(-1.1920928955078181469e-7, 1.5707963267948966192e0)}, {FN (arctanh), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(-1.1920928955078181469e-7, -1.5707963267948966192e0)}, {FN (arctanh), ARG(8.3886080e+06,5.0e-01), RES(1.1920928955078139117e-7, 1.5707963267948895138e0)}, {FN (arctanh), ARG(8.3886080e+06,-5.0e-01), RES(1.1920928955078139117e-7, -1.5707963267948895138e0)}, {FN (arctanh), ARG(-8.3886080e+06,5.0e-01), RES(-1.1920928955078139117e-7, 1.5707963267948895138e0)}, {FN (arctanh), ARG(-8.3886080e+06,-5.0e-01), RES(-1.1920928955078139117e-7, -1.5707963267948895138e0)}, {FN (arctanh), ARG(8.3886080e+06,1.0e+00), RES(1.1920928955078012062e-7, 1.5707963267948824084e0)}, {FN (arctanh), ARG(8.3886080e+06,-1.0e+00), RES(1.1920928955078012062e-7, -1.5707963267948824084e0)}, {FN (arctanh), ARG(-8.3886080e+06,1.0e+00), RES(-1.1920928955078012062e-7, 1.5707963267948824084e0)}, {FN (arctanh), ARG(-8.3886080e+06,-1.0e+00), RES(-1.1920928955078012062e-7, -1.5707963267948824084e0)}, {FN (arctanh), ARG(8.3886080e+06,2.0e+00), RES(1.1920928955077503843e-7, 1.5707963267948681975e0)}, {FN (arctanh), ARG(8.3886080e+06,-2.0e+00), RES(1.1920928955077503843e-7, -1.5707963267948681975e0)}, {FN (arctanh), ARG(-8.3886080e+06,2.0e+00), RES(-1.1920928955077503843e-7, 1.5707963267948681975e0)}, {FN (arctanh), ARG(-8.3886080e+06,-2.0e+00), RES(-1.1920928955077503843e-7, -1.5707963267948681975e0)}, {FN (arctanh), ARG(8.3886080e+06,8.3886080e+06), RES(5.9604644775390483828e-8, 1.5707962671902518438e0)}, {FN (arctanh), ARG(8.3886080e+06,-8.3886080e+06), RES(5.9604644775390483828e-8, -1.5707962671902518438e0)}, {FN (arctanh), ARG(-8.3886080e+06,8.3886080e+06), RES(-5.9604644775390483828e-8, 1.5707962671902518438e0)}, {FN (arctanh), ARG(-8.3886080e+06,-8.3886080e+06), RES(-5.9604644775390483828e-8, -1.5707962671902518438e0)}, {FN (csc), ARG(-3.45266983001243932001e-04,0.0e+00), RES(-2.8963094332845964291e3, 0.0)}, {FN (csc), ARG(3.45266983001243932001e-04,0.0e+00), RES(2.8963094332845964291e3, 0.0)}, {FN (csc), ARG(-3.45266983001243932001e-04,1.19209289550781250e-07), RES(-2.8963090880176545869e3, -9.9999986092250876926e-1)}, {FN (csc), ARG(-3.45266983001243932001e-04,-1.19209289550781250e-07), RES(-2.8963090880176545869e3, 9.9999986092250876926e-1)}, {FN (csc), ARG(3.45266983001243932001e-04,1.19209289550781250e-07), RES(2.8963090880176545869e3, -9.9999986092250876926e-1)}, {FN (csc), ARG(3.45266983001243932001e-04,-1.19209289550781250e-07), RES(2.8963090880176545869e3, 9.9999986092250876926e-1)}, {FN (csc), ARG(-3.45266983001243932001e-04,5.0e-01), RES(-1.4337901642789801243e-3, -1.9190337944739187237e0)}, {FN (csc), ARG(-3.45266983001243932001e-04,-5.0e-01), RES(-1.4337901642789801243e-3, 1.9190337944739187237e0)}, {FN (csc), ARG(3.45266983001243932001e-04,5.0e-01), RES(1.4337901642789801243e-3, -1.9190337944739187237e0)}, {FN (csc), ARG(3.45266983001243932001e-04,-5.0e-01), RES(1.4337901642789801243e-3, 1.9190337944739187237e0)}, {FN (csc), ARG(-3.45266983001243932001e-04,1.0e+00), RES(-3.8576176225198860914e-4, -8.5091800407377002734e-1)}, {FN (csc), ARG(-3.45266983001243932001e-04,-1.0e+00), RES(-3.8576176225198860914e-4, 8.5091800407377002734e-1)}, {FN (csc), ARG(3.45266983001243932001e-04,1.0e+00), RES(3.8576176225198860914e-4, -8.5091800407377002734e-1)}, {FN (csc), ARG(3.45266983001243932001e-04,-1.0e+00), RES(3.8576176225198860914e-4, 8.5091800407377002734e-1)}, {FN (csc), ARG(-3.45266983001243932001e-04,2.0e+00), RES(-9.8749461907035665386e-5, -2.7572054583883740768e-1)}, {FN (csc), ARG(-3.45266983001243932001e-04,-2.0e+00), RES(-9.8749461907035665386e-5, 2.7572054583883740768e-1)}, {FN (csc), ARG(3.45266983001243932001e-04,2.0e+00), RES(9.8749461907035665386e-5, -2.7572054583883740768e-1)}, {FN (csc), ARG(3.45266983001243932001e-04,-2.0e+00), RES(9.8749461907035665386e-5, 2.7572054583883740768e-1)}, {FN (csc), ARG(1.57045105981189525579e+00,0.0e+00), RES(1.0000000596046477360e0, 0.0)}, {FN (csc), ARG(-1.57045105981189525579e+00,0.0e+00), RES(-1.0000000596046477360e0, 0.0)}, {FN (csc), ARG(1.57045105981189525579e+00,1.19209289550781250e-07), RES(1.0000000596046406306e0, -4.1159035837716456618e-11)}, {FN (csc), ARG(1.57045105981189525579e+00,-1.19209289550781250e-07), RES(1.0000000596046406306e0, 4.1159035837716456618e-11)}, {FN (csc), ARG(-1.57045105981189525579e+00,1.19209289550781250e-07), RES(-1.0000000596046406306e0, -4.1159035837716456618e-11)}, {FN (csc), ARG(-1.57045105981189525579e+00,-1.19209289550781250e-07), RES(-1.0000000596046406306e0, 4.1159035837716456618e-11)}, {FN (csc), ARG(1.57045105981189525579e+00,5.0e-01), RES(8.8681891425248302487e-1, -1.4149533035943115868e-4)}, {FN (csc), ARG(1.57045105981189525579e+00,-5.0e-01), RES(8.8681891425248302487e-1, 1.4149533035943115868e-4)}, {FN (csc), ARG(-1.57045105981189525579e+00,5.0e-01), RES(-8.8681891425248302487e-1, -1.4149533035943115868e-4)}, {FN (csc), ARG(-1.57045105981189525579e+00,-5.0e-01), RES(-8.8681891425248302487e-1, 1.4149533035943115868e-4)}, {FN (csc), ARG(1.57045105981189525579e+00,1.0e+00), RES(6.4805426748157480499e-1, -1.7040802567657401279e-4)}, {FN (csc), ARG(1.57045105981189525579e+00,-1.0e+00), RES(6.4805426748157480499e-1, 1.7040802567657401279e-4)}, {FN (csc), ARG(-1.57045105981189525579e+00,1.0e+00), RES(-6.4805426748157480499e-1, -1.7040802567657401279e-4)}, {FN (csc), ARG(-1.57045105981189525579e+00,-1.0e+00), RES(-6.4805426748157480499e-1, 1.7040802567657401279e-4)}, {FN (csc), ARG(1.57045105981189525579e+00,2.0e+00), RES(2.6580221522968095406e-1, -8.8471445300404633228e-5)}, {FN (csc), ARG(1.57045105981189525579e+00,-2.0e+00), RES(2.6580221522968095406e-1, 8.8471445300404633228e-5)}, {FN (csc), ARG(-1.57045105981189525579e+00,2.0e+00), RES(-2.6580221522968095406e-1, -8.8471445300404633228e-5)}, {FN (csc), ARG(-1.57045105981189525579e+00,-2.0e+00), RES(-2.6580221522968095406e-1, 8.8471445300404633228e-5)}, {FN (csc), ARG(1.57114159377789786021e+00,0.0e+00), RES(1.0000000596046477360e0, 0.0)}, {FN (csc), ARG(-1.57114159377789786021e+00,0.0e+00), RES(-1.0000000596046477360e0, 0.0)}, {FN (csc), ARG(1.57114159377789786021e+00,1.19209289550781250e-07), RES(1.0000000596046406306e0, 4.1159035837701857686e-11)}, {FN (csc), ARG(1.57114159377789786021e+00,-1.19209289550781250e-07), RES(1.0000000596046406306e0, -4.1159035837701857686e-11)}, {FN (csc), ARG(-1.57114159377789786021e+00,1.19209289550781250e-07), RES(-1.0000000596046406306e0, 4.1159035837701857686e-11)}, {FN (csc), ARG(-1.57114159377789786021e+00,-1.19209289550781250e-07), RES(-1.0000000596046406306e0, -4.1159035837701857686e-11)}, {FN (csc), ARG(1.57114159377789786021e+00,5.0e-01), RES(8.8681891425248302485e-1, 1.4149533035938097090e-4)}, {FN (csc), ARG(1.57114159377789786021e+00,-5.0e-01), RES(8.8681891425248302485e-1, -1.4149533035938097090e-4)}, {FN (csc), ARG(-1.57114159377789786021e+00,5.0e-01), RES(-8.8681891425248302485e-1, 1.4149533035938097090e-4)}, {FN (csc), ARG(-1.57114159377789786021e+00,-5.0e-01), RES(-8.8681891425248302485e-1, -1.4149533035938097090e-4)}, {FN (csc), ARG(1.57114159377789786021e+00,1.0e+00), RES(6.4805426748157480499e-1, 1.7040802567651356981e-4)}, {FN (csc), ARG(1.57114159377789786021e+00,-1.0e+00), RES(6.4805426748157480499e-1, -1.7040802567651356981e-4)}, {FN (csc), ARG(-1.57114159377789786021e+00,1.0e+00), RES(-6.4805426748157480499e-1, 1.7040802567651356981e-4)}, {FN (csc), ARG(-1.57114159377789786021e+00,-1.0e+00), RES(-6.4805426748157480499e-1, -1.7040802567651356981e-4)}, {FN (csc), ARG(1.57114159377789786021e+00,2.0e+00), RES(2.6580221522968095407e-1, 8.8471445300373252796e-5)}, {FN (csc), ARG(1.57114159377789786021e+00,-2.0e+00), RES(2.6580221522968095407e-1, -8.8471445300373252796e-5)}, {FN (csc), ARG(-1.57114159377789786021e+00,2.0e+00), RES(-2.6580221522968095407e-1, 8.8471445300373252796e-5)}, {FN (csc), ARG(-1.57114159377789786021e+00,-2.0e+00), RES(-2.6580221522968095407e-1, -8.8471445300373252796e-5)}, {FN (csc), ARG(3.14124738660679181379e+00,0.0e+00), RES(2.8963094332830802676e3, 0.0)}, {FN (csc), ARG(-3.14124738660679181379e+00,0.0e+00), RES(-2.8963094332830802676e3, 0.0)}, {FN (csc), ARG(3.14124738660679181379e+00,1.19209289550781250e-07), RES(2.8963090880161384259e3, 9.9999986092146180843e-1)}, {FN (csc), ARG(3.14124738660679181379e+00,-1.19209289550781250e-07), RES(2.8963090880161384259e3, -9.9999986092146180843e-1)}, {FN (csc), ARG(-3.14124738660679181379e+00,1.19209289550781250e-07), RES(-2.8963090880161384259e3, 9.9999986092146180843e-1)}, {FN (csc), ARG(-3.14124738660679181379e+00,-1.19209289550781250e-07), RES(-2.8963090880161384259e3, -9.9999986092146180843e-1)}, {FN (csc), ARG(3.14124738660679181379e+00,5.0e-01), RES(1.4337901642797306848e-3, 1.9190337944739187227e0)}, {FN (csc), ARG(3.14124738660679181379e+00,-5.0e-01), RES(1.4337901642797306848e-3, -1.9190337944739187227e0)}, {FN (csc), ARG(-3.14124738660679181379e+00,5.0e-01), RES(-1.4337901642797306848e-3, 1.9190337944739187227e0)}, {FN (csc), ARG(-3.14124738660679181379e+00,-5.0e-01), RES(-1.4337901642797306848e-3, -1.9190337944739187227e0)}, {FN (csc), ARG(3.14124738660679181379e+00,1.0e+00), RES(3.8576176225219054787e-4, 8.5091800407377002721e-1)}, {FN (csc), ARG(3.14124738660679181379e+00,-1.0e+00), RES(3.8576176225219054787e-4, -8.5091800407377002721e-1)}, {FN (csc), ARG(-3.14124738660679181379e+00,1.0e+00), RES(-3.8576176225219054787e-4, 8.5091800407377002721e-1)}, {FN (csc), ARG(-3.14124738660679181379e+00,-1.0e+00), RES(-3.8576176225219054787e-4, -8.5091800407377002721e-1)}, {FN (csc), ARG(3.14124738660679181379e+00,2.0e+00), RES(9.8749461907087358805e-5, 2.7572054583883740766e-1)}, {FN (csc), ARG(3.14124738660679181379e+00,-2.0e+00), RES(9.8749461907087358805e-5, -2.7572054583883740766e-1)}, {FN (csc), ARG(-3.14124738660679181379e+00,2.0e+00), RES(-9.8749461907087358805e-5, 2.7572054583883740766e-1)}, {FN (csc), ARG(-3.14124738660679181379e+00,-2.0e+00), RES(-9.8749461907087358805e-5, -2.7572054583883740766e-1)}, {FN (csc), ARG(3.14193792057279441821e+00,0.0e+00), RES(-2.8963094332851348839e3, 0.0)}, {FN (csc), ARG(-3.14193792057279441821e+00,0.0e+00), RES(2.8963094332851348839e3, 0.0)}, {FN (csc), ARG(3.14193792057279441821e+00,1.19209289550781250e-07), RES(-2.8963090880181930415e3, 9.9999986092288059049e-1)}, {FN (csc), ARG(3.14193792057279441821e+00,-1.19209289550781250e-07), RES(-2.8963090880181930415e3, -9.9999986092288059049e-1)}, {FN (csc), ARG(-3.14193792057279441821e+00,1.19209289550781250e-07), RES(2.8963090880181930415e3, 9.9999986092288059049e-1)}, {FN (csc), ARG(-3.14193792057279441821e+00,-1.19209289550781250e-07), RES(2.8963090880181930415e3, -9.9999986092288059049e-1)}, {FN (csc), ARG(3.14193792057279441821e+00,5.0e-01), RES(-1.4337901642787135676e-3, 1.9190337944739187241e0)}, {FN (csc), ARG(3.14193792057279441821e+00,-5.0e-01), RES(-1.4337901642787135676e-3, -1.9190337944739187241e0)}, {FN (csc), ARG(-3.14193792057279441821e+00,5.0e-01), RES(1.4337901642787135676e-3, 1.9190337944739187241e0)}, {FN (csc), ARG(-3.14193792057279441821e+00,-5.0e-01), RES(1.4337901642787135676e-3, -1.9190337944739187241e0)}, {FN (csc), ARG(3.14193792057279441821e+00,1.0e+00), RES(-3.8576176225191689193e-4, 8.5091800407377002738e-1)}, {FN (csc), ARG(3.14193792057279441821e+00,-1.0e+00), RES(-3.8576176225191689193e-4, -8.5091800407377002738e-1)}, {FN (csc), ARG(-3.14193792057279441821e+00,1.0e+00), RES(3.8576176225191689193e-4, 8.5091800407377002738e-1)}, {FN (csc), ARG(-3.14193792057279441821e+00,-1.0e+00), RES(3.8576176225191689193e-4, -8.5091800407377002738e-1)}, {FN (csc), ARG(3.14193792057279441821e+00,2.0e+00), RES(-9.8749461907017306810e-5, 2.7572054583883740769e-1)}, {FN (csc), ARG(3.14193792057279441821e+00,-2.0e+00), RES(-9.8749461907017306810e-5, -2.7572054583883740769e-1)}, {FN (csc), ARG(-3.14193792057279441821e+00,2.0e+00), RES(9.8749461907017306810e-5, 2.7572054583883740769e-1)}, {FN (csc), ARG(-3.14193792057279441821e+00,-2.0e+00), RES(9.8749461907017306810e-5, -2.7572054583883740769e-1)}, {FN (csc), ARG(4.71204371340168837179e+00,0.0e+00), RES(-1.0000000596046477361e0, 0.0)}, {FN (csc), ARG(-4.71204371340168837179e+00,0.0e+00), RES(1.0000000596046477361e0, 0.0)}, {FN (csc), ARG(4.71204371340168837179e+00,1.19209289550781250e-07), RES(-1.0000000596046406306e0, 4.1159035837731055550e-11)}, {FN (csc), ARG(4.71204371340168837179e+00,-1.19209289550781250e-07), RES(-1.0000000596046406306e0, -4.1159035837731055550e-11)}, {FN (csc), ARG(-4.71204371340168837179e+00,1.19209289550781250e-07), RES(1.0000000596046406306e0, 4.1159035837731055550e-11)}, {FN (csc), ARG(-4.71204371340168837179e+00,-1.19209289550781250e-07), RES(1.0000000596046406306e0, -4.1159035837731055550e-11)}, {FN (csc), ARG(4.71204371340168837179e+00,5.0e-01), RES(-8.8681891425248302489e-1, 1.4149533035948134646e-4)}, {FN (csc), ARG(4.71204371340168837179e+00,-5.0e-01), RES(-8.8681891425248302489e-1, -1.4149533035948134646e-4)}, {FN (csc), ARG(-4.71204371340168837179e+00,5.0e-01), RES(8.8681891425248302489e-1, 1.4149533035948134646e-4)}, {FN (csc), ARG(-4.71204371340168837179e+00,-5.0e-01), RES(8.8681891425248302489e-1, -1.4149533035948134646e-4)}, {FN (csc), ARG(4.71204371340168837179e+00,1.0e+00), RES(-6.4805426748157480498e-1, 1.7040802567663445577e-4)}, {FN (csc), ARG(4.71204371340168837179e+00,-1.0e+00), RES(-6.4805426748157480498e-1, -1.7040802567663445577e-4)}, {FN (csc), ARG(-4.71204371340168837179e+00,1.0e+00), RES(6.4805426748157480498e-1, 1.7040802567663445577e-4)}, {FN (csc), ARG(-4.71204371340168837179e+00,-1.0e+00), RES(6.4805426748157480498e-1, -1.7040802567663445577e-4)}, {FN (csc), ARG(4.71204371340168837179e+00,2.0e+00), RES(-2.6580221522968095405e-1, 8.8471445300436013659e-5)}, {FN (csc), ARG(4.71204371340168837179e+00,-2.0e+00), RES(-2.6580221522968095405e-1, -8.8471445300436013659e-5)}, {FN (csc), ARG(-4.71204371340168837179e+00,2.0e+00), RES(2.6580221522968095405e-1, 8.8471445300436013659e-5)}, {FN (csc), ARG(-4.71204371340168837179e+00,-2.0e+00), RES(2.6580221522968095405e-1, -8.8471445300436013659e-5)}, {FN (csc), ARG(4.71273424736769097620e+00,0.0e+00), RES(-1.0000000596046477359e0, 0.0)}, {FN (csc), ARG(-4.71273424736769097620e+00,0.0e+00), RES(1.0000000596046477359e0, 0.0)}, {FN (csc), ARG(4.71273424736769097620e+00,1.19209289550781250e-07), RES(-1.0000000596046406305e0, -4.1159035837687258754e-11)}, {FN (csc), ARG(4.71273424736769097620e+00,-1.19209289550781250e-07), RES(-1.0000000596046406305e0, 4.1159035837687258754e-11)}, {FN (csc), ARG(-4.71273424736769097620e+00,1.19209289550781250e-07), RES(1.0000000596046406305e0, -4.1159035837687258754e-11)}, {FN (csc), ARG(-4.71273424736769097620e+00,-1.19209289550781250e-07), RES(1.0000000596046406305e0, 4.1159035837687258754e-11)}, {FN (csc), ARG(4.71273424736769097620e+00,5.0e-01), RES(-8.8681891425248302483e-1, -1.4149533035933078312e-4)}, {FN (csc), ARG(4.71273424736769097620e+00,-5.0e-01), RES(-8.8681891425248302483e-1, 1.4149533035933078312e-4)}, {FN (csc), ARG(-4.71273424736769097620e+00,5.0e-01), RES(8.8681891425248302483e-1, -1.4149533035933078312e-4)}, {FN (csc), ARG(-4.71273424736769097620e+00,-5.0e-01), RES(8.8681891425248302483e-1, 1.4149533035933078312e-4)}, {FN (csc), ARG(4.71273424736769097620e+00,1.0e+00), RES(-6.480542674815748050e-1, -1.7040802567645312683e-4)}, {FN (csc), ARG(4.71273424736769097620e+00,-1.0e+00), RES(-6.480542674815748050e-1, 1.7040802567645312683e-4)}, {FN (csc), ARG(-4.71273424736769097620e+00,1.0e+00), RES(6.480542674815748050e-1, -1.7040802567645312683e-4)}, {FN (csc), ARG(-4.71273424736769097620e+00,-1.0e+00), RES(6.480542674815748050e-1, 1.7040802567645312683e-4)}, {FN (csc), ARG(4.71273424736769097620e+00,2.0e+00), RES(-2.6580221522968095408e-1, -8.8471445300341872364e-5)}, {FN (csc), ARG(4.71273424736769097620e+00,-2.0e+00), RES(-2.6580221522968095408e-1, 8.8471445300341872364e-5)}, {FN (csc), ARG(-4.71273424736769097620e+00,2.0e+00), RES(2.6580221522968095408e-1, -8.8471445300341872364e-5)}, {FN (csc), ARG(-4.71273424736769097620e+00,-2.0e+00), RES(2.6580221522968095408e-1, 8.8471445300341872364e-5)}, {FN (csc), ARG(6.28284004019658492979e+00,0.0e+00), RES(-2.8963094332820529594e3, 0.0)}, {FN (csc), ARG(-6.28284004019658492979e+00,0.0e+00), RES(2.8963094332820529594e3, 0.0)}, {FN (csc), ARG(6.28284004019658492979e+00,1.19209289550781250e-07), RES(-2.8963090880151111181e3, -9.9999986092075241740e-1)}, {FN (csc), ARG(6.28284004019658492979e+00,-1.19209289550781250e-07), RES(-2.8963090880151111181e3, 9.9999986092075241740e-1)}, {FN (csc), ARG(-6.28284004019658492979e+00,1.19209289550781250e-07), RES(2.8963090880151111181e3, -9.9999986092075241740e-1)}, {FN (csc), ARG(-6.28284004019658492979e+00,-1.19209289550781250e-07), RES(2.8963090880151111181e3, 9.9999986092075241740e-1)}, {FN (csc), ARG(6.28284004019658492979e+00,5.0e-01), RES(-1.4337901642802392434e-3, -1.9190337944739187220e0)}, {FN (csc), ARG(6.28284004019658492979e+00,-5.0e-01), RES(-1.4337901642802392434e-3, 1.9190337944739187220e0)}, {FN (csc), ARG(-6.28284004019658492979e+00,5.0e-01), RES(1.4337901642802392434e-3, -1.9190337944739187220e0)}, {FN (csc), ARG(-6.28284004019658492979e+00,-5.0e-01), RES(1.4337901642802392434e-3, 1.9190337944739187220e0)}, {FN (csc), ARG(6.28284004019658492979e+00,1.0e+00), RES(-3.8576176225232737584e-4, -8.5091800407377002712e-1)}, {FN (csc), ARG(6.28284004019658492979e+00,-1.0e+00), RES(-3.8576176225232737584e-4, 8.5091800407377002712e-1)}, {FN (csc), ARG(-6.28284004019658492979e+00,1.0e+00), RES(3.8576176225232737584e-4, -8.5091800407377002712e-1)}, {FN (csc), ARG(-6.28284004019658492979e+00,-1.0e+00), RES(3.8576176225232737584e-4, 8.5091800407377002712e-1)}, {FN (csc), ARG(6.28284004019658492979e+00,2.0e+00), RES(-9.8749461907122384803e-5, -2.7572054583883740765e-1)}, {FN (csc), ARG(6.28284004019658492979e+00,-2.0e+00), RES(-9.8749461907122384803e-5, 2.7572054583883740765e-1)}, {FN (csc), ARG(-6.28284004019658492979e+00,2.0e+00), RES(9.8749461907122384803e-5, -2.7572054583883740765e-1)}, {FN (csc), ARG(-6.28284004019658492979e+00,-2.0e+00), RES(9.8749461907122384803e-5, 2.7572054583883740765e-1)}, {FN (csc), ARG(6.28353057416258753420e+00,0.0e+00), RES(2.8963094332861621921e3, 0.0)}, {FN (csc), ARG(-6.28353057416258753420e+00,0.0e+00), RES(-2.8963094332861621921e3, 0.0)}, {FN (csc), ARG(6.28353057416258753420e+00,1.19209289550781250e-07), RES(2.8963090880192203493e3, -9.9999986092358998153e-1)}, {FN (csc), ARG(6.28353057416258753420e+00,-1.19209289550781250e-07), RES(2.8963090880192203493e3, 9.9999986092358998153e-1)}, {FN (csc), ARG(-6.28353057416258753420e+00,1.19209289550781250e-07), RES(-2.8963090880192203493e3, -9.9999986092358998153e-1)}, {FN (csc), ARG(-6.28353057416258753420e+00,-1.19209289550781250e-07), RES(-2.8963090880192203493e3, 9.9999986092358998153e-1)}, {FN (csc), ARG(6.28353057416258753420e+00,5.0e-01), RES(1.4337901642782050091e-3, -1.9190337944739187248e0)}, {FN (csc), ARG(6.28353057416258753420e+00,-5.0e-01), RES(1.4337901642782050091e-3, 1.9190337944739187248e0)}, {FN (csc), ARG(-6.28353057416258753420e+00,5.0e-01), RES(-1.4337901642782050091e-3, -1.9190337944739187248e0)}, {FN (csc), ARG(-6.28353057416258753420e+00,-5.0e-01), RES(-1.4337901642782050091e-3, 1.9190337944739187248e0)}, {FN (csc), ARG(6.28353057416258753420e+00,1.0e+00), RES(3.8576176225178006396e-4, -8.5091800407377002747e-1)}, {FN (csc), ARG(6.28353057416258753420e+00,-1.0e+00), RES(3.8576176225178006396e-4, 8.5091800407377002747e-1)}, {FN (csc), ARG(-6.28353057416258753420e+00,1.0e+00), RES(-3.8576176225178006396e-4, -8.5091800407377002747e-1)}, {FN (csc), ARG(-6.28353057416258753420e+00,-1.0e+00), RES(-3.8576176225178006396e-4, 8.5091800407377002747e-1)}, {FN (csc), ARG(6.28353057416258753420e+00,2.0e+00), RES(9.8749461906982280812e-5, -2.7572054583883740770e-1)}, {FN (csc), ARG(6.28353057416258753420e+00,-2.0e+00), RES(9.8749461906982280812e-5, 2.7572054583883740770e-1)}, {FN (csc), ARG(-6.28353057416258753420e+00,2.0e+00), RES(-9.8749461906982280812e-5, -2.7572054583883740770e-1)}, {FN (csc), ARG(-6.28353057416258753420e+00,-2.0e+00), RES(-9.8749461906982280812e-5, 2.7572054583883740770e-1)}, {FN (csc), ARG(9.42443269378637893396e+00,0.0e+00), RES(2.8963094332884762317e3, 0.0)}, {FN (csc), ARG(-9.42443269378637893396e+00,0.0e+00), RES(-2.8963094332884762317e3, 0.0)}, {FN (csc), ARG(9.42443269378637893396e+00,1.19209289550781250e-07), RES(2.8963090880215343881e3, 9.9999986092518790411e-1)}, {FN (csc), ARG(9.42443269378637893396e+00,-1.19209289550781250e-07), RES(2.8963090880215343881e3, -9.9999986092518790411e-1)}, {FN (csc), ARG(-9.42443269378637893396e+00,1.19209289550781250e-07), RES(-2.8963090880215343881e3, 9.9999986092518790411e-1)}, {FN (csc), ARG(-9.42443269378637893396e+00,-1.19209289550781250e-07), RES(-2.8963090880215343881e3, -9.9999986092518790411e-1)}, {FN (csc), ARG(9.42443269378637893396e+00,5.0e-01), RES(1.4337901642770594670e-3, 1.9190337944739187263e0)}, {FN (csc), ARG(9.42443269378637893396e+00,-5.0e-01), RES(1.4337901642770594670e-3, -1.9190337944739187263e0)}, {FN (csc), ARG(-9.42443269378637893396e+00,5.0e-01), RES(-1.4337901642770594670e-3, 1.9190337944739187263e0)}, {FN (csc), ARG(-9.42443269378637893396e+00,-5.0e-01), RES(-1.4337901642770594670e-3, -1.9190337944739187263e0)}, {FN (csc), ARG(9.42443269378637893396e+00,1.0e+00), RES(3.8576176225147185523e-4, 8.5091800407377002767e-1)}, {FN (csc), ARG(9.42443269378637893396e+00,-1.0e+00), RES(3.8576176225147185523e-4, -8.5091800407377002767e-1)}, {FN (csc), ARG(-9.42443269378637893396e+00,1.0e+00), RES(-3.8576176225147185523e-4, 8.5091800407377002767e-1)}, {FN (csc), ARG(-9.42443269378637893396e+00,-1.0e+00), RES(-3.8576176225147185523e-4, -8.5091800407377002767e-1)}, {FN (csc), ARG(9.42443269378637893396e+00,2.0e+00), RES(9.874946190690338380e-5, 2.7572054583883740773e-1)}, {FN (csc), ARG(9.42443269378637893396e+00,-2.0e+00), RES(9.874946190690338380e-5, -2.7572054583883740773e-1)}, {FN (csc), ARG(-9.42443269378637893396e+00,2.0e+00), RES(-9.874946190690338380e-5, 2.7572054583883740773e-1)}, {FN (csc), ARG(-9.42443269378637893396e+00,-2.0e+00), RES(-9.874946190690338380e-5, -2.7572054583883740773e-1)}, {FN (csc), ARG(9.42512322775237976202e+00,0.0e+00), RES(-2.8963094332946400807e3, 0.0)}, {FN (csc), ARG(-9.42512322775237976202e+00,0.0e+00), RES(2.8963094332946400807e3, 0.0)}, {FN (csc), ARG(9.42512322775237976202e+00,1.19209289550781250e-07), RES(-2.8963090880276982349e3, 9.9999986092944425030e-1)}, {FN (csc), ARG(9.42512322775237976202e+00,-1.19209289550781250e-07), RES(-2.8963090880276982349e3, -9.9999986092944425030e-1)}, {FN (csc), ARG(-9.42512322775237976202e+00,1.19209289550781250e-07), RES(2.8963090880276982349e3, 9.9999986092944425030e-1)}, {FN (csc), ARG(-9.42512322775237976202e+00,-1.19209289550781250e-07), RES(2.8963090880276982349e3, -9.9999986092944425030e-1)}, {FN (csc), ARG(9.42512322775237976202e+00,5.0e-01), RES(-1.4337901642740081154e-3, 1.9190337944739187304e0)}, {FN (csc), ARG(9.42512322775237976202e+00,-5.0e-01), RES(-1.4337901642740081154e-3, -1.9190337944739187304e0)}, {FN (csc), ARG(-9.42512322775237976202e+00,5.0e-01), RES(1.4337901642740081154e-3, 1.9190337944739187304e0)}, {FN (csc), ARG(-9.42512322775237976202e+00,-5.0e-01), RES(1.4337901642740081154e-3, -1.9190337944739187304e0)}, {FN (csc), ARG(9.42512322775237976202e+00,1.0e+00), RES(-3.8576176225065088741e-4, 8.5091800407377002820e-1)}, {FN (csc), ARG(9.42512322775237976202e+00,-1.0e+00), RES(-3.8576176225065088741e-4, -8.5091800407377002820e-1)}, {FN (csc), ARG(-9.42512322775237976202e+00,1.0e+00), RES(3.8576176225065088741e-4, 8.5091800407377002820e-1)}, {FN (csc), ARG(-9.42512322775237976202e+00,-1.0e+00), RES(3.8576176225065088741e-4, -8.5091800407377002820e-1)}, {FN (csc), ARG(9.42512322775237976202e+00,2.0e+00), RES(-9.8749461906693227814e-5, 2.7572054583883740781e-1)}, {FN (csc), ARG(9.42512322775237976202e+00,-2.0e+00), RES(-9.8749461906693227814e-5, -2.7572054583883740781e-1)}, {FN (csc), ARG(-9.42512322775237976202e+00,2.0e+00), RES(9.8749461906693227814e-5, 2.7572054583883740781e-1)}, {FN (csc), ARG(-9.42512322775237976202e+00,-2.0e+00), RES(9.8749461906693227814e-5, -2.7572054583883740781e-1)}, {FN (sec), ARG(-3.45266983001243932001e-04,0.0e+00), RES(1.0000000596046477360e0, 0.0)}, {FN (sec), ARG(3.45266983001243932001e-04,0.0e+00), RES(1.0000000596046477360e0, 0.0)}, {FN (sec), ARG(-3.45266983001243932001e-04,1.19209289550781250e-07), RES(1.0000000596046406306e0, -4.1159035837702210125e-11)}, {FN (sec), ARG(-3.45266983001243932001e-04,-1.19209289550781250e-07), RES(1.0000000596046406306e0, 4.1159035837702210125e-11)}, {FN (sec), ARG(3.45266983001243932001e-04,1.19209289550781250e-07), RES(1.0000000596046406306e0, 4.1159035837702210125e-11)}, {FN (sec), ARG(3.45266983001243932001e-04,-1.19209289550781250e-07), RES(1.0000000596046406306e0, -4.1159035837702210125e-11)}, {FN (sec), ARG(-3.45266983001243932001e-04,5.0e-01), RES(8.8681891425248302485e-1, -1.4149533035938218250e-4)}, {FN (sec), ARG(-3.45266983001243932001e-04,-5.0e-01), RES(8.8681891425248302485e-1, 1.4149533035938218250e-4)}, {FN (sec), ARG(3.45266983001243932001e-04,5.0e-01), RES(8.8681891425248302485e-1, 1.4149533035938218250e-4)}, {FN (sec), ARG(3.45266983001243932001e-04,-5.0e-01), RES(8.8681891425248302485e-1, -1.4149533035938218250e-4)}, {FN (sec), ARG(-3.45266983001243932001e-04,1.0e+00), RES(6.4805426748157480499e-1, -1.7040802567651502899e-4)}, {FN (sec), ARG(-3.45266983001243932001e-04,-1.0e+00), RES(6.4805426748157480499e-1, 1.7040802567651502899e-4)}, {FN (sec), ARG(3.45266983001243932001e-04,1.0e+00), RES(6.4805426748157480499e-1, 1.7040802567651502899e-4)}, {FN (sec), ARG(3.45266983001243932001e-04,-1.0e+00), RES(6.4805426748157480499e-1, -1.7040802567651502899e-4)}, {FN (sec), ARG(-3.45266983001243932001e-04,2.0e+00), RES(2.6580221522968095407e-1, -8.8471445300374010365e-5)}, {FN (sec), ARG(-3.45266983001243932001e-04,-2.0e+00), RES(2.6580221522968095407e-1, 8.8471445300374010365e-5)}, {FN (sec), ARG(3.45266983001243932001e-04,2.0e+00), RES(2.6580221522968095407e-1, 8.8471445300374010365e-5)}, {FN (sec), ARG(3.45266983001243932001e-04,-2.0e+00), RES(2.6580221522968095407e-1, -8.8471445300374010365e-5)}, {FN (sec), ARG(1.57045105981189525579e+00,0.0e+00), RES(2.8963094332835939217e3, 0.0)}, {FN (sec), ARG(-1.57045105981189525579e+00,0.0e+00), RES(2.8963094332835939217e3, 0.0)}, {FN (sec), ARG(1.57045105981189525579e+00,1.19209289550781250e-07), RES(2.8963090880166520798e3, 9.9999986092181650394e-1)}, {FN (sec), ARG(1.57045105981189525579e+00,-1.19209289550781250e-07), RES(2.8963090880166520798e3, -9.9999986092181650394e-1)}, {FN (sec), ARG(-1.57045105981189525579e+00,1.19209289550781250e-07), RES(2.8963090880166520798e3, -9.9999986092181650394e-1)}, {FN (sec), ARG(-1.57045105981189525579e+00,-1.19209289550781250e-07), RES(2.8963090880166520798e3, 9.9999986092181650394e-1)}, {FN (sec), ARG(1.57045105981189525579e+00,5.0e-01), RES(1.4337901642794764055e-3, 1.9190337944739187231e0)}, {FN (sec), ARG(1.57045105981189525579e+00,-5.0e-01), RES(1.4337901642794764055e-3, -1.9190337944739187231e0)}, {FN (sec), ARG(-1.57045105981189525579e+00,5.0e-01), RES(1.4337901642794764055e-3, -1.9190337944739187231e0)}, {FN (sec), ARG(-1.57045105981189525579e+00,-5.0e-01), RES(1.4337901642794764055e-3, 1.9190337944739187231e0)}, {FN (sec), ARG(1.57045105981189525579e+00,1.0e+00), RES(3.8576176225212213388e-4, 8.5091800407377002725e-1)}, {FN (sec), ARG(1.57045105981189525579e+00,-1.0e+00), RES(3.8576176225212213388e-4, -8.5091800407377002725e-1)}, {FN (sec), ARG(-1.57045105981189525579e+00,1.0e+00), RES(3.8576176225212213388e-4, -8.5091800407377002725e-1)}, {FN (sec), ARG(-1.57045105981189525579e+00,-1.0e+00), RES(3.8576176225212213388e-4, 8.5091800407377002725e-1)}, {FN (sec), ARG(1.57045105981189525579e+00,2.0e+00), RES(9.8749461907069845806e-5, 2.7572054583883740767e-1)}, {FN (sec), ARG(1.57045105981189525579e+00,-2.0e+00), RES(9.8749461907069845806e-5, -2.7572054583883740767e-1)}, {FN (sec), ARG(-1.57045105981189525579e+00,2.0e+00), RES(9.8749461907069845806e-5, -2.7572054583883740767e-1)}, {FN (sec), ARG(-1.57045105981189525579e+00,-2.0e+00), RES(9.8749461907069845806e-5, 2.7572054583883740767e-1)}, {FN (sec), ARG(1.57114159377789786021e+00,0.0e+00), RES(-2.8963094332846212298e3, 0.0)}, {FN (sec), ARG(-1.57114159377789786021e+00,0.0e+00), RES(-2.8963094332846212298e3, 0.0)}, {FN (sec), ARG(1.57114159377789786021e+00,1.19209289550781250e-07), RES(-2.8963090880176793876e3, 9.9999986092252589498e-1)}, {FN (sec), ARG(1.57114159377789786021e+00,-1.19209289550781250e-07), RES(-2.8963090880176793876e3, -9.9999986092252589498e-1)}, {FN (sec), ARG(-1.57114159377789786021e+00,1.19209289550781250e-07), RES(-2.8963090880176793876e3, -9.9999986092252589498e-1)}, {FN (sec), ARG(-1.57114159377789786021e+00,-1.19209289550781250e-07), RES(-2.8963090880176793876e3, 9.9999986092252589498e-1)}, {FN (sec), ARG(1.57114159377789786021e+00,5.0e-01), RES(-1.4337901642789678469e-3, 1.9190337944739187237e0)}, {FN (sec), ARG(1.57114159377789786021e+00,-5.0e-01), RES(-1.4337901642789678469e-3, -1.9190337944739187237e0)}, {FN (sec), ARG(-1.57114159377789786021e+00,5.0e-01), RES(-1.4337901642789678469e-3, -1.9190337944739187237e0)}, {FN (sec), ARG(-1.57114159377789786021e+00,-5.0e-01), RES(-1.4337901642789678469e-3, 1.9190337944739187237e0)}, {FN (sec), ARG(1.57114159377789786021e+00,1.0e+00), RES(-3.8576176225198530591e-4, 8.5091800407377002734e-1)}, {FN (sec), ARG(1.57114159377789786021e+00,-1.0e+00), RES(-3.8576176225198530591e-4, -8.5091800407377002734e-1)}, {FN (sec), ARG(-1.57114159377789786021e+00,1.0e+00), RES(-3.8576176225198530591e-4, -8.5091800407377002734e-1)}, {FN (sec), ARG(-1.57114159377789786021e+00,-1.0e+00), RES(-3.8576176225198530591e-4, 8.5091800407377002734e-1)}, {FN (sec), ARG(1.57114159377789786021e+00,2.0e+00), RES(-9.8749461907034819809e-5, 2.7572054583883740768e-1)}, {FN (sec), ARG(1.57114159377789786021e+00,-2.0e+00), RES(-9.8749461907034819809e-5, -2.7572054583883740768e-1)}, {FN (sec), ARG(-1.57114159377789786021e+00,2.0e+00), RES(-9.8749461907034819809e-5, -2.7572054583883740768e-1)}, {FN (sec), ARG(-1.57114159377789786021e+00,-2.0e+00), RES(-9.8749461907034819809e-5, 2.7572054583883740768e-1)}, {FN (sec), ARG(3.14124738660679181379e+00,0.0e+00), RES(-1.0000000596046477360e0, 0.0)}, {FN (sec), ARG(-3.14124738660679181379e+00,0.0e+00), RES(-1.0000000596046477360e0, 0.0)}, {FN (sec), ARG(3.14124738660679181379e+00,1.19209289550781250e-07), RES(-1.0000000596046406306e0, 4.1159035837723756084e-11)}, {FN (sec), ARG(3.14124738660679181379e+00,-1.19209289550781250e-07), RES(-1.0000000596046406306e0, -4.1159035837723756084e-11)}, {FN (sec), ARG(-3.14124738660679181379e+00,1.19209289550781250e-07), RES(-1.0000000596046406306e0, -4.1159035837723756084e-11)}, {FN (sec), ARG(-3.14124738660679181379e+00,-1.19209289550781250e-07), RES(-1.0000000596046406306e0, 4.1159035837723756084e-11)}, {FN (sec), ARG(3.14124738660679181379e+00,5.0e-01), RES(-8.8681891425248302488e-1, 1.4149533035945625257e-4)}, {FN (sec), ARG(3.14124738660679181379e+00,-5.0e-01), RES(-8.8681891425248302488e-1, -1.4149533035945625257e-4)}, {FN (sec), ARG(-3.14124738660679181379e+00,5.0e-01), RES(-8.8681891425248302488e-1, -1.4149533035945625257e-4)}, {FN (sec), ARG(-3.14124738660679181379e+00,-5.0e-01), RES(-8.8681891425248302488e-1, 1.4149533035945625257e-4)}, {FN (sec), ARG(3.14124738660679181379e+00,1.0e+00), RES(-6.4805426748157480499e-1, 1.7040802567660423428e-4)}, {FN (sec), ARG(3.14124738660679181379e+00,-1.0e+00), RES(-6.4805426748157480499e-1, -1.7040802567660423428e-4)}, {FN (sec), ARG(-3.14124738660679181379e+00,1.0e+00), RES(-6.4805426748157480499e-1, -1.7040802567660423428e-4)}, {FN (sec), ARG(-3.14124738660679181379e+00,-1.0e+00), RES(-6.4805426748157480499e-1, 1.7040802567660423428e-4)}, {FN (sec), ARG(3.14124738660679181379e+00,2.0e+00), RES(-2.6580221522968095405e-1, 8.8471445300420323443e-5)}, {FN (sec), ARG(3.14124738660679181379e+00,-2.0e+00), RES(-2.6580221522968095405e-1, -8.8471445300420323443e-5)}, {FN (sec), ARG(-3.14124738660679181379e+00,2.0e+00), RES(-2.6580221522968095405e-1, -8.8471445300420323443e-5)}, {FN (sec), ARG(-3.14124738660679181379e+00,-2.0e+00), RES(-2.6580221522968095405e-1, 8.8471445300420323443e-5)}, {FN (sec), ARG(3.14193792057279441821e+00,0.0e+00), RES(-1.0000000596046477360e0, 0.0)}, {FN (sec), ARG(-3.14193792057279441821e+00,0.0e+00), RES(-1.0000000596046477360e0, 0.0)}, {FN (sec), ARG(3.14193792057279441821e+00,1.19209289550781250e-07), RES(-1.0000000596046406305e0, -4.1159035837694558220e-11)}, {FN (sec), ARG(3.14193792057279441821e+00,-1.19209289550781250e-07), RES(-1.0000000596046406305e0, 4.1159035837694558220e-11)}, {FN (sec), ARG(-3.14193792057279441821e+00,1.19209289550781250e-07), RES(-1.0000000596046406305e0, 4.1159035837694558220e-11)}, {FN (sec), ARG(-3.14193792057279441821e+00,-1.19209289550781250e-07), RES(-1.0000000596046406305e0, -4.1159035837694558220e-11)}, {FN (sec), ARG(3.14193792057279441821e+00,5.0e-01), RES(-8.8681891425248302484e-1, -1.4149533035935587701e-4)}, {FN (sec), ARG(3.14193792057279441821e+00,-5.0e-01), RES(-8.8681891425248302484e-1, 1.4149533035935587701e-4)}, {FN (sec), ARG(-3.14193792057279441821e+00,5.0e-01), RES(-8.8681891425248302484e-1, 1.4149533035935587701e-4)}, {FN (sec), ARG(-3.14193792057279441821e+00,-5.0e-01), RES(-8.8681891425248302484e-1, -1.4149533035935587701e-4)}, {FN (sec), ARG(3.14193792057279441821e+00,1.0e+00), RES(-6.4805426748157480499e-1, -1.7040802567648334832e-4)}, {FN (sec), ARG(3.14193792057279441821e+00,-1.0e+00), RES(-6.4805426748157480499e-1, 1.7040802567648334832e-4)}, {FN (sec), ARG(-3.14193792057279441821e+00,1.0e+00), RES(-6.4805426748157480499e-1, 1.7040802567648334832e-4)}, {FN (sec), ARG(-3.14193792057279441821e+00,-1.0e+00), RES(-6.4805426748157480499e-1, -1.7040802567648334832e-4)}, {FN (sec), ARG(3.14193792057279441821e+00,2.0e+00), RES(-2.6580221522968095407e-1, -8.8471445300357562580e-5)}, {FN (sec), ARG(3.14193792057279441821e+00,-2.0e+00), RES(-2.6580221522968095407e-1, 8.8471445300357562580e-5)}, {FN (sec), ARG(-3.14193792057279441821e+00,2.0e+00), RES(-2.6580221522968095407e-1, 8.8471445300357562580e-5)}, {FN (sec), ARG(-3.14193792057279441821e+00,-2.0e+00), RES(-2.6580221522968095407e-1, -8.8471445300357562580e-5)}, {FN (sec), ARG(4.71204371340168837179e+00,0.0e+00), RES(-2.8963094332825666135e3, 0.0)}, {FN (sec), ARG(-4.71204371340168837179e+00,0.0e+00), RES(-2.8963094332825666135e3, 0.0)}, {FN (sec), ARG(4.71204371340168837179e+00,1.19209289550781250e-07), RES(-2.8963090880156247720e3, -9.9999986092110711291e-1)}, {FN (sec), ARG(4.71204371340168837179e+00,-1.19209289550781250e-07), RES(-2.8963090880156247720e3, 9.9999986092110711291e-1)}, {FN (sec), ARG(-4.71204371340168837179e+00,1.19209289550781250e-07), RES(-2.8963090880156247720e3, 9.9999986092110711291e-1)}, {FN (sec), ARG(-4.71204371340168837179e+00,-1.19209289550781250e-07), RES(-2.8963090880156247720e3, -9.9999986092110711291e-1)}, {FN (sec), ARG(4.71204371340168837179e+00,5.0e-01), RES(-1.4337901642799849641e-3, -1.9190337944739187224e0)}, {FN (sec), ARG(4.71204371340168837179e+00,-5.0e-01), RES(-1.4337901642799849641e-3, 1.9190337944739187224e0)}, {FN (sec), ARG(-4.71204371340168837179e+00,5.0e-01), RES(-1.4337901642799849641e-3, 1.9190337944739187224e0)}, {FN (sec), ARG(-4.71204371340168837179e+00,-5.0e-01), RES(-1.4337901642799849641e-3, -1.9190337944739187224e0)}, {FN (sec), ARG(4.71204371340168837179e+00,1.0e+00), RES(-3.8576176225225896185e-4, -8.5091800407377002716e-1)}, {FN (sec), ARG(4.71204371340168837179e+00,-1.0e+00), RES(-3.8576176225225896185e-4, 8.5091800407377002716e-1)}, {FN (sec), ARG(-4.71204371340168837179e+00,1.0e+00), RES(-3.8576176225225896185e-4, 8.5091800407377002716e-1)}, {FN (sec), ARG(-4.71204371340168837179e+00,-1.0e+00), RES(-3.8576176225225896185e-4, -8.5091800407377002716e-1)}, {FN (sec), ARG(4.71204371340168837179e+00,2.0e+00), RES(-9.8749461907104871804e-5, -2.7572054583883740766e-1)}, {FN (sec), ARG(4.71204371340168837179e+00,-2.0e+00), RES(-9.8749461907104871804e-5, 2.7572054583883740766e-1)}, {FN (sec), ARG(-4.71204371340168837179e+00,2.0e+00), RES(-9.8749461907104871804e-5, 2.7572054583883740766e-1)}, {FN (sec), ARG(-4.71204371340168837179e+00,-2.0e+00), RES(-9.8749461907104871804e-5, -2.7572054583883740766e-1)}, {FN (sec), ARG(4.71273424736769097620e+00,0.0e+00), RES(2.8963094332856485380e3, 0.0)}, {FN (sec), ARG(-4.71273424736769097620e+00,0.0e+00), RES(2.8963094332856485380e3, 0.0)}, {FN (sec), ARG(4.71273424736769097620e+00,1.19209289550781250e-07), RES(2.8963090880187066954e3, -9.9999986092323528601e-1)}, {FN (sec), ARG(4.71273424736769097620e+00,-1.19209289550781250e-07), RES(2.8963090880187066954e3, 9.9999986092323528601e-1)}, {FN (sec), ARG(-4.71273424736769097620e+00,1.19209289550781250e-07), RES(2.8963090880187066954e3, 9.9999986092323528601e-1)}, {FN (sec), ARG(-4.71273424736769097620e+00,-1.19209289550781250e-07), RES(2.8963090880187066954e3, -9.9999986092323528601e-1)}, {FN (sec), ARG(4.71273424736769097620e+00,5.0e-01), RES(1.4337901642784592884e-3, -1.9190337944739187244e0)}, {FN (sec), ARG(4.71273424736769097620e+00,-5.0e-01), RES(1.4337901642784592884e-3, 1.9190337944739187244e0)}, {FN (sec), ARG(-4.71273424736769097620e+00,5.0e-01), RES(1.4337901642784592884e-3, 1.9190337944739187244e0)}, {FN (sec), ARG(-4.71273424736769097620e+00,-5.0e-01), RES(1.4337901642784592884e-3, -1.9190337944739187244e0)}, {FN (sec), ARG(4.71273424736769097620e+00,1.0e+00), RES(3.8576176225184847794e-4, -8.5091800407377002743e-1)}, {FN (sec), ARG(4.71273424736769097620e+00,-1.0e+00), RES(3.8576176225184847794e-4, 8.5091800407377002743e-1)}, {FN (sec), ARG(-4.71273424736769097620e+00,1.0e+00), RES(3.8576176225184847794e-4, 8.5091800407377002743e-1)}, {FN (sec), ARG(-4.71273424736769097620e+00,-1.0e+00), RES(3.8576176225184847794e-4, -8.5091800407377002743e-1)}, {FN (sec), ARG(4.71273424736769097620e+00,2.0e+00), RES(9.8749461906999793811e-5, -2.7572054583883740770e-1)}, {FN (sec), ARG(4.71273424736769097620e+00,-2.0e+00), RES(9.8749461906999793811e-5, 2.7572054583883740770e-1)}, {FN (sec), ARG(-4.71273424736769097620e+00,2.0e+00), RES(9.8749461906999793811e-5, 2.7572054583883740770e-1)}, {FN (sec), ARG(-4.71273424736769097620e+00,-2.0e+00), RES(9.8749461906999793811e-5, -2.7572054583883740770e-1)}, {FN (sec), ARG(6.28284004019658492979e+00,0.0e+00), RES(1.0000000596046477361e0, 0.0)}, {FN (sec), ARG(-6.28284004019658492979e+00,0.0e+00), RES(1.0000000596046477361e0, 0.0)}, {FN (sec), ARG(6.28284004019658492979e+00,1.19209289550781250e-07), RES(1.0000000596046406307e0, -4.1159035837738355016e-11)}, {FN (sec), ARG(6.28284004019658492979e+00,-1.19209289550781250e-07), RES(1.0000000596046406307e0, 4.1159035837738355016e-11)}, {FN (sec), ARG(-6.28284004019658492979e+00,1.19209289550781250e-07), RES(1.0000000596046406307e0, 4.1159035837738355016e-11)}, {FN (sec), ARG(-6.28284004019658492979e+00,-1.19209289550781250e-07), RES(1.0000000596046406307e0, -4.1159035837738355016e-11)}, {FN (sec), ARG(6.28284004019658492979e+00,5.0e-01), RES(8.8681891425248302490e-1, -1.4149533035950644034e-4)}, {FN (sec), ARG(6.28284004019658492979e+00,-5.0e-01), RES(8.8681891425248302490e-1, 1.4149533035950644034e-4)}, {FN (sec), ARG(-6.28284004019658492979e+00,5.0e-01), RES(8.8681891425248302490e-1, 1.4149533035950644034e-4)}, {FN (sec), ARG(-6.28284004019658492979e+00,-5.0e-01), RES(8.8681891425248302490e-1, -1.4149533035950644034e-4)}, {FN (sec), ARG(6.28284004019658492979e+00,1.0e+00), RES(6.4805426748157480498e-1, -1.7040802567666467726e-4)}, {FN (sec), ARG(6.28284004019658492979e+00,-1.0e+00), RES(6.4805426748157480498e-1, 1.7040802567666467726e-4)}, {FN (sec), ARG(-6.28284004019658492979e+00,1.0e+00), RES(6.4805426748157480498e-1, 1.7040802567666467726e-4)}, {FN (sec), ARG(-6.28284004019658492979e+00,-1.0e+00), RES(6.4805426748157480498e-1, -1.7040802567666467726e-4)}, {FN (sec), ARG(6.28284004019658492979e+00,2.0e+00), RES(2.6580221522968095404e-1, -8.8471445300451703875e-5)}, {FN (sec), ARG(6.28284004019658492979e+00,-2.0e+00), RES(2.6580221522968095404e-1, 8.8471445300451703875e-5)}, {FN (sec), ARG(-6.28284004019658492979e+00,2.0e+00), RES(2.6580221522968095404e-1, 8.8471445300451703875e-5)}, {FN (sec), ARG(-6.28284004019658492979e+00,-2.0e+00), RES(2.6580221522968095404e-1, -8.8471445300451703875e-5)}, {FN (sec), ARG(6.28353057416258753420e+00,0.0e+00), RES(1.0000000596046477359e0, 0.0)}, {FN (sec), ARG(-6.28353057416258753420e+00,0.0e+00), RES(1.0000000596046477359e0, 0.0)}, {FN (sec), ARG(6.28353057416258753420e+00,1.19209289550781250e-07), RES(1.0000000596046406305e0, 4.1159035837679959288e-11)}, {FN (sec), ARG(6.28353057416258753420e+00,-1.19209289550781250e-07), RES(1.0000000596046406305e0, -4.1159035837679959288e-11)}, {FN (sec), ARG(-6.28353057416258753420e+00,1.19209289550781250e-07), RES(1.0000000596046406305e0, -4.1159035837679959288e-11)}, {FN (sec), ARG(-6.28353057416258753420e+00,-1.19209289550781250e-07), RES(1.0000000596046406305e0, 4.1159035837679959288e-11)}, {FN (sec), ARG(6.28353057416258753420e+00,5.0e-01), RES(8.8681891425248302482e-1, 1.4149533035930568923e-4)}, {FN (sec), ARG(6.28353057416258753420e+00,-5.0e-01), RES(8.8681891425248302482e-1, -1.4149533035930568923e-4)}, {FN (sec), ARG(-6.28353057416258753420e+00,5.0e-01), RES(8.8681891425248302482e-1, -1.4149533035930568923e-4)}, {FN (sec), ARG(-6.28353057416258753420e+00,-5.0e-01), RES(8.8681891425248302482e-1, 1.4149533035930568923e-4)}, {FN (sec), ARG(6.28353057416258753420e+00,1.0e+00), RES(6.480542674815748050e-1, 1.7040802567642290534e-4)}, {FN (sec), ARG(6.28353057416258753420e+00,-1.0e+00), RES(6.480542674815748050e-1, -1.7040802567642290534e-4)}, {FN (sec), ARG(-6.28353057416258753420e+00,1.0e+00), RES(6.480542674815748050e-1, -1.7040802567642290534e-4)}, {FN (sec), ARG(-6.28353057416258753420e+00,-1.0e+00), RES(6.480542674815748050e-1, 1.7040802567642290534e-4)}, {FN (sec), ARG(6.28353057416258753420e+00,2.0e+00), RES(2.6580221522968095408e-1, 8.8471445300326182148e-5)}, {FN (sec), ARG(6.28353057416258753420e+00,-2.0e+00), RES(2.6580221522968095408e-1, -8.8471445300326182148e-5)}, {FN (sec), ARG(-6.28353057416258753420e+00,2.0e+00), RES(2.6580221522968095408e-1, -8.8471445300326182148e-5)}, {FN (sec), ARG(-6.28353057416258753420e+00,-2.0e+00), RES(2.6580221522968095408e-1, 8.8471445300326182148e-5)}, {FN (sec), ARG(9.42443269378637893396e+00,0.0e+00), RES(-1.0000000596046477358e0, 0.0)}, {FN (sec), ARG(-9.42443269378637893396e+00,0.0e+00), RES(-1.0000000596046477358e0, 0.0)}, {FN (sec), ARG(9.42443269378637893396e+00,1.19209289550781250e-07), RES(-1.0000000596046406304e0, 4.1159035837647074798e-11)}, {FN (sec), ARG(9.42443269378637893396e+00,-1.19209289550781250e-07), RES(-1.0000000596046406304e0, -4.1159035837647074798e-11)}, {FN (sec), ARG(-9.42443269378637893396e+00,1.19209289550781250e-07), RES(-1.0000000596046406304e0, -4.1159035837647074798e-11)}, {FN (sec), ARG(-9.42443269378637893396e+00,-1.19209289550781250e-07), RES(-1.0000000596046406304e0, 4.1159035837647074798e-11)}, {FN (sec), ARG(9.42443269378637893396e+00,5.0e-01), RES(-8.8681891425248302477e-1, 1.4149533035919263990e-4)}, {FN (sec), ARG(9.42443269378637893396e+00,-5.0e-01), RES(-8.8681891425248302477e-1, -1.4149533035919263990e-4)}, {FN (sec), ARG(-9.42443269378637893396e+00,5.0e-01), RES(-8.8681891425248302477e-1, -1.4149533035919263990e-4)}, {FN (sec), ARG(-9.42443269378637893396e+00,-5.0e-01), RES(-8.8681891425248302477e-1, 1.4149533035919263990e-4)}, {FN (sec), ARG(9.42443269378637893396e+00,1.0e+00), RES(-6.4805426748157480501e-1, 1.7040802567628675588e-4)}, {FN (sec), ARG(9.42443269378637893396e+00,-1.0e+00), RES(-6.4805426748157480501e-1, -1.7040802567628675588e-4)}, {FN (sec), ARG(-9.42443269378637893396e+00,1.0e+00), RES(-6.4805426748157480501e-1, -1.7040802567628675588e-4)}, {FN (sec), ARG(-9.42443269378637893396e+00,-1.0e+00), RES(-6.4805426748157480501e-1, 1.7040802567628675588e-4)}, {FN (sec), ARG(9.42443269378637893396e+00,2.0e+00), RES(-2.6580221522968095410e-1, 8.8471445300255496873e-5)}, {FN (sec), ARG(9.42443269378637893396e+00,-2.0e+00), RES(-2.6580221522968095410e-1, -8.8471445300255496873e-5)}, {FN (sec), ARG(-9.42443269378637893396e+00,2.0e+00), RES(-2.6580221522968095410e-1, -8.8471445300255496873e-5)}, {FN (sec), ARG(-9.42443269378637893396e+00,-2.0e+00), RES(-2.6580221522968095410e-1, 8.8471445300255496873e-5)}, {FN (sec), ARG(9.42512322775237976202e+00,0.0e+00), RES(-1.0000000596046477356e0, 0.0)}, {FN (sec), ARG(-9.42512322775237976202e+00,0.0e+00), RES(-1.0000000596046477356e0, 0.0)}, {FN (sec), ARG(9.42512322775237976202e+00,1.19209289550781250e-07), RES(-1.0000000596046406301e0, -4.1159035837559481207e-11)}, {FN (sec), ARG(9.42512322775237976202e+00,-1.19209289550781250e-07), RES(-1.0000000596046406301e0, 4.1159035837559481207e-11)}, {FN (sec), ARG(-9.42512322775237976202e+00,1.19209289550781250e-07), RES(-1.0000000596046406301e0, 4.1159035837559481207e-11)}, {FN (sec), ARG(-9.42512322775237976202e+00,-1.19209289550781250e-07), RES(-1.0000000596046406301e0, -4.1159035837559481207e-11)}, {FN (sec), ARG(9.42512322775237976202e+00,5.0e-01), RES(-8.8681891425248302464e-1, -1.4149533035889151322e-4)}, {FN (sec), ARG(9.42512322775237976202e+00,-5.0e-01), RES(-8.8681891425248302464e-1, 1.4149533035889151322e-4)}, {FN (sec), ARG(-9.42512322775237976202e+00,5.0e-01), RES(-8.8681891425248302464e-1, 1.4149533035889151322e-4)}, {FN (sec), ARG(-9.42512322775237976202e+00,-5.0e-01), RES(-8.8681891425248302464e-1, -1.4149533035889151322e-4)}, {FN (sec), ARG(9.42512322775237976202e+00,1.0e+00), RES(-6.4805426748157480504e-1, -1.704080256759240980e-4)}, {FN (sec), ARG(9.42512322775237976202e+00,-1.0e+00), RES(-6.4805426748157480504e-1, 1.704080256759240980e-4)}, {FN (sec), ARG(-9.42512322775237976202e+00,1.0e+00), RES(-6.4805426748157480504e-1, 1.704080256759240980e-4)}, {FN (sec), ARG(-9.42512322775237976202e+00,-1.0e+00), RES(-6.4805426748157480504e-1, -1.704080256759240980e-4)}, {FN (sec), ARG(9.42512322775237976202e+00,2.0e+00), RES(-2.6580221522968095416e-1, -8.8471445300067214283e-5)}, {FN (sec), ARG(9.42512322775237976202e+00,-2.0e+00), RES(-2.6580221522968095416e-1, 8.8471445300067214283e-5)}, {FN (sec), ARG(-9.42512322775237976202e+00,2.0e+00), RES(-2.6580221522968095416e-1, 8.8471445300067214283e-5)}, {FN (sec), ARG(-9.42512322775237976202e+00,-2.0e+00), RES(-2.6580221522968095416e-1, -8.8471445300067214283e-5)}, {FN (cot), ARG(-3.45266983001243932001e-04,0.0e+00), RES(-2.8963092606511032136e3, 0.0)}, {FN (cot), ARG(3.45266983001243932001e-04,0.0e+00), RES(2.8963092606511032136e3, 0.0)}, {FN (cot), ARG(-3.45266983001243932001e-04,1.19209289550781250e-07), RES(-2.8963089153841613713e3, -9.9999992052715532101e-1)}, {FN (cot), ARG(-3.45266983001243932001e-04,-1.19209289550781250e-07), RES(-2.8963089153841613713e3, 9.9999992052715532101e-1)}, {FN (cot), ARG(3.45266983001243932001e-04,1.19209289550781250e-07), RES(2.8963089153841613713e3, -9.9999992052715532101e-1)}, {FN (cot), ARG(3.45266983001243932001e-04,-1.19209289550781250e-07), RES(2.8963089153841613713e3, 9.9999992052715532101e-1)}, {FN (cot), ARG(-3.45266983001243932001e-04,5.0e-01), RES(-1.2715121175451222247e-3, -2.1639524637389326002e0)}, {FN (cot), ARG(-3.45266983001243932001e-04,-5.0e-01), RES(-1.2715121175451222247e-3, 2.1639524637389326002e0)}, {FN (cot), ARG(3.45266983001243932001e-04,5.0e-01), RES(1.2715121175451222247e-3, -2.1639524637389326002e0)}, {FN (cot), ARG(3.45266983001243932001e-04,-5.0e-01), RES(1.2715121175451222247e-3, 2.1639524637389326002e0)}, {FN (cot), ARG(-3.45266983001243932001e-04,1.0e+00), RES(-2.4999454374267620687e-4, -1.3130351721648674824e0)}, {FN (cot), ARG(-3.45266983001243932001e-04,-1.0e+00), RES(-2.4999454374267620687e-4, 1.3130351721648674824e0)}, {FN (cot), ARG(3.45266983001243932001e-04,1.0e+00), RES(2.4999454374267620687e-4, -1.3130351721648674824e0)}, {FN (cot), ARG(3.45266983001243932001e-04,-1.0e+00), RES(2.4999454374267620687e-4, 1.3130351721648674824e0)}, {FN (cot), ARG(-3.45266983001243932001e-04,2.0e+00), RES(-2.6247825506563736365e-5, -1.0373147113268752620e0)}, {FN (cot), ARG(-3.45266983001243932001e-04,-2.0e+00), RES(-2.6247825506563736365e-5, 1.0373147113268752620e0)}, {FN (cot), ARG(3.45266983001243932001e-04,2.0e+00), RES(2.6247825506563736365e-5, -1.0373147113268752620e0)}, {FN (cot), ARG(3.45266983001243932001e-04,-2.0e+00), RES(2.6247825506563736365e-5, 1.0373147113268752620e0)}, {FN (cot), ARG(1.57045105981189525579e+00,0.0e+00), RES(3.4526699672104134407e-4, 0.0)}, {FN (cot), ARG(-1.57045105981189525579e+00,0.0e+00), RES(-3.4526699672104134407e-4, 0.0)}, {FN (cot), ARG(1.57045105981189525579e+00,1.19209289550781250e-07), RES(3.4526699672103643753e-4, -1.1920930376163652990e-7)}, {FN (cot), ARG(1.57045105981189525579e+00,-1.19209289550781250e-07), RES(3.4526699672103643753e-4, 1.1920930376163652990e-7)}, {FN (cot), ARG(-1.57045105981189525579e+00,1.19209289550781250e-07), RES(-3.4526699672103643753e-4, -1.1920930376163652990e-7)}, {FN (cot), ARG(-1.57045105981189525579e+00,-1.19209289550781250e-07), RES(-3.4526699672103643753e-4, 1.1920930376163652990e-7)}, {FN (cot), ARG(1.57045105981189525579e+00,5.0e-01), RES(2.7153443992665204631e-4, -4.6211720058436229982e-1)}, {FN (cot), ARG(1.57045105981189525579e+00,-5.0e-01), RES(2.7153443992665204631e-4, 4.6211720058436229982e-1)}, {FN (cot), ARG(-1.57045105981189525579e+00,5.0e-01), RES(-2.7153443992665204631e-4, -4.6211720058436229982e-1)}, {FN (cot), ARG(-1.57045105981189525579e+00,-5.0e-01), RES(-2.7153443992665204631e-4, 4.6211720058436229982e-1)}, {FN (cot), ARG(1.57045105981189525579e+00,1.0e+00), RES(1.4500326960279979918e-4, -7.6159419408485704839e-1)}, {FN (cot), ARG(1.57045105981189525579e+00,-1.0e+00), RES(1.4500326960279979918e-4, 7.6159419408485704839e-1)}, {FN (cot), ARG(-1.57045105981189525579e+00,1.0e+00), RES(-1.4500326960279979918e-4, -7.6159419408485704839e-1)}, {FN (cot), ARG(-1.57045105981189525579e+00,-1.0e+00), RES(-1.4500326960279979918e-4, 7.6159419408485704839e-1)}, {FN (cot), ARG(1.57045105981189525579e+00,2.0e+00), RES(2.4393395410443750226e-5, -9.6402758819508310557e-1)}, {FN (cot), ARG(1.57045105981189525579e+00,-2.0e+00), RES(2.4393395410443750226e-5, 9.6402758819508310557e-1)}, {FN (cot), ARG(-1.57045105981189525579e+00,2.0e+00), RES(-2.4393395410443750226e-5, -9.6402758819508310557e-1)}, {FN (cot), ARG(-1.57045105981189525579e+00,-2.0e+00), RES(-2.4393395410443750226e-5, 9.6402758819508310557e-1)}, {FN (cot), ARG(1.57114159377789786021e+00,0.0e+00), RES(-3.4526699672091887937e-4, 0.0)}, {FN (cot), ARG(-1.57114159377789786021e+00,0.0e+00), RES(3.4526699672091887937e-4, 0.0)}, {FN (cot), ARG(1.57114159377789786021e+00,1.19209289550781250e-07), RES(-3.4526699672091397283e-4, -1.1920930376163652989e-7)}, {FN (cot), ARG(1.57114159377789786021e+00,-1.19209289550781250e-07), RES(-3.4526699672091397283e-4, 1.1920930376163652989e-7)}, {FN (cot), ARG(-1.57114159377789786021e+00,1.19209289550781250e-07), RES(3.4526699672091397283e-4, -1.1920930376163652989e-7)}, {FN (cot), ARG(-1.57114159377789786021e+00,-1.19209289550781250e-07), RES(3.4526699672091397283e-4, 1.1920930376163652989e-7)}, {FN (cot), ARG(1.57114159377789786021e+00,5.0e-01), RES(-2.7153443992655573423e-4, -4.6211720058436229979e-1)}, {FN (cot), ARG(1.57114159377789786021e+00,-5.0e-01), RES(-2.7153443992655573423e-4, 4.6211720058436229979e-1)}, {FN (cot), ARG(-1.57114159377789786021e+00,5.0e-01), RES(2.7153443992655573423e-4, -4.6211720058436229979e-1)}, {FN (cot), ARG(-1.57114159377789786021e+00,-5.0e-01), RES(2.7153443992655573423e-4, 4.6211720058436229979e-1)}, {FN (cot), ARG(1.57114159377789786021e+00,1.0e+00), RES(-1.4500326960274836716e-4, -7.6159419408485704836e-1)}, {FN (cot), ARG(1.57114159377789786021e+00,-1.0e+00), RES(-1.4500326960274836716e-4, 7.6159419408485704836e-1)}, {FN (cot), ARG(-1.57114159377789786021e+00,1.0e+00), RES(1.4500326960274836716e-4, -7.6159419408485704836e-1)}, {FN (cot), ARG(-1.57114159377789786021e+00,-1.0e+00), RES(1.4500326960274836716e-4, 7.6159419408485704836e-1)}, {FN (cot), ARG(1.57114159377789786021e+00,2.0e+00), RES(-2.4393395410435097997e-5, -9.6402758819508310556e-1)}, {FN (cot), ARG(1.57114159377789786021e+00,-2.0e+00), RES(-2.4393395410435097997e-5, 9.6402758819508310556e-1)}, {FN (cot), ARG(-1.57114159377789786021e+00,2.0e+00), RES(2.4393395410435097997e-5, -9.6402758819508310556e-1)}, {FN (cot), ARG(-1.57114159377789786021e+00,-2.0e+00), RES(2.4393395410435097997e-5, 9.6402758819508310556e-1)}, {FN (cot), ARG(3.14124738660679181379e+00,0.0e+00), RES(-2.8963092606495870519e3, 0.0)}, {FN (cot), ARG(-3.14124738660679181379e+00,0.0e+00), RES(2.8963092606495870519e3, 0.0)}, {FN (cot), ARG(3.14124738660679181379e+00,1.19209289550781250e-07), RES(-2.8963089153826452102e3, -9.9999992052610836018e-1)}, {FN (cot), ARG(3.14124738660679181379e+00,-1.19209289550781250e-07), RES(-2.8963089153826452102e3, 9.9999992052610836018e-1)}, {FN (cot), ARG(-3.14124738660679181379e+00,1.19209289550781250e-07), RES(2.8963089153826452102e3, -9.9999992052610836018e-1)}, {FN (cot), ARG(-3.14124738660679181379e+00,-1.19209289550781250e-07), RES(2.8963089153826452102e3, 9.9999992052610836018e-1)}, {FN (cot), ARG(3.14124738660679181379e+00,5.0e-01), RES(-1.2715121175457878359e-3, -2.1639524637389325992e0)}, {FN (cot), ARG(3.14124738660679181379e+00,-5.0e-01), RES(-1.2715121175457878359e-3, 2.1639524637389325992e0)}, {FN (cot), ARG(-3.14124738660679181379e+00,5.0e-01), RES(1.2715121175457878359e-3, -2.1639524637389325992e0)}, {FN (cot), ARG(-3.14124738660679181379e+00,-5.0e-01), RES(1.2715121175457878359e-3, 2.1639524637389325992e0)}, {FN (cot), ARG(3.14124738660679181379e+00,1.0e+00), RES(-2.4999454374280707411e-4, -1.3130351721648674823e0)}, {FN (cot), ARG(3.14124738660679181379e+00,-1.0e+00), RES(-2.4999454374280707411e-4, 1.3130351721648674823e0)}, {FN (cot), ARG(-3.14124738660679181379e+00,1.0e+00), RES(2.4999454374280707411e-4, -1.3130351721648674823e0)}, {FN (cot), ARG(-3.14124738660679181379e+00,-1.0e+00), RES(2.4999454374280707411e-4, 1.3130351721648674823e0)}, {FN (cot), ARG(3.14124738660679181379e+00,2.0e+00), RES(-2.6247825506577476589e-5, -1.0373147113268752620e0)}, {FN (cot), ARG(3.14124738660679181379e+00,-2.0e+00), RES(-2.6247825506577476589e-5, 1.0373147113268752620e0)}, {FN (cot), ARG(-3.14124738660679181379e+00,2.0e+00), RES(2.6247825506577476589e-5, -1.0373147113268752620e0)}, {FN (cot), ARG(-3.14124738660679181379e+00,-2.0e+00), RES(2.6247825506577476589e-5, 1.0373147113268752620e0)}, {FN (cot), ARG(3.14193792057279441821e+00,0.0e+00), RES(2.8963092606516416684e3, 0.0)}, {FN (cot), ARG(-3.14193792057279441821e+00,0.0e+00), RES(-2.8963092606516416684e3, 0.0)}, {FN (cot), ARG(3.14193792057279441821e+00,1.19209289550781250e-07), RES(2.8963089153846998260e3, -9.9999992052752714224e-1)}, {FN (cot), ARG(3.14193792057279441821e+00,-1.19209289550781250e-07), RES(2.8963089153846998260e3, 9.9999992052752714224e-1)}, {FN (cot), ARG(-3.14193792057279441821e+00,1.19209289550781250e-07), RES(-2.8963089153846998260e3, -9.9999992052752714224e-1)}, {FN (cot), ARG(-3.14193792057279441821e+00,-1.19209289550781250e-07), RES(-2.8963089153846998260e3, 9.9999992052752714224e-1)}, {FN (cot), ARG(3.14193792057279441821e+00,5.0e-01), RES(1.2715121175448858373e-3, -2.1639524637389326006e0)}, {FN (cot), ARG(3.14193792057279441821e+00,-5.0e-01), RES(1.2715121175448858373e-3, 2.1639524637389326006e0)}, {FN (cot), ARG(-3.14193792057279441821e+00,5.0e-01), RES(-1.2715121175448858373e-3, -2.1639524637389326006e0)}, {FN (cot), ARG(-3.14193792057279441821e+00,-5.0e-01), RES(-1.2715121175448858373e-3, 2.1639524637389326006e0)}, {FN (cot), ARG(3.14193792057279441821e+00,1.0e+00), RES(2.4999454374262973024e-4, -1.3130351721648674824e0)}, {FN (cot), ARG(3.14193792057279441821e+00,-1.0e+00), RES(2.4999454374262973024e-4, 1.3130351721648674824e0)}, {FN (cot), ARG(-3.14193792057279441821e+00,1.0e+00), RES(-2.4999454374262973024e-4, -1.3130351721648674824e0)}, {FN (cot), ARG(-3.14193792057279441821e+00,-1.0e+00), RES(-2.4999454374262973024e-4, 1.3130351721648674824e0)}, {FN (cot), ARG(3.14193792057279441821e+00,2.0e+00), RES(2.6247825506558856616e-5, -1.0373147113268752620e0)}, {FN (cot), ARG(3.14193792057279441821e+00,-2.0e+00), RES(2.6247825506558856616e-5, 1.0373147113268752620e0)}, {FN (cot), ARG(-3.14193792057279441821e+00,2.0e+00), RES(-2.6247825506558856616e-5, -1.0373147113268752620e0)}, {FN (cot), ARG(-3.14193792057279441821e+00,-2.0e+00), RES(-2.6247825506558856616e-5, 1.0373147113268752620e0)}, {FN (cot), ARG(4.71204371340168837179e+00,0.0e+00), RES(3.4526699672116380876e-4, 0.0)}, {FN (cot), ARG(-4.71204371340168837179e+00,0.0e+00), RES(-3.4526699672116380876e-4, 0.0)}, {FN (cot), ARG(4.71204371340168837179e+00,1.19209289550781250e-07), RES(3.4526699672115890222e-4, -1.1920930376163652991e-7)}, {FN (cot), ARG(4.71204371340168837179e+00,-1.19209289550781250e-07), RES(3.4526699672115890222e-4, 1.1920930376163652991e-7)}, {FN (cot), ARG(-4.71204371340168837179e+00,1.19209289550781250e-07), RES(-3.4526699672115890222e-4, -1.1920930376163652991e-7)}, {FN (cot), ARG(-4.71204371340168837179e+00,-1.19209289550781250e-07), RES(-3.4526699672115890222e-4, 1.1920930376163652991e-7)}, {FN (cot), ARG(4.71204371340168837179e+00,5.0e-01), RES(2.7153443992674835838e-4, -4.6211720058436229985e-1)}, {FN (cot), ARG(4.71204371340168837179e+00,-5.0e-01), RES(2.7153443992674835838e-4, 4.6211720058436229985e-1)}, {FN (cot), ARG(-4.71204371340168837179e+00,5.0e-01), RES(-2.7153443992674835838e-4, -4.6211720058436229985e-1)}, {FN (cot), ARG(-4.71204371340168837179e+00,-5.0e-01), RES(-2.7153443992674835838e-4, 4.6211720058436229985e-1)}, {FN (cot), ARG(4.71204371340168837179e+00,1.0e+00), RES(1.4500326960285123120e-4, -7.6159419408485704842e-1)}, {FN (cot), ARG(4.71204371340168837179e+00,-1.0e+00), RES(1.4500326960285123120e-4, 7.6159419408485704842e-1)}, {FN (cot), ARG(-4.71204371340168837179e+00,1.0e+00), RES(-1.4500326960285123120e-4, -7.6159419408485704842e-1)}, {FN (cot), ARG(-4.71204371340168837179e+00,-1.0e+00), RES(-1.4500326960285123120e-4, 7.6159419408485704842e-1)}, {FN (cot), ARG(4.71204371340168837179e+00,2.0e+00), RES(2.4393395410452402454e-5, -9.6402758819508310557e-1)}, {FN (cot), ARG(4.71204371340168837179e+00,-2.0e+00), RES(2.4393395410452402454e-5, 9.6402758819508310557e-1)}, {FN (cot), ARG(-4.71204371340168837179e+00,2.0e+00), RES(-2.4393395410452402454e-5, -9.6402758819508310557e-1)}, {FN (cot), ARG(-4.71204371340168837179e+00,-2.0e+00), RES(-2.4393395410452402454e-5, 9.6402758819508310557e-1)}, {FN (cot), ARG(4.71273424736769097620e+00,0.0e+00), RES(-3.4526699672079641468e-4, 0.0)}, {FN (cot), ARG(-4.71273424736769097620e+00,0.0e+00), RES(3.4526699672079641468e-4, 0.0)}, {FN (cot), ARG(4.71273424736769097620e+00,1.19209289550781250e-07), RES(-3.4526699672079150814e-4, -1.1920930376163652988e-7)}, {FN (cot), ARG(4.71273424736769097620e+00,-1.19209289550781250e-07), RES(-3.4526699672079150814e-4, 1.1920930376163652988e-7)}, {FN (cot), ARG(-4.71273424736769097620e+00,1.19209289550781250e-07), RES(3.4526699672079150814e-4, -1.1920930376163652988e-7)}, {FN (cot), ARG(-4.71273424736769097620e+00,-1.19209289550781250e-07), RES(3.4526699672079150814e-4, 1.1920930376163652988e-7)}, {FN (cot), ARG(4.71273424736769097620e+00,5.0e-01), RES(-2.7153443992645942216e-4, -4.6211720058436229976e-1)}, {FN (cot), ARG(4.71273424736769097620e+00,-5.0e-01), RES(-2.7153443992645942216e-4, 4.6211720058436229976e-1)}, {FN (cot), ARG(-4.71273424736769097620e+00,5.0e-01), RES(2.7153443992645942216e-4, -4.6211720058436229976e-1)}, {FN (cot), ARG(-4.71273424736769097620e+00,-5.0e-01), RES(2.7153443992645942216e-4, 4.6211720058436229976e-1)}, {FN (cot), ARG(4.71273424736769097620e+00,1.0e+00), RES(-1.4500326960269693514e-4, -7.6159419408485704834e-1)}, {FN (cot), ARG(4.71273424736769097620e+00,-1.0e+00), RES(-1.4500326960269693514e-4, 7.6159419408485704834e-1)}, {FN (cot), ARG(-4.71273424736769097620e+00,1.0e+00), RES(1.4500326960269693514e-4, -7.6159419408485704834e-1)}, {FN (cot), ARG(-4.71273424736769097620e+00,-1.0e+00), RES(1.4500326960269693514e-4, 7.6159419408485704834e-1)}, {FN (cot), ARG(4.71273424736769097620e+00,2.0e+00), RES(-2.4393395410426445768e-5, -9.6402758819508310556e-1)}, {FN (cot), ARG(4.71273424736769097620e+00,-2.0e+00), RES(-2.4393395410426445768e-5, 9.6402758819508310556e-1)}, {FN (cot), ARG(-4.71273424736769097620e+00,2.0e+00), RES(2.4393395410426445768e-5, -9.6402758819508310556e-1)}, {FN (cot), ARG(-4.71273424736769097620e+00,-2.0e+00), RES(2.4393395410426445768e-5, 9.6402758819508310556e-1)}, {FN (cot), ARG(6.28284004019658492979e+00,0.0e+00), RES(-2.8963092606485597437e3, 0.0)}, {FN (cot), ARG(-6.28284004019658492979e+00,0.0e+00), RES(2.8963092606485597437e3, 0.0)}, {FN (cot), ARG(6.28284004019658492979e+00,1.19209289550781250e-07), RES(-2.8963089153816179024e3, -9.9999992052539896914e-1)}, {FN (cot), ARG(6.28284004019658492979e+00,-1.19209289550781250e-07), RES(-2.8963089153816179024e3, 9.9999992052539896914e-1)}, {FN (cot), ARG(-6.28284004019658492979e+00,1.19209289550781250e-07), RES(2.8963089153816179024e3, -9.9999992052539896914e-1)}, {FN (cot), ARG(-6.28284004019658492979e+00,-1.19209289550781250e-07), RES(2.8963089153816179024e3, 9.9999992052539896914e-1)}, {FN (cot), ARG(6.28284004019658492979e+00,5.0e-01), RES(-1.2715121175462388352e-3, -2.1639524637389325986e0)}, {FN (cot), ARG(6.28284004019658492979e+00,-5.0e-01), RES(-1.2715121175462388352e-3, 2.1639524637389325986e0)}, {FN (cot), ARG(-6.28284004019658492979e+00,5.0e-01), RES(1.2715121175462388352e-3, -2.1639524637389325986e0)}, {FN (cot), ARG(-6.28284004019658492979e+00,-5.0e-01), RES(1.2715121175462388352e-3, 2.1639524637389325986e0)}, {FN (cot), ARG(6.28284004019658492979e+00,1.0e+00), RES(-2.4999454374289574604e-4, -1.3130351721648674822e0)}, {FN (cot), ARG(6.28284004019658492979e+00,-1.0e+00), RES(-2.4999454374289574604e-4, 1.3130351721648674822e0)}, {FN (cot), ARG(-6.28284004019658492979e+00,1.0e+00), RES(2.4999454374289574604e-4, -1.3130351721648674822e0)}, {FN (cot), ARG(-6.28284004019658492979e+00,-1.0e+00), RES(2.4999454374289574604e-4, 1.3130351721648674822e0)}, {FN (cot), ARG(6.28284004019658492979e+00,2.0e+00), RES(-2.6247825506586786575e-5, -1.0373147113268752620e0)}, {FN (cot), ARG(6.28284004019658492979e+00,-2.0e+00), RES(-2.6247825506586786575e-5, 1.0373147113268752620e0)}, {FN (cot), ARG(-6.28284004019658492979e+00,2.0e+00), RES(2.6247825506586786575e-5, -1.0373147113268752620e0)}, {FN (cot), ARG(-6.28284004019658492979e+00,-2.0e+00), RES(2.6247825506586786575e-5, 1.0373147113268752620e0)}, {FN (cot), ARG(6.28353057416258753420e+00,0.0e+00), RES(2.8963092606526689766e3, 0.0)}, {FN (cot), ARG(-6.28353057416258753420e+00,0.0e+00), RES(-2.8963092606526689766e3, 0.0)}, {FN (cot), ARG(6.28353057416258753420e+00,1.19209289550781250e-07), RES(2.8963089153857271338e3, -9.9999992052823653327e-1)}, {FN (cot), ARG(6.28353057416258753420e+00,-1.19209289550781250e-07), RES(2.8963089153857271338e3, 9.9999992052823653327e-1)}, {FN (cot), ARG(-6.28353057416258753420e+00,1.19209289550781250e-07), RES(-2.8963089153857271338e3, -9.9999992052823653327e-1)}, {FN (cot), ARG(-6.28353057416258753420e+00,-1.19209289550781250e-07), RES(-2.8963089153857271338e3, 9.9999992052823653327e-1)}, {FN (cot), ARG(6.28353057416258753420e+00,5.0e-01), RES(1.2715121175444348380e-3, -2.1639524637389326012e0)}, {FN (cot), ARG(6.28353057416258753420e+00,-5.0e-01), RES(1.2715121175444348380e-3, 2.1639524637389326012e0)}, {FN (cot), ARG(-6.28353057416258753420e+00,5.0e-01), RES(-1.2715121175444348380e-3, -2.1639524637389326012e0)}, {FN (cot), ARG(-6.28353057416258753420e+00,-5.0e-01), RES(-1.2715121175444348380e-3, 2.1639524637389326012e0)}, {FN (cot), ARG(6.28353057416258753420e+00,1.0e+00), RES(2.4999454374254105830e-4, -1.3130351721648674825e0)}, {FN (cot), ARG(6.28353057416258753420e+00,-1.0e+00), RES(2.4999454374254105830e-4, 1.3130351721648674825e0)}, {FN (cot), ARG(-6.28353057416258753420e+00,1.0e+00), RES(-2.4999454374254105830e-4, -1.3130351721648674825e0)}, {FN (cot), ARG(-6.28353057416258753420e+00,-1.0e+00), RES(-2.4999454374254105830e-4, 1.3130351721648674825e0)}, {FN (cot), ARG(6.28353057416258753420e+00,2.0e+00), RES(2.6247825506549546629e-5, -1.0373147113268752620e0)}, {FN (cot), ARG(6.28353057416258753420e+00,-2.0e+00), RES(2.6247825506549546629e-5, 1.0373147113268752620e0)}, {FN (cot), ARG(-6.28353057416258753420e+00,2.0e+00), RES(-2.6247825506549546629e-5, -1.0373147113268752620e0)}, {FN (cot), ARG(-6.28353057416258753420e+00,-2.0e+00), RES(-2.6247825506549546629e-5, 1.0373147113268752620e0)}, {FN (cot), ARG(9.42443269378637893396e+00,0.0e+00), RES(-2.8963092606549830163e3, 0.0)}, {FN (cot), ARG(-9.42443269378637893396e+00,0.0e+00), RES(2.8963092606549830163e3, 0.0)}, {FN (cot), ARG(9.42443269378637893396e+00,1.19209289550781250e-07), RES(-2.8963089153880411727e3, -9.9999992052983445585e-1)}, {FN (cot), ARG(9.42443269378637893396e+00,-1.19209289550781250e-07), RES(-2.8963089153880411727e3, 9.9999992052983445585e-1)}, {FN (cot), ARG(-9.42443269378637893396e+00,1.19209289550781250e-07), RES(2.8963089153880411727e3, -9.9999992052983445585e-1)}, {FN (cot), ARG(-9.42443269378637893396e+00,-1.19209289550781250e-07), RES(2.8963089153880411727e3, 9.9999992052983445585e-1)}, {FN (cot), ARG(9.42443269378637893396e+00,5.0e-01), RES(-1.2715121175434189499e-3, -2.1639524637389326028e0)}, {FN (cot), ARG(9.42443269378637893396e+00,-5.0e-01), RES(-1.2715121175434189499e-3, 2.1639524637389326028e0)}, {FN (cot), ARG(-9.42443269378637893396e+00,5.0e-01), RES(1.2715121175434189499e-3, -2.1639524637389326028e0)}, {FN (cot), ARG(-9.42443269378637893396e+00,-5.0e-01), RES(1.2715121175434189499e-3, 2.1639524637389326028e0)}, {FN (cot), ARG(9.42443269378637893396e+00,1.0e+00), RES(-2.4999454374234132236e-4, -1.3130351721648674827e0)}, {FN (cot), ARG(9.42443269378637893396e+00,-1.0e+00), RES(-2.4999454374234132236e-4, 1.3130351721648674827e0)}, {FN (cot), ARG(-9.42443269378637893396e+00,1.0e+00), RES(2.4999454374234132236e-4, -1.3130351721648674827e0)}, {FN (cot), ARG(-9.42443269378637893396e+00,-1.0e+00), RES(2.4999454374234132236e-4, 1.3130351721648674827e0)}, {FN (cot), ARG(9.42443269378637893396e+00,2.0e+00), RES(-2.6247825506528575631e-5, -1.0373147113268752620e0)}, {FN (cot), ARG(9.42443269378637893396e+00,-2.0e+00), RES(-2.6247825506528575631e-5, 1.0373147113268752620e0)}, {FN (cot), ARG(-9.42443269378637893396e+00,2.0e+00), RES(2.6247825506528575631e-5, -1.0373147113268752620e0)}, {FN (cot), ARG(-9.42443269378637893396e+00,-2.0e+00), RES(2.6247825506528575631e-5, 1.0373147113268752620e0)}, {FN (cot), ARG(9.42512322775237976202e+00,0.0e+00), RES(2.8963092606611468657e3, 0.0)}, {FN (cot), ARG(-9.42512322775237976202e+00,0.0e+00), RES(-2.8963092606611468657e3, 0.0)}, {FN (cot), ARG(9.42512322775237976202e+00,1.19209289550781250e-07), RES(2.8963089153942050199e3, -9.9999992053409080205e-1)}, {FN (cot), ARG(9.42512322775237976202e+00,-1.19209289550781250e-07), RES(2.8963089153942050199e3, 9.9999992053409080205e-1)}, {FN (cot), ARG(-9.42512322775237976202e+00,1.19209289550781250e-07), RES(-2.8963089153942050199e3, -9.9999992053409080205e-1)}, {FN (cot), ARG(-9.42512322775237976202e+00,-1.19209289550781250e-07), RES(-2.8963089153942050199e3, 9.9999992053409080205e-1)}, {FN (cot), ARG(9.42512322775237976202e+00,5.0e-01), RES(1.2715121175407129542e-3, -2.1639524637389326068e0)}, {FN (cot), ARG(9.42512322775237976202e+00,-5.0e-01), RES(1.2715121175407129542e-3, 2.1639524637389326068e0)}, {FN (cot), ARG(-9.42512322775237976202e+00,5.0e-01), RES(-1.2715121175407129542e-3, -2.1639524637389326068e0)}, {FN (cot), ARG(-9.42512322775237976202e+00,-5.0e-01), RES(-1.2715121175407129542e-3, 2.1639524637389326068e0)}, {FN (cot), ARG(9.42512322775237976202e+00,1.0e+00), RES(2.4999454374180929074e-4, -1.3130351721648674832e0)}, {FN (cot), ARG(9.42512322775237976202e+00,-1.0e+00), RES(2.4999454374180929074e-4, 1.3130351721648674832e0)}, {FN (cot), ARG(-9.42512322775237976202e+00,1.0e+00), RES(-2.4999454374180929074e-4, -1.3130351721648674832e0)}, {FN (cot), ARG(-9.42512322775237976202e+00,-1.0e+00), RES(-2.4999454374180929074e-4, 1.3130351721648674832e0)}, {FN (cot), ARG(9.42512322775237976202e+00,2.0e+00), RES(2.6247825506472715712e-5, -1.0373147113268752621e0)}, {FN (cot), ARG(9.42512322775237976202e+00,-2.0e+00), RES(2.6247825506472715712e-5, 1.0373147113268752621e0)}, {FN (cot), ARG(-9.42512322775237976202e+00,2.0e+00), RES(-2.6247825506472715712e-5, -1.0373147113268752621e0)}, {FN (cot), ARG(-9.42512322775237976202e+00,-2.0e+00), RES(-2.6247825506472715712e-5, 1.0373147113268752621e0)}, {FN (arccsc), ARG(0.0e+00,1.19209289550781250e-07), RES(0, -1.6635532333438690979e1)}, {FN (arccsc), ARG(0.0e+00,-1.19209289550781250e-07), RES(0, 1.6635532333438690979e1)}, {FN (arccsc), ARG(0.0e+00,5.0e-01), RES(0, -1.4436354751788103425e0)}, {FN (arccsc), ARG(0.0e+00,-5.0e-01), RES(0, 1.4436354751788103425e0)}, {FN (arccsc), ARG(0.0e+00,1.0e+00), RES(0, -8.8137358701954302523e-1)}, {FN (arccsc), ARG(0.0e+00,-1.0e+00), RES(0, 8.8137358701954302523e-1)}, {FN (arccsc), ARG(0.0e+00,2.0e+00), RES(0, -4.8121182505960344750e-1)}, {FN (arccsc), ARG(0.0e+00,-2.0e+00), RES(0, 4.8121182505960344750e-1)}, {FN (arccsc), ARG(0.0e+00,8.3886080e+06), RES(0, -1.1920928955078096766e-7)}, {FN (arccsc), ARG(0.0e+00,-8.3886080e+06), RES(0, 1.1920928955078096766e-7)}, {FN (arccsc), ARG(1.19209289550781250e-07,0.0e+00), RES(1.5707963267948966192e0, -1.6635532333438683873e1)}, {FN (arccsc), ARG(-1.19209289550781250e-07,0.0e+00), RES(-1.5707963267948966192e0, 1.6635532333438683873e1)}, {FN (arccsc), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(7.8539816339744120419e-1, -1.6288958743158714771e1)}, {FN (arccsc), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(7.8539816339744120419e-1, 1.6288958743158714771e1)}, {FN (arccsc), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(-7.8539816339744120419e-1, -1.6288958743158714771e1)}, {FN (arccsc), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(-7.8539816339744120419e-1, 1.6288958743158714771e1)}, {FN (arccsc), ARG(1.19209289550781250e-07,5.0e-01), RES(2.1324805998799710740e-7, -1.4436354751787798371e0)}, {FN (arccsc), ARG(1.19209289550781250e-07,-5.0e-01), RES(2.1324805998799710740e-7, 1.4436354751787798371e0)}, {FN (arccsc), ARG(-1.19209289550781250e-07,5.0e-01), RES(-2.1324805998799710740e-7, -1.4436354751787798371e0)}, {FN (arccsc), ARG(-1.19209289550781250e-07,-5.0e-01), RES(-2.1324805998799710740e-7, 1.4436354751787798371e0)}, {FN (arccsc), ARG(1.19209289550781250e-07,1.0e+00), RES(8.4293697021787414719e-8, -8.8137358701953548879e-1)}, {FN (arccsc), ARG(1.19209289550781250e-07,-1.0e+00), RES(8.4293697021787414719e-8, 8.8137358701953548879e-1)}, {FN (arccsc), ARG(-1.19209289550781250e-07,1.0e+00), RES(-8.4293697021787414719e-8, -8.8137358701953548879e-1)}, {FN (arccsc), ARG(-1.19209289550781250e-07,-1.0e+00), RES(-8.4293697021787414719e-8, 8.8137358701953548879e-1)}, {FN (arccsc), ARG(1.19209289550781250e-07,2.0e+00), RES(2.6656007498500149811e-8, -4.8121182505960201756e-1)}, {FN (arccsc), ARG(1.19209289550781250e-07,-2.0e+00), RES(2.6656007498500149811e-8, 4.8121182505960201756e-1)}, {FN (arccsc), ARG(-1.19209289550781250e-07,2.0e+00), RES(-2.6656007498500149811e-8, -4.8121182505960201756e-1)}, {FN (arccsc), ARG(-1.19209289550781250e-07,-2.0e+00), RES(-2.6656007498500149811e-8, 4.8121182505960201756e-1)}, {FN (arccsc), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.6940658945085886411e-21, -1.1920928955078096766e-7)}, {FN (arccsc), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.6940658945085886411e-21, 1.1920928955078096766e-7)}, {FN (arccsc), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(-1.6940658945085886411e-21, -1.1920928955078096766e-7)}, {FN (arccsc), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(-1.6940658945085886411e-21, 1.1920928955078096766e-7)}, {FN (arccsc), ARG(5.0e-01,0.0e+00), RES(1.5707963267948966192e0, -1.3169578969248167086e0)}, {FN (arccsc), ARG(-5.0e-01,0.0e+00), RES(-1.5707963267948966192e0, 1.3169578969248167086e0)}, {FN (arccsc), ARG(5.0e-01,1.19209289550781250e-07), RES(1.5707960514928349710e0, -1.3169578969247948296e0)}, {FN (arccsc), ARG(5.0e-01,-1.19209289550781250e-07), RES(1.5707960514928349710e0, 1.3169578969247948296e0)}, {FN (arccsc), ARG(-5.0e-01,1.19209289550781250e-07), RES(-1.5707960514928349710e0, -1.3169578969247948296e0)}, {FN (arccsc), ARG(-5.0e-01,-1.19209289550781250e-07), RES(-1.5707960514928349710e0, 1.3169578969247948296e0)}, {FN (arccsc), ARG(5.0e-01,5.0e-01), RES(6.6623943249251525510e-1, -1.0612750619050356520e0)}, {FN (arccsc), ARG(5.0e-01,-5.0e-01), RES(6.6623943249251525510e-1, 1.0612750619050356520e0)}, {FN (arccsc), ARG(-5.0e-01,5.0e-01), RES(-6.6623943249251525510e-1, -1.0612750619050356520e0)}, {FN (arccsc), ARG(-5.0e-01,-5.0e-01), RES(-6.6623943249251525510e-1, 1.0612750619050356520e0)}, {FN (arccsc), ARG(5.0e-01,1.0e+00), RES(3.1122579724476109533e-1, -7.6388434595371104541e-1)}, {FN (arccsc), ARG(5.0e-01,-1.0e+00), RES(3.1122579724476109533e-1, 7.6388434595371104541e-1)}, {FN (arccsc), ARG(-5.0e-01,1.0e+00), RES(-3.1122579724476109533e-1, -7.6388434595371104541e-1)}, {FN (arccsc), ARG(-5.0e-01,-1.0e+00), RES(-3.1122579724476109533e-1, 7.6388434595371104541e-1)}, {FN (arccsc), ARG(5.0e-01,2.0e+00), RES(1.0654050295275703990e-1, -4.5717847686917515748e-1)}, {FN (arccsc), ARG(5.0e-01,-2.0e+00), RES(1.0654050295275703990e-1, 4.5717847686917515748e-1)}, {FN (arccsc), ARG(-5.0e-01,2.0e+00), RES(-1.0654050295275703990e-1, -4.5717847686917515748e-1)}, {FN (arccsc), ARG(-5.0e-01,-2.0e+00), RES(-1.0654050295275703990e-1, 4.5717847686917515748e-1)}, {FN (arccsc), ARG(5.0e-01,8.3886080e+06), RES(7.1054273576009261281e-15, -1.1920928955078054414e-7)}, {FN (arccsc), ARG(5.0e-01,-8.3886080e+06), RES(7.1054273576009261281e-15, 1.1920928955078054414e-7)}, {FN (arccsc), ARG(-5.0e-01,8.3886080e+06), RES(-7.1054273576009261281e-15, -1.1920928955078054414e-7)}, {FN (arccsc), ARG(-5.0e-01,-8.3886080e+06), RES(-7.1054273576009261281e-15, 1.1920928955078054414e-7)}, {FN (arccsc), ARG(1.0e+00,0.0e+00), RES(1.5707963267948966192e0, 0.0)}, {FN (arccsc), ARG(-1.0e+00,0.0e+00), RES(-1.5707963267948966192e0, 0.0)}, {FN (arccsc), ARG(1.0e+00,1.19209289550781250e-07), RES(1.5704510597947457801e0, -3.4526696585164602772e-4)}, {FN (arccsc), ARG(1.0e+00,-1.19209289550781250e-07), RES(1.5704510597947457801e0, 3.4526696585164602772e-4)}, {FN (arccsc), ARG(-1.0e+00,1.19209289550781250e-07), RES(-1.5704510597947457801e0, -3.4526696585164602772e-4)}, {FN (arccsc), ARG(-1.0e+00,-1.19209289550781250e-07), RES(-1.5704510597947457801e0, 3.4526696585164602772e-4)}, {FN (arccsc), ARG(1.0e+00,5.0e-01), RES(7.7308635671950473342e-1, -5.3321829058411214108e-1)}, {FN (arccsc), ARG(1.0e+00,-5.0e-01), RES(7.7308635671950473342e-1, 5.3321829058411214108e-1)}, {FN (arccsc), ARG(-1.0e+00,5.0e-01), RES(-7.7308635671950473342e-1, -5.3321829058411214108e-1)}, {FN (arccsc), ARG(-1.0e+00,-5.0e-01), RES(-7.7308635671950473342e-1, 5.3321829058411214108e-1)}, {FN (arccsc), ARG(1.0e+00,1.0e+00), RES(4.5227844715119068206e-1, -5.3063753095251782602e-1)}, {FN (arccsc), ARG(1.0e+00,-1.0e+00), RES(4.5227844715119068206e-1, 5.3063753095251782602e-1)}, {FN (arccsc), ARG(-1.0e+00,1.0e+00), RES(-4.5227844715119068206e-1, -5.3063753095251782602e-1)}, {FN (arccsc), ARG(-1.0e+00,-1.0e+00), RES(-4.5227844715119068206e-1, 5.3063753095251782602e-1)}, {FN (arccsc), ARG(1.0e+00,2.0e+00), RES(1.8631805410781552582e-1, -3.9656823011232897892e-1)}, {FN (arccsc), ARG(1.0e+00,-2.0e+00), RES(1.8631805410781552582e-1, 3.9656823011232897892e-1)}, {FN (arccsc), ARG(-1.0e+00,2.0e+00), RES(-1.8631805410781552582e-1, -3.9656823011232897892e-1)}, {FN (arccsc), ARG(-1.0e+00,-2.0e+00), RES(-1.8631805410781552582e-1, 3.9656823011232897892e-1)}, {FN (arccsc), ARG(1.0e+00,8.3886080e+06), RES(1.4210854715201700795e-14, -1.1920928955077927359e-7)}, {FN (arccsc), ARG(1.0e+00,-8.3886080e+06), RES(1.4210854715201700795e-14, 1.1920928955077927359e-7)}, {FN (arccsc), ARG(-1.0e+00,8.3886080e+06), RES(-1.4210854715201700795e-14, -1.1920928955077927359e-7)}, {FN (arccsc), ARG(-1.0e+00,-8.3886080e+06), RES(-1.4210854715201700795e-14, 1.1920928955077927359e-7)}, {FN (arccsc), ARG(2.0e+00,0.0e+00), RES(5.2359877559829887308e-1, 0.0)}, {FN (arccsc), ARG(-2.0e+00,0.0e+00), RES(-5.2359877559829887308e-1, 0.0)}, {FN (arccsc), ARG(2.0e+00,1.19209289550781250e-07), RES(5.2359877559829648006e-1, -3.4412757706023621662e-8)}, {FN (arccsc), ARG(2.0e+00,-1.19209289550781250e-07), RES(5.2359877559829648006e-1, 3.4412757706023621662e-8)}, {FN (arccsc), ARG(-2.0e+00,1.19209289550781250e-07), RES(-5.2359877559829648006e-1, -3.4412757706023621662e-8)}, {FN (arccsc), ARG(-2.0e+00,-1.19209289550781250e-07), RES(-5.2359877559829648006e-1, 3.4412757706023621662e-8)}, {FN (arccsc), ARG(2.0e+00,5.0e-01), RES(4.8530734047334251250e-1, -1.3261586085051183885e-1)}, {FN (arccsc), ARG(2.0e+00,-5.0e-01), RES(4.8530734047334251250e-1, 1.3261586085051183885e-1)}, {FN (arccsc), ARG(-2.0e+00,5.0e-01), RES(-4.8530734047334251250e-1, -1.3261586085051183885e-1)}, {FN (arccsc), ARG(-2.0e+00,-5.0e-01), RES(-4.8530734047334251250e-1, 1.3261586085051183885e-1)}, {FN (arccsc), ARG(2.0e+00,1.0e+00), RES(4.0158639166780606828e-1, -2.1561241855582964497e-1)}, {FN (arccsc), ARG(2.0e+00,-1.0e+00), RES(4.0158639166780606828e-1, 2.1561241855582964497e-1)}, {FN (arccsc), ARG(-2.0e+00,1.0e+00), RES(-4.0158639166780606828e-1, -2.1561241855582964497e-1)}, {FN (arccsc), ARG(-2.0e+00,-1.0e+00), RES(-4.0158639166780606828e-1, 2.1561241855582964497e-1)}, {FN (arccsc), ARG(2.0e+00,2.0e+00), RES(2.4452216513554014646e-1, -2.5489557334055081773e-1)}, {FN (arccsc), ARG(2.0e+00,-2.0e+00), RES(2.4452216513554014646e-1, 2.5489557334055081773e-1)}, {FN (arccsc), ARG(-2.0e+00,2.0e+00), RES(-2.4452216513554014646e-1, -2.5489557334055081773e-1)}, {FN (arccsc), ARG(-2.0e+00,-2.0e+00), RES(-2.4452216513554014646e-1, 2.5489557334055081773e-1)}, {FN (arccsc), ARG(2.0e+00,8.3886080e+06), RES(2.8421709430402189899e-14, -1.1920928955077419139e-7)}, {FN (arccsc), ARG(2.0e+00,-8.3886080e+06), RES(2.8421709430402189899e-14, 1.1920928955077419139e-7)}, {FN (arccsc), ARG(-2.0e+00,8.3886080e+06), RES(-2.8421709430402189899e-14, -1.1920928955077419139e-7)}, {FN (arccsc), ARG(-2.0e+00,-8.3886080e+06), RES(-2.8421709430402189899e-14, 1.1920928955077419139e-7)}, {FN (arccsc), ARG(8.3886080e+06,0.0e+00), RES(1.1920928955078153234e-7, 0.0)}, {FN (arccsc), ARG(-8.3886080e+06,0.0e+00), RES(-1.1920928955078153234e-7, 0.0)}, {FN (arccsc), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.1920928955078153234e-7, -1.6940658945086127152e-21)}, {FN (arccsc), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.1920928955078153234e-7, 1.6940658945086127152e-21)}, {FN (arccsc), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(-1.1920928955078153234e-7, -1.6940658945086127152e-21)}, {FN (arccsc), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(-1.1920928955078153234e-7, 1.6940658945086127152e-21)}, {FN (arccsc), ARG(8.3886080e+06,5.0e-01), RES(1.1920928955078110883e-7, -7.1054273576010271023e-15)}, {FN (arccsc), ARG(8.3886080e+06,-5.0e-01), RES(1.1920928955078110883e-7, 7.1054273576010271023e-15)}, {FN (arccsc), ARG(-8.3886080e+06,5.0e-01), RES(-1.1920928955078110883e-7, -7.1054273576010271023e-15)}, {FN (arccsc), ARG(-8.3886080e+06,-5.0e-01), RES(-1.1920928955078110883e-7, 7.1054273576010271023e-15)}, {FN (arccsc), ARG(8.3886080e+06,1.0e+00), RES(1.1920928955077983828e-7, -1.4210854715201902743e-14)}, {FN (arccsc), ARG(8.3886080e+06,-1.0e+00), RES(1.1920928955077983828e-7, 1.4210854715201902743e-14)}, {FN (arccsc), ARG(-8.3886080e+06,1.0e+00), RES(-1.1920928955077983828e-7, -1.4210854715201902743e-14)}, {FN (arccsc), ARG(-8.3886080e+06,-1.0e+00), RES(-1.1920928955077983828e-7, 1.4210854715201902743e-14)}, {FN (arccsc), ARG(8.3886080e+06,2.0e+00), RES(1.1920928955077475608e-7, -2.8421709430402593796e-14)}, {FN (arccsc), ARG(8.3886080e+06,-2.0e+00), RES(1.1920928955077475608e-7, 2.8421709430402593796e-14)}, {FN (arccsc), ARG(-8.3886080e+06,2.0e+00), RES(-1.1920928955077475608e-7, -2.8421709430402593796e-14)}, {FN (arccsc), ARG(-8.3886080e+06,-2.0e+00), RES(-1.1920928955077475608e-7, 2.8421709430402593796e-14)}, {FN (arccsc), ARG(8.3886080e+06,8.3886080e+06), RES(5.9604644775390554414e-8, -5.9604644775390695586e-8)}, {FN (arccsc), ARG(8.3886080e+06,-8.3886080e+06), RES(5.9604644775390554414e-8, 5.9604644775390695586e-8)}, {FN (arccsc), ARG(-8.3886080e+06,8.3886080e+06), RES(-5.9604644775390554414e-8, -5.9604644775390695586e-8)}, {FN (arccsc), ARG(-8.3886080e+06,-8.3886080e+06), RES(-5.9604644775390554414e-8, 5.9604644775390695586e-8)}, {FN (arcsec), ARG(0.0e+00,1.19209289550781250e-07), RES(1.5707963267948966192e0, 1.6635532333438690979e1)}, {FN (arcsec), ARG(0.0e+00,-1.19209289550781250e-07), RES(1.5707963267948966192e0, -1.6635532333438690979e1)}, {FN (arcsec), ARG(0.0e+00,5.0e-01), RES(1.5707963267948966192e0, 1.4436354751788103425e0)}, {FN (arcsec), ARG(0.0e+00,-5.0e-01), RES(1.5707963267948966192e0, -1.4436354751788103425e0)}, {FN (arcsec), ARG(0.0e+00,1.0e+00), RES(1.5707963267948966192e0, 8.8137358701954302523e-1)}, {FN (arcsec), ARG(0.0e+00,-1.0e+00), RES(1.5707963267948966192e0, -8.8137358701954302523e-1)}, {FN (arcsec), ARG(0.0e+00,2.0e+00), RES(1.5707963267948966192e0, 4.8121182505960344750e-1)}, {FN (arcsec), ARG(0.0e+00,-2.0e+00), RES(1.5707963267948966192e0, -4.8121182505960344750e-1)}, {FN (arcsec), ARG(0.0e+00,8.3886080e+06), RES(1.5707963267948966192e0, 1.1920928955078096766e-7)}, {FN (arcsec), ARG(0.0e+00,-8.3886080e+06), RES(1.5707963267948966192e0, -1.1920928955078096766e-7)}, {FN (arcsec), ARG(1.19209289550781250e-07,0.0e+00), RES(0, 1.6635532333438683873e1)}, {FN (arcsec), ARG(-1.19209289550781250e-07,0.0e+00), RES(3.1415926535897932385e0, -1.6635532333438683873e1)}, {FN (arcsec), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(7.8539816339745541504e-1, 1.6288958743158714771e1)}, {FN (arcsec), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(7.8539816339745541504e-1, -1.6288958743158714771e1)}, {FN (arcsec), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(2.3561944901923378234e0, 1.6288958743158714771e1)}, {FN (arcsec), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(2.3561944901923378234e0, -1.6288958743158714771e1)}, {FN (arcsec), ARG(1.19209289550781250e-07,5.0e-01), RES(1.5707961135468366312e0, 1.4436354751787798371e0)}, {FN (arcsec), ARG(1.19209289550781250e-07,-5.0e-01), RES(1.5707961135468366312e0, -1.4436354751787798371e0)}, {FN (arcsec), ARG(-1.19209289550781250e-07,5.0e-01), RES(1.5707965400429566072e0, 1.4436354751787798371e0)}, {FN (arcsec), ARG(-1.19209289550781250e-07,-5.0e-01), RES(1.5707965400429566072e0, -1.4436354751787798371e0)}, {FN (arcsec), ARG(1.19209289550781250e-07,1.0e+00), RES(1.5707962425011995974e0, 8.8137358701953548879e-1)}, {FN (arcsec), ARG(1.19209289550781250e-07,-1.0e+00), RES(1.5707962425011995974e0, -8.8137358701953548879e-1)}, {FN (arcsec), ARG(-1.19209289550781250e-07,1.0e+00), RES(1.5707964110885936410e0, 8.8137358701953548879e-1)}, {FN (arcsec), ARG(-1.19209289550781250e-07,-1.0e+00), RES(1.5707964110885936410e0, -8.8137358701953548879e-1)}, {FN (arcsec), ARG(1.19209289550781250e-07,2.0e+00), RES(1.5707963001388891207e0, 4.8121182505960201756e-1)}, {FN (arcsec), ARG(1.19209289550781250e-07,-2.0e+00), RES(1.5707963001388891207e0, -4.8121182505960201756e-1)}, {FN (arcsec), ARG(-1.19209289550781250e-07,2.0e+00), RES(1.5707963534509041177e0, 4.8121182505960201756e-1)}, {FN (arcsec), ARG(-1.19209289550781250e-07,-2.0e+00), RES(1.5707963534509041177e0, -4.8121182505960201756e-1)}, {FN (arcsec), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.5707963267948966192e0, 1.1920928955078096766e-7)}, {FN (arcsec), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.5707963267948966192e0, -1.1920928955078096766e-7)}, {FN (arcsec), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(1.5707963267948966192e0, 1.1920928955078096766e-7)}, {FN (arcsec), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(1.5707963267948966192e0, -1.1920928955078096766e-7)}, {FN (arcsec), ARG(5.0e-01,0.0e+00), RES(0, 1.3169578969248167086e0)}, {FN (arcsec), ARG(-5.0e-01,0.0e+00), RES(3.1415926535897932385e0, -1.3169578969248167086e0)}, {FN (arcsec), ARG(5.0e-01,1.19209289550781250e-07), RES(2.7530206164818516969e-7, 1.3169578969247948296e0)}, {FN (arcsec), ARG(5.0e-01,-1.19209289550781250e-07), RES(2.7530206164818516969e-7, -1.3169578969247948296e0)}, {FN (arcsec), ARG(-5.0e-01,1.19209289550781250e-07), RES(3.1415923782877315903e0, 1.3169578969247948296e0)}, {FN (arcsec), ARG(-5.0e-01,-1.19209289550781250e-07), RES(3.1415923782877315903e0, -1.3169578969247948296e0)}, {FN (arcsec), ARG(5.0e-01,5.0e-01), RES(9.0455689430238136413e-1, 1.0612750619050356520e0)}, {FN (arcsec), ARG(5.0e-01,-5.0e-01), RES(9.0455689430238136413e-1, -1.0612750619050356520e0)}, {FN (arcsec), ARG(-5.0e-01,5.0e-01), RES(2.2370357592874118743e0, 1.0612750619050356520e0)}, {FN (arcsec), ARG(-5.0e-01,-5.0e-01), RES(2.2370357592874118743e0, -1.0612750619050356520e0)}, {FN (arcsec), ARG(5.0e-01,1.0e+00), RES(1.2595705295501355239e0, 7.6388434595371104541e-1)}, {FN (arcsec), ARG(5.0e-01,-1.0e+00), RES(1.2595705295501355239e0, -7.6388434595371104541e-1)}, {FN (arcsec), ARG(-5.0e-01,1.0e+00), RES(1.8820221240396577146e0, 7.6388434595371104541e-1)}, {FN (arcsec), ARG(-5.0e-01,-1.0e+00), RES(1.8820221240396577146e0, -7.6388434595371104541e-1)}, {FN (arcsec), ARG(5.0e-01,2.0e+00), RES(1.4642558238421395793e0, 4.5717847686917515748e-1)}, {FN (arcsec), ARG(5.0e-01,-2.0e+00), RES(1.4642558238421395793e0, -4.5717847686917515748e-1)}, {FN (arcsec), ARG(-5.0e-01,2.0e+00), RES(1.6773368297476536591e0, 4.5717847686917515748e-1)}, {FN (arcsec), ARG(-5.0e-01,-2.0e+00), RES(1.6773368297476536591e0, -4.5717847686917515748e-1)}, {FN (arcsec), ARG(5.0e-01,8.3886080e+06), RES(1.5707963267948895138e0, 1.1920928955078054414e-7)}, {FN (arcsec), ARG(5.0e-01,-8.3886080e+06), RES(1.5707963267948895138e0, -1.1920928955078054414e-7)}, {FN (arcsec), ARG(-5.0e-01,8.3886080e+06), RES(1.5707963267949037247e0, 1.1920928955078054414e-7)}, {FN (arcsec), ARG(-5.0e-01,-8.3886080e+06), RES(1.5707963267949037247e0, -1.1920928955078054414e-7)}, {FN (arcsec), ARG(1.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (arcsec), ARG(-1.0e+00,0.0e+00), RES(3.1415926535897932385e0, 0.0)}, {FN (arcsec), ARG(1.0e+00,1.19209289550781250e-07), RES(3.4526700015083915182e-4, 3.4526696585164602772e-4)}, {FN (arcsec), ARG(1.0e+00,-1.19209289550781250e-07), RES(3.4526700015083915182e-4, -3.4526696585164602772e-4)}, {FN (arcsec), ARG(-1.0e+00,1.19209289550781250e-07), RES(3.1412473865896423993e0, 3.4526696585164602772e-4)}, {FN (arcsec), ARG(-1.0e+00,-1.19209289550781250e-07), RES(3.1412473865896423993e0, -3.4526696585164602772e-4)}, {FN (arcsec), ARG(1.0e+00,5.0e-01), RES(7.9770997007539188581e-1, 5.3321829058411214108e-1)}, {FN (arcsec), ARG(1.0e+00,-5.0e-01), RES(7.9770997007539188581e-1, -5.3321829058411214108e-1)}, {FN (arcsec), ARG(-1.0e+00,5.0e-01), RES(2.3438826835144013527e0, 5.3321829058411214108e-1)}, {FN (arcsec), ARG(-1.0e+00,-5.0e-01), RES(2.3438826835144013527e0, -5.3321829058411214108e-1)}, {FN (arcsec), ARG(1.0e+00,1.0e+00), RES(1.1185178796437059372e0, 5.3063753095251782602e-1)}, {FN (arcsec), ARG(1.0e+00,-1.0e+00), RES(1.1185178796437059372e0, -5.3063753095251782602e-1)}, {FN (arcsec), ARG(-1.0e+00,1.0e+00), RES(2.0230747739460873013e0, 5.3063753095251782602e-1)}, {FN (arcsec), ARG(-1.0e+00,-1.0e+00), RES(2.0230747739460873013e0, -5.3063753095251782602e-1)}, {FN (arcsec), ARG(1.0e+00,2.0e+00), RES(1.3844782726870810934e0, 3.9656823011232897892e-1)}, {FN (arcsec), ARG(1.0e+00,-2.0e+00), RES(1.3844782726870810934e0, -3.9656823011232897892e-1)}, {FN (arcsec), ARG(-1.0e+00,2.0e+00), RES(1.7571143809027121451e0, 3.9656823011232897892e-1)}, {FN (arcsec), ARG(-1.0e+00,-2.0e+00), RES(1.7571143809027121451e0, -3.9656823011232897892e-1)}, {FN (arcsec), ARG(1.0e+00,8.3886080e+06), RES(1.5707963267948824084e0, 1.1920928955077927359e-7)}, {FN (arcsec), ARG(1.0e+00,-8.3886080e+06), RES(1.5707963267948824084e0, -1.1920928955077927359e-7)}, {FN (arcsec), ARG(-1.0e+00,8.3886080e+06), RES(1.5707963267949108301e0, 1.1920928955077927359e-7)}, {FN (arcsec), ARG(-1.0e+00,-8.3886080e+06), RES(1.5707963267949108301e0, -1.1920928955077927359e-7)}, {FN (arcsec), ARG(2.0e+00,0.0e+00), RES(1.0471975511965977462e0, 0.0)}, {FN (arcsec), ARG(-2.0e+00,0.0e+00), RES(2.0943951023931954923e0, 0.0)}, {FN (arcsec), ARG(2.0e+00,1.19209289550781250e-07), RES(1.0471975511966001392e0, 3.4412757706023621662e-8)}, {FN (arcsec), ARG(2.0e+00,-1.19209289550781250e-07), RES(1.0471975511966001392e0, -3.4412757706023621662e-8)}, {FN (arcsec), ARG(-2.0e+00,1.19209289550781250e-07), RES(2.0943951023931930993e0, 3.4412757706023621662e-8)}, {FN (arcsec), ARG(-2.0e+00,-1.19209289550781250e-07), RES(2.0943951023931930993e0, -3.4412757706023621662e-8)}, {FN (arcsec), ARG(2.0e+00,5.0e-01), RES(1.0854889863215541067e0, 1.3261586085051183885e-1)}, {FN (arcsec), ARG(2.0e+00,-5.0e-01), RES(1.0854889863215541067e0, -1.3261586085051183885e-1)}, {FN (arcsec), ARG(-2.0e+00,5.0e-01), RES(2.0561036672682391317e0, 1.3261586085051183885e-1)}, {FN (arcsec), ARG(-2.0e+00,-5.0e-01), RES(2.0561036672682391317e0, -1.3261586085051183885e-1)}, {FN (arcsec), ARG(2.0e+00,1.0e+00), RES(1.1692099351270905509e0, 2.1561241855582964497e-1)}, {FN (arcsec), ARG(2.0e+00,-1.0e+00), RES(1.1692099351270905509e0, -2.1561241855582964497e-1)}, {FN (arcsec), ARG(-2.0e+00,1.0e+00), RES(1.9723827184627026875e0, 2.1561241855582964497e-1)}, {FN (arcsec), ARG(-2.0e+00,-1.0e+00), RES(1.9723827184627026875e0, -2.1561241855582964497e-1)}, {FN (arcsec), ARG(2.0e+00,2.0e+00), RES(1.3262741616593564728e0, 2.5489557334055081773e-1)}, {FN (arcsec), ARG(2.0e+00,-2.0e+00), RES(1.3262741616593564728e0, -2.5489557334055081773e-1)}, {FN (arcsec), ARG(-2.0e+00,2.0e+00), RES(1.8153184919304367657e0, 2.5489557334055081773e-1)}, {FN (arcsec), ARG(-2.0e+00,-2.0e+00), RES(1.8153184919304367657e0, -2.5489557334055081773e-1)}, {FN (arcsec), ARG(2.0e+00,8.3886080e+06), RES(1.5707963267948681975e0, 1.1920928955077419139e-7)}, {FN (arcsec), ARG(2.0e+00,-8.3886080e+06), RES(1.5707963267948681975e0, -1.1920928955077419139e-7)}, {FN (arcsec), ARG(-2.0e+00,8.3886080e+06), RES(1.5707963267949250409e0, 1.1920928955077419139e-7)}, {FN (arcsec), ARG(-2.0e+00,-8.3886080e+06), RES(1.5707963267949250409e0, -1.1920928955077419139e-7)}, {FN (arcsec), ARG(8.3886080e+06,0.0e+00), RES(1.5707962075856070684e0, 0.0)}, {FN (arcsec), ARG(-8.3886080e+06,0.0e+00), RES(1.570796446004186170e0, 0.0)}, {FN (arcsec), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.5707962075856070684e0, 1.6940658945086127152e-21)}, {FN (arcsec), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.5707962075856070684e0, -1.6940658945086127152e-21)}, {FN (arcsec), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(1.570796446004186170e0, 1.6940658945086127152e-21)}, {FN (arcsec), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(1.570796446004186170e0, -1.6940658945086127152e-21)}, {FN (arcsec), ARG(8.3886080e+06,5.0e-01), RES(1.5707962075856070685e0, 7.1054273576010271023e-15)}, {FN (arcsec), ARG(8.3886080e+06,-5.0e-01), RES(1.5707962075856070685e0, -7.1054273576010271023e-15)}, {FN (arcsec), ARG(-8.3886080e+06,5.0e-01), RES(1.570796446004186170e0, 7.1054273576010271023e-15)}, {FN (arcsec), ARG(-8.3886080e+06,-5.0e-01), RES(1.570796446004186170e0, -7.1054273576010271023e-15)}, {FN (arcsec), ARG(8.3886080e+06,1.0e+00), RES(1.5707962075856070685e0, 1.4210854715201902743e-14)}, {FN (arcsec), ARG(8.3886080e+06,-1.0e+00), RES(1.5707962075856070685e0, -1.4210854715201902743e-14)}, {FN (arcsec), ARG(-8.3886080e+06,1.0e+00), RES(1.570796446004186170e0, 1.4210854715201902743e-14)}, {FN (arcsec), ARG(-8.3886080e+06,-1.0e+00), RES(1.570796446004186170e0, -1.4210854715201902743e-14)}, {FN (arcsec), ARG(8.3886080e+06,2.0e+00), RES(1.5707962075856070685e0, 2.8421709430402593796e-14)}, {FN (arcsec), ARG(8.3886080e+06,-2.0e+00), RES(1.5707962075856070685e0, -2.8421709430402593796e-14)}, {FN (arcsec), ARG(-8.3886080e+06,2.0e+00), RES(1.570796446004186170e0, 2.8421709430402593796e-14)}, {FN (arcsec), ARG(-8.3886080e+06,-2.0e+00), RES(1.570796446004186170e0, -2.8421709430402593796e-14)}, {FN (arcsec), ARG(8.3886080e+06,8.3886080e+06), RES(1.5707962671902518438e0, 5.9604644775390695586e-8)}, {FN (arcsec), ARG(8.3886080e+06,-8.3886080e+06), RES(1.5707962671902518438e0, -5.9604644775390695586e-8)}, {FN (arcsec), ARG(-8.3886080e+06,8.3886080e+06), RES(1.5707963863995413946e0, 5.9604644775390695586e-8)}, {FN (arcsec), ARG(-8.3886080e+06,-8.3886080e+06), RES(1.5707963863995413946e0, -5.9604644775390695586e-8)}, {FN (arccot), ARG(0.0e+00,1.19209289550781250e-07), RES(-1.5707963267948966192e0, -1.1920928955078181469e-7)}, {FN (arccot), ARG(0.0e+00,-1.19209289550781250e-07), RES(1.5707963267948966192e0, 1.1920928955078181469e-7)}, {FN (arccot), ARG(0.0e+00,5.0e-01), RES(-1.5707963267948966192e0, -5.4930614433405484570e-1)}, {FN (arccot), ARG(0.0e+00,-5.0e-01), RES(1.5707963267948966192e0, 5.4930614433405484570e-1)}, {FN (arccot), ARG(0.0e+00,2.0e+00), RES(0, -5.4930614433405484570e-1)}, {FN (arccot), ARG(0.0e+00,-2.0e+00), RES(0, 5.4930614433405484570e-1)}, {FN (arccot), ARG(0.0e+00,8.3886080e+06), RES(0, -1.1920928955078181469e-7)}, {FN (arccot), ARG(0.0e+00,-8.3886080e+06), RES(0, 1.1920928955078181469e-7)}, {FN (arccot), ARG(1.19209289550781250e-07,0.0e+00), RES(1.5707962075856070685e0, 0.0)}, {FN (arccot), ARG(-1.19209289550781250e-07,0.0e+00), RES(-1.5707962075856070685e0, 0.0)}, {FN (arccot), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(1.5707962075856070684e0, -1.1920928955078012062e-7)}, {FN (arccot), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.5707962075856070684e0, 1.1920928955078012062e-7)}, {FN (arccot), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(-1.5707962075856070684e0, -1.1920928955078012062e-7)}, {FN (arccot), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(-1.5707962075856070684e0, 1.1920928955078012062e-7)}, {FN (arccot), ARG(1.19209289550781250e-07,5.0e-01), RES(1.5707961678491772182e0, -5.4930614433404221383e-1)}, {FN (arccot), ARG(1.19209289550781250e-07,-5.0e-01), RES(1.5707961678491772182e0, 5.4930614433404221383e-1)}, {FN (arccot), ARG(-1.19209289550781250e-07,5.0e-01), RES(-1.5707961678491772182e0, -5.4930614433404221383e-1)}, {FN (arccot), ARG(-1.19209289550781250e-07,-5.0e-01), RES(-1.5707961678491772182e0, 5.4930614433404221383e-1)}, {FN (arccot), ARG(1.19209289550781250e-07,1.0e+00), RES(7.8539813359512592192e-1, -8.3177661667193446012e0)}, {FN (arccot), ARG(1.19209289550781250e-07,-1.0e+00), RES(7.8539813359512592192e-1, 8.3177661667193446012e0)}, {FN (arccot), ARG(-1.19209289550781250e-07,1.0e+00), RES(-7.8539813359512592192e-1, -8.3177661667193446012e0)}, {FN (arccot), ARG(-1.19209289550781250e-07,-1.0e+00), RES(-7.8539813359512592192e-1, 8.3177661667193446012e0)}, {FN (arccot), ARG(1.19209289550781250e-07,2.0e+00), RES(3.9736429850260144780e-8, -5.4930614433405168773e-1)}, {FN (arccot), ARG(1.19209289550781250e-07,-2.0e+00), RES(3.9736429850260144780e-8, 5.4930614433405168773e-1)}, {FN (arccot), ARG(-1.19209289550781250e-07,2.0e+00), RES(-3.9736429850260144780e-8, -5.4930614433405168773e-1)}, {FN (arccot), ARG(-1.19209289550781250e-07,-2.0e+00), RES(-3.9736429850260144780e-8, 5.4930614433405168773e-1)}, {FN (arccot), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.6940658945086247523e-21, -1.1920928955078181469e-7)}, {FN (arccot), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.6940658945086247523e-21, 1.1920928955078181469e-7)}, {FN (arccot), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(-1.6940658945086247523e-21, -1.1920928955078181469e-7)}, {FN (arccot), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(-1.6940658945086247523e-21, 1.1920928955078181469e-7)}, {FN (arccot), ARG(5.0e-01,0.0e+00), RES(1.1071487177940905030e0, 0.0)}, {FN (arccot), ARG(-5.0e-01,0.0e+00), RES(-1.1071487177940905030e0, 0.0)}, {FN (arccot), ARG(5.0e-01,1.19209289550781250e-07), RES(1.1071487177940859555e0, -9.5367431640625072280e-8)}, {FN (arccot), ARG(5.0e-01,-1.19209289550781250e-07), RES(1.1071487177940859555e0, 9.5367431640625072280e-8)}, {FN (arccot), ARG(-5.0e-01,1.19209289550781250e-07), RES(-1.1071487177940859555e0, -9.5367431640625072280e-8)}, {FN (arccot), ARG(-5.0e-01,-1.19209289550781250e-07), RES(-1.1071487177940859555e0, 9.5367431640625072280e-8)}, {FN (arccot), ARG(5.0e-01,5.0e-01), RES(1.0172219678978513677e0, -4.0235947810852509365e-1)}, {FN (arccot), ARG(5.0e-01,-5.0e-01), RES(1.0172219678978513677e0, 4.0235947810852509365e-1)}, {FN (arccot), ARG(-5.0e-01,5.0e-01), RES(-1.0172219678978513677e0, -4.0235947810852509365e-1)}, {FN (arccot), ARG(-5.0e-01,-5.0e-01), RES(-1.0172219678978513677e0, 4.0235947810852509365e-1)}, {FN (arccot), ARG(5.0e-01,1.0e+00), RES(6.6290883183401623253e-1, -7.0830333601405402006e-1)}, {FN (arccot), ARG(5.0e-01,-1.0e+00), RES(6.6290883183401623253e-1, 7.0830333601405402006e-1)}, {FN (arccot), ARG(-5.0e-01,1.0e+00), RES(-6.6290883183401623253e-1, -7.0830333601405402006e-1)}, {FN (arccot), ARG(-5.0e-01,-1.0e+00), RES(-6.6290883183401623253e-1, 7.0830333601405402006e-1)}, {FN (arccot), ARG(5.0e-01,2.0e+00), RES(1.4924946579308963897e-1, -5.0037000005253101744e-1)}, {FN (arccot), ARG(5.0e-01,-2.0e+00), RES(1.4924946579308963897e-1, 5.0037000005253101744e-1)}, {FN (arccot), ARG(-5.0e-01,2.0e+00), RES(-1.4924946579308963897e-1, -5.0037000005253101744e-1)}, {FN (arccot), ARG(-5.0e-01,-2.0e+00), RES(-1.4924946579308963897e-1, 5.0037000005253101744e-1)}, {FN (arccot), ARG(5.0e-01,8.3886080e+06), RES(7.1054273576010775894e-15, -1.1920928955078139117e-7)}, {FN (arccot), ARG(5.0e-01,-8.3886080e+06), RES(7.1054273576010775894e-15, 1.1920928955078139117e-7)}, {FN (arccot), ARG(-5.0e-01,8.3886080e+06), RES(-7.1054273576010775894e-15, -1.1920928955078139117e-7)}, {FN (arccot), ARG(-5.0e-01,-8.3886080e+06), RES(-7.1054273576010775894e-15, 1.1920928955078139117e-7)}, {FN (arccot), ARG(1.0e+00,0.0e+00), RES(7.8539816339744830962e-1, 0.0)}, {FN (arccot), ARG(-1.0e+00,0.0e+00), RES(-7.8539816339744830962e-1, 0.0)}, {FN (arccot), ARG(1.0e+00,1.19209289550781250e-07), RES(7.8539816339744475690e-1, -5.9604644775390483828e-8)}, {FN (arccot), ARG(1.0e+00,-1.19209289550781250e-07), RES(7.8539816339744475690e-1, 5.9604644775390483828e-8)}, {FN (arccot), ARG(-1.0e+00,1.19209289550781250e-07), RES(-7.8539816339744475690e-1, -5.9604644775390483828e-8)}, {FN (arccot), ARG(-1.0e+00,-1.19209289550781250e-07), RES(-7.8539816339744475690e-1, 5.9604644775390483828e-8)}, {FN (arccot), ARG(1.0e+00,5.0e-01), RES(7.2322066612406759210e-1, -2.3887786125685909036e-1)}, {FN (arccot), ARG(1.0e+00,-5.0e-01), RES(7.2322066612406759210e-1, 2.3887786125685909036e-1)}, {FN (arccot), ARG(-1.0e+00,5.0e-01), RES(-7.2322066612406759210e-1, -2.3887786125685909036e-1)}, {FN (arccot), ARG(-1.0e+00,-5.0e-01), RES(-7.2322066612406759210e-1, 2.3887786125685909036e-1)}, {FN (arccot), ARG(1.0e+00,1.0e+00), RES(5.5357435889704525151e-1, -4.0235947810852509365e-1)}, {FN (arccot), ARG(1.0e+00,-1.0e+00), RES(5.5357435889704525151e-1, 4.0235947810852509365e-1)}, {FN (arccot), ARG(-1.0e+00,1.0e+00), RES(-5.5357435889704525151e-1, -4.0235947810852509365e-1)}, {FN (arccot), ARG(-1.0e+00,-1.0e+00), RES(-5.5357435889704525151e-1, 4.0235947810852509365e-1)}, {FN (arccot), ARG(1.0e+00,2.0e+00), RES(2.3182380450040305811e-1, -4.0235947810852509365e-1)}, {FN (arccot), ARG(1.0e+00,-2.0e+00), RES(2.3182380450040305811e-1, 4.0235947810852509365e-1)}, {FN (arccot), ARG(-1.0e+00,2.0e+00), RES(-2.3182380450040305811e-1, -4.0235947810852509365e-1)}, {FN (arccot), ARG(-1.0e+00,-2.0e+00), RES(-2.3182380450040305811e-1, 4.0235947810852509365e-1)}, {FN (arccot), ARG(1.0e+00,8.3886080e+06), RES(1.4210854715202003717e-14, -1.1920928955078012062e-7)}, {FN (arccot), ARG(1.0e+00,-8.3886080e+06), RES(1.4210854715202003717e-14, 1.1920928955078012062e-7)}, {FN (arccot), ARG(-1.0e+00,8.3886080e+06), RES(-1.4210854715202003717e-14, -1.1920928955078012062e-7)}, {FN (arccot), ARG(-1.0e+00,-8.3886080e+06), RES(-1.4210854715202003717e-14, 1.1920928955078012062e-7)}, {FN (arccot), ARG(2.0e+00,0.0e+00), RES(4.6364760900080611621e-1, 0.0)}, {FN (arccot), ARG(-2.0e+00,0.0e+00), RES(-4.6364760900080611621e-1, 0.0)}, {FN (arccot), ARG(2.0e+00,1.19209289550781250e-07), RES(4.6364760900080497935e-1, -2.3841857910156200307e-8)}, {FN (arccot), ARG(2.0e+00,-1.19209289550781250e-07), RES(4.6364760900080497935e-1, 2.3841857910156200307e-8)}, {FN (arccot), ARG(-2.0e+00,1.19209289550781250e-07), RES(-4.6364760900080497935e-1, -2.3841857910156200307e-8)}, {FN (arccot), ARG(-2.0e+00,-1.19209289550781250e-07), RES(-4.6364760900080497935e-1, 2.3841857910156200307e-8)}, {FN (arccot), ARG(2.0e+00,5.0e-01), RES(4.4423988596007427049e-1, -9.6415620202996167238e-2)}, {FN (arccot), ARG(2.0e+00,-5.0e-01), RES(4.4423988596007427049e-1, 9.6415620202996167238e-2)}, {FN (arccot), ARG(-2.0e+00,5.0e-01), RES(-4.4423988596007427049e-1, -9.6415620202996167238e-2)}, {FN (arccot), ARG(-2.0e+00,-5.0e-01), RES(-4.4423988596007427049e-1, 9.6415620202996167238e-2)}, {FN (arccot), ARG(2.0e+00,1.0e+00), RES(3.9269908169872415481e-1, -1.7328679513998632735e-1)}, {FN (arccot), ARG(2.0e+00,-1.0e+00), RES(3.9269908169872415481e-1, 1.7328679513998632735e-1)}, {FN (arccot), ARG(-2.0e+00,1.0e+00), RES(-3.9269908169872415481e-1, -1.7328679513998632735e-1)}, {FN (arccot), ARG(-2.0e+00,-1.0e+00), RES(-3.9269908169872415481e-1, 1.7328679513998632735e-1)}, {FN (arccot), ARG(2.0e+00,2.0e+00), RES(2.5957305712326147589e-1, -2.3887786125685909036e-1)}, {FN (arccot), ARG(2.0e+00,-2.0e+00), RES(2.5957305712326147589e-1, 2.3887786125685909036e-1)}, {FN (arccot), ARG(-2.0e+00,2.0e+00), RES(-2.5957305712326147589e-1, -2.3887786125685909036e-1)}, {FN (arccot), ARG(-2.0e+00,-2.0e+00), RES(-2.5957305712326147589e-1, 2.3887786125685909036e-1)}, {FN (arccot), ARG(2.0e+00,8.3886080e+06), RES(2.8421709430402795744e-14, -1.1920928955077503843e-7)}, {FN (arccot), ARG(2.0e+00,-8.3886080e+06), RES(2.8421709430402795744e-14, 1.1920928955077503843e-7)}, {FN (arccot), ARG(-2.0e+00,8.3886080e+06), RES(-2.8421709430402795744e-14, -1.1920928955077503843e-7)}, {FN (arccot), ARG(-2.0e+00,-8.3886080e+06), RES(-2.8421709430402795744e-14, 1.1920928955077503843e-7)}, {FN (arccot), ARG(8.3886080e+06,0.0e+00), RES(1.1920928955078068531e-7, 0.0)}, {FN (arccot), ARG(-8.3886080e+06,0.0e+00), RES(-1.1920928955078068531e-7, 0.0)}, {FN (arccot), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.1920928955078068531e-7, -1.6940658945085766040e-21)}, {FN (arccot), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.1920928955078068531e-7, 1.6940658945085766040e-21)}, {FN (arccot), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(-1.1920928955078068531e-7, -1.6940658945085766040e-21)}, {FN (arccot), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(-1.1920928955078068531e-7, 1.6940658945085766040e-21)}, {FN (arccot), ARG(8.3886080e+06,5.0e-01), RES(1.1920928955078026179e-7, -7.1054273576008756410e-15)}, {FN (arccot), ARG(8.3886080e+06,-5.0e-01), RES(1.1920928955078026179e-7, 7.1054273576008756410e-15)}, {FN (arccot), ARG(-8.3886080e+06,5.0e-01), RES(-1.1920928955078026179e-7, -7.1054273576008756410e-15)}, {FN (arccot), ARG(-8.3886080e+06,-5.0e-01), RES(-1.1920928955078026179e-7, 7.1054273576008756410e-15)}, {FN (arccot), ARG(8.3886080e+06,1.0e+00), RES(1.1920928955077899125e-7, -1.4210854715201599821e-14)}, {FN (arccot), ARG(8.3886080e+06,-1.0e+00), RES(1.1920928955077899125e-7, 1.4210854715201599821e-14)}, {FN (arccot), ARG(-8.3886080e+06,1.0e+00), RES(-1.1920928955077899125e-7, -1.4210854715201599821e-14)}, {FN (arccot), ARG(-8.3886080e+06,-1.0e+00), RES(-1.1920928955077899125e-7, 1.4210854715201599821e-14)}, {FN (arccot), ARG(8.3886080e+06,2.0e+00), RES(1.1920928955077390905e-7, -2.8421709430401987951e-14)}, {FN (arccot), ARG(8.3886080e+06,-2.0e+00), RES(1.1920928955077390905e-7, 2.8421709430401987951e-14)}, {FN (arccot), ARG(-8.3886080e+06,2.0e+00), RES(-1.1920928955077390905e-7, -2.8421709430401987951e-14)}, {FN (arccot), ARG(-8.3886080e+06,-2.0e+00), RES(-1.1920928955077390905e-7, 2.8421709430401987951e-14)}, {FN (arccot), ARG(8.3886080e+06,8.3886080e+06), RES(5.9604644775390766172e-8, -5.9604644775390483828e-8)}, {FN (arccot), ARG(8.3886080e+06,-8.3886080e+06), RES(5.9604644775390766172e-8, 5.9604644775390483828e-8)}, {FN (arccot), ARG(-8.3886080e+06,8.3886080e+06), RES(-5.9604644775390766172e-8, -5.9604644775390483828e-8)}, {FN (arccot), ARG(-8.3886080e+06,-8.3886080e+06), RES(-5.9604644775390766172e-8, 5.9604644775390483828e-8)}, {FN (csch), ARG(0.0e+00,-3.45266983001243932001e-04), RES(0, 2.8963094332845964291e3)}, {FN (csch), ARG(0.0e+00,3.45266983001243932001e-04), RES(0, -2.8963094332845964291e3)}, {FN (csch), ARG(0.0e+00,1.57045105981189525579e+00), RES(0, -1.0000000596046477360e0)}, {FN (csch), ARG(0.0e+00,-1.57045105981189525579e+00), RES(0, 1.0000000596046477360e0)}, {FN (csch), ARG(0.0e+00,1.57114159377789786021e+00), RES(0, -1.0000000596046477360e0)}, {FN (csch), ARG(0.0e+00,-1.57114159377789786021e+00), RES(0, 1.0000000596046477360e0)}, {FN (csch), ARG(0.0e+00,3.14124738660679181379e+00), RES(0, -2.8963094332830802676e3)}, {FN (csch), ARG(0.0e+00,-3.14124738660679181379e+00), RES(0, 2.8963094332830802676e3)}, {FN (csch), ARG(0.0e+00,3.14193792057279441821e+00), RES(0, 2.8963094332851348839e3)}, {FN (csch), ARG(0.0e+00,-3.14193792057279441821e+00), RES(0, -2.8963094332851348839e3)}, {FN (csch), ARG(0.0e+00,4.71204371340168837179e+00), RES(0, 1.0000000596046477361e0)}, {FN (csch), ARG(0.0e+00,-4.71204371340168837179e+00), RES(0, -1.0000000596046477361e0)}, {FN (csch), ARG(0.0e+00,4.71273424736769097620e+00), RES(0, 1.0000000596046477359e0)}, {FN (csch), ARG(0.0e+00,-4.71273424736769097620e+00), RES(0, -1.0000000596046477359e0)}, {FN (csch), ARG(0.0e+00,6.28284004019658492979e+00), RES(0, 2.8963094332820529594e3)}, {FN (csch), ARG(0.0e+00,-6.28284004019658492979e+00), RES(0, -2.8963094332820529594e3)}, {FN (csch), ARG(0.0e+00,6.28353057416258753420e+00), RES(0, -2.8963094332861621921e3)}, {FN (csch), ARG(0.0e+00,-6.28353057416258753420e+00), RES(0, 2.8963094332861621921e3)}, {FN (csch), ARG(0.0e+00,9.42443269378637893396e+00), RES(0, -2.8963094332884762317e3)}, {FN (csch), ARG(0.0e+00,-9.42443269378637893396e+00), RES(0, 2.8963094332884762317e3)}, {FN (csch), ARG(0.0e+00,9.42512322775237976202e+00), RES(0, 2.8963094332946400807e3)}, {FN (csch), ARG(0.0e+00,-9.42512322775237976202e+00), RES(0, -2.8963094332946400807e3)}, {FN (csch), ARG(1.19209289550781250e-07,-3.45266983001243932001e-04), RES(9.9999986092250876926e-1, 2.8963090880176545869e3)}, {FN (csch), ARG(1.19209289550781250e-07,3.45266983001243932001e-04), RES(9.9999986092250876926e-1, -2.8963090880176545869e3)}, {FN (csch), ARG(-1.19209289550781250e-07,-3.45266983001243932001e-04), RES(-9.9999986092250876926e-1, 2.8963090880176545869e3)}, {FN (csch), ARG(-1.19209289550781250e-07,3.45266983001243932001e-04), RES(-9.9999986092250876926e-1, -2.8963090880176545869e3)}, {FN (csch), ARG(1.19209289550781250e-07,1.57045105981189525579e+00), RES(4.1159035837716456618e-11, -1.0000000596046406306e0)}, {FN (csch), ARG(1.19209289550781250e-07,-1.57045105981189525579e+00), RES(4.1159035837716456618e-11, 1.0000000596046406306e0)}, {FN (csch), ARG(-1.19209289550781250e-07,1.57045105981189525579e+00), RES(-4.1159035837716456618e-11, -1.0000000596046406306e0)}, {FN (csch), ARG(-1.19209289550781250e-07,-1.57045105981189525579e+00), RES(-4.1159035837716456618e-11, 1.0000000596046406306e0)}, {FN (csch), ARG(1.19209289550781250e-07,1.57114159377789786021e+00), RES(-4.1159035837701857686e-11, -1.0000000596046406306e0)}, {FN (csch), ARG(1.19209289550781250e-07,-1.57114159377789786021e+00), RES(-4.1159035837701857686e-11, 1.0000000596046406306e0)}, {FN (csch), ARG(-1.19209289550781250e-07,1.57114159377789786021e+00), RES(4.1159035837701857686e-11, -1.0000000596046406306e0)}, {FN (csch), ARG(-1.19209289550781250e-07,-1.57114159377789786021e+00), RES(4.1159035837701857686e-11, 1.0000000596046406306e0)}, {FN (csch), ARG(1.19209289550781250e-07,3.14124738660679181379e+00), RES(-9.9999986092146180843e-1, -2.8963090880161384259e3)}, {FN (csch), ARG(1.19209289550781250e-07,-3.14124738660679181379e+00), RES(-9.9999986092146180843e-1, 2.8963090880161384259e3)}, {FN (csch), ARG(-1.19209289550781250e-07,3.14124738660679181379e+00), RES(9.9999986092146180843e-1, -2.8963090880161384259e3)}, {FN (csch), ARG(-1.19209289550781250e-07,-3.14124738660679181379e+00), RES(9.9999986092146180843e-1, 2.8963090880161384259e3)}, {FN (csch), ARG(1.19209289550781250e-07,3.14193792057279441821e+00), RES(-9.9999986092288059049e-1, 2.8963090880181930415e3)}, {FN (csch), ARG(1.19209289550781250e-07,-3.14193792057279441821e+00), RES(-9.9999986092288059049e-1, -2.8963090880181930415e3)}, {FN (csch), ARG(-1.19209289550781250e-07,3.14193792057279441821e+00), RES(9.9999986092288059049e-1, 2.8963090880181930415e3)}, {FN (csch), ARG(-1.19209289550781250e-07,-3.14193792057279441821e+00), RES(9.9999986092288059049e-1, -2.8963090880181930415e3)}, {FN (csch), ARG(1.19209289550781250e-07,4.71204371340168837179e+00), RES(-4.1159035837731055550e-11, 1.0000000596046406306e0)}, {FN (csch), ARG(1.19209289550781250e-07,-4.71204371340168837179e+00), RES(-4.1159035837731055550e-11, -1.0000000596046406306e0)}, {FN (csch), ARG(-1.19209289550781250e-07,4.71204371340168837179e+00), RES(4.1159035837731055550e-11, 1.0000000596046406306e0)}, {FN (csch), ARG(-1.19209289550781250e-07,-4.71204371340168837179e+00), RES(4.1159035837731055550e-11, -1.0000000596046406306e0)}, {FN (csch), ARG(1.19209289550781250e-07,4.71273424736769097620e+00), RES(4.1159035837687258754e-11, 1.0000000596046406305e0)}, {FN (csch), ARG(1.19209289550781250e-07,-4.71273424736769097620e+00), RES(4.1159035837687258754e-11, -1.0000000596046406305e0)}, {FN (csch), ARG(-1.19209289550781250e-07,4.71273424736769097620e+00), RES(-4.1159035837687258754e-11, 1.0000000596046406305e0)}, {FN (csch), ARG(-1.19209289550781250e-07,-4.71273424736769097620e+00), RES(-4.1159035837687258754e-11, -1.0000000596046406305e0)}, {FN (csch), ARG(1.19209289550781250e-07,6.28284004019658492979e+00), RES(9.9999986092075241740e-1, 2.8963090880151111181e3)}, {FN (csch), ARG(1.19209289550781250e-07,-6.28284004019658492979e+00), RES(9.9999986092075241740e-1, -2.8963090880151111181e3)}, {FN (csch), ARG(-1.19209289550781250e-07,6.28284004019658492979e+00), RES(-9.9999986092075241740e-1, 2.8963090880151111181e3)}, {FN (csch), ARG(-1.19209289550781250e-07,-6.28284004019658492979e+00), RES(-9.9999986092075241740e-1, -2.8963090880151111181e3)}, {FN (csch), ARG(1.19209289550781250e-07,6.28353057416258753420e+00), RES(9.9999986092358998153e-1, -2.8963090880192203493e3)}, {FN (csch), ARG(1.19209289550781250e-07,-6.28353057416258753420e+00), RES(9.9999986092358998153e-1, 2.8963090880192203493e3)}, {FN (csch), ARG(-1.19209289550781250e-07,6.28353057416258753420e+00), RES(-9.9999986092358998153e-1, -2.8963090880192203493e3)}, {FN (csch), ARG(-1.19209289550781250e-07,-6.28353057416258753420e+00), RES(-9.9999986092358998153e-1, 2.8963090880192203493e3)}, {FN (csch), ARG(1.19209289550781250e-07,9.42443269378637893396e+00), RES(-9.9999986092518790411e-1, -2.8963090880215343881e3)}, {FN (csch), ARG(1.19209289550781250e-07,-9.42443269378637893396e+00), RES(-9.9999986092518790411e-1, 2.8963090880215343881e3)}, {FN (csch), ARG(-1.19209289550781250e-07,9.42443269378637893396e+00), RES(9.9999986092518790411e-1, -2.8963090880215343881e3)}, {FN (csch), ARG(-1.19209289550781250e-07,-9.42443269378637893396e+00), RES(9.9999986092518790411e-1, 2.8963090880215343881e3)}, {FN (csch), ARG(1.19209289550781250e-07,9.42512322775237976202e+00), RES(-9.9999986092944425030e-1, 2.8963090880276982349e3)}, {FN (csch), ARG(1.19209289550781250e-07,-9.42512322775237976202e+00), RES(-9.9999986092944425030e-1, -2.8963090880276982349e3)}, {FN (csch), ARG(-1.19209289550781250e-07,9.42512322775237976202e+00), RES(9.9999986092944425030e-1, 2.8963090880276982349e3)}, {FN (csch), ARG(-1.19209289550781250e-07,-9.42512322775237976202e+00), RES(9.9999986092944425030e-1, -2.8963090880276982349e3)}, {FN (csch), ARG(5.0e-01,-3.45266983001243932001e-04), RES(1.9190337944739187237e0, 1.4337901642789801243e-3)}, {FN (csch), ARG(5.0e-01,3.45266983001243932001e-04), RES(1.9190337944739187237e0, -1.4337901642789801243e-3)}, {FN (csch), ARG(-5.0e-01,-3.45266983001243932001e-04), RES(-1.9190337944739187237e0, 1.4337901642789801243e-3)}, {FN (csch), ARG(-5.0e-01,3.45266983001243932001e-04), RES(-1.9190337944739187237e0, -1.4337901642789801243e-3)}, {FN (csch), ARG(5.0e-01,1.57045105981189525579e+00), RES(1.4149533035943115868e-4, -8.8681891425248302487e-1)}, {FN (csch), ARG(5.0e-01,-1.57045105981189525579e+00), RES(1.4149533035943115868e-4, 8.8681891425248302487e-1)}, {FN (csch), ARG(-5.0e-01,1.57045105981189525579e+00), RES(-1.4149533035943115868e-4, -8.8681891425248302487e-1)}, {FN (csch), ARG(-5.0e-01,-1.57045105981189525579e+00), RES(-1.4149533035943115868e-4, 8.8681891425248302487e-1)}, {FN (csch), ARG(5.0e-01,1.57114159377789786021e+00), RES(-1.4149533035938097090e-4, -8.8681891425248302485e-1)}, {FN (csch), ARG(5.0e-01,-1.57114159377789786021e+00), RES(-1.4149533035938097090e-4, 8.8681891425248302485e-1)}, {FN (csch), ARG(-5.0e-01,1.57114159377789786021e+00), RES(1.4149533035938097090e-4, -8.8681891425248302485e-1)}, {FN (csch), ARG(-5.0e-01,-1.57114159377789786021e+00), RES(1.4149533035938097090e-4, 8.8681891425248302485e-1)}, {FN (csch), ARG(5.0e-01,3.14124738660679181379e+00), RES(-1.9190337944739187227e0, -1.4337901642797306848e-3)}, {FN (csch), ARG(5.0e-01,-3.14124738660679181379e+00), RES(-1.9190337944739187227e0, 1.4337901642797306848e-3)}, {FN (csch), ARG(-5.0e-01,3.14124738660679181379e+00), RES(1.9190337944739187227e0, -1.4337901642797306848e-3)}, {FN (csch), ARG(-5.0e-01,-3.14124738660679181379e+00), RES(1.9190337944739187227e0, 1.4337901642797306848e-3)}, {FN (csch), ARG(5.0e-01,3.14193792057279441821e+00), RES(-1.9190337944739187241e0, 1.4337901642787135676e-3)}, {FN (csch), ARG(5.0e-01,-3.14193792057279441821e+00), RES(-1.9190337944739187241e0, -1.4337901642787135676e-3)}, {FN (csch), ARG(-5.0e-01,3.14193792057279441821e+00), RES(1.9190337944739187241e0, 1.4337901642787135676e-3)}, {FN (csch), ARG(-5.0e-01,-3.14193792057279441821e+00), RES(1.9190337944739187241e0, -1.4337901642787135676e-3)}, {FN (csch), ARG(5.0e-01,4.71204371340168837179e+00), RES(-1.4149533035948134646e-4, 8.8681891425248302489e-1)}, {FN (csch), ARG(5.0e-01,-4.71204371340168837179e+00), RES(-1.4149533035948134646e-4, -8.8681891425248302489e-1)}, {FN (csch), ARG(-5.0e-01,4.71204371340168837179e+00), RES(1.4149533035948134646e-4, 8.8681891425248302489e-1)}, {FN (csch), ARG(-5.0e-01,-4.71204371340168837179e+00), RES(1.4149533035948134646e-4, -8.8681891425248302489e-1)}, {FN (csch), ARG(5.0e-01,4.71273424736769097620e+00), RES(1.4149533035933078312e-4, 8.8681891425248302483e-1)}, {FN (csch), ARG(5.0e-01,-4.71273424736769097620e+00), RES(1.4149533035933078312e-4, -8.8681891425248302483e-1)}, {FN (csch), ARG(-5.0e-01,4.71273424736769097620e+00), RES(-1.4149533035933078312e-4, 8.8681891425248302483e-1)}, {FN (csch), ARG(-5.0e-01,-4.71273424736769097620e+00), RES(-1.4149533035933078312e-4, -8.8681891425248302483e-1)}, {FN (csch), ARG(5.0e-01,6.28284004019658492979e+00), RES(1.9190337944739187220e0, 1.4337901642802392434e-3)}, {FN (csch), ARG(5.0e-01,-6.28284004019658492979e+00), RES(1.9190337944739187220e0, -1.4337901642802392434e-3)}, {FN (csch), ARG(-5.0e-01,6.28284004019658492979e+00), RES(-1.9190337944739187220e0, 1.4337901642802392434e-3)}, {FN (csch), ARG(-5.0e-01,-6.28284004019658492979e+00), RES(-1.9190337944739187220e0, -1.4337901642802392434e-3)}, {FN (csch), ARG(5.0e-01,6.28353057416258753420e+00), RES(1.9190337944739187248e0, -1.4337901642782050091e-3)}, {FN (csch), ARG(5.0e-01,-6.28353057416258753420e+00), RES(1.9190337944739187248e0, 1.4337901642782050091e-3)}, {FN (csch), ARG(-5.0e-01,6.28353057416258753420e+00), RES(-1.9190337944739187248e0, -1.4337901642782050091e-3)}, {FN (csch), ARG(-5.0e-01,-6.28353057416258753420e+00), RES(-1.9190337944739187248e0, 1.4337901642782050091e-3)}, {FN (csch), ARG(5.0e-01,9.42443269378637893396e+00), RES(-1.9190337944739187263e0, -1.4337901642770594670e-3)}, {FN (csch), ARG(5.0e-01,-9.42443269378637893396e+00), RES(-1.9190337944739187263e0, 1.4337901642770594670e-3)}, {FN (csch), ARG(-5.0e-01,9.42443269378637893396e+00), RES(1.9190337944739187263e0, -1.4337901642770594670e-3)}, {FN (csch), ARG(-5.0e-01,-9.42443269378637893396e+00), RES(1.9190337944739187263e0, 1.4337901642770594670e-3)}, {FN (csch), ARG(5.0e-01,9.42512322775237976202e+00), RES(-1.9190337944739187304e0, 1.4337901642740081154e-3)}, {FN (csch), ARG(5.0e-01,-9.42512322775237976202e+00), RES(-1.9190337944739187304e0, -1.4337901642740081154e-3)}, {FN (csch), ARG(-5.0e-01,9.42512322775237976202e+00), RES(1.9190337944739187304e0, 1.4337901642740081154e-3)}, {FN (csch), ARG(-5.0e-01,-9.42512322775237976202e+00), RES(1.9190337944739187304e0, -1.4337901642740081154e-3)}, {FN (csch), ARG(1.0e+00,-3.45266983001243932001e-04), RES(8.5091800407377002734e-1, 3.8576176225198860914e-4)}, {FN (csch), ARG(1.0e+00,3.45266983001243932001e-04), RES(8.5091800407377002734e-1, -3.8576176225198860914e-4)}, {FN (csch), ARG(-1.0e+00,-3.45266983001243932001e-04), RES(-8.5091800407377002734e-1, 3.8576176225198860914e-4)}, {FN (csch), ARG(-1.0e+00,3.45266983001243932001e-04), RES(-8.5091800407377002734e-1, -3.8576176225198860914e-4)}, {FN (csch), ARG(1.0e+00,1.57045105981189525579e+00), RES(1.7040802567657401279e-4, -6.4805426748157480499e-1)}, {FN (csch), ARG(1.0e+00,-1.57045105981189525579e+00), RES(1.7040802567657401279e-4, 6.4805426748157480499e-1)}, {FN (csch), ARG(-1.0e+00,1.57045105981189525579e+00), RES(-1.7040802567657401279e-4, -6.4805426748157480499e-1)}, {FN (csch), ARG(-1.0e+00,-1.57045105981189525579e+00), RES(-1.7040802567657401279e-4, 6.4805426748157480499e-1)}, {FN (csch), ARG(1.0e+00,1.57114159377789786021e+00), RES(-1.7040802567651356981e-4, -6.4805426748157480499e-1)}, {FN (csch), ARG(1.0e+00,-1.57114159377789786021e+00), RES(-1.7040802567651356981e-4, 6.4805426748157480499e-1)}, {FN (csch), ARG(-1.0e+00,1.57114159377789786021e+00), RES(1.7040802567651356981e-4, -6.4805426748157480499e-1)}, {FN (csch), ARG(-1.0e+00,-1.57114159377789786021e+00), RES(1.7040802567651356981e-4, 6.4805426748157480499e-1)}, {FN (csch), ARG(1.0e+00,3.14124738660679181379e+00), RES(-8.5091800407377002721e-1, -3.8576176225219054787e-4)}, {FN (csch), ARG(1.0e+00,-3.14124738660679181379e+00), RES(-8.5091800407377002721e-1, 3.8576176225219054787e-4)}, {FN (csch), ARG(-1.0e+00,3.14124738660679181379e+00), RES(8.5091800407377002721e-1, -3.8576176225219054787e-4)}, {FN (csch), ARG(-1.0e+00,-3.14124738660679181379e+00), RES(8.5091800407377002721e-1, 3.8576176225219054787e-4)}, {FN (csch), ARG(1.0e+00,3.14193792057279441821e+00), RES(-8.5091800407377002738e-1, 3.8576176225191689193e-4)}, {FN (csch), ARG(1.0e+00,-3.14193792057279441821e+00), RES(-8.5091800407377002738e-1, -3.8576176225191689193e-4)}, {FN (csch), ARG(-1.0e+00,3.14193792057279441821e+00), RES(8.5091800407377002738e-1, 3.8576176225191689193e-4)}, {FN (csch), ARG(-1.0e+00,-3.14193792057279441821e+00), RES(8.5091800407377002738e-1, -3.8576176225191689193e-4)}, {FN (csch), ARG(1.0e+00,4.71204371340168837179e+00), RES(-1.7040802567663445577e-4, 6.4805426748157480498e-1)}, {FN (csch), ARG(1.0e+00,-4.71204371340168837179e+00), RES(-1.7040802567663445577e-4, -6.4805426748157480498e-1)}, {FN (csch), ARG(-1.0e+00,4.71204371340168837179e+00), RES(1.7040802567663445577e-4, 6.4805426748157480498e-1)}, {FN (csch), ARG(-1.0e+00,-4.71204371340168837179e+00), RES(1.7040802567663445577e-4, -6.4805426748157480498e-1)}, {FN (csch), ARG(1.0e+00,4.71273424736769097620e+00), RES(1.7040802567645312683e-4, 6.480542674815748050e-1)}, {FN (csch), ARG(1.0e+00,-4.71273424736769097620e+00), RES(1.7040802567645312683e-4, -6.480542674815748050e-1)}, {FN (csch), ARG(-1.0e+00,4.71273424736769097620e+00), RES(-1.7040802567645312683e-4, 6.480542674815748050e-1)}, {FN (csch), ARG(-1.0e+00,-4.71273424736769097620e+00), RES(-1.7040802567645312683e-4, -6.480542674815748050e-1)}, {FN (csch), ARG(1.0e+00,6.28284004019658492979e+00), RES(8.5091800407377002712e-1, 3.8576176225232737584e-4)}, {FN (csch), ARG(1.0e+00,-6.28284004019658492979e+00), RES(8.5091800407377002712e-1, -3.8576176225232737584e-4)}, {FN (csch), ARG(-1.0e+00,6.28284004019658492979e+00), RES(-8.5091800407377002712e-1, 3.8576176225232737584e-4)}, {FN (csch), ARG(-1.0e+00,-6.28284004019658492979e+00), RES(-8.5091800407377002712e-1, -3.8576176225232737584e-4)}, {FN (csch), ARG(1.0e+00,6.28353057416258753420e+00), RES(8.5091800407377002747e-1, -3.8576176225178006396e-4)}, {FN (csch), ARG(1.0e+00,-6.28353057416258753420e+00), RES(8.5091800407377002747e-1, 3.8576176225178006396e-4)}, {FN (csch), ARG(-1.0e+00,6.28353057416258753420e+00), RES(-8.5091800407377002747e-1, -3.8576176225178006396e-4)}, {FN (csch), ARG(-1.0e+00,-6.28353057416258753420e+00), RES(-8.5091800407377002747e-1, 3.8576176225178006396e-4)}, {FN (csch), ARG(1.0e+00,9.42443269378637893396e+00), RES(-8.5091800407377002767e-1, -3.8576176225147185523e-4)}, {FN (csch), ARG(1.0e+00,-9.42443269378637893396e+00), RES(-8.5091800407377002767e-1, 3.8576176225147185523e-4)}, {FN (csch), ARG(-1.0e+00,9.42443269378637893396e+00), RES(8.5091800407377002767e-1, -3.8576176225147185523e-4)}, {FN (csch), ARG(-1.0e+00,-9.42443269378637893396e+00), RES(8.5091800407377002767e-1, 3.8576176225147185523e-4)}, {FN (csch), ARG(1.0e+00,9.42512322775237976202e+00), RES(-8.5091800407377002820e-1, 3.8576176225065088741e-4)}, {FN (csch), ARG(1.0e+00,-9.42512322775237976202e+00), RES(-8.5091800407377002820e-1, -3.8576176225065088741e-4)}, {FN (csch), ARG(-1.0e+00,9.42512322775237976202e+00), RES(8.5091800407377002820e-1, 3.8576176225065088741e-4)}, {FN (csch), ARG(-1.0e+00,-9.42512322775237976202e+00), RES(8.5091800407377002820e-1, -3.8576176225065088741e-4)}, {FN (csch), ARG(2.0e+00,-3.45266983001243932001e-04), RES(2.7572054583883740768e-1, 9.8749461907035665386e-5)}, {FN (csch), ARG(2.0e+00,3.45266983001243932001e-04), RES(2.7572054583883740768e-1, -9.8749461907035665386e-5)}, {FN (csch), ARG(-2.0e+00,-3.45266983001243932001e-04), RES(-2.7572054583883740768e-1, 9.8749461907035665386e-5)}, {FN (csch), ARG(-2.0e+00,3.45266983001243932001e-04), RES(-2.7572054583883740768e-1, -9.8749461907035665386e-5)}, {FN (csch), ARG(2.0e+00,1.57045105981189525579e+00), RES(8.8471445300404633228e-5, -2.6580221522968095406e-1)}, {FN (csch), ARG(2.0e+00,-1.57045105981189525579e+00), RES(8.8471445300404633228e-5, 2.6580221522968095406e-1)}, {FN (csch), ARG(-2.0e+00,1.57045105981189525579e+00), RES(-8.8471445300404633228e-5, -2.6580221522968095406e-1)}, {FN (csch), ARG(-2.0e+00,-1.57045105981189525579e+00), RES(-8.8471445300404633228e-5, 2.6580221522968095406e-1)}, {FN (csch), ARG(2.0e+00,1.57114159377789786021e+00), RES(-8.8471445300373252796e-5, -2.6580221522968095407e-1)}, {FN (csch), ARG(2.0e+00,-1.57114159377789786021e+00), RES(-8.8471445300373252796e-5, 2.6580221522968095407e-1)}, {FN (csch), ARG(-2.0e+00,1.57114159377789786021e+00), RES(8.8471445300373252796e-5, -2.6580221522968095407e-1)}, {FN (csch), ARG(-2.0e+00,-1.57114159377789786021e+00), RES(8.8471445300373252796e-5, 2.6580221522968095407e-1)}, {FN (csch), ARG(2.0e+00,3.14124738660679181379e+00), RES(-2.7572054583883740766e-1, -9.8749461907087358805e-5)}, {FN (csch), ARG(2.0e+00,-3.14124738660679181379e+00), RES(-2.7572054583883740766e-1, 9.8749461907087358805e-5)}, {FN (csch), ARG(-2.0e+00,3.14124738660679181379e+00), RES(2.7572054583883740766e-1, -9.8749461907087358805e-5)}, {FN (csch), ARG(-2.0e+00,-3.14124738660679181379e+00), RES(2.7572054583883740766e-1, 9.8749461907087358805e-5)}, {FN (csch), ARG(2.0e+00,3.14193792057279441821e+00), RES(-2.7572054583883740769e-1, 9.8749461907017306810e-5)}, {FN (csch), ARG(2.0e+00,-3.14193792057279441821e+00), RES(-2.7572054583883740769e-1, -9.8749461907017306810e-5)}, {FN (csch), ARG(-2.0e+00,3.14193792057279441821e+00), RES(2.7572054583883740769e-1, 9.8749461907017306810e-5)}, {FN (csch), ARG(-2.0e+00,-3.14193792057279441821e+00), RES(2.7572054583883740769e-1, -9.8749461907017306810e-5)}, {FN (csch), ARG(2.0e+00,4.71204371340168837179e+00), RES(-8.8471445300436013659e-5, 2.6580221522968095405e-1)}, {FN (csch), ARG(2.0e+00,-4.71204371340168837179e+00), RES(-8.8471445300436013659e-5, -2.6580221522968095405e-1)}, {FN (csch), ARG(-2.0e+00,4.71204371340168837179e+00), RES(8.8471445300436013659e-5, 2.6580221522968095405e-1)}, {FN (csch), ARG(-2.0e+00,-4.71204371340168837179e+00), RES(8.8471445300436013659e-5, -2.6580221522968095405e-1)}, {FN (csch), ARG(2.0e+00,4.71273424736769097620e+00), RES(8.8471445300341872364e-5, 2.6580221522968095408e-1)}, {FN (csch), ARG(2.0e+00,-4.71273424736769097620e+00), RES(8.8471445300341872364e-5, -2.6580221522968095408e-1)}, {FN (csch), ARG(-2.0e+00,4.71273424736769097620e+00), RES(-8.8471445300341872364e-5, 2.6580221522968095408e-1)}, {FN (csch), ARG(-2.0e+00,-4.71273424736769097620e+00), RES(-8.8471445300341872364e-5, -2.6580221522968095408e-1)}, {FN (csch), ARG(2.0e+00,6.28284004019658492979e+00), RES(2.7572054583883740765e-1, 9.8749461907122384803e-5)}, {FN (csch), ARG(2.0e+00,-6.28284004019658492979e+00), RES(2.7572054583883740765e-1, -9.8749461907122384803e-5)}, {FN (csch), ARG(-2.0e+00,6.28284004019658492979e+00), RES(-2.7572054583883740765e-1, 9.8749461907122384803e-5)}, {FN (csch), ARG(-2.0e+00,-6.28284004019658492979e+00), RES(-2.7572054583883740765e-1, -9.8749461907122384803e-5)}, {FN (csch), ARG(2.0e+00,6.28353057416258753420e+00), RES(2.7572054583883740770e-1, -9.8749461906982280812e-5)}, {FN (csch), ARG(2.0e+00,-6.28353057416258753420e+00), RES(2.7572054583883740770e-1, 9.8749461906982280812e-5)}, {FN (csch), ARG(-2.0e+00,6.28353057416258753420e+00), RES(-2.7572054583883740770e-1, -9.8749461906982280812e-5)}, {FN (csch), ARG(-2.0e+00,-6.28353057416258753420e+00), RES(-2.7572054583883740770e-1, 9.8749461906982280812e-5)}, {FN (csch), ARG(2.0e+00,9.42443269378637893396e+00), RES(-2.7572054583883740773e-1, -9.874946190690338380e-5)}, {FN (csch), ARG(2.0e+00,-9.42443269378637893396e+00), RES(-2.7572054583883740773e-1, 9.874946190690338380e-5)}, {FN (csch), ARG(-2.0e+00,9.42443269378637893396e+00), RES(2.7572054583883740773e-1, -9.874946190690338380e-5)}, {FN (csch), ARG(-2.0e+00,-9.42443269378637893396e+00), RES(2.7572054583883740773e-1, 9.874946190690338380e-5)}, {FN (csch), ARG(2.0e+00,9.42512322775237976202e+00), RES(-2.7572054583883740781e-1, 9.8749461906693227814e-5)}, {FN (csch), ARG(2.0e+00,-9.42512322775237976202e+00), RES(-2.7572054583883740781e-1, -9.8749461906693227814e-5)}, {FN (csch), ARG(-2.0e+00,9.42512322775237976202e+00), RES(2.7572054583883740781e-1, 9.8749461906693227814e-5)}, {FN (csch), ARG(-2.0e+00,-9.42512322775237976202e+00), RES(2.7572054583883740781e-1, -9.8749461906693227814e-5)}, {FN (sech), ARG(0.0e+00,-3.45266983001243932001e-04), RES(1.0000000596046477360e0, 0.0)}, {FN (sech), ARG(0.0e+00,3.45266983001243932001e-04), RES(1.0000000596046477360e0, 0.0)}, {FN (sech), ARG(0.0e+00,1.57045105981189525579e+00), RES(2.8963094332835939217e3, 0.0)}, {FN (sech), ARG(0.0e+00,-1.57045105981189525579e+00), RES(2.8963094332835939217e3, 0.0)}, {FN (sech), ARG(0.0e+00,1.57114159377789786021e+00), RES(-2.8963094332846212298e3, 0.0)}, {FN (sech), ARG(0.0e+00,-1.57114159377789786021e+00), RES(-2.8963094332846212298e3, 0.0)}, {FN (sech), ARG(0.0e+00,3.14124738660679181379e+00), RES(-1.0000000596046477360e0, 0.0)}, {FN (sech), ARG(0.0e+00,-3.14124738660679181379e+00), RES(-1.0000000596046477360e0, 0.0)}, {FN (sech), ARG(0.0e+00,3.14193792057279441821e+00), RES(-1.0000000596046477360e0, 0.0)}, {FN (sech), ARG(0.0e+00,-3.14193792057279441821e+00), RES(-1.0000000596046477360e0, 0.0)}, {FN (sech), ARG(0.0e+00,4.71204371340168837179e+00), RES(-2.8963094332825666135e3, 0.0)}, {FN (sech), ARG(0.0e+00,-4.71204371340168837179e+00), RES(-2.8963094332825666135e3, 0.0)}, {FN (sech), ARG(0.0e+00,4.71273424736769097620e+00), RES(2.8963094332856485380e3, 0.0)}, {FN (sech), ARG(0.0e+00,-4.71273424736769097620e+00), RES(2.8963094332856485380e3, 0.0)}, {FN (sech), ARG(0.0e+00,6.28284004019658492979e+00), RES(1.0000000596046477361e0, 0.0)}, {FN (sech), ARG(0.0e+00,-6.28284004019658492979e+00), RES(1.0000000596046477361e0, 0.0)}, {FN (sech), ARG(0.0e+00,6.28353057416258753420e+00), RES(1.0000000596046477359e0, 0.0)}, {FN (sech), ARG(0.0e+00,-6.28353057416258753420e+00), RES(1.0000000596046477359e0, 0.0)}, {FN (sech), ARG(0.0e+00,9.42443269378637893396e+00), RES(-1.0000000596046477358e0, 0.0)}, {FN (sech), ARG(0.0e+00,-9.42443269378637893396e+00), RES(-1.0000000596046477358e0, 0.0)}, {FN (sech), ARG(0.0e+00,9.42512322775237976202e+00), RES(-1.0000000596046477356e0, 0.0)}, {FN (sech), ARG(0.0e+00,-9.42512322775237976202e+00), RES(-1.0000000596046477356e0, 0.0)}, {FN (sech), ARG(1.19209289550781250e-07,-3.45266983001243932001e-04), RES(1.0000000596046406306e0, 4.1159035837702210125e-11)}, {FN (sech), ARG(1.19209289550781250e-07,3.45266983001243932001e-04), RES(1.0000000596046406306e0, -4.1159035837702210125e-11)}, {FN (sech), ARG(-1.19209289550781250e-07,-3.45266983001243932001e-04), RES(1.0000000596046406306e0, -4.1159035837702210125e-11)}, {FN (sech), ARG(-1.19209289550781250e-07,3.45266983001243932001e-04), RES(1.0000000596046406306e0, 4.1159035837702210125e-11)}, {FN (sech), ARG(1.19209289550781250e-07,1.57045105981189525579e+00), RES(2.8963090880166520798e3, -9.9999986092181650394e-1)}, {FN (sech), ARG(1.19209289550781250e-07,-1.57045105981189525579e+00), RES(2.8963090880166520798e3, 9.9999986092181650394e-1)}, {FN (sech), ARG(-1.19209289550781250e-07,1.57045105981189525579e+00), RES(2.8963090880166520798e3, 9.9999986092181650394e-1)}, {FN (sech), ARG(-1.19209289550781250e-07,-1.57045105981189525579e+00), RES(2.8963090880166520798e3, -9.9999986092181650394e-1)}, {FN (sech), ARG(1.19209289550781250e-07,1.57114159377789786021e+00), RES(-2.8963090880176793876e3, -9.9999986092252589498e-1)}, {FN (sech), ARG(1.19209289550781250e-07,-1.57114159377789786021e+00), RES(-2.8963090880176793876e3, 9.9999986092252589498e-1)}, {FN (sech), ARG(-1.19209289550781250e-07,1.57114159377789786021e+00), RES(-2.8963090880176793876e3, 9.9999986092252589498e-1)}, {FN (sech), ARG(-1.19209289550781250e-07,-1.57114159377789786021e+00), RES(-2.8963090880176793876e3, -9.9999986092252589498e-1)}, {FN (sech), ARG(1.19209289550781250e-07,3.14124738660679181379e+00), RES(-1.0000000596046406306e0, -4.1159035837723756084e-11)}, {FN (sech), ARG(1.19209289550781250e-07,-3.14124738660679181379e+00), RES(-1.0000000596046406306e0, 4.1159035837723756084e-11)}, {FN (sech), ARG(-1.19209289550781250e-07,3.14124738660679181379e+00), RES(-1.0000000596046406306e0, 4.1159035837723756084e-11)}, {FN (sech), ARG(-1.19209289550781250e-07,-3.14124738660679181379e+00), RES(-1.0000000596046406306e0, -4.1159035837723756084e-11)}, {FN (sech), ARG(1.19209289550781250e-07,3.14193792057279441821e+00), RES(-1.0000000596046406305e0, 4.1159035837694558220e-11)}, {FN (sech), ARG(1.19209289550781250e-07,-3.14193792057279441821e+00), RES(-1.0000000596046406305e0, -4.1159035837694558220e-11)}, {FN (sech), ARG(-1.19209289550781250e-07,3.14193792057279441821e+00), RES(-1.0000000596046406305e0, -4.1159035837694558220e-11)}, {FN (sech), ARG(-1.19209289550781250e-07,-3.14193792057279441821e+00), RES(-1.0000000596046406305e0, 4.1159035837694558220e-11)}, {FN (sech), ARG(1.19209289550781250e-07,4.71204371340168837179e+00), RES(-2.8963090880156247720e3, 9.9999986092110711291e-1)}, {FN (sech), ARG(1.19209289550781250e-07,-4.71204371340168837179e+00), RES(-2.8963090880156247720e3, -9.9999986092110711291e-1)}, {FN (sech), ARG(-1.19209289550781250e-07,4.71204371340168837179e+00), RES(-2.8963090880156247720e3, -9.9999986092110711291e-1)}, {FN (sech), ARG(-1.19209289550781250e-07,-4.71204371340168837179e+00), RES(-2.8963090880156247720e3, 9.9999986092110711291e-1)}, {FN (sech), ARG(1.19209289550781250e-07,4.71273424736769097620e+00), RES(2.8963090880187066954e3, 9.9999986092323528601e-1)}, {FN (sech), ARG(1.19209289550781250e-07,-4.71273424736769097620e+00), RES(2.8963090880187066954e3, -9.9999986092323528601e-1)}, {FN (sech), ARG(-1.19209289550781250e-07,4.71273424736769097620e+00), RES(2.8963090880187066954e3, -9.9999986092323528601e-1)}, {FN (sech), ARG(-1.19209289550781250e-07,-4.71273424736769097620e+00), RES(2.8963090880187066954e3, 9.9999986092323528601e-1)}, {FN (sech), ARG(1.19209289550781250e-07,6.28284004019658492979e+00), RES(1.0000000596046406307e0, 4.1159035837738355016e-11)}, {FN (sech), ARG(1.19209289550781250e-07,-6.28284004019658492979e+00), RES(1.0000000596046406307e0, -4.1159035837738355016e-11)}, {FN (sech), ARG(-1.19209289550781250e-07,6.28284004019658492979e+00), RES(1.0000000596046406307e0, -4.1159035837738355016e-11)}, {FN (sech), ARG(-1.19209289550781250e-07,-6.28284004019658492979e+00), RES(1.0000000596046406307e0, 4.1159035837738355016e-11)}, {FN (sech), ARG(1.19209289550781250e-07,6.28353057416258753420e+00), RES(1.0000000596046406305e0, -4.1159035837679959288e-11)}, {FN (sech), ARG(1.19209289550781250e-07,-6.28353057416258753420e+00), RES(1.0000000596046406305e0, 4.1159035837679959288e-11)}, {FN (sech), ARG(-1.19209289550781250e-07,6.28353057416258753420e+00), RES(1.0000000596046406305e0, 4.1159035837679959288e-11)}, {FN (sech), ARG(-1.19209289550781250e-07,-6.28353057416258753420e+00), RES(1.0000000596046406305e0, -4.1159035837679959288e-11)}, {FN (sech), ARG(1.19209289550781250e-07,9.42443269378637893396e+00), RES(-1.0000000596046406304e0, -4.1159035837647074798e-11)}, {FN (sech), ARG(1.19209289550781250e-07,-9.42443269378637893396e+00), RES(-1.0000000596046406304e0, 4.1159035837647074798e-11)}, {FN (sech), ARG(-1.19209289550781250e-07,9.42443269378637893396e+00), RES(-1.0000000596046406304e0, 4.1159035837647074798e-11)}, {FN (sech), ARG(-1.19209289550781250e-07,-9.42443269378637893396e+00), RES(-1.0000000596046406304e0, -4.1159035837647074798e-11)}, {FN (sech), ARG(1.19209289550781250e-07,9.42512322775237976202e+00), RES(-1.0000000596046406301e0, 4.1159035837559481207e-11)}, {FN (sech), ARG(1.19209289550781250e-07,-9.42512322775237976202e+00), RES(-1.0000000596046406301e0, -4.1159035837559481207e-11)}, {FN (sech), ARG(-1.19209289550781250e-07,9.42512322775237976202e+00), RES(-1.0000000596046406301e0, -4.1159035837559481207e-11)}, {FN (sech), ARG(-1.19209289550781250e-07,-9.42512322775237976202e+00), RES(-1.0000000596046406301e0, 4.1159035837559481207e-11)}, {FN (sech), ARG(5.0e-01,-3.45266983001243932001e-04), RES(8.8681891425248302485e-1, 1.4149533035938218250e-4)}, {FN (sech), ARG(5.0e-01,3.45266983001243932001e-04), RES(8.8681891425248302485e-1, -1.4149533035938218250e-4)}, {FN (sech), ARG(-5.0e-01,-3.45266983001243932001e-04), RES(8.8681891425248302485e-1, -1.4149533035938218250e-4)}, {FN (sech), ARG(-5.0e-01,3.45266983001243932001e-04), RES(8.8681891425248302485e-1, 1.4149533035938218250e-4)}, {FN (sech), ARG(5.0e-01,1.57045105981189525579e+00), RES(1.4337901642794764055e-3, -1.9190337944739187231e0)}, {FN (sech), ARG(5.0e-01,-1.57045105981189525579e+00), RES(1.4337901642794764055e-3, 1.9190337944739187231e0)}, {FN (sech), ARG(-5.0e-01,1.57045105981189525579e+00), RES(1.4337901642794764055e-3, 1.9190337944739187231e0)}, {FN (sech), ARG(-5.0e-01,-1.57045105981189525579e+00), RES(1.4337901642794764055e-3, -1.9190337944739187231e0)}, {FN (sech), ARG(5.0e-01,1.57114159377789786021e+00), RES(-1.4337901642789678469e-3, -1.9190337944739187237e0)}, {FN (sech), ARG(5.0e-01,-1.57114159377789786021e+00), RES(-1.4337901642789678469e-3, 1.9190337944739187237e0)}, {FN (sech), ARG(-5.0e-01,1.57114159377789786021e+00), RES(-1.4337901642789678469e-3, 1.9190337944739187237e0)}, {FN (sech), ARG(-5.0e-01,-1.57114159377789786021e+00), RES(-1.4337901642789678469e-3, -1.9190337944739187237e0)}, {FN (sech), ARG(5.0e-01,3.14124738660679181379e+00), RES(-8.8681891425248302488e-1, -1.4149533035945625257e-4)}, {FN (sech), ARG(5.0e-01,-3.14124738660679181379e+00), RES(-8.8681891425248302488e-1, 1.4149533035945625257e-4)}, {FN (sech), ARG(-5.0e-01,3.14124738660679181379e+00), RES(-8.8681891425248302488e-1, 1.4149533035945625257e-4)}, {FN (sech), ARG(-5.0e-01,-3.14124738660679181379e+00), RES(-8.8681891425248302488e-1, -1.4149533035945625257e-4)}, {FN (sech), ARG(5.0e-01,3.14193792057279441821e+00), RES(-8.8681891425248302484e-1, 1.4149533035935587701e-4)}, {FN (sech), ARG(5.0e-01,-3.14193792057279441821e+00), RES(-8.8681891425248302484e-1, -1.4149533035935587701e-4)}, {FN (sech), ARG(-5.0e-01,3.14193792057279441821e+00), RES(-8.8681891425248302484e-1, -1.4149533035935587701e-4)}, {FN (sech), ARG(-5.0e-01,-3.14193792057279441821e+00), RES(-8.8681891425248302484e-1, 1.4149533035935587701e-4)}, {FN (sech), ARG(5.0e-01,4.71204371340168837179e+00), RES(-1.4337901642799849641e-3, 1.9190337944739187224e0)}, {FN (sech), ARG(5.0e-01,-4.71204371340168837179e+00), RES(-1.4337901642799849641e-3, -1.9190337944739187224e0)}, {FN (sech), ARG(-5.0e-01,4.71204371340168837179e+00), RES(-1.4337901642799849641e-3, -1.9190337944739187224e0)}, {FN (sech), ARG(-5.0e-01,-4.71204371340168837179e+00), RES(-1.4337901642799849641e-3, 1.9190337944739187224e0)}, {FN (sech), ARG(5.0e-01,4.71273424736769097620e+00), RES(1.4337901642784592884e-3, 1.9190337944739187244e0)}, {FN (sech), ARG(5.0e-01,-4.71273424736769097620e+00), RES(1.4337901642784592884e-3, -1.9190337944739187244e0)}, {FN (sech), ARG(-5.0e-01,4.71273424736769097620e+00), RES(1.4337901642784592884e-3, -1.9190337944739187244e0)}, {FN (sech), ARG(-5.0e-01,-4.71273424736769097620e+00), RES(1.4337901642784592884e-3, 1.9190337944739187244e0)}, {FN (sech), ARG(5.0e-01,6.28284004019658492979e+00), RES(8.8681891425248302490e-1, 1.4149533035950644034e-4)}, {FN (sech), ARG(5.0e-01,-6.28284004019658492979e+00), RES(8.8681891425248302490e-1, -1.4149533035950644034e-4)}, {FN (sech), ARG(-5.0e-01,6.28284004019658492979e+00), RES(8.8681891425248302490e-1, -1.4149533035950644034e-4)}, {FN (sech), ARG(-5.0e-01,-6.28284004019658492979e+00), RES(8.8681891425248302490e-1, 1.4149533035950644034e-4)}, {FN (sech), ARG(5.0e-01,6.28353057416258753420e+00), RES(8.8681891425248302482e-1, -1.4149533035930568923e-4)}, {FN (sech), ARG(5.0e-01,-6.28353057416258753420e+00), RES(8.8681891425248302482e-1, 1.4149533035930568923e-4)}, {FN (sech), ARG(-5.0e-01,6.28353057416258753420e+00), RES(8.8681891425248302482e-1, 1.4149533035930568923e-4)}, {FN (sech), ARG(-5.0e-01,-6.28353057416258753420e+00), RES(8.8681891425248302482e-1, -1.4149533035930568923e-4)}, {FN (sech), ARG(5.0e-01,9.42443269378637893396e+00), RES(-8.8681891425248302477e-1, -1.4149533035919263990e-4)}, {FN (sech), ARG(5.0e-01,-9.42443269378637893396e+00), RES(-8.8681891425248302477e-1, 1.4149533035919263990e-4)}, {FN (sech), ARG(-5.0e-01,9.42443269378637893396e+00), RES(-8.8681891425248302477e-1, 1.4149533035919263990e-4)}, {FN (sech), ARG(-5.0e-01,-9.42443269378637893396e+00), RES(-8.8681891425248302477e-1, -1.4149533035919263990e-4)}, {FN (sech), ARG(5.0e-01,9.42512322775237976202e+00), RES(-8.8681891425248302464e-1, 1.4149533035889151322e-4)}, {FN (sech), ARG(5.0e-01,-9.42512322775237976202e+00), RES(-8.8681891425248302464e-1, -1.4149533035889151322e-4)}, {FN (sech), ARG(-5.0e-01,9.42512322775237976202e+00), RES(-8.8681891425248302464e-1, -1.4149533035889151322e-4)}, {FN (sech), ARG(-5.0e-01,-9.42512322775237976202e+00), RES(-8.8681891425248302464e-1, 1.4149533035889151322e-4)}, {FN (sech), ARG(1.0e+00,-3.45266983001243932001e-04), RES(6.4805426748157480499e-1, 1.7040802567651502899e-4)}, {FN (sech), ARG(1.0e+00,3.45266983001243932001e-04), RES(6.4805426748157480499e-1, -1.7040802567651502899e-4)}, {FN (sech), ARG(-1.0e+00,-3.45266983001243932001e-04), RES(6.4805426748157480499e-1, -1.7040802567651502899e-4)}, {FN (sech), ARG(-1.0e+00,3.45266983001243932001e-04), RES(6.4805426748157480499e-1, 1.7040802567651502899e-4)}, {FN (sech), ARG(1.0e+00,1.57045105981189525579e+00), RES(3.8576176225212213388e-4, -8.5091800407377002725e-1)}, {FN (sech), ARG(1.0e+00,-1.57045105981189525579e+00), RES(3.8576176225212213388e-4, 8.5091800407377002725e-1)}, {FN (sech), ARG(-1.0e+00,1.57045105981189525579e+00), RES(3.8576176225212213388e-4, 8.5091800407377002725e-1)}, {FN (sech), ARG(-1.0e+00,-1.57045105981189525579e+00), RES(3.8576176225212213388e-4, -8.5091800407377002725e-1)}, {FN (sech), ARG(1.0e+00,1.57114159377789786021e+00), RES(-3.8576176225198530591e-4, -8.5091800407377002734e-1)}, {FN (sech), ARG(1.0e+00,-1.57114159377789786021e+00), RES(-3.8576176225198530591e-4, 8.5091800407377002734e-1)}, {FN (sech), ARG(-1.0e+00,1.57114159377789786021e+00), RES(-3.8576176225198530591e-4, 8.5091800407377002734e-1)}, {FN (sech), ARG(-1.0e+00,-1.57114159377789786021e+00), RES(-3.8576176225198530591e-4, -8.5091800407377002734e-1)}, {FN (sech), ARG(1.0e+00,3.14124738660679181379e+00), RES(-6.4805426748157480499e-1, -1.7040802567660423428e-4)}, {FN (sech), ARG(1.0e+00,-3.14124738660679181379e+00), RES(-6.4805426748157480499e-1, 1.7040802567660423428e-4)}, {FN (sech), ARG(-1.0e+00,3.14124738660679181379e+00), RES(-6.4805426748157480499e-1, 1.7040802567660423428e-4)}, {FN (sech), ARG(-1.0e+00,-3.14124738660679181379e+00), RES(-6.4805426748157480499e-1, -1.7040802567660423428e-4)}, {FN (sech), ARG(1.0e+00,3.14193792057279441821e+00), RES(-6.4805426748157480499e-1, 1.7040802567648334832e-4)}, {FN (sech), ARG(1.0e+00,-3.14193792057279441821e+00), RES(-6.4805426748157480499e-1, -1.7040802567648334832e-4)}, {FN (sech), ARG(-1.0e+00,3.14193792057279441821e+00), RES(-6.4805426748157480499e-1, -1.7040802567648334832e-4)}, {FN (sech), ARG(-1.0e+00,-3.14193792057279441821e+00), RES(-6.4805426748157480499e-1, 1.7040802567648334832e-4)}, {FN (sech), ARG(1.0e+00,4.71204371340168837179e+00), RES(-3.8576176225225896185e-4, 8.5091800407377002716e-1)}, {FN (sech), ARG(1.0e+00,-4.71204371340168837179e+00), RES(-3.8576176225225896185e-4, -8.5091800407377002716e-1)}, {FN (sech), ARG(-1.0e+00,4.71204371340168837179e+00), RES(-3.8576176225225896185e-4, -8.5091800407377002716e-1)}, {FN (sech), ARG(-1.0e+00,-4.71204371340168837179e+00), RES(-3.8576176225225896185e-4, 8.5091800407377002716e-1)}, {FN (sech), ARG(1.0e+00,4.71273424736769097620e+00), RES(3.8576176225184847794e-4, 8.5091800407377002743e-1)}, {FN (sech), ARG(1.0e+00,-4.71273424736769097620e+00), RES(3.8576176225184847794e-4, -8.5091800407377002743e-1)}, {FN (sech), ARG(-1.0e+00,4.71273424736769097620e+00), RES(3.8576176225184847794e-4, -8.5091800407377002743e-1)}, {FN (sech), ARG(-1.0e+00,-4.71273424736769097620e+00), RES(3.8576176225184847794e-4, 8.5091800407377002743e-1)}, {FN (sech), ARG(1.0e+00,6.28284004019658492979e+00), RES(6.4805426748157480498e-1, 1.7040802567666467726e-4)}, {FN (sech), ARG(1.0e+00,-6.28284004019658492979e+00), RES(6.4805426748157480498e-1, -1.7040802567666467726e-4)}, {FN (sech), ARG(-1.0e+00,6.28284004019658492979e+00), RES(6.4805426748157480498e-1, -1.7040802567666467726e-4)}, {FN (sech), ARG(-1.0e+00,-6.28284004019658492979e+00), RES(6.4805426748157480498e-1, 1.7040802567666467726e-4)}, {FN (sech), ARG(1.0e+00,6.28353057416258753420e+00), RES(6.480542674815748050e-1, -1.7040802567642290534e-4)}, {FN (sech), ARG(1.0e+00,-6.28353057416258753420e+00), RES(6.480542674815748050e-1, 1.7040802567642290534e-4)}, {FN (sech), ARG(-1.0e+00,6.28353057416258753420e+00), RES(6.480542674815748050e-1, 1.7040802567642290534e-4)}, {FN (sech), ARG(-1.0e+00,-6.28353057416258753420e+00), RES(6.480542674815748050e-1, -1.7040802567642290534e-4)}, {FN (sech), ARG(1.0e+00,9.42443269378637893396e+00), RES(-6.4805426748157480501e-1, -1.7040802567628675588e-4)}, {FN (sech), ARG(1.0e+00,-9.42443269378637893396e+00), RES(-6.4805426748157480501e-1, 1.7040802567628675588e-4)}, {FN (sech), ARG(-1.0e+00,9.42443269378637893396e+00), RES(-6.4805426748157480501e-1, 1.7040802567628675588e-4)}, {FN (sech), ARG(-1.0e+00,-9.42443269378637893396e+00), RES(-6.4805426748157480501e-1, -1.7040802567628675588e-4)}, {FN (sech), ARG(1.0e+00,9.42512322775237976202e+00), RES(-6.4805426748157480504e-1, 1.704080256759240980e-4)}, {FN (sech), ARG(1.0e+00,-9.42512322775237976202e+00), RES(-6.4805426748157480504e-1, -1.704080256759240980e-4)}, {FN (sech), ARG(-1.0e+00,9.42512322775237976202e+00), RES(-6.4805426748157480504e-1, -1.704080256759240980e-4)}, {FN (sech), ARG(-1.0e+00,-9.42512322775237976202e+00), RES(-6.4805426748157480504e-1, 1.704080256759240980e-4)}, {FN (sech), ARG(2.0e+00,-3.45266983001243932001e-04), RES(2.6580221522968095407e-1, 8.8471445300374010365e-5)}, {FN (sech), ARG(2.0e+00,3.45266983001243932001e-04), RES(2.6580221522968095407e-1, -8.8471445300374010365e-5)}, {FN (sech), ARG(-2.0e+00,-3.45266983001243932001e-04), RES(2.6580221522968095407e-1, -8.8471445300374010365e-5)}, {FN (sech), ARG(-2.0e+00,3.45266983001243932001e-04), RES(2.6580221522968095407e-1, 8.8471445300374010365e-5)}, {FN (sech), ARG(2.0e+00,1.57045105981189525579e+00), RES(9.8749461907069845806e-5, -2.7572054583883740767e-1)}, {FN (sech), ARG(2.0e+00,-1.57045105981189525579e+00), RES(9.8749461907069845806e-5, 2.7572054583883740767e-1)}, {FN (sech), ARG(-2.0e+00,1.57045105981189525579e+00), RES(9.8749461907069845806e-5, 2.7572054583883740767e-1)}, {FN (sech), ARG(-2.0e+00,-1.57045105981189525579e+00), RES(9.8749461907069845806e-5, -2.7572054583883740767e-1)}, {FN (sech), ARG(2.0e+00,1.57114159377789786021e+00), RES(-9.8749461907034819809e-5, -2.7572054583883740768e-1)}, {FN (sech), ARG(2.0e+00,-1.57114159377789786021e+00), RES(-9.8749461907034819809e-5, 2.7572054583883740768e-1)}, {FN (sech), ARG(-2.0e+00,1.57114159377789786021e+00), RES(-9.8749461907034819809e-5, 2.7572054583883740768e-1)}, {FN (sech), ARG(-2.0e+00,-1.57114159377789786021e+00), RES(-9.8749461907034819809e-5, -2.7572054583883740768e-1)}, {FN (sech), ARG(2.0e+00,3.14124738660679181379e+00), RES(-2.6580221522968095405e-1, -8.8471445300420323443e-5)}, {FN (sech), ARG(2.0e+00,-3.14124738660679181379e+00), RES(-2.6580221522968095405e-1, 8.8471445300420323443e-5)}, {FN (sech), ARG(-2.0e+00,3.14124738660679181379e+00), RES(-2.6580221522968095405e-1, 8.8471445300420323443e-5)}, {FN (sech), ARG(-2.0e+00,-3.14124738660679181379e+00), RES(-2.6580221522968095405e-1, -8.8471445300420323443e-5)}, {FN (sech), ARG(2.0e+00,3.14193792057279441821e+00), RES(-2.6580221522968095407e-1, 8.8471445300357562580e-5)}, {FN (sech), ARG(2.0e+00,-3.14193792057279441821e+00), RES(-2.6580221522968095407e-1, -8.8471445300357562580e-5)}, {FN (sech), ARG(-2.0e+00,3.14193792057279441821e+00), RES(-2.6580221522968095407e-1, -8.8471445300357562580e-5)}, {FN (sech), ARG(-2.0e+00,-3.14193792057279441821e+00), RES(-2.6580221522968095407e-1, 8.8471445300357562580e-5)}, {FN (sech), ARG(2.0e+00,4.71204371340168837179e+00), RES(-9.8749461907104871804e-5, 2.7572054583883740766e-1)}, {FN (sech), ARG(2.0e+00,-4.71204371340168837179e+00), RES(-9.8749461907104871804e-5, -2.7572054583883740766e-1)}, {FN (sech), ARG(-2.0e+00,4.71204371340168837179e+00), RES(-9.8749461907104871804e-5, -2.7572054583883740766e-1)}, {FN (sech), ARG(-2.0e+00,-4.71204371340168837179e+00), RES(-9.8749461907104871804e-5, 2.7572054583883740766e-1)}, {FN (sech), ARG(2.0e+00,4.71273424736769097620e+00), RES(9.8749461906999793811e-5, 2.7572054583883740770e-1)}, {FN (sech), ARG(2.0e+00,-4.71273424736769097620e+00), RES(9.8749461906999793811e-5, -2.7572054583883740770e-1)}, {FN (sech), ARG(-2.0e+00,4.71273424736769097620e+00), RES(9.8749461906999793811e-5, -2.7572054583883740770e-1)}, {FN (sech), ARG(-2.0e+00,-4.71273424736769097620e+00), RES(9.8749461906999793811e-5, 2.7572054583883740770e-1)}, {FN (sech), ARG(2.0e+00,6.28284004019658492979e+00), RES(2.6580221522968095404e-1, 8.8471445300451703875e-5)}, {FN (sech), ARG(2.0e+00,-6.28284004019658492979e+00), RES(2.6580221522968095404e-1, -8.8471445300451703875e-5)}, {FN (sech), ARG(-2.0e+00,6.28284004019658492979e+00), RES(2.6580221522968095404e-1, -8.8471445300451703875e-5)}, {FN (sech), ARG(-2.0e+00,-6.28284004019658492979e+00), RES(2.6580221522968095404e-1, 8.8471445300451703875e-5)}, {FN (sech), ARG(2.0e+00,6.28353057416258753420e+00), RES(2.6580221522968095408e-1, -8.8471445300326182148e-5)}, {FN (sech), ARG(2.0e+00,-6.28353057416258753420e+00), RES(2.6580221522968095408e-1, 8.8471445300326182148e-5)}, {FN (sech), ARG(-2.0e+00,6.28353057416258753420e+00), RES(2.6580221522968095408e-1, 8.8471445300326182148e-5)}, {FN (sech), ARG(-2.0e+00,-6.28353057416258753420e+00), RES(2.6580221522968095408e-1, -8.8471445300326182148e-5)}, {FN (sech), ARG(2.0e+00,9.42443269378637893396e+00), RES(-2.6580221522968095410e-1, -8.8471445300255496873e-5)}, {FN (sech), ARG(2.0e+00,-9.42443269378637893396e+00), RES(-2.6580221522968095410e-1, 8.8471445300255496873e-5)}, {FN (sech), ARG(-2.0e+00,9.42443269378637893396e+00), RES(-2.6580221522968095410e-1, 8.8471445300255496873e-5)}, {FN (sech), ARG(-2.0e+00,-9.42443269378637893396e+00), RES(-2.6580221522968095410e-1, -8.8471445300255496873e-5)}, {FN (sech), ARG(2.0e+00,9.42512322775237976202e+00), RES(-2.6580221522968095416e-1, 8.8471445300067214283e-5)}, {FN (sech), ARG(2.0e+00,-9.42512322775237976202e+00), RES(-2.6580221522968095416e-1, -8.8471445300067214283e-5)}, {FN (sech), ARG(-2.0e+00,9.42512322775237976202e+00), RES(-2.6580221522968095416e-1, -8.8471445300067214283e-5)}, {FN (sech), ARG(-2.0e+00,-9.42512322775237976202e+00), RES(-2.6580221522968095416e-1, 8.8471445300067214283e-5)}, {FN (coth), ARG(0.0e+00,-3.45266983001243932001e-04), RES(0, 2.8963092606511032136e3)}, {FN (coth), ARG(0.0e+00,3.45266983001243932001e-04), RES(0, -2.8963092606511032136e3)}, {FN (coth), ARG(0.0e+00,1.57045105981189525579e+00), RES(0, -3.4526699672104134407e-4)}, {FN (coth), ARG(0.0e+00,-1.57045105981189525579e+00), RES(0, 3.4526699672104134407e-4)}, {FN (coth), ARG(0.0e+00,1.57114159377789786021e+00), RES(0, 3.4526699672091887937e-4)}, {FN (coth), ARG(0.0e+00,-1.57114159377789786021e+00), RES(0, -3.4526699672091887937e-4)}, {FN (coth), ARG(0.0e+00,3.14124738660679181379e+00), RES(0, 2.8963092606495870519e3)}, {FN (coth), ARG(0.0e+00,-3.14124738660679181379e+00), RES(0, -2.8963092606495870519e3)}, {FN (coth), ARG(0.0e+00,3.14193792057279441821e+00), RES(0, -2.8963092606516416684e3)}, {FN (coth), ARG(0.0e+00,-3.14193792057279441821e+00), RES(0, 2.8963092606516416684e3)}, {FN (coth), ARG(0.0e+00,4.71204371340168837179e+00), RES(0, -3.4526699672116380876e-4)}, {FN (coth), ARG(0.0e+00,-4.71204371340168837179e+00), RES(0, 3.4526699672116380876e-4)}, {FN (coth), ARG(0.0e+00,4.71273424736769097620e+00), RES(0, 3.4526699672079641468e-4)}, {FN (coth), ARG(0.0e+00,-4.71273424736769097620e+00), RES(0, -3.4526699672079641468e-4)}, {FN (coth), ARG(0.0e+00,6.28284004019658492979e+00), RES(0, 2.8963092606485597437e3)}, {FN (coth), ARG(0.0e+00,-6.28284004019658492979e+00), RES(0, -2.8963092606485597437e3)}, {FN (coth), ARG(0.0e+00,6.28353057416258753420e+00), RES(0, -2.8963092606526689766e3)}, {FN (coth), ARG(0.0e+00,-6.28353057416258753420e+00), RES(0, 2.8963092606526689766e3)}, {FN (coth), ARG(0.0e+00,9.42443269378637893396e+00), RES(0, 2.8963092606549830163e3)}, {FN (coth), ARG(0.0e+00,-9.42443269378637893396e+00), RES(0, -2.8963092606549830163e3)}, {FN (coth), ARG(0.0e+00,9.42512322775237976202e+00), RES(0, -2.8963092606611468657e3)}, {FN (coth), ARG(0.0e+00,-9.42512322775237976202e+00), RES(0, 2.8963092606611468657e3)}, {FN (coth), ARG(1.19209289550781250e-07,-3.45266983001243932001e-04), RES(9.9999992052715532101e-1, 2.8963089153841613713e3)}, {FN (coth), ARG(1.19209289550781250e-07,3.45266983001243932001e-04), RES(9.9999992052715532101e-1, -2.8963089153841613713e3)}, {FN (coth), ARG(-1.19209289550781250e-07,-3.45266983001243932001e-04), RES(-9.9999992052715532101e-1, 2.8963089153841613713e3)}, {FN (coth), ARG(-1.19209289550781250e-07,3.45266983001243932001e-04), RES(-9.9999992052715532101e-1, -2.8963089153841613713e3)}, {FN (coth), ARG(1.19209289550781250e-07,1.57045105981189525579e+00), RES(1.1920930376163652990e-7, -3.4526699672103643753e-4)}, {FN (coth), ARG(1.19209289550781250e-07,-1.57045105981189525579e+00), RES(1.1920930376163652990e-7, 3.4526699672103643753e-4)}, {FN (coth), ARG(-1.19209289550781250e-07,1.57045105981189525579e+00), RES(-1.1920930376163652990e-7, -3.4526699672103643753e-4)}, {FN (coth), ARG(-1.19209289550781250e-07,-1.57045105981189525579e+00), RES(-1.1920930376163652990e-7, 3.4526699672103643753e-4)}, {FN (coth), ARG(1.19209289550781250e-07,1.57114159377789786021e+00), RES(1.1920930376163652989e-7, 3.4526699672091397283e-4)}, {FN (coth), ARG(1.19209289550781250e-07,-1.57114159377789786021e+00), RES(1.1920930376163652989e-7, -3.4526699672091397283e-4)}, {FN (coth), ARG(-1.19209289550781250e-07,1.57114159377789786021e+00), RES(-1.1920930376163652989e-7, 3.4526699672091397283e-4)}, {FN (coth), ARG(-1.19209289550781250e-07,-1.57114159377789786021e+00), RES(-1.1920930376163652989e-7, -3.4526699672091397283e-4)}, {FN (coth), ARG(1.19209289550781250e-07,3.14124738660679181379e+00), RES(9.9999992052610836018e-1, 2.8963089153826452102e3)}, {FN (coth), ARG(1.19209289550781250e-07,-3.14124738660679181379e+00), RES(9.9999992052610836018e-1, -2.8963089153826452102e3)}, {FN (coth), ARG(-1.19209289550781250e-07,3.14124738660679181379e+00), RES(-9.9999992052610836018e-1, 2.8963089153826452102e3)}, {FN (coth), ARG(-1.19209289550781250e-07,-3.14124738660679181379e+00), RES(-9.9999992052610836018e-1, -2.8963089153826452102e3)}, {FN (coth), ARG(1.19209289550781250e-07,3.14193792057279441821e+00), RES(9.9999992052752714224e-1, -2.8963089153846998260e3)}, {FN (coth), ARG(1.19209289550781250e-07,-3.14193792057279441821e+00), RES(9.9999992052752714224e-1, 2.8963089153846998260e3)}, {FN (coth), ARG(-1.19209289550781250e-07,3.14193792057279441821e+00), RES(-9.9999992052752714224e-1, -2.8963089153846998260e3)}, {FN (coth), ARG(-1.19209289550781250e-07,-3.14193792057279441821e+00), RES(-9.9999992052752714224e-1, 2.8963089153846998260e3)}, {FN (coth), ARG(1.19209289550781250e-07,4.71204371340168837179e+00), RES(1.1920930376163652991e-7, -3.4526699672115890222e-4)}, {FN (coth), ARG(1.19209289550781250e-07,-4.71204371340168837179e+00), RES(1.1920930376163652991e-7, 3.4526699672115890222e-4)}, {FN (coth), ARG(-1.19209289550781250e-07,4.71204371340168837179e+00), RES(-1.1920930376163652991e-7, -3.4526699672115890222e-4)}, {FN (coth), ARG(-1.19209289550781250e-07,-4.71204371340168837179e+00), RES(-1.1920930376163652991e-7, 3.4526699672115890222e-4)}, {FN (coth), ARG(1.19209289550781250e-07,4.71273424736769097620e+00), RES(1.1920930376163652988e-7, 3.4526699672079150814e-4)}, {FN (coth), ARG(1.19209289550781250e-07,-4.71273424736769097620e+00), RES(1.1920930376163652988e-7, -3.4526699672079150814e-4)}, {FN (coth), ARG(-1.19209289550781250e-07,4.71273424736769097620e+00), RES(-1.1920930376163652988e-7, 3.4526699672079150814e-4)}, {FN (coth), ARG(-1.19209289550781250e-07,-4.71273424736769097620e+00), RES(-1.1920930376163652988e-7, -3.4526699672079150814e-4)}, {FN (coth), ARG(1.19209289550781250e-07,6.28284004019658492979e+00), RES(9.9999992052539896914e-1, 2.8963089153816179024e3)}, {FN (coth), ARG(1.19209289550781250e-07,-6.28284004019658492979e+00), RES(9.9999992052539896914e-1, -2.8963089153816179024e3)}, {FN (coth), ARG(-1.19209289550781250e-07,6.28284004019658492979e+00), RES(-9.9999992052539896914e-1, 2.8963089153816179024e3)}, {FN (coth), ARG(-1.19209289550781250e-07,-6.28284004019658492979e+00), RES(-9.9999992052539896914e-1, -2.8963089153816179024e3)}, {FN (coth), ARG(1.19209289550781250e-07,6.28353057416258753420e+00), RES(9.9999992052823653327e-1, -2.8963089153857271338e3)}, {FN (coth), ARG(1.19209289550781250e-07,-6.28353057416258753420e+00), RES(9.9999992052823653327e-1, 2.8963089153857271338e3)}, {FN (coth), ARG(-1.19209289550781250e-07,6.28353057416258753420e+00), RES(-9.9999992052823653327e-1, -2.8963089153857271338e3)}, {FN (coth), ARG(-1.19209289550781250e-07,-6.28353057416258753420e+00), RES(-9.9999992052823653327e-1, 2.8963089153857271338e3)}, {FN (coth), ARG(1.19209289550781250e-07,9.42443269378637893396e+00), RES(9.9999992052983445585e-1, 2.8963089153880411727e3)}, {FN (coth), ARG(1.19209289550781250e-07,-9.42443269378637893396e+00), RES(9.9999992052983445585e-1, -2.8963089153880411727e3)}, {FN (coth), ARG(-1.19209289550781250e-07,9.42443269378637893396e+00), RES(-9.9999992052983445585e-1, 2.8963089153880411727e3)}, {FN (coth), ARG(-1.19209289550781250e-07,-9.42443269378637893396e+00), RES(-9.9999992052983445585e-1, -2.8963089153880411727e3)}, {FN (coth), ARG(1.19209289550781250e-07,9.42512322775237976202e+00), RES(9.9999992053409080205e-1, -2.8963089153942050199e3)}, {FN (coth), ARG(1.19209289550781250e-07,-9.42512322775237976202e+00), RES(9.9999992053409080205e-1, 2.8963089153942050199e3)}, {FN (coth), ARG(-1.19209289550781250e-07,9.42512322775237976202e+00), RES(-9.9999992053409080205e-1, -2.8963089153942050199e3)}, {FN (coth), ARG(-1.19209289550781250e-07,-9.42512322775237976202e+00), RES(-9.9999992053409080205e-1, 2.8963089153942050199e3)}, {FN (coth), ARG(5.0e-01,-3.45266983001243932001e-04), RES(2.1639524637389326002e0, 1.2715121175451222247e-3)}, {FN (coth), ARG(5.0e-01,3.45266983001243932001e-04), RES(2.1639524637389326002e0, -1.2715121175451222247e-3)}, {FN (coth), ARG(-5.0e-01,-3.45266983001243932001e-04), RES(-2.1639524637389326002e0, 1.2715121175451222247e-3)}, {FN (coth), ARG(-5.0e-01,3.45266983001243932001e-04), RES(-2.1639524637389326002e0, -1.2715121175451222247e-3)}, {FN (coth), ARG(5.0e-01,1.57045105981189525579e+00), RES(4.6211720058436229982e-1, -2.7153443992665204631e-4)}, {FN (coth), ARG(5.0e-01,-1.57045105981189525579e+00), RES(4.6211720058436229982e-1, 2.7153443992665204631e-4)}, {FN (coth), ARG(-5.0e-01,1.57045105981189525579e+00), RES(-4.6211720058436229982e-1, -2.7153443992665204631e-4)}, {FN (coth), ARG(-5.0e-01,-1.57045105981189525579e+00), RES(-4.6211720058436229982e-1, 2.7153443992665204631e-4)}, {FN (coth), ARG(5.0e-01,1.57114159377789786021e+00), RES(4.6211720058436229979e-1, 2.7153443992655573423e-4)}, {FN (coth), ARG(5.0e-01,-1.57114159377789786021e+00), RES(4.6211720058436229979e-1, -2.7153443992655573423e-4)}, {FN (coth), ARG(-5.0e-01,1.57114159377789786021e+00), RES(-4.6211720058436229979e-1, 2.7153443992655573423e-4)}, {FN (coth), ARG(-5.0e-01,-1.57114159377789786021e+00), RES(-4.6211720058436229979e-1, -2.7153443992655573423e-4)}, {FN (coth), ARG(5.0e-01,3.14124738660679181379e+00), RES(2.1639524637389325992e0, 1.2715121175457878359e-3)}, {FN (coth), ARG(5.0e-01,-3.14124738660679181379e+00), RES(2.1639524637389325992e0, -1.2715121175457878359e-3)}, {FN (coth), ARG(-5.0e-01,3.14124738660679181379e+00), RES(-2.1639524637389325992e0, 1.2715121175457878359e-3)}, {FN (coth), ARG(-5.0e-01,-3.14124738660679181379e+00), RES(-2.1639524637389325992e0, -1.2715121175457878359e-3)}, {FN (coth), ARG(5.0e-01,3.14193792057279441821e+00), RES(2.1639524637389326006e0, -1.2715121175448858373e-3)}, {FN (coth), ARG(5.0e-01,-3.14193792057279441821e+00), RES(2.1639524637389326006e0, 1.2715121175448858373e-3)}, {FN (coth), ARG(-5.0e-01,3.14193792057279441821e+00), RES(-2.1639524637389326006e0, -1.2715121175448858373e-3)}, {FN (coth), ARG(-5.0e-01,-3.14193792057279441821e+00), RES(-2.1639524637389326006e0, 1.2715121175448858373e-3)}, {FN (coth), ARG(5.0e-01,4.71204371340168837179e+00), RES(4.6211720058436229985e-1, -2.7153443992674835838e-4)}, {FN (coth), ARG(5.0e-01,-4.71204371340168837179e+00), RES(4.6211720058436229985e-1, 2.7153443992674835838e-4)}, {FN (coth), ARG(-5.0e-01,4.71204371340168837179e+00), RES(-4.6211720058436229985e-1, -2.7153443992674835838e-4)}, {FN (coth), ARG(-5.0e-01,-4.71204371340168837179e+00), RES(-4.6211720058436229985e-1, 2.7153443992674835838e-4)}, {FN (coth), ARG(5.0e-01,4.71273424736769097620e+00), RES(4.6211720058436229976e-1, 2.7153443992645942216e-4)}, {FN (coth), ARG(5.0e-01,-4.71273424736769097620e+00), RES(4.6211720058436229976e-1, -2.7153443992645942216e-4)}, {FN (coth), ARG(-5.0e-01,4.71273424736769097620e+00), RES(-4.6211720058436229976e-1, 2.7153443992645942216e-4)}, {FN (coth), ARG(-5.0e-01,-4.71273424736769097620e+00), RES(-4.6211720058436229976e-1, -2.7153443992645942216e-4)}, {FN (coth), ARG(5.0e-01,6.28284004019658492979e+00), RES(2.1639524637389325986e0, 1.2715121175462388352e-3)}, {FN (coth), ARG(5.0e-01,-6.28284004019658492979e+00), RES(2.1639524637389325986e0, -1.2715121175462388352e-3)}, {FN (coth), ARG(-5.0e-01,6.28284004019658492979e+00), RES(-2.1639524637389325986e0, 1.2715121175462388352e-3)}, {FN (coth), ARG(-5.0e-01,-6.28284004019658492979e+00), RES(-2.1639524637389325986e0, -1.2715121175462388352e-3)}, {FN (coth), ARG(5.0e-01,6.28353057416258753420e+00), RES(2.1639524637389326012e0, -1.2715121175444348380e-3)}, {FN (coth), ARG(5.0e-01,-6.28353057416258753420e+00), RES(2.1639524637389326012e0, 1.2715121175444348380e-3)}, {FN (coth), ARG(-5.0e-01,6.28353057416258753420e+00), RES(-2.1639524637389326012e0, -1.2715121175444348380e-3)}, {FN (coth), ARG(-5.0e-01,-6.28353057416258753420e+00), RES(-2.1639524637389326012e0, 1.2715121175444348380e-3)}, {FN (coth), ARG(5.0e-01,9.42443269378637893396e+00), RES(2.1639524637389326028e0, 1.2715121175434189499e-3)}, {FN (coth), ARG(5.0e-01,-9.42443269378637893396e+00), RES(2.1639524637389326028e0, -1.2715121175434189499e-3)}, {FN (coth), ARG(-5.0e-01,9.42443269378637893396e+00), RES(-2.1639524637389326028e0, 1.2715121175434189499e-3)}, {FN (coth), ARG(-5.0e-01,-9.42443269378637893396e+00), RES(-2.1639524637389326028e0, -1.2715121175434189499e-3)}, {FN (coth), ARG(5.0e-01,9.42512322775237976202e+00), RES(2.1639524637389326068e0, -1.2715121175407129542e-3)}, {FN (coth), ARG(5.0e-01,-9.42512322775237976202e+00), RES(2.1639524637389326068e0, 1.2715121175407129542e-3)}, {FN (coth), ARG(-5.0e-01,9.42512322775237976202e+00), RES(-2.1639524637389326068e0, -1.2715121175407129542e-3)}, {FN (coth), ARG(-5.0e-01,-9.42512322775237976202e+00), RES(-2.1639524637389326068e0, 1.2715121175407129542e-3)}, {FN (coth), ARG(1.0e+00,-3.45266983001243932001e-04), RES(1.3130351721648674824e0, 2.4999454374267620687e-4)}, {FN (coth), ARG(1.0e+00,3.45266983001243932001e-04), RES(1.3130351721648674824e0, -2.4999454374267620687e-4)}, {FN (coth), ARG(-1.0e+00,-3.45266983001243932001e-04), RES(-1.3130351721648674824e0, 2.4999454374267620687e-4)}, {FN (coth), ARG(-1.0e+00,3.45266983001243932001e-04), RES(-1.3130351721648674824e0, -2.4999454374267620687e-4)}, {FN (coth), ARG(1.0e+00,1.57045105981189525579e+00), RES(7.6159419408485704839e-1, -1.4500326960279979918e-4)}, {FN (coth), ARG(1.0e+00,-1.57045105981189525579e+00), RES(7.6159419408485704839e-1, 1.4500326960279979918e-4)}, {FN (coth), ARG(-1.0e+00,1.57045105981189525579e+00), RES(-7.6159419408485704839e-1, -1.4500326960279979918e-4)}, {FN (coth), ARG(-1.0e+00,-1.57045105981189525579e+00), RES(-7.6159419408485704839e-1, 1.4500326960279979918e-4)}, {FN (coth), ARG(1.0e+00,1.57114159377789786021e+00), RES(7.6159419408485704836e-1, 1.4500326960274836716e-4)}, {FN (coth), ARG(1.0e+00,-1.57114159377789786021e+00), RES(7.6159419408485704836e-1, -1.4500326960274836716e-4)}, {FN (coth), ARG(-1.0e+00,1.57114159377789786021e+00), RES(-7.6159419408485704836e-1, 1.4500326960274836716e-4)}, {FN (coth), ARG(-1.0e+00,-1.57114159377789786021e+00), RES(-7.6159419408485704836e-1, -1.4500326960274836716e-4)}, {FN (coth), ARG(1.0e+00,3.14124738660679181379e+00), RES(1.3130351721648674823e0, 2.4999454374280707411e-4)}, {FN (coth), ARG(1.0e+00,-3.14124738660679181379e+00), RES(1.3130351721648674823e0, -2.4999454374280707411e-4)}, {FN (coth), ARG(-1.0e+00,3.14124738660679181379e+00), RES(-1.3130351721648674823e0, 2.4999454374280707411e-4)}, {FN (coth), ARG(-1.0e+00,-3.14124738660679181379e+00), RES(-1.3130351721648674823e0, -2.4999454374280707411e-4)}, {FN (coth), ARG(1.0e+00,3.14193792057279441821e+00), RES(1.3130351721648674824e0, -2.4999454374262973024e-4)}, {FN (coth), ARG(1.0e+00,-3.14193792057279441821e+00), RES(1.3130351721648674824e0, 2.4999454374262973024e-4)}, {FN (coth), ARG(-1.0e+00,3.14193792057279441821e+00), RES(-1.3130351721648674824e0, -2.4999454374262973024e-4)}, {FN (coth), ARG(-1.0e+00,-3.14193792057279441821e+00), RES(-1.3130351721648674824e0, 2.4999454374262973024e-4)}, {FN (coth), ARG(1.0e+00,4.71204371340168837179e+00), RES(7.6159419408485704842e-1, -1.4500326960285123120e-4)}, {FN (coth), ARG(1.0e+00,-4.71204371340168837179e+00), RES(7.6159419408485704842e-1, 1.4500326960285123120e-4)}, {FN (coth), ARG(-1.0e+00,4.71204371340168837179e+00), RES(-7.6159419408485704842e-1, -1.4500326960285123120e-4)}, {FN (coth), ARG(-1.0e+00,-4.71204371340168837179e+00), RES(-7.6159419408485704842e-1, 1.4500326960285123120e-4)}, {FN (coth), ARG(1.0e+00,4.71273424736769097620e+00), RES(7.6159419408485704834e-1, 1.4500326960269693514e-4)}, {FN (coth), ARG(1.0e+00,-4.71273424736769097620e+00), RES(7.6159419408485704834e-1, -1.4500326960269693514e-4)}, {FN (coth), ARG(-1.0e+00,4.71273424736769097620e+00), RES(-7.6159419408485704834e-1, 1.4500326960269693514e-4)}, {FN (coth), ARG(-1.0e+00,-4.71273424736769097620e+00), RES(-7.6159419408485704834e-1, -1.4500326960269693514e-4)}, {FN (coth), ARG(1.0e+00,6.28284004019658492979e+00), RES(1.3130351721648674822e0, 2.4999454374289574604e-4)}, {FN (coth), ARG(1.0e+00,-6.28284004019658492979e+00), RES(1.3130351721648674822e0, -2.4999454374289574604e-4)}, {FN (coth), ARG(-1.0e+00,6.28284004019658492979e+00), RES(-1.3130351721648674822e0, 2.4999454374289574604e-4)}, {FN (coth), ARG(-1.0e+00,-6.28284004019658492979e+00), RES(-1.3130351721648674822e0, -2.4999454374289574604e-4)}, {FN (coth), ARG(1.0e+00,6.28353057416258753420e+00), RES(1.3130351721648674825e0, -2.4999454374254105830e-4)}, {FN (coth), ARG(1.0e+00,-6.28353057416258753420e+00), RES(1.3130351721648674825e0, 2.4999454374254105830e-4)}, {FN (coth), ARG(-1.0e+00,6.28353057416258753420e+00), RES(-1.3130351721648674825e0, -2.4999454374254105830e-4)}, {FN (coth), ARG(-1.0e+00,-6.28353057416258753420e+00), RES(-1.3130351721648674825e0, 2.4999454374254105830e-4)}, {FN (coth), ARG(1.0e+00,9.42443269378637893396e+00), RES(1.3130351721648674827e0, 2.4999454374234132236e-4)}, {FN (coth), ARG(1.0e+00,-9.42443269378637893396e+00), RES(1.3130351721648674827e0, -2.4999454374234132236e-4)}, {FN (coth), ARG(-1.0e+00,9.42443269378637893396e+00), RES(-1.3130351721648674827e0, 2.4999454374234132236e-4)}, {FN (coth), ARG(-1.0e+00,-9.42443269378637893396e+00), RES(-1.3130351721648674827e0, -2.4999454374234132236e-4)}, {FN (coth), ARG(1.0e+00,9.42512322775237976202e+00), RES(1.3130351721648674832e0, -2.4999454374180929074e-4)}, {FN (coth), ARG(1.0e+00,-9.42512322775237976202e+00), RES(1.3130351721648674832e0, 2.4999454374180929074e-4)}, {FN (coth), ARG(-1.0e+00,9.42512322775237976202e+00), RES(-1.3130351721648674832e0, -2.4999454374180929074e-4)}, {FN (coth), ARG(-1.0e+00,-9.42512322775237976202e+00), RES(-1.3130351721648674832e0, 2.4999454374180929074e-4)}, {FN (coth), ARG(2.0e+00,-3.45266983001243932001e-04), RES(1.0373147113268752620e0, 2.6247825506563736365e-5)}, {FN (coth), ARG(2.0e+00,3.45266983001243932001e-04), RES(1.0373147113268752620e0, -2.6247825506563736365e-5)}, {FN (coth), ARG(-2.0e+00,-3.45266983001243932001e-04), RES(-1.0373147113268752620e0, 2.6247825506563736365e-5)}, {FN (coth), ARG(-2.0e+00,3.45266983001243932001e-04), RES(-1.0373147113268752620e0, -2.6247825506563736365e-5)}, {FN (coth), ARG(2.0e+00,1.57045105981189525579e+00), RES(9.6402758819508310557e-1, -2.4393395410443750226e-5)}, {FN (coth), ARG(2.0e+00,-1.57045105981189525579e+00), RES(9.6402758819508310557e-1, 2.4393395410443750226e-5)}, {FN (coth), ARG(-2.0e+00,1.57045105981189525579e+00), RES(-9.6402758819508310557e-1, -2.4393395410443750226e-5)}, {FN (coth), ARG(-2.0e+00,-1.57045105981189525579e+00), RES(-9.6402758819508310557e-1, 2.4393395410443750226e-5)}, {FN (coth), ARG(2.0e+00,1.57114159377789786021e+00), RES(9.6402758819508310556e-1, 2.4393395410435097997e-5)}, {FN (coth), ARG(2.0e+00,-1.57114159377789786021e+00), RES(9.6402758819508310556e-1, -2.4393395410435097997e-5)}, {FN (coth), ARG(-2.0e+00,1.57114159377789786021e+00), RES(-9.6402758819508310556e-1, 2.4393395410435097997e-5)}, {FN (coth), ARG(-2.0e+00,-1.57114159377789786021e+00), RES(-9.6402758819508310556e-1, -2.4393395410435097997e-5)}, {FN (coth), ARG(2.0e+00,3.14124738660679181379e+00), RES(1.0373147113268752620e0, 2.6247825506577476589e-5)}, {FN (coth), ARG(2.0e+00,-3.14124738660679181379e+00), RES(1.0373147113268752620e0, -2.6247825506577476589e-5)}, {FN (coth), ARG(-2.0e+00,3.14124738660679181379e+00), RES(-1.0373147113268752620e0, 2.6247825506577476589e-5)}, {FN (coth), ARG(-2.0e+00,-3.14124738660679181379e+00), RES(-1.0373147113268752620e0, -2.6247825506577476589e-5)}, {FN (coth), ARG(2.0e+00,3.14193792057279441821e+00), RES(1.0373147113268752620e0, -2.6247825506558856616e-5)}, {FN (coth), ARG(2.0e+00,-3.14193792057279441821e+00), RES(1.0373147113268752620e0, 2.6247825506558856616e-5)}, {FN (coth), ARG(-2.0e+00,3.14193792057279441821e+00), RES(-1.0373147113268752620e0, -2.6247825506558856616e-5)}, {FN (coth), ARG(-2.0e+00,-3.14193792057279441821e+00), RES(-1.0373147113268752620e0, 2.6247825506558856616e-5)}, {FN (coth), ARG(2.0e+00,4.71204371340168837179e+00), RES(9.6402758819508310557e-1, -2.4393395410452402454e-5)}, {FN (coth), ARG(2.0e+00,-4.71204371340168837179e+00), RES(9.6402758819508310557e-1, 2.4393395410452402454e-5)}, {FN (coth), ARG(-2.0e+00,4.71204371340168837179e+00), RES(-9.6402758819508310557e-1, -2.4393395410452402454e-5)}, {FN (coth), ARG(-2.0e+00,-4.71204371340168837179e+00), RES(-9.6402758819508310557e-1, 2.4393395410452402454e-5)}, {FN (coth), ARG(2.0e+00,4.71273424736769097620e+00), RES(9.6402758819508310556e-1, 2.4393395410426445768e-5)}, {FN (coth), ARG(2.0e+00,-4.71273424736769097620e+00), RES(9.6402758819508310556e-1, -2.4393395410426445768e-5)}, {FN (coth), ARG(-2.0e+00,4.71273424736769097620e+00), RES(-9.6402758819508310556e-1, 2.4393395410426445768e-5)}, {FN (coth), ARG(-2.0e+00,-4.71273424736769097620e+00), RES(-9.6402758819508310556e-1, -2.4393395410426445768e-5)}, {FN (coth), ARG(2.0e+00,6.28284004019658492979e+00), RES(1.0373147113268752620e0, 2.6247825506586786575e-5)}, {FN (coth), ARG(2.0e+00,-6.28284004019658492979e+00), RES(1.0373147113268752620e0, -2.6247825506586786575e-5)}, {FN (coth), ARG(-2.0e+00,6.28284004019658492979e+00), RES(-1.0373147113268752620e0, 2.6247825506586786575e-5)}, {FN (coth), ARG(-2.0e+00,-6.28284004019658492979e+00), RES(-1.0373147113268752620e0, -2.6247825506586786575e-5)}, {FN (coth), ARG(2.0e+00,6.28353057416258753420e+00), RES(1.0373147113268752620e0, -2.6247825506549546629e-5)}, {FN (coth), ARG(2.0e+00,-6.28353057416258753420e+00), RES(1.0373147113268752620e0, 2.6247825506549546629e-5)}, {FN (coth), ARG(-2.0e+00,6.28353057416258753420e+00), RES(-1.0373147113268752620e0, -2.6247825506549546629e-5)}, {FN (coth), ARG(-2.0e+00,-6.28353057416258753420e+00), RES(-1.0373147113268752620e0, 2.6247825506549546629e-5)}, {FN (coth), ARG(2.0e+00,9.42443269378637893396e+00), RES(1.0373147113268752620e0, 2.6247825506528575631e-5)}, {FN (coth), ARG(2.0e+00,-9.42443269378637893396e+00), RES(1.0373147113268752620e0, -2.6247825506528575631e-5)}, {FN (coth), ARG(-2.0e+00,9.42443269378637893396e+00), RES(-1.0373147113268752620e0, 2.6247825506528575631e-5)}, {FN (coth), ARG(-2.0e+00,-9.42443269378637893396e+00), RES(-1.0373147113268752620e0, -2.6247825506528575631e-5)}, {FN (coth), ARG(2.0e+00,9.42512322775237976202e+00), RES(1.0373147113268752621e0, -2.6247825506472715712e-5)}, {FN (coth), ARG(2.0e+00,-9.42512322775237976202e+00), RES(1.0373147113268752621e0, 2.6247825506472715712e-5)}, {FN (coth), ARG(-2.0e+00,9.42512322775237976202e+00), RES(-1.0373147113268752621e0, -2.6247825506472715712e-5)}, {FN (coth), ARG(-2.0e+00,-9.42512322775237976202e+00), RES(-1.0373147113268752621e0, 2.6247825506472715712e-5)}, {FN (arccsch), ARG(0.0e+00,1.19209289550781250e-07), RES(-1.6635532333438683873e1, -1.5707963267948966192e0)}, {FN (arccsch), ARG(0.0e+00,-1.19209289550781250e-07), RES(1.6635532333438683873e1, 1.5707963267948966192e0)}, {FN (arccsch), ARG(0.0e+00,5.0e-01), RES(-1.3169578969248167086e0, -1.5707963267948966192e0)}, {FN (arccsch), ARG(0.0e+00,-5.0e-01), RES(1.3169578969248167086e0, 1.5707963267948966192e0)}, {FN (arccsch), ARG(0.0e+00,1.0e+00), RES(0, -1.5707963267948966192e0)}, {FN (arccsch), ARG(0.0e+00,-1.0e+00), RES(0, 1.5707963267948966192e0)}, {FN (arccsch), ARG(0.0e+00,2.0e+00), RES(0, -5.2359877559829887308e-1)}, {FN (arccsch), ARG(0.0e+00,-2.0e+00), RES(0, 5.2359877559829887308e-1)}, {FN (arccsch), ARG(0.0e+00,8.3886080e+06), RES(0, -1.1920928955078153234e-7)}, {FN (arccsch), ARG(0.0e+00,-8.3886080e+06), RES(0, 1.1920928955078153234e-7)}, {FN (arccsch), ARG(1.19209289550781250e-07,0.0e+00), RES(1.6635532333438690979e1, 0.0)}, {FN (arccsch), ARG(-1.19209289550781250e-07,0.0e+00), RES(-1.6635532333438690979e1, 0.0)}, {FN (arccsch), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(1.6288958743158714771e1, -7.8539816339744120419e-1)}, {FN (arccsch), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.6288958743158714771e1, 7.8539816339744120419e-1)}, {FN (arccsch), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(-1.6288958743158714771e1, -7.8539816339744120419e-1)}, {FN (arccsch), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(-1.6288958743158714771e1, 7.8539816339744120419e-1)}, {FN (arccsch), ARG(1.19209289550781250e-07,5.0e-01), RES(1.3169578969247948296e0, -1.5707960514928349710e0)}, {FN (arccsch), ARG(1.19209289550781250e-07,-5.0e-01), RES(1.3169578969247948296e0, 1.5707960514928349710e0)}, {FN (arccsch), ARG(-1.19209289550781250e-07,5.0e-01), RES(-1.3169578969247948296e0, -1.5707960514928349710e0)}, {FN (arccsch), ARG(-1.19209289550781250e-07,-5.0e-01), RES(-1.3169578969247948296e0, 1.5707960514928349710e0)}, {FN (arccsch), ARG(1.19209289550781250e-07,1.0e+00), RES(3.4526696585164602772e-4, -1.5704510597947457801e0)}, {FN (arccsch), ARG(1.19209289550781250e-07,-1.0e+00), RES(3.4526696585164602772e-4, 1.5704510597947457801e0)}, {FN (arccsch), ARG(-1.19209289550781250e-07,1.0e+00), RES(-3.4526696585164602772e-4, -1.5704510597947457801e0)}, {FN (arccsch), ARG(-1.19209289550781250e-07,-1.0e+00), RES(-3.4526696585164602772e-4, 1.5704510597947457801e0)}, {FN (arccsch), ARG(1.19209289550781250e-07,2.0e+00), RES(3.4412757706023621662e-8, -5.2359877559829648006e-1)}, {FN (arccsch), ARG(1.19209289550781250e-07,-2.0e+00), RES(3.4412757706023621662e-8, 5.2359877559829648006e-1)}, {FN (arccsch), ARG(-1.19209289550781250e-07,2.0e+00), RES(-3.4412757706023621662e-8, -5.2359877559829648006e-1)}, {FN (arccsch), ARG(-1.19209289550781250e-07,-2.0e+00), RES(-3.4412757706023621662e-8, 5.2359877559829648006e-1)}, {FN (arccsch), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.6940658945086127152e-21, -1.1920928955078153234e-7)}, {FN (arccsch), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.6940658945086127152e-21, 1.1920928955078153234e-7)}, {FN (arccsch), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(-1.6940658945086127152e-21, -1.1920928955078153234e-7)}, {FN (arccsch), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(-1.6940658945086127152e-21, 1.1920928955078153234e-7)}, {FN (arccsch), ARG(5.0e-01,0.0e+00), RES(1.4436354751788103425e0, 0.0)}, {FN (arccsch), ARG(-5.0e-01,0.0e+00), RES(-1.4436354751788103425e0, 0.0)}, {FN (arccsch), ARG(5.0e-01,1.19209289550781250e-07), RES(1.4436354751787798371e0, -2.1324805998799710740e-7)}, {FN (arccsch), ARG(5.0e-01,-1.19209289550781250e-07), RES(1.4436354751787798371e0, 2.1324805998799710740e-7)}, {FN (arccsch), ARG(-5.0e-01,1.19209289550781250e-07), RES(-1.4436354751787798371e0, -2.1324805998799710740e-7)}, {FN (arccsch), ARG(-5.0e-01,-1.19209289550781250e-07), RES(-1.4436354751787798371e0, 2.1324805998799710740e-7)}, {FN (arccsch), ARG(5.0e-01,5.0e-01), RES(1.0612750619050356520e0, -6.6623943249251525510e-1)}, {FN (arccsch), ARG(5.0e-01,-5.0e-01), RES(1.0612750619050356520e0, 6.6623943249251525510e-1)}, {FN (arccsch), ARG(-5.0e-01,5.0e-01), RES(-1.0612750619050356520e0, -6.6623943249251525510e-1)}, {FN (arccsch), ARG(-5.0e-01,-5.0e-01), RES(-1.0612750619050356520e0, 6.6623943249251525510e-1)}, {FN (arccsch), ARG(5.0e-01,1.0e+00), RES(5.3321829058411214108e-1, -7.7308635671950473342e-1)}, {FN (arccsch), ARG(5.0e-01,-1.0e+00), RES(5.3321829058411214108e-1, 7.7308635671950473342e-1)}, {FN (arccsch), ARG(-5.0e-01,1.0e+00), RES(-5.3321829058411214108e-1, -7.7308635671950473342e-1)}, {FN (arccsch), ARG(-5.0e-01,-1.0e+00), RES(-5.3321829058411214108e-1, 7.7308635671950473342e-1)}, {FN (arccsch), ARG(5.0e-01,2.0e+00), RES(1.3261586085051183885e-1, -4.8530734047334251250e-1)}, {FN (arccsch), ARG(5.0e-01,-2.0e+00), RES(1.3261586085051183885e-1, 4.8530734047334251250e-1)}, {FN (arccsch), ARG(-5.0e-01,2.0e+00), RES(-1.3261586085051183885e-1, -4.8530734047334251250e-1)}, {FN (arccsch), ARG(-5.0e-01,-2.0e+00), RES(-1.3261586085051183885e-1, 4.8530734047334251250e-1)}, {FN (arccsch), ARG(5.0e-01,8.3886080e+06), RES(7.1054273576010271023e-15, -1.1920928955078110883e-7)}, {FN (arccsch), ARG(5.0e-01,-8.3886080e+06), RES(7.1054273576010271023e-15, 1.1920928955078110883e-7)}, {FN (arccsch), ARG(-5.0e-01,8.3886080e+06), RES(-7.1054273576010271023e-15, -1.1920928955078110883e-7)}, {FN (arccsch), ARG(-5.0e-01,-8.3886080e+06), RES(-7.1054273576010271023e-15, 1.1920928955078110883e-7)}, {FN (arccsch), ARG(1.0e+00,0.0e+00), RES(8.8137358701954302523e-1, 0.0)}, {FN (arccsch), ARG(-1.0e+00,0.0e+00), RES(-8.8137358701954302523e-1, 0.0)}, {FN (arccsch), ARG(1.0e+00,1.19209289550781250e-07), RES(8.8137358701953548879e-1, -8.4293697021787414719e-8)}, {FN (arccsch), ARG(1.0e+00,-1.19209289550781250e-07), RES(8.8137358701953548879e-1, 8.4293697021787414719e-8)}, {FN (arccsch), ARG(-1.0e+00,1.19209289550781250e-07), RES(-8.8137358701953548879e-1, -8.4293697021787414719e-8)}, {FN (arccsch), ARG(-1.0e+00,-1.19209289550781250e-07), RES(-8.8137358701953548879e-1, 8.4293697021787414719e-8)}, {FN (arccsch), ARG(1.0e+00,5.0e-01), RES(7.6388434595371104541e-1, -3.1122579724476109533e-1)}, {FN (arccsch), ARG(1.0e+00,-5.0e-01), RES(7.6388434595371104541e-1, 3.1122579724476109533e-1)}, {FN (arccsch), ARG(-1.0e+00,5.0e-01), RES(-7.6388434595371104541e-1, -3.1122579724476109533e-1)}, {FN (arccsch), ARG(-1.0e+00,-5.0e-01), RES(-7.6388434595371104541e-1, 3.1122579724476109533e-1)}, {FN (arccsch), ARG(1.0e+00,1.0e+00), RES(5.3063753095251782602e-1, -4.5227844715119068206e-1)}, {FN (arccsch), ARG(1.0e+00,-1.0e+00), RES(5.3063753095251782602e-1, 4.5227844715119068206e-1)}, {FN (arccsch), ARG(-1.0e+00,1.0e+00), RES(-5.3063753095251782602e-1, -4.5227844715119068206e-1)}, {FN (arccsch), ARG(-1.0e+00,-1.0e+00), RES(-5.3063753095251782602e-1, 4.5227844715119068206e-1)}, {FN (arccsch), ARG(1.0e+00,2.0e+00), RES(2.1561241855582964497e-1, -4.0158639166780606828e-1)}, {FN (arccsch), ARG(1.0e+00,-2.0e+00), RES(2.1561241855582964497e-1, 4.0158639166780606828e-1)}, {FN (arccsch), ARG(-1.0e+00,2.0e+00), RES(-2.1561241855582964497e-1, -4.0158639166780606828e-1)}, {FN (arccsch), ARG(-1.0e+00,-2.0e+00), RES(-2.1561241855582964497e-1, 4.0158639166780606828e-1)}, {FN (arccsch), ARG(1.0e+00,8.3886080e+06), RES(1.4210854715201902743e-14, -1.1920928955077983828e-7)}, {FN (arccsch), ARG(1.0e+00,-8.3886080e+06), RES(1.4210854715201902743e-14, 1.1920928955077983828e-7)}, {FN (arccsch), ARG(-1.0e+00,8.3886080e+06), RES(-1.4210854715201902743e-14, -1.1920928955077983828e-7)}, {FN (arccsch), ARG(-1.0e+00,-8.3886080e+06), RES(-1.4210854715201902743e-14, 1.1920928955077983828e-7)}, {FN (arccsch), ARG(2.0e+00,0.0e+00), RES(4.8121182505960344750e-1, 0.0)}, {FN (arccsch), ARG(-2.0e+00,0.0e+00), RES(-4.8121182505960344750e-1, 0.0)}, {FN (arccsch), ARG(2.0e+00,1.19209289550781250e-07), RES(4.8121182505960201756e-1, -2.6656007498500149811e-8)}, {FN (arccsch), ARG(2.0e+00,-1.19209289550781250e-07), RES(4.8121182505960201756e-1, 2.6656007498500149811e-8)}, {FN (arccsch), ARG(-2.0e+00,1.19209289550781250e-07), RES(-4.8121182505960201756e-1, -2.6656007498500149811e-8)}, {FN (arccsch), ARG(-2.0e+00,-1.19209289550781250e-07), RES(-4.8121182505960201756e-1, 2.6656007498500149811e-8)}, {FN (arccsch), ARG(2.0e+00,5.0e-01), RES(4.5717847686917515748e-1, -1.0654050295275703990e-1)}, {FN (arccsch), ARG(2.0e+00,-5.0e-01), RES(4.5717847686917515748e-1, 1.0654050295275703990e-1)}, {FN (arccsch), ARG(-2.0e+00,5.0e-01), RES(-4.5717847686917515748e-1, -1.0654050295275703990e-1)}, {FN (arccsch), ARG(-2.0e+00,-5.0e-01), RES(-4.5717847686917515748e-1, 1.0654050295275703990e-1)}, {FN (arccsch), ARG(2.0e+00,1.0e+00), RES(3.9656823011232897892e-1, -1.8631805410781552582e-1)}, {FN (arccsch), ARG(2.0e+00,-1.0e+00), RES(3.9656823011232897892e-1, 1.8631805410781552582e-1)}, {FN (arccsch), ARG(-2.0e+00,1.0e+00), RES(-3.9656823011232897892e-1, -1.8631805410781552582e-1)}, {FN (arccsch), ARG(-2.0e+00,-1.0e+00), RES(-3.9656823011232897892e-1, 1.8631805410781552582e-1)}, {FN (arccsch), ARG(2.0e+00,2.0e+00), RES(2.5489557334055081773e-1, -2.4452216513554014646e-1)}, {FN (arccsch), ARG(2.0e+00,-2.0e+00), RES(2.5489557334055081773e-1, 2.4452216513554014646e-1)}, {FN (arccsch), ARG(-2.0e+00,2.0e+00), RES(-2.5489557334055081773e-1, -2.4452216513554014646e-1)}, {FN (arccsch), ARG(-2.0e+00,-2.0e+00), RES(-2.5489557334055081773e-1, 2.4452216513554014646e-1)}, {FN (arccsch), ARG(2.0e+00,8.3886080e+06), RES(2.8421709430402593796e-14, -1.1920928955077475608e-7)}, {FN (arccsch), ARG(2.0e+00,-8.3886080e+06), RES(2.8421709430402593796e-14, 1.1920928955077475608e-7)}, {FN (arccsch), ARG(-2.0e+00,8.3886080e+06), RES(-2.8421709430402593796e-14, -1.1920928955077475608e-7)}, {FN (arccsch), ARG(-2.0e+00,-8.3886080e+06), RES(-2.8421709430402593796e-14, 1.1920928955077475608e-7)}, {FN (arccsch), ARG(8.3886080e+06,0.0e+00), RES(1.1920928955078096766e-7, 0.0)}, {FN (arccsch), ARG(-8.3886080e+06,0.0e+00), RES(-1.1920928955078096766e-7, 0.0)}, {FN (arccsch), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.1920928955078096766e-7, -1.6940658945085886411e-21)}, {FN (arccsch), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.1920928955078096766e-7, 1.6940658945085886411e-21)}, {FN (arccsch), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(-1.1920928955078096766e-7, -1.6940658945085886411e-21)}, {FN (arccsch), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(-1.1920928955078096766e-7, 1.6940658945085886411e-21)}, {FN (arccsch), ARG(8.3886080e+06,5.0e-01), RES(1.1920928955078054414e-7, -7.1054273576009261281e-15)}, {FN (arccsch), ARG(8.3886080e+06,-5.0e-01), RES(1.1920928955078054414e-7, 7.1054273576009261281e-15)}, {FN (arccsch), ARG(-8.3886080e+06,5.0e-01), RES(-1.1920928955078054414e-7, -7.1054273576009261281e-15)}, {FN (arccsch), ARG(-8.3886080e+06,-5.0e-01), RES(-1.1920928955078054414e-7, 7.1054273576009261281e-15)}, {FN (arccsch), ARG(8.3886080e+06,1.0e+00), RES(1.1920928955077927359e-7, -1.4210854715201700795e-14)}, {FN (arccsch), ARG(8.3886080e+06,-1.0e+00), RES(1.1920928955077927359e-7, 1.4210854715201700795e-14)}, {FN (arccsch), ARG(-8.3886080e+06,1.0e+00), RES(-1.1920928955077927359e-7, -1.4210854715201700795e-14)}, {FN (arccsch), ARG(-8.3886080e+06,-1.0e+00), RES(-1.1920928955077927359e-7, 1.4210854715201700795e-14)}, {FN (arccsch), ARG(8.3886080e+06,2.0e+00), RES(1.1920928955077419139e-7, -2.8421709430402189899e-14)}, {FN (arccsch), ARG(8.3886080e+06,-2.0e+00), RES(1.1920928955077419139e-7, 2.8421709430402189899e-14)}, {FN (arccsch), ARG(-8.3886080e+06,2.0e+00), RES(-1.1920928955077419139e-7, -2.8421709430402189899e-14)}, {FN (arccsch), ARG(-8.3886080e+06,-2.0e+00), RES(-1.1920928955077419139e-7, 2.8421709430402189899e-14)}, {FN (arccsch), ARG(8.3886080e+06,8.3886080e+06), RES(5.9604644775390695586e-8, -5.9604644775390554414e-8)}, {FN (arccsch), ARG(8.3886080e+06,-8.3886080e+06), RES(5.9604644775390695586e-8, 5.9604644775390554414e-8)}, {FN (arccsch), ARG(-8.3886080e+06,8.3886080e+06), RES(-5.9604644775390695586e-8, -5.9604644775390554414e-8)}, {FN (arccsch), ARG(-8.3886080e+06,-8.3886080e+06), RES(-5.9604644775390695586e-8, 5.9604644775390554414e-8)}, {FN (arcsech), ARG(0.0e+00,1.19209289550781250e-07), RES(1.6635532333438690979e1, -1.5707963267948966192e0)}, {FN (arcsech), ARG(0.0e+00,-1.19209289550781250e-07), RES(1.6635532333438690979e1, 1.5707963267948966192e0)}, {FN (arcsech), ARG(0.0e+00,5.0e-01), RES(1.4436354751788103425e0, -1.5707963267948966192e0)}, {FN (arcsech), ARG(0.0e+00,-5.0e-01), RES(1.4436354751788103425e0, 1.5707963267948966192e0)}, {FN (arcsech), ARG(0.0e+00,1.0e+00), RES(8.8137358701954302523e-1, -1.5707963267948966192e0)}, {FN (arcsech), ARG(0.0e+00,-1.0e+00), RES(8.8137358701954302523e-1, 1.5707963267948966192e0)}, {FN (arcsech), ARG(0.0e+00,2.0e+00), RES(4.8121182505960344750e-1, -1.5707963267948966192e0)}, {FN (arcsech), ARG(0.0e+00,-2.0e+00), RES(4.8121182505960344750e-1, 1.5707963267948966192e0)}, {FN (arcsech), ARG(0.0e+00,8.3886080e+06), RES(1.1920928955078096766e-7, -1.5707963267948966192e0)}, {FN (arcsech), ARG(0.0e+00,-8.3886080e+06), RES(1.1920928955078096766e-7, 1.5707963267948966192e0)}, {FN (arcsech), ARG(1.19209289550781250e-07,0.0e+00), RES(1.6635532333438683873e1, 0.0)}, {FN (arcsech), ARG(-1.19209289550781250e-07,0.0e+00), RES(1.6635532333438683873e1, 3.1415926535897932385e0)}, {FN (arcsech), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(1.6288958743158714771e1, -7.8539816339745541504e-1)}, {FN (arcsech), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.6288958743158714771e1, 7.8539816339745541504e-1)}, {FN (arcsech), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(1.6288958743158714771e1, -2.3561944901923378234e0)}, {FN (arcsech), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.6288958743158714771e1, 2.3561944901923378234e0)}, {FN (arcsech), ARG(1.19209289550781250e-07,5.0e-01), RES(1.4436354751787798371e0, -1.5707961135468366312e0)}, {FN (arcsech), ARG(1.19209289550781250e-07,-5.0e-01), RES(1.4436354751787798371e0, 1.5707961135468366312e0)}, {FN (arcsech), ARG(-1.19209289550781250e-07,5.0e-01), RES(1.4436354751787798371e0, -1.5707965400429566072e0)}, {FN (arcsech), ARG(-1.19209289550781250e-07,-5.0e-01), RES(1.4436354751787798371e0, 1.5707965400429566072e0)}, {FN (arcsech), ARG(1.19209289550781250e-07,1.0e+00), RES(8.8137358701953548879e-1, -1.5707962425011995974e0)}, {FN (arcsech), ARG(1.19209289550781250e-07,-1.0e+00), RES(8.8137358701953548879e-1, 1.5707962425011995974e0)}, {FN (arcsech), ARG(-1.19209289550781250e-07,1.0e+00), RES(8.8137358701953548879e-1, -1.5707964110885936410e0)}, {FN (arcsech), ARG(-1.19209289550781250e-07,-1.0e+00), RES(8.8137358701953548879e-1, 1.5707964110885936410e0)}, {FN (arcsech), ARG(1.19209289550781250e-07,2.0e+00), RES(4.8121182505960201756e-1, -1.5707963001388891207e0)}, {FN (arcsech), ARG(1.19209289550781250e-07,-2.0e+00), RES(4.8121182505960201756e-1, 1.5707963001388891207e0)}, {FN (arcsech), ARG(-1.19209289550781250e-07,2.0e+00), RES(4.8121182505960201756e-1, -1.5707963534509041177e0)}, {FN (arcsech), ARG(-1.19209289550781250e-07,-2.0e+00), RES(4.8121182505960201756e-1, 1.5707963534509041177e0)}, {FN (arcsech), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.1920928955078096766e-7, -1.5707963267948966192e0)}, {FN (arcsech), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.1920928955078096766e-7, 1.5707963267948966192e0)}, {FN (arcsech), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(1.1920928955078096766e-7, -1.5707963267948966192e0)}, {FN (arcsech), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(1.1920928955078096766e-7, 1.5707963267948966192e0)}, {FN (arcsech), ARG(5.0e-01,0.0e+00), RES(1.3169578969248167086e0, 0.0)}, {FN (arcsech), ARG(-5.0e-01,0.0e+00), RES(1.3169578969248167086e0, 3.1415926535897932385e0)}, {FN (arcsech), ARG(5.0e-01,1.19209289550781250e-07), RES(1.3169578969247948296e0, -2.7530206164818516969e-7)}, {FN (arcsech), ARG(5.0e-01,-1.19209289550781250e-07), RES(1.3169578969247948296e0, 2.7530206164818516969e-7)}, {FN (arcsech), ARG(-5.0e-01,1.19209289550781250e-07), RES(1.3169578969247948296e0, -3.1415923782877315903e0)}, {FN (arcsech), ARG(-5.0e-01,-1.19209289550781250e-07), RES(1.3169578969247948296e0, 3.1415923782877315903e0)}, {FN (arcsech), ARG(5.0e-01,5.0e-01), RES(1.0612750619050356520e0, -9.0455689430238136413e-1)}, {FN (arcsech), ARG(5.0e-01,-5.0e-01), RES(1.0612750619050356520e0, 9.0455689430238136413e-1)}, {FN (arcsech), ARG(-5.0e-01,5.0e-01), RES(1.0612750619050356520e0, -2.2370357592874118743e0)}, {FN (arcsech), ARG(-5.0e-01,-5.0e-01), RES(1.0612750619050356520e0, 2.2370357592874118743e0)}, {FN (arcsech), ARG(5.0e-01,1.0e+00), RES(7.6388434595371104541e-1, -1.2595705295501355239e0)}, {FN (arcsech), ARG(5.0e-01,-1.0e+00), RES(7.6388434595371104541e-1, 1.2595705295501355239e0)}, {FN (arcsech), ARG(-5.0e-01,1.0e+00), RES(7.6388434595371104541e-1, -1.8820221240396577146e0)}, {FN (arcsech), ARG(-5.0e-01,-1.0e+00), RES(7.6388434595371104541e-1, 1.8820221240396577146e0)}, {FN (arcsech), ARG(5.0e-01,2.0e+00), RES(4.5717847686917515748e-1, -1.4642558238421395793e0)}, {FN (arcsech), ARG(5.0e-01,-2.0e+00), RES(4.5717847686917515748e-1, 1.4642558238421395793e0)}, {FN (arcsech), ARG(-5.0e-01,2.0e+00), RES(4.5717847686917515748e-1, -1.6773368297476536591e0)}, {FN (arcsech), ARG(-5.0e-01,-2.0e+00), RES(4.5717847686917515748e-1, 1.6773368297476536591e0)}, {FN (arcsech), ARG(5.0e-01,8.3886080e+06), RES(1.1920928955078054414e-7, -1.5707963267948895138e0)}, {FN (arcsech), ARG(5.0e-01,-8.3886080e+06), RES(1.1920928955078054414e-7, 1.5707963267948895138e0)}, {FN (arcsech), ARG(-5.0e-01,8.3886080e+06), RES(1.1920928955078054414e-7, -1.5707963267949037247e0)}, {FN (arcsech), ARG(-5.0e-01,-8.3886080e+06), RES(1.1920928955078054414e-7, 1.5707963267949037247e0)}, {FN (arcsech), ARG(1.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (arcsech), ARG(-1.0e+00,0.0e+00), RES(0, 3.1415926535897932385e0)}, {FN (arcsech), ARG(1.0e+00,1.19209289550781250e-07), RES(3.4526696585164602772e-4, -3.4526700015083915182e-4)}, {FN (arcsech), ARG(1.0e+00,-1.19209289550781250e-07), RES(3.4526696585164602772e-4, 3.4526700015083915182e-4)}, {FN (arcsech), ARG(-1.0e+00,1.19209289550781250e-07), RES(3.4526696585164602772e-4, -3.1412473865896423993e0)}, {FN (arcsech), ARG(-1.0e+00,-1.19209289550781250e-07), RES(3.4526696585164602772e-4, 3.1412473865896423993e0)}, {FN (arcsech), ARG(1.0e+00,5.0e-01), RES(5.3321829058411214108e-1, -7.9770997007539188581e-1)}, {FN (arcsech), ARG(1.0e+00,-5.0e-01), RES(5.3321829058411214108e-1, 7.9770997007539188581e-1)}, {FN (arcsech), ARG(-1.0e+00,5.0e-01), RES(5.3321829058411214108e-1, -2.3438826835144013527e0)}, {FN (arcsech), ARG(-1.0e+00,-5.0e-01), RES(5.3321829058411214108e-1, 2.3438826835144013527e0)}, {FN (arcsech), ARG(1.0e+00,1.0e+00), RES(5.3063753095251782602e-1, -1.1185178796437059372e0)}, {FN (arcsech), ARG(1.0e+00,-1.0e+00), RES(5.3063753095251782602e-1, 1.1185178796437059372e0)}, {FN (arcsech), ARG(-1.0e+00,1.0e+00), RES(5.3063753095251782602e-1, -2.0230747739460873013e0)}, {FN (arcsech), ARG(-1.0e+00,-1.0e+00), RES(5.3063753095251782602e-1, 2.0230747739460873013e0)}, {FN (arcsech), ARG(1.0e+00,2.0e+00), RES(3.9656823011232897892e-1, -1.3844782726870810934e0)}, {FN (arcsech), ARG(1.0e+00,-2.0e+00), RES(3.9656823011232897892e-1, 1.3844782726870810934e0)}, {FN (arcsech), ARG(-1.0e+00,2.0e+00), RES(3.9656823011232897892e-1, -1.7571143809027121451e0)}, {FN (arcsech), ARG(-1.0e+00,-2.0e+00), RES(3.9656823011232897892e-1, 1.7571143809027121451e0)}, {FN (arcsech), ARG(1.0e+00,8.3886080e+06), RES(1.1920928955077927359e-7, -1.5707963267948824084e0)}, {FN (arcsech), ARG(1.0e+00,-8.3886080e+06), RES(1.1920928955077927359e-7, 1.5707963267948824084e0)}, {FN (arcsech), ARG(-1.0e+00,8.3886080e+06), RES(1.1920928955077927359e-7, -1.5707963267949108301e0)}, {FN (arcsech), ARG(-1.0e+00,-8.3886080e+06), RES(1.1920928955077927359e-7, 1.5707963267949108301e0)}, {FN (arcsech), ARG(2.0e+00,0.0e+00), RES(0, 1.0471975511965977462e0)}, {FN (arcsech), ARG(-2.0e+00,0.0e+00), RES(0, 2.0943951023931954923e0)}, {FN (arcsech), ARG(2.0e+00,1.19209289550781250e-07), RES(3.4412757706023621662e-8, -1.0471975511966001392e0)}, {FN (arcsech), ARG(2.0e+00,-1.19209289550781250e-07), RES(3.4412757706023621662e-8, 1.0471975511966001392e0)}, {FN (arcsech), ARG(-2.0e+00,1.19209289550781250e-07), RES(3.4412757706023621662e-8, -2.0943951023931930993e0)}, {FN (arcsech), ARG(-2.0e+00,-1.19209289550781250e-07), RES(3.4412757706023621662e-8, 2.0943951023931930993e0)}, {FN (arcsech), ARG(2.0e+00,5.0e-01), RES(1.3261586085051183885e-1, -1.0854889863215541067e0)}, {FN (arcsech), ARG(2.0e+00,-5.0e-01), RES(1.3261586085051183885e-1, 1.0854889863215541067e0)}, {FN (arcsech), ARG(-2.0e+00,5.0e-01), RES(1.3261586085051183885e-1, -2.0561036672682391317e0)}, {FN (arcsech), ARG(-2.0e+00,-5.0e-01), RES(1.3261586085051183885e-1, 2.0561036672682391317e0)}, {FN (arcsech), ARG(2.0e+00,1.0e+00), RES(2.1561241855582964497e-1, -1.1692099351270905509e0)}, {FN (arcsech), ARG(2.0e+00,-1.0e+00), RES(2.1561241855582964497e-1, 1.1692099351270905509e0)}, {FN (arcsech), ARG(-2.0e+00,1.0e+00), RES(2.1561241855582964497e-1, -1.9723827184627026875e0)}, {FN (arcsech), ARG(-2.0e+00,-1.0e+00), RES(2.1561241855582964497e-1, 1.9723827184627026875e0)}, {FN (arcsech), ARG(2.0e+00,2.0e+00), RES(2.5489557334055081773e-1, -1.3262741616593564728e0)}, {FN (arcsech), ARG(2.0e+00,-2.0e+00), RES(2.5489557334055081773e-1, 1.3262741616593564728e0)}, {FN (arcsech), ARG(-2.0e+00,2.0e+00), RES(2.5489557334055081773e-1, -1.8153184919304367657e0)}, {FN (arcsech), ARG(-2.0e+00,-2.0e+00), RES(2.5489557334055081773e-1, 1.8153184919304367657e0)}, {FN (arcsech), ARG(2.0e+00,8.3886080e+06), RES(1.1920928955077419139e-7, -1.5707963267948681975e0)}, {FN (arcsech), ARG(2.0e+00,-8.3886080e+06), RES(1.1920928955077419139e-7, 1.5707963267948681975e0)}, {FN (arcsech), ARG(-2.0e+00,8.3886080e+06), RES(1.1920928955077419139e-7, -1.5707963267949250409e0)}, {FN (arcsech), ARG(-2.0e+00,-8.3886080e+06), RES(1.1920928955077419139e-7, 1.5707963267949250409e0)}, {FN (arcsech), ARG(8.3886080e+06,0.0e+00), RES(0, 1.5707962075856070684e0)}, {FN (arcsech), ARG(-8.3886080e+06,0.0e+00), RES(0, 1.570796446004186170e0)}, {FN (arcsech), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.6940658945086127152e-21, -1.5707962075856070684e0)}, {FN (arcsech), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.6940658945086127152e-21, 1.5707962075856070684e0)}, {FN (arcsech), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(1.6940658945086127152e-21, -1.570796446004186170e0)}, {FN (arcsech), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(1.6940658945086127152e-21, 1.570796446004186170e0)}, {FN (arcsech), ARG(8.3886080e+06,5.0e-01), RES(7.1054273576010271023e-15, -1.5707962075856070685e0)}, {FN (arcsech), ARG(8.3886080e+06,-5.0e-01), RES(7.1054273576010271023e-15, 1.5707962075856070685e0)}, {FN (arcsech), ARG(-8.3886080e+06,5.0e-01), RES(7.1054273576010271023e-15, -1.570796446004186170e0)}, {FN (arcsech), ARG(-8.3886080e+06,-5.0e-01), RES(7.1054273576010271023e-15, 1.570796446004186170e0)}, {FN (arcsech), ARG(8.3886080e+06,1.0e+00), RES(1.4210854715201902743e-14, -1.5707962075856070685e0)}, {FN (arcsech), ARG(8.3886080e+06,-1.0e+00), RES(1.4210854715201902743e-14, 1.5707962075856070685e0)}, {FN (arcsech), ARG(-8.3886080e+06,1.0e+00), RES(1.4210854715201902743e-14, -1.570796446004186170e0)}, {FN (arcsech), ARG(-8.3886080e+06,-1.0e+00), RES(1.4210854715201902743e-14, 1.570796446004186170e0)}, {FN (arcsech), ARG(8.3886080e+06,2.0e+00), RES(2.8421709430402593796e-14, -1.5707962075856070685e0)}, {FN (arcsech), ARG(8.3886080e+06,-2.0e+00), RES(2.8421709430402593796e-14, 1.5707962075856070685e0)}, {FN (arcsech), ARG(-8.3886080e+06,2.0e+00), RES(2.8421709430402593796e-14, -1.570796446004186170e0)}, {FN (arcsech), ARG(-8.3886080e+06,-2.0e+00), RES(2.8421709430402593796e-14, 1.570796446004186170e0)}, {FN (arcsech), ARG(8.3886080e+06,8.3886080e+06), RES(5.9604644775390695586e-8, -1.5707962671902518438e0)}, {FN (arcsech), ARG(8.3886080e+06,-8.3886080e+06), RES(5.9604644775390695586e-8, 1.5707962671902518438e0)}, {FN (arcsech), ARG(-8.3886080e+06,8.3886080e+06), RES(5.9604644775390695586e-8, -1.5707963863995413946e0)}, {FN (arcsech), ARG(-8.3886080e+06,-8.3886080e+06), RES(5.9604644775390695586e-8, 1.5707963863995413946e0)}, {FN (arccoth), ARG(0.0e+00,1.19209289550781250e-07), RES(0, -1.5707962075856070685e0)}, {FN (arccoth), ARG(0.0e+00,-1.19209289550781250e-07), RES(0, 1.5707962075856070685e0)}, {FN (arccoth), ARG(0.0e+00,5.0e-01), RES(0, -1.1071487177940905030e0)}, {FN (arccoth), ARG(0.0e+00,-5.0e-01), RES(0, 1.1071487177940905030e0)}, {FN (arccoth), ARG(0.0e+00,1.0e+00), RES(0, -7.8539816339744830962e-1)}, {FN (arccoth), ARG(0.0e+00,-1.0e+00), RES(0, 7.8539816339744830962e-1)}, {FN (arccoth), ARG(0.0e+00,2.0e+00), RES(0, -4.6364760900080611621e-1)}, {FN (arccoth), ARG(0.0e+00,-2.0e+00), RES(0, 4.6364760900080611621e-1)}, {FN (arccoth), ARG(0.0e+00,8.3886080e+06), RES(0, -1.1920928955078068531e-7)}, {FN (arccoth), ARG(0.0e+00,-8.3886080e+06), RES(0, 1.1920928955078068531e-7)}, {FN (arccoth), ARG(1.19209289550781250e-07,0.0e+00), RES(1.1920928955078181469e-7, -1.5707963267948966192e0)}, {FN (arccoth), ARG(-1.19209289550781250e-07,0.0e+00), RES(-1.1920928955078181469e-7, 1.5707963267948966192e0)}, {FN (arccoth), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(1.1920928955078012062e-7, -1.5707962075856070684e0)}, {FN (arccoth), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.1920928955078012062e-7, 1.5707962075856070684e0)}, {FN (arccoth), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(-1.1920928955078012062e-7, -1.5707962075856070684e0)}, {FN (arccoth), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(-1.1920928955078012062e-7, 1.5707962075856070684e0)}, {FN (arccoth), ARG(1.19209289550781250e-07,5.0e-01), RES(9.5367431640625072280e-8, -1.1071487177940859555e0)}, {FN (arccoth), ARG(1.19209289550781250e-07,-5.0e-01), RES(9.5367431640625072280e-8, 1.1071487177940859555e0)}, {FN (arccoth), ARG(-1.19209289550781250e-07,5.0e-01), RES(-9.5367431640625072280e-8, -1.1071487177940859555e0)}, {FN (arccoth), ARG(-1.19209289550781250e-07,-5.0e-01), RES(-9.5367431640625072280e-8, 1.1071487177940859555e0)}, {FN (arccoth), ARG(1.19209289550781250e-07,1.0e+00), RES(5.9604644775390483828e-8, -7.8539816339744475690e-1)}, {FN (arccoth), ARG(1.19209289550781250e-07,-1.0e+00), RES(5.9604644775390483828e-8, 7.8539816339744475690e-1)}, {FN (arccoth), ARG(-1.19209289550781250e-07,1.0e+00), RES(-5.9604644775390483828e-8, -7.8539816339744475690e-1)}, {FN (arccoth), ARG(-1.19209289550781250e-07,-1.0e+00), RES(-5.9604644775390483828e-8, 7.8539816339744475690e-1)}, {FN (arccoth), ARG(1.19209289550781250e-07,2.0e+00), RES(2.3841857910156200307e-8, -4.6364760900080497935e-1)}, {FN (arccoth), ARG(1.19209289550781250e-07,-2.0e+00), RES(2.3841857910156200307e-8, 4.6364760900080497935e-1)}, {FN (arccoth), ARG(-1.19209289550781250e-07,2.0e+00), RES(-2.3841857910156200307e-8, -4.6364760900080497935e-1)}, {FN (arccoth), ARG(-1.19209289550781250e-07,-2.0e+00), RES(-2.3841857910156200307e-8, 4.6364760900080497935e-1)}, {FN (arccoth), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.6940658945085766040e-21, -1.1920928955078068531e-7)}, {FN (arccoth), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.6940658945085766040e-21, 1.1920928955078068531e-7)}, {FN (arccoth), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(-1.6940658945085766040e-21, -1.1920928955078068531e-7)}, {FN (arccoth), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(-1.6940658945085766040e-21, 1.1920928955078068531e-7)}, {FN (arccoth), ARG(5.0e-01,0.0e+00), RES(5.4930614433405484570e-1, -1.5707963267948966192e0)}, {FN (arccoth), ARG(-5.0e-01,0.0e+00), RES(-5.4930614433405484570e-1, 1.5707963267948966192e0)}, {FN (arccoth), ARG(5.0e-01,1.19209289550781250e-07), RES(5.4930614433404221383e-1, -1.5707961678491772182e0)}, {FN (arccoth), ARG(5.0e-01,-1.19209289550781250e-07), RES(5.4930614433404221383e-1, 1.5707961678491772182e0)}, {FN (arccoth), ARG(-5.0e-01,1.19209289550781250e-07), RES(-5.4930614433404221383e-1, -1.5707961678491772182e0)}, {FN (arccoth), ARG(-5.0e-01,-1.19209289550781250e-07), RES(-5.4930614433404221383e-1, 1.5707961678491772182e0)}, {FN (arccoth), ARG(5.0e-01,5.0e-01), RES(4.0235947810852509365e-1, -1.0172219678978513677e0)}, {FN (arccoth), ARG(5.0e-01,-5.0e-01), RES(4.0235947810852509365e-1, 1.0172219678978513677e0)}, {FN (arccoth), ARG(-5.0e-01,5.0e-01), RES(-4.0235947810852509365e-1, -1.0172219678978513677e0)}, {FN (arccoth), ARG(-5.0e-01,-5.0e-01), RES(-4.0235947810852509365e-1, 1.0172219678978513677e0)}, {FN (arccoth), ARG(5.0e-01,1.0e+00), RES(2.3887786125685909036e-1, -7.2322066612406759210e-1)}, {FN (arccoth), ARG(5.0e-01,-1.0e+00), RES(2.3887786125685909036e-1, 7.2322066612406759210e-1)}, {FN (arccoth), ARG(-5.0e-01,1.0e+00), RES(-2.3887786125685909036e-1, -7.2322066612406759210e-1)}, {FN (arccoth), ARG(-5.0e-01,-1.0e+00), RES(-2.3887786125685909036e-1, 7.2322066612406759210e-1)}, {FN (arccoth), ARG(5.0e-01,2.0e+00), RES(9.6415620202996167238e-2, -4.4423988596007427049e-1)}, {FN (arccoth), ARG(5.0e-01,-2.0e+00), RES(9.6415620202996167238e-2, 4.4423988596007427049e-1)}, {FN (arccoth), ARG(-5.0e-01,2.0e+00), RES(-9.6415620202996167238e-2, -4.4423988596007427049e-1)}, {FN (arccoth), ARG(-5.0e-01,-2.0e+00), RES(-9.6415620202996167238e-2, 4.4423988596007427049e-1)}, {FN (arccoth), ARG(5.0e-01,8.3886080e+06), RES(7.1054273576008756410e-15, -1.1920928955078026179e-7)}, {FN (arccoth), ARG(5.0e-01,-8.3886080e+06), RES(7.1054273576008756410e-15, 1.1920928955078026179e-7)}, {FN (arccoth), ARG(-5.0e-01,8.3886080e+06), RES(-7.1054273576008756410e-15, -1.1920928955078026179e-7)}, {FN (arccoth), ARG(-5.0e-01,-8.3886080e+06), RES(-7.1054273576008756410e-15, 1.1920928955078026179e-7)}, {FN (arccoth), ARG(1.0e+00,1.19209289550781250e-07), RES(8.3177661667193446012e0, -7.8539813359512592192e-1)}, {FN (arccoth), ARG(1.0e+00,-1.19209289550781250e-07), RES(8.3177661667193446012e0, 7.8539813359512592192e-1)}, {FN (arccoth), ARG(-1.0e+00,1.19209289550781250e-07), RES(-8.3177661667193446012e0, -7.8539813359512592192e-1)}, {FN (arccoth), ARG(-1.0e+00,-1.19209289550781250e-07), RES(-8.3177661667193446012e0, 7.8539813359512592192e-1)}, {FN (arccoth), ARG(1.0e+00,5.0e-01), RES(7.0830333601405402006e-1, -6.6290883183401623253e-1)}, {FN (arccoth), ARG(1.0e+00,-5.0e-01), RES(7.0830333601405402006e-1, 6.6290883183401623253e-1)}, {FN (arccoth), ARG(-1.0e+00,5.0e-01), RES(-7.0830333601405402006e-1, -6.6290883183401623253e-1)}, {FN (arccoth), ARG(-1.0e+00,-5.0e-01), RES(-7.0830333601405402006e-1, 6.6290883183401623253e-1)}, {FN (arccoth), ARG(1.0e+00,1.0e+00), RES(4.0235947810852509365e-1, -5.5357435889704525151e-1)}, {FN (arccoth), ARG(1.0e+00,-1.0e+00), RES(4.0235947810852509365e-1, 5.5357435889704525151e-1)}, {FN (arccoth), ARG(-1.0e+00,1.0e+00), RES(-4.0235947810852509365e-1, -5.5357435889704525151e-1)}, {FN (arccoth), ARG(-1.0e+00,-1.0e+00), RES(-4.0235947810852509365e-1, 5.5357435889704525151e-1)}, {FN (arccoth), ARG(1.0e+00,2.0e+00), RES(1.7328679513998632735e-1, -3.9269908169872415481e-1)}, {FN (arccoth), ARG(1.0e+00,-2.0e+00), RES(1.7328679513998632735e-1, 3.9269908169872415481e-1)}, {FN (arccoth), ARG(-1.0e+00,2.0e+00), RES(-1.7328679513998632735e-1, -3.9269908169872415481e-1)}, {FN (arccoth), ARG(-1.0e+00,-2.0e+00), RES(-1.7328679513998632735e-1, 3.9269908169872415481e-1)}, {FN (arccoth), ARG(1.0e+00,8.3886080e+06), RES(1.4210854715201599821e-14, -1.1920928955077899125e-7)}, {FN (arccoth), ARG(1.0e+00,-8.3886080e+06), RES(1.4210854715201599821e-14, 1.1920928955077899125e-7)}, {FN (arccoth), ARG(-1.0e+00,8.3886080e+06), RES(-1.4210854715201599821e-14, -1.1920928955077899125e-7)}, {FN (arccoth), ARG(-1.0e+00,-8.3886080e+06), RES(-1.4210854715201599821e-14, 1.1920928955077899125e-7)}, {FN (arccoth), ARG(2.0e+00,0.0e+00), RES(5.4930614433405484570e-1, 0.0)}, {FN (arccoth), ARG(-2.0e+00,0.0e+00), RES(-5.4930614433405484570e-1, 0.0)}, {FN (arccoth), ARG(2.0e+00,1.19209289550781250e-07), RES(5.4930614433405168773e-1, -3.9736429850260144780e-8)}, {FN (arccoth), ARG(2.0e+00,-1.19209289550781250e-07), RES(5.4930614433405168773e-1, 3.9736429850260144780e-8)}, {FN (arccoth), ARG(-2.0e+00,1.19209289550781250e-07), RES(-5.4930614433405168773e-1, -3.9736429850260144780e-8)}, {FN (arccoth), ARG(-2.0e+00,-1.19209289550781250e-07), RES(-5.4930614433405168773e-1, 3.9736429850260144780e-8)}, {FN (arccoth), ARG(2.0e+00,5.0e-01), RES(5.0037000005253101744e-1, -1.4924946579308963897e-1)}, {FN (arccoth), ARG(2.0e+00,-5.0e-01), RES(5.0037000005253101744e-1, 1.4924946579308963897e-1)}, {FN (arccoth), ARG(-2.0e+00,5.0e-01), RES(-5.0037000005253101744e-1, -1.4924946579308963897e-1)}, {FN (arccoth), ARG(-2.0e+00,-5.0e-01), RES(-5.0037000005253101744e-1, 1.4924946579308963897e-1)}, {FN (arccoth), ARG(2.0e+00,1.0e+00), RES(4.0235947810852509365e-1, -2.3182380450040305811e-1)}, {FN (arccoth), ARG(2.0e+00,-1.0e+00), RES(4.0235947810852509365e-1, 2.3182380450040305811e-1)}, {FN (arccoth), ARG(-2.0e+00,1.0e+00), RES(-4.0235947810852509365e-1, -2.3182380450040305811e-1)}, {FN (arccoth), ARG(-2.0e+00,-1.0e+00), RES(-4.0235947810852509365e-1, 2.3182380450040305811e-1)}, {FN (arccoth), ARG(2.0e+00,2.0e+00), RES(2.3887786125685909036e-1, -2.5957305712326147589e-1)}, {FN (arccoth), ARG(2.0e+00,-2.0e+00), RES(2.3887786125685909036e-1, 2.5957305712326147589e-1)}, {FN (arccoth), ARG(-2.0e+00,2.0e+00), RES(-2.3887786125685909036e-1, -2.5957305712326147589e-1)}, {FN (arccoth), ARG(-2.0e+00,-2.0e+00), RES(-2.3887786125685909036e-1, 2.5957305712326147589e-1)}, {FN (arccoth), ARG(2.0e+00,8.3886080e+06), RES(2.8421709430401987951e-14, -1.1920928955077390905e-7)}, {FN (arccoth), ARG(2.0e+00,-8.3886080e+06), RES(2.8421709430401987951e-14, 1.1920928955077390905e-7)}, {FN (arccoth), ARG(-2.0e+00,8.3886080e+06), RES(-2.8421709430401987951e-14, -1.1920928955077390905e-7)}, {FN (arccoth), ARG(-2.0e+00,-8.3886080e+06), RES(-2.8421709430401987951e-14, 1.1920928955077390905e-7)}, {FN (arccoth), ARG(8.3886080e+06,0.0e+00), RES(1.1920928955078181469e-7, 0.0)}, {FN (arccoth), ARG(-8.3886080e+06,0.0e+00), RES(-1.1920928955078181469e-7, 0.0)}, {FN (arccoth), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.1920928955078181469e-7, -1.6940658945086247523e-21)}, {FN (arccoth), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.1920928955078181469e-7, 1.6940658945086247523e-21)}, {FN (arccoth), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(-1.1920928955078181469e-7, -1.6940658945086247523e-21)}, {FN (arccoth), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(-1.1920928955078181469e-7, 1.6940658945086247523e-21)}, {FN (arccoth), ARG(8.3886080e+06,5.0e-01), RES(1.1920928955078139117e-7, -7.1054273576010775894e-15)}, {FN (arccoth), ARG(8.3886080e+06,-5.0e-01), RES(1.1920928955078139117e-7, 7.1054273576010775894e-15)}, {FN (arccoth), ARG(-8.3886080e+06,5.0e-01), RES(-1.1920928955078139117e-7, -7.1054273576010775894e-15)}, {FN (arccoth), ARG(-8.3886080e+06,-5.0e-01), RES(-1.1920928955078139117e-7, 7.1054273576010775894e-15)}, {FN (arccoth), ARG(8.3886080e+06,1.0e+00), RES(1.1920928955078012062e-7, -1.4210854715202003717e-14)}, {FN (arccoth), ARG(8.3886080e+06,-1.0e+00), RES(1.1920928955078012062e-7, 1.4210854715202003717e-14)}, {FN (arccoth), ARG(-8.3886080e+06,1.0e+00), RES(-1.1920928955078012062e-7, -1.4210854715202003717e-14)}, {FN (arccoth), ARG(-8.3886080e+06,-1.0e+00), RES(-1.1920928955078012062e-7, 1.4210854715202003717e-14)}, {FN (arccoth), ARG(8.3886080e+06,2.0e+00), RES(1.1920928955077503843e-7, -2.8421709430402795744e-14)}, {FN (arccoth), ARG(8.3886080e+06,-2.0e+00), RES(1.1920928955077503843e-7, 2.8421709430402795744e-14)}, {FN (arccoth), ARG(-8.3886080e+06,2.0e+00), RES(-1.1920928955077503843e-7, -2.8421709430402795744e-14)}, {FN (arccoth), ARG(-8.3886080e+06,-2.0e+00), RES(-1.1920928955077503843e-7, 2.8421709430402795744e-14)}, {FN (arccoth), ARG(8.3886080e+06,8.3886080e+06), RES(5.9604644775390483828e-8, -5.9604644775390766172e-8)}, {FN (arccoth), ARG(8.3886080e+06,-8.3886080e+06), RES(5.9604644775390483828e-8, 5.9604644775390766172e-8)}, {FN (arccoth), ARG(-8.3886080e+06,8.3886080e+06), RES(-5.9604644775390483828e-8, -5.9604644775390766172e-8)}, {FN (arccoth), ARG(-8.3886080e+06,-8.3886080e+06), RES(-5.9604644775390483828e-8, 5.9604644775390766172e-8)}, gsl/complex/results2.h0000644000175000017500000001056313536674414013342 0ustar eddedd {FN (pow), ARG(1.0e+00,0.0e+00), ARG(0.0e+00,0.0e+00), RES(1e0, 0.0)}, {FN (pow), ARG(1.0e+00,0.0e+00), ARG(1.0e+00,0.0e+00), RES(1e0, 0.0)}, {FN (pow), ARG(1.0e+00,0.0e+00), ARG(0.0e+00,1.0e+00), RES(1e0, 0.0)}, {FN (pow), ARG(1.0e+00,0.0e+00), ARG(-1.0e+00,0.0e+00), RES(1e0, 0.0)}, {FN (pow), ARG(1.0e+00,0.0e+00), ARG(0.0e+00,-1.0e+00), RES(1e0, 0.0)}, {FN (pow), ARG(1.0e+00,0.0e+00), ARG(5.0e-01,1.00000000000000005551e-01), RES(1e0, 0.0)}, {FN (pow), ARG(1.0e+00,0.0e+00), ARG(5.0e-01,-1.00000000000000005551e-01), RES(1e0, 0.0)}, {FN (pow), ARG(0.0e+00,1.0e+00), ARG(0.0e+00,0.0e+00), RES(1e0, 0.0)}, {FN (pow), ARG(0.0e+00,1.0e+00), ARG(1.0e+00,0.0e+00), RES(0, 1)}, {FN (pow), ARG(0.0e+00,1.0e+00), ARG(0.0e+00,1.0e+00), RES(2.0787957635076190855e-1, 0.0)}, {FN (pow), ARG(0.0e+00,1.0e+00), ARG(-1.0e+00,0.0e+00), RES(0, -1)}, {FN (pow), ARG(0.0e+00,1.0e+00), ARG(0.0e+00,-1.0e+00), RES(4.8104773809653516555e0, 0.0)}, {FN (pow), ARG(0.0e+00,1.0e+00), ARG(5.0e-01,1.00000000000000005551e-01), RES(6.0431891044739184057e-1, 6.0431891044739184057e-1)}, {FN (pow), ARG(0.0e+00,1.0e+00), ARG(5.0e-01,-1.00000000000000005551e-01), RES(8.2737771622906514822e-1, 8.2737771622906514822e-1)}, {FN (pow), ARG(-1.0e+00,0.0e+00), ARG(0.0e+00,0.0e+00), RES(1e0, 0.0)}, {FN (pow), ARG(-1.0e+00,0.0e+00), ARG(1.0e+00,0.0e+00), RES(-1e0, 0.0)}, {FN (pow), ARG(-1.0e+00,0.0e+00), ARG(0.0e+00,1.0e+00), RES(4.3213918263772249774e-2, 0.0)}, {FN (pow), ARG(-1.0e+00,0.0e+00), ARG(-1.0e+00,0.0e+00), RES(-1e0, 0.0)}, {FN (pow), ARG(-1.0e+00,0.0e+00), ARG(0.0e+00,-1.0e+00), RES(2.3140692632779269006e1, 0.0)}, {FN (pow), ARG(-1.0e+00,0.0e+00), ARG(5.0e-01,1.00000000000000005551e-01), RES(0, 7.3040269104864559813e-1)}, {FN (pow), ARG(-1.0e+00,0.0e+00), ARG(5.0e-01,-1.00000000000000005551e-01), RES(0, 1.3691077706248469087e0)}, {FN (pow), ARG(0.0e+00,-1.0e+00), ARG(0.0e+00,0.0e+00), RES(1e0, 0.0)}, {FN (pow), ARG(0.0e+00,-1.0e+00), ARG(1.0e+00,0.0e+00), RES(0, -1)}, {FN (pow), ARG(0.0e+00,-1.0e+00), ARG(0.0e+00,1.0e+00), RES(4.8104773809653516555e0, 0.0)}, {FN (pow), ARG(0.0e+00,-1.0e+00), ARG(-1.0e+00,0.0e+00), RES(0, 1)}, {FN (pow), ARG(0.0e+00,-1.0e+00), ARG(0.0e+00,-1.0e+00), RES(2.0787957635076190855e-1, 0.0)}, {FN (pow), ARG(0.0e+00,-1.0e+00), ARG(5.0e-01,1.00000000000000005551e-01), RES(8.2737771622906514822e-1, -8.2737771622906514822e-1)}, {FN (pow), ARG(0.0e+00,-1.0e+00), ARG(5.0e-01,-1.00000000000000005551e-01), RES(6.0431891044739184057e-1, -6.0431891044739184057e-1)}, {FN (pow), ARG(5.0e-01,1.00000000000000005551e-01), ARG(0.0e+00,0.0e+00), RES(1e0, 0.0)}, {FN (pow), ARG(5.0e-01,1.00000000000000005551e-01), ARG(1.0e+00,0.0e+00), RES(5e-1, 1.0000000000000000555e-1)}, {FN (pow), ARG(5.0e-01,1.00000000000000005551e-01), ARG(0.0e+00,1.0e+00), RES(6.4160554864378080418e-1, -5.1201864456768275590e-1)}, {FN (pow), ARG(5.0e-01,1.00000000000000005551e-01), ARG(-1.0e+00,0.0e+00), RES(1.9230769230769230687e0, -3.8461538461538463509e-1)}, {FN (pow), ARG(5.0e-01,1.00000000000000005551e-01), ARG(0.0e+00,-1.0e+00), RES(9.5219021866126714108e-1, 7.5987364224031834571e-1)}, {FN (pow), ARG(5.0e-01,1.00000000000000005551e-01), ARG(5.0e-01,1.00000000000000005551e-01), RES(6.9977300530987816719e-1, 2.1940939105372143160e-2)}, {FN (pow), ARG(5.0e-01,1.00000000000000005551e-01), ARG(5.0e-01,-1.00000000000000005551e-01), RES(7.1829191470060938876e-1, 1.2038189555821612762e-1)}, {FN (pow), ARG(5.0e-01,-1.00000000000000005551e-01), ARG(0.0e+00,0.0e+00), RES(1e0, 0.0)}, {FN (pow), ARG(5.0e-01,-1.00000000000000005551e-01), ARG(1.0e+00,0.0e+00), RES(5e-1, -1.0000000000000000555e-1)}, {FN (pow), ARG(5.0e-01,-1.00000000000000005551e-01), ARG(0.0e+00,1.0e+00), RES(9.5219021866126714108e-1, -7.5987364224031834571e-1)}, {FN (pow), ARG(5.0e-01,-1.00000000000000005551e-01), ARG(-1.0e+00,0.0e+00), RES(1.9230769230769230687e0, 3.8461538461538463509e-1)}, {FN (pow), ARG(5.0e-01,-1.00000000000000005551e-01), ARG(0.0e+00,-1.0e+00), RES(6.4160554864378080418e-1, 5.1201864456768275590e-1)}, {FN (pow), ARG(5.0e-01,-1.00000000000000005551e-01), ARG(5.0e-01,1.00000000000000005551e-01), RES(7.1829191470060938876e-1, -1.2038189555821612762e-1)}, {FN (pow), ARG(5.0e-01,-1.00000000000000005551e-01), ARG(5.0e-01,-1.00000000000000005551e-01), RES(6.9977300530987816719e-1, -2.1940939105372143160e-2)}, {FN (pow), ARG(0.0e+00,9.0e+00), ARG(2.0e+00,0.0e+00), RES(-8.1e+01, 0.0e+00)}, gsl/complex/test_source.c0000664000175000017500000001613714057135461014107 0ustar eddedd/* complex/test_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * Copyright (C) 2021 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ struct f { char *name; double (*f) (gsl_complex z); double x; double y; double fx; double fy; }; struct fz { char *name; gsl_complex (*f) (gsl_complex z); double x; double y; double fx; double fy; }; struct fzz { char *name; gsl_complex (*f) (gsl_complex z1, gsl_complex z2); double x1; double y1; double x2; double y2; double fx; double fy; }; struct freal { char *name; gsl_complex (*f) (double x); double x; double fx; double fy; }; struct fzreal { char *name; gsl_complex (*f) (gsl_complex z, double a); double x; double y; double a; double fx; double fy; }; #define FN(x) "gsl_complex_" #x, gsl_complex_ ## x #define ARG(x,y) x, y #define RES(x,y) x, y struct f list[] = { #include "results1.h" {"", 0, 0, 0, 0, 0} }; struct fz listz[] = { #include "results.h" {"", 0, 0, 0, 0, 0} }; struct fzz listzz[] = { {FN (pow), ARG(0.0,0.0), ARG(0.0,0.0), RES(1.0, 0.0)}, #include "results2.h" {"", 0, 0, 0, 0, 0, 0, 0} }; struct freal listreal[] = { #include "results_real.h" {"", 0, 0, 0, 0} }; struct fzreal listzreal[] = { #include "results_zreal.h" {"", 0, 0, 0, 0, 0, 0} }; #ifndef TEST_FACTOR #ifdef RELEASED #define TEST_FACTOR 100.0 #else #define TEST_FACTOR 1.0 #endif #endif static int FUNCTION (test, all) () { size_t i = 0; #if defined(BASE_DOUBLE) const double tol = GSL_DBL_EPSILON; #endif gsl_ieee_env_setup(); for (i = 0 ; i < 10; i++) { ATOMIC x = (i - 5.0) * 0.3; ATOMIC y = (i + 2.1) * 0.5; TYPE(gsl_complex) z = gsl_complex_rect(x, y); gsl_test_rel (GSL_REAL(z), x, tol, "gsl_complex_rect real part at (x=%g,y=%g)", x, y); gsl_test_rel (GSL_IMAG(z), y, tol, "gsl_complex_rect imag part at (x=%g,y=%g)", x, y); GSL_REAL(z) = y; gsl_test_rel (GSL_REAL(z), y, tol, "assignment real part (%g)", y); GSL_IMAG(z) = x; gsl_test_rel (GSL_IMAG(z), x, tol, "assignment imag part (%g)", x); } for (i = 0 ; i < 10; i++) { ATOMIC r = (i - 5.0) * 0.3 ; ATOMIC t = 2.0 * M_PI * i / 5 ; ATOMIC x = r * cos(t), y = r * sin(t) ; TYPE(gsl_complex) z = gsl_complex_polar (r, t) ; gsl_test_rel (GSL_REAL(z), x, tol, "gsl_complex_polar real part at (r=%g,t=%g)", r, t); gsl_test_rel (GSL_IMAG(z), y, tol, "gsl_complex_polar imag part at (r=%g,t=%g)", r, t); } i = 0; while (list[i].f) { struct f t = list[i]; TYPE(gsl_complex) z = gsl_complex_rect (t.x, t.y); ATOMIC f = (t.f) (z); gsl_test_rel (f, t.fx, tol, "%s at (%g,%g)", t.name, t.x, t.y); i++; } i = 0; while (listz[i].f) { struct fz t = listz[i]; TYPE(gsl_complex) z = gsl_complex_rect (t.x, t.y); TYPE(gsl_complex) fz = (t.f) (z); ATOMIC fx = GSL_REAL (fz), fy = GSL_IMAG (fz); #ifdef DEBUG printf("x = "); gsl_ieee_fprintf_double (stdout, &t.x); printf("\n"); printf("y = "); gsl_ieee_fprintf_double (stdout, &t.y); printf("\n"); printf("fx = "); gsl_ieee_fprintf_double (stdout, &fx); printf("\n"); printf("ex = "); gsl_ieee_fprintf_double (stdout, &t.fx); printf("\n"); printf("fy = "); gsl_ieee_fprintf_double (stdout, &fy); printf("\n"); printf("ey = "); gsl_ieee_fprintf_double (stdout, &t.fy); printf("\n"); #endif gsl_test_rel (fx, t.fx, 10.0 * tol, "%s real part at (%g,%g)", t.name, t.x, t.y); gsl_test_rel (fy, t.fy, 10.0 * tol, "%s imag part at (%g,%g)", t.name, t.x, t.y); i++; } i = 0; while (listzz[i].f) { struct fzz t = listzz[i]; TYPE(gsl_complex) z1 = gsl_complex_rect (t.x1, t.y1); TYPE(gsl_complex) z2 = gsl_complex_rect (t.x2, t.y2); TYPE(gsl_complex) fz = (t.f) (z1, z2); ATOMIC fx = GSL_REAL (fz), fy = GSL_IMAG (fz); #ifdef DEBUG printf("x1 = "); gsl_ieee_fprintf_double (stdout, &t.x1); printf("\n"); printf("y1 = "); gsl_ieee_fprintf_double (stdout, &t.y1); printf("\n"); printf("x2 = "); gsl_ieee_fprintf_double (stdout, &t.x2); printf("\n"); printf("y2 = "); gsl_ieee_fprintf_double (stdout, &t.y2); printf("\n"); printf("fx = "); gsl_ieee_fprintf_double (stdout, &fx); printf("\n"); printf("ex = "); gsl_ieee_fprintf_double (stdout, &t.fx); printf("\n"); printf("fy = "); gsl_ieee_fprintf_double (stdout, &fy); printf("\n"); printf("ey = "); gsl_ieee_fprintf_double (stdout, &t.fy); printf("\n"); #endif gsl_test_rel (fx, t.fx, 1.0e3 * tol, "%s real part at (%g,%g;%g,%g)", t.name, t.x1, t.y1, t.x2, t.y2); gsl_test_rel (fy, t.fy, 1.0e3 * tol, "%s imag part at (%g,%g;%g,%g)", t.name, t.x1, t.y1, t.x2, t.y2); i++; } i = 0; while (listreal[i].f) { struct freal t = listreal[i]; TYPE(gsl_complex) fz = (t.f) (t.x); ATOMIC fx = GSL_REAL (fz), fy = GSL_IMAG (fz); #ifdef DEBUG printf("x = "); gsl_ieee_fprintf_double (stdout, &t.x); printf("\n"); printf("fx = "); gsl_ieee_fprintf_double (stdout, &fx); printf("\n"); printf("ex = "); gsl_ieee_fprintf_double (stdout, &t.fx); printf("\n"); printf("fy = "); gsl_ieee_fprintf_double (stdout, &fy); printf("\n"); printf("ey = "); gsl_ieee_fprintf_double (stdout, &t.fy); printf("\n"); #endif gsl_test_rel (fx, t.fx, tol, "%s real part at (%g,0)", t.name, t.x); gsl_test_rel (fy, t.fy, tol, "%s imag part at (%g,0)", t.name, t.x); i++; } i = 0; while (listzreal[i].f) { struct fzreal t = listzreal[i]; TYPE(gsl_complex) z = gsl_complex_rect (t.x, t.y); TYPE(gsl_complex) fz = (t.f) (z, t.a); ATOMIC fx = GSL_REAL (fz), fy = GSL_IMAG (fz); #ifdef DEBUG printf("x = "); gsl_ieee_fprintf_double (stdout, &t.x); printf("\n"); printf("y = "); gsl_ieee_fprintf_double (stdout, &t.y); printf("\n"); printf("a = "); gsl_ieee_fprintf_double (stdout, &t.a); printf("\n"); printf("fx = "); gsl_ieee_fprintf_double (stdout, &fx); printf("\n"); printf("ex = "); gsl_ieee_fprintf_double (stdout, &t.fx); printf("\n"); printf("fy = "); gsl_ieee_fprintf_double (stdout, &fy); printf("\n"); printf("ey = "); gsl_ieee_fprintf_double (stdout, &t.fy); printf("\n"); #endif gsl_test_rel (fx, t.fx, 10.0 * tol, "%s real part at (%g,0)", t.name, t.x); gsl_test_rel (fy, t.fy, 10.0 * tol, "%s imag part at (%g,0)", t.name, t.x); i++; } return 0; } gsl/complex/TODO0000644000175000017500000000156713536674414012102 0ustar eddedd# -*- org -*- #+CATEGORY: complex * Complex polynomial solvers (Got Newton-Mueller from jotahtin@cc.hut.fi, still to add (BJG)). * The asymptotic behavior of the secondary functions (sec, csc, cot, etc) can overflow because of expressions like cosh(x) / D , where D = cosh^2 which is computed prior to the division. This should by special casing "small" vs "large" arguments as has been done for the sin,cos,tan versions. * Perhaps there is something useful in LCY65 L. A. Lyusternik, O. A. Chervonenkis, and A. R. Yanpol'skii, Handbook for computing elementary functions, International Series of Monographs in Pure and Applied Mathematics, vol. 76, Pergamon Press, Oxford, 1965. * Comparing the Complex Arithmetic routines in Section 5.5 of Numerical Recipes gsl_complex_div() uses simple complex division while 5.5.5 has a more sophisticated one that avoids underflow/overflow. gsl/complex/results_zreal.h0000644000175000017500000000434413536674414014455 0ustar eddedd {FN (pow_real), ARG(0.0e+00,0.0e+00), 0.0e+00, RES(1e0, 0.0)}, {FN (pow_real), ARG(0.0e+00,0.0e+00), 1.0e+00, RES(0e0, 0.0)}, {FN (pow_real), ARG(0.0e+00,0.0e+00), 5.0e-01, RES(0e0, 0.0)}, {FN (pow_real), ARG(0.0e+00,0.0e+00), 2.0e+00, RES(0e0, 0.0)}, {FN (pow_real), ARG(1.0e+00,0.0e+00), 0.0e+00, RES(1e0, 0.0)}, {FN (pow_real), ARG(1.0e+00,0.0e+00), 1.0e+00, RES(1e0, 0.0)}, {FN (pow_real), ARG(1.0e+00,0.0e+00), 5.0e-01, RES(1e0, 0.0)}, {FN (pow_real), ARG(1.0e+00,0.0e+00), 2.0e+00, RES(1e0, 0.0)}, {FN (pow_real), ARG(0.0e+00,1.0e+00), 0.0e+00, RES(1e0, 0.0)}, {FN (pow_real), ARG(0.0e+00,1.0e+00), 1.0e+00, RES(0, 1)}, {FN (pow_real), ARG(0.0e+00,1.0e+00), 5.0e-01, RES(7.0710678118654752440e-1, 7.0710678118654752440e-1)}, {FN (pow_real), ARG(0.0e+00,1.0e+00), 2.0e+00, RES(-1e0, 0.0)}, {FN (pow_real), ARG(-1.0e+00,0.0e+00), 0.0e+00, RES(1e0, 0.0)}, {FN (pow_real), ARG(-1.0e+00,0.0e+00), 1.0e+00, RES(-1e0, 0.0)}, {FN (pow_real), ARG(-1.0e+00,0.0e+00), 5.0e-01, RES(0, 1)}, {FN (pow_real), ARG(-1.0e+00,0.0e+00), 2.0e+00, RES(1e0, 0.0)}, {FN (pow_real), ARG(0.0e+00,-1.0e+00), 0.0e+00, RES(1e0, 0.0)}, {FN (pow_real), ARG(0.0e+00,-1.0e+00), 1.0e+00, RES(0, -1)}, {FN (pow_real), ARG(0.0e+00,-1.0e+00), 5.0e-01, RES(7.0710678118654752440e-1, -7.0710678118654752440e-1)}, {FN (pow_real), ARG(0.0e+00,-1.0e+00), 2.0e+00, RES(-1e0, 0.0)}, {FN (pow_real), ARG(5.0e-01,1.00000000000000005551e-01), 0.0e+00, RES(1e0, 0.0)}, {FN (pow_real), ARG(5.0e-01,1.00000000000000005551e-01), 1.0e+00, RES(5e-1, 1.0000000000000000555e-1)}, {FN (pow_real), ARG(5.0e-01,1.00000000000000005551e-01), 5.0e-01, RES(7.1059902594898006379e-1, 7.0363169908974695409e-2)}, {FN (pow_real), ARG(5.0e-01,1.00000000000000005551e-01), 2.0e+00, RES(2.3999999999999999889e-1, 1.0000000000000000555e-1)}, {FN (pow_real), ARG(5.0e-01,-1.00000000000000005551e-01), 0.0e+00, RES(1e0, 0.0)}, {FN (pow_real), ARG(5.0e-01,-1.00000000000000005551e-01), 1.0e+00, RES(5e-1, -1.0000000000000000555e-1)}, {FN (pow_real), ARG(5.0e-01,-1.00000000000000005551e-01), 5.0e-01, RES(7.1059902594898006379e-1, -7.0363169908974695409e-2)}, {FN (pow_real), ARG(5.0e-01,-1.00000000000000005551e-01), 2.0e+00, RES(2.3999999999999999889e-1, -1.0000000000000000555e-1)}, gsl/complex/gsl_complex_math.h0000644000175000017500000001364013536674414015103 0ustar eddedd/* complex/gsl_complex_math.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2007 Jorma Olavi Tähtinen, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_COMPLEX_MATH_H__ #define __GSL_COMPLEX_MATH_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus #define __BEGIN_DECLS extern "C" { #define __END_DECLS } #else #define __BEGIN_DECLS /* empty */ #define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Complex numbers */ gsl_complex gsl_complex_polar (double r, double theta); /* r= r e^(i theta) */ INLINE_DECL gsl_complex gsl_complex_rect (double x, double y); /* r= real+i*imag */ #ifdef HAVE_INLINE INLINE_FUN gsl_complex gsl_complex_rect (double x, double y) { /* return z = x + i y */ gsl_complex z; GSL_SET_COMPLEX (&z, x, y); return z; } #endif #define GSL_COMPLEX_ONE (gsl_complex_rect(1.0,0.0)) #define GSL_COMPLEX_ZERO (gsl_complex_rect(0.0,0.0)) #define GSL_COMPLEX_NEGONE (gsl_complex_rect(-1.0,0.0)) /* Properties of complex numbers */ double gsl_complex_arg (gsl_complex z); /* return arg(z), -pi< arg(z) <=+pi */ double gsl_complex_abs (gsl_complex z); /* return |z| */ double gsl_complex_abs2 (gsl_complex z); /* return |z|^2 */ double gsl_complex_logabs (gsl_complex z); /* return log|z| */ /* Complex arithmetic operators */ gsl_complex gsl_complex_add (gsl_complex a, gsl_complex b); /* r=a+b */ gsl_complex gsl_complex_sub (gsl_complex a, gsl_complex b); /* r=a-b */ gsl_complex gsl_complex_mul (gsl_complex a, gsl_complex b); /* r=a*b */ gsl_complex gsl_complex_div (gsl_complex a, gsl_complex b); /* r=a/b */ gsl_complex gsl_complex_add_real (gsl_complex a, double x); /* r=a+x */ gsl_complex gsl_complex_sub_real (gsl_complex a, double x); /* r=a-x */ gsl_complex gsl_complex_mul_real (gsl_complex a, double x); /* r=a*x */ gsl_complex gsl_complex_div_real (gsl_complex a, double x); /* r=a/x */ gsl_complex gsl_complex_add_imag (gsl_complex a, double y); /* r=a+iy */ gsl_complex gsl_complex_sub_imag (gsl_complex a, double y); /* r=a-iy */ gsl_complex gsl_complex_mul_imag (gsl_complex a, double y); /* r=a*iy */ gsl_complex gsl_complex_div_imag (gsl_complex a, double y); /* r=a/iy */ gsl_complex gsl_complex_conjugate (gsl_complex z); /* r=conj(z) */ gsl_complex gsl_complex_inverse (gsl_complex a); /* r=1/a */ gsl_complex gsl_complex_negative (gsl_complex a); /* r=-a */ /* Elementary Complex Functions */ gsl_complex gsl_complex_sqrt (gsl_complex z); /* r=sqrt(z) */ gsl_complex gsl_complex_sqrt_real (double x); /* r=sqrt(x) (x<0 ok) */ gsl_complex gsl_complex_pow (gsl_complex a, gsl_complex b); /* r=a^b */ gsl_complex gsl_complex_pow_real (gsl_complex a, double b); /* r=a^b */ gsl_complex gsl_complex_exp (gsl_complex a); /* r=exp(a) */ gsl_complex gsl_complex_log (gsl_complex a); /* r=log(a) (base e) */ gsl_complex gsl_complex_log10 (gsl_complex a); /* r=log10(a) (base 10) */ gsl_complex gsl_complex_log_b (gsl_complex a, gsl_complex b); /* r=log_b(a) (base=b) */ /* Complex Trigonometric Functions */ gsl_complex gsl_complex_sin (gsl_complex a); /* r=sin(a) */ gsl_complex gsl_complex_cos (gsl_complex a); /* r=cos(a) */ gsl_complex gsl_complex_sec (gsl_complex a); /* r=sec(a) */ gsl_complex gsl_complex_csc (gsl_complex a); /* r=csc(a) */ gsl_complex gsl_complex_tan (gsl_complex a); /* r=tan(a) */ gsl_complex gsl_complex_cot (gsl_complex a); /* r=cot(a) */ /* Inverse Complex Trigonometric Functions */ gsl_complex gsl_complex_arcsin (gsl_complex a); /* r=arcsin(a) */ gsl_complex gsl_complex_arcsin_real (double a); /* r=arcsin(a) */ gsl_complex gsl_complex_arccos (gsl_complex a); /* r=arccos(a) */ gsl_complex gsl_complex_arccos_real (double a); /* r=arccos(a) */ gsl_complex gsl_complex_arcsec (gsl_complex a); /* r=arcsec(a) */ gsl_complex gsl_complex_arcsec_real (double a); /* r=arcsec(a) */ gsl_complex gsl_complex_arccsc (gsl_complex a); /* r=arccsc(a) */ gsl_complex gsl_complex_arccsc_real (double a); /* r=arccsc(a) */ gsl_complex gsl_complex_arctan (gsl_complex a); /* r=arctan(a) */ gsl_complex gsl_complex_arccot (gsl_complex a); /* r=arccot(a) */ /* Complex Hyperbolic Functions */ gsl_complex gsl_complex_sinh (gsl_complex a); /* r=sinh(a) */ gsl_complex gsl_complex_cosh (gsl_complex a); /* r=coshh(a) */ gsl_complex gsl_complex_sech (gsl_complex a); /* r=sech(a) */ gsl_complex gsl_complex_csch (gsl_complex a); /* r=csch(a) */ gsl_complex gsl_complex_tanh (gsl_complex a); /* r=tanh(a) */ gsl_complex gsl_complex_coth (gsl_complex a); /* r=coth(a) */ /* Inverse Complex Hyperbolic Functions */ gsl_complex gsl_complex_arcsinh (gsl_complex a); /* r=arcsinh(a) */ gsl_complex gsl_complex_arccosh (gsl_complex a); /* r=arccosh(a) */ gsl_complex gsl_complex_arccosh_real (double a); /* r=arccosh(a) */ gsl_complex gsl_complex_arcsech (gsl_complex a); /* r=arcsech(a) */ gsl_complex gsl_complex_arccsch (gsl_complex a); /* r=arccsch(a) */ gsl_complex gsl_complex_arctanh (gsl_complex a); /* r=arctanh(a) */ gsl_complex gsl_complex_arctanh_real (double a); /* r=arctanh(a) */ gsl_complex gsl_complex_arccoth (gsl_complex a); /* r=arccoth(a) */ __END_DECLS #endif /* __GSL_COMPLEX_MATH_H__ */ gsl/complex/test.c0000664000175000017500000000245614057135461012526 0ustar eddedd/* complex/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * Copyright (C) 2020, 2021 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #if defined(HAVE_COMPLEX_H) && defined(TEST_C11) #include #endif #include #include #include #include #include #define BASE_DOUBLE #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_DOUBLE int main (void) { test_all(); exit (gsl_test_summary ()); } gsl/complex/results_real.h0000644000175000017500000002060413536674414014260 0ustar eddedd {FN (sqrt_real), -1.0e+01, RES(0, 3.1622776601683793320e0)}, {FN (sqrt_real), -2.0e+00, RES(0, 1.4142135623730950488e0)}, {FN (sqrt_real), -1.0e+00, RES(0, 1)}, {FN (sqrt_real), -7.50e-01, RES(0, 8.6602540378443864676e-1)}, {FN (sqrt_real), -5.0e-01, RES(0, 7.0710678118654752440e-1)}, {FN (sqrt_real), -1.250e-01, RES(0, 3.5355339059327376220e-1)}, {FN (sqrt_real), -3.45266983001243932001e-04, RES(0, 1.8581361171917517303e-2)}, {FN (sqrt_real), -1.19209289550781250e-07, RES(0, 3.4526698300124390840e-4)}, {FN (sqrt_real), 0.0e+00, RES(0e0, 0.0)}, {FN (sqrt_real), 1.19209289550781250e-07, RES(3.4526698300124390840e-4, 0.0)}, {FN (sqrt_real), 3.45266983001243932001e-04, RES(1.8581361171917517303e-2, 0.0)}, {FN (sqrt_real), 1.250e-01, RES(3.5355339059327376220e-1, 0.0)}, {FN (sqrt_real), 5.0e-01, RES(7.0710678118654752440e-1, 0.0)}, {FN (sqrt_real), 7.50e-01, RES(8.6602540378443864676e-1, 0.0)}, {FN (sqrt_real), 1.0e+00, RES(1e0, 0.0)}, {FN (sqrt_real), 2.0e+00, RES(1.4142135623730950488e0, 0.0)}, {FN (sqrt_real), 1.0e+01, RES(3.1622776601683793320e0, 0.0)}, {FN (arcsin_real), -1.0e+01, RES(-1.5707963267948966192e0, 2.9932228461263808979e0)}, {FN (arcsin_real), -2.0e+00, RES(-1.5707963267948966192e0, 1.3169578969248167086e0)}, {FN (arcsin_real), -1.0e+00, RES(-1.5707963267948966192e0, 0.0)}, {FN (arcsin_real), -7.50e-01, RES(-8.4806207898148100805e-1, 0.0)}, {FN (arcsin_real), -5.0e-01, RES(-5.2359877559829887308e-1, 0.0)}, {FN (arcsin_real), -1.250e-01, RES(-1.2532783116806539687e-1, 0.0)}, {FN (arcsin_real), -3.45266983001243932001e-04, RES(-3.4526698986108292481e-4, 0.0)}, {FN (arcsin_real), -1.19209289550781250e-07, RES(-1.1920928955078153234e-7, 0.0)}, {FN (arcsin_real), 0.0e+00, RES(0e0, 0.0)}, {FN (arcsin_real), 1.19209289550781250e-07, RES(1.1920928955078153234e-7, 0.0)}, {FN (arcsin_real), 3.45266983001243932001e-04, RES(3.4526698986108292481e-4, 0.0)}, {FN (arcsin_real), 1.250e-01, RES(1.2532783116806539687e-1, 0.0)}, {FN (arcsin_real), 5.0e-01, RES(5.2359877559829887308e-1, 0.0)}, {FN (arcsin_real), 7.50e-01, RES(8.4806207898148100805e-1, 0.0)}, {FN (arcsin_real), 1.0e+00, RES(1.5707963267948966192e0, 0.0)}, {FN (arcsin_real), 2.0e+00, RES(1.5707963267948966192e0, -1.3169578969248167086e0)}, {FN (arcsin_real), 1.0e+01, RES(1.5707963267948966192e0, -2.9932228461263808979e0)}, {FN (arccos_real), -1.0e+01, RES(3.1415926535897932385e0, -2.9932228461263808979e0)}, {FN (arccos_real), -2.0e+00, RES(3.1415926535897932385e0, -1.3169578969248167086e0)}, {FN (arccos_real), -1.0e+00, RES(3.1415926535897932385e0, 0.0)}, {FN (arccos_real), -7.50e-01, RES(2.4188584057763776273e0, 0.0)}, {FN (arccos_real), -5.0e-01, RES(2.0943951023931954923e0, 0.0)}, {FN (arccos_real), -1.250e-01, RES(1.6961241579629620161e0, 0.0)}, {FN (arccos_real), -3.45266983001243932001e-04, RES(1.5711415937847577022e0, 0.0)}, {FN (arccos_real), -1.19209289550781250e-07, RES(1.570796446004186170e0, 0.0)}, {FN (arccos_real), 0.0e+00, RES(1.5707963267948966192e0, 0.0)}, {FN (arccos_real), 1.19209289550781250e-07, RES(1.5707962075856070684e0, 0.0)}, {FN (arccos_real), 3.45266983001243932001e-04, RES(1.5704510598050355363e0, 0.0)}, {FN (arccos_real), 1.250e-01, RES(1.4454684956268312224e0, 0.0)}, {FN (arccos_real), 5.0e-01, RES(1.0471975511965977462e0, 0.0)}, {FN (arccos_real), 7.50e-01, RES(7.2273424781341561118e-1, 0.0)}, {FN (arccos_real), 1.0e+00, RES(0e0, 0.0)}, {FN (arccos_real), 2.0e+00, RES(0, 1.3169578969248167086e0)}, {FN (arccos_real), 1.0e+01, RES(0, 2.9932228461263808979e0)}, {FN (arccosh_real), -1.0e+01, RES(2.9932228461263808979e0, 3.1415926535897932385e0)}, {FN (arccosh_real), -2.0e+00, RES(1.3169578969248167086e0, 3.1415926535897932385e0)}, {FN (arccosh_real), -1.0e+00, RES(0, 3.1415926535897932385e0)}, {FN (arccosh_real), -7.50e-01, RES(0, 2.4188584057763776273e0)}, {FN (arccosh_real), -5.0e-01, RES(0, 2.0943951023931954923e0)}, {FN (arccosh_real), -1.250e-01, RES(0, 1.6961241579629620161e0)}, {FN (arccosh_real), -3.45266983001243932001e-04, RES(0, 1.5711415937847577022e0)}, {FN (arccosh_real), -1.19209289550781250e-07, RES(0, 1.570796446004186170e0)}, {FN (arccosh_real), 0.0e+00, RES(0, 1.5707963267948966192e0)}, {FN (arccosh_real), 1.19209289550781250e-07, RES(0, 1.5707962075856070684e0)}, {FN (arccosh_real), 3.45266983001243932001e-04, RES(0, 1.5704510598050355363e0)}, {FN (arccosh_real), 1.250e-01, RES(0, 1.4454684956268312224e0)}, {FN (arccosh_real), 5.0e-01, RES(0, 1.0471975511965977462e0)}, {FN (arccosh_real), 7.50e-01, RES(0, 7.2273424781341561118e-1)}, {FN (arccosh_real), 1.0e+00, RES(0e0, 0.0)}, {FN (arccosh_real), 2.0e+00, RES(1.3169578969248167086e0, 0.0)}, {FN (arccosh_real), 1.0e+01, RES(2.9932228461263808979e0, 0.0)}, {FN (arctanh_real), -1.0e+01, RES(-1.0033534773107558064e-1, 1.5707963267948966192e0)}, {FN (arctanh_real), -2.0e+00, RES(-5.4930614433405484570e-1, 1.5707963267948966192e0)}, {FN (arctanh_real), -7.50e-01, RES(-9.7295507452765665255e-1, 0.0)}, {FN (arctanh_real), -5.0e-01, RES(-5.4930614433405484570e-1, 0.0)}, {FN (arctanh_real), -1.250e-01, RES(-1.2565721414045303884e-1, 0.0)}, {FN (arctanh_real), -3.45266983001243932001e-04, RES(-3.4526699672092216295e-4, 0.0)}, {FN (arctanh_real), -1.19209289550781250e-07, RES(-1.1920928955078181469e-7, 0.0)}, {FN (arctanh_real), 0.0e+00, RES(0e0, 0.0)}, {FN (arctanh_real), 1.19209289550781250e-07, RES(1.1920928955078181469e-7, 0.0)}, {FN (arctanh_real), 3.45266983001243932001e-04, RES(3.4526699672092216295e-4, 0.0)}, {FN (arctanh_real), 1.250e-01, RES(1.2565721414045303884e-1, 0.0)}, {FN (arctanh_real), 5.0e-01, RES(5.4930614433405484570e-1, 0.0)}, {FN (arctanh_real), 7.50e-01, RES(9.7295507452765665255e-1, 0.0)}, {FN (arctanh_real), 2.0e+00, RES(5.4930614433405484570e-1, -1.5707963267948966192e0)}, {FN (arctanh_real), 1.0e+01, RES(1.0033534773107558064e-1, -1.5707963267948966192e0)}, {FN (arccsc_real), -1.0e+01, RES(-1.0016742116155979635e-1, 0.0)}, {FN (arccsc_real), -2.0e+00, RES(-5.2359877559829887308e-1, 0.0)}, {FN (arccsc_real), -1.0e+00, RES(-1.5707963267948966192e0, 0.0)}, {FN (arccsc_real), -7.50e-01, RES(-1.5707963267948966192e0, 7.9536546122390563053e-1)}, {FN (arccsc_real), -5.0e-01, RES(-1.5707963267948966192e0, 1.3169578969248167086e0)}, {FN (arccsc_real), -1.250e-01, RES(-1.5707963267948966192e0, 2.7686593833135738327e0)}, {FN (arccsc_real), -3.45266983001243932001e-04, RES(-1.5707963267948966192e0, 8.6643397271969925794e0)}, {FN (arccsc_real), -1.19209289550781250e-07, RES(-1.5707963267948966192e0, 1.6635532333438683873e1)}, {FN (arccsc_real), 1.19209289550781250e-07, RES(1.5707963267948966192e0, -1.6635532333438683873e1)}, {FN (arccsc_real), 3.45266983001243932001e-04, RES(1.5707963267948966192e0, -8.6643397271969925794e0)}, {FN (arccsc_real), 1.250e-01, RES(1.5707963267948966192e0, -2.7686593833135738327e0)}, {FN (arccsc_real), 5.0e-01, RES(1.5707963267948966192e0, -1.3169578969248167086e0)}, {FN (arccsc_real), 7.50e-01, RES(1.5707963267948966192e0, -7.9536546122390563053e-1)}, {FN (arccsc_real), 1.0e+00, RES(1.5707963267948966192e0, 0.0)}, {FN (arccsc_real), 2.0e+00, RES(5.2359877559829887308e-1, 0.0)}, {FN (arccsc_real), 1.0e+01, RES(1.0016742116155979635e-1, 0.0)}, {FN (arcsec_real), -1.0e+01, RES(1.6709637479564564156e0, 0.0)}, {FN (arcsec_real), -2.0e+00, RES(2.0943951023931954923e0, 0.0)}, {FN (arcsec_real), -1.0e+00, RES(3.1415926535897932385e0, 0.0)}, {FN (arcsec_real), -7.50e-01, RES(3.1415926535897932385e0, -7.9536546122390563053e-1)}, {FN (arcsec_real), -5.0e-01, RES(3.1415926535897932385e0, -1.3169578969248167086e0)}, {FN (arcsec_real), -1.250e-01, RES(3.1415926535897932385e0, -2.7686593833135738327e0)}, {FN (arcsec_real), -3.45266983001243932001e-04, RES(3.1415926535897932385e0, -8.6643397271969925794e0)}, {FN (arcsec_real), -1.19209289550781250e-07, RES(3.1415926535897932385e0, -1.6635532333438683873e1)}, {FN (arcsec_real), 1.19209289550781250e-07, RES(0, 1.6635532333438683873e1)}, {FN (arcsec_real), 3.45266983001243932001e-04, RES(0, 8.6643397271969925794e0)}, {FN (arcsec_real), 1.250e-01, RES(0, 2.7686593833135738327e0)}, {FN (arcsec_real), 5.0e-01, RES(0, 1.3169578969248167086e0)}, {FN (arcsec_real), 7.50e-01, RES(0, 7.9536546122390563053e-1)}, {FN (arcsec_real), 1.0e+00, RES(0e0, 0.0)}, {FN (arcsec_real), 2.0e+00, RES(1.0471975511965977462e0, 0.0)}, {FN (arcsec_real), 1.0e+01, RES(1.4706289056333368229e0, 0.0)}, gsl/complex/gsl_complex.h0000664000175000017500000001315314057135461014064 0ustar eddedd/* complex/gsl_complex.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * Copyright (C) 2020, 2021 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_COMPLEX_H__ #define __GSL_COMPLEX_H__ #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* two consecutive built-in types as a complex number */ typedef double * gsl_complex_packed ; typedef float * gsl_complex_packed_float ; typedef long double * gsl_complex_packed_long_double ; typedef const double * gsl_const_complex_packed ; typedef const float * gsl_const_complex_packed_float ; typedef const long double * gsl_const_complex_packed_long_double ; /* 2N consecutive built-in types as N complex numbers */ typedef double * gsl_complex_packed_array ; typedef float * gsl_complex_packed_array_float ; typedef long double * gsl_complex_packed_array_long_double ; typedef const double * gsl_const_complex_packed_array ; typedef const float * gsl_const_complex_packed_array_float ; typedef const long double * gsl_const_complex_packed_array_long_double ; /* Yes... this seems weird. Trust us. The point is just that sometimes you want to make it obvious that something is an output value. The fact that it lacks a 'const' may not be enough of a clue for people in some contexts. */ typedef double * gsl_complex_packed_ptr ; typedef float * gsl_complex_packed_float_ptr ; typedef long double * gsl_complex_packed_long_double_ptr ; typedef const double * gsl_const_complex_packed_ptr ; typedef const float * gsl_const_complex_packed_float_ptr ; typedef const long double * gsl_const_complex_packed_long_double_ptr ; /* * If is included, use the C99 complex type. Otherwise * define a type bit-compatible with C99 complex. The GSL_REAL and GSL_IMAG * macros require C11 functionality also (_Generic) */ /* older gcc compilers claim to be C11 compliant but do not support _Generic */ #if defined(__GNUC__) && (__GNUC__ < 7) # define GSL_COMPLEX_LEGACY 1 #endif #if !defined(GSL_COMPLEX_LEGACY) && \ defined(_Complex_I) && \ defined(complex) && \ defined(I) && \ defined(__STDC__) && (__STDC__ == 1) && \ defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* C11 */ # define GSL_COMPLEX_DEFINE(R, C) typedef R _Complex C ; # define GSL_COMPLEX_P(zp) (&(zp)) # define GSL_COMPLEX_EQ(z1,z2) ((z1) == (z2)) # define GSL_SET_COMPLEX(zp,x,y) (*(zp) = (x) + I * (y)) # define GSL_REAL(z) (_Generic((z), \ complex float : ((float *) &(z)), \ complex double : ((double *) &(z)), \ complex long double : ((long double *) &(z)))[0]) # define GSL_IMAG(z) (_Generic((z), \ complex float : ((float *) &(z)), \ complex double : ((double *) &(z)), \ complex long double : ((long double *) &(z)))[1]) # define GSL_COMPLEX_P_REAL(zp) GSL_REAL(*(zp)) # define GSL_COMPLEX_P_IMAG(zp) GSL_IMAG(*(zp)) # define GSL_SET_REAL(zp,x) do { GSL_REAL(*(zp)) = (x); } while(0) # define GSL_SET_IMAG(zp,x) do { GSL_IMAG(*(zp)) = (x); } while(0) #else /* legacy complex definitions */ /* * According to the C17 standard, 6.2.5 paragraph 13: * * "Each complex type has the same representation and alignment requirements * as an array type containing exactly two elements of the corresponding real * type; the first element is equal to the real part, and the second element to * the imaginary part, of the complex number." */ /*# define GSL_COMPLEX_DEFINE(R, C) typedef R C[2]*/ # define GSL_COMPLEX_DEFINE(R, C) typedef struct { R dat[2]; } C ; # define GSL_REAL(z) ((z).dat[0]) # define GSL_IMAG(z) ((z).dat[1]) # define GSL_COMPLEX_P(zp) ((zp)->dat) # define GSL_COMPLEX_P_REAL(zp) ((zp)->dat[0]) # define GSL_COMPLEX_P_IMAG(zp) ((zp)->dat[1]) # define GSL_COMPLEX_EQ(z1,z2) (((z1).dat[0] == (z2).dat[0]) && ((z1).dat[1] == (z2).dat[1])) # define GSL_SET_COMPLEX(zp,x,y) do {(zp)->dat[0]=(x); (zp)->dat[1]=(y);} while(0) # define GSL_SET_REAL(zp,x) do {(zp)->dat[0]=(x);} while(0) # define GSL_SET_IMAG(zp,y) do {(zp)->dat[1]=(y);} while(0) #endif GSL_COMPLEX_DEFINE(double, gsl_complex) GSL_COMPLEX_DEFINE(long double, gsl_complex_long_double) GSL_COMPLEX_DEFINE(float, gsl_complex_float) #define GSL_SET_COMPLEX_PACKED(zp,n,x,y) do {*((zp)+2*(n))=(x); *((zp)+(2*(n)+1))=(y);} while(0) __END_DECLS #endif /* __GSL_COMPLEX_H__ */ gsl/complex/math.c0000644000175000017500000005556113536674414012512 0ustar eddedd/* complex/math.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Jorma Olavi T�htinen, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Basic complex arithmetic functions * Original version by Jorma Olavi T�htinen * * Modified for GSL by Brian Gough, 3/2000 */ /* The following references describe the methods used in these * functions, * * T. E. Hull and Thomas F. Fairgrieve and Ping Tak Peter Tang, * "Implementing Complex Elementary Functions Using Exception * Handling", ACM Transactions on Mathematical Software, Volume 20 * (1994), pp 215-244, Corrigenda, p553 * * Hull et al, "Implementing the complex arcsin and arccosine * functions using exception handling", ACM Transactions on * Mathematical Software, Volume 23 (1997) pp 299-335 * * Abramowitz and Stegun, Handbook of Mathematical Functions, "Inverse * Circular Functions in Terms of Real and Imaginary Parts", Formulas * 4.4.37, 4.4.38, 4.4.39 */ #include #include #include #include #include /********************************************************************** * Complex numbers **********************************************************************/ gsl_complex gsl_complex_polar (double r, double theta) { /* return z = r exp(i theta) */ gsl_complex z; GSL_SET_COMPLEX (&z, r * cos (theta), r * sin (theta)); return z; } /********************************************************************** * Properties of complex numbers **********************************************************************/ double gsl_complex_arg (gsl_complex z) { /* return arg(z), -pi < arg(z) <= +pi */ double x = GSL_REAL (z); double y = GSL_IMAG (z); if (x == 0.0 && y == 0.0) { return 0; } return atan2 (y, x); } double gsl_complex_abs (gsl_complex z) { /* return |z| */ return hypot (GSL_REAL (z), GSL_IMAG (z)); } double gsl_complex_abs2 (gsl_complex z) { /* return |z|^2 */ double x = GSL_REAL (z); double y = GSL_IMAG (z); return (x * x + y * y); } double gsl_complex_logabs (gsl_complex z) { /* return log|z| */ double xabs = fabs (GSL_REAL (z)); double yabs = fabs (GSL_IMAG (z)); double max, u; if (xabs >= yabs) { max = xabs; u = yabs / xabs; } else { max = yabs; u = xabs / yabs; } /* Handle underflow when u is close to 0 */ return log (max) + 0.5 * log1p (u * u); } /*********************************************************************** * Complex arithmetic operators ***********************************************************************/ gsl_complex gsl_complex_add (gsl_complex a, gsl_complex b) { /* z=a+b */ double ar = GSL_REAL (a), ai = GSL_IMAG (a); double br = GSL_REAL (b), bi = GSL_IMAG (b); gsl_complex z; GSL_SET_COMPLEX (&z, ar + br, ai + bi); return z; } gsl_complex gsl_complex_add_real (gsl_complex a, double x) { /* z=a+x */ gsl_complex z; GSL_SET_COMPLEX (&z, GSL_REAL (a) + x, GSL_IMAG (a)); return z; } gsl_complex gsl_complex_add_imag (gsl_complex a, double y) { /* z=a+iy */ gsl_complex z; GSL_SET_COMPLEX (&z, GSL_REAL (a), GSL_IMAG (a) + y); return z; } gsl_complex gsl_complex_sub (gsl_complex a, gsl_complex b) { /* z=a-b */ double ar = GSL_REAL (a), ai = GSL_IMAG (a); double br = GSL_REAL (b), bi = GSL_IMAG (b); gsl_complex z; GSL_SET_COMPLEX (&z, ar - br, ai - bi); return z; } gsl_complex gsl_complex_sub_real (gsl_complex a, double x) { /* z=a-x */ gsl_complex z; GSL_SET_COMPLEX (&z, GSL_REAL (a) - x, GSL_IMAG (a)); return z; } gsl_complex gsl_complex_sub_imag (gsl_complex a, double y) { /* z=a-iy */ gsl_complex z; GSL_SET_COMPLEX (&z, GSL_REAL (a), GSL_IMAG (a) - y); return z; } gsl_complex gsl_complex_mul (gsl_complex a, gsl_complex b) { /* z=a*b */ double ar = GSL_REAL (a), ai = GSL_IMAG (a); double br = GSL_REAL (b), bi = GSL_IMAG (b); gsl_complex z; GSL_SET_COMPLEX (&z, ar * br - ai * bi, ar * bi + ai * br); return z; } gsl_complex gsl_complex_mul_real (gsl_complex a, double x) { /* z=a*x */ gsl_complex z; GSL_SET_COMPLEX (&z, x * GSL_REAL (a), x * GSL_IMAG (a)); return z; } gsl_complex gsl_complex_mul_imag (gsl_complex a, double y) { /* z=a*iy */ gsl_complex z; GSL_SET_COMPLEX (&z, -y * GSL_IMAG (a), y * GSL_REAL (a)); return z; } gsl_complex gsl_complex_div (gsl_complex a, gsl_complex b) { /* z=a/b */ double ar = GSL_REAL (a), ai = GSL_IMAG (a); double br = GSL_REAL (b), bi = GSL_IMAG (b); double s = 1.0 / gsl_complex_abs (b); double sbr = s * br; double sbi = s * bi; double zr = (ar * sbr + ai * sbi) * s; double zi = (ai * sbr - ar * sbi) * s; gsl_complex z; GSL_SET_COMPLEX (&z, zr, zi); return z; } gsl_complex gsl_complex_div_real (gsl_complex a, double x) { /* z=a/x */ gsl_complex z; GSL_SET_COMPLEX (&z, GSL_REAL (a) / x, GSL_IMAG (a) / x); return z; } gsl_complex gsl_complex_div_imag (gsl_complex a, double y) { /* z=a/(iy) */ gsl_complex z; GSL_SET_COMPLEX (&z, GSL_IMAG (a) / y, - GSL_REAL (a) / y); return z; } gsl_complex gsl_complex_conjugate (gsl_complex a) { /* z=conj(a) */ gsl_complex z; GSL_SET_COMPLEX (&z, GSL_REAL (a), -GSL_IMAG (a)); return z; } gsl_complex gsl_complex_negative (gsl_complex a) { /* z=-a */ gsl_complex z; GSL_SET_COMPLEX (&z, -GSL_REAL (a), -GSL_IMAG (a)); return z; } gsl_complex gsl_complex_inverse (gsl_complex a) { /* z=1/a */ double s = 1.0 / gsl_complex_abs (a); gsl_complex z; GSL_SET_COMPLEX (&z, (GSL_REAL (a) * s) * s, -(GSL_IMAG (a) * s) * s); return z; } /********************************************************************** * Elementary complex functions **********************************************************************/ gsl_complex gsl_complex_sqrt (gsl_complex a) { /* z=sqrt(a) */ gsl_complex z; if (GSL_REAL (a) == 0.0 && GSL_IMAG (a) == 0.0) { GSL_SET_COMPLEX (&z, 0, 0); } else { double x = fabs (GSL_REAL (a)); double y = fabs (GSL_IMAG (a)); double w; if (x >= y) { double t = y / x; w = sqrt (x) * sqrt (0.5 * (1.0 + sqrt (1.0 + t * t))); } else { double t = x / y; w = sqrt (y) * sqrt (0.5 * (t + sqrt (1.0 + t * t))); } if (GSL_REAL (a) >= 0.0) { double ai = GSL_IMAG (a); GSL_SET_COMPLEX (&z, w, ai / (2.0 * w)); } else { double ai = GSL_IMAG (a); double vi = (ai >= 0) ? w : -w; GSL_SET_COMPLEX (&z, ai / (2.0 * vi), vi); } } return z; } gsl_complex gsl_complex_sqrt_real (double x) { /* z=sqrt(x) */ gsl_complex z; if (x >= 0) { GSL_SET_COMPLEX (&z, sqrt (x), 0.0); } else { GSL_SET_COMPLEX (&z, 0.0, sqrt (-x)); } return z; } gsl_complex gsl_complex_exp (gsl_complex a) { /* z=exp(a) */ double rho = exp (GSL_REAL (a)); double theta = GSL_IMAG (a); gsl_complex z; GSL_SET_COMPLEX (&z, rho * cos (theta), rho * sin (theta)); return z; } gsl_complex gsl_complex_pow (gsl_complex a, gsl_complex b) { /* z=a^b */ gsl_complex z; if (GSL_REAL (a) == 0 && GSL_IMAG (a) == 0.0) { if (GSL_REAL (b) == 0 && GSL_IMAG (b) == 0.0) { GSL_SET_COMPLEX (&z, 1.0, 0.0); } else { GSL_SET_COMPLEX (&z, 0.0, 0.0); } } else if (GSL_REAL (b) == 1.0 && GSL_IMAG (b) == 0.0) { return a; } else if (GSL_REAL (b) == -1.0 && GSL_IMAG (b) == 0.0) { return gsl_complex_inverse (a); } else { double logr = gsl_complex_logabs (a); double theta = gsl_complex_arg (a); double br = GSL_REAL (b), bi = GSL_IMAG (b); double rho = exp (logr * br - bi * theta); double beta = theta * br + bi * logr; GSL_SET_COMPLEX (&z, rho * cos (beta), rho * sin (beta)); } return z; } gsl_complex gsl_complex_pow_real (gsl_complex a, double b) { /* z=a^b */ gsl_complex z; if (GSL_REAL (a) == 0 && GSL_IMAG (a) == 0) { if (b == 0) { GSL_SET_COMPLEX (&z, 1, 0); } else { GSL_SET_COMPLEX (&z, 0, 0); } } else { double logr = gsl_complex_logabs (a); double theta = gsl_complex_arg (a); double rho = exp (logr * b); double beta = theta * b; GSL_SET_COMPLEX (&z, rho * cos (beta), rho * sin (beta)); } return z; } gsl_complex gsl_complex_log (gsl_complex a) { /* z=log(a) */ double logr = gsl_complex_logabs (a); double theta = gsl_complex_arg (a); gsl_complex z; GSL_SET_COMPLEX (&z, logr, theta); return z; } gsl_complex gsl_complex_log10 (gsl_complex a) { /* z = log10(a) */ return gsl_complex_mul_real (gsl_complex_log (a), 1 / log (10.)); } gsl_complex gsl_complex_log_b (gsl_complex a, gsl_complex b) { return gsl_complex_div (gsl_complex_log (a), gsl_complex_log (b)); } /*********************************************************************** * Complex trigonometric functions ***********************************************************************/ gsl_complex gsl_complex_sin (gsl_complex a) { /* z = sin(a) */ double R = GSL_REAL (a), I = GSL_IMAG (a); gsl_complex z; if (I == 0.0) { /* avoid returing negative zero (-0.0) for the imaginary part */ GSL_SET_COMPLEX (&z, sin (R), 0.0); } else { GSL_SET_COMPLEX (&z, sin (R) * cosh (I), cos (R) * sinh (I)); } return z; } gsl_complex gsl_complex_cos (gsl_complex a) { /* z = cos(a) */ double R = GSL_REAL (a), I = GSL_IMAG (a); gsl_complex z; if (I == 0.0) { /* avoid returing negative zero (-0.0) for the imaginary part */ GSL_SET_COMPLEX (&z, cos (R), 0.0); } else { GSL_SET_COMPLEX (&z, cos (R) * cosh (I), sin (R) * sinh (-I)); } return z; } gsl_complex gsl_complex_tan (gsl_complex a) { /* z = tan(a) */ double R = GSL_REAL (a), I = GSL_IMAG (a); gsl_complex z; if (fabs (I) < 1) { double D = pow (cos (R), 2.0) + pow (sinh (I), 2.0); GSL_SET_COMPLEX (&z, 0.5 * sin (2 * R) / D, 0.5 * sinh (2 * I) / D); } else { double D = pow (cos (R), 2.0) + pow (sinh (I), 2.0); double F = 1 + pow(cos (R)/sinh (I), 2.0); GSL_SET_COMPLEX (&z, 0.5 * sin (2 * R) / D, 1 / (tanh (I) * F)); } return z; } gsl_complex gsl_complex_sec (gsl_complex a) { /* z = sec(a) */ gsl_complex z = gsl_complex_cos (a); return gsl_complex_inverse (z); } gsl_complex gsl_complex_csc (gsl_complex a) { /* z = csc(a) */ gsl_complex z = gsl_complex_sin (a); return gsl_complex_inverse(z); } gsl_complex gsl_complex_cot (gsl_complex a) { /* z = cot(a) */ gsl_complex z = gsl_complex_tan (a); return gsl_complex_inverse (z); } /********************************************************************** * Inverse Complex Trigonometric Functions **********************************************************************/ gsl_complex gsl_complex_arcsin (gsl_complex a) { /* z = arcsin(a) */ double R = GSL_REAL (a), I = GSL_IMAG (a); gsl_complex z; if (I == 0) { z = gsl_complex_arcsin_real (R); } else { double x = fabs (R), y = fabs (I); double r = hypot (x + 1, y), s = hypot (x - 1, y); double A = 0.5 * (r + s); double B = x / A; double y2 = y * y; double real, imag; const double A_crossover = 1.5, B_crossover = 0.6417; if (B <= B_crossover) { real = asin (B); } else { if (x <= 1) { double D = 0.5 * (A + x) * (y2 / (r + x + 1) + (s + (1 - x))); real = atan (x / sqrt (D)); } else { double Apx = A + x; double D = 0.5 * (Apx / (r + x + 1) + Apx / (s + (x - 1))); real = atan (x / (y * sqrt (D))); } } if (A <= A_crossover) { double Am1; if (x < 1) { Am1 = 0.5 * (y2 / (r + (x + 1)) + y2 / (s + (1 - x))); } else { Am1 = 0.5 * (y2 / (r + (x + 1)) + (s + (x - 1))); } imag = log1p (Am1 + sqrt (Am1 * (A + 1))); } else { imag = log (A + sqrt (A * A - 1)); } GSL_SET_COMPLEX (&z, (R >= 0) ? real : -real, (I >= 0) ? imag : -imag); } return z; } gsl_complex gsl_complex_arcsin_real (double a) { /* z = arcsin(a) */ gsl_complex z; if (fabs (a) <= 1.0) { GSL_SET_COMPLEX (&z, asin (a), 0.0); } else { if (a < 0.0) { GSL_SET_COMPLEX (&z, -M_PI_2, acosh (-a)); } else { GSL_SET_COMPLEX (&z, M_PI_2, -acosh (a)); } } return z; } gsl_complex gsl_complex_arccos (gsl_complex a) { /* z = arccos(a) */ double R = GSL_REAL (a), I = GSL_IMAG (a); gsl_complex z; if (I == 0) { z = gsl_complex_arccos_real (R); } else { double x = fabs (R), y = fabs (I); double r = hypot (x + 1, y), s = hypot (x - 1, y); double A = 0.5 * (r + s); double B = x / A; double y2 = y * y; double real, imag; const double A_crossover = 1.5, B_crossover = 0.6417; if (B <= B_crossover) { real = acos (B); } else { if (x <= 1) { double D = 0.5 * (A + x) * (y2 / (r + x + 1) + (s + (1 - x))); real = atan (sqrt (D) / x); } else { double Apx = A + x; double D = 0.5 * (Apx / (r + x + 1) + Apx / (s + (x - 1))); real = atan ((y * sqrt (D)) / x); } } if (A <= A_crossover) { double Am1; if (x < 1) { Am1 = 0.5 * (y2 / (r + (x + 1)) + y2 / (s + (1 - x))); } else { Am1 = 0.5 * (y2 / (r + (x + 1)) + (s + (x - 1))); } imag = log1p (Am1 + sqrt (Am1 * (A + 1))); } else { imag = log (A + sqrt (A * A - 1)); } GSL_SET_COMPLEX (&z, (R >= 0) ? real : M_PI - real, (I >= 0) ? -imag : imag); } return z; } gsl_complex gsl_complex_arccos_real (double a) { /* z = arccos(a) */ gsl_complex z; if (fabs (a) <= 1.0) { GSL_SET_COMPLEX (&z, acos (a), 0); } else { if (a < 0.0) { GSL_SET_COMPLEX (&z, M_PI, -acosh (-a)); } else { GSL_SET_COMPLEX (&z, 0, acosh (a)); } } return z; } gsl_complex gsl_complex_arctan (gsl_complex a) { /* z = arctan(a) */ double R = GSL_REAL (a), I = GSL_IMAG (a); gsl_complex z; if (I == 0) { GSL_SET_COMPLEX (&z, atan (R), 0); } else { /* FIXME: This is a naive implementation which does not fully take into account cancellation errors, overflow, underflow etc. It would benefit from the Hull et al treatment. */ double r = hypot (R, I); double imag; double u = 2 * I / (1 + r * r); /* FIXME: the following cross-over should be optimized but 0.1 seems to work ok */ if (fabs (u) < 0.1) { imag = 0.25 * (log1p (u) - log1p (-u)); } else { double A = hypot (R, I + 1); double B = hypot (R, I - 1); imag = 0.5 * log (A / B); } if (R == 0) { if (I > 1) { GSL_SET_COMPLEX (&z, M_PI_2, imag); } else if (I < -1) { GSL_SET_COMPLEX (&z, -M_PI_2, imag); } else { GSL_SET_COMPLEX (&z, 0, imag); }; } else { GSL_SET_COMPLEX (&z, 0.5 * atan2 (2 * R, ((1 + r) * (1 - r))), imag); } } return z; } gsl_complex gsl_complex_arcsec (gsl_complex a) { /* z = arcsec(a) */ gsl_complex z = gsl_complex_inverse (a); return gsl_complex_arccos (z); } gsl_complex gsl_complex_arcsec_real (double a) { /* z = arcsec(a) */ gsl_complex z; if (a <= -1.0 || a >= 1.0) { GSL_SET_COMPLEX (&z, acos (1 / a), 0.0); } else { if (a >= 0.0) { GSL_SET_COMPLEX (&z, 0, acosh (1 / a)); } else { GSL_SET_COMPLEX (&z, M_PI, -acosh (-1 / a)); } } return z; } gsl_complex gsl_complex_arccsc (gsl_complex a) { /* z = arccsc(a) */ gsl_complex z = gsl_complex_inverse (a); return gsl_complex_arcsin (z); } gsl_complex gsl_complex_arccsc_real (double a) { /* z = arccsc(a) */ gsl_complex z; if (a <= -1.0 || a >= 1.0) { GSL_SET_COMPLEX (&z, asin (1 / a), 0.0); } else { if (a >= 0.0) { GSL_SET_COMPLEX (&z, M_PI_2, -acosh (1 / a)); } else { GSL_SET_COMPLEX (&z, -M_PI_2, acosh (-1 / a)); } } return z; } gsl_complex gsl_complex_arccot (gsl_complex a) { /* z = arccot(a) */ gsl_complex z; if (GSL_REAL (a) == 0.0 && GSL_IMAG (a) == 0.0) { GSL_SET_COMPLEX (&z, M_PI_2, 0); } else { z = gsl_complex_inverse (a); z = gsl_complex_arctan (z); } return z; } /********************************************************************** * Complex Hyperbolic Functions **********************************************************************/ gsl_complex gsl_complex_sinh (gsl_complex a) { /* z = sinh(a) */ double R = GSL_REAL (a), I = GSL_IMAG (a); gsl_complex z; GSL_SET_COMPLEX (&z, sinh (R) * cos (I), cosh (R) * sin (I)); return z; } gsl_complex gsl_complex_cosh (gsl_complex a) { /* z = cosh(a) */ double R = GSL_REAL (a), I = GSL_IMAG (a); gsl_complex z; GSL_SET_COMPLEX (&z, cosh (R) * cos (I), sinh (R) * sin (I)); return z; } gsl_complex gsl_complex_tanh (gsl_complex a) { /* z = tanh(a) */ double R = GSL_REAL (a), I = GSL_IMAG (a); gsl_complex z; if (fabs(R) < 1.0) { double D = pow (cos (I), 2.0) + pow (sinh (R), 2.0); GSL_SET_COMPLEX (&z, sinh (R) * cosh (R) / D, 0.5 * sin (2 * I) / D); } else { double D = pow (cos (I), 2.0) + pow (sinh (R), 2.0); double F = 1 + pow (cos (I) / sinh (R), 2.0); GSL_SET_COMPLEX (&z, 1.0 / (tanh (R) * F), 0.5 * sin (2 * I) / D); } return z; } gsl_complex gsl_complex_sech (gsl_complex a) { /* z = sech(a) */ gsl_complex z = gsl_complex_cosh (a); return gsl_complex_inverse (z); } gsl_complex gsl_complex_csch (gsl_complex a) { /* z = csch(a) */ gsl_complex z = gsl_complex_sinh (a); return gsl_complex_inverse (z); } gsl_complex gsl_complex_coth (gsl_complex a) { /* z = coth(a) */ gsl_complex z = gsl_complex_tanh (a); return gsl_complex_inverse (z); } /********************************************************************** * Inverse Complex Hyperbolic Functions **********************************************************************/ gsl_complex gsl_complex_arcsinh (gsl_complex a) { /* z = arcsinh(a) */ gsl_complex z = gsl_complex_mul_imag(a, 1.0); z = gsl_complex_arcsin (z); z = gsl_complex_mul_imag (z, -1.0); return z; } gsl_complex gsl_complex_arccosh (gsl_complex a) { /* z = arccosh(a) */ gsl_complex z = gsl_complex_arccos (a); z = gsl_complex_mul_imag (z, GSL_IMAG(z) > 0 ? -1.0 : 1.0); return z; } gsl_complex gsl_complex_arccosh_real (double a) { /* z = arccosh(a) */ gsl_complex z; if (a >= 1) { GSL_SET_COMPLEX (&z, acosh (a), 0); } else { if (a >= -1.0) { GSL_SET_COMPLEX (&z, 0, acos (a)); } else { GSL_SET_COMPLEX (&z, acosh (-a), M_PI); } } return z; } gsl_complex gsl_complex_arctanh (gsl_complex a) { /* z = arctanh(a) */ if (GSL_IMAG (a) == 0.0) { return gsl_complex_arctanh_real (GSL_REAL (a)); } else { gsl_complex z = gsl_complex_mul_imag(a, 1.0); z = gsl_complex_arctan (z); z = gsl_complex_mul_imag (z, -1.0); return z; } } gsl_complex gsl_complex_arctanh_real (double a) { /* z = arctanh(a) */ gsl_complex z; if (a > -1.0 && a < 1.0) { GSL_SET_COMPLEX (&z, atanh (a), 0); } else { GSL_SET_COMPLEX (&z, atanh (1 / a), (a < 0) ? M_PI_2 : -M_PI_2); } return z; } gsl_complex gsl_complex_arcsech (gsl_complex a) { /* z = arcsech(a); */ gsl_complex t = gsl_complex_inverse (a); return gsl_complex_arccosh (t); } gsl_complex gsl_complex_arccsch (gsl_complex a) { /* z = arccsch(a) */ gsl_complex t = gsl_complex_inverse (a); return gsl_complex_arcsinh (t); } gsl_complex gsl_complex_arccoth (gsl_complex a) { /* z = arccoth(a) */ gsl_complex t = gsl_complex_inverse (a); return gsl_complex_arctanh (t); } gsl/complex/results1.h0000644000175000017500000013176113536674414013345 0ustar eddedd {FN (arg), ARG(0.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (arg), ARG(0.0e+00,1.19209289550781250e-07), RES(1.5707963267948966192e0, 0.0)}, {FN (arg), ARG(0.0e+00,-1.19209289550781250e-07), RES(-1.5707963267948966192e0, 0.0)}, {FN (arg), ARG(0.0e+00,5.0e-01), RES(1.5707963267948966192e0, 0.0)}, {FN (arg), ARG(0.0e+00,-5.0e-01), RES(-1.5707963267948966192e0, 0.0)}, {FN (arg), ARG(0.0e+00,1.0e+00), RES(1.5707963267948966192e0, 0.0)}, {FN (arg), ARG(0.0e+00,-1.0e+00), RES(-1.5707963267948966192e0, 0.0)}, {FN (arg), ARG(0.0e+00,2.0e+00), RES(1.5707963267948966192e0, 0.0)}, {FN (arg), ARG(0.0e+00,-2.0e+00), RES(-1.5707963267948966192e0, 0.0)}, {FN (arg), ARG(0.0e+00,8.3886080e+06), RES(1.5707963267948966192e0, 0.0)}, {FN (arg), ARG(0.0e+00,-8.3886080e+06), RES(-1.5707963267948966192e0, 0.0)}, {FN (arg), ARG(1.19209289550781250e-07,0.0e+00), RES(0e0, 0.0)}, {FN (arg), ARG(-1.19209289550781250e-07,0.0e+00), RES(3.1415926535897932385e0, 0.0)}, {FN (arg), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(7.8539816339744830962e-1, 0.0)}, {FN (arg), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(-7.8539816339744830962e-1, 0.0)}, {FN (arg), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(2.3561944901923449288e0, 0.0)}, {FN (arg), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(-2.3561944901923449288e0, 0.0)}, {FN (arg), ARG(1.19209289550781250e-07,5.0e-01), RES(1.5707960883763175177e0, 0.0)}, {FN (arg), ARG(1.19209289550781250e-07,-5.0e-01), RES(-1.5707960883763175177e0, 0.0)}, {FN (arg), ARG(-1.19209289550781250e-07,5.0e-01), RES(1.5707965652134757208e0, 0.0)}, {FN (arg), ARG(-1.19209289550781250e-07,-5.0e-01), RES(-1.5707965652134757208e0, 0.0)}, {FN (arg), ARG(1.19209289550781250e-07,1.0e+00), RES(1.5707962075856070685e0, 0.0)}, {FN (arg), ARG(1.19209289550781250e-07,-1.0e+00), RES(-1.5707962075856070685e0, 0.0)}, {FN (arg), ARG(-1.19209289550781250e-07,1.0e+00), RES(1.570796446004186170e0, 0.0)}, {FN (arg), ARG(-1.19209289550781250e-07,-1.0e+00), RES(-1.570796446004186170e0, 0.0)}, {FN (arg), ARG(1.19209289550781250e-07,2.0e+00), RES(1.5707962671902518438e0, 0.0)}, {FN (arg), ARG(1.19209289550781250e-07,-2.0e+00), RES(-1.5707962671902518438e0, 0.0)}, {FN (arg), ARG(-1.19209289550781250e-07,2.0e+00), RES(1.5707963863995413946e0, 0.0)}, {FN (arg), ARG(-1.19209289550781250e-07,-2.0e+00), RES(-1.5707963863995413946e0, 0.0)}, {FN (arg), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.5707963267948824084e0, 0.0)}, {FN (arg), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(-1.5707963267948824084e0, 0.0)}, {FN (arg), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(1.5707963267949108301e0, 0.0)}, {FN (arg), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(-1.5707963267949108301e0, 0.0)}, {FN (arg), ARG(5.0e-01,0.0e+00), RES(0e0, 0.0)}, {FN (arg), ARG(-5.0e-01,0.0e+00), RES(3.1415926535897932385e0, 0.0)}, {FN (arg), ARG(5.0e-01,1.19209289550781250e-07), RES(2.3841857910155798249e-7, 0.0)}, {FN (arg), ARG(5.0e-01,-1.19209289550781250e-07), RES(-2.3841857910155798249e-7, 0.0)}, {FN (arg), ARG(-5.0e-01,1.19209289550781250e-07), RES(3.1415924151712141369e0, 0.0)}, {FN (arg), ARG(-5.0e-01,-1.19209289550781250e-07), RES(-3.1415924151712141369e0, 0.0)}, {FN (arg), ARG(5.0e-01,5.0e-01), RES(7.8539816339744830962e-1, 0.0)}, {FN (arg), ARG(5.0e-01,-5.0e-01), RES(-7.8539816339744830962e-1, 0.0)}, {FN (arg), ARG(-5.0e-01,5.0e-01), RES(2.3561944901923449288e0, 0.0)}, {FN (arg), ARG(-5.0e-01,-5.0e-01), RES(-2.3561944901923449288e0, 0.0)}, {FN (arg), ARG(5.0e-01,1.0e+00), RES(1.1071487177940905030e0, 0.0)}, {FN (arg), ARG(5.0e-01,-1.0e+00), RES(-1.1071487177940905030e0, 0.0)}, {FN (arg), ARG(-5.0e-01,1.0e+00), RES(2.0344439357957027354e0, 0.0)}, {FN (arg), ARG(-5.0e-01,-1.0e+00), RES(-2.0344439357957027354e0, 0.0)}, {FN (arg), ARG(5.0e-01,2.0e+00), RES(1.3258176636680324651e0, 0.0)}, {FN (arg), ARG(5.0e-01,-2.0e+00), RES(-1.3258176636680324651e0, 0.0)}, {FN (arg), ARG(-5.0e-01,2.0e+00), RES(1.8157749899217607734e0, 0.0)}, {FN (arg), ARG(-5.0e-01,-2.0e+00), RES(-1.8157749899217607734e0, 0.0)}, {FN (arg), ARG(5.0e-01,8.3886080e+06), RES(1.5707962671902518438e0, 0.0)}, {FN (arg), ARG(5.0e-01,-8.3886080e+06), RES(-1.5707962671902518438e0, 0.0)}, {FN (arg), ARG(-5.0e-01,8.3886080e+06), RES(1.5707963863995413946e0, 0.0)}, {FN (arg), ARG(-5.0e-01,-8.3886080e+06), RES(-1.5707963863995413946e0, 0.0)}, {FN (arg), ARG(1.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (arg), ARG(-1.0e+00,0.0e+00), RES(3.1415926535897932385e0, 0.0)}, {FN (arg), ARG(1.0e+00,1.19209289550781250e-07), RES(1.1920928955078068531e-7, 0.0)}, {FN (arg), ARG(1.0e+00,-1.19209289550781250e-07), RES(-1.1920928955078068531e-7, 0.0)}, {FN (arg), ARG(-1.0e+00,1.19209289550781250e-07), RES(3.1415925343805036877e0, 0.0)}, {FN (arg), ARG(-1.0e+00,-1.19209289550781250e-07), RES(-3.1415925343805036877e0, 0.0)}, {FN (arg), ARG(1.0e+00,5.0e-01), RES(4.6364760900080611621e-1, 0.0)}, {FN (arg), ARG(1.0e+00,-5.0e-01), RES(-4.6364760900080611621e-1, 0.0)}, {FN (arg), ARG(-1.0e+00,5.0e-01), RES(2.6779450445889871222e0, 0.0)}, {FN (arg), ARG(-1.0e+00,-5.0e-01), RES(-2.6779450445889871222e0, 0.0)}, {FN (arg), ARG(1.0e+00,1.0e+00), RES(7.8539816339744830962e-1, 0.0)}, {FN (arg), ARG(1.0e+00,-1.0e+00), RES(-7.8539816339744830962e-1, 0.0)}, {FN (arg), ARG(-1.0e+00,1.0e+00), RES(2.3561944901923449288e0, 0.0)}, {FN (arg), ARG(-1.0e+00,-1.0e+00), RES(-2.3561944901923449288e0, 0.0)}, {FN (arg), ARG(1.0e+00,2.0e+00), RES(1.1071487177940905030e0, 0.0)}, {FN (arg), ARG(1.0e+00,-2.0e+00), RES(-1.1071487177940905030e0, 0.0)}, {FN (arg), ARG(-1.0e+00,2.0e+00), RES(2.0344439357957027354e0, 0.0)}, {FN (arg), ARG(-1.0e+00,-2.0e+00), RES(-2.0344439357957027354e0, 0.0)}, {FN (arg), ARG(1.0e+00,8.3886080e+06), RES(1.5707962075856070685e0, 0.0)}, {FN (arg), ARG(1.0e+00,-8.3886080e+06), RES(-1.5707962075856070685e0, 0.0)}, {FN (arg), ARG(-1.0e+00,8.3886080e+06), RES(1.570796446004186170e0, 0.0)}, {FN (arg), ARG(-1.0e+00,-8.3886080e+06), RES(-1.570796446004186170e0, 0.0)}, {FN (arg), ARG(2.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (arg), ARG(-2.0e+00,0.0e+00), RES(3.1415926535897932385e0, 0.0)}, {FN (arg), ARG(2.0e+00,1.19209289550781250e-07), RES(5.9604644775390554414e-8, 0.0)}, {FN (arg), ARG(2.0e+00,-1.19209289550781250e-07), RES(-5.9604644775390554414e-8, 0.0)}, {FN (arg), ARG(-2.0e+00,1.19209289550781250e-07), RES(3.1415925939851484631e0, 0.0)}, {FN (arg), ARG(-2.0e+00,-1.19209289550781250e-07), RES(-3.1415925939851484631e0, 0.0)}, {FN (arg), ARG(2.0e+00,5.0e-01), RES(2.4497866312686415417e-1, 0.0)}, {FN (arg), ARG(2.0e+00,-5.0e-01), RES(-2.4497866312686415417e-1, 0.0)}, {FN (arg), ARG(-2.0e+00,5.0e-01), RES(2.8966139904629290843e0, 0.0)}, {FN (arg), ARG(-2.0e+00,-5.0e-01), RES(-2.8966139904629290843e0, 0.0)}, {FN (arg), ARG(2.0e+00,1.0e+00), RES(4.6364760900080611621e-1, 0.0)}, {FN (arg), ARG(2.0e+00,-1.0e+00), RES(-4.6364760900080611621e-1, 0.0)}, {FN (arg), ARG(-2.0e+00,1.0e+00), RES(2.6779450445889871222e0, 0.0)}, {FN (arg), ARG(-2.0e+00,-1.0e+00), RES(-2.6779450445889871222e0, 0.0)}, {FN (arg), ARG(2.0e+00,2.0e+00), RES(7.8539816339744830962e-1, 0.0)}, {FN (arg), ARG(2.0e+00,-2.0e+00), RES(-7.8539816339744830962e-1, 0.0)}, {FN (arg), ARG(-2.0e+00,2.0e+00), RES(2.3561944901923449288e0, 0.0)}, {FN (arg), ARG(-2.0e+00,-2.0e+00), RES(-2.3561944901923449288e0, 0.0)}, {FN (arg), ARG(2.0e+00,8.3886080e+06), RES(1.5707960883763175177e0, 0.0)}, {FN (arg), ARG(2.0e+00,-8.3886080e+06), RES(-1.5707960883763175177e0, 0.0)}, {FN (arg), ARG(-2.0e+00,8.3886080e+06), RES(1.5707965652134757208e0, 0.0)}, {FN (arg), ARG(-2.0e+00,-8.3886080e+06), RES(-1.5707965652134757208e0, 0.0)}, {FN (arg), ARG(8.3886080e+06,0.0e+00), RES(0e0, 0.0)}, {FN (arg), ARG(-8.3886080e+06,0.0e+00), RES(3.1415926535897932385e0, 0.0)}, {FN (arg), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.4210854715202003717e-14, 0.0)}, {FN (arg), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(-1.4210854715202003717e-14, 0.0)}, {FN (arg), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(3.1415926535897790276e0, 0.0)}, {FN (arg), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(-3.1415926535897790276e0, 0.0)}, {FN (arg), ARG(8.3886080e+06,5.0e-01), RES(5.9604644775390554414e-8, 0.0)}, {FN (arg), ARG(8.3886080e+06,-5.0e-01), RES(-5.9604644775390554414e-8, 0.0)}, {FN (arg), ARG(-8.3886080e+06,5.0e-01), RES(3.1415925939851484631e0, 0.0)}, {FN (arg), ARG(-8.3886080e+06,-5.0e-01), RES(-3.1415925939851484631e0, 0.0)}, {FN (arg), ARG(8.3886080e+06,1.0e+00), RES(1.1920928955078068531e-7, 0.0)}, {FN (arg), ARG(8.3886080e+06,-1.0e+00), RES(-1.1920928955078068531e-7, 0.0)}, {FN (arg), ARG(-8.3886080e+06,1.0e+00), RES(3.1415925343805036877e0, 0.0)}, {FN (arg), ARG(-8.3886080e+06,-1.0e+00), RES(-3.1415925343805036877e0, 0.0)}, {FN (arg), ARG(8.3886080e+06,2.0e+00), RES(2.3841857910155798249e-7, 0.0)}, {FN (arg), ARG(8.3886080e+06,-2.0e+00), RES(-2.3841857910155798249e-7, 0.0)}, {FN (arg), ARG(-8.3886080e+06,2.0e+00), RES(3.1415924151712141369e0, 0.0)}, {FN (arg), ARG(-8.3886080e+06,-2.0e+00), RES(-3.1415924151712141369e0, 0.0)}, {FN (arg), ARG(8.3886080e+06,8.3886080e+06), RES(7.8539816339744830962e-1, 0.0)}, {FN (arg), ARG(8.3886080e+06,-8.3886080e+06), RES(-7.8539816339744830962e-1, 0.0)}, {FN (arg), ARG(-8.3886080e+06,8.3886080e+06), RES(2.3561944901923449288e0, 0.0)}, {FN (arg), ARG(-8.3886080e+06,-8.3886080e+06), RES(-2.3561944901923449288e0, 0.0)}, {FN (abs), ARG(0.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (abs), ARG(0.0e+00,1.19209289550781250e-07), RES(1.1920928955078125e-7, 0.0)}, {FN (abs), ARG(0.0e+00,-1.19209289550781250e-07), RES(1.1920928955078125e-7, 0.0)}, {FN (abs), ARG(0.0e+00,5.0e-01), RES(5e-1, 0.0)}, {FN (abs), ARG(0.0e+00,-5.0e-01), RES(5e-1, 0.0)}, {FN (abs), ARG(0.0e+00,1.0e+00), RES(1e0, 0.0)}, {FN (abs), ARG(0.0e+00,-1.0e+00), RES(1e0, 0.0)}, {FN (abs), ARG(0.0e+00,2.0e+00), RES(2e0, 0.0)}, {FN (abs), ARG(0.0e+00,-2.0e+00), RES(2e0, 0.0)}, {FN (abs), ARG(0.0e+00,8.3886080e+06), RES(8.388608e6, 0.0)}, {FN (abs), ARG(0.0e+00,-8.3886080e+06), RES(8.388608e6, 0.0)}, {FN (abs), ARG(1.19209289550781250e-07,0.0e+00), RES(1.1920928955078125e-7, 0.0)}, {FN (abs), ARG(-1.19209289550781250e-07,0.0e+00), RES(1.1920928955078125e-7, 0.0)}, {FN (abs), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(1.6858739404357612715e-7, 0.0)}, {FN (abs), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.6858739404357612715e-7, 0.0)}, {FN (abs), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(1.6858739404357612715e-7, 0.0)}, {FN (abs), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(1.6858739404357612715e-7, 0.0)}, {FN (abs), ARG(1.19209289550781250e-07,5.0e-01), RES(5.0000000000001421085e-1, 0.0)}, {FN (abs), ARG(1.19209289550781250e-07,-5.0e-01), RES(5.0000000000001421085e-1, 0.0)}, {FN (abs), ARG(-1.19209289550781250e-07,5.0e-01), RES(5.0000000000001421085e-1, 0.0)}, {FN (abs), ARG(-1.19209289550781250e-07,-5.0e-01), RES(5.0000000000001421085e-1, 0.0)}, {FN (abs), ARG(1.19209289550781250e-07,1.0e+00), RES(1.0000000000000071054e0, 0.0)}, {FN (abs), ARG(1.19209289550781250e-07,-1.0e+00), RES(1.0000000000000071054e0, 0.0)}, {FN (abs), ARG(-1.19209289550781250e-07,1.0e+00), RES(1.0000000000000071054e0, 0.0)}, {FN (abs), ARG(-1.19209289550781250e-07,-1.0e+00), RES(1.0000000000000071054e0, 0.0)}, {FN (abs), ARG(1.19209289550781250e-07,2.0e+00), RES(2.0000000000000035527e0, 0.0)}, {FN (abs), ARG(1.19209289550781250e-07,-2.0e+00), RES(2.0000000000000035527e0, 0.0)}, {FN (abs), ARG(-1.19209289550781250e-07,2.0e+00), RES(2.0000000000000035527e0, 0.0)}, {FN (abs), ARG(-1.19209289550781250e-07,-2.0e+00), RES(2.0000000000000035527e0, 0.0)}, {FN (abs), ARG(1.19209289550781250e-07,8.3886080e+06), RES(8.3886080e6, 0.0)}, {FN (abs), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(8.3886080e6, 0.0)}, {FN (abs), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(8.3886080e6, 0.0)}, {FN (abs), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(8.3886080e6, 0.0)}, {FN (abs), ARG(5.0e-01,0.0e+00), RES(5e-1, 0.0)}, {FN (abs), ARG(-5.0e-01,0.0e+00), RES(5e-1, 0.0)}, {FN (abs), ARG(5.0e-01,1.19209289550781250e-07), RES(5.0000000000001421085e-1, 0.0)}, {FN (abs), ARG(5.0e-01,-1.19209289550781250e-07), RES(5.0000000000001421085e-1, 0.0)}, {FN (abs), ARG(-5.0e-01,1.19209289550781250e-07), RES(5.0000000000001421085e-1, 0.0)}, {FN (abs), ARG(-5.0e-01,-1.19209289550781250e-07), RES(5.0000000000001421085e-1, 0.0)}, {FN (abs), ARG(5.0e-01,5.0e-01), RES(7.0710678118654752440e-1, 0.0)}, {FN (abs), ARG(5.0e-01,-5.0e-01), RES(7.0710678118654752440e-1, 0.0)}, {FN (abs), ARG(-5.0e-01,5.0e-01), RES(7.0710678118654752440e-1, 0.0)}, {FN (abs), ARG(-5.0e-01,-5.0e-01), RES(7.0710678118654752440e-1, 0.0)}, {FN (abs), ARG(5.0e-01,1.0e+00), RES(1.1180339887498948482e0, 0.0)}, {FN (abs), ARG(5.0e-01,-1.0e+00), RES(1.1180339887498948482e0, 0.0)}, {FN (abs), ARG(-5.0e-01,1.0e+00), RES(1.1180339887498948482e0, 0.0)}, {FN (abs), ARG(-5.0e-01,-1.0e+00), RES(1.1180339887498948482e0, 0.0)}, {FN (abs), ARG(5.0e-01,2.0e+00), RES(2.0615528128088302749e0, 0.0)}, {FN (abs), ARG(5.0e-01,-2.0e+00), RES(2.0615528128088302749e0, 0.0)}, {FN (abs), ARG(-5.0e-01,2.0e+00), RES(2.0615528128088302749e0, 0.0)}, {FN (abs), ARG(-5.0e-01,-2.0e+00), RES(2.0615528128088302749e0, 0.0)}, {FN (abs), ARG(5.0e-01,8.3886080e+06), RES(8.3886080000000149012e6, 0.0)}, {FN (abs), ARG(5.0e-01,-8.3886080e+06), RES(8.3886080000000149012e6, 0.0)}, {FN (abs), ARG(-5.0e-01,8.3886080e+06), RES(8.3886080000000149012e6, 0.0)}, {FN (abs), ARG(-5.0e-01,-8.3886080e+06), RES(8.3886080000000149012e6, 0.0)}, {FN (abs), ARG(1.0e+00,0.0e+00), RES(1e0, 0.0)}, {FN (abs), ARG(-1.0e+00,0.0e+00), RES(1e0, 0.0)}, {FN (abs), ARG(1.0e+00,1.19209289550781250e-07), RES(1.0000000000000071054e0, 0.0)}, {FN (abs), ARG(1.0e+00,-1.19209289550781250e-07), RES(1.0000000000000071054e0, 0.0)}, {FN (abs), ARG(-1.0e+00,1.19209289550781250e-07), RES(1.0000000000000071054e0, 0.0)}, {FN (abs), ARG(-1.0e+00,-1.19209289550781250e-07), RES(1.0000000000000071054e0, 0.0)}, {FN (abs), ARG(1.0e+00,5.0e-01), RES(1.1180339887498948482e0, 0.0)}, {FN (abs), ARG(1.0e+00,-5.0e-01), RES(1.1180339887498948482e0, 0.0)}, {FN (abs), ARG(-1.0e+00,5.0e-01), RES(1.1180339887498948482e0, 0.0)}, {FN (abs), ARG(-1.0e+00,-5.0e-01), RES(1.1180339887498948482e0, 0.0)}, {FN (abs), ARG(1.0e+00,1.0e+00), RES(1.4142135623730950488e0, 0.0)}, {FN (abs), ARG(1.0e+00,-1.0e+00), RES(1.4142135623730950488e0, 0.0)}, {FN (abs), ARG(-1.0e+00,1.0e+00), RES(1.4142135623730950488e0, 0.0)}, {FN (abs), ARG(-1.0e+00,-1.0e+00), RES(1.4142135623730950488e0, 0.0)}, {FN (abs), ARG(1.0e+00,2.0e+00), RES(2.2360679774997896964e0, 0.0)}, {FN (abs), ARG(1.0e+00,-2.0e+00), RES(2.2360679774997896964e0, 0.0)}, {FN (abs), ARG(-1.0e+00,2.0e+00), RES(2.2360679774997896964e0, 0.0)}, {FN (abs), ARG(-1.0e+00,-2.0e+00), RES(2.2360679774997896964e0, 0.0)}, {FN (abs), ARG(1.0e+00,8.3886080e+06), RES(8.3886080000000596046e6, 0.0)}, {FN (abs), ARG(1.0e+00,-8.3886080e+06), RES(8.3886080000000596046e6, 0.0)}, {FN (abs), ARG(-1.0e+00,8.3886080e+06), RES(8.3886080000000596046e6, 0.0)}, {FN (abs), ARG(-1.0e+00,-8.3886080e+06), RES(8.3886080000000596046e6, 0.0)}, {FN (abs), ARG(2.0e+00,0.0e+00), RES(2e0, 0.0)}, {FN (abs), ARG(-2.0e+00,0.0e+00), RES(2e0, 0.0)}, {FN (abs), ARG(2.0e+00,1.19209289550781250e-07), RES(2.0000000000000035527e0, 0.0)}, {FN (abs), ARG(2.0e+00,-1.19209289550781250e-07), RES(2.0000000000000035527e0, 0.0)}, {FN (abs), ARG(-2.0e+00,1.19209289550781250e-07), RES(2.0000000000000035527e0, 0.0)}, {FN (abs), ARG(-2.0e+00,-1.19209289550781250e-07), RES(2.0000000000000035527e0, 0.0)}, {FN (abs), ARG(2.0e+00,5.0e-01), RES(2.0615528128088302749e0, 0.0)}, {FN (abs), ARG(2.0e+00,-5.0e-01), RES(2.0615528128088302749e0, 0.0)}, {FN (abs), ARG(-2.0e+00,5.0e-01), RES(2.0615528128088302749e0, 0.0)}, {FN (abs), ARG(-2.0e+00,-5.0e-01), RES(2.0615528128088302749e0, 0.0)}, {FN (abs), ARG(2.0e+00,1.0e+00), RES(2.2360679774997896964e0, 0.0)}, {FN (abs), ARG(2.0e+00,-1.0e+00), RES(2.2360679774997896964e0, 0.0)}, {FN (abs), ARG(-2.0e+00,1.0e+00), RES(2.2360679774997896964e0, 0.0)}, {FN (abs), ARG(-2.0e+00,-1.0e+00), RES(2.2360679774997896964e0, 0.0)}, {FN (abs), ARG(2.0e+00,2.0e+00), RES(2.8284271247461900976e0, 0.0)}, {FN (abs), ARG(2.0e+00,-2.0e+00), RES(2.8284271247461900976e0, 0.0)}, {FN (abs), ARG(-2.0e+00,2.0e+00), RES(2.8284271247461900976e0, 0.0)}, {FN (abs), ARG(-2.0e+00,-2.0e+00), RES(2.8284271247461900976e0, 0.0)}, {FN (abs), ARG(2.0e+00,8.3886080e+06), RES(8.3886080000002384186e6, 0.0)}, {FN (abs), ARG(2.0e+00,-8.3886080e+06), RES(8.3886080000002384186e6, 0.0)}, {FN (abs), ARG(-2.0e+00,8.3886080e+06), RES(8.3886080000002384186e6, 0.0)}, {FN (abs), ARG(-2.0e+00,-8.3886080e+06), RES(8.3886080000002384186e6, 0.0)}, {FN (abs), ARG(8.3886080e+06,0.0e+00), RES(8.388608e6, 0.0)}, {FN (abs), ARG(-8.3886080e+06,0.0e+00), RES(8.388608e6, 0.0)}, {FN (abs), ARG(8.3886080e+06,1.19209289550781250e-07), RES(8.3886080e6, 0.0)}, {FN (abs), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(8.3886080e6, 0.0)}, {FN (abs), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(8.3886080e6, 0.0)}, {FN (abs), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(8.3886080e6, 0.0)}, {FN (abs), ARG(8.3886080e+06,5.0e-01), RES(8.3886080000000149012e6, 0.0)}, {FN (abs), ARG(8.3886080e+06,-5.0e-01), RES(8.3886080000000149012e6, 0.0)}, {FN (abs), ARG(-8.3886080e+06,5.0e-01), RES(8.3886080000000149012e6, 0.0)}, {FN (abs), ARG(-8.3886080e+06,-5.0e-01), RES(8.3886080000000149012e6, 0.0)}, {FN (abs), ARG(8.3886080e+06,1.0e+00), RES(8.3886080000000596046e6, 0.0)}, {FN (abs), ARG(8.3886080e+06,-1.0e+00), RES(8.3886080000000596046e6, 0.0)}, {FN (abs), ARG(-8.3886080e+06,1.0e+00), RES(8.3886080000000596046e6, 0.0)}, {FN (abs), ARG(-8.3886080e+06,-1.0e+00), RES(8.3886080000000596046e6, 0.0)}, {FN (abs), ARG(8.3886080e+06,2.0e+00), RES(8.3886080000002384186e6, 0.0)}, {FN (abs), ARG(8.3886080e+06,-2.0e+00), RES(8.3886080000002384186e6, 0.0)}, {FN (abs), ARG(-8.3886080e+06,2.0e+00), RES(8.3886080000002384186e6, 0.0)}, {FN (abs), ARG(-8.3886080e+06,-2.0e+00), RES(8.3886080000002384186e6, 0.0)}, {FN (abs), ARG(8.3886080e+06,8.3886080e+06), RES(1.1863283203031444111e7, 0.0)}, {FN (abs), ARG(8.3886080e+06,-8.3886080e+06), RES(1.1863283203031444111e7, 0.0)}, {FN (abs), ARG(-8.3886080e+06,8.3886080e+06), RES(1.1863283203031444111e7, 0.0)}, {FN (abs), ARG(-8.3886080e+06,-8.3886080e+06), RES(1.1863283203031444111e7, 0.0)}, {FN (abs2), ARG(0.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (abs2), ARG(0.0e+00,1.19209289550781250e-07), RES(1.4210854715202003717e-14, 0.0)}, {FN (abs2), ARG(0.0e+00,-1.19209289550781250e-07), RES(1.4210854715202003717e-14, 0.0)}, {FN (abs2), ARG(0.0e+00,5.0e-01), RES(2.5e-1, 0.0)}, {FN (abs2), ARG(0.0e+00,-5.0e-01), RES(2.5e-1, 0.0)}, {FN (abs2), ARG(0.0e+00,1.0e+00), RES(1e0, 0.0)}, {FN (abs2), ARG(0.0e+00,-1.0e+00), RES(1e0, 0.0)}, {FN (abs2), ARG(0.0e+00,2.0e+00), RES(4e0, 0.0)}, {FN (abs2), ARG(0.0e+00,-2.0e+00), RES(4e0, 0.0)}, {FN (abs2), ARG(0.0e+00,8.3886080e+06), RES(7.0368744177664e13, 0.0)}, {FN (abs2), ARG(0.0e+00,-8.3886080e+06), RES(7.0368744177664e13, 0.0)}, {FN (abs2), ARG(1.19209289550781250e-07,0.0e+00), RES(1.4210854715202003717e-14, 0.0)}, {FN (abs2), ARG(-1.19209289550781250e-07,0.0e+00), RES(1.4210854715202003717e-14, 0.0)}, {FN (abs2), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(2.8421709430404007435e-14, 0.0)}, {FN (abs2), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(2.8421709430404007435e-14, 0.0)}, {FN (abs2), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(2.8421709430404007435e-14, 0.0)}, {FN (abs2), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(2.8421709430404007435e-14, 0.0)}, {FN (abs2), ARG(1.19209289550781250e-07,5.0e-01), RES(2.5000000000001421085e-1, 0.0)}, {FN (abs2), ARG(1.19209289550781250e-07,-5.0e-01), RES(2.5000000000001421085e-1, 0.0)}, {FN (abs2), ARG(-1.19209289550781250e-07,5.0e-01), RES(2.5000000000001421085e-1, 0.0)}, {FN (abs2), ARG(-1.19209289550781250e-07,-5.0e-01), RES(2.5000000000001421085e-1, 0.0)}, {FN (abs2), ARG(1.19209289550781250e-07,1.0e+00), RES(1.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(1.19209289550781250e-07,-1.0e+00), RES(1.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(-1.19209289550781250e-07,1.0e+00), RES(1.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(-1.19209289550781250e-07,-1.0e+00), RES(1.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(1.19209289550781250e-07,2.0e+00), RES(4.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(1.19209289550781250e-07,-2.0e+00), RES(4.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(-1.19209289550781250e-07,2.0e+00), RES(4.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(-1.19209289550781250e-07,-2.0e+00), RES(4.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(1.19209289550781250e-07,8.3886080e+06), RES(7.03687441776640e13, 0.0)}, {FN (abs2), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(7.03687441776640e13, 0.0)}, {FN (abs2), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(7.03687441776640e13, 0.0)}, {FN (abs2), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(7.03687441776640e13, 0.0)}, {FN (abs2), ARG(5.0e-01,0.0e+00), RES(2.5e-1, 0.0)}, {FN (abs2), ARG(-5.0e-01,0.0e+00), RES(2.5e-1, 0.0)}, {FN (abs2), ARG(5.0e-01,1.19209289550781250e-07), RES(2.5000000000001421085e-1, 0.0)}, {FN (abs2), ARG(5.0e-01,-1.19209289550781250e-07), RES(2.5000000000001421085e-1, 0.0)}, {FN (abs2), ARG(-5.0e-01,1.19209289550781250e-07), RES(2.5000000000001421085e-1, 0.0)}, {FN (abs2), ARG(-5.0e-01,-1.19209289550781250e-07), RES(2.5000000000001421085e-1, 0.0)}, {FN (abs2), ARG(5.0e-01,5.0e-01), RES(5e-1, 0.0)}, {FN (abs2), ARG(5.0e-01,-5.0e-01), RES(5e-1, 0.0)}, {FN (abs2), ARG(-5.0e-01,5.0e-01), RES(5e-1, 0.0)}, {FN (abs2), ARG(-5.0e-01,-5.0e-01), RES(5e-1, 0.0)}, {FN (abs2), ARG(5.0e-01,1.0e+00), RES(1.25e0, 0.0)}, {FN (abs2), ARG(5.0e-01,-1.0e+00), RES(1.25e0, 0.0)}, {FN (abs2), ARG(-5.0e-01,1.0e+00), RES(1.25e0, 0.0)}, {FN (abs2), ARG(-5.0e-01,-1.0e+00), RES(1.25e0, 0.0)}, {FN (abs2), ARG(5.0e-01,2.0e+00), RES(4.25e0, 0.0)}, {FN (abs2), ARG(5.0e-01,-2.0e+00), RES(4.25e0, 0.0)}, {FN (abs2), ARG(-5.0e-01,2.0e+00), RES(4.25e0, 0.0)}, {FN (abs2), ARG(-5.0e-01,-2.0e+00), RES(4.25e0, 0.0)}, {FN (abs2), ARG(5.0e-01,8.3886080e+06), RES(7.036874417766425e13, 0.0)}, {FN (abs2), ARG(5.0e-01,-8.3886080e+06), RES(7.036874417766425e13, 0.0)}, {FN (abs2), ARG(-5.0e-01,8.3886080e+06), RES(7.036874417766425e13, 0.0)}, {FN (abs2), ARG(-5.0e-01,-8.3886080e+06), RES(7.036874417766425e13, 0.0)}, {FN (abs2), ARG(1.0e+00,0.0e+00), RES(1e0, 0.0)}, {FN (abs2), ARG(-1.0e+00,0.0e+00), RES(1e0, 0.0)}, {FN (abs2), ARG(1.0e+00,1.19209289550781250e-07), RES(1.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(1.0e+00,-1.19209289550781250e-07), RES(1.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(-1.0e+00,1.19209289550781250e-07), RES(1.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(-1.0e+00,-1.19209289550781250e-07), RES(1.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(1.0e+00,5.0e-01), RES(1.25e0, 0.0)}, {FN (abs2), ARG(1.0e+00,-5.0e-01), RES(1.25e0, 0.0)}, {FN (abs2), ARG(-1.0e+00,5.0e-01), RES(1.25e0, 0.0)}, {FN (abs2), ARG(-1.0e+00,-5.0e-01), RES(1.25e0, 0.0)}, {FN (abs2), ARG(1.0e+00,1.0e+00), RES(2e0, 0.0)}, {FN (abs2), ARG(1.0e+00,-1.0e+00), RES(2e0, 0.0)}, {FN (abs2), ARG(-1.0e+00,1.0e+00), RES(2e0, 0.0)}, {FN (abs2), ARG(-1.0e+00,-1.0e+00), RES(2e0, 0.0)}, {FN (abs2), ARG(1.0e+00,2.0e+00), RES(5e0, 0.0)}, {FN (abs2), ARG(1.0e+00,-2.0e+00), RES(5e0, 0.0)}, {FN (abs2), ARG(-1.0e+00,2.0e+00), RES(5e0, 0.0)}, {FN (abs2), ARG(-1.0e+00,-2.0e+00), RES(5e0, 0.0)}, {FN (abs2), ARG(1.0e+00,8.3886080e+06), RES(7.0368744177665e13, 0.0)}, {FN (abs2), ARG(1.0e+00,-8.3886080e+06), RES(7.0368744177665e13, 0.0)}, {FN (abs2), ARG(-1.0e+00,8.3886080e+06), RES(7.0368744177665e13, 0.0)}, {FN (abs2), ARG(-1.0e+00,-8.3886080e+06), RES(7.0368744177665e13, 0.0)}, {FN (abs2), ARG(2.0e+00,0.0e+00), RES(4e0, 0.0)}, {FN (abs2), ARG(-2.0e+00,0.0e+00), RES(4e0, 0.0)}, {FN (abs2), ARG(2.0e+00,1.19209289550781250e-07), RES(4.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(2.0e+00,-1.19209289550781250e-07), RES(4.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(-2.0e+00,1.19209289550781250e-07), RES(4.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(-2.0e+00,-1.19209289550781250e-07), RES(4.0000000000000142109e0, 0.0)}, {FN (abs2), ARG(2.0e+00,5.0e-01), RES(4.25e0, 0.0)}, {FN (abs2), ARG(2.0e+00,-5.0e-01), RES(4.25e0, 0.0)}, {FN (abs2), ARG(-2.0e+00,5.0e-01), RES(4.25e0, 0.0)}, {FN (abs2), ARG(-2.0e+00,-5.0e-01), RES(4.25e0, 0.0)}, {FN (abs2), ARG(2.0e+00,1.0e+00), RES(5e0, 0.0)}, {FN (abs2), ARG(2.0e+00,-1.0e+00), RES(5e0, 0.0)}, {FN (abs2), ARG(-2.0e+00,1.0e+00), RES(5e0, 0.0)}, {FN (abs2), ARG(-2.0e+00,-1.0e+00), RES(5e0, 0.0)}, {FN (abs2), ARG(2.0e+00,2.0e+00), RES(8e0, 0.0)}, {FN (abs2), ARG(2.0e+00,-2.0e+00), RES(8e0, 0.0)}, {FN (abs2), ARG(-2.0e+00,2.0e+00), RES(8e0, 0.0)}, {FN (abs2), ARG(-2.0e+00,-2.0e+00), RES(8e0, 0.0)}, {FN (abs2), ARG(2.0e+00,8.3886080e+06), RES(7.0368744177668e13, 0.0)}, {FN (abs2), ARG(2.0e+00,-8.3886080e+06), RES(7.0368744177668e13, 0.0)}, {FN (abs2), ARG(-2.0e+00,8.3886080e+06), RES(7.0368744177668e13, 0.0)}, {FN (abs2), ARG(-2.0e+00,-8.3886080e+06), RES(7.0368744177668e13, 0.0)}, {FN (abs2), ARG(8.3886080e+06,0.0e+00), RES(7.0368744177664e13, 0.0)}, {FN (abs2), ARG(-8.3886080e+06,0.0e+00), RES(7.0368744177664e13, 0.0)}, {FN (abs2), ARG(8.3886080e+06,1.19209289550781250e-07), RES(7.03687441776640e13, 0.0)}, {FN (abs2), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(7.03687441776640e13, 0.0)}, {FN (abs2), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(7.03687441776640e13, 0.0)}, {FN (abs2), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(7.03687441776640e13, 0.0)}, {FN (abs2), ARG(8.3886080e+06,5.0e-01), RES(7.036874417766425e13, 0.0)}, {FN (abs2), ARG(8.3886080e+06,-5.0e-01), RES(7.036874417766425e13, 0.0)}, {FN (abs2), ARG(-8.3886080e+06,5.0e-01), RES(7.036874417766425e13, 0.0)}, {FN (abs2), ARG(-8.3886080e+06,-5.0e-01), RES(7.036874417766425e13, 0.0)}, {FN (abs2), ARG(8.3886080e+06,1.0e+00), RES(7.0368744177665e13, 0.0)}, {FN (abs2), ARG(8.3886080e+06,-1.0e+00), RES(7.0368744177665e13, 0.0)}, {FN (abs2), ARG(-8.3886080e+06,1.0e+00), RES(7.0368744177665e13, 0.0)}, {FN (abs2), ARG(-8.3886080e+06,-1.0e+00), RES(7.0368744177665e13, 0.0)}, {FN (abs2), ARG(8.3886080e+06,2.0e+00), RES(7.0368744177668e13, 0.0)}, {FN (abs2), ARG(8.3886080e+06,-2.0e+00), RES(7.0368744177668e13, 0.0)}, {FN (abs2), ARG(-8.3886080e+06,2.0e+00), RES(7.0368744177668e13, 0.0)}, {FN (abs2), ARG(-8.3886080e+06,-2.0e+00), RES(7.0368744177668e13, 0.0)}, {FN (abs2), ARG(8.3886080e+06,8.3886080e+06), RES(1.40737488355328e14, 0.0)}, {FN (abs2), ARG(8.3886080e+06,-8.3886080e+06), RES(1.40737488355328e14, 0.0)}, {FN (abs2), ARG(-8.3886080e+06,8.3886080e+06), RES(1.40737488355328e14, 0.0)}, {FN (abs2), ARG(-8.3886080e+06,-8.3886080e+06), RES(1.40737488355328e14, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,0.0e+00), RES(-1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,0.0e+00), RES(-1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(-1.5595811562598769462e1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(-1.5595811562598769462e1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(-1.5595811562598769462e1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(-1.5595811562598769462e1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,5.0e-01), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,-5.0e-01), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,5.0e-01), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,-5.0e-01), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,1.0e+00), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,-1.0e+00), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,1.0e+00), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,-1.0e+00), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,2.0e+00), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,-2.0e+00), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,2.0e+00), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,-2.0e+00), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(5.0e-01,0.0e+00), RES(-6.9314718055994530942e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,0.0e+00), RES(-6.9314718055994530942e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,1.19209289550781250e-07), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,-1.19209289550781250e-07), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,1.19209289550781250e-07), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,-1.19209289550781250e-07), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,5.0e-01), RES(-3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,-5.0e-01), RES(-3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,5.0e-01), RES(-3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,-5.0e-01), RES(-3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,1.0e+00), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,-1.0e+00), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,1.0e+00), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,-1.0e+00), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,2.0e+00), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,-2.0e+00), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,2.0e+00), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,-2.0e+00), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,8.3886080e+06), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(5.0e-01,-8.3886080e+06), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(-5.0e-01,8.3886080e+06), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(-5.0e-01,-8.3886080e+06), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(1.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (logabs), ARG(-1.0e+00,0.0e+00), RES(0e0, 0.0)}, {FN (logabs), ARG(1.0e+00,1.19209289550781250e-07), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(1.0e+00,-1.19209289550781250e-07), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(-1.0e+00,1.19209289550781250e-07), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(-1.0e+00,-1.19209289550781250e-07), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(1.0e+00,5.0e-01), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(1.0e+00,-5.0e-01), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(-1.0e+00,5.0e-01), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(-1.0e+00,-5.0e-01), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(1.0e+00,1.0e+00), RES(3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(1.0e+00,-1.0e+00), RES(3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(-1.0e+00,1.0e+00), RES(3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(-1.0e+00,-1.0e+00), RES(3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(1.0e+00,2.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(1.0e+00,-2.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(-1.0e+00,2.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(-1.0e+00,-2.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(1.0e+00,8.3886080e+06), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(1.0e+00,-8.3886080e+06), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(-1.0e+00,8.3886080e+06), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(-1.0e+00,-8.3886080e+06), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(2.0e+00,0.0e+00), RES(6.9314718055994530942e-1, 0.0)}, {FN (logabs), ARG(-2.0e+00,0.0e+00), RES(6.9314718055994530942e-1, 0.0)}, {FN (logabs), ARG(2.0e+00,1.19209289550781250e-07), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(2.0e+00,-1.19209289550781250e-07), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(-2.0e+00,1.19209289550781250e-07), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(-2.0e+00,-1.19209289550781250e-07), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(2.0e+00,5.0e-01), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(2.0e+00,-5.0e-01), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(-2.0e+00,5.0e-01), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(-2.0e+00,-5.0e-01), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(2.0e+00,1.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(2.0e+00,-1.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(-2.0e+00,1.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(-2.0e+00,-1.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(2.0e+00,2.0e+00), RES(1.0397207708399179641e0, 0.0)}, {FN (logabs), ARG(2.0e+00,-2.0e+00), RES(1.0397207708399179641e0, 0.0)}, {FN (logabs), ARG(-2.0e+00,2.0e+00), RES(1.0397207708399179641e0, 0.0)}, {FN (logabs), ARG(-2.0e+00,-2.0e+00), RES(1.0397207708399179641e0, 0.0)}, {FN (logabs), ARG(2.0e+00,8.3886080e+06), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(2.0e+00,-8.3886080e+06), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(-2.0e+00,8.3886080e+06), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(-2.0e+00,-8.3886080e+06), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,0.0e+00), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,0.0e+00), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,5.0e-01), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,-5.0e-01), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,5.0e-01), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,-5.0e-01), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,1.0e+00), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,-1.0e+00), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,1.0e+00), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,-1.0e+00), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,2.0e+00), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,-2.0e+00), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,2.0e+00), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,-2.0e+00), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,8.3886080e+06), RES(1.6288958743158714771e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,-8.3886080e+06), RES(1.6288958743158714771e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,8.3886080e+06), RES(1.6288958743158714771e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,-8.3886080e+06), RES(1.6288958743158714771e1, 0.0)}, {FN (logabs), ARG(0.0e+00,1.19209289550781250e-07), RES(-1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(0.0e+00,-1.19209289550781250e-07), RES(-1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(0.0e+00,5.0e-01), RES(-6.9314718055994530942e-1, 0.0)}, {FN (logabs), ARG(0.0e+00,-5.0e-01), RES(-6.9314718055994530942e-1, 0.0)}, {FN (logabs), ARG(0.0e+00,1.0e+00), RES(0e0, 0.0)}, {FN (logabs), ARG(0.0e+00,-1.0e+00), RES(0e0, 0.0)}, {FN (logabs), ARG(0.0e+00,2.0e+00), RES(6.9314718055994530942e-1, 0.0)}, {FN (logabs), ARG(0.0e+00,-2.0e+00), RES(6.9314718055994530942e-1, 0.0)}, {FN (logabs), ARG(0.0e+00,8.3886080e+06), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(0.0e+00,-8.3886080e+06), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,1.19209289550781250e-07), RES(-1.5595811562598769462e1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,-1.19209289550781250e-07), RES(-1.5595811562598769462e1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,1.19209289550781250e-07), RES(-1.5595811562598769462e1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,-1.19209289550781250e-07), RES(-1.5595811562598769462e1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,5.0e-01), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,-5.0e-01), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,5.0e-01), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,-5.0e-01), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,1.0e+00), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,-1.0e+00), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,1.0e+00), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,-1.0e+00), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,2.0e+00), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,-2.0e+00), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,2.0e+00), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,-2.0e+00), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,8.3886080e+06), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(1.19209289550781250e-07,-8.3886080e+06), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,8.3886080e+06), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(-1.19209289550781250e-07,-8.3886080e+06), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(5.0e-01,1.19209289550781250e-07), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,-1.19209289550781250e-07), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,1.19209289550781250e-07), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,-1.19209289550781250e-07), RES(-6.9314718055991688771e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,5.0e-01), RES(-3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,-5.0e-01), RES(-3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,5.0e-01), RES(-3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,-5.0e-01), RES(-3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,1.0e+00), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,-1.0e+00), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,1.0e+00), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,-1.0e+00), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,2.0e+00), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,-2.0e+00), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,2.0e+00), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(-5.0e-01,-2.0e+00), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(5.0e-01,8.3886080e+06), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(5.0e-01,-8.3886080e+06), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(-5.0e-01,8.3886080e+06), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(-5.0e-01,-8.3886080e+06), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(1.0e+00,1.19209289550781250e-07), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(1.0e+00,-1.19209289550781250e-07), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(-1.0e+00,1.19209289550781250e-07), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(-1.0e+00,-1.19209289550781250e-07), RES(7.1054273576009513716e-15, 0.0)}, {FN (logabs), ARG(1.0e+00,5.0e-01), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(1.0e+00,-5.0e-01), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(-1.0e+00,5.0e-01), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(-1.0e+00,-5.0e-01), RES(1.1157177565710487788e-1, 0.0)}, {FN (logabs), ARG(1.0e+00,1.0e+00), RES(3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(1.0e+00,-1.0e+00), RES(3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(-1.0e+00,1.0e+00), RES(3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(-1.0e+00,-1.0e+00), RES(3.4657359027997265471e-1, 0.0)}, {FN (logabs), ARG(1.0e+00,2.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(1.0e+00,-2.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(-1.0e+00,2.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(-1.0e+00,-2.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(1.0e+00,8.3886080e+06), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(1.0e+00,-8.3886080e+06), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(-1.0e+00,8.3886080e+06), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(-1.0e+00,-8.3886080e+06), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(2.0e+00,1.19209289550781250e-07), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(2.0e+00,-1.19209289550781250e-07), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(-2.0e+00,1.19209289550781250e-07), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(-2.0e+00,-1.19209289550781250e-07), RES(6.9314718055994708577e-1, 0.0)}, {FN (logabs), ARG(2.0e+00,5.0e-01), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(2.0e+00,-5.0e-01), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(-2.0e+00,5.0e-01), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(-2.0e+00,-5.0e-01), RES(7.2345949146816273071e-1, 0.0)}, {FN (logabs), ARG(2.0e+00,1.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(2.0e+00,-1.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(-2.0e+00,1.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(-2.0e+00,-1.0e+00), RES(8.0471895621705018730e-1, 0.0)}, {FN (logabs), ARG(2.0e+00,2.0e+00), RES(1.0397207708399179641e0, 0.0)}, {FN (logabs), ARG(2.0e+00,-2.0e+00), RES(1.0397207708399179641e0, 0.0)}, {FN (logabs), ARG(-2.0e+00,2.0e+00), RES(1.0397207708399179641e0, 0.0)}, {FN (logabs), ARG(-2.0e+00,-2.0e+00), RES(1.0397207708399179641e0, 0.0)}, {FN (logabs), ARG(2.0e+00,8.3886080e+06), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(2.0e+00,-8.3886080e+06), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(-2.0e+00,8.3886080e+06), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(-2.0e+00,-8.3886080e+06), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,1.19209289550781250e-07), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,-1.19209289550781250e-07), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,1.19209289550781250e-07), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,-1.19209289550781250e-07), RES(1.5942385152878742117e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,5.0e-01), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,-5.0e-01), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,5.0e-01), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,-5.0e-01), RES(1.5942385152878743893e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,1.0e+00), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,-1.0e+00), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,1.0e+00), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,-1.0e+00), RES(1.5942385152878749222e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,2.0e+00), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,-2.0e+00), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,2.0e+00), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,-2.0e+00), RES(1.5942385152878770538e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,8.3886080e+06), RES(1.6288958743158714771e1, 0.0)}, {FN (logabs), ARG(8.3886080e+06,-8.3886080e+06), RES(1.6288958743158714771e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,8.3886080e+06), RES(1.6288958743158714771e1, 0.0)}, {FN (logabs), ARG(-8.3886080e+06,-8.3886080e+06), RES(1.6288958743158714771e1, 0.0)}, gsl/vector/0000755000175000017500000000000014057135461011225 5ustar eddeddgsl/vector/gsl_vector_complex_float.h0000644000175000017500000002203313536675317016473 0ustar eddedd/* vector/gsl_vector_complex_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_VECTOR_COMPLEX_FLOAT_H__ #define __GSL_VECTOR_COMPLEX_FLOAT_H__ #include #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size; size_t stride; float *data; gsl_block_complex_float *block; int owner; } gsl_vector_complex_float; typedef struct { gsl_vector_complex_float vector; } _gsl_vector_complex_float_view; typedef _gsl_vector_complex_float_view gsl_vector_complex_float_view; typedef struct { gsl_vector_complex_float vector; } _gsl_vector_complex_float_const_view; typedef const _gsl_vector_complex_float_const_view gsl_vector_complex_float_const_view; /* Allocation */ gsl_vector_complex_float *gsl_vector_complex_float_alloc (const size_t n); gsl_vector_complex_float *gsl_vector_complex_float_calloc (const size_t n); gsl_vector_complex_float * gsl_vector_complex_float_alloc_from_block (gsl_block_complex_float * b, const size_t offset, const size_t n, const size_t stride); gsl_vector_complex_float * gsl_vector_complex_float_alloc_from_vector (gsl_vector_complex_float * v, const size_t offset, const size_t n, const size_t stride); void gsl_vector_complex_float_free (gsl_vector_complex_float * v); /* Views */ _gsl_vector_complex_float_view gsl_vector_complex_float_view_array (float *base, size_t n); _gsl_vector_complex_float_view gsl_vector_complex_float_view_array_with_stride (float *base, size_t stride, size_t n); _gsl_vector_complex_float_const_view gsl_vector_complex_float_const_view_array (const float *base, size_t n); _gsl_vector_complex_float_const_view gsl_vector_complex_float_const_view_array_with_stride (const float *base, size_t stride, size_t n); _gsl_vector_complex_float_view gsl_vector_complex_float_subvector (gsl_vector_complex_float *base, size_t i, size_t n); _gsl_vector_complex_float_view gsl_vector_complex_float_subvector_with_stride (gsl_vector_complex_float *v, size_t i, size_t stride, size_t n); _gsl_vector_complex_float_const_view gsl_vector_complex_float_const_subvector (const gsl_vector_complex_float *base, size_t i, size_t n); _gsl_vector_complex_float_const_view gsl_vector_complex_float_const_subvector_with_stride (const gsl_vector_complex_float *v, size_t i, size_t stride, size_t n); _gsl_vector_float_view gsl_vector_complex_float_real (gsl_vector_complex_float *v); _gsl_vector_float_view gsl_vector_complex_float_imag (gsl_vector_complex_float *v); _gsl_vector_float_const_view gsl_vector_complex_float_const_real (const gsl_vector_complex_float *v); _gsl_vector_float_const_view gsl_vector_complex_float_const_imag (const gsl_vector_complex_float *v); /* Operations */ void gsl_vector_complex_float_set_zero (gsl_vector_complex_float * v); void gsl_vector_complex_float_set_all (gsl_vector_complex_float * v, gsl_complex_float z); int gsl_vector_complex_float_set_basis (gsl_vector_complex_float * v, size_t i); int gsl_vector_complex_float_fread (FILE * stream, gsl_vector_complex_float * v); int gsl_vector_complex_float_fwrite (FILE * stream, const gsl_vector_complex_float * v); int gsl_vector_complex_float_fscanf (FILE * stream, gsl_vector_complex_float * v); int gsl_vector_complex_float_fprintf (FILE * stream, const gsl_vector_complex_float * v, const char *format); int gsl_vector_complex_float_memcpy (gsl_vector_complex_float * dest, const gsl_vector_complex_float * src); int gsl_vector_complex_float_reverse (gsl_vector_complex_float * v); int gsl_vector_complex_float_swap (gsl_vector_complex_float * v, gsl_vector_complex_float * w); int gsl_vector_complex_float_swap_elements (gsl_vector_complex_float * v, const size_t i, const size_t j); int gsl_vector_complex_float_equal (const gsl_vector_complex_float * u, const gsl_vector_complex_float * v); int gsl_vector_complex_float_isnull (const gsl_vector_complex_float * v); int gsl_vector_complex_float_ispos (const gsl_vector_complex_float * v); int gsl_vector_complex_float_isneg (const gsl_vector_complex_float * v); int gsl_vector_complex_float_isnonneg (const gsl_vector_complex_float * v); int gsl_vector_complex_float_add (gsl_vector_complex_float * a, const gsl_vector_complex_float * b); int gsl_vector_complex_float_sub (gsl_vector_complex_float * a, const gsl_vector_complex_float * b); int gsl_vector_complex_float_mul (gsl_vector_complex_float * a, const gsl_vector_complex_float * b); int gsl_vector_complex_float_div (gsl_vector_complex_float * a, const gsl_vector_complex_float * b); int gsl_vector_complex_float_scale (gsl_vector_complex_float * a, const gsl_complex_float x); int gsl_vector_complex_float_add_constant (gsl_vector_complex_float * a, const gsl_complex_float x); int gsl_vector_complex_float_axpby (const gsl_complex_float alpha, const gsl_vector_complex_float * x, const gsl_complex_float beta, gsl_vector_complex_float * y); INLINE_DECL gsl_complex_float gsl_vector_complex_float_get (const gsl_vector_complex_float * v, const size_t i); INLINE_DECL void gsl_vector_complex_float_set (gsl_vector_complex_float * v, const size_t i, gsl_complex_float z); INLINE_DECL gsl_complex_float *gsl_vector_complex_float_ptr (gsl_vector_complex_float * v, const size_t i); INLINE_DECL const gsl_complex_float *gsl_vector_complex_float_const_ptr (const gsl_vector_complex_float * v, const size_t i); #ifdef HAVE_INLINE INLINE_FUN gsl_complex_float gsl_vector_complex_float_get (const gsl_vector_complex_float * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { gsl_complex_float zero = {{0, 0}}; GSL_ERROR_VAL ("index out of range", GSL_EINVAL, zero); } #endif return *GSL_COMPLEX_FLOAT_AT (v, i); } INLINE_FUN void gsl_vector_complex_float_set (gsl_vector_complex_float * v, const size_t i, gsl_complex_float z) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VOID ("index out of range", GSL_EINVAL); } #endif *GSL_COMPLEX_FLOAT_AT (v, i) = z; } INLINE_FUN gsl_complex_float * gsl_vector_complex_float_ptr (gsl_vector_complex_float * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return GSL_COMPLEX_FLOAT_AT (v, i); } INLINE_FUN const gsl_complex_float * gsl_vector_complex_float_const_ptr (const gsl_vector_complex_float * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return GSL_COMPLEX_FLOAT_AT (v, i); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_VECTOR_COMPLEX_FLOAT_H__ */ gsl/vector/minmax.c0000644000175000017500000000260313536674414012672 0ustar eddedd#include #include #include #include #define BASE_LONG_DOUBLE #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "minmax_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/vector/swap_source.c0000644000175000017500000000507313536674414013737 0ustar eddedd/* vector/swap_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION (gsl_vector, swap) (TYPE (gsl_vector) * v, TYPE (gsl_vector) * w) { ATOMIC * d1 = v->data ; ATOMIC * d2 = w->data ; const size_t size = v->size ; const size_t s1 = MULTIPLICITY * v->stride ; const size_t s2 = MULTIPLICITY * w->stride ; size_t i, k ; if (v->size != w->size) { GSL_ERROR("vector lengths must be equal", GSL_EINVAL); } for (i = 0; i < size; i++) { for (k = 0; k < MULTIPLICITY; k++) { ATOMIC tmp = d1[i*s1 + k]; d1[i*s1+k] = d2[i*s2 + k]; d2[i*s2+k] = tmp; } } return GSL_SUCCESS; } int FUNCTION (gsl_vector, swap_elements) (TYPE (gsl_vector) * v, const size_t i, const size_t j) { ATOMIC * data = v->data ; const size_t size = v->size ; const size_t stride = v->stride ; if (i >= size) { GSL_ERROR("first index is out of range", GSL_EINVAL); } if (j >= size) { GSL_ERROR("second index is out of range", GSL_EINVAL); } if (i != j) { const size_t s = MULTIPLICITY * stride ; size_t k ; for (k = 0; k < MULTIPLICITY; k++) { ATOMIC tmp = data[j*s + k]; data[j*s+k] = data[i*s + k]; data[i*s+k] = tmp; } } return GSL_SUCCESS; } int FUNCTION (gsl_vector, reverse) (TYPE (gsl_vector) * v) { ATOMIC * data = v->data ; const size_t size = v->size ; const size_t stride = v->stride ; const size_t s = MULTIPLICITY * stride ; size_t i ; for (i = 0 ; i < (size / 2) ; i++) { size_t j = size - i - 1 ; size_t k; for (k = 0; k < MULTIPLICITY; k++) { ATOMIC tmp = data[j*s + k]; data[j*s+k] = data[i*s + k]; data[i*s+k] = tmp; } } return GSL_SUCCESS; } gsl/vector/Makefile.in0000664000175000017500000011501614057135461013300 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) test_static$(EXEEXT) subdir = vector ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslvector_la_LIBADD = am_libgslvector_la_OBJECTS = init.lo file.lo vector.lo copy.lo swap.lo \ prop.lo minmax.lo oper.lo reim.lo subvector.lo view.lo libgslvector_la_OBJECTS = $(am_libgslvector_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslvector.la ../blas/libgslblas.la \ ../cblas/libgslcblas.la ../block/libgslblock.la \ ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la am_test_static_OBJECTS = test_static.$(OBJEXT) test_static_OBJECTS = $(am_test_static_OBJECTS) test_static_DEPENDENCIES = libgslvector.la ../blas/libgslblas.la \ ../cblas/libgslcblas.la ../block/libgslblock.la \ ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/copy.Plo ./$(DEPDIR)/file.Plo \ ./$(DEPDIR)/init.Plo ./$(DEPDIR)/minmax.Plo \ ./$(DEPDIR)/oper.Plo ./$(DEPDIR)/prop.Plo ./$(DEPDIR)/reim.Plo \ ./$(DEPDIR)/subvector.Plo ./$(DEPDIR)/swap.Plo \ ./$(DEPDIR)/test.Po ./$(DEPDIR)/test_static.Po \ ./$(DEPDIR)/vector.Plo ./$(DEPDIR)/view.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslvector_la_SOURCES) $(test_SOURCES) \ $(test_static_SOURCES) DIST_SOURCES = $(libgslvector_la_SOURCES) $(test_SOURCES) \ $(test_static_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslvector.la pkginclude_HEADERS = gsl_vector.h gsl_vector_char.h gsl_vector_complex.h gsl_vector_complex_double.h gsl_vector_complex_float.h gsl_vector_complex_long_double.h gsl_vector_double.h gsl_vector_float.h gsl_vector_int.h gsl_vector_long.h gsl_vector_long_double.h gsl_vector_short.h gsl_vector_uchar.h gsl_vector_uint.h gsl_vector_ulong.h gsl_vector_ushort.h AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_static_LDADD = libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c test_static_SOURCES = test_static.c CLEANFILES = test.txt test.dat test_static.dat noinst_HEADERS = init_source.c file_source.c copy_source.c swap_source.c prop_source.c test_complex_source.c test_source.c minmax_source.c oper_source.c oper_complex_source.c reim_source.c subvector_source.c view_source.c libgslvector_la_SOURCES = init.c file.c vector.c copy.c swap.c prop.c minmax.c oper.c reim.c subvector.c view.c view.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu vector/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu vector/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslvector.la: $(libgslvector_la_OBJECTS) $(libgslvector_la_DEPENDENCIES) $(EXTRA_libgslvector_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslvector_la_OBJECTS) $(libgslvector_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) test_static$(EXEEXT): $(test_static_OBJECTS) $(test_static_DEPENDENCIES) $(EXTRA_test_static_DEPENDENCIES) @rm -f test_static$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_static_OBJECTS) $(test_static_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minmax.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oper.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prop.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reim.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subvector.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swap.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_static.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/view.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_static.log: test_static$(EXEEXT) @p='test_static$(EXEEXT)'; \ b='test_static'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/copy.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/init.Plo -rm -f ./$(DEPDIR)/minmax.Plo -rm -f ./$(DEPDIR)/oper.Plo -rm -f ./$(DEPDIR)/prop.Plo -rm -f ./$(DEPDIR)/reim.Plo -rm -f ./$(DEPDIR)/subvector.Plo -rm -f ./$(DEPDIR)/swap.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_static.Po -rm -f ./$(DEPDIR)/vector.Plo -rm -f ./$(DEPDIR)/view.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/copy.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/init.Plo -rm -f ./$(DEPDIR)/minmax.Plo -rm -f ./$(DEPDIR)/oper.Plo -rm -f ./$(DEPDIR)/prop.Plo -rm -f ./$(DEPDIR)/reim.Plo -rm -f ./$(DEPDIR)/subvector.Plo -rm -f ./$(DEPDIR)/swap.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_static.Po -rm -f ./$(DEPDIR)/vector.Plo -rm -f ./$(DEPDIR)/view.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/vector/gsl_vector_uint.h0000664000175000017500000001703314057135461014612 0ustar eddedd/* vector/gsl_vector_uint.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_VECTOR_UINT_H__ #define __GSL_VECTOR_UINT_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size; size_t stride; unsigned int *data; gsl_block_uint *block; int owner; } gsl_vector_uint; typedef struct { gsl_vector_uint vector; } _gsl_vector_uint_view; typedef _gsl_vector_uint_view gsl_vector_uint_view; typedef struct { gsl_vector_uint vector; } _gsl_vector_uint_const_view; typedef const _gsl_vector_uint_const_view gsl_vector_uint_const_view; /* Allocation */ gsl_vector_uint *gsl_vector_uint_alloc (const size_t n); gsl_vector_uint *gsl_vector_uint_calloc (const size_t n); gsl_vector_uint *gsl_vector_uint_alloc_from_block (gsl_block_uint * b, const size_t offset, const size_t n, const size_t stride); gsl_vector_uint *gsl_vector_uint_alloc_from_vector (gsl_vector_uint * v, const size_t offset, const size_t n, const size_t stride); void gsl_vector_uint_free (gsl_vector_uint * v); /* Views */ _gsl_vector_uint_view gsl_vector_uint_view_array (unsigned int *v, size_t n); _gsl_vector_uint_view gsl_vector_uint_view_array_with_stride (unsigned int *base, size_t stride, size_t n); _gsl_vector_uint_const_view gsl_vector_uint_const_view_array (const unsigned int *v, size_t n); _gsl_vector_uint_const_view gsl_vector_uint_const_view_array_with_stride (const unsigned int *base, size_t stride, size_t n); _gsl_vector_uint_view gsl_vector_uint_subvector (gsl_vector_uint *v, size_t i, size_t n); _gsl_vector_uint_view gsl_vector_uint_subvector_with_stride (gsl_vector_uint *v, size_t i, size_t stride, size_t n); _gsl_vector_uint_const_view gsl_vector_uint_const_subvector (const gsl_vector_uint *v, size_t i, size_t n); _gsl_vector_uint_const_view gsl_vector_uint_const_subvector_with_stride (const gsl_vector_uint *v, size_t i, size_t stride, size_t n); /* Operations */ void gsl_vector_uint_set_zero (gsl_vector_uint * v); void gsl_vector_uint_set_all (gsl_vector_uint * v, unsigned int x); int gsl_vector_uint_set_basis (gsl_vector_uint * v, size_t i); int gsl_vector_uint_fread (FILE * stream, gsl_vector_uint * v); int gsl_vector_uint_fwrite (FILE * stream, const gsl_vector_uint * v); int gsl_vector_uint_fscanf (FILE * stream, gsl_vector_uint * v); int gsl_vector_uint_fprintf (FILE * stream, const gsl_vector_uint * v, const char *format); int gsl_vector_uint_memcpy (gsl_vector_uint * dest, const gsl_vector_uint * src); int gsl_vector_uint_reverse (gsl_vector_uint * v); int gsl_vector_uint_swap (gsl_vector_uint * v, gsl_vector_uint * w); int gsl_vector_uint_swap_elements (gsl_vector_uint * v, const size_t i, const size_t j); unsigned int gsl_vector_uint_max (const gsl_vector_uint * v); unsigned int gsl_vector_uint_min (const gsl_vector_uint * v); void gsl_vector_uint_minmax (const gsl_vector_uint * v, unsigned int * min_out, unsigned int * max_out); size_t gsl_vector_uint_max_index (const gsl_vector_uint * v); size_t gsl_vector_uint_min_index (const gsl_vector_uint * v); void gsl_vector_uint_minmax_index (const gsl_vector_uint * v, size_t * imin, size_t * imax); int gsl_vector_uint_add (gsl_vector_uint * a, const gsl_vector_uint * b); int gsl_vector_uint_sub (gsl_vector_uint * a, const gsl_vector_uint * b); int gsl_vector_uint_mul (gsl_vector_uint * a, const gsl_vector_uint * b); int gsl_vector_uint_div (gsl_vector_uint * a, const gsl_vector_uint * b); int gsl_vector_uint_scale (gsl_vector_uint * a, const unsigned int x); int gsl_vector_uint_add_constant (gsl_vector_uint * a, const unsigned int x); int gsl_vector_uint_axpby (const unsigned int alpha, const gsl_vector_uint * x, const unsigned int beta, gsl_vector_uint * y); unsigned int gsl_vector_uint_sum (const gsl_vector_uint * a); int gsl_vector_uint_equal (const gsl_vector_uint * u, const gsl_vector_uint * v); int gsl_vector_uint_isnull (const gsl_vector_uint * v); int gsl_vector_uint_ispos (const gsl_vector_uint * v); int gsl_vector_uint_isneg (const gsl_vector_uint * v); int gsl_vector_uint_isnonneg (const gsl_vector_uint * v); INLINE_DECL unsigned int gsl_vector_uint_get (const gsl_vector_uint * v, const size_t i); INLINE_DECL void gsl_vector_uint_set (gsl_vector_uint * v, const size_t i, unsigned int x); INLINE_DECL unsigned int * gsl_vector_uint_ptr (gsl_vector_uint * v, const size_t i); INLINE_DECL const unsigned int * gsl_vector_uint_const_ptr (const gsl_vector_uint * v, const size_t i); #ifdef HAVE_INLINE INLINE_FUN unsigned int gsl_vector_uint_get (const gsl_vector_uint * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VAL ("index out of range", GSL_EINVAL, 0); } #endif return v->data[i * v->stride]; } INLINE_FUN void gsl_vector_uint_set (gsl_vector_uint * v, const size_t i, unsigned int x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VOID ("index out of range", GSL_EINVAL); } #endif v->data[i * v->stride] = x; } INLINE_FUN unsigned int * gsl_vector_uint_ptr (gsl_vector_uint * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (unsigned int *) (v->data + i * v->stride); } INLINE_FUN const unsigned int * gsl_vector_uint_const_ptr (const gsl_vector_uint * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (const unsigned int *) (v->data + i * v->stride); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_VECTOR_UINT_H__ */ gsl/vector/gsl_vector.h0000644000175000017500000000112613536674414013554 0ustar eddedd#ifndef __GSL_VECTOR_H__ #define __GSL_VECTOR_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif /* __GSL_VECTOR_H__ */ gsl/vector/file_source.c0000644000175000017500000000443413536674414013704 0ustar eddedd/* vector/file_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION (gsl_vector, fread) (FILE * stream, TYPE (gsl_vector) * v) { int status = FUNCTION (gsl_block, raw_fread) (stream, v->data, v->size, v->stride); return status; } int FUNCTION (gsl_vector, fwrite) (FILE * stream, const TYPE (gsl_vector) * v) { int status = FUNCTION (gsl_block, raw_fwrite) (stream, v->data, v->size, v->stride); return status; } #if !(USES_LONGDOUBLE && !HAVE_PRINTF_LONGDOUBLE) int FUNCTION (gsl_vector, fprintf) (FILE * stream, const TYPE (gsl_vector) * v, const char *format) { int status = FUNCTION (gsl_block, raw_fprintf) (stream, v->data, v->size, v->stride, format); return status; } int FUNCTION (gsl_vector, fscanf) (FILE * stream, TYPE (gsl_vector) * v) { int status = FUNCTION (gsl_block, raw_fscanf) (stream, v->data, v->size, v->stride); return status; } #endif gsl/vector/view_source.c0000644000175000017500000000341513536674414013735 0ustar eddedd/* vector/view_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ QUALIFIED_VIEW(_gsl_vector,view) FUNCTION(gsl_vector, view_array) (QUALIFIER ATOMIC * base, size_t n) { QUALIFIED_VIEW(_gsl_vector,view) view = NULL_VECTOR_VIEW; { TYPE(gsl_vector) v = NULL_VECTOR; v.data = (ATOMIC *)base ; v.size = n; v.stride = 1; v.block = 0; v.owner = 0; view.vector = v; return view; } } QUALIFIED_VIEW(_gsl_vector,view) FUNCTION(gsl_vector, view_array_with_stride) (QUALIFIER ATOMIC * base, size_t stride, size_t n) { QUALIFIED_VIEW(_gsl_vector,view) view = NULL_VECTOR_VIEW; if (stride == 0) { GSL_ERROR_VAL ("stride must be positive integer", GSL_EINVAL, view); } { TYPE(gsl_vector) v = NULL_VECTOR; v.data = (ATOMIC *)base ; v.size = n; v.stride = stride; v.block = 0; v.owner = 0; view.vector = v; return view; } } gsl/vector/subvector_source.c0000644000175000017500000000420413536674414014774 0ustar eddedd/* vector/subvector_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ QUALIFIED_VIEW(_gsl_vector, view) FUNCTION(gsl_vector, subvector) (QUALIFIED_TYPE(gsl_vector) * v, size_t offset, size_t n) { QUALIFIED_VIEW(_gsl_vector,view) view = NULL_VECTOR_VIEW; if (offset + (n > 0 ? n - 1 : 0) >= v->size) { GSL_ERROR_VAL ("view would extend past end of vector", GSL_EINVAL, view); } { TYPE(gsl_vector) s = NULL_VECTOR; s.data = v->data + MULTIPLICITY * v->stride * offset ; s.size = n; s.stride = v->stride; s.block = v->block; s.owner = 0; view.vector = s; return view; } } QUALIFIED_VIEW(_gsl_vector, view) FUNCTION(gsl_vector, subvector_with_stride) (QUALIFIED_TYPE(gsl_vector) * v, size_t offset, size_t stride, size_t n) { QUALIFIED_VIEW(_gsl_vector,view) view = NULL_VECTOR_VIEW; if (stride == 0) { GSL_ERROR_VAL ("stride must be positive integer", GSL_EINVAL, view); } if (offset + (n > 0 ? n - 1 : 0) * stride >= v->size) { GSL_ERROR_VAL ("view would extend past end of vector", GSL_EINVAL, view); } { TYPE(gsl_vector) s = NULL_VECTOR; s.data = v->data + MULTIPLICITY * v->stride * offset ; s.size = n; s.stride = v->stride * stride; s.block = v->block; s.owner = 0; view.vector = s; return view; } } gsl/vector/gsl_vector_uchar.h0000664000175000017500000001726714057135461014746 0ustar eddedd/* vector/gsl_vector_uchar.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_VECTOR_UCHAR_H__ #define __GSL_VECTOR_UCHAR_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size; size_t stride; unsigned char *data; gsl_block_uchar *block; int owner; } gsl_vector_uchar; typedef struct { gsl_vector_uchar vector; } _gsl_vector_uchar_view; typedef _gsl_vector_uchar_view gsl_vector_uchar_view; typedef struct { gsl_vector_uchar vector; } _gsl_vector_uchar_const_view; typedef const _gsl_vector_uchar_const_view gsl_vector_uchar_const_view; /* Allocation */ gsl_vector_uchar *gsl_vector_uchar_alloc (const size_t n); gsl_vector_uchar *gsl_vector_uchar_calloc (const size_t n); gsl_vector_uchar *gsl_vector_uchar_alloc_from_block (gsl_block_uchar * b, const size_t offset, const size_t n, const size_t stride); gsl_vector_uchar *gsl_vector_uchar_alloc_from_vector (gsl_vector_uchar * v, const size_t offset, const size_t n, const size_t stride); void gsl_vector_uchar_free (gsl_vector_uchar * v); /* Views */ _gsl_vector_uchar_view gsl_vector_uchar_view_array (unsigned char *v, size_t n); _gsl_vector_uchar_view gsl_vector_uchar_view_array_with_stride (unsigned char *base, size_t stride, size_t n); _gsl_vector_uchar_const_view gsl_vector_uchar_const_view_array (const unsigned char *v, size_t n); _gsl_vector_uchar_const_view gsl_vector_uchar_const_view_array_with_stride (const unsigned char *base, size_t stride, size_t n); _gsl_vector_uchar_view gsl_vector_uchar_subvector (gsl_vector_uchar *v, size_t i, size_t n); _gsl_vector_uchar_view gsl_vector_uchar_subvector_with_stride (gsl_vector_uchar *v, size_t i, size_t stride, size_t n); _gsl_vector_uchar_const_view gsl_vector_uchar_const_subvector (const gsl_vector_uchar *v, size_t i, size_t n); _gsl_vector_uchar_const_view gsl_vector_uchar_const_subvector_with_stride (const gsl_vector_uchar *v, size_t i, size_t stride, size_t n); /* Operations */ void gsl_vector_uchar_set_zero (gsl_vector_uchar * v); void gsl_vector_uchar_set_all (gsl_vector_uchar * v, unsigned char x); int gsl_vector_uchar_set_basis (gsl_vector_uchar * v, size_t i); int gsl_vector_uchar_fread (FILE * stream, gsl_vector_uchar * v); int gsl_vector_uchar_fwrite (FILE * stream, const gsl_vector_uchar * v); int gsl_vector_uchar_fscanf (FILE * stream, gsl_vector_uchar * v); int gsl_vector_uchar_fprintf (FILE * stream, const gsl_vector_uchar * v, const char *format); int gsl_vector_uchar_memcpy (gsl_vector_uchar * dest, const gsl_vector_uchar * src); int gsl_vector_uchar_reverse (gsl_vector_uchar * v); int gsl_vector_uchar_swap (gsl_vector_uchar * v, gsl_vector_uchar * w); int gsl_vector_uchar_swap_elements (gsl_vector_uchar * v, const size_t i, const size_t j); unsigned char gsl_vector_uchar_max (const gsl_vector_uchar * v); unsigned char gsl_vector_uchar_min (const gsl_vector_uchar * v); void gsl_vector_uchar_minmax (const gsl_vector_uchar * v, unsigned char * min_out, unsigned char * max_out); size_t gsl_vector_uchar_max_index (const gsl_vector_uchar * v); size_t gsl_vector_uchar_min_index (const gsl_vector_uchar * v); void gsl_vector_uchar_minmax_index (const gsl_vector_uchar * v, size_t * imin, size_t * imax); int gsl_vector_uchar_add (gsl_vector_uchar * a, const gsl_vector_uchar * b); int gsl_vector_uchar_sub (gsl_vector_uchar * a, const gsl_vector_uchar * b); int gsl_vector_uchar_mul (gsl_vector_uchar * a, const gsl_vector_uchar * b); int gsl_vector_uchar_div (gsl_vector_uchar * a, const gsl_vector_uchar * b); int gsl_vector_uchar_scale (gsl_vector_uchar * a, const unsigned char x); int gsl_vector_uchar_add_constant (gsl_vector_uchar * a, const unsigned char x); int gsl_vector_uchar_axpby (const unsigned char alpha, const gsl_vector_uchar * x, const unsigned char beta, gsl_vector_uchar * y); unsigned char gsl_vector_uchar_sum (const gsl_vector_uchar * a); int gsl_vector_uchar_equal (const gsl_vector_uchar * u, const gsl_vector_uchar * v); int gsl_vector_uchar_isnull (const gsl_vector_uchar * v); int gsl_vector_uchar_ispos (const gsl_vector_uchar * v); int gsl_vector_uchar_isneg (const gsl_vector_uchar * v); int gsl_vector_uchar_isnonneg (const gsl_vector_uchar * v); INLINE_DECL unsigned char gsl_vector_uchar_get (const gsl_vector_uchar * v, const size_t i); INLINE_DECL void gsl_vector_uchar_set (gsl_vector_uchar * v, const size_t i, unsigned char x); INLINE_DECL unsigned char * gsl_vector_uchar_ptr (gsl_vector_uchar * v, const size_t i); INLINE_DECL const unsigned char * gsl_vector_uchar_const_ptr (const gsl_vector_uchar * v, const size_t i); #ifdef HAVE_INLINE INLINE_FUN unsigned char gsl_vector_uchar_get (const gsl_vector_uchar * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VAL ("index out of range", GSL_EINVAL, 0); } #endif return v->data[i * v->stride]; } INLINE_FUN void gsl_vector_uchar_set (gsl_vector_uchar * v, const size_t i, unsigned char x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VOID ("index out of range", GSL_EINVAL); } #endif v->data[i * v->stride] = x; } INLINE_FUN unsigned char * gsl_vector_uchar_ptr (gsl_vector_uchar * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (unsigned char *) (v->data + i * v->stride); } INLINE_FUN const unsigned char * gsl_vector_uchar_const_ptr (const gsl_vector_uchar * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (const unsigned char *) (v->data + i * v->stride); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_VECTOR_UCHAR_H__ */ gsl/vector/view.c0000644000175000017500000000672213536674414012361 0ustar eddedd#include #include #include #include "view.h" #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_CHAR #define USE_QUALIFIER #define QUALIFIER const #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "view_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/vector/test_complex_source.c0000644000175000017500000005167413536675317015506 0ustar eddedd/* vector/test_complex_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2010 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ void FUNCTION (test, func) (size_t stride, size_t N); void FUNCTION (test, ops) (size_t stride1, size_t stride2, size_t N); void FUNCTION (test, file) (size_t stride, size_t N); void FUNCTION (test, text) (size_t stride, size_t N); void FUNCTION (test, trap) (size_t stride, size_t N); TYPE (gsl_vector) * FUNCTION(create, vector) (size_t stride, size_t N); #define TEST(expr,desc) gsl_test((expr), NAME(gsl_vector) desc " stride=%d, N=%d", stride, N) #define TEST2(expr,desc) gsl_test((expr), NAME(gsl_vector) desc " stride1=%d, stride2=%d, N=%d", stride1, stride2, N) TYPE (gsl_vector) * FUNCTION(create, vector) (size_t stride, size_t N) { TYPE (gsl_vector) * v = FUNCTION (gsl_vector, calloc) (N*stride); v->stride = stride; v->size = N; return v; } void FUNCTION (test, func) (size_t stride, size_t N) { TYPE (gsl_vector) * v0; TYPE (gsl_vector) * v; QUALIFIED_VIEW(gsl_vector,view) view; size_t i, j; if (stride == 1) { v = FUNCTION (gsl_vector, calloc) (N); TEST(v->data == 0, "_calloc pointer"); TEST(v->size != N, "_calloc size"); TEST(v->stride != 1, "_calloc stride"); { int status = (FUNCTION(gsl_vector,isnull)(v) != 1); TEST (status, "_isnull" DESC " on calloc vector"); status = (FUNCTION(gsl_vector,ispos)(v) != 0); TEST (status, "_ispos" DESC " on calloc vector"); status = (FUNCTION(gsl_vector,isneg)(v) != 0); TEST (status, "_isneg" DESC " on calloc vector"); } FUNCTION (gsl_vector, free) (v); /* free whatever is in v */ } if (stride == 1) { v = FUNCTION (gsl_vector, alloc) (N); TEST(v->data == 0, "_alloc pointer"); TEST(v->size != N, "_alloc size"); TEST(v->stride != 1, "_alloc stride"); FUNCTION (gsl_vector, free) (v); /* free whatever is in v */ } if (stride == 1) { v0 = FUNCTION (gsl_vector, alloc) (N); view = FUNCTION (gsl_vector, subvector) (v0, 0, N); v = &view.vector; } else { v0 = FUNCTION (gsl_vector, alloc) (N * stride); for (i = 0; i < N*stride; i++) { BASE x = ZERO; GSL_REAL (x) = (ATOMIC)i; GSL_IMAG (x) = (ATOMIC)(i + 1234); FUNCTION (gsl_vector, set) (v0, i, x); } view = FUNCTION (gsl_vector, subvector_with_stride) (v0, 0, stride, N); v = &view.vector; } { int status = 0; for (i = 0; i < N; i++) { BASE x = ZERO; GSL_REAL (x) = (ATOMIC)i; GSL_IMAG (x) = (ATOMIC)(i + 1234); FUNCTION (gsl_vector, set) (v, i, x); } for (i = 0; i < N; i++) { if (v->data[2*i*stride] != (ATOMIC) (i) || v->data[2 * i * stride + 1] != (ATOMIC) (i + 1234)) status = 1; }; TEST(status,"_set" DESC " writes into array"); } { int status = 0; for (i = 0; i < N; i++) { BASE x, y; GSL_REAL (x) = (ATOMIC)i; GSL_IMAG (x) = (ATOMIC)(i + 1234); y = FUNCTION (gsl_vector, get) (v, i); if (!GSL_COMPLEX_EQ (x, y)) status = 1; }; TEST (status, "_get" DESC " reads from array"); } { int status = 0; for (i = 0; i < N; i++) { if (FUNCTION (gsl_vector, ptr) (v, i) != (BASE *)v->data + i*stride) status = 1; }; TEST (status, "_ptr" DESC " access to array"); } { int status = 0; for (i = 0; i < N; i++) { if (FUNCTION (gsl_vector, const_ptr) (v, i) != (BASE *)v->data + i*stride) status = 1; }; TEST (status, "_const_ptr" DESC " access to array"); } { int status = 0; for (i = 0; i < N; i++) { BASE x = ZERO; FUNCTION (gsl_vector, set) (v, i, x); } status = (FUNCTION(gsl_vector,isnull)(v) != 1); TEST (status, "_isnull" DESC " on null vector") ; status = (FUNCTION(gsl_vector,ispos)(v) != 0); TEST (status, "_ispos" DESC " on null vector") ; status = (FUNCTION(gsl_vector,isneg)(v) != 0); TEST (status, "_isneg" DESC " on null vector") ; } { int status = 0; for (i = 0; i < N; i++) { BASE x = ZERO; GSL_REAL (x) = (ATOMIC)i; GSL_IMAG (x) = (ATOMIC)(i + 1234); FUNCTION (gsl_vector, set) (v, i, x); } status = (FUNCTION(gsl_vector,isnull)(v) != 0); TEST (status, "_isnull" DESC " on non-null vector") ; status = (FUNCTION(gsl_vector,ispos)(v) != 0); TEST (status, "_ispos" DESC " on non-null vector") ; status = (FUNCTION(gsl_vector,ispos)(v) != 0); TEST (status, "_isneg" DESC " on non-null vector") ; } { int status = 0; FUNCTION (gsl_vector, set_zero) (v); for (i = 0; i < N; i++) { BASE x, y = ZERO; x = FUNCTION (gsl_vector, get) (v, i); if (!GSL_COMPLEX_EQ (x, y)) status = 1; }; TEST (status, "_setzero" DESC " on non-null vector") ; } { int status = 0; BASE x; GSL_REAL (x) = (ATOMIC)27; GSL_IMAG (x) = (ATOMIC)(27 + 1234); FUNCTION (gsl_vector, set_all) (v, x); for (i = 0; i < N; i++) { BASE y = FUNCTION (gsl_vector, get) (v, i); if (!GSL_COMPLEX_EQ (x, y)) status = 1; }; TEST (status, "_setall" DESC " to non-zero value") ; } { int status = 0; for (i = 0; i < N; i++) { FUNCTION (gsl_vector, set_basis) (v, i); for (j = 0; j < N; j++) { BASE x = FUNCTION (gsl_vector, get) (v, j); BASE one = ONE; BASE zero = ZERO; if (i == j) { if (!GSL_COMPLEX_EQ (x, one)) status = 1 ; } else { if (!GSL_COMPLEX_EQ (x, zero)) status = 1; } }; } TEST (status, "_setbasis" DESC " over range") ; } { int status = 0; for (i = 0; i < N; i++) { BASE x = ZERO; GSL_REAL (x) = (ATOMIC)i; GSL_IMAG (x) = (ATOMIC)(i + 1234); FUNCTION (gsl_vector, set) (v, i, x); } { BASE x = ZERO; GSL_REAL(x) = 2.0; GSL_IMAG(x) = 3.0; FUNCTION (gsl_vector, scale) (v, x); } for (i = 0; i < N; i++) { BASE r = FUNCTION(gsl_vector,get) (v,i); ATOMIC real = -(ATOMIC)i-(ATOMIC)3702; ATOMIC imag = 5*(ATOMIC)i+(ATOMIC)2468; if (GSL_REAL(r) != real || GSL_IMAG(r) != imag) status = 1; }; TEST (status, "_scale" DESC " by 2") ; } { int status = 0; { BASE x = ZERO; GSL_REAL(x) = 7.0; GSL_IMAG(x) = 13.0; FUNCTION (gsl_vector, add_constant) (v, x); } for (i = 0; i < N; i++) { BASE r = FUNCTION(gsl_vector,get) (v,i); ATOMIC real = -(ATOMIC)i-(ATOMIC)3695; ATOMIC imag = 5*(ATOMIC)i+(ATOMIC)2481; if (GSL_REAL(r) != real || GSL_IMAG(r) != imag) status = 1; }; TEST (status, "_add_constant" DESC) ; } for (i = 0; i < N; i++) { BASE x = ZERO; GSL_REAL (x) = (ATOMIC)i; GSL_IMAG (x) = (ATOMIC)(i + 1234); FUNCTION (gsl_vector, set) (v, i, x); } { int status; BASE x, y, r, s ; GSL_REAL(x) = 2 ; GSL_IMAG(x) = 2 + 1234; GSL_REAL(y) = 5 ; GSL_IMAG(y) = 5 + 1234; FUNCTION (gsl_vector,swap_elements) (v, 2, 5) ; r = FUNCTION(gsl_vector,get)(v,2); s = FUNCTION(gsl_vector,get)(v,5); status = ! GSL_COMPLEX_EQ(r,y) ; status |= ! GSL_COMPLEX_EQ(s,x) ; FUNCTION (gsl_vector,swap_elements) (v, 2, 5) ; r = FUNCTION(gsl_vector,get)(v,2); s = FUNCTION(gsl_vector,get)(v,5); status |= ! GSL_COMPLEX_EQ(r,x) ; status |= ! GSL_COMPLEX_EQ(s,y) ; TEST (status, "_swap_elements" DESC " exchanges elements") ; } { int status = 0; FUNCTION (gsl_vector,reverse) (v) ; for (i = 0; i < N; i++) { BASE x,r ; GSL_REAL(x) = (ATOMIC)(N - i - 1) ; GSL_IMAG(x) = (ATOMIC)(N - i - 1 + 1234); r = FUNCTION (gsl_vector, get) (v, i); status |= !GSL_COMPLEX_EQ(r,x); } gsl_test (status, NAME(gsl_vector) "_reverse" DESC " reverses elements") ; } { int status = 0; QUALIFIED_VIEW(gsl_vector,view) v1 = FUNCTION(gsl_vector, view_array) (v->data, N*stride); for (i = 0; i < N; i++) { BASE x = FUNCTION (gsl_vector, get) (&v1.vector, i*stride) ; BASE y = FUNCTION (gsl_vector, get) (v, i); if (!GSL_COMPLEX_EQ(x,y)) status = 1; }; TEST (status, "_view_array" DESC); } { int status = 0; QUALIFIED_VIEW(gsl_vector,view) v1 = FUNCTION(gsl_vector, view_array_with_stride) (v->data, stride, N*stride); for (i = 0; i < N; i++) { BASE x = FUNCTION (gsl_vector, get) (&v1.vector, i) ; BASE y = FUNCTION (gsl_vector, get) (v, i); if (!GSL_COMPLEX_EQ(x,y)) status = 1; }; TEST (status, "_view_array_with_stride" DESC); } { int status = 0; QUALIFIED_VIEW(gsl_vector,view) v1 = FUNCTION(gsl_vector, subvector) (v, N/3, N/2); for (i = 0; i < N/2; i++) { BASE x = FUNCTION (gsl_vector, get) (&v1.vector, i) ; BASE y = FUNCTION (gsl_vector, get) (v, (N/3)+i); if (!GSL_COMPLEX_EQ(x,y)) status = 1; }; TEST (status, "_view_subvector" DESC); } { int status = 0; QUALIFIED_VIEW(gsl_vector,view) v1 = FUNCTION(gsl_vector, subvector_with_stride) (v, N/5, 3, N/4); for (i = 0; i < N/4; i++) { BASE x = FUNCTION (gsl_vector, get) (&v1.vector, i) ; BASE y = FUNCTION (gsl_vector, get) (v, (N/5)+3*i); if (!GSL_COMPLEX_EQ(x,y)) status = 1; }; TEST (status, "_view_subvector_with_stride" DESC); } { int status = 0; QUALIFIED_REAL_VIEW(gsl_vector,view) vv = FUNCTION(gsl_vector, real) (v); for (i = 0; i < N; i++) { ATOMIC xr = REAL_VIEW (gsl_vector, get) (&vv.vector, i) ; BASE y = FUNCTION (gsl_vector, get) (v, i); ATOMIC yr = GSL_REAL(y); if (xr != yr) status = 1; }; TEST (status, "_real" DESC); } { int status = 0; QUALIFIED_REAL_VIEW(gsl_vector,view) vv = FUNCTION(gsl_vector, imag) (v); for (i = 0; i < N; i++) { ATOMIC xr = REAL_VIEW (gsl_vector, get) (&vv.vector, i) ; BASE y = FUNCTION (gsl_vector, get) (v, i); ATOMIC yr = GSL_IMAG(y); if (xr != yr) status = 1; }; TEST (status, "_imag" DESC); } FUNCTION (gsl_vector, free) (v0); /* free whatever is in v */ } void FUNCTION (test, ops) (size_t stride1, size_t stride2, size_t N) { size_t i; TYPE (gsl_vector) * a = FUNCTION (create, vector) (stride1, N); TYPE (gsl_vector) * b = FUNCTION (create, vector) (stride2, N); TYPE (gsl_vector) * v = FUNCTION (create, vector) (stride1, N); for (i = 0; i < N; i++) { BASE z, z1; GSL_REAL (z) = (ATOMIC) 3+i; GSL_IMAG (z) = (ATOMIC) (3+i + 10); GSL_REAL (z1) = (ATOMIC) (3 + 2*i + 5); GSL_IMAG (z1) = (ATOMIC) (3 + 2*i + 20); FUNCTION (gsl_vector, set) (a, i, z); FUNCTION (gsl_vector, set) (b, i, z1); } { int status = (FUNCTION(gsl_vector,equal) (a,b) != 0); TEST2 (status, "_equal vectors unequal"); } FUNCTION(gsl_vector, memcpy) (v, a); { int status = (FUNCTION(gsl_vector,equal) (a,v) != 1); TEST2 (status, "_equal vectors equal"); } FUNCTION(gsl_vector, add) (v, b); { int status = 0; for (i = 0; i < N; i++) { BASE r = FUNCTION(gsl_vector,get) (v,i); if (GSL_REAL(r) != (ATOMIC) (3*i+11) || GSL_IMAG(r) != (ATOMIC) (3*i+36)) status = 1; } TEST2 (status, "_add vector addition"); } { int status = 0; FUNCTION(gsl_vector, swap) (a, b); for (i = 0; i < N; i++) { BASE z, z1; BASE x = FUNCTION (gsl_vector, get) (a, i); BASE y = FUNCTION (gsl_vector, get) (b, i); GSL_REAL (z) = (ATOMIC) 3+i; GSL_IMAG (z) = (ATOMIC) (3+i + 10); GSL_REAL (z1) = (ATOMIC) (3 + 2*i + 5); GSL_IMAG (z1) = (ATOMIC) (3 + 2*i + 20); status |= !GSL_COMPLEX_EQ(z,y); status |= !GSL_COMPLEX_EQ(z1,x); } FUNCTION(gsl_vector, swap) (a, b); for (i = 0; i < N; i++) { BASE z, z1; BASE x = FUNCTION (gsl_vector, get) (a, i); BASE y = FUNCTION (gsl_vector, get) (b, i); GSL_REAL (z) = (ATOMIC) 3+i; GSL_IMAG (z) = (ATOMIC) (3+i + 10); GSL_REAL (z1) = (ATOMIC) (3 + 2*i + 5); GSL_IMAG (z1) = (ATOMIC) (3 + 2*i + 20); status |= !GSL_COMPLEX_EQ(z,x); status |= !GSL_COMPLEX_EQ(z1,y); } TEST2 (status, "_swap exchange vectors"); } FUNCTION(gsl_vector, memcpy) (v, a); FUNCTION(gsl_vector, sub) (v, b); { int status = 0; for (i = 0; i < N; i++) { BASE r = FUNCTION(gsl_vector,get) (v,i); if (GSL_REAL(r) != (-(ATOMIC)i-(ATOMIC)5) || GSL_IMAG(r) != (-(ATOMIC)i-(ATOMIC)10)) status = 1; } TEST2 (status, "_sub vector subtraction"); } FUNCTION(gsl_vector, memcpy) (v, a); FUNCTION(gsl_vector, mul) (v, b); { int status = 0; for (i = 0; i < N; i++) { BASE r = FUNCTION(gsl_vector,get) (v,i); ATOMIC real = (-35*(ATOMIC)i-275); ATOMIC imag = (173+((ATOMIC)i)*(63+4*(ATOMIC)i)); if (fabs(GSL_REAL(r) - real) > 100 * BASE_EPSILON || fabs(GSL_IMAG(r) - imag) > 100 * BASE_EPSILON) status = 1; } TEST2 (status, "_mul multiplication"); } FUNCTION(gsl_vector, memcpy) (v, a); FUNCTION(gsl_vector, div) (v, b); { int status = 0; for (i = 0; i < N; i++) { BASE r = FUNCTION(gsl_vector,get) (v,i); ATOMIC denom = 593 + ((ATOMIC)i)*(124+((ATOMIC)i)*8); ATOMIC real = (323+((ATOMIC)i)*(63+4*((ATOMIC)i))) / denom; ATOMIC imag = (35 +((ATOMIC)i)*5) / denom; if (fabs(GSL_REAL(r) - real) > 100 * BASE_EPSILON) status = 1; if (fabs(GSL_IMAG(r) - imag) > 100 * BASE_EPSILON) status = 1; } TEST2 (status, "_div division"); } { BASE alpha, beta; GSL_REAL(alpha) = (ATOMIC) 1; GSL_IMAG(alpha) = (ATOMIC) 2; GSL_REAL(beta) = (ATOMIC) 3; GSL_IMAG(beta) = (ATOMIC) 4; FUNCTION(gsl_vector, memcpy) (v, a); FUNCTION(gsl_vector, axpby) (alpha, b, beta, v); } { int status = 0; for (i = 0; i < N; i++) { BASE r = FUNCTION(gsl_vector,get) (v, i); ATOMIC real = (-3*(ATOMIC)i-81); ATOMIC imag = (90+13*(ATOMIC)i); if (fabs(GSL_REAL(r) - real) > 100 * BASE_EPSILON || fabs(GSL_IMAG(r) - imag) > 100 * BASE_EPSILON) status = 1; } TEST2 (status, "_axpby first"); } { BASE alpha, beta; GSL_REAL(alpha) = (ATOMIC) 1; GSL_IMAG(alpha) = (ATOMIC) 2; GSL_REAL(beta) = (ATOMIC) 0; GSL_IMAG(beta) = (ATOMIC) 0; FUNCTION(gsl_vector, memcpy) (v, a); FUNCTION(gsl_vector, axpby) (alpha, b, beta, v); } { int status = 0; for (i = 0; i < N; i++) { BASE r = FUNCTION(gsl_vector,get) (v, i); ATOMIC real = (-2*(ATOMIC)i-38); ATOMIC imag = (39+6*(ATOMIC)i); if (fabs(GSL_REAL(r) - real) > 100 * BASE_EPSILON || fabs(GSL_IMAG(r) - imag) > 100 * BASE_EPSILON) status = 1; } TEST2 (status, "_axpby second"); } FUNCTION(gsl_vector, free) (a); FUNCTION(gsl_vector, free) (b); FUNCTION(gsl_vector, free) (v); } void FUNCTION (test, file) (size_t stride, size_t N) { TYPE (gsl_vector) * v = FUNCTION (create, vector) (stride, N); TYPE (gsl_vector) * w = FUNCTION (create, vector) (stride, N); size_t i; #ifdef NO_INLINE char filename[] = "test_static.dat"; #else char filename[] = "test.dat"; #endif { /* write file */ FILE *f = fopen(filename, "wb"); for (i = 0; i < N; i++) { BASE x = ZERO; GSL_REAL (x) = (ATOMIC)(N - i); GSL_IMAG (x) = (ATOMIC)(N - i + 1); FUNCTION (gsl_vector, set) (v, i, x); }; FUNCTION (gsl_vector, fwrite) (f, v); fclose(f); } { /* read file */ FILE *f = fopen(filename, "rb"); FUNCTION (gsl_vector, fread) (f, w); status = 0; for (i = 0; i < N; i++) { if (w->data[2 * i * stride] != (ATOMIC) (N - i) || w->data[2 * i * stride + 1] != (ATOMIC) (N - i + 1)) status = 1; }; gsl_test (status, NAME (gsl_vector) "_write and read work"); fclose (f); } FUNCTION (gsl_vector, free) (v); FUNCTION (gsl_vector, free) (w); } #if USES_LONGDOUBLE && ! HAVE_PRINTF_LONGDOUBLE /* skip this test */ #else void FUNCTION (test, text) (size_t stride, size_t N) { TYPE (gsl_vector) * v = FUNCTION (create, vector) (stride, N); TYPE (gsl_vector) * w = FUNCTION (create, vector) (stride, N); size_t i; #ifdef NO_INLINE char filename[] = "test_static.dat"; #else char filename[] = "test.dat"; #endif { /* write file */ FILE *f = fopen(filename, "w"); for (i = 0; i < N; i++) { BASE x; GSL_REAL (x) = (ATOMIC)i; GSL_IMAG (x) = (ATOMIC)(i + 1); FUNCTION (gsl_vector, set) (v, i, x); }; FUNCTION (gsl_vector, fprintf) (f, v, OUT_FORMAT); fclose(f); } { /* read file */ FILE *f = fopen(filename, "r"); FUNCTION (gsl_vector, fscanf) (f, w); status = 0; for (i = 0; i < N; i++) { if (w->data[2 * i * stride] != (ATOMIC) i || w->data[2 * i * stride + 1] != (ATOMIC) (i + 1)) status = 1; }; gsl_test (status, NAME (gsl_vector) "_fprintf and fscanf"); fclose (f); } FUNCTION (gsl_vector, free) (v); FUNCTION (gsl_vector, free) (w); } #endif void FUNCTION (test, trap) (size_t stride, size_t N) { TYPE (gsl_vector) * vc = FUNCTION (create, vector) (stride, N); BASE z = {{(ATOMIC)1.2, (ATOMIC)3.4}}; BASE z1 = {{(ATOMIC)4.5, (ATOMIC)6.7}}; size_t j = 0; status = 0; FUNCTION (gsl_vector, set) (vc, j - 1, z); gsl_test (!status, NAME (gsl_vector) "_set traps index below lower bound"); status = 0; FUNCTION (gsl_vector, set) (vc, N + 1, z); gsl_test (!status, NAME (gsl_vector) "_set traps index above upper bound"); status = 0; FUNCTION (gsl_vector, set) (vc, N, z); gsl_test (!status, NAME (gsl_vector) "_set traps index at upper bound"); status = 0; z1 = FUNCTION (gsl_vector, get) (vc, j - 1); gsl_test (!status, NAME (gsl_vector) "_get traps index below lower bound"); gsl_test (GSL_REAL (z1) != 0, NAME (gsl_vector) "_get returns zero real below lower bound"); gsl_test (GSL_IMAG (z1) != 0, NAME (gsl_vector) "_get returns zero imag below lower bound"); status = 0; z1 = FUNCTION (gsl_vector, get) (vc, N + 1); gsl_test (!status, NAME (gsl_vector) "_get traps index above upper bound"); gsl_test (GSL_REAL (z1) != 0, NAME (gsl_vector) "_get returns zero real above upper bound"); gsl_test (GSL_IMAG (z1) != 0, NAME (gsl_vector) "_get returns zero imag above upper bound"); status = 0; z1 = FUNCTION (gsl_vector, get) (vc, N); gsl_test (!status, NAME (gsl_vector) "_get traps index at upper bound"); gsl_test (GSL_REAL (z1) != 0, NAME (gsl_vector) "_get returns zero real at upper bound"); gsl_test (GSL_IMAG (z1) != 0, NAME (gsl_vector) "_get returns zero imag at upper bound"); FUNCTION (gsl_vector, free) (vc); } void FUNCTION (test, alloc_zero_length) (void) { TYPE (gsl_vector) * b = FUNCTION (gsl_vector, alloc) (0); gsl_test (b == 0, NAME (gsl_vector) "_alloc permits zero length"); gsl_test (b->size != 0, NAME (gsl_vector) "_alloc reflects zero length"); FUNCTION (gsl_vector, free) (b); } void FUNCTION (test, calloc_zero_length) (void) { TYPE (gsl_vector) * b = FUNCTION (gsl_vector, calloc) (0); gsl_test (b == 0, NAME (gsl_vector) "_calloc permits zero length"); gsl_test (b->size != 0, NAME (gsl_vector) "_calloc reflects zero length"); FUNCTION (gsl_vector, free) (b); } gsl/vector/oper_complex_source.c0000644000175000017500000001401713536675317015462 0ustar eddedd/* vector/oper_source.c * * Copyright (C) 2008 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION(gsl_vector, add) (TYPE(gsl_vector) * a, const TYPE(gsl_vector) * b) { const size_t N = a->size; if (b->size != N) { GSL_ERROR ("vectors must have same length", GSL_EBADLEN); } else { const size_t stride_a = a->stride; const size_t stride_b = b->stride; size_t i; for (i = 0; i < N; i++) { a->data[2 * i * stride_a] += b->data[2 * i * stride_b]; a->data[2 * i * stride_a + 1] += b->data[2 * i * stride_b + 1]; } return GSL_SUCCESS; } } int FUNCTION(gsl_vector, sub) (TYPE(gsl_vector) * a, const TYPE(gsl_vector) * b) { const size_t N = a->size; if (b->size != N) { GSL_ERROR ("vectors must have same length", GSL_EBADLEN); } else { const size_t stride_a = a->stride; const size_t stride_b = b->stride; size_t i; for (i = 0; i < N; i++) { a->data[2 * i * stride_a] -= b->data[2 * i * stride_b]; a->data[2 * i * stride_a + 1] -= b->data[2 * i * stride_b + 1]; } return GSL_SUCCESS; } } int FUNCTION(gsl_vector, mul) (TYPE(gsl_vector) * a, const TYPE(gsl_vector) * b) { const size_t N = a->size; if (b->size != N) { GSL_ERROR ("vectors must have same length", GSL_EBADLEN); } else { const size_t stride_a = a->stride; const size_t stride_b = b->stride; size_t i; for (i = 0; i < N; i++) { ATOMIC ar = a->data[2 * i * stride_a]; ATOMIC ai = a->data[2 * i * stride_a + 1]; ATOMIC br = b->data[2 * i * stride_b]; ATOMIC bi = b->data[2 * i * stride_b + 1]; a->data[2 * i * stride_a] = ar * br - ai * bi; a->data[2 * i * stride_a + 1] = ar * bi + ai * br; } return GSL_SUCCESS; } } int FUNCTION(gsl_vector, div) (TYPE(gsl_vector) * a, const TYPE(gsl_vector) * b) { const size_t N = a->size; if (b->size != N) { GSL_ERROR ("vectors must have same length", GSL_EBADLEN); } else { const size_t stride_a = a->stride; const size_t stride_b = b->stride; size_t i; for (i = 0; i < N; i++) { ATOMIC ar = a->data[2 * i * stride_a]; ATOMIC ai = a->data[2 * i * stride_a + 1]; ATOMIC br = b->data[2 * i * stride_b]; ATOMIC bi = b->data[2 * i * stride_b + 1]; ATOMIC s = 1.0 / hypot(br, bi); ATOMIC sbr = s * br; ATOMIC sbi = s * bi; a->data[2 * i * stride_a] = (ar * sbr + ai * sbi) * s; a->data[2 * i * stride_a + 1] = (ai * sbr - ar * sbi) * s; } return GSL_SUCCESS; } } int FUNCTION(gsl_vector, scale) (TYPE(gsl_vector) * a, const BASE x) { #if defined(BASE_GSL_COMPLEX) gsl_blas_zscal(x, a); #elif defined(BASE_GSL_COMPLEX_FLOAT) gsl_blas_cscal(x, a); #else const size_t N = a->size; const size_t stride = a->stride; size_t i; ATOMIC xr = GSL_REAL(x); ATOMIC xi = GSL_IMAG(x); for (i = 0; i < N; i++) { ATOMIC ar = a->data[2 * i * stride]; ATOMIC ai = a->data[2 * i * stride + 1]; a->data[2 * i * stride] = ar * xr - ai * xi; a->data[2 * i * stride + 1] = ar * xi + ai * xr; } #endif return GSL_SUCCESS; } int FUNCTION(gsl_vector, add_constant) (TYPE(gsl_vector) * a, const BASE x) { const size_t N = a->size; const size_t stride = a->stride; size_t i; ATOMIC xr = GSL_REAL(x); ATOMIC xi = GSL_IMAG(x); for (i = 0; i < N; i++) { a->data[2 * i * stride] += xr; a->data[2 * i * stride + 1] += xi; } return GSL_SUCCESS; } int FUNCTION (gsl_vector, axpby) (const BASE alpha, const TYPE (gsl_vector) * x, const BASE beta, TYPE (gsl_vector) * y) { const size_t x_size = x->size; if (x_size != y->size) { GSL_ERROR ("vector lengths are not equal", GSL_EBADLEN); } else if (GSL_REAL(beta) == (ATOMIC) 0 && GSL_IMAG(beta) == (ATOMIC) 0) { const size_t x_stride = x->stride; const size_t y_stride = y->stride; const ATOMIC ar = GSL_REAL(alpha); const ATOMIC ai = GSL_IMAG(alpha); size_t j; for (j = 0; j < x_size; j++) { ATOMIC xr = x->data[2 * j * x_stride]; ATOMIC xi = x->data[2 * j * x_stride + 1]; y->data[2 * j * y_stride] = ar * xr - ai * xi; y->data[2 * j * y_stride + 1] = ai * xr + ar * xi; } return GSL_SUCCESS; } else { const size_t x_stride = x->stride; const size_t y_stride = y->stride; const ATOMIC ar = GSL_REAL(alpha); const ATOMIC ai = GSL_IMAG(alpha); const ATOMIC br = GSL_REAL(beta); const ATOMIC bi = GSL_IMAG(beta); size_t j; for (j = 0; j < x_size; j++) { ATOMIC xr = x->data[2 * j * x_stride]; ATOMIC xi = x->data[2 * j * x_stride + 1]; ATOMIC yr = y->data[2 * j * y_stride]; ATOMIC yi = y->data[2 * j * y_stride + 1]; y->data[2 * j * y_stride] = ar * xr - ai * xi + br * yr - bi * yi; y->data[2 * j * y_stride + 1] = ai * xr + ar * xi + bi * yr + br * yi; } return GSL_SUCCESS; } } gsl/vector/ChangeLog0000644000175000017500000001745713536674414013024 0ustar eddedd2017-01-07 Rhys Ulerich * init_source.c: permit zero-length vectors (#49988) * subvector_source.c: permit zero-length subvectors (#49988) * test.c: change trap into alloc_zero_length, add calloc tests * test_complex_source.c: zero-length for alloc and calloc * test_source.c: zero-length for alloc and calloc * view_source.c: permit zero-length views * Audit range checking regarding n - 1 underflow for n = 0 2010-03-12 Brian Gough * prop_source.c (FUNCTION): added a function to test if two vectors are equal 2009-11-14 Brian Gough * gsl_vector_complex.h (GSL_VECTOR_COMPLEX): added missing dereference 2009-07-09 Brian Gough * init_source.c (FUNCTION): handle NULL argument in free 2008-09-27 Brian Gough * gsl_vector_complex_double.h: added missing functions isnonneg, add, sub, mul, div, scale, add_constant 2008-07-03 Brian Gough * gsl_vector.h: use new inline declarations in all header files * vector.c: compile inline functions from header here * vector_source.c: removed * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2007-08-21 Brian Gough * prop_source.c (FUNCTION): added gsl_vector_isnonneg 2007-02-17 Brian Gough * test_source.c (FUNCTION): avoid running tests on char, because it can be unsigned 2007-01-26 Brian Gough * minmax_source.c: added support for NaNs 2006-10-31 Brian Gough * prop_source.c: added functions gsl_vector_ispos, gsl_vector_isneg 2004-09-13 Brian Gough * swap_source.c (gsl_vector_swap): fixed bug where stride of first argument v was used for second argument w * test.c: improved test coverage 2003-01-01 Brian Gough * gsl_vector_complex_float.h (gsl_vector_complex_float_get): removed const from zero * vector_source.c (FUNCTION): removed const from zero Sun Jan 27 22:29:54 2002 Brian Gough * test.c: ensure that range check is working when running the tests Fri Sep 14 19:13:20 2001 Brian Gough * view.c (USE_QUALIFIER): added missing qualified types Thu Aug 23 13:22:29 2001 Brian Gough * gsl_vector_complex_float.h: added const to second argument of _ptr functions * gsl_vector.h: changed definition of gsl_vector_const_view to compile with Sun's cc Fri Aug 3 14:11:51 2001 Brian Gough * added gsl_vector_ptr and gsl_vector_const_ptr functions Mon Jul 16 21:28:37 2001 Brian Gough * reim_source.c: initialized views to null Fri Jul 13 21:29:06 2001 Brian Gough * changed views to be structs and used casts to initialize them Mon Jul 2 12:34:43 2001 Brian Gough * view.h: provide macros for initializing null vectors and views Sun Jul 1 22:38:30 2001 Brian Gough * introduction of new-style vector views * view_source.c: changed order of arguments to be consistent with rest of library for _with_stride functions Mon May 14 22:43:18 2001 Brian Gough * vector_source.c (FUNCTION): removed unnecessary inline from static function definition Tue Mar 27 15:12:07 2001 Brian Gough * view_source.c: split view functions into a separate file Sat Sep 9 16:45:15 2000 Brian Gough * added an owner field for indicating whether the underlying memory is owned by the vector. Changed the meaning of the block field to always be the address of the underlying block, even for subviews (previously the block field was set to NULL in this case). Sun Jul 16 10:39:39 2000 Brian Gough * init_source.c (FUNCTION): added gsl_vector_view function for creating a vector view of an ordinary C array Sat Jul 15 21:44:49 2000 Brian Gough * changed GSL_EDOM to GSL_EINVAL for invalid vector size arguments Sat Jun 17 15:37:57 2000 Brian Gough * fixed up missing MULTIPLICITY factors in various functions Sun May 28 12:25:31 2000 Brian Gough * test_complex_source.c (FUNCTION): use binary mode "b" when reading and writing binary files * test_source.c (FUNCTION): use binary mode "b" when reading and writing binary files Fri May 5 10:57:16 2000 Brian Gough * oper_source.c (FUNCTION): changed functions gsl_vector_mul_elements and gsl_vector_div_elements to gsl_vector_mul and gsl_vector_div since the _elements suffix is redundant for vectors (unlike matrices). * oper.c: added simple arithmetic operations (+,-,*,/,scale,+const) Wed Apr 26 14:17:14 2000 Brian Gough * prop_source.c (FUNCTION): added const to argument of gsl_vector_isnull * init_source.c (FUNCTION): added gsl_vector_set_basis(v,i) to set v to basis vector v = e_i (0,0,...,1,...,0) Tue Apr 25 11:31:38 2000 Brian Gough * test_source.c (FUNCTION): modified the tests so that they work more cleanly with checkergcc when using long doubles. The trick seems to be to avoid having any long doubles on the stack. Sat Apr 22 15:09:44 2000 Brian Gough * init_source.c (FUNCTION): separated subvector functions into gsl_vector_subvector and gsl_vector_subvector_with_stride Sat Mar 25 20:23:58 2000 Brian Gough * swap_source.c (FUNCTION): renames gsl_vector_swap to gsl_vector_swap_elements Tue Mar 21 21:15:10 2000 Brian Gough * vector_source.c (FUNCTION): added set_zero function Thu Feb 24 16:19:55 2000 Brian Gough * added missing prototypes for gsl_vector_complex_..._reverse Fri Feb 18 20:48:32 2000 Brian Gough * swap_source.c (FUNCTION): added gsl_vector_reverse function for flipping the order of a vector * copy_source.c: renamed gsl_vector_copy to gsl_vector_cpy since it acts like memcpy (dest, src) not 'cp(copy) from to' Thu Dec 2 20:39:02 1999 Brian Gough * init_source.c: fixed bug, block element needs to be null in gsl_vector_alloc_from_vector to maintain correct ownership, added gsl_vector_view_from_vector (Thanks to Fabrice Rossi) Tue Oct 19 14:13:14 1999 Brian Gough * added gsl_vector_swap function to exchange elements Fri Oct 1 15:47:45 1999 Brian Gough * removed support for gsl_vector_ptr. Use set/get instead. * now uses separate block directory for memory management Mon Mar 1 19:38:16 1999 Brian Gough * test_source.c: added tests for gsl_vector_ptr with and without stride * gsl_vector_char.h: added missing code to gsl_vector_char_ptr for stride in char case. Sun Nov 8 18:39:40 1998 Brian Gough * test_io.c, test_complex_io.c: split out the printf/scanf routines since these aren't supported on all platforms for long double Fri Jul 24 19:44:52 1998 Brian Gough * added parent pointer in structs, to determine whether or not we're allowed to free the memory pointed to by * data. Wed Jun 10 19:13:35 1998 Brian Gough * init_source.c: added a cast for each malloc Sun Apr 26 14:10:06 1998 Brian Gough * added support for complex vectors Mon Apr 6 15:06:38 1998 Brian Gough * make range checking the default, you have to define GSL_RANGE_CHECK_OFF to turn it off gsl/vector/init_source.c0000644000175000017500000001143713536674414013731 0ustar eddedd/* vector/init_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ TYPE (gsl_vector) * FUNCTION (gsl_vector, alloc) (const size_t n) { TYPE (gsl_block) * block; TYPE (gsl_vector) * v; v = (TYPE (gsl_vector) *) malloc (sizeof (TYPE (gsl_vector))); if (v == 0) { GSL_ERROR_VAL ("failed to allocate space for vector struct", GSL_ENOMEM, 0); } block = FUNCTION (gsl_block,alloc) (n); if (block == 0) { free (v) ; GSL_ERROR_VAL ("failed to allocate space for block", GSL_ENOMEM, 0); } v->data = block->data ; v->size = n; v->stride = 1; v->block = block; v->owner = 1; return v; } TYPE (gsl_vector) * FUNCTION (gsl_vector, calloc) (const size_t n) { size_t i; TYPE (gsl_vector) * v = FUNCTION (gsl_vector, alloc) (n); if (v == 0) return 0; /* initialize vector to zero; memset takes care of the padding bytes */ memset(v->data, 0, MULTIPLICITY * n * sizeof(ATOMIC)); for (i = 0; i < MULTIPLICITY * n; i++) { v->data[i] = 0; } return v; } TYPE (gsl_vector) * FUNCTION (gsl_vector, alloc_from_block) (TYPE(gsl_block) * block, const size_t offset, const size_t n, const size_t stride) { TYPE (gsl_vector) * v; if (stride == 0) { GSL_ERROR_VAL ("stride must be positive integer", GSL_EINVAL, 0); } if (block->size <= offset + (n > 0 ? n - 1 : 0) * stride) { GSL_ERROR_VAL ("vector would extend past end of block", GSL_EINVAL, 0); } v = (TYPE (gsl_vector) *) malloc (sizeof (TYPE (gsl_vector))); if (v == 0) { GSL_ERROR_VAL ("failed to allocate space for vector struct", GSL_ENOMEM, 0); } v->data = block->data + MULTIPLICITY * offset ; v->size = n; v->stride = stride; v->block = block; v->owner = 0; return v; } TYPE (gsl_vector) * FUNCTION (gsl_vector, alloc_from_vector) (TYPE(gsl_vector) * w, const size_t offset, const size_t n, const size_t stride) { TYPE (gsl_vector) * v; if (stride == 0) { GSL_ERROR_VAL ("stride must be positive integer", GSL_EINVAL, 0); } if (offset + (n > 0 ? n - 1 : 0) * stride >= w->size) { GSL_ERROR_VAL ("vector would extend past end of block", GSL_EINVAL, 0); } v = (TYPE (gsl_vector) *) malloc (sizeof (TYPE (gsl_vector))); if (v == 0) { GSL_ERROR_VAL ("failed to allocate space for vector struct", GSL_ENOMEM, 0); } v->data = w->data + MULTIPLICITY * w->stride * offset ; v->size = n; v->stride = stride * w->stride; v->block = w->block; v->owner = 0; return v; } void FUNCTION (gsl_vector, free) (TYPE (gsl_vector) * v) { RETURN_IF_NULL (v); if (v->owner) { FUNCTION(gsl_block, free) (v->block) ; } free (v); } void FUNCTION (gsl_vector, set_all) (TYPE (gsl_vector) * v, BASE x) { ATOMIC * const data = v->data; const size_t n = v->size; const size_t stride = v->stride; size_t i; for (i = 0; i < n; i++) { *(BASE *) (data + MULTIPLICITY * i * stride) = x; } } void FUNCTION (gsl_vector, set_zero) (TYPE (gsl_vector) * v) { ATOMIC * const data = v->data; const size_t n = v->size; const size_t stride = v->stride; const BASE zero = ZERO ; size_t i; for (i = 0; i < n; i++) { *(BASE *) (data + MULTIPLICITY * i * stride) = zero; } } int FUNCTION (gsl_vector, set_basis) (TYPE (gsl_vector) * v, size_t i) { ATOMIC * const data = v->data; const size_t n = v->size; const size_t stride = v->stride; const BASE zero = ZERO ; const BASE one = ONE; size_t k; if (i >= n) { GSL_ERROR ("index out of range", GSL_EINVAL); } for (k = 0; k < n; k++) { *(BASE *) (data + MULTIPLICITY * k * stride) = zero; } *(BASE *) (data + MULTIPLICITY * i * stride) = one; return GSL_SUCCESS; } gsl/vector/Makefile.am0000644000175000017500000000253713536675317013302 0ustar eddeddnoinst_LTLIBRARIES = libgslvector.la check_PROGRAMS = test test_static pkginclude_HEADERS = gsl_vector.h gsl_vector_char.h gsl_vector_complex.h gsl_vector_complex_double.h gsl_vector_complex_float.h gsl_vector_complex_long_double.h gsl_vector_double.h gsl_vector_float.h gsl_vector_int.h gsl_vector_long.h gsl_vector_long_double.h gsl_vector_short.h gsl_vector_uchar.h gsl_vector_uint.h gsl_vector_ulong.h gsl_vector_ushort.h AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_static_LDADD = libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c test_static_SOURCES = test_static.c CLEANFILES = test.txt test.dat test_static.dat noinst_HEADERS = init_source.c file_source.c copy_source.c swap_source.c prop_source.c test_complex_source.c test_source.c minmax_source.c oper_source.c oper_complex_source.c reim_source.c subvector_source.c view_source.c libgslvector_la_SOURCES = init.c file.c vector.c copy.c swap.c prop.c minmax.c oper.c reim.c subvector.c view.c view.h gsl/vector/reim_source.c0000644000175000017500000000323213536674414013714 0ustar eddedd/* vector/reim_source.c * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ QUALIFIED_REAL_VIEW(_gsl_vector, view) FUNCTION(gsl_vector, real) (QUALIFIED_TYPE(gsl_vector) * v) { REAL_TYPE(gsl_vector) s = NULL_VECTOR; s.data = v->data; s.size = v->size; s.stride = MULTIPLICITY * v->stride; s.block = 0; /* FIXME: should be v->block, but cannot point to block of different type */ s.owner = 0; { QUALIFIED_REAL_VIEW(_gsl_vector,view) view = NULL_VECTOR_VIEW; view.vector = s; return view; } } QUALIFIED_REAL_VIEW(_gsl_vector, view) FUNCTION(gsl_vector, imag) (QUALIFIED_TYPE(gsl_vector) * v) { REAL_TYPE(gsl_vector) s = NULL_VECTOR; s.data = v->data + 1; s.size = v->size; s.stride = MULTIPLICITY * v->stride; s.block = 0; /* FIXME: cannot point to block of different type */ s.owner = 0; { QUALIFIED_REAL_VIEW(_gsl_vector,view) view = NULL_VECTOR_VIEW; view.vector = s; return view; } } gsl/vector/minmax_source.c0000644000175000017500000001007113536674414014250 0ustar eddedd/* vector/minmax_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ BASE FUNCTION(gsl_vector,max) (const TYPE(gsl_vector) * v) { /* finds the largest element of a vector */ const size_t N = v->size ; const size_t stride = v->stride ; BASE max = v->data[0 * stride]; size_t i; for (i = 0; i < N; i++) { BASE x = v->data[i*stride]; if (x > max) max = x; #ifdef FP if (isnan (x)) return x; #endif } return max; } BASE FUNCTION(gsl_vector,min) (const TYPE(gsl_vector) * v) { /* finds the smallest element of a vector */ const size_t N = v->size ; const size_t stride = v->stride ; BASE min = v->data[0 * stride]; size_t i; for (i = 0; i < N; i++) { BASE x = v->data[i*stride]; if (x < min) min = x; #ifdef FP if (isnan (x)) return x; #endif } return min; } void FUNCTION(gsl_vector,minmax) (const TYPE(gsl_vector) * v, BASE * min_out, BASE * max_out) { /* finds the smallest and largest elements of a vector */ const size_t N = v->size ; const size_t stride = v->stride ; BASE max = v->data[0 * stride]; BASE min = v->data[0 * stride]; size_t i; for (i = 0; i < N; i++) { BASE x = v->data[i*stride]; if (x < min) { min = x; } if (x > max) { max = x; } #ifdef FP if (isnan (x)) { min = x; max = x; break; } #endif } *min_out = min; *max_out = max; } size_t FUNCTION(gsl_vector,max_index) (const TYPE(gsl_vector) * v) { /* finds the largest element of a vector */ const size_t N = v->size ; const size_t stride = v->stride ; BASE max = v->data[0 * stride]; size_t imax = 0; size_t i; for (i = 0; i < N; i++) { BASE x = v->data[i*stride]; if (x > max) { max = x; imax = i; } #ifdef FP if (isnan (x)) { return i; } #endif } return imax; } size_t FUNCTION(gsl_vector,min_index) (const TYPE(gsl_vector) * v) { /* finds the smallest element of a vector */ const size_t N = v->size ; const size_t stride = v->stride ; BASE min = v->data[0 * stride]; size_t imin = 0; size_t i; for (i = 0; i < N; i++) { BASE x = v->data[i*stride]; if (x < min) { min = x; imin = i; } #ifdef FP if (isnan (x)) { return i; } #endif } return imin; } void FUNCTION(gsl_vector,minmax_index) (const TYPE(gsl_vector) * v, size_t * imin_out, size_t * imax_out) { /* finds the smallest and largest elements of a vector */ const size_t N = v->size ; const size_t stride = v->stride ; size_t imin = 0, imax = 0; BASE max = v->data[0 * stride]; BASE min = v->data[0 * stride]; size_t i; for (i = 0; i < N; i++) { BASE x = v->data[i*stride]; if (x < min) { min = x; imin = i; } if (x > max) { max = x; imax = i; } #ifdef FP if (isnan (x)) { imin = i; imax = i; break; } #endif } *imin_out = imin; *imax_out = imax; } gsl/vector/gsl_vector_float.h0000664000175000017500000001675714057135461014754 0ustar eddedd/* vector/gsl_vector_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_VECTOR_FLOAT_H__ #define __GSL_VECTOR_FLOAT_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size; size_t stride; float *data; gsl_block_float *block; int owner; } gsl_vector_float; typedef struct { gsl_vector_float vector; } _gsl_vector_float_view; typedef _gsl_vector_float_view gsl_vector_float_view; typedef struct { gsl_vector_float vector; } _gsl_vector_float_const_view; typedef const _gsl_vector_float_const_view gsl_vector_float_const_view; /* Allocation */ gsl_vector_float *gsl_vector_float_alloc (const size_t n); gsl_vector_float *gsl_vector_float_calloc (const size_t n); gsl_vector_float *gsl_vector_float_alloc_from_block (gsl_block_float * b, const size_t offset, const size_t n, const size_t stride); gsl_vector_float *gsl_vector_float_alloc_from_vector (gsl_vector_float * v, const size_t offset, const size_t n, const size_t stride); void gsl_vector_float_free (gsl_vector_float * v); /* Views */ _gsl_vector_float_view gsl_vector_float_view_array (float *v, size_t n); _gsl_vector_float_view gsl_vector_float_view_array_with_stride (float *base, size_t stride, size_t n); _gsl_vector_float_const_view gsl_vector_float_const_view_array (const float *v, size_t n); _gsl_vector_float_const_view gsl_vector_float_const_view_array_with_stride (const float *base, size_t stride, size_t n); _gsl_vector_float_view gsl_vector_float_subvector (gsl_vector_float *v, size_t i, size_t n); _gsl_vector_float_view gsl_vector_float_subvector_with_stride (gsl_vector_float *v, size_t i, size_t stride, size_t n); _gsl_vector_float_const_view gsl_vector_float_const_subvector (const gsl_vector_float *v, size_t i, size_t n); _gsl_vector_float_const_view gsl_vector_float_const_subvector_with_stride (const gsl_vector_float *v, size_t i, size_t stride, size_t n); /* Operations */ void gsl_vector_float_set_zero (gsl_vector_float * v); void gsl_vector_float_set_all (gsl_vector_float * v, float x); int gsl_vector_float_set_basis (gsl_vector_float * v, size_t i); int gsl_vector_float_fread (FILE * stream, gsl_vector_float * v); int gsl_vector_float_fwrite (FILE * stream, const gsl_vector_float * v); int gsl_vector_float_fscanf (FILE * stream, gsl_vector_float * v); int gsl_vector_float_fprintf (FILE * stream, const gsl_vector_float * v, const char *format); int gsl_vector_float_memcpy (gsl_vector_float * dest, const gsl_vector_float * src); int gsl_vector_float_reverse (gsl_vector_float * v); int gsl_vector_float_swap (gsl_vector_float * v, gsl_vector_float * w); int gsl_vector_float_swap_elements (gsl_vector_float * v, const size_t i, const size_t j); float gsl_vector_float_max (const gsl_vector_float * v); float gsl_vector_float_min (const gsl_vector_float * v); void gsl_vector_float_minmax (const gsl_vector_float * v, float * min_out, float * max_out); size_t gsl_vector_float_max_index (const gsl_vector_float * v); size_t gsl_vector_float_min_index (const gsl_vector_float * v); void gsl_vector_float_minmax_index (const gsl_vector_float * v, size_t * imin, size_t * imax); int gsl_vector_float_add (gsl_vector_float * a, const gsl_vector_float * b); int gsl_vector_float_sub (gsl_vector_float * a, const gsl_vector_float * b); int gsl_vector_float_mul (gsl_vector_float * a, const gsl_vector_float * b); int gsl_vector_float_div (gsl_vector_float * a, const gsl_vector_float * b); int gsl_vector_float_scale (gsl_vector_float * a, const float x); int gsl_vector_float_add_constant (gsl_vector_float * a, const float x); int gsl_vector_float_axpby (const float alpha, const gsl_vector_float * x, const float beta, gsl_vector_float * y); float gsl_vector_float_sum (const gsl_vector_float * a); int gsl_vector_float_equal (const gsl_vector_float * u, const gsl_vector_float * v); int gsl_vector_float_isnull (const gsl_vector_float * v); int gsl_vector_float_ispos (const gsl_vector_float * v); int gsl_vector_float_isneg (const gsl_vector_float * v); int gsl_vector_float_isnonneg (const gsl_vector_float * v); INLINE_DECL float gsl_vector_float_get (const gsl_vector_float * v, const size_t i); INLINE_DECL void gsl_vector_float_set (gsl_vector_float * v, const size_t i, float x); INLINE_DECL float * gsl_vector_float_ptr (gsl_vector_float * v, const size_t i); INLINE_DECL const float * gsl_vector_float_const_ptr (const gsl_vector_float * v, const size_t i); #ifdef HAVE_INLINE INLINE_FUN float gsl_vector_float_get (const gsl_vector_float * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VAL ("index out of range", GSL_EINVAL, 0); } #endif return v->data[i * v->stride]; } INLINE_FUN void gsl_vector_float_set (gsl_vector_float * v, const size_t i, float x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VOID ("index out of range", GSL_EINVAL); } #endif v->data[i * v->stride] = x; } INLINE_FUN float * gsl_vector_float_ptr (gsl_vector_float * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (float *) (v->data + i * v->stride); } INLINE_FUN const float * gsl_vector_float_const_ptr (const gsl_vector_float * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (const float *) (v->data + i * v->stride); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_VECTOR_FLOAT_H__ */ gsl/vector/gsl_vector_char.h0000664000175000017500000001652314057135461014553 0ustar eddedd/* vector/gsl_vector_char.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_VECTOR_CHAR_H__ #define __GSL_VECTOR_CHAR_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size; size_t stride; char *data; gsl_block_char *block; int owner; } gsl_vector_char; typedef struct { gsl_vector_char vector; } _gsl_vector_char_view; typedef _gsl_vector_char_view gsl_vector_char_view; typedef struct { gsl_vector_char vector; } _gsl_vector_char_const_view; typedef const _gsl_vector_char_const_view gsl_vector_char_const_view; /* Allocation */ gsl_vector_char *gsl_vector_char_alloc (const size_t n); gsl_vector_char *gsl_vector_char_calloc (const size_t n); gsl_vector_char *gsl_vector_char_alloc_from_block (gsl_block_char * b, const size_t offset, const size_t n, const size_t stride); gsl_vector_char *gsl_vector_char_alloc_from_vector (gsl_vector_char * v, const size_t offset, const size_t n, const size_t stride); void gsl_vector_char_free (gsl_vector_char * v); /* Views */ _gsl_vector_char_view gsl_vector_char_view_array (char *v, size_t n); _gsl_vector_char_view gsl_vector_char_view_array_with_stride (char *base, size_t stride, size_t n); _gsl_vector_char_const_view gsl_vector_char_const_view_array (const char *v, size_t n); _gsl_vector_char_const_view gsl_vector_char_const_view_array_with_stride (const char *base, size_t stride, size_t n); _gsl_vector_char_view gsl_vector_char_subvector (gsl_vector_char *v, size_t i, size_t n); _gsl_vector_char_view gsl_vector_char_subvector_with_stride (gsl_vector_char *v, size_t i, size_t stride, size_t n); _gsl_vector_char_const_view gsl_vector_char_const_subvector (const gsl_vector_char *v, size_t i, size_t n); _gsl_vector_char_const_view gsl_vector_char_const_subvector_with_stride (const gsl_vector_char *v, size_t i, size_t stride, size_t n); /* Operations */ void gsl_vector_char_set_zero (gsl_vector_char * v); void gsl_vector_char_set_all (gsl_vector_char * v, char x); int gsl_vector_char_set_basis (gsl_vector_char * v, size_t i); int gsl_vector_char_fread (FILE * stream, gsl_vector_char * v); int gsl_vector_char_fwrite (FILE * stream, const gsl_vector_char * v); int gsl_vector_char_fscanf (FILE * stream, gsl_vector_char * v); int gsl_vector_char_fprintf (FILE * stream, const gsl_vector_char * v, const char *format); int gsl_vector_char_memcpy (gsl_vector_char * dest, const gsl_vector_char * src); int gsl_vector_char_reverse (gsl_vector_char * v); int gsl_vector_char_swap (gsl_vector_char * v, gsl_vector_char * w); int gsl_vector_char_swap_elements (gsl_vector_char * v, const size_t i, const size_t j); char gsl_vector_char_max (const gsl_vector_char * v); char gsl_vector_char_min (const gsl_vector_char * v); void gsl_vector_char_minmax (const gsl_vector_char * v, char * min_out, char * max_out); size_t gsl_vector_char_max_index (const gsl_vector_char * v); size_t gsl_vector_char_min_index (const gsl_vector_char * v); void gsl_vector_char_minmax_index (const gsl_vector_char * v, size_t * imin, size_t * imax); int gsl_vector_char_add (gsl_vector_char * a, const gsl_vector_char * b); int gsl_vector_char_sub (gsl_vector_char * a, const gsl_vector_char * b); int gsl_vector_char_mul (gsl_vector_char * a, const gsl_vector_char * b); int gsl_vector_char_div (gsl_vector_char * a, const gsl_vector_char * b); int gsl_vector_char_scale (gsl_vector_char * a, const char x); int gsl_vector_char_add_constant (gsl_vector_char * a, const char x); int gsl_vector_char_axpby (const char alpha, const gsl_vector_char * x, const char beta, gsl_vector_char * y); char gsl_vector_char_sum (const gsl_vector_char * a); int gsl_vector_char_equal (const gsl_vector_char * u, const gsl_vector_char * v); int gsl_vector_char_isnull (const gsl_vector_char * v); int gsl_vector_char_ispos (const gsl_vector_char * v); int gsl_vector_char_isneg (const gsl_vector_char * v); int gsl_vector_char_isnonneg (const gsl_vector_char * v); INLINE_DECL char gsl_vector_char_get (const gsl_vector_char * v, const size_t i); INLINE_DECL void gsl_vector_char_set (gsl_vector_char * v, const size_t i, char x); INLINE_DECL char * gsl_vector_char_ptr (gsl_vector_char * v, const size_t i); INLINE_DECL const char * gsl_vector_char_const_ptr (const gsl_vector_char * v, const size_t i); #ifdef HAVE_INLINE INLINE_FUN char gsl_vector_char_get (const gsl_vector_char * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VAL ("index out of range", GSL_EINVAL, 0); } #endif return v->data[i * v->stride]; } INLINE_FUN void gsl_vector_char_set (gsl_vector_char * v, const size_t i, char x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VOID ("index out of range", GSL_EINVAL); } #endif v->data[i * v->stride] = x; } INLINE_FUN char * gsl_vector_char_ptr (gsl_vector_char * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (char *) (v->data + i * v->stride); } INLINE_FUN const char * gsl_vector_char_const_ptr (const gsl_vector_char * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (const char *) (v->data + i * v->stride); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_VECTOR_CHAR_H__ */ gsl/vector/reim.c0000644000175000017500000000167013536674414012340 0ustar eddedd#include #include #include #include "view.h" #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "reim_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "reim_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "reim_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define USE_QUALIFIER #define QUALIFIER const #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "reim_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "reim_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "reim_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT gsl/vector/subvector.c0000644000175000017500000000713613536674414013423 0ustar eddedd#include #include #include #include "view.h" #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_CHAR #define USE_QUALIFIER #define QUALIFIER const #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "subvector_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/vector/gsl_vector_long_double.h0000664000175000017500000002062714057135461016127 0ustar eddedd/* vector/gsl_vector_long_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_VECTOR_LONG_DOUBLE_H__ #define __GSL_VECTOR_LONG_DOUBLE_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size; size_t stride; long double *data; gsl_block_long_double *block; int owner; } gsl_vector_long_double; typedef struct { gsl_vector_long_double vector; } _gsl_vector_long_double_view; typedef _gsl_vector_long_double_view gsl_vector_long_double_view; typedef struct { gsl_vector_long_double vector; } _gsl_vector_long_double_const_view; typedef const _gsl_vector_long_double_const_view gsl_vector_long_double_const_view; /* Allocation */ gsl_vector_long_double *gsl_vector_long_double_alloc (const size_t n); gsl_vector_long_double *gsl_vector_long_double_calloc (const size_t n); gsl_vector_long_double *gsl_vector_long_double_alloc_from_block (gsl_block_long_double * b, const size_t offset, const size_t n, const size_t stride); gsl_vector_long_double *gsl_vector_long_double_alloc_from_vector (gsl_vector_long_double * v, const size_t offset, const size_t n, const size_t stride); void gsl_vector_long_double_free (gsl_vector_long_double * v); /* Views */ _gsl_vector_long_double_view gsl_vector_long_double_view_array (long double *v, size_t n); _gsl_vector_long_double_view gsl_vector_long_double_view_array_with_stride (long double *base, size_t stride, size_t n); _gsl_vector_long_double_const_view gsl_vector_long_double_const_view_array (const long double *v, size_t n); _gsl_vector_long_double_const_view gsl_vector_long_double_const_view_array_with_stride (const long double *base, size_t stride, size_t n); _gsl_vector_long_double_view gsl_vector_long_double_subvector (gsl_vector_long_double *v, size_t i, size_t n); _gsl_vector_long_double_view gsl_vector_long_double_subvector_with_stride (gsl_vector_long_double *v, size_t i, size_t stride, size_t n); _gsl_vector_long_double_const_view gsl_vector_long_double_const_subvector (const gsl_vector_long_double *v, size_t i, size_t n); _gsl_vector_long_double_const_view gsl_vector_long_double_const_subvector_with_stride (const gsl_vector_long_double *v, size_t i, size_t stride, size_t n); /* Operations */ void gsl_vector_long_double_set_zero (gsl_vector_long_double * v); void gsl_vector_long_double_set_all (gsl_vector_long_double * v, long double x); int gsl_vector_long_double_set_basis (gsl_vector_long_double * v, size_t i); int gsl_vector_long_double_fread (FILE * stream, gsl_vector_long_double * v); int gsl_vector_long_double_fwrite (FILE * stream, const gsl_vector_long_double * v); int gsl_vector_long_double_fscanf (FILE * stream, gsl_vector_long_double * v); int gsl_vector_long_double_fprintf (FILE * stream, const gsl_vector_long_double * v, const char *format); int gsl_vector_long_double_memcpy (gsl_vector_long_double * dest, const gsl_vector_long_double * src); int gsl_vector_long_double_reverse (gsl_vector_long_double * v); int gsl_vector_long_double_swap (gsl_vector_long_double * v, gsl_vector_long_double * w); int gsl_vector_long_double_swap_elements (gsl_vector_long_double * v, const size_t i, const size_t j); long double gsl_vector_long_double_max (const gsl_vector_long_double * v); long double gsl_vector_long_double_min (const gsl_vector_long_double * v); void gsl_vector_long_double_minmax (const gsl_vector_long_double * v, long double * min_out, long double * max_out); size_t gsl_vector_long_double_max_index (const gsl_vector_long_double * v); size_t gsl_vector_long_double_min_index (const gsl_vector_long_double * v); void gsl_vector_long_double_minmax_index (const gsl_vector_long_double * v, size_t * imin, size_t * imax); int gsl_vector_long_double_add (gsl_vector_long_double * a, const gsl_vector_long_double * b); int gsl_vector_long_double_sub (gsl_vector_long_double * a, const gsl_vector_long_double * b); int gsl_vector_long_double_mul (gsl_vector_long_double * a, const gsl_vector_long_double * b); int gsl_vector_long_double_div (gsl_vector_long_double * a, const gsl_vector_long_double * b); int gsl_vector_long_double_scale (gsl_vector_long_double * a, const long double x); int gsl_vector_long_double_add_constant (gsl_vector_long_double * a, const long double x); int gsl_vector_long_double_axpby (const long double alpha, const gsl_vector_long_double * x, const long double beta, gsl_vector_long_double * y); long double gsl_vector_long_double_sum (const gsl_vector_long_double * a); int gsl_vector_long_double_equal (const gsl_vector_long_double * u, const gsl_vector_long_double * v); int gsl_vector_long_double_isnull (const gsl_vector_long_double * v); int gsl_vector_long_double_ispos (const gsl_vector_long_double * v); int gsl_vector_long_double_isneg (const gsl_vector_long_double * v); int gsl_vector_long_double_isnonneg (const gsl_vector_long_double * v); INLINE_DECL long double gsl_vector_long_double_get (const gsl_vector_long_double * v, const size_t i); INLINE_DECL void gsl_vector_long_double_set (gsl_vector_long_double * v, const size_t i, long double x); INLINE_DECL long double * gsl_vector_long_double_ptr (gsl_vector_long_double * v, const size_t i); INLINE_DECL const long double * gsl_vector_long_double_const_ptr (const gsl_vector_long_double * v, const size_t i); #ifdef HAVE_INLINE INLINE_FUN long double gsl_vector_long_double_get (const gsl_vector_long_double * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VAL ("index out of range", GSL_EINVAL, 0); } #endif return v->data[i * v->stride]; } INLINE_FUN void gsl_vector_long_double_set (gsl_vector_long_double * v, const size_t i, long double x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VOID ("index out of range", GSL_EINVAL); } #endif v->data[i * v->stride] = x; } INLINE_FUN long double * gsl_vector_long_double_ptr (gsl_vector_long_double * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (long double *) (v->data + i * v->stride); } INLINE_FUN const long double * gsl_vector_long_double_const_ptr (const gsl_vector_long_double * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (const long double *) (v->data + i * v->stride); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_VECTOR_LONG_DOUBLE_H__ */ gsl/vector/gsl_vector_complex_double.h0000644000175000017500000002032213536675317016637 0ustar eddedd/* vector/gsl_vector_complex_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_VECTOR_COMPLEX_DOUBLE_H__ #define __GSL_VECTOR_COMPLEX_DOUBLE_H__ #include #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size; size_t stride; double *data; gsl_block_complex *block; int owner; } gsl_vector_complex; typedef struct { gsl_vector_complex vector; } _gsl_vector_complex_view; typedef _gsl_vector_complex_view gsl_vector_complex_view; typedef struct { gsl_vector_complex vector; } _gsl_vector_complex_const_view; typedef const _gsl_vector_complex_const_view gsl_vector_complex_const_view; /* Allocation */ gsl_vector_complex *gsl_vector_complex_alloc (const size_t n); gsl_vector_complex *gsl_vector_complex_calloc (const size_t n); gsl_vector_complex * gsl_vector_complex_alloc_from_block (gsl_block_complex * b, const size_t offset, const size_t n, const size_t stride); gsl_vector_complex * gsl_vector_complex_alloc_from_vector (gsl_vector_complex * v, const size_t offset, const size_t n, const size_t stride); void gsl_vector_complex_free (gsl_vector_complex * v); /* Views */ _gsl_vector_complex_view gsl_vector_complex_view_array (double *base, size_t n); _gsl_vector_complex_view gsl_vector_complex_view_array_with_stride (double *base, size_t stride, size_t n); _gsl_vector_complex_const_view gsl_vector_complex_const_view_array (const double *base, size_t n); _gsl_vector_complex_const_view gsl_vector_complex_const_view_array_with_stride (const double *base, size_t stride, size_t n); _gsl_vector_complex_view gsl_vector_complex_subvector (gsl_vector_complex *base, size_t i, size_t n); _gsl_vector_complex_view gsl_vector_complex_subvector_with_stride (gsl_vector_complex *v, size_t i, size_t stride, size_t n); _gsl_vector_complex_const_view gsl_vector_complex_const_subvector (const gsl_vector_complex *base, size_t i, size_t n); _gsl_vector_complex_const_view gsl_vector_complex_const_subvector_with_stride (const gsl_vector_complex *v, size_t i, size_t stride, size_t n); _gsl_vector_view gsl_vector_complex_real (gsl_vector_complex *v); _gsl_vector_view gsl_vector_complex_imag (gsl_vector_complex *v); _gsl_vector_const_view gsl_vector_complex_const_real (const gsl_vector_complex *v); _gsl_vector_const_view gsl_vector_complex_const_imag (const gsl_vector_complex *v); /* Operations */ void gsl_vector_complex_set_zero (gsl_vector_complex * v); void gsl_vector_complex_set_all (gsl_vector_complex * v, gsl_complex z); int gsl_vector_complex_set_basis (gsl_vector_complex * v, size_t i); int gsl_vector_complex_fread (FILE * stream, gsl_vector_complex * v); int gsl_vector_complex_fwrite (FILE * stream, const gsl_vector_complex * v); int gsl_vector_complex_fscanf (FILE * stream, gsl_vector_complex * v); int gsl_vector_complex_fprintf (FILE * stream, const gsl_vector_complex * v, const char *format); int gsl_vector_complex_memcpy (gsl_vector_complex * dest, const gsl_vector_complex * src); int gsl_vector_complex_reverse (gsl_vector_complex * v); int gsl_vector_complex_swap (gsl_vector_complex * v, gsl_vector_complex * w); int gsl_vector_complex_swap_elements (gsl_vector_complex * v, const size_t i, const size_t j); int gsl_vector_complex_equal (const gsl_vector_complex * u, const gsl_vector_complex * v); int gsl_vector_complex_isnull (const gsl_vector_complex * v); int gsl_vector_complex_ispos (const gsl_vector_complex * v); int gsl_vector_complex_isneg (const gsl_vector_complex * v); int gsl_vector_complex_isnonneg (const gsl_vector_complex * v); int gsl_vector_complex_add (gsl_vector_complex * a, const gsl_vector_complex * b); int gsl_vector_complex_sub (gsl_vector_complex * a, const gsl_vector_complex * b); int gsl_vector_complex_mul (gsl_vector_complex * a, const gsl_vector_complex * b); int gsl_vector_complex_div (gsl_vector_complex * a, const gsl_vector_complex * b); int gsl_vector_complex_scale (gsl_vector_complex * a, const gsl_complex x); int gsl_vector_complex_add_constant (gsl_vector_complex * a, const gsl_complex x); int gsl_vector_complex_axpby (const gsl_complex alpha, const gsl_vector_complex * x, const gsl_complex beta, gsl_vector_complex * y); INLINE_DECL gsl_complex gsl_vector_complex_get (const gsl_vector_complex * v, const size_t i); INLINE_DECL void gsl_vector_complex_set (gsl_vector_complex * v, const size_t i, gsl_complex z); INLINE_DECL gsl_complex *gsl_vector_complex_ptr (gsl_vector_complex * v, const size_t i); INLINE_DECL const gsl_complex *gsl_vector_complex_const_ptr (const gsl_vector_complex * v, const size_t i); #ifdef HAVE_INLINE INLINE_FUN gsl_complex gsl_vector_complex_get (const gsl_vector_complex * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { gsl_complex zero = {{0, 0}}; GSL_ERROR_VAL ("index out of range", GSL_EINVAL, zero); } #endif return *GSL_COMPLEX_AT (v, i); } INLINE_FUN void gsl_vector_complex_set (gsl_vector_complex * v, const size_t i, gsl_complex z) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VOID ("index out of range", GSL_EINVAL); } #endif *GSL_COMPLEX_AT (v, i) = z; } INLINE_FUN gsl_complex * gsl_vector_complex_ptr (gsl_vector_complex * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return GSL_COMPLEX_AT (v, i); } INLINE_FUN const gsl_complex * gsl_vector_complex_const_ptr (const gsl_vector_complex * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return GSL_COMPLEX_AT (v, i); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_VECTOR_COMPLEX_DOUBLE_H__ */ gsl/vector/gsl_vector_complex.h0000644000175000017500000000137413536674414015310 0ustar eddedd#ifndef __GSL_VECTOR_COMPLEX_H__ #define __GSL_VECTOR_COMPLEX_H__ #define GSL_VECTOR_REAL(z, i) ((z)->data[2*(i)*(z)->stride]) #define GSL_VECTOR_IMAG(z, i) ((z)->data[2*(i)*(z)->stride + 1]) #if GSL_RANGE_CHECK #define GSL_VECTOR_COMPLEX(zv, i) (((i) >= (zv)->size ? (gsl_error ("index out of range", __FILE__, __LINE__, GSL_EINVAL), 0):0 , *GSL_COMPLEX_AT((zv),(i)))) #else #define GSL_VECTOR_COMPLEX(zv, i) (*GSL_COMPLEX_AT((zv),(i))) #endif #define GSL_COMPLEX_AT(zv,i) ((gsl_complex*)&((zv)->data[2*(i)*(zv)->stride])) #define GSL_COMPLEX_FLOAT_AT(zv,i) ((gsl_complex_float*)&((zv)->data[2*(i)*(zv)->stride])) #define GSL_COMPLEX_LONG_DOUBLE_AT(zv,i) ((gsl_complex_long_double*)&((zv)->data[2*(i)*(zv)->stride])) #endif /* __GSL_VECTOR_COMPLEX_H__ */ gsl/vector/oper_source.c0000664000175000017500000001066414057135461013727 0ustar eddedd/* vector/oper_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION(gsl_vector, add) (TYPE(gsl_vector) * a, const TYPE(gsl_vector) * b) { const size_t N = a->size; if (b->size != N) { GSL_ERROR ("vectors must have same length", GSL_EBADLEN); } else { const size_t stride_a = a->stride; const size_t stride_b = b->stride; size_t i; for (i = 0; i < N; i++) { a->data[i * stride_a] += b->data[i * stride_b]; } return GSL_SUCCESS; } } int FUNCTION(gsl_vector, sub) (TYPE(gsl_vector) * a, const TYPE(gsl_vector) * b) { const size_t N = a->size; if (b->size != N) { GSL_ERROR ("vectors must have same length", GSL_EBADLEN); } else { const size_t stride_a = a->stride; const size_t stride_b = b->stride; size_t i; for (i = 0; i < N; i++) { a->data[i * stride_a] -= b->data[i * stride_b]; } return GSL_SUCCESS; } } int FUNCTION(gsl_vector, mul) (TYPE(gsl_vector) * a, const TYPE(gsl_vector) * b) { const size_t N = a->size; if (b->size != N) { GSL_ERROR ("vectors must have same length", GSL_EBADLEN); } else { const size_t stride_a = a->stride; const size_t stride_b = b->stride; size_t i; for (i = 0; i < N; i++) { a->data[i * stride_a] *= b->data[i * stride_b]; } return GSL_SUCCESS; } } int FUNCTION(gsl_vector, div) (TYPE(gsl_vector) * a, const TYPE(gsl_vector) * b) { const size_t N = a->size; if (b->size != N) { GSL_ERROR ("vectors must have same length", GSL_EBADLEN); } else { const size_t stride_a = a->stride; const size_t stride_b = b->stride; size_t i; for (i = 0; i < N; i++) { a->data[i * stride_a] /= b->data[i * stride_b]; } return GSL_SUCCESS; } } int FUNCTION(gsl_vector, scale) (TYPE(gsl_vector) * a, const ATOMIC x) { #if defined(BASE_DOUBLE) gsl_blas_dscal(x, a); #elif defined(BASE_FLOAT) gsl_blas_sscal(x, a); #else const size_t N = a->size; const size_t stride = a->stride; size_t i; for (i = 0; i < N; i++) { a->data[i * stride] *= x; } #endif return GSL_SUCCESS; } int FUNCTION(gsl_vector, add_constant) (TYPE(gsl_vector) * a, const ATOMIC x) { const size_t N = a->size; const size_t stride = a->stride; size_t i; for (i = 0; i < N; i++) { a->data[i * stride] += x; } return GSL_SUCCESS; } int FUNCTION (gsl_vector, axpby) (const BASE alpha, const TYPE (gsl_vector) * x, const BASE beta, TYPE (gsl_vector) * y) { const size_t x_size = x->size; if (x_size != y->size) { GSL_ERROR ("vector lengths are not equal", GSL_EBADLEN); } else if (beta == (ATOMIC) 0) { const size_t x_stride = x->stride; const size_t y_stride = y->stride; size_t j; for (j = 0; j < x_size; j++) { y->data[y_stride * j] = alpha * x->data[x_stride * j]; } return GSL_SUCCESS; } else { const size_t x_stride = x->stride; const size_t y_stride = y->stride; size_t j; for (j = 0; j < x_size; j++) { y->data[y_stride * j] = alpha * x->data[x_stride * j] + beta * y->data[y_stride * j]; } return GSL_SUCCESS; } } BASE FUNCTION(gsl_vector, sum) (const TYPE(gsl_vector) * a) { const size_t N = a->size; const size_t stride = a->stride; BASE sum = (BASE) 0; size_t i; for (i = 0; i < N; i++) { sum += a->data[i * stride]; } return sum; } gsl/vector/copy.c0000644000175000017500000000341313536675317012356 0ustar eddedd#include #include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "copy_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/vector/view.h0000644000175000017500000000011713536674414012356 0ustar eddedd#define NULL_VECTOR {0, 0, 0, 0, 0} #define NULL_VECTOR_VIEW {{0, 0, 0, 0, 0}} gsl/vector/init.c0000644000175000017500000000337613536674414012354 0ustar eddedd#include #include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "init_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/vector/test_source.c0000664000175000017500000005526714057135461013751 0ustar eddedd/* vector/test_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2010 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ void FUNCTION (test, func) (size_t stride, size_t N); void FUNCTION (test, ops) (size_t stride1, size_t stride2, size_t N); void FUNCTION (test, file) (size_t stride, size_t N); void FUNCTION (test, text) (size_t stride, size_t N); void FUNCTION (test, trap) (size_t stride, size_t N); TYPE (gsl_vector) * FUNCTION(create, vector) (size_t stride, size_t N); #define TEST(expr,desc) gsl_test((expr), NAME(gsl_vector) desc " stride=%d, N=%d", stride, N) #define TEST2(expr,desc) gsl_test((expr), NAME(gsl_vector) desc " stride1=%d, stride2=%d, N=%d", stride1, stride2, N) TYPE (gsl_vector) * FUNCTION(create, vector) (size_t stride, size_t N) { TYPE (gsl_vector) * v = FUNCTION (gsl_vector, calloc) (N*stride); v->stride = stride; v->size = N; return v; } void FUNCTION (test, func) (size_t stride, size_t N) { TYPE (gsl_vector) * v0; TYPE (gsl_vector) * v; QUALIFIED_VIEW(gsl_vector,view) view; size_t i, j; if (stride == 1) { v = FUNCTION (gsl_vector, calloc) (N); TEST(v->data == 0, "_calloc pointer"); TEST(v->size != N, "_calloc size"); TEST(v->stride != 1, "_calloc stride"); { int status = (FUNCTION(gsl_vector,isnull)(v) != 1); TEST (status, "_isnull" DESC " on calloc vector"); status = (FUNCTION(gsl_vector,ispos)(v) != 0); TEST (status, "_ispos" DESC " on calloc vector"); status = (FUNCTION(gsl_vector,isneg)(v) != 0); TEST (status, "_isneg" DESC " on calloc vector"); status = (FUNCTION(gsl_vector,isnonneg)(v) != 1); TEST (status, "_isnonneg" DESC " on calloc vector"); } FUNCTION (gsl_vector, free) (v); /* free whatever is in v */ } if (stride == 1) { v = FUNCTION (gsl_vector, alloc) (N); TEST(v->data == 0, "_alloc pointer"); TEST(v->size != N, "_alloc size"); TEST(v->stride != 1, "_alloc stride"); FUNCTION (gsl_vector, free) (v); /* free whatever is in v */ } if (stride == 1) { v0 = FUNCTION (gsl_vector, alloc) (N); view = FUNCTION (gsl_vector, subvector) (v0, 0, N); v = &view.vector; } else { v0 = FUNCTION (gsl_vector, alloc) (N * stride); for (i = 0; i < N*stride; i++) { v0->data[i] = i; } view = FUNCTION (gsl_vector, subvector_with_stride) (v0, 0, stride, N); v = &view.vector; } { int status = 0; for (i = 0; i < N; i++) { FUNCTION (gsl_vector, set) (v, i, (ATOMIC) i); } for (i = 0; i < N; i++) { if (v->data[i*stride] != (ATOMIC) (i)) status = 1; }; TEST(status,"_set" DESC " writes into array"); } { int status = 0; for (i = 0; i < N; i++) { if (FUNCTION (gsl_vector, get) (v, i) != (ATOMIC) (i)) status = 1; }; TEST (status, "_get" DESC " reads from array"); } { int status = 0; for (i = 0; i < N; i++) { if (FUNCTION (gsl_vector, ptr) (v, i) != v->data + i*stride) status = 1; }; TEST (status, "_ptr" DESC " access to array"); } { int status = 0; for (i = 0; i < N; i++) { if (FUNCTION (gsl_vector, const_ptr) (v, i) != v->data + i*stride) status = 1; }; TEST (status, "_const_ptr" DESC " access to array"); } { int status = 0; for (i = 0; i < N; i++) { FUNCTION (gsl_vector, set) (v, i, (ATOMIC) 0); } status = (FUNCTION(gsl_vector,isnull)(v) != 1); TEST (status, "_isnull" DESC " on null vector") ; status = (FUNCTION(gsl_vector,ispos)(v) != 0); TEST (status, "_ispos" DESC " on null vector") ; status = (FUNCTION(gsl_vector,isneg)(v) != 0); TEST (status, "_isneg" DESC " on null vector") ; status = (FUNCTION(gsl_vector,isnonneg)(v) != 1); TEST (status, "_isnonneg" DESC " on null vector") ; } { int status = 0; for (i = 0; i < N; i++) { FUNCTION (gsl_vector, set) (v, i, (ATOMIC) (i % 10)); } status = (FUNCTION(gsl_vector,isnull)(v) != 0); TEST (status, "_isnull" DESC " on non-negative vector") ; status = (FUNCTION(gsl_vector,ispos)(v) != 0); TEST (status, "_ispos" DESC " on non-negative vector") ; status = (FUNCTION(gsl_vector,isneg)(v) != 0); TEST (status, "_isneg" DESC " on non-negative vector") ; status = (FUNCTION(gsl_vector,isnonneg)(v) != 1); TEST (status, "_isnonneg" DESC " on non-negative vector") ; } #ifndef UNSIGNED { int status = 0; for (i = 0; i < N; i++) { ATOMIC vi = (i % 10) - (ATOMIC) 5; FUNCTION (gsl_vector, set) (v, i, vi); } status = (FUNCTION(gsl_vector,isnull)(v) != 0); TEST (status, "_isnull" DESC " on mixed vector") ; status = (FUNCTION(gsl_vector,ispos)(v) != 0); TEST (status, "_ispos" DESC " on mixed vector") ; status = (FUNCTION(gsl_vector,isneg)(v) != 0); TEST (status, "_isneg" DESC " on mixed vector") ; status = (FUNCTION(gsl_vector,isnonneg)(v) != 0); TEST (status, "_isnonneg" DESC " on mixed vector") ; } { int status = 0; for (i = 0; i < N; i++) { FUNCTION (gsl_vector, set) (v, i, -(ATOMIC) (i % 10)); } status = (FUNCTION(gsl_vector,isnull)(v) != 0); TEST (status, "_isnull" DESC " on non-positive vector") ; status = (FUNCTION(gsl_vector,ispos)(v) != 0); TEST (status, "_ispos" DESC " on non-positive vector") ; status = (FUNCTION(gsl_vector,isneg)(v) != 0); TEST (status, "_isneg" DESC " on non-positive non-null vector") ; status = (FUNCTION(gsl_vector,isnonneg)(v) != 0); TEST (status, "_isnonneg" DESC " on non-positive non-null vector") ; } #endif { int status = 0; for (i = 0; i < N; i++) { FUNCTION (gsl_vector, set) (v, i, (ATOMIC) (i % 10 + 1)); } status = (FUNCTION(gsl_vector,isnull)(v) != 0); TEST (status, "_isnull" DESC " on positive vector") ; status = (FUNCTION(gsl_vector,ispos)(v) != 1); TEST (status, "_ispos" DESC " on positive vector") ; status = (FUNCTION(gsl_vector,isneg)(v) != 0); TEST (status, "_isneg" DESC " on positive vector") ; status = (FUNCTION(gsl_vector,isnonneg)(v) != 1); TEST (status, "_isnonneg" DESC " on positive vector") ; } #if (!defined(UNSIGNED) && !defined(BASE_CHAR)) { int status = 0; for (i = 0; i < N; i++) { FUNCTION (gsl_vector, set) (v, i, -(ATOMIC) (i % 10 + 1)); } status = (FUNCTION(gsl_vector,isnull)(v) != 0); TEST (status, "_isnull" DESC " on negative vector") ; status = (FUNCTION(gsl_vector,ispos)(v) != 0); TEST (status, "_ispos" DESC " on negative vector") ; status = (FUNCTION(gsl_vector,isneg)(v) != 1); TEST (status, "_isneg" DESC " on negative vector") ; status = (FUNCTION(gsl_vector,isnonneg)(v) != 0); TEST (status, "_isnonneg" DESC " on negative vector") ; } #endif { int status = 0; FUNCTION (gsl_vector, set_zero) (v); for (i = 0; i < N; i++) { if (FUNCTION (gsl_vector, get) (v, i) != (ATOMIC)0) status = 1; }; TEST (status, "_setzero" DESC " on non-null vector") ; } { int status = 0; FUNCTION (gsl_vector, set_all) (v, (ATOMIC)27); for (i = 0; i < N; i++) { if (FUNCTION (gsl_vector, get) (v, i) != (ATOMIC) (27)) status = 1; }; TEST (status, "_setall" DESC " to non-zero value") ; } { int status = 0; for (i = 0; i < N; i++) { FUNCTION (gsl_vector, set_basis) (v, i); for (j = 0; j < N; j++) { if (i == j) { if (FUNCTION (gsl_vector, get) (v, j) != (ATOMIC)1) status = 1 ; } else { if (FUNCTION (gsl_vector, get) (v, j) != (ATOMIC)(0)) status = 1; } }; } TEST (status, "_setbasis" DESC " over range") ; } { int status = 0; TYPE (gsl_vector) * w0 = FUNCTION (gsl_vector, alloc) (N * stride); QUALIFIED_VIEW(gsl_vector,view) view2 = FUNCTION (gsl_vector, subvector_with_stride) (w0, 0, stride, N); TYPE (gsl_vector) * w = &view2.vector; for (i = 0; i < N; i++) { FUNCTION (gsl_vector, set) (v, i, (ATOMIC) i); FUNCTION (gsl_vector, set) (w, i, (ATOMIC) i); } FUNCTION (gsl_vector, axpby) ((ATOMIC)2, v, (ATOMIC)3, w); for (i = 0; i < N; i++) { if (FUNCTION (gsl_vector, get) (w, i) != (ATOMIC) ((ATOMIC)i*(ATOMIC)2.0 + (ATOMIC)i*(ATOMIC)3.0)) status = 1; } TEST (status, "_axpby" DESC " by (2,3)") ; for (i = 0; i < N; i++) { FUNCTION (gsl_vector, set) (v, i, (ATOMIC) i); FUNCTION (gsl_vector, set) (w, i, (ATOMIC) i); } FUNCTION (gsl_vector, axpby) ((ATOMIC)2, v, (ATOMIC)0, w); for (i = 0; i < N; i++) { if (FUNCTION (gsl_vector, get) (w, i) != (ATOMIC) ((ATOMIC)i*(ATOMIC)2.0)) status = 1; } TEST (status, "_axpby" DESC " by (2,0)") ; FUNCTION (gsl_vector, free) (w0); } { int status = 0; for (i = 0; i < N; i++) { FUNCTION (gsl_vector, set) (v, i, (ATOMIC) i); } FUNCTION (gsl_vector, scale) (v, (ATOMIC)2.0); for (i = 0; i < N; i++) { if (FUNCTION (gsl_vector, get) (v, i) != (ATOMIC) ((ATOMIC)i*(ATOMIC)2.0)) status = 1; }; TEST (status, "_scale" DESC " by 2") ; } { int status = 0; FUNCTION (gsl_vector, add_constant) (v, (ATOMIC)7); for (i = 0; i < N; i++) { if (FUNCTION (gsl_vector, get) (v, i) != (ATOMIC) ((ATOMIC)i*(ATOMIC)2.0 + (ATOMIC)7)) status = 1; }; TEST (status, "_add_constant" DESC) ; } { int status = 0; for (i = 0; i < N; i++) { FUNCTION (gsl_vector, set) (v, i, (ATOMIC) i); } FUNCTION (gsl_vector,swap_elements) (v, 2, 5) ; status = (FUNCTION(gsl_vector,get)(v,2) != 5) ; status |= (FUNCTION(gsl_vector,get)(v,5) != 2) ; FUNCTION (gsl_vector,swap_elements) (v, 2, 5) ; status |= (FUNCTION(gsl_vector,get)(v,2) != 2) ; status |= (FUNCTION(gsl_vector,get)(v,5) != 5) ; TEST (status, "_swap_elements" DESC " (2,5)") ; } { int status = 0; FUNCTION (gsl_vector,reverse) (v) ; for (i = 0; i < N; i++) { status |= (FUNCTION (gsl_vector, get) (v, i) != (ATOMIC) (N - i - 1)); } TEST (status, "_reverse" DESC " reverses elements") ; } { int status = 0; QUALIFIED_VIEW(gsl_vector,view) v1 = FUNCTION(gsl_vector, view_array) (v->data, N*stride); for (i = 0; i < N; i++) { if (FUNCTION (gsl_vector, get) (&v1.vector, i*stride) != FUNCTION (gsl_vector, get) (v, i)) status = 1; }; TEST (status, "_view_array" DESC); } { int status = 0; QUALIFIED_VIEW(gsl_vector,view) v1 = FUNCTION(gsl_vector, view_array_with_stride) (v->data, stride, N*stride); for (i = 0; i < N; i++) { if (FUNCTION (gsl_vector, get) (&v1.vector, i) != FUNCTION (gsl_vector, get) (v, i)) status = 1; }; TEST (status, "_view_array_with_stride" DESC); } { int status = 0; QUALIFIED_VIEW(gsl_vector,view) v1 = FUNCTION(gsl_vector, subvector) (v, N/3, N/2); for (i = 0; i < N/2; i++) { if (FUNCTION (gsl_vector, get) (&v1.vector, i) != FUNCTION (gsl_vector, get) (v, (N/3) + i)) status = 1; }; TEST (status, "_view_subvector" DESC); } { int status = 0; QUALIFIED_VIEW(gsl_vector,view) v1 = FUNCTION(gsl_vector, subvector_with_stride) (v, N/5, 3, N/4); for (i = 0; i < N/4; i++) { if (FUNCTION (gsl_vector, get) (&v1.vector, i) != FUNCTION (gsl_vector, get) (v, (N/5) + 3*i)) status = 1; }; TEST (status, "_view_subvector_with_stride" DESC); } { BASE exp_max = FUNCTION(gsl_vector,get)(v, 0); BASE exp_min = FUNCTION(gsl_vector,get)(v, 0); size_t exp_imax = 0, exp_imin = 0; for (i = 0; i < N; i++) { BASE k = FUNCTION(gsl_vector, get) (v, i) ; if (k < exp_min) { exp_min = FUNCTION(gsl_vector, get) (v, i); exp_imin = i; } } for (i = 0; i < N; i++) { BASE k = FUNCTION(gsl_vector, get) (v, i) ; if (k > exp_max) { exp_max = FUNCTION(gsl_vector, get) (v, i) ; exp_imax = i; } } { BASE max = FUNCTION(gsl_vector, max) (v) ; TEST (max != exp_max, "_max returns correct maximum value"); } { BASE min = FUNCTION(gsl_vector, min) (v) ; TEST (min != exp_min, "_min returns correct minimum value"); } { BASE min, max; FUNCTION(gsl_vector, minmax) (v, &min, &max); TEST (max != exp_max, "_minmax returns correct maximum value"); TEST (min != exp_min, "_minmax returns correct minimum value"); } { size_t imax = FUNCTION(gsl_vector, max_index) (v) ; TEST (imax != exp_imax, "_max_index returns correct maximum i"); } { size_t imin = FUNCTION(gsl_vector, min_index) (v) ; TEST (imin != exp_imin, "_min_index returns correct minimum i"); } { size_t imin, imax; FUNCTION(gsl_vector, minmax_index) (v, &imin, &imax); TEST (imax != exp_imax, "_minmax_index returns correct maximum i"); TEST (imin != exp_imin, "_minmax_index returns correct minimum i"); } #if FP i = N/2; FUNCTION(gsl_vector, set) (v, i, GSL_NAN); exp_max = GSL_NAN; exp_min = GSL_NAN; exp_imax = i; exp_imin = i; { BASE max = FUNCTION(gsl_vector, max) (v) ; gsl_test_abs (max, exp_max, 0, "_max returns correct maximum value for NaN"); } { BASE min = FUNCTION(gsl_vector, min) (v) ; gsl_test_abs (min, exp_min, 0, "_min returns correct minimum value for NaN"); } { BASE min, max; FUNCTION(gsl_vector, minmax) (v, &min, &max); gsl_test_abs (max, exp_max, 0, "_minmax returns correct maximum value for NaN"); gsl_test_abs (min, exp_min, 0, "_minmax returns correct minimum value for NaN"); } { size_t imax = FUNCTION(gsl_vector, max_index) (v) ; TEST (imax != exp_imax, "_max_index returns correct maximum i for NaN"); } { size_t imin = FUNCTION(gsl_vector, min_index) (v) ; TEST (imin != exp_imin, "_min_index returns correct minimum i for NaN"); } { size_t imin, imax; FUNCTION(gsl_vector, minmax_index) (v, &imin, &imax); TEST (imax != exp_imax, "_minmax_index returns correct maximum i for NaN"); TEST (imin != exp_imin, "_minmax_index returns correct minimum i for NaN"); } #endif } FUNCTION (gsl_vector, free) (v0); /* free whatever is in v */ } void FUNCTION (test, ops) (size_t stride1, size_t stride2, size_t N) { size_t i; TYPE (gsl_vector) * a = FUNCTION (create, vector) (stride1, N); TYPE (gsl_vector) * b = FUNCTION (create, vector) (stride2, N); TYPE (gsl_vector) * v = FUNCTION (create, vector) (stride1, N); BASE exact_sum_a = (BASE) 0, exact_sum_b = (BASE) 0; for (i = 0; i < N; i++) { BASE ai = (BASE)(3 + i); BASE bi = (BASE)(3 + 2 * i); FUNCTION (gsl_vector, set) (a, i, ai); FUNCTION (gsl_vector, set) (b, i, bi); exact_sum_a += ai; exact_sum_b += bi; } { int status = (FUNCTION(gsl_vector,equal) (a,b) != 0); TEST2 (status, "_equal vectors unequal"); } FUNCTION(gsl_vector, memcpy) (v, a); { int status = (FUNCTION(gsl_vector,equal) (a,v) != 1); TEST2 (status, "_equal vectors equal"); } FUNCTION(gsl_vector, add) (v, b); { int status = 0; for (i = 0; i < N; i++) { BASE r = FUNCTION(gsl_vector,get) (v,i); BASE x = FUNCTION(gsl_vector,get) (a,i); BASE y = FUNCTION(gsl_vector,get) (b,i); BASE z = x + y; if (r != z) status = 1; } TEST2 (status, "_add vector addition"); } { int status = 0; FUNCTION(gsl_vector, swap) (a, b); for (i = 0; i < N; i++) { status |= (FUNCTION (gsl_vector, get) (a, i) != (BASE)(3 + 2 * i)); status |= (FUNCTION (gsl_vector, get) (b, i) != (BASE)(3 + i)); } FUNCTION(gsl_vector, swap) (a, b); for (i = 0; i < N; i++) { status |= (FUNCTION (gsl_vector, get) (a, i) != (BASE)(3 + i)); status |= (FUNCTION (gsl_vector, get) (b, i) != (BASE)(3 + 2 * i)); } TEST2 (status, "_swap exchange vectors"); } FUNCTION(gsl_vector, memcpy) (v, a); FUNCTION(gsl_vector, sub) (v, b); { int status = 0; for (i = 0; i < N; i++) { BASE r = FUNCTION(gsl_vector,get) (v,i); BASE x = FUNCTION(gsl_vector,get) (a,i); BASE y = FUNCTION(gsl_vector,get) (b,i); BASE z = x - y; if (r != z) status = 1; } TEST2 (status, "_sub vector subtraction"); } FUNCTION(gsl_vector, memcpy) (v, a); FUNCTION(gsl_vector, mul) (v, b); { int status = 0; for (i = 0; i < N; i++) { BASE r = FUNCTION(gsl_vector,get) (v,i); BASE x = FUNCTION(gsl_vector,get) (a,i); BASE y = FUNCTION(gsl_vector,get) (b,i); BASE z = x * y; if (r != z) status = 1; } TEST2 (status, "_mul multiplication"); } FUNCTION(gsl_vector, memcpy) (v, a); FUNCTION(gsl_vector, div) (v, b); { int status = 0; for (i = 0; i < N; i++) { BASE r = FUNCTION(gsl_vector,get) (v,i); BASE x = FUNCTION(gsl_vector,get) (a,i); BASE y = FUNCTION(gsl_vector,get) (b,i); BASE z = x / y; if (fabs(r - z) > 2 * GSL_FLT_EPSILON * fabs(z)) status = 1; } TEST2 (status, "_div division"); } { int status; BASE sum_a = FUNCTION(gsl_vector, sum) (a); BASE sum_b = FUNCTION(gsl_vector, sum) (b); status = 0; if (fabs(sum_a - exact_sum_a) > GSL_FLT_EPSILON) status = 1; gsl_test (status, NAME (gsl_vector) "_sum a"); status = 0; if (fabs(sum_b - exact_sum_b) > GSL_FLT_EPSILON) status = 1; gsl_test (status, NAME (gsl_vector) "_sum b"); } FUNCTION(gsl_vector, free) (a); FUNCTION(gsl_vector, free) (b); FUNCTION(gsl_vector, free) (v); } void FUNCTION (test, file) (size_t stride, size_t N) { TYPE (gsl_vector) * v = FUNCTION (create, vector) (stride, N); TYPE (gsl_vector) * w = FUNCTION (create, vector) (stride, N); size_t i; #ifdef NO_INLINE char filename[] = "test_static.dat"; #else char filename[] = "test.dat"; #endif { /* write file */ FILE *f = fopen(filename, "wb"); for (i = 0; i < N; i++) { FUNCTION (gsl_vector, set) (v, i, (ATOMIC) (N - i)); }; FUNCTION (gsl_vector, fwrite) (f, v); fclose(f); } { /* read file */ FILE *f = fopen(filename, "rb"); FUNCTION (gsl_vector, fread) (f, w); status = 0; for (i = 0; i < N; i++) { if (w->data[i*stride] != (ATOMIC) (N - i)) status = 1; }; TEST (status, "_write and read"); fclose(f); } FUNCTION (gsl_vector, free) (v); /* free whatever is in v */ FUNCTION (gsl_vector, free) (w); /* free whatever is in w */ } #if USES_LONGDOUBLE && ! HAVE_PRINTF_LONGDOUBLE /* skip this test */ #else void FUNCTION (test, text) (size_t stride, size_t N) { TYPE (gsl_vector) * v = FUNCTION (create, vector) (stride, N); TYPE (gsl_vector) * w = FUNCTION (create, vector) (stride, N); size_t i; #ifdef NO_INLINE char filename[] = "test_static.dat"; #else char filename[] = "test.dat"; #endif { /* write file */ FILE *f = fopen(filename, "w"); for (i = 0; i < N; i++) { FUNCTION (gsl_vector, set) (v, i, (ATOMIC) i); }; FUNCTION (gsl_vector, fprintf) (f, v, OUT_FORMAT); fclose(f); } { /* read file */ FILE *f = fopen(filename, "r"); FUNCTION (gsl_vector, fscanf) (f, w); status = 0; for (i = 0; i < N; i++) { if (w->data[i*stride] != (ATOMIC) i) status = 1; }; gsl_test (status, NAME (gsl_vector) "_fprintf and fscanf"); fclose (f); } FUNCTION (gsl_vector, free) (v); FUNCTION (gsl_vector, free) (w); } #endif void FUNCTION (test, trap) (size_t stride, size_t N) { double x; size_t j = 0; TYPE (gsl_vector) * v = FUNCTION (create, vector) (stride, N); v->size = N; v->stride = stride; status = 0; FUNCTION (gsl_vector, set) (v, j - 1, (ATOMIC)0); TEST (!status, "_set traps index below lower bound"); status = 0; FUNCTION (gsl_vector, set) (v, N + 1, (ATOMIC)0); TEST (!status, "_set traps index above upper bound"); status = 0; FUNCTION (gsl_vector, set) (v, N, (ATOMIC)0); TEST (!status, "_set traps index at upper bound"); status = 0; x = FUNCTION (gsl_vector, get) (v, j - 1); TEST (!status, "_get traps index below lower bound"); TEST (x != 0, "_get returns zero for index below lower bound"); status = 0; x = FUNCTION (gsl_vector, get) (v, N + 1); TEST (!status, "_get traps index above upper bound"); TEST (x != 0, "_get returns zero for index above upper bound"); status = 0; x = FUNCTION (gsl_vector, get) (v, N); TEST (!status, "_get traps index at upper bound"); TEST (x != 0, "_get returns zero for index at upper bound"); FUNCTION (gsl_vector, free) (v); /* free whatever is in v */ } void FUNCTION (test, alloc_zero_length) (void) { TYPE (gsl_vector) * b = FUNCTION (gsl_vector, alloc) (0); gsl_test (b == 0, NAME (gsl_vector) "_alloc permits zero length"); gsl_test (b->size != 0, NAME (gsl_vector) "_alloc reflects zero length"); FUNCTION (gsl_vector, free) (b); } void FUNCTION (test, calloc_zero_length) (void) { TYPE (gsl_vector) * b = FUNCTION (gsl_vector, calloc) (0); gsl_test (b == 0, NAME (gsl_vector) "_calloc permits zero length"); gsl_test (b->size != 0, NAME (gsl_vector) "_calloc reflects zero length"); FUNCTION (gsl_vector, free) (b); } gsl/vector/TODO0000644000175000017500000000011413536674414011720 0ustar eddedd# -*- org -*- #+CATEGORY: vector * Pretty print function * Vector p-norms gsl/vector/vector.c0000644000175000017500000000207313536674414012704 0ustar eddedd/* vector/vector.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include /* Compile all the inline functions */ #define COMPILE_INLINE_STATIC #include "build.h" #include /* turn on range checking at runtime (disabled if zero) */ int gsl_check_range = 1; gsl/vector/prop_source.c0000644000175000017500000000575213536674414013751 0ustar eddedd/* vector/prop_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2010 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION (gsl_vector, equal) (const TYPE (gsl_vector) * u, const TYPE (gsl_vector) * v) { const size_t n = v->size; const size_t stride_u = u->stride ; const size_t stride_v = v->stride ; size_t j; if (u->size != v->size) { GSL_ERROR_VAL ("vectors must have same length", GSL_EBADLEN, 0); } for (j = 0; j < n; j++) { size_t k; for (k = 0; k < MULTIPLICITY; k++) { if (u->data[MULTIPLICITY * stride_u * j + k] != v->data[MULTIPLICITY * stride_v * j + k]) { return 0; } } } return 1; } int FUNCTION (gsl_vector, isnull) (const TYPE (gsl_vector) * v) { const size_t n = v->size; const size_t stride = v->stride ; size_t j; for (j = 0; j < n; j++) { size_t k; for (k = 0; k < MULTIPLICITY; k++) { if (v->data[MULTIPLICITY * stride * j + k] != 0.0) { return 0; } } } return 1; } int FUNCTION (gsl_vector, ispos) (const TYPE (gsl_vector) * v) { const size_t n = v->size; const size_t stride = v->stride ; size_t j; for (j = 0; j < n; j++) { size_t k; for (k = 0; k < MULTIPLICITY; k++) { if (v->data[MULTIPLICITY * stride * j + k] <= 0.0) { return 0; } } } return 1; } int FUNCTION (gsl_vector, isneg) (const TYPE (gsl_vector) * v) { const size_t n = v->size; const size_t stride = v->stride ; size_t j; for (j = 0; j < n; j++) { size_t k; for (k = 0; k < MULTIPLICITY; k++) { if (v->data[MULTIPLICITY * stride * j + k] >= 0.0) { return 0; } } } return 1; } int FUNCTION (gsl_vector, isnonneg) (const TYPE (gsl_vector) * v) { const size_t n = v->size; const size_t stride = v->stride ; size_t j; for (j = 0; j < n; j++) { size_t k; for (k = 0; k < MULTIPLICITY; k++) { if (v->data[MULTIPLICITY * stride * j + k] < 0.0) { return 0; } } } return 1; } gsl/vector/gsl_vector_short.h0000664000175000017500000001675714057135461015006 0ustar eddedd/* vector/gsl_vector_short.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_VECTOR_SHORT_H__ #define __GSL_VECTOR_SHORT_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size; size_t stride; short *data; gsl_block_short *block; int owner; } gsl_vector_short; typedef struct { gsl_vector_short vector; } _gsl_vector_short_view; typedef _gsl_vector_short_view gsl_vector_short_view; typedef struct { gsl_vector_short vector; } _gsl_vector_short_const_view; typedef const _gsl_vector_short_const_view gsl_vector_short_const_view; /* Allocation */ gsl_vector_short *gsl_vector_short_alloc (const size_t n); gsl_vector_short *gsl_vector_short_calloc (const size_t n); gsl_vector_short *gsl_vector_short_alloc_from_block (gsl_block_short * b, const size_t offset, const size_t n, const size_t stride); gsl_vector_short *gsl_vector_short_alloc_from_vector (gsl_vector_short * v, const size_t offset, const size_t n, const size_t stride); void gsl_vector_short_free (gsl_vector_short * v); /* Views */ _gsl_vector_short_view gsl_vector_short_view_array (short *v, size_t n); _gsl_vector_short_view gsl_vector_short_view_array_with_stride (short *base, size_t stride, size_t n); _gsl_vector_short_const_view gsl_vector_short_const_view_array (const short *v, size_t n); _gsl_vector_short_const_view gsl_vector_short_const_view_array_with_stride (const short *base, size_t stride, size_t n); _gsl_vector_short_view gsl_vector_short_subvector (gsl_vector_short *v, size_t i, size_t n); _gsl_vector_short_view gsl_vector_short_subvector_with_stride (gsl_vector_short *v, size_t i, size_t stride, size_t n); _gsl_vector_short_const_view gsl_vector_short_const_subvector (const gsl_vector_short *v, size_t i, size_t n); _gsl_vector_short_const_view gsl_vector_short_const_subvector_with_stride (const gsl_vector_short *v, size_t i, size_t stride, size_t n); /* Operations */ void gsl_vector_short_set_zero (gsl_vector_short * v); void gsl_vector_short_set_all (gsl_vector_short * v, short x); int gsl_vector_short_set_basis (gsl_vector_short * v, size_t i); int gsl_vector_short_fread (FILE * stream, gsl_vector_short * v); int gsl_vector_short_fwrite (FILE * stream, const gsl_vector_short * v); int gsl_vector_short_fscanf (FILE * stream, gsl_vector_short * v); int gsl_vector_short_fprintf (FILE * stream, const gsl_vector_short * v, const char *format); int gsl_vector_short_memcpy (gsl_vector_short * dest, const gsl_vector_short * src); int gsl_vector_short_reverse (gsl_vector_short * v); int gsl_vector_short_swap (gsl_vector_short * v, gsl_vector_short * w); int gsl_vector_short_swap_elements (gsl_vector_short * v, const size_t i, const size_t j); short gsl_vector_short_max (const gsl_vector_short * v); short gsl_vector_short_min (const gsl_vector_short * v); void gsl_vector_short_minmax (const gsl_vector_short * v, short * min_out, short * max_out); size_t gsl_vector_short_max_index (const gsl_vector_short * v); size_t gsl_vector_short_min_index (const gsl_vector_short * v); void gsl_vector_short_minmax_index (const gsl_vector_short * v, size_t * imin, size_t * imax); int gsl_vector_short_add (gsl_vector_short * a, const gsl_vector_short * b); int gsl_vector_short_sub (gsl_vector_short * a, const gsl_vector_short * b); int gsl_vector_short_mul (gsl_vector_short * a, const gsl_vector_short * b); int gsl_vector_short_div (gsl_vector_short * a, const gsl_vector_short * b); int gsl_vector_short_scale (gsl_vector_short * a, const short x); int gsl_vector_short_add_constant (gsl_vector_short * a, const short x); int gsl_vector_short_axpby (const short alpha, const gsl_vector_short * x, const short beta, gsl_vector_short * y); short gsl_vector_short_sum (const gsl_vector_short * a); int gsl_vector_short_equal (const gsl_vector_short * u, const gsl_vector_short * v); int gsl_vector_short_isnull (const gsl_vector_short * v); int gsl_vector_short_ispos (const gsl_vector_short * v); int gsl_vector_short_isneg (const gsl_vector_short * v); int gsl_vector_short_isnonneg (const gsl_vector_short * v); INLINE_DECL short gsl_vector_short_get (const gsl_vector_short * v, const size_t i); INLINE_DECL void gsl_vector_short_set (gsl_vector_short * v, const size_t i, short x); INLINE_DECL short * gsl_vector_short_ptr (gsl_vector_short * v, const size_t i); INLINE_DECL const short * gsl_vector_short_const_ptr (const gsl_vector_short * v, const size_t i); #ifdef HAVE_INLINE INLINE_FUN short gsl_vector_short_get (const gsl_vector_short * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VAL ("index out of range", GSL_EINVAL, 0); } #endif return v->data[i * v->stride]; } INLINE_FUN void gsl_vector_short_set (gsl_vector_short * v, const size_t i, short x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VOID ("index out of range", GSL_EINVAL); } #endif v->data[i * v->stride] = x; } INLINE_FUN short * gsl_vector_short_ptr (gsl_vector_short * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (short *) (v->data + i * v->stride); } INLINE_FUN const short * gsl_vector_short_const_ptr (const gsl_vector_short * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (const short *) (v->data + i * v->stride); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_VECTOR_SHORT_H__ */ gsl/vector/oper.c0000644000175000017500000000351213536675317012351 0ustar eddedd#include #include #include #include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "oper_complex_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "oper_complex_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "oper_complex_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "oper_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/vector/gsl_vector_double.h0000664000175000017500000001543114057135461015105 0ustar eddedd/* vector/gsl_vector_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_VECTOR_DOUBLE_H__ #define __GSL_VECTOR_DOUBLE_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size; size_t stride; double *data; gsl_block *block; int owner; } gsl_vector; typedef struct { gsl_vector vector; } _gsl_vector_view; typedef _gsl_vector_view gsl_vector_view; typedef struct { gsl_vector vector; } _gsl_vector_const_view; typedef const _gsl_vector_const_view gsl_vector_const_view; /* Allocation */ gsl_vector *gsl_vector_alloc (const size_t n); gsl_vector *gsl_vector_calloc (const size_t n); gsl_vector *gsl_vector_alloc_from_block (gsl_block * b, const size_t offset, const size_t n, const size_t stride); gsl_vector *gsl_vector_alloc_from_vector (gsl_vector * v, const size_t offset, const size_t n, const size_t stride); void gsl_vector_free (gsl_vector * v); /* Views */ _gsl_vector_view gsl_vector_view_array (double *v, size_t n); _gsl_vector_view gsl_vector_view_array_with_stride (double *base, size_t stride, size_t n); _gsl_vector_const_view gsl_vector_const_view_array (const double *v, size_t n); _gsl_vector_const_view gsl_vector_const_view_array_with_stride (const double *base, size_t stride, size_t n); _gsl_vector_view gsl_vector_subvector (gsl_vector *v, size_t i, size_t n); _gsl_vector_view gsl_vector_subvector_with_stride (gsl_vector *v, size_t i, size_t stride, size_t n); _gsl_vector_const_view gsl_vector_const_subvector (const gsl_vector *v, size_t i, size_t n); _gsl_vector_const_view gsl_vector_const_subvector_with_stride (const gsl_vector *v, size_t i, size_t stride, size_t n); /* Operations */ void gsl_vector_set_zero (gsl_vector * v); void gsl_vector_set_all (gsl_vector * v, double x); int gsl_vector_set_basis (gsl_vector * v, size_t i); int gsl_vector_fread (FILE * stream, gsl_vector * v); int gsl_vector_fwrite (FILE * stream, const gsl_vector * v); int gsl_vector_fscanf (FILE * stream, gsl_vector * v); int gsl_vector_fprintf (FILE * stream, const gsl_vector * v, const char *format); int gsl_vector_memcpy (gsl_vector * dest, const gsl_vector * src); int gsl_vector_reverse (gsl_vector * v); int gsl_vector_swap (gsl_vector * v, gsl_vector * w); int gsl_vector_swap_elements (gsl_vector * v, const size_t i, const size_t j); double gsl_vector_max (const gsl_vector * v); double gsl_vector_min (const gsl_vector * v); void gsl_vector_minmax (const gsl_vector * v, double * min_out, double * max_out); size_t gsl_vector_max_index (const gsl_vector * v); size_t gsl_vector_min_index (const gsl_vector * v); void gsl_vector_minmax_index (const gsl_vector * v, size_t * imin, size_t * imax); int gsl_vector_add (gsl_vector * a, const gsl_vector * b); int gsl_vector_sub (gsl_vector * a, const gsl_vector * b); int gsl_vector_mul (gsl_vector * a, const gsl_vector * b); int gsl_vector_div (gsl_vector * a, const gsl_vector * b); int gsl_vector_scale (gsl_vector * a, const double x); int gsl_vector_add_constant (gsl_vector * a, const double x); int gsl_vector_axpby (const double alpha, const gsl_vector * x, const double beta, gsl_vector * y); double gsl_vector_sum (const gsl_vector * a); int gsl_vector_equal (const gsl_vector * u, const gsl_vector * v); int gsl_vector_isnull (const gsl_vector * v); int gsl_vector_ispos (const gsl_vector * v); int gsl_vector_isneg (const gsl_vector * v); int gsl_vector_isnonneg (const gsl_vector * v); INLINE_DECL double gsl_vector_get (const gsl_vector * v, const size_t i); INLINE_DECL void gsl_vector_set (gsl_vector * v, const size_t i, double x); INLINE_DECL double * gsl_vector_ptr (gsl_vector * v, const size_t i); INLINE_DECL const double * gsl_vector_const_ptr (const gsl_vector * v, const size_t i); #ifdef HAVE_INLINE INLINE_FUN double gsl_vector_get (const gsl_vector * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VAL ("index out of range", GSL_EINVAL, 0); } #endif return v->data[i * v->stride]; } INLINE_FUN void gsl_vector_set (gsl_vector * v, const size_t i, double x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VOID ("index out of range", GSL_EINVAL); } #endif v->data[i * v->stride] = x; } INLINE_FUN double * gsl_vector_ptr (gsl_vector * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (double *) (v->data + i * v->stride); } INLINE_FUN const double * gsl_vector_const_ptr (const gsl_vector * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (const double *) (v->data + i * v->stride); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_VECTOR_DOUBLE_H__ */ gsl/vector/gsl_vector_long.h0000664000175000017500000001652314057135461014575 0ustar eddedd/* vector/gsl_vector_long.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_VECTOR_LONG_H__ #define __GSL_VECTOR_LONG_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size; size_t stride; long *data; gsl_block_long *block; int owner; } gsl_vector_long; typedef struct { gsl_vector_long vector; } _gsl_vector_long_view; typedef _gsl_vector_long_view gsl_vector_long_view; typedef struct { gsl_vector_long vector; } _gsl_vector_long_const_view; typedef const _gsl_vector_long_const_view gsl_vector_long_const_view; /* Allocation */ gsl_vector_long *gsl_vector_long_alloc (const size_t n); gsl_vector_long *gsl_vector_long_calloc (const size_t n); gsl_vector_long *gsl_vector_long_alloc_from_block (gsl_block_long * b, const size_t offset, const size_t n, const size_t stride); gsl_vector_long *gsl_vector_long_alloc_from_vector (gsl_vector_long * v, const size_t offset, const size_t n, const size_t stride); void gsl_vector_long_free (gsl_vector_long * v); /* Views */ _gsl_vector_long_view gsl_vector_long_view_array (long *v, size_t n); _gsl_vector_long_view gsl_vector_long_view_array_with_stride (long *base, size_t stride, size_t n); _gsl_vector_long_const_view gsl_vector_long_const_view_array (const long *v, size_t n); _gsl_vector_long_const_view gsl_vector_long_const_view_array_with_stride (const long *base, size_t stride, size_t n); _gsl_vector_long_view gsl_vector_long_subvector (gsl_vector_long *v, size_t i, size_t n); _gsl_vector_long_view gsl_vector_long_subvector_with_stride (gsl_vector_long *v, size_t i, size_t stride, size_t n); _gsl_vector_long_const_view gsl_vector_long_const_subvector (const gsl_vector_long *v, size_t i, size_t n); _gsl_vector_long_const_view gsl_vector_long_const_subvector_with_stride (const gsl_vector_long *v, size_t i, size_t stride, size_t n); /* Operations */ void gsl_vector_long_set_zero (gsl_vector_long * v); void gsl_vector_long_set_all (gsl_vector_long * v, long x); int gsl_vector_long_set_basis (gsl_vector_long * v, size_t i); int gsl_vector_long_fread (FILE * stream, gsl_vector_long * v); int gsl_vector_long_fwrite (FILE * stream, const gsl_vector_long * v); int gsl_vector_long_fscanf (FILE * stream, gsl_vector_long * v); int gsl_vector_long_fprintf (FILE * stream, const gsl_vector_long * v, const char *format); int gsl_vector_long_memcpy (gsl_vector_long * dest, const gsl_vector_long * src); int gsl_vector_long_reverse (gsl_vector_long * v); int gsl_vector_long_swap (gsl_vector_long * v, gsl_vector_long * w); int gsl_vector_long_swap_elements (gsl_vector_long * v, const size_t i, const size_t j); long gsl_vector_long_max (const gsl_vector_long * v); long gsl_vector_long_min (const gsl_vector_long * v); void gsl_vector_long_minmax (const gsl_vector_long * v, long * min_out, long * max_out); size_t gsl_vector_long_max_index (const gsl_vector_long * v); size_t gsl_vector_long_min_index (const gsl_vector_long * v); void gsl_vector_long_minmax_index (const gsl_vector_long * v, size_t * imin, size_t * imax); int gsl_vector_long_add (gsl_vector_long * a, const gsl_vector_long * b); int gsl_vector_long_sub (gsl_vector_long * a, const gsl_vector_long * b); int gsl_vector_long_mul (gsl_vector_long * a, const gsl_vector_long * b); int gsl_vector_long_div (gsl_vector_long * a, const gsl_vector_long * b); int gsl_vector_long_scale (gsl_vector_long * a, const long x); int gsl_vector_long_add_constant (gsl_vector_long * a, const long x); int gsl_vector_long_axpby (const long alpha, const gsl_vector_long * x, const long beta, gsl_vector_long * y); long gsl_vector_long_sum (const gsl_vector_long * a); int gsl_vector_long_equal (const gsl_vector_long * u, const gsl_vector_long * v); int gsl_vector_long_isnull (const gsl_vector_long * v); int gsl_vector_long_ispos (const gsl_vector_long * v); int gsl_vector_long_isneg (const gsl_vector_long * v); int gsl_vector_long_isnonneg (const gsl_vector_long * v); INLINE_DECL long gsl_vector_long_get (const gsl_vector_long * v, const size_t i); INLINE_DECL void gsl_vector_long_set (gsl_vector_long * v, const size_t i, long x); INLINE_DECL long * gsl_vector_long_ptr (gsl_vector_long * v, const size_t i); INLINE_DECL const long * gsl_vector_long_const_ptr (const gsl_vector_long * v, const size_t i); #ifdef HAVE_INLINE INLINE_FUN long gsl_vector_long_get (const gsl_vector_long * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VAL ("index out of range", GSL_EINVAL, 0); } #endif return v->data[i * v->stride]; } INLINE_FUN void gsl_vector_long_set (gsl_vector_long * v, const size_t i, long x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VOID ("index out of range", GSL_EINVAL); } #endif v->data[i * v->stride] = x; } INLINE_FUN long * gsl_vector_long_ptr (gsl_vector_long * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (long *) (v->data + i * v->stride); } INLINE_FUN const long * gsl_vector_long_const_ptr (const gsl_vector_long * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (const long *) (v->data + i * v->stride); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_VECTOR_LONG_H__ */ gsl/vector/gsl_vector_ulong.h0000664000175000017500000001726714057135461014770 0ustar eddedd/* vector/gsl_vector_ulong.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_VECTOR_ULONG_H__ #define __GSL_VECTOR_ULONG_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size; size_t stride; unsigned long *data; gsl_block_ulong *block; int owner; } gsl_vector_ulong; typedef struct { gsl_vector_ulong vector; } _gsl_vector_ulong_view; typedef _gsl_vector_ulong_view gsl_vector_ulong_view; typedef struct { gsl_vector_ulong vector; } _gsl_vector_ulong_const_view; typedef const _gsl_vector_ulong_const_view gsl_vector_ulong_const_view; /* Allocation */ gsl_vector_ulong *gsl_vector_ulong_alloc (const size_t n); gsl_vector_ulong *gsl_vector_ulong_calloc (const size_t n); gsl_vector_ulong *gsl_vector_ulong_alloc_from_block (gsl_block_ulong * b, const size_t offset, const size_t n, const size_t stride); gsl_vector_ulong *gsl_vector_ulong_alloc_from_vector (gsl_vector_ulong * v, const size_t offset, const size_t n, const size_t stride); void gsl_vector_ulong_free (gsl_vector_ulong * v); /* Views */ _gsl_vector_ulong_view gsl_vector_ulong_view_array (unsigned long *v, size_t n); _gsl_vector_ulong_view gsl_vector_ulong_view_array_with_stride (unsigned long *base, size_t stride, size_t n); _gsl_vector_ulong_const_view gsl_vector_ulong_const_view_array (const unsigned long *v, size_t n); _gsl_vector_ulong_const_view gsl_vector_ulong_const_view_array_with_stride (const unsigned long *base, size_t stride, size_t n); _gsl_vector_ulong_view gsl_vector_ulong_subvector (gsl_vector_ulong *v, size_t i, size_t n); _gsl_vector_ulong_view gsl_vector_ulong_subvector_with_stride (gsl_vector_ulong *v, size_t i, size_t stride, size_t n); _gsl_vector_ulong_const_view gsl_vector_ulong_const_subvector (const gsl_vector_ulong *v, size_t i, size_t n); _gsl_vector_ulong_const_view gsl_vector_ulong_const_subvector_with_stride (const gsl_vector_ulong *v, size_t i, size_t stride, size_t n); /* Operations */ void gsl_vector_ulong_set_zero (gsl_vector_ulong * v); void gsl_vector_ulong_set_all (gsl_vector_ulong * v, unsigned long x); int gsl_vector_ulong_set_basis (gsl_vector_ulong * v, size_t i); int gsl_vector_ulong_fread (FILE * stream, gsl_vector_ulong * v); int gsl_vector_ulong_fwrite (FILE * stream, const gsl_vector_ulong * v); int gsl_vector_ulong_fscanf (FILE * stream, gsl_vector_ulong * v); int gsl_vector_ulong_fprintf (FILE * stream, const gsl_vector_ulong * v, const char *format); int gsl_vector_ulong_memcpy (gsl_vector_ulong * dest, const gsl_vector_ulong * src); int gsl_vector_ulong_reverse (gsl_vector_ulong * v); int gsl_vector_ulong_swap (gsl_vector_ulong * v, gsl_vector_ulong * w); int gsl_vector_ulong_swap_elements (gsl_vector_ulong * v, const size_t i, const size_t j); unsigned long gsl_vector_ulong_max (const gsl_vector_ulong * v); unsigned long gsl_vector_ulong_min (const gsl_vector_ulong * v); void gsl_vector_ulong_minmax (const gsl_vector_ulong * v, unsigned long * min_out, unsigned long * max_out); size_t gsl_vector_ulong_max_index (const gsl_vector_ulong * v); size_t gsl_vector_ulong_min_index (const gsl_vector_ulong * v); void gsl_vector_ulong_minmax_index (const gsl_vector_ulong * v, size_t * imin, size_t * imax); int gsl_vector_ulong_add (gsl_vector_ulong * a, const gsl_vector_ulong * b); int gsl_vector_ulong_sub (gsl_vector_ulong * a, const gsl_vector_ulong * b); int gsl_vector_ulong_mul (gsl_vector_ulong * a, const gsl_vector_ulong * b); int gsl_vector_ulong_div (gsl_vector_ulong * a, const gsl_vector_ulong * b); int gsl_vector_ulong_scale (gsl_vector_ulong * a, const unsigned long x); int gsl_vector_ulong_add_constant (gsl_vector_ulong * a, const unsigned long x); int gsl_vector_ulong_axpby (const unsigned long alpha, const gsl_vector_ulong * x, const unsigned long beta, gsl_vector_ulong * y); unsigned long gsl_vector_ulong_sum (const gsl_vector_ulong * a); int gsl_vector_ulong_equal (const gsl_vector_ulong * u, const gsl_vector_ulong * v); int gsl_vector_ulong_isnull (const gsl_vector_ulong * v); int gsl_vector_ulong_ispos (const gsl_vector_ulong * v); int gsl_vector_ulong_isneg (const gsl_vector_ulong * v); int gsl_vector_ulong_isnonneg (const gsl_vector_ulong * v); INLINE_DECL unsigned long gsl_vector_ulong_get (const gsl_vector_ulong * v, const size_t i); INLINE_DECL void gsl_vector_ulong_set (gsl_vector_ulong * v, const size_t i, unsigned long x); INLINE_DECL unsigned long * gsl_vector_ulong_ptr (gsl_vector_ulong * v, const size_t i); INLINE_DECL const unsigned long * gsl_vector_ulong_const_ptr (const gsl_vector_ulong * v, const size_t i); #ifdef HAVE_INLINE INLINE_FUN unsigned long gsl_vector_ulong_get (const gsl_vector_ulong * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VAL ("index out of range", GSL_EINVAL, 0); } #endif return v->data[i * v->stride]; } INLINE_FUN void gsl_vector_ulong_set (gsl_vector_ulong * v, const size_t i, unsigned long x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VOID ("index out of range", GSL_EINVAL); } #endif v->data[i * v->stride] = x; } INLINE_FUN unsigned long * gsl_vector_ulong_ptr (gsl_vector_ulong * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (unsigned long *) (v->data + i * v->stride); } INLINE_FUN const unsigned long * gsl_vector_ulong_const_ptr (const gsl_vector_ulong * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (const unsigned long *) (v->data + i * v->stride); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_VECTOR_ULONG_H__ */ gsl/vector/gsl_vector_ushort.h0000664000175000017500000001752314057135461015163 0ustar eddedd/* vector/gsl_vector_ushort.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_VECTOR_USHORT_H__ #define __GSL_VECTOR_USHORT_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size; size_t stride; unsigned short *data; gsl_block_ushort *block; int owner; } gsl_vector_ushort; typedef struct { gsl_vector_ushort vector; } _gsl_vector_ushort_view; typedef _gsl_vector_ushort_view gsl_vector_ushort_view; typedef struct { gsl_vector_ushort vector; } _gsl_vector_ushort_const_view; typedef const _gsl_vector_ushort_const_view gsl_vector_ushort_const_view; /* Allocation */ gsl_vector_ushort *gsl_vector_ushort_alloc (const size_t n); gsl_vector_ushort *gsl_vector_ushort_calloc (const size_t n); gsl_vector_ushort *gsl_vector_ushort_alloc_from_block (gsl_block_ushort * b, const size_t offset, const size_t n, const size_t stride); gsl_vector_ushort *gsl_vector_ushort_alloc_from_vector (gsl_vector_ushort * v, const size_t offset, const size_t n, const size_t stride); void gsl_vector_ushort_free (gsl_vector_ushort * v); /* Views */ _gsl_vector_ushort_view gsl_vector_ushort_view_array (unsigned short *v, size_t n); _gsl_vector_ushort_view gsl_vector_ushort_view_array_with_stride (unsigned short *base, size_t stride, size_t n); _gsl_vector_ushort_const_view gsl_vector_ushort_const_view_array (const unsigned short *v, size_t n); _gsl_vector_ushort_const_view gsl_vector_ushort_const_view_array_with_stride (const unsigned short *base, size_t stride, size_t n); _gsl_vector_ushort_view gsl_vector_ushort_subvector (gsl_vector_ushort *v, size_t i, size_t n); _gsl_vector_ushort_view gsl_vector_ushort_subvector_with_stride (gsl_vector_ushort *v, size_t i, size_t stride, size_t n); _gsl_vector_ushort_const_view gsl_vector_ushort_const_subvector (const gsl_vector_ushort *v, size_t i, size_t n); _gsl_vector_ushort_const_view gsl_vector_ushort_const_subvector_with_stride (const gsl_vector_ushort *v, size_t i, size_t stride, size_t n); /* Operations */ void gsl_vector_ushort_set_zero (gsl_vector_ushort * v); void gsl_vector_ushort_set_all (gsl_vector_ushort * v, unsigned short x); int gsl_vector_ushort_set_basis (gsl_vector_ushort * v, size_t i); int gsl_vector_ushort_fread (FILE * stream, gsl_vector_ushort * v); int gsl_vector_ushort_fwrite (FILE * stream, const gsl_vector_ushort * v); int gsl_vector_ushort_fscanf (FILE * stream, gsl_vector_ushort * v); int gsl_vector_ushort_fprintf (FILE * stream, const gsl_vector_ushort * v, const char *format); int gsl_vector_ushort_memcpy (gsl_vector_ushort * dest, const gsl_vector_ushort * src); int gsl_vector_ushort_reverse (gsl_vector_ushort * v); int gsl_vector_ushort_swap (gsl_vector_ushort * v, gsl_vector_ushort * w); int gsl_vector_ushort_swap_elements (gsl_vector_ushort * v, const size_t i, const size_t j); unsigned short gsl_vector_ushort_max (const gsl_vector_ushort * v); unsigned short gsl_vector_ushort_min (const gsl_vector_ushort * v); void gsl_vector_ushort_minmax (const gsl_vector_ushort * v, unsigned short * min_out, unsigned short * max_out); size_t gsl_vector_ushort_max_index (const gsl_vector_ushort * v); size_t gsl_vector_ushort_min_index (const gsl_vector_ushort * v); void gsl_vector_ushort_minmax_index (const gsl_vector_ushort * v, size_t * imin, size_t * imax); int gsl_vector_ushort_add (gsl_vector_ushort * a, const gsl_vector_ushort * b); int gsl_vector_ushort_sub (gsl_vector_ushort * a, const gsl_vector_ushort * b); int gsl_vector_ushort_mul (gsl_vector_ushort * a, const gsl_vector_ushort * b); int gsl_vector_ushort_div (gsl_vector_ushort * a, const gsl_vector_ushort * b); int gsl_vector_ushort_scale (gsl_vector_ushort * a, const unsigned short x); int gsl_vector_ushort_add_constant (gsl_vector_ushort * a, const unsigned short x); int gsl_vector_ushort_axpby (const unsigned short alpha, const gsl_vector_ushort * x, const unsigned short beta, gsl_vector_ushort * y); unsigned short gsl_vector_ushort_sum (const gsl_vector_ushort * a); int gsl_vector_ushort_equal (const gsl_vector_ushort * u, const gsl_vector_ushort * v); int gsl_vector_ushort_isnull (const gsl_vector_ushort * v); int gsl_vector_ushort_ispos (const gsl_vector_ushort * v); int gsl_vector_ushort_isneg (const gsl_vector_ushort * v); int gsl_vector_ushort_isnonneg (const gsl_vector_ushort * v); INLINE_DECL unsigned short gsl_vector_ushort_get (const gsl_vector_ushort * v, const size_t i); INLINE_DECL void gsl_vector_ushort_set (gsl_vector_ushort * v, const size_t i, unsigned short x); INLINE_DECL unsigned short * gsl_vector_ushort_ptr (gsl_vector_ushort * v, const size_t i); INLINE_DECL const unsigned short * gsl_vector_ushort_const_ptr (const gsl_vector_ushort * v, const size_t i); #ifdef HAVE_INLINE INLINE_FUN unsigned short gsl_vector_ushort_get (const gsl_vector_ushort * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VAL ("index out of range", GSL_EINVAL, 0); } #endif return v->data[i * v->stride]; } INLINE_FUN void gsl_vector_ushort_set (gsl_vector_ushort * v, const size_t i, unsigned short x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VOID ("index out of range", GSL_EINVAL); } #endif v->data[i * v->stride] = x; } INLINE_FUN unsigned short * gsl_vector_ushort_ptr (gsl_vector_ushort * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (unsigned short *) (v->data + i * v->stride); } INLINE_FUN const unsigned short * gsl_vector_ushort_const_ptr (const gsl_vector_ushort * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (const unsigned short *) (v->data + i * v->stride); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_VECTOR_USHORT_H__ */ gsl/vector/swap.c0000644000175000017500000000336113536674414012355 0ustar eddedd#include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "swap_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/vector/test.c0000644000175000017500000001744613536674414012373 0ustar eddedd/* vector/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #if defined( _MSC_VER ) && defined( GSL_DLL ) #undef inline #define inline __forceinline #endif #if (!GSL_RANGE_CHECK) && defined(HAVE_INLINE) #undef GSL_RANGE_CHECK #define GSL_RANGE_CHECK 1 #endif #include #include #include #include #include #include #include #include int status = 0; #ifndef DESC #define DESC "" #endif #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "test_complex_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "test_complex_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "test_complex_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "test_source.c" #include "templates_off.h" #undef BASE_CHAR void my_error_handler (const char *reason, const char *file, int line, int err); int main (void) { size_t stride, ostride, N; gsl_ieee_env_setup (); for (N = 10; N < 1024; N = 2*N + 1) { for (stride = 1; stride < 5 ; stride++) { test_func (stride, N); test_float_func (stride, N); test_long_double_func (stride, N); test_ulong_func (stride, N); test_long_func (stride, N); test_uint_func (stride, N); test_int_func (stride, N); test_ushort_func (stride, N); test_short_func (stride, N); test_uchar_func (stride, N); test_char_func (stride, N); test_complex_func (stride, N); test_complex_float_func (stride, N); test_complex_long_double_func (stride, N); for (ostride = 1; ostride < 5 ; ostride++) { test_ops (stride, ostride, N); test_float_ops (stride, ostride, N); test_long_double_ops (stride, ostride, N); test_ulong_ops (stride, ostride, N); test_long_ops (stride, ostride, N); test_uint_ops (stride, ostride, N); test_int_ops (stride, ostride, N); test_ushort_ops (stride, ostride, N); test_short_ops (stride, ostride, N); test_uchar_ops (stride, ostride, N); test_char_ops (stride, ostride, N); test_complex_ops (stride, ostride, N); test_complex_float_ops (stride, ostride, N); test_complex_long_double_ops (stride, ostride, N); } test_text (stride, N); test_float_text (stride, N); #if HAVE_PRINTF_LONGDOUBLE test_long_double_text (stride, N); #endif test_ulong_text (stride, N); test_long_text (stride, N); test_uint_text (stride, N); test_int_text (stride, N); test_ushort_text (stride, N); test_short_text (stride, N); test_uchar_text (stride, N); test_char_text (stride, N); test_complex_text (stride, N); test_complex_float_text (stride, N); #if HAVE_PRINTF_LONGDOUBLE test_complex_long_double_text (stride, N); #endif test_file (stride, N); test_float_file (stride, N); test_long_double_file (stride, N); test_ulong_file (stride, N); test_long_file (stride, N); test_uint_file (stride, N); test_int_file (stride, N); test_ushort_file (stride, N); test_short_file (stride, N); test_uchar_file (stride, N); test_char_file (stride, N); test_complex_file (stride, N); test_complex_float_file (stride, N); test_complex_long_double_file (stride, N); } } test_alloc_zero_length (); test_float_alloc_zero_length (); test_long_double_alloc_zero_length (); test_ulong_alloc_zero_length (); test_long_alloc_zero_length (); test_uint_alloc_zero_length (); test_int_alloc_zero_length (); test_ushort_alloc_zero_length (); test_short_alloc_zero_length (); test_uchar_alloc_zero_length (); test_char_alloc_zero_length (); test_complex_alloc_zero_length (); test_complex_float_alloc_zero_length (); test_complex_long_double_alloc_zero_length (); test_calloc_zero_length (); test_float_calloc_zero_length (); test_long_double_calloc_zero_length (); test_ulong_calloc_zero_length (); test_long_calloc_zero_length (); test_uint_calloc_zero_length (); test_int_calloc_zero_length (); test_ushort_calloc_zero_length (); test_short_calloc_zero_length (); test_uchar_calloc_zero_length (); test_char_calloc_zero_length (); test_complex_calloc_zero_length (); test_complex_float_calloc_zero_length (); test_complex_long_double_calloc_zero_length (); #if GSL_RANGE_CHECK gsl_set_error_handler (&my_error_handler); for (N = 1; N < 1024; N *=2) { for (stride = 1; stride < 5 ; stride++) { test_trap (stride, N); test_float_trap (stride, N); test_long_double_trap (stride, N); test_ulong_trap (stride, N); test_long_trap (stride, N); test_uint_trap (stride, N); test_int_trap (stride, N); test_ushort_trap (stride, N); test_short_trap (stride, N); test_uchar_trap (stride, N); test_char_trap (stride, N); test_complex_trap (stride, N); test_complex_float_trap (stride, N); test_complex_long_double_trap (stride, N); } } #endif exit (gsl_test_summary ()); } void my_error_handler (const char *reason, const char *file, int line, int err) { if (0) printf ("(caught [%s:%d: %s (%d)])\n", file, line, reason, err); status = 1; } gsl/vector/gsl_vector_complex_long_double.h0000644000175000017500000002366113536675317017667 0ustar eddedd/* vector/gsl_vector_complex_long_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_VECTOR_COMPLEX_LONG_DOUBLE_H__ #define __GSL_VECTOR_COMPLEX_LONG_DOUBLE_H__ #include #include #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size; size_t stride; long double *data; gsl_block_complex_long_double *block; int owner; } gsl_vector_complex_long_double; typedef struct { gsl_vector_complex_long_double vector; } _gsl_vector_complex_long_double_view; typedef _gsl_vector_complex_long_double_view gsl_vector_complex_long_double_view; typedef struct { gsl_vector_complex_long_double vector; } _gsl_vector_complex_long_double_const_view; typedef const _gsl_vector_complex_long_double_const_view gsl_vector_complex_long_double_const_view; /* Allocation */ gsl_vector_complex_long_double *gsl_vector_complex_long_double_alloc (const size_t n); gsl_vector_complex_long_double *gsl_vector_complex_long_double_calloc (const size_t n); gsl_vector_complex_long_double * gsl_vector_complex_long_double_alloc_from_block (gsl_block_complex_long_double * b, const size_t offset, const size_t n, const size_t stride); gsl_vector_complex_long_double * gsl_vector_complex_long_double_alloc_from_vector (gsl_vector_complex_long_double * v, const size_t offset, const size_t n, const size_t stride); void gsl_vector_complex_long_double_free (gsl_vector_complex_long_double * v); /* Views */ _gsl_vector_complex_long_double_view gsl_vector_complex_long_double_view_array (long double *base, size_t n); _gsl_vector_complex_long_double_view gsl_vector_complex_long_double_view_array_with_stride (long double *base, size_t stride, size_t n); _gsl_vector_complex_long_double_const_view gsl_vector_complex_long_double_const_view_array (const long double *base, size_t n); _gsl_vector_complex_long_double_const_view gsl_vector_complex_long_double_const_view_array_with_stride (const long double *base, size_t stride, size_t n); _gsl_vector_complex_long_double_view gsl_vector_complex_long_double_subvector (gsl_vector_complex_long_double *base, size_t i, size_t n); _gsl_vector_complex_long_double_view gsl_vector_complex_long_double_subvector_with_stride (gsl_vector_complex_long_double *v, size_t i, size_t stride, size_t n); _gsl_vector_complex_long_double_const_view gsl_vector_complex_long_double_const_subvector (const gsl_vector_complex_long_double *base, size_t i, size_t n); _gsl_vector_complex_long_double_const_view gsl_vector_complex_long_double_const_subvector_with_stride (const gsl_vector_complex_long_double *v, size_t i, size_t stride, size_t n); _gsl_vector_long_double_view gsl_vector_complex_long_double_real (gsl_vector_complex_long_double *v); _gsl_vector_long_double_view gsl_vector_complex_long_double_imag (gsl_vector_complex_long_double *v); _gsl_vector_long_double_const_view gsl_vector_complex_long_double_const_real (const gsl_vector_complex_long_double *v); _gsl_vector_long_double_const_view gsl_vector_complex_long_double_const_imag (const gsl_vector_complex_long_double *v); /* Operations */ void gsl_vector_complex_long_double_set_zero (gsl_vector_complex_long_double * v); void gsl_vector_complex_long_double_set_all (gsl_vector_complex_long_double * v, gsl_complex_long_double z); int gsl_vector_complex_long_double_set_basis (gsl_vector_complex_long_double * v, size_t i); int gsl_vector_complex_long_double_fread (FILE * stream, gsl_vector_complex_long_double * v); int gsl_vector_complex_long_double_fwrite (FILE * stream, const gsl_vector_complex_long_double * v); int gsl_vector_complex_long_double_fscanf (FILE * stream, gsl_vector_complex_long_double * v); int gsl_vector_complex_long_double_fprintf (FILE * stream, const gsl_vector_complex_long_double * v, const char *format); int gsl_vector_complex_long_double_memcpy (gsl_vector_complex_long_double * dest, const gsl_vector_complex_long_double * src); int gsl_vector_complex_long_double_reverse (gsl_vector_complex_long_double * v); int gsl_vector_complex_long_double_swap (gsl_vector_complex_long_double * v, gsl_vector_complex_long_double * w); int gsl_vector_complex_long_double_swap_elements (gsl_vector_complex_long_double * v, const size_t i, const size_t j); int gsl_vector_complex_long_double_equal (const gsl_vector_complex_long_double * u, const gsl_vector_complex_long_double * v); int gsl_vector_complex_long_double_isnull (const gsl_vector_complex_long_double * v); int gsl_vector_complex_long_double_ispos (const gsl_vector_complex_long_double * v); int gsl_vector_complex_long_double_isneg (const gsl_vector_complex_long_double * v); int gsl_vector_complex_long_double_isnonneg (const gsl_vector_complex_long_double * v); int gsl_vector_complex_long_double_add (gsl_vector_complex_long_double * a, const gsl_vector_complex_long_double * b); int gsl_vector_complex_long_double_sub (gsl_vector_complex_long_double * a, const gsl_vector_complex_long_double * b); int gsl_vector_complex_long_double_mul (gsl_vector_complex_long_double * a, const gsl_vector_complex_long_double * b); int gsl_vector_complex_long_double_div (gsl_vector_complex_long_double * a, const gsl_vector_complex_long_double * b); int gsl_vector_complex_long_double_scale (gsl_vector_complex_long_double * a, const gsl_complex_long_double x); int gsl_vector_complex_long_double_add_constant (gsl_vector_complex_long_double * a, const gsl_complex_long_double x); int gsl_vector_complex_long_double_axpby (const gsl_complex_long_double alpha, const gsl_vector_complex_long_double * x, const gsl_complex_long_double beta, gsl_vector_complex_long_double * y); INLINE_DECL gsl_complex_long_double gsl_vector_complex_long_double_get (const gsl_vector_complex_long_double * v, const size_t i); INLINE_DECL void gsl_vector_complex_long_double_set (gsl_vector_complex_long_double * v, const size_t i, gsl_complex_long_double z); INLINE_DECL gsl_complex_long_double *gsl_vector_complex_long_double_ptr (gsl_vector_complex_long_double * v, const size_t i); INLINE_DECL const gsl_complex_long_double *gsl_vector_complex_long_double_const_ptr (const gsl_vector_complex_long_double * v, const size_t i); #ifdef HAVE_INLINE INLINE_FUN gsl_complex_long_double gsl_vector_complex_long_double_get (const gsl_vector_complex_long_double * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { gsl_complex_long_double zero = {{0, 0}}; GSL_ERROR_VAL ("index out of range", GSL_EINVAL, zero); } #endif return *GSL_COMPLEX_LONG_DOUBLE_AT (v, i); } INLINE_FUN void gsl_vector_complex_long_double_set (gsl_vector_complex_long_double * v, const size_t i, gsl_complex_long_double z) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VOID ("index out of range", GSL_EINVAL); } #endif *GSL_COMPLEX_LONG_DOUBLE_AT (v, i) = z; } INLINE_FUN gsl_complex_long_double * gsl_vector_complex_long_double_ptr (gsl_vector_complex_long_double * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return GSL_COMPLEX_LONG_DOUBLE_AT (v, i); } INLINE_FUN const gsl_complex_long_double * gsl_vector_complex_long_double_const_ptr (const gsl_vector_complex_long_double * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return GSL_COMPLEX_LONG_DOUBLE_AT (v, i); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_VECTOR_COMPLEX_LONG_DOUBLE_H__ */ gsl/vector/copy_source.c0000664000175000017500000000345614057135461013735 0ustar eddedd/* vector/copy_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * Copyright (C) 2019 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION (gsl_vector, memcpy) (TYPE (gsl_vector) * dest, const TYPE (gsl_vector) * src) { const size_t src_size = src->size; const size_t dest_size = dest->size; if (src_size != dest_size) { GSL_ERROR ("vector lengths are not equal", GSL_EBADLEN); } #if defined(BASE_DOUBLE) gsl_blas_dcopy(src, dest); #elif defined(BASE_FLOAT) gsl_blas_scopy(src, dest); #elif defined(BASE_GSL_COMPLEX) gsl_blas_zcopy(src, dest); #elif defined(BASE_GSL_COMPLEX_FLOAT) gsl_blas_ccopy(src, dest); #else { const size_t src_stride = src->stride ; const size_t dest_stride = dest->stride ; size_t j; for (j = 0; j < src_size; j++) { size_t k; for (k = 0; k < MULTIPLICITY; k++) { dest->data[MULTIPLICITY * dest_stride * j + k] = src->data[MULTIPLICITY * src_stride * j + k]; } } } #endif return GSL_SUCCESS; } gsl/vector/gsl_vector_int.h0000664000175000017500000001626714057135461014435 0ustar eddedd/* vector/gsl_vector_int.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_VECTOR_INT_H__ #define __GSL_VECTOR_INT_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t size; size_t stride; int *data; gsl_block_int *block; int owner; } gsl_vector_int; typedef struct { gsl_vector_int vector; } _gsl_vector_int_view; typedef _gsl_vector_int_view gsl_vector_int_view; typedef struct { gsl_vector_int vector; } _gsl_vector_int_const_view; typedef const _gsl_vector_int_const_view gsl_vector_int_const_view; /* Allocation */ gsl_vector_int *gsl_vector_int_alloc (const size_t n); gsl_vector_int *gsl_vector_int_calloc (const size_t n); gsl_vector_int *gsl_vector_int_alloc_from_block (gsl_block_int * b, const size_t offset, const size_t n, const size_t stride); gsl_vector_int *gsl_vector_int_alloc_from_vector (gsl_vector_int * v, const size_t offset, const size_t n, const size_t stride); void gsl_vector_int_free (gsl_vector_int * v); /* Views */ _gsl_vector_int_view gsl_vector_int_view_array (int *v, size_t n); _gsl_vector_int_view gsl_vector_int_view_array_with_stride (int *base, size_t stride, size_t n); _gsl_vector_int_const_view gsl_vector_int_const_view_array (const int *v, size_t n); _gsl_vector_int_const_view gsl_vector_int_const_view_array_with_stride (const int *base, size_t stride, size_t n); _gsl_vector_int_view gsl_vector_int_subvector (gsl_vector_int *v, size_t i, size_t n); _gsl_vector_int_view gsl_vector_int_subvector_with_stride (gsl_vector_int *v, size_t i, size_t stride, size_t n); _gsl_vector_int_const_view gsl_vector_int_const_subvector (const gsl_vector_int *v, size_t i, size_t n); _gsl_vector_int_const_view gsl_vector_int_const_subvector_with_stride (const gsl_vector_int *v, size_t i, size_t stride, size_t n); /* Operations */ void gsl_vector_int_set_zero (gsl_vector_int * v); void gsl_vector_int_set_all (gsl_vector_int * v, int x); int gsl_vector_int_set_basis (gsl_vector_int * v, size_t i); int gsl_vector_int_fread (FILE * stream, gsl_vector_int * v); int gsl_vector_int_fwrite (FILE * stream, const gsl_vector_int * v); int gsl_vector_int_fscanf (FILE * stream, gsl_vector_int * v); int gsl_vector_int_fprintf (FILE * stream, const gsl_vector_int * v, const char *format); int gsl_vector_int_memcpy (gsl_vector_int * dest, const gsl_vector_int * src); int gsl_vector_int_reverse (gsl_vector_int * v); int gsl_vector_int_swap (gsl_vector_int * v, gsl_vector_int * w); int gsl_vector_int_swap_elements (gsl_vector_int * v, const size_t i, const size_t j); int gsl_vector_int_max (const gsl_vector_int * v); int gsl_vector_int_min (const gsl_vector_int * v); void gsl_vector_int_minmax (const gsl_vector_int * v, int * min_out, int * max_out); size_t gsl_vector_int_max_index (const gsl_vector_int * v); size_t gsl_vector_int_min_index (const gsl_vector_int * v); void gsl_vector_int_minmax_index (const gsl_vector_int * v, size_t * imin, size_t * imax); int gsl_vector_int_add (gsl_vector_int * a, const gsl_vector_int * b); int gsl_vector_int_sub (gsl_vector_int * a, const gsl_vector_int * b); int gsl_vector_int_mul (gsl_vector_int * a, const gsl_vector_int * b); int gsl_vector_int_div (gsl_vector_int * a, const gsl_vector_int * b); int gsl_vector_int_scale (gsl_vector_int * a, const int x); int gsl_vector_int_add_constant (gsl_vector_int * a, const int x); int gsl_vector_int_axpby (const int alpha, const gsl_vector_int * x, const int beta, gsl_vector_int * y); int gsl_vector_int_sum (const gsl_vector_int * a); int gsl_vector_int_equal (const gsl_vector_int * u, const gsl_vector_int * v); int gsl_vector_int_isnull (const gsl_vector_int * v); int gsl_vector_int_ispos (const gsl_vector_int * v); int gsl_vector_int_isneg (const gsl_vector_int * v); int gsl_vector_int_isnonneg (const gsl_vector_int * v); INLINE_DECL int gsl_vector_int_get (const gsl_vector_int * v, const size_t i); INLINE_DECL void gsl_vector_int_set (gsl_vector_int * v, const size_t i, int x); INLINE_DECL int * gsl_vector_int_ptr (gsl_vector_int * v, const size_t i); INLINE_DECL const int * gsl_vector_int_const_ptr (const gsl_vector_int * v, const size_t i); #ifdef HAVE_INLINE INLINE_FUN int gsl_vector_int_get (const gsl_vector_int * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VAL ("index out of range", GSL_EINVAL, 0); } #endif return v->data[i * v->stride]; } INLINE_FUN void gsl_vector_int_set (gsl_vector_int * v, const size_t i, int x) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_VOID ("index out of range", GSL_EINVAL); } #endif v->data[i * v->stride] = x; } INLINE_FUN int * gsl_vector_int_ptr (gsl_vector_int * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (int *) (v->data + i * v->stride); } INLINE_FUN const int * gsl_vector_int_const_ptr (const gsl_vector_int * v, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= v->size)) { GSL_ERROR_NULL ("index out of range", GSL_EINVAL); } #endif return (const int *) (v->data + i * v->stride); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_VECTOR_INT_H__ */ gsl/vector/file.c0000644000175000017500000000343713536674414012326 0ustar eddedd#include #include #include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "file_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/vector/test_static.c0000644000175000017500000000015113536674414013723 0ustar eddedd#undef HAVE_INLINE #ifndef NO_INLINE #define NO_INLINE #endif #define DESC " (static)" #include "test.c" gsl/vector/prop.c0000644000175000017500000000336113536674414012363 0ustar eddedd#include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "prop_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/INSTALL0000644000175000017500000003661013536674414010771 0ustar eddeddInstallation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command `./configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. gsl/cdf/0000755000175000017500000000000014057135461010457 5ustar eddeddgsl/cdf/error.h0000644000175000017500000000021413536674414011765 0ustar eddedd/* CDF_ERROR: call the error handler, and return a NAN. */ #define CDF_ERROR(reason, gsl_errno) GSL_ERROR_VAL(reason, gsl_errno, GSL_NAN) gsl/cdf/gauss.c0000644000175000017500000001577013536674414011766 0ustar eddedd/* cdf/gauss.c * * Copyright (C) 2002, 2004 Jason H. Stover. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Computes the cumulative distribution function for the Gaussian * distribution using a rational function approximation. The * computation is for the standard Normal distribution, i.e., mean 0 * and standard deviation 1. If you want to compute Pr(X < t) for a * Gaussian random variable X with non-zero mean m and standard * deviation sd not equal to 1, find gsl_cdf_ugaussian ((t-m)/sd). * This approximation is accurate to at least double precision. The * accuracy was verified with a pari-gp script. The largest error * found was about 1.4E-20. The coefficients were derived by Cody. * * References: * * W.J. Cody. "Rational Chebyshev Approximations for the Error * Function," Mathematics of Computation, v23 n107 1969, 631-637. * * W. Fraser, J.F Hart. "On the Computation of Rational Approximations * to Continuous Functions," Communications of the ACM, v5 1962. * * W.J. Kennedy Jr., J.E. Gentle. "Statistical Computing." Marcel Dekker. 1980. * * */ #include #include #include #include #ifndef M_1_SQRT2PI #define M_1_SQRT2PI (M_2_SQRTPI * M_SQRT1_2 / 2.0) #endif #define SQRT32 (4.0 * M_SQRT2) /* * IEEE double precision dependent constants. * * GAUSS_EPSILON: Smallest positive value such that * gsl_cdf_gaussian(x) > 0.5. * GAUSS_XUPPER: Largest value x such that gsl_cdf_gaussian(x) < 1.0. * GAUSS_XLOWER: Smallest value x such that gsl_cdf_gaussian(x) > 0.0. */ #define GAUSS_EPSILON (GSL_DBL_EPSILON / 2) #define GAUSS_XUPPER (8.572) #define GAUSS_XLOWER (-37.519) #define GAUSS_SCALE (16.0) static double get_del (double x, double rational) { double xsq = 0.0; double del = 0.0; double result = 0.0; xsq = floor (x * GAUSS_SCALE) / GAUSS_SCALE; del = (x - xsq) * (x + xsq); del *= 0.5; result = exp (-0.5 * xsq * xsq) * exp (-1.0 * del) * rational; return result; } /* * Normal cdf for fabs(x) < 0.66291 */ static double gauss_small (const double x) { unsigned int i; double result = 0.0; double xsq; double xnum; double xden; const double a[5] = { 2.2352520354606839287, 161.02823106855587881, 1067.6894854603709582, 18154.981253343561249, 0.065682337918207449113 }; const double b[4] = { 47.20258190468824187, 976.09855173777669322, 10260.932208618978205, 45507.789335026729956 }; xsq = x * x; xnum = a[4] * xsq; xden = xsq; for (i = 0; i < 3; i++) { xnum = (xnum + a[i]) * xsq; xden = (xden + b[i]) * xsq; } result = x * (xnum + a[3]) / (xden + b[3]); return result; } /* * Normal cdf for 0.66291 < fabs(x) < sqrt(32). */ static double gauss_medium (const double x) { unsigned int i; double temp = 0.0; double result = 0.0; double xnum; double xden; double absx; const double c[9] = { 0.39894151208813466764, 8.8831497943883759412, 93.506656132177855979, 597.27027639480026226, 2494.5375852903726711, 6848.1904505362823326, 11602.651437647350124, 9842.7148383839780218, 1.0765576773720192317e-8 }; const double d[8] = { 22.266688044328115691, 235.38790178262499861, 1519.377599407554805, 6485.558298266760755, 18615.571640885098091, 34900.952721145977266, 38912.003286093271411, 19685.429676859990727 }; absx = fabs (x); xnum = c[8] * absx; xden = absx; for (i = 0; i < 7; i++) { xnum = (xnum + c[i]) * absx; xden = (xden + d[i]) * absx; } temp = (xnum + c[7]) / (xden + d[7]); result = get_del (x, temp); return result; } /* * Normal cdf for * {sqrt(32) < x < GAUSS_XUPPER} union { GAUSS_XLOWER < x < -sqrt(32) }. */ static double gauss_large (const double x) { int i; double result; double xsq; double temp; double xnum; double xden; double absx; const double p[6] = { 0.21589853405795699, 0.1274011611602473639, 0.022235277870649807, 0.001421619193227893466, 2.9112874951168792e-5, 0.02307344176494017303 }; const double q[5] = { 1.28426009614491121, 0.468238212480865118, 0.0659881378689285515, 0.00378239633202758244, 7.29751555083966205e-5 }; absx = fabs (x); xsq = 1.0 / (x * x); xnum = p[5] * xsq; xden = xsq; for (i = 0; i < 4; i++) { xnum = (xnum + p[i]) * xsq; xden = (xden + q[i]) * xsq; } temp = xsq * (xnum + p[4]) / (xden + q[4]); temp = (M_1_SQRT2PI - temp) / absx; result = get_del (x, temp); return result; } double gsl_cdf_ugaussian_P (const double x) { double result; double absx = fabs (x); if (absx < GAUSS_EPSILON) { result = 0.5; return result; } else if (absx < 0.66291) { result = 0.5 + gauss_small (x); return result; } else if (absx < SQRT32) { result = gauss_medium (x); if (x > 0.0) { result = 1.0 - result; } return result; } else if (x > GAUSS_XUPPER) { result = 1.0; return result; } else if (x < GAUSS_XLOWER) { result = 0.0; return result; } else { result = gauss_large (x); if (x > 0.0) { result = 1.0 - result; } } return result; } double gsl_cdf_ugaussian_Q (const double x) { double result; double absx = fabs (x); if (absx < GAUSS_EPSILON) { result = 0.5; return result; } else if (absx < 0.66291) { result = gauss_small (x); if (x < 0.0) { result = fabs (result) + 0.5; } else { result = 0.5 - result; } return result; } else if (absx < SQRT32) { result = gauss_medium (x); if (x < 0.0) { result = 1.0 - result; } return result; } else if (x > -(GAUSS_XLOWER)) { result = 0.0; return result; } else if (x < -(GAUSS_XUPPER)) { result = 1.0; return result; } else { result = gauss_large (x); if (x < 0.0) { result = 1.0 - result; } } return result; } double gsl_cdf_gaussian_P (const double x, const double sigma) { return gsl_cdf_ugaussian_P (x / sigma); } double gsl_cdf_gaussian_Q (const double x, const double sigma) { return gsl_cdf_ugaussian_Q (x / sigma); } gsl/cdf/beta.c0000644000175000017500000000260713536674414011552 0ustar eddedd/* cdf/cdf_beta.c * * Copyright (C) 2003, 2007 Brian Gough. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include "beta_inc.c" double gsl_cdf_beta_P (const double x, const double a, const double b) { double P; if (x <= 0.0 ) { return 0.0; } if ( x >= 1.0 ) { return 1.0; } P = beta_inc_AXPY (1.0, 0.0, a, b, x); return P; } double gsl_cdf_beta_Q (const double x, const double a, const double b) { double Q; if ( x >= 1.0) { return 0.0; } if ( x <= 0.0 ) { return 1.0; } Q = beta_inc_AXPY (-1.0, 1.0, a, b, x); return Q; } gsl/cdf/lognormal.c0000644000175000017500000000232313536674414012624 0ustar eddedd/* cdf/lognormal.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_lognormal_P (const double x, const double zeta, const double sigma) { double u = (log (x) - zeta) / sigma; double P = gsl_cdf_ugaussian_P (u); return P; } double gsl_cdf_lognormal_Q (const double x, const double zeta, const double sigma) { double u = (log (x) - zeta) / sigma; double Q = gsl_cdf_ugaussian_Q (u); return Q; } gsl/cdf/Makefile.in0000664000175000017500000012575114057135461012541 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = cdf ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslcdf_la_LIBADD = am_libgslcdf_la_OBJECTS = beta.lo betainv.lo cauchy.lo cauchyinv.lo \ chisq.lo chisqinv.lo exponential.lo exponentialinv.lo \ exppow.lo fdist.lo fdistinv.lo flat.lo flatinv.lo gamma.lo \ gammainv.lo gauss.lo gaussinv.lo gumbel1.lo gumbel1inv.lo \ gumbel2.lo gumbel2inv.lo laplace.lo laplaceinv.lo logistic.lo \ logisticinv.lo lognormal.lo lognormalinv.lo pareto.lo \ paretoinv.lo rayleigh.lo rayleighinv.lo tdist.lo tdistinv.lo \ weibull.lo weibullinv.lo binomial.lo poisson.lo geometric.lo \ nbinomial.lo pascal.lo hypergeometric.lo libgslcdf_la_OBJECTS = $(am_libgslcdf_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslcdf.la ../randist/libgslrandist.la \ ../rng/libgslrng.la ../specfunc/libgslspecfunc.la \ ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/beta.Plo ./$(DEPDIR)/betainv.Plo \ ./$(DEPDIR)/binomial.Plo ./$(DEPDIR)/cauchy.Plo \ ./$(DEPDIR)/cauchyinv.Plo ./$(DEPDIR)/chisq.Plo \ ./$(DEPDIR)/chisqinv.Plo ./$(DEPDIR)/exponential.Plo \ ./$(DEPDIR)/exponentialinv.Plo ./$(DEPDIR)/exppow.Plo \ ./$(DEPDIR)/fdist.Plo ./$(DEPDIR)/fdistinv.Plo \ ./$(DEPDIR)/flat.Plo ./$(DEPDIR)/flatinv.Plo \ ./$(DEPDIR)/gamma.Plo ./$(DEPDIR)/gammainv.Plo \ ./$(DEPDIR)/gauss.Plo ./$(DEPDIR)/gaussinv.Plo \ ./$(DEPDIR)/geometric.Plo ./$(DEPDIR)/gumbel1.Plo \ ./$(DEPDIR)/gumbel1inv.Plo ./$(DEPDIR)/gumbel2.Plo \ ./$(DEPDIR)/gumbel2inv.Plo ./$(DEPDIR)/hypergeometric.Plo \ ./$(DEPDIR)/laplace.Plo ./$(DEPDIR)/laplaceinv.Plo \ ./$(DEPDIR)/logistic.Plo ./$(DEPDIR)/logisticinv.Plo \ ./$(DEPDIR)/lognormal.Plo ./$(DEPDIR)/lognormalinv.Plo \ ./$(DEPDIR)/nbinomial.Plo ./$(DEPDIR)/pareto.Plo \ ./$(DEPDIR)/paretoinv.Plo ./$(DEPDIR)/pascal.Plo \ ./$(DEPDIR)/poisson.Plo ./$(DEPDIR)/rayleigh.Plo \ ./$(DEPDIR)/rayleighinv.Plo ./$(DEPDIR)/tdist.Plo \ ./$(DEPDIR)/tdistinv.Plo ./$(DEPDIR)/test.Po \ ./$(DEPDIR)/weibull.Plo ./$(DEPDIR)/weibullinv.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslcdf_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslcdf_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslcdf.la pkginclude_HEADERS = gsl_cdf.h AM_CPPFLAGS = -I$(top_srcdir) libgslcdf_la_SOURCES = beta.c betainv.c cauchy.c cauchyinv.c chisq.c chisqinv.c exponential.c exponentialinv.c exppow.c fdist.c fdistinv.c flat.c flatinv.c gamma.c gammainv.c gauss.c gaussinv.c gumbel1.c gumbel1inv.c gumbel2.c gumbel2inv.c laplace.c laplaceinv.c logistic.c logisticinv.c lognormal.c lognormalinv.c pareto.c paretoinv.c rayleigh.c rayleighinv.c tdist.c tdistinv.c weibull.c weibullinv.c binomial.c poisson.c geometric.c nbinomial.c pascal.c hypergeometric.c noinst_HEADERS = beta_inc.c rat_eval.h test_auto.c error.h TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslcdf.la ../randist/libgslrandist.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cdf/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu cdf/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslcdf.la: $(libgslcdf_la_OBJECTS) $(libgslcdf_la_DEPENDENCIES) $(EXTRA_libgslcdf_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslcdf_la_OBJECTS) $(libgslcdf_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/beta.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/betainv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binomial.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cauchy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cauchyinv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chisq.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chisqinv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exponential.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exponentialinv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exppow.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdistinv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flatinv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gamma.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gammainv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gauss.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gaussinv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/geometric.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gumbel1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gumbel1inv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gumbel2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gumbel2inv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hypergeometric.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/laplace.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/laplaceinv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logistic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logisticinv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lognormal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lognormalinv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nbinomial.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pareto.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paretoinv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pascal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poisson.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rayleigh.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rayleighinv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdistinv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/weibull.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/weibullinv.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/beta.Plo -rm -f ./$(DEPDIR)/betainv.Plo -rm -f ./$(DEPDIR)/binomial.Plo -rm -f ./$(DEPDIR)/cauchy.Plo -rm -f ./$(DEPDIR)/cauchyinv.Plo -rm -f ./$(DEPDIR)/chisq.Plo -rm -f ./$(DEPDIR)/chisqinv.Plo -rm -f ./$(DEPDIR)/exponential.Plo -rm -f ./$(DEPDIR)/exponentialinv.Plo -rm -f ./$(DEPDIR)/exppow.Plo -rm -f ./$(DEPDIR)/fdist.Plo -rm -f ./$(DEPDIR)/fdistinv.Plo -rm -f ./$(DEPDIR)/flat.Plo -rm -f ./$(DEPDIR)/flatinv.Plo -rm -f ./$(DEPDIR)/gamma.Plo -rm -f ./$(DEPDIR)/gammainv.Plo -rm -f ./$(DEPDIR)/gauss.Plo -rm -f ./$(DEPDIR)/gaussinv.Plo -rm -f ./$(DEPDIR)/geometric.Plo -rm -f ./$(DEPDIR)/gumbel1.Plo -rm -f ./$(DEPDIR)/gumbel1inv.Plo -rm -f ./$(DEPDIR)/gumbel2.Plo -rm -f ./$(DEPDIR)/gumbel2inv.Plo -rm -f ./$(DEPDIR)/hypergeometric.Plo -rm -f ./$(DEPDIR)/laplace.Plo -rm -f ./$(DEPDIR)/laplaceinv.Plo -rm -f ./$(DEPDIR)/logistic.Plo -rm -f ./$(DEPDIR)/logisticinv.Plo -rm -f ./$(DEPDIR)/lognormal.Plo -rm -f ./$(DEPDIR)/lognormalinv.Plo -rm -f ./$(DEPDIR)/nbinomial.Plo -rm -f ./$(DEPDIR)/pareto.Plo -rm -f ./$(DEPDIR)/paretoinv.Plo -rm -f ./$(DEPDIR)/pascal.Plo -rm -f ./$(DEPDIR)/poisson.Plo -rm -f ./$(DEPDIR)/rayleigh.Plo -rm -f ./$(DEPDIR)/rayleighinv.Plo -rm -f ./$(DEPDIR)/tdist.Plo -rm -f ./$(DEPDIR)/tdistinv.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/weibull.Plo -rm -f ./$(DEPDIR)/weibullinv.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/beta.Plo -rm -f ./$(DEPDIR)/betainv.Plo -rm -f ./$(DEPDIR)/binomial.Plo -rm -f ./$(DEPDIR)/cauchy.Plo -rm -f ./$(DEPDIR)/cauchyinv.Plo -rm -f ./$(DEPDIR)/chisq.Plo -rm -f ./$(DEPDIR)/chisqinv.Plo -rm -f ./$(DEPDIR)/exponential.Plo -rm -f ./$(DEPDIR)/exponentialinv.Plo -rm -f ./$(DEPDIR)/exppow.Plo -rm -f ./$(DEPDIR)/fdist.Plo -rm -f ./$(DEPDIR)/fdistinv.Plo -rm -f ./$(DEPDIR)/flat.Plo -rm -f ./$(DEPDIR)/flatinv.Plo -rm -f ./$(DEPDIR)/gamma.Plo -rm -f ./$(DEPDIR)/gammainv.Plo -rm -f ./$(DEPDIR)/gauss.Plo -rm -f ./$(DEPDIR)/gaussinv.Plo -rm -f ./$(DEPDIR)/geometric.Plo -rm -f ./$(DEPDIR)/gumbel1.Plo -rm -f ./$(DEPDIR)/gumbel1inv.Plo -rm -f ./$(DEPDIR)/gumbel2.Plo -rm -f ./$(DEPDIR)/gumbel2inv.Plo -rm -f ./$(DEPDIR)/hypergeometric.Plo -rm -f ./$(DEPDIR)/laplace.Plo -rm -f ./$(DEPDIR)/laplaceinv.Plo -rm -f ./$(DEPDIR)/logistic.Plo -rm -f ./$(DEPDIR)/logisticinv.Plo -rm -f ./$(DEPDIR)/lognormal.Plo -rm -f ./$(DEPDIR)/lognormalinv.Plo -rm -f ./$(DEPDIR)/nbinomial.Plo -rm -f ./$(DEPDIR)/pareto.Plo -rm -f ./$(DEPDIR)/paretoinv.Plo -rm -f ./$(DEPDIR)/pascal.Plo -rm -f ./$(DEPDIR)/poisson.Plo -rm -f ./$(DEPDIR)/rayleigh.Plo -rm -f ./$(DEPDIR)/rayleighinv.Plo -rm -f ./$(DEPDIR)/tdist.Plo -rm -f ./$(DEPDIR)/tdistinv.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/weibull.Plo -rm -f ./$(DEPDIR)/weibullinv.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/cdf/weibullinv.c0000644000175000017500000000253113536674414013013 0ustar eddedd/* cdf/weibullinv.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_weibull_Pinv (const double P, const double a, const double b) { double x; if (P == 1.0) { return GSL_POSINF; } else if (P == 0.0) { return 0.0; } x = a * pow(-log1p(-P), 1/b); return x; } double gsl_cdf_weibull_Qinv (const double Q, const double a, const double b) { double x; if (Q == 0.0) { return GSL_POSINF; } else if (Q == 1.0) { return 0.0; } x = a * pow(-log(Q), 1/b); return x; } gsl/cdf/tdistinv.c0000644000175000017500000001206013536674414012475 0ustar eddedd/* cdf/tdistinv.c * * Copyright (C) 2007, 2010 Brian Gough * Copyright (C) 2002 Jason H. Stover. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include static double inv_cornish_fisher (double z, double nu) { double a = 1 / (nu - 0.5); double b = 48.0 / (a * a); double cf1 = z * (3 + z * z); double cf2 = z * (945 + z * z * (360 + z * z * (63 + z * z * 4))); double y = z - cf1 / b + cf2 / (10 * b * b); double t = GSL_SIGN (z) * sqrt (nu * expm1 (a * y * y)); return t; } double gsl_cdf_tdist_Pinv (const double P, const double nu) { double x, ptail; if (P == 1.0) { return GSL_POSINF; } else if (P == 0.0) { return GSL_NEGINF; } if (nu == 1.0) { x = tan (M_PI * (P - 0.5)); return x; } else if (nu == 2.0) { x = (2 * P - 1) / sqrt (2 * P * (1 - P)); return x; } ptail = (P < 0.5) ? P : 1 - P; if (sqrt (M_PI * nu / 2) * ptail > pow (0.05, nu / 2)) { double xg = gsl_cdf_ugaussian_Pinv (P); x = inv_cornish_fisher (xg, nu); } else { /* Use an asymptotic expansion of the tail of integral */ double beta = gsl_sf_beta (0.5, nu / 2); if (P < 0.5) { x = -sqrt (nu) * pow (beta * nu * P, -1.0 / nu); } else { x = sqrt (nu) * pow (beta * nu * (1 - P), -1.0 / nu); } /* Correct nu -> nu/(1+nu/x^2) in the leading term to account for higher order terms. This avoids overestimating x, which makes the iteration unstable due to the rapidly decreasing tails of the distribution. */ x /= sqrt (1 + nu / (x * x)); } { double dP, phi; unsigned int n = 0; start: dP = P - gsl_cdf_tdist_P (x, nu); phi = gsl_ran_tdist_pdf (x, nu); if (dP == 0.0 || n++ > 32) goto end; { double lambda = dP / phi; double step0 = lambda; double step1 = ((nu + 1) * x / (x * x + nu)) * (lambda * lambda / 4.0); double step = step0; if (fabs (step1) < fabs (step0)) { step += step1; } if (P > 0.5 && x + step < 0) x /= 2; else if (P < 0.5 && x + step > 0) x /= 2; else x += step; if (fabs (step) > 1e-10 * fabs (x)) goto start; } end: if (fabs(dP) > GSL_SQRT_DBL_EPSILON * P) { GSL_ERROR_VAL("inverse failed to converge", GSL_EFAILED, GSL_NAN); } return x; } } double gsl_cdf_tdist_Qinv (const double Q, const double nu) { double x, qtail; if (Q == 0.0) { return GSL_POSINF; } else if (Q == 1.0) { return GSL_NEGINF; } if (nu == 1.0) { x = tan (M_PI * (0.5 - Q)); return x; } else if (nu == 2.0) { x = (1 - 2 * Q) / sqrt (2 * Q * (1 - Q)); return x; } qtail = (Q < 0.5) ? Q : 1 - Q; if (sqrt (M_PI * nu / 2) * qtail > pow (0.05, nu / 2)) { double xg = gsl_cdf_ugaussian_Qinv (Q); x = inv_cornish_fisher (xg, nu); } else { /* Use an asymptotic expansion of the tail of integral */ double beta = gsl_sf_beta (0.5, nu / 2); if (Q < 0.5) { x = sqrt (nu) * pow (beta * nu * Q, -1.0 / nu); } else { x = -sqrt (nu) * pow (beta * nu * (1 - Q), -1.0 / nu); } /* Correct nu -> nu/(1+nu/x^2) in the leading term to account for higher order terms. This avoids overestimating x, which makes the iteration unstable due to the rapidly decreasing tails of the distribution. */ x /= sqrt (1 + nu / (x * x)); } { double dQ, phi; unsigned int n = 0; start: dQ = Q - gsl_cdf_tdist_Q (x, nu); phi = gsl_ran_tdist_pdf (x, nu); if (dQ == 0.0 || n++ > 32) goto end; { double lambda = - dQ / phi; double step0 = lambda; double step1 = ((nu + 1) * x / (x * x + nu)) * (lambda * lambda / 4.0); double step = step0; if (fabs (step1) < fabs (step0)) { step += step1; } if (Q < 0.5 && x + step < 0) x /= 2; else if (Q > 0.5 && x + step > 0) x /= 2; else x += step; if (fabs (step) > 1e-10 * fabs (x)) goto start; } } end: return x; } gsl/cdf/logistic.c0000644000175000017500000000245113536674414012451 0ustar eddedd/* cdf/logistic.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_logistic_P (const double x, const double a) { double P; double u = x / a; if (u >= 0) { P = 1 / (1 + exp (-u)); } else { P = exp (u) / (1 + exp (u)); } return P; } double gsl_cdf_logistic_Q (const double x, const double a) { double Q; double u = x / a; if (u >= 0) { Q = exp (-u) / (1 + exp (-u)); } else { Q = 1 / (1 + exp (u)); } return Q; } gsl/cdf/cauchy.c0000644000175000017500000000243613536674414012113 0ustar eddedd/* cdf/cauchy.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_cauchy_P (const double x, const double a) { double P; double u = x / a; if (u > -1) { P = 0.5 + atan (u) / M_PI; } else { P = atan(-1/u) / M_PI; } return P; } double gsl_cdf_cauchy_Q (const double x, const double a) { double Q; double u = x / a; if (u < 1) { Q = 0.5 - atan (u) / M_PI; } else { Q = atan(1/u) / M_PI; } return Q; } gsl/cdf/tdist.c0000644000175000017500000001313213536674414011761 0ustar eddedd/* cdf/tdist.c * * Copyright (C) 2002 Jason H. Stover. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Computes the Student's t cumulative distribution function using * the method detailed in * * W.J. Kennedy and J.E. Gentle, "Statistical Computing." 1980. * Marcel Dekker. ISBN 0-8247-6898-1. * * G.W. Hill and A.W. Davis. "Generalized asymptotic expansions * of Cornish-Fisher type." Annals of Mathematical Statistics, * vol. 39, 1264-1273. 1968. * * G.W. Hill. "Algorithm 395: Student's t-distribution," Communications * of the ACM, volume 13, number 10, page 617. October 1970. * * G.W. Hill, "Remark on algorithm 395: Student's t-distribution," * Transactions on Mathematical Software, volume 7, number 2, page * 247. June 1982. */ #include #include #include #include #include #include "beta_inc.c" static double poly_eval (const double c[], unsigned int n, double x) { unsigned int i; double y = c[0] * x; for (i = 1; i < n; i++) { y = x * (y + c[i]); } y += c[n]; return y; } /* * Use the Cornish-Fisher asymptotic expansion to find a point u such * that gsl_cdf_gauss(y) = tcdf(t). * */ static double cornish_fisher (double t, double n) { const double coeffs6[10] = { 0.265974025974025974026, 5.449696969696969696970, 122.20294372294372294372, 2354.7298701298701298701, 37625.00902597402597403, 486996.1392857142857143, 4960870.65, 37978595.55, 201505390.875, 622437908.625 }; const double coeffs5[8] = { 0.2742857142857142857142, 4.499047619047619047619, 78.45142857142857142857, 1118.710714285714285714, 12387.6, 101024.55, 559494.0, 1764959.625 }; const double coeffs4[6] = { 0.3047619047619047619048, 3.752380952380952380952, 46.67142857142857142857, 427.5, 2587.5, 8518.5 }; const double coeffs3[4] = { 0.4, 3.3, 24.0, 85.5 }; double a = n - 0.5; double b = 48.0 * a * a; double z2 = a * log1p (t * t / n); double z = sqrt (z2); double p5 = z * poly_eval (coeffs6, 9, z2); double p4 = -z * poly_eval (coeffs5, 7, z2); double p3 = z * poly_eval (coeffs4, 5, z2); double p2 = -z * poly_eval (coeffs3, 3, z2); double p1 = z * (z2 + 3.0); double p0 = z; double y = p5; y = (y / b) + p4; y = (y / b) + p3; y = (y / b) + p2; y = (y / b) + p1; y = (y / b) + p0; if (t < 0) y *= -1; return y; } #if 0 /* * Series approximation for t > 4.0. This needs to be fixed; * it shouldn't subtract the result from 1.0. A better way is * to use two different series expansions. Figuring this out * means rummaging through Fisher's paper in Metron, v5, 1926, * "Expansion of Student's integral in powers of n^{-1}." */ #define MAXI 40 static double normal_approx (const double x, const double nu) { double y; double num; double diff; double q; int i; double lg1, lg2; y = 1 / sqrt (1 + x * x / nu); num = 1.0; q = 0.0; diff = 2 * GSL_DBL_EPSILON; for (i = 2; (i < MAXI) && (diff > GSL_DBL_EPSILON); i += 2) { diff = q; num *= y * y * (i - 1) / i; q += num / (nu + i); diff = q - diff; } q += 1 / nu; lg1 = gsl_sf_lngamma (nu / 2.0); lg2 = gsl_sf_lngamma ((nu + 1.0) / 2.0); diff = lg2 - lg1; q *= pow (y, nu) * exp (diff) / sqrt (M_PI); return q; } #endif double gsl_cdf_tdist_P (const double x, const double nu) { double P; double x2 = x * x; if (nu > 30 && x2 < 10 * nu) { double u = cornish_fisher (x, nu); P = gsl_cdf_ugaussian_P (u); return P; } if (x2 < nu) { double u = x2 / nu; double eps = u / (1 + u); if (x >= 0) { P = beta_inc_AXPY (0.5, 0.5, 0.5, nu / 2.0, eps); } else { P = beta_inc_AXPY (-0.5, 0.5, 0.5, nu / 2.0, eps); } } else { double v = nu / (x * x); double eps = v / (1 + v); if (x >= 0) { P = beta_inc_AXPY (-0.5, 1.0, nu / 2.0, 0.5, eps); } else { P = beta_inc_AXPY (0.5, 0.0, nu / 2.0, 0.5, eps); } } return P; } double gsl_cdf_tdist_Q (const double x, const double nu) { double Q; double x2 = x * x; if (nu > 30 && x2 < 10 * nu) { double u = cornish_fisher (x, nu); Q = gsl_cdf_ugaussian_Q (u); return Q; } if (x2 < nu) { double u = x2 / nu; double eps = u / (1 + u); if (x >= 0) { Q = beta_inc_AXPY (-0.5, 0.5, 0.5, nu / 2.0, eps); } else { Q = beta_inc_AXPY (0.5, 0.5, 0.5, nu / 2.0, eps); } } else { double v = nu / (x * x); double eps = v / (1 + v); if (x >= 0) { Q = beta_inc_AXPY (0.5, 0.0, nu / 2.0, 0.5, eps); } else { Q = beta_inc_AXPY (-0.5, 1.0, nu / 2.0, 0.5, eps); } } return Q; } gsl/cdf/rat_eval.h0000644000175000017500000000055413536674414012440 0ustar eddeddstatic double rat_eval (const double a[], const size_t na, const double b[], const size_t nb, const double x) { size_t i, j; double u, v, r; u = a[na - 1]; for (i = na - 1; i > 0; i--) { u = x * u + a[i - 1]; } v = b[nb - 1]; for (j = nb - 1; j > 0; j--) { v = x * v + b[j - 1]; } r = u / v; return r; } gsl/cdf/ChangeLog0000644000175000017500000000773513536674414012254 0ustar eddedd2009-07-19 Brian Gough * gumbel1.c (gsl_cdf_gumbel1_Q): use a single argument ax-log(b) to get better control over underflow/overflow 2008-12-03 Brian Gough * gammainv.c (gsl_cdf_gamma_Pinv): keep iterating if P is still changing (fix for bug 24704) * test.c (test_chisqinv): added test cases for bug 24704 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2008-04-29 Brian Gough * gammainv.c (gsl_cdf_gamma_Pinv, gsl_cdf_gamma_Qinv): restrict the range of the gaussian approximation 2008-02-20 Brian Gough * beta_inc.c (beta_inc_AXPY): add some handling for large parameter cases 2008-02-12 Brian Gough * hypergeometric.c (gsl_cdf_hypergeometric_P): compute midpoint in double precision to avoid overflow (gsl_cdf_hypergeometric_Q): ditto 2007-08-22 Brian Gough * betainv.c (gsl_cdf_beta_Pinv): added an error check for inaccurate results * gammainv.c (gsl_cdf_gamma_Pinv): added an error check for inaccurate results * tdistinv.c (gsl_cdf_tdist_Pinv): added an error check for inaccurate results 2007-08-21 Brian Gough * betainv.c (gsl_cdf_beta_Pinv): added bisection method to improve initial approximations 2007-01-23 Brian Gough * betainv.c (gsl_cdf_beta_Pinv): avoid generating a NaN for lx > 0 2006-04-18 Brian Gough * betainv.c (gsl_cdf_beta_Qinv): fix prototype const 2006-03-07 Brian Gough * poisson.c: added poisson cdf * nbinomial.c: added negative binomial cdf * hypergeometric.c: added hypergeometric cdf * geometric.c: added geometric cdf * binomial.c (gsl_cdf_binomial_Q): added binomial cdf * test.c: added discrete function tests * gamma.c (gsl_cdf_gamma_P, gsl_cdf_gamma_Q): clean up unused code, ensure that branches make P+Q=1 always true * fdistinv.c (gsl_cdf_fdist_Pinv): use P instead of p for consistency * fdist.c (gsl_cdf_fdist_Q): use Q instead of P for consistency * beta.c (gsl_cdf_beta_Q): use Q instead of P for consistency 2006-02-27 Brian Gough * fdistinv.c (gsl_cdf_fdist_Pinv, gsl_cdf_fdist_Qinv): added inverse functions * betainv.c (gsl_cdf_beta_Pinv, gsl_cdf_beta_Qinv): added inverse functions * tdistinv.c (gsl_cdf_tdist_Qinv, gsl_cdf_tdist_Pinv): max 32 iterations, prevent infinite loop * gammainv.c (gsl_cdf_gamma_Qinv, gsl_cdf_gamma_Pinv): max 32 iterations, prevent infinite loop 2005-06-20 Brian Gough * test.c: removed tests using subnormal values, since they tend to fail when extended precision registers are not available. 2004-10-26 Brian Gough * exppow.c: added exppow distribution 2004-10-01 Brian Gough * beta.c (gsl_cdf_beta_P, gsl_cdf_beta_P): return consistent results for out of range values. 2003-08-27 Brian Gough * gauss.c: use parentheses around constant macros to avoid -(-X) being interpreted as --X 2003-07-27 Brian Gough * gumbel1.c (gsl_cdf_gumbel1_Q): use pow in place of exp since compilers seem to handle overflow better in this case (perhaps because it is not an intrinsic function). * gumbel2.c (gsl_cdf_gumbel2_P): handle case of x = 0 explicitly (gsl_cdf_gumbel2_Q): handle case of x = 0 explicitly 2003-07-22 Brian Gough * gamma.c (gsl_cdf_gamma_P): Peizer and Pratt approximation for large a seems to be inaccurate in tails (gsl_cdf_gamma_Q): Peizer and Pratt approximation for large a seems to be inaccurate in tails * test.c (main): added test for large a for gamma * cauchyinv.c (gsl_cdf_cauchy_Qinv): corrected limiting value for Q=1 * added Cumulative Distribution functions from savannah.gnu.org gsl/cdf/Makefile.am0000644000175000017500000000176313536674414012531 0ustar eddedd## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libgslcdf.la pkginclude_HEADERS= gsl_cdf.h AM_CPPFLAGS = -I$(top_srcdir) libgslcdf_la_SOURCES = beta.c betainv.c cauchy.c cauchyinv.c chisq.c chisqinv.c exponential.c exponentialinv.c exppow.c fdist.c fdistinv.c flat.c flatinv.c gamma.c gammainv.c gauss.c gaussinv.c gumbel1.c gumbel1inv.c gumbel2.c gumbel2inv.c laplace.c laplaceinv.c logistic.c logisticinv.c lognormal.c lognormalinv.c pareto.c paretoinv.c rayleigh.c rayleighinv.c tdist.c tdistinv.c weibull.c weibullinv.c binomial.c poisson.c geometric.c nbinomial.c pascal.c hypergeometric.c noinst_HEADERS = beta_inc.c rat_eval.h test_auto.c error.h TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_SOURCES = test.c test_LDADD = libgslcdf.la ../randist/libgslrandist.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la gsl/cdf/pareto.c0000644000175000017500000000234313536674414012126 0ustar eddedd/* cdf/pareto.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_pareto_P (const double x, const double a, const double b) { double P; if (x < b) { P = 0; } else { P = 1 - pow(b/x, a); } return P; } double gsl_cdf_pareto_Q (const double x, const double a, const double b) { double Q; if (x < b) { Q = 1; } else { Q = pow(b/x, a); } return Q; } gsl/cdf/rayleigh.c0000644000175000017500000000217113536674414012437 0ustar eddedd/* cdf/rayleigh.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_rayleigh_P (const double x, const double sigma) { double u = x / sigma; double P = -expm1 (-u*u/2); return P; } double gsl_cdf_rayleigh_Q (const double x, const double sigma) { double u = x / sigma; double Q = exp (-u*u/2); return Q; } gsl/cdf/betainv.c0000644000175000017500000001126413536674414012266 0ustar eddedd/* cdf/betainv.c * * Copyright (C) 2004 Free Software Foundation, Inc. * Copyright (C) 2006, 2007 Brian Gough * Written by Jason H. Stover. * Modified for GSL by Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Invert the Beta distribution. * * References: * * Roger W. Abernathy and Robert P. Smith. "Applying Series Expansion * to the Inverse Beta Distribution to Find Percentiles of the * F-Distribution," ACM Transactions on Mathematical Software, volume * 19, number 4, December 1993, pages 474-480. * * G.W. Hill and A.W. Davis. "Generalized asymptotic expansions of a * Cornish-Fisher type," Annals of Mathematical Statistics, volume 39, * number 8, August 1968, pages 1264-1273. */ #include #include #include #include #include #include #include #include "error.h" static double bisect (double x, double P, double a, double b, double xtol, double Ptol) { double x0 = 0, x1 = 1, Px; while (fabs(x1 - x0) > xtol) { Px = gsl_cdf_beta_P (x, a, b); if (fabs(Px - P) < Ptol) { /* return as soon as approximation is good enough, including on the first iteration */ return x; } else if (Px < P) { x0 = x; } else if (Px > P) { x1 = x; } x = 0.5 * (x0 + x1); } return x; } double gsl_cdf_beta_Pinv (const double P, const double a, const double b) { double x, mean; if (P < 0.0 || P > 1.0) { CDF_ERROR ("P must be in range 0 < P < 1", GSL_EDOM); } if (a < 0.0) { CDF_ERROR ("a < 0", GSL_EDOM); } if (b < 0.0) { CDF_ERROR ("b < 0", GSL_EDOM); } if (P == 0.0) { return 0.0; } if (P == 1.0) { return 1.0; } if (P > 0.5) { return gsl_cdf_beta_Qinv (1 - P, a, b); } mean = a / (a + b); if (P < 0.1) { /* small x */ double lg_ab = gsl_sf_lngamma (a + b); double lg_a = gsl_sf_lngamma (a); double lg_b = gsl_sf_lngamma (b); double lx = (log (a) + lg_a + lg_b - lg_ab + log (P)) / a; if (lx <= 0) { x = exp (lx); /* first approximation */ x *= pow (1 - x, -(b - 1) / a); /* second approximation */ } else { x = mean; } if (x > mean) x = mean; } else { /* Use expected value as first guess */ x = mean; } /* Do bisection to get closer */ x = bisect (x, P, a, b, 0.01, 0.01); { double lambda, dP, phi; unsigned int n = 0; start: dP = P - gsl_cdf_beta_P (x, a, b); phi = gsl_ran_beta_pdf (x, a, b); if (dP == 0.0 || n++ > 64) goto end; lambda = dP / GSL_MAX (2 * fabs (dP / x), phi); { double step0 = lambda; double step1 = -((a - 1) / x - (b - 1) / (1 - x)) * lambda * lambda / 2; double step = step0; if (fabs (step1) < fabs (step0)) { step += step1; } else { /* scale back step to a reasonable size when too large */ step *= 2 * fabs (step0 / step1); }; if (x + step > 0 && x + step < 1) { x += step; } else { x = sqrt (x) * sqrt (mean); /* try a new starting point */ } if (fabs (step0) > 1e-10 * x) goto start; } end: if (fabs(dP) > GSL_SQRT_DBL_EPSILON * P) { GSL_ERROR_VAL("inverse failed to converge", GSL_EFAILED, GSL_NAN); } return x; } } double gsl_cdf_beta_Qinv (const double Q, const double a, const double b) { if (Q < 0.0 || Q > 1.0) { CDF_ERROR ("Q must be inside range 0 < Q < 1", GSL_EDOM); } if (a < 0.0) { CDF_ERROR ("a < 0", GSL_EDOM); } if (b < 0.0) { CDF_ERROR ("b < 0", GSL_EDOM); } if (Q == 0.0) { return 1.0; } if (Q == 1.0) { return 0.0; } if (Q > 0.5) { return gsl_cdf_beta_Pinv (1 - Q, a, b); } else { return 1 - gsl_cdf_beta_Pinv (Q, b, a); }; } gsl/cdf/gumbel1inv.c0000644000175000017500000000254513536674414012711 0ustar eddedd/* cdf/gumbel1inv.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_gumbel1_Pinv (const double P, const double a, const double b) { double x; if (P == 1.0) { return GSL_POSINF; } else if (P == 0.0) { return GSL_NEGINF; } x = log(-b / log(P)) / a; return x; } double gsl_cdf_gumbel1_Qinv (const double Q, const double a, const double b) { double x; if (Q == 0.0) { return GSL_POSINF; } else if (Q == 1.0) { return GSL_NEGINF; } x = log(-b / log1p(-Q)) / a; return x; } gsl/cdf/geometric.c0000644000175000017500000000337713536674414012622 0ustar eddedd/* cdf/geometric.c * * Copyright (C) 2004 Jason H. Stover. * Copyright (C) 2010 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include "error.h" /* Pr (X <= k), i.e., the probability of n or fewer failures until the first success. */ double gsl_cdf_geometric_P (const unsigned int k, const double p) { double P, a, q; if (p > 1.0 || p < 0.0) { CDF_ERROR ("p < 0 or p > 1", GSL_EDOM); } if (k < 1) { return 0.0; } q = 1.0 - p; a = (double) k; if (p < 0.5) { P = -expm1 (a * log1p (-p)); } else { P = 1.0 - pow (q, a); } return P; } double gsl_cdf_geometric_Q (const unsigned int k, const double p) { double Q, a, q; if (p > 1.0 || p < 0.0) { CDF_ERROR ("p < 0 or p > 1", GSL_EDOM); } if (k < 1) { return 1.0; } q = 1.0 - p; a = (double) k; if (p < 0.5) { Q = exp (a * log1p (-p)); } else { Q = pow (q, a); } return Q; } gsl/cdf/beta_inc.c0000644000175000017500000001204213536674414012375 0ustar eddedd/* specfunc/beta_inc.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ /* Modified for cdfs by Brian Gough, June 2003 */ #include static double beta_cont_frac (const double a, const double b, const double x, const double epsabs) { const unsigned int max_iter = 512; /* control iterations */ const double cutoff = 2.0 * GSL_DBL_MIN; /* control the zero cutoff */ unsigned int iter_count = 0; double cf; /* standard initialization for continued fraction */ double num_term = 1.0; double den_term = 1.0 - (a + b) * x / (a + 1.0); if (fabs (den_term) < cutoff) den_term = GSL_NAN; den_term = 1.0 / den_term; cf = den_term; while (iter_count < max_iter) { const int k = iter_count + 1; double coeff = k * (b - k) * x / (((a - 1.0) + 2 * k) * (a + 2 * k)); double delta_frac; /* first step */ den_term = 1.0 + coeff * den_term; num_term = 1.0 + coeff / num_term; if (fabs (den_term) < cutoff) den_term = GSL_NAN; if (fabs (num_term) < cutoff) num_term = GSL_NAN; den_term = 1.0 / den_term; delta_frac = den_term * num_term; cf *= delta_frac; coeff = -(a + k) * (a + b + k) * x / ((a + 2 * k) * (a + 2 * k + 1.0)); /* second step */ den_term = 1.0 + coeff * den_term; num_term = 1.0 + coeff / num_term; if (fabs (den_term) < cutoff) den_term = GSL_NAN; if (fabs (num_term) < cutoff) num_term = GSL_NAN; den_term = 1.0 / den_term; delta_frac = den_term * num_term; cf *= delta_frac; if (fabs (delta_frac - 1.0) < 2.0 * GSL_DBL_EPSILON) break; if (cf * fabs (delta_frac - 1.0) < epsabs) break; ++iter_count; } if (iter_count >= max_iter) return GSL_NAN; return cf; } /* The function beta_inc_AXPY(A,Y,a,b,x) computes A * beta_inc(a,b,x) + Y taking account of possible cancellations when using the hypergeometric transformation beta_inc(a,b,x)=1-beta_inc(b,a,1-x). It also adjusts the accuracy of beta_inc() to fit the overall absolute error when A*beta_inc is added to Y. (e.g. if Y >> A*beta_inc then the accuracy of beta_inc can be reduced) */ static double beta_inc_AXPY (const double A, const double Y, const double a, const double b, const double x) { if (x == 0.0) { return A * 0 + Y; } else if (x == 1.0) { return A * 1 + Y; } else if (a > 1e5 && b < 10 && x > a / (a + b)) { /* Handle asymptotic regime, large a, small b, x > peak [AS 26.5.17] */ double N = a + (b - 1.0) / 2.0; return A * gsl_sf_gamma_inc_Q (b, -N * log (x)) + Y; } else if (b > 1e5 && a < 10 && x < b / (a + b)) { /* Handle asymptotic regime, small a, large b, x < peak [AS 26.5.17] */ double N = b + (a - 1.0) / 2.0; return A * gsl_sf_gamma_inc_P (a, -N * log1p (-x)) + Y; } else { double ln_beta = gsl_sf_lnbeta (a, b); double ln_pre = -ln_beta + a * log (x) + b * log1p (-x); double prefactor = exp (ln_pre); if (x < (a + 1.0) / (a + b + 2.0)) { /* Apply continued fraction directly. */ double epsabs = fabs (Y / (A * prefactor / a)) * GSL_DBL_EPSILON; double cf = beta_cont_frac (a, b, x, epsabs); return A * (prefactor * cf / a) + Y; } else { /* Apply continued fraction after hypergeometric transformation. */ double epsabs = fabs ((A + Y) / (A * prefactor / b)) * GSL_DBL_EPSILON; double cf = beta_cont_frac (b, a, 1.0 - x, epsabs); double term = prefactor * cf / b; if (A == -Y) { return -A * term; } else { return A * (1 - term) + Y; } } } } /* Direct series evaluation for testing purposes only */ #if 0 static double beta_series (const double a, const double b, const double x, const double epsabs) { double f = x / (1 - x); double c = (b - 1) / (a + 1) * f; double s = 1; double n = 0; s += c; do { n++; c *= -f * (2 + n - b) / (2 + n + a); s += c; } while (n < 512 && fabs (c) > GSL_DBL_EPSILON * fabs (s) + epsabs); s /= (1 - x); return s; } #endif gsl/cdf/exppow.c0000644000175000017500000000345113536674414012157 0ustar eddedd/* cdf/exppow.c * * Copyright (C) 2004 Giulio Bottazzi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* The exponential power density is parametrized according to p(x) dx = (1/(2 a Gamma(1 + 1/b))) * exp(-|x/a|^b) dx so that the distribution reads / x<0 0.5 - Gamma_inc_P(1/b,|x/a|^b) P(x) = | x=0 0.5 \ x>0 0.5 + Gamma_inc_P(1/b,|x/a|^b) for x in (-infty,+infty) */ double gsl_cdf_exppow_P (const double x, const double a, const double b) { const double u = x / a; if (u < 0) { double P = 0.5 * gsl_sf_gamma_inc_Q (1.0 / b, pow (-u, b)); return P; } else { double P = 0.5 * (1.0 + gsl_sf_gamma_inc_P (1.0 / b, pow (u, b))); return P; } } double gsl_cdf_exppow_Q (const double x, const double a, const double b) { const double u = x / a; if (u < 0) { double Q = 0.5 * (1.0 + gsl_sf_gamma_inc_P (1.0 / b, pow (-u, b))); return Q; } else { double Q = 0.5 * gsl_sf_gamma_inc_Q (1.0 / b, pow (u, b)); return Q; } } gsl/cdf/cauchyinv.c0000644000175000017500000000275413536674414012633 0ustar eddedd/* cdf/cauchyinv.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_cauchy_Pinv (const double P, const double a) { double x; if (P == 1.0) { return GSL_POSINF; } else if (P == 0.0) { return GSL_NEGINF; } if (P > 0.5) { x = a * tan (M_PI * (P - 0.5)); } else { x = -a / tan (M_PI * P); } return x; } double gsl_cdf_cauchy_Qinv (const double Q, const double a) { double x; if (Q == 0.0) { return GSL_POSINF; } else if (Q == 1.0) { return GSL_NEGINF; } if (Q > 0.5) { x = a * tan (M_PI * (0.5 - Q)); } else { x = a / tan (M_PI * Q); } return x; } gsl/cdf/binomial.c0000644000175000017500000000472413536674414012433 0ustar eddedd/* cdf/binomial.c * * Copyright (C) 2004 Jason H. Stover. * Copyright (C) 2004 Giulio Bottazzi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include #include #include #include "error.h" /* Computes the cumulative distribution function for a binomial random variable. For a binomial random variable X with n trials and success probability p, Pr( X <= k ) = Pr( Y >= p ) where Y is a beta random variable with parameters k+1 and n-k. The binomial distribution has the form, prob(k) = n!/(k!(n-k)!) * p^k (1-p)^(n-k) for k = 0, 1, ..., n The cumulated distributions can be expressed in terms of normalized incomplete beta functions (see Abramowitz & Stegun eq. 26.5.26 and eq. 6.6.3). Reference: W. Feller, "An Introduction to Probability and Its Applications," volume 1. Wiley, 1968. Exercise 45, page 173, chapter 6. */ #include #include #include #include #include double gsl_cdf_binomial_P (const unsigned int k, const double p, const unsigned int n) { double P; double a; double b; if (p > 1.0 || p < 0.0) { CDF_ERROR ("p < 0 or p > 1", GSL_EDOM); } if (k >= n) { P = 1.0; } else { a = (double) k + 1.0; b = (double) n - k; P = gsl_cdf_beta_Q (p, a, b); } return P; } double gsl_cdf_binomial_Q (const unsigned int k, const double p, const unsigned int n) { double Q; double a; double b; if (p > 1.0 || p < 0.0) { CDF_ERROR ("p < 0 or p > 1", GSL_EDOM); } if (k >= n) { Q = 0.0; } else { a = (double) k + 1.0; b = (double) n - k; Q = gsl_cdf_beta_P (p, a, b); } return Q; } gsl/cdf/gsl_cdf.h0000644000175000017500000001631513536674414012246 0ustar eddedd/* cdf/gsl_cdf.h * * Copyright (C) 2002 Jason H. Stover. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: J. Stover */ #ifndef __GSL_CDF_H__ #define __GSL_CDF_H__ #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS double gsl_cdf_ugaussian_P (const double x); double gsl_cdf_ugaussian_Q (const double x); double gsl_cdf_ugaussian_Pinv (const double P); double gsl_cdf_ugaussian_Qinv (const double Q); double gsl_cdf_gaussian_P (const double x, const double sigma); double gsl_cdf_gaussian_Q (const double x, const double sigma); double gsl_cdf_gaussian_Pinv (const double P, const double sigma); double gsl_cdf_gaussian_Qinv (const double Q, const double sigma); double gsl_cdf_gamma_P (const double x, const double a, const double b); double gsl_cdf_gamma_Q (const double x, const double a, const double b); double gsl_cdf_gamma_Pinv (const double P, const double a, const double b); double gsl_cdf_gamma_Qinv (const double Q, const double a, const double b); double gsl_cdf_cauchy_P (const double x, const double a); double gsl_cdf_cauchy_Q (const double x, const double a); double gsl_cdf_cauchy_Pinv (const double P, const double a); double gsl_cdf_cauchy_Qinv (const double Q, const double a); double gsl_cdf_laplace_P (const double x, const double a); double gsl_cdf_laplace_Q (const double x, const double a); double gsl_cdf_laplace_Pinv (const double P, const double a); double gsl_cdf_laplace_Qinv (const double Q, const double a); double gsl_cdf_rayleigh_P (const double x, const double sigma); double gsl_cdf_rayleigh_Q (const double x, const double sigma); double gsl_cdf_rayleigh_Pinv (const double P, const double sigma); double gsl_cdf_rayleigh_Qinv (const double Q, const double sigma); double gsl_cdf_chisq_P (const double x, const double nu); double gsl_cdf_chisq_Q (const double x, const double nu); double gsl_cdf_chisq_Pinv (const double P, const double nu); double gsl_cdf_chisq_Qinv (const double Q, const double nu); double gsl_cdf_exponential_P (const double x, const double mu); double gsl_cdf_exponential_Q (const double x, const double mu); double gsl_cdf_exponential_Pinv (const double P, const double mu); double gsl_cdf_exponential_Qinv (const double Q, const double mu); double gsl_cdf_exppow_P (const double x, const double a, const double b); double gsl_cdf_exppow_Q (const double x, const double a, const double b); double gsl_cdf_tdist_P (const double x, const double nu); double gsl_cdf_tdist_Q (const double x, const double nu); double gsl_cdf_tdist_Pinv (const double P, const double nu); double gsl_cdf_tdist_Qinv (const double Q, const double nu); double gsl_cdf_fdist_P (const double x, const double nu1, const double nu2); double gsl_cdf_fdist_Q (const double x, const double nu1, const double nu2); double gsl_cdf_fdist_Pinv (const double P, const double nu1, const double nu2); double gsl_cdf_fdist_Qinv (const double Q, const double nu1, const double nu2); double gsl_cdf_beta_P (const double x, const double a, const double b); double gsl_cdf_beta_Q (const double x, const double a, const double b); double gsl_cdf_beta_Pinv (const double P, const double a, const double b); double gsl_cdf_beta_Qinv (const double Q, const double a, const double b); double gsl_cdf_flat_P (const double x, const double a, const double b); double gsl_cdf_flat_Q (const double x, const double a, const double b); double gsl_cdf_flat_Pinv (const double P, const double a, const double b); double gsl_cdf_flat_Qinv (const double Q, const double a, const double b); double gsl_cdf_lognormal_P (const double x, const double zeta, const double sigma); double gsl_cdf_lognormal_Q (const double x, const double zeta, const double sigma); double gsl_cdf_lognormal_Pinv (const double P, const double zeta, const double sigma); double gsl_cdf_lognormal_Qinv (const double Q, const double zeta, const double sigma); double gsl_cdf_gumbel1_P (const double x, const double a, const double b); double gsl_cdf_gumbel1_Q (const double x, const double a, const double b); double gsl_cdf_gumbel1_Pinv (const double P, const double a, const double b); double gsl_cdf_gumbel1_Qinv (const double Q, const double a, const double b); double gsl_cdf_gumbel2_P (const double x, const double a, const double b); double gsl_cdf_gumbel2_Q (const double x, const double a, const double b); double gsl_cdf_gumbel2_Pinv (const double P, const double a, const double b); double gsl_cdf_gumbel2_Qinv (const double Q, const double a, const double b); double gsl_cdf_weibull_P (const double x, const double a, const double b); double gsl_cdf_weibull_Q (const double x, const double a, const double b); double gsl_cdf_weibull_Pinv (const double P, const double a, const double b); double gsl_cdf_weibull_Qinv (const double Q, const double a, const double b); double gsl_cdf_pareto_P (const double x, const double a, const double b); double gsl_cdf_pareto_Q (const double x, const double a, const double b); double gsl_cdf_pareto_Pinv (const double P, const double a, const double b); double gsl_cdf_pareto_Qinv (const double Q, const double a, const double b); double gsl_cdf_logistic_P (const double x, const double a); double gsl_cdf_logistic_Q (const double x, const double a); double gsl_cdf_logistic_Pinv (const double P, const double a); double gsl_cdf_logistic_Qinv (const double Q, const double a); double gsl_cdf_binomial_P (const unsigned int k, const double p, const unsigned int n); double gsl_cdf_binomial_Q (const unsigned int k, const double p, const unsigned int n); double gsl_cdf_poisson_P (const unsigned int k, const double mu); double gsl_cdf_poisson_Q (const unsigned int k, const double mu); double gsl_cdf_geometric_P (const unsigned int k, const double p); double gsl_cdf_geometric_Q (const unsigned int k, const double p); double gsl_cdf_negative_binomial_P (const unsigned int k, const double p, const double n); double gsl_cdf_negative_binomial_Q (const unsigned int k, const double p, const double n); double gsl_cdf_pascal_P (const unsigned int k, const double p, const unsigned int n); double gsl_cdf_pascal_Q (const unsigned int k, const double p, const unsigned int n); double gsl_cdf_hypergeometric_P (const unsigned int k, const unsigned int n1, const unsigned int n2, const unsigned int t); double gsl_cdf_hypergeometric_Q (const unsigned int k, const unsigned int n1, const unsigned int n2, const unsigned int t); __END_DECLS #endif /* __GSL_CDF_H__ */ gsl/cdf/fdistinv.c0000644000175000017500000000431713536674414012465 0ustar eddedd/* cdf/fdistinv.c * * Copyright (C) 2002 Przemyslaw Sliwa and Jason H. Stover. * Copyright (C) 2006, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include "error.h" double gsl_cdf_fdist_Pinv (const double P, const double nu1, const double nu2) { double result; double y; if (P < 0.0) { CDF_ERROR ("P < 0.0", GSL_EDOM); } if (P > 1.0) { CDF_ERROR ("P > 1.0", GSL_EDOM); } if (nu1 < 1.0) { CDF_ERROR ("nu1 < 1", GSL_EDOM); } if (nu2 < 1.0) { CDF_ERROR ("nu2 < 1", GSL_EDOM); } if (P < 0.5) { y = gsl_cdf_beta_Pinv (P, nu1 / 2.0, nu2 / 2.0); result = nu2 * y / (nu1 * (1.0 - y)); } else { y = gsl_cdf_beta_Qinv (P, nu2 / 2.0, nu1 / 2.0); result = nu2 * (1 - y) / (nu1 * y); } return result; } double gsl_cdf_fdist_Qinv (const double Q, const double nu1, const double nu2) { double result; double y; if (Q < 0.0) { CDF_ERROR ("Q < 0.0", GSL_EDOM); } if (Q > 1.0) { CDF_ERROR ("Q > 1.0", GSL_EDOM); } if (nu1 < 1.0) { CDF_ERROR ("nu1 < 1", GSL_EDOM); } if (nu2 < 1.0) { CDF_ERROR ("nu2 < 1", GSL_EDOM); } if (Q > 0.5) { y = gsl_cdf_beta_Qinv (Q, nu1 / 2.0, nu2 / 2.0); result = nu2 * y / (nu1 * (1.0 - y)); } else { y = gsl_cdf_beta_Pinv (Q, nu2 / 2.0, nu1 / 2.0); result = nu2 * (1 - y) / (nu1 * y); } return result; } gsl/cdf/gammainv.c0000644000175000017500000001055013536674414012432 0ustar eddedd/* cdf/gammainv.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include double gsl_cdf_gamma_Pinv (const double P, const double a, const double b) { double x; if (P == 1.0) { return GSL_POSINF; } else if (P == 0.0) { return 0.0; } /* Consider, small, large and intermediate cases separately. The boundaries at 0.05 and 0.95 have not been optimised, but seem ok for an initial approximation. BJG: These approximations aren't really valid, the relevant criterion is P*gamma(a+1) < 1. Need to rework these routines and use a single bisection style solver for all the inverse functions. */ if (P < 0.05) { double x0 = exp ((gsl_sf_lngamma (a) + log (P)) / a); x = x0; } else if (P > 0.95) { double x0 = -log1p (-P) + gsl_sf_lngamma (a); x = x0; } else { double xg = gsl_cdf_ugaussian_Pinv (P); double x0 = (xg < -0.5*sqrt (a)) ? a : sqrt (a) * xg + a; x = x0; } /* Use Lagrange's interpolation for E(x)/phi(x0) to work backwards to an improved value of x (Abramowitz & Stegun, 3.6.6) where E(x)=P-integ(phi(u),u,x0,x) and phi(u) is the pdf. */ { double lambda, dP, phi; unsigned int n = 0; start: dP = P - gsl_cdf_gamma_P (x, a, 1.0); phi = gsl_ran_gamma_pdf (x, a, 1.0); if (dP == 0.0 || n++ > 32) goto end; lambda = dP / GSL_MAX (2 * fabs (dP / x), phi); { double step0 = lambda; double step1 = -((a - 1) / x - 1) * lambda * lambda / 4.0; double step = step0; if (fabs (step1) < 0.5 * fabs (step0)) step += step1; if (x + step > 0) x += step; else { x /= 2.0; } if (fabs (step0) > 1e-10 * x || fabs(step0 * phi) > 1e-10 * P) goto start; } end: if (fabs(dP) > GSL_SQRT_DBL_EPSILON * P) { GSL_ERROR_VAL("inverse failed to converge", GSL_EFAILED, GSL_NAN); } return b * x; } } double gsl_cdf_gamma_Qinv (const double Q, const double a, const double b) { double x; if (Q == 1.0) { return 0.0; } else if (Q == 0.0) { return GSL_POSINF; } /* Consider, small, large and intermediate cases separately. The boundaries at 0.05 and 0.95 have not been optimised, but seem ok for an initial approximation. */ if (Q < 0.05) { double x0 = -log (Q) + gsl_sf_lngamma (a); x = x0; } else if (Q > 0.95) { double x0 = exp ((gsl_sf_lngamma (a) + log1p (-Q)) / a); x = x0; } else { double xg = gsl_cdf_ugaussian_Qinv (Q); double x0 = (xg < -0.5*sqrt (a)) ? a : sqrt (a) * xg + a; x = x0; } /* Use Lagrange's interpolation for E(x)/phi(x0) to work backwards to an improved value of x (Abramowitz & Stegun, 3.6.6) where E(x)=P-integ(phi(u),u,x0,x) and phi(u) is the pdf. */ { double lambda, dQ, phi; unsigned int n = 0; start: dQ = Q - gsl_cdf_gamma_Q (x, a, 1.0); phi = gsl_ran_gamma_pdf (x, a, 1.0); if (dQ == 0.0 || n++ > 32) goto end; lambda = -dQ / GSL_MAX (2 * fabs (dQ / x), phi); { double step0 = lambda; double step1 = -((a - 1) / x - 1) * lambda * lambda / 4.0; double step = step0; if (fabs (step1) < 0.5 * fabs (step0)) step += step1; if (x + step > 0) x += step; else { x /= 2.0; } if (fabs (step0) > 1e-10 * x) goto start; } } end: return b * x; } gsl/cdf/lognormalinv.c0000644000175000017500000000267013536674414013346 0ustar eddedd/* cdf/lognormalinv.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_lognormal_Pinv (const double P, const double zeta, const double sigma) { double x, u; if (P == 1.0) { return GSL_POSINF; } else if (P == 0.0) { return 0.0; } u = gsl_cdf_ugaussian_Pinv (P); x = exp (zeta + sigma * u); return x; } double gsl_cdf_lognormal_Qinv (const double Q, const double zeta, const double sigma) { double x, u; if (Q == 0.0) { return GSL_POSINF; } else if (Q == 1.0) { return 0.0; } u = gsl_cdf_ugaussian_Qinv (Q); x = exp (zeta + sigma * u); return x; } gsl/cdf/chisqinv.c0000644000175000017500000000210013536674414012447 0ustar eddedd/* cdf/chisqinv.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include double gsl_cdf_chisq_Pinv (const double P, const double nu) { return gsl_cdf_gamma_Pinv (P, nu / 2, 2.0); } double gsl_cdf_chisq_Qinv (const double Q, const double nu) { return gsl_cdf_gamma_Qinv (Q, nu / 2, 2.0); } gsl/cdf/hypergeometric.c0000644000175000017500000001021613536674414013660 0ustar eddedd/* cdf/hypergeometric.c * * Copyright (C) 2004 Jason H. Stover. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Computes the cumulative distribution function for a hypergeometric * random variable. A hypergeometric random variable X is the number * of elements of type 1 in a sample of size t, drawn from a population * of size n1 + n2, in which n1 are of type 1 and n2 are of type 2. * * This algorithm computes Pr( X <= k ) by summing the terms from * the mass function, Pr( X = k ). * * References: * * T. Wu. An accurate computation of the hypergeometric distribution * function. ACM Transactions on Mathematical Software. Volume 19, number 1, * March 1993. * This algorithm is not used, since it requires factoring the * numerator and denominator, then cancelling. It is more accurate * than the algorithm used here, but the cancellation requires more * time than the algorithm used here. * * W. Feller. An Introduction to Probability Theory and Its Applications, * third edition. 1968. Chapter 2, section 6. */ #include #include #include #include #include #include #include "error.h" static double lower_tail (const unsigned int k, const unsigned int n1, const unsigned int n2, const unsigned int t) { double relerr; int i = k; double s, P; s = gsl_ran_hypergeometric_pdf (i, n1, n2, t); P = s; while (i > 0) { double factor = (i / (n1 - i + 1.0)) * ((n2 + i - t) / (t - i + 1.0)); s *= factor; P += s; relerr = s / P; if (relerr < GSL_DBL_EPSILON) break; i--; } return P; } static double upper_tail (const unsigned int k, const unsigned int n1, const unsigned int n2, const unsigned int t) { double relerr; unsigned int i = k + 1; double s, Q; s = gsl_ran_hypergeometric_pdf (i, n1, n2, t); Q = s; while (i < t) { double factor = ((n1 - i) / (i + 1.0)) * ((t - i) / (n2 + i + 1.0 - t)); s *= factor; Q += s; relerr = s / Q; if (relerr < GSL_DBL_EPSILON) break; i++; } return Q; } /* * Pr (X <= k) */ double gsl_cdf_hypergeometric_P (const unsigned int k, const unsigned int n1, const unsigned int n2, const unsigned int t) { double P; if (t > (n1 + n2)) { CDF_ERROR ("t larger than population size", GSL_EDOM); } else if (k >= n1 || k >= t) { P = 1.0; } else if (k < 0.0) { P = 0.0; } else { double midpoint = ((double)t * n1) / ((double)n1 + (double)n2); if (k >= midpoint) { P = 1 - upper_tail (k, n1, n2, t); } else { P = lower_tail (k, n1, n2, t); } } return P; } /* * Pr (X > k) */ double gsl_cdf_hypergeometric_Q (const unsigned int k, const unsigned int n1, const unsigned int n2, const unsigned int t) { double Q; if (t > (n1 + n2)) { CDF_ERROR ("t larger than population size", GSL_EDOM); } else if (k >= n1 || k >= t) { Q = 0.0; } else if (k < 0.0) { Q = 1.0; } else { double midpoint = ((double)t * n1) / ((double)n1 + (double)n2); if (k < midpoint) { Q = 1 - lower_tail (k, n1, n2, t); } else { Q = upper_tail (k, n1, n2, t); } } return Q; } gsl/cdf/paretoinv.c0000644000175000017500000000251613536674414012645 0ustar eddedd/* cdf/paretoinv.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_pareto_Pinv (const double P, const double a, const double b) { double x; if (P == 1.0) { return GSL_POSINF; } else if (P == 0.0) { return b; } x = b * exp(-log1p(-P)/a); return x; } double gsl_cdf_pareto_Qinv (const double Q, const double a, const double b) { double x; if (Q == 0.0) { return GSL_POSINF; } else if (Q == 1.0) { return b; } x = b * exp(-log(Q) / a); return x; } gsl/cdf/pascal.c0000644000175000017500000000240113536674414012072 0ustar eddedd/* cdf/pascal.c * * Copyright (C) 2006, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* The Pascal distribution is a negative binomial with valued integer n */ double gsl_cdf_pascal_P (const unsigned int k, const double p, const unsigned int n) { double P = gsl_cdf_negative_binomial_P (k, p, (double) n); return P; } double gsl_cdf_pascal_Q (const unsigned int k, const double p, const unsigned int n) { double Q = gsl_cdf_negative_binomial_Q (k, p, (double) n); return Q; } gsl/cdf/rayleighinv.c0000644000175000017500000000253413536674414013157 0ustar eddedd/* cdf/rayleighinv.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_rayleigh_Pinv (const double P, const double sigma) { double x; if (P == 1.0) { return GSL_POSINF; } else if (P == 0.0) { return 0.0; } x = sigma * M_SQRT2 * sqrt (-log1p (-P)); return x; } double gsl_cdf_rayleigh_Qinv (const double Q, const double sigma) { double x; if (Q == 0.0) { return GSL_POSINF; } else if (Q == 1.0) { return 0.0; } x = sigma * M_SQRT2 * sqrt (-log (Q)); return x; } gsl/cdf/TODO0000644000175000017500000000257413536674414011166 0ustar eddedd# -*- org -*- #+CATEGORY: cdf * discrete inverse distributions - easy apart from hypergeometric(?) * look for integer overflow in the discrete functions - this could be hard to find - perform computations in double to avoid. gsl_cdf_binomial_P (unsigned int k, double p, unsigned int n); gsl_cdf_binomial_Q (unsigned int k, double p, unsigned int n); gsl_cdf_poisson_P (unsigned int k, double mu); gsl_cdf_poisson_Q (unsigned int k, double mu); gsl_cdf_geometric_P (unsigned int k, double p); gsl_cdf_geometric_Q (unsigned int k, double p); gsl_cdf_negative_binomial_P (unsigned int k, double p, double n); gsl_cdf_negative_binomial_Q (unsigned int k, double p, double n); gsl_cdf_pascal_P (unsigned int k, double p, unsigned int n); gsl_cdf_pascal_Q (unsigned int k, double p, unsigned int n); gsl_cdf_hypergeometric_P (unsigned int k, unsigned int n1, unsigned int n2, unsigned int t); gsl_cdf_hypergeometric_Q (unsigned int k, unsigned int n1, unsigned int n2, unsigned int t); * Unify the beta_inc function with the special functions, put all the functionaity in gsl_sf_beta_inc, providing a new function for the AXPY part if necessary (can we do everything with gsl_sf_beta_inc and gsl_sf_beta_inc_1mx keeping in mind that we cannot do 1-x because of cancellation for small x) gsl/cdf/laplaceinv.c0000644000175000017500000000272013536674414012751 0ustar eddedd/* cdf/laplaceinv.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_laplace_Pinv (const double P, const double a) { double x; if (P == 1.0) { return GSL_POSINF; } else if (P == 0.0) { return GSL_NEGINF; } if (P < 0.5) { x = a * log(2*P); } else { x = -a * log(2*(1-P)); } return x; } double gsl_cdf_laplace_Qinv (const double Q, const double a) { double x; if (Q == 0.0) { return GSL_POSINF; } else if (Q == 1.0) { return GSL_NEGINF; } if (Q < 0.5) { x = -a * log(2*Q); } else { x = a * log(2*(1-Q)); } return x; } gsl/cdf/exponentialinv.c0000644000175000017500000000213113536674414013672 0ustar eddedd/* cdf/exponentialinv.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_exponential_Pinv (const double P, const double mu) { double x = -mu * log1p (-P); return x; } double gsl_cdf_exponential_Qinv (const double Q, const double mu) { double x = -mu * log (Q); return x; } gsl/cdf/gumbel2inv.c0000644000175000017500000000253513536674414012711 0ustar eddedd/* cdf/gumbel2inv.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_gumbel2_Pinv (const double P, const double a, const double b) { double x; if (P == 1.0) { return GSL_POSINF; } else if (P == 0.0) { return 0.0; } x = pow(b / (-log(P)), 1/a); return x; } double gsl_cdf_gumbel2_Qinv (const double Q, const double a, const double b) { double x; if (Q == 0.0) { return GSL_POSINF; } else if (Q == 1.0) { return 0.0; } x = pow(b / (-log1p(-Q)), 1/a); return x; } gsl/cdf/gumbel1.c0000644000175000017500000000241613536674414012171 0ustar eddedd/* cdf/gumbel1.c * * Copyright (C) 2003, 2007, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_gumbel1_P (const double x, const double a, const double b) { double u = a * x - log (b); double P = exp (-exp (-u)); return P; } double gsl_cdf_gumbel1_Q (const double x, const double a, const double b) { double u = a * x - log (b); double Q; double P = exp (-exp (-u)); if (P < 0.5) { Q = 1 - P; } else { Q = -expm1 (-exp (-u)); } return Q; } gsl/cdf/logisticinv.c0000644000175000017500000000247513536674414013174 0ustar eddedd/* cdf/logisticinv.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_logistic_Pinv (const double P, const double a) { double x; if (P == 1.0) { return GSL_POSINF; } else if (P == 0.0) { return GSL_NEGINF; } x = a * log(P/(1-P)); return x; } double gsl_cdf_logistic_Qinv (const double Q, const double a) { double x; if (Q == 0.0) { return GSL_POSINF; } else if (Q == 1.0) { return GSL_NEGINF; } x = a * log((1-Q)/Q); return x; } gsl/cdf/test.c0000644000175000017500000021355313536674414011622 0ustar eddedd/* cdf/test.c * * Copyright (C) 2002 Jason H Stover. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #define TEST(func, args, value, tol) { double res = func args ; gsl_test_rel (res, value, tol, #func #args); } ; #define TEST_TOL0 (2.0*GSL_DBL_EPSILON) #define TEST_TOL1 (16.0*GSL_DBL_EPSILON) #define TEST_TOL2 (256.0*GSL_DBL_EPSILON) #define TEST_TOL3 (2048.0*GSL_DBL_EPSILON) #define TEST_TOL4 (16384.0*GSL_DBL_EPSILON) #define TEST_TOL5 (131072.0*GSL_DBL_EPSILON) #define TEST_TOL6 (1048576.0*GSL_DBL_EPSILON) void test_ugaussian (void); void test_ugaussianinv (void); void test_exponential (void); void test_exponentialinv (void); void test_exppow (void); void test_tdist (void); void test_fdist (void); void test_gamma (void); void test_chisq (void); void test_beta (void); void test_gammainv (void); void test_chisqinv (void); void test_tdistinv (void); void test_betainv (void); void test_finv (void); #include "test_auto.c" struct range { unsigned int min; unsigned int max; } ; double test_binomial_pdf (unsigned int n); double test_binomial_cdf_P (unsigned int n); double test_binomial_cdf_Q (unsigned int n); struct range test_binomial_range (void) { struct range r = {0, 5}; return r; } double test_binomial_pdf (unsigned int k) { return gsl_ran_binomial_pdf (k, 0.3, 5); } double test_binomial_cdf_P (unsigned int k) { return gsl_cdf_binomial_P (k, 0.3, 5); } double test_binomial_cdf_Q (unsigned int k) { return gsl_cdf_binomial_Q (k, 0.3, 5); } struct range test_poisson_range (void) { struct range r = {0, 25}; return r; } double test_poisson_pdf (unsigned int k) { return gsl_ran_poisson_pdf (k, 2.3); } double test_poisson_cdf_P (unsigned int k) { return gsl_cdf_poisson_P (k, 2.3); } double test_poisson_cdf_Q (unsigned int k) { return gsl_cdf_poisson_Q (k, 2.3); } struct range test_geometric_range (void) { struct range r = {0, 25}; return r; } double test_geometric_pdf (unsigned int k) { return gsl_ran_geometric_pdf (k, 0.3); } double test_geometric_cdf_P (unsigned int k) { return gsl_cdf_geometric_P (k, 0.3); } double test_geometric_cdf_Q (unsigned int k) { return gsl_cdf_geometric_Q (k, 0.3); } struct range test_negative_binomial_range (void) { struct range r = {0, 15}; return r; } double test_negative_binomial_pdf (unsigned int k) { return gsl_ran_negative_binomial_pdf (k, 0.3, 5.3); } double test_negative_binomial_cdf_P (unsigned int k) { return gsl_cdf_negative_binomial_P (k, 0.3, 5.3); } double test_negative_binomial_cdf_Q (unsigned int k) { return gsl_cdf_negative_binomial_Q (k, 0.3, 5.3); } struct range test_pascal_range (void) { struct range r = {0, 15}; return r; } double test_pascal_pdf (unsigned int k) { return gsl_ran_pascal_pdf (k, 0.3, 5); } double test_pascal_cdf_P (unsigned int k) { return gsl_cdf_pascal_P (k, 0.3, 5); } double test_pascal_cdf_Q (unsigned int k) { return gsl_cdf_pascal_Q (k, 0.3, 5); } struct range test_hypergeometric_range (void) { struct range r = {0, 26}; return r; } double test_hypergeometric_pdf (unsigned int k) { return gsl_ran_hypergeometric_pdf (k, 7, 19, 13); } double test_hypergeometric_cdf_P (unsigned int k) { return gsl_cdf_hypergeometric_P (k, 7, 19, 13); } double test_hypergeometric_cdf_Q (unsigned int k) { return gsl_cdf_hypergeometric_Q (k, 7, 19, 13); } struct range test_hypergeometric2_range (void) { struct range r = {0, 13250474}; return r; } struct range test_hypergeometric2a_range (void) { struct range r = {3500, 3600}; return r; } struct range test_hypergeometric2b_range (void) { struct range r = {13247474, 13250474}; return r; } double test_hypergeometric2_pdf (unsigned int k) { return gsl_ran_hypergeometric_pdf (k, 76200, 13174274, 678090); } double test_hypergeometric2_cdf_P (unsigned int k) { return gsl_cdf_hypergeometric_P (k, 76200, 13174274, 678090); } double test_hypergeometric2_cdf_Q (unsigned int k) { return gsl_cdf_hypergeometric_Q (k, 76200, 13174274, 678090); } #ifdef LOGARITHMIC struct range test_logarithmic_range (void) { struct range r = {1, 200}; return r; } double test_logarithmic_pdf (unsigned int k) { return gsl_ran_logarithmic_pdf (k, 0.9); } double test_logarithmic_cdf_P (unsigned int k) { return gsl_cdf_logarithmic_P (k, 0.9); } double test_logarithmic_cdf_Q (unsigned int k) { return gsl_cdf_logarithmic_Q (k, 0.9); } #endif void test_discrete_cdf_P (double (*pdf)(unsigned int), double (*cdf_P)(unsigned int), struct range (*range)(void), const char * desc) { double sum; double tol = TEST_TOL2; int i, min, max; struct range r = range(); min = r.min; max = r.max; sum = 0.0; for (i = min; i <= max; i++) { double pi = pdf(i); double Pi = cdf_P(i); sum += pi; gsl_test_rel (Pi, sum, tol, desc, i); } } void test_discrete_cdf_Q (double (*pdf)(unsigned int), double (*cdf_Q)(unsigned int), struct range (*range)(void), const char * desc) { double sum; double tol = TEST_TOL2; int i, min, max; struct range r = range(); min = r.min; max = r.max; sum = cdf_Q(max); for (i = max; i >= min; i--) { double pi = pdf(i); double Qi = cdf_Q(i); gsl_test_rel (Qi, sum, tol, desc, i); sum += pi; } } void test_discrete_cdf_PQ (double (*cdf_P)(unsigned int), double (*cdf_Q)(unsigned int), struct range (*range)(void), const char * desc) { double sum; double tol = GSL_DBL_EPSILON; int i, min, max; struct range r = range(); min = r.min; max = r.max; for (i = min; i <= max; i++) { double Pi = cdf_P(i); double Qi = cdf_Q(i); sum = Pi + Qi; gsl_test_rel (sum, 1.0, tol, desc, i); { int s1 = (Pi<0 || Pi>1); int s2 = (Qi<0 || Qi>1); gsl_test(s1, "Pi in range [0,1] (%.18e)", Pi); gsl_test(s2, "Qi in range [0,1] (%.18e)", Qi); } } } #define TEST_DISCRETE(name) do { \ test_discrete_cdf_P(&test_ ## name ## _pdf, &test_ ## name ## _cdf_P, &test_ ## name ## _range, "test gsl_cdf_" #name "_P (k=%d)") ; \ test_discrete_cdf_Q(&test_ ## name ## _pdf, &test_ ## name ## _cdf_Q, &test_ ## name ## _range, "test gsl_cdf_" #name "_Q (k=%d)") ; \ test_discrete_cdf_PQ(&test_ ## name ## _cdf_P, &test_ ## name ## _cdf_Q, &test_ ## name ## _range, "test gsl_cdf_" #name "_P+Q (k=%d)") ; \ } while (0); int main (void) { gsl_ieee_env_setup (); TEST_DISCRETE(binomial); TEST_DISCRETE(poisson); TEST_DISCRETE(geometric); TEST_DISCRETE(negative_binomial); TEST_DISCRETE(pascal); TEST_DISCRETE(hypergeometric); #ifdef HYPERGEOMETRIC2 TEST_DISCRETE(hypergeometric2); #endif #ifdef LOGARITHMIC TEST_DISCRETE(logarithmic); #endif test_discrete_cdf_PQ(&test_hypergeometric2_cdf_P, &test_hypergeometric2_cdf_Q, &test_hypergeometric2a_range, "test gsl_cdf_hypergeometric_P+Q (k=%d)") ; test_discrete_cdf_PQ(&test_hypergeometric2_cdf_P, &test_hypergeometric2_cdf_Q, &test_hypergeometric2b_range, "test gsl_cdf_hypergeometric_P+Q (k=%d)") ; /* exit (gsl_test_summary ()); */ /* Tests for gaussian cumulative distribution function Function values computed with PARI, 28 digits precision */ test_ugaussian (); test_exponential (); test_exppow (); test_tdist (); test_fdist (); test_gamma (); test_chisq (); test_beta (); test_ugaussianinv (); test_exponentialinv (); test_gammainv (); test_chisqinv (); test_tdistinv (); test_betainv (); test_finv (); test_auto_beta (); test_auto_fdist (); test_auto_cauchy (); test_auto_gaussian (); test_auto_laplace (); test_auto_rayleigh (); test_auto_flat (); test_auto_lognormal (); test_auto_gamma (); test_auto_chisq (); test_auto_tdist (); test_auto_gumbel1 (); test_auto_gumbel2 (); test_auto_weibull (); test_auto_pareto (); test_auto_logistic (); test_auto_gammalarge (); exit (gsl_test_summary ()); } void test_ugaussian (void) { TEST (gsl_cdf_ugaussian_P, (0.0), 0.5, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (1e-32), 0.5, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (1e-16), 0.5000000000000000398942280401, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (1e-8), 0.5000000039894228040143267129, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (0.5), 0.6914624612740131036377046105, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (0.7), 0.7580363477769269852506495717, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (5.0), 0.9999997133484281208060883262, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (10.0), 0.9999999999999999999999923801, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (30.0), 1.000000000000000000000000000, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (40.0), 1.000000000000000000000000000, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (1e10), 1.000000000000000000000000000, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (-1e-32), 0.5, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (-1e-16), 0.4999999999999999601057719598, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (-1e-8), 0.4999999960105771959856732870, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (-0.5), 0.3085375387259868963622953894, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (-0.7), 0.2419636522230730147493504282, TEST_TOL0); TEST (gsl_cdf_ugaussian_P, (-5.0), 0.0000002866515718791939116737523329, TEST_TOL1); TEST (gsl_cdf_ugaussian_P, (-10.0), 7.619853024160526065973343257e-24, TEST_TOL3); TEST (gsl_cdf_ugaussian_P, (-30.0), 4.906713927148187059533809288e-198, TEST_TOL3); TEST (gsl_cdf_ugaussian_P, (-1e10), 0.0, 0.0); TEST (gsl_cdf_ugaussian_Q, (0.0), 0.5, TEST_TOL0); TEST (gsl_cdf_ugaussian_Q, (1e-32), 0.5, TEST_TOL0); TEST (gsl_cdf_ugaussian_Q, (1e-16), 0.4999999999999999601057719598, TEST_TOL0); TEST (gsl_cdf_ugaussian_Q, (1e-8), 0.4999999960105771959856732870, TEST_TOL0); TEST (gsl_cdf_ugaussian_Q, (0.5), 0.3085375387259868963622953894, TEST_TOL0); TEST (gsl_cdf_ugaussian_Q, (0.7), 0.2419636522230730147493504282, TEST_TOL0); TEST (gsl_cdf_ugaussian_Q, (5.0), 0.0000002866515718791939116737523329, TEST_TOL3); TEST (gsl_cdf_ugaussian_Q, (10.0), 7.619853024160526065973343257e-24, TEST_TOL3); TEST (gsl_cdf_ugaussian_Q, (30.0), 4.906713927148187059533809288e-198, TEST_TOL3); TEST (gsl_cdf_ugaussian_Q, (1e10), 0.0, 0.0); TEST (gsl_cdf_ugaussian_Q, (-1e-32), 0.5, TEST_TOL0); TEST (gsl_cdf_ugaussian_Q, (-1e-16), 0.5000000000000000398942280401, TEST_TOL0); TEST (gsl_cdf_ugaussian_Q, (-1e-8), 0.5000000039894228040143267129, TEST_TOL0); TEST (gsl_cdf_ugaussian_Q, (-0.5), 0.6914624612740131036377046105, TEST_TOL0); TEST (gsl_cdf_ugaussian_Q, (-0.7), 0.7580363477769269852506495717, TEST_TOL0); TEST (gsl_cdf_ugaussian_Q, (-5.0), 0.9999997133484281208060883262, TEST_TOL0); TEST (gsl_cdf_ugaussian_Q, (-10.0), 0.9999999999999999999999923801, TEST_TOL0); TEST (gsl_cdf_ugaussian_Q, (-30.0), 1.000000000000000000000000000, TEST_TOL0); TEST (gsl_cdf_ugaussian_Q, (-40.0), 1.000000000000000000000000000, TEST_TOL0); TEST (gsl_cdf_ugaussian_Q, (-1e10), 1.000000000000000000000000000, TEST_TOL0); } /* Test values from Abramowitz & Stegun, Handbook of Mathematical Functions, Table 26.1. Error term is given by dx = dP / Z(x) */ void test_ugaussianinv (void) { TEST (gsl_cdf_ugaussian_Pinv, (0.9999997133), 5.0, 1e-4); TEST (gsl_cdf_ugaussian_Pinv, (0.9999683288), 4.0, 1e-6); TEST (gsl_cdf_ugaussian_Pinv, (0.9986501020), 3.0, 1e-8); TEST (gsl_cdf_ugaussian_Pinv, (0.977249868051821), 2.0, 1e-14); TEST (gsl_cdf_ugaussian_Pinv, (0.841344746068543), 1.0, TEST_TOL3); TEST (gsl_cdf_ugaussian_Pinv, (0.691462461274013), 0.5, TEST_TOL2); TEST (gsl_cdf_ugaussian_Pinv, (0.655421741610324), 0.4, TEST_TOL1); TEST (gsl_cdf_ugaussian_Pinv, (0.617911422188953), 0.3, TEST_TOL1); TEST (gsl_cdf_ugaussian_Pinv, (0.579259709439103), 0.2, TEST_TOL1); TEST (gsl_cdf_ugaussian_Pinv, (0.539827837277029), 0.1, TEST_TOL1); TEST (gsl_cdf_ugaussian_Pinv, (0.5), 0.0, TEST_TOL0); TEST (gsl_cdf_ugaussian_Pinv, (4.60172162722971e-1), -0.1, TEST_TOL1); TEST (gsl_cdf_ugaussian_Pinv, (4.20740290560897e-1), -0.2, TEST_TOL1); TEST (gsl_cdf_ugaussian_Pinv, (3.82088577811047e-1), -0.3, TEST_TOL1); TEST (gsl_cdf_ugaussian_Pinv, (3.44578258389676e-1), -0.4, TEST_TOL1); TEST (gsl_cdf_ugaussian_Pinv, (3.08537538725987e-1), -0.5, TEST_TOL2); TEST (gsl_cdf_ugaussian_Pinv, (1.58655253931457e-1), -1.0, TEST_TOL3); TEST (gsl_cdf_ugaussian_Pinv, (2.2750131948179e-2), -2.0, 1e-14); TEST (gsl_cdf_ugaussian_Pinv, (1.349898e-3), -3.0, 1e-8); TEST (gsl_cdf_ugaussian_Pinv, (3.16712e-5), -4.0, 1e-6); TEST (gsl_cdf_ugaussian_Pinv, (2.86648e-7), -5.0, 1e-4); TEST (gsl_cdf_ugaussian_Pinv, (7.61985302416052e-24), -10.0, 1e-4); TEST (gsl_cdf_ugaussian_Qinv, (7.61985302416052e-24), 10.0, 1e-4); TEST (gsl_cdf_ugaussian_Qinv, (2.86648e-7), 5.0, 1e-4); TEST (gsl_cdf_ugaussian_Qinv, (3.16712e-5), 4.0, 1e-6); TEST (gsl_cdf_ugaussian_Qinv, (1.349898e-3), 3.0, 1e-8); TEST (gsl_cdf_ugaussian_Qinv, (2.2750131948179e-2), 2.0, 1e-14); TEST (gsl_cdf_ugaussian_Qinv, (1.58655253931457e-1), 1.0, TEST_TOL3); TEST (gsl_cdf_ugaussian_Qinv, (3.08537538725987e-1), 0.5, TEST_TOL2); TEST (gsl_cdf_ugaussian_Qinv, (3.44578258389676e-1), 0.4, TEST_TOL1); TEST (gsl_cdf_ugaussian_Qinv, (3.82088577811047e-1), 0.3, TEST_TOL1); TEST (gsl_cdf_ugaussian_Qinv, (4.20740290560897e-1), 0.2, TEST_TOL1); TEST (gsl_cdf_ugaussian_Qinv, (4.60172162722971e-1), 0.1, TEST_TOL1); TEST (gsl_cdf_ugaussian_Qinv, (0.5), 0.0, TEST_TOL0); TEST (gsl_cdf_ugaussian_Qinv, (0.539827837277029), -0.1, TEST_TOL1); TEST (gsl_cdf_ugaussian_Qinv, (0.579259709439103), -0.2, TEST_TOL1); TEST (gsl_cdf_ugaussian_Qinv, (0.617911422188953), -0.3, TEST_TOL1); TEST (gsl_cdf_ugaussian_Qinv, (0.655421741610324), -0.4, TEST_TOL1); TEST (gsl_cdf_ugaussian_Qinv, (0.691462461274013), -0.5, TEST_TOL2); TEST (gsl_cdf_ugaussian_Qinv, (0.841344746068543), -1.0, TEST_TOL3); TEST (gsl_cdf_ugaussian_Qinv, (0.977249868051821), -2.0, 1e-14); TEST (gsl_cdf_ugaussian_Qinv, (0.9986501020), -3.0, 1e-8); TEST (gsl_cdf_ugaussian_Qinv, (0.9999683288), -4.0, 1e-6); TEST (gsl_cdf_ugaussian_Qinv, (0.9999997133), -5.0, 1e-4); } /* Tests for exponential cumulative distribution function Function values computed with PARI, 28 digits precision */ void test_exponential (void) { TEST (gsl_cdf_exponential_P, (0.1, 0.7), 1.33122100249818372e-1, TEST_TOL0); TEST (gsl_cdf_exponential_P, (1e-32, 0.7), 1.42857142857142857e-32, TEST_TOL0); TEST (gsl_cdf_exponential_P, (1000.0, 0.7), 1.0, TEST_TOL6); TEST (gsl_cdf_exponential_Q, (0.1, 0.7), 8.66877899750181628e-1, TEST_TOL0); TEST (gsl_cdf_exponential_Q, (1e-32, 0.7), 1.0, TEST_TOL0); TEST (gsl_cdf_exponential_Q, (1000.0, 0.7), 0.0, TEST_TOL6); } void test_exponentialinv (void) { TEST (gsl_cdf_exponential_Pinv, (0.13, 0.7), 9.74834471334553546e-2, TEST_TOL0); TEST (gsl_cdf_exponential_Pinv, (1.42e-32, 0.7), 9.94000000000000000e-33, TEST_TOL0); TEST (gsl_cdf_exponential_Qinv, (0.86, 0.7), 1.05576022814208545e-1, TEST_TOL0); TEST (gsl_cdf_exponential_Qinv, (0.99999, 0.7), 7.00003500023333508e-6, TEST_TOL6); } void test_exppow (void) { TEST (gsl_cdf_exppow_P, (-1000.0, 0.7, 1.8), 0.0, TEST_TOL6); TEST (gsl_cdf_exppow_P, (-0.1, 0.7, 1.8), 0.4205349082867515493458053850, TEST_TOL0); TEST (gsl_cdf_exppow_P, (-1e-32, 0.7, 1.8), 0.4999999999999999999999999999, TEST_TOL0); TEST (gsl_cdf_exppow_P, (0.1, 0.7, 1.8), 0.5794650917132484506541946149, TEST_TOL0); TEST (gsl_cdf_exppow_P, (1e-32, 0.7, 1.8), 0.5, TEST_TOL0); TEST (gsl_cdf_exppow_P, (1000.0, 0.7, 1.8), 0.9999999999999999999999956212, TEST_TOL6); TEST (gsl_cdf_exppow_Q, (-1000.0, 0.7, 1.8), 0.9999999999999999999999956212, TEST_TOL6); TEST (gsl_cdf_exppow_Q, (-0.1, 0.7, 1.8), 0.5794650917132484506541946149, TEST_TOL0); TEST (gsl_cdf_exppow_Q, (-1e-32, 0.7, 1.8), 0.5, TEST_TOL0); TEST (gsl_cdf_exppow_Q, (0.1, 0.7, 1.8), 0.4205349082867515493458053850, TEST_TOL0); TEST (gsl_cdf_exppow_Q, (1e-32, 0.7, 1.8), 0.4999999999999999999999999999, TEST_TOL0); TEST (gsl_cdf_exppow_Q, (1000.0, 0.7, 1.8), 0.0, TEST_TOL6); } /* Tests for student's T distribution */ /* p(x,nu) = (1/2)*(1+sign(x)*betaI(x^2/(nu+x^2),1/2,nu/2)) q(x,nu) = (1/2)*(1-sign(x)*betaI(x^2/(nu+x^2),1/2,nu/2)) */ void test_tdist (void) { TEST (gsl_cdf_tdist_P, (0.0, 1.0), 0.5, TEST_TOL6); TEST (gsl_cdf_tdist_P, (1e-100, 1.0), 0.5, TEST_TOL6); TEST (gsl_cdf_tdist_P, (0.001, 1.0), 5.00318309780080559e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (0.01, 1.0), 5.03182992764908255e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (0.1, 1.0), 5.31725517430553569e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (0.325, 1.0), 6.00023120032852123e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (1.0, 1.0), 0.75000000000000000e0, TEST_TOL6); TEST (gsl_cdf_tdist_P, (1.5, 1.0), 8.12832958189001183e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (2.0, 1.0), 8.52416382349566726e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (10.0, 1.0), 9.68274482569446430e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (20.0, 1.0), 9.84097748743823625e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (100.0, 1.0), 9.96817007235091745e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (1000.0, 1.0), 9.99681690219919441e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (10000.0, 1.0), 9.99968169011487724e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (0.0, 1.0), 0.5, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (1e-100, 1.0), 0.5, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (0.001, 1.0), 4.99681690219919441e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (0.01, 1.0), 4.96817007235091745e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (0.1, 1.0), 4.68274482569446430e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (0.325, 1.0), 3.99976879967147876e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (1.0, 1.0), 2.5e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (1.5, 1.0), 1.87167041810998816e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (2.0, 1.0), 1.47583617650433274e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (10.0, 1.0), 3.17255174305535695e-2, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (20.0, 1.0), 1.59022512561763752e-2, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (100.0, 1.0), 3.18299276490825515e-3, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (1000.0, 1.0), 3.18309780080558939e-4, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (10000.0, 1.0), 3.18309885122757724e-5, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-1e-100, 1.0), 0.5, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-0.001, 1.0), 4.99681690219919441e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-0.01, 1.0), 4.96817007235091744e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-0.1, 1.0), 4.68274482569446430e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-0.325, 1.0), 3.99976879967147876e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-1.0, 1.0), 0.25, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-1.5, 1.0), 1.87167041810998816e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-2.0, 1.0), 1.47583617650433274e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-10.0, 1.0), 3.17255174305535695e-2, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-20.0, 1.0), 1.59022512561763751e-2, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-100.0, 1.0), 3.18299276490825514e-3, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-1000.0, 1.0), 3.18309780080558938e-4, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-10000.0, 1.0), 3.18309885122757724e-5, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-1e-100, 1.0), 0.5, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-0.001, 1.0), 5.00318309780080559e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-0.01, 1.0), 5.03182992764908255e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-0.1, 1.0), 5.31725517430553570e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-0.325, 1.0), 6.00023120032852124e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-1.0, 1.0), 7.5e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-1.5, 1.0), 8.12832958189001184e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-2.0, 1.0), 8.52416382349566726e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-10.0, 1.0), 9.68274482569446430e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-20.0, 1.0), 9.84097748743823625e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-100.0, 1.0), 9.96817007235091745e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-1000.0, 1.0), 9.99681690219919441e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-10000.0, 1.0), 9.99968169011487724e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (0.0, 2.0), 5.00000000000000000e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (1e-100, 2.0), 5.00000000000000000e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (0.001, 2.0), 5.00353553302204959e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (0.01, 2.0), 5.03535445520899514e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (0.1, 2.0), 5.35267280792929913e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (0.325, 2.0), 6.11985772746873767e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (1.0, 2.0), 7.88675134594812882e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (1.5, 2.0), 8.63803437554499460e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (2.0, 2.0), 9.08248290463863016e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (10.0, 2.0), 9.95073771488337154e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (20.0, 2.0), 9.98754668053816452e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (100.0, 2.0), 9.99950007498750219e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (1000.0, 2.0), 9.99999500000749945e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (10000.0, 2.0), 9.999999950000000739e-01, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (0.0, 2.0), 5.00000000000000000e-01, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (1e-100, 2.0), 5.00000000000000000e-01, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (0.001, 2.0), 4.99646446697795041e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (0.01, 2.0), 4.96464554479100486e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (0.1, 2.0), 4.64732719207070087e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (0.325, 2.0), 3.88014227253126233e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (1.0, 2.0), 2.11324865405187118e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (1.5, 2.0), 1.36196562445500540e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (2.0, 2.0), 9.17517095361369836e-2, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (10.0, 2.0), 4.92622851166284542e-3, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (20.0, 2.0), 1.24533194618354849e-3, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (100.0, 2.0), 4.99925012497812894e-5, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (1000.0, 2.0), 4.99999250001249998e-7, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (10000.0, 2.0), 4.99999992500000125e-9, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-1e-100, 2.0), 5.00000000000000000e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-0.001, 2.0), 4.99646446697795041e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-0.01, 2.0), 4.96464554479100486e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-0.1, 2.0), 4.64732719207070087e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-0.325, 2.0), 3.88014227253126233e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-1.0, 2.0), 2.11324865405187118e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-1.5, 2.0), 1.36196562445500540e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-2.0, 2.0), 9.17517095361369836e-02, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-10.0, 2.0), 4.92622851166284542e-03, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-20.0, 2.0), 1.24533194618354849e-03, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-100.0, 2.0), 4.99925012497812894e-05, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-1000.0, 2.0), 4.99999250001249998e-07, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-10000.0, 2.0), 4.99999992500000125e-09, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-1e-100, 2.0), 5.00000000000000000e-01, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-0.001, 2.0), 5.00353553302204959e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-0.01, 2.0), 5.03535445520899514e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-0.1, 2.0), 5.35267280792929913e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-0.325, 2.0), 6.11985772746873767e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-1.0, 2.0), 7.88675134594812882e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-1.5, 2.0), 8.63803437554499460e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-2.0, 2.0), 9.08248290463863016e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-10.0, 2.0), 9.95073771488337155e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-20.0, 2.0), 9.98754668053816452e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-100.0, 2.0), 9.99950007498750219e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-1000.0, 2.0), 9.99999500000749999e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-10000.0, 2.0), 9.99999995000000075e-1, TEST_TOL6); TEST (gsl_cdf_tdist_P, (0.0, 300.0), 5.00000000000000000e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (1e-100, 300.0), 5.00000000000000000e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (0.001, 300.0), 5.00398609900942949e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (0.01, 300.0), 5.03986033020559088e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (0.1, 300.0), 5.39794441177768194e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (0.325, 300.0), 6.27296201542523812e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (1.0, 300.0), 8.40941797784686861e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (1.5, 300.0), 9.32666983425369137e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (2.0, 300.0), 9.76799239508425455e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (10.0, 300.0), 1.00000000000000000e+00, TEST_TOL6); TEST (gsl_cdf_tdist_P, (20.0, 300.0), 1.00000000000000000e+00, TEST_TOL6); TEST (gsl_cdf_tdist_P, (100.0, 300.0), 1.00000000000000000e+00, TEST_TOL6); TEST (gsl_cdf_tdist_P, (1000.0, 300.0), 1.00000000000000000e+00, TEST_TOL6); TEST (gsl_cdf_tdist_P, (10000.0, 300.0), 1.00000000000000000e+00, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (0.0, 300.0), 5.00000000000000000e-01, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (1e-100, 300.0), 5.00000000000000000e-01, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (0.001, 300.0), 4.99601390099057051e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (0.01, 300.0), 4.96013966979440912e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (0.1, 300.0), 4.60205558822231806e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (0.325, 300.0), 3.72703798457476188e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (1.0, 300.0), 1.59058202215313138e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (1.5, 300.0), 6.73330165746308628e-2, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (2.0, 300.0), 2.32007604915745452e-2, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (10.0, 300.0), 8.279313677e-21, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (20.0, 300.0), 1.93159812815803978e-57, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (100.0, 300.0), 1.02557519997736154e-232, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (1000.0, 300.0), 0.00000000000000000e+00, 0.0); TEST (gsl_cdf_tdist_Q, (10000.0, 300.0), 0.00000000000000000e+00, 0.0); TEST (gsl_cdf_tdist_P, (-1e-100, 300.0), 5.00000000000000000e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-0.001, 300.0), 4.99601390099057051e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-0.01, 300.0), 4.96013966979440912e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-0.1, 300.0), 4.60205558822231806e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-0.325, 300.0), 3.72703798457476188e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-1.0, 300.0), 1.59058202215313138e-01, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-1.5, 300.0), 6.73330165746308628e-02, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-2.0, 300.0), 2.32007604915745452e-02, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-10.0, 300.0), 8.279313675556272534e-21, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-20.0, 300.0), 1.93159812815803978e-57, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-100.0, 300.0), 1.02557519997736154e-232, TEST_TOL6); TEST (gsl_cdf_tdist_P, (-1000.0, 300.0), 0.0, 0.0); TEST (gsl_cdf_tdist_P, (-10000.0, 300.0), 0.0, 0.0); TEST (gsl_cdf_tdist_Q, (-1e-100, 300.0), 5.00000000000000000e-01, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-0.001, 300.0), 5.00398609900942949e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-0.01, 300.0), 5.03986033020559088e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-0.1, 300.0), 5.39794441177768194e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-0.325, 300.0), 6.27296201542523812e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-1.0, 300.0), 8.40941797784686862e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-1.5, 300.0), 9.32666983425369137e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-2.0, 300.0), 9.76799239508425455e-1, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-10.0, 300.0), 1.000000000000000000e0, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-20.0, 300.0), 1.0, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-100.0, 300.0), 1.0, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-1000.0, 300.0), 1.0, TEST_TOL6); TEST (gsl_cdf_tdist_Q, (-10000.0, 300.0), 1.0, TEST_TOL6); } /* Tests for F distribution */ /* p(x, nu1, nu2) := betaI(1 / (1 + (nu2 / nu1) / x), nu1 / 2, nu2 / 2) */ void test_fdist (void) { TEST (gsl_cdf_fdist_P, (0.0, 1.2, 1.3), 0.0, 0.0); TEST (gsl_cdf_fdist_P, (1e-100, 1.2, 1.3), 6.98194275525039002e-61, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.001, 1.2, 1.3), 1.10608485860238564e-2, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.01, 1.2, 1.3), 4.38636757068313850e-2, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.1, 1.2, 1.3), 1.68242392712840734e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.325, 1.2, 1.3), 3.14130045246195449e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (1.0, 1.2, 1.3), 5.09630779074755253e-01, TEST_TOL6); TEST (gsl_cdf_fdist_P, (1.5, 1.2, 1.3), 5.83998640641553852e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (2.0, 1.2, 1.3), 6.34733581351938787e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (10.0, 1.2, 1.3), 8.48446237879200975e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (20.0, 1.2, 1.3), 9.00987726336875039e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (100.0, 1.2, 1.3), 9.64489127047688435e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (1000.0, 1.2, 1.3), 9.92012051694116388e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (10000.0, 1.2, 1.3), 9.98210862808842585e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.0, 1.2, 1.3), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1e-100, 1.2, 1.3), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.001, 1.2, 1.3), 9.88939151413976144e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.01, 1.2, 1.3), 9.56136324293168615e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.1, 1.2, 1.3), 8.31757607287159265e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.325, 1.2, 1.3), 6.85869954753804551e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1.0, 1.2, 1.3), 4.90369220925244747e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1.5, 1.2, 1.3), 4.16001359358446148e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (2.0, 1.2, 1.3), 3.65266418648061213e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (10.0, 1.2, 1.3), 1.51553762120799025e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (20.0, 1.2, 1.3), 9.90122736631249612e-2, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (100.0, 1.2, 1.3), 3.55108729523115643e-2, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1000.0, 1.2, 1.3), 7.98794830588361109e-3, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (10000.0, 1.2, 1.3), 1.7891371911574145e-3, TEST_TOL6); /* computed with gp-pari */ TEST (gsl_cdf_fdist_P, (3.479082213465832574, 1, 4040712), 0.93785072763723411967, TEST_TOL6); TEST (gsl_cdf_fdist_P, (3.002774644786533109, 1, 4040712), 0.91687787379476055771, TEST_TOL6); TEST (gsl_cdf_fdist_P, (3.000854441173130827, 1, 4040712), 0.91677930719813578619, TEST_TOL6); TEST (gsl_cdf_fdist_P, (3.000064021622133037, 1, 4040712), 0.9167386972447996480399, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.0, 500.0, 1.3), 0.0, 0.0); TEST (gsl_cdf_fdist_P, (1e-100, 500.0, 1.3), 0.0, 0.0); TEST (gsl_cdf_fdist_P, (0.001, 500.0, 1.3), 9.83434460393304765e-141, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.01, 500.0, 1.3), 1.45915624888550014e-26, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.1, 500.0, 1.3), 5.89976509619688165e-4, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.325, 500.0, 1.3), 6.86110486051542533e-2, TEST_TOL6); TEST (gsl_cdf_fdist_P, (1.0, 500.0, 1.3), 3.38475053806404615e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (1.5, 500.0, 1.3), 4.52016245247457422e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (2.0, 500.0, 1.3), 5.27339068937388798e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (10.0, 500.0, 1.3), 8.16839628578413905e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (20.0, 500.0, 1.3), 8.81784623056911406e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (100.0, 500.0, 1.3), 9.58045057204221295e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (1000.0, 500.0, 1.3), 9.90585749380655275e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (10000.0, 500.0, 1.3), 9.97891924831461387e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.0, 500.0, 1.3), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1e-100, 500.0, 1.3), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.001, 500.0, 1.3), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.01, 500.0, 1.3), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.1, 500.0, 1.3), 9.99410023490380312e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.325, 500.0, 1.3), 9.31388951394845747e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1.0, 500.0, 1.3), 6.61524946193595385e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1.5, 500.0, 1.3), 5.47983754752542572e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (2.0, 500.0, 1.3), 4.72660931062611202e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (10.0, 500.0, 1.3), 1.83160371421586096e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (20.0, 500.0, 1.3), 1.18215376943088595e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (100.0, 500.0, 1.3), 4.19549427957787016e-2, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1000.0, 500.0, 1.3), 9.41425061934473424e-3, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (10000.0, 500.0, 1.3), 2.10807516853862603e-3, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.0, 1.2, 500.0), 0.0, 0.0); TEST (gsl_cdf_fdist_P, (1e-100, 1.2, 500.0), 8.23342055585482999e-61, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.001, 1.2, 500.0), 1.30461496441289529e-2, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.01, 1.2, 500.0), 5.18324224608033294e-2, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.1, 1.2, 500.0), 2.02235101716076289e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.325, 1.2, 500.0), 3.90502983219393749e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (1.0, 1.2, 500.0), 6.67656191574653619e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (1.5, 1.2, 500.0), 7.75539230271467054e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (2.0, 1.2, 500.0), 8.45209114904613705e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (10.0, 1.2, 500.0), 9.99168017659120988e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (20.0, 1.2, 500.0), 9.99998005738371669e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (100.0, 1.2, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_P, (1000.0, 1.2, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_P, (10000.0, 1.2, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.0, 1.2, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1e-100, 1.2, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.001, 1.2, 500.0), 9.86953850355871047e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.01, 1.2, 500.0), 9.48167577539196671e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.1, 1.2, 500.0), 7.97764898283923711e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.325, 1.2, 500.0), 6.09497016780606251e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1.0, 1.2, 500.0), 3.32343808425346381e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1.5, 1.2, 500.0), 2.24460769728532946e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (2.0, 1.2, 500.0), 1.54790885095386295e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (10.0, 1.2, 500.0), 8.3198234087901168e-4, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (20.0, 1.2, 500.0), 1.99426162833131e-6, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (100.0, 1.2, 500.0), 6.23302662288217117e-25, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1000.0, 1.2, 500.0), 1.14328577259666930e-134, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (10000.0, 1.2, 500.0), 0.0, 0.0); TEST (gsl_cdf_fdist_P, (0.0, 200.0, 500.0), 0.0, 0.0); TEST (gsl_cdf_fdist_P, (1e-100, 200.0, 500.0), 0.0, 0.0); TEST (gsl_cdf_fdist_P, (0.001, 200.0, 500.0), 4.09325080403669893e-251, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.01, 200.0, 500.0), 1.17894325419628688e-151, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.1, 200.0, 500.0), 5.92430940796861258e-57, TEST_TOL6); TEST (gsl_cdf_fdist_P, (0.325, 200.0, 500.0), 3.18220452357263554e-18, TEST_TOL6); TEST (gsl_cdf_fdist_P, (1.0, 200.0, 500.0), 5.06746326121168266e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (1.5, 200.0, 500.0), 9.99794175718712438e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (2.0, 200.0, 500.0), 9.99999999528236152e-1, TEST_TOL6); TEST (gsl_cdf_fdist_P, (10.0, 200.0, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_P, (20.0, 200.0, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_P, (100.0, 200.0, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_P, (1000.0, 200.0, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_P, (10000.0, 200.0, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.0, 200.0, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1e-100, 200.0, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.001, 200.0, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.01, 200.0, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.1, 200.0, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (0.325, 200.0, 500.0), 9.99999999999999997e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1.0, 200.0, 500.0), 4.93253673878831734e-1, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1.5, 200.0, 500.0), 2.05824281287561795e-4, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (2.0, 200.0, 500.0), 4.71763848371410786e-10, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (10.0, 200.0, 500.0), 5.98048337181948436e-96, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (20.0, 200.0, 500.0), 2.92099265879979502e-155, TEST_TOL6); TEST (gsl_cdf_fdist_Q, (1000.0, 200.0, 500.0), 0.0, 0.0); TEST (gsl_cdf_fdist_Q, (10000.0, 200.0, 500.0), 0.0, 0.0); } void test_finv (void) { TEST (gsl_cdf_fdist_Pinv, (0.0, 1.2, 1.3), 0.0, 0.0); TEST (gsl_cdf_fdist_Pinv, ( 6.98194275525039002e-61, 1.2, 1.3), 1e-100, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 1.10608485860238564e-2, 1.2, 1.3), 0.001, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 4.38636757068313850e-2, 1.2, 1.3), 0.01, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 1.68242392712840734e-1, 1.2, 1.3), 0.1, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 3.14130045246195449e-1, 1.2, 1.3), 0.325, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 5.09630779074755253e-01, 1.2, 1.3), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 5.83998640641553852e-1, 1.2, 1.3), 1.5, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 6.34733581351938787e-1, 1.2, 1.3), 2.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 8.48446237879200975e-1, 1.2, 1.3), 10.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 9.00987726336875039e-1, 1.2, 1.3), 20.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 9.64489127047688435e-1, 1.2, 1.3), 100.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 9.92012051694116388e-1, 1.2, 1.3), 1000.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 9.98210862808842585e-1, 1.2, 1.3), 10000.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 1.0, 1.2, 1.3), 0.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 9.88939151413976144e-1, 1.2, 1.3), 0.001, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 9.56136324293168615e-1, 1.2, 1.3), 0.01, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 8.31757607287159265e-1, 1.2, 1.3), 0.1, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 6.85869954753804551e-1, 1.2, 1.3), 0.325, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 4.90369220925244747e-1, 1.2, 1.3), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 4.16001359358446148e-1, 1.2, 1.3), 1.5, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 3.65266418648061213e-1, 1.2, 1.3), 2.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 1.51553762120799025e-1, 1.2, 1.3), 10.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 9.90122736631249612e-2, 1.2, 1.3), 20.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 3.55108729523115643e-2, 1.2, 1.3), 100.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 7.98794830588361109e-3, 1.2, 1.3), 1000.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 1.7891371911574145e-3, 1.2, 1.3), 10000.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 0.0, 500.0, 1.3), 0.0, 0.0); TEST (gsl_cdf_fdist_Pinv, ( 9.83434460393304765e-141, 500.0, 1.3), 0.001, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 1.45915624888550014e-26, 500.0, 1.3), 0.01, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 5.89976509619688165e-4, 500.0, 1.3), 0.1, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 6.86110486051542533e-2, 500.0, 1.3), 0.325, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 3.38475053806404615e-1, 500.0, 1.3), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 4.52016245247457422e-1, 500.0, 1.3), 1.5, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 5.27339068937388798e-1, 500.0, 1.3), 2.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 8.16839628578413905e-1, 500.0, 1.3), 10.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 8.81784623056911406e-1, 500.0, 1.3), 20.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 9.58045057204221295e-1, 500.0, 1.3), 100.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 9.90585749380655275e-1, 500.0, 1.3), 1000.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 9.97891924831461387e-1, 500.0, 1.3), 10000.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 1.0, 500.0, 1.3), 0.0, TEST_TOL6); /* * The algorithm currently implemented in gsl_cdf_fdist_Qinv and Pinv * are not accurate for very large degrees of freedom, so the tests * here are commented out. Another algorithm more suitable for * these extreme values might pass these tests. */ TEST (gsl_cdf_fdist_Qinv, ( 9.99410023490380312e-1, 500.0, 1.3), 0.1, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 9.31388951394845747e-1, 500.0, 1.3), 0.325, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 6.61524946193595385e-1, 500.0, 1.3), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 5.47983754752542572e-1, 500.0, 1.3), 1.5, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 4.72660931062611202e-1, 500.0, 1.3), 2.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 1.83160371421586096e-1, 500.0, 1.3), 10.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 1.18215376943088595e-1, 500.0, 1.3), 20.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 4.19549427957787016e-2, 500.0, 1.3), 100.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 9.41425061934473424e-3, 500.0, 1.3), 1000.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 2.10807516853862603e-3, 500.0, 1.3), 10000.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 0.0, 1.2, 500.0), 0.0, 0.0); TEST (gsl_cdf_fdist_Pinv, ( 8.23342055585482999e-61, 1.2, 500.0), 1e-100, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 1.30461496441289529e-2, 1.2, 500.0), 0.001, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 5.18324224608033294e-2, 1.2, 500.0), 0.01, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 2.02235101716076289e-1, 1.2, 500.0), 0.1, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 3.90502983219393749e-1, 1.2, 500.0), 0.325, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 6.67656191574653619e-1, 1.2, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 7.75539230271467054e-1, 1.2, 500.0), 1.5, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 8.45209114904613705e-1, 1.2, 500.0), 2.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 9.99168017659120988e-1, 1.2, 500.0), 10.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 9.99998005738371669e-1, 1.2, 500.0), 20.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 1.0, 1.2, 500.0), GSL_POSINF, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 1.0, 1.2, 500.0), GSL_POSINF, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 1.0, 1.2, 500.0), GSL_POSINF, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 1.0, 1.2, 500.0), 0.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 9.86953850355871047e-1, 1.2, 500.0), 0.001, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 9.48167577539196671e-1, 1.2, 500.0), 0.01, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 7.97764898283923711e-1, 1.2, 500.0), 0.1, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 6.09497016780606251e-1, 1.2, 500.0), 0.325, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 3.32343808425346381e-1, 1.2, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 2.24460769728532946e-1, 1.2, 500.0), 1.5, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 1.54790885095386295e-1, 1.2, 500.0), 2.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 8.3198234087901168e-4, 1.2, 500.0), 10.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 1.99426162833131e-6, 1.2, 500.0), 20.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 6.23302662288217117e-25, 1.2, 500.0), 100.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 1.14328577259666930e-134, 1.2, 500.0), 1000.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 0.0, 1.2, 500.0), GSL_POSINF, 0.0); TEST (gsl_cdf_fdist_Pinv, ( 0.0, 200.0, 500.0), 0.0, 0.0); TEST (gsl_cdf_fdist_Pinv, ( 4.09325080403669893e-251, 200.0, 500.0), 0.001, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 1.17894325419628688e-151, 200.0, 500.0), 0.01, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 5.92430940796861258e-57, 200.0, 500.0), 0.1, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 3.18220452357263554e-18, 200.0, 500.0), 0.325, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 5.06746326121168266e-1, 200.0, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 9.99794175718712438e-1, 200.0, 500.0), 1.5, TEST_TOL6); TEST (gsl_cdf_fdist_Pinv, ( 1.0, 200.0, 500.0), GSL_POSINF, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 1.0, 200.0, 500.0), 0.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 4.93253673878831734e-1, 200.0, 500.0), 1.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 2.05824281287561795e-4, 200.0, 500.0), 1.5, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 4.71763848371410786e-10, 200.0, 500.0), 2.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 5.98048337181948436e-96, 200.0, 500.0), 10.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 2.92099265879979502e-155, 200.0, 500.0), 20.0, TEST_TOL6); TEST (gsl_cdf_fdist_Qinv, ( 0.0, 200.0, 500.0), GSL_POSINF, 0.0); TEST (gsl_cdf_fdist_Pinv, (0.95,1.0,261.0), 3.8773340322508720313e+00, TEST_TOL3); } /* Tests for gamma distribution */ /* p(x, a, b) := gammaP(b, x / a) */ void test_gamma (void) { TEST (gsl_cdf_gamma_P, (0.0, 1.0, 1.0), 0.0, 0.0); TEST (gsl_cdf_gamma_P, (1e-100, 1.0, 1.0), 1e-100, TEST_TOL6); TEST (gsl_cdf_gamma_P, (0.001, 1.0, 1.0), 9.99500166625008332e-4, TEST_TOL6); TEST (gsl_cdf_gamma_P, (0.01, 1.0, 1.0), 9.95016625083194643e-3, TEST_TOL6); TEST (gsl_cdf_gamma_P, (0.1, 1.0, 1.0), 9.51625819640404268e-2, TEST_TOL6); TEST (gsl_cdf_gamma_P, (0.325, 1.0, 1.0), 2.77472646357927811e-1, TEST_TOL6); TEST (gsl_cdf_gamma_P, (1.0, 1.0, 1.0), 6.32120558828557678e-1, TEST_TOL6); TEST (gsl_cdf_gamma_P, (1.5, 1.0, 1.0), 7.76869839851570171e-1, TEST_TOL6); TEST (gsl_cdf_gamma_P, (2.0, 1.0, 1.0), 8.64664716763387308e-1, TEST_TOL6); TEST (gsl_cdf_gamma_P, (10.0, 1.0, 1.0), 9.99954600070237515e-1, TEST_TOL6); TEST (gsl_cdf_gamma_P, (20.0, 1.0, 1.0), 9.99999997938846378e-1, TEST_TOL6); TEST (gsl_cdf_gamma_P, (100.0, 1.0, 1.0), 1e0, TEST_TOL6); TEST (gsl_cdf_gamma_P, (1000.0, 1.0, 1.0), 1e0, TEST_TOL6); TEST (gsl_cdf_gamma_P, (10000.0, 1.0, 1.0), 1e0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (0.0, 1.0, 1.0), 1.0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (1e-100, 1.0, 1.0), 1.0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (0.001, 1.0, 1.0), 9.99000499833374992e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (0.01, 1.0, 1.0), 9.90049833749168054e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (0.1, 1.0, 1.0), 9.04837418035959573e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (0.325, 1.0, 1.0), 7.22527353642072189e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (1.0, 1.0, 1.0), 3.67879441171442322e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (1.5, 1.0, 1.0), 2.23130160148429829e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (2.0, 1.0, 1.0), 1.35335283236612692e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (10.0, 1.0, 1.0), 4.53999297624848515e-5, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (20.0, 1.0, 1.0), 2.06115362243855783e-9, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (100.0, 1.0, 1.0), 3.72007597602083596e-44, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (1000.0, 1.0, 1.0), 0.0, 0.0); TEST (gsl_cdf_gamma_Q, (10000.0, 1.0, 1.0), 0.0, 0.0); TEST (gsl_cdf_gamma_P, (0.0, 1.0, 10.0), 0.0, 0.0); TEST (gsl_cdf_gamma_P, (1e-100, 1.0, 10.0), 1e-101, TEST_TOL6); TEST (gsl_cdf_gamma_P, (0.001, 1.0, 10.0), 9.99950001666625001e-5, TEST_TOL6); TEST (gsl_cdf_gamma_P, (0.01, 1.0, 10.0), 9.99500166625008332e-4, TEST_TOL6); TEST (gsl_cdf_gamma_P, (0.1, 1.0, 10.0), 9.95016625083194643e-3, TEST_TOL6); TEST (gsl_cdf_gamma_P, (0.325, 1.0, 10.0), 3.19775501686939529e-2, TEST_TOL6); TEST (gsl_cdf_gamma_P, (1.0, 1.0, 10.0), 9.51625819640404268e-2, TEST_TOL6); TEST (gsl_cdf_gamma_P, (1.5, 1.0, 10.0), 1.39292023574942193e-1, TEST_TOL6); TEST (gsl_cdf_gamma_P, (2.0, 1.0, 10.0), 1.81269246922018141e-1, TEST_TOL6); TEST (gsl_cdf_gamma_P, (10.0, 1.0, 10.0), 6.32120558828557678e-1, TEST_TOL6); TEST (gsl_cdf_gamma_P, (20.0, 1.0, 10.0), 8.64664716763387308e-1, TEST_TOL6); TEST (gsl_cdf_gamma_P, (100.0, 1.0, 10.0), 9.99954600070237515e-1, TEST_TOL6); TEST (gsl_cdf_gamma_P, (1000.0, 1.0, 10.0), 1e0, TEST_TOL6); TEST (gsl_cdf_gamma_P, (10000.0, 1.0, 10.0), 1e0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (0.0, 1.0, 10.0), 1.0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (1e-100, 1.0, 10.0), 1.0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (0.001, 1.0, 10.0), 9.99900004999833337e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (0.01, 1.0, 10.0), 9.99000499833374992e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (0.1, 1.0, 10.0), 9.90049833749168054e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (0.325, 1.0, 10.0), 9.68022449831306047e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (1.0, 1.0, 10.0), 9.04837418035959573e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (1.5, 1.0, 10.0), 8.60707976425057807e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (2.0, 1.0, 10.0), 8.18730753077981859e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (10.0, 1.0, 10.0), 3.67879441171442322e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (20.0, 1.0, 10.0), 1.35335283236612692e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (100.0, 1.0, 10.0), 4.53999297624848515e-5, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (1000.0, 1.0, 10.0), 3.72007597602083596e-44, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (10000.0, 1.0, 10.0), 0.0, 0.0); TEST (gsl_cdf_gamma_P, (0.0, 17.0, 10.0), 0e0, 0.0); TEST (gsl_cdf_gamma_P, (1e-100, 17.0, 10.0), 0e0, 0.0); TEST (gsl_cdf_gamma_P, (0.001, 17.0, 10.0), 2.81119174040422844e-83, TEST_TOL6); TEST (gsl_cdf_gamma_P, (0.01, 17.0, 10.0), 2.80880324651985887e-66, TEST_TOL6); TEST (gsl_cdf_gamma_P, (0.1, 17.0, 10.0), 2.78502998087492130e-49, TEST_TOL6); TEST (gsl_cdf_gamma_P, (0.325, 17.0, 10.0), 1.37283653245125844e-40, TEST_TOL6); TEST (gsl_cdf_gamma_P, (1.0, 17.0, 10.0), 2.55811932292544243e-32, TEST_TOL6); TEST (gsl_cdf_gamma_P, (1.5, 17.0, 10.0), 2.40420441175422372e-29, TEST_TOL6); TEST (gsl_cdf_gamma_P, (2.0, 17.0, 10.0), 3.05092926217898577e-27, TEST_TOL6); TEST (gsl_cdf_gamma_P, (10.0, 17.0, 10.0), 1.094920130378183e-15, TEST_TOL6); TEST (gsl_cdf_gamma_P, (20.0, 17.0, 10.0), 5.60605096173161688e-11, TEST_TOL6); TEST (gsl_cdf_gamma_P, (100.0, 17.0, 10.0), 2.70416097848011280e-2, TEST_TOL6); TEST (gsl_cdf_gamma_P, (1000.0, 17.0, 10.0), 1.000000000000000000e0, TEST_TOL6); TEST (gsl_cdf_gamma_P, (10000.0, 17.0, 10.0), 1.000000000000000000e0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (0.0, 17.0, 10.0), 1.0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (1e-100, 17.0, 10.0), 1.0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (0.001, 17.0, 10.0), 1.0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (0.01, 17.0, 10.0), 1.0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (0.1, 17.0, 10.0), 1.0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (0.325, 17.0, 10.0), 1.0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (1.0, 17.0, 10.0), 1.0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (1.5, 17.0, 10.0), 1.0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (2.0, 17.0, 10.0), 1.0, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (10.0, 17.0, 10.0), 9.99999999999998905e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (20.0, 17.0, 10.0), 9.99999999943939490e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (100.0, 17.0, 10.0), 9.72958390215198872e-1, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (1000.0, 17.0, 10.0), 2.11200951633948570e-25, TEST_TOL6); TEST (gsl_cdf_gamma_Q, (10000.0, 17.0, 10.0), 0.0, 0.0); } void test_chisq (void) { TEST (gsl_cdf_chisq_P, (0.0, 13.0), 0.0, 0.0); TEST (gsl_cdf_chisq_P, (1e-100, 13.0), 0.0, 0.0); TEST (gsl_cdf_chisq_P, (0.001, 13.0), 1.86631102655845996e-25, TEST_TOL6); TEST (gsl_cdf_chisq_P, (0.01, 13.0), 5.87882248504529790e-19, TEST_TOL6); TEST (gsl_cdf_chisq_P, (0.1, 13.0), 1.78796983358555410e-12, TEST_TOL6); TEST (gsl_cdf_chisq_P, (0.325, 13.0), 3.44611313779905183e-9, TEST_TOL6); TEST (gsl_cdf_chisq_P, (1.0, 13.0), 3.83473473513595154e-6, TEST_TOL6); TEST (gsl_cdf_chisq_P, (1.5, 13.0), 4.31718389201041932e-5, TEST_TOL6); TEST (gsl_cdf_chisq_P, (2.0, 13.0), 2.26250084656047180e-4, TEST_TOL6); TEST (gsl_cdf_chisq_P, (10.0, 13.0), 3.06065632019251110e-1, TEST_TOL6); TEST (gsl_cdf_chisq_P, (20.0, 13.0), 9.04789743921908487e-1, TEST_TOL6); TEST (gsl_cdf_chisq_P, (100.0, 13.0), 9.99999999999998341e-1, TEST_TOL6); TEST (gsl_cdf_chisq_P, (1000.0, 13.0), 1e0, TEST_TOL6); TEST (gsl_cdf_chisq_P, (10000.0, 13.0), 1e0, TEST_TOL6); TEST (gsl_cdf_chisq_Q, (0.0, 13.0), 1e0, TEST_TOL6); TEST (gsl_cdf_chisq_Q, (1e-100, 13.0), 1e0, TEST_TOL6); TEST (gsl_cdf_chisq_Q, (0.001, 13.0), 1e0, TEST_TOL6); TEST (gsl_cdf_chisq_Q, (0.01, 13.0), 9.99999999999999999e-1, TEST_TOL6); TEST (gsl_cdf_chisq_Q, (0.1, 13.0), 9.99999999998212030e-1, TEST_TOL6); TEST (gsl_cdf_chisq_Q, (0.325, 13.0), 9.99999996553886862e-1, TEST_TOL6); TEST (gsl_cdf_chisq_Q, (1.0, 13.0), 9.99996165265264864e-1, TEST_TOL6); TEST (gsl_cdf_chisq_Q, (1.5, 13.0), 9.99956828161079896e-1, TEST_TOL6); TEST (gsl_cdf_chisq_Q, (2.0, 13.0), 9.99773749915343953e-1, TEST_TOL6); TEST (gsl_cdf_chisq_Q, (10.0, 13.0), 6.93934367980748890e-1, TEST_TOL6); TEST (gsl_cdf_chisq_Q, (20.0, 13.0), 9.52102560780915127e-2, TEST_TOL6); TEST (gsl_cdf_chisq_Q, (100.0, 13.0), 1.65902608070858809e-15, TEST_TOL6); TEST (gsl_cdf_chisq_Q, (1000.0, 13.0), 1.74851191544860225e-205, TEST_TOL6); TEST (gsl_cdf_chisq_Q, (10000.0, 13.0), 0.0, 0.0); } /* Beta distribution */ void test_beta (void) { TEST (gsl_cdf_beta_P, (0.0, 1.2, 1.3), 0.0, 0.0); TEST (gsl_cdf_beta_P, (1e-100, 1.2, 1.3), 1.34434944656489596e-120, TEST_TOL6); TEST (gsl_cdf_beta_P, (0.001, 1.2, 1.3), 3.37630042504535813e-4, TEST_TOL6); TEST (gsl_cdf_beta_P, (0.01, 1.2, 1.3), 5.34317264038929473e-3, TEST_TOL6); TEST (gsl_cdf_beta_P, (0.1, 1.2, 1.3), 8.33997828306748346e-2, TEST_TOL6); TEST (gsl_cdf_beta_P, (0.325, 1.2, 1.3), 3.28698654180583916e-1, TEST_TOL6); TEST (gsl_cdf_beta_P, (0.5, 1.2, 1.3), 5.29781429451299081e-1, TEST_TOL6); TEST (gsl_cdf_beta_P, (0.9, 1.2, 1.3), 9.38529397224430659e-1, TEST_TOL6); TEST (gsl_cdf_beta_P, (0.99, 1.2, 1.3), 9.96886438341254380e-1, TEST_TOL6); TEST (gsl_cdf_beta_P, (0.999, 1.2, 1.3), 9.99843792833067634e-1, TEST_TOL6); TEST (gsl_cdf_beta_P, (1.0, 1.2, 1.3), 1.0, TEST_TOL6); TEST (gsl_cdf_beta_Q, (0.0, 1.2, 1.3), 1.0, 0.0); TEST (gsl_cdf_beta_Q, (1e-100, 1.2, 1.3), 1e0, TEST_TOL6); TEST (gsl_cdf_beta_Q, (0.001, 1.2, 1.3), 9.99662369957495464e-1, TEST_TOL6); TEST (gsl_cdf_beta_Q, (0.01, 1.2, 1.3), 9.94656827359610705e-1, TEST_TOL6); TEST (gsl_cdf_beta_Q, (0.1, 1.2, 1.3), 9.16600217169325165e-1, TEST_TOL6); TEST (gsl_cdf_beta_Q, (0.325, 1.2, 1.3), 6.71301345819416084e-1, TEST_TOL6); TEST (gsl_cdf_beta_Q, (0.5, 1.2, 1.3), 4.70218570548700919e-1, TEST_TOL6); TEST (gsl_cdf_beta_Q, (0.9, 1.2, 1.3), 6.14706027755693408e-2, TEST_TOL6); TEST (gsl_cdf_beta_Q, (0.99, 1.2, 1.3), 3.11356165874561958e-3, TEST_TOL6); TEST (gsl_cdf_beta_Q, (0.999, 1.2, 1.3), 1.56207166932365759e-4, TEST_TOL6); TEST (gsl_cdf_beta_Q, (1.0, 1.2, 1.3), 0.0, TEST_TOL6); } void test_betainv (void) { TEST (gsl_cdf_beta_Pinv, (0.0, 1.2, 1.3), 0.0, 0.0); TEST (gsl_cdf_beta_Pinv, ( 1.34434944656489596e-120, 1.2, 1.3), 1e-100, TEST_TOL6); TEST (gsl_cdf_beta_Pinv, ( 3.37630042504535813e-4, 1.2, 1.3), 0.001, TEST_TOL6); TEST (gsl_cdf_beta_Pinv, ( 5.34317264038929473e-3, 1.2, 1.3), 0.01, TEST_TOL6); TEST (gsl_cdf_beta_Pinv, ( 8.33997828306748346e-2, 1.2, 1.3), 0.1, TEST_TOL6); TEST (gsl_cdf_beta_Pinv, ( 3.28698654180583916e-1, 1.2, 1.3), 0.325, TEST_TOL6); TEST (gsl_cdf_beta_Pinv, ( 5.29781429451299081e-1, 1.2, 1.3), 0.5, TEST_TOL6); TEST (gsl_cdf_beta_Pinv, ( 9.38529397224430659e-1, 1.2, 1.3), 0.9, TEST_TOL6); TEST (gsl_cdf_beta_Pinv, ( 9.96886438341254380e-1, 1.2, 1.3), 0.99, TEST_TOL6); TEST (gsl_cdf_beta_Pinv, ( 9.99843792833067634e-1, 1.2, 1.3), 0.999, TEST_TOL6); TEST (gsl_cdf_beta_Pinv, ( 1.0, 1.2, 1.3), 1.0, TEST_TOL6); TEST (gsl_cdf_beta_Qinv, ( 1.0, 1.2, 1.3), 0.0, 0.0); TEST (gsl_cdf_beta_Qinv, ( 1e0, 1.2, 1.3), 0.0, TEST_TOL6); TEST (gsl_cdf_beta_Qinv, ( 9.99662369957495464e-1, 1.2, 1.3), 0.001, TEST_TOL6); TEST (gsl_cdf_beta_Qinv, ( 9.94656827359610705e-1, 1.2, 1.3), 0.01, TEST_TOL6); TEST (gsl_cdf_beta_Qinv, ( 9.16600217169325165e-1, 1.2, 1.3), 0.1, TEST_TOL6); TEST (gsl_cdf_beta_Qinv, ( 6.71301345819416084e-1, 1.2, 1.3), 0.325, TEST_TOL6); TEST (gsl_cdf_beta_Qinv, ( 4.70218570548700919e-1, 1.2, 1.3), 0.5, TEST_TOL6); TEST (gsl_cdf_beta_Qinv, ( 6.14706027755693408e-2, 1.2, 1.3), 0.9, TEST_TOL6); TEST (gsl_cdf_beta_Qinv, ( 3.11356165874561958e-3, 1.2, 1.3), 0.99, TEST_TOL6); TEST (gsl_cdf_beta_Qinv, ( 1.56207166932365759e-4, 1.2, 1.3), 0.999, TEST_TOL6); TEST (gsl_cdf_beta_Qinv, ( 0.0, 1.2, 1.3), 1.0, TEST_TOL6); TEST (gsl_cdf_beta_Pinv, ( 0.025, 2133.0, 7868.0), 0.20530562929915865457928654, TEST_TOL6); } void test_gammainv (void) { TEST (gsl_cdf_gamma_Pinv, (0.0, 1.0, 1.0), 0.0, 0.0); TEST (gsl_cdf_gamma_Pinv, (1e-100, 1.0, 1.0), 1e-100, TEST_TOL6); TEST (gsl_cdf_gamma_Pinv, (9.99500166625008332e-4, 1.0, 1.0), 0.001, TEST_TOL6); TEST (gsl_cdf_gamma_Pinv, (9.95016625083194643e-3, 1.0, 1.0), 0.01, TEST_TOL6); TEST (gsl_cdf_gamma_Pinv, (9.51625819640404268e-2, 1.0, 1.0), 0.1, TEST_TOL6); TEST (gsl_cdf_gamma_Pinv, (2.77472646357927811e-1, 1.0, 1.0), 0.325, TEST_TOL6); TEST (gsl_cdf_gamma_Pinv, (6.32120558828557678e-1, 1.0, 1.0), 1.0, TEST_TOL6); TEST (gsl_cdf_gamma_Pinv, (7.76869839851570171e-1, 1.0, 1.0), 1.5, TEST_TOL6); TEST (gsl_cdf_gamma_Pinv, (8.64664716763387308e-1, 1.0, 1.0), 2.0, TEST_TOL6); TEST (gsl_cdf_gamma_Pinv, (9.99954600070237515e-1, 1.0, 1.0), 10.0, TEST_TOL6); TEST (gsl_cdf_gamma_Pinv, (9.99999997938846378e-1, 1.0, 1.0), 20.0, 100 * TEST_TOL6); TEST (gsl_cdf_gamma_Pinv, (1.0, 1.0, 1.0), GSL_POSINF, 0.0); /* Test case from Benjamin Redelings */ /* fails on x86_64, FIXME test value is from octave -- get high precision value */ TEST (gsl_cdf_gamma_Pinv, (0.1, 11.887411491530846,1.0), 7.73788447848618e+00, TEST_TOL1); TEST (gsl_cdf_gamma_Qinv, (0.0, 1.0, 1.0), GSL_POSINF, 0.0); TEST (gsl_cdf_gamma_Qinv, (2.06115362243855783e-9, 1.0, 1.0), 20.0, TEST_TOL6); TEST (gsl_cdf_gamma_Qinv, (4.53999297624848515e-5, 1.0, 1.0), 10.0, TEST_TOL6); TEST (gsl_cdf_gamma_Qinv, (1.35335283236612692e-1, 1.0, 1.0), 2.0, TEST_TOL6); TEST (gsl_cdf_gamma_Qinv, (2.23130160148429829e-1, 1.0, 1.0), 1.5, TEST_TOL6); TEST (gsl_cdf_gamma_Qinv, (3.67879441171442322e-1, 1.0, 1.0), 1.0, TEST_TOL6); TEST (gsl_cdf_gamma_Qinv, (7.22527353642072189e-1, 1.0, 1.0), 0.325, TEST_TOL6); TEST (gsl_cdf_gamma_Qinv, (9.04837418035959573e-1, 1.0, 1.0), 0.1, TEST_TOL6); TEST (gsl_cdf_gamma_Qinv, (9.90049833749168054e-1, 1.0, 1.0), 0.01, TEST_TOL6); TEST (gsl_cdf_gamma_Qinv, (9.99000499833374992e-1, 1.0, 1.0), 0.001, TEST_TOL6); TEST (gsl_cdf_gamma_Qinv, (1.0, 1.0, 1.0), 0.0, 0.0); } void test_chisqinv (void) { TEST (gsl_cdf_chisq_Pinv, (0.0, 13.0), 0.0, 0.0); TEST (gsl_cdf_chisq_Pinv, (1.86631102655845996e-25, 13.0), 0.001, TEST_TOL6); TEST (gsl_cdf_chisq_Pinv, (5.87882248504529790e-19, 13.0), 0.01, TEST_TOL6); TEST (gsl_cdf_chisq_Pinv, (1.78796983358555410e-12, 13.0), 0.1, TEST_TOL6); TEST (gsl_cdf_chisq_Pinv, (3.44611313779905183e-9, 13.0), 0.325, TEST_TOL6); TEST (gsl_cdf_chisq_Pinv, (3.83473473513595154e-6, 13.0), 1.0, TEST_TOL6); TEST (gsl_cdf_chisq_Pinv, (4.31718389201041932e-5, 13.0), 1.5, TEST_TOL6); TEST (gsl_cdf_chisq_Pinv, (2.26250084656047180e-4, 13.0), 2.0, TEST_TOL6); TEST (gsl_cdf_chisq_Pinv, (3.06065632019251110e-1, 13.0), 10.0, TEST_TOL6); TEST (gsl_cdf_chisq_Pinv, (9.04789743921908487e-1, 13.0), 20.0, TEST_TOL6); TEST (gsl_cdf_chisq_Pinv, (9.99999999999998341e-1, 13.0), 100.0, 0.01); TEST (gsl_cdf_chisq_Pinv, (1e0, 13.0), GSL_POSINF, 0.0); TEST (gsl_cdf_chisq_Pinv, (1.93238145206123590e-01, 1.5), 0.211980092931799521729407, TEST_TOL6); TEST (gsl_cdf_chisq_Pinv, (4.83e-8, 19.19), 1.632280186860266704532868343, TEST_TOL6); /* Test cases for bug 24704 */ TEST (gsl_cdf_chisq_Pinv, (0.05, 1263131.0), 1260517.771133388726131469059, TEST_TOL6); TEST (gsl_cdf_chisq_Pinv, (0.05, 2526262.0), 2522565.864973351096735720202, TEST_TOL6); #if 0 /* XXX - bug #39057 */ /* Test case reported by Yan Zhou */ TEST (gsl_cdf_chisq_Pinv, (0.5, 0.01), 0.99477710813146, TEST_TOL6); #endif TEST (gsl_cdf_chisq_Qinv, (0.0, 13.0), GSL_POSINF, TEST_TOL6); TEST (gsl_cdf_chisq_Qinv, (1.65902608070858809e-15, 13.0), 100.0, TEST_TOL6); TEST (gsl_cdf_chisq_Qinv, (9.52102560780915127e-2, 13.0), 20.0, TEST_TOL6); TEST (gsl_cdf_chisq_Qinv, (6.93934367980748892e-1, 13.0), 10.0, TEST_TOL6); TEST (gsl_cdf_chisq_Qinv, (9.99773749915343954e-1, 13.0), 2.0, TEST_TOL6); TEST (gsl_cdf_chisq_Qinv, (9.99956828161079894e-1, 13.0), 1.5, TEST_TOL6); TEST (gsl_cdf_chisq_Qinv, (9.99996165265264863e-1, 13.0), 1.0, TEST_TOL6); TEST (gsl_cdf_chisq_Qinv, (9.99999996553886862e-1, 13.0), 0.325, 1e-6); TEST (gsl_cdf_chisq_Qinv, (9.99999999998212031e-1, 13.0), 0.1, 1e-5); TEST (gsl_cdf_chisq_Qinv, (1.0, 13.0), 0.0, 0.0); } void test_tdistinv (void) { TEST (gsl_cdf_tdist_Pinv, (0.5, 1.0), 0.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (5.00318309780080559e-1, 1.0), 0.001, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (5.03182992764908255e-1, 1.0), 0.01, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (5.31725517430553569e-1, 1.0), 0.1, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (6.00023120032852123e-1, 1.0), 0.325, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (0.75000000000000000e0, 1.0), 1.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (8.12832958189001183e-1, 1.0), 1.5, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (8.52416382349566726e-1, 1.0), 2.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (9.68274482569446430e-1, 1.0), 10.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (9.84097748743823625e-1, 1.0), 20.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (9.96817007235091745e-1, 1.0), 100.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (9.99681690219919441e-1, 1.0), 1000.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (9.99968169011487724e-1, 1.0), 10000.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (0.5, 1.0), 0.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (4.99681690219919441e-1, 1.0), 0.001, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (4.96817007235091745e-1, 1.0), 0.01, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (4.68274482569446430e-1, 1.0), 0.1, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (3.99976879967147876e-1, 1.0), 0.325, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (2.5e-1, 1.0), 1.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (1.87167041810998816e-1, 1.0), 1.5, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (1.47583617650433274e-1, 1.0), 2.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (3.17255174305535695e-2, 1.0), 10.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (1.59022512561763752e-2, 1.0), 20.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (3.18299276490825515e-3, 1.0), 100.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (3.18309780080558939e-4, 1.0), 1000.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (3.18309885122757724e-5, 1.0), 10000.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (4.99681690219919441e-1, 1.0), -0.001, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (4.96817007235091744e-1, 1.0), -0.01, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (4.68274482569446430e-1, 1.0), -0.1, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (3.99976879967147876e-1, 1.0), -0.325, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (0.25, 1.0), -1.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (1.87167041810998816e-1, 1.0), -1.5, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (1.47583617650433274e-1, 1.0), -2.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (3.17255174305535695e-2, 1.0), -10.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (1.59022512561763751e-2, 1.0), -20.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (3.18299276490825514e-3, 1.0), -100.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (3.18309780080558938e-4, 1.0), -1000.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (3.18309885122757724e-5, 1.0), -10000.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (5.00318309780080559e-1, 1.0), -0.001, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (5.03182992764908255e-1, 1.0), -0.01, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (5.31725517430553570e-1, 1.0), -0.1, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (6.00023120032852124e-1, 1.0), -0.325, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (7.5e-1, 1.0), -1.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (8.12832958189001184e-1, 1.0), -1.5, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (8.52416382349566726e-1, 1.0), -2.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (9.68274482569446430e-1, 1.0), -10.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (9.84097748743823625e-1, 1.0), -20.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (9.96817007235091745e-1, 1.0), -100.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (9.99681690219919441e-1, 1.0), -1000.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (9.99968169011487724e-1, 1.0), -10000.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (4.99646446697795041e-01, 2.0), -0.001, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (4.96464554479100486e-01, 2.0), -0.01, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (4.64732719207070087e-01, 2.0), -0.1, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (3.88014227253126233e-01, 2.0), -0.325, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (2.11324865405187118e-01, 2.0), -1.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (1.36196562445500540e-01, 2.0), -1.5, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (9.17517095361369836e-02, 2.0), -2.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (4.92622851166284542e-03, 2.0), -10.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (1.24533194618354849e-03, 2.0), -20.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (4.99925012497812894e-05, 2.0), -100.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (4.99999250001249998e-07, 2.0), -1000.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (4.99999992500000125e-09, 2.0), -10000.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (5.00353553302204959e-1, 2.0), -0.001, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (5.03535445520899514e-1, 2.0), -0.01, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (5.35267280792929913e-1, 2.0), -0.1, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (6.11985772746873767e-1, 2.0), -0.325, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (7.88675134594812882e-1, 2.0), -1.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (8.63803437554499460e-1, 2.0), -1.5, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (9.08248290463863016e-1, 2.0), -2.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (9.95073771488337155e-1, 2.0), -10.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (9.98754668053816452e-1, 2.0), -20.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (9.99950007498750219e-1, 2.0), -100.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (9.99999500000749999e-1, 2.0), -1000.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (9.99999995000000075e-1, 2.0), -10000.0, 1e-6); TEST (gsl_cdf_tdist_Pinv, (5.00000000000000000e-01, 300.0), 0.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (5.00398609900942949e-01, 300.0), 0.001, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (5.03986033020559088e-01, 300.0), 0.01, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (5.39794441177768194e-01, 300.0), 0.1, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (6.27296201542523812e-01, 300.0), 0.325, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (8.40941797784686861e-01, 300.0), 1.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (9.32666983425369137e-01, 300.0), 1.5, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (9.76799239508425455e-01, 300.0), 2.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (1.00000000000000000e+00, 300.0), GSL_POSINF, 0.0); TEST (gsl_cdf_tdist_Qinv, (5.00000000000000000e-01, 300.0), 0.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (4.99601390099057051e-1, 300.0), 0.001, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (4.96013966979440912e-1, 300.0), 0.01, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (4.60205558822231806e-1, 300.0), 0.1, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (3.72703798457476188e-1, 300.0), 0.325, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (1.59058202215313138e-1, 300.0), 1.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (6.73330165746308628e-2, 300.0), 1.5, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (2.32007604915745452e-2, 300.0), 2.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (8.279313677e-21, 300.0), 10.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (1.93159812815803978e-57, 300.0), 20.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (1.02557519997736154e-232, 300.0), 100.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (0.00000000000000000e+00, 300.0), GSL_POSINF, 0.0); TEST (gsl_cdf_tdist_Pinv, (4.99601390099057051e-01, 300.0), -0.001, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (4.96013966979440912e-01, 300.0), -0.01, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (4.60205558822231806e-01, 300.0), -0.1, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (3.72703798457476188e-01, 300.0), -0.325, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (1.59058202215313138e-01, 300.0), -1.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (6.73330165746308628e-02, 300.0), -1.5, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (2.32007604915745452e-02, 300.0), -2.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (8.279313675556272534e-21, 300.0), -10.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (1.93159812815803978e-57, 300.0), -20.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (1.02557519997736154e-232, 300.0), -100.0, TEST_TOL6); TEST (gsl_cdf_tdist_Pinv, (0.0, 300.0), GSL_NEGINF, 0.0); TEST (gsl_cdf_tdist_Qinv, (5.00398609900942949e-1, 300.0), -0.001, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (5.03986033020559088e-1, 300.0), -0.01, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (5.39794441177768194e-1, 300.0), -0.1, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (6.27296201542523812e-1, 300.0), -0.325, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (8.40941797784686862e-1, 300.0), -1.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (9.32666983425369137e-1, 300.0), -1.5, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (9.76799239508425455e-1, 300.0), -2.0, TEST_TOL6); TEST (gsl_cdf_tdist_Qinv, (1.000000000000000000e0, 300.0), GSL_NEGINF, TEST_TOL6); } gsl/cdf/gamma.c0000644000175000017500000000276113536674414011722 0ustar eddedd/* cdf/cdf_gamma.c * * Copyright (C) 2003 Jason Stover. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Author: J. Stover */ #include #include #include #include #include double gsl_cdf_gamma_P (const double x, const double a, const double b) { double P; double y = x / b; if (x <= 0.0) { return 0.0; } if (y > a) { P = 1 - gsl_sf_gamma_inc_Q (a, y); } else { P = gsl_sf_gamma_inc_P (a, y); } return P; } double gsl_cdf_gamma_Q (const double x, const double a, const double b) { double Q; double y = x / b; if (x <= 0.0) { return 1.0; } if (y < a) { Q = 1 - gsl_sf_gamma_inc_P (a, y); } else { Q = gsl_sf_gamma_inc_Q (a, y); } return Q; } gsl/cdf/weibull.c0000644000175000017500000000215213536674414012275 0ustar eddedd/* cdf/weibull.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_weibull_P (const double x, const double a, const double b) { double P = -expm1 (-pow(x/a, b)); return P; } double gsl_cdf_weibull_Q (const double x, const double a, const double b) { double Q = exp (-pow(x/a, b)); return Q; } gsl/cdf/chisq.c0000644000175000017500000000206513536674414011744 0ustar eddedd/* cdf/cdf_chisq.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include double gsl_cdf_chisq_P (const double x, const double nu) { return gsl_cdf_gamma_P (x, nu / 2, 2.0); } double gsl_cdf_chisq_Q (const double x, const double nu) { return gsl_cdf_gamma_Q (x, nu / 2, 2.0); } gsl/cdf/flat.c0000644000175000017500000000245613536674414011567 0ustar eddedd/* cdf/flat.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_flat_P (const double x, const double a, const double b) { double P; if (x < a) { P = 0; } else if (x > b) { P = 1; } else { P = (x-a)/(b-a); } return P; } double gsl_cdf_flat_Q (const double x, const double a, const double b) { double Q; if (x < a) { Q = 1; } else if (x > b) { Q = 0; } else { Q = (b-x)/(b-a); } return Q; } gsl/cdf/laplace.c0000644000175000017500000000242513536674414012236 0ustar eddedd/* cdf/laplace.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_laplace_P (const double x, const double a) { double P; double u = x / a; if (u > 0) { P = 0.5 + 0.5*(1 - exp(-u)) ; } else { P = 0.5 * exp(u); } return P; } double gsl_cdf_laplace_Q (const double x, const double a) { double Q; double u = x / a; if (u > 0) { Q = 0.5 * exp(-u); } else { Q = 1 - 0.5 *exp(u); } return Q; } gsl/cdf/fdist.c0000644000175000017500000000340613536674414011746 0ustar eddedd/* cdf/fdist.c * * Copyright (C) 2002 Przemyslaw Sliwa and Jason H. Stover. * Copyright (C) 2006, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include "error.h" #include "beta_inc.c" /* * Lower tail. */ double gsl_cdf_fdist_P (const double x, const double nu1, const double nu2) { double P; double r = nu2 / nu1; if (x < r) { double u = x / (r + x); P = beta_inc_AXPY (1.0, 0.0, nu1 / 2.0, nu2 / 2.0, u); } else { double u = r / (r + x); P = beta_inc_AXPY (-1.0, 1.0, nu2 / 2.0, nu1 / 2.0, u); } return P; } /* * Upper tail. */ double gsl_cdf_fdist_Q (const double x, const double nu1, const double nu2) { double Q; double r = nu2 / nu1; if (x < r) { double u = x / (r + x); Q = beta_inc_AXPY (-1.0, 1.0, nu1 / 2.0, nu2 / 2.0, u); } else { double u = r / (r + x); Q = beta_inc_AXPY (1.0, 0.0, nu2 / 2.0, nu1 / 2.0, u); } return Q; } gsl/cdf/test_auto.c0000644000175000017500000036201013536674414012643 0ustar eddeddvoid test_auto_beta (void); void test_auto_beta (void) { TEST(gsl_cdf_beta_P, (0.0000000000000000e+00,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_beta_P, (1.0000000000000000e-10,1.3,2.7), 3.329258013904e-13, TEST_TOL6); TEST(gsl_cdf_beta_P, (1.0000000000000001e-09,1.3,2.7), 6.642743046207e-12, TEST_TOL6); TEST(gsl_cdf_beta_P, (1.0000000000000000e-08,1.3,2.7), 1.325401475350e-10, TEST_TOL6); TEST(gsl_cdf_beta_P, (9.9999999999999995e-08,1.3,2.7), 2.644523387276e-09, TEST_TOL6); TEST(gsl_cdf_beta_P, (9.9999999999999995e-07,1.3,2.7), 5.276513292646e-08, TEST_TOL6); TEST(gsl_cdf_beta_P, (1.0000000000000001e-05,1.3,2.7), 1.052793708285e-06, TEST_TOL6); TEST(gsl_cdf_beta_P, (1.0000000000000000e-04,1.3,2.7), 2.100417958505e-05, TEST_TOL6); TEST(gsl_cdf_beta_P, (1.0000000000000000e-03,1.3,2.7), 4.187261218400e-04, TEST_TOL6); TEST(gsl_cdf_beta_P, (1.0000000000000000e-02,1.3,2.7), 8.282559388393e-03, TEST_TOL6); TEST(gsl_cdf_beta_P, (1.0000000000000001e-01,1.3,2.7), 1.512194578010e-01, TEST_TOL6); TEST(gsl_cdf_beta_P, (2.0000000000000001e-01,1.3,2.7), 3.358123280407e-01, TEST_TOL6); TEST(gsl_cdf_beta_P, (2.9999999999999999e-01,1.3,2.7), 5.104163996495e-01, TEST_TOL6); TEST(gsl_cdf_beta_P, (4.0000000000000002e-01,1.3,2.7), 6.620682399410e-01, TEST_TOL6); TEST(gsl_cdf_beta_P, (5.0000000000000000e-01,1.3,2.7), 7.852786981833e-01, TEST_TOL6); TEST(gsl_cdf_beta_P, (5.9999999999999998e-01,1.3,2.7), 8.784005878950e-01, TEST_TOL6); TEST(gsl_cdf_beta_P, (8.0000000000000004e-01,1.3,2.7), 9.801824171406e-01, TEST_TOL6); TEST(gsl_cdf_beta_P, (9.0000000000000002e-01,1.3,2.7), 9.968736852365e-01, TEST_TOL6); TEST(gsl_cdf_beta_P, (9.8999999999999999e-01,1.3,2.7), 9.999936324464e-01, TEST_TOL6); TEST(gsl_cdf_beta_P, (9.9900000000000000e-01,1.3,2.7), 9.999999872699e-01, TEST_TOL6); TEST(gsl_cdf_beta_P, (9.9990000000000001e-01,1.3,2.7), 9.999999999746e-01, TEST_TOL6); TEST(gsl_cdf_beta_P, (9.9999000000000005e-01,1.3,2.7), 9.999999999999e-01, TEST_TOL6); TEST(gsl_cdf_beta_P, (1.0000000000000000e+00,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_beta_Q, (1.0000000000000000e+00,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_beta_Q, (9.9999000000000005e-01,1.3,2.7), 5.069044353228e-14, TEST_TOL6); TEST(gsl_cdf_beta_Q, (9.9990000000000001e-01,1.3,2.7), 2.540490259443e-11, TEST_TOL6); TEST(gsl_cdf_beta_Q, (9.9900000000000000e-01,1.3,2.7), 1.273010336738e-08, TEST_TOL6); TEST(gsl_cdf_beta_Q, (9.8999999999999999e-01,1.3,2.7), 6.367553598351e-06, TEST_TOL6); TEST(gsl_cdf_beta_Q, (9.0000000000000002e-01,1.3,2.7), 3.126314763488e-03, TEST_TOL6); TEST(gsl_cdf_beta_Q, (8.0000000000000004e-01,1.3,2.7), 1.981758285937e-02, TEST_TOL6); TEST(gsl_cdf_beta_Q, (5.9999999999999998e-01,1.3,2.7), 1.215994121050e-01, TEST_TOL6); TEST(gsl_cdf_beta_Q, (5.0000000000000000e-01,1.3,2.7), 2.147213018167e-01, TEST_TOL6); TEST(gsl_cdf_beta_Q, (4.0000000000000002e-01,1.3,2.7), 3.379317600590e-01, TEST_TOL6); TEST(gsl_cdf_beta_Q, (2.9999999999999999e-01,1.3,2.7), 4.895836003505e-01, TEST_TOL6); TEST(gsl_cdf_beta_Q, (2.0000000000000001e-01,1.3,2.7), 6.641876719593e-01, TEST_TOL6); TEST(gsl_cdf_beta_Q, (1.0000000000000001e-01,1.3,2.7), 8.487805421990e-01, TEST_TOL6); TEST(gsl_cdf_beta_Q, (1.0000000000000000e-02,1.3,2.7), 9.917174406116e-01, TEST_TOL6); TEST(gsl_cdf_beta_Q, (1.0000000000000000e-03,1.3,2.7), 9.995812738782e-01, TEST_TOL6); TEST(gsl_cdf_beta_Q, (1.0000000000000000e-04,1.3,2.7), 9.999789958204e-01, TEST_TOL6); TEST(gsl_cdf_beta_Q, (1.0000000000000001e-05,1.3,2.7), 9.999989472063e-01, TEST_TOL6); TEST(gsl_cdf_beta_Q, (9.9999999999999995e-07,1.3,2.7), 9.999999472349e-01, TEST_TOL6); TEST(gsl_cdf_beta_Q, (9.9999999999999995e-08,1.3,2.7), 9.999999973555e-01, TEST_TOL6); TEST(gsl_cdf_beta_Q, (1.0000000000000000e-08,1.3,2.7), 9.999999998675e-01, TEST_TOL6); TEST(gsl_cdf_beta_Q, (1.0000000000000001e-09,1.3,2.7), 9.999999999934e-01, TEST_TOL6); TEST(gsl_cdf_beta_Q, (1.0000000000000000e-10,1.3,2.7), 9.999999999997e-01, TEST_TOL6); TEST(gsl_cdf_beta_Q, (0.0000000000000000e+00,1.3,2.7), 1.000000000000e+00, TEST_TOL6); } void test_auto_fdist (void); void test_auto_fdist (void) { TEST(gsl_cdf_fdist_P, (0.0000000000000000e+00,5.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e-10,5.3,2.7), 3.231380663090e-26, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000001e-09,5.3,2.7), 1.443404714791e-23, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e-08,5.3,2.7), 6.447451698511e-21, TEST_TOL6); TEST(gsl_cdf_fdist_P, (9.9999999999999995e-08,5.3,2.7), 2.879969407315e-18, TEST_TOL6); TEST(gsl_cdf_fdist_P, (9.9999999999999995e-07,5.3,2.7), 1.286428479993e-15, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000001e-05,5.3,2.7), 5.745970138195e-13, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e-04,5.3,2.7), 2.565314230632e-10, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e-03,5.3,2.7), 1.140026203760e-07, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e-02,5.3,2.7), 4.840333162527e-05, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000001e-01,5.3,2.7), 1.360698992545e-02, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e+00,5.3,2.7), 4.532720490874e-01, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e+01,5.3,2.7), 9.461328174717e-01, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e+02,5.3,2.7), 9.973356976994e-01, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e+03,5.3,2.7), 9.998797338050e-01, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e+04,5.3,2.7), 9.999946222456e-01, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e+05,5.3,2.7), 9.999997597592e-01, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e+06,5.3,2.7), 9.999999892687e-01, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e+07,5.3,2.7), 9.999999995207e-01, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e+08,5.3,2.7), 9.999999999786e-01, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e+09,5.3,2.7), 9.999999999990e-01, TEST_TOL6); TEST(gsl_cdf_fdist_P, (1.0000000000000000e+10,5.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e+10,5.3,2.7), 4.272202262298e-14, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e+09,5.3,2.7), 9.564269502770e-13, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e+08,5.3,2.7), 2.141173208523e-11, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e+07,5.3,2.7), 4.793489218238e-10, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e+06,5.3,2.7), 1.073127433440e-08, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e+05,5.3,2.7), 2.402407758939e-07, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e+04,5.3,2.7), 5.377754447932e-06, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e+03,5.3,2.7), 1.202661950234e-04, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e+02,5.3,2.7), 2.664302300604e-03, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e+01,5.3,2.7), 5.386718252832e-02, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e+00,5.3,2.7), 5.467279509126e-01, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000001e-01,5.3,2.7), 9.863930100746e-01, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e-02,5.3,2.7), 9.999515966684e-01, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e-03,5.3,2.7), 9.999998859974e-01, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e-04,5.3,2.7), 9.999999997435e-01, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000001e-05,5.3,2.7), 9.999999999994e-01, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (9.9999999999999995e-07,5.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (9.9999999999999995e-08,5.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e-08,5.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000001e-09,5.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (1.0000000000000000e-10,5.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_fdist_Q, (0.0000000000000000e+00,5.3,2.7), 1.000000000000e+00, TEST_TOL6); } void test_auto_cauchy (void); void test_auto_cauchy (void) { TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e+10,1.3), 4.138028520389e-11, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (4.1380285203892783e-11,1.3), -1.000000000000e+10, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e+09,1.3), 4.138028520389e-10, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (4.1380285203892792e-10,1.3), -1.000000000000e+09, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e+08,1.3), 4.138028520389e-09, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (4.1380285203892787e-09,1.3), -1.000000000000e+08, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e+07,1.3), 4.138028520389e-08, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (4.1380285203892555e-08,1.3), -1.000000000000e+07, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e+06,1.3), 4.138028520387e-07, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (4.1380285203869488e-07,1.3), -1.000000000000e+06, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e+05,1.3), 4.138028520156e-06, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (4.1380285201561693e-06,1.3), -1.000000000000e+05, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e+04,1.3), 4.138028497078e-05, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (4.1380284970783855e-05,1.3), -1.000000000000e+04, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e+03,1.3), 4.138026189302e-04, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (4.1380261893022424e-04,1.3), -1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e+02,1.3), 4.137795435084e-03, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (4.1377954350836910e-03,1.3), -1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e+01,1.3), 4.114951182497e-02, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (4.1149511824973506e-02,1.3), -1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e+00,1.3), 2.912855998398e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (2.9128559983984725e-01,1.3), -1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000001e-01,1.3), 4.755627480278e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (4.7556274802780252e-01,1.3), -1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e-02,1.3), 4.975515107069e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (4.9755151070688325e-01,1.3), -1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e-03,1.3), 4.997551462897e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (4.9975514628969159e-01,1.3), -1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e-04,1.3), 4.999755146242e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000001e-05,1.3), 4.999975514624e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-9.9999999999999995e-07,1.3), 4.999997551462e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-9.9999999999999995e-08,1.3), 4.999999755146e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e-08,1.3), 4.999999975515e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000001e-09,1.3), 4.999999997551e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (-1.0000000000000000e-10,1.3), 4.999999999755e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (0.0000000000000000e+00,1.3), 5.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (5.0000000000000011e-01,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e-10,1.3), 5.000000000245e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000001e-09,1.3), 5.000000002449e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e-08,1.3), 5.000000024485e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (9.9999999999999995e-08,1.3), 5.000000244854e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (9.9999999999999995e-07,1.3), 5.000002448538e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000001e-05,1.3), 5.000024485376e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e-04,1.3), 5.000244853758e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e-03,1.3), 5.002448537103e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (5.0024485371030836e-01,1.3), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e-02,1.3), 5.024484892931e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (5.0244848929311670e-01,1.3), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000001e-01,1.3), 5.244372519722e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (5.2443725197219748e-01,1.3), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e+00,1.3), 7.087144001602e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (7.0871440016015275e-01,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e+01,1.3), 9.588504881750e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (9.5885048817502649e-01,1.3), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e+02,1.3), 9.958622045649e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (9.9586220456491636e-01,1.3), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e+03,1.3), 9.995861973811e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Pinv, (9.9958619738106980e-01,1.3), 1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e+04,1.3), 9.999586197150e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e+05,1.3), 9.999958619715e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e+06,1.3), 9.999995861971e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e+07,1.3), 9.999999586197e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e+08,1.3), 9.999999958620e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e+09,1.3), 9.999999995862e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_P, (1.0000000000000000e+10,1.3), 9.999999999586e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e+10,1.3), 4.138028520389e-11, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (4.1380285203892783e-11,1.3), 1.000000000000e+10, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e+09,1.3), 4.138028520389e-10, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (4.1380285203892792e-10,1.3), 1.000000000000e+09, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e+08,1.3), 4.138028520389e-09, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (4.1380285203892787e-09,1.3), 1.000000000000e+08, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e+07,1.3), 4.138028520389e-08, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (4.1380285203892555e-08,1.3), 1.000000000000e+07, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e+06,1.3), 4.138028520387e-07, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (4.1380285203869488e-07,1.3), 1.000000000000e+06, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e+05,1.3), 4.138028520156e-06, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (4.1380285201561693e-06,1.3), 1.000000000000e+05, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e+04,1.3), 4.138028497078e-05, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (4.1380284970783855e-05,1.3), 1.000000000000e+04, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e+03,1.3), 4.138026189302e-04, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (4.1380261893022424e-04,1.3), 1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e+02,1.3), 4.137795435084e-03, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (4.1377954350836910e-03,1.3), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e+01,1.3), 4.114951182497e-02, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (4.1149511824973506e-02,1.3), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e+00,1.3), 2.912855998398e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (2.9128559983984725e-01,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000001e-01,1.3), 4.755627480278e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (4.7556274802780252e-01,1.3), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e-02,1.3), 4.975515107069e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (4.9755151070688325e-01,1.3), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e-03,1.3), 4.997551462897e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (4.9975514628969159e-01,1.3), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e-04,1.3), 4.999755146242e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000001e-05,1.3), 4.999975514624e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (9.9999999999999995e-07,1.3), 4.999997551462e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (9.9999999999999995e-08,1.3), 4.999999755146e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e-08,1.3), 4.999999975515e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000001e-09,1.3), 4.999999997551e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (1.0000000000000000e-10,1.3), 4.999999999755e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (0.0000000000000000e+00,1.3), 5.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (5.0000000000000011e-01,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e-10,1.3), 5.000000000245e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000001e-09,1.3), 5.000000002449e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e-08,1.3), 5.000000024485e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-9.9999999999999995e-08,1.3), 5.000000244854e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-9.9999999999999995e-07,1.3), 5.000002448538e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000001e-05,1.3), 5.000024485376e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e-04,1.3), 5.000244853758e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e-03,1.3), 5.002448537103e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (5.0024485371030836e-01,1.3), -1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e-02,1.3), 5.024484892931e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (5.0244848929311670e-01,1.3), -1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000001e-01,1.3), 5.244372519722e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (5.2443725197219748e-01,1.3), -1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e+00,1.3), 7.087144001602e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (7.0871440016015275e-01,1.3), -1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e+01,1.3), 9.588504881750e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (9.5885048817502649e-01,1.3), -1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e+02,1.3), 9.958622045649e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (9.9586220456491636e-01,1.3), -1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e+03,1.3), 9.995861973811e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Qinv, (9.9958619738106980e-01,1.3), -1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e+04,1.3), 9.999586197150e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e+05,1.3), 9.999958619715e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e+06,1.3), 9.999995861971e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e+07,1.3), 9.999999586197e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e+08,1.3), 9.999999958620e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e+09,1.3), 9.999999995862e-01, TEST_TOL6); TEST(gsl_cdf_cauchy_Q, (-1.0000000000000000e+10,1.3), 9.999999999586e-01, TEST_TOL6); } void test_auto_gaussian (void); void test_auto_gaussian (void) { TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e+10,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e+09,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e+08,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e+07,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e+06,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e+05,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e+04,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e+03,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e+02,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e+01,1.3), 7.225229227927e-15, TEST_TOL6); TEST(gsl_cdf_gaussian_Pinv, (7.2252292279265077e-15,1.3), -1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e+00,1.3), 2.208781637125e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Pinv, (2.2087816371245972e-01,1.3), -1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000001e-01,1.3), 4.693423696034e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Pinv, (4.6934236960338749e-01,1.3), -1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e-02,1.3), 4.969312434916e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Pinv, (4.9693124349158196e-01,1.3), -1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e-03,1.3), 4.996931213530e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Pinv, (4.9969312135303229e-01,1.3), -1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e-04,1.3), 4.999693121323e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000001e-05,1.3), 4.999969312132e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-9.9999999999999995e-07,1.3), 4.999996931213e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-9.9999999999999995e-08,1.3), 4.999999693121e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e-08,1.3), 4.999999969312e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000001e-09,1.3), 4.999999996931e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (-1.0000000000000000e-10,1.3), 4.999999999693e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (0.0000000000000000e+00,1.3), 5.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Pinv, (5.0000000000000000e-01,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e-10,1.3), 5.000000000307e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000001e-09,1.3), 5.000000003069e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e-08,1.3), 5.000000030688e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (9.9999999999999995e-08,1.3), 5.000000306879e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (9.9999999999999995e-07,1.3), 5.000003068787e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000001e-05,1.3), 5.000030687868e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e-04,1.3), 5.000306878677e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e-03,1.3), 5.003068786470e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Pinv, (5.0030687864696777e-01,1.3), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e-02,1.3), 5.030687565084e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Pinv, (5.0306875650841798e-01,1.3), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000001e-01,1.3), 5.306576303966e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Pinv, (5.3065763039661251e-01,1.3), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e+00,1.3), 7.791218362875e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Pinv, (7.7912183628754028e-01,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e+01,1.3), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e+02,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e+03,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e+04,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e+05,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e+06,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e+07,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e+08,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e+09,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_P, (1.0000000000000000e+10,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e+10,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e+09,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e+08,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e+07,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e+06,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e+05,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e+04,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e+03,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e+02,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e+01,1.3), 7.225229227927e-15, TEST_TOL6); TEST(gsl_cdf_gaussian_Qinv, (7.2252292279265077e-15,1.3), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e+00,1.3), 2.208781637125e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Qinv, (2.2087816371245972e-01,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000001e-01,1.3), 4.693423696034e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Qinv, (4.6934236960338749e-01,1.3), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e-02,1.3), 4.969312434916e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Qinv, (4.9693124349158196e-01,1.3), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e-03,1.3), 4.996931213530e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Qinv, (4.9969312135303229e-01,1.3), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e-04,1.3), 4.999693121323e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000001e-05,1.3), 4.999969312132e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (9.9999999999999995e-07,1.3), 4.999996931213e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (9.9999999999999995e-08,1.3), 4.999999693121e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e-08,1.3), 4.999999969312e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000001e-09,1.3), 4.999999996931e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (1.0000000000000000e-10,1.3), 4.999999999693e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (0.0000000000000000e+00,1.3), 5.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Qinv, (5.0000000000000000e-01,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e-10,1.3), 5.000000000307e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000001e-09,1.3), 5.000000003069e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e-08,1.3), 5.000000030688e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-9.9999999999999995e-08,1.3), 5.000000306879e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-9.9999999999999995e-07,1.3), 5.000003068787e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000001e-05,1.3), 5.000030687868e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e-04,1.3), 5.000306878677e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e-03,1.3), 5.003068786470e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Qinv, (5.0030687864696777e-01,1.3), -1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e-02,1.3), 5.030687565084e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Qinv, (5.0306875650841798e-01,1.3), -1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000001e-01,1.3), 5.306576303966e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Qinv, (5.3065763039661251e-01,1.3), -1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e+00,1.3), 7.791218362875e-01, TEST_TOL6); TEST(gsl_cdf_gaussian_Qinv, (7.7912183628754028e-01,1.3), -1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e+01,1.3), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e+02,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e+03,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e+04,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e+05,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e+06,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e+07,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e+08,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e+09,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gaussian_Q, (-1.0000000000000000e+10,1.3), 1.000000000000e+00, TEST_TOL6); } void test_auto_laplace (void); void test_auto_laplace (void) { TEST(gsl_cdf_laplace_P, (-1.0000000000000000e+10,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000000e+09,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000000e+08,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000000e+07,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000000e+06,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000000e+05,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000000e+04,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000000e+03,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000000e+02,1.3), 1.957501779912e-34, TEST_TOL6); TEST(gsl_cdf_laplace_Pinv, (1.9575017799122328e-34,1.3), -1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000000e+01,1.3), 2.281619502905e-04, TEST_TOL6); TEST(gsl_cdf_laplace_Pinv, (2.2816195029051560e-04,1.3), -1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000000e+00,1.3), 2.316846846156e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Pinv, (2.3168468461558764e-01,1.3), -1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000001e-01,1.3), 4.629805393212e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Pinv, (4.6298053932115801e-01,1.3), -1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000000e-02,1.3), 4.961686011956e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Pinv, (4.9616860119557432e-01,1.3), -1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000000e-03,1.3), 4.996155325065e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Pinv, (4.9961553250645546e-01,1.3), -1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000000e-04,1.3), 4.999615399408e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000001e-05,1.3), 4.999961538609e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-9.9999999999999995e-07,1.3), 4.999996153848e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-9.9999999999999995e-08,1.3), 4.999999615385e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000000e-08,1.3), 4.999999961538e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000001e-09,1.3), 4.999999996154e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (-1.0000000000000000e-10,1.3), 4.999999999615e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (0.0000000000000000e+00,1.3), 5.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Pinv, (5.0000000000000000e-01,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e-10,1.3), 5.000000000385e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000001e-09,1.3), 5.000000003846e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e-08,1.3), 5.000000038462e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (9.9999999999999995e-08,1.3), 5.000000384615e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (9.9999999999999995e-07,1.3), 5.000003846152e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000001e-05,1.3), 5.000038461391e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e-04,1.3), 5.000384600592e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e-03,1.3), 5.003844674935e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Pinv, (5.0038446749354448e-01,1.3), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e-02,1.3), 5.038313988044e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Pinv, (5.0383139880442562e-01,1.3), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000001e-01,1.3), 5.370194606788e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Pinv, (5.3701946067884199e-01,1.3), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e+00,1.3), 7.683153153844e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Pinv, (7.6831531538441233e-01,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e+01,1.3), 9.997718380497e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Pinv, (9.9977183804970948e-01,1.3), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e+02,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e+03,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e+04,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e+05,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e+06,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e+07,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e+08,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e+09,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_P, (1.0000000000000000e+10,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e+10,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e+09,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e+08,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e+07,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e+06,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e+05,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e+04,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e+03,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e+02,1.3), 1.957501779912e-34, TEST_TOL6); TEST(gsl_cdf_laplace_Qinv, (1.9575017799122328e-34,1.3), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e+01,1.3), 2.281619502905e-04, TEST_TOL6); TEST(gsl_cdf_laplace_Qinv, (2.2816195029051560e-04,1.3), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e+00,1.3), 2.316846846156e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Qinv, (2.3168468461558764e-01,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000001e-01,1.3), 4.629805393212e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Qinv, (4.6298053932115801e-01,1.3), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e-02,1.3), 4.961686011956e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Qinv, (4.9616860119557432e-01,1.3), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e-03,1.3), 4.996155325065e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Qinv, (4.9961553250645546e-01,1.3), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e-04,1.3), 4.999615399408e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000001e-05,1.3), 4.999961538609e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (9.9999999999999995e-07,1.3), 4.999996153848e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (9.9999999999999995e-08,1.3), 4.999999615385e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e-08,1.3), 4.999999961538e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000001e-09,1.3), 4.999999996154e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (1.0000000000000000e-10,1.3), 4.999999999615e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (0.0000000000000000e+00,1.3), 5.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Qinv, (5.0000000000000000e-01,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e-10,1.3), 5.000000000385e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000001e-09,1.3), 5.000000003846e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e-08,1.3), 5.000000038462e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-9.9999999999999995e-08,1.3), 5.000000384615e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-9.9999999999999995e-07,1.3), 5.000003846152e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000001e-05,1.3), 5.000038461391e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e-04,1.3), 5.000384600592e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e-03,1.3), 5.003844674935e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Qinv, (5.0038446749354448e-01,1.3), -1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e-02,1.3), 5.038313988044e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Qinv, (5.0383139880442562e-01,1.3), -1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000001e-01,1.3), 5.370194606788e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Qinv, (5.3701946067884199e-01,1.3), -1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e+00,1.3), 7.683153153844e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Qinv, (7.6831531538441233e-01,1.3), -1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e+01,1.3), 9.997718380497e-01, TEST_TOL6); TEST(gsl_cdf_laplace_Qinv, (9.9977183804970948e-01,1.3), -1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e+02,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e+03,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e+04,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e+05,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e+06,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e+07,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e+08,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e+09,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_laplace_Q, (-1.0000000000000000e+10,1.3), 1.000000000000e+00, TEST_TOL6); } void test_auto_rayleigh (void); void test_auto_rayleigh (void) { TEST(gsl_cdf_rayleigh_P, (0.0000000000000000e+00,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e-10,1.3), 2.958579881657e-21, TEST_TOL6); TEST(gsl_cdf_rayleigh_Pinv, (2.9585798816568050e-21,1.3), 1.000000000000e-10, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000001e-09,1.3), 2.958579881657e-19, TEST_TOL6); TEST(gsl_cdf_rayleigh_Pinv, (2.9585798816568049e-19,1.3), 1.000000000000e-09, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e-08,1.3), 2.958579881657e-17, TEST_TOL6); TEST(gsl_cdf_rayleigh_Pinv, (2.9585798816568048e-17,1.3), 1.000000000000e-08, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (9.9999999999999995e-08,1.3), 2.958579881657e-15, TEST_TOL6); TEST(gsl_cdf_rayleigh_Pinv, (2.9585798816568001e-15,1.3), 1.000000000000e-07, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (9.9999999999999995e-07,1.3), 2.958579881656e-13, TEST_TOL6); TEST(gsl_cdf_rayleigh_Pinv, (2.9585798816563665e-13,1.3), 1.000000000000e-06, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000001e-05,1.3), 2.958579881613e-11, TEST_TOL6); TEST(gsl_cdf_rayleigh_Pinv, (2.9585798816130393e-11,1.3), 1.000000000000e-05, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e-04,1.3), 2.958579877280e-09, TEST_TOL6); TEST(gsl_cdf_rayleigh_Pinv, (2.9585798772802076e-09,1.3), 1.000000000000e-04, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e-03,1.3), 2.958579443997e-07, TEST_TOL6); TEST(gsl_cdf_rayleigh_Pinv, (2.9585794439971025e-07,1.3), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e-02,1.3), 2.958536116114e-05, TEST_TOL6); TEST(gsl_cdf_rayleigh_Pinv, (2.9585361161138382e-05,1.3), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000001e-01,1.3), 2.954207597179e-03, TEST_TOL6); TEST(gsl_cdf_rayleigh_Pinv, (2.9542075971792496e-03,1.3), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e+00,1.3), 2.561069378624e-01, TEST_TOL6); TEST(gsl_cdf_rayleigh_Pinv, (2.5610693786235361e-01,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e+01,1.3), 9.999999999999e-01, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e+02,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e+03,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e+04,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e+05,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e+06,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e+07,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e+08,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e+09,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_P, (1.0000000000000000e+10,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e+10,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e+09,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e+08,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e+07,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e+06,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e+05,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e+04,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e+03,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e+02,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e+01,1.3), 1.415959498849e-13, TEST_TOL6); TEST(gsl_cdf_rayleigh_Qinv, (1.4159594988487832e-13,1.3), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e+00,1.3), 7.438930621376e-01, TEST_TOL6); TEST(gsl_cdf_rayleigh_Qinv, (7.4389306213764639e-01,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000001e-01,1.3), 9.970457924028e-01, TEST_TOL6); TEST(gsl_cdf_rayleigh_Qinv, (9.9704579240282076e-01,1.3), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e-02,1.3), 9.999704146388e-01, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e-03,1.3), 9.999997041421e-01, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e-04,1.3), 9.999999970414e-01, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000001e-05,1.3), 9.999999999704e-01, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (9.9999999999999995e-07,1.3), 9.999999999997e-01, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (9.9999999999999995e-08,1.3), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e-08,1.3), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000001e-09,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (1.0000000000000000e-10,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_rayleigh_Q, (0.0000000000000000e+00,1.3), 1.000000000000e+00, TEST_TOL6); } void test_auto_flat (void); void test_auto_flat (void) { TEST(gsl_cdf_flat_P, (0.0000000000000000e+00,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e-10,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000001e-09,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e-08,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (9.9999999999999995e-08,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (9.9999999999999995e-07,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000001e-05,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e-04,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e-03,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e-02,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000001e-01,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e+00,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e+01,1.3,750.0), 1.162014157874e-02, TEST_TOL6); TEST(gsl_cdf_flat_Pinv, (1.1620141578738545e-02,1.3,750.0), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e+02,1.3,750.0), 1.318285027381e-01, TEST_TOL6); TEST(gsl_cdf_flat_Pinv, (1.3182850273808142e-01,1.3,750.0), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e+03,1.3,750.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e+04,1.3,750.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e+05,1.3,750.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e+06,1.3,750.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e+07,1.3,750.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e+08,1.3,750.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e+09,1.3,750.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_P, (1.0000000000000000e+10,1.3,750.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e+10,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e+09,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e+08,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e+07,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e+06,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e+05,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e+04,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e+03,1.3,750.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e+02,1.3,750.0), 8.681714972619e-01, TEST_TOL6); TEST(gsl_cdf_flat_Qinv, (8.6817149726190368e-01,1.3,750.0), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e+01,1.3,750.0), 9.883798584213e-01, TEST_TOL6); TEST(gsl_cdf_flat_Qinv, (9.8837985842125353e-01,1.3,750.0), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e+00,1.3,750.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000001e-01,1.3,750.0), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e-02,1.3,750.0), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e-03,1.3,750.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e-04,1.3,750.0), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000001e-05,1.3,750.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (9.9999999999999995e-07,1.3,750.0), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (9.9999999999999995e-08,1.3,750.0), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e-08,1.3,750.0), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000001e-09,1.3,750.0), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (1.0000000000000000e-10,1.3,750.0), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_flat_Q, (0.0000000000000000e+00,1.3,750.0), 1.000000000000e+00, TEST_TOL6); } void test_auto_lognormal (void); void test_auto_lognormal (void) { TEST(gsl_cdf_lognormal_P, (0.0000000000000000e+00,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e-10,1.3,2.7), 1.034288276012e-19, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (1.0342882760115472e-19,1.3,2.7), 1.000000000000e-10, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000001e-09,1.3,2.7), 1.720583234428e-16, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (1.7205832344275183e-16,1.3,2.7), 1.000000000000e-09, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e-08,1.3,2.7), 1.397140696550e-13, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (1.3971406965496307e-13,1.3,2.7), 1.000000000000e-08, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (9.9999999999999995e-08,1.3,2.7), 5.550354890102e-11, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (5.5503548901015757e-11,1.3,2.7), 1.000000000000e-07, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (9.9999999999999995e-07,1.3,2.7), 1.082087222875e-08, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (1.0820872228749844e-08,1.3,2.7), 1.000000000000e-06, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000001e-05,1.3,2.7), 1.039815967490e-06, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (1.0398159674903829e-06,1.3,2.7), 1.000000000000e-05, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e-04,1.3,2.7), 4.956354352667e-05, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (4.9563543526667839e-05,1.3,2.7), 1.000000000000e-04, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e-03,1.3,2.7), 1.183246775456e-03, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (1.1832467754562060e-03,1.3,2.7), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e-02,1.3,2.7), 1.436760981041e-02, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (1.4367609810406523e-02,1.3,2.7), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000001e-01,1.3,2.7), 9.105428982941e-02, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (9.1054289829405582e-02,1.3,2.7), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e+00,1.3,2.7), 3.150871690838e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (3.1508716908375517e-01,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e+01,1.3,2.7), 6.448033073717e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (6.4480330737174019e-01,1.3,2.7), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e+02,1.3,2.7), 8.895497448370e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (8.8954974483702642e-01,1.3,2.7), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e+03,1.3,2.7), 9.810967467052e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (9.8109674670518154e-01,1.3,2.7), 1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e+04,1.3,2.7), 9.983038570318e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (9.9830385703184354e-01,1.3,2.7), 1.000000000000e+04, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e+05,1.3,2.7), 9.999223897251e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Pinv, (9.9992238972508574e-01,1.3,2.7), 1.000000000000e+05, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e+06,1.3,2.7), 9.999982185389e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e+07,1.3,2.7), 9.999999796956e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e+08,1.3,2.7), 9.999999998859e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e+09,1.3,2.7), 9.999999999997e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_P, (1.0000000000000000e+10,1.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e+10,1.3,2.7), 4.255893513650e-16, TEST_TOL6); TEST(gsl_cdf_lognormal_Qinv, (4.2558935136502785e-16,1.3,2.7), 1.000000000000e+10, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e+09,1.3,2.7), 3.150574023842e-13, TEST_TOL6); TEST(gsl_cdf_lognormal_Qinv, (3.1505740238418296e-13,1.3,2.7), 1.000000000000e+09, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e+08,1.3,2.7), 1.141445550080e-10, TEST_TOL6); TEST(gsl_cdf_lognormal_Qinv, (1.1414455500802107e-10,1.3,2.7), 1.000000000000e+08, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e+07,1.3,2.7), 2.030439602858e-08, TEST_TOL6); TEST(gsl_cdf_lognormal_Qinv, (2.0304396028576915e-08,1.3,2.7), 1.000000000000e+07, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e+06,1.3,2.7), 1.781461076603e-06, TEST_TOL6); TEST(gsl_cdf_lognormal_Qinv, (1.7814610766031938e-06,1.3,2.7), 1.000000000000e+06, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e+05,1.3,2.7), 7.761027491429e-05, TEST_TOL6); TEST(gsl_cdf_lognormal_Qinv, (7.7610274914290006e-05,1.3,2.7), 1.000000000000e+05, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e+04,1.3,2.7), 1.696142968157e-03, TEST_TOL6); TEST(gsl_cdf_lognormal_Qinv, (1.6961429681565346e-03,1.3,2.7), 1.000000000000e+04, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e+03,1.3,2.7), 1.890325329482e-02, TEST_TOL6); TEST(gsl_cdf_lognormal_Qinv, (1.8903253294818529e-02,1.3,2.7), 1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e+02,1.3,2.7), 1.104502551630e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Qinv, (1.1045025516297369e-01,1.3,2.7), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e+01,1.3,2.7), 3.551966926283e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Qinv, (3.5519669262825992e-01,1.3,2.7), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e+00,1.3,2.7), 6.849128309162e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Qinv, (6.8491283091624500e-01,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000001e-01,1.3,2.7), 9.089457101706e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Qinv, (9.0894571017059467e-01,1.3,2.7), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e-02,1.3,2.7), 9.856323901896e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Qinv, (9.8563239018959370e-01,1.3,2.7), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e-03,1.3,2.7), 9.988167532245e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Qinv, (9.9881675322454400e-01,1.3,2.7), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e-04,1.3,2.7), 9.999504364565e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000001e-05,1.3,2.7), 9.999989601840e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (9.9999999999999995e-07,1.3,2.7), 9.999999891791e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (9.9999999999999995e-08,1.3,2.7), 9.999999999445e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e-08,1.3,2.7), 9.999999999999e-01, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000001e-09,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (1.0000000000000000e-10,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_lognormal_Q, (0.0000000000000000e+00,1.3,2.7), 1.000000000000e+00, TEST_TOL6); } void test_auto_gamma (void); void test_auto_gamma (void) { TEST(gsl_cdf_gamma_P, (0.0000000000000000e+00,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e-10,1.3,2.7), 2.356478475164e-14, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (2.3564784751638661e-14,1.3,2.7), 1.000000000000e-10, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000001e-09,1.3,2.7), 4.701792696644e-13, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (4.7017926966439445e-13,1.3,2.7), 1.000000000000e-09, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e-08,1.3,2.7), 9.381309762735e-12, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (9.3813097627346386e-12,1.3,2.7), 1.000000000000e-08, TEST_TOL6); TEST(gsl_cdf_gamma_P, (9.9999999999999995e-08,1.3,2.7), 1.871817348197e-10, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (1.8718173481972823e-10,1.3,2.7), 1.000000000000e-07, TEST_TOL6); TEST(gsl_cdf_gamma_P, (9.9999999999999995e-07,1.3,2.7), 3.734765911711e-09, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (3.7347659117114240e-09,1.3,2.7), 1.000000000000e-06, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000001e-05,1.3,2.7), 7.451823639191e-08, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (7.4518236391910116e-08,1.3,2.7), 1.000000000000e-05, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e-04,1.3,2.7), 1.486806276026e-06, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (1.4868062760263472e-06,1.3,2.7), 1.000000000000e-04, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e-03,1.3,2.7), 2.966009681152e-05, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (2.9660096811518665e-05,1.3,2.7), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e-02,1.3,2.7), 5.906831032950e-04, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (5.9068310329499826e-04,1.3,2.7), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000001e-01,1.3,2.7), 1.156629233128e-02, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (1.1566292331279586e-02,1.3,2.7), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+00,1.3,2.7), 1.921237769663e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (1.9212377696630473e-01,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+01,1.3,2.7), 9.565035356115e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (9.5650353561153789e-01,1.3,2.7), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+02,1.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+03,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+04,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+05,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+06,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+07,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+08,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+09,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+10,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+10,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+09,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+08,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+07,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+06,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+05,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+04,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+03,1.3,2.7), 9.292091038794e-161, TEST_TOL6); TEST(gsl_cdf_gamma_Qinv, (9.2920910387939860e-161,1.3,2.7), 1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+02,1.3,2.7), 2.729167976527e-16, TEST_TOL6); TEST(gsl_cdf_gamma_Qinv, (2.7291679765273174e-16,1.3,2.7), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+01,1.3,2.7), 4.349646438846e-02, TEST_TOL6); TEST(gsl_cdf_gamma_Qinv, (4.3496464388462192e-02,1.3,2.7), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+00,1.3,2.7), 8.078762230337e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Qinv, (8.0787622303369533e-01,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000001e-01,1.3,2.7), 9.884337076687e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Qinv, (9.8843370766872041e-01,1.3,2.7), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e-02,1.3,2.7), 9.994093168967e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Qinv, (9.9940931689670498e-01,1.3,2.7), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e-03,1.3,2.7), 9.999703399032e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e-04,1.3,2.7), 9.999985131937e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000001e-05,1.3,2.7), 9.999999254818e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (9.9999999999999995e-07,1.3,2.7), 9.999999962652e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (9.9999999999999995e-08,1.3,2.7), 9.999999998128e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e-08,1.3,2.7), 9.999999999906e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000001e-09,1.3,2.7), 9.999999999995e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e-10,1.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (0.0000000000000000e+00,1.3,2.7), 1.000000000000e+00, TEST_TOL6); } void test_auto_chisq (void); void test_auto_chisq (void) { TEST(gsl_cdf_chisq_P, (0.0000000000000000e+00,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e-10,1.3), 2.238884178785e-07, TEST_TOL6); TEST(gsl_cdf_chisq_Pinv, (2.2388841787852728e-07,1.3), 1.000000000000e-10, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000001e-09,1.3), 1.000072827212e-06, TEST_TOL6); TEST(gsl_cdf_chisq_Pinv, (1.0000728272124926e-06,1.3), 1.000000000000e-09, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e-08,1.3), 4.467161220799e-06, TEST_TOL6); TEST(gsl_cdf_chisq_Pinv, (4.4671612207994108e-06,1.3), 1.000000000000e-08, TEST_TOL6); TEST(gsl_cdf_chisq_P, (9.9999999999999995e-08,1.3), 1.995407585451e-05, TEST_TOL6); TEST(gsl_cdf_chisq_Pinv, (1.9954075854510294e-05,1.3), 1.000000000000e-07, TEST_TOL6); TEST(gsl_cdf_chisq_P, (9.9999999999999995e-07,1.3), 8.913156700686e-05, TEST_TOL6); TEST(gsl_cdf_chisq_Pinv, (8.9131567006858211e-05,1.3), 1.000000000000e-06, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000001e-05,1.3), 3.981353794611e-04, TEST_TOL6); TEST(gsl_cdf_chisq_Pinv, (3.9813537946105002e-04,1.3), 1.000000000000e-05, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e-04,1.3), 1.778373888800e-03, TEST_TOL6); TEST(gsl_cdf_chisq_Pinv, (1.7783738888003920e-03,1.3), 1.000000000000e-04, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e-03,1.3), 7.942296379590e-03, TEST_TOL6); TEST(gsl_cdf_chisq_Pinv, (7.9422963795896199e-03,1.3), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e-02,1.3), 3.541413902540e-02, TEST_TOL6); TEST(gsl_cdf_chisq_Pinv, (3.5414139025402407e-02,1.3), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000001e-01,1.3), 1.554268895840e-01, TEST_TOL6); TEST(gsl_cdf_chisq_Pinv, (1.5542688958403586e-01,1.3), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e+00,1.3), 5.878620132779e-01, TEST_TOL6); TEST(gsl_cdf_chisq_Pinv, (5.8786201327788579e-01,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e+01,1.3), 9.973867890205e-01, TEST_TOL6); TEST(gsl_cdf_chisq_Pinv, (9.9738678902053046e-01,1.3), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e+02,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e+03,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e+04,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e+05,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e+06,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e+07,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e+08,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e+09,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_P, (1.0000000000000000e+10,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e+10,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e+09,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e+08,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e+07,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e+06,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e+05,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e+04,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e+03,1.3), 5.840240518729e-219, TEST_TOL6); TEST(gsl_cdf_chisq_Qinv, (5.8402405187288964e-219,1.3), 1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e+02,1.3), 3.517864771108e-23, TEST_TOL6); TEST(gsl_cdf_chisq_Qinv, (3.5178647711076648e-23,1.3), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e+01,1.3), 2.613210979470e-03, TEST_TOL6); TEST(gsl_cdf_chisq_Qinv, (2.6132109794696230e-03,1.3), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e+00,1.3), 4.121379867221e-01, TEST_TOL6); TEST(gsl_cdf_chisq_Qinv, (4.1213798672211427e-01,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000001e-01,1.3), 8.445731104160e-01, TEST_TOL6); TEST(gsl_cdf_chisq_Qinv, (8.4457311041596417e-01,1.3), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e-02,1.3), 9.645858609746e-01, TEST_TOL6); TEST(gsl_cdf_chisq_Qinv, (9.6458586097459775e-01,1.3), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e-03,1.3), 9.920577036204e-01, TEST_TOL6); TEST(gsl_cdf_chisq_Qinv, (9.9205770362041057e-01,1.3), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e-04,1.3), 9.982216261112e-01, TEST_TOL6); TEST(gsl_cdf_chisq_Qinv, (9.9822162611119969e-01,1.3), 1.000000000000e-04, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000001e-05,1.3), 9.996018646205e-01, TEST_TOL6); TEST(gsl_cdf_chisq_Qinv, (9.9960186462053913e-01,1.3), 1.000000000000e-05, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (9.9999999999999995e-07,1.3), 9.999108684330e-01, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (9.9999999999999995e-08,1.3), 9.999800459241e-01, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e-08,1.3), 9.999955328388e-01, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000001e-09,1.3), 9.999989999272e-01, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (1.0000000000000000e-10,1.3), 9.999997761116e-01, TEST_TOL6); TEST(gsl_cdf_chisq_Q, (0.0000000000000000e+00,1.3), 1.000000000000e+00, TEST_TOL6); } void test_auto_tdist (void); void test_auto_tdist (void) { TEST(gsl_cdf_tdist_P, (-1.0000000000000000e+10,1.3), 3.467848111850e-14, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (3.4678481118500305e-14,1.3), -1.000000000000e+10, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000000e+09,1.3), 6.919266651610e-13, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (6.9192666516103524e-13,1.3), -1.000000000000e+09, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000000e+08,1.3), 1.380575199718e-11, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (1.3805751997179027e-11,1.3), -1.000000000000e+08, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000000e+07,1.3), 2.754609668978e-10, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (2.7546096689777484e-10,1.3), -1.000000000000e+07, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000000e+06,1.3), 5.496168864957e-09, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (5.4961688649569980e-09,1.3), -1.000000000000e+06, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000000e+05,1.3), 1.096629861231e-07, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (1.0966298612314582e-07,1.3), -1.000000000000e+05, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000000e+04,1.3), 2.188064222827e-06, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (2.1880642228271703e-06,1.3), -1.000000000000e+04, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000000e+03,1.3), 4.365759541083e-05, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (4.3657595410833571e-05,1.3), -1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000000e+02,1.3), 8.710327647608e-04, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (8.7103276476079201e-04,1.3), -1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000000e+01,1.3), 1.727893386820e-02, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (1.7278933868204446e-02,1.3), -1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000000e+00,1.3), 2.336211937932e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (2.3362119379322516e-01,1.3), -1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000001e-01,1.3), 4.667575980083e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (4.6675759800826139e-01,1.3), -1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000000e-02,1.3), 4.966660755117e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (4.9666607551169606e-01,1.3), -1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000000e-03,1.3), 4.996665978189e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (4.9966659781887629e-01,1.3), -1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000000e-04,1.3), 4.999666597722e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000001e-05,1.3), 4.999966659772e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-9.9999999999999995e-07,1.3), 4.999996665977e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-9.9999999999999995e-08,1.3), 4.999999666598e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000000e-08,1.3), 4.999999966660e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000001e-09,1.3), 4.999999996666e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (-1.0000000000000000e-10,1.3), 4.999999999667e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (0.0000000000000000e+00,1.3), 5.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (4.9999999999999900e-01,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e-10,1.3), 5.000000000333e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000001e-09,1.3), 5.000000003334e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e-08,1.3), 5.000000033340e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (9.9999999999999995e-08,1.3), 5.000000333402e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (9.9999999999999995e-07,1.3), 5.000003334023e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000001e-05,1.3), 5.000033340228e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e-04,1.3), 5.000333402278e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e-03,1.3), 5.003334021811e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (5.0033340218112365e-01,1.3), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e-02,1.3), 5.033339244883e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (5.0333392448830394e-01,1.3), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000001e-01,1.3), 5.332424019917e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (5.3324240199173856e-01,1.3), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e+00,1.3), 7.663788062068e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (7.6637880620677490e-01,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e+01,1.3), 9.827210661318e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (9.8272106613179555e-01,1.3), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e+02,1.3), 9.991289672352e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Pinv, (9.9912896723523925e-01,1.3), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e+03,1.3), 9.999563424046e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e+04,1.3), 9.999978119358e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e+05,1.3), 9.999998903370e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e+06,1.3), 9.999999945038e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e+07,1.3), 9.999999997245e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e+08,1.3), 9.999999999862e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e+09,1.3), 9.999999999993e-01, TEST_TOL6); TEST(gsl_cdf_tdist_P, (1.0000000000000000e+10,1.3), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e+10,1.3), 3.467848111850e-14, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (3.4678481118500305e-14,1.3), 1.000000000000e+10, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e+09,1.3), 6.919266651610e-13, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (6.9192666516103524e-13,1.3), 1.000000000000e+09, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e+08,1.3), 1.380575199718e-11, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (1.3805751997179027e-11,1.3), 1.000000000000e+08, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e+07,1.3), 2.754609668978e-10, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (2.7546096689777484e-10,1.3), 1.000000000000e+07, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e+06,1.3), 5.496168864957e-09, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (5.4961688649569980e-09,1.3), 1.000000000000e+06, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e+05,1.3), 1.096629861231e-07, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (1.0966298612314582e-07,1.3), 1.000000000000e+05, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e+04,1.3), 2.188064222827e-06, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (2.1880642228271703e-06,1.3), 1.000000000000e+04, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e+03,1.3), 4.365759541083e-05, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (4.3657595410833571e-05,1.3), 1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e+02,1.3), 8.710327647608e-04, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (8.7103276476079201e-04,1.3), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e+01,1.3), 1.727893386820e-02, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (1.7278933868204446e-02,1.3), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e+00,1.3), 2.336211937932e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (2.3362119379322516e-01,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000001e-01,1.3), 4.667575980083e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (4.6675759800826139e-01,1.3), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e-02,1.3), 4.966660755117e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (4.9666607551169606e-01,1.3), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e-03,1.3), 4.996665978189e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (4.9966659781887629e-01,1.3), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e-04,1.3), 4.999666597722e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000001e-05,1.3), 4.999966659772e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (9.9999999999999995e-07,1.3), 4.999996665977e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (9.9999999999999995e-08,1.3), 4.999999666598e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e-08,1.3), 4.999999966660e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000001e-09,1.3), 4.999999996666e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (1.0000000000000000e-10,1.3), 4.999999999667e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (0.0000000000000000e+00,1.3), 5.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (4.9999999999999900e-01,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e-10,1.3), 5.000000000333e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000001e-09,1.3), 5.000000003334e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e-08,1.3), 5.000000033340e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-9.9999999999999995e-08,1.3), 5.000000333402e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-9.9999999999999995e-07,1.3), 5.000003334023e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000001e-05,1.3), 5.000033340228e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e-04,1.3), 5.000333402278e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e-03,1.3), 5.003334021811e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (5.0033340218112365e-01,1.3), -1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e-02,1.3), 5.033339244883e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (5.0333392448830394e-01,1.3), -1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000001e-01,1.3), 5.332424019917e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (5.3324240199173856e-01,1.3), -1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e+00,1.3), 7.663788062068e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (7.6637880620677490e-01,1.3), -1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e+01,1.3), 9.827210661318e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (9.8272106613179555e-01,1.3), -1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e+02,1.3), 9.991289672352e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Qinv, (9.9912896723523925e-01,1.3), -1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e+03,1.3), 9.999563424046e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e+04,1.3), 9.999978119358e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e+05,1.3), 9.999998903370e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e+06,1.3), 9.999999945038e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e+07,1.3), 9.999999997245e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e+08,1.3), 9.999999999862e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e+09,1.3), 9.999999999993e-01, TEST_TOL6); TEST(gsl_cdf_tdist_Q, (-1.0000000000000000e+10,1.3), 1.000000000000e-00, TEST_TOL6); } void test_auto_gumbel1 (void); void test_auto_gumbel1 (void) { TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e+10,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e+09,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e+08,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e+07,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e+06,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e+05,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e+04,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e+03,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e+02,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e+01,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e+00,1.3,2.7), 4.981965353092e-05, TEST_TOL6); TEST(gsl_cdf_gumbel1_Pinv, (4.9819653530918237e-05,1.3,2.7), -1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000001e-01,1.3,2.7), 4.619717476780e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_Pinv, (4.6197174767798083e-02,1.3,2.7), -1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e-02,1.3,2.7), 6.487265128366e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_Pinv, (6.4872651283663055e-02,1.3,2.7), -1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e-03,1.3,2.7), 6.696988203722e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_Pinv, (6.6969882037217598e-02,1.3,2.7), -1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e-04,1.3,2.7), 6.718192621136e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_Pinv, (6.7181926211364873e-02,1.3,2.7), -1.000000000000e-04, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000001e-05,1.3,2.7), 6.720315385232e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-9.9999999999999995e-07,1.3,2.7), 6.720527684866e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-9.9999999999999995e-08,1.3,2.7), 6.720548915062e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e-08,1.3,2.7), 6.720551038084e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000001e-09,1.3,2.7), 6.720551250386e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (-1.0000000000000000e-10,1.3,2.7), 6.720551271616e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (0.0000000000000000e+00,1.3,2.7), 6.720551273975e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_Pinv, (6.7205512739749951e-02,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e-10,1.3,2.7), 6.720551276334e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000001e-09,1.3,2.7), 6.720551297564e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e-08,1.3,2.7), 6.720551509866e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (9.9999999999999995e-08,1.3,2.7), 6.720553632889e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (9.9999999999999995e-07,1.3,2.7), 6.720574863136e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000001e-05,1.3,2.7), 6.720787167931e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e-04,1.3,2.7), 6.722910448133e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_Pinv, (6.7229104481333457e-02,1.3,2.7), 1.000000000000e-04, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e-03,1.3,2.7), 6.744166476190e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_Pinv, (6.7441664761898834e-02,1.3,2.7), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e-02,1.3,2.7), 6.959050352518e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_Pinv, (6.9590503525179814e-02,1.3,2.7), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000001e-01,1.3,2.7), 9.340058564429e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_Pinv, (9.3400585644290435e-02,1.3,2.7), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e+00,1.3,2.7), 4.791048360125e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Pinv, (4.7910483601248477e-01,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e+01,1.3,2.7), 9.999938971292e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e+02,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e+03,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e+04,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e+05,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e+06,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e+07,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e+08,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e+09,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_P, (1.0000000000000000e+10,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e+10,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e+09,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e+08,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e+07,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e+06,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e+05,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e+04,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e+03,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e+02,1.3,2.7), 9.398988467742e-57, TEST_TOL6); TEST(gsl_cdf_gumbel1_Qinv, (9.3989884677416057e-57,1.3,2.7), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e+01,1.3,2.7), 6.102870776257e-06, TEST_TOL6); TEST(gsl_cdf_gumbel1_Qinv, (6.1028707762572197e-06,1.3,2.7), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e+00,1.3,2.7), 5.208951639875e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Qinv, (5.2089516398751523e-01,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000001e-01,1.3,2.7), 9.065994143557e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Qinv, (9.0659941435570957e-01,1.3,2.7), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e-02,1.3,2.7), 9.304094964748e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Qinv, (9.3040949647482019e-01,1.3,2.7), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e-03,1.3,2.7), 9.325583352381e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Qinv, (9.3255833523810117e-01,1.3,2.7), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e-04,1.3,2.7), 9.327708955187e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000001e-05,1.3,2.7), 9.327921283207e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (9.9999999999999995e-07,1.3,2.7), 9.327942513686e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (9.9999999999999995e-08,1.3,2.7), 9.327944636711e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e-08,1.3,2.7), 9.327944849013e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000001e-09,1.3,2.7), 9.327944870244e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (1.0000000000000000e-10,1.3,2.7), 9.327944872367e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (0.0000000000000000e+00,1.3,2.7), 9.327944872603e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Qinv, (9.3279448726025027e-01,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e-10,1.3,2.7), 9.327944872838e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000001e-09,1.3,2.7), 9.327944874961e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e-08,1.3,2.7), 9.327944896192e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-9.9999999999999995e-08,1.3,2.7), 9.327945108494e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-9.9999999999999995e-07,1.3,2.7), 9.327947231513e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000001e-05,1.3,2.7), 9.327968461477e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e-04,1.3,2.7), 9.328180737886e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e-03,1.3,2.7), 9.330301179628e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Qinv, (9.3303011796278246e-01,1.3,2.7), -1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e-02,1.3,2.7), 9.351273487163e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Qinv, (9.3512734871633696e-01,1.3,2.7), -1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000001e-01,1.3,2.7), 9.538028252322e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Qinv, (9.5380282523220195e-01,1.3,2.7), -1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e+00,1.3,2.7), 9.999501803465e-01, TEST_TOL6); TEST(gsl_cdf_gumbel1_Qinv, (9.9995018034646910e-01,1.3,2.7), -1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e+01,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e+02,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e+03,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e+04,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e+05,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e+06,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e+07,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e+08,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e+09,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel1_Q, (-1.0000000000000000e+10,1.3,2.7), 1.000000000000e+00, TEST_TOL6); } void test_auto_gumbel2 (void); void test_auto_gumbel2 (void) { TEST(gsl_cdf_gumbel2_P, (0.0000000000000000e+00,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e-10,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000001e-09,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e-08,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (9.9999999999999995e-08,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (9.9999999999999995e-07,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000001e-05,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e-04,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e-03,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e-02,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000001e-01,1.3,2.7), 4.014688368993e-24, TEST_TOL6); TEST(gsl_cdf_gumbel2_Pinv, (4.0146883689934746e-24,1.3,2.7), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e+00,1.3,2.7), 6.720551273975e-02, TEST_TOL6); TEST(gsl_cdf_gumbel2_Pinv, (6.7205512739749743e-02,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e+01,1.3,2.7), 8.734358842463e-01, TEST_TOL6); TEST(gsl_cdf_gumbel2_Pinv, (8.7343588424628138e-01,1.3,2.7), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e+02,1.3,2.7), 9.932408531257e-01, TEST_TOL6); TEST(gsl_cdf_gumbel2_Pinv, (9.9324085312574451e-01,1.3,2.7), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e+03,1.3,2.7), 9.996601479016e-01, TEST_TOL6); TEST(gsl_cdf_gumbel2_Pinv, (9.9966014790162783e-01,1.3,2.7), 1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e+04,1.3,2.7), 9.999829642968e-01, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e+05,1.3,2.7), 9.999991461854e-01, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e+06,1.3,2.7), 9.999999572079e-01, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e+07,1.3,2.7), 9.999999978553e-01, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e+08,1.3,2.7), 9.999999998925e-01, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e+09,1.3,2.7), 9.999999999946e-01, TEST_TOL6); TEST(gsl_cdf_gumbel2_P, (1.0000000000000000e+10,1.3,2.7), 9.999999999997e-01, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e+10,1.3,2.7), 2.700000000000e-13, TEST_TOL6); TEST(gsl_cdf_gumbel2_Qinv, (2.6999999999996492e-13,1.3,2.7), 1.000000000000e+10, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e+09,1.3,2.7), 5.387208250401e-12, TEST_TOL6); TEST(gsl_cdf_gumbel2_Qinv, (5.3872082504014914e-12,1.3,2.7), 1.000000000000e+09, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e+08,1.3,2.7), 1.074889360437e-10, TEST_TOL6); TEST(gsl_cdf_gumbel2_Qinv, (1.0748893604366781e-10,1.3,2.7), 1.000000000000e+08, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e+07,1.3,2.7), 2.144686231456e-09, TEST_TOL6); TEST(gsl_cdf_gumbel2_Qinv, (2.1446862314557286e-09,1.3,2.7), 1.000000000000e+07, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e+06,1.3,2.7), 4.279211528087e-08, TEST_TOL6); TEST(gsl_cdf_gumbel2_Qinv, (4.2792115280867646e-08,1.3,2.7), 1.000000000000e+06, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e+05,1.3,2.7), 8.538146037456e-07, TEST_TOL6); TEST(gsl_cdf_gumbel2_Qinv, (8.5381460374556900e-07,1.3,2.7), 1.000000000000e+05, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e+04,1.3,2.7), 1.703570319173e-05, TEST_TOL6); TEST(gsl_cdf_gumbel2_Qinv, (1.7035703191725618e-05,1.3,2.7), 1.000000000000e+04, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e+03,1.3,2.7), 3.398520983725e-04, TEST_TOL6); TEST(gsl_cdf_gumbel2_Qinv, (3.3985209837246249e-04,1.3,2.7), 1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e+02,1.3,2.7), 6.759146874256e-03, TEST_TOL6); TEST(gsl_cdf_gumbel2_Qinv, (6.7591468742558315e-03,1.3,2.7), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e+01,1.3,2.7), 1.265641157537e-01, TEST_TOL6); TEST(gsl_cdf_gumbel2_Qinv, (1.2656411575371904e-01,1.3,2.7), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e+00,1.3,2.7), 9.327944872603e-01, TEST_TOL6); TEST(gsl_cdf_gumbel2_Qinv, (9.3279448726025116e-01,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000001e-01,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e-02,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e-03,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e-04,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000001e-05,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (9.9999999999999995e-07,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (9.9999999999999995e-08,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e-08,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000001e-09,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (1.0000000000000000e-10,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gumbel2_Q, (0.0000000000000000e+00,1.3,2.7), 1.000000000000e+00, TEST_TOL6); } void test_auto_weibull (void); void test_auto_weibull (void) { TEST(gsl_cdf_weibull_P, (0.0000000000000000e+00,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e-10,1.3,2.7), 4.924395760785e-28, TEST_TOL6); TEST(gsl_cdf_weibull_Pinv, (4.9243957607852698e-28,1.3,2.7), 1.000000000000e-10, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000001e-09,1.3,2.7), 2.468044288634e-25, TEST_TOL6); TEST(gsl_cdf_weibull_Pinv, (2.4680442886338381e-25,1.3,2.7), 1.000000000000e-09, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e-08,1.3,2.7), 1.236952289490e-22, TEST_TOL6); TEST(gsl_cdf_weibull_Pinv, (1.2369522894899823e-22,1.3,2.7), 1.000000000000e-08, TEST_TOL6); TEST(gsl_cdf_weibull_P, (9.9999999999999995e-08,1.3,2.7), 6.199446960984e-20, TEST_TOL6); TEST(gsl_cdf_weibull_Pinv, (6.1994469609840516e-20,1.3,2.7), 1.000000000000e-07, TEST_TOL6); TEST(gsl_cdf_weibull_P, (9.9999999999999995e-07,1.3,2.7), 3.107083672395e-17, TEST_TOL6); TEST(gsl_cdf_weibull_Pinv, (3.1070836723945982e-17,1.3,2.7), 1.000000000000e-06, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000001e-05,1.3,2.7), 1.557230670416e-14, TEST_TOL6); TEST(gsl_cdf_weibull_Pinv, (1.5572306704159031e-14,1.3,2.7), 1.000000000000e-05, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e-04,1.3,2.7), 7.804641318223e-12, TEST_TOL6); TEST(gsl_cdf_weibull_Pinv, (7.8046413182225018e-12,1.3,2.7), 1.000000000000e-04, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e-03,1.3,2.7), 3.911586584098e-09, TEST_TOL6); TEST(gsl_cdf_weibull_Pinv, (3.9115865840980536e-09,1.3,2.7), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e-02,1.3,2.7), 1.960435341356e-06, TEST_TOL6); TEST(gsl_cdf_weibull_Pinv, (1.9604353413559907e-06,1.3,2.7), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000001e-01,1.3,2.7), 9.820635881537e-04, TEST_TOL6); TEST(gsl_cdf_weibull_Pinv, (9.8206358815371392e-04,1.3,2.7), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e+00,1.3,2.7), 3.888663329609e-01, TEST_TOL6); TEST(gsl_cdf_weibull_Pinv, (3.8886633296085954e-01,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e+01,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e+02,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e+03,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e+04,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e+05,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e+06,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e+07,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e+08,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e+09,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_P, (1.0000000000000000e+10,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e+10,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e+09,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e+08,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e+07,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e+06,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e+05,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e+04,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e+03,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e+02,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e+01,1.3,2.7), 6.519262004070e-108, TEST_TOL6); TEST(gsl_cdf_weibull_Qinv, (6.5192620040698617e-108,1.3,2.7), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e+00,1.3,2.7), 6.111336670391e-01, TEST_TOL6); TEST(gsl_cdf_weibull_Qinv, (6.1113366703914040e-01,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000001e-01,1.3,2.7), 9.990179364118e-01, TEST_TOL6); TEST(gsl_cdf_weibull_Qinv, (9.9901793641184633e-01,1.3,2.7), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e-02,1.3,2.7), 9.999980395647e-01, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e-03,1.3,2.7), 9.999999960884e-01, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e-04,1.3,2.7), 9.999999999922e-01, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000001e-05,1.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (9.9999999999999995e-07,1.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (9.9999999999999995e-08,1.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e-08,1.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000001e-09,1.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (1.0000000000000000e-10,1.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_weibull_Q, (0.0000000000000000e+00,1.3,2.7), 1.000000000000e+00, TEST_TOL6); } void test_auto_pareto (void); void test_auto_pareto (void) { TEST(gsl_cdf_pareto_P, (0.0000000000000000e+00,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e-10,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000001e-09,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e-08,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_P, (9.9999999999999995e-08,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_P, (9.9999999999999995e-07,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000001e-05,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e-04,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e-03,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e-02,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000001e-01,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e+00,1.3,2.7), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e+01,1.3,2.7), 8.177057822240e-01, TEST_TOL6); TEST(gsl_cdf_pareto_Pinv, (8.1770578222395374e-01,1.3,2.7), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e+02,1.3,2.7), 9.908636465287e-01, TEST_TOL6); TEST(gsl_cdf_pareto_Pinv, (9.9086364652869807e-01,1.3,2.7), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e+03,1.3,2.7), 9.995420976279e-01, TEST_TOL6); TEST(gsl_cdf_pareto_Pinv, (9.9954209762786816e-01,1.3,2.7), 1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e+04,1.3,2.7), 9.999770505177e-01, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e+05,1.3,2.7), 9.999988498013e-01, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e+06,1.3,2.7), 9.999999423535e-01, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e+07,1.3,2.7), 9.999999971109e-01, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e+08,1.3,2.7), 9.999999998552e-01, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e+09,1.3,2.7), 9.999999999928e-01, TEST_TOL6); TEST(gsl_cdf_pareto_P, (1.0000000000000000e+10,1.3,2.7), 9.999999999997e-01, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e+10,1.3,2.7), 3.637247829654e-13, TEST_TOL6); TEST(gsl_cdf_pareto_Qinv, (3.6372478296536173e-13,1.3,2.7), 1.000000000000e+10, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e+09,1.3,2.7), 7.257263524710e-12, TEST_TOL6); TEST(gsl_cdf_pareto_Qinv, (7.2572635247102111e-12,1.3,2.7), 1.000000000000e+09, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e+08,1.3,2.7), 1.448014442065e-10, TEST_TOL6); TEST(gsl_cdf_pareto_Qinv, (1.4480144420652496e-10,1.3,2.7), 1.000000000000e+08, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e+07,1.3,2.7), 2.889168647783e-09, TEST_TOL6); TEST(gsl_cdf_pareto_Qinv, (2.8891686477834784e-09,1.3,2.7), 1.000000000000e+07, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e+06,1.3,2.7), 5.764649324512e-08, TEST_TOL6); TEST(gsl_cdf_pareto_Qinv, (5.7646493245119715e-08,1.3,2.7), 1.000000000000e+06, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e+05,1.3,2.7), 1.150198755621e-06, TEST_TOL6); TEST(gsl_cdf_pareto_Qinv, (1.1501987556209536e-06,1.3,2.7), 1.000000000000e+05, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e+04,1.3,2.7), 2.294948231815e-05, TEST_TOL6); TEST(gsl_cdf_pareto_Qinv, (2.2949482318145872e-05,1.3,2.7), 1.000000000000e+04, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e+03,1.3,2.7), 4.579023721744e-04, TEST_TOL6); TEST(gsl_cdf_pareto_Qinv, (4.5790237217441070e-04,1.3,2.7), 1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e+02,1.3,2.7), 9.136353471345e-03, TEST_TOL6); TEST(gsl_cdf_pareto_Qinv, (9.1363534713445622e-03,1.3,2.7), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e+01,1.3,2.7), 1.822942177761e-01, TEST_TOL6); TEST(gsl_cdf_pareto_Qinv, (1.8229421777608898e-01,1.3,2.7), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e+00,1.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000001e-01,1.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e-02,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e-03,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e-04,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000001e-05,1.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (9.9999999999999995e-07,1.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (9.9999999999999995e-08,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e-08,1.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000001e-09,1.3,2.7), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (1.0000000000000000e-10,1.3,2.7), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_pareto_Q, (0.0000000000000000e+00,1.3,2.7), 1.000000000000e+00, TEST_TOL6); } void test_auto_logistic (void); void test_auto_logistic (void) { TEST(gsl_cdf_logistic_P, (-1.0000000000000000e+10,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000000e+09,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000000e+08,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000000e+07,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000000e+06,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000000e+05,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000000e+04,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000000e+03,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000000e+02,1.3), 3.915003559824e-34, TEST_TOL6); TEST(gsl_cdf_logistic_Pinv, (3.9150035598244656e-34,1.3), -1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000000e+01,1.3), 4.561157640565e-04, TEST_TOL6); TEST(gsl_cdf_logistic_Pinv, (4.5611576405646045e-04,1.3), -1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000000e+00,1.3), 3.166455298122e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Pinv, (3.1664552981221700e-01,1.3), -1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000001e-01,1.3), 4.807787077894e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Pinv, (4.8077870778939180e-01,1.3), -1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000000e-02,1.3), 4.980769325595e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Pinv, (4.9807693255949481e-01,1.3), -1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000000e-03,1.3), 4.998076923172e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Pinv, (4.9980769231717492e-01,1.3), -1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000000e-04,1.3), 4.999807692308e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000001e-05,1.3), 4.999980769231e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-9.9999999999999995e-07,1.3), 4.999998076923e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-9.9999999999999995e-08,1.3), 4.999999807692e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000000e-08,1.3), 4.999999980769e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000001e-09,1.3), 4.999999998077e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (-1.0000000000000000e-10,1.3), 4.999999999808e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (0.0000000000000000e+00,1.3), 5.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Pinv, (5.0000000000000000e-01,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e-10,1.3), 5.000000000192e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000001e-09,1.3), 5.000000001923e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e-08,1.3), 5.000000019231e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (9.9999999999999995e-08,1.3), 5.000000192308e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (9.9999999999999995e-07,1.3), 5.000001923077e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000001e-05,1.3), 5.000019230769e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e-04,1.3), 5.000192307692e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e-03,1.3), 5.001923076828e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Pinv, (5.0019230768282508e-01,1.3), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e-02,1.3), 5.019230674405e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Pinv, (5.0192306744050519e-01,1.3), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000001e-01,1.3), 5.192212922106e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Pinv, (5.1922129221060820e-01,1.3), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e+00,1.3), 6.833544701878e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Pinv, (6.8335447018778295e-01,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e+01,1.3), 9.995438842359e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Pinv, (9.9954388423594354e-01,1.3), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e+02,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e+03,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e+04,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e+05,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e+06,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e+07,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e+08,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e+09,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_P, (1.0000000000000000e+10,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e+10,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e+09,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e+08,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e+07,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e+06,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e+05,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e+04,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e+03,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e+02,1.3), 3.915003559824e-34, TEST_TOL6); TEST(gsl_cdf_logistic_Qinv, (3.9150035598244656e-34,1.3), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e+01,1.3), 4.561157640565e-04, TEST_TOL6); TEST(gsl_cdf_logistic_Qinv, (4.5611576405646045e-04,1.3), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e+00,1.3), 3.166455298122e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Qinv, (3.1664552981221700e-01,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000001e-01,1.3), 4.807787077894e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Qinv, (4.8077870778939180e-01,1.3), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e-02,1.3), 4.980769325595e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Qinv, (4.9807693255949481e-01,1.3), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e-03,1.3), 4.998076923172e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Qinv, (4.9980769231717492e-01,1.3), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e-04,1.3), 4.999807692308e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000001e-05,1.3), 4.999980769231e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (9.9999999999999995e-07,1.3), 4.999998076923e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (9.9999999999999995e-08,1.3), 4.999999807692e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e-08,1.3), 4.999999980769e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000001e-09,1.3), 4.999999998077e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (1.0000000000000000e-10,1.3), 4.999999999808e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (0.0000000000000000e+00,1.3), 5.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Qinv, (5.0000000000000000e-01,1.3), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e-10,1.3), 5.000000000192e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000001e-09,1.3), 5.000000001923e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e-08,1.3), 5.000000019231e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-9.9999999999999995e-08,1.3), 5.000000192308e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-9.9999999999999995e-07,1.3), 5.000001923077e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000001e-05,1.3), 5.000019230769e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e-04,1.3), 5.000192307692e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e-03,1.3), 5.001923076828e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Qinv, (5.0019230768282508e-01,1.3), -1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e-02,1.3), 5.019230674405e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Qinv, (5.0192306744050519e-01,1.3), -1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000001e-01,1.3), 5.192212922106e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Qinv, (5.1922129221060820e-01,1.3), -1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e+00,1.3), 6.833544701878e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Qinv, (6.8335447018778295e-01,1.3), -1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e+01,1.3), 9.995438842359e-01, TEST_TOL6); TEST(gsl_cdf_logistic_Qinv, (9.9954388423594354e-01,1.3), -1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e+02,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e+03,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e+04,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e+05,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e+06,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e+07,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e+08,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e+09,1.3), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_logistic_Q, (-1.0000000000000000e+10,1.3), 1.000000000000e+00, TEST_TOL6); } void test_auto_gammalarge (void); void test_auto_gammalarge (void) { TEST(gsl_cdf_gamma_P, (0.0000000000000000e+00,1.3,123.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e-10,1.3,123.0), 1.644976604681e-16, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (1.6449766046812008e-16,1.3,123.0), 1.000000000000e-10, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000001e-09,1.3,123.0), 3.282159828312e-15, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (3.2821598283122862e-15,1.3,123.0), 1.000000000000e-09, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e-08,1.3,123.0), 6.548769816865e-14, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (6.5487698168653935e-14,1.3,123.0), 1.000000000000e-08, TEST_TOL6); TEST(gsl_cdf_gamma_P, (9.9999999999999995e-08,1.3,123.0), 1.306651361959e-12, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (1.3066513619593202e-12,1.3,123.0), 1.000000000000e-07, TEST_TOL6); TEST(gsl_cdf_gamma_P, (9.9999999999999995e-07,1.3,123.0), 2.607112210538e-11, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (2.6071122105378624e-11,1.3,123.0), 1.000000000000e-06, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000001e-05,1.3,123.0), 5.201872529446e-10, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (5.2018725294456393e-10,1.3,123.0), 1.000000000000e-05, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e-04,1.3,123.0), 1.037909593275e-08, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (1.0379095932752980e-08,1.3,123.0), 1.000000000000e-04, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e-03,1.3,123.0), 2.070893333124e-07, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (2.0708933331240137e-07,1.3,123.0), 1.000000000000e-03, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e-02,1.3,123.0), 4.131804542806e-06, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (4.1318045428061286e-06,1.3,123.0), 1.000000000000e-02, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000001e-01,1.3,123.0), 8.240625287202e-05, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (8.2406252872017186e-05,1.3,123.0), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+00,1.3,123.0), 1.637438876041e-03, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (1.6374388760411608e-03,1.3,123.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+01,1.3,123.0), 3.135521671622e-02, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (3.1355216716223523e-02,1.3,123.0), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+02,1.3,123.0), 4.240385705334e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (4.2403857053338523e-01,1.3,123.0), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+03,1.3,123.0), 9.993635318324e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Pinv, (9.9936353183235616e-01,1.3,123.0), 1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+04,1.3,123.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+05,1.3,123.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+06,1.3,123.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+07,1.3,123.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+08,1.3,123.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+09,1.3,123.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_P, (1.0000000000000000e+10,1.3,123.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+10,1.3,123.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+09,1.3,123.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+08,1.3,123.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+07,1.3,123.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+06,1.3,123.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+05,1.3,123.0), 0.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+04,1.3,123.0), 2.056363344745e-35, TEST_TOL6); TEST(gsl_cdf_gamma_Qinv, (2.0563633447452943e-35,1.3,123.0), 1.000000000000e+04, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+03,1.3,123.0), 6.364681676440e-04, TEST_TOL6); TEST(gsl_cdf_gamma_Qinv, (6.3646816764395531e-04,1.3,123.0), 1.000000000000e+03, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+02,1.3,123.0), 5.759614294666e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Qinv, (5.7596142946661488e-01,1.3,123.0), 1.000000000000e+02, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+01,1.3,123.0), 9.686447832838e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Qinv, (9.6864478328377646e-01,1.3,123.0), 1.000000000000e+01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e+00,1.3,123.0), 9.983625611240e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Qinv, (9.9836256112395882e-01,1.3,123.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000001e-01,1.3,123.0), 9.999175937471e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Qinv, (9.9991759374712796e-01,1.3,123.0), 1.000000000000e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e-02,1.3,123.0), 9.999958681955e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e-03,1.3,123.0), 9.999997929107e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e-04,1.3,123.0), 9.999999896209e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000001e-05,1.3,123.0), 9.999999994798e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (9.9999999999999995e-07,1.3,123.0), 9.999999999739e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (9.9999999999999995e-08,1.3,123.0), 9.999999999987e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e-08,1.3,123.0), 9.999999999999e-01, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000001e-09,1.3,123.0), 1.000000000000e-00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (1.0000000000000000e-10,1.3,123.0), 1.000000000000e+00, TEST_TOL6); TEST(gsl_cdf_gamma_Q, (0.0000000000000000e+00,1.3,123.0), 1.000000000000e+00, TEST_TOL6); } gsl/cdf/gumbel2.c0000644000175000017500000000244213536674414012171 0ustar eddedd/* cdf/gumbel2.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include double gsl_cdf_gumbel2_P (const double x, const double a, const double b) { double P; if (x == 0) { P = 0; } else { double u = pow (x, a); P = exp (-b / u); } return P; } double gsl_cdf_gumbel2_Q (const double x, const double a, const double b) { double Q; if (x == 0) { Q = 1; } else { double u = pow (x, a); Q = -expm1 (-b / u); } return Q; } gsl/cdf/exponential.c0000644000175000017500000000250113536674414013156 0ustar eddedd/* cdf/exponential.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* The exponential distribution has the form p(x) dx = exp(-x/mu) dx/mu for x = 0 ... +infty */ double gsl_cdf_exponential_P (const double x, const double mu) { if (x < 0) { return 0; } else { double P = -expm1 (-x / mu); return P; } } double gsl_cdf_exponential_Q (const double x, const double mu) { if (x < 0) { return 1; } else { double Q = exp (-x / mu); return Q; } } gsl/cdf/poisson.c0000644000175000017500000000357613536674414012337 0ustar eddedd/* cdf/poisson.c * * Copyright (C) 2004 Jason H. Stover. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Computes the cumulative distribution function for a Poisson * random variable. For a Poisson random variable X with parameter * mu, * * Pr( X <= k ) = Pr( Y >= p ) * * where Y is a gamma random variable with parameters k+1 and 1. * * Reference: * * W. Feller, "An Introduction to Probability and Its * Applications," volume 1. Wiley, 1968. Exercise 46, page 173, * chapter 6. */ #include #include #include #include #include #include "error.h" /* * Pr (X <= k) for a Poisson random variable X. */ double gsl_cdf_poisson_P (const unsigned int k, const double mu) { double P; double a; if (mu <= 0.0) { CDF_ERROR ("mu <= 0", GSL_EDOM); } a = (double) k + 1.0; P = gsl_cdf_gamma_Q (mu, a, 1.0); return P; } /* * Pr ( X > k ) for a Possion random variable X. */ double gsl_cdf_poisson_Q (const unsigned int k, const double mu) { double Q; double a; if (mu <= 0.0) { CDF_ERROR ("mu <= 0", GSL_EDOM); } a = (double) k + 1.0; Q = gsl_cdf_gamma_P (mu, a, 1.0); return Q; } gsl/cdf/flatinv.c0000644000175000017500000000240713536674414012300 0ustar eddedd/* cdf/flatinv.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include double gsl_cdf_flat_Pinv (const double P, const double a, const double b) { double x; if (P == 1.0) { return b; } else if (P == 0.0) { return a; } x = (1 - P) * a + P * b; return x; } double gsl_cdf_flat_Qinv (const double Q, const double a, const double b) { double x; if (Q == 0.0) { return b; } else if (Q == 1.0) { return a; } x = Q * a + (1 - Q) * b; return x; } gsl/cdf/nbinomial.c0000644000175000017500000000342413536674414012605 0ustar eddedd/* cdf/negbinom.c * * Copyright (C) 2004 Jason H. Stover. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include "error.h" /* * Pr(X <= k) for a negative binomial random variable X, i.e., * the probability of k or fewer failuers before success n. */ double gsl_cdf_negative_binomial_P (const unsigned int k, const double p, const double n) { double P; double a; double b; if (p > 1.0 || p < 0.0) { CDF_ERROR ("p < 0 or p > 1", GSL_EDOM); } if (n < 0) { CDF_ERROR ("n < 0", GSL_EDOM); } a = (double) n; b = (double) k + 1.0; P = gsl_cdf_beta_P (p, a, b); return P; } /* * Pr ( X > k ). */ double gsl_cdf_negative_binomial_Q (const unsigned int k, const double p, const double n) { double Q; double a; double b; if (p > 1.0 || p < 0.0) { CDF_ERROR ("p < 0 or p > 1", GSL_EDOM); } if (n < 0) { CDF_ERROR ("n < 0", GSL_EDOM); } a = (double) n; b = (double) k + 1.0; Q = gsl_cdf_beta_Q (p, a, b); return Q; } gsl/cdf/gaussinv.c0000644000175000017500000001004613536674414012472 0ustar eddedd/* cdf/inverse_normal.c * * Copyright (C) 2002 Przemyslaw Sliwa and Jason H. Stover. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Computes the inverse normal cumulative distribution function * according to the algorithm shown in * * Wichura, M.J. (1988). * Algorithm AS 241: The Percentage Points of the Normal Distribution. * Applied Statistics, 37, 477-484. */ #include #include #include #include #include "rat_eval.h" static double small (double q) { const double a[8] = { 3.387132872796366608, 133.14166789178437745, 1971.5909503065514427, 13731.693765509461125, 45921.953931549871457, 67265.770927008700853, 33430.575583588128105, 2509.0809287301226727 }; const double b[8] = { 1.0, 42.313330701600911252, 687.1870074920579083, 5394.1960214247511077, 21213.794301586595867, 39307.89580009271061, 28729.085735721942674, 5226.495278852854561 }; double r = 0.180625 - q * q; double x = q * rat_eval (a, 8, b, 8, r); return x; } static double intermediate (double r) { const double a[] = { 1.42343711074968357734, 4.6303378461565452959, 5.7694972214606914055, 3.64784832476320460504, 1.27045825245236838258, 0.24178072517745061177, 0.0227238449892691845833, 7.7454501427834140764e-4 }; const double b[] = { 1.0, 2.05319162663775882187, 1.6763848301838038494, 0.68976733498510000455, 0.14810397642748007459, 0.0151986665636164571966, 5.475938084995344946e-4, 1.05075007164441684324e-9 }; double x = rat_eval (a, 8, b, 8, (r - 1.6)); return x; } static double tail (double r) { const double a[] = { 6.6579046435011037772, 5.4637849111641143699, 1.7848265399172913358, 0.29656057182850489123, 0.026532189526576123093, 0.0012426609473880784386, 2.71155556874348757815e-5, 2.01033439929228813265e-7 }; const double b[] = { 1.0, 0.59983220655588793769, 0.13692988092273580531, 0.0148753612908506148525, 7.868691311456132591e-4, 1.8463183175100546818e-5, 1.4215117583164458887e-7, 2.04426310338993978564e-15 }; double x = rat_eval (a, 8, b, 8, (r - 5.0)); return x; } double gsl_cdf_ugaussian_Pinv (const double P) { double r, x, pp; double dP = P - 0.5; if (P == 1.0) { return GSL_POSINF; } else if (P == 0.0) { return GSL_NEGINF; } if (fabs (dP) <= 0.425) { x = small (dP); return x; } pp = (P < 0.5) ? P : 1.0 - P; r = sqrt (-log (pp)); if (r <= 5.0) { x = intermediate (r); } else { x = tail (r); } if (P < 0.5) { return -x; } else { return x; } } double gsl_cdf_ugaussian_Qinv (const double Q) { double r, x, pp; double dQ = Q - 0.5; if (Q == 1.0) { return GSL_NEGINF; } else if (Q == 0.0) { return GSL_POSINF; } if (fabs (dQ) <= 0.425) { x = small (dQ); return -x; } pp = (Q < 0.5) ? Q : 1.0 - Q; r = sqrt (-log (pp)); if (r <= 5.0) { x = intermediate (r); } else { x = tail (r); } if (Q < 0.5) { return x; } else { return -x; } } double gsl_cdf_gaussian_Pinv (const double P, const double sigma) { return sigma * gsl_cdf_ugaussian_Pinv (P); } double gsl_cdf_gaussian_Qinv (const double Q, const double sigma) { return sigma * gsl_cdf_ugaussian_Qinv (Q); } gsl/dht/0000755000175000017500000000000014057135461010502 5ustar eddeddgsl/dht/dht.c0000644000175000017500000001136013536674414011435 0ustar eddedd/* dht/dht.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * Copyright (C) 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include gsl_dht * gsl_dht_alloc (size_t size) { gsl_dht * t; if(size == 0) { GSL_ERROR_VAL("size == 0", GSL_EDOM, 0); } t = (gsl_dht *)malloc(sizeof(gsl_dht)); if(t == 0) { GSL_ERROR_VAL("out of memory", GSL_ENOMEM, 0); } t->size = size; t->xmax = -1.0; /* Make it clear that this needs to be calculated. */ t->nu = -1.0; t->j = (double *)malloc((size+2)*sizeof(double)); if(t->j == 0) { free(t); GSL_ERROR_VAL("could not allocate memory for j", GSL_ENOMEM, 0); } t->Jjj = (double *)malloc(size*(size+1)/2 * sizeof(double)); if(t->Jjj == 0) { free(t->j); free(t); GSL_ERROR_VAL("could not allocate memory for Jjj", GSL_ENOMEM, 0); } t->J2 = (double *)malloc((size+1)*sizeof(double)); if(t->J2 == 0) { free(t->Jjj); free(t->j); free(t); GSL_ERROR_VAL("could not allocate memory for J2", GSL_ENOMEM, 0); } return t; } /* Handle internal calculation of Bessel zeros. */ static int dht_bessel_zeros(gsl_dht * t) { unsigned int s; gsl_sf_result z; int stat_z = 0; t->j[0] = 0.0; for(s=1; s < t->size + 2; s++) { stat_z += gsl_sf_bessel_zero_Jnu_e(t->nu, s, &z); t->j[s] = z.val; } if(stat_z != 0) { GSL_ERROR("could not compute bessel zeroes", GSL_EFAILED); } else { return GSL_SUCCESS; } } gsl_dht * gsl_dht_new (size_t size, double nu, double xmax) { int status; gsl_dht * dht = gsl_dht_alloc (size); if (dht == 0) return 0; status = gsl_dht_init(dht, nu, xmax); if (status) return 0; return dht; } int gsl_dht_init(gsl_dht * t, double nu, double xmax) { if(xmax <= 0.0) { GSL_ERROR ("xmax is not positive", GSL_EDOM); } else if(nu < 0.0) { GSL_ERROR ("nu is negative", GSL_EDOM); } else { size_t n, m; int stat_bz = GSL_SUCCESS; int stat_J = 0; double jN; if(nu != t->nu) { /* Recalculate Bessel zeros if necessary. */ t->nu = nu; stat_bz = dht_bessel_zeros(t); } jN = t->j[t->size+1]; t->xmax = xmax; t->kmax = jN / xmax; t->J2[0] = 0.0; for(m=1; msize+1; m++) { gsl_sf_result J; stat_J += gsl_sf_bessel_Jnu_e(nu + 1.0, t->j[m], &J); t->J2[m] = J.val * J.val; } /* J_nu(j[n] j[m] / j[N]) = Jjj[n(n-1)/2 + m - 1], 1 <= n,m <= size */ for(n=1; nsize+1; n++) { for(m=1; m<=n; m++) { double arg = t->j[n] * t->j[m] / jN; gsl_sf_result J; stat_J += gsl_sf_bessel_Jnu_e(nu, arg, &J); t->Jjj[n*(n-1)/2 + m - 1] = J.val; } } if(stat_J != 0) { GSL_ERROR("error computing bessel function", GSL_EFAILED); } else { return stat_bz; } } } double gsl_dht_x_sample(const gsl_dht * t, int n) { return t->j[n+1]/t->j[t->size+1] * t->xmax; } double gsl_dht_k_sample(const gsl_dht * t, int n) { return t->j[n+1] / t->xmax; } void gsl_dht_free(gsl_dht * t) { RETURN_IF_NULL (t); free(t->J2); free(t->Jjj); free(t->j); free(t); } int gsl_dht_apply(const gsl_dht * t, double * f_in, double * f_out) { const double jN = t->j[t->size + 1]; const double r = t->xmax / jN; size_t m; size_t i; for(m=0; msize; m++) { double sum = 0.0; double Y; for(i=0; isize; i++) { /* Need to find max and min so that we * address the symmetric Jjj matrix properly. * FIXME: we can presumably optimize this * by just running over the elements of Jjj * in a deterministic manner. */ size_t m_local; size_t n_local; if(i < m) { m_local = i; n_local = m; } else { m_local = m; n_local = i; } Y = t->Jjj[n_local*(n_local+1)/2 + m_local] / t->J2[i+1]; sum += Y * f_in[i]; } f_out[m] = sum * 2.0 * r*r; } return GSL_SUCCESS; } gsl/dht/Makefile.in0000664000175000017500000010506014057135461012553 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = dht ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgsldht_la_LIBADD = am_libgsldht_la_OBJECTS = dht.lo libgsldht_la_OBJECTS = $(am_libgsldht_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgsldht.la ../specfunc/libgslspecfunc.la \ ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dht.Plo ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgsldht_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgsldht_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgsldht.la pkginclude_HEADERS = gsl_dht.h AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgsldht.la ../specfunc/libgslspecfunc.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c libgsldht_la_SOURCES = dht.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu dht/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu dht/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgsldht.la: $(libgsldht_la_OBJECTS) $(libgsldht_la_DEPENDENCIES) $(EXTRA_libgsldht_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgsldht_la_OBJECTS) $(libgsldht_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dht.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/dht.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/dht.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/dht/ChangeLog0000644000175000017500000000070513536674414012265 0ustar eddedd2009-07-09 Brian Gough * dht.c (gsl_dht_free): handle NULL argument in free 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir Mon Apr 23 10:31:58 2001 Brian Gough * unified error handling conventions to _e for error handling functions and no suffix for plain functions, so _impl functions are no longer needed. gsl/dht/Makefile.am0000644000175000017500000000062213536674414012545 0ustar eddeddnoinst_LTLIBRARIES = libgsldht.la pkginclude_HEADERS = gsl_dht.h AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_LDADD = libgsldht.la ../specfunc/libgslspecfunc.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c libgsldht_la_SOURCES = dht.c gsl/dht/gsl_dht.h0000664000175000017500000000513214057135461012302 0ustar eddedd/* dht/gsl_dht.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_DHT_H__ #define __GSL_DHT_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_dht_struct { size_t size; /* size of the sample arrays to be transformed */ double nu; /* Bessel function order */ double xmax; /* the upper limit to the x-sampling domain */ double kmax; /* the upper limit to the k-sampling domain */ double * j; /* array of computed J_nu zeros, j_{nu,s} = j[s] */ double * Jjj; /* transform numerator, J_nu(j_i j_m / j_N) */ double * J2; /* transform denominator, J_{nu+1}^2(j_m) */ }; typedef struct gsl_dht_struct gsl_dht; /* Create a new transform object for a given size * sampling array on the domain [0, xmax]. */ gsl_dht * gsl_dht_alloc(size_t size); gsl_dht * gsl_dht_new(size_t size, double nu, double xmax); /* Recalculate a transform object for given values of nu, xmax. * You cannot change the size of the object since the internal * allocation is reused. */ int gsl_dht_init(gsl_dht * t, double nu, double xmax); /* The n'th computed x sample point for a given transform. * 0 <= n <= size-1 */ double gsl_dht_x_sample(const gsl_dht * t, int n); /* The n'th computed k sample point for a given transform. * 0 <= n <= size-1 */ double gsl_dht_k_sample(const gsl_dht * t, int n); /* Free a transform object. */ void gsl_dht_free(gsl_dht * t); /* Perform a transform on a sampled array. * f_in[0] ... f_in[size-1] and similarly for f_out[] */ int gsl_dht_apply(const gsl_dht * t, double * f_in, double * f_out); __END_DECLS #endif /* __GSL_DHT_H__ */ gsl/dht/test.c0000644000175000017500000001204113536674414011632 0ustar eddedd/* dht/test_dht.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include /* Test exact small transform. */ int test_dht_exact(void) { int stat = 0; double f_in[3] = { 1.0, 2.0, 3.0 }; double f_out[3]; gsl_dht * t = gsl_dht_new(3, 1.0, 1.0); gsl_dht_apply(t, f_in, f_out); /* Check values. */ if(fabs( f_out[0]-( 0.375254649407520))/0.375254649407520 > 1.0e-14) stat++; if(fabs( f_out[1]-(-0.133507872695560))/0.133507872695560 > 1.0e-14) stat++; if(fabs( f_out[2]-( 0.044679925143840))/0.044679925143840 > 1.0e-14) stat++; /* Check inverse. * We have to adjust the normalization * so we can use the same precalculated transform. */ gsl_dht_apply(t, f_out, f_in); f_in[0] *= 13.323691936314223*13.323691936314223; /* jzero[1,4]^2 */ f_in[1] *= 13.323691936314223*13.323691936314223; f_in[2] *= 13.323691936314223*13.323691936314223; /* The loss of precision on the inverse * is a little surprising. However, this * thing is quite tricky since the band-limited * function represented by the samples {1,2,3} * need not be very nice. Like in any spectral * application, you really have to have some * a-priori knowledge of the underlying function. */ if(fabs( f_in[0]-1.0)/1.0 > 2.0e-05) stat++; if(fabs( f_in[1]-2.0)/2.0 > 2.0e-05) stat++; if(fabs( f_in[2]-3.0)/3.0 > 2.0e-05) stat++; gsl_dht_free(t); return stat; } /* Test the transform * Integrate[x J_0(a x) / (x^2 + 1), {x,0,Inf}] = K_0(a) */ int test_dht_simple(void) { int stat = 0; int n; double f_in[128]; double f_out[128]; gsl_dht * t = gsl_dht_new(128, 0.0, 100.0); for(n=0; n<128; n++) { const double x = gsl_dht_x_sample(t, n); f_in[n] = 1.0/(1.0+x*x); } gsl_dht_apply(t, f_in, f_out); /* This is a difficult transform to calculate this way, * since it does not satisfy the boundary condition and * it dies quite slowly. So it is not meaningful to * compare this to high accuracy. We only check * that it seems to be working. */ if(fabs( f_out[0]-4.00)/4.00 > 0.02) stat++; if(fabs( f_out[5]-1.84)/1.84 > 0.02) stat++; if(fabs(f_out[10]-1.27)/1.27 > 0.02) stat++; if(fabs(f_out[35]-0.352)/0.352 > 0.02) stat++; if(fabs(f_out[100]-0.0237)/0.0237 > 0.02) stat++; gsl_dht_free(t); return stat; } /* Test the transform * Integrate[ x exp(-x) J_1(a x), {x,0,Inf}] = a F(3/2, 2; 2; -a^2) */ int test_dht_exp1(void) { int stat = 0; int n; double f_in[128]; double f_out[128]; gsl_dht * t = gsl_dht_new(128, 1.0, 20.0); for(n=0; n<128; n++) { const double x = gsl_dht_x_sample(t, n); f_in[n] = exp(-x); } gsl_dht_apply(t, f_in, f_out); /* Spot check. * Note that the systematic errors in the calculation * are quite large, so it is meaningless to compare * to a high accuracy. */ if(fabs( f_out[0]-0.181)/0.181 > 0.02) stat++; if(fabs( f_out[5]-0.357)/0.357 > 0.02) stat++; if(fabs(f_out[10]-0.211)/0.211 > 0.02) stat++; if(fabs(f_out[35]-0.0289)/0.0289 > 0.02) stat++; if(fabs(f_out[100]-0.00221)/0.00211 > 0.02) stat++; gsl_dht_free(t); return stat; } /* Test the transform * Integrate[ x^2 (1-x^2) J_1(a x), {x,0,1}] = 2/a^2 J_3(a) */ int test_dht_poly1(void) { int stat = 0; int n; double f_in[128]; double f_out[128]; gsl_dht * t = gsl_dht_new(128, 1.0, 1.0); for(n=0; n<128; n++) { const double x = gsl_dht_x_sample(t, n); f_in[n] = x * (1.0 - x*x); } gsl_dht_apply(t, f_in, f_out); /* Spot check. This function satisfies the boundary condition, * so the accuracy should be ok. */ if(fabs( f_out[0]-0.057274214)/0.057274214 > 1.0e-07) stat++; if(fabs( f_out[5]-(-0.000190850))/0.000190850 > 1.0e-05) stat++; if(fabs(f_out[10]-0.000024342)/0.000024342 > 1.0e-04) stat++; if(fabs(f_out[35]-(-4.04e-07))/4.04e-07 > 1.0e-03) stat++; if(fabs(f_out[100]-1.0e-08)/1.0e-08 > 0.25) stat++; gsl_dht_free(t); return stat; } int main() { gsl_ieee_env_setup (); gsl_test( test_dht_exact(), "Small Exact DHT"); gsl_test( test_dht_simple(), "Simple DHT"); gsl_test( test_dht_exp1(), "Exp J1 DHT"); gsl_test( test_dht_poly1(), "Poly J1 DHT"); exit (gsl_test_summary()); } gsl/err/0000755000175000017500000000000014057135461010513 5ustar eddeddgsl/err/Makefile.in0000664000175000017500000010566214057135461012574 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = err ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslerr_la_LIBADD = am_libgslerr_la_OBJECTS = error.lo stream.lo message.lo strerror.lo libgslerr_la_OBJECTS = $(am_libgslerr_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslerr.la ../test/libgsltest.la \ ../sys/libgslsys.la ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/error.Plo ./$(DEPDIR)/message.Plo \ ./$(DEPDIR)/stream.Plo ./$(DEPDIR)/strerror.Plo \ ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslerr_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslerr_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslerr.la pkginclude_HEADERS = gsl_errno.h gsl_message.h libgslerr_la_SOURCES = error.c stream.c message.c strerror.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu err/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu err/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslerr.la: $(libgslerr_la_OBJECTS) $(libgslerr_la_DEPENDENCIES) $(EXTRA_libgslerr_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslerr_la_OBJECTS) $(libgslerr_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/message.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stream.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/error.Plo -rm -f ./$(DEPDIR)/message.Plo -rm -f ./$(DEPDIR)/stream.Plo -rm -f ./$(DEPDIR)/strerror.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/error.Plo -rm -f ./$(DEPDIR)/message.Plo -rm -f ./$(DEPDIR)/stream.Plo -rm -f ./$(DEPDIR)/strerror.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/err/strerror.c0000644000175000017500000000651213536674414012554 0ustar eddedd/* err/strerror.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include const char * gsl_strerror (const int gsl_errno) { switch (gsl_errno) { case GSL_SUCCESS: return "success" ; case GSL_FAILURE: return "failure" ; case GSL_CONTINUE: return "the iteration has not converged yet"; case GSL_EDOM: return "input domain error" ; case GSL_ERANGE: return "output range error" ; case GSL_EFAULT: return "invalid pointer" ; case GSL_EINVAL: return "invalid argument supplied by user" ; case GSL_EFAILED: return "generic failure" ; case GSL_EFACTOR: return "factorization failed" ; case GSL_ESANITY: return "sanity check failed - shouldn't happen" ; case GSL_ENOMEM: return "malloc failed" ; case GSL_EBADFUNC: return "problem with user-supplied function"; case GSL_ERUNAWAY: return "iterative process is out of control"; case GSL_EMAXITER: return "exceeded max number of iterations" ; case GSL_EZERODIV: return "tried to divide by zero" ; case GSL_EBADTOL: return "specified tolerance is invalid or theoretically unattainable" ; case GSL_ETOL: return "failed to reach the specified tolerance" ; case GSL_EUNDRFLW: return "underflow" ; case GSL_EOVRFLW: return "overflow" ; case GSL_ELOSS: return "loss of accuracy" ; case GSL_EROUND: return "roundoff error" ; case GSL_EBADLEN: return "matrix/vector sizes are not conformant" ; case GSL_ENOTSQR: return "matrix not square" ; case GSL_ESING: return "singularity or extremely bad function behavior detected" ; case GSL_EDIVERGE: return "integral or series is divergent" ; case GSL_EUNSUP: return "the required feature is not supported by this hardware platform"; case GSL_EUNIMPL: return "the requested feature is not (yet) implemented"; case GSL_ECACHE: return "cache limit exceeded"; case GSL_ETABLE: return "table limit exceeded"; case GSL_ENOPROG: return "iteration is not making progress towards solution"; case GSL_ENOPROGJ: return "jacobian evaluations are not improving the solution"; case GSL_ETOLF: return "cannot reach the specified tolerance in F"; case GSL_ETOLX: return "cannot reach the specified tolerance in X"; case GSL_ETOLG: return "cannot reach the specified tolerance in gradient"; case GSL_EOF: return "end of file"; default: return "unknown error code" ; } } gsl/err/ChangeLog0000644000175000017500000001251413536674414012277 0ustar eddedd2004-07-10 Brian Gough * error.c (gsl_error): flush stdout/stderr before aborting (needed to get a useful error message on some platforms) 2003-06-17 Brian Gough * warn.c: removed, the functions are not used Sat Apr 27 21:27:32 2002 Brian Gough * error.c (gsl_error): added an explanatory message in the default error handler before aborting Tue Jun 12 11:52:23 2001 Brian Gough * gsl_errno.h (GSL_STATUS_UPDATE): added macro for updating status value multiple times Fri Apr 27 18:18:59 2001 Brian Gough * gsl_errno.h (GSL_ERROR_NULL): added macro which returns NULL, for out of memory conditions Mon Jan 22 16:01:55 2001 Brian Gough * gsl_errno.h: added EOF for end of file Sat Aug 26 19:26:59 2000 Brian Gough * gsl_errno.h: added error codes ETOLF, ETOLX, ETOLG for unattainable tolerances in (F,X,G) in multimin MINPACK LM algorithm. Fri May 5 11:20:10 2000 Brian Gough * split gsl_test code out into separate test/ directory Sun Nov 28 17:17:03 1999 Brian Gough * gsl_errno.h: added GSL_ENOPROG and GSL_ENOPROGJ to handle error conditions from minpack hybrid algorithms (INFO=5,4 in the original code) Thu Oct 28 14:41:31 1999 Brian Gough * gsl_test.h: changed variable name in prototype for clarity Thu Oct 7 11:46:53 1999 Brian Gough * test_results.c (gsl_test_str): changed #if __STDC__ to #ifdef __STDC__ so the code will compile with compilers that define __STDC__ to 0 meaning STDC+extensions. Sun Jul 11 21:48:25 1999 Brian Gough * test_errnos.c (main): added GSL_ECACHE to handle internal cache structures which grow and can hit a limit Sun Mar 7 17:00:08 1999 Brian Gough * gsl_errno.h, test_errnos.c, strerror.c: added GSL_EDIVERGE for divergent integrals and series Sat Feb 20 12:14:47 1999 Brian Gough * test_errnos.c (main): added the new error codes to the tests * gsl_errno.h: moved all the error codes into a single enum instead of having a separate enum for GSL_SUCCESS and GSL_FAILURE Fri Feb 19 15:56:15 1999 Brian Gough * gsl_errno.h, strerror.c: added GSL_CONTINUE as an error code indicating that an iteration process has not converged and should be continued for more iterations. Tue Nov 17 17:11:31 1998 Brian Gough * gsl_test.h: removed #include which should not be present in installed header files Tue Nov 10 15:55:56 1998 Brian Gough * test_results.c (gsl_test_abs), gsl_test.h: added gsl_test_abs for absolute errors, like gsl_test_rel for relative errors Fri Oct 23 12:51:01 1998 Brian Gough * test_results.c (gsl_test_rel): print a shorter "observed vs expected" message if the description is 45 characters or longer Mon Jun 1 11:02:04 1998 Brian Gough * gsl_errno.h: added GSL_EUNSUP for errors caused by a hardware feature which is not supported on a particular platform * renamed test.c to test_results.c to avoid confusion when debugging other test programs called test.c Sat May 30 16:11:34 1998 Brian Gough * gsl_errno.h: add GSL_ESING for errors caused by singularities or other bad function behavior Fri May 29 14:41:19 1998 Brian Gough * gsl_errno.h: added GSL_EBADLEN to signify bad lengths of matrices or vectors (e.g. non-conformant sizes in a matrix or vector multiplication) Wed May 27 18:15:34 1998 Brian Gough * test.c (gsl_test_str): changed things so that the strings aren't printed unless the string equality test fails (usually they were too long) Mon May 18 17:58:20 1998 Brian Gough * test.c (gsl_test_rel): added a test for numerical quantities, given a result, an expected result and an allowable relative error. (gsl_test_int): added a test for comparing integers Sun May 10 16:03:12 1998 Brian Gough * gsl_errno.h: added GSL_EROUND for roundoff errors Fri May 8 18:50:13 1998 Brian Gough * gsl_errno.h: changed GSL_ETIMEOUT to GSL_EMAXITER to describe the error that occurs when a specified number of iterations is exceeded. Sun Apr 19 19:14:05 1998 Brian Gough * strerror.c (gsl_strerror): added an strerror function for making readable descriptions of the error number Wed Apr 15 21:59:57 1998 Brian Gough * added a stream handler, for the error stream * completely reorganized the files, but the functions are relatively unchanged Wed Apr 8 13:55:48 1998 Brian Gough * gsl_errno.h (GSL_ERROR_RETURN_NOTHING): added an error macro suitable for void functions Mon Apr 6 14:10:48 1998 Brian Gough * gsl_errno.h: use enum instead of #define for symbolic constants, so that they can be seen in the debugger Sun Apr 5 19:49:17 1998 Brian Gough * err/errno.c (gsl_error): now takes gsl_errno as an argument (this is useful for doing conditional breakpoints) gsl/err/Makefile.am0000644000175000017500000000046213536674414012560 0ustar eddeddnoinst_LTLIBRARIES = libgslerr.la pkginclude_HEADERS = gsl_errno.h gsl_message.h libgslerr_la_SOURCES = error.c stream.c message.c strerror.c check_PROGRAMS = test TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la gsl/err/error.c0000644000175000017500000000400613536674414012017 0ustar eddedd/* err/error.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include gsl_error_handler_t * gsl_error_handler = NULL; static void no_error_handler (const char *reason, const char *file, int line, int gsl_errno); void gsl_error (const char * reason, const char * file, int line, int gsl_errno) { if (gsl_error_handler) { (*gsl_error_handler) (reason, file, line, gsl_errno); return ; } gsl_stream_printf ("ERROR", file, line, reason); fflush (stdout); fprintf (stderr, "Default GSL error handler invoked.\n"); fflush (stderr); abort (); } gsl_error_handler_t * gsl_set_error_handler (gsl_error_handler_t * new_handler) { gsl_error_handler_t * previous_handler = gsl_error_handler; gsl_error_handler = new_handler; return previous_handler; } gsl_error_handler_t * gsl_set_error_handler_off (void) { gsl_error_handler_t * previous_handler = gsl_error_handler; gsl_error_handler = no_error_handler; return previous_handler; } static void no_error_handler (const char *reason, const char *file, int line, int gsl_errno) { /* do nothing */ reason = 0; file = 0; line = 0; gsl_errno = 0; return; } gsl/err/message.c0000644000175000017500000000230713536674414012314 0ustar eddedd/* err/message.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include unsigned int gsl_message_mask = GSL_MESSAGE_MASK; void gsl_message (const char * reason, const char * file, int line, unsigned int mask) { if (mask & gsl_message_mask) { gsl_stream_printf ("MESSAGE", file, line, reason); } } gsl/err/gsl_errno.h0000644000175000017500000001351513536674414012672 0ustar eddedd/* err/gsl_errno.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_ERRNO_H__ #define __GSL_ERRNO_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS enum { GSL_SUCCESS = 0, GSL_FAILURE = -1, GSL_CONTINUE = -2, /* iteration has not converged */ GSL_EDOM = 1, /* input domain error, e.g sqrt(-1) */ GSL_ERANGE = 2, /* output range error, e.g. exp(1e100) */ GSL_EFAULT = 3, /* invalid pointer */ GSL_EINVAL = 4, /* invalid argument supplied by user */ GSL_EFAILED = 5, /* generic failure */ GSL_EFACTOR = 6, /* factorization failed */ GSL_ESANITY = 7, /* sanity check failed - shouldn't happen */ GSL_ENOMEM = 8, /* malloc failed */ GSL_EBADFUNC = 9, /* problem with user-supplied function */ GSL_ERUNAWAY = 10, /* iterative process is out of control */ GSL_EMAXITER = 11, /* exceeded max number of iterations */ GSL_EZERODIV = 12, /* tried to divide by zero */ GSL_EBADTOL = 13, /* user specified an invalid tolerance */ GSL_ETOL = 14, /* failed to reach the specified tolerance */ GSL_EUNDRFLW = 15, /* underflow */ GSL_EOVRFLW = 16, /* overflow */ GSL_ELOSS = 17, /* loss of accuracy */ GSL_EROUND = 18, /* failed because of roundoff error */ GSL_EBADLEN = 19, /* matrix, vector lengths are not conformant */ GSL_ENOTSQR = 20, /* matrix not square */ GSL_ESING = 21, /* apparent singularity detected */ GSL_EDIVERGE = 22, /* integral or series is divergent */ GSL_EUNSUP = 23, /* requested feature is not supported by the hardware */ GSL_EUNIMPL = 24, /* requested feature not (yet) implemented */ GSL_ECACHE = 25, /* cache limit exceeded */ GSL_ETABLE = 26, /* table limit exceeded */ GSL_ENOPROG = 27, /* iteration is not making progress towards solution */ GSL_ENOPROGJ = 28, /* jacobian evaluations are not improving the solution */ GSL_ETOLF = 29, /* cannot reach the specified tolerance in F */ GSL_ETOLX = 30, /* cannot reach the specified tolerance in X */ GSL_ETOLG = 31, /* cannot reach the specified tolerance in gradient */ GSL_EOF = 32 /* end of file */ } ; void gsl_error (const char * reason, const char * file, int line, int gsl_errno); void gsl_stream_printf (const char *label, const char *file, int line, const char *reason); const char * gsl_strerror (const int gsl_errno); typedef void gsl_error_handler_t (const char * reason, const char * file, int line, int gsl_errno); typedef void gsl_stream_handler_t (const char * label, const char * file, int line, const char * reason); gsl_error_handler_t * gsl_set_error_handler (gsl_error_handler_t * new_handler); gsl_error_handler_t * gsl_set_error_handler_off (void); gsl_stream_handler_t * gsl_set_stream_handler (gsl_stream_handler_t * new_handler); FILE * gsl_set_stream (FILE * new_stream); /* GSL_ERROR: call the error handler, and return the error code */ #define GSL_ERROR(reason, gsl_errno) \ do { \ gsl_error (reason, __FILE__, __LINE__, gsl_errno) ; \ return gsl_errno ; \ } while (0) /* GSL_ERROR_VAL: call the error handler, and return the given value */ #define GSL_ERROR_VAL(reason, gsl_errno, value) \ do { \ gsl_error (reason, __FILE__, __LINE__, gsl_errno) ; \ return value ; \ } while (0) /* GSL_ERROR_VOID: call the error handler, and then return (for void functions which still need to generate an error) */ #define GSL_ERROR_VOID(reason, gsl_errno) \ do { \ gsl_error (reason, __FILE__, __LINE__, gsl_errno) ; \ return ; \ } while (0) /* GSL_ERROR_NULL suitable for out-of-memory conditions */ #define GSL_ERROR_NULL(reason, gsl_errno) GSL_ERROR_VAL(reason, gsl_errno, 0) /* Sometimes you have several status results returned from * function calls and you want to combine them in some sensible * way. You cannot produce a "total" status condition, but you can * pick one from a set of conditions based on an implied hierarchy. * * In other words: * you have: status_a, status_b, ... * you want: status = (status_a if it is bad, or status_b if it is bad,...) * * In this example you consider status_a to be more important and * it is checked first, followed by the others in the order specified. * * Here are some dumb macros to do this. */ #define GSL_ERROR_SELECT_2(a,b) ((a) != GSL_SUCCESS ? (a) : ((b) != GSL_SUCCESS ? (b) : GSL_SUCCESS)) #define GSL_ERROR_SELECT_3(a,b,c) ((a) != GSL_SUCCESS ? (a) : GSL_ERROR_SELECT_2(b,c)) #define GSL_ERROR_SELECT_4(a,b,c,d) ((a) != GSL_SUCCESS ? (a) : GSL_ERROR_SELECT_3(b,c,d)) #define GSL_ERROR_SELECT_5(a,b,c,d,e) ((a) != GSL_SUCCESS ? (a) : GSL_ERROR_SELECT_4(b,c,d,e)) #define GSL_STATUS_UPDATE(sp, s) do { if ((s) != GSL_SUCCESS) *(sp) = (s);} while(0) __END_DECLS #endif /* __GSL_ERRNO_H__ */ gsl/err/gsl_message.h0000644000175000017500000000456413536674414013175 0ustar eddedd/* err/gsl_message.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MESSAGE_H__ #define __GSL_MESSAGE_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Provide a general messaging service for client use. Messages can * be selectively turned off at compile time by defining an * appropriate message mask. Client code which uses the GSL_MESSAGE() * macro must provide a mask which is or'ed with the GSL_MESSAGE_MASK. * * The messaging service can be completely turned off * by defining GSL_MESSAGING_OFF. */ void gsl_message(const char * message, const char * file, int line, unsigned int mask); #ifndef GSL_MESSAGE_MASK #define GSL_MESSAGE_MASK 0xffffffffu /* default all messages allowed */ #endif GSL_VAR unsigned int gsl_message_mask ; /* Provide some symolic masks for client ease of use. */ enum { GSL_MESSAGE_MASK_A = 1, GSL_MESSAGE_MASK_B = 2, GSL_MESSAGE_MASK_C = 4, GSL_MESSAGE_MASK_D = 8, GSL_MESSAGE_MASK_E = 16, GSL_MESSAGE_MASK_F = 32, GSL_MESSAGE_MASK_G = 64, GSL_MESSAGE_MASK_H = 128 } ; #ifdef GSL_MESSAGING_OFF /* throw away messages */ #define GSL_MESSAGE(message, mask) do { } while(0) #else /* output all messages */ #define GSL_MESSAGE(message, mask) \ do { \ if (mask & GSL_MESSAGE_MASK) \ gsl_message (message, __FILE__, __LINE__, mask) ; \ } while (0) #endif __END_DECLS #endif /* __GSL_MESSAGE_H__ */ gsl/err/TODO0000644000175000017500000000017213536674414011212 0ustar eddedd# -*- org -*- #+CATEGORY: err * Add a GSL_ERROR_MODE environment variable for choosing error behavior at runtime (???). gsl/err/test.c0000644000175000017500000000532013536674414011645 0ustar eddedd/* err/test_errnos.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #define CHECK(x) errors[n].number = x ; errors[n].name = #x ; n++ ; #define MAX_ERRS 64 int verbose = 0 ; int main (void) { int i, j, n = 0 ; struct { int number; const char * name; } errors[MAX_ERRS] ; CHECK(GSL_SUCCESS); CHECK(GSL_FAILURE); CHECK(GSL_CONTINUE); CHECK(GSL_EDOM); CHECK(GSL_ERANGE); CHECK(GSL_EFAULT); CHECK(GSL_EINVAL); CHECK(GSL_EFAILED); CHECK(GSL_EFACTOR); CHECK(GSL_ESANITY); CHECK(GSL_ENOMEM); CHECK(GSL_EBADFUNC); CHECK(GSL_ERUNAWAY); CHECK(GSL_EMAXITER); CHECK(GSL_EZERODIV); CHECK(GSL_EBADTOL); CHECK(GSL_ETOL); CHECK(GSL_EUNDRFLW); CHECK(GSL_EOVRFLW); CHECK(GSL_ELOSS); CHECK(GSL_EROUND); CHECK(GSL_EBADLEN); CHECK(GSL_ENOTSQR); CHECK(GSL_ESING); CHECK(GSL_EDIVERGE); CHECK(GSL_EUNSUP); CHECK(GSL_EUNIMPL); CHECK(GSL_ECACHE); CHECK(GSL_ETABLE); CHECK(GSL_ENOPROG); CHECK(GSL_ENOPROGJ); CHECK(GSL_ETOLF); CHECK(GSL_ETOLX); CHECK(GSL_ETOLG); CHECK(GSL_EOF); for (i = 0 ; i < n ; i++) { if (verbose) printf ("%s = %d\n", errors[i].name, errors[i].number) ; } for (i = 0; i < n; i++) { int status = 0; for (j = 0; j < n; j++) { if (j != i) status |= (errors[i].number == errors[j].number); } gsl_test (status, "%s is distinct from other error values", errors[i].name); } for (i = 0; i < n; i++) { int status = 0; int e1 = errors[i].number ; for (j = 0; j < n; j++) { if (j != i) { int e2 = errors[j].number; status |= (gsl_strerror(e1) == gsl_strerror(e2)) ; } } gsl_test (status, "%s has a distinct error message", errors[i].name); } exit (gsl_test_summary ()); } gsl/err/stream.c0000644000175000017500000000345713536674414012172 0ustar eddedd/* err/stream.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include FILE * gsl_stream = NULL ; gsl_stream_handler_t * gsl_stream_handler = NULL; void gsl_stream_printf (const char *label, const char *file, int line, const char *reason) { if (gsl_stream == NULL) { gsl_stream = stderr; } if (gsl_stream_handler) { (*gsl_stream_handler) (label, file, line, reason); return; } fprintf (gsl_stream, "gsl: %s:%d: %s: %s\n", file, line, label, reason); } gsl_stream_handler_t * gsl_set_stream_handler (gsl_stream_handler_t * new_handler) { gsl_stream_handler_t * previous_handler = gsl_stream_handler; gsl_stream_handler = new_handler; return previous_handler; } FILE * gsl_set_stream (FILE * new_stream) { FILE * previous_stream; if (gsl_stream == NULL) { gsl_stream = stderr; } previous_stream = gsl_stream; gsl_stream = new_stream; return previous_stream; } gsl/config.guess0000755000175000017500000013036113536674414012256 0ustar eddedd#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-06-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; or1k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gsl/ieee-utils/0000755000175000017500000000000014057135461011770 5ustar eddeddgsl/ieee-utils/read.c0000644000175000017500000001210013536674414013050 0ustar eddedd/* ieee-utils/read.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include static int lookup_string (const char * p, int * precision, int * rounding, int * exception_mask) ; int gsl_ieee_read_mode_string (const char * description, int * precision, int * rounding, int * exception_mask) { char * start ; char * end; char * p; int precision_count = 0 ; int rounding_count = 0 ; int exception_count = 0 ; start = (char *) malloc(strlen(description) + 1) ; if (start == 0) { GSL_ERROR ("no memory to parse mode string", GSL_ENOMEM) ; } strcpy (start, description) ; p = start ; *precision = 0 ; *rounding = 0 ; *exception_mask = 0 ; do { int status ; int new_precision, new_rounding, new_exception ; end = strchr (p,',') ; if (end) { *end = '\0' ; do { end++ ; /* skip over trailing whitespace */ } while (*end == ' ' || *end == ',') ; } new_precision = 0 ; new_rounding = 0 ; new_exception = 0 ; status = lookup_string (p, &new_precision, &new_rounding, &new_exception) ; if (status) { free(start); GSL_ERROR ("unrecognized GSL_IEEE_MODE string.\nValid settings are:\n\n" " single-precision double-precision extended-precision\n" " round-to-nearest round-down round-up round-to-zero\n" " mask-invalid mask-denormalized mask-division-by-zero\n" " mask-overflow mask-underflow mask-all\n" " trap-common trap-inexact\n" "\n" "separated by commas. " "(e.g. GSL_IEEE_MODE=\"round-down,mask-underflow\")", GSL_EINVAL) ; } if (new_precision) { *precision = new_precision ; precision_count ++ ; if (precision_count > 1) { free(start); GSL_ERROR ("attempted to set IEEE precision twice", GSL_EINVAL) ; } } if (new_rounding) { *rounding = new_rounding ; rounding_count ++ ; if (rounding_count > 1) { free(start); GSL_ERROR ("attempted to set IEEE rounding mode twice", GSL_EINVAL) ; } } if (new_exception) { *exception_mask |= new_exception ; exception_count ++ ; } p = end ; } while (end && *p != '\0') ; free(start) ; return GSL_SUCCESS ; } static int lookup_string (const char * p, int * precision, int * rounding, int * exception_mask) { if (strcmp(p,"single-precision") == 0) { *precision = GSL_IEEE_SINGLE_PRECISION ; } else if (strcmp(p,"double-precision") == 0) { *precision = GSL_IEEE_DOUBLE_PRECISION ; } else if (strcmp(p,"extended-precision") == 0) { *precision = GSL_IEEE_EXTENDED_PRECISION ; } else if (strcmp(p,"round-to-nearest") == 0) { *rounding = GSL_IEEE_ROUND_TO_NEAREST ; } else if (strcmp(p,"round-down") == 0) { *rounding = GSL_IEEE_ROUND_DOWN ; } else if (strcmp(p,"round-up") == 0) { *rounding = GSL_IEEE_ROUND_UP ; } else if (strcmp(p,"round-to-zero") == 0) { *rounding = GSL_IEEE_ROUND_TO_ZERO ; } else if (strcmp(p,"mask-all") == 0) { *exception_mask = GSL_IEEE_MASK_ALL ; } else if (strcmp(p,"mask-invalid") == 0) { *exception_mask = GSL_IEEE_MASK_INVALID ; } else if (strcmp(p,"mask-denormalized") == 0) { *exception_mask = GSL_IEEE_MASK_DENORMALIZED ; } else if (strcmp(p,"mask-division-by-zero") == 0) { *exception_mask = GSL_IEEE_MASK_DIVISION_BY_ZERO ; } else if (strcmp(p,"mask-overflow") == 0) { *exception_mask = GSL_IEEE_MASK_OVERFLOW ; } else if (strcmp(p,"mask-underflow") == 0) { *exception_mask = GSL_IEEE_MASK_UNDERFLOW ; } else if (strcmp(p,"trap-inexact") == 0) { *exception_mask = GSL_IEEE_TRAP_INEXACT ; } else if (strcmp(p,"trap-common") == 0) { return 0 ; } else { return 1 ; } return 0 ; } gsl/ieee-utils/Makefile.in0000664000175000017500000010706214057135461014045 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = ieee-utils ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslieeeutils_la_LIBADD = am_libgslieeeutils_la_OBJECTS = print.lo make_rep.lo env.lo fp.lo \ read.lo libgslieeeutils_la_OBJECTS = $(am_libgslieeeutils_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslieeeutils.la ../err/libgslerr.la \ ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/env.Plo ./$(DEPDIR)/fp.Plo \ ./$(DEPDIR)/make_rep.Plo ./$(DEPDIR)/print.Plo \ ./$(DEPDIR)/read.Plo ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslieeeutils_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslieeeutils_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslieeeutils.la pkginclude_HEADERS = gsl_ieee_utils.h libgslieeeutils_la_SOURCES = print.c make_rep.c gsl_ieee_utils.h env.c fp.c read.c noinst_HEADERS = fp-aix.c fp-darwin.c fp-darwin86.c fp-hpux.c fp-hpux11.c fp-irix.c fp-gnum68k.c fp-gnuppc.c fp-solaris.c fp-gnusparc.c fp-sunos4.c fp-tru64.c fp-unknown.c fp-gnux86.c fp-freebsd.c fp-os2emx.c fp-netbsd.c fp-openbsd.c fp-gnuc99.c endian.c standardize.c AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ieee-utils/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ieee-utils/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslieeeutils.la: $(libgslieeeutils_la_OBJECTS) $(libgslieeeutils_la_DEPENDENCIES) $(EXTRA_libgslieeeutils_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslieeeutils_la_OBJECTS) $(libgslieeeutils_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/env.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/make_rep.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/env.Plo -rm -f ./$(DEPDIR)/fp.Plo -rm -f ./$(DEPDIR)/make_rep.Plo -rm -f ./$(DEPDIR)/print.Plo -rm -f ./$(DEPDIR)/read.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/env.Plo -rm -f ./$(DEPDIR)/fp.Plo -rm -f ./$(DEPDIR)/make_rep.Plo -rm -f ./$(DEPDIR)/print.Plo -rm -f ./$(DEPDIR)/read.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/ieee-utils/fp-netbsd.c0000644000175000017500000000561013536674414014027 0ustar eddedd/* fp-netbsd.c * * Copyright (C) 2001 Jason Beegan * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { fp_except mode = 0; fp_rnd rnd = 0; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: GSL_ERROR ("NetBSD only supports default precision rounding", GSL_EUNSUP); break; case GSL_IEEE_DOUBLE_PRECISION: GSL_ERROR ("NetBSD only supports default precision rounding", GSL_EUNSUP); break; case GSL_IEEE_EXTENDED_PRECISION: GSL_ERROR ("NetBSD only supports default precision rounding", GSL_EUNSUP); break; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: rnd = FP_RN; fpsetround (rnd); break; case GSL_IEEE_ROUND_DOWN: rnd = FP_RM; fpsetround (rnd); break; case GSL_IEEE_ROUND_UP: rnd = FP_RP; fpsetround (rnd); break; case GSL_IEEE_ROUND_TO_ZERO: rnd = FP_RZ; fpsetround (rnd); break; default: rnd = FP_RN; fpsetround (rnd); } /* Turn on all available exceptions apart from 'inexact'. Denormalized operand exception not available on all platforms. */ mode = FP_X_INV | FP_X_DZ | FP_X_OFL | FP_X_UFL; #ifdef FP_X_DNML mode = mode | FP_X_DNML; #endif if (exception_mask & GSL_IEEE_MASK_INVALID) mode &= ~ FP_X_INV; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) { #ifdef FP_X_DNML mode &= ~ FP_X_DNML; #endif } else { #ifndef FP_X_DNML GSL_ERROR ("NetBSD does not support the denormalized operand exception on this platform. " "Use 'mask-denormalized' to work around this.", GSL_EUNSUP); #endif } if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode &= ~ FP_X_DZ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode &= ~ FP_X_OFL; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode &= ~ FP_X_UFL; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { mode |= FP_X_IMP; } else { mode &= ~ FP_X_IMP; } fpsetmask (mode); return GSL_SUCCESS; } gsl/ieee-utils/fp.c0000644000175000017500000000235413536674414012554 0ustar eddedd#include #if HAVE_GNUSPARC_IEEE_INTERFACE #include "fp-gnusparc.c" #elif HAVE_GNUM68K_IEEE_INTERFACE #include "fp-gnum68k.c" #elif HAVE_GNUPPC_IEEE_INTERFACE #include "fp-gnuppc.c" #elif HAVE_GNUX86_IEEE_INTERFACE #include "fp-gnux86.c" #elif HAVE_HPUX11_IEEE_INTERFACE #include "fp-hpux11.c" #elif HAVE_HPUX_IEEE_INTERFACE #include "fp-hpux.c" #elif HAVE_SUNOS4_IEEE_INTERFACE #include "fp-sunos4.c" #elif HAVE_SOLARIS_IEEE_INTERFACE #include "fp-solaris.c" #elif HAVE_IRIX_IEEE_INTERFACE #include "fp-irix.c" #elif HAVE_AIX_IEEE_INTERFACE #include "fp-aix.c" #elif HAVE_TRU64_IEEE_INTERFACE #include "fp-tru64.c" #elif HAVE_FREEBSD_IEEE_INTERFACE #include "fp-freebsd.c" #elif HAVE_OS2EMX_IEEE_INTERFACE #include "fp-os2emx.c" #elif HAVE_NETBSD_IEEE_INTERFACE #include "fp-netbsd.c" #elif HAVE_OPENBSD_IEEE_INTERFACE #include "fp-openbsd.c" /* Try to handle universal binaries */ #elif HAVE_DARWIN_IEEE_INTERFACE # if defined(__i386__) # include "fp-darwin86.c" #else # include "fp-darwin.c" # endif #elif HAVE_DARWIN86_IEEE_INTERFACE # if defined(__ppc__) # include "fp-darwin.c" # else # include "fp-darwin86.c" #endif #elif HAVE_DECL_FEENABLEEXCEPT || HAVE_DECL_FESETTRAPENABLE #include "fp-gnuc99.c" #else #include "fp-unknown.c" #endif gsl/ieee-utils/env.c0000644000175000017500000000613113536674414012734 0ustar eddedd/* ieee-utils/env.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include void gsl_ieee_env_setup (void) { const char * p = getenv("GSL_IEEE_MODE") ; int precision = 0, rounding = 0, exception_mask = 0 ; int comma = 0 ; #if defined( _MSC_VER ) extern const char *fp_env_string; if(p == 0 || *p == '\0') p = fp_env_string; #else if (p == 0) /* GSL_IEEE_MODE environment variable is not set */ return ; if (*p == '\0') /* GSL_IEEE_MODE environment variable is empty */ return ; #endif gsl_ieee_read_mode_string (p, &precision, &rounding, &exception_mask) ; gsl_ieee_set_mode (precision, rounding, exception_mask) ; fprintf(stderr, "GSL_IEEE_MODE=\"") ; /* Print string with a preceeding comma if the list has already begun */ #define PRINTC(x) do {if(comma) fprintf(stderr,","); fprintf(stderr,x); comma++ ;} while(0) switch (precision) { case GSL_IEEE_SINGLE_PRECISION: PRINTC("single-precision") ; break ; case GSL_IEEE_DOUBLE_PRECISION: PRINTC("double-precision") ; break ; case GSL_IEEE_EXTENDED_PRECISION: PRINTC("extended-precision") ; break ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: PRINTC("round-to-nearest") ; break ; case GSL_IEEE_ROUND_DOWN: PRINTC("round-down") ; break ; case GSL_IEEE_ROUND_UP: PRINTC("round-up") ; break ; case GSL_IEEE_ROUND_TO_ZERO: PRINTC("round-to-zero") ; break ; } if ((exception_mask & GSL_IEEE_MASK_ALL) == GSL_IEEE_MASK_ALL) { PRINTC("mask-all") ; } else if ((exception_mask & GSL_IEEE_MASK_ALL) == 0) { PRINTC("trap-common") ; } else { if (exception_mask & GSL_IEEE_MASK_INVALID) PRINTC("mask-invalid") ; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) PRINTC("mask-denormalized") ; if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) PRINTC("mask-division-by-zero") ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) PRINTC("mask-overflow") ; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) PRINTC("mask-underflow") ; } if (exception_mask & GSL_IEEE_TRAP_INEXACT) PRINTC("trap-inexact") ; fprintf(stderr,"\"\n") ; } gsl/ieee-utils/ChangeLog0000644000175000017500000001661213536674414013557 0ustar eddedd2010-11-06 Brian Gough * fp-aix.c: added workaround for AIX problems (D. Kirby) 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2007-06-21 Brian Gough * fp.c: allow universal binaries by checking __ppc__ and __i386__ preprocessor definitions on Darwin 2007-04-23 Brian Gough * fp-gnux86.c (gsl_ieee_set_mode): added support for MXCSR register 2005-02-11 Brian Gough * fp-gnuc99.c (gsl_ieee_set_mode): added an #ifdef for the default round to nearest mode 2003-12-20 Brian Gough * fp-gnuc99.c (_GNU_SOURCE): define _GNU_SOURCE when including fenv.h 2003-07-21 Brian Gough * read.c (gsl_ieee_read_mode_string): added missing mask-division-by-zero to error message 2003-06-14 Brian Gough * fp-m68klinux.c fp-ppclinux.c fp-sparclinux.c fp-x86linux.c: renamed to fp-gnum68k.c fp-gnuppc.c fp-gnusparc.c fp-gnux86.c since they are dependent on the GNU C Library interface rather than the kernel interface * fp-gnuc99.c: added a fallback to the C99 exception functions for cases where the operating system is not recognized Mon Aug 26 20:57:29 2002 Brian Gough * test.c: use system values for FLT_MIN, FLT_MAX, DBL_MIN, DBL_MAX Sat May 11 22:30:43 2002 Brian Gough * test.c (TEST_DENORMAL): test denormals only when available, as tested in configure script Mon Sep 10 14:23:52 2001 Brian Gough * fp-netbsd.c fp-openbsd.c (gsl_ieee_set_mode): tried to correct the logic for the denormalized exception. Tue Jul 10 13:10:12 2001 Brian Gough * env.c (gsl_ieee_env_setup): send GSL_IEEE_MODE output to stderr Tue Jun 26 10:44:13 2001 Brian Gough * fp-netbsd.c (gsl_ieee_set_mode): simplified, patch from Jason Beegan * fp-openbsd.c (gsl_ieee_set_mode): simplified Mon Jun 25 20:47:33 2001 Brian Gough * fp-openbsd.c (gsl_ieee_set_mode): added support for openbsd Tue May 8 10:49:58 2001 Brian Gough * fp-aix.c: changed macros from TRAP_ to TRP_.. Fri Apr 13 15:07:10 2001 Brian Gough * fp-darwin.c: added darwin support from Rodney Sparapani Wed Mar 28 13:12:20 2001 Brian Gough * fp-netbsd.c: added netbsd support from Jason Beegan Thu Mar 15 14:11:29 2001 Brian Gough * fp-hpux11.c: added support for HPUX11 Fri Mar 2 16:58:36 2001 Brian Gough * fp-os2emx.c: add ieee support for OS/2 from Henry Sobotka Thu Jul 20 19:41:56 2000 Brian Gough * fp-freebsd.c (gsl_ieee_set_mode): added fp-freebsd.c from Vladimir Kushnir Mon Jun 12 19:23:53 2000 Brian Gough * Makefile.am (noinst_HEADERS): added aix and irix to makefile * fp-x86linux.c (gsl_ieee_set_mode): Handle libc5, where _FPU_SETCW is not available, by defining the macro. Suggested by OKUJI Yoshinori Wed Jun 7 19:18:15 2000 Brian Gough * fp-ppclinux.c: added support for ppc linux Tue Jun 6 19:59:50 2000 Brian Gough * fp-x86linux.c: renamed from fp-linux.c Thu May 18 11:53:13 2000 Brian Gough * test.c: turned off tests for denormals on irix, since they are supported * fp.c: added IRIX and AIX to the top-level fp.c file -- somehow they had been forgotten! 2000-05-14 Steve Robbins * fp-tru64.c: include `/usr/include/float.h', if necessary for picking up FP_RND_RN and friends. Sun Apr 2 14:25:52 2000 Brian Gough * fp-m68klinux.c: added file for m68k support (not complete, some macros need to be checked) Thu Mar 16 15:34:08 2000 Brian Gough * read.c (gsl_ieee_read_mode_string): changed token separator to , instead of ; Thu Feb 24 19:20:50 2000 Brian Gough * fp-tru64.c (gsl_ieee_set_mode): added an #ifdef for IEEE_TRAP_ENABLE_DNO, which may or may not be defined depending on the version of Digital Unix. Mon Feb 14 14:03:22 2000 Brian Gough * made internal functions static and removed redundant functions Fri Nov 5 15:01:55 1999 Brian Gough * fp-sparclinux.c: added support for sparclinux Thu Oct 7 13:03:00 1999 Brian Gough * make_rep.c: more careful conversion from unsigned to signed integer for sign attribute to prevent warnings Sat Aug 21 01:05:01 1999 Tim Mooney * fp-aix.c: added, based on fp-solaris. Fri Aug 20 12:17:53 1999 Brian Gough * fp-tru64.c (gsl_ieee_set_mode): note that INEXACT is not easily supported on Tru64, and give an error if anyone tries to use it Wed Aug 18 21:36:01 1999 Tim Mooney * fp-irix.c: added, based on fp-solaris. IRIX 6 has a rounding and exception interface that is identical to Solaris, right down to the enums. Tue Aug 17 18:36:01 1999 Tim Mooney * fp-tru64.c: added, based on solaris and HP-UX fp-* files. Rounding mode and trap control requires that the compiler be passed special options, see the comments in fp-tru64.c. Fri Jul 23 19:00:51 1999 Brian Gough * print.c: added fprintf versions of the printf functions Sat May 8 20:39:28 1999 Brian Gough * fp-linux.c (gsl_ieee_set_mode): changed from using the function __fput_setcw() to the macro _FPU_SETCW() since Khimenko Victor reports that __setfpucw() is not in the shared lib version of glibc-2.1.1 Fri Apr 2 20:52:59 1999 Brian Gough * endian.c (setup_dynamic_endianness): removed useless test, u.c[i]<0 for unsigned Fri Aug 21 15:36:22 1998 Brian Gough * fp-unknown.c (gsl_ieee_set_mode): made return type int, as it should be Mon Jun 15 22:02:00 1998 Brian Gough * renamed read-mode-string.c to read.c and print-ieee.c to print.c Tue Jun 2 19:29:34 1998 Brian Gough * gsl_ieee_utils.h: renamed GSL_IEEE_CATCH_INEXACT to GSL_IEEE_TRAP_INEXACT, which is a better name Mon Jun 1 15:27:08 1998 Brian Gough * fp-sunos4.c: support for sunos4 IEEE interface * fp-solaris.c: support for solaris IEEE interface * renamed fp-mode-string.c to fp-env.c, in order to avoid short filename problems * added support for setting the IEEE mode from the environment variable GSL_IEEE_MODE (only works for the Linux kernel so far) Mon May 18 16:20:17 1998 Brian Gough * The determination of endianness is now done on each call instead of at configure time (autoconf complains about what would happen to the test if it were cross compiling). Ok, so it's a bit slower but this isn't a performance critical routine. Sat May 16 23:10:09 1998 Brian Gough * This directory contains some routines for examining IEEE format numbers at the bit level gsl/ieee-utils/standardize.c0000644000175000017500000000257613536674414014465 0ustar eddedd/* ieee-utils/standardize.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void make_float_bigendian (float * x); static void make_double_bigendian (double * x); static void make_float_bigendian (float * x) { union { float f; unsigned char b[4]; } u,v; u.f = *x ; v.b[0]=u.b[3] ; v.b[1]=u.b[2] ; v.b[2]=u.b[1] ; v.b[3]=u.b[0] ; *x=v.f ; } static void make_double_bigendian (double * x) { union { double d; unsigned char b[8]; } u,v; u.d = *x ; v.b[0]=u.b[7] ; v.b[1]=u.b[6] ; v.b[2]=u.b[5] ; v.b[3]=u.b[4] ; v.b[4]=u.b[3] ; v.b[5]=u.b[2] ; v.b[6]=u.b[1] ; v.b[7]=u.b[0] ; *x=v.d ; } gsl/ieee-utils/Makefile.am0000644000175000017500000000121413536674414014031 0ustar eddeddnoinst_LTLIBRARIES = libgslieeeutils.la pkginclude_HEADERS = gsl_ieee_utils.h libgslieeeutils_la_SOURCES = print.c make_rep.c gsl_ieee_utils.h env.c fp.c read.c noinst_HEADERS = fp-aix.c fp-darwin.c fp-darwin86.c fp-hpux.c fp-hpux11.c fp-irix.c fp-gnum68k.c fp-gnuppc.c fp-solaris.c fp-gnusparc.c fp-sunos4.c fp-tru64.c fp-unknown.c fp-gnux86.c fp-freebsd.c fp-os2emx.c fp-netbsd.c fp-openbsd.c fp-gnuc99.c endian.c standardize.c AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_LDADD = libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c gsl/ieee-utils/fp-gnum68k.c0000644000175000017500000000527313536674414014054 0ustar eddedd/* ieee-utils/fp-gnum68k.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { unsigned short mode = 0 ; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: mode |= _FPU_SINGLE ; break ; case GSL_IEEE_DOUBLE_PRECISION: mode |= _FPU_DOUBLE ; break ; case GSL_IEEE_EXTENDED_PRECISION: mode |= _FPU_EXTENDED ; break ; default: mode |= _FPU_EXTENDED ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: mode |= _FPU_RC_NEAREST ; break ; case GSL_IEEE_ROUND_DOWN: mode |= _FPU_RC_DOWN ; break ; case GSL_IEEE_ROUND_UP: mode |= _FPU_RC_UP ; break ; case GSL_IEEE_ROUND_TO_ZERO: mode |= _FPU_RC_ZERO ; break ; default: mode |= _FPU_RC_NEAREST ; } /* FIXME: I don't have documentation for the M68K so I'm not sure about the mapping of the exceptions below. Maybe someone who does know could correct this. */ if (exception_mask & GSL_IEEE_MASK_INVALID) mode |= _FPU_MASK_OPERR ; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) { /* do nothing */ } else { GSL_ERROR ("the denormalized operand exception has not been implemented for m68k yet. Use 'mask-denormalized' to work around this.", GSL_EUNSUP) ; /*mode |= _FPU_MASK_DM ; ???? */ } if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode |= _FPU_MASK_DZ ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode |= _FPU_MASK_OVFL ; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode |= _FPU_MASK_UNFL ; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { mode &= ~ (_FPU_MASK_INEX1 | _FPU_MASK_INEX2) ; } else { mode |= (_FPU_MASK_INEX1 | _FPU_MASK_INEX2) ; } _FPU_SETCW(mode) ; return GSL_SUCCESS ; } gsl/ieee-utils/fp-darwin.c0000644000175000017500000000555313536674414014042 0ustar eddedd/* ieee-utils/fp-darwin.c * * Copyright (C) 2001 Rodney Sparapani * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { ppc_fp_scr_t fp_scr = get_fp_scr() ; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: GSL_ERROR ("powerpc only supports default precision rounding", GSL_EUNSUP); break ; case GSL_IEEE_DOUBLE_PRECISION: GSL_ERROR ("powerpc only supports default precision rounding", GSL_EUNSUP); break ; case GSL_IEEE_EXTENDED_PRECISION: GSL_ERROR ("powerpc only supports default precision rounding", GSL_EUNSUP); break ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: fp_scr.rn = RN_NEAREST ; break ; case GSL_IEEE_ROUND_DOWN: fp_scr.rn = RN_TOWARD_MINUS ; break ; case GSL_IEEE_ROUND_UP: fp_scr.rn = RN_TOWARD_PLUS ; break ; case GSL_IEEE_ROUND_TO_ZERO: fp_scr.rn = RN_TOWARD_ZERO ; break ; default: fp_scr.rn = RN_NEAREST ; } if (exception_mask & GSL_IEEE_MASK_INVALID) fp_scr.ve = 0 ; //ve bit: invalid op exception enable if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) { /* do nothing */ } else { GSL_ERROR ("powerpc does not support the denormalized operand exception. " "Use 'mask-denormalized' to work around this.", GSL_EUNSUP) ; } if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) fp_scr.ze = 0 ; //ze bit: zero divide exception enable if (exception_mask & GSL_IEEE_MASK_OVERFLOW) fp_scr.oe = 0 ; //oe bit: overflow exception enable if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) fp_scr.ue = 0 ; //ue bit: underflow exception enable if (exception_mask & GSL_IEEE_TRAP_INEXACT) { fp_scr.xe = 1 ; //xe bit: inexact exception enable } else { fp_scr.xe = 01 ; } set_fp_scr(fp_scr); return GSL_SUCCESS ; } gsl/ieee-utils/fp-aix.c0000644000175000017500000000772013536674414013335 0ustar eddedd/* ieee-utils/fp-aix.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Tim Mooney * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* GCC uses a common float.h for all platforms, and ignores all vendor specific code in float.h. That causes problems with fprnd_t, FP_RND_RZ, FP_RND_RN and FP_RND_RP on AIX. Personally I consider that a bug, and was advised by a GCC developer to report this as a bug, which I did. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46155 However, there is not universal agreement whether this is a gcc bug, so the issue needs to be worked around on AIX. David Kirkby, 26th October 2010. */ #if !HAVE_DECL_FPRND_T typedef unsigned short fprnd_t; #endif #ifndef FP_RND_RZ #define FP_RND_RZ 0 #endif #ifndef FP_RND_RN #define FP_RND_RN 1 #endif #ifndef FP_RND_RP #define FP_RND_RP 2 #endif #ifndef FP_RND_RM #define FP_RND_RM 3 #endif int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { fptrap_t mode = 0 ; fprnd_t rnd = 0 ; switch (precision) { /* I'm not positive about AIX only supporting default precision rounding, * but this is the best assumption until it's proven otherwise. */ case GSL_IEEE_SINGLE_PRECISION: GSL_ERROR ("AIX only supports default precision rounding", GSL_EUNSUP) ; break ; case GSL_IEEE_DOUBLE_PRECISION: GSL_ERROR ("AIX only supports default precision rounding", GSL_EUNSUP) ; break ; case GSL_IEEE_EXTENDED_PRECISION: GSL_ERROR ("AIX only supports default precision rounding", GSL_EUNSUP) ; break ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: rnd = FP_RND_RN ; fp_swap_rnd (rnd) ; break ; case GSL_IEEE_ROUND_DOWN: rnd = FP_RND_RM ; fp_swap_rnd (rnd) ; break ; case GSL_IEEE_ROUND_UP: rnd = FP_RND_RP ; fp_swap_rnd (rnd) ; break ; case GSL_IEEE_ROUND_TO_ZERO: rnd = FP_RND_RZ ; fp_swap_rnd (rnd) ; break ; default: rnd = FP_RND_RN ; fp_swap_rnd (rnd) ; } /* Turn on all the exceptions apart from 'inexact' */ mode = TRP_INVALID | TRP_DIV_BY_ZERO | TRP_OVERFLOW | TRP_UNDERFLOW ; if (exception_mask & GSL_IEEE_MASK_INVALID) mode &= ~ TRP_INVALID ; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) { /* do nothing */ } else { GSL_ERROR ("AIX does not support the denormalized operand exception. " "Use 'mask-denormalized' to work around this.", GSL_EUNSUP) ; } if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode &= ~ TRP_DIV_BY_ZERO ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode &= ~ TRP_OVERFLOW ; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode &= ~ TRP_UNDERFLOW ; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { mode |= TRP_INEXACT ; } else { mode &= ~ TRP_INEXACT ; } /* AIX appears to require two steps -- first enable floating point traps * in general... */ fp_trap(FP_TRAP_SYNC); /* next, enable the traps we're interested in */ fp_enable(mode); return GSL_SUCCESS ; } gsl/ieee-utils/fp-os2emx.c0000644000175000017500000000452713536674414013773 0ustar eddedd/* ieee-utils/fp-os2.c * * Copyright (C) 2001 Henry Sobotka * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { unsigned mode = 0; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: _control87(PC_24, MCW_PC); break ; case GSL_IEEE_DOUBLE_PRECISION: _control87(PC_53, MCW_PC); break ; case GSL_IEEE_EXTENDED_PRECISION: _control87(PC_64, MCW_PC); break ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: _control87(RC_NEAR, MCW_RC); break ; case GSL_IEEE_ROUND_DOWN: _control87(RC_DOWN, MCW_RC); break ; case GSL_IEEE_ROUND_UP: _control87(RC_UP, MCW_RC); break ; case GSL_IEEE_ROUND_TO_ZERO: _control87(RC_CHOP, MCW_RC); break ; default: _control87(RC_NEAR, MCW_RC); } /* Turn on all the exceptions apart from 'inexact' */ mode = EM_INVALID | EM_DENORMAL | EM_ZERODIVIDE | EM_OVERFLOW | EM_UNDERFLOW; if (exception_mask & GSL_IEEE_MASK_INVALID) mode &= ~ EM_INVALID; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) mode &= ~ EM_DENORMAL; if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode &= ~ EM_ZERODIVIDE; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode &= ~ EM_OVERFLOW; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode &= ~ EM_UNDERFLOW; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { mode |= EM_INEXACT; } else { mode &= ~ EM_INEXACT; } _control87(mode, MCW_EM); return GSL_SUCCESS ; } gsl/ieee-utils/fp-hpux.c0000644000175000017500000000545713536674414013545 0ustar eddedd/* ieee-utils/fp-hpux.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { fp_except mode = 0 ; fp_rnd rnd = 0 ; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: GSL_ERROR ("HPUX PA-RISC only supports default precision rounding", GSL_EUNSUP) ; break ; case GSL_IEEE_DOUBLE_PRECISION: GSL_ERROR ("HPUX PA-RISC only supports default precision rounding", GSL_EUNSUP) ; break ; case GSL_IEEE_EXTENDED_PRECISION: GSL_ERROR ("HPUX PA-RISC only supports default precision rounding", GSL_EUNSUP) ; break ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: rnd = FP_RN ; fpsetround (rnd) ; break ; case GSL_IEEE_ROUND_DOWN: rnd = FP_RM ; fpsetround (rnd) ; break ; case GSL_IEEE_ROUND_UP: rnd = FP_RP ; fpsetround (rnd) ; break ; case GSL_IEEE_ROUND_TO_ZERO: rnd = FP_RZ ; fpsetround (rnd) ; break ; default: rnd = FP_RN ; fpsetround (rnd) ; } /* Turn on all the exceptions apart from 'inexact' */ mode = FP_X_INV | FP_X_DZ | FP_X_OFL | FP_X_UFL ; if (exception_mask & GSL_IEEE_MASK_INVALID) mode &= ~ FP_X_INV ; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) { /* do nothing */ } else { GSL_ERROR ("HP-UX does not support the denormalized operand exception. " "Use 'mask-denormalized' to work around this.", GSL_EUNSUP) ; } if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode &= ~ FP_X_DZ ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode &= ~ FP_X_OFL ; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode &= ~ FP_X_UFL ; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { mode |= FP_X_IMP ; } else { mode &= ~ FP_X_IMP ; } fpsetmask (mode) ; return GSL_SUCCESS ; } gsl/ieee-utils/fp-freebsd.c0000644000175000017500000000466013536674414014166 0ustar eddedd/* ieee-utils/fp-freebsd.c * * Copyright (C) 2000 Vladimir Kushnir * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { fp_prec_t prec = 0 ; fp_except_t mode = 0 ; fp_rnd_t rnd = 0 ; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: prec = FP_PS; fpsetprec(prec); break ; case GSL_IEEE_DOUBLE_PRECISION: prec = FP_PD; fpsetprec(prec); break ; case GSL_IEEE_EXTENDED_PRECISION: prec = FP_PE; fpsetprec(prec); break ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: rnd = FP_RN ; fpsetround (rnd) ; break ; case GSL_IEEE_ROUND_DOWN: rnd = FP_RM ; fpsetround (rnd) ; break ; case GSL_IEEE_ROUND_UP: rnd = FP_RP ; fpsetround (rnd) ; break ; case GSL_IEEE_ROUND_TO_ZERO: rnd = FP_RZ ; fpsetround (rnd) ; break ; default: rnd = FP_RN ; fpsetround (rnd) ; } /* Turn on all the exceptions apart from 'inexact' */ mode = FP_X_INV | FP_X_DNML | FP_X_DZ | FP_X_OFL | FP_X_UFL ; if (exception_mask & GSL_IEEE_MASK_INVALID) mode &= ~ FP_X_INV ; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) mode &= ~ FP_X_DNML ; if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode &= ~ FP_X_DZ ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode &= ~ FP_X_OFL ; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode &= ~ FP_X_UFL ; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { mode |= FP_X_IMP ; } else { mode &= ~ FP_X_IMP ; } fpsetmask (mode) ; return GSL_SUCCESS ; } gsl/ieee-utils/make_rep.c0000644000175000017500000001064713536674414013736 0ustar eddedd/* ieee-utils/make_rep.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include "endian.c" #include "standardize.c" static void sprint_nybble(int i, char *s) ; static void sprint_byte(int i, char *s) ; static int determine_ieee_type (int non_zero, int exponent, int max_exponent); /* For the IEEE float format the bits are found from the following masks, sign = 0x80000000 exponent = 0x7f800000 mantisssa = 0x007fffff For the IEEE double format the masks are, sign = 0x8000000000000000 exponent = 0x7ff0000000000000 mantissa = 0x000fffffffffffff */ void gsl_ieee_float_to_rep (const float * x, gsl_ieee_float_rep * r) { int e, non_zero; union { float f; struct { unsigned char byte[4] ; } ieee ; } u; u.f = *x ; if (little_endian_p()) make_float_bigendian(&(u.f)) ; /* note that r->sign is signed, u.ieee.byte is unsigned */ if (u.ieee.byte[3]>>7) { r->sign = 1 ; } else { r->sign = 0 ; } e = (u.ieee.byte[3] & 0x7f) << 1 | (u.ieee.byte[2] & 0x80)>>7 ; r->exponent = e - 127 ; sprint_byte((u.ieee.byte[2] & 0x7f) << 1,r->mantissa) ; sprint_byte(u.ieee.byte[1],r->mantissa + 7) ; sprint_byte(u.ieee.byte[0],r->mantissa + 15) ; r->mantissa[23] = '\0' ; non_zero = u.ieee.byte[0] || u.ieee.byte[1] || (u.ieee.byte[2] & 0x7f); r->type = determine_ieee_type (non_zero, e, 255) ; } void gsl_ieee_double_to_rep (const double * x, gsl_ieee_double_rep * r) { int e, non_zero; union { double d; struct { unsigned char byte[8]; } ieee ; } u; u.d= *x ; if (little_endian_p()) make_double_bigendian(&(u.d)) ; /* note that r->sign is signed, u.ieee.byte is unsigned */ if (u.ieee.byte[7]>>7) { r->sign = 1 ; } else { r->sign = 0 ; } e =(u.ieee.byte[7] & 0x7f)<<4 ^ (u.ieee.byte[6] & 0xf0)>>4 ; r->exponent = e - 1023 ; sprint_nybble(u.ieee.byte[6],r->mantissa) ; sprint_byte(u.ieee.byte[5],r->mantissa + 4) ; sprint_byte(u.ieee.byte[4],r->mantissa + 12) ; sprint_byte(u.ieee.byte[3],r->mantissa + 20) ; sprint_byte(u.ieee.byte[2],r->mantissa + 28) ; sprint_byte(u.ieee.byte[1],r->mantissa + 36) ; sprint_byte(u.ieee.byte[0],r->mantissa + 44) ; r->mantissa[52] = '\0' ; non_zero = (u.ieee.byte[0] || u.ieee.byte[1] || u.ieee.byte[2] || u.ieee.byte[3] || u.ieee.byte[4] || u.ieee.byte[5] || (u.ieee.byte[6] & 0x0f)) ; r->type = determine_ieee_type (non_zero, e, 2047) ; } /* A table of character representations of nybbles */ static char nybble[16][5]={ /* include space for the \0 */ "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" } ; static void sprint_nybble(int i, char *s) { char *c ; c=nybble[i & 0x0f ]; *s=c[0] ; *(s+1)=c[1] ; *(s+2)=c[2] ; *(s+3)=c[3] ; } static void sprint_byte(int i, char *s) { char *c ; c=nybble[(i & 0xf0)>>4]; *s=c[0] ; *(s+1)=c[1] ; *(s+2)=c[2] ; *(s+3)=c[3] ; c=nybble[i & 0x0f]; *(s+4)=c[0] ; *(s+5)=c[1] ; *(s+6)=c[2] ; *(s+7)=c[3] ; } static int determine_ieee_type (int non_zero, int exponent, int max_exponent) { if (exponent == max_exponent) { if (non_zero) { return GSL_IEEE_TYPE_NAN ; } else { return GSL_IEEE_TYPE_INF ; } } else if (exponent == 0) { if (non_zero) { return GSL_IEEE_TYPE_DENORMAL ; } else { return GSL_IEEE_TYPE_ZERO ; } } else { return GSL_IEEE_TYPE_NORMAL ; } } gsl/ieee-utils/endian.c0000644000175000017500000000216613536674414013406 0ustar eddedd/* ieee-utils/endian.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include static int little_endian_p (void) ; static int little_endian_p (void) { /* Are we little or big endian? From Harbison & Steele. */ union { long l; char c[sizeof (long)]; } u; u.l = 1; return (u.c[sizeof (long) - 1] == 1); } gsl/ieee-utils/fp-gnuc99.c0000644000175000017500000001046013536674414013665 0ustar eddedd/* ieee-utils/fp-gnuc99.c * * Copyright (C) 2003, 2004, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #define _GNU_SOURCE 1 #include #include #include #include #include int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { int mode; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: GSL_ERROR ("single precision rounding is not supported by ", GSL_EUNSUP) ; break ; case GSL_IEEE_DOUBLE_PRECISION: GSL_ERROR ("double precision rounding is not supported by ", GSL_EUNSUP) ; break ; case GSL_IEEE_EXTENDED_PRECISION: GSL_ERROR ("extended precision rounding is not supported by ", GSL_EUNSUP) ; break ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: #ifdef FE_TONEAREST fesetround (FE_TONEAREST) ; #else GSL_ERROR ("round-to-nearest is not supported by ", GSL_EUNSUP) ; #endif break ; case GSL_IEEE_ROUND_DOWN: #ifdef FE_DOWNWARD fesetround (FE_DOWNWARD) ; #else GSL_ERROR ("round-down is not supported by ", GSL_EUNSUP) ; #endif break ; case GSL_IEEE_ROUND_UP: #ifdef FE_UPWARD fesetround (FE_UPWARD) ; #else GSL_ERROR ("round-up is not supported by ", GSL_EUNSUP) ; #endif break ; case GSL_IEEE_ROUND_TO_ZERO: #ifdef FE_TOWARDZERO fesetround (FE_TOWARDZERO) ; #else GSL_ERROR ("round-toward-zero is not supported by ", GSL_EUNSUP) ; #endif break ; default: #ifdef FE_TONEAREST fesetround (FE_TONEAREST) ; #else GSL_ERROR ("default round-to-nearest mode is not supported by ", GSL_EUNSUP) ; #endif } /* Turn on all the exceptions apart from 'inexact' */ mode = 0; #ifdef FE_INVALID mode |= FE_INVALID; #endif #ifdef FE_DIVBYZERO mode |= FE_DIVBYZERO; #endif #ifdef FE_OVERFLOW mode |= FE_OVERFLOW ; #endif #ifdef FE_UNDERFLOW mode |= FE_UNDERFLOW ; #endif if (exception_mask & GSL_IEEE_MASK_INVALID) { #ifdef FE_INVALID mode &= ~ FE_INVALID ; #else GSL_ERROR ("invalid operation exception not supported by ", GSL_EUNSUP); #endif } if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) { /* do nothing */ } else { GSL_ERROR ("denormalized operand exception not supported by . " "Use 'mask-denormalized' to work around this.", GSL_EUNSUP) ; } if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) { #ifdef FE_DIVBYZERO mode &= ~ FE_DIVBYZERO ; #else GSL_ERROR ("division by zero exception not supported by ", GSL_EUNSUP); #endif } if (exception_mask & GSL_IEEE_MASK_OVERFLOW) { #ifdef FE_OVERFLOW mode &= ~ FE_OVERFLOW ; #else GSL_ERROR ("overflow exception not supported by ", GSL_EUNSUP); #endif } if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) { #ifdef FE_UNDERFLOW mode &= ~ FE_UNDERFLOW ; #else GSL_ERROR ("underflow exception not supported by ", GSL_EUNSUP); #endif } if (exception_mask & GSL_IEEE_TRAP_INEXACT) { #ifdef FE_INEXACT mode |= FE_INEXACT ; #else GSL_ERROR ("inexact exception not supported by ", GSL_EUNSUP); #endif } else { #ifdef FE_INEXACT mode &= ~ FE_INEXACT ; #else /* do nothing */ #endif } #if HAVE_DECL_FEENABLEEXCEPT feenableexcept (mode) ; #elif HAVE_DECL_FESETTRAPENABLE fesettrapenable (mode); #else GSL_ERROR ("unknown exception trap method", GSL_EUNSUP) #endif return GSL_SUCCESS ; } gsl/ieee-utils/fp-gnux86.c0000644000175000017500000000545613536674414013717 0ustar eddedd/* ieee-utils/fp-gnux86.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* Handle libc5, where _FPU_SETCW is not available, suggested by OKUJI Yoshinori and Evgeny Stambulchik */ #ifndef _FPU_SETCW #include #define _FPU_SETCW(cw) __setfpucw(cw) #endif int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { unsigned short mode = 0 ; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: mode |= _FPU_SINGLE ; break ; case GSL_IEEE_DOUBLE_PRECISION: mode |= _FPU_DOUBLE ; break ; case GSL_IEEE_EXTENDED_PRECISION: mode |= _FPU_EXTENDED ; break ; default: mode |= _FPU_EXTENDED ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: mode |= _FPU_RC_NEAREST ; break ; case GSL_IEEE_ROUND_DOWN: mode |= _FPU_RC_DOWN ; break ; case GSL_IEEE_ROUND_UP: mode |= _FPU_RC_UP ; break ; case GSL_IEEE_ROUND_TO_ZERO: mode |= _FPU_RC_ZERO ; break ; default: mode |= _FPU_RC_NEAREST ; } if (exception_mask & GSL_IEEE_MASK_INVALID) mode |= _FPU_MASK_IM ; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) mode |= _FPU_MASK_DM ; if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode |= _FPU_MASK_ZM ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode |= _FPU_MASK_OM ; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode |= _FPU_MASK_UM ; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { mode &= ~ _FPU_MASK_PM ; } else { mode |= _FPU_MASK_PM ; } _FPU_SETCW(mode) ; #if HAVE_FPU_X86_SSE #define _FPU_SETMXCSR(cw_sse) asm volatile ("ldmxcsr %0" : : "m" (*&cw_sse)) { unsigned int mode_sse = 0; mode_sse |= (mode & 0x3f)<<7; /* exception masks */ mode_sse |= (mode & 0xc00)<<3; /* rounding control */ _FPU_SETMXCSR(mode_sse); } #endif return GSL_SUCCESS ; } gsl/ieee-utils/fp-openbsd.c0000644000175000017500000000575113536674414014210 0ustar eddedd/* fp-openbsd.c * * Copyright (C) 2001 Jason Beegan * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* This is a copy of fp-netbsd.c, modified for openbsd by Toby White --- Brian Gough */ int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { fp_except mode = 0; fp_rnd rnd = 0; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: GSL_ERROR ("OpenBSD only supports default precision rounding", GSL_EUNSUP); break; case GSL_IEEE_DOUBLE_PRECISION: GSL_ERROR ("OpenBSD only supports default precision rounding", GSL_EUNSUP); break; case GSL_IEEE_EXTENDED_PRECISION: GSL_ERROR ("OpenBSD only supports default precision rounding", GSL_EUNSUP); break; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: rnd = FP_RN; fpsetround (rnd); break; case GSL_IEEE_ROUND_DOWN: rnd = FP_RM; fpsetround (rnd); break; case GSL_IEEE_ROUND_UP: rnd = FP_RP; fpsetround (rnd); break; case GSL_IEEE_ROUND_TO_ZERO: rnd = FP_RZ; fpsetround (rnd); break; default: rnd = FP_RN; fpsetround (rnd); } /* Turn on all available exceptions apart from 'inexact'. Denormalized operand exception not available on all platforms. */ mode = FP_X_INV | FP_X_DZ | FP_X_OFL | FP_X_UFL; #ifdef FP_X_DNML mode = mode | FP_X_DNML; #endif if (exception_mask & GSL_IEEE_MASK_INVALID) mode &= ~ FP_X_INV; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) { #ifdef FP_X_DNML mode &= ~ FP_X_DNML; #endif } else { #ifndef FP_X_DNML GSL_ERROR ("OpenBSD does not support the denormalized operand exception on this platform. " "Use 'mask-denormalized' to work around this.", GSL_EUNSUP); #endif } if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode &= ~ FP_X_DZ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode &= ~ FP_X_OFL; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode &= ~ FP_X_UFL; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { mode |= FP_X_IMP; } else { mode &= ~ FP_X_IMP; } fpsetmask (mode); return GSL_SUCCESS; } gsl/ieee-utils/print.c0000644000175000017500000000523413536674414013303 0ustar eddedd/* ieee-utils/print.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* A table of sign characters, 0=positive, 1=negative. We print a space instead of a unary + sign for compatibility with bc */ static char signs[2]={' ','-'} ; void gsl_ieee_fprintf_float (FILE * stream, const float * x) { gsl_ieee_float_rep r ; gsl_ieee_float_to_rep(x, &r) ; switch (r.type) { case GSL_IEEE_TYPE_NAN: fprintf(stream, "NaN") ; break ; case GSL_IEEE_TYPE_INF: fprintf(stream, "%cInf", signs[r.sign]) ; break ; case GSL_IEEE_TYPE_NORMAL: fprintf(stream, "%c1.%s*2^%d", signs[r.sign], r.mantissa, r.exponent) ; break ; case GSL_IEEE_TYPE_DENORMAL: fprintf(stream, "%c0.%s*2^%d", signs[r.sign], r.mantissa, r.exponent + 1) ; break ; case GSL_IEEE_TYPE_ZERO: fprintf(stream, "%c0", signs[r.sign]) ; break ; default: fprintf(stream, "[non-standard IEEE float]") ; } } void gsl_ieee_printf_float (const float * x) { gsl_ieee_fprintf_float (stdout,x); } void gsl_ieee_fprintf_double (FILE * stream, const double * x) { gsl_ieee_double_rep r ; gsl_ieee_double_to_rep (x, &r) ; switch (r.type) { case GSL_IEEE_TYPE_NAN: fprintf(stream, "NaN") ; break ; case GSL_IEEE_TYPE_INF: fprintf(stream, "%cInf", signs[r.sign]) ; break ; case GSL_IEEE_TYPE_NORMAL: fprintf(stream, "%c1.%s*2^%d", signs[r.sign], r.mantissa, r.exponent) ; break ; case GSL_IEEE_TYPE_DENORMAL: fprintf(stream, "%c0.%s*2^%d", signs[r.sign], r.mantissa, r.exponent + 1) ; break ; case GSL_IEEE_TYPE_ZERO: fprintf(stream, "%c0", signs[r.sign]) ; break ; default: fprintf(stream, "[non-standard IEEE double]") ; } } void gsl_ieee_printf_double (const double * x) { gsl_ieee_fprintf_double (stdout,x); } gsl/ieee-utils/fp-sunos4.c0000644000175000017500000000632213536674414014004 0ustar eddedd/* ieee-utils/fp-sunos4.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { char * out ; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: ieee_flags ("set", "precision", "single", out) ; break ; case GSL_IEEE_DOUBLE_PRECISION: ieee_flags ("set", "precision", "double", out) ; break ; case GSL_IEEE_EXTENDED_PRECISION: ieee_flags ("set", "precision", "extended", out) ; break ; default: ieee_flags ("set", "precision", "extended", out) ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: ieee_flags ("set", "direction", "nearest", out) ; break ; case GSL_IEEE_ROUND_DOWN: ieee_flags ("set", "direction", "negative", out) ; break ; case GSL_IEEE_ROUND_UP: ieee_flags ("set", "direction", "positive", out) ; break ; case GSL_IEEE_ROUND_TO_ZERO: ieee_flags ("set", "direction", "tozero", out) ; break ; default: ieee_flags ("set", "direction", "nearest", out) ; } if (exception_mask & GSL_IEEE_MASK_INVALID) { ieee_handler ("set", "invalid", SIGFPE_IGNORE) ; } else { ieee_handler ("set", "invalid", SIGFPE_ABORT) ; } if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) { ieee_handler ("set", "denormalized", SIGFPE_IGNORE) ; } else { GSL_ERROR ("sunos4 does not support the denormalized operand exception. " "Use 'mask-denormalized' to work around this.", GSL_EUNSUP) ; } if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) { ieee_handler ("set", "division", SIGFPE_IGNORE) ; } else { ieee_handler ("set", "division", SIGFPE_ABORT) ; } if (exception_mask & GSL_IEEE_MASK_OVERFLOW) { ieee_handler ("set", "overflow", SIGFPE_IGNORE) ; } else { ieee_handler ("set", "overflow", SIGFPE_ABORT) ; } if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) { ieee_handler ("set", "underflow", SIGFPE_IGNORE) ; } else { ieee_handler ("set", "underflow", SIGFPE_ABORT) ; } if (exception_mask & GSL_IEEE_TRAP_INEXACT) { ieee_handler ("set", "inexact", SIGFPE_ABORT) ; } else { ieee_handler ("set", "inexact", SIGFPE_IGNORE) ; } return GSL_SUCCESS ; } gsl/ieee-utils/fp-gnuppc.c0000644000175000017500000000533613536674414014051 0ustar eddedd/* ieee-utils/fp-gnuppc.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough, John Fisher * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* * Identical to fp-gnux86.c, except with references to * _FPU_SINGLE, _FPU_DOUBLE, _FPU_EXTENDED, _FPU_MASK_DM * and _FPU_MASK_PM converted to errors. */ int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { unsigned short mode = 0 ; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: GSL_ERROR ("powerpc only supports default precision rounding", GSL_EUNSUP); break ; case GSL_IEEE_DOUBLE_PRECISION: GSL_ERROR ("powerpc only supports default precision rounding", GSL_EUNSUP); break ; case GSL_IEEE_EXTENDED_PRECISION: GSL_ERROR ("powerpc only supports default precision rounding", GSL_EUNSUP); break ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: mode |= _FPU_RC_NEAREST ; break ; case GSL_IEEE_ROUND_DOWN: mode |= _FPU_RC_DOWN ; break ; case GSL_IEEE_ROUND_UP: mode |= _FPU_RC_UP ; break ; case GSL_IEEE_ROUND_TO_ZERO: mode |= _FPU_RC_ZERO ; break ; default: mode |= _FPU_RC_NEAREST ; } if (exception_mask & GSL_IEEE_MASK_INVALID) mode |= _FPU_MASK_IM ; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) { /* do nothing */ } else { GSL_ERROR ("powerpc does not support the denormalized operand exception. " "Use 'mask-denormalized' to work around this.", GSL_EUNSUP) ; } if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode |= _FPU_MASK_ZM ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode |= _FPU_MASK_OM ; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode |= _FPU_MASK_UM ; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { GSL_ERROR ("powerpc does not support traps for inexact operations", GSL_EUNSUP) ; } _FPU_SETCW(mode) ; return GSL_SUCCESS ; } gsl/ieee-utils/fp-unknown.c0000644000175000017500000000213113536674414014242 0ustar eddedd/* ieee-utils/fp-unknown.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { GSL_ERROR ( "the IEEE interface for this platform is unsupported or could not be " "determined at configure time\n", GSL_EUNSUP) ; } gsl/ieee-utils/fp-gnusparc.c0000644000175000017500000000466213536674414014400 0ustar eddedd/* ieee-utils/fp-gnusparc.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { unsigned short mode = 0 ; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: mode |= _FPU_SINGLE ; break ; case GSL_IEEE_DOUBLE_PRECISION: mode |= _FPU_DOUBLE ; break ; case GSL_IEEE_EXTENDED_PRECISION: mode |= _FPU_EXTENDED ; break ; default: mode |= _FPU_EXTENDED ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: mode |= _FPU_RC_NEAREST ; break ; case GSL_IEEE_ROUND_DOWN: mode |= _FPU_RC_DOWN ; break ; case GSL_IEEE_ROUND_UP: mode |= _FPU_RC_UP ; break ; case GSL_IEEE_ROUND_TO_ZERO: mode |= _FPU_RC_ZERO ; break ; default: mode |= _FPU_RC_NEAREST ; } if (exception_mask & GSL_IEEE_MASK_INVALID) mode |= _FPU_MASK_IM ; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) { /* do nothing */ } else { GSL_ERROR ("sparc does not support the denormalized operand exception. " "Use 'mask-denormalized' to work around this.", GSL_EUNSUP) ; } if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode |= _FPU_MASK_ZM ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode |= _FPU_MASK_OM ; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode |= _FPU_MASK_UM ; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { mode &= ~ _FPU_MASK_PM ; } else { mode |= _FPU_MASK_PM ; } _FPU_SETCW(mode) ; return GSL_SUCCESS ; } gsl/ieee-utils/fp-hpux11.c0000644000175000017500000000536513536674414013705 0ustar eddedd/* ieee-utils/fp-hpux11.c * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { int mode; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: GSL_ERROR ("HPUX PA-RISC only supports default precision rounding", GSL_EUNSUP) ; break ; case GSL_IEEE_DOUBLE_PRECISION: GSL_ERROR ("HPUX PA-RISC only supports default precision rounding", GSL_EUNSUP) ; break ; case GSL_IEEE_EXTENDED_PRECISION: GSL_ERROR ("HPUX PA-RISC only supports default precision rounding", GSL_EUNSUP) ; break ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: fesetround (FE_TONEAREST) ; break ; case GSL_IEEE_ROUND_DOWN: fesetround (FE_DOWNWARD) ; break ; case GSL_IEEE_ROUND_UP: fesetround (FE_UPWARD) ; break ; case GSL_IEEE_ROUND_TO_ZERO: fesetround (FE_TOWARDZERO) ; break ; default: fesetround (FE_TONEAREST) ; } /* Turn on all the exceptions apart from 'inexact' */ mode = FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW ; if (exception_mask & GSL_IEEE_MASK_INVALID) mode &= ~ FE_INVALID ; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) { /* do nothing */ } else { GSL_ERROR ("HP-UX does not support the denormalized operand exception. " "Use 'mask-denormalized' to work around this.", GSL_EUNSUP) ; } if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode &= ~ FE_DIVBYZERO ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode &= ~ FE_OVERFLOW ; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode &= ~ FE_UNDERFLOW ; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { mode |= FE_INEXACT ; } else { mode &= ~ FE_INEXACT ; } fesettrapenable (mode) ; return GSL_SUCCESS ; } gsl/ieee-utils/TODO0000644000175000017500000000016413536674414012470 0ustar eddedd# -*- org -*- #+CATEGORY: ieee-utils * Fix up ieee-utils/fp-m68klinux.c for correct behavior and actually test it. gsl/ieee-utils/fp-tru64.c0000644000175000017500000001317713536674414013543 0ustar eddedd/* ieee-utils/fp-tru64.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Tim Mooney * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Under Compaq's Unix with the silly name, read the man pages for read_rnd, * write_rnd, and ieee(3) for more information on the functions used here. * * Note that enabling control of dynamic rounding mode (via write_rnd) requires * that you pass a special flag to your C compiler. For Compaq's C compiler * the flag is `-fprm d', for gcc it's `-mfp-rounding-mode=d'. * * Enabling the trap control (via ieee_set_fp_control) also requires a * flag be passed to the C compiler. The flag for Compaq's C compiler * is `-ieee' and for gcc it's `-mieee'. * We have not implemented the `inexact' case, since it is rarely used * and requires the library being built with an additional compiler * flag that can degrade performance for everything else. If you need * to add support for `inexact' the relevant flag for Compaq's * compiler is `-ieee_with_inexact', and the flag for gcc is * `-mieee-with-inexact'. * * Problem have been reported with the "fixed" float.h installed with * gcc-2.95 lacking some of the definitions in the system float.h (the * symptoms are errors like: `FP_RND_RN' undeclared). To work around * this we can include the system float.h before the gcc version, e.g. * * #include "/usr/include/float.h" * #include */ #include #ifndef FP_RND_RN # undef _FLOAT_H_ # include "/usr/include/float.h" # undef _FLOAT_H_ # include #endif #include #include #include #include int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { unsigned long int mode = 0 ; unsigned int rnd = 0 ; /* I'm actually not completely sure that the alpha only supports default * precisions rounding, but I couldn't find any information regarding this, so * it seems safe to assume this for now until it's proven otherwise. */ switch (precision) { case GSL_IEEE_SINGLE_PRECISION: GSL_ERROR ("Tru64 Unix on the alpha only supports default precision rounding", GSL_EUNSUP) ; break ; case GSL_IEEE_DOUBLE_PRECISION: GSL_ERROR ("Tru64 Unix on the alpha only supports default precision rounding", GSL_EUNSUP) ; break ; case GSL_IEEE_EXTENDED_PRECISION: GSL_ERROR ("Tru64 Unix on the alpha only supports default precision rounding", GSL_EUNSUP) ; break ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: rnd = FP_RND_RN ; write_rnd (rnd) ; break ; case GSL_IEEE_ROUND_DOWN: rnd = FP_RND_RM ; write_rnd (rnd) ; break ; case GSL_IEEE_ROUND_UP: rnd = FP_RND_RP ; write_rnd (rnd) ; break ; case GSL_IEEE_ROUND_TO_ZERO: rnd = FP_RND_RZ ; write_rnd (rnd) ; break ; default: rnd = FP_RND_RN ; write_rnd (rnd) ; } /* Turn on all the exceptions apart from 'inexact' */ /* from the ieee(3) man page: * IEEE_TRAP_ENABLE_INV -> Invalid operation * IEEE_TRAP_ENABLE_DZE -> Divide by 0 * IEEE_TRAP_ENABLE_OVF -> Overflow * IEEE_TRAP_ENABLE_UNF -> Underflow * IEEE_TRAP_ENABLE_INE -> Inexact (requires special option to C compiler) * IEEE_TRAP_ENABLE_DNO -> denormal operand * Note: IEEE_TRAP_ENABLE_DNO is not supported on OSF 3.x or Digital Unix * 4.0 - 4.0d(?). * IEEE_TRAP_ENABLE_MASK -> mask of all the trap enables * IEEE_MAP_DMZ -> map denormal inputs to zero * IEEE_MAP_UMZ -> map underflow results to zero */ mode = IEEE_TRAP_ENABLE_INV | IEEE_TRAP_ENABLE_DZE | IEEE_TRAP_ENABLE_OVF | IEEE_TRAP_ENABLE_UNF ; if (exception_mask & GSL_IEEE_MASK_INVALID) mode &= ~ IEEE_TRAP_ENABLE_INV ; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) { #ifdef IEEE_TRAP_ENABLE_DNO mode &= ~ IEEE_TRAP_ENABLE_DNO ; #else GSL_ERROR ("Sorry, this version of Digital Unix does not support denormalized operands", GSL_EUNSUP) ; #endif } if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode &= ~ IEEE_TRAP_ENABLE_DZE ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode &= ~ IEEE_TRAP_ENABLE_OVF ; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode &= ~ IEEE_TRAP_ENABLE_UNF ; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { /* To implement this would require a special flag to the C compiler which can cause degraded performance */ GSL_ERROR ("Sorry, GSL does not implement trap-inexact for Tru64 Unix on the alpha - see fp-tru64.c for details", GSL_EUNSUP) ; /* In case you need to add it, the appropriate line would be * * mode |= IEEE_TRAP_ENABLE_INE ; * */ } else { mode &= ~ IEEE_TRAP_ENABLE_INE ; } ieee_set_fp_control (mode) ; return GSL_SUCCESS ; } gsl/ieee-utils/fp-irix.c0000644000175000017500000000542013536674414013522 0ustar eddedd/* ieee-utils/fp-irix.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Tim Mooney * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { fp_except mode = 0 ; fp_rnd rnd = 0 ; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: GSL_ERROR ("IRIX only supports default precision rounding", GSL_EUNSUP) ; break ; case GSL_IEEE_DOUBLE_PRECISION: GSL_ERROR ("IRIX only supports default precision rounding", GSL_EUNSUP) ; break ; case GSL_IEEE_EXTENDED_PRECISION: GSL_ERROR ("IRIX only supports default precision rounding", GSL_EUNSUP) ; break ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: rnd = FP_RN ; fpsetround (rnd) ; break ; case GSL_IEEE_ROUND_DOWN: rnd = FP_RM ; fpsetround (rnd) ; break ; case GSL_IEEE_ROUND_UP: rnd = FP_RP ; fpsetround (rnd) ; break ; case GSL_IEEE_ROUND_TO_ZERO: rnd = FP_RZ ; fpsetround (rnd) ; break ; default: rnd = FP_RN ; fpsetround (rnd) ; } /* Turn on all the exceptions apart from 'inexact' */ mode = FP_X_INV | FP_X_DZ | FP_X_OFL | FP_X_UFL ; if (exception_mask & GSL_IEEE_MASK_INVALID) mode &= ~ FP_X_INV ; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) { /* do nothing */ } else { GSL_ERROR ("IRIX does not support the denormalized operand exception. " "Use 'mask-denormalized' to work around this.", GSL_EUNSUP) ; } if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode &= ~ FP_X_DZ ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode &= ~ FP_X_OFL ; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode &= ~ FP_X_UFL ; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { mode |= FP_X_IMP ; } else { mode &= ~ FP_X_IMP ; } fpsetmask (mode) ; return GSL_SUCCESS ; } gsl/ieee-utils/fp-solaris.c0000644000175000017500000000544613536674414014233 0ustar eddedd/* ieee-utils/fp-solaris.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { fp_except mode = 0 ; fp_rnd rnd = 0 ; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: GSL_ERROR ("solaris only supports default precision rounding", GSL_EUNSUP) ; break ; case GSL_IEEE_DOUBLE_PRECISION: GSL_ERROR ("solaris only supports default precision rounding", GSL_EUNSUP) ; break ; case GSL_IEEE_EXTENDED_PRECISION: GSL_ERROR ("solaris only supports default precision rounding", GSL_EUNSUP) ; break ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: rnd = FP_RN ; fpsetround (rnd) ; break ; case GSL_IEEE_ROUND_DOWN: rnd = FP_RM ; fpsetround (rnd) ; break ; case GSL_IEEE_ROUND_UP: rnd = FP_RP ; fpsetround (rnd) ; break ; case GSL_IEEE_ROUND_TO_ZERO: rnd = FP_RZ ; fpsetround (rnd) ; break ; default: rnd = FP_RN ; fpsetround (rnd) ; } /* Turn on all the exceptions apart from 'inexact' */ mode = FP_X_INV | FP_X_DZ | FP_X_OFL | FP_X_UFL ; if (exception_mask & GSL_IEEE_MASK_INVALID) mode &= ~ FP_X_INV ; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) { /* do nothing */ } else { GSL_ERROR ("solaris does not support the denormalized operand exception. " "Use 'mask-denormalized' to work around this.", GSL_EUNSUP) ; } if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode &= ~ FP_X_DZ ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode &= ~ FP_X_OFL ; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode &= ~ FP_X_UFL ; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { mode |= FP_X_IMP ; } else { mode &= ~ FP_X_IMP ; } fpsetmask (mode) ; return GSL_SUCCESS ; } gsl/ieee-utils/test.c0000644000175000017500000003510513536674414013126 0ustar eddedd/* ieee-utils/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #if HAVE_IRIX_IEEE_INTERFACE /* don't test denormals on IRIX */ #else #if HAVE_IEEE_DENORMALS #define TEST_DENORMAL 1 #endif #endif #ifndef FLT_MIN #define FLT_MIN 1.17549435e-38f #endif #ifndef FLT_MAX #define FLT_MAX 3.40282347e+38f #endif #ifndef DBL_MIN #define DBL_MIN 2.2250738585072014e-308 #endif #ifndef DBL_MAX #define DBL_MAX 1.7976931348623157e+308 #endif int main (void) { float zerof = 0.0f, minus_onef = -1.0f ; double zero = 0.0, minus_one = -1.0 ; /* Check for +ZERO (float) */ { float f = 0.0f; const char mantissa[] = "00000000000000000000000"; gsl_ieee_float_rep r; gsl_ieee_float_to_rep (&f, &r); gsl_test_int (r.sign, 0, "float x = 0, sign is +"); gsl_test_int (r.exponent, -127, "float x = 0, exponent is -127"); gsl_test_str (r.mantissa, mantissa, "float x = 0, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_ZERO, "float x = 0, type is ZERO"); } /* Check for -ZERO (float) */ { float f = minus_onef; const char mantissa[] = "00000000000000000000000"; gsl_ieee_float_rep r; while (f < 0) { f *= 0.1f; } gsl_ieee_float_to_rep (&f, &r); gsl_test_int (r.sign, 1, "float x = -1*0, sign is -"); gsl_test_int (r.exponent, -127, "float x = -1*0, exponent is -127"); gsl_test_str (r.mantissa, mantissa, "float x = -1*0, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_ZERO, "float x = -1*0, type is ZERO"); } /* Check for a positive NORMAL number (e.g. 2.1) (float) */ { float f = 2.1f; const char mantissa[] = "00001100110011001100110"; gsl_ieee_float_rep r; gsl_ieee_float_to_rep (&f, &r); gsl_test_int (r.sign, 0, "float x = 2.1, sign is +"); gsl_test_int (r.exponent, 1, "float x = 2.1, exponent is 1"); gsl_test_str (r.mantissa, mantissa, "float x = 2.1, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_NORMAL, "float x = 2.1, type is NORMAL"); } /* Check for a negative NORMAL number (e.g. -1.3304...) (float) */ { float f = -1.3303577090924210f ; const char mantissa[] = "01010100100100100101001"; gsl_ieee_float_rep r; gsl_ieee_float_to_rep (&f, &r); gsl_test_int (r.sign, 1, "float x = -1.3304..., sign is -"); gsl_test_int (r.exponent, 0, "float x = -1.3304..., exponent is 0"); gsl_test_str (r.mantissa, mantissa, "float x = -1.3304..., mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_NORMAL, "float x = -1.3304..., type is NORMAL"); } /* Check for a large positive NORMAL number (e.g. 3.37e31) (float) */ { float f = 3.37e31f; const char mantissa[] = "10101001010110101001001"; gsl_ieee_float_rep r; gsl_ieee_float_to_rep (&f, &r); gsl_test_int (r.sign, 0, "float x = 3.37e31, sign is +"); gsl_test_int (r.exponent, 104, "float x = 3.37e31, exponent is 104"); gsl_test_str (r.mantissa, mantissa, "float x = 3.37e31, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_NORMAL, "float x = 3.37e31, type is NORMAL"); } /* Check for a small positive NORMAL number (e.g. 3.37e-31) (float) */ { float f = 3.37e-31f; const char mantissa[] = "10110101011100110111011"; gsl_ieee_float_rep r; gsl_ieee_float_to_rep (&f, &r); gsl_test_int (r.sign, 0, "float x = 3.37e-31, sign is +"); gsl_test_int (r.exponent, -102, "float x = 3.37e-31, exponent is -102"); gsl_test_str (r.mantissa, mantissa, "float x = 3.37e-31, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_NORMAL, "float x = 3.37e-31, type is NORMAL"); } /* Check for FLT_MIN (smallest possible number that is not denormal) */ { float f = FLT_MIN; const char mantissa[] = "00000000000000000000000"; gsl_ieee_float_rep r; gsl_ieee_float_to_rep (&f, &r); gsl_test_int (r.sign, 0, "float x = FLT_MIN, sign is +"); gsl_test_int (r.exponent, -126, "float x = FLT_MIN, exponent is -126"); gsl_test_str (r.mantissa, mantissa, "float x = FLT_MIN, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_NORMAL, "float x = FLT_MIN, type is NORMAL"); } /* Check for FLT_MAX (largest possible number that is not Inf) */ { float f = FLT_MAX; const char mantissa[] = "11111111111111111111111"; gsl_ieee_float_rep r; gsl_ieee_float_to_rep (&f, &r); gsl_test_int (r.sign, 0, "float x = FLT_MAX, sign is +"); gsl_test_int (r.exponent, 127, "float x = FLT_MAX, exponent is 127"); gsl_test_str (r.mantissa, mantissa, "float x = FLT_MAX, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_NORMAL, "float x = FLT_MAX, type is NORMAL"); } /* Check for DENORMAL numbers (e.g. FLT_MIN/2^n) */ #ifdef TEST_DENORMAL { float f = FLT_MIN; char mantissa[] = "10000000000000000000000"; int i; gsl_ieee_float_rep r; for (i = 0; i < 23; i++) { float x = f / (float)pow (2.0, 1 + (float) i); mantissa[i] = '1'; gsl_ieee_float_to_rep (&x, &r); gsl_test_int (r.sign, 0, "float x = FLT_MIN/2^%d, sign is +", i + 1); gsl_test_int (r.exponent, -127, "float x = FLT_MIN/2^%d, exponent is -127", i + 1); gsl_test_str (r.mantissa, mantissa, "float x = FLT_MIN/2^%d, mantissa", i + 1); gsl_test_int (r.type, GSL_IEEE_TYPE_DENORMAL, "float x = FLT_MIN/2^%d, type is DENORMAL", i + 1); mantissa[i] = '0'; } } #endif /* Check for positive INFINITY (e.g. 2*FLT_MAX) */ { float f = FLT_MAX; const char mantissa[] = "00000000000000000000000"; gsl_ieee_float_rep r; float x; x = 2 * f; gsl_ieee_float_to_rep (&x, &r); gsl_test_int (r.sign, 0, "float x = 2*FLT_MAX, sign is +"); gsl_test_int (r.exponent, 128, "float x = 2*FLT_MAX, exponent is 128"); gsl_test_str (r.mantissa, mantissa, "float x = 2*FLT_MAX, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_INF, "float x = -2*FLT_MAX, type is INF"); } /* Check for negative INFINITY (e.g. -2*FLT_MAX) */ { float f = FLT_MAX; const char mantissa[] = "00000000000000000000000"; gsl_ieee_float_rep r; float x; x = -2 * f; gsl_ieee_float_to_rep (&x, &r); gsl_test_int (r.sign, 1, "float x = -2*FLT_MAX, sign is -"); gsl_test_int (r.exponent, 128, "float x = -2*FLT_MAX, exponent is 128"); gsl_test_str (r.mantissa, mantissa, "float x = -2*FLT_MAX, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_INF, "float x = -2*FLT_MAX, type is INF"); } /* Check for NAN (e.g. Inf - Inf) (float) */ { gsl_ieee_float_rep r; float x = 1.0f, y = 2.0f, z = zerof; x = x / z; y = y / z; z = y - x; gsl_ieee_float_to_rep (&z, &r); /* We don't check the sign and we don't check the mantissa because they could be anything for a NaN */ gsl_test_int (r.exponent, 128, "float x = NaN, exponent is 128"); gsl_test_int (r.type, GSL_IEEE_TYPE_NAN, "float x = NaN, type is NAN"); } /* Check for +ZERO */ { double d = 0.0; const char mantissa[] = "0000000000000000000000000000000000000000000000000000"; gsl_ieee_double_rep r; gsl_ieee_double_to_rep (&d, &r); gsl_test_int (r.sign, 0, "double x = 0, sign is +"); gsl_test_int (r.exponent, -1023, "double x = 0, exponent is -1023"); gsl_test_str (r.mantissa, mantissa, "double x = 0, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_ZERO, "double x = 0, type is ZERO"); } /* Check for -ZERO */ { double d = minus_one; const char mantissa[] = "0000000000000000000000000000000000000000000000000000"; gsl_ieee_double_rep r; while (d < 0) { d *= 0.1; } gsl_ieee_double_to_rep (&d, &r); gsl_test_int (r.sign, 1, "double x = -1*0, sign is -"); gsl_test_int (r.exponent, -1023, "double x = -1*0, exponent is -1023"); gsl_test_str (r.mantissa, mantissa, "double x = -1*0, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_ZERO, "double x = -1*0, type is ZERO"); } /* Check for a positive NORMAL number (e.g. 2.1) */ { double d = 2.1; const char mantissa[] = "0000110011001100110011001100110011001100110011001101"; gsl_ieee_double_rep r; gsl_ieee_double_to_rep (&d, &r); gsl_test_int (r.sign, 0, "double x = 2.1, sign is +"); gsl_test_int (r.exponent, 1, "double x = 2.1, exponent is 1"); gsl_test_str (r.mantissa, mantissa, "double x = 2.1, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_NORMAL, "double x = 2.1, type is NORMAL"); } /* Check for a negative NORMAL number (e.g. -1.3304...) */ { double d = -1.3303577090924210146738460025517269968986511230468750; const char mantissa[] = "0101010010010010010100101010010010001000100011101110"; gsl_ieee_double_rep r; gsl_ieee_double_to_rep (&d, &r); gsl_test_int (r.sign, 1, "double x = -1.3304..., sign is -"); gsl_test_int (r.exponent, 0, "double x = -1.3304..., exponent is 0"); gsl_test_str (r.mantissa, mantissa, "double x = -1.3304..., mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_NORMAL, "double x = -1.3304..., type is NORMAL"); } /* Check for a large positive NORMAL number (e.g. 3.37e297) */ { double d = 3.37e297; const char mantissa[] = "0100100111001001100101111001100000100110011101000100"; gsl_ieee_double_rep r; gsl_ieee_double_to_rep (&d, &r); gsl_test_int (r.sign, 0, "double x = 3.37e297, sign is +"); gsl_test_int (r.exponent, 988, "double x = 3.37e297, exponent is 998"); gsl_test_str (r.mantissa, mantissa, "double x = 3.37e297, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_NORMAL, "double x = 3.37e297, type is NORMAL"); } /* Check for a small positive NORMAL number (e.g. 3.37e-297) */ { double d = 3.37e-297; const char mantissa[] = "0001101000011011101011100001110010100001001100110111"; gsl_ieee_double_rep r; gsl_ieee_double_to_rep (&d, &r); gsl_test_int (r.sign, 0, "double x = 3.37e-297, sign is +"); gsl_test_int (r.exponent, -985, "double x = 3.37e-297, exponent is -985"); gsl_test_str (r.mantissa, mantissa, "double x = 3.37e-297, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_NORMAL, "double x = 3.37e-297, type is NORMAL"); } /* Check for DBL_MIN (smallest possible number that is not denormal) */ { double d = DBL_MIN; const char mantissa[] = "0000000000000000000000000000000000000000000000000000"; gsl_ieee_double_rep r; gsl_ieee_double_to_rep (&d, &r); gsl_test_int (r.sign, 0, "double x = DBL_MIN, sign is +"); gsl_test_int (r.exponent, -1022, "double x = DBL_MIN, exponent is -1022"); gsl_test_str (r.mantissa, mantissa, "double x = DBL_MIN, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_NORMAL, "double x = DBL_MIN, type is NORMAL"); } /* Check for DBL_MAX (largest possible number that is not Inf) */ { double d = DBL_MAX; const char mantissa[] = "1111111111111111111111111111111111111111111111111111"; gsl_ieee_double_rep r; gsl_ieee_double_to_rep (&d, &r); gsl_test_int (r.sign, 0, "double x = DBL_MAX, sign is +"); gsl_test_int (r.exponent, 1023, "double x = DBL_MAX, exponent is 1023"); gsl_test_str (r.mantissa, mantissa, "double x = DBL_MAX, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_NORMAL, "double x = DBL_MAX, type is NORMAL"); } /* Check for DENORMAL numbers (e.g. DBL_MIN/2^n) */ #ifdef TEST_DENORMAL { double d = DBL_MIN; char mantissa[] = "1000000000000000000000000000000000000000000000000000"; int i; gsl_ieee_double_rep r; for (i = 0; i < 52; i++) { double x = d / pow (2.0, 1 + (double) i); mantissa[i] = '1'; gsl_ieee_double_to_rep (&x, &r); gsl_test_int (r.sign, 0, "double x = DBL_MIN/2^%d, sign is +", i + 1); gsl_test_int (r.exponent, -1023, "double x = DBL_MIN/2^%d, exponent", i + 1); gsl_test_str (r.mantissa, mantissa, "double x = DBL_MIN/2^%d, mantissa", i + 1); gsl_test_int (r.type, GSL_IEEE_TYPE_DENORMAL, "double x = DBL_MIN/2^%d, type is DENORMAL", i + 1); mantissa[i] = '0'; } } #endif /* Check for positive INFINITY (e.g. 2*DBL_MAX) */ { double d = DBL_MAX; const char mantissa[] = "0000000000000000000000000000000000000000000000000000"; gsl_ieee_double_rep r; double x; x = 2.0 * d; gsl_ieee_double_to_rep (&x, &r); gsl_test_int (r.sign, 0, "double x = 2*DBL_MAX, sign is +"); gsl_test_int (r.exponent, 1024, "double x = 2*DBL_MAX, exponent is 1024"); gsl_test_str (r.mantissa, mantissa, "double x = 2*DBL_MAX, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_INF, "double x = 2*DBL_MAX, type is INF"); } /* Check for negative INFINITY (e.g. -2*DBL_MAX) */ { double d = DBL_MAX; const char mantissa[] = "0000000000000000000000000000000000000000000000000000"; gsl_ieee_double_rep r; double x; x = -2.0 * d; gsl_ieee_double_to_rep (&x, &r); gsl_test_int (r.sign, 1, "double x = -2*DBL_MAX, sign is -"); gsl_test_int (r.exponent, 1024, "double x = -2*DBL_MAX, exponent is 1024"); gsl_test_str (r.mantissa, mantissa, "double x = -2*DBL_MAX, mantissa"); gsl_test_int (r.type, GSL_IEEE_TYPE_INF,"double x = -2*DBL_MAX, type is INF"); } /* Check for NAN (e.g. Inf - Inf) */ { gsl_ieee_double_rep r; double x = 1.0, y = 2.0, z = zero; x = x / z; y = y / z; z = y - x; gsl_ieee_double_to_rep (&z, &r); /* We don't check the sign and we don't check the mantissa because they could be anything for a NaN */ gsl_test_int (r.exponent, 1024, "double x = NaN, exponent is 1024"); gsl_test_int (r.type, GSL_IEEE_TYPE_NAN, "double x = NaN, type is NAN"); } exit (gsl_test_summary ()); } gsl/ieee-utils/gsl_ieee_utils.h0000644000175000017500000000523313536674414015147 0ustar eddedd/* ieee-utils/gsl_ieee_utils.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_IEEE_UTILS_H__ #define __GSL_IEEE_UTILS_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS enum { GSL_IEEE_TYPE_NAN = 1, GSL_IEEE_TYPE_INF = 2, GSL_IEEE_TYPE_NORMAL = 3, GSL_IEEE_TYPE_DENORMAL = 4, GSL_IEEE_TYPE_ZERO = 5 } ; typedef struct { int sign ; char mantissa[24] ; /* Actual bits are 0..22, element 23 is \0 */ int exponent ; int type ; } gsl_ieee_float_rep ; typedef struct { int sign ; char mantissa[53] ; /* Actual bits are 0..51, element 52 is \0 */ int exponent ; int type ; } gsl_ieee_double_rep ; void gsl_ieee_printf_float (const float * x) ; void gsl_ieee_printf_double (const double * x) ; void gsl_ieee_fprintf_float (FILE * stream, const float * x) ; void gsl_ieee_fprintf_double (FILE * stream, const double * x) ; void gsl_ieee_float_to_rep (const float * x, gsl_ieee_float_rep * r) ; void gsl_ieee_double_to_rep (const double * x, gsl_ieee_double_rep * r) ; enum { GSL_IEEE_SINGLE_PRECISION = 1, GSL_IEEE_DOUBLE_PRECISION = 2, GSL_IEEE_EXTENDED_PRECISION = 3 } ; enum { GSL_IEEE_ROUND_TO_NEAREST = 1, GSL_IEEE_ROUND_DOWN = 2, GSL_IEEE_ROUND_UP = 3, GSL_IEEE_ROUND_TO_ZERO = 4 } ; enum { GSL_IEEE_MASK_INVALID = 1, GSL_IEEE_MASK_DENORMALIZED = 2, GSL_IEEE_MASK_DIVISION_BY_ZERO = 4, GSL_IEEE_MASK_OVERFLOW = 8, GSL_IEEE_MASK_UNDERFLOW = 16, GSL_IEEE_MASK_ALL = 31, GSL_IEEE_TRAP_INEXACT = 32 } ; void gsl_ieee_env_setup (void) ; int gsl_ieee_read_mode_string (const char * description, int * precision, int * rounding, int * exception_mask) ; int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) ; __END_DECLS #endif /* __GSL_IEEE_UTILS_H__ */ gsl/ieee-utils/fp-darwin86.c0000644000175000017500000001237513536674414014220 0ustar eddedd/* ieee-utils/fp-darwin86.c * * Copyright (C) 2006 Erik Schnetter * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* Here is the dirty part. Set up your 387 through the control word * (cw) register. * * 15-13 12 11-10 9-8 7-6 5 4 3 2 1 0 * | reserved | IC | RC | PC | reserved | PM | UM | OM | ZM | DM | IM * * IM: Invalid operation mask * DM: Denormalized operand mask * ZM: Zero-divide mask * OM: Overflow mask * UM: Underflow mask * PM: Precision (inexact result) mask * * Mask bit is 1 means no interrupt. * * PC: Precision control * 11 - round to extended precision * 10 - round to double precision * 00 - round to single precision * * RC: Rounding control * 00 - rounding to nearest * 01 - rounding down (toward - infinity) * 10 - rounding up (toward + infinity) * 11 - rounding toward zero * * IC: Infinity control * That is for 8087 and 80287 only. * * The hardware default is 0x037f which we use. */ /* masking of interrupts */ #define _FPU_MASK_IM 0x01 #define _FPU_MASK_DM 0x02 #define _FPU_MASK_ZM 0x04 #define _FPU_MASK_OM 0x08 #define _FPU_MASK_UM 0x10 #define _FPU_MASK_PM 0x20 /* precision control */ #define _FPU_EXTENDED 0x300 /* libm requires double extended precision. */ #define _FPU_DOUBLE 0x200 #define _FPU_SINGLE 0x0 /* rounding control */ #define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */ #define _FPU_RC_DOWN 0x400 #define _FPU_RC_UP 0x800 #define _FPU_RC_ZERO 0xC00 #define _FPU_RESERVED 0xF0C0 /* Reserved bits in cw */ /* The fdlibm code requires strict IEEE double precision arithmetic, and no interrupts for exceptions, rounding to nearest. */ #define _FPU_DEFAULT 0x037f /* IEEE: same as above. */ #define _FPU_IEEE 0x037f /* Type of the control word. */ typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__))); /* Macros for accessing the hardware control word. Note that the use of these macros is no sufficient anymore with recent hardware. Some floating point operations are executed in the SSE/SSE2 engines which have their own control and status register. */ #define _FPU_GETCW(cw) __asm__ __volatile__ ("fnstcw %0" : "=m" (*&cw)) #define _FPU_SETCW(cw) __asm__ __volatile__ ("fldcw %0" : : "m" (*&cw)) /* Default control word set at startup. */ extern fpu_control_t __fpu_control; #define _FPU_GETMXCSR(cw_sse) asm volatile ("stmxcsr %0" : "=m" (cw_sse)) #define _FPU_SETMXCSR(cw_sse) asm volatile ("ldmxcsr %0" : : "m" (cw_sse)) int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) { fpu_control_t mode, mode_sse; _FPU_GETCW (mode) ; mode &= _FPU_RESERVED ; switch (precision) { case GSL_IEEE_SINGLE_PRECISION: mode |= _FPU_SINGLE ; break ; case GSL_IEEE_DOUBLE_PRECISION: mode |= _FPU_DOUBLE ; break ; case GSL_IEEE_EXTENDED_PRECISION: mode |= _FPU_EXTENDED ; break ; default: mode |= _FPU_EXTENDED ; } switch (rounding) { case GSL_IEEE_ROUND_TO_NEAREST: mode |= _FPU_RC_NEAREST ; break ; case GSL_IEEE_ROUND_DOWN: mode |= _FPU_RC_DOWN ; break ; case GSL_IEEE_ROUND_UP: mode |= _FPU_RC_UP ; break ; case GSL_IEEE_ROUND_TO_ZERO: mode |= _FPU_RC_ZERO ; break ; default: mode |= _FPU_RC_NEAREST ; } if (exception_mask & GSL_IEEE_MASK_INVALID) mode |= _FPU_MASK_IM ; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) mode |= _FPU_MASK_DM ; if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode |= _FPU_MASK_ZM ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode |= _FPU_MASK_OM ; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode |= _FPU_MASK_UM ; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { mode &= ~ _FPU_MASK_PM ; } else { mode |= _FPU_MASK_PM ; } _FPU_SETCW (mode) ; _FPU_GETMXCSR (mode_sse) ; mode_sse &= 0xFFFF0000 ; if (exception_mask & GSL_IEEE_MASK_INVALID) mode_sse |= _FPU_MASK_IM << 7 ; if (exception_mask & GSL_IEEE_MASK_DENORMALIZED) mode_sse |= _FPU_MASK_DM << 7 ; if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO) mode_sse |= _FPU_MASK_ZM << 7 ; if (exception_mask & GSL_IEEE_MASK_OVERFLOW) mode_sse |= _FPU_MASK_OM << 7 ; if (exception_mask & GSL_IEEE_MASK_UNDERFLOW) mode_sse |= _FPU_MASK_UM << 7 ; if (exception_mask & GSL_IEEE_TRAP_INEXACT) { mode_sse &= ~ _FPU_MASK_PM << 7 ; } else { mode_sse |= _FPU_MASK_PM << 7 ; } _FPU_SETMXCSR (mode_sse) ; return GSL_SUCCESS ; } gsl/const/0000755000175000017500000000000014057135461011051 5ustar eddeddgsl/const/Makefile.in0000664000175000017500000010303214057135461013117 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = const ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(test_SOURCES) DIST_SOURCES = $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pkginclude_HEADERS = gsl_const.h gsl_const_cgs.h gsl_const_mks.h gsl_const_cgsm.h gsl_const_mksa.h gsl_const_num.h AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu const/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu const/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pkgincludeHEADERS install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \ uninstall uninstall-am uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/const/gsl_const.h0000644000175000017500000000204013536674414013220 0ustar eddedd/* const/gsl_const.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_CONST__ #define __GSL_CONST__ #include #include #include #include #include #endif /* __GSL_CONST__ */ gsl/const/gsl_const_cgsm.h0000644000175000017500000001517313536674414014244 0ustar eddedd/* const/gsl_const_cgsm.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, * 2006, 2007, 2008, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_CONST_CGSM__ #define __GSL_CONST_CGSM__ #define GSL_CONST_CGSM_SPEED_OF_LIGHT (2.99792458e10) /* cm / s */ #define GSL_CONST_CGSM_GRAVITATIONAL_CONSTANT (6.673e-8) /* cm^3 / g s^2 */ #define GSL_CONST_CGSM_PLANCKS_CONSTANT_H (6.62606896e-27) /* g cm^2 / s */ #define GSL_CONST_CGSM_PLANCKS_CONSTANT_HBAR (1.05457162825e-27) /* g cm^2 / s */ #define GSL_CONST_CGSM_ASTRONOMICAL_UNIT (1.49597870691e13) /* cm */ #define GSL_CONST_CGSM_LIGHT_YEAR (9.46053620707e17) /* cm */ #define GSL_CONST_CGSM_PARSEC (3.08567758135e18) /* cm */ #define GSL_CONST_CGSM_GRAV_ACCEL (9.80665e2) /* cm / s^2 */ #define GSL_CONST_CGSM_ELECTRON_VOLT (1.602176487e-12) /* g cm^2 / s^2 */ #define GSL_CONST_CGSM_MASS_ELECTRON (9.10938188e-28) /* g */ #define GSL_CONST_CGSM_MASS_MUON (1.88353109e-25) /* g */ #define GSL_CONST_CGSM_MASS_PROTON (1.67262158e-24) /* g */ #define GSL_CONST_CGSM_MASS_NEUTRON (1.67492716e-24) /* g */ #define GSL_CONST_CGSM_RYDBERG (2.17987196968e-11) /* g cm^2 / s^2 */ #define GSL_CONST_CGSM_BOLTZMANN (1.3806504e-16) /* g cm^2 / K s^2 */ #define GSL_CONST_CGSM_MOLAR_GAS (8.314472e7) /* g cm^2 / K mol s^2 */ #define GSL_CONST_CGSM_STANDARD_GAS_VOLUME (2.2710981e4) /* cm^3 / mol */ #define GSL_CONST_CGSM_MINUTE (6e1) /* s */ #define GSL_CONST_CGSM_HOUR (3.6e3) /* s */ #define GSL_CONST_CGSM_DAY (8.64e4) /* s */ #define GSL_CONST_CGSM_WEEK (6.048e5) /* s */ #define GSL_CONST_CGSM_INCH (2.54e0) /* cm */ #define GSL_CONST_CGSM_FOOT (3.048e1) /* cm */ #define GSL_CONST_CGSM_YARD (9.144e1) /* cm */ #define GSL_CONST_CGSM_MILE (1.609344e5) /* cm */ #define GSL_CONST_CGSM_NAUTICAL_MILE (1.852e5) /* cm */ #define GSL_CONST_CGSM_FATHOM (1.8288e2) /* cm */ #define GSL_CONST_CGSM_MIL (2.54e-3) /* cm */ #define GSL_CONST_CGSM_POINT (3.52777777778e-2) /* cm */ #define GSL_CONST_CGSM_TEXPOINT (3.51459803515e-2) /* cm */ #define GSL_CONST_CGSM_MICRON (1e-4) /* cm */ #define GSL_CONST_CGSM_ANGSTROM (1e-8) /* cm */ #define GSL_CONST_CGSM_HECTARE (1e8) /* cm^2 */ #define GSL_CONST_CGSM_ACRE (4.04685642241e7) /* cm^2 */ #define GSL_CONST_CGSM_BARN (1e-24) /* cm^2 */ #define GSL_CONST_CGSM_LITER (1e3) /* cm^3 */ #define GSL_CONST_CGSM_US_GALLON (3.78541178402e3) /* cm^3 */ #define GSL_CONST_CGSM_QUART (9.46352946004e2) /* cm^3 */ #define GSL_CONST_CGSM_PINT (4.73176473002e2) /* cm^3 */ #define GSL_CONST_CGSM_CUP (2.36588236501e2) /* cm^3 */ #define GSL_CONST_CGSM_FLUID_OUNCE (2.95735295626e1) /* cm^3 */ #define GSL_CONST_CGSM_TABLESPOON (1.47867647813e1) /* cm^3 */ #define GSL_CONST_CGSM_TEASPOON (4.92892159375e0) /* cm^3 */ #define GSL_CONST_CGSM_CANADIAN_GALLON (4.54609e3) /* cm^3 */ #define GSL_CONST_CGSM_UK_GALLON (4.546092e3) /* cm^3 */ #define GSL_CONST_CGSM_MILES_PER_HOUR (4.4704e1) /* cm / s */ #define GSL_CONST_CGSM_KILOMETERS_PER_HOUR (2.77777777778e1) /* cm / s */ #define GSL_CONST_CGSM_KNOT (5.14444444444e1) /* cm / s */ #define GSL_CONST_CGSM_POUND_MASS (4.5359237e2) /* g */ #define GSL_CONST_CGSM_OUNCE_MASS (2.8349523125e1) /* g */ #define GSL_CONST_CGSM_TON (9.0718474e5) /* g */ #define GSL_CONST_CGSM_METRIC_TON (1e6) /* g */ #define GSL_CONST_CGSM_UK_TON (1.0160469088e6) /* g */ #define GSL_CONST_CGSM_TROY_OUNCE (3.1103475e1) /* g */ #define GSL_CONST_CGSM_CARAT (2e-1) /* g */ #define GSL_CONST_CGSM_UNIFIED_ATOMIC_MASS (1.660538782e-24) /* g */ #define GSL_CONST_CGSM_GRAM_FORCE (9.80665e2) /* cm g / s^2 */ #define GSL_CONST_CGSM_POUND_FORCE (4.44822161526e5) /* cm g / s^2 */ #define GSL_CONST_CGSM_KILOPOUND_FORCE (4.44822161526e8) /* cm g / s^2 */ #define GSL_CONST_CGSM_POUNDAL (1.38255e4) /* cm g / s^2 */ #define GSL_CONST_CGSM_CALORIE (4.1868e7) /* g cm^2 / s^2 */ #define GSL_CONST_CGSM_BTU (1.05505585262e10) /* g cm^2 / s^2 */ #define GSL_CONST_CGSM_THERM (1.05506e15) /* g cm^2 / s^2 */ #define GSL_CONST_CGSM_HORSEPOWER (7.457e9) /* g cm^2 / s^3 */ #define GSL_CONST_CGSM_BAR (1e6) /* g / cm s^2 */ #define GSL_CONST_CGSM_STD_ATMOSPHERE (1.01325e6) /* g / cm s^2 */ #define GSL_CONST_CGSM_TORR (1.33322368421e3) /* g / cm s^2 */ #define GSL_CONST_CGSM_METER_OF_MERCURY (1.33322368421e6) /* g / cm s^2 */ #define GSL_CONST_CGSM_INCH_OF_MERCURY (3.38638815789e4) /* g / cm s^2 */ #define GSL_CONST_CGSM_INCH_OF_WATER (2.490889e3) /* g / cm s^2 */ #define GSL_CONST_CGSM_PSI (6.89475729317e4) /* g / cm s^2 */ #define GSL_CONST_CGSM_POISE (1e0) /* g / cm s */ #define GSL_CONST_CGSM_STOKES (1e0) /* cm^2 / s */ #define GSL_CONST_CGSM_STILB (1e0) /* cd / cm^2 */ #define GSL_CONST_CGSM_LUMEN (1e0) /* cd sr */ #define GSL_CONST_CGSM_LUX (1e-4) /* cd sr / cm^2 */ #define GSL_CONST_CGSM_PHOT (1e0) /* cd sr / cm^2 */ #define GSL_CONST_CGSM_FOOTCANDLE (1.076e-3) /* cd sr / cm^2 */ #define GSL_CONST_CGSM_LAMBERT (1e0) /* cd sr / cm^2 */ #define GSL_CONST_CGSM_FOOTLAMBERT (1.07639104e-3) /* cd sr / cm^2 */ #define GSL_CONST_CGSM_CURIE (3.7e10) /* 1 / s */ #define GSL_CONST_CGSM_ROENTGEN (2.58e-8) /* abamp s / g */ #define GSL_CONST_CGSM_RAD (1e2) /* cm^2 / s^2 */ #define GSL_CONST_CGSM_SOLAR_MASS (1.98892e33) /* g */ #define GSL_CONST_CGSM_BOHR_RADIUS (5.291772083e-9) /* cm */ #define GSL_CONST_CGSM_NEWTON (1e5) /* cm g / s^2 */ #define GSL_CONST_CGSM_DYNE (1e0) /* cm g / s^2 */ #define GSL_CONST_CGSM_JOULE (1e7) /* g cm^2 / s^2 */ #define GSL_CONST_CGSM_ERG (1e0) /* g cm^2 / s^2 */ #define GSL_CONST_CGSM_STEFAN_BOLTZMANN_CONSTANT (5.67040047374e-5) /* g / K^4 s^3 */ #define GSL_CONST_CGSM_THOMSON_CROSS_SECTION (6.65245893699e-25) /* cm^2 */ #define GSL_CONST_CGSM_BOHR_MAGNETON (9.27400899e-21) /* abamp cm^2 */ #define GSL_CONST_CGSM_NUCLEAR_MAGNETON (5.05078317e-24) /* abamp cm^2 */ #define GSL_CONST_CGSM_ELECTRON_MAGNETIC_MOMENT (9.28476362e-21) /* abamp cm^2 */ #define GSL_CONST_CGSM_PROTON_MAGNETIC_MOMENT (1.410606633e-23) /* abamp cm^2 */ #define GSL_CONST_CGSM_FARADAY (9.64853429775e3) /* abamp s / mol */ #define GSL_CONST_CGSM_ELECTRON_CHARGE (1.602176487e-20) /* abamp s */ #endif /* __GSL_CONST_CGSM__ */ gsl/const/ChangeLog0000644000175000017500000000511013536674414012627 0ustar eddedd2009-08-17 Brian Gough * const.el: removed electromagnetic constants from cgs, now only in CGSM 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2006-03-21 Brian Gough * test.c (main): added some extra tests 2006-03-17 Brian Gough * const.el (gsl-electrical-constants): added debye unit 2004-05-26 Brian Gough * test.c: added stdlib.h for exit() 2004-03-05 Brian Gough * const.el: added CGS and MKS systems back in, with CGSM electrical units excluded from CGS, for backwards compatibility 2003-11-27 Brian Gough * const.el (gsl-constants): added stefan-boltzmann constant and thomson cross section 2003-09-18 Brian Gough * test.c: added a test program * gsl_const.h: fixed to use new header files for MKSA and CGSM 2003-06-09 Brian Gough * calc-units-update.el: changed to use MKSA and CGSM units, so that electromagnetic constants are converted correctly Sat Jul 20 21:25:56 2002 Brian Gough * calc-units-update.el (math-additional-units): changed setvar to setq, otherwise the new values do not override the original values Wed May 29 22:41:31 2002 Brian Gough * calc-units-update.el (math-additional-units): updated unit values, in a backwards compatible way. Made mue an absolute value, and put Ryd in energy units. 2002-05-18 Jochen Küpper * calc-units-update.el (math-additional-units): Add this file to provide updated costants for Emacs calc. (These values are in the current development versions of GNU Emacs and Xemacs already.) Mon Apr 1 19:27:57 2002 Brian Gough * const.el (gsl-constants): Added newton, dyne, joule, erg and power-of-ten prefixes, Mega, Giga, Tera, etc. Tue Jan 8 21:48:56 2002 Brian Gough * const.el (gsl-constants): added bohr_radius and vacuum_permittivity Tue Sep 25 15:15:33 2001 Brian Gough * const.el (fn): make all output double precision to avoid possibility of unexpected integer division. (gsl-constants): fix definition of barn and btu (gsl-constants): added solar mass Tue Jan 23 16:19:50 2001 Brian Gough * const.el (gsl-constants): fixed definition of POINT (from pt to point, was previously measuring 'pints') gsl/const/Makefile.am0000644000175000017500000000054213536674414013115 0ustar eddeddpkginclude_HEADERS = gsl_const.h gsl_const_cgs.h gsl_const_mks.h gsl_const_cgsm.h gsl_const_mksa.h gsl_const_num.h AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_SOURCES = test.c test_LDADD = ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la gsl/const/gsl_const_mks.h0000644000175000017500000001542113536674414014101 0ustar eddedd/* const/gsl_const_mks.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, * 2006, 2007, 2008, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_CONST_MKS__ #define __GSL_CONST_MKS__ #define GSL_CONST_MKS_SPEED_OF_LIGHT (2.99792458e8) /* m / s */ #define GSL_CONST_MKS_GRAVITATIONAL_CONSTANT (6.673e-11) /* m^3 / kg s^2 */ #define GSL_CONST_MKS_PLANCKS_CONSTANT_H (6.62606896e-34) /* kg m^2 / s */ #define GSL_CONST_MKS_PLANCKS_CONSTANT_HBAR (1.05457162825e-34) /* kg m^2 / s */ #define GSL_CONST_MKS_ASTRONOMICAL_UNIT (1.49597870691e11) /* m */ #define GSL_CONST_MKS_LIGHT_YEAR (9.46053620707e15) /* m */ #define GSL_CONST_MKS_PARSEC (3.08567758135e16) /* m */ #define GSL_CONST_MKS_GRAV_ACCEL (9.80665e0) /* m / s^2 */ #define GSL_CONST_MKS_ELECTRON_VOLT (1.602176487e-19) /* kg m^2 / s^2 */ #define GSL_CONST_MKS_MASS_ELECTRON (9.10938188e-31) /* kg */ #define GSL_CONST_MKS_MASS_MUON (1.88353109e-28) /* kg */ #define GSL_CONST_MKS_MASS_PROTON (1.67262158e-27) /* kg */ #define GSL_CONST_MKS_MASS_NEUTRON (1.67492716e-27) /* kg */ #define GSL_CONST_MKS_RYDBERG (2.17987196968e-18) /* kg m^2 / s^2 */ #define GSL_CONST_MKS_BOLTZMANN (1.3806504e-23) /* kg m^2 / K s^2 */ #define GSL_CONST_MKS_MOLAR_GAS (8.314472e0) /* kg m^2 / K mol s^2 */ #define GSL_CONST_MKS_STANDARD_GAS_VOLUME (2.2710981e-2) /* m^3 / mol */ #define GSL_CONST_MKS_MINUTE (6e1) /* s */ #define GSL_CONST_MKS_HOUR (3.6e3) /* s */ #define GSL_CONST_MKS_DAY (8.64e4) /* s */ #define GSL_CONST_MKS_WEEK (6.048e5) /* s */ #define GSL_CONST_MKS_INCH (2.54e-2) /* m */ #define GSL_CONST_MKS_FOOT (3.048e-1) /* m */ #define GSL_CONST_MKS_YARD (9.144e-1) /* m */ #define GSL_CONST_MKS_MILE (1.609344e3) /* m */ #define GSL_CONST_MKS_NAUTICAL_MILE (1.852e3) /* m */ #define GSL_CONST_MKS_FATHOM (1.8288e0) /* m */ #define GSL_CONST_MKS_MIL (2.54e-5) /* m */ #define GSL_CONST_MKS_POINT (3.52777777778e-4) /* m */ #define GSL_CONST_MKS_TEXPOINT (3.51459803515e-4) /* m */ #define GSL_CONST_MKS_MICRON (1e-6) /* m */ #define GSL_CONST_MKS_ANGSTROM (1e-10) /* m */ #define GSL_CONST_MKS_HECTARE (1e4) /* m^2 */ #define GSL_CONST_MKS_ACRE (4.04685642241e3) /* m^2 */ #define GSL_CONST_MKS_BARN (1e-28) /* m^2 */ #define GSL_CONST_MKS_LITER (1e-3) /* m^3 */ #define GSL_CONST_MKS_US_GALLON (3.78541178402e-3) /* m^3 */ #define GSL_CONST_MKS_QUART (9.46352946004e-4) /* m^3 */ #define GSL_CONST_MKS_PINT (4.73176473002e-4) /* m^3 */ #define GSL_CONST_MKS_CUP (2.36588236501e-4) /* m^3 */ #define GSL_CONST_MKS_FLUID_OUNCE (2.95735295626e-5) /* m^3 */ #define GSL_CONST_MKS_TABLESPOON (1.47867647813e-5) /* m^3 */ #define GSL_CONST_MKS_TEASPOON (4.92892159375e-6) /* m^3 */ #define GSL_CONST_MKS_CANADIAN_GALLON (4.54609e-3) /* m^3 */ #define GSL_CONST_MKS_UK_GALLON (4.546092e-3) /* m^3 */ #define GSL_CONST_MKS_MILES_PER_HOUR (4.4704e-1) /* m / s */ #define GSL_CONST_MKS_KILOMETERS_PER_HOUR (2.77777777778e-1) /* m / s */ #define GSL_CONST_MKS_KNOT (5.14444444444e-1) /* m / s */ #define GSL_CONST_MKS_POUND_MASS (4.5359237e-1) /* kg */ #define GSL_CONST_MKS_OUNCE_MASS (2.8349523125e-2) /* kg */ #define GSL_CONST_MKS_TON (9.0718474e2) /* kg */ #define GSL_CONST_MKS_METRIC_TON (1e3) /* kg */ #define GSL_CONST_MKS_UK_TON (1.0160469088e3) /* kg */ #define GSL_CONST_MKS_TROY_OUNCE (3.1103475e-2) /* kg */ #define GSL_CONST_MKS_CARAT (2e-4) /* kg */ #define GSL_CONST_MKS_UNIFIED_ATOMIC_MASS (1.660538782e-27) /* kg */ #define GSL_CONST_MKS_GRAM_FORCE (9.80665e-3) /* kg m / s^2 */ #define GSL_CONST_MKS_POUND_FORCE (4.44822161526e0) /* kg m / s^2 */ #define GSL_CONST_MKS_KILOPOUND_FORCE (4.44822161526e3) /* kg m / s^2 */ #define GSL_CONST_MKS_POUNDAL (1.38255e-1) /* kg m / s^2 */ #define GSL_CONST_MKS_CALORIE (4.1868e0) /* kg m^2 / s^2 */ #define GSL_CONST_MKS_BTU (1.05505585262e3) /* kg m^2 / s^2 */ #define GSL_CONST_MKS_THERM (1.05506e8) /* kg m^2 / s^2 */ #define GSL_CONST_MKS_HORSEPOWER (7.457e2) /* kg m^2 / s^3 */ #define GSL_CONST_MKS_BAR (1e5) /* kg / m s^2 */ #define GSL_CONST_MKS_STD_ATMOSPHERE (1.01325e5) /* kg / m s^2 */ #define GSL_CONST_MKS_TORR (1.33322368421e2) /* kg / m s^2 */ #define GSL_CONST_MKS_METER_OF_MERCURY (1.33322368421e5) /* kg / m s^2 */ #define GSL_CONST_MKS_INCH_OF_MERCURY (3.38638815789e3) /* kg / m s^2 */ #define GSL_CONST_MKS_INCH_OF_WATER (2.490889e2) /* kg / m s^2 */ #define GSL_CONST_MKS_PSI (6.89475729317e3) /* kg / m s^2 */ #define GSL_CONST_MKS_POISE (1e-1) /* kg m^-1 s^-1 */ #define GSL_CONST_MKS_STOKES (1e-4) /* m^2 / s */ #define GSL_CONST_MKS_STILB (1e4) /* cd / m^2 */ #define GSL_CONST_MKS_LUMEN (1e0) /* cd sr */ #define GSL_CONST_MKS_LUX (1e0) /* cd sr / m^2 */ #define GSL_CONST_MKS_PHOT (1e4) /* cd sr / m^2 */ #define GSL_CONST_MKS_FOOTCANDLE (1.076e1) /* cd sr / m^2 */ #define GSL_CONST_MKS_LAMBERT (1e4) /* cd sr / m^2 */ #define GSL_CONST_MKS_FOOTLAMBERT (1.07639104e1) /* cd sr / m^2 */ #define GSL_CONST_MKS_CURIE (3.7e10) /* 1 / s */ #define GSL_CONST_MKS_ROENTGEN (2.58e-4) /* A s / kg */ #define GSL_CONST_MKS_RAD (1e-2) /* m^2 / s^2 */ #define GSL_CONST_MKS_SOLAR_MASS (1.98892e30) /* kg */ #define GSL_CONST_MKS_BOHR_RADIUS (5.291772083e-11) /* m */ #define GSL_CONST_MKS_NEWTON (1e0) /* kg m / s^2 */ #define GSL_CONST_MKS_DYNE (1e-5) /* kg m / s^2 */ #define GSL_CONST_MKS_JOULE (1e0) /* kg m^2 / s^2 */ #define GSL_CONST_MKS_ERG (1e-7) /* kg m^2 / s^2 */ #define GSL_CONST_MKS_STEFAN_BOLTZMANN_CONSTANT (5.67040047374e-8) /* kg / K^4 s^3 */ #define GSL_CONST_MKS_THOMSON_CROSS_SECTION (6.65245893699e-29) /* m^2 */ #define GSL_CONST_MKS_BOHR_MAGNETON (9.27400899e-24) /* A m^2 */ #define GSL_CONST_MKS_NUCLEAR_MAGNETON (5.05078317e-27) /* A m^2 */ #define GSL_CONST_MKS_ELECTRON_MAGNETIC_MOMENT (9.28476362e-24) /* A m^2 */ #define GSL_CONST_MKS_PROTON_MAGNETIC_MOMENT (1.410606633e-26) /* A m^2 */ #define GSL_CONST_MKS_FARADAY (9.64853429775e4) /* A s / mol */ #define GSL_CONST_MKS_ELECTRON_CHARGE (1.602176487e-19) /* A s */ #define GSL_CONST_MKS_VACUUM_PERMITTIVITY (8.854187817e-12) /* A^2 s^4 / kg m^3 */ #define GSL_CONST_MKS_VACUUM_PERMEABILITY (1.25663706144e-6) /* kg m / A^2 s^2 */ #define GSL_CONST_MKS_DEBYE (3.33564095198e-30) /* A s^2 / m^2 */ #define GSL_CONST_MKS_GAUSS (1e-4) /* kg / A s^2 */ #endif /* __GSL_CONST_MKS__ */ gsl/const/gsl_const_num.h0000644000175000017500000000334113536674414014104 0ustar eddedd/* const/gsl_const_num.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, * 2006, 2007, 2008, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_CONST_NUM__ #define __GSL_CONST_NUM__ #define GSL_CONST_NUM_FINE_STRUCTURE (7.297352533e-3) /* 1 */ #define GSL_CONST_NUM_AVOGADRO (6.02214199e23) /* 1 / mol */ #define GSL_CONST_NUM_YOTTA (1e24) /* 1 */ #define GSL_CONST_NUM_ZETTA (1e21) /* 1 */ #define GSL_CONST_NUM_EXA (1e18) /* 1 */ #define GSL_CONST_NUM_PETA (1e15) /* 1 */ #define GSL_CONST_NUM_TERA (1e12) /* 1 */ #define GSL_CONST_NUM_GIGA (1e9) /* 1 */ #define GSL_CONST_NUM_MEGA (1e6) /* 1 */ #define GSL_CONST_NUM_KILO (1e3) /* 1 */ #define GSL_CONST_NUM_MILLI (1e-3) /* 1 */ #define GSL_CONST_NUM_MICRO (1e-6) /* 1 */ #define GSL_CONST_NUM_NANO (1e-9) /* 1 */ #define GSL_CONST_NUM_PICO (1e-12) /* 1 */ #define GSL_CONST_NUM_FEMTO (1e-15) /* 1 */ #define GSL_CONST_NUM_ATTO (1e-18) /* 1 */ #define GSL_CONST_NUM_ZEPTO (1e-21) /* 1 */ #define GSL_CONST_NUM_YOCTO (1e-24) /* 1 */ #endif /* __GSL_CONST_NUM__ */ gsl/const/gsl_const_cgs.h0000644000175000017500000001413013536674414014057 0ustar eddedd/* const/gsl_const_cgs.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, * 2006, 2007, 2008, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_CONST_CGS__ #define __GSL_CONST_CGS__ #define GSL_CONST_CGS_SPEED_OF_LIGHT (2.99792458e10) /* cm / s */ #define GSL_CONST_CGS_GRAVITATIONAL_CONSTANT (6.673e-8) /* cm^3 / g s^2 */ #define GSL_CONST_CGS_PLANCKS_CONSTANT_H (6.62606896e-27) /* g cm^2 / s */ #define GSL_CONST_CGS_PLANCKS_CONSTANT_HBAR (1.05457162825e-27) /* g cm^2 / s */ #define GSL_CONST_CGS_ASTRONOMICAL_UNIT (1.49597870691e13) /* cm */ #define GSL_CONST_CGS_LIGHT_YEAR (9.46053620707e17) /* cm */ #define GSL_CONST_CGS_PARSEC (3.08567758135e18) /* cm */ #define GSL_CONST_CGS_GRAV_ACCEL (9.80665e2) /* cm / s^2 */ #define GSL_CONST_CGS_ELECTRON_VOLT (1.602176487e-12) /* g cm^2 / s^2 */ #define GSL_CONST_CGS_MASS_ELECTRON (9.10938188e-28) /* g */ #define GSL_CONST_CGS_MASS_MUON (1.88353109e-25) /* g */ #define GSL_CONST_CGS_MASS_PROTON (1.67262158e-24) /* g */ #define GSL_CONST_CGS_MASS_NEUTRON (1.67492716e-24) /* g */ #define GSL_CONST_CGS_RYDBERG (2.17987196968e-11) /* g cm^2 / s^2 */ #define GSL_CONST_CGS_BOLTZMANN (1.3806504e-16) /* g cm^2 / K s^2 */ #define GSL_CONST_CGS_MOLAR_GAS (8.314472e7) /* g cm^2 / K mol s^2 */ #define GSL_CONST_CGS_STANDARD_GAS_VOLUME (2.2710981e4) /* cm^3 / mol */ #define GSL_CONST_CGS_MINUTE (6e1) /* s */ #define GSL_CONST_CGS_HOUR (3.6e3) /* s */ #define GSL_CONST_CGS_DAY (8.64e4) /* s */ #define GSL_CONST_CGS_WEEK (6.048e5) /* s */ #define GSL_CONST_CGS_INCH (2.54e0) /* cm */ #define GSL_CONST_CGS_FOOT (3.048e1) /* cm */ #define GSL_CONST_CGS_YARD (9.144e1) /* cm */ #define GSL_CONST_CGS_MILE (1.609344e5) /* cm */ #define GSL_CONST_CGS_NAUTICAL_MILE (1.852e5) /* cm */ #define GSL_CONST_CGS_FATHOM (1.8288e2) /* cm */ #define GSL_CONST_CGS_MIL (2.54e-3) /* cm */ #define GSL_CONST_CGS_POINT (3.52777777778e-2) /* cm */ #define GSL_CONST_CGS_TEXPOINT (3.51459803515e-2) /* cm */ #define GSL_CONST_CGS_MICRON (1e-4) /* cm */ #define GSL_CONST_CGS_ANGSTROM (1e-8) /* cm */ #define GSL_CONST_CGS_HECTARE (1e8) /* cm^2 */ #define GSL_CONST_CGS_ACRE (4.04685642241e7) /* cm^2 */ #define GSL_CONST_CGS_BARN (1e-24) /* cm^2 */ #define GSL_CONST_CGS_LITER (1e3) /* cm^3 */ #define GSL_CONST_CGS_US_GALLON (3.78541178402e3) /* cm^3 */ #define GSL_CONST_CGS_QUART (9.46352946004e2) /* cm^3 */ #define GSL_CONST_CGS_PINT (4.73176473002e2) /* cm^3 */ #define GSL_CONST_CGS_CUP (2.36588236501e2) /* cm^3 */ #define GSL_CONST_CGS_FLUID_OUNCE (2.95735295626e1) /* cm^3 */ #define GSL_CONST_CGS_TABLESPOON (1.47867647813e1) /* cm^3 */ #define GSL_CONST_CGS_TEASPOON (4.92892159375e0) /* cm^3 */ #define GSL_CONST_CGS_CANADIAN_GALLON (4.54609e3) /* cm^3 */ #define GSL_CONST_CGS_UK_GALLON (4.546092e3) /* cm^3 */ #define GSL_CONST_CGS_MILES_PER_HOUR (4.4704e1) /* cm / s */ #define GSL_CONST_CGS_KILOMETERS_PER_HOUR (2.77777777778e1) /* cm / s */ #define GSL_CONST_CGS_KNOT (5.14444444444e1) /* cm / s */ #define GSL_CONST_CGS_POUND_MASS (4.5359237e2) /* g */ #define GSL_CONST_CGS_OUNCE_MASS (2.8349523125e1) /* g */ #define GSL_CONST_CGS_TON (9.0718474e5) /* g */ #define GSL_CONST_CGS_METRIC_TON (1e6) /* g */ #define GSL_CONST_CGS_UK_TON (1.0160469088e6) /* g */ #define GSL_CONST_CGS_TROY_OUNCE (3.1103475e1) /* g */ #define GSL_CONST_CGS_CARAT (2e-1) /* g */ #define GSL_CONST_CGS_UNIFIED_ATOMIC_MASS (1.660538782e-24) /* g */ #define GSL_CONST_CGS_GRAM_FORCE (9.80665e2) /* cm g / s^2 */ #define GSL_CONST_CGS_POUND_FORCE (4.44822161526e5) /* cm g / s^2 */ #define GSL_CONST_CGS_KILOPOUND_FORCE (4.44822161526e8) /* cm g / s^2 */ #define GSL_CONST_CGS_POUNDAL (1.38255e4) /* cm g / s^2 */ #define GSL_CONST_CGS_CALORIE (4.1868e7) /* g cm^2 / s^2 */ #define GSL_CONST_CGS_BTU (1.05505585262e10) /* g cm^2 / s^2 */ #define GSL_CONST_CGS_THERM (1.05506e15) /* g cm^2 / s^2 */ #define GSL_CONST_CGS_HORSEPOWER (7.457e9) /* g cm^2 / s^3 */ #define GSL_CONST_CGS_BAR (1e6) /* g / cm s^2 */ #define GSL_CONST_CGS_STD_ATMOSPHERE (1.01325e6) /* g / cm s^2 */ #define GSL_CONST_CGS_TORR (1.33322368421e3) /* g / cm s^2 */ #define GSL_CONST_CGS_METER_OF_MERCURY (1.33322368421e6) /* g / cm s^2 */ #define GSL_CONST_CGS_INCH_OF_MERCURY (3.38638815789e4) /* g / cm s^2 */ #define GSL_CONST_CGS_INCH_OF_WATER (2.490889e3) /* g / cm s^2 */ #define GSL_CONST_CGS_PSI (6.89475729317e4) /* g / cm s^2 */ #define GSL_CONST_CGS_POISE (1e0) /* g / cm s */ #define GSL_CONST_CGS_STOKES (1e0) /* cm^2 / s */ #define GSL_CONST_CGS_STILB (1e0) /* cd / cm^2 */ #define GSL_CONST_CGS_LUMEN (1e0) /* cd sr */ #define GSL_CONST_CGS_LUX (1e-4) /* cd sr / cm^2 */ #define GSL_CONST_CGS_PHOT (1e0) /* cd sr / cm^2 */ #define GSL_CONST_CGS_FOOTCANDLE (1.076e-3) /* cd sr / cm^2 */ #define GSL_CONST_CGS_LAMBERT (1e0) /* cd sr / cm^2 */ #define GSL_CONST_CGS_FOOTLAMBERT (1.07639104e-3) /* cd sr / cm^2 */ #define GSL_CONST_CGS_CURIE (3.7e10) /* 1 / s */ #define GSL_CONST_CGS_ROENTGEN (2.58e-7) /* A s / g */ #define GSL_CONST_CGS_RAD (1e2) /* cm^2 / s^2 */ #define GSL_CONST_CGS_SOLAR_MASS (1.98892e33) /* g */ #define GSL_CONST_CGS_BOHR_RADIUS (5.291772083e-9) /* cm */ #define GSL_CONST_CGS_NEWTON (1e5) /* cm g / s^2 */ #define GSL_CONST_CGS_DYNE (1e0) /* cm g / s^2 */ #define GSL_CONST_CGS_JOULE (1e7) /* g cm^2 / s^2 */ #define GSL_CONST_CGS_ERG (1e0) /* g cm^2 / s^2 */ #define GSL_CONST_CGS_STEFAN_BOLTZMANN_CONSTANT (5.67040047374e-5) /* g / K^4 s^3 */ #define GSL_CONST_CGS_THOMSON_CROSS_SECTION (6.65245893699e-25) /* cm^2 */ #endif /* __GSL_CONST_CGS__ */ gsl/const/TODO0000644000175000017500000000014413536674414011547 0ustar eddedd# -*- org -*- #+CATEGORY: const could add RADIATION_DENSITY_CONSTANT (7.56591e-16) /* J m-3 K-4 */ gsl/const/gsl_const_mksa.h0000644000175000017500000001557213536674414014251 0ustar eddedd/* const/gsl_const_mksa.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, * 2006, 2007, 2008, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_CONST_MKSA__ #define __GSL_CONST_MKSA__ #define GSL_CONST_MKSA_SPEED_OF_LIGHT (2.99792458e8) /* m / s */ #define GSL_CONST_MKSA_GRAVITATIONAL_CONSTANT (6.673e-11) /* m^3 / kg s^2 */ #define GSL_CONST_MKSA_PLANCKS_CONSTANT_H (6.62606896e-34) /* kg m^2 / s */ #define GSL_CONST_MKSA_PLANCKS_CONSTANT_HBAR (1.05457162825e-34) /* kg m^2 / s */ #define GSL_CONST_MKSA_ASTRONOMICAL_UNIT (1.49597870691e11) /* m */ #define GSL_CONST_MKSA_LIGHT_YEAR (9.46053620707e15) /* m */ #define GSL_CONST_MKSA_PARSEC (3.08567758135e16) /* m */ #define GSL_CONST_MKSA_GRAV_ACCEL (9.80665e0) /* m / s^2 */ #define GSL_CONST_MKSA_ELECTRON_VOLT (1.602176487e-19) /* kg m^2 / s^2 */ #define GSL_CONST_MKSA_MASS_ELECTRON (9.10938188e-31) /* kg */ #define GSL_CONST_MKSA_MASS_MUON (1.88353109e-28) /* kg */ #define GSL_CONST_MKSA_MASS_PROTON (1.67262158e-27) /* kg */ #define GSL_CONST_MKSA_MASS_NEUTRON (1.67492716e-27) /* kg */ #define GSL_CONST_MKSA_RYDBERG (2.17987196968e-18) /* kg m^2 / s^2 */ #define GSL_CONST_MKSA_BOLTZMANN (1.3806504e-23) /* kg m^2 / K s^2 */ #define GSL_CONST_MKSA_MOLAR_GAS (8.314472e0) /* kg m^2 / K mol s^2 */ #define GSL_CONST_MKSA_STANDARD_GAS_VOLUME (2.2710981e-2) /* m^3 / mol */ #define GSL_CONST_MKSA_MINUTE (6e1) /* s */ #define GSL_CONST_MKSA_HOUR (3.6e3) /* s */ #define GSL_CONST_MKSA_DAY (8.64e4) /* s */ #define GSL_CONST_MKSA_WEEK (6.048e5) /* s */ #define GSL_CONST_MKSA_INCH (2.54e-2) /* m */ #define GSL_CONST_MKSA_FOOT (3.048e-1) /* m */ #define GSL_CONST_MKSA_YARD (9.144e-1) /* m */ #define GSL_CONST_MKSA_MILE (1.609344e3) /* m */ #define GSL_CONST_MKSA_NAUTICAL_MILE (1.852e3) /* m */ #define GSL_CONST_MKSA_FATHOM (1.8288e0) /* m */ #define GSL_CONST_MKSA_MIL (2.54e-5) /* m */ #define GSL_CONST_MKSA_POINT (3.52777777778e-4) /* m */ #define GSL_CONST_MKSA_TEXPOINT (3.51459803515e-4) /* m */ #define GSL_CONST_MKSA_MICRON (1e-6) /* m */ #define GSL_CONST_MKSA_ANGSTROM (1e-10) /* m */ #define GSL_CONST_MKSA_HECTARE (1e4) /* m^2 */ #define GSL_CONST_MKSA_ACRE (4.04685642241e3) /* m^2 */ #define GSL_CONST_MKSA_BARN (1e-28) /* m^2 */ #define GSL_CONST_MKSA_LITER (1e-3) /* m^3 */ #define GSL_CONST_MKSA_US_GALLON (3.78541178402e-3) /* m^3 */ #define GSL_CONST_MKSA_QUART (9.46352946004e-4) /* m^3 */ #define GSL_CONST_MKSA_PINT (4.73176473002e-4) /* m^3 */ #define GSL_CONST_MKSA_CUP (2.36588236501e-4) /* m^3 */ #define GSL_CONST_MKSA_FLUID_OUNCE (2.95735295626e-5) /* m^3 */ #define GSL_CONST_MKSA_TABLESPOON (1.47867647813e-5) /* m^3 */ #define GSL_CONST_MKSA_TEASPOON (4.92892159375e-6) /* m^3 */ #define GSL_CONST_MKSA_CANADIAN_GALLON (4.54609e-3) /* m^3 */ #define GSL_CONST_MKSA_UK_GALLON (4.546092e-3) /* m^3 */ #define GSL_CONST_MKSA_MILES_PER_HOUR (4.4704e-1) /* m / s */ #define GSL_CONST_MKSA_KILOMETERS_PER_HOUR (2.77777777778e-1) /* m / s */ #define GSL_CONST_MKSA_KNOT (5.14444444444e-1) /* m / s */ #define GSL_CONST_MKSA_POUND_MASS (4.5359237e-1) /* kg */ #define GSL_CONST_MKSA_OUNCE_MASS (2.8349523125e-2) /* kg */ #define GSL_CONST_MKSA_TON (9.0718474e2) /* kg */ #define GSL_CONST_MKSA_METRIC_TON (1e3) /* kg */ #define GSL_CONST_MKSA_UK_TON (1.0160469088e3) /* kg */ #define GSL_CONST_MKSA_TROY_OUNCE (3.1103475e-2) /* kg */ #define GSL_CONST_MKSA_CARAT (2e-4) /* kg */ #define GSL_CONST_MKSA_UNIFIED_ATOMIC_MASS (1.660538782e-27) /* kg */ #define GSL_CONST_MKSA_GRAM_FORCE (9.80665e-3) /* kg m / s^2 */ #define GSL_CONST_MKSA_POUND_FORCE (4.44822161526e0) /* kg m / s^2 */ #define GSL_CONST_MKSA_KILOPOUND_FORCE (4.44822161526e3) /* kg m / s^2 */ #define GSL_CONST_MKSA_POUNDAL (1.38255e-1) /* kg m / s^2 */ #define GSL_CONST_MKSA_CALORIE (4.1868e0) /* kg m^2 / s^2 */ #define GSL_CONST_MKSA_BTU (1.05505585262e3) /* kg m^2 / s^2 */ #define GSL_CONST_MKSA_THERM (1.05506e8) /* kg m^2 / s^2 */ #define GSL_CONST_MKSA_HORSEPOWER (7.457e2) /* kg m^2 / s^3 */ #define GSL_CONST_MKSA_BAR (1e5) /* kg / m s^2 */ #define GSL_CONST_MKSA_STD_ATMOSPHERE (1.01325e5) /* kg / m s^2 */ #define GSL_CONST_MKSA_TORR (1.33322368421e2) /* kg / m s^2 */ #define GSL_CONST_MKSA_METER_OF_MERCURY (1.33322368421e5) /* kg / m s^2 */ #define GSL_CONST_MKSA_INCH_OF_MERCURY (3.38638815789e3) /* kg / m s^2 */ #define GSL_CONST_MKSA_INCH_OF_WATER (2.490889e2) /* kg / m s^2 */ #define GSL_CONST_MKSA_PSI (6.89475729317e3) /* kg / m s^2 */ #define GSL_CONST_MKSA_POISE (1e-1) /* kg m^-1 s^-1 */ #define GSL_CONST_MKSA_STOKES (1e-4) /* m^2 / s */ #define GSL_CONST_MKSA_STILB (1e4) /* cd / m^2 */ #define GSL_CONST_MKSA_LUMEN (1e0) /* cd sr */ #define GSL_CONST_MKSA_LUX (1e0) /* cd sr / m^2 */ #define GSL_CONST_MKSA_PHOT (1e4) /* cd sr / m^2 */ #define GSL_CONST_MKSA_FOOTCANDLE (1.076e1) /* cd sr / m^2 */ #define GSL_CONST_MKSA_LAMBERT (1e4) /* cd sr / m^2 */ #define GSL_CONST_MKSA_FOOTLAMBERT (1.07639104e1) /* cd sr / m^2 */ #define GSL_CONST_MKSA_CURIE (3.7e10) /* 1 / s */ #define GSL_CONST_MKSA_ROENTGEN (2.58e-4) /* A s / kg */ #define GSL_CONST_MKSA_RAD (1e-2) /* m^2 / s^2 */ #define GSL_CONST_MKSA_SOLAR_MASS (1.98892e30) /* kg */ #define GSL_CONST_MKSA_BOHR_RADIUS (5.291772083e-11) /* m */ #define GSL_CONST_MKSA_NEWTON (1e0) /* kg m / s^2 */ #define GSL_CONST_MKSA_DYNE (1e-5) /* kg m / s^2 */ #define GSL_CONST_MKSA_JOULE (1e0) /* kg m^2 / s^2 */ #define GSL_CONST_MKSA_ERG (1e-7) /* kg m^2 / s^2 */ #define GSL_CONST_MKSA_STEFAN_BOLTZMANN_CONSTANT (5.67040047374e-8) /* kg / K^4 s^3 */ #define GSL_CONST_MKSA_THOMSON_CROSS_SECTION (6.65245893699e-29) /* m^2 */ #define GSL_CONST_MKSA_BOHR_MAGNETON (9.27400899e-24) /* A m^2 */ #define GSL_CONST_MKSA_NUCLEAR_MAGNETON (5.05078317e-27) /* A m^2 */ #define GSL_CONST_MKSA_ELECTRON_MAGNETIC_MOMENT (9.28476362e-24) /* A m^2 */ #define GSL_CONST_MKSA_PROTON_MAGNETIC_MOMENT (1.410606633e-26) /* A m^2 */ #define GSL_CONST_MKSA_FARADAY (9.64853429775e4) /* A s / mol */ #define GSL_CONST_MKSA_ELECTRON_CHARGE (1.602176487e-19) /* A s */ #define GSL_CONST_MKSA_VACUUM_PERMITTIVITY (8.854187817e-12) /* A^2 s^4 / kg m^3 */ #define GSL_CONST_MKSA_VACUUM_PERMEABILITY (1.25663706144e-6) /* kg m / A^2 s^2 */ #define GSL_CONST_MKSA_DEBYE (3.33564095198e-30) /* A s^2 / m^2 */ #define GSL_CONST_MKSA_GAUSS (1e-4) /* kg / A s^2 */ #endif /* __GSL_CONST_MKSA__ */ gsl/const/test.c0000644000175000017500000000525513536674414012212 0ustar eddedd/* const/test.c * * Copyright (C) 2003, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include int main (void) { gsl_ieee_env_setup (); /* Basic check to make sure the header files are functioning */ { double c = GSL_CONST_MKS_SPEED_OF_LIGHT; double eps = GSL_CONST_MKS_VACUUM_PERMITTIVITY; double mu = GSL_CONST_MKS_VACUUM_PERMEABILITY; gsl_test_rel (c, 1.0/sqrt(eps*mu), 1e-6, "speed of light (mks)"); } { double ly = GSL_CONST_CGS_LIGHT_YEAR; double c = GSL_CONST_CGS_SPEED_OF_LIGHT; double y = 365.2425 * GSL_CONST_CGS_DAY; gsl_test_rel (ly, c * y, 1e-6, "light year (cgs)"); } { double c = GSL_CONST_MKSA_SPEED_OF_LIGHT; double eps = GSL_CONST_MKSA_VACUUM_PERMITTIVITY; double mu = GSL_CONST_MKSA_VACUUM_PERMEABILITY; gsl_test_rel (c, 1.0/sqrt(eps*mu), 1e-6, "speed of light (mksa)"); } { double ly = GSL_CONST_CGSM_LIGHT_YEAR; double c = GSL_CONST_CGSM_SPEED_OF_LIGHT; double y = 365.2425 * GSL_CONST_CGSM_DAY; gsl_test_rel (ly, c * y, 1e-6, "light year (cgsm)"); } { double micro = GSL_CONST_NUM_MICRO; double mega = GSL_CONST_NUM_MEGA; double kilo = GSL_CONST_NUM_KILO; gsl_test_rel (mega/kilo, 1/(micro*kilo), 1e-10, "kilo (mega/kilo, 1/(micro*kilo))"); } { double d = GSL_CONST_MKSA_DEBYE; double c = GSL_CONST_MKSA_SPEED_OF_LIGHT; double desu = d * c * 1000.0; gsl_test_rel (desu, 1e-18, 1e-10, "debye (esu)"); } { double k = GSL_CONST_MKSA_BOLTZMANN; double c = GSL_CONST_MKSA_SPEED_OF_LIGHT; double h = GSL_CONST_MKSA_PLANCKS_CONSTANT_H; double s = 2 * pow(M_PI, 5.0) * pow(k, 4.0) / (15 * pow(c, 2.0) * pow(h, 3.0)); double sigma = GSL_CONST_MKSA_STEFAN_BOLTZMANN_CONSTANT; gsl_test_rel(s, sigma, 1e-10, "stefan boltzmann constant"); } exit (gsl_test_summary ()); } gsl/test/0000755000175000017500000000000014057135461010702 5ustar eddeddgsl/test/Makefile.in0000664000175000017500000005212414057135461012755 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgsltest_la_LIBADD = am_libgsltest_la_OBJECTS = results.lo libgsltest_la_OBJECTS = $(am_libgsltest_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/results.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgsltest_la_SOURCES) DIST_SOURCES = $(libgsltest_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgsltest.la pkginclude_HEADERS = gsl_test.h libgsltest_la_SOURCES = results.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgsltest.la: $(libgsltest_la_OBJECTS) $(libgsltest_la_DEPENDENCIES) $(EXTRA_libgsltest_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgsltest_la_OBJECTS) $(libgsltest_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/results.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/results.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/results.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pkgincludeHEADERS install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-pkgincludeHEADERS .PRECIOUS: Makefile #check_PROGRAMS = test #TESTS = test #test_SOURCES = test_errnos.c #test_LDADD = libgsltest.la ../sys/libgslsys.la ../utils/libutils.la # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/test/gsl_test.h0000644000175000017500000000347213536674414012714 0ustar eddedd/* err/gsl_test.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_TEST_H__ #define __GSL_TEST_H__ #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS void gsl_test (int status, const char *test_description, ...); void gsl_test_rel (double result, double expected, double relative_error, const char *test_description, ...) ; void gsl_test_abs (double result, double expected, double absolute_error, const char *test_description, ...) ; void gsl_test_factor (double result, double expected, double factor, const char *test_description, ...) ; void gsl_test_int (int result, int expected, const char *test_description, ...) ; void gsl_test_str (const char * result, const char * expected, const char *test_description, ...) ; void gsl_test_verbose (int verbose) ; int gsl_test_summary (void) ; __END_DECLS #endif /* __GSL_TEST_H__ */ gsl/test/ChangeLog0000644000175000017500000000214513536674414012465 0ustar eddedd2005-06-21 Brian Gough * results.c: now displayed PASS lines only if GSL_TEST_VERBOSE=1, otherwise only display fail lines by default. Thu Sep 12 22:56:31 2002 Brian Gough * results.c (gsl_test_rel): catch NaN (gsl_test_abs): catch NaN Fri Sep 28 10:40:21 2001 Brian Gough * results.c: use the definition STDC_HEADERS instead of __STDC__ as recommended by the autoconf manual Thu Sep 6 10:17:10 2001 Brian Gough * results.c (gsl_test_factor): fixed factor to work for case of 0==0 without dividing by zero Wed Nov 29 10:42:57 2000 Brian Gough * results.c (gsl_test_factor): added a test for two results being within a given factor of each other (e.g. "result should be good to within a factor of 2"). Note that this is different from the definition of relative error, which starts with a measurement of the difference by subtraction. Fri May 5 11:20:36 2000 Brian Gough * split out gsl_test code from err/ directory gsl/test/Makefile.am0000644000175000017500000000036113536674414012745 0ustar eddeddnoinst_LTLIBRARIES = libgsltest.la pkginclude_HEADERS = gsl_test.h libgsltest_la_SOURCES = results.c #check_PROGRAMS = test #TESTS = test #test_SOURCES = test_errnos.c #test_LDADD = libgsltest.la ../sys/libgslsys.la ../utils/libutils.la gsl/test/results.c0000644000175000017500000002215013536674414012556 0ustar eddedd/* err/test_results.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #if HAVE_VPRINTF #ifdef STDC_HEADERS #include #else #include #endif #endif #include static unsigned int tests = 0; static unsigned int passed = 0; static unsigned int failed = 0; static unsigned int verbose = 0; static void initialise (void) { const char * p = getenv("GSL_TEST_VERBOSE"); /* 0 = show failures only (we always want to see these) */ /* 1 = show passes and failures */ if (p == 0) /* environment variable is not set */ return ; if (*p == '\0') /* environment variable is empty */ return ; verbose = strtoul (p, 0, 0); return; } static void update (int s) { tests++; if (s == 0) { passed++; } else { failed++; } } void gsl_test (int status, const char *test_description,...) { if (!tests) initialise(); update (status); if (status || verbose) { printf (status ? "FAIL: " : "PASS: "); #if HAVE_VPRINTF { va_list ap; #ifdef STDC_HEADERS va_start (ap, test_description); #else va_start (ap); #endif vprintf (test_description, ap); va_end (ap); } #endif if (status && !verbose) printf(" [%u]", tests); printf("\n"); fflush (stdout); } } void gsl_test_rel (double result, double expected, double relative_error, const char *test_description,...) { int status ; if (!tests) initialise(); /* Check for NaN vs inf vs number */ if (gsl_isnan(result) || gsl_isnan(expected)) { status = gsl_isnan(result) != gsl_isnan(expected); } else if (gsl_isinf(result) || gsl_isinf(expected)) { status = gsl_isinf(result) != gsl_isinf(expected); } else if ((expected > 0 && expected < GSL_DBL_MIN) || (expected < 0 && expected > -(GSL_DBL_MIN))) { status = -1; } else if (expected != 0 ) { status = (fabs(result-expected)/fabs(expected) > relative_error) ; } else { status = (fabs(result) > relative_error) ; } update (status); if (status || verbose) { printf (status ? "FAIL: " : "PASS: "); #if HAVE_VPRINTF { va_list ap; #ifdef STDC_HEADERS va_start (ap, test_description); #else va_start (ap); #endif vprintf (test_description, ap); va_end (ap); } #endif if (status == 0) { if (strlen(test_description) < 45) { printf(" (%g observed vs %g expected)", result, expected) ; } else { printf(" (%g obs vs %g exp)", result, expected) ; } } else { printf(" (%.18g observed vs %.18g expected)", result, expected) ; } if (status == -1) { printf(" [test uses subnormal value]") ; } if (status && !verbose) printf(" [%u]", tests); printf ("\n") ; fflush (stdout); } } void gsl_test_abs (double result, double expected, double absolute_error, const char *test_description,...) { int status ; if (!tests) initialise(); /* Check for NaN vs inf vs number */ if (gsl_isnan(result) || gsl_isnan(expected)) { status = gsl_isnan(result) != gsl_isnan(expected); } else if (gsl_isinf(result) || gsl_isinf(expected)) { status = gsl_isinf(result) != gsl_isinf(expected); } else if ((expected > 0 && expected < GSL_DBL_MIN) || (expected < 0 && expected > -(GSL_DBL_MIN))) { status = -1; } else { status = fabs(result-expected) > absolute_error ; } update (status); if (status || verbose) { printf (status ? "FAIL: " : "PASS: "); #if HAVE_VPRINTF { va_list ap; #ifdef STDC_HEADERS va_start (ap, test_description); #else va_start (ap); #endif vprintf (test_description, ap); va_end (ap); } #endif if (status == 0) { if (strlen(test_description) < 45) { printf(" (%g observed vs %g expected)", result, expected) ; } else { printf(" (%g obs vs %g exp)", result, expected) ; } } else { printf(" (%.18g observed vs %.18g expected)", result, expected) ; } if (status == -1) { printf(" [test uses subnormal value]") ; } if (status && !verbose) printf(" [%u]", tests); printf ("\n") ; fflush (stdout); } } void gsl_test_factor (double result, double expected, double factor, const char *test_description,...) { int status; if (!tests) initialise(); if ((expected > 0 && expected < GSL_DBL_MIN) || (expected < 0 && expected > -(GSL_DBL_MIN))) { status = -1; } else if (result == expected) { status = 0; } else if (expected == 0.0) { status = (result > expected || result < expected); } else { double u = result / expected; status = (u > factor || u < 1.0 / factor) ; } update (status); if (status || verbose) { printf (status ? "FAIL: " : "PASS: "); #if HAVE_VPRINTF { va_list ap; #ifdef STDC_HEADERS va_start (ap, test_description); #else va_start (ap); #endif vprintf (test_description, ap); va_end (ap); } #endif if (status == 0) { if (strlen(test_description) < 45) { printf(" (%g observed vs %g expected)", result, expected) ; } else { printf(" (%g obs vs %g exp)", result, expected) ; } } else { printf(" (%.18g observed vs %.18g expected)", result, expected) ; } if (status == -1) { printf(" [test uses subnormal value]") ; } if (status && !verbose) printf(" [%u]", tests); printf ("\n") ; fflush (stdout); } } void gsl_test_int (int result, int expected, const char *test_description,...) { int status = (result != expected) ; if (!tests) initialise(); update (status); if (status || verbose) { printf (status ? "FAIL: " : "PASS: "); #if HAVE_VPRINTF { va_list ap; #ifdef STDC_HEADERS va_start (ap, test_description); #else va_start (ap); #endif vprintf (test_description, ap); va_end (ap); } #endif if (status == 0) { printf(" (%d observed vs %d expected)", result, expected) ; } else { printf(" (%d observed vs %d expected)", result, expected) ; } if (status && !verbose) printf(" [%u]", tests); printf ("\n"); fflush (stdout); } } void gsl_test_str (const char * result, const char * expected, const char *test_description,...) { int status = strcmp(result,expected) ; if (!tests) initialise(); update (status); if (status || verbose) { printf (status ? "FAIL: " : "PASS: "); #if HAVE_VPRINTF { va_list ap; #ifdef STDC_HEADERS va_start (ap, test_description); #else va_start (ap); #endif vprintf (test_description, ap); va_end (ap); } #endif if (status) { printf(" (%s observed vs %s expected)", result, expected) ; } if (status && !verbose) printf(" [%u]", tests); printf ("\n"); fflush (stdout); } } void gsl_test_verbose (int v) { verbose = v; } int gsl_test_summary (void) { if (verbose && 0) /* FIXME: turned it off, this annoys me */ printf ("%d tests, passed %d, failed %d.\n", tests, passed, failed); if (failed != 0) { return EXIT_FAILURE; } if (tests != passed + failed) { if (verbose) printf ("TEST RESULTS DO NOT ADD UP %d != %d + %d\n", tests, passed, failed); return EXIT_FAILURE; } if (passed == tests) { if (!verbose) /* display a summary of passed tests */ printf ("Completed [%d/%d]\n", passed, tests); return EXIT_SUCCESS; } return EXIT_FAILURE; } gsl/multiroots/0000755000175000017500000000000014057135461012144 5ustar eddeddgsl/multiroots/fdjac.c0000644000175000017500000000561213536674414013372 0ustar eddedd/* multiroots/fdjac.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include int gsl_multiroot_fdjacobian (gsl_multiroot_function * F, const gsl_vector * x, const gsl_vector * f, double epsrel, gsl_matrix * jacobian) { const size_t n = x->size; const size_t m = f->size; const size_t n1 = jacobian->size1; const size_t n2 = jacobian->size2; int status = 0; if (m != n1 || n != n2) { GSL_ERROR ("function and jacobian are not conformant", GSL_EBADLEN); } { size_t i,j; gsl_vector *x1, *f1; x1 = gsl_vector_alloc (n); if (x1 == 0) { GSL_ERROR ("failed to allocate space for x1 workspace", GSL_ENOMEM); } f1 = gsl_vector_alloc (m); if (f1 == 0) { gsl_vector_free (x1); GSL_ERROR ("failed to allocate space for f1 workspace", GSL_ENOMEM); } gsl_vector_memcpy (x1, x); /* copy x into x1 */ for (j = 0; j < n; j++) { double xj = gsl_vector_get (x, j); double dx = epsrel * fabs (xj); if (dx == 0) { dx = epsrel; } gsl_vector_set (x1, j, xj + dx); { int f_stat = GSL_MULTIROOT_FN_EVAL (F, x1, f1); if (f_stat != GSL_SUCCESS) { status = GSL_EBADFUNC; break; /* n.b. avoid memory leak for x1,f1 */ } } gsl_vector_set (x1, j, xj); for (i = 0; i < m; i++) { double g1 = gsl_vector_get (f1, i); double g0 = gsl_vector_get (f, i); gsl_matrix_set (jacobian, i, j, (g1 - g0) / dx); } { gsl_vector_view col = gsl_matrix_column (jacobian, j); int null_col = gsl_vector_isnull (&col.vector); /* if column is null, return an error - this may be due to dx being too small. Try increasing epsrel */ if (null_col) { status = GSL_ESING; } } } gsl_vector_free (x1); gsl_vector_free (f1); } if (status) return status; else return GSL_SUCCESS; } gsl/multiroots/Makefile.in0000664000175000017500000011222514057135461014216 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -*-makefile-*- VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = multiroots ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslmultiroots_la_LIBADD = am_libgslmultiroots_la_OBJECTS = fdjac.lo fsolver.lo fdfsolver.lo \ convergence.lo newton.lo gnewton.lo dnewton.lo broyden.lo \ hybrid.lo hybridj.lo libgslmultiroots_la_OBJECTS = $(am_libgslmultiroots_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_funcs.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslmultiroots.la ../linalg/libgsllinalg.la \ ../blas/libgslblas.la ../cblas/libgslcblas.la \ ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la \ ../vector/libgslvector.la ../block/libgslblock.la \ ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/broyden.Plo \ ./$(DEPDIR)/convergence.Plo ./$(DEPDIR)/dnewton.Plo \ ./$(DEPDIR)/fdfsolver.Plo ./$(DEPDIR)/fdjac.Plo \ ./$(DEPDIR)/fsolver.Plo ./$(DEPDIR)/gnewton.Plo \ ./$(DEPDIR)/hybrid.Plo ./$(DEPDIR)/hybridj.Plo \ ./$(DEPDIR)/newton.Plo ./$(DEPDIR)/test.Po \ ./$(DEPDIR)/test_funcs.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslmultiroots_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslmultiroots_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslmultiroots.la pkginclude_HEADERS = gsl_multiroots.h noinst_HEADERS = enorm.c dogleg.c AM_CPPFLAGS = -I$(top_srcdir) libgslmultiroots_la_SOURCES = fdjac.c fsolver.c fdfsolver.c convergence.c newton.c gnewton.c dnewton.c broyden.c hybrid.c hybridj.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_funcs.c test_funcs.h test_LDADD = libgslmultiroots.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu multiroots/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu multiroots/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslmultiroots.la: $(libgslmultiroots_la_OBJECTS) $(libgslmultiroots_la_DEPENDENCIES) $(EXTRA_libgslmultiroots_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslmultiroots_la_OBJECTS) $(libgslmultiroots_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/broyden.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convergence.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dnewton.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdfsolver.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdjac.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsolver.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnewton.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hybrid.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hybridj.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newton.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_funcs.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/broyden.Plo -rm -f ./$(DEPDIR)/convergence.Plo -rm -f ./$(DEPDIR)/dnewton.Plo -rm -f ./$(DEPDIR)/fdfsolver.Plo -rm -f ./$(DEPDIR)/fdjac.Plo -rm -f ./$(DEPDIR)/fsolver.Plo -rm -f ./$(DEPDIR)/gnewton.Plo -rm -f ./$(DEPDIR)/hybrid.Plo -rm -f ./$(DEPDIR)/hybridj.Plo -rm -f ./$(DEPDIR)/newton.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_funcs.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/broyden.Plo -rm -f ./$(DEPDIR)/convergence.Plo -rm -f ./$(DEPDIR)/dnewton.Plo -rm -f ./$(DEPDIR)/fdfsolver.Plo -rm -f ./$(DEPDIR)/fdjac.Plo -rm -f ./$(DEPDIR)/fsolver.Plo -rm -f ./$(DEPDIR)/gnewton.Plo -rm -f ./$(DEPDIR)/hybrid.Plo -rm -f ./$(DEPDIR)/hybridj.Plo -rm -f ./$(DEPDIR)/newton.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_funcs.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/multiroots/test_funcs.h0000644000175000017500000000705513536674414014510 0ustar eddedd/* multiroots/test_funcs.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ typedef void (*initpt_function) (gsl_vector * x); extern gsl_multiroot_function_fdf rosenbrock; void rosenbrock_initpt (gsl_vector * x); int rosenbrock_f (const gsl_vector * x, void *params, gsl_vector * f); int rosenbrock_df (const gsl_vector * x, void *params, gsl_matrix * df); int rosenbrock_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df); extern gsl_multiroot_function_fdf roth; void roth_initpt (gsl_vector * x); int roth_f (const gsl_vector * x, void *params, gsl_vector * f); int roth_df (const gsl_vector * x, void *params, gsl_matrix * df); int roth_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df); extern gsl_multiroot_function_fdf brownscal; void brownscal_initpt (gsl_vector * x); int brownscal_f (const gsl_vector * x, void *params, gsl_vector * f); int brownscal_df (const gsl_vector * x, void *params, gsl_matrix * df); int brownscal_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df); extern gsl_multiroot_function_fdf powellscal; void powellscal_initpt (gsl_vector * x); int powellscal_f (const gsl_vector * x, void *params, gsl_vector * f); int powellscal_df (const gsl_vector * x, void *params, gsl_matrix * df); int powellscal_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df); extern gsl_multiroot_function_fdf powellsing; void powellsing_initpt (gsl_vector * x); int powellsing_f (const gsl_vector * x, void *params, gsl_vector * f); int powellsing_df (const gsl_vector * x, void *params, gsl_matrix * df); int powellsing_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df); extern gsl_multiroot_function_fdf wood; void wood_initpt (gsl_vector * x); int wood_f (const gsl_vector * x, void *params, gsl_vector * f); int wood_df (const gsl_vector * x, void *params, gsl_matrix * df); int wood_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df); extern gsl_multiroot_function_fdf helical; void helical_initpt (gsl_vector * x); int helical_f (const gsl_vector * x, void *params, gsl_vector * f); int helical_df (const gsl_vector * x, void *params, gsl_matrix * df); int helical_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df); extern gsl_multiroot_function_fdf dbv; void dbv_initpt (gsl_vector * x); int dbv_f (const gsl_vector * x, void *params, gsl_vector * f); int dbv_df (const gsl_vector * x, void *params, gsl_matrix * df); int dbv_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df); extern gsl_multiroot_function_fdf trig; void trig_initpt (gsl_vector * x); int trig_f (const gsl_vector * x, void *params, gsl_vector * f); int trig_df (const gsl_vector * x, void *params, gsl_matrix * df); int trig_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df); gsl/multiroots/newton.c0000644000175000017500000000727213536674414013641 0ustar eddedd/* multiroots/newton.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include typedef struct { gsl_matrix * lu; gsl_permutation * permutation; } newton_state_t; static int newton_alloc (void * vstate, size_t n); static int newton_set (void * vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx); static int newton_iterate (void * vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx); static void newton_free (void * vstate); static int newton_alloc (void * vstate, size_t n) { newton_state_t * state = (newton_state_t *) vstate; gsl_permutation * p; gsl_matrix * m; m = gsl_matrix_calloc (n,n); if (m == 0) { GSL_ERROR ("failed to allocate space for lu", GSL_ENOMEM); } state->lu = m ; p = gsl_permutation_calloc (n); if (p == 0) { gsl_matrix_free(m); GSL_ERROR ("failed to allocate space for permutation", GSL_ENOMEM); } state->permutation = p ; return GSL_SUCCESS; } static int newton_set (void * vstate, gsl_multiroot_function_fdf * FDF, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx) { newton_state_t * state = (newton_state_t *) vstate; size_t i, n = FDF->n ; state = 0 ; /* avoid warnings about unused parameters */ GSL_MULTIROOT_FN_EVAL_F_DF (FDF, x, f, J); for (i = 0; i < n; i++) { gsl_vector_set (dx, i, 0.0); } return GSL_SUCCESS; } static int newton_iterate (void * vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx) { newton_state_t * state = (newton_state_t *) vstate; int signum; size_t i; size_t n = fdf->n ; gsl_matrix_memcpy (state->lu, J); gsl_linalg_LU_decomp (state->lu, state->permutation, &signum); { int status = gsl_linalg_LU_solve (state->lu, state->permutation, f, dx); if (status) return status; } for (i = 0; i < n; i++) { double e = gsl_vector_get (dx, i); double y = gsl_vector_get (x, i); gsl_vector_set (dx, i, -e); gsl_vector_set (x, i, y - e); } { int status = GSL_MULTIROOT_FN_EVAL_F_DF (fdf, x, f, J); if (status != GSL_SUCCESS) { return GSL_EBADFUNC; } } return GSL_SUCCESS; } static void newton_free (void * vstate) { newton_state_t * state = (newton_state_t *) vstate; gsl_matrix_free(state->lu); gsl_permutation_free(state->permutation); } static const gsl_multiroot_fdfsolver_type newton_type = {"newton", /* name */ sizeof (newton_state_t), &newton_alloc, &newton_set, &newton_iterate, &newton_free}; const gsl_multiroot_fdfsolver_type * gsl_multiroot_fdfsolver_newton = &newton_type; gsl/multiroots/gnewton.c0000644000175000017500000001206113536674414014000 0ustar eddedd/* multiroots/gnewton.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include "enorm.c" /* Simple globally convergent Newton method (rejects uphill steps) */ typedef struct { double phi; gsl_vector * x_trial; gsl_vector * d; gsl_matrix * lu; gsl_permutation * permutation; } gnewton_state_t; static int gnewton_alloc (void * vstate, size_t n); static int gnewton_set (void * vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx); static int gnewton_iterate (void * vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx); static void gnewton_free (void * vstate); static int gnewton_alloc (void * vstate, size_t n) { gnewton_state_t * state = (gnewton_state_t *) vstate; gsl_vector * d, * x_trial ; gsl_permutation * p; gsl_matrix * m; m = gsl_matrix_calloc (n,n); if (m == 0) { GSL_ERROR ("failed to allocate space for lu", GSL_ENOMEM); } state->lu = m ; p = gsl_permutation_calloc (n); if (p == 0) { gsl_matrix_free(m); GSL_ERROR ("failed to allocate space for permutation", GSL_ENOMEM); } state->permutation = p ; d = gsl_vector_calloc (n); if (d == 0) { gsl_permutation_free(p); gsl_matrix_free(m); GSL_ERROR ("failed to allocate space for d", GSL_ENOMEM); } state->d = d; x_trial = gsl_vector_calloc (n); if (x_trial == 0) { gsl_vector_free(d); gsl_permutation_free(p); gsl_matrix_free(m); GSL_ERROR ("failed to allocate space for x_trial", GSL_ENOMEM); } state->x_trial = x_trial; return GSL_SUCCESS; } static int gnewton_set (void * vstate, gsl_multiroot_function_fdf * FDF, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx) { gnewton_state_t * state = (gnewton_state_t *) vstate; size_t i, n = FDF->n ; GSL_MULTIROOT_FN_EVAL_F_DF (FDF, x, f, J); for (i = 0; i < n; i++) { gsl_vector_set (dx, i, 0.0); } state->phi = enorm(f); return GSL_SUCCESS; } static int gnewton_iterate (void * vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx) { gnewton_state_t * state = (gnewton_state_t *) vstate; int signum ; double t, phi0, phi1; size_t i; size_t n = fdf->n ; gsl_matrix_memcpy (state->lu, J); gsl_linalg_LU_decomp (state->lu, state->permutation, &signum); { int status = gsl_linalg_LU_solve (state->lu, state->permutation, f, state->d); if (status) return status; } t = 1; phi0 = state->phi; new_step: for (i = 0; i < n; i++) { double di = gsl_vector_get (state->d, i); double xi = gsl_vector_get (x, i); gsl_vector_set (state->x_trial, i, xi - t*di); } { int status = GSL_MULTIROOT_FN_EVAL_F (fdf, state->x_trial, f); if (status != GSL_SUCCESS) { return GSL_EBADFUNC; } } phi1 = enorm (f); if (phi1 > phi0 && t > GSL_DBL_EPSILON) { /* full step goes uphill, take a reduced step instead */ double theta = phi1 / phi0; double u = (sqrt(1.0 + 6.0 * theta) - 1.0) / (3.0 * theta); t *= u ; goto new_step; } /* copy x_trial into x */ gsl_vector_memcpy (x, state->x_trial); for (i = 0; i < n; i++) { double di = gsl_vector_get (state->d, i); gsl_vector_set (dx, i, -t*di); } { int status = GSL_MULTIROOT_FN_EVAL_DF (fdf, x, J); if (status != GSL_SUCCESS) { return GSL_EBADFUNC; } } state->phi = phi1; return GSL_SUCCESS; } static void gnewton_free (void * vstate) { gnewton_state_t * state = (gnewton_state_t *) vstate; gsl_vector_free(state->d); gsl_vector_free(state->x_trial); gsl_matrix_free(state->lu); gsl_permutation_free(state->permutation); } static const gsl_multiroot_fdfsolver_type gnewton_type = {"gnewton", /* name */ sizeof (gnewton_state_t), &gnewton_alloc, &gnewton_set, &gnewton_iterate, &gnewton_free}; const gsl_multiroot_fdfsolver_type * gsl_multiroot_fdfsolver_gnewton = &gnewton_type; gsl/multiroots/hybridj.c0000644000175000017500000003364513536674414013765 0ustar eddedd/* multiroots/hybridj.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include "dogleg.c" typedef struct { size_t iter; size_t ncfail; size_t ncsuc; size_t nslow1; size_t nslow2; double fnorm; double delta; gsl_matrix *q; gsl_matrix *r; gsl_vector *tau; gsl_vector *diag; gsl_vector *qtf; gsl_vector *newton; gsl_vector *gradient; gsl_vector *x_trial; gsl_vector *f_trial; gsl_vector *df; gsl_vector *qtdf; gsl_vector *rdx; gsl_vector *w; gsl_vector *v; } hybridj_state_t; static int hybridj_alloc (void *vstate, size_t n); static int hybridj_set (void *vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx); static int hybridsj_set (void *vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx); static int hybridj_set_impl (void *vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx, int scale); static int hybridj_iterate (void *vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx); static void hybridj_free (void *vstate); static int hybridj_iterate_impl (void *vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx, int scale); static int hybridj_alloc (void *vstate, size_t n) { hybridj_state_t *state = (hybridj_state_t *) vstate; gsl_matrix *q, *r; gsl_vector *tau, *diag, *qtf, *newton, *gradient, *x_trial, *f_trial, *df, *qtdf, *rdx, *w, *v; q = gsl_matrix_calloc (n, n); if (q == 0) { GSL_ERROR ("failed to allocate space for q", GSL_ENOMEM); } state->q = q; r = gsl_matrix_calloc (n, n); if (r == 0) { gsl_matrix_free (q); GSL_ERROR ("failed to allocate space for r", GSL_ENOMEM); } state->r = r; tau = gsl_vector_calloc (n); if (tau == 0) { gsl_matrix_free (q); gsl_matrix_free (r); GSL_ERROR ("failed to allocate space for tau", GSL_ENOMEM); } state->tau = tau; diag = gsl_vector_calloc (n); if (diag == 0) { gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); GSL_ERROR ("failed to allocate space for diag", GSL_ENOMEM); } state->diag = diag; qtf = gsl_vector_calloc (n); if (qtf == 0) { gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); GSL_ERROR ("failed to allocate space for qtf", GSL_ENOMEM); } state->qtf = qtf; newton = gsl_vector_calloc (n); if (newton == 0) { gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); GSL_ERROR ("failed to allocate space for newton", GSL_ENOMEM); } state->newton = newton; gradient = gsl_vector_calloc (n); if (gradient == 0) { gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); GSL_ERROR ("failed to allocate space for gradient", GSL_ENOMEM); } state->gradient = gradient; x_trial = gsl_vector_calloc (n); if (x_trial == 0) { gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); GSL_ERROR ("failed to allocate space for x_trial", GSL_ENOMEM); } state->x_trial = x_trial; f_trial = gsl_vector_calloc (n); if (f_trial == 0) { gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); GSL_ERROR ("failed to allocate space for f_trial", GSL_ENOMEM); } state->f_trial = f_trial; df = gsl_vector_calloc (n); if (df == 0) { gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); GSL_ERROR ("failed to allocate space for df", GSL_ENOMEM); } state->df = df; qtdf = gsl_vector_calloc (n); if (qtdf == 0) { gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); gsl_vector_free (df); GSL_ERROR ("failed to allocate space for qtdf", GSL_ENOMEM); } state->qtdf = qtdf; rdx = gsl_vector_calloc (n); if (rdx == 0) { gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); gsl_vector_free (df); gsl_vector_free (qtdf); GSL_ERROR ("failed to allocate space for rdx", GSL_ENOMEM); } state->rdx = rdx; w = gsl_vector_calloc (n); if (w == 0) { gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); gsl_vector_free (df); gsl_vector_free (qtdf); gsl_vector_free (rdx); GSL_ERROR ("failed to allocate space for w", GSL_ENOMEM); } state->w = w; v = gsl_vector_calloc (n); if (v == 0) { gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); gsl_vector_free (df); gsl_vector_free (qtdf); gsl_vector_free (rdx); gsl_vector_free (w); GSL_ERROR ("failed to allocate space for v", GSL_ENOMEM); } state->v = v; return GSL_SUCCESS; } static int hybridj_set (void *vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx) { int status = hybridj_set_impl (vstate, fdf, x, f, J, dx, 0); return status ; } static int hybridsj_set (void *vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx) { int status = hybridj_set_impl (vstate, fdf, x, f, J, dx, 1); return status ; } static int hybridj_set_impl (void *vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx, int scale) { hybridj_state_t *state = (hybridj_state_t *) vstate; gsl_matrix *q = state->q; gsl_matrix *r = state->r; gsl_vector *tau = state->tau; gsl_vector *diag = state->diag; GSL_MULTIROOT_FN_EVAL_F_DF (fdf, x, f, J); state->iter = 1; state->fnorm = enorm (f); state->ncfail = 0; state->ncsuc = 0; state->nslow1 = 0; state->nslow2 = 0; gsl_vector_set_all (dx, 0.0); /* Store column norms in diag */ if (scale) compute_diag (J, diag); else gsl_vector_set_all (diag, 1.0); /* Set delta to factor |D x| or to factor if |D x| is zero */ state->delta = compute_delta (diag, x); /* Factorize J into QR decomposition */ gsl_linalg_QR_decomp (J, tau); gsl_linalg_QR_unpack (J, tau, q, r); return GSL_SUCCESS; } static int hybridj_iterate (void *vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx) { int status = hybridj_iterate_impl (vstate, fdf, x, f, J, dx, 0); return status; } static int hybridsj_iterate (void *vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx) { int status = hybridj_iterate_impl (vstate, fdf, x, f, J, dx, 1); return status; } static int hybridj_iterate_impl (void *vstate, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx, int scale) { hybridj_state_t *state = (hybridj_state_t *) vstate; const double fnorm = state->fnorm; gsl_matrix *q = state->q; gsl_matrix *r = state->r; gsl_vector *tau = state->tau; gsl_vector *diag = state->diag; gsl_vector *qtf = state->qtf; gsl_vector *x_trial = state->x_trial; gsl_vector *f_trial = state->f_trial; gsl_vector *df = state->df; gsl_vector *qtdf = state->qtdf; gsl_vector *rdx = state->rdx; gsl_vector *w = state->w; gsl_vector *v = state->v; double prered, actred; double pnorm, fnorm1, fnorm1p; double ratio; double p1 = 0.1, p5 = 0.5, p001 = 0.001, p0001 = 0.0001; /* Compute qtf = Q^T f */ compute_qtf (q, f, qtf); /* Compute dogleg step */ dogleg (r, qtf, diag, state->delta, state->newton, state->gradient, dx); /* Take a trial step */ compute_trial_step (x, dx, state->x_trial); pnorm = scaled_enorm (diag, dx); if (state->iter == 1) { if (pnorm < state->delta) { state->delta = pnorm; } } /* Evaluate function at x + p */ { int status = GSL_MULTIROOT_FN_EVAL_F (fdf, x_trial, f_trial); if (status != GSL_SUCCESS) { return GSL_EBADFUNC; } } /* Set df = f_trial - f */ compute_df (f_trial, f, df); /* Compute the scaled actual reduction */ fnorm1 = enorm (f_trial); actred = compute_actual_reduction (fnorm, fnorm1); /* Compute rdx = R dx */ compute_rdx (r, dx, rdx); /* Compute the scaled predicted reduction phi1p = |Q^T f + R dx| */ fnorm1p = enorm_sum (qtf, rdx); prered = compute_predicted_reduction (fnorm, fnorm1p); /* Compute the ratio of the actual to predicted reduction */ if (prered > 0) { ratio = actred / prered; } else { ratio = 0; } /* Update the step bound */ if (ratio < p1) { state->ncsuc = 0; state->ncfail++; state->delta *= p5; } else { state->ncfail = 0; state->ncsuc++; if (ratio >= p5 || state->ncsuc > 1) state->delta = GSL_MAX (state->delta, pnorm / p5); if (fabs (ratio - 1) <= p1) state->delta = pnorm / p5; } /* Test for successful iteration */ if (ratio >= p0001) { gsl_vector_memcpy (x, x_trial); gsl_vector_memcpy (f, f_trial); state->fnorm = fnorm1; state->iter++; } /* Determine the progress of the iteration */ state->nslow1++; if (actred >= p001) state->nslow1 = 0; if (actred >= p1) state->nslow2 = 0; if (state->ncfail == 2) { { int status = GSL_MULTIROOT_FN_EVAL_DF (fdf, x, J); if (status != GSL_SUCCESS) { return GSL_EBADFUNC; } } state->nslow2++; if (state->iter == 1) { if (scale) compute_diag (J, diag); state->delta = compute_delta (diag, x); } else { if (scale) update_diag (J, diag); } /* Factorize J into QR decomposition */ gsl_linalg_QR_decomp (J, tau); gsl_linalg_QR_unpack (J, tau, q, r); return GSL_SUCCESS; } /* Compute qtdf = Q^T df, w = (Q^T df - R dx)/|dx|, v = D^2 dx/|dx| */ compute_qtf (q, df, qtdf); compute_wv (qtdf, rdx, dx, diag, pnorm, w, v); /* Rank-1 update of the jacobian Q'R' = Q(R + w v^T) */ gsl_linalg_QR_update (q, r, w, v); /* No progress as measured by jacobian evaluations */ if (state->nslow2 == 5) { return GSL_ENOPROGJ; } /* No progress as measured by function evaluations */ if (state->nslow1 == 10) { return GSL_ENOPROG; } return GSL_SUCCESS; } static void hybridj_free (void *vstate) { hybridj_state_t *state = (hybridj_state_t *) vstate; gsl_vector_free (state->v); gsl_vector_free (state->w); gsl_vector_free (state->rdx); gsl_vector_free (state->qtdf); gsl_vector_free (state->df); gsl_vector_free (state->f_trial); gsl_vector_free (state->x_trial); gsl_vector_free (state->gradient); gsl_vector_free (state->newton); gsl_vector_free (state->qtf); gsl_vector_free (state->diag); gsl_vector_free (state->tau); gsl_matrix_free (state->r); gsl_matrix_free (state->q); } static const gsl_multiroot_fdfsolver_type hybridj_type = { "hybridj", /* name */ sizeof (hybridj_state_t), &hybridj_alloc, &hybridj_set, &hybridj_iterate, &hybridj_free }; static const gsl_multiroot_fdfsolver_type hybridsj_type = { "hybridsj", /* name */ sizeof (hybridj_state_t), &hybridj_alloc, &hybridsj_set, &hybridsj_iterate, &hybridj_free }; const gsl_multiroot_fdfsolver_type *gsl_multiroot_fdfsolver_hybridj = &hybridj_type; const gsl_multiroot_fdfsolver_type *gsl_multiroot_fdfsolver_hybridsj = &hybridsj_type; gsl/multiroots/ChangeLog0000644000175000017500000001034213536674414013725 0ustar eddedd2011-01-24 Brian Gough * gnewton.c (gnewton_iterate): check for singular jacobian * newton.c (newton_iterate): check for singular jacobian 2009-07-09 Brian Gough * fsolver.c (gsl_multiroot_fsolver_free): handle NULL argument in free * fdfsolver.c (gsl_multiroot_fdfsolver_free): handle NULL argument in free 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2007-11-09 Brian Gough * convergence.c (gsl_multiroot_test_delta): accept dxi = 0 2007-08-27 Brian Gough * fdjac.c (gsl_multiroot_fdjacobian): detect null columns (dx too small) (gsl_multiroot_fdjacobian): avoid memory leak for x1,f1 2007-01-26 Brian Gough * fsolver.c (gsl_multiroot_fsolver_set): made vector argument x const * fdfsolver.c (gsl_multiroot_fdfsolver_set): made vector argument x const Tue Nov 12 22:26:40 2002 Brian Gough * newton.c (newton_alloc): return error code, not null * hybridj.c (hybridj_alloc): return error code, not null * hybrid.c (hybrid_alloc): return error code, not null * gnewton.c (gnewton_alloc): return error code, not null * dnewton.c (dnewton_alloc): return error code, not null * broyden.c (broyden_alloc): return error code, not null Wed May 1 21:40:55 2002 Brian Gough * fdfsolver.c (gsl_multiroot_fdfsolver_dx): new function to return dx (gsl_multiroot_fdfsolver_f): new function to return f * fsolver.c (gsl_multiroot_fsolver_dx): new function to return dx (gsl_multiroot_fsolver_f): new function to return f Sat Jan 26 17:11:34 2002 Brian Gough * hybrid.c (set): fix broken 'if' statement Thu Jan 10 19:26:55 2002 Brian Gough * hybrid.c dnewton.c: return status values for user-function (Theis Peter Hansen) Tue Jun 19 23:40:18 2001 Brian Gough * hybrid.c: removed workspace for linalg calls, no longer needed * hybridj.c: removed workspace for linalg calls, no longer needed Wed Jun 6 13:31:18 2001 Brian Gough * hybridj.c: updated to use new QR calling convention (now passes workspace) * hybrid.c: updated to use new QR calling convention (now passes workspace) Mon Apr 23 12:55:39 2001 Brian Gough * Makefile.am (test_LDADD): added cblas lib Mon Apr 16 20:18:08 2001 Brian Gough * dnewton.c (dnewton_iterate): removed unnecessary status variable Sun Feb 18 11:26:45 2001 Brian Gough * fdfsolver.c fsolver.c: changed so that the solver _alloc function no longer calls _set, the user must do that separately. Thu Nov 30 21:48:39 2000 Brian Gough * newton.c (newton_iterate): return GSL_EBADFUNC if error in function evaluation * hybridj.c (iterate): return GSL_EBADFUNC if error in function evaluation * hybrid.c (iterate): return GSL_EBADFUNC if error in function evaluation * gnewton.c (gnewton_iterate): return GSL_EBADFUNC if error in function evaluation * fdjac.c (gsl_multiroot_fdjacobian): return GSL_EBADFUNC if error in function evaluation * dnewton.c (dnewton_iterate): return GSL_EBADFUNC if error in function evaluation * broyden.c (broyden_iterate): return GSL_EBADFUNC if error in function evaluation Sun Aug 27 13:43:13 2000 Brian Gough * hybridj.c hybrid.c dogleg.c: begin comments with a capital letter to improve readability Sat Aug 26 16:12:19 2000 Brian Gough * hybridj.c hybrid.c: renamed rdiag to tau, since it plays that role here and is not the diagonal of R (see qr.c documentation for more details) Wed Feb 23 15:36:39 2000 Brian Gough * changed gsl_vector_copy to gsl_vector_cpy Fri Feb 18 18:45:02 2000 Brian Gough * fixed various .c files to use permutation Wed Feb 16 21:13:24 2000 Brian Gough * fixed Makefiles that include gsl_linalg.h to add -I$(srcdir)/../permutation to their include path gsl/multiroots/Makefile.am0000644000175000017500000000137113536674414014211 0ustar eddedd# -*-makefile-*- noinst_LTLIBRARIES = libgslmultiroots.la pkginclude_HEADERS = gsl_multiroots.h noinst_HEADERS = enorm.c dogleg.c AM_CPPFLAGS = -I$(top_srcdir) libgslmultiroots_la_SOURCES = fdjac.c fsolver.c fdfsolver.c convergence.c newton.c gnewton.c dnewton.c broyden.c hybrid.c hybridj.c check_PROGRAMS = test TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_funcs.c test_funcs.h test_LDADD = libgslmultiroots.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la gsl/multiroots/hybrid.c0000644000175000017500000003512413536674414013605 0ustar eddedd/* multiroots/hybrid.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include "dogleg.c" typedef struct { size_t iter; size_t ncfail; size_t ncsuc; size_t nslow1; size_t nslow2; double fnorm; double delta; gsl_matrix *J; gsl_matrix *q; gsl_matrix *r; gsl_vector *tau; gsl_vector *diag; gsl_vector *qtf; gsl_vector *newton; gsl_vector *gradient; gsl_vector *x_trial; gsl_vector *f_trial; gsl_vector *df; gsl_vector *qtdf; gsl_vector *rdx; gsl_vector *w; gsl_vector *v; } hybrid_state_t; static int hybrid_alloc (void *vstate, size_t n); static int hybrid_set (void *vstate, gsl_multiroot_function * func, gsl_vector * x, gsl_vector * f, gsl_vector * dx); static int hybrids_set (void *vstate, gsl_multiroot_function * func, gsl_vector * x, gsl_vector * f, gsl_vector * dx); static int hybrid_set_impl (void *vstate, gsl_multiroot_function * func, gsl_vector * x, gsl_vector * f, gsl_vector * dx, int scale); static int hybrid_iterate (void *vstate, gsl_multiroot_function * func, gsl_vector * x, gsl_vector * f, gsl_vector * dx); static void hybrid_free (void *vstate); static int hybrid_iterate_impl (void *vstate, gsl_multiroot_function * func, gsl_vector * x, gsl_vector * f, gsl_vector * dx, int scale); static int hybrid_alloc (void *vstate, size_t n) { hybrid_state_t *state = (hybrid_state_t *) vstate; gsl_matrix *J, *q, *r; gsl_vector *tau, *diag, *qtf, *newton, *gradient, *x_trial, *f_trial, *df, *qtdf, *rdx, *w, *v; J = gsl_matrix_calloc (n, n); if (J == 0) { GSL_ERROR ("failed to allocate space for J", GSL_ENOMEM); } state->J = J; q = gsl_matrix_calloc (n, n); if (q == 0) { gsl_matrix_free (J); GSL_ERROR ("failed to allocate space for q", GSL_ENOMEM); } state->q = q; r = gsl_matrix_calloc (n, n); if (r == 0) { gsl_matrix_free (J); gsl_matrix_free (q); GSL_ERROR ("failed to allocate space for r", GSL_ENOMEM); } state->r = r; tau = gsl_vector_calloc (n); if (tau == 0) { gsl_matrix_free (J); gsl_matrix_free (q); gsl_matrix_free (r); GSL_ERROR ("failed to allocate space for tau", GSL_ENOMEM); } state->tau = tau; diag = gsl_vector_calloc (n); if (diag == 0) { gsl_matrix_free (J); gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); GSL_ERROR ("failed to allocate space for diag", GSL_ENOMEM); } state->diag = diag; qtf = gsl_vector_calloc (n); if (qtf == 0) { gsl_matrix_free (J); gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); GSL_ERROR ("failed to allocate space for qtf", GSL_ENOMEM); } state->qtf = qtf; newton = gsl_vector_calloc (n); if (newton == 0) { gsl_matrix_free (J); gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); GSL_ERROR ("failed to allocate space for newton", GSL_ENOMEM); } state->newton = newton; gradient = gsl_vector_calloc (n); if (gradient == 0) { gsl_matrix_free (J); gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); GSL_ERROR ("failed to allocate space for gradient", GSL_ENOMEM); } state->gradient = gradient; x_trial = gsl_vector_calloc (n); if (x_trial == 0) { gsl_matrix_free (J); gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); GSL_ERROR ("failed to allocate space for x_trial", GSL_ENOMEM); } state->x_trial = x_trial; f_trial = gsl_vector_calloc (n); if (f_trial == 0) { gsl_matrix_free (J); gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); GSL_ERROR ("failed to allocate space for f_trial", GSL_ENOMEM); } state->f_trial = f_trial; df = gsl_vector_calloc (n); if (df == 0) { gsl_matrix_free (J); gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); GSL_ERROR ("failed to allocate space for df", GSL_ENOMEM); } state->df = df; qtdf = gsl_vector_calloc (n); if (qtdf == 0) { gsl_matrix_free (J); gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); gsl_vector_free (df); GSL_ERROR ("failed to allocate space for qtdf", GSL_ENOMEM); } state->qtdf = qtdf; rdx = gsl_vector_calloc (n); if (rdx == 0) { gsl_matrix_free (J); gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); gsl_vector_free (df); gsl_vector_free (qtdf); GSL_ERROR ("failed to allocate space for rdx", GSL_ENOMEM); } state->rdx = rdx; w = gsl_vector_calloc (n); if (w == 0) { gsl_matrix_free (J); gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); gsl_vector_free (df); gsl_vector_free (qtdf); gsl_vector_free (rdx); GSL_ERROR ("failed to allocate space for w", GSL_ENOMEM); } state->w = w; v = gsl_vector_calloc (n); if (v == 0) { gsl_matrix_free (J); gsl_matrix_free (q); gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); gsl_vector_free (df); gsl_vector_free (qtdf); gsl_vector_free (rdx); gsl_vector_free (w); GSL_ERROR ("failed to allocate space for v", GSL_ENOMEM); } state->v = v; return GSL_SUCCESS; } static int hybrid_set (void *vstate, gsl_multiroot_function * func, gsl_vector * x, gsl_vector * f, gsl_vector * dx) { int status = hybrid_set_impl (vstate, func, x, f, dx, 0); return status; } static int hybrids_set (void *vstate, gsl_multiroot_function * func, gsl_vector * x, gsl_vector * f, gsl_vector * dx) { int status = hybrid_set_impl (vstate, func, x, f, dx, 1); return status; } static int hybrid_set_impl (void *vstate, gsl_multiroot_function * func, gsl_vector * x, gsl_vector * f, gsl_vector * dx, int scale) { hybrid_state_t *state = (hybrid_state_t *) vstate; gsl_matrix *J = state->J; gsl_matrix *q = state->q; gsl_matrix *r = state->r; gsl_vector *tau = state->tau; gsl_vector *diag = state->diag; int status; status = GSL_MULTIROOT_FN_EVAL (func, x, f); if (status) { return status; } status = gsl_multiroot_fdjacobian (func, x, f, GSL_SQRT_DBL_EPSILON, J); if (status) { return status; } state->iter = 1; state->fnorm = enorm (f); state->ncfail = 0; state->ncsuc = 0; state->nslow1 = 0; state->nslow2 = 0; gsl_vector_set_all (dx, 0.0); /* Store column norms in diag */ if (scale) compute_diag (J, diag); else gsl_vector_set_all (diag, 1.0); /* Set delta to factor |D x| or to factor if |D x| is zero */ state->delta = compute_delta (diag, x); /* Factorize J into QR decomposition */ status = gsl_linalg_QR_decomp (J, tau); if (status) { return status; } status = gsl_linalg_QR_unpack (J, tau, q, r); return status; } static int hybrid_iterate (void *vstate, gsl_multiroot_function * func, gsl_vector * x, gsl_vector * f, gsl_vector * dx) { int status = hybrid_iterate_impl (vstate, func, x, f, dx, 0); return status; } static int hybrids_iterate (void *vstate, gsl_multiroot_function * func, gsl_vector * x, gsl_vector * f, gsl_vector * dx) { int status = hybrid_iterate_impl (vstate, func, x, f, dx, 1); return status; } static int hybrid_iterate_impl (void *vstate, gsl_multiroot_function * func, gsl_vector * x, gsl_vector * f, gsl_vector * dx, int scale) { hybrid_state_t *state = (hybrid_state_t *) vstate; const double fnorm = state->fnorm; gsl_matrix *J = state->J; gsl_matrix *q = state->q; gsl_matrix *r = state->r; gsl_vector *tau = state->tau; gsl_vector *diag = state->diag; gsl_vector *qtf = state->qtf; gsl_vector *x_trial = state->x_trial; gsl_vector *f_trial = state->f_trial; gsl_vector *df = state->df; gsl_vector *qtdf = state->qtdf; gsl_vector *rdx = state->rdx; gsl_vector *w = state->w; gsl_vector *v = state->v; double prered, actred; double pnorm, fnorm1, fnorm1p; double ratio; double p1 = 0.1, p5 = 0.5, p001 = 0.001, p0001 = 0.0001; /* Compute qtf = Q^T f */ compute_qtf (q, f, qtf); /* Compute dogleg step */ dogleg (r, qtf, diag, state->delta, state->newton, state->gradient, dx); /* Take a trial step */ compute_trial_step (x, dx, state->x_trial); pnorm = scaled_enorm (diag, dx); if (state->iter == 1) { if (pnorm < state->delta) { state->delta = pnorm; } } /* Evaluate function at x + p */ { int status = GSL_MULTIROOT_FN_EVAL (func, x_trial, f_trial); if (status != GSL_SUCCESS) { return GSL_EBADFUNC; } } /* Set df = f_trial - f */ compute_df (f_trial, f, df); /* Compute the scaled actual reduction */ fnorm1 = enorm (f_trial); actred = compute_actual_reduction (fnorm, fnorm1); /* Compute rdx = R dx */ compute_rdx (r, dx, rdx); /* Compute the scaled predicted reduction phi1p = |Q^T f + R dx| */ fnorm1p = enorm_sum (qtf, rdx); prered = compute_predicted_reduction (fnorm, fnorm1p); /* Compute the ratio of the actual to predicted reduction */ if (prered > 0) { ratio = actred / prered; } else { ratio = 0; } /* Update the step bound */ if (ratio < p1) { state->ncsuc = 0; state->ncfail++; state->delta *= p5; } else { state->ncfail = 0; state->ncsuc++; if (ratio >= p5 || state->ncsuc > 1) state->delta = GSL_MAX (state->delta, pnorm / p5); if (fabs (ratio - 1) <= p1) state->delta = pnorm / p5; } /* Test for successful iteration */ if (ratio >= p0001) { gsl_vector_memcpy (x, x_trial); gsl_vector_memcpy (f, f_trial); state->fnorm = fnorm1; state->iter++; } /* Determine the progress of the iteration */ state->nslow1++; if (actred >= p001) state->nslow1 = 0; if (actred >= p1) state->nslow2 = 0; if (state->ncfail == 2) { gsl_multiroot_fdjacobian (func, x, f, GSL_SQRT_DBL_EPSILON, J); state->nslow2++; if (state->iter == 1) { if (scale) compute_diag (J, diag); state->delta = compute_delta (diag, x); } else { if (scale) update_diag (J, diag); } /* Factorize J into QR decomposition */ gsl_linalg_QR_decomp (J, tau); gsl_linalg_QR_unpack (J, tau, q, r); return GSL_SUCCESS; } /* Compute qtdf = Q^T df, w = (Q^T df - R dx)/|dx|, v = D^2 dx/|dx| */ compute_qtf (q, df, qtdf); compute_wv (qtdf, rdx, dx, diag, pnorm, w, v); /* Rank-1 update of the jacobian Q'R' = Q(R + w v^T) */ gsl_linalg_QR_update (q, r, w, v); /* No progress as measured by jacobian evaluations */ if (state->nslow2 == 5) { return GSL_ENOPROGJ; } /* No progress as measured by function evaluations */ if (state->nslow1 == 10) { return GSL_ENOPROG; } return GSL_SUCCESS; } static void hybrid_free (void *vstate) { hybrid_state_t *state = (hybrid_state_t *) vstate; gsl_vector_free (state->v); gsl_vector_free (state->w); gsl_vector_free (state->rdx); gsl_vector_free (state->qtdf); gsl_vector_free (state->df); gsl_vector_free (state->f_trial); gsl_vector_free (state->x_trial); gsl_vector_free (state->gradient); gsl_vector_free (state->newton); gsl_vector_free (state->qtf); gsl_vector_free (state->diag); gsl_vector_free (state->tau); gsl_matrix_free (state->r); gsl_matrix_free (state->q); gsl_matrix_free (state->J); } static const gsl_multiroot_fsolver_type hybrid_type = { "hybrid", /* name */ sizeof (hybrid_state_t), &hybrid_alloc, &hybrid_set, &hybrid_iterate, &hybrid_free }; static const gsl_multiroot_fsolver_type hybrids_type = { "hybrids", /* name */ sizeof (hybrid_state_t), &hybrid_alloc, &hybrids_set, &hybrids_iterate, &hybrid_free }; const gsl_multiroot_fsolver_type *gsl_multiroot_fsolver_hybrid = &hybrid_type; const gsl_multiroot_fsolver_type *gsl_multiroot_fsolver_hybrids = &hybrids_type; gsl/multiroots/dogleg.c0000644000175000017500000002255213536674414013566 0ustar eddedd/* multiroots/dogleg.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "enorm.c" static void compute_diag (const gsl_matrix * J, gsl_vector * diag); static void update_diag (const gsl_matrix * J, gsl_vector * diag); static double compute_delta (gsl_vector * diag, gsl_vector * x); static void compute_df (const gsl_vector * f_trial, const gsl_vector * f, gsl_vector * df); static void compute_wv (const gsl_vector * qtdf, const gsl_vector *rdx, const gsl_vector *dx, const gsl_vector *diag, double pnorm, gsl_vector * w, gsl_vector * v); static double scaled_enorm (const gsl_vector * d, const gsl_vector * f); static double scaled_enorm (const gsl_vector * d, const gsl_vector * f) { double e2 = 0 ; size_t i, n = f->size ; for (i = 0; i < n ; i++) { double fi= gsl_vector_get(f, i); double di= gsl_vector_get(d, i); double u = di * fi; e2 += u * u ; } return sqrt(e2); } static double enorm_sum (const gsl_vector * a, const gsl_vector * b); static double enorm_sum (const gsl_vector * a, const gsl_vector * b) { double e2 = 0 ; size_t i, n = a->size ; for (i = 0; i < n ; i++) { double ai= gsl_vector_get(a, i); double bi= gsl_vector_get(b, i); double u = ai + bi; e2 += u * u ; } return sqrt(e2); } static void compute_wv (const gsl_vector * qtdf, const gsl_vector *rdx, const gsl_vector *dx, const gsl_vector *diag, double pnorm, gsl_vector * w, gsl_vector * v) { size_t i, n = qtdf->size; for (i = 0; i < n; i++) { double qtdfi = gsl_vector_get (qtdf, i); double rdxi = gsl_vector_get (rdx, i); double dxi = gsl_vector_get (dx, i); double diagi = gsl_vector_get (diag, i); gsl_vector_set (w, i, (qtdfi - rdxi) / pnorm); gsl_vector_set (v, i, diagi * diagi * dxi / pnorm); } } static void compute_df (const gsl_vector * f_trial, const gsl_vector * f, gsl_vector * df) { size_t i, n = f->size; for (i = 0; i < n; i++) { double dfi = gsl_vector_get (f_trial, i) - gsl_vector_get (f, i); gsl_vector_set (df, i, dfi); } } static void compute_diag (const gsl_matrix * J, gsl_vector * diag) { size_t i, j, n = diag->size; for (j = 0; j < n; j++) { double sum = 0; for (i = 0; i < n; i++) { double Jij = gsl_matrix_get (J, i, j); sum += Jij * Jij; } if (sum == 0) sum = 1.0; gsl_vector_set (diag, j, sqrt (sum)); } } static void update_diag (const gsl_matrix * J, gsl_vector * diag) { size_t i, j, n = diag->size; for (j = 0; j < n; j++) { double cnorm, diagj, sum = 0; for (i = 0; i < n; i++) { double Jij = gsl_matrix_get (J, i, j); sum += Jij * Jij; } if (sum == 0) sum = 1.0; cnorm = sqrt (sum); diagj = gsl_vector_get (diag, j); if (cnorm > diagj) gsl_vector_set (diag, j, cnorm); } } static double compute_delta (gsl_vector * diag, gsl_vector * x) { double Dx = scaled_enorm (diag, x); double factor = 100; return (Dx > 0) ? factor * Dx : factor; } static double compute_actual_reduction (double fnorm, double fnorm1) { double actred; if (fnorm1 < fnorm) { double u = fnorm1 / fnorm; actred = 1 - u * u; } else { actred = -1; } return actred; } static double compute_predicted_reduction (double fnorm, double fnorm1) { double prered; if (fnorm1 < fnorm) { double u = fnorm1 / fnorm; prered = 1 - u * u; } else { prered = 0; } return prered; } static void compute_qtf (const gsl_matrix * q, const gsl_vector * f, gsl_vector * qtf) { size_t i, j, N = f->size ; for (j = 0; j < N; j++) { double sum = 0; for (i = 0; i < N; i++) sum += gsl_matrix_get (q, i, j) * gsl_vector_get (f, i); gsl_vector_set (qtf, j, sum); } } static void compute_rdx (const gsl_matrix * r, const gsl_vector * dx, gsl_vector * rdx) { size_t i, j, N = dx->size ; for (i = 0; i < N; i++) { double sum = 0; for (j = i; j < N; j++) { sum += gsl_matrix_get (r, i, j) * gsl_vector_get (dx, j); } gsl_vector_set (rdx, i, sum); } } static void compute_trial_step (gsl_vector *x, gsl_vector * dx, gsl_vector * x_trial) { size_t i, N = x->size; for (i = 0; i < N; i++) { double pi = gsl_vector_get (dx, i); double xi = gsl_vector_get (x, i); gsl_vector_set (x_trial, i, xi + pi); } } static int newton_direction (const gsl_matrix * r, const gsl_vector * qtf, gsl_vector * p) { const size_t N = r->size2; size_t i; int status; status = gsl_linalg_R_solve (r, qtf, p); #ifdef DEBUG printf("rsolve status = %d\n", status); #endif for (i = 0; i < N; i++) { double pi = gsl_vector_get (p, i); gsl_vector_set (p, i, -pi); } return status; } static void gradient_direction (const gsl_matrix * r, const gsl_vector * qtf, const gsl_vector * diag, gsl_vector * g) { const size_t M = r->size1; const size_t N = r->size2; size_t i, j; for (j = 0; j < M; j++) { double sum = 0; double dj; for (i = 0; i < N; i++) { sum += gsl_matrix_get (r, i, j) * gsl_vector_get (qtf, i); } dj = gsl_vector_get (diag, j); gsl_vector_set (g, j, -sum / dj); } } static void minimum_step (double gnorm, const gsl_vector * diag, gsl_vector * g) { const size_t N = g->size; size_t i; for (i = 0; i < N; i++) { double gi = gsl_vector_get (g, i); double di = gsl_vector_get (diag, i); gsl_vector_set (g, i, (gi / gnorm) / di); } } static void compute_Rg (const gsl_matrix * r, const gsl_vector * gradient, gsl_vector * Rg) { const size_t N = r->size2; size_t i, j; for (i = 0; i < N; i++) { double sum = 0; for (j = i; j < N; j++) { double gj = gsl_vector_get (gradient, j); double rij = gsl_matrix_get (r, i, j); sum += rij * gj; } gsl_vector_set (Rg, i, sum); } } static void scaled_addition (double alpha, gsl_vector * newton, double beta, gsl_vector * gradient, gsl_vector * p) { const size_t N = p->size; size_t i; for (i = 0; i < N; i++) { double ni = gsl_vector_get (newton, i); double gi = gsl_vector_get (gradient, i); gsl_vector_set (p, i, alpha * ni + beta * gi); } } static int dogleg (const gsl_matrix * r, const gsl_vector * qtf, const gsl_vector * diag, double delta, gsl_vector * newton, gsl_vector * gradient, gsl_vector * p) { double qnorm, gnorm, sgnorm, bnorm, temp; newton_direction (r, qtf, newton); #ifdef DEBUG printf("newton = "); gsl_vector_fprintf(stdout, newton, "%g"); printf("\n"); #endif qnorm = scaled_enorm (diag, newton); if (qnorm <= delta) { gsl_vector_memcpy (p, newton); #ifdef DEBUG printf("took newton (qnorm = %g <= delta = %g)\n", qnorm, delta); #endif return GSL_SUCCESS; } gradient_direction (r, qtf, diag, gradient); #ifdef DEBUG printf("grad = "); gsl_vector_fprintf(stdout, gradient, "%g"); printf("\n"); #endif gnorm = enorm (gradient); if (gnorm == 0) { double alpha = delta / qnorm; double beta = 0; scaled_addition (alpha, newton, beta, gradient, p); #ifdef DEBUG printf("took scaled newton because gnorm = 0\n"); #endif return GSL_SUCCESS; } minimum_step (gnorm, diag, gradient); compute_Rg (r, gradient, p); /* Use p as temporary space to compute Rg */ #ifdef DEBUG printf("mingrad = "); gsl_vector_fprintf(stdout, gradient, "%g"); printf("\n"); printf("Rg = "); gsl_vector_fprintf(stdout, p, "%g"); printf("\n"); #endif temp = enorm (p); sgnorm = (gnorm / temp) / temp; if (sgnorm > delta) { double alpha = 0; double beta = delta; scaled_addition (alpha, newton, beta, gradient, p); #ifdef DEBUG printf("took gradient\n"); #endif return GSL_SUCCESS; } bnorm = enorm (qtf); { double bg = bnorm / gnorm; double bq = bnorm / qnorm; double dq = delta / qnorm; double dq2 = dq * dq; double sd = sgnorm / delta; double sd2 = sd * sd; double t1 = bg * bq * sd; double u = t1 - dq; double t2 = t1 - dq * sd2 + sqrt (u * u + (1-dq2) * (1 - sd2)); double alpha = dq * (1 - sd2) / t2; double beta = (1 - alpha) * sgnorm; #ifdef DEBUG printf("bnorm = %g\n", bnorm); printf("gnorm = %g\n", gnorm); printf("qnorm = %g\n", qnorm); printf("delta = %g\n", delta); printf("alpha = %g beta = %g\n", alpha, beta); printf("took scaled combination of newton and gradient\n"); #endif scaled_addition (alpha, newton, beta, gradient, p); } return GSL_SUCCESS; } gsl/multiroots/broyden.c0000644000175000017500000002331513536674414013765 0ustar eddedd/* multiroots/broyden.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include "enorm.c" /* Broyden's method. It is not an efficient or modern algorithm but gives an example of a rank-1 update. C.G. Broyden, "A Class of Methods for Solving Nonlinear Simultaneous Equations", Mathematics of Computation, vol 19 (1965), p 577-593 */ typedef struct { gsl_matrix *H; gsl_matrix *lu; gsl_permutation *permutation; gsl_vector *v; gsl_vector *w; gsl_vector *y; gsl_vector *p; gsl_vector *fnew; gsl_vector *x_trial; double phi; } broyden_state_t; static int broyden_alloc (void *vstate, size_t n); static int broyden_set (void *vstate, gsl_multiroot_function * function, gsl_vector * x, gsl_vector * f, gsl_vector * dx); static int broyden_iterate (void *vstate, gsl_multiroot_function * function, gsl_vector * x, gsl_vector * f, gsl_vector * dx); static void broyden_free (void *vstate); static int broyden_alloc (void *vstate, size_t n) { broyden_state_t *state = (broyden_state_t *) vstate; gsl_vector *v, *w, *y, *fnew, *x_trial, *p; gsl_permutation *perm; gsl_matrix *m, *H; m = gsl_matrix_calloc (n, n); if (m == 0) { GSL_ERROR ("failed to allocate space for lu", GSL_ENOMEM); } state->lu = m; perm = gsl_permutation_calloc (n); if (perm == 0) { gsl_matrix_free (m); GSL_ERROR ("failed to allocate space for permutation", GSL_ENOMEM); } state->permutation = perm; H = gsl_matrix_calloc (n, n); if (H == 0) { gsl_permutation_free (perm); gsl_matrix_free (m); GSL_ERROR ("failed to allocate space for d", GSL_ENOMEM); } state->H = H; v = gsl_vector_calloc (n); if (v == 0) { gsl_matrix_free (H); gsl_permutation_free (perm); gsl_matrix_free (m); GSL_ERROR ("failed to allocate space for v", GSL_ENOMEM); } state->v = v; w = gsl_vector_calloc (n); if (w == 0) { gsl_vector_free (v); gsl_matrix_free (H); gsl_permutation_free (perm); gsl_matrix_free (m); GSL_ERROR ("failed to allocate space for w", GSL_ENOMEM); } state->w = w; y = gsl_vector_calloc (n); if (y == 0) { gsl_vector_free (w); gsl_vector_free (v); gsl_matrix_free (H); gsl_permutation_free (perm); gsl_matrix_free (m); GSL_ERROR ("failed to allocate space for y", GSL_ENOMEM); } state->y = y; fnew = gsl_vector_calloc (n); if (fnew == 0) { gsl_vector_free (y); gsl_vector_free (w); gsl_vector_free (v); gsl_matrix_free (H); gsl_permutation_free (perm); gsl_matrix_free (m); GSL_ERROR ("failed to allocate space for fnew", GSL_ENOMEM); } state->fnew = fnew; x_trial = gsl_vector_calloc (n); if (x_trial == 0) { gsl_vector_free (fnew); gsl_vector_free (y); gsl_vector_free (w); gsl_vector_free (v); gsl_matrix_free (H); gsl_permutation_free (perm); gsl_matrix_free (m); GSL_ERROR ("failed to allocate space for x_trial", GSL_ENOMEM); } state->x_trial = x_trial; p = gsl_vector_calloc (n); if (p == 0) { gsl_vector_free (x_trial); gsl_vector_free (fnew); gsl_vector_free (y); gsl_vector_free (w); gsl_vector_free (v); gsl_matrix_free (H); gsl_permutation_free (perm); gsl_matrix_free (m); GSL_ERROR ("failed to allocate space for p", GSL_ENOMEM); } state->p = p; return GSL_SUCCESS; } static int broyden_set (void *vstate, gsl_multiroot_function * function, gsl_vector * x, gsl_vector * f, gsl_vector * dx) { broyden_state_t *state = (broyden_state_t *) vstate; size_t i, j, n = function->n; int signum = 0; GSL_MULTIROOT_FN_EVAL (function, x, f); gsl_multiroot_fdjacobian (function, x, f, GSL_SQRT_DBL_EPSILON, state->lu); gsl_linalg_LU_decomp (state->lu, state->permutation, &signum); gsl_linalg_LU_invert (state->lu, state->permutation, state->H); for (i = 0; i < n; i++) for (j = 0; j < n; j++) gsl_matrix_set(state->H,i,j,-gsl_matrix_get(state->H,i,j)); for (i = 0; i < n; i++) { gsl_vector_set (dx, i, 0.0); } state->phi = enorm (f); return GSL_SUCCESS; } static int broyden_iterate (void *vstate, gsl_multiroot_function * function, gsl_vector * x, gsl_vector * f, gsl_vector * dx) { broyden_state_t *state = (broyden_state_t *) vstate; double phi0, phi1, t, lambda; gsl_matrix *H = state->H; gsl_vector *p = state->p; gsl_vector *y = state->y; gsl_vector *v = state->v; gsl_vector *w = state->w; gsl_vector *fnew = state->fnew; gsl_vector *x_trial = state->x_trial; gsl_matrix *lu = state->lu; gsl_permutation *perm = state->permutation; size_t i, j, iter; size_t n = function->n; /* p = H f */ for (i = 0; i < n; i++) { double sum = 0; for (j = 0; j < n; j++) { sum += gsl_matrix_get (H, i, j) * gsl_vector_get (f, j); } gsl_vector_set (p, i, sum); } t = 1; iter = 0; phi0 = state->phi; new_step: for (i = 0; i < n; i++) { double pi = gsl_vector_get (p, i); double xi = gsl_vector_get (x, i); gsl_vector_set (x_trial, i, xi + t * pi); } { int status = GSL_MULTIROOT_FN_EVAL (function, x_trial, fnew); if (status != GSL_SUCCESS) { return GSL_EBADFUNC; } } phi1 = enorm (fnew); iter++ ; if (phi1 > phi0 && iter < 10 && t > 0.1) { /* full step goes uphill, take a reduced step instead */ double theta = phi1 / phi0; t *= (sqrt (1.0 + 6.0 * theta) - 1.0) / (3.0 * theta); goto new_step; } if (phi1 > phi0) { /* need to recompute Jacobian */ int signum = 0; gsl_multiroot_fdjacobian (function, x, f, GSL_SQRT_DBL_EPSILON, lu); for (i = 0; i < n; i++) for (j = 0; j < n; j++) gsl_matrix_set(lu,i,j,-gsl_matrix_get(lu,i,j)); gsl_linalg_LU_decomp (lu, perm, &signum); gsl_linalg_LU_invert (lu, perm, H); gsl_linalg_LU_solve (lu, perm, f, p); t = 1; for (i = 0; i < n; i++) { double pi = gsl_vector_get (p, i); double xi = gsl_vector_get (x, i); gsl_vector_set (x_trial, i, xi + t * pi); } { int status = GSL_MULTIROOT_FN_EVAL (function, x_trial, fnew); if (status != GSL_SUCCESS) { return GSL_EBADFUNC; } } phi1 = enorm (fnew); } /* y = f' - f */ for (i = 0; i < n; i++) { double yi = gsl_vector_get (fnew, i) - gsl_vector_get (f, i); gsl_vector_set (y, i, yi); } /* v = H y */ for (i = 0; i < n; i++) { double sum = 0; for (j = 0; j < n; j++) { sum += gsl_matrix_get (H, i, j) * gsl_vector_get (y, j); } gsl_vector_set (v, i, sum); } /* lambda = p . v */ lambda = 0; for (i = 0; i < n; i++) { lambda += gsl_vector_get (p, i) * gsl_vector_get (v, i); } if (lambda == 0) { GSL_ERROR ("approximation to Jacobian has collapsed", GSL_EZERODIV) ; } /* v' = v + t * p */ for (i = 0; i < n; i++) { double vi = gsl_vector_get (v, i) + t * gsl_vector_get (p, i); gsl_vector_set (v, i, vi); } /* w^T = p^T H */ for (i = 0; i < n; i++) { double sum = 0; for (j = 0; j < n; j++) { sum += gsl_matrix_get (H, j, i) * gsl_vector_get (p, j); } gsl_vector_set (w, i, sum); } /* Hij -> Hij - (vi wj / lambda) */ for (i = 0; i < n; i++) { double vi = gsl_vector_get (v, i); for (j = 0; j < n; j++) { double wj = gsl_vector_get (w, j); double Hij = gsl_matrix_get (H, i, j) - vi * wj / lambda; gsl_matrix_set (H, i, j, Hij); } } /* copy fnew into f */ gsl_vector_memcpy (f, fnew); /* copy x_trial into x */ gsl_vector_memcpy (x, x_trial); for (i = 0; i < n; i++) { double pi = gsl_vector_get (p, i); gsl_vector_set (dx, i, t * pi); } state->phi = phi1; return GSL_SUCCESS; } static void broyden_free (void *vstate) { broyden_state_t *state = (broyden_state_t *) vstate; gsl_matrix_free (state->H); gsl_matrix_free (state->lu); gsl_permutation_free (state->permutation); gsl_vector_free (state->v); gsl_vector_free (state->w); gsl_vector_free (state->y); gsl_vector_free (state->p); gsl_vector_free (state->fnew); gsl_vector_free (state->x_trial); } static const gsl_multiroot_fsolver_type broyden_type = {"broyden", /* name */ sizeof (broyden_state_t), &broyden_alloc, &broyden_set, &broyden_iterate, &broyden_free}; const gsl_multiroot_fsolver_type *gsl_multiroot_fsolver_broyden = &broyden_type; gsl/multiroots/dnewton.c0000644000175000017500000001047613536674414014005 0ustar eddedd/* multiroots/dnewton.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include /* Newton method using a finite difference approximation to the jacobian. The derivatives are estimated using a step size of h_i = sqrt(DBL_EPSILON) * x_i */ typedef struct { gsl_matrix * J; gsl_matrix * lu; gsl_permutation * permutation; } dnewton_state_t; static int dnewton_alloc (void * vstate, size_t n); static int dnewton_set (void * vstate, gsl_multiroot_function * function, gsl_vector * x, gsl_vector * f, gsl_vector * dx); static int dnewton_iterate (void * vstate, gsl_multiroot_function * function, gsl_vector * x, gsl_vector * f, gsl_vector * dx); static void dnewton_free (void * vstate); static int dnewton_alloc (void * vstate, size_t n) { dnewton_state_t * state = (dnewton_state_t *) vstate; gsl_permutation * p; gsl_matrix * m, * J; m = gsl_matrix_calloc (n,n); if (m == 0) { GSL_ERROR ("failed to allocate space for lu", GSL_ENOMEM); } state->lu = m ; p = gsl_permutation_calloc (n); if (p == 0) { gsl_matrix_free(m); GSL_ERROR ("failed to allocate space for permutation", GSL_ENOMEM); } state->permutation = p ; J = gsl_matrix_calloc (n,n); if (J == 0) { gsl_permutation_free(p); gsl_matrix_free(m); GSL_ERROR ("failed to allocate space for d", GSL_ENOMEM); } state->J = J; return GSL_SUCCESS; } static int dnewton_set (void * vstate, gsl_multiroot_function * function, gsl_vector * x, gsl_vector * f, gsl_vector * dx) { dnewton_state_t * state = (dnewton_state_t *) vstate; size_t i, n = function->n ; int status; status = GSL_MULTIROOT_FN_EVAL (function, x, f); if (status) return status; status = gsl_multiroot_fdjacobian (function, x, f, GSL_SQRT_DBL_EPSILON, state->J); if (status) return status; for (i = 0; i < n; i++) { gsl_vector_set (dx, i, 0.0); } return GSL_SUCCESS; } static int dnewton_iterate (void * vstate, gsl_multiroot_function * function, gsl_vector * x, gsl_vector * f, gsl_vector * dx) { dnewton_state_t * state = (dnewton_state_t *) vstate; int signum ; size_t i; size_t n = function->n ; gsl_matrix_memcpy (state->lu, state->J); { int status = gsl_linalg_LU_decomp (state->lu, state->permutation, &signum); if (status) return status; } { int status = gsl_linalg_LU_solve (state->lu, state->permutation, f, dx); if (status) return status; } for (i = 0; i < n; i++) { double e = gsl_vector_get (dx, i); double y = gsl_vector_get (x, i); gsl_vector_set (dx, i, -e); gsl_vector_set (x, i, y - e); } { int status = GSL_MULTIROOT_FN_EVAL (function, x, f); if (status != GSL_SUCCESS) { return GSL_EBADFUNC; } } gsl_multiroot_fdjacobian (function, x, f, GSL_SQRT_DBL_EPSILON, state->J); return GSL_SUCCESS; } static void dnewton_free (void * vstate) { dnewton_state_t * state = (dnewton_state_t *) vstate; gsl_matrix_free(state->J); gsl_matrix_free(state->lu); gsl_permutation_free(state->permutation); } static const gsl_multiroot_fsolver_type dnewton_type = {"dnewton", /* name */ sizeof (dnewton_state_t), &dnewton_alloc, &dnewton_set, &dnewton_iterate, &dnewton_free}; const gsl_multiroot_fsolver_type * gsl_multiroot_fsolver_dnewton = &dnewton_type; gsl/multiroots/fsolver.c0000644000175000017500000000754113536674414014006 0ustar eddedd/* multiroots/fsolver.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include gsl_multiroot_fsolver * gsl_multiroot_fsolver_alloc (const gsl_multiroot_fsolver_type * T, size_t n) { int status; gsl_multiroot_fsolver * s; s = (gsl_multiroot_fsolver *) malloc (sizeof (gsl_multiroot_fsolver)); if (s == 0) { GSL_ERROR_VAL ("failed to allocate space for multiroot solver struct", GSL_ENOMEM, 0); } s->x = gsl_vector_calloc (n); if (s->x == 0) { free (s); GSL_ERROR_VAL ("failed to allocate space for x", GSL_ENOMEM, 0); } s->f = gsl_vector_calloc (n); if (s->f == 0) { gsl_vector_free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for f", GSL_ENOMEM, 0); } s->dx = gsl_vector_calloc (n); if (s->dx == 0) { gsl_vector_free (s->x); gsl_vector_free (s->f); free (s); GSL_ERROR_VAL ("failed to allocate space for dx", GSL_ENOMEM, 0); } s->state = malloc (T->size); if (s->state == 0) { gsl_vector_free (s->dx); gsl_vector_free (s->x); gsl_vector_free (s->f); free (s); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for multiroot solver state", GSL_ENOMEM, 0); } s->type = T ; status = (s->type->alloc)(s->state, n); if (status != GSL_SUCCESS) { (s->type->free)(s->state); free (s->state); gsl_vector_free (s->dx); gsl_vector_free (s->x); gsl_vector_free (s->f); free (s); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to set solver", status, 0); } s->function = NULL; return s; } int gsl_multiroot_fsolver_set (gsl_multiroot_fsolver * s, gsl_multiroot_function * f, const gsl_vector * x) { if (s->x->size != f->n) { GSL_ERROR ("function incompatible with solver size", GSL_EBADLEN); } if (x->size != f->n) { GSL_ERROR ("vector length not compatible with function", GSL_EBADLEN); } s->function = f; gsl_vector_memcpy(s->x,x); return (s->type->set) (s->state, s->function, s->x, s->f, s->dx); } int gsl_multiroot_fsolver_iterate (gsl_multiroot_fsolver * s) { return (s->type->iterate) (s->state, s->function, s->x, s->f, s->dx); } void gsl_multiroot_fsolver_free (gsl_multiroot_fsolver * s) { RETURN_IF_NULL (s); (s->type->free) (s->state); free (s->state); gsl_vector_free (s->dx); gsl_vector_free (s->x); gsl_vector_free (s->f); free (s); } const char * gsl_multiroot_fsolver_name (const gsl_multiroot_fsolver * s) { return s->type->name; } gsl_vector * gsl_multiroot_fsolver_root (const gsl_multiroot_fsolver * s) { return s->x; } gsl_vector * gsl_multiroot_fsolver_dx (const gsl_multiroot_fsolver * s) { return s->dx; } gsl_vector * gsl_multiroot_fsolver_f (const gsl_multiroot_fsolver * s) { return s->f; } gsl/multiroots/convergence.c0000644000175000017500000000400113536674414014610 0ustar eddedd/* multiroots/convergence.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include int gsl_multiroot_test_delta (const gsl_vector * dx, const gsl_vector * x, double epsabs, double epsrel) { size_t i; int ok = 1; const size_t n = x->size ; if (epsrel < 0.0) { GSL_ERROR ("relative tolerance is negative", GSL_EBADTOL); } for (i = 0 ; i < n ; i++) { double xi = gsl_vector_get(x,i); double dxi = gsl_vector_get(dx,i); double tolerance = epsabs + epsrel * fabs(xi) ; if (fabs(dxi) < tolerance || dxi == 0) { ok = 1; } else { ok = 0; break; } } if (ok) return GSL_SUCCESS ; return GSL_CONTINUE; } int gsl_multiroot_test_residual (const gsl_vector * f, double epsabs) { size_t i; double residual = 0; const size_t n = f->size; if (epsabs < 0.0) { GSL_ERROR ("absolute tolerance is negative", GSL_EBADTOL); } for (i = 0 ; i < n ; i++) { double fi = gsl_vector_get(f, i); residual += fabs(fi); } if (residual < epsabs) { return GSL_SUCCESS; } return GSL_CONTINUE ; } gsl/multiroots/gsl_multiroots.h0000644000175000017500000001401013536674414015406 0ustar eddedd/* multiroots/gsl_multiroots.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MULTIROOTS_H__ #define __GSL_MULTIROOTS_H__ #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Definition of vector-valued functions with parameters based on gsl_vector */ struct gsl_multiroot_function_struct { int (* f) (const gsl_vector * x, void * params, gsl_vector * f); size_t n; void * params; }; typedef struct gsl_multiroot_function_struct gsl_multiroot_function ; #define GSL_MULTIROOT_FN_EVAL(F,x,y) (*((F)->f))(x,(F)->params,(y)) int gsl_multiroot_fdjacobian (gsl_multiroot_function * F, const gsl_vector * x, const gsl_vector * f, double epsrel, gsl_matrix * jacobian); typedef struct { const char *name; size_t size; int (*alloc) (void *state, size_t n); int (*set) (void *state, gsl_multiroot_function * function, gsl_vector * x, gsl_vector * f, gsl_vector * dx); int (*iterate) (void *state, gsl_multiroot_function * function, gsl_vector * x, gsl_vector * f, gsl_vector * dx); void (*free) (void *state); } gsl_multiroot_fsolver_type; typedef struct { const gsl_multiroot_fsolver_type * type; gsl_multiroot_function * function ; gsl_vector * x ; gsl_vector * f ; gsl_vector * dx ; void *state; } gsl_multiroot_fsolver; gsl_multiroot_fsolver * gsl_multiroot_fsolver_alloc (const gsl_multiroot_fsolver_type * T, size_t n); void gsl_multiroot_fsolver_free (gsl_multiroot_fsolver * s); int gsl_multiroot_fsolver_set (gsl_multiroot_fsolver * s, gsl_multiroot_function * f, const gsl_vector * x); int gsl_multiroot_fsolver_iterate (gsl_multiroot_fsolver * s); const char * gsl_multiroot_fsolver_name (const gsl_multiroot_fsolver * s); gsl_vector * gsl_multiroot_fsolver_root (const gsl_multiroot_fsolver * s); gsl_vector * gsl_multiroot_fsolver_dx (const gsl_multiroot_fsolver * s); gsl_vector * gsl_multiroot_fsolver_f (const gsl_multiroot_fsolver * s); /* Definition of vector-valued functions and gradient with parameters based on gsl_vector */ struct gsl_multiroot_function_fdf_struct { int (* f) (const gsl_vector * x, void * params, gsl_vector * f); int (* df) (const gsl_vector * x, void * params, gsl_matrix * df); int (* fdf) (const gsl_vector * x, void * params, gsl_vector * f, gsl_matrix *df); size_t n; void * params; }; typedef struct gsl_multiroot_function_fdf_struct gsl_multiroot_function_fdf ; #define GSL_MULTIROOT_FN_EVAL_F(F,x,y) ((*((F)->f))(x,(F)->params,(y))) #define GSL_MULTIROOT_FN_EVAL_DF(F,x,dy) ((*((F)->df))(x,(F)->params,(dy))) #define GSL_MULTIROOT_FN_EVAL_F_DF(F,x,y,dy) ((*((F)->fdf))(x,(F)->params,(y),(dy))) typedef struct { const char *name; size_t size; int (*alloc) (void *state, size_t n); int (*set) (void *state, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx); int (*iterate) (void *state, gsl_multiroot_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx); void (*free) (void *state); } gsl_multiroot_fdfsolver_type; typedef struct { const gsl_multiroot_fdfsolver_type * type; gsl_multiroot_function_fdf * fdf ; gsl_vector * x; gsl_vector * f; gsl_matrix * J; gsl_vector * dx; void *state; } gsl_multiroot_fdfsolver; gsl_multiroot_fdfsolver * gsl_multiroot_fdfsolver_alloc (const gsl_multiroot_fdfsolver_type * T, size_t n); int gsl_multiroot_fdfsolver_set (gsl_multiroot_fdfsolver * s, gsl_multiroot_function_fdf * fdf, const gsl_vector * x); int gsl_multiroot_fdfsolver_iterate (gsl_multiroot_fdfsolver * s); void gsl_multiroot_fdfsolver_free (gsl_multiroot_fdfsolver * s); const char * gsl_multiroot_fdfsolver_name (const gsl_multiroot_fdfsolver * s); gsl_vector * gsl_multiroot_fdfsolver_root (const gsl_multiroot_fdfsolver * s); gsl_vector * gsl_multiroot_fdfsolver_dx (const gsl_multiroot_fdfsolver * s); gsl_vector * gsl_multiroot_fdfsolver_f (const gsl_multiroot_fdfsolver * s); int gsl_multiroot_test_delta (const gsl_vector * dx, const gsl_vector * x, double epsabs, double epsrel); int gsl_multiroot_test_residual (const gsl_vector * f, double epsabs); GSL_VAR const gsl_multiroot_fsolver_type * gsl_multiroot_fsolver_dnewton; GSL_VAR const gsl_multiroot_fsolver_type * gsl_multiroot_fsolver_broyden; GSL_VAR const gsl_multiroot_fsolver_type * gsl_multiroot_fsolver_hybrid; GSL_VAR const gsl_multiroot_fsolver_type * gsl_multiroot_fsolver_hybrids; GSL_VAR const gsl_multiroot_fdfsolver_type * gsl_multiroot_fdfsolver_newton; GSL_VAR const gsl_multiroot_fdfsolver_type * gsl_multiroot_fdfsolver_gnewton; GSL_VAR const gsl_multiroot_fdfsolver_type * gsl_multiroot_fdfsolver_hybridj; GSL_VAR const gsl_multiroot_fdfsolver_type * gsl_multiroot_fdfsolver_hybridsj; __END_DECLS #endif /* __GSL_MULTIROOTS_H__ */ gsl/multiroots/test.c0000644000175000017500000001560613536674414013306 0ustar eddedd/* multiroots/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include "test_funcs.h" int test_fdf (const char * desc, gsl_multiroot_function_fdf * function, initpt_function initpt, double factor, const gsl_multiroot_fdfsolver_type * T); int test_f (const char * desc, gsl_multiroot_function_fdf * fdf, initpt_function initpt, double factor, const gsl_multiroot_fsolver_type * T); int main (void) { const gsl_multiroot_fsolver_type * fsolvers[5] ; const gsl_multiroot_fsolver_type ** T1 ; const gsl_multiroot_fdfsolver_type * fdfsolvers[5] ; const gsl_multiroot_fdfsolver_type ** T2 ; double f; fsolvers[0] = gsl_multiroot_fsolver_dnewton; fsolvers[1] = gsl_multiroot_fsolver_broyden; fsolvers[2] = gsl_multiroot_fsolver_hybrid; fsolvers[3] = gsl_multiroot_fsolver_hybrids; fsolvers[4] = 0; fdfsolvers[0] = gsl_multiroot_fdfsolver_newton; fdfsolvers[1] = gsl_multiroot_fdfsolver_gnewton; fdfsolvers[2] = gsl_multiroot_fdfsolver_hybridj; fdfsolvers[3] = gsl_multiroot_fdfsolver_hybridsj; fdfsolvers[4] = 0; gsl_ieee_env_setup(); f = 1.0 ; T1 = fsolvers ; while (*T1 != 0) { test_f ("Rosenbrock", &rosenbrock, rosenbrock_initpt, f, *T1); test_f ("Roth", &roth, roth_initpt, f, *T1); test_f ("Powell badly scaled", &powellscal, powellscal_initpt, f, *T1); test_f ("Brown badly scaled", &brownscal, brownscal_initpt, f, *T1); test_f ("Powell singular", &powellsing, powellsing_initpt, f, *T1); test_f ("Wood", &wood, wood_initpt, f, *T1); test_f ("Helical", &helical, helical_initpt, f, *T1); test_f ("Discrete BVP", &dbv, dbv_initpt, f, *T1); test_f ("Trig", &trig, trig_initpt, f, *T1); T1++; } T2 = fdfsolvers ; while (*T2 != 0) { test_fdf ("Rosenbrock", &rosenbrock, rosenbrock_initpt, f, *T2); test_fdf ("Roth", &roth, roth_initpt, f, *T2); test_fdf ("Powell badly scaled", &powellscal, powellscal_initpt, f, *T2); test_fdf ("Brown badly scaled", &brownscal, brownscal_initpt, f, *T2); test_fdf ("Powell singular", &powellsing, powellsing_initpt, f, *T2); test_fdf ("Wood", &wood, wood_initpt, f, *T2); test_fdf ("Helical", &helical, helical_initpt, f, *T2); test_fdf ("Discrete BVP", &dbv, dbv_initpt, f, *T2); test_fdf ("Trig", &trig, trig_initpt, f, *T2); T2++; } exit (gsl_test_summary ()); } void scale (gsl_vector * x, double factor); void scale (gsl_vector * x, double factor) { size_t i, n = x->size; if (gsl_vector_isnull(x)) { for (i = 0; i < n; i++) { gsl_vector_set (x, i, factor); } } else { for (i = 0; i < n; i++) { double xi = gsl_vector_get(x, i); gsl_vector_set(x, i, factor * xi); } } } int test_fdf (const char * desc, gsl_multiroot_function_fdf * function, initpt_function initpt, double factor, const gsl_multiroot_fdfsolver_type * T) { int status; double residual = 0; size_t i, n = function->n, iter = 0; gsl_vector *x = gsl_vector_alloc (n); gsl_matrix *J = gsl_matrix_alloc (n, n); gsl_multiroot_fdfsolver *s; (*initpt) (x); if (factor != 1.0) scale(x, factor); s = gsl_multiroot_fdfsolver_alloc (T, n); gsl_multiroot_fdfsolver_set (s, function, x); do { iter++; status = gsl_multiroot_fdfsolver_iterate (s); if (status) break ; status = gsl_multiroot_test_residual (s->f, 0.0000001); } while (status == GSL_CONTINUE && iter < 1000); #ifdef DEBUG printf("x "); gsl_vector_fprintf (stdout, s->x, "%g"); printf("\n"); printf("f "); gsl_vector_fprintf (stdout, s->f, "%g"); printf("\n"); #endif #ifdef TEST_JACOBIAN { double r,sum; size_t j; gsl_multiroot_function f1 ; f1.f = function->f ; f1.n = function->n ; f1.params = function->params ; gsl_multiroot_fdjacobian (&f1, s->x, s->f, GSL_SQRT_DBL_EPSILON, J); /* compare J and s->J */ r=0;sum=0; for (i = 0; i < n; i++) for (j = 0; j< n ; j++) { double u = gsl_matrix_get(J,i,j); double su = gsl_matrix_get(s->J, i, j); r = fabs(u - su)/(1e-6 + 1e-6 * fabs(u)); sum+=r; if (fabs(u - su) > 1e-6 + 1e-6 * fabs(u)) printf("broken jacobian %g\n", r); } printf("avg r = %g\n", sum/(n*n)); } #endif for (i = 0; i < n ; i++) { residual += fabs(gsl_vector_get(s->f, i)); } gsl_multiroot_fdfsolver_free (s); gsl_matrix_free(J); gsl_vector_free(x); gsl_test(status, "%s on %s (%g), %u iterations, residual = %.2g", T->name, desc, factor, iter, residual); return status; } int test_f (const char * desc, gsl_multiroot_function_fdf * fdf, initpt_function initpt, double factor, const gsl_multiroot_fsolver_type * T) { int status; size_t i, n = fdf->n, iter = 0; double residual = 0; gsl_vector *x; gsl_multiroot_fsolver *s; gsl_multiroot_function function; function.f = fdf->f; function.params = fdf->params; function.n = n ; x = gsl_vector_alloc (n); (*initpt) (x); if (factor != 1.0) scale(x, factor); s = gsl_multiroot_fsolver_alloc (T, n); gsl_multiroot_fsolver_set (s, &function, x); /* printf("x "); gsl_vector_fprintf (stdout, s->x, "%g"); printf("\n"); */ /* printf("f "); gsl_vector_fprintf (stdout, s->f, "%g"); printf("\n"); */ do { iter++; status = gsl_multiroot_fsolver_iterate (s); if (status) break ; status = gsl_multiroot_test_residual (s->f, 0.0000001); } while (status == GSL_CONTINUE && iter < 1000); #ifdef DEBUG printf("x "); gsl_vector_fprintf (stdout, s->x, "%g"); printf("\n"); printf("f "); gsl_vector_fprintf (stdout, s->f, "%g"); printf("\n"); #endif for (i = 0; i < n ; i++) { residual += fabs(gsl_vector_get(s->f, i)); } gsl_multiroot_fsolver_free (s); gsl_vector_free(x); gsl_test(status, "%s on %s (%g), %u iterations, residual = %.2g", T->name, desc, factor, iter, residual); return status; } gsl/multiroots/fdfsolver.c0000644000175000017500000001027213536674414014313 0ustar eddedd/* multiroots/fdfsolver.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include gsl_multiroot_fdfsolver * gsl_multiroot_fdfsolver_alloc (const gsl_multiroot_fdfsolver_type * T, size_t n) { int status; gsl_multiroot_fdfsolver * s; s = (gsl_multiroot_fdfsolver *) malloc (sizeof (gsl_multiroot_fdfsolver)); if (s == 0) { GSL_ERROR_VAL ("failed to allocate space for multiroot solver struct", GSL_ENOMEM, 0); } s->x = gsl_vector_calloc (n); if (s->x == 0) { free (s); GSL_ERROR_VAL ("failed to allocate space for x", GSL_ENOMEM, 0); } s->f = gsl_vector_calloc (n); if (s->f == 0) { gsl_vector_free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for f", GSL_ENOMEM, 0); } s->J = gsl_matrix_calloc (n,n); if (s->J == 0) { gsl_vector_free (s->x); gsl_vector_free (s->f); free (s); GSL_ERROR_VAL ("failed to allocate space for g", GSL_ENOMEM, 0); } s->dx = gsl_vector_calloc (n); if (s->dx == 0) { gsl_matrix_free (s->J); gsl_vector_free (s->x); gsl_vector_free (s->f); free (s); GSL_ERROR_VAL ("failed to allocate space for dx", GSL_ENOMEM, 0); } s->state = malloc (T->size); if (s->state == 0) { gsl_vector_free (s->dx); gsl_vector_free (s->x); gsl_vector_free (s->f); gsl_matrix_free (s->J); free (s); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for multiroot solver state", GSL_ENOMEM, 0); } s->type = T ; status = (s->type->alloc)(s->state, n); if (status != GSL_SUCCESS) { free (s->state); gsl_vector_free (s->dx); gsl_vector_free (s->x); gsl_vector_free (s->f); gsl_matrix_free (s->J); free (s); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to set solver", status, 0); } s->fdf = NULL; return s; } int gsl_multiroot_fdfsolver_set (gsl_multiroot_fdfsolver * s, gsl_multiroot_function_fdf * f, const gsl_vector * x) { if (s->x->size != f->n) { GSL_ERROR ("function incompatible with solver size", GSL_EBADLEN); } if (x->size != f->n) { GSL_ERROR ("vector length not compatible with function", GSL_EBADLEN); } s->fdf = f; gsl_vector_memcpy(s->x,x); return (s->type->set) (s->state, s->fdf, s->x, s->f, s->J, s->dx); } int gsl_multiroot_fdfsolver_iterate (gsl_multiroot_fdfsolver * s) { return (s->type->iterate) (s->state, s->fdf, s->x, s->f, s->J, s->dx); } void gsl_multiroot_fdfsolver_free (gsl_multiroot_fdfsolver * s) { RETURN_IF_NULL (s); (s->type->free) (s->state); free (s->state); gsl_vector_free (s->dx); gsl_vector_free (s->x); gsl_vector_free (s->f); gsl_matrix_free (s->J); free (s); } const char * gsl_multiroot_fdfsolver_name (const gsl_multiroot_fdfsolver * s) { return s->type->name; } gsl_vector * gsl_multiroot_fdfsolver_root (const gsl_multiroot_fdfsolver * s) { return s->x; } gsl_vector * gsl_multiroot_fdfsolver_dx (const gsl_multiroot_fdfsolver * s) { return s->dx; } gsl_vector * gsl_multiroot_fdfsolver_f (const gsl_multiroot_fdfsolver * s) { return s->f; } gsl/multiroots/test_funcs.c0000644000175000017500000003755713536674414014515 0ustar eddedd/* multiroots/test_funcs.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include "test_funcs.h" /* For information on testing see the following paper, J.J More, B.S. Garbow, K.E. Hillstrom, "Testing Unconstrained Optimization Software", ACM Transactions on Mathematical Software, Vol 7, No 1, (1981) p 17-41 */ /* Rosenbrock Function */ gsl_multiroot_function_fdf rosenbrock = {&rosenbrock_f, &rosenbrock_df, &rosenbrock_fdf, 2, 0}; void rosenbrock_initpt (gsl_vector * x) { gsl_vector_set (x, 0, -1.2); gsl_vector_set (x, 1, 1.0); } int rosenbrock_f (const gsl_vector * x, void *params, gsl_vector * f) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double y0 = 1 - x0; double y1 = 10 * (x1 - x0 * x0); gsl_vector_set (f, 0, y0); gsl_vector_set (f, 1, y1); params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int rosenbrock_df (const gsl_vector * x, void *params, gsl_matrix * df) { double x0 = gsl_vector_get (x, 0); double df00 = -1; double df01 = 0; double df10 = -20 * x0; double df11 = 10; gsl_matrix_set (df, 0, 0, df00); gsl_matrix_set (df, 0, 1, df01); gsl_matrix_set (df, 1, 0, df10); gsl_matrix_set (df, 1, 1, df11); params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int rosenbrock_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df) { rosenbrock_f (x, params, f); rosenbrock_df (x, params, df); return GSL_SUCCESS; } /* Freudenstein and Roth function */ gsl_multiroot_function_fdf roth = {&roth_f, &roth_df, &roth_fdf, 2, 0}; void roth_initpt (gsl_vector * x) { gsl_vector_set (x, 0, 4.5); /* changed from the value in the paper */ gsl_vector_set (x, 1, 3.5); /* otherwise the problem is too hard */ } int roth_f (const gsl_vector * x, void *params, gsl_vector * f) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double y0 = -13.0 + x0 + ((5.0 - x1)*x1 - 2.0)*x1; double y1 = -29.0 + x0 + ((x1 + 1.0)*x1 - 14.0)*x1; gsl_vector_set (f, 0, y0); gsl_vector_set (f, 1, y1); params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int roth_df (const gsl_vector * x, void *params, gsl_matrix * df) { double x1 = gsl_vector_get (x, 1); double df00 = 1; double df01 = -3 * x1 * x1 + 10 * x1 - 2; double df10 = 1; double df11 = 3 * x1 * x1 + 2 * x1 - 14; gsl_matrix_set (df, 0, 0, df00); gsl_matrix_set (df, 0, 1, df01); gsl_matrix_set (df, 1, 0, df10); gsl_matrix_set (df, 1, 1, df11); params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int roth_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df) { roth_f (x, params, f); roth_df (x, params, df); return GSL_SUCCESS; } /* Powell badly scaled function */ gsl_multiroot_function_fdf powellscal = {&powellscal_f, &powellscal_df, &powellscal_fdf, 2, 0}; void powellscal_initpt (gsl_vector * x) { gsl_vector_set (x, 0, 0.0); gsl_vector_set (x, 1, 1.0); } int powellscal_f (const gsl_vector * x, void *params, gsl_vector * f) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double y0 = 10000.0 * x0 * x1 - 1.0; double y1 = exp (-x0) + exp (-x1) - 1.0001; gsl_vector_set (f, 0, y0); gsl_vector_set (f, 1, y1); params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int powellscal_df (const gsl_vector * x, void *params, gsl_matrix * df) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double df00 = 10000.0 * x1, df01 = 10000.0 * x0; double df10 = -exp (-x0), df11 = -exp (-x1); gsl_matrix_set (df, 0, 0, df00); gsl_matrix_set (df, 0, 1, df01); gsl_matrix_set (df, 1, 0, df10); gsl_matrix_set (df, 1, 1, df11); params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int powellscal_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df) { powellscal_f (x, params, f); powellscal_df (x, params, df); return GSL_SUCCESS; } /* Brown badly scaled function */ gsl_multiroot_function_fdf brownscal = {&brownscal_f, &brownscal_df, &brownscal_fdf, 2, 0}; void brownscal_initpt (gsl_vector * x) { gsl_vector_set (x, 0, 1.0); gsl_vector_set (x, 1, 1.0); } int brownscal_f (const gsl_vector * x, void *params, gsl_vector * f) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double y0 = x0 - 1e6; double y1 = x0 * x1 - 2; gsl_vector_set (f, 0, y0); gsl_vector_set (f, 1, y1); params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int brownscal_df (const gsl_vector * x, void *params, gsl_matrix * df) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double df00 = 1.0, df01 = 0.0; double df10 = x1, df11 = x0; gsl_matrix_set (df, 0, 0, df00); gsl_matrix_set (df, 0, 1, df01); gsl_matrix_set (df, 1, 0, df10); gsl_matrix_set (df, 1, 1, df11); params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int brownscal_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df) { brownscal_f (x, params, f); brownscal_df (x, params, df); return GSL_SUCCESS; } /* Powell Singular Function */ gsl_multiroot_function_fdf powellsing = {&powellsing_f, &powellsing_df, &powellsing_fdf, 4, 0}; void powellsing_initpt (gsl_vector * x) { gsl_vector_set (x, 0, 3.0); gsl_vector_set (x, 1, -1.0); gsl_vector_set (x, 2, 0.0); gsl_vector_set (x, 3, 1.0); } int powellsing_f (const gsl_vector * x, void *params, gsl_vector * f) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double x2 = gsl_vector_get (x, 2); double x3 = gsl_vector_get (x, 3); double y0 = x0 + 10 * x1; double y1 = sqrt (5.0) * (x2 - x3); double y2 = pow (x1 - 2 * x2, 2.0); double y3 = sqrt (10.0) * pow (x0 - x3, 2.0); gsl_vector_set (f, 0, y0); gsl_vector_set (f, 1, y1); gsl_vector_set (f, 2, y2); gsl_vector_set (f, 3, y3); params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int powellsing_df (const gsl_vector * x, void *params, gsl_matrix * df) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double x2 = gsl_vector_get (x, 2); double x3 = gsl_vector_get (x, 3); double df00 = 1, df01 = 10, df02 = 0, df03 = 0; double df10 = 0, df11 = 0, df12 = sqrt (5.0), df13 = -df12; double df20 = 0, df21 = 2 * (x1 - 2 * x2), df22 = -2 * df21, df23 = 0; double df30 = 2 * sqrt (10.0) * (x0 - x3), df31 = 0, df32 = 0, df33 = -df30; gsl_matrix_set (df, 0, 0, df00); gsl_matrix_set (df, 0, 1, df01); gsl_matrix_set (df, 0, 2, df02); gsl_matrix_set (df, 0, 3, df03); gsl_matrix_set (df, 1, 0, df10); gsl_matrix_set (df, 1, 1, df11); gsl_matrix_set (df, 1, 2, df12); gsl_matrix_set (df, 1, 3, df13); gsl_matrix_set (df, 2, 0, df20); gsl_matrix_set (df, 2, 1, df21); gsl_matrix_set (df, 2, 2, df22); gsl_matrix_set (df, 2, 3, df23); gsl_matrix_set (df, 3, 0, df30); gsl_matrix_set (df, 3, 1, df31); gsl_matrix_set (df, 3, 2, df32); gsl_matrix_set (df, 3, 3, df33); params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int powellsing_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df) { powellsing_f (x, params, f); powellsing_df (x, params, df); return GSL_SUCCESS; } /* Wood function */ gsl_multiroot_function_fdf wood = {&wood_f, &wood_df, &wood_fdf, 4, 0}; void wood_initpt (gsl_vector * x) { gsl_vector_set (x, 0, -3.0); gsl_vector_set (x, 1, -1.0); gsl_vector_set (x, 2, -3.0); gsl_vector_set (x, 3, -1.0); } int wood_f (const gsl_vector * x, void *params, gsl_vector * f) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double x2 = gsl_vector_get (x, 2); double x3 = gsl_vector_get (x, 3); double t1 = x1 - x0 * x0; double t2 = x3 - x2 * x2; double y0 = -200.0 * x0 * t1 - (1 - x0); double y1 = 200.0 * t1 + 20.2 * (x1 - 1) + 19.8 * (x3 - 1); double y2 = -180.0 * x2 * t2 - (1 - x2); double y3 = 180.0 * t2 + 20.2 * (x3 - 1) + 19.8 * (x1 - 1); gsl_vector_set (f, 0, y0); gsl_vector_set (f, 1, y1); gsl_vector_set (f, 2, y2); gsl_vector_set (f, 3, y3); params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int wood_df (const gsl_vector * x, void *params, gsl_matrix * df) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double x2 = gsl_vector_get (x, 2); double x3 = gsl_vector_get (x, 3); double t1 = x1 - 3 * x0 * x0; double t2 = x3 - 3 * x2 * x2; double df00 = -200.0 * t1 + 1, df01 = -200.0 * x0, df02 = 0, df03 = 0; double df10 = -400.0*x0, df11 = 200.0 + 20.2, df12 = 0, df13 = 19.8; double df20 = 0, df21 = 0, df22 = -180.0 * t2 + 1, df23 = -180.0 * x2; double df30 = 0, df31 = 19.8, df32 = -2 * 180 * x2, df33 = 180.0 + 20.2; gsl_matrix_set (df, 0, 0, df00); gsl_matrix_set (df, 0, 1, df01); gsl_matrix_set (df, 0, 2, df02); gsl_matrix_set (df, 0, 3, df03); gsl_matrix_set (df, 1, 0, df10); gsl_matrix_set (df, 1, 1, df11); gsl_matrix_set (df, 1, 2, df12); gsl_matrix_set (df, 1, 3, df13); gsl_matrix_set (df, 2, 0, df20); gsl_matrix_set (df, 2, 1, df21); gsl_matrix_set (df, 2, 2, df22); gsl_matrix_set (df, 2, 3, df23); gsl_matrix_set (df, 3, 0, df30); gsl_matrix_set (df, 3, 1, df31); gsl_matrix_set (df, 3, 2, df32); gsl_matrix_set (df, 3, 3, df33); params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int wood_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df) { wood_f (x, params, f); wood_df (x, params, df); return GSL_SUCCESS; } /* Helical Valley Function */ gsl_multiroot_function_fdf helical = {&helical_f, &helical_df, &helical_fdf, 3, 0}; void helical_initpt (gsl_vector * x) { gsl_vector_set (x, 0, -1.0); gsl_vector_set (x, 1, 0.0); gsl_vector_set (x, 2, 0.0); } int helical_f (const gsl_vector * x, void *params, gsl_vector * f) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double x2 = gsl_vector_get (x, 2); double t1, t2; double y0, y1, y2; if (x0 > 0) { t1 = atan(x1/x0) / (2.0 * M_PI); } else if (x0 < 0) { t1 = 0.5 + atan(x1/x0) / (2.0 * M_PI); } else { t1 = 0.25 * (x1 > 0 ? +1 : -1); } t2 = sqrt(x0*x0 + x1*x1) ; y0 = 10 * (x2 - 10 * t1); y1 = 10 * (t2 - 1); y2 = x2 ; gsl_vector_set (f, 0, y0); gsl_vector_set (f, 1, y1); gsl_vector_set (f, 2, y2); params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int helical_df (const gsl_vector * x, void *params, gsl_matrix * df) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double t = x0 * x0 + x1 * x1 ; double t1 = 2 * M_PI * t ; double t2 = sqrt(t) ; double df00 = 100*x1/t1, df01 = -100.0 * x0/t1, df02 = 10.0; double df10 = 10*x0/t2, df11 = 10*x1/t2, df12 = 0; double df20 = 0, df21 = 0, df22 = 1.0; gsl_matrix_set (df, 0, 0, df00); gsl_matrix_set (df, 0, 1, df01); gsl_matrix_set (df, 0, 2, df02); gsl_matrix_set (df, 1, 0, df10); gsl_matrix_set (df, 1, 1, df11); gsl_matrix_set (df, 1, 2, df12); gsl_matrix_set (df, 2, 0, df20); gsl_matrix_set (df, 2, 1, df21); gsl_matrix_set (df, 2, 2, df22); params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int helical_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df) { helical_f (x, params, f); helical_df (x, params, df); return GSL_SUCCESS; } /* Discrete Boundary Value Function */ #define N 10 gsl_multiroot_function_fdf dbv = {&dbv_f, &dbv_df, &dbv_fdf, N, 0}; void dbv_initpt (gsl_vector * x) { size_t i; double h = 1.0 / (N + 1.0); for (i = 0; i < N; i++) { double t = (i + 1) * h; double z = t * (t - 1); gsl_vector_set (x, i, z); } } int dbv_f (const gsl_vector * x, void *params, gsl_vector * f) { size_t i; double h = 1.0 / (N + 1.0); for (i = 0; i < N; i++) { double z, ti = (i + 1) * h; double xi = 0, xim1 = 0, xip1 = 0; xi = gsl_vector_get (x, i); if (i > 0) xim1 = gsl_vector_get (x, i - 1); if (i < N - 1) xip1 = gsl_vector_get (x, i + 1); z = 2 * xi - xim1 - xip1 + h * h * pow(xi + ti + 1, 3.0) / 2.0; gsl_vector_set (f, i, z); } params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int dbv_df (const gsl_vector * x, void *params, gsl_matrix * df) { size_t i, j; double h = 1.0 / (N + 1.0); for (i = 0; i < N; i++) for (j = 0; j < N; j++) gsl_matrix_set (df, i, j, 0.0); for (i = 0; i < N; i++) { double dz_dxi, ti = (i + 1) * h; double xi = gsl_vector_get (x, i); dz_dxi = 2.0 + (3.0 / 2.0) * h * h * pow(xi + ti + 1, 2.0) ; gsl_matrix_set (df, i, i, dz_dxi); if (i > 0) gsl_matrix_set (df, i, i-1, -1.0); if (i < N - 1) gsl_matrix_set (df, i, i+1, -1.0); } params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int dbv_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df) { dbv_f (x, params, f); dbv_df (x, params, df); return GSL_SUCCESS; } /* Trigonometric Function */ gsl_multiroot_function_fdf trig = {&trig_f, &trig_df, &trig_fdf, N, 0}; void trig_initpt (gsl_vector * x) { size_t i; for (i = 0; i < N; i++) /* choose an initial point which converges */ { gsl_vector_set (x, i, 0.05); } } int trig_f (const gsl_vector * x, void *params, gsl_vector * f) { size_t i; double sum = 0; for (i = 0; i < N; i++) { sum += cos(gsl_vector_get(x,i)); } for (i = 0; i < N; i++) { double xi = gsl_vector_get (x,i); double z = N - sum + (i + 1) * (1 - cos(xi)) - sin(xi); gsl_vector_set (f, i, z); } params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int trig_df (const gsl_vector * x, void *params, gsl_matrix * df) { size_t i, j; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { double dz; double xi = gsl_vector_get(x, i); double xj = gsl_vector_get(x, j); if (j == i) dz = sin(xi) + (i + 1) * sin(xi) - cos(xi); else dz = sin(xj); gsl_matrix_set(df, i, j, dz); } } params = 0; /* avoid warning about unused parameters */ return GSL_SUCCESS; } int trig_fdf (const gsl_vector * x, void *params, gsl_vector * f, gsl_matrix * df) { trig_f (x, params, f); trig_df (x, params, df); return GSL_SUCCESS; } gsl/multiroots/enorm.c0000644000175000017500000000205313536674414013437 0ustar eddedd/* multiroots/enorm.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static double enorm (const gsl_vector * f); static double enorm (const gsl_vector * f) { double e2 = 0 ; size_t i, n = f->size ; for (i = 0; i < n ; i++) { double fi= gsl_vector_get(f, i); e2 += fi * fi ; } return sqrt(e2); } gsl/interpolation/0000755000175000017500000000000014057135461012612 5ustar eddeddgsl/interpolation/Makefile.in0000664000175000017500000011311614057135461014664 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = interpolation ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslinterpolation_la_LIBADD = am_libgslinterpolation_la_OBJECTS = accel.lo akima.lo cspline.lo \ interp.lo linear.lo spline.lo poly.lo steffen.lo inline.lo \ interp2d.lo bilinear.lo bicubic.lo spline2d.lo libgslinterpolation_la_OBJECTS = $(am_libgslinterpolation_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslinterpolation.la ../poly/libgslpoly.la \ ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la \ ../blas/libgslblas.la ../matrix/libgslmatrix.la \ ../vector/libgslvector.la ../block/libgslblock.la \ ../complex/libgslcomplex.la ../cblas/libgslcblas.la \ ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/accel.Plo ./$(DEPDIR)/akima.Plo \ ./$(DEPDIR)/bicubic.Plo ./$(DEPDIR)/bilinear.Plo \ ./$(DEPDIR)/cspline.Plo ./$(DEPDIR)/inline.Plo \ ./$(DEPDIR)/interp.Plo ./$(DEPDIR)/interp2d.Plo \ ./$(DEPDIR)/linear.Plo ./$(DEPDIR)/poly.Plo \ ./$(DEPDIR)/spline.Plo ./$(DEPDIR)/spline2d.Plo \ ./$(DEPDIR)/steffen.Plo ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslinterpolation_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslinterpolation_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslinterpolation.la pkginclude_HEADERS = gsl_interp.h gsl_spline.h gsl_interp2d.h gsl_spline2d.h libgslinterpolation_la_SOURCES = accel.c akima.c cspline.c interp.c linear.c integ_eval.h spline.c poly.c steffen.c inline.c interp2d.c bilinear.c bicubic.c spline2d.c noinst_HEADERS = test2d.c AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslinterpolation.la ../poly/libgslpoly.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../cblas/libgslcblas.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu interpolation/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu interpolation/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslinterpolation.la: $(libgslinterpolation_la_OBJECTS) $(libgslinterpolation_la_DEPENDENCIES) $(EXTRA_libgslinterpolation_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslinterpolation_la_OBJECTS) $(libgslinterpolation_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accel.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/akima.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bicubic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bilinear.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cspline.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inline.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interp2d.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linear.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poly.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spline.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spline2d.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/steffen.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/accel.Plo -rm -f ./$(DEPDIR)/akima.Plo -rm -f ./$(DEPDIR)/bicubic.Plo -rm -f ./$(DEPDIR)/bilinear.Plo -rm -f ./$(DEPDIR)/cspline.Plo -rm -f ./$(DEPDIR)/inline.Plo -rm -f ./$(DEPDIR)/interp.Plo -rm -f ./$(DEPDIR)/interp2d.Plo -rm -f ./$(DEPDIR)/linear.Plo -rm -f ./$(DEPDIR)/poly.Plo -rm -f ./$(DEPDIR)/spline.Plo -rm -f ./$(DEPDIR)/spline2d.Plo -rm -f ./$(DEPDIR)/steffen.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/accel.Plo -rm -f ./$(DEPDIR)/akima.Plo -rm -f ./$(DEPDIR)/bicubic.Plo -rm -f ./$(DEPDIR)/bilinear.Plo -rm -f ./$(DEPDIR)/cspline.Plo -rm -f ./$(DEPDIR)/inline.Plo -rm -f ./$(DEPDIR)/interp.Plo -rm -f ./$(DEPDIR)/interp2d.Plo -rm -f ./$(DEPDIR)/linear.Plo -rm -f ./$(DEPDIR)/poly.Plo -rm -f ./$(DEPDIR)/spline.Plo -rm -f ./$(DEPDIR)/spline2d.Plo -rm -f ./$(DEPDIR)/steffen.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/interpolation/akima.c0000644000175000017500000002226213536674414014053 0ustar eddedd/* interpolation/akima.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include "integ_eval.h" #include typedef struct { double * b; double * c; double * d; double * _m; } akima_state_t; /* common creation */ static void * akima_alloc (size_t size) { akima_state_t *state = (akima_state_t *) malloc (sizeof (akima_state_t)); if (state == NULL) { GSL_ERROR_NULL("failed to allocate space for state", GSL_ENOMEM); } state->b = (double *) malloc (size * sizeof (double)); if (state->b == NULL) { free (state); GSL_ERROR_NULL("failed to allocate space for b", GSL_ENOMEM); } state->c = (double *) malloc (size * sizeof (double)); if (state->c == NULL) { free (state->b); free (state); GSL_ERROR_NULL("failed to allocate space for c", GSL_ENOMEM); } state->d = (double *) malloc (size * sizeof (double)); if (state->d == NULL) { free (state->c); free (state->b); free (state); GSL_ERROR_NULL("failed to allocate space for d", GSL_ENOMEM); } state->_m = (double *) malloc ((size + 4) * sizeof (double)); if (state->_m == NULL) { free (state->d); free (state->c); free (state->b); free (state); GSL_ERROR_NULL("failed to allocate space for _m", GSL_ENOMEM); } return state; } /* common calculation */ static void akima_calc (const double x_array[], double b[], double c[], double d[], size_t size, double m[]) { size_t i; for (i = 0; i < (size - 1); i++) { const double NE = fabs (m[i + 1] - m[i]) + fabs (m[i - 1] - m[i - 2]); if (NE == 0.0) { b[i] = m[i]; c[i] = 0.0; d[i] = 0.0; } else { const double h_i = x_array[i + 1] - x_array[i]; const double NE_next = fabs (m[i + 2] - m[i + 1]) + fabs (m[i] - m[i - 1]); const double alpha_i = fabs (m[i - 1] - m[i - 2]) / NE; double alpha_ip1; double tL_ip1; if (NE_next == 0.0) { tL_ip1 = m[i]; } else { alpha_ip1 = fabs (m[i] - m[i - 1]) / NE_next; tL_ip1 = (1.0 - alpha_ip1) * m[i] + alpha_ip1 * m[i + 1]; } b[i] = (1.0 - alpha_i) * m[i - 1] + alpha_i * m[i]; c[i] = (3.0 * m[i] - 2.0 * b[i] - tL_ip1) / h_i; d[i] = (b[i] + tL_ip1 - 2.0 * m[i]) / (h_i * h_i); } } } static int akima_init (void * vstate, const double x_array[], const double y_array[], size_t size) { akima_state_t *state = (akima_state_t *) vstate; double * m = state->_m + 2; /* offset so we can address the -1,-2 components */ size_t i; for (i = 0; i <= size - 2; i++) { m[i] = (y_array[i + 1] - y_array[i]) / (x_array[i + 1] - x_array[i]); } /* non-periodic boundary conditions */ m[-2] = 3.0 * m[0] - 2.0 * m[1]; m[-1] = 2.0 * m[0] - m[1]; m[size - 1] = 2.0 * m[size - 2] - m[size - 3]; m[size] = 3.0 * m[size - 2] - 2.0 * m[size - 3]; akima_calc (x_array, state->b, state->c, state->d, size, m); return GSL_SUCCESS; } static int akima_init_periodic (void * vstate, const double x_array[], const double y_array[], size_t size) { akima_state_t *state = (akima_state_t *) vstate; double * m = state->_m + 2; /* offset so we can address the -1,-2 components */ size_t i; for (i = 0; i <= size - 2; i++) { m[i] = (y_array[i + 1] - y_array[i]) / (x_array[i + 1] - x_array[i]); } /* periodic boundary conditions */ m[-2] = m[size - 1 - 2]; m[-1] = m[size - 1 - 1]; m[size - 1] = m[0]; m[size] = m[1]; akima_calc (x_array, state->b, state->c, state->d, size, m); return GSL_SUCCESS; } static void akima_free (void * vstate) { akima_state_t *state = (akima_state_t *) vstate; free (state->b); free (state->c); free (state->d); free (state->_m); free (state); } static int akima_eval (const void * vstate, const double x_array[], const double y_array[], size_t size, double x, gsl_interp_accel * a, double *y) { const akima_state_t *state = (const akima_state_t *) vstate; size_t index; if (a != 0) { index = gsl_interp_accel_find (a, x_array, size, x); } else { index = gsl_interp_bsearch (x_array, x, 0, size - 1); } /* evaluate */ { const double x_lo = x_array[index]; const double delx = x - x_lo; const double b = state->b[index]; const double c = state->c[index]; const double d = state->d[index]; *y = y_array[index] + delx * (b + delx * (c + d * delx)); return GSL_SUCCESS; } } static int akima_eval_deriv (const void * vstate, const double x_array[], const double y_array[], size_t size, double x, gsl_interp_accel * a, double *dydx) { const akima_state_t *state = (const akima_state_t *) vstate; size_t index; DISCARD_POINTER(y_array); /* prevent warning about unused parameter */ if (a != 0) { index = gsl_interp_accel_find (a, x_array, size, x); } else { index = gsl_interp_bsearch (x_array, x, 0, size - 1); } /* evaluate */ { double x_lo = x_array[index]; double delx = x - x_lo; double b = state->b[index]; double c = state->c[index]; double d = state->d[index]; *dydx = b + delx * (2.0 * c + 3.0 * d * delx); return GSL_SUCCESS; } } static int akima_eval_deriv2 (const void * vstate, const double x_array[], const double y_array[], size_t size, double x, gsl_interp_accel * a, double *y_pp) { const akima_state_t *state = (const akima_state_t *) vstate; size_t index; DISCARD_POINTER(y_array); /* prevent warning about unused parameter */ if (a != 0) { index = gsl_interp_accel_find (a, x_array, size, x); } else { index = gsl_interp_bsearch (x_array, x, 0, size - 1); } /* evaluate */ { const double x_lo = x_array[index]; const double delx = x - x_lo; const double c = state->c[index]; const double d = state->d[index]; *y_pp = 2.0 * c + 6.0 * d * delx; return GSL_SUCCESS; } } static int akima_eval_integ (const void * vstate, const double x_array[], const double y_array[], size_t size, gsl_interp_accel * acc, double a, double b, double * result) { const akima_state_t *state = (const akima_state_t *) vstate; size_t i, index_a, index_b; if (acc != 0) { index_a = gsl_interp_accel_find (acc, x_array, size, a); index_b = gsl_interp_accel_find (acc, x_array, size, b); } else { index_a = gsl_interp_bsearch (x_array, a, 0, size - 1); index_b = gsl_interp_bsearch (x_array, b, 0, size - 1); } *result = 0.0; /* interior intervals */ for(i=index_a; i<=index_b; i++) { const double x_hi = x_array[i + 1]; const double x_lo = x_array[i]; const double y_lo = y_array[i]; const double dx = x_hi - x_lo; if(dx != 0.0) { if (i == index_a || i == index_b) { double x1 = (i == index_a) ? a : x_lo; double x2 = (i == index_b) ? b : x_hi; *result += integ_eval (y_lo, state->b[i], state->c[i], state->d[i], x_lo, x1, x2); } else { *result += dx * (y_lo + dx*(0.5*state->b[i] + dx*(state->c[i]/3.0 + 0.25*state->d[i]*dx))); } } else { *result = 0.0; return GSL_EINVAL; } } return GSL_SUCCESS; } static const gsl_interp_type akima_type = { "akima", 5, &akima_alloc, &akima_init, &akima_eval, &akima_eval_deriv, &akima_eval_deriv2, &akima_eval_integ, &akima_free }; const gsl_interp_type * gsl_interp_akima = &akima_type; static const gsl_interp_type akima_periodic_type = { "akima-periodic", 5, &akima_alloc, &akima_init_periodic, &akima_eval, &akima_eval_deriv, &akima_eval_deriv2, &akima_eval_integ, &akima_free }; const gsl_interp_type * gsl_interp_akima_periodic = &akima_periodic_type; gsl/interpolation/cspline.c0000644000175000017500000003046413536674414014431 0ustar eddedd/* interpolation/cspline.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include "integ_eval.h" #include typedef struct { double * c; double * g; double * diag; double * offdiag; } cspline_state_t; /* common initialization */ static void * cspline_alloc (size_t size) { cspline_state_t * state = (cspline_state_t *) malloc (sizeof (cspline_state_t)); if (state == NULL) { GSL_ERROR_NULL("failed to allocate space for state", GSL_ENOMEM); } state->c = (double *) malloc (size * sizeof (double)); if (state->c == NULL) { free (state); GSL_ERROR_NULL("failed to allocate space for c", GSL_ENOMEM); } state->g = (double *) malloc (size * sizeof (double)); if (state->g == NULL) { free (state->c); free (state); GSL_ERROR_NULL("failed to allocate space for g", GSL_ENOMEM); } state->diag = (double *) malloc (size * sizeof (double)); if (state->diag == NULL) { free (state->g); free (state->c); free (state); GSL_ERROR_NULL("failed to allocate space for diag", GSL_ENOMEM); } state->offdiag = (double *) malloc (size * sizeof (double)); if (state->offdiag == NULL) { free (state->diag); free (state->g); free (state->c); free (state); GSL_ERROR_NULL("failed to allocate space for offdiag", GSL_ENOMEM); } return state; } /* natural spline calculation * see [Engeln-Mullges + Uhlig, p. 254] */ static int cspline_init (void * vstate, const double xa[], const double ya[], size_t size) { cspline_state_t *state = (cspline_state_t *) vstate; size_t i; size_t num_points = size; size_t max_index = num_points - 1; /* Engeln-Mullges + Uhlig "n" */ size_t sys_size = max_index - 1; /* linear system is sys_size x sys_size */ state->c[0] = 0.0; state->c[max_index] = 0.0; for (i = 0; i < sys_size; i++) { const double h_i = xa[i + 1] - xa[i]; const double h_ip1 = xa[i + 2] - xa[i + 1]; const double ydiff_i = ya[i + 1] - ya[i]; const double ydiff_ip1 = ya[i + 2] - ya[i + 1]; const double g_i = (h_i != 0.0) ? 1.0 / h_i : 0.0; const double g_ip1 = (h_ip1 != 0.0) ? 1.0 / h_ip1 : 0.0; state->offdiag[i] = h_ip1; state->diag[i] = 2.0 * (h_ip1 + h_i); state->g[i] = 3.0 * (ydiff_ip1 * g_ip1 - ydiff_i * g_i); } if (sys_size == 1) { state->c[1] = state->g[0] / state->diag[0]; return GSL_SUCCESS; } else { gsl_vector_view g_vec = gsl_vector_view_array(state->g, sys_size); gsl_vector_view diag_vec = gsl_vector_view_array(state->diag, sys_size); gsl_vector_view offdiag_vec = gsl_vector_view_array(state->offdiag, sys_size - 1); gsl_vector_view solution_vec = gsl_vector_view_array ((state->c) + 1, sys_size); int status = gsl_linalg_solve_symm_tridiag(&diag_vec.vector, &offdiag_vec.vector, &g_vec.vector, &solution_vec.vector); return status; } } /* periodic spline calculation * see [Engeln-Mullges + Uhlig, p. 256] */ static int cspline_init_periodic (void * vstate, const double xa[], const double ya[], size_t size) { cspline_state_t *state = (cspline_state_t *) vstate; size_t i; size_t num_points = size; size_t max_index = num_points - 1; /* Engeln-Mullges + Uhlig "n" */ size_t sys_size = max_index; /* linear system is sys_size x sys_size */ if (sys_size == 2) { /* solve 2x2 system */ const double h0 = xa[1] - xa[0]; const double h1 = xa[2] - xa[1]; const double A = 2.0*(h0 + h1); const double B = h0 + h1; double g[2]; double det; g[0] = 3.0 * ((ya[2] - ya[1]) / h1 - (ya[1] - ya[0]) / h0); g[1] = 3.0 * ((ya[1] - ya[2]) / h0 - (ya[2] - ya[1]) / h1); det = 3.0 * (h0 + h1) * (h0 + h1); state->c[1] = ( A * g[0] - B * g[1])/det; state->c[2] = (-B * g[0] + A * g[1])/det; state->c[0] = state->c[2]; return GSL_SUCCESS; } else { for (i = 0; i < sys_size-1; i++) { const double h_i = xa[i + 1] - xa[i]; const double h_ip1 = xa[i + 2] - xa[i + 1]; const double ydiff_i = ya[i + 1] - ya[i]; const double ydiff_ip1 = ya[i + 2] - ya[i + 1]; const double g_i = (h_i != 0.0) ? 1.0 / h_i : 0.0; const double g_ip1 = (h_ip1 != 0.0) ? 1.0 / h_ip1 : 0.0; state->offdiag[i] = h_ip1; state->diag[i] = 2.0 * (h_ip1 + h_i); state->g[i] = 3.0 * (ydiff_ip1 * g_ip1 - ydiff_i * g_i); } i = sys_size - 1; { const double h_i = xa[i + 1] - xa[i]; const double h_ip1 = xa[1] - xa[0]; const double ydiff_i = ya[i + 1] - ya[i]; const double ydiff_ip1 = ya[1] - ya[0]; const double g_i = (h_i != 0.0) ? 1.0 / h_i : 0.0; const double g_ip1 = (h_ip1 != 0.0) ? 1.0 / h_ip1 : 0.0; state->offdiag[i] = h_ip1; state->diag[i] = 2.0 * (h_ip1 + h_i); state->g[i] = 3.0 * (ydiff_ip1 * g_ip1 - ydiff_i * g_i); } { gsl_vector_view g_vec = gsl_vector_view_array(state->g, sys_size); gsl_vector_view diag_vec = gsl_vector_view_array(state->diag, sys_size); gsl_vector_view offdiag_vec = gsl_vector_view_array(state->offdiag, sys_size); gsl_vector_view solution_vec = gsl_vector_view_array ((state->c) + 1, sys_size); int status = gsl_linalg_solve_symm_cyc_tridiag(&diag_vec.vector, &offdiag_vec.vector, &g_vec.vector, &solution_vec.vector); state->c[0] = state->c[max_index]; return status; } } } static void cspline_free (void * vstate) { cspline_state_t *state = (cspline_state_t *) vstate; free (state->c); free (state->g); free (state->diag); free (state->offdiag); free (state); } /* function for common coefficient determination */ static inline void coeff_calc (const double c_array[], double dy, double dx, size_t index, double * b, double * c, double * d) { const double c_i = c_array[index]; const double c_ip1 = c_array[index + 1]; *b = (dy / dx) - dx * (c_ip1 + 2.0 * c_i) / 3.0; *c = c_i; *d = (c_ip1 - c_i) / (3.0 * dx); } static int cspline_eval (const void * vstate, const double x_array[], const double y_array[], size_t size, double x, gsl_interp_accel * a, double *y) { const cspline_state_t *state = (const cspline_state_t *) vstate; double x_lo, x_hi; double dx; size_t index; if (a != 0) { index = gsl_interp_accel_find (a, x_array, size, x); } else { index = gsl_interp_bsearch (x_array, x, 0, size - 1); } /* evaluate */ x_hi = x_array[index + 1]; x_lo = x_array[index]; dx = x_hi - x_lo; if (dx > 0.0) { const double y_lo = y_array[index]; const double y_hi = y_array[index + 1]; const double dy = y_hi - y_lo; double delx = x - x_lo; double b_i, c_i, d_i; coeff_calc(state->c, dy, dx, index, &b_i, &c_i, &d_i); *y = y_lo + delx * (b_i + delx * (c_i + delx * d_i)); return GSL_SUCCESS; } else { *y = 0.0; return GSL_EINVAL; } } static int cspline_eval_deriv (const void * vstate, const double x_array[], const double y_array[], size_t size, double x, gsl_interp_accel * a, double *dydx) { const cspline_state_t *state = (const cspline_state_t *) vstate; double x_lo, x_hi; double dx; size_t index; if (a != 0) { index = gsl_interp_accel_find (a, x_array, size, x); } else { index = gsl_interp_bsearch (x_array, x, 0, size - 1); } /* evaluate */ x_hi = x_array[index + 1]; x_lo = x_array[index]; dx = x_hi - x_lo; if (dx > 0.0) { const double y_lo = y_array[index]; const double y_hi = y_array[index + 1]; const double dy = y_hi - y_lo; double delx = x - x_lo; double b_i, c_i, d_i; coeff_calc(state->c, dy, dx, index, &b_i, &c_i, &d_i); *dydx = b_i + delx * (2.0 * c_i + 3.0 * d_i * delx); return GSL_SUCCESS; } else { *dydx = 0.0; return GSL_EINVAL; } } static int cspline_eval_deriv2 (const void * vstate, const double x_array[], const double y_array[], size_t size, double x, gsl_interp_accel * a, double * y_pp) { const cspline_state_t *state = (const cspline_state_t *) vstate; double x_lo, x_hi; double dx; size_t index; if (a != 0) { index = gsl_interp_accel_find (a, x_array, size, x); } else { index = gsl_interp_bsearch (x_array, x, 0, size - 1); } /* evaluate */ x_hi = x_array[index + 1]; x_lo = x_array[index]; dx = x_hi - x_lo; if (dx > 0.0) { const double y_lo = y_array[index]; const double y_hi = y_array[index + 1]; const double dy = y_hi - y_lo; double delx = x - x_lo; double b_i, c_i, d_i; coeff_calc(state->c, dy, dx, index, &b_i, &c_i, &d_i); *y_pp = 2.0 * c_i + 6.0 * d_i * delx; return GSL_SUCCESS; } else { *y_pp = 0.0; return GSL_EINVAL; } } static int cspline_eval_integ (const void * vstate, const double x_array[], const double y_array[], size_t size, gsl_interp_accel * acc, double a, double b, double * result) { const cspline_state_t *state = (const cspline_state_t *) vstate; size_t i, index_a, index_b; if (acc != 0) { index_a = gsl_interp_accel_find (acc, x_array, size, a); index_b = gsl_interp_accel_find (acc, x_array, size, b); } else { index_a = gsl_interp_bsearch (x_array, a, 0, size - 1); index_b = gsl_interp_bsearch (x_array, b, 0, size - 1); } *result = 0.0; /* interior intervals */ for(i=index_a; i<=index_b; i++) { const double x_hi = x_array[i + 1]; const double x_lo = x_array[i]; const double y_lo = y_array[i]; const double y_hi = y_array[i + 1]; const double dx = x_hi - x_lo; const double dy = y_hi - y_lo; if(dx != 0.0) { double b_i, c_i, d_i; coeff_calc(state->c, dy, dx, i, &b_i, &c_i, &d_i); if (i == index_a || i == index_b) { double x1 = (i == index_a) ? a : x_lo; double x2 = (i == index_b) ? b : x_hi; *result += integ_eval(y_lo, b_i, c_i, d_i, x_lo, x1, x2); } else { *result += dx * (y_lo + dx*(0.5*b_i + dx*(c_i/3.0 + 0.25*d_i*dx))); } } else { *result = 0.0; return GSL_EINVAL; } } return GSL_SUCCESS; } static const gsl_interp_type cspline_type = { "cspline", 3, &cspline_alloc, &cspline_init, &cspline_eval, &cspline_eval_deriv, &cspline_eval_deriv2, &cspline_eval_integ, &cspline_free }; const gsl_interp_type * gsl_interp_cspline = &cspline_type; static const gsl_interp_type cspline_periodic_type = { "cspline-periodic", 2, &cspline_alloc, &cspline_init_periodic, &cspline_eval, &cspline_eval_deriv, &cspline_eval_deriv2, &cspline_eval_integ, &cspline_free }; const gsl_interp_type * gsl_interp_cspline_periodic = &cspline_periodic_type; gsl/interpolation/ChangeLog0000644000175000017500000001063513536674414014400 0ustar eddedd2011-01-15 Brian Gough * interp.c (gsl_interp_type_min_size): added function to get min_size from type instead of interp object 2010-12-09 Brian Gough * cspline.c (cspline_eval, cspline_eval_deriv) (cspline_eval_deriv2, cspline_eval_integ): return GSL_EINVAL for out of range values instead of GSL_FAILURE * akima.c (akima_eval_integ): return GSL_EINVAL for out of range values instead of GSL_FAILURE * interp.c (gsl_interp_eval_e, gsl_interp_eval) (gsl_interp_eval_deriv_e, gsl_interp_eval_deriv) (gsl_interp_eval_deriv2_e, gsl_interp_eval_deriv2) (gsl_interp_eval_integ_e, gsl_interp_eval_integ): return NaN and an error code of GSL_EDOM when x is out of range 2009-07-09 Brian Gough * spline.c (gsl_spline_free): handle NULL argument in free * interp.c (gsl_interp_free): handle NULL argument in free * accel.c (gsl_interp_accel_free): handle NULL argument in free 2008-09-05 Brian Gough * gsl_interp.h (gsl_interp_accel_find): corrected condition for x>=xa. 2008-07-03 Brian Gough * gsl_interp.h: added inline declarations * accel.c: moved gsl_interp_accel_find to inline.c * bsearch.h bsearch.c: removed, moved to inline.c * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2007-03-14 Brian Gough * interp.c (gsl_interp_init): added check for monotonically increasing x 2005-12-24 Brian Gough * cspline.c (cspline_init_periodic): fix invalid memory access of xa[3] for sys_size=2 2005-12-22 Brian Gough * test.c (test_cspline2): added extra test of cspline (test_cspline3): added extra test of cspline 2004-11-28 Brian Gough * cspline.c (cspline_init): support case of degenerate x[i] values (cspline_init_periodic): support case of degenerate x[i] values * integ_eval.h (integ_eval): improve numerical stability of integration formula 2004-03-15 Brian Gough * cspline.c (cspline_init): handle the case N=1 specially 2003-07-24 Brian Gough * gsl_interp.h: removed duplicate declaration of gsl_interp_accel_find Sat Apr 27 20:57:22 2002 Brian Gough * cspline.c (cspline_init_periodic): handle boundary effects correctly Sun Dec 2 22:48:23 2001 Brian Gough * poly.c: added polynomial interpolation based on divided differences from Dan, Ho-Jin. Tue Jul 3 12:10:53 2001 Brian Gough * interp.c (DISCARD_STATUS): discard error status values using a macro for configurability Sun Jul 1 21:41:27 2001 Brian Gough * cspline.c: added const to state in appropriate places Tue Jun 26 11:57:55 2001 Brian Gough * spline.c: added missing #include for memcpy Mon Jun 25 19:58:45 2001 Brian Gough * standardized to gsl conventions, added high-level 'spline' interface Mon Apr 30 13:29:34 2001 Brian Gough * renamed gsl_interp_obj to gsl_interp Mon Apr 23 10:29:51 2001 Brian Gough * unified error handling conventions to _e for error handling functions and no suffix for plain functions, so _impl functions are no longer needed. * removed tests for EFAULT, since EFAULT should only apply to invalid non-null pointers. Tue Apr 11 19:56:25 2000 Brian Gough * cspline.c (cspline_calc_periodic): changed occurrence of gsl_la name to new gsl_linalg prefix, gsl_linalg_solve_symm_cyc_tridiag (cspline_calc_natural): ditto Mon Aug 30 11:31:00 1999 Brian Gough * bsearch.c: made gsl_interp_bsearch (formerly interp_bsearch) an exported function, since it is needed by the inline version of gsl_interp_accel_find in gsl_interp.h Tue Nov 17 16:52:00 1998 Brian Gough * added #include to all top-level source files * renamed test_interp.c to test.c * test_interp.c: got rid of unused function alloc_xy_table Fri Nov 13 16:50:05 1998 Brian Gough * clean up for make strict, use size_t instead of unsigned int 1998-11-06 * added const to several declarations where needed. gsl/interpolation/Makefile.am0000644000175000017500000000145413536674414014661 0ustar eddeddnoinst_LTLIBRARIES = libgslinterpolation.la check_PROGRAMS = test pkginclude_HEADERS = gsl_interp.h gsl_spline.h gsl_interp2d.h gsl_spline2d.h libgslinterpolation_la_SOURCES = accel.c akima.c cspline.c interp.c linear.c integ_eval.h spline.c poly.c steffen.c inline.c interp2d.c bilinear.c bicubic.c spline2d.c noinst_HEADERS = test2d.c AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_LDADD = libgslinterpolation.la ../poly/libgslpoly.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../cblas/libgslcblas.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c gsl/interpolation/gsl_spline2d.h0000664000175000017500000001160514057135461015355 0ustar eddedd/* interpolation/gsl_spline2d.h * * Copyright 2012 David Zaslavsky * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SPLINE2D_H__ #define __GSL_SPLINE2D_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* * A 2D interpolation object which stores the arrays defining the function. * In all other respects, this is just like a gsl_interp2d object. */ typedef struct { gsl_interp2d interp_object; /* low-level interpolation object */ double * xarr; /* x data array */ double * yarr; /* y data array */ double * zarr; /* z data array */ } gsl_spline2d; gsl_spline2d * gsl_spline2d_alloc(const gsl_interp2d_type * T, size_t xsize, size_t ysize); int gsl_spline2d_init(gsl_spline2d * interp, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize); void gsl_spline2d_free(gsl_spline2d * interp); double gsl_spline2d_eval(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya); int gsl_spline2d_eval_e(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya, double * z); double gsl_spline2d_eval_extrap(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya); int gsl_spline2d_eval_extrap_e(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya, double * z); double gsl_spline2d_eval_deriv_x(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya); int gsl_spline2d_eval_deriv_x_e(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya, double * z); double gsl_spline2d_eval_deriv_y(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya); int gsl_spline2d_eval_deriv_y_e(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya, double * z); double gsl_spline2d_eval_deriv_xx(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya); int gsl_spline2d_eval_deriv_xx_e(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya, double * z); double gsl_spline2d_eval_deriv_yy(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya); int gsl_spline2d_eval_deriv_yy_e(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya, double * z); double gsl_spline2d_eval_deriv_xy(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya); int gsl_spline2d_eval_deriv_xy_e(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya, double * z); size_t gsl_spline2d_min_size(const gsl_spline2d * interp); const char * gsl_spline2d_name(const gsl_spline2d * interp); int gsl_spline2d_set(const gsl_spline2d * interp, double zarr[], const size_t i, const size_t j, const double z); double gsl_spline2d_get(const gsl_spline2d * interp, const double zarr[], const size_t i, const size_t j); __END_DECLS #endif /* __GSL_SPLINE2D_H__ */ gsl/interpolation/accel.c0000644000175000017500000000271013536674414014034 0ustar eddedd/* interpolation/accel.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include gsl_interp_accel * gsl_interp_accel_alloc (void) { gsl_interp_accel *a = (gsl_interp_accel *) malloc (sizeof (gsl_interp_accel)); if (a == 0) { GSL_ERROR_NULL("could not allocate space for gsl_interp_accel", GSL_ENOMEM); } a->cache = 0; a->hit_count = 0; a->miss_count = 0; return a; } int gsl_interp_accel_reset (gsl_interp_accel * a) { a->cache = 0; a->hit_count = 0; a->miss_count = 0; return GSL_SUCCESS; } void gsl_interp_accel_free (gsl_interp_accel * a) { RETURN_IF_NULL (a); free (a); } gsl/interpolation/inline.c0000644000175000017500000000175713536674414014255 0ustar eddedd/* interpolation/bsearch.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include /* Compile all the inline functions */ #define COMPILE_INLINE_STATIC #include "build.h" #include gsl/interpolation/test2d.c0000664000175000017500000003372514057135461014177 0ustar eddedd/* interpolation/test2d.c * * Copyright 2012 David Zaslavsky * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include /* tests a single evaluator function from the low-level interface */ static int test_single_low_level( double (*evaluator)(const gsl_interp2d *, const double[], const double[], const double[], const double, const double, gsl_interp_accel *, gsl_interp_accel *), int (*evaluator_e)(const gsl_interp2d *, const double[], const double[], const double[], const double, const double, gsl_interp_accel *, gsl_interp_accel *, double *), const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, const double expected_results[], size_t i) { if (expected_results != NULL) { int status; double result = evaluator(interp, xarr, yarr, zarr, x, y, xa, ya); gsl_test_rel(result, expected_results[i], 1e-10, "low level %s %d", gsl_interp2d_name(interp), i); status = evaluator_e(interp, xarr, yarr, zarr, x, y, xa, ya, &result); if (status == GSL_SUCCESS) { gsl_test_rel(result, expected_results[i], 1e-10, "low level _e %s %d", gsl_interp2d_name(interp), i); } } return 0; } /* tests a single evaluator function from the high-level interface */ static int test_single_high_level( double (*evaluator)(const gsl_spline2d *, const double, const double, gsl_interp_accel *, gsl_interp_accel *), int (*evaluator_e)(const gsl_spline2d *, const double, const double, gsl_interp_accel *, gsl_interp_accel *, double *), const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, const double expected_results[], size_t i) { if (expected_results != NULL) { int status; double result = evaluator(interp, x, y, xa, ya); gsl_test_rel(result, expected_results[i], 1e-10, "high level %s %d", gsl_spline2d_name(interp), i); status = evaluator_e(interp, x, y, xa, ya, &result); if (status == GSL_SUCCESS) { gsl_test_rel(result, expected_results[i], 1e-10, "high level _e %s %d", gsl_spline2d_name(interp), i); } } return 0; } /* * Tests that a given interpolation type reproduces the data points * it is given, and then tests that it correctly reproduces additional * values. */ static int test_interp2d( const double xarr[], const double yarr[], const double zarr[], /* data */ size_t xsize, size_t ysize, /* array sizes */ const double xval[], const double yval[], /* test points */ const double zval[], /* expected results */ const double zxval[], const double zyval[], const double zxxval[], const double zyyval[], const double zxyval[], size_t test_size, /* number of test points */ const gsl_interp2d_type * T) { gsl_interp_accel *xa = gsl_interp_accel_alloc(); gsl_interp_accel *ya = gsl_interp_accel_alloc(); int status = 0; size_t xi, yi, zi, i; gsl_interp2d * interp = gsl_interp2d_alloc(T, xsize, ysize); gsl_spline2d * interp_s = gsl_spline2d_alloc(T, xsize, ysize); unsigned int min_size = gsl_interp2d_type_min_size(T); gsl_test_int(min_size, T->min_size, "gsl_interp2d_type_min_size on %s", gsl_interp2d_name(interp)); gsl_interp2d_init(interp, xarr, yarr, zarr, xsize, ysize); gsl_spline2d_init(interp_s, xarr, yarr, zarr, xsize, ysize); /* First check that the interpolation reproduces the given points */ for (xi = 0; xi < xsize; xi++) { double x = xarr[xi]; for (yi = 0; yi < ysize; yi++) { double y = yarr[yi]; zi = gsl_interp2d_idx(interp, xi, yi); test_single_low_level(&gsl_interp2d_eval, &gsl_interp2d_eval_e, interp, xarr, yarr, zarr, x, y, xa, ya, zarr, zi); test_single_low_level(&gsl_interp2d_eval_extrap, &gsl_interp2d_eval_extrap_e, interp, xarr, yarr, zarr, x, y, xa, ya, zarr, zi); test_single_high_level(&gsl_spline2d_eval, &gsl_spline2d_eval_e, interp_s, x, y, xa, ya, zarr, zi); test_single_high_level(&gsl_spline2d_eval_extrap, &gsl_spline2d_eval_extrap_e, interp_s, x, y, xa, ya, zarr, zi); } } /* Then check additional points provided */ for (i = 0; i < test_size; i++) { double x = xval[i]; double y = yval[i]; test_single_low_level(&gsl_interp2d_eval, &gsl_interp2d_eval_e, interp, xarr, yarr, zarr, x, y, xa, ya, zval, i); test_single_low_level(&gsl_interp2d_eval_deriv_x, &gsl_interp2d_eval_deriv_x_e, interp, xarr, yarr, zarr, x, y, xa, ya, zxval, i); test_single_low_level(&gsl_interp2d_eval_deriv_y, &gsl_interp2d_eval_deriv_y_e, interp, xarr, yarr, zarr, x, y, xa, ya, zyval, i); test_single_low_level(&gsl_interp2d_eval_deriv_xx,&gsl_interp2d_eval_deriv_xx_e, interp, xarr, yarr, zarr, x, y, xa, ya, zxxval, i); test_single_low_level(&gsl_interp2d_eval_deriv_yy,&gsl_interp2d_eval_deriv_yy_e, interp, xarr, yarr, zarr, x, y, xa, ya, zyyval, i); test_single_low_level(&gsl_interp2d_eval_deriv_xy,&gsl_interp2d_eval_deriv_xy_e, interp, xarr, yarr, zarr, x, y, xa, ya, zxyval, i); test_single_high_level(&gsl_spline2d_eval, &gsl_spline2d_eval_e, interp_s, x, y, xa, ya, zval, i); test_single_high_level(&gsl_spline2d_eval_extrap, &gsl_spline2d_eval_extrap_e, interp_s, x, y, xa, ya, zval, i); test_single_high_level(&gsl_spline2d_eval_deriv_x, &gsl_spline2d_eval_deriv_x_e, interp_s, x, y, xa, ya, zxval, i); test_single_high_level(&gsl_spline2d_eval_deriv_y, &gsl_spline2d_eval_deriv_y_e, interp_s, x, y, xa, ya, zyval, i); test_single_high_level(&gsl_spline2d_eval_deriv_xx,&gsl_spline2d_eval_deriv_xx_e, interp_s, x, y, xa, ya, zxxval, i); test_single_high_level(&gsl_spline2d_eval_deriv_yy,&gsl_spline2d_eval_deriv_yy_e, interp_s, x, y, xa, ya, zyyval, i); test_single_high_level(&gsl_spline2d_eval_deriv_xy,&gsl_spline2d_eval_deriv_xy_e, interp_s, x, y, xa, ya, zxyval, i); test_single_low_level(&gsl_interp2d_eval_extrap, &gsl_interp2d_eval_extrap_e, interp, xarr, yarr, zarr, x, y, xa, ya, zval, i); } gsl_interp_accel_free(xa); gsl_interp_accel_free(ya); gsl_interp2d_free(interp); gsl_spline2d_free(interp_s); return status; } /* * Tests bilinear interpolation using a symmetric function, f(x,y)==f(y,x), * and diagonal interpolation points (x,y) where x==y. If these tests don't * pass, something is seriously broken. */ static int test_bilinear_symmetric() { int status; double xarr[] = {0.0, 1.0, 2.0, 3.0}; double yarr[] = {0.0, 1.0, 2.0, 3.0}; double zarr[] = {1.0, 1.1, 1.2, 1.3, 1.1, 1.2, 1.3, 1.4, 1.2, 1.3, 1.4, 1.5, 1.3, 1.4, 1.5, 1.6}; double xval[] = {0.0, 0.5, 1.0, 1.5, 2.5, 3.0}; double yval[] = {0.0, 0.5, 1.0, 1.5, 2.5, 3.0}; double zval[] = {1.0, 1.1, 1.2, 1.3, 1.5, 1.6}; size_t xsize = sizeof(xarr) / sizeof(xarr[0]); size_t ysize = sizeof(yarr) / sizeof(yarr[0]); size_t test_size = sizeof(xval) / sizeof(xval[0]); status = test_interp2d(xarr, yarr, zarr, xsize, ysize, xval, yval, zval, NULL, NULL, NULL, NULL, NULL, test_size, gsl_interp2d_bilinear); gsl_test(status, "bilinear interpolation with symmetric values"); return status; } /* * Tests bilinear interpolation with an asymmetric function, f(x,y)!=f(y,x), * and off-diagonal interpolation points (x,y) where x and y may or may not * be equal. */ static int test_bilinear_asymmetric_z() { int status; double xarr[] = {0.0, 1.0, 2.0, 3.0}; double yarr[] = {0.0, 1.0, 2.0, 3.0}; double zarr[] = {1.0, 1.1, 1.2, 1.4, 1.3, 1.4, 1.5, 1.7, 1.5, 1.6, 1.7, 1.9, 1.6, 1.9, 2.2, 2.3}; double xval[] = { 0.0, 0.5, 1.0, 1.5, 2.5, 3.0, 1.3954, 1.6476, 0.824957, 2.41108, 2.98619, 1.36485 }; double yval[] = {0.0, 0.5, 1.0, 1.5, 2.5, 3.0, 0.265371, 2.13849, 1.62114, 1.22198, 0.724681, 0.0596087 }; /* results computed using Mathematica 9.0.1.0 */ double zval[] = {1.0, 1.2, 1.4, 1.55, 2.025, 2.3, 1.2191513, 1.7242442248, 1.5067237, 1.626612, 1.6146423, 1.15436761}; size_t xsize = sizeof(xarr) / sizeof(xarr[0]); size_t ysize = sizeof(yarr) / sizeof(yarr[0]); size_t test_size = sizeof(xval) / sizeof(xval[0]); status = test_interp2d(xarr, yarr, zarr, xsize, ysize, xval, yval, zval, NULL, NULL, NULL, NULL, NULL, test_size, gsl_interp2d_bilinear); gsl_test(status, "bilinear interpolation with asymmetric z values"); return status; } static int test_bicubic() { int status; double xarr[] = {0.0, 1.0, 2.0, 3.0}; double yarr[] = {0.0, 1.0, 2.0, 3.0}; double zarr[] = {1.0, 1.1, 1.2, 1.3, 1.1, 1.2, 1.3, 1.4, 1.2, 1.3, 1.4, 1.5, 1.3, 1.4, 1.5, 1.6}; double xval[] = {1.0, 1.5, 2.0}; double yval[] = {1.0, 1.5, 2.0}; double zval[] = {1.2, 1.3, 1.4}; size_t xsize = sizeof(xarr) / sizeof(xarr[0]); size_t ysize = sizeof(yarr) / sizeof(yarr[0]); size_t test_size = sizeof(xval) / sizeof(xval[0]); status = test_interp2d(xarr, yarr, zarr, xsize, ysize, xval, yval, zval, NULL, NULL, NULL, NULL, NULL, test_size, gsl_interp2d_bicubic); gsl_test(status, "bicubic interpolation on linear function"); return status; } static int test_bicubic_nonlinear() { int status; double xarr[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0}; double yarr[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0}; /* least common multiple of x and y */ double zarr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 2, 2, 6, 4, 10, 6, 14, 8, 3, 6, 3, 12, 15, 6, 21, 24, 4, 4, 12, 4, 20, 12, 28, 8, 5, 10, 15, 20, 5, 30, 35, 40, 6, 6, 6, 12, 30, 6, 42, 24, 7, 14, 21, 28, 35, 42, 7, 56, 8, 8, 24, 8, 40, 24, 56, 8}; double xval[] = {1.4, 2.3, 4.7, 3.3, 7.5, 6.6, 5.1}; double yval[] = {1.0, 1.8, 1.9, 2.5, 2.7, 4.1, 3.3}; /* results computed using GSL 1D cubic interpolation twice */ double zval[] = { 1.4, 3.11183531264736, 8.27114315792559, 5.03218982537718, 22.13230634702637, 23.63206834997871, 17.28553080971182 }; size_t xsize = sizeof(xarr) / sizeof(xarr[0]); size_t ysize = sizeof(yarr) / sizeof(yarr[0]); size_t test_size = sizeof(xval) / sizeof(xval[0]); status = test_interp2d(xarr, yarr, zarr, xsize, ysize, xval, yval, zval, NULL, NULL, NULL, NULL, NULL, test_size, gsl_interp2d_bicubic); gsl_test(status, "bicubic interpolation on nonlinear symmetric function"); return status; } /* This function contributed by Andrew W. Steiner */ static int test_bicubic_nonlinear_nonsq() { int status; double xarr[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0}; double yarr[] = {1.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0}; double zarr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 2, 6, 4, 10, 6, 14, 8, 11, 12, 3, 6, 3, 12, 15, 6, 21, 24, 13, 14, 4, 4, 12, 4, 20, 12, 28, 8, 15, 16, 5, 10, 15, 20, 5, 30, 35, 40, 17, 18, 6, 6, 6, 12, 30, 6, 42, 24, 19, 20, 7, 14, 21, 28, 35, 42, 7, 56, 21, 22, 8, 8, 24, 8, 40, 24, 56, 8, 23, 24}; double xval[] = {1.4, 2.3, 9.7, 3.3, 9.5, 6.6, 5.1}; double yval[] = {1.0, 1.8, 1.9, 2.5, 2.7, 4.1, 3.3}; /* results computed using GSL 1D cubic interpolation twice */ double zval[] = { 1.4, 2.46782030941187003, 10.7717721621846465, 4.80725067958096375, 11.6747032398627297, 11.2619968682970111, 9.00168877916872567}; size_t xsize = sizeof(xarr) / sizeof(xarr[0]); size_t ysize = sizeof(yarr) / sizeof(yarr[0]); size_t test_size = sizeof(xval) / sizeof(xval[0]); status = test_interp2d(xarr, yarr, zarr, xsize, ysize, xval, yval, zval, NULL, NULL, NULL, NULL, NULL, test_size, gsl_interp2d_bicubic); gsl_test(status, "bicubic interpolation on nonlinear symmetric function"); return status; } /* runs all the tests */ int test_interp2d_main(void) { int status = 0; status += test_bilinear_symmetric(); status += test_bilinear_asymmetric_z(); status += test_bicubic(); status += test_bicubic_nonlinear(); status += test_bicubic_nonlinear_nonsq(); return status; } gsl/interpolation/linear.c0000644000175000017500000001071613536674414014244 0ustar eddedd/* interpolation/linear.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include static int linear_init (void * vstate, const double x_array[], const double y_array[], size_t size) { return GSL_SUCCESS; } static int linear_eval (const void * vstate, const double x_array[], const double y_array[], size_t size, double x, gsl_interp_accel * a, double *y) { double x_lo, x_hi; double y_lo, y_hi; double dx; size_t index; if (a != 0) { index = gsl_interp_accel_find (a, x_array, size, x); } else { index = gsl_interp_bsearch (x_array, x, 0, size - 1); } /* evaluate */ x_lo = x_array[index]; x_hi = x_array[index + 1]; y_lo = y_array[index]; y_hi = y_array[index + 1]; dx = x_hi - x_lo; if (dx > 0.0) { *y = y_lo + (x - x_lo) / dx * (y_hi - y_lo); return GSL_SUCCESS; } else { *y = 0.0; return GSL_EINVAL; } } static int linear_eval_deriv (const void * vstate, const double x_array[], const double y_array[], size_t size, double x, gsl_interp_accel * a, double *dydx) { double x_lo, x_hi; double y_lo, y_hi; double dx; double dy; size_t index; if (a != 0) { index = gsl_interp_accel_find (a, x_array, size, x); } else { index = gsl_interp_bsearch (x_array, x, 0, size - 1); } /* evaluate */ x_lo = x_array[index]; x_hi = x_array[index + 1]; y_lo = y_array[index]; y_hi = y_array[index + 1]; dx = x_hi - x_lo; dy = y_hi - y_lo; if (dx > 0.0) { *dydx = dy / dx;; return GSL_SUCCESS; } else { *dydx = 0.0; return GSL_EINVAL; } } static int linear_eval_deriv2 (const void * vstate, const double x_array[], const double y_array[], size_t size, double x, gsl_interp_accel * a, double *y_pp) { *y_pp = 0.0; return GSL_SUCCESS; } static int linear_eval_integ (const void * vstate, const double x_array[], const double y_array[], size_t size, gsl_interp_accel * acc, double a, double b, double * result) { size_t i, index_a, index_b; if (acc != 0) { index_a = gsl_interp_accel_find (acc, x_array, size, a); index_b = gsl_interp_accel_find (acc, x_array, size, b); } else { index_a = gsl_interp_bsearch (x_array, a, 0, size - 1); index_b = gsl_interp_bsearch (x_array, b, 0, size - 1); } /* endpoints span more than one interval */ *result = 0.0; /* interior intervals */ for(i=index_a; i<=index_b; i++) { const double x_hi = x_array[i + 1]; const double x_lo = x_array[i]; const double y_lo = y_array[i]; const double y_hi = y_array[i + 1]; const double dx = x_hi - x_lo; if(dx != 0.0) { if (i == index_a || i == index_b) { double x1 = (i == index_a) ? a : x_lo; double x2 = (i == index_b) ? b : x_hi; const double D = (y_hi-y_lo)/dx; *result += (x2-x1) * (y_lo + 0.5*D*((x2-x_lo)+(x1-x_lo))); } else { *result += 0.5 * dx * (y_lo + y_hi); } } } return GSL_SUCCESS; } static const gsl_interp_type linear_type = { "linear", 2, NULL, /* alloc, not applicable */ &linear_init, &linear_eval, &linear_eval_deriv, &linear_eval_deriv2, &linear_eval_integ, NULL, /* free, not applicable */ }; const gsl_interp_type * gsl_interp_linear = &linear_type; gsl/interpolation/gsl_interp.h0000644000175000017500000001546113536674414015147 0ustar eddedd/* interpolation/gsl_interp.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_INTERP_H__ #define __GSL_INTERP_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* evaluation accelerator */ typedef struct { size_t cache; /* cache of index */ size_t miss_count; /* keep statistics */ size_t hit_count; } gsl_interp_accel; /* interpolation object type */ typedef struct { const char * name; unsigned int min_size; void * (*alloc) (size_t size); int (*init) (void *, const double xa[], const double ya[], size_t size); int (*eval) (const void *, const double xa[], const double ya[], size_t size, double x, gsl_interp_accel *, double * y); int (*eval_deriv) (const void *, const double xa[], const double ya[], size_t size, double x, gsl_interp_accel *, double * y_p); int (*eval_deriv2) (const void *, const double xa[], const double ya[], size_t size, double x, gsl_interp_accel *, double * y_pp); int (*eval_integ) (const void *, const double xa[], const double ya[], size_t size, gsl_interp_accel *, double a, double b, double * result); void (*free) (void *); } gsl_interp_type; /* general interpolation object */ typedef struct { const gsl_interp_type * type; double xmin; double xmax; size_t size; void * state; } gsl_interp; /* available types */ GSL_VAR const gsl_interp_type * gsl_interp_linear; GSL_VAR const gsl_interp_type * gsl_interp_polynomial; GSL_VAR const gsl_interp_type * gsl_interp_cspline; GSL_VAR const gsl_interp_type * gsl_interp_cspline_periodic; GSL_VAR const gsl_interp_type * gsl_interp_akima; GSL_VAR const gsl_interp_type * gsl_interp_akima_periodic; GSL_VAR const gsl_interp_type * gsl_interp_steffen; gsl_interp_accel * gsl_interp_accel_alloc(void); int gsl_interp_accel_reset (gsl_interp_accel * a); void gsl_interp_accel_free(gsl_interp_accel * a); gsl_interp * gsl_interp_alloc(const gsl_interp_type * T, size_t n); int gsl_interp_init(gsl_interp * obj, const double xa[], const double ya[], size_t size); const char * gsl_interp_name(const gsl_interp * interp); unsigned int gsl_interp_min_size(const gsl_interp * interp); unsigned int gsl_interp_type_min_size(const gsl_interp_type * T); int gsl_interp_eval_e(const gsl_interp * obj, const double xa[], const double ya[], double x, gsl_interp_accel * a, double * y); double gsl_interp_eval(const gsl_interp * obj, const double xa[], const double ya[], double x, gsl_interp_accel * a); int gsl_interp_eval_deriv_e(const gsl_interp * obj, const double xa[], const double ya[], double x, gsl_interp_accel * a, double * d); double gsl_interp_eval_deriv(const gsl_interp * obj, const double xa[], const double ya[], double x, gsl_interp_accel * a); int gsl_interp_eval_deriv2_e(const gsl_interp * obj, const double xa[], const double ya[], double x, gsl_interp_accel * a, double * d2); double gsl_interp_eval_deriv2(const gsl_interp * obj, const double xa[], const double ya[], double x, gsl_interp_accel * a); int gsl_interp_eval_integ_e(const gsl_interp * obj, const double xa[], const double ya[], double a, double b, gsl_interp_accel * acc, double * result); double gsl_interp_eval_integ(const gsl_interp * obj, const double xa[], const double ya[], double a, double b, gsl_interp_accel * acc); void gsl_interp_free(gsl_interp * interp); INLINE_DECL size_t gsl_interp_bsearch(const double x_array[], double x, size_t index_lo, size_t index_hi); #ifdef HAVE_INLINE /* Perform a binary search of an array of values. * * The parameters index_lo and index_hi provide an initial bracket, * and it is assumed that index_lo < index_hi. The resulting index * is guaranteed to be strictly less than index_hi and greater than * or equal to index_lo, so that the implicit bracket [index, index+1] * always corresponds to a region within the implicit value range of * the value array. * * Note that this means the relationship of 'x' to x_array[index] * and x_array[index+1] depends on the result region, i.e. the * behaviour at the boundaries may not correspond to what you * expect. We have the following complete specification of the * behaviour. * Suppose the input is x_array[] = { x0, x1, ..., xN } * if ( x == x0 ) then index == 0 * if ( x > x0 && x <= x1 ) then index == 0, and sim. for other interior pts * if ( x == xN ) then index == N-1 * if ( x > xN ) then index == N-1 * if ( x < x0 ) then index == 0 */ INLINE_FUN size_t gsl_interp_bsearch(const double x_array[], double x, size_t index_lo, size_t index_hi) { size_t ilo = index_lo; size_t ihi = index_hi; while(ihi > ilo + 1) { size_t i = (ihi + ilo)/2; if(x_array[i] > x) ihi = i; else ilo = i; } return ilo; } #endif INLINE_DECL size_t gsl_interp_accel_find(gsl_interp_accel * a, const double x_array[], size_t size, double x); #ifdef HAVE_INLINE INLINE_FUN size_t gsl_interp_accel_find(gsl_interp_accel * a, const double xa[], size_t len, double x) { size_t x_index = a->cache; if(x < xa[x_index]) { a->miss_count++; a->cache = gsl_interp_bsearch(xa, x, 0, x_index); } else if(x >= xa[x_index + 1]) { a->miss_count++; a->cache = gsl_interp_bsearch(xa, x, x_index, len-1); } else { a->hit_count++; } return a->cache; } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_INTERP_H__ */ gsl/interpolation/interp2d.c0000644000175000017500000003306213536675317014523 0ustar eddedd/* interpolation/interp2d.c * * Copyright 2012 David Zaslavsky * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include /** * Triggers a GSL error if the argument is not equal to GSL_SUCCESS. * If the argument is GSL_SUCCESS, this does nothing. */ #define DISCARD_STATUS(s) if ((s) != GSL_SUCCESS) { GSL_ERROR_VAL("interpolation error", (s), GSL_NAN); } #define IDX2D(i, j, w) ((j) * ((w)->xsize) + (i)) gsl_interp2d * gsl_interp2d_alloc(const gsl_interp2d_type * T, const size_t xsize, const size_t ysize) { gsl_interp2d * interp; if (xsize < T->min_size || ysize < T->min_size) { GSL_ERROR_NULL ("insufficient number of points for interpolation type", GSL_EINVAL); } interp = (gsl_interp2d *) calloc(1, sizeof(gsl_interp2d)); if (interp == NULL) { GSL_ERROR_NULL ("failed to allocate space for gsl_interp2d struct", GSL_ENOMEM); } interp->type = T; interp->xsize = xsize; interp->ysize = ysize; if (interp->type->alloc == NULL) { interp->state = NULL; return interp; } interp->state = interp->type->alloc(xsize, ysize); if (interp->state == NULL) { free(interp); GSL_ERROR_NULL ("failed to allocate space for gsl_interp2d state", GSL_ENOMEM); } return interp; } /* gsl_interp2d_alloc() */ void gsl_interp2d_free (gsl_interp2d * interp) { RETURN_IF_NULL(interp); if (interp->type->free) interp->type->free(interp->state); free(interp); } /* gsl_interp2d_free() */ int gsl_interp2d_init (gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const size_t xsize, const size_t ysize) { size_t i; if (xsize != interp->xsize || ysize != interp->ysize) { GSL_ERROR("data must match size of interpolation object", GSL_EINVAL); } for (i = 1; i < xsize; i++) { if (xarr[i-1] >= xarr[i]) { GSL_ERROR("x values must be strictly increasing", GSL_EINVAL); } } for (i = 1; i < ysize; i++) { if (yarr[i-1] >= yarr[i]) { GSL_ERROR("y values must be strictly increasing", GSL_EINVAL); } } interp->xmin = xarr[0]; interp->xmax = xarr[xsize - 1]; interp->ymin = yarr[0]; interp->ymax = yarr[ysize - 1]; { int status = interp->type->init(interp->state, xarr, yarr, zarr, xsize, ysize); return status; } } /* gsl_interp2d_init() */ /* * A wrapper function that checks boundary conditions, calls an evaluator * which implements the actual calculation of the function value or * derivative etc., and checks the return status. */ static int interp2d_eval(int (*evaluator)(const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel *, gsl_interp_accel *, double * z), const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * result) { if (x < interp->xmin || x > interp->xmax) { GSL_ERROR ("interpolation x value out of range", GSL_EDOM); } else if (y < interp->ymin || y > interp->ymax) { GSL_ERROR ("interpolation y value out of range", GSL_EDOM); } return evaluator(interp->state, xarr, yarr, zarr, interp->xsize, interp->ysize, x, y, xa, ya, result); } /* * Another wrapper function that serves as a drop-in replacement for * interp2d_eval but does not check the bounds. This can be used * for extrapolation. */ static int interp2d_eval_extrap(int (*evaluator)(const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel *, gsl_interp_accel *, double * z), const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * result) { return evaluator(interp->state, xarr, yarr, zarr, interp->xsize, interp->ysize, x, y, xa, ya, result); } double gsl_interp2d_eval (const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) { double z; int status = gsl_interp2d_eval_e(interp, xarr, yarr, zarr, x, y, xa, ya, &z); DISCARD_STATUS(status) return z; } /* gsl_interp2d_eval() */ double gsl_interp2d_eval_extrap (const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) { double z; int status = interp2d_eval_extrap(interp->type->eval, interp, xarr, yarr, zarr, x, y, xa, ya, &z); DISCARD_STATUS(status) return z; } int gsl_interp2d_eval_e (const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { return interp2d_eval(interp->type->eval, interp, xarr, yarr, zarr, x, y, xa, ya, z); } /* gsl_interp2d_eval_e() */ #ifndef GSL_DISABLE_DEPRECATED int gsl_interp2d_eval_e_extrap (const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { return interp2d_eval_extrap(interp->type->eval, interp, xarr, yarr, zarr, x, y, xa, ya, z); } #endif /* !GSL_DISABLE_DEPRECATED */ int gsl_interp2d_eval_extrap_e (const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { return interp2d_eval_extrap(interp->type->eval, interp, xarr, yarr, zarr, x, y, xa, ya, z); } double gsl_interp2d_eval_deriv_x (const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) { double z; int status = gsl_interp2d_eval_deriv_x_e(interp, xarr, yarr, zarr, x, y, xa, ya, &z); DISCARD_STATUS(status) return z; } int gsl_interp2d_eval_deriv_x_e (const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { return interp2d_eval(interp->type->eval_deriv_x, interp, xarr, yarr, zarr, x, y, xa, ya, z); } double gsl_interp2d_eval_deriv_y (const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) { double z; int status = gsl_interp2d_eval_deriv_y_e(interp, xarr, yarr, zarr, x, y, xa, ya, &z); DISCARD_STATUS(status) return z; } int gsl_interp2d_eval_deriv_y_e (const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { return interp2d_eval(interp->type->eval_deriv_y, interp, xarr, yarr, zarr, x, y, xa, ya, z); } double gsl_interp2d_eval_deriv_xx (const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) { double z; int status = gsl_interp2d_eval_deriv_xx_e(interp, xarr, yarr, zarr, x, y, xa, ya, &z); DISCARD_STATUS(status) return z; } int gsl_interp2d_eval_deriv_xx_e (const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { return interp2d_eval(interp->type->eval_deriv_xx, interp, xarr, yarr, zarr, x, y, xa, ya, z); } double gsl_interp2d_eval_deriv_yy (const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) { double z; int status = gsl_interp2d_eval_deriv_yy_e(interp, xarr, yarr, zarr, x, y, xa, ya, &z); DISCARD_STATUS(status) return z; } int gsl_interp2d_eval_deriv_yy_e (const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { return interp2d_eval(interp->type->eval_deriv_yy, interp, xarr, yarr, zarr, x, y, xa, ya, z); } double gsl_interp2d_eval_deriv_xy (const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) { double z; int status = gsl_interp2d_eval_deriv_xy_e(interp, xarr, yarr, zarr, x, y, xa, ya, &z); DISCARD_STATUS(status) return z; } int gsl_interp2d_eval_deriv_xy_e (const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { return interp2d_eval(interp->type->eval_deriv_xy, interp, xarr, yarr, zarr, x, y, xa, ya, z); } size_t gsl_interp2d_type_min_size(const gsl_interp2d_type * T) { return T->min_size; } size_t gsl_interp2d_min_size(const gsl_interp2d * interp) { return interp->type->min_size; } const char * gsl_interp2d_name(const gsl_interp2d * interp) { return interp->type->name; } size_t gsl_interp2d_idx(const gsl_interp2d * interp, const size_t i, const size_t j) { if (i >= interp->xsize) { GSL_ERROR_VAL ("x index out of range", GSL_ERANGE, 0); } else if (j >= interp->ysize) { GSL_ERROR_VAL ("y index out of range", GSL_ERANGE, 0); } else { return IDX2D(i, j, interp); } } /* gsl_interp2d_idx() */ int gsl_interp2d_set(const gsl_interp2d * interp, double zarr[], const size_t i, const size_t j, const double z) { if (i >= interp->xsize) { GSL_ERROR ("x index out of range", GSL_ERANGE); } else if (j >= interp->ysize) { GSL_ERROR ("y index out of range", GSL_ERANGE); } else { zarr[IDX2D(i, j, interp)] = z; return GSL_SUCCESS; } } /* gsl_interp2d_set() */ double gsl_interp2d_get(const gsl_interp2d * interp, const double zarr[], const size_t i, const size_t j) { if (i >= interp->xsize) { GSL_ERROR_VAL ("x index out of range", GSL_ERANGE, 0); } else if (j >= interp->ysize) { GSL_ERROR_VAL ("y index out of range", GSL_ERANGE, 0); } else { return zarr[IDX2D(i, j, interp)]; } } /* gsl_interp2d_get() */ #undef IDX2D gsl/interpolation/bilinear.c0000644000175000017500000001420613536674414014555 0ustar eddedd/* interpolation/bilinear.c * * Copyright 2012 David Zaslavsky * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #define IDX2D(i, j, xsize, ysize) ((j) * (xsize) + (i)) static int bilinear_init(void * state, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize) { return GSL_SUCCESS; } static int bilinear_eval(const void * state, const double xarr[], const double yarr[], const double zarr[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { double xmin, xmax, ymin, ymax, zminmin, zminmax, zmaxmin, zmaxmax; double dx, dy; double t, u; size_t xi, yi; if (xa != NULL) xi = gsl_interp_accel_find(xa, xarr, xsize, x); else xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); if (ya != NULL) yi = gsl_interp_accel_find(ya, yarr, ysize, y); else yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); xmin = xarr[xi]; xmax = xarr[xi + 1]; ymin = yarr[yi]; ymax = yarr[yi + 1]; zminmin = zarr[IDX2D(xi, yi, xsize, ysize)]; zminmax = zarr[IDX2D(xi, yi + 1, xsize, ysize)]; zmaxmin = zarr[IDX2D(xi + 1, yi, xsize, ysize)]; zmaxmax = zarr[IDX2D(xi + 1, yi + 1, xsize, ysize)]; dx = xmax - xmin; dy = ymax - ymin; t = (x - xmin)/dx; u = (y - ymin)/dy; *z = (1.-t)*(1.-u)*zminmin + t*(1.-u)*zmaxmin + (1.-t)*u*zminmax + t*u*zmaxmax; return GSL_SUCCESS; } static int bilinear_deriv_x(const void * state, const double xarr[], const double yarr[], const double zarr[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_p) { double xmin, xmax, ymin, ymax, zminmin, zminmax, zmaxmin, zmaxmax; double dx, dy; double dt, u; size_t xi, yi; if (xa != NULL) xi = gsl_interp_accel_find(xa, xarr, xsize, x); else xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); if (ya != NULL) yi = gsl_interp_accel_find(ya, yarr, ysize, y); else yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); xmin = xarr[xi]; xmax = xarr[xi + 1]; ymin = yarr[yi]; ymax = yarr[yi + 1]; zminmin = zarr[IDX2D(xi, yi, xsize, ysize)]; zminmax = zarr[IDX2D(xi, yi + 1, xsize, ysize)]; zmaxmin = zarr[IDX2D(xi + 1, yi, xsize, ysize)]; zmaxmax = zarr[IDX2D(xi + 1, yi + 1, xsize, ysize)]; dx = xmax - xmin; dy = ymax - ymin; dt = 1./dx; /* partial t / partial x */ u = (y - ymin)/dy; *z_p = dt*(-(1.-u)*zminmin + (1.-u)*zmaxmin - u*zminmax + u*zmaxmax); return GSL_SUCCESS; } static int bilinear_deriv_y(const void * state, const double xarr[], const double yarr[], const double zarr[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_p) { double xmin, xmax, ymin, ymax, zminmin, zminmax, zmaxmin, zmaxmax; double dx, dy; double t, du; size_t xi, yi; if (xa != NULL) xi = gsl_interp_accel_find(xa, xarr, xsize, x); else xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); if (ya != NULL) yi = gsl_interp_accel_find(ya, yarr, ysize, y); else yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); xmin = xarr[xi]; xmax = xarr[xi + 1]; ymin = yarr[yi]; ymax = yarr[yi + 1]; zminmin = zarr[IDX2D(xi, yi, xsize, ysize)]; zminmax = zarr[IDX2D(xi, yi + 1, xsize, ysize)]; zmaxmin = zarr[IDX2D(xi + 1, yi, xsize, ysize)]; zmaxmax = zarr[IDX2D(xi + 1, yi + 1, xsize, ysize)]; dx = xmax - xmin; dy = ymax - ymin; t = (x - xmin)/dx; du = 1./dy; /* partial u / partial y */ *z_p = du*(-(1.-t)*zminmin - t*zmaxmin + (1.-t)*zminmax + t*zmaxmax); return GSL_SUCCESS; } static int bilinear_deriv2(const void * state, const double xarr[], const double yarr[], const double zarr[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_pp) { *z_pp = 0.0; return GSL_SUCCESS; } static int bilinear_derivxy(const void * state, const double xarr[], const double yarr[], const double zarr[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_pp) { double xmin, xmax, ymin, ymax, zminmin, zminmax, zmaxmin, zmaxmax; double dx, dy; double dt, du; size_t xi, yi; if (xa != NULL) xi = gsl_interp_accel_find(xa, xarr, xsize, x); else xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); if (ya != NULL) yi = gsl_interp_accel_find(ya, yarr, ysize, y); else yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); xmin = xarr[xi]; xmax = xarr[xi + 1]; ymin = yarr[yi]; ymax = yarr[yi + 1]; zminmin = zarr[IDX2D(xi, yi, xsize, ysize)]; zminmax = zarr[IDX2D(xi, yi + 1, xsize, ysize)]; zmaxmin = zarr[IDX2D(xi + 1, yi, xsize, ysize)]; zmaxmax = zarr[IDX2D(xi + 1, yi + 1, xsize, ysize)]; dx = xmax - xmin; dy = ymax - ymin; dt = 1./dx; /* partial t / partial x */ du = 1./dy; /* partial u / partial y */ *z_pp = dt*du*(zminmin-zmaxmin-zminmax+zmaxmax); return GSL_SUCCESS; } static const gsl_interp2d_type bilinear_type = { "bilinear", 2, NULL, &bilinear_init, &bilinear_eval, &bilinear_deriv_x, &bilinear_deriv_y, &bilinear_deriv2, &bilinear_derivxy, &bilinear_deriv2, NULL }; const gsl_interp2d_type * gsl_interp2d_bilinear = &bilinear_type; #undef IDX2D gsl/interpolation/spline.c0000644000175000017500000001205613536674414014263 0ustar eddedd/* interpolation/spline.c * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include gsl_spline * gsl_spline_alloc (const gsl_interp_type * T, size_t size) { gsl_spline * spline = (gsl_spline *) malloc (sizeof(gsl_spline)); if (spline == NULL) { GSL_ERROR_NULL ("failed to allocate space for spline struct", GSL_ENOMEM); } spline->interp = gsl_interp_alloc (T, size); if (spline->interp == NULL) { free (spline); GSL_ERROR_NULL ("failed to allocate space for interp", GSL_ENOMEM); }; spline->x = (double *) malloc (size * sizeof(double)); if (spline->x == NULL) { gsl_interp_free(spline->interp); free(spline); GSL_ERROR_NULL ("failed to allocate space for x", GSL_ENOMEM); } spline->y = (double *) malloc (size * sizeof(double)); if (spline->y == NULL) { free(spline->x); gsl_interp_free(spline->interp); free(spline); GSL_ERROR_NULL ("failed to allocate space for y", GSL_ENOMEM); } spline->size = size; return spline; } int gsl_spline_init (gsl_spline * spline, const double x_array[], const double y_array[], size_t size) { if (size != spline->size) { GSL_ERROR ("data must match size of spline object", GSL_EINVAL); } memcpy (spline->x, x_array, size * sizeof(double)); memcpy (spline->y, y_array, size * sizeof(double)); { int status = gsl_interp_init (spline->interp, x_array, y_array, size); return status; } } const char * gsl_spline_name(const gsl_spline * spline) { return gsl_interp_name(spline->interp); } unsigned int gsl_spline_min_size(const gsl_spline * spline) { return gsl_interp_min_size(spline->interp); } void gsl_spline_free (gsl_spline * spline) { RETURN_IF_NULL (spline); gsl_interp_free (spline->interp); free (spline->x); free (spline->y); free (spline); } int gsl_spline_eval_e (const gsl_spline * spline, double x, gsl_interp_accel * a, double *y) { return gsl_interp_eval_e (spline->interp, spline->x, spline->y, x, a, y); } double gsl_spline_eval (const gsl_spline * spline, double x, gsl_interp_accel * a) { return gsl_interp_eval (spline->interp, spline->x, spline->y, x, a); } int gsl_spline_eval_deriv_e (const gsl_spline * spline, double x, gsl_interp_accel * a, double *dydx) { return gsl_interp_eval_deriv_e (spline->interp, spline->x, spline->y, x, a, dydx); } double gsl_spline_eval_deriv (const gsl_spline * spline, double x, gsl_interp_accel * a) { return gsl_interp_eval_deriv (spline->interp, spline->x, spline->y, x, a); } int gsl_spline_eval_deriv2_e (const gsl_spline * spline, double x, gsl_interp_accel * a, double * d2) { return gsl_interp_eval_deriv2_e (spline->interp, spline->x, spline->y, x, a, d2); } double gsl_spline_eval_deriv2 (const gsl_spline * spline, double x, gsl_interp_accel * a) { return gsl_interp_eval_deriv2 (spline->interp, spline->x, spline->y, x, a); } int gsl_spline_eval_integ_e (const gsl_spline * spline, double a, double b, gsl_interp_accel * acc, double * result) { return gsl_interp_eval_integ_e (spline->interp, spline->x, spline->y, a, b, acc, result); } double gsl_spline_eval_integ (const gsl_spline * spline, double a, double b, gsl_interp_accel * acc) { return gsl_interp_eval_integ (spline->interp, spline->x, spline->y, a, b, acc); } gsl/interpolation/poly.c0000644000175000017500000001035513536674414013754 0ustar eddedd/* interpolation/interp_poly.c * * Copyright (C) 2001 DAN, HO-JIN * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include typedef struct { double *d; double *coeff; double *work; } polynomial_state_t; static void * polynomial_alloc (size_t size) { polynomial_state_t *state = (polynomial_state_t *) malloc (sizeof (polynomial_state_t)); if (state == 0) { GSL_ERROR_NULL ("failed to allocate space for polynomial state", GSL_ENOMEM); } state->d = (double *) malloc (sizeof (double) * size); if (state->d == 0) { free (state); GSL_ERROR_NULL ("failed to allocate space for d", GSL_ENOMEM); } state->coeff = (double *) malloc (sizeof (double) * size); if (state->coeff == 0) { free (state->d); free (state); GSL_ERROR_NULL ("failed to allocate space for d", GSL_ENOMEM); } state->work = (double *) malloc (sizeof (double) * size); if (state->work == 0) { free (state->coeff); free (state->d); free (state); GSL_ERROR_NULL ("failed to allocate space for d", GSL_ENOMEM); } return state; } static int polynomial_init (void *vstate, const double xa[], const double ya[], size_t size) { polynomial_state_t *state = (polynomial_state_t *) vstate; int status = gsl_poly_dd_init (state->d, xa, ya, size); return status; } static int polynomial_eval (const void *vstate, const double xa[], const double ya[], size_t size, double x, gsl_interp_accel * acc, double *y) { const polynomial_state_t *state = (const polynomial_state_t *) vstate; *y = gsl_poly_dd_eval (state->d, xa, size, x); return GSL_SUCCESS; } static int polynomial_deriv (const void *vstate, const double xa[], const double ya[], size_t size, double x, gsl_interp_accel * acc, double *y) { const polynomial_state_t *state = (const polynomial_state_t *) vstate; gsl_poly_dd_taylor (state->coeff, x, state->d, xa, size, state->work); *y = state->coeff[1]; return GSL_SUCCESS; } static int polynomial_deriv2 (const void *vstate, const double xa[], const double ya[], size_t size, double x, gsl_interp_accel * acc, double *y) { const polynomial_state_t *state = (const polynomial_state_t *) vstate; gsl_poly_dd_taylor (state->coeff, x, state->d, xa, size, state->work); *y = 2.0 * state->coeff[2]; return GSL_SUCCESS; } static int polynomial_integ (const void *vstate, const double xa[], const double ya[], size_t size, gsl_interp_accel * acc, double a, double b, double *result) { const polynomial_state_t *state = (const polynomial_state_t *) vstate; size_t i; double sum; gsl_poly_dd_taylor (state->coeff, 0.0, state->d, xa, size, state->work); sum = state->coeff[0] * (b - a); for (i = 1; i < size; i++) { sum += state->coeff[i] * (pow (b, i + 1) - pow (a, i + 1)) / (i + 1.0); } *result = sum; return GSL_SUCCESS; } static void polynomial_free (void *vstate) { polynomial_state_t *state = (polynomial_state_t *) vstate; free (state->d); free (state->coeff); free (state->work); free (state); } static const gsl_interp_type polynomial_type = { "polynomial", 3, &polynomial_alloc, &polynomial_init, &polynomial_eval, &polynomial_deriv, &polynomial_deriv2, &polynomial_integ, &polynomial_free, }; const gsl_interp_type *gsl_interp_polynomial = &polynomial_type; gsl/interpolation/TODO0000644000175000017500000000066413536674414013317 0ustar eddedd# -*- org -*- #+CATEGORY: interpolation 1. need to add a test for the akima splines 2. [DOCUMENTATION] From: Conrad Curry I would suggest adding more about cspline and Akima similiar to what is given for 'polynomial', particularly under what conditions one would be prefered over the other. 3. add akima splines without the Wodicka modification, so that the spline is a smooth curve without corners. gsl/interpolation/gsl_interp2d.h0000644000175000017500000002216013536675317015372 0ustar eddedd/* interpolation/gsl_interp2d.h * * Copyright 2012 David Zaslavsky * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_INTERP2D_H__ #define __GSL_INTERP2D_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { const char* name; unsigned int min_size; void * (*alloc)(size_t xsize, size_t ysize); int (*init)(void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize); int (*eval)(const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z); int (*eval_deriv_x) (const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z_p); int (*eval_deriv_y) (const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z_p); int (*eval_deriv_xx) (const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z_pp); int (*eval_deriv_xy) (const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z_pp); int (*eval_deriv_yy) (const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z_pp); void (*free)(void *); } gsl_interp2d_type; typedef struct { const gsl_interp2d_type * type; /* interpolation type */ double xmin; /* minimum value of x for which data have been provided */ double xmax; /* maximum value of x for which data have been provided */ double ymin; /* minimum value of y for which data have been provided */ double ymax; /* maximum value of y for which data have been provided */ size_t xsize; /* number of x values provided */ size_t ysize; /* number of y values provided */ void * state; /* internal state object specific to the interpolation type */ } gsl_interp2d; /* available types */ GSL_VAR const gsl_interp2d_type * gsl_interp2d_bilinear; GSL_VAR const gsl_interp2d_type * gsl_interp2d_bicubic; gsl_interp2d * gsl_interp2d_alloc(const gsl_interp2d_type * T, const size_t xsize, const size_t ysize); const char * gsl_interp2d_name(const gsl_interp2d * interp); size_t gsl_interp2d_min_size(const gsl_interp2d * interp); size_t gsl_interp2d_type_min_size(const gsl_interp2d_type * T); int gsl_interp2d_set(const gsl_interp2d * interp, double zarr[], const size_t i, const size_t j, const double z); double gsl_interp2d_get(const gsl_interp2d * interp, const double zarr[], const size_t i, const size_t j); size_t gsl_interp2d_idx(const gsl_interp2d * interp, const size_t i, const size_t j); int gsl_interp2d_init(gsl_interp2d * interp, const double xa[], const double ya[], const double za[], const size_t xsize, const size_t ysize); void gsl_interp2d_free(gsl_interp2d * interp); double gsl_interp2d_eval(const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya); double gsl_interp2d_eval_extrap(const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya); int gsl_interp2d_eval_e(const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya, double * z); #ifndef GSL_DISABLE_DEPRECATED int gsl_interp2d_eval_e_extrap(const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z); #endif /* !GSL_DISABLE_DEPRECATED */ int gsl_interp2d_eval_extrap_e(const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z); double gsl_interp2d_eval_deriv_x(const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya); int gsl_interp2d_eval_deriv_x_e(const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z); double gsl_interp2d_eval_deriv_y(const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel* xa, gsl_interp_accel* ya); int gsl_interp2d_eval_deriv_y_e(const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z); double gsl_interp2d_eval_deriv_xx(const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya); int gsl_interp2d_eval_deriv_xx_e(const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z); double gsl_interp2d_eval_deriv_yy(const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya); int gsl_interp2d_eval_deriv_yy_e(const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z); double gsl_interp2d_eval_deriv_xy(const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya); int gsl_interp2d_eval_deriv_xy_e(const gsl_interp2d * interp, const double xarr[], const double yarr[], const double zarr[], const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z); __END_DECLS #endif /* __GSL_INTERP2D_H__ */ gsl/interpolation/spline2d.c0000664000175000017500000002156714057135461014513 0ustar eddedd/* interpolation/spline2d.c * * Copyright 2012 David Zaslavsky * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include gsl_spline2d * gsl_spline2d_alloc(const gsl_interp2d_type * T, size_t xsize, size_t ysize) { double * array_mem; gsl_spline2d * interp; if (xsize < T->min_size || ysize < T->min_size) { GSL_ERROR_NULL("insufficient number of points for interpolation type", GSL_EINVAL); } interp = calloc(1, sizeof(gsl_spline2d)); if (interp == NULL) { GSL_ERROR_NULL("failed to allocate space for gsl_spline2d struct", GSL_ENOMEM); } interp->interp_object.type = T; interp->interp_object.xsize = xsize; interp->interp_object.ysize = ysize; if (interp->interp_object.type->alloc == NULL) { interp->interp_object.state = NULL; } else { interp->interp_object.state = interp->interp_object.type->alloc(xsize, ysize); if (interp->interp_object.state == NULL) { gsl_spline2d_free(interp); GSL_ERROR_NULL("failed to allocate space for gsl_spline2d state", GSL_ENOMEM); } } /* * Use one contiguous block of memory for all three data arrays. * That way the code fails immediately if there isn't sufficient space for everything, * rather than allocating one or two and then having to free them. */ array_mem = (double *)calloc(xsize + ysize + xsize * ysize, sizeof(double)); if (array_mem == NULL) { gsl_spline2d_free(interp); GSL_ERROR_NULL("failed to allocate space for data arrays", GSL_ENOMEM); } interp->xarr = array_mem; interp->yarr = array_mem + xsize; interp->zarr = array_mem + xsize + ysize; return interp; } /* gsl_spline2d_alloc() */ int gsl_spline2d_init(gsl_spline2d * interp, const double xarr[], const double yarr[], const double zarr[], size_t xsize, size_t ysize) { int status = gsl_interp2d_init(&(interp->interp_object), xarr, yarr, zarr, xsize, ysize); memcpy(interp->xarr, xarr, xsize * sizeof(double)); memcpy(interp->yarr, yarr, ysize * sizeof(double)); memcpy(interp->zarr, zarr, xsize * ysize * sizeof(double)); return status; } /* gsl_spline2d_init() */ void gsl_spline2d_free(gsl_spline2d * interp) { RETURN_IF_NULL(interp); if (interp->interp_object.type->free) interp->interp_object.type->free(interp->interp_object.state); /* * interp->xarr points to the beginning of one contiguous block of memory * that holds interp->xarr, interp->yarr, and interp->zarr. So it all gets * freed with one call. cf. gsl_spline2d_alloc() implementation */ if (interp->xarr) free(interp->xarr); free(interp); } /* gsl_spline2d_free() */ double gsl_spline2d_eval(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) { return gsl_interp2d_eval(&(interp->interp_object), interp->xarr, interp->yarr, interp->zarr, x, y, xa, ya); } int gsl_spline2d_eval_e(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { return gsl_interp2d_eval_e(&(interp->interp_object), interp->xarr, interp->yarr, interp->zarr, x, y, xa, ya, z); } double gsl_spline2d_eval_extrap(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) { return gsl_interp2d_eval_extrap(&(interp->interp_object), interp->xarr, interp->yarr, interp->zarr, x, y, xa, ya); } int gsl_spline2d_eval_extrap_e(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { return gsl_interp2d_eval_extrap_e(&(interp->interp_object), interp->xarr, interp->yarr, interp->zarr, x, y, xa, ya, z); } double gsl_spline2d_eval_deriv_x(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) { return gsl_interp2d_eval_deriv_x(&(interp->interp_object), interp->xarr, interp->yarr, interp->zarr, x, y, xa, ya); } int gsl_spline2d_eval_deriv_x_e(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { return gsl_interp2d_eval_deriv_x_e(&(interp->interp_object), interp->xarr, interp->yarr, interp->zarr, x, y, xa, ya, z); } double gsl_spline2d_eval_deriv_y(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) { return gsl_interp2d_eval_deriv_y(&(interp->interp_object), interp->xarr, interp->yarr, interp->zarr, x, y, xa, ya); } int gsl_spline2d_eval_deriv_y_e(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { return gsl_interp2d_eval_deriv_y_e(&(interp->interp_object), interp->xarr, interp->yarr, interp->zarr, x, y, xa, ya, z); } double gsl_spline2d_eval_deriv_xx(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) { return gsl_interp2d_eval_deriv_xx(&(interp->interp_object), interp->xarr, interp->yarr, interp->zarr, x, y, xa, ya); } int gsl_spline2d_eval_deriv_xx_e(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { return gsl_interp2d_eval_deriv_xx_e(&(interp->interp_object), interp->xarr, interp->yarr, interp->zarr, x, y, xa, ya, z); } double gsl_spline2d_eval_deriv_yy(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) { return gsl_interp2d_eval_deriv_yy(&(interp->interp_object), interp->xarr, interp->yarr, interp->zarr, x, y, xa, ya); } int gsl_spline2d_eval_deriv_yy_e(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { return gsl_interp2d_eval_deriv_yy_e(&(interp->interp_object), interp->xarr, interp->yarr, interp->zarr, x, y, xa, ya, z); } double gsl_spline2d_eval_deriv_xy(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya) { return gsl_interp2d_eval_deriv_xy(&(interp->interp_object), interp->xarr, interp->yarr, interp->zarr, x, y, xa, ya); } int gsl_spline2d_eval_deriv_xy_e(const gsl_spline2d * interp, const double x, const double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { return gsl_interp2d_eval_deriv_xy_e(&(interp->interp_object), interp->xarr, interp->yarr, interp->zarr, x, y, xa, ya, z); } size_t gsl_spline2d_min_size(const gsl_spline2d * interp) { return gsl_interp2d_min_size(&(interp->interp_object)); } const char * gsl_spline2d_name(const gsl_spline2d * interp) { return gsl_interp2d_name(&(interp->interp_object)); } int gsl_spline2d_set(const gsl_spline2d * interp, double zarr[], const size_t i, const size_t j, const double z) { return gsl_interp2d_set(&(interp->interp_object), zarr, i, j, z); } /* gsl_spline2d_set() */ double gsl_spline2d_get(const gsl_spline2d * interp, const double zarr[], const size_t i, const size_t j) { return gsl_interp2d_get(&(interp->interp_object), zarr, i, j); } /* gsl_spline2d_get() */ gsl/interpolation/gsl_spline.h0000644000175000017500000000533513536674414015137 0ustar eddedd/* interpolation/gsl_spline.h * * Copyright (C) 2001, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SPLINE_H__ #define __GSL_SPLINE_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* general interpolation object */ typedef struct { gsl_interp * interp; double * x; double * y; size_t size; } gsl_spline; gsl_spline * gsl_spline_alloc(const gsl_interp_type * T, size_t size); int gsl_spline_init(gsl_spline * spline, const double xa[], const double ya[], size_t size); const char * gsl_spline_name(const gsl_spline * spline); unsigned int gsl_spline_min_size(const gsl_spline * spline); int gsl_spline_eval_e(const gsl_spline * spline, double x, gsl_interp_accel * a, double * y); double gsl_spline_eval(const gsl_spline * spline, double x, gsl_interp_accel * a); int gsl_spline_eval_deriv_e(const gsl_spline * spline, double x, gsl_interp_accel * a, double * y); double gsl_spline_eval_deriv(const gsl_spline * spline, double x, gsl_interp_accel * a); int gsl_spline_eval_deriv2_e(const gsl_spline * spline, double x, gsl_interp_accel * a, double * y); double gsl_spline_eval_deriv2(const gsl_spline * spline, double x, gsl_interp_accel * a); int gsl_spline_eval_integ_e(const gsl_spline * spline, double a, double b, gsl_interp_accel * acc, double * y); double gsl_spline_eval_integ(const gsl_spline * spline, double a, double b, gsl_interp_accel * acc); void gsl_spline_free(gsl_spline * spline); __END_DECLS #endif /* __GSL_INTERP_H__ */ gsl/interpolation/interp.c0000644000175000017500000001463013536674414014272 0ustar eddedd/* interpolation/interp.c * * Copyright (C) 2007 Brian Gough * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #define DISCARD_STATUS(s) if ((s) != GSL_SUCCESS) { GSL_ERROR_VAL("interpolation error", (s), GSL_NAN); } gsl_interp * gsl_interp_alloc (const gsl_interp_type * T, size_t size) { gsl_interp * interp; if (size < T->min_size) { GSL_ERROR_NULL ("insufficient number of points for interpolation type", GSL_EINVAL); } interp = (gsl_interp *) malloc (sizeof(gsl_interp)); if (interp == NULL) { GSL_ERROR_NULL ("failed to allocate space for interp struct", GSL_ENOMEM); } interp->type = T; interp->size = size; if (interp->type->alloc == NULL) { interp->state = NULL; return interp; } interp->state = interp->type->alloc(size); if (interp->state == NULL) { free (interp); GSL_ERROR_NULL ("failed to allocate space for interp state", GSL_ENOMEM); }; return interp; } int gsl_interp_init (gsl_interp * interp, const double x_array[], const double y_array[], size_t size) { size_t i; if (size != interp->size) { GSL_ERROR ("data must match size of interpolation object", GSL_EINVAL); } for (i = 1; i < size; i++) { if (!(x_array[i-1] < x_array[i])) { GSL_ERROR ("x values must be strictly increasing", GSL_EINVAL); } } interp->xmin = x_array[0]; interp->xmax = x_array[size - 1]; { int status = interp->type->init(interp->state, x_array, y_array, size); return status; } } const char * gsl_interp_name(const gsl_interp * interp) { return interp->type->name; } unsigned int gsl_interp_min_size(const gsl_interp * interp) { return interp->type->min_size; } unsigned int gsl_interp_type_min_size(const gsl_interp_type * T) { return T->min_size; } void gsl_interp_free (gsl_interp * interp) { RETURN_IF_NULL (interp); if (interp->type->free) interp->type->free (interp->state); free (interp); } int gsl_interp_eval_e (const gsl_interp * interp, const double xa[], const double ya[], double x, gsl_interp_accel * a, double *y) { if (x < interp->xmin || x > interp->xmax) { *y = GSL_NAN; return GSL_EDOM; } return interp->type->eval (interp->state, xa, ya, interp->size, x, a, y); } double gsl_interp_eval (const gsl_interp * interp, const double xa[], const double ya[], double x, gsl_interp_accel * a) { double y; int status; if (x < interp->xmin || x > interp->xmax) { GSL_ERROR_VAL("interpolation error", GSL_EDOM, GSL_NAN); } status = interp->type->eval (interp->state, xa, ya, interp->size, x, a, &y); DISCARD_STATUS(status); return y; } int gsl_interp_eval_deriv_e (const gsl_interp * interp, const double xa[], const double ya[], double x, gsl_interp_accel * a, double *dydx) { if (x < interp->xmin || x > interp->xmax) { *dydx = GSL_NAN; return GSL_EDOM; } return interp->type->eval_deriv (interp->state, xa, ya, interp->size, x, a, dydx); } double gsl_interp_eval_deriv (const gsl_interp * interp, const double xa[], const double ya[], double x, gsl_interp_accel * a) { double dydx; int status; if (x < interp->xmin || x > interp->xmax) { GSL_ERROR_VAL("interpolation error", GSL_EDOM, GSL_NAN); } status = interp->type->eval_deriv (interp->state, xa, ya, interp->size, x, a, &dydx); DISCARD_STATUS(status); return dydx; } int gsl_interp_eval_deriv2_e (const gsl_interp * interp, const double xa[], const double ya[], double x, gsl_interp_accel * a, double * d2) { if (x < interp->xmin || x > interp->xmax) { *d2 = GSL_NAN; return GSL_EDOM; } return interp->type->eval_deriv2 (interp->state, xa, ya, interp->size, x, a, d2); } double gsl_interp_eval_deriv2 (const gsl_interp * interp, const double xa[], const double ya[], double x, gsl_interp_accel * a) { double d2; int status; if (x < interp->xmin || x > interp->xmax) { GSL_ERROR_VAL("interpolation error", GSL_EDOM, GSL_NAN); } status = interp->type->eval_deriv2 (interp->state, xa, ya, interp->size, x, a, &d2); DISCARD_STATUS(status); return d2; } int gsl_interp_eval_integ_e (const gsl_interp * interp, const double xa[], const double ya[], double a, double b, gsl_interp_accel * acc, double * result) { if (a > b || a < interp->xmin || b > interp->xmax) { *result = GSL_NAN; return GSL_EDOM; } else if(a == b) { *result = 0.0; return GSL_SUCCESS; } return interp->type->eval_integ (interp->state, xa, ya, interp->size, acc, a, b, result); } double gsl_interp_eval_integ (const gsl_interp * interp, const double xa[], const double ya[], double a, double b, gsl_interp_accel * acc) { double result; int status; if (a > b || a < interp->xmin || b > interp->xmax) { GSL_ERROR_VAL("interpolation error", GSL_EDOM, GSL_NAN); } else if(a == b) { return 0.0; } status = interp->type->eval_integ (interp->state, xa, ya, interp->size, acc, a, b, &result); DISCARD_STATUS(status); return result; } gsl/interpolation/integ_eval.h0000644000175000017500000000254313536674414015113 0ustar eddedd/* interpolation/integ_eval_macro.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* function for doing the spline integral evaluation which is common to both the cspline and akima methods */ static inline double integ_eval (double ai, double bi, double ci, double di, double xi, double a, double b) { const double r1 = a - xi; const double r2 = b - xi; const double r12 = r1 + r2; const double bterm = 0.5 * bi * r12; const double cterm = (1.0 / 3.0) * ci * (r1 * r1 + r2 * r2 + r1 * r2); const double dterm = 0.25 * di * r12 * (r1 * r1 + r2 * r2); return (b - a) * (ai + bterm + cterm + dterm); } gsl/interpolation/test.c0000644000175000017500000011644713536674414013761 0ustar eddedd/* interpolation/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2014 Gerard Jungman * Copyright (C) 2014 Jean-François Caron * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #include #include #include "test2d.c" int test_bsearch(void) { double x_array[5] = { 0.0, 1.0, 2.0, 3.0, 4.0 }; size_t index_result; int status = 0; int s; /* check an interior point */ index_result = gsl_interp_bsearch(x_array, 1.5, 0, 4); s = (index_result != 1); status += s; gsl_test (s, "simple bsearch"); /* check that we get the last interval if x == last value */ index_result = gsl_interp_bsearch(x_array, 4.0, 0, 4); s = (index_result != 3); status += s; gsl_test (s, "upper endpoint bsearch"); /* check that we get the first interval if x == first value */ index_result = gsl_interp_bsearch(x_array, 0.0, 0, 4); s = (index_result != 0); status += s; gsl_test (s, "lower endpoint bsearch"); /* check that we get correct interior boundary behaviour */ index_result = gsl_interp_bsearch(x_array, 2.0, 0, 4); s = (index_result != 2); status += s; gsl_test (s, "degenerate bsearch"); /* check out of bounds above */ index_result = gsl_interp_bsearch(x_array, 10.0, 0, 4); s = (index_result != 3); status += s; gsl_test (s, "out of bounds bsearch +"); /* check out of bounds below */ index_result = gsl_interp_bsearch(x_array, -10.0, 0, 4); s = (index_result != 0); status += s; gsl_test (s, "out of bounds bsearch -"); /* Test the accelerator */ { size_t i, j, k1 = 0, k2 = 0; int t = 0; double x = 0; double r[16] = { -0.2, 0.0, 0.1, 0.7, 1.0, 1.3, 1.9, 2.0, 2.2, 2.7, 3.0, 3.1, 3.6, 4.0, 4.1, 4.9 }; gsl_interp_accel *a = gsl_interp_accel_alloc (); /* Run through all the pairs of points */ while (k1 < 16 && k2 < 16) { x = r[t ? k1 : k2]; t = !t; if (t == 0) { k1 = (k1 + 1) % 16; if (k1 == 0) k2++; }; i = gsl_interp_accel_find(a, x_array, 5, x); j = gsl_interp_bsearch(x_array, x, 0, 4); gsl_test(i != j, "(%u,%u) accelerated lookup vs bsearch (x = %g)", i, j, x); } gsl_interp_accel_free(a); } return status; } typedef double TEST_FUNC (double); typedef struct _xy_table xy_table; struct _xy_table { double * x; double * y; size_t n; }; xy_table make_xy_table (double x[], double y[], size_t n); xy_table make_xy_table (double x[], double y[], size_t n) { xy_table t; t.x = x; t.y = y; t.n = n; return t; } static int test_interp ( const xy_table * data_table, const gsl_interp_type * T, xy_table * test_table, xy_table * test_d_table, xy_table * test_i_table ) { int status = 0, s1, s2, s3; size_t i; gsl_interp_accel *a = gsl_interp_accel_alloc (); gsl_interp *interp = gsl_interp_alloc (T, data_table->n); unsigned int min_size = gsl_interp_type_min_size(T); gsl_test_int (min_size, T->min_size, "gsl_interp_type_min_size on %s", gsl_interp_name(interp)); gsl_interp_init (interp, data_table->x, data_table->y, data_table->n); for (i = 0; i < test_table->n; i++) { double x = test_table->x[i]; double y; double deriv; double integ; double diff_y, diff_deriv, diff_integ; s1 = gsl_interp_eval_e (interp, data_table->x, data_table->y, x, a, &y); s2 = gsl_interp_eval_deriv_e (interp, data_table->x, data_table->y, x, a, &deriv); s3 = gsl_interp_eval_integ_e (interp, data_table->x, data_table->y, test_table->x[0], x, a, &integ); gsl_test (s1, "gsl_interp_eval_e %s", gsl_interp_name(interp)); gsl_test (s2, "gsl_interp_eval_deriv_e %s", gsl_interp_name(interp)); gsl_test (s3, "gsl_interp_eval_integ_e %s", gsl_interp_name(interp)); gsl_test_abs (y, test_table->y[i], 1e-10, "%s %d", gsl_interp_name(interp), i); gsl_test_abs (deriv, test_d_table->y[i], 1e-10, "%s deriv %d", gsl_interp_name(interp), i); gsl_test_abs (integ, test_i_table->y[i], 1e-10, "%s integ %d", gsl_interp_name(interp), i); diff_y = y - test_table->y[i]; diff_deriv = deriv - test_d_table->y[i]; diff_integ = integ - test_i_table->y[i]; if (fabs (diff_y) > 1.e-10 || fabs(diff_deriv) > 1.0e-10 || fabs(diff_integ) > 1.0e-10) { status++; } } gsl_interp_accel_free (a); gsl_interp_free (interp); return status; } static int test_linear (void) { int s; double data_x[4] = { 0.0, 1.0, 2.0, 3.0 }; double data_y[4] = { 0.0, 1.0, 2.0, 3.0 }; double test_x[6] = { 0.0, 0.5, 1.0, 1.5, 2.5, 3.0 }; double test_y[6] = { 0.0, 0.5, 1.0, 1.5, 2.5, 3.0 }; double test_dy[6] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; double test_iy[6] = { 0.0, 0.125, 0.5, 9.0/8.0, 25.0/8.0, 9.0/2.0 }; xy_table data_table = make_xy_table(data_x, data_y, 4); xy_table test_table = make_xy_table(test_x, test_y, 6); xy_table test_d_table = make_xy_table(test_x, test_dy, 6); xy_table test_i_table = make_xy_table(test_x, test_iy, 6); s = test_interp (&data_table, gsl_interp_linear, &test_table, &test_d_table, &test_i_table); gsl_test (s, "linear interpolation"); return s; } static int test_polynomial (void) { int s; double data_x[4] = { 0.0, 1.0, 2.0, 3.0 }; double data_y[4] = { 0.0, 1.0, 2.0, 3.0 }; double test_x[6] = { 0.0, 0.5, 1.0, 1.5, 2.5, 3.0 }; double test_y[6] = { 0.0, 0.5, 1.0, 1.5, 2.5, 3.0 }; double test_dy[6] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; double test_iy[6] = { 0.0, 0.125, 0.5, 9.0/8.0, 25.0/8.0, 9.0/2.0 }; xy_table data_table = make_xy_table(data_x, data_y, 4); xy_table test_table = make_xy_table(test_x, test_y, 6); xy_table test_d_table = make_xy_table(test_x, test_dy, 6); xy_table test_i_table = make_xy_table(test_x, test_iy, 6); s = test_interp (&data_table, gsl_interp_polynomial, &test_table, &test_d_table, &test_i_table); gsl_test (s, "polynomial interpolation"); return s; } static int test_cspline (void) { int s; double data_x[3] = { 0.0, 1.0, 2.0 }; double data_y[3] = { 0.0, 1.0, 2.0 }; double test_x[4] = { 0.0, 0.5, 1.0, 2.0 }; double test_y[4] = { 0.0, 0.5, 1.0, 2.0 }; double test_dy[4] = { 1.0, 1.0, 1.0, 1.0 }; double test_iy[4] = { 0.0, 0.125, 0.5, 2.0 }; xy_table data_table = make_xy_table(data_x, data_y, 3); xy_table test_table = make_xy_table(test_x, test_y, 4); xy_table test_d_table = make_xy_table(test_x, test_dy, 4); xy_table test_i_table = make_xy_table(test_x, test_iy, 4); s = test_interp (&data_table, gsl_interp_cspline, &test_table, &test_d_table, &test_i_table); gsl_test (s, "cspline interpolation"); return s; } static int test_cspline2 (void) { /* Test taken from Young & Gregory, A Survey of Numerical Mathematics, Vol 1 Chapter 6.8 */ int s; double data_x[6] = { 0.0, 0.2, 0.4, 0.6, 0.8, 1.0 }; double data_y[6] = { 1.0, 0.961538461538461, 0.862068965517241, 0.735294117647059, 0.609756097560976, 0.500000000000000 } ; double test_x[50] = { 0.00, 0.02, 0.04, 0.06, 0.08, 0.10, 0.12, 0.14, 0.16, 0.18, 0.20, 0.22, 0.24, 0.26, 0.28, 0.30, 0.32, 0.34, 0.36, 0.38, 0.40, 0.42, 0.44, 0.46, 0.48, 0.50, 0.52, 0.54, 0.56, 0.58, 0.60, 0.62, 0.64, 0.66, 0.68, 0.70, 0.72, 0.74, 0.76, 0.78, 0.80, 0.82, 0.84, 0.86, 0.88, 0.90, 0.92, 0.94, 0.96, 0.98 }; double test_y[50] = { 1.000000000000000, 0.997583282975581, 0.995079933416512, 0.992403318788142, 0.989466806555819, 0.986183764184894, 0.982467559140716, 0.978231558888635, 0.973389130893999, 0.967853642622158, 0.961538461538461, 0.954382579685350, 0.946427487413627, 0.937740299651188, 0.928388131325928, 0.918438097365742, 0.907957312698524, 0.897012892252170, 0.885671950954575, 0.874001603733634, 0.862068965517241, 0.849933363488199, 0.837622973848936, 0.825158185056786, 0.812559385569085, 0.799846963843167, 0.787041308336369, 0.774162807506023, 0.761231849809467, 0.748268823704033, 0.735294117647059, 0.722328486073082, 0.709394147325463, 0.696513685724764, 0.683709685591549, 0.671004731246381, 0.658421407009825, 0.645982297202442, 0.633709986144797, 0.621627058157454, 0.609756097560976, 0.598112015427308, 0.586679029833925, 0.575433685609685, 0.564352527583445, 0.553412100584061, 0.542588949440392, 0.531859618981294, 0.521200654035625, 0.510588599432241}; double test_dy[50] = { -0.120113913432180, -0.122279726798445, -0.128777166897241, -0.139606233728568, -0.154766927292426, -0.174259247588814, -0.198083194617734, -0.226238768379184, -0.258725968873165, -0.295544796099676, -0.336695250058719, -0.378333644186652, -0.416616291919835, -0.451543193258270, -0.483114348201955, -0.511329756750890, -0.536189418905076, -0.557693334664512, -0.575841504029200, -0.590633926999137, -0.602070603574326, -0.611319695518765, -0.619549364596455, -0.626759610807396, -0.632950434151589, -0.638121834629033, -0.642273812239728, -0.645406366983674, -0.647519498860871, -0.648613207871319, -0.648687494015019, -0.647687460711257, -0.645558211379322, -0.642299746019212, -0.637912064630930, -0.632395167214473, -0.625749053769843, -0.617973724297039, -0.609069178796061, -0.599035417266910, -0.587872439709585, -0.576731233416743, -0.566762785681043, -0.557967096502484, -0.550344165881066, -0.543893993816790, -0.538616580309654, -0.534511925359660, -0.531580028966807, -0.529820891131095}; double test_iy[50] = { 0.000000000000000, 0.019975905023535, 0.039902753768792, 0.059777947259733, 0.079597153869625, 0.099354309321042, 0.119041616685866, 0.138649546385285, 0.158166836189794, 0.177580491219196, 0.196875783942601, 0.216036382301310, 0.235045759060558, 0.253888601161251, 0.272550937842853, 0.291020140643388, 0.309284923399436, 0.327335342246135, 0.345162795617181, 0.362760024244829, 0.380121111159890, 0.397241442753010, 0.414117280448683, 0.430745332379281, 0.447122714446318, 0.463246950320456, 0.479115971441505, 0.494728117018421, 0.510082134029305, 0.525177177221407, 0.540012809111123, 0.554589001813881, 0.568906157172889, 0.582965126887879, 0.596767214344995, 0.610314174616794, 0.623608214462242, 0.636651992326715, 0.649448618342004, 0.662001654326309, 0.674315113784241, 0.686393423540581, 0.698241001711602, 0.709861835676399, 0.721259443710643, 0.732436874986582, 0.743396709573044, 0.754141058435429, 0.764671563435718, 0.774989397332469 }; xy_table data_table = make_xy_table(data_x, data_y, 6); xy_table test_table = make_xy_table(test_x, test_y, 50); xy_table test_d_table = make_xy_table(test_x, test_dy, 50); xy_table test_i_table = make_xy_table(test_x, test_iy, 50); s = test_interp (&data_table, gsl_interp_cspline, &test_table, &test_d_table, &test_i_table); gsl_test (s, "cspline 1/(1+x^2) interpolation"); return s; } static int test_cspline3 (void) { /* This data has been chosen to be random (uneven spacing in x and y) and the exact cubic spine solution computed using Octave */ int s; double data_x[7] = { -1.2139767065644265, -0.792590494453907, -0.250954683125019, 0.665867809951305, 0.735655088722706, 0.827622053027153, 1.426592227816582 }; double data_y[7] = { -0.00453877449035645, 0.49763182550668716, 0.17805472016334534, 0.40514493733644485, -0.21595209836959839, 0.47405586764216423, 0.46561462432146072 } ; double test_x[19] = { -1.2139767065644265, -1.0735146358609200, -0.9330525651574135, -0.7925904944539071, -0.6120452240109444, -0.4314999535679818, -0.2509546831250191, 0.0546528145670890, 0.3602603122591972, 0.6658678099513053, 0.6891302362084388, 0.7123926624655723, 0.7356550887227058, 0.7663107434908548, 0.7969663982590039, 0.8276220530271530, 1.0272787779569625, 1.2269355028867721, 1.4265922278165817, }; double test_y[19] = { -0.00453877449035645, 0.25816917628390590, 0.44938881397673230, 0.49763182550668716, 0.31389980410075147, 0.09948951681196887, 0.17805472016334534, 1.27633142487980233, 2.04936553432792001, 0.40514493733644485, 0.13322324792901385, -0.09656315924697809, -0.21595209836959839, -0.13551147728045118, 0.13466779030061801, 0.47405586764216423, 1.68064089899304370, 1.43594739539458649, 0.46561462432146072 }; double test_dy[19] = { 1.955137555965937, 1.700662049790549, 0.937235531264386, -0.335141999612553, -1.401385073563169, -0.674982149482761, 1.844066772628670, 4.202528085784793, -0.284432022227558, -11.616813551408383, -11.272731243226174, -7.994209291156876, -1.781247695200491, 6.373970868827501, 10.597456848997197, 10.889210245308570, 1.803124267866902, -3.648527318598099, -5.465744514086432, }; double test_iy[19] = { 0.000000000000000, 0.018231117234914, 0.069178822023139, 0.137781019634897, 0.213936442847744, 0.249280997744777, 0.267492946016120, 0.471372708120518, 1.014473660088477, 1.477731933018837, 1.483978291717981, 1.484256847945450, 1.480341742628893, 1.474315901028282, 1.473972210647307, 1.483279773396950, 1.728562698140330, 2.057796448999396, 2.253662886537457, }; xy_table data_table = make_xy_table(data_x, data_y, 7); xy_table test_table = make_xy_table(test_x, test_y, 19); xy_table test_d_table = make_xy_table(test_x, test_dy, 19); xy_table test_i_table = make_xy_table(test_x, test_iy, 19); s = test_interp (&data_table, gsl_interp_cspline, &test_table, &test_d_table, &test_i_table); gsl_test (s, "cspline arbitrary data interpolation"); return s; } static int test_csplinep (void) { /* This data has been chosen to be random (uneven spacing in x and y) and the exact cubic spine solution computed using Octave */ int s; double data_x[11] = { 0.000000000000000, 0.130153674349869, 0.164545962312740, 0.227375461261537, 0.256465324353657, 0.372545206874658, 0.520820016781720, 0.647654717733075, 0.753429306654340, 0.900873984827658, 1.000000000000000, }; double data_y[11] = { 0.000000000000000, 0.729629261832041, 0.859286331568207, 0.989913099419008, 0.999175006262120, 0.717928599519215, -0.130443237213363, -0.800267961158980, -0.999767873040527, -0.583333769240853, -0.000000000000000, } ; double test_x[31] = { 0.000000000000000, 0.043384558116623, 0.086769116233246, 0.130153674349869, 0.141617770337492, 0.153081866325116, 0.164545962312740, 0.185489128629005, 0.206432294945271, 0.227375461261537, 0.237072082292243, 0.246768703322951, 0.256465324353657, 0.295158618527324, 0.333851912700991, 0.372545206874658, 0.421970143510346, 0.471395080146033, 0.520820016781720, 0.563098250432172, 0.605376484082623, 0.647654717733075, 0.682912914040164, 0.718171110347252, 0.753429306654340, 0.802577532712113, 0.851725758769885, 0.900873984827658, 0.933915989885105, 0.966957994942553, 1.000000000000000 }; double test_y[31] = { 0.000000000000000, 0.268657574670719, 0.517940878523929, 0.729629261832041, 0.777012551497867, 0.820298314554859, 0.859286331568207, 0.918833991960315, 0.962624749226346, 0.989913099419008, 0.996756196601349, 0.999858105635752, 0.999175006262120, 0.959248551766306, 0.863713527741856, 0.717928599519215, 0.470065187871106, 0.177694938589523, -0.130443237213363, -0.385093922365765, -0.613840011545983, -0.800267961158980, -0.912498361131651, -0.980219217412290, -0.999767873040528, -0.943635958253643, -0.800314354800596, -0.583333769240853, -0.403689914131666, -0.206151346799382, -0.000000000000000 }; double test_dy[31] = { 6.275761975917336, 6.039181349093287, 5.382620652895025, 4.306079887322550, 3.957389777282752, 3.591234754612763, 3.207614819312586, 2.473048186927024, 1.702885029353488, 0.897125346591982, 0.513561009477969, 0.125477545550710, -0.267125045189792, -1.773533414873785, -3.141450982859891, -4.370877749148106, -5.562104227060234, -6.171864888961167, -6.200159734850907, -5.781556055213110, -4.974725570010514, -3.779668279243120, -2.569220222282655, -1.254891157670244, 0.163318914594122, 2.074985916277011, 3.711348850147548, 5.072407716205733, 5.754438923510391, 6.155557010080926, 6.275761975917336 }; double test_iy[31] = { 0.000000000000000, 0.005864903144198, 0.023030998930796, 0.050262495763030, 0.058902457844100, 0.068062330564832, 0.077693991819461, 0.096340576055474, 0.116070578226521, 0.136546192283223, 0.146181187290769, 0.155864434185569, 0.165559443629720, 0.203636318965633, 0.239075190181586, 0.269828050745236, 0.299428805999600, 0.315560685785616, 0.316734151903742, 0.305773798930857, 0.284537037103156, 0.254466034797342, 0.224146112780097, 0.190643050847000, 0.155590744566140, 0.107448508851745, 0.064263083957312, 0.029987183298960, 0.013618510529526, 0.003506827320794, 0.000090064010007, }; xy_table data_table = make_xy_table(data_x, data_y, 11); xy_table test_table = make_xy_table(test_x, test_y, 31); xy_table test_d_table = make_xy_table(test_x, test_dy, 31); xy_table test_i_table = make_xy_table(test_x, test_iy, 31); s = test_interp (&data_table, gsl_interp_cspline_periodic, &test_table, &test_d_table, &test_i_table); gsl_test (s, "cspline periodic sine interpolation"); return s; } static int test_csplinep2 (void) { /* This data tests the periodic case n=3 */ int s; double data_x[3] = { 0.123, 0.423, 1.123 }; double data_y[3] = { 0.456000000000000, 1.407056516295154, 0.456000000000000 } ; double test_x[61] = { 0.123000000000000, 0.133000000000000, 0.143000000000000, 0.153000000000000, 0.163000000000000, 0.173000000000000, 0.183000000000000, 0.193000000000000, 0.203000000000000, 0.213000000000000, 0.223000000000000, 0.233000000000000, 0.243000000000000, 0.253000000000000, 0.263000000000000, 0.273000000000000, 0.283000000000000, 0.293000000000000, 0.303000000000000, 0.313000000000000, 0.323000000000000, 0.333000000000000, 0.343000000000000, 0.353000000000000, 0.363000000000000, 0.373000000000000, 0.383000000000000, 0.393000000000000, 0.403000000000000, 0.413000000000000, 0.423000000000000, 0.446333333333333, 0.469666666666667, 0.493000000000000, 0.516333333333333, 0.539666666666667, 0.563000000000000, 0.586333333333333, 0.609666666666667, 0.633000000000000, 0.656333333333333, 0.679666666666667, 0.703000000000000, 0.726333333333333, 0.749666666666667, 0.773000000000000, 0.796333333333333, 0.819666666666667, 0.843000000000000, 0.866333333333333, 0.889666666666667, 0.913000000000000, 0.936333333333333, 0.959666666666667, 0.983000000000000, 1.006333333333333, 1.029666666666667, 1.053000000000000, 1.076333333333333, 1.099666666666667, 1.123000000000000 }; double test_y[61] = { 0.456000000000000, 0.475443822110923, 0.497423794931967, 0.521758764840979, 0.548267578215809, 0.576769081434305, 0.607082120874316, 0.639025542913690, 0.672418193930275, 0.707078920301921, 0.742826568406475, 0.779479984621787, 0.816858015325704, 0.854779506896076, 0.893063305710751, 0.931528258147577, 0.969993210584403, 1.008277009399078, 1.046198500969450, 1.083576531673367, 1.120229947888679, 1.155977595993233, 1.190638322364879, 1.224030973381464, 1.255974395420838, 1.286287434860848, 1.314788938079344, 1.341297751454174, 1.365632721363187, 1.387612694184230, 1.407056516295154, 1.442092968697928, 1.463321489456714, 1.471728359403224, 1.468299859369172, 1.454022270186272, 1.429881872686237, 1.396864947700781, 1.355957776061616, 1.308146638600458, 1.254417816149018, 1.195757589539010, 1.133152239602149, 1.067588047170148, 1.000051293074719, 0.931528258147577, 0.863005223220435, 0.795468469125006, 0.729904276693004, 0.667298926756143, 0.608638700146136, 0.554909877694696, 0.507098740233537, 0.466191568594372, 0.433174643608916, 0.409034246108881, 0.394756656925981, 0.391328156891929, 0.399735026838439, 0.420963547597225, 0.456000000000000 }; double test_dy[61] = { 1.8115362215145774, 2.0742089736341924, 2.3187663635386602, 2.5452083912279826, 2.7535350567021584, 2.9437463599611897, 3.1158423010050744, 3.2698228798338147, 3.4056880964474079, 3.5234379508458549, 3.6230724430291570, 3.7045915729973125, 3.7679953407503231, 3.8132837462881874, 3.8404567896109061, 3.8495144707184790, 3.8404567896109061, 3.8132837462881874, 3.7679953407503231, 3.7045915729973125, 3.6230724430291565, 3.5234379508458549, 3.4056880964474074, 3.2698228798338147, 3.1158423010050749, 2.9437463599611897, 2.7535350567021584, 2.5452083912279830, 2.3187663635386597, 2.0742089736341924, 1.8115362215145772, 1.1986331332354823, 0.6279992234583869, 0.0996344921833026, -0.3864610605897765, -0.8302874348608467, -1.2318446306299125, -1.5911326478969707, -1.9081514866620208, -2.1829011469250670, -2.4153816286861041, -2.6055929319451341, -2.7535350567021584, -2.8592080029571765, -2.9226117707101862, -2.9437463599611893, -2.9226117707101862, -2.8592080029571760, -2.7535350567021593, -2.6055929319451354, -2.4153816286861045, -2.1829011469250656, -1.9081514866620242, -1.5911326478969716, -1.2318446306299160, -0.8302874348608498, -0.3864610605897769, 0.0996344921832995, 0.6279992234583824, 1.1986331332354769, 1.8115362215145772 }; double test_iy[61] = { 0.000000000000000, 0.004655030170954, 0.009517330277919, 0.014611356059886, 0.019959751719625, 0.025583349923681, 0.031501171802382, 0.037730426949832, 0.044286513423914, 0.051183017746288, 0.058431714902395, 0.066042568341453, 0.074023729976459, 0.082381540184189, 0.091120527805195, 0.100243410143811, 0.109751092968147, 0.119642670510092, 0.129915425465314, 0.140564828993259, 0.151584540717153, 0.162966408723997, 0.174700469564574, 0.186774948253444, 0.199176258268946, 0.211889001553197, 0.224895968512091, 0.238178138015305, 0.251714677396289, 0.265482942452275, 0.279458477444273, 0.312726362409309, 0.346648754292945, 0.380914974633193, 0.415237358187469, 0.449351252932597, 0.483015020064806, 0.516010033999735, 0.548140682372425, 0.579234366037328, 0.609141499068300, 0.637735508758604, 0.664912835620912, 0.690592933387298, 0.714718269009247, 0.737254322657649, 0.758189587722801, 0.777535570814405, 0.795326791761572, 0.811620783612819, 0.826498092636068, 0.840062278318649, 0.852439913367300, 0.863780583708163, 0.874256888486789, 0.884064440068133, 0.893421864036559, 0.902570799195836, 0.911775897569142, 0.921324824399059, 0.931528258147577 }; xy_table data_table = make_xy_table(data_x, data_y, 3); xy_table test_table = make_xy_table(test_x, test_y, 61); xy_table test_d_table = make_xy_table(test_x, test_dy, 61); xy_table test_i_table = make_xy_table(test_x, test_iy, 61); s = test_interp (&data_table, gsl_interp_cspline_periodic, &test_table, &test_d_table, &test_i_table); gsl_test (s, "cspline periodic 3pt interpolation"); return s; } static int test_akima (void) { int s; double data_x[5] = { 0.0, 1.0, 2.0, 3.0, 4.0 }; double data_y[5] = { 0.0, 1.0, 2.0, 3.0, 4.0 }; double test_x[4] = { 0.0, 0.5, 1.0, 2.0 }; double test_y[4] = { 0.0, 0.5, 1.0, 2.0 }; double test_dy[4] = { 1.0, 1.0, 1.0, 1.0 }; double test_iy[4] = { 0.0, 0.125, 0.5, 2.0 }; xy_table data_table = make_xy_table(data_x, data_y, 5); xy_table test_table = make_xy_table(test_x, test_y, 4); xy_table test_d_table = make_xy_table(test_x, test_dy, 4); xy_table test_i_table = make_xy_table(test_x, test_iy, 4); s = test_interp (&data_table, gsl_interp_akima, &test_table, &test_d_table, &test_i_table); gsl_test (s, "akima interpolation"); return s; } static int test_steffen1 (void) { int s; double data_x[5] = { 0.0, 1.0, 2.0, 3.0, 4.0 }; double data_y[5] = { 0.0, 1.0, 2.0, 3.0, 4.0 }; double test_x[6] = { 0.0, 0.5, 1.0, 2.0, 2.5, 3.95 }; double test_y[6] = { 0.0, 0.5, 1.0, 2.0, 2.5, 3.95 }; double test_dy[6] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; double test_iy[6] = { 0.0, 0.125, 0.5, 2.0, 3.125, 7.80125 }; xy_table data_table = make_xy_table(data_x, data_y, 5); xy_table test_table = make_xy_table(test_x, test_y, 4); xy_table test_d_table = make_xy_table(test_x, test_dy, 4); xy_table test_i_table = make_xy_table(test_x, test_iy, 4); s = test_interp (&data_table, gsl_interp_steffen, &test_table, &test_d_table, &test_i_table); gsl_test (s, "steffen interpolation test 1"); return s; } static int test_steffen2 (void) { int s; double data_x[30] = { 4.673405471947611, 4.851675778029557, 6.185473620119991, 7.066003430727031, 7.236222118389267, 7.82067161881444, 8.054504031621493, 8.615033792800752, 9.16666529764867, 9.442092828126395, 10.719577968900381, 11.741967577609238, 12.564881194673035, 12.938424721515084, 12.985892202096888, 13.995771653255744, 14.459157783380315, 15.834857667614848, 15.887779086499942, 18.64645279534696, 19.256361741244287, 19.85100457105047, 19.943627313550987, 20.5033910115468, 20.895380493234843, 21.759942483053962, 21.948984866760803, 22.2504057728461, 22.741860290952104, 23.088720630939164 }; double data_y[30] = { -6.131584089652438, 4.997132870704837, 9.50359639889188, -3.788474042493764, 1.98825324341826, -6.553460294945401, 8.44565760012345, -3.643687601520438, -4.720262269613782, -5.31956608504474, 4.7484698519996655, 1.8191111043001218, 2.7234424260251124, -7.282776099988966, -6.966038807035955, 2.6047260012112545, -3.6363485275348033, -4.124714595822157, -4.820986899771757, -2.8550035950284602, 6.017204757558943, 6.7275899382734075, -9.423359755713639, -0.3645325139870703, 6.925739188986089, -0.07843256857855074, 1.6744315603866244, -8.332083151442944, 6.059246349756446, -7.360159198725659 }; double test_x[129] = { 4.6734054719476106,4.8516757780295574,4.8575586235375265, 5.0417117751274407,5.2258649267173567,5.4100180783072727, 5.5941712298971886,5.7783243814871028,5.9624775330770188, 6.1466306846669347,6.1854736201199909,6.3307838362568507, 6.5149369878467667,6.6990901394366809,6.8832432910265968, 7.0660034307270312,7.0673964426165128,7.236222118389267, 7.2515495942064288,7.4357027457963438,7.6198558973862589, 7.8040090489761749,7.8206716188144396,7.9881622005660908, 8.0545040316214926,8.172315352156005,8.356468503745921, 8.5406216553358369,8.6150337928007517,8.7247748069257529, 8.9089279585156689,9.0930811101055831,9.1666652976486702, 9.277234261695499,9.4420928281263947,9.461387413285415, 9.645540564875331,9.8296937164652469,10.013846868055161, 10.198000019645077,10.382153171234993,10.566306322824907, 10.719577968900381,10.750459474414823,10.934612626004739, 11.118765777594655,11.302918929184571,11.487072080774485, 11.671225232364399,11.741967577609238,11.855378383954315, 12.039531535544231,12.223684687134147,12.407837838724063, 12.564881194673035,12.591990990313979,12.776144141903895, 12.938424721515084,12.960297293493811,12.985892202096888, 13.144450445083727,13.328603596673641,13.512756748263556, 13.696909899853472,13.881063051443387,13.995771653255744, 14.065216203033303,14.249369354623219,14.433522506213134, 14.459157783380315,14.617675657803051,14.801828809392966, 14.985981960982881,15.170135112572796,15.354288264162712, 15.538441415752628,15.722594567342544,15.834857667614848, 15.90674771893246,15.887779086499942,16.090900870522375, 16.27505402211229,16.459207173702204,16.643360325292122, 16.827513476882036,17.01166662847195,17.195819780061868, 17.379972931651782,17.5641260832417,17.748279234831614, 17.932432386421532,18.116585538011446,18.300738689601364, 18.484891841191278,18.64645279534696,18.669044992781188, 18.853198144371106,19.03735129596102,19.221504447550938, 19.256361741244287,19.405657599140852,19.58981075073077, 19.773963902320684,19.851004571050471,19.958117053910598, 19.943627313550987,20.142270205500516,20.32642335709043, 20.5033910115468,20.510576508680348,20.694729660270262, 20.87888281186018,20.895380493234843,21.063035963450094, 21.247189115040012,21.431342266629926,21.61549541821984, 21.759942483053962,21.799648569809754,21.948984866760803, 21.983801721399669,22.167954872989586,22.250405772846101, 22.352108024579501,22.536261176169418,22.720414327759332, 22.741860290952104,22.90456747934925,23.088720630939164 }; double test_y[129] = { -6.1315840896524376, 4.9971328707048368, 5.0367975988827167, 6.1897906340782765, 7.170975366812117, 7.9803517970842286, 8.6179199248946077, 9.083679750243256, 9.3776312731301772, 9.4997744935553676, 9.5035963988918795, 8.5371013292095554, 5.3135045284256019, 1.2120062346303317, -2.3083133782071208, -3.788474042493764, -3.7873197326712797, 1.98825324341826, 1.9709370138809248, -0.31768851396215103, -4.2211558425051745, -6.5330277558649303, -6.5534602949454008, 5.5087083141507147, 8.4456576001234502, 7.1443430435268214, 1.9932653799771245, -2.8426372908118083, -3.6436876015204378, -3.9926784426485034, -4.3315242293057175, -4.5849882013553547, -4.7202622696137819, -5.0157009305506106, -5.3195660850447402, -5.3127453670702938, -4.6348437675141847, -3.1014810884327102, -1.0745634258401102, 1.0840031242494419, 3.0123124658217071, 4.3484585028624627, 4.7484698519996655, 4.740613456600772, 4.4142234654988952, 3.7574719541934956, 2.9757785771330334, 2.274562988765974, 1.8592448435407634, 1.8191111043001218, 1.8659054809992697, 2.0883298868527498, 2.3859686670095699, 2.6372078307738107, 2.7234424260251124, 2.5729816013335247, -3.258105131647655, -7.2827760999889657, -7.179945071809863, -6.9660388070359547, -5.5662805880783406, -3.3905902235190721, -1.0497645733987406, 1.0095869363327665, 2.3408548797255095, 2.6047260012112545, 2.2325150500282476, -0.91241316251151927, -3.5649171021138555, -3.6363485275348033, -3.7309363021244821, -3.8038342533632736, -3.8503835649797429, -3.8846412514674595, -3.920664327319995, -3.9725098070309213, -4.0542347050938083, -4.1247145958221569, -4.8208939493861829, -4.8209868997717571, -4.8103284962540727, -4.7822416973267625, -4.7366335526042516, -4.6735040620865389, -4.5928532257736272, -4.4946810436655156, -4.3789875157622005, -4.2457726420636881, -4.0950364225699714, -3.9267788572810582, -3.7409999461969403, -3.537699689317626, -3.3168780866431069, -3.0785351381733914, -2.8550035950284602, -2.7914506045621672, -0.46968123806956008, 3.263658433044764, 5.8622198554846658, 6.0172047575589431, 6.3291356295622618, 6.5905310151592165, 6.7156659481449141, 6.7275899382734075, -9.4118959280855066, -9.4233597557136388, -7.6111870705157543, -3.9651685725226056, -0.36453251398707032, -0.23537781181431175, 4.0332797539781309, 6.899794364641159, 6.9257391889860891, 6.2377210430025594, 4.3902665602806792, 2.1878722453596344, 0.44278317319805183, -0.078432568578550743, 0.12107113682074738, 1.6744315603866244, 1.3047436323966959, -6.4955024539509765, -8.3320831514429443, -6.7382472104931805, 0.61052993339902706, 5.9794239504090552, 6.0592463497564459, 1.5387265272596853, -7.3601591987256612 }; double test_dy[129] = { 62.426083204466224, 6.757341159173202, 6.727537246743899, 5.7945730211610407, 4.8616087955781726, 3.9286445699953054, 2.9956803444124378, 2.0627161188295791, 1.1297518932467119, 0.1967876676638447, 0, -12.480296842307126, -21.209126982426163, -22.014768399615317, -14.897221093874615, 0, 1.65274069980919, 0, -2.2393981239975669, -19.714311699236049, -19.77742868994725, -2.4287490961310456, 0, 78.213312807624717, 0, -20.358420305108574, -31.350476855816961, -16.93545425712459, -3.9032385156832157, -2.5401833171916435, -1.3740294011308083, -1.6128919418291603, -2.1012124848241789, -2.8800570317456784, 0, 0.70341285683675259, 6.3314138906742139, 9.9941697310971538, 11.69168037810557, 11.42394583169949, 9.1909660918788916, 4.992741158643824, 0, -0.50358091648162351, -2.8552721239834269, -4.0914806331173992, -4.2122064438835425, -3.2174495562818706, -1.1072099703123885, 0, 0.78347408424733667, 1.5221058615312819, 1.6003417148468082, 1.018181644193916, 0, -10.817925943273289, -39.490030870551372, 0, 8.0126635338650072, 6.7986203849007927, 10.557804177353285, 12.667135433334296, 12.351260158262027, 9.6101783521364421, 4.44389001495753, 0, -10.1306309231183, -19.882866043398995, -4.7826445467139278, -0.70998925548225966, -0.49283947499262398, -0.31159279753453034, -0.20667940230488324, -0.17809928930368468, -0.22585245853093405, -0.3499389099866323, -0.55035864367077902, -0.70998925548225966, 0.0098004308855327432, 0, 0.10494594234665755, 0.20009145380778143, 0.2952369652689053, 0.39038247673003107, 0.48552798819115495, 0.58067349965227877, 0.67581901111340459, 0.77096452257452841, 0.86611003403565412, 0.96125554549677805, 1.0564010569579039, 1.1515465684190276, 1.2466920798801533, 1.3418375913412772, 1.4253105022449177, 4.1661049863071913, 18.74497348837053, 19.496500284294363, 6.4206853740787171, 2.3892836005304425, 1.7894106566060179, 1.0494805960296585, 0.30955053545331346, 0, 1.5724451183167569, 0, 16.386389851530527, 21.613477536080744, 17.603560096681914, 18.338573561497682, 23.697110333020628, 3.1105642331329868, 0, -7.5982202651552164, -11.73098890423519, -11.453053366134201, -6.7644136508523696, 0, 9.2309078320594402, 0, -20.350273706124355, -39.581660196515507, 0, 28.835095151183879, 42.753317235684989, 7.3325239511975031, 0, -47.053315974301256, -38.688209637869583 }; double test_iy[129] = { 0, 0.046311303303274043, 0.07582542065258166, 1.1121678097008914, 2.345017979757877, 3.7427368904558875, 5.2736855014272832, 6.9062247723044061, 8.6087156627196464, 10.349519132305348, 10.718617229125304, 12.051326255780914, 13.351310568583624, 13.954434023333466, 13.833375399536308, 13.23478503216295, 13.229508179502936, 13.081569421202504, 13.111955459764134, 13.313565584429645, 12.895822708651364, 11.856586384851303, 11.747502930901248, 11.477166081331394, 11.968731461589641, 12.910617813249443, 13.783041410703255, 13.664096839344904, 13.416752727534579, 12.996373500853053, 12.226613834386363, 11.406286934906419, 11.064147626707395, 10.526693424249395, 9.6682418398824055, 9.5656469982362644, 8.633802142647145, 7.911116775692733, 7.5218036771498298, 7.5234294786346014, 7.9069146636026106, 8.5965335673487839, 9.3034583640488648, 9.4500169740341917, 10.299608964240058, 11.055524261651918, 11.675840089542856, 12.156462347951148, 12.53112561368027, 12.660771626086403, 12.868892222896084, 13.230897278463143, 13.642654271367054, 14.106816365848598, 14.529836204259333, 14.602291235557717, 14.620235691106975, 13.678281413948246, 13.51979351456291, 13.338827208895861, 12.337400222501822, 11.506721190837634, 11.098761199438101, 11.102808164918775, 11.425905470576772, 11.714428553431798, 11.886459852625201, 12.035570442032403, 11.580639494361572, 11.488113239473538, 10.903735363611753, 10.209447282562856, 9.5043766268555689, 8.7920812597559994, 8.0735304010092825, 7.347104626839644, 6.6085958699503662, 6.1496664193039994, 5.821344166329677, 5.9127911070795323, 4.9342652985615576, 4.050745397809842, 3.1740110751228041, 2.3072889415487108, 1.4538056081358768, 0.61678768593257072, -0.20053821401294236, -0.99494548065234767, -1.7632075029373926, -2.5020976698197641, -3.2083893702512087, -3.8788559931834152, -4.5102709275681283, -5.0994075623570394, -5.5789032190742072, -5.6428026999265457, -5.9842769011998804, -5.729140886963938, -4.8519085924998322, -4.6444581063590329, -3.7217151397093993, -2.5300254086689806, -1.3027452894525609, -0.78475347239267057, -1.0460847630211827, -0.90959826921338605, -2.6553766359304607, -3.7360597404585745, -4.1087031972797643, -4.1108616867222691, -3.776307276733156, -2.7114490122334045, -2.5973338374383879, -1.4760729895576692, -0.48580494729501034, 0.11910209432525942, 0.34807359178739627, 0.36262668088219696, 0.3622604193055981, 0.51348240778475363, 0.56740090208414018, 0.14380211642697149, -0.48989527970345625, -1.2810928311228711, -1.8846453955503084, -1.1777647142370817, -1.0483932372566702, -0.32646483194908105, -0.88612247621927298 }; xy_table data_table = make_xy_table(data_x, data_y, 30); xy_table test_table = make_xy_table(test_x, test_y, 129); xy_table test_d_table = make_xy_table(test_x, test_dy, 129); xy_table test_i_table = make_xy_table(test_x, test_iy, 129); s = test_interp (&data_table, gsl_interp_steffen, &test_table, &test_d_table, &test_i_table); gsl_test (s, "steffen interpolation test 2"); return s; } int main (int argc, char **argv) { int status = 0; gsl_ieee_env_setup (); argc = 0; /* prevent warnings about unused parameters */ argv = 0; status += test_bsearch(); status += test_linear(); status += test_polynomial(); status += test_cspline(); status += test_cspline2(); status += test_cspline3(); status += test_csplinep(); status += test_csplinep2(); status += test_akima(); status += test_steffen1(); status += test_steffen2(); status += test_interp2d_main(); exit (gsl_test_summary()); } gsl/interpolation/bicubic.c0000644000175000017500000006735713536674414014407 0ustar eddedd/* interpolation/bicubic.c * * Copyright 2012 David Zaslavsky * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #define IDX2D(i, j, w) ((j) * ((w)->xsize) + (i)) typedef struct { double * zx; double * zy; double * zxy; size_t xsize; size_t ysize; } bicubic_state_t; static void bicubic_free (void * vstate); static void * bicubic_alloc(size_t xsize, size_t ysize) { bicubic_state_t *state; state = calloc(1, sizeof (bicubic_state_t)); if (state == NULL) { GSL_ERROR_NULL("failed to allocate space for state", GSL_ENOMEM); } state->zx = (double *) malloc (xsize * ysize * sizeof (double)); if (state->zx == NULL) { bicubic_free(state); GSL_ERROR_NULL("failed to allocate space for zx", GSL_ENOMEM); } state->zy = (double *) malloc (xsize * ysize * sizeof (double)); if (state->zy == NULL) { bicubic_free(state); GSL_ERROR_NULL("failed to allocate space for zy", GSL_ENOMEM); } state->zxy = (double *) malloc (xsize * ysize * sizeof (double)); if (state->zxy == NULL) { bicubic_free(state); GSL_ERROR_NULL("failed to allocate space for zxy", GSL_ENOMEM); } state->xsize = xsize; state->ysize = ysize; return state; } /* bicubic_alloc() */ static void bicubic_free (void * vstate) { bicubic_state_t *state = (bicubic_state_t *) vstate; RETURN_IF_NULL(state); if (state->zx) free (state->zx); if (state->zy) free (state->zy); if (state->zxy) free (state->zxy); free (state); } /* bicubic_free() */ static int bicubic_init(void * vstate, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize) { bicubic_state_t *state = (bicubic_state_t *) vstate; gsl_interp_accel *acc = gsl_interp_accel_alloc(); gsl_spline *spline; gsl_vector *x; gsl_vector *y; size_t i, j; x = gsl_vector_alloc(xsize); y = gsl_vector_alloc(xsize); spline = gsl_spline_alloc(gsl_interp_cspline, xsize); for (j = 0; j <= ysize - 1; j++) { for (i = 0; i <= xsize - 1; i++) { gsl_vector_set(x, i, xa[i]); gsl_vector_set(y, i, za[IDX2D(i, j, state)]); } gsl_spline_init(spline, x->data, y->data, xsize); for (i = 0; i <= xsize - 1; i++) { state->zx[IDX2D(i, j, state)] = gsl_spline_eval_deriv(spline, xa[i], acc); } } gsl_vector_free(x); gsl_vector_free(y); gsl_spline_free(spline); gsl_interp_accel_reset(acc); x = gsl_vector_alloc(ysize); y = gsl_vector_alloc(ysize); spline = gsl_spline_alloc(gsl_interp_cspline, ysize); for (i = 0; i <= xsize - 1; i++) { for (j = 0; j <= ysize - 1; j++) { gsl_vector_set(x, j, ya[j]); gsl_vector_set(y, j, za[IDX2D(i, j, state)]); } gsl_spline_init(spline, x->data, y->data, ysize); for (j = 0; j <= ysize - 1; j++) { state->zy[IDX2D(i, j, state)] = gsl_spline_eval_deriv(spline, ya[j], acc); } } gsl_vector_free(x); gsl_vector_free(y); gsl_spline_free(spline); gsl_interp_accel_reset(acc); x = gsl_vector_alloc(xsize); y = gsl_vector_alloc(xsize); spline = gsl_spline_alloc(gsl_interp_cspline, xsize); for (j = 0; j <= ysize - 1; j++) { for (i = 0; i <= xsize - 1; i++) { gsl_vector_set(x, i, xa[i]); gsl_vector_set(y, i, state->zy[IDX2D(i, j, state)]); } gsl_spline_init(spline, x->data, y->data, xsize); for (i = 0; i <= xsize - 1; i++) { state->zxy[IDX2D(i, j, state)] = gsl_spline_eval_deriv(spline, xa[i], acc); } } gsl_vector_free(x); gsl_vector_free(y); gsl_spline_free(spline); gsl_interp_accel_free(acc); return GSL_SUCCESS; } /* bicubic_init() */ static int bicubic_eval(const void * vstate, const double xarr[], const double yarr[], const double zarr[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z) { bicubic_state_t *state = (bicubic_state_t *) vstate; double xmin, xmax, ymin, ymax; double zminmin, zminmax, zmaxmin, zmaxmax; double zxminmin, zxminmax, zxmaxmin, zxmaxmax; double zyminmin, zyminmax, zymaxmin, zymaxmax; double zxyminmin, zxyminmax, zxymaxmin, zxymaxmax; double dx, dy; /* size of the grid cell */ double dt, du; /* * t and u are the positions within the grid cell at which we are computing * the interpolation, in units of grid cell size */ double t, u; double t0, t1, t2, t3, u0, u1, u2, u3; double v; size_t xi, yi; /* first compute the indices into the data arrays where we are interpolating */ if (xa != NULL) xi = gsl_interp_accel_find(xa, xarr, xsize, x); else xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); if (ya != NULL) yi = gsl_interp_accel_find(ya, yarr, ysize, y); else yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); /* find the minimum and maximum values on the grid cell in each dimension */ xmin = xarr[xi]; xmax = xarr[xi + 1]; ymin = yarr[yi]; ymax = yarr[yi + 1]; zminmin = zarr[IDX2D(xi, yi, state)]; zminmax = zarr[IDX2D(xi, yi + 1, state)]; zmaxmin = zarr[IDX2D(xi + 1, yi, state)]; zmaxmax = zarr[IDX2D(xi + 1, yi + 1, state)]; /* Get the width and height of the grid cell */ dx = xmax - xmin; dy = ymax - ymin; t = (x - xmin)/dx; u = (y - ymin)/dy; dt = 1./dx; /* partial t / partial x */ du = 1./dy; /* partial u / partial y */ zxminmin = state->zx[IDX2D(xi, yi, state)]/dt; zxminmax = state->zx[IDX2D(xi, yi + 1, state)]/dt; zxmaxmin = state->zx[IDX2D(xi + 1, yi, state)]/dt; zxmaxmax = state->zx[IDX2D(xi + 1, yi + 1, state)]/dt; zyminmin = state->zy[IDX2D(xi, yi, state)]/du; zyminmax = state->zy[IDX2D(xi, yi + 1, state)]/du; zymaxmin = state->zy[IDX2D(xi + 1, yi, state)]/du; zymaxmax = state->zy[IDX2D(xi + 1, yi + 1, state)]/du; zxyminmin = state->zxy[IDX2D(xi, yi, state)]/(dt*du); zxyminmax = state->zxy[IDX2D(xi, yi + 1, state)]/(dt*du); zxymaxmin = state->zxy[IDX2D(xi + 1, yi, state)]/(dt*du); zxymaxmax = state->zxy[IDX2D(xi + 1, yi + 1, state)]/(dt*du); t0 = 1; t1 = t; t2 = t*t; t3 = t*t2; u0 = 1; u1 = u; u2 = u*u; u3 = u*u2; *z = 0; v = zminmin; *z += v*t0*u0; v = zyminmin; *z += v*t0*u1; v = -3*zminmin + 3*zminmax - 2*zyminmin - zyminmax; *z += v*t0*u2; v = 2*zminmin - 2*zminmax + zyminmin + zyminmax; *z += v*t0*u3; v = zxminmin; *z += v*t1*u0; v = zxyminmin; *z += v*t1*u1; v = -3*zxminmin + 3*zxminmax - 2*zxyminmin - zxyminmax; *z += v*t1*u2; v = 2*zxminmin - 2*zxminmax + zxyminmin + zxyminmax; *z += v*t1*u3; v = -3*zminmin + 3*zmaxmin - 2*zxminmin - zxmaxmin; *z += v*t2*u0; v = -3*zyminmin + 3*zymaxmin - 2*zxyminmin - zxymaxmin; *z += v*t2*u1; v = 9*zminmin - 9*zmaxmin + 9*zmaxmax - 9*zminmax + 6*zxminmin + 3*zxmaxmin - 3*zxmaxmax - 6*zxminmax + 6*zyminmin - 6*zymaxmin - 3*zymaxmax + 3*zyminmax + 4*zxyminmin + 2*zxymaxmin + zxymaxmax + 2*zxyminmax; *z += v*t2*u2; v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 4*zxminmin - 2*zxmaxmin + 2*zxmaxmax + 4*zxminmax - 3*zyminmin + 3*zymaxmin + 3*zymaxmax - 3*zyminmax - 2*zxyminmin - zxymaxmin - zxymaxmax - 2*zxyminmax; *z += v*t2*u3; v = 2*zminmin - 2*zmaxmin + zxminmin + zxmaxmin; *z += v*t3*u0; v = 2*zyminmin - 2*zymaxmin + zxyminmin + zxymaxmin; *z += v*t3*u1; v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 3*zxminmin - 3*zxmaxmin + 3*zxmaxmax + 3*zxminmax - 4*zyminmin + 4*zymaxmin + 2*zymaxmax - 2*zyminmax - 2*zxyminmin - 2*zxymaxmin - zxymaxmax - zxyminmax; *z += v*t3*u2; v = 4*zminmin - 4*zmaxmin + 4*zmaxmax - 4*zminmax + 2*zxminmin + 2*zxmaxmin - 2*zxmaxmax - 2*zxminmax + 2*zyminmin - 2*zymaxmin - 2*zymaxmax + 2*zyminmax + zxyminmin + zxymaxmin + zxymaxmax + zxyminmax; *z += v*t3*u3; return GSL_SUCCESS; } /* bicubic_eval() */ static int bicubic_deriv_x(const void * vstate, const double xarr[], const double yarr[], const double zarr[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_p) { bicubic_state_t *state = (bicubic_state_t *) vstate; double xmin, xmax, ymin, ymax; double zminmin, zminmax, zmaxmin, zmaxmax; double zxminmin, zxminmax, zxmaxmin, zxmaxmax; double zyminmin, zyminmax, zymaxmin, zymaxmax; double zxyminmin, zxyminmax, zxymaxmin, zxymaxmax; double dx, dy; /* size of the grid cell */ double dt, du; /* * t and u are the positions within the grid cell at which we are computing * the interpolation, in units of grid cell size */ double t, u; double t0, t1, t2, u0, u1, u2, u3; double v; size_t xi, yi; /* first compute the indices into the data arrays where we are interpolating */ if (xa != NULL) xi = gsl_interp_accel_find(xa, xarr, xsize, x); else xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); if (ya != NULL) yi = gsl_interp_accel_find(ya, yarr, ysize, y); else yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); /* find the minimum and maximum values on the grid cell in each dimension */ xmin = xarr[xi]; xmax = xarr[xi + 1]; ymin = yarr[yi]; ymax = yarr[yi + 1]; zminmin = zarr[IDX2D(xi, yi, state)]; zminmax = zarr[IDX2D(xi, yi + 1, state)]; zmaxmin = zarr[IDX2D(xi + 1, yi, state)]; zmaxmax = zarr[IDX2D(xi + 1, yi + 1, state)]; /* get the width and height of the grid cell */ dx = xmax - xmin; dy = ymax - ymin; t = (x - xmin)/dx; u = (y - ymin)/dy; dt = 1./dx; /* partial t / partial x */ du = 1./dy; /* partial u / partial y */ zxminmin = state->zx[IDX2D(xi, yi, state)]/dt; zxminmax = state->zx[IDX2D(xi, yi + 1, state)]/dt; zxmaxmin = state->zx[IDX2D(xi + 1, yi, state)]/dt; zxmaxmax = state->zx[IDX2D(xi + 1, yi + 1, state)]/dt; zyminmin = state->zy[IDX2D(xi, yi, state)]/du; zyminmax = state->zy[IDX2D(xi, yi + 1, state)]/du; zymaxmin = state->zy[IDX2D(xi + 1, yi, state)]/du; zymaxmax = state->zy[IDX2D(xi + 1, yi + 1, state)]/du; zxyminmin = state->zxy[IDX2D(xi, yi, state)]/(dt*du); zxyminmax = state->zxy[IDX2D(xi, yi + 1, state)]/(dt*du); zxymaxmin = state->zxy[IDX2D(xi + 1, yi, state)]/(dt*du); zxymaxmax = state->zxy[IDX2D(xi + 1, yi + 1, state)]/(dt*du); t0 = 1; t1 = t; t2 = t*t; u0 = 1; u1 = u; u2 = u*u; u3 = u*u2; *z_p = 0; v = zxminmin; *z_p += v*t0*u0; v = zxyminmin; *z_p += v*t0*u1; v = -3*zxminmin + 3*zxminmax - 2*zxyminmin - zxyminmax; *z_p += v*t0*u2; v = 2*zxminmin - 2*zxminmax + zxyminmin + zxyminmax; *z_p += v*t0*u3; v = -3*zminmin + 3*zmaxmin - 2*zxminmin - zxmaxmin; *z_p += 2*v*t1*u0; v = -3*zyminmin + 3*zymaxmin - 2*zxyminmin - zxymaxmin; *z_p += 2*v*t1*u1; v = 9*zminmin - 9*zmaxmin + 9*zmaxmax - 9*zminmax + 6*zxminmin + 3*zxmaxmin - 3*zxmaxmax - 6*zxminmax + 6*zyminmin - 6*zymaxmin - 3*zymaxmax + 3*zyminmax + 4*zxyminmin + 2*zxymaxmin + zxymaxmax + 2*zxyminmax; *z_p += 2*v*t1*u2; v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 4*zxminmin - 2*zxmaxmin + 2*zxmaxmax + 4*zxminmax - 3*zyminmin + 3*zymaxmin + 3*zymaxmax - 3*zyminmax - 2*zxyminmin - zxymaxmin - zxymaxmax - 2*zxyminmax; *z_p += 2*v*t1*u3; v = 2*zminmin - 2*zmaxmin + zxminmin + zxmaxmin; *z_p += 3*v*t2*u0; v = 2*zyminmin - 2*zymaxmin + zxyminmin + zxymaxmin; *z_p += 3*v*t2*u1; v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 3*zxminmin - 3*zxmaxmin + 3*zxmaxmax + 3*zxminmax - 4*zyminmin + 4*zymaxmin + 2*zymaxmax - 2*zyminmax - 2*zxyminmin - 2*zxymaxmin - zxymaxmax - zxyminmax; *z_p += 3*v*t2*u2; v = 4*zminmin - 4*zmaxmin + 4*zmaxmax - 4*zminmax + 2*zxminmin + 2*zxmaxmin - 2*zxmaxmax - 2*zxminmax + 2*zyminmin - 2*zymaxmin - 2*zymaxmax + 2*zyminmax + zxyminmin + zxymaxmin + zxymaxmax + zxyminmax; *z_p += 3*v*t2*u3; *z_p *= dt; return GSL_SUCCESS; } /* bicubic_deriv_x() */ static int bicubic_deriv_y(const void * vstate, const double xarr[], const double yarr[], const double zarr[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_p) { bicubic_state_t *state = (bicubic_state_t *) vstate; double xmin, xmax, ymin, ymax; double zminmin, zminmax, zmaxmin, zmaxmax; double zxminmin, zxminmax, zxmaxmin, zxmaxmax; double zyminmin, zyminmax, zymaxmin, zymaxmax; double zxyminmin, zxyminmax, zxymaxmin, zxymaxmax; /* dx and dy are the size of the grid cell */ double dx, dy; double dt, du; /* t and u are the positions within the grid cell at which we are * computing the interpolation, in units of grid cell size */ double t, u; double t0, t1, t2, t3, u0, u1, u2; double v; size_t xi, yi; /* first compute the indices into the data arrays where we are interpolating */ if (xa != NULL) xi = gsl_interp_accel_find(xa, xarr, xsize, x); else xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); if (ya != NULL) yi = gsl_interp_accel_find(ya, yarr, ysize, y); else yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); /* find the minimum and maximum values on the grid cell in each dimension */ xmin = xarr[xi]; xmax = xarr[xi + 1]; ymin = yarr[yi]; ymax = yarr[yi + 1]; zminmin = zarr[IDX2D(xi, yi, state)]; zminmax = zarr[IDX2D(xi, yi + 1, state)]; zmaxmin = zarr[IDX2D(xi + 1, yi, state)]; zmaxmax = zarr[IDX2D(xi + 1, yi + 1, state)]; /* get the width and height of the grid cell */ dx = xmax - xmin; dy = ymax - ymin; t = (x - xmin)/dx; u = (y - ymin)/dy; dt = 1./dx; /* partial t / partial x */ du = 1./dy; /* partial u / partial y */ zxminmin = state->zx[IDX2D(xi, yi, state)]/dt; zxminmax = state->zx[IDX2D(xi, yi + 1, state)]/dt; zxmaxmin = state->zx[IDX2D(xi + 1, yi, state)]/dt; zxmaxmax = state->zx[IDX2D(xi + 1, yi + 1, state)]/dt; zyminmin = state->zy[IDX2D(xi, yi, state)]/du; zyminmax = state->zy[IDX2D(xi, yi + 1, state)]/du; zymaxmin = state->zy[IDX2D(xi + 1, yi, state)]/du; zymaxmax = state->zy[IDX2D(xi + 1, yi + 1, state)]/du; zxyminmin = state->zxy[IDX2D(xi, yi, state)]/(dt*du); zxyminmax = state->zxy[IDX2D(xi, yi + 1, state)]/(dt*du); zxymaxmin = state->zxy[IDX2D(xi + 1, yi, state)]/(dt*du); zxymaxmax = state->zxy[IDX2D(xi + 1, yi + 1, state)]/(dt*du); t0 = 1; t1 = t; t2 = t*t; t3 = t*t2; u0 = 1; u1 = u; u2 = u*u; *z_p = 0; v = zyminmin; *z_p += v*t0*u0; v = -3*zminmin + 3*zminmax - 2*zyminmin - zyminmax; *z_p += 2*v*t0*u1; v = 2*zminmin-2*zminmax + zyminmin + zyminmax; *z_p += 3*v*t0*u2; v = zxyminmin; *z_p += v*t1*u0; v = -3*zxminmin + 3*zxminmax - 2*zxyminmin - zxyminmax; *z_p += 2*v*t1*u1; v = 2*zxminmin - 2*zxminmax + zxyminmin + zxyminmax; *z_p += 3*v*t1*u2; v = -3*zyminmin + 3*zymaxmin - 2*zxyminmin - zxymaxmin; *z_p += v*t2*u0; v = 9*zminmin - 9*zmaxmin + 9*zmaxmax - 9*zminmax + 6*zxminmin + 3*zxmaxmin - 3*zxmaxmax - 6*zxminmax + 6*zyminmin - 6*zymaxmin - 3*zymaxmax + 3*zyminmax + 4*zxyminmin + 2*zxymaxmin + zxymaxmax + 2*zxyminmax; *z_p += 2*v*t2*u1; v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 4*zxminmin - 2*zxmaxmin + 2*zxmaxmax + 4*zxminmax - 3*zyminmin + 3*zymaxmin + 3*zymaxmax - 3*zyminmax - 2*zxyminmin - zxymaxmin - zxymaxmax - 2*zxyminmax; *z_p += 3*v*t2*u2; v = 2*zyminmin - 2*zymaxmin + zxyminmin + zxymaxmin; *z_p += v*t3*u0; v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 3*zxminmin - 3*zxmaxmin + 3*zxmaxmax + 3*zxminmax - 4*zyminmin + 4*zymaxmin + 2*zymaxmax - 2*zyminmax - 2*zxyminmin - 2*zxymaxmin - zxymaxmax - zxyminmax; *z_p += 2*v*t3*u1; v = 4*zminmin - 4*zmaxmin + 4*zmaxmax - 4*zminmax + 2*zxminmin + 2*zxmaxmin - 2*zxmaxmax - 2*zxminmax + 2*zyminmin - 2*zymaxmin - 2*zymaxmax + 2*zyminmax + zxyminmin + zxymaxmin + zxymaxmax + zxyminmax; *z_p += 3*v*t3*u2; *z_p *= du; return GSL_SUCCESS; } static int bicubic_deriv_xx(const void * vstate, const double xarr[], const double yarr[], const double zarr[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_pp) { bicubic_state_t *state = (bicubic_state_t *) vstate; double xmin, xmax, ymin, ymax; double zminmin, zminmax, zmaxmin, zmaxmax; double zxminmin, zxminmax, zxmaxmin, zxmaxmax; double zyminmin, zyminmax, zymaxmin, zymaxmax; double zxyminmin, zxyminmax, zxymaxmin, zxymaxmax; double dx, dy; /* size of the grid cell */ double dt, du; /* * t and u are the positions within the grid cell at which we are computing * the interpolation, in units of grid cell size */ double t, u; double t0, t1, u0, u1, u2, u3; double v; size_t xi, yi; /* first compute the indices into the data arrays where we are interpolating */ if (xa != NULL) xi = gsl_interp_accel_find(xa, xarr, xsize, x); else xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); if (ya != NULL) yi = gsl_interp_accel_find(ya, yarr, ysize, y); else yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); /* find the minimum and maximum values on the grid cell in each dimension */ xmin = xarr[xi]; xmax = xarr[xi + 1]; ymin = yarr[yi]; ymax = yarr[yi + 1]; zminmin = zarr[IDX2D(xi, yi, state)]; zminmax = zarr[IDX2D(xi, yi + 1, state)]; zmaxmin = zarr[IDX2D(xi + 1, yi, state)]; zmaxmax = zarr[IDX2D(xi + 1, yi + 1, state)]; /* get the width and height of the grid cell */ dx = xmax - xmin; dy = ymax - ymin; t = (x - xmin)/dx; u = (y - ymin)/dy; dt = 1./dx; /* partial t / partial x */ du = 1./dy; /* partial u / partial y */ zxminmin = state->zx[IDX2D(xi, yi, state)]/dt; zxminmax = state->zx[IDX2D(xi, yi + 1, state)]/dt; zxmaxmin = state->zx[IDX2D(xi + 1, yi, state)]/dt; zxmaxmax = state->zx[IDX2D(xi + 1, yi + 1, state)]/dt; zyminmin = state->zy[IDX2D(xi, yi, state)]/du; zyminmax = state->zy[IDX2D(xi, yi + 1, state)]/du; zymaxmin = state->zy[IDX2D(xi + 1, yi, state)]/du; zymaxmax = state->zy[IDX2D(xi + 1, yi + 1, state)]/du; zxyminmin = state->zxy[IDX2D(xi, yi, state)]/(dt*du); zxyminmax = state->zxy[IDX2D(xi, yi + 1, state)]/(dt*du); zxymaxmin = state->zxy[IDX2D(xi + 1, yi, state)]/(dt*du); zxymaxmax = state->zxy[IDX2D(xi + 1, yi + 1, state)]/(dt*du); t0 = 1; t1 = t; u0 = 1; u1 = u; u2 = u*u; u3 = u*u2; *z_pp = 0; v = -3*zminmin + 3*zmaxmin - 2*zxminmin - zxmaxmin; *z_pp += 2*v*t0*u0; v = -3*zyminmin + 3*zymaxmin - 2*zxyminmin - zxymaxmin; *z_pp += 2*v*t0*u1; v = 9*zminmin - 9*zmaxmin + 9*zmaxmax - 9*zminmax + 6*zxminmin + 3*zxmaxmin - 3*zxmaxmax - 6*zxminmax + 6*zyminmin - 6*zymaxmin - 3*zymaxmax + 3*zyminmax + 4*zxyminmin + 2*zxymaxmin + zxymaxmax + 2*zxyminmax; *z_pp += 2*v*t0*u2; v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 4*zxminmin - 2*zxmaxmin + 2*zxmaxmax + 4*zxminmax - 3*zyminmin + 3*zymaxmin + 3*zymaxmax - 3*zyminmax - 2*zxyminmin - zxymaxmin - zxymaxmax - 2*zxyminmax; *z_pp += 2*v*t0*u3; v = 2*zminmin - 2*zmaxmin + zxminmin + zxmaxmin; *z_pp += 6*v*t1*u0; v = 2*zyminmin - 2*zymaxmin + zxyminmin + zxymaxmin; *z_pp += 6*v*t1*u1; v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 3*zxminmin - 3*zxmaxmin + 3*zxmaxmax + 3*zxminmax - 4*zyminmin + 4*zymaxmin + 2*zymaxmax - 2*zyminmax - 2*zxyminmin - 2*zxymaxmin - zxymaxmax - zxyminmax; *z_pp += 6*v*t1*u2; v = 4*zminmin - 4*zmaxmin + 4*zmaxmax - 4*zminmax + 2*zxminmin + 2*zxmaxmin - 2*zxmaxmax - 2*zxminmax + 2*zyminmin - 2*zymaxmin - 2*zymaxmax + 2*zyminmax + zxyminmin + zxymaxmin + zxymaxmax + zxyminmax; *z_pp += 6*v*t1*u3; *z_pp *= dt*dt; return GSL_SUCCESS; } static int bicubic_deriv_xy(const void * vstate, const double xarr[], const double yarr[], const double zarr[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_pp) { bicubic_state_t *state = (bicubic_state_t *) vstate; double xmin, xmax, ymin, ymax; double zminmin, zminmax, zmaxmin, zmaxmax; double zxminmin, zxminmax, zxmaxmin, zxmaxmax; double zyminmin, zyminmax, zymaxmin, zymaxmax; double zxyminmin, zxyminmax, zxymaxmin, zxymaxmax; double dx, dy; /* size of the grid cell */ double dt, du; /* * t and u are the positions within the grid cell at which we are computing * the interpolation, in units of grid cell size */ double t, u; double t0, t1, t2, u0, u1, u2; double v; size_t xi, yi; /* first compute the indices into the data arrays where we are interpolating */ if (xa != NULL) xi = gsl_interp_accel_find(xa, xarr, xsize, x); else xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); if (ya != NULL) yi = gsl_interp_accel_find(ya, yarr, ysize, y); else yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); /* find the minimum and maximum values on the grid cell in each dimension */ xmin = xarr[xi]; xmax = xarr[xi + 1]; ymin = yarr[yi]; ymax = yarr[yi + 1]; zminmin = zarr[IDX2D(xi, yi, state)]; zminmax = zarr[IDX2D(xi, yi + 1, state)]; zmaxmin = zarr[IDX2D(xi + 1, yi, state)]; zmaxmax = zarr[IDX2D(xi + 1, yi + 1, state)]; /* get the width and height of the grid cell */ dx = xmax - xmin; dy = ymax - ymin; t = (x - xmin)/dx; u = (y - ymin)/dy; dt = 1./dx; /* partial t / partial x */ du = 1./dy; /* partial u / partial y */ zxminmin = state->zx[IDX2D(xi, yi, state)]/dt; zxminmax = state->zx[IDX2D(xi, yi + 1, state)]/dt; zxmaxmin = state->zx[IDX2D(xi + 1, yi, state)]/dt; zxmaxmax = state->zx[IDX2D(xi + 1, yi + 1, state)]/dt; zyminmin = state->zy[IDX2D(xi, yi, state)]/du; zyminmax = state->zy[IDX2D(xi, yi + 1, state)]/du; zymaxmin = state->zy[IDX2D(xi + 1, yi, state)]/du; zymaxmax = state->zy[IDX2D(xi + 1, yi + 1, state)]/du; zxyminmin = state->zxy[IDX2D(xi, yi, state)]/(dt*du); zxyminmax = state->zxy[IDX2D(xi, yi + 1, state)]/(dt*du); zxymaxmin = state->zxy[IDX2D(xi + 1, yi, state)]/(dt*du); zxymaxmax = state->zxy[IDX2D(xi + 1, yi + 1, state)]/(dt*du); t0 = 1; t1 = t; t2 = t*t; u0 = 1; u1 = u; u2 = u*u; *z_pp = 0; v = zxyminmin; *z_pp += v*t0*u0; v = -3*zxminmin + 3*zxminmax - 2*zxyminmin - zxyminmax; *z_pp += 2*v*t0*u1; v = 2*zxminmin - 2*zxminmax + zxyminmin + zxyminmax; *z_pp += 3*v*t0*u2; v = -3*zyminmin + 3*zymaxmin - 2*zxyminmin - zxymaxmin; *z_pp += 2*v*t1*u0; v = 9*zminmin - 9*zmaxmin + 9*zmaxmax - 9*zminmax + 6*zxminmin + 3*zxmaxmin - 3*zxmaxmax - 6*zxminmax + 6*zyminmin - 6*zymaxmin - 3*zymaxmax + 3*zyminmax + 4*zxyminmin + 2*zxymaxmin + zxymaxmax + 2*zxyminmax; *z_pp += 4*v*t1*u1; v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 4*zxminmin - 2*zxmaxmin + 2*zxmaxmax + 4*zxminmax - 3*zyminmin + 3*zymaxmin + 3*zymaxmax - 3*zyminmax - 2*zxyminmin - zxymaxmin - zxymaxmax - 2*zxyminmax; *z_pp += 6*v*t1*u2; v = 2*zyminmin - 2*zymaxmin + zxyminmin + zxymaxmin; *z_pp += 3*v*t2*u0; v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 3*zxminmin - 3*zxmaxmin + 3*zxmaxmax + 3*zxminmax - 4*zyminmin + 4*zymaxmin + 2*zymaxmax - 2*zyminmax - 2*zxyminmin - 2*zxymaxmin - zxymaxmax - zxyminmax; *z_pp += 6*v*t2*u1; v = 4*zminmin - 4*zmaxmin + 4*zmaxmax - 4*zminmax + 2*zxminmin + 2*zxmaxmin - 2*zxmaxmax - 2*zxminmax + 2*zyminmin - 2*zymaxmin - 2*zymaxmax + 2*zyminmax + zxyminmin + zxymaxmin + zxymaxmax + zxyminmax; *z_pp += 9*v*t2*u2; *z_pp *= dt*du; return GSL_SUCCESS; } static int bicubic_deriv_yy(const void * vstate, const double xarr[], const double yarr[], const double zarr[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel * xa, gsl_interp_accel * ya, double * z_pp) { bicubic_state_t *state = (bicubic_state_t *) vstate; double xmin, xmax, ymin, ymax; double zminmin, zminmax, zmaxmin, zmaxmax; double zxminmin, zxminmax, zxmaxmin, zxmaxmax; double zyminmin, zyminmax, zymaxmin, zymaxmax; double zxyminmin, zxyminmax, zxymaxmin, zxymaxmax; double dx, dy; /* size of the grid cell */ double dt, du; /* * t and u are the positions within the grid cell at which we are computing * the interpolation, in units of grid cell size */ double t, u; double t0, t1, t2, t3, u0, u1; double v; size_t xi, yi; /* first compute the indices into the data arrays where we are interpolating */ if (xa != NULL) xi = gsl_interp_accel_find(xa, xarr, xsize, x); else xi = gsl_interp_bsearch(xarr, x, 0, xsize - 1); if (ya != NULL) yi = gsl_interp_accel_find(ya, yarr, ysize, y); else yi = gsl_interp_bsearch(yarr, y, 0, ysize - 1); /* find the minimum and maximum values on the grid cell in each dimension */ xmin = xarr[xi]; xmax = xarr[xi + 1]; ymin = yarr[yi]; ymax = yarr[yi + 1]; zminmin = zarr[IDX2D(xi, yi, state)]; zminmax = zarr[IDX2D(xi, yi + 1, state)]; zmaxmin = zarr[IDX2D(xi + 1, yi, state)]; zmaxmax = zarr[IDX2D(xi + 1, yi + 1, state)]; /* get the width and height of the grid cell */ dx = xmax - xmin; dy = ymax - ymin; t = (x - xmin)/dx; u = (y - ymin)/dy; dt = 1./dx; /* partial t / partial x */ du = 1./dy; /* partial u / partial y */ zxminmin = state->zx[IDX2D(xi, yi, state)]/dt; zxminmax = state->zx[IDX2D(xi, yi + 1, state)]/dt; zxmaxmin = state->zx[IDX2D(xi + 1, yi, state)]/dt; zxmaxmax = state->zx[IDX2D(xi + 1, yi + 1, state)]/dt; zyminmin = state->zy[IDX2D(xi, yi, state)]/du; zyminmax = state->zy[IDX2D(xi, yi + 1, state)]/du; zymaxmin = state->zy[IDX2D(xi + 1, yi, state)]/du; zymaxmax = state->zy[IDX2D(xi + 1, yi + 1, state)]/du; zxyminmin = state->zxy[IDX2D(xi, yi, state)]/(dt*du); zxyminmax = state->zxy[IDX2D(xi, yi + 1, state)]/(dt*du); zxymaxmin = state->zxy[IDX2D(xi + 1, yi, state)]/(dt*du); zxymaxmax = state->zxy[IDX2D(xi + 1, yi + 1, state)]/(dt*du); t0 = 1; t1 = t; t2 = t*t; t3 = t*t2; u0 = 1; u1 = u; *z_pp = 0; v = -3*zminmin + 3*zminmax - 2*zyminmin - zyminmax; *z_pp += 2*v*t0*u0; v = 2*zminmin-2*zminmax + zyminmin + zyminmax; *z_pp += 6*v*t0*u1; v = -3*zxminmin + 3*zxminmax - 2*zxyminmin - zxyminmax; *z_pp += 2*v*t1*u0; v = 2*zxminmin - 2*zxminmax + zxyminmin + zxyminmax; *z_pp += 6*v*t1*u1; v = 9*zminmin - 9*zmaxmin + 9*zmaxmax - 9*zminmax + 6*zxminmin + 3*zxmaxmin - 3*zxmaxmax - 6*zxminmax + 6*zyminmin - 6*zymaxmin - 3*zymaxmax + 3*zyminmax + 4*zxyminmin + 2*zxymaxmin + zxymaxmax + 2*zxyminmax; *z_pp += 2*v*t2*u0; v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 4*zxminmin - 2*zxmaxmin + 2*zxmaxmax + 4*zxminmax - 3*zyminmin + 3*zymaxmin + 3*zymaxmax - 3*zyminmax - 2*zxyminmin - zxymaxmin - zxymaxmax - 2*zxyminmax; *z_pp += 6*v*t2*u1; v = -6*zminmin + 6*zmaxmin - 6*zmaxmax + 6*zminmax - 3*zxminmin - 3*zxmaxmin + 3*zxmaxmax + 3*zxminmax - 4*zyminmin + 4*zymaxmin + 2*zymaxmax - 2*zyminmax - 2*zxyminmin - 2*zxymaxmin - zxymaxmax - zxyminmax; *z_pp += 2*v*t3*u0; v = 4*zminmin - 4*zmaxmin + 4*zmaxmax - 4*zminmax + 2*zxminmin + 2*zxmaxmin - 2*zxmaxmax - 2*zxminmax + 2*zyminmin - 2*zymaxmin - 2*zymaxmax + 2*zyminmax + zxyminmin + zxymaxmin + zxymaxmax + zxyminmax; *z_pp += 6*v*t3*u1; *z_pp *= du*du; return GSL_SUCCESS; } static const gsl_interp2d_type bicubic_type = { "bicubic", 4, &bicubic_alloc, &bicubic_init, &bicubic_eval, &bicubic_deriv_x, &bicubic_deriv_y, &bicubic_deriv_xx, &bicubic_deriv_xy, &bicubic_deriv_yy, &bicubic_free }; const gsl_interp2d_type * gsl_interp2d_bicubic = &bicubic_type; #undef IDX2D gsl/interpolation/steffen.c0000644000175000017500000002421713536674414014425 0ustar eddedd/* interpolation/steffen.c * * Copyright (C) 2014 Jean-François Caron * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: J.-F. Caron * * This interpolation method is taken from * M.Steffen, "A simple method for monotonic interpolation in one dimension", * Astron. Astrophys. 239, 443-450 (1990). * * This interpolation method guarantees monotonic interpolation functions between * the given data points. A consequence of this is that extremal values can only * occur at the data points. The interpolating function and its first derivative * are guaranteed to be continuous, but the second derivative is not. * * The implementation is modelled on the existing Akima interpolation method * previously included in GSL by Gerard Jungman. */ #include #include #include #include #include #include "integ_eval.h" #include typedef struct { double * a; /* eqs 2-5 of paper */ double * b; double * c; double * d; double * y_prime; /* eq 11 of paper */ } steffen_state_t; static void steffen_free (void * vstate); static double steffen_copysign(const double x, const double y); static void * steffen_alloc (size_t size) { steffen_state_t *state; state = (steffen_state_t *) calloc (1, sizeof (steffen_state_t)); if (state == NULL) { GSL_ERROR_NULL("failed to allocate space for state", GSL_ENOMEM); } state->a = (double *) malloc (size * sizeof (double)); if (state->a == NULL) { steffen_free(state); GSL_ERROR_NULL("failed to allocate space for a", GSL_ENOMEM); } state->b = (double *) malloc (size * sizeof (double)); if (state->b == NULL) { steffen_free(state); GSL_ERROR_NULL("failed to allocate space for b", GSL_ENOMEM); } state->c = (double *) malloc (size * sizeof (double)); if (state->c == NULL) { steffen_free(state); GSL_ERROR_NULL("failed to allocate space for c", GSL_ENOMEM); } state->d = (double *) malloc (size * sizeof (double)); if (state->d == NULL) { steffen_free(state); GSL_ERROR_NULL("failed to allocate space for d", GSL_ENOMEM); } state->y_prime = (double *) malloc (size * sizeof (double)); if (state->y_prime == NULL) { steffen_free(state); GSL_ERROR_NULL("failed to allocate space for y_prime", GSL_ENOMEM); } return state; } static int steffen_init (void * vstate, const double x_array[], const double y_array[], size_t size) { steffen_state_t *state = (steffen_state_t *) vstate; size_t i; double *a = state->a; double *b = state->b; double *c = state->c; double *d = state->d; double *y_prime = state->y_prime; /* * first assign the interval and slopes for the left boundary. * We use the "simplest possibility" method described in the paper * in section 2.2 */ double h0 = (x_array[1] - x_array[0]); double s0 = (y_array[1] - y_array[0]) / h0; y_prime[0] = s0; /* Now we calculate all the necessary s, h, p, and y' variables from 1 to N-2 (0 to size - 2 inclusive) */ for (i = 1; i < (size - 1); i++) { double pi; /* equation 6 in the paper */ double hi = (x_array[i+1] - x_array[i]); double him1 = (x_array[i] - x_array[i - 1]); /* equation 7 in the paper */ double si = (y_array[i+1] - y_array[i]) / hi; double sim1 = (y_array[i] - y_array[i - 1]) / him1; /* equation 8 in the paper */ pi = (sim1*hi + si*him1) / (him1 + hi); /* This is a C equivalent of the FORTRAN statement below eqn 11 */ y_prime[i] = (steffen_copysign(1.0,sim1) + steffen_copysign(1.0,si)) * GSL_MIN(fabs(sim1), GSL_MIN(fabs(si), 0.5*fabs(pi))); } /* * we also need y' for the rightmost boundary; we use the * "simplest possibility" method described in the paper in * section 2.2 * * y' = s_{n-1} */ y_prime[size-1] = (y_array[size - 1] - y_array[size - 2]) / (x_array[size - 1] - x_array[size - 2]); /* Now we can calculate all the coefficients for the whole range. */ for (i = 0; i < (size - 1); i++) { double hi = (x_array[i+1] - x_array[i]); double si = (y_array[i+1] - y_array[i]) / hi; /* These are from equations 2-5 in the paper. */ a[i] = (y_prime[i] + y_prime[i+1] - 2*si) / hi / hi; b[i] = (3*si - 2*y_prime[i] - y_prime[i+1]) / hi; c[i] = y_prime[i]; d[i] = y_array[i]; } return GSL_SUCCESS; } static void steffen_free (void * vstate) { steffen_state_t *state = (steffen_state_t *) vstate; RETURN_IF_NULL(state); if (state->a) free (state->a); if (state->b) free (state->b); if (state->c) free (state->c); if (state->d) free (state->d); if (state->y_prime) free (state->y_prime); free (state); } static int steffen_eval (const void * vstate, const double x_array[], const double y_array[], size_t size, double x, gsl_interp_accel * a, double *y) { const steffen_state_t *state = (const steffen_state_t *) vstate; size_t index; if (a != 0) { index = gsl_interp_accel_find (a, x_array, size, x); } else { index = gsl_interp_bsearch (x_array, x, 0, size - 1); } /* evaluate */ { const double x_lo = x_array[index]; const double delx = x - x_lo; const double a = state->a[index]; const double b = state->b[index]; const double c = state->c[index]; const double d = state->d[index]; /* Use Horner's scheme for efficient evaluation of polynomials. */ /* *y = a*delx*delx*delx + b*delx*delx + c*delx + d; */ *y = d + delx*(c + delx*(b + delx*a)); return GSL_SUCCESS; } } static int steffen_eval_deriv (const void * vstate, const double x_array[], const double y_array[], size_t size, double x, gsl_interp_accel * a, double *dydx) { const steffen_state_t *state = (const steffen_state_t *) vstate; size_t index; /* DISCARD_POINTER(y_array); /\* prevent warning about unused parameter *\/ */ if (a != 0) { index = gsl_interp_accel_find (a, x_array, size, x); } else { index = gsl_interp_bsearch (x_array, x, 0, size - 1); } /* evaluate */ { double x_lo = x_array[index]; double delx = x - x_lo; double a = state->a[index]; double b = state->b[index]; double c = state->c[index]; /*double d = state->d[index];*/ /* *dydx = 3*a*delx*delx*delx + 2*b*delx + c; */ *dydx = c + delx*(2*b + delx*3*a); return GSL_SUCCESS; } } static int steffen_eval_deriv2 (const void * vstate, const double x_array[], const double y_array[], size_t size, double x, gsl_interp_accel * a, double *y_pp) { const steffen_state_t *state = (const steffen_state_t *) vstate; size_t index; /* DISCARD_POINTER(y_array); /\* prevent warning about unused parameter *\/ */ if (a != 0) { index = gsl_interp_accel_find (a, x_array, size, x); } else { index = gsl_interp_bsearch (x_array, x, 0, size - 1); } /* evaluate */ { const double x_lo = x_array[index]; const double delx = x - x_lo; const double a = state->a[index]; const double b = state->b[index]; *y_pp = 6*a*delx + 2*b; return GSL_SUCCESS; } } static int steffen_eval_integ (const void * vstate, const double x_array[], const double y_array[], size_t size, gsl_interp_accel * acc, double a, double b, double * result) { /* a and b are the boundaries of the integration. */ const steffen_state_t *state = (const steffen_state_t *) vstate; size_t i, index_a, index_b; /* Find the data points in the x_array that are nearest to the desired */ /* a and b integration boundaries. */ if (acc != 0) { index_a = gsl_interp_accel_find (acc, x_array, size, a); index_b = gsl_interp_accel_find (acc, x_array, size, b); } else { index_a = gsl_interp_bsearch (x_array, a, 0, size - 1); index_b = gsl_interp_bsearch (x_array, b, 0, size - 1); } *result = 0.0; /* Iterate over all the segments between data points and sum the */ /* contributions into result. */ for(i=index_a; i<=index_b; i++) { const double x_hi = x_array[i + 1]; const double x_lo = x_array[i]; const double dx = x_hi - x_lo; if(dx != 0.0) { /* * check if we are at a boundary point, so take the * a and b parameters instead of the data points. */ double x1 = (i == index_a) ? a-x_lo : 0.0; double x2 = (i == index_b) ? b-x_lo : x_hi-x_lo; *result += (1.0/4.0)*state->a[i]*(x2*x2*x2*x2 - x1*x1*x1*x1) +(1.0/3.0)*state->b[i]*(x2*x2*x2 - x1*x1*x1) +(1.0/2.0)*state->c[i]*(x2*x2 - x1*x1) +state->d[i]*(x2-x1); } else /* if the interval was zero, i.e. consecutive x values in data. */ { *result = 0.0; return GSL_EINVAL; } } return GSL_SUCCESS; } static double steffen_copysign(const double x, const double y) { if ((x < 0 && y > 0) || (x > 0 && y < 0)) return -x; return x; } static const gsl_interp_type steffen_type = { "steffen", 3, &steffen_alloc, &steffen_init, &steffen_eval, &steffen_eval_deriv, &steffen_eval_deriv2, &steffen_eval_integ, &steffen_free }; const gsl_interp_type * gsl_interp_steffen = &steffen_type; gsl/fit/0000755000175000017500000000000014057135461010505 5ustar eddeddgsl/fit/gsl_fit.h0000644000175000017500000000531413536674414012317 0ustar eddedd/* fit/gsl_fit.h * * Copyright (C) 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_FIT_H__ #define __GSL_FIT_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_fit_linear (const double * x, const size_t xstride, const double * y, const size_t ystride, const size_t n, double * c0, double * c1, double * cov00, double * cov01, double * cov11, double * sumsq); int gsl_fit_wlinear (const double * x, const size_t xstride, const double * w, const size_t wstride, const double * y, const size_t ystride, const size_t n, double * c0, double * c1, double * cov00, double * cov01, double * cov11, double * chisq); int gsl_fit_linear_est (const double x, const double c0, const double c1, const double cov00, const double cov01, const double cov11, double *y, double *y_err); int gsl_fit_mul (const double * x, const size_t xstride, const double * y, const size_t ystride, const size_t n, double * c1, double * cov11, double * sumsq); int gsl_fit_wmul (const double * x, const size_t xstride, const double * w, const size_t wstride, const double * y, const size_t ystride, const size_t n, double * c1, double * cov11, double * sumsq); int gsl_fit_mul_est (const double x, const double c1, const double cov11, double *y, double *y_err); __END_DECLS #endif /* __GSL_FIT_H__ */ gsl/fit/Makefile.in0000664000175000017500000010516214057135461012561 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = fit ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslfit_la_LIBADD = am_libgslfit_la_OBJECTS = linear.lo libgslfit_la_OBJECTS = $(am_libgslfit_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslfit.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la \ ../sys/libgslsys.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/linear.Plo ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslfit_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslfit_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslfit.la pkginclude_HEADERS = gsl_fit.h AM_CPPFLAGS = -I$(top_srcdir) libgslfit_la_SOURCES = linear.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslfit.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu fit/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu fit/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslfit.la: $(libgslfit_la_OBJECTS) $(libgslfit_la_DEPENDENCIES) $(EXTRA_libgslfit_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslfit_la_OBJECTS) $(libgslfit_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linear.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/linear.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/linear.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile #demo_SOURCES = demo.c #demo_LDADD = libgslfit.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/fit/ChangeLog0000644000175000017500000000104513536674414012266 0ustar eddedd2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2007-05-23 Brian Gough * gsl_fit.h linear.c (gsl_fit_mul_est, gsl_fit_linear_est): made parameters in prototypes for _est functions consistent, c00->cov00, c01->cov01, c11 -> cov11 2004-12-23 Brian Gough * gsl_fit.h: remove unused declarations Tue Sep 19 19:09:46 2000 Brian Gough * fit/test.c (main): removed unused variables gsl/fit/Makefile.am0000644000175000017500000000101013536674414012540 0ustar eddeddnoinst_LTLIBRARIES = libgslfit.la pkginclude_HEADERS = gsl_fit.h AM_CPPFLAGS = -I$(top_srcdir) libgslfit_la_SOURCES = linear.c check_PROGRAMS = test #demo TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslfit.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la #demo_SOURCES = demo.c #demo_LDADD = libgslfit.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la gsl/fit/linear.c0000644000175000017500000002034113536674414012132 0ustar eddedd/* fit/linear.c * * Copyright (C) 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* Fit the data (x_i, y_i) to the linear relationship Y = c0 + c1 x returning, c0, c1 -- coefficients cov00, cov01, cov11 -- variance-covariance matrix of c0 and c1, sumsq -- sum of squares of residuals This fit can be used in the case where the errors for the data are uknown, but assumed equal for all points. The resulting variance-covariance matrix estimates the error in the coefficients from the observed variance of the points around the best fit line. */ int gsl_fit_linear (const double *x, const size_t xstride, const double *y, const size_t ystride, const size_t n, double *c0, double *c1, double *cov_00, double *cov_01, double *cov_11, double *sumsq) { double m_x = 0, m_y = 0, m_dx2 = 0, m_dxdy = 0; size_t i; for (i = 0; i < n; i++) { m_x += (x[i * xstride] - m_x) / (i + 1.0); m_y += (y[i * ystride] - m_y) / (i + 1.0); } for (i = 0; i < n; i++) { const double dx = x[i * xstride] - m_x; const double dy = y[i * ystride] - m_y; m_dx2 += (dx * dx - m_dx2) / (i + 1.0); m_dxdy += (dx * dy - m_dxdy) / (i + 1.0); } /* In terms of y = a + b x */ { double s2 = 0, d2 = 0; double b = m_dxdy / m_dx2; double a = m_y - m_x * b; *c0 = a; *c1 = b; /* Compute chi^2 = \sum (y_i - (a + b * x_i))^2 */ for (i = 0; i < n; i++) { const double dx = x[i * xstride] - m_x; const double dy = y[i * ystride] - m_y; const double d = dy - b * dx; d2 += d * d; } s2 = d2 / (n - 2.0); /* chisq per degree of freedom */ *cov_00 = s2 * (1.0 / n) * (1 + m_x * m_x / m_dx2); *cov_11 = s2 * 1.0 / (n * m_dx2); *cov_01 = s2 * (-m_x) / (n * m_dx2); *sumsq = d2; } return GSL_SUCCESS; } /* Fit the weighted data (x_i, w_i, y_i) to the linear relationship Y = c0 + c1 x returning, c0, c1 -- coefficients s0, s1 -- the standard deviations of c0 and c1, r -- the correlation coefficient between c0 and c1, chisq -- weighted sum of squares of residuals */ int gsl_fit_wlinear (const double *x, const size_t xstride, const double *w, const size_t wstride, const double *y, const size_t ystride, const size_t n, double *c0, double *c1, double *cov_00, double *cov_01, double *cov_11, double *chisq) { /* compute the weighted means and weighted deviations from the means */ /* wm denotes a "weighted mean", wm(f) = (sum_i w_i f_i) / (sum_i w_i) */ double W = 0, wm_x = 0, wm_y = 0, wm_dx2 = 0, wm_dxdy = 0; size_t i; for (i = 0; i < n; i++) { const double wi = w[i * wstride]; if (wi > 0) { W += wi; wm_x += (x[i * xstride] - wm_x) * (wi / W); wm_y += (y[i * ystride] - wm_y) * (wi / W); } } W = 0; /* reset the total weight */ for (i = 0; i < n; i++) { const double wi = w[i * wstride]; if (wi > 0) { const double dx = x[i * xstride] - wm_x; const double dy = y[i * ystride] - wm_y; W += wi; wm_dx2 += (dx * dx - wm_dx2) * (wi / W); wm_dxdy += (dx * dy - wm_dxdy) * (wi / W); } } /* In terms of y = a + b x */ { double d2 = 0; double b = wm_dxdy / wm_dx2; double a = wm_y - wm_x * b; *c0 = a; *c1 = b; *cov_00 = (1 / W) * (1 + wm_x * wm_x / wm_dx2); *cov_11 = 1 / (W * wm_dx2); *cov_01 = -wm_x / (W * wm_dx2); /* Compute chi^2 = \sum w_i (y_i - (a + b * x_i))^2 */ for (i = 0; i < n; i++) { const double wi = w[i * wstride]; if (wi > 0) { const double dx = x[i * xstride] - wm_x; const double dy = y[i * ystride] - wm_y; const double d = dy - b * dx; d2 += wi * d * d; } } *chisq = d2; } return GSL_SUCCESS; } int gsl_fit_linear_est (const double x, const double c0, const double c1, const double cov00, const double cov01, const double cov11, double *y, double *y_err) { *y = c0 + c1 * x; *y_err = sqrt (cov00 + x * (2 * cov01 + cov11 * x)); return GSL_SUCCESS; } int gsl_fit_mul (const double *x, const size_t xstride, const double *y, const size_t ystride, const size_t n, double *c1, double *cov_11, double *sumsq) { double m_x = 0, m_y = 0, m_dx2 = 0, m_dxdy = 0; size_t i; for (i = 0; i < n; i++) { m_x += (x[i * xstride] - m_x) / (i + 1.0); m_y += (y[i * ystride] - m_y) / (i + 1.0); } for (i = 0; i < n; i++) { const double dx = x[i * xstride] - m_x; const double dy = y[i * ystride] - m_y; m_dx2 += (dx * dx - m_dx2) / (i + 1.0); m_dxdy += (dx * dy - m_dxdy) / (i + 1.0); } /* In terms of y = b x */ { double s2 = 0, d2 = 0; double b = (m_x * m_y + m_dxdy) / (m_x * m_x + m_dx2); *c1 = b; /* Compute chi^2 = \sum (y_i - b * x_i)^2 */ for (i = 0; i < n; i++) { const double dx = x[i * xstride] - m_x; const double dy = y[i * ystride] - m_y; const double d = (m_y - b * m_x) + dy - b * dx; d2 += d * d; } s2 = d2 / (n - 1.0); /* chisq per degree of freedom */ *cov_11 = s2 * 1.0 / (n * (m_x * m_x + m_dx2)); *sumsq = d2; } return GSL_SUCCESS; } int gsl_fit_wmul (const double *x, const size_t xstride, const double *w, const size_t wstride, const double *y, const size_t ystride, const size_t n, double *c1, double *cov_11, double *chisq) { /* compute the weighted means and weighted deviations from the means */ /* wm denotes a "weighted mean", wm(f) = (sum_i w_i f_i) / (sum_i w_i) */ double W = 0, wm_x = 0, wm_y = 0, wm_dx2 = 0, wm_dxdy = 0; size_t i; for (i = 0; i < n; i++) { const double wi = w[i * wstride]; if (wi > 0) { W += wi; wm_x += (x[i * xstride] - wm_x) * (wi / W); wm_y += (y[i * ystride] - wm_y) * (wi / W); } } W = 0; /* reset the total weight */ for (i = 0; i < n; i++) { const double wi = w[i * wstride]; if (wi > 0) { const double dx = x[i * xstride] - wm_x; const double dy = y[i * ystride] - wm_y; W += wi; wm_dx2 += (dx * dx - wm_dx2) * (wi / W); wm_dxdy += (dx * dy - wm_dxdy) * (wi / W); } } /* In terms of y = b x */ { double d2 = 0; double b = (wm_x * wm_y + wm_dxdy) / (wm_x * wm_x + wm_dx2); *c1 = b; *cov_11 = 1 / (W * (wm_x * wm_x + wm_dx2)); /* Compute chi^2 = \sum w_i (y_i - b * x_i)^2 */ for (i = 0; i < n; i++) { const double wi = w[i * wstride]; if (wi > 0) { const double dx = x[i * xstride] - wm_x; const double dy = y[i * ystride] - wm_y; const double d = (wm_y - b * wm_x) + (dy - b * dx); d2 += wi * d * d; } } *chisq = d2; } return GSL_SUCCESS; } int gsl_fit_mul_est (const double x, const double c1, const double cov11, double *y, double *y_err) { *y = c1 * x; *y_err = sqrt (cov11) * fabs (x); return GSL_SUCCESS; } gsl/fit/test.c0000644000175000017500000001405013536674414011637 0ustar eddedd/* These tests are based on the NIST Statistical Reference Datasets See http://www.nist.gov/itl/div898/strd/index.html for more information. */ #include #include #include #include #include #include size_t norris_n = 36; double norris_x[] = { 0.2, 337.4, 118.2, 884.6, 10.1, 226.5, 666.3, 996.3, 448.6, 777.0, 558.2, 0.4, 0.6, 775.5, 666.9, 338.0, 447.5, 11.6, 556.0, 228.1, 995.8, 887.6, 120.2, 0.3, 0.3, 556.8, 339.1, 887.2, 999.0, 779.0, 11.1, 118.3, 229.2, 669.1, 448.9, 0.5 } ; double norris_y[] = { 0.1, 338.8, 118.1, 888.0, 9.2, 228.1, 668.5, 998.5, 449.1, 778.9, 559.2, 0.3, 0.1, 778.1, 668.8, 339.3, 448.9, 10.8, 557.7, 228.3, 998.0, 888.8, 119.6, 0.3, 0.6, 557.6, 339.3, 888.0, 998.5, 778.9, 10.2, 117.6, 228.9, 668.4, 449.2, 0.2}; size_t noint1_n = 11; double noint1_x[] = { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70 }; double noint1_y[] = { 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140}; size_t noint2_n = 3; double noint2_x[] = { 4, 5, 6 } ; double noint2_y[] = { 3, 4, 4 } ; int main (void) { double x[1000], y[1000], w[1000]; size_t xstride = 2, wstride = 3, ystride = 5; size_t i; for (i = 0; i < norris_n; i++) { x[i*xstride] = norris_x[i]; w[i*wstride] = 1.0; y[i*ystride] = norris_y[i]; } gsl_ieee_env_setup(); { double c0, c1, cov00, cov01, cov11, sumsq; double expected_c0 = -0.262323073774029; double expected_c1 = 1.00211681802045; double expected_cov00 = pow(0.232818234301152, 2.0); double expected_cov01 = -7.74327536339570e-05; /* computed from octave */ double expected_cov11 = pow(0.429796848199937E-03, 2.0); double expected_sumsq = 26.6173985294224; gsl_fit_linear (x, xstride, y, ystride, norris_n, &c0, &c1, &cov00, &cov01, &cov11, &sumsq); /* gsl_fit_wlinear (x, xstride, w, wstride, y, ystride, norris_n, &c0, &c1, &cov00, &cov01, &cov11, &sumsq); */ gsl_test_rel (c0, expected_c0, 1e-10, "norris gsl_fit_linear c0") ; gsl_test_rel (c1, expected_c1, 1e-10, "norris gsl_fit_linear c1") ; gsl_test_rel (cov00, expected_cov00, 1e-10, "norris gsl_fit_linear cov00") ; gsl_test_rel (cov01, expected_cov01, 1e-10, "norris gsl_fit_linear cov01") ; gsl_test_rel (cov11, expected_cov11, 1e-10, "norris gsl_fit_linear cov11") ; gsl_test_rel (sumsq, expected_sumsq, 1e-10, "norris gsl_fit_linear sumsq") ; } { double c0, c1, cov00, cov01, cov11, sumsq; double expected_c0 = -0.262323073774029; double expected_c1 = 1.00211681802045; double expected_cov00 = 6.92384428759429e-02; /* computed from octave */ double expected_cov01 = -9.89095016390515e-05; /* computed from octave */ double expected_cov11 = 2.35960747164148e-07; /* computed from octave */ double expected_sumsq = 26.6173985294224; gsl_fit_wlinear (x, xstride, w, wstride, y, ystride, norris_n, &c0, &c1, &cov00, &cov01, &cov11, &sumsq); gsl_test_rel (c0, expected_c0, 1e-10, "norris gsl_fit_wlinear c0") ; gsl_test_rel (c1, expected_c1, 1e-10, "norris gsl_fit_wlinear c1") ; gsl_test_rel (cov00, expected_cov00, 1e-10, "norris gsl_fit_wlinear cov00") ; gsl_test_rel (cov01, expected_cov01, 1e-10, "norris gsl_fit_wlinear cov01") ; gsl_test_rel (cov11, expected_cov11, 1e-10, "norris gsl_fit_wlinear cov11") ; gsl_test_rel (sumsq, expected_sumsq, 1e-10, "norris gsl_fit_wlinear sumsq") ; } for (i = 0; i < noint1_n; i++) { x[i*xstride] = noint1_x[i]; w[i*wstride] = 1.0; y[i*ystride] = noint1_y[i]; } { double c1, cov11, sumsq; double expected_c1 = 2.07438016528926; double expected_cov11 = pow(0.165289256198347E-01, 2.0); double expected_sumsq = 127.272727272727; gsl_fit_mul (x, xstride, y, ystride, noint1_n, &c1, &cov11, &sumsq); gsl_test_rel (c1, expected_c1, 1e-10, "noint1 gsl_fit_mul c1") ; gsl_test_rel (cov11, expected_cov11, 1e-10, "noint1 gsl_fit_mul cov11") ; gsl_test_rel (sumsq, expected_sumsq, 1e-10, "noint1 gsl_fit_mul sumsq") ; } { double c1, cov11, sumsq; double expected_c1 = 2.07438016528926; double expected_cov11 = 2.14661371686165e-05; /* computed from octave */ double expected_sumsq = 127.272727272727; gsl_fit_wmul (x, xstride, w, wstride, y, ystride, noint1_n, &c1, &cov11, &sumsq); gsl_test_rel (c1, expected_c1, 1e-10, "noint1 gsl_fit_wmul c1") ; gsl_test_rel (cov11, expected_cov11, 1e-10, "noint1 gsl_fit_wmul cov11") ; gsl_test_rel (sumsq, expected_sumsq, 1e-10, "noint1 gsl_fit_wmul sumsq") ; } for (i = 0; i < noint2_n; i++) { x[i*xstride] = noint2_x[i]; w[i*wstride] = 1.0; y[i*ystride] = noint2_y[i]; } { double c1, cov11, sumsq; double expected_c1 = 0.727272727272727; double expected_cov11 = pow(0.420827318078432E-01, 2.0); double expected_sumsq = 0.272727272727273; gsl_fit_mul (x, xstride, y, ystride, noint2_n, &c1, &cov11, &sumsq); gsl_test_rel (c1, expected_c1, 1e-10, "noint2 gsl_fit_mul c1") ; gsl_test_rel (cov11, expected_cov11, 1e-10, "noint2 gsl_fit_mul cov11") ; gsl_test_rel (sumsq, expected_sumsq, 1e-10, "noint2 gsl_fit_mul sumsq") ; } { double c1, cov11, sumsq; double expected_c1 = 0.727272727272727; double expected_cov11 = 1.29870129870130e-02 ; /* computed from octave */ double expected_sumsq = 0.272727272727273; gsl_fit_wmul (x, xstride, w, wstride, y, ystride, noint2_n, &c1, &cov11, &sumsq); gsl_test_rel (c1, expected_c1, 1e-10, "noint2 gsl_fit_wmul c1") ; gsl_test_rel (cov11, expected_cov11, 1e-10, "noint2 gsl_fit_wmul cov11") ; gsl_test_rel (sumsq, expected_sumsq, 1e-10, "noint2 gsl_fit_wmul sumsq") ; } /* now summarize the results */ exit (gsl_test_summary ()); } gsl/install-sh0000755000175000017500000003325513536674414011746 0ustar eddedd#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gsl/monte/0000755000175000017500000000000014057135461011045 5ustar eddeddgsl/monte/gsl_monte_vegas.h0000644000175000017500000000624213536674414014405 0ustar eddedd/* monte/gsl_monte_vegas.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Michael Booth * Copyright (C) 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* header for the gsl "vegas" routines. Mike Booth, May 1998 */ #ifndef __GSL_MONTE_VEGAS_H__ #define __GSL_MONTE_VEGAS_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS enum {GSL_VEGAS_MODE_IMPORTANCE = 1, GSL_VEGAS_MODE_IMPORTANCE_ONLY = 0, GSL_VEGAS_MODE_STRATIFIED = -1}; typedef struct { /* grid */ size_t dim; size_t bins_max; unsigned int bins; unsigned int boxes; /* these are both counted along the axes */ double * xi; double * xin; double * delx; double * weight; double vol; double * x; int * bin; int * box; /* distribution */ double * d; /* control variables */ double alpha; int mode; int verbose; unsigned int iterations; int stage; /* scratch variables preserved between calls to vegas1/2/3 */ double jac; double wtd_int_sum; double sum_wgts; double chi_sum; double chisq; double result; double sigma; unsigned int it_start; unsigned int it_num; unsigned int samples; unsigned int calls_per_box; FILE * ostream; } gsl_monte_vegas_state; int gsl_monte_vegas_integrate(gsl_monte_function * f, double xl[], double xu[], size_t dim, size_t calls, gsl_rng * r, gsl_monte_vegas_state *state, double* result, double* abserr); gsl_monte_vegas_state* gsl_monte_vegas_alloc(size_t dim); int gsl_monte_vegas_init(gsl_monte_vegas_state* state); void gsl_monte_vegas_free (gsl_monte_vegas_state* state); double gsl_monte_vegas_chisq (const gsl_monte_vegas_state* state); void gsl_monte_vegas_runval (const gsl_monte_vegas_state* state, double * result, double * sigma); typedef struct { double alpha; size_t iterations; int stage; int mode; int verbose; FILE * ostream; } gsl_monte_vegas_params; void gsl_monte_vegas_params_get (const gsl_monte_vegas_state * state, gsl_monte_vegas_params * params); void gsl_monte_vegas_params_set (gsl_monte_vegas_state * state, const gsl_monte_vegas_params * params); __END_DECLS #endif /* __GSL_MONTE_VEGAS_H__ */ gsl/monte/Makefile.in0000664000175000017500000010640314057135461013120 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = monte ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslmonte_la_LIBADD = am_libgslmonte_la_OBJECTS = miser.lo plain.lo vegas.lo libgslmonte_la_OBJECTS = $(am_libgslmonte_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslmonte.la ../rng/libgslrng.la \ ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/miser.Plo ./$(DEPDIR)/plain.Plo \ ./$(DEPDIR)/test.Po ./$(DEPDIR)/vegas.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslmonte_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslmonte_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog README TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslmonte.la libgslmonte_la_SOURCES = miser.c plain.c gsl_monte_vegas.h gsl_monte_miser.h gsl_monte_plain.h gsl_monte.h vegas.c pkginclude_HEADERS = gsl_monte.h gsl_monte_vegas.h gsl_monte_miser.h gsl_monte_plain.h AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslmonte.la ../rng/libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la noinst_HEADERS = test_main.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu monte/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu monte/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslmonte.la: $(libgslmonte_la_OBJECTS) $(libgslmonte_la_DEPENDENCIES) $(EXTRA_libgslmonte_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslmonte_la_OBJECTS) $(libgslmonte_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/miser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plain.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vegas.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/miser.Plo -rm -f ./$(DEPDIR)/plain.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/vegas.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/miser.Plo -rm -f ./$(DEPDIR)/plain.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/vegas.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile #demo_SOURCES= demo.c #demo_LDADD = libgslmonte.la ../rng/libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/monte/ChangeLog0000644000175000017500000001625113536674414012633 0ustar eddedd2009-07-25 Brian Gough * vegas.c (gsl_monte_vegas_params_get) (gsl_monte_vegas_params_set): added get/set functions for params (gsl_monte_vegas_chisq): added chisq accessor * gsl_monte_vegas.h: added separate params struct * miser.c (gsl_monte_miser_params_set) (gsl_monte_miser_params_get): added get/set functions for params * gsl_monte_miser.h: added separate params struct 2009-07-09 Brian Gough * vegas.c (gsl_monte_vegas_free): handle NULL argument in free * plain.c (gsl_monte_plain_free): handle NULL argument in free * miser.c (gsl_monte_miser_free): handle NULL argument in free 2009-02-10 Brian Gough * vegas.c (gsl_monte_vegas_integrate): use gsl_pow_int to compute tot_boxes, avoids potentially inaccurate pow functions (MinGW). 2008-11-20 Brian Gough * vegas.c (gsl_monte_vegas_integrate): improve the chisq calculation to avoid cancellation errors in the original formula (fixes bug #24510) * test.c (MONTE_ERROR_TEST): added test cases for negative chisq in vegas 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2008-04-26 Brian Gough * vegas.c (gsl_monte_vegas_integrate): compute running totals as volatile double to prevent problems with excess precision, use meaningful variable names for sum of squares, variance and sigma. * test_main.c: compute the ensemble mean more accurately for the tests * test.c: added a test for warm-start vegas, as well as cold-start * miser.c (gsl_monte_miser_integrate): catch zero weights to avoid division by zero * test.c (main): added test for step-type function 2004-06-02 Brian Gough * test_main.c: handle the case where sd==0 && error[i] !=0 more carefully Mon Apr 23 13:23:47 2001 Brian Gough * test_main.c: removed unused status variable Sat Jan 6 19:56:49 2001 Brian Gough * miser.c (gsl_monte_miser_free): fixed memory leak for s->hits_{r,l} * vegas.c (gsl_monte_vegas_free): fixed memory leak for s->x Fri Dec 22 21:43:04 2000 Brian Gough * miser.c: removed max-min estimation method for subvolumes. We will use the standard variance method and try to use a sufficient number of points to estimate the variance reliably. Wed Dec 20 21:32:40 2000 Brian Gough * vegas.c: tidied up the algorithm, deal with cases of sigma = 0 explicitly. Sat Dec 9 14:19:53 2000 Brian Gough * reorganization and clean up Thu Nov 16 19:50:27 2000 Brian Gough * miser.c: rewrite to fix overflows and make calling conventions consistent * plain.c: rewrite to fix overflows and make calling conventions consistent Thu Oct 26 20:06:36 2000 Brian Gough * plain.c (gsl_monte_plain_integrate): integer factor calls*(calls-1) used in numerical expression can easily overflow, changed to calls*(calls-1.0). Sat Oct 21 20:36:06 2000 Brian Gough * miser.c (gsl_monte_miser_integrate): fixed bug where hits_l was used in place of hits_r Tue Sep 19 19:16:37 2000 Brian Gough * plain.c (gsl_monte_plain_alloc): initialise check_done to avoid warning about use of unitialised memory * vegas.c (gsl_monte_vegas_alloc): as above * miser.c (gsl_monte_miser_alloc): as above * plain.c miser.c: removed use of sprintf for error messages Wed May 31 19:50:19 2000 Brian Gough * miser_test.c (main): increased tolerances to allow tests to pass with different compilers Mon May 15 15:26:22 2000 Brian Gough * vegas_test.c (main): added gsl_ieee_env_setup() to allow change of precision in tests * miser_test.c (main): ditto * plain_test.c (main): ditto Fri Feb 26 14:49:56 1999 Brian Gough * Makefile.am: removed ..._LDFLAGS = -static since this is specific to gcc Wed Nov 18 10:59:56 1998 Brian Gough * use standard headers templates_on.h and templates_off.h instead of source.h Tue Nov 17 16:49:12 1998 Brian Gough * added #include to all top-level source files * plain.c (gsl_monte_plain_integrate): replaced myMAX by GSL_MAX * utils.c: move macros around to avoid double definition Fri Aug 14 10:12:06 1998 Brian Gough * Makefile.am: I needed to add utils.h to libgslmonte_a_SOURCES to get it to work with my automake Thu Jul 30 17:31:29 1998 booth * gsl_monte_miser.h, miser.c: Turn off the annoying warning in miser unless the user requests it. Wed Jul 29 20:24:54 1998 bjg * Makefile.am, Makefile.in: some fixes to pass make distcheck * Makefile.am, Makefile.in: experimenting with new top level makefile.am Tue Jul 28 17:05:20 1998 booth * plain.c, vegas.c, miser.c: make all the _free functions check their argument. Also, the init functions now throw EFAULT if given a null pointer. * gsl_monte_vegas.h, vegas.c: vegas1, vegas2 and vegas3 all go away. Get them by setting the "stage" variabe appropriately. Also, make _free check its argument. * vegas.c, gsl_monte_vegas.h: minor cleanup prior to be change. * vegas.c: minor changes, commiting by accident. Mon Jul 27 22:52:49 1998 bjg * Makefile.in, Makefile.am: fixed some of the include requirements for make dist Mon Jul 27 15:19:54 1998 booth * vegas_print.h, vegas_test.c, miser_test.c, vegas-print.c, vegas.c, Attic/gsl_vegas.h, Attic/gsl_vegas_print.h, gsl_monte_vegas.h, miser.c, Attic/gsl_miser.h, Makefile.am, Makefile.in, gsl_monte_miser.h: Renamed public header files to follow convention correctly. * vegas.c, vegas_test.c, miser.c, miser_test.c, plain.c, plain_test.c, Attic/gsl_miser.h, Attic/gsl_vegas.h, gsl_monte_plain.h: All the integration functions now end with _integrate (except for vegas1, vegas2 and vegas3 which are going away RSN). Tue Jul 21 21:54:33 1998 booth * vegas.c, vegas-print.c, Attic/gsl_vegas_print.h, Attic/gsl_vegas.h: trivial stuff: eliminate compiler warnings, eliminate some unneeded variables, change some types to make consistent with plain and miser. * gsl_monte_plain.h, plain.c, plain_test.c: Make "plain" conform to same style as miser and vegas. Fri Jul 17 02:23:40 1998 jungman * Makefile.in: we're gonna make it... Thu Jul 16 16:23:45 1998 booth * vegas-print.c, vegas.c, Attic/gsl_vegas_print.h: Have now completely eliminated all static variables. * vegas_test.c, vegas.c, Attic/gsl_vegas.h, Attic/gsl_vegas_print.h, vegas-print.c: Continuing to remove all static variables from vegas. Wed Jul 15 19:10:24 1998 booth * vegas.c, vegas_test.c, Attic/gsl_vegas.h: Do the state-structure thing for vegas. Not finished, so far the only real content is the rng structure. gsl/monte/Makefile.am0000644000175000017500000000131613536674414013111 0ustar eddeddnoinst_LTLIBRARIES = libgslmonte.la libgslmonte_la_SOURCES = miser.c plain.c gsl_monte_vegas.h gsl_monte_miser.h gsl_monte_plain.h gsl_monte.h vegas.c pkginclude_HEADERS = gsl_monte.h gsl_monte_vegas.h gsl_monte_miser.h gsl_monte_plain.h AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) check_PROGRAMS = test #demo test_SOURCES = test.c test_LDADD = libgslmonte.la ../rng/libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la noinst_HEADERS = test_main.c #demo_SOURCES= demo.c #demo_LDADD = libgslmonte.la ../rng/libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la gsl/monte/gsl_monte_plain.h0000644000175000017500000000353413536674414014404 0ustar eddedd/* monte/gsl_monte_plain.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Michael Booth * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Plain Monte-Carlo. */ /* Author: MJB */ #ifndef __GSL_MONTE_PLAIN_H__ #define __GSL_MONTE_PLAIN_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t dim; double *x; } gsl_monte_plain_state; int gsl_monte_plain_integrate (const gsl_monte_function * f, const double xl[], const double xu[], const size_t dim, const size_t calls, gsl_rng * r, gsl_monte_plain_state * state, double *result, double *abserr); gsl_monte_plain_state* gsl_monte_plain_alloc(size_t dim); int gsl_monte_plain_init(gsl_monte_plain_state* state); void gsl_monte_plain_free (gsl_monte_plain_state* state); __END_DECLS #endif /* __GSL_MONTE_PLAIN_H__ */ gsl/monte/gsl_monte.h0000664000175000017500000000312614057135461013211 0ustar eddedd/* monte/gsl_monte.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Michael Booth * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Some things common to all the Monte-Carlo implementations */ /* Author: MJB */ #ifndef __GSL_MONTE_H__ #define __GSL_MONTE_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Hide the function type in a typedef so that we can use it in all our integration functions, and make it easy to change things. */ struct gsl_monte_function_struct { double (*f)(double * x_array, size_t dim, void * params); size_t dim; void * params; }; typedef struct gsl_monte_function_struct gsl_monte_function; #define GSL_MONTE_FN_EVAL(F,x) (*((F)->f))(x,(F)->dim,(F)->params) __END_DECLS #endif /* __GSL_MONTE_H__ */ gsl/monte/miser.c0000644000175000017500000004201613536674414012342 0ustar eddedd/* monte/miser.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Michael Booth * Copyright (C) 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* MISER. Based on the algorithm described in the following article, W.H. Press, G.R. Farrar, "Recursive Stratified Sampling for Multidimensional Monte Carlo Integration", Computers in Physics, v4 (1990), pp190-195. */ /* Author: MJB */ /* Modified by Brian Gough 12/2000 */ #include #include #include #include #include #include #include #include static int estimate_corrmc (gsl_monte_function * f, const double xl[], const double xu[], size_t dim, size_t calls, gsl_rng * r, gsl_monte_miser_state * state, double *result, double *abserr, const double xmid[], double sigma_l[], double sigma_r[]); int gsl_monte_miser_integrate (gsl_monte_function * f, const double xl[], const double xu[], size_t dim, size_t calls, gsl_rng * r, gsl_monte_miser_state * state, double *result, double *abserr) { size_t n, estimate_calls, calls_l, calls_r; const size_t min_calls = state->min_calls; size_t i; size_t i_bisect; int found_best; double res_est = 0, err_est = 0; double res_r = 0, err_r = 0, res_l = 0, err_l = 0; double xbi_l, xbi_m, xbi_r, s; double vol; double weight_l, weight_r; double *x = state->x; double *xmid = state->xmid; double *sigma_l = state->sigma_l, *sigma_r = state->sigma_r; if (dim != state->dim) { GSL_ERROR ("number of dimensions must match allocated size", GSL_EINVAL); } for (i = 0; i < dim; i++) { if (xu[i] <= xl[i]) { GSL_ERROR ("xu must be greater than xl", GSL_EINVAL); } if (xu[i] - xl[i] > GSL_DBL_MAX) { GSL_ERROR ("Range of integration is too large, please rescale", GSL_EINVAL); } } if (state->alpha < 0) { GSL_ERROR ("alpha must be non-negative", GSL_EINVAL); } /* Compute volume */ vol = 1; for (i = 0; i < dim; i++) { vol *= xu[i] - xl[i]; } if (calls < state->min_calls_per_bisection) { double m = 0.0, q = 0.0; if (calls < 2) { GSL_ERROR ("insufficient calls for subvolume", GSL_EFAILED); } for (n = 0; n < calls; n++) { /* Choose a random point in the integration region */ for (i = 0; i < dim; i++) { x[i] = xl[i] + gsl_rng_uniform_pos (r) * (xu[i] - xl[i]); } { double fval = GSL_MONTE_FN_EVAL (f, x); /* recurrence for mean and variance */ double d = fval - m; m += d / (n + 1.0); q += d * d * (n / (n + 1.0)); } } *result = vol * m; *abserr = vol * sqrt (q / (calls * (calls - 1.0))); return GSL_SUCCESS; } estimate_calls = GSL_MAX (min_calls, calls * (state->estimate_frac)); if (estimate_calls < 4 * dim) { GSL_ERROR ("insufficient calls to sample all halfspaces", GSL_ESANITY); } /* Flip coins to bisect the integration region with some fuzz */ for (i = 0; i < dim; i++) { s = (gsl_rng_uniform (r) - 0.5) >= 0.0 ? state->dither : -state->dither; state->xmid[i] = (0.5 + s) * xl[i] + (0.5 - s) * xu[i]; } /* The idea is to chose the direction to bisect based on which will give the smallest total variance. We could (and may do so later) use MC to compute these variances. But the NR guys simply estimate the variances by finding the min and max function values for each half-region for each bisection. */ estimate_corrmc (f, xl, xu, dim, estimate_calls, r, state, &res_est, &err_est, xmid, sigma_l, sigma_r); /* We have now used up some calls for the estimation */ calls -= estimate_calls; /* Now find direction with the smallest total "variance" */ { double best_var = GSL_DBL_MAX; double beta = 2.0 / (1.0 + state->alpha); found_best = 0; i_bisect = 0; weight_l = weight_r = 1.0; for (i = 0; i < dim; i++) { if (sigma_l[i] >= 0 && sigma_r[i] >= 0) { /* estimates are okay */ double var = pow (sigma_l[i], beta) + pow (sigma_r[i], beta); if (var <= best_var) { found_best = 1; best_var = var; i_bisect = i; weight_l = pow (sigma_l[i], beta); weight_r = pow (sigma_r[i], beta); if (weight_l == 0 && weight_r == 0) { weight_l = 1; weight_r = 1; } } } else { if (sigma_l[i] < 0) { GSL_ERROR ("no points in left-half space!", GSL_ESANITY); } if (sigma_r[i] < 0) { GSL_ERROR ("no points in right-half space!", GSL_ESANITY); } } } } if (!found_best) { /* All estimates were the same, so chose a direction at random */ i_bisect = gsl_rng_uniform_int (r, dim); } xbi_l = xl[i_bisect]; xbi_m = xmid[i_bisect]; xbi_r = xu[i_bisect]; /* Get the actual fractional sizes of the two "halves", and distribute the remaining calls among them */ { double fraction_l = fabs ((xbi_m - xbi_l) / (xbi_r - xbi_l)); double fraction_r = 1 - fraction_l; double a = fraction_l * weight_l; double b = fraction_r * weight_r; calls_l = min_calls + (calls - 2 * min_calls) * a / (a + b); calls_r = min_calls + (calls - 2 * min_calls) * b / (a + b); } /* Compute the integral for the left hand side of the bisection */ /* Due to the recursive nature of the algorithm we must allocate some new memory for each recursive call */ { int status; double *xu_tmp = (double *) malloc (dim * sizeof (double)); if (xu_tmp == 0) { GSL_ERROR_VAL ("out of memory for left workspace", GSL_ENOMEM, 0); } for (i = 0; i < dim; i++) { xu_tmp[i] = xu[i]; } xu_tmp[i_bisect] = xbi_m; status = gsl_monte_miser_integrate (f, xl, xu_tmp, dim, calls_l, r, state, &res_l, &err_l); free (xu_tmp); if (status != GSL_SUCCESS) { return status; } } /* Compute the integral for the right hand side of the bisection */ { int status; double *xl_tmp = (double *) malloc (dim * sizeof (double)); if (xl_tmp == 0) { GSL_ERROR_VAL ("out of memory for right workspace", GSL_ENOMEM, 0); } for (i = 0; i < dim; i++) { xl_tmp[i] = xl[i]; } xl_tmp[i_bisect] = xbi_m; status = gsl_monte_miser_integrate (f, xl_tmp, xu, dim, calls_r, r, state, &res_r, &err_r); free (xl_tmp); if (status != GSL_SUCCESS) { return status; } } *result = res_l + res_r; *abserr = sqrt (err_l * err_l + err_r * err_r); return GSL_SUCCESS; } gsl_monte_miser_state * gsl_monte_miser_alloc (size_t dim) { gsl_monte_miser_state *s = (gsl_monte_miser_state *) malloc (sizeof (gsl_monte_miser_state)); if (s == 0) { GSL_ERROR_VAL ("failed to allocate space for miser state struct", GSL_ENOMEM, 0); } s->x = (double *) malloc (dim * sizeof (double)); if (s->x == 0) { free (s); GSL_ERROR_VAL ("failed to allocate space for x", GSL_ENOMEM, 0); } s->xmid = (double *) malloc (dim * sizeof (double)); if (s->xmid == 0) { free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for xmid", GSL_ENOMEM, 0); } s->sigma_l = (double *) malloc (dim * sizeof (double)); if (s->sigma_l == 0) { free (s->xmid); free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for sigma_l", GSL_ENOMEM, 0); } s->sigma_r = (double *) malloc (dim * sizeof (double)); if (s->sigma_r == 0) { free (s->sigma_l); free (s->xmid); free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for sigma_r", GSL_ENOMEM, 0); } s->fmax_l = (double *) malloc (dim * sizeof (double)); if (s->fmax_l == 0) { free (s->sigma_r); free (s->sigma_l); free (s->xmid); free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for fmax_l", GSL_ENOMEM, 0); } s->fmax_r = (double *) malloc (dim * sizeof (double)); if (s->fmax_r == 0) { free (s->fmax_l); free (s->sigma_r); free (s->sigma_l); free (s->xmid); free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for fmax_r", GSL_ENOMEM, 0); } s->fmin_l = (double *) malloc (dim * sizeof (double)); if (s->fmin_l == 0) { free (s->fmax_r); free (s->fmax_l); free (s->sigma_r); free (s->sigma_l); free (s->xmid); free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for fmin_l", GSL_ENOMEM, 0); } s->fmin_r = (double *) malloc (dim * sizeof (double)); if (s->fmin_r == 0) { free (s->fmin_l); free (s->fmax_r); free (s->fmax_l); free (s->sigma_r); free (s->sigma_l); free (s->xmid); free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for fmin_r", GSL_ENOMEM, 0); } s->fsum_l = (double *) malloc (dim * sizeof (double)); if (s->fsum_l == 0) { free (s->fmin_r); free (s->fmin_l); free (s->fmax_r); free (s->fmax_l); free (s->sigma_r); free (s->sigma_l); free (s->xmid); free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for fsum_l", GSL_ENOMEM, 0); } s->fsum_r = (double *) malloc (dim * sizeof (double)); if (s->fsum_r == 0) { free (s->fsum_l); free (s->fmin_r); free (s->fmin_l); free (s->fmax_r); free (s->fmax_l); free (s->sigma_r); free (s->sigma_l); free (s->xmid); free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for fsum_r", GSL_ENOMEM, 0); } s->fsum2_l = (double *) malloc (dim * sizeof (double)); if (s->fsum2_l == 0) { free (s->fsum_r); free (s->fsum_l); free (s->fmin_r); free (s->fmin_l); free (s->fmax_r); free (s->fmax_l); free (s->sigma_r); free (s->sigma_l); free (s->xmid); free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for fsum2_l", GSL_ENOMEM, 0); } s->fsum2_r = (double *) malloc (dim * sizeof (double)); if (s->fsum2_r == 0) { free (s->fsum2_l); free (s->fsum_r); free (s->fsum_l); free (s->fmin_r); free (s->fmin_l); free (s->fmax_r); free (s->fmax_l); free (s->sigma_r); free (s->sigma_l); free (s->xmid); free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for fsum2_r", GSL_ENOMEM, 0); } s->hits_r = (size_t *) malloc (dim * sizeof (size_t)); if (s->hits_r == 0) { free (s->fsum2_r); free (s->fsum2_l); free (s->fsum_r); free (s->fsum_l); free (s->fmin_r); free (s->fmin_l); free (s->fmax_r); free (s->fmax_l); free (s->sigma_r); free (s->sigma_l); free (s->xmid); free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for fsum2_r", GSL_ENOMEM, 0); } s->hits_l = (size_t *) malloc (dim * sizeof (size_t)); if (s->hits_l == 0) { free (s->hits_r); free (s->fsum2_r); free (s->fsum2_l); free (s->fsum_r); free (s->fsum_l); free (s->fmin_r); free (s->fmin_l); free (s->fmax_r); free (s->fmax_l); free (s->sigma_r); free (s->sigma_l); free (s->xmid); free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for fsum2_r", GSL_ENOMEM, 0); } s->dim = dim; gsl_monte_miser_init (s); return s; } int gsl_monte_miser_init (gsl_monte_miser_state * s) { /* We use 8 points in each halfspace to estimate the variance. There are 2*dim halfspaces. A variance estimate requires a minimum of 2 points. */ s->min_calls = 16 * s->dim; s->min_calls_per_bisection = 32 * s->min_calls; s->estimate_frac = 0.1; s->alpha = 2.0; s->dither = 0.0; return GSL_SUCCESS; } void gsl_monte_miser_free (gsl_monte_miser_state * s) { RETURN_IF_NULL (s); free (s->hits_r); free (s->hits_l); free (s->fsum2_r); free (s->fsum2_l); free (s->fsum_r); free (s->fsum_l); free (s->fmin_r); free (s->fmin_l); free (s->fmax_r); free (s->fmax_l); free (s->sigma_r); free (s->sigma_l); free (s->xmid); free (s->x); free (s); } void gsl_monte_miser_params_get (const gsl_monte_miser_state * s, gsl_monte_miser_params * p) { p->estimate_frac = s->estimate_frac; p->min_calls = s->min_calls; p->min_calls_per_bisection = s->min_calls_per_bisection; p->alpha = s->alpha; p->dither = s->dither; } void gsl_monte_miser_params_set (gsl_monte_miser_state * s, const gsl_monte_miser_params * p) { s->estimate_frac = p->estimate_frac; s->min_calls = p->min_calls; s->min_calls_per_bisection = p->min_calls_per_bisection; s->alpha = p->alpha; s->dither = p->dither; } static int estimate_corrmc (gsl_monte_function * f, const double xl[], const double xu[], size_t dim, size_t calls, gsl_rng * r, gsl_monte_miser_state * state, double *result, double *abserr, const double xmid[], double sigma_l[], double sigma_r[]) { size_t i, n; double *x = state->x; double *fsum_l = state->fsum_l; double *fsum_r = state->fsum_r; double *fsum2_l = state->fsum2_l; double *fsum2_r = state->fsum2_r; size_t *hits_l = state->hits_l; size_t *hits_r = state->hits_r; double m = 0.0, q = 0.0; double vol = 1.0; for (i = 0; i < dim; i++) { vol *= xu[i] - xl[i]; hits_l[i] = hits_r[i] = 0; fsum_l[i] = fsum_r[i] = 0.0; fsum2_l[i] = fsum2_r[i] = 0.0; sigma_l[i] = sigma_r[i] = -1; } for (n = 0; n < calls; n++) { double fval; unsigned int j = (n/2) % dim; unsigned int side = (n % 2); for (i = 0; i < dim; i++) { double z = gsl_rng_uniform_pos (r) ; if (i != j) { x[i] = xl[i] + z * (xu[i] - xl[i]); } else { if (side == 0) { x[i] = xmid[i] + z * (xu[i] - xmid[i]); } else { x[i] = xl[i] + z * (xmid[i] - xl[i]); } } } fval = GSL_MONTE_FN_EVAL (f, x); /* recurrence for mean and variance */ { double d = fval - m; m += d / (n + 1.0); q += d * d * (n / (n + 1.0)); } /* compute the variances on each side of the bisection */ for (i = 0; i < dim; i++) { if (x[i] <= xmid[i]) { fsum_l[i] += fval; fsum2_l[i] += fval * fval; hits_l[i]++; } else { fsum_r[i] += fval; fsum2_r[i] += fval * fval; hits_r[i]++; } } } for (i = 0; i < dim; i++) { double fraction_l = (xmid[i] - xl[i]) / (xu[i] - xl[i]); if (hits_l[i] > 0) { fsum_l[i] /= hits_l[i]; sigma_l[i] = sqrt (fsum2_l[i] - fsum_l[i] * fsum_l[i] / hits_l[i]); sigma_l[i] *= fraction_l * vol / hits_l[i]; } if (hits_r[i] > 0) { fsum_r[i] /= hits_r[i]; sigma_r[i] = sqrt (fsum2_r[i] - fsum_r[i] * fsum_r[i] / hits_r[i]); sigma_r[i] *= (1 - fraction_l) * vol / hits_r[i]; } } *result = vol * m; if (calls < 2) { *abserr = GSL_POSINF; } else { *abserr = vol * sqrt (q / (calls * (calls - 1.0))); } return GSL_SUCCESS; } gsl/monte/plain.c0000644000175000017500000000656113536674414012333 0ustar eddedd/* monte/plain.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2009 Michael Booth * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Plain Monte-Carlo. */ /* Author: MJB */ #include #include #include #include #include int gsl_monte_plain_integrate (const gsl_monte_function * f, const double xl[], const double xu[], const size_t dim, const size_t calls, gsl_rng * r, gsl_monte_plain_state * state, double *result, double *abserr) { double vol, m = 0, q = 0; double *x = state->x; size_t n, i; if (dim != state->dim) { GSL_ERROR ("number of dimensions must match allocated size", GSL_EINVAL); } for (i = 0; i < dim; i++) { if (xu[i] <= xl[i]) { GSL_ERROR ("xu must be greater than xl", GSL_EINVAL); } if (xu[i] - xl[i] > GSL_DBL_MAX) { GSL_ERROR ("Range of integration is too large, please rescale", GSL_EINVAL); } } /* Compute the volume of the region */ vol = 1; for (i = 0; i < dim; i++) { vol *= xu[i] - xl[i]; } for (n = 0; n < calls; n++) { /* Choose a random point in the integration region */ for (i = 0; i < dim; i++) { x[i] = xl[i] + gsl_rng_uniform_pos (r) * (xu[i] - xl[i]); } { double fval = GSL_MONTE_FN_EVAL (f, x); /* recurrence for mean and variance */ double d = fval - m; m += d / (n + 1.0); q += d * d * (n / (n + 1.0)); } } *result = vol * m; if (calls < 2) { *abserr = GSL_POSINF; } else { *abserr = vol * sqrt (q / (calls * (calls - 1.0))); } return GSL_SUCCESS; } gsl_monte_plain_state * gsl_monte_plain_alloc (size_t dim) { gsl_monte_plain_state *s = (gsl_monte_plain_state *) malloc (sizeof (gsl_monte_plain_state)); if (s == 0) { GSL_ERROR_VAL ("failed to allocate space for state struct", GSL_ENOMEM, 0); } s->x = (double *) malloc (dim * sizeof (double)); if (s->x == 0) { free (s); GSL_ERROR_VAL ("failed to allocate space for working vector", GSL_ENOMEM, 0); } s->dim = dim; return s; } /* Set some default values and whatever */ int gsl_monte_plain_init (gsl_monte_plain_state * s) { size_t i; for (i = 0; i < s->dim; i++) { s->x[i] = 0.0; } return GSL_SUCCESS; } void gsl_monte_plain_free (gsl_monte_plain_state * s) { RETURN_IF_NULL (s); free (s->x); free (s); } gsl/monte/README0000644000175000017500000000302113536674414011730 0ustar eddeddG. P. Lepage, "VEGAS..." J. Comp. Phys. 27, 192(1978). W.H. Press, G.R. Farrar, "Miser..." Computers in Physics, v4 (1990), pp190-195 References from PVEGAS by Richard Kreckel [1]: G.P. Lepage: A New Algorithm for Adaptive Multidimensional Integration; Journal of Computational Physics 27, 192-203, (1978) [2]: W. Press, S. Teukolsky, W. Vetterling, B. Flannery: Numerical Recipes in C, (second edition) Cambridge University Press, 1992. [3]: R.C. Tausworthe: Random numbers generated by linear recurrence modulo two, Math. Comput. 19, 201-209, (1965) [4]: I. Deak: Uniform random number generators for parallel computers; Parallel Computing, 15, 155-164, (1990) [5]: R. Kreckel: Parallelization of adaptive MC integrators, MZ-TH/97-30, physics/9710028; Comp. Phys. Comm., 106, 258-266, (1997) (A preliminary version of this article can be retrieved via anonymous ftp from ftpthep.physik.uni-mainz.de in the directory /pub/pvegas/.) [6]: S. Veseli: Multidimensional integration in a heterogeneous network environment; FERMILAB-PUB-97/271-T; physics/9710017 [7]: R. Kreckel: Addendum: Parallelization of adaptive MC integrators, (Available via anonymous ftp from ftpthep.physik.uni-mainz.de in the directory /pub/pvegas/.) [8]: MPI-Forum: MPI: A Message-Passing Interface Standard, University of Tennessee, Knoxville, Tennessee, (1995) [9]: T. Ohl: Vegas Revisited: Adaptive Monte Carlo Integration Beyond Factorization; hep-ph/9806432 gsl/monte/gsl_monte_miser.h0000644000175000017500000000514613536674414014421 0ustar eddedd/* monte/gsl_monte_miser.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Michael Booth * Copyright (C) 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: MJB */ #ifndef __GSL_MONTE_MISER_H__ #define __GSL_MONTE_MISER_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t min_calls; size_t min_calls_per_bisection; double dither; double estimate_frac; double alpha; size_t dim; int estimate_style; int depth; int verbose; double * x; double * xmid; double * sigma_l; double * sigma_r; double * fmax_l; double * fmax_r; double * fmin_l; double * fmin_r; double * fsum_l; double * fsum_r; double * fsum2_l; double * fsum2_r; size_t * hits_l; size_t * hits_r; } gsl_monte_miser_state; int gsl_monte_miser_integrate(gsl_monte_function * f, const double xl[], const double xh[], size_t dim, size_t calls, gsl_rng *r, gsl_monte_miser_state* state, double *result, double *abserr); gsl_monte_miser_state* gsl_monte_miser_alloc(size_t dim); int gsl_monte_miser_init(gsl_monte_miser_state* state); void gsl_monte_miser_free(gsl_monte_miser_state* state); typedef struct { double estimate_frac; size_t min_calls; size_t min_calls_per_bisection; double alpha; double dither; } gsl_monte_miser_params; void gsl_monte_miser_params_get (const gsl_monte_miser_state * state, gsl_monte_miser_params * params); void gsl_monte_miser_params_set (gsl_monte_miser_state * state, const gsl_monte_miser_params * params); __END_DECLS #endif /* __GSL_MONTE_MISER_H__ */ gsl/monte/TODO0000644000175000017500000000230313536674414011542 0ustar eddedd# -*- org -*- #+CATEGORY: monte * Add Lattice Method and Quasi-random Method to monte carlo integration * Fix the "No-points in left/right half space" error in miser. Random errors like that are discouraged in a library. The routine should iterate over the dimensions choosing a point on each side of the bisection to ensure that the error does not occur. * VEGAS could estimate its roundoff error, caused by dividing up into many boxes and then summing (I know this is ridiculous for any realistic case, but it shows up on the tests when integrating a constant!). In particular, there are some failures reported for the VEGAS constant tests on Windows. * VEGAS gives a negative chisq for some cases where there are wildly inconsistent values. Calculation should be improved so that chisq>=0. Also, when there are inconsistent values it might make sense to scale the error by chisq, as is often done experimentally -- at least that way the error would be increased. * The original VEGAS allowed to user to calculate other weighted quantities. The appropriate way to implement it in GSL would be to provide a separate routine which returns sample points and weights so that the user can caculate any quantity. gsl/monte/test.c0000644000175000017500000004010413536674414012176 0ustar eddedd/* monte/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Michael Booth * Copyright (C) 2009 Michael Booth * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #define CONSTANT #define STEP #define PRODUCT #define GAUSSIAN #define DBLGAUSSIAN #define TSUDA #define PLAIN #define MISER #define VEGAS double xl[11] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; double xu[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; double xu2[11] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }; double xu3[2] = { GSL_DBL_MAX, GSL_DBL_MAX }; double fconst (double x[], size_t d, void *params); double fstep (double x[], size_t d, void *params); double f0 (double x[], size_t d, void *params); double f1 (double x[], size_t d, void *params); double f2 (double x[], size_t d, void *params); double f3 (double x[], size_t d, void *params); void my_error_handler (const char *reason, const char *file, int line, int err); struct problem { gsl_monte_function * f; double * xl; double * xu; size_t dim; size_t calls; double expected_result; double expected_error; char * description; } ; gsl_monte_function make_function (double (*f)(double *, size_t, void *), size_t d, void * p); gsl_monte_function make_function (double (*f)(double *, size_t, void *), size_t d, void * p) { gsl_monte_function f_new; f_new.f = f; f_new.dim = d; f_new.params = p; return f_new; } void add (struct problem * problems, int * n, gsl_monte_function * f, double xl[], double xu[], size_t dim, size_t calls, double result, double err, char * description); void add (struct problem * problems, int * n, gsl_monte_function * f, double xl[], double xu[], size_t dim, size_t calls, double result, double err, char * description) { int i = *n; problems[i].f = f; problems[i].xl = xl; problems[i].xu = xu; problems[i].dim = dim; problems[i].calls = calls; problems[i].expected_result = result; problems[i].expected_error = err; problems[i].description = description; (*n)++; } #define TRIALS 10 int main (void) { double result[TRIALS], error[TRIALS]; double a = 0.1; double c = (1.0 + sqrt (10.0)) / 9.0; gsl_monte_function Fc = make_function(&fconst, 0, 0); gsl_monte_function Fs = make_function(&fstep, 0, 0); gsl_monte_function F0 = make_function(&f0, 0, &a); gsl_monte_function F1 = make_function(&f1, 0, &a); gsl_monte_function F2 = make_function(&f2, 0, &a); gsl_monte_function F3 = make_function(&f3, 0, &c); /* The relationship between the variance of the function itself, the error on the integral and the number of calls is, sigma = sqrt(variance/N) where the variance is the <(f - )^2> where <.> denotes the volume average (integral over the integration region divided by the volume) */ int n = 0; struct problem * I; struct problem problems[256]; #ifdef CONSTANT /* variance(Fc) = 0 */ add(problems,&n, &Fc, xl, xu, 1, 1000, 1.0, 0.0, "constant, 1d"); add(problems,&n, &Fc, xl, xu, 2, 1000, 1.0, 0.0, "constant, 2d"); add(problems,&n, &Fc, xl, xu, 3, 1000, 1.0, 0.0, "constant, 3d"); add(problems,&n, &Fc, xl, xu, 4, 1000, 1.0, 0.0, "constant, 4d"); add(problems,&n, &Fc, xl, xu, 5, 1000, 1.0, 0.0, "constant, 5d"); add(problems,&n, &Fc, xl, xu, 6, 1000, 1.0, 0.0, "constant, 6d"); add(problems,&n, &Fc, xl, xu, 7, 1000, 1.0, 0.0, "constant, 7d"); add(problems,&n, &Fc, xl, xu, 8, 1000, 1.0, 0.0, "constant, 8d"); add(problems,&n, &Fc, xl, xu, 9, 1000, 1.0, 0.0, "constant, 9d"); add(problems,&n, &Fc, xl, xu, 10, 1000, 1.0, 0.0, "constant, 10d"); #endif #ifdef STEP /* variance(Fs) = 0.4/sqrt(1000) */ add(problems,&n, &Fs, xl, xu, 1, 100000, 0.8, 1.264e-3, "step, 1d"); add(problems,&n, &Fs, xl, xu, 2, 100000, 0.8, 1.264e-3, "step, 2d"); add(problems,&n, &Fs, xl, xu, 3, 100000, 0.8, 1.264e-3, "step, 3d"); add(problems,&n, &Fs, xl, xu, 4, 100000, 0.8, 1.264e-3, "step, 4d"); add(problems,&n, &Fs, xl, xu, 5, 100000, 0.8, 1.264e-3, "step, 5d"); add(problems,&n, &Fs, xl, xu, 6, 100000, 0.8, 1.264e-3, "step, 6d"); add(problems,&n, &Fs, xl, xu, 7, 100000, 0.8, 1.264e-3, "step, 7d"); add(problems,&n, &Fs, xl, xu, 8, 100000, 0.8, 1.264e-3, "step, 8d"); add(problems,&n, &Fs, xl, xu, 9, 100000, 0.8, 1.264e-3, "step, 9d"); add(problems,&n, &Fs, xl, xu, 10, 100000, 0.8, 1.264e-3, "step, 10d"); #endif #ifdef PRODUCT /* variance(F0) = (4/3)^d - 1 */ add(problems,&n, &F0, xl, xu, 1, 3333, 1.0, 0.01, "product, 1d" ); add(problems,&n, &F0, xl, xu, 2, 7777, 1.0, 0.01, "product, 2d" ); add(problems,&n, &F0, xl, xu, 3, 13703, 1.0, 0.01, "product, 3d" ); add(problems,&n, &F0, xl, xu, 4, 21604, 1.0, 0.01, "product, 4d" ); add(problems,&n, &F0, xl, xu, 5, 32139, 1.0, 0.01, "product, 5d" ); add(problems,&n, &F0, xl, xu, 6, 46186, 1.0, 0.01, "product, 6d" ); add(problems,&n, &F0, xl, xu, 7, 64915, 1.0, 0.01, "product, 7d" ); add(problems,&n, &F0, xl, xu, 8, 89887, 1.0, 0.01, "product, 8d" ); add(problems,&n, &F0, xl, xu, 9, 123182, 1.0, 0.01, "product, 9d" ); add(problems,&n, &F0, xl, xu, 10, 167577, 1.0, 0.01, "product, 10d" ); #endif #ifdef GAUSSIAN /* variance(F1) = (1/(a sqrt(2 pi)))^d - 1 */ add(problems,&n, &F1, xl, xu, 1, 298, 1.0, 0.1, "gaussian, 1d" ); add(problems,&n, &F1, xl, xu, 2, 1492, 1.0, 0.1, "gaussian, 2d" ); add(problems,&n, &F1, xl, xu, 3, 6249, 1.0, 0.1, "gaussian, 3d" ); add(problems,&n, &F1, xl, xu, 4, 25230, 1.0, 0.1, "gaussian, 4d" ); add(problems,&n, &F1, xl, xu, 5, 100953, 1.0, 0.1, "gaussian, 5d" ); add(problems,&n, &F1, xl, xu, 6, 44782, 1.0, 0.3, "gaussian, 6d" ); add(problems,&n, &F1, xl, xu, 7, 178690, 1.0, 0.3, "gaussian, 7d" ); add(problems,&n, &F1, xl, xu, 8, 712904, 1.0, 0.3, "gaussian, 8d" ); add(problems,&n, &F1, xl, xu, 9, 2844109, 1.0, 0.3, "gaussian, 9d" ); add(problems,&n, &F1, xl, xu, 10, 11346390, 1.0, 0.3, "gaussian, 10d" ); #endif #ifdef DBLGAUSSIAN /* variance(F2) = 0.5 * (1/(a sqrt(2 pi)))^d - 1 */ add(problems,&n, &F2, xl, xu, 1, 9947, 1.0, 0.01, "double gaussian, 1d" ); add(problems,&n, &F2, xl, xu, 2, 695, 1.0, 0.1, "double gaussian, 2d" ); add(problems,&n, &F2, xl, xu, 3, 3074, 1.0, 0.1, "double gaussian, 3d" ); add(problems,&n, &F2, xl, xu, 4, 12565, 1.0, 0.1, "double gaussian, 4d" ); add(problems,&n, &F2, xl, xu, 5, 50426, 1.0, 0.1, "double gaussian, 5d" ); add(problems,&n, &F2, xl, xu, 6, 201472, 1.0, 0.1, "double gaussian, 6d" ); add(problems,&n, &F2, xl, xu, 7, 804056, 1.0, 0.1, "double gaussian, 7d" ); add(problems,&n, &F2, xl, xu, 8, 356446, 1.0, 0.3, "double gaussian, 8d" ); add(problems,&n, &F2, xl, xu, 9, 1422049, 1.0, 0.3, "double gaussian, 9d" ); add(problems,&n, &F2, xl, xu, 10, 5673189, 1.0, 0.3, "double gaussian, 10d" ); #endif #ifdef TSUDA /* variance(F3) = ((c^2 + c + 1/3)/(c(c+1)))^d - 1 */ add(problems,&n, &F3, xl, xu, 1, 4928, 1.0, 0.01, "tsuda function, 1d" ); add(problems,&n, &F3, xl, xu, 2, 12285, 1.0, 0.01, "tsuda function, 2d" ); add(problems,&n, &F3, xl, xu, 3, 23268, 1.0, 0.01, "tsuda function, 3d" ); add(problems,&n, &F3, xl, xu, 4, 39664, 1.0, 0.01, "tsuda function, 4d" ); add(problems,&n, &F3, xl, xu, 5, 64141, 1.0, 0.01, "tsuda function, 5d" ); add(problems,&n, &F3, xl, xu, 6, 100680, 1.0, 0.01, "tsuda function, 6d" ); add(problems,&n, &F3, xl, xu, 7, 155227, 1.0, 0.01, "tsuda function, 7d" ); add(problems,&n, &F3, xl, xu, 8, 236657, 1.0, 0.01, "tsuda function, 8d" ); add(problems,&n, &F3, xl, xu, 9, 358219, 1.0, 0.01, "tsuda function, 9d" ); add(problems,&n, &F3, xl, xu, 10, 539690, 1.0, 0.01, "tsuda function, 10d" ); #endif add(problems,&n, 0, 0, 0, 0, 0, 0, 0, 0 ); /* gsl_set_error_handler (&my_error_handler); */ gsl_ieee_env_setup (); gsl_rng_env_setup (); #ifdef A printf ("testing allocation/input checks\n"); status = gsl_monte_plain_validate (s, xl, xu3, 1, 1); gsl_test (status != 0, "error if limits too large"); status = gsl_monte_plain_validate (s, xl, xu, 0, 10); gsl_test (status != 0, "error if num_dim = 0"); status = gsl_monte_plain_validate (s, xl, xu, 1, 0); gsl_test (status != 0, "error if calls = 0"); status = gsl_monte_plain_validate (s, xu, xl, 1, 10); gsl_test (status != 0, "error if xu < xl"); #endif #ifdef PLAIN #define NAME "plain" #define MONTE_STATE gsl_monte_plain_state #define MONTE_ALLOC gsl_monte_plain_alloc #define MONTE_INTEGRATE gsl_monte_plain_integrate #define MONTE_FREE gsl_monte_plain_free #define MONTE_SPEEDUP 1 #define MONTE_ERROR_TEST(err,expected) gsl_test_factor(err,expected, 5.0, NAME ", %s, abserr[%d]", I->description, i) #include "test_main.c" #undef NAME #undef MONTE_STATE #undef MONTE_ALLOC #undef MONTE_INTEGRATE #undef MONTE_FREE #undef MONTE_ERROR_TEST #undef MONTE_SPEEDUP #endif #ifdef MISER #define NAME "miser" #define MONTE_STATE gsl_monte_miser_state #define MONTE_ALLOC gsl_monte_miser_alloc #define MONTE_INTEGRATE gsl_monte_miser_integrate #define MONTE_FREE gsl_monte_miser_free #define MONTE_SPEEDUP 2 #define MONTE_ERROR_TEST(err,expected) gsl_test(err > 5.0 * expected, NAME ", %s, abserr[%d] (obs %g vs plain %g)", I->description, i, err, expected) #include "test_main.c" #undef NAME #undef MONTE_STATE #undef MONTE_ALLOC #undef MONTE_INTEGRATE #undef MONTE_FREE #undef MONTE_ERROR_TEST #undef MONTE_SPEEDUP #endif #ifdef MISER #define NAME "miser(params)" #define MONTE_STATE gsl_monte_miser_state #define MONTE_ALLOC gsl_monte_miser_alloc #define MONTE_PARAMS gsl_monte_miser_params #define MONTE_INTEGRATE(f,xl,xu,dim,calls,r,s,res,err) { gsl_monte_miser_params_get(s, ¶ms) ; params.alpha = 1.5 ; gsl_monte_miser_params_set(s, ¶ms) ; gsl_monte_miser_integrate(f,xl,xu,dim,calls,r,s,res,err); } #define MONTE_FREE gsl_monte_miser_free #define MONTE_SPEEDUP 2 #define MONTE_ERROR_TEST(err,expected) gsl_test(err > 5.0 * expected, NAME ", %s, abserr[%d] (obs %g vs plain %g)", I->description, i, err, expected) #include "test_main.c" #undef NAME #undef MONTE_STATE #undef MONTE_ALLOC #undef MONTE_PARAMS #undef MONTE_INTEGRATE #undef MONTE_FREE #undef MONTE_ERROR_TEST #undef MONTE_SPEEDUP #endif #ifdef MISER #define NAME "miser(params)" #define MONTE_STATE gsl_monte_miser_state #define MONTE_ALLOC gsl_monte_miser_alloc #define MONTE_PARAMS gsl_monte_miser_params #define MONTE_INTEGRATE(f,xl,xu,dim,calls,r,s,res,err) { gsl_monte_miser_params_get(s, ¶ms) ; params.alpha = 1.5 ; gsl_monte_miser_params_set(s, ¶ms) ; gsl_monte_miser_integrate(f,xl,xu,dim,calls,r,s,res,err); } #define MONTE_FREE gsl_monte_miser_free #define MONTE_SPEEDUP 2 #define MONTE_ERROR_TEST(err,expected) gsl_test(err > 5.0 * expected, NAME ", %s, abserr[%d] (obs %g vs plain %g)", I->description, i, err, expected) #include "test_main.c" #undef NAME #undef MONTE_STATE #undef MONTE_ALLOC #undef MONTE_PARAMS #undef MONTE_INTEGRATE #undef MONTE_FREE #undef MONTE_ERROR_TEST #undef MONTE_SPEEDUP #endif #ifdef VEGAS #define NAME "vegas" #define MONTE_STATE gsl_monte_vegas_state #define MONTE_ALLOC gsl_monte_vegas_alloc #define MONTE_INTEGRATE(f,xl,xu,dim,calls,r,s,res,err) { gsl_monte_vegas_integrate(f,xl,xu,dim,calls,r,s,res,err) ; } #define MONTE_FREE gsl_monte_vegas_free #define MONTE_SPEEDUP 3 #define MONTE_ERROR_TEST(err,expected) gsl_test(err > 3.0 * (expected == 0 ? 1.0/(I->calls/MONTE_SPEEDUP) : expected), NAME ", %s, abserr[%d] (obs %g vs exp %g)", I->description, i, err, expected) ; gsl_test(gsl_monte_vegas_chisq(s) < 0, NAME " returns valid chisq (%g)", gsl_monte_vegas_chisq(s)) #include "test_main.c" #undef NAME #undef MONTE_STATE #undef MONTE_ALLOC #undef MONTE_INTEGRATE #undef MONTE_FREE #undef MONTE_ERROR_TEST #undef MONTE_SPEEDUP #endif #ifdef VEGAS #define NAME "vegas(warm)" #define MONTE_STATE gsl_monte_vegas_state #define MONTE_ALLOC gsl_monte_vegas_alloc #define MONTE_INTEGRATE(f,xl,xu,dim,calls,r,s,res,err) { gsl_monte_vegas_integrate(f,xl,xu,dim,calls,r,s,res,err) ; gsl_monte_vegas_integrate(f,xl,xu,dim,calls,r,s,res,err); } #define MONTE_FREE gsl_monte_vegas_free #define MONTE_SPEEDUP 3 #define MONTE_ERROR_TEST(err,expected) gsl_test(err > 3.0 * (expected == 0 ? 1.0/(I->calls/MONTE_SPEEDUP) : expected), NAME ", %s, abserr[%d] (obs %g vs exp %g)", I->description, i, err, expected); gsl_test(gsl_monte_vegas_chisq(s) < 0, NAME " returns valid chisq (%g)", gsl_monte_vegas_chisq(s)) #include "test_main.c" #undef NAME #undef MONTE_STATE #undef MONTE_ALLOC #undef MONTE_INTEGRATE #undef MONTE_FREE #undef MONTE_ERROR_TEST #undef MONTE_SPEEDUP #endif #ifdef VEGAS #define NAME "vegas(params)" #define MONTE_STATE gsl_monte_vegas_state #define MONTE_ALLOC gsl_monte_vegas_alloc #define MONTE_PARAMS gsl_monte_vegas_params #define MONTE_INTEGRATE(f,xl,xu,dim,calls,r,s,res,err) { gsl_monte_vegas_params_get(s, ¶ms) ; params.alpha = 2 ; params.iterations = 3 ; gsl_monte_vegas_params_set(s, ¶ms) ; gsl_monte_vegas_integrate(f,xl,xu,dim,calls,r,s,res,err); } #define MONTE_FREE gsl_monte_vegas_free #define MONTE_SPEEDUP 3 #define MONTE_ERROR_TEST(err,expected) gsl_test(err > 3.0 * (expected == 0 ? 1.0/(I->calls/MONTE_SPEEDUP) : expected), NAME ", %s, abserr[%d] (obs %g vs exp %g)", I->description, i, err, expected); gsl_test(gsl_monte_vegas_chisq(s) < 0, NAME " returns valid chisq (%g)", gsl_monte_vegas_chisq(s)) #include "test_main.c" #undef NAME #undef MONTE_STATE #undef MONTE_ALLOC #undef MONTE_PARAMS #undef MONTE_INTEGRATE #undef MONTE_FREE #undef MONTE_ERROR_TEST #undef MONTE_SPEEDUP #endif exit (gsl_test_summary ()); } /* Simple constant function */ double fconst (double x[], size_t num_dim, void *params) { return 1; } /* Step-type (pulse) function */ double fstep (double x[], size_t num_dim, void *params) { return (x[0] > 0.1 && x[0] < 0.9) ? 1 : 0; } /* Simple product function */ double f0 (double x[], size_t num_dim, void *params) { double prod = 1.0; unsigned int i; for (i = 0; i < num_dim; ++i) { prod *= 2.0 * x[i]; } return prod; } /* Gaussian centered at 1/2. */ double f1 (double x[], size_t num_dim, void *params) { double a = *(double *)params; double sum = 0.; unsigned int i; for (i = 0; i < num_dim; i++) { double dx = x[i] - 0.5; sum += dx * dx; } return (pow (M_2_SQRTPI / (2. * a), (double) num_dim) * exp (-sum / (a * a))); } /* double gaussian */ double f2 (double x[], size_t num_dim, void *params) { double a = *(double *)params; double sum1 = 0.; double sum2 = 0.; unsigned int i; for (i = 0; i < num_dim; i++) { double dx1 = x[i] - 1. / 3.; double dx2 = x[i] - 2. / 3.; sum1 += dx1 * dx1; sum2 += dx2 * dx2; } return 0.5 * pow (M_2_SQRTPI / (2. * a), num_dim) * (exp (-sum1 / (a * a)) + exp (-sum2 / (a * a))); } /* Tsuda's example */ double f3 (double x[], size_t num_dim, void *params) { double c = *(double *)params; double prod = 1.; unsigned int i; for (i = 0; i < num_dim; i++) { prod *= c / (c + 1) * pow((c + 1) / (c + x[i]), 2.0); } return prod; } void my_error_handler (const char *reason, const char *file, int line, int err) { if (0) printf ("(caught [%s:%d: %s (%d)])\n", file, line, reason, err); } gsl/monte/vegas.c0000644000175000017500000005507013536674414012334 0ustar eddedd/* monte/vegas.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Michael Booth * Copyright (C) 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: MJB */ /* Modified by: Brian Gough, 12/2000 */ /* This is an implementation of the adaptive Monte-Carlo algorithm of G. P. Lepage, originally described in J. Comp. Phys. 27, 192(1978). The current version of the algorithm was described in the Cornell preprint CLNS-80/447 of March, 1980. This code follows most closely the c version by D.R.Yennie, coded in 1984. The input coordinates are x[j], with upper and lower limits xu[j] and xl[j]. The integration length in the j-th direction is delx[j]. Each coordinate x[j] is rescaled to a variable y[j] in the range 0 to 1. The range is divided into bins with boundaries xi[i][j], where i=0 corresponds to y=0 and i=bins to y=1. The grid is refined (ie, bins are adjusted) using d[i][j] which is some variation on the squared sum. A third parameter used in defining the real coordinate using random numbers is called z. It ranges from 0 to bins. Its integer part gives the lower index of the bin into which a call is to be placed, and the remainder gives the location inside the bin. When stratified sampling is used the bins are grouped into boxes, and the algorithm allocates an equal number of function calls to each box. The variable alpha controls how "stiff" the rebinning algorithm is. alpha = 0 means never change the grid. Alpha is typically set between 1 and 2. */ /* configuration headers */ #include /* standard headers */ #include #include /* gsl headers */ #include #include #include #include /* lib-specific headers */ #define BINS_MAX 50 /* even integer, will be divided by two */ /* A separable grid with coordinates and values */ #define COORD(s,i,j) ((s)->xi[(i)*(s)->dim + (j)]) #define NEW_COORD(s,i) ((s)->xin[(i)]) #define VALUE(s,i,j) ((s)->d[(i)*(s)->dim + (j)]) #define USE_ORIGINAL_CHISQ_FORMULA 0 /* predeclare functions */ typedef int coord; static void init_grid (gsl_monte_vegas_state * s, double xl[], double xu[], size_t dim); static void reset_grid_values (gsl_monte_vegas_state * s); static void init_box_coord (gsl_monte_vegas_state * s, coord box[]); static int change_box_coord (gsl_monte_vegas_state * s, coord box[]); static void accumulate_distribution (gsl_monte_vegas_state * s, coord bin[], double y); static void random_point (double x[], coord bin[], double *bin_vol, const coord box[], const double xl[], const double xu[], gsl_monte_vegas_state * s, gsl_rng * r); static void resize_grid (gsl_monte_vegas_state * s, unsigned int bins); static void refine_grid (gsl_monte_vegas_state * s); static void print_lim (gsl_monte_vegas_state * state, double xl[], double xu[], unsigned long dim); static void print_head (gsl_monte_vegas_state * state, unsigned long num_dim, unsigned long calls, unsigned int it_num, unsigned int bins, unsigned int boxes); static void print_res (gsl_monte_vegas_state * state, unsigned int itr, double res, double err, double cum_res, double cum_err, double chi_sq); static void print_dist (gsl_monte_vegas_state * state, unsigned long dim); static void print_grid (gsl_monte_vegas_state * state, unsigned long dim); int gsl_monte_vegas_integrate (gsl_monte_function * f, double xl[], double xu[], size_t dim, size_t calls, gsl_rng * r, gsl_monte_vegas_state * state, double *result, double *abserr) { double cum_int, cum_sig; size_t i, k, it; if (dim != state->dim) { GSL_ERROR ("number of dimensions must match allocated size", GSL_EINVAL); } for (i = 0; i < dim; i++) { if (xu[i] <= xl[i]) { GSL_ERROR ("xu must be greater than xl", GSL_EINVAL); } if (xu[i] - xl[i] > GSL_DBL_MAX) { GSL_ERROR ("Range of integration is too large, please rescale", GSL_EINVAL); } } if (state->stage == 0) { init_grid (state, xl, xu, dim); if (state->verbose >= 0) { print_lim (state, xl, xu, dim); } } if (state->stage <= 1) { state->wtd_int_sum = 0; state->sum_wgts = 0; state->chi_sum = 0; state->it_num = 1; state->samples = 0; state->chisq = 0; } if (state->stage <= 2) { unsigned int bins = state->bins_max; unsigned int boxes = 1; if (state->mode != GSL_VEGAS_MODE_IMPORTANCE_ONLY) { /* shooting for 2 calls/box */ boxes = floor (pow (calls / 2.0, 1.0 / dim)); state->mode = GSL_VEGAS_MODE_IMPORTANCE; if (2 * boxes >= state->bins_max) { /* if bins/box < 2 */ int box_per_bin = GSL_MAX (boxes / state->bins_max, 1); bins = GSL_MIN(boxes / box_per_bin, state->bins_max); boxes = box_per_bin * bins; state->mode = GSL_VEGAS_MODE_STRATIFIED; } } { double tot_boxes = gsl_pow_int ((double) boxes, dim); state->calls_per_box = GSL_MAX (calls / tot_boxes, 2); calls = state->calls_per_box * tot_boxes; } /* total volume of x-space/(avg num of calls/bin) */ state->jac = state->vol * pow ((double) bins, (double) dim) / calls; state->boxes = boxes; /* If the number of bins changes from the previous invocation, bins are expanded or contracted accordingly, while preserving bin density */ if (bins != state->bins) { resize_grid (state, bins); if (state->verbose > 1) { print_grid (state, dim); } } if (state->verbose >= 0) { print_head (state, dim, calls, state->it_num, state->bins, state->boxes); } } state->it_start = state->it_num; cum_int = 0.0; cum_sig = 0.0; for (it = 0; it < state->iterations; it++) { double intgrl = 0.0, intgrl_sq = 0.0; double tss = 0.0; double wgt, var, sig; size_t calls_per_box = state->calls_per_box; double jacbin = state->jac; double *x = state->x; coord *bin = state->bin; state->it_num = state->it_start + it; reset_grid_values (state); init_box_coord (state, state->box); do { volatile double m = 0, q = 0; double f_sq_sum = 0.0; for (k = 0; k < calls_per_box; k++) { volatile double fval; double bin_vol; random_point (x, bin, &bin_vol, state->box, xl, xu, state, r); fval = jacbin * bin_vol * GSL_MONTE_FN_EVAL (f, x); /* recurrence for mean and variance (sum of squares) */ { double d = fval - m; m += d / (k + 1.0); q += d * d * (k / (k + 1.0)); } if (state->mode != GSL_VEGAS_MODE_STRATIFIED) { double f_sq = fval * fval; accumulate_distribution (state, bin, f_sq); } } intgrl += m * calls_per_box; f_sq_sum = q * calls_per_box; tss += f_sq_sum; if (state->mode == GSL_VEGAS_MODE_STRATIFIED) { accumulate_distribution (state, bin, f_sq_sum); } } while (change_box_coord (state, state->box)); /* Compute final results for this iteration */ var = tss / (calls_per_box - 1.0) ; if (var > 0) { wgt = 1.0 / var; } else if (state->sum_wgts > 0) { wgt = state->sum_wgts / state->samples; } else { wgt = 0.0; } intgrl_sq = intgrl * intgrl; sig = sqrt (var); state->result = intgrl; state->sigma = sig; if (wgt > 0.0) { double sum_wgts = state->sum_wgts; double wtd_int_sum = state->wtd_int_sum; double m = (sum_wgts > 0) ? (wtd_int_sum / sum_wgts) : 0; double q = intgrl - m; state->samples++ ; state->sum_wgts += wgt; state->wtd_int_sum += intgrl * wgt; state->chi_sum += intgrl_sq * wgt; cum_int = state->wtd_int_sum / state->sum_wgts; cum_sig = sqrt (1 / state->sum_wgts); #if USE_ORIGINAL_CHISQ_FORMULA /* This is the chisq formula from the original Lepage paper. It computes the variance from - ^2 and can suffer from catastrophic cancellations, e.g. returning negative chisq. */ if (state->samples > 1) { state->chisq = (state->chi_sum - state->wtd_int_sum * cum_int) / (state->samples - 1.0); } #else /* The new formula below computes exactly the same quantity as above but using a stable recurrence */ if (state->samples == 1) { state->chisq = 0; } else { state->chisq *= (state->samples - 2.0); state->chisq += (wgt / (1 + (wgt / sum_wgts))) * q * q; state->chisq /= (state->samples - 1.0); } #endif } else { cum_int += (intgrl - cum_int) / (it + 1.0); cum_sig = 0.0; } if (state->verbose >= 0) { print_res (state, state->it_num, intgrl, sig, cum_int, cum_sig, state->chisq); if (it + 1 == state->iterations && state->verbose > 0) { print_grid (state, dim); } } if (state->verbose > 1) { print_dist (state, dim); } refine_grid (state); if (state->verbose > 1) { print_grid (state, dim); } } /* By setting stage to 1 further calls will generate independent estimates based on the same grid, although it may be rebinned. */ state->stage = 1; *result = cum_int; *abserr = cum_sig; return GSL_SUCCESS; } gsl_monte_vegas_state * gsl_monte_vegas_alloc (size_t dim) { gsl_monte_vegas_state *s = (gsl_monte_vegas_state *) malloc (sizeof (gsl_monte_vegas_state)); if (s == 0) { GSL_ERROR_VAL ("failed to allocate space for vegas state struct", GSL_ENOMEM, 0); } s->delx = (double *) malloc (dim * sizeof (double)); if (s->delx == 0) { free (s); GSL_ERROR_VAL ("failed to allocate space for delx", GSL_ENOMEM, 0); } s->d = (double *) malloc (BINS_MAX * dim * sizeof (double)); if (s->d == 0) { free (s->delx); free (s); GSL_ERROR_VAL ("failed to allocate space for d", GSL_ENOMEM, 0); } s->xi = (double *) malloc ((BINS_MAX + 1) * dim * sizeof (double)); if (s->xi == 0) { free (s->d); free (s->delx); free (s); GSL_ERROR_VAL ("failed to allocate space for xi", GSL_ENOMEM, 0); } s->xin = (double *) malloc ((BINS_MAX + 1) * sizeof (double)); if (s->xin == 0) { free (s->xi); free (s->d); free (s->delx); free (s); GSL_ERROR_VAL ("failed to allocate space for xin", GSL_ENOMEM, 0); } s->weight = (double *) malloc (BINS_MAX * sizeof (double)); if (s->weight == 0) { free (s->xin); free (s->xi); free (s->d); free (s->delx); free (s); GSL_ERROR_VAL ("failed to allocate space for xin", GSL_ENOMEM, 0); } s->box = (coord *) malloc (dim * sizeof (coord)); if (s->box == 0) { free (s->weight); free (s->xin); free (s->xi); free (s->d); free (s->delx); free (s); GSL_ERROR_VAL ("failed to allocate space for box", GSL_ENOMEM, 0); } s->bin = (coord *) malloc (dim * sizeof (coord)); if (s->bin == 0) { free (s->box); free (s->weight); free (s->xin); free (s->xi); free (s->d); free (s->delx); free (s); GSL_ERROR_VAL ("failed to allocate space for bin", GSL_ENOMEM, 0); } s->x = (double *) malloc (dim * sizeof (double)); if (s->x == 0) { free (s->bin); free (s->box); free (s->weight); free (s->xin); free (s->xi); free (s->d); free (s->delx); free (s); GSL_ERROR_VAL ("failed to allocate space for x", GSL_ENOMEM, 0); } s->dim = dim; s->bins_max = BINS_MAX; gsl_monte_vegas_init (s); return s; } /* Set some default values and whatever */ int gsl_monte_vegas_init (gsl_monte_vegas_state * state) { state->stage = 0; state->alpha = 1.5; state->verbose = -1; state->iterations = 5; state->mode = GSL_VEGAS_MODE_IMPORTANCE; state->chisq = 0; state->bins = state->bins_max; state->ostream = stdout; return GSL_SUCCESS; } void gsl_monte_vegas_free (gsl_monte_vegas_state * s) { RETURN_IF_NULL (s); free (s->x); free (s->delx); free (s->d); free (s->xi); free (s->xin); free (s->weight); free (s->box); free (s->bin); free (s); } double gsl_monte_vegas_chisq (const gsl_monte_vegas_state * s) { return s->chisq; } void gsl_monte_vegas_runval (const gsl_monte_vegas_state * s, double * result, double * sigma) { *result = s->result; *sigma = s->sigma; } void gsl_monte_vegas_params_get (const gsl_monte_vegas_state * s, gsl_monte_vegas_params * p) { p->alpha = s->alpha; p->iterations = s->iterations; p->stage = s->stage; p->mode = s->mode; p->verbose = s->verbose; p->ostream = s->ostream; } void gsl_monte_vegas_params_set (gsl_monte_vegas_state * s, const gsl_monte_vegas_params * p) { s->alpha = p->alpha; s->iterations = p->iterations; s->stage = p->stage; s->mode = p->mode; s->verbose = p->verbose; s->ostream = p->ostream; } static void init_box_coord (gsl_monte_vegas_state * s, coord box[]) { size_t i; size_t dim = s->dim; for (i = 0; i < dim; i++) { box[i] = 0; } } /* change_box_coord steps through the box coord like {0,0}, {0, 1}, {0, 2}, {0, 3}, {1, 0}, {1, 1}, {1, 2}, ... */ static int change_box_coord (gsl_monte_vegas_state * s, coord box[]) { int j = s->dim - 1; int ng = s->boxes; while (j >= 0) { box[j] = (box[j] + 1) % ng; if (box[j] != 0) { return 1; } j--; } return 0; } static void init_grid (gsl_monte_vegas_state * s, double xl[], double xu[], size_t dim) { size_t j; double vol = 1.0; s->bins = 1; for (j = 0; j < dim; j++) { double dx = xu[j] - xl[j]; s->delx[j] = dx; vol *= dx; COORD (s, 0, j) = 0.0; COORD (s, 1, j) = 1.0; } s->vol = vol; } static void reset_grid_values (gsl_monte_vegas_state * s) { size_t i, j; size_t dim = s->dim; size_t bins = s->bins; for (i = 0; i < bins; i++) { for (j = 0; j < dim; j++) { VALUE (s, i, j) = 0.0; } } } static void accumulate_distribution (gsl_monte_vegas_state * s, coord bin[], double y) { size_t j; size_t dim = s->dim; for (j = 0; j < dim; j++) { int i = bin[j]; VALUE (s, i, j) += y; } } static void random_point (double x[], coord bin[], double *bin_vol, const coord box[], const double xl[], const double xu[], gsl_monte_vegas_state * s, gsl_rng * r) { /* Use the random number generator r to return a random position x in a given box. The value of bin gives the bin location of the random position (there may be several bins within a given box) */ double vol = 1.0; size_t j; size_t dim = s->dim; size_t bins = s->bins; size_t boxes = s->boxes; DISCARD_POINTER(xu); /* prevent warning about unused parameter */ for (j = 0; j < dim; ++j) { /* box[j] + ran gives the position in the box units, while z is the position in bin units. */ double z = ((box[j] + gsl_rng_uniform_pos (r)) / boxes) * bins; int k = z; double y, bin_width; bin[j] = k; if (k == 0) { bin_width = COORD (s, 1, j); y = z * bin_width; } else { bin_width = COORD (s, k + 1, j) - COORD (s, k, j); y = COORD (s, k, j) + (z - k) * bin_width; } x[j] = xl[j] + y * s->delx[j]; vol *= bin_width; } *bin_vol = vol; } static void resize_grid (gsl_monte_vegas_state * s, unsigned int bins) { size_t j, k; size_t dim = s->dim; /* weight is ratio of bin sizes */ double pts_per_bin = (double) s->bins / (double) bins; for (j = 0; j < dim; j++) { double xold; double xnew = 0; double dw = 0; int i = 1; for (k = 1; k <= s->bins; k++) { dw += 1.0; xold = xnew; xnew = COORD (s, k, j); for (; dw > pts_per_bin; i++) { dw -= pts_per_bin; NEW_COORD (s, i) = xnew - (xnew - xold) * dw; } } for (k = 1 ; k < bins; k++) { COORD(s, k, j) = NEW_COORD(s, k); } COORD (s, bins, j) = 1; } s->bins = bins; } static void refine_grid (gsl_monte_vegas_state * s) { size_t i, j, k; size_t dim = s->dim; size_t bins = s->bins; for (j = 0; j < dim; j++) { double grid_tot_j, tot_weight; double * weight = s->weight; double oldg = VALUE (s, 0, j); double newg = VALUE (s, 1, j); VALUE (s, 0, j) = (oldg + newg) / 2; grid_tot_j = VALUE (s, 0, j); /* This implements gs[i][j] = (gs[i-1][j]+gs[i][j]+gs[i+1][j])/3 */ for (i = 1; i < bins - 1; i++) { double rc = oldg + newg; oldg = newg; newg = VALUE (s, i + 1, j); VALUE (s, i, j) = (rc + newg) / 3; grid_tot_j += VALUE (s, i, j); } VALUE (s, bins - 1, j) = (newg + oldg) / 2; grid_tot_j += VALUE (s, bins - 1, j); tot_weight = 0; for (i = 0; i < bins; i++) { weight[i] = 0; if (VALUE (s, i, j) > 0) { oldg = grid_tot_j / VALUE (s, i, j); /* damped change */ weight[i] = pow (((oldg - 1) / oldg / log (oldg)), s->alpha); } tot_weight += weight[i]; #ifdef DEBUG printf("weight[%d] = %g\n", i, weight[i]); #endif } { double pts_per_bin = tot_weight / bins; double xold; double xnew = 0; double dw = 0; i = 1; for (k = 0; k < bins; k++) { dw += weight[k]; xold = xnew; xnew = COORD (s, k + 1, j); for (; dw > pts_per_bin; i++) { dw -= pts_per_bin; NEW_COORD (s, i) = xnew - (xnew - xold) * dw / weight[k]; } } for (k = 1 ; k < bins ; k++) { COORD(s, k, j) = NEW_COORD(s, k); } COORD (s, bins, j) = 1; } } } static void print_lim (gsl_monte_vegas_state * state, double xl[], double xu[], unsigned long dim) { unsigned long j; fprintf (state->ostream, "The limits of integration are:\n"); for (j = 0; j < dim; ++j) fprintf (state->ostream, "\nxl[%lu]=%f xu[%lu]=%f", j, xl[j], j, xu[j]); fprintf (state->ostream, "\n"); fflush (state->ostream); } static void print_head (gsl_monte_vegas_state * state, unsigned long num_dim, unsigned long calls, unsigned int it_num, unsigned int bins, unsigned int boxes) { fprintf (state->ostream, "\nnum_dim=%lu, calls=%lu, it_num=%d, max_it_num=%d ", num_dim, calls, it_num, state->iterations); fprintf (state->ostream, "verb=%d, alph=%.2f,\nmode=%d, bins=%d, boxes=%d\n", state->verbose, state->alpha, state->mode, bins, boxes); fprintf (state->ostream, "\n single.......iteration "); fprintf (state->ostream, "accumulated......results \n"); fprintf (state->ostream, "iteration integral sigma integral "); fprintf (state->ostream, " sigma chi-sq/it\n\n"); fflush (state->ostream); } static void print_res (gsl_monte_vegas_state * state, unsigned int itr, double res, double err, double cum_res, double cum_err, double chi_sq) { fprintf (state->ostream, "%4d %6.4e %10.2e %6.4e %8.2e %10.2e\n", itr, res, err, cum_res, cum_err, chi_sq); fflush (state->ostream); } static void print_dist (gsl_monte_vegas_state * state, unsigned long dim) { unsigned long i, j; int p = state->verbose; if (p < 1) return; for (j = 0; j < dim; ++j) { fprintf (state->ostream, "\n axis %lu \n", j); fprintf (state->ostream, " x g\n"); for (i = 0; i < state->bins; i++) { fprintf (state->ostream, "weight [%11.2e , %11.2e] = ", COORD (state, i, j), COORD(state,i+1,j)); fprintf (state->ostream, " %11.2e\n", VALUE (state, i, j)); } fprintf (state->ostream, "\n"); } fprintf (state->ostream, "\n"); fflush (state->ostream); } static void print_grid (gsl_monte_vegas_state * state, unsigned long dim) { unsigned long i, j; int p = state->verbose; if (p < 1) return; for (j = 0; j < dim; ++j) { fprintf (state->ostream, "\n axis %lu \n", j); fprintf (state->ostream, " x \n"); for (i = 0; i <= state->bins; i++) { fprintf (state->ostream, "%11.2e", COORD (state, i, j)); if (i % 5 == 4) fprintf (state->ostream, "\n"); } fprintf (state->ostream, "\n"); } fprintf (state->ostream, "\n"); fflush (state->ostream); } gsl/monte/test_main.c0000644000175000017500000000277413536674414013215 0ustar eddeddfor (I = problems ; I->f != 0; I++) { size_t i; double res, err; gsl_rng * r; if (I->dim > 3) { continue ; } r = gsl_rng_alloc (gsl_rng_default); for (i = 0; i < TRIALS ; i++) { MONTE_STATE *s = MONTE_ALLOC (I->dim); #ifdef MONTE_PARAMS MONTE_PARAMS params; #endif I->f->dim = I->dim; MONTE_INTEGRATE (I->f, I->xl, I->xu, I->dim, I->calls / MONTE_SPEEDUP, r, s, &res, &err); gsl_test_abs (res, I->expected_result, 5 * GSL_MAX(err, 1024*GSL_DBL_EPSILON), NAME ", %s, result[%d]", I->description, i); MONTE_ERROR_TEST (err, I->expected_error); result[i] = res; error[i] = err; MONTE_FREE (s); } /* Check the results for consistency as an ensemble */ { double mean = 0, sumd2 = 0, sd; /* We need to compute the mean exactly when all terms are equal, to get an exact zero for the standard deviation (this is a common case when integrating a constant). */ for (i = 0; i < TRIALS; i++) { mean += (result[i] - mean) / (i + 1.0); } for (i = 0; i < TRIALS; i++) { sumd2 += pow(result[i] - mean, 2.0); } sd = sqrt(sumd2 / (TRIALS-1.0)) ; for (i = 0; i < TRIALS; i++) { gsl_test_factor (error[i], sd, 5.0, NAME ", %s, abserr[%d] vs sd", I->description, i); } } gsl_rng_free (r); } gsl/wavelet/0000755000175000017500000000000014057135461011372 5ustar eddeddgsl/wavelet/Makefile.in0000664000175000017500000010711514057135461013446 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = wavelet ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslwavelet_la_LIBADD = am_libgslwavelet_la_OBJECTS = dwt.lo wavelet.lo bspline.lo \ daubechies.lo haar.lo libgslwavelet_la_OBJECTS = $(am_libgslwavelet_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslwavelet.la ../matrix/libgslmatrix.la \ ../vector/libgslvector.la ../blas/libgslblas.la \ ../cblas/libgslcblas.la ../block/libgslblock.la \ ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/bspline.Plo \ ./$(DEPDIR)/daubechies.Plo ./$(DEPDIR)/dwt.Plo \ ./$(DEPDIR)/haar.Plo ./$(DEPDIR)/test.Po \ ./$(DEPDIR)/wavelet.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslwavelet_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslwavelet_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslwavelet.la pkginclude_HEADERS = gsl_wavelet.h gsl_wavelet2d.h AM_CPPFLAGS = -I$(top_srcdir) libgslwavelet_la_SOURCES = dwt.c wavelet.c bspline.c daubechies.c haar.c TESTS = $(check_PROGRAMS) test_LDADD = libgslwavelet.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu wavelet/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu wavelet/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslwavelet.la: $(libgslwavelet_la_OBJECTS) $(libgslwavelet_la_DEPENDENCIES) $(EXTRA_libgslwavelet_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslwavelet_la_OBJECTS) $(libgslwavelet_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bspline.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daubechies.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/haar.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wavelet.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/bspline.Plo -rm -f ./$(DEPDIR)/daubechies.Plo -rm -f ./$(DEPDIR)/dwt.Plo -rm -f ./$(DEPDIR)/haar.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/wavelet.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/bspline.Plo -rm -f ./$(DEPDIR)/daubechies.Plo -rm -f ./$(DEPDIR)/dwt.Plo -rm -f ./$(DEPDIR)/haar.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/wavelet.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/wavelet/dwt.c0000644000175000017500000002512113536674414012344 0ustar eddedd/* wavelet/dwt.c * * Copyright (C) 2004 Ivo Alxneit * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* function dwt_step is based on the public domain function pwt.c * available from http://www.numerical-recipes.com */ #include #include #include #include #define ELEMENT(a,stride,i) ((a)[(stride)*(i)]) static int binary_logn (const size_t n); static void dwt_step (const gsl_wavelet * w, double *a, size_t stride, size_t n, gsl_wavelet_direction dir, gsl_wavelet_workspace * work); static int binary_logn (const size_t n) { size_t ntest; size_t logn = 0; size_t k = 1; while (k < n) { k *= 2; logn++; } ntest = ((size_t)1 << logn); if (n != ntest) { return -1; /* n is not a power of 2 */ } return logn; } static void dwt_step (const gsl_wavelet * w, double *a, size_t stride, size_t n, gsl_wavelet_direction dir, gsl_wavelet_workspace * work) { double ai, ai1; size_t i, ii; size_t jf; size_t k; size_t n1, ni, nh, nmod; for (i = 0; i < work->n; i++) { work->scratch[i] = 0.0; } nmod = w->nc * n; nmod -= w->offset; /* center support */ n1 = n - 1; nh = n >> 1; if (dir == gsl_wavelet_forward) { for (ii = 0, i = 0; i < n; i += 2, ii++) { double h = 0, g = 0; ni = i + nmod; for (k = 0; k < w->nc; k++) { jf = n1 & (ni + k); h += w->h1[k] * ELEMENT (a, stride, jf); g += w->g1[k] * ELEMENT (a, stride, jf); } work->scratch[ii] += h; work->scratch[ii + nh] += g; } } else { for (ii = 0, i = 0; i < n; i += 2, ii++) { ai = ELEMENT (a, stride, ii); ai1 = ELEMENT (a, stride, ii + nh); ni = i + nmod; for (k = 0; k < w->nc; k++) { jf = (n1 & (ni + k)); work->scratch[jf] += (w->h2[k] * ai + w->g2[k] * ai1); } } } for (i = 0; i < n; i++) { ELEMENT (a, stride, i) = work->scratch[i]; } } int gsl_wavelet_transform (const gsl_wavelet * w, double *data, size_t stride, size_t n, gsl_wavelet_direction dir, gsl_wavelet_workspace * work) { size_t i; if (work->n < n) { GSL_ERROR ("not enough workspace provided", GSL_EINVAL); } if (binary_logn (n) == -1) { GSL_ERROR ("n is not a power of 2", GSL_EINVAL); } if (n < 2) { return GSL_SUCCESS; } if (dir == gsl_wavelet_forward) { for (i = n; i >= 2; i >>= 1) { dwt_step (w, data, stride, i, dir, work); } } else { for (i = 2; i <= n; i <<= 1) { dwt_step (w, data, stride, i, dir, work); } } return GSL_SUCCESS; } int gsl_wavelet_transform_forward (const gsl_wavelet * w, double *data, size_t stride, size_t n, gsl_wavelet_workspace * work) { return gsl_wavelet_transform (w, data, stride, n, gsl_wavelet_forward, work); } int gsl_wavelet_transform_inverse (const gsl_wavelet * w, double *data, size_t stride, size_t n, gsl_wavelet_workspace * work) { return gsl_wavelet_transform (w, data, stride, n, gsl_wavelet_backward, work); } /* Leaving this out for now BJG */ #if 0 int gsl_dwt_vector (const gsl_wavelet * w, gsl_vector *v, gsl_wavelet_direction dir, gsl_wavelet_workspace * work) { return gsl_dwt (w, v->data, v->stride, v->size, dir, work); } #endif int gsl_wavelet2d_transform (const gsl_wavelet * w, double *data, size_t tda, size_t size1, size_t size2, gsl_wavelet_direction dir, gsl_wavelet_workspace * work) { size_t i; if (size1 != size2) { GSL_ERROR ("2d dwt works only with square matrix", GSL_EINVAL); } if (work->n < size1) { GSL_ERROR ("not enough workspace provided", GSL_EINVAL); } if (binary_logn (size1) == -1) { GSL_ERROR ("n is not a power of 2", GSL_EINVAL); } if (size1 < 2) { return GSL_SUCCESS; } if (dir == gsl_wavelet_forward) { for (i = 0; i < size1; i++) /* for every row j */ { gsl_wavelet_transform (w, &ELEMENT(data, tda, i), 1, size1, dir, work); } for (i = 0; i < size2; i++) /* for every column j */ { gsl_wavelet_transform (w, &ELEMENT(data, 1, i), tda, size2, dir, work); } } else { for (i = 0; i < size2; i++) /* for every column j */ { gsl_wavelet_transform (w, &ELEMENT(data, 1, i), tda, size2, dir, work); } for (i = 0; i < size1; i++) /* for every row j */ { gsl_wavelet_transform (w, &ELEMENT(data, tda, i), 1, size1, dir, work); } } return GSL_SUCCESS; } int gsl_wavelet2d_nstransform (const gsl_wavelet * w, double *data, size_t tda, size_t size1, size_t size2, gsl_wavelet_direction dir, gsl_wavelet_workspace * work) { size_t i, j; if (size1 != size2) { GSL_ERROR ("2d dwt works only with square matrix", GSL_EINVAL); } if (work->n < size1) { GSL_ERROR ("not enough workspace provided", GSL_EINVAL); } if (binary_logn (size1) == -1) { GSL_ERROR ("n is not a power of 2", GSL_EINVAL); } if (size1 < 2) { return GSL_SUCCESS; } if (dir == gsl_wavelet_forward) { for (i = size1; i >= 2; i >>= 1) { for (j = 0; j < i; j++) /* for every row j */ { dwt_step (w, &ELEMENT(data, tda, j), 1, i, dir, work); } for (j = 0; j < i; j++) /* for every column j */ { dwt_step (w, &ELEMENT(data, 1, j), tda, i, dir, work); } } } else { for (i = 2; i <= size1; i <<= 1) { for (j = 0; j < i; j++) /* for every column j */ { dwt_step (w, &ELEMENT(data, 1, j), tda, i, dir, work); } for (j = 0; j < i; j++) /* for every row j */ { dwt_step (w, &ELEMENT(data, tda, j), 1, i, dir, work); } } } return GSL_SUCCESS; } int gsl_wavelet2d_transform_forward (const gsl_wavelet * w, double *data, size_t tda, size_t size1, size_t size2, gsl_wavelet_workspace * work) { return gsl_wavelet2d_transform (w, data, tda, size1, size2, gsl_wavelet_forward, work); } int gsl_wavelet2d_transform_inverse (const gsl_wavelet * w, double *data, size_t tda, size_t size1, size_t size2, gsl_wavelet_workspace * work) { return gsl_wavelet2d_transform (w, data, tda, size1, size2, gsl_wavelet_backward, work); } int gsl_wavelet2d_nstransform_forward (const gsl_wavelet * w, double *data, size_t tda, size_t size1, size_t size2, gsl_wavelet_workspace * work) { return gsl_wavelet2d_nstransform (w, data, tda, size1, size2, gsl_wavelet_forward, work); } int gsl_wavelet2d_nstransform_inverse (const gsl_wavelet * w, double *data, size_t tda, size_t size1, size_t size2, gsl_wavelet_workspace * work) { return gsl_wavelet2d_nstransform (w, data, tda, size1, size2, gsl_wavelet_backward, work); } int gsl_wavelet2d_transform_matrix (const gsl_wavelet * w, gsl_matrix * a, gsl_wavelet_direction dir, gsl_wavelet_workspace * work) { return gsl_wavelet2d_transform (w, a->data, a->tda, a->size1, a->size2, dir, work); } int gsl_wavelet2d_transform_matrix_forward (const gsl_wavelet * w, gsl_matrix * a, gsl_wavelet_workspace * work) { return gsl_wavelet2d_transform (w, a->data, a->tda, a->size1, a->size2, gsl_wavelet_forward, work); } int gsl_wavelet2d_transform_matrix_inverse (const gsl_wavelet * w, gsl_matrix * a, gsl_wavelet_workspace * work) { return gsl_wavelet2d_transform (w, a->data, a->tda, a->size1, a->size2, gsl_wavelet_backward, work); } int gsl_wavelet2d_nstransform_matrix (const gsl_wavelet * w, gsl_matrix * a, gsl_wavelet_direction dir, gsl_wavelet_workspace * work) { return gsl_wavelet2d_nstransform (w, a->data, a->tda, a->size1, a->size2, dir, work); } int gsl_wavelet2d_nstransform_matrix_forward (const gsl_wavelet * w, gsl_matrix * a, gsl_wavelet_workspace * work) { return gsl_wavelet2d_nstransform (w, a->data, a->tda, a->size1, a->size2, gsl_wavelet_forward, work); } int gsl_wavelet2d_nstransform_matrix_inverse (const gsl_wavelet * w, gsl_matrix * a, gsl_wavelet_workspace * work) { return gsl_wavelet2d_nstransform (w, a->data, a->tda, a->size1, a->size2, gsl_wavelet_backward, work); } gsl/wavelet/gsl_wavelet.h0000644000175000017500000000574313536674414014077 0ustar eddedd/* wavelet/gsl_wavelet.h * * Copyright (C) 2004 Ivo Alxneit * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_WAVELET_H__ #define __GSL_WAVELET_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef enum { gsl_wavelet_forward = 1, gsl_wavelet_backward = -1 } gsl_wavelet_direction; typedef struct { const char *name; int (*init) (const double **h1, const double **g1, const double **h2, const double **g2, size_t * nc, size_t * offset, size_t member); } gsl_wavelet_type; typedef struct { const gsl_wavelet_type *type; const double *h1; const double *g1; const double *h2; const double *g2; size_t nc; size_t offset; } gsl_wavelet; typedef struct { double *scratch; size_t n; } gsl_wavelet_workspace; GSL_VAR const gsl_wavelet_type *gsl_wavelet_daubechies; GSL_VAR const gsl_wavelet_type *gsl_wavelet_daubechies_centered; GSL_VAR const gsl_wavelet_type *gsl_wavelet_haar; GSL_VAR const gsl_wavelet_type *gsl_wavelet_haar_centered; GSL_VAR const gsl_wavelet_type *gsl_wavelet_bspline; GSL_VAR const gsl_wavelet_type *gsl_wavelet_bspline_centered; gsl_wavelet *gsl_wavelet_alloc (const gsl_wavelet_type * T, size_t k); void gsl_wavelet_free (gsl_wavelet * w); const char *gsl_wavelet_name (const gsl_wavelet * w); gsl_wavelet_workspace *gsl_wavelet_workspace_alloc (size_t n); void gsl_wavelet_workspace_free (gsl_wavelet_workspace * work); int gsl_wavelet_transform (const gsl_wavelet * w, double *data, size_t stride, size_t n, gsl_wavelet_direction dir, gsl_wavelet_workspace * work); int gsl_wavelet_transform_forward (const gsl_wavelet * w, double *data, size_t stride, size_t n, gsl_wavelet_workspace * work); int gsl_wavelet_transform_inverse (const gsl_wavelet * w, double *data, size_t stride, size_t n, gsl_wavelet_workspace * work); __END_DECLS #endif /* __GSL_WAVELET_H__ */ gsl/wavelet/gsl_wavelet2d.h0000644000175000017500000001012713536674414014315 0ustar eddedd/* wavelet/gsl_wavelet.h * * Copyright (C) 2004 Ivo Alxneit * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_WAVELET2D_H__ #define __GSL_WAVELET2D_H__ #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_wavelet2d_transform (const gsl_wavelet * w, double *data, size_t tda, size_t size1, size_t size2, gsl_wavelet_direction dir, gsl_wavelet_workspace * work); int gsl_wavelet2d_transform_forward (const gsl_wavelet * w, double *data, size_t tda, size_t size1, size_t size2, gsl_wavelet_workspace * work); int gsl_wavelet2d_transform_inverse (const gsl_wavelet * w, double *data, size_t tda, size_t size1, size_t size2, gsl_wavelet_workspace * work); int gsl_wavelet2d_nstransform (const gsl_wavelet * w, double *data, size_t tda, size_t size1, size_t size2, gsl_wavelet_direction dir, gsl_wavelet_workspace * work); int gsl_wavelet2d_nstransform_forward (const gsl_wavelet * w, double *data, size_t tda, size_t size1, size_t size2, gsl_wavelet_workspace * work); int gsl_wavelet2d_nstransform_inverse (const gsl_wavelet * w, double *data, size_t tda, size_t size1, size_t size2, gsl_wavelet_workspace * work); int gsl_wavelet2d_transform_matrix (const gsl_wavelet * w, gsl_matrix * a, gsl_wavelet_direction dir, gsl_wavelet_workspace * work); int gsl_wavelet2d_transform_matrix_forward (const gsl_wavelet * w, gsl_matrix * a, gsl_wavelet_workspace * work); int gsl_wavelet2d_transform_matrix_inverse (const gsl_wavelet * w, gsl_matrix * a, gsl_wavelet_workspace * work); int gsl_wavelet2d_nstransform_matrix (const gsl_wavelet * w, gsl_matrix * a, gsl_wavelet_direction dir, gsl_wavelet_workspace * work); int gsl_wavelet2d_nstransform_matrix_forward (const gsl_wavelet * w, gsl_matrix * a, gsl_wavelet_workspace * work); int gsl_wavelet2d_nstransform_matrix_inverse (const gsl_wavelet * w, gsl_matrix * a, gsl_wavelet_workspace * work); __END_DECLS #endif /* __GSL_WAVELET2D_H__ */ gsl/wavelet/ChangeLog0000644000175000017500000000171013536674414013152 0ustar eddedd2009-07-09 Brian Gough * wavelet.c (gsl_wavelet_free): handle NULL argument in free (gsl_wavelet_workspace_free): handle NULL argument in free 2008-10-13 Brian Gough * test.c (test_2d): change typename variable to name to avoid conflict with C++ typename keyword 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2008-01-03 Brian Gough * dwt.c (dwt_step): move pointer dereference out of loop 2006-03-16 Brian Gough * changed to gsl_wavelet_forward and gsl_wavelet_backward enums throughout internally instead of forward and backward. 2004-12-29 Brian Gough * gsl_wavelet.h: added missing includes, use GSL_VAR instead of extern 2004-07-23 Brian Gough * added wavelet directory from Ivo Alxneit. gsl/wavelet/Makefile.am0000644000175000017500000000103513536675317013437 0ustar eddeddnoinst_LTLIBRARIES = libgslwavelet.la pkginclude_HEADERS = gsl_wavelet.h gsl_wavelet2d.h AM_CPPFLAGS = -I$(top_srcdir) libgslwavelet_la_SOURCES = dwt.c wavelet.c bspline.c daubechies.c haar.c check_PROGRAMS = test TESTS = $(check_PROGRAMS) test_LDADD = libgslwavelet.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c gsl/wavelet/haar.c0000644000175000017500000000373013536674414012463 0ustar eddedd/* wavelet/haar.c * * Copyright (C) 2004 Ivo Alxneit * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include static const double ch_2[2] = { M_SQRT1_2, M_SQRT1_2 }; static const double cg_2[2] = { M_SQRT1_2, -(M_SQRT1_2) }; static int haar_init (const double **h1, const double **g1, const double **h2, const double **g2, size_t * nc, size_t * offset, const size_t member) { if (member != 2) { return GSL_FAILURE; } *h1 = ch_2; *g1 = cg_2; *h2 = ch_2; *g2 = cg_2; *nc = 2; *offset = 0; return GSL_SUCCESS; } static int haar_centered_init (const double **h1, const double **g1, const double **h2, const double **g2, size_t * nc, size_t * offset, const size_t member) { if (member != 2) { return GSL_FAILURE; } *h1 = ch_2; *g1 = cg_2; *h2 = ch_2; *g2 = cg_2; *nc = 2; *offset = 1; return GSL_SUCCESS; } static const gsl_wavelet_type haar_type = { "haar", &haar_init }; static const gsl_wavelet_type haar_centered_type = { "haar-centered", &haar_centered_init }; const gsl_wavelet_type *gsl_wavelet_haar = &haar_type; const gsl_wavelet_type *gsl_wavelet_haar_centered = &haar_centered_type; gsl/wavelet/TODO0000644000175000017500000000076213536674414012076 0ustar eddedd# -*- org -*- #+CATEGORY: wavelet * Implement more wavelet types: Check the literature to find out what are commonly used types. Candidates could be coiflets and symmlets. ** Coefficients for coiflets and symmlets found so far are only with a precision of about eight digts. This is probaly insufficient. * Wavelet packet transform: Should include utility functions for selecting the coefficients according to "dwt-type", "best basis" or "best level". * Continuous wavelet transform. gsl/wavelet/test.c0000644000175000017500000001466513536674414012540 0ustar eddedd#include #include #include #include #include #include #include #include #include #define N_BS 11 double urand (void); double urand (void) { static unsigned long int x = 1; x = (1103515245 * x + 12345) & 0x7fffffffUL; return x / 2147483648.0; } const size_t member[N_BS] = { 309, 307, 305, 303, 301, 208, 206, 204, 202, 105, 103 }; void test_1d (size_t N, size_t stride, const gsl_wavelet_type * T, size_t member); void test_2d (size_t N, size_t tda, const gsl_wavelet_type * T, size_t member, int type); int main (int argc, char **argv) { size_t i, N, stride, tda; const int S = 1, NS = 2; /* Standard & Non-standard transforms */ /* One-dimensional tests */ for (N = 1; N <= 16384; N *= 2) { for (stride = 1; stride <= 5; stride++) { for (i = 0; i < N_BS; i++) { test_1d (N, stride, gsl_wavelet_bspline, member[i]); test_1d (N, stride, gsl_wavelet_bspline_centered, member[i]); } for (i = 4; i <= 20; i += 2) { test_1d (N, stride, gsl_wavelet_daubechies, i); test_1d (N, stride, gsl_wavelet_daubechies_centered, i); } test_1d (N, stride, gsl_wavelet_haar, 2); test_1d (N, stride, gsl_wavelet_haar_centered, 2); } } /* Two-dimensional tests */ for (N = 1; N <= 64; N *= 2) { for (tda = N; tda <= N + 5; tda++) { for (i = 0; i < N_BS; i++) { test_2d (N, tda, gsl_wavelet_bspline, member[i], S); test_2d (N, tda, gsl_wavelet_bspline_centered, member[i], S); test_2d (N, tda, gsl_wavelet_bspline, member[i], NS); test_2d (N, tda, gsl_wavelet_bspline_centered, member[i], NS); } for (i = 4; i <= 20; i += 2) { test_2d (N, tda, gsl_wavelet_daubechies, i, S); test_2d (N, tda, gsl_wavelet_daubechies_centered, i, S); test_2d (N, tda, gsl_wavelet_daubechies, i, NS); test_2d (N, tda, gsl_wavelet_daubechies_centered, i, NS); } test_2d (N, tda, gsl_wavelet_haar, 2, S); test_2d (N, tda, gsl_wavelet_haar_centered, 2, S); test_2d (N, tda, gsl_wavelet_haar, 2, NS); test_2d (N, tda, gsl_wavelet_haar_centered, 2, NS); } } exit (gsl_test_summary ()); } void test_1d (size_t N, size_t stride, const gsl_wavelet_type * T, size_t member) { gsl_wavelet_workspace *work; gsl_vector *v1, *v2, *vdelta; gsl_vector_view v; gsl_wavelet *w; size_t i; double *data = (double *)malloc (N * stride * sizeof (double)); for (i = 0; i < N * stride; i++) data[i] = 12345.0 + i; v = gsl_vector_view_array_with_stride (data, stride, N); v1 = &(v.vector); for (i = 0; i < N; i++) { gsl_vector_set (v1, i, urand ()); } v2 = gsl_vector_alloc (N); gsl_vector_memcpy (v2, v1); vdelta = gsl_vector_alloc (N); work = gsl_wavelet_workspace_alloc (N); w = gsl_wavelet_alloc (T, member); gsl_wavelet_transform_forward (w, v2->data, v2->stride, v2->size, work); gsl_wavelet_transform_inverse (w, v2->data, v2->stride, v2->size, work); for (i = 0; i < N; i++) { double x1 = gsl_vector_get (v1, i); double x2 = gsl_vector_get (v2, i); gsl_vector_set (vdelta, i, fabs (x1 - x2)); } { double x1, x2; i = gsl_vector_max_index (vdelta); x1 = gsl_vector_get (v1, i); x2 = gsl_vector_get (v2, i); gsl_test (fabs (x2 - x1) > N * 1e-15, "%s(%d), n = %d, stride = %d, maxerr = %g", gsl_wavelet_name (w), member, N, stride, fabs (x2 - x1)); } if (stride > 1) { int status = 0; for (i = 0; i < N * stride; i++) { if (i % stride == 0) continue; status |= (data[i] != (12345.0 + i)); } gsl_test (status, "%s(%d) other data untouched, n = %d, stride = %d", gsl_wavelet_name (w), member, N, stride); } gsl_wavelet_workspace_free (work); gsl_wavelet_free (w); gsl_vector_free (vdelta); gsl_vector_free (v2); free (data); } void test_2d (size_t N, size_t tda, const gsl_wavelet_type * T, size_t member, int type) { gsl_wavelet_workspace *work; gsl_matrix *m2; gsl_wavelet *w; gsl_matrix *m1; gsl_matrix *mdelta; gsl_matrix_view m; size_t i; size_t j; double *data = (double *)malloc (N * tda * sizeof (double)); const char * name; name = (type == 1) ? "standard" : "nonstd" ; for (i = 0; i < N * tda; i++) data[i] = 12345.0 + i; m = gsl_matrix_view_array_with_tda (data, N, N, tda); m1 = &(m.matrix); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { gsl_matrix_set (m1, i, j, urand()); } } m2 = gsl_matrix_alloc (N, N); gsl_matrix_memcpy (m2, m1); mdelta = gsl_matrix_alloc (N, N); work = gsl_wavelet_workspace_alloc (N); w = gsl_wavelet_alloc (T, member); switch (type) { case 1: gsl_wavelet2d_transform_matrix_forward (w, m2, work); gsl_wavelet2d_transform_matrix_inverse (w, m2, work); break; case 2: gsl_wavelet2d_nstransform_matrix_forward (w, m2, work); gsl_wavelet2d_nstransform_matrix_inverse (w, m2, work); break; } for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { double x1 = gsl_matrix_get (m1, i, j); double x2 = gsl_matrix_get (m2, i, j ); gsl_matrix_set (mdelta, i, j, fabs (x1 - x2)); } } { double x1, x2; gsl_matrix_max_index (mdelta, &i, &j); x1 = gsl_matrix_get (m1, i, j); x2 = gsl_matrix_get (m2, i, j); gsl_test (fabs (x2 - x1) > N * 1e-15, "%s(%d)-2d %s, n = %d, tda = %d, maxerr = %g", gsl_wavelet_name (w), member, name, N, tda, fabs (x2 - x1)); } if (tda > N) { int status = 0; for (i = 0; i < N ; i++) { for (j = N; j < tda; j++) { status |= (data[i*tda+j] != (12345.0 + (i*tda+j))); } } gsl_test (status, "%s(%d)-2d %s other data untouched, n = %d, tda = %d", gsl_wavelet_name (w), member, name, N, tda); } free (data); gsl_wavelet_workspace_free (work); gsl_wavelet_free (w); gsl_matrix_free (m2); gsl_matrix_free (mdelta); } gsl/wavelet/daubechies.c0000644000175000017500000003000413536674414013636 0ustar eddedd/* wavelet/daubechies.c * * Copyright (C) 2004 Ivo Alxneit * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Coefficients for Daubechies wavelets of extremal phase are from * I. Daubechies, "Orthonormal Bases of Compactly Supported Wavelets", * Communications on Pure and Applied Mathematics, 41 (1988) 909--996 * (table 1). * Additional digits have been obtained using the Mathematica package * Daubechies.m by Tong Chen & Meng Xu available at * http://www.cwp.mines.edu/wavelets/. */ #include #include #include static const double h_4[4] = { 0.48296291314453414337487159986, 0.83651630373780790557529378092, 0.22414386804201338102597276224, -0.12940952255126038117444941881 }; static const double g_4[4] = { -0.12940952255126038117444941881, -0.22414386804201338102597276224, 0.83651630373780790557529378092, -0.48296291314453414337487159986 }; static const double h_6[6] = { 0.33267055295008261599851158914, 0.80689150931109257649449360409, 0.45987750211849157009515194215, -0.13501102001025458869638990670, -0.08544127388202666169281916918, 0.03522629188570953660274066472 }; static const double g_6[6] = { 0.03522629188570953660274066472, 0.08544127388202666169281916918, -0.13501102001025458869638990670, -0.45987750211849157009515194215, 0.80689150931109257649449360409, -0.33267055295008261599851158914 }; static const double h_8[8] = { 0.23037781330889650086329118304, 0.71484657055291564708992195527, 0.63088076792985890788171633830, -0.02798376941685985421141374718, -0.18703481171909308407957067279, 0.03084138183556076362721936253, 0.03288301166688519973540751355, -0.01059740178506903210488320852 }; static const double g_8[8] = { -0.01059740178506903210488320852, -0.03288301166688519973540751355, 0.03084138183556076362721936253, 0.18703481171909308407957067279, -0.02798376941685985421141374718, -0.63088076792985890788171633830, 0.71484657055291564708992195527, -0.23037781330889650086329118304 }; static const double h_10[10] = { 0.16010239797419291448072374802, 0.60382926979718967054011930653, 0.72430852843777292772807124410, 0.13842814590132073150539714634, -0.24229488706638203186257137947, -0.03224486958463837464847975506, 0.07757149384004571352313048939, -0.00624149021279827427419051911, -0.01258075199908199946850973993, 0.00333572528547377127799818342 }; static const double g_10[10] = { 0.00333572528547377127799818342, 0.01258075199908199946850973993, -0.00624149021279827427419051911, -0.07757149384004571352313048939, -0.03224486958463837464847975506, 0.24229488706638203186257137947, 0.13842814590132073150539714634, -0.72430852843777292772807124410, 0.60382926979718967054011930653, -0.16010239797419291448072374802 }; static const double h_12[12] = { 0.11154074335010946362132391724, 0.49462389039845308567720417688, 0.75113390802109535067893449844, 0.31525035170919762908598965481, -0.22626469396543982007631450066, -0.12976686756726193556228960588, 0.09750160558732304910234355254, 0.02752286553030572862554083950, -0.03158203931748602956507908070, 0.00055384220116149613925191840, 0.00477725751094551063963597525, -0.00107730108530847956485262161 }; static const double g_12[12] = { -0.00107730108530847956485262161, -0.00477725751094551063963597525, 0.00055384220116149613925191840, 0.03158203931748602956507908070, 0.02752286553030572862554083950, -0.09750160558732304910234355254, -0.12976686756726193556228960588, 0.22626469396543982007631450066, 0.31525035170919762908598965481, -0.75113390802109535067893449844, 0.49462389039845308567720417688, -0.11154074335010946362132391724 }; static const double h_14[14] = { 0.07785205408500917901996352196, 0.39653931948191730653900039094, 0.72913209084623511991694307034, 0.46978228740519312247159116097, -0.14390600392856497540506836221, -0.22403618499387498263814042023, 0.07130921926683026475087657050, 0.08061260915108307191292248036, -0.03802993693501441357959206160, -0.01657454163066688065410767489, 0.01255099855609984061298988603, 0.00042957797292136652113212912, -0.00180164070404749091526826291, 0.00035371379997452024844629584 }; static const double g_14[14] = { 0.00035371379997452024844629584, 0.00180164070404749091526826291, 0.00042957797292136652113212912, -0.01255099855609984061298988603, -0.01657454163066688065410767489, 0.03802993693501441357959206160, 0.08061260915108307191292248036, -0.07130921926683026475087657050, -0.22403618499387498263814042023, 0.14390600392856497540506836221, 0.46978228740519312247159116097, -0.72913209084623511991694307034, 0.39653931948191730653900039094, -0.07785205408500917901996352196 }; static const double h_16[16] = { 0.05441584224310400995500940520, 0.31287159091429997065916237551, 0.67563073629728980680780076705, 0.58535468365420671277126552005, -0.01582910525634930566738054788, -0.28401554296154692651620313237, 0.00047248457391328277036059001, 0.12874742662047845885702928751, -0.01736930100180754616961614887, -0.04408825393079475150676372324, 0.01398102791739828164872293057, 0.00874609404740577671638274325, -0.00487035299345157431042218156, -0.00039174037337694704629808036, 0.00067544940645056936636954757, -0.00011747678412476953373062823 }; static const double g_16[16] = { -0.00011747678412476953373062823, -0.00067544940645056936636954757, -0.00039174037337694704629808036, 0.00487035299345157431042218156, 0.00874609404740577671638274325, -0.01398102791739828164872293057, -0.04408825393079475150676372324, 0.01736930100180754616961614887, 0.12874742662047845885702928751, -0.00047248457391328277036059001, -0.28401554296154692651620313237, 0.01582910525634930566738054788, 0.58535468365420671277126552005, -0.67563073629728980680780076705, 0.31287159091429997065916237551, -0.05441584224310400995500940520 }; static const double h_18[18] = { 0.03807794736387834658869765888, 0.24383467461259035373204158165, 0.60482312369011111190307686743, 0.65728807805130053807821263905, 0.13319738582500757619095494590, -0.29327378327917490880640319524, -0.09684078322297646051350813354, 0.14854074933810638013507271751, 0.03072568147933337921231740072, -0.06763282906132997367564227483, 0.00025094711483145195758718975, 0.02236166212367909720537378270, -0.00472320475775139727792570785, -0.00428150368246342983449679500, 0.00184764688305622647661912949, 0.00023038576352319596720521639, -0.00025196318894271013697498868, 0.00003934732031627159948068988 }; static const double g_18[18] = { 0.00003934732031627159948068988, 0.00025196318894271013697498868, 0.00023038576352319596720521639, -0.00184764688305622647661912949, -0.00428150368246342983449679500, 0.00472320475775139727792570785, 0.02236166212367909720537378270, -0.00025094711483145195758718975, -0.06763282906132997367564227483, -0.03072568147933337921231740072, 0.14854074933810638013507271751, 0.09684078322297646051350813354, -0.29327378327917490880640319524, -0.13319738582500757619095494590, 0.65728807805130053807821263905, -0.60482312369011111190307686743, 0.24383467461259035373204158165, -0.03807794736387834658869765888 }; static const double h_20[20] = { 0.02667005790055555358661744877, 0.18817680007769148902089297368, 0.52720118893172558648174482796, 0.68845903945360356574187178255, 0.28117234366057746074872699845, -0.24984642432731537941610189792, -0.19594627437737704350429925432, 0.12736934033579326008267723320, 0.09305736460357235116035228984, -0.07139414716639708714533609308, -0.02945753682187581285828323760, 0.03321267405934100173976365318, 0.00360655356695616965542329142, -0.01073317548333057504431811411, 0.00139535174705290116578931845, 0.00199240529518505611715874224, -0.00068585669495971162656137098, -0.00011646685512928545095148097, 0.00009358867032006959133405013, -0.00001326420289452124481243668 }; static const double g_20[20] = { -0.00001326420289452124481243668, -0.00009358867032006959133405013, -0.00011646685512928545095148097, 0.00068585669495971162656137098, 0.00199240529518505611715874224, -0.00139535174705290116578931845, -0.01073317548333057504431811411, -0.00360655356695616965542329142, 0.03321267405934100173976365318, 0.02945753682187581285828323760, -0.07139414716639708714533609308, -0.09305736460357235116035228984, 0.12736934033579326008267723320, 0.19594627437737704350429925432, -0.24984642432731537941610189792, -0.28117234366057746074872699845, 0.68845903945360356574187178255, -0.52720118893172558648174482796, 0.18817680007769148902089297368, -0.02667005790055555358661744877 }; static int daubechies_init (const double **h1, const double **g1, const double **h2, const double **g2, size_t * nc, size_t * offset, size_t member) { switch (member) { case 4: *h1 = h_4; *g1 = g_4; *h2 = h_4; *g2 = g_4; break; case 6: *h1 = h_6; *g1 = g_6; *h2 = h_6; *g2 = g_6; break; case 8: *h1 = h_8; *g1 = g_8; *h2 = h_8; *g2 = g_8; break; case 10: *h1 = h_10; *g1 = g_10; *h2 = h_10; *g2 = g_10; break; case 12: *h1 = h_12; *g1 = g_12; *h2 = h_12; *g2 = g_12; break; case 14: *h1 = h_14; *g1 = g_14; *h2 = h_14; *g2 = g_14; break; case 16: *h1 = h_16; *g1 = g_16; *h2 = h_16; *g2 = g_16; break; case 18: *h1 = h_18; *g1 = g_18; *h2 = h_18; *g2 = g_18; break; case 20: *h1 = h_20; *g1 = g_20; *h2 = h_20; *g2 = g_20; break; default: return GSL_FAILURE; } *nc = member; *offset = 0; return GSL_SUCCESS; } static int daubechies_centered_init (const double **h1, const double **g1, const double **h2, const double **g2, size_t * nc, size_t * offset, size_t member) { switch (member) { case 4: *h1 = h_4; *g1 = g_4; *h2 = h_4; *g2 = g_4; break; case 6: *h1 = h_6; *g1 = g_6; *h2 = h_6; *g2 = g_6; break; case 8: *h1 = h_8; *g1 = g_8; *h2 = h_8; *g2 = g_8; break; case 10: *h1 = h_10; *g1 = g_10; *h2 = h_10; *g2 = g_10; break; case 12: *h1 = h_12; *g1 = g_12; *h2 = h_12; *g2 = g_12; break; case 14: *h1 = h_14; *g1 = g_14; *h2 = h_14; *g2 = g_14; break; case 16: *h1 = h_16; *g1 = g_16; *h2 = h_16; *g2 = g_16; break; case 18: *h1 = h_18; *g1 = g_18; *h2 = h_18; *g2 = g_18; break; case 20: *h1 = h_20; *g1 = g_20; *h2 = h_20; *g2 = g_20; break; default: return GSL_FAILURE; } *nc = member; *offset = (member >> 1); return GSL_SUCCESS; } static const gsl_wavelet_type daubechies_type = { "daubechies", &daubechies_init }; static const gsl_wavelet_type daubechies_centered_type = { "daubechies-centered", &daubechies_centered_init }; const gsl_wavelet_type *gsl_wavelet_daubechies = &daubechies_type; const gsl_wavelet_type *gsl_wavelet_daubechies_centered = &daubechies_centered_type; gsl/wavelet/bspline.c0000644000175000017500000003674613536674414013221 0ustar eddedd/* wavelet/bspline.c * * Copyright (C) 2004 Ivo Alxneit * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Coefficients are from A. Cohen, I. Daubechies, and J.-C. Feauveau; * "Biorthogonal Bases of Compactly Supported Wavelets", Communications * on Pure and Applied Mathematics, 45 (1992) 485--560 (table 6.1). * * Note the following errors in table 1: * * N = 2, N~ = 4, m0~ * the second term in z^-1 (45/64 z^-1) should be left out. * * N = 3, N~ = 7, m0~ * the term 336z^-3 should read 363z^-3. */ #include #include #include #include static const double h1_103[6] = { -0.0883883476483184405501055452631, 0.0883883476483184405501055452631, M_SQRT1_2, M_SQRT1_2, 0.0883883476483184405501055452631, -0.0883883476483184405501055452631 }; static const double g2_103[6] = { -0.0883883476483184405501055452631, -0.0883883476483184405501055452631, M_SQRT1_2, -(M_SQRT1_2), 0.0883883476483184405501055452631, 0.0883883476483184405501055452631 }; static const double h1_105[10] = { 0.0165728151840597076031447897368, -0.0165728151840597076031447897368, -0.1215339780164378557563951247368, 0.1215339780164378557563951247368, M_SQRT1_2, M_SQRT1_2, 0.1215339780164378557563951247368, -0.1215339780164378557563951247368, -0.0165728151840597076031447897368, 0.0165728151840597076031447897368 }; static const double g2_105[10] = { 0.0165728151840597076031447897368, 0.0165728151840597076031447897368, -0.1215339780164378557563951247368, -0.1215339780164378557563951247368, M_SQRT1_2, -(M_SQRT1_2), 0.1215339780164378557563951247368, 0.1215339780164378557563951247368, -0.0165728151840597076031447897368, -0.0165728151840597076031447897368 }; static const double g1_1[10] = { 0.0, 0.0, 0.0, 0.0, M_SQRT1_2, -(M_SQRT1_2), 0.0, 0.0, 0.0, 0.0 }; static const double h2_1[10] = { 0.0, 0.0, 0.0, 0.0, M_SQRT1_2, M_SQRT1_2, 0.0, 0.0, 0.0, 0.0 }; static const double h1_202[6] = { -0.1767766952966368811002110905262, 0.3535533905932737622004221810524, 1.0606601717798212866012665431573, 0.3535533905932737622004221810524, -0.1767766952966368811002110905262, 0.0 }; static const double g2_202[6] = { 0.0, -0.1767766952966368811002110905262, -0.3535533905932737622004221810524, 1.0606601717798212866012665431573, -0.3535533905932737622004221810524, -0.1767766952966368811002110905262 }; static const double h1_204[10] = { 0.0331456303681194152062895794737, -0.0662912607362388304125791589473, -0.1767766952966368811002110905262, 0.4198446513295125926130013399998, 0.9943689110435824561886873842099, 0.4198446513295125926130013399998, -0.1767766952966368811002110905262, -0.0662912607362388304125791589473, 0.0331456303681194152062895794737, 0.0 }; static const double g2_204[10] = { 0.0, 0.0331456303681194152062895794737, 0.0662912607362388304125791589473, -0.1767766952966368811002110905262, -0.4198446513295125926130013399998, 0.9943689110435824561886873842099, -0.4198446513295125926130013399998, -0.1767766952966368811002110905262, 0.0662912607362388304125791589473, 0.0331456303681194152062895794737 }; static const double h1_206[14] = { -0.0069053396600248781679769957237, 0.0138106793200497563359539914474, 0.0469563096881691715422435709210, -0.1077232986963880994204411332894, -0.1698713556366120029322340948025, 0.4474660099696121052849093228945, 0.9667475524034829435167794013152, 0.4474660099696121052849093228945, -0.1698713556366120029322340948025, -0.1077232986963880994204411332894, 0.0469563096881691715422435709210, 0.0138106793200497563359539914474, -0.0069053396600248781679769957237, 0.0 }; static const double g2_206[14] = { 0.0, -0.0069053396600248781679769957237, -0.0138106793200497563359539914474, 0.0469563096881691715422435709210, 0.1077232986963880994204411332894, -0.1698713556366120029322340948025, -0.4474660099696121052849093228945, 0.9667475524034829435167794013152, -0.4474660099696121052849093228945, -0.1698713556366120029322340948025, 0.1077232986963880994204411332894, 0.0469563096881691715422435709210, -0.0138106793200497563359539914474, -0.0069053396600248781679769957237, }; static const double h1_208[18] = { 0.0015105430506304420992449678146, -0.0030210861012608841984899356291, -0.0129475118625466465649568669819, 0.0289161098263541773284036695929, 0.0529984818906909399392234421792, -0.1349130736077360572068505539514, -0.1638291834340902345352542235443, 0.4625714404759165262773590010400, 0.9516421218971785225243297231697, 0.4625714404759165262773590010400, -0.1638291834340902345352542235443, -0.1349130736077360572068505539514, 0.0529984818906909399392234421792, 0.0289161098263541773284036695929, -0.0129475118625466465649568669819, -0.0030210861012608841984899356291, 0.0015105430506304420992449678146, 0.0 }; static const double g2_208[18] = { 0.0, 0.0015105430506304420992449678146, 0.0030210861012608841984899356291, -0.0129475118625466465649568669819, -0.0289161098263541773284036695929, 0.0529984818906909399392234421792, 0.1349130736077360572068505539514, -0.1638291834340902345352542235443, -0.4625714404759165262773590010400, 0.9516421218971785225243297231697, -0.4625714404759165262773590010400, -0.1638291834340902345352542235443, 0.1349130736077360572068505539514, 0.0529984818906909399392234421792, -0.0289161098263541773284036695929, -0.0129475118625466465649568669819, 0.0030210861012608841984899356291, 0.0015105430506304420992449678146, }; static const double h2_2[18] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3535533905932737622004221810524, 0.7071067811865475244008443621048, 0.3535533905932737622004221810524, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; static const double g1_2[18] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.3535533905932737622004221810524, 0.7071067811865475244008443621048, -0.3535533905932737622004221810524, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; static const double h1_301[4] = { -0.3535533905932737622004221810524, 1.0606601717798212866012665431573, 1.0606601717798212866012665431573, -0.3535533905932737622004221810524 }; static const double g2_301[4] = { 0.3535533905932737622004221810524, 1.0606601717798212866012665431573, -1.0606601717798212866012665431573, -0.3535533905932737622004221810524 }; static const double h1_303[8] = { 0.0662912607362388304125791589473, -0.1988737822087164912377374768420, -0.1546796083845572709626847042104, 0.9943689110435824561886873842099, 0.9943689110435824561886873842099, -0.1546796083845572709626847042104, -0.1988737822087164912377374768420, 0.0662912607362388304125791589473 }; static const double g2_303[8] = { -0.0662912607362388304125791589473, -0.1988737822087164912377374768420, 0.1546796083845572709626847042104, 0.9943689110435824561886873842099, -0.9943689110435824561886873842099, -0.1546796083845572709626847042104, 0.1988737822087164912377374768420, 0.0662912607362388304125791589473 }; static const double h1_305[12] = { -0.0138106793200497563359539914474, 0.0414320379601492690078619743421, 0.0524805814161890740766251675000, -0.2679271788089652729175074340788, -0.0718155324642587329469607555263, 0.9667475524034829435167794013152, 0.9667475524034829435167794013152, -0.0718155324642587329469607555263, -0.2679271788089652729175074340788, 0.0524805814161890740766251675000, 0.0414320379601492690078619743421, -0.0138106793200497563359539914474 }; static const double g2_305[12] = { 0.0138106793200497563359539914474, 0.0414320379601492690078619743421, -0.0524805814161890740766251675000, -0.2679271788089652729175074340788, 0.0718155324642587329469607555263, 0.9667475524034829435167794013152, -0.9667475524034829435167794013152, -0.0718155324642587329469607555263, 0.2679271788089652729175074340788, 0.0524805814161890740766251675000, -0.0414320379601492690078619743421, -0.0138106793200497563359539914474 }; static const double h1_307[16] = { 0.0030210861012608841984899356291, -0.0090632583037826525954698068873, -0.0168317654213106405344439270765, 0.0746639850740189951912512662623, 0.0313329787073628846871956180962, -0.3011591259228349991008967259990, -0.0264992409453454699696117210896, 0.9516421218971785225243297231697, 0.9516421218971785225243297231697, -0.0264992409453454699696117210896, -0.3011591259228349991008967259990, 0.0313329787073628846871956180962, 0.0746639850740189951912512662623, -0.0168317654213106405344439270765, -0.0090632583037826525954698068873, 0.0030210861012608841984899356291 }; static const double g2_307[16] = { -0.0030210861012608841984899356291, -0.0090632583037826525954698068873, 0.0168317654213106405344439270765, 0.0746639850740189951912512662623, -0.0313329787073628846871956180962, -0.3011591259228349991008967259990, 0.0264992409453454699696117210896, 0.9516421218971785225243297231697, -0.9516421218971785225243297231697, -0.0264992409453454699696117210896, 0.3011591259228349991008967259990, 0.0313329787073628846871956180962, -0.0746639850740189951912512662623, -0.0168317654213106405344439270765, 0.0090632583037826525954698068873, 0.0030210861012608841984899356291 }; static const double h1_309[20] = { -0.0006797443727836989446602355165, 0.0020392331183510968339807065496, 0.0050603192196119810324706421788, -0.0206189126411055346546938106687, -0.0141127879301758447558029850103, 0.0991347824942321571990197448581, 0.0123001362694193142367090236328, -0.3201919683607785695513833204624, 0.0020500227115698857061181706055, 0.9421257006782067372990864259380, 0.9421257006782067372990864259380, 0.0020500227115698857061181706055, -0.3201919683607785695513833204624, 0.0123001362694193142367090236328, 0.0991347824942321571990197448581, -0.0141127879301758447558029850103, -0.0206189126411055346546938106687, 0.0050603192196119810324706421788, 0.0020392331183510968339807065496, -0.0006797443727836989446602355165 }; static const double g2_309[20] = { 0.0006797443727836989446602355165, 0.0020392331183510968339807065496, -0.0050603192196119810324706421788, -0.0206189126411055346546938106687, 0.0141127879301758447558029850103, 0.0991347824942321571990197448581, -0.0123001362694193142367090236328, -0.3201919683607785695513833204624, -0.0020500227115698857061181706055, 0.9421257006782067372990864259380, -0.9421257006782067372990864259380, 0.0020500227115698857061181706055, 0.3201919683607785695513833204624, 0.0123001362694193142367090236328, -0.0991347824942321571990197448581, -0.0141127879301758447558029850103, 0.0206189126411055346546938106687, 0.0050603192196119810324706421788, -0.0020392331183510968339807065496, -0.0006797443727836989446602355165 }; static const double h2_3[20] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1767766952966368811002110905262, 0.5303300858899106433006332715786, 0.5303300858899106433006332715786, 0.1767766952966368811002110905262, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; static const double g1_3[20] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.1767766952966368811002110905262, 0.5303300858899106433006332715786, -0.5303300858899106433006332715786, 0.1767766952966368811002110905262, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; static int bspline_init (const double **h1, const double **g1, const double **h2, const double **g2, size_t * nc, size_t * offset, size_t member) { switch (member) { case 103: *nc = 6; *h1 = h1_103; *g1 = &g1_1[2]; *h2 = &h2_1[2]; *g2 = g2_103; break; case 105: *nc = 10; *h1 = h1_105; *g1 = g1_1; *h2 = h2_1; *g2 = g2_105; break; case 202: *nc = 6; *h1 = h1_202; *g1 = &g1_2[6]; *h2 = &h2_2[6]; *g2 = g2_202; break; case 204: *nc = 10; *h1 = h1_204; *g1 = &g1_2[4]; *h2 = &h2_2[4]; *g2 = g2_204; break; case 206: *nc = 14; *h1 = h1_206; *g1 = &g1_2[2]; *h2 = &h2_2[2]; *g2 = g2_206; break; case 208: *nc = 18; *h1 = h1_208; *g1 = g1_2; *h2 = h2_2; *g2 = g2_208; break; case 301: *nc = 4; *h1 = h1_301; *g1 = &g1_3[8]; *h2 = &h2_3[8]; *g2 = g2_301; break; case 303: *nc = 8; *h1 = h1_303; *g1 = &g1_3[6]; *h2 = &h2_3[6]; *g2 = g2_303; break; case 305: *nc = 12; *h1 = h1_305; *g1 = &g1_3[4]; *h2 = &h2_3[4]; *g2 = g2_305; break; case 307: *nc = 16; *h1 = h1_307; *g1 = &g1_3[2]; *h2 = &h2_3[2]; *g2 = g2_307; break; case 309: *nc = 20; *h1 = h1_309; *g1 = g1_3; *h2 = h2_3; *g2 = g2_309; break; default: return GSL_FAILURE; } *offset = 0; return GSL_SUCCESS; } static int bspline_centered_init (const double **h1, const double **g1, const double **h2, const double **g2, size_t * nc, size_t * offset, size_t member) { switch (member) { case 103: *nc = 6; *h1 = h1_103; *g1 = &g1_1[2]; *h2 = &h2_1[2]; *g2 = g2_103; break; case 105: *nc = 10; *h1 = h1_105; *g1 = g1_1; *h2 = h2_1; *g2 = g2_105; break; case 202: *nc = 6; *h1 = h1_202; *g1 = &g1_2[6]; *h2 = &h2_2[6]; *g2 = g2_202; break; case 204: *nc = 10; *h1 = h1_204; *g1 = &g1_2[4]; *h2 = &h2_2[4]; *g2 = g2_204; break; case 206: *nc = 14; *h1 = h1_206; *g1 = &g1_2[2]; *h2 = &h2_2[2]; *g2 = g2_206; break; case 208: *nc = 18; *h1 = h1_208; *g1 = g1_2; *h2 = h2_2; *g2 = g2_208; break; case 301: *nc = 4; *h1 = h1_301; *g1 = &g1_3[8]; *h2 = &h2_3[8]; *g2 = g2_301; break; case 303: *nc = 8; *h1 = h1_303; *g1 = &g1_3[6]; *h2 = &h2_3[6]; *g2 = g2_303; break; case 305: *nc = 12; *h1 = h1_305; *g1 = &g1_3[4]; *h2 = &h2_3[4]; *g2 = g2_305; break; case 307: *nc = 16; *h1 = h1_307; *g1 = &g1_3[2]; *h2 = &h2_3[2]; *g2 = g2_307; break; case 309: *nc = 20; *h1 = h1_309; *g1 = g1_3; *h2 = h2_3; *g2 = g2_309; break; default: return GSL_FAILURE; } *offset = ((*nc) >> 1); return GSL_SUCCESS; } static const gsl_wavelet_type bspline_type = { "bspline", &bspline_init }; static const gsl_wavelet_type bspline_centered_type = { "bspline-centered", &bspline_centered_init }; const gsl_wavelet_type *gsl_wavelet_bspline = &bspline_type; const gsl_wavelet_type *gsl_wavelet_bspline_centered = &bspline_centered_type; gsl/wavelet/wavelet.c0000644000175000017500000000613313536674414013217 0ustar eddedd/* wavelet/wavelet.c * * Copyright (C) 2004, 2009 Ivo Alxneit * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include gsl_wavelet * gsl_wavelet_alloc (const gsl_wavelet_type * T, size_t k) { int status; gsl_wavelet *w = (gsl_wavelet *) malloc (sizeof (gsl_wavelet)); if (w == NULL) { GSL_ERROR_VAL ("failed to allocate space for wavelet struct", GSL_ENOMEM, 0); }; w->type = T; status = (T->init) (&(w->h1), &(w->g1), &(w->h2), &(w->g2), &(w->nc), &(w->offset), k); if (status) { free (w); GSL_ERROR_VAL ("invalid wavelet member", GSL_EINVAL, 0); } return w; } void gsl_wavelet_free (gsl_wavelet * w) { RETURN_IF_NULL (w); free (w); } const char * gsl_wavelet_name (const gsl_wavelet * w) { return w->type->name; } /* Let's not export this for now (BJG) */ #if 0 void gsl_wavelet_print (const gsl_wavelet * w) { size_t n = w->nc; size_t i; printf ("Wavelet type: %s\n", w->type->name); printf (" h1(%d):%12.8f g1(%d):%12.8f h2(%d):%12.8f g2(%d):%12.8f\n", 0, w->h1[0], 0, w->g1[0], 0, w->h2[0], 0, w->g2[0]); for (i = 1; i < (n < 10 ? n : 10); i++) { printf (" h1(%d):%12.8f g1(%d):%12.8f h2(%d):%12.8f g2(%d):%12.8f\n", i, w->h1[i], i, w->g1[i], i, w->h2[i], i, w->g2[i]); } for (; i < n; i++) { printf ("h1(%d):%12.8f g1(%d):%12.8f h2(%d):%12.8f g2(%d):%12.8f\n", i, w->h1[i], i, w->g1[i], i, w->h2[i], i, w->g2[i]); } } #endif gsl_wavelet_workspace * gsl_wavelet_workspace_alloc (size_t n) { gsl_wavelet_workspace *work; if (n == 0) { GSL_ERROR_VAL ("length n must be positive integer", GSL_EDOM, 0); } work = (gsl_wavelet_workspace *) malloc (sizeof (gsl_wavelet_workspace)); if (work == NULL) { GSL_ERROR_VAL ("failed to allocate struct", GSL_ENOMEM, 0); } work->n = n; work->scratch = (double *) malloc (n * sizeof (double)); if (work->scratch == NULL) { /* error in constructor, prevent memory leak */ free (work); GSL_ERROR_VAL ("failed to allocate scratch space", GSL_ENOMEM, 0); } return work; } void gsl_wavelet_workspace_free (gsl_wavelet_workspace * work) { RETURN_IF_NULL (work); /* release scratch space */ free (work->scratch); work->scratch = NULL; free (work); } gsl/configure0000775000175000017500000170754014152016063011642 0ustar eddedd#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for gsl 2.7.1. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='gsl' PACKAGE_TARNAME='gsl' PACKAGE_VERSION='2.7.1' PACKAGE_STRING='gsl 2.7.1' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_unique_file="gsl_math.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_func_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS HAVE_DARWIN86_IEEE_INTERFACE HAVE_DARWIN_IEEE_INTERFACE HAVE_OPENBSD_IEEE_INTERFACE HAVE_NETBSD_IEEE_INTERFACE HAVE_OS2EMX_IEEE_INTERFACE HAVE_FREEBSD_IEEE_INTERFACE HAVE_AIX_IEEE_INTERFACE HAVE_IRIX_IEEE_INTERFACE HAVE_TRU64_IEEE_INTERFACE HAVE_HPUX_IEEE_INTERFACE HAVE_HPUX11_IEEE_INTERFACE HAVE_SOLARIS_IEEE_INTERFACE HAVE_SUNOS4_IEEE_INTERFACE HAVE_GNUX86_IEEE_INTERFACE HAVE_GNUPPC_IEEE_INTERFACE HAVE_GNUM68K_IEEE_INTERFACE HAVE_GNUSPARC_IEEE_INTERFACE LIBOBJS GSL_LIBADD GSL_LDFLAGS GSLCBLAS_LDFLAGS GSL_LIBM GSL_LIBS GSL_CFLAGS LIBM LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP LIBTOOL OBJDUMP DLLTOOL AS LN_S CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build GSL_MINOR_VERSION GSL_MAJOR_VERSION SED GSL_LT_CBLAS_VERSION GSL_LT_VERSION MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP LT_SYS_LIBRARY_PATH' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures gsl 2.7.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/gsl] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of gsl 2.7.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor LT_SYS_LIBRARY_PATH User-defined run-time library search path. Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF gsl configure 2.7.1 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. */ #include #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR # ------------------------------------------------------------------ # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR. ac_fn_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 printf %s "checking whether $as_decl_name is declared... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` eval ac_save_FLAGS=\$$6 as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval $6=\$ac_save_FLAGS fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_check_decl # ac_fn_c_try_run LINENO # ---------------------- # Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that # executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by gsl $as_me 2.7.1, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_func_c_list " vprintf HAVE_VPRINTF" # Auxiliary files required by this configure script. ac_aux_files="ltmain.sh compile config.guess config.sub missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='gsl' VERSION='2.7.1' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ac_config_headers="$ac_config_headers config.h" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 printf %s "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test ${enable_maintainer_mode+y} then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else $as_nop USE_MAINTAINER_MODE=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 printf "%s\n" "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE GSL_CURRENT=27 GSL_REVISION=0 GSL_AGE=0 CBLAS_CURRENT=0 CBLAS_REVISION=0 CBLAS_AGE=0 GSL_LT_VERSION="${GSL_CURRENT}:${GSL_REVISION}:${GSL_AGE}" GSL_LT_CBLAS_VERSION="${CBLAS_CURRENT}:${CBLAS_REVISION}:${CBLAS_AGE}" case "$VERSION" in *+) ;; *) printf "%s\n" "#define RELEASED /**/" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed GSL_MAJOR_VERSION=`echo "$VERSION" | $SED 's/\([^.][^.]*\).*/\1/'` GSL_MINOR_VERSION=`echo "$VERSION" | $SED 's/[^.][^.]*.\([^.][^.]*\).*/\1/'` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 printf "%s\n" "no, using $LN_S" >&6; } fi case `pwd` in *\ * | *\ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.6' macro_revision='2.4.6' ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 printf %s "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 printf "%s\n" "printf" >&6; } ;; print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 printf "%s\n" "print -r" >&6; } ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 printf "%s\n" "cat" >&6; } ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 printf %s "checking for fgrep... " >&6; } if test ${ac_cv_path_FGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in fgrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 printf "%s\n" "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else $as_nop with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test ${lt_cv_path_NM+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 printf "%s\n" "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DUMPBIN+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 printf "%s\n" "$DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DUMPBIN+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 printf %s "checking the name lister ($NM) interface... " >&6; } if test ${lt_cv_nm_interface+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 printf "%s\n" "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 printf %s "checking the maximum length of command line arguments... " >&6; } if test ${lt_cv_sys_max_cmd_len+y} then : printf %s "(cached) " >&6 else $as_nop i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 printf "%s\n" "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 printf %s "checking how to convert $build file names to $host format... " >&6; } if test ${lt_cv_to_host_file_cmd+y} then : printf %s "(cached) " >&6 else $as_nop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 printf %s "checking how to convert $build file names to toolchain format... " >&6; } if test ${lt_cv_to_tool_file_cmd+y} then : printf %s "(cached) " >&6 else $as_nop #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 printf %s "checking for $LD option to reload object files... " >&6; } if test ${lt_cv_ld_reload_flag+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_reload_flag='-r' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 printf "%s\n" "$OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 printf %s "checking how to recognize dependent libraries... " >&6; } if test ${lt_cv_deplibs_check_method+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 printf "%s\n" "$DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 printf %s "checking how to associate runtime and link libraries... " >&6; } if test ${lt_cv_sharedlib_from_linklib_cmd+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 printf "%s\n" "$AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 printf "%s\n" "$ac_ct_AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 printf %s "checking for archiver @FILE support... " >&6; } if test ${lt_cv_ar_at_file+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 printf "%s\n" "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 printf "%s\n" "$RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 printf "%s\n" "$ac_ct_RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 printf %s "checking command to parse $NM output from $compiler object... " >&6; } if test ${lt_cv_sys_global_symbol_pipe+y} then : printf %s "(cached) " >&6 else $as_nop # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 printf "%s\n" "failed" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 printf "%s\n" "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 printf %s "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test ${with_sysroot+y} then : withval=$with_sysroot; else $as_nop with_sysroot=no fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 printf "%s\n" "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 printf "%s\n" "${lt_sysroot:-no}" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 printf %s "checking for a working dd... " >&6; } if test ${ac_cv_path_lt_DD+y} then : printf %s "(cached) " >&6 else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in dd do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 printf "%s\n" "$ac_cv_path_lt_DD" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 printf %s "checking how to truncate binary pipes... " >&6; } if test ${lt_cv_truncate_bin+y} then : printf %s "(cached) " >&6 else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 printf "%s\n" "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test ${enable_libtool_lock+y} then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 printf %s "checking whether the C compiler needs -belf... " >&6; } if test ${lt_cv_cc_needs_belf+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_cc_needs_belf=yes else $as_nop lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 printf "%s\n" "$MANIFEST_TOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if test ${lt_cv_path_mainfest_tool+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DSYMUTIL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 printf "%s\n" "$DSYMUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NMEDIT+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 printf "%s\n" "$NMEDIT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_NMEDIT+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 printf "%s\n" "$ac_ct_NMEDIT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_LIPO+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 printf "%s\n" "$LIPO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_LIPO+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 printf "%s\n" "$ac_ct_LIPO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 printf "%s\n" "$OTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 printf "%s\n" "$ac_ct_OTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL64+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 printf "%s\n" "$OTOOL64" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL64+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 printf "%s\n" "$ac_ct_OTOOL64" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 printf %s "checking for -single_module linker flag... " >&6; } if test ${lt_cv_apple_cc_single_mod+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 printf %s "checking for -exported_symbols_list linker flag... " >&6; } if test ${lt_cv_ld_exported_symbols_list+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_ld_exported_symbols_list=yes else $as_nop lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 printf %s "checking for -force_load linker flag... " >&6; } if test ${lt_cv_ld_force_load+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 printf "%s\n" "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[012][,.]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes then : printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h fi # Set options enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AS+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 printf "%s\n" "$AS" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AS+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 printf "%s\n" "$ac_ct_AS" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 printf "%s\n" "$DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 printf "%s\n" "$OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump enable_dlopen=no # Check whether --enable-shared was given. if test ${enable_shared+y} then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop enable_shared=yes fi # Check whether --enable-static was given. if test ${enable_static+y} then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop enable_static=yes fi # Check whether --with-pic was given. if test ${with_pic+y} then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop pic_mode=default fi # Check whether --enable-fast-install was given. if test ${enable_fast_install+y} then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop enable_fast_install=yes fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 printf %s "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test ${with_aix_soname+y} then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else $as_nop if test ${lt_cv_with_aix_soname+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 printf "%s\n" "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 printf %s "checking for objdir... " >&6; } if test ${lt_cv_objdir+y} then : printf %s "(cached) " >&6 else $as_nop rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 printf "%s\n" "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 printf %s "checking for ${ac_tool_prefix}file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 printf %s "checking for file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test ${lt_cv_prog_compiler_rtti_exceptions+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test ${lt_cv_prog_compiler_pic_works+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 printf %s "checking if $CC understands -b... " >&6; } if test ${lt_cv_prog_compiler__b+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if test ${lt_cv_irix_exported_symbol+y} then : printf %s "(cached) " >&6 else $as_nop save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_irix_exported_symbol=yes else $as_nop lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 printf "%s\n" "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc+y} then : printf %s "(cached) " >&6 else $as_nop $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 printf %s "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 printf "%s\n" "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dlopen (); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else $as_nop ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else $as_nop lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes then : lt_cv_dlopen=shl_load else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 printf %s "checking for shl_load in -ldld... " >&6; } if test ${ac_cv_lib_dld_shl_load+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char shl_load (); int main (void) { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_shl_load=yes else $as_nop ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else $as_nop ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes then : lt_cv_dlopen=dlopen else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dlopen (); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else $as_nop ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 printf %s "checking for dlopen in -lsvld... " >&6; } if test ${ac_cv_lib_svld_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dlopen (); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_svld_dlopen=yes else $as_nop ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 printf %s "checking for dld_link in -ldld... " >&6; } if test ${ac_cv_lib_dld_dld_link+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dld_link (); int main (void) { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_dld_link=yes else $as_nop ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi fi fi fi fi fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 printf %s "checking whether a program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self+y} then : printf %s "(cached) " >&6 else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 printf "%s\n" "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 printf %s "checking whether a statically linked program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self_static+y} then : printf %s "(cached) " >&6 else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 printf %s "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi # Report what library types will actually be built { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 printf %s "checking if libtool supports shared libraries... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 printf "%s\n" "$can_build_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 printf "%s\n" "$enable_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 printf "%s\n" "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC ac_config_commands="$ac_config_commands libtool" # Only expand once: ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : else $as_nop printf "%s\n" "#define size_t unsigned int" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5 printf %s "checking for working volatile... " >&6; } if test ${ac_cv_c_volatile+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { volatile int x; int * volatile y = (int *) 0; return !x && !y; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_volatile=yes else $as_nop ac_cv_c_volatile=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 printf "%s\n" "$ac_cv_c_volatile" >&6; } if test $ac_cv_c_volatile = no; then printf "%s\n" "#define volatile /**/" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 printf %s "checking for inline... " >&6; } if test ${ac_cv_c_inline+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo (void) {return 0; } $ac_kw foo_t foo (void) {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 printf "%s\n" "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5 printf %s "checking whether char is unsigned... " >&6; } if test ${ac_cv_c_char_unsigned+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { static int test_array [1 - 2 * !(((char) -1) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_char_unsigned=no else $as_nop ac_cv_c_char_unsigned=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5 printf "%s\n" "$ac_cv_c_char_unsigned" >&6; } if test $ac_cv_c_char_unsigned = yes; then printf "%s\n" "#define __CHAR_UNSIGNED__ 1" >>confdefs.h fi GSL_CFLAGS="-I$includedir" GSL_LIBS="-L$libdir -lgsl" LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _mwvalidcheckl in -lmw" >&5 printf %s "checking for _mwvalidcheckl in -lmw... " >&6; } if test ${ac_cv_lib_mw__mwvalidcheckl+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lmw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char _mwvalidcheckl (); int main (void) { return _mwvalidcheckl (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_mw__mwvalidcheckl=yes else $as_nop ac_cv_lib_mw__mwvalidcheckl=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mw__mwvalidcheckl" >&5 printf "%s\n" "$ac_cv_lib_mw__mwvalidcheckl" >&6; } if test "x$ac_cv_lib_mw__mwvalidcheckl" = xyes then : LIBM=-lmw fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 printf %s "checking for cos in -lm... " >&6; } if test ${ac_cv_lib_m_cos+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char cos (); int main (void) { return cos (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_m_cos=yes else $as_nop ac_cv_lib_m_cos=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 printf "%s\n" "$ac_cv_lib_m_cos" >&6; } if test "x$ac_cv_lib_m_cos" = xyes then : LIBM="$LIBM -lm" fi ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 printf %s "checking for cos in -lm... " >&6; } if test ${ac_cv_lib_m_cos+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char cos (); int main (void) { return cos (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_m_cos=yes else $as_nop ac_cv_lib_m_cos=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 printf "%s\n" "$ac_cv_lib_m_cos" >&6; } if test "x$ac_cv_lib_m_cos" = xyes then : LIBM=-lm fi ;; esac GSL_LIBM=$LIBM if test "$ac_cv_c_inline" != no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU-style extern inline" >&5 printf %s "checking for GNU-style extern inline... " >&6; } if test ${ac_cv_c_extern_inline+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_c_extern_inline=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern $ac_cv_c_inline double foo(double x); extern $ac_cv_c_inline double foo(double x) { return x + 1.0 ; } ; double foo (double x) { return x + 1.0 ; }; int main (void) { foo(1.0) ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_extern_inline="yes" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_extern_inline" >&5 printf "%s\n" "$ac_cv_c_extern_inline" >&6; } if test "$ac_cv_c_extern_inline" != no ; then printf "%s\n" "#define HAVE_INLINE 1" >>confdefs.h else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C99-style inline" >&5 printf %s "checking for C99-style inline... " >&6; } if test ${ac_cv_c_c99inline+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_c_c99inline=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern inline void* foo() { foo(); return &foo ; }; int main (void) { return foo() != 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_c99inline="yes" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "$ac_cv_c_c99inline" != no ; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ inline void* foo() { foo(); return &foo ; }; int main (void) { return foo() != 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_cv_c_c99inline="no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_c99inline" >&5 printf "%s\n" "$ac_cv_c_c99inline" >&6; } if test "$ac_cv_c_c99inline" != no ; then printf "%s\n" "#define HAVE_INLINE 1" >>confdefs.h printf "%s\n" "#define HAVE_C99_INLINE 1" >>confdefs.h fi fi fi ac_fn_c_check_header_compile "$LINENO" "ieeefp.h" "ac_cv_header_ieeefp_h" "$ac_includes_default" if test "x$ac_cv_header_ieeefp_h" = xyes then : printf "%s\n" "#define HAVE_IEEEFP_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "complex.h" "ac_cv_header_complex_h" "$ac_includes_default" if test "x$ac_cv_header_complex_h" = xyes then : printf "%s\n" "#define HAVE_COMPLEX_H 1" >>confdefs.h fi case $host in *-*-cygwin* | *-*-mingw* ) if test "$enable_shared" = yes; then GSLCBLAS_LDFLAGS="$GSLCBLAS_LDFLAGS -no-undefined" GSL_LDFLAGS="$GSL_LDFLAGS -no-undefined" GSL_LIBADD="cblas/libgslcblas.la" fi ;; esac ac_func= for ac_item in $ac_func_c_list do if test $ac_func; then ac_fn_c_check_func "$LINENO" $ac_func ac_cv_func_$ac_func if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then echo "#define $ac_item 1" >> confdefs.h fi ac_func= else ac_func=$ac_item fi done if test "x$ac_cv_func_vprintf" = xno then : ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" if test "x$ac_cv_func__doprnt" = xyes then : printf "%s\n" "#define HAVE_DOPRNT 1" >>confdefs.h fi fi ac_fn_c_check_func "$LINENO" "memcpy" "ac_cv_func_memcpy" if test "x$ac_cv_func_memcpy" = xyes then : printf "%s\n" "#define HAVE_MEMCPY 1" >>confdefs.h else $as_nop case " $LIBOBJS " in *" memcpy.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memcpy.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove" if test "x$ac_cv_func_memmove" = xyes then : printf "%s\n" "#define HAVE_MEMMOVE 1" >>confdefs.h else $as_nop case " $LIBOBJS " in *" memmove.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memmove.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup" if test "x$ac_cv_func_strdup" = xyes then : printf "%s\n" "#define HAVE_STRDUP 1" >>confdefs.h else $as_nop case " $LIBOBJS " in *" strdup.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strdup.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol" if test "x$ac_cv_func_strtol" = xyes then : printf "%s\n" "#define HAVE_STRTOL 1" >>confdefs.h else $as_nop case " $LIBOBJS " in *" strtol.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtol.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul" if test "x$ac_cv_func_strtoul" = xyes then : printf "%s\n" "#define HAVE_STRTOUL 1" >>confdefs.h else $as_nop case " $LIBOBJS " in *" strtoul.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtoul.$ac_objext" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for EXIT_SUCCESS and EXIT_FAILURE" >&5 printf %s "checking for EXIT_SUCCESS and EXIT_FAILURE... " >&6; } if test ${ac_cv_decl_exit_success_and_failure+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef EXIT_SUCCESS yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : ac_cv_decl_exit_success_and_failure=yes else $as_nop ac_cv_decl_exit_success_and_failure=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_exit_success_and_failure" >&5 printf "%s\n" "$ac_cv_decl_exit_success_and_failure" >&6; } if test "$ac_cv_decl_exit_success_and_failure" = yes ; then printf "%s\n" "#define HAVE_EXIT_SUCCESS_AND_FAILURE 1" >>confdefs.h fi ; if test "x$LIBS" = "x" ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 printf %s "checking for cos in -lm... " >&6; } if test ${ac_cv_lib_m_cos+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char cos (); int main (void) { return cos (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_m_cos=yes else $as_nop ac_cv_lib_m_cos=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 printf "%s\n" "$ac_cv_lib_m_cos" >&6; } if test "x$ac_cv_lib_m_cos" = xyes then : printf "%s\n" "#define HAVE_LIBM 1" >>confdefs.h LIBS="-lm $LIBS" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } if test ${ac_cv_c_undeclared_builtin_options+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_CFLAGS=$CFLAGS ac_cv_c_undeclared_builtin_options='cannot detect' for ac_arg in '' -fno-builtin; do CFLAGS="$ac_save_CFLAGS $ac_arg" # This test program should *not* compile successfully. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { (void) strchr; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop # This test program should compile successfully. # No library function is consistently available on # freestanding implementations, so test against a dummy # declaration. Include always-available headers on the # off chance that they somehow elicit warnings. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include extern void ac_decl (int, char *); int main (void) { (void) ac_decl (0, (char *) 0); (void) ac_decl; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : if test x"$ac_arg" = x then : ac_cv_c_undeclared_builtin_options='none needed' else $as_nop ac_cv_c_undeclared_builtin_options=$ac_arg fi break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done CFLAGS=$ac_save_CFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } case $ac_cv_c_undeclared_builtin_options in #( 'cannot detect') : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot make $CC report undeclared builtins See \`config.log' for more details" "$LINENO" 5; } ;; #( 'none needed') : ac_c_undeclared_builtin_options='' ;; #( *) : ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; esac ac_fn_check_decl "$LINENO" "feenableexcept" "ac_cv_have_decl_feenableexcept" "#define _GNU_SOURCE 1 #include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_feenableexcept" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FEENABLEEXCEPT $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fesettrapenable" "ac_cv_have_decl_fesettrapenable" "#define _GNU_SOURCE 1 #include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fesettrapenable" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FESETTRAPENABLE $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "hypot" "ac_cv_have_decl_hypot" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_hypot" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_HYPOT $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "expm1" "ac_cv_have_decl_expm1" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_expm1" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_EXPM1 $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "acosh" "ac_cv_have_decl_acosh" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_acosh" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_ACOSH $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "asinh" "ac_cv_have_decl_asinh" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_asinh" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_ASINH $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "atanh" "ac_cv_have_decl_atanh" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_atanh" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_ATANH $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "ldexp" "ac_cv_have_decl_ldexp" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_ldexp" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_LDEXP $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "frexp" "ac_cv_have_decl_frexp" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_frexp" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FREXP $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fprnd_t" "ac_cv_have_decl_fprnd_t" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fprnd_t" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FPRND_T $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "isinf" "ac_cv_have_decl_isinf" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_isinf" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_ISINF $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "isfinite" "ac_cv_have_decl_isfinite" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_isfinite" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_ISFINITE $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "finite" "ac_cv_have_decl_finite" "#include #if HAVE_IEEEFP_H #include #endif " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_finite" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FINITE $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "isnan" "ac_cv_have_decl_isnan" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_isnan" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_ISNAN $ac_have_decl" >>confdefs.h case "$host" in *-*-*openbsd*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: avoiding OpenBSD system log1p - using gsl version" >&5 printf "%s\n" "avoiding OpenBSD system log1p - using gsl version" >&6; } ;; *) ac_fn_check_decl "$LINENO" "log1p" "ac_cv_have_decl_log1p" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_log1p" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_LOG1P $ac_have_decl" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long double stdio" >&5 printf %s "checking for long double stdio... " >&6; } if test ${ac_cv_func_printf_longdouble+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_func_printf_longdouble="no" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { const char * s = "5678.25"; long double x = 1.234 ; fprintf(stderr,"%Lg\n",x) ; sscanf(s, "%Lg", &x); if (x == 5678.25) {exit (0);} else {exit(1); }; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_printf_longdouble="yes" else $as_nop ac_cv_func_printf_longdouble="no" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_printf_longdouble" >&5 printf "%s\n" "$ac_cv_func_printf_longdouble" >&6; } if test "$ac_cv_func_printf_longdouble" != no; then printf "%s\n" "#define HAVE_PRINTF_LONGDOUBLE 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for extended floating point registers" >&5 printf %s "checking for extended floating point registers... " >&6; } if test ${ac_cv_c_extended_fp+y} then : printf %s "(cached) " >&6 else $as_nop case "$host" in *sparc*-*-*) ac_cv_c_extended_fp=no ;; *powerpc*-*-*) ac_cv_c_extended_fp=no ;; *hppa*-*-*) ac_cv_c_extended_fp=no ;; *alpha*-*-*) ac_cv_c_extended_fp=no ;; *68k*-*-*) ac_cv_c_extended_fp=yes ;; *86-*-*) ac_cv_c_extended_fp=yes ;; x86_64-*-*) ac_cv_c_extended_fp=yes ;; *) ac_cv_c_extended_fp=unknown ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_extended_fp" >&5 printf "%s\n" "$ac_cv_c_extended_fp" >&6; } if test $ac_cv_c_extended_fp != "no" ; then printf "%s\n" "#define HAVE_EXTENDED_PRECISION_REGISTERS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for IEEE arithmetic interface type" >&5 printf %s "checking for IEEE arithmetic interface type... " >&6; } if test ${ac_cv_c_ieee_interface+y} then : printf %s "(cached) " >&6 else $as_nop case "$host" in sparc-*-linux*) ac_cv_c_ieee_interface=gnusparc ;; m68k-*-linux*) ac_cv_c_ieee_interface=gnum68k ;; powerpc-*-linux*) ac_cv_c_ieee_interface=gnuppc ;; *86-*-gnu | *86_64-*-gnu | *86-*-linux* | *86_64-*-linux*) ac_cv_c_ieee_interface=gnux86 ;; *-*-sunos4*) ac_cv_c_ieee_interface=sunos4 ;; *-*-solaris*) ac_cv_c_ieee_interface=solaris ;; *-*-hpux11*) ac_cv_c_ieee_interface=hpux11 ;; *-*-hpux*) ac_cv_c_ieee_interface=hpux ;; *-*-osf*) ac_cv_c_ieee_interface=tru64 ;; *-*-aix*) ac_cv_c_ieee_interface=aix ;; *-*-irix*) ac_cv_c_ieee_interface=irix ;; powerpc-*-*darwin*) ac_cv_c_ieee_interface=darwin ;; *86-*-*darwin*) ac_cv_c_ieee_interface=darwin86 ;; *-*-*netbsd*) ac_cv_c_ieee_interface=netbsd ;; *-*-*openbsd*) ac_cv_c_ieee_interface=openbsd ;; *-*-*bsd*) ac_cv_c_ieee_interface=freebsd ;; *-*-os2*) ac_cv_c_ieee_interface=os2emx ;; *) ac_cv_c_ieee_interface=unknown ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_ieee_interface" >&5 printf "%s\n" "$ac_cv_c_ieee_interface" >&6; } if test "$ac_cv_c_ieee_interface" = "gnux86" ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for FPU_SETCW" >&5 printf %s "checking for FPU_SETCW... " >&6; } if test ${ac_cv_c_fpu_setcw+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_c_fpu_setcw=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef _FPU_SETCW #include #define _FPU_SETCW(cw) __setfpucw(cw) #endif int main (void) { unsigned short mode = 0 ; _FPU_SETCW(mode); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_fpu_setcw="yes" else $as_nop ac_cv_c_ieee_interface=unknown fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_fpu_setcw" >&5 printf "%s\n" "$ac_cv_c_fpu_setcw" >&6; } fi if test "$ac_cv_c_ieee_interface" = "gnux86" ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SSE extensions" >&5 printf %s "checking for SSE extensions... " >&6; } if test ${ac_cv_c_fpu_sse+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_c_fpu_sse=no if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #define _FPU_SETMXCSR(cw_sse) asm volatile ("ldmxcsr %0" : : "m" (*&cw_sse)) int main (void) { unsigned int mode = 0x1f80 ; _FPU_SETMXCSR(mode); exit(0); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_fpu_sse="yes" else $as_nop ac_cv_c_fpu_sse="no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #define _FPU_SETMXCSR(cw_sse) asm volatile ("ldmxcsr %0" : : "m" (*&cw_sse)) int main (void) { unsigned int mode = 0x1f80 ; _FPU_SETMXCSR(mode); exit(0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_fpu_sse="yes" else $as_nop ac_cv_c_fpu_sse="no" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_fpu_sse" >&5 printf "%s\n" "$ac_cv_c_fpu_sse" >&6; } if test $ac_cv_c_fpu_sse = yes; then printf "%s\n" "#define HAVE_FPU_X86_SSE 1" >>confdefs.h fi fi ac_tr_ieee_interface=HAVE_`echo $ac_cv_c_ieee_interface | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`_IEEE_INTERFACE printf "%s\n" "#define $ac_tr_ieee_interface 1" >>confdefs.h save_cflags="$CFLAGS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for IEEE compiler flags" >&5 printf %s "checking for IEEE compiler flags... " >&6; } if test ${ac_cv_c_ieee_flags+y} then : printf %s "(cached) " >&6 else $as_nop case "$host" in alpha*-*-*) if test X"$GCC" = Xyes ; then ieee_flags='-mieee -mfp-rounding-mode=d' else # This assumes Compaq's C compiler. ieee_flags='-ieee -fprm d' fi ;; esac if test X"$ieee_flags" != X ; then CFLAGS="$ieee_flags $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { int foo; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_ieee_flags="$ieee_flags" else $as_nop ac_cv_c_ieee_flags="none" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext else ac_cv_c_ieee_flags="none" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_ieee_flags" >&5 printf "%s\n" "$ac_cv_c_ieee_flags" >&6; } if test "$ac_cv_c_ieee_flags" != "none" ; then CFLAGS="$ac_cv_c_ieee_flags $save_cflags" else CFLAGS="$save_cflags" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for IEEE comparisons" >&5 printf %s "checking for IEEE comparisons... " >&6; } if test ${ac_cv_c_ieee_comparisons+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_c_ieee_comparisons="yes" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { int status; double inf, nan; inf = exp(1.0e10); nan = inf / inf ; status = (nan == nan); exit (status); } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_ieee_comparisons="yes" else $as_nop ac_cv_c_ieee_comparisons="no" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_ieee_comparisons" >&5 printf "%s\n" "$ac_cv_c_ieee_comparisons" >&6; } if test "$ac_cv_c_ieee_comparisons" != no ; then printf "%s\n" "#define HAVE_IEEE_COMPARISONS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for IEEE denormalized values" >&5 printf %s "checking for IEEE denormalized values... " >&6; } if test ${ac_cv_c_ieee_denormals+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_c_ieee_denormals="yes" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { int i, status; volatile double z = 1e-308; for (i = 0; i < 5; i++) { z = z / 10.0 ; }; for (i = 0; i < 5; i++) { z = z * 10.0 ; }; status = (z == 0.0); exit (status); } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_ieee_denormals="yes" else $as_nop ac_cv_c_ieee_denormals="no" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_ieee_denormals" >&5 printf "%s\n" "$ac_cv_c_ieee_denormals" >&6; } if test "$ac_cv_c_ieee_denormals" != no ; then printf "%s\n" "#define HAVE_IEEE_DENORMALS 1" >>confdefs.h fi ac_config_files="$ac_config_files Makefile gsl_version.h gsl.spec blas/Makefile block/Makefile bspline/Makefile bst/Makefile cblas/Makefile cdf/Makefile cheb/Makefile combination/Makefile complex/Makefile const/Makefile deriv/Makefile dht/Makefile diff/Makefile doc/Makefile doc/examples/Makefile eigen/Makefile err/Makefile fft/Makefile filter/Makefile fit/Makefile gsl/Makefile histogram/Makefile ieee-utils/Makefile integration/Makefile interpolation/Makefile linalg/Makefile matrix/Makefile min/Makefile monte/Makefile movstat/Makefile multifit/Makefile multifit_nlinear/Makefile multilarge/Makefile multilarge_nlinear/Makefile multimin/Makefile multiroots/Makefile multiset/Makefile ntuple/Makefile ode-initval/Makefile ode-initval2/Makefile permutation/Makefile poly/Makefile qrng/Makefile randist/Makefile rng/Makefile roots/Makefile rstat/Makefile siman/Makefile sort/Makefile spblas/Makefile splinalg/Makefile spmatrix/Makefile specfunc/Makefile statistics/Makefile sum/Makefile sys/Makefile test/Makefile utils/Makefile vector/Makefile wavelet/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by gsl $as_me 2.7.1, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ gsl config.status 2.7.1 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in AS \ DLLTOOL \ OBJDUMP \ SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "gsl_version.h") CONFIG_FILES="$CONFIG_FILES gsl_version.h" ;; "gsl.spec") CONFIG_FILES="$CONFIG_FILES gsl.spec" ;; "blas/Makefile") CONFIG_FILES="$CONFIG_FILES blas/Makefile" ;; "block/Makefile") CONFIG_FILES="$CONFIG_FILES block/Makefile" ;; "bspline/Makefile") CONFIG_FILES="$CONFIG_FILES bspline/Makefile" ;; "bst/Makefile") CONFIG_FILES="$CONFIG_FILES bst/Makefile" ;; "cblas/Makefile") CONFIG_FILES="$CONFIG_FILES cblas/Makefile" ;; "cdf/Makefile") CONFIG_FILES="$CONFIG_FILES cdf/Makefile" ;; "cheb/Makefile") CONFIG_FILES="$CONFIG_FILES cheb/Makefile" ;; "combination/Makefile") CONFIG_FILES="$CONFIG_FILES combination/Makefile" ;; "complex/Makefile") CONFIG_FILES="$CONFIG_FILES complex/Makefile" ;; "const/Makefile") CONFIG_FILES="$CONFIG_FILES const/Makefile" ;; "deriv/Makefile") CONFIG_FILES="$CONFIG_FILES deriv/Makefile" ;; "dht/Makefile") CONFIG_FILES="$CONFIG_FILES dht/Makefile" ;; "diff/Makefile") CONFIG_FILES="$CONFIG_FILES diff/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/examples/Makefile") CONFIG_FILES="$CONFIG_FILES doc/examples/Makefile" ;; "eigen/Makefile") CONFIG_FILES="$CONFIG_FILES eigen/Makefile" ;; "err/Makefile") CONFIG_FILES="$CONFIG_FILES err/Makefile" ;; "fft/Makefile") CONFIG_FILES="$CONFIG_FILES fft/Makefile" ;; "filter/Makefile") CONFIG_FILES="$CONFIG_FILES filter/Makefile" ;; "fit/Makefile") CONFIG_FILES="$CONFIG_FILES fit/Makefile" ;; "gsl/Makefile") CONFIG_FILES="$CONFIG_FILES gsl/Makefile" ;; "histogram/Makefile") CONFIG_FILES="$CONFIG_FILES histogram/Makefile" ;; "ieee-utils/Makefile") CONFIG_FILES="$CONFIG_FILES ieee-utils/Makefile" ;; "integration/Makefile") CONFIG_FILES="$CONFIG_FILES integration/Makefile" ;; "interpolation/Makefile") CONFIG_FILES="$CONFIG_FILES interpolation/Makefile" ;; "linalg/Makefile") CONFIG_FILES="$CONFIG_FILES linalg/Makefile" ;; "matrix/Makefile") CONFIG_FILES="$CONFIG_FILES matrix/Makefile" ;; "min/Makefile") CONFIG_FILES="$CONFIG_FILES min/Makefile" ;; "monte/Makefile") CONFIG_FILES="$CONFIG_FILES monte/Makefile" ;; "movstat/Makefile") CONFIG_FILES="$CONFIG_FILES movstat/Makefile" ;; "multifit/Makefile") CONFIG_FILES="$CONFIG_FILES multifit/Makefile" ;; "multifit_nlinear/Makefile") CONFIG_FILES="$CONFIG_FILES multifit_nlinear/Makefile" ;; "multilarge/Makefile") CONFIG_FILES="$CONFIG_FILES multilarge/Makefile" ;; "multilarge_nlinear/Makefile") CONFIG_FILES="$CONFIG_FILES multilarge_nlinear/Makefile" ;; "multimin/Makefile") CONFIG_FILES="$CONFIG_FILES multimin/Makefile" ;; "multiroots/Makefile") CONFIG_FILES="$CONFIG_FILES multiroots/Makefile" ;; "multiset/Makefile") CONFIG_FILES="$CONFIG_FILES multiset/Makefile" ;; "ntuple/Makefile") CONFIG_FILES="$CONFIG_FILES ntuple/Makefile" ;; "ode-initval/Makefile") CONFIG_FILES="$CONFIG_FILES ode-initval/Makefile" ;; "ode-initval2/Makefile") CONFIG_FILES="$CONFIG_FILES ode-initval2/Makefile" ;; "permutation/Makefile") CONFIG_FILES="$CONFIG_FILES permutation/Makefile" ;; "poly/Makefile") CONFIG_FILES="$CONFIG_FILES poly/Makefile" ;; "qrng/Makefile") CONFIG_FILES="$CONFIG_FILES qrng/Makefile" ;; "randist/Makefile") CONFIG_FILES="$CONFIG_FILES randist/Makefile" ;; "rng/Makefile") CONFIG_FILES="$CONFIG_FILES rng/Makefile" ;; "roots/Makefile") CONFIG_FILES="$CONFIG_FILES roots/Makefile" ;; "rstat/Makefile") CONFIG_FILES="$CONFIG_FILES rstat/Makefile" ;; "siman/Makefile") CONFIG_FILES="$CONFIG_FILES siman/Makefile" ;; "sort/Makefile") CONFIG_FILES="$CONFIG_FILES sort/Makefile" ;; "spblas/Makefile") CONFIG_FILES="$CONFIG_FILES spblas/Makefile" ;; "splinalg/Makefile") CONFIG_FILES="$CONFIG_FILES splinalg/Makefile" ;; "spmatrix/Makefile") CONFIG_FILES="$CONFIG_FILES spmatrix/Makefile" ;; "specfunc/Makefile") CONFIG_FILES="$CONFIG_FILES specfunc/Makefile" ;; "statistics/Makefile") CONFIG_FILES="$CONFIG_FILES statistics/Makefile" ;; "sum/Makefile") CONFIG_FILES="$CONFIG_FILES sum/Makefile" ;; "sys/Makefile") CONFIG_FILES="$CONFIG_FILES sys/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; "vector/Makefile") CONFIG_FILES="$CONFIG_FILES vector/Makefile" ;; "wavelet/Makefile") CONFIG_FILES="$CONFIG_FILES wavelet/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # The names of the tagged configurations supported by this script. available_tags='' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Assembler program. AS=$lt_AS # DLL creation program. DLLTOOL=$lt_DLLTOOL # Object dumper program. OBJDUMP=$lt_OBJDUMP # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi gsl/test_gsl_histogram.sh0000755000175000017500000000034513536674414014174 0ustar eddedd#! /bin/sh cat > test.exp.1.tmp < test.obs.1.tmp cmp test.exp.1.tmp test.obs.1.tmp STATUS=$? rm test.exp.1.tmp test.obs.1.tmp exit $STATUS gsl/multifit/0000755000175000017500000000000014057135461011560 5ustar eddeddgsl/multifit/robust_wfun.c0000644000175000017500000001321113536674414014306 0ustar eddedd/* robust_wfun.c * * Copyright (C) 2013 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* default tuning constants */ #define TUNING_BISQUARE (4.685) #define TUNING_CAUCHY (2.385) #define TUNING_FAIR (1.4) #define TUNING_HUBER (1.345) #define TUNING_OLS (1.0) #define TUNING_WELSCH (2.985) /* * Note: for each of the weighting functions below, it * is safe to call them with in-place parameters, so that * input/output vectors are the same */ static int bisquare(const gsl_vector *r, gsl_vector *w) { size_t i; size_t n = r->size; for (i = 0; i < n; ++i) { double ri = gsl_vector_get(r, i); if (fabs(ri) < 1.0) gsl_vector_set(w, i, (1.0 - ri*ri)*(1.0 - ri*ri)); else gsl_vector_set(w, i, 0.0); } return GSL_SUCCESS; } /* bisquare() */ static int bisquare_dpsi(const gsl_vector *r, gsl_vector *dpsi) { size_t i; size_t n = r->size; for (i = 0; i < n; ++i) { double ri = gsl_vector_get(r, i); if (fabs(ri) < 1.0) gsl_vector_set(dpsi, i, (1.0 - ri*ri)*(1.0 - 5.0*ri*ri)); else gsl_vector_set(dpsi, i, 0.0); } return GSL_SUCCESS; } /* bisquare_dpsi() */ static const gsl_multifit_robust_type bisquare_type = { "bisquare", &bisquare, &bisquare_dpsi, TUNING_BISQUARE }; static int cauchy(const gsl_vector *r, gsl_vector *w) { size_t i; size_t n = r->size; for (i = 0; i < n; ++i) { double ri = gsl_vector_get(r, i); gsl_vector_set(w, i, 1.0 / (1.0 + ri*ri)); } return GSL_SUCCESS; } /* cauchy() */ static int cauchy_dpsi(const gsl_vector *r, gsl_vector *dpsi) { size_t i; size_t n = r->size; for (i = 0; i < n; ++i) { double ri = gsl_vector_get(r, i); double rsq = ri * ri; gsl_vector_set(dpsi, i, (1 - rsq) / (1.0 + rsq) / (1.0 + rsq)); } return GSL_SUCCESS; } /* cauchy_dpsi() */ static const gsl_multifit_robust_type cauchy_type = { "cauchy", &cauchy, &cauchy_dpsi, TUNING_CAUCHY }; static int fair(const gsl_vector *r, gsl_vector *w) { size_t i; size_t n = r->size; for (i = 0; i < n; ++i) { double ri = gsl_vector_get(r, i); gsl_vector_set(w, i, 1.0 / (1.0 + fabs(ri))); } return GSL_SUCCESS; } /* fair() */ static int fair_dpsi(const gsl_vector *r, gsl_vector *dpsi) { size_t i; size_t n = r->size; for (i = 0; i < n; ++i) { double ri = gsl_vector_get(r, i); gsl_vector_set(dpsi, i, 1.0 / (1.0 + fabs(ri)) / (1.0 + fabs(ri))); } return GSL_SUCCESS; } /* fair_dpsi() */ static const gsl_multifit_robust_type fair_type = { "fair", &fair, &fair_dpsi, TUNING_FAIR }; static int huber(const gsl_vector *r, gsl_vector *w) { size_t i; size_t n = r->size; for (i = 0; i < n; ++i) { double absri = fabs(gsl_vector_get(r, i)); if (absri <= 1.0) gsl_vector_set(w, i, 1.0); else gsl_vector_set(w, i, 1.0 / absri); } return GSL_SUCCESS; } /* huber() */ static int huber_dpsi(const gsl_vector *r, gsl_vector *dpsi) { size_t i; size_t n = r->size; for (i = 0; i < n; ++i) { double ri = gsl_vector_get(r, i); if (fabs(ri) <= 1.0) gsl_vector_set(dpsi, i, 1.0); else gsl_vector_set(dpsi, i, 0.0); } return GSL_SUCCESS; } /* huber_dpsi() */ static const gsl_multifit_robust_type huber_type = { "huber", &huber, &huber_dpsi, TUNING_HUBER }; static int ols(const gsl_vector *r, gsl_vector *w) { gsl_vector_set_all(w, 1.0); return GSL_SUCCESS; } static int ols_dpsi(const gsl_vector *r, gsl_vector *dpsi) { gsl_vector_set_all(dpsi, 1.0); return GSL_SUCCESS; } static const gsl_multifit_robust_type ols_type = { "ols", &ols, &ols_dpsi, TUNING_OLS }; static int welsch(const gsl_vector *r, gsl_vector *w) { size_t i; size_t n = r->size; for (i = 0; i < n; ++i) { double ri = gsl_vector_get(r, i); gsl_vector_set(w, i, exp(-ri*ri)); } return GSL_SUCCESS; } /* welsch() */ static int welsch_dpsi(const gsl_vector *r, gsl_vector *dpsi) { size_t i; size_t n = r->size; for (i = 0; i < n; ++i) { double ri = gsl_vector_get(r, i); gsl_vector_set(dpsi, i, (1.0 - 2.0*ri*ri) * exp(-ri*ri)); } return GSL_SUCCESS; } /* welsch_dpsi() */ static const gsl_multifit_robust_type welsch_type = { "welsch", &welsch, &welsch_dpsi, TUNING_WELSCH }; const gsl_multifit_robust_type *gsl_multifit_robust_default = &bisquare_type; const gsl_multifit_robust_type *gsl_multifit_robust_bisquare = &bisquare_type; const gsl_multifit_robust_type *gsl_multifit_robust_cauchy = &cauchy_type; const gsl_multifit_robust_type *gsl_multifit_robust_fair = &fair_type; const gsl_multifit_robust_type *gsl_multifit_robust_huber = &huber_type; const gsl_multifit_robust_type *gsl_multifit_robust_ols = &ols_type; const gsl_multifit_robust_type *gsl_multifit_robust_welsch = &welsch_type; gsl/multifit/gsl_multifit_nlin.h0000644000175000017500000002613513536674414015471 0ustar eddedd/* multifit_nlin/gsl_multifit_nlin.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MULTIFIT_NLIN_H__ #define __GSL_MULTIFIT_NLIN_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_multifit_gradient (const gsl_matrix * J, const gsl_vector * f, gsl_vector * g); int gsl_multifit_covar (const gsl_matrix * J, const double epsrel, gsl_matrix * covar); int gsl_multifit_covar_QRPT (gsl_matrix * r, gsl_permutation * perm, const double epsrel, gsl_matrix * covar); /* Definition of vector-valued functions with parameters based on gsl_vector */ struct gsl_multifit_function_struct { int (* f) (const gsl_vector * x, void * params, gsl_vector * f); size_t n; /* number of functions */ size_t p; /* number of independent variables */ void * params; }; typedef struct gsl_multifit_function_struct gsl_multifit_function ; #define GSL_MULTIFIT_FN_EVAL(F,x,y) (*((F)->f))(x,(F)->params,(y)) typedef struct { const char *name; size_t size; int (*alloc) (void *state, size_t n, size_t p); int (*set) (void *state, gsl_multifit_function * function, gsl_vector * x, gsl_vector * f, gsl_vector * dx); int (*iterate) (void *state, gsl_multifit_function * function, gsl_vector * x, gsl_vector * f, gsl_vector * dx); void (*free) (void *state); } gsl_multifit_fsolver_type; typedef struct { const gsl_multifit_fsolver_type * type; gsl_multifit_function * function ; gsl_vector * x ; gsl_vector * f ; gsl_vector * dx ; void *state; } gsl_multifit_fsolver; gsl_multifit_fsolver * gsl_multifit_fsolver_alloc (const gsl_multifit_fsolver_type * T, size_t n, size_t p); void gsl_multifit_fsolver_free (gsl_multifit_fsolver * s); int gsl_multifit_fsolver_set (gsl_multifit_fsolver * s, gsl_multifit_function * f, const gsl_vector * x); int gsl_multifit_fsolver_iterate (gsl_multifit_fsolver * s); int gsl_multifit_fsolver_driver (gsl_multifit_fsolver * s, const size_t maxiter, const double epsabs, const double epsrel); const char * gsl_multifit_fsolver_name (const gsl_multifit_fsolver * s); gsl_vector * gsl_multifit_fsolver_position (const gsl_multifit_fsolver * s); /* Definition of vector-valued functions and gradient with parameters based on gsl_vector */ struct gsl_multifit_function_fdf_struct { int (* f) (const gsl_vector * x, void * params, gsl_vector * f); int (* df) (const gsl_vector * x, void * params, gsl_matrix * df); int (* fdf) (const gsl_vector * x, void * params, gsl_vector * f, gsl_matrix *df); size_t n; /* number of functions */ size_t p; /* number of independent variables */ void * params; /* user parameters */ size_t nevalf; /* number of function evaluations */ size_t nevaldf; /* number of Jacobian evaluations */ }; typedef struct gsl_multifit_function_fdf_struct gsl_multifit_function_fdf ; typedef struct { const char *name; size_t size; int (*alloc) (void *state, size_t n, size_t p); int (*set) (void *state, const gsl_vector * wts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx); int (*iterate) (void *state, const gsl_vector * wts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx); int (*gradient) (void *state, gsl_vector * g); int (*jac) (void *state, gsl_matrix * J); void (*free) (void *state); } gsl_multifit_fdfsolver_type; typedef struct { const gsl_multifit_fdfsolver_type * type; gsl_multifit_function_fdf * fdf ; gsl_vector * x; /* parameter values x */ gsl_vector * f; /* residual vector f(x) */ gsl_vector * dx; /* step dx */ gsl_vector * g; /* gradient J^T f */ gsl_vector * sqrt_wts; /* sqrt(wts) */ size_t niter; /* number of iterations performed */ void *state; } gsl_multifit_fdfsolver; gsl_multifit_fdfsolver * gsl_multifit_fdfsolver_alloc (const gsl_multifit_fdfsolver_type * T, size_t n, size_t p); int gsl_multifit_fdfsolver_set (gsl_multifit_fdfsolver * s, gsl_multifit_function_fdf * fdf, const gsl_vector * x); int gsl_multifit_fdfsolver_wset (gsl_multifit_fdfsolver * s, gsl_multifit_function_fdf * f, const gsl_vector * x, const gsl_vector * wts); int gsl_multifit_fdfsolver_iterate (gsl_multifit_fdfsolver * s); int gsl_multifit_fdfsolver_driver (gsl_multifit_fdfsolver * s, const size_t maxiter, const double xtol, const double gtol, const double ftol, int *info); int gsl_multifit_fdfsolver_jac (gsl_multifit_fdfsolver * s, gsl_matrix * J); void gsl_multifit_fdfsolver_free (gsl_multifit_fdfsolver * s); const char * gsl_multifit_fdfsolver_name (const gsl_multifit_fdfsolver * s); gsl_vector * gsl_multifit_fdfsolver_position (const gsl_multifit_fdfsolver * s); gsl_vector * gsl_multifit_fdfsolver_residual (const gsl_multifit_fdfsolver * s); size_t gsl_multifit_fdfsolver_niter (const gsl_multifit_fdfsolver * s); int gsl_multifit_eval_wf(gsl_multifit_function_fdf *fdf, const gsl_vector *x, const gsl_vector *wts, gsl_vector *y); int gsl_multifit_eval_wdf(gsl_multifit_function_fdf *fdf, const gsl_vector *x, const gsl_vector *wts, gsl_matrix *dy); int gsl_multifit_fdfsolver_test (const gsl_multifit_fdfsolver * s, const double xtol, const double gtol, const double ftol, int *info); int gsl_multifit_test_delta (const gsl_vector * dx, const gsl_vector * x, double epsabs, double epsrel); int gsl_multifit_test_gradient (const gsl_vector * g, double epsabs); int gsl_multifit_fdfsolver_dif_df(const gsl_vector *x, const gsl_vector *wts, gsl_multifit_function_fdf *fdf, const gsl_vector *f, gsl_matrix *J); int gsl_multifit_fdfsolver_dif_fdf(const gsl_vector *x, gsl_multifit_function_fdf *fdf, gsl_vector *f, gsl_matrix *J); typedef struct { size_t n; /* number of (original) residuals */ size_t p; /* number of model parameters */ double lambda; /* damping parameter */ const gsl_vector *L_diag; /* diagonal damping matrix or NULL */ const gsl_matrix *L; /* general damping matrix or NULL */ gsl_vector *f; /* function values for finite diff J */ gsl_vector *wts; /* weight vector for augmented system */ gsl_multifit_fdfsolver * s; gsl_multifit_function_fdf *fdf; /* user defined fdf */ gsl_multifit_function_fdf fdftik; /* Tikhonov modified fdf */ } gsl_multifit_fdfridge; gsl_multifit_fdfridge * gsl_multifit_fdfridge_alloc (const gsl_multifit_fdfsolver_type * T, const size_t n, const size_t p); void gsl_multifit_fdfridge_free(gsl_multifit_fdfridge *work); const char *gsl_multifit_fdfridge_name(const gsl_multifit_fdfridge * w); gsl_vector *gsl_multifit_fdfridge_position (const gsl_multifit_fdfridge * w); gsl_vector *gsl_multifit_fdfridge_residual (const gsl_multifit_fdfridge * w); size_t gsl_multifit_fdfridge_niter (const gsl_multifit_fdfridge * w); int gsl_multifit_fdfridge_set (gsl_multifit_fdfridge * w, gsl_multifit_function_fdf * f, const gsl_vector * x, const double lambda); int gsl_multifit_fdfridge_wset (gsl_multifit_fdfridge * w, gsl_multifit_function_fdf * f, const gsl_vector * x, const double lambda, const gsl_vector * wts); int gsl_multifit_fdfridge_set2 (gsl_multifit_fdfridge * w, gsl_multifit_function_fdf * f, const gsl_vector * x, const gsl_vector * lambda); int gsl_multifit_fdfridge_wset2 (gsl_multifit_fdfridge * w, gsl_multifit_function_fdf * f, const gsl_vector * x, const gsl_vector * lambda, const gsl_vector * wts); int gsl_multifit_fdfridge_set3 (gsl_multifit_fdfridge * w, gsl_multifit_function_fdf * f, const gsl_vector * x, const gsl_matrix * L); int gsl_multifit_fdfridge_wset3 (gsl_multifit_fdfridge * w, gsl_multifit_function_fdf * f, const gsl_vector * x, const gsl_matrix * L, const gsl_vector * wts); int gsl_multifit_fdfridge_iterate (gsl_multifit_fdfridge * w); int gsl_multifit_fdfridge_driver (gsl_multifit_fdfridge * w, const size_t maxiter, const double xtol, const double gtol, const double ftol, int *info); /* extern const gsl_multifit_fsolver_type * gsl_multifit_fsolver_gradient; */ GSL_VAR const gsl_multifit_fdfsolver_type * gsl_multifit_fdfsolver_lmsder; GSL_VAR const gsl_multifit_fdfsolver_type * gsl_multifit_fdfsolver_lmder; GSL_VAR const gsl_multifit_fdfsolver_type * gsl_multifit_fdfsolver_lmniel; __END_DECLS #endif /* __GSL_MULTIFIT_NLIN_H__ */ gsl/multifit/test_lin2.c0000644000175000017500000000323313536674414013637 0ustar eddedd#define lin2_N 20 /* can be anything >= p */ #define lin2_P 5 #define lin2_NTRIES 3 static double lin2_x0[lin2_P] = { 1.0, 1.0, 1.0, 1.0, 1.0 }; static double lin2_epsrel = 1.0e-11; static void lin2_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double n = (double) lin2_N; const double sumsq_exact = 0.5 * (n*(n - 1.0)) / (2.0*n + 1.0); const double sum_exact = 3.0 / (2.0*n + 1.0); double sum = 0.0; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < lin2_P; ++i) sum += (i + 1.0) * x[i]; gsl_test_rel(sum, sum_exact, epsrel, "%s/%s coeff sum", sname, pname); } static int lin2_f (const gsl_vector * x, void *params, gsl_vector * f) { size_t i, j; for (i = 0; i < lin2_N; ++i) { double fi = 0.0; for (j = 0; j < lin2_P; ++j) { double xj = gsl_vector_get(x, j); fi += (j + 1) * xj; } fi = (i + 1) * fi - 1.0; gsl_vector_set(f, i, fi); } return GSL_SUCCESS; } static int lin2_df (const gsl_vector * x, void *params, gsl_matrix * J) { size_t i, j; for (i = 0; i < lin2_N; ++i) { for (j = 0; j < lin2_P; ++j) { gsl_matrix_set(J, i, j, (i + 1.0) * (j + 1.0)); } } return GSL_SUCCESS; } static gsl_multifit_function_fdf lin2_func = { &lin2_f, &lin2_df, NULL, lin2_N, lin2_P, NULL, 0, 0 }; static test_fdf_problem lin2_problem = { "linear_rank1", lin2_x0, NULL, &lin2_epsrel, lin2_NTRIES, &lin2_checksol, &lin2_func }; gsl/multifit/test_shaw.c0000644000175000017500000002302613536675317013742 0ustar eddedd/* * test_shaw.c * * Test L-curve (Tikhonov) regression routines using Shaw * problem. See example 1.10 of * * [1] R.C. Aster, B. Borchers and C. H. Thurber, * Parameter Estimation and Inverse Problems (2nd ed), 2012. */ #include /* alternate (and inefficient) method of computing G(lambda) */ static double shaw_gcv_G(const double lambda, const gsl_matrix * X, const gsl_vector * y, gsl_multifit_linear_workspace * work) { const size_t n = X->size1; const size_t p = X->size2; gsl_matrix * XTX = gsl_matrix_alloc(p, p); gsl_matrix * XI = gsl_matrix_alloc(p, n); gsl_matrix * XXI = gsl_matrix_alloc(n, n); gsl_vector * c = gsl_vector_alloc(p); gsl_vector_view d; double rnorm, snorm; double term1, term2, G; size_t i; /* compute regularized solution with this lambda */ gsl_multifit_linear_solve(lambda, X, y, c, &rnorm, &snorm, work); /* compute X^T X */ gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, X, 0.0, XTX); /* add lambda*I */ d = gsl_matrix_diagonal(XTX); gsl_vector_add_constant(&d.vector, lambda * lambda); /* invert (X^T X + lambda*I) */ gsl_linalg_cholesky_decomp1(XTX); gsl_linalg_cholesky_invert(XTX); gsl_matrix_transpose_tricpy(CblasLower, CblasUnit, XTX, XTX); /* XI = (X^T X + lambda*I)^{-1} X^T */ gsl_blas_dgemm(CblasNoTrans, CblasTrans, 1.0, XTX, X, 0.0, XI); /* XXI = X (X^T X + lambda*I)^{-1} X^T */ gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, X, XI, 0.0, XXI); /* compute: term1 = Tr(I - X XI) */ term1 = 0.0; for (i = 0; i < n; ++i) { double *Ai = gsl_matrix_ptr(XXI, i, i); term1 += 1.0 - (*Ai); } gsl_matrix_free(XTX); gsl_matrix_free(XI); gsl_matrix_free(XXI); gsl_vector_free(c); term2 = rnorm / term1; return term2 * term2;; } /* construct design matrix and rhs vector for Shaw problem */ static int shaw_system(gsl_matrix * X, gsl_vector * y) { int s = GSL_SUCCESS; const size_t n = X->size1; const size_t p = X->size2; const double dtheta = M_PI / (double) p; size_t i, j; gsl_vector *m = gsl_vector_alloc(p); /* build the design matrix */ for (i = 0; i < n; ++i) { double si = (i + 0.5) * M_PI / n - M_PI / 2.0; double csi = cos(si); double sni = sin(si); for (j = 0; j < p; ++j) { double thetaj = (j + 0.5) * M_PI / p - M_PI / 2.0; double term1 = csi + cos(thetaj); double term2 = gsl_sf_sinc(sni + sin(thetaj)); double Xij = term1 * term1 * term2 * term2 * dtheta; gsl_matrix_set(X, i, j, Xij); } } /* construct coefficient vector */ { const double a1 = 2.0; const double a2 = 1.0; const double c1 = 6.0; const double c2 = 2.0; const double t1 = 0.8; const double t2 = -0.5; for (j = 0; j < p; ++j) { double tj = -M_PI / 2.0 + (j + 0.5) * dtheta; double mj = a1 * exp(-c1 * (tj - t1) * (tj - t1)) + a2 * exp(-c2 * (tj - t2) * (tj - t2)); gsl_vector_set(m, j, mj); } } /* construct rhs vector */ gsl_blas_dgemv(CblasNoTrans, 1.0, X, m, 0.0, y); gsl_vector_free(m); return s; } static int test_shaw_system_l(gsl_rng *rng_p, const size_t n, const size_t p, const double lambda_expected, gsl_vector *rhs) { const size_t npoints = 1000; /* number of points on L-curve */ const double tol1 = 1.0e-12; const double tol2 = 1.0e-9; const double tol3 = 1.0e-5; gsl_vector * reg_param = gsl_vector_alloc(npoints); gsl_vector * rho = gsl_vector_alloc(npoints); gsl_vector * eta = gsl_vector_alloc(npoints); gsl_matrix * X = gsl_matrix_alloc(n, p); gsl_matrix * cov = gsl_matrix_alloc(p, p); gsl_vector * c = gsl_vector_alloc(p); gsl_vector * ytmp = gsl_vector_alloc(n); gsl_vector * y; gsl_vector * r = gsl_vector_alloc(n); gsl_multifit_linear_workspace * work = gsl_multifit_linear_alloc (n, p); size_t reg_idx, i; double lambda, rnorm, snorm; /* build design matrix */ shaw_system(X, ytmp); if (rhs) y = rhs; else { y = ytmp; /* add random noise to exact rhs vector */ test_random_vector_noise(rng_p, y); } /* SVD decomposition */ gsl_multifit_linear_svd(X, work); /* calculate L-curve */ gsl_multifit_linear_lcurve(y, reg_param, rho, eta, work); /* test rho and eta vectors */ for (i = 0; i < npoints; ++i) { double rhoi = gsl_vector_get(rho, i); double etai = gsl_vector_get(eta, i); double lami = gsl_vector_get(reg_param, i); /* solve regularized system and check for consistent rho/eta values */ gsl_multifit_linear_solve(lami, X, y, c, &rnorm, &snorm, work); gsl_test_rel(rhoi, rnorm, tol3, "shaw rho n=%zu p=%zu lambda=%e", n, p, lami); gsl_test_rel(etai, snorm, tol1, "shaw eta n=%zu p=%zu lambda=%e", n, p, lami); } /* calculate corner of L-curve */ gsl_multifit_linear_lcorner(rho, eta, ®_idx); lambda = gsl_vector_get(reg_param, reg_idx); /* test against known lambda value if given */ if (lambda_expected > 0.0) { gsl_test_rel(lambda, lambda_expected, tol1, "shaw: n=%zu p=%zu L-curve corner lambda", n, p); } /* compute regularized solution with optimal lambda */ gsl_multifit_linear_solve(lambda, X, y, c, &rnorm, &snorm, work); /* compute residual norm ||y - X c|| */ gsl_vector_memcpy(r, y); gsl_blas_dgemv(CblasNoTrans, 1.0, X, c, -1.0, r); /* test rnorm value */ gsl_test_rel(rnorm, gsl_blas_dnrm2(r), tol2, "shaw: n=%zu p=%zu rnorm", n, p); /* test snorm value */ gsl_test_rel(snorm, gsl_blas_dnrm2(c), tol2, "shaw: n=%zu p=%zu snorm", n, p); gsl_matrix_free(X); gsl_matrix_free(cov); gsl_vector_free(reg_param); gsl_vector_free(rho); gsl_vector_free(eta); gsl_vector_free(r); gsl_vector_free(c); gsl_vector_free(ytmp); gsl_multifit_linear_free(work); return 0; } /* test_shaw_system_l() */ static int test_shaw_system_gcv(gsl_rng *rng_p, const size_t n, const size_t p, const double lambda_expected, gsl_vector *rhs) { const size_t npoints = 200; /* number of points on L-curve */ const double tol1 = 1.0e-12; const double tol2 = 1.4e-10; const double tol3 = 1.0e-5; gsl_vector * reg_param = gsl_vector_alloc(npoints); gsl_vector * G = gsl_vector_alloc(npoints); gsl_matrix * X = gsl_matrix_alloc(n, p); gsl_matrix * cov = gsl_matrix_alloc(p, p); gsl_vector * c = gsl_vector_alloc(p); gsl_vector * ytmp = gsl_vector_alloc(n); gsl_vector * y; gsl_vector * r = gsl_vector_alloc(n); gsl_multifit_linear_workspace * work = gsl_multifit_linear_alloc (n, p); size_t reg_idx, i; double lambda, rnorm, snorm, G_lambda; /* build design matrix */ shaw_system(X, ytmp); if (rhs) y = rhs; else { y = ytmp; /* add random noise to exact rhs vector */ test_random_vector_noise(rng_p, y); } /* SVD decomposition */ gsl_multifit_linear_svd(X, work); /* calculate GCV curve */ gsl_multifit_linear_gcv(y, reg_param, G, &lambda, &G_lambda, work); /* test G vector */ for (i = 0; i < npoints; ++i) { double lami = gsl_vector_get(reg_param, i); if (lami > 1.0e-5) { /* test unreliable for small lambda */ double Gi = gsl_vector_get(G, i); double Gi_expected = shaw_gcv_G(lami, X, y, work); gsl_test_rel(Gi, Gi_expected, tol3, "shaw[%zu,%zu] gcv G i=%zu lambda=%e", n, p, i, lami); } } /* test against known lambda value if given */ if (lambda_expected > 0.0) { gsl_test_rel(lambda, lambda_expected, tol2, "shaw gcv: n=%zu p=%zu lambda", n, p); } /* compute regularized solution with optimal lambda */ gsl_multifit_linear_solve(lambda, X, y, c, &rnorm, &snorm, work); /* compute residual norm ||y - X c|| */ gsl_vector_memcpy(r, y); gsl_blas_dgemv(CblasNoTrans, 1.0, X, c, -1.0, r); /* test rnorm value */ gsl_test_rel(rnorm, gsl_blas_dnrm2(r), tol2, "shaw gcv: n=%zu p=%zu rnorm", n, p); /* test snorm value */ gsl_test_rel(snorm, gsl_blas_dnrm2(c), tol2, "shaw gcv: n=%zu p=%zu snorm", n, p); gsl_matrix_free(X); gsl_matrix_free(cov); gsl_vector_free(reg_param); gsl_vector_free(G); gsl_vector_free(r); gsl_vector_free(c); gsl_vector_free(ytmp); gsl_multifit_linear_free(work); return 0; } /* test_shaw_system_gcv() */ void test_shaw(void) { gsl_rng * r = gsl_rng_alloc(gsl_rng_default); { double shaw20_y[] = { 8.7547455124379323e-04, 5.4996835885761936e-04, 1.7527999407005367e-06, 1.9552372913117047e-03, 1.4411645433785081e-02, 5.2800013336393704e-02, 1.3609152023257112e-01, 2.7203484587635818e-01, 4.3752225136193390e-01, 5.7547667319875240e-01, 6.2445052213539942e-01, 5.6252658286441348e-01, 4.2322239923561566e-01, 2.6768469219560631e-01, 1.4337901162734543e-01, 6.5614569346074361e-02, 2.6013851831752945e-02, 9.2336933089481269e-03, 3.2269066658993694e-03, 1.3999201459261811e-03 }; gsl_vector_view rhs = gsl_vector_view_array(shaw20_y, 20); /* lambda and rhs values from [1] */ test_shaw_system_l(r, 20, 20, 5.793190958069266e-06, &rhs.vector); test_shaw_system_gcv(r, 20, 20, 1.24921780949051038e-05, &rhs.vector); } { size_t n, p; for (n = 10; n <= 50; n += 2) { for (p = n - 6; p <= n; p += 2) test_shaw_system_l(r, n, p, -1.0, NULL); } } gsl_rng_free(r); } /* test_shaw() */ gsl/multifit/fdjac.c0000644000175000017500000000761613536674414013014 0ustar eddedd/* multifit/fdjac.c * * Copyright (C) 2013 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * * This module contains routines for approximating the Jacobian with finite * differences for nonlinear least-squares fitting. */ #include #include #include #include #include static int fdjac(const gsl_vector *x, const gsl_vector *wts, gsl_multifit_function_fdf *fdf, const gsl_vector *f, gsl_matrix *J); /* fdjac() Compute approximate Jacobian using forward differences Inputs: x - parameter vector wts - data weights fdf - fdf struct f - (input) vector of function values f_i(x) J - (output) Jacobian matrix Return: success or error */ static int fdjac(const gsl_vector *x, const gsl_vector *wts, gsl_multifit_function_fdf *fdf, const gsl_vector *f, gsl_matrix *J) { int status = 0; size_t i, j; double h; const double epsfcn = 0.0; double eps = sqrt(GSL_MAX(epsfcn, GSL_DBL_EPSILON)); for (j = 0; j < fdf->p; ++j) { double xj = gsl_vector_get(x, j); /* use column j of J as temporary storage for f(x + dx) */ gsl_vector_view v = gsl_matrix_column(J, j); h = eps * fabs(xj); if (h == 0.0) h = eps; /* perturb x_j to compute forward difference */ gsl_vector_set((gsl_vector *) x, j, xj + h); status += gsl_multifit_eval_wf (fdf, x, wts, &v.vector); if (status) return status; /* restore x_j */ gsl_vector_set((gsl_vector *) x, j, xj); h = 1.0 / h; for (i = 0; i < fdf->n; ++i) { double fnext = gsl_vector_get(&v.vector, i); double fi = gsl_vector_get(f, i); gsl_matrix_set(J, i, j, (fnext - fi) * h); } } return status; } /* fdjac() */ /* gsl_multifit_fdfsolver_dif_df() Compute approximate Jacobian using finite differences Inputs: x - parameter vector wts - data weights (set to NULL if not needed) fdf - fdf f - (input) function values f_i(x) J - (output) approximate Jacobian matrix Return: success or error */ int gsl_multifit_fdfsolver_dif_df(const gsl_vector *x, const gsl_vector *wts, gsl_multifit_function_fdf *fdf, const gsl_vector *f, gsl_matrix *J) { return fdjac(x, wts, fdf, f, J); } /* gsl_multifit_fdfsolver_dif_df() */ #ifndef GSL_DISABLE_DEPRECATED /* gsl_multifit_fdfsolver_dif_fdf() Compute function values (analytic) and approximate Jacobian using finite differences Inputs: x - parameter vector fdf - fdf f - (output) function values f_i(x) J - (output) approximate Jacobian matrix Return: success or error */ int gsl_multifit_fdfsolver_dif_fdf(const gsl_vector *x, gsl_multifit_function_fdf *fdf, gsl_vector *f, gsl_matrix *J) { int status = 0; status = gsl_multifit_eval_wf(fdf, x, NULL, f); if (status) return status; status = fdjac(x, NULL, fdf, f, J); if (status) return status; return status; } /* gsl_multifit_fdfsolver_dif_fdf() */ #endif /* !GSL_DISABLE_DEPRECATED */ gsl/multifit/lmutil.c0000644000175000017500000000504013536674414013240 0ustar eddeddstatic void compute_diag (const gsl_matrix * J, gsl_vector * diag); static void update_diag (const gsl_matrix * J, gsl_vector * diag); static double compute_delta (gsl_vector * diag, gsl_vector * x); static double scaled_enorm (const gsl_vector * d, const gsl_vector * f); static double enorm (const gsl_vector * f); static double enorm (const gsl_vector * f) { return gsl_blas_dnrm2 (f); } static double scaled_enorm (const gsl_vector * d, const gsl_vector * f) { double e2 = 0; size_t i, n = f->size; for (i = 0; i < n; i++) { double fi = gsl_vector_get (f, i); double di = gsl_vector_get (d, i); double u = di * fi; e2 += u * u; } return sqrt (e2); } static double compute_delta (gsl_vector * diag, gsl_vector * x) { double Dx = scaled_enorm (diag, x); double factor = 100; /* generally recommended value from MINPACK */ return (Dx > 0) ? factor * Dx : factor; } static double compute_actual_reduction (double fnorm, double fnorm1) { double actred; if (0.1 * fnorm1 < fnorm) { double u = fnorm1 / fnorm; actred = 1 - u * u; } else { actred = -1; } return actred; } static void compute_diag (const gsl_matrix * J, gsl_vector * diag) { size_t j, p = J->size2; for (j = 0; j < p; j++) { gsl_vector_const_view v = gsl_matrix_const_column(J, j); double norm = gsl_blas_dnrm2(&v.vector); if (norm == 0) norm = 1.0; gsl_vector_set (diag, j, norm); } } static void update_diag (const gsl_matrix * J, gsl_vector * diag) { size_t j, p = J->size2; for (j = 0; j < p; j++) { gsl_vector_const_view v = gsl_matrix_const_column(J, j); double norm = gsl_blas_dnrm2(&v.vector); double *diagj = gsl_vector_ptr(diag, j); if (norm == 0) norm = 1.0; *diagj = GSL_MAX(*diagj, norm); } } static void compute_rptdx (const gsl_matrix * r, const gsl_permutation * p, const gsl_vector * dx, gsl_vector * rptdx) { size_t i, j, N = dx->size; for (i = 0; i < N; i++) { double sum = 0; for (j = i; j < N; j++) { size_t pj = gsl_permutation_get (p, j); sum += gsl_matrix_get (r, i, j) * gsl_vector_get (dx, pj); } gsl_vector_set (rptdx, i, sum); } } static void compute_trial_step (gsl_vector * x, gsl_vector * dx, gsl_vector * x_trial) { size_t i, N = x->size; for (i = 0; i < N; i++) { double pi = gsl_vector_get (dx, i); double xi = gsl_vector_get (x, i); gsl_vector_set (x_trial, i, xi + pi); } } gsl/multifit/test_nonlinear.c0000644000175000017500000004441413536674414014766 0ustar eddedd/* multifit/test_nonlinear.c * * Copyright (C) 2007, 2013, 2014 Brian Gough, Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ typedef struct { const char *name; double *x0; /* initial parameters (size p) */ double *sigma; double *epsrel; /* relative tolerance for solution checking */ size_t ntries; void (*checksol) (const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname); gsl_multifit_function_fdf *fdf; } test_fdf_problem; #include "test_bard.c" #include "test_beale.c" #include "test_biggs.c" #include "test_box.c" #include "test_boxbod.c" #include "test_brown1.c" #include "test_brown2.c" #include "test_brown3.c" #include "test_eckerle.c" #include "test_enso.c" #include "test_exp1.c" #include "test_gaussian.c" #include "test_hahn1.c" #include "test_helical.c" #include "test_jennrich.c" #include "test_kirby2.c" #include "test_kowalik.c" #include "test_lin1.c" #include "test_lin2.c" #include "test_lin3.c" #include "test_meyer.c" #include "test_meyerscal.c" #include "test_osborne.c" #include "test_penalty1.c" #include "test_penalty2.c" #include "test_powell1.c" #include "test_powell2.c" #include "test_powell3.c" #include "test_rat42.c" #include "test_rat43.c" #include "test_rosenbrock.c" #include "test_rosenbrocke.c" #include "test_roth.c" #include "test_thurber.c" #include "test_vardim.c" #include "test_watson.c" #include "test_wood.c" #include "test_wnlin.c" static void test_fdf(const gsl_multifit_fdfsolver_type * T, const double xtol, const double gtol, const double ftol, const double epsrel, const double x0_scale, test_fdf_problem *problem, const double *wts); static void test_fdfridge(const gsl_multifit_fdfsolver_type * T, const double xtol, const double gtol, const double ftol, const double epsrel, const double x0_scale, test_fdf_problem *problem, const double *wts); static void test_fdf_checksol(const char *sname, const char *pname, const double epsrel, gsl_multifit_fdfsolver *s, test_fdf_problem *problem); static void test_scale_x0(gsl_vector *x0, const double scale); /* * These test problems are taken from * * H. B. Nielsen, UCTP test problems for unconstrained optimization, * IMM Department of Mathematical Modeling, Tech. Report IMM-REP-2000-17, * 2000. */ static test_fdf_problem *test_fdf_nielsen[] = { &lin1_problem, /* 1 */ &lin2_problem, /* 2 */ &lin3_problem, /* 3 */ &rosenbrock_problem, /* 4 */ &helical_problem, /* 5 */ &powell1_problem, /* 6 */ &roth_problem, /* 7 */ &bard_problem, /* 8 */ &kowalik_problem, /* 9 */ &meyer_problem, /* 10 */ &watson_problem, /* 11 */ &box_problem, /* 12 */ &jennrich_problem, /* 13 */ &brown1_problem, /* 14 */ &brown2_problem, /* 16 */ &osborne_problem, /* 17 */ &exp1_problem, /* 18 */ &meyerscal_problem, /* 20 */ &powell2_problem, NULL }; /* * These tests are from * * J. J. More, B. S. Garbow and K. E. Hillstrom, Testing * Unconstrained Optimization Software, ACM Trans. Math. Soft. * Vol 7, No 1, 1981. * * Many of these overlap with the Nielsen tests */ static test_fdf_problem *test_fdf_more[] = { &rosenbrock_problem, /* 1 */ &roth_problem, /* 2 */ &powell3_problem, /* 3 */ &brown3_problem, /* 4 */ &beale_problem, /* 5 */ &jennrich_problem, /* 6 */ &helical_problem, /* 7 */ &bard_problem, /* 8 */ &gaussian_problem, /* 9 */ &meyer_problem, /* 10 */ &box_problem, /* 12 */ &powell1_problem, /* 13 */ &wood_problem, /* 14 */ &kowalik_problem, /* 15 */ &brown1_problem, /* 16 */ &osborne_problem, /* 17 */ &biggs_problem, /* 18 */ &watson_problem, /* 20 */ &rosenbrocke_problem, /* 21 */ &penalty1_problem, /* 23 */ &penalty2_problem, /* 24 */ &vardim_problem, /* 25 */ &brown2_problem, /* 27 */ &lin1_problem, /* 32 */ &lin2_problem, /* 33 */ &lin3_problem, /* 34 */ NULL }; /* NIST test cases */ static test_fdf_problem *test_fdf_nist[] = { &kirby2_problem, &hahn1_problem, &enso_problem, &thurber_problem, &boxbod_problem, &rat42_problem, &eckerle_problem, &rat43_problem, NULL }; static void test_nonlinear(void) { const double xtol = pow(GSL_DBL_EPSILON, 0.9); const double gtol = pow(GSL_DBL_EPSILON, 0.9); const double ftol = 0.0; size_t i, j; /* Nielsen tests */ for (i = 0; test_fdf_nielsen[i] != NULL; ++i) { test_fdf_problem *problem = test_fdf_nielsen[i]; double epsrel = *(problem->epsrel); double scale = 1.0; for (j = 0; j < problem->ntries; ++j) { double eps_scale = epsrel * scale; test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, eps_scale, scale, problem, NULL); test_fdfridge(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, eps_scale, scale, problem, NULL); /* test finite difference Jacobian */ { gsl_multifit_function_fdf fdf; fdf.df = problem->fdf->df; problem->fdf->df = NULL; test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, 1.0e5 * eps_scale, 1.0, problem, NULL); test_fdfridge(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, 1.0e5 * eps_scale, 1.0, problem, NULL); problem->fdf->df = fdf.df; } scale *= 10.0; } test_fdf(gsl_multifit_fdfsolver_lmniel, xtol, gtol, ftol, 10.0 * epsrel, 1.0, problem, NULL); } /* More tests */ for (i = 0; test_fdf_more[i] != NULL; ++i) { test_fdf_problem *problem = test_fdf_more[i]; double epsrel = *(problem->epsrel); double scale = 1.0; for (j = 0; j < problem->ntries; ++j) { double eps_scale = epsrel * scale; test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, eps_scale, scale, problem, NULL); test_fdfridge(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, eps_scale, scale, problem, NULL); /* test finite difference Jacobian */ { gsl_multifit_function_fdf fdf; fdf.df = problem->fdf->df; problem->fdf->df = NULL; test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, 1.0e5 * eps_scale, 1.0, problem, NULL); test_fdfridge(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, 1.0e5 * eps_scale, 1.0, problem, NULL); problem->fdf->df = fdf.df; } scale *= 10.0; } test_fdf(gsl_multifit_fdfsolver_lmniel, xtol, gtol, ftol, 10.0 * epsrel, 1.0, problem, NULL); } /* NIST tests */ for (i = 0; test_fdf_nist[i] != NULL; ++i) { test_fdf_problem *problem = test_fdf_nist[i]; double epsrel = *(problem->epsrel); double scale = 1.0; for (j = 0; j < problem->ntries; ++j) { double eps_scale = epsrel * scale; test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, eps_scale, scale, problem, NULL); test_fdf(gsl_multifit_fdfsolver_lmder, xtol, gtol, ftol, eps_scale, scale, problem, NULL); /* test finite difference Jacobian */ { gsl_multifit_function_fdf fdf; fdf.df = problem->fdf->df; problem->fdf->df = NULL; test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, eps_scale, 1.0, problem, NULL); test_fdf(gsl_multifit_fdfsolver_lmder, xtol, gtol, ftol, eps_scale, scale, problem, NULL); problem->fdf->df = fdf.df; } scale *= 10.0; } test_fdf(gsl_multifit_fdfsolver_lmniel, xtol, gtol, ftol, epsrel, 1.0, problem, NULL); } /* test weighted nonlinear least squares */ /* internal weighting in _f and _df functions */ test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, wnlin_epsrel, 1.0, &wnlin_problem1, NULL); test_fdf(gsl_multifit_fdfsolver_lmniel, xtol, gtol, ftol, wnlin_epsrel, 1.0, &wnlin_problem1, NULL); test_fdfridge(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, wnlin_epsrel, 1.0, &wnlin_problem1, NULL); test_fdfridge(gsl_multifit_fdfsolver_lmniel, xtol, gtol, ftol, wnlin_epsrel, 1.0, &wnlin_problem1, NULL); /* weighting through fdfsolver_wset */ test_fdf(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, wnlin_epsrel, 1.0, &wnlin_problem2, wnlin_W); test_fdf(gsl_multifit_fdfsolver_lmniel, xtol, gtol, ftol, wnlin_epsrel, 1.0, &wnlin_problem2, wnlin_W); test_fdfridge(gsl_multifit_fdfsolver_lmsder, xtol, gtol, ftol, wnlin_epsrel, 1.0, &wnlin_problem2, wnlin_W); test_fdfridge(gsl_multifit_fdfsolver_lmniel, xtol, gtol, ftol, wnlin_epsrel, 1.0, &wnlin_problem2, wnlin_W); } /* test_fdf() Test a weighted nonlinear least squares problem Inputs: T - solver to use xtol - tolerance in x gtol - tolerance in gradient ftol - tolerance in residual vector epsrel - relative error tolerance in solution x0_scale - to test robustness against starting points, the standard starting point in 'problem' is multiplied by this scale factor: x0 <- x0 * x0_scale If x0 = 0, then all components of x0 are set to x0_scale problem - contains the nonlinear problem and solution point wts - weight vector (NULL for unweighted) */ static void test_fdf(const gsl_multifit_fdfsolver_type * T, const double xtol, const double gtol, const double ftol, const double epsrel, const double x0_scale, test_fdf_problem *problem, const double *wts) { gsl_multifit_function_fdf *fdf = problem->fdf; const size_t n = fdf->n; const size_t p = fdf->p; const size_t max_iter = 1500; gsl_vector *x0 = gsl_vector_alloc(p); gsl_vector_view x0v = gsl_vector_view_array(problem->x0, p); gsl_multifit_fdfsolver *s = gsl_multifit_fdfsolver_alloc (T, n, p); const char *pname = problem->name; char sname[2048]; int status, info; sprintf(sname, "%s/scale=%g%s", gsl_multifit_fdfsolver_name(s), x0_scale, problem->fdf->df ? "" : "/fdiff"); /* scale starting point x0 */ gsl_vector_memcpy(x0, &x0v.vector); test_scale_x0(x0, x0_scale); if (wts) { gsl_vector_const_view wv = gsl_vector_const_view_array(wts, n); gsl_multifit_fdfsolver_wset(s, fdf, x0, &wv.vector); } else gsl_multifit_fdfsolver_set(s, fdf, x0); status = gsl_multifit_fdfsolver_driver(s, max_iter, xtol, gtol, ftol, &info); gsl_test(status, "%s/%s did not converge, status=%s", sname, pname, gsl_strerror(status)); /* check solution */ test_fdf_checksol(sname, pname, epsrel, s, problem); if (wts == NULL) { /* test again with weighting matrix W = I */ gsl_vector *wv = gsl_vector_alloc(n); sprintf(sname, "%s/scale=%g%s/weights", gsl_multifit_fdfsolver_name(s), x0_scale, problem->fdf->df ? "" : "/fdiff"); gsl_vector_memcpy(x0, &x0v.vector); test_scale_x0(x0, x0_scale); gsl_vector_set_all(wv, 1.0); gsl_multifit_fdfsolver_wset(s, fdf, x0, wv); status = gsl_multifit_fdfsolver_driver(s, max_iter, xtol, gtol, ftol, &info); gsl_test(status, "%s/%s did not converge, status=%s", sname, pname, gsl_strerror(status)); test_fdf_checksol(sname, pname, epsrel, s, problem); gsl_vector_free(wv); } gsl_multifit_fdfsolver_free(s); gsl_vector_free(x0); } /* test_fdfridge() Test a nonlinear least squares problem Inputs: T - solver to use xtol - tolerance in x gtol - tolerance in gradient ftol - tolerance in residual vector epsrel - relative error tolerance in solution x0_scale - to test robustness against starting points, the standard starting point in 'problem' is multiplied by this scale factor: x0 <- x0 * x0_scale If x0 = 0, then all components of x0 are set to x0_scale problem - contains the nonlinear problem and solution point wts - weight vector */ static void test_fdfridge(const gsl_multifit_fdfsolver_type * T, const double xtol, const double gtol, const double ftol, const double epsrel, const double x0_scale, test_fdf_problem *problem, const double *wts) { gsl_multifit_function_fdf *fdf = problem->fdf; const size_t n = fdf->n; const size_t p = fdf->p; const size_t max_iter = 1500; gsl_vector *x0 = gsl_vector_alloc(p); gsl_vector_view x0v = gsl_vector_view_array(problem->x0, p); gsl_multifit_fdfridge *w = gsl_multifit_fdfridge_alloc (T, n, p); const char *pname = problem->name; char sname[2048]; int status, info; double lambda = 0.0; sprintf(sname, "ridge/%s", gsl_multifit_fdfridge_name(w)); /* scale starting point x0 */ gsl_vector_memcpy(x0, &x0v.vector); test_scale_x0(x0, x0_scale); /* test undamped case with lambda = 0 */ if (wts) { gsl_vector_const_view wv = gsl_vector_const_view_array(wts, n); gsl_multifit_fdfridge_wset(w, fdf, x0, lambda, &wv.vector); } else gsl_multifit_fdfridge_set(w, fdf, x0, lambda); status = gsl_multifit_fdfridge_driver(w, max_iter, xtol, gtol, ftol, &info); gsl_test(status, "%s/%s did not converge, status=%s", sname, pname, gsl_strerror(status)); /* check solution */ test_fdf_checksol(sname, pname, epsrel, w->s, problem); /* test for self consisent solution with L = \lambda I */ { const double eps = 1.0e-10; gsl_matrix *L = gsl_matrix_calloc(p, p); gsl_vector_view diag = gsl_matrix_diagonal(L); gsl_multifit_fdfridge *w2 = gsl_multifit_fdfridge_alloc (T, n, p); gsl_vector *y0 = gsl_vector_alloc(p); size_t i; /* pick some value for lambda and set L = \lambda I */ lambda = 5.0; gsl_vector_set_all(&diag.vector, lambda); /* scale initial vector */ gsl_vector_memcpy(x0, &x0v.vector); test_scale_x0(x0, x0_scale); gsl_vector_memcpy(y0, x0); if (wts) { gsl_vector_const_view wv = gsl_vector_const_view_array(wts, n); gsl_multifit_fdfridge_wset(w, fdf, x0, lambda, &wv.vector); gsl_multifit_fdfridge_wset3(w2, fdf, y0, L, &wv.vector); } else { gsl_multifit_fdfridge_set(w, fdf, x0, lambda); gsl_multifit_fdfridge_set3(w2, fdf, y0, L); } /* solve with scalar lambda routine */ status = gsl_multifit_fdfridge_driver(w, max_iter, xtol, gtol, ftol, &info); gsl_test(status, "%s/lambda/%s did not converge, status=%s", sname, pname, gsl_strerror(status)); /* solve with general matrix routine */ status = gsl_multifit_fdfridge_driver(w2, max_iter, xtol, gtol, ftol, &info); gsl_test(status, "%s/L/%s did not converge, status=%s", sname, pname, gsl_strerror(status)); /* test x = y */ for (i = 0; i < p; ++i) { double xi = gsl_vector_get(w->s->x, i); double yi = gsl_vector_get(w2->s->x, i); if (fabs(xi) < eps) { gsl_test_abs(yi, xi, eps, "%s/%s ridge lambda=%g i=%zu", sname, pname, lambda, i); } else { gsl_test_rel(yi, xi, eps, "%s/%s ridge lambda=%g i=%zu", sname, pname, lambda, i); } } gsl_matrix_free(L); gsl_vector_free(y0); gsl_multifit_fdfridge_free(w2); } gsl_multifit_fdfridge_free(w); gsl_vector_free(x0); } static void test_fdf_checksol(const char *sname, const char *pname, const double epsrel, gsl_multifit_fdfsolver *s, test_fdf_problem *problem) { gsl_multifit_function_fdf *fdf = problem->fdf; const double *sigma = problem->sigma; gsl_vector *f = gsl_multifit_fdfsolver_residual(s); gsl_vector *x = gsl_multifit_fdfsolver_position(s); double sumsq; /* check solution vector x and sumsq = ||f||^2 */ gsl_blas_ddot(f, f, &sumsq); (problem->checksol)(x->data, sumsq, epsrel, sname, pname); #if 1 /* check variances */ if (sigma) { const size_t n = fdf->n; const size_t p = fdf->p; size_t i; gsl_matrix * J = gsl_matrix_alloc(n, p); gsl_matrix * covar = gsl_matrix_alloc (p, p); gsl_multifit_fdfsolver_jac (s, J); gsl_multifit_covar(J, 0.0, covar); for (i = 0; i < p; i++) { double ei = sqrt(sumsq/(n-p))*sqrt(gsl_matrix_get(covar,i,i)); gsl_test_rel (ei, sigma[i], epsrel, "%s/%s, sigma(%d)", sname, pname, i) ; } gsl_matrix_free (J); gsl_matrix_free (covar); } #endif } static void test_scale_x0(gsl_vector *x0, const double scale) { double nx = gsl_blas_dnrm2(x0); if (nx == 0.0) gsl_vector_set_all(x0, scale); else gsl_vector_scale(x0, scale); } /* test_scale_x0() */ gsl/multifit/test_kirby2.c0000644000175000017500000001520513536674414014177 0ustar eddedd#define kirby2_N 151 #define kirby2_P 5 #define kirby2_NTRIES 1 /* double kirby2_x0[kirby2_P] = { 2, -0.1, 0.003, -0.001, 0.00001 }; */ static double kirby2_x0[kirby2_P] = { 1.5, -0.15, 0.0025, -0.0015, 0.00002 }; static double kirby2_epsrel = 1.0e-5; static double kirby2_sigma[kirby2_P] = { 8.7989634338E-02, 4.1182041386E-03, 4.1856520458E-05, 5.8931897355E-05, 2.0129761919E-07 }; static double kirby2_F1[kirby2_N] = { 0.0082E0, 0.0112E0, 0.0149E0, 0.0198E0, 0.0248E0, 0.0324E0, 0.0420E0, 0.0549E0, 0.0719E0, 0.0963E0, 0.1291E0, 0.1710E0, 0.2314E0, 0.3227E0, 0.4809E0, 0.7084E0, 1.0220E0, 1.4580E0, 1.9520E0, 2.5410E0, 3.2230E0, 3.9990E0, 4.8520E0, 5.7320E0, 6.7270E0, 7.8350E0, 9.0250E0, 10.2670E0, 11.5780E0, 12.9440E0, 14.3770E0, 15.8560E0, 17.3310E0, 18.8850E0, 20.5750E0, 22.3200E0, 22.3030E0, 23.4600E0, 24.0600E0, 25.2720E0, 25.8530E0, 27.1100E0, 27.6580E0, 28.9240E0, 29.5110E0, 30.7100E0, 31.3500E0, 32.5200E0, 33.2300E0, 34.3300E0, 35.0600E0, 36.1700E0, 36.8400E0, 38.0100E0, 38.6700E0, 39.8700E0, 40.0300E0, 40.5000E0, 41.3700E0, 41.6700E0, 42.3100E0, 42.7300E0, 43.4600E0, 44.1400E0, 44.5500E0, 45.2200E0, 45.9200E0, 46.3000E0, 47.0000E0, 47.6800E0, 48.0600E0, 48.7400E0, 49.4100E0, 49.7600E0, 50.4300E0, 51.1100E0, 51.5000E0, 52.1200E0, 52.7600E0, 53.1800E0, 53.7800E0, 54.4600E0, 54.8300E0, 55.4000E0, 56.4300E0, 57.0300E0, 58.0000E0, 58.6100E0, 59.5800E0, 60.1100E0, 61.1000E0, 61.6500E0, 62.5900E0, 63.1200E0, 64.0300E0, 64.6200E0, 65.4900E0, 66.0300E0, 66.8900E0, 67.4200E0, 68.2300E0, 68.7700E0, 69.5900E0, 70.1100E0, 70.8600E0, 71.4300E0, 72.1600E0, 72.7000E0, 73.4000E0, 73.9300E0, 74.6000E0, 75.1600E0, 75.8200E0, 76.3400E0, 76.9800E0, 77.4800E0, 78.0800E0, 78.6000E0, 79.1700E0, 79.6200E0, 79.8800E0, 80.1900E0, 80.6600E0, 81.2200E0, 81.6600E0, 82.1600E0, 82.5900E0, 83.1400E0, 83.5000E0, 84.0000E0, 84.4000E0, 84.8900E0, 85.2600E0, 85.7400E0, 86.0700E0, 86.5400E0, 86.8900E0, 87.3200E0, 87.6500E0, 88.1000E0, 88.4300E0, 88.8300E0, 89.1200E0, 89.5400E0, 89.8500E0, 90.2500E0, 90.5500E0, 90.9300E0, 91.2000E0, 91.5500E0, 92.2000E0 }; static double kirby2_F0[kirby2_N] = { 9.65E0, 10.74E0, 11.81E0, 12.88E0, 14.06E0, 15.28E0, 16.63E0, 18.19E0, 19.88E0, 21.84E0, 24.00E0, 26.25E0, 28.86E0, 31.85E0, 35.79E0, 40.18E0, 44.74E0, 49.53E0, 53.94E0, 58.29E0, 62.63E0, 67.03E0, 71.25E0, 75.22E0, 79.33E0, 83.56E0, 87.75E0, 91.93E0, 96.10E0, 100.28E0, 104.46E0, 108.66E0, 112.71E0, 116.88E0, 121.33E0, 125.79E0, 125.79E0, 128.74E0, 130.27E0, 133.33E0, 134.79E0, 137.93E0, 139.33E0, 142.46E0, 143.90E0, 146.91E0, 148.51E0, 151.41E0, 153.17E0, 155.97E0, 157.76E0, 160.56E0, 162.30E0, 165.21E0, 166.90E0, 169.92E0, 170.32E0, 171.54E0, 173.79E0, 174.57E0, 176.25E0, 177.34E0, 179.19E0, 181.02E0, 182.08E0, 183.88E0, 185.75E0, 186.80E0, 188.63E0, 190.45E0, 191.48E0, 193.35E0, 195.22E0, 196.23E0, 198.05E0, 199.97E0, 201.06E0, 202.83E0, 204.69E0, 205.86E0, 207.58E0, 209.50E0, 210.65E0, 212.33E0, 215.43E0, 217.16E0, 220.21E0, 221.98E0, 225.06E0, 226.79E0, 229.92E0, 231.69E0, 234.77E0, 236.60E0, 239.63E0, 241.50E0, 244.48E0, 246.40E0, 249.35E0, 251.32E0, 254.22E0, 256.24E0, 259.11E0, 261.18E0, 264.02E0, 266.13E0, 268.94E0, 271.09E0, 273.87E0, 276.08E0, 278.83E0, 281.08E0, 283.81E0, 286.11E0, 288.81E0, 291.08E0, 293.75E0, 295.99E0, 298.64E0, 300.84E0, 302.02E0, 303.48E0, 305.65E0, 308.27E0, 310.41E0, 313.01E0, 315.12E0, 317.71E0, 319.79E0, 322.36E0, 324.42E0, 326.98E0, 329.01E0, 331.56E0, 333.56E0, 336.10E0, 338.08E0, 340.60E0, 342.57E0, 345.08E0, 347.02E0, 349.52E0, 351.44E0, 353.93E0, 355.83E0, 358.32E0, 360.20E0, 362.67E0, 364.53E0, 367.00E0, 371.30E0 }; static void kirby2_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 3.9050739624E+00; const double kirby2_x[kirby2_P] = { 1.6745063063E+00, -1.3927397867E-01, 2.5961181191E-03, -1.7241811870E-03, 2.1664802578E-05 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < kirby2_P; ++i) { gsl_test_rel(x[i], kirby2_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int kirby2_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[kirby2_P]; size_t i; for (i = 0; i < kirby2_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < kirby2_N; i++) { double x = kirby2_F0[i]; double y = ((b[0] + x* (b[1] + x * b[2])) / (1 + x*(b[3] + x *b[4]))); gsl_vector_set (f, i, kirby2_F1[i] - y); } return GSL_SUCCESS; } static int kirby2_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[kirby2_P]; size_t i; for (i = 0; i < kirby2_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < kirby2_N; i++) { double x = kirby2_F0[i]; double u = (b[0] + x*(b[1] + x*b[2])); double v = (1 + x*(b[3] + x*b[4])); gsl_matrix_set (df, i, 0, -1/v); gsl_matrix_set (df, i, 1, -x/v); gsl_matrix_set (df, i, 2, -x*x/v); gsl_matrix_set (df, i, 3, x*u/(v*v)); gsl_matrix_set (df, i, 4, x*x*u/(v*v)); } return GSL_SUCCESS; } static gsl_multifit_function_fdf kirby2_func = { &kirby2_f, &kirby2_df, NULL, kirby2_N, kirby2_P, NULL, 0, 0 }; static test_fdf_problem kirby2_problem = { "nist-kirby2", kirby2_x0, kirby2_sigma, &kirby2_epsrel, kirby2_NTRIES, &kirby2_checksol, &kirby2_func }; gsl/multifit/test_rat43.c0000644000175000017500000000501713536674414013732 0ustar eddedd#define rat43_N 15 #define rat43_P 4 #define rat43_NTRIES 1 static double rat43_x0[rat43_P] = { 100.0, 10.0, 1.0, 1.0 }; static double rat43_epsrel = 1.0e-6; static double rat43_sigma[rat43_P] = { 1.6302297817E+01, 2.0828735829E+00, 1.9566123451E-01, 6.8761936385E-01 }; static double rat43_F[rat43_N] = { 16.08, 33.83, 65.80, 97.20, 191.55, 326.20, 386.87, 520.53, 590.03, 651.92, 724.93, 699.56, 689.96, 637.56, 717.41 }; static void rat43_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 8.7864049080E+03; const double rat43_x[rat43_P] = { 6.9964151270E+02, 5.2771253025E+00, 7.5962938329E-01, 1.2792483859E+00 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < rat43_P; ++i) { gsl_test_rel(x[i], rat43_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int rat43_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[rat43_P]; size_t i; for (i = 0; i < rat43_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < rat43_N; i++) { double xi = i + 1.0; double e = exp(b[1] - b[2]*xi); double yi = b[0] / pow(1.0 + e, 1.0 / b[3]); gsl_vector_set (f, i, yi - rat43_F[i]); } return GSL_SUCCESS; } static int rat43_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[rat43_P]; size_t i; for (i = 0; i < rat43_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < rat43_N; i++) { double xi = i + 1.0; double e = exp(b[1] - b[2]*xi); double term1 = 1.0 + e; double term2 = pow(term1, -1.0 / b[3]); gsl_matrix_set (df, i, 0, term2); gsl_matrix_set (df, i, 1, -b[0] / b[3] * e * term2 / term1); gsl_matrix_set (df, i, 2, b[0] / b[3] * xi * e * term2 / term1); gsl_matrix_set (df, i, 3, b[0] / b[3] / b[3] * log(term1) * term2); } return GSL_SUCCESS; } static gsl_multifit_function_fdf rat43_func = { &rat43_f, &rat43_df, NULL, rat43_N, rat43_P, NULL, 0, 0 }; static test_fdf_problem rat43_problem = { "nist-rat43", rat43_x0, rat43_sigma, &rat43_epsrel, rat43_NTRIES, &rat43_checksol, &rat43_func }; gsl/multifit/Makefile.in0000664000175000017500000012023214057135461013627 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = multifit ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslmultifit_la_LIBADD = am_libgslmultifit_la_OBJECTS = gcv.lo multilinear.lo multiwlinear.lo \ work.lo lmniel.lo lmder.lo fsolver.lo fdfsolver.lo fdfridge.lo \ fdjac.lo convergence.lo gradient.lo covar.lo multirobust.lo \ robust_wfun.lo multireg.lo libgslmultifit_la_OBJECTS = $(am_libgslmultifit_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslmultifit.la ../linalg/libgsllinalg.la \ ../permutation/libgslpermutation.la ../blas/libgslblas.la \ ../cblas/libgslcblas.la ../matrix/libgslmatrix.la \ ../sort/libgslsort.la ../statistics/libgslstatistics.la \ ../vector/libgslvector.la ../block/libgslblock.la \ ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la \ ../sys/libgslsys.la ../rng/libgslrng.la \ ../specfunc/libgslspecfunc.la ../min/libgslmin.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/convergence.Plo \ ./$(DEPDIR)/covar.Plo ./$(DEPDIR)/fdfridge.Plo \ ./$(DEPDIR)/fdfsolver.Plo ./$(DEPDIR)/fdjac.Plo \ ./$(DEPDIR)/fsolver.Plo ./$(DEPDIR)/gcv.Plo \ ./$(DEPDIR)/gradient.Plo ./$(DEPDIR)/lmder.Plo \ ./$(DEPDIR)/lmniel.Plo ./$(DEPDIR)/multilinear.Plo \ ./$(DEPDIR)/multireg.Plo ./$(DEPDIR)/multirobust.Plo \ ./$(DEPDIR)/multiwlinear.Plo ./$(DEPDIR)/robust_wfun.Plo \ ./$(DEPDIR)/test.Po ./$(DEPDIR)/work.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslmultifit_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslmultifit_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslmultifit.la pkginclude_HEADERS = gsl_multifit.h gsl_multifit_nlin.h AM_CPPFLAGS = -I$(top_srcdir) libgslmultifit_la_SOURCES = gcv.c multilinear.c multiwlinear.c work.c lmniel.c lmder.c fsolver.c fdfsolver.c fdfridge.c fdjac.c convergence.c gradient.c covar.c multirobust.c robust_wfun.c multireg.c noinst_HEADERS = \ linear_common.c \ lmutil.c \ lmpar.c \ lmset.c \ lmiterate.c \ lmmisc.c \ qrsolv.c \ test_bard.c \ test_beale.c \ test_biggs.c \ test_box.c \ test_boxbod.c \ test_brown1.c \ test_brown2.c \ test_brown3.c \ test_eckerle.c \ test_enso.c \ test_estimator.c \ test_exp1.c \ test_filip.c \ test_gaussian.c \ test_hahn1.c \ test_helical.c \ test_jennrich.c \ test_kirby2.c \ test_kowalik.c \ test_lin1.c \ test_lin2.c \ test_lin3.c \ test_linear.c \ test_longley.c \ test_meyer.c \ test_meyerscal.c \ test_nelson.c \ test_nonlinear.c \ test_osborne.c \ test_penalty1.c \ test_penalty2.c \ test_pontius.c \ test_powell1.c \ test_powell2.c \ test_powell3.c \ test_rat42.c \ test_rat43.c \ test_reg.c \ test_rosenbrock.c \ test_rosenbrocke.c \ test_roth.c \ test_shaw.c \ test_thurber.c \ test_vardim.c \ test_watson.c \ test_wnlin.c \ test_wood.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslmultifit.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../sort/libgslsort.la ../statistics/libgslstatistics.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../min/libgslmin.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu multifit/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu multifit/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslmultifit.la: $(libgslmultifit_la_OBJECTS) $(libgslmultifit_la_DEPENDENCIES) $(EXTRA_libgslmultifit_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslmultifit_la_OBJECTS) $(libgslmultifit_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convergence.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/covar.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdfridge.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdfsolver.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdjac.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsolver.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gradient.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lmder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lmniel.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multilinear.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multireg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multirobust.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiwlinear.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/robust_wfun.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/work.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/convergence.Plo -rm -f ./$(DEPDIR)/covar.Plo -rm -f ./$(DEPDIR)/fdfridge.Plo -rm -f ./$(DEPDIR)/fdfsolver.Plo -rm -f ./$(DEPDIR)/fdjac.Plo -rm -f ./$(DEPDIR)/fsolver.Plo -rm -f ./$(DEPDIR)/gcv.Plo -rm -f ./$(DEPDIR)/gradient.Plo -rm -f ./$(DEPDIR)/lmder.Plo -rm -f ./$(DEPDIR)/lmniel.Plo -rm -f ./$(DEPDIR)/multilinear.Plo -rm -f ./$(DEPDIR)/multireg.Plo -rm -f ./$(DEPDIR)/multirobust.Plo -rm -f ./$(DEPDIR)/multiwlinear.Plo -rm -f ./$(DEPDIR)/robust_wfun.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/work.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/convergence.Plo -rm -f ./$(DEPDIR)/covar.Plo -rm -f ./$(DEPDIR)/fdfridge.Plo -rm -f ./$(DEPDIR)/fdfsolver.Plo -rm -f ./$(DEPDIR)/fdjac.Plo -rm -f ./$(DEPDIR)/fsolver.Plo -rm -f ./$(DEPDIR)/gcv.Plo -rm -f ./$(DEPDIR)/gradient.Plo -rm -f ./$(DEPDIR)/lmder.Plo -rm -f ./$(DEPDIR)/lmniel.Plo -rm -f ./$(DEPDIR)/multilinear.Plo -rm -f ./$(DEPDIR)/multireg.Plo -rm -f ./$(DEPDIR)/multirobust.Plo -rm -f ./$(DEPDIR)/multiwlinear.Plo -rm -f ./$(DEPDIR)/robust_wfun.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/work.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile #demo_SOURCES = demo.c #demo_LDADD = libgslmultifit.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../randist/libgslrandist.la ../rng/libgslrng.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/multifit/test_powell1.c0000644000175000017500000000430713536674414014361 0ustar eddedd#define powell1_N 4 #define powell1_P 4 #define powell1_NTRIES 4 static double powell1_x0[powell1_P] = { 3.0, -1.0, 0.0, 1.0 }; static double powell1_epsrel = 1.0e-5; static void powell1_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < powell1_P; ++i) { gsl_test_rel(x[i], 0.0, epsrel, "%s/%s i=%zu", sname, pname, i); } } static int powell1_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get (x, 0); double x2 = gsl_vector_get (x, 1); double x3 = gsl_vector_get (x, 2); double x4 = gsl_vector_get (x, 3); gsl_vector_set(f, 0, x1 + 10.0*x2); gsl_vector_set(f, 1, sqrt(5.0) * (x3 - x4)); gsl_vector_set(f, 2, pow(x2 - 2.0*x3, 2.0)); gsl_vector_set(f, 3, sqrt(10.0) * pow((x1 - x4), 2.0)); return GSL_SUCCESS; } static int powell1_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get (x, 0); double x2 = gsl_vector_get (x, 1); double x3 = gsl_vector_get (x, 2); double x4 = gsl_vector_get (x, 3); double term1 = x2 - 2.0*x3; double term2 = x1 - x4; gsl_matrix_set(J, 0, 0, 1.0); gsl_matrix_set(J, 0, 1, 10.0); gsl_matrix_set(J, 0, 2, 0.0); gsl_matrix_set(J, 0, 3, 0.0); gsl_matrix_set(J, 1, 0, 0.0); gsl_matrix_set(J, 1, 1, 0.0); gsl_matrix_set(J, 1, 2, sqrt(5.0)); gsl_matrix_set(J, 1, 3, -sqrt(5.0)); gsl_matrix_set(J, 2, 0, 0.0); gsl_matrix_set(J, 2, 1, 2.0*term1); gsl_matrix_set(J, 2, 2, -4.0*term1); gsl_matrix_set(J, 2, 3, 0.0); gsl_matrix_set(J, 3, 0, 2.0*sqrt(10.0)*term2); gsl_matrix_set(J, 3, 1, 0.0); gsl_matrix_set(J, 3, 2, 0.0); gsl_matrix_set(J, 3, 3, -2.0*sqrt(10.0)*term2); return GSL_SUCCESS; } static gsl_multifit_function_fdf powell1_func = { &powell1_f, &powell1_df, NULL, powell1_N, powell1_P, NULL, 0, 0 }; static test_fdf_problem powell1_problem = { "powell_singular", powell1_x0, NULL, &powell1_epsrel, powell1_NTRIES, &powell1_checksol, &powell1_func }; gsl/multifit/test_hahn1.c0000644000175000017500000002236013536674414013774 0ustar eddedd#define hahn1_N 236 #define hahn1_P 7 #define hahn1_NTRIES 1 /* double hahn1_x0[7] = { 10, -1, 0.05, -0.00001, -0.05, 0.001, -0.000001 }; */ static double hahn1_x0[hahn1_P] = { 1, -0.1, 0.005, -0.000001, -0.005, 0.0001, -0.0000001}; static double hahn1_epsrel = 1.0e-5; static double hahn1_sigma[hahn1_P] = { 1.7070154742E-01, 1.2000289189E-02, 2.2508314937E-04, 2.7578037666E-07, 2.4712888219E-04, 1.0449373768E-05, 1.3027335327E-08 }; static double hahn1_F1[hahn1_N] = { .591E0, 1.547E0, 2.902E0, 2.894E0, 4.703E0, 6.307E0, 7.03E0 , 7.898E0, 9.470E0, 9.484E0, 10.072E0, 10.163E0, 11.615E0, 12.005E0, 12.478E0, 12.982E0, 12.970E0, 13.926E0, 14.452E0, 14.404E0, 15.190E0, 15.550E0, 15.528E0, 15.499E0, 16.131E0, 16.438E0, 16.387E0, 16.549E0, 16.872E0, 16.830E0, 16.926E0, 16.907E0, 16.966E0, 17.060E0, 17.122E0, 17.311E0, 17.355E0, 17.668E0, 17.767E0, 17.803E0, 17.765E0, 17.768E0, 17.736E0, 17.858E0, 17.877E0, 17.912E0, 18.046E0, 18.085E0, 18.291E0, 18.357E0, 18.426E0, 18.584E0, 18.610E0, 18.870E0, 18.795E0, 19.111E0, .367E0, .796E0, 0.892E0, 1.903E0, 2.150E0, 3.697E0, 5.870E0, 6.421E0, 7.422E0, 9.944E0, 11.023E0, 11.87E0 , 12.786E0, 14.067E0, 13.974E0, 14.462E0, 14.464E0, 15.381E0, 15.483E0, 15.59E0 , 16.075E0, 16.347E0, 16.181E0, 16.915E0, 17.003E0, 16.978E0, 17.756E0, 17.808E0, 17.868E0, 18.481E0, 18.486E0, 19.090E0, 16.062E0, 16.337E0, 16.345E0, 16.388E0, 17.159E0, 17.116E0, 17.164E0, 17.123E0, 17.979E0, 17.974E0, 18.007E0, 17.993E0, 18.523E0, 18.669E0, 18.617E0, 19.371E0, 19.330E0, 0.080E0, 0.248E0, 1.089E0, 1.418E0, 2.278E0, 3.624E0, 4.574E0, 5.556E0, 7.267E0, 7.695E0, 9.136E0, 9.959E0, 9.957E0, 11.600E0, 13.138E0, 13.564E0, 13.871E0, 13.994E0, 14.947E0, 15.473E0, 15.379E0, 15.455E0, 15.908E0, 16.114E0, 17.071E0, 17.135E0, 17.282E0, 17.368E0, 17.483E0, 17.764E0, 18.185E0, 18.271E0, 18.236E0, 18.237E0, 18.523E0, 18.627E0, 18.665E0, 19.086E0, 0.214E0, 0.943E0, 1.429E0, 2.241E0, 2.951E0, 3.782E0, 4.757E0, 5.602E0, 7.169E0, 8.920E0, 10.055E0, 12.035E0, 12.861E0, 13.436E0, 14.167E0, 14.755E0, 15.168E0, 15.651E0, 15.746E0, 16.216E0, 16.445E0, 16.965E0, 17.121E0, 17.206E0, 17.250E0, 17.339E0, 17.793E0, 18.123E0, 18.49E0 , 18.566E0, 18.645E0, 18.706E0, 18.924E0, 19.1E0 , 0.375E0, 0.471E0, 1.504E0, 2.204E0, 2.813E0, 4.765E0, 9.835E0, 10.040E0, 11.946E0, 12.596E0, 13.303E0, 13.922E0, 14.440E0, 14.951E0, 15.627E0, 15.639E0, 15.814E0, 16.315E0, 16.334E0, 16.430E0, 16.423E0, 17.024E0, 17.009E0, 17.165E0, 17.134E0, 17.349E0, 17.576E0, 17.848E0, 18.090E0, 18.276E0, 18.404E0, 18.519E0, 19.133E0, 19.074E0, 19.239E0, 19.280E0, 19.101E0, 19.398E0, 19.252E0, 19.89E0 , 20.007E0, 19.929E0, 19.268E0, 19.324E0, 20.049E0, 20.107E0, 20.062E0, 20.065E0, 19.286E0, 19.972E0, 20.088E0, 20.743E0, 20.83E0 , 20.935E0, 21.035E0, 20.93E0 , 21.074E0, 21.085E0, 20.935E0 }; static double hahn1_F0[hahn1_N] = { 24.41E0, 34.82E0, 44.09E0, 45.07E0, 54.98E0, 65.51E0, 70.53E0, 75.70E0, 89.57E0, 91.14E0, 96.40E0, 97.19E0, 114.26E0, 120.25E0, 127.08E0, 133.55E0, 133.61E0, 158.67E0, 172.74E0, 171.31E0, 202.14E0, 220.55E0, 221.05E0, 221.39E0, 250.99E0, 268.99E0, 271.80E0, 271.97E0, 321.31E0, 321.69E0, 330.14E0, 333.03E0, 333.47E0, 340.77E0, 345.65E0, 373.11E0, 373.79E0, 411.82E0, 419.51E0, 421.59E0, 422.02E0, 422.47E0, 422.61E0, 441.75E0, 447.41E0, 448.7E0 , 472.89E0, 476.69E0, 522.47E0, 522.62E0, 524.43E0, 546.75E0, 549.53E0, 575.29E0, 576.00E0, 625.55E0, 20.15E0, 28.78E0, 29.57E0, 37.41E0, 39.12E0, 50.24E0, 61.38E0, 66.25E0, 73.42E0, 95.52E0, 107.32E0, 122.04E0, 134.03E0, 163.19E0, 163.48E0, 175.70E0, 179.86E0, 211.27E0, 217.78E0, 219.14E0, 262.52E0, 268.01E0, 268.62E0, 336.25E0, 337.23E0, 339.33E0, 427.38E0, 428.58E0, 432.68E0, 528.99E0, 531.08E0, 628.34E0, 253.24E0, 273.13E0, 273.66E0, 282.10E0, 346.62E0, 347.19E0, 348.78E0, 351.18E0, 450.10E0, 450.35E0, 451.92E0, 455.56E0, 552.22E0, 553.56E0, 555.74E0, 652.59E0, 656.20E0, 14.13E0, 20.41E0, 31.30E0, 33.84E0, 39.70E0, 48.83E0, 54.50E0, 60.41E0, 72.77E0, 75.25E0, 86.84E0, 94.88E0, 96.40E0, 117.37E0, 139.08E0, 147.73E0, 158.63E0, 161.84E0, 192.11E0, 206.76E0, 209.07E0, 213.32E0, 226.44E0, 237.12E0, 330.90E0, 358.72E0, 370.77E0, 372.72E0, 396.24E0, 416.59E0, 484.02E0, 495.47E0, 514.78E0, 515.65E0, 519.47E0, 544.47E0, 560.11E0, 620.77E0, 18.97E0, 28.93E0, 33.91E0, 40.03E0, 44.66E0, 49.87E0, 55.16E0, 60.90E0, 72.08E0, 85.15E0, 97.06E0, 119.63E0, 133.27E0, 143.84E0, 161.91E0, 180.67E0, 198.44E0, 226.86E0, 229.65E0, 258.27E0, 273.77E0, 339.15E0, 350.13E0, 362.75E0, 371.03E0, 393.32E0, 448.53E0, 473.78E0, 511.12E0, 524.70E0, 548.75E0, 551.64E0, 574.02E0, 623.86E0, 21.46E0, 24.33E0, 33.43E0, 39.22E0, 44.18E0, 55.02E0, 94.33E0, 96.44E0, 118.82E0, 128.48E0, 141.94E0, 156.92E0, 171.65E0, 190.00E0, 223.26E0, 223.88E0, 231.50E0, 265.05E0, 269.44E0, 271.78E0, 273.46E0, 334.61E0, 339.79E0, 349.52E0, 358.18E0, 377.98E0, 394.77E0, 429.66E0, 468.22E0, 487.27E0, 519.54E0, 523.03E0, 612.99E0, 638.59E0, 641.36E0, 622.05E0, 631.50E0, 663.97E0, 646.9E0 , 748.29E0, 749.21E0, 750.14E0, 647.04E0, 646.89E0, 746.9E0 , 748.43E0, 747.35E0, 749.27E0, 647.61E0, 747.78E0, 750.51E0, 851.37E0, 845.97E0, 847.54E0, 849.93E0, 851.61E0, 849.75E0, 850.98E0, 848.23E0 }; static void hahn1_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 1.5324382854E+00; const double hahn1_x[hahn1_P] = { 1.0776351733E+00, -1.2269296921E-01, 4.0863750610E-03, -1.4262662514E-06, -5.7609940901E-03, 2.4053735503E-04, -1.2314450199E-07 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < hahn1_P; ++i) { gsl_test_rel(x[i], hahn1_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int hahn1_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[hahn1_P]; size_t i; for (i = 0; i < hahn1_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < hahn1_N; i++) { double x = hahn1_F0[i]; double y = ((b[0] + x* (b[1] + x * (b[2] + x * b[3]))) / (1 + x*(b[4] + x *(b[5] + x*b[6])))); gsl_vector_set (f, i, hahn1_F1[i] - y); } return GSL_SUCCESS; } static int hahn1_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[hahn1_P]; size_t i; for (i = 0; i < hahn1_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < hahn1_N; i++) { double x = hahn1_F0[i]; double u = (b[0] + x*(b[1] + x*(b[2] + x * b[3]))); double v = (1 + x*(b[4] + x*(b[5] + x*b[6]))); gsl_matrix_set (df, i, 0, -1/v); gsl_matrix_set (df, i, 1, -x/v); gsl_matrix_set (df, i, 2, -x*x/v); gsl_matrix_set (df, i, 3, -x*x*x/v); gsl_matrix_set (df, i, 4, x*u/(v*v)); gsl_matrix_set (df, i, 5, x*x*u/(v*v)); gsl_matrix_set (df, i, 6, x*x*x*u/(v*v)); } return GSL_SUCCESS; } static gsl_multifit_function_fdf hahn1_func = { &hahn1_f, &hahn1_df, NULL, hahn1_N, hahn1_P, NULL, 0, 0 }; static test_fdf_problem hahn1_problem = { "nist-hahn1", hahn1_x0, hahn1_sigma, &hahn1_epsrel, hahn1_NTRIES, &hahn1_checksol, &hahn1_func }; gsl/multifit/lmder.c0000644000175000017500000002545613536674414013052 0ustar eddedd/* multfit/lmder.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include typedef struct { size_t iter; double xnorm; double fnorm; double delta; double par; gsl_matrix *J; /* Jacobian matrix */ gsl_matrix *r; /* R matrix in J = Q R P^T */ gsl_vector *tau; gsl_vector *diag; /* scaling matrix D = diag(d1,...,dp) */ gsl_vector *qtf; /* Q^T f */ gsl_vector *newton; gsl_vector *gradient; /* gradient g = J^T f */ gsl_vector *x_trial; /* trial step x + dx */ gsl_vector *f_trial; /* trial function f(x + dx) */ gsl_vector *df; gsl_vector *sdiag; gsl_vector *rptdx; const gsl_vector *weights; /* data weights */ gsl_vector *w; gsl_vector *work1; gsl_permutation * perm; } lmder_state_t; static int lmder_alloc (void *vstate, size_t n, size_t p); static int lmder_set (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx); static int lmsder_set (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx); static int set (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx, int scale); static int lmder_iterate (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx); static void lmder_free (void *vstate); static int iterate (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx, int scale); #include "lmutil.c" #include "lmpar.c" #include "lmset.c" #include "lmiterate.c" static int lmder_alloc (void *vstate, size_t n, size_t p) { lmder_state_t *state = (lmder_state_t *) vstate; gsl_matrix *r, *J; gsl_vector *tau, *diag, *qtf, *newton, *gradient, *x_trial, *f_trial, *df, *sdiag, *rptdx, *w, *work1; gsl_permutation *perm; J = gsl_matrix_alloc (n, p); if (J == 0) { GSL_ERROR ("failed to allocate space for J", GSL_ENOMEM); } state->J = J; r = gsl_matrix_alloc (n, p); if (r == 0) { GSL_ERROR ("failed to allocate space for r", GSL_ENOMEM); } state->r = r; tau = gsl_vector_calloc (GSL_MIN(n, p)); if (tau == 0) { gsl_matrix_free (r); GSL_ERROR ("failed to allocate space for tau", GSL_ENOMEM); } state->tau = tau; diag = gsl_vector_calloc (p); if (diag == 0) { gsl_matrix_free (r); gsl_vector_free (tau); GSL_ERROR ("failed to allocate space for diag", GSL_ENOMEM); } state->diag = diag; qtf = gsl_vector_calloc (n); if (qtf == 0) { gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); GSL_ERROR ("failed to allocate space for qtf", GSL_ENOMEM); } state->qtf = qtf; newton = gsl_vector_calloc (p); if (newton == 0) { gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); GSL_ERROR ("failed to allocate space for newton", GSL_ENOMEM); } state->newton = newton; gradient = gsl_vector_calloc (p); if (gradient == 0) { gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); GSL_ERROR ("failed to allocate space for gradient", GSL_ENOMEM); } state->gradient = gradient; x_trial = gsl_vector_calloc (p); if (x_trial == 0) { gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); GSL_ERROR ("failed to allocate space for x_trial", GSL_ENOMEM); } state->x_trial = x_trial; f_trial = gsl_vector_calloc (n); if (f_trial == 0) { gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); GSL_ERROR ("failed to allocate space for f_trial", GSL_ENOMEM); } state->f_trial = f_trial; df = gsl_vector_calloc (n); if (df == 0) { gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); GSL_ERROR ("failed to allocate space for df", GSL_ENOMEM); } state->df = df; sdiag = gsl_vector_calloc (p); if (sdiag == 0) { gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); gsl_vector_free (df); GSL_ERROR ("failed to allocate space for sdiag", GSL_ENOMEM); } state->sdiag = sdiag; rptdx = gsl_vector_calloc (n); if (rptdx == 0) { gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); gsl_vector_free (df); gsl_vector_free (sdiag); GSL_ERROR ("failed to allocate space for rptdx", GSL_ENOMEM); } state->rptdx = rptdx; w = gsl_vector_calloc (n); if (w == 0) { gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); gsl_vector_free (df); gsl_vector_free (sdiag); gsl_vector_free (rptdx); GSL_ERROR ("failed to allocate space for w", GSL_ENOMEM); } state->w = w; work1 = gsl_vector_calloc (p); if (work1 == 0) { gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); gsl_vector_free (df); gsl_vector_free (sdiag); gsl_vector_free (rptdx); gsl_vector_free (w); GSL_ERROR ("failed to allocate space for work1", GSL_ENOMEM); } state->work1 = work1; perm = gsl_permutation_calloc (p); if (perm == 0) { gsl_matrix_free (r); gsl_vector_free (tau); gsl_vector_free (diag); gsl_vector_free (qtf); gsl_vector_free (newton); gsl_vector_free (gradient); gsl_vector_free (x_trial); gsl_vector_free (f_trial); gsl_vector_free (df); gsl_vector_free (sdiag); gsl_vector_free (rptdx); gsl_vector_free (w); gsl_vector_free (work1); GSL_ERROR ("failed to allocate space for perm", GSL_ENOMEM); } state->perm = perm; return GSL_SUCCESS; } static int lmder_set (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx) { int status = set (vstate, swts, fdf, x, f, dx, 0); return status ; } static int lmsder_set (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx) { int status = set (vstate, swts, fdf, x, f, dx, 1); return status ; } static int lmder_iterate (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx) { int status = iterate (vstate, swts, fdf, x, f, dx, 0); return status; } static int lmsder_iterate (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx) { int status = iterate (vstate, swts, fdf, x, f, dx, 1); return status; } static int lmder_gradient (void *vstate, gsl_vector * g) { lmder_state_t *state = (lmder_state_t *) vstate; compute_gradient(state->r, state->qtf, g); return GSL_SUCCESS; } static int lmder_jac (void *vstate, gsl_matrix * J) { lmder_state_t *state = (lmder_state_t *) vstate; int s = gsl_matrix_memcpy(J, state->J); return s; } static void lmder_free (void *vstate) { lmder_state_t *state = (lmder_state_t *) vstate; if (state->perm) gsl_permutation_free (state->perm); if (state->work1) gsl_vector_free (state->work1); if (state->w) gsl_vector_free (state->w); if (state->rptdx) gsl_vector_free (state->rptdx); if (state->sdiag) gsl_vector_free (state->sdiag); if (state->df) gsl_vector_free (state->df); if (state->f_trial) gsl_vector_free (state->f_trial); if (state->x_trial) gsl_vector_free (state->x_trial); if (state->gradient) gsl_vector_free (state->gradient); if (state->newton) gsl_vector_free (state->newton); if (state->qtf) gsl_vector_free (state->qtf); if (state->diag) gsl_vector_free (state->diag); if (state->tau) gsl_vector_free (state->tau); if (state->r) gsl_matrix_free (state->r); if (state->J) gsl_matrix_free (state->J); } static const gsl_multifit_fdfsolver_type lmder_type = { "lmder", /* name */ sizeof (lmder_state_t), &lmder_alloc, &lmder_set, &lmder_iterate, &lmder_gradient, &lmder_jac, &lmder_free }; static const gsl_multifit_fdfsolver_type lmsder_type = { "lmsder", /* name */ sizeof (lmder_state_t), &lmder_alloc, &lmsder_set, &lmsder_iterate, &lmder_gradient, &lmder_jac, &lmder_free }; const gsl_multifit_fdfsolver_type *gsl_multifit_fdfsolver_lmder = &lmder_type; const gsl_multifit_fdfsolver_type *gsl_multifit_fdfsolver_lmsder = &lmsder_type; gsl/multifit/test_penalty2.c0000644000175000017500000000557613536674414014545 0ustar eddedd#define penalty2_N 8 /* 2*p */ #define penalty2_P 4 #define penalty2_NTRIES 3 static double penalty2_x0[penalty2_P] = { 0.5, 0.5, 0.5, 0.5 }; static double penalty2_epsrel = 1.0e-12; static void penalty2_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { const double sumsq_exact = 9.37629300735544219e-06; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); } static int penalty2_f (const gsl_vector * x, void *params, gsl_vector * f) { const double alpha = 1.0e-5; const double sqrt_alpha = sqrt(alpha); double x1 = gsl_vector_get(x, 0); size_t i; double sum = penalty2_P * x1 * x1; gsl_vector_set(f, 0, x1 - 0.2); /* rows [2:p] */ for (i = 1; i < penalty2_P; ++i) { double xi = gsl_vector_get(x, i); double xim1 = gsl_vector_get(x, i - 1); double yi = exp(0.1*(i + 1.0)) + exp(0.1*i); gsl_vector_set(f, i, sqrt_alpha*(exp(0.1*xi) + exp(0.1*xim1) - yi)); sum += (penalty2_P - i) * xi * xi; } /* rows [p+1:2p-1] */ for (i = penalty2_P; i < penalty2_N - 1; ++i) { double xi = gsl_vector_get(x, i - penalty2_P + 1); gsl_vector_set(f, i, sqrt_alpha*(exp(0.1*xi) - exp(-0.1))); } /* row 2p */ gsl_vector_set(f, penalty2_N - 1, sum - 1.0); return GSL_SUCCESS; } static int penalty2_df (const gsl_vector * x, void *params, gsl_matrix * J) { const double alpha = 1.0e-5; const double sqrt_alpha = sqrt(alpha); size_t i, j; for (j = 0; j < penalty2_P; ++j) { double xj = gsl_vector_get(x, j); double delta1j = (j == 0) ? 1.0 : 0.0; /* first and last rows */ gsl_matrix_set(J, 0, j, delta1j); gsl_matrix_set(J, penalty2_N - 1, j, 2.0 * (penalty2_P - j) * xj); /* rows [2:p] */ for (i = 1; i < penalty2_P; ++i) { double xi = gsl_vector_get(x, i); double xim1 = gsl_vector_get(x, i - 1); double Jij; if (i == j) Jij = exp(0.1 * xi); else if (i - 1 == j) Jij = exp(0.1 * xim1); else Jij = 0.0; Jij *= 0.1 * sqrt_alpha; gsl_matrix_set(J, i, j, Jij); } /* rows [p+1:2p-1] */ for (i = penalty2_P; i < penalty2_N - 1; ++i) { double xi = gsl_vector_get(x, i - penalty2_P + 1); if (i - penalty2_P + 1 == j) gsl_matrix_set(J, i, j, 0.1 * sqrt_alpha * exp(0.1*xi)); else gsl_matrix_set(J, i, j, 0.0); } } return GSL_SUCCESS; } static gsl_multifit_function_fdf penalty2_func = { &penalty2_f, &penalty2_df, NULL, penalty2_N, penalty2_P, NULL, 0, 0 }; static test_fdf_problem penalty2_problem = { "penalty2", penalty2_x0, NULL, &penalty2_epsrel, penalty2_NTRIES, &penalty2_checksol, &penalty2_func }; gsl/multifit/qrsolv.c0000644000175000017500000001324713536674414013270 0ustar eddedd/* This function computes the solution to the least squares system phi = [ A x = b , lambda D x = 0 ]^2 where A is an M by N matrix, D is an N by N diagonal matrix, lambda is a scalar parameter and b is a vector of length M. The function requires the factorization of A into A = Q R P^T, where Q is an orthogonal matrix, R is an upper triangular matrix with diagonal elements of non-increasing magnitude and P is a permuation matrix. The system above is then equivalent to [ R z = Q^T b, P^T (lambda D) P z = 0 ] where x = P z. If this system does not have full rank then a least squares solution is obtained. On output the function also provides an upper triangular matrix S such that P^T (A^T A + lambda^2 D^T D) P = S^T S Parameters, r: On input, contains the full upper triangle of R. On output the strict lower triangle contains the transpose of the strict upper triangle of S, and the diagonal of S is stored in sdiag. The full upper triangle of R is not modified. p: the encoded form of the permutation matrix P. column j of P is column p[j] of the identity matrix. lambda, diag: contains the scalar lambda and the diagonal elements of the matrix D qtb: contains the product Q^T b x: on output contains the least squares solution of the system wa: is a workspace of length N */ static int qrsolv (gsl_matrix * r, const gsl_permutation * p, const double lambda, const gsl_vector * diag, const gsl_vector * qtb, gsl_vector * x, gsl_vector * sdiag, gsl_vector * wa) { size_t n = r->size2; size_t i, j, k, nsing; /* Copy r and qtb to preserve input and initialise s. In particular, save the diagonal elements of r in x */ for (j = 0; j < n; j++) { double rjj = gsl_matrix_get (r, j, j); double qtbj = gsl_vector_get (qtb, j); for (i = j + 1; i < n; i++) { double rji = gsl_matrix_get (r, j, i); gsl_matrix_set (r, i, j, rji); } gsl_vector_set (x, j, rjj); gsl_vector_set (wa, j, qtbj); } /* Eliminate the diagonal matrix d using a Givens rotation */ for (j = 0; j < n; j++) { double qtbpj; size_t pj = gsl_permutation_get (p, j); double diagpj = lambda * gsl_vector_get (diag, pj); if (diagpj == 0) { continue; } gsl_vector_set (sdiag, j, diagpj); for (k = j + 1; k < n; k++) { gsl_vector_set (sdiag, k, 0.0); } /* The transformations to eliminate the row of d modify only a single element of qtb beyond the first n, which is initially zero */ qtbpj = 0; for (k = j; k < n; k++) { /* Determine a Givens rotation which eliminates the appropriate element in the current row of d */ double sine, cosine; double wak = gsl_vector_get (wa, k); double rkk = gsl_matrix_get (r, k, k); double sdiagk = gsl_vector_get (sdiag, k); if (sdiagk == 0) { continue; } if (fabs (rkk) < fabs (sdiagk)) { double cotangent = rkk / sdiagk; sine = 0.5 / sqrt (0.25 + 0.25 * cotangent * cotangent); cosine = sine * cotangent; } else { double tangent = sdiagk / rkk; cosine = 0.5 / sqrt (0.25 + 0.25 * tangent * tangent); sine = cosine * tangent; } /* Compute the modified diagonal element of r and the modified element of [qtb,0] */ { double new_rkk = cosine * rkk + sine * sdiagk; double new_wak = cosine * wak + sine * qtbpj; qtbpj = -sine * wak + cosine * qtbpj; gsl_matrix_set(r, k, k, new_rkk); gsl_vector_set(wa, k, new_wak); } /* Accumulate the transformation in the row of s */ for (i = k + 1; i < n; i++) { double rik = gsl_matrix_get (r, i, k); double sdiagi = gsl_vector_get (sdiag, i); double new_rik = cosine * rik + sine * sdiagi; double new_sdiagi = -sine * rik + cosine * sdiagi; gsl_matrix_set(r, i, k, new_rik); gsl_vector_set(sdiag, i, new_sdiagi); } } /* Store the corresponding diagonal element of s and restore the corresponding diagonal element of r */ { double rjj = gsl_matrix_get (r, j, j); double xj = gsl_vector_get(x, j); gsl_vector_set (sdiag, j, rjj); gsl_matrix_set (r, j, j, xj); } } /* Solve the triangular system for z. If the system is singular then obtain a least squares solution */ nsing = n; for (j = 0; j < n; j++) { double sdiagj = gsl_vector_get (sdiag, j); if (sdiagj == 0) { nsing = j; break; } } for (j = nsing; j < n; j++) { gsl_vector_set (wa, j, 0.0); } for (k = 0; k < nsing; k++) { double sum = 0; j = (nsing - 1) - k; for (i = j + 1; i < nsing; i++) { sum += gsl_matrix_get(r, i, j) * gsl_vector_get(wa, i); } { double waj = gsl_vector_get (wa, j); double sdiagj = gsl_vector_get (sdiag, j); gsl_vector_set (wa, j, (waj - sum) / sdiagj); } } /* Permute the components of z back to the components of x */ for (j = 0; j < n; j++) { size_t pj = gsl_permutation_get (p, j); double waj = gsl_vector_get (wa, j); gsl_vector_set (x, pj, waj); } return GSL_SUCCESS; } gsl/multifit/test_estimator.c0000644000175000017500000000206413536674414015003 0ustar eddeddvoid test_estimator () { gsl_vector_view c; gsl_matrix_view cov; gsl_vector_view x; double y, y_err; double cov_ij[25] = { 4.271520, -0.526675, 0.957930, 0.267750, -0.103610, -0.526675, 5.701680, -0.098080, 0.641845, 0.429780, 0.957930, -0.098080, 4.584790, 0.375865, 1.510810, 0.267750, 0.641845, 0.375865, 4.422720, 0.392210, -0.103610, 0.429780, 1.510810, 0.392210, 5.782750 }; double c_i[5] = { -0.627020, 0.848674, 0.216877, -0.057883, 0.596668 }; double x_i[5] = { 0.99932, 0.23858, 0.19797, 1.44008, -0.15335 }; double y_expected = -5.56037032230000e-01; double yerr_expected = 3.91891123349318e+00; cov = gsl_matrix_view_array(cov_ij, 5, 5); c = gsl_vector_view_array(c_i, 5); x = gsl_vector_view_array(x_i, 5); gsl_multifit_linear_est(&x.vector , &c.vector, &cov.matrix, &y, &y_err); gsl_test_rel (y, y_expected, 256*GSL_DBL_EPSILON, "gsl_multifit_linear_est y"); gsl_test_rel (y_err, yerr_expected, 256*GSL_DBL_EPSILON, "gsl_multifit_linear_est yerr"); } gsl/multifit/work.c0000644000175000017500000000573213536674414012724 0ustar eddedd/* multifit/work.c * * Copyright (C) 2000, 2007, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include gsl_multifit_linear_workspace * gsl_multifit_linear_alloc (const size_t nmax, const size_t pmax) { gsl_multifit_linear_workspace *w; w = calloc (1, sizeof (gsl_multifit_linear_workspace)); if (w == 0) { GSL_ERROR_VAL ("failed to allocate space for multifit_linear struct", GSL_ENOMEM, 0); } w->nmax = nmax; /* max number of observations */ w->pmax = pmax; /* max number of parameters */ w->n = 0; w->p = 0; w->rcond = 0.0; w->A = gsl_matrix_alloc (nmax, pmax); if (w->A == 0) { gsl_multifit_linear_free(w); GSL_ERROR_VAL ("failed to allocate space for A", GSL_ENOMEM, 0); } w->Q = gsl_matrix_alloc (pmax, pmax); if (w->Q == 0) { gsl_multifit_linear_free(w); GSL_ERROR_VAL ("failed to allocate space for Q", GSL_ENOMEM, 0); } w->QSI = gsl_matrix_alloc (pmax, pmax); if (w->QSI == 0) { gsl_multifit_linear_free(w); GSL_ERROR_VAL ("failed to allocate space for QSI", GSL_ENOMEM, 0); } w->S = gsl_vector_alloc (pmax); if (w->S == 0) { gsl_multifit_linear_free(w); GSL_ERROR_VAL ("failed to allocate space for S", GSL_ENOMEM, 0); } w->t = gsl_vector_alloc (nmax); if (w->t == 0) { gsl_multifit_linear_free(w); GSL_ERROR_VAL ("failed to allocate space for t", GSL_ENOMEM, 0); } w->xt = gsl_vector_calloc (pmax); if (w->xt == 0) { gsl_multifit_linear_free(w); GSL_ERROR_VAL ("failed to allocate space for xt", GSL_ENOMEM, 0); } w->D = gsl_vector_calloc (pmax); if (w->D == 0) { gsl_multifit_linear_free(w); GSL_ERROR_VAL ("failed to allocate space for D", GSL_ENOMEM, 0); } return w; } void gsl_multifit_linear_free (gsl_multifit_linear_workspace * w) { RETURN_IF_NULL (w); if (w->A) gsl_matrix_free (w->A); if (w->Q) gsl_matrix_free (w->Q); if (w->QSI) gsl_matrix_free (w->QSI); if (w->S) gsl_vector_free (w->S); if (w->t) gsl_vector_free (w->t); if (w->xt) gsl_vector_free (w->xt); if (w->D) gsl_vector_free (w->D); free (w); } gsl/multifit/test_reg.c0000644000175000017500000004320413536674414013552 0ustar eddedd/* generate random square orthogonal matrix via QR decomposition */ static void test_random_matrix_orth(gsl_matrix *m, const gsl_rng *r) { const size_t M = m->size1; gsl_matrix *A = gsl_matrix_alloc(M, M); gsl_vector *tau = gsl_vector_alloc(M); gsl_matrix *R = gsl_matrix_alloc(M, M); test_random_matrix(A, r, -1.0, 1.0); gsl_linalg_QR_decomp(A, tau); gsl_linalg_QR_unpack(A, tau, m, R); gsl_matrix_free(A); gsl_matrix_free(R); gsl_vector_free(tau); } /* construct ill-conditioned matrix via SVD */ static void test_random_matrix_ill(gsl_matrix *m, const gsl_rng *r) { const size_t M = m->size1; const size_t N = m->size2; gsl_matrix *U = gsl_matrix_alloc(M, M); gsl_matrix *V = gsl_matrix_alloc(N, N); gsl_vector *S = gsl_vector_alloc(N); gsl_matrix_view Uv = gsl_matrix_submatrix(U, 0, 0, M, N); const double smin = 16.0 * GSL_DBL_EPSILON; const double smax = 10.0; const double ratio = pow(smin / smax, 1.0 / (N - 1.0)); double s; size_t j; test_random_matrix_orth(U, r); test_random_matrix_orth(V, r); /* compute U * S */ s = smax; for (j = 0; j < N; ++j) { gsl_vector_view uj = gsl_matrix_column(U, j); gsl_vector_scale(&uj.vector, s); s *= ratio; } /* compute m = (U * S) * V' */ gsl_blas_dgemm(CblasNoTrans, CblasTrans, 1.0, &Uv.matrix, V, 0.0, m); gsl_matrix_free(U); gsl_matrix_free(V); gsl_vector_free(S); } /* solve system with lambda = 0 and test against OLS solution */ static void test_reg1(const gsl_matrix * X, const gsl_vector * y, const gsl_vector * wts, const double tol, gsl_multifit_linear_workspace * w, const char * desc) { const size_t n = X->size1; const size_t p = X->size2; double rnorm, snorm, chisq; gsl_vector *c0 = gsl_vector_alloc(p); gsl_vector *c1 = gsl_vector_alloc(p); gsl_matrix *cov = gsl_matrix_alloc(p, p); size_t j; if (wts) { gsl_matrix *Xs = gsl_matrix_alloc(n, p); gsl_vector *ys = gsl_vector_alloc(n); gsl_multifit_wlinear(X, wts, y, c0, cov, &chisq, w); gsl_multifit_linear_wstdform1(NULL, X, wts, y, Xs, ys, w); gsl_multifit_linear_svd(Xs, w); gsl_multifit_linear_solve(0.0, Xs, ys, c1, &rnorm, &snorm, w); gsl_matrix_free(Xs); gsl_vector_free(ys); } else { gsl_multifit_linear(X, y, c0, cov, &chisq, w); gsl_multifit_linear_svd(X, w); gsl_multifit_linear_solve(0.0, X, y, c1, &rnorm, &snorm, w); } gsl_test_rel(rnorm*rnorm, chisq, tol, "test_reg1: %s, lambda = 0, n=%zu p=%zu chisq", desc, n, p); /* test c0 = c1 */ for (j = 0; j < p; ++j) { double c0j = gsl_vector_get(c0, j); double c1j = gsl_vector_get(c1, j); gsl_test_rel(c1j, c0j, tol, "test_reg1: %s, lambda = 0, n=%zu p=%zu c0/c1", desc, n, p); } gsl_vector_free(c0); gsl_vector_free(c1); gsl_matrix_free(cov); } /* solve standard form system with given lambda and test against * normal equations solution, L = I */ static void test_reg2(const double lambda, const gsl_matrix * X, const gsl_vector * y, const gsl_vector * wts, const double tol, gsl_multifit_linear_workspace * w, const char * desc) { const size_t n = X->size1; const size_t p = X->size2; double rnorm0, snorm0; double rnorm1, snorm1; gsl_vector *c0 = gsl_vector_alloc(p); gsl_vector *c1 = gsl_vector_alloc(p); gsl_matrix *XTX = gsl_matrix_alloc(p, p); /* X^T W X + lambda^2 I */ gsl_vector *XTy = gsl_vector_alloc(p); /* X^T W y */ gsl_matrix *Xs = gsl_matrix_alloc(n, p); gsl_vector *ys = gsl_vector_alloc(n); gsl_vector_view xtx_diag = gsl_matrix_diagonal(XTX); gsl_permutation *perm = gsl_permutation_alloc(p); gsl_vector *r = gsl_vector_alloc(n); int signum; size_t j; /* compute Xs = sqrt(W) X and ys = sqrt(W) y */ gsl_multifit_linear_wstdform1(NULL, X, wts, y, Xs, ys, w); /* construct XTy = X^T W y */ gsl_blas_dgemv(CblasTrans, 1.0, Xs, ys, 0.0, XTy); /* construct XTX = X^T W X + lambda^2 I */ gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, Xs, Xs, 0.0, XTX); gsl_vector_add_constant(&xtx_diag.vector, lambda*lambda); /* solve XTX c = XTy with LU decomp */ gsl_linalg_LU_decomp(XTX, perm, &signum); gsl_linalg_LU_solve(XTX, perm, XTy, c0); /* compute SVD of X */ gsl_multifit_linear_svd(Xs, w); /* solve regularized standard form system with lambda */ gsl_multifit_linear_solve(lambda, Xs, ys, c1, &rnorm0, &snorm0, w); /* test snorm = ||c1|| */ snorm1 = gsl_blas_dnrm2(c1); gsl_test_rel(snorm0, snorm1, tol, "test_reg2: %s, snorm lambda=%g n=%zu p=%zu", desc, lambda, n, p); /* test rnorm = ||y - X c1|| */ gsl_vector_memcpy(r, ys); gsl_blas_dgemv(CblasNoTrans, -1.0, Xs, c1, 1.0, r); rnorm1 = gsl_blas_dnrm2(r); gsl_test_rel(rnorm0, rnorm1, tol, "test_reg2: %s, rnorm lambda=%g n=%zu p=%zu", desc, lambda, n, p); /* test c0 = c1 */ for (j = 0; j < p; ++j) { double c0j = gsl_vector_get(c0, j); double c1j = gsl_vector_get(c1, j); gsl_test_rel(c1j, c0j, tol, "test_reg2: %s, c0/c1 lambda=%g n=%zu p=%zu", desc, lambda, n, p); } gsl_matrix_free(XTX); gsl_vector_free(XTy); gsl_matrix_free(Xs); gsl_vector_free(ys); gsl_vector_free(c0); gsl_vector_free(c1); gsl_vector_free(r); gsl_permutation_free(perm); } /* solve system with given lambda and L = diag(L) and test against * normal equations solution */ static void test_reg3(const double lambda, const gsl_vector * L, const gsl_matrix * X, const gsl_vector * y, const gsl_vector * wts, const double tol, gsl_multifit_linear_workspace * w, const char * desc) { const size_t n = X->size1; const size_t p = X->size2; double rnorm0, snorm0; double rnorm1, snorm1; gsl_vector *c0 = gsl_vector_alloc(p); gsl_vector *c1 = gsl_vector_alloc(p); gsl_matrix *XTX = gsl_matrix_alloc(p, p); /* X^T W X + lambda^2 L^T L */ gsl_vector *XTy = gsl_vector_alloc(p); /* X^T W y */ gsl_matrix *Xs = gsl_matrix_alloc(n, p); /* standard form X~ */ gsl_vector *ys = gsl_vector_alloc(n); /* standard form y~ */ gsl_vector *Lc = gsl_vector_alloc(p); gsl_vector *r = gsl_vector_alloc(n); gsl_permutation *perm = gsl_permutation_alloc(p); int signum; size_t j; /* compute Xs = sqrt(W) X, ys = sqrt(W) y */ gsl_multifit_linear_wstdform1(NULL, X, wts, y, Xs, ys, w); /* construct XTy = X^T W y */ gsl_blas_dgemv(CblasTrans, 1.0, Xs, ys, 0.0, XTy); /* construct XTX = X^T W X + lambda^2 L^T L */ gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, Xs, Xs, 0.0, XTX); for (j = 0; j < p; ++j) { double lj = gsl_vector_get(L, j); *gsl_matrix_ptr(XTX, j, j) += pow(lambda * lj, 2.0); } /* solve XTX c = XTy with LU decomp */ gsl_linalg_LU_decomp(XTX, perm, &signum); gsl_linalg_LU_solve(XTX, perm, XTy, c0); /* solve with reg routine */ gsl_multifit_linear_wstdform1(L, X, wts, y, Xs, ys, w); gsl_multifit_linear_svd(Xs, w); gsl_multifit_linear_solve(lambda, Xs, ys, c1, &rnorm0, &snorm0, w); gsl_multifit_linear_genform1(L, c1, c1, w); /* test snorm = ||L c1|| */ gsl_vector_memcpy(Lc, c1); gsl_vector_mul(Lc, L); snorm1 = gsl_blas_dnrm2(Lc); gsl_test_rel(snorm0, snorm1, tol, "test_reg3: %s, snorm lambda=%g n=%zu p=%zu", desc, lambda, n, p); /* test rnorm = ||y - X c1||, compute again Xs = sqrt(W) X and ys = sqrt(W) y */ gsl_multifit_linear_wstdform1(NULL, X, wts, y, Xs, ys, w); gsl_vector_memcpy(r, ys); gsl_blas_dgemv(CblasNoTrans, -1.0, Xs, c1, 1.0, r); rnorm1 = gsl_blas_dnrm2(r); gsl_test_rel(rnorm0, rnorm1, tol, "test_reg3: %s, rnorm lambda=%g n=%zu p=%zu", desc, lambda, n, p); /* test c0 = c1 */ for (j = 0; j < p; ++j) { double c0j = gsl_vector_get(c0, j); double c1j = gsl_vector_get(c1, j); gsl_test_rel(c1j, c0j, tol, "test_reg3: %s, c0/c1 j=%zu lambda=%g n=%zu p=%zu", desc, j, lambda, n, p); } gsl_matrix_free(Xs); gsl_matrix_free(XTX); gsl_vector_free(XTy); gsl_vector_free(c0); gsl_vector_free(c1); gsl_vector_free(Lc); gsl_vector_free(ys); gsl_vector_free(r); gsl_permutation_free(perm); } /* solve system with given lambda and L and test against * normal equations solution */ static void test_reg4(const double lambda, const gsl_matrix * L, const gsl_matrix * X, const gsl_vector * y, const gsl_vector * wts, const double tol, gsl_multifit_linear_workspace * w, const char *desc) { const size_t m = L->size1; const size_t n = X->size1; const size_t p = X->size2; double rnorm0, snorm0; double rnorm1, snorm1; gsl_vector *c0 = gsl_vector_alloc(p); gsl_vector *c1 = gsl_vector_alloc(p); gsl_matrix *LTL = gsl_matrix_alloc(p, p); /* L^T L */ gsl_matrix *XTX = gsl_matrix_alloc(p, p); /* X^T W X + lambda^2 L^T L */ gsl_vector *XTy = gsl_vector_alloc(p); /* X^T W y */ gsl_permutation *perm = gsl_permutation_alloc(p); gsl_matrix *Xs = (m < p) ? gsl_matrix_alloc(n - (p - m), m) : gsl_matrix_alloc(n, p); gsl_vector *ys = (m < p) ? gsl_vector_alloc(n - (p - m)) : gsl_vector_alloc(n); gsl_matrix *M = (m < p) ? gsl_matrix_alloc(n, p) : gsl_matrix_alloc(m, p); gsl_vector *cs = (m < p) ? gsl_vector_alloc(m) : gsl_vector_alloc(p); gsl_matrix *WX = gsl_matrix_alloc(n, p); gsl_vector *Wy = gsl_vector_alloc(n); gsl_vector *Lc = gsl_vector_alloc(m); gsl_vector *r = gsl_vector_alloc(n); gsl_matrix *LQR = gsl_matrix_alloc(m, p); gsl_vector *Ltau = gsl_vector_alloc(GSL_MIN(m, p)); int signum; size_t j; /* compute WX = sqrt(W) X, Wy = sqrt(W) y */ gsl_multifit_linear_wstdform1(NULL, X, wts, y, WX, Wy, w); /* construct XTy = X^T W y */ gsl_blas_dgemv(CblasTrans, 1.0, WX, Wy, 0.0, XTy); /* construct XTX = X^T W X + lambda^2 L^T L */ gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, L, L, 0.0, LTL); gsl_matrix_scale(LTL, lambda * lambda); gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, WX, WX, 0.0, XTX); gsl_matrix_add(XTX, LTL); /* solve XTX c = XTy with LU decomp */ gsl_linalg_LU_decomp(XTX, perm, &signum); gsl_linalg_LU_solve(XTX, perm, XTy, c0); /* solve with reg routine */ gsl_matrix_memcpy(LQR, L); gsl_multifit_linear_L_decomp(LQR, Ltau); gsl_multifit_linear_wstdform2(LQR, Ltau, X, wts, y, Xs, ys, M, w); gsl_multifit_linear_svd(Xs, w); gsl_multifit_linear_solve(lambda, Xs, ys, cs, &rnorm0, &snorm0, w); gsl_multifit_linear_wgenform2(LQR, Ltau, X, wts, y, cs, M, c1, w); /* test snorm = ||L c1|| */ gsl_blas_dgemv(CblasNoTrans, 1.0, L, c1, 0.0, Lc); snorm1 = gsl_blas_dnrm2(Lc); gsl_test_rel(snorm0, snorm1, tol, "test_reg4: %s snorm lambda=%g", desc, lambda); /* test rnorm = ||y - X c1||_W */ gsl_vector_memcpy(r, Wy); gsl_blas_dgemv(CblasNoTrans, -1.0, WX, c1, 1.0, r); rnorm1 = gsl_blas_dnrm2(r); gsl_test_rel(rnorm0, rnorm1, tol, "test_reg4: %s rnorm lambda=%g", desc, lambda); /* test c0 = c1 */ for (j = 0; j < p; ++j) { double c0j = gsl_vector_get(c0, j); double c1j = gsl_vector_get(c1, j); gsl_test_rel(c1j, c0j, tol, "test_reg4: %s lambda=%g n=%zu p=%zu j=%zu", desc, lambda, n, p, j); } gsl_matrix_free(LTL); gsl_matrix_free(XTX); gsl_vector_free(XTy); gsl_vector_free(c0); gsl_vector_free(c1); gsl_permutation_free(perm); gsl_matrix_free(Xs); gsl_vector_free(ys); gsl_vector_free(cs); gsl_matrix_free(M); gsl_vector_free(Lc); gsl_matrix_free(WX); gsl_vector_free(Wy); gsl_vector_free(r); gsl_matrix_free(LQR); gsl_vector_free(Ltau); } static void test_reg_system(const size_t n, const size_t p, const gsl_rng *r) { gsl_matrix *X = gsl_matrix_alloc(n, p); gsl_vector *y = gsl_vector_alloc(n); gsl_vector *c = gsl_vector_alloc(p); gsl_vector *wts = gsl_vector_alloc(n); gsl_multifit_linear_workspace *w = gsl_multifit_linear_alloc(n, p); gsl_multifit_linear_workspace *wbig = gsl_multifit_linear_alloc(n + 10, p + 5); gsl_vector *diagL = gsl_vector_alloc(p); gsl_matrix *Lsqr = gsl_matrix_alloc(p, p); gsl_matrix *Ltall = gsl_matrix_alloc(5*p, p); gsl_matrix *L1 = gsl_matrix_alloc(p - 1, p); gsl_matrix *L2 = gsl_matrix_alloc(p - 2, p); gsl_matrix *L3 = gsl_matrix_alloc(p - 3, p); gsl_matrix *L5 = gsl_matrix_alloc(p - 5, p); size_t i; /* generate random weights */ test_random_vector(wts, r, 0.0, 1.0); /* generate well-conditioned system and test against OLS solution */ test_random_matrix(X, r, -1.0, 1.0); test_random_vector(y, r, -1.0, 1.0); test_reg1(X, y, NULL, 1.0e-10, w, "unweighted"); test_reg1(X, y, wts, 1.0e-10, w, "weighted"); /* generate ill-conditioned system */ test_random_matrix_ill(X, r); test_random_vector(c, r, -1.0, 1.0); /* compute y = X c + noise */ gsl_blas_dgemv(CblasNoTrans, 1.0, X, c, 0.0, y); test_random_vector_noise(r, y); /* random diag(L) vector */ test_random_vector(diagL, r, -2.0, 2.0); /* random square and tall L matrices */ test_random_matrix(Lsqr, r, -2.0, 2.0); test_random_matrix(Ltall, r, -2.0, 2.0); gsl_multifit_linear_Lk(p, 1, L1); gsl_multifit_linear_Lk(p, 2, L2); gsl_multifit_linear_Lk(p, 3, L3); gsl_multifit_linear_Lk(p, 5, L5); for (i = 0; i < 3; ++i) { /* * can't make lambda too small or normal equations * approach won't work well */ double lambda = pow(10.0, -(double) i); /* test unweighted */ test_reg2(lambda, X, y, NULL, 1.0e-6, w, "unweighted"); test_reg3(lambda, diagL, X, y, NULL, 1.0e-6, w, "unweighted"); test_reg4(lambda, Lsqr, X, y, NULL, 1.0e-8, w, "Lsqr unweighted"); test_reg4(lambda, Ltall, X, y, NULL, 1.0e-8, w, "Ltall unweighted"); test_reg4(lambda, L1, X, y, NULL, 1.0e-6, w, "L1 unweighted"); test_reg4(lambda, L2, X, y, NULL, 1.0e-6, w, "L2 unweighted"); test_reg4(lambda, L3, X, y, NULL, 1.0e-5, w, "L3 unweighted"); test_reg4(lambda, L5, X, y, NULL, 1.0e-4, w, "L5 unweighted"); /* test weighted */ test_reg2(lambda, X, y, wts, 1.0e-6, w, "weighted"); test_reg3(lambda, diagL, X, y, wts, 1.0e-6, w, "weighted"); test_reg4(lambda, Lsqr, X, y, wts, 1.0e-8, w, "Lsqr weighted"); test_reg4(lambda, L1, X, y, wts, 1.0e-6, w, "L1 weighted"); test_reg4(lambda, L2, X, y, wts, 1.0e-6, w, "L2 weighted"); test_reg4(lambda, L3, X, y, wts, 1.0e-5, w, "L3 weighted"); test_reg4(lambda, L5, X, y, wts, 1.0e-4, w, "L5 weighted"); /* test again with larger workspace */ test_reg2(lambda, X, y, NULL, 1.0e-6, wbig, "unweighted big"); test_reg3(lambda, diagL, X, y, NULL, 1.0e-6, wbig, "unweighted big"); test_reg4(lambda, Lsqr, X, y, NULL, 1.0e-8, wbig, "Lsqr unweighted big"); test_reg4(lambda, L1, X, y, NULL, 1.0e-6, wbig, "L1 unweighted big"); test_reg4(lambda, L2, X, y, NULL, 1.0e-6, wbig, "L2 unweighted big"); test_reg4(lambda, L3, X, y, NULL, 1.0e-5, wbig, "L3 unweighted big"); test_reg4(lambda, L5, X, y, NULL, 1.0e-4, wbig, "L5 unweighted big"); test_reg2(lambda, X, y, wts, 1.0e-6, wbig, "weighted big"); test_reg3(lambda, diagL, X, y, wts, 1.0e-6, wbig, "weighted big"); test_reg4(lambda, Lsqr, X, y, wts, 1.0e-8, wbig, "Lsqr weighted big"); test_reg4(lambda, L1, X, y, wts, 1.0e-6, wbig, "L1 weighted big"); test_reg4(lambda, L2, X, y, wts, 1.0e-6, wbig, "L2 weighted big"); test_reg4(lambda, L3, X, y, wts, 1.0e-5, wbig, "L3 weighted big"); test_reg4(lambda, L5, X, y, wts, 1.0e-4, wbig, "L5 weighted big"); } gsl_matrix_free(X); gsl_vector_free(y); gsl_vector_free(c); gsl_vector_free(wts); gsl_vector_free(diagL); gsl_matrix_free(Lsqr); gsl_matrix_free(Ltall); gsl_matrix_free(L1); gsl_matrix_free(L2); gsl_matrix_free(L3); gsl_matrix_free(L5); gsl_multifit_linear_free(w); gsl_multifit_linear_free(wbig); } static void test_reg_sobolev(const size_t p, const size_t kmax, const gsl_rng *r) { const double tol = 1.0e-12; size_t i, j, k; gsl_matrix *L = gsl_matrix_calloc(p, p); gsl_matrix *LTL = gsl_matrix_alloc(p, p); /* Sobolov L^T L */ gsl_matrix *LTL2 = gsl_matrix_alloc(p, p); /* alternate L^T L */ gsl_matrix *Li = gsl_matrix_alloc(p, p); gsl_multifit_linear_workspace *w = gsl_multifit_linear_alloc(p, p); for (k = 0; k <= kmax; ++k) { gsl_vector *alpha = gsl_vector_alloc(k + 1); /* random weights */ test_random_vector(alpha, r, 0.0, 1.0); /* compute Sobolev matrix */ gsl_multifit_linear_Lsobolev(p, k, alpha, L, w); /* compute LTL = L^T L */ gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, L, L, 0.0, LTL); /* now compute LTL2 = L^T L using individual L_i factors */ { gsl_matrix_set_zero(LTL2); for (i = 0; i <= k; ++i) { gsl_matrix_view Liv = gsl_matrix_submatrix(Li, 0, 0, p - i, p); double ai = gsl_vector_get(alpha, i); /* compute a_i L_i */ gsl_multifit_linear_Lk(p, i, &Liv.matrix); gsl_matrix_scale(&Liv.matrix, ai); /* LTL += L_i^T L_i */ gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, &Liv.matrix, &Liv.matrix, 1.0, LTL2); } } /* test LTL = LTL2 */ for (i = 0; i < p; ++i) { for (j = 0; j < p; ++j) { double aij = gsl_matrix_get(LTL, i, j); double bij = gsl_matrix_get(LTL2, i, j); gsl_test_rel(aij, bij, tol, "sobolov k=%zu LTL(%zu,%zu)", k, i, j); } } gsl_vector_free(alpha); } gsl_matrix_free(L); gsl_matrix_free(Li); gsl_matrix_free(LTL); gsl_matrix_free(LTL2); gsl_multifit_linear_free(w); } /* test linear regularized regression */ static void test_reg(void) { gsl_rng *r = gsl_rng_alloc(gsl_rng_default); test_reg_system(100, 15, r); test_reg_system(100, 50, r); test_reg_system(100, 99, r); test_reg_sobolev(20, 10, r); gsl_rng_free(r); } gsl/multifit/test_jennrich.c0000644000175000017500000000342113536674414014572 0ustar eddedd#define jennrich_N 10 #define jennrich_P 2 #define jennrich_NTRIES 1 static double jennrich_x0[jennrich_P] = { 0.3, 0.4 }; static double jennrich_epsrel = 1.0e-8; static void jennrich_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 1.243621823556148e+02; const double jennrich_x[jennrich_P] = { 2.578252139935855e-01, 2.578252133471426e-01 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < jennrich_P; ++i) { gsl_test_rel(x[i], jennrich_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int jennrich_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); size_t i; for (i = 0; i < jennrich_N; ++i) { double ip1 = i + 1.0; double fi = 2.0*(i + 2.0) - (exp(x1*ip1) + exp(x2*ip1)); gsl_vector_set(f, i, fi); } return GSL_SUCCESS; } static int jennrich_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); size_t i; for (i = 0; i < jennrich_N; ++i) { double ip1 = i + 1.0; gsl_matrix_set(J, i, 0, -ip1*exp(ip1*x1)); gsl_matrix_set(J, i, 1, -ip1*exp(ip1*x2)); } return GSL_SUCCESS; } static gsl_multifit_function_fdf jennrich_func = { &jennrich_f, &jennrich_df, NULL, jennrich_N, jennrich_P, NULL, 0, 0 }; static test_fdf_problem jennrich_problem = { "jennrich", jennrich_x0, NULL, &jennrich_epsrel, jennrich_NTRIES, &jennrich_checksol, &jennrich_func }; gsl/multifit/multiwlinear.c0000644000175000017500000001177613536674414014463 0ustar eddedd/* multifit/multiwlinear.c * * Copyright (C) 2015 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include "linear_common.c" int gsl_multifit_wlinear (const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, gsl_vector * c, gsl_matrix * cov, double *chisq, gsl_multifit_linear_workspace * work) { size_t rank; int status = gsl_multifit_wlinear_tsvd(X, w, y, GSL_DBL_EPSILON, c, cov, chisq, &rank, work); return status; } int gsl_multifit_wlinear_tsvd (const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, const double tol, gsl_vector * c, gsl_matrix * cov, double * chisq, size_t * rank, gsl_multifit_linear_workspace * work) { const size_t n = X->size1; const size_t p = X->size2; if (y->size != n) { GSL_ERROR("number of observations in y does not match matrix", GSL_EBADLEN); } else if (w->size != n) { GSL_ERROR("number of weights in w does not match matrix", GSL_EBADLEN); } else if (p != c->size) { GSL_ERROR ("number of parameters c does not match matrix", GSL_EBADLEN); } else if (tol <= 0) { GSL_ERROR ("tolerance must be positive", GSL_EINVAL); } else { int status; double rnorm, snorm; gsl_matrix_view A = gsl_matrix_submatrix(work->A, 0, 0, n, p); gsl_vector_view b = gsl_vector_subvector(work->t, 0, n); /* compute A = sqrt(W) X, b = sqrt(W) y */ status = gsl_multifit_linear_applyW(X, w, y, &A.matrix, &b.vector); if (status) return status; /* compute SVD of A */ status = gsl_multifit_linear_bsvd(&A.matrix, work); if (status) return status; status = multifit_linear_solve(X, &b.vector, tol, 0.0, rank, c, &rnorm, &snorm, work); if (status) return status; *chisq = rnorm * rnorm; /* variance-covariance matrix cov = s2 * (Q S^-1) (Q S^-1)^T */ { const size_t p = X->size2; size_t i, j; gsl_matrix_view QSI = gsl_matrix_submatrix(work->QSI, 0, 0, p, p); gsl_vector_view D = gsl_vector_subvector(work->D, 0, p); for (i = 0; i < p; i++) { gsl_vector_view row_i = gsl_matrix_row (&QSI.matrix, i); double d_i = gsl_vector_get (&D.vector, i); for (j = i; j < p; j++) { gsl_vector_view row_j = gsl_matrix_row (&QSI.matrix, j); double d_j = gsl_vector_get (&D.vector, j); double s; gsl_blas_ddot (&row_i.vector, &row_j.vector, &s); gsl_matrix_set (cov, i, j, s / (d_i * d_j)); gsl_matrix_set (cov, j, i, s / (d_i * d_j)); } } } } return GSL_SUCCESS; } int gsl_multifit_wlinear_svd (const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, double tol, size_t * rank, gsl_vector * c, gsl_matrix * cov, double *chisq, gsl_multifit_linear_workspace * work) { int status = gsl_multifit_wlinear_tsvd(X, w, y, tol, c, cov, chisq, rank, work); return status; } int gsl_multifit_wlinear_usvd (const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, double tol, size_t * rank, gsl_vector * c, gsl_matrix * cov, double *chisq, gsl_multifit_linear_workspace * work) { /* FIXME: this call does actually perform balancing, but this function is deprecated anyway */ int status = gsl_multifit_wlinear_tsvd(X, w, y, tol, c, cov, chisq, rank, work); return status; } gsl/multifit/test_vardim.c0000644000175000017500000000342213536674414014255 0ustar eddedd#define vardim_N 7 /* p + 2 */ #define vardim_P 5 #define vardim_NTRIES 4 static double vardim_x0[vardim_P] = { 0.8, 0.6, 0.4, 0.2, 0.0 }; static double vardim_epsrel = 1.0e-12; static void vardim_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < vardim_P; ++i) { gsl_test_rel(x[i], 1.0, epsrel, "%s/%s i=%zu", sname, pname, i); } } static int vardim_f (const gsl_vector * x, void *params, gsl_vector * f) { size_t i; double sum = 0.0; for (i = 0; i < vardim_P; ++i) { double xi = gsl_vector_get(x, i); gsl_vector_set(f, i, xi - 1.0); sum += (i + 1.0) * (xi - 1.0); } gsl_vector_set(f, vardim_P, sum); gsl_vector_set(f, vardim_P + 1, sum*sum); return GSL_SUCCESS; } static int vardim_df (const gsl_vector * x, void *params, gsl_matrix * J) { size_t i; double sum = 0.0; gsl_matrix_view m = gsl_matrix_submatrix(J, 0, 0, vardim_P, vardim_P); gsl_matrix_set_identity(&m.matrix); for (i = 0; i < vardim_P; ++i) { double xi = gsl_vector_get(x, i); sum += (i + 1.0) * (xi - 1.0); } for (i = 0; i < vardim_P; ++i) { gsl_matrix_set(J, vardim_P, i, i + 1.0); gsl_matrix_set(J, vardim_P + 1, i, 2*(i + 1.0)*sum); } return GSL_SUCCESS; } static gsl_multifit_function_fdf vardim_func = { &vardim_f, &vardim_df, NULL, vardim_N, vardim_P, NULL, 0, 0 }; static test_fdf_problem vardim_problem = { "vardim", vardim_x0, NULL, &vardim_epsrel, vardim_NTRIES, &vardim_checksol, &vardim_func }; gsl/multifit/test_exp1.c0000644000175000017500000000461213536674414013652 0ustar eddedd#define exp1_N 45 #define exp1_P 4 #define exp1_NTRIES 3 static double exp1_x0[exp1_P] = { -1.0, -2.0, 1.0, -1.0 }; static double exp1_epsrel = 1.0e-4; static double exp1_Y[exp1_N] = { 0.090542, 0.124569, 0.179367, 0.195654, 0.269707, 0.286027, 0.289892, 0.317475, 0.308191, 0.336995, 0.348371, 0.321337, 0.299423, 0.338972, 0.304763, 0.288903, 0.300820, 0.303974, 0.283987, 0.262078, 0.281593, 0.267531, 0.218926, 0.225572, 0.200594, 0.197375, 0.182440, 0.183892, 0.152285, 0.174028, 0.150874, 0.126220, 0.126266, 0.106384, 0.118923, 0.091868, 0.128926, 0.119273, 0.115997, 0.105831, 0.075261, 0.068387, 0.090823, 0.085205, 0.067203 }; static void exp1_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 1.0e-2; const double exp1_x[exp1_P] = { -4.0, -5.0, 4.0, -4.0 }; /* approx */ gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < exp1_P; ++i) { gsl_test_rel(x[i], exp1_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int exp1_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); size_t i; for (i = 0; i < exp1_N; ++i) { double ti = 0.02*(i + 1.0); double yi = exp1_Y[i]; double fi = yi - (x3*exp(x1*ti) + x4*exp(x2*ti)); gsl_vector_set(f, i, fi); } return GSL_SUCCESS; } static int exp1_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); size_t i; for (i = 0; i < exp1_N; ++i) { double ti = 0.02*(i + 1.0); double term1 = exp(x1*ti); double term2 = exp(x2*ti); gsl_matrix_set(J, i, 0, -x3*ti*term1); gsl_matrix_set(J, i, 1, -x4*ti*term2); gsl_matrix_set(J, i, 2, -term1); gsl_matrix_set(J, i, 3, -term2); } return GSL_SUCCESS; } static gsl_multifit_function_fdf exp1_func = { &exp1_f, &exp1_df, NULL, exp1_N, exp1_P, NULL, 0, 0 }; static test_fdf_problem exp1_problem = { "expfit1", exp1_x0, NULL, &exp1_epsrel, exp1_NTRIES, &exp1_checksol, &exp1_func }; gsl/multifit/ChangeLog0000644000175000017500000001301313536674414013337 0ustar eddedd2013-06-10 Patrick Alken * fdfsolver.c (gsl_multifit_fdfsolver_driver): added higher level wrapper routine 2010-02-25 Brian Gough * lmiterate.c (iterate): changed GSL_CONTINUE to GSL_ENOPROG for the case where the routine has made 10 or more attempts to find a suitable trial step without success. 2009-11-25 Brian Gough * multilinear.c (gsl_multifit_linear_usvd) (gsl_multifit_wlinear_usvd): provide an unscaled version of the fits 2009-07-09 Brian Gough * work.c (gsl_multifit_linear_free): handle NULL argument in free * fsolver.c (gsl_multifit_fsolver_free): handle NULL argument in free * fdfsolver.c (gsl_multifit_fdfsolver_free): handle NULL argument in free 2009-06-24 Brian Gough * lmset.c (set): check the return code of fdf 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2007-07-29 Brian Gough * lmset.c (set): ensure internal state is zeroed after a set 2007-01-26 Brian Gough * fsolver.c (gsl_multifit_fsolver_set): made vector argument x const 2006-03-30 Brian Gough * fsolver.c (gsl_multifit_fsolver_alloc): minpack algorithms require n>=p, added check * fdfsolver.c (gsl_multifit_fdfsolver_alloc): minpack algorithms require n>=p, added check 2006-02-20 Brian Gough * multilinear.c (gsl_multifit_linear_est): added linear estimator * test_estimator.c (test_estimator): added test for gsl_multifit_linear_est 2005-07-03 Brian Gough * multilinear.c (gsl_multifit_linear_svd): accept a user-specified tolerance for the SVD cutoff and return effective rank (gsl_multifit_wlinear_svd): same 2004-12-23 Brian Gough * gsl_multifit_nlin.h: removed unused declaration of gsl_multifit_fdjacobian 2004-06-14 Brian Gough * lmiterate.c (iterate): handle case where fnorm = 0 to avoid division by zero * covar.c (gsl_multifit_covar): change tolerance test to match original code, and handle case where tolr = 0 2003-03-21 Brian Gough * lmset.c (set): removed reference to q, compute QR decomposition in place * lmiterate.c (iterate): removed reference to q, compute QR decomposition in-place for R * lmutil.c: removed compute_qtf * lmder.c (lmder_free): removed reference to q (lmder_alloc): removed reference to q Tue Nov 12 22:18:14 2002 Brian Gough * lmder.c (lmder_alloc): use GSL_ERROR instead of GSL_ERROR_VAL for internal alloc functions which return int Thu Feb 28 20:15:33 2002 Brian Gough * lmiterate.c (iterate): return immediately if evaluation raised error (Hans E. Plesser) * lmpar.c (lmpar): avoid division by zero for w=0 in rank deficient case Mon Oct 8 19:25:55 2001 Brian Gough * test.c (main): added extra nist tests * lmutil.c (compute_rptdx): fixed bug, permutation in rptdx vector was incorrectly applied * lmpar.c (compute_newton_direction): fixed bug, permutation of newton direction vector was incorrect (should have been inverse permutation) Mon Jul 30 17:43:21 2001 Brian Gough * test_filip.c (test_filip): reduce tolerance on covariance test slightly for MSVC with /O2 Sun Jul 1 22:42:34 2001 Brian Gough * multilinear.c: modified to use new-style vector views * test_pontius.c: modified to use new-style vector views * test_longley.c: modified to use new-style vector views * test_fn.c: modified to use new-style vector views * test_filip.c: modified to use new-style vector views Tue Jun 26 21:41:30 2001 Brian Gough * test_filip.c (test_filip): reduce tolerance on covariance test slightly Wed Jun 20 13:11:26 2001 Brian Gough * removed unused variable work2 Tue Jun 19 23:18:01 2001 Brian Gough * multilinear.c: perform column scaling before doing fit to improve accuracy (gsl_multifit_linear): use modified Golub-Reinsch SVD for greater speed (gsl_multifit_wlinear): use modified Golub-Reinsch SVD for greater speed Wed Jun 6 13:32:22 2001 Brian Gough * lmder.c covar.c lmiterate.c lmset.c: updated to use new QR calling convention (now passes workspace) Sat Apr 28 11:46:59 2001 Brian Gough * qrsolv.c (qrsolv): removed local declaration of j to avoid shadowing global j Mon Apr 23 13:40:04 2001 Brian Gough * qrsolv.c (qrsolv): made function static so it is not exported Wed Apr 18 13:39:33 2001 Brian Gough * lmpar.c (compute_newton_direction): moved final rescaling inside loop, as in the original lmpar.f Thu Mar 8 15:29:32 2001 Brian Gough * lmpar.c (compute_newton_direction): corrected bug that produced negative index Sun Feb 18 16:39:46 2001 Brian Gough * fdfsolver.c (gsl_multifit_fdfsolver_alloc): changed so that the solver _alloc function no longer calls _set, the user must do that separately. Fri Sep 29 19:19:24 2000 Brian Gough * Makefile.am multifit/demo.c: removed demo from Makefile since it is was just a temporary test. gsl/multifit/Makefile.am0000644000175000017500000000527013536674414013627 0ustar eddeddnoinst_LTLIBRARIES = libgslmultifit.la pkginclude_HEADERS = gsl_multifit.h gsl_multifit_nlin.h AM_CPPFLAGS = -I$(top_srcdir) libgslmultifit_la_SOURCES = gcv.c multilinear.c multiwlinear.c work.c lmniel.c lmder.c fsolver.c fdfsolver.c fdfridge.c fdjac.c convergence.c gradient.c covar.c multirobust.c robust_wfun.c multireg.c noinst_HEADERS = \ linear_common.c \ lmutil.c \ lmpar.c \ lmset.c \ lmiterate.c \ lmmisc.c \ qrsolv.c \ test_bard.c \ test_beale.c \ test_biggs.c \ test_box.c \ test_boxbod.c \ test_brown1.c \ test_brown2.c \ test_brown3.c \ test_eckerle.c \ test_enso.c \ test_estimator.c \ test_exp1.c \ test_filip.c \ test_gaussian.c \ test_hahn1.c \ test_helical.c \ test_jennrich.c \ test_kirby2.c \ test_kowalik.c \ test_lin1.c \ test_lin2.c \ test_lin3.c \ test_linear.c \ test_longley.c \ test_meyer.c \ test_meyerscal.c \ test_nelson.c \ test_nonlinear.c \ test_osborne.c \ test_penalty1.c \ test_penalty2.c \ test_pontius.c \ test_powell1.c \ test_powell2.c \ test_powell3.c \ test_rat42.c \ test_rat43.c \ test_reg.c \ test_rosenbrock.c \ test_rosenbrocke.c \ test_roth.c \ test_shaw.c \ test_thurber.c \ test_vardim.c \ test_watson.c \ test_wnlin.c \ test_wood.c check_PROGRAMS = test #demo TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslmultifit.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../sort/libgslsort.la ../statistics/libgslstatistics.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../min/libgslmin.la #demo_SOURCES = demo.c #demo_LDADD = libgslmultifit.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../randist/libgslrandist.la ../rng/libgslrng.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la gsl/multifit/lmset.c0000644000175000017500000000373413536674414013066 0ustar eddeddstatic int set (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx, int scale) { lmder_state_t *state = (lmder_state_t *) vstate; gsl_matrix *r = state->r; gsl_vector *tau = state->tau; gsl_vector *qtf = state->qtf; gsl_vector *diag = state->diag; gsl_vector *work1 = state->work1; gsl_permutation *perm = state->perm; int signum; /* start counting function and Jacobian evaluations */ fdf->nevalf = 0; fdf->nevaldf = 0; /* return immediately if evaluation raised error */ { int status; /* Evaluate function at x */ status = gsl_multifit_eval_wf (fdf, x, swts, f); if (status) return status; /* Evaluate Jacobian at x and store in state->r */ if (fdf->df) status = gsl_multifit_eval_wdf (fdf, x, swts, r); else /* finite difference approximation */ status = gsl_multifit_fdfsolver_dif_df(x, swts, fdf, f, r); gsl_matrix_memcpy(state->J, r); if (status) return status; } state->par = 0; state->iter = 1; state->fnorm = enorm (f); gsl_vector_set_all (dx, 0.0); /* store column norms in diag */ if (scale) { compute_diag (r, diag); } else { gsl_vector_set_all (diag, 1.0); } /* set delta to 100 |D x| or to 100 if |D x| is zero */ state->xnorm = scaled_enorm (diag, x); state->delta = compute_delta (diag, x); /* Factorize J = Q R P^T */ gsl_linalg_QRPT_decomp (r, tau, perm, &signum, work1); /* compute qtf = Q^T f */ gsl_vector_memcpy (qtf, f); gsl_linalg_QR_QTvec (r, tau, qtf); gsl_vector_set_zero (state->rptdx); gsl_vector_set_zero (state->w); /* Zero the trial vector, as in the alloc function */ gsl_vector_set_zero (state->f_trial); #ifdef DEBUG printf("r = "); gsl_matrix_fprintf(stdout, r, "%g"); printf("perm = "); gsl_permutation_fprintf(stdout, perm, "%d"); printf("tau = "); gsl_vector_fprintf(stdout, tau, "%g"); #endif return GSL_SUCCESS; } gsl/multifit/multireg.c0000664000175000017500000011706414057135461013567 0ustar eddedd/* multifit/multireg.c * * Copyright (C) 2015 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * References: * * [1] P. C. Hansen & D. P. O'Leary, "The use of the L-curve in * the regularization of discrete ill-posed problems", SIAM J. Sci. * Comput. 14 (1993), pp. 1487-1503. * * [2] P. C. Hansen, "Discrete Inverse Problems: Insight and Algorithms," * SIAM Press, 2010. */ #include #include #include #include #include #include #include #include "linear_common.c" int gsl_multifit_linear_solve (const double lambda, const gsl_matrix * X, const gsl_vector * y, gsl_vector * c, double *rnorm, double *snorm, gsl_multifit_linear_workspace * work) { size_t rank; int status; status = multifit_linear_solve(X, y, GSL_DBL_EPSILON, lambda, &rank, c, rnorm, snorm, work); return status; } /* gsl_multifit_linear_solve() */ /* gsl_multifit_linear_applyW() Apply weight matrix to (X,y) LS system Inputs: X - least squares matrix n-by-p w - weight vector n-by-1 or NULL for W = I y - right hand side n-by-1 WX - (output) sqrt(W) X, n-by-p Wy - (output) sqrt(W) y, n-by-1 Notes: 1) If w = NULL, on output WX = X and Wy = y 2) It is allowed for WX = X and Wy = y for in-place transform */ int gsl_multifit_linear_applyW(const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, gsl_matrix * WX, gsl_vector * Wy) { const size_t n = X->size1; const size_t p = X->size2; if (n != y->size) { GSL_ERROR("y vector does not match X", GSL_EBADLEN); } else if (w != NULL && n != w->size) { GSL_ERROR("weight vector does not match X", GSL_EBADLEN); } else if (n != WX->size1 || p != WX->size2) { GSL_ERROR("WX matrix dimensions do not match X", GSL_EBADLEN); } else if (n != Wy->size) { GSL_ERROR("Wy vector must be length n", GSL_EBADLEN); } else { size_t i; /* copy WX = X; Wy = y if distinct pointers */ if (WX != X) gsl_matrix_memcpy(WX, X); if (Wy != y) gsl_vector_memcpy(Wy, y); if (w != NULL) { /* construct WX = sqrt(W) X and Wy = sqrt(W) y */ for (i = 0; i < n; ++i) { double wi = gsl_vector_get(w, i); double swi; gsl_vector_view row = gsl_matrix_row(WX, i); double *yi = gsl_vector_ptr(Wy, i); if (wi < 0.0) wi = 0.0; swi = sqrt(wi); gsl_vector_scale(&row.vector, swi); *yi *= swi; } } return GSL_SUCCESS; } } /* gsl_multifit_linear_wstdform1() Using regularization matrix L = diag(l_1,l_2,...,l_p), transform to Tikhonov standard form: X~ = sqrt(W) X L^{-1} y~ = sqrt(W) y c~ = L c Inputs: L - Tikhonov matrix as a vector of diagonal elements p-by-1; or NULL for L = I X - least squares matrix n-by-p y - right hand side vector n-by-1 w - weight vector n-by-1; or NULL for W = I Xs - least squares matrix in standard form X~ n-by-p ys - right hand side vector in standard form y~ n-by-1 work - workspace Return: success/error Notes: 1) It is allowed for X = Xs and y = ys */ int gsl_multifit_linear_wstdform1 (const gsl_vector * L, const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_multifit_linear_workspace * work) { const size_t n = X->size1; const size_t p = X->size2; if (n > work->nmax || p > work->pmax) { GSL_ERROR("observation matrix larger than workspace", GSL_EBADLEN); } else if (L != NULL && p != L->size) { GSL_ERROR("L vector does not match X", GSL_EBADLEN); } else if (n != y->size) { GSL_ERROR("y vector does not match X", GSL_EBADLEN); } else if (w != NULL && n != w->size) { GSL_ERROR("weight vector does not match X", GSL_EBADLEN); } else if (n != Xs->size1 || p != Xs->size2) { GSL_ERROR("Xs matrix dimensions do not match X", GSL_EBADLEN); } else if (n != ys->size) { GSL_ERROR("ys vector must be length n", GSL_EBADLEN); } else { int status = GSL_SUCCESS; /* compute Xs = sqrt(W) X and ys = sqrt(W) y */ status = gsl_multifit_linear_applyW(X, w, y, Xs, ys); if (status) return status; if (L != NULL) { size_t j; /* construct X~ = sqrt(W) X * L^{-1} matrix */ for (j = 0; j < p; ++j) { gsl_vector_view Xj = gsl_matrix_column(Xs, j); double lj = gsl_vector_get(L, j); if (lj == 0.0) { GSL_ERROR("L matrix is singular", GSL_EDOM); } gsl_vector_scale(&Xj.vector, 1.0 / lj); } } return status; } } /* gsl_multifit_linear_stdform1() Using regularization matrix L = diag(l_1,l_2,...,l_p), and W = I, transform to Tikhonov standard form: X~ = X L^{-1} y~ = y c~ = L c Inputs: L - Tikhonov matrix as a vector of diagonal elements p-by-1 X - least squares matrix n-by-p y - right hand side vector n-by-1 Xs - least squares matrix in standard form X~ n-by-p ys - right hand side vector in standard form y~ n-by-1 work - workspace Return: success/error Notes: 1) It is allowed for X = Xs */ int gsl_multifit_linear_stdform1 (const gsl_vector * L, const gsl_matrix * X, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_multifit_linear_workspace * work) { int status; status = gsl_multifit_linear_wstdform1(L, X, NULL, y, Xs, ys, work); return status; } int gsl_multifit_linear_L_decomp (gsl_matrix * L, gsl_vector * tau) { const size_t m = L->size1; const size_t p = L->size2; int status; if (tau->size != GSL_MIN(m, p)) { GSL_ERROR("tau vector must be min(m,p)", GSL_EBADLEN); } else if (m >= p) { /* square or tall L matrix */ status = gsl_linalg_QR_decomp(L, tau); return status; } else { /* more columns than rows, compute qr(L^T) */ gsl_matrix_view LTQR = gsl_matrix_view_array(L->data, p, m); gsl_matrix *LT = gsl_matrix_alloc(p, m); /* XXX: use temporary storage due to difficulties in transforming * a rectangular matrix in-place */ gsl_matrix_transpose_memcpy(LT, L); gsl_matrix_memcpy(<QR.matrix, LT); gsl_matrix_free(LT); status = gsl_linalg_QR_decomp(<QR.matrix, tau); return status; } } /* gsl_multifit_linear_wstdform2() Using regularization matrix L which is m-by-p, transform to Tikhonov standard form. This routine is separated into two cases: Case 1: m >= p, here we can use the QR decomposition of L = QR, and note that ||L c|| = ||R c|| where R is p-by-p. Therefore, X~ = X R^{-1} is n-by-p y~ = y is n-by-1 c~ is p-by-1 M is not used Case 2: m < p X~ is (n - p + m)-by-m y~ is (n - p + m)-by-1 c~ is m-by-1 M is n-by-p (workspace) Inputs: LQR - output from gsl_multifit_linear_L_decomp() Ltau - output from gsl_multifit_linear_L_decomp() X - least squares matrix n-by-p w - weight vector n-by-1; or NULL for W = I y - right hand side vector n-by-1 Xs - (output) least squares matrix in standard form case 1: n-by-p case 2: (n - p + m)-by-m ys - (output) right hand side vector in standard form case 1: n-by-1 case 2: (n - p + m)-by-1 M - (output) workspace matrix needed to reconstruct solution vector case 1: not used case 2: n-by-p work - workspace Return: success/error Notes: 1) If m >= p, on output: Xs = X R^{-1} ys = y 2) If m < p, on output: M(:,1:pm) contains QR decomposition of A * K_o, needed to reconstruct solution vector, where pm = p - m; M(:,p) contains Householder scalars */ int gsl_multifit_linear_wstdform2 (const gsl_matrix * LQR, const gsl_vector * Ltau, const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_matrix * M, gsl_multifit_linear_workspace * work) { const size_t m = LQR->size1; const size_t n = X->size1; const size_t p = X->size2; if (n > work->nmax || p > work->pmax) { GSL_ERROR("observation matrix larger than workspace", GSL_EBADLEN); } else if (p != LQR->size2) { GSL_ERROR("LQR and X matrices have different numbers of columns", GSL_EBADLEN); } else if (n != y->size) { GSL_ERROR("y vector does not match X", GSL_EBADLEN); } else if (w != NULL && n != w->size) { GSL_ERROR("weights vector must be length n", GSL_EBADLEN); } else if (m >= p) /* square or tall L matrix */ { /* the sizes of Xs and ys depend on whether m >= p or m < p */ if (n != Xs->size1 || p != Xs->size2) { GSL_ERROR("Xs matrix must be n-by-p", GSL_EBADLEN); } else if (n != ys->size) { GSL_ERROR("ys vector must have length n", GSL_EBADLEN); } else { int status; size_t i; gsl_matrix_const_view R = gsl_matrix_const_submatrix(LQR, 0, 0, p, p); /* compute Xs = sqrt(W) X and ys = sqrt(W) y */ status = gsl_multifit_linear_applyW(X, w, y, Xs, ys); if (status) return status; /* compute X~ = X R^{-1} using QR decomposition of L */ for (i = 0; i < n; ++i) { gsl_vector_view v = gsl_matrix_row(Xs, i); /* solve: R^T y = X_i */ gsl_blas_dtrsv(CblasUpper, CblasTrans, CblasNonUnit, &R.matrix, &v.vector); } return GSL_SUCCESS; } } else /* L matrix with m < p */ { const size_t pm = p - m; const size_t npm = n - pm; /* * This code closely follows section 2.6.1 of Hansen's * "Regularization Tools" manual */ if (npm != Xs->size1 || m != Xs->size2) { GSL_ERROR("Xs matrix must be (n-p+m)-by-m", GSL_EBADLEN); } else if (npm != ys->size) { GSL_ERROR("ys vector must be of length (n-p+m)", GSL_EBADLEN); } else if (n != M->size1 || p != M->size2) { GSL_ERROR("M matrix must be n-by-p", GSL_EBADLEN); } else { int status; gsl_matrix_view A = gsl_matrix_submatrix(work->A, 0, 0, n, p); gsl_vector_view b = gsl_vector_subvector(work->t, 0, n); gsl_matrix_view LTQR = gsl_matrix_view_array(LQR->data, p, m); /* qr(L^T) */ gsl_matrix_view Rp = gsl_matrix_view_array(LQR->data, m, m); /* R factor of L^T */ gsl_vector_const_view LTtau = gsl_vector_const_subvector(Ltau, 0, m); /* * M(:,1:p-m) will hold QR decomposition of A K_o; M(:,p) will hold * Householder scalars */ gsl_matrix_view MQR = gsl_matrix_submatrix(M, 0, 0, n, pm); gsl_vector_view Mtau = gsl_matrix_subcolumn(M, p - 1, 0, GSL_MIN(n, pm)); gsl_matrix_view AKo, AKp, HqTAKp; gsl_vector_view v; size_t i; /* compute A = sqrt(W) X and b = sqrt(W) y */ status = gsl_multifit_linear_applyW(X, w, y, &A.matrix, &b.vector); if (status) return status; /* compute: A <- A K = [ A K_p ; A K_o ] */ gsl_linalg_QR_matQ(<QR.matrix, <tau.vector, &A.matrix); AKp = gsl_matrix_submatrix(&A.matrix, 0, 0, n, m); AKo = gsl_matrix_submatrix(&A.matrix, 0, m, n, pm); /* compute QR decomposition [H,T] = qr(A * K_o) and store in M */ gsl_matrix_memcpy(&MQR.matrix, &AKo.matrix); gsl_linalg_QR_decomp(&MQR.matrix, &Mtau.vector); /* AKp currently contains A K_p; apply H^T from the left to get H^T A K_p */ gsl_linalg_QR_QTmat(&MQR.matrix, &Mtau.vector, &AKp.matrix); /* the last npm rows correspond to H_q^T A K_p */ HqTAKp = gsl_matrix_submatrix(&AKp.matrix, pm, 0, npm, m); /* solve: Xs R_p^T = H_q^T A K_p for Xs */ gsl_matrix_memcpy(Xs, &HqTAKp.matrix); for (i = 0; i < npm; ++i) { gsl_vector_view x = gsl_matrix_row(Xs, i); gsl_blas_dtrsv(CblasUpper, CblasNoTrans, CblasNonUnit, &Rp.matrix, &x.vector); } /* * compute: ys = H_q^T b; this is equivalent to computing * the last q elements of H^T b (q = npm) */ v = gsl_vector_subvector(&b.vector, pm, npm); gsl_linalg_QR_QTvec(&MQR.matrix, &Mtau.vector, &b.vector); gsl_vector_memcpy(ys, &v.vector); return GSL_SUCCESS; } } } int gsl_multifit_linear_stdform2 (const gsl_matrix * LQR, const gsl_vector * Ltau, const gsl_matrix * X, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_matrix * M, gsl_multifit_linear_workspace * work) { int status; status = gsl_multifit_linear_wstdform2(LQR, Ltau, X, NULL, y, Xs, ys, M, work); return status; } /* gsl_multifit_linear_genform1() Backtransform regularized solution vector using matrix L = diag(L) */ int gsl_multifit_linear_genform1 (const gsl_vector * L, const gsl_vector * cs, gsl_vector * c, gsl_multifit_linear_workspace * work) { if (L->size > work->pmax) { GSL_ERROR("L vector does not match workspace", GSL_EBADLEN); } else if (L->size != cs->size) { GSL_ERROR("cs vector does not match L", GSL_EBADLEN); } else if (L->size != c->size) { GSL_ERROR("c vector does not match L", GSL_EBADLEN); } else { /* compute true solution vector c = L^{-1} c~ */ gsl_vector_memcpy(c, cs); gsl_vector_div(c, L); return GSL_SUCCESS; } } /* gsl_multifit_linear_wgenform2() Backtransform regularized solution vector in standard form to recover original vector Inputs: LQR - output from gsl_multifit_linear_L_decomp() Ltau - output from gsl_multifit_linear_L_decomp() X - original least squares matrix n-by-p w - original weight vector n-by-1 or NULL for W = I y - original rhs vector n-by-1 cs - standard form solution vector c - (output) original solution vector p-by-1 M - matrix computed by gsl_multifit_linear_wstdform2() work - workspace */ int gsl_multifit_linear_wgenform2 (const gsl_matrix * LQR, const gsl_vector * Ltau, const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, const gsl_vector * cs, const gsl_matrix * M, gsl_vector * c, gsl_multifit_linear_workspace * work) { const size_t m = LQR->size1; const size_t n = X->size1; const size_t p = X->size2; if (n > work->nmax || p > work->pmax) { GSL_ERROR("X matrix does not match workspace", GSL_EBADLEN); } else if (p != LQR->size2) { GSL_ERROR("LQR matrix does not match X", GSL_EBADLEN); } else if (p != c->size) { GSL_ERROR("c vector does not match X", GSL_EBADLEN); } else if (w != NULL && n != w->size) { GSL_ERROR("w vector does not match X", GSL_EBADLEN); } else if (n != y->size) { GSL_ERROR("y vector does not match X", GSL_EBADLEN); } else if (m >= p) /* square or tall L matrix */ { if (p != cs->size) { GSL_ERROR("cs vector must be length p", GSL_EBADLEN); } else { int s; gsl_matrix_const_view R = gsl_matrix_const_submatrix(LQR, 0, 0, p, p); /* R factor of L */ /* solve R c = cs for true solution c, using QR decomposition of L */ gsl_vector_memcpy(c, cs); s = gsl_blas_dtrsv(CblasUpper, CblasNoTrans, CblasNonUnit, &R.matrix, c); return s; } } else /* rectangular L matrix with m < p */ { if (m != cs->size) { GSL_ERROR("cs vector must be length m", GSL_EBADLEN); } else if (n != M->size1 || p != M->size2) { GSL_ERROR("M matrix must be size n-by-p", GSL_EBADLEN); } else { int status; const size_t pm = p - m; gsl_matrix_view A = gsl_matrix_submatrix(work->A, 0, 0, n, p); gsl_vector_view b = gsl_vector_subvector(work->t, 0, n); gsl_matrix_view Rp = gsl_matrix_view_array(LQR->data, m, m); /* R_p */ gsl_matrix_view LTQR = gsl_matrix_view_array(LQR->data, p, m); gsl_vector_const_view LTtau = gsl_vector_const_subvector(Ltau, 0, m); gsl_matrix_const_view MQR = gsl_matrix_const_submatrix(M, 0, 0, n, pm); gsl_vector_const_view Mtau = gsl_matrix_const_subcolumn(M, p - 1, 0, GSL_MIN(n, pm)); gsl_matrix_const_view To = gsl_matrix_const_submatrix(&MQR.matrix, 0, 0, pm, pm); gsl_vector_view workp = gsl_vector_subvector(work->xt, 0, p); gsl_vector_view v1, v2; /* compute A = sqrt(W) X and b = sqrt(W) y */ status = gsl_multifit_linear_applyW(X, w, y, &A.matrix, &b.vector); if (status) return status; /* initialize c to zero */ gsl_vector_set_zero(c); /* compute c = L_inv cs = K_p R_p^{-T} cs */ /* set c(1:m) = R_p^{-T} cs */ v1 = gsl_vector_subvector(c, 0, m); gsl_vector_memcpy(&v1.vector, cs); gsl_blas_dtrsv(CblasUpper, CblasTrans, CblasNonUnit, &Rp.matrix, &v1.vector); /* c <- K R_p^{-T} cs = [ K_p R_p^{_T} cs ; 0 ] */ gsl_linalg_QR_Qvec(<QR.matrix, <tau.vector, c); /* compute: b1 = b - A L_inv cs */ gsl_blas_dgemv(CblasNoTrans, -1.0, &A.matrix, c, 1.0, &b.vector); /* compute: b2 = H^T b1 */ gsl_linalg_QR_QTvec(&MQR.matrix, &Mtau.vector, &b.vector); /* compute: b3 = T_o^{-1} b2 */ v1 = gsl_vector_subvector(&b.vector, 0, pm); gsl_blas_dtrsv(CblasUpper, CblasNoTrans, CblasNonUnit, &To.matrix, &v1.vector); /* compute: b4 = K_o b3 */ gsl_vector_set_zero(&workp.vector); v2 = gsl_vector_subvector(&workp.vector, m, pm); gsl_vector_memcpy(&v2.vector, &v1.vector); gsl_linalg_QR_Qvec(<QR.matrix, <tau.vector, &workp.vector); /* final solution vector */ gsl_vector_add(c, &workp.vector); return GSL_SUCCESS; } } } int gsl_multifit_linear_genform2 (const gsl_matrix * LQR, const gsl_vector * Ltau, const gsl_matrix * X, const gsl_vector * y, const gsl_vector * cs, const gsl_matrix * M, gsl_vector * c, gsl_multifit_linear_workspace * work) { int status; status = gsl_multifit_linear_wgenform2(LQR, Ltau, X, NULL, y, cs, M, c, work); return status; } /* gsl_multifit_linear_lreg() Calculate regularization parameters to use in L-curve analysis Inputs: smin - smallest singular value of LS system smax - largest singular value of LS system > 0 reg_param - (output) vector of regularization parameters derived from singular values Return: success/error */ int gsl_multifit_linear_lreg (const double smin, const double smax, gsl_vector * reg_param) { if (smax <= 0.0) { GSL_ERROR("smax must be positive", GSL_EINVAL); } else { const size_t N = reg_param->size; /* smallest regularization parameter */ const double smin_ratio = 16.0 * GSL_DBL_EPSILON; const double new_smin = GSL_MAX(smin, smax*smin_ratio); double ratio; size_t i; gsl_vector_set(reg_param, N - 1, new_smin); /* ratio so that reg_param(1) = s(1) */ ratio = pow(smax / new_smin, 1.0 / ((double)N - 1.0)); /* calculate the regularization parameters */ for (i = N - 1; i > 0 && i--; ) { double rp1 = gsl_vector_get(reg_param, i + 1); gsl_vector_set(reg_param, i, ratio * rp1); } return GSL_SUCCESS; } } /* gsl_multifit_linear_lcurve() Calculate L-curve using regularization parameters estimated from singular values of least squares matrix Inputs: y - right hand side vector reg_param - (output) vector of regularization parameters derived from singular values rho - (output) vector of residual norms ||y - X c|| eta - (output) vector of solution norms ||lambda c|| work - workspace Return: success/error Notes: 1) SVD of X must be computed first by calling multifit_linear_svd(); work->n and work->p are initialized by this function */ int gsl_multifit_linear_lcurve (const gsl_vector * y, gsl_vector * reg_param, gsl_vector * rho, gsl_vector * eta, gsl_multifit_linear_workspace * work) { const size_t n = y->size; const size_t N = rho->size; /* number of points on L-curve */ if (n != work->n) { GSL_ERROR("y vector does not match workspace", GSL_EBADLEN); } else if (N < 3) { GSL_ERROR ("at least 3 points are needed for L-curve analysis", GSL_EBADLEN); } else if (N != eta->size) { GSL_ERROR ("size of rho and eta vectors do not match", GSL_EBADLEN); } else if (reg_param->size != eta->size) { GSL_ERROR ("size of reg_param and eta vectors do not match", GSL_EBADLEN); } else { int status = GSL_SUCCESS; const size_t p = work->p; size_t i, j; gsl_matrix_view A = gsl_matrix_submatrix(work->A, 0, 0, n, p); gsl_vector_view S = gsl_vector_subvector(work->S, 0, p); gsl_vector_view xt = gsl_vector_subvector(work->xt, 0, p); gsl_vector_view workp = gsl_matrix_subcolumn(work->QSI, 0, 0, p); gsl_vector_view workp2 = gsl_vector_subvector(work->D, 0, p); /* D isn't used for regularized problems */ const double smax = gsl_vector_get(&S.vector, 0); const double smin = gsl_vector_get(&S.vector, p - 1); double dr; /* residual error from projection */ double normy = gsl_blas_dnrm2(y); double normUTy; /* compute projection xt = U^T y */ gsl_blas_dgemv (CblasTrans, 1.0, &A.matrix, y, 0.0, &xt.vector); normUTy = gsl_blas_dnrm2(&xt.vector); dr = normy*normy - normUTy*normUTy; /* calculate regularization parameters */ gsl_multifit_linear_lreg(smin, smax, reg_param); for (i = 0; i < N; ++i) { double lambda = gsl_vector_get(reg_param, i); double lambda_sq = lambda * lambda; for (j = 0; j < p; ++j) { double sj = gsl_vector_get(&S.vector, j); double xtj = gsl_vector_get(&xt.vector, j); double f = sj / (sj*sj + lambda_sq); gsl_vector_set(&workp.vector, j, f * xtj); gsl_vector_set(&workp2.vector, j, (1.0 - sj*f) * xtj); } gsl_vector_set(eta, i, gsl_blas_dnrm2(&workp.vector)); gsl_vector_set(rho, i, gsl_blas_dnrm2(&workp2.vector)); } if (n > p && dr > 0.0) { /* add correction to residual norm (see eqs 6-7 of [1]) */ for (i = 0; i < N; ++i) { double rhoi = gsl_vector_get(rho, i); double *ptr = gsl_vector_ptr(rho, i); *ptr = sqrt(rhoi*rhoi + dr); } } /* restore D to identity matrix */ gsl_vector_set_all(work->D, 1.0); return status; } } /* gsl_multifit_linear_lcurve() */ /* gsl_multifit_linear_lcurvature() Calculate curvature of previously computed L-curve as a function of regularization parameter Inputs: y - right hand side vector reg_param - vector of regularization parameters, length N rho - vector of residual norms ||y - X c||, length N eta - vector of solution norms ||c||, length N kappa - (output) vector of curvature values, length N work - workspace Return: success/error Notes: 1) SVD of X must be computed first by calling multifit_linear_svd(); work->n and work->p are initialized by this function 2) Vectors reg_param, rho, eta must be computed by calling gsl_multifit_linear_lcurve() */ int gsl_multifit_linear_lcurvature (const gsl_vector * y, const gsl_vector * reg_param, const gsl_vector * rho, const gsl_vector * eta, gsl_vector * kappa, gsl_multifit_linear_workspace * work) { const size_t n = y->size; const size_t N = rho->size; /* number of points on L-curve */ if (n != work->n) { GSL_ERROR("y vector does not match workspace", GSL_EBADLEN); } else if (N != eta->size) { GSL_ERROR ("size of rho and eta vectors do not match", GSL_EBADLEN); } else if (reg_param->size != N) { GSL_ERROR ("size of reg_param and rho vectors do not match", GSL_EBADLEN); } else if (kappa->size != N) { GSL_ERROR ("size of reg_param and rho vectors do not match", GSL_EBADLEN); } else { int status = GSL_SUCCESS; const size_t p = work->p; gsl_matrix_view U = gsl_matrix_submatrix(work->A, 0, 0, n, p); gsl_vector_view S = gsl_vector_subvector(work->S, 0, p); gsl_vector_view beta = gsl_vector_subvector(work->xt, 0, p); size_t i; /* compute projection beta = U^T y */ gsl_blas_dgemv (CblasTrans, 1.0, &U.matrix, y, 0.0, &beta.vector); for (i = 0; i < N; ++i) { double lambda = gsl_vector_get(reg_param, i); double lambda_sq = lambda * lambda; double eta_i = gsl_vector_get(eta, i); double rho_i = gsl_vector_get(rho, i); double phi_i = 0.0, dphi_i = 0.0; double psi_i = 0.0, dpsi_i = 0.0; double deta_i, ddeta_i, drho_i, ddrho_i; double dlogeta_i, ddlogeta_i, dlogrho_i, ddlogrho_i; double kappa_i; size_t j; for (j = 0; j < p; ++j) { double beta_j = gsl_vector_get(&beta.vector, j); double s_j = gsl_vector_get(&S.vector, j); double sj_sq = s_j * s_j; double f_j = sj_sq / (sj_sq + lambda_sq); /* filter factor */ double onemf_j = 1.0 - f_j; double f1_j = -2.0 * f_j * onemf_j / lambda; double f2_j = -f1_j * (3.0 - 4.0 * f_j) / lambda; double xi_j = beta_j / s_j; phi_i += f_j * f1_j * xi_j * xi_j; psi_i += onemf_j * f1_j * beta_j * beta_j; dphi_i += (f1_j * f1_j + f_j * f2_j) * xi_j * xi_j; dpsi_i += (-f1_j * f1_j + onemf_j * f2_j) * beta_j * beta_j; } deta_i = phi_i / eta_i; drho_i = -psi_i / rho_i; ddeta_i = dphi_i / eta_i - deta_i * (deta_i / eta_i); ddrho_i = -dpsi_i / rho_i - drho_i * (drho_i / rho_i); dlogeta_i = deta_i / eta_i; dlogrho_i = drho_i / rho_i; ddlogeta_i = ddeta_i / eta_i - dlogeta_i * dlogeta_i; ddlogrho_i = ddrho_i / rho_i - dlogrho_i * dlogrho_i; kappa_i = (dlogrho_i * ddlogeta_i - ddlogrho_i * dlogeta_i) / pow(dlogrho_i * dlogrho_i + dlogeta_i * dlogeta_i, 1.5); gsl_vector_set(kappa, i, kappa_i); } return status; } } /* gsl_multifit_linear_lcorner() Determine point on L-curve of maximum curvature. For each set of 3 points on the L-curve, the circle which passes through the 3 points is computed. The radius of the circle is then used as an estimate of the curvature at the middle point. The point with maximum curvature is then selected. Inputs: rho - vector of residual norms ||A x - b|| eta - vector of solution norms ||L x|| idx - (output) index i such that (log(rho(i)),log(eta(i))) is the point of maximum curvature Return: success/error */ int gsl_multifit_linear_lcorner(const gsl_vector *rho, const gsl_vector *eta, size_t *idx) { const size_t n = rho->size; if (n < 3) { GSL_ERROR ("at least 3 points are needed for L-curve analysis", GSL_EBADLEN); } else if (n != eta->size) { GSL_ERROR ("size of rho and eta vectors do not match", GSL_EBADLEN); } else { int s = GSL_SUCCESS; size_t i; double x1, y1; /* first point of triangle on L-curve */ double x2, y2; /* second point of triangle on L-curve */ double rmin = -1.0; /* minimum radius of curvature */ /* initial values */ x1 = log(gsl_vector_get(rho, 0)); y1 = log(gsl_vector_get(eta, 0)); x2 = log(gsl_vector_get(rho, 1)); y2 = log(gsl_vector_get(eta, 1)); for (i = 1; i < n - 1; ++i) { /* * The points (x1,y1), (x2,y2), (x3,y3) are the previous, * current, and next point on the L-curve. We will find * the circle which fits these 3 points and take its radius * as an estimate of the curvature at this point. */ double x3 = log(gsl_vector_get(rho, i + 1)); double y3 = log(gsl_vector_get(eta, i + 1)); double x21 = x2 - x1; double y21 = y2 - y1; double x31 = x3 - x1; double y31 = y3 - y1; double h21 = x21*x21 + y21*y21; double h31 = x31*x31 + y31*y31; double d = fabs(2.0 * (x21*y31 - x31*y21)); double r = sqrt(h21*h31*((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2))) / d; /* if d =~ 0 then there are nearly colinear points */ if (gsl_finite(r)) { /* check for smallest radius of curvature */ if (r < rmin || rmin < 0.0) { rmin = r; *idx = i; } } /* update previous/current L-curve values */ x1 = x2; y1 = y2; x2 = x3; y2 = y3; } /* check if a minimum radius was found */ if (rmin < 0.0) { /* possibly co-linear points */ GSL_ERROR("failed to find minimum radius", GSL_EINVAL); } return s; } } /* gsl_multifit_linear_lcorner() */ /* gsl_multifit_linear_lcorner2() Determine point on L-curve (lambda^2, ||c||^2) of maximum curvature. For each set of 3 points on the L-curve, the circle which passes through the 3 points is computed. The radius of the circle is then used as an estimate of the curvature at the middle point. The point with maximum curvature is then selected. This routine is based on the paper M. Rezghi and S. M. Hosseini, "A new variant of L-curve for Tikhonov regularization", J. Comp. App. Math., 231 (2009). Inputs: reg_param - vector of regularization parameters eta - vector of solution norms ||L x|| idx - (output) index i such that (lambda(i)^2,eta(i)^2) is the point of maximum curvature Return: success/error */ int gsl_multifit_linear_lcorner2(const gsl_vector *reg_param, const gsl_vector *eta, size_t *idx) { const size_t n = reg_param->size; if (n < 3) { GSL_ERROR ("at least 3 points are needed for L-curve analysis", GSL_EBADLEN); } else if (n != eta->size) { GSL_ERROR ("size of reg_param and eta vectors do not match", GSL_EBADLEN); } else { int s = GSL_SUCCESS; size_t i; double x1, y1; /* first point of triangle on L-curve */ double x2, y2; /* second point of triangle on L-curve */ double rmin = -1.0; /* minimum radius of curvature */ /* initial values */ x1 = gsl_vector_get(reg_param, 0); x1 *= x1; y1 = gsl_vector_get(eta, 0); y1 *= y1; x2 = gsl_vector_get(reg_param, 1); x2 *= x2; y2 = gsl_vector_get(eta, 1); y2 *= y2; for (i = 1; i < n - 1; ++i) { /* * The points (x1,y1), (x2,y2), (x3,y3) are the previous, * current, and next point on the L-curve. We will find * the circle which fits these 3 points and take its radius * as an estimate of the curvature at this point. */ double lamip1 = gsl_vector_get(reg_param, i + 1); double etaip1 = gsl_vector_get(eta, i + 1); double x3 = lamip1 * lamip1; double y3 = etaip1 * etaip1; double x21 = x2 - x1; double y21 = y2 - y1; double x31 = x3 - x1; double y31 = y3 - y1; double h21 = x21*x21 + y21*y21; double h31 = x31*x31 + y31*y31; double d = fabs(2.0 * (x21*y31 - x31*y21)); double r = sqrt(h21*h31*((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2))) / d; /* if d =~ 0 then there are nearly colinear points */ if (gsl_finite(r)) { /* check for smallest radius of curvature */ if (r < rmin || rmin < 0.0) { rmin = r; *idx = i; } } /* update previous/current L-curve values */ x1 = x2; y1 = y2; x2 = x3; y2 = y3; } /* check if a minimum radius was found */ if (rmin < 0.0) { /* possibly co-linear points */ GSL_ERROR("failed to find minimum radius", GSL_EINVAL); } return s; } } /* gsl_multifit_linear_lcorner2() */ #define GSL_MULTIFIT_MAXK 100 /* gsl_multifit_linear_L() Compute discrete approximation to derivative operator of order k on a regular grid of p points, ie: L is (p-k)-by-p */ int gsl_multifit_linear_Lk(const size_t p, const size_t k, gsl_matrix *L) { if (p <= k) { GSL_ERROR("p must be larger than derivative order", GSL_EBADLEN); } else if (k >= GSL_MULTIFIT_MAXK - 1) { GSL_ERROR("derivative order k too large", GSL_EBADLEN); } else if (p - k != L->size1 || p != L->size2) { GSL_ERROR("L matrix must be (p-k)-by-p", GSL_EBADLEN); } else { double c_data[GSL_MULTIFIT_MAXK]; gsl_vector_view cv = gsl_vector_view_array(c_data, k + 1); size_t i, j; /* zeroth derivative */ if (k == 0) { gsl_matrix_set_identity(L); return GSL_SUCCESS; } gsl_matrix_set_zero(L); gsl_vector_set_zero(&cv.vector); gsl_vector_set(&cv.vector, 0, -1.0); gsl_vector_set(&cv.vector, 1, 1.0); for (i = 1; i < k; ++i) { double cjm1 = 0.0; for (j = 0; j < k + 1; ++j) { double cj = gsl_vector_get(&cv.vector, j); gsl_vector_set(&cv.vector, j, cjm1 - cj); cjm1 = cj; } } /* build L, the c_i are the entries on the diagonals */ for (i = 0; i < k + 1; ++i) { gsl_vector_view v = gsl_matrix_superdiagonal(L, i); double ci = gsl_vector_get(&cv.vector, i); gsl_vector_set_all(&v.vector, ci); } return GSL_SUCCESS; } } /* gsl_multifit_linear_Lk() */ /* gsl_multifit_linear_Lsobolev() Construct Sobolev smoothing norm operator L = [ a_0 I; a_1 L_1; a_2 L_2; ...; a_k L_k ] by computing the Cholesky factor of L^T L Inputs: p - number of columns of L kmax - maximum derivative order (< p) alpha - vector of weights; alpha_k multiplies L_k, size kmax + 1 L - (output) upper triangular Sobolev matrix p-by-p, stored in upper triangle work - workspace Notes: 1) work->Q is used to store intermediate L_k matrices */ int gsl_multifit_linear_Lsobolev(const size_t p, const size_t kmax, const gsl_vector *alpha, gsl_matrix *L, gsl_multifit_linear_workspace *work) { if (p > work->pmax) { GSL_ERROR("p is larger than workspace", GSL_EBADLEN); } else if (p <= kmax) { GSL_ERROR("p must be larger than derivative order", GSL_EBADLEN); } else if (kmax + 1 != alpha->size) { GSL_ERROR("alpha must be size kmax + 1", GSL_EBADLEN); } else if (p != L->size1) { GSL_ERROR("L matrix is wrong size", GSL_EBADLEN); } else if (L->size1 != L->size2) { GSL_ERROR("L matrix is not square", GSL_ENOTSQR); } else { int s; size_t j, k; gsl_vector_view d = gsl_matrix_diagonal(L); const double alpha0 = gsl_vector_get(alpha, 0); /* initialize L to alpha0^2 I */ gsl_matrix_set_zero(L); gsl_vector_add_constant(&d.vector, alpha0 * alpha0); for (k = 1; k <= kmax; ++k) { gsl_matrix_view Lk = gsl_matrix_submatrix(work->Q, 0, 0, p - k, p); double ak = gsl_vector_get(alpha, k); /* compute a_k L_k */ s = gsl_multifit_linear_Lk(p, k, &Lk.matrix); if (s) return s; gsl_matrix_scale(&Lk.matrix, ak); /* LTL += L_k^T L_k */ gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &Lk.matrix, 1.0, L); } s = gsl_linalg_cholesky_decomp(L); if (s) return s; /* copy Cholesky factor to upper triangle and zero out bottom */ gsl_matrix_transpose_tricpy(CblasLower, CblasUnit, L, L); for (j = 0; j < p; ++j) { for (k = 0; k < j; ++k) gsl_matrix_set(L, j, k, 0.0); } return GSL_SUCCESS; } } gsl/multifit/test_lin3.c0000644000175000017500000000345713536674414013650 0ustar eddedd#define lin3_N 50 /* can be anything >= p */ #define lin3_P 10 /* >= 3 */ #define lin3_NTRIES 3 static double lin3_x0[lin3_P] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; static double lin3_epsrel = 1.0e-10; static void lin3_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double n = (double) lin3_N; const double sumsq_exact = 0.5 * (n*n + 3*n - 6.0) / (2*n - 3.0); const double sum_exact = 3.0 / (2.0*n - 3.0); double sum = 0.0; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 1; i < lin3_P - 1; ++i) sum += (i + 1.0) * x[i]; gsl_test_rel(sum, sum_exact, epsrel, "%s/%s coeff sum", sname, pname); } static int lin3_f (const gsl_vector * x, void *params, gsl_vector * f) { size_t i, j; gsl_vector_set(f, 0, -1.0); gsl_vector_set(f, lin3_N - 1, -1.0); for (i = 1; i < lin3_N - 1; ++i) { double fi = 0.0; for (j = 1; j < lin3_P - 1; ++j) { double xj = gsl_vector_get(x, j); fi += (j + 1) * xj; } fi = i * fi - 1.0; gsl_vector_set(f, i, fi); } return GSL_SUCCESS; } static int lin3_df (const gsl_vector * x, void *params, gsl_matrix * J) { size_t i, j; gsl_matrix_set_zero(J); for (i = 1; i < lin3_N - 1; ++i) { for (j = 1; j < lin3_P - 1; ++j) { gsl_matrix_set(J, i, j, i * (j + 1.0)); } } return GSL_SUCCESS; } static gsl_multifit_function_fdf lin3_func = { &lin3_f, &lin3_df, NULL, lin3_N, lin3_P, NULL, 0, 0 }; static test_fdf_problem lin3_problem = { "linear_rank1zeros", lin3_x0, NULL, &lin3_epsrel, lin3_NTRIES, &lin3_checksol, &lin3_func }; gsl/multifit/test_wnlin.c0000644000175000017500000000744413536674414014132 0ustar eddedd#define wnlin_N 40 #define wnlin_P 3 #define wnlin_NTRIES 1 static double wnlin_x0[wnlin_P] = { 1.0, 0.0, 0.0 }; static double wnlin_epsrel = 1.0e-8; static int wnlin_internal_weight = 1; /* data */ static double wnlin_Y[wnlin_N] = { 6.08035e+00, 5.47552e+00, 5.94654e+00, 5.04920e+00, 4.78568e+00, 3.51748e+00, 2.84671e+00, 3.24634e+00, 3.23395e+00, 3.30385e+00, 2.83439e+00, 2.31891e+00, 2.33858e+00, 2.40559e+00, 2.41856e+00, 1.99966e+00, 1.88127e+00, 1.91477e+00, 1.70415e+00, 1.60316e+00, 1.77937e+00, 1.55302e+00, 1.50903e+00, 1.36364e+00, 1.36873e+00, 1.41954e+00, 1.37778e+00, 1.23573e+00, 1.28524e+00, 1.46327e+00, 1.22315e+00, 1.19330e+00, 1.18717e+00, 8.83172e-01, 1.23424e+00, 1.14683e+00, 1.11091e+00, 1.20396e+00, 1.28722e+00, 1.05801e+00 }; /* weights */ static double wnlin_W[wnlin_N] = { 2.77778e+00, 3.27690e+00, 3.85426e+00, 4.51906e+00, 5.28083e+00, 6.14919e+00, 7.13370e+00, 8.24349e+00, 9.48703e+00, 1.08717e+01, 1.24036e+01, 1.40869e+01, 1.59238e+01, 1.79142e+01, 2.00553e+01, 2.23415e+01, 2.47646e+01, 2.73137e+01, 2.99753e+01, 3.27337e+01, 3.55714e+01, 3.84696e+01, 4.14085e+01, 4.43678e+01, 4.73278e+01, 5.02690e+01, 5.31731e+01, 5.60234e+01, 5.88046e+01, 6.15036e+01, 6.41092e+01, 6.66121e+01, 6.90054e+01, 7.12839e+01, 7.34442e+01, 7.54848e+01, 7.74053e+01, 7.92069e+01, 8.08918e+01, 8.24632e+01 }; static void wnlin_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 29.7481259665713758; const double wnlin_x[wnlin_P] = { 5.17378551196259195, 0.111041758006851149, 1.05282724070446099 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < wnlin_P; ++i) { gsl_test_rel(x[i], wnlin_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int wnlin_f (const gsl_vector *x, void *params, gsl_vector *f) { int *iptr = (int *) params; int doweight = iptr ? *iptr : 0; double A = gsl_vector_get (x, 0); double lambda = gsl_vector_get (x, 1); double b = gsl_vector_get (x, 2); size_t i; /* model Yi = A * exp(-lambda * i) + b */ for (i = 0; i < wnlin_N; i++) { double ti = i; double yi = wnlin_Y[i]; double swi = sqrt(wnlin_W[i]); double Mi = A * exp (-lambda * ti) + b; if (doweight) gsl_vector_set (f, i, swi * (Mi - yi)); else gsl_vector_set (f, i, Mi - yi); } return GSL_SUCCESS; } static int wnlin_df (const gsl_vector *x, void *params, gsl_matrix *df) { int *iptr = (int *) params; int doweight = iptr ? *iptr : 0; double A = gsl_vector_get (x, 0); double lambda = gsl_vector_get (x, 1); size_t i; for (i = 0; i < wnlin_N; i++) { gsl_vector_view v = gsl_matrix_row(df, i); double ti = i; double swi = sqrt(wnlin_W[i]); double e = exp(-lambda * ti); gsl_vector_set(&v.vector, 0, e); gsl_vector_set(&v.vector, 1, -ti * A * e); gsl_vector_set(&v.vector, 2, 1.0); if (doweight) gsl_vector_scale(&v.vector, swi); } return GSL_SUCCESS; } static gsl_multifit_function_fdf wnlin_func1 = { &wnlin_f, &wnlin_df, NULL, wnlin_N, wnlin_P, (void *) &wnlin_internal_weight, 0, 0 }; static gsl_multifit_function_fdf wnlin_func2 = { &wnlin_f, &wnlin_df, NULL, wnlin_N, wnlin_P, NULL, 0, 0 }; static test_fdf_problem wnlin_problem1 = { "wnlin_internal_weights", wnlin_x0, NULL, &wnlin_epsrel, wnlin_NTRIES, &wnlin_checksol, &wnlin_func1 }; static test_fdf_problem wnlin_problem2 = { "wnlin_external_weights", wnlin_x0, NULL, &wnlin_epsrel, wnlin_NTRIES, &wnlin_checksol, &wnlin_func2 }; gsl/multifit/test_bard.c0000644000175000017500000000515613536674414013711 0ustar eddedd#define bard_N 15 #define bard_P 3 #define bard_NTRIES 3 static double bard_x0[bard_P] = { 1.0, 1.0, 1.0 }; static double bard_epsrel = 1.0e-8; static double bard_Y[bard_N] = { 0.14, 0.18, 0.22, 0.25, 0.29, 0.32, 0.35, 0.39, 0.37, 0.58, 0.73, 0.96, 1.34, 2.10, 4.39 }; static void bard_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact1 = 8.214877306578963e-03; const double bard_x1[bard_P] = { 8.241055975623580e-02, 1.133036092245175, 2.343695178435405 }; const double sumsq_exact2 = 17.42869333333333; const double bard_x2[bard_P] = { 8.406666666666666e-01, -99999.9, /* -inf */ -99999.9 }; /* -inf */ const double *bard_x; double sumsq_exact; if (fabs(x[1]) < 10.0 && fabs(x[2]) < 10.0) { bard_x = bard_x1; sumsq_exact = sumsq_exact1; } else { bard_x = bard_x2; sumsq_exact = sumsq_exact2; } gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < bard_P; ++i) { if (bard_x[i] < -90000.0) continue; gsl_test_rel(x[i], bard_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int bard_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < bard_N; ++i) { double ui = i + 1.0; double vi = 16.0 - i - 1.0; double wi = GSL_MIN(ui, vi); double yi = bard_Y[i]; double fi = yi - (x1 + (ui / (x2*vi + x3*wi))); gsl_vector_set(f, i, fi); } return GSL_SUCCESS; } static int bard_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < bard_N; ++i) { double ui = i + 1.0; double vi = 16.0 - i - 1.0; double wi = GSL_MIN(ui, vi); double term = x2 * vi + x3 * wi; gsl_matrix_set(J, i, 0, -1.0); gsl_matrix_set(J, i, 1, ui * vi / (term * term)); gsl_matrix_set(J, i, 2, ui * wi / (term * term)); } return GSL_SUCCESS; } static gsl_multifit_function_fdf bard_func = { &bard_f, &bard_df, NULL, bard_N, bard_P, NULL, 0, 0 }; static test_fdf_problem bard_problem = { "bard", bard_x0, NULL, &bard_epsrel, bard_NTRIES, &bard_checksol, &bard_func }; gsl/multifit/test_box.c0000644000175000017500000000342013536674414013561 0ustar eddedd#define box_N 10 /* can be >= p */ #define box_P 3 #define box_NTRIES 1 static double box_x0[box_P] = { 0.0, 10.0, 20.0 }; static double box_epsrel = 1.0e-12; static void box_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; const double box_x[box_P] = { 1.0, 10.0, 1.0 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < box_P; ++i) { gsl_test_rel(x[i], box_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int box_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < box_N; ++i) { double ti = (i + 1.0) / 10.0; double fi = exp(-x1*ti) - exp(-x2*ti) - x3*(exp(-ti) - exp(-10.0*ti)); gsl_vector_set(f, i, fi); } return GSL_SUCCESS; } static int box_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); size_t i; for (i = 0; i < box_N; ++i) { double ti = (i + 1.0) / 10.0; double term1 = exp(-x1*ti); double term2 = exp(-x2*ti); double term3 = exp(-10.0*ti) - exp(-ti); gsl_matrix_set(J, i, 0, -ti*term1); gsl_matrix_set(J, i, 1, ti*term2); gsl_matrix_set(J, i, 2, term3); } return GSL_SUCCESS; } static gsl_multifit_function_fdf box_func = { &box_f, &box_df, NULL, box_N, box_P, NULL, 0, 0 }; static test_fdf_problem box_problem = { "box3d", box_x0, NULL, &box_epsrel, box_NTRIES, &box_checksol, &box_func }; gsl/multifit/test_longley.c0000644000175000017500000001453113536674414014447 0ustar eddeddsize_t longley_n = 16; size_t longley_p = 7; double longley_x [] = { 1, 83.0, 234289, 2356, 1590, 107608, 1947, 1, 88.5, 259426, 2325, 1456, 108632, 1948, 1, 88.2, 258054, 3682, 1616, 109773, 1949, 1, 89.5, 284599, 3351, 1650, 110929, 1950, 1, 96.2, 328975, 2099, 3099, 112075, 1951, 1, 98.1, 346999, 1932, 3594, 113270, 1952, 1, 99.0, 365385, 1870, 3547, 115094, 1953, 1, 100.0, 363112, 3578, 3350, 116219, 1954, 1, 101.2, 397469, 2904, 3048, 117388, 1955, 1, 104.6, 419180, 2822, 2857, 118734, 1956, 1, 108.4, 442769, 2936, 2798, 120445, 1957, 1, 110.8, 444546, 4681, 2637, 121950, 1958, 1, 112.6, 482704, 3813, 2552, 123366, 1959, 1, 114.2, 502601, 3931, 2514, 125368, 1960, 1, 115.7, 518173, 4806, 2572, 127852, 1961, 1, 116.9, 554894, 4007, 2827, 130081, 1962 } ; double longley_y[] = {60323, 61122, 60171, 61187, 63221, 63639, 64989, 63761, 66019, 67857, 68169, 66513, 68655, 69564, 69331, 70551}; static int test_longley_results(const char *str, const gsl_vector *c, const gsl_vector *expected_c, const gsl_vector *cov_diag, const gsl_vector *expected_sd, const double chisq, const double chisq_res, const double expected_chisq) { size_t i; /* test coefficient vector */ for (i = 0; i < longley_p; ++i) { gsl_test_rel (gsl_vector_get(c,i), gsl_vector_get(expected_c, i), 1.0e-10, "%s c[%zu]", str, i) ; if (cov_diag && expected_sd) { gsl_test_rel (sqrt(gsl_vector_get(cov_diag, i)), gsl_vector_get(expected_sd, i), 1e-10, "%s cov[%zu,%zu]", str, i, i); } } gsl_test_rel (chisq, expected_chisq, 1.0e-10, "%s chisq", str); gsl_test_rel (chisq_res, expected_chisq, 1.0e-10, "%s chisq residuals", str); return GSL_SUCCESS; } void test_longley () { gsl_multifit_linear_workspace * work = gsl_multifit_linear_alloc (longley_n, longley_p); gsl_multifit_robust_workspace * work_rob = gsl_multifit_robust_alloc (gsl_multifit_robust_ols, longley_n, longley_p); gsl_matrix_view X = gsl_matrix_view_array (longley_x, longley_n, longley_p); gsl_vector_view y = gsl_vector_view_array (longley_y, longley_n); gsl_vector * c = gsl_vector_alloc (longley_p); gsl_vector * r = gsl_vector_alloc (longley_n); gsl_matrix * cov = gsl_matrix_alloc (longley_p, longley_p); double chisq, chisq_res; double expected_c[7] = { -3482258.63459582, 15.0618722713733, -0.358191792925910E-01, -2.02022980381683, -1.03322686717359, -0.511041056535807E-01, 1829.15146461355 }; double expected_sd[7] = { 890420.383607373, 84.9149257747669, 0.334910077722432E-01, 0.488399681651699, 0.214274163161675, 0.226073200069370, 455.478499142212 } ; double expected_chisq = 836424.055505915; gsl_vector_view diag = gsl_matrix_diagonal (cov); gsl_vector_view exp_c = gsl_vector_view_array(expected_c, longley_p); gsl_vector_view exp_sd = gsl_vector_view_array(expected_sd, longley_p); /* test unweighted least squares */ gsl_multifit_linear (&X.matrix, &y.vector, c, cov, &chisq, work); gsl_multifit_linear_residuals(&X.matrix, &y.vector, c, r); gsl_blas_ddot(r, r, &chisq_res); test_longley_results("longley gsl_multifit_linear", c, &exp_c.vector, &diag.vector, &exp_sd.vector, chisq, chisq_res, expected_chisq); /* test robust least squares */ gsl_multifit_robust (&X.matrix, &y.vector, c, cov, work_rob); test_longley_results("longley gsl_multifit_robust", c, &exp_c.vector, &diag.vector, &exp_sd.vector, 1.0, 1.0, 1.0); /* test weighted least squares */ { size_t i, j; gsl_vector * w = gsl_vector_alloc (longley_n); double expected_cov[7][7] = { { 8531122.56783558, -166.727799925578, 0.261873708176346, 3.91188317230983, 1.1285582054705, -0.889550869422687, -4362.58709870581}, {-166.727799925578, 0.0775861253030891, -1.98725210399982e-05, -0.000247667096727256, -6.82911920718824e-05, 0.000136160797527761, 0.0775255245956248}, {0.261873708176346, -1.98725210399982e-05, 1.20690316701888e-08, 1.66429546772984e-07, 3.61843600487847e-08, -6.78805814483582e-08, -0.00013158719037715}, {3.91188317230983, -0.000247667096727256, 1.66429546772984e-07, 2.56665052544717e-06, 6.96541409215597e-07, -9.00858307771567e-07, -0.00197260370663974}, {1.1285582054705, -6.82911920718824e-05, 3.61843600487847e-08, 6.96541409215597e-07, 4.94032602583969e-07, -9.8469143760973e-08, -0.000576921112208274}, {-0.889550869422687, 0.000136160797527761, -6.78805814483582e-08, -9.00858307771567e-07, -9.8469143760973e-08, 5.49938542664952e-07, 0.000430074434198215}, {-4362.58709870581, 0.0775255245956248, -0.00013158719037715, -0.00197260370663974, -0.000576921112208274, 0.000430074434198215, 2.23229587481535 }} ; gsl_vector_set_all (w, 1.0); gsl_multifit_wlinear (&X.matrix, w, &y.vector, c, cov, &chisq, work); gsl_multifit_linear_residuals(&X.matrix, &y.vector, c, r); gsl_blas_ddot(r, r, &chisq_res); test_longley_results("longley gsl_multifit_wlinear", c, &exp_c.vector, NULL, NULL, chisq, chisq_res, expected_chisq); for (i = 0; i < longley_p; i++) { for (j = 0; j < longley_p; j++) { gsl_test_rel (gsl_matrix_get(cov,i,j), expected_cov[i][j], 1e-7, "longley gsl_multifit_wlinear cov(%d,%d)", i, j) ; } } gsl_vector_free(w); } gsl_vector_free(c); gsl_vector_free(r); gsl_matrix_free(cov); gsl_multifit_linear_free (work); gsl_multifit_robust_free (work_rob); } /* test_longley() */ gsl/multifit/fdfridge.c0000644000175000017500000003116713536674414013515 0ustar eddedd/* multifit/fdfridge.c * * Copyright (C) 2014 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include static int fdfridge_f(const gsl_vector * x, void * params, gsl_vector * f); static int fdfridge_df(const gsl_vector * x, void * params, gsl_matrix * J); gsl_multifit_fdfridge * gsl_multifit_fdfridge_alloc (const gsl_multifit_fdfsolver_type * T, const size_t n, const size_t p) { gsl_multifit_fdfridge * work; work = calloc(1, sizeof(gsl_multifit_fdfridge)); if (work == NULL) { GSL_ERROR_VAL("failed to allocate workspace", GSL_ENOMEM, 0); } work->s = gsl_multifit_fdfsolver_alloc (T, n + p, p); if (work->s == NULL) { gsl_multifit_fdfridge_free(work); GSL_ERROR_VAL("failed to allocate space for fdfsolver", GSL_ENOMEM, 0); } work->wts = gsl_vector_alloc(n + p); if (work->wts == NULL) { gsl_multifit_fdfridge_free(work); GSL_ERROR_VAL("failed to allocate space for weight vector", GSL_ENOMEM, 0); } work->f = gsl_vector_alloc(n); if (work->f == NULL) { gsl_multifit_fdfridge_free(work); GSL_ERROR_VAL("failed to allocate space for f vector", GSL_ENOMEM, 0); } work->n = n; work->p = p; work->lambda = 0.0; /* initialize weights to 1 (for augmented portion of vector) */ gsl_vector_set_all(work->wts, 1.0); return work; } /* gsl_multifit_fdfridge_alloc() */ void gsl_multifit_fdfridge_free(gsl_multifit_fdfridge *work) { if (work->s) gsl_multifit_fdfsolver_free(work->s); if (work->wts) gsl_vector_free(work->wts); if (work->f) gsl_vector_free(work->f); free(work); } const char * gsl_multifit_fdfridge_name(const gsl_multifit_fdfridge * w) { return gsl_multifit_fdfsolver_name(w->s); } gsl_vector * gsl_multifit_fdfridge_position (const gsl_multifit_fdfridge * w) { return gsl_multifit_fdfsolver_position(w->s); } gsl_vector * gsl_multifit_fdfridge_residual (const gsl_multifit_fdfridge * w) { return gsl_multifit_fdfsolver_residual(w->s); } size_t gsl_multifit_fdfridge_niter (const gsl_multifit_fdfridge * w) { return w->s->niter; } int gsl_multifit_fdfridge_set (gsl_multifit_fdfridge * w, gsl_multifit_function_fdf * f, const gsl_vector * x, const double lambda) { return gsl_multifit_fdfridge_wset(w, f, x, lambda, NULL); } /* gsl_multifit_fdfridge_set() */ int gsl_multifit_fdfridge_wset (gsl_multifit_fdfridge * w, gsl_multifit_function_fdf * f, const gsl_vector * x, const double lambda, const gsl_vector * wts) { const size_t n = w->n; const size_t p = w->p; if (n != f->n || p != f->p) { GSL_ERROR ("function size does not match solver", GSL_EBADLEN); } else if (p != x->size) { GSL_ERROR ("vector length does not match solver", GSL_EBADLEN); } else if (wts != NULL && n != wts->size) { GSL_ERROR ("weight vector length does not match solver", GSL_EBADLEN); } else { int status; gsl_vector_view wv = gsl_vector_subvector(w->wts, 0, n); /* save user defined fdf */ w->fdf = f; /* build modified fdf for Tikhonov terms */ w->fdftik.f = &fdfridge_f; w->fdftik.df = &fdfridge_df; w->fdftik.n = n + p; /* add p for Tikhonov terms */ w->fdftik.p = p; w->fdftik.params = (void *) w; /* store damping parameter */ w->lambda = lambda; w->L = NULL; if (wts) { /* copy weight vector into user portion of w->wts */ gsl_vector_memcpy(&wv.vector, wts); status = gsl_multifit_fdfsolver_wset(w->s, &(w->fdftik), x, w->wts); } else { status = gsl_multifit_fdfsolver_wset(w->s, &(w->fdftik), x, NULL); } /* update function/Jacobian evaluations */ f->nevalf = w->fdftik.nevalf; f->nevaldf = w->fdftik.nevaldf; return status; } } /* gsl_multifit_fdfridge_wset() */ int gsl_multifit_fdfridge_set2 (gsl_multifit_fdfridge * w, gsl_multifit_function_fdf * f, const gsl_vector * x, const gsl_vector * lambda) { return gsl_multifit_fdfridge_wset2(w, f, x, lambda, NULL); } /* gsl_multifit_fdfridge_set2() */ int gsl_multifit_fdfridge_wset2 (gsl_multifit_fdfridge * w, gsl_multifit_function_fdf * f, const gsl_vector * x, const gsl_vector * lambda, const gsl_vector * wts) { const size_t n = w->n; const size_t p = w->p; if (n != f->n || p != f->p) { GSL_ERROR ("function size does not match solver", GSL_EBADLEN); } else if (p != x->size) { GSL_ERROR ("vector length does not match solver", GSL_EBADLEN); } else if (lambda->size != p) { GSL_ERROR ("lambda vector size does not match solver", GSL_EBADLEN); } else if (wts != NULL && n != wts->size) { GSL_ERROR ("weight vector length does not match solver", GSL_EBADLEN); } else { int status; gsl_vector_view wv = gsl_vector_subvector(w->wts, 0, n); /* save user defined fdf */ w->fdf = f; w->fdf->nevalf = 0; w->fdf->nevaldf = 0; /* build modified fdf for Tikhonov terms */ w->fdftik.f = &fdfridge_f; w->fdftik.df = &fdfridge_df; w->fdftik.n = n + p; /* add p for Tikhonov terms */ w->fdftik.p = p; w->fdftik.params = (void *) w; /* store damping matrix */ w->lambda = 0.0; w->L_diag = lambda; w->L = NULL; if (wts) { /* copy weight vector into user portion */ gsl_vector_memcpy(&wv.vector, wts); status = gsl_multifit_fdfsolver_wset(w->s, &(w->fdftik), x, w->wts); } else { status = gsl_multifit_fdfsolver_wset(w->s, &(w->fdftik), x, NULL); } /* update function/Jacobian evaluations */ f->nevalf = w->fdftik.nevalf; f->nevaldf = w->fdftik.nevaldf; return status; } } /* gsl_multifit_fdfridge_wset2() */ int gsl_multifit_fdfridge_set3 (gsl_multifit_fdfridge * w, gsl_multifit_function_fdf * f, const gsl_vector * x, const gsl_matrix * L) { return gsl_multifit_fdfridge_wset3(w, f, x, L, NULL); } /* gsl_multifit_fdfridge_set3() */ int gsl_multifit_fdfridge_wset3 (gsl_multifit_fdfridge * w, gsl_multifit_function_fdf * f, const gsl_vector * x, const gsl_matrix * L, const gsl_vector * wts) { const size_t n = w->n; const size_t p = w->p; if (n != f->n || p != f->p) { GSL_ERROR ("function size does not match solver", GSL_EBADLEN); } else if (p != x->size) { GSL_ERROR ("vector length does not match solver", GSL_EBADLEN); } else if (L->size2 != p) { GSL_ERROR ("L matrix size2 does not match solver", GSL_EBADLEN); } else if (wts != NULL && n != wts->size) { GSL_ERROR ("weight vector length does not match solver", GSL_EBADLEN); } else { int status; gsl_vector_view wv = gsl_vector_subvector(w->wts, 0, n); /* save user defined fdf */ w->fdf = f; w->fdf->nevalf = 0; w->fdf->nevaldf = 0; /* build modified fdf for Tikhonov terms */ w->fdftik.f = &fdfridge_f; w->fdftik.df = &fdfridge_df; w->fdftik.n = n + p; /* add p for Tikhonov terms */ w->fdftik.p = p; w->fdftik.params = (void *) w; /* store damping matrix */ w->lambda = 0.0; w->L_diag = NULL; w->L = L; if (wts) { /* copy weight vector into user portion */ gsl_vector_memcpy(&wv.vector, wts); status = gsl_multifit_fdfsolver_wset(w->s, &(w->fdftik), x, w->wts); } else { status = gsl_multifit_fdfsolver_wset(w->s, &(w->fdftik), x, NULL); } /* update function/Jacobian evaluations */ f->nevalf = w->fdftik.nevalf; f->nevaldf = w->fdftik.nevaldf; return status; } } /* gsl_multifit_fdfridge_wset3() */ int gsl_multifit_fdfridge_iterate (gsl_multifit_fdfridge * w) { int status = gsl_multifit_fdfsolver_iterate(w->s); /* update function/Jacobian evaluations */ w->fdf->nevalf = w->fdftik.nevalf; w->fdf->nevaldf = w->fdftik.nevaldf; return status; } int gsl_multifit_fdfridge_driver (gsl_multifit_fdfridge * w, const size_t maxiter, const double xtol, const double gtol, const double ftol, int *info) { int status = gsl_multifit_fdfsolver_driver(w->s, maxiter, xtol, gtol, ftol, info); return status; } /* gsl_multifit_fdfridge_driver() */ /* fdfridge_f() Callback function to provide residuals, including extra p Tikhonov terms. The residual vector will have the form: f~ = [ f ] [ \lambda x ] where f is the user supplied residuals, x are the model parameters, and \lambda is the Tikhonov damping parameter Inputs: x - model parameters (size p) params - pointer to fdfridge workspace f - (output) (n+p) vector to store f~ */ static int fdfridge_f(const gsl_vector * x, void * params, gsl_vector * f) { int status; gsl_multifit_fdfridge *w = (gsl_multifit_fdfridge *) params; const size_t n = w->n; const size_t p = w->p; gsl_vector_view f_user = gsl_vector_subvector(f, 0, n); gsl_vector_view f_tik = gsl_vector_subvector(f, n, p); /* call user callback function to get residual vector f */ status = gsl_multifit_eval_wf(w->fdf, x, NULL, &f_user.vector); if (status) return status; if (w->L_diag) { /* store diag(L_diag) x in Tikhonov portion of f~ */ gsl_vector_memcpy(&f_tik.vector, x); gsl_vector_mul(&f_tik.vector, w->L_diag); } else if (w->L) { /* store Lx in Tikhonov portion of f~ */ gsl_blas_dgemv(CblasNoTrans, 1.0, w->L, x, 0.0, &f_tik.vector); } else { /* store \lambda x in Tikhonov portion of f~ */ gsl_vector_memcpy(&f_tik.vector, x); gsl_vector_scale(&f_tik.vector, w->lambda); } return GSL_SUCCESS; } /* fdfridge_f() */ static int fdfridge_df(const gsl_vector * x, void * params, gsl_matrix * J) { int status; gsl_multifit_fdfridge *w = (gsl_multifit_fdfridge *) params; const size_t n = w->n; const size_t p = w->p; gsl_matrix_view J_user = gsl_matrix_submatrix(J, 0, 0, n, p); gsl_matrix_view J_tik = gsl_matrix_submatrix(J, n, 0, p, p); gsl_vector_view diag = gsl_matrix_diagonal(&J_tik.matrix); /* compute Jacobian */ if (w->fdf->df) status = gsl_multifit_eval_wdf(w->fdf, x, NULL, &J_user.matrix); else { /* compute f(x) and then finite difference Jacobian */ status = gsl_multifit_eval_wf(w->fdf, x, NULL, w->f); status += gsl_multifit_fdfsolver_dif_df(x, NULL, w->fdf, w->f, &J_user.matrix); } if (status) return status; if (w->L_diag) { /* store diag(L_diag) in Tikhonov portion of J */ gsl_matrix_set_zero(&J_tik.matrix); gsl_vector_memcpy(&diag.vector, w->L_diag); } else if (w->L) { /* store L in Tikhonov portion of J */ gsl_matrix_memcpy(&J_tik.matrix, w->L); } else { /* store \lambda I_p in Tikhonov portion of J */ gsl_matrix_set_zero(&J_tik.matrix); gsl_vector_set_all(&diag.vector, w->lambda); } return GSL_SUCCESS; } /* fdfridge_df() */ gsl/multifit/lmiterate.c0000644000175000017500000001257613536674414013734 0ustar eddeddstatic int iterate (void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_vector * dx, int scale) { lmder_state_t *state = (lmder_state_t *) vstate; gsl_matrix *r = state->r; gsl_vector *tau = state->tau; gsl_vector *diag = state->diag; gsl_vector *qtf = state->qtf; gsl_vector *x_trial = state->x_trial; gsl_vector *f_trial = state->f_trial; gsl_vector *rptdx = state->rptdx; gsl_vector *newton = state->newton; gsl_vector *gradient = state->gradient; gsl_vector *sdiag = state->sdiag; gsl_vector *w = state->w; gsl_vector *work1 = state->work1; gsl_permutation *perm = state->perm; double prered, actred; double pnorm, fnorm1, fnorm1p, gnorm; double ratio; double dirder; int iter = 0; double p1 = 0.1, p25 = 0.25, p5 = 0.5, p75 = 0.75, p0001 = 0.0001; if (state->fnorm == 0.0) { return GSL_SUCCESS; } /* Compute norm of scaled gradient */ compute_gradient_direction (r, perm, qtf, diag, gradient); { size_t iamax = gsl_blas_idamax (gradient); gnorm = fabs(gsl_vector_get (gradient, iamax) / state->fnorm); } /* Determine the Levenberg-Marquardt parameter */ lm_iteration: iter++ ; { int status = lmpar (r, perm, qtf, diag, state->delta, &(state->par), newton, gradient, sdiag, dx, w); if (status) return status; } /* Take a trial step */ gsl_vector_scale (dx, -1.0); /* reverse the step to go downhill */ compute_trial_step (x, dx, state->x_trial); pnorm = scaled_enorm (diag, dx); if (state->iter == 1) { if (pnorm < state->delta) { #ifdef DEBUG printf("set delta = pnorm = %g\n" , pnorm); #endif state->delta = pnorm; } } /* Evaluate function at x + p */ /* return immediately if evaluation raised error */ { int status = gsl_multifit_eval_wf (fdf, x_trial, swts, f_trial); if (status) return status; } fnorm1 = enorm (f_trial); /* Compute the scaled actual reduction */ actred = compute_actual_reduction (state->fnorm, fnorm1); #ifdef DEBUG printf("lmiterate: fnorm = %g fnorm1 = %g actred = %g\n", state->fnorm, fnorm1, actred); printf("r = "); gsl_matrix_fprintf(stdout, r, "%g"); printf("perm = "); gsl_permutation_fprintf(stdout, perm, "%d"); printf("dx = "); gsl_vector_fprintf(stdout, dx, "%g"); #endif /* Compute rptdx = R P^T dx, noting that |J dx| = |R P^T dx| */ compute_rptdx (r, perm, dx, rptdx); #ifdef DEBUG printf("rptdx = "); gsl_vector_fprintf(stdout, rptdx, "%g"); #endif fnorm1p = enorm (rptdx); /* Compute the scaled predicted reduction = |J dx|^2 + 2 par |D dx|^2 */ { double t1 = fnorm1p / state->fnorm; double t2 = (sqrt(state->par) * pnorm) / state->fnorm; prered = t1 * t1 + t2 * t2 / p5; dirder = -(t1 * t1 + t2 * t2); } /* compute the ratio of the actual to predicted reduction */ if (prered > 0) { ratio = actred / prered; } else { ratio = 0; } #ifdef DEBUG printf("lmiterate: prered = %g dirder = %g ratio = %g\n", prered, dirder,ratio); #endif /* update the step bound */ if (ratio > p25) { #ifdef DEBUG printf("ratio > p25\n"); #endif if (state->par == 0 || ratio >= p75) { state->delta = pnorm / p5; state->par *= p5; #ifdef DEBUG printf("updated step bounds: delta = %g, par = %g\n", state->delta, state->par); #endif } } else { double temp = (actred >= 0) ? p5 : p5*dirder / (dirder + p5 * actred); #ifdef DEBUG printf("ratio < p25\n"); #endif if (p1 * fnorm1 >= state->fnorm || temp < p1 ) { temp = p1; } state->delta = temp * GSL_MIN_DBL (state->delta, pnorm/p1); state->par /= temp; #ifdef DEBUG printf("updated step bounds: delta = %g, par = %g\n", state->delta, state->par); #endif } /* test for successful iteration, termination and stringent tolerances */ if (ratio >= p0001) { gsl_vector_memcpy (x, x_trial); gsl_vector_memcpy (f, f_trial); /* return immediately if evaluation raised error */ { int status; /* compute Jacobian at new x and store in state->r */ if (fdf->df) status = gsl_multifit_eval_wdf (fdf, x_trial, swts, r); else status = gsl_multifit_fdfsolver_dif_df(x_trial, swts, fdf, f_trial, r); if (status) return status; } /* wa2_j = diag_j * x_j */ state->xnorm = scaled_enorm(diag, x); state->fnorm = fnorm1; state->iter++; /* Rescale if necessary */ if (scale) { update_diag (r, diag); } /* compute J = Q R P^T and qtf = Q^T f */ { int signum; gsl_matrix_memcpy(state->J, r); gsl_linalg_QRPT_decomp (r, tau, perm, &signum, work1); gsl_vector_memcpy (qtf, f); gsl_linalg_QR_QTvec (r, tau, qtf); } return GSL_SUCCESS; } else if (fabs(actred) <= GSL_DBL_EPSILON && prered <= GSL_DBL_EPSILON && p5 * ratio <= 1.0) { return GSL_ETOLF ; } else if (state->delta <= GSL_DBL_EPSILON * state->xnorm) { return GSL_ETOLX; } else if (gnorm <= GSL_DBL_EPSILON) { return GSL_ETOLG; } else if (iter < 10) { /* Repeat inner loop if unsuccessful */ goto lm_iteration; } return GSL_ENOPROG; } gsl/multifit/gsl_multifit.h0000664000175000017500000003507114057135461014443 0ustar eddedd/* multifit/gsl_multifit.h * * Copyright (C) 2000, 2007, 2010 Brian Gough * Copyright (C) 2013, Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MULTIFIT_H__ #define __GSL_MULTIFIT_H__ #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t nmax; /* maximum number of observations */ size_t pmax; /* maximum number of parameters */ size_t n; /* number of observations in current SVD decomposition */ size_t p; /* number of parameters in current SVD decomposition */ gsl_matrix * A; /* least squares matrix for SVD, n-by-p */ gsl_matrix * Q; gsl_matrix * QSI; gsl_vector * S; gsl_vector * t; gsl_vector * xt; gsl_vector * D; double rcond; /* reciprocal condition number */ } gsl_multifit_linear_workspace; gsl_multifit_linear_workspace * gsl_multifit_linear_alloc (const size_t n, const size_t p); void gsl_multifit_linear_free (gsl_multifit_linear_workspace * w); int gsl_multifit_linear (const gsl_matrix * X, const gsl_vector * y, gsl_vector * c, gsl_matrix * cov, double * chisq, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_tsvd (const gsl_matrix * X, const gsl_vector * y, const double tol, gsl_vector * c, gsl_matrix * cov, double * chisq, size_t * rank, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_svd (const gsl_matrix * X, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_bsvd (const gsl_matrix * X, gsl_multifit_linear_workspace * work); size_t gsl_multifit_linear_rank(const double tol, const gsl_multifit_linear_workspace * work); int gsl_multifit_linear_solve (const double lambda, const gsl_matrix * X, const gsl_vector * y, gsl_vector * c, double *rnorm, double *snorm, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_applyW(const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, gsl_matrix * WX, gsl_vector * Wy); int gsl_multifit_linear_stdform1 (const gsl_vector * L, const gsl_matrix * X, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_wstdform1 (const gsl_vector * L, const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_L_decomp (gsl_matrix * L, gsl_vector * tau); int gsl_multifit_linear_stdform2 (const gsl_matrix * LQR, const gsl_vector * Ltau, const gsl_matrix * X, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_matrix * M, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_wstdform2 (const gsl_matrix * LQR, const gsl_vector * Ltau, const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, gsl_matrix * Xs, gsl_vector * ys, gsl_matrix * M, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_genform1 (const gsl_vector * L, const gsl_vector * cs, gsl_vector * c, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_genform2 (const gsl_matrix * LQR, const gsl_vector * Ltau, const gsl_matrix * X, const gsl_vector * y, const gsl_vector * cs, const gsl_matrix * M, gsl_vector * c, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_wgenform2 (const gsl_matrix * LQR, const gsl_vector * Ltau, const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, const gsl_vector * cs, const gsl_matrix * M, gsl_vector * c, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_lreg (const double smin, const double smax, gsl_vector * reg_param); int gsl_multifit_linear_lcurve (const gsl_vector * y, gsl_vector * reg_param, gsl_vector * rho, gsl_vector * eta, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_lcurvature (const gsl_vector * y, const gsl_vector * reg_param, const gsl_vector * rho, const gsl_vector * eta, gsl_vector * kappa, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_lcorner(const gsl_vector *rho, const gsl_vector *eta, size_t *idx); int gsl_multifit_linear_lcorner2(const gsl_vector *reg_param, const gsl_vector *eta, size_t *idx); int gsl_multifit_linear_Lk(const size_t p, const size_t k, gsl_matrix *L); int gsl_multifit_linear_Lsobolev(const size_t p, const size_t kmax, const gsl_vector *alpha, gsl_matrix *L, gsl_multifit_linear_workspace *work); int gsl_multifit_wlinear (const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, gsl_vector * c, gsl_matrix * cov, double * chisq, gsl_multifit_linear_workspace * work); int gsl_multifit_wlinear_tsvd (const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, const double tol, gsl_vector * c, gsl_matrix * cov, double * chisq, size_t * rank, gsl_multifit_linear_workspace * work); int gsl_multifit_wlinear_svd (const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, double tol, size_t * rank, gsl_vector * c, gsl_matrix * cov, double *chisq, gsl_multifit_linear_workspace * work); int gsl_multifit_wlinear_usvd (const gsl_matrix * X, const gsl_vector * w, const gsl_vector * y, double tol, size_t * rank, gsl_vector * c, gsl_matrix * cov, double *chisq, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_est (const gsl_vector * x, const gsl_vector * c, const gsl_matrix * cov, double *y, double *y_err); double gsl_multifit_linear_rcond (const gsl_multifit_linear_workspace * w); int gsl_multifit_linear_residuals (const gsl_matrix *X, const gsl_vector *y, const gsl_vector *c, gsl_vector *r); /* gcv.c */ int gsl_multifit_linear_gcv_init(const gsl_vector * y, gsl_vector * reg_param, gsl_vector * UTy, double * delta0, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_gcv_curve(const gsl_vector * reg_param, const gsl_vector * UTy, const double delta0, gsl_vector * G, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_gcv_min(const gsl_vector * reg_param, const gsl_vector * UTy, const gsl_vector * G, const double delta0, double * lambda, gsl_multifit_linear_workspace * work); double gsl_multifit_linear_gcv_calc(const double lambda, const gsl_vector * UTy, const double delta0, gsl_multifit_linear_workspace * work); int gsl_multifit_linear_gcv(const gsl_vector * y, gsl_vector * reg_param, gsl_vector * G, double * lambda, double * G_lambda, gsl_multifit_linear_workspace * work); typedef struct { const char * name; /* method name */ int (*wfun)(const gsl_vector *r, gsl_vector *w); int (*psi_deriv)(const gsl_vector *r, gsl_vector *dpsi); double tuning_default; /* default tuning constant */ } gsl_multifit_robust_type; typedef struct { double sigma_ols; /* OLS estimate of sigma */ double sigma_mad; /* MAD estimate of sigma */ double sigma_rob; /* robust estimate of sigma */ double sigma; /* final estimate of sigma */ double Rsq; /* R^2 coefficient of determination */ double adj_Rsq; /* degree of freedom adjusted R^2 */ double rmse; /* root mean squared error */ double sse; /* residual sum of squares */ size_t dof; /* degrees of freedom */ size_t numit; /* number of iterations */ gsl_vector *weights; /* final weights */ gsl_vector *r; /* final residuals y - X c */ } gsl_multifit_robust_stats; typedef struct { size_t n; /* number of observations */ size_t p; /* number of parameters */ size_t numit; /* number of iterations */ size_t maxiter; /* maximum iterations */ const gsl_multifit_robust_type *type; double tune; /* tuning parameter */ gsl_vector *r; /* residuals at current iteration */ gsl_vector *weights; /* weights at current iteration */ gsl_vector *c_prev; /* coefficients from previous iteration */ gsl_vector *resfac; /* multiplicative factors for residuals */ gsl_vector *psi; /* psi(r) */ gsl_vector *dpsi; /* psi'(r) */ gsl_matrix *QSI; /* Q S^{-1} of original matrix X */ gsl_vector *D; /* balancing parameters of original matrix X */ gsl_vector *workn; /* workspace of length n */ gsl_multifit_robust_stats stats; /* various statistics */ gsl_multifit_linear_workspace *multifit_p; } gsl_multifit_robust_workspace; /* available types */ GSL_VAR const gsl_multifit_robust_type * gsl_multifit_robust_default; GSL_VAR const gsl_multifit_robust_type * gsl_multifit_robust_bisquare; GSL_VAR const gsl_multifit_robust_type * gsl_multifit_robust_cauchy; GSL_VAR const gsl_multifit_robust_type * gsl_multifit_robust_fair; GSL_VAR const gsl_multifit_robust_type * gsl_multifit_robust_huber; GSL_VAR const gsl_multifit_robust_type * gsl_multifit_robust_ols; GSL_VAR const gsl_multifit_robust_type * gsl_multifit_robust_welsch; gsl_multifit_robust_workspace *gsl_multifit_robust_alloc(const gsl_multifit_robust_type *T, const size_t n, const size_t p); void gsl_multifit_robust_free(gsl_multifit_robust_workspace *w); int gsl_multifit_robust_tune(const double tune, gsl_multifit_robust_workspace *w); int gsl_multifit_robust_maxiter(const size_t maxiter, gsl_multifit_robust_workspace *w); const char *gsl_multifit_robust_name(const gsl_multifit_robust_workspace *w); gsl_multifit_robust_stats gsl_multifit_robust_statistics(const gsl_multifit_robust_workspace *w); int gsl_multifit_robust_weights(const gsl_vector *r, gsl_vector *wts, gsl_multifit_robust_workspace *w); int gsl_multifit_robust(const gsl_matrix * X, const gsl_vector * y, gsl_vector * c, gsl_matrix *cov, gsl_multifit_robust_workspace *w); int gsl_multifit_robust_est(const gsl_vector * x, const gsl_vector * c, const gsl_matrix * cov, double *y, double *y_err); int gsl_multifit_robust_residuals(const gsl_matrix * X, const gsl_vector * y, const gsl_vector * c, gsl_vector * r, gsl_multifit_robust_workspace * w); __END_DECLS #endif /* __GSL_MULTIFIT_H__ */ gsl/multifit/test_wood.c0000644000175000017500000000374313536674414013751 0ustar eddedd#define wood_N 6 #define wood_P 4 #define wood_NTRIES 3 static double wood_x0[wood_P] = { -3.0, -1.0, -3.0, -1.0 }; static double wood_epsrel = 1.0e-12; static void wood_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; const double wood_x[wood_P] = { 1.0, 1.0, 1.0, 1.0 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < wood_P; ++i) { gsl_test_rel(x[i], wood_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int wood_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); gsl_vector_set(f, 0, 10.0*(x2 - x1*x1)); gsl_vector_set(f, 1, 1.0 - x1); gsl_vector_set(f, 2, sqrt(90.0)*(x4 - x3*x3)); gsl_vector_set(f, 3, 1.0 - x3); gsl_vector_set(f, 4, sqrt(10.0)*(x2 + x4 - 2.0)); gsl_vector_set(f, 5, (x2 - x4) / sqrt(10.0)); return GSL_SUCCESS; } static int wood_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x3 = gsl_vector_get(x, 2); double s90 = sqrt(90.0); double s10 = sqrt(10.0); gsl_matrix_set_zero(J); gsl_matrix_set(J, 0, 0, -20.0*x1); gsl_matrix_set(J, 0, 1, 10.0); gsl_matrix_set(J, 1, 0, -1.0); gsl_matrix_set(J, 2, 2, -2.0*s90*x3); gsl_matrix_set(J, 2, 3, s90); gsl_matrix_set(J, 3, 2, -1.0); gsl_matrix_set(J, 4, 1, s10); gsl_matrix_set(J, 4, 3, s10); gsl_matrix_set(J, 5, 1, 1.0/s10); gsl_matrix_set(J, 5, 3, -1.0/s10); return GSL_SUCCESS; } static gsl_multifit_function_fdf wood_func = { &wood_f, &wood_df, NULL, wood_N, wood_P, NULL, 0, 0 }; static test_fdf_problem wood_problem = { "wood", wood_x0, NULL, &wood_epsrel, wood_NTRIES, &wood_checksol, &wood_func }; gsl/multifit/test_roth.c0000644000175000017500000000347713536674414013761 0ustar eddedd#define roth_N 2 #define roth_P 2 #define roth_NTRIES 3 static double roth_x0[roth_P] = { 0.5, -2.0 }; static double roth_epsrel = 1.0e-8; static void roth_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact1 = 0.0; const double roth_x1[roth_P] = { 5.0, 4.0 }; const double sumsq_exact2 = 48.9842536792400; const double roth_x2[roth_P] = { 11.4127789869021, -0.896805253274477 }; const double *roth_x; double sumsq_exact; if (fabs(sumsq) < 0.1) { sumsq_exact = sumsq_exact1; roth_x = roth_x1; } else { sumsq_exact = sumsq_exact2; roth_x = roth_x2; } gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < roth_P; ++i) { gsl_test_rel(x[i], roth_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int roth_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); gsl_vector_set(f, 0, x1 - x2*(2.0 - x2*(5.0 - x2)) - 13.0); gsl_vector_set(f, 1, x1 - x2*(14.0 - x2*(1.0 + x2)) - 29.0); return GSL_SUCCESS; } static int roth_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x2 = gsl_vector_get(x, 1); gsl_matrix_set(J, 0, 0, 1.0); gsl_matrix_set(J, 0, 1, -2.0 + x2*(10.0 - 3.0*x2)); gsl_matrix_set(J, 1, 0, 1.0); gsl_matrix_set(J, 1, 1, -14.0 + x2*(2.0 + 3.0*x2)); return GSL_SUCCESS; } static gsl_multifit_function_fdf roth_func = { &roth_f, &roth_df, NULL, roth_N, roth_P, NULL, 0, 0 }; static test_fdf_problem roth_problem = { "roth_freudenstein", roth_x0, NULL, &roth_epsrel, roth_NTRIES, &roth_checksol, &roth_func }; gsl/multifit/test_enso.c0000644000175000017500000001253313536674414013742 0ustar eddedd#define enso_N 168 #define enso_P 9 #define enso_NTRIES 1 static double enso_x0[enso_P] = { 10.0, 3.0, 0.5, 44.0, -1.5, 0.5, 26.0, 0.1, 1.5 }; static double enso_epsrel = 1.0e-3; static double enso_sigma[enso_P] = { 1.7488832467E-01, 2.4310052139E-01, 2.4354686618E-01, 9.4408025976E-01, 2.8078369611E-01, 4.8073701119E-01, 4.1612939130E-01, 5.1460022911E-01, 2.5434468893E-01 }; static double enso_F[enso_N] = { 12.90000, 11.30000, 10.60000, 11.20000, 10.90000, 7.500000, 7.700000, 11.70000, 12.90000, 14.30000, 10.90000, 13.70000, 17.10000, 14.00000, 15.30000, 8.500000, 5.700000, 5.500000, 7.600000, 8.600000, 7.300000, 7.600000, 12.70000, 11.00000, 12.70000, 12.90000, 13.00000, 10.90000, 10.400000, 10.200000, 8.000000, 10.90000, 13.60000, 10.500000, 9.200000, 12.40000, 12.70000, 13.30000, 10.100000, 7.800000, 4.800000, 3.000000, 2.500000, 6.300000, 9.700000, 11.60000, 8.600000, 12.40000, 10.500000, 13.30000, 10.400000, 8.100000, 3.700000, 10.70000, 5.100000, 10.400000, 10.90000, 11.70000, 11.40000, 13.70000, 14.10000, 14.00000, 12.50000, 6.300000, 9.600000, 11.70000, 5.000000, 10.80000, 12.70000, 10.80000, 11.80000, 12.60000, 15.70000, 12.60000, 14.80000, 7.800000, 7.100000, 11.20000, 8.100000, 6.400000, 5.200000, 12.00000, 10.200000, 12.70000, 10.200000, 14.70000, 12.20000, 7.100000, 5.700000, 6.700000, 3.900000, 8.500000, 8.300000, 10.80000, 16.70000, 12.60000, 12.50000, 12.50000, 9.800000, 7.200000, 4.100000, 10.60000, 10.100000, 10.100000, 11.90000, 13.60000, 16.30000, 17.60000, 15.50000, 16.00000, 15.20000, 11.20000, 14.30000, 14.50000, 8.500000, 12.00000, 12.70000, 11.30000, 14.50000, 15.10000, 10.400000, 11.50000, 13.40000, 7.500000, 0.6000000, 0.3000000, 5.500000, 5.000000, 4.600000, 8.200000, 9.900000, 9.200000, 12.50000, 10.90000, 9.900000, 8.900000, 7.600000, 9.500000, 8.400000, 10.70000, 13.60000, 13.70000, 13.70000, 16.50000, 16.80000, 17.10000, 15.40000, 9.500000, 6.100000, 10.100000, 9.300000, 5.300000, 11.20000, 16.60000, 15.60000, 12.00000, 11.50000, 8.600000, 13.80000, 8.700000, 8.600000, 8.600000, 8.700000, 12.80000, 13.20000, 14.00000, 13.40000, 14.80000 }; static void enso_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 7.8853978668E+02; const double enso_x[enso_P] = { 1.0510749193E+01, 3.0762128085E+00, 5.3280138227E-01, 4.4311088700E+01, -1.6231428586E+00, 5.2554493756E-01, 2.6887614440E+01, 2.1232288488E-01, 1.4966870418E+00 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < enso_P; ++i) { gsl_test_rel(x[i], enso_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int enso_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[enso_P]; size_t i; for (i = 0; i < enso_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < enso_N; i++) { double t = (i + 1.0); double y; y = b[0]; y += b[1] * cos(2*M_PI*t/12); y += b[2] * sin(2*M_PI*t/12); y += b[4] * cos(2*M_PI*t/b[3]); y += b[5] * sin(2*M_PI*t/b[3]); y += b[7] * cos(2*M_PI*t/b[6]); y += b[8] * sin(2*M_PI*t/b[6]); gsl_vector_set (f, i, enso_F[i] - y); } return GSL_SUCCESS; } static int enso_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[enso_P]; size_t i; for (i = 0; i < enso_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < enso_N; i++) { double t = (i + 1.0); gsl_matrix_set (df, i, 0, -1.0); gsl_matrix_set (df, i, 1, -cos(2*M_PI*t/12)); gsl_matrix_set (df, i, 2, -sin(2*M_PI*t/12)); gsl_matrix_set (df, i, 3, -b[4]*(2*M_PI*t/(b[3]*b[3]))*sin(2*M_PI*t/b[3]) +b[5]*(2*M_PI*t/(b[3]*b[3]))*cos(2*M_PI*t/b[3])); gsl_matrix_set (df, i, 4, -cos(2*M_PI*t/b[3])); gsl_matrix_set (df, i, 5, -sin(2*M_PI*t/b[3])); gsl_matrix_set (df, i, 6, -b[7] * (2*M_PI*t/(b[6]*b[6])) * sin(2*M_PI*t/b[6]) +b[8] * (2*M_PI*t/(b[6]*b[6])) * cos(2*M_PI*t/b[6])); gsl_matrix_set (df, i, 7, -cos(2*M_PI*t/b[6])); gsl_matrix_set (df, i, 8, -sin(2*M_PI*t/b[6])); } return GSL_SUCCESS; } static gsl_multifit_function_fdf enso_func = { &enso_f, &enso_df, NULL, enso_N, enso_P, NULL, 0, 0 }; static test_fdf_problem enso_problem = { "nist-ENSO", enso_x0, enso_sigma, &enso_epsrel, enso_NTRIES, &enso_checksol, &enso_func }; gsl/multifit/test_brown1.c0000644000175000017500000000415713536674414014211 0ustar eddedd#define brown1_N 20 #define brown1_P 4 #define brown1_NTRIES 3 static double brown1_x0[brown1_P] = { 25, 5, -5, -1 }; static double brown1_epsrel = 1.0e-6; static void brown1_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 8.582220162635628e+04; const double brown1_x[brown1_P] = { -1.159443990239263e+01, 1.320363005221244e+01, -4.034395456782477e-01, 2.367789088597534e-01 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < brown1_P; ++i) { gsl_test_rel(x[i], brown1_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int brown1_f (const gsl_vector * x, void *params, gsl_vector * f) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double x2 = gsl_vector_get (x, 2); double x3 = gsl_vector_get (x, 3); size_t i; for (i = 0; i < brown1_N; i++) { double ti = 0.2 * (i + 1); double ui = x0 + x1 * ti - exp (ti); double vi = x2 + x3 * sin (ti) - cos (ti); gsl_vector_set (f, i, ui * ui + vi * vi); } return GSL_SUCCESS; } static int brown1_df (const gsl_vector * x, void *params, gsl_matrix * df) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double x2 = gsl_vector_get (x, 2); double x3 = gsl_vector_get (x, 3); size_t i; for (i = 0; i < brown1_N; i++) { double ti = 0.2 * (i + 1); double ui = x0 + x1 * ti - exp (ti); double vi = x2 + x3 * sin (ti) - cos (ti); gsl_matrix_set (df, i, 0, 2 * ui); gsl_matrix_set (df, i, 1, 2 * ui * ti); gsl_matrix_set (df, i, 2, 2 * vi); gsl_matrix_set (df, i, 3, 2 * vi * sin (ti)); } return GSL_SUCCESS; } static gsl_multifit_function_fdf brown1_func = { &brown1_f, &brown1_df, NULL, brown1_N, brown1_P, NULL, 0, 0 }; static test_fdf_problem brown1_problem = { "brown_dennis", brown1_x0, NULL, &brown1_epsrel, brown1_NTRIES, &brown1_checksol, &brown1_func }; gsl/multifit/multilinear.c0000644000175000017500000002326713536674414014272 0ustar eddedd/* multifit/multilinear.c * * Copyright (C) 2000, 2007, 2010 Brian Gough * Copyright (C) 2013, 2015 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include "linear_common.c" static int multifit_linear_svd (const gsl_matrix * X, const int balance, gsl_multifit_linear_workspace * work); int gsl_multifit_linear (const gsl_matrix * X, const gsl_vector * y, gsl_vector * c, gsl_matrix * cov, double *chisq, gsl_multifit_linear_workspace * work) { size_t rank; int status = gsl_multifit_linear_tsvd(X, y, GSL_DBL_EPSILON, c, cov, chisq, &rank, work); return status; } /* gsl_multifit_linear_tsvd() Solve linear least squares system with truncated SVD Inputs: X - least squares matrix, n-by-p y - right hand side vector, n-by-1 tol - tolerance for singular value truncation; if s_j <= tol * s_0 then it is discarded from series expansion c - (output) solution vector, p-by-1 cov - (output) covariance matrix, p-by-p chisq - (output) cost function chi^2 rank - (output) effective rank (number of singular values used in solution) work - workspace */ int gsl_multifit_linear_tsvd (const gsl_matrix * X, const gsl_vector * y, const double tol, gsl_vector * c, gsl_matrix * cov, double * chisq, size_t * rank, gsl_multifit_linear_workspace * work) { const size_t n = X->size1; const size_t p = X->size2; if (y->size != n) { GSL_ERROR("number of observations in y does not match matrix", GSL_EBADLEN); } else if (p != c->size) { GSL_ERROR ("number of parameters c does not match matrix", GSL_EBADLEN); } else if (tol <= 0) { GSL_ERROR ("tolerance must be positive", GSL_EINVAL); } else { int status; double rnorm = 0.0, snorm; /* compute balanced SVD */ status = gsl_multifit_linear_bsvd (X, work); if (status) return status; status = multifit_linear_solve (X, y, tol, -1.0, rank, c, &rnorm, &snorm, work); *chisq = rnorm * rnorm; /* variance-covariance matrix cov = s2 * (Q S^-1) (Q S^-1)^T */ { double r2 = rnorm * rnorm; double s2 = r2 / (double)(n - *rank); size_t i, j; gsl_matrix_view QSI = gsl_matrix_submatrix(work->QSI, 0, 0, p, p); gsl_vector_view D = gsl_vector_subvector(work->D, 0, p); for (i = 0; i < p; i++) { gsl_vector_view row_i = gsl_matrix_row (&QSI.matrix, i); double d_i = gsl_vector_get (&D.vector, i); for (j = i; j < p; j++) { gsl_vector_view row_j = gsl_matrix_row (&QSI.matrix, j); double d_j = gsl_vector_get (&D.vector, j); double s; gsl_blas_ddot (&row_i.vector, &row_j.vector, &s); gsl_matrix_set (cov, i, j, s * s2 / (d_i * d_j)); gsl_matrix_set (cov, j, i, s * s2 / (d_i * d_j)); } } } return status; } } /* gsl_multifit_linear_svd() Perform SVD decomposition of the matrix X and store in work without balancing */ int gsl_multifit_linear_svd (const gsl_matrix * X, gsl_multifit_linear_workspace * work) { /* do not balance by default */ int status = multifit_linear_svd(X, 0, work); return status; } /* gsl_multifit_linear_bsvd() Perform SVD decomposition of the matrix X and store in work with balancing */ int gsl_multifit_linear_bsvd (const gsl_matrix * X, gsl_multifit_linear_workspace * work) { int status = multifit_linear_svd(X, 1, work); return status; } size_t gsl_multifit_linear_rank(const double tol, const gsl_multifit_linear_workspace * work) { double s0 = gsl_vector_get (work->S, 0); size_t rank = 0; size_t j; for (j = 0; j < work->p; j++) { double sj = gsl_vector_get (work->S, j); if (sj > tol * s0) ++rank; } return rank; } /* Estimation of values for given x */ int gsl_multifit_linear_est (const gsl_vector * x, const gsl_vector * c, const gsl_matrix * cov, double *y, double *y_err) { if (x->size != c->size) { GSL_ERROR ("number of parameters c does not match number of observations x", GSL_EBADLEN); } else if (cov->size1 != cov->size2) { GSL_ERROR ("covariance matrix is not square", GSL_ENOTSQR); } else if (c->size != cov->size1) { GSL_ERROR ("number of parameters c does not match size of covariance matrix cov", GSL_EBADLEN); } else { size_t i, j; double var = 0; gsl_blas_ddot(x, c, y); /* y = x.c */ /* var = x' cov x */ for (i = 0; i < x->size; i++) { const double xi = gsl_vector_get (x, i); var += xi * xi * gsl_matrix_get (cov, i, i); for (j = 0; j < i; j++) { const double xj = gsl_vector_get (x, j); var += 2 * xi * xj * gsl_matrix_get (cov, i, j); } } *y_err = sqrt (var); return GSL_SUCCESS; } } /* gsl_multifit_linear_rcond() Return reciprocal condition number of LS matrix; gsl_multifit_linear_svd() must first be called to compute the SVD of X and its reciprocal condition number */ double gsl_multifit_linear_rcond (const gsl_multifit_linear_workspace * w) { return w->rcond; } /* gsl_multifit_linear_residuals() Compute vector of residuals from fit Inputs: X - design matrix y - rhs vector c - fit coefficients r - (output) where to store residuals */ int gsl_multifit_linear_residuals (const gsl_matrix *X, const gsl_vector *y, const gsl_vector *c, gsl_vector *r) { if (X->size1 != y->size) { GSL_ERROR ("number of observations in y does not match rows of matrix X", GSL_EBADLEN); } else if (X->size2 != c->size) { GSL_ERROR ("number of parameters c does not match columns of matrix X", GSL_EBADLEN); } else if (y->size != r->size) { GSL_ERROR ("number of observations in y does not match number of residuals", GSL_EBADLEN); } else { /* r = y - X c */ gsl_vector_memcpy(r, y); gsl_blas_dgemv(CblasNoTrans, -1.0, X, c, 1.0, r); return GSL_SUCCESS; } } /* gsl_multifit_linear_residuals() */ /* Perform a SVD decomposition on the least squares matrix X = U S Q^T * * Inputs: X - least squares matrix * balance - 1 to perform column balancing * work - workspace * * Notes: * 1) On output, * work->A contains the matrix U * work->Q contains the matrix Q * work->S contains the vector of singular values * 2) The matrix X may have smaller dimensions than the workspace * in the case of stdform2() - but the dimensions cannot be larger * 3) On output, work->n and work->p are set to the dimensions of X * 4) On output, work->rcond is set to the reciprocal condition number of X */ static int multifit_linear_svd (const gsl_matrix * X, const int balance, gsl_multifit_linear_workspace * work) { const size_t n = X->size1; const size_t p = X->size2; if (n > work->nmax || p > work->pmax) { GSL_ERROR("observation matrix larger than workspace", GSL_EBADLEN); } else { gsl_matrix_view A = gsl_matrix_submatrix(work->A, 0, 0, n, p); gsl_matrix_view Q = gsl_matrix_submatrix(work->Q, 0, 0, p, p); gsl_matrix_view QSI = gsl_matrix_submatrix(work->QSI, 0, 0, p, p); gsl_vector_view S = gsl_vector_subvector(work->S, 0, p); gsl_vector_view xt = gsl_vector_subvector(work->xt, 0, p); gsl_vector_view D = gsl_vector_subvector(work->D, 0, p); /* Copy X to workspace, A <= X */ gsl_matrix_memcpy (&A.matrix, X); /* Balance the columns of the matrix A if requested */ if (balance) { gsl_linalg_balance_columns (&A.matrix, &D.vector); } else { gsl_vector_set_all (&D.vector, 1.0); } /* decompose A into U S Q^T */ gsl_linalg_SV_decomp_mod (&A.matrix, &QSI.matrix, &Q.matrix, &S.vector, &xt.vector); /* compute reciprocal condition number rcond = smin / smax */ { double smin, smax; gsl_vector_minmax(&S.vector, &smin, &smax); work->rcond = smin / smax; } work->n = n; work->p = p; return GSL_SUCCESS; } } gsl/multifit/test_powell3.c0000644000175000017500000000316613536674414014365 0ustar eddedd#define powell3_N 2 #define powell3_P 2 #define powell3_NTRIES 1 static double powell3_x0[powell3_P] = { 0.0, 1.0 }; static double powell3_epsrel = 1.0e-12; static void powell3_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; const double powell3_x[powell3_P] = { 1.09815932969975976e-05, 9.10614673986700218 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < powell3_P; ++i) { gsl_test_rel(x[i], powell3_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int powell3_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); gsl_vector_set(f, 0, 1.0e4*x1*x2 - 1.0); gsl_vector_set(f, 1, exp(-x1) + exp(-x2) - 1.0001); return GSL_SUCCESS; } static int powell3_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); gsl_matrix_set(J, 0, 0, 1.0e4*x2); gsl_matrix_set(J, 0, 1, 1.0e4*x1); gsl_matrix_set(J, 1, 0, -exp(-x1)); gsl_matrix_set(J, 1, 1, -exp(-x2)); return GSL_SUCCESS; } static gsl_multifit_function_fdf powell3_func = { &powell3_f, &powell3_df, NULL, powell3_N, powell3_P, NULL, 0, 0 }; static test_fdf_problem powell3_problem = { "powell_badly_scaled", powell3_x0, NULL, &powell3_epsrel, powell3_NTRIES, &powell3_checksol, &powell3_func }; gsl/multifit/test_beale.c0000644000175000017500000000326213536674414014045 0ustar eddedd#define beale_N 3 #define beale_P 2 #define beale_NTRIES 1 static double beale_x0[beale_P] = { 1.0, 1.0 }; static double beale_epsrel = 1.0e-12; static double beale_Y[beale_N] = { 1.5, 2.25, 2.625 }; static void beale_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; const double beale_x[beale_P] = { 3.0, 0.5 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < beale_P; ++i) { gsl_test_rel(x[i], beale_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int beale_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); size_t i; for (i = 0; i < beale_N; ++i) { double yi = beale_Y[i]; double term = pow(x2, i + 1.0); double fi = yi - x1*(1.0 - term); gsl_vector_set(f, i, fi); } return GSL_SUCCESS; } static int beale_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); size_t i; for (i = 0; i < beale_N; ++i) { double term = pow(x2, (double) i); gsl_matrix_set(J, i, 0, term*x2 - 1.0); gsl_matrix_set(J, i, 1, (i + 1.0) * x1 * term); } return GSL_SUCCESS; } static gsl_multifit_function_fdf beale_func = { &beale_f, &beale_df, NULL, beale_N, beale_P, NULL, 0, 0 }; static test_fdf_problem beale_problem = { "beale", beale_x0, NULL, &beale_epsrel, beale_NTRIES, &beale_checksol, &beale_func }; gsl/multifit/lmpar.c0000644000175000017500000002612013536674414013047 0ustar eddedd/* multifit/lmpar.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include "qrsolv.c" static size_t count_nsing (const gsl_matrix * r) { /* Count the number of nonsingular entries. Returns the index of the first entry which is singular. */ size_t n = r->size2; size_t i; for (i = 0; i < n; i++) { double rii = gsl_matrix_get (r, i, i); if (rii == 0) { break; } } return i; } static void compute_newton_direction (const gsl_matrix * r, const gsl_permutation * perm, const gsl_vector * qtf, gsl_vector * x) { /* Compute and store in x the Gauss-Newton direction. If the Jacobian is rank-deficient then obtain a least squares solution. */ const size_t n = r->size2; size_t i, j, nsing; for (i = 0 ; i < n ; i++) { double qtfi = gsl_vector_get (qtf, i); gsl_vector_set (x, i, qtfi); } nsing = count_nsing (r); #ifdef DEBUG printf("nsing = %d\n", nsing); printf("r = "); gsl_matrix_fprintf(stdout, r, "%g"); printf("\n"); printf("qtf = "); gsl_vector_fprintf(stdout, x, "%g"); printf("\n"); #endif for (i = nsing; i < n; i++) { gsl_vector_set (x, i, 0.0); } if (nsing > 0) { for (j = nsing; j > 0 && j--;) { double rjj = gsl_matrix_get (r, j, j); double temp = gsl_vector_get (x, j) / rjj; gsl_vector_set (x, j, temp); for (i = 0; i < j; i++) { double rij = gsl_matrix_get (r, i, j); double xi = gsl_vector_get (x, i); gsl_vector_set (x, i, xi - rij * temp); } } } gsl_permute_vector_inverse (perm, x); } static void compute_newton_correction (const gsl_matrix * r, const gsl_vector * sdiag, const gsl_permutation * p, gsl_vector * x, double dxnorm, const gsl_vector * diag, gsl_vector * w) { size_t n = r->size2; size_t i, j; for (i = 0; i < n; i++) { size_t pi = gsl_permutation_get (p, i); double dpi = gsl_vector_get (diag, pi); double xpi = gsl_vector_get (x, pi); gsl_vector_set (w, i, dpi * (dpi * xpi) / dxnorm); } for (j = 0; j < n; j++) { double sj = gsl_vector_get (sdiag, j); double wj = gsl_vector_get (w, j); double tj = wj / sj; gsl_vector_set (w, j, tj); for (i = j + 1; i < n; i++) { double rij = gsl_matrix_get (r, i, j); double wi = gsl_vector_get (w, i); gsl_vector_set (w, i, wi - rij * tj); } } } static void compute_newton_bound (const gsl_matrix * r, const gsl_vector * x, double dxnorm, const gsl_permutation * perm, const gsl_vector * diag, gsl_vector * w) { /* If the jacobian is not rank-deficient then the Newton step provides a lower bound for the zero of the function. Otherwise set this bound to zero. */ size_t n = r->size2; size_t i, j; size_t nsing = count_nsing (r); if (nsing < n) { gsl_vector_set_zero (w); return; } for (i = 0; i < n; i++) { size_t pi = gsl_permutation_get (perm, i); double dpi = gsl_vector_get (diag, pi); double xpi = gsl_vector_get (x, pi); gsl_vector_set (w, i, dpi * (dpi * xpi / dxnorm)); } for (j = 0; j < n; j++) { double sum = 0; for (i = 0; i < j; i++) { sum += gsl_matrix_get (r, i, j) * gsl_vector_get (w, i); } { double rjj = gsl_matrix_get (r, j, j); double wj = gsl_vector_get (w, j); gsl_vector_set (w, j, (wj - sum) / rjj); } } } /* compute scaled gradient g = D^{-1} J^T f (see More' eq 7.2) */ static void compute_gradient_direction (const gsl_matrix * r, const gsl_permutation * p, const gsl_vector * qtf, const gsl_vector * diag, gsl_vector * g) { const size_t n = r->size2; size_t i, j; for (j = 0; j < n; j++) { double sum = 0; for (i = 0; i <= j; i++) { sum += gsl_matrix_get (r, i, j) * gsl_vector_get (qtf, i); } { size_t pj = gsl_permutation_get (p, j); double dpj = gsl_vector_get (diag, pj); gsl_vector_set (g, j, sum / dpj); } } } /* compute gradient g = J^T f */ static void compute_gradient (const gsl_matrix * r, const gsl_vector * qtf, gsl_vector * g) { const size_t n = r->size2; size_t i, j; for (j = 0; j < n; j++) { double sum = 0; for (i = 0; i <= j; i++) { sum += gsl_matrix_get (r, i, j) * gsl_vector_get (qtf, i); } gsl_vector_set (g, j, sum); } } static int lmpar (gsl_matrix * r, const gsl_permutation * perm, const gsl_vector * qtf, const gsl_vector * diag, double delta, double * par_inout, gsl_vector * newton, gsl_vector * gradient, gsl_vector * sdiag, gsl_vector * x, gsl_vector * w) { double dxnorm, gnorm, fp, fp_old, par_lower, par_upper, par_c; double par = *par_inout; size_t iter = 0; #ifdef DEBUG printf("ENTERING lmpar\n"); #endif compute_newton_direction (r, perm, qtf, newton); #ifdef DEBUG printf ("newton = "); gsl_vector_fprintf (stdout, newton, "%g"); printf ("\n"); printf ("diag = "); gsl_vector_fprintf (stdout, diag, "%g"); printf ("\n"); #endif /* Evaluate the function at the origin and test for acceptance of the Gauss-Newton direction. */ dxnorm = scaled_enorm (diag, newton); fp = dxnorm - delta; #ifdef DEBUG printf ("dxnorm = %g, delta = %g, fp = %g\n", dxnorm, delta, fp); #endif if (fp <= 0.1 * delta) { gsl_vector_memcpy (x, newton); #ifdef DEBUG printf ("took newton (fp = %g, delta = %g)\n", fp, delta); #endif *par_inout = 0; return GSL_SUCCESS; } #ifdef DEBUG printf ("r = "); gsl_matrix_fprintf (stdout, r, "%g"); printf ("\n"); printf ("newton = "); gsl_vector_fprintf (stdout, newton, "%g"); printf ("\n"); printf ("dxnorm = %g\n", dxnorm); #endif compute_newton_bound (r, newton, dxnorm, perm, diag, w); #ifdef DEBUG printf("perm = "); gsl_permutation_fprintf(stdout, perm, "%d"); printf ("diag = "); gsl_vector_fprintf (stdout, diag, "%g"); printf ("\n"); printf ("w = "); gsl_vector_fprintf (stdout, w, "%g"); printf ("\n"); #endif { double wnorm = enorm (w); double phider = wnorm * wnorm; /* w == zero if r rank-deficient, then set lower bound to zero form MINPACK, lmder.f Hans E. Plesser 2002-02-25 (hans.plesser@itf.nlh.no) */ if ( wnorm > 0 ) par_lower = fp / (delta * phider); else par_lower = 0.0; } #ifdef DEBUG printf("par = %g\n", par ); printf("par_lower = %g\n", par_lower); #endif compute_gradient_direction (r, perm, qtf, diag, gradient); gnorm = enorm (gradient); #ifdef DEBUG printf("gradient = "); gsl_vector_fprintf(stdout, gradient, "%g"); printf("\n"); printf("gnorm = %g\n", gnorm); #endif par_upper = gnorm / delta; if (par_upper == 0) { par_upper = GSL_DBL_MIN / GSL_MIN_DBL(delta, 0.1); } #ifdef DEBUG printf("par_upper = %g\n", par_upper); #endif if (par > par_upper) { #ifdef DEBUG printf("set par to par_upper\n"); #endif par = par_upper; } else if (par < par_lower) { #ifdef DEBUG printf("set par to par_lower\n"); #endif par = par_lower; } if (par == 0) { par = gnorm / dxnorm; #ifdef DEBUG printf("set par to gnorm/dxnorm = %g\n", par); #endif } /* Beginning of iteration */ iteration: iter++; #ifdef DEBUG printf("lmpar iteration = %d\n", iter); #endif #ifdef BRIANSFIX /* Seems like this is described in the paper but not in the MINPACK code */ if (par < par_lower || par > par_upper) { par = GSL_MAX_DBL (0.001 * par_upper, sqrt(par_lower * par_upper)); } #endif /* Evaluate the function at the current value of par */ if (par == 0) { par = GSL_MAX_DBL (0.001 * par_upper, GSL_DBL_MIN); #ifdef DEBUG printf("par = 0, set par to = %g\n", par); #endif } /* Compute the least squares solution of [ R P x - Q^T f, sqrt(par) D x] for A = Q R P^T */ #ifdef DEBUG printf ("calling qrsolv with par = %g\n", par); #endif { double sqrt_par = sqrt(par); qrsolv (r, perm, sqrt_par, diag, qtf, x, sdiag, w); } dxnorm = scaled_enorm (diag, x); fp_old = fp; fp = dxnorm - delta; #ifdef DEBUG printf ("After qrsolv dxnorm = %g, delta = %g, fp = %g\n", dxnorm, delta, fp); printf ("sdiag = ") ; gsl_vector_fprintf(stdout, sdiag, "%g"); printf("\n"); printf ("x = ") ; gsl_vector_fprintf(stdout, x, "%g"); printf("\n"); printf ("r = ") ; gsl_matrix_fprintf(stdout, r, "%g"); printf("\nXXX\n"); #endif /* If the function is small enough, accept the current value of par */ if (fabs (fp) <= 0.1 * delta) goto line220; if (par_lower == 0 && fp <= fp_old && fp_old < 0) goto line220; /* Check for maximum number of iterations */ if (iter == 10) goto line220; /* Compute the Newton correction */ compute_newton_correction (r, sdiag, perm, x, dxnorm, diag, w); #ifdef DEBUG printf ("newton_correction = "); gsl_vector_fprintf(stdout, w, "%g"); printf("\n"); #endif { double wnorm = enorm (w); par_c = fp / (delta * wnorm * wnorm); } #ifdef DEBUG printf("fp = %g\n", fp); printf("par_lower = %g\n", par_lower); printf("par_upper = %g\n", par_upper); printf("par_c = %g\n", par_c); #endif /* Depending on the sign of the function, update par_lower or par_upper */ if (fp > 0) { if (par > par_lower) { par_lower = par; #ifdef DEBUG printf("fp > 0: set par_lower = par = %g\n", par); #endif } } else if (fp < 0) { if (par < par_upper) { #ifdef DEBUG printf("fp < 0: set par_upper = par = %g\n", par); #endif par_upper = par; } } /* Compute an improved estimate for par */ #ifdef DEBUG printf("improved estimate par = MAX(%g, %g) \n", par_lower, par+par_c); #endif par = GSL_MAX_DBL (par_lower, par + par_c); #ifdef DEBUG printf("improved estimate par = %g \n", par); #endif goto iteration; line220: #ifdef DEBUG printf("LEAVING lmpar, par = %g\n", par); #endif *par_inout = par; return GSL_SUCCESS; } gsl/multifit/test_meyer.c0000644000175000017500000000417513536674414014122 0ustar eddedd#define meyer_N 16 #define meyer_P 3 #define meyer_NTRIES 1 static double meyer_x0[meyer_P] = { 0.02, 4000.0, 250.0 }; static double meyer_epsrel = 1.0e-8; static double meyer_Y[meyer_N] = { 34780., 28610., 23650., 19630., 16370., 13720., 11540., 9744., 8261., 7030., 6005., 5147., 4427., 3820., 3307., 2872. }; static void meyer_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 8.794585517053883e+01; const double meyer_x[meyer_P] = { 5.609636471049458e-03, 6.181346346283188e+03, 3.452236346240292e+02 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < meyer_P; ++i) { gsl_test_rel(x[i], meyer_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int meyer_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < meyer_N; ++i) { double ti = 45.0 + 5.0*(i + 1.0); double yi = meyer_Y[i]; double fi = x1 * exp(x2 / (ti + x3)) - yi; gsl_vector_set(f, i, fi); } return GSL_SUCCESS; } static int meyer_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < meyer_N; ++i) { double ti = 45.0 + 5.0*(i + 1.0); double term1 = ti + x3; double term2 = exp(x2 / term1); gsl_matrix_set(J, i, 0, term2); gsl_matrix_set(J, i, 1, x1*term2/term1); gsl_matrix_set(J, i, 2, -x1*x2*term2/(term1*term1)); } return GSL_SUCCESS; } static gsl_multifit_function_fdf meyer_func = { &meyer_f, &meyer_df, NULL, meyer_N, meyer_P, NULL, 0, 0 }; static test_fdf_problem meyer_problem = { "meyer", meyer_x0, NULL, &meyer_epsrel, meyer_NTRIES, &meyer_checksol, &meyer_func }; gsl/multifit/lmniel.c0000644000175000017500000002505413536675317013224 0ustar eddedd/* multifit/lmniel.c * * Copyright (C) 2014 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #define SCALE 0 /* * This module contains an implementation of the Levenberg-Marquardt * algorithm for nonlinear optimization problems. This implementation * closely follows the following works: * * [1] H. B. Nielsen, K. Madsen, Introduction to Optimization and * Data Fitting, Informatics and Mathematical Modeling, * Technical University of Denmark (DTU), 2010. */ typedef struct { gsl_matrix *A; /* J^T J */ gsl_matrix *A_copy; /* copy of J^T J */ gsl_matrix *J; /* Jacobian J(x) */ gsl_vector *diag; /* D = diag(J^T J) */ gsl_vector *rhs; /* rhs vector = -g = -J^T f */ gsl_vector *x_trial; /* trial parameter vector */ gsl_vector *f_trial; /* trial function vector */ gsl_vector *work; /* workspace length p */ long nu; /* nu */ double mu; /* LM damping parameter mu */ double tau; /* initial scale factor for mu */ } lmniel_state_t; #include "lmmisc.c" #define LM_ONE_THIRD (0.333333333333333) static int lmniel_alloc (void *vstate, const size_t n, const size_t p); static void lmniel_free(void *vstate); static int lmniel_set(void *vstate, const gsl_vector * swts, gsl_multifit_function_fdf *fdf, gsl_vector *x, gsl_vector *f, gsl_vector *dx); static int lmniel_iterate(void *vstate, const gsl_vector *swts, gsl_multifit_function_fdf *fdf, gsl_vector *x, gsl_vector *f, gsl_vector *dx); static int lmniel_alloc (void *vstate, const size_t n, const size_t p) { lmniel_state_t *state = (lmniel_state_t *) vstate; state->A = gsl_matrix_alloc(p, p); if (state->A == NULL) { GSL_ERROR ("failed to allocate space for A", GSL_ENOMEM); } state->J = gsl_matrix_alloc(n, p); if (state->J == NULL) { GSL_ERROR ("failed to allocate space for J", GSL_ENOMEM); } state->diag = gsl_vector_alloc(p); if (state->diag == NULL) { GSL_ERROR ("failed to allocate space for diag", GSL_ENOMEM); } state->rhs = gsl_vector_alloc(p); if (state->rhs == NULL) { GSL_ERROR ("failed to allocate space for rhs", GSL_ENOMEM); } state->work = gsl_vector_alloc(p); if (state->work == NULL) { GSL_ERROR ("failed to allocate space for work", GSL_ENOMEM); } state->A_copy = gsl_matrix_alloc(p, p); if (state->A_copy == NULL) { GSL_ERROR ("failed to allocate space for A_copy", GSL_ENOMEM); } state->x_trial = gsl_vector_alloc(p); if (state->x_trial == NULL) { GSL_ERROR ("failed to allocate space for x_trial", GSL_ENOMEM); } state->f_trial = gsl_vector_alloc(n); if (state->f_trial == NULL) { GSL_ERROR ("failed to allocate space for f_trial", GSL_ENOMEM); } state->tau = 1.0e-3; return GSL_SUCCESS; } /* lmniel_alloc() */ static void lmniel_free(void *vstate) { lmniel_state_t *state = (lmniel_state_t *) vstate; if (state->A) gsl_matrix_free(state->A); if (state->J) gsl_matrix_free(state->J); if (state->diag) gsl_vector_free(state->diag); if (state->rhs) gsl_vector_free(state->rhs); if (state->work) gsl_vector_free(state->work); if (state->A_copy) gsl_matrix_free(state->A_copy); if (state->x_trial) gsl_vector_free(state->x_trial); if (state->f_trial) gsl_vector_free(state->f_trial); } /* lmniel_free() */ static int lmniel_set(void *vstate, const gsl_vector *swts, gsl_multifit_function_fdf *fdf, gsl_vector *x, gsl_vector *f, gsl_vector *dx) { int status; lmniel_state_t *state = (lmniel_state_t *) vstate; const size_t p = x->size; size_t i; /* initialize counters for function and Jacobian evaluations */ fdf->nevalf = 0; fdf->nevaldf = 0; /* evaluate function and Jacobian at x and apply weight transform */ status = gsl_multifit_eval_wf(fdf, x, swts, f); if (status) return status; if (fdf->df) status = gsl_multifit_eval_wdf(fdf, x, swts, state->J); else status = gsl_multifit_fdfsolver_dif_df(x, swts, fdf, f, state->J); if (status) return status; /* compute rhs = -J^T f */ gsl_blas_dgemv(CblasTrans, -1.0, state->J, f, 0.0, state->rhs); #if SCALE gsl_vector_set_zero(state->diag); #else gsl_vector_set_all(state->diag, 1.0); #endif /* set default parameters */ state->nu = 2; #if SCALE state->mu = state->tau; #else /* compute mu_0 = tau * max(diag(J^T J)) */ state->mu = -1.0; for (i = 0; i < p; ++i) { gsl_vector_view c = gsl_matrix_column(state->J, i); double result; /* (J^T J)_{ii} */ gsl_blas_ddot(&c.vector, &c.vector, &result); state->mu = GSL_MAX(state->mu, result); } state->mu *= state->tau; #endif return GSL_SUCCESS; } /* lmniel_set() */ /* lmniel_iterate() This function performs 1 iteration of the LM algorithm 6.18 from [1]. The algorithm is slightly modified to loop until we find an acceptable step dx, in order to guarantee that each function call contains a new input vector x. Args: vstate - lm workspace swts - data weights (NULL if unweighted) fdf - function and Jacobian pointers x - on input, current parameter vector on output, new parameter vector x + dx f - on input, f(x) on output, f(x + dx) dx - (output only) parameter step vector Notes: 1) On input, the following must be initialized in state: nu, mu, rhs, J 2) On output, the following are updated with the current iterates: nu, mu, rhs, J rhs needs to be set on each output, so that lmniel_gradient supplies the correct g = J^T f */ static int lmniel_iterate(void *vstate, const gsl_vector *swts, gsl_multifit_function_fdf *fdf, gsl_vector *x, gsl_vector *f, gsl_vector *dx) { int status; lmniel_state_t *state = (lmniel_state_t *) vstate; gsl_matrix *J = state->J; /* Jacobian J(x) */ gsl_matrix *A = state->A; /* J^T J */ gsl_vector *rhs = state->rhs; /* -g = -J^T f */ gsl_vector *x_trial = state->x_trial; /* trial x + dx */ gsl_vector *f_trial = state->f_trial; /* trial f(x + dx) */ gsl_vector *diag = state->diag; /* diag(D) */ double dF; /* F(x) - F(x + dx) */ double dL; /* L(0) - L(dx) */ int foundstep = 0; /* found step dx */ /* compute A = J^T J */ status = gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, J, 0.0, A); if (status) return status; /* copy lower triangle to upper */ gsl_matrix_transpose_tricpy(CblasLower, CblasUnit, A, A); #if SCALE lmniel_update_diag(J, diag); #endif /* loop until we find an acceptable step dx */ while (!foundstep) { /* solve (A + mu*I) dx = g */ status = lmniel_calc_dx(state->mu, A, rhs, dx, state); if (status) return status; /* compute x_trial = x + dx */ lmniel_trial_step(x, dx, x_trial); /* compute f(x + dx) */ status = gsl_multifit_eval_wf(fdf, x_trial, swts, f_trial); if (status) return status; /* compute dF = F(x) - F(x + dx) */ dF = lmniel_calc_dF(f, f_trial); /* compute dL = L(0) - L(dx) = dx^T (mu*dx - g) */ dL = lmniel_calc_dL(state->mu, diag, dx, rhs); /* check that rho = dF/dL > 0 */ if ((dL > 0.0) && (dF >= 0.0)) { /* reduction in error, step acceptable */ double tmp; /* update LM parameter mu */ tmp = 2.0 * (dF / dL) - 1.0; tmp = 1.0 - tmp*tmp*tmp; state->mu *= GSL_MAX(LM_ONE_THIRD, tmp); state->nu = 2; /* compute J <- J(x + dx) */ if (fdf->df) status = gsl_multifit_eval_wdf(fdf, x_trial, swts, J); else status = gsl_multifit_fdfsolver_dif_df(x_trial, swts, fdf, f_trial, J); if (status) return status; /* update x <- x + dx */ gsl_vector_memcpy(x, x_trial); /* update f <- f(x + dx) */ gsl_vector_memcpy(f, f_trial); /* compute new rhs = -J^T f */ gsl_blas_dgemv(CblasTrans, -1.0, J, f, 0.0, rhs); foundstep = 1; } else { long nu2; /* step did not reduce error, reject step */ state->mu *= (double) state->nu; nu2 = state->nu << 1; /* 2*nu */ if (nu2 <= state->nu) { gsl_vector_view d = gsl_matrix_diagonal(A); /* * nu has wrapped around / overflown, reset mu and nu * to original values and break to force another iteration */ /*GSL_ERROR("nu parameter has overflown", GSL_EOVRFLW);*/ state->nu = 2; state->mu = state->tau * gsl_vector_max(&d.vector); break; } state->nu = nu2; } } /* while (!foundstep) */ return GSL_SUCCESS; } /* lmniel_iterate() */ static int lmniel_gradient(void *vstate, gsl_vector * g) { lmniel_state_t *state = (lmniel_state_t *) vstate; gsl_vector_memcpy(g, state->rhs); gsl_vector_scale(g, -1.0); return GSL_SUCCESS; } static int lmniel_jac(void *vstate, gsl_matrix * J) { lmniel_state_t *state = (lmniel_state_t *) vstate; int s = gsl_matrix_memcpy(J, state->J); return s; } static const gsl_multifit_fdfsolver_type lmniel_type = { "lmniel", sizeof(lmniel_state_t), &lmniel_alloc, &lmniel_set, &lmniel_iterate, &lmniel_gradient, &lmniel_jac, &lmniel_free }; const gsl_multifit_fdfsolver_type *gsl_multifit_fdfsolver_lmniel = &lmniel_type; gsl/multifit/test_rosenbrock.c0000644000175000017500000000274413536674414015150 0ustar eddedd#define rosenbrock_N 2 #define rosenbrock_P 2 #define rosenbrock_NTRIES 4 static double rosenbrock_x0[rosenbrock_P] = { -1.2, 1.0 }; static double rosenbrock_epsrel = 1.0e-12; static void rosenbrock_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < rosenbrock_P; ++i) { gsl_test_rel(x[i], 1.0, epsrel, "%s/%s i=%zu", sname, pname, i); } } static int rosenbrock_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); gsl_vector_set(f, 0, 10.0 * (x2 - x1*x1)); gsl_vector_set(f, 1, 1.0 - x1); return GSL_SUCCESS; } static int rosenbrock_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); gsl_matrix_set(J, 0, 0, -20.0*x1); gsl_matrix_set(J, 0, 1, 10.0); gsl_matrix_set(J, 1, 0, -1.0); gsl_matrix_set(J, 1, 1, 0.0); return GSL_SUCCESS; } static gsl_multifit_function_fdf rosenbrock_func = { &rosenbrock_f, &rosenbrock_df, NULL, rosenbrock_N, rosenbrock_P, NULL, 0, 0 }; static test_fdf_problem rosenbrock_problem = { "rosenbrock", rosenbrock_x0, NULL, &rosenbrock_epsrel, rosenbrock_NTRIES, &rosenbrock_checksol, &rosenbrock_func }; gsl/multifit/test_thurber.c0000644000175000017500000000646713536674414014462 0ustar eddedd#define thurber_N 37 #define thurber_P 7 #define thurber_NTRIES 1 static double thurber_x0[thurber_P] = { 1000.0, 1000.0, 400.0, 40.0, 0.7, 0.3, 0.03 }; static double thurber_epsrel = 1.0e-6; static double thurber_sigma[thurber_P] = { 4.6647963344E+00, 3.9571156086E+01, 2.8698696102E+01, 5.5675370270E+00, 3.1333340687E-02, 1.4984928198E-02, 6.5842344623E-03 }; static double thurber_X[thurber_N] = { -3.067, -2.981, -2.921, -2.912, -2.840, -2.797, -2.702, -2.699, -2.633, -2.481, -2.363, -2.322, -1.501, -1.460, -1.274, -1.212, -1.100, -1.046, -0.915, -0.714, -0.566, -0.545, -0.400, -0.309, -0.109, -0.103, 0.010, 0.119, 0.377, 0.790, 0.963, 1.006, 1.115, 1.572, 1.841, 2.047, 2.200 }; static double thurber_F[thurber_N] = { 80.574, 84.248, 87.264, 87.195, 89.076, 89.608, 89.868, 90.101, 92.405, 95.854, 100.696, 101.060, 401.672, 390.724, 567.534, 635.316, 733.054, 759.087, 894.206, 990.785, 1090.109, 1080.914, 1122.643, 1178.351, 1260.531, 1273.514, 1288.339, 1327.543, 1353.863, 1414.509, 1425.208, 1421.384, 1442.962, 1464.350, 1468.705, 1447.894, 1457.628 }; static void thurber_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 5.6427082397E+03; const double thurber_x[thurber_P] = { 1.2881396800E+03, 1.4910792535E+03, 5.8323836877E+02, 7.5416644291E+01, 9.6629502864E-01, 3.9797285797E-01, 4.9727297349E-02 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < thurber_P; ++i) { gsl_test_rel(x[i], thurber_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int thurber_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[thurber_P]; size_t i; for (i = 0; i < thurber_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < thurber_N; i++) { double xi = thurber_X[i]; double yi; yi = b[0] + b[1]*xi + b[2]*xi*xi + b[3]*xi*xi*xi; yi /= 1.0 + b[4]*xi + b[5]*xi*xi + b[6]*xi*xi*xi; gsl_vector_set (f, i, yi - thurber_F[i]); } return GSL_SUCCESS; } static int thurber_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[thurber_P]; size_t i; for (i = 0; i < thurber_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < thurber_N; i++) { double xi = thurber_X[i]; double d, n, d_sq; n = b[0] + b[1]*xi + b[2]*xi*xi + b[3]*xi*xi*xi; d = 1.0 + b[4]*xi + b[5]*xi*xi + b[6]*xi*xi*xi; d_sq = d * d; gsl_matrix_set (df, i, 0, 1.0 / d); gsl_matrix_set (df, i, 1, xi / d); gsl_matrix_set (df, i, 2, (xi * xi) / d); gsl_matrix_set (df, i, 3, (xi * xi * xi) / d); gsl_matrix_set (df, i, 4, -xi * n / d_sq); gsl_matrix_set (df, i, 5, -xi * xi * n / d_sq); gsl_matrix_set (df, i, 6, -xi * xi * xi * n / d_sq); } return GSL_SUCCESS; } static gsl_multifit_function_fdf thurber_func = { &thurber_f, &thurber_df, NULL, thurber_N, thurber_P, NULL, 0, 0 }; static test_fdf_problem thurber_problem = { "nist-thurber", thurber_x0, thurber_sigma, &thurber_epsrel, thurber_NTRIES, &thurber_checksol, &thurber_func }; gsl/multifit/test_osborne.c0000644000175000017500000000460313536674414014444 0ustar eddedd#define osborne_N 33 #define osborne_P 5 #define osborne_NTRIES 3 static double osborne_x0[osborne_P] = { 0.5, 1.5, -1.0, 0.01, 0.02 }; static double osborne_epsrel = 1.0e-8; static double osborne_Y[osborne_N] = { 0.844, 0.908, 0.932, 0.936, 0.925, 0.908, 0.881, 0.850, 0.818, 0.784, 0.751, 0.718, 0.685, 0.658, 0.628, 0.603, 0.580, 0.558, 0.538, 0.522, 0.506, 0.490, 0.478, 0.467, 0.457, 0.448, 0.438, 0.431, 0.424, 0.420, 0.414, 0.411, 0.406 }; static void osborne_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { const double sumsq_exact = 5.464894697482687e-05; const double osborne_x[osborne_P] = { 3.754100521058740e-01, -99999.0, -99999.0, -99999.0, -99999.0 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); /* only the first model parameter is uniquely constrained */ gsl_test_rel(x[0], osborne_x[0], epsrel, "%s/%s i=0", sname, pname); } static int osborne_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); double x5 = gsl_vector_get(x, 4); size_t i; for (i = 0; i < osborne_N; ++i) { double ti = 10.0*i; double yi = osborne_Y[i]; double fi = yi - (x1 + x2*exp(-x4*ti) + x3*exp(-x5*ti)); gsl_vector_set(f, i, fi); } return GSL_SUCCESS; } static int osborne_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); double x5 = gsl_vector_get(x, 4); size_t i; for (i = 0; i < osborne_N; ++i) { double ti = 10.0*i; double term1 = exp(-x4*ti); double term2 = exp(-x5*ti); gsl_matrix_set(J, i, 0, -1.0); gsl_matrix_set(J, i, 1, -term1); gsl_matrix_set(J, i, 2, -term2); gsl_matrix_set(J, i, 3, ti*x2*term1); gsl_matrix_set(J, i, 4, ti*x3*term2); } return GSL_SUCCESS; } static gsl_multifit_function_fdf osborne_func = { &osborne_f, &osborne_df, NULL, osborne_N, osborne_P, NULL, 0, 0 }; static test_fdf_problem osborne_problem = { "osborne", osborne_x0, NULL, &osborne_epsrel, osborne_NTRIES, &osborne_checksol, &osborne_func }; gsl/multifit/test_biggs.c0000644000175000017500000000463113536674414014071 0ustar eddedd#define biggs_N 6 /* >= p */ #define biggs_P 6 #define biggs_NTRIES 2 static double biggs_x0[biggs_P] = { 1.0, 2.0, 1.0, 1.0, 1.0, 1.0 }; static double biggs_epsrel = 1.0e-9; static void biggs_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { const double sumsq_exact = 0.0; const double biggs_x[biggs_P] = { 1.0, 10.0, 1.0, 5.0, 4.0, 3.0 }; const double norm_exact = 12.3288280059380; gsl_vector_const_view v = gsl_vector_const_view_array(biggs_x, biggs_P); double norm = gsl_blas_dnrm2(&v.vector); gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); /* * the solution vector is not unique due to permutations, so test * the norm instead of individual elements */ gsl_test_rel(norm, norm_exact, epsrel, "%s/%s norm", sname, pname); } static int biggs_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); double x5 = gsl_vector_get(x, 4); double x6 = gsl_vector_get(x, 5); size_t i; for (i = 0; i < biggs_N; ++i) { double ti = 0.1 * (i + 1.0); double yi = exp(-ti) - 5*exp(-10*ti) + 3*exp(-4*ti); double fi = x3*exp(-ti*x1) - x4*exp(-ti*x2) + x6*exp(-ti*x5) - yi; gsl_vector_set(f, i, fi); } return GSL_SUCCESS; } static int biggs_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); double x5 = gsl_vector_get(x, 4); double x6 = gsl_vector_get(x, 5); size_t i; for (i = 0; i < biggs_N; ++i) { double ti = 0.1 * (i + 1.0); gsl_matrix_set(J, i, 0, -ti*x3*exp(-ti*x1)); gsl_matrix_set(J, i, 1, ti*x4*exp(-ti*x2)); gsl_matrix_set(J, i, 2, exp(-ti*x1)); gsl_matrix_set(J, i, 3, -exp(-ti*x2)); gsl_matrix_set(J, i, 4, -ti*x6*exp(-ti*x5)); gsl_matrix_set(J, i, 5, exp(-ti*x5)); } return GSL_SUCCESS; } static gsl_multifit_function_fdf biggs_func = { &biggs_f, &biggs_df, NULL, biggs_N, biggs_P, NULL, 0, 0 }; static test_fdf_problem biggs_problem = { "biggs", biggs_x0, NULL, &biggs_epsrel, biggs_NTRIES, &biggs_checksol, &biggs_func }; gsl/multifit/test_filip.c0000644000175000017500000002603713536674414014105 0ustar eddeddsize_t filip_n = 82; size_t filip_p = 11; double filip_x[] = { -6.860120914, -4.324130045, -4.358625055, -4.358426747, -6.955852379, -6.661145254, -6.355462942, -6.118102026, -7.115148017, -6.815308569, -6.519993057, -6.204119983, -5.853871964, -6.109523091, -5.79832982, -5.482672118, -5.171791386, -4.851705903, -4.517126416, -4.143573228, -3.709075441, -3.499489089, -6.300769497, -5.953504836, -5.642065153, -5.031376979, -4.680685696, -4.329846955, -3.928486195, -8.56735134, -8.363211311, -8.107682739, -7.823908741, -7.522878745, -7.218819279, -6.920818754, -6.628932138, -6.323946875, -5.991399828, -8.781464495, -8.663140179, -8.473531488, -8.247337057, -7.971428747, -7.676129393, -7.352812702, -7.072065318, -6.774174009, -6.478861916, -6.159517513, -6.835647144, -6.53165267, -6.224098421, -5.910094889, -5.598599459, -5.290645224, -4.974284616, -4.64454848, -4.290560426, -3.885055584, -3.408378962, -3.13200249, -8.726767166, -8.66695597, -8.511026475, -8.165388579, -7.886056648, -7.588043762, -7.283412422, -6.995678626, -6.691862621, -6.392544977, -6.067374056, -6.684029655, -6.378719832, -6.065855188, -5.752272167, -5.132414673, -4.811352704, -4.098269308, -3.66174277, -3.2644011}; double filip_y[] = { 0.8116, 0.9072, 0.9052, 0.9039, 0.8053, 0.8377, 0.8667, 0.8809, 0.7975, 0.8162, 0.8515, 0.8766, 0.8885, 0.8859, 0.8959, 0.8913, 0.8959, 0.8971, 0.9021, 0.909, 0.9139, 0.9199, 0.8692, 0.8872, 0.89, 0.891, 0.8977, 0.9035, 0.9078, 0.7675, 0.7705, 0.7713, 0.7736, 0.7775, 0.7841, 0.7971, 0.8329, 0.8641, 0.8804, 0.7668, 0.7633, 0.7678, 0.7697, 0.77, 0.7749, 0.7796, 0.7897, 0.8131, 0.8498, 0.8741, 0.8061, 0.846, 0.8751, 0.8856, 0.8919, 0.8934, 0.894, 0.8957, 0.9047, 0.9129, 0.9209, 0.9219, 0.7739, 0.7681, 0.7665, 0.7703, 0.7702, 0.7761, 0.7809, 0.7961, 0.8253, 0.8602, 0.8809, 0.8301, 0.8664, 0.8834, 0.8898, 0.8964, 0.8963, 0.9074, 0.9119, 0.9228 } ; static int test_filip_results(const char *str, const gsl_vector *c, const gsl_vector *expected_c, const gsl_vector *cov_diag, const gsl_vector *expected_sd, const double chisq, const double chisq_res, const double expected_chisq) { size_t i; /* test coefficient vector */ for (i = 0; i < filip_p; ++i) { gsl_test_rel (gsl_vector_get(c,i), gsl_vector_get(expected_c, i), 1.0e-7, "%s c[%zu]", str, i) ; if (cov_diag && expected_sd) { gsl_test_rel (sqrt(gsl_vector_get(cov_diag, i)), gsl_vector_get(expected_sd, i), 1e-7, "%s cov[%zu,%zu]", str, i, i); } } gsl_test_rel (chisq, expected_chisq, 1.0e-7, "%s chisq", str); gsl_test_rel (chisq_res, expected_chisq, 1.0e-7, "%s chisq residuals", str); return GSL_SUCCESS; } void test_filip () { size_t i, j; gsl_multifit_linear_workspace * work = gsl_multifit_linear_alloc (filip_n, filip_p); gsl_multifit_robust_workspace * work_rob = gsl_multifit_robust_alloc (gsl_multifit_robust_ols, filip_n, filip_p); gsl_matrix * X = gsl_matrix_alloc (filip_n, filip_p); gsl_vector_view y = gsl_vector_view_array (filip_y, filip_n); gsl_vector * c = gsl_vector_alloc (filip_p); gsl_matrix * cov = gsl_matrix_alloc (filip_p, filip_p); gsl_vector * r = gsl_vector_alloc(filip_n); double chisq, chisq_res; double expected_c[11] = { -1467.48961422980, -2772.17959193342, -2316.37108160893, -1127.97394098372, -354.478233703349, -75.1242017393757, -10.8753180355343, -1.06221498588947, -0.670191154593408E-01, -0.246781078275479E-02, -0.402962525080404E-04 }; double expected_sd[11] = { 298.084530995537, 559.779865474950, 466.477572127796, 227.204274477751, 71.6478660875927, 15.2897178747400, 2.23691159816033, 0.221624321934227, 0.142363763154724E-01, 0.535617408889821E-03, 0.896632837373868E-05 }; double expected_chisq = 0.795851382172941E-03; gsl_vector_view diag = gsl_matrix_diagonal (cov); gsl_vector_view exp_c = gsl_vector_view_array(expected_c, filip_p); gsl_vector_view exp_sd = gsl_vector_view_array(expected_sd, filip_p); for (i = 0 ; i < filip_n; i++) { for (j = 0; j < filip_p; j++) { gsl_matrix_set(X, i, j, pow(filip_x[i], j)); } } /* test unweighted least squares */ gsl_multifit_linear (X, &y.vector, c, cov, &chisq, work); gsl_multifit_linear_residuals(X, &y.vector, c, r); gsl_blas_ddot(r, r, &chisq_res); test_filip_results("filip gsl_multifit_linear", c, &exp_c.vector, &diag.vector, &exp_sd.vector, chisq, chisq_res, expected_chisq); /* test robust least squares */ gsl_multifit_robust (X, &y.vector, c, cov, work_rob); test_filip_results("filip gsl_multifit_robust", c, &exp_c.vector, &diag.vector, &exp_sd.vector, 1.0, 1.0, 1.0); /* test weighted least squares */ { gsl_vector * w = gsl_vector_alloc (filip_n); /* computed using GNU Calc */ double expected_cov[11][11] ={ { 7.9269341767252183262588583867942e9, 1.4880416622254098343441063389706e10, 1.2385811858111487905481427591107e10, 6.0210784406215266653697715794241e9, 1.8936652526181982747116667336389e9, 4.0274900618493109653998118587093e8, 5.8685468011819735806180092394606e7, 5.7873451475721689084330083708901e6, 3.6982719848703747920663262917032e5, 1.3834818802741350637527054170891e4, 2.301758578713219280719633494302e2 }, { 1.4880416622254098334697515488559e10, 2.7955091668548290835529555438088e10, 2.3286604504243362691678565997033e10, 1.132895006796272983689297219686e10, 3.5657281653312473123348357644683e9, 7.5893300392314445528176646366087e8, 1.1066654886143524811964131660002e8, 1.0921285448484575110763947787775e7, 6.9838139975394769253353547606971e5, 2.6143091775349597218939272614126e4, 4.3523386330348588614289505633539e2 }, { 1.2385811858111487890788272968677e10, 2.3286604504243362677757802422747e10, 1.9412787917766676553608636489674e10, 9.4516246492862131849077729250098e9, 2.9771226694709917550143152097252e9, 6.3413035086730038062129508949859e8, 9.2536164488309401636559552742339e7, 9.1386304643423333815338760248027e6, 5.8479478338916429826337004060941e5, 2.1905933113294737443808429764554e4, 3.6493161325305557266196635180155e2 }, { 6.0210784406215266545770691532365e9, 1.1328950067962729823273441573365e10, 9.4516246492862131792040001429636e9, 4.6053152992000107509329772255094e9, 1.4517147860312147098138030287038e9, 3.0944988323328589376402579060072e8, 4.5190223822292688669369522708712e7, 4.4660958693678497534529855690752e6, 2.8599340736122198213681258676423e5, 1.0720394998549386596165641244705e4, 1.7870937745661967319298031044424e2 }, { 1.8936652526181982701620450132636e9, 3.5657281653312473058825073094524e9, 2.9771226694709917514149924058297e9, 1.451714786031214708936087401632e9, 4.5796563896564815123074920050827e8, 9.7693972414561515534525103622773e7, 1.427717861635658545863942948444e7, 1.4120161287735817621354292900338e6, 9.0484361228623960006818614875557e4, 3.394106783764852373199087455398e3, 5.6617406468519495376287407526295e1 }, { 4.0274900618493109532650887473599e8, 7.589330039231444534478894935778e8, 6.3413035086730037947153564986653e8, 3.09449883233285893390542947998e8, 9.7693972414561515475770399055121e7, 2.0855726248311948992114244257719e7, 3.0501263034740400533872858749566e6, 3.0187475839310308153394428784224e5, 1.9358204633534233524477930175632e4, 7.2662989867560017077361942813911e2, 1.2129002231061036467607394277965e1 }, { 5.868546801181973559370854830868e7, 1.1066654886143524778548044386795e8, 9.2536164488309401413296494869777e7, 4.5190223822292688587853853162072e7, 1.4277178616356585441556046753562e7, 3.050126303474040051574715592746e6, 4.4639982579046340884744460329946e5, 4.4212093985989836047285007760238e4, 2.8371395028774486687625333589972e3, 1.0656694507620102300567296504381e2, 1.7799982046359973175080475654123e0 }, { 5.7873451475721688839974153925406e6, 1.0921285448484575071271480643397e7, 9.1386304643423333540728480344578e6, 4.4660958693678497427674903565664e6, 1.4120161287735817596182229182587e6, 3.0187475839310308117812257613082e5, 4.4212093985989836021482392757677e4, 4.3818874017028389517560906916315e3, 2.813828775753142855163154605027e2, 1.0576188138416671883232607188969e1, 1.7676976288918295012452853715408e-1 }, { 3.6982719848703747742568351456818e5, 6.9838139975394768959780068745979e5, 5.8479478338916429616547638954781e5, 2.8599340736122198128717796825489e5, 9.0484361228623959793493985226792e4, 1.9358204633534233490579641064343e4, 2.8371395028774486654873647731797e3, 2.8138287757531428535592907878017e2, 1.8081118503579798222896804627964e1, 6.8005074291434681866415478598732e-1, 1.1373581557749643543869665860719e-2 }, { 1.3834818802741350562839757244708e4, 2.614309177534959709397445440919e4, 2.1905933113294737352721470167247e4, 1.0720394998549386558251721913182e4, 3.3941067837648523632905604575131e3, 7.2662989867560016909534954790835e2, 1.0656694507620102282337905013451e2, 1.0576188138416671871337685672492e1, 6.8005074291434681828743281967838e-1, 2.5593857187900736057022477529078e-2, 4.2831487599116264442963102045936e-4 }, { 2.3017585787132192669801658674163e2, 4.3523386330348588381716460685124e2, 3.6493161325305557094116270974735e2, 1.7870937745661967246233792737255e2, 5.6617406468519495180024059284629e1, 1.2129002231061036433003571679329e1, 1.7799982046359973135014027410646e0, 1.7676976288918294983059118597214e-1, 1.137358155774964353146460100337e-2, 4.283148759911626442000316269063e-4, 7.172253875245080423800933453952e-6 } }; gsl_vector_set_all (w, 1.0); gsl_multifit_wlinear (X, w, &y.vector, c, cov, &chisq, work); gsl_multifit_linear_residuals(X, &y.vector, c, r); gsl_blas_ddot(r, r, &chisq_res); test_filip_results("filip gsl_multifit_wlinear", c, &exp_c.vector, NULL, NULL, chisq, chisq_res, expected_chisq); for (i = 0; i < filip_p; i++) { for (j = 0; j < filip_p; j++) { gsl_test_rel (gsl_matrix_get(cov,i,j), expected_cov[i][j], 1e-6, "filip gsl_multifit_wlinear cov(%d,%d)", i, j) ; } } gsl_vector_free(w); } gsl_vector_free(c); gsl_matrix_free(cov); gsl_matrix_free(X); gsl_vector_free(r); gsl_multifit_linear_free (work); gsl_multifit_robust_free (work_rob); } gsl/multifit/test_linear.c0000644000175000017500000000373313536674414014252 0ustar eddedd/* multifit/test_linear.c * * Copyright (C) 2007, 2013 Brian Gough, Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void test_random_vector(gsl_vector *v, const gsl_rng *r, const double lower, const double upper) { size_t i; size_t N = v->size; for (i = 0; i < N; ++i) { gsl_vector_set(v, i, gsl_rng_uniform(r) * (upper - lower) + lower); } } static void test_random_matrix(gsl_matrix *m, const gsl_rng *r, const double lower, const double upper) { size_t i, j; size_t M = m->size1; size_t N = m->size2; for (i = 0; i < M; ++i) { for (j = 0; j < N; ++j) { gsl_matrix_set(m, i, j, gsl_rng_uniform(r) * (upper - lower) + lower); } } } static void test_random_vector_noise(const gsl_rng *r, gsl_vector *y) { size_t i; for (i = 0; i < y->size; ++i) { double *ptr = gsl_vector_ptr(y, i); *ptr += 1.0e-3 * gsl_rng_uniform(r); } } #include "test_longley.c" #include "test_filip.c" #include "test_pontius.c" #include "test_estimator.c" #include "test_reg.c" #include "test_shaw.c" /* test linear regression */ void test_linear(void) { test_longley(); test_filip(); test_pontius(); test_estimator(); test_reg(); test_shaw(); } gsl/multifit/test_gaussian.c0000644000175000017500000000436013536674414014607 0ustar eddedd#define gaussian_N 15 #define gaussian_P 3 #define gaussian_NTRIES 2 static double gaussian_x0[gaussian_P] = { 0.4, 1.0, 0.0 }; static double gaussian_epsrel = 1.0e-10; static double gaussian_Y[gaussian_N] = { 0.0009, 0.0044, 0.0175, 0.0540, 0.1295, 0.2420, 0.3521, 0.3989, 0.3521, 0.2420, 0.1295, 0.0540, 0.0175, 0.0044, 0.0009 }; static void gaussian_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 1.12793276961871985e-08; const double gaussian_x[gaussian_P] = { 0.398956137838762825, 1.00001908448786647, 0.0 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < gaussian_P; ++i) { gsl_test_rel(x[i], gaussian_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int gaussian_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < gaussian_N; ++i) { double ti = (7.0 - i) / 2.0; double yi = gaussian_Y[i]; double term = ti - x3; double fi = x1 * exp(-x2*term*term/2.0) - yi; gsl_vector_set(f, i, fi); } return GSL_SUCCESS; } static int gaussian_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < gaussian_N; ++i) { double ti = (7.0 - i) / 2.0; double term1 = ti - x3; double term2 = exp(-x2*term1*term1/2.0); gsl_matrix_set(J, i, 0, term2); gsl_matrix_set(J, i, 1, -0.5*x1*term2*term1*term1); gsl_matrix_set(J, i, 2, x1*x2*term1*term2); } return GSL_SUCCESS; } static gsl_multifit_function_fdf gaussian_func = { &gaussian_f, &gaussian_df, NULL, gaussian_N, gaussian_P, NULL, 0, 0 }; static test_fdf_problem gaussian_problem = { "gaussian", gaussian_x0, NULL, &gaussian_epsrel, gaussian_NTRIES, &gaussian_checksol, &gaussian_func }; gsl/multifit/fsolver.c0000644000175000017500000001046513536674414013421 0ustar eddedd/* multifit/fsolver.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include gsl_multifit_fsolver * gsl_multifit_fsolver_alloc (const gsl_multifit_fsolver_type * T, size_t n, size_t p) { int status; gsl_multifit_fsolver * s; if (n < p) { GSL_ERROR_VAL ("insufficient data points, n < p", GSL_EINVAL, 0); } s = (gsl_multifit_fsolver *) malloc (sizeof (gsl_multifit_fsolver)); if (s == 0) { GSL_ERROR_VAL ("failed to allocate space for multifit solver struct", GSL_ENOMEM, 0); } s->x = gsl_vector_calloc (p); if (s->x == 0) { free (s); GSL_ERROR_VAL ("failed to allocate space for x", GSL_ENOMEM, 0); } s->f = gsl_vector_calloc (n); if (s->f == 0) { gsl_vector_free (s->x); free (s); GSL_ERROR_VAL ("failed to allocate space for f", GSL_ENOMEM, 0); } s->dx = gsl_vector_calloc (p); if (s->dx == 0) { gsl_vector_free (s->x); gsl_vector_free (s->f); free (s); GSL_ERROR_VAL ("failed to allocate space for dx", GSL_ENOMEM, 0); } s->state = malloc (T->size); if (s->state == 0) { gsl_vector_free (s->dx); gsl_vector_free (s->x); gsl_vector_free (s->f); free (s); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for multifit solver state", GSL_ENOMEM, 0); } s->type = T ; status = (s->type->alloc)(s->state, n, p); if (status != GSL_SUCCESS) { (s->type->free)(s->state); free (s->state); gsl_vector_free (s->dx); gsl_vector_free (s->x); gsl_vector_free (s->f); free (s); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to set solver", status, 0); } s->function = NULL; return s; } int gsl_multifit_fsolver_set (gsl_multifit_fsolver * s, gsl_multifit_function * f, const gsl_vector * x) { if (s->f->size != f->n) { GSL_ERROR ("function size does not match solver", GSL_EBADLEN); } if (s->x->size != x->size) { GSL_ERROR ("vector length does not match solver", GSL_EBADLEN); } s->function = f; gsl_vector_memcpy(s->x,x); return (s->type->set) (s->state, s->function, s->x, s->f, s->dx); } int gsl_multifit_fsolver_iterate (gsl_multifit_fsolver * s) { return (s->type->iterate) (s->state, s->function, s->x, s->f, s->dx); } int gsl_multifit_fsolver_driver (gsl_multifit_fsolver * s, const size_t maxiter, const double epsabs, const double epsrel) { int status; size_t iter = 0; do { status = gsl_multifit_fsolver_iterate (s); if (status) break; /* test for convergence */ status = gsl_multifit_test_delta (s->dx, s->x, epsabs, epsrel); } while (status == GSL_CONTINUE && ++iter < maxiter); return status; } /* gsl_multifit_fdfsolver_driver() */ void gsl_multifit_fsolver_free (gsl_multifit_fsolver * s) { RETURN_IF_NULL (s); (s->type->free) (s->state); free (s->state); gsl_vector_free (s->dx); gsl_vector_free (s->x); gsl_vector_free (s->f); free (s); } const char * gsl_multifit_fsolver_name (const gsl_multifit_fsolver * s) { return s->type->name; } gsl_vector * gsl_multifit_fsolver_position (const gsl_multifit_fsolver * s) { return s->x; } gsl/multifit/TODO0000644000175000017500000000116213536674414012257 0ustar eddedd# -*- org -*- #+CATEGORY: multifit The following would also be nice additions to the multifit function suite (see MS Excel regression output for example): 1. Produce the correlation coefficient (r) and other statistics. 2. Allow fit variable weighting (not observation weighting). 3. Allow for principal factor computations. The following features should be added to the nonlinear least squares routines: 1. Support for constraints 2. robust nonlinear least squares and robust ridge regression 3. covariance matrices for ridge regression 4. min_workspace_p is dynamically allocated in gsl_multifit_linear_gcv_min - fix gsl/multifit/convergence.c0000644000175000017500000000756513536674414014246 0ustar eddedd/* multifit/convergence.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include static double scaled_infnorm(const gsl_vector *x, const gsl_vector *g); /* gsl_multifit_fdfsolver_test() Convergence tests for nonlinear minimization (1) |dx_i| <= xtol * (1 + |x_i|) for all i (2) || g .* x ||_inf <= gtol ||f||^2 (3) ||f(x+dx) - f(x)|| <= ftol * max(||f(x)||, 1) Inputs: s - fdfsolver xtol - tolerance for step size gtol - tolerance for gradient vector ftol - tolerance for residual vector info - (output) 1 - stopped by small x step 2 - stopped by small gradient 3 - stopped by small residual vector change */ int gsl_multifit_fdfsolver_test (const gsl_multifit_fdfsolver * s, const double xtol, const double gtol, const double ftol, int *info) { int status; double gnorm, fnorm, phi; *info = 0; status = gsl_multifit_test_delta(s->dx, s->x, xtol*xtol, xtol); if (status == GSL_SUCCESS) { *info = 1; return GSL_SUCCESS; } /* compute gradient g = J^T f */ (s->type->gradient) (s->state, s->g); /* compute gnorm = max_i( g_i * max(x_i, 1) ) */ gnorm = scaled_infnorm(s->x, s->g); /* compute fnorm = ||f|| */ fnorm = gsl_blas_dnrm2(s->f); phi = 0.5 * fnorm * fnorm; if (gnorm <= gtol * GSL_MAX(phi, 1.0)) { *info = 2; return GSL_SUCCESS; } #if 0 if (dfnorm <= ftol * GSL_MAX(fnorm, 1.0)) { *info = 3; return GSL_SUCCESS; } #endif return GSL_CONTINUE; } /* gsl_multifit_fdfsolver_test() */ int gsl_multifit_test_delta (const gsl_vector * dx, const gsl_vector * x, double epsabs, double epsrel) { size_t i; int ok = 1; const size_t n = x->size ; if (epsrel < 0.0) { GSL_ERROR ("relative tolerance is negative", GSL_EBADTOL); } for (i = 0 ; i < n ; i++) { double xi = gsl_vector_get(x,i); double dxi = gsl_vector_get(dx,i); double tolerance = epsabs + epsrel * fabs(xi) ; if (fabs(dxi) < tolerance) { ok = 1; } else { ok = 0; break; } } if (ok) return GSL_SUCCESS ; return GSL_CONTINUE; } int gsl_multifit_test_gradient (const gsl_vector * g, double epsabs) { size_t i; double residual = 0; const size_t n = g->size; if (epsabs < 0.0) { GSL_ERROR ("absolute tolerance is negative", GSL_EBADTOL); } for (i = 0 ; i < n ; i++) { double gi = gsl_vector_get(g, i); residual += fabs(gi); } if (residual < epsabs) { return GSL_SUCCESS; } return GSL_CONTINUE ; } static double scaled_infnorm(const gsl_vector *x, const gsl_vector *g) { const size_t n = x->size; size_t i; double norm = 0.0; for (i = 0; i < n; ++i) { double xi = GSL_MAX(gsl_vector_get(x, i), 1.0); double gi = gsl_vector_get(g, i); double tmp = fabs(xi * gi); if (tmp > norm) norm = tmp; } return norm; } gsl/multifit/covar.c0000644000175000017500000001140713536674414013050 0ustar eddedd/* multifit/covar.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include /* Compute the covariance matrix cov = inv (J^T J) by QRP^T decomposition of J */ int gsl_multifit_covar (const gsl_matrix * J, const double epsrel, gsl_matrix * covar) { int status; gsl_matrix * r; gsl_vector * tau; gsl_vector * norm; gsl_permutation * perm; const size_t m = J->size1; const size_t n = J->size2; if (m < n) { GSL_ERROR ("Jacobian be rectangular M x N with M >= N", GSL_EBADLEN); } if (covar->size1 != covar->size2 || covar->size1 != n) { GSL_ERROR ("covariance matrix must be square and match second dimension of jacobian", GSL_EBADLEN); } r = gsl_matrix_alloc (m, n); tau = gsl_vector_alloc (n); perm = gsl_permutation_alloc (n) ; norm = gsl_vector_alloc (n) ; { int signum = 0; gsl_matrix_memcpy (r, J); gsl_linalg_QRPT_decomp (r, tau, perm, &signum, norm); } status = gsl_multifit_covar_QRPT(r, perm, epsrel, covar); gsl_matrix_free (r); gsl_permutation_free (perm); gsl_vector_free (tau); gsl_vector_free (norm); return status; } int gsl_multifit_covar_QRPT (gsl_matrix * r, gsl_permutation * perm, const double epsrel, gsl_matrix * covar) { /* Form the inverse of R in the full upper triangle of R */ double tolr = epsrel * fabs(gsl_matrix_get(r, 0, 0)); const size_t n = r->size2; size_t i, j, k; size_t kmax = 0; for (k = 0 ; k < n ; k++) { double rkk = gsl_matrix_get(r, k, k); if (fabs(rkk) <= tolr) { break; } gsl_matrix_set(r, k, k, 1.0/rkk); for (j = 0; j < k ; j++) { double t = gsl_matrix_get(r, j, k) / rkk; gsl_matrix_set (r, j, k, 0.0); for (i = 0; i <= j; i++) { double rik = gsl_matrix_get (r, i, k); double rij = gsl_matrix_get (r, i, j); gsl_matrix_set (r, i, k, rik - t * rij); } } kmax = k; } /* Form the full upper triangle of the inverse of R^T R in the full upper triangle of R */ for (k = 0; k <= kmax ; k++) { for (j = 0; j < k; j++) { double rjk = gsl_matrix_get (r, j, k); for (i = 0; i <= j ; i++) { double rij = gsl_matrix_get (r, i, j); double rik = gsl_matrix_get (r, i, k); gsl_matrix_set (r, i, j, rij + rjk * rik); } } { double t = gsl_matrix_get (r, k, k); for (i = 0; i <= k; i++) { double rik = gsl_matrix_get (r, i, k); gsl_matrix_set (r, i, k, t * rik); }; } } /* Form the full lower triangle of the covariance matrix in the strict lower triangle of R and in w */ for (j = 0 ; j < n ; j++) { size_t pj = gsl_permutation_get (perm, j); for (i = 0; i <= j; i++) { size_t pi = gsl_permutation_get (perm, i); double rij; if (j > kmax) { gsl_matrix_set (r, i, j, 0.0); rij = 0.0 ; } else { rij = gsl_matrix_get (r, i, j); } if (pi > pj) { gsl_matrix_set (r, pi, pj, rij); } else if (pi < pj) { gsl_matrix_set (r, pj, pi, rij); } } { double rjj = gsl_matrix_get (r, j, j); gsl_matrix_set (covar, pj, pj, rjj); } } /* symmetrize the covariance matrix */ for (j = 0 ; j < n ; j++) { for (i = 0; i < j ; i++) { double rji = gsl_matrix_get (r, j, i); gsl_matrix_set (covar, j, i, rji); gsl_matrix_set (covar, i, j, rji); } } return GSL_SUCCESS; } /* gsl_multifit_covar_QRPT() */ gsl/multifit/test_brown3.c0000644000175000017500000000304313536674414014204 0ustar eddedd#define brown3_N 3 #define brown3_P 2 #define brown3_NTRIES 3 static double brown3_x0[brown3_P] = { 1.0, 1.0 }; static double brown3_epsrel = 1.0e-12; static void brown3_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; const double brown3_x[brown3_P] = { 1.0e6, 2.0e-6 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < brown3_P; ++i) { gsl_test_rel(x[i], brown3_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int brown3_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); gsl_vector_set(f, 0, x1 - 1.0e6); gsl_vector_set(f, 1, x2 - 2.0e-6); gsl_vector_set(f, 2, x1*x2 - 2.0); return GSL_SUCCESS; } static int brown3_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); gsl_matrix_set_zero(J); gsl_matrix_set(J, 0, 0, 1.0); gsl_matrix_set(J, 1, 1, 1.0); gsl_matrix_set(J, 2, 0, x2); gsl_matrix_set(J, 2, 1, x1); return GSL_SUCCESS; } static gsl_multifit_function_fdf brown3_func = { &brown3_f, &brown3_df, NULL, brown3_N, brown3_P, NULL, 0, 0 }; static test_fdf_problem brown3_problem = { "brown_badly_scaled", brown3_x0, NULL, &brown3_epsrel, brown3_NTRIES, &brown3_checksol, &brown3_func }; gsl/multifit/gcv.c0000644000175000017500000002516213536674414012520 0ustar eddedd/* multifit/gcv.c * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * References: * * [1] P. C. Hansen, "Discrete Inverse Problems: Insight and Algorithms," * SIAM Press, 2010. */ #include #include #include #include #include #include #include #include typedef struct { const gsl_vector * S; const gsl_vector * UTy; double delta0; size_t np; gsl_vector * workp; } gcv_params; static double gcv_func(double lambda, void * params); /* gsl_multifit_linear_gcv_init() Initialize Generalized Cross Validation parameters Inputs: y - right hand side vector reg_param - (output) regularization parameters UTy - (output) U^T y delta0 - (output) delta0 work - workspace */ int gsl_multifit_linear_gcv_init(const gsl_vector * y, gsl_vector * reg_param, gsl_vector * UTy, double * delta0, gsl_multifit_linear_workspace * work) { const size_t n = y->size; if (n != work->n) { GSL_ERROR("y vector does not match workspace", GSL_EBADLEN); } else if (UTy->size != work->p) { GSL_ERROR ("UTy vector does not match workspace", GSL_EBADLEN); } else { const size_t p = work->p; gsl_matrix_view U = gsl_matrix_submatrix(work->A, 0, 0, n, p); gsl_vector_view S = gsl_vector_subvector(work->S, 0, p); const double smax = gsl_vector_get(&S.vector, 0); const double smin = gsl_vector_get(&S.vector, p - 1); double dr; /* residual error from projection */ double normy = gsl_blas_dnrm2(y); double normUTy; /* compute projection UTy = U^T y */ gsl_blas_dgemv (CblasTrans, 1.0, &U.matrix, y, 0.0, UTy); normUTy = gsl_blas_dnrm2(UTy); /* dr = ||y||^2 - ||U^T y||^2 */ dr = (normy + normUTy) * (normy - normUTy); /* calculate regularization parameters */ gsl_multifit_linear_lreg(smin, smax, reg_param); if (n > p && dr > 0.0) *delta0 = dr; else *delta0 = 0.0; return GSL_SUCCESS; } } /* gsl_multifit_linear_gcv_curve() Calculate Generalized Cross Validation curve for a set of regularization parameters Inputs: reg_param - regularization parameters UTy - U^T y vector, size p delta0 - delta0 G - (output) GCV curve values work - workspace */ int gsl_multifit_linear_gcv_curve(const gsl_vector * reg_param, const gsl_vector * UTy, const double delta0, gsl_vector * G, gsl_multifit_linear_workspace * work) { const size_t n = work->n; const size_t p = work->p; const size_t N = reg_param->size; /* number of points on GCV curve */ if (UTy->size != p) { GSL_ERROR("UTy vector does not match workspace", GSL_EBADLEN); } else if (G->size != N) { GSL_ERROR ("size of reg_param and G vectors do not match", GSL_EBADLEN); } else { size_t i; gsl_vector_view S = gsl_vector_subvector(work->S, 0, p); gsl_vector_view workp = gsl_matrix_subcolumn(work->QSI, 0, 0, p); gcv_params params; params.S = &S.vector; params.UTy = UTy; params.delta0 = delta0; params.np = n - p; params.workp = &workp.vector; for (i = 0; i < N; ++i) { double lambdai = gsl_vector_get(reg_param, i); double Gi = gcv_func(lambdai, ¶ms); gsl_vector_set(G, i, Gi); } return GSL_SUCCESS; } } /* gsl_multifit_linear_gcv_min() Find regularization parameter which minimizes GCV curve Inputs: reg_param - regularization parameters UTy - U^T y vector, size p G - GCV curve values delta0 - delta0 lambda - (output) optimal regularization parameter work - workspace */ int gsl_multifit_linear_gcv_min(const gsl_vector * reg_param, const gsl_vector * UTy, const gsl_vector * G, const double delta0, double * lambda, gsl_multifit_linear_workspace * work) { const size_t n = work->n; const size_t p = work->p; const size_t npts = reg_param->size; /* number of points on GCV curve */ if (UTy->size != p) { GSL_ERROR("UTy vector does not match workspace", GSL_EBADLEN); } else if (G->size != npts) { GSL_ERROR ("size of reg_param and G vectors do not match", GSL_EBADLEN); } else { int status; const size_t max_iter = 500; const double tol = 1.0e-4; gsl_vector_view S = gsl_vector_subvector(work->S, 0, p); gsl_vector_view workp = gsl_matrix_subcolumn(work->QSI, 0, 0, p); gcv_params params; int idxG = (int) gsl_vector_min_index(G); double a = gsl_vector_get(reg_param, GSL_MIN(idxG + 1, (int) npts - 1)); double b = gsl_vector_get(reg_param, GSL_MAX(idxG - 1, 0)); double m = gsl_vector_get(reg_param, idxG); size_t iter = 0; gsl_function F; /* XXX FIXME */ gsl_min_fminimizer *min_workspace_p; if (idxG == 0 || idxG == ((int)npts - 1)) { /* the minimum is an endpoint of the curve, no need to search */ *lambda = m; return GSL_SUCCESS; } /* XXX FIXME */ min_workspace_p = gsl_min_fminimizer_alloc(gsl_min_fminimizer_brent); params.S = &S.vector; params.UTy = UTy; params.delta0 = delta0; params.np = n - p; params.workp = &workp.vector; F.function = gcv_func; F.params = ¶ms; gsl_min_fminimizer_set(min_workspace_p, &F, m, a, b); do { iter++; status = gsl_min_fminimizer_iterate(min_workspace_p); a = gsl_min_fminimizer_x_lower(min_workspace_p); b = gsl_min_fminimizer_x_upper(min_workspace_p); status = gsl_min_test_interval(a, b, 0.0, tol); } while (status == GSL_CONTINUE && iter < max_iter); if (status == GSL_SUCCESS) *lambda = gsl_min_fminimizer_minimum(min_workspace_p); else status = GSL_EMAXITER; gsl_min_fminimizer_free(min_workspace_p); return status; } } /* gsl_multifit_linear_gcv_calc() Calculate GCV function G(lambda) for given lambda Inputs: reg_param - regularization parameters UTy - U^T y vector, size p delta0 - delta0 G - (output) GCV curve values work - workspace */ double gsl_multifit_linear_gcv_calc(const double lambda, const gsl_vector * UTy, const double delta0, gsl_multifit_linear_workspace * work) { const size_t n = work->n; const size_t p = work->p; if (UTy->size != p) { GSL_ERROR_VAL("UTy vector does not match workspace", GSL_EBADLEN, 0.0); } else { gsl_vector_view S = gsl_vector_subvector(work->S, 0, p); gsl_vector_view workp = gsl_matrix_subcolumn(work->QSI, 0, 0, p); gcv_params params; double G; params.S = &S.vector; params.UTy = UTy; params.delta0 = delta0; params.np = n - p; params.workp = &workp.vector; G = gcv_func(lambda, ¶ms); return G; } } /* gsl_multifit_linear_gcv() Calculate Generalized Cross Validation curve for a set of regularization parameters Inputs: y - right hand side vector reg_param - (output) regularization parameters G - (output) GCV curve values lambda - (output) optimal regularization parameter which minimizes GCV curve G_lambda - (output) G(lambda) value at optimal parameter work - workspace */ int gsl_multifit_linear_gcv(const gsl_vector * y, gsl_vector * reg_param, gsl_vector * G, double * lambda, double * G_lambda, gsl_multifit_linear_workspace * work) { const size_t n = y->size; const size_t N = G->size; /* number of points on GCV curve */ if (n != work->n) { GSL_ERROR("y vector does not match workspace", GSL_EBADLEN); } else if (reg_param->size != N) { GSL_ERROR ("size of reg_param and G vectors do not match", GSL_EBADLEN); } else { int status; const size_t p = work->p; gsl_vector_view UTy = gsl_vector_subvector(work->xt, 0, p); double delta0; status = gsl_multifit_linear_gcv_init(y, reg_param, &UTy.vector, &delta0, work); if (status) return status; status = gsl_multifit_linear_gcv_curve(reg_param, &UTy.vector, delta0, G, work); if (status) return status; status = gsl_multifit_linear_gcv_min(reg_param, &UTy.vector, G, delta0, lambda, work); if (status) return status; *G_lambda = gsl_multifit_linear_gcv_calc(*lambda, &UTy.vector, delta0, work); return GSL_SUCCESS; } } static double gcv_func(double lambda, void * params) { gcv_params * par = (gcv_params *) params; const gsl_vector *S = par->S; const gsl_vector *UTy = par->UTy; double delta0 = par->delta0; size_t np = par->np; gsl_vector *workp = par->workp; const size_t p = S->size; size_t i; double lambda_sq = lambda * lambda; double G, d, norm; double sumf = 0.0; /* compute workp = 1 - filter_factors */ for (i = 0; i < p; ++i) { double si = gsl_vector_get(S, i); double fi = lambda_sq / (si * si + lambda_sq); gsl_vector_set(workp, i, fi); sumf += fi; } d = (double)np + sumf; gsl_vector_mul(workp, UTy); norm = gsl_blas_dnrm2(workp); G = (norm*norm + delta0) / (d * d); return G; } gsl/multifit/test_meyerscal.c0000644000175000017500000000446113536674414014763 0ustar eddedd#define meyerscal_N 16 #define meyerscal_P 3 #define meyerscal_NTRIES 1 static double meyerscal_x0[meyerscal_P] = { 8.85, 4.0, 2.5 }; static double meyerscal_epsrel = 1.0e-8; static double meyerscal_Y[meyerscal_N] = { 34780., 28610., 23650., 19630., 16370., 13720., 11540., 9744., 8261., 7030., 6005., 5147., 4427., 3820., 3307., 2872. }; static void meyerscal_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 8.794585517003888e-05; const double meyerscal_x[meyerscal_P] = { 2.481778312286695e+00, 6.181346341853554e+00, 3.452236344749865e+00 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < meyerscal_P; ++i) { gsl_test_rel(x[i], meyerscal_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int meyerscal_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < meyerscal_N; ++i) { double ti = 0.45 + 0.05*(i + 1.0); double yi = meyerscal_Y[i]; double fi = x1 * exp(10.0*x2 / (ti + x3) - 13.0) - 1.0e-3*yi; gsl_vector_set(f, i, fi); } return GSL_SUCCESS; } static int meyerscal_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < meyerscal_N; ++i) { double ti = 0.45 + 0.05*(i + 1.0); double term1 = ti + x3; double term2 = exp(10.0*x2/term1 - 13.0); gsl_matrix_set(J, i, 0, term2); gsl_matrix_set(J, i, 1, 10.0*x1*term2/term1); gsl_matrix_set(J, i, 2, -10.0*x1*x2*term2/(term1*term1)); } return GSL_SUCCESS; } static gsl_multifit_function_fdf meyerscal_func = { &meyerscal_f, &meyerscal_df, NULL, meyerscal_N, meyerscal_P, NULL, 0, 0 }; static test_fdf_problem meyerscal_problem = { "meyerscal", meyerscal_x0, NULL, &meyerscal_epsrel, meyerscal_NTRIES, &meyerscal_checksol, &meyerscal_func }; gsl/multifit/test_powell2.c0000644000175000017500000000276113536674414014364 0ustar eddedd#define powell2_N 2 #define powell2_P 2 #define powell2_NTRIES 3 static double powell2_x0[powell2_P] = { 3.0, 1.0 }; static double powell2_epsrel = 1.0e-7; static void powell2_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < powell2_P; ++i) { gsl_test_rel(x[i], 0.0, epsrel, "%s/%s i=%zu", sname, pname, i); } } static int powell2_f (const gsl_vector * x, void *params, gsl_vector * f) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); gsl_vector_set(f, 0, x0); gsl_vector_set(f, 1, 10.0*x0/(x0 + 0.1) + 2.0*x1*x1); return GSL_SUCCESS; } static int powell2_df (const gsl_vector * x, void *params, gsl_matrix * df) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double term = x0 + 0.1; gsl_matrix_set(df, 0, 0, 1.0); gsl_matrix_set(df, 0, 1, 0.0); gsl_matrix_set(df, 1, 0, 1.0 / (term * term)); gsl_matrix_set(df, 1, 1, 4.0 * x1); return GSL_SUCCESS; } static gsl_multifit_function_fdf powell2_func = { &powell2_f, &powell2_df, NULL, powell2_N, powell2_P, NULL, 0, 0 }; static test_fdf_problem powell2_problem = { "powell2", powell2_x0, NULL, &powell2_epsrel, powell2_NTRIES, &powell2_checksol, &powell2_func }; gsl/multifit/test.c0000644000175000017500000000301413536674414012710 0ustar eddedd/* multifit/test.c * * Copyright (C) 2007, 2013 Brian Gough, Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* These tests are based on the NIST Statistical Reference Datasets See http://www.nist.gov/itl/div898/strd/index.html for more information. */ #include #include #include #include #include #include #include #include #include #include #include #include "test_linear.c" #include "test_nonlinear.c" int main (void) { gsl_ieee_env_setup(); /* test linear regression */ test_linear(); #if 0 /* fdfsolver interface now deprecated */ /* test nonlinear regression */ test_nonlinear(); #endif exit (gsl_test_summary ()); } gsl/multifit/test_brown2.c0000644000175000017500000000466013536674414014211 0ustar eddedd#define brown2_N 5 #define brown2_P 5 #define brown2_NTRIES 3 static double brown2_x0[brown2_P] = { 0.5, 0.5, 0.5, 0.5, 0.5 }; static double brown2_epsrel = 1.0e-12; static void brown2_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; double sumsq_exact; double alpha; const double p = (double) brown2_P; double alpha1mp, lhs, lastel; if (sumsq < 0.5) { /* sumsq = 0 case */ sumsq_exact = 0.0; alpha = x[0]; alpha1mp = pow(alpha, 1.0 - p); lhs = p*pow(alpha, p) - (p + 1)/alpha1mp; lastel = alpha1mp; gsl_test_rel(lhs, -1.0, epsrel, "%s/%s alpha lhs", sname, pname); } else { /* sumsq = 1 case */ sumsq_exact = 1.0; alpha = 0.0; lastel = p + 1.0; } gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 1; i < brown2_P - 1; ++i) { gsl_test_rel(x[i], alpha, epsrel, "%s/%s i=%zu", sname, pname, i); } gsl_test_rel(x[brown2_P - 1], lastel, epsrel, "%s/%s last element", sname, pname); } static int brown2_f (const gsl_vector * x, void *params, gsl_vector * f) { size_t i; double sum = -(brown2_N + 1.0); double prod = 1.0; for (i = 0; i < brown2_N; ++i) { double xi = gsl_vector_get(x, i); sum += xi; prod *= xi; } for (i = 0; i < brown2_N - 1; ++i) { double xi = gsl_vector_get(x, i); gsl_vector_set(f, i, xi + sum); } gsl_vector_set(f, brown2_N - 1, prod - 1.0); return GSL_SUCCESS; } static int brown2_df (const gsl_vector * x, void *params, gsl_matrix * J) { size_t i, j; for (j = 0; j < brown2_P; ++j) { double prod = 1.0; for (i = 0; i < brown2_N - 1; i++) { double Jij = (i == j) ? 2.0 : 1.0; gsl_matrix_set(J, i, j, Jij); } for (i = 0; i < brown2_N; i++) { if (i != j) prod *= gsl_vector_get(x, i); } gsl_matrix_set(J, brown2_N - 1, j, prod); } return GSL_SUCCESS; } static gsl_multifit_function_fdf brown2_func = { &brown2_f, &brown2_df, NULL, brown2_N, brown2_P, NULL, 0, 0 }; static test_fdf_problem brown2_problem = { "brown_almost_linear", brown2_x0, NULL, &brown2_epsrel, brown2_NTRIES, &brown2_checksol, &brown2_func }; gsl/multifit/test_eckerle.c0000644000175000017500000000624313536674414014411 0ustar eddedd#define eckerle_N 35 #define eckerle_P 3 #define eckerle_NTRIES 1 static double eckerle_x0[eckerle_P] = { 1.0, 10.0, 500.0 }; static double eckerle_epsrel = 1.0e-7; static double eckerle_sigma[eckerle_P] = { 1.5408051163E-02, 4.6803020753E-02, 4.6800518816E-02 }; static double eckerle_X[eckerle_N] = { 400.000000, 405.000000, 410.000000, 415.000000, 420.000000, 425.000000, 430.000000, 435.000000, 436.500000, 438.000000, 439.500000, 441.000000, 442.500000, 444.000000, 445.500000, 447.000000, 448.500000, 450.000000, 451.500000, 453.000000, 454.500000, 456.000000, 457.500000, 459.000000, 460.500000, 462.000000, 463.500000, 465.000000, 470.000000, 475.000000, 480.000000, 485.000000, 490.000000, 495.000000, 500.000000 }; static double eckerle_F[eckerle_N] = { 0.0001575, 0.0001699, 0.0002350, 0.0003102, 0.0004917, 0.0008710, 0.0017418, 0.0046400, 0.0065895, 0.0097302, 0.0149002, 0.0237310, 0.0401683, 0.0712559, 0.1264458, 0.2073413, 0.2902366, 0.3445623, 0.3698049, 0.3668534, 0.3106727, 0.2078154, 0.1164354, 0.0616764, 0.0337200, 0.0194023, 0.0117831, 0.0074357, 0.0022732, 0.0008800, 0.0004579, 0.0002345, 0.0001586, 0.0001143, 0.0000710 }; static void eckerle_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 1.4635887487E-03; const double eckerle_x[eckerle_P] = { 1.5543827178E+00, 4.0888321754E+00, 4.5154121844E+02 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < eckerle_P; ++i) { gsl_test_rel(x[i], eckerle_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int eckerle_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[eckerle_P]; size_t i; for (i = 0; i < eckerle_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < eckerle_N; i++) { double xi = eckerle_X[i]; double term = xi - b[2]; double yi; yi = b[0] / b[1] * exp(-0.5 * term * term / b[1] / b[1]); gsl_vector_set (f, i, yi - eckerle_F[i]); } return GSL_SUCCESS; } static int eckerle_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[eckerle_P]; size_t i; for (i = 0; i < eckerle_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < eckerle_N; i++) { double xi = eckerle_X[i]; double term1 = xi - b[2]; double term2 = exp(-0.5 * term1 * term1 / (b[1] * b[1])); gsl_matrix_set (df, i, 0, term2 / b[1]); gsl_matrix_set (df, i, 1, -b[0] * term2 / (b[1] * b[1]) + b[0] / pow(b[1], 4.0) * term2 * term1 * term1); gsl_matrix_set (df, i, 2, b[0] / pow(b[1], 3.0) * term1 * term2); } return GSL_SUCCESS; } static gsl_multifit_function_fdf eckerle_func = { &eckerle_f, &eckerle_df, NULL, eckerle_N, eckerle_P, NULL, 0, 0 }; static test_fdf_problem eckerle_problem = { "nist-eckerle", eckerle_x0, eckerle_sigma, &eckerle_epsrel, eckerle_NTRIES, &eckerle_checksol, &eckerle_func }; gsl/multifit/test_pontius.c0000644000175000017500000001157413536674414014503 0ustar eddeddsize_t pontius_n = 40; size_t pontius_p = 3; double pontius_x[] = { 150000, 300000, 450000, 600000, 750000, 900000, 1050000, 1200000, 1350000, 1500000, 1650000, 1800000, 1950000, 2100000, 2250000, 2400000, 2550000, 2700000, 2850000, 3000000, 150000, 300000, 450000, 600000, 750000, 900000, 1050000, 1200000, 1350000, 1500000, 1650000, 1800000, 1950000, 2100000, 2250000, 2400000, 2550000, 2700000, 2850000, 3000000 }; double pontius_y[] = { .11019, .21956, .32949, .43899, .54803, .65694, .76562, .87487, .98292, 1.09146, 1.20001, 1.30822, 1.41599, 1.52399, 1.63194, 1.73947, 1.84646, 1.95392, 2.06128, 2.16844, .11052, .22018, .32939, .43886, .54798, .65739, .76596, .87474, .98300, 1.09150, 1.20004, 1.30818, 1.41613, 1.52408, 1.63159, 1.73965, 1.84696, 1.95445, 2.06177, 2.16829 }; static int test_pontius_results(const char *str, const gsl_vector *c, const gsl_vector *expected_c, const gsl_vector *cov_diag, const gsl_vector *expected_sd, const double chisq, const double chisq_res, const double expected_chisq) { size_t i; /* test coefficient vector */ for (i = 0; i < pontius_p; ++i) { gsl_test_rel (gsl_vector_get(c,i), gsl_vector_get(expected_c, i), 1.0e-10, "%s c[%zu]", str, i) ; if (cov_diag && expected_sd) { gsl_test_rel (sqrt(gsl_vector_get(cov_diag, i)), gsl_vector_get(expected_sd, i), 1e-10, "%s cov[%zu,%zu]", str, i, i); } } gsl_test_rel (chisq, expected_chisq, 1.0e-10, "%s chisq", str); gsl_test_rel (chisq_res, expected_chisq, 1.0e-10, "%s chisq residuals", str); return GSL_SUCCESS; } void test_pontius () { size_t i, j; gsl_multifit_linear_workspace * work = gsl_multifit_linear_alloc (pontius_n, pontius_p); gsl_multifit_robust_workspace * work_rob = gsl_multifit_robust_alloc (gsl_multifit_robust_ols, pontius_n, pontius_p); gsl_matrix * X = gsl_matrix_alloc (pontius_n, pontius_p); gsl_vector_view y = gsl_vector_view_array (pontius_y, pontius_n); gsl_vector * c = gsl_vector_alloc (pontius_p); gsl_vector * r = gsl_vector_alloc (pontius_n); gsl_matrix * cov = gsl_matrix_alloc (pontius_p, pontius_p); double chisq, chisq_res; double expected_c[3] = { 0.673565789473684E-03, 0.732059160401003E-06, -0.316081871345029E-14}; double expected_sd[3] = { 0.107938612033077E-03, 0.157817399981659E-09, 0.486652849992036E-16 }; double expected_chisq = 0.155761768796992E-05; gsl_vector_view diag = gsl_matrix_diagonal (cov); gsl_vector_view exp_c = gsl_vector_view_array(expected_c, pontius_p); gsl_vector_view exp_sd = gsl_vector_view_array(expected_sd, pontius_p); for (i = 0 ; i < pontius_n; i++) { for (j = 0; j < pontius_p; j++) { gsl_matrix_set(X, i, j, pow(pontius_x[i], j)); } } /* test unweighted least squares */ gsl_multifit_linear (X, &y.vector, c, cov, &chisq, work); gsl_multifit_linear_residuals(X, &y.vector, c, r); gsl_blas_ddot(r, r, &chisq_res); test_pontius_results("pontius gsl_multifit_linear", c, &exp_c.vector, &diag.vector, &exp_sd.vector, chisq, chisq_res, expected_chisq); /* test robust least squares */ gsl_multifit_robust (X, &y.vector, c, cov, work_rob); test_pontius_results("pontius gsl_multifit_robust", c, &exp_c.vector, &diag.vector, &exp_sd.vector, 1.0, 1.0, 1.0); /* test weighted least squares */ { gsl_vector * w = gsl_vector_alloc (pontius_n); double expected_cov[3][3] ={ {2.76754385964916e-01 , -3.59649122807024e-07, 9.74658869395731e-14}, {-3.59649122807024e-07, 5.91630591630603e-13, -1.77210703526497e-19}, {9.74658869395731e-14, -1.77210703526497e-19, 5.62573661988878e-26} }; gsl_vector_set_all (w, 1.0); gsl_multifit_wlinear (X, w, &y.vector, c, cov, &chisq, work); gsl_multifit_linear_residuals(X, &y.vector, c, r); gsl_blas_ddot(r, r, &chisq_res); test_pontius_results("pontius gsl_multifit_wlinear", c, &exp_c.vector, NULL, NULL, chisq, chisq_res, expected_chisq); for (i = 0; i < pontius_p; i++) { for (j = 0; j < pontius_p; j++) { gsl_test_rel (gsl_matrix_get(cov,i,j), expected_cov[i][j], 1e-10, "pontius gsl_multifit_wlinear cov(%d,%d)", i, j) ; } } gsl_vector_free(w); } gsl_vector_free(c); gsl_vector_free(r); gsl_matrix_free(cov); gsl_matrix_free(X); gsl_multifit_linear_free (work); gsl_multifit_robust_free (work_rob); } gsl/multifit/fdfsolver.c0000644000175000017500000002235413536674414013733 0ustar eddedd/* multifit/fdfsolver.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include gsl_multifit_fdfsolver * gsl_multifit_fdfsolver_alloc (const gsl_multifit_fdfsolver_type * T, size_t n, size_t p) { int status; gsl_multifit_fdfsolver * s; if (n < p) { GSL_ERROR_VAL ("insufficient data points, n < p", GSL_EINVAL, 0); } s = (gsl_multifit_fdfsolver *) calloc (1, sizeof (gsl_multifit_fdfsolver)); if (s == 0) { GSL_ERROR_VAL ("failed to allocate space for multifit solver struct", GSL_ENOMEM, 0); } s->x = gsl_vector_calloc (p); if (s->x == 0) { gsl_multifit_fdfsolver_free (s); GSL_ERROR_VAL ("failed to allocate space for x", GSL_ENOMEM, 0); } s->f = gsl_vector_calloc (n); if (s->f == 0) { gsl_multifit_fdfsolver_free (s); GSL_ERROR_VAL ("failed to allocate space for f", GSL_ENOMEM, 0); } s->dx = gsl_vector_calloc (p); if (s->dx == 0) { gsl_multifit_fdfsolver_free (s); GSL_ERROR_VAL ("failed to allocate space for dx", GSL_ENOMEM, 0); } s->g = gsl_vector_alloc (p); if (s->g == 0) { gsl_multifit_fdfsolver_free (s); GSL_ERROR_VAL ("failed to allocate space for g", GSL_ENOMEM, 0); } s->sqrt_wts = gsl_vector_calloc (n); if (s->sqrt_wts == 0) { gsl_multifit_fdfsolver_free (s); GSL_ERROR_VAL ("failed to allocate space for sqrt_wts", GSL_ENOMEM, 0); } s->state = calloc (1, T->size); if (s->state == 0) { gsl_multifit_fdfsolver_free (s); GSL_ERROR_VAL ("failed to allocate space for multifit solver state", GSL_ENOMEM, 0); } s->type = T ; status = (s->type->alloc)(s->state, n, p); if (status != GSL_SUCCESS) { gsl_multifit_fdfsolver_free (s); GSL_ERROR_VAL ("failed to set solver", status, 0); } s->fdf = NULL; s->niter = 0; return s; } int gsl_multifit_fdfsolver_set (gsl_multifit_fdfsolver * s, gsl_multifit_function_fdf * f, const gsl_vector * x) { return gsl_multifit_fdfsolver_wset(s, f, x, NULL); } int gsl_multifit_fdfsolver_wset (gsl_multifit_fdfsolver * s, gsl_multifit_function_fdf * f, const gsl_vector * x, const gsl_vector * wts) { const size_t n = s->f->size; if (n != f->n) { GSL_ERROR ("function size does not match solver", GSL_EBADLEN); } else if (s->x->size != x->size) { GSL_ERROR ("vector length does not match solver", GSL_EBADLEN); } else if (wts != NULL && n != wts->size) { GSL_ERROR ("weight vector length does not match solver", GSL_EBADLEN); } else { size_t i; s->fdf = f; gsl_vector_memcpy(s->x, x); s->niter = 0; if (wts) { for (i = 0; i < n; ++i) { double wi = gsl_vector_get(wts, i); gsl_vector_set(s->sqrt_wts, i, sqrt(wi)); } } else gsl_vector_set_all(s->sqrt_wts, 1.0); return (s->type->set) (s->state, s->sqrt_wts, s->fdf, s->x, s->f, s->dx); } } int gsl_multifit_fdfsolver_iterate (gsl_multifit_fdfsolver * s) { int status = (s->type->iterate) (s->state, s->sqrt_wts, s->fdf, s->x, s->f, s->dx); s->niter++; return status; } /* gsl_multifit_fdfsolver_driver() Iterate the nonlinear least squares solver until completion Inputs: s - fdfsolver maxiter - maximum iterations to allow xtol - tolerance in step x gtol - tolerance in gradient ftol - tolerance in ||f|| info - (output) info flag on why iteration terminated 1 = stopped due to small step size ||dx| 2 = stopped due to small gradient 3 = stopped due to small change in f GSL_ETOLX = ||dx|| has converged to within machine precision (and xtol is too small) GSL_ETOLG = ||g||_inf is smaller than machine precision (gtol is too small) GSL_ETOLF = change in ||f|| is smaller than machine precision (ftol is too small) Return: GSL_SUCCESS if converged, GSL_MAXITER if maxiter exceeded without converging */ int gsl_multifit_fdfsolver_driver (gsl_multifit_fdfsolver * s, const size_t maxiter, const double xtol, const double gtol, const double ftol, int *info) { int status; size_t iter = 0; do { status = gsl_multifit_fdfsolver_iterate (s); /* * if status is GSL_ENOPROG or GSL_SUCCESS, continue iterating, * otherwise the method has converged with a GSL_ETOLx flag */ if (status != GSL_SUCCESS && status != GSL_ENOPROG) break; /* test for convergence */ status = gsl_multifit_fdfsolver_test(s, xtol, gtol, ftol, info); } while (status == GSL_CONTINUE && ++iter < maxiter); /* * the following error codes mean that the solution has converged * to within machine precision, so record the error code in info * and return success */ if (status == GSL_ETOLF || status == GSL_ETOLX || status == GSL_ETOLG) { *info = status; status = GSL_SUCCESS; } /* check if max iterations reached */ if (iter >= maxiter && status != GSL_SUCCESS) status = GSL_EMAXITER; return status; } /* gsl_multifit_fdfsolver_driver() */ int gsl_multifit_fdfsolver_jac (gsl_multifit_fdfsolver * s, gsl_matrix * J) { const size_t n = s->f->size; const size_t p = s->x->size; if (n != J->size1 || p != J->size2) { GSL_ERROR ("Jacobian dimensions do not match solver", GSL_EBADLEN); } else { return (s->type->jac) (s->state, J); } } /* gsl_multifit_fdfsolver_jac() */ void gsl_multifit_fdfsolver_free (gsl_multifit_fdfsolver * s) { RETURN_IF_NULL (s); if (s->state) { (s->type->free) (s->state); free (s->state); } if (s->dx) gsl_vector_free (s->dx); if (s->x) gsl_vector_free (s->x); if (s->f) gsl_vector_free (s->f); if (s->sqrt_wts) gsl_vector_free (s->sqrt_wts); if (s->g) gsl_vector_free (s->g); free (s); } const char * gsl_multifit_fdfsolver_name (const gsl_multifit_fdfsolver * s) { return s->type->name; } gsl_vector * gsl_multifit_fdfsolver_position (const gsl_multifit_fdfsolver * s) { return s->x; } gsl_vector * gsl_multifit_fdfsolver_residual (const gsl_multifit_fdfsolver * s) { return s->f; } size_t gsl_multifit_fdfsolver_niter (const gsl_multifit_fdfsolver * s) { return s->niter; } /* gsl_multifit_eval_wf() Compute residual vector y with user callback function, and apply weighting transform if given: y~ = sqrt(W) y Inputs: fdf - callback function x - model parameters swts - weight matrix sqrt(W) = sqrt(diag(w1,w2,...,wn)) set to NULL for unweighted fit y - (output) (weighted) residual vector y_i = sqrt(w_i) f_i where f_i is unweighted residual */ int gsl_multifit_eval_wf(gsl_multifit_function_fdf *fdf, const gsl_vector *x, const gsl_vector *swts, gsl_vector *y) { int s = ((*((fdf)->f)) (x, fdf->params, y)); ++(fdf->nevalf); /* y <- sqrt(W) y */ if (swts) gsl_vector_mul(y, swts); return s; } /* gsl_multifit_eval_wdf() Compute Jacobian matrix J with user callback function, and apply weighting transform if given: J~ = sqrt(W) J Inputs: fdf - callback function x - model parameters swts - weight matrix W = diag(w1,w2,...,wn) set to NULL for unweighted fit dy - (output) (weighted) Jacobian matrix dy = sqrt(W) dy where dy is unweighted Jacobian */ int gsl_multifit_eval_wdf(gsl_multifit_function_fdf *fdf, const gsl_vector *x, const gsl_vector *swts, gsl_matrix *dy) { int status = ((*((fdf)->df)) (x, fdf->params, dy)); ++(fdf->nevaldf); /* J <- sqrt(W) J */ if (swts) { const size_t n = swts->size; size_t i; for (i = 0; i < n; ++i) { double swi = gsl_vector_get(swts, i); gsl_vector_view v = gsl_matrix_row(dy, i); gsl_vector_scale(&v.vector, swi); } } return status; } gsl/multifit/test_nelson.c0000644000175000017500000001364613536674414014302 0ustar eddeddconst size_t nelson_N = 128; const size_t nelson_P = 3; /* double nelson_x0[3] = { 2, 0.0001, -0.01}; */ double nelson_x0[3] = { 2.5 , 0.000000005, -0.01}; double nelson_x[3] = { 2.5906836021E+00, 5.6177717026E-09, -5.7701013174E-02 }; double nelson_sumsq = 3.7976833176E+00; double nelson_sigma[3] = { 1.9149996413E-02, 6.1124096540E-09, 3.9572366543E-03 }; double nelson_F[128][3] = { { 15.00E0, 1E0, 180E0}, { 17.00E0, 1E0, 180E0}, { 15.50E0, 1E0, 180E0}, { 16.50E0, 1E0, 180E0}, { 15.50E0, 1E0, 225E0}, { 15.00E0, 1E0, 225E0}, { 16.00E0, 1E0, 225E0}, { 14.50E0, 1E0, 225E0}, { 15.00E0, 1E0, 250E0}, { 14.50E0, 1E0, 250E0}, { 12.50E0, 1E0, 250E0}, { 11.00E0, 1E0, 250E0}, { 14.00E0, 1E0, 275E0}, { 13.00E0, 1E0, 275E0}, { 14.00E0, 1E0, 275E0}, { 11.50E0, 1E0, 275E0}, { 14.00E0, 2E0, 180E0}, { 16.00E0, 2E0, 180E0}, { 13.00E0, 2E0, 180E0}, { 13.50E0, 2E0, 180E0}, { 13.00E0, 2E0, 225E0}, { 13.50E0, 2E0, 225E0}, { 12.50E0, 2E0, 225E0}, { 12.50E0, 2E0, 225E0}, { 12.50E0, 2E0, 250E0}, { 12.00E0, 2E0, 250E0}, { 11.50E0, 2E0, 250E0}, { 12.00E0, 2E0, 250E0}, { 13.00E0, 2E0, 275E0}, { 11.50E0, 2E0, 275E0}, { 13.00E0, 2E0, 275E0}, { 12.50E0, 2E0, 275E0}, { 13.50E0, 4E0, 180E0}, { 17.50E0, 4E0, 180E0}, { 17.50E0, 4E0, 180E0}, { 13.50E0, 4E0, 180E0}, { 12.50E0, 4E0, 225E0}, { 12.50E0, 4E0, 225E0}, { 15.00E0, 4E0, 225E0}, { 13.00E0, 4E0, 225E0}, { 12.00E0, 4E0, 250E0}, { 13.00E0, 4E0, 250E0}, { 12.00E0, 4E0, 250E0}, { 13.50E0, 4E0, 250E0}, { 10.00E0, 4E0, 275E0}, { 11.50E0, 4E0, 275E0}, { 11.00E0, 4E0, 275E0}, { 9.50E0, 4E0, 275E0}, { 15.00E0, 8E0, 180E0}, { 15.00E0, 8E0, 180E0}, { 15.50E0, 8E0, 180E0}, { 16.00E0, 8E0, 180E0}, { 13.00E0, 8E0, 225E0}, { 10.50E0, 8E0, 225E0}, { 13.50E0, 8E0, 225E0}, { 14.00E0, 8E0, 225E0}, { 12.50E0, 8E0, 250E0}, { 12.00E0, 8E0, 250E0}, { 11.50E0, 8E0, 250E0}, { 11.50E0, 8E0, 250E0}, { 6.50E0, 8E0, 275E0}, { 5.50E0, 8E0, 275E0}, { 6.00E0, 8E0, 275E0}, { 6.00E0, 8E0, 275E0}, { 18.50E0, 16E0, 180E0}, { 17.00E0, 16E0, 180E0}, { 15.30E0, 16E0, 180E0}, { 16.00E0, 16E0, 180E0}, { 13.00E0, 16E0, 225E0}, { 14.00E0, 16E0, 225E0}, { 12.50E0, 16E0, 225E0}, { 11.00E0, 16E0, 225E0}, { 12.00E0, 16E0, 250E0}, { 12.00E0, 16E0, 250E0}, { 11.50E0, 16E0, 250E0}, { 12.00E0, 16E0, 250E0}, { 6.00E0, 16E0, 275E0}, { 6.00E0, 16E0, 275E0}, { 5.00E0, 16E0, 275E0}, { 5.50E0, 16E0, 275E0}, { 12.50E0, 32E0, 180E0}, { 13.00E0, 32E0, 180E0}, { 16.00E0, 32E0, 180E0}, { 12.00E0, 32E0, 180E0}, { 11.00E0, 32E0, 225E0}, { 9.50E0, 32E0, 225E0}, { 11.00E0, 32E0, 225E0}, { 11.00E0, 32E0, 225E0}, { 11.00E0, 32E0, 250E0}, { 10.00E0, 32E0, 250E0}, { 10.50E0, 32E0, 250E0}, { 10.50E0, 32E0, 250E0}, { 2.70E0, 32E0, 275E0}, { 2.70E0, 32E0, 275E0}, { 2.50E0, 32E0, 275E0}, { 2.40E0, 32E0, 275E0}, { 13.00E0, 48E0, 180E0}, { 13.50E0, 48E0, 180E0}, { 16.50E0, 48E0, 180E0}, { 13.60E0, 48E0, 180E0}, { 11.50E0, 48E0, 225E0}, { 10.50E0, 48E0, 225E0}, { 13.50E0, 48E0, 225E0}, { 12.00E0, 48E0, 225E0}, { 7.00E0, 48E0, 250E0}, { 6.90E0, 48E0, 250E0}, { 8.80E0, 48E0, 250E0}, { 7.90E0, 48E0, 250E0}, { 1.20E0, 48E0, 275E0}, { 1.50E0, 48E0, 275E0}, { 1.00E0, 48E0, 275E0}, { 1.50E0, 48E0, 275E0}, { 13.00E0, 64E0, 180E0}, { 12.50E0, 64E0, 180E0}, { 16.50E0, 64E0, 180E0}, { 16.00E0, 64E0, 180E0}, { 11.00E0, 64E0, 225E0}, { 11.50E0, 64E0, 225E0}, { 10.50E0, 64E0, 225E0}, { 10.00E0, 64E0, 225E0}, { 7.27E0, 64E0, 250E0}, { 7.50E0, 64E0, 250E0}, { 6.70E0, 64E0, 250E0}, { 7.60E0, 64E0, 250E0}, { 1.50E0, 64E0, 275E0}, { 1.00E0, 64E0, 275E0}, { 1.20E0, 64E0, 275E0}, { 1.20E0, 64E0, 275E0} }; int nelson_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[3]; size_t i; for (i = 0; i < 3; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < 128; i++) { double x1 = nelson_F[i][1]; double x2 = nelson_F[i][2]; double y = b[0] - b[1] * x1 * (b[2]*x2 < -100) ? 0.0 : exp(-b[2] * x2); gsl_vector_set (f, i, log(nelson_F[i][0]) - y); } return GSL_SUCCESS; } int nelson_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[3]; size_t i; for (i = 0; i < 3; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < 128; i++) { double x1 = nelson_F[i][1]; double x2 = nelson_F[i][2]; gsl_matrix_set (df, i, 0, -1.0); gsl_matrix_set (df, i, 1, x1 * exp(-b[2] * x2)); gsl_matrix_set (df, i, 2, -b[1] * x1 * x2 * exp(-b[2] * x2)); } return GSL_SUCCESS; } gsl/multifit/test_lin1.c0000644000175000017500000000321613536674414013637 0ustar eddedd#define lin1_N 11 /* can be anything >= p */ #define lin1_P 5 #define lin1_NTRIES 3 static double lin1_x0[lin1_P] = { 1.0, 1.0, 1.0, 1.0, 1.0 }; static double lin1_epsrel = 1.0e-10; static void lin1_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = (double) (lin1_N - lin1_P); gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < lin1_P; ++i) { gsl_test_rel(x[i], -1.0, epsrel, "%s/%s i=%zu", sname, pname, i); } } static int lin1_f (const gsl_vector * x, void *params, gsl_vector * f) { size_t i, j; for (i = 0; i < lin1_N; ++i) { double fi = 0.0; for (j = 0; j < lin1_P; ++j) { double xj = gsl_vector_get(x, j); double Aij = (i == j) ? 1.0 : 0.0; Aij -= 2.0 / lin1_N; fi += Aij * xj; } fi -= 1.0; gsl_vector_set(f, i, fi); } return GSL_SUCCESS; } static int lin1_df (const gsl_vector * x, void *params, gsl_matrix * J) { size_t i, j; for (i = 0; i < lin1_N; ++i) { for (j = 0; j < lin1_P; ++j) { double Jij = (i == j) ? 1.0 : 0.0; Jij -= 2.0 / lin1_N; gsl_matrix_set(J, i, j, Jij); } } return GSL_SUCCESS; } static gsl_multifit_function_fdf lin1_func = { &lin1_f, &lin1_df, NULL, lin1_N, lin1_P, NULL, 0, 0 }; static test_fdf_problem lin1_problem = { "linear_full", lin1_x0, NULL, &lin1_epsrel, lin1_NTRIES, &lin1_checksol, &lin1_func }; gsl/multifit/test_watson.c0000644000175000017500000000525313536674414014312 0ustar eddedd#define watson_N 31 #define watson_P 6 #define watson_NTRIES 4 static double watson_x0[watson_P] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; static double watson_epsrel = 1.0e-6; static void watson_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 2.287670053552372e-03; const double watson_x[watson_P] = { -1.572508640629858e-02, 1.012434869366059e+00, -2.329916259263380e-01, 1.260430087686035e+00, -1.513728922580576e+00, 9.929964323646112e-01 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < watson_P; ++i) { gsl_test_rel(x[i], watson_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int watson_f (const gsl_vector * x, void *params, gsl_vector * f) { const double x1 = gsl_vector_get(x, 0); const double x2 = gsl_vector_get(x, 1); size_t i, j; for (i = 0; i < watson_N - 2; ++i) { double ti = (i + 1) / 29.0; double tjm1 = 1.0, tjm2 = 1.0; double sum1 = 0.0, sum2 = 0.0; for (j = 0; j < watson_P; ++j) { double xj = gsl_vector_get(x, j); sum1 += xj * tjm1; tjm1 *= ti; if (j > 0) { sum2 += j * xj * tjm2; tjm2 *= ti; } } gsl_vector_set (f, i, sum2 - sum1*sum1 - 1.0); } gsl_vector_set(f, watson_N - 2, x1); gsl_vector_set(f, watson_N - 1, x2 - x1*x1 - 1.0); return GSL_SUCCESS; } static int watson_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get (x, 0); size_t i, j; gsl_matrix_set_zero(J); for (i = 0; i < watson_N - 2; ++i) { double ti = (i + 1) / 29.0; double tjm1 = 1.0, tjm2 = 1.0; double sum1 = 0.0; for (j = 0; j < watson_P; ++j) { double xj = gsl_vector_get(x, j); sum1 += xj * tjm1; tjm1 *= ti; } tjm1 = 1.0; tjm2 = 1.0; for (j = 0; j < watson_P; ++j) { gsl_matrix_set(J, i, j, j * tjm2 - 2.0*sum1*tjm1); tjm1 *= ti; if (j > 0) tjm2 *= ti; } } gsl_matrix_set(J, watson_N - 2, 0, 1.0); gsl_matrix_set(J, watson_N - 1, 0, -2.0*x1); gsl_matrix_set(J, watson_N - 1, 1, 1.0); return GSL_SUCCESS; } static gsl_multifit_function_fdf watson_func = { &watson_f, &watson_df, NULL, watson_N, watson_P, NULL, 0, 0 }; static test_fdf_problem watson_problem = { "watson", watson_x0, NULL, &watson_epsrel, watson_NTRIES, &watson_checksol, &watson_func }; gsl/multifit/test_penalty1.c0000644000175000017500000000347713536674414014542 0ustar eddedd#define penalty1_N 11 /* p + 1 */ #define penalty1_P 10 #define penalty1_NTRIES 4 static double penalty1_x0[penalty1_P] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 }; static double penalty1_epsrel = 1.0e-12; static void penalty1_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { const double sumsq_exact = 7.08765146709037993e-05; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); } static int penalty1_f (const gsl_vector * x, void *params, gsl_vector * f) { const double alpha = 1.0e-5; const double sqrt_alpha = sqrt(alpha); size_t i; double sum = 0.0; for (i = 0; i < penalty1_P; ++i) { double xi = gsl_vector_get(x, i); gsl_vector_set(f, i, sqrt_alpha*(xi - 1.0)); sum += xi * xi; } gsl_vector_set(f, penalty1_P, sum - 0.25); return GSL_SUCCESS; } static int penalty1_df (const gsl_vector * x, void *params, gsl_matrix * J) { const double alpha = 1.0e-5; const double sqrt_alpha = sqrt(alpha); size_t i; gsl_matrix_view m = gsl_matrix_submatrix(J, 0, 0, penalty1_P, penalty1_P); gsl_vector_view diag = gsl_matrix_diagonal(&m.matrix); gsl_matrix_set_zero(&m.matrix); gsl_vector_set_all(&diag.vector, sqrt_alpha); for (i = 0; i < penalty1_P; ++i) { double xi = gsl_vector_get(x, i); gsl_matrix_set(J, penalty1_P, i, 2.0 * xi); } return GSL_SUCCESS; } static gsl_multifit_function_fdf penalty1_func = { &penalty1_f, &penalty1_df, NULL, penalty1_N, penalty1_P, NULL, 0, 0 }; static test_fdf_problem penalty1_problem = { "penalty1", penalty1_x0, NULL, &penalty1_epsrel, penalty1_NTRIES, &penalty1_checksol, &penalty1_func }; gsl/multifit/test_boxbod.c0000644000175000017500000000412513536674414014251 0ustar eddedd#define boxbod_N 6 #define boxbod_P 2 #define boxbod_NTRIES 1 static double boxbod_x0[boxbod_P] = { 100.0, 0.75 }; static double boxbod_epsrel = 1.0e-7; static double boxbod_sigma[boxbod_P] = { 1.2354515176E+01, 1.0455993237E-01 }; static double boxbod_X[boxbod_N] = { 1.0, 2.0, 3.0, 5.0, 7.0, 10.0 }; static double boxbod_F[boxbod_N] = { 109.0, 149.0, 149.0, 191.0, 213.0, 224.0 }; static void boxbod_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 1.1680088766E+03; const double boxbod_x[boxbod_P] = { 2.1380940889E+02, 5.4723748542E-01 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < boxbod_P; ++i) { gsl_test_rel(x[i], boxbod_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int boxbod_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[boxbod_P]; size_t i; for (i = 0; i < boxbod_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < boxbod_N; i++) { double xi = boxbod_X[i]; double yi; yi = b[0] * (1.0 - exp(-b[1] * xi)); gsl_vector_set (f, i, yi - boxbod_F[i]); } return GSL_SUCCESS; } static int boxbod_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[boxbod_P]; size_t i; for (i = 0; i < boxbod_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < boxbod_N; i++) { double xi = boxbod_X[i]; double term = exp(-b[1] * xi); gsl_matrix_set (df, i, 0, 1.0 - term); gsl_matrix_set (df, i, 1, b[0] * term * xi); } return GSL_SUCCESS; } static gsl_multifit_function_fdf boxbod_func = { &boxbod_f, &boxbod_df, NULL, boxbod_N, boxbod_P, NULL, 0, 0 }; static test_fdf_problem boxbod_problem = { "nist-boxbod", boxbod_x0, boxbod_sigma, &boxbod_epsrel, boxbod_NTRIES, &boxbod_checksol, &boxbod_func }; gsl/multifit/lmmisc.c0000644000175000017500000000553013536674414013222 0ustar eddedd/* multifit/lmmisc.c * * Copyright (C) 2014 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* compute step dx by solving (J^T J + mu*I) dx = -J^T f */ static int lmniel_calc_dx(const double mu, const gsl_matrix *A, const gsl_vector *rhs, gsl_vector *dx, lmniel_state_t *state) { int status; gsl_matrix *A_copy = state->A_copy; gsl_vector_view diag = gsl_matrix_diagonal(A_copy); /* make a copy of J^T J matrix */ gsl_matrix_memcpy(A_copy, A); /* augment normal equations with LM parameter: A -> A + mu*I */ gsl_vector_add_constant(&diag.vector, mu); status = gsl_linalg_QR_decomp(A_copy, state->work); if (status) return status; status = gsl_linalg_QR_solve(A_copy, state->work, rhs, dx); if (status) return status; return GSL_SUCCESS; } /* lmniel_calc_dx() */ /* compute x_trial = x + dx */ static void lmniel_trial_step(const gsl_vector * x, const gsl_vector * dx, gsl_vector * x_trial) { size_t i, N = x->size; for (i = 0; i < N; i++) { double dxi = gsl_vector_get (dx, i); double xi = gsl_vector_get (x, i); gsl_vector_set (x_trial, i, xi + dxi); } } /* lmniel_trial_step() */ /* lmniel_calc_dF() Compute dF = F(x) - F(x + dx) = 1/2 (f - f_new)^T (f + f_new) */ static double lmniel_calc_dF(const gsl_vector *f, const gsl_vector *f_new) { const size_t N = f->size; size_t i; double dF = 0.0; for (i = 0; i < N; ++i) { double fi = gsl_vector_get(f, i); double fnewi = gsl_vector_get(f_new, i); dF += (fi - fnewi) * (fi + fnewi); } dF *= 0.5; return dF; } /* lmniel_calc_dF() */ /* lmniel_calc_dL() Compute dL = L(0) - L(dx) = 1/2 dx^T (mu * D^T D dx - g) Here, the mg input is -g */ static double lmniel_calc_dL(const double mu, const gsl_vector *diag, const gsl_vector *dx, const gsl_vector *mg) { const size_t p = dx->size; size_t i; double dL = 0.0; for (i = 0; i < p; ++i) { double dxi = gsl_vector_get(dx, i); double di = gsl_vector_get(diag, i); double mgi = gsl_vector_get(mg, i); /* -g_i */ dL += dxi * (mu * di * di * dxi + mgi); } dL *= 0.5; return dL; } /* lmniel_calc_dL() */ gsl/multifit/test_rosenbrocke.c0000644000175000017500000000374513536674414015317 0ustar eddedd#define rosenbrocke_N 8 /* = p */ #define rosenbrocke_P 8 /* must be even */ #define rosenbrocke_NTRIES 4 static double rosenbrocke_x0[rosenbrocke_P] = { -1.2, 1.0, -1.2, 1.0, -1.2, 1.0, -1.2, 1.0 }; static double rosenbrocke_epsrel = 1.0e-12; static void rosenbrocke_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; const double rosenbrocke_x[rosenbrocke_P] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < rosenbrocke_P; ++i) { gsl_test_rel(x[i], rosenbrocke_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int rosenbrocke_f (const gsl_vector * x, void *params, gsl_vector * f) { size_t i; for (i = 0; i < rosenbrocke_N / 2; ++i) { double x2i = gsl_vector_get(x, 2*i + 1); double x2im1 = gsl_vector_get(x, 2*i); gsl_vector_set(f, 2*i, 10.0 * (x2i - x2im1*x2im1)); gsl_vector_set(f, 2*i + 1, 1.0 - x2im1); } return GSL_SUCCESS; } static int rosenbrocke_df (const gsl_vector * x, void *params, gsl_matrix * J) { size_t i; gsl_matrix_set_zero(J); for (i = 0; i < rosenbrocke_N / 2; ++i) { double x2im1 = gsl_vector_get(x, 2*i); gsl_matrix_set(J, 2*i, 2*i, -20.0*x2im1); gsl_matrix_set(J, 2*i, 2*i + 1, 10.0); gsl_matrix_set(J, 2*i + 1, 2*i, -1.0); } return GSL_SUCCESS; } static gsl_multifit_function_fdf rosenbrocke_func = { &rosenbrocke_f, &rosenbrocke_df, NULL, rosenbrocke_N, rosenbrocke_P, NULL, 0, 0 }; static test_fdf_problem rosenbrocke_problem = { "rosenbrock_extended", rosenbrocke_x0, NULL, &rosenbrocke_epsrel, rosenbrocke_NTRIES, &rosenbrocke_checksol, &rosenbrocke_func }; gsl/multifit/test_kowalik.c0000644000175000017500000000630013536674414014432 0ustar eddedd#define kowalik_N 11 #define kowalik_P 4 #define kowalik_NTRIES 4 static double kowalik_x0[kowalik_P] = { 0.25, 0.39, 0.415, 0.39 }; static double kowalik_epsrel = 1.0e-7; static double kowalik_Y[kowalik_N] = { 0.1957, 0.1947, 0.1735, 0.1600, 0.0844, 0.0627, 0.0456, 0.0342, 0.0323, 0.0235, 0.0246 }; static double kowalik_U[kowalik_N] = { 4.0000, 2.0000, 1.0000, 0.5000, 0.2500, 0.1670, 0.1250, 0.1000, 0.0833, 0.0714, 0.0625 }; static void kowalik_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; gsl_vector_const_view v = gsl_vector_const_view_array(x, kowalik_P); const double norm = gsl_blas_dnrm2(&v.vector); const double sumsq_exact1 = 3.075056038492370e-04; const double kowalik_x1[kowalik_P] = { 1.928069345723978e-01, 1.912823290344599e-01, 1.230565070690708e-01, 1.360623308065148e-01 }; const double sumsq_exact2 = 0.00102734304869549252; const double kowalik_x2[kowalik_P] = { -99999.9, /* inf */ -14.0758834005984603, -99999.9, /* -inf */ -99999.9 }; /* -inf */ const double *kowalik_x; double sumsq_exact; if (norm < 10.0) { kowalik_x = kowalik_x1; sumsq_exact = sumsq_exact1; } else { kowalik_x = kowalik_x2; sumsq_exact = sumsq_exact2; } gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < kowalik_P; ++i) { if (kowalik_x[i] < -90000.0) continue; gsl_test_rel(x[i], kowalik_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int kowalik_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); size_t i; for (i = 0; i < kowalik_N; ++i) { double yi = kowalik_Y[i]; double ui = kowalik_U[i]; double fi = yi - (x1*ui*(ui+x2)) / (x4 + ui*(ui + x3)); gsl_vector_set(f, i, fi); } return GSL_SUCCESS; } static int kowalik_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); size_t i; for (i = 0; i < kowalik_N; ++i) { double ui = kowalik_U[i]; double term1 = ui*(ui + x2); double term2 = ui*(ui + x3) + x4; gsl_matrix_set(J, i, 0, -term1 / term2); gsl_matrix_set(J, i, 1, -ui*x1/term2); gsl_matrix_set(J, i, 2, ui*term1*x1 / (term2*term2)); gsl_matrix_set(J, i, 3, term1*x1 / (term2*term2)); } return GSL_SUCCESS; } static gsl_multifit_function_fdf kowalik_func = { &kowalik_f, &kowalik_df, NULL, kowalik_N, kowalik_P, NULL, 0, 0 }; static test_fdf_problem kowalik_problem = { "kowalik", kowalik_x0, NULL, &kowalik_epsrel, kowalik_NTRIES, &kowalik_checksol, &kowalik_func }; gsl/multifit/test_helical.c0000644000175000017500000000374213536674414014401 0ustar eddedd#define helical_N 3 #define helical_P 3 #define helical_NTRIES 4 static double helical_x0[helical_P] = { -1.0, 0.0, 0.0 }; static double helical_x[helical_P] = { 1.0, 0.0, 0.0 }; static double helical_epsrel = 1.0e-12; static void helical_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < helical_P; ++i) { gsl_test_rel(x[i], helical_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int helical_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double theta = (x1 >= 0.0) ? 0.0 : 5.0; double nx = gsl_hypot(x1, x2); gsl_vector_set(f, 0, 10.0 * (x3 - 5.0/M_PI*atan(x2 / x1) - theta)); gsl_vector_set(f, 1, 10.0*(nx - 1.0)); gsl_vector_set(f, 2, x3); return GSL_SUCCESS; } static int helical_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double nx = gsl_hypot(x1, x2); double nx_sq = nx * nx; double term1 = 50.0 / (M_PI * nx_sq); double term2 = 10.0 / nx; gsl_matrix_set(J, 0, 0, term1*x2); gsl_matrix_set(J, 0, 1, -term1*x1); gsl_matrix_set(J, 0, 2, 10.0); gsl_matrix_set(J, 1, 0, term2*x1); gsl_matrix_set(J, 1, 1, term2*x2); gsl_matrix_set(J, 1, 2, 0.0); gsl_matrix_set(J, 2, 0, 0.0); gsl_matrix_set(J, 2, 1, 0.0); gsl_matrix_set(J, 2, 2, 1.0); return GSL_SUCCESS; } static gsl_multifit_function_fdf helical_func = { &helical_f, &helical_df, NULL, helical_N, helical_P, NULL, 0, 0 }; static test_fdf_problem helical_problem = { "helical", helical_x0, NULL, &helical_epsrel, helical_NTRIES, &helical_checksol, &helical_func }; gsl/multifit/test_rat42.c0000644000175000017500000000454313536674414013734 0ustar eddedd#define rat42_N 9 #define rat42_P 3 #define rat42_NTRIES 1 static double rat42_x0[rat42_P] = { 100.0, 1.0, 0.1 }; static double rat42_epsrel = 1.0e-7; static double rat42_sigma[rat42_P] = { 1.7340283401E+00, 8.8295217536E-02, 3.4465663377E-03 }; static double rat42_X[rat42_N] = { 9.0, 14.0, 21.0, 28.0, 42.0, 57.0, 63.0, 70.0, 79.0 }; static double rat42_F[rat42_N] = { 8.930, 10.800, 18.590, 22.330, 39.350, 56.110, 61.730, 64.620, 67.080 }; static void rat42_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 8.0565229338E+00; const double rat42_x[rat42_P] = { 7.2462237576E+01, 2.6180768402E+00, 6.7359200066E-02 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < rat42_P; ++i) { gsl_test_rel(x[i], rat42_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int rat42_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[rat42_P]; size_t i; for (i = 0; i < rat42_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < rat42_N; i++) { double xi = rat42_X[i]; double yi = b[0] / (1.0 + exp(b[1] - b[2]*xi)); gsl_vector_set (f, i, yi - rat42_F[i]); } return GSL_SUCCESS; } static int rat42_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[rat42_P]; size_t i; for (i = 0; i < rat42_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < rat42_N; i++) { double xi = rat42_X[i]; double term1 = exp(b[1] - b[2]*xi); double term2 = 1.0 + term1; gsl_matrix_set (df, i, 0, 1.0 / term2); gsl_matrix_set (df, i, 1, -b[0] * term1 / (term2 * term2)); gsl_matrix_set (df, i, 2, b[0] * term1 * xi / (term2 * term2)); } return GSL_SUCCESS; } static gsl_multifit_function_fdf rat42_func = { &rat42_f, &rat42_df, NULL, rat42_N, rat42_P, NULL, 0, 0 }; static test_fdf_problem rat42_problem = { "nist-rat42", rat42_x0, rat42_sigma, &rat42_epsrel, rat42_NTRIES, &rat42_checksol, &rat42_func }; gsl/multifit/multirobust.c0000644000175000017500000004776213536675317014347 0ustar eddedd/* multirobust.c * * Copyright (C) 2013 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * This module contains routines related to robust linear least squares. The * algorithm used closely follows the publications: * * [1] DuMouchel, W. and F. O'Brien (1989), "Integrating a robust * option into a multiple regression computing environment," * Computer Science and Statistics: Proceedings of the 21st * Symposium on the Interface, American Statistical Association * * [2] Street, J.O., R.J. Carroll, and D. Ruppert (1988), "A note on * computing robust regression estimates via iteratively * reweighted least squares," The American Statistician, v. 42, * pp. 152-154. */ #include #include #include #include #include #include #include #include #include #include static int robust_test_convergence(const gsl_vector *c_prev, const gsl_vector *c, const double tol); static double robust_madsigma(const gsl_vector *r, const size_t p, gsl_vector *workn); static double robust_robsigma(const gsl_vector *r, const double s, const double tune, gsl_multifit_robust_workspace *w); static double robust_sigma(const double s_ols, const double s_rob, gsl_multifit_robust_workspace *w); static int robust_covariance(const double sigma, gsl_matrix *cov, gsl_multifit_robust_workspace *w); /* gsl_multifit_robust_alloc Allocate a robust workspace Inputs: T - robust weighting algorithm n - number of observations p - number of model parameters Return: pointer to workspace */ gsl_multifit_robust_workspace * gsl_multifit_robust_alloc(const gsl_multifit_robust_type *T, const size_t n, const size_t p) { gsl_multifit_robust_workspace *w; if (n < p) { GSL_ERROR_VAL("observations n must be >= p", GSL_EINVAL, 0); } w = calloc(1, sizeof(gsl_multifit_robust_workspace)); if (w == 0) { GSL_ERROR_VAL("failed to allocate space for multifit_robust struct", GSL_ENOMEM, 0); } w->n = n; w->p = p; w->type = T; w->maxiter = 100; /* maximum iterations */ w->tune = w->type->tuning_default; w->multifit_p = gsl_multifit_linear_alloc(n, p); if (w->multifit_p == 0) { gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for multifit_linear struct", GSL_ENOMEM, 0); } w->r = gsl_vector_alloc(n); if (w->r == 0) { gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for residuals", GSL_ENOMEM, 0); } w->weights = gsl_vector_alloc(n); if (w->weights == 0) { gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for weights", GSL_ENOMEM, 0); } w->c_prev = gsl_vector_alloc(p); if (w->c_prev == 0) { gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for c_prev", GSL_ENOMEM, 0); } w->resfac = gsl_vector_alloc(n); if (w->resfac == 0) { gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for residual factors", GSL_ENOMEM, 0); } w->psi = gsl_vector_alloc(n); if (w->psi == 0) { gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for psi", GSL_ENOMEM, 0); } w->dpsi = gsl_vector_alloc(n); if (w->dpsi == 0) { gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for dpsi", GSL_ENOMEM, 0); } w->QSI = gsl_matrix_alloc(p, p); if (w->QSI == 0) { gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for QSI", GSL_ENOMEM, 0); } w->D = gsl_vector_alloc(p); if (w->D == 0) { gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for D", GSL_ENOMEM, 0); } w->workn = gsl_vector_alloc(n); if (w->workn == 0) { gsl_multifit_robust_free(w); GSL_ERROR_VAL("failed to allocate space for workn", GSL_ENOMEM, 0); } w->stats.sigma_ols = 0.0; w->stats.sigma_mad = 0.0; w->stats.sigma_rob = 0.0; w->stats.sigma = 0.0; w->stats.Rsq = 0.0; w->stats.adj_Rsq = 0.0; w->stats.rmse = 0.0; w->stats.sse = 0.0; w->stats.dof = n - p; w->stats.weights = w->weights; w->stats.r = w->r; return w; } /* gsl_multifit_robust_alloc() */ /* gsl_multifit_robust_free() Free memory associated with robust workspace */ void gsl_multifit_robust_free(gsl_multifit_robust_workspace *w) { if (w->multifit_p) gsl_multifit_linear_free(w->multifit_p); if (w->r) gsl_vector_free(w->r); if (w->weights) gsl_vector_free(w->weights); if (w->c_prev) gsl_vector_free(w->c_prev); if (w->resfac) gsl_vector_free(w->resfac); if (w->psi) gsl_vector_free(w->psi); if (w->dpsi) gsl_vector_free(w->dpsi); if (w->QSI) gsl_matrix_free(w->QSI); if (w->D) gsl_vector_free(w->D); if (w->workn) gsl_vector_free(w->workn); free(w); } /* gsl_multifit_robust_free() */ int gsl_multifit_robust_tune(const double tune, gsl_multifit_robust_workspace *w) { w->tune = tune; return GSL_SUCCESS; } int gsl_multifit_robust_maxiter(const size_t maxiter, gsl_multifit_robust_workspace *w) { if (w->maxiter == 0) { GSL_ERROR("maxiter must be greater than 0", GSL_EINVAL); } else { w->maxiter = maxiter; return GSL_SUCCESS; } } const char * gsl_multifit_robust_name(const gsl_multifit_robust_workspace *w) { return w->type->name; } gsl_multifit_robust_stats gsl_multifit_robust_statistics(const gsl_multifit_robust_workspace *w) { return w->stats; } /* gsl_multifit_robust_weights() Compute iterative weights for given residuals Inputs: r - residuals wts - (output) where to store weights w_i = r_i / (sigma_mad * tune) w - workspace Return: success/error Notes: 1) Sizes of r and wts must be equal 2) Size of r/wts may be less than or equal to w->n, to allow for computing weights of a subset of data */ int gsl_multifit_robust_weights(const gsl_vector *r, gsl_vector *wts, gsl_multifit_robust_workspace *w) { if (r->size != wts->size) { GSL_ERROR("residual vector does not match weight vector size", GSL_EBADLEN); } else { int s; double sigma; sigma = robust_madsigma(r, w->p, wts); /* scale residuals by sigma and tuning factor */ gsl_vector_memcpy(wts, r); if (sigma > 0.0) gsl_vector_scale(wts, 1.0 / (sigma * w->tune)); /* compute weights in-place */ s = w->type->wfun(wts, wts); return s; } } /* gsl_multifit_robust_weights() */ /* gsl_multifit_robust() Perform robust iteratively reweighted linear least squares fit Inputs: X - design matrix of basis functions y - right hand side vector c - (output) model coefficients cov - (output) covariance matrix w - workspace */ int gsl_multifit_robust(const gsl_matrix * X, const gsl_vector * y, gsl_vector * c, gsl_matrix * cov, gsl_multifit_robust_workspace *w) { /* check matrix and vector sizes */ if (X->size1 != y->size) { GSL_ERROR ("number of observations in y does not match rows of matrix X", GSL_EBADLEN); } else if (X->size2 != c->size) { GSL_ERROR ("number of parameters c does not match columns of matrix X", GSL_EBADLEN); } else if (cov->size1 != cov->size2) { GSL_ERROR ("covariance matrix is not square", GSL_ENOTSQR); } else if (c->size != cov->size1) { GSL_ERROR ("number of parameters does not match size of covariance matrix", GSL_EBADLEN); } else if (X->size1 != w->n || X->size2 != w->p) { GSL_ERROR ("size of workspace does not match size of observation matrix", GSL_EBADLEN); } else { int s; double chisq; const double tol = GSL_SQRT_DBL_EPSILON; int converged = 0; size_t numit = 0; const size_t n = y->size; double sigy = gsl_stats_sd(y->data, y->stride, n); double sig_lower; size_t i; /* * if the initial fit is very good, then finding outliers by comparing * them to the residual standard deviation is difficult. Therefore we * set a lower bound on the standard deviation estimate that is a small * fraction of the standard deviation of the data values */ sig_lower = 1.0e-6 * sigy; if (sig_lower == 0.0) sig_lower = 1.0; /* compute initial estimates using ordinary least squares */ s = gsl_multifit_linear(X, y, c, cov, &chisq, w->multifit_p); if (s) return s; /* save Q S^{-1} of original matrix */ gsl_matrix_memcpy(w->QSI, w->multifit_p->QSI); gsl_vector_memcpy(w->D, w->multifit_p->D); /* compute statistical leverage of each data point */ s = gsl_linalg_SV_leverage(w->multifit_p->A, w->resfac); if (s) return s; /* correct residuals with factor 1 / sqrt(1 - h) */ for (i = 0; i < n; ++i) { double h = gsl_vector_get(w->resfac, i); if (h > 0.9999) h = 0.9999; gsl_vector_set(w->resfac, i, 1.0 / sqrt(1.0 - h)); } /* compute residuals from OLS fit r = y - X c */ s = gsl_multifit_linear_residuals(X, y, c, w->r); if (s) return s; /* compute estimate of sigma from ordinary least squares */ w->stats.sigma_ols = gsl_blas_dnrm2(w->r) / sqrt((double) w->stats.dof); while (!converged && ++numit <= w->maxiter) { double sig; /* adjust residuals by statistical leverage (see DuMouchel and O'Brien) */ s = gsl_vector_mul(w->r, w->resfac); if (s) return s; /* compute estimate of standard deviation using MAD */ sig = robust_madsigma(w->r, w->p, w->workn); /* scale residuals by standard deviation and tuning parameter */ gsl_vector_scale(w->r, 1.0 / (GSL_MAX(sig, sig_lower) * w->tune)); /* compute weights using these residuals */ s = w->type->wfun(w->r, w->weights); if (s) return s; gsl_vector_memcpy(w->c_prev, c); /* solve weighted least squares with new weights */ s = gsl_multifit_wlinear(X, w->weights, y, c, cov, &chisq, w->multifit_p); if (s) return s; /* compute new residuals r = y - X c */ s = gsl_multifit_linear_residuals(X, y, c, w->r); if (s) return s; converged = robust_test_convergence(w->c_prev, c, tol); } /* compute final MAD sigma */ w->stats.sigma_mad = robust_madsigma(w->r, w->p, w->workn); /* compute robust estimate of sigma */ w->stats.sigma_rob = robust_robsigma(w->r, w->stats.sigma_mad, w->tune, w); /* compute final estimate of sigma */ w->stats.sigma = robust_sigma(w->stats.sigma_ols, w->stats.sigma_rob, w); /* store number of iterations */ w->stats.numit = numit; { double dof = (double) w->stats.dof; double rnorm = w->stats.sigma * sqrt(dof); /* see DuMouchel, sec 4.2 */ double ss_err = rnorm * rnorm; double ss_tot = gsl_stats_tss(y->data, y->stride, n); /* compute R^2 */ w->stats.Rsq = 1.0 - ss_err / ss_tot; /* compute adjusted R^2 */ w->stats.adj_Rsq = 1.0 - (1.0 - w->stats.Rsq) * ((double)n - 1.0) / dof; /* compute rmse */ w->stats.rmse = sqrt(ss_err / dof); /* store SSE */ w->stats.sse = ss_err; } /* calculate covariance matrix = sigma^2 (X^T X)^{-1} */ s = robust_covariance(w->stats.sigma, cov, w); if (s) return s; /* raise an error if not converged */ if (numit > w->maxiter) { GSL_ERROR("maximum iterations exceeded", GSL_EMAXITER); } return s; } } /* gsl_multifit_robust() */ /* Estimation of values for given x */ int gsl_multifit_robust_est(const gsl_vector * x, const gsl_vector * c, const gsl_matrix * cov, double *y, double *y_err) { int s = gsl_multifit_linear_est(x, c, cov, y, y_err); return s; } /* gsl_multifit_robust_residuals() Compute robust / studentized residuals from fit r_i = (y_i - Y_i) / (sigma * sqrt(1 - h_i)) Inputs: X - design matrix y - rhs vector c - fit coefficients r - (output) studentized residuals w - workspace Notes: 1) gsl_multifit_robust() must first be called to compute the coefficients c, the leverage factors in w->resfac, and sigma in w->stats.sigma */ int gsl_multifit_robust_residuals(const gsl_matrix * X, const gsl_vector * y, const gsl_vector * c, gsl_vector * r, gsl_multifit_robust_workspace * w) { if (X->size1 != y->size) { GSL_ERROR ("number of observations in y does not match rows of matrix X", GSL_EBADLEN); } else if (X->size2 != c->size) { GSL_ERROR ("number of parameters c does not match columns of matrix X", GSL_EBADLEN); } else if (y->size != r->size) { GSL_ERROR ("number of observations in y does not match number of residuals", GSL_EBADLEN); } else { const double sigma = w->stats.sigma; /* previously calculated sigma */ int s; size_t i; /* compute r = y - X c */ s = gsl_multifit_linear_residuals(X, y, c, r); if (s) return s; for (i = 0; i < r->size; ++i) { double hfac = gsl_vector_get(w->resfac, i); /* 1/sqrt(1 - h_i) */ double *ri = gsl_vector_ptr(r, i); /* multiply residual by 1 / (sigma * sqrt(1 - h_i)) */ *ri *= hfac / sigma; } return s; } } /* gsl_multifit_robust_residuals() */ /*********************************** * INTERNAL ROUTINES * ***********************************/ /* robust_test_convergence() Test for convergence in robust least squares Convergence criteria: |c_i^(k) - c_i^(k-1)| <= tol * max(|c_i^(k)|, |c_i^(k-1)|) for all i. k refers to iteration number. Inputs: c_prev - coefficients from previous iteration c - coefficients from current iteration tol - tolerance Return: 1 if converged, 0 if not */ static int robust_test_convergence(const gsl_vector *c_prev, const gsl_vector *c, const double tol) { size_t p = c->size; size_t i; for (i = 0; i < p; ++i) { double ai = gsl_vector_get(c_prev, i); double bi = gsl_vector_get(c, i); if (fabs(bi - ai) > tol * GSL_MAX(fabs(ai), fabs(bi))) return 0; /* not yet converged */ } /* converged */ return 1; } /* robust_test_convergence() */ /* robust_madsigma() Estimate the standard deviation of the residuals using the Median-Absolute-Deviation (MAD) of the residuals, throwing away the smallest p residuals. See: Street et al, 1988 Inputs: r - vector of residuals p - number of model coefficients (smallest p residuals are ignored) workn - workspace of size n = length(r) */ static double robust_madsigma(const gsl_vector *r, const size_t p, gsl_vector *workn) { size_t n = r->size; double sigma; size_t i; /* allow for the possibility that r->size < w->n */ gsl_vector_view v1 = gsl_vector_subvector(workn, 0, n); gsl_vector_view v2; /* copy |r| into workn */ for (i = 0; i < n; ++i) { gsl_vector_set(&v1.vector, i, fabs(gsl_vector_get(r, i))); } gsl_sort_vector(&v1.vector); /* * ignore the smallest p residuals when computing the median * (see Street et al 1988) */ v2 = gsl_vector_subvector(&v1.vector, p - 1, n - p + 1); sigma = gsl_stats_median_from_sorted_data(v2.vector.data, v2.vector.stride, v2.vector.size) / 0.6745; return sigma; } /* robust_madsigma() */ /* robust_robsigma() Compute robust estimate of sigma so that sigma^2 * inv(X' * X) is a reasonable estimate of the covariance for robust regression. Based heavily on the equations of Street et al, 1988. Inputs: r - vector of residuals y - X c s - sigma estimate using MAD tune - tuning constant w - workspace */ static double robust_robsigma(const gsl_vector *r, const double s, const double tune, gsl_multifit_robust_workspace *w) { double sigma; size_t i; const size_t n = w->n; const size_t p = w->p; const double st = s * tune; double a, b, lambda; /* compute u = r / sqrt(1 - h) / st */ gsl_vector_memcpy(w->workn, r); gsl_vector_mul(w->workn, w->resfac); gsl_vector_scale(w->workn, 1.0 / st); /* compute w(u) and psi'(u) */ w->type->wfun(w->workn, w->psi); w->type->psi_deriv(w->workn, w->dpsi); /* compute psi(u) = u*w(u) */ gsl_vector_mul(w->psi, w->workn); /* Street et al, Eq (3) */ a = gsl_stats_mean(w->dpsi->data, w->dpsi->stride, n); /* Street et al, Eq (5) */ b = 0.0; for (i = 0; i < n; ++i) { double psi_i = gsl_vector_get(w->psi, i); double resfac = gsl_vector_get(w->resfac, i); double fac = 1.0 / (resfac*resfac); /* 1 - h */ b += fac * psi_i * psi_i; } b /= (double) (n - p); /* Street et al, Eq (5) */ lambda = 1.0 + ((double)p)/((double)n) * (1.0 - a) / a; sigma = lambda * sqrt(b) * st / a; return sigma; } /* robust_robsigma() */ /* robust_sigma() Compute final estimate of residual standard deviation, using the OLS and robust sigma estimates. This equation is taken from DuMouchel and O'Brien, sec 4.1: \hat{\sigma_R} Inputs: s_ols - OLS sigma s_rob - robust sigma w - workspace Return: final estimate of sigma */ static double robust_sigma(const double s_ols, const double s_rob, gsl_multifit_robust_workspace *w) { double sigma; const double p = (double) w->p; const double n = (double) w->n; /* see DuMouchel and O'Brien, sec 4.1 */ sigma = GSL_MAX(s_rob, sqrt((s_ols*s_ols*p*p + s_rob*s_rob*n) / (p*p + n))); return sigma; } /* robust_sigma() */ /* robust_covariance() Calculate final covariance matrix, defined as: sigma * (X^T X)^{-1} Inputs: sigma - residual standard deviation cov - (output) covariance matrix w - workspace */ static int robust_covariance(const double sigma, gsl_matrix *cov, gsl_multifit_robust_workspace *w) { int status = 0; const size_t p = w->p; const double s2 = sigma * sigma; size_t i, j; gsl_matrix *QSI = w->QSI; gsl_vector *D = w->D; /* Form variance-covariance matrix cov = s2 * (Q S^-1) (Q S^-1)^T */ for (i = 0; i < p; i++) { gsl_vector_view row_i = gsl_matrix_row (QSI, i); double d_i = gsl_vector_get (D, i); for (j = i; j < p; j++) { gsl_vector_view row_j = gsl_matrix_row (QSI, j); double d_j = gsl_vector_get (D, j); double s; gsl_blas_ddot (&row_i.vector, &row_j.vector, &s); gsl_matrix_set (cov, i, j, s * s2 / (d_i * d_j)); gsl_matrix_set (cov, j, i, s * s2 / (d_i * d_j)); } } return status; } /* robust_covariance() */ gsl/multifit/gradient.c0000644000175000017500000000220013536674414013522 0ustar eddedd/* multifit/gradient.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include int gsl_multifit_gradient (const gsl_matrix * J, const gsl_vector * f, gsl_vector * g) { int status = gsl_blas_dgemv (CblasTrans, 1.0, J, f, 0.0, g); return status; } gsl/multifit/linear_common.c0000644000175000017500000001362013536674414014557 0ustar eddedd#include #include #include #include #include #include #include #include /* Fit * * y = X c * * where X is an n x p matrix of n observations for p variables. * * The solution includes a possible standard form Tikhonov regularization: * * c = (X^T X + lambda^2 I)^{-1} X^T y * * where lambda^2 is the Tikhonov regularization parameter. * * The function multifit_linear_svd() must first be called to * compute the SVD decomposition of X * * Inputs: X - least squares matrix * y - right hand side vector * tol - singular value tolerance * lambda - Tikhonov regularization parameter lambda; * ignored if <= 0 * rank - (output) effective rank * c - (output) model coefficient vector * rnorm - (output) residual norm ||y - X c|| * snorm - (output) solution norm ||c|| * work - workspace * * Notes: * 1) The dimensions of X must match work->n and work->p which are set * by multifit_linear_svd() * 2) On input: * work->A contains U * work->Q contains Q * work->S contains singular values * 3) If this function is called from gsl_multifit_wlinear(), then * the input y points to work->t, which contains sqrt(W) y. Since * work->t is also used as scratch workspace by this function, we * do the necessary computations with y first to avoid problems. * 4) When lambda <= 0, singular values are truncated when: * s_j <= tol * s_0 */ static int multifit_linear_solve (const gsl_matrix * X, const gsl_vector * y, const double tol, const double lambda, size_t * rank, gsl_vector * c, double *rnorm, double *snorm, gsl_multifit_linear_workspace * work) { const size_t n = X->size1; const size_t p = X->size2; if (n != work->n || p != work->p) { GSL_ERROR("observation matrix does not match workspace", GSL_EBADLEN); } else if (n != y->size) { GSL_ERROR("number of observations in y does not match matrix", GSL_EBADLEN); } else if (p != c->size) { GSL_ERROR ("number of parameters c does not match matrix", GSL_EBADLEN); } else if (tol <= 0) { GSL_ERROR ("tolerance must be positive", GSL_EINVAL); } else { const double lambda_sq = lambda * lambda; double rho_ls = 0.0; /* contribution to rnorm from OLS */ size_t j, p_eff; /* these inputs are previously computed by multifit_linear_svd() */ gsl_matrix_view A = gsl_matrix_submatrix(work->A, 0, 0, n, p); gsl_matrix_view Q = gsl_matrix_submatrix(work->Q, 0, 0, p, p); gsl_vector_view S = gsl_vector_subvector(work->S, 0, p); /* workspace */ gsl_matrix_view QSI = gsl_matrix_submatrix(work->QSI, 0, 0, p, p); gsl_vector_view xt = gsl_vector_subvector(work->xt, 0, p); gsl_vector_view D = gsl_vector_subvector(work->D, 0, p); gsl_vector_view t = gsl_vector_subvector(work->t, 0, n); /* * Solve y = A c for c * c = Q diag(s_i / (s_i^2 + lambda_i^2)) U^T y */ /* compute xt = U^T y */ gsl_blas_dgemv (CblasTrans, 1.0, &A.matrix, y, 0.0, &xt.vector); if (n > p) { /* * compute OLS residual norm = || y - U U^T y ||; * for n = p, U U^T = I, so no need to calculate norm */ gsl_vector_memcpy(&t.vector, y); gsl_blas_dgemv(CblasNoTrans, -1.0, &A.matrix, &xt.vector, 1.0, &t.vector); rho_ls = gsl_blas_dnrm2(&t.vector); } if (lambda > 0.0) { /* xt <-- [ s(i) / (s(i)^2 + lambda^2) ] .* U^T y */ for (j = 0; j < p; ++j) { double sj = gsl_vector_get(&S.vector, j); double f = (sj * sj) / (sj * sj + lambda_sq); double *ptr = gsl_vector_ptr(&xt.vector, j); /* use D as workspace for residual norm */ gsl_vector_set(&D.vector, j, (1.0 - f) * (*ptr)); *ptr *= sj / (sj*sj + lambda_sq); } /* compute regularized solution vector */ gsl_blas_dgemv (CblasNoTrans, 1.0, &Q.matrix, &xt.vector, 0.0, c); /* compute solution norm */ *snorm = gsl_blas_dnrm2(c); /* compute residual norm */ *rnorm = gsl_blas_dnrm2(&D.vector); if (n > p) { /* add correction to residual norm (see eqs 6-7 of [1]) */ *rnorm = sqrt((*rnorm) * (*rnorm) + rho_ls * rho_ls); } /* reset D vector */ gsl_vector_set_all(&D.vector, 1.0); } else { /* Scale the matrix Q, QSI = Q S^{-1} */ gsl_matrix_memcpy (&QSI.matrix, &Q.matrix); { double s0 = gsl_vector_get (&S.vector, 0); p_eff = 0; for (j = 0; j < p; j++) { gsl_vector_view column = gsl_matrix_column (&QSI.matrix, j); double sj = gsl_vector_get (&S.vector, j); double alpha; if (sj <= tol * s0) { alpha = 0.0; } else { alpha = 1.0 / sj; p_eff++; } gsl_vector_scale (&column.vector, alpha); } *rank = p_eff; } gsl_blas_dgemv (CblasNoTrans, 1.0, &QSI.matrix, &xt.vector, 0.0, c); /* Unscale the balancing factors */ gsl_vector_div (c, &D.vector); *snorm = gsl_blas_dnrm2(c); *rnorm = rho_ls; } return GSL_SUCCESS; } } gsl/version.c0000644000175000017500000000217113536674414011564 0ustar eddedd/* version.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include /* This file needs to use the top-level due to the possibility of a VPATH-style build where the original source tree is on read-only filesystem and so will not be picked up by the symlinking comands in gsl/Makefile.am */ const char * gsl_version = GSL_VERSION; gsl/bst/0000755000175000017500000000000014057135461010513 5ustar eddeddgsl/bst/Makefile.in0000664000175000017500000010573014057135461012570 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = bst ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslbst_la_LIBADD = am_libgslbst_la_OBJECTS = avl.lo bst.lo rb.lo trav.lo libgslbst_la_OBJECTS = $(am_libgslbst_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslbst.la ../test/libgsltest.la \ ../sys/libgslsys.la ../err/libgslerr.la ../sort/libgslsort.la \ ../rng/libgslrng.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/avl.Plo ./$(DEPDIR)/bst.Plo \ ./$(DEPDIR)/rb.Plo ./$(DEPDIR)/test.Po ./$(DEPDIR)/trav.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslbst_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslbst_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslbst.la pkginclude_HEADERS = gsl_bst.h gsl_bst_types.h gsl_bst_avl.h gsl_bst_rb.h libgslbst_la_SOURCES = avl.c bst.c rb.c trav.c AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslbst.la ../test/libgsltest.la ../sys/libgslsys.la ../err/libgslerr.la ../sort/libgslsort.la ../rng/libgslrng.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bst/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bst/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslbst.la: $(libgslbst_la_OBJECTS) $(libgslbst_la_DEPENDENCIES) $(EXTRA_libgslbst_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslbst_la_OBJECTS) $(libgslbst_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bst.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rb.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trav.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/avl.Plo -rm -f ./$(DEPDIR)/bst.Plo -rm -f ./$(DEPDIR)/rb.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/trav.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/avl.Plo -rm -f ./$(DEPDIR)/bst.Plo -rm -f ./$(DEPDIR)/rb.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/trav.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/bst/Makefile.am0000644000175000017500000000061013536675317012556 0ustar eddeddnoinst_LTLIBRARIES = libgslbst.la check_PROGRAMS = test pkginclude_HEADERS = gsl_bst.h gsl_bst_types.h gsl_bst_avl.h gsl_bst_rb.h libgslbst_la_SOURCES = avl.c bst.c rb.c trav.c AM_CPPFLAGS = -I$(top_srcdir) TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslbst.la ../test/libgsltest.la ../sys/libgslsys.la ../err/libgslerr.la ../sort/libgslsort.la ../rng/libgslrng.la gsl/bst/gsl_bst.h0000664000175000017500000001000714057135461012321 0ustar eddedd/* bst/gsl_bst.h * * Copyright (C) 2018, 2019 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BST_H__ #define __GSL_BST_H__ #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* type of binary search tree */ typedef struct { const char *name; const size_t node_size; int (*init)(const gsl_bst_allocator * allocator, gsl_bst_cmp_function * compare, void * params, void * vtable); size_t (*nodes) (const void * vtable); void * (*insert) (void * item, void * vtable); void * (*find) (const void *item, const void * vtable); void * (*remove) (const void *item, void * vtable); int (*empty) (void * vtable); int (*trav_init) (void * vtrav, const void * vtable); void * (*trav_first) (void * vtrav, const void * vtable); void * (*trav_last) (void * vtrav, const void * vtable); void * (*trav_find) (const void * item, void * vtrav, const void * vtable); void * (*trav_insert) (void * item, void * vtrav, void * vtable); void * (*trav_copy) (void * vtrav, const void * vsrc); void * (*trav_next) (void * vtrav); void * (*trav_prev) (void * vtrav); void * (*trav_cur) (const void * vtrav); void * (*trav_replace) (void * vtrav, void * new_item); } gsl_bst_type; typedef struct { const gsl_bst_type * type; /* binary search tree type */ union { gsl_bst_avl_table avl_table; gsl_bst_rb_table rb_table; } table; } gsl_bst_workspace; typedef struct { const gsl_bst_type * type; /* binary search tree type */ union { gsl_bst_avl_traverser avl_trav; gsl_bst_rb_traverser rb_trav; } trav_data; } gsl_bst_trav; /* tree types */ GSL_VAR const gsl_bst_type * gsl_bst_avl; GSL_VAR const gsl_bst_type * gsl_bst_rb; /* * Prototypes */ gsl_bst_workspace * gsl_bst_alloc(const gsl_bst_type * T, const gsl_bst_allocator * allocator, gsl_bst_cmp_function * compare, void * params); void gsl_bst_free(gsl_bst_workspace * w); int gsl_bst_empty(gsl_bst_workspace * w); void * gsl_bst_insert(void * item, gsl_bst_workspace * w); void * gsl_bst_find(const void * item, const gsl_bst_workspace * w); void * gsl_bst_remove(const void * item, gsl_bst_workspace * w); size_t gsl_bst_nodes(const gsl_bst_workspace * w); size_t gsl_bst_node_size(const gsl_bst_workspace * w); const char * gsl_bst_name(const gsl_bst_workspace * w); int gsl_bst_trav_init(gsl_bst_trav * trav, const gsl_bst_workspace * w); void * gsl_bst_trav_first(gsl_bst_trav * trav, const gsl_bst_workspace * w); void * gsl_bst_trav_last (gsl_bst_trav * trav, const gsl_bst_workspace * w); void * gsl_bst_trav_find (const void * item, gsl_bst_trav * trav, const gsl_bst_workspace * w); void * gsl_bst_trav_insert (void * item, gsl_bst_trav * trav, gsl_bst_workspace * w); void * gsl_bst_trav_copy(gsl_bst_trav * dest, const gsl_bst_trav * src); void * gsl_bst_trav_next(gsl_bst_trav * trav); void * gsl_bst_trav_prev(gsl_bst_trav * trav); void * gsl_bst_trav_cur(const gsl_bst_trav * trav); void * gsl_bst_trav_replace (gsl_bst_trav * trav, void * new_item); __END_DECLS #endif /* __GSL_BST_H__ */ gsl/bst/gsl_bst_types.h0000664000175000017500000000253514057135461013554 0ustar eddedd/* bst/gsl_bst_types.h * * Copyright (C) 2019 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BST_TYPES_H__ #define __GSL_BST_TYPES_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef int gsl_bst_cmp_function (const void * a, const void * b, void * params); /* allocation routines */ typedef struct { void * (*alloc) (size_t size, void * params); void (*free) (void * block, void * params); } gsl_bst_allocator; __END_DECLS #endif /* __GSL_BST_TYPES_H__ */ gsl/bst/rb.c0000644000175000017500000006326013536675317011303 0ustar eddedd/* rb.c * * Copyright (C) 1998-2002, 2004 Free Software Foundation, Inc. * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* This code is originally from GNU libavl, with some modifications */ #include #include #include #include #include #include #include typedef struct gsl_bst_rb_node rb_node; typedef gsl_bst_rb_table rb_table; typedef gsl_bst_rb_traverser rb_traverser; enum rb_color { RB_BLACK, /* black */ RB_RED /* red */ }; #ifndef RB_MAX_HEIGHT #define RB_MAX_HEIGHT GSL_BST_RB_MAX_HEIGHT #endif /* tree functions */ static int rb_init(const gsl_bst_allocator * allocator, gsl_bst_cmp_function * compare, void * params, void * vtable); static size_t rb_nodes (const void * vtable); static int rb_empty (void * vtable); static void ** rb_probe (void * item, rb_table * table); static void * rb_insert (void * item, void * vtable); static void * rb_find (const void * item, const void * vtable); static void * rb_remove (const void * item, void * vtable); /* traverser functions */ static int rb_t_init (void * vtrav, const void * vtable); static void * rb_t_first (void * vtrav, const void * vtable); static void * rb_t_last (void * vtrav, const void * vtable); static void * rb_t_find (const void * item, void * vtrav, const void * vtable); static void * rb_t_insert (void * item, void * vtrav, void * vtable); static void * rb_t_copy (void * vtrav, const void * vsrc); static void * rb_t_next (void * vtrav); static void * rb_t_prev (void * vtrav); static void * rb_t_cur (const void * vtrav); static void * rb_t_replace (void * vtrav, void * new_item); static void rb_trav_refresh (rb_traverser *trav); static int rb_init(const gsl_bst_allocator * allocator, gsl_bst_cmp_function * compare, void * params, void * vtable) { rb_table * table = (rb_table *) vtable; table->rb_alloc = allocator; table->rb_compare = compare; table->rb_param = params; table->rb_root = NULL; table->rb_count = 0; table->rb_generation = 0; return GSL_SUCCESS; } static size_t rb_nodes (const void * vtable) { const rb_table * table = (const rb_table *) vtable; return table->rb_count; } /* empty tree (delete all nodes) but do not free the tree itself */ static int rb_empty (void * vtable) { rb_table * table = (rb_table *) vtable; rb_node *p, *q; for (p = table->rb_root; p != NULL; p = q) { if (p->rb_link[0] == NULL) { q = p->rb_link[1]; table->rb_alloc->free (p, table->rb_param); } else { q = p->rb_link[0]; p->rb_link[0] = q->rb_link[1]; q->rb_link[1] = p; } } table->rb_root = NULL; table->rb_count = 0; table->rb_generation = 0; return GSL_SUCCESS; } /* Inserts |item| into |table| and returns a pointer to |item|'s address. If a duplicate item is found in the tree, returns a pointer to the duplicate without inserting |item|. Returns |NULL| in case of memory allocation failure. */ static void ** rb_probe (void * item, rb_table * table) { rb_node *pa[RB_MAX_HEIGHT]; /* nodes on stack */ unsigned char da[RB_MAX_HEIGHT]; /* directions moved from stack nodes */ int k; /* stack height */ rb_node *p; /* traverses tree looking for insertion point */ rb_node *n; /* newly inserted node */ pa[0] = (rb_node *) &table->rb_root; da[0] = 0; k = 1; for (p = table->rb_root; p != NULL; p = p->rb_link[da[k - 1]]) { int cmp = table->rb_compare (item, p->rb_data, table->rb_param); if (cmp == 0) return &p->rb_data; pa[k] = p; da[k++] = cmp > 0; } n = pa[k - 1]->rb_link[da[k - 1]] = table->rb_alloc->alloc (sizeof *n, table->rb_param); if (n == NULL) return NULL; n->rb_data = item; n->rb_link[0] = n->rb_link[1] = NULL; n->rb_color = RB_RED; table->rb_count++; table->rb_generation++; while (k >= 3 && pa[k - 1]->rb_color == RB_RED) { if (da[k - 2] == 0) { rb_node *y = pa[k - 2]->rb_link[1]; if (y != NULL && y->rb_color == RB_RED) { pa[k - 1]->rb_color = y->rb_color = RB_BLACK; pa[k - 2]->rb_color = RB_RED; k -= 2; } else { rb_node *x; if (da[k - 1] == 0) y = pa[k - 1]; else { x = pa[k - 1]; y = x->rb_link[1]; x->rb_link[1] = y->rb_link[0]; y->rb_link[0] = x; pa[k - 2]->rb_link[0] = y; } x = pa[k - 2]; x->rb_color = RB_RED; y->rb_color = RB_BLACK; x->rb_link[0] = y->rb_link[1]; y->rb_link[1] = x; pa[k - 3]->rb_link[da[k - 3]] = y; break; } } else { rb_node *y = pa[k - 2]->rb_link[0]; if (y != NULL && y->rb_color == RB_RED) { pa[k - 1]->rb_color = y->rb_color = RB_BLACK; pa[k - 2]->rb_color = RB_RED; k -= 2; } else { rb_node *x; if (da[k - 1] == 1) y = pa[k - 1]; else { x = pa[k - 1]; y = x->rb_link[0]; x->rb_link[0] = y->rb_link[1]; y->rb_link[1] = x; pa[k - 2]->rb_link[1] = y; } x = pa[k - 2]; x->rb_color = RB_RED; y->rb_color = RB_BLACK; x->rb_link[1] = y->rb_link[0]; y->rb_link[0] = x; pa[k - 3]->rb_link[da[k - 3]] = y; break; } } } table->rb_root->rb_color = RB_BLACK; return &n->rb_data; } /* Inserts |item| into |table|. Returns |NULL| if |item| was successfully inserted or if a memory allocation error occurred. Otherwise, returns the duplicate item. */ static void * rb_insert (void * item, void * vtable) { void **p = rb_probe (item, vtable); return p == NULL || *p == item ? NULL : *p; } /* Search |table| for an item matching |item|, and return it if found. Otherwise return |NULL|. */ static void * rb_find (const void * item, const void * vtable) { const rb_table * table = (const rb_table *) vtable; const rb_node *p; for (p = table->rb_root; p != NULL; ) { int cmp = table->rb_compare (item, p->rb_data, table->rb_param); if (cmp < 0) p = p->rb_link[0]; else if (cmp > 0) p = p->rb_link[1]; else /* |cmp == 0| */ return p->rb_data; } return NULL; } #if 0 /*XXX*/ /* Inserts |item| into |table|, replacing any duplicate item. Returns |NULL| if |item| was inserted without replacing a duplicate, or if a memory allocation error occurred. Otherwise, returns the item that was replaced. */ void * rb_replace (struct rb_table *table, void *item) { void **p = rb_probe (table, item); if (p == NULL || *p == item) return NULL; else { void *r = *p; *p = item; return r; } } #endif /* Deletes from |table| and returns an item matching |item|. Returns a null pointer if no matching item found. */ static void * rb_remove (const void * item, void * vtable) { rb_table * table = (rb_table *) vtable; rb_node *pa[RB_MAX_HEIGHT]; /* nodes on stack */ unsigned char da[RB_MAX_HEIGHT]; /* directions moved from stack nodes */ int k; /* stack height */ rb_node *p; /* the node to delete, or a node part way to it */ int cmp; /* result of comparison between |item| and |p| */ k = 0; p = (rb_node *) &table->rb_root; for (cmp = -1; cmp != 0; cmp = table->rb_compare (item, p->rb_data, table->rb_param)) { int dir = cmp > 0; pa[k] = p; da[k++] = dir; p = p->rb_link[dir]; if (p == NULL) return NULL; } item = p->rb_data; if (p->rb_link[1] == NULL) pa[k - 1]->rb_link[da[k - 1]] = p->rb_link[0]; else { enum rb_color t; rb_node *r = p->rb_link[1]; if (r->rb_link[0] == NULL) { r->rb_link[0] = p->rb_link[0]; t = r->rb_color; r->rb_color = p->rb_color; p->rb_color = t; pa[k - 1]->rb_link[da[k - 1]] = r; da[k] = 1; pa[k++] = r; } else { rb_node *s; int j = k++; for (;;) { da[k] = 0; pa[k++] = r; s = r->rb_link[0]; if (s->rb_link[0] == NULL) break; r = s; } da[j] = 1; pa[j] = s; pa[j - 1]->rb_link[da[j - 1]] = s; s->rb_link[0] = p->rb_link[0]; r->rb_link[0] = s->rb_link[1]; s->rb_link[1] = p->rb_link[1]; t = s->rb_color; s->rb_color = p->rb_color; p->rb_color = t; } } if (p->rb_color == RB_BLACK) { for (;;) { rb_node *x = pa[k - 1]->rb_link[da[k - 1]]; if (x != NULL && x->rb_color == RB_RED) { x->rb_color = RB_BLACK; break; } if (k < 2) break; if (da[k - 1] == 0) { rb_node *w = pa[k - 1]->rb_link[1]; if (w->rb_color == RB_RED) { w->rb_color = RB_BLACK; pa[k - 1]->rb_color = RB_RED; pa[k - 1]->rb_link[1] = w->rb_link[0]; w->rb_link[0] = pa[k - 1]; pa[k - 2]->rb_link[da[k - 2]] = w; pa[k] = pa[k - 1]; da[k] = 0; pa[k - 1] = w; k++; w = pa[k - 1]->rb_link[1]; } if ((w->rb_link[0] == NULL || w->rb_link[0]->rb_color == RB_BLACK) && (w->rb_link[1] == NULL || w->rb_link[1]->rb_color == RB_BLACK)) w->rb_color = RB_RED; else { if (w->rb_link[1] == NULL || w->rb_link[1]->rb_color == RB_BLACK) { rb_node *y = w->rb_link[0]; y->rb_color = RB_BLACK; w->rb_color = RB_RED; w->rb_link[0] = y->rb_link[1]; y->rb_link[1] = w; w = pa[k - 1]->rb_link[1] = y; } w->rb_color = pa[k - 1]->rb_color; pa[k - 1]->rb_color = RB_BLACK; w->rb_link[1]->rb_color = RB_BLACK; pa[k - 1]->rb_link[1] = w->rb_link[0]; w->rb_link[0] = pa[k - 1]; pa[k - 2]->rb_link[da[k - 2]] = w; break; } } else { rb_node *w = pa[k - 1]->rb_link[0]; if (w->rb_color == RB_RED) { w->rb_color = RB_BLACK; pa[k - 1]->rb_color = RB_RED; pa[k - 1]->rb_link[0] = w->rb_link[1]; w->rb_link[1] = pa[k - 1]; pa[k - 2]->rb_link[da[k - 2]] = w; pa[k] = pa[k - 1]; da[k] = 1; pa[k - 1] = w; k++; w = pa[k - 1]->rb_link[0]; } if ((w->rb_link[0] == NULL || w->rb_link[0]->rb_color == RB_BLACK) && (w->rb_link[1] == NULL || w->rb_link[1]->rb_color == RB_BLACK)) w->rb_color = RB_RED; else { if (w->rb_link[0] == NULL || w->rb_link[0]->rb_color == RB_BLACK) { rb_node *y = w->rb_link[1]; y->rb_color = RB_BLACK; w->rb_color = RB_RED; w->rb_link[1] = y->rb_link[0]; y->rb_link[0] = w; w = pa[k - 1]->rb_link[0] = y; } w->rb_color = pa[k - 1]->rb_color; pa[k - 1]->rb_color = RB_BLACK; w->rb_link[0]->rb_color = RB_BLACK; pa[k - 1]->rb_link[0] = w->rb_link[1]; w->rb_link[1] = pa[k - 1]; pa[k - 2]->rb_link[da[k - 2]] = w; break; } } k--; } } table->rb_alloc->free (p, table->rb_param); table->rb_count--; table->rb_generation++; return (void *) item; } /* Initializes |trav| for use with |tree| and selects the null node. */ static int rb_t_init (void * vtrav, const void * vtable) { rb_traverser * trav = (rb_traverser *) vtrav; const rb_table * table = (const rb_table *) vtable; trav->rb_table = table; trav->rb_node = NULL; trav->rb_height = 0; trav->rb_generation = table->rb_generation; return GSL_SUCCESS; } /* Initializes |trav| for |table| and selects and returns a pointer to its least-valued item. Returns |NULL| if |table| contains no nodes. */ static void * rb_t_first (void * vtrav, const void * vtable) { const rb_table * table = (const rb_table *) vtable; rb_traverser * trav = (rb_traverser *) vtrav; rb_node *x; trav->rb_table = table; trav->rb_height = 0; trav->rb_generation = table->rb_generation; x = table->rb_root; if (x != NULL) { while (x->rb_link[0] != NULL) { if (trav->rb_height >= RB_MAX_HEIGHT) { GSL_ERROR_NULL ("traverser height exceeds maximum", GSL_ETABLE); } trav->rb_stack[trav->rb_height++] = x; x = x->rb_link[0]; } } trav->rb_node = x; return x != NULL ? x->rb_data : NULL; } /* Initializes |trav| for |table| and selects and returns a pointer to its greatest-valued item. Returns |NULL| if |table| contains no nodes. */ static void * rb_t_last (void * vtrav, const void * vtable) { const rb_table * table = (const rb_table *) vtable; rb_traverser * trav = (rb_traverser *) vtrav; rb_node *x; trav->rb_table = table; trav->rb_height = 0; trav->rb_generation = table->rb_generation; x = table->rb_root; if (x != NULL) { while (x->rb_link[1] != NULL) { if (trav->rb_height >= RB_MAX_HEIGHT) { GSL_ERROR_NULL ("traverser height exceeds maximum", GSL_ETABLE); } trav->rb_stack[trav->rb_height++] = x; x = x->rb_link[1]; } } trav->rb_node = x; return x != NULL ? x->rb_data : NULL; } /* Searches for |item| in |table|. If found, initializes |trav| to the item found and returns the item as well. If there is no matching item, initializes |trav| to the null item and returns |NULL|. */ static void * rb_t_find (const void * item, void * vtrav, const void * vtable) { const rb_table * table = (const rb_table *) vtable; rb_traverser * trav = (rb_traverser *) vtrav; rb_node *p, *q; trav->rb_table = table; trav->rb_height = 0; trav->rb_generation = table->rb_generation; for (p = table->rb_root; p != NULL; p = q) { int cmp = table->rb_compare (item, p->rb_data, table->rb_param); if (cmp < 0) q = p->rb_link[0]; else if (cmp > 0) q = p->rb_link[1]; else /* |cmp == 0| */ { trav->rb_node = p; return p->rb_data; } if (trav->rb_height >= RB_MAX_HEIGHT) { GSL_ERROR_NULL ("traverser height exceeds maximum", GSL_ETABLE); } trav->rb_stack[trav->rb_height++] = p; } trav->rb_height = 0; trav->rb_node = NULL; return NULL; } /* Attempts to insert |item| into |table|. If |item| is inserted successfully, it is returned and |trav| is initialized to its location. If a duplicate is found, it is returned and |trav| is initialized to its location. No replacement of the item occurs. If a memory allocation failure occurs, |NULL| is returned and |trav| is initialized to the null item. */ static void * rb_t_insert (void * item, void * vtrav, void * vtable) { rb_table * table = (rb_table *) vtable; rb_traverser * trav = (rb_traverser *) vtrav; void **p; p = rb_probe (item, table); if (p != NULL) { trav->rb_table = table; trav->rb_node = ((rb_node *) ((char *) p - offsetof (rb_node, rb_data))); trav->rb_generation = table->rb_generation - 1; return *p; } else { rb_t_init (vtrav, vtable); return NULL; } } /* Initializes |trav| to have the same current node as |src|. */ static void * rb_t_copy (void * vtrav, const void * vsrc) { const rb_traverser * src = (const rb_traverser *) vsrc; rb_traverser * trav = (rb_traverser *) vtrav; if (trav != src) { trav->rb_table = src->rb_table; trav->rb_node = src->rb_node; trav->rb_generation = src->rb_generation; if (trav->rb_generation == trav->rb_table->rb_generation) { trav->rb_height = src->rb_height; memcpy (trav->rb_stack, (const void *) src->rb_stack, sizeof *trav->rb_stack * trav->rb_height); } } return trav->rb_node != NULL ? trav->rb_node->rb_data : NULL; } /* Returns the next data item in inorder within the tree being traversed with |trav|, or if there are no more data items returns |NULL|. */ static void * rb_t_next (void * vtrav) { rb_traverser * trav = (rb_traverser *) vtrav; rb_node *x; if (trav->rb_generation != trav->rb_table->rb_generation) rb_trav_refresh (trav); x = trav->rb_node; if (x == NULL) { return rb_t_first (vtrav, trav->rb_table); } else if (x->rb_link[1] != NULL) { if (trav->rb_height >= RB_MAX_HEIGHT) { GSL_ERROR_NULL ("traverser height exceeds maximum", GSL_ETABLE); } trav->rb_stack[trav->rb_height++] = x; x = x->rb_link[1]; while (x->rb_link[0] != NULL) { if (trav->rb_height >= RB_MAX_HEIGHT) { GSL_ERROR_NULL ("traverser height exceeds maximum", GSL_ETABLE); } trav->rb_stack[trav->rb_height++] = x; x = x->rb_link[0]; } } else { rb_node *y; do { if (trav->rb_height == 0) { trav->rb_node = NULL; return NULL; } y = x; x = trav->rb_stack[--trav->rb_height]; } while (y == x->rb_link[1]); } trav->rb_node = x; return x->rb_data; } /* Returns the previous data item in inorder within the tree being traversed with |trav|, or if there are no more data items returns |NULL|. */ static void * rb_t_prev (void * vtrav) { rb_traverser * trav = (rb_traverser *) vtrav; rb_node *x; if (trav->rb_generation != trav->rb_table->rb_generation) rb_trav_refresh (trav); x = trav->rb_node; if (x == NULL) { return rb_t_last (vtrav, trav->rb_table); } else if (x->rb_link[0] != NULL) { if (trav->rb_height >= RB_MAX_HEIGHT) { GSL_ERROR_NULL ("traverser height exceeds maximum", GSL_ETABLE); } trav->rb_stack[trav->rb_height++] = x; x = x->rb_link[0]; while (x->rb_link[1] != NULL) { if (trav->rb_height >= RB_MAX_HEIGHT) { GSL_ERROR_NULL ("traverser height exceeds maximum", GSL_ETABLE); } trav->rb_stack[trav->rb_height++] = x; x = x->rb_link[1]; } } else { rb_node *y; do { if (trav->rb_height == 0) { trav->rb_node = NULL; return NULL; } y = x; x = trav->rb_stack[--trav->rb_height]; } while (y == x->rb_link[0]); } trav->rb_node = x; return x->rb_data; } /* Returns |trav|'s current item. */ static void * rb_t_cur (const void * vtrav) { const rb_traverser * trav = (const rb_traverser *) vtrav; return trav->rb_node != NULL ? trav->rb_node->rb_data : NULL; } /* Replaces the current item in |trav| by |new| and returns the item replaced. |trav| must not have the null item selected. The new item must not upset the ordering of the tree. */ static void * rb_t_replace (void * vtrav, void * new_item) { rb_traverser * trav = (rb_traverser *) vtrav; void *old; old = trav->rb_node->rb_data; trav->rb_node->rb_data = new_item; return old; } #if 0 /*XXX*/ /* Destroys |new| with |rb_destroy (new, destroy)|, first setting right links of nodes in |stack| within |new| to null pointers to avoid touching uninitialized data. */ static void copy_error_recovery (rb_node **stack, int height, struct rb_table *new, rb_item_func *destroy) { assert (stack != NULL && height >= 0 && new != NULL); for (; height > 2; height -= 2) stack[height - 1]->rb_link[1] = NULL; rb_destroy (new, destroy); } /* Copies |org| to a newly created tree, which is returned. If |copy != NULL|, each data item in |org| is first passed to |copy|, and the return values are inserted into the tree, with |NULL| return values taken as indications of failure. On failure, destroys the partially created new tree, applying |destroy|, if non-null, to each item in the new tree so far, and returns |NULL|. If |allocator != NULL|, it is used for allocation in the new tree. Otherwise, the same allocator used for |org| is used. */ struct rb_table * rb_copy (const struct rb_table *org, rb_copy_func *copy, rb_item_func *destroy, struct libavl_allocator *allocator) { rb_node *stack[2 * (RB_MAX_HEIGHT + 1)]; int height = 0; struct rb_table *new; const rb_node *x; rb_node *y; assert (org != NULL); new = rb_create (org->rb_compare, org->rb_param, allocator != NULL ? allocator : org->rb_alloc); if (new == NULL) return NULL; new->rb_count = org->rb_count; if (new->rb_count == 0) return new; x = (const rb_node *) &org->rb_root; y = (rb_node *) &new->rb_root; for (;;) { while (x->rb_link[0] != NULL) { assert (height < 2 * (RB_MAX_HEIGHT + 1)); y->rb_link[0] = new->rb_alloc->libavl_malloc (new->rb_alloc, sizeof *y->rb_link[0]); if (y->rb_link[0] == NULL) { if (y != (rb_node *) &new->rb_root) { y->rb_data = NULL; y->rb_link[1] = NULL; } copy_error_recovery (stack, height, new, destroy); return NULL; } stack[height++] = (rb_node *) x; stack[height++] = y; x = x->rb_link[0]; y = y->rb_link[0]; } y->rb_link[0] = NULL; for (;;) { y->rb_color = x->rb_color; if (copy == NULL) y->rb_data = x->rb_data; else { y->rb_data = copy (x->rb_data, org->rb_param); if (y->rb_data == NULL) { y->rb_link[1] = NULL; copy_error_recovery (stack, height, new, destroy); return NULL; } } if (x->rb_link[1] != NULL) { y->rb_link[1] = new->rb_alloc->libavl_malloc (new->rb_alloc, sizeof *y->rb_link[1]); if (y->rb_link[1] == NULL) { copy_error_recovery (stack, height, new, destroy); return NULL; } x = x->rb_link[1]; y = y->rb_link[1]; break; } else y->rb_link[1] = NULL; if (height <= 2) return new; y = stack[--height]; x = stack[--height]; } } } #endif /* Refreshes the stack of parent pointers in |trav| and updates its generation number. */ static void rb_trav_refresh (rb_traverser *trav) { trav->rb_generation = trav->rb_table->rb_generation; if (trav->rb_node != NULL) { gsl_bst_cmp_function *cmp = trav->rb_table->rb_compare; void *param = trav->rb_table->rb_param; rb_node *node = trav->rb_node; rb_node *i; trav->rb_height = 0; for (i = trav->rb_table->rb_root; i != node; ) { if (trav->rb_height >= RB_MAX_HEIGHT) { GSL_ERROR_VOID ("traverser height exceeds maximum", GSL_ETABLE); } trav->rb_stack[trav->rb_height++] = i; i = i->rb_link[cmp (node->rb_data, i->rb_data, param) > 0]; } } } static const gsl_bst_type rb_tree_type = { "red-black", sizeof(rb_node), rb_init, rb_nodes, rb_insert, rb_find, rb_remove, rb_empty, rb_t_init, rb_t_first, rb_t_last, rb_t_find, rb_t_insert, rb_t_copy, rb_t_next, rb_t_prev, rb_t_cur, rb_t_replace }; const gsl_bst_type * gsl_bst_rb = &rb_tree_type; gsl/bst/bst.c0000644000175000017500000000703313536675317011464 0ustar eddedd/* bst.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include static void * bst_malloc(size_t size, void * params); static void bst_free(void * block, void * params); static const gsl_bst_allocator bst_default_allocator = { bst_malloc, bst_free }; /* gsl_bst_alloc() Allocate binary search tree Inputs: T - tree type allocator - memory allocator compare - comparison function params - parameters to pass to allocator and compare */ gsl_bst_workspace * gsl_bst_alloc(const gsl_bst_type * T, const gsl_bst_allocator * allocator, gsl_bst_cmp_function * compare, void * params) { int status; gsl_bst_workspace *w; w = calloc(1, sizeof(gsl_bst_workspace)); if (w == NULL) { GSL_ERROR_NULL("failed to allocate bst workspace", GSL_ENOMEM); } w->type = T; status = (w->type->init)(allocator != NULL ? allocator : &bst_default_allocator, compare, params, (void *) &w->table); if (status) { gsl_bst_free(w); GSL_ERROR_NULL("failed to initialize bst", GSL_EFAILED); } return w; } void gsl_bst_free(gsl_bst_workspace * w) { /* free tree nodes */ gsl_bst_empty(w); free(w); } /* delete all nodes from tree */ int gsl_bst_empty(gsl_bst_workspace * w) { return (w->type->empty)((void *) &w->table); } /* gsl_bst_insert() Inserts |item| into tree AVL: if duplicate found, returns pointer to item without inserting AVLmult: if duplicate found, increase multiplicity for that node If no duplicate found, insert item and return pointer to item. Returns NULL if a memory allocation error occurred. */ void * gsl_bst_insert(void * item, gsl_bst_workspace * w) { return (w->type->insert)(item, (void *) &w->table); } void * gsl_bst_find(const void * item, const gsl_bst_workspace * w) { return (w->type->find)(item, (const void *) &w->table); } void * gsl_bst_remove(const void * item, gsl_bst_workspace * w) { return (w->type->remove)(item, (void *) &w->table); } /* return number of nodes in tree */ size_t gsl_bst_nodes(const gsl_bst_workspace * w) { return (w->type->nodes)((const void *) &w->table); } /* return size (in bytes) of each node in tree */ size_t gsl_bst_node_size(const gsl_bst_workspace * w) { return w->type->node_size; } const char * gsl_bst_name(const gsl_bst_workspace * w) { return w->type->name; } /********************************************** * INTERNAL ROUTINES * **********************************************/ static void * bst_malloc(size_t size, void * params) { (void) params; /* avoid unused parameter warning */ return malloc(size); } static void bst_free(void * block, void * params) { (void) params; /* avoid unused parameter warning */ free(block); } gsl/bst/gsl_bst_avl.h0000664000175000017500000000466614057135461013201 0ustar eddedd/* bst/gsl_bst_avl.h * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BST_AVL_H__ #define __GSL_BST_AVL_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS #ifndef GSL_BST_AVL_MAX_HEIGHT #define GSL_BST_AVL_MAX_HEIGHT 32 #endif /* AVL node */ struct gsl_bst_avl_node { struct gsl_bst_avl_node *avl_link[2]; /* subtrees */ void *avl_data; /* pointer to data */ signed char avl_balance; /* balance factor */ }; /* tree data structure */ typedef struct { struct gsl_bst_avl_node *avl_root; /* tree's root */ gsl_bst_cmp_function *avl_compare; /* comparison function */ void *avl_param; /* extra argument to |avl_compare| */ const gsl_bst_allocator *avl_alloc; /* memory allocator */ size_t avl_count; /* number of items in tree */ unsigned long avl_generation; /* generation number */ } gsl_bst_avl_table; /* AVL traverser structure */ typedef struct { const gsl_bst_avl_table *avl_table; /* tree being traversed */ struct gsl_bst_avl_node *avl_node; /* current node in tree */ struct gsl_bst_avl_node *avl_stack[GSL_BST_AVL_MAX_HEIGHT]; /* all the nodes above |avl_node| */ size_t avl_height; /* number of nodes in |avl_parent| */ unsigned long avl_generation; /* generation number */ } gsl_bst_avl_traverser; __END_DECLS #endif /* __GSL_BST_AVL_H__ */ gsl/bst/gsl_bst_rb.h0000664000175000017500000000447114057135461013014 0ustar eddedd/* bst/gsl_bst_rb.h * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BST_RB_H__ #define __GSL_BST_RB_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS #ifndef GSL_BST_RB_MAX_HEIGHT #define GSL_BST_RB_MAX_HEIGHT 48 #endif /* red-black node */ struct gsl_bst_rb_node { struct gsl_bst_rb_node *rb_link[2]; /* subtrees */ void *rb_data; /* pointer to data */ unsigned char rb_color; /* color */ }; /* red-black tree data structure */ typedef struct { struct gsl_bst_rb_node *rb_root; /* tree's root */ gsl_bst_cmp_function *rb_compare; /* comparison function */ void *rb_param; /* extra argument to |rb_compare| */ const gsl_bst_allocator *rb_alloc; /* memory allocator */ size_t rb_count; /* number of items in tree */ unsigned long rb_generation; /* generation number */ } gsl_bst_rb_table; /* red-black traverser structure */ typedef struct { const gsl_bst_rb_table *rb_table; /* tree being traversed */ struct gsl_bst_rb_node *rb_node; /* current node in tree */ struct gsl_bst_rb_node *rb_stack[GSL_BST_RB_MAX_HEIGHT]; /* all the nodes above |rb_node| */ size_t rb_height; /* number of nodes in |rb_parent| */ unsigned long rb_generation; /* generation number */ } gsl_bst_rb_traverser; __END_DECLS #endif /* __GSL_BST_RB_H__ */ gsl/bst/avl.c0000644000175000017500000006267713536675317011475 0ustar eddedd/* avl.c * * Copyright (C) 1998-2002, 2004 Free Software Foundation, Inc. * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* This code is originally from GNU libavl, with some modifications */ #include #include #include #include #include #include #include typedef struct gsl_bst_avl_node avl_node; typedef gsl_bst_avl_table avl_table; typedef gsl_bst_avl_traverser avl_traverser; #ifndef AVL_MAX_HEIGHT #define AVL_MAX_HEIGHT GSL_BST_AVL_MAX_HEIGHT #endif /* Function types. */ typedef void avl_item_func (void *avl_item, void *avl_param); typedef void *avl_copy_func (void *avl_item, void *avl_param); /* tree functions */ static int avl_init(const gsl_bst_allocator * allocator, gsl_bst_cmp_function * compare, void * params, void * vtable); static size_t avl_nodes (const void * vtable); static int avl_empty (void * vtable); static void ** avl_probe (void * item, avl_table * table); static void * avl_insert (void * item, void * vtable); static void * avl_find (const void *item, const void * vtable); static void * avl_remove (const void *item, void * vtable); /* traverser functions */ static int avl_t_init (void * vtrav, const void * vtable); static void * avl_t_first (void * vtrav, const void * vtable); static void * avl_t_last (void * vtrav, const void * vtable); static void * avl_t_find (const void * item, void * vtrav, const void * vtable); static void * avl_t_insert (void * item, void * vtrav, void * vtable); static void * avl_t_copy (void * vtrav, const void * vsrc); static void * avl_t_next (void * vtrav); static void * avl_t_prev (void * vtrav); static void * avl_t_cur (const void * vtrav); static void * avl_t_replace (void * vtrav, void * new_item); static void avl_trav_refresh (avl_traverser * trav); #if 0 static avl_table * avl_copy (const avl_table *, avl_copy_func *, avl_item_func *); static void *avl_replace (avl_table *, void *); #endif static int avl_init(const gsl_bst_allocator * allocator, gsl_bst_cmp_function * compare, void * params, void * vtable) { avl_table * table = (avl_table *) vtable; table->avl_alloc = allocator; table->avl_compare = compare; table->avl_param = params; table->avl_root = NULL; table->avl_count = 0; table->avl_generation = 0; return GSL_SUCCESS; } static size_t avl_nodes (const void * vtable) { const avl_table * table = (const avl_table *) vtable; return table->avl_count; } /* empty tree (delete all nodes) but do not free the tree itself */ static int avl_empty (void * vtable) { avl_table * table = (avl_table *) vtable; avl_node *p, *q; for (p = table->avl_root; p != NULL; p = q) { if (p->avl_link[0] == NULL) { q = p->avl_link[1]; table->avl_alloc->free (p, table->avl_param); } else { q = p->avl_link[0]; p->avl_link[0] = q->avl_link[1]; q->avl_link[1] = p; } } table->avl_root = NULL; table->avl_count = 0; table->avl_generation = 0; return GSL_SUCCESS; } /* avl_probe() Inserts |item| into |tree| and returns a pointer to |item|'s address. If a duplicate item is found in the tree, returns a pointer to the existing item without inserting |item|. Returns |NULL| in case of memory allocation failure. */ static void ** avl_probe (void * item, avl_table * table) { avl_node *y, *z; /* top node to update balance factor, and parent */ avl_node *p, *q; /* iterator, and parent */ avl_node *n; /* newly inserted node */ avl_node *w; /* new root of rebalanced subtree */ int dir; /* direction to descend */ unsigned char da[AVL_MAX_HEIGHT]; /* cached comparison results */ int k = 0; /* number of cached results */ z = (avl_node *) &table->avl_root; y = table->avl_root; dir = 0; for (q = z, p = y; p != NULL; q = p, p = p->avl_link[dir]) { int cmp = table->avl_compare (item, p->avl_data, table->avl_param); if (cmp == 0) return &p->avl_data; if (p->avl_balance != 0) z = q, y = p, k = 0; da[k++] = dir = cmp > 0; } /* allocate a new node */ n = q->avl_link[dir] = table->avl_alloc->alloc (sizeof *n, table->avl_param); if (n == NULL) return NULL; table->avl_count++; n->avl_data = item; n->avl_link[0] = n->avl_link[1] = NULL; n->avl_balance = 0; if (y == NULL) return &n->avl_data; for (p = y, k = 0; p != n; p = p->avl_link[da[k]], k++) if (da[k] == 0) p->avl_balance--; else p->avl_balance++; if (y->avl_balance == -2) { avl_node *x = y->avl_link[0]; if (x->avl_balance == -1) { w = x; y->avl_link[0] = x->avl_link[1]; x->avl_link[1] = y; x->avl_balance = y->avl_balance = 0; } else { w = x->avl_link[1]; x->avl_link[1] = w->avl_link[0]; w->avl_link[0] = x; y->avl_link[0] = w->avl_link[1]; w->avl_link[1] = y; if (w->avl_balance == -1) x->avl_balance = 0, y->avl_balance = +1; else if (w->avl_balance == 0) x->avl_balance = y->avl_balance = 0; else /* |w->avl_balance == +1| */ x->avl_balance = -1, y->avl_balance = 0; w->avl_balance = 0; } } else if (y->avl_balance == +2) { avl_node *x = y->avl_link[1]; if (x->avl_balance == +1) { w = x; y->avl_link[1] = x->avl_link[0]; x->avl_link[0] = y; x->avl_balance = y->avl_balance = 0; } else { w = x->avl_link[0]; x->avl_link[0] = w->avl_link[1]; w->avl_link[1] = x; y->avl_link[1] = w->avl_link[0]; w->avl_link[0] = y; if (w->avl_balance == +1) x->avl_balance = 0, y->avl_balance = -1; else if (w->avl_balance == 0) x->avl_balance = y->avl_balance = 0; else /* |w->avl_balance == -1| */ x->avl_balance = +1, y->avl_balance = 0; w->avl_balance = 0; } } else return &n->avl_data; z->avl_link[y != z->avl_link[0]] = w; table->avl_generation++; return &n->avl_data; } /* avl_insert() Inserts |item| into |table|. Returns NULL if item successfully inserted, or if a memory allocation error occurred. Otherwise, return duplicate item. */ static void * avl_insert (void * item, void * vtable) { void **p = avl_probe (item, vtable); return p == NULL || *p == item ? NULL : *p; } /* avl_find() Search for |item| in |table| and return a pointer to item if found. Return NULL if not found. */ static void * avl_find (const void * item, const void * vtable) { const avl_table * table = (const avl_table *) vtable; avl_node *p; for (p = table->avl_root; p != NULL; ) { int cmp = table->avl_compare (item, p->avl_data, table->avl_param); if (cmp < 0) p = p->avl_link[0]; else if (cmp > 0) p = p->avl_link[1]; else /* |cmp == 0| */ return p->avl_data; } return NULL; } /* avl_remove() Deletes from |table| and returns an item matching |item|. Returns a null pointer if no matching item found. */ static void * avl_remove (const void * item, void * vtable) { avl_table * table = (avl_table *) vtable; /* stack of nodes */ avl_node *pa[AVL_MAX_HEIGHT]; /* nodes */ unsigned char da[AVL_MAX_HEIGHT]; /* |link[]| indexes */ int k; /* stack pointer */ avl_node *p; /* traverses tree to find node to delete */ int cmp; /* result of comparison between |item| and |p| */ k = 0; p = (avl_node *) &table->avl_root; for (cmp = -1; cmp != 0; cmp = table->avl_compare (item, p->avl_data, table->avl_param)) { int dir = cmp > 0; pa[k] = p; da[k++] = dir; p = p->avl_link[dir]; if (p == NULL) return NULL; } item = p->avl_data; if (p->avl_link[1] == NULL) pa[k - 1]->avl_link[da[k - 1]] = p->avl_link[0]; else { avl_node *r = p->avl_link[1]; if (r->avl_link[0] == NULL) { r->avl_link[0] = p->avl_link[0]; r->avl_balance = p->avl_balance; pa[k - 1]->avl_link[da[k - 1]] = r; da[k] = 1; pa[k++] = r; } else { avl_node *s; int j = k++; for (;;) { da[k] = 0; pa[k++] = r; s = r->avl_link[0]; if (s->avl_link[0] == NULL) break; r = s; } s->avl_link[0] = p->avl_link[0]; r->avl_link[0] = s->avl_link[1]; s->avl_link[1] = p->avl_link[1]; s->avl_balance = p->avl_balance; pa[j - 1]->avl_link[da[j - 1]] = s; da[j] = 1; pa[j] = s; } } table->avl_alloc->free (p, table->avl_param); while (--k > 0) { avl_node *y = pa[k]; if (da[k] == 0) { y->avl_balance++; if (y->avl_balance == +1) break; else if (y->avl_balance == +2) { avl_node *x = y->avl_link[1]; if (x->avl_balance == -1) { avl_node *w; w = x->avl_link[0]; x->avl_link[0] = w->avl_link[1]; w->avl_link[1] = x; y->avl_link[1] = w->avl_link[0]; w->avl_link[0] = y; if (w->avl_balance == +1) x->avl_balance = 0, y->avl_balance = -1; else if (w->avl_balance == 0) x->avl_balance = y->avl_balance = 0; else /* |w->avl_balance == -1| */ x->avl_balance = +1, y->avl_balance = 0; w->avl_balance = 0; pa[k - 1]->avl_link[da[k - 1]] = w; } else { y->avl_link[1] = x->avl_link[0]; x->avl_link[0] = y; pa[k - 1]->avl_link[da[k - 1]] = x; if (x->avl_balance == 0) { x->avl_balance = -1; y->avl_balance = +1; break; } else x->avl_balance = y->avl_balance = 0; } } } else { y->avl_balance--; if (y->avl_balance == -1) break; else if (y->avl_balance == -2) { avl_node *x = y->avl_link[0]; if (x->avl_balance == +1) { avl_node *w; w = x->avl_link[1]; x->avl_link[1] = w->avl_link[0]; w->avl_link[0] = x; y->avl_link[0] = w->avl_link[1]; w->avl_link[1] = y; if (w->avl_balance == -1) x->avl_balance = 0, y->avl_balance = +1; else if (w->avl_balance == 0) x->avl_balance = y->avl_balance = 0; else /* |w->avl_balance == +1| */ x->avl_balance = -1, y->avl_balance = 0; w->avl_balance = 0; pa[k - 1]->avl_link[da[k - 1]] = w; } else { y->avl_link[0] = x->avl_link[1]; x->avl_link[1] = y; pa[k - 1]->avl_link[da[k - 1]] = x; if (x->avl_balance == 0) { x->avl_balance = +1; y->avl_balance = -1; break; } else x->avl_balance = y->avl_balance = 0; } } } } table->avl_count--; table->avl_generation++; return (void *) item; } #if 0 /* Inserts |item| into |table|, replacing any duplicate item. Returns |NULL| if |item| was inserted without replacing a duplicate, or if a memory allocation error occurred. Otherwise, returns the item that was replaced. */ static void * avl_replace (avl_table *table, void *item) { void **p = avl_probe (table, item); if (p == NULL || *p == item) return NULL; else { void *r = *p; *p = item; return r; } } /* Destroys |new| with |avl_destroy (new, destroy)|, first setting right links of nodes in |stack| within |new| to null pointers to avoid touching uninitialized data. */ static void copy_error_recovery (avl_node **stack, int height, avl_table *new, avl_item_func *destroy) { for (; height > 2; height -= 2) stack[height - 1]->avl_link[1] = NULL; avl_destroy (new, destroy); } /* Copies |org| to a newly created tree, which is returned. If |copy != NULL|, each data item in |org| is first passed to |copy|, and the return values are inserted into the tree, with |NULL| return values taken as indications of failure. On failure, destroys the partially created new tree, applying |destroy|, if non-null, to each item in the new tree so far, and returns |NULL|. If |allocator != NULL|, it is used for allocation in the new tree. Otherwise, the same allocator used for |org| is used. */ static avl_table * avl_copy (const avl_table *org, avl_copy_func *copy, avl_item_func *destroy, struct libavl_allocator *allocator) { avl_node *stack[2 * (AVL_MAX_HEIGHT + 1)]; int height = 0; avl_table *new; const avl_node *x; avl_node *y; new = avl_alloc (org->avl_compare, org->avl_param, allocator != NULL ? allocator : org->avl_alloc); if (new == NULL) return NULL; new->avl_count = org->avl_count; if (new->avl_count == 0) return new; x = (const avl_node *) &org->avl_root; y = (avl_node *) &new->avl_root; for (;;) { while (x->avl_link[0] != NULL) { y->avl_link[0] = new->allocator->alloc (sizeof *y->avl_link[0], new->avl_param); if (y->avl_link[0] == NULL) { if (y != (avl_node *) &new->avl_root) { y->avl_data = NULL; y->avl_link[1] = NULL; } copy_error_recovery (stack, height, new, destroy); return NULL; } stack[height++] = (avl_node *) x; stack[height++] = y; x = x->avl_link[0]; y = y->avl_link[0]; } y->avl_link[0] = NULL; for (;;) { y->avl_balance = x->avl_balance; if (copy == NULL) y->avl_data = x->avl_data; else { y->avl_data = copy (x->avl_data, org->avl_param); if (y->avl_data == NULL) { y->avl_link[1] = NULL; copy_error_recovery (stack, height, new, destroy); return NULL; } } if (x->avl_link[1] != NULL) { y->avl_link[1] = new->allocator->alloc (sizeof *y->avl_link[1], new->avl_param); if (y->avl_link[1] == NULL) { copy_error_recovery (stack, height, new, destroy); return NULL; } x = x->avl_link[1]; y = y->avl_link[1]; break; } else y->avl_link[1] = NULL; if (height <= 2) return new; y = stack[--height]; x = stack[--height]; } } } #endif /* avl_t_init() Initializes |trav| for use with |tree| and selects the null node. */ static int avl_t_init (void * vtrav, const void * vtable) { avl_traverser * trav = (avl_traverser *) vtrav; const avl_table * table = (const avl_table *) vtable; trav->avl_table = table; trav->avl_node = NULL; trav->avl_height = 0; trav->avl_generation = table->avl_generation; return GSL_SUCCESS; } /* avl_t_first() Initializes |trav| for |tree| and selects and returns a pointer to its least-valued item. Returns |NULL| if |tree| contains no nodes. */ static void * avl_t_first (void * vtrav, const void * vtable) { const avl_table * table = (const avl_table *) vtable; avl_traverser * trav = (avl_traverser *) vtrav; avl_node *x; trav->avl_table = table; trav->avl_height = 0; trav->avl_generation = table->avl_generation; x = table->avl_root; if (x != NULL) { while (x->avl_link[0] != NULL) { if (trav->avl_height >= AVL_MAX_HEIGHT) { GSL_ERROR_NULL("traverser height exceeds maximum", GSL_ETABLE); } trav->avl_stack[trav->avl_height++] = x; x = x->avl_link[0]; } } trav->avl_node = x; return x != NULL ? x->avl_data : NULL; } /* avl_t_last() Initializes |trav| for |tree| and selects and returns a pointer to its greatest-valued item. Returns |NULL| if |tree| contains no nodes. */ static void * avl_t_last (void * vtrav, const void * vtable) { const avl_table * table = (const avl_table *) vtable; avl_traverser * trav = (avl_traverser *) vtrav; avl_node *x; trav->avl_table = table; trav->avl_height = 0; trav->avl_generation = table->avl_generation; x = table->avl_root; if (x != NULL) { while (x->avl_link[1] != NULL) { if (trav->avl_height >= AVL_MAX_HEIGHT) { GSL_ERROR_NULL("traverser height exceeds maximum", GSL_ETABLE); } trav->avl_stack[trav->avl_height++] = x; x = x->avl_link[1]; } } trav->avl_node = x; return x != NULL ? x->avl_data : NULL; } /* avl_t_find() Searches for |item| in |table|. If found, initializes |trav| to the item found and returns the item as well. If there is no matching item, initializes |trav| to the null item and returns |NULL|. */ static void * avl_t_find (const void * item, void * vtrav, const void * vtable) { const avl_table * table = (const avl_table *) vtable; avl_traverser * trav = (avl_traverser *) vtrav; avl_node *p, *q; trav->avl_table = table; trav->avl_height = 0; trav->avl_generation = table->avl_generation; for (p = table->avl_root; p != NULL; p = q) { int cmp = table->avl_compare (item, p->avl_data, table->avl_param); if (cmp < 0) q = p->avl_link[0]; else if (cmp > 0) q = p->avl_link[1]; else /* |cmp == 0| */ { trav->avl_node = p; return p->avl_data; } if (trav->avl_height >= AVL_MAX_HEIGHT) { GSL_ERROR_NULL("traverser height exceeds maximum", GSL_ETABLE); } trav->avl_stack[trav->avl_height++] = p; } trav->avl_height = 0; trav->avl_node = NULL; return NULL; } /* avl_t_insert() Attempts to insert |item| into |table|. If |item| is inserted successfully, it is returned and |trav| is initialized to its location. If a duplicate is found, it is returned and |trav| is initialized to its location. No replacement of the item occurs. If a memory allocation failure occurs, |NULL| is returned and |trav| is initialized to the null item. */ static void * avl_t_insert (void * item, void * vtrav, void * vtable) { avl_table * table = (avl_table *) vtable; avl_traverser * trav = (avl_traverser *) vtrav; void **p; p = avl_probe (item, table); if (p != NULL) { trav->avl_table = table; trav->avl_node = ((avl_node *) ((char *) p - offsetof (avl_node, avl_data))); trav->avl_generation = table->avl_generation - 1; return *p; } else { avl_t_init (vtrav, vtable); return NULL; } } /* avl_t_copy() Initializes |trav| to have the same current node as |src|. */ static void * avl_t_copy (void * vtrav, const void * vsrc) { const avl_traverser * src = (const avl_traverser *) vsrc; avl_traverser * trav = (avl_traverser *) vtrav; if (trav != src) { trav->avl_table = src->avl_table; trav->avl_node = src->avl_node; trav->avl_generation = src->avl_generation; if (trav->avl_generation == trav->avl_table->avl_generation) { trav->avl_height = src->avl_height; memcpy (trav->avl_stack, (const void *) src->avl_stack, sizeof *trav->avl_stack * trav->avl_height); } } return trav->avl_node != NULL ? trav->avl_node->avl_data : NULL; } /* avl_t_next() Returns the next data item in in-order within the tree being traversed with |trav|, or if there are no more data items returns NULL. */ static void * avl_t_next (void * vtrav) { avl_traverser * trav = (avl_traverser *) vtrav; avl_node *x; if (trav->avl_generation != trav->avl_table->avl_generation) avl_trav_refresh (trav); x = trav->avl_node; if (x == NULL) { return avl_t_first (vtrav, trav->avl_table); } else if (x->avl_link[1] != NULL) { if (trav->avl_height >= AVL_MAX_HEIGHT) { GSL_ERROR_NULL("traverser height exceeds maximum", GSL_ETABLE); } trav->avl_stack[trav->avl_height++] = x; x = x->avl_link[1]; while (x->avl_link[0] != NULL) { if (trav->avl_height >= AVL_MAX_HEIGHT) { GSL_ERROR_NULL("traverser height exceeds maximum", GSL_ETABLE); } trav->avl_stack[trav->avl_height++] = x; x = x->avl_link[0]; } } else { avl_node *y; do { if (trav->avl_height == 0) { trav->avl_node = NULL; return NULL; } y = x; x = trav->avl_stack[--trav->avl_height]; } while (y == x->avl_link[1]); } trav->avl_node = x; return x->avl_data; } /* avl_t_prev() Returns the previous data item in inorder within the tree being traversed with |trav|, or if there are no more data items returns NULL. */ static void * avl_t_prev (void * vtrav) { avl_traverser * trav = (avl_traverser *) vtrav; avl_node *x; if (trav->avl_generation != trav->avl_table->avl_generation) avl_trav_refresh (trav); x = trav->avl_node; if (x == NULL) { return avl_t_last (vtrav, trav->avl_table); } else if (x->avl_link[0] != NULL) { if (trav->avl_height >= AVL_MAX_HEIGHT) { GSL_ERROR_NULL("traverser height exceeds maximum", GSL_ETABLE); } trav->avl_stack[trav->avl_height++] = x; x = x->avl_link[0]; while (x->avl_link[1] != NULL) { if (trav->avl_height >= AVL_MAX_HEIGHT) { GSL_ERROR_NULL("traverser height exceeds maximum", GSL_ETABLE); } trav->avl_stack[trav->avl_height++] = x; x = x->avl_link[1]; } } else { avl_node *y; do { if (trav->avl_height == 0) { trav->avl_node = NULL; return NULL; } y = x; x = trav->avl_stack[--trav->avl_height]; } while (y == x->avl_link[0]); } trav->avl_node = x; return x->avl_data; } static void * avl_t_cur (const void * vtrav) { const avl_traverser * trav = (const avl_traverser *) vtrav; return trav->avl_node != NULL ? trav->avl_node->avl_data : NULL; } /* avl_t_replace() Replaces the current item in |trav| by |new| and returns the item replaced. |trav| must not have the null item selected. The new item must not upset the ordering of the tree. */ static void * avl_t_replace (void * vtrav, void * new_item) { avl_traverser * trav = (avl_traverser *) vtrav; void *old; old = trav->avl_node->avl_data; trav->avl_node->avl_data = new_item; return old; } /* avl_trav_refresh() Refreshes the stack of parent pointers in |trav| and updates its generation number */ static void avl_trav_refresh (avl_traverser * trav) { trav->avl_generation = trav->avl_table->avl_generation; if (trav->avl_node != NULL) { gsl_bst_cmp_function *cmp = trav->avl_table->avl_compare; void *param = trav->avl_table->avl_param; avl_node *node = trav->avl_node; avl_node *i; trav->avl_height = 0; for (i = trav->avl_table->avl_root; i != node; ) { if (trav->avl_height >= AVL_MAX_HEIGHT) { GSL_ERROR_VOID("traverser height exceeds maximum", GSL_ETABLE); } trav->avl_stack[trav->avl_height++] = i; i = i->avl_link[cmp (node->avl_data, i->avl_data, param) > 0]; } } } static const gsl_bst_type avl_tree_type = { "AVL", sizeof(avl_node), avl_init, avl_nodes, avl_insert, avl_find, avl_remove, avl_empty, avl_t_init, avl_t_first, avl_t_last, avl_t_find, avl_t_insert, avl_t_copy, avl_t_next, avl_t_prev, avl_t_cur, avl_t_replace }; const gsl_bst_type * gsl_bst_avl = &avl_tree_type; gsl/bst/test.c0000644000175000017500000002257113536675317011657 0ustar eddedd/* test.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include enum array_order { ORD_RANDOM = 0, /* random order */ ORD_ASCENDING, /* ascending order */ ORD_DESCENDING, /* descending order */ ORD_BALANCED, /* balanced tree order */ ORD_ZIGZAG, /* zig-zag order */ ORD_ASCENDING_SHIFTED, /* ascending from middle, then beginning */ ORD_END_NODUP, /* end of no-duplicate ordering */ ORD_RANDOM_DUP /* random order with duplicates */ }; /* fill array[] with random integers in [lower,upper] with duplicates allowed */ static void random_integers(const size_t n, const int lower, const int upper, int array[], gsl_rng * r) { size_t i; for (i = 0; i < n; ++i) array[i] = (int) ((upper - lower) * gsl_rng_uniform(r) + lower); } /* fills array[] with a random permutation of the integers between 0 and n - 1 */ static void random_permuted_integers (const size_t n, int array[], gsl_rng * r) { size_t i; for (i = 0; i < n; i++) array[i] = i; for (i = 0; i < n; i++) { size_t j = i + (unsigned) (gsl_rng_uniform(r) * (n - i)); int t = array[j]; array[j] = array[i]; array[i] = t; } } static int compare_ints(const void *pa, const void *pb, void *params) { const int *a = pa; const int *b = pb; (void) params; return (*a < *b) ? -1 : (*a > *b); } /* Generates a list of integers that produce a balanced tree when inserted in order into a binary tree in the usual way. |min| and |max| inclusively bound the values to be inserted. Output is deposited starting at |*array|. */ static void gen_balanced_tree (const int min, const int max, int **array) { int i; if (min > max) return; i = (min + max + 1) / 2; *(*array)++ = i; gen_balanced_tree (min, i - 1, array); gen_balanced_tree (i + 1, max, array); } /* generates a permutation of the integers |0| to |n - 1| */ static void gen_int_array (const size_t n, const enum array_order order, int array[], gsl_rng * r) { size_t i; switch (order) { case ORD_RANDOM: random_permuted_integers (n, array, r); break; case ORD_ASCENDING: for (i = 0; i < n; i++) array[i] = i; break; case ORD_DESCENDING: for (i = 0; i < n; i++) array[i] = n - i - 1; break; case ORD_BALANCED: gen_balanced_tree (0, n - 1, &array); break; case ORD_ZIGZAG: for (i = 0; i < n; i++) { if (i % 2 == 0) array[i] = i / 2; else array[i] = n - i / 2 - 1; } break; case ORD_ASCENDING_SHIFTED: for (i = 0; i < n; i++) { array[i] = i + n / 2; if ((size_t) array[i] >= n) array[i] -= n; } break; case ORD_RANDOM_DUP: random_integers(n, -10, 10, array, r); break; default: assert (0); } } static void check_traverser(const size_t n, const enum array_order order, gsl_bst_trav * trav, int data, const char *desc, const gsl_bst_workspace * w) { int *prev, *cur, *next; prev = gsl_bst_trav_prev(trav); if (prev != NULL) { gsl_test(*prev > data, "bst %s[n=%zu,order=%d] %s traverser ahead of %d, but should be ahead of %d", gsl_bst_name(w), n, order, desc, *prev, data); } gsl_bst_trav_next(trav); cur = gsl_bst_trav_cur(trav); gsl_test(*cur != data, "bst %s[n=%zu,order=%d] %s traverser at %d, but should be at %d", gsl_bst_name(w), n, order, desc, *cur, data); next = gsl_bst_trav_next(trav); if (next != NULL) { gsl_test(*next < data, "bst %s[n=%zu,order=%d] %s traverser behind %d, but should be behind %d", gsl_bst_name(w), n, order, desc, *next, data); } gsl_bst_trav_prev(trav); } static void test_bst_int(const size_t n, const gsl_bst_type * T, const enum array_order order, gsl_rng * r) { int *data = malloc(n * sizeof(int)); int *data_delete = malloc(n * sizeof(int)); int *sorted_data = malloc(n * sizeof(int)); gsl_bst_workspace * w = gsl_bst_alloc(T, NULL, compare_ints, NULL); gsl_bst_trav trav; int *p; int i; size_t nodes; /* generate data to be inserted in tree */ gen_int_array(n, order, data, r); for (i = 0; i < (int) n; ++i) sorted_data[i] = data[i]; gsl_sort_int(sorted_data, 1, n); if (order != ORD_RANDOM_DUP) { /* generate random order to delete data from tree */ gen_int_array(n, ORD_RANDOM, data_delete, r); } else { for (i = 0; i < (int) n; ++i) data_delete[i] = sorted_data[i]; } /* insert data */ for (i = 0; i < (int) n; ++i) { p = gsl_bst_insert(&data[i], w); gsl_test(p != NULL, "bst_int %s[n=%zu,order=%d] insert i=%d", gsl_bst_name(w), n, order, i); } if (order != ORD_RANDOM_DUP) { nodes = gsl_bst_nodes(w); gsl_test(nodes != n, "bst_int %s[n=%zu,order=%d] after insertion count = %zu/%zu", gsl_bst_name(w), n, order, nodes, n); } /* test data was inserted and can be found */ for (i = 0; i < (int) n; ++i) { p = gsl_bst_find(&data[i], w); gsl_test(*p != data[i], "bst_int %s[n=%zu,order=%d] find [%d,%d]", gsl_bst_name(w), n, order, *p, data[i]); p = gsl_bst_trav_find(&data[i], &trav, w); gsl_test(p == NULL, "bst_int %s[n=%zu,order=%d] trav_find unable to find item %d", gsl_bst_name(w), n, order, data[i]); check_traverser(n, order, &trav, data[i], "post-insertion", w); } /* traverse tree in-order */ p = gsl_bst_trav_first(&trav, w); i = 0; while (p != NULL) { int *q = gsl_bst_trav_cur(&trav); gsl_test(*p != sorted_data[i], "bst_int %s[n=%zu,order=%d] traverse i=%d [%d,%d]", gsl_bst_name(w), n, order, i, *p, sorted_data[i]); gsl_test(*p != *q, "bst_int %s[n=%zu,order=%d] traverse cur i=%d [%d,%d]", gsl_bst_name(w), n, order, i, *p, *q); p = gsl_bst_trav_next(&trav); ++i; } gsl_test(i != (int) n, "bst_int %s[n=%zu,order=%d] traverse number=%d", gsl_bst_name(w), n, order, i); /* traverse tree in reverse order */ p = gsl_bst_trav_last(&trav, w); i = n - 1; while (p != NULL) { int *q = gsl_bst_trav_cur(&trav); gsl_test(*p != sorted_data[i], "bst_int %s[n=%zu,order=%d] traverse reverse i=%d [%d,%d]", gsl_bst_name(w), n, order, i, *p, sorted_data[i]); gsl_test(*p != *q, "bst_int %s[n=%zu,order=%d] traverse reverse cur i=%d [%d,%d]", gsl_bst_name(w), n, order, i, *p, *q); p = gsl_bst_trav_prev(&trav); --i; } gsl_test(i != -1, "bst_int %s[n=%zu,order=%d] traverse reverse number=%d", gsl_bst_name(w), n, order, i); /* test traversal during tree modifications */ for (i = 0; i < (int) n; ++i) { gsl_bst_trav x, y, z; gsl_bst_trav_find(&data[i], &x, w); check_traverser(n, order, &x, data[i], "pre-deletion", w); if (data[i] == data_delete[i]) continue; p = gsl_bst_remove(&data_delete[i], w); gsl_test(*p != data_delete[i], "bst_int %s[n=%zu,order=%d] remove i=%d [%d,%d]", gsl_bst_name(w), n, order, i, *p, data_delete[i]); p = gsl_bst_trav_copy(&y, &x); gsl_test(*p != data[i], "bst_int %s[n=%zu,order=%d] copy i=%d [%d,%d]", gsl_bst_name(w), n, order, i, *p, data[i]); /* re-insert item */ p = gsl_bst_trav_insert(&data_delete[i], &z, w); check_traverser(n, order, &x, data[i], "post-deletion", w); check_traverser(n, order, &y, data[i], "copied", w); check_traverser(n, order, &z, data_delete[i], "insertion", w); #if 0 /* delete again */ gsl_bst_remove(&data[i], w); #endif } /* emmpty tree */ gsl_bst_empty(w); nodes = gsl_bst_nodes(w); gsl_test(nodes != 0, "bst_int %s[n=%zu,order=%d] empty count = %zu", gsl_bst_name(w), n, order, nodes); gsl_bst_free(w); free(data); free(data_delete); free(sorted_data); } static void test_bst(const gsl_bst_type * T, gsl_rng * r) { enum array_order order; for (order = 0; order < ORD_END_NODUP; ++order) { test_bst_int(50, T, order, r); test_bst_int(100, T, order, r); test_bst_int(500, T, order, r); } } int main(void) { gsl_rng * r = gsl_rng_alloc(gsl_rng_default); test_bst(gsl_bst_avl, r); test_bst(gsl_bst_rb, r); gsl_rng_free(r); exit (gsl_test_summary()); } gsl/bst/trav.c0000644000175000017500000000772513536675317011660 0ustar eddedd/* trav.c * * Copyright (C) 2018 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include int gsl_bst_trav_init(gsl_bst_trav * trav, const gsl_bst_workspace * w) { int status = (w->type->trav_init)((void *) &trav->trav_data, (const void *) &w->table); trav->type = w->type; return status; } /* gsl_bst_trav_first() Initialize traverser to least-valued item in tree and return a pointer to it. Return NULL if tree has no nodes. */ void * gsl_bst_trav_first(gsl_bst_trav * trav, const gsl_bst_workspace * w) { trav->type = w->type; return (w->type->trav_first)((void *) &trav->trav_data, (const void *) &w->table); } /* gsl_bst_trav_last() Initializes |trav| for |tree| and selects and returns a pointer to its greatest-valued item. Returns NULL if |tree| contains no nodes. */ void * gsl_bst_trav_last (gsl_bst_trav * trav, const gsl_bst_workspace * w) { trav->type = w->type; return (w->type->trav_last)((void * ) &trav->trav_data, (const void *) &w->table); } /* gsl_bst_trav_find() Searches for |item| in tree. If found, initializes |trav| to the item found and returns the item as well. If there is no matching item, initializes |trav| to the null item and returns |NULL|. */ void * gsl_bst_trav_find (const void * item, gsl_bst_trav * trav, const gsl_bst_workspace * w) { trav->type = w->type; return (w->type->trav_find)(item, (void * ) &trav->trav_data, (const void *) &w->table); } /* gsl_bst_trav_insert() Attempts to insert |item| into tree. If |item| is inserted successfully, it is returned and |trav| is initialized to its location. If a duplicate is found, it is returned and |trav| is initialized to its location. No replacement of the item occurs. If a memory allocation failure occurs, |NULL| is returned and |trav| is initialized to the null item. */ void * gsl_bst_trav_insert (void * item, gsl_bst_trav * trav, gsl_bst_workspace * w) { trav->type = w->type; return (w->type->trav_insert)(item, (void * ) &trav->trav_data, (void *) &w->table); } /* gsl_bst_trav_copy() Copy traverser 'src' into 'dest' */ void * gsl_bst_trav_copy(gsl_bst_trav * dest, const gsl_bst_trav * src) { dest->type = src->type; return (src->type->trav_copy)((void * ) &dest->trav_data, (const void *) &src->trav_data); } /* gsl_bst_trav_next() Update traverser to point to next sequential node, and return a pointer to its data */ void * gsl_bst_trav_next(gsl_bst_trav * trav) { return (trav->type->trav_next)((void *) &trav->trav_data); } /* gsl_bst_trav_prev() Update traverser to point to previous sequential node, and return a pointer to its data */ void * gsl_bst_trav_prev(gsl_bst_trav * trav) { return (trav->type->trav_prev)((void *) &trav->trav_data); } /* gsl_bst_trav_cur() Return a pointer to data of current traverser node */ void * gsl_bst_trav_cur(const gsl_bst_trav * trav) { return (trav->type->trav_cur)((const void *) &trav->trav_data); } /* gsl_bst_trav_replace() Replace current item in trav with new_item and returns the item replaced. The new item must not change the ordering of the tree. */ void * gsl_bst_trav_replace (gsl_bst_trav * trav, void * new_item) { return (trav->type->trav_replace)((void * ) &trav->trav_data, new_item); } gsl/THANKS0000644000175000017500000004163313536675317010657 0ustar eddedd* Jim McElwaine for very useful comments and discussions about the dilogarithm and related functions. * Simone Piccardi for extensions to the histogram routines, and providing the ntuple code * Nelson H. F. Beebe for references and testing the software on many different platforms. * Tim Mooney for IEEE support for Tru64, AIX, IRIX, fixes for odes, and testing * Thomas Walter for heapsort routines, cholesky decomposition, bug reports and useful suggestions * Jorma Olavi Tähtinen for complex arithmetic functions * Barak Pearlmutter * Frederick W. Wheeler * Bernd Petrovitsch * Jacek Pliszka for bug report * Michele Clark for bug report * Jeffrey Russell Horner for information on CBLAS * Rahul V. Herwadkar for testing * Trond Bo for bug report * Jan Kasprzak for bug report * David Kaelbling for testing * Mark Levedahl for bug report * David Billinghurst for testing * Jean-Bernard ADDOR for bug report * Fabrice Rossi bug reports and suggestions * Paul Walmsley for bug report and patch for fixing matmult. * Dave Morrison for advice on build procedure and various patches, the diff/ numerical differentiation routines, multmin documentation, and Landau distribution * Brett Viren for debugging qpsrt.c. * Christopher Gabriel contributed the gsl-config and gsl.m4 we use. * C M Murphy patch to fix up consts in header files * Bracy H. Elton for correcting a reference in the FFT Algorithms document * Tadhg O'Meara for finding a bug in gsl-randist * Steve Robbins patch to work around FP_RND problems on Tru64, testing and other patches., bug fix for nm_simplex algorithm. * John Fisher testing on powerpc linux and support for fp-ppclinux.c * OKUJI Yoshinori for a patch for fp-x86linux.c for libc5 * Pablo Bianucci for patches to complex matrix/vectors * Toby White for several patches and improvements to the design, OpenBSD support * Bill Brower for bug report on gsl.m4 * Vladimir Kushnir for ieee support for FreeBSD * F J Franklin for test reports and debugging * Keith Briggs for bug reports and code for the skewed Levy alpha-stable variates gsl_ran_levy_skew * Vince for permutation iterator functions * Henry Sobotka for ieee support for OS/2 and bug fixes * Remy Bruno for bug fix * M. Lavasani for bug reports and testing on HPUX11 * Jason Beegan for NetBSD support * Zeger Knops for bug fix * Rodney Sparapani for Darwin support * Ramin Nakisa for bug reports * Achim Gaedke for bug reports and suggestions, additional histogram code, PyGSL python interface, 2d histogram statistics, bug fixes for simulated annealing * Eric Rose for bug report and useful tip on casting * M Joonas Pihlaja for bug reports * Albert Chin for bug reports, patches, and providing HP-UX platforms for testing * Asterio Gonzalez for a bug report for multmin * Carlo Perassi for implementing the random number generators in Knuth's Seminumerical Algorithms, 3rd Ed. * Dan, Ho-Jin for divided differences interpolation routines * Stefan Koch for useful bug reports and fixes for the special functions * Szymon Jaroszewicz for the combinations modules and bug reports * Theis Peter Hansen fixed unchecked status values in multiroots * Jungemann Markus documentation fixes * Hans E. Plesser (hans dot plesser at itf dot nlh dot no) more reliable implementation of gamma_inc, multifit bug fixes * Arin Chaudhuri documentation bug reports * Karsten Howes siman bug fix * Vladimir Savichev bug reports * Jochen Küpper doc bug fixes, additional constants * John Ketchum for bug reports for the blas library * Nicolas Darnis additional permutation functions * Jeff Spirko patch for 1d minimization * David Necas (Yeti) bug reports and patches for linear algebra, interpolation, additional tridiagonal solvers * for bug report * Christian T. Steigies for documentation bug report * Atakan Gurkan for bug reports and patches for the random number generators. * David Ronis for bug reports and patches * Christian T. Steigies for a documentation fix * Teun Burgers improvements to configure script * Olivier Andrieu bug report for Chebyschev memory leak * Hiroshi Imamura extension to psi(1+iy) * Taliver Heath keep track of best solution in siman_solve. * Trevor Blackwell bug report test case for SVD d_n = 0, bug fix to mt19937 generator * Nicolas Bock documentation bug report * Alan Aspuru-Guzik documentation bug report * Peter S. Christopher bug fix for simulated annealing * Gene Carter build shared libraries on MacOS X * Fabian Jakobs fixed a bug in gsl_linalg_bidiag_unpack_B, and documentation bug-fix for blas * Gavin Crooks documentation bug fix, dirichlet distribution, multinomial distribution * Gert Van den Eynde gsl_ldexp, gsl_frexp, gsl_fcmp * Reinhold Bader , fixes for Hitachi SR8000 * Slaven Peles , build options for Compaq cc, doc bug fix * David Favis-Mortlock bug report for gsl_rng_taus2 seeding * Alexander Babansky documentation bug report for Ei(x) * Tiago de Paula Peixoto bug report for multifit memory allocation * Adam Johansen bug report for eigenvalue routines * Wolfgang Hoermann bug report for niederreiter qrng * Jerome Houdayer bug report for taus seeding * Conrad Curry bug and documentation reports * Erik Schnetter documentation bug reports * Maarten De Munck bug fix for vector/matrix get * Axel Hutt bug fix for QAWC integration, documentation bug fix * Martin Jansche various bug reports * Gregory Soyez documentation bug report * Attilio Rivoldini bug report for CBLAS tests * W.M. Vissers bug report for gsl_complex_arccsc_real * Paolo Redaelli bug report for chebyshev functions * Andrew Howard bug report for gsl_ran_discrete * Heiko Bauke bug reports and patches for random number generators * Vincent Sacksteder bug reports for MSVC7 * Peter Verveer improvement to memory usage of MINPACK routines * Mario Pernici bug fix for gsl_combination_valid and new function gsl_permutation_memcpy, doc fix for bessel functions, bug fix for gsl_sf_psi_1_int, bug report for gsl_permutation_canonical_to_linear, linalg QRPT bug reports and fixes, and many other corrections. * Fabio Brugnara provided a much-needed bug fix for the conjugate gradient algorithm multidimensional minimisers. * Krzysztof Pachucki bug report for gsl_sf_hypergU_int * Carsten Svaneborg documentation bug report * Liguo Song documentation bug report * Carlo Ferrigno bug report for CGS units * Giulio Bottazzi many useful bug reports * Olaf Lenz rng frwite/fread, bug reports * Jamie Lokier for testing * Grant Lythe documentation bug report * Jussi Piitulainen documentation bug report * Aaron Schweiger bug report for SVD/column balancing * Carlo Ferrigno bug report about const problems * Jussi Piitulainen documenation bug report for gsl_ran_hypergeometric_pdf * Bas Zoetekouw documentation bug report * Paul Sydney bug report and patch for min/brent.c * Alexei Podtelezhnikov patch for sphere.c * Neil Bushong documentation typo bug report * Brad Bell documentation bug report * Andreas Schneider <1@c07.de> bug report for R250 * Luigi Ballabio fix m4 quoting in gsl.m4 * Zbigniew Koza documentation bug fix for odes * James Scott fix for linalg tests on MSVC * Rémi Butel fixes for multimin overflow conditions * Andris Pavenis Makefile fix for EXEEXT * Daniel Webb bug report for potential cspline division by zero * Ewald Stamp bugfix for vector/swap_source.c * Joerg Wensch LQ decompositions * Jason Stover patch for cdf/beta.c, inverse cumulative distributions, discrete cumulative distributions * Ralph Menikoff bug report for gsl_sf_expint_scaled * Yoshiki documentation bug report * Nigel Lowry documentation proofreading * Giulio Bottazzi cdf for exponential power distribution, bug reports * Tuomo Keskitalo many improvements to ode-initval * Britton Kerin documentation bug reports * Patricio Rojo patch for numerical instability in interpolation integrate function * Damir Herman improved accuracy of histogram range calculations * John Salmon bug report for gsl_cheb_eval_n_err * Dirk Eddelbuettel for bug reports and testing, and maintaining the Debian package for GSL. * Jari Häkkinen for svd bug reports, rng bug reports * Marco Canini patch for IXP2400 Xscale * Ben Klemens bug report for sorting vectors with NANs * Peter Brommer bug report and patch for Brent minimisation algorithm. * Gabriel Withington typo in docs * Stewart V. Wright patch for missing spline functions * Richard Mathar additional Debye functions n=5,6, handle case x==1 in 2F1. * Stefan Jahn bug fix for periodic cubic splines with n=3 * Yoram Burak bug report for scaled bessel function In_scaled * Mario Santos bug report for spherical bessel function * Vincent Plagnol bug report for gsl_randist_binomial_pdf * John Houck bug report for gsl_sf_synchrotron_1 * Jochen Voss ziggurat gaussian generator * John D Lamb Marsaglia-Tsang gamma generator, bug reports * Giulio Bottazzi improved exponential power distribution and gsl_multifit_linear_est * Charles Karney added Leva bounds to gaussian ratio method generator * Torquil Sorenson documentation bug fixes for FFTs * Yajun Wang - bug report for multifit n

- patch for Macos X on Intel * Lowell Johnson - implementation of mathieu functions * Brian Gladman - useful bug reports * B. Lazarov - compilation bug report for randist * Harald Moseby - special functions bug reports * Neil Harvey - bug report for beta pdf * Felipe G. Nievinski - documentation bug report * Daisuke TOMINAGA - Japanese translation of manual and numerous corrections * Andoline Bucciolini - documentation bug for BLAS * Daniel Falster bug report for fdist_Pinv * Giancarlo Marra bug report for M_PI_4 * Alan Irwin for sample implementation of improved BFGS algorithm. * Lionel Barnett for pointing out an error in the elliptic integrals * Ed Smith-Rowland <3dw4rd@verizon.net> patch for laguerre polynomials * Katrin Wolff bug report for Lambert W function * "Heikki Orsila " cleaning up siman code * Eugene Loh bug report for gsl_log1p * Richard Smith bug report and suggestions for correct use of isfinite * Marco Lombardi bug report for svd * I J Wilson bug report for dirichlet function * Justin Lenzo bug reports for vector/matrix tests. * Sebastian Queißer bug report for gsl_cdf_beta_Pinv * Andries Brouwer bug report for underflow in symmetric eigenvalues * Mingxi Wu bug report for multinomial pdf * Chris Mihelich bug reports and suggestions for gsl_ldexp and gsl_frexp * Frank Reininghaus complex polynomial evaluation and ode improvements * Jason Coy optimisation for dwt.c * Richard Guenther bug reports * Stijn van Dongen bug fix for overflow in gsl_cdf_hypergeometric_{P,Q} * Claude Dion documentation bug reports * Michael Kuklik bug report for simplex * Paul Accisano, bug report and fix for cyclic solver * Thomas Weber bug and patch for interp accelerator * Lori A. Pritchett-Sheats bug report for vegas chisq. * Frank Wang bug report for gsl_ran_gamma_knuth. * Peter Johansson fix for make install prefix=PREFIX * Taneli Kalvas bug report for odes * Marco Maggi bug fix for gsl_blas_drotm * Mateus Araújo Santos - bug fix for LM set * James Howse - quad_golden minimisation algorithm * Marc JOURDAIN - polynomial derivatives function * Andrew Steiner - for bug reports * Ettl Martin - bug report, rk4 memory * Yevgeniy Naumovich - bspline allocators fix * Huan Wu - gsl_linalg_complex_cholesky_invert * Ralf Wildenhues - numerous proofreading corrections * Thomas Tanner - bug report for gsl_sf_beta_inc * Sam Mason - bug fix for gsl_pow_int * José Luis García Pallero - error checking for GSL cblas * Teemu Ikonen patch for gsl_ran_chisq_pdf * Evgeny Kurbatov - patch for error handling in interpolation routines * Michel Kern - fix for singular Jacobian in Newton solver * Nikolay Simakov - bug report for gsl_eigen_jacobi * Jim Ward - numerous bug reports and useful suggestions * Josh Neil & Curt Hash - patch for negative binomial * Maximilian Treiber - bug report for gsl_sf_lncosh * Martin Landriau bug report for 3j coupling * Grigory I. Rubtsov - extend range of 3j * Matthias Sitte - bug report and patch for failing complex matrix IO routines * Raymond Rogers - bug fixes for confluent hypergeometric functions gsl/fft/0000755000175000017500000000000014057135461010502 5ustar eddeddgsl/fft/real_radix2.c0000644000175000017500000000753713536674414013065 0ustar eddedd/* fft/real_radix2.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION(gsl_fft_real,radix2_transform) (BASE data[], const size_t stride, const size_t n) { int result ; size_t p, p_1, q; size_t i; size_t logn = 0; int status; if (n == 1) /* identity operation */ { return 0 ; } /* make sure that n is a power of 2 */ result = fft_binary_logn(n) ; if (result == -1) { GSL_ERROR ("n is not a power of 2", GSL_EINVAL); } else { logn = result ; } /* bit reverse the ordering of input data for decimation in time algorithm */ status = FUNCTION(fft_real,bitreverse_order)(data, stride, n, logn) ; /* apply fft recursion */ p = 1; q = n ; for (i = 1; i <= logn; i++) { size_t a, b; p_1 = p ; p = 2 * p ; q = q / 2 ; /* a = 0 */ for (b = 0; b < q; b++) { ATOMIC t0_real = VECTOR(data,stride,b*p) + VECTOR(data,stride,b*p + p_1) ; ATOMIC t1_real = VECTOR(data,stride,b*p) - VECTOR(data,stride,b*p + p_1) ; VECTOR(data,stride,b*p) = t0_real ; VECTOR(data,stride,b*p + p_1) = t1_real ; } /* a = 1 ... p_{i-1}/2 - 1 */ { ATOMIC w_real = 1.0; ATOMIC w_imag = 0.0; const double theta = - 2.0 * M_PI / p; const ATOMIC s = sin (theta); const ATOMIC t = sin (theta / 2.0); const ATOMIC s2 = 2.0 * t * t; for (a = 1; a < (p_1)/2; a++) { /* trignometric recurrence for w-> exp(i theta) w */ { const ATOMIC tmp_real = w_real - s * w_imag - s2 * w_real; const ATOMIC tmp_imag = w_imag + s * w_real - s2 * w_imag; w_real = tmp_real; w_imag = tmp_imag; } for (b = 0; b < q; b++) { ATOMIC z0_real = VECTOR(data,stride,b*p + a) ; ATOMIC z0_imag = VECTOR(data,stride,b*p + p_1 - a) ; ATOMIC z1_real = VECTOR(data,stride,b*p + p_1 + a) ; ATOMIC z1_imag = VECTOR(data,stride,b*p + p - a) ; /* t0 = z0 + w * z1 */ ATOMIC t0_real = z0_real + w_real * z1_real - w_imag * z1_imag; ATOMIC t0_imag = z0_imag + w_real * z1_imag + w_imag * z1_real; /* t1 = z0 - w * z1 */ ATOMIC t1_real = z0_real - w_real * z1_real + w_imag * z1_imag; ATOMIC t1_imag = z0_imag - w_real * z1_imag - w_imag * z1_real; VECTOR(data,stride,b*p + a) = t0_real ; VECTOR(data,stride,b*p + p - a) = t0_imag ; VECTOR(data,stride,b*p + p_1 - a) = t1_real ; VECTOR(data,stride,b*p + p_1 + a) = -t1_imag ; } } } if (p_1 > 1) { for (b = 0; b < q; b++) { /* a = p_{i-1}/2 */ VECTOR(data,stride,b*p + p - p_1/2) *= -1 ; } } } return 0; } gsl/fft/hc_pass_4.c0000644000175000017500000001466213536674414012531 0ustar eddedd/* fft/hc_pass_4.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void FUNCTION(fft_halfcomplex,pass_4) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[]) { size_t i, j, k, k1, jump; size_t factor, q, m, product_1; i = 0; j = 0; factor = 4; m = n / factor; q = n / product; product_1 = product / factor; jump = (factor - 1) * q; for (k1 = 0; k1 < product_1; k1++) { const size_t from0 = 4 * k1 * q; const size_t from1 = from0 + 2 * q - 1; const size_t from2 = from1 + 2 * q; const ATOMIC z0_real = VECTOR(in,istride,from0); const ATOMIC z1_real = VECTOR(in,istride,from1); const ATOMIC z1_imag = VECTOR(in,istride,from1 + 1); const ATOMIC z2_real = VECTOR(in,istride,from2); const ATOMIC t1_real = z0_real + z2_real; const ATOMIC t2_real = 2 * z1_real; const ATOMIC t3_real = z0_real - z2_real; const ATOMIC t4_imag = 2 * z1_imag; const size_t to0 = q * k1; const size_t to1 = to0 + m; const size_t to2 = to1 + m; const size_t to3 = to2 + m; VECTOR(out,ostride,to0) = t1_real + t2_real; VECTOR(out,ostride,to1) = t3_real - t4_imag; VECTOR(out,ostride,to2) = t1_real - t2_real; VECTOR(out,ostride,to3) = t3_real + t4_imag; } if (q == 1) return; for (k = 1; k < (q + 1) / 2; k++) { const ATOMIC w1_real = GSL_REAL(twiddle1[k - 1]); const ATOMIC w1_imag = GSL_IMAG(twiddle1[k - 1]); const ATOMIC w2_real = GSL_REAL(twiddle2[k - 1]); const ATOMIC w2_imag = GSL_IMAG(twiddle2[k - 1]); const ATOMIC w3_real = GSL_REAL(twiddle3[k - 1]); const ATOMIC w3_imag = GSL_IMAG(twiddle3[k - 1]); for (k1 = 0; k1 < product_1; k1++) { const size_t from0 = 4 * k1 * q + 2 * k - 1; const size_t from1 = from0 + 2 * q; const size_t from2 = 4 * k1 * q - 2 * k + 2 * q - 1; const size_t from3 = from2 + 2 * q; const ATOMIC z0_real = VECTOR(in,istride,from0); const ATOMIC z0_imag = VECTOR(in,istride,from0 + 1); const ATOMIC z1_real = VECTOR(in,istride,from1); const ATOMIC z1_imag = VECTOR(in,istride,from1 + 1); const ATOMIC z2_real = VECTOR(in,istride,from3); const ATOMIC z2_imag = -VECTOR(in,istride,from3 + 1); const ATOMIC z3_real = VECTOR(in,istride,from2); const ATOMIC z3_imag = -VECTOR(in,istride,from2 + 1); /* compute x = W(4) z */ /* t1 = z0 + z2 */ const ATOMIC t1_real = z0_real + z2_real; const ATOMIC t1_imag = z0_imag + z2_imag; /* t2 = z1 + z3 */ const ATOMIC t2_real = z1_real + z3_real; const ATOMIC t2_imag = z1_imag + z3_imag; /* t3 = z0 - z2 */ const ATOMIC t3_real = z0_real - z2_real; const ATOMIC t3_imag = z0_imag - z2_imag; /* t4 = (z1 - z3) */ const ATOMIC t4_real = (z1_real - z3_real); const ATOMIC t4_imag = (z1_imag - z3_imag); /* x0 = t1 + t2 */ const ATOMIC x0_real = t1_real + t2_real; const ATOMIC x0_imag = t1_imag + t2_imag; /* x1 = t3 + i t4 */ const ATOMIC x1_real = t3_real - t4_imag; const ATOMIC x1_imag = t3_imag + t4_real; /* x2 = t1 - t2 */ const ATOMIC x2_real = t1_real - t2_real; const ATOMIC x2_imag = t1_imag - t2_imag; /* x3 = t3 - i t4 */ const ATOMIC x3_real = t3_real + t4_imag; const ATOMIC x3_imag = t3_imag - t4_real; const size_t to0 = k1 * q + 2 * k - 1; const size_t to1 = to0 + m; const size_t to2 = to1 + m; const size_t to3 = to2 + m; VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to0 + 1) = x0_imag; VECTOR(out,ostride,to1) = w1_real * x1_real - w1_imag * x1_imag; VECTOR(out,ostride,to1 + 1) = w1_imag * x1_real + w1_real * x1_imag; VECTOR(out,ostride,to2) = w2_real * x2_real - w2_imag * x2_imag; VECTOR(out,ostride,to2 + 1) = w2_imag * x2_real + w2_real * x2_imag; /* to3 = w3 * x3 */ VECTOR(out,ostride,to3) = w3_real * x3_real - w3_imag * x3_imag; VECTOR(out,ostride,to3 + 1) = w3_real * x3_imag + w3_imag * x3_real; } } if (q % 2 == 1) return; for (k1 = 0; k1 < product_1; k1++) { const size_t from0 = 4 * k1 * q + q - 1; const size_t from1 = from0 + 2 * q; const ATOMIC z0_real = VECTOR(in,istride,from0); const ATOMIC z0_imag = VECTOR(in,istride,from0 + 1); const ATOMIC z1_real = VECTOR(in,istride,from1); const ATOMIC z1_imag = VECTOR(in,istride,from1 + 1); const ATOMIC t1_real = sqrt (2.0) * (z0_imag + z1_imag); const ATOMIC t2_real = sqrt (2.0) * (z0_real - z1_real); const ATOMIC x0_real = 2 * (z0_real + z1_real); const ATOMIC x1_real = t2_real - t1_real; const ATOMIC x2_real = 2 * (z1_imag - z0_imag); const ATOMIC x3_real = -(t2_real + t1_real); const size_t to0 = k1 * q + q - 1; const size_t to1 = to0 + m; const size_t to2 = to1 + m; const size_t to3 = to2 + m; VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to1) = x1_real; VECTOR(out,ostride,to2) = x2_real; VECTOR(out,ostride,to3) = x3_real; } return; } gsl/fft/c_init.c0000644000175000017500000001131013536674414012116 0ustar eddedd/* fft/c_init.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ TYPE(gsl_fft_complex_wavetable) * FUNCTION(gsl_fft_complex_wavetable,alloc) (size_t n) { int status ; size_t i; size_t n_factors; size_t t, product, product_1, q; double d_theta; TYPE(gsl_fft_complex_wavetable) * wavetable ; if (n == 0) { GSL_ERROR_VAL ("length n must be positive integer", GSL_EDOM, 0); } wavetable = (TYPE(gsl_fft_complex_wavetable) *) malloc(sizeof(TYPE(gsl_fft_complex_wavetable))); if (wavetable == NULL) { GSL_ERROR_VAL ("failed to allocate struct", GSL_ENOMEM, 0); } wavetable->trig = (TYPE(gsl_complex) *) malloc (n * sizeof (TYPE(gsl_complex))); if (wavetable->trig == NULL) { free(wavetable) ; /* error in constructor, prevent memory leak */ GSL_ERROR_VAL ("failed to allocate trigonometric lookup table", GSL_ENOMEM, 0); } wavetable->n = n ; status = fft_complex_factorize (n, &n_factors, wavetable->factor); if (status) { /* exception in constructor, avoid memory leak */ free (wavetable->trig); free (wavetable); GSL_ERROR_VAL ("factorization failed", GSL_EFACTOR, 0); }; wavetable->nf = n_factors; d_theta = -2.0 * M_PI / ((double) n); t = 0; product = 1; for (i = 0; i < n_factors; i++) { size_t j; const size_t factor = wavetable->factor[i]; wavetable->twiddle[i] = wavetable->trig + t; product_1 = product; /* product_1 = p_(i-1) */ product *= factor; q = n / product; for (j = 1; j < factor; j++) { size_t k; size_t m = 0; for (k = 1; k <= q; k++) { double theta; m = m + j * product_1; m = m % n; theta = d_theta * m; /* d_theta*j*k*p_(i-1) */ GSL_REAL(wavetable->trig[t]) = cos (theta); GSL_IMAG(wavetable->trig[t]) = sin (theta); t++; } } } if (t > n) { /* exception in constructor, avoid memory leak */ free (wavetable->trig); free (wavetable); GSL_ERROR_VAL ("overflowed trigonometric lookup table", GSL_ESANITY, 0); } return wavetable; } TYPE(gsl_fft_complex_workspace) * FUNCTION(gsl_fft_complex_workspace,alloc) (size_t n) { TYPE(gsl_fft_complex_workspace) * workspace ; if (n == 0) { GSL_ERROR_VAL ("length n must be positive integer", GSL_EDOM, 0); } workspace = (TYPE(gsl_fft_complex_workspace) *) malloc(sizeof(TYPE(gsl_fft_complex_workspace))); if (workspace == NULL) { GSL_ERROR_VAL ("failed to allocate struct", GSL_ENOMEM, 0); } workspace->n = n ; workspace->scratch = (BASE *) malloc (2 * n * sizeof (BASE)); if (workspace->scratch == NULL) { free(workspace) ; /* error in constructor, prevent memory leak */ GSL_ERROR_VAL ("failed to allocate scratch space", GSL_ENOMEM, 0); } return workspace; } void FUNCTION(gsl_fft_complex_wavetable,free) (TYPE(gsl_fft_complex_wavetable) * wavetable) { RETURN_IF_NULL (wavetable); /* release trigonometric lookup tables */ free (wavetable->trig); wavetable->trig = NULL; free (wavetable) ; } void FUNCTION(gsl_fft_complex_workspace,free) (TYPE(gsl_fft_complex_workspace) * workspace) { RETURN_IF_NULL (workspace); /* release scratch space */ free (workspace->scratch); workspace->scratch = NULL; free (workspace) ; } int FUNCTION(gsl_fft_complex,memcpy) (TYPE(gsl_fft_complex_wavetable) * dest, TYPE(gsl_fft_complex_wavetable) * src) { int i, n, nf ; if (dest->n != src->n) { GSL_ERROR ("length of src and dest do not match", GSL_EINVAL); } n = dest->n ; nf = dest->nf ; memcpy(dest->trig, src->trig, n * sizeof (double)) ; for (i = 0 ; i < nf ; i++) { dest->twiddle[i] = dest->trig + (src->twiddle[i] - src->trig) ; } return 0 ; } gsl/fft/real_pass_5.c0000644000175000017500000002437213536674414013062 0ustar eddedd/* fft/real_pass_5.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void FUNCTION(fft_real,pass_5) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[], const TYPE(gsl_complex) twiddle4[]) { size_t k, k1; const size_t factor = 5; const size_t m = n / factor; const size_t q = n / product; const size_t product_1 = product / factor; const ATOMIC sina = sin (2.0 * M_PI / 5.0); const ATOMIC sinb = sin (2.0 * M_PI / 10.0); for (k1 = 0; k1 < q; k1++) { const size_t from0 = k1 * product_1; const size_t from1 = from0 + m; const size_t from2 = from1 + m; const size_t from3 = from2 + m; const size_t from4 = from3 + m; const ATOMIC z0_real = VECTOR(in,istride,from0); const ATOMIC z1_real = VECTOR(in,istride,from1); const ATOMIC z2_real = VECTOR(in,istride,from2); const ATOMIC z3_real = VECTOR(in,istride,from3); const ATOMIC z4_real = VECTOR(in,istride,from4); /* t1 = z1 + z4 */ const ATOMIC t1_real = z1_real + z4_real; /* t2 = z2 + z3 */ const ATOMIC t2_real = z2_real + z3_real; /* t3 = z1 - z4 */ const ATOMIC t3_real = z1_real - z4_real; /* t4 = z2 - z3 */ const ATOMIC t4_real = z2_real - z3_real; /* t5 = t1 + t2 */ const ATOMIC t5_real = t1_real + t2_real; /* t6 = (sqrt(5)/4)(t1 - t2) */ const ATOMIC t6_real = (sqrt (5.0) / 4.0) * (t1_real - t2_real); /* t7 = z0 - ((t5)/4) */ const ATOMIC t7_real = z0_real - t5_real / 4.0; /* t8 = t7 + t6 */ const ATOMIC t8_real = t7_real + t6_real; /* t9 = t7 - t6 */ const ATOMIC t9_real = t7_real - t6_real; /* t10 = -(sin(2 pi/5) t3 + sin(2 pi/10) t4 ) */ const ATOMIC t10_real = -sina * t3_real - sinb * t4_real; /* t11 = -(sin(2 pi/10) t3 - sin(2 pi/5) t4) */ const ATOMIC t11_real = -sinb * t3_real + sina * t4_real; /* x0 = z0 + t5 */ const ATOMIC x0_real = z0_real + t5_real; /* x1 = t8 + i t10 */ const ATOMIC x1_real = t8_real; const ATOMIC x1_imag = t10_real; /* x2 = t9 + i t11 */ const ATOMIC x2_real = t9_real; const ATOMIC x2_imag = t11_real; const size_t to0 = product * k1; const size_t to1 = to0 + 2 * product_1 - 1; const size_t to2 = to1 + 2 * product_1; VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to1) = x1_real; VECTOR(out,ostride,to1 + 1) = x1_imag; VECTOR(out,ostride,to2) = x2_real; VECTOR(out,ostride,to2 + 1) = x2_imag; } if (product_1 == 1) return; for (k = 1; k < (product_1 + 1) / 2; k++) { const ATOMIC w1_real = GSL_REAL(twiddle1[k - 1]); const ATOMIC w1_imag = -GSL_IMAG(twiddle1[k - 1]); const ATOMIC w2_real = GSL_REAL(twiddle2[k - 1]); const ATOMIC w2_imag = -GSL_IMAG(twiddle2[k - 1]); const ATOMIC w3_real = GSL_REAL(twiddle3[k - 1]); const ATOMIC w3_imag = -GSL_IMAG(twiddle3[k - 1]); const ATOMIC w4_real = GSL_REAL(twiddle4[k - 1]); const ATOMIC w4_imag = -GSL_IMAG(twiddle4[k - 1]); for (k1 = 0; k1 < q; k1++) { const size_t from0 = k1 * product_1 + 2 * k - 1; const size_t from1 = from0 + m; const size_t from2 = from1 + m; const size_t from3 = from2 + m; const size_t from4 = from3 + m; const ATOMIC f0_real = VECTOR(in,istride,from0); const ATOMIC f0_imag = VECTOR(in,istride,from0 + 1); const ATOMIC f1_real = VECTOR(in,istride,from1); const ATOMIC f1_imag = VECTOR(in,istride,from1 + 1); const ATOMIC f2_real = VECTOR(in,istride,from2); const ATOMIC f2_imag = VECTOR(in,istride,from2 + 1); const ATOMIC f3_real = VECTOR(in,istride,from3); const ATOMIC f3_imag = VECTOR(in,istride,from3 + 1); const ATOMIC f4_real = VECTOR(in,istride,from4); const ATOMIC f4_imag = VECTOR(in,istride,from4 + 1); const ATOMIC z0_real = f0_real; const ATOMIC z0_imag = f0_imag; const ATOMIC z1_real = w1_real * f1_real - w1_imag * f1_imag; const ATOMIC z1_imag = w1_real * f1_imag + w1_imag * f1_real; const ATOMIC z2_real = w2_real * f2_real - w2_imag * f2_imag; const ATOMIC z2_imag = w2_real * f2_imag + w2_imag * f2_real; const ATOMIC z3_real = w3_real * f3_real - w3_imag * f3_imag; const ATOMIC z3_imag = w3_real * f3_imag + w3_imag * f3_real; const ATOMIC z4_real = w4_real * f4_real - w4_imag * f4_imag; const ATOMIC z4_imag = w4_real * f4_imag + w4_imag * f4_real; /* compute x = W(5) z */ /* t1 = z1 + z4 */ const ATOMIC t1_real = z1_real + z4_real; const ATOMIC t1_imag = z1_imag + z4_imag; /* t2 = z2 + z3 */ const ATOMIC t2_real = z2_real + z3_real; const ATOMIC t2_imag = z2_imag + z3_imag; /* t3 = z1 - z4 */ const ATOMIC t3_real = z1_real - z4_real; const ATOMIC t3_imag = z1_imag - z4_imag; /* t4 = z2 - z3 */ const ATOMIC t4_real = z2_real - z3_real; const ATOMIC t4_imag = z2_imag - z3_imag; /* t5 = t1 + t2 */ const ATOMIC t5_real = t1_real + t2_real; const ATOMIC t5_imag = t1_imag + t2_imag; /* t6 = (sqrt(5)/4)(t1 - t2) */ const ATOMIC t6_real = (sqrt (5.0) / 4.0) * (t1_real - t2_real); const ATOMIC t6_imag = (sqrt (5.0) / 4.0) * (t1_imag - t2_imag); /* t7 = z0 - ((t5)/4) */ const ATOMIC t7_real = z0_real - t5_real / 4.0; const ATOMIC t7_imag = z0_imag - t5_imag / 4.0; /* t8 = t7 + t6 */ const ATOMIC t8_real = t7_real + t6_real; const ATOMIC t8_imag = t7_imag + t6_imag; /* t9 = t7 - t6 */ const ATOMIC t9_real = t7_real - t6_real; const ATOMIC t9_imag = t7_imag - t6_imag; /* t10 = - (sin(2 pi/5) t3 + sin(2 pi/10) t4) */ const ATOMIC t10_real = -sina * t3_real - sinb * t4_real; const ATOMIC t10_imag = -sina * t3_imag - sinb * t4_imag; /* t11 = -(sin(2 pi/10) t3 - sin(2 pi/5) t4) */ const ATOMIC t11_real = -sinb * t3_real + sina * t4_real; const ATOMIC t11_imag = -sinb * t3_imag + sina * t4_imag; /* x0 = z0 + t5 */ const ATOMIC x0_real = z0_real + t5_real; const ATOMIC x0_imag = z0_imag + t5_imag; /* x1 = t8 + i t10 */ const ATOMIC x1_real = t8_real - t10_imag; const ATOMIC x1_imag = t8_imag + t10_real; /* x2 = t9 + i t11 */ const ATOMIC x2_real = t9_real - t11_imag; const ATOMIC x2_imag = t9_imag + t11_real; /* x3 = t9 - i t11 */ const ATOMIC x3_real = t9_real + t11_imag; const ATOMIC x3_imag = t9_imag - t11_real; /* x4 = t8 - i t10 */ const ATOMIC x4_real = t8_real + t10_imag; const ATOMIC x4_imag = t8_imag - t10_real; const size_t to0 = k1 * product + 2 * k - 1; const size_t to1 = to0 + 2 * product_1; const size_t to2 = to1 + 2 * product_1; const size_t to3 = 2 * product_1 - 2 * k + k1 * product - 1; const size_t to4 = to3 + 2 * product_1; VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to0 + 1) = x0_imag; VECTOR(out,ostride,to1) = x1_real; VECTOR(out,ostride,to1 + 1) = x1_imag; VECTOR(out,ostride,to2) = x2_real; VECTOR(out,ostride,to2 + 1) = x2_imag; VECTOR(out,ostride,to3) = x4_real; VECTOR(out,ostride,to3 + 1) = -x4_imag; VECTOR(out,ostride,to4) = x3_real; VECTOR(out,ostride,to4 + 1) = -x3_imag; } } if (product_1 % 2 == 1) return; for (k1 = 0; k1 < q; k1++) { const size_t from0 = k1 * product_1 + product_1 - 1; const size_t from1 = from0 + m; const size_t from2 = from1 + m; const size_t from3 = from2 + m; const size_t from4 = from3 + m; const ATOMIC z0_real = VECTOR(in,istride,from0); const ATOMIC z1_real = VECTOR(in,istride,from1); const ATOMIC z2_real = VECTOR(in,istride,from2); const ATOMIC z3_real = VECTOR(in,istride,from3); const ATOMIC z4_real = VECTOR(in,istride,from4); const ATOMIC t1 = z1_real - z4_real; const ATOMIC t2 = z1_real + z4_real; const ATOMIC t3 = z2_real - z3_real; const ATOMIC t4 = z2_real + z3_real; const ATOMIC t5 = t1 - t3; const ATOMIC t6 = z0_real + t5 / 4.0; const ATOMIC t7 = (sqrt (5.0) / 4.0) * (t1 + t3); const size_t to0 = k1 * product + product_1 - 1; const size_t to1 = to0 + 2 * product_1; const size_t to2 = to1 + 2 * product_1; VECTOR(out,ostride,to0) = t6 + t7; VECTOR(out,ostride,to0 + 1) = -sinb * t2 - sina * t4; VECTOR(out,ostride,to1) = t6 - t7; VECTOR(out,ostride,to1 + 1) = -sina * t2 + sinb * t4; VECTOR(out,ostride,to2) = z0_real - t5; } return; } gsl/fft/hc_pass_3.c0000644000175000017500000001235713536674414012527 0ustar eddedd/* fft/hc_pass_3.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void FUNCTION(fft_halfcomplex,pass_3) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[]) { size_t i, j, k, k1, jump; size_t factor, q, m, product_1; ATOMIC tau = sqrt (3.0) / 2.0; i = 0; j = 0; factor = 3; m = n / factor; q = n / product; product_1 = product / factor; jump = (factor - 1) * q; for (k1 = 0; k1 < product_1; k1++) { const size_t from0 = 3 * k1 * q; const size_t from1 = from0 + 2 * q - 1; const ATOMIC z0_real = VECTOR(in,istride,from0); const ATOMIC z1_real = VECTOR(in,istride,from1); const ATOMIC z1_imag = VECTOR(in,istride,from1 + 1); const ATOMIC t1_real = 2 * z1_real; const ATOMIC t2_real = z0_real - z1_real; const ATOMIC t3_imag = 2 * tau * z1_imag; const size_t to0 = q * k1; const size_t to1 = to0 + m; const size_t to2 = to1 + m; VECTOR(out,ostride,to0) = z0_real + t1_real; VECTOR(out,ostride,to1) = t2_real - t3_imag; VECTOR(out,ostride,to2) = t2_real + t3_imag; } if (q == 1) return; for (k = 1; k < (q + 1) / 2; k++) { const ATOMIC w1_real = GSL_REAL(twiddle1[k - 1]); const ATOMIC w1_imag = GSL_IMAG(twiddle1[k - 1]); const ATOMIC w2_real = GSL_REAL(twiddle2[k - 1]); const ATOMIC w2_imag = GSL_IMAG(twiddle2[k - 1]); for (k1 = 0; k1 < product_1; k1++) { const size_t from0 = 3 * k1 * q + 2 * k - 1; const size_t from1 = from0 + 2 * q; const size_t from2 = 3 * k1 * q - 2 * k + 2 * q - 1; const ATOMIC z0_real = VECTOR(in,istride,from0); const ATOMIC z0_imag = VECTOR(in,istride,from0 + 1); const ATOMIC z1_real = VECTOR(in,istride,from1); const ATOMIC z1_imag = VECTOR(in,istride,from1 + 1); const ATOMIC z2_real = VECTOR(in,istride,from2); const ATOMIC z2_imag = -VECTOR(in,istride,from2 + 1); /* compute x = W(3) z */ /* t1 = z1 + z2 */ const ATOMIC t1_real = z1_real + z2_real; const ATOMIC t1_imag = z1_imag + z2_imag; /* t2 = z0 - t1/2 */ const ATOMIC t2_real = z0_real - t1_real / 2.0; const ATOMIC t2_imag = z0_imag - t1_imag / 2.0; /* t3 = sin(pi/3)*(z1 - z2) */ const ATOMIC t3_real = tau * (z1_real - z2_real); const ATOMIC t3_imag = tau * (z1_imag - z2_imag); /* x0 = z0 + t1 */ const ATOMIC x0_real = z0_real + t1_real; const ATOMIC x0_imag = z0_imag + t1_imag; /* x1 = t2 + i t3 */ const ATOMIC x1_real = t2_real - t3_imag; const ATOMIC x1_imag = t2_imag + t3_real; /* x2 = t2 - i t3 */ const ATOMIC x2_real = t2_real + t3_imag; const ATOMIC x2_imag = t2_imag - t3_real; const size_t to0 = k1 * q + 2 * k - 1; const size_t to1 = to0 + m; const size_t to2 = to1 + m; VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to0 + 1) = x0_imag; VECTOR(out,ostride,to1) = w1_real * x1_real - w1_imag * x1_imag; VECTOR(out,ostride,to1 + 1) = w1_imag * x1_real + w1_real * x1_imag; VECTOR(out,ostride,to2) = w2_real * x2_real - w2_imag * x2_imag; VECTOR(out,ostride,to2 + 1) = w2_imag * x2_real + w2_real * x2_imag; } } if (q % 2 == 1) return; for (k1 = 0; k1 < product_1; k1++) { const size_t from0 = 3 * k1 * q + q - 1; const size_t from1 = from0 + 2 * q; const ATOMIC z0_real = VECTOR(in,istride,from0); const ATOMIC z0_imag = VECTOR(in,istride,from0 + 1); const ATOMIC z1_real = VECTOR(in,istride,from1); const ATOMIC t1_real = z0_real - z1_real; const ATOMIC t2_real = 2 * tau * z0_imag; const ATOMIC x0_real = 2 * z0_real + z1_real; const ATOMIC x1_real = t1_real - t2_real; const ATOMIC x2_real = -t1_real - t2_real; const size_t to0 = k1 * q + q - 1; const size_t to1 = to0 + m; const size_t to2 = to1 + m; VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to1) = x1_real; VECTOR(out,ostride,to2) = x2_real; } return; } gsl/fft/Makefile.in0000664000175000017500000010741614057135461012562 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = fft ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslfft_la_LIBADD = am_libgslfft_la_OBJECTS = dft.lo fft.lo libgslfft_la_OBJECTS = $(am_libgslfft_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) signals.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslfft.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dft.Plo ./$(DEPDIR)/fft.Plo \ ./$(DEPDIR)/signals.Po ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslfft_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslfft_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslfft.la pkginclude_HEADERS = gsl_fft.h gsl_fft_complex.h gsl_fft_halfcomplex.h gsl_fft_real.h gsl_dft_complex.h gsl_dft_complex_float.h gsl_fft_complex_float.h gsl_fft_halfcomplex_float.h gsl_fft_real_float.h AM_CPPFLAGS = -I$(top_srcdir) libgslfft_la_SOURCES = dft.c fft.c noinst_HEADERS = c_pass.h hc_pass.h real_pass.h signals.h signals_source.c c_main.c c_init.c c_pass_2.c c_pass_3.c c_pass_4.c c_pass_5.c c_pass_6.c c_pass_7.c c_pass_n.c c_radix2.c bitreverse.c bitreverse.h factorize.c factorize.h hc_init.c hc_pass_2.c hc_pass_3.c hc_pass_4.c hc_pass_5.c hc_pass_n.c hc_radix2.c hc_unpack.c real_init.c real_pass_2.c real_pass_3.c real_pass_4.c real_pass_5.c real_pass_n.c real_radix2.c real_unpack.c compare.h compare_source.c dft_source.c hc_main.c real_main.c test_complex_source.c test_real_source.c test_trap_source.c urand.c complex_internal.h TESTS = $(check_PROGRAMS) test_SOURCES = test.c signals.c test_LDADD = libgslfft.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu fft/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu fft/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslfft.la: $(libgslfft_la_OBJECTS) $(libgslfft_la_DEPENDENCIES) $(EXTRA_libgslfft_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslfft_la_OBJECTS) $(libgslfft_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dft.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fft.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signals.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/dft.Plo -rm -f ./$(DEPDIR)/fft.Plo -rm -f ./$(DEPDIR)/signals.Po -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/dft.Plo -rm -f ./$(DEPDIR)/fft.Plo -rm -f ./$(DEPDIR)/signals.Po -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile #errs_LDADD = libgslfft.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la #benchmark_LDADD = libgslfft.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/fft/gsl_fft_complex.h0000644000175000017500000001133613536674414014041 0ustar eddedd/* fft/gsl_fft_complex.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_FFT_COMPLEX_H__ #define __GSL_FFT_COMPLEX_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Power of 2 routines */ int gsl_fft_complex_radix2_forward (gsl_complex_packed_array data, const size_t stride, const size_t n); int gsl_fft_complex_radix2_backward (gsl_complex_packed_array data, const size_t stride, const size_t n); int gsl_fft_complex_radix2_inverse (gsl_complex_packed_array data, const size_t stride, const size_t n); int gsl_fft_complex_radix2_transform (gsl_complex_packed_array data, const size_t stride, const size_t n, const gsl_fft_direction sign); int gsl_fft_complex_radix2_dif_forward (gsl_complex_packed_array data, const size_t stride, const size_t n); int gsl_fft_complex_radix2_dif_backward (gsl_complex_packed_array data, const size_t stride, const size_t n); int gsl_fft_complex_radix2_dif_inverse (gsl_complex_packed_array data, const size_t stride, const size_t n); int gsl_fft_complex_radix2_dif_transform (gsl_complex_packed_array data, const size_t stride, const size_t n, const gsl_fft_direction sign); /* Mixed Radix general-N routines */ typedef struct { size_t n; size_t nf; size_t factor[64]; gsl_complex *twiddle[64]; gsl_complex *trig; } gsl_fft_complex_wavetable; typedef struct { size_t n; double *scratch; } gsl_fft_complex_workspace; gsl_fft_complex_wavetable *gsl_fft_complex_wavetable_alloc (size_t n); void gsl_fft_complex_wavetable_free (gsl_fft_complex_wavetable * wavetable); gsl_fft_complex_workspace *gsl_fft_complex_workspace_alloc (size_t n); void gsl_fft_complex_workspace_free (gsl_fft_complex_workspace * workspace); int gsl_fft_complex_memcpy (gsl_fft_complex_wavetable * dest, gsl_fft_complex_wavetable * src); int gsl_fft_complex_forward (gsl_complex_packed_array data, const size_t stride, const size_t n, const gsl_fft_complex_wavetable * wavetable, gsl_fft_complex_workspace * work); int gsl_fft_complex_backward (gsl_complex_packed_array data, const size_t stride, const size_t n, const gsl_fft_complex_wavetable * wavetable, gsl_fft_complex_workspace * work); int gsl_fft_complex_inverse (gsl_complex_packed_array data, const size_t stride, const size_t n, const gsl_fft_complex_wavetable * wavetable, gsl_fft_complex_workspace * work); int gsl_fft_complex_transform (gsl_complex_packed_array data, const size_t stride, const size_t n, const gsl_fft_complex_wavetable * wavetable, gsl_fft_complex_workspace * work, const gsl_fft_direction sign); __END_DECLS #endif /* __GSL_FFT_COMPLEX_H__ */ gsl/fft/hc_pass.h0000644000175000017500000000636513536674414012314 0ustar eddedd/* fft/hc_pass.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "complex_internal.h" static void FUNCTION(fft_halfcomplex,pass_2) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle[]); static void FUNCTION(fft_halfcomplex,pass_3) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[]); static void FUNCTION(fft_halfcomplex,pass_4) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[]); static void FUNCTION(fft_halfcomplex,pass_5) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[], const TYPE(gsl_complex) twiddle4[]); static void FUNCTION(fft_halfcomplex,pass_n) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t factor, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle[]); gsl/fft/signals.h0000644000175000017500000000565013536674414012330 0ustar eddedd/* fft/signals.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION(fft_signal,complex_pulse) (const size_t k, const size_t n, const size_t stride, const BASE z_real, const BASE z_imag, BASE data[], BASE fft[]); int FUNCTION(fft_signal,complex_constant) (const size_t n, const size_t stride, const BASE z_real, const BASE z_imag, BASE data[], BASE fft[]); int FUNCTION(fft_signal,complex_exp) (const int k, const size_t n, const size_t stride, const BASE z_real, const BASE z_imag, BASE data[], BASE fft[]); int FUNCTION(fft_signal,complex_exppair) (const int k1, const int k2, const size_t n, const size_t stride, const BASE z1_real, const BASE z1_imag, const BASE z2_real, const BASE z2_imag, BASE data[], BASE fft[]); int FUNCTION(fft_signal,complex_noise) (const size_t n, const size_t stride, BASE data[], BASE fft[]); int FUNCTION(fft_signal,real_noise) (const size_t n, const size_t stride, BASE data[], BASE fft[]); gsl/fft/c_pass_n.c0000644000175000017500000001374013536674414012447 0ustar eddedd/* fft/c_pass_n.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static int FUNCTION(fft_complex,pass_n) (BASE in[], const size_t istride, BASE out[], const size_t ostride, const gsl_fft_direction sign, const size_t factor, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle[]) { size_t i = 0, j = 0; size_t k, k1; const size_t m = n / factor; const size_t q = n / product; const size_t p_1 = product / factor; const size_t jump = (factor - 1) * p_1; size_t e, e1; for (i = 0; i < m; i++) { REAL(out,ostride,i) = REAL(in,istride,i); IMAG(out,ostride,i) = IMAG(in,istride,i); } for (e = 1; e < (factor - 1) / 2 + 1; e++) { for (i = 0; i < m; i++) { const size_t idx = i + e * m; const size_t idxc = i + (factor - e) * m; REAL(out,ostride,idx) = REAL(in,istride,idx) + REAL(in,istride,idxc); IMAG(out,ostride,idx) = IMAG(in,istride,idx) + IMAG(in,istride,idxc); REAL(out,ostride,idxc) = REAL(in,istride,idx) - REAL(in,istride,idxc); IMAG(out,ostride,idxc) = IMAG(in,istride,idx) - IMAG(in,istride,idxc); } } /* e = 0 */ for (i=0 ; itrig = (TYPE(gsl_complex) *) malloc (n * sizeof (TYPE(gsl_complex))); if (wavetable->trig == NULL) { /* error in constructor, prevent memory leak */ free(wavetable) ; GSL_ERROR_VAL ("failed to allocate trigonometric lookup table", GSL_ENOMEM, 0); } wavetable->n = n ; status = fft_halfcomplex_factorize (n, &n_factors, wavetable->factor); if (status) { /* error in constructor, prevent memory leak */ free(wavetable->trig) ; free(wavetable) ; GSL_ERROR_VAL ("factorization failed", GSL_EFACTOR, 0); } wavetable->nf = n_factors; d_theta = 2.0 * M_PI / ((double) n); t = 0; product = 1; for (i = 0; i < n_factors; i++) { size_t j; const size_t factor = wavetable->factor[i]; wavetable->twiddle[i] = wavetable->trig + t; product_1 = product; /* product_1 = p_(i-1) */ product *= factor; q = n / product; for (j = 1; j < factor; j++) { size_t k; size_t m = 0; for (k = 1; k < (q + 1) / 2; k++) { double theta; m = m + j * product_1; m = m % n; theta = d_theta * m; /* d_theta*j*k*product_1 */ GSL_REAL(wavetable->trig[t]) = cos (theta); GSL_IMAG(wavetable->trig[t]) = sin (theta); t++; } } } if (t > (n / 2)) { /* error in constructor, prevent memory leak */ free(wavetable->trig) ; free(wavetable) ; GSL_ERROR_VAL ("overflowed trigonometric lookup table", GSL_ESANITY, 0); } return wavetable; } void FUNCTION(gsl_fft_halfcomplex_wavetable,free) (TYPE(gsl_fft_halfcomplex_wavetable) * wavetable) { RETURN_IF_NULL (wavetable); /* release trigonometric lookup tables */ free (wavetable->trig); wavetable->trig = NULL; free (wavetable); } gsl/fft/gsl_fft_real.h0000644000175000017500000000427013536674414013314 0ustar eddedd/* fft/gsl_fft_real.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_FFT_REAL_H__ #define __GSL_FFT_REAL_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_fft_real_radix2_transform (double data[], const size_t stride, const size_t n) ; typedef struct { size_t n; size_t nf; size_t factor[64]; gsl_complex *twiddle[64]; gsl_complex *trig; } gsl_fft_real_wavetable; typedef struct { size_t n; double *scratch; } gsl_fft_real_workspace; gsl_fft_real_wavetable * gsl_fft_real_wavetable_alloc (size_t n); void gsl_fft_real_wavetable_free (gsl_fft_real_wavetable * wavetable); gsl_fft_real_workspace * gsl_fft_real_workspace_alloc (size_t n); void gsl_fft_real_workspace_free (gsl_fft_real_workspace * workspace); int gsl_fft_real_transform (double data[], const size_t stride, const size_t n, const gsl_fft_real_wavetable * wavetable, gsl_fft_real_workspace * work); int gsl_fft_real_unpack (const double real_coefficient[], double complex_coefficient[], const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_FFT_REAL_H__ */ gsl/fft/real_unpack.c0000644000175000017500000000245413536674414013146 0ustar eddedd/* fft/real_unpack.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "complex_internal.h" int FUNCTION(gsl_fft_real,unpack) (const BASE real_coefficient[], BASE complex_coefficient[], const size_t stride, const size_t n) { size_t i; if (n == 0) { GSL_ERROR ("length n must be positive integer", GSL_EDOM); } for (i = 0; i < n; i++) { REAL(complex_coefficient,stride,i) = real_coefficient[i * stride]; IMAG(complex_coefficient,stride,i) = 0.0; } return 0; } gsl/fft/c_pass_5.c0000644000175000017500000001703513536674414012357 0ustar eddedd/* fft/c_pass_5.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static int FUNCTION(fft_complex,pass_5) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const gsl_fft_direction sign, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[], const TYPE(gsl_complex) twiddle4[]) { size_t i = 0, j = 0; size_t k, k1; const size_t factor = 5; const size_t m = n / factor; const size_t q = n / product; const size_t p_1 = product / factor; const size_t jump = (factor - 1) * p_1; const ATOMIC sin_2pi_by_5 = sin (2.0 * M_PI / 5.0); const ATOMIC sin_2pi_by_10 = sin (2.0 * M_PI / 10.0); for (k = 0; k < q; k++) { ATOMIC w1_real, w1_imag, w2_real, w2_imag, w3_real, w3_imag, w4_real, w4_imag; if (k == 0) { w1_real = 1.0; w1_imag = 0.0; w2_real = 1.0; w2_imag = 0.0; w3_real = 1.0; w3_imag = 0.0; w4_real = 1.0; w4_imag = 0.0; } else { if (sign == gsl_fft_forward) { /* forward tranform */ w1_real = GSL_REAL(twiddle1[k - 1]); w1_imag = GSL_IMAG(twiddle1[k - 1]); w2_real = GSL_REAL(twiddle2[k - 1]); w2_imag = GSL_IMAG(twiddle2[k - 1]); w3_real = GSL_REAL(twiddle3[k - 1]); w3_imag = GSL_IMAG(twiddle3[k - 1]); w4_real = GSL_REAL(twiddle4[k - 1]); w4_imag = GSL_IMAG(twiddle4[k - 1]); } else { /* backward tranform: w -> conjugate(w) */ w1_real = GSL_REAL(twiddle1[k - 1]); w1_imag = -GSL_IMAG(twiddle1[k - 1]); w2_real = GSL_REAL(twiddle2[k - 1]); w2_imag = -GSL_IMAG(twiddle2[k - 1]); w3_real = GSL_REAL(twiddle3[k - 1]); w3_imag = -GSL_IMAG(twiddle3[k - 1]); w4_real = GSL_REAL(twiddle4[k - 1]); w4_imag = -GSL_IMAG(twiddle4[k - 1]); } } for (k1 = 0; k1 < p_1; k1++) { ATOMIC x0_real, x0_imag, x1_real, x1_imag, x2_real, x2_imag, x3_real, x3_imag, x4_real, x4_imag; const ATOMIC z0_real = REAL(in,istride,i); const ATOMIC z0_imag = IMAG(in,istride,i); const ATOMIC z1_real = REAL(in,istride,i + m); const ATOMIC z1_imag = IMAG(in,istride,i + m); const ATOMIC z2_real = REAL(in,istride,i + 2*m); const ATOMIC z2_imag = IMAG(in,istride,i + 2*m); const ATOMIC z3_real = REAL(in,istride,i + 3*m); const ATOMIC z3_imag = IMAG(in,istride,i + 3*m); const ATOMIC z4_real = REAL(in,istride,i + 4*m); const ATOMIC z4_imag = IMAG(in,istride,i + 4*m); /* compute x = W(5) z */ /* t1 = z1 + z4 */ const ATOMIC t1_real = z1_real + z4_real; const ATOMIC t1_imag = z1_imag + z4_imag; /* t2 = z2 + z3 */ const ATOMIC t2_real = z2_real + z3_real; const ATOMIC t2_imag = z2_imag + z3_imag; /* t3 = z1 - z4 */ const ATOMIC t3_real = z1_real - z4_real; const ATOMIC t3_imag = z1_imag - z4_imag; /* t4 = z2 - z3 */ const ATOMIC t4_real = z2_real - z3_real; const ATOMIC t4_imag = z2_imag - z3_imag; /* t5 = t1 + t2 */ const ATOMIC t5_real = t1_real + t2_real; const ATOMIC t5_imag = t1_imag + t2_imag; /* t6 = (sqrt(5)/4)(t1 - t2) */ const ATOMIC t6_real = (sqrt (5.0) / 4.0) * (t1_real - t2_real); const ATOMIC t6_imag = (sqrt (5.0) / 4.0) * (t1_imag - t2_imag); /* t7 = z0 - ((t5)/4) */ const ATOMIC t7_real = z0_real - t5_real / 4.0; const ATOMIC t7_imag = z0_imag - t5_imag / 4.0; /* t8 = t7 + t6 */ const ATOMIC t8_real = t7_real + t6_real; const ATOMIC t8_imag = t7_imag + t6_imag; /* t9 = t7 - t6 */ const ATOMIC t9_real = t7_real - t6_real; const ATOMIC t9_imag = t7_imag - t6_imag; /* t10 = sin(2 pi/5) t3 + sin(2 pi/10) t4 */ const ATOMIC t10_real = ((int) sign) * (sin_2pi_by_5 * t3_real + sin_2pi_by_10 * t4_real); const ATOMIC t10_imag = ((int) sign) * (sin_2pi_by_5 * t3_imag + sin_2pi_by_10 * t4_imag); /* t11 = sin(2 pi/10) t3 - sin(2 pi/5) t4 */ const ATOMIC t11_real = ((int) sign) * (sin_2pi_by_10 * t3_real - sin_2pi_by_5 * t4_real); const ATOMIC t11_imag = ((int) sign) * (sin_2pi_by_10 * t3_imag - sin_2pi_by_5 * t4_imag); /* x0 = z0 + t5 */ x0_real = z0_real + t5_real; x0_imag = z0_imag + t5_imag; /* x1 = t8 + i t10 */ x1_real = t8_real - t10_imag; x1_imag = t8_imag + t10_real; /* x2 = t9 + i t11 */ x2_real = t9_real - t11_imag; x2_imag = t9_imag + t11_real; /* x3 = t9 - i t11 */ x3_real = t9_real + t11_imag; x3_imag = t9_imag - t11_real; /* x4 = t8 - i t10 */ x4_real = t8_real + t10_imag; x4_imag = t8_imag - t10_real; /* apply twiddle factors */ /* to0 = 1 * x0 */ REAL(out,ostride,j) = x0_real; IMAG(out,ostride,j) = x0_imag; /* to1 = w1 * x1 */ REAL(out,ostride,j + p_1) = w1_real * x1_real - w1_imag * x1_imag; IMAG(out,ostride,j + p_1) = w1_real * x1_imag + w1_imag * x1_real; /* to2 = w2 * x2 */ REAL(out,ostride,j + 2*p_1) = w2_real * x2_real - w2_imag * x2_imag; IMAG(out,ostride,j+2*p_1) = w2_real * x2_imag + w2_imag * x2_real; /* to3 = w3 * x3 */ REAL(out,ostride,j+3*p_1) = w3_real * x3_real - w3_imag * x3_imag; IMAG(out,ostride,j+3*p_1) = w3_real * x3_imag + w3_imag * x3_real; /* to4 = w4 * x4 */ REAL(out,ostride,j+4*p_1) = w4_real * x4_real - w4_imag * x4_imag; IMAG(out,ostride,j+4*p_1) = w4_real * x4_imag + w4_imag * x4_real; i++; j++; } j += jump; } return 0; } gsl/fft/real_pass_3.c0000644000175000017500000001332313536674414013052 0ustar eddedd/* fft/real_pass_3.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void FUNCTION(fft_real,pass_3) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[]) { size_t k, k1; const size_t factor = 3; const size_t m = n / factor; const size_t q = n / product; const size_t product_1 = product / factor; const ATOMIC tau = sqrt (3.0) / 2.0; for (k1 = 0; k1 < q; k1++) { const size_t from0 = k1 * product_1; const size_t from1 = from0 + m; const size_t from2 = from1 + m; const ATOMIC z0_real = VECTOR(in,istride,from0); const ATOMIC z1_real = VECTOR(in,istride,from1); const ATOMIC z2_real = VECTOR(in,istride,from2); const ATOMIC t1 = z1_real + z2_real; const ATOMIC x0_real = z0_real + t1; const ATOMIC x1_real = z0_real - t1 / 2.0; const ATOMIC x1_imag = -tau * (z1_real - z2_real); const size_t to0 = product * k1; const size_t to1 = to0 + 2 * product_1 - 1; VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to1) = x1_real; VECTOR(out,ostride,to1 + 1) = x1_imag; } if (product_1 == 1) return; for (k = 1; k < (product_1 + 1) / 2; k++) { const ATOMIC w1_real = GSL_REAL(twiddle1[k - 1]); const ATOMIC w1_imag = -GSL_IMAG(twiddle1[k - 1]); const ATOMIC w2_real = GSL_REAL(twiddle2[k - 1]); const ATOMIC w2_imag = -GSL_IMAG(twiddle2[k - 1]); for (k1 = 0; k1 < q; k1++) { const size_t from0 = k1 * product_1 + 2 * k - 1; const size_t from1 = from0 + m; const size_t from2 = from1 + m; const ATOMIC f0_real = VECTOR(in,istride,from0); const ATOMIC f0_imag = VECTOR(in,istride,from0 + 1); const ATOMIC f1_real = VECTOR(in,istride,from1); const ATOMIC f1_imag = VECTOR(in,istride,from1 + 1); const ATOMIC f2_real = VECTOR(in,istride,from2); const ATOMIC f2_imag = VECTOR(in,istride,from2 + 1); const ATOMIC z0_real = f0_real; const ATOMIC z0_imag = f0_imag; const ATOMIC z1_real = w1_real * f1_real - w1_imag * f1_imag; const ATOMIC z1_imag = w1_real * f1_imag + w1_imag * f1_real; const ATOMIC z2_real = w2_real * f2_real - w2_imag * f2_imag; const ATOMIC z2_imag = w2_real * f2_imag + w2_imag * f2_real; /* compute x = W(3) z */ /* t1 = z1 + z2 */ const ATOMIC t1_real = z1_real + z2_real; const ATOMIC t1_imag = z1_imag + z2_imag; /* t2 = z0 - t1/2 */ const ATOMIC t2_real = z0_real - t1_real / 2; const ATOMIC t2_imag = z0_imag - t1_imag / 2; /* t3 = (+/-) sin(pi/3)*(z1 - z2) */ const ATOMIC t3_real = -tau * (z1_real - z2_real); const ATOMIC t3_imag = -tau * (z1_imag - z2_imag); /* x0 = z0 + t1 */ const ATOMIC x0_real = z0_real + t1_real; const ATOMIC x0_imag = z0_imag + t1_imag; /* x1 = t2 + i t3 */ const ATOMIC x1_real = t2_real - t3_imag; const ATOMIC x1_imag = t2_imag + t3_real; /* x2 = t2 - i t3 */ const ATOMIC x2_real = t2_real + t3_imag; const ATOMIC x2_imag = t2_imag - t3_real; /* apply twiddle factors */ const size_t to0 = k1 * product + 2 * k - 1; const size_t to1 = to0 + 2 * product_1; const size_t to2 = 2 * product_1 - 2 * k + k1 * product - 1; /* to0 = 1 * x0 */ VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to0 + 1) = x0_imag; /* to1 = 1 * x1 */ VECTOR(out,ostride,to1) = x1_real; VECTOR(out,ostride,to1 + 1) = x1_imag; /* to2 = 1 * x2 */ VECTOR(out,ostride,to2) = x2_real; VECTOR(out,ostride,to2 + 1) = -x2_imag; } } if (product_1 % 2 == 1) return; for (k1 = 0; k1 < q; k1++) { const size_t from0 = k1 * product_1 + product_1 - 1; const size_t from1 = from0 + m; const size_t from2 = from1 + m; const ATOMIC z0_real = VECTOR(in,istride,from0); const ATOMIC z1_real = VECTOR(in,istride,from1); const ATOMIC z2_real = VECTOR(in,istride,from2); const ATOMIC t1 = z1_real - z2_real; const ATOMIC x0_real = z0_real + t1 / 2.0; const ATOMIC x0_imag = -tau * (z1_real + z2_real); const ATOMIC x1_real = z0_real - t1; const size_t to0 = k1 * product + product_1 - 1; const size_t to1 = to0 + 2 * product_1; VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to0 + 1) = x0_imag; VECTOR(out,ostride,to1) = x1_real; } return; } gsl/fft/urand.c0000644000175000017500000000171213536674414011767 0ustar eddedd/* fft/urand.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ double urand (void); double urand (void) { static unsigned long int x = 1; x = (1103515245 * x + 12345) & 0x7fffffffUL ; return x / 2147483648.0 ; } gsl/fft/gsl_fft_halfcomplex.h0000644000175000017500000000572413536674414014700 0ustar eddedd/* fft/gsl_fft_halfcomplex.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_FFT_HALFCOMPLEX_H__ #define __GSL_FFT_HALFCOMPLEX_H__ #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_fft_halfcomplex_radix2_backward (double data[], const size_t stride, const size_t n); int gsl_fft_halfcomplex_radix2_inverse (double data[], const size_t stride, const size_t n); int gsl_fft_halfcomplex_radix2_transform (double data[], const size_t stride, const size_t n); typedef struct { size_t n; size_t nf; size_t factor[64]; gsl_complex *twiddle[64]; gsl_complex *trig; } gsl_fft_halfcomplex_wavetable; gsl_fft_halfcomplex_wavetable * gsl_fft_halfcomplex_wavetable_alloc (size_t n); void gsl_fft_halfcomplex_wavetable_free (gsl_fft_halfcomplex_wavetable * wavetable); int gsl_fft_halfcomplex_backward (double data[], const size_t stride, const size_t n, const gsl_fft_halfcomplex_wavetable * wavetable, gsl_fft_real_workspace * work); int gsl_fft_halfcomplex_inverse (double data[], const size_t stride, const size_t n, const gsl_fft_halfcomplex_wavetable * wavetable, gsl_fft_real_workspace * work); int gsl_fft_halfcomplex_transform (double data[], const size_t stride, const size_t n, const gsl_fft_halfcomplex_wavetable * wavetable, gsl_fft_real_workspace * work); int gsl_fft_halfcomplex_unpack (const double halfcomplex_coefficient[], double complex_coefficient[], const size_t stride, const size_t n); int gsl_fft_halfcomplex_radix2_unpack (const double halfcomplex_coefficient[], double complex_coefficient[], const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_FFT_HALFCOMPLEX_H__ */ gsl/fft/hc_main.c0000644000175000017500000001222013536674414012250 0ustar eddedd/* fft/hc_main.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include "hc_pass.h" int FUNCTION(gsl_fft_halfcomplex,backward) (BASE data[], const size_t stride, const size_t n, const TYPE(gsl_fft_halfcomplex_wavetable) * wavetable, TYPE(gsl_fft_real_workspace) * work) { int status = FUNCTION(gsl_fft_halfcomplex,transform) (data, stride, n, wavetable, work) ; return status ; } int FUNCTION(gsl_fft_halfcomplex,inverse) (BASE data[], const size_t stride, const size_t n, const TYPE(gsl_fft_halfcomplex_wavetable) * wavetable, TYPE(gsl_fft_real_workspace) * work) { int status = FUNCTION(gsl_fft_halfcomplex,transform) (data, stride, n, wavetable, work); if (status) { return status; } /* normalize inverse fft with 1/n */ { const double norm = 1.0 / n; size_t i; for (i = 0; i < n; i++) { data[stride*i] *= norm; } } return status; } int FUNCTION(gsl_fft_halfcomplex,transform) (BASE data[], const size_t stride, const size_t n, const TYPE(gsl_fft_halfcomplex_wavetable) * wavetable, TYPE(gsl_fft_real_workspace) * work) { BASE * const scratch = work->scratch; BASE * in; BASE * out; size_t istride, ostride ; size_t factor, product, q; size_t i; size_t nf; int state; int product_1; int tskip; TYPE(gsl_complex) *twiddle1, *twiddle2, *twiddle3, *twiddle4; if (n == 0) { GSL_ERROR ("length n must be positive integer", GSL_EDOM); } if (n == 1) { /* FFT of one data point is the identity */ return 0; } if (n != wavetable->n) { GSL_ERROR ("wavetable does not match length of data", GSL_EINVAL); } if (n != work->n) { GSL_ERROR ("workspace does not match length of data", GSL_EINVAL); } nf = wavetable->nf; product = 1; state = 0; for (i = 0; i < nf; i++) { factor = wavetable->factor[i]; product_1 = product; product *= factor; q = n / product; tskip = (q + 1) / 2 - 1; if (state == 0) { in = data; istride = stride; out = scratch; ostride = 1; state = 1; } else { in = scratch; istride = 1; out = data; ostride = stride; state = 0; } if (factor == 2) { twiddle1 = wavetable->twiddle[i]; FUNCTION(fft_halfcomplex,pass_2) (in, istride, out, ostride, product, n, twiddle1); } else if (factor == 3) { twiddle1 = wavetable->twiddle[i]; twiddle2 = twiddle1 + tskip; FUNCTION(fft_halfcomplex,pass_3) (in, istride, out, ostride, product, n, twiddle1, twiddle2); } else if (factor == 4) { twiddle1 = wavetable->twiddle[i]; twiddle2 = twiddle1 + tskip; twiddle3 = twiddle2 + tskip; FUNCTION(fft_halfcomplex,pass_4) (in, istride, out, ostride, product, n, twiddle1, twiddle2, twiddle3); } else if (factor == 5) { twiddle1 = wavetable->twiddle[i]; twiddle2 = twiddle1 + tskip; twiddle3 = twiddle2 + tskip; twiddle4 = twiddle3 + tskip; FUNCTION(fft_halfcomplex,pass_5) (in, istride, out, ostride, product, n, twiddle1, twiddle2, twiddle3, twiddle4); } else { twiddle1 = wavetable->twiddle[i]; FUNCTION(fft_halfcomplex,pass_n) (in, istride, out, ostride, factor, product, n, twiddle1); } } if (state == 1) /* copy results back from scratch to data */ { for (i = 0; i < n; i++) { data[stride*i] = scratch[i] ; } } return 0; } gsl/fft/test_complex_source.c0000644000175000017500000003560713536674414014756 0ustar eddedd/* fft/test_complex.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "bitreverse.h" #include "signals.h" #include "compare.h" void FUNCTION(test_complex,func) (size_t stride, size_t n); int FUNCTION(test,offset) (const BASE data[], size_t stride, size_t n, size_t offset); void FUNCTION(test_complex,bitreverse_order) (size_t stride, size_t n) ; void FUNCTION(test_complex,radix2) (size_t stride, size_t n); int FUNCTION(test,offset) (const BASE data[], size_t stride, size_t n, size_t offset) { int status = 0 ; size_t i, j, k = 0 ; for (i = 0; i < n; i++) { k += 2 ; for (j = 1; j < stride; j++) { status |= data[k] != k + offset ; k++ ; status |= data[k] != k + offset ; k++ ; } } return status ; } void FUNCTION(test_complex,func) (size_t stride, size_t n) { size_t i ; int status ; TYPE(gsl_fft_complex_wavetable) * cw ; TYPE(gsl_fft_complex_workspace) * cwork ; BASE * complex_data = (BASE *) malloc (2 * n * stride * sizeof (BASE)); BASE * complex_tmp = (BASE *) malloc (2 * n * stride * sizeof (BASE)); BASE * fft_complex_data = (BASE *) malloc (2 * n * stride * sizeof (BASE)); BASE * fft_complex_tmp = (BASE *) malloc (2 * n * stride * sizeof (BASE)); for (i = 0 ; i < 2 * n * stride ; i++) { complex_data[i] = (BASE)i ; complex_tmp[i] = (BASE)(i + 1000.0) ; fft_complex_data[i] = (BASE)(i + 2000.0) ; fft_complex_tmp[i] = (BASE)(i + 3000.0) ; } gsl_set_error_handler (NULL); /* abort on any errors */ /* Test allocation */ { cw = FUNCTION(gsl_fft_complex_wavetable,alloc) (n); gsl_test (cw == 0, NAME(gsl_fft_complex_wavetable) "_alloc, n = %d, stride = %d", n, stride); } { cwork = FUNCTION(gsl_fft_complex_workspace,alloc) (n); gsl_test (cwork == 0, NAME(gsl_fft_complex_workspace) "_alloc, n = %d", n); } /* Test mixed radix fft with noise */ { FUNCTION(fft_signal,complex_noise) (n, stride, complex_data, fft_complex_data); for (i = 0 ; i < n ; i++) { REAL(complex_tmp,stride,i) = REAL(complex_data,stride,i) ; IMAG(complex_tmp,stride,i) = IMAG(complex_data,stride,i) ; } FUNCTION(gsl_fft_complex,forward) (complex_data, stride, n, cw, cwork); for (i = 0 ; i < n ; i++) { REAL(fft_complex_tmp,stride,i) = REAL(complex_data,stride,i) ; IMAG(fft_complex_tmp,stride,i) = IMAG(complex_data,stride,i) ; } status = FUNCTION(compare_complex,results) ("dft", fft_complex_data, "fft of noise", complex_data, stride, n, 1e6); gsl_test (status, NAME(gsl_fft_complex) "_forward with signal_noise, n = %d, stride = %d", n, stride); if (stride > 1) { status = FUNCTION(test, offset) (complex_data, stride, n, 0) ; gsl_test (status, NAME(gsl_fft_complex) "_forward avoids unstrided data, n = %d, stride = %d", n, stride); } } /* Test the inverse fft */ { status = FUNCTION(gsl_fft_complex,inverse) (complex_data, stride, n, cw, cwork); status = FUNCTION(compare_complex,results) ("orig", complex_tmp, "fft inverse", complex_data, stride, n, 1e6); gsl_test (status, NAME(gsl_fft_complex) "_inverse with signal_noise, n = %d, stride = %d", n, stride); if (stride > 1) { status = FUNCTION(test, offset) (complex_data, stride, n, 0) ; gsl_test (status, NAME(gsl_fft_complex) "_inverse other data untouched, n = %d, stride = %d", n, stride); } } /* Test the backward fft */ { status = FUNCTION(gsl_fft_complex,backward) (fft_complex_tmp, stride, n, cw, cwork); for (i = 0; i < n; i++) { REAL(complex_tmp,stride,i) *= n; IMAG(complex_tmp,stride,i) *= n; } status = FUNCTION(compare_complex,results) ("orig", complex_tmp, "fft backward", fft_complex_tmp, stride, n, 1e6); gsl_test (status, NAME(gsl_fft_complex) "_backward with signal_noise, n = %d, stride = %d", n, stride); if (stride > 1) { status = FUNCTION(test, offset) (fft_complex_tmp, stride, n, 3000) ; gsl_test (status, NAME(gsl_fft_complex) "_backward avoids unstrided data, n = %d, stride = %d", n, stride); } } /* Test a pulse signal */ { FUNCTION(fft_signal,complex_pulse) (1, n, stride, 1.0, 0.0, complex_data, fft_complex_data); FUNCTION(gsl_fft_complex,forward) (complex_data, stride, n, cw, cwork); status = FUNCTION(compare_complex,results) ("analytic", fft_complex_data, "fft of pulse", complex_data, stride, n, 1e6); gsl_test (status, NAME(gsl_fft_complex) "_forward with signal_pulse, n = %d, stride = %d", n, stride); } /* Test a constant signal */ { FUNCTION(fft_signal,complex_constant) (n, stride, 1.0, 0.0, complex_data, fft_complex_data); FUNCTION(gsl_fft_complex,forward) (complex_data, stride, n, cw, cwork); status = FUNCTION(compare_complex,results) ("analytic", fft_complex_data, "fft of constant", complex_data, stride, n, 1e6); gsl_test (status, NAME(gsl_fft_complex) "_forward with signal_constant, n = %d, stride = %d", n, stride); } /* Test an exponential (cos/sin) signal */ { status = 0; for (i = 0; i < n; i++) { FUNCTION(fft_signal,complex_exp) ((int)i, n, stride, 1.0, 0.0, complex_data, fft_complex_data); FUNCTION(gsl_fft_complex,forward) (complex_data, stride, n, cw, cwork); status |= FUNCTION(compare_complex,results) ("analytic", fft_complex_data, "fft of exp", complex_data, stride, n, 1e6); } gsl_test (status, NAME(gsl_fft_complex) "_forward with signal_exp, n = %d, stride = %d", n, stride); } FUNCTION(gsl_fft_complex_wavetable,free) (cw); FUNCTION(gsl_fft_complex_workspace,free) (cwork); free (complex_data); free (complex_tmp); free (fft_complex_data); free (fft_complex_tmp); } void FUNCTION(test_complex,bitreverse_order) (size_t stride, size_t n) { int status ; size_t logn, i ; BASE * tmp = (BASE *) malloc (2 * n * stride * sizeof (BASE)); BASE * data = (BASE *) malloc (2 * n * stride * sizeof (BASE)); BASE * reversed_data = (BASE *) malloc (2 * n * stride * sizeof (BASE)); for (i = 0; i < 2 * stride * n; i++) { data[i] = (BASE)i ; } memcpy (tmp, data, 2 * n * stride * sizeof(BASE)) ; logn = 0 ; while (n > (1U<>= 1; } reversed_data[2*j*stride] = data[2*i*stride] ; reversed_data[2*j*stride+1] = data[2*i*stride+1] ; } FUNCTION(fft_complex,bitreverse_order) (data, stride, n, logn); status = FUNCTION(compare_complex,results) ("naive bit reverse", reversed_data, "fft_complex_bitreverse_order", data, stride, n, 1e6); gsl_test (status, "fft_complex_bitreverse_order, n = %d", n); free (reversed_data) ; free (data) ; free (tmp) ; } void FUNCTION(test_complex,radix2) (size_t stride, size_t n) { size_t i ; int status ; BASE * complex_data = (BASE *) malloc (2 * n * stride * sizeof (BASE)); BASE * complex_tmp = (BASE *) malloc (2 * n * stride * sizeof (BASE)); BASE * fft_complex_data = (BASE *) malloc (2 * n * stride * sizeof (BASE)); BASE * fft_complex_tmp = (BASE *) malloc (2 * n * stride * sizeof (BASE)); for (i = 0 ; i < 2 * n * stride ; i++) { complex_data[i] = (BASE)i ; complex_tmp[i] = (BASE)(i + 1000.0) ; fft_complex_data[i] = (BASE)(i + 2000.0) ; fft_complex_tmp[i] = (BASE)(i + 3000.0) ; } gsl_set_error_handler (NULL); /* abort on any errors */ /* Test radix-2 fft with noise */ { FUNCTION(fft_signal,complex_noise) (n, stride, complex_data, fft_complex_data); for (i = 0 ; i < n ; i++) { REAL(complex_tmp,stride,i) = REAL(complex_data,stride,i) ; IMAG(complex_tmp,stride,i) = IMAG(complex_data,stride,i) ; } FUNCTION(gsl_fft_complex,radix2_forward) (complex_data, stride, n); for (i = 0 ; i < n ; i++) { REAL(fft_complex_tmp,stride,i) = REAL(complex_data,stride,i) ; IMAG(fft_complex_tmp,stride,i) = IMAG(complex_data,stride,i) ; } status = FUNCTION(compare_complex,results) ("dft", fft_complex_data, "fft of noise", complex_data, stride, n, 1e6); gsl_test (status, NAME(gsl_fft_complex) "_radix2_forward with signal_noise, n = %d, stride = %d", n, stride); if (stride > 1) { status = FUNCTION(test, offset) (complex_data, stride, n, 0) ; gsl_test (status, NAME(gsl_fft_complex) "_radix2_forward avoids unstrided data, n = %d, stride = %d", n, stride); } } /* Test the inverse fft */ { status = FUNCTION(gsl_fft_complex,radix2_inverse) (complex_data, stride, n); status = FUNCTION(compare_complex,results) ("orig", complex_tmp, "fft inverse", complex_data, stride, n, 1e6); gsl_test (status, NAME(gsl_fft_complex) "_radix2_inverse with signal_noise, n = %d, stride = %d", n, stride); if (stride > 1) { status = FUNCTION(test, offset) (complex_data, stride, n, 0) ; gsl_test (status, NAME(gsl_fft_complex) "_radix2_inverse other data untouched, n = %d, stride = %d", n, stride); } } /* Test the backward fft */ { status = FUNCTION(gsl_fft_complex,radix2_backward) (fft_complex_tmp, stride, n); for (i = 0; i < n; i++) { REAL(complex_tmp,stride,i) *= n; IMAG(complex_tmp,stride,i) *= n; } status = FUNCTION(compare_complex,results) ("orig", complex_tmp, "fft backward", fft_complex_tmp, stride, n, 1e6); gsl_test (status, NAME(gsl_fft_complex) "_radix2_backward with signal_noise, n = %d, stride = %d", n, stride); if (stride > 1) { status = FUNCTION(test, offset) (fft_complex_tmp, stride, n, 3000) ; gsl_test (status, NAME(gsl_fft_complex) "_radix2_backward avoids unstrided data, n = %d, stride = %d", n, stride); } } /* Test a pulse signal */ { FUNCTION(fft_signal,complex_pulse) (1, n, stride, 1.0, 0.0, complex_data, fft_complex_data); FUNCTION(gsl_fft_complex,radix2_forward) (complex_data, stride, n); status = FUNCTION(compare_complex,results) ("analytic", fft_complex_data, "fft of pulse", complex_data, stride, n, 1e6); gsl_test (status, NAME(gsl_fft_complex) "_radix2_forward with signal_pulse, n = %d, stride = %d", n, stride); } /* Test a constant signal */ { FUNCTION(fft_signal,complex_constant) (n, stride, 1.0, 0.0, complex_data, fft_complex_data); FUNCTION(gsl_fft_complex,radix2_forward) (complex_data, stride, n); status = FUNCTION(compare_complex,results) ("analytic", fft_complex_data, "fft of constant", complex_data, stride, n, 1e6); gsl_test (status, NAME(gsl_fft_complex) "_radix2_forward with signal_constant, n = %d, stride = %d", n, stride); } /* Test an exponential (cos/sin) signal */ { status = 0; for (i = 0; i < n; i++) { FUNCTION(fft_signal,complex_exp) ((int)i, n, stride, 1.0, 0.0, complex_data, fft_complex_data); FUNCTION(gsl_fft_complex,radix2_forward) (complex_data, stride, n); status |= FUNCTION(compare_complex,results) ("analytic", fft_complex_data, "fft of exp", complex_data, stride, n, 1e6); } gsl_test (status, NAME(gsl_fft_complex) "_radix2_forward with signal_exp, n = %d, stride = %d", n, stride); } free (complex_data); free (complex_tmp); free (fft_complex_data); free (fft_complex_tmp); } gsl/fft/test_trap_source.c0000644000175000017500000001226013536674414014243 0ustar eddedd/* fft/test_trap.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ void FUNCTION(test,trap) (void); void FUNCTION(test,trap) (void) { int status ; BASE real_x ; BASE complex_x ; BASE * real_data = &real_x ; BASE * complex_data = &complex_x ; TYPE(gsl_fft_complex_wavetable) * cw; TYPE(gsl_fft_real_wavetable) * rw; TYPE(gsl_fft_halfcomplex_wavetable) * hcw; TYPE(gsl_fft_complex_workspace) * cwork; TYPE(gsl_fft_real_workspace) * rwork; /* n = 0 in alloc */ cw = FUNCTION(gsl_fft_complex_wavetable,alloc) (0); gsl_test (cw != 0, "trap for n = 0 in " NAME(gsl_fft_complex_wavetable) "_alloc"); rw = FUNCTION(gsl_fft_real_wavetable,alloc) (0); gsl_test (rw != 0, "trap for n = 0 in " NAME(gsl_fft_real_wavetable) "_alloc" ); hcw = FUNCTION(gsl_fft_halfcomplex_wavetable,alloc) (0); gsl_test (hcw != 0, "trap for n = 0 in " NAME(gsl_fft_halfcomplex_wavetable) "_alloc"); cwork = FUNCTION(gsl_fft_complex_workspace,alloc) (0); gsl_test (cw != 0, "trap for n = 0 in " NAME(gsl_fft_complex_workspace) "_alloc"); rwork = FUNCTION(gsl_fft_real_workspace,alloc) (0); gsl_test (rw != 0, "trap for n = 0 in " NAME(gsl_fft_real_workspace) "_alloc" ); cw = FUNCTION(gsl_fft_complex_wavetable,alloc) (10); hcw = FUNCTION(gsl_fft_halfcomplex_wavetable,alloc) (10); rw = FUNCTION(gsl_fft_real_wavetable,alloc) (10); cwork = FUNCTION(gsl_fft_complex_workspace,alloc) (10); rwork = FUNCTION(gsl_fft_real_workspace,alloc) (10); /* n = 0 in fft forward */ status = FUNCTION(gsl_fft_complex,forward) (complex_data, 1, 0, cw, cwork); gsl_test (!status, "trap for n = 0 in " NAME(gsl_fft_complex) "_forward"); status = FUNCTION(gsl_fft_real,transform) (real_data, 1, 0, rw, rwork); gsl_test (!status, "trap for n = 0 in " NAME(gsl_fft_real) "_transform"); status = FUNCTION(gsl_fft_halfcomplex,transform) (real_data, 1, 0, hcw, rwork); gsl_test (!status, "trap for n = 0 in " NAME(gsl_fft_halfcomplex) "_transform"); status = FUNCTION(gsl_fft_complex,radix2_forward) (complex_data, 1, 0); gsl_test (!status, "trap for n = 0 in " NAME(gsl_fft_complex) "_radix2_forward"); /* n = 0 in fft backward */ status = FUNCTION(gsl_fft_complex,backward) (complex_data, 1, 0, cw, cwork); gsl_test (!status, "trap for n = 0 in " NAME(gsl_fft_complex) "_backward"); status = FUNCTION(gsl_fft_complex,radix2_backward) (complex_data, 1, 0); gsl_test (!status, "trap for n = 0 in " NAME(gsl_fft_complex) "_radix2_backward"); /* n = 0 in fft inverse */ status = FUNCTION(gsl_fft_complex,inverse) (complex_data, 1, 0, cw, cwork); gsl_test (!status, "trap for n = 0 in " NAME(gsl_fft_complex) "_inverse"); status = FUNCTION(gsl_fft_complex,radix2_inverse) (complex_data, 1, 0); gsl_test (!status, "trap for n = 0 in " NAME(gsl_fft_complex) "_radix2_inverse"); /* n != 2^k in power of 2 routines */ status = FUNCTION(gsl_fft_complex,radix2_forward) (complex_data, 1, 17); gsl_test (!status, "trap for n != 2^k in " NAME(gsl_fft_complex) "_radix2_forward"); status = FUNCTION(gsl_fft_complex,radix2_backward) (complex_data, 1, 17); gsl_test (!status, "trap for n != 2^k in " NAME(gsl_fft_complex) "_radix2_backward"); status = FUNCTION(gsl_fft_complex,radix2_inverse) (complex_data, 1, 17); gsl_test (!status, "trap for n != 2^k in " NAME(gsl_fft_complex) "_radix2_inverse"); /* n != wavetable.n in mixed radix routines */ cw->n = 3; status = FUNCTION(gsl_fft_complex,forward) (complex_data, 1, 4, cw, cwork); gsl_test (!status, "trap for n != nw in " NAME(gsl_fft_complex) "_forward"); cw->n = 3; status = FUNCTION(gsl_fft_complex,backward) (complex_data, 1, 4, cw, cwork); gsl_test (!status, "trap for n != nw in " NAME(gsl_fft_complex) "_backward"); cw->n = 3; status = FUNCTION(gsl_fft_complex,inverse) (complex_data, 1, 4, cw, cwork); gsl_test (!status, "trap for n != nw in " NAME(gsl_fft_complex) "_inverse"); rw->n = 3; status = FUNCTION(gsl_fft_real,transform) (real_data, 1, 4, rw, rwork); gsl_test (!status, "trap for n != nw in " NAME(gsl_fft_real) "_transform"); hcw->n = 3; status = FUNCTION(gsl_fft_halfcomplex,transform) (real_data, 1, 4, hcw, rwork); gsl_test (!status, "trap for n != nw in " NAME(gsl_fft_halfcomplex) "_transform"); FUNCTION (gsl_fft_halfcomplex_wavetable,free) (hcw) ; FUNCTION (gsl_fft_real_wavetable,free) (rw) ; FUNCTION (gsl_fft_complex_wavetable,free) (cw) ; FUNCTION (gsl_fft_real_workspace,free) (rwork) ; FUNCTION (gsl_fft_complex_workspace,free) (cwork) ; } gsl/fft/ChangeLog0000644000175000017500000001027013536674414012263 0ustar eddedd2009-07-09 Brian Gough * real_init.c (FUNCTION): handle NULL argument in free * hc_init.c (FUNCTION): handle NULL argument in free * c_init.c (FUNCTION): handle NULL argument in free 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2006-03-16 Brian Gough * changed to gsl_fft_forward and gsl_fft_backward enums throughout internally instead of forward and backward. 2005-05-19 Brian Gough * Makefile.am (noinst_HEADERS): removed unused real.c Tue Jul 24 15:16:50 2001 Brian Gough * single precision fft now uses float throughout, rather than mixing float and double. Mon Jul 16 12:38:29 2001 Brian Gough * reorganized function names and split work Tue May 1 14:35:52 2001 Brian Gough * Makefile.am (libgslfft_la_SOURCES): removed spurious headers from SOURCES line 2000-10-19 Brian Gough * hc_init.c (FUNCTION): scratch space changed to n elements instead of 2*n (apparently the routine previously allocated too much space) Wed Feb 16 14:43:42 2000 Brian Gough * Makefile.am (pkginclude_HEADERS): added missing pkginclude_HEADERS for float functions. Mon Feb 14 15:11:55 2000 Brian Gough * made all internal functions static (required a slight reorganization) Fri Aug 6 11:20:25 1999 Brian Gough * removed dependence on rand() and RAND_MAX Sun Feb 14 17:31:21 1999 Brian Gough * started converting header files to use gsl_complex_packed_array more consistently Mon Dec 14 22:55:00 1998 Brian Gough * real_init.c: fixed a possible malloc(0) bug found by Electric Fence. Mon Nov 23 15:47:13 1998 Brian Gough * gsl_fft_complex.h, gsl_fft_complex_float.h: removed data[][] type arguments from prototypes since this seems to be non-ANSI. Use **data instead. 1998-11-09 * compare_source.c: fix up int/unsigned format types to prevent warnings Wed Oct 28 15:07:22 1998 Brian Gough * c.c: added #include for memcpy * c_float.c: added #include for memcpy Thu Sep 10 12:05:07 1998 Brian Gough * removed wavetable from function names to make them shorter and avoid confusion, e.g. gsl_fft_complex_wavetable_alloc -> gsl_fft_complex_alloc Sat Sep 5 22:32:19 1998 Brian Gough * major work done on templatizing everything so that you can do an fft of a float or a double vector. Tue Sep 1 16:44:06 1998 Brian Gough * c_main.c: renamed c.c to c_main.c Tue Jul 28 11:30:43 1998 Brian Gough * renamed gsl_fft_signals.h to fft_signals.h (not exported) * fft.h: a place to keep some local macros * c.c: renamed complex.c to c.c Mon Jul 27 12:46:25 1998 Brian Gough * bitreverse.c: removed gsl_ftt_ prefix from non-exported functions Wed Jun 10 17:36:01 1998 Brian Gough * test.c: Eliminated the need for getopt * test_radix2.c: Eliminated the need for getopt * test_trap.c: Eliminated the need for getopt Mon Apr 27 18:48:58 1998 Brian Gough * fft_alloc functions now return a pointer to a newly allocated wavetable struct (or a null pointer if there isn't enough memory) Fri Apr 10 15:12:37 1998 Brian Gough * renamed complex_*.c and halfcomplex_*.c to c_*.c and hc_*.c to avoid linker complaints about long filenames on some platforms Sun Mar 29 15:56:34 1998 Brian Gough * To be compatible with other architectures use size_t everywhere instead of unsigned int Sat Mar 21 17:28:26 1998 Brian Gough * factorize.c (gsl_fft_factorize): Stopped returning the sum of factors in the status variable. The user can compute it if necessary. 1998-01-27 Mark Galassi * Makefile.am: fixed a typo: removed trailing \ at the end of this file. gsl/fft/Makefile.am0000644000175000017500000000242513536674414012550 0ustar eddeddnoinst_LTLIBRARIES = libgslfft.la pkginclude_HEADERS = gsl_fft.h gsl_fft_complex.h gsl_fft_halfcomplex.h gsl_fft_real.h gsl_dft_complex.h gsl_dft_complex_float.h gsl_fft_complex_float.h gsl_fft_halfcomplex_float.h gsl_fft_real_float.h AM_CPPFLAGS = -I$(top_srcdir) libgslfft_la_SOURCES = dft.c fft.c noinst_HEADERS = c_pass.h hc_pass.h real_pass.h signals.h signals_source.c c_main.c c_init.c c_pass_2.c c_pass_3.c c_pass_4.c c_pass_5.c c_pass_6.c c_pass_7.c c_pass_n.c c_radix2.c bitreverse.c bitreverse.h factorize.c factorize.h hc_init.c hc_pass_2.c hc_pass_3.c hc_pass_4.c hc_pass_5.c hc_pass_n.c hc_radix2.c hc_unpack.c real_init.c real_pass_2.c real_pass_3.c real_pass_4.c real_pass_5.c real_pass_n.c real_radix2.c real_unpack.c compare.h compare_source.c dft_source.c hc_main.c real_main.c test_complex_source.c test_real_source.c test_trap_source.c urand.c complex_internal.h TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_SOURCES = test.c signals.c test_LDADD = libgslfft.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la #errs_LDADD = libgslfft.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la #benchmark_LDADD = libgslfft.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la gsl/fft/bitreverse.h0000644000175000017500000000250713536674414013040 0ustar eddedd/* fft/bitreverse.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static int FUNCTION(fft_complex,bitreverse_order) (BASE data[], const size_t stride, const size_t n, size_t logn) ; static int FUNCTION(fft_real,bitreverse_order) (BASE data[], const size_t stride, const size_t n, size_t logn) ; gsl/fft/test_real_source.c0000644000175000017500000001660213536674414014224 0ustar eddedd/* fft/test_real.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "bitreverse.h" #include "signals.h" #include "compare.h" void FUNCTION(test_real,func) (size_t stride, size_t n); void FUNCTION(test_real,bitreverse_order) (size_t stride, size_t n); void FUNCTION(test_real,radix2) (size_t stride, size_t n); void FUNCTION(test_real,func) (size_t stride, size_t n) { size_t i ; int status ; TYPE(gsl_fft_real_wavetable) * rw ; TYPE(gsl_fft_halfcomplex_wavetable) * hcw ; TYPE(gsl_fft_real_workspace) * rwork ; BASE * real_data = (BASE *) malloc (n * stride * sizeof (BASE)); BASE * complex_data = (BASE *) malloc (2 * n * stride * sizeof (BASE)); BASE * complex_tmp = (BASE *) malloc (2 * n * stride * sizeof (BASE)); BASE * fft_complex_data = (BASE *) malloc (2 * n * stride * sizeof (BASE)); for (i = 0 ; i < n * stride ; i++) { real_data[i] = (BASE)i ; } for (i = 0 ; i < 2 * n * stride ; i++) { complex_data[i] = (BASE)(i + 1000.0) ; complex_tmp[i] = (BASE)(i + 2000.0) ; fft_complex_data[i] = (BASE)(i + 3000.0) ; } gsl_set_error_handler (NULL); /* abort on any errors */ /* mixed radix real fft */ rw = FUNCTION(gsl_fft_real_wavetable,alloc) (n); gsl_test (rw == 0, NAME(gsl_fft_real_wavetable) "_alloc, n = %d, stride = %d", n, stride); rwork = FUNCTION(gsl_fft_real_workspace,alloc) (n); gsl_test (rwork == 0, NAME(gsl_fft_real_workspace) "_alloc, n = %d", n); FUNCTION(fft_signal,real_noise) (n, stride, complex_data, fft_complex_data); memcpy (complex_tmp, complex_data, 2 * n * stride * sizeof (BASE)); for (i = 0; i < n; i++) { real_data[i*stride] = REAL(complex_data,stride,i); } FUNCTION(gsl_fft_real,transform) (real_data, stride, n, rw, rwork); FUNCTION(gsl_fft_halfcomplex,unpack) (real_data, complex_data, stride, n); status = FUNCTION(compare_complex,results) ("dft", fft_complex_data, "fft of noise", complex_data, stride, n, 1e6); gsl_test (status, NAME(gsl_fft_real) " with signal_real_noise, n = %d, stride = %d", n, stride); /* compute the inverse fft */ hcw = FUNCTION(gsl_fft_halfcomplex_wavetable,alloc) (n); gsl_test (hcw == 0, NAME(gsl_fft_halfcomplex_wavetable) "_alloc, n = %d, stride = %d", n, stride); status = FUNCTION(gsl_fft_halfcomplex,transform) (real_data, stride, n, hcw, rwork); for (i = 0; i < n; i++) { real_data[i*stride] /= n; } FUNCTION(gsl_fft_real,unpack) (real_data, complex_data, stride, n); status = FUNCTION(compare_complex,results) ("orig", complex_tmp, "fft inverse", complex_data, stride, n, 1e6); gsl_test (status, NAME(gsl_fft_halfcomplex) " with data from signal_noise, n = %d, stride = %d", n, stride); FUNCTION(gsl_fft_real_workspace,free) (rwork); FUNCTION(gsl_fft_real_wavetable,free) (rw); FUNCTION(gsl_fft_halfcomplex_wavetable,free) (hcw); free(real_data) ; free(complex_data) ; free(complex_tmp) ; free(fft_complex_data) ; } void FUNCTION(test_real,bitreverse_order) (size_t stride, size_t n) { int status ; size_t logn, i ; BASE * tmp = (BASE *) malloc (n * stride * sizeof (BASE)); BASE * data = (BASE *) malloc (n * stride * sizeof (BASE)); BASE * reversed_data = (BASE *) malloc (n * stride * sizeof (BASE)); for (i = 0; i < stride * n; i++) { data[i] = (BASE)i ; } memcpy (tmp, data, n * stride * sizeof(BASE)) ; logn = 0 ; while (n > (1U <>= 1; } reversed_data[j*stride] = data[i*stride] ; } FUNCTION(fft_real,bitreverse_order) (data, stride, n, logn); status = FUNCTION(compare_real,results) ("naive bit reverse", reversed_data, "fft_complex_bitreverse_order", data, stride, n, 1e6); gsl_test (status, NAME(fft_real) "_bitreverse_order, n = %d", n); free (reversed_data) ; free (data) ; free (tmp) ; } void FUNCTION(test_real,radix2) (size_t stride, size_t n) { size_t i ; int status ; BASE * real_data = (BASE *) malloc (n * stride * sizeof (BASE)); BASE * complex_data = (BASE *) malloc (2 * n * stride * sizeof (BASE)); BASE * complex_tmp = (BASE *) malloc (2 * n * stride * sizeof (BASE)); BASE * fft_complex_data = (BASE *) malloc (2 * n * stride * sizeof (BASE)); for (i = 0 ; i < n * stride ; i++) { real_data[i] = (BASE)i ; } for (i = 0 ; i < 2 * n * stride ; i++) { complex_data[i] = (BASE)(i + 1000.0) ; complex_tmp[i] = (BASE)(i + 2000.0) ; fft_complex_data[i] = (BASE)(i + 3000.0) ; } gsl_set_error_handler (NULL); /* abort on any errors */ /* radix-2 real fft */ FUNCTION(fft_signal,real_noise) (n, stride, complex_data, fft_complex_data); memcpy (complex_tmp, complex_data, 2 * n * stride * sizeof (BASE)); for (i = 0; i < n; i++) { real_data[i*stride] = REAL(complex_data,stride,i); } FUNCTION(gsl_fft_real,radix2_transform) (real_data, stride, n); FUNCTION(gsl_fft_halfcomplex,radix2_unpack) (real_data, complex_data, stride, n); status = FUNCTION(compare_complex,results) ("dft", fft_complex_data, "fft of noise", complex_data, stride, n, 1e6); gsl_test (status, NAME(gsl_fft_real) "_radix2 with signal_real_noise, n = %d, stride = %d", n, stride); /* compute the inverse fft */ status = FUNCTION(gsl_fft_halfcomplex,radix2_transform) (real_data, stride, n); for (i = 0; i < n; i++) { real_data[i*stride] /= n; } FUNCTION(gsl_fft_real,unpack) (real_data, complex_data, stride, n); status = FUNCTION(compare_complex,results) ("orig", complex_tmp, "fft inverse", complex_data, stride, n, 1e6); gsl_test (status, NAME(gsl_fft_halfcomplex) "_radix2 with data from signal_noise, n = %d, stride = %d", n, stride); free(real_data) ; free(complex_data) ; free(complex_tmp) ; free(fft_complex_data) ; } gsl/fft/gsl_fft_complex_float.h0000644000175000017500000001234513536674414015227 0ustar eddedd/* fft/gsl_fft_complex_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_FFT_COMPLEX_FLOAT_H__ #define __GSL_FFT_COMPLEX_FLOAT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Power of 2 routines */ int gsl_fft_complex_float_radix2_forward (gsl_complex_packed_array_float data, const size_t stride, const size_t n); int gsl_fft_complex_float_radix2_backward (gsl_complex_packed_array_float data, const size_t stride, const size_t n); int gsl_fft_complex_float_radix2_inverse (gsl_complex_packed_array_float data, const size_t stride, const size_t n); int gsl_fft_complex_float_radix2_transform (gsl_complex_packed_array_float data, const size_t stride, const size_t n, const gsl_fft_direction sign); int gsl_fft_complex_float_radix2_dif_forward (gsl_complex_packed_array_float data, const size_t stride, const size_t n); int gsl_fft_complex_float_radix2_dif_backward (gsl_complex_packed_array_float data, const size_t stride, const size_t n); int gsl_fft_complex_float_radix2_dif_inverse (gsl_complex_packed_array_float data, const size_t stride, const size_t n); int gsl_fft_complex_float_radix2_dif_transform (gsl_complex_packed_array_float data, const size_t stride, const size_t n, const gsl_fft_direction sign); /* Mixed Radix general-N routines */ typedef struct { size_t n; size_t nf; size_t factor[64]; gsl_complex_float *twiddle[64]; gsl_complex_float *trig; } gsl_fft_complex_wavetable_float; typedef struct { size_t n; float *scratch; } gsl_fft_complex_workspace_float; gsl_fft_complex_wavetable_float *gsl_fft_complex_wavetable_float_alloc (size_t n); void gsl_fft_complex_wavetable_float_free (gsl_fft_complex_wavetable_float * wavetable); gsl_fft_complex_workspace_float *gsl_fft_complex_workspace_float_alloc (size_t n); void gsl_fft_complex_workspace_float_free (gsl_fft_complex_workspace_float * workspace); int gsl_fft_complex_float_memcpy (gsl_fft_complex_wavetable_float * dest, gsl_fft_complex_wavetable_float * src); int gsl_fft_complex_float_forward (gsl_complex_packed_array_float data, const size_t stride, const size_t n, const gsl_fft_complex_wavetable_float * wavetable, gsl_fft_complex_workspace_float * work); int gsl_fft_complex_float_backward (gsl_complex_packed_array_float data, const size_t stride, const size_t n, const gsl_fft_complex_wavetable_float * wavetable, gsl_fft_complex_workspace_float * work); int gsl_fft_complex_float_inverse (gsl_complex_packed_array_float data, const size_t stride, const size_t n, const gsl_fft_complex_wavetable_float * wavetable, gsl_fft_complex_workspace_float * work); int gsl_fft_complex_float_transform (gsl_complex_packed_array_float data, const size_t stride, const size_t n, const gsl_fft_complex_wavetable_float * wavetable, gsl_fft_complex_workspace_float * work, const gsl_fft_direction sign); __END_DECLS #endif /* __GSL_FFT_COMPLEX_FLOAT_H__ */ gsl/fft/signals.c0000644000175000017500000000077313536674414012324 0ustar eddedd#include #include #include #include #include #include #include #include #include "complex_internal.h" #include "urand.c" #define BASE_DOUBLE #include "templates_on.h" #include "signals_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "signals_source.c" #include "templates_off.h" #undef BASE_FLOAT gsl/fft/hc_unpack.c0000644000175000017500000000547613536674414012624 0ustar eddedd/* fft/hc_unpack.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION(gsl_fft_halfcomplex,unpack) (const BASE halfcomplex_coefficient[], BASE complex_coefficient[], const size_t stride, const size_t n) { size_t i; if (n == 0) { GSL_ERROR ("length n must be positive integer", GSL_EDOM); } REAL(complex_coefficient,stride,0) = halfcomplex_coefficient[0]; IMAG(complex_coefficient,stride,0) = 0.0; for (i = 1; i < n - i; i++) { const ATOMIC hc_real = halfcomplex_coefficient[(2 * i - 1) * stride]; const ATOMIC hc_imag = halfcomplex_coefficient[2 * i * stride]; REAL(complex_coefficient,stride,i) = hc_real; IMAG(complex_coefficient,stride,i) = hc_imag; REAL(complex_coefficient,stride,n - i) = hc_real; IMAG(complex_coefficient,stride,n - i) = -hc_imag; } if (i == n - i) { REAL(complex_coefficient,stride,i) = halfcomplex_coefficient[(n - 1) * stride]; IMAG(complex_coefficient,stride,i) = 0.0; } return 0; } int FUNCTION(gsl_fft_halfcomplex,radix2_unpack) (const BASE halfcomplex_coefficient[], BASE complex_coefficient[], const size_t stride, const size_t n) { size_t i; if (n == 0) { GSL_ERROR ("length n must be positive integer", GSL_EDOM); } REAL(complex_coefficient,stride,0) = halfcomplex_coefficient[0]; IMAG(complex_coefficient,stride,0) = 0.0; for (i = 1; i < n - i; i++) { const ATOMIC hc_real = halfcomplex_coefficient[i * stride]; const ATOMIC hc_imag = halfcomplex_coefficient[(n - i) * stride]; REAL(complex_coefficient,stride,i) = hc_real; IMAG(complex_coefficient,stride,i) = hc_imag; REAL(complex_coefficient,stride,n - i) = hc_real; IMAG(complex_coefficient,stride,n - i) = -hc_imag; } if (i == n - i) { REAL(complex_coefficient,stride,i) = halfcomplex_coefficient[i * stride]; IMAG(complex_coefficient,stride,i) = 0.0; } return 0; } gsl/fft/c_radix2.c0000644000175000017500000002045113536674414012352 0ustar eddedd/* fft/c_radix2.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION(gsl_fft_complex,radix2_forward) (TYPE(gsl_complex_packed_array) data, const size_t stride, const size_t n) { gsl_fft_direction sign = gsl_fft_forward; int status = FUNCTION(gsl_fft_complex,radix2_transform) (data, stride, n, sign); return status; } int FUNCTION(gsl_fft_complex,radix2_backward) (TYPE(gsl_complex_packed_array) data, const size_t stride, const size_t n) { gsl_fft_direction sign = gsl_fft_backward; int status = FUNCTION(gsl_fft_complex,radix2_transform) (data, stride, n, sign); return status; } int FUNCTION(gsl_fft_complex,radix2_inverse) (TYPE(gsl_complex_packed_array) data, const size_t stride, const size_t n) { gsl_fft_direction sign = gsl_fft_backward; int status = FUNCTION(gsl_fft_complex,radix2_transform) (data, stride, n, sign); if (status) { return status; } /* normalize inverse fft with 1/n */ { const ATOMIC norm = 1.0 / n; size_t i; for (i = 0; i < n; i++) { REAL(data,stride,i) *= norm; IMAG(data,stride,i) *= norm; } } return status; } int FUNCTION(gsl_fft_complex,radix2_transform) (TYPE(gsl_complex_packed_array) data, const size_t stride, const size_t n, const gsl_fft_direction sign) { int result ; size_t dual; size_t bit; size_t logn = 0; int status; if (n == 1) /* identity operation */ { return 0 ; } /* make sure that n is a power of 2 */ result = fft_binary_logn(n) ; if (result == -1) { GSL_ERROR ("n is not a power of 2", GSL_EINVAL); } else { logn = result ; } /* bit reverse the ordering of input data for decimation in time algorithm */ status = FUNCTION(fft_complex,bitreverse_order) (data, stride, n, logn) ; /* apply fft recursion */ dual = 1; for (bit = 0; bit < logn; bit++) { ATOMIC w_real = 1.0; ATOMIC w_imag = 0.0; const double theta = 2.0 * ((int) sign) * M_PI / (2.0 * (double) dual); const ATOMIC s = sin (theta); const ATOMIC t = sin (theta / 2.0); const ATOMIC s2 = 2.0 * t * t; size_t a, b; /* a = 0 */ for (b = 0; b < n; b += 2 * dual) { const size_t i = b ; const size_t j = b + dual; const ATOMIC z1_real = REAL(data,stride,j) ; const ATOMIC z1_imag = IMAG(data,stride,j) ; const ATOMIC wd_real = z1_real ; const ATOMIC wd_imag = z1_imag ; REAL(data,stride,j) = REAL(data,stride,i) - wd_real; IMAG(data,stride,j) = IMAG(data,stride,i) - wd_imag; REAL(data,stride,i) += wd_real; IMAG(data,stride,i) += wd_imag; } /* a = 1 .. (dual-1) */ for (a = 1; a < dual; a++) { /* trignometric recurrence for w-> exp(i theta) w */ { const ATOMIC tmp_real = w_real - s * w_imag - s2 * w_real; const ATOMIC tmp_imag = w_imag + s * w_real - s2 * w_imag; w_real = tmp_real; w_imag = tmp_imag; } for (b = 0; b < n; b += 2 * dual) { const size_t i = b + a; const size_t j = b + a + dual; const ATOMIC z1_real = REAL(data,stride,j) ; const ATOMIC z1_imag = IMAG(data,stride,j) ; const ATOMIC wd_real = w_real * z1_real - w_imag * z1_imag; const ATOMIC wd_imag = w_real * z1_imag + w_imag * z1_real; REAL(data,stride,j) = REAL(data,stride,i) - wd_real; IMAG(data,stride,j) = IMAG(data,stride,i) - wd_imag; REAL(data,stride,i) += wd_real; IMAG(data,stride,i) += wd_imag; } } dual *= 2; } return 0; } int FUNCTION(gsl_fft_complex,radix2_dif_forward) (TYPE(gsl_complex_packed_array) data, const size_t stride, const size_t n) { gsl_fft_direction sign = gsl_fft_forward; int status = FUNCTION(gsl_fft_complex,radix2_dif_transform) (data, stride, n, sign); return status; } int FUNCTION(gsl_fft_complex,radix2_dif_backward) (TYPE(gsl_complex_packed_array) data, const size_t stride, const size_t n) { gsl_fft_direction sign = gsl_fft_backward; int status = FUNCTION(gsl_fft_complex,radix2_dif_transform) (data, stride, n, sign); return status; } int FUNCTION(gsl_fft_complex,radix2_dif_inverse) (TYPE(gsl_complex_packed_array) data, const size_t stride, const size_t n) { gsl_fft_direction sign = gsl_fft_backward; int status = FUNCTION(gsl_fft_complex,radix2_dif_transform) (data, stride, n, sign); if (status) { return status; } /* normalize inverse fft with 1/n */ { const ATOMIC norm = 1.0 / n; size_t i; for (i = 0; i < n; i++) { REAL(data,stride,i) *= norm; IMAG(data,stride,i) *= norm; } } return status; } int FUNCTION(gsl_fft_complex,radix2_dif_transform) (TYPE(gsl_complex_packed_array) data, const size_t stride, const size_t n, const gsl_fft_direction sign) { int result ; size_t dual; size_t bit; size_t logn = 0; int status; if (n == 1) /* identity operation */ { return 0 ; } /* make sure that n is a power of 2 */ result = fft_binary_logn(n) ; if (result == -1) { GSL_ERROR ("n is not a power of 2", GSL_EINVAL); } else { logn = result ; } /* apply fft recursion */ dual = n / 2; for (bit = 0; bit < logn; bit++) { ATOMIC w_real = 1.0; ATOMIC w_imag = 0.0; const double theta = 2.0 * ((int) sign) * M_PI / ((double) (2 * dual)); const ATOMIC s = sin (theta); const ATOMIC t = sin (theta / 2.0); const ATOMIC s2 = 2.0 * t * t; size_t a, b; for (b = 0; b < dual; b++) { for (a = 0; a < n; a+= 2 * dual) { const size_t i = b + a; const size_t j = b + a + dual; const ATOMIC t1_real = REAL(data,stride,i) + REAL(data,stride,j); const ATOMIC t1_imag = IMAG(data,stride,i) + IMAG(data,stride,j); const ATOMIC t2_real = REAL(data,stride,i) - REAL(data,stride,j); const ATOMIC t2_imag = IMAG(data,stride,i) - IMAG(data,stride,j); REAL(data,stride,i) = t1_real; IMAG(data,stride,i) = t1_imag; REAL(data,stride,j) = w_real*t2_real - w_imag * t2_imag; IMAG(data,stride,j) = w_real*t2_imag + w_imag * t2_real; } /* trignometric recurrence for w-> exp(i theta) w */ { const ATOMIC tmp_real = w_real - s * w_imag - s2 * w_real; const ATOMIC tmp_imag = w_imag + s * w_real - s2 * w_imag; w_real = tmp_real; w_imag = tmp_imag; } } dual /= 2; } /* bit reverse the ordering of output data for decimation in frequency algorithm */ status = FUNCTION(fft_complex,bitreverse_order)(data, stride, n, logn) ; return 0; } gsl/fft/gsl_fft_real_float.h0000644000175000017500000000451613536674414014504 0ustar eddedd/* fft/gsl_fft_real_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_FFT_REAL_FLOAT_H__ #define __GSL_FFT_REAL_FLOAT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_fft_real_float_radix2_transform (float data[], const size_t stride, const size_t n) ; typedef struct { size_t n; size_t nf; size_t factor[64]; gsl_complex_float *twiddle[64]; gsl_complex_float *trig; } gsl_fft_real_wavetable_float; typedef struct { size_t n; float *scratch; } gsl_fft_real_workspace_float; gsl_fft_real_wavetable_float * gsl_fft_real_wavetable_float_alloc (size_t n); void gsl_fft_real_wavetable_float_free (gsl_fft_real_wavetable_float * wavetable); gsl_fft_real_workspace_float * gsl_fft_real_workspace_float_alloc (size_t n); void gsl_fft_real_workspace_float_free (gsl_fft_real_workspace_float * workspace); int gsl_fft_real_float_transform (float data[], const size_t stride, const size_t n, const gsl_fft_real_wavetable_float * wavetable, gsl_fft_real_workspace_float * work); int gsl_fft_real_float_unpack (const float real_float_coefficient[], float complex_coefficient[], const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_FFT_REAL_FLOAT_H__ */ gsl/fft/gsl_fft.h0000644000175000017500000000257213536674414012314 0ustar eddedd/* fft/gsl_fft.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_FFT_H__ #define __GSL_FFT_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef enum { gsl_fft_forward = -1, gsl_fft_backward = +1 } gsl_fft_direction; /* this gives the sign in the formula h(f) = \sum x(t) exp(+/- 2 pi i f t) where - is the forward transform direction and + the inverse direction */ __END_DECLS #endif /* __GSL_FFT_H__ */ gsl/fft/real_init.c0000644000175000017500000001047413536674414012631 0ustar eddedd/* fft/real_init.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ TYPE(gsl_fft_real_wavetable) * FUNCTION(gsl_fft_real_wavetable,alloc) (size_t n) { int status; size_t i; size_t n_factors; size_t t, product, product_1, q; double d_theta; TYPE(gsl_fft_real_wavetable) * wavetable; if (n == 0) { GSL_ERROR_VAL ("length n must be positive integer", GSL_EDOM, 0); } wavetable = (TYPE(gsl_fft_real_wavetable) *) malloc(sizeof(TYPE(gsl_fft_real_wavetable))); if (wavetable == NULL) { GSL_ERROR_VAL ("failed to allocate struct", GSL_ENOMEM, 0); } if (n == 1) { wavetable->trig = 0; } else { wavetable->trig = (TYPE(gsl_complex) *) malloc ((n / 2) * sizeof (TYPE(gsl_complex))); if (wavetable->trig == NULL) { /* error in constructor, prevent memory leak */ free(wavetable) ; GSL_ERROR_VAL ("failed to allocate trigonometric lookup table", GSL_ENOMEM, 0); } } wavetable->n = n; status = fft_real_factorize (n, &n_factors, wavetable->factor); if (status) { /* error in constructor, prevent memory leak */ free(wavetable->trig); free(wavetable) ; GSL_ERROR_VAL ("factorization failed", GSL_EFACTOR, 0); } wavetable->nf = n_factors; d_theta = 2.0 * M_PI / ((double) n); t = 0; product = 1; for (i = 0; i < wavetable->nf; i++) { size_t j; const size_t factor = wavetable->factor[i]; wavetable->twiddle[i] = wavetable->trig + t; product_1 = product; /* product_1 = p_(i-1) */ product *= factor; q = n / product; for (j = 1; j < factor; j++) { size_t k; size_t m = 0; for (k = 1; k < (product_1 + 1) / 2; k++) { double theta; m = m + j * q; m = m % n; theta = d_theta * m; /* d_theta*j*k*q */ GSL_REAL(wavetable->trig[t]) = cos (theta); GSL_IMAG(wavetable->trig[t]) = sin (theta); t++; } } } if (t > (n / 2)) { /* error in constructor, prevent memory leak */ free(wavetable->trig); free(wavetable) ; GSL_ERROR_VAL ("overflowed trigonometric lookup table", GSL_ESANITY, 0); } return wavetable; } TYPE(gsl_fft_real_workspace) * FUNCTION(gsl_fft_real_workspace,alloc) (size_t n) { TYPE(gsl_fft_real_workspace) * workspace; if (n == 0) { GSL_ERROR_VAL ("length n must be positive integer", GSL_EDOM, 0); } workspace = (TYPE(gsl_fft_real_workspace) *) malloc(sizeof(TYPE(gsl_fft_real_workspace))); if (workspace == NULL) { GSL_ERROR_VAL ("failed to allocate struct", GSL_ENOMEM, 0); } workspace->n = n; workspace->scratch = (BASE *) malloc (n * sizeof (BASE)); if (workspace->scratch == NULL) { /* error in constructor, prevent memory leak */ free(workspace) ; GSL_ERROR_VAL ("failed to allocate scratch space", GSL_ENOMEM, 0); } return workspace; } void FUNCTION(gsl_fft_real_wavetable,free) (TYPE(gsl_fft_real_wavetable) * wavetable) { RETURN_IF_NULL (wavetable); /* release trigonometric lookup tables */ free (wavetable->trig); wavetable->trig = NULL; free (wavetable) ; } void FUNCTION(gsl_fft_real_workspace,free) (TYPE(gsl_fft_real_workspace) * workspace) { RETURN_IF_NULL (workspace); /* release scratch space */ free (workspace->scratch); workspace->scratch = NULL; free (workspace) ; } gsl/fft/factorize.h0000644000175000017500000000232113536674414012646 0ustar eddedd/* fft/factorize.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static int fft_complex_factorize (const size_t n, size_t *nf, size_t factors[]); static int fft_halfcomplex_factorize (const size_t n, size_t *nf, size_t factors[]); static int fft_real_factorize (const size_t n, size_t *nf, size_t factors[]); static int fft_factorize (const size_t n, const size_t implemented_subtransforms[], size_t *n_factors, size_t factors[]); static int fft_binary_logn (const size_t n) ; gsl/fft/c_main.c0000644000175000017500000001573113536674414012112 0ustar eddedd/* fft/c_main.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "c_pass.h" int FUNCTION(gsl_fft_complex,forward) (TYPE(gsl_complex_packed_array) data, const size_t stride, const size_t n, const TYPE(gsl_fft_complex_wavetable) * wavetable, TYPE(gsl_fft_complex_workspace) * work) { gsl_fft_direction sign = gsl_fft_forward; int status = FUNCTION(gsl_fft_complex,transform) (data, stride, n, wavetable, work, sign); return status; } int FUNCTION(gsl_fft_complex,backward) (TYPE(gsl_complex_packed_array) data, const size_t stride, const size_t n, const TYPE(gsl_fft_complex_wavetable) * wavetable, TYPE(gsl_fft_complex_workspace) * work) { gsl_fft_direction sign = gsl_fft_backward; int status = FUNCTION(gsl_fft_complex,transform) (data, stride, n, wavetable, work, sign); return status; } int FUNCTION(gsl_fft_complex,inverse) (TYPE(gsl_complex_packed_array) data, const size_t stride, const size_t n, const TYPE(gsl_fft_complex_wavetable) * wavetable, TYPE(gsl_fft_complex_workspace) * work) { gsl_fft_direction sign = gsl_fft_backward; int status = FUNCTION(gsl_fft_complex,transform) (data, stride, n, wavetable, work, sign); if (status) { return status; } /* normalize inverse fft with 1/n */ { const ATOMIC norm = ONE / (ATOMIC)n; size_t i; for (i = 0; i < n; i++) { REAL(data,stride,i) *= norm; IMAG(data,stride,i) *= norm; } } return status; } int FUNCTION(gsl_fft_complex,transform) (TYPE(gsl_complex_packed_array) data, const size_t stride, const size_t n, const TYPE(gsl_fft_complex_wavetable) * wavetable, TYPE(gsl_fft_complex_workspace) * work, const gsl_fft_direction sign) { const size_t nf = wavetable->nf; size_t i; size_t q, product = 1; TYPE(gsl_complex) *twiddle1, *twiddle2, *twiddle3, *twiddle4, *twiddle5, *twiddle6; size_t state = 0; BASE * const scratch = work->scratch; BASE * in = data; size_t istride = stride; BASE * out = scratch; size_t ostride = 1; if (n == 0) { GSL_ERROR ("length n must be positive integer", GSL_EDOM); } if (n == 1) { /* FFT of 1 data point is the identity */ return 0; } if (n != wavetable->n) { GSL_ERROR ("wavetable does not match length of data", GSL_EINVAL); } if (n != work->n) { GSL_ERROR ("workspace does not match length of data", GSL_EINVAL); } for (i = 0; i < nf; i++) { const size_t factor = wavetable->factor[i]; product *= factor; q = n / product; if (state == 0) { in = data; istride = stride; out = scratch; ostride = 1; state = 1; } else { in = scratch; istride = 1; out = data; ostride = stride; state = 0; } if (factor == 2) { twiddle1 = wavetable->twiddle[i]; FUNCTION(fft_complex,pass_2) (in, istride, out, ostride, sign, product, n, twiddle1); } else if (factor == 3) { twiddle1 = wavetable->twiddle[i]; twiddle2 = twiddle1 + q; FUNCTION(fft_complex,pass_3) (in, istride, out, ostride, sign, product, n, twiddle1, twiddle2); } else if (factor == 4) { twiddle1 = wavetable->twiddle[i]; twiddle2 = twiddle1 + q; twiddle3 = twiddle2 + q; FUNCTION(fft_complex,pass_4) (in, istride, out, ostride, sign, product, n, twiddle1, twiddle2, twiddle3); } else if (factor == 5) { twiddle1 = wavetable->twiddle[i]; twiddle2 = twiddle1 + q; twiddle3 = twiddle2 + q; twiddle4 = twiddle3 + q; FUNCTION(fft_complex,pass_5) (in, istride, out, ostride, sign, product, n, twiddle1, twiddle2, twiddle3, twiddle4); } else if (factor == 6) { twiddle1 = wavetable->twiddle[i]; twiddle2 = twiddle1 + q; twiddle3 = twiddle2 + q; twiddle4 = twiddle3 + q; twiddle5 = twiddle4 + q; FUNCTION(fft_complex,pass_6) (in, istride, out, ostride, sign, product, n, twiddle1, twiddle2, twiddle3, twiddle4, twiddle5); } else if (factor == 7) { twiddle1 = wavetable->twiddle[i]; twiddle2 = twiddle1 + q; twiddle3 = twiddle2 + q; twiddle4 = twiddle3 + q; twiddle5 = twiddle4 + q; twiddle6 = twiddle5 + q; FUNCTION(fft_complex,pass_7) (in, istride, out, ostride, sign, product, n, twiddle1, twiddle2, twiddle3, twiddle4, twiddle5, twiddle6); } else { twiddle1 = wavetable->twiddle[i]; FUNCTION(fft_complex,pass_n) (in, istride, out, ostride, sign, factor, product, n, twiddle1); } } if (state == 1) /* copy results back from scratch to data */ { for (i = 0; i < n; i++) { REAL(data,stride,i) = REAL(scratch,1,i) ; IMAG(data,stride,i) = IMAG(scratch,1,i) ; } } return 0; } gsl/fft/c_pass_4.c0000644000175000017500000001221513536674414012351 0ustar eddedd/* fft/c_pass_4.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static int FUNCTION(fft_complex,pass_4) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const gsl_fft_direction sign, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[]) { size_t i = 0, j = 0; size_t k, k1; const size_t factor = 4; const size_t m = n / factor; const size_t q = n / product; const size_t p_1 = product / factor; const size_t jump = (factor - 1) * p_1; for (k = 0; k < q; k++) { ATOMIC w1_real, w1_imag, w2_real, w2_imag, w3_real, w3_imag; if (k == 0) { w1_real = 1.0; w1_imag = 0.0; w2_real = 1.0; w2_imag = 0.0; w3_real = 1.0; w3_imag = 0.0; } else { if (sign == gsl_fft_forward) { /* forward tranform */ w1_real = GSL_REAL(twiddle1[k - 1]); w1_imag = GSL_IMAG(twiddle1[k - 1]); w2_real = GSL_REAL(twiddle2[k - 1]); w2_imag = GSL_IMAG(twiddle2[k - 1]); w3_real = GSL_REAL(twiddle3[k - 1]); w3_imag = GSL_IMAG(twiddle3[k - 1]); } else { /* backward tranform: w -> conjugate(w) */ w1_real = GSL_REAL(twiddle1[k - 1]); w1_imag = -GSL_IMAG(twiddle1[k - 1]); w2_real = GSL_REAL(twiddle2[k - 1]); w2_imag = -GSL_IMAG(twiddle2[k - 1]); w3_real = GSL_REAL(twiddle3[k - 1]); w3_imag = -GSL_IMAG(twiddle3[k - 1]); } } for (k1 = 0; k1 < p_1; k1++) { const ATOMIC z0_real = REAL(in,istride,i); const ATOMIC z0_imag = IMAG(in,istride,i); const ATOMIC z1_real = REAL(in,istride,i+m); const ATOMIC z1_imag = IMAG(in,istride,i+m); const ATOMIC z2_real = REAL(in,istride,i+2*m); const ATOMIC z2_imag = IMAG(in,istride,i+2*m); const ATOMIC z3_real = REAL(in,istride,i+3*m); const ATOMIC z3_imag = IMAG(in,istride,i+3*m); /* compute x = W(4) z */ /* t1 = z0 + z2 */ const ATOMIC t1_real = z0_real + z2_real; const ATOMIC t1_imag = z0_imag + z2_imag; /* t2 = z1 + z3 */ const ATOMIC t2_real = z1_real + z3_real; const ATOMIC t2_imag = z1_imag + z3_imag; /* t3 = z0 - z2 */ const ATOMIC t3_real = z0_real - z2_real; const ATOMIC t3_imag = z0_imag - z2_imag; /* t4 = (+/-) (z1 - z3) */ const ATOMIC t4_real = ((int) sign) * (z1_real - z3_real); const ATOMIC t4_imag = ((int) sign) * (z1_imag - z3_imag); /* x0 = t1 + t2 */ const ATOMIC x0_real = t1_real + t2_real; const ATOMIC x0_imag = t1_imag + t2_imag; /* x1 = t3 + i t4 */ const ATOMIC x1_real = t3_real - t4_imag; const ATOMIC x1_imag = t3_imag + t4_real; /* x2 = t1 - t2 */ const ATOMIC x2_real = t1_real - t2_real; const ATOMIC x2_imag = t1_imag - t2_imag; /* x3 = t3 - i t4 */ const ATOMIC x3_real = t3_real + t4_imag; const ATOMIC x3_imag = t3_imag - t4_real; /* apply twiddle factors */ /* to0 = 1 * x0 */ REAL(out,ostride,j) = x0_real; IMAG(out,ostride,j) = x0_imag; /* to1 = w1 * x1 */ REAL(out, ostride, j + p_1) = w1_real * x1_real - w1_imag * x1_imag; IMAG(out, ostride, j + p_1) = w1_real * x1_imag + w1_imag * x1_real; /* to2 = w2 * x2 */ REAL(out, ostride, j + 2 * p_1) = w2_real * x2_real - w2_imag * x2_imag; IMAG(out, ostride, j + 2 * p_1) = w2_real * x2_imag + w2_imag * x2_real; /* to3 = w3 * x3 */ REAL(out, ostride, j + 3 * p_1) = w3_real * x3_real - w3_imag * x3_imag; IMAG(out, ostride, j + 3 * p_1) = w3_real * x3_imag + w3_imag * x3_real; i++; j++; } j += jump; } return 0; } gsl/fft/dft.c0000644000175000017500000000073213536674414011434 0ustar eddedd#include #include #include #include #include #include #include #include #include "complex_internal.h" #define BASE_DOUBLE #include "templates_on.h" #include "dft_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "dft_source.c" #include "templates_off.h" #undef BASE_FLOAT gsl/fft/signals_source.c0000644000175000017500000001613713536674414013705 0ustar eddedd/* fft/signals_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "signals.h" int FUNCTION(fft_signal,complex_pulse) (const size_t k, const size_t n, const size_t stride, const BASE z_real, const BASE z_imag, BASE data[], BASE fft[]) { size_t j; if (n == 0) { GSL_ERROR ("length n must be positive integer", GSL_EDOM); } /* gsl_complex pulse at position k, data[j] = z * delta_{jk} */ for (j = 0; j < n; j++) { REAL(data,stride,j) = 0.0; IMAG(data,stride,j) = 0.0; } REAL(data,stride,k % n) = z_real; IMAG(data,stride,k % n) = z_imag; /* fourier transform, fft[j] = z * exp(-2 pi i j k / n) */ for (j = 0; j < n; j++) { const double arg = -2 * M_PI * ((double) ((j * k) % n)) / ((double) n); const BASE w_real = (BASE)cos (arg); const BASE w_imag = (BASE)sin (arg); REAL(fft,stride,j) = w_real * z_real - w_imag * z_imag; IMAG(fft,stride,j) = w_real * z_imag + w_imag * z_real; } return 0; } int FUNCTION(fft_signal,complex_constant) (const size_t n, const size_t stride, const BASE z_real, const BASE z_imag, BASE data[], BASE fft[]) { size_t j; if (n == 0) { GSL_ERROR ("length n must be positive integer", GSL_EDOM); } /* constant, data[j] = z */ for (j = 0; j < n; j++) { REAL(data,stride,j) = z_real; IMAG(data,stride,j) = z_imag; } /* fourier transform, fft[j] = n z delta_{j0} */ for (j = 0; j < n; j++) { REAL(fft,stride,j) = 0.0; IMAG(fft,stride,j) = 0.0; } REAL(fft,stride,0) = ((BASE) n) * z_real; IMAG(fft,stride,0) = ((BASE) n) * z_imag; return 0; } int FUNCTION(fft_signal,complex_exp) (const int k, const size_t n, const size_t stride, const BASE z_real, const BASE z_imag, BASE data[], BASE fft[]) { size_t j; if (n == 0) { GSL_ERROR ("length n must be positive integer", GSL_EDOM); } /* exponential, data[j] = z * exp(2 pi i j k) */ for (j = 0; j < n; j++) { const double arg = 2 * M_PI * ((double) ((j * k) % n)) / ((double) n); const BASE w_real = (BASE)cos (arg); const BASE w_imag = (BASE)sin (arg); REAL(data,stride,j) = w_real * z_real - w_imag * z_imag; IMAG(data,stride,j) = w_real * z_imag + w_imag * z_real; } /* fourier transform, fft[j] = z * delta{(j - k),0} */ for (j = 0; j < n; j++) { REAL(fft,stride,j) = 0.0; IMAG(fft,stride,j) = 0.0; } { int freq; if (k <= 0) { freq = (n-k) % n ; } else { freq = (k % n); }; REAL(fft,stride,freq) = ((BASE) n) * z_real; IMAG(fft,stride,freq) = ((BASE) n) * z_imag; } return 0; } int FUNCTION(fft_signal,complex_exppair) (const int k1, const int k2, const size_t n, const size_t stride, const BASE z1_real, const BASE z1_imag, const BASE z2_real, const BASE z2_imag, BASE data[], BASE fft[]) { size_t j; if (n == 0) { GSL_ERROR ("length n must be positive integer", GSL_EDOM); } /* exponential, data[j] = z1 * exp(2 pi i j k1) + z2 * exp(2 pi i j k2) */ for (j = 0; j < n; j++) { const double arg1 = 2 * M_PI * ((double) ((j * k1) % n)) / ((double) n); const BASE w1_real = (BASE)cos (arg1); const BASE w1_imag = (BASE)sin (arg1); const double arg2 = 2 * M_PI * ((double) ((j * k2) % n)) / ((double) n); const BASE w2_real = (BASE)cos (arg2); const BASE w2_imag = (BASE)sin (arg2); REAL(data,stride,j) = w1_real * z1_real - w1_imag * z1_imag; IMAG(data,stride,j) = w1_real * z1_imag + w1_imag * z1_real; REAL(data,stride,j) += w2_real * z2_real - w2_imag * z2_imag; IMAG(data,stride,j) += w2_real * z2_imag + w2_imag * z2_real; } /* fourier transform, fft[j] = z1 * delta{(j - k1),0} + z2 * delta{(j - k2,0)} */ for (j = 0; j < n; j++) { REAL(fft,stride,j) = 0.0; IMAG(fft,stride,j) = 0.0; } { int freq1, freq2; if (k1 <= 0) { freq1 = (n - k1) % n; } else { freq1 = (k1 % n); }; if (k2 <= 0) { freq2 = (n - k2) % n; } else { freq2 = (k2 % n); }; REAL(fft,stride,freq1) += ((BASE) n) * z1_real; IMAG(fft,stride,freq1) += ((BASE) n) * z1_imag; REAL(fft,stride,freq2) += ((BASE) n) * z2_real; IMAG(fft,stride,freq2) += ((BASE) n) * z2_imag; } return 0; } int FUNCTION(fft_signal,complex_noise) (const size_t n, const size_t stride, BASE data[], BASE fft[]) { size_t i; int status; if (n == 0) { GSL_ERROR ("length n must be positive integer", GSL_EDOM); } for (i = 0; i < n; i++) { REAL(data,stride,i) = (BASE)urand(); IMAG(data,stride,i) = (BASE)urand(); } /* compute the dft */ status = FUNCTION(gsl_dft_complex,forward) (data, stride, n, fft); return status; } int FUNCTION(fft_signal,real_noise) (const size_t n, const size_t stride, BASE data[], BASE fft[]) { size_t i; int status; if (n == 0) { GSL_ERROR ("length n must be positive integer", GSL_EDOM); } for (i = 0; i < n; i++) { REAL(data,stride,i) = (BASE)urand(); IMAG(data,stride,i) = 0.0; } /* compute the dft */ status = FUNCTION(gsl_dft_complex,forward) (data, stride, n, fft); return status; } gsl/fft/hc_pass_n.c0000644000175000017500000002006513536674414012615 0ustar eddedd/* fft/hc_pass_n.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void FUNCTION(fft_halfcomplex,pass_n) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t factor, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle[]) { size_t k, k1; const size_t m = n / factor; const size_t q = n / product; const size_t product_1 = product / factor; size_t e1, e2; const double d_theta = 2.0 * M_PI / ((double) factor); const ATOMIC cos_d_theta = cos (d_theta); const ATOMIC sin_d_theta = sin (d_theta); for (k1 = 0; k1 < product_1; k1++) { /* compute z = W(factor) x, for x halfcomplex */ ATOMIC dw_real = 1.0, dw_imag = 0.0; for (e1 = 0; e1 < factor; e1++) { ATOMIC sum_real = 0.0; ATOMIC w_real = 1.0, w_imag = 0.0; if (e1 > 0) { ATOMIC tmp_real = dw_real * cos_d_theta - dw_imag * sin_d_theta; ATOMIC tmp_imag = dw_real * sin_d_theta + dw_imag * cos_d_theta; dw_real = tmp_real; dw_imag = tmp_imag; } for (e2 = 0; e2 <= factor - e2; e2++) { ATOMIC z_real, z_imag; if (e2 > 0) { ATOMIC tmp_real = dw_real * w_real - dw_imag * w_imag; ATOMIC tmp_imag = dw_real * w_imag + dw_imag * w_real; w_real = tmp_real; w_imag = tmp_imag; } if (e2 == 0) { size_t from_idx = factor * k1 * q; z_real = VECTOR(in,istride,from_idx); z_imag = 0.0; sum_real += w_real * z_real - w_imag * z_imag; } else if (e2 == factor - e2) { size_t from_idx = factor * q * k1 + 2 * e2 * q - 1; z_real = VECTOR(in,istride,from_idx); z_imag = 0.0; sum_real += w_real * z_real; } else { size_t from_idx = factor * q * k1 + 2 * e2 * q - 1; z_real = VECTOR(in,istride,from_idx); z_imag = VECTOR(in,istride,from_idx + 1); sum_real += 2 * (w_real * z_real - w_imag * z_imag); } } { const size_t to_idx = q * k1 + e1 * m; VECTOR(out,ostride,to_idx) = sum_real; } } } if (q == 1) return; for (k = 1; k < (q + 1) / 2; k++) { for (k1 = 0; k1 < product_1; k1++) { ATOMIC dw_real = 1.0, dw_imag = 0.0; for (e1 = 0; e1 < factor; e1++) { ATOMIC z_real, z_imag; ATOMIC sum_real = 0.0; ATOMIC sum_imag = 0.0; ATOMIC w_real = 1.0, w_imag = 0.0; if (e1 > 0) { ATOMIC t_real = dw_real * cos_d_theta - dw_imag * sin_d_theta; ATOMIC t_imag = dw_real * sin_d_theta + dw_imag * cos_d_theta; dw_real = t_real; dw_imag = t_imag; } for (e2 = 0; e2 < factor; e2++) { if (e2 > 0) { ATOMIC tmp_real = dw_real * w_real - dw_imag * w_imag; ATOMIC tmp_imag = dw_real * w_imag + dw_imag * w_real; w_real = tmp_real; w_imag = tmp_imag; } if (e2 < factor - e2) { const size_t from0 = factor * k1 * q + 2 * k + 2 * e2 * q - 1; z_real = VECTOR(in,istride,from0); z_imag = VECTOR(in,istride,from0 + 1); } else { const size_t from0 = factor * k1 * q - 2 * k + 2 * (factor - e2) * q - 1; z_real = VECTOR(in,istride,from0); z_imag = -VECTOR(in,istride,from0 + 1); } sum_real += w_real * z_real - w_imag * z_imag; sum_imag += w_real * z_imag + w_imag * z_real; } if (k == 0 || e1 == 0) { w_real = 1.0; w_imag = 0.0; } else { size_t tskip = (q + 1) / 2 - 1; w_real = GSL_REAL(twiddle[k - 1 + tskip * (e1 - 1)]); w_imag = GSL_IMAG(twiddle[k - 1 + tskip * (e1 - 1)]); } { const size_t to0 = k1 * q + 2 * k + e1 * m - 1; VECTOR(out,ostride,to0) = w_real * sum_real - w_imag * sum_imag; VECTOR(out,ostride,to0 + 1) = w_real * sum_imag + w_imag * sum_real; } } } } if (q % 2 == 1) return; { double tw_arg = M_PI / ((double) factor); ATOMIC cos_tw_arg = cos (tw_arg); ATOMIC sin_tw_arg = sin (tw_arg); for (k1 = 0; k1 < product_1; k1++) { ATOMIC dw_real = 1.0, dw_imag = 0.0; ATOMIC tw_real = 1.0, tw_imag = 0.0; for (e1 = 0; e1 < factor; e1++) { ATOMIC w_real, w_imag, z_real, z_imag; ATOMIC sum_real = 0.0; if (e1 > 0) { ATOMIC tmp_real = tw_real * cos_tw_arg - tw_imag * sin_tw_arg; ATOMIC tmp_imag = tw_real * sin_tw_arg + tw_imag * cos_tw_arg; tw_real = tmp_real; tw_imag = tmp_imag; } w_real = tw_real; w_imag = tw_imag; if (e1 > 0) { ATOMIC t_real = dw_real * cos_d_theta - dw_imag * sin_d_theta; ATOMIC t_imag = dw_real * sin_d_theta + dw_imag * cos_d_theta; dw_real = t_real; dw_imag = t_imag; } for (e2 = 0; e2 <= factor - e2 - 1; e2++) { if (e2 > 0) { ATOMIC tmp_real = dw_real * w_real - dw_imag * w_imag; ATOMIC tmp_imag = dw_real * w_imag + dw_imag * w_real; w_real = tmp_real; w_imag = tmp_imag; } if (e2 == factor - e2 - 1) { const size_t from0 = factor * k1 * q + q + 2 * e2 * q - 1; z_real = VECTOR(in,istride,from0); z_imag = 0.0; sum_real += w_real * z_real - w_imag * z_imag; } else { const size_t from0 = factor * k1 * q + q + 2 * e2 * q - 1; z_real = VECTOR(in,istride,from0); z_imag = VECTOR(in,istride,from0 + 1); sum_real += 2 * (w_real * z_real - w_imag * z_imag); } } { const size_t to0 = k1 * q + q + e1 * m - 1; VECTOR(out,ostride,to0) = sum_real; } } } } return; } gsl/fft/c_pass_3.c0000644000175000017500000001050713536674414012352 0ustar eddedd/* fft/c_pass_3.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static int FUNCTION(fft_complex,pass_3) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const gsl_fft_direction sign, const size_t product, const size_t n, const TYPE(gsl_complex) * twiddle1, const TYPE(gsl_complex) * twiddle2) { size_t i = 0, j = 0; size_t k, k1; const size_t factor = 3; const size_t m = n / factor; const size_t q = n / product; const size_t product_1 = product / factor; const size_t jump = (factor - 1) * product_1; const ATOMIC tau = sqrt (3.0) / 2.0; for (k = 0; k < q; k++) { ATOMIC w1_real, w1_imag, w2_real, w2_imag; if (k == 0) { w1_real = 1.0; w1_imag = 0.0; w2_real = 1.0; w2_imag = 0.0; } else { if (sign == gsl_fft_forward) { /* forward tranform */ w1_real = GSL_REAL(twiddle1[k - 1]); w1_imag = GSL_IMAG(twiddle1[k - 1]); w2_real = GSL_REAL(twiddle2[k - 1]); w2_imag = GSL_IMAG(twiddle2[k - 1]); } else { /* backward tranform: w -> conjugate(w) */ w1_real = GSL_REAL(twiddle1[k - 1]); w1_imag = -GSL_IMAG(twiddle1[k - 1]); w2_real = GSL_REAL(twiddle2[k - 1]); w2_imag = -GSL_IMAG(twiddle2[k - 1]); } } for (k1 = 0; k1 < product_1; k1++) { const ATOMIC z0_real = REAL(in,istride,i); const ATOMIC z0_imag = IMAG(in,istride,i); const ATOMIC z1_real = REAL(in,istride,i+m); const ATOMIC z1_imag = IMAG(in,istride,i+m); const ATOMIC z2_real = REAL(in,istride,i+2*m); const ATOMIC z2_imag = IMAG(in,istride,i+2*m); /* compute x = W(3) z */ /* t1 = z1 + z2 */ const ATOMIC t1_real = z1_real + z2_real; const ATOMIC t1_imag = z1_imag + z2_imag; /* t2 = z0 - t1/2 */ const ATOMIC t2_real = z0_real - t1_real / 2.0; const ATOMIC t2_imag = z0_imag - t1_imag / 2.0; /* t3 = (+/-) sin(pi/3)*(z1 - z2) */ const ATOMIC t3_real = ((int) sign) * tau * (z1_real - z2_real); const ATOMIC t3_imag = ((int) sign) * tau * (z1_imag - z2_imag); /* x0 = z0 + t1 */ const ATOMIC x0_real = z0_real + t1_real; const ATOMIC x0_imag = z0_imag + t1_imag; /* x1 = t2 + i t3 */ const ATOMIC x1_real = t2_real - t3_imag; const ATOMIC x1_imag = t2_imag + t3_real; /* x2 = t2 - i t3 */ const ATOMIC x2_real = t2_real + t3_imag; const ATOMIC x2_imag = t2_imag - t3_real; /* apply twiddle factors */ /* to0 = 1 * x0 */ REAL(out,ostride,j) = x0_real; IMAG(out,ostride,j) = x0_imag; /* to1 = w1 * x1 */ REAL(out,ostride,j+product_1) = w1_real * x1_real - w1_imag * x1_imag; IMAG(out,ostride,j+product_1) = w1_real * x1_imag + w1_imag * x1_real; /* to2 = w2 * x2 */ REAL(out,ostride,j+2*product_1) = w2_real * x2_real - w2_imag * x2_imag; IMAG(out,ostride,j+2*product_1) = w2_real * x2_imag + w2_imag * x2_real; i++; j++; } j += jump; } return 0; } gsl/fft/bitreverse.c0000644000175000017500000000473513536674414013040 0ustar eddedd/* fft/bitreverse.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include "complex_internal.h" #include "bitreverse.h" static int FUNCTION(fft_complex,bitreverse_order) (BASE data[], const size_t stride, const size_t n, size_t logn) { /* This is the Goldrader bit-reversal algorithm */ size_t i; size_t j = 0; logn = 0 ; /* not needed for this algorithm */ for (i = 0; i < n - 1; i++) { size_t k = n / 2 ; if (i < j) { const BASE tmp_real = REAL(data,stride,i); const BASE tmp_imag = IMAG(data,stride,i); REAL(data,stride,i) = REAL(data,stride,j); IMAG(data,stride,i) = IMAG(data,stride,j); REAL(data,stride,j) = tmp_real; IMAG(data,stride,j) = tmp_imag; } while (k <= j) { j = j - k ; k = k / 2 ; } j += k ; } return 0; } static int FUNCTION(fft_real,bitreverse_order) (BASE data[], const size_t stride, const size_t n, size_t logn) { /* This is the Goldrader bit-reversal algorithm */ size_t i; size_t j = 0; logn = 0 ; /* not needed for this algorithm */ for (i = 0; i < n - 1; i++) { size_t k = n / 2 ; if (i < j) { const BASE tmp = VECTOR(data,stride,i); VECTOR(data,stride,i) = VECTOR(data,stride,j); VECTOR(data,stride,j) = tmp; } while (k <= j) { j = j - k ; k = k / 2 ; } j += k ; } return 0; } gsl/fft/hc_pass_5.c0000644000175000017500000002275513536674414012534 0ustar eddedd/* fft/hc_pass_5.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void FUNCTION(fft_halfcomplex,pass_5) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[], const TYPE(gsl_complex) twiddle4[]) { size_t i, j, k, k1, jump; size_t factor, q, m, product_1; const ATOMIC sina = sin (2.0 * M_PI / 5.0); const ATOMIC sinb = sin (2.0 * M_PI / 10.0); i = 0; j = 0; factor = 5; m = n / factor; q = n / product; product_1 = product / factor; jump = (factor - 1) * q; for (k1 = 0; k1 < product_1; k1++) { const size_t from0 = 5 * k1 * q; const size_t from1 = from0 + 2 * q - 1; const size_t from2 = from1 + 2 * q; const ATOMIC z0_real = VECTOR(in,istride,from0); const ATOMIC z1_real = VECTOR(in,istride,from1); const ATOMIC z1_imag = VECTOR(in,istride,from1 + 1); const ATOMIC z2_real = VECTOR(in,istride,from2); const ATOMIC z2_imag = VECTOR(in,istride,from2 + 1); const ATOMIC t1_real = 2 * (z1_real + z2_real); const ATOMIC t2_real = 2 * (sqrt (5.0) / 4.0) * (z1_real - z2_real); const ATOMIC t3_real = z0_real - t1_real / 4.0; const ATOMIC t4_real = t2_real + t3_real; const ATOMIC t5_real = -t2_real + t3_real; const ATOMIC t6_imag = 2 * (sina * z1_imag + sinb * z2_imag); const ATOMIC t7_imag = 2 * (sinb * z1_imag - sina * z2_imag); const ATOMIC x0_real = z0_real + t1_real; const ATOMIC x1_real = t4_real - t6_imag; const ATOMIC x2_real = t5_real - t7_imag; const ATOMIC x3_real = t5_real + t7_imag; const ATOMIC x4_real = t4_real + t6_imag; const size_t to0 = q * k1; const size_t to1 = to0 + m; const size_t to2 = to1 + m; const size_t to3 = to2 + m; const size_t to4 = to3 + m; VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to1) = x1_real; VECTOR(out,ostride,to2) = x2_real; VECTOR(out,ostride,to3) = x3_real; VECTOR(out,ostride,to4) = x4_real; } if (q == 1) return; for (k = 1; k < (q + 1) / 2; k++) { const ATOMIC w1_real = GSL_REAL(twiddle1[k - 1]); const ATOMIC w1_imag = GSL_IMAG(twiddle1[k - 1]); const ATOMIC w2_real = GSL_REAL(twiddle2[k - 1]); const ATOMIC w2_imag = GSL_IMAG(twiddle2[k - 1]); const ATOMIC w3_real = GSL_REAL(twiddle3[k - 1]); const ATOMIC w3_imag = GSL_IMAG(twiddle3[k - 1]); const ATOMIC w4_real = GSL_REAL(twiddle4[k - 1]); const ATOMIC w4_imag = GSL_IMAG(twiddle4[k - 1]); for (k1 = 0; k1 < product_1; k1++) { const size_t from0 = 5 * k1 * q + 2 * k - 1; const size_t from1 = from0 + 2 * q; const size_t from2 = from1 + 2 * q; const size_t from3 = 5 * k1 * q - 2 * k + 2 * q - 1; const size_t from4 = from3 + 2 * q; const ATOMIC z0_real = VECTOR(in,istride,from0); const ATOMIC z0_imag = VECTOR(in,istride,from0 + 1); const ATOMIC z1_real = VECTOR(in,istride,from1); const ATOMIC z1_imag = VECTOR(in,istride,from1 + 1); const ATOMIC z2_real = VECTOR(in,istride,from2); const ATOMIC z2_imag = VECTOR(in,istride,from2 + 1); const ATOMIC z3_real = VECTOR(in,istride,from4); const ATOMIC z3_imag = -VECTOR(in,istride,from4 + 1); const ATOMIC z4_real = VECTOR(in,istride,from3); const ATOMIC z4_imag = -VECTOR(in,istride,from3 + 1); /* compute x = W(5) z */ /* t1 = z1 + z4 */ const ATOMIC t1_real = z1_real + z4_real; const ATOMIC t1_imag = z1_imag + z4_imag; /* t2 = z2 + z3 */ const ATOMIC t2_real = z2_real + z3_real; const ATOMIC t2_imag = z2_imag + z3_imag; /* t3 = z1 - z4 */ const ATOMIC t3_real = z1_real - z4_real; const ATOMIC t3_imag = z1_imag - z4_imag; /* t4 = z2 - z3 */ const ATOMIC t4_real = z2_real - z3_real; const ATOMIC t4_imag = z2_imag - z3_imag; /* t5 = t1 + t2 */ const ATOMIC t5_real = t1_real + t2_real; const ATOMIC t5_imag = t1_imag + t2_imag; /* t6 = (sqrt(5)/4)(t1 - t2) */ const ATOMIC t6_real = (sqrt (5.0) / 4.0) * (t1_real - t2_real); const ATOMIC t6_imag = (sqrt (5.0) / 4.0) * (t1_imag - t2_imag); /* t7 = z0 - ((t5)/4) */ const ATOMIC t7_real = z0_real - t5_real / 4.0; const ATOMIC t7_imag = z0_imag - t5_imag / 4.0; /* t8 = t7 + t6 */ const ATOMIC t8_real = t7_real + t6_real; const ATOMIC t8_imag = t7_imag + t6_imag; /* t9 = t7 - t6 */ const ATOMIC t9_real = t7_real - t6_real; const ATOMIC t9_imag = t7_imag - t6_imag; /* t10 = sin(2 pi/5) t3 + sin(2 pi/10) t4 */ const ATOMIC t10_real = sina * t3_real + sinb * t4_real; const ATOMIC t10_imag = sina * t3_imag + sinb * t4_imag; /* t11 = sin(2 pi/10) t3 - sin(2 pi/5) t4 */ const ATOMIC t11_real = sinb * t3_real - sina * t4_real; const ATOMIC t11_imag = sinb * t3_imag - sina * t4_imag; /* x0 = z0 + t5 */ const ATOMIC x0_real = z0_real + t5_real; const ATOMIC x0_imag = z0_imag + t5_imag; /* x1 = t8 + i t10 */ const ATOMIC x1_real = t8_real - t10_imag; const ATOMIC x1_imag = t8_imag + t10_real; /* x2 = t9 + i t11 */ const ATOMIC x2_real = t9_real - t11_imag; const ATOMIC x2_imag = t9_imag + t11_real; /* x3 = t9 - i t11 */ const ATOMIC x3_real = t9_real + t11_imag; const ATOMIC x3_imag = t9_imag - t11_real; /* x4 = t8 - i t10 */ const ATOMIC x4_real = t8_real + t10_imag; const ATOMIC x4_imag = t8_imag - t10_real; const size_t to0 = k1 * q + 2 * k - 1; const size_t to1 = to0 + m; const size_t to2 = to1 + m; const size_t to3 = to2 + m; const size_t to4 = to3 + m; /* apply twiddle factors */ /* to0 = 1 * x0 */ VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to0 + 1) = x0_imag; /* to1 = w1 * x1 */ VECTOR(out,ostride,to1) = w1_real * x1_real - w1_imag * x1_imag; VECTOR(out,ostride,to1 + 1) = w1_real * x1_imag + w1_imag * x1_real; /* to2 = w2 * x2 */ VECTOR(out,ostride,to2) = w2_real * x2_real - w2_imag * x2_imag; VECTOR(out,ostride,to2 + 1) = w2_real * x2_imag + w2_imag * x2_real; /* to3 = w3 * x3 */ VECTOR(out,ostride,to3) = w3_real * x3_real - w3_imag * x3_imag; VECTOR(out,ostride,to3 + 1) = w3_real * x3_imag + w3_imag * x3_real; /* to4 = w4 * x4 */ VECTOR(out,ostride,to4) = w4_real * x4_real - w4_imag * x4_imag; VECTOR(out,ostride,to4 + 1) = w4_real * x4_imag + w4_imag * x4_real; } } if (q % 2 == 1) return; for (k1 = 0; k1 < product_1; k1++) { const size_t from0 = 5 * k1 * q + q - 1; const size_t from1 = from0 + 2 * q; const size_t from2 = from1 + 2 * q; const ATOMIC z0_real = 2 * VECTOR(in,istride,from0); const ATOMIC z0_imag = 2 * VECTOR(in,istride,from0 + 1); const ATOMIC z1_real = 2 * VECTOR(in,istride,from1); const ATOMIC z1_imag = 2 * VECTOR(in,istride,from1 + 1); const ATOMIC z2_real = VECTOR(in,istride,from2); const ATOMIC t1_real = z0_real + z1_real; const ATOMIC t2_real = (t1_real / 4.0) - z2_real; const ATOMIC t3_real = (sqrt (5.0) / 4.0) * (z0_real - z1_real); const ATOMIC t4_real = sinb * z0_imag + sina * z1_imag; const ATOMIC t5_real = sina * z0_imag - sinb * z1_imag; const ATOMIC t6_real = t3_real + t2_real; const ATOMIC t7_real = t3_real - t2_real; const ATOMIC x0_real = t1_real + z2_real; const ATOMIC x1_real = t6_real - t4_real; const ATOMIC x2_real = t7_real - t5_real; const ATOMIC x3_real = -t7_real - t5_real; const ATOMIC x4_real = -t6_real - t4_real; const size_t to0 = k1 * q + q - 1; const size_t to1 = to0 + m; const size_t to2 = to1 + m; const size_t to3 = to2 + m; const size_t to4 = to3 + m; VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to1) = x1_real; VECTOR(out,ostride,to2) = x2_real; VECTOR(out,ostride,to3) = x3_real; VECTOR(out,ostride,to4) = x4_real; } return; } gsl/fft/hc_radix2.c0000644000175000017500000001133513536674414012523 0ustar eddedd/* fft/hc_radix2.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION(gsl_fft_halfcomplex,radix2_backward) (BASE data[], const size_t stride, const size_t n) { int status = FUNCTION(gsl_fft_halfcomplex,radix2_transform) (data, stride, n) ; return status ; } int FUNCTION(gsl_fft_halfcomplex,radix2_inverse) (BASE data[], const size_t stride, const size_t n) { int status = FUNCTION(gsl_fft_halfcomplex,radix2_transform) (data, stride, n); if (status) { return status; } /* normalize inverse fft with 1/n */ { const ATOMIC norm = 1.0 / n; size_t i; for (i = 0; i < n; i++) { data[stride*i] *= norm; } } return status; } int FUNCTION(gsl_fft_halfcomplex,radix2_transform) (BASE data[], const size_t stride, const size_t n) { int result ; size_t p, p_1, q; size_t i; size_t logn = 0; int status; if (n == 1) /* identity operation */ { return 0 ; } /* make sure that n is a power of 2 */ result = fft_binary_logn(n) ; if (result == -1) { GSL_ERROR ("n is not a power of 2", GSL_EINVAL); } else { logn = result ; } /* apply fft recursion */ p = n; q = 1 ; p_1 = n/2 ; for (i = 1; i <= logn; i++) { size_t a, b; /* a = 0 */ for (b = 0; b < q; b++) { const ATOMIC z0 = VECTOR(data,stride,b*p); const ATOMIC z1 = VECTOR(data,stride,b*p + p_1); const ATOMIC t0_real = z0 + z1 ; const ATOMIC t1_real = z0 - z1 ; VECTOR(data,stride,b*p) = t0_real; VECTOR(data,stride,b*p + p_1) = t1_real ; } /* a = 1 ... p_{i-1}/2 - 1 */ { ATOMIC w_real = 1.0; ATOMIC w_imag = 0.0; const ATOMIC theta = 2.0 * M_PI / p; const ATOMIC s = sin (theta); const ATOMIC t = sin (theta / 2.0); const ATOMIC s2 = 2.0 * t * t; for (a = 1; a < (p_1)/2; a++) { /* trignometric recurrence for w-> exp(i theta) w */ { const ATOMIC tmp_real = w_real - s * w_imag - s2 * w_real; const ATOMIC tmp_imag = w_imag + s * w_real - s2 * w_imag; w_real = tmp_real; w_imag = tmp_imag; } for (b = 0; b < q; b++) { ATOMIC z0_real = VECTOR(data,stride,b*p + a) ; ATOMIC z0_imag = VECTOR(data,stride,b*p + p - a) ; ATOMIC z1_real = VECTOR(data,stride,b*p + p_1 - a) ; ATOMIC z1_imag = -VECTOR(data,stride,b*p + p_1 + a) ; /* t0 = z0 + z1 */ ATOMIC t0_real = z0_real + z1_real; ATOMIC t0_imag = z0_imag + z1_imag; /* t1 = (z0 - z1) */ ATOMIC t1_real = z0_real - z1_real; ATOMIC t1_imag = z0_imag - z1_imag; VECTOR(data,stride,b*p + a) = t0_real ; VECTOR(data,stride,b*p + p_1 - a) = t0_imag ; VECTOR(data,stride,b*p + p_1 + a) = (w_real * t1_real - w_imag * t1_imag) ; VECTOR(data,stride,b*p + p - a) = (w_real * t1_imag + w_imag * t1_real) ; } } } if (p_1 > 1) { for (b = 0; b < q; b++) { VECTOR(data,stride,b*p + p_1/2) *= 2 ; VECTOR(data,stride,b*p + p_1 + p_1/2) *= -2 ; } } p_1 = p_1 / 2 ; p = p / 2 ; q = q * 2 ; } /* bit reverse the ordering of output data for decimation in frequency algorithm */ status = FUNCTION(fft_real,bitreverse_order)(data, stride, n, logn) ; return 0; } gsl/fft/dft_source.c0000644000175000017500000000616413536674414013021 0ustar eddedd/* fft/dft_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION(gsl_dft_complex,forward) (const BASE data[], const size_t stride, const size_t n, BASE result[]) { gsl_fft_direction sign = gsl_fft_forward; int status = FUNCTION(gsl_dft_complex,transform) (data, stride, n, result, sign); return status; } int FUNCTION(gsl_dft_complex,backward) (const BASE data[], const size_t stride, const size_t n, BASE result[]) { gsl_fft_direction sign = gsl_fft_backward; int status = FUNCTION(gsl_dft_complex,transform) (data, stride, n, result, sign); return status; } int FUNCTION(gsl_dft_complex,inverse) (const BASE data[], const size_t stride, const size_t n, BASE result[]) { gsl_fft_direction sign = gsl_fft_backward; int status = FUNCTION(gsl_dft_complex,transform) (data, stride, n, result, sign); /* normalize inverse fft with 1/n */ { const ATOMIC norm = ONE / (ATOMIC)n; size_t i; for (i = 0; i < n; i++) { REAL(result,stride,i) *= norm; IMAG(result,stride,i) *= norm; } } return status; } int FUNCTION(gsl_dft_complex,transform) (const BASE data[], const size_t stride, const size_t n, BASE result[], const gsl_fft_direction sign) { size_t i, j, exponent; const double d_theta = 2.0 * ((int) sign) * M_PI / (double) n; /* FIXME: check that input length == output length and give error */ for (i = 0; i < n; i++) { ATOMIC sum_real = 0; ATOMIC sum_imag = 0; exponent = 0; for (j = 0; j < n; j++) { double theta = d_theta * (double) exponent; /* sum = exp(i theta) * data[j] */ ATOMIC w_real = (ATOMIC) cos (theta); ATOMIC w_imag = (ATOMIC) sin (theta); ATOMIC data_real = REAL(data,stride,j); ATOMIC data_imag = IMAG(data,stride,j); sum_real += w_real * data_real - w_imag * data_imag; sum_imag += w_real * data_imag + w_imag * data_real; exponent = (exponent + i) % n; } REAL(result,stride,i) = sum_real; IMAG(result,stride,i) = sum_imag; } return 0; } gsl/fft/c_pass_6.c0000644000175000017500000002023113536674414012350 0ustar eddedd/* fft/c_pass_6.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static int FUNCTION(fft_complex,pass_6) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const gsl_fft_direction sign, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[], const TYPE(gsl_complex) twiddle4[], const TYPE(gsl_complex) twiddle5[]) { size_t i = 0, j = 0; size_t k, k1; const size_t factor = 6; const size_t m = n / factor; const size_t q = n / product; const size_t p_1 = product / factor; const size_t jump = (factor - 1) * p_1; const ATOMIC tau = sqrt (3.0) / 2.0; for (k = 0; k < q; k++) { ATOMIC w1_real, w1_imag, w2_real, w2_imag, w3_real, w3_imag, w4_real, w4_imag, w5_real, w5_imag; if (k == 0) { w1_real = 1.0; w1_imag = 0.0; w2_real = 1.0; w2_imag = 0.0; w3_real = 1.0; w3_imag = 0.0; w4_real = 1.0; w4_imag = 0.0; w5_real = 1.0; w5_imag = 0.0; } else { if (sign == gsl_fft_forward) { /* forward tranform */ w1_real = GSL_REAL(twiddle1[k - 1]); w1_imag = GSL_IMAG(twiddle1[k - 1]); w2_real = GSL_REAL(twiddle2[k - 1]); w2_imag = GSL_IMAG(twiddle2[k - 1]); w3_real = GSL_REAL(twiddle3[k - 1]); w3_imag = GSL_IMAG(twiddle3[k - 1]); w4_real = GSL_REAL(twiddle4[k - 1]); w4_imag = GSL_IMAG(twiddle4[k - 1]); w5_real = GSL_REAL(twiddle5[k - 1]); w5_imag = GSL_IMAG(twiddle5[k - 1]); } else { /* backward tranform: w -> conjugate(w) */ w1_real = GSL_REAL(twiddle1[k - 1]); w1_imag = -GSL_IMAG(twiddle1[k - 1]); w2_real = GSL_REAL(twiddle2[k - 1]); w2_imag = -GSL_IMAG(twiddle2[k - 1]); w3_real = GSL_REAL(twiddle3[k - 1]); w3_imag = -GSL_IMAG(twiddle3[k - 1]); w4_real = GSL_REAL(twiddle4[k - 1]); w4_imag = -GSL_IMAG(twiddle4[k - 1]); w5_real = GSL_REAL(twiddle5[k - 1]); w5_imag = -GSL_IMAG(twiddle5[k - 1]); } } for (k1 = 0; k1 < p_1; k1++) { const ATOMIC z0_real = REAL(in,istride,i); const ATOMIC z0_imag = IMAG(in,istride,i); const ATOMIC z1_real = REAL(in,istride,i+m); const ATOMIC z1_imag = IMAG(in,istride,i+m); const ATOMIC z2_real = REAL(in,istride,i+2*m); const ATOMIC z2_imag = IMAG(in,istride,i+2*m); const ATOMIC z3_real = REAL(in,istride,i+3*m); const ATOMIC z3_imag = IMAG(in,istride,i+3*m); const ATOMIC z4_real = REAL(in,istride,i+4*m); const ATOMIC z4_imag = IMAG(in,istride,i+4*m); const ATOMIC z5_real = REAL(in,istride,i+5*m); const ATOMIC z5_imag = IMAG(in,istride,i+5*m); /* compute x = W(6) z */ /* W(6) is a combination of sums and differences of W(3) acting on the even and odd elements of z */ /* ta1 = z2 + z4 */ const ATOMIC ta1_real = z2_real + z4_real; const ATOMIC ta1_imag = z2_imag + z4_imag; /* ta2 = z0 - ta1/2 */ const ATOMIC ta2_real = z0_real - ta1_real / 2; const ATOMIC ta2_imag = z0_imag - ta1_imag / 2; /* ta3 = (+/-) sin(pi/3)*(z2 - z4) */ const ATOMIC ta3_real = ((int) sign) * tau * (z2_real - z4_real); const ATOMIC ta3_imag = ((int) sign) * tau * (z2_imag - z4_imag); /* a0 = z0 + ta1 */ const ATOMIC a0_real = z0_real + ta1_real; const ATOMIC a0_imag = z0_imag + ta1_imag; /* a1 = ta2 + i ta3 */ const ATOMIC a1_real = ta2_real - ta3_imag; const ATOMIC a1_imag = ta2_imag + ta3_real; /* a2 = ta2 - i ta3 */ const ATOMIC a2_real = ta2_real + ta3_imag; const ATOMIC a2_imag = ta2_imag - ta3_real; /* tb1 = z5 + z1 */ const ATOMIC tb1_real = z5_real + z1_real; const ATOMIC tb1_imag = z5_imag + z1_imag; /* tb2 = z3 - tb1/2 */ const ATOMIC tb2_real = z3_real - tb1_real / 2; const ATOMIC tb2_imag = z3_imag - tb1_imag / 2; /* tb3 = (+/-) sin(pi/3)*(z5 - z1) */ const ATOMIC tb3_real = ((int) sign) * tau * (z5_real - z1_real); const ATOMIC tb3_imag = ((int) sign) * tau * (z5_imag - z1_imag); /* b0 = z3 + tb1 */ const ATOMIC b0_real = z3_real + tb1_real; const ATOMIC b0_imag = z3_imag + tb1_imag; /* b1 = tb2 + i tb3 */ const ATOMIC b1_real = tb2_real - tb3_imag; const ATOMIC b1_imag = tb2_imag + tb3_real; /* b2 = tb2 - i tb3 */ const ATOMIC b2_real = tb2_real + tb3_imag; const ATOMIC b2_imag = tb2_imag - tb3_real; /* x0 = a0 + b0 */ const ATOMIC x0_real = a0_real + b0_real; const ATOMIC x0_imag = a0_imag + b0_imag; /* x4 = a1 + b1 */ const ATOMIC x4_real = a1_real + b1_real; const ATOMIC x4_imag = a1_imag + b1_imag; /* x2 = a2 + b2 */ const ATOMIC x2_real = a2_real + b2_real; const ATOMIC x2_imag = a2_imag + b2_imag; /* x3 = a0 - b0 */ const ATOMIC x3_real = a0_real - b0_real; const ATOMIC x3_imag = a0_imag - b0_imag; /* x1 = a1 - b1 */ const ATOMIC x1_real = a1_real - b1_real; const ATOMIC x1_imag = a1_imag - b1_imag; /* x5 = a2 - b2 */ const ATOMIC x5_real = a2_real - b2_real; const ATOMIC x5_imag = a2_imag - b2_imag; /* apply twiddle factors */ /* to0 = 1 * x0 */ REAL(out,ostride,j) = x0_real; IMAG(out,ostride,j) = x0_imag; /* to1 = w1 * x1 */ REAL(out,ostride,j+p_1) = w1_real * x1_real - w1_imag * x1_imag; IMAG(out,ostride,j+p_1) = w1_real * x1_imag + w1_imag * x1_real; /* to2 = w2 * x2 */ REAL(out,ostride,j+2*p_1) = w2_real * x2_real - w2_imag * x2_imag; IMAG(out,ostride,j+2*p_1) = w2_real * x2_imag + w2_imag * x2_real; /* to3 = w3 * x3 */ REAL(out,ostride,j+3*p_1) = w3_real * x3_real - w3_imag * x3_imag; IMAG(out,ostride,j+3*p_1) = w3_real * x3_imag + w3_imag * x3_real; /* to4 = w4 * x4 */ REAL(out,ostride,j+4*p_1) = w4_real * x4_real - w4_imag * x4_imag; IMAG(out,ostride,j+4*p_1) = w4_real * x4_imag + w4_imag * x4_real; /* to5 = w5 * x5 */ REAL(out,ostride,j+5*p_1) = w5_real * x5_real - w5_imag * x5_imag; IMAG(out,ostride,j+5*p_1) = w5_real * x5_imag + w5_imag * x5_real; i++; j++; } j += jump; } return 0; } gsl/fft/gsl_dft_complex_float.h0000644000175000017500000000347613536674414015232 0ustar eddedd/* fft/gsl_dft_complex_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_DFT_COMPLEX_FLOAT_H__ #define __GSL_DFT_COMPLEX_FLOAT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_dft_complex_float_forward (const float data[], const size_t stride, const size_t n, float result[]); int gsl_dft_complex_float_backward (const float data[], const size_t stride, const size_t n, float result[]); int gsl_dft_complex_float_inverse (const float data[], const size_t stride, const size_t n, float result[]); int gsl_dft_complex_float_transform (const float data[], const size_t stride, const size_t n, float result[], const gsl_fft_direction sign); __END_DECLS #endif /* __GSL_DFT_COMPLEX_FLOAT_H__ */ gsl/fft/real_pass.h0000644000175000017500000000655313536674414012644 0ustar eddedd/* fft/real_pass.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void FUNCTION(fft_real,pass_2) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle[]); static void FUNCTION(fft_real,pass_3) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[]); static void FUNCTION(fft_real,pass_4) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[]); static void FUNCTION(fft_real,pass_5) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[], const TYPE(gsl_complex) twiddle4[]); static void FUNCTION(fft_real,pass_n) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t factor, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle[]); gsl/fft/c_pass_7.c0000644000175000017500000003075313536674414012363 0ustar eddedd/* fft/c_pass_7.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static int FUNCTION(fft_complex,pass_7) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const gsl_fft_direction sign, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[], const TYPE(gsl_complex) twiddle4[], const TYPE(gsl_complex) twiddle5[], const TYPE(gsl_complex) twiddle6[]) { size_t i = 0, j = 0; size_t k, k1; const size_t factor = 7; const size_t m = n / factor; const size_t q = n / product; const size_t p_1 = product / factor; const size_t jump = (factor - 1) * p_1; const ATOMIC c1 = cos(1.0 * 2.0 * M_PI / 7.0) ; const ATOMIC c2 = cos(2.0 * 2.0 * M_PI / 7.0) ; const ATOMIC c3 = cos(3.0 * 2.0 * M_PI / 7.0) ; const ATOMIC s1 = sin(1.0 * 2.0 * M_PI / 7.0) ; const ATOMIC s2 = sin(2.0 * 2.0 * M_PI / 7.0) ; const ATOMIC s3 = sin(3.0 * 2.0 * M_PI / 7.0) ; for (k = 0; k < q; k++) { ATOMIC w1_real, w1_imag, w2_real, w2_imag, w3_real, w3_imag, w4_real, w4_imag, w5_real, w5_imag, w6_real, w6_imag; if (k == 0) { w1_real = 1.0; w1_imag = 0.0; w2_real = 1.0; w2_imag = 0.0; w3_real = 1.0; w3_imag = 0.0; w4_real = 1.0; w4_imag = 0.0; w5_real = 1.0; w5_imag = 0.0; w6_real = 1.0; w6_imag = 0.0; } else { if (sign == gsl_fft_forward) { /* forward tranform */ w1_real = GSL_REAL(twiddle1[k - 1]); w1_imag = GSL_IMAG(twiddle1[k - 1]); w2_real = GSL_REAL(twiddle2[k - 1]); w2_imag = GSL_IMAG(twiddle2[k - 1]); w3_real = GSL_REAL(twiddle3[k - 1]); w3_imag = GSL_IMAG(twiddle3[k - 1]); w4_real = GSL_REAL(twiddle4[k - 1]); w4_imag = GSL_IMAG(twiddle4[k - 1]); w5_real = GSL_REAL(twiddle5[k - 1]); w5_imag = GSL_IMAG(twiddle5[k - 1]); w6_real = GSL_REAL(twiddle6[k - 1]); w6_imag = GSL_IMAG(twiddle6[k - 1]); } else { /* backward tranform: w -> conjugate(w) */ w1_real = GSL_REAL(twiddle1[k - 1]); w1_imag = -GSL_IMAG(twiddle1[k - 1]); w2_real = GSL_REAL(twiddle2[k - 1]); w2_imag = -GSL_IMAG(twiddle2[k - 1]); w3_real = GSL_REAL(twiddle3[k - 1]); w3_imag = -GSL_IMAG(twiddle3[k - 1]); w4_real = GSL_REAL(twiddle4[k - 1]); w4_imag = -GSL_IMAG(twiddle4[k - 1]); w5_real = GSL_REAL(twiddle5[k - 1]); w5_imag = -GSL_IMAG(twiddle5[k - 1]); w6_real = GSL_REAL(twiddle6[k - 1]); w6_imag = -GSL_IMAG(twiddle6[k - 1]); } } for (k1 = 0; k1 < p_1; k1++) { const ATOMIC z0_real = REAL(in,istride,i); const ATOMIC z0_imag = IMAG(in,istride,i); const ATOMIC z1_real = REAL(in,istride,i+m); const ATOMIC z1_imag = IMAG(in,istride,i+m); const ATOMIC z2_real = REAL(in,istride,i+2*m); const ATOMIC z2_imag = IMAG(in,istride,i+2*m); const ATOMIC z3_real = REAL(in,istride,i+3*m); const ATOMIC z3_imag = IMAG(in,istride,i+3*m); const ATOMIC z4_real = REAL(in,istride,i+4*m); const ATOMIC z4_imag = IMAG(in,istride,i+4*m); const ATOMIC z5_real = REAL(in,istride,i+5*m); const ATOMIC z5_imag = IMAG(in,istride,i+5*m); const ATOMIC z6_real = REAL(in,istride,i+6*m); const ATOMIC z6_imag = IMAG(in,istride,i+6*m); /* compute x = W(7) z */ /* t0 = z1 + z6 */ const ATOMIC t0_real = z1_real + z6_real ; const ATOMIC t0_imag = z1_imag + z6_imag ; /* t1 = z1 - z6 */ const ATOMIC t1_real = z1_real - z6_real ; const ATOMIC t1_imag = z1_imag - z6_imag ; /* t2 = z2 + z5 */ const ATOMIC t2_real = z2_real + z5_real ; const ATOMIC t2_imag = z2_imag + z5_imag ; /* t3 = z2 - z5 */ const ATOMIC t3_real = z2_real - z5_real ; const ATOMIC t3_imag = z2_imag - z5_imag ; /* t4 = z4 + z3 */ const ATOMIC t4_real = z4_real + z3_real ; const ATOMIC t4_imag = z4_imag + z3_imag ; /* t5 = z4 - z3 */ const ATOMIC t5_real = z4_real - z3_real ; const ATOMIC t5_imag = z4_imag - z3_imag ; /* t6 = t2 + t0 */ const ATOMIC t6_real = t2_real + t0_real ; const ATOMIC t6_imag = t2_imag + t0_imag ; /* t7 = t5 + t3 */ const ATOMIC t7_real = t5_real + t3_real ; const ATOMIC t7_imag = t5_imag + t3_imag ; /* b0 = z0 + t6 + t4 */ const ATOMIC b0_real = z0_real + t6_real + t4_real ; const ATOMIC b0_imag = z0_imag + t6_imag + t4_imag ; /* b1 = ((cos(2pi/7) + cos(4pi/7) + cos(6pi/7))/3-1) (t6 + t4) */ const ATOMIC b1_real = (((c1 + c2 + c3)/3.0 - 1.0) * (t6_real + t4_real)); const ATOMIC b1_imag = (((c1 + c2 + c3)/3.0 - 1.0) * (t6_imag + t4_imag)); /* b2 = ((2*cos(2pi/7) - cos(4pi/7) - cos(6pi/7))/3) (t0 - t4) */ const ATOMIC b2_real = (((2.0 * c1 - c2 - c3)/3.0) * (t0_real - t4_real)); const ATOMIC b2_imag = (((2.0 * c1 - c2 - c3)/3.0) * (t0_imag - t4_imag)); /* b3 = ((cos(2pi/7) - 2*cos(4pi/7) + cos(6pi/7))/3) (t4 - t2) */ const ATOMIC b3_real = (((c1 - 2.0*c2 + c3)/3.0) * (t4_real - t2_real)); const ATOMIC b3_imag = (((c1 - 2.0*c2 + c3)/3.0) * (t4_imag - t2_imag)); /* b4 = ((cos(2pi/7) + cos(4pi/7) - 2*cos(6pi/7))/3) (t2 - t0) */ const ATOMIC b4_real = (((c1 + c2 - 2.0 * c3)/3.0) * (t2_real - t0_real)); const ATOMIC b4_imag = (((c1 + c2 - 2.0 * c3)/3.0) * (t2_imag - t0_imag)); /* b5 = sign * ((sin(2pi/7) + sin(4pi/7) - sin(6pi/7))/3) (t7 + t1) */ const ATOMIC b5_real = (-(int)sign) * ((s1 + s2 - s3)/3.0) * (t7_real + t1_real) ; const ATOMIC b5_imag = (-(int)sign) * ((s1 + s2 - s3)/3.0) * (t7_imag + t1_imag) ; /* b6 = sign * ((2sin(2pi/7) - sin(4pi/7) + sin(6pi/7))/3) (t1 - t5) */ const ATOMIC b6_real = (-(int)sign) * ((2.0 * s1 - s2 + s3)/3.0) * (t1_real - t5_real) ; const ATOMIC b6_imag = (-(int)sign) * ((2.0 * s1 - s2 + s3)/3.0) * (t1_imag - t5_imag) ; /* b7 = sign * ((sin(2pi/7) - 2sin(4pi/7) - sin(6pi/7))/3) (t5 - t3) */ const ATOMIC b7_real = (-(int)sign) * ((s1 - 2.0 * s2 - s3)/3.0) * (t5_real - t3_real) ; const ATOMIC b7_imag = (-(int)sign) * ((s1 - 2.0 * s2 - s3)/3.0) * (t5_imag - t3_imag) ; /* b8 = sign * ((sin(2pi/7) + sin(4pi/7) + 2sin(6pi/7))/3) (t3 - t1) */ const ATOMIC b8_real = (-(int)sign) * ((s1 + s2 + 2.0 * s3)/3.0) * (t3_real - t1_real) ; const ATOMIC b8_imag = (-(int)sign) * ((s1 + s2 + 2.0 * s3)/3.0) * (t3_imag - t1_imag) ; /* T0 = b0 + b1 */ const ATOMIC T0_real = b0_real + b1_real ; const ATOMIC T0_imag = b0_imag + b1_imag ; /* T1 = b2 + b3 */ const ATOMIC T1_real = b2_real + b3_real ; const ATOMIC T1_imag = b2_imag + b3_imag ; /* T2 = b4 - b3 */ const ATOMIC T2_real = b4_real - b3_real ; const ATOMIC T2_imag = b4_imag - b3_imag ; /* T3 = -b2 - b4 */ const ATOMIC T3_real = -b2_real - b4_real ; const ATOMIC T3_imag = -b2_imag - b4_imag ; /* T4 = b6 + b7 */ const ATOMIC T4_real = b6_real + b7_real ; const ATOMIC T4_imag = b6_imag + b7_imag ; /* T5 = b8 - b7 */ const ATOMIC T5_real = b8_real - b7_real ; const ATOMIC T5_imag = b8_imag - b7_imag ; /* T6 = -b8 - b6 */ const ATOMIC T6_real = -b8_real - b6_real ; const ATOMIC T6_imag = -b8_imag - b6_imag ; /* T7 = T0 + T1 */ const ATOMIC T7_real = T0_real + T1_real ; const ATOMIC T7_imag = T0_imag + T1_imag ; /* T8 = T0 + T2 */ const ATOMIC T8_real = T0_real + T2_real ; const ATOMIC T8_imag = T0_imag + T2_imag ; /* T9 = T0 + T3 */ const ATOMIC T9_real = T0_real + T3_real ; const ATOMIC T9_imag = T0_imag + T3_imag ; /* T10 = T4 + b5 */ const ATOMIC T10_real = T4_real + b5_real ; const ATOMIC T10_imag = T4_imag + b5_imag ; /* T11 = T5 + b5 */ const ATOMIC T11_real = T5_real + b5_real ; const ATOMIC T11_imag = T5_imag + b5_imag ; /* T12 = T6 + b5 */ const ATOMIC T12_real = T6_real + b5_real ; const ATOMIC T12_imag = T6_imag + b5_imag ; /* x0 = b0 */ const ATOMIC x0_real = b0_real ; const ATOMIC x0_imag = b0_imag ; /* x1 = T7 - i T10 */ const ATOMIC x1_real = T7_real + T10_imag ; const ATOMIC x1_imag = T7_imag - T10_real ; /* x2 = T9 - i T12 */ const ATOMIC x2_real = T9_real + T12_imag ; const ATOMIC x2_imag = T9_imag - T12_real ; /* x3 = T8 + i T11 */ const ATOMIC x3_real = T8_real - T11_imag ; const ATOMIC x3_imag = T8_imag + T11_real ; /* x4 = T8 - i T11 */ const ATOMIC x4_real = T8_real + T11_imag ; const ATOMIC x4_imag = T8_imag - T11_real ; /* x5 = T9 + i T12 */ const ATOMIC x5_real = T9_real - T12_imag ; const ATOMIC x5_imag = T9_imag + T12_real ; /* x6 = T7 + i T10 */ const ATOMIC x6_real = T7_real - T10_imag ; const ATOMIC x6_imag = T7_imag + T10_real ; /* apply twiddle factors */ /* to0 = 1 * x0 */ REAL(out,ostride,j) = x0_real; IMAG(out,ostride,j) = x0_imag; /* to1 = w1 * x1 */ REAL(out,ostride,j+p_1) = w1_real * x1_real - w1_imag * x1_imag; IMAG(out,ostride,j+p_1) = w1_real * x1_imag + w1_imag * x1_real; /* to2 = w2 * x2 */ REAL(out,ostride,j+2*p_1) = w2_real * x2_real - w2_imag * x2_imag; IMAG(out,ostride,j+2*p_1) = w2_real * x2_imag + w2_imag * x2_real; /* to3 = w3 * x3 */ REAL(out,ostride,j+3*p_1) = w3_real * x3_real - w3_imag * x3_imag; IMAG(out,ostride,j+3*p_1) = w3_real * x3_imag + w3_imag * x3_real; /* to4 = w4 * x4 */ REAL(out,ostride,j+4*p_1) = w4_real * x4_real - w4_imag * x4_imag; IMAG(out,ostride,j+4*p_1) = w4_real * x4_imag + w4_imag * x4_real; /* to5 = w5 * x5 */ REAL(out,ostride,j+5*p_1) = w5_real * x5_real - w5_imag * x5_imag; IMAG(out,ostride,j+5*p_1) = w5_real * x5_imag + w5_imag * x5_real; /* to6 = w6 * x6 */ REAL(out,ostride,j+6*p_1) = w6_real * x6_real - w6_imag * x6_imag; IMAG(out,ostride,j+6*p_1) = w6_real * x6_imag + w6_imag * x6_real; i++; j++; } j += jump; } return 0; } gsl/fft/complex_internal.h0000644000175000017500000000055613536674414014233 0ustar eddedd/* Handling of packed complex types... not meant for client consumption. */ #ifndef COMPLEX_INTERNAL_H_ #define COMPLEX_INTERNAL_H_ #define VECTOR(a,stride,i) ((a)[(stride)*(i)]) #define REAL(a,stride,i) ((a)[2*(stride)*(i)]) #define IMAG(a,stride,i) ((a)[2*(stride)*(i)+1]) #define REAL0(a) ((a)[0]) #define IMAG0(a) ((a)[1]) #endif /* !COMPLEX_INTERNAL_H_ */ gsl/fft/real_pass_2.c0000644000175000017500000000720613536674414013054 0ustar eddedd/* fft/real_pass_2.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void FUNCTION(fft_real,pass_2) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle[]) { size_t k, k1; const size_t factor = 2; const size_t m = n / factor; const size_t q = n / product; const size_t product_1 = product / factor; for (k1 = 0; k1 < q; k1++) { const size_t from0 = k1 * product_1; const size_t from1 = from0 + m; const ATOMIC r0 = VECTOR(in,istride,from0); const ATOMIC r1 = VECTOR(in,istride,from1); const ATOMIC s0 = r0 + r1; const ATOMIC s1 = r0 - r1; const size_t to0 = product * k1; const size_t to1 = to0 + product - 1; VECTOR(out,ostride,to0) = s0; VECTOR(out,ostride,to1) = s1; } if (product_1 == 1) return; for (k = 1; k < (product_1 + 1) / 2; k++) { /* forward real transform: w -> conjugate(w) */ const ATOMIC w_real = GSL_REAL(twiddle[k - 1]); const ATOMIC w_imag = -GSL_IMAG(twiddle[k - 1]); for (k1 = 0; k1 < q; k1++) { const size_t from0 = k1 * product_1 + 2 * k - 1; const size_t from1 = from0 + m; const ATOMIC f0_real = VECTOR(in,istride,from0); const ATOMIC f0_imag = VECTOR(in,istride,from0 + 1); const ATOMIC f1_real = VECTOR(in,istride,from1); const ATOMIC f1_imag = VECTOR(in,istride,from1 + 1); const ATOMIC z0_real = f0_real; const ATOMIC z0_imag = f0_imag; const ATOMIC z1_real = w_real * f1_real - w_imag * f1_imag; const ATOMIC z1_imag = w_real * f1_imag + w_imag * f1_real; /* compute x = W(2) z */ /* x0 = z0 + z1 */ const ATOMIC x0_real = z0_real + z1_real; const ATOMIC x0_imag = z0_imag + z1_imag; /* x1 = z0 - z1 */ const ATOMIC x1_real = z0_real - z1_real; const ATOMIC x1_imag = z0_imag - z1_imag; const size_t to0 = k1 * product + 2 * k - 1; const size_t to1 = k1 * product + product - 2 * k - 1; VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to0 + 1) = x0_imag; /* stored in conjugate location */ VECTOR(out,ostride,to1) = x1_real; VECTOR(out,ostride,to1 + 1) = -x1_imag; } } if (product_1 % 2 == 1) return; for (k1 = 0; k1 < q; k1++) { const size_t from0 = k1 * product_1 + product_1 - 1; const size_t from1 = from0 + m; const size_t to0 = k1 * product + product_1 - 1; VECTOR(out,ostride,to0) = VECTOR(in,istride,from0); VECTOR(out,ostride,to0 + 1) = -VECTOR(in,istride,from1); } return; } gsl/fft/factorize.c0000644000175000017500000000721713536674414012652 0ustar eddedd/* fft/factorize.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include "factorize.h" static int fft_complex_factorize (const size_t n, size_t *nf, size_t factors[]) { const size_t complex_subtransforms[] = {7, 6, 5, 4, 3, 2, 0}; /* other factors can be added here if their transform modules are implemented. The end of the list is marked by 0. */ int status = fft_factorize (n, complex_subtransforms, nf, factors); return status; } static int fft_halfcomplex_factorize (const size_t n, size_t *nf, size_t factors[]) { const size_t halfcomplex_subtransforms[] = {5, 4, 3, 2, 0}; int status = fft_factorize (n, halfcomplex_subtransforms, nf, factors); return status; } static int fft_real_factorize (const size_t n, size_t *nf, size_t factors[]) { const size_t real_subtransforms[] = {5, 4, 3, 2, 0}; int status = fft_factorize (n, real_subtransforms, nf, factors); return status; } static int fft_factorize (const size_t n, const size_t implemented_subtransforms[], size_t *n_factors, size_t factors[]) { size_t nf = 0; size_t ntest = n; size_t factor; size_t i = 0; if (n == 0) { GSL_ERROR ("length n must be positive integer", GSL_EDOM); } if (n == 1) { factors[0] = 1; *n_factors = 1; return 0; } /* deal with the implemented factors first */ while (implemented_subtransforms[i] && ntest != 1) { factor = implemented_subtransforms[i]; while ((ntest % factor) == 0) { ntest = ntest / factor; factors[nf] = factor; nf++; } i++; } /* deal with any other even prime factors (there is only one) */ factor = 2; while ((ntest % factor) == 0 && (ntest != 1)) { ntest = ntest / factor; factors[nf] = factor; nf++; } /* deal with any other odd prime factors */ factor = 3; while (ntest != 1) { while ((ntest % factor) != 0) { factor += 2; } ntest = ntest / factor; factors[nf] = factor; nf++; } /* check that the factorization is correct */ { size_t product = 1; for (i = 0; i < nf; i++) { product *= factors[i]; } if (product != n) { GSL_ERROR ("factorization failed", GSL_ESANITY); } } *n_factors = nf; return 0; } static int fft_binary_logn (const size_t n) { size_t ntest ; size_t binary_logn = 0 ; size_t k = 1; while (k < n) { k *= 2; binary_logn++; } ntest = (1 << binary_logn) ; if (n != ntest ) { return -1 ; /* n is not a power of 2 */ } return binary_logn; } gsl/fft/TODO0000644000175000017500000000126313536674414011203 0ustar eddedd# -*- org -*- #+CATEGORY: fft * Sine and Cosine Transforms from FFTPACK. * A simple multidimensional fft. * Convolutions. This will need different interfaces corresponding to the type of underlying FFT (radix-2, mixed-radix, radix-2 real, mixed-radix real). The convolution function should be fft'ed before being passed, so that the function can be used in a loop. The main point of the function being to do the index manipulation for the multiplication F*G. Theoretically someone might want to convolve real and complex data together which could be done but would double the number of interfaces. It would be reasonable to restrict the convolutions to real-real and complex-complex. gsl/fft/fft.c0000644000175000017500000000465013536674414011441 0ustar eddedd#include #include #include #include #include #include #include #include #include #define BASE_DOUBLE #include "templates_on.h" #include "bitreverse.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "bitreverse.c" #include "templates_off.h" #undef BASE_FLOAT #include "factorize.c" #define BASE_DOUBLE #include "templates_on.h" #include "c_init.c" #include "c_main.c" #include "c_pass_2.c" #include "c_pass_3.c" #include "c_pass_4.c" #include "c_pass_5.c" #include "c_pass_6.c" #include "c_pass_7.c" #include "c_pass_n.c" #include "c_radix2.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "c_init.c" #include "c_main.c" #include "c_pass_2.c" #include "c_pass_3.c" #include "c_pass_4.c" #include "c_pass_5.c" #include "c_pass_6.c" #include "c_pass_7.c" #include "c_pass_n.c" #include "c_radix2.c" #include "templates_off.h" #undef BASE_FLOAT #include #include #define BASE_DOUBLE #include "templates_on.h" #include "hc_init.c" #include "hc_main.c" #include "hc_pass_2.c" #include "hc_pass_3.c" #include "hc_pass_4.c" #include "hc_pass_5.c" #include "hc_pass_n.c" #include "hc_radix2.c" #include "hc_unpack.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "hc_init.c" #include "hc_main.c" #include "hc_pass_2.c" #include "hc_pass_3.c" #include "hc_pass_4.c" #include "hc_pass_5.c" #include "hc_pass_n.c" #include "hc_radix2.c" #include "hc_unpack.c" #include "templates_off.h" #undef BASE_FLOAT #include #include #define BASE_DOUBLE #include "templates_on.h" #include "real_init.c" #include "real_main.c" #include "real_pass_2.c" #include "real_pass_3.c" #include "real_pass_4.c" #include "real_pass_5.c" #include "real_pass_n.c" #include "real_radix2.c" #include "real_unpack.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "real_init.c" #include "real_main.c" #include "real_pass_2.c" #include "real_pass_3.c" #include "real_pass_4.c" #include "real_pass_5.c" #include "real_pass_n.c" #include "real_radix2.c" #include "real_unpack.c" #include "templates_off.h" #undef BASE_FLOAT gsl/fft/real_main.c0000644000175000017500000000765213536674414012616 0ustar eddedd/* fft/real_main.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include "real_pass.h" int FUNCTION(gsl_fft_real,transform) (BASE data[], const size_t stride, const size_t n, const TYPE(gsl_fft_real_wavetable) * wavetable, TYPE(gsl_fft_real_workspace) * work) { const size_t nf = wavetable->nf; size_t i; size_t q, product = 1; size_t tskip; size_t product_1; BASE *const scratch = work->scratch; TYPE(gsl_complex) *twiddle1, *twiddle2, *twiddle3, *twiddle4; size_t state = 0; BASE *in = data; size_t istride = stride ; BASE *out = scratch; size_t ostride = 1 ; if (n == 0) { GSL_ERROR ("length n must be positive integer", GSL_EDOM); } if (n == 1) { /* FFT of one data point is the identity */ return 0; } if (n != wavetable->n) { GSL_ERROR ("wavetable does not match length of data", GSL_EINVAL); } if (n != work->n) { GSL_ERROR ("workspace does not match length of data", GSL_EINVAL); } for (i = 0; i < nf; i++) { const size_t factor = wavetable->factor[i]; product_1 = product; product *= factor; q = n / product; tskip = (product_1 + 1) / 2 - 1; if (state == 0) { in = data; istride = stride; out = scratch; ostride = 1; state = 1; } else { in = scratch; istride = 1; out = data; ostride = stride; state = 0; } if (factor == 2) { twiddle1 = wavetable->twiddle[i]; FUNCTION(fft_real,pass_2) (in, istride, out, ostride, product, n, twiddle1); } else if (factor == 3) { twiddle1 = wavetable->twiddle[i]; twiddle2 = twiddle1 + tskip; FUNCTION(fft_real,pass_3) (in, istride, out, ostride, product, n, twiddle1, twiddle2); } else if (factor == 4) { twiddle1 = wavetable->twiddle[i]; twiddle2 = twiddle1 + tskip; twiddle3 = twiddle2 + tskip; FUNCTION(fft_real,pass_4) (in, istride, out, ostride, product, n, twiddle1, twiddle2, twiddle3); } else if (factor == 5) { twiddle1 = wavetable->twiddle[i]; twiddle2 = twiddle1 + tskip; twiddle3 = twiddle2 + tskip; twiddle4 = twiddle3 + tskip; FUNCTION(fft_real,pass_5) (in, istride, out, ostride, product, n, twiddle1, twiddle2, twiddle3, twiddle4); } else { twiddle1 = wavetable->twiddle[i]; FUNCTION(fft_real,pass_n) (in, istride, out, ostride, factor, product, n, twiddle1); } } if (state == 1) /* copy results back from scratch to data */ { for (i = 0; i < n; i++) { data[stride*i] = scratch[i] ; } } return 0; } gsl/fft/compare_source.c0000644000175000017500000000626313536674414013672 0ustar eddedd/* fft/compare_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "compare.h" int FUNCTION(compare_complex,results) (const char *name_a, const BASE a[], const char *name_b, const BASE b[], size_t stride, size_t n, const double allowed_ticks) { size_t i; double ticks, max_ticks = 0; double dr, di; const char *flag; for (i = 0; i < n; i++) { dr = b[2*stride*i] - a[2*stride*i]; di = b[2*stride*i+1] - a[2*stride*i+1]; ticks = (fabs (dr) + fabs (di)) / BASE_EPSILON; if (ticks > max_ticks) { max_ticks = ticks; } } if (max_ticks < allowed_ticks) { return 0; } printf ("\n%s vs %s : max_ticks = %f\n", name_a, name_b, max_ticks); for (i = 0; i < n; i++) { dr = b[2*stride*i] - a[2*stride*i]; di = b[2*stride*i+1] - a[2*stride*i+1]; ticks = (fabs (dr) + fabs (di)) / BASE_EPSILON; if (ticks > 1000) { flag = "***"; } else { flag = ""; } printf ("%15s: %d %.16f %.16f %s\n", name_a, (int)i, a[2*stride*i], a[2*stride*i+1], flag); printf ("%15s: %d %.16f %.16f %e %s\n", name_b, (int)i, b[2*stride*i], b[2*stride*i+1], ticks, flag); } return -1; } int FUNCTION(compare_real,results) (const char *name_a, const BASE a[], const char *name_b, const BASE b[], size_t stride, size_t n, const double allowed_ticks) { size_t i; double ticks, max_ticks = 0; double dr; const char *flag; for (i = 0; i < n; i++) { dr = b[stride*i] - a[stride*i]; ticks = fabs (dr) / BASE_EPSILON; if (ticks > max_ticks) { max_ticks = ticks; } } if (max_ticks < allowed_ticks) { return 0; } printf ("\n%s vs %s : max_ticks = %f\n", name_a, name_b, max_ticks); for (i = 0; i < n; i++) { dr = b[stride*i] - a[stride*i]; ticks = fabs (dr) / BASE_EPSILON; if (ticks > 1000) { flag = "***"; } else { flag = ""; } printf ("%15s: %d %.16f %s\n", name_a, (int)i, a[stride*i], flag); printf ("%15s: %d %.16f %e %s\n", name_b, (int)i, b[stride*i], ticks, flag); } return -1; } gsl/fft/hc_pass_2.c0000644000175000017500000000637113536674414012525 0ustar eddedd/* fft/hc_pass_2.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void FUNCTION(fft_halfcomplex,pass_2) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle[]) { size_t i, j, k, k1, jump; size_t factor, q, m, product_1; i = 0; j = 0; factor = 2; m = n / factor; q = n / product; product_1 = product / factor; jump = (factor - 1) * q; for (k1 = 0; k1 < product_1; k1++) { const ATOMIC r0 = VECTOR(in,istride,2 * k1 * q); const ATOMIC r1 = VECTOR(in,istride,2 * k1 * q + 2 * q - 1); const ATOMIC s0 = r0 + r1; const ATOMIC s1 = r0 - r1; VECTOR(out,ostride,q * k1) = s0; VECTOR(out,ostride,q * k1 + m) = s1; } if (q == 1) return; for (k = 1; k < (q + 1) / 2; k++) { const ATOMIC w_real = GSL_REAL(twiddle[k - 1]); const ATOMIC w_imag = GSL_IMAG(twiddle[k - 1]); for (k1 = 0; k1 < product_1; k1++) { const size_t from0 = 2 * k1 * q + 2 * k - 1; const size_t from1 = 2 * k1 * q - 2 * k + 2 * q - 1; const ATOMIC z0_real = VECTOR(in,istride,from0); const ATOMIC z0_imag = VECTOR(in,istride,from0 + 1); const ATOMIC z1_real = VECTOR(in,istride,from1); const ATOMIC z1_imag = VECTOR(in,istride,from1 + 1); /* compute x = W(2) z */ /* x0 = z0 + z1 */ const ATOMIC x0_real = z0_real + z1_real; const ATOMIC x0_imag = z0_imag - z1_imag; /* x1 = z0 - z1 */ const ATOMIC x1_real = z0_real - z1_real; const ATOMIC x1_imag = z0_imag + z1_imag; const size_t to0 = k1 * q + 2 * k - 1; const size_t to1 = to0 + m; VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to0 + 1) = x0_imag; VECTOR(out,ostride,to1) = w_real * x1_real - w_imag * x1_imag; VECTOR(out,ostride,to1 + 1) = w_imag * x1_real + w_real * x1_imag; } } if (q % 2 == 1) return; for (k1 = 0; k1 < product_1; k1++) { const size_t from0 = 2 * k1 * q + q - 1; const size_t to0 = k1 * q + q - 1; const size_t to1 = to0 + m; VECTOR(out,ostride,to0) = 2 * VECTOR(in,istride,from0); VECTOR(out,ostride,to1) = -2 * VECTOR(in,istride,from0 + 1); } return; } gsl/fft/gsl_dft_complex.h0000644000175000017500000000342613536674414014040 0ustar eddedd/* fft/gsl_dft_complex.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_DFT_COMPLEX_H__ #define __GSL_DFT_COMPLEX_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_dft_complex_forward (const double data[], const size_t stride, const size_t n, double result[]); int gsl_dft_complex_backward (const double data[], const size_t stride, const size_t n, double result[]); int gsl_dft_complex_inverse (const double data[], const size_t stride, const size_t n, double result[]); int gsl_dft_complex_transform (const double data[], const size_t stride, const size_t n, double result[], const gsl_fft_direction sign); __END_DECLS #endif /* __GSL_DFT_COMPLEX_H__ */ gsl/fft/test.c0000644000175000017500000000630613536674414011641 0ustar eddedd/* fft/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void my_error_handler (const char *reason, const char *file, int line, int err); #include "complex_internal.h" /* Usage: test [n] Exercise the fft routines for length n. By default n runs from 1 to 100. The exit status indicates success or failure. */ #define BASE_DOUBLE #include "templates_on.h" #include "compare_source.c" #include "bitreverse.c" #include "test_complex_source.c" #include "test_real_source.c" #include "test_trap_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "compare_source.c" #include "bitreverse.c" #include "test_complex_source.c" #include "test_real_source.c" #include "test_trap_source.c" #include "templates_off.h" #undef BASE_FLOAT int main (int argc, char *argv[]) { size_t i; size_t start = 1, end = 99; size_t stride ; size_t n = 0; gsl_ieee_env_setup (); if (argc == 2) n = strtol (argv[1], NULL, 0); if (n) { start = n ; end = n ; } for (i = 1 ; i <= end ; i *= 2) { if (i >= start) { for (stride = 1 ; stride < 4 ; stride++) { test_complex_bitreverse_order (stride, i) ; test_complex_radix2 (stride, i) ; test_real_bitreverse_order (stride, i) ; test_real_radix2 (stride, i) ; } } } for (i = start ; i <= end ; i++) { for (stride = 1 ; stride < 4 ; stride++) { test_complex_func (stride, i) ; test_complex_float_func (stride, i) ; test_real_func (stride, i) ; test_real_float_func (stride, i) ; } } gsl_set_error_handler (&my_error_handler); test_trap () ; test_float_trap () ; exit (gsl_test_summary ()); } void my_error_handler (const char *reason, const char *file, int line, int err) { if (0) printf ("(caught [%s:%d: %s (%d)])\n", file, line, reason, err) ; } gsl/fft/gsl_fft_halfcomplex_float.h0000644000175000017500000000624213536674414016061 0ustar eddedd/* fft/gsl_fft_halfcomplex_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_FFT_HALFCOMPLEX_FLOAT_H__ #define __GSL_FFT_HALFCOMPLEX_FLOAT_H__ #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_fft_halfcomplex_float_radix2_backward (float data[], const size_t stride, const size_t n); int gsl_fft_halfcomplex_float_radix2_inverse (float data[], const size_t stride, const size_t n); int gsl_fft_halfcomplex_float_radix2_transform (float data[], const size_t stride, const size_t n); typedef struct { size_t n; size_t nf; size_t factor[64]; gsl_complex_float *twiddle[64]; gsl_complex_float *trig; } gsl_fft_halfcomplex_wavetable_float; gsl_fft_halfcomplex_wavetable_float * gsl_fft_halfcomplex_wavetable_float_alloc (size_t n); void gsl_fft_halfcomplex_wavetable_float_free (gsl_fft_halfcomplex_wavetable_float * wavetable); int gsl_fft_halfcomplex_float_backward (float data[], const size_t stride, const size_t n, const gsl_fft_halfcomplex_wavetable_float * wavetable, gsl_fft_real_workspace_float * work); int gsl_fft_halfcomplex_float_inverse (float data[], const size_t stride, const size_t n, const gsl_fft_halfcomplex_wavetable_float * wavetable, gsl_fft_real_workspace_float * work); int gsl_fft_halfcomplex_float_transform (float data[], const size_t stride, const size_t n, const gsl_fft_halfcomplex_wavetable_float * wavetable, gsl_fft_real_workspace_float * work); int gsl_fft_halfcomplex_float_unpack (const float halfcomplex_coefficient[], float complex_coefficient[], const size_t stride, const size_t n); int gsl_fft_halfcomplex_float_radix2_unpack (const float halfcomplex_coefficient[], float complex_coefficient[], const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_FFT_HALFCOMPLEX_FLOAT_H__ */ gsl/fft/c_pass_2.c0000644000175000017500000000577613536674414012365 0ustar eddedd/* fft/c_pass_2.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static int FUNCTION(fft_complex,pass_2) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const gsl_fft_direction sign, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle[]) { size_t i = 0, j = 0; size_t k, k1; const size_t factor = 2; const size_t m = n / factor; const size_t q = n / product; const size_t product_1 = product / factor; const size_t jump = (factor - 1) * product_1; for (k = 0; k < q; k++) { ATOMIC w_real, w_imag; if (k == 0) { w_real = 1.0; w_imag = 0.0; } else { if (sign == gsl_fft_forward) { /* forward tranform */ w_real = GSL_REAL(twiddle[k - 1]); w_imag = GSL_IMAG(twiddle[k - 1]); } else { /* backward tranform: w -> conjugate(w) */ w_real = GSL_REAL(twiddle[k - 1]); w_imag = -GSL_IMAG(twiddle[k - 1]); } } for (k1 = 0; k1 < product_1; k1++) { const ATOMIC z0_real = REAL(in,istride,i); const ATOMIC z0_imag = IMAG(in,istride,i); const ATOMIC z1_real = REAL(in,istride,i+m); const ATOMIC z1_imag = IMAG(in,istride,i+m); /* compute x = W(2) z */ /* x0 = z0 + z1 */ const ATOMIC x0_real = z0_real + z1_real; const ATOMIC x0_imag = z0_imag + z1_imag; /* x1 = z0 - z1 */ const ATOMIC x1_real = z0_real - z1_real; const ATOMIC x1_imag = z0_imag - z1_imag; /* apply twiddle factors */ /* out0 = 1 * x0 */ REAL(out,ostride,j) = x0_real; IMAG(out,ostride,j) = x0_imag; /* out1 = w * x1 */ REAL(out,ostride,j+product_1) = w_real * x1_real - w_imag * x1_imag; IMAG(out,ostride,j+product_1) = w_real * x1_imag + w_imag * x1_real; i++; j++; } j += jump; } return 0; } gsl/fft/c_pass.h0000644000175000017500000001137113536674414012135 0ustar eddedd/* fft/c_pass.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static int FUNCTION(fft_complex,pass_2) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const gsl_fft_direction sign, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle[]); static int FUNCTION(fft_complex,pass_3) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const gsl_fft_direction sign, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[]); static int FUNCTION(fft_complex,pass_4) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const gsl_fft_direction sign, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[]); static int FUNCTION(fft_complex,pass_5) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const gsl_fft_direction sign, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[], const TYPE(gsl_complex) twiddle4[]); static int FUNCTION(fft_complex,pass_6) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const gsl_fft_direction sign, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[], const TYPE(gsl_complex) twiddle4[], const TYPE(gsl_complex) twiddle5[]); static int FUNCTION(fft_complex,pass_7) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const gsl_fft_direction sign, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[], const TYPE(gsl_complex) twiddle4[], const TYPE(gsl_complex) twiddle5[], const TYPE(gsl_complex) twiddle6[]); static int FUNCTION(fft_complex,pass_n) (BASE in[], const size_t istride, BASE out[], const size_t ostride, const gsl_fft_direction sign, const size_t factor, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle[]); gsl/fft/compare.h0000644000175000017500000000251213536674414012310 0ustar eddedd/* fft/compare.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ int FUNCTION(compare_complex,results) (const char *name_a, const BASE a[], const char *name_b, const BASE b[], size_t stride, size_t n, const double allowed_ticks); int FUNCTION(compare_real,results) (const char *name_a, const BASE a[], const char *name_b, const BASE b[], size_t stride, size_t n, const double allowed_ticks); gsl/fft/real_pass_4.c0000644000175000017500000001604513536674414013057 0ustar eddedd/* fft/real_pass_4.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void FUNCTION(fft_real,pass_4) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle1[], const TYPE(gsl_complex) twiddle2[], const TYPE(gsl_complex) twiddle3[]) { size_t k, k1; const size_t factor = 4; const size_t m = n / factor; const size_t q = n / product; const size_t product_1 = product / factor; for (k1 = 0; k1 < q; k1++) { const size_t from0 = k1 * product_1; const size_t from1 = from0 + m; const size_t from2 = from1 + m; const size_t from3 = from2 + m; const ATOMIC z0_real = VECTOR(in,istride,from0); const ATOMIC z1_real = VECTOR(in,istride,from1); const ATOMIC z2_real = VECTOR(in,istride,from2); const ATOMIC z3_real = VECTOR(in,istride,from3); /* compute x = W(4) z */ /* t1 = z0 + z2 */ const ATOMIC t1_real = z0_real + z2_real; /* t2 = z1 + z3 */ const ATOMIC t2_real = z1_real + z3_real; /* t3 = z0 - z2 */ const ATOMIC t3_real = z0_real - z2_real; /* t4 = - (z1 - z3) */ const ATOMIC t4_real = -(z1_real - z3_real); /* x0 = t1 + t2 */ const ATOMIC x0_real = t1_real + t2_real; /* x1 = t3 + i t4 */ const ATOMIC x1_real = t3_real; const ATOMIC x1_imag = t4_real; /* x2 = t1 - t2 */ const ATOMIC x2_real = t1_real - t2_real; const size_t to0 = product * k1; const size_t to1 = to0 + 2 * product_1 - 1; const size_t to2 = to1 + 2 * product_1; VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to1) = x1_real; VECTOR(out,ostride,to1 + 1) = x1_imag; VECTOR(out,ostride,to2) = x2_real; } if (product_1 == 1) return; for (k = 1; k < (product_1 + 1) / 2; k++) { ATOMIC w1_real, w1_imag, w2_real, w2_imag, w3_real, w3_imag; w1_real = GSL_REAL(twiddle1[k - 1]); w1_imag = -GSL_IMAG(twiddle1[k - 1]); w2_real = GSL_REAL(twiddle2[k - 1]); w2_imag = -GSL_IMAG(twiddle2[k - 1]); w3_real = GSL_REAL(twiddle3[k - 1]); w3_imag = -GSL_IMAG(twiddle3[k - 1]); for (k1 = 0; k1 < q; k1++) { const size_t from0 = k1 * product_1 + 2 * k - 1; const size_t from1 = from0 + m; const size_t from2 = from1 + m; const size_t from3 = from2 + m; const ATOMIC f0_real = VECTOR(in,istride,from0); const ATOMIC f0_imag = VECTOR(in,istride,from0 + 1); const ATOMIC f1_real = VECTOR(in,istride,from1); const ATOMIC f1_imag = VECTOR(in,istride,from1 + 1); const ATOMIC f2_real = VECTOR(in,istride,from2); const ATOMIC f2_imag = VECTOR(in,istride,from2 + 1); const ATOMIC f3_real = VECTOR(in,istride,from3); const ATOMIC f3_imag = VECTOR(in,istride,from3 + 1); const ATOMIC z0_real = f0_real; const ATOMIC z0_imag = f0_imag; const ATOMIC z1_real = w1_real * f1_real - w1_imag * f1_imag; const ATOMIC z1_imag = w1_real * f1_imag + w1_imag * f1_real; const ATOMIC z2_real = w2_real * f2_real - w2_imag * f2_imag; const ATOMIC z2_imag = w2_real * f2_imag + w2_imag * f2_real; const ATOMIC z3_real = w3_real * f3_real - w3_imag * f3_imag; const ATOMIC z3_imag = w3_real * f3_imag + w3_imag * f3_real; /* compute x = W(4) z */ /* t1 = z0 + z2 */ const ATOMIC t1_real = z0_real + z2_real; const ATOMIC t1_imag = z0_imag + z2_imag; /* t2 = z1 + z3 */ const ATOMIC t2_real = z1_real + z3_real; const ATOMIC t2_imag = z1_imag + z3_imag; /* t3 = z0 - z2 */ const ATOMIC t3_real = z0_real - z2_real; const ATOMIC t3_imag = z0_imag - z2_imag; /* t4 = - (z1 - z3) */ const ATOMIC t4_real = -(z1_real - z3_real); const ATOMIC t4_imag = -(z1_imag - z3_imag); /* x0 = t1 + t2 */ const ATOMIC x0_real = t1_real + t2_real; const ATOMIC x0_imag = t1_imag + t2_imag; /* x1 = t3 + i t4 */ const ATOMIC x1_real = t3_real - t4_imag; const ATOMIC x1_imag = t3_imag + t4_real; /* x2 = t1 - t2 */ const ATOMIC x2_real = t1_real - t2_real; const ATOMIC x2_imag = t1_imag - t2_imag; /* x3 = t3 - i t4 */ const ATOMIC x3_real = t3_real + t4_imag; const ATOMIC x3_imag = t3_imag - t4_real; const size_t to0 = k1 * product + 2 * k - 1; const size_t to1 = to0 + 2 * product_1; const size_t to2 = 2 * product_1 - 2 * k + k1 * product - 1; const size_t to3 = to2 + 2 * product_1; VECTOR(out,ostride,to0) = x0_real; VECTOR(out,ostride,to0 + 1) = x0_imag; VECTOR(out,ostride,to1) = x1_real; VECTOR(out,ostride,to1 + 1) = x1_imag; VECTOR(out,ostride,to3) = x2_real; VECTOR(out,ostride,to3 + 1) = -x2_imag; VECTOR(out,ostride,to2) = x3_real; VECTOR(out,ostride,to2 + 1) = -x3_imag; } } if (product_1 % 2 == 1) return; for (k1 = 0; k1 < q; k1++) { const size_t from0 = k1 * product_1 + product_1 - 1; const size_t from1 = from0 + m; const size_t from2 = from1 + m; const size_t from3 = from2 + m; const ATOMIC x0 = VECTOR(in,istride,from0); const ATOMIC x1 = VECTOR(in,istride,from1); const ATOMIC x2 = VECTOR(in,istride,from2); const ATOMIC x3 = VECTOR(in,istride,from3); const ATOMIC t1 = (1.0 / sqrt (2.0)) * (x1 - x3); const ATOMIC t2 = (1.0 / sqrt (2.0)) * (x1 + x3); const size_t to0 = k1 * product + 2 * k - 1; const size_t to1 = to0 + 2 * product_1; VECTOR(out,ostride,to0) = x0 + t1; VECTOR(out,ostride,to0 + 1) = -x2 - t2; VECTOR(out,ostride,to1) = x0 - t1; VECTOR(out,ostride,to1 + 1) = x2 - t2; } return; } gsl/fft/real_pass_n.c0000644000175000017500000002052213536674414013144 0ustar eddedd/* fft/real_pass_n.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static void FUNCTION(fft_real,pass_n) (const BASE in[], const size_t istride, BASE out[], const size_t ostride, const size_t factor, const size_t product, const size_t n, const TYPE(gsl_complex) twiddle[]) { size_t k, k1; const size_t m = n / factor; const size_t q = n / product; const size_t product_1 = product / factor; size_t e1, e2; const double d_theta = 2.0 * M_PI / ((double) factor); const ATOMIC cos_d_theta = cos (d_theta); const ATOMIC sin_d_theta = sin (d_theta); for (k1 = 0; k1 < q; k1++) { /* compute x = W(factor) z, for z real */ ATOMIC dw_real = 1.0, dw_imag = 0.0; for (e1 = 0; e1 <= factor - e1; e1++) { ATOMIC sum_real = 0.0; ATOMIC sum_imag = 0.0; ATOMIC w_real = 1.0, w_imag = 0.0; if (e1 > 0) { ATOMIC tmp_real = dw_real * cos_d_theta + dw_imag * sin_d_theta; ATOMIC tmp_imag = -dw_real * sin_d_theta + dw_imag * cos_d_theta; dw_real = tmp_real; dw_imag = tmp_imag; } for (e2 = 0; e2 < factor; e2++) { ATOMIC z_real = VECTOR(in,istride,k1 * product_1 + e2 * m); if (e2 > 0) { ATOMIC tmp_real = dw_real * w_real - dw_imag * w_imag; ATOMIC tmp_imag = dw_real * w_imag + dw_imag * w_real; w_real = tmp_real; w_imag = tmp_imag; } sum_real += w_real * z_real; sum_imag += w_imag * z_real; } if (e1 == 0) { const size_t to0 = product * k1; VECTOR(out,ostride,to0) = sum_real; } else if (e1 < factor - e1) { const size_t to0 = k1 * product + 2 * e1 * product_1 - 1; VECTOR(out,ostride,to0) = sum_real; VECTOR(out,ostride,to0 + 1) = sum_imag; } else if (e1 == factor - e1) { const size_t to0 = k1 * product + 2 * e1 * product_1 - 1; VECTOR(out,ostride,to0) = sum_real; } } } if (product_1 == 1) return; for (k = 1; k < (product_1 + 1) / 2; k++) { for (k1 = 0; k1 < q; k1++) { ATOMIC dw_real = 1.0, dw_imag = 0.0; for (e1 = 0; e1 < factor; e1++) { ATOMIC sum_real = 0.0, sum_imag = 0.0; ATOMIC w_real = 1.0, w_imag = 0.0; if (e1 > 0) { const ATOMIC tmp_real = dw_real * cos_d_theta + dw_imag * sin_d_theta; const ATOMIC tmp_imag = -dw_real * sin_d_theta + dw_imag * cos_d_theta; dw_real = tmp_real; dw_imag = tmp_imag; } for (e2 = 0; e2 < factor; e2++) { int tskip = (product_1 + 1) / 2 - 1; const size_t from0 = k1 * product_1 + 2 * k + e2 * m - 1; ATOMIC tw_real, tw_imag; ATOMIC z_real, z_imag; if (e2 == 0) { tw_real = 1.0; tw_imag = 0.0; } else { const size_t t_index = (k - 1) + (e2 - 1) * tskip; tw_real = GSL_REAL(twiddle[t_index]); tw_imag = -GSL_IMAG(twiddle[t_index]); } { const ATOMIC f0_real = VECTOR(in,istride,from0); const ATOMIC f0_imag = VECTOR(in,istride,from0 + 1); z_real = tw_real * f0_real - tw_imag * f0_imag; z_imag = tw_real * f0_imag + tw_imag * f0_real; } if (e2 > 0) { const ATOMIC tmp_real = dw_real * w_real - dw_imag * w_imag; const ATOMIC tmp_imag = dw_real * w_imag + dw_imag * w_real; w_real = tmp_real; w_imag = tmp_imag; } sum_real += w_real * z_real - w_imag * z_imag; sum_imag += w_real * z_imag + w_imag * z_real; } if (e1 < factor - e1) { const size_t to0 = k1 * product - 1 + 2 * e1 * product_1 + 2 * k; VECTOR(out,ostride,to0) = sum_real; VECTOR(out,ostride,to0 + 1) = sum_imag; } else { const size_t to0 = k1 * product - 1 + 2 * (factor - e1) * product_1 - 2 * k; VECTOR(out,ostride,to0) = sum_real; VECTOR(out,ostride,to0 + 1) = -sum_imag; } } } } if (product_1 % 2 == 1) return; { double tw_arg = M_PI / ((double) factor); ATOMIC cos_tw_arg = cos (tw_arg); ATOMIC sin_tw_arg = -sin (tw_arg); for (k1 = 0; k1 < q; k1++) { ATOMIC dw_real = 1.0, dw_imag = 0.0; for (e1 = 0; e1 < factor; e1++) { ATOMIC z_real, z_imag; ATOMIC sum_real = 0.0; ATOMIC sum_imag = 0.0; ATOMIC w_real = 1.0, w_imag = 0.0; ATOMIC tw_real = 1.0, tw_imag = 0.0; if (e1 > 0) { ATOMIC t_real = dw_real * cos_d_theta + dw_imag * sin_d_theta; ATOMIC t_imag = -dw_real * sin_d_theta + dw_imag * cos_d_theta; dw_real = t_real; dw_imag = t_imag; } for (e2 = 0; e2 < factor; e2++) { if (e2 > 0) { ATOMIC tmp_real = tw_real * cos_tw_arg - tw_imag * sin_tw_arg; ATOMIC tmp_imag = tw_real * sin_tw_arg + tw_imag * cos_tw_arg; tw_real = tmp_real; tw_imag = tmp_imag; } if (e2 > 0) { ATOMIC tmp_real = dw_real * w_real - dw_imag * w_imag; ATOMIC tmp_imag = dw_real * w_imag + dw_imag * w_real; w_real = tmp_real; w_imag = tmp_imag; } { const size_t from0 = k1 * product_1 + 2 * k + e2 * m - 1; const ATOMIC f0_real = VECTOR(in,istride,from0); z_real = tw_real * f0_real; z_imag = tw_imag * f0_real; } sum_real += w_real * z_real - w_imag * z_imag; sum_imag += w_real * z_imag + w_imag * z_real; } if (e1 + 1 < factor - e1) { const size_t to0 = k1 * product - 1 + 2 * e1 * product_1 + 2 * k; VECTOR(out,ostride,to0) = sum_real; VECTOR(out,ostride,to0 + 1) = sum_imag; } else if (e1 + 1 == factor - e1) { const size_t to0 = k1 * product - 1 + 2 * e1 * product_1 + 2 * k; VECTOR(out,ostride,to0) = sum_real; } else { const size_t to0 = k1 * product - 1 + 2 * (factor - e1) * product_1 - 2 * k; VECTOR(out,ostride,to0) = sum_real; VECTOR(out,ostride,to0 + 1) = -sum_imag; } } } } return; } gsl/permutation/0000755000175000017500000000000014057135461012272 5ustar eddeddgsl/permutation/Makefile.in0000664000175000017500000011204614057135461014345 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = permutation ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslpermutation_la_LIBADD = am_libgslpermutation_la_OBJECTS = init.lo file.lo permutation.lo \ permute.lo canonical.lo inline.lo libgslpermutation_la_OBJECTS = $(am_libgslpermutation_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslpermutation.la ../vector/libgslvector.la \ ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/canonical.Plo ./$(DEPDIR)/file.Plo \ ./$(DEPDIR)/init.Plo ./$(DEPDIR)/inline.Plo \ ./$(DEPDIR)/permutation.Plo ./$(DEPDIR)/permute.Plo \ ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslpermutation_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslpermutation_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslpermutation.la pkginclude_HEADERS = gsl_permutation.h gsl_permute.h \ gsl_permute_char.h gsl_permute_complex_double.h \ gsl_permute_complex_float.h gsl_permute_complex_long_double.h \ gsl_permute_double.h gsl_permute_float.h gsl_permute_int.h \ gsl_permute_long.h gsl_permute_long_double.h \ gsl_permute_short.h gsl_permute_uchar.h gsl_permute_uint.h \ gsl_permute_ulong.h gsl_permute_ushort.h gsl_permute_vector.h \ gsl_permute_vector_char.h gsl_permute_vector_complex_double.h \ gsl_permute_vector_complex_float.h \ gsl_permute_vector_complex_long_double.h \ gsl_permute_vector_double.h gsl_permute_vector_float.h \ gsl_permute_vector_int.h gsl_permute_vector_long.h \ gsl_permute_vector_long_double.h gsl_permute_vector_short.h \ gsl_permute_vector_uchar.h gsl_permute_vector_uint.h \ gsl_permute_vector_ulong.h gsl_permute_vector_ushort.h \ gsl_permute_matrix_char.h \ gsl_permute_matrix_complex_long_double.h gsl_permute_matrix.h \ gsl_permute_matrix_long.h gsl_permute_matrix_uint.h \ gsl_permute_matrix_complex_double.h \ gsl_permute_matrix_double.h gsl_permute_matrix_int.h \ gsl_permute_matrix_short.h gsl_permute_matrix_ulong.h \ gsl_permute_matrix_complex_float.h gsl_permute_matrix_float.h \ gsl_permute_matrix_long_double.h gsl_permute_matrix_uchar.h \ gsl_permute_matrix_ushort.h AM_CPPFLAGS = -I$(top_srcdir) libgslpermutation_la_SOURCES = init.c file.c permutation.c permute.c canonical.c inline.c noinst_HEADERS = permute_source.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslpermutation.la ../vector/libgslvector.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu permutation/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu permutation/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslpermutation.la: $(libgslpermutation_la_OBJECTS) $(libgslpermutation_la_DEPENDENCIES) $(EXTRA_libgslpermutation_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslpermutation_la_OBJECTS) $(libgslpermutation_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/canonical.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inline.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/permutation.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/permute.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/canonical.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/init.Plo -rm -f ./$(DEPDIR)/inline.Plo -rm -f ./$(DEPDIR)/permutation.Plo -rm -f ./$(DEPDIR)/permute.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/canonical.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/init.Plo -rm -f ./$(DEPDIR)/inline.Plo -rm -f ./$(DEPDIR)/permutation.Plo -rm -f ./$(DEPDIR)/permute.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile #CLEANFILES = test.txt test.dat # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/permutation/gsl_permute_matrix_float.h0000644000175000017500000000251613536674414017555 0ustar eddedd/* permutation/gsl_permute_matrix_float.h * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_MATRIX_FLOAT_H__ #define __GSL_PERMUTE_MATRIX_FLOAT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_matrix_float (const gsl_permutation * p, gsl_matrix_float * A); __END_DECLS #endif /* __GSL_PERMUTE_MATRIX_FLOAT_H__ */ gsl/permutation/gsl_permute_complex_float.h0000644000175000017500000000275313536674414017723 0ustar eddedd/* permutation/gsl_permute_complex_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_COMPLEX_FLOAT_H__ #define __GSL_PERMUTE_COMPLEX_FLOAT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_complex_float (const size_t * p, float * data, const size_t stride, const size_t n); int gsl_permute_complex_float_inverse (const size_t * p, float * data, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_PERMUTE_COMPLEX_FLOAT_H__ */ gsl/permutation/permute.c0000644000175000017500000000363413536674414014134 0ustar eddedd#include #include #include #include #include #include #include #define BASE_GSL_COMPLEX_LONG #include "templates_on.h" #include "permute_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_LONG #define BASE_GSL_COMPLEX #include "templates_on.h" #include "permute_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX #define BASE_GSL_COMPLEX_FLOAT #include "templates_on.h" #include "permute_source.c" #include "templates_off.h" #undef BASE_GSL_COMPLEX_FLOAT #define BASE_LONG_DOUBLE #include "templates_on.h" #include "permute_source.c" #include "templates_off.h" #undef BASE_LONG_DOUBLE #define BASE_DOUBLE #include "templates_on.h" #include "permute_source.c" #include "templates_off.h" #undef BASE_DOUBLE #define BASE_FLOAT #include "templates_on.h" #include "permute_source.c" #include "templates_off.h" #undef BASE_FLOAT #define BASE_ULONG #include "templates_on.h" #include "permute_source.c" #include "templates_off.h" #undef BASE_ULONG #define BASE_LONG #include "templates_on.h" #include "permute_source.c" #include "templates_off.h" #undef BASE_LONG #define BASE_UINT #include "templates_on.h" #include "permute_source.c" #include "templates_off.h" #undef BASE_UINT #define BASE_INT #include "templates_on.h" #include "permute_source.c" #include "templates_off.h" #undef BASE_INT #define BASE_USHORT #include "templates_on.h" #include "permute_source.c" #include "templates_off.h" #undef BASE_USHORT #define BASE_SHORT #include "templates_on.h" #include "permute_source.c" #include "templates_off.h" #undef BASE_SHORT #define BASE_UCHAR #include "templates_on.h" #include "permute_source.c" #include "templates_off.h" #undef BASE_UCHAR #define BASE_CHAR #include "templates_on.h" #include "permute_source.c" #include "templates_off.h" #undef BASE_CHAR gsl/permutation/gsl_permute_matrix_long_double.h0000644000175000017500000000257013536674414020741 0ustar eddedd/* permutation/gsl_permute_matrix_long_double.h * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_MATRIX_LONG_DOUBLE_H__ #define __GSL_PERMUTE_MATRIX_LONG_DOUBLE_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_matrix_long_double (const gsl_permutation * p, gsl_matrix_long_double * A); __END_DECLS #endif /* __GSL_PERMUTE_MATRIX_LONG_DOUBLE_H__ */ gsl/permutation/gsl_permute_vector_uint.h0000644000175000017500000000267113536674414017427 0ustar eddedd/* permutation/gsl_permute_vector_uint.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_VECTOR_UINT_H__ #define __GSL_PERMUTE_VECTOR_UINT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_vector_uint (const gsl_permutation * p, gsl_vector_uint * v); int gsl_permute_vector_uint_inverse (const gsl_permutation * p, gsl_vector_uint * v); __END_DECLS #endif /* __GSL_PERMUTE_VECTOR_UINT_H__ */ gsl/permutation/gsl_permutation.h0000644000175000017500000000642213536674414015672 0ustar eddedd/* permutation/gsl_permutation.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTATION_H__ #define __GSL_PERMUTATION_H__ #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_permutation_struct { size_t size; size_t *data; }; typedef struct gsl_permutation_struct gsl_permutation; gsl_permutation *gsl_permutation_alloc (const size_t n); gsl_permutation *gsl_permutation_calloc (const size_t n); void gsl_permutation_init (gsl_permutation * p); void gsl_permutation_free (gsl_permutation * p); int gsl_permutation_memcpy (gsl_permutation * dest, const gsl_permutation * src); int gsl_permutation_fread (FILE * stream, gsl_permutation * p); int gsl_permutation_fwrite (FILE * stream, const gsl_permutation * p); int gsl_permutation_fscanf (FILE * stream, gsl_permutation * p); int gsl_permutation_fprintf (FILE * stream, const gsl_permutation * p, const char *format); size_t gsl_permutation_size (const gsl_permutation * p); size_t * gsl_permutation_data (const gsl_permutation * p); int gsl_permutation_swap (gsl_permutation * p, const size_t i, const size_t j); int gsl_permutation_valid (const gsl_permutation * p); void gsl_permutation_reverse (gsl_permutation * p); int gsl_permutation_inverse (gsl_permutation * inv, const gsl_permutation * p); int gsl_permutation_next (gsl_permutation * p); int gsl_permutation_prev (gsl_permutation * p); int gsl_permutation_mul (gsl_permutation * p, const gsl_permutation * pa, const gsl_permutation * pb); int gsl_permutation_linear_to_canonical (gsl_permutation * q, const gsl_permutation * p); int gsl_permutation_canonical_to_linear (gsl_permutation * p, const gsl_permutation * q); size_t gsl_permutation_inversions (const gsl_permutation * p); size_t gsl_permutation_linear_cycles (const gsl_permutation * p); size_t gsl_permutation_canonical_cycles (const gsl_permutation * q); INLINE_DECL size_t gsl_permutation_get (const gsl_permutation * p, const size_t i); #ifdef HAVE_INLINE INLINE_FUN size_t gsl_permutation_get (const gsl_permutation * p, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= p->size)) { GSL_ERROR_VAL ("index out of range", GSL_EINVAL, 0); } #endif return p->data[i]; } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_PERMUTATION_H__ */ gsl/permutation/gsl_permute_vector_complex_double.h0000644000175000017500000000276713536674414021457 0ustar eddedd/* permutation/gsl_permute_vector_complex_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_VECTOR_COMPLEX_DOUBLE_H__ #define __GSL_PERMUTE_VECTOR_COMPLEX_DOUBLE_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_vector_complex (const gsl_permutation * p, gsl_vector_complex * v); int gsl_permute_vector_complex_inverse (const gsl_permutation * p, gsl_vector_complex * v); __END_DECLS #endif /* __GSL_PERMUTE_VECTOR_COMPLEX_DOUBLE_H__ */ gsl/permutation/ChangeLog0000644000175000017500000000432413536674414014056 0ustar eddedd2009-07-09 Brian Gough * init.c (gsl_permutation_free): handle NULL argument in free 2008-07-03 Brian Gough * permutation.c: move gsl_permutation_get to inline.c * gsl_permutation.h: use new inline declarations * inline.c: handle inline functions separately * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2003-02-17 Brian Gough * canonical.c (gsl_permutation_canonical_to_linear): fixed bug confusing input and output (swapped pp and qq) Sat Apr 6 19:08:40 2002 Brian Gough * test.c (main): added tests for canonical representation functions * canonical.c: functions for canonical representations (Nicolas Darnis) Mon Apr 1 17:29:49 2002 Brian Gough * permutation.c (gsl_permutation_mul): added function for combining permutations (Nicolas Darnis) Sat Feb 9 18:17:53 2002 Brian Gough * permutation.c (gsl_permutation_memcpy): added memcpy function Tue Sep 4 17:22:06 2001 Brian Gough * added permutations of complex arrays and vectors * permute_source.c: added permutations of complex arrays and vectors Sat Dec 30 21:30:16 2000 Brian Gough * test.c: added the start of a test program * permutation.c: added gsl_permutation_next and gsl_permutation_prev as in STL, from vattervi@msu.edu Mon Apr 24 20:54:03 2000 Brian Gough * gsl_permutation.h: renamed gsl_permutation_invert to gsl_permutation_inverse Mon Apr 10 14:31:01 2000 Brian Gough * added functions for permuting data and vectors Thu Feb 24 17:53:55 2000 Brian Gough * permutation.c (gsl_permutation_invert): add an inverse function for permutations Sat Feb 19 12:04:32 2000 Brian Gough * permutation.c (gsl_permutation_reverse): changed from return type int to void, since no errors can occur. Fri Feb 18 12:06:13 2000 Brian Gough * permutation.c: added valid and reverse methods (gsl_permutation_reverse): fixed bug in reverse gsl/permutation/Makefile.am0000644000175000017500000000331713536674414014341 0ustar eddeddnoinst_LTLIBRARIES = libgslpermutation.la pkginclude_HEADERS = gsl_permutation.h gsl_permute.h gsl_permute_char.h gsl_permute_complex_double.h gsl_permute_complex_float.h gsl_permute_complex_long_double.h gsl_permute_double.h gsl_permute_float.h gsl_permute_int.h gsl_permute_long.h gsl_permute_long_double.h gsl_permute_short.h gsl_permute_uchar.h gsl_permute_uint.h gsl_permute_ulong.h gsl_permute_ushort.h gsl_permute_vector.h gsl_permute_vector_char.h gsl_permute_vector_complex_double.h gsl_permute_vector_complex_float.h gsl_permute_vector_complex_long_double.h gsl_permute_vector_double.h gsl_permute_vector_float.h gsl_permute_vector_int.h gsl_permute_vector_long.h gsl_permute_vector_long_double.h gsl_permute_vector_short.h gsl_permute_vector_uchar.h gsl_permute_vector_uint.h gsl_permute_vector_ulong.h gsl_permute_vector_ushort.h gsl_permute_matrix_char.h gsl_permute_matrix_complex_long_double.h gsl_permute_matrix.h gsl_permute_matrix_long.h gsl_permute_matrix_uint.h gsl_permute_matrix_complex_double.h gsl_permute_matrix_double.h gsl_permute_matrix_int.h gsl_permute_matrix_short.h gsl_permute_matrix_ulong.h gsl_permute_matrix_complex_float.h gsl_permute_matrix_float.h gsl_permute_matrix_long_double.h gsl_permute_matrix_uchar.h gsl_permute_matrix_ushort.h AM_CPPFLAGS = -I$(top_srcdir) libgslpermutation_la_SOURCES = init.c file.c permutation.c permute.c canonical.c inline.c noinst_HEADERS = permute_source.c TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_SOURCES = test.c test_LDADD = libgslpermutation.la ../vector/libgslvector.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la #CLEANFILES = test.txt test.dat gsl/permutation/gsl_permute_vector_float.h0000644000175000017500000000270213536674414017550 0ustar eddedd/* permutation/gsl_permute_vector_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_VECTOR_FLOAT_H__ #define __GSL_PERMUTE_VECTOR_FLOAT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_vector_float (const gsl_permutation * p, gsl_vector_float * v); int gsl_permute_vector_float_inverse (const gsl_permutation * p, gsl_vector_float * v); __END_DECLS #endif /* __GSL_PERMUTE_VECTOR_FLOAT_H__ */ gsl/permutation/gsl_permute_vector.h0000644000175000017500000000133513536674414016364 0ustar eddedd#ifndef __GSL_PERMUTE_VECTOR_H__ #define __GSL_PERMUTE_VECTOR_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif /* __GSL_PERMUTE_VECTOR_H__ */ gsl/permutation/gsl_permute_double.h0000644000175000017500000000263013536674414016333 0ustar eddedd/* permutation/gsl_permute_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_DOUBLE_H__ #define __GSL_PERMUTE_DOUBLE_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute (const size_t * p, double * data, const size_t stride, const size_t n); int gsl_permute_inverse (const size_t * p, double * data, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_PERMUTE_DOUBLE_H__ */ gsl/permutation/gsl_permute_complex_double.h0000644000175000017500000000274513536674414020071 0ustar eddedd/* permutation/gsl_permute_complex_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_COMPLEX_DOUBLE_H__ #define __GSL_PERMUTE_COMPLEX_DOUBLE_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_complex (const size_t * p, double * data, const size_t stride, const size_t n); int gsl_permute_complex_inverse (const size_t * p, double * data, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_PERMUTE_COMPLEX_DOUBLE_H__ */ gsl/permutation/gsl_permute_matrix_complex_long_double.h0000644000175000017500000000266013536674414022470 0ustar eddedd/* permutation/gsl_permute_matrix_complex_long_double.h * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_MATRIX_COMPLEX_LONG_DOUBLE_H__ #define __GSL_PERMUTE_MATRIX_COMPLEX_LONG_DOUBLE_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_matrix_complex_long_double (const gsl_permutation * p, gsl_matrix_complex_long_double * A); __END_DECLS #endif /* __GSL_PERMUTE_MATRIX_COMPLEX_LONG_DOUBLE_H__ */ gsl/permutation/permutation.c0000644000175000017500000001221113536674414015011 0ustar eddedd/* permutation/permutation.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include size_t gsl_permutation_size (const gsl_permutation * p) { return p->size ; } size_t * gsl_permutation_data (const gsl_permutation * p) { return p->data ; } int gsl_permutation_swap (gsl_permutation * p, const size_t i, const size_t j) { const size_t size = p->size ; if (i >= size) { GSL_ERROR("first index is out of range", GSL_EINVAL); } if (j >= size) { GSL_ERROR("second index is out of range", GSL_EINVAL); } if (i != j) { size_t tmp = p->data[i]; p->data[i] = p->data[j]; p->data[j] = tmp; } return GSL_SUCCESS; } int gsl_permutation_valid (const gsl_permutation * p) { const size_t size = p->size ; size_t i, j ; for (i = 0; i < size; i++) { if (p->data[i] >= size) { GSL_ERROR("permutation index outside range", GSL_FAILURE) ; } for (j = 0; j < i; j++) { if (p->data[i] == p->data[j]) { GSL_ERROR("duplicate permutation index", GSL_FAILURE) ; } } } return GSL_SUCCESS; } void gsl_permutation_reverse (gsl_permutation * p) { const size_t size = p->size ; size_t i ; for (i = 0; i < (size / 2); i++) { size_t j = size - i - 1; size_t tmp = p->data[i] ; p->data[i] = p->data[j] ; p->data[j] = tmp ; } } int gsl_permutation_inverse (gsl_permutation * inv, const gsl_permutation * p) { const size_t size = p->size ; size_t i ; if (inv->size != size) { GSL_ERROR("permutation lengths are not equal", GSL_EBADLEN); } for (i = 0; i < size; i++) { inv->data[p->data[i]] = i ; } return GSL_SUCCESS ; } int gsl_permutation_next (gsl_permutation * p) { /* Replaces p with the next permutation (in the standard lexicographical * ordering). Returns GSL_FAILURE if there is no next permutation. */ const size_t size = p->size; size_t i, j, k; if (size < 2) { return GSL_FAILURE; } i = size - 2; while ((p->data[i] > p->data[i+1]) && (i != 0)) { i--; } if ((i == 0) && (p->data[0] > p->data[1])) { return GSL_FAILURE; } k = i + 1; for (j = i + 2; j < size; j++ ) { if ((p->data[j] > p->data[i]) && (p->data[j] < p->data[k])) { k = j; } } /* swap i and k */ { size_t tmp = p->data[i]; p->data[i] = p->data[k]; p->data[k] = tmp; } for (j = i + 1; j <= ((size + i) / 2); j++) { size_t tmp = p->data[j]; p->data[j] = p->data[size + i - j]; p->data[size + i - j] = tmp; } return GSL_SUCCESS; } int gsl_permutation_prev (gsl_permutation * p) { const size_t size = p->size; size_t i, j, k; if (size < 2) { return GSL_FAILURE; } i = size - 2; while ((p->data[i] < p->data[i+1]) && (i != 0)) { i--; } if ((i == 0) && (p->data[0] < p->data[1])) { return GSL_FAILURE; } k = i + 1; for (j = i + 2; j < size; j++ ) { if ((p->data[j] < p->data[i]) && (p->data[j] > p->data[k])) { k = j; } } /* swap i and k */ { size_t tmp = p->data[i]; p->data[i] = p->data[k]; p->data[k] = tmp; } for (j = i + 1; j <= ((size + i) / 2); j++) { size_t tmp = p->data[j]; p->data[j] = p->data[size + i - j]; p->data[size + i - j] = tmp; } return GSL_SUCCESS; } int gsl_permutation_mul (gsl_permutation * p, const gsl_permutation * pa, const gsl_permutation * pb) { size_t i; const size_t size = p->size; if (pa->size != size) { GSL_ERROR("size of result does not match size of pa", GSL_EINVAL); } if (pb->size != size) { GSL_ERROR("size of result does not match size of pb", GSL_EINVAL); } for (i = 0; i < size; i++) { p->data[i] = pb->data[pa->data[i]]; } return GSL_SUCCESS; } int gsl_permutation_memcpy (gsl_permutation * dest, const gsl_permutation * src) { const size_t src_size = src->size; const size_t dest_size = dest->size; if (src_size != dest_size) { GSL_ERROR ("permutation lengths are not equal", GSL_EBADLEN); } { size_t j; for (j = 0; j < src_size; j++) { dest->data[j] = src->data[j]; } } return GSL_SUCCESS; } gsl/permutation/gsl_permute_ushort.h0000644000175000017500000000266613536674414016416 0ustar eddedd/* permutation/gsl_permute_ushort.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_USHORT_H__ #define __GSL_PERMUTE_USHORT_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_ushort (const size_t * p, unsigned short * data, const size_t stride, const size_t n); int gsl_permute_ushort_inverse (const size_t * p, unsigned short * data, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_PERMUTE_USHORT_H__ */ gsl/permutation/gsl_permute_long_double.h0000644000175000017500000000271613536674414017357 0ustar eddedd/* permutation/gsl_permute_long_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_LONG_DOUBLE_H__ #define __GSL_PERMUTE_LONG_DOUBLE_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_long_double (const size_t * p, long double * data, const size_t stride, const size_t n); int gsl_permute_long_double_inverse (const size_t * p, long double * data, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_PERMUTE_LONG_DOUBLE_H__ */ gsl/permutation/inline.c0000644000175000017500000000170113536674414013722 0ustar eddedd/* permutation/inline.c * * Copyright (C) 2008 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include /* Compile all the inline functions */ #define COMPILE_INLINE_STATIC #include "build.h" #include gsl/permutation/gsl_permute_long.h0000644000175000017500000000262613536674414016025 0ustar eddedd/* permutation/gsl_permute_long.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_LONG_H__ #define __GSL_PERMUTE_LONG_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_long (const size_t * p, long * data, const size_t stride, const size_t n); int gsl_permute_long_inverse (const size_t * p, long * data, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_PERMUTE_LONG_H__ */ gsl/permutation/gsl_permute_vector_ulong.h0000644000175000017500000000270213536674414017567 0ustar eddedd/* permutation/gsl_permute_vector_ulong.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_VECTOR_ULONG_H__ #define __GSL_PERMUTE_VECTOR_ULONG_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_vector_ulong (const gsl_permutation * p, gsl_vector_ulong * v); int gsl_permute_vector_ulong_inverse (const gsl_permutation * p, gsl_vector_ulong * v); __END_DECLS #endif /* __GSL_PERMUTE_VECTOR_ULONG_H__ */ gsl/permutation/gsl_permute_matrix_uchar.h0000644000175000017500000000251613536674414017552 0ustar eddedd/* permutation/gsl_permute_matrix_uchar.h * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_MATRIX_UCHAR_H__ #define __GSL_PERMUTE_MATRIX_UCHAR_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_matrix_uchar (const gsl_permutation * p, gsl_matrix_uchar * A); __END_DECLS #endif /* __GSL_PERMUTE_MATRIX_UCHAR_H__ */ gsl/permutation/gsl_permute_matrix.h0000644000175000017500000000133513536674414016366 0ustar eddedd#ifndef __GSL_PERMUTE_MATRIX_H__ #define __GSL_PERMUTE_MATRIX_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif /* __GSL_PERMUTE_MATRIX_H__ */ gsl/permutation/gsl_permute_char.h0000644000175000017500000000262613536674414016003 0ustar eddedd/* permutation/gsl_permute_char.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_CHAR_H__ #define __GSL_PERMUTE_CHAR_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_char (const size_t * p, char * data, const size_t stride, const size_t n); int gsl_permute_char_inverse (const size_t * p, char * data, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_PERMUTE_CHAR_H__ */ gsl/permutation/gsl_permute_vector_long.h0000644000175000017500000000267113536674414017407 0ustar eddedd/* permutation/gsl_permute_vector_long.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_VECTOR_LONG_H__ #define __GSL_PERMUTE_VECTOR_LONG_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_vector_long (const gsl_permutation * p, gsl_vector_long * v); int gsl_permute_vector_long_inverse (const gsl_permutation * p, gsl_vector_long * v); __END_DECLS #endif /* __GSL_PERMUTE_VECTOR_LONG_H__ */ gsl/permutation/gsl_permute_ulong.h0000644000175000017500000000265613536674414016215 0ustar eddedd/* permutation/gsl_permute_ulong.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_ULONG_H__ #define __GSL_PERMUTE_ULONG_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_ulong (const size_t * p, unsigned long * data, const size_t stride, const size_t n); int gsl_permute_ulong_inverse (const size_t * p, unsigned long * data, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_PERMUTE_ULONG_H__ */ gsl/permutation/gsl_permute_complex_long_double.h0000644000175000017500000000303313536674414021077 0ustar eddedd/* permutation/gsl_permute_complex_long_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_COMPLEX_LONG_DOUBLE_H__ #define __GSL_PERMUTE_COMPLEX_LONG_DOUBLE_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_complex_long_double (const size_t * p, long double * data, const size_t stride, const size_t n); int gsl_permute_complex_long_double_inverse (const size_t * p, long double * data, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_PERMUTE_COMPLEX_LONG_DOUBLE_H__ */ gsl/permutation/gsl_permute_matrix_short.h0000644000175000017500000000251613536674414017607 0ustar eddedd/* permutation/gsl_permute_matrix_short.h * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_MATRIX_SHORT_H__ #define __GSL_PERMUTE_MATRIX_SHORT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_matrix_short (const gsl_permutation * p, gsl_matrix_short * A); __END_DECLS #endif /* __GSL_PERMUTE_MATRIX_SHORT_H__ */ gsl/permutation/gsl_permute_matrix_long.h0000644000175000017500000000250713536674414017407 0ustar eddedd/* permutation/gsl_permute_matrix_long.h * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_MATRIX_LONG_H__ #define __GSL_PERMUTE_MATRIX_LONG_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_matrix_long (const gsl_permutation * p, gsl_matrix_long * A); __END_DECLS #endif /* __GSL_PERMUTE_MATRIX_LONG_H__ */ gsl/permutation/gsl_permute_vector_char.h0000644000175000017500000000267113536674414017365 0ustar eddedd/* permutation/gsl_permute_vector_char.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_VECTOR_CHAR_H__ #define __GSL_PERMUTE_VECTOR_CHAR_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_vector_char (const gsl_permutation * p, gsl_vector_char * v); int gsl_permute_vector_char_inverse (const gsl_permutation * p, gsl_vector_char * v); __END_DECLS #endif /* __GSL_PERMUTE_VECTOR_CHAR_H__ */ gsl/permutation/gsl_permute_uchar.h0000644000175000017500000000265613536674414016173 0ustar eddedd/* permutation/gsl_permute_uchar.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_UCHAR_H__ #define __GSL_PERMUTE_UCHAR_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_uchar (const size_t * p, unsigned char * data, const size_t stride, const size_t n); int gsl_permute_uchar_inverse (const size_t * p, unsigned char * data, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_PERMUTE_UCHAR_H__ */ gsl/permutation/gsl_permute_vector_int.h0000644000175000017500000000266013536674414017240 0ustar eddedd/* permutation/gsl_permute_vector_int.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_VECTOR_INT_H__ #define __GSL_PERMUTE_VECTOR_INT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_vector_int (const gsl_permutation * p, gsl_vector_int * v); int gsl_permute_vector_int_inverse (const gsl_permutation * p, gsl_vector_int * v); __END_DECLS #endif /* __GSL_PERMUTE_VECTOR_INT_H__ */ gsl/permutation/gsl_permute.h0000644000175000017500000000114613536674414015002 0ustar eddedd#ifndef __GSL_PERMUTE_H__ #define __GSL_PERMUTE_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif /* __GSL_PERMUTE_H__ */ gsl/permutation/gsl_permute_matrix_uint.h0000644000175000017500000000250713536674414017427 0ustar eddedd/* permutation/gsl_permute_matrix_uint.h * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_MATRIX_UINT_H__ #define __GSL_PERMUTE_MATRIX_UINT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_matrix_uint (const gsl_permutation * p, gsl_matrix_uint * A); __END_DECLS #endif /* __GSL_PERMUTE_MATRIX_UINT_H__ */ gsl/permutation/gsl_permute_matrix_ulong.h0000644000175000017500000000251613536674414017574 0ustar eddedd/* permutation/gsl_permute_matrix_ulong.h * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_MATRIX_ULONG_H__ #define __GSL_PERMUTE_MATRIX_ULONG_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_matrix_ulong (const gsl_permutation * p, gsl_matrix_ulong * A); __END_DECLS #endif /* __GSL_PERMUTE_MATRIX_ULONG_H__ */ gsl/permutation/gsl_permute_matrix_double.h0000644000175000017500000000250713536674414017722 0ustar eddedd/* permutation/gsl_permute_matrix_double.h * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_MATRIX_DOUBLE_H__ #define __GSL_PERMUTE_MATRIX_DOUBLE_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_matrix (const gsl_permutation * p, gsl_matrix * A); __END_DECLS #endif /* __GSL_PERMUTE_MATRIX_DOUBLE_H__ */ gsl/permutation/gsl_permute_short.h0000644000175000017500000000263613536674414016226 0ustar eddedd/* permutation/gsl_permute_short.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_SHORT_H__ #define __GSL_PERMUTE_SHORT_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_short (const size_t * p, short * data, const size_t stride, const size_t n); int gsl_permute_short_inverse (const size_t * p, short * data, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_PERMUTE_SHORT_H__ */ gsl/permutation/gsl_permute_uint.h0000644000175000017500000000264613536674414016047 0ustar eddedd/* permutation/gsl_permute_uint.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_UINT_H__ #define __GSL_PERMUTE_UINT_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_uint (const size_t * p, unsigned int * data, const size_t stride, const size_t n); int gsl_permute_uint_inverse (const size_t * p, unsigned int * data, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_PERMUTE_UINT_H__ */ gsl/permutation/gsl_permute_vector_short.h0000644000175000017500000000270213536674414017602 0ustar eddedd/* permutation/gsl_permute_vector_short.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_VECTOR_SHORT_H__ #define __GSL_PERMUTE_VECTOR_SHORT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_vector_short (const gsl_permutation * p, gsl_vector_short * v); int gsl_permute_vector_short_inverse (const gsl_permutation * p, gsl_vector_short * v); __END_DECLS #endif /* __GSL_PERMUTE_VECTOR_SHORT_H__ */ gsl/permutation/gsl_permute_vector_complex_float.h0000644000175000017500000000301213536674414021272 0ustar eddedd/* permutation/gsl_permute_vector_complex_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_VECTOR_COMPLEX_FLOAT_H__ #define __GSL_PERMUTE_VECTOR_COMPLEX_FLOAT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_vector_complex_float (const gsl_permutation * p, gsl_vector_complex_float * v); int gsl_permute_vector_complex_float_inverse (const gsl_permutation * p, gsl_vector_complex_float * v); __END_DECLS #endif /* __GSL_PERMUTE_VECTOR_COMPLEX_FLOAT_H__ */ gsl/permutation/gsl_permute_vector_ushort.h0000644000175000017500000000271313536674414017771 0ustar eddedd/* permutation/gsl_permute_vector_ushort.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_VECTOR_USHORT_H__ #define __GSL_PERMUTE_VECTOR_USHORT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_vector_ushort (const gsl_permutation * p, gsl_vector_ushort * v); int gsl_permute_vector_ushort_inverse (const gsl_permutation * p, gsl_vector_ushort * v); __END_DECLS #endif /* __GSL_PERMUTE_VECTOR_USHORT_H__ */ gsl/permutation/gsl_permute_vector_double.h0000644000175000017500000000265713536674414017726 0ustar eddedd/* permutation/gsl_permute_vector_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_VECTOR_DOUBLE_H__ #define __GSL_PERMUTE_VECTOR_DOUBLE_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_vector (const gsl_permutation * p, gsl_vector * v); int gsl_permute_vector_inverse (const gsl_permutation * p, gsl_vector * v); __END_DECLS #endif /* __GSL_PERMUTE_VECTOR_DOUBLE_H__ */ gsl/permutation/init.c0000644000175000017500000000425413536674414013415 0ustar eddedd/* permutation/init.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include gsl_permutation * gsl_permutation_alloc (const size_t n) { gsl_permutation * p; if (n == 0) { GSL_ERROR_VAL ("permutation length n must be positive integer", GSL_EDOM, 0); } p = (gsl_permutation *) malloc (sizeof (gsl_permutation)); if (p == 0) { GSL_ERROR_VAL ("failed to allocate space for permutation struct", GSL_ENOMEM, 0); } p->data = (size_t *) malloc (n * sizeof (size_t)); if (p->data == 0) { free (p); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for permutation data", GSL_ENOMEM, 0); } p->size = n; return p; } gsl_permutation * gsl_permutation_calloc (const size_t n) { size_t i; gsl_permutation * p = gsl_permutation_alloc (n); if (p == 0) return 0; /* initialize permutation to identity */ for (i = 0; i < n; i++) { p->data[i] = i; } return p; } void gsl_permutation_init (gsl_permutation * p) { const size_t n = p->size ; size_t i; /* initialize permutation to identity */ for (i = 0; i < n; i++) { p->data[i] = i; } } void gsl_permutation_free (gsl_permutation * p) { RETURN_IF_NULL (p); free (p->data); free (p); } gsl/permutation/gsl_permute_matrix_int.h0000644000175000017500000000250013536674414017233 0ustar eddedd/* permutation/gsl_permute_matrix_int.h * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_MATRIX_INT_H__ #define __GSL_PERMUTE_MATRIX_INT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_matrix_int (const gsl_permutation * p, gsl_matrix_int * A); __END_DECLS #endif /* __GSL_PERMUTE_MATRIX_INT_H__ */ gsl/permutation/permute_source.c0000644000175000017500000001051113536674414015504 0ustar eddedd/* permutation/permute_source.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* In-place Permutations permute: OUT[i] = IN[perm[i]] i = 0 .. N-1 invpermute: OUT[perm[i]] = IN[i] i = 0 .. N-1 PERM is an index map, i.e. a vector which contains a permutation of the integers 0 .. N-1. From Knuth "Sorting and Searching", Volume 3 (3rd ed), Section 5.2 Exercise 10 (answers), p 617 FIXME: these have not been fully tested. */ int TYPE (gsl_permute) (const size_t * p, ATOMIC * data, const size_t stride, const size_t n) { size_t i, k, pk; for (i = 0; i < n; i++) { k = p[i]; while (k > i) k = p[k]; if (k < i) continue ; /* Now have k == i, i.e the least in its cycle */ pk = p[k]; if (pk == i) continue ; /* shuffle the elements of the cycle */ { unsigned int a; ATOMIC t[MULTIPLICITY]; for (a = 0; a < MULTIPLICITY; a++) t[a] = data[i*stride*MULTIPLICITY + a]; while (pk != i) { for (a = 0; a < MULTIPLICITY; a++) { ATOMIC r1 = data[pk*stride*MULTIPLICITY + a]; data[k*stride*MULTIPLICITY + a] = r1; } k = pk; pk = p[k]; }; for (a = 0; a < MULTIPLICITY; a++) data[k*stride*MULTIPLICITY + a] = t[a]; } } return GSL_SUCCESS; } int FUNCTION (gsl_permute,inverse) (const size_t * p, ATOMIC * data, const size_t stride, const size_t n) { size_t i, k, pk; for (i = 0; i < n; i++) { k = p[i]; while (k > i) k = p[k]; if (k < i) continue ; /* Now have k == i, i.e the least in its cycle */ pk = p[k]; if (pk == i) continue ; /* shuffle the elements of the cycle in the inverse direction */ { unsigned int a; ATOMIC t[MULTIPLICITY]; for (a = 0; a < MULTIPLICITY; a++) t[a] = data[k*stride*MULTIPLICITY+a]; while (pk != i) { for (a = 0; a < MULTIPLICITY; a++) { ATOMIC r1 = data[pk*stride*MULTIPLICITY + a]; data[pk*stride*MULTIPLICITY + a] = t[a]; t[a] = r1; } k = pk; pk = p[k]; }; for (a = 0; a < MULTIPLICITY; a++) data[pk*stride*MULTIPLICITY+a] = t[a]; } } return GSL_SUCCESS; } int TYPE (gsl_permute_vector) (const gsl_permutation * p, TYPE (gsl_vector) * v) { if (v->size != p->size) { GSL_ERROR ("vector and permutation must be the same length", GSL_EBADLEN); } TYPE (gsl_permute) (p->data, v->data, v->stride, v->size) ; return GSL_SUCCESS; } int FUNCTION (gsl_permute_vector,inverse) (const gsl_permutation * p, TYPE (gsl_vector) * v) { if (v->size != p->size) { GSL_ERROR ("vector and permutation must be the same length", GSL_EBADLEN); } FUNCTION (gsl_permute,inverse) (p->data, v->data, v->stride, v->size) ; return GSL_SUCCESS; } int TYPE (gsl_permute_matrix) (const gsl_permutation * p, TYPE (gsl_matrix) * A) { if (A->size2 != p->size) { GSL_ERROR ("matrix columns and permutation must be the same length", GSL_EBADLEN); } else { size_t i; for (i = 0; i < A->size1; ++i) { QUALIFIED_VIEW (gsl_vector, view) r = FUNCTION (gsl_matrix, row) (A, i); TYPE (gsl_permute_vector) (p, &r.vector); } return GSL_SUCCESS; } } gsl/permutation/gsl_permute_matrix_char.h0000644000175000017500000000250713536674414017365 0ustar eddedd/* permutation/gsl_permute_matrix_char.h * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_MATRIX_CHAR_H__ #define __GSL_PERMUTE_MATRIX_CHAR_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_matrix_char (const gsl_permutation * p, gsl_matrix_char * A); __END_DECLS #endif /* __GSL_PERMUTE_MATRIX_CHAR_H__ */ gsl/permutation/gsl_permute_matrix_complex_double.h0000644000175000017500000000257713536674414021460 0ustar eddedd/* permutation/gsl_permute_matrix_complex_double.h * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_MATRIX_COMPLEX_DOUBLE_H__ #define __GSL_PERMUTE_MATRIX_COMPLEX_DOUBLE_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_matrix_complex (const gsl_permutation * p, gsl_matrix_complex * A); __END_DECLS #endif /* __GSL_PERMUTE_MATRIX_COMPLEX_DOUBLE_H__ */ gsl/permutation/gsl_permute_vector_long_double.h0000644000175000017500000000277013536674414020741 0ustar eddedd/* permutation/gsl_permute_vector_long_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_VECTOR_LONG_DOUBLE_H__ #define __GSL_PERMUTE_VECTOR_LONG_DOUBLE_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_vector_long_double (const gsl_permutation * p, gsl_vector_long_double * v); int gsl_permute_vector_long_double_inverse (const gsl_permutation * p, gsl_vector_long_double * v); __END_DECLS #endif /* __GSL_PERMUTE_VECTOR_LONG_DOUBLE_H__ */ gsl/permutation/gsl_permute_vector_complex_long_double.h0000644000175000017500000000310013536674414022454 0ustar eddedd/* permutation/gsl_permute_vector_complex_long_double.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_VECTOR_COMPLEX_LONG_DOUBLE_H__ #define __GSL_PERMUTE_VECTOR_COMPLEX_LONG_DOUBLE_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_vector_complex_long_double (const gsl_permutation * p, gsl_vector_complex_long_double * v); int gsl_permute_vector_complex_long_double_inverse (const gsl_permutation * p, gsl_vector_complex_long_double * v); __END_DECLS #endif /* __GSL_PERMUTE_VECTOR_COMPLEX_LONG_DOUBLE_H__ */ gsl/permutation/test.c0000644000175000017500000002340413536674414013427 0ustar eddedd/* permutation/test.c * * Copyright (C) 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include unsigned int p5[120][5] = { {0, 1, 2, 3, 4}, {0, 1, 2, 4, 3}, {0, 1, 3, 2, 4}, {0, 1, 3, 4, 2}, {0, 1, 4, 2, 3}, {0, 1, 4, 3, 2}, {0, 2, 1, 3, 4}, {0, 2, 1, 4, 3}, {0, 2, 3, 1, 4}, {0, 2, 3, 4, 1}, {0, 2, 4, 1, 3}, {0, 2, 4, 3, 1}, {0, 3, 1, 2, 4}, {0, 3, 1, 4, 2}, {0, 3, 2, 1, 4}, {0, 3, 2, 4, 1}, {0, 3, 4, 1, 2}, {0, 3, 4, 2, 1}, {0, 4, 1, 2, 3}, {0, 4, 1, 3, 2}, {0, 4, 2, 1, 3}, {0, 4, 2, 3, 1}, {0, 4, 3, 1, 2}, {0, 4, 3, 2, 1}, {1, 0, 2, 3, 4}, {1, 0, 2, 4, 3}, {1, 0, 3, 2, 4}, {1, 0, 3, 4, 2}, {1, 0, 4, 2, 3}, {1, 0, 4, 3, 2}, {1, 2, 0, 3, 4}, {1, 2, 0, 4, 3}, {1, 2, 3, 0, 4}, {1, 2, 3, 4, 0}, {1, 2, 4, 0, 3}, {1, 2, 4, 3, 0}, {1, 3, 0, 2, 4}, {1, 3, 0, 4, 2}, {1, 3, 2, 0, 4}, {1, 3, 2, 4, 0}, {1, 3, 4, 0, 2}, {1, 3, 4, 2, 0}, {1, 4, 0, 2, 3}, {1, 4, 0, 3, 2}, {1, 4, 2, 0, 3}, {1, 4, 2, 3, 0}, {1, 4, 3, 0, 2}, {1, 4, 3, 2, 0}, {2, 0, 1, 3, 4}, {2, 0, 1, 4, 3}, {2, 0, 3, 1, 4}, {2, 0, 3, 4, 1}, {2, 0, 4, 1, 3}, {2, 0, 4, 3, 1}, {2, 1, 0, 3, 4}, {2, 1, 0, 4, 3}, {2, 1, 3, 0, 4}, {2, 1, 3, 4, 0}, {2, 1, 4, 0, 3}, {2, 1, 4, 3, 0}, {2, 3, 0, 1, 4}, {2, 3, 0, 4, 1}, {2, 3, 1, 0, 4}, {2, 3, 1, 4, 0}, {2, 3, 4, 0, 1}, {2, 3, 4, 1, 0}, {2, 4, 0, 1, 3}, {2, 4, 0, 3, 1}, {2, 4, 1, 0, 3}, {2, 4, 1, 3, 0}, {2, 4, 3, 0, 1}, {2, 4, 3, 1, 0}, {3, 0, 1, 2, 4}, {3, 0, 1, 4, 2}, {3, 0, 2, 1, 4}, {3, 0, 2, 4, 1}, {3, 0, 4, 1, 2}, {3, 0, 4, 2, 1}, {3, 1, 0, 2, 4}, {3, 1, 0, 4, 2}, {3, 1, 2, 0, 4}, {3, 1, 2, 4, 0}, {3, 1, 4, 0, 2}, {3, 1, 4, 2, 0}, {3, 2, 0, 1, 4}, {3, 2, 0, 4, 1}, {3, 2, 1, 0, 4}, {3, 2, 1, 4, 0}, {3, 2, 4, 0, 1}, {3, 2, 4, 1, 0}, {3, 4, 0, 1, 2}, {3, 4, 0, 2, 1}, {3, 4, 1, 0, 2}, {3, 4, 1, 2, 0}, {3, 4, 2, 0, 1}, {3, 4, 2, 1, 0}, {4, 0, 1, 2, 3}, {4, 0, 1, 3, 2}, {4, 0, 2, 1, 3}, {4, 0, 2, 3, 1}, {4, 0, 3, 1, 2}, {4, 0, 3, 2, 1}, {4, 1, 0, 2, 3}, {4, 1, 0, 3, 2}, {4, 1, 2, 0, 3}, {4, 1, 2, 3, 0}, {4, 1, 3, 0, 2}, {4, 1, 3, 2, 0}, {4, 2, 0, 1, 3}, {4, 2, 0, 3, 1}, {4, 2, 1, 0, 3}, {4, 2, 1, 3, 0}, {4, 2, 3, 0, 1}, {4, 2, 3, 1, 0}, {4, 3, 0, 1, 2}, {4, 3, 0, 2, 1}, {4, 3, 1, 0, 2}, {4, 3, 1, 2, 0}, {4, 3, 2, 0, 1}, {4, 3, 2, 1, 0} } ; unsigned int c5[120][5] = { {4, 3, 2, 1, 0}, {3, 4, 2, 1, 0}, {4, 2, 3, 1, 0}, {2, 3, 4, 1, 0}, {2, 4, 3, 1, 0}, {3, 2, 4, 1, 0}, {4, 3, 1, 2, 0}, {3, 4, 1, 2, 0}, {4, 1, 2, 3, 0}, {1, 2, 3, 4, 0}, {1, 2, 4, 3, 0}, {3, 1, 2, 4, 0}, {4, 1, 3, 2, 0}, {1, 3, 4, 2, 0}, {4, 2, 1, 3, 0}, {2, 1, 3, 4, 0}, {2, 4, 1, 3, 0}, {1, 3, 2, 4, 0}, {1, 4, 3, 2, 0}, {3, 1, 4, 2, 0}, {2, 1, 4, 3, 0}, {3, 2, 1, 4, 0}, {1, 4, 2, 3, 0}, {2, 3, 1, 4, 0}, {4, 3, 2, 0, 1}, {3, 4, 2, 0, 1}, {4, 2, 3, 0, 1}, {2, 3, 4, 0, 1}, {2, 4, 3, 0, 1}, {3, 2, 4, 0, 1}, {4, 3, 0, 1, 2}, {3, 4, 0, 1, 2}, {4, 0, 1, 2, 3}, {0, 1, 2, 3, 4}, {0, 1, 2, 4, 3}, {3, 0, 1, 2, 4}, {4, 0, 1, 3, 2}, {0, 1, 3, 4, 2}, {4, 2, 0, 1, 3}, {2, 0, 1, 3, 4}, {2, 4, 0, 1, 3}, {0, 1, 3, 2, 4}, {0, 1, 4, 3, 2}, {3, 0, 1, 4, 2}, {2, 0, 1, 4, 3}, {3, 2, 0, 1, 4}, {0, 1, 4, 2, 3}, {2, 3, 0, 1, 4}, {4, 3, 0, 2, 1}, {3, 4, 0, 2, 1}, {4, 0, 2, 3, 1}, {0, 2, 3, 4, 1}, {0, 2, 4, 3, 1}, {3, 0, 2, 4, 1}, {4, 3, 1, 0, 2}, {3, 4, 1, 0, 2}, {4, 1, 0, 2, 3}, {1, 0, 2, 3, 4}, {1, 0, 2, 4, 3}, {3, 1, 0, 2, 4}, {4, 1, 3, 0, 2}, {1, 3, 4, 0, 2}, {4, 0, 2, 1, 3}, {0, 2, 1, 3, 4}, {0, 2, 4, 1, 3}, {1, 3, 0, 2, 4}, {1, 4, 3, 0, 2}, {3, 1, 4, 0, 2}, {0, 2, 1, 4, 3}, {3, 0, 2, 1, 4}, {1, 4, 0, 2, 3}, {0, 2, 3, 1, 4}, {4, 0, 3, 2, 1}, {0, 3, 4, 2, 1}, {4, 2, 0, 3, 1}, {2, 0, 3, 4, 1}, {2, 4, 0, 3, 1}, {0, 3, 2, 4, 1}, {4, 1, 0, 3, 2}, {1, 0, 3, 4, 2}, {4, 2, 1, 0, 3}, {2, 1, 0, 3, 4}, {2, 4, 1, 0, 3}, {1, 0, 3, 2, 4}, {4, 0, 3, 1, 2}, {0, 3, 4, 1, 2}, {4, 1, 2, 0, 3}, {1, 2, 0, 3, 4}, {1, 2, 4, 0, 3}, {0, 3, 1, 2, 4}, {0, 3, 1, 4, 2}, {1, 4, 0, 3, 2}, {1, 4, 2, 0, 3}, {0, 3, 2, 1, 4}, {2, 1, 4, 0, 3}, {2, 0, 3, 1, 4}, {0, 4, 3, 2, 1}, {3, 0, 4, 2, 1}, {2, 0, 4, 3, 1}, {3, 2, 0, 4, 1}, {0, 4, 2, 3, 1}, {2, 3, 0, 4, 1}, {1, 0, 4, 3, 2}, {3, 1, 0, 4, 2}, {2, 1, 0, 4, 3}, {3, 2, 1, 0, 4}, {1, 0, 4, 2, 3}, {2, 3, 1, 0, 4}, {0, 4, 3, 1, 2}, {3, 0, 4, 1, 2}, {1, 2, 0, 4, 3}, {3, 1, 2, 0, 4}, {0, 4, 1, 2, 3}, {1, 2, 3, 0, 4}, {1, 3, 0, 4, 2}, {0, 4, 1, 3, 2}, {0, 4, 2, 1, 3}, {1, 3, 2, 0, 4}, {2, 0, 4, 1, 3}, {2, 1, 3, 0, 4} } ; unsigned int cycles[120] = { 5, 4, 4, 3, 3, 4, 4, 3, 3, 2, 2, 3, 3, 2, 4, 3, 3, 2, 2, 3, 3, 4, 2, 3, 4, 3, 3, 2, 2, 3, 3, 2, 2, 1, 1, 2, 2, 1, 3, 2, 2, 1, 1, 2, 2, 3, 1, 2, 3, 2, 2, 1, 1, 2, 4, 3, 3, 2, 2, 3, 3, 2, 2, 1, 1, 2, 2, 3, 1, 2, 2, 1, 2, 1, 3, 2, 2, 1, 3, 2, 4, 3, 3, 2, 2, 1, 3, 2, 2, 1, 1, 2, 2, 1, 3, 2, 1, 2, 2, 3, 1, 2, 2, 3, 3, 4, 2, 3, 1, 2, 2, 3, 1, 2, 2, 1, 1, 2, 2, 3 } ; unsigned int inversions[120] = { 0, 1, 1, 2, 2, 3, 1, 2, 2, 3, 3, 4, 2, 3, 3, 4, 4, 5, 3, 4, 4, 5, 5, 6, 1, 2, 2, 3, 3, 4, 2, 3, 3, 4, 4, 5, 3, 4, 4, 5, 5, 6, 4, 5, 5, 6, 6, 7, 2, 3, 3, 4, 4, 5, 3, 4, 4, 5, 5, 6, 4, 5, 5, 6, 6, 7, 5, 6, 6, 7, 7, 8, 3, 4, 4, 5, 5, 6, 4, 5, 5, 6, 6, 7, 5, 6, 6, 7, 7, 8, 6, 7, 7, 8, 8, 9, 4, 5, 5, 6, 6, 7, 5, 6, 6, 7, 7, 8, 6, 7, 7, 8, 8, 9, 7, 8, 8, 9, 9, 10 } ; int main (void) { gsl_ieee_env_setup (); { int i = 0, j, status = 0; gsl_permutation * p ; p = gsl_permutation_alloc (5); gsl_permutation_init (p); do { for (j = 0; j < 5; j++) { status |= (p->data[j] != p5[i][j]); } i++; } while (gsl_permutation_next(p) == GSL_SUCCESS); gsl_test(status, "gsl_permutation_next, 5-th order permutation, 120 steps"); do { i--; for (j = 0; j < 5; j++) { status |= (p->data[j] != p5[i][j]); } } while (gsl_permutation_prev(p) == GSL_SUCCESS); gsl_test(status, "gsl_permutation_prev, 5-th order permutation, 120 steps"); gsl_permutation_free (p); } #ifdef JUNK { int i; int status = 0 ; gsl_permutation * p1 = gsl_permutation_alloc (5); gsl_permutation * p2 = gsl_permutation_alloc (5); gsl_permutation * p = gsl_permutation_alloc (5); double v[5] = { 100.0, 101.0, 102.0, 103.0, 104.0 } ; gsl_permutation_init (p1); do { gsl_permutation_init (p2); do { double x[5], y[5]; /* Compute x= p1 p2 v */ memcpy (x, v, 5 * sizeof(double)); gsl_permute (p2->data, x, 1, 5); gsl_permute (p1->data, x, 1, 5); /* Compute P= p1 p2, y = P v */ gsl_permutation_mul (p, p1, p2); memcpy (y, v, 5 * sizeof(double)); gsl_permute (p->data, y, 1, 5); for (i = 0; i < 5; i++) { if (x[i] != y[i]) status = 1; } if (status == 1) break; } while (gsl_permutation_next(p2) == GSL_SUCCESS); if (status == 1) break; } while (gsl_permutation_next(p1) == GSL_SUCCESS); gsl_permutation_free (p1); gsl_permutation_free (p2); gsl_permutation_free (p); gsl_test(status, "gsl_permutation_mul, all 5-th order combinations"); } #endif /* testing cycles representations */ { int i = 0, j, status = 0; gsl_permutation * p = gsl_permutation_alloc (5); gsl_permutation * plin = gsl_permutation_alloc (5); gsl_permutation * pcan = gsl_permutation_alloc (5); gsl_permutation_init (p); do { gsl_permutation_memcpy (plin, p); for (j = 0; j < 5; j++) { pcan->data[j] = 0; } gsl_permutation_linear_to_canonical (pcan, plin); for (j = 0; j < 5; j++) { status |= (pcan->data[j] != c5[i][j]); } status |= (gsl_permutation_canonical_cycles (pcan) != cycles[i]); status |= (gsl_permutation_linear_cycles (plin) != cycles[i]); for (j = 0; j < 5; j++) { plin->data[j] = 0; } gsl_permutation_canonical_to_linear (plin, pcan); for (j = 0; j < 5; j++) { status |= (plin->data[j] != p5[i][j]); } i++; } while (gsl_permutation_next(p) == GSL_SUCCESS); gsl_permutation_free (p); gsl_permutation_free (plin); gsl_permutation_free (pcan); gsl_test (status, "gsl_permutation canonical conversion, 5-th order permutation, 120 steps"); } /* testing number of inversions */ { int i = 0, status = 0; gsl_permutation * p = gsl_permutation_alloc (5); gsl_permutation_init (p); do { status |= gsl_permutation_inversions (p) != inversions[i]; i++; } while (gsl_permutation_next(p) == GSL_SUCCESS); gsl_permutation_free (p); gsl_test (status, "gsl_permutation_inversions, 5-th order permutation, 120 steps"); } exit (gsl_test_summary()); } gsl/permutation/gsl_permute_vector_uchar.h0000644000175000017500000000270213536674414017545 0ustar eddedd/* permutation/gsl_permute_vector_uchar.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_VECTOR_UCHAR_H__ #define __GSL_PERMUTE_VECTOR_UCHAR_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_vector_uchar (const gsl_permutation * p, gsl_vector_uchar * v); int gsl_permute_vector_uchar_inverse (const gsl_permutation * p, gsl_vector_uchar * v); __END_DECLS #endif /* __GSL_PERMUTE_VECTOR_UCHAR_H__ */ gsl/permutation/gsl_permute_float.h0000644000175000017500000000263613536674414016174 0ustar eddedd/* permutation/gsl_permute_float.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_FLOAT_H__ #define __GSL_PERMUTE_FLOAT_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_float (const size_t * p, float * data, const size_t stride, const size_t n); int gsl_permute_float_inverse (const size_t * p, float * data, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_PERMUTE_FLOAT_H__ */ gsl/permutation/gsl_permute_int.h0000644000175000017500000000261613536674414015657 0ustar eddedd/* permutation/gsl_permute_int.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_INT_H__ #define __GSL_PERMUTE_INT_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_int (const size_t * p, int * data, const size_t stride, const size_t n); int gsl_permute_int_inverse (const size_t * p, int * data, const size_t stride, const size_t n); __END_DECLS #endif /* __GSL_PERMUTE_INT_H__ */ gsl/permutation/file.c0000644000175000017500000000463113536674414013370 0ustar eddedd/* permutation/file.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #define IN_FORMAT "%lu" int gsl_permutation_fread (FILE * stream, gsl_permutation * p) { size_t n = p->size ; size_t * data = p->data ; size_t items = fread (data, sizeof (size_t), n, stream); if (items != n) { GSL_ERROR ("fread failed", GSL_EFAILED); } return GSL_SUCCESS; } int gsl_permutation_fwrite (FILE * stream, const gsl_permutation * p) { size_t n = p->size ; size_t * data = p->data ; size_t items = fwrite (data, sizeof (size_t), n, stream); if (items != n) { GSL_ERROR ("fwrite failed", GSL_EFAILED); } return GSL_SUCCESS; } int gsl_permutation_fprintf (FILE * stream, const gsl_permutation * p, const char *format) { size_t n = p->size ; size_t * data = p->data ; size_t i; for (i = 0; i < n; i++) { int status = fprintf (stream, format, data[i]); if (status < 0) { GSL_ERROR ("fprintf failed", GSL_EFAILED); } } return GSL_SUCCESS; } int gsl_permutation_fscanf (FILE * stream, gsl_permutation * p) { size_t n = p->size ; size_t * data = p->data ; size_t i; for (i = 0; i < n; i++) { unsigned long j ; /* FIXME: what if size_t != unsigned long ??? want read in size_t but have to read in unsigned long to avoid error from compiler */ int status = fscanf (stream, IN_FORMAT, &j); if (status != 1) { GSL_ERROR ("fscanf failed", GSL_EFAILED); } data[i] = j; } return GSL_SUCCESS; } gsl/permutation/gsl_permute_matrix_complex_float.h0000644000175000017500000000260613536674414021304 0ustar eddedd/* permutation/gsl_permute_matrix_complex_float.h * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_MATRIX_COMPLEX_FLOAT_H__ #define __GSL_PERMUTE_MATRIX_COMPLEX_FLOAT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_matrix_complex_float (const gsl_permutation * p, gsl_matrix_complex_float * A); __END_DECLS #endif /* __GSL_PERMUTE_MATRIX_COMPLEX_FLOAT_H__ */ gsl/permutation/canonical.c0000644000175000017500000000703013536674414014374 0ustar eddedd/* permutation/permutation.c * * Copyright (C) 2001, 2002 Nicolas Darnis * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Modified for GSL by Brian Gough. * Use in-place algorithms, no need for workspace * Use conventions for canonical form given in Knuth (opposite of Sedgewick) */ #include #include #include int gsl_permutation_linear_to_canonical (gsl_permutation * q, const gsl_permutation * p) { const size_t n = p->size; size_t i, k, s; size_t t = n; const size_t *const pp = p->data; size_t *const qq = q->data; if (q->size != p->size) { GSL_ERROR ("size of q does not match size of p", GSL_EINVAL); } for (i = 0; i < n; i++) { k = pp[i]; s = 1; while (k > i) { k = pp[k]; s++; } if (k < i) continue; /* Now have k == i, i.e the least in its cycle, and s == cycle length */ t -= s; qq[t] = i; k = pp[i]; s = 1; while (k > i) { qq[t + s] = k; k = pp[k]; s++; } if (t == 0) break; } return GSL_SUCCESS; } int gsl_permutation_canonical_to_linear (gsl_permutation * p, const gsl_permutation * q) { size_t i, k, kk, first; const size_t n = p->size; size_t *const pp = p->data; const size_t *const qq = q->data; if (q->size != p->size) { GSL_ERROR ("size of q does not match size of p", GSL_EINVAL); } for (i = 0; i < n; i++) { pp[i] = i; } k = qq[0]; first = pp[k]; for (i = 1; i < n; i++) { kk = qq[i]; if (kk > first) { pp[k] = pp[kk]; k = kk; } else { pp[k] = first; k = kk; first = pp[kk]; } } pp[k] = first; return GSL_SUCCESS; } size_t gsl_permutation_inversions (const gsl_permutation * p) { size_t count = 0; size_t i, j; const size_t size = p->size; for (i = 0; i < size - 1; i++) { for (j = i + 1; j < size; j++) { if (p->data[i] > p->data[j]) { count++; } } } return count; } size_t gsl_permutation_linear_cycles (const gsl_permutation * p) { size_t i, k; size_t count = 0; const size_t size = p->size; for (i = 0; i < size; i++) { k = p->data[i]; while (k > i) { k = p->data[k]; } if (k < i) continue; count++; } return count; } size_t gsl_permutation_canonical_cycles (const gsl_permutation * p) { size_t i; size_t count = 1; size_t min = p->data[0]; for (i = 0; i < p->size; i++) { if (p->data[i] < min) { min = p->data[i]; count++; } } return count; } gsl/permutation/gsl_permute_matrix_ushort.h0000644000175000017500000000252513536674414017774 0ustar eddedd/* permutation/gsl_permute_matrix_ushort.h * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_PERMUTE_MATRIX_USHORT_H__ #define __GSL_PERMUTE_MATRIX_USHORT_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_permute_matrix_ushort (const gsl_permutation * p, gsl_matrix_ushort * A); __END_DECLS #endif /* __GSL_PERMUTE_MATRIX_USHORT_H__ */ gsl/gsl_inline.h0000664000175000017500000000465514057135461012233 0ustar eddedd/* gsl_inline.h * * Copyright (C) 2008, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_INLINE_H__ #define __GSL_INLINE_H__ /* In recent versiions of GCC, the inline keyword has two different forms: GNU and C99. In GNU mode we can use 'extern inline' to make inline functions work like macros. The function is only inlined--it is never output as a definition in an object file. In the new C99 mode 'extern inline' has a different meaning--it causes the definition of the function to be output in each object file where it is used. This will result in multiple-definition errors on linking. The 'inline' keyword on its own (without extern) has the same behavior as the original GNU 'extern inline'. The C99 style is the default with -std=c99 in GCC 4.3. This header file allows either form of inline to be used by redefining the macros INLINE_DECL and INLINE_FUN. These are used in the public header files as INLINE_DECL double gsl_foo (double x); #ifdef HAVE_INLINE INLINE_FUN double gsl_foo (double x) { return x+1.0; } ; #endif */ #ifdef HAVE_INLINE # if defined(__GNUC_STDC_INLINE__) || defined(GSL_C99_INLINE) || defined(HAVE_C99_INLINE) # define INLINE_DECL inline /* use C99 inline */ # define INLINE_FUN inline # else # define INLINE_DECL /* use GNU extern inline */ # define INLINE_FUN extern inline # endif #else # define INLINE_DECL /* */ #endif /* Range checking conditions in headers do not require any run-time tests of the global variable gsl_check_range. They are enabled or disabled in user code at compile time with GSL_RANGE_CHECK macro. See also build.h. */ #define GSL_RANGE_COND(x) (x) #endif /* __GSL_INLINE_H__ */ gsl/gsl-histogram.c0000644000175000017500000000364013536675317012664 0ustar eddedd/* histogram/gsl-histogram.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include int main (int argc, char **argv) { double a = 0.0, b = 1.0; size_t n = 10; if (argc != 3 && argc !=4) { printf ("Usage: gsl-histogram xmin xmax [n]\n"); printf ( "Computes a histogram of the data on stdin using n bins from xmin to xmax.\n" "If n is unspecified then bins of integer width are used.\n"); exit (0); } a = atof (argv[1]); b = atof (argv[2]); if (argc == 4) { n = atoi (argv[3]); } else { n = (int)(b - a) ; } { double x; gsl_histogram *h = gsl_histogram_alloc (n); gsl_histogram_set_ranges_uniform (h, a, b); while (fscanf(stdin, "%lg", &x) == 1) { gsl_histogram_increment(h, x); } #ifdef DISPLAY_STATS { double mean = gsl_histogram_mean (h); double sigma = gsl_histogram_sigma (h); fprintf (stdout, "# mean = %g\n", mean); fprintf (stdout, "# sigma = %g\n", sigma); } #endif gsl_histogram_fprintf (stdout, h, "%g", "%g"); gsl_histogram_free (h); } return 0; } gsl/gsl_version.h.in0000644000175000017500000000076413536674414013051 0ustar eddedd#ifndef __GSL_VERSION_H__ #define __GSL_VERSION_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS #define GSL_VERSION "@VERSION@" #define GSL_MAJOR_VERSION @GSL_MAJOR_VERSION@ #define GSL_MINOR_VERSION @GSL_MINOR_VERSION@ GSL_VAR const char * gsl_version; __END_DECLS #endif /* __GSL_VERSION_H__ */ gsl/ntuple/0000755000175000017500000000000014057135461011232 5ustar eddeddgsl/ntuple/Makefile.in0000664000175000017500000010620714057135461013307 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = ntuple ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslntuple_la_LIBADD = am_libgslntuple_la_OBJECTS = ntuple.lo libgslntuple_la_OBJECTS = $(am_libgslntuple_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslntuple.la ../histogram/libgslhistogram.la \ ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/ntuple.Plo ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslntuple_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslntuple_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslntuple.la pkginclude_HEADERS = gsl_ntuple.h AM_CPPFLAGS = -I$(top_srcdir) libgslntuple_la_SOURCES = ntuple.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslntuple.la ../histogram/libgslhistogram.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la #demo_SOURCES = demo.c #demo_LDADD = libgslntuple.la ../histogram/libgslhistogram.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la #demo1_SOURCES = demo1.c #demo1_LDADD = libgslntuple.la ../histogram/libgslhistogram.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la CLEANFILES = test.dat all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ntuple/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ntuple/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslntuple.la: $(libgslntuple_la_OBJECTS) $(libgslntuple_la_DEPENDENCIES) $(EXTRA_libgslntuple_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslntuple_la_OBJECTS) $(libgslntuple_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntuple.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/ntuple.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/ntuple.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/ntuple/ntuple.c0000644000175000017500000001047113536674414012717 0ustar eddedd/* histogram/ntuple.c * * Copyright (C) 2000 Simone Piccardi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Jan/2001 Modified by Brian Gough. Minor changes for GSL */ #include #include #include #include /* * gsl_ntuple_open: * Initialize an ntuple structure and create the related file */ gsl_ntuple * gsl_ntuple_create (char *filename, void *ntuple_data, size_t size) { gsl_ntuple *ntuple = (gsl_ntuple *)malloc (sizeof (gsl_ntuple)); if (ntuple == 0) { GSL_ERROR_VAL ("failed to allocate space for ntuple struct", GSL_ENOMEM, 0); } ntuple->ntuple_data = ntuple_data; ntuple->size = size; ntuple->file = fopen (filename, "wb"); if (ntuple->file == 0) { free (ntuple); GSL_ERROR_VAL ("unable to create ntuple file", GSL_EFAILED, 0); } return ntuple; } /* * gsl_ntuple_open: * Initialize an ntuple structure and open the related file */ gsl_ntuple * gsl_ntuple_open (char *filename, void *ntuple_data, size_t size) { gsl_ntuple *ntuple = (gsl_ntuple *)malloc (sizeof (gsl_ntuple)); if (ntuple == 0) { GSL_ERROR_VAL ("failed to allocate space for ntuple struct", GSL_ENOMEM, 0); } ntuple->ntuple_data = ntuple_data; ntuple->size = size; ntuple->file = fopen (filename, "rb"); if (ntuple->file == 0) { free (ntuple); GSL_ERROR_VAL ("unable to open ntuple file for reading", GSL_EFAILED, 0); } return ntuple; } /* * gsl_ntuple_write: * write to file a data row, must be used in a loop! */ int gsl_ntuple_write (gsl_ntuple * ntuple) { size_t nwrite; nwrite = fwrite (ntuple->ntuple_data, ntuple->size, 1, ntuple->file); if (nwrite != 1) { GSL_ERROR ("failed to write ntuple entry to file", GSL_EFAILED); } return GSL_SUCCESS; } /* the following function is a synonym for gsl_ntuple_write */ int gsl_ntuple_bookdata (gsl_ntuple * ntuple) { return gsl_ntuple_write (ntuple); } /* * gsl_ntuple_read: * read form file a data row, must be used in a loop! */ int gsl_ntuple_read (gsl_ntuple * ntuple) { size_t nread; nread = fread (ntuple->ntuple_data, ntuple->size, 1, ntuple->file); if (nread == 0 && feof(ntuple->file)) { return GSL_EOF; } if (nread != 1) { GSL_ERROR ("failed to read ntuple entry from file", GSL_EFAILED); } return GSL_SUCCESS; } /* * gsl_ntuple_project: * fill an histogram with an ntuple file contents, use * SelVal and SelFunc user defined functions to get * the value to book and the selection funtion */ #define EVAL(f,x) ((*((f)->function))(x,(f)->params)) int gsl_ntuple_project (gsl_histogram * h, gsl_ntuple * ntuple, gsl_ntuple_value_fn * value_func, gsl_ntuple_select_fn * select_func) { size_t nread; do { nread = fread (ntuple->ntuple_data, ntuple->size, 1, ntuple->file); if (nread == 0 && feof(ntuple->file)) { break ; } if (nread != 1) { GSL_ERROR ("failed to read ntuple for projection", GSL_EFAILED); } if (EVAL(select_func, ntuple->ntuple_data)) { gsl_histogram_increment (h, EVAL(value_func, ntuple->ntuple_data)); } } while (1); return GSL_SUCCESS; } /* * gsl_ntuple_close: * close the ntuple file and free the memory */ int gsl_ntuple_close (gsl_ntuple * ntuple) { int status = fclose (ntuple->file); if (status) { GSL_ERROR ("failed to close ntuple file", GSL_EFAILED); } free (ntuple); return GSL_SUCCESS; } gsl/ntuple/ChangeLog0000644000175000017500000000042013536674414013007 0ustar eddedd2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2004-05-30 Brian Gough * ntuple/test.c (main): choose ratio 1/(i+1.5) to avoid values exactly on test cutoff x=0.1 gsl/ntuple/Makefile.am0000644000175000017500000000160713536674414013301 0ustar eddeddnoinst_LTLIBRARIES = libgslntuple.la pkginclude_HEADERS = gsl_ntuple.h AM_CPPFLAGS = -I$(top_srcdir) libgslntuple_la_SOURCES = ntuple.c TESTS = $(check_PROGRAMS) check_PROGRAMS = test #demo demo1 test_SOURCES = test.c test_LDADD = libgslntuple.la ../histogram/libgslhistogram.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la #demo_SOURCES = demo.c #demo_LDADD = libgslntuple.la ../histogram/libgslhistogram.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la #demo1_SOURCES = demo1.c #demo1_LDADD = libgslntuple.la ../histogram/libgslhistogram.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la CLEANFILES = test.dat gsl/ntuple/gsl_ntuple.h0000644000175000017500000000414513536674414013572 0ustar eddedd/* histogram/ntuple.h * * Copyright (C) 2000 Simone Piccardi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ /* Jan/2001 Modified by Brian Gough. Minor changes for GSL */ #ifndef __GSL_NTUPLE_H__ #define __GSL_NTUPLE_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { FILE * file; void * ntuple_data; size_t size; } gsl_ntuple; typedef struct { int (* function) (void * ntuple_data, void * params); void * params; } gsl_ntuple_select_fn; typedef struct { double (* function) (void * ntuple_data, void * params); void * params; } gsl_ntuple_value_fn; gsl_ntuple * gsl_ntuple_open (char * filename, void * ntuple_data, size_t size); gsl_ntuple * gsl_ntuple_create (char * filename, void * ntuple_data, size_t size); int gsl_ntuple_write (gsl_ntuple * ntuple); int gsl_ntuple_read (gsl_ntuple * ntuple); int gsl_ntuple_bookdata (gsl_ntuple * ntuple); /* synonym for write */ int gsl_ntuple_project (gsl_histogram * h, gsl_ntuple * ntuple, gsl_ntuple_value_fn *value_func, gsl_ntuple_select_fn *select_func); int gsl_ntuple_close (gsl_ntuple * ntuple); __END_DECLS #endif /* __GSL_NTUPLE_H__ */ gsl/ntuple/test.c0000644000175000017500000000677013536674414012376 0ustar eddedd#include #include #include #include #include #include struct data { int num; double x; double y; double z; }; int sel_func (void *ntuple_data, void * params); double val_func (void *ntuple_data, void * params); int main (void) { struct data ntuple_row; int i; double x[1000], y[1000], z[1000], f[100]; gsl_ntuple_select_fn S; gsl_ntuple_value_fn V; double scale = 1.5; gsl_ieee_env_setup (); /* zero struct including padding bytes to avoid valgrind errors */ memset(&ntuple_row, 0, sizeof(struct data)); S.function = &sel_func; S.params = &scale; V.function = &val_func; V.params = &scale; { gsl_ntuple *ntuple = gsl_ntuple_create ("test.dat", &ntuple_row, sizeof (ntuple_row)); int status = 0; for (i = 0; i < 100; i++) f[i] = 0; for (i = 0; i < 1000; i++) { double xi = 1.0 / (i + 1.5); double yi = xi * xi ; double zi = xi * xi * xi; ntuple_row.x = xi; ntuple_row.y = yi; ntuple_row.z = zi; ntuple_row.num = i; x[i] = xi; y[i] = yi; z[i] = zi; if (xi * scale < 0.1) { double v = xi + yi + zi; int k = (int)(100.0*v*scale); f[k]++; } /* printf ("x,y,z = %f,%f,%f; n=%x \n", ntuple_row.x, ntuple_row.y, ntuple_row.z, ntuple_row.num); */ { int s = gsl_ntuple_bookdata (ntuple); if (s != GSL_SUCCESS) { status = 1; } } } gsl_ntuple_close (ntuple); gsl_test (status, "writing ntuples"); } { gsl_ntuple *ntuple = gsl_ntuple_open ("test.dat", &ntuple_row, sizeof (ntuple_row)); int status = 0; for (i = 0; i < 1000; i++) { gsl_ntuple_read (ntuple); status = (ntuple_row.num != i); status |= (ntuple_row.x != x[i]); status |= (ntuple_row.y != y[i]); status |= (ntuple_row.z != z[i]); /* printf ("x,y,z = %f,%f,%f; n=%d\n", ntuple_row.x, ntuple_row.y, ntuple_row.z, ntuple_row.num); */ } gsl_ntuple_close (ntuple); gsl_test (status, "reading ntuples"); } { int status = 0; gsl_ntuple *ntuple = gsl_ntuple_open ("test.dat", &ntuple_row, sizeof (ntuple_row)); gsl_histogram *h = gsl_histogram_calloc_uniform (100, 0., 1.); gsl_ntuple_project (h, ntuple, &V, &S); gsl_ntuple_close (ntuple); /* gsl_histogram_fprintf (stdout, h, "%f", "%f"); */ for (i = 0; i < 100; i++) { /* printf ("h %g f %g\n", h->bin[i], f[i]); */ if (h->bin[i] != f[i]) { status = 1; } } gsl_test (status, "histogramming ntuples"); gsl_histogram_free (h); } exit (gsl_test_summary()); } int sel_func (void *ntuple_data, void * params) { double x, y, z, scale; scale = *(double *)params; x = ((struct data *) ntuple_data)->x; y = ((struct data *) ntuple_data)->y; z = ((struct data *) ntuple_data)->z; return (x*scale < 0.1); } double val_func (void *ntuple_data, void * params) { double x, y, z, scale; scale = *(double *)params; x = ((struct data *) ntuple_data)->x; y = ((struct data *) ntuple_data)->y; z = ((struct data *) ntuple_data)->z; return (x + y + z) * scale; } gsl/bspline/0000755000175000017500000000000014057135461011357 5ustar eddeddgsl/bspline/bspline.h0000644000175000017500000000140213536674414013170 0ustar eddeddstatic inline size_t bspline_find_interval (const double x, int *flag, gsl_bspline_workspace * w); static inline int bspline_process_interval_for_eval (const double x, size_t * i, int flag, gsl_bspline_workspace * w); static void bspline_pppack_bsplvb (const gsl_vector * t, const size_t jhigh, const size_t index, const double x, const size_t left, size_t * j, gsl_vector * deltal, gsl_vector * deltar, gsl_vector * biatx); static void bspline_pppack_bsplvd (const gsl_vector * t, const size_t k, const double x, const size_t left, gsl_vector * deltal, gsl_vector * deltar, gsl_matrix * a, gsl_matrix * dbiatx, const size_t nderiv); gsl/bspline/greville.c0000644000175000017500000001370713536674414013353 0ustar eddedd/* bspline/greville.c * * Copyright (C) 2006, 2007, 2008, 2009 Patrick Alken * Copyright (C) 2008, 2011 Rhys Ulerich * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include /* Return the location of the i-th Greville abscissa */ double gsl_bspline_greville_abscissa (size_t i, gsl_bspline_workspace *w) { const size_t stride = w->knots->stride; size_t km1 = w->km1; double * data = w->knots->data + (i+1)*stride; #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= gsl_bspline_ncoeffs(w))) { GSL_ERROR_VAL ("Greville abscissa index out of range", GSL_EINVAL, 0); } #endif if (km1 == 0) { /* Return interval midpoints in degenerate k = 1 case*/ km1 = 2; data -= stride; } return gsl_stats_mean(data, stride, km1); } int gsl_bspline_knots_greville (const gsl_vector *abscissae, gsl_bspline_workspace *w, double *abserr) { /* Limited function: see https://savannah.gnu.org/bugs/index.php?34361 */ int s; /* Check incoming arguments satisfy mandatory algorithmic assumptions */ if (w->k < 2) GSL_ERROR ("w->k must be at least 2", GSL_EINVAL); else if (abscissae->size < 2) GSL_ERROR ("abscissae->size must be at least 2", GSL_EINVAL); else if (w->nbreak != abscissae->size - w->k + 2) GSL_ERROR ("w->nbreak must equal abscissae->size - w->k + 2", GSL_EINVAL); if (w->nbreak == 2) { /* No flexibility in abscissae values possible in this degenerate case */ s = gsl_bspline_knots_uniform ( gsl_vector_get (abscissae, 0), gsl_vector_get (abscissae, abscissae->size - 1), w); } else { double * storage; gsl_matrix_view A; gsl_vector_view tau, b, x, r; size_t i, j; /* Constants derived from the B-spline workspace and abscissae details */ const size_t km2 = w->k - 2; const size_t M = abscissae->size - 2; const size_t N = w->nbreak - 2; const double invkm1 = 1.0 / w->km1; /* Allocate working storage and prepare multiple, zero-filled views */ storage = (double *) calloc (M*N + 2*N + 2*M, sizeof (double)); if (storage == 0) GSL_ERROR ("failed to allocate working storage", GSL_ENOMEM); A = gsl_matrix_view_array (storage, M, N); tau = gsl_vector_view_array (storage + M*N, N); b = gsl_vector_view_array (storage + M*N + N, M); x = gsl_vector_view_array (storage + M*N + N + M, N); r = gsl_vector_view_array (storage + M*N + N + M + N, M); /* Build matrix from interior breakpoints to interior Greville abscissae. * For example, when w->k = 4 and w->nbreak = 7 the matrix is * [ 1, 0, 0, 0, 0; * 2/3, 1/3, 0, 0, 0; * 1/3, 1/3, 1/3, 0, 0; * 0, 1/3, 1/3, 1/3, 0; * 0, 0, 1/3, 1/3, 1/3; * 0, 0, 0, 1/3, 2/3; * 0, 0, 0, 0, 1 ] * but only center formed as first/last breakpoint is known. */ for (j = 0; j < N; ++j) for (i = 0; i <= km2; ++i) gsl_matrix_set (&A.matrix, i+j, j, invkm1); /* Copy interior collocation points from abscissae into b */ for (i = 0; i < M; ++i) gsl_vector_set (&b.vector, i, gsl_vector_get (abscissae, i+1)); /* Adjust b to account for constraint columns not stored in A */ for (i = 0; i < km2; ++i) { double * const v = gsl_vector_ptr (&b.vector, i); *v -= (1 - (i+1)*invkm1) * gsl_vector_get (abscissae, 0); } for (i = 0; i < km2; ++i) { double * const v = gsl_vector_ptr (&b.vector, M - km2 + i); *v -= (i+1)*invkm1 * gsl_vector_get (abscissae, abscissae->size - 1); } /* Perform linear least squares to determine interior breakpoints */ s = gsl_linalg_QR_decomp (&A.matrix, &tau.vector) || gsl_linalg_QR_lssolve (&A.matrix, &tau.vector, &b.vector, &x.vector, &r.vector); if (s) { free (storage); return s; } /* "Expand" solution x by adding known first and last breakpoints. */ x = gsl_vector_view_array_with_stride ( gsl_vector_ptr (&x.vector, 0) - x.vector.stride, x.vector.stride, x.vector.size + 2); gsl_vector_set (&x.vector, 0, gsl_vector_get (abscissae, 0)); gsl_vector_set (&x.vector, x.vector.size - 1, gsl_vector_get (abscissae, abscissae->size - 1)); /* Finally, initialize workspace knots using the now-known breakpoints */ s = gsl_bspline_knots (&x.vector, w); free (storage); } /* Sum absolute errors in the resulting vs requested interior abscissae */ /* Provided as a fit quality metric which may be monitored by callers */ if (!s && abserr) { size_t i; *abserr = 0; for (i = 1; i < abscissae->size - 1; ++i) *abserr += fabs ( gsl_bspline_greville_abscissa (i, w) - gsl_vector_get (abscissae, i) ); } return s; } gsl/bspline/Makefile.in0000664000175000017500000010646114057135461013436 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = bspline ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslbspline_la_LIBADD = am_libgslbspline_la_OBJECTS = bspline.lo greville.lo libgslbspline_la_OBJECTS = $(am_libgslbspline_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslbspline.la ../linalg/libgsllinalg.la \ ../permutation/libgslpermutation.la ../blas/libgslblas.la \ ../matrix/libgslmatrix.la ../vector/libgslvector.la \ ../block/libgslblock.la ../complex/libgslcomplex.la \ ../cblas/libgslcblas.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la ../statistics/libgslstatistics.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/bspline.Plo ./$(DEPDIR)/greville.Plo \ ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslbspline_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslbspline_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslbspline.la pkginclude_HEADERS = gsl_bspline.h AM_CPPFLAGS = -I$(top_srcdir) libgslbspline_la_SOURCES = bspline.c greville.c noinst_HEADERS = bspline.h TESTS = $(check_PROGRAMS) test_LDADD = libgslbspline.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../cblas/libgslcblas.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../statistics/libgslstatistics.la test_SOURCES = test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bspline/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bspline/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslbspline.la: $(libgslbspline_la_OBJECTS) $(libgslbspline_la_DEPENDENCIES) $(EXTRA_libgslbspline_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslbspline_la_OBJECTS) $(libgslbspline_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bspline.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/greville.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/bspline.Plo -rm -f ./$(DEPDIR)/greville.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/bspline.Plo -rm -f ./$(DEPDIR)/greville.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/bspline/ChangeLog0000644000175000017500000000300513536674414013136 0ustar eddedd2011-09-21 Rhys Ulerich * greville.c (gsl_bspline_knots_greville) Added routine to initialize breakpoints prescribed by specifying the desired Greville abscissae * test.c Add tests for the new gsl_bspline_knots_greville 2011-09-20 Rhys Ulerich * bspline.c (gsl_bspline_greville_abscissa) Greville-related logic moved to greville.c in preparation for upcoming gsl_bspline_knots_greville_abscissae functionality. 2009-08-12 Brian Gough * bspline.c (gsl_bspline_alloc): correct free to gsl_vector_free for components allocated with gsl_vector_alloc (gsl_bspline_deriv_alloc): correct free to gsl_matrix_free for components allocated with gsl_matrix_alloc 2009-07-21 Brian Gough * bspline.c (gsl_bspline_greville_abscissa): added function for greville abscissae 2009-07-09 Brian Gough * bspline.c (gsl_bspline_free): handle NULL argument in free (gsl_bspline_deriv_free): handle NULL argument in free 2008-12-09 Brian Gough * bspline.c (gsl_bspline_deriv_alloc): add size to derivative struct 2008-12-08 Brian Gough * gsl_bspline.h: preserve binary compatibility in workspaces 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2006-11-02 Brian Gough * added test program * initial checkin from P.Alken gsl/bspline/Makefile.am0000644000175000017500000000121313536674414013417 0ustar eddeddnoinst_LTLIBRARIES = libgslbspline.la pkginclude_HEADERS = gsl_bspline.h AM_CPPFLAGS = -I$(top_srcdir) libgslbspline_la_SOURCES = bspline.c greville.c noinst_HEADERS = bspline.h check_PROGRAMS = test TESTS = $(check_PROGRAMS) test_LDADD = libgslbspline.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../cblas/libgslcblas.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../statistics/libgslstatistics.la test_SOURCES = test.c gsl/bspline/TODO0000644000175000017500000000037713536674414012065 0ustar eddedd# -*- org -*- #+CATEGORY: bspline Add functions: gsl_bspline_smooth to fit smoothing splines to data more efficiently than the standard least squares inversion (see pppack l2appr and smooth.spline() from GNU R) + any other useful functions from pppack gsl/bspline/gsl_bspline.h0000644000175000017500000000662113536674414014045 0ustar eddedd/* bspline/gsl_bspline.h * * Copyright (C) 2006 Patrick Alken * Copyright (C) 2008 Rhys Ulerich * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_BSPLINE_H__ #define __GSL_BSPLINE_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { size_t k; /* spline order */ size_t km1; /* k - 1 (polynomial order) */ size_t l; /* number of polynomial pieces on interval */ size_t nbreak; /* number of breakpoints (l + 1) */ size_t n; /* number of bspline basis functions (l + k - 1) */ gsl_vector *knots; /* knots vector */ gsl_vector *deltal; /* left delta */ gsl_vector *deltar; /* right delta */ gsl_vector *B; /* temporary spline results */ /* bspline derivative parameters */ gsl_matrix *A; /* work matrix */ gsl_matrix *dB; /* temporary derivative results */ } gsl_bspline_workspace; gsl_bspline_workspace * gsl_bspline_alloc(const size_t k, const size_t nbreak); void gsl_bspline_free(gsl_bspline_workspace *w); size_t gsl_bspline_ncoeffs(gsl_bspline_workspace * w); size_t gsl_bspline_order(gsl_bspline_workspace * w); size_t gsl_bspline_nbreak(gsl_bspline_workspace * w); double gsl_bspline_breakpoint(size_t i, gsl_bspline_workspace * w); double gsl_bspline_greville_abscissa(size_t i, gsl_bspline_workspace *w); int gsl_bspline_knots(const gsl_vector *breakpts, gsl_bspline_workspace *w); int gsl_bspline_knots_uniform(const double a, const double b, gsl_bspline_workspace *w); int gsl_bspline_knots_greville(const gsl_vector *abscissae, gsl_bspline_workspace *w, double *abserr); int gsl_bspline_eval(const double x, gsl_vector *B, gsl_bspline_workspace *w); int gsl_bspline_eval_nonzero(const double x, gsl_vector *Bk, size_t *istart, size_t *iend, gsl_bspline_workspace *w); int gsl_bspline_deriv_eval(const double x, const size_t nderiv, gsl_matrix *dB, gsl_bspline_workspace *w); int gsl_bspline_deriv_eval_nonzero(const double x, const size_t nderiv, gsl_matrix *dB, size_t *istart, size_t *iend, gsl_bspline_workspace *w); __END_DECLS #endif /* __GSL_BSPLINE_H__ */ gsl/bspline/test.c0000644000175000017500000004440213536674414012515 0ustar eddedd/* bspline/test.c * * Copyright (C) 2006, 2007, 2009 Brian Gough * Copyright (C) 2008, 2011 Rhys Ulerich * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include void test_bspline(gsl_bspline_workspace * bw) { gsl_vector *B; gsl_matrix *dB; size_t i, j; size_t n = 100; size_t ncoeffs = gsl_bspline_ncoeffs(bw); size_t order = gsl_bspline_order(bw); size_t nbreak = gsl_bspline_nbreak(bw); double a = gsl_bspline_breakpoint(0, bw); double b = gsl_bspline_breakpoint(nbreak - 1, bw); B = gsl_vector_alloc(ncoeffs); dB = gsl_matrix_alloc(ncoeffs, 1); /* Ensure B-splines form a partition of unity */ for (i = 0; i < n; i++) { double xi = a + (b - a) * (i / (n - 1.0)); double sum = 0; gsl_bspline_eval(xi, B, bw); for (j = 0; j < ncoeffs; j++) { double Bj = gsl_vector_get(B, j); int s = (Bj < 0 || Bj > 1); gsl_test(s, "basis-spline coefficient %u is in range [0,1] for x=%g", j, xi); sum += Bj; } gsl_test_rel(sum, 1.0, order * GSL_DBL_EPSILON, "basis-spline order %u is normalized for x=%g", order, xi); } /* Ensure B-splines 0th derivatives agree with regular evaluation */ for (i = 0; i < n; i++) { double xi = a + (b - a) * (i / (n - 1.0)); gsl_bspline_eval(xi, B, bw); gsl_bspline_deriv_eval(xi, 0, dB, bw); for (j = 0; j < ncoeffs; j++) { gsl_test_abs(gsl_matrix_get(dB, j, 0), gsl_vector_get(B, j), GSL_DBL_EPSILON, "b-spline order %d basis #%d evaluation and 0th derivative consistent for x=%g", order, j, xi); } } gsl_vector_free(B); gsl_matrix_free(dB); } int main(int argc, char **argv) { size_t order, breakpoints, i; gsl_ieee_env_setup(); argc = 0; /* prevent warnings about unused parameters */ argv = 0; for (order = 1; order < 10; order++) { for (breakpoints = 2; breakpoints < 100; breakpoints++) { double a = -1.23 * order, b = 45.6 * order; gsl_bspline_workspace *bw = gsl_bspline_alloc(order, breakpoints); gsl_bspline_knots_uniform(a, b, bw); test_bspline(bw); gsl_bspline_free(bw); } } for (order = 1; order < 10; order++) { for (breakpoints = 2; breakpoints < 100; breakpoints++) { double a = -1.23 * order, b = 45.6 * order; gsl_bspline_workspace *bw = gsl_bspline_alloc(order, breakpoints); gsl_vector *k = gsl_vector_alloc(breakpoints); for (i = 0; i < breakpoints; i++) { double f, x; f = sqrt(i / (breakpoints - 1.0)); x = (1 - f) * a + f * b; gsl_vector_set(k, i, x); }; gsl_bspline_knots(k, bw); test_bspline(bw); gsl_vector_free(k); gsl_bspline_free(bw); } } /* Spot check known 0th, 1st, 2nd derivative evaluations for a particular k = 2 case. */ { size_t i, j; /* looping */ const double xloc[4] = { 0.0, 1.0, 6.0, 7.0}; const double deriv[4][3] = { { -1.0/2.0, 1.0/2.0, 0.0 }, { -1.0/2.0, 1.0/2.0, 0.0 }, { 0.0, -1.0/5.0, 1.0/5.0 }, { 0.0, -1.0/5.0, 1.0/5.0 } }; gsl_bspline_workspace *bw = gsl_bspline_alloc(2, 3); gsl_matrix *dB = gsl_matrix_alloc(gsl_bspline_ncoeffs(bw), gsl_bspline_order(bw) + 1); gsl_vector *breakpts = gsl_vector_alloc(3); gsl_vector_set(breakpts, 0, 0.0); gsl_vector_set(breakpts, 1, 2.0); gsl_vector_set(breakpts, 2, 7.0); gsl_bspline_knots(breakpts, bw); for (i = 0; i < 4; ++i) /* at each location */ { /* Initialize dB with poison to ensure we overwrite it */ gsl_matrix_set_all(dB, GSL_NAN); gsl_bspline_deriv_eval(xloc[i], gsl_bspline_order(bw), dB, bw); for (j = 0; j < gsl_bspline_ncoeffs(bw) ; ++j) { /* check basis function 1st deriv */ gsl_test_abs(gsl_matrix_get(dB, j, 1), deriv[i][j], GSL_DBL_EPSILON, "b-spline k=%d basis #%d derivative %d at x = %f", gsl_bspline_order(bw), j, 1, xloc[i]); } for (j = 0; j < gsl_bspline_ncoeffs(bw); ++j) { /* check k order basis function has k-th deriv equal to 0 */ gsl_test_abs(gsl_matrix_get(dB, j, gsl_bspline_order(bw)), 0.0, GSL_DBL_EPSILON, "b-spline k=%d basis #%d derivative %d at x = %f", gsl_bspline_order(bw), j, gsl_bspline_order(bw), xloc[i]); } } gsl_matrix_free(dB); gsl_bspline_free(bw); gsl_vector_free(breakpts); } /* Spot check known 0th, 1st, 2nd derivative evaluations for a particular k = 3 case. */ { size_t i, j; /* looping */ const double xloc[5] = { 0.0, 5.0, 9.0, 12.0, 15.0 }; const double eval[5][6] = { { 4./25., 69./100., 3./ 20. , 0. , 0. , 0. }, { 0. , 4./21. , 143./210. , 9./70., 0. , 0. }, { 0. , 0. , 3./ 10. , 7./10., 0. , 0. }, { 0. , 0. , 0. , 3./4. , 1./4., 0. }, { 0. , 0. , 0. , 1./3. , 5./9., 1./9. } }; const double deriv[5][6] = { { -4./25., 3./50., 1./ 10., 0. , 0. , 0. }, { 0. , -2./21., 1./105., 3./35., 0. , 0. }, { 0. , 0. , -1./5. , 1./ 5., 0. , 0. }, { 0. , 0. , 0. , -1./ 6., 1./6. , 0. }, { 0. , 0. , 0. , -1./ 9., 1./27., 2./27. } }; const double deriv2[5][6] = { { 2./25., -17./150., 1.0/30.0 , 0.0 , 0. , 0. }, { 0. , 1./ 42., -11.0/210.0, 1.0/35.0, 0. , 0. }, { 0. , 0. , 1.0/15.0 ,-11.0/90.0, 1./18. , 0. }, { 0. , 0. , 0.0 , 1.0/54.0, -7./162., 2./81. }, { 0. , 0. , 0.0 , 1.0/54.0, -7./162., 2./81. } }; gsl_bspline_workspace *bw = gsl_bspline_alloc(3, 5); gsl_matrix *dB = gsl_matrix_alloc(gsl_bspline_ncoeffs(bw), gsl_bspline_order(bw) + 1); gsl_vector *breakpts = gsl_vector_alloc(5); gsl_vector_set(breakpts, 0, -3.0); gsl_vector_set(breakpts, 1, 2.0); gsl_vector_set(breakpts, 2, 9.0); gsl_vector_set(breakpts, 3, 12.0); gsl_vector_set(breakpts, 4, 21.0); gsl_bspline_knots(breakpts, bw); for (i = 0; i < 5; ++i) /* at each location */ { /* Initialize dB with poison to ensure we overwrite it */ gsl_matrix_set_all(dB, GSL_NAN); gsl_bspline_deriv_eval(xloc[i], gsl_bspline_order(bw), dB, bw); /* check basis function evaluation */ for (j = 0; j < gsl_bspline_ncoeffs(bw); ++j) { gsl_test_abs(gsl_matrix_get(dB, j, 0), eval[i][j], GSL_DBL_EPSILON, "b-spline k=%d basis #%d derivative %d at x = %f", gsl_bspline_order(bw), j, 0, xloc[i]); } /* check 1st derivative evaluation */ for (j = 0; j < gsl_bspline_ncoeffs(bw); ++j) { gsl_test_abs(gsl_matrix_get(dB, j, 1), deriv[i][j], GSL_DBL_EPSILON, "b-spline k=%d basis #%d derivative %d at x = %f", gsl_bspline_order(bw), j, 1, xloc[i]); } /* check 2nd derivative evaluation */ for (j = 0; j < gsl_bspline_ncoeffs(bw); ++j) { gsl_test_abs(gsl_matrix_get(dB, j, 2), deriv2[i][j], GSL_DBL_EPSILON, "b-spline k=%d basis #%d derivative %d at x = %f", gsl_bspline_order(bw), j, 2, xloc[i]); } } gsl_matrix_free(dB); gsl_bspline_free(bw); gsl_vector_free(breakpts); } /* Check Greville abscissae functionality on a non-uniform k=1 */ { size_t i; /* looping */ /* Test parameters */ const size_t k = 1; const double bpoint_data[] = { 0.0, 0.2, 0.5, 0.75, 1.0 }; const size_t nbreak = sizeof(bpoint_data)/sizeof(bpoint_data[0]); /* Expected results */ const double abscissae_data[] = { 0.1, 0.35, 0.625, 0.875 }; const size_t nabscissae = sizeof(abscissae_data)/sizeof(abscissae_data[0]); gsl_vector_const_view bpoints = gsl_vector_const_view_array(bpoint_data, nbreak); gsl_bspline_workspace *w = gsl_bspline_alloc(k, nbreak); gsl_bspline_knots((const gsl_vector *) &bpoints, w); gsl_test_int(nabscissae, gsl_bspline_ncoeffs(w), "b-spline k=%d number of abscissae", k); for (i = 0; i < nabscissae; ++i) { gsl_test_abs(gsl_bspline_greville_abscissa(i, w), abscissae_data[i], 2*k*GSL_DBL_EPSILON, "b-spline k=%d Greville abscissa #%d at x = %f", k, i, abscissae_data[i]); } gsl_bspline_free(w); } /* Check Greville abscissae functionality on a non-uniform k=2 */ { size_t i; /* looping */ /* Test parameters */ const size_t k = 2; const double bpoint_data[] = { 0.0, 0.2, 0.5, 0.75, 1.0 }; const size_t nbreak = sizeof(bpoint_data)/sizeof(bpoint_data[0]); /* Expected results */ const double abscissae_data[] = { 0.0, 0.2, 0.5, 0.75, 1.0 }; const size_t nabscissae = sizeof(abscissae_data)/sizeof(abscissae_data[0]); gsl_vector_const_view bpoints = gsl_vector_const_view_array(bpoint_data, nbreak); gsl_bspline_workspace *w = gsl_bspline_alloc(k, nbreak); gsl_bspline_knots((const gsl_vector *) &bpoints, w); gsl_test_int(nabscissae, gsl_bspline_ncoeffs(w), "b-spline k=%d number of abscissae", k); for (i = 0; i < nabscissae; ++i) { gsl_test_abs(gsl_bspline_greville_abscissa(i, w), abscissae_data[i], 2*k*GSL_DBL_EPSILON, "b-spline k=%d Greville abscissa #%d at x = %f", k, i, abscissae_data[i]); } gsl_bspline_free(w); } /* Check Greville abscissae functionality on non-uniform k=3 */ { size_t i; /* looping */ /* Test parameters */ const size_t k = 3; const double bpoint_data[] = { 0.0, 0.2, 0.5, 0.75, 1.0 }; const size_t nbreak = sizeof(bpoint_data)/sizeof(bpoint_data[0]); /* Expected results */ const double abscissae_data[] = { 0.0, 1.0/10.0, 7.0/20.0, 5.0/ 8.0, 7.0/ 8.0, 1.0 }; const size_t nabscissae = sizeof(abscissae_data)/sizeof(abscissae_data[0]); gsl_vector_const_view bpoints = gsl_vector_const_view_array(bpoint_data, nbreak); gsl_bspline_workspace *w = gsl_bspline_alloc(k, nbreak); gsl_bspline_knots((const gsl_vector *) &bpoints, w); gsl_test_int(nabscissae, gsl_bspline_ncoeffs(w), "b-spline k=%d number of abscissae", k); for (i = 0; i < nabscissae; ++i) { gsl_test_abs(gsl_bspline_greville_abscissa(i, w), abscissae_data[i], 2*k*GSL_DBL_EPSILON, "b-spline k=%d Greville abscissa #%d at x = %f", k, i, abscissae_data[i]); } gsl_bspline_free(w); } /* Check Greville abscissae functionality on non-uniform k=4 */ { size_t i; /* looping */ /* Test parameters */ const size_t k = 4; const double bpoint_data[] = { 0.0, 0.2, 0.5, 0.75, 1.0 }; const size_t nbreak = sizeof(bpoint_data)/sizeof(bpoint_data[0]); /* Expected results */ const double abscissae_data[] = { 0.0, 1.0/15.0, 7.0/30.0, 29.0/60.0, 3.0/ 4.0, 11.0/12.0, 1.0 }; const size_t nabscissae = sizeof(abscissae_data)/sizeof(abscissae_data[0]); gsl_vector_const_view bpoints = gsl_vector_const_view_array(bpoint_data, nbreak); gsl_bspline_workspace *w = gsl_bspline_alloc(k, nbreak); gsl_bspline_knots((const gsl_vector *) &bpoints, w); gsl_test_int(nabscissae, gsl_bspline_ncoeffs(w), "b-spline k=%d number of abscissae", k); for (i = 0; i < nabscissae; ++i) { gsl_test_abs(gsl_bspline_greville_abscissa(i, w), abscissae_data[i], 2*k*GSL_DBL_EPSILON, "b-spline k=%d Greville abscissa #%d at x = %f", k, i, abscissae_data[i]); } gsl_bspline_free(w); } /* Knots computed from prescribed Greville abscissae for k = 4 */ { size_t i; /* looping */ /* Test parameters */ const size_t k = 4; const double abscissae_data[] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 }; const size_t nabscissae = sizeof(abscissae_data)/sizeof(abscissae_data[0]); /* Expected results */ const double bpoint_data[] = { 1.0, 4.0, 4.0, 4.0, 7.0 }; const size_t nbreak = sizeof(bpoint_data)/sizeof(bpoint_data[0]); /* Compute knots from Greville abscissae */ double abserr; gsl_vector_const_view abscissae = gsl_vector_const_view_array(abscissae_data, nabscissae); gsl_bspline_workspace *w = gsl_bspline_alloc(k, nbreak); gsl_bspline_knots_greville(&abscissae.vector, w, &abserr); for (i = 0; i < nbreak; ++i) { gsl_test_abs(gsl_bspline_breakpoint(i,w), bpoint_data[i], GSL_DBL_EPSILON*50, "b-spline k=%d knots_greville breakpoint #%d", k, i); } gsl_test_abs(abserr, 0.0, GSL_DBL_EPSILON*15, "b-spline k=%d nbreak=%d knots_greville abserr", k, nbreak); gsl_bspline_free(w); } /* Knots computed from prescribed Greville abscissae for k = 8 */ { size_t i; /* looping */ /* Test parameters */ const size_t k = 8; const double abscissae_data[] = { 1.0, 10.0/7, 13.0/7, 16.0/7, 22.0/7, 4.0, 34.0/7, 40.0/7, 43.0/7, 46.0/7, 7.0 }; const size_t nabscissae = sizeof(abscissae_data)/sizeof(abscissae_data[0]); /* Expected results */ const double bpoint_data[] = { 1.0, 4.0, 4.0, 4.0, 7.0 }; const size_t nbreak = sizeof(bpoint_data)/sizeof(bpoint_data[0]); /* Compute knots from Greville abscissae */ double abserr; gsl_vector_const_view abscissae = gsl_vector_const_view_array(abscissae_data, nabscissae); gsl_bspline_workspace *w = gsl_bspline_alloc(k, nbreak); gsl_bspline_knots_greville(&abscissae.vector, w, &abserr); for (i = 0; i < nbreak; ++i) { gsl_test_abs(gsl_bspline_breakpoint(i,w), bpoint_data[i], GSL_DBL_EPSILON*50, "b-spline k=%d knots_greville breakpoint #%d", k, i); } gsl_test_abs(abserr, 0.0, GSL_DBL_EPSILON*15, "b-spline k=%d nbreak=%d knots_greville abserr", k, nbreak); gsl_bspline_free(w); } /* Knots computed from prescribed Greville abscissae for k = 2 */ /* Not an interesting calculation but checks the k = 2 edge case */ { size_t i; /* looping */ /* Test parameters */ const size_t k = 2; const double abscissae_data[] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 }; const size_t nabscissae = sizeof(abscissae_data)/sizeof(abscissae_data[0]); /* Expected results */ const double bpoint_data[] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 }; const size_t nbreak = sizeof(bpoint_data)/sizeof(bpoint_data[0]); /* Compute knots from Greville abscissae */ double abserr; gsl_vector_const_view abscissae = gsl_vector_const_view_array(abscissae_data, nabscissae); gsl_bspline_workspace *w = gsl_bspline_alloc(k, nbreak); gsl_bspline_knots_greville(&abscissae.vector, w, &abserr); for (i = 0; i < nbreak; ++i) { gsl_test_abs(gsl_bspline_breakpoint(i,w), bpoint_data[i], GSL_DBL_EPSILON, "b-spline k=%d knots_greville breakpoint #%d", k, i); } gsl_test_abs(abserr, 0.0, GSL_DBL_EPSILON, "b-spline k=%d nbreak=%d knots_greville abserr", k, nbreak); gsl_bspline_free(w); } /* Knots computed from prescribed abscissae for edge case when nbreak = 2 */ { size_t i; /* looping */ /* Test parameters */ const size_t k = 4; double abscissae_data[] = { 1.0, 3.0, 5.0, 7.0 }; const size_t nabscissae = sizeof(abscissae_data)/sizeof(abscissae_data[0]); /* Expected results */ const double bpoint_data[] = { 1.0, 7.0 }; const size_t nbreak = sizeof(bpoint_data)/sizeof(bpoint_data[0]); /* Compute knots from Greville abscissae where abscissae are recoverable */ double abserr; gsl_vector_view abscissae = gsl_vector_view_array(abscissae_data, nabscissae); gsl_bspline_workspace *w = gsl_bspline_alloc(k, nbreak); gsl_bspline_knots_greville(&abscissae.vector, w, &abserr); /* Check recovery of breakpoints and abscissae */ for (i = 0; i < nbreak; ++i) { gsl_test_abs(gsl_bspline_breakpoint(i,w), bpoint_data[i], GSL_DBL_EPSILON, "b-spline k=%d knots_greville breakpoint #%d", k, i); } gsl_test_abs(abserr, 0.0, GSL_DBL_EPSILON, "b-spline k=%d nbreak=%d knots_greville abserr", k, nbreak); /* Modify interior abscissae so they cannot be recovered with nbreak = 2 */ /* Then recompute breakpoints and check that abserr is as expected */ abscissae_data[1] -= 1; abscissae_data[2] += 1; gsl_bspline_knots_greville(&abscissae.vector, w, &abserr); for (i = 0; i < nbreak; ++i) { gsl_test_abs(gsl_bspline_breakpoint(i,w), bpoint_data[i], GSL_DBL_EPSILON, "b-spline k=%d knots_greville breakpoint #%d", k, i); } gsl_test_abs(abserr, /* deliberate error */ 2.0, GSL_DBL_EPSILON, "b-spline k=%d nbreak=%d knots_greville abserr large", k, nbreak); gsl_bspline_free(w); } exit(gsl_test_summary()); } gsl/bspline/bspline.c0000644000175000017500000006701513536675317013202 0ustar eddedd/* bspline/bspline.c * * Copyright (C) 2006, 2007, 2008, 2009 Patrick Alken * Copyright (C) 2008 Rhys Ulerich * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include /* * This module contains routines related to calculating B-splines. * The algorithms used are described in * * [1] Carl de Boor, "A Practical Guide to Splines", Springer * Verlag, 1978. * * The bspline_pppack_* internal routines contain code adapted from * * [2] "PPPACK - Piecewise Polynomial Package", * http://www.netlib.org/pppack/ * */ #include "bspline.h" /* gsl_bspline_alloc() Allocate space for a bspline workspace. The size of the workspace is O(5k + nbreak) Inputs: k - spline order (cubic = 4) nbreak - number of breakpoints Return: pointer to workspace */ gsl_bspline_workspace * gsl_bspline_alloc (const size_t k, const size_t nbreak) { if (k == 0) { GSL_ERROR_NULL ("k must be at least 1", GSL_EINVAL); } else if (nbreak < 2) { GSL_ERROR_NULL ("nbreak must be at least 2", GSL_EINVAL); } else { gsl_bspline_workspace *w; w = calloc (1, sizeof (gsl_bspline_workspace)); if (w == 0) { GSL_ERROR_NULL ("failed to allocate space for workspace", GSL_ENOMEM); } w->k = k; w->km1 = k - 1; w->nbreak = nbreak; w->l = nbreak - 1; w->n = w->l + k - 1; w->knots = gsl_vector_alloc (w->n + k); if (w->knots == 0) { gsl_bspline_free (w); GSL_ERROR_NULL ("failed to allocate space for knots vector", GSL_ENOMEM); } w->deltal = gsl_vector_alloc (k); if (w->deltal == 0) { gsl_bspline_free (w); GSL_ERROR_NULL ("failed to allocate space for deltal vector", GSL_ENOMEM); } w->deltar = gsl_vector_alloc (k); if (w->deltar == 0) { gsl_bspline_free (w); GSL_ERROR_NULL ("failed to allocate space for deltar vector", GSL_ENOMEM); } w->B = gsl_vector_alloc (k); if (w->B == 0) { gsl_bspline_free (w); GSL_ERROR_NULL ("failed to allocate space for temporary spline vector", GSL_ENOMEM); } w->A = gsl_matrix_alloc (k, k); if (w->A == 0) { gsl_bspline_free (w); GSL_ERROR_NULL ("failed to allocate space for derivative work matrix", GSL_ENOMEM); } w->dB = gsl_matrix_alloc (k, k + 1); if (w->dB == 0) { gsl_bspline_free (w); GSL_ERROR_NULL ("failed to allocate space for temporary derivative matrix", GSL_ENOMEM); } return w; } } /* gsl_bspline_alloc() */ /* gsl_bspline_free() Free a gsl_bspline_workspace. Inputs: w - workspace to free Return: none */ void gsl_bspline_free (gsl_bspline_workspace * w) { RETURN_IF_NULL (w); if (w->knots) gsl_vector_free (w->knots); if (w->deltal) gsl_vector_free (w->deltal); if (w->deltar) gsl_vector_free (w->deltar); if (w->B) gsl_vector_free (w->B); if (w->A) gsl_matrix_free(w->A); if (w->dB) gsl_matrix_free(w->dB); free (w); } /* gsl_bspline_free() */ /* Return number of coefficients */ size_t gsl_bspline_ncoeffs (gsl_bspline_workspace * w) { return w->n; } /* Return order */ size_t gsl_bspline_order (gsl_bspline_workspace * w) { return w->k; } /* Return number of breakpoints */ size_t gsl_bspline_nbreak (gsl_bspline_workspace * w) { return w->nbreak; } /* Return the location of the i-th breakpoint*/ double gsl_bspline_breakpoint (size_t i, gsl_bspline_workspace * w) { size_t j = i + w->k - 1; return gsl_vector_get (w->knots, j); } /* gsl_bspline_knots() Compute the knots from the given breakpoints: knots(1:k) = breakpts(1) knots(k+1:k+l-1) = breakpts(i), i = 2 .. l knots(n+1:n+k) = breakpts(l + 1) where l is the number of polynomial pieces (l = nbreak - 1) and n = k + l - 1 (using matlab syntax for the arrays) The repeated knots at the beginning and end of the interval correspond to the continuity condition there. See pg. 119 of [1]. Inputs: breakpts - breakpoints w - bspline workspace Return: success or error */ int gsl_bspline_knots (const gsl_vector * breakpts, gsl_bspline_workspace * w) { if (breakpts->size != w->nbreak) { GSL_ERROR ("breakpts vector has wrong size", GSL_EBADLEN); } else { size_t i; /* looping */ for (i = 0; i < w->k; i++) gsl_vector_set (w->knots, i, gsl_vector_get (breakpts, 0)); for (i = 1; i < w->l; i++) { gsl_vector_set (w->knots, w->k - 1 + i, gsl_vector_get (breakpts, i)); } for (i = w->n; i < w->n + w->k; i++) gsl_vector_set (w->knots, i, gsl_vector_get (breakpts, w->l)); return GSL_SUCCESS; } } /* gsl_bspline_knots() */ /* gsl_bspline_knots_uniform() Construct uniformly spaced knots on the interval [a,b] using the previously specified number of breakpoints. 'a' is the position of the first breakpoint and 'b' is the position of the last breakpoint. Inputs: a - left side of interval b - right side of interval w - bspline workspace Return: success or error Notes: 1) w->knots is modified to contain the uniformly spaced knots 2) The knots vector is set up as follows (using octave syntax): knots(1:k) = a knots(k+1:k+l-1) = a + i*delta, i = 1 .. l - 1 knots(n+1:n+k) = b */ int gsl_bspline_knots_uniform (const double a, const double b, gsl_bspline_workspace * w) { size_t i; /* looping */ double delta; /* interval spacing */ double x; delta = (b - a) / (double) w->l; for (i = 0; i < w->k; i++) gsl_vector_set (w->knots, i, a); x = a + delta; for (i = 0; i < w->l - 1; i++) { gsl_vector_set (w->knots, w->k + i, x); x += delta; } for (i = w->n; i < w->n + w->k; i++) gsl_vector_set (w->knots, i, b); return GSL_SUCCESS; } /* gsl_bspline_knots_uniform() */ /* gsl_bspline_eval() Evaluate the basis functions B_i(x) for all i. This is a wrapper function for gsl_bspline_eval_nonzero() which formats the output in a nice way. Inputs: x - point for evaluation B - (output) where to store B_i(x) values the length of this vector is n = nbreak + k - 2 = l + k - 1 = w->n w - bspline workspace Return: success or error Notes: The w->knots vector must be initialized prior to calling this function (see gsl_bspline_knots()) */ int gsl_bspline_eval (const double x, gsl_vector * B, gsl_bspline_workspace * w) { if (B->size != w->n) { GSL_ERROR ("vector B not of length n", GSL_EBADLEN); } else { size_t i; /* looping */ size_t istart; /* first non-zero spline for x */ size_t iend; /* last non-zero spline for x, knot for x */ int error; /* error handling */ /* find all non-zero B_i(x) values */ error = gsl_bspline_eval_nonzero (x, w->B, &istart, &iend, w); if (error) return error; /* store values in appropriate part of given vector */ for (i = 0; i < istart; i++) gsl_vector_set (B, i, 0.0); for (i = istart; i <= iend; i++) gsl_vector_set (B, i, gsl_vector_get (w->B, i - istart)); for (i = iend + 1; i < w->n; i++) gsl_vector_set (B, i, 0.0); return GSL_SUCCESS; } } /* gsl_bspline_eval() */ /* gsl_bspline_eval_nonzero() Evaluate all non-zero B-spline functions at point x. These are the B_i(x) for i in [istart, iend]. Always B_i(x) = 0 for i < istart and for i > iend. Inputs: x - point at which to evaluate splines Bk - (output) where to store B-spline values (length k) istart - (output) B-spline function index of first non-zero basis for given x iend - (output) B-spline function index of last non-zero basis for given x. This is also the knot index corresponding to x. w - bspline workspace Return: success or error Notes: 1) the w->knots vector must be initialized before calling this function 2) On output, B contains [B_{istart,k}, B_{istart+1,k}, ..., B_{iend-1,k}, B_{iend,k}] evaluated at the given x. */ int gsl_bspline_eval_nonzero (const double x, gsl_vector * Bk, size_t * istart, size_t * iend, gsl_bspline_workspace * w) { if (Bk->size != w->k) { GSL_ERROR ("Bk vector length does not match order k", GSL_EBADLEN); } else { size_t i; /* spline index */ size_t j; /* looping */ int flag = 0; /* interval search flag */ int error = 0; /* error flag */ i = bspline_find_interval (x, &flag, w); error = bspline_process_interval_for_eval (x, &i, flag, w); if (error) return error; *istart = i - w->k + 1; *iend = i; bspline_pppack_bsplvb (w->knots, w->k, 1, x, *iend, &j, w->deltal, w->deltar, Bk); return GSL_SUCCESS; } } /* gsl_bspline_eval_nonzero() */ /* gsl_bspline_deriv_eval() Evaluate d^j/dx^j B_i(x) for all i, 0 <= j <= nderiv. This is a wrapper function for gsl_bspline_deriv_eval_nonzero() which formats the output in a nice way. Inputs: x - point for evaluation nderiv - number of derivatives to compute, inclusive. dB - (output) where to store d^j/dx^j B_i(x) values. the size of this matrix is (n = nbreak + k - 2 = l + k - 1 = w->n) by (nderiv + 1) w - bspline derivative workspace Return: success or error Notes: 1) The w->knots vector must be initialized prior to calling this function (see gsl_bspline_knots()) 2) based on PPPACK's bsplvd */ int gsl_bspline_deriv_eval (const double x, const size_t nderiv, gsl_matrix * dB, gsl_bspline_workspace * w) { if (dB->size1 != w->n) { GSL_ERROR ("dB matrix first dimension not of length n", GSL_EBADLEN); } else if (dB->size2 < nderiv + 1) { GSL_ERROR ("dB matrix second dimension must be at least length nderiv+1", GSL_EBADLEN); } else { size_t i; /* looping */ size_t j; /* looping */ size_t istart; /* first non-zero spline for x */ size_t iend; /* last non-zero spline for x, knot for x */ int error; /* error handling */ /* find all non-zero d^j/dx^j B_i(x) values */ error = gsl_bspline_deriv_eval_nonzero (x, nderiv, w->dB, &istart, &iend, w); if (error) return error; /* store values in appropriate part of given matrix */ for (j = 0; j <= nderiv; j++) { for (i = 0; i < istart; i++) gsl_matrix_set (dB, i, j, 0.0); for (i = istart; i <= iend; i++) gsl_matrix_set (dB, i, j, gsl_matrix_get (w->dB, i - istart, j)); for (i = iend + 1; i < w->n; i++) gsl_matrix_set (dB, i, j, 0.0); } return GSL_SUCCESS; } } /* gsl_bspline_deriv_eval() */ /* gsl_bspline_deriv_eval_nonzero() At point x evaluate all requested, non-zero B-spline function derivatives and store them in dB. These are the d^j/dx^j B_i(x) with i in [istart, iend] and j in [0, nderiv]. Always d^j/dx^j B_i(x) = 0 for i < istart and for i > iend. Inputs: x - point at which to evaluate splines nderiv - number of derivatives to request, inclusive dB - (output) where to store dB-spline derivatives (size k by nderiv + 1) istart - (output) B-spline function index of first non-zero basis for given x iend - (output) B-spline function index of last non-zero basis for given x. This is also the knot index corresponding to x. w - bspline derivative workspace Return: success or error Notes: 1) the w->knots vector must be initialized before calling this function 2) On output, dB contains [[B_{istart, k}, ..., d^nderiv/dx^nderiv B_{istart ,k}], [B_{istart+1,k}, ..., d^nderiv/dx^nderiv B_{istart+1,k}], ... [B_{iend-1, k}, ..., d^nderiv/dx^nderiv B_{iend-1, k}], [B_{iend, k}, ..., d^nderiv/dx^nderiv B_{iend, k}]] evaluated at x. B_{istart, k} is stored in dB(0,0). Each additional column contains an additional derivative. 3) Note that the zero-th column of the result contains the 0th derivative, which is simply a function evaluation. 4) based on PPPACK's bsplvd */ int gsl_bspline_deriv_eval_nonzero (const double x, const size_t nderiv, gsl_matrix * dB, size_t * istart, size_t * iend, gsl_bspline_workspace * w) { if (dB->size1 != w->k) { GSL_ERROR ("dB matrix first dimension not of length k", GSL_EBADLEN); } else if (dB->size2 < nderiv + 1) { GSL_ERROR ("dB matrix second dimension must be at least length nderiv+1", GSL_EBADLEN); } else { size_t i; /* spline index */ size_t j; /* looping */ int flag = 0; /* interval search flag */ int error = 0; /* error flag */ size_t min_nderivk; i = bspline_find_interval (x, &flag, w); error = bspline_process_interval_for_eval (x, &i, flag, w); if (error) return error; *istart = i - w->k + 1; *iend = i; bspline_pppack_bsplvd (w->knots, w->k, x, *iend, w->deltal, w->deltar, w->A, dB, nderiv); /* An order k b-spline has at most k-1 nonzero derivatives so we need to zero all requested higher order derivatives */ min_nderivk = GSL_MIN_INT (nderiv, w->k - 1); for (j = min_nderivk + 1; j <= nderiv; j++) { for (i = 0; i < w->k; i++) gsl_matrix_set (dB, i, j, 0.0); } return GSL_SUCCESS; } } /* gsl_bspline_deriv_eval_nonzero() */ /**************************************** * INTERNAL ROUTINES * ****************************************/ /* bspline_find_interval() Find knot interval such that t_i <= x < t_{i + 1} where the t_i are knot values. Inputs: x - x value flag - (output) error flag w - bspline workspace Return: i (index in w->knots corresponding to left limit of interval) Notes: The error conditions are reported as follows: Condition Return value Flag --------- ------------ ---- x < t_0 0 -1 t_i <= x < t_{i+1} i 0 t_i < x = t_{i+1} = t_{n+k-1} i 0 t_{n+k-1} < x l+k-1 +1 */ static inline size_t bspline_find_interval (const double x, int *flag, gsl_bspline_workspace * w) { size_t i; if (x < gsl_vector_get (w->knots, 0)) { *flag = -1; return 0; } /* find i such that t_i <= x < t_{i+1} */ for (i = w->k - 1; i < w->k + w->l - 1; i++) { const double ti = gsl_vector_get (w->knots, i); const double tip1 = gsl_vector_get (w->knots, i + 1); if (tip1 < ti) { GSL_ERROR ("knots vector is not increasing", GSL_EINVAL); } if (ti <= x && x < tip1) break; if (ti < x && x == tip1 && tip1 == gsl_vector_get (w->knots, w->k + w->l - 1)) break; } if (i == w->k + w->l - 1) *flag = 1; else *flag = 0; return i; } /* bspline_find_interval() */ /* bspline_process_interval_for_eval() Consumes an x location, left knot from bspline_find_interval, flag from bspline_find_interval, and a workspace. Checks that x lies within the splines' knots, enforces some endpoint continuity requirements, and avoids divide by zero errors in the underlying bspline_pppack_* functions. */ static inline int bspline_process_interval_for_eval (const double x, size_t * i, const int flag, gsl_bspline_workspace * w) { if (flag == -1) { GSL_ERROR ("x outside of knot interval", GSL_EINVAL); } else if (flag == 1) { if (x <= gsl_vector_get (w->knots, *i) + GSL_DBL_EPSILON) { *i -= 1; } else { GSL_ERROR ("x outside of knot interval", GSL_EINVAL); } } if (gsl_vector_get (w->knots, *i) == gsl_vector_get (w->knots, *i + 1)) { GSL_ERROR ("knot(i) = knot(i+1) will result in division by zero", GSL_EINVAL); } return GSL_SUCCESS; } /******************************************************************** * PPPACK ROUTINES * * The routines herein deliberately avoid using the bspline workspace, * choosing instead to pass all work areas explicitly. This allows * others to more easily adapt these routines to low memory or * parallel scenarios. ********************************************************************/ /* bspline_pppack_bsplvb() calculates the value of all possibly nonzero b-splines at x of order jout = max( jhigh , (j+1)*(index-1) ) with knot sequence t. Parameters: t - knot sequence, of length left + jout , assumed to be nondecreasing. assumption t(left).lt.t(left + 1). division by zero will result if t(left) = t(left+1) jhigh - index - integers which determine the order jout = max(jhigh, (j+1)*(index-1)) of the b-splines whose values at x are to be returned. index is used to avoid recalculations when several columns of the triangular array of b-spline values are needed (e.g., in bsplpp or in bsplvd ). precisely, if index = 1 , the calculation starts from scratch and the entire triangular array of b-spline values of orders 1,2,...,jhigh is generated order by order , i.e., column by column . if index = 2 , only the b-spline values of order j+1, j+2, ..., jout are generated, the assumption being that biatx, j, deltal, deltar are, on entry, as they were on exit at the previous call. in particular, if jhigh = 0, then jout = j+1, i.e., just the next column of b-spline values is generated. x - the point at which the b-splines are to be evaluated. left - an integer chosen (usually) so that t(left) .le. x .le. t(left+1). j - (output) a working scalar for indexing deltal - (output) a working area which must be of length at least jout deltar - (output) a working area which must be of length at least jout biatx - (output) array of length jout, with biatx(i) containing the value at x of the polynomial of order jout which agrees with the b-spline b(left-jout+i,jout,t) on the interval (t(left), t(left+1)) . Method: the recurrence relation x - t(i) t(i+j+1) - x b(i,j+1)(x) = -----------b(i,j)(x) + ---------------b(i+1,j)(x) t(i+j)-t(i) t(i+j+1)-t(i+1) is used (repeatedly) to generate the (j+1)-vector b(left-j,j+1)(x), ...,b(left,j+1)(x) from the j-vector b(left-j+1,j)(x),..., b(left,j)(x), storing the new values in biatx over the old. the facts that b(i,1) = 1 if t(i) .le. x .lt. t(i+1) and that b(i,j)(x) = 0 unless t(i) .le. x .lt. t(i+j) are used. the particular organization of the calculations follows algorithm (8) in chapter x of [1]. Notes: (1) This is a direct translation of PPPACK's bsplvb routine with j, deltal, deltar rewritten as input parameters and utilizing zero-based indexing. (2) This routine contains no error checking. Please use routines like gsl_bspline_eval(). */ static void bspline_pppack_bsplvb (const gsl_vector * t, const size_t jhigh, const size_t index, const double x, const size_t left, size_t * j, gsl_vector * deltal, gsl_vector * deltar, gsl_vector * biatx) { size_t i; /* looping */ double saved; double term; if (index == 1) { *j = 0; gsl_vector_set (biatx, 0, 1.0); } for ( /* NOP */ ; *j < jhigh - 1; *j += 1) { gsl_vector_set (deltar, *j, gsl_vector_get (t, left + *j + 1) - x); gsl_vector_set (deltal, *j, x - gsl_vector_get (t, left - *j)); saved = 0.0; for (i = 0; i <= *j; i++) { term = gsl_vector_get (biatx, i) / (gsl_vector_get (deltar, i) + gsl_vector_get (deltal, *j - i)); gsl_vector_set (biatx, i, saved + gsl_vector_get (deltar, i) * term); saved = gsl_vector_get (deltal, *j - i) * term; } gsl_vector_set (biatx, *j + 1, saved); } return; } /* bspline_pppack_bsplvd() calculates value and derivs of all b-splines which do not vanish at x Parameters: t - the knot array, of length left+k (at least) k - the order of the b-splines to be evaluated x - the point at which these values are sought left - an integer indicating the left endpoint of the interval of interest. the k b-splines whose support contains the interval (t(left), t(left+1)) are to be considered. it is assumed that t(left) .lt. t(left+1) division by zero will result otherwise (in bsplvb). also, the output is as advertised only if t(left) .le. x .le. t(left+1) . deltal - a working area which must be of length at least k deltar - a working area which must be of length at least k a - an array of order (k,k), to contain b-coeffs of the derivatives of a certain order of the k b-splines of interest. dbiatx - an array of order (k,nderiv). its entry (i,m) contains value of (m)th derivative of (left-k+i)-th b-spline of order k for knot sequence t, i=1,...,k, m=0,...,nderiv. nderiv - an integer indicating that values of b-splines and their derivatives up to AND INCLUDING the nderiv-th are asked for. (nderiv is replaced internally by the integer mhigh in (1,k) closest to it.) Method: values at x of all the relevant b-splines of order k,k-1,..., k+1-nderiv are generated via bsplvb and stored temporarily in dbiatx. then, the b-coeffs of the required derivatives of the b-splines of interest are generated by differencing, each from the preceeding one of lower order, and combined with the values of b-splines of corresponding order in dbiatx to produce the desired values . Notes: (1) This is a direct translation of PPPACK's bsplvd routine with deltal, deltar rewritten as input parameters (to later feed them to bspline_pppack_bsplvb) and utilizing zero-based indexing. (2) This routine contains no error checking. */ static void bspline_pppack_bsplvd (const gsl_vector * t, const size_t k, const double x, const size_t left, gsl_vector * deltal, gsl_vector * deltar, gsl_matrix * a, gsl_matrix * dbiatx, const size_t nderiv) { int i, ideriv, il, j, jlow, jp1mid, kmm, ldummy, m, mhigh; double factor, fkmm, sum; size_t bsplvb_j; gsl_vector_view dbcol = gsl_matrix_column (dbiatx, 0); mhigh = GSL_MIN_INT (nderiv, k - 1); bspline_pppack_bsplvb (t, k - mhigh, 1, x, left, &bsplvb_j, deltal, deltar, &dbcol.vector); if (mhigh > 0) { /* the first column of dbiatx always contains the b-spline values for the current order. these are stored in column k-current order before bsplvb is called to put values for the next higher order on top of it. */ ideriv = mhigh; for (m = 1; m <= mhigh; m++) { for (j = ideriv, jp1mid = 0; j < (int) k; j++, jp1mid++) { gsl_matrix_set (dbiatx, j, ideriv, gsl_matrix_get (dbiatx, jp1mid, 0)); } ideriv--; bspline_pppack_bsplvb (t, k - ideriv, 2, x, left, &bsplvb_j, deltal, deltar, &dbcol.vector); } /* at this point, b(left-k+i, k+1-j)(x) is in dbiatx(i,j) for i=j,...,k-1 and j=0,...,mhigh. in particular, the first column of dbiatx is already in final form. to obtain corresponding derivatives of b-splines in subsequent columns, generate their b-repr. by differencing, then evaluate at x. */ jlow = 0; for (i = 0; i < (int) k; i++) { for (j = jlow; j < (int) k; j++) { gsl_matrix_set (a, j, i, 0.0); } jlow = i; gsl_matrix_set (a, i, i, 1.0); } /* at this point, a(.,j) contains the b-coeffs for the j-th of the k b-splines of interest here. */ for (m = 1; m <= mhigh; m++) { kmm = k - m; fkmm = (float) kmm; il = left; i = k - 1; /* for j=1,...,k, construct b-coeffs of (m)th derivative of b-splines from those for preceding derivative by differencing and store again in a(.,j) . the fact that a(i,j) = 0 for i .lt. j is used. */ for (ldummy = 0; ldummy < kmm; ldummy++) { factor = fkmm / (gsl_vector_get (t, il + kmm) - gsl_vector_get (t, il)); /* the assumption that t(left).lt.t(left+1) makes denominator in factor nonzero. */ for (j = 0; j <= i; j++) { gsl_matrix_set (a, i, j, factor * (gsl_matrix_get (a, i, j) - gsl_matrix_get (a, i - 1, j))); } il--; i--; } /* for i=1,...,k, combine b-coeffs a(.,i) with b-spline values stored in dbiatx(.,m) to get value of (m)th derivative of i-th b-spline (of interest here) at x, and store in dbiatx(i,m). storage of this value over the value of a b-spline of order m there is safe since the remaining b-spline derivatives of the same order do not use this value due to the fact that a(j,i) = 0 for j .lt. i . */ for (i = 0; i < (int) k; i++) { sum = 0; jlow = GSL_MAX_INT (i, m); for (j = jlow; j < (int) k; j++) { sum += gsl_matrix_get (a, j, i) * gsl_matrix_get (dbiatx, j, m); } gsl_matrix_set (dbiatx, i, m, sum); } } } return; } gsl/randist/0000755000175000017500000000000014057135461011367 5ustar eddeddgsl/randist/dirichlet.c0000644000175000017500000000775513536674414013527 0ustar eddedd/* randist/dirichlet.c * * Copyright (C) 2007 Brian Gough * Copyright (C) 2002 Gavin E. Crooks * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include /* The Dirichlet probability distribution of order K-1 is p(\theta_1,...,\theta_K) d\theta_1 ... d\theta_K = (1/Z) \prod_i=1,K \theta_i^{alpha_i - 1} \delta(1 -\sum_i=1,K \theta_i) The normalization factor Z can be expressed in terms of gamma functions: Z = {\prod_i=1,K \Gamma(\alpha_i)} / {\Gamma( \sum_i=1,K \alpha_i)} The K constants, \alpha_1,...,\alpha_K, must be positive. The K parameters, \theta_1,...,\theta_K are nonnegative and sum to 1. The random variates are generated by sampling K values from gamma distributions with parameters a=\alpha_i, b=1, and renormalizing. See A.M. Law, W.D. Kelton, Simulation Modeling and Analysis (1991). Gavin E. Crooks (2002) */ static void ran_dirichlet_small (const gsl_rng * r, const size_t K, const double alpha[], double theta[]); void gsl_ran_dirichlet (const gsl_rng * r, const size_t K, const double alpha[], double theta[]) { size_t i; double norm = 0.0; for (i = 0; i < K; i++) { theta[i] = gsl_ran_gamma (r, alpha[i], 1.0); } for (i = 0; i < K; i++) { norm += theta[i]; } if (norm < GSL_SQRT_DBL_MIN) /* Handle underflow */ { ran_dirichlet_small (r, K, alpha, theta); return; } for (i = 0; i < K; i++) { theta[i] /= norm; } } /* When the values of alpha[] are small, scale the variates to avoid underflow so that the result is not 0/0. Note that the Dirichlet distribution is defined by a ratio of gamma functions so we can take out an arbitrary factor to keep the values in the range of double precision. */ static void ran_dirichlet_small (const gsl_rng * r, const size_t K, const double alpha[], double theta[]) { size_t i; double norm = 0.0, umax = 0; for (i = 0; i < K; i++) { double u = log(gsl_rng_uniform_pos (r)) / alpha[i]; theta[i] = u; if (u > umax || i == 0) { umax = u; } } for (i = 0; i < K; i++) { theta[i] = exp(theta[i] - umax); } for (i = 0; i < K; i++) { theta[i] = theta[i] * gsl_ran_gamma (r, alpha[i] + 1.0, 1.0); } for (i = 0; i < K; i++) { norm += theta[i]; } for (i = 0; i < K; i++) { theta[i] /= norm; } } double gsl_ran_dirichlet_pdf (const size_t K, const double alpha[], const double theta[]) { return exp (gsl_ran_dirichlet_lnpdf (K, alpha, theta)); } double gsl_ran_dirichlet_lnpdf (const size_t K, const double alpha[], const double theta[]) { /*We calculate the log of the pdf to minimize the possibility of overflow */ size_t i; double log_p = 0.0; double sum_alpha = 0.0; for (i = 0; i < K; i++) { log_p += (alpha[i] - 1.0) * log (theta[i]); } for (i = 0; i < K; i++) { sum_alpha += alpha[i]; } log_p += gsl_sf_lngamma (sum_alpha); for (i = 0; i < K; i++) { log_p -= gsl_sf_lngamma (alpha[i]); } return log_p; } gsl/randist/landau.c0000644000175000017500000005112013536674414013005 0ustar eddedd/* randist/landau.c * * Copyright (C) 2001, 2004 David Morrison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Adapted from the CERN library routines DENLAN, RANLAN, and DISLAN * as described in http://consult.cern.ch/shortwrups/g110/top.html. * Original author: K.S. K\"olbig. * * The distribution is given by the complex path integral, * * p(x) = (1/(2 pi i)) \int_{c-i\inf}^{c+i\inf} ds exp(s log(s) + x s) * * which can be converted into a real integral over [0,+\inf] * * p(x) = (1/pi) \int_0^\inf dt \exp(-t log(t) - x t) sin(pi t) * */ #include #include #include #include double gsl_ran_landau_pdf(const double x) { static double P1[5] = { 0.4259894875E0, -0.1249762550E0, 0.3984243700E-1, -0.6298287635E-2, 0.1511162253E-2 }; static double P2[5] = { 0.1788541609E0, 0.1173957403E0, 0.1488850518E-1, -0.1394989411E-2, 0.1283617211E-3 }; static double P3[5] = { 0.1788544503E0, 0.9359161662E-1, 0.6325387654E-2, 0.6611667319E-4, -0.2031049101E-5 }; static double P4[5] = { 0.9874054407E0, 0.1186723273E3, 0.8492794360E3, -0.7437792444E3, 0.4270262186E3 }; static double P5[5] = { 0.1003675074E1, 0.1675702434E3, 0.4789711289E4, 0.2121786767E5, -0.2232494910E5 }; static double P6[5] = { 0.1000827619E1, 0.6649143136E3, 0.6297292665E5, 0.4755546998E6, -0.5743609109E7 }; static double Q1[5] = { 1.0, -0.3388260629E0, 0.9594393323E-1, -0.1608042283E-1, 0.3778942063E-2 }; static double Q2[5] = { 1.0, 0.7428795082E0, 0.3153932961E0, 0.6694219548E-1, 0.8790609714E-2 }; static double Q3[5] = { 1.0, 0.6097809921E0, 0.2560616665E0, 0.4746722384E-1, 0.6957301675E-2 }; static double Q4[5] = { 1.0, 0.1068615961E3, 0.3376496214E3, 0.2016712389E4, 0.1597063511E4 }; static double Q5[5] = { 1.0, 0.1569424537E3, 0.3745310488E4, 0.9834698876E4, 0.6692428357E5 }; static double Q6[5] = { 1.0, 0.6514101098E3, 0.5697473333E5, 0.1659174725E6, -0.2815759939E7 }; static double A1[3] = { 0.4166666667E-1, -0.1996527778E-1, 0.2709538966E-1 }; static double A2[2] = { -0.1845568670E1, -0.4284640743E1 }; double U, V, DENLAN; V = x; if (V < -5.5) { U = exp(V + 1.0); DENLAN = 0.3989422803 * (exp( -1 / U) / sqrt(U)) * (1 + (A1[0] + (A1[1] + A1[2] * U) * U) * U); } else if (V < -1) { U = exp( -V - 1); DENLAN = exp( -U) * sqrt(U) * (P1[0] + (P1[1] + (P1[2] + (P1[3] + P1[4] * V) * V) * V) * V) / (Q1[0] + (Q1[1] + (Q1[2] + (Q1[3] + Q1[4] * V) * V) * V) * V); } else if (V < 1) { DENLAN = (P2[0] + (P2[1] + (P2[2] + (P2[3] + P2[4] * V) * V) * V) * V) / (Q2[0] + (Q2[1] + (Q2[2] + (Q2[3] + Q2[4] * V) * V) * V) * V); } else if (V < 5) { DENLAN = (P3[0] + (P3[1] + (P3[2] + (P3[3] + P3[4] * V) * V) * V) * V) / (Q3[0] + (Q3[1] + (Q3[2] + (Q3[3] + Q3[4] * V) * V) * V) * V); } else if (V < 12) { U = 1 / V; DENLAN = U * U * (P4[0] + (P4[1] + (P4[2] + (P4[3] + P4[4] * U) * U) * U) * U) / (Q4[0] + (Q4[1] + (Q4[2] + (Q4[3] + Q4[4] * U) * U) * U) * U); } else if (V < 50) { U = 1 / V; DENLAN = U * U * (P5[0] + (P5[1] + (P5[2] + (P5[3] + P5[4] * U) * U) * U) * U) / (Q5[0] + (Q5[1] + (Q5[2] + (Q5[3] + Q5[4] * U) * U) * U) * U); } else if (V < 300) { U = 1 / V; DENLAN = U * U * (P6[0] + (P6[1] + (P6[2] + (P6[3] + P6[4] * U) * U) * U) * U) / (Q6[0] + (Q6[1] + (Q6[2] + (Q6[3] + Q6[4] * U) * U) * U) * U); } else { U = 1 / (V - V * log(V) / (V + 1)); DENLAN = U * U * (1 + (A2[0] + A2[1] * U) * U); } return DENLAN; } #if 0 /* Not needed yet */ /* This function is a translation from the original Fortran of the * CERN library routine DISLAN, the integral from -inf to x of the * Landau p.d.f. */ static double gsl_ran_landau_dislan(const double x) { static double P1[5] = { 0.2514091491E0, -0.6250580444E-1, 0.1458381230E-1, -0.2108817737E-2, 0.7411247290E-3 }; static double P2[4] = { 0.2868328584E0, 0.3564363231E0, 0.1523518695E0, 0.2251304883E-1 }; static double P3[4] = { 0.2868329066E0, 0.3003828436E0, 0.9950951941E-1, 0.8733827185E-2 }; static double P4[4] = { 0.1000351630E1, 0.4503592498E1, 0.1085883880E2, 0.7536052269E1 }; static double P5[4] = { 0.1000006517E1, 0.4909414111E2, 0.8505544753E2, 0.1532153455E3 }; static double P6[4] = { 0.1000000983E1, 0.1329868456E3, 0.9162149244E3, -0.9605054274E3 }; static double Q1[5] = { 1.0, -0.5571175625E-2, 0.6225310236E-1, -0.3137378427E-2, 0.1931496439E-2 }; static double Q2[4] = { 1.0, 0.6191136137E0, 0.1720721448E0, 0.2278594771E-1 }; static double Q3[4] = { 1.0, 0.4237190502E0, 0.1095631512E0, 0.8693851567E-2 }; static double Q4[4] = { 1.0, 0.5539969678E1, 0.1933581111E2, 0.2721321508E2 }; static double Q5[4] = { 1.0, 0.5009928881E2, 0.1399819104E3, 0.4200002909E3 }; static double Q6[4] = { 1.0, 0.1339887843E3, 0.1055990413E4, 0.5532224619E3 }; static double A1[3] = { -0.4583333333E0, 0.6675347222E0, -0.1641741416E1 }; static double A2[3] = { 1.0, -0.4227843351E0, -0.2043403138E1 }; double U, V, DISLAN; V = x; if (V < -5.5) { U = exp(V + 1); DISLAN = 0.3989422803 * exp( -1 / U) * sqrt(U) * (1 + (A1[0] + (A1[1] + A1[2] * U) * U) * U); } else if (V < -1) { U = exp( -V - 1); DISLAN = (exp( -U) / sqrt(U)) * (P1[0] + (P1[1] + (P1[2] + (P1[3] + P1[4] * V) * V) * V) * V) / (Q1[0] + (Q1[1] + (Q1[2] + (Q1[3] + Q1[4] * V) * V) * V) * V); } else if (V < 1) { DISLAN = (P2[0] + (P2[1] + (P2[2] + P2[3] * V) * V) * V) / (Q2[0] + (Q2[1] + (Q2[2] + Q2[3] * V) * V) * V); } else if (V < 4) { DISLAN = (P3[0] + (P3[1] + (P3[2] + P3[3] * V) * V) * V) / (Q3[0] + (Q3[1] + (Q3[2] + Q3[3] * V) * V) * V); } else if (V < 12) { U = 1 / V; DISLAN = (P4[0] + (P4[1] + (P4[2] + P4[3] * U) * U) * U) / (Q4[0] + (Q4[1] + (Q4[2] + Q4[3] * U) * U) * U); } else if (V < 50) { U = 1 / V; DISLAN = (P5[0] + (P5[1] + (P5[2] + P5[3] * U) * U) * U) / (Q5[0] + (Q5[1] + (Q5[2] + Q5[3] * U) * U) * U); } else if (V < 300) { U = 1 / V; DISLAN = (P6[0] + (P6[1] + (P6[2] + P6[3] * U) * U) * U) / (Q6[0] + (Q6[1] + (Q6[2] + Q6[3] * U) * U) * U); } else { U = 1 / (V - V * log(V) / (V + 1)); DISLAN = 1 - (A2[0] + (A2[1] + A2[2] * U) * U) * U; } return DISLAN; } #endif double gsl_ran_landau(const gsl_rng * r) { static double F[983] = { 0.0000000, /* Add empty element [0] to account for difference between C and Fortran convention for lower bound. */ 00.000000, 00.000000, 00.000000, 00.000000, 00.000000, -2.244733, -2.204365, -2.168163, -2.135219, -2.104898, -2.076740, -2.050397, -2.025605, -2.002150, -1.979866, -1.958612, -1.938275, -1.918760, -1.899984, -1.881879, -1.864385, -1.847451, -1.831030, -1.815083, -1.799574, -1.784473, -1.769751, -1.755383, -1.741346, -1.727620, -1.714187, -1.701029, -1.688130, -1.675477, -1.663057, -1.650858, -1.638868, -1.627078, -1.615477, -1.604058, -1.592811, -1.581729, -1.570806, -1.560034, -1.549407, -1.538919, -1.528565, -1.518339, -1.508237, -1.498254, -1.488386, -1.478628, -1.468976, -1.459428, -1.449979, -1.440626, -1.431365, -1.422195, -1.413111, -1.404112, -1.395194, -1.386356, -1.377594, -1.368906, -1.360291, -1.351746, -1.343269, -1.334859, -1.326512, -1.318229, -1.310006, -1.301843, -1.293737, -1.285688, -1.277693, -1.269752, -1.261863, -1.254024, -1.246235, -1.238494, -1.230800, -1.223153, -1.215550, -1.207990, -1.200474, -1.192999, -1.185566, -1.178172, -1.170817, -1.163500, -1.156220, -1.148977, -1.141770, -1.134598, -1.127459, -1.120354, -1.113282, -1.106242, -1.099233, -1.092255, -1.085306, -1.078388, -1.071498, -1.064636, -1.057802, -1.050996, -1.044215, -1.037461, -1.030733, -1.024029, -1.017350, -1.010695, -1.004064, -0.997456, -0.990871, -0.984308, -0.977767, -0.971247, -0.964749, -0.958271, -0.951813, -0.945375, -0.938957, -0.932558, -0.926178, -0.919816, -0.913472, -0.907146, -0.900838, -0.894547, -0.888272, -0.882014, -0.875773, -0.869547, -0.863337, -0.857142, -0.850963, -0.844798, -0.838648, -0.832512, -0.826390, -0.820282, -0.814187, -0.808106, -0.802038, -0.795982, -0.789940, -0.783909, -0.777891, -0.771884, -0.765889, -0.759906, -0.753934, -0.747973, -0.742023, -0.736084, -0.730155, -0.724237, -0.718328, -0.712429, -0.706541, -0.700661, -0.694791, -0.688931, -0.683079, -0.677236, -0.671402, -0.665576, -0.659759, -0.653950, -0.648149, -0.642356, -0.636570, -0.630793, -0.625022, -0.619259, -0.613503, -0.607754, -0.602012, -0.596276, -0.590548, -0.584825, -0.579109, -0.573399, -0.567695, -0.561997, -0.556305, -0.550618, -0.544937, -0.539262, -0.533592, -0.527926, -0.522266, -0.516611, -0.510961, -0.505315, -0.499674, -0.494037, -0.488405, -0.482777, -0.477153, -0.471533, -0.465917, -0.460305, -0.454697, -0.449092, -0.443491, -0.437893, -0.432299, -0.426707, -0.421119, -0.415534, -0.409951, -0.404372, -0.398795, -0.393221, -0.387649, -0.382080, -0.376513, -0.370949, -0.365387, -0.359826, -0.354268, -0.348712, -0.343157, -0.337604, -0.332053, -0.326503, -0.320955, -0.315408, -0.309863, -0.304318, -0.298775, -0.293233, -0.287692, -0.282152, -0.276613, -0.271074, -0.265536, -0.259999, -0.254462, -0.248926, -0.243389, -0.237854, -0.232318, -0.226783, -0.221247, -0.215712, -0.210176, -0.204641, -0.199105, -0.193568, -0.188032, -0.182495, -0.176957, -0.171419, -0.165880, -0.160341, -0.154800, -0.149259, -0.143717, -0.138173, -0.132629, -0.127083, -0.121537, -0.115989, -0.110439, -0.104889, -0.099336, -0.093782, -0.088227, -0.082670, -0.077111, -0.071550, -0.065987, -0.060423, -0.054856, -0.049288, -0.043717, -0.038144, -0.032569, -0.026991, -0.021411, -0.015828, -0.010243, -0.004656, 00.000934, 00.006527, 00.012123, 00.017722, 00.023323, 00.028928, 00.034535, 00.040146, 00.045759, 00.051376, 00.056997, 00.062620, 00.068247, 00.073877, 00.079511, 00.085149, 00.090790, 00.096435, 00.102083, 00.107736, 00.113392, 00.119052, 00.124716, 00.130385, 00.136057, 00.141734, 00.147414, 00.153100, 00.158789, 00.164483, 00.170181, 00.175884, 00.181592, 00.187304, 00.193021, 00.198743, 00.204469, 00.210201, 00.215937, 00.221678, 00.227425, 00.233177, 00.238933, 00.244696, 00.250463, 00.256236, 00.262014, 00.267798, 00.273587, 00.279382, 00.285183, 00.290989, 00.296801, 00.302619, 00.308443, 00.314273, 00.320109, 00.325951, 00.331799, 00.337654, 00.343515, 00.349382, 00.355255, 00.361135, 00.367022, 00.372915, 00.378815, 00.384721, 00.390634, 00.396554, 00.402481, 00.408415, 00.414356, 00.420304, 00.426260, 00.432222, 00.438192, 00.444169, 00.450153, 00.456145, 00.462144, 00.468151, 00.474166, 00.480188, 00.486218, 00.492256, 00.498302, 00.504356, 00.510418, 00.516488, 00.522566, 00.528653, 00.534747, 00.540850, 00.546962, 00.553082, 00.559210, 00.565347, 00.571493, 00.577648, 00.583811, 00.589983, 00.596164, 00.602355, 00.608554, 00.614762, 00.620980, 00.627207, 00.633444, 00.639689, 00.645945, 00.652210, 00.658484, 00.664768, 00.671062, 00.677366, 00.683680, 00.690004, 00.696338, 00.702682, 00.709036, 00.715400, 00.721775, 00.728160, 00.734556, 00.740963, 00.747379, 00.753807, 00.760246, 00.766695, 00.773155, 00.779627, 00.786109, 00.792603, 00.799107, 00.805624, 00.812151, 00.818690, 00.825241, 00.831803, 00.838377, 00.844962, 00.851560, 00.858170, 00.864791, 00.871425, 00.878071, 00.884729, 00.891399, 00.898082, 00.904778, 00.911486, 00.918206, 00.924940, 00.931686, 00.938446, 00.945218, 00.952003, 00.958802, 00.965614, 00.972439, 00.979278, 00.986130, 00.992996, 00.999875, 01.006769, 01.013676, 01.020597, 01.027533, 01.034482, 01.041446, 01.048424, 01.055417, 01.062424, 01.069446, 01.076482, 01.083534, 01.090600, 01.097681, 01.104778, 01.111889, 01.119016, 01.126159, 01.133316, 01.140490, 01.147679, 01.154884, 01.162105, 01.169342, 01.176595, 01.183864, 01.191149, 01.198451, 01.205770, 01.213105, 01.220457, 01.227826, 01.235211, 01.242614, 01.250034, 01.257471, 01.264926, 01.272398, 01.279888, 01.287395, 01.294921, 01.302464, 01.310026, 01.317605, 01.325203, 01.332819, 01.340454, 01.348108, 01.355780, 01.363472, 01.371182, 01.378912, 01.386660, 01.394429, 01.402216, 01.410024, 01.417851, 01.425698, 01.433565, 01.441453, 01.449360, 01.457288, 01.465237, 01.473206, 01.481196, 01.489208, 01.497240, 01.505293, 01.513368, 01.521465, 01.529583, 01.537723, 01.545885, 01.554068, 01.562275, 01.570503, 01.578754, 01.587028, 01.595325, 01.603644, 01.611987, 01.620353, 01.628743, 01.637156, 01.645593, 01.654053, 01.662538, 01.671047, 01.679581, 01.688139, 01.696721, 01.705329, 01.713961, 01.722619, 01.731303, 01.740011, 01.748746, 01.757506, 01.766293, 01.775106, 01.783945, 01.792810, 01.801703, 01.810623, 01.819569, 01.828543, 01.837545, 01.846574, 01.855631, 01.864717, 01.873830, 01.882972, 01.892143, 01.901343, 01.910572, 01.919830, 01.929117, 01.938434, 01.947781, 01.957158, 01.966566, 01.976004, 01.985473, 01.994972, 02.004503, 02.014065, 02.023659, 02.033285, 02.042943, 02.052633, 02.062355, 02.072110, 02.081899, 02.091720, 02.101575, 02.111464, 02.121386, 02.131343, 02.141334, 02.151360, 02.161421, 02.171517, 02.181648, 02.191815, 02.202018, 02.212257, 02.222533, 02.232845, 02.243195, 02.253582, 02.264006, 02.274468, 02.284968, 02.295507, 02.306084, 02.316701, 02.327356, 02.338051, 02.348786, 02.359562, 02.370377, 02.381234, 02.392131, 02.403070, 02.414051, 02.425073, 02.436138, 02.447246, 02.458397, 02.469591, 02.480828, 02.492110, 02.503436, 02.514807, 02.526222, 02.537684, 02.549190, 02.560743, 02.572343, 02.583989, 02.595682, 02.607423, 02.619212, 02.631050, 02.642936, 02.654871, 02.666855, 02.678890, 02.690975, 02.703110, 02.715297, 02.727535, 02.739825, 02.752168, 02.764563, 02.777012, 02.789514, 02.802070, 02.814681, 02.827347, 02.840069, 02.852846, 02.865680, 02.878570, 02.891518, 02.904524, 02.917588, 02.930712, 02.943894, 02.957136, 02.970439, 02.983802, 02.997227, 03.010714, 03.024263, 03.037875, 03.051551, 03.065290, 03.079095, 03.092965, 03.106900, 03.120902, 03.134971, 03.149107, 03.163312, 03.177585, 03.191928, 03.206340, 03.220824, 03.235378, 03.250005, 03.264704, 03.279477, 03.294323, 03.309244, 03.324240, 03.339312, 03.354461, 03.369687, 03.384992, 03.400375, 03.415838, 03.431381, 03.447005, 03.462711, 03.478500, 03.494372, 03.510328, 03.526370, 03.542497, 03.558711, 03.575012, 03.591402, 03.607881, 03.624450, 03.641111, 03.657863, 03.674708, 03.691646, 03.708680, 03.725809, 03.743034, 03.760357, 03.777779, 03.795300, 03.812921, 03.830645, 03.848470, 03.866400, 03.884434, 03.902574, 03.920821, 03.939176, 03.957640, 03.976215, 03.994901, 04.013699, 04.032612, 04.051639, 04.070783, 04.090045, 04.109425, 04.128925, 04.148547, 04.168292, 04.188160, 04.208154, 04.228275, 04.248524, 04.268903, 04.289413, 04.310056, 04.330832, 04.351745, 04.372794, 04.393982, 04.415310, 04.436781, 04.458395, 04.480154, 04.502060, 04.524114, 04.546319, 04.568676, 04.591187, 04.613854, 04.636678, 04.659662, 04.682807, 04.706116, 04.729590, 04.753231, 04.777041, 04.801024, 04.825179, 04.849511, 04.874020, 04.898710, 04.923582, 04.948639, 04.973883, 04.999316, 05.024942, 05.050761, 05.076778, 05.102993, 05.129411, 05.156034, 05.182864, 05.209903, 05.237156, 05.264625, 05.292312, 05.320220, 05.348354, 05.376714, 05.405306, 05.434131, 05.463193, 05.492496, 05.522042, 05.551836, 05.581880, 05.612178, 05.642734, 05.673552, 05.704634, 05.735986, 05.767610, 05.799512, 05.831694, 05.864161, 05.896918, 05.929968, 05.963316, 05.996967, 06.030925, 06.065194, 06.099780, 06.134687, 06.169921, 06.205486, 06.241387, 06.277630, 06.314220, 06.351163, 06.388465, 06.426130, 06.464166, 06.502578, 06.541371, 06.580553, 06.620130, 06.660109, 06.700495, 06.741297, 06.782520, 06.824173, 06.866262, 06.908795, 06.951780, 06.995225, 07.039137, 07.083525, 07.128398, 07.173764, 07.219632, 07.266011, 07.312910, 07.360339, 07.408308, 07.456827, 07.505905, 07.555554, 07.605785, 07.656608, 07.708035, 07.760077, 07.812747, 07.866057, 07.920019, 07.974647, 08.029953, 08.085952, 08.142657, 08.200083, 08.258245, 08.317158, 08.376837, 08.437300, 08.498562, 08.560641, 08.623554, 08.687319, 08.751955, 08.817481, 08.883916, 08.951282, 09.019600, 09.088889, 09.159174, 09.230477, 09.302822, 09.376233, 09.450735, 09.526355, 09.603118, 09.681054, 09.760191, 09.840558, 09.922186, 10.005107, 10.089353, 10.174959, 10.261958, 10.350389, 10.440287, 10.531693, 10.624646, 10.719188, 10.815362, 10.913214, 11.012789, 11.114137, 11.217307, 11.322352, 11.429325, 11.538283, 11.649285, 11.762390, 11.877664, 11.995170, 12.114979, 12.237161, 12.361791, 12.488946, 12.618708, 12.751161, 12.886394, 13.024498, 13.165570, 13.309711, 13.457026, 13.607625, 13.761625, 13.919145, 14.080314, 14.245263, 14.414134, 14.587072, 14.764233, 14.945778, 15.131877, 15.322712, 15.518470, 15.719353, 15.925570, 16.137345, 16.354912, 16.578520, 16.808433, 17.044929, 17.288305, 17.538873, 17.796967, 18.062943, 18.337176, 18.620068, 18.912049, 19.213574, 19.525133, 19.847249, 20.180480, 20.525429, 20.882738, 21.253102, 21.637266, 22.036036, 22.450278, 22.880933, 23.329017, 23.795634, 24.281981, 24.789364, 25.319207, 25.873062, 26.452634, 27.059789, 27.696581, 28.365274, 29.068370, 29.808638, 30.589157, 31.413354, 32.285060, 33.208568, 34.188705, 35.230920, 36.341388, 37.527131, 38.796172, 40.157721, 41.622399, 43.202525, 44.912465, 46.769077, 48.792279, 51.005773, 53.437996, 56.123356, 59.103894 }; double X, U, V, RANLAN; int I; X = gsl_rng_uniform_pos(r); U = 1000.0 * X; I = U; U = U - I; if (I >= 70 && I <= 800) { RANLAN = F[I] + U * (F[I + 1] - F[I]); } else if (I >= 7 && I <= 980) { RANLAN = F[I] + U * (F[I + 1] - F[I] - 0.25 * (1 - U) * (F[I + 2] - F[I + 1] - F[I] + F[I - 1])); } else if (I < 7) { V = log(X); U = 1 / V; RANLAN = ((0.99858950 + (3.45213058E1 + 1.70854528E1 * U) * U) / (1 + (3.41760202E1 + 4.01244582 * U) * U)) * ( -log( -0.91893853 - V) - 1); } else { U = 1 - X; V = U * U; if (X <= 0.999) { RANLAN = (1.00060006 + 2.63991156E2 * U + 4.37320068E3 * V) / ((1 + 2.57368075E2 * U + 3.41448018E3 * V) * U); } else { RANLAN = (1.00001538 + 6.07514119E3 * U + 7.34266409E5 * V) / ((1 + 6.06511919E3 * U + 6.94021044E5 * V) * U); } } return RANLAN; } gsl/randist/levy.c0000644000175000017500000000723713536674414012532 0ustar eddedd/* randist/levy.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* The stable Levy probability distributions have the form p(x) dx = (1/(2 pi)) \int dt exp(- it x - |c t|^alpha) with 0 < alpha <= 2. For alpha = 1, we get the Cauchy distribution For alpha = 2, we get the Gaussian distribution with sigma = sqrt(2) c. Fromn Chapter 5 of Bratley, Fox and Schrage "A Guide to Simulation". The original reference given there is, J.M. Chambers, C.L. Mallows and B. W. Stuck. "A method for simulating stable random variates". Journal of the American Statistical Association, JASA 71 340-344 (1976). */ double gsl_ran_levy (const gsl_rng * r, const double c, const double alpha) { double u, v, t, s; u = M_PI * (gsl_rng_uniform_pos (r) - 0.5); if (alpha == 1) /* cauchy case */ { t = tan (u); return c * t; } do { v = gsl_ran_exponential (r, 1.0); } while (v == 0); if (alpha == 2) /* gaussian case */ { t = 2 * sin (u) * sqrt(v); return c * t; } /* general case */ t = sin (alpha * u) / pow (cos (u), 1 / alpha); s = pow (cos ((1 - alpha) * u) / v, (1 - alpha) / alpha); return c * t * s; } /* The following routine for the skew-symmetric case was provided by Keith Briggs. The stable Levy probability distributions have the form 2*pi* p(x) dx = \int dt exp(mu*i*t-|sigma*t|^alpha*(1-i*beta*sign(t)*tan(pi*alpha/2))) for alpha!=1 = \int dt exp(mu*i*t-|sigma*t|^alpha*(1+i*beta*sign(t)*2/pi*log(|t|))) for alpha==1 with 00. For beta=0, sigma=c, mu=0, we get gsl_ran_levy above. For alpha = 1, beta=0, we get the Lorentz distribution For alpha = 2, beta=0, we get the Gaussian distribution See A. Weron and R. Weron: Computer simulation of Lévy alpha-stable variables and processes, preprint Technical University of Wroclaw. http://www.im.pwr.wroc.pl/~hugo/Publications.html */ double gsl_ran_levy_skew (const gsl_rng * r, const double c, const double alpha, const double beta) { double V, W, X; if (beta == 0) /* symmetric case */ { return gsl_ran_levy (r, c, alpha); } V = M_PI * (gsl_rng_uniform_pos (r) - 0.5); do { W = gsl_ran_exponential (r, 1.0); } while (W == 0); if (alpha == 1) { X = ((M_PI_2 + beta * V) * tan (V) - beta * log (M_PI_2 * W * cos (V) / (M_PI_2 + beta * V))) / M_PI_2; return c * (X + beta * log (c) / M_PI_2); } else { double t = beta * tan (M_PI_2 * alpha); double B = atan (t) / alpha; double S = pow (1 + t * t, 1/(2 * alpha)); X = S * sin (alpha * (V + B)) / pow (cos (V), 1 / alpha) * pow (cos (V - alpha * (V + B)) / W, (1 - alpha) / alpha); return c * X; } } gsl/randist/multinomial.c0000644000175000017500000000572613536674414014106 0ustar eddedd/* randist/multinomial.c * * Copyright (C) 2002 Gavin E. Crooks * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* The multinomial distribution has the form N! n_1 n_2 n_K prob(n_1, n_2, ... n_K) = -------------------- p_1 p_2 ... p_K (n_1! n_2! ... n_K!) where n_1, n_2, ... n_K are nonnegative integers, sum_{k=1,K} n_k = N, and p = (p_1, p_2, ..., p_K) is a probability distribution. Random variates are generated using the conditional binomial method. This scales well with N and does not require a setup step. Ref: C.S. David, The computer generation of multinomial random variates, Comp. Stat. Data Anal. 16 (1993) 205-217 */ void gsl_ran_multinomial (const gsl_rng * r, const size_t K, const unsigned int N, const double p[], unsigned int n[]) { size_t k; double norm = 0.0; double sum_p = 0.0; unsigned int sum_n = 0; /* p[k] may contain non-negative weights that do not sum to 1.0. * Even a probability distribution will not exactly sum to 1.0 * due to rounding errors. */ for (k = 0; k < K; k++) { norm += p[k]; } for (k = 0; k < K; k++) { if (p[k] > 0.0) { n[k] = gsl_ran_binomial (r, p[k] / (norm - sum_p), N - sum_n); } else { n[k] = 0; } sum_p += p[k]; sum_n += n[k]; } } double gsl_ran_multinomial_pdf (const size_t K, const double p[], const unsigned int n[]) { return exp (gsl_ran_multinomial_lnpdf (K, p, n)); } double gsl_ran_multinomial_lnpdf (const size_t K, const double p[], const unsigned int n[]) { size_t k; unsigned int N = 0; double log_pdf = 0.0; double norm = 0.0; for (k = 0; k < K; k++) { N += n[k]; } for (k = 0; k < K; k++) { norm += p[k]; } log_pdf = gsl_sf_lnfact (N); for (k = 0; k < K; k++) { /* Handle case where n[k]==0 and p[k]==0 */ if (n[k] > 0) { log_pdf += log (p[k] / norm) * n[k] - gsl_sf_lnfact (n[k]); } } return log_pdf; } gsl/randist/gauss.c0000644000175000017500000001063713536674414012673 0ustar eddedd/* randist/gauss.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2006, 2007 James Theiler, Brian Gough * Copyright (C) 2006 Charles Karney * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* Of the two methods provided below, I think the Polar method is more * efficient, but only when you are actually producing two random * deviates. We don't produce two, because then we'd have to save one * in a static variable for the next call, and that would screws up * re-entrant or threaded code, so we only produce one. This makes * the Ratio method suddenly more appealing. * * [Added by Charles Karney] We use Leva's implementation of the Ratio * method which avoids calling log() nearly all the time and makes the * Ratio method faster than the Polar method (when it produces just one * result per call). Timing per call (gcc -O2 on 866MHz Pentium, * average over 10^8 calls) * * Polar method: 660 ns * Ratio method: 368 ns * */ /* Polar (Box-Mueller) method; See Knuth v2, 3rd ed, p122 */ double gsl_ran_gaussian (const gsl_rng * r, const double sigma) { double x, y, r2; do { /* choose x,y in uniform square (-1,-1) to (+1,+1) */ x = -1 + 2 * gsl_rng_uniform_pos (r); y = -1 + 2 * gsl_rng_uniform_pos (r); /* see if it is in the unit circle */ r2 = x * x + y * y; } while (r2 > 1.0 || r2 == 0); /* Box-Muller transform */ return sigma * y * sqrt (-2.0 * log (r2) / r2); } /* Ratio method (Kinderman-Monahan); see Knuth v2, 3rd ed, p130. * K+M, ACM Trans Math Software 3 (1977) 257-260. * * [Added by Charles Karney] This is an implementation of Leva's * modifications to the original K+M method; see: * J. L. Leva, ACM Trans Math Software 18 (1992) 449-453 and 454-455. */ double gsl_ran_gaussian_ratio_method (const gsl_rng * r, const double sigma) { double u, v, x, y, Q; const double s = 0.449871; /* Constants from Leva */ const double t = -0.386595; const double a = 0.19600; const double b = 0.25472; const double r1 = 0.27597; const double r2 = 0.27846; do /* This loop is executed 1.369 times on average */ { /* Generate a point P = (u, v) uniform in a rectangle enclosing the K+M region v^2 <= - 4 u^2 log(u). */ /* u in (0, 1] to avoid singularity at u = 0 */ u = 1 - gsl_rng_uniform (r); /* v is in the asymmetric interval [-0.5, 0.5). However v = -0.5 is rejected in the last part of the while clause. The resulting normal deviate is strictly symmetric about 0 (provided that v is symmetric once v = -0.5 is excluded). */ v = gsl_rng_uniform (r) - 0.5; /* Constant 1.7156 > sqrt(8/e) (for accuracy); but not by too much (for efficiency). */ v *= 1.7156; /* Compute Leva's quadratic form Q */ x = u - s; y = fabs (v) - t; Q = x * x + y * (a * y - b * x); /* Accept P if Q < r1 (Leva) */ /* Reject P if Q > r2 (Leva) */ /* Accept if v^2 <= -4 u^2 log(u) (K+M) */ /* This final test is executed 0.012 times on average. */ } while (Q >= r1 && (Q > r2 || v * v > -4 * u * u * log (u))); return sigma * (v / u); /* Return slope */ } double gsl_ran_gaussian_pdf (const double x, const double sigma) { double u = x / fabs (sigma); double p = (1 / (sqrt (2 * M_PI) * fabs (sigma))) * exp (-u * u / 2); return p; } double gsl_ran_ugaussian (const gsl_rng * r) { return gsl_ran_gaussian (r, 1.0); } double gsl_ran_ugaussian_ratio_method (const gsl_rng * r) { return gsl_ran_gaussian_ratio_method (r, 1.0); } double gsl_ran_ugaussian_pdf (const double x) { return gsl_ran_gaussian_pdf (x, 1.0); } gsl/randist/beta.c0000644000175000017500000000522513536674414012461 0ustar eddedd/* randist/beta.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include /* The beta distribution has the form p(x) dx = (Gamma(a + b)/(Gamma(a) Gamma(b))) x^(a-1) (1-x)^(b-1) dx The method used here is the one described in Knuth */ double gsl_ran_beta (const gsl_rng * r, const double a, const double b) { if ( (a <= 1.0) && (b <= 1.0) ) { double U, V, X, Y; while (1) { U = gsl_rng_uniform_pos(r); V = gsl_rng_uniform_pos(r); X = pow(U, 1.0/a); Y = pow(V, 1.0/b); if ((X + Y ) <= 1.0) { if (X + Y > 0) { return X/ (X + Y); } else { double logX = log(U)/a; double logY = log(V)/b; double logM = logX > logY ? logX: logY; logX -= logM; logY -= logM; return exp(logX - log(exp(logX) + exp(logY))); } } } } else { double x1 = gsl_ran_gamma (r, a, 1.0); double x2 = gsl_ran_gamma (r, b, 1.0); return x1 / (x1 + x2); } } double gsl_ran_beta_pdf (const double x, const double a, const double b) { if (x < 0 || x > 1) { return 0 ; } else { double p; double gab = gsl_sf_lngamma (a + b); double ga = gsl_sf_lngamma (a); double gb = gsl_sf_lngamma (b); if (x == 0.0 || x == 1.0) { if (a > 1.0 && b > 1.0) { p = 0.0; } else { p = exp (gab - ga - gb) * pow (x, a - 1) * pow (1 - x, b - 1); } } else { p = exp (gab - ga - gb + log(x) * (a - 1) + log1p(-x) * (b - 1)); } return p; } } gsl/randist/lognormal.c0000644000175000017500000000361313536674414013537 0ustar eddedd/* randist/lognormal.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* The lognormal distribution has the form p(x) dx = 1/(x * sqrt(2 pi sigma^2)) exp(-(ln(x) - zeta)^2/2 sigma^2) dx for x > 0. Lognormal random numbers are the exponentials of gaussian random numbers */ double gsl_ran_lognormal (const gsl_rng * r, const double zeta, const double sigma) { double u, v, r2, normal, z; do { /* choose x,y in uniform square (-1,-1) to (+1,+1) */ u = -1 + 2 * gsl_rng_uniform (r); v = -1 + 2 * gsl_rng_uniform (r); /* see if it is in the unit circle */ r2 = u * u + v * v; } while (r2 > 1.0 || r2 == 0); normal = u * sqrt (-2.0 * log (r2) / r2); z = exp (sigma * normal + zeta); return z; } double gsl_ran_lognormal_pdf (const double x, const double zeta, const double sigma) { if (x <= 0) { return 0 ; } else { double u = (log (x) - zeta)/sigma; double p = 1 / (x * fabs(sigma) * sqrt (2 * M_PI)) * exp (-(u * u) /2); return p; } } gsl/randist/Makefile.in0000664000175000017500000012551414057135461013446 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = randist ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslrandist_la_LIBADD = am_libgslrandist_la_OBJECTS = bernoulli.lo beta.lo bigauss.lo \ binomial.lo cauchy.lo chisq.lo dirichlet.lo discrete.lo \ erlang.lo exponential.lo exppow.lo fdist.lo flat.lo gamma.lo \ gauss.lo gausszig.lo gausstail.lo geometric.lo gumbel.lo \ hyperg.lo laplace.lo levy.lo logarithmic.lo logistic.lo \ lognormal.lo multinomial.lo mvgauss.lo nbinomial.lo pareto.lo \ pascal.lo poisson.lo rayleigh.lo shuffle.lo sphere.lo tdist.lo \ weibull.lo landau.lo binomial_tpe.lo wishart.lo libgslrandist_la_OBJECTS = $(am_libgslrandist_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslrandist.la ../rng/libgslrng.la \ ../cdf/libgslcdf.la ../specfunc/libgslspecfunc.la \ ../integration/libgslintegration.la \ ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la ../statistics/libgslstatistics.la \ ../sort/libgslsort.la ../linalg/libgsllinalg.la \ ../blas/libgslblas.la ../cblas/libgslcblas.la \ ../matrix/libgslmatrix.la ../vector/libgslvector.la \ ../block/libgslblock.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/bernoulli.Plo ./$(DEPDIR)/beta.Plo \ ./$(DEPDIR)/bigauss.Plo ./$(DEPDIR)/binomial.Plo \ ./$(DEPDIR)/binomial_tpe.Plo ./$(DEPDIR)/cauchy.Plo \ ./$(DEPDIR)/chisq.Plo ./$(DEPDIR)/dirichlet.Plo \ ./$(DEPDIR)/discrete.Plo ./$(DEPDIR)/erlang.Plo \ ./$(DEPDIR)/exponential.Plo ./$(DEPDIR)/exppow.Plo \ ./$(DEPDIR)/fdist.Plo ./$(DEPDIR)/flat.Plo \ ./$(DEPDIR)/gamma.Plo ./$(DEPDIR)/gauss.Plo \ ./$(DEPDIR)/gausstail.Plo ./$(DEPDIR)/gausszig.Plo \ ./$(DEPDIR)/geometric.Plo ./$(DEPDIR)/gumbel.Plo \ ./$(DEPDIR)/hyperg.Plo ./$(DEPDIR)/landau.Plo \ ./$(DEPDIR)/laplace.Plo ./$(DEPDIR)/levy.Plo \ ./$(DEPDIR)/logarithmic.Plo ./$(DEPDIR)/logistic.Plo \ ./$(DEPDIR)/lognormal.Plo ./$(DEPDIR)/multinomial.Plo \ ./$(DEPDIR)/mvgauss.Plo ./$(DEPDIR)/nbinomial.Plo \ ./$(DEPDIR)/pareto.Plo ./$(DEPDIR)/pascal.Plo \ ./$(DEPDIR)/poisson.Plo ./$(DEPDIR)/rayleigh.Plo \ ./$(DEPDIR)/shuffle.Plo ./$(DEPDIR)/sphere.Plo \ ./$(DEPDIR)/tdist.Plo ./$(DEPDIR)/test.Po \ ./$(DEPDIR)/weibull.Plo ./$(DEPDIR)/wishart.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslrandist_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslrandist_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslrandist.la pkginclude_HEADERS = gsl_randist.h AM_CPPFLAGS = -I$(top_srcdir) libgslrandist_la_SOURCES = bernoulli.c beta.c bigauss.c binomial.c cauchy.c chisq.c dirichlet.c discrete.c erlang.c exponential.c exppow.c fdist.c flat.c gamma.c gauss.c gausszig.c gausstail.c geometric.c gumbel.c hyperg.c laplace.c levy.c logarithmic.c logistic.c lognormal.c multinomial.c mvgauss.c nbinomial.c pareto.c pascal.c poisson.c rayleigh.c shuffle.c sphere.c tdist.c weibull.c landau.c binomial_tpe.c wishart.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslrandist.la ../rng/libgslrng.la ../cdf/libgslcdf.la ../specfunc/libgslspecfunc.la ../integration/libgslintegration.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../statistics/libgslstatistics.la ../sort/libgslsort.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu randist/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu randist/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslrandist.la: $(libgslrandist_la_OBJECTS) $(libgslrandist_la_DEPENDENCIES) $(EXTRA_libgslrandist_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslrandist_la_OBJECTS) $(libgslrandist_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bernoulli.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/beta.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bigauss.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binomial.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binomial_tpe.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cauchy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chisq.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirichlet.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/discrete.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/erlang.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exponential.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exppow.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gamma.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gauss.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gausstail.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gausszig.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/geometric.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gumbel.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyperg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/landau.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/laplace.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/levy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logarithmic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logistic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lognormal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multinomial.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mvgauss.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nbinomial.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pareto.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pascal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poisson.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rayleigh.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shuffle.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphere.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/weibull.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wishart.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/bernoulli.Plo -rm -f ./$(DEPDIR)/beta.Plo -rm -f ./$(DEPDIR)/bigauss.Plo -rm -f ./$(DEPDIR)/binomial.Plo -rm -f ./$(DEPDIR)/binomial_tpe.Plo -rm -f ./$(DEPDIR)/cauchy.Plo -rm -f ./$(DEPDIR)/chisq.Plo -rm -f ./$(DEPDIR)/dirichlet.Plo -rm -f ./$(DEPDIR)/discrete.Plo -rm -f ./$(DEPDIR)/erlang.Plo -rm -f ./$(DEPDIR)/exponential.Plo -rm -f ./$(DEPDIR)/exppow.Plo -rm -f ./$(DEPDIR)/fdist.Plo -rm -f ./$(DEPDIR)/flat.Plo -rm -f ./$(DEPDIR)/gamma.Plo -rm -f ./$(DEPDIR)/gauss.Plo -rm -f ./$(DEPDIR)/gausstail.Plo -rm -f ./$(DEPDIR)/gausszig.Plo -rm -f ./$(DEPDIR)/geometric.Plo -rm -f ./$(DEPDIR)/gumbel.Plo -rm -f ./$(DEPDIR)/hyperg.Plo -rm -f ./$(DEPDIR)/landau.Plo -rm -f ./$(DEPDIR)/laplace.Plo -rm -f ./$(DEPDIR)/levy.Plo -rm -f ./$(DEPDIR)/logarithmic.Plo -rm -f ./$(DEPDIR)/logistic.Plo -rm -f ./$(DEPDIR)/lognormal.Plo -rm -f ./$(DEPDIR)/multinomial.Plo -rm -f ./$(DEPDIR)/mvgauss.Plo -rm -f ./$(DEPDIR)/nbinomial.Plo -rm -f ./$(DEPDIR)/pareto.Plo -rm -f ./$(DEPDIR)/pascal.Plo -rm -f ./$(DEPDIR)/poisson.Plo -rm -f ./$(DEPDIR)/rayleigh.Plo -rm -f ./$(DEPDIR)/shuffle.Plo -rm -f ./$(DEPDIR)/sphere.Plo -rm -f ./$(DEPDIR)/tdist.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/weibull.Plo -rm -f ./$(DEPDIR)/wishart.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/bernoulli.Plo -rm -f ./$(DEPDIR)/beta.Plo -rm -f ./$(DEPDIR)/bigauss.Plo -rm -f ./$(DEPDIR)/binomial.Plo -rm -f ./$(DEPDIR)/binomial_tpe.Plo -rm -f ./$(DEPDIR)/cauchy.Plo -rm -f ./$(DEPDIR)/chisq.Plo -rm -f ./$(DEPDIR)/dirichlet.Plo -rm -f ./$(DEPDIR)/discrete.Plo -rm -f ./$(DEPDIR)/erlang.Plo -rm -f ./$(DEPDIR)/exponential.Plo -rm -f ./$(DEPDIR)/exppow.Plo -rm -f ./$(DEPDIR)/fdist.Plo -rm -f ./$(DEPDIR)/flat.Plo -rm -f ./$(DEPDIR)/gamma.Plo -rm -f ./$(DEPDIR)/gauss.Plo -rm -f ./$(DEPDIR)/gausstail.Plo -rm -f ./$(DEPDIR)/gausszig.Plo -rm -f ./$(DEPDIR)/geometric.Plo -rm -f ./$(DEPDIR)/gumbel.Plo -rm -f ./$(DEPDIR)/hyperg.Plo -rm -f ./$(DEPDIR)/landau.Plo -rm -f ./$(DEPDIR)/laplace.Plo -rm -f ./$(DEPDIR)/levy.Plo -rm -f ./$(DEPDIR)/logarithmic.Plo -rm -f ./$(DEPDIR)/logistic.Plo -rm -f ./$(DEPDIR)/lognormal.Plo -rm -f ./$(DEPDIR)/multinomial.Plo -rm -f ./$(DEPDIR)/mvgauss.Plo -rm -f ./$(DEPDIR)/nbinomial.Plo -rm -f ./$(DEPDIR)/pareto.Plo -rm -f ./$(DEPDIR)/pascal.Plo -rm -f ./$(DEPDIR)/poisson.Plo -rm -f ./$(DEPDIR)/rayleigh.Plo -rm -f ./$(DEPDIR)/shuffle.Plo -rm -f ./$(DEPDIR)/sphere.Plo -rm -f ./$(DEPDIR)/tdist.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/weibull.Plo -rm -f ./$(DEPDIR)/wishart.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/randist/sphere.c0000644000175000017500000000663713536674414013044 0ustar eddedd/* randist/sphere.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include void gsl_ran_dir_2d (const gsl_rng * r, double *x, double *y) { /* This method avoids trig, but it does take an average of 8/pi = * 2.55 calls to the RNG, instead of one for the direct * trigonometric method. */ double u, v, s; do { u = -1 + 2 * gsl_rng_uniform (r); v = -1 + 2 * gsl_rng_uniform (r); s = u * u + v * v; } while (s > 1.0 || s == 0.0); /* This is the Von Neumann trick. See Knuth, v2, 3rd ed, p140 * (exercise 23). Note, no sin, cos, or sqrt ! */ *x = (u * u - v * v) / s; *y = 2 * u * v / s; /* Here is the more straightforward approach, * s = sqrt (s); *x = u / s; *y = v / s; * It has fewer total operations, but one of them is a sqrt */ } void gsl_ran_dir_2d_trig_method (const gsl_rng * r, double *x, double *y) { /* This is the obvious solution... */ /* It ain't clever, but since sin/cos are often hardware accelerated, * it can be faster -- it is on my home Pentium -- than von Neumann's * solution, or slower -- as it is on my Sun Sparc 20 at work */ double t = 6.2831853071795864 * gsl_rng_uniform (r); /* 2*PI */ *x = cos (t); *y = sin (t); } void gsl_ran_dir_3d (const gsl_rng * r, double *x, double *y, double *z) { double s, a; /* This is a variant of the algorithm for computing a random point * on the unit sphere; the algorithm is suggested in Knuth, v2, * 3rd ed, p136; and attributed to Robert E Knop, CACM, 13 (1970), * 326. */ /* Begin with the polar method for getting x,y inside a unit circle */ do { *x = -1 + 2 * gsl_rng_uniform (r); *y = -1 + 2 * gsl_rng_uniform (r); s = (*x) * (*x) + (*y) * (*y); } while (s > 1.0); *z = -1 + 2 * s; /* z uniformly distributed from -1 to 1 */ a = 2 * sqrt (1 - s); /* factor to adjust x,y so that x^2+y^2 * is equal to 1-z^2 */ *x *= a; *y *= a; } void gsl_ran_dir_nd (const gsl_rng * r, size_t n, double *x) { double d; size_t i; /* See Knuth, v2, 3rd ed, p135-136. The method is attributed to * G. W. Brown, in Modern Mathematics for the Engineer (1956). * The idea is that gaussians G(x) have the property that * G(x)G(y)G(z)G(...) is radially symmetric, a function only * r = sqrt(x^2+y^2+...) */ d = 0; do { for (i = 0; i < n; ++i) { x[i] = gsl_ran_gaussian (r, 1.0); d += x[i] * x[i]; } } while (d == 0); d = sqrt (d); for (i = 0; i < n; ++i) { x[i] /= d; } } gsl/randist/logistic.c0000644000175000017500000000257413536674414013367 0ustar eddedd/* randist/logistic.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* The logistic distribution has the form, p(x) dx = (1/a) exp(-x/a) / (1 + exp(-x/a))^2 dx for -infty < x < infty */ double gsl_ran_logistic (const gsl_rng * r, const double a) { double x, z; do { x = gsl_rng_uniform_pos (r); } while (x == 1); z = log (x / (1 - x)); return a * z; } double gsl_ran_logistic_pdf (const double x, const double a) { double u = exp (-fabs(x)/a); double p = u / (fabs(a) * (1 + u) * (1 + u)); return p; } gsl/randist/cauchy.c0000644000175000017500000000261613536674414013023 0ustar eddedd/* randist/cauchy.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* The Cauchy probability distribution is p(x) dx = (1/(pi a)) (1 + (x/a)^2)^(-1) dx It is also known as the Lorentzian probability distribution */ double gsl_ran_cauchy (const gsl_rng * r, const double a) { double u; do { u = gsl_rng_uniform (r); } while (u == 0.5); return a * tan (M_PI * u); } double gsl_ran_cauchy_pdf (const double x, const double a) { double u = x / a; double p = (1 / (M_PI * a)) / (1 + u * u); return p; } gsl/randist/tdist.c0000644000175000017500000000420013536674414012665 0ustar eddedd/* randist/tdist.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include /* The t-distribution has the form p(x) dx = (Gamma((nu + 1)/2)/(sqrt(pi nu) Gamma(nu/2)) * (1 + (x^2)/nu)^-((nu + 1)/2) dx The method used here is the one described in Knuth */ double gsl_ran_tdist (const gsl_rng * r, const double nu) { if (nu <= 2) { double Y1 = gsl_ran_ugaussian (r); double Y2 = gsl_ran_chisq (r, nu); double t = Y1 / sqrt (Y2 / nu); return t; } else { double Y1, Y2, Z, t; do { Y1 = gsl_ran_ugaussian (r); Y2 = gsl_ran_exponential (r, 1 / (nu/2 - 1)); Z = Y1 * Y1 / (nu - 2); } while (1 - Z < 0 || exp (-Y2 - Z) > (1 - Z)); /* Note that there is a typo in Knuth's formula, the line below is taken from the original paper of Marsaglia, Mathematics of Computation, 34 (1980), p 234-256 */ t = Y1 / sqrt ((1 - 2 / nu) * (1 - Z)); return t; } } double gsl_ran_tdist_pdf (const double x, const double nu) { double p; double lg1 = gsl_sf_lngamma (nu / 2); double lg2 = gsl_sf_lngamma ((nu + 1) / 2); p = ((exp (lg2 - lg1) / sqrt (M_PI * nu)) * pow ((1 + x * x / nu), -(nu + 1) / 2)); return p; } gsl/randist/wishart.c0000644000175000017500000001520113536674414013222 0ustar eddedd/* randist/wishart.c * * Copyright (C) 2017 Timothée Flutre * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include /* Generate a random matrix from a Wishart distribution using the Bartlett * decomposition, following Smith and Hocking, Journal of the Royal Statistical * Society. Series C (Applied Statistics), Vol. 21, No. 3 (1972), pp. 341-345. * * df degrees of freedom * L matrix resulting from the Cholesky decomposition of * the scale matrix V = L L^T (dimension d x d) * result output matrix (dimension d x d) * work matrix used for intermediate computations (dimension d x d) */ int gsl_ran_wishart (const gsl_rng * r, const double df, const gsl_matrix * L, gsl_matrix * result, gsl_matrix * work) { if (L->size1 != L->size2) { GSL_ERROR("L should be a square matrix", GSL_ENOTSQR); } else if (result->size1 != result->size2) { GSL_ERROR("result should be a square matrix", GSL_ENOTSQR); } else if (work->size1 != work->size2) { GSL_ERROR("work should be a square matrix", GSL_ENOTSQR); } else if (result->size1 != L->size1) { GSL_ERROR("incompatible dimensions of result matrix", GSL_EBADLEN); } else if (work->size1 != L->size1) { GSL_ERROR("incompatible dimensions of work matrix", GSL_EBADLEN); } else if (df <= L->size1 - 1) { GSL_ERROR("incompatible degrees of freedom", GSL_EDOM); } else { /* result: X = L A A^T L^T */ size_t d = L->size1, i, j; /* insure the upper part of A is zero before filling its lower part */ gsl_matrix_set_zero(work); for (i = 0; i < d; ++i) { gsl_matrix_set(work, i, i, sqrt(gsl_ran_chisq(r, df - i))); for (j = 0; j < i; ++j) { gsl_matrix_set(work, i, j, gsl_ran_ugaussian(r)); } } /* compute L * A */ gsl_blas_dtrmm(CblasLeft, CblasLower, CblasNoTrans, CblasNonUnit, 1.0, L, work); /* compute (L * A) * (L * A)^T */ gsl_blas_dsyrk(CblasUpper, CblasNoTrans, 1.0, work, 0.0, result); for (i = 0; i < d; ++i) { for (j = 0; j < i; ++j) { gsl_matrix_set(result, i, j, gsl_matrix_get(result, j, i)); } } return GSL_SUCCESS; } } /* Compute the log of the probability density function at a given quantile * matrix for a Wishart distribution using the Cholesky decomposition of the * scale matrix. * * X quantile matrix at which to evaluate the PDF (dimension d x d) * L_X matrix resulting from the Cholesky decomposition of * of the quantile matrix at which to evaluate the PDF * X = L_X L_X^T (dimension d x d) * df degrees of freedom * L matrix resulting from the Cholesky decomposition of * the scale matrix V = L L^T (dimension d x d) * result output of the density (dimension 1) * work matrix used for intermediate computations (dimension d x d) */ int gsl_ran_wishart_log_pdf (const gsl_matrix * X, const gsl_matrix * L_X, const double df, const gsl_matrix * L, double * result, gsl_matrix * work) { if (L->size1 != L->size2) { GSL_ERROR("L should be a square matrix", GSL_ENOTSQR); } else if (X->size1 != X->size2) { GSL_ERROR("X should be a square matrix", GSL_ENOTSQR); } else if (L_X->size1 != L_X->size2) { GSL_ERROR("L_X should be a square matrix", GSL_ENOTSQR); } else if (X->size1 != L->size1) { GSL_ERROR("incompatible dimensions of X matrix", GSL_EBADLEN); } else if (L_X->size1 != L->size1) { GSL_ERROR("incompatible dimensions of L_X matrix", GSL_EBADLEN); } else if (df <= L->size1 - 1) { GSL_ERROR("incompatible degrees of freedom", GSL_EDOM); } else { size_t d = L->size1, i; int status; double log_mv_Ga, log_det_V, log_det_X, tr_Vinv_X; /* compute the log of the multivariate Gamma */ log_mv_Ga = d * (d-1) * 0.25 * log(M_PI); for (i = 0; i < d; ++i) { log_mv_Ga += gsl_sf_lngamma((df - i + 1) * 0.5); } /* compute the log of the determinant of the scale matrix */ log_det_V = log(gsl_matrix_get(L, 0, 0)); for (i = 1; i < d; ++i) { log_det_V += log(gsl_matrix_get(L, i, i)); } log_det_V = 2 * log_det_V; /* compute the log of the determinant of the quantile matrix */ log_det_X = log(gsl_matrix_get(L_X, 0, 0)); for (i = 1; i < d; ++i) { log_det_X += log(gsl_matrix_get(L_X, i, i)); } log_det_X = 2 * log_det_X; /* compute the trace of V^(-1) X */ status = gsl_linalg_cholesky_solve_mat(L, X, work); if (status) return status; tr_Vinv_X = gsl_matrix_get(work, 0, 0); for (i = 1; i < d; ++i) { tr_Vinv_X += gsl_matrix_get(work, i, i); } /* add all to get the log of the PDF */ *result = - (0.5 * df * d) * log(2.0) - (0.5 * df) * log_det_V - log_mv_Ga + 0.5 * (df - d - 1) * log_det_X - 0.5 * tr_Vinv_X; return GSL_SUCCESS; } } int gsl_ran_wishart_pdf (const gsl_matrix * X, const gsl_matrix * L_X, const double df, const gsl_matrix * L, double * result, gsl_matrix * work) { double logpdf; int status = gsl_ran_wishart_log_pdf(X, L_X, df, L, &logpdf, work); if (status == GSL_SUCCESS) *result = exp(logpdf); return status; } gsl/randist/gausstail.c0000644000175000017500000000514313536674414013541 0ustar eddedd/* randist/gausstail.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include double gsl_ran_gaussian_tail (const gsl_rng * r, const double a, const double sigma) { /* Returns a gaussian random variable larger than a * This implementation does one-sided upper-tailed deviates. */ double s = a / sigma; if (s < 1) { /* For small s, use a direct rejection method. The limit s < 1 can be adjusted to optimise the overall efficiency */ double x; do { x = gsl_ran_gaussian (r, 1.0); } while (x < s); return x * sigma; } else { /* Use the "supertail" deviates from the last two steps * of Marsaglia's rectangle-wedge-tail method, as described * in Knuth, v2, 3rd ed, pp 123-128. (See also exercise 11, p139, * and the solution, p586.) */ double u, v, x; do { u = gsl_rng_uniform (r); do { v = gsl_rng_uniform (r); } while (v == 0.0); x = sqrt (s * s - 2 * log (v)); } while (x * u > s); return x * sigma; } } double gsl_ran_gaussian_tail_pdf (const double x, const double a, const double sigma) { if (x < a) { return 0; } else { double N, p; double u = x / sigma ; double f = gsl_sf_erfc (a / (sqrt (2.0) * sigma)); N = 0.5 * f; p = (1 / (N * sqrt (2 * M_PI) * sigma)) * exp (-u * u / 2); return p; } } double gsl_ran_ugaussian_tail (const gsl_rng * r, const double a) { return gsl_ran_gaussian_tail (r, a, 1.0) ; } double gsl_ran_ugaussian_tail_pdf (const double x, const double a) { return gsl_ran_gaussian_tail_pdf (x, a, 1.0) ; } gsl/randist/discrete.c0000644000175000017500000003217413536674414013353 0ustar eddedd/* randist/discrete.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2009 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Random Discrete Events Given K discrete events with different probabilities P[k] produce a value k consistent with its probability. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Based on: Alastair J Walker, An efficient method for generating * discrete random variables with general distributions, ACM Trans * Math Soft 3, 253-256 (1977). See also: D. E. Knuth, The Art of * Computer Programming, Volume 2 (Seminumerical algorithms), 3rd * edition, Addison-Wesley (1997), p120. * Walker's algorithm does some preprocessing, and provides two * arrays: floating point F[k] and integer A[k]. A value k is chosen * from 0..K-1 with equal likelihood, and then a uniform random number * u is compared to F[k]. If it is less than F[k], then k is * returned. Otherwise, A[k] is returned. * Walker's original paper describes an O(K^2) algorithm for setting * up the F and A arrays. I found this disturbing since I wanted to * use very large values of K. I'm sure I'm not the first to realize * this, but in fact the preprocessing can be done in O(K) steps. * A figure of merit for the preprocessing is the average value for * the F[k]'s (that is, SUM_k F[k]/K); this corresponds to the * probability that k is returned, instead of A[k], thereby saving a * redirection. Walker's O(K^2) preprocessing will generally improve * that figure of merit, compared to my cheaper O(K) method; from some * experiments with a perl script, I get values of around 0.6 for my * method and just under 0.75 for Walker's. Knuth has pointed out * that finding _the_ optimum lookup tables, which maximize the * average F[k], is a combinatorially difficult problem. But any * valid preprocessing will still provide O(1) time for the call to * gsl_ran_discrete(). I find that if I artificially set F[k]=1 -- * ie, better than optimum! -- I get a speedup of maybe 20%, so that's * the maximum I could expect from the most expensive preprocessing. * Folding in the difference of 0.6 vs 0.75, I'd estimate that the * speedup would be less than 10%. * I've not implemented it here, but one compromise is to sort the * probabilities once, and then work from the two ends inward. This * requires O(K log K), still lots cheaper than O(K^2), and from my * experiments with the perl script, the figure of merit is within * about 0.01 for K up to 1000, and no sign of diverging (in fact, * they seemed to be converging, but it's hard to say with just a * handful of runs). * The O(K) algorithm goes through all the p_k's and decides if they * are "smalls" or "bigs" according to whether they are less than or * greater than the mean value 1/K. The indices to the smalls and the * bigs are put in separate stacks, and then we work through the * stacks together. For each small, we pair it up with the next big * in the stack (Walker always wanted to pair up the smallest small * with the biggest big). The small "borrows" from the big just * enough to bring the small up to mean. This reduces the size of the * big, so the (smaller) big is compared again to the mean, and if it * is smaller, it gets "popped" from the big stack and "pushed" to the * small stack. Otherwise, it stays put. Since every time we pop a * small, we are able to deal with it right then and there, and we * never have to pop more than K smalls, then the algorithm is O(K). * This implementation sets up two separate stacks, and allocates K * elements between them. Since neither stack ever grows, we do an * extra O(K) pass through the data to determine how many smalls and * bigs there are to begin with and allocate appropriately. In all * there are 2*K*sizeof(double) transient bytes of memory that are * used than returned, and K*(sizeof(int)+sizeof(double)) bytes used * in the lookup table. * Walker spoke of using two random numbers (an integer 0..K-1, and a * floating point u in [0,1]), but Knuth points out that one can just * use the integer and fractional parts of K*u where u is in [0,1]. * In fact, Knuth further notes that taking F'[k]=(k+F[k])/K, one can * directly compare u to F'[k] without having to explicitly set * u=K*u-int(K*u). * Usage: * Starting with an array of probabilities P, initialize and do * preprocessing with a call to: * gsl_rng *r; * gsl_ran_discrete_t *f; * f = gsl_ran_discrete_preproc(K,P); * Then, whenever a random index 0..K-1 is desired, use * k = gsl_ran_discrete(r,f); * Note that several different randevent struct's can be * simultaneously active. * Aside: A very clever alternative approach is described in * Abramowitz and Stegun, p 950, citing: Marsaglia, Random variables * and computers, Proc Third Prague Conference in Probability Theory, * 1962. A more accesible reference is: G. Marsaglia, Generating * discrete random numbers in a computer, Comm ACM 6, 37-38 (1963). * If anybody is interested, I (jt) have also coded up this version as * part of another software package. However, I've done some * comparisons, and the Walker method is both faster and more stingy * with memory. So, in the end I decided not to include it with the * GSL package. * Written 26 Jan 1999, James Theiler, jt@lanl.gov * Adapted to GSL, 30 Jan 1999, jt */ #include #include /* used for NULL, also fprintf(stderr,...) */ #include /* used for malloc's */ #include #include #include #include #define DEBUG 0 #define KNUTH_CONVENTION 1 /* Saves a few steps of arithmetic * in the call to gsl_ran_discrete() */ /*** Begin Stack (this code is used just in this file) ***/ /* Stack code converted to use unsigned indices (i.e. s->i == 0 now means an empty stack, instead of -1), for consistency and to give a bigger allowable range. BJG */ typedef struct { size_t N; /* max number of elts on stack */ size_t *v; /* array of values on the stack */ size_t i; /* index of top of stack */ } gsl_stack_t; static gsl_stack_t * new_stack(size_t N) { gsl_stack_t *s; s = (gsl_stack_t *)malloc(sizeof(gsl_stack_t)); s->N = N; s->i = 0; /* indicates stack is empty */ s->v = (size_t *)malloc(sizeof(size_t)*N); return s; } static int push_stack(gsl_stack_t *s, size_t v) { if ((s->i) >= (s->N)) { return -1; /* stack overflow (shouldn't happen) */ } (s->v)[s->i] = v; s->i += 1; return 0; } static size_t pop_stack(gsl_stack_t *s) { if ((s->i) == 0) { GSL_ERROR ("internal error - stack exhausted", GSL_ESANITY); } s->i -= 1; return ((s->v)[s->i]); } static inline size_t size_stack(const gsl_stack_t *s) { return s->i; } static void free_stack(gsl_stack_t *s) { free((char *)(s->v)); free((char *)s); } /*** End Stack ***/ /*** Begin Walker's Algorithm ***/ gsl_ran_discrete_t * gsl_ran_discrete_preproc(size_t Kevents, const double *ProbArray) { size_t k,b,s; gsl_ran_discrete_t *g; size_t nBigs, nSmalls; gsl_stack_t *Bigs; gsl_stack_t *Smalls; double *E; double pTotal = 0.0, mean, d; if (Kevents < 1) { /* Could probably treat Kevents=1 as a special case */ GSL_ERROR_VAL ("number of events must be a positive integer", GSL_EINVAL, 0); } /* Make sure elements of ProbArray[] are positive. * Won't enforce that sum is unity; instead will just normalize */ for (k=0; kK = Kevents; g->F = (double *)malloc(sizeof(double)*Kevents); g->A = (size_t *)malloc(sizeof(size_t)*Kevents); E = (double *)malloc(sizeof(double)*Kevents); if (E==NULL) { GSL_ERROR_VAL ("Cannot allocate memory for randevent", GSL_ENOMEM, 0); } for (k=0; kA[k] to indicate small or large */ size_t * const which = g->A; for (k=0; k 0) { s = pop_stack(Smalls); if (size_stack(Bigs) == 0) { (g->A)[s]=s; (g->F)[s]=1.0; continue; } b = pop_stack(Bigs); (g->A)[s]=b; (g->F)[s]=Kevents*E[s]; #if DEBUG fprintf(stderr,"s=%2d, A=%2d, F=%.4f\n",s,(g->A)[s],(g->F)[s]); #endif d = mean - E[s]; E[s] += d; /* now E[s] == mean */ E[b] -= d; if (E[b] < mean) { push_stack(Smalls,b); /* no longer big, join ranks of the small */ } else if (E[b] > mean) { push_stack(Bigs,b); /* still big, put it back where you found it */ } else { /* E[b]==mean implies it is finished too */ (g->A)[b]=b; (g->F)[b]=1.0; } } while (size_stack(Bigs) > 0) { b = pop_stack(Bigs); (g->A)[b]=b; (g->F)[b]=1.0; } /* Stacks have been emptied, and A and F have been filled */ if ( size_stack(Smalls) != 0) { GSL_ERROR_VAL ("Smalls stack has not been emptied", GSL_ESANITY, 0 ); } #if 0 /* if 1, then artificially set all F[k]'s to unity. This will * give wrong answers, but you'll get them faster. But, not * that much faster (I get maybe 20%); that's an upper bound * on what the optimal preprocessing would give. */ for (k=0; kF)[k] = 1.0; } #endif #if KNUTH_CONVENTION /* For convenience, set F'[k]=(k+F[k])/K */ /* This saves some arithmetic in gsl_ran_discrete(); I find that * it doesn't actually make much difference. */ for (k=0; kF)[k] += k; (g->F)[k] /= Kevents; } #endif free_stack(Bigs); free_stack(Smalls); free((char *)E); return g; } size_t gsl_ran_discrete(const gsl_rng *r, const gsl_ran_discrete_t *g) { size_t c=0; double u,f; u = gsl_rng_uniform(r); #if KNUTH_CONVENTION c = (u*(g->K)); #else u *= g->K; c = u; u -= c; #endif f = (g->F)[c]; /* fprintf(stderr,"c,f,u: %d %.4f %f\n",c,f,u); */ if (f == 1.0) return c; if (u < f) { return c; } else { return (g->A)[c]; } } void gsl_ran_discrete_free(gsl_ran_discrete_t *g) { RETURN_IF_NULL (g); free((char *)(g->A)); free((char *)(g->F)); free((char *)g); } double gsl_ran_discrete_pdf(size_t k, const gsl_ran_discrete_t *g) { size_t i,K; double f,p=0; K= g->K; if (k>K) return 0; for (i=0; iF)[i]; #if KNUTH_CONVENTION f = K*f-i; #endif if (i==k) { p += f; } else if (k == (g->A)[i]) { p += 1.0 - f; } } return p/K; } gsl/randist/ChangeLog0000644000175000017500000004105213536674414013152 0ustar eddedd2012-09-10 Rhys Ulerich * nbinomial.c Add include for gsl_sys.h to fix MSVC. Thanks to Brian Gladman for the suggestion. 2011-06-05 Brian Gough * nbinomial.c (gsl_ran_negative_binomial_pdf): avoid overflow in exp 2010-12-14 Brian Gough * gamma.c (gamma_frac): avoid potential division by zero, handle a=0 as a special case 2010-11-20 Brian Gough * chisq.c (gsl_ran_chisq_pdf): handle x=0 as special case (x=0, nu=2 is also special) 2010-10-12 Brian Gough * test.c (test_binomial_max): added a test case for n larger than maxint 2010-07-21 Brian Gough * beta.c (gsl_ran_beta_pdf): avoid overflow for x==0 || x==1 and a>1,b>1 2010-03-01 Brian Gough * test.c (testPDF): extend the test run if a sample fails on the first pass. 2010-02-24 Brian Gough * fdist.c (gsl_ran_fdist_pdf): compute log of pdf to avoid overflow/underflow. 2009-07-10 Brian Gough * exponential.c (gsl_ran_exponential): use log(1-u) to include 0 in the range of possible outputs 2009-07-09 Brian Gough * discrete.c (gsl_ran_discrete_free): handle NULL argument in free 2009-05-16 Brian Gough * discrete.c (push_stack): replace abort() with an error return value (pop_stack): replace abort() with GSL_ERROR (gsl_ran_discrete_preproc): use g->A as a temporary array to store the results of the test E[k] * test.c (test_gamma_vlarge): added test for a >= UINT_MAX. * gamma.c (gsl_ran_gamma_knuth): handle the case a >= UINT_MAX. 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2008-02-09 Brian Gough * gausszig.c (gsl_ran_gaussian_ziggurat): handle different generator ranges explicitly 2007-09-20 Brian Gough * multinomial.c (gsl_ran_multinomial_lnpdf): Handle case where n[k]==0 and p[k]==0 2007-08-20 Brian Gough * test.c (integrate): perform the integration of the pdf with the gsl_integration functions for accuracy (needed for dirichlet distribution) * dirichlet.c (ran_dirichlet_small): handle underflow for small alpha[] values 2007-02-20 Brian Gough * gamma.c (gsl_ran_gamma): avoid an unnecessary function call to gsl_ran_gamma_mt, since that maps back to gsl_ran_gamma now 2007-02-14 Brian Gough * test.c (testPDF): reduce the test sensitivity to avoid failures caused by weaknesses in the underlying rng 2007-01-26 Brian Gough * gamma.c (gsl_ran_gamma): the Marsaglia Tsang method is now the default (gsl_ran_gamma_knuth): new function name, preserving the original gsl_ran_gamma 2006-08-30 Brian Gough * discrete.c (gsl_ran_discrete_preproc): use GSL_ENOMEM instead of ENOMEM 2006-04-18 Brian Gough * gausszig.c (gsl_ran_gaussian_ziggurat): fix prototype const 2006-03-26 Brian Gough * multinomial.c (gsl_ran_multinomial_lnpdf): use gsl_sf_lnfact instead of gsl_sf_lngamma for an integer argument 2006-03-17 Brian Gough * binomial_tpe.c (gsl_ran_binomial): cast return values to unsigned 2006-02-27 Brian Gough * beta.c (gsl_ran_beta_pdf): work with logs avoid underflow/overflow 2006-02-19 Brian Gough * gauss.c (gsl_ran_gaussian): reject case where x=-1 || y=-1 for true symmetry (gsl_ran_gaussian_ratio_method): add Leva bounds * exppow.c (gsl_ran_exppow): added faster rejection methods 2006-02-01 Brian Gough * gausszig.c: added ziggurat gaussian (Jochen Voss) 2006-01-20 Brian Gough * binomial.c (gsl_ran_binomial_pdf): handle the cases p=0 and p=1 (gsl_ran_binomial_pdf): use log1p to calculate more accurately near k=0,p=0 2005-08-31 Brian Gough * test.c (main): free allocated memory before exit 2005-08-22 Brian Gough * binomial_tpe.c (gsl_ran_binomial): switch to the TPE algorithm as the default * binomial.c (gsl_ran_binomial_knuth): rename the original binomial function to ..._knuth 2004-05-30 Brian Gough * landau.c (gsl_ran_landau): fix potential array bounds overflow by extending array. 2004-04-22 Brian Gough * sphere.c (gsl_ran_dir_3d): removed unnecessary check for s==0.0 2003-07-25 Brian Gough * dirichlet.c: include gsl_sf_gamma.h instead of gsl_sf.h 2003-07-24 Brian Gough * binomial_tpe.c (gsl_ran_binomial_tpe): convert to double to avoid possible signed/unsigned problems in comparison (ix > n) (Stirling): removed spurious trailing ; 2003-05-14 Brian Gough * binomial_tpe.c: fast binomial algorithm using TPE method * test.c: added the tests for the fast Binomial TPE routine 2003-02-09 Brian Gough * discrete.c (gsl_ran_discrete_preproc): fixed bug reported by ahoward 2003-01-25 Brian Gough * chisq.c: corrected comments 2002-12-10 Brian Gough * multinomial.c (gsl_ran_multinomial): added multinomial distribution * dirichlet.c (gsl_ran_dirichlet_lnpdf): added logpdf function for accuracy Tue Aug 27 19:08:33 2002 Brian Gough * dirichlet.c: added dirichlet distribution Sat Aug 18 22:21:07 2001 Brian Gough * gsl-randist.c: moved to top-level directory Wed Jul 18 12:57:55 2001 Brian Gough * landau.c: added Landau distribution from Dave Morrison Sat Jun 23 12:30:38 2001 Brian Gough * gausstail.c (gsl_ran_gaussian_tail): allow negative values for the tail cutoff parameter. Mon May 21 12:17:07 2001 Brian Gough * shuffle.c (gsl_ran_choose): removed void * return value (gsl_ran_sample): removed void * return value Tue Apr 24 17:10:47 2001 Brian Gough * bernoulli.c (gsl_ran_bernoulli_pdf): removed unnecessary reference to gsl_sf.h Mon Apr 23 10:25:44 2001 Brian Gough * changed calls to old specfunc _impl functions to use new error handling conventions Tue Apr 17 19:57:59 2001 Brian Gough * weibull.c (gsl_ran_weibull): changed parameter mu to a, since it is not the mean (gsl_ran_weibull_pdf): changed parameter mu to a, since it is not the mean * logistic.c (gsl_ran_logistic): changed parameter mu to a, since it is not the mean (gsl_ran_logistic_pdf): changed parameter mu to a, since it is not the mean * laplace.c (gsl_ran_laplace): changed parameter mu to a, since it is not the mean (gsl_ran_laplace_pdf): changed parameter mu to a, since it is not the mean * exppow.c (gsl_ran_exppow): changed parameter mu to a, since it is not the mean (gsl_ran_exppow_pdf): changed parameter mu to a, since it is not the mean * cauchy.c (gsl_ran_cauchy): changed parameter mu to a, since it is not the mean (gsl_ran_cauchy_pdf): changed parameter mu to a, since it is not the mean Tue Feb 20 11:14:00 2001 Brian Gough * levy.c: added the skew symmetric routine from Keith Briggs, changed the definition of the original function to match and not use mu as a scale parameter. 2000-10-17 Brian Gough * shuffle.c (gsl_ran_shuffle): replaced calls of the form N*gsl_rng_uniform(r) with the integer form gsl_rng_uniform(r, N) Thu Sep 21 18:41:53 2000 Brian Gough * pareto.c (gsl_ran_pareto): made arguments and documentation consistent Wed May 10 14:55:43 2000 Brian Gough * gsl-randist.c (main): fixed bug for lognormal (it was calling exppow) Tadhg O'Meara * gsl-randist.c (main): print out all the dimensions for dir-nd, not just the first Tue Apr 25 20:45:14 2000 Brian Gough * shuffle.c (gsl_ran_sample): lifted the restriction that sampling with replacement could only be done less than n times for n objects. Tue Mar 14 21:31:46 2000 Brian Gough * logistic.c (gsl_ran_logistic_pdf): prevent overflow in computation of pdf for x < 0 Thu Oct 7 12:55:40 1999 Brian Gough * discrete.c (gsl_ran_discrete_free): removed unreachable code "return 0"; Fri Aug 6 16:02:08 1999 Brian Gough * sphere.c (gsl_ran_dir_nd): number of dimensions is now unsigned (size_t) * logarithmic.c (gsl_ran_logarithmic_pdf): removed warning about passing arg 2 of `pow' as floating rather than integer due to prototype Sun Aug 1 20:29:43 1999 Brian Gough * discrete.c: converted to GSL_ERROR macros for error handling Tue Jul 27 14:14:38 1999 Brian Gough * sphere.c (gsl_ran_dir_3d): use the Knop method only -- it is the best. (gsl_ran_dir_2d_trig_method): split out the trig method as an alternative for those platforms where it is faster * bigauss.c: split out the bivariate gaussian into its own source file 1999-06-30 Mark Galassi * discrete.c: (thanks to Frederick W. Wheeler ) changed the type stack_t to gsl_stack_t to avoid a conflict on HPUX. Sun Feb 28 20:41:18 1999 Brian Gough * gsl-randist.c (main): change cfree() to free(), which is standard. * discrete.c (gsl_ran_discrete_preproc): removed warning, pTotal is now initialized to zero. 1999-01-31 James Theiler * gauss.c added a new function gsl_ran_ugaussian_tail() which provides random numbers out on the tail of a gaussian. I also added (but then #ifdef'd out) a second implementation of ordinary gaussian numbers. This second implementation passes the tests okay, but it is a touch slower on my home Pentium. * gsl_randist.h added prototypes * test.c added tests for new gaussian tail function; also altered testMoment's ugaussian range (-1,1) value from .68 to a more accurate value. * ../doc/random.texi further updated 1999-01-30 James Theiler * discrete.c added implementation of Walker's algorithm for rapidly choosing a random integer k where the k's are distributed by a user-supplied array of probabilities P[k]. This includes functions gsl_ran_discrete(), gsl_ran_discrete_preproc(), gsl_ran_discrete_free(), and gsl_ran_discrete_pdf(). * gsl_randist.h added definition of structure gsl_ran_discrete_t, also prototypes of new functions defined in discrete.c * test.c added tests for gsl_ran_discrete(), also * test.c made some essentially cosmetic changes: 1/ redefined FUNC and FUNC2 macros so now output looks like "test gsl_ran_poisson" instead of "gsl_ran_test_poisson" 2/ changed names of toplevel tests, eg test_moments->testMoments, test_pdf->testPDF, etc, to distinguish them from all the individual functions test_poisson, test_binomial, etc. hope that's ok. * ../doc/random.texi updated to reflect the new discrete functions, as well as the new implementations of the sphere.c routines. 1999-01-28 James Theiler * sphere.c modified gsl_ran_dir_3d, to speed it up about 2x also modified gsl_ran_dir_2d, providing alternative algorithms (#ifdef'd appropriately). which is faster is machine dependent. also gsl_ran_dir_nd for n-dimensional direction, using gaussian random variables, normalized to the unit sphere also added ref's to Knuth and others describing the algorithms * gsl_randist.h added gsl_ran_dir_nd() prototype * gsl-randist.c added dir-nd option Tue Dec 15 23:08:57 1998 Brian Gough * updated all the functions depending on gsl_sf to use the new special function interface, based on gsl_sf_result Tue Nov 17 17:02:54 1998 Brian Gough * added #include to all top-level source files 1998-11-06 * test.c: ensured that M_PI is available by #include Wed Sep 16 14:44:08 1998 Brian Gough * rayleigh.c: added rayleigh tail distribution Sat Sep 12 13:03:19 1998 Brian Gough * rayleigh.c: added rayleigh distribution Mon Aug 31 James Theiler * Makefile.am: added ../utils/libutils.a to some LDADD's Mon Aug 17 14:31:55 1998 Brian Gough * gsl_randist.h: renamed discrete probability distribution parameters to use consistent k,n notation (k = sample, n = total, e.g. p(k) = function(k,n) ) Wed Aug 12 14:02:31 1998 Brian Gough * lognormal.c: added zeta and sigma (location and scale parameters) * logarithmic.c (gsl_ran_logarithmic): added logarithmic distribution Mon Aug 10 14:41:15 1998 Brian Gough * gsl-randist.c: added random direction functions * gamma.c: added the scale paramter for the gamma distribution Thu Aug 6 12:19:59 1998 Brian Gough * gauss.c (gsl_ran_bivariate_gaussian): added bivariate with correlations. * hyperg.c: renamed variables, fixed bug Wed Aug 5 11:21:45 1998 Brian Gough * gsl-dist.c: renamed gsl-dist.c to gsl-randist.c, for consistency Tue Aug 4 12:29:17 1998 Brian Gough * gsl-dist.c: a program for generating samples from the distributions * levy.c (gsl_ran_levy): take care of special case, a=1 * logistic.c: allow scale parameter, mu * weibull.c: allow scale parameter, mu * pareto.c: allow scale parameter, mu * exppow.c: handle the case a<1 using a transformation of the gamma distribution. * gamma.c (gsl_ran_gamma_int): removed the check for GSL_LOGINIFINITY since underflow can't occur for 32-bit random numbers in double precision. Mon Aug 3 13:09:39 1998 Brian Gough * test.c: added tests for shuffle and choose * pascal.c: added the Pascal distribution * hyperg.c: added the hypergeometric distribution Fri Jul 31 12:52:12 1998 Brian Gough * gsl_randist.h: renamed gsl_ran_two_sided_exponential to gsl_ran_laplace 1998-07-26 Mark Galassi * Makefile.am (INCLUDES): added -I$(top_srcdir), since gsl_math.h is needed, and that is in the top level source directory. This is necessary for using a separate build directory. Tue Jul 14 12:39:30 1998 Brian Gough * nbinomial.c: added Negative Binomial distribution * bernoulli.c: added Bernoulli distribution * poisson.c (gsl_ran_poisson): fixed a serious bug in the unrolled recursion which led to an incorrect result being returned for the large t case. This shows the importance of tests that cover all possible branches!!! * erlang.c (gsl_ran_erlang_pdf): renamed mu to a for consistency Thu Jul 2 15:47:05 1998 Brian Gough * added some extra distributions, lognormal.c gaussian.c logistic.c pareto.c geometric.c erlang.c chisq.c weibull.c, although they aren't finished yet Wed Jul 1 11:56:06 1998 Brian Gough * replace do { u = gsl_rng_uniform(r) } while (u == 0) by a direct call to gsl_rng_uniform_pos. Sun Jun 28 14:21:13 1998 Brian Gough * converted everything to work with rng style generators Sun Apr 19 19:06:59 1998 Brian Gough * made the 'gsl-dist' programs just output a single column of their random numbers (previously some of the programs printed both the uniform variate and the transformed number) * got rid of the 'bench-' programs. We will have a full testing suite soon. * renamed the installed programs from 'dist' to 'gsl-dist' so that they don't overwrite anything, e.g. it's possible the user might have other programs called 'gauss' or 'gamma' installed in /usr/local Sat Mar 21 16:09:16 1998 Brian Gough * laplace.c (gsl_ran_laplace): added a Laplace distribution (two-sided exponential) * lorentz.c (gsl_ran_lorentzian): added a Lorentz distribution 1998-01-30 Mark Galassi * Makefile.am (lib_LIBRARIES): now it creates libgslrandist.a so that we have gaussian and poisson distributions. gsl/randist/Makefile.am0000644000175000017500000000207713536674414013440 0ustar eddeddnoinst_LTLIBRARIES = libgslrandist.la pkginclude_HEADERS= gsl_randist.h AM_CPPFLAGS = -I$(top_srcdir) libgslrandist_la_SOURCES = bernoulli.c beta.c bigauss.c binomial.c cauchy.c chisq.c dirichlet.c discrete.c erlang.c exponential.c exppow.c fdist.c flat.c gamma.c gauss.c gausszig.c gausstail.c geometric.c gumbel.c hyperg.c laplace.c levy.c logarithmic.c logistic.c lognormal.c multinomial.c mvgauss.c nbinomial.c pareto.c pascal.c poisson.c rayleigh.c shuffle.c sphere.c tdist.c weibull.c landau.c binomial_tpe.c wishart.c TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_SOURCES = test.c test_LDADD = libgslrandist.la ../rng/libgslrng.la ../cdf/libgslcdf.la ../specfunc/libgslspecfunc.la ../integration/libgslintegration.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../statistics/libgslstatistics.la ../sort/libgslsort.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la gsl/randist/pareto.c0000644000175000017500000000254713536674414013044 0ustar eddedd/* randist/pareto.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* The Pareto distribution has the form, p(x) dx = (a/b) / (x/b)^(a+1) dx for x >= b */ double gsl_ran_pareto (const gsl_rng * r, double a, const double b) { double x = gsl_rng_uniform_pos (r); double z = pow (x, -1 / a); return b * z; } double gsl_ran_pareto_pdf (const double x, const double a, const double b) { if (x >= b) { double p = (a/b) / pow (x/b, a + 1); return p; } else { return 0; } } gsl/randist/rayleigh.c0000644000175000017500000000377613536674414013363 0ustar eddedd/* randist/rayleigh.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* The Rayleigh distribution has the form p(x) dx = (x / sigma^2) exp(-x^2/(2 sigma^2)) dx for x = 0 ... +infty */ double gsl_ran_rayleigh (const gsl_rng * r, const double sigma) { double u = gsl_rng_uniform_pos (r); return sigma * sqrt(-2.0 * log (u)); } double gsl_ran_rayleigh_pdf (const double x, const double sigma) { if (x < 0) { return 0 ; } else { double u = x / sigma ; double p = (u / sigma) * exp(-u * u / 2.0) ; return p; } } /* The Rayleigh tail distribution has the form p(x) dx = (x / sigma^2) exp((a^2 - x^2)/(2 sigma^2)) dx for x = a ... +infty */ double gsl_ran_rayleigh_tail (const gsl_rng * r, const double a, const double sigma) { double u = gsl_rng_uniform_pos (r); return sqrt(a * a - 2.0 * sigma * sigma * log (u)); } double gsl_ran_rayleigh_tail_pdf (const double x, const double a, const double sigma) { if (x < a) { return 0 ; } else { double u = x / sigma ; double v = a / sigma ; double p = (u / sigma) * exp((v + u) * (v - u) / 2.0) ; return p; } } gsl/randist/bigauss.c0000644000175000017500000000417713536674414013210 0ustar eddedd/* randist/bigauss.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* The Bivariate Gaussian probability distribution is p(x,y) dxdy = (1/(2 pi sigma_x sigma_y sqrt(c))) exp(-((x/sigma_x)^2 + (y/sigma_y)^2 - 2 r (x/sigma_x)(y/sigma_y))/2c) dxdy where c = 1-r^2 */ void gsl_ran_bivariate_gaussian (const gsl_rng * r, double sigma_x, double sigma_y, double rho, double *x, double *y) { double u, v, r2, scale; do { /* choose x,y in uniform square (-1,-1) to (+1,+1) */ u = -1 + 2 * gsl_rng_uniform (r); v = -1 + 2 * gsl_rng_uniform (r); /* see if it is in the unit circle */ r2 = u * u + v * v; } while (r2 > 1.0 || r2 == 0); scale = sqrt (-2.0 * log (r2) / r2); *x = sigma_x * u * scale; *y = sigma_y * (rho * u + sqrt(1 - rho*rho) * v) * scale; } double gsl_ran_bivariate_gaussian_pdf (const double x, const double y, const double sigma_x, const double sigma_y, const double rho) { double u = x / sigma_x ; double v = y / sigma_y ; double c = 1 - rho*rho ; double p = (1 / (2 * M_PI * sigma_x * sigma_y * sqrt(c))) * exp (-(u * u - 2 * rho * u * v + v * v) / (2 * c)); return p; } gsl/randist/geometric.c0000644000175000017500000000313013536674414013515 0ustar eddedd/* randist/geometric.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* Geometric distribution (bernoulli trial with probability p) prob(k) = p (1 - p)^(k-1) for n = 1, 2, 3, ... It gives the distribution of "waiting times" for an event that occurs with probability p. */ unsigned int gsl_ran_geometric (const gsl_rng * r, const double p) { double u = gsl_rng_uniform_pos (r); unsigned int k; if (p == 1) { k = 1; } else { k = log (u) / log (1 - p) + 1; } return k; } double gsl_ran_geometric_pdf (const unsigned int k, const double p) { if (k == 0) { return 0 ; } else if (k == 1) { return p ; } else { double P = p * pow (1 - p, k - 1.0); return P; } } gsl/randist/bernoulli.c0000644000175000017500000000255413536674414013543 0ustar eddedd/* randist/bernoulli.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* The bernoulli distribution has the form, prob(0) = 1-p, prob(1) = p */ unsigned int gsl_ran_bernoulli (const gsl_rng * r, double p) { double u = gsl_rng_uniform (r) ; if (u < p) { return 1 ; } else { return 0 ; } } double gsl_ran_bernoulli_pdf (const unsigned int k, double p) { if (k == 0) { return 1 - p ; } else if (k == 1) { return p ; } else { return 0 ; } } gsl/randist/hyperg.c0000644000175000017500000000542513536674414013046 0ustar eddedd/* randist/hyperg.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* The hypergeometric distribution has the form, prob(k) = choose(n1,t) choose(n2, t-k) / choose(n1+n2,t) where choose(a,b) = a!/(b!(a-b)!) n1 + n2 is the total population (tagged plus untagged) n1 is the tagged population t is the number of samples taken (without replacement) k is the number of tagged samples found */ unsigned int gsl_ran_hypergeometric (const gsl_rng * r, unsigned int n1, unsigned int n2, unsigned int t) { const unsigned int n = n1 + n2; unsigned int i = 0; unsigned int a = n1; unsigned int b = n1 + n2; unsigned int k = 0; if (t > n) { t = n ; } if (t < n / 2) { for (i = 0 ; i < t ; i++) { double u = gsl_rng_uniform(r) ; if (b * u < a) { k++ ; if (k == n1) return k ; a-- ; } b-- ; } return k; } else { for (i = 0 ; i < n - t ; i++) { double u = gsl_rng_uniform(r) ; if (b * u < a) { k++ ; if (k == n1) return n1 - k ; a-- ; } b-- ; } return n1 - k; } } double gsl_ran_hypergeometric_pdf (const unsigned int k, const unsigned int n1, const unsigned int n2, unsigned int t) { if (t > n1 + n2) { t = n1 + n2 ; } if (k > n1 || k > t) { return 0 ; } else if (t > n2 && k + n2 < t ) { return 0 ; } else { double p; double c1 = gsl_sf_lnchoose(n1,k); double c2 = gsl_sf_lnchoose(n2,t-k); double c3 = gsl_sf_lnchoose(n1+n2,t); p = exp(c1 + c2 - c3) ; return p; } } gsl/randist/exppow.c0000644000175000017500000000637213536674414013074 0ustar eddedd/* randist/exppow.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2006, 2007 James Theiler, Brian Gough * Copyright (C) 2006 Giulio Bottazzi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include /* The exponential power probability distribution is p(x) dx = (1/(2 a Gamma(1+1/b))) * exp(-|x/a|^b) dx for -infty < x < infty. For b = 1 it reduces to the Laplace distribution. The exponential power distribution is related to the gamma distribution by E = a * pow(G(1/b),1/b), where E is an exponential power variate and G is a gamma variate. We use this relation for b < 1. For b >=1 we use rejection methods based on the laplace and gaussian distributions which should be faster. For b>4 we revert to the gamma method. See P. R. Tadikamalla, "Random Sampling from the Exponential Power Distribution", Journal of the American Statistical Association, September 1980, Volume 75, Number 371, pages 683-686. */ double gsl_ran_exppow (const gsl_rng * r, const double a, const double b) { if (b < 1 || b > 4) { double u = gsl_rng_uniform (r); double v = gsl_ran_gamma (r, 1 / b, 1.0); double z = a * pow (v, 1 / b); if (u > 0.5) { return z; } else { return -z; } } else if (b == 1) { /* Laplace distribution */ return gsl_ran_laplace (r, a); } else if (b < 2) { /* Use laplace distribution for rejection method, from Tadikamalla */ double x, h, u; double B = pow (1 / b, 1 / b); do { x = gsl_ran_laplace (r, B); u = gsl_rng_uniform_pos (r); h = -pow (fabs (x), b) + fabs (x) / B - 1 + (1 / b); } while (log (u) > h); return a * x; } else if (b == 2) { /* Gaussian distribution */ return gsl_ran_gaussian (r, a / sqrt (2.0)); } else { /* Use gaussian for rejection method, from Tadikamalla */ double x, h, u; double B = pow (1 / b, 1 / b); do { x = gsl_ran_gaussian (r, B); u = gsl_rng_uniform_pos (r); h = -pow (fabs (x), b) + (x * x) / (2 * B * B) + (1 / b) - 0.5; } while (log (u) > h); return a * x; } } double gsl_ran_exppow_pdf (const double x, const double a, const double b) { double p; double lngamma = gsl_sf_lngamma (1 + 1 / b); p = (1 / (2 * a)) * exp (-pow (fabs (x / a), b) - lngamma); return p; } gsl/randist/shuffle.c0000644000175000017500000000672313536674414013206 0ustar eddedd/* randist/shuffle.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* Inline swap and copy functions for moving objects around */ static inline void swap (void * base, size_t size, size_t i, size_t j) { register char * a = size * i + (char *) base ; register char * b = size * j + (char *) base ; register size_t s = size ; if (i == j) return ; do { char tmp = *a; *a++ = *b; *b++ = tmp; } while (--s > 0); } static inline void copy (void * dest, size_t i, void * src, size_t j, size_t size) { register char * a = size * i + (char *) dest ; register char * b = size * j + (char *) src ; register size_t s = size ; do { *a++ = *b++; } while (--s > 0); } /* Randomly permute (shuffle) N indices Supply an array x[N] with nmemb members, each of size size and on return it will be shuffled into a random order. The algorithm is from Knuth, SemiNumerical Algorithms, v2, p139, who cites Moses and Oakford, and Durstenfeld */ void gsl_ran_shuffle (const gsl_rng * r, void * base, size_t n, size_t size) { size_t i ; for (i = n - 1; i > 0; i--) { size_t j = gsl_rng_uniform_int(r, i+1); /* originally (i + 1) * gsl_rng_uniform (r) */ swap (base, size, i, j) ; } } int gsl_ran_choose (const gsl_rng * r, void * dest, size_t k, void * src, size_t n, size_t size) { size_t i, j = 0; /* Choose k out of n items, return an array x[] of the k items. These items will prevserve the relative order of the original input -- you can use shuffle() to randomize the output if you wish */ if (k > n) { GSL_ERROR ("k is greater than n, cannot sample more than n items", GSL_EINVAL) ; } for (i = 0; i < n && j < k; i++) { if ((n - i) * gsl_rng_uniform (r) < k - j) { copy (dest, j, src, i, size) ; j++ ; } } return GSL_SUCCESS; } void gsl_ran_sample (const gsl_rng * r, void * dest, size_t k, void * src, size_t n, size_t size) { size_t i, j = 0; /* Choose k out of n items, with replacement */ for (i = 0; i < k; i++) { j = gsl_rng_uniform_int (r, n); /* originally n * gsl_rng_uniform (r) */ copy (dest, i, src, j, size) ; } } gsl/randist/mvgauss.c0000644000175000017500000001653313536674414013237 0ustar eddedd/* randist/mvgauss.c * * Copyright (C) 2016 Timothée Flutre, Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include static int multivar_vcov (const double data[], size_t d, size_t tda, size_t n, double vcov[], size_t tda2); /* Generate a random vector from a multivariate Gaussian distribution using * the Cholesky decomposition of the variance-covariance matrix, following * "Computational Statistics" from Gentle (2009), section 7.4. * * mu mean vector (dimension d) * L matrix resulting from the Cholesky decomposition of * variance-covariance matrix Sigma = L L^T (dimension d x d) * result output vector (dimension d) */ int gsl_ran_multivariate_gaussian (const gsl_rng * r, const gsl_vector * mu, const gsl_matrix * L, gsl_vector * result) { const size_t M = L->size1; const size_t N = L->size2; if (M != N) { GSL_ERROR("requires square matrix", GSL_ENOTSQR); } else if (mu->size != M) { GSL_ERROR("incompatible dimension of mean vector with variance-covariance matrix", GSL_EBADLEN); } else if (result->size != M) { GSL_ERROR("incompatible dimension of result vector", GSL_EBADLEN); } else { size_t i; for (i = 0; i < M; ++i) gsl_vector_set(result, i, gsl_ran_ugaussian(r)); gsl_blas_dtrmv(CblasLower, CblasNoTrans, CblasNonUnit, L, result); gsl_vector_add(result, mu); return GSL_SUCCESS; } } /* Compute the log of the probability density function at a given quantile * vector for a multivariate Gaussian distribution using the Cholesky * decomposition of the variance-covariance matrix. * * x vector of quantiles (dimension d) * mu mean vector (dimension d) * L matrix resulting from the Cholesky decomposition of * variance-covariance matrix Sigma = L L^T (dimension d x d) * result output of the density (dimension 1) * work vector used for intermediate computations (dimension d) */ int gsl_ran_multivariate_gaussian_log_pdf (const gsl_vector * x, const gsl_vector * mu, const gsl_matrix * L, double * result, gsl_vector * work) { const size_t M = L->size1; const size_t N = L->size2; if (M != N) { GSL_ERROR("requires square matrix", GSL_ENOTSQR); } else if (mu->size != M) { GSL_ERROR("incompatible dimension of mean vector with variance-covariance matrix", GSL_EBADLEN); } else if (x->size != M) { GSL_ERROR("incompatible dimension of quantile vector", GSL_EBADLEN); } else if (work->size != M) { GSL_ERROR("incompatible dimension of work vector", GSL_EBADLEN); } else { size_t i; double quadForm; /* (x - mu)' Sigma^{-1} (x - mu) */ double logSqrtDetSigma; /* log [ sqrt(|Sigma|) ] */ /* compute: work = x - mu */ for (i = 0; i < M; ++i) { double xi = gsl_vector_get(x, i); double mui = gsl_vector_get(mu, i); gsl_vector_set(work, i, xi - mui); } /* compute: work = L^{-1} * (x - mu) */ gsl_blas_dtrsv(CblasLower, CblasNoTrans, CblasNonUnit, L, work); /* compute: quadForm = (x - mu)' Sigma^{-1} (x - mu) */ gsl_blas_ddot(work, work, &quadForm); /* compute: log [ sqrt(|Sigma|) ] = sum_i log L_{ii} */ logSqrtDetSigma = 0.0; for (i = 0; i < M; ++i) { double Lii = gsl_matrix_get(L, i, i); logSqrtDetSigma += log(Lii); } *result = -0.5*quadForm - logSqrtDetSigma - 0.5*M*log(2.0*M_PI); return GSL_SUCCESS; } } int gsl_ran_multivariate_gaussian_pdf (const gsl_vector * x, const gsl_vector * mu, const gsl_matrix * L, double * result, gsl_vector * work) { double logpdf; int status = gsl_ran_multivariate_gaussian_log_pdf(x, mu, L, &logpdf, work); if (status == GSL_SUCCESS) *result = exp(logpdf); return status; } /* Compute the maximum-likelihood estimate of the mean vector of samples * from a multivariate Gaussian distribution. * * Example from R (GPL): http://www.r-project.org/ * (samples <- matrix(c(4.348817, 2.995049, -3.793431, 4.711934, 1.190864, -1.357363), nrow=3, ncol=2)) * colMeans(samples) # 1.183478 1.515145 */ int gsl_ran_multivariate_gaussian_mean (const gsl_matrix * X, gsl_vector * mu_hat) { const size_t M = X->size1; const size_t N = X->size2; if (N != mu_hat->size) { GSL_ERROR("mu_hat vector has wrong size", GSL_EBADLEN); } else { size_t j; for (j = 0; j < N; ++j) { gsl_vector_const_view c = gsl_matrix_const_column(X, j); double mean = gsl_stats_mean(c.vector.data, c.vector.stride, M); gsl_vector_set(mu_hat, j, mean); } return GSL_SUCCESS; } } /* Compute the maximum-likelihood estimate of the variance-covariance matrix * of samples from a multivariate Gaussian distribution. */ int gsl_ran_multivariate_gaussian_vcov (const gsl_matrix * X, gsl_matrix * sigma_hat) { const size_t M = X->size1; const size_t N = X->size2; if (sigma_hat->size1 != sigma_hat->size2) { GSL_ERROR("sigma_hat must be a square matrix", GSL_ENOTSQR); } else if (N != sigma_hat->size1) { GSL_ERROR("sigma_hat does not match X matrix dimensions", GSL_EBADLEN); } else { return multivar_vcov (X->data, N, X->tda, M, sigma_hat->data, sigma_hat->tda); } } /* Example from R (GPL): http://www.r-project.org/ * (samples <- matrix(c(4.348817, 2.995049, -3.793431, 4.711934, 1.190864, -1.357363), nrow=3, ncol=2)) * cov(samples) # 19.03539 11.91384 \n 11.91384 9.28796 */ static int multivar_vcov (const double data[], size_t d, size_t tda, size_t n, double vcov[], size_t tda2) { size_t j1 = 0, j2 = 0; for (j1 = 0; j1 < d; ++j1) { vcov[j1 * tda2 + j1] = gsl_stats_variance(&(data[j1]), tda, n); for (j2 = j1 + 1; j2 < d; ++j2) { vcov[j1 * tda2 + j2] = gsl_stats_covariance(&(data[j1]), tda, &(data[j2]), tda, n); vcov[j2 * tda2 + j1] = vcov[j1 * tda2 + j2]; } } return GSL_SUCCESS; } gsl/randist/binomial.c0000644000175000017500000000441113536674414013334 0ustar eddedd/* randist/binomial.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include /* The binomial distribution has the form, prob(k) = n!/(k!(n-k)!) * p^k (1-p)^(n-k) for k = 0, 1, ..., n This is the algorithm from Knuth */ /* Default binomial generator is now in binomial_tpe.c */ unsigned int gsl_ran_binomial_knuth (const gsl_rng * r, double p, unsigned int n) { unsigned int i, a, b, k = 0; while (n > 10) /* This parameter is tunable */ { double X; a = 1 + (n / 2); b = 1 + n - a; X = gsl_ran_beta (r, (double) a, (double) b); if (X >= p) { n = a - 1; p /= X; } else { k += a; n = b - 1; p = (p - X) / (1 - X); } } for (i = 0; i < n; i++) { double u = gsl_rng_uniform (r); if (u < p) k++; } return k; } double gsl_ran_binomial_pdf (const unsigned int k, const double p, const unsigned int n) { if (k > n) { return 0; } else { double P; if (p == 0) { P = (k == 0) ? 1 : 0; } else if (p == 1) { P = (k == n) ? 1 : 0; } else { double ln_Cnk = gsl_sf_lnchoose (n, k); P = ln_Cnk + k * log (p) + (n - k) * log1p (-p); P = exp (P); } return P; } } gsl/randist/gumbel.c0000644000175000017500000000346013536674414013020 0ustar eddedd/* randist/gumbel.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* The Type I Gumbel distribution has the form, p(x) dx = a b exp(-(b exp(-ax) + ax)) dx and the Type II Gumbel distribution has the form, p(x) dx = b a x^-(a+1) exp(-b x^-a)) dx */ double gsl_ran_gumbel1 (const gsl_rng * r, const double a, const double b) { double x = gsl_rng_uniform_pos (r); double z = (log(b) - log(-log(x))) / a; return z; } double gsl_ran_gumbel1_pdf (const double x, const double a, const double b) { double p = a * b * exp (-(b * exp(-a * x) + a * x)); return p; } double gsl_ran_gumbel2 (const gsl_rng * r, const double a, const double b) { double x = gsl_rng_uniform_pos (r); double z = pow(-b / log(x), 1/a); return z; } double gsl_ran_gumbel2_pdf (const double x, const double a, const double b) { if (x <= 0) { return 0 ; } else { double p = b * a * pow(x,-(a+1)) * exp (-b * pow(x, -a)); return p; } } gsl/randist/gausszig.c0000644000175000017500000002272313536674414013404 0ustar eddedd/* gauss.c - gaussian random numbers, using the Ziggurat method * * Copyright (C) 2005 Jochen Voss. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This routine is based on the following article, with a couple of * modifications which simplify the implementation. * * George Marsaglia, Wai Wan Tsang * The Ziggurat Method for Generating Random Variables * Journal of Statistical Software, vol. 5 (2000), no. 8 * http://www.jstatsoft.org/v05/i08/ * * The modifications are: * * 1) use 128 steps instead of 256 to decrease the amount of static * data necessary. * * 2) use an acceptance sampling from an exponential wedge * exp(-R*(x-R/2)) for the tail of the base strip to simplify the * implementation. The area of exponential wedge is used in * calculating 'v' and the coefficients in ziggurat table, so the * coefficients differ slightly from those in the Marsaglia and Tsang * paper. * * See also Leong et al, "A Comment on the Implementation of the * Ziggurat Method", Journal of Statistical Software, vol 5 (2005), no 7. * */ #include #include #include #include #include /* position of right-most step */ #define PARAM_R 3.44428647676 /* tabulated values for the heigt of the Ziggurat levels */ static const double ytab[128] = { 1, 0.963598623011, 0.936280813353, 0.913041104253, 0.892278506696, 0.873239356919, 0.855496407634, 0.838778928349, 0.822902083699, 0.807732738234, 0.793171045519, 0.779139726505, 0.765577436082, 0.752434456248, 0.739669787677, 0.727249120285, 0.715143377413, 0.703327646455, 0.691780377035, 0.68048276891, 0.669418297233, 0.65857233912, 0.647931876189, 0.637485254896, 0.62722199145, 0.617132611532, 0.607208517467, 0.597441877296, 0.587825531465, 0.578352913803, 0.569017984198, 0.559815170911, 0.550739320877, 0.541785656682, 0.532949739145, 0.524227434628, 0.515614886373, 0.507108489253, 0.498704867478, 0.490400854812, 0.482193476986, 0.47407993601, 0.466057596125, 0.458123971214, 0.450276713467, 0.442513603171, 0.434832539473, 0.427231532022, 0.419708693379, 0.41226223212, 0.404890446548, 0.397591718955, 0.390364510382, 0.383207355816, 0.376118859788, 0.369097692334, 0.362142585282, 0.355252328834, 0.348425768415, 0.341661801776, 0.334959376311, 0.328317486588, 0.321735172063, 0.31521151497, 0.308745638367, 0.302336704338, 0.29598391232, 0.289686497571, 0.283443729739, 0.27725491156, 0.271119377649, 0.265036493387, 0.259005653912, 0.253026283183, 0.247097833139, 0.241219782932, 0.235391638239, 0.229612930649, 0.223883217122, 0.218202079518, 0.212569124201, 0.206983981709, 0.201446306496, 0.195955776745, 0.190512094256, 0.185114984406, 0.179764196185, 0.174459502324, 0.169200699492, 0.1639876086, 0.158820075195, 0.153697969964, 0.148621189348, 0.143589656295, 0.138603321143, 0.133662162669, 0.128766189309, 0.123915440582, 0.119109988745, 0.114349940703, 0.10963544023, 0.104966670533, 0.100343857232, 0.0957672718266, 0.0912372357329, 0.0867541250127, 0.082318375932, 0.0779304915295, 0.0735910494266, 0.0693007111742, 0.065060233529, 0.0608704821745, 0.056732448584, 0.05264727098, 0.0486162607163, 0.0446409359769, 0.0407230655415, 0.0368647267386, 0.0330683839378, 0.0293369977411, 0.0256741818288, 0.0220844372634, 0.0185735200577, 0.0151490552854, 0.0118216532614, 0.00860719483079, 0.00553245272614, 0.00265435214565 }; /* tabulated values for 2^24 times x[i]/x[i+1], * used to accept for U*x[i+1]<=x[i] without any floating point operations */ static const unsigned long ktab[128] = { 0, 12590644, 14272653, 14988939, 15384584, 15635009, 15807561, 15933577, 16029594, 16105155, 16166147, 16216399, 16258508, 16294295, 16325078, 16351831, 16375291, 16396026, 16414479, 16431002, 16445880, 16459343, 16471578, 16482744, 16492970, 16502368, 16511031, 16519039, 16526459, 16533352, 16539769, 16545755, 16551348, 16556584, 16561493, 16566101, 16570433, 16574511, 16578353, 16581977, 16585398, 16588629, 16591685, 16594575, 16597311, 16599901, 16602354, 16604679, 16606881, 16608968, 16610945, 16612818, 16614592, 16616272, 16617861, 16619363, 16620782, 16622121, 16623383, 16624570, 16625685, 16626730, 16627708, 16628619, 16629465, 16630248, 16630969, 16631628, 16632228, 16632768, 16633248, 16633671, 16634034, 16634340, 16634586, 16634774, 16634903, 16634972, 16634980, 16634926, 16634810, 16634628, 16634381, 16634066, 16633680, 16633222, 16632688, 16632075, 16631380, 16630598, 16629726, 16628757, 16627686, 16626507, 16625212, 16623794, 16622243, 16620548, 16618698, 16616679, 16614476, 16612071, 16609444, 16606571, 16603425, 16599973, 16596178, 16591995, 16587369, 16582237, 16576520, 16570120, 16562917, 16554758, 16545450, 16534739, 16522287, 16507638, 16490152, 16468907, 16442518, 16408804, 16364095, 16301683, 16207738, 16047994, 15704248, 15472926 }; /* tabulated values of 2^{-24}*x[i] */ static const double wtab[128] = { 1.62318314817e-08, 2.16291505214e-08, 2.54246305087e-08, 2.84579525938e-08, 3.10340022482e-08, 3.33011726243e-08, 3.53439060345e-08, 3.72152672658e-08, 3.8950989572e-08, 4.05763964764e-08, 4.21101548915e-08, 4.35664624904e-08, 4.49563968336e-08, 4.62887864029e-08, 4.75707945735e-08, 4.88083237257e-08, 5.00063025384e-08, 5.11688950428e-08, 5.22996558616e-08, 5.34016475624e-08, 5.44775307871e-08, 5.55296344581e-08, 5.65600111659e-08, 5.75704813695e-08, 5.85626690412e-08, 5.95380306862e-08, 6.04978791776e-08, 6.14434034901e-08, 6.23756851626e-08, 6.32957121259e-08, 6.42043903937e-08, 6.51025540077e-08, 6.59909735447e-08, 6.68703634341e-08, 6.77413882848e-08, 6.8604668381e-08, 6.94607844804e-08, 7.03102820203e-08, 7.11536748229e-08, 7.1991448372e-08, 7.2824062723e-08, 7.36519550992e-08, 7.44755422158e-08, 7.52952223703e-08, 7.61113773308e-08, 7.69243740467e-08, 7.77345662086e-08, 7.85422956743e-08, 7.93478937793e-08, 8.01516825471e-08, 8.09539758128e-08, 8.17550802699e-08, 8.25552964535e-08, 8.33549196661e-08, 8.41542408569e-08, 8.49535474601e-08, 8.57531242006e-08, 8.65532538723e-08, 8.73542180955e-08, 8.8156298059e-08, 8.89597752521e-08, 8.97649321908e-08, 9.05720531451e-08, 9.138142487e-08, 9.21933373471e-08, 9.30080845407e-08, 9.38259651738e-08, 9.46472835298e-08, 9.54723502847e-08, 9.63014833769e-08, 9.71350089201e-08, 9.79732621669e-08, 9.88165885297e-08, 9.96653446693e-08, 1.00519899658e-07, 1.0138063623e-07, 1.02247952126e-07, 1.03122261554e-07, 1.04003996769e-07, 1.04893609795e-07, 1.05791574313e-07, 1.06698387725e-07, 1.07614573423e-07, 1.08540683296e-07, 1.09477300508e-07, 1.1042504257e-07, 1.11384564771e-07, 1.12356564007e-07, 1.13341783071e-07, 1.14341015475e-07, 1.15355110887e-07, 1.16384981291e-07, 1.17431607977e-07, 1.18496049514e-07, 1.19579450872e-07, 1.20683053909e-07, 1.21808209468e-07, 1.2295639141e-07, 1.24129212952e-07, 1.25328445797e-07, 1.26556042658e-07, 1.27814163916e-07, 1.29105209375e-07, 1.30431856341e-07, 1.31797105598e-07, 1.3320433736e-07, 1.34657379914e-07, 1.36160594606e-07, 1.37718982103e-07, 1.39338316679e-07, 1.41025317971e-07, 1.42787873535e-07, 1.44635331499e-07, 1.4657889173e-07, 1.48632138436e-07, 1.50811780719e-07, 1.53138707402e-07, 1.55639532047e-07, 1.58348931426e-07, 1.61313325908e-07, 1.64596952856e-07, 1.68292495203e-07, 1.72541128694e-07, 1.77574279496e-07, 1.83813550477e-07, 1.92166040885e-07, 2.05295471952e-07, 2.22600839893e-07 }; double gsl_ran_gaussian_ziggurat (const gsl_rng * r, const double sigma) { unsigned long int i, j; int sign; double x, y; const unsigned long int range = r->type->max - r->type->min; const unsigned long int offset = r->type->min; while (1) { if (range >= 0xFFFFFFFF) { unsigned long int k = gsl_rng_get(r) - offset; i = (k & 0xFF); j = (k >> 8) & 0xFFFFFF; } else if (range >= 0x00FFFFFF) { unsigned long int k1 = gsl_rng_get(r) - offset; unsigned long int k2 = gsl_rng_get(r) - offset; i = (k1 & 0xFF); j = (k2 & 0x00FFFFFF); } else { i = gsl_rng_uniform_int (r, 256); /* choose the step */ j = gsl_rng_uniform_int (r, 16777216); /* sample from 2^24 */ } sign = (i & 0x80) ? +1 : -1; i &= 0x7f; x = j * wtab[i]; if (j < ktab[i]) break; if (i < 127) { double y0, y1, U1; y0 = ytab[i]; y1 = ytab[i + 1]; U1 = gsl_rng_uniform (r); y = y1 + (y0 - y1) * U1; } else { double U1, U2; U1 = 1.0 - gsl_rng_uniform (r); U2 = gsl_rng_uniform (r); x = PARAM_R - log (U1) / PARAM_R; y = exp (-PARAM_R * (x - 0.5 * PARAM_R)) * U2; } if (y < exp (-0.5 * x * x)) break; } return sign * sigma * x; } gsl/randist/binomial_tpe.c0000644000175000017500000003120213536674414014202 0ustar eddedd/* randist/binomial_tpe.c * * Copyright (C) 1996, 2003, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include /* The binomial distribution has the form, f(x) = n!/(x!(n-x)!) * p^x (1-p)^(n-x) for integer 0 <= x <= n = 0 otherwise This implementation follows the public domain ranlib function "ignbin", the bulk of which is the BTPE (Binomial Triangle Parallelogram Exponential) algorithm introduced in Kachitvichyanukul and Schmeiser[1]. It has been translated to use modern C coding standards. If n is small and/or p is near 0 or near 1 (specifically, if n*min(p,1-p) < SMALL_MEAN), then a different algorithm, called BINV, is used which has an average runtime that scales linearly with n*min(p,1-p). But for larger problems, the BTPE algorithm takes the form of two functions b(x) and t(x) -- "bottom" and "top" -- for which b(x) < f(x)/f(M) < t(x), with M = floor(n*p+p). b(x) defines a triangular region, and t(x) includes a parallelogram and two tails. Details (including a nice drawing) are in the paper. [1] Kachitvichyanukul, V. and Schmeiser, B. W. Binomial Random Variate Generation. Communications of the ACM, 31, 2 (February, 1988) 216. Note, Bruce Schmeiser (personal communication) points out that if you want very fast binomial deviates, and you are happy with approximate results, and/or n and n*p are both large, then you can just use gaussian estimates: mean=n*p, variance=n*p*(1-p). This implementation by James Theiler, April 2003, after obtaining permission -- and some good advice -- from Drs. Kachitvichyanukul and Schmeiser to use their code as a starting point, and then doing a little bit of tweaking. Additional polishing for GSL coding standards by Brian Gough. */ #define SMALL_MEAN 14 /* If n*p < SMALL_MEAN then use BINV algorithm. The ranlib implementation used cutoff=30; but on my computer 14 works better */ #define BINV_CUTOFF 110 /* In BINV, do not permit ix too large */ #define FAR_FROM_MEAN 20 /* If ix-n*p is larger than this, then use the "squeeze" algorithm. Ranlib used 20, and this seems to be the best choice on my machine as well */ #define LNFACT(x) gsl_sf_lnfact(x) inline static double Stirling (double y1) { double y2 = y1 * y1; double s = (13860.0 - (462.0 - (132.0 - (99.0 - 140.0 / y2) / y2) / y2) / y2) / y1 / 166320.0; return s; } unsigned int gsl_ran_binomial_tpe (const gsl_rng * rng, double p, unsigned int n) { return gsl_ran_binomial (rng, p, n); } unsigned int gsl_ran_binomial (const gsl_rng * rng, double p, unsigned int n) { int ix; /* return value */ int flipped = 0; double q, s, np; if (n == 0) return 0; if (p > 0.5) { p = 1.0 - p; /* work with small p */ flipped = 1; } q = 1 - p; s = p / q; np = n * p; /* Inverse cdf logic for small mean (BINV in K+S) */ if (np < SMALL_MEAN) { double f0 = gsl_pow_uint (q, n); /* f(x), starting with x=0 */ while (1) { /* This while(1) loop will almost certainly only loop once; but * if u=1 to within a few epsilons of machine precision, then it * is possible for roundoff to prevent the main loop over ix to * achieve its proper value. following the ranlib implementation, * we introduce a check for that situation, and when it occurs, * we just try again. */ double f = f0; double u = gsl_rng_uniform (rng); for (ix = 0; ix <= BINV_CUTOFF; ++ix) { if (u < f) goto Finish; u -= f; /* Use recursion f(x+1) = f(x)*[(n-x)/(x+1)]*[p/(1-p)] */ f *= s * (n - ix) / (ix + 1); } /* It should be the case that the 'goto Finish' was encountered * before this point was ever reached. But if we have reached * this point, then roundoff has prevented u from decreasing * all the way to zero. This can happen only if the initial u * was very nearly equal to 1, which is a rare situation. In * that rare situation, we just try again. * * Note, following the ranlib implementation, we loop ix only to * a hardcoded value of SMALL_MEAN_LARGE_N=110; we could have * looped to n, and 99.99...% of the time it won't matter. This * choice, I think is a little more robust against the rare * roundoff error. If n>LARGE_N, then it is technically * possible for ix>LARGE_N, but it is astronomically rare, and * if ix is that large, it is more likely due to roundoff than * probability, so better to nip it at LARGE_N than to take a * chance that roundoff will somehow conspire to produce an even * larger (and more improbable) ix. If n= SMALL_MEAN, we invoke the BTPE algorithm */ int k; double ffm = np + p; /* ffm = n*p+p */ int m = (int) ffm; /* m = int floor[n*p+p] */ double fm = m; /* fm = double m; */ double xm = fm + 0.5; /* xm = half integer mean (tip of triangle) */ double npq = np * q; /* npq = n*p*q */ /* Compute cumulative area of tri, para, exp tails */ /* p1: radius of triangle region; since height=1, also: area of region */ /* p2: p1 + area of parallelogram region */ /* p3: p2 + area of left tail */ /* p4: p3 + area of right tail */ /* pi/p4: probability of i'th area (i=1,2,3,4) */ /* Note: magic numbers 2.195, 4.6, 0.134, 20.5, 15.3 */ /* These magic numbers are not adjustable...at least not easily! */ double p1 = floor (2.195 * sqrt (npq) - 4.6 * q) + 0.5; /* xl, xr: left and right edges of triangle */ double xl = xm - p1; double xr = xm + p1; /* Parameter of exponential tails */ /* Left tail: t(x) = c*exp(-lambda_l*[xl - (x+0.5)]) */ /* Right tail: t(x) = c*exp(-lambda_r*[(x+0.5) - xr]) */ double c = 0.134 + 20.5 / (15.3 + fm); double p2 = p1 * (1.0 + c + c); double al = (ffm - xl) / (ffm - xl * p); double lambda_l = al * (1.0 + 0.5 * al); double ar = (xr - ffm) / (xr * q); double lambda_r = ar * (1.0 + 0.5 * ar); double p3 = p2 + c / lambda_l; double p4 = p3 + c / lambda_r; double var, accept; double u, v; /* random variates */ TryAgain: /* generate random variates, u specifies which region: Tri, Par, Tail */ u = gsl_rng_uniform (rng) * p4; v = gsl_rng_uniform (rng); if (u <= p1) { /* Triangular region */ ix = (int) (xm - p1 * v + u); goto Finish; } else if (u <= p2) { /* Parallelogram region */ double x = xl + (u - p1) / c; v = v * c + 1.0 - fabs (x - xm) / p1; if (v > 1.0 || v <= 0.0) goto TryAgain; ix = (int) x; } else if (u <= p3) { /* Left tail */ ix = (int) (xl + log (v) / lambda_l); if (ix < 0) goto TryAgain; v *= ((u - p2) * lambda_l); } else { /* Right tail */ ix = (int) (xr - log (v) / lambda_r); if (ix > (double) n) goto TryAgain; v *= ((u - p3) * lambda_r); } /* At this point, the goal is to test whether v <= f(x)/f(m) * * v <= f(x)/f(m) = (m!(n-m)! / (x!(n-x)!)) * (p/q)^{x-m} * */ /* Here is a direct test using logarithms. It is a little * slower than the various "squeezing" computations below, but * if things are working, it should give exactly the same answer * (given the same random number seed). */ #ifdef DIRECT var = log (v); accept = LNFACT (m) + LNFACT (n - m) - LNFACT (ix) - LNFACT (n - ix) + (ix - m) * log (p / q); #else /* SQUEEZE METHOD */ /* More efficient determination of whether v < f(x)/f(M) */ k = abs (ix - m); if (k <= FAR_FROM_MEAN) { /* * If ix near m (ie, |ix-m| ix) { int i; for (i = ix + 1; i <= m; i++) { f /= (g / i - s); } } accept = f; } else { /* If ix is far from the mean m: k=ABS(ix-m) large */ var = log (v); if (k < npq / 2 - 1) { /* "Squeeze" using upper and lower bounds on * log(f(x)) The squeeze condition was derived * under the condition k < npq/2-1 */ double amaxp = k / npq * ((k * (k / 3.0 + 0.625) + (1.0 / 6.0)) / npq + 0.5); double ynorm = -(k * k / (2.0 * npq)); if (var < ynorm - amaxp) goto Finish; if (var > ynorm + amaxp) goto TryAgain; } /* Now, again: do the test log(v) vs. log f(x)/f(M) */ #if USE_EXACT /* This is equivalent to the above, but is a little (~20%) slower */ /* There are five log's vs three above, maybe that's it? */ accept = LNFACT (m) + LNFACT (n - m) - LNFACT (ix) - LNFACT (n - ix) + (ix - m) * log (p / q); #else /* USE STIRLING */ /* The "#define Stirling" above corresponds to the first five * terms in asymptoic formula for * log Gamma (y) - (y-0.5)log(y) + y - 0.5 log(2*pi); * See Abramowitz and Stegun, eq 6.1.40 */ /* Note below: two Stirling's are added, and two are * subtracted. In both K+S, and in the ranlib * implementation, all four are added. I (jt) believe that * is a mistake -- this has been confirmed by personal * correspondence w/ Dr. Kachitvichyanukul. Note, however, * the corrections are so small, that I couldn't find an * example where it made a difference that could be * observed, let alone tested. In fact, define'ing Stirling * to be zero gave identical results!! In practice, alv is * O(1), ranging 0 to -10 or so, while the Stirling * correction is typically O(10^{-5}) ...setting the * correction to zero gives about a 2% performance boost; * might as well keep it just to be pendantic. */ { double x1 = ix + 1.0; double w1 = n - ix + 1.0; double f1 = fm + 1.0; double z1 = n + 1.0 - fm; accept = xm * log (f1 / x1) + (n - m + 0.5) * log (z1 / w1) + (ix - m) * log (w1 * p / (x1 * q)) + Stirling (f1) + Stirling (z1) - Stirling (x1) - Stirling (w1); } #endif #endif } if (var <= accept) { goto Finish; } else { goto TryAgain; } } Finish: return (flipped) ? (n - ix) : (unsigned int)ix; } gsl/randist/erlang.c0000644000175000017500000000274713536674414013024 0ustar eddedd/* randist/erlang.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* The sum of N samples from an exponential distribution gives an Erlang distribution p(x) dx = x^(n-1) exp (-x/a) / ((n-1)!a^n) dx for x = 0 ... +infty */ double gsl_ran_erlang (const gsl_rng * r, const double a, const double n) { return gsl_ran_gamma (r, n, a); } double gsl_ran_erlang_pdf (const double x, const double a, const double n) { if (x <= 0) { return 0 ; } else { double p; double lngamma = gsl_sf_lngamma (n); p = exp ((n - 1) * log (x/a) - x/a - lngamma) / a; return p; } } gsl/randist/logarithmic.c0000644000175000017500000000351713536674414014052 0ustar eddedd/* randist/logarithmic.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* Logarithmic distribution prob(n) = p^n / (n log(1/(1-p)) for n = 1, 2, 3, ... We use Kemp's second accelerated generator, from Luc Devroye's book on "Non-Uniform Random Variate Generation", Springer */ unsigned int gsl_ran_logarithmic (const gsl_rng * r, const double p) { double c = log (1-p) ; double v = gsl_rng_uniform_pos (r); if (v >= p) { return 1 ; } else { double u = gsl_rng_uniform_pos (r); double q = 1 - exp (c * u); if (v <= q*q) { double x = 1 + log(v)/log(q) ; return x ; } else if (v <= q) { return 2; } else { return 1 ; } } } double gsl_ran_logarithmic_pdf (const unsigned int k, const double p) { if (k == 0) { return 0 ; } else { double P = pow(p, (double)k) / (double) k / log(1/(1-p)) ; return P; } } gsl/randist/pascal.c0000644000175000017500000000322513536674414013007 0ustar eddedd/* randist/pascal.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* The Pascal distribution is a negative binomial with valued integer n prob(k) = (n - 1 + k)!/(n!(k - 1)!) * p^n (1-p)^k for k = 0, 1, ..., n */ unsigned int gsl_ran_pascal (const gsl_rng * r, double p, unsigned int n) { /* This is a separate interface for the pascal distribution so that it can be optimized differently from the negative binomial in future. e.g. if n < 10 it might be faster to generate the Pascal distributions as the sum of geometric variates directly. */ unsigned int k = gsl_ran_negative_binomial (r, p, (double) n); return k; } double gsl_ran_pascal_pdf (const unsigned int k, const double p, unsigned int n) { double P = gsl_ran_negative_binomial_pdf (k, p, (double) n); return P; } gsl/randist/TODO0000644000175000017500000000600413536674414012066 0ustar eddedd# -*- org -*- #+CATEGORY: randist * ACM Computing Surveys (CSUR) Volume 39 , Issue 4 (2007) Gaussian random number generators David B. Thomas, Wayne Luk, Philip H.W. Leong, John D. Villasenor Article No. 11 * add Erlang dist back in? * DONE, for mu. Note that we need to get rid of mu when it is not the mean. From: Brian Gough To: briggsk@info.bt.co.uk Cc: gsl-discuss@sourceware.cygnus.com Subject: Re: Pareto Distribution Date: Sun, 9 Jul 2000 20:05:03 +0100 (BST) Yes, we should adopt the conventions from a standard reference book -- the existing functions are drawn from a variety of sources, mostly Devroye's book on Random Variates (which is public domain, but not available electronically unfortunately). Maybe the three volumes of Johnson & Kotz on Univariate Distributions would do, for example. Patches are welcome from anyone who wants sort this out. Keith Briggs writes: > Another thing to think about: some of the other distributions > have a argument `mu' to the C function which is a parameter > which is not the mean. This is non-standard and confusing. > (Also, in the Pareto function, `a' is normally called beta, > `b' is normally called alpha.) > > Keith > > +-------------------------------------------------------------------+ > | Dr. Keith M. Briggs, Complexity Research Group, BT Research Labs. | > | Adastral Park admin2 pp5, Martlesham Heath, IP5 3RE, Suffolk, UK | > | Tel. 01473 641 911 Fax. 01473 647 410. Home tel: 01473 625 972 | > | www.bt.com | personal homepage: www.labs.bt.com/people/briggsk2/ | > +-------------------------------------------------------------------+ * The exponential power distribution method could be speeded up by using a rational function approximation for the rejection scaling parameter. * Do something about the possibility of the user providing invalid parameters (e.g. negative variance etc). Not sure what to do though, since returning an error code is not possible. Maybe just return zero. We should return NAN in this case, and for the CDFs. * Add the triangular distribution. * Look at Marsaglia & Tsang, "The Monte Python Method for generating random variables", ACM TOMS Vol 24, No 3, p341 and the paper on the Ziggurat Method: Journal of Statistical Software, Volume 05 Issue 08. George Marsaglia and Wai Wan Tsang. "The ziggurat method for generating random variables" * Should 0 be included in distributions such as the exponential distribution? If we want a consistent behaviour, is it included in others? Note that 1-gsl_rng_uniform() can have a slight loss of precision when the random float is small. gsl/randist/test.c0000644000175000017500000014770513536674414012537 0ustar eddedd/* randist/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2010 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define N 100000 /* Convient test dimension for multivariant distributions */ #define MULTI_DIM 10 void testMoments (double (*f) (void), const char *name, double a, double b, double p); void testPDF (double (*f) (void), double (*pdf) (double), const char *name); void testDiscretePDF (double (*f) (void), double (*pdf) (unsigned int), const char *name); void test_shuffle (void); void test_choose (void); double test_beta (void); double test_beta_pdf (double x); double test_bernoulli (void); double test_bernoulli_pdf (unsigned int n); double test_binomial (void); double test_binomial_pdf (unsigned int n); double test_binomial_large (void); double test_binomial_large_pdf (unsigned int n); double test_binomial_huge (void); double test_binomial_huge_pdf (unsigned int n); double test_binomial_max (void); double test_binomial_max_pdf (unsigned int n); double test_binomial0 (void); double test_binomial0_pdf (unsigned int n); double test_binomial1 (void); double test_binomial1_pdf (unsigned int n); double test_binomial_knuth (void); double test_binomial_knuth_pdf (unsigned int n); double test_binomial_large_knuth (void); double test_binomial_large_knuth_pdf (unsigned int n); double test_binomial_huge_knuth (void); double test_binomial_huge_knuth_pdf (unsigned int n); double test_cauchy (void); double test_cauchy_pdf (double x); double test_chisq (void); double test_chisq_pdf (double x); double test_chisqnu2 (void); double test_chisqnu2_pdf (double x); double test_dirichlet (void); double test_dirichlet_pdf (double x); double test_dirichlet_small (void); double test_dirichlet_small_pdf (double x); void test_dirichlet_moments (void); double test_discrete1 (void); double test_discrete1_pdf (unsigned int n); double test_discrete2 (void); double test_discrete2_pdf (unsigned int n); double test_discrete3 (void); double test_discrete3_pdf (unsigned int n); double test_erlang (void); double test_erlang_pdf (double x); double test_exponential (void); double test_exponential_pdf (double x); double test_exppow0 (void); double test_exppow0_pdf (double x); double test_exppow1 (void); double test_exppow1_pdf (double x); double test_exppow1a (void); double test_exppow1a_pdf (double x); double test_exppow2 (void); double test_exppow2_pdf (double x); double test_exppow2a (void); double test_exppow2a_pdf (double x); double test_exppow2b (void); double test_exppow2b_pdf (double x); double test_fdist (void); double test_fdist_pdf (double x); double test_fdist_large (void); double test_fdist_large_pdf (double x); double test_flat (void); double test_flat_pdf (double x); double test_gamma (void); double test_gamma_pdf (double x); double test_gamma1 (void); double test_gamma1_pdf (double x); double test_gamma_int (void); double test_gamma_int_pdf (double x); double test_gamma_large (void); double test_gamma_large_pdf (double x); double test_gamma_vlarge (void); double test_gamma_vlarge_pdf (double x); double test_gamma_small (void); double test_gamma_small_pdf (double x); double test_gamma_mt (void); double test_gamma_mt_pdf (double x); double test_gamma_mt1 (void); double test_gamma_mt1_pdf (double x); double test_gamma_mt_int (void); double test_gamma_mt_int_pdf (double x); double test_gamma_mt_large (void); double test_gamma_mt_large_pdf (double x); double test_gamma_mt_small (void); double test_gamma_mt_small_pdf (double x); double test_gamma_knuth_vlarge (void); double test_gamma_knuth_vlarge_pdf (double x); double test_gaussian (void); double test_gaussian_pdf (double x); double test_gaussian_ratio_method (void); double test_gaussian_ratio_method_pdf (double x); double test_gaussian_ziggurat (void); double test_gaussian_ziggurat_pdf (double x); double test_gaussian_tail (void); double test_gaussian_tail_pdf (double x); double test_gaussian_tail1 (void); double test_gaussian_tail1_pdf (double x); double test_gaussian_tail2 (void); double test_gaussian_tail2_pdf (double x); double test_ugaussian (void); double test_ugaussian_pdf (double x); double test_ugaussian_ratio_method (void); double test_ugaussian_ratio_method_pdf (double x); double test_ugaussian_tail (void); double test_ugaussian_tail_pdf (double x); double test_bivariate_gaussian1 (void); double test_bivariate_gaussian1_pdf (double x); double test_bivariate_gaussian2 (void); double test_bivariate_gaussian2_pdf (double x); double test_bivariate_gaussian3 (void); double test_bivariate_gaussian3_pdf (double x); double test_bivariate_gaussian4 (void); double test_bivariate_gaussian4_pdf (double x); void test_multivariate_gaussian_log_pdf (void); void test_multivariate_gaussian_pdf (void); void test_multivariate_gaussian (void); void test_wishart_log_pdf (void); void test_wishart_pdf (void); void test_wishart (void); double test_gumbel1 (void); double test_gumbel1_pdf (double x); double test_gumbel2 (void); double test_gumbel2_pdf (double x); double test_geometric (void); double test_geometric_pdf (unsigned int x); double test_geometric1 (void); double test_geometric1_pdf (unsigned int x); double test_hypergeometric1 (void); double test_hypergeometric1_pdf (unsigned int x); double test_hypergeometric2 (void); double test_hypergeometric2_pdf (unsigned int x); double test_hypergeometric3 (void); double test_hypergeometric3_pdf (unsigned int x); double test_hypergeometric4 (void); double test_hypergeometric4_pdf (unsigned int x); double test_hypergeometric5 (void); double test_hypergeometric5_pdf (unsigned int x); double test_hypergeometric6 (void); double test_hypergeometric6_pdf (unsigned int x); double test_landau (void); double test_landau_pdf (double x); double test_levy1 (void); double test_levy1_pdf (double x); double test_levy2 (void); double test_levy2_pdf (double x); double test_levy1a (void); double test_levy1a_pdf (double x); double test_levy2a (void); double test_levy2a_pdf (double x); double test_levy_skew1 (void); double test_levy_skew1_pdf (double x); double test_levy_skew2 (void); double test_levy_skew2_pdf (double x); double test_levy_skew1a (void); double test_levy_skew1a_pdf (double x); double test_levy_skew2a (void); double test_levy_skew2a_pdf (double x); double test_levy_skew1b (void); double test_levy_skew1b_pdf (double x); double test_levy_skew2b (void); double test_levy_skew2b_pdf (double x); double test_logistic (void); double test_logistic_pdf (double x); double test_lognormal (void); double test_lognormal_pdf (double x); double test_logarithmic (void); double test_logarithmic_pdf (unsigned int n); double test_multinomial (void); double test_multinomial_pdf (unsigned int n); double test_multinomial_large (void); double test_multinomial_large_pdf (unsigned int n); void test_multinomial_moments (void); double test_negative_binomial (void); double test_negative_binomial_pdf (unsigned int n); double test_pascal (void); double test_pascal_pdf (unsigned int n); double test_pareto (void); double test_pareto_pdf (double x); double test_poisson (void); double test_poisson_pdf (unsigned int x); double test_poisson_large (void); double test_poisson_large_pdf (unsigned int x); double test_dir2d (void); double test_dir2d_pdf (double x); double test_dir2d_trig_method (void); double test_dir2d_trig_method_pdf (double x); double test_dir3dxy (void); double test_dir3dxy_pdf (double x); double test_dir3dyz (void); double test_dir3dyz_pdf (double x); double test_dir3dzx (void); double test_dir3dzx_pdf (double x); double test_rayleigh (void); double test_rayleigh_pdf (double x); double test_rayleigh_tail (void); double test_rayleigh_tail_pdf (double x); double test_tdist1 (void); double test_tdist1_pdf (double x); double test_tdist2 (void); double test_tdist2_pdf (double x); double test_laplace (void); double test_laplace_pdf (double x); double test_weibull (void); double test_weibull_pdf (double x); double test_weibull1 (void); double test_weibull1_pdf (double x); gsl_rng *r_global; static gsl_ran_discrete_t *g1 = NULL; static gsl_ran_discrete_t *g2 = NULL; static gsl_ran_discrete_t *g3 = NULL; int main (void) { gsl_ieee_env_setup (); gsl_rng_env_setup (); r_global = gsl_rng_alloc (gsl_rng_default); #define FUNC(x) test_ ## x, "test gsl_ran_" #x #define FUNC2(x) test_ ## x, test_ ## x ## _pdf, "test gsl_ran_" #x test_shuffle (); test_choose (); testMoments (FUNC (ugaussian), 0.0, 100.0, 0.5); testMoments (FUNC (ugaussian), -1.0, 1.0, 0.6826895); testMoments (FUNC (ugaussian), 3.0, 3.5, 0.0011172689); testMoments (FUNC (ugaussian_tail), 3.0, 3.5, 0.0011172689 / 0.0013498981); testMoments (FUNC (exponential), 0.0, 1.0, 1 - exp (-0.5)); testMoments (FUNC (cauchy), 0.0, 10000.0, 0.5); testMoments (FUNC (discrete1), -0.5, 0.5, 0.59); testMoments (FUNC (discrete1), 0.5, 1.5, 0.40); testMoments (FUNC (discrete1), 1.5, 3.5, 0.01); testMoments (FUNC (discrete2), -0.5, 0.5, 1.0/45.0 ); testMoments (FUNC (discrete2), 8.5, 9.5, 0 ); testMoments (FUNC (discrete3), -0.5, 0.5, 0.05 ); testMoments (FUNC (discrete3), 0.5, 1.5, 0.05 ); testMoments (FUNC (discrete3), -0.5, 9.5, 0.5 ); test_dirichlet_moments (); test_multinomial_moments (); testPDF (FUNC2 (beta)); testPDF (FUNC2 (cauchy)); testPDF (FUNC2 (chisq)); testPDF (FUNC2 (chisqnu2)); testPDF (FUNC2 (dirichlet)); testPDF (FUNC2 (dirichlet_small)); testPDF (FUNC2 (erlang)); testPDF (FUNC2 (exponential)); testPDF (FUNC2 (exppow0)); testPDF (FUNC2 (exppow1)); testPDF (FUNC2 (exppow1a)); testPDF (FUNC2 (exppow2)); testPDF (FUNC2 (exppow2a)); testPDF (FUNC2 (exppow2b)); testPDF (FUNC2 (fdist)); testPDF (FUNC2 (fdist_large)); testPDF (FUNC2 (flat)); testPDF (FUNC2 (gamma)); testPDF (FUNC2 (gamma1)); testPDF (FUNC2 (gamma_int)); testPDF (FUNC2 (gamma_large)); testPDF (FUNC2 (gamma_vlarge)); testPDF (FUNC2 (gamma_knuth_vlarge)); testPDF (FUNC2 (gamma_small)); testPDF (FUNC2 (gamma_mt)); testPDF (FUNC2 (gamma_mt1)); testPDF (FUNC2 (gamma_mt_int)); testPDF (FUNC2 (gamma_mt_large)); testPDF (FUNC2 (gamma_mt_small)); testPDF (FUNC2 (gaussian)); testPDF (FUNC2 (gaussian_ratio_method)); testPDF (FUNC2 (gaussian_ziggurat)); testPDF (FUNC2 (ugaussian)); testPDF (FUNC2 (ugaussian_ratio_method)); testPDF (FUNC2 (gaussian_tail)); testPDF (FUNC2 (gaussian_tail1)); testPDF (FUNC2 (gaussian_tail2)); testPDF (FUNC2 (ugaussian_tail)); testPDF (FUNC2 (bivariate_gaussian1)); testPDF (FUNC2 (bivariate_gaussian2)); testPDF (FUNC2 (bivariate_gaussian3)); testPDF (FUNC2 (bivariate_gaussian4)); test_multivariate_gaussian_log_pdf (); test_multivariate_gaussian_pdf (); test_multivariate_gaussian (); test_wishart_log_pdf (); test_wishart_pdf (); test_wishart (); testPDF (FUNC2 (gumbel1)); testPDF (FUNC2 (gumbel2)); testPDF (FUNC2 (landau)); testPDF (FUNC2 (levy1)); testPDF (FUNC2 (levy2)); testPDF (FUNC2 (levy1a)); testPDF (FUNC2 (levy2a)); testPDF (FUNC2 (levy_skew1)); testPDF (FUNC2 (levy_skew2)); testPDF (FUNC2 (levy_skew1a)); testPDF (FUNC2 (levy_skew2a)); testPDF (FUNC2 (levy_skew1b)); testPDF (FUNC2 (levy_skew2b)); testPDF (FUNC2 (logistic)); testPDF (FUNC2 (lognormal)); testPDF (FUNC2 (pareto)); testPDF (FUNC2 (rayleigh)); testPDF (FUNC2 (rayleigh_tail)); testPDF (FUNC2 (tdist1)); testPDF (FUNC2 (tdist2)); testPDF (FUNC2 (laplace)); testPDF (FUNC2 (weibull)); testPDF (FUNC2 (weibull1)); testPDF (FUNC2 (dir2d)); testPDF (FUNC2 (dir2d_trig_method)); testPDF (FUNC2 (dir3dxy)); testPDF (FUNC2 (dir3dyz)); testPDF (FUNC2 (dir3dzx)); testDiscretePDF (FUNC2 (discrete1)); testDiscretePDF (FUNC2 (discrete2)); testDiscretePDF (FUNC2 (discrete3)); testDiscretePDF (FUNC2 (poisson)); testDiscretePDF (FUNC2 (poisson_large)); testDiscretePDF (FUNC2 (bernoulli)); testDiscretePDF (FUNC2 (binomial)); testDiscretePDF (FUNC2 (binomial0)); testDiscretePDF (FUNC2 (binomial1)); testDiscretePDF (FUNC2 (binomial_knuth)); testDiscretePDF (FUNC2 (binomial_large)); testDiscretePDF (FUNC2 (binomial_large_knuth)); testDiscretePDF (FUNC2 (binomial_huge)); testDiscretePDF (FUNC2 (binomial_huge_knuth)); testDiscretePDF (FUNC2 (binomial_max)); testDiscretePDF (FUNC2 (geometric)); testDiscretePDF (FUNC2 (geometric1)); testDiscretePDF (FUNC2 (hypergeometric1)); testDiscretePDF (FUNC2 (hypergeometric2)); testDiscretePDF (FUNC2 (hypergeometric3)); testDiscretePDF (FUNC2 (hypergeometric4)); testDiscretePDF (FUNC2 (hypergeometric5)); testDiscretePDF (FUNC2 (hypergeometric6)); testDiscretePDF (FUNC2 (logarithmic)); testDiscretePDF (FUNC2 (multinomial)); testDiscretePDF (FUNC2 (multinomial_large)); testDiscretePDF (FUNC2 (negative_binomial)); testDiscretePDF (FUNC2 (pascal)); gsl_rng_free (r_global); gsl_ran_discrete_free (g1); gsl_ran_discrete_free (g2); gsl_ran_discrete_free (g3); exit (gsl_test_summary ()); } void test_shuffle (void) { double count[10][10]; int x[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int i, j, status = 0; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { count[i][j] = 0; } } for (i = 0; i < N; i++) { for (j = 0; j < 10; j++) x[j] = j; gsl_ran_shuffle (r_global, x, 10, sizeof (int)); for (j = 0; j < 10; j++) count[x[j]][j]++; } for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { double expected = N / 10.0; double d = fabs (count[i][j] - expected); double sigma = d / sqrt (expected); if (sigma > 5 && d > 1) { status = 1; gsl_test (status, "gsl_ran_shuffle %d,%d (%g observed vs %g expected)", i, j, count[i][j] / N, 0.1); } } } gsl_test (status, "gsl_ran_shuffle on {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}"); } void test_choose (void) { double count[10]; int x[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int y[3] = { 0, 1, 2 }; int i, j, status = 0; for (i = 0; i < 10; i++) { count[i] = 0; } for (i = 0; i < N; i++) { for (j = 0; j < 10; j++) x[j] = j; gsl_ran_choose (r_global, y, 3, x, 10, sizeof (int)); for (j = 0; j < 3; j++) count[y[j]]++; } for (i = 0; i < 10; i++) { double expected = 3.0 * N / 10.0; double d = fabs (count[i] - expected); double sigma = d / sqrt (expected); if (sigma > 5 && d > 1) { status = 1; gsl_test (status, "gsl_ran_choose %d (%g observed vs %g expected)", i, count[i] / N, 0.1); } } gsl_test (status, "gsl_ran_choose (3) on {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}"); } void testMoments (double (*f) (void), const char *name, double a, double b, double p) { int i; double count = 0, expected, sigma; int status; for (i = 0; i < N; i++) { double r = f (); if (r < b && r > a) count++; } expected = p * N; sigma = (expected > 0) ? fabs (count - expected) / sqrt (expected) : fabs(count - expected); status = (sigma > 3); gsl_test (status, "%s [%g,%g] (%g observed vs %g expected)", name, a, b, count / N, p); } #define BINS 100 typedef double pdf_func(double); /* Keep track of invalid values during integration */ static int pdf_errors = 0; static double pdf_errval = 0.0; double wrapper_function (double x, void *params) { pdf_func * pdf = (pdf_func *)params; double P = pdf(x); if (!gsl_finite(P)) { pdf_errors++; pdf_errval = P; P = 0; /* skip invalid value now, but return pdf_errval at the end */ } return P; } double integrate (pdf_func * pdf, double a, double b) { double result, abserr; size_t n = 1000; gsl_function f; gsl_integration_workspace * w = gsl_integration_workspace_alloc (n); f.function = &wrapper_function; f.params = (void *)pdf; pdf_errors = 0; gsl_integration_qags (&f, a, b, 1e-16, 1e-4, n, w, &result, &abserr); gsl_integration_workspace_free (w); if (pdf_errors) return pdf_errval; return result; } void testPDF (double (*f) (void), double (*pdf) (double), const char *name) { double count[BINS], edge[BINS], p[BINS]; double a = -5.0, b = +5.0; double dx = (b - a) / BINS; double bin; double total = 0, mean; int i, j, status = 0, status_i = 0, attempts = 0; long int n0 = 0, n = N; for (i = 0; i < BINS; i++) { /* Compute the integral of p(x) from x to x+dx */ double x = a + i * dx; if (fabs (x) < 1e-10) /* hit the origin exactly */ x = 0.0; p[i] = integrate (pdf, x, x+dx); } for (i = 0; i < BINS; i++) { count[i] = 0; edge[i] = 0; } trial: attempts++; for (i = n0; i < n; i++) { double r = f (); total += r; if (r < b && r > a) { double u = (r - a) / dx; double f = modf(u, &bin); j = (int)bin; if (f == 0) edge[j]++; else count[j]++; } } /* Sort out where the hits on the edges should go */ for (i = 0; i < BINS; i++) { /* If the bin above is empty, its lower edge hits belong in the lower bin */ if (i + 1 < BINS && count[i+1] == 0) { count[i] += edge[i+1]; edge[i+1] = 0; } count[i] += edge[i]; edge[i] = 0; } mean = (total / n); status = !gsl_finite(mean); if (status) { gsl_test (status, "%s, finite mean, observed %g", name, mean); return; } for (i = 0; i < BINS; i++) { double x = a + i * dx; double d = fabs (count[i] - n * p[i]); if (!gsl_finite(p[i])) { status_i = 1; } else if (p[i] != 0) { double s = d / sqrt (n * p[i]); status_i = (s > 5) && (d > 2); } else { status_i = (count[i] != 0); } /* Extend the sample if there is an outlier on the first attempt to avoid spurious failures when running large numbers of tests. */ if (status_i && attempts < 50) { n0 = n; n = 2.0*n; goto trial; } status |= status_i; if (status_i) gsl_test (status_i, "%s [%g,%g) (%g/%d=%g observed vs %g expected)", name, x, x + dx, count[i], n, count[i] / n, p[i]); } if (status == 0) gsl_test (status, "%s, sampling against pdf over range [%g,%g) ", name, a, b); } void testDiscretePDF (double (*f) (void), double (*pdf) (unsigned int), const char *name) { double count[BINS], p[BINS]; unsigned int i; int status = 0, status_i = 0; for (i = 0; i < BINS; i++) count[i] = 0; for (i = 0; i < N; i++) { int r = (int) (f ()); if (r >= 0 && r < BINS) count[r]++; } for (i = 0; i < BINS; i++) p[i] = pdf (i); for (i = 0; i < BINS; i++) { double d = fabs (count[i] - N * p[i]); if (p[i] != 0) { double s = d / sqrt (N * p[i]); status_i = (s > 5) && (d > 1); } else { status_i = (count[i] != 0); } status |= status_i; if (status_i) gsl_test (status_i, "%s i=%d (%g observed vs %g expected)", name, i, count[i] / N, p[i]); } if (status == 0) gsl_test (status, "%s, sampling against pdf over range [%d,%d) ", name, 0, BINS); } double test_beta (void) { return gsl_ran_beta (r_global, 2.0, 3.0); } double test_beta_pdf (double x) { return gsl_ran_beta_pdf (x, 2.0, 3.0); } double test_bernoulli (void) { return gsl_ran_bernoulli (r_global, 0.3); } double test_bernoulli_pdf (unsigned int n) { return gsl_ran_bernoulli_pdf (n, 0.3); } double test_binomial (void) { return gsl_ran_binomial (r_global, 0.3, 5); } double test_binomial_pdf (unsigned int n) { return gsl_ran_binomial_pdf (n, 0.3, 5); } double test_binomial0 (void) { return gsl_ran_binomial (r_global, 0, 8); } double test_binomial0_pdf (unsigned int n) { return gsl_ran_binomial_pdf (n, 0, 8); } double test_binomial1 (void) { return gsl_ran_binomial (r_global, 1, 8); } double test_binomial1_pdf (unsigned int n) { return gsl_ran_binomial_pdf (n, 1, 8); } double test_binomial_knuth (void) { return gsl_ran_binomial_knuth (r_global, 0.3, 5); } double test_binomial_knuth_pdf (unsigned int n) { return gsl_ran_binomial_pdf (n, 0.3, 5); } double test_binomial_large (void) { return gsl_ran_binomial (r_global, 0.3, 55); } double test_binomial_large_pdf (unsigned int n) { return gsl_ran_binomial_pdf (n, 0.3, 55); } double test_binomial_large_knuth (void) { return gsl_ran_binomial_knuth (r_global, 0.3, 55); } double test_binomial_large_knuth_pdf (unsigned int n) { return gsl_ran_binomial_pdf (n, 0.3, 55); } double test_binomial_huge (void) { return gsl_ran_binomial (r_global, 0.3, 5500); } double test_binomial_huge_pdf (unsigned int n) { return gsl_ran_binomial_pdf (n, 0.3, 5500); } double test_binomial_huge_knuth (void) { return gsl_ran_binomial_knuth (r_global, 0.3, 5500); } double test_binomial_huge_knuth_pdf (unsigned int n) { return gsl_ran_binomial_pdf (n, 0.3, 5500); } double test_binomial_max (void) { return gsl_ran_binomial (r_global, 1e-8, 1<<31); } double test_binomial_max_pdf (unsigned int n) { return gsl_ran_binomial_pdf (n, 1e-8, 1<<31); } double test_cauchy (void) { return gsl_ran_cauchy (r_global, 2.0); } double test_cauchy_pdf (double x) { return gsl_ran_cauchy_pdf (x, 2.0); } double test_chisq (void) { return gsl_ran_chisq (r_global, 13.0); } double test_chisq_pdf (double x) { return gsl_ran_chisq_pdf (x, 13.0); } double test_chisqnu2 (void) { return gsl_ran_chisq (r_global, 2.0); } double test_chisqnu2_pdf (double x) { return gsl_ran_chisq_pdf (x, 2.0); } double test_dir2d (void) { double x = 0, y = 0, theta; gsl_ran_dir_2d (r_global, &x, &y); theta = atan2 (x, y); return theta; } double test_dir2d_pdf (double x) { if (x > -M_PI && x <= M_PI) { return 1 / (2 * M_PI); } else { return 0; } } double test_dir2d_trig_method (void) { double x = 0, y = 0, theta; gsl_ran_dir_2d_trig_method (r_global, &x, &y); theta = atan2 (x, y); return theta; } double test_dir2d_trig_method_pdf (double x) { if (x > -M_PI && x <= M_PI) { return 1 / (2 * M_PI); } else { return 0; } } double test_dir3dxy (void) { double x = 0, y = 0, z = 0, theta; gsl_ran_dir_3d (r_global, &x, &y, &z); theta = atan2 (x, y); return theta; } double test_dir3dxy_pdf (double x) { if (x > -M_PI && x <= M_PI) { return 1 / (2 * M_PI); } else { return 0; } } double test_dir3dyz (void) { double x = 0, y = 0, z = 0, theta; gsl_ran_dir_3d (r_global, &x, &y, &z); theta = atan2 (y, z); return theta; } double test_dir3dyz_pdf (double x) { if (x > -M_PI && x <= M_PI) { return 1 / (2 * M_PI); } else { return 0; } } double test_dir3dzx (void) { double x = 0, y = 0, z = 0, theta; gsl_ran_dir_3d (r_global, &x, &y, &z); theta = atan2 (z, x); return theta; } double test_dir3dzx_pdf (double x) { if (x > -M_PI && x <= M_PI) { return 1 / (2 * M_PI); } else { return 0; } } double test_dirichlet (void) { /* This is a bit of a lame test, since when K=2, the Dirichlet distribution becomes a beta distribution */ size_t K = 2; double alpha[2] = { 2.5, 5.0 }; double theta[2] = { 0.0, 0.0 }; gsl_ran_dirichlet (r_global, K, alpha, theta); return theta[0]; } double test_dirichlet_pdf (double x) { size_t K = 2; double alpha[2] = { 2.5, 5.0 }; double theta[2]; if (x <= 0.0 || x >= 1.0) return 0.0; /* Out of range */ theta[0] = x; theta[1] = 1.0 - x; return gsl_ran_dirichlet_pdf (K, alpha, theta); } double test_dirichlet_small (void) { size_t K = 2; double alpha[2] = { 2.5e-3, 5.0e-3}; double theta[2] = { 0.0, 0.0 }; gsl_ran_dirichlet (r_global, K, alpha, theta); return theta[0]; } double test_dirichlet_small_pdf (double x) { size_t K = 2; double alpha[2] = { 2.5e-3, 5.0e-3 }; double theta[2]; if (x <= 0.0 || x >= 1.0) return 0.0; /* Out of range */ theta[0] = x; theta[1] = 1.0 - x; return gsl_ran_dirichlet_pdf (K, alpha, theta); } /* Check that the observed means of the Dirichlet variables are within reasonable statistical errors of their correct values. */ #define DIRICHLET_K 10 void test_dirichlet_moments (void) { double alpha[DIRICHLET_K]; double theta[DIRICHLET_K]; double theta_sum[DIRICHLET_K]; double alpha_sum = 0.0; double mean, obs_mean, sd, sigma; int status, k, n; for (k = 0; k < DIRICHLET_K; k++) { alpha[k] = gsl_ran_exponential (r_global, 0.1); alpha_sum += alpha[k]; theta_sum[k] = 0.0; } for (n = 0; n < N; n++) { gsl_ran_dirichlet (r_global, DIRICHLET_K, alpha, theta); for (k = 0; k < DIRICHLET_K; k++) theta_sum[k] += theta[k]; } for (k = 0; k < DIRICHLET_K; k++) { mean = alpha[k] / alpha_sum; sd = sqrt ((alpha[k] * (1. - alpha[k] / alpha_sum)) / (alpha_sum * (alpha_sum + 1.))); obs_mean = theta_sum[k] / N; sigma = sqrt ((double) N) * fabs (mean - obs_mean) / sd; status = (sigma > 3.0); gsl_test (status, "test gsl_ran_dirichlet: mean (%g observed vs %g expected)", obs_mean, mean); } } /* Check that the observed means of the multinomial variables are within reasonable statistical errors of their correct values. */ void test_multinomial_moments (void) { const unsigned int sum_n = 100; const double p[MULTI_DIM] ={ 0.2, 0.20, 0.17, 0.14, 0.12, 0.07, 0.05, 0.02, 0.02, 0.01 }; unsigned int x[MULTI_DIM]; double x_sum[MULTI_DIM]; double mean, obs_mean, sd, sigma; int status, k, n; for (k = 0; k < MULTI_DIM; k++) x_sum[k] =0.0; for (n = 0; n < N; n++) { gsl_ran_multinomial (r_global, MULTI_DIM, sum_n, p, x); for (k = 0; k < MULTI_DIM; k++) x_sum[k] += x[k]; } for (k = 0; k < MULTI_DIM; k++) { mean = p[k] * sum_n; sd = p[k] * (1.-p[k]) * sum_n; obs_mean = x_sum[k] / N; sigma = sqrt ((double) N) * fabs (mean - obs_mean) / sd; status = (sigma > 3.0); gsl_test (status, "test gsl_ran_multinomial: mean (%g observed vs %g expected)", obs_mean, mean); } } double test_discrete1 (void) { static double P[3] = { 0.59, 0.4, 0.01 }; if (g1 == NULL) { g1 = gsl_ran_discrete_preproc (3, P); } return gsl_ran_discrete (r_global, g1); } double test_discrete1_pdf (unsigned int n) { return gsl_ran_discrete_pdf ((size_t) n, g1); } double test_discrete2 (void) { static double P[10] = { 1, 9, 3, 4, 5, 8, 6, 7, 2, 0 }; if (g2 == NULL) { g2 = gsl_ran_discrete_preproc (10, P); } return gsl_ran_discrete (r_global, g2); } double test_discrete2_pdf (unsigned int n) { return gsl_ran_discrete_pdf ((size_t) n, g2); } double test_discrete3 (void) { static double P[20]; if (g3 == NULL) { int i; for (i=0; i<20; ++i) P[i]=1.0/20; g3 = gsl_ran_discrete_preproc (20, P); } return gsl_ran_discrete (r_global, g3); } double test_discrete3_pdf (unsigned int n) { return gsl_ran_discrete_pdf ((size_t) n, g3); } double test_erlang (void) { return gsl_ran_erlang (r_global, 3.0, 4.0); } double test_erlang_pdf (double x) { return gsl_ran_erlang_pdf (x, 3.0, 4.0); } double test_exponential (void) { return gsl_ran_exponential (r_global, 2.0); } double test_exponential_pdf (double x) { return gsl_ran_exponential_pdf (x, 2.0); } double test_exppow0 (void) { return gsl_ran_exppow (r_global, 3.7, 0.3); } double test_exppow0_pdf (double x) { return gsl_ran_exppow_pdf (x, 3.7, 0.3); } double test_exppow1 (void) { return gsl_ran_exppow (r_global, 3.7, 1.0); } double test_exppow1_pdf (double x) { return gsl_ran_exppow_pdf (x, 3.7, 1.0); } double test_exppow1a (void) { return gsl_ran_exppow (r_global, 3.7, 1.9); } double test_exppow1a_pdf (double x) { return gsl_ran_exppow_pdf (x, 3.7, 1.9); } double test_exppow2 (void) { return gsl_ran_exppow (r_global, 3.7, 2.0); } double test_exppow2_pdf (double x) { return gsl_ran_exppow_pdf (x, 3.7, 2.0); } double test_exppow2a (void) { return gsl_ran_exppow (r_global, 3.7, 3.5); } double test_exppow2a_pdf (double x) { return gsl_ran_exppow_pdf (x, 3.7, 3.5); } double test_exppow2b (void) { return gsl_ran_exppow (r_global, 3.7, 7.5); } double test_exppow2b_pdf (double x) { return gsl_ran_exppow_pdf (x, 3.7, 7.5); } double test_fdist (void) { return gsl_ran_fdist (r_global, 3.0, 4.0); } double test_fdist_pdf (double x) { return gsl_ran_fdist_pdf (x, 3.0, 4.0); } /* Test case for bug #28500: overflow in gsl_ran_fdist_pdf */ double test_fdist_large (void) { return gsl_ran_fdist (r_global, 8.0, 249.0); } double test_fdist_large_pdf (double x) { return gsl_ran_fdist_pdf (x, 8.0, 249.0); } double test_flat (void) { return gsl_ran_flat (r_global, 3.0, 4.0); } double test_flat_pdf (double x) { return gsl_ran_flat_pdf (x, 3.0, 4.0); } double test_gamma (void) { return gsl_ran_gamma (r_global, 2.5, 2.17); } double test_gamma_pdf (double x) { return gsl_ran_gamma_pdf (x, 2.5, 2.17); } double test_gamma1 (void) { return gsl_ran_gamma (r_global, 1.0, 2.17); } double test_gamma1_pdf (double x) { return gsl_ran_gamma_pdf (x, 1.0, 2.17); } double test_gamma_int (void) { return gsl_ran_gamma (r_global, 10.0, 2.17); } double test_gamma_int_pdf (double x) { return gsl_ran_gamma_pdf (x, 10.0, 2.17); } double test_gamma_large (void) { return gsl_ran_gamma (r_global, 20.0, 2.17); } double test_gamma_large_pdf (double x) { return gsl_ran_gamma_pdf (x, 20.0, 2.17); } double test_gamma_small (void) { return gsl_ran_gamma (r_global, 0.92, 2.17); } double test_gamma_small_pdf (double x) { return gsl_ran_gamma_pdf (x, 0.92, 2.17); } double test_gamma_vlarge (void) { /* Scale the distribution to get it into the range [-5,5] */ double c = 2.71828181565; double b = 6.32899304917e-10; double d = 1e4; return (gsl_ran_gamma (r_global, 4294967296.0, b) - c) * d; } double test_gamma_vlarge_pdf (double x) { double c = 2.71828181565; double b = 6.32899304917e-10; double d = 1e4; return gsl_ran_gamma_pdf ((x / d) + c, 4294967296.0, b) / d; } double test_gamma_mt (void) { return gsl_ran_gamma_mt (r_global, 2.5, 2.17); } double test_gamma_mt_pdf (double x) { return gsl_ran_gamma_pdf (x, 2.5, 2.17); } double test_gamma_mt1 (void) { return gsl_ran_gamma_mt (r_global, 1.0, 2.17); } double test_gamma_mt1_pdf (double x) { return gsl_ran_gamma_pdf (x, 1.0, 2.17); } double test_gamma_mt_int (void) { return gsl_ran_gamma_mt (r_global, 10.0, 2.17); } double test_gamma_mt_int_pdf (double x) { return gsl_ran_gamma_pdf (x, 10.0, 2.17); } double test_gamma_mt_large (void) { return gsl_ran_gamma_mt (r_global, 20.0, 2.17); } double test_gamma_mt_large_pdf (double x) { return gsl_ran_gamma_pdf (x, 20.0, 2.17); } double test_gamma_mt_small (void) { return gsl_ran_gamma_mt (r_global, 0.92, 2.17); } double test_gamma_mt_small_pdf (double x) { return gsl_ran_gamma_pdf (x, 0.92, 2.17); } double test_gamma_knuth_vlarge (void) { /* Scale the distribution to get it into the range [-5,5] */ double c = 2.71828181565; double b = 6.32899304917e-10; double d = 1e4; return (gsl_ran_gamma_knuth (r_global, 4294967296.0, b) - c) * d; } double test_gamma_knuth_vlarge_pdf (double x) { double c = 2.71828181565; double b = 6.32899304917e-10; double d = 1e4; return gsl_ran_gamma_pdf ((x / d) + c, 4294967296.0, b) / d; } double test_gaussian (void) { return gsl_ran_gaussian (r_global, 3.0); } double test_gaussian_pdf (double x) { return gsl_ran_gaussian_pdf (x, 3.0); } double test_gaussian_ratio_method (void) { return gsl_ran_gaussian_ratio_method (r_global, 3.0); } double test_gaussian_ratio_method_pdf (double x) { return gsl_ran_gaussian_pdf (x, 3.0); } double test_gaussian_ziggurat (void) { return gsl_ran_gaussian_ziggurat (r_global, 3.12); } double test_gaussian_ziggurat_pdf (double x) { return gsl_ran_gaussian_pdf (x, 3.12); } double test_gaussian_tail (void) { return gsl_ran_gaussian_tail (r_global, 1.7, 0.25); } double test_gaussian_tail_pdf (double x) { return gsl_ran_gaussian_tail_pdf (x, 1.7, 0.25); } double test_gaussian_tail1 (void) { return gsl_ran_gaussian_tail (r_global, -1.7, 5.0); } double test_gaussian_tail1_pdf (double x) { return gsl_ran_gaussian_tail_pdf (x, -1.7, 5.0); } double test_gaussian_tail2 (void) { return gsl_ran_gaussian_tail (r_global, 0.1, 2.0); } double test_gaussian_tail2_pdf (double x) { return gsl_ran_gaussian_tail_pdf (x, 0.1, 2.0); } double test_ugaussian (void) { return gsl_ran_ugaussian (r_global); } double test_ugaussian_pdf (double x) { return gsl_ran_ugaussian_pdf (x); } double test_ugaussian_ratio_method (void) { return gsl_ran_ugaussian_ratio_method (r_global); } double test_ugaussian_ratio_method_pdf (double x) { return gsl_ran_ugaussian_pdf (x); } double test_ugaussian_tail (void) { return gsl_ran_ugaussian_tail (r_global, 3.0); } double test_ugaussian_tail_pdf (double x) { return gsl_ran_ugaussian_tail_pdf (x, 3.0); } double test_bivariate_gaussian1 (void) { double x = 0, y = 0; gsl_ran_bivariate_gaussian (r_global, 3.0, 2.0, 0.3, &x, &y); return x; } double test_bivariate_gaussian1_pdf (double x) { return gsl_ran_gaussian_pdf (x, 3.0); } double test_bivariate_gaussian2 (void) { double x = 0, y = 0; gsl_ran_bivariate_gaussian (r_global, 3.0, 2.0, 0.3, &x, &y); return y; } double test_bivariate_gaussian2_pdf (double y) { int i, n = 10; double sum = 0; double a = -10, b = 10, dx = (b - a) / n; for (i = 0; i < n; i++) { double x = a + i * dx; sum += gsl_ran_bivariate_gaussian_pdf (x, y, 3.0, 2.0, 0.3) * dx; } return sum; } double test_bivariate_gaussian3 (void) { double x = 0, y = 0; gsl_ran_bivariate_gaussian (r_global, 3.0, 2.0, 0.3, &x, &y); return x + y; } double test_bivariate_gaussian3_pdf (double x) { double sx = 3.0, sy = 2.0, r = 0.3; double su = (sx + r * sy); double sv = sy * sqrt (1 - r * r); double sigma = sqrt (su * su + sv * sv); return gsl_ran_gaussian_pdf (x, sigma); } double test_bivariate_gaussian4 (void) { double x = 0, y = 0; gsl_ran_bivariate_gaussian (r_global, 3.0, 2.0, -0.5, &x, &y); return x + y; } double test_bivariate_gaussian4_pdf (double x) { double sx = 3.0, sy = 2.0, r = -0.5; double su = (sx + r * sy); double sv = sy * sqrt (1 - r * r); double sigma = sqrt (su * su + sv * sv); return gsl_ran_gaussian_pdf (x, sigma); } /* Examples from R (GPL): http://www.r-project.org/ * library(mvtnorm); packageVersion("mvtnorm") # 1.0.5 * mu <- c(1, 2) * Sigma <- matrix(c(4,2, 2,3), ncol=2) * x <- c(0, 0) * sprintf("%.15f", dmvnorm(x=x, mean=mu, sigma=Sigma, log=TRUE)) # -3.565097837249263 */ void test_multivariate_gaussian_log_pdf (void) { size_t d = 2; const double exp_res = -3.565097837249263; double obs_res; gsl_vector * mu = gsl_vector_calloc(d); gsl_matrix * Sigma = gsl_matrix_calloc(d, d); gsl_matrix * L = gsl_matrix_calloc(d, d); gsl_vector * x = gsl_vector_calloc(d); gsl_vector * work = gsl_vector_calloc(d); gsl_vector_set(mu, 0, 1); gsl_vector_set(mu, 1, 2); gsl_matrix_set(Sigma, 0, 0, 4); gsl_matrix_set(Sigma, 1, 1, 3); gsl_matrix_set(Sigma, 0, 1, 2); gsl_matrix_set(Sigma, 1, 0, 2); gsl_matrix_memcpy(L, Sigma); gsl_linalg_cholesky_decomp1(L); gsl_ran_multivariate_gaussian_log_pdf(x, mu, L, &obs_res, work); gsl_test_rel(obs_res, exp_res, 1.0e-10, "gsl_ran_multivariate_gaussian_log_pdf"); gsl_vector_free(mu); gsl_matrix_free(Sigma); gsl_matrix_free(L); gsl_vector_free(x); gsl_vector_free(work); } /* Examples from R (GPL): http://www.r-project.org/ * library(mvtnorm); packageVersion("mvtnorm") # 1.0.5 * mu <- c(1, 2) * Sigma <- matrix(c(4,2, 2,3), ncol=2) * x <- c(0, 0) * sprintf("%.15f", dmvnorm(x=x, mean=mu, sigma=Sigma, log=FALSE)) # 0.028294217120391 */ void test_multivariate_gaussian_pdf (void) { size_t d = 2; const double exp_res = 0.028294217120391; double obs_res = 0; gsl_vector * mu = gsl_vector_calloc(d); gsl_matrix * Sigma = gsl_matrix_calloc(d, d); gsl_matrix * L = gsl_matrix_calloc(d, d); gsl_vector * x = gsl_vector_calloc(d); gsl_vector * work = gsl_vector_calloc(d); gsl_vector_set(mu, 0, 1); gsl_vector_set(mu, 1, 2); gsl_matrix_set(Sigma, 0, 0, 4); gsl_matrix_set(Sigma, 1, 1, 3); gsl_matrix_set(Sigma, 0, 1, 2); gsl_matrix_set(Sigma, 1, 0, 2); gsl_matrix_memcpy(L, Sigma); gsl_linalg_cholesky_decomp1(L); gsl_ran_multivariate_gaussian_pdf(x, mu, L, &obs_res, work); gsl_test_rel(obs_res, exp_res, 1.0e-10, "gsl_ran_multivariate_gaussian_pdf"); gsl_vector_free(mu); gsl_matrix_free(Sigma); gsl_matrix_free(L); gsl_vector_free(x); gsl_vector_free(work); } /* Draw N random vectors according to a given MVN(mu,Sigma). Then, check that * one can't reject the null hypothesis that the sample mean is equal to * the true mean, using Hotelling's test statistic at 95% confidence level. * Details in "Applied Multivariate Statistical Analysis" by Johnson & Wichern * (2001), section 5, page 212. */ void test_multivariate_gaussian (void) { size_t d = 2, i = 0; int status = 0; double T2 = 0, threshold = 0, alpha = 0.05, pvalue = 0; gsl_vector * mu = gsl_vector_calloc(d); gsl_matrix * Sigma = gsl_matrix_calloc(d, d); gsl_matrix * L = gsl_matrix_calloc(d, d); gsl_vector * sample = gsl_vector_calloc(d); gsl_matrix * samples = gsl_matrix_calloc(N, d); gsl_vector * mu_hat = gsl_vector_calloc(d); gsl_matrix * Sigma_hat = gsl_matrix_calloc(d, d); gsl_vector * mu_hat_ctr = gsl_vector_calloc(d); gsl_matrix * Sigma_hat_inv = gsl_matrix_calloc(d, d); gsl_vector * tmp = gsl_vector_calloc(d); /* set the true values of parameters mu and Sigma */ gsl_vector_set(mu, 0, 1); gsl_vector_set(mu, 1, 2); gsl_matrix_set(Sigma, 0, 0, 4); gsl_matrix_set(Sigma, 1, 1, 3); gsl_matrix_set(Sigma, 0, 1, 2); gsl_matrix_set(Sigma, 1, 0, 2); /* draw N random vectors */ gsl_matrix_memcpy(L, Sigma); gsl_linalg_cholesky_decomp1(L); for (i = 0; i < N; ++i) { gsl_ran_multivariate_gaussian(r_global, mu, L, sample); gsl_matrix_set_row(samples, i, sample); } /* compute the maximum-likelihood estimates */ gsl_ran_multivariate_gaussian_mean (samples, mu_hat); gsl_ran_multivariate_gaussian_vcov (samples, Sigma_hat); /* compute Hotelling's test statistic: T^2 = n (hat{mu} - mu)' hat{Sigma}^-1 (hat{mu} - mu) */ gsl_vector_memcpy(mu_hat_ctr, mu_hat); gsl_vector_sub(mu_hat_ctr, mu); gsl_matrix_memcpy(Sigma_hat_inv, Sigma_hat); gsl_linalg_cholesky_decomp1(Sigma_hat_inv); gsl_linalg_cholesky_invert(Sigma_hat_inv); gsl_blas_dgemv(CblasNoTrans, 1, Sigma_hat_inv, mu_hat_ctr, 0, tmp); gsl_blas_ddot(mu_hat_ctr, tmp, &T2); T2 *= N; /* test if the null hypothesis (hat{mu} = mu) can be rejected at the alpha level*/ threshold = (N-1) * d / (double)(N-d) * gsl_cdf_fdist_Pinv(1-alpha, d, N-d); status = (T2 > threshold); gsl_test(status, "test gsl_ran_multivariate_gaussian: T2 %f < %f", T2, threshold); pvalue = gsl_cdf_fdist_Q(T2, d, N-d); status = (pvalue < alpha); gsl_test(status, "test gsl_ran_multivariate_gaussian: p value %f > %f", pvalue, alpha); gsl_vector_free(mu); gsl_matrix_free(Sigma); gsl_matrix_free(L); gsl_vector_free(sample); gsl_matrix_free(samples); gsl_vector_free(mu_hat); gsl_matrix_free(Sigma_hat); gsl_vector_free(mu_hat_ctr); gsl_matrix_free(Sigma_hat_inv); gsl_vector_free(tmp); } /* Examples from R (GPL): http://www.r-project.org/ * R> version$version.string # R version 3.4.1 (2017-06-30) * R> library(MCMCpack); packageVersion("MCMCpack") # 1.3.9 * R> df <- 3 * R> V <- matrix(data=c(1, 0.3, 0.3, 1), nrow=2, ncol=2) * R> X <- matrix(data=c(2.213322, 1.453357, 1.453357, 3.285779), nrow=2, ncol=2) * R> sprintf("%.15f", log(dwish(W=X, v=df, S=V))) # -4.931913612377813 */ void test_wishart_log_pdf (void) { size_t d = 2; const double df = 3, exp_res = -4.931913612377813; double obs_res; gsl_matrix * V = gsl_matrix_calloc(d, d); gsl_matrix * L = gsl_matrix_calloc(d, d); gsl_matrix * X = gsl_matrix_calloc(d, d); gsl_matrix * L_X = gsl_matrix_calloc(d, d); gsl_matrix * work = gsl_matrix_calloc(d, d); gsl_matrix_set(V, 0, 0, 1); gsl_matrix_set(V, 1, 1, 1); gsl_matrix_set(V, 0, 1, 0.3); gsl_matrix_set(V, 1, 0, 0.3); gsl_matrix_memcpy(L, V); gsl_linalg_cholesky_decomp1(L); gsl_matrix_set(X, 0, 0, 2.213322); gsl_matrix_set(X, 1, 1, 3.285779); gsl_matrix_set(X, 0, 1, 1.453357); gsl_matrix_set(X, 1, 0, 1.453357); gsl_matrix_memcpy(L_X, X); gsl_linalg_cholesky_decomp1(L_X); gsl_ran_wishart_log_pdf(X, L_X, df, L, &obs_res, work); gsl_test_rel(obs_res, exp_res, 1.0e-10, "gsl_ran_wishart_log_pdf"); gsl_matrix_free(V); gsl_matrix_free(L); gsl_matrix_free(X); gsl_matrix_free(L_X); gsl_matrix_free(work); } /* Examples from R (GPL): http://www.r-project.org/ * R> version$version.string # R version 3.4.1 (2017-06-30) * R> library(MCMCpack); packageVersion("MCMCpack") # 1.3.9 * R> df <- 3 * R> V <- matrix(data=c(1, 0.3, 0.3, 1), nrow=2, ncol=2) * R> X <- matrix(data=c(2.213322, 1.453357, 1.453357, 3.285779), nrow=2, ncol=2) * R> sprintf("%.15f", dwish(W=X, v=df, S=V)) # 0.007212687778224 */ void test_wishart_pdf (void) { size_t d = 2; const double df = 3, exp_res = 0.007212687778224; double obs_res; gsl_matrix * V = gsl_matrix_calloc(d, d); gsl_matrix * L = gsl_matrix_calloc(d, d); gsl_matrix * X = gsl_matrix_calloc(d, d); gsl_matrix * L_X = gsl_matrix_calloc(d, d); gsl_matrix * work = gsl_matrix_calloc(d, d); gsl_matrix_set(V, 0, 0, 1); gsl_matrix_set(V, 1, 1, 1); gsl_matrix_set(V, 0, 1, 0.3); gsl_matrix_set(V, 1, 0, 0.3); gsl_matrix_memcpy(L, V); gsl_linalg_cholesky_decomp1(L); gsl_matrix_set(X, 0, 0, 2.213322); gsl_matrix_set(X, 1, 1, 3.285779); gsl_matrix_set(X, 0, 1, 1.453357); gsl_matrix_set(X, 1, 0, 1.453357); gsl_matrix_memcpy(L_X, X); gsl_linalg_cholesky_decomp1(L_X); gsl_ran_wishart_pdf(X, L_X, df, L, &obs_res, work); gsl_test_rel(obs_res, exp_res, 1.0e-10, "gsl_ran_wishart_pdf"); gsl_matrix_free(V); gsl_matrix_free(L); gsl_matrix_free(X); gsl_matrix_free(L_X); gsl_matrix_free(work); } /* Draw N random "matrices" according to a W_d(df,V) with d=1 and V=1, * and check that their mean and variance are close enough to those of * a Chi-squared(df), respectively df and 2df. */ void test_wishart (void) { size_t d = 1, i, j; double df[5] = {1, 3, 5, 7, 9}, mean_wishart, var_wishart; int status; gsl_matrix * V = gsl_matrix_calloc(d, d); gsl_matrix * L = gsl_matrix_calloc(d, d); gsl_matrix * sample_wishart = gsl_matrix_calloc(d, d); gsl_matrix * work = gsl_matrix_calloc(d, d); gsl_vector * samples_wishart = gsl_vector_calloc(N); gsl_matrix_set(V, 0, 0, 1.0); gsl_matrix_memcpy(L, V); gsl_linalg_cholesky_decomp1(L); for (j = 0; j < 5; ++j) { /* for loop over df */ /* draw N random variables from W(df,V) */ for (i = 0; i < N; ++i) { status = gsl_ran_wishart(r_global, df[j], L, sample_wishart, work); gsl_vector_set(samples_wishart, i, gsl_matrix_get(sample_wishart, 0, 0)); } /* compute their mean and variance */ mean_wishart = gsl_stats_mean(samples_wishart->data, samples_wishart->stride, N); var_wishart = gsl_stats_variance_m(samples_wishart->data, samples_wishart->stride, N, mean_wishart); /* check */ gsl_test_rel(mean_wishart, df[j], 1.0e-1, "gsl_ran_wishart, mean"); gsl_test_rel(var_wishart, 2*df[j], 1.0e-1, "gsl_ran_wishart, var"); } /* end of for loop over df */ gsl_matrix_free(V); gsl_matrix_free(L); gsl_matrix_free(sample_wishart); gsl_matrix_free(work); gsl_vector_free(samples_wishart); } double test_geometric (void) { return gsl_ran_geometric (r_global, 0.5); } double test_geometric_pdf (unsigned int n) { return gsl_ran_geometric_pdf (n, 0.5); } double test_geometric1 (void) { return gsl_ran_geometric (r_global, 1.0); } double test_geometric1_pdf (unsigned int n) { return gsl_ran_geometric_pdf (n, 1.0); } double test_hypergeometric1 (void) { return gsl_ran_hypergeometric (r_global, 5, 7, 4); } double test_hypergeometric1_pdf (unsigned int n) { return gsl_ran_hypergeometric_pdf (n, 5, 7, 4); } double test_hypergeometric2 (void) { return gsl_ran_hypergeometric (r_global, 5, 7, 11); } double test_hypergeometric2_pdf (unsigned int n) { return gsl_ran_hypergeometric_pdf (n, 5, 7, 11); } double test_hypergeometric3 (void) { return gsl_ran_hypergeometric (r_global, 5, 7, 1); } double test_hypergeometric3_pdf (unsigned int n) { return gsl_ran_hypergeometric_pdf (n, 5, 7, 1); } double test_hypergeometric4 (void) { return gsl_ran_hypergeometric (r_global, 5, 7, 20); } double test_hypergeometric4_pdf (unsigned int n) { return gsl_ran_hypergeometric_pdf (n, 5, 7, 20); } double test_hypergeometric5 (void) { return gsl_ran_hypergeometric (r_global, 2, 7, 5); } double test_hypergeometric5_pdf (unsigned int n) { return gsl_ran_hypergeometric_pdf (n, 2, 7, 5); } double test_hypergeometric6 (void) { return gsl_ran_hypergeometric (r_global, 2, 10, 3); } double test_hypergeometric6_pdf (unsigned int n) { return gsl_ran_hypergeometric_pdf (n, 2, 10, 3); } double test_gumbel1 (void) { return gsl_ran_gumbel1 (r_global, 3.12, 4.56); } double test_gumbel1_pdf (double x) { return gsl_ran_gumbel1_pdf (x, 3.12, 4.56); } double test_gumbel2 (void) { return gsl_ran_gumbel2 (r_global, 3.12, 4.56); } double test_gumbel2_pdf (double x) { return gsl_ran_gumbel2_pdf (x, 3.12, 4.56); } double test_landau (void) { return gsl_ran_landau (r_global); } double test_landau_pdf (double x) { return gsl_ran_landau_pdf (x); } double test_levy1 (void) { return gsl_ran_levy (r_global, 5.0, 1.0); } double test_levy1_pdf (double x) { return gsl_ran_cauchy_pdf (x, 5.0); } double test_levy2 (void) { return gsl_ran_levy (r_global, 5.0, 2.0); } double test_levy2_pdf (double x) { return gsl_ran_gaussian_pdf (x, sqrt (2.0) * 5.0); } double test_levy1a (void) { return gsl_ran_levy (r_global, 5.0, 1.01); } double test_levy1a_pdf (double x) { return gsl_ran_cauchy_pdf (x, 5.0); } double test_levy2a (void) { return gsl_ran_levy (r_global, 5.0, 1.99); } double test_levy2a_pdf (double x) { return gsl_ran_gaussian_pdf (x, sqrt (2.0) * 5.0); } double test_levy_skew1 (void) { return gsl_ran_levy_skew (r_global, 5.0, 1.0, 0.0); } double test_levy_skew1_pdf (double x) { return gsl_ran_cauchy_pdf (x, 5.0); } double test_levy_skew2 (void) { return gsl_ran_levy_skew (r_global, 5.0, 2.0, 0.0); } double test_levy_skew2_pdf (double x) { return gsl_ran_gaussian_pdf (x, sqrt (2.0) * 5.0); } double test_levy_skew1a (void) { return gsl_ran_levy_skew (r_global, 5.0, 1.01, 0.0); } double test_levy_skew1a_pdf (double x) { return gsl_ran_cauchy_pdf (x, 5.0); } double test_levy_skew2a (void) { return gsl_ran_levy_skew (r_global, 5.0, 1.99, 0.0); } double test_levy_skew2a_pdf (double x) { return gsl_ran_gaussian_pdf (x, sqrt (2.0) * 5.0); } double test_levy_skew1b (void) { return gsl_ran_levy_skew (r_global, 5.0, 1.01, 0.001); } double test_levy_skew1b_pdf (double x) { return gsl_ran_cauchy_pdf (x, 5.0); } double test_levy_skew2b (void) { return gsl_ran_levy_skew (r_global, 5.0, 1.99, 0.001); } double test_levy_skew2b_pdf (double x) { return gsl_ran_gaussian_pdf (x, sqrt (2.0) * 5.0); } double test_logistic (void) { return gsl_ran_logistic (r_global, 3.1); } double test_logistic_pdf (double x) { return gsl_ran_logistic_pdf (x, 3.1); } double test_logarithmic (void) { return gsl_ran_logarithmic (r_global, 0.4); } double test_logarithmic_pdf (unsigned int n) { return gsl_ran_logarithmic_pdf (n, 0.4); } double test_lognormal (void) { return gsl_ran_lognormal (r_global, 2.7, 1.3); } double test_lognormal_pdf (double x) { return gsl_ran_lognormal_pdf (x, 2.7, 1.3); } double test_multinomial (void) { const size_t K = 3; const unsigned int sum_n = BINS; unsigned int n[3]; /* Test use of weights instead of probabilities. */ const double p[] = { 2., 7., 1.}; gsl_ran_multinomial ( r_global, K, sum_n, p, n); return n[0]; } double test_multinomial_pdf (unsigned int n_0) { /* The margional distribution of just 1 variate is binomial. */ size_t K = 2; /* Test use of weights instead of probabilities */ double p[] = { 0.4, 1.6}; const unsigned int sum_n = BINS; unsigned int n[2]; n[0] = n_0; n[1] =sum_n - n_0; return gsl_ran_multinomial_pdf (K, p, n); } double test_multinomial_large (void) { const unsigned int sum_n = BINS; unsigned int n[MULTI_DIM]; const double p[MULTI_DIM] = { 0.2, 0.20, 0.17, 0.14, 0.12, 0.07, 0.05, 0.04, 0.01, 0.00 }; gsl_ran_multinomial ( r_global, MULTI_DIM, sum_n, p, n); return n[0]; } double test_multinomial_large_pdf (unsigned int n_0) { return test_multinomial_pdf(n_0); } double test_negative_binomial (void) { return gsl_ran_negative_binomial (r_global, 0.3, 20.0); } double test_negative_binomial_pdf (unsigned int n) { return gsl_ran_negative_binomial_pdf (n, 0.3, 20.0); } double test_pascal (void) { return gsl_ran_pascal (r_global, 0.8, 3); } double test_pascal_pdf (unsigned int n) { return gsl_ran_pascal_pdf (n, 0.8, 3); } double test_pareto (void) { return gsl_ran_pareto (r_global, 1.9, 2.75); } double test_pareto_pdf (double x) { return gsl_ran_pareto_pdf (x, 1.9, 2.75); } double test_rayleigh (void) { return gsl_ran_rayleigh (r_global, 1.9); } double test_rayleigh_pdf (double x) { return gsl_ran_rayleigh_pdf (x, 1.9); } double test_rayleigh_tail (void) { return gsl_ran_rayleigh_tail (r_global, 2.7, 1.9); } double test_rayleigh_tail_pdf (double x) { return gsl_ran_rayleigh_tail_pdf (x, 2.7, 1.9); } double test_poisson (void) { return gsl_ran_poisson (r_global, 5.0); } double test_poisson_pdf (unsigned int n) { return gsl_ran_poisson_pdf (n, 5.0); } double test_poisson_large (void) { return gsl_ran_poisson (r_global, 30.0); } double test_poisson_large_pdf (unsigned int n) { return gsl_ran_poisson_pdf (n, 30.0); } double test_tdist1 (void) { return gsl_ran_tdist (r_global, 1.75); } double test_tdist1_pdf (double x) { return gsl_ran_tdist_pdf (x, 1.75); } double test_tdist2 (void) { return gsl_ran_tdist (r_global, 12.75); } double test_tdist2_pdf (double x) { return gsl_ran_tdist_pdf (x, 12.75); } double test_laplace (void) { return gsl_ran_laplace (r_global, 2.75); } double test_laplace_pdf (double x) { return gsl_ran_laplace_pdf (x, 2.75); } double test_weibull (void) { return gsl_ran_weibull (r_global, 3.14, 2.75); } double test_weibull_pdf (double x) { return gsl_ran_weibull_pdf (x, 3.14, 2.75); } double test_weibull1 (void) { return gsl_ran_weibull (r_global, 2.97, 1.0); } double test_weibull1_pdf (double x) { return gsl_ran_weibull_pdf (x, 2.97, 1.0); } gsl/randist/gamma.c0000644000175000017500000001223513536674414012627 0ustar eddedd/* randist/gamma.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include static double gamma_large (const gsl_rng * r, const double a); static double gamma_frac (const gsl_rng * r, const double a); /* The Gamma distribution of order a>0 is defined by: p(x) dx = {1 / \Gamma(a) b^a } x^{a-1} e^{-x/b} dx for x>0. If X and Y are independent gamma-distributed random variables of order a1 and a2 with the same scale parameter b, then X+Y has gamma distribution of order a1+a2. The algorithms below are from Knuth, vol 2, 2nd ed, p. 129. */ double gsl_ran_gamma_knuth (const gsl_rng * r, const double a, const double b) { /* assume a > 0 */ unsigned int na = floor (a); if(a >= UINT_MAX) { return b * (gamma_large (r, floor (a)) + gamma_frac (r, a - floor (a))); } else if (a == na) { return b * gsl_ran_gamma_int (r, na); } else if (na == 0) { return b * gamma_frac (r, a); } else { return b * (gsl_ran_gamma_int (r, na) + gamma_frac (r, a - na)) ; } } double gsl_ran_gamma_int (const gsl_rng * r, const unsigned int a) { if (a < 12) { unsigned int i; double prod = 1; for (i = 0; i < a; i++) { prod *= gsl_rng_uniform_pos (r); } /* Note: for 12 iterations we are safe against underflow, since the smallest positive random number is O(2^-32). This means the smallest possible product is 2^(-12*32) = 10^-116 which is within the range of double precision. */ return -log (prod); } else { return gamma_large (r, (double) a); } } static double gamma_large (const gsl_rng * r, const double a) { /* Works only if a > 1, and is most efficient if a is large This algorithm, reported in Knuth, is attributed to Ahrens. A faster one, we are told, can be found in: J. H. Ahrens and U. Dieter, Computing 12 (1974) 223-246. */ double sqa, x, y, v; sqa = sqrt (2 * a - 1); do { do { y = tan (M_PI * gsl_rng_uniform (r)); x = sqa * y + a - 1; } while (x <= 0); v = gsl_rng_uniform (r); } while (v > (1 + y * y) * exp ((a - 1) * log (x / (a - 1)) - sqa * y)); return x; } static double gamma_frac (const gsl_rng * r, const double a) { /* This is exercise 16 from Knuth; see page 135, and the solution is on page 551. */ double p, q, x, u, v; if (a == 0) { return 0; } p = M_E / (a + M_E); do { u = gsl_rng_uniform (r); v = gsl_rng_uniform_pos (r); if (u < p) { x = exp ((1 / a) * log (v)); q = exp (-x); } else { x = 1 - log (v); q = exp ((a - 1) * log (x)); } } while (gsl_rng_uniform (r) >= q); return x; } double gsl_ran_gamma_pdf (const double x, const double a, const double b) { if (x < 0) { return 0 ; } else if (x == 0) { if (a == 1) return 1/b ; else return 0 ; } else if (a == 1) { return exp(-x/b)/b ; } else { double p; double lngamma = gsl_sf_lngamma (a); p = exp ((a - 1) * log (x/b) - x/b - lngamma)/b; return p; } } /* New version based on Marsaglia and Tsang, "A Simple Method for * generating gamma variables", ACM Transactions on Mathematical * Software, Vol 26, No 3 (2000), p363-372. * * Implemented by J.D.Lamb@btinternet.com, minor modifications for GSL * by Brian Gough */ double gsl_ran_gamma_mt (const gsl_rng * r, const double a, const double b) { return gsl_ran_gamma (r, a, b); } double gsl_ran_gamma (const gsl_rng * r, const double a, const double b) { /* assume a > 0 */ if (a < 1) { double u = gsl_rng_uniform_pos (r); return gsl_ran_gamma (r, 1.0 + a, b) * pow (u, 1.0 / a); } { double x, v, u; double d = a - 1.0 / 3.0; double c = (1.0 / 3.0) / sqrt (d); while (1) { do { x = gsl_ran_gaussian_ziggurat (r, 1.0); v = 1.0 + c * x; } while (v <= 0); v = v * v * v; u = gsl_rng_uniform_pos (r); if (u < 1 - 0.0331 * x * x * x * x) break; if (log (u) < 0.5 * x * x + d * (1 - v + log (v))) break; } return b * d * v; } } gsl/randist/weibull.c0000644000175000017500000000305213536674414013205 0ustar eddedd/* randist/weibull.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* The Weibull distribution has the form, p(x) dx = (b/a) (x/a)^(b-1) exp(-(x/a)^b) dx */ double gsl_ran_weibull (const gsl_rng * r, const double a, const double b) { double x = gsl_rng_uniform_pos (r); double z = pow (-log (x), 1 / b); return a * z; } double gsl_ran_weibull_pdf (const double x, const double a, const double b) { if (x < 0) { return 0 ; } else if (x == 0) { if (b == 1) return 1/a ; else return 0 ; } else if (b == 1) { return exp(-x/a)/a ; } else { double p = (b/a) * exp (-pow (x/a, b) + (b - 1) * log (x/a)); return p; } } gsl/randist/chisq.c0000644000175000017500000000311013536674414012644 0ustar eddedd/* randist/chisq.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* The chisq distribution has the form p(x) dx = (1/(2*Gamma(nu/2))) (x/2)^(nu/2 - 1) exp(-x/2) dx for x = 0 ... +infty */ double gsl_ran_chisq (const gsl_rng * r, const double nu) { double chisq = 2 * gsl_ran_gamma (r, nu / 2, 1.0); return chisq; } double gsl_ran_chisq_pdf (const double x, const double nu) { if (x < 0) { return 0 ; } else { if(nu == 2.0) { return exp(-x/2.0) / 2.0; } else { double p; double lngamma = gsl_sf_lngamma (nu / 2); p = exp ((nu / 2 - 1) * log (x/2) - x/2 - lngamma) / 2; return p; } } } gsl/randist/flat.c0000644000175000017500000000261013536674414012467 0ustar eddedd/* randist/flat.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* This is the uniform distribution in the range [a, b) p(x) dx = 1/(b-a) dx if a <= x < b ..... = 0 otherwise */ double gsl_ran_flat (const gsl_rng * r, const double a, const double b) { double u = gsl_rng_uniform (r); /* A uniform distribution over [a,b) */ return a * (1 - u) + b * u; } double gsl_ran_flat_pdf (double x, const double a, const double b) { if (x < b && x >= a) { return 1 / (b - a); } else { return 0; } } gsl/randist/gsl_randist.h0000644000175000017500000002415313536674414014065 0ustar eddedd/* randist/gsl_randist.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_RANDIST_H__ #define __GSL_RANDIST_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS unsigned int gsl_ran_bernoulli (const gsl_rng * r, double p); double gsl_ran_bernoulli_pdf (const unsigned int k, double p); double gsl_ran_beta (const gsl_rng * r, const double a, const double b); double gsl_ran_beta_pdf (const double x, const double a, const double b); unsigned int gsl_ran_binomial (const gsl_rng * r, double p, unsigned int n); unsigned int gsl_ran_binomial_knuth (const gsl_rng * r, double p, unsigned int n); unsigned int gsl_ran_binomial_tpe (const gsl_rng * r, double p, unsigned int n); double gsl_ran_binomial_pdf (const unsigned int k, const double p, const unsigned int n); double gsl_ran_exponential (const gsl_rng * r, const double mu); double gsl_ran_exponential_pdf (const double x, const double mu); double gsl_ran_exppow (const gsl_rng * r, const double a, const double b); double gsl_ran_exppow_pdf (const double x, const double a, const double b); double gsl_ran_cauchy (const gsl_rng * r, const double a); double gsl_ran_cauchy_pdf (const double x, const double a); double gsl_ran_chisq (const gsl_rng * r, const double nu); double gsl_ran_chisq_pdf (const double x, const double nu); void gsl_ran_dirichlet (const gsl_rng * r, const size_t K, const double alpha[], double theta[]); double gsl_ran_dirichlet_pdf (const size_t K, const double alpha[], const double theta[]); double gsl_ran_dirichlet_lnpdf (const size_t K, const double alpha[], const double theta[]); double gsl_ran_erlang (const gsl_rng * r, const double a, const double n); double gsl_ran_erlang_pdf (const double x, const double a, const double n); double gsl_ran_fdist (const gsl_rng * r, const double nu1, const double nu2); double gsl_ran_fdist_pdf (const double x, const double nu1, const double nu2); double gsl_ran_flat (const gsl_rng * r, const double a, const double b); double gsl_ran_flat_pdf (double x, const double a, const double b); double gsl_ran_gamma (const gsl_rng * r, const double a, const double b); double gsl_ran_gamma_int (const gsl_rng * r, const unsigned int a); double gsl_ran_gamma_pdf (const double x, const double a, const double b); double gsl_ran_gamma_mt (const gsl_rng * r, const double a, const double b); double gsl_ran_gamma_knuth (const gsl_rng * r, const double a, const double b); double gsl_ran_gaussian (const gsl_rng * r, const double sigma); double gsl_ran_gaussian_ratio_method (const gsl_rng * r, const double sigma); double gsl_ran_gaussian_ziggurat (const gsl_rng * r, const double sigma); double gsl_ran_gaussian_pdf (const double x, const double sigma); double gsl_ran_ugaussian (const gsl_rng * r); double gsl_ran_ugaussian_ratio_method (const gsl_rng * r); double gsl_ran_ugaussian_pdf (const double x); double gsl_ran_gaussian_tail (const gsl_rng * r, const double a, const double sigma); double gsl_ran_gaussian_tail_pdf (const double x, const double a, const double sigma); double gsl_ran_ugaussian_tail (const gsl_rng * r, const double a); double gsl_ran_ugaussian_tail_pdf (const double x, const double a); void gsl_ran_bivariate_gaussian (const gsl_rng * r, double sigma_x, double sigma_y, double rho, double *x, double *y); double gsl_ran_bivariate_gaussian_pdf (const double x, const double y, const double sigma_x, const double sigma_y, const double rho); int gsl_ran_multivariate_gaussian (const gsl_rng * r, const gsl_vector * mu, const gsl_matrix * L, gsl_vector * result); int gsl_ran_multivariate_gaussian_log_pdf (const gsl_vector * x, const gsl_vector * mu, const gsl_matrix * L, double * result, gsl_vector * work); int gsl_ran_multivariate_gaussian_pdf (const gsl_vector * x, const gsl_vector * mu, const gsl_matrix * L, double * result, gsl_vector * work); int gsl_ran_multivariate_gaussian_mean (const gsl_matrix * X, gsl_vector * mu_hat); int gsl_ran_multivariate_gaussian_vcov (const gsl_matrix * X, gsl_matrix * sigma_hat); int gsl_ran_wishart (const gsl_rng * r, const double df, const gsl_matrix * L, gsl_matrix * result, gsl_matrix * work); int gsl_ran_wishart_log_pdf (const gsl_matrix * X, const gsl_matrix * L_X, const double df, const gsl_matrix * L, double * result, gsl_matrix * work); int gsl_ran_wishart_pdf (const gsl_matrix * X, const gsl_matrix * L_X, const double df, const gsl_matrix * L, double * result, gsl_matrix * work); double gsl_ran_landau (const gsl_rng * r); double gsl_ran_landau_pdf (const double x); unsigned int gsl_ran_geometric (const gsl_rng * r, const double p); double gsl_ran_geometric_pdf (const unsigned int k, const double p); unsigned int gsl_ran_hypergeometric (const gsl_rng * r, unsigned int n1, unsigned int n2, unsigned int t); double gsl_ran_hypergeometric_pdf (const unsigned int k, const unsigned int n1, const unsigned int n2, unsigned int t); double gsl_ran_gumbel1 (const gsl_rng * r, const double a, const double b); double gsl_ran_gumbel1_pdf (const double x, const double a, const double b); double gsl_ran_gumbel2 (const gsl_rng * r, const double a, const double b); double gsl_ran_gumbel2_pdf (const double x, const double a, const double b); double gsl_ran_logistic (const gsl_rng * r, const double a); double gsl_ran_logistic_pdf (const double x, const double a); double gsl_ran_lognormal (const gsl_rng * r, const double zeta, const double sigma); double gsl_ran_lognormal_pdf (const double x, const double zeta, const double sigma); unsigned int gsl_ran_logarithmic (const gsl_rng * r, const double p); double gsl_ran_logarithmic_pdf (const unsigned int k, const double p); void gsl_ran_multinomial (const gsl_rng * r, const size_t K, const unsigned int N, const double p[], unsigned int n[] ); double gsl_ran_multinomial_pdf (const size_t K, const double p[], const unsigned int n[] ); double gsl_ran_multinomial_lnpdf (const size_t K, const double p[], const unsigned int n[] ); unsigned int gsl_ran_negative_binomial (const gsl_rng * r, double p, double n); double gsl_ran_negative_binomial_pdf (const unsigned int k, const double p, double n); unsigned int gsl_ran_pascal (const gsl_rng * r, double p, unsigned int n); double gsl_ran_pascal_pdf (const unsigned int k, const double p, unsigned int n); double gsl_ran_pareto (const gsl_rng * r, double a, const double b); double gsl_ran_pareto_pdf (const double x, const double a, const double b); unsigned int gsl_ran_poisson (const gsl_rng * r, double mu); void gsl_ran_poisson_array (const gsl_rng * r, size_t n, unsigned int array[], double mu); double gsl_ran_poisson_pdf (const unsigned int k, const double mu); double gsl_ran_rayleigh (const gsl_rng * r, const double sigma); double gsl_ran_rayleigh_pdf (const double x, const double sigma); double gsl_ran_rayleigh_tail (const gsl_rng * r, const double a, const double sigma); double gsl_ran_rayleigh_tail_pdf (const double x, const double a, const double sigma); double gsl_ran_tdist (const gsl_rng * r, const double nu); double gsl_ran_tdist_pdf (const double x, const double nu); double gsl_ran_laplace (const gsl_rng * r, const double a); double gsl_ran_laplace_pdf (const double x, const double a); double gsl_ran_levy (const gsl_rng * r, const double c, const double alpha); double gsl_ran_levy_skew (const gsl_rng * r, const double c, const double alpha, const double beta); double gsl_ran_weibull (const gsl_rng * r, const double a, const double b); double gsl_ran_weibull_pdf (const double x, const double a, const double b); void gsl_ran_dir_2d (const gsl_rng * r, double * x, double * y); void gsl_ran_dir_2d_trig_method (const gsl_rng * r, double * x, double * y); void gsl_ran_dir_3d (const gsl_rng * r, double * x, double * y, double * z); void gsl_ran_dir_nd (const gsl_rng * r, size_t n, double * x); void gsl_ran_shuffle (const gsl_rng * r, void * base, size_t nmembm, size_t size); int gsl_ran_choose (const gsl_rng * r, void * dest, size_t k, void * src, size_t n, size_t size) ; void gsl_ran_sample (const gsl_rng * r, void * dest, size_t k, void * src, size_t n, size_t size) ; typedef struct { /* struct for Walker algorithm */ size_t K; size_t *A; double *F; } gsl_ran_discrete_t; gsl_ran_discrete_t * gsl_ran_discrete_preproc (size_t K, const double *P); void gsl_ran_discrete_free(gsl_ran_discrete_t *g); size_t gsl_ran_discrete (const gsl_rng *r, const gsl_ran_discrete_t *g); double gsl_ran_discrete_pdf (size_t k, const gsl_ran_discrete_t *g); __END_DECLS #endif /* __GSL_RANDIST_H__ */ gsl/randist/laplace.c0000644000175000017500000000270713536674414013151 0ustar eddedd/* randist/laplace.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /* The two-sided exponential probability distribution is p(x) dx = (1/(2 a)) * exp(-|x/a|) dx for -infty < x < infty. It is also known as the Laplace distribution. */ double gsl_ran_laplace (const gsl_rng * r, const double a) { double u; do { u = 2 * gsl_rng_uniform (r) - 1.0; } while (u == 0.0); if (u < 0) { return a * log (-u); } else { return -a * log (u); } } double gsl_ran_laplace_pdf (const double x, const double a) { double p = (1/(2*a)) * exp (-fabs (x)/a); return p; } gsl/randist/fdist.c0000644000175000017500000000362113536674414012655 0ustar eddedd/* randist/fdist.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2010 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* The F distribution has the form p(x) dx = (nu1^(nu1/2) nu2^(nu2/2) Gamma((nu1 + nu2)/2) / Gamma(nu1/2) Gamma(nu2/2)) * x^(nu1/2 - 1) (nu2 + nu1 * x)^(-nu1/2 -nu2/2) dx The method used here is the one described in Knuth */ double gsl_ran_fdist (const gsl_rng * r, const double nu1, const double nu2) { double Y1 = gsl_ran_gamma (r, nu1 / 2, 2.0); double Y2 = gsl_ran_gamma (r, nu2 / 2, 2.0); double f = (Y1 * nu2) / (Y2 * nu1); return f; } double gsl_ran_fdist_pdf (const double x, const double nu1, const double nu2) { if (x < 0) { return 0 ; } else { double p; double lglg = (nu1 / 2) * log (nu1) + (nu2 / 2) * log (nu2) ; double lg12 = gsl_sf_lngamma ((nu1 + nu2) / 2); double lg1 = gsl_sf_lngamma (nu1 / 2); double lg2 = gsl_sf_lngamma (nu2 / 2); p = exp (lglg + lg12 - lg1 - lg2 + (nu1 / 2 - 1) * log (x) - ((nu1 + nu2) / 2) * log (nu2 + nu1 * x)); return p; } } gsl/randist/exponential.c0000644000175000017500000000255013536674414014072 0ustar eddedd/* randist/exponential.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2009 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* The exponential distribution has the form p(x) dx = exp(-x/mu) dx/mu for x = 0 ... +infty */ double gsl_ran_exponential (const gsl_rng * r, const double mu) { double u = gsl_rng_uniform (r); return -mu * log1p (-u); } double gsl_ran_exponential_pdf (const double x, const double mu) { if (x < 0) { return 0 ; } else { double p = exp (-x/mu)/mu; return p; } } gsl/randist/poisson.c0000644000175000017500000000404113536674414013233 0ustar eddedd/* randist/poisson.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include /* The poisson distribution has the form p(n) = (mu^n / n!) exp(-mu) for n = 0, 1, 2, ... . The method used here is the one from Knuth. */ unsigned int gsl_ran_poisson (const gsl_rng * r, double mu) { double emu; double prod = 1.0; unsigned int k = 0; while (mu > 10) { unsigned int m = mu * (7.0 / 8.0); double X = gsl_ran_gamma_int (r, m); if (X >= mu) { return k + gsl_ran_binomial (r, mu / X, m - 1); } else { k += m; mu -= X; } } /* This following method works well when mu is small */ emu = exp (-mu); do { prod *= gsl_rng_uniform (r); k++; } while (prod > emu); return k - 1; } void gsl_ran_poisson_array (const gsl_rng * r, size_t n, unsigned int array[], double mu) { size_t i; for (i = 0; i < n; i++) { array[i] = gsl_ran_poisson (r, mu); } return; } double gsl_ran_poisson_pdf (const unsigned int k, const double mu) { double p; double lf = gsl_sf_lnfact (k); p = exp (log (mu) * k - lf - mu); return p; } gsl/randist/nbinomial.c0000644000175000017500000000325513536674414013517 0ustar eddedd/* randist/nbinomial.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include /* The negative binomial distribution has the form, prob(k) = Gamma(n + k)/(Gamma(n) Gamma(k + 1)) p^n (1-p)^k for k = 0, 1, ... . Note that n does not have to be an integer. This is the Leger's algorithm (given in the answers in Knuth) */ unsigned int gsl_ran_negative_binomial (const gsl_rng * r, double p, double n) { double X = gsl_ran_gamma (r, n, 1.0) ; unsigned int k = gsl_ran_poisson (r, X*(1-p)/p) ; return k ; } double gsl_ran_negative_binomial_pdf (const unsigned int k, const double p, double n) { double P; double f = gsl_sf_lngamma (k + n) ; double a = gsl_sf_lngamma (n) ; double b = gsl_sf_lngamma (k + 1.0) ; P = exp(f - a - b + n * log(p) + k * log1p(-p)); return P; } gsl/NEWS0000664000175000017500000022021214152016063010413 0ustar eddedd* What is new in gsl-2.7.1: ** update libtool version numbers * What was new in gsl-2.7: ** fixed doc bug for gsl_histogram_min_bin (lhcsky at 163.com) ** fixed bug #60335 (spmatrix test failure, J. Lamb) ** fixed bug #36577 ** clarified documentation on interpolation accelerators (V. Krishnan) ** fixed bug #45521 (erroneous GSL_ERROR_NULL in ode-initval2, thanks to M. Sitte) ** fixed doc bug #59758 ** fixed bug #58202 (rstat median for n=5) ** added support for native C complex number types in gsl_complex when using a C11 compiler ** upgraded to autoconf 2.71, automake 1.16.3, libtool 2.4.6 ** updated exponential fitting example for nonlinear least squares ** added banded LU decomposition and solver (gsl_linalg_LU_band) ** New functions added to the library: - gsl_matrix_norm1 - gsl_spmatrix_norm1 - gsl_matrix_complex_conjtrans_memcpy - gsl_linalg_QL: decomp, unpack - gsl_linalg_complex_QR_* (thanks to Christian Krueger) - gsl_vector_sum - gsl_matrix_scale_rows - gsl_matrix_scale_columns - gsl_multilarge_linear_matrix_ptr - gsl_multilarge_linear_rhs_ptr - gsl_spmatrix_dense_add (renamed from gsl_spmatrix_add_to_dense) - gsl_spmatrix_dense_sub - gsl_linalg_cholesky_band: solvem, svxm, scale, scale_apply - gsl_linalg_QR_UD: decomp, lssolve - gsl_linalg_QR_UU: decomp, lssolve, QTvec - gsl_linalg_QR_UZ: decomp - gsl_multifit_linear_lcurvature - gsl_spline2d_eval_extrap ** bug fix in checking vector lengths in gsl_vector_memcpy (dieggsy@pm.me) ** made gsl_sf_legendre_array_index() inline and documented gsl_sf_legendre_nlm() * What was new in gsl-2.6: ** add BLAS calls for the following functions: - gsl_vector_memcpy - gsl_vector_scale - gsl_matrix_memcpy - gsl_matrix_transpose_memcpy - gsl_matrix_tricpy - gsl_matrix_transpose_tricpy ** deprecated functions gsl_linalg_complex_householder_hm and gsl_linalg_complex_householder_mh ** add unit tests for gsl_linalg_symmtd and gsl_linalg_hermtd ** multilarge TSQR algorithm has been converted to use the new Level 3 QR decomposition ** nonlinear least squares Cholesky solver now uses the new Level 3 BLAS method; the old modified Cholesky solver is still available under gsl_multifit_nlinear_solver_mcholesky and gsl_multilarge_nlinear_solver_mcholesky ** implemented Level 3 BLAS versions of several linear algebra routines: - Triangular matrix inversion - Cholesky decomposition and inversion (real and complex) - LU decomposition and inversion (real and complex) - QR decomposition (courtesy of Julien Langou) - Generalized symmetric/hermitian eigensystem reduction to standard form ** removed deprecated function gsl_linalg_hessenberg() ** renamed gsl_interp2d_eval_e_extrap() to gsl_interp2d_eval_extrap_e() to match documentation (reported by D. Lebrun-Grandie) ** renamed some of the gsl_sf_hermite functions to be more consistent with rest of the library, and deprecated old function names ** updated gsl_sf_hermite_func() to use a newer algorithm due to B. Bunck which is more stable for large x; also added gsl_sf_hermite_func_fast() which uses the faster Cauchy integral algorithm in the same paper by Bunck ** add gsl_vector_axpby() ** add un-pivoted LDLT decomposition and its banded variant (gsl_linalg_ldlt_* and gsl_linalg_ldlt_band_*) ** add binary search tree module (gsl_bst); based on GNU libavl ** remove -u flag to gsl-histogram ** updated spmatrix module - added routines and data structures for all types (float,uint,char,...) - added gsl_spmatrix_scale_columns() and gsl_spmatrix_scale_rows() - added gsl_spmatrix_add_to_dense() - more efficient reallocation of COO/triplet matrices (no longer rebuilds binary tree) - enhanced test suite - added gsl_spmatrix_min_index() ** add routines for banded Cholesky decomposition (gsl_linalg_cholesky_band_*) ** documented gsl_linalg_LQ routines and added gsl_linalg_LQ_lssolve() * What was new in gsl-2.5: ** doc bug fix in binomial distribution figure (Damien Desfontaines) ** added Wishart distribution (Timothée Flutre) ** added new module for digital filtering (gsl_filter); current filters include: Gaussian filter median filter recursive median filter impulse detection filter ** added new module for moving window statistics (gsl_movstat) ** added statistics functions: gsl_stats_median() gsl_stats_select() gsl_stats_mad() gsl_stats_mad0() gsl_stats_Sn_from_sorted_data() gsl_stats_Qn_from_sorted_data() gsl_stats_gastwirth_from_sorted_data() gsl_stats_trmean_from_sorted_data() ** added Romberg integration (gsl_integration_romberg) ** bug fix in deprecated functions gsl_multifit_wlinear_svd and gsl_multifit_wlinear_usvd (reported by Vlad Koli) ** documentation corrected to state that gsl_sf_legendre functions do not include Condon-Shortley phase by default ** bug fix in exponential fitting example when using larger number of points (reported by Anna Russo) ** changed internal workspace inside gsl_spmatrix to a union to avoid casting (suggested by Manuel Schmitz) ** bug fixes in ode-initval2 for very rare solver crashing cases: #52230 in msadams (reported by Michael Kaufman) and #52336 in msbdf (reported by Andrew Benson). As a fix, the maximum scaling of controlled step length was decreased from 5.0 to 4.9. ** add histogram2d figure to manual (was missing in 2.4) ** bug fix in gsl_spmatrix_add for duplicate input arguments (reported by Alfredo Correa) ** add support for negative arguments nu in gsl_sf_bessel_Jnu and gsl_sf_bessel_Ynu (Konrad Griessinger) ** better texinfo documentation for gsl_sf_hyperg functions ** fix vector and matrix fread/fwrite testing on windows systems when tmpfile() fails ** fix for rstat/test.c on PPC64 (reported by Adam Majer) * What was new in gsl-2.4: ** migrated documentation to Sphinx software, which has built-in support for latex equations and figures in HTML output ** add const to declaration of appropriate gsl_rstat routines ** bug fix for #45730: change gsl_sf_sin/cos to libm sin/cos ** fix Cholesky documentation regarding upper triangle on output ** added routines to compute integrals with fixed-point quadrature, based on IQPACK (Konrad Griessinger) ** added routines for Hermite polynomials, gsl_sf_hermite_* (Konrad Griessinger) ** added new nonlinear least squares example for fitting a Gaussian to data ** deprecated routines: gsl_sf_coupling_6j_INCORRECT gsl_sf_coupling_6j_INCORRECT_e ** deprecated routine 'gsl_linalg_hessenberg' (replaced by gsl_linalg_hessenberg_decomp) ** removed routines which were deprecated in v2.1: gsl_bspline_deriv_alloc gsl_bspline_deriv_free ** changed COD expression to Q R Z^T instead of Q R Z to be consistent with standard texts ** added check for nz == 0 in gsl_spmatrix_get (reported by Manuel Schmitz) ** permit zero-dimension blocks, vectors, matrics, subvectors, submatrices, and views of the above (bug #49988) ** added routine gsl_linalg_COD_lssolve2 for regularized least squares problems * What was new in gsl-2.3: ** bug fix in documentation for gsl_linalg_LU_refine (bug #49728, Joey De Pauw) ** added gsl_multifit_linear_tsvd and gsl_multifit_wlinear_tsvd to give user more control over cutoff for truncated SVD ** added routines for Generalized Cross Validation for regularized linear least squares ** improved rstat example program and added documentation for gsl_rstat_sd_mean (Jonathan Leto) ** added function gsl_multifit_linear_rank ** bug fix in nonlinear least squares when using data weights with finite-difference Jacobian ** add 2D subspace method for large systems (multilarge_nlinear) ** bug fix in gsl_ran_beta for small parameters (bug #47646, Yu Liu) ** bug fix in gsl_complex_tan for negative imaginary arguments (bug #47347, Yu Liu) ** doc bug fix: value of golden ratio ** fixed scaling issue in 2D subspace nonlinear least squares method ** optimize dogleg methods to calculate Gauss-Newton point only when needed * What was new in gsl-2.2.1: ** reverted gsl_linalg_cholesky_decomp to its previous behavior so it is backward compatible; new cholesky routine is gsl_linalg_cholesky_decomp1 * What was new in gsl-2.2: ** updated gsl_linalg_cholesky_invert to use Level-2 BLAS and added function gsl_linalg_pcholesky_invert ** added functions gsl_linalg_tri_*_invert for inverting triangular matrices ** fix GSL_EIGEN_SORT_VAL_{ASC,DESC} for nonsymmetric eigensystems (Victor Zverovich) ** added complete orthogonal decomposition routines (gsl_linalg_COD) ** bug fix where median calculation wasn't reset in gsl_rstat_reset(); added gsl_rstat_quantile_reset() function (reported by Pedro Donato) ** added multivariate Gaussian random distribution gsl_ran_multivariate_gaussian (Timothée Flutre) ** added functions to estimate the 1-norm reciprocal condition number for various matrix factorizations: * gsl_linalg_cholesky_rcond * gsl_linalg_QRPT_rcond ** added functions gsl_linalg_QRPT_{lssolve,lssolve2} to compute least squares solutions with the QRPT decomposition ** added function gsl_permute_matrix() ** added modified Cholesky factorization (gsl_linalg_mcholesky) to handle symmetric indefinite matrices ** added pivoted Cholesky factorization (gsl_linalg_pcholesky) for ill-conditioned matrices ** rewrote (real) Cholesky decomposition to use a Level-2 blas algorithm instead of Level-1. Flop count is about the same but the code is much simpler and easier to follow ** completely rewritten nonlinear least squares module, including support for large problems; the user may now control the linear solver used, the trust region updating strategy, and the scaling method. In addition, support has been added for the geodesic acceleration step (Transtrum 2011) which can speed up convergence on a wide class of problems. ** added gsl_rstat_rms() for root mean square ** optimized lmniel nonlinear least squares solver (bug #46369) ** improved precision in Bessel K0/K1 near x = 2 (Pavel Holoborodko, bug #47401) ** added support for compressed row storage sparse matrices (Alexis Tantet) ** bug fix in convergence check of hypergeometric 2F1 function (bug #45926) ** added gsl_multilarge_linear_lcurve() to compute the L-curve for large linear systems ** updated multilarge normal equations method to use new Cholesky scaling for better numerical stability ** added scaling to Cholesky routines to reduce the condition number prior to factorization * What was new in gsl-2.1: ** added test suite for example programs ** bug fix when compiling with #undef GSL_DISABLE_DEPRECATED ** bug fix in setting libtool age versioning ** bug fix in gsl_multifit_wlinear() ** added gsl_multifit_linear_rcond() to compute reciprocal condition number of least squares matrix ** added gsl_multilarge module for large linear least squares systems * What was new in gsl-2.0: ** fixed bug #43258 for hypergeometric functions (Raymond Rogers) ** added L-curve analysis routines for linear Tikhonov regression ** add running statistics module ** added bilinear and bicubic interpolation (David Zaslavsky) ** added function gsl_multifit_robust_residuals to compute robust fit residuals ** added Steffen monotonic interpolation method (Jean-François Caron) ** added new nonlinear least squares solver 'lmniel' suitable for systems with large numbers of data ** nonlinear least squares solver now tracks the number of function and Jacobian evaluations, see example program for details ** the 'fdf' field of gsl_multifit_function_fdf is now deprecated and does not need to be specified for nonlinear least squares problems ** added extensive test suite to nonlinear least squares module, resulting in a few minor bug fixes; the routine gsl_multifit_fdfsolver_driver has been rewritten (with API change) to handle the various error codes of the lmsder iterate routine, resulting in a high level caller which is highly robust for a wide class of problems ** added support for sparse matrices, including a GMRES iterative linear solver ** added routines gsl_linalg_givens and gsl_linalg_givens_gv for Givens rotations ** added Tikhonov (ridge) regularization to least squares module (linear and nonlinear) ** removed unused argument 'n' from gsl_sf_ellint_D ** merged bspline_deriv_workspace into bspline_workspace to simplify bspline API; the functions gsl_bspline_deriv_alloc gsl_bspline_deriv_free are now deprecated and will be removed in a future release. ** merged ALF extension into GSL for associated Legendre functions; api has changed; consequently the functions: gsl_sf_legendre_Plm_array gsl_sf_legendre_Plm_deriv_array gsl_sf_legendre_sphPlm_array gsl_sf_legendre_sphPlm_deriv_array gsl_sf_legendre_array_size are now deprecated and will be removed in a future release. ** added function gsl_multifit_robust_weights to allow user to access the various weighting functions * What was new in gsl-1.16: ** fixed error in gsl_rng_fwrite where uninitialized padding bytes were being written (bug #39104) ** fixed error in gsl_block_alloc where padding bytes were not properly initialized (bugs #39101,#39102,#39103) ** fixed error in ntuple/test.c where padding bytes were not properly initialized (bug #39105) ** fixed triangle selection bug in gsl_sf_coupling_6j_e and gsl_sf_coupling_9j_e (bugs #39466 and #29606) (HÃ¥kan Johansson and Alexey Illarionov) ** added higher level wrapper routine gsl_multifit_fdfsolver_driver ** converted gsl_multifit_linear_residuals to use dgemv to improve efficiency (bug #39153) ** added functions gsl_stats_spearman and gsl_sort_vector2 to compute Spearman rank correlation ** added function gsl_poly_dd_hermite_init for Hermite interpolation ** Added support for robust linear least squares ** Added function gsl_linalg_SV_leverage for computing statistical leverages from SVD decomposition ** Added support for approximating the Jacobian of nonlinear least squares fits using forward finite differences ** Extended gsl_sf_coupling_3j to allow larger range and to handle the special case (ja jb jc; 0 0 0)=0 when ja+jb+jc is odd ** Fixed gsl_sf_mathieu_se_array to return zero when the order is zero [bug #33679]. ** Fixed overflow in gsl_sf_lncosh for large negative x (x<-354). ** Improved gsl_ran_negative_binomial_pdf to avoid underflow/overflow for large arguments. ** Multisets now allow k strictly greater than n. ** Fixed gsl_matrix_complex_fwrite/fread failure for noncontiguous matrices (Matthias Sitte). * What was new in gsl-1.15: ** Added Tuomo Keskitalo's new ode branch ode-initval2 with a gsl_odeiv2 prefix. This provides proper support for implicit solvers. It is intended to be the new default for differential equations. The existing gsl_odeiv routines will be retained for binary compatibility but their interface will be deprecated. ** Added new gsl_integrate_cquad routines for robust integration of difficult functions using the doubly-adaptive CQUAD algorithm (Pedro Gonnet). ** Added error checking to CBLAS functions (José Luis García Pallero) ** Added a new function gsl_integration_glfixed_point to return ordered Gauss-Legendre points and weights contained within a gsl_integration_glfixed_table [bug #32237]. ** Added a new function gsl_interp_type_min_size to return the size of an interpolation type. ** Added a function gsl_pow_uint(x,n) to compute x^n for unsigned exponents (needed when n exceeds the range of signed integers). ** Added new routine gsl_linalg_complex_cholesky_invert to handle the matrix inversion for complex Cholesky decompositions (Huan Wu). ** Added the functions gsl_vector_equal(x,y) and gsl_matrix_equal(x,y) for testing equality of two vectors or matrices. ** Added function gsl_eigen_nonsymmv_params to control the balancing transformation for eigenvector calculations. Balancing is now turned off by default for gsl_eigen_nonsymmv. ** It is now possible to choose an alternative cblas library via pkg-config using the GSL_CBLAS_LIB environment variable or the pkg-config --define-variable option. ** The jacobi method gsl_eigen_jacobi now uses the norm of the off-diagonal elements for its convergence criterion, as in algorithm 8.4.3 of Golub and van Loan. ** The newton multiroot solvers now return an error when a singular jacobian is detected. ** The interpolation functions now return NaN and when x is out of range, instead of extrapolating. ** The gsl_multimin_fdfsolver multidimensional minimisers now return GSL_ENOPROG immediately if the generated trial point does not differ from the initial point (to machine precision), avoiding unnecessary further iterations. ** Extended the range of gsl_sf_bessel_lnKnu_e by rescaling intermediate results to avoid internal overflows [bug #31528]. ** Improved the result of gsl_sf_atanint_e for large arguments by adding the first order 1/x correction term. [bug #29562] ** Fixed the gsl_rng_ranlxs generators to enforce a maximum seed value of 2^31-1. Larger seed values corrupted the random number state and caused out of range values to be returned. ** Fixed gsl_ran_chisq_pdf(x,nu) to return correct result of 1/2 instead of 0 when x=0 and nu=2, and +inf when x=0 and nu<2. ** Fixed gsl_pow_int(x,n) to avoid an infinite loop when n=INT_MIN due to wrapping of signed integers. ** Fixed gsl_sf_hyperg_2F1(a,b,c,x) to avoid returning NaN for arguments |a|>10. [bug #24812] ** Avoid spurious underflow return code in gsl_sf_beta_inc_e when intermediate underflow does not affect the result. [bug #30933] ** Avoid segfault in Chebyshev series derivatives gsl_cheb_calc_deriv for n=1. [bug #29139] * What was new in gsl-1.14: ** Upgraded to latest libtool, autoconf and automake (libtool-2.2.6b, autoconf-2.65, automake-1.11.1). Fixes security hole in 'make dist' (see Automake CVE-2009-4029). ** Added support for "multisets", which are similar to permutations and combinations. A multiset is an array of k integers in the range 0 to n-1 where each value may occur more than once. Multisets can be used to iterate over the indices of a k-th order symmetric tensor in n-space. (Rhys Ulerich) ** Added gsl_integrate_glfixed routines for performing fixed order Gauss-Legendre integration (Pavel Holoborodko, Konstantin Holoborodko, Rhys Ulerich) ** In the LMDER multi-dimensional fitting routines, the return code GSL_ENOPROG is now used instead of GSL_CONTINUE for the case where 10 or more attempts to find a suitable trial step have been made without success. [bug #25383] ** The confluent hypergeometric function gsl_sf_hyperg_U (a,b,x) has been extended to support x < 0 for cases not involving singularities in 1F1(a,b,x). [bug #27859] ** The F-distribution gsl_ran_fdist_pdf now avoids unnecessary underflow and overflow and handles cases where n > 248. [bug #28500] ** The SVD routines now use a scaled version of the implicit QR method and compute the shift more reliably for values at the limit of double precision, avoiding potential NaNs. [bug #28767] ** A compile time error is emitted if the configuration stage prevents the functions gsl_isnan and gsl_finite from being defined. ** Added missing dereference in GSL_VECTOR_COMPLEX when not using GSL_RANGE_CHECK [bug #28017] ** Improved the range of gsl_sf_hyperg1F1(a,b,x) when a<0,b>0. [bug #28718] ** Added macros GSL_MAJOR_VERSION and GSL_MINOR_VERSION in ** Improved gsl_eigen_symmv and gsl_eigen_symm to avoid a potential infinite loop when the tridiagonalised matrix contains very small values. [bug #28096] ** Added functions gsl_multifit_linear_usvd and gsl_multifit_wlinear_usvd for multilinear fitting without column-scaling of the fit matrix. * What was new in gsl-1.13: ** Upgraded to latest autoconf and automake (autoconf-2.64, automake-1.11) ** Fixed the rk4 and bspline allocators to avoid invalid free() calls under out of memory conditions. [bug #27194, #27236] ** Fixed a bug in gsl_multimin_fminimizer_nmsimplex2 where the center and size of the simplex were not updated on contract-by-best steps, causing failures in convergence. [bug #27180] ** Added new functions to set MISER and VEGAS Monte Carlo integration parameters, and to examine VEGAS chi-squared value and intermediate results. ** Added the function gsl_bspline_greville_abscissa to compute Greville abscissae for B-splines. ** The cumulative distribution functions gsl_cdf_gumbel1_{P,Q} should now handle a larger range of parameters without underflow and overflow. ** The header file gsl_const_cgs.h no longer defines values for electromagnetic units. Applications should use gsl_const_cgsm.h instead to obtain the values in the CGS-Magnetic system. The previous values for these units given in gsl_const_cgs.h were ill-defined as the type of CGS electromagnetic system was unspecified (the values were a mixture of CGS units with the Ampere of the MSKA system). The affected constants are GSL_CONST_CGS_BOHR_MAGNETON, GSL_CONST_CGS_ELECTRON_CHARGE, GSL_CONST_CGS_ELECTRON_MAGNETIC_MOMENT, GSL_CONST_CGS_FARADAY, GSL_CONST_CGS_GAUSS, GSL_CONST_CGS_NUCLEAR_MAGNETON, GSL_CONST_CGS_PROTON_MAGNETIC_MOMENT, and GSL_CONST_CGS_ROENTGEN. ** The Pochhammer functions gsl_sf_poch(a,x) and gsl_sf_lnpoch(a,x) now handle the special cases where a and a+x are zero or negative integers. ** The confluent hypergeometric function gsl_sf_hyperg_U (a,b,x) now handles some cases where x=0. The case where 1+a-b is a negative integer no longer returns an error [bug #22859] and the incorrect termination of the series in certain cases is fixed [bug #26706]. ** Added a new function gsl_poly_eval_derivs to evaluate a polynomial and its derivatives simultaneously. ** Added a new univariate minimisation algorithm gsl_min_fminimizer_quad_golden which is a variant of Brent's algorithm with safeguarded step-length adjustment. ** Added a new Nelder-Mead minimiser gsl_multimin_fminimizer_nmsimplex2rand which uses a randomly oriented simplex rather than one fixed on the coordinate axes [bug #25077] ** The texinfo file now uses the dircategory "Software libraries" from the Free Software Directory, as recommended in the Texinfo manual. ** The function gsl_ran_exponential now includes zero in its output range. [bug #25039] ** All functions for freeing allocated memory now accept a NULL pointer, following the standard C convention for free(). [bug #25319] ** The function gsl_sum_levin_u_accel now handles the special case c_0 + 0 + 0 + 0 + .... that occurs when summing power series c_n*x^n with x=0. [bug #26807] ** The functions gsl_linalg_LU_solve, gsl_linalg_LU_svx, gsl_linalg_LU_refine, gsl_linalg_LU_invert and their complex equivalents now return an error for singular matrices. ** The multifit LMDER hybrid solvers now check the return code of the user-supplied function in the gsl_multifit_fdfsolver_set method. [bug #26871] ** Improved the implementation of gsl_ran_discrete_preproc to avoid internal errors due to inconsistencies from excess precision on some platforms. [bug #26502] ** Corrected gsl_sf_hyperg_2F1(a,b,c,x) to not give a domain error in the case where c is a negative integer and the series terminates with a finite result. ** The C99 inline keyword is now supported, in addition to the previously supported GNU-style inline. ** Modified gsl_poly_complex_solve_cubic and gsl_poly_solve_cubic to avoid returning NaNs in cases where excess precision causes a change in the number of roots. ** Fixed incorrect length check in gsl_blas_drotm. [bug #26503] ** Fixed gsl_odeiv_step_gear2 to restore y on step failure ** gsl_odeiv_evolve_apply now restores the correct value of t on step failures [bug #26255]. ** Using make install prefix=DIR now puts correct paths in package config files gsl-config and gsl.pc ** Modified gsl_monte_vegas to work around pow() function inaccuracies on MinGW [bug #25413]. ** Increased the number of terms in gsl_sf_mathieu_a and gsl_sf_mathieu_b to improve convergence in difficult regions [bug #25075] * What was new in gsl-1.12: ** Upgraded to latest libtool, autoconf and automake (libtool-2.2.6, autoconf-2.63, automake-1.10.2) ** Improved the convergence of gsl_sf_gamma_inc_P for x/a ~=~ 1 and large x,a. Fixes problems with large arguments in cdf functions such as gsl_cdf_chisq_Pinv(x,nu) [bug 24704]. ** Fixed gsl_ran_gamma_knuth to handle the case of a >= UINT_MAX [bug #24897] ** Added gsl_bspline_eval_deriv to compute bspline derivatives (Rhys Ulerich) ** Added a faster simplex mininimser gsl_multimin_fminimizer_nmsimplex2 which is O(N) instead of O(N^2) [bug #24418] ** Improved the original chi-squared formula in gsl_monte_vegas to avoid catastrophic cancellation [bug #24510]. The previous formula could return incorrect or negative values for relative errors < 1e-8, which could occur when integrating very smooth functions. ** Added new auxiliary functions gsl_cheb_order, gsl_cheb_size, gsl_cheb_coeffs for Chebyshev series [bug #21830] ** Updated license of the reference manual to GNU FDL version 1.3. ** Fixed a bug where the gsl_isinf function would return +1 for -Inf on systems where isinf(-Inf) returns the non-standard value +1. [bug #24489] ** Added missing functions gsl_vector_complex_{isnonneg,add,sub,mul, div,scale,add_constant} and gsl_matrix_complex_float_isnonneg [bug #22478] ** Cross compilation should now work for x86 hosts. ** Fixed a bug in gsl_interp_accel_find() where values lying on the upper boundary between interpolation points could return the index from the lower side. [bug #24211] ** Fixed gsl_linalg_solve_cyc_tridiag so that its output respects the solution vector's stride. Previously the x_stride value was ignored causing the output to be incorrect for non-unit stride. [bug #24162] ** Corrected a bug in the series calculation of gsl_sf_ellint_Kcomp for k close to 1. [bug #24146] ** Extended gsl_linalg_QRPT_update to handle rectangular matrices. Corrected definition of the update formula in the manual for both gsl_linalg_QR_update and gsl_linalg_QRPT_update. ** Added routine gsl_linalg_cholesky_invert ** Fixed a bug the simplex algorithm which caused the second highest point to be incorrectly equal to the first when the first value was the highest, which could cause suboptimal convergence. [bug #23192] ** Fixed a problem with convergence for inverse gamma and chisq distribitions, gsl_cdf_gamma_{P,Q}inv and gsl_cdf_chisq_{P,Q}inv. [bug #23101] ** Improved the handling of constant regions in Vegas by eliminating spurious excess precision when computing box variances. ** Fixed a potential division by zero in gsl_monte_miser when the left/right weight factors decrease below 1. ** Fixed incorrect dimensions check in gsl_matrix_sub{row,column} * What was new in gsl-1.11: ** The GSL repository and bug database are now hosted at Savannah http://savannah.gnu.org/projects/gsl/ ** Upgraded to latest libtool, autoconf and automake (libtool-2.2, autoconf-2.61, automake-1.10.1) ** Fixed underflow in ODE adaptive step size controller that could cause step size to decrease to zero (bug #21933). ** Improved the handling of the asymptotic regime in gsl_sf_bessel_jl. ** Improved the handling of large arguments in cumulative distribution functions using the incomplete beta function, such as gsl_cdf_fdist_P. ** Fixed overflow bug in gsl_cdf_hypergeometric_{P,Q} for large arguments (bug #22293). ** gsl_ran_gaussian_ziggurat now handles generators with different ranges explicitly, to minimise the number of function calls required (bug #21820). Also fixes bug #22446 (rng limit in gsl_ran_chisq()). ** Added missing error terms in gsl_sf_exp_mult_e10_e to prevent the error being underestimated (bug #22041). ** Updated some constants to the CODATA 2006 values. ** The hypergeometric function gsl_sf_hyperg_2F1 now handles the case where x==1. ** Fixed a bug in the brent minimiser which prevented optimal convergence. ** Added functions for evaluating complex polynomials ** The convergence condition for gsl_multiroots_test_delta now accepts dxi == 0. ** Improved functions gsl_ldexp and gsl_frexp to handle the full range of double precision numbers in all cases. ** Added new quasi random generators gsl_qrng_halton and gsl_qrng_reversehalton which support dimensions up to 1229. ** Added function gsl_multifit_linear_residuals for computing the residuals of the fit * What was new in gsl-1.10: ** License updated to GNU GPL version 3. ** Added support for generalized eigensystems ** Added function gsl_stats_correlation to compute Pearson correlation of two datasets ** Added the new function gsl_sf_expint(n,x) for computing the n-th order exponential integral. ** Added functions gsl_vector_isnonneg and gsl_matrix_isnonneg. ** Added functions gsl_matrix_subrow and gsl_matrix_subcolumn ** Extended Cholesky routines to complex matrices ** Added support in gsl_ieee_set_mode for controlling SSE exceptions and rounding through the MXCSR control word on x86 processors. ** The autoconf macro AM_PATH_GSL has been renamed to AX_PATH_GSL, to avoid conflicts with the autoconf namespace. ** Improved handling of underflow in gsl_eigen_symm. ** The function gsl_multiroot_fdjacobian now returns the error code GSL_ESING if any of the columns of the computed jacobian matrix are zero. This may occur if the step size of the derivative is too small. ** Extended the function gsl_sf_beta_inc(a,b,x) to handle cases where a<0 or b<0. ** Fixed the round-off error estimate in gsl_deriv_{central,backwards, forward} to correctly account for numerical error in the step-size h. ** Fixed gsl_cdf_beta_Pinv, gsl_cdf_gamma_Pinv, gsl_cdf_beta_Pinv to avoid returning spurious values for large parameters when the iteration did not converge. If the iteration cannot converge, GSL_NAN is returned. ** gsl_ran_dirichlet now handles smaller values of alpha[] without underflow, avoiding a NaN in the returned value. ** The SVD routines now avoid underflow in the Schur decomposition for matrices with extremely small values pi/2 and phi < 0. The angular argument is now valid for all phi. Also added the complete elliptic integral gsl_sf_ellint_Pcomp. ** Added a new BFGS minimisation method gsl_multimin_fdfminimizer_vector_bfgs2 based on the algorithm given by R.Fletcher in "Practical Methods of Optimisation" (Second edition). This requires substantially fewer function and gradient evaluations, and supercedes the existing BFGS minimiser. ** The beta functions gsl_sf_beta_e(a,b) and gsl_sf_lnbeta_e(a,b) now handle negative arguments a,b. Added new function gsl_sf_lnbeta_sgn_e for computing magnitude and sign of negative beta values, analagous to gsl_sf_lngamma_sgn_e. ** gsl_cheb_eval_mode now uses the same error estimate as gsl_cheb_eval_err. ** Improved gsl_sf_legendre_sphPlm_e to avoid underflow with large arguments. ** Added updated Knuth generator, gsl_rng_knuthran2002, from 9th printing of "The Art of Computer Programming". Fixes various weaknesses in the earlier version gsl_rng_knuthran. See http://www-cs-faculty.stanford.edu/~knuth/news02.htm ** The functions gsl_multifit_fsolver_set, gsl_multifit_fdfsolver_set and gsl_multiroot_fsolver_set, gsl_multiroot_fdfsolver_set now have a const qualifier for the input vector x, reflecting their actual usage. ** gsl_sf_expint_E2(x) now returns the correct value 1 for x==0, instead of NaN. ** The gsl_ran_gamma function now uses the Marsaglia-Tsang fast gamma method of gsl_ran_gamma_mt by default. ** The matrix and vector min/max functions now always propagate any NaNs in their input. ** Prevented NaN occuring for extreme parameters in gsl_cdf_fdist_{P,Q}inv and gsl_cdf_beta_{P,Q}inv ** Corrected error estimates for the angular reduction functions gsl_sf_angle_restrict_symm_err and gsl_sf_angle_restrict_pos_err. Fixed gsl_sf_angle_restrict_pos to avoid possibility of returning small negative values. Errors are now reported for out of range negative arguments as well as positive. These functions now return NaN when there would be significant loss of precision. ** Corrected an error in the higher digits of M_PI_4 (this was beyond the limit of double precision, so double precision results are not affected). ** gsl_root_test_delta now always returns success if two iterates are the same, x1==x0. ** A Japanese translation of the reference manual is now available from the GSL webpage at http://www.gnu.org/software/gsl/ thanks to Daisuke TOMINAGA. ** Added new functions for basis splines, see the "Basis Splines" chapter in the GSL Reference Manual for details. ** Added new functions for testing the sign of vectors and matrices, gsl_vector_ispos, gsl_vector_isneg, gsl_matrix_ispos and gsl_matrix_isneg. ** Fixed a bug in gsl_sf_lnpoch_e and gsl_sf_lnpoch_sgn_e which caused the incorrect value 1.0 instead of 0.0 to be returned for x==0. ** Fixed cancellation error in gsl_sf_laguerre_n for n > 1e7 so that larger arguments can be calculated without loss of precision. ** Improved gsl_sf_zeta_e to return exactly zero for negative even integers, avoiding less accurate trigonometric reduction. ** Fixed a bug in gsl_sf_zetam1_int_e where 0 was returned instead of -1 for negative even integer arguments. ** When the differential equation solver gsl_odeiv_apply encounters a singularity it returns the step-size which caused the error code from the user-defined function, as opposed to leaving the step-size unchanged. ** Added support for nonsymmetric eigensystems ** Added Mathieu functions * What was new in gsl-1.8: ** Added an error check to trap multifit calls with fewer observations than parameters. Previously calling the multifit routines with n

100*l*l to satisfy he requirement x>>l*l in the asymptotic expansion. ** The scaled bessel function gsl_sf_bessel_In_scaled now handles larger arguments x > 1e7 correctly for n < 150 using the uniform asymptotic expansion instead of the continued fraction expansion. ** The functions gsl_stats_min/max now return NaN if the data contains NaN. Similarly, the functions gsl_stats_min/max_index return the index of the first occurring NaN in the data when it contains a NaN. ** Fixed an invalid memory access that caused incorrect results for the special case in periodic cubic spline interpolation of 3 points. ** Added Debye functions for n=5 and n=6 ** Added the missing functions gsl_spline_name() and gsl_spline_min_size() ** The function gsl_rng_uniform_int(r,n) now returns an error for n=0, which can occur when passing an unsigned integer value of 2^32. * What was new in gsl-1.7: ** Switched gsl_randist_binomial to use the faster binomial random variate TPE algorithm by default. The previous binomial variate algorithm is available as gsl_randist_binomial_knuth. This will result in a different sequence of binomial variates in programs using this function. ** Improved the algorithm for gsl_sf_elljac_e to avoid cancellation errors near quarter periods. ** Fixed the branch selection in gsl_sf_gamma_inc_Q_e to avoid inaccurate results for large a,x where x~=~a. ** The multilinear fitting functions now have forms which accept a user-specified tolerance for the SVD cutoff and return the corresponding effective rank of the design matrix. ** The quadratic solvers in poly/ now handle linear equations gracefully (i.e. quadratrics with a leading coefficient of zero). ** The output of "make check" now only shows test failures by default, to reduce the amount of output. Set the environment variable GSL_TEST_VERBOSE=1 to display all the output. To assist debugging, the test number of each failure is shown in square brackets at the line-end [NNNN]. ** Fixed bugs in gsl_linalg_SV_decomp_jacobi which caused incorrect results for some input matrices. ** Bessel, coulomb, dilogarithm and legendre_H3d functions now use hypot internally to avoid overflow when computing terms like sqrt(1+x*x). ** The 'Usage' chapter of the reference manual now explains how to handle deprecated functions using the GSL_DISABLE_DEPRECATED macro. ** The conflicting enum definitions for 'forward' and 'backward' in gsl_ftt.h and gsl_wavelet.h are deprecated. User code should switch to the new definitions gsl_fft_forward, gsl_fft_backward, gsl_wavelet_forward and gsl_wavelet_backward. Selectively define GSL_DISABLE_DEPRECATED before including the headers to use the new definitions on either or both modules. ** Fixed an error in the the brent minimisation algorithm. Iterations should now follow Brent's original description correctly. ** The bound coulomb function gsl_sf_hydrogenicR_e no longer reports an underflow for exact zeroes of the wavefunction. ** gsl_linalg_SV_decomp_jacobi now reports an error for the unimplemented case M>N) use the LQ decomposition, solving the transpose of the original system. This allows more efficient memory access, and is useful for solving large least-squares problems. ** Fixed a bug in the SYRK and HERK blas functions gsl_blas_{s,d,c,z}syrk and gsl_blas_{c,z}herk which caused invalid memory access for non-square matrices. ** Fixed a bug in gsl_swap_vectors which caused it to return incorrect results when swapping vectors with different strides. ** Corrected the error estimate for gsl_cheb_eval_n_err to use evaluation order instead of the approximation order. ** Improved the reliability of the gsl_sf_gamma_inc family of functions. ** Equal abscissae are now handled gracefully in the cspline and periodic cspline interpolations. ** Removed potential cancellation error in calculation of uniform histogram ranges. ** Improved numerical stability of integration for akima and cspline interpolation. ** Differential equation solvers now handle error codes returned from user-defined functions. ** Improved error estimates in ode-initval solvers, and provide exact derivatives on output. Added new semi-implicit ode-initval solver, gsl_odeiv_step_rk2simp. ** Added missing function definition for gsl_sf_psi_1. ** Fixed the function gsl_sf_expint_Ei_scaled to call gsl_sf_expint_Ei_scaled_e instead of gsl_sf_expint_Ei_e. ** Added cumulative distribution function for exponential power distribution. ** The functions gsl_cdf_beta_P and gsl_cdf_beta_Q now return consistent results of 0 or 1 for out of range values, x<0 and x>1, rather than 0 for left and right tails simultaneously. ** The Jacobi eigensolvers gsl_eigen_jacobi and gsl_eigen_jacobi_invert have new implementations from Golub and Van Loan. ** The standard output and standard error streams are now flushed by the default error handler before the program aborts, in order to ensure that error messages are properly displayed on some platforms. * What was new in gsl-1.5: ** Multifit routines now handle iterations where |f| is already minimised to zero, without division by zero. ** Fixed the singular value tolerance test in the multifit covariance calculation from < to <= to match the original MINPACK code. ** The macro HAVE_INLINE is now tested with #ifdef instead of #if as in versions prior to 1.4, to match the documentation, and the macro GSL_RANGE_CHECK_OFF now works correctly. An alternative macro GSL_RANGE_CHECK={0,1} can be used to control range-checking. ** Fixed a potential array overflow in gsl_ran_landau. ** Fixed a small discrepancy in the tolerance calculation of the one-dimensional brent minimiser. ** Numerical derivatives should now be calculated using the gsl_deriv_forward, gsl_deriv_central and gsl_deriv_backward functions, which accept a step-size argument in addition to the position x. The original gsl_diff functions (without the step-size) are deprecated. ** Corrected documentation for gsl_ran_hypergeometric_pdf() ** The tridiagonal matrix solvers gsl_linalg_solve_symm_tridiag, gsl_linalg_solve_tridiag, gsl_linalg_solve_symm_cyc_tridiag, gsl_linalg_solve_cyc_tridiag now use the GSL_ERROR macro to report errors, instead of simply returning an error code. The arguments to these functions must now use exact lengths with no additional elements. For cyclic systems all vectors must be of length N, for tridiagonal systems the offdiagonal elements must be of length N-1. ** The singular value decomposition routines gsl_linalg_SV_decomp and gsl_linalg_SV_decomp_mod now handle the SVD of a column vector (N=1, arbitrary M), which can occur in linear fitting. ** Restored missing header files gsl_const_mks.h and gsl_const_cgs.h. The incorrect values of the electrical units for gsl_const_cgs (VACUUM_PERMEABILITY and VACUUM_PERMITTIVITY) have been removed. ** Fixed gsl_linalg_SV_decomp() to avoid an infinite loop when computing the SVD of matrices containing Inf and Nan. ** Fixed gsl_linalg_balance_columns() to avoid an infinite loop when rescaling matrices containing Inf and NaN. ** Fixed header file to include declarations for error codes in inline versions of gsl_sf_log functions ** Fixed header file to include new MKSA and CGSM header files. ** Added Stefan-Boltzmann constant and Thomson cross section to physical constants * What was new in gsl-1.4: ** Added cumulative distribution functions and their inverses for the continuous random distributions including: gaussian, lognormal, gamma, beta, cauchy, laplace, chisq, exponential, gumbel, weibull, F-distribution, t-distribution, logistic, pareto and rayleigh. ** Added faster binomial random variates using the TPE rejection algorithm, in the function gsl_randist_binomial_tpe. ** Added new functions gsl_rng_fwrite and gsl_rnd_fread for storing the state of random number generators in a file. ** Added a new function gsl_combination_memcpy() ** Corrected values of electrical constants in CGS units. To take account of different electrical systems of units the values are now prefixed by GSL_CONST_MKSA (for the SI Metre, Kilogram, Second, Ampere system) or GSL_CONST_CGSM (for the Centimetre, Gram, Second, Magnetic system with the Gauss as the fundamental unit of magnetic field strength). The previous GSL_CONST_MKS and GSL_CONST_CGS prefixes have been removed, as have the permeability and permittivity constants in the CGS system since this uses different defining equations. ** Fixed bugs in the random number generators gsl_rng_fishman18, gsl_rng_fishman2x, and gsl_rng_knuthran2 which caused them to return incorrect results. Minor corrections were made to the parameters in the other Knuth generators borosh13, coveyou, fishman20, lecuyer21, and waterman14. ** Fixed a missing transpose bug in the gsl_linalg_QR_QRsolve and gsl_linalg_QRPT_QRsolve routines which were computing the solution to Q^T R x = b instead of Q R x = b. ** Fixed gsl_sf_gammainv to return zero instead of a domain error for arguments corresponding to singularities in gamma. ** Fixed a bug in the simplex minimization algorithm which caused it to fail to find the second highest point correctly when searching the set of simplex points. ** Fixed a bug in the conjugate gradient minimizers conjugate_pr, conjugate_fr and vector_bgfs which caused the search directions to be updated incorrectly. ** Fixed a bug in gsl_sf_psi_1_int(1) which caused it to return the incorrect sign for psi(1,1). ** Fixed the simulated annealing routine gsl_siman_solve to use the parameter iters_fixed_T for the number of iterations at fixed temperature instead of n_tries. ** Fixed a bug in gsl_combination_valid which caused it to return the incorrect status. ** Fixed a bug in gsl_permutation_canonical_to_linear which caused the output to always be zero, and the input permutation to be incorrectly replaced by the output. ** Fixed a bug is gsl_ran_discrete which could cause uninitialised data to be returned for some distributions. ** Fixed the dependencies for gsl_chebyshev.h to include gsl_math.h. ** Fixed a bug in gsl_complex_arccsc_real which caused it to return the incorrect sign for the imaginary part when -110. ** Improved the accuracy of gsl_sf_coupling_3j for large arguments. ** Improved the performance of gsl_sf_choose(m,n) by separating the calculations for small and large arguments. ** On platforms without IEEE comparisons gsl_{isnan,isinf,finite} will fall back to the system versions of isnan, isinf and finite if available. ** gsl_linalg_householder_hv now uses BLAS routines internally ** The script configure.in is now compatible with autoconf-2.50 and later. ** Reduced the memory usage of the multifit algorithms from MxM to MxN for large M by performing the QR decomposition of the Jacobian in-place. ** IEEE modes now use the C99 fenv.h functions when platform spectific functions are not available. * What was new in gsl-1.3: ** Changed interface for gsl_sf_coupling_6j...(...). The old functions actually calculated 6j for a permutation of the arguments (that related to Racah W). This was incorrect and not consistent with the documentation. The new versions calculate < {a,b,c}, {d,e,f} >, as stated in the documentation. The old versions are still available as gsl_sf_coupling_6j_INCORRECT...(...), though they are deprecated and will be removed at some point in the future. ** Added new functions for computing Em(x)=exp(-x)*Ei(x), the modified (scaled) form of the exponential integral, gsl_sf_expint_E1_scaled, gsl_sf_expint_E2_scaled, gsl_sf_expint_Ei_scaled. ** Fixed compilation problems with gcc -ansi and other ANSI compilers. ** Fixed uninitialized memory access in the Niederreiter quasi-random number generator. ** Fixed the eigenvalue routines to prevent an infinite loop for Inf or NaN entries in matrix. ** Fixed a bug in the multifit and multiroots allocation routines which cause them to fail to report some out of memory conditions. ** Fixed a bug in the seeding for the random number generator gsl_rng_taus2 which affected a small number of seeds. ** Modified the complex householder transforms to avoid division by zero, which could cause NaNs to be returned by the gsl_eigen_hermv eigenvalue decomposition. ** The Nelder-Mead simplex algorithm for multidimensional minimisation has been added. ** The random number distributions now include the Dirichlet and Multinomial distributions. ** Added a new function gsl_fcmp for approximate comparison of floating point numbers using Knuth's algorithm. ** Added new functions gsl_ldexp and gsl_frexp as portable alternatives to ldexp() and frexp(). ** Fixed a bug in gsl_linalg_bidiag_unpack_B which was returning incorrect results for the superdiagonal. ** Fixed a bug in the acceptance condition for simulated annealing ** Ordinary differential equations can now be solved using a different absolute error for each component with gsl_odeiv_control_scaled_new(). ** Upgraded to libtool-1.4.3 * What was new in gsl-1.2: ** Added new functions for combining permutations, converting between cyclic and linear representations, and counting cycles and inversions. ** New multiroot functions now allow access to the current values of f and dx. ** The default error handler now outputs a explanatory message before aborting. ** Extended gsl_linalg_SV_decomp to handle exact zeroes in the singular values, and added tests for 3x3 matrices. ** Fixed a bug in gsl_linalg_SV_decomp which caused singular values to be sorted incorrectly. ** Fixed a bug in gsl_linalg_solv_symm_cyc_tridiag which caused it to produce incorrect results. ** Added nonsymmetric tridiagonal solvers gsl_linalg_solve_tridiag and gsl_linalg_solve_cyc_tridiag. ** The declarations used to export static objects can now be controlled through a macro GSL_VAR and the header file . ** The simulated annealing routine gsl_siman_solve now keeps track of the best solution so far. ** The values of the physical constants have been updated to the CODATA 1998 recommendations. ** Added new physical constants, newton, dyne, joule, erg and power-of-ten prefixes, Mega, Giga, Tera, etc. ** The error estimate for the elliptic function gsl_sf_ellint_Kcomp_e has been improved to take account of numerical cancellation for small arguments. ** The domain of gsl_sf_psi_1piy has been extended to negative y. ** Fixed memory leak in the Chebyshev module. ** The seeding procedure of mt19937 has been updated to the latest version from Makoto Matsumoto and Takuji Nishimura (Jan 2002). The original seeding procedure is available through the generator gsl_rng_mt19937_1999. ** A new random number generator gsl_rng_taus2 has been added to correct flaws in the seeding procedure of gsl_rng_taus, as described in an erratum to the original paper of P. L'Ecuyer. ** Added missing declaration for the generator gsl_rng_mt_19937_1998. ** Added missing quasi-random number generator function gsl_qrng_init. ** Removed unnecessary endpoint subtraction in chebyshev-based QUADPACK routines to avoid possible loss of precision. ** Fixed bug in gsl_interp_cspline_periodic which caused a discontinuity in the derivative near the boundary. ** The function gsl_min_fminimizer_minimum has been renamed to gsl_min_fminimizer_x_minimum for consistency (the old function name is still available but is deprecated). Additional functions have been added for accessing the function values at the minimum and endpoints of the bounding interval. ** The KNOWN-PROBLEMS file of "make check" failures has been replaced by a BUGS file, since we now require "make check" to work correctly for stable releases. * What was new in gsl-1.1.1: ** Fixes to histogram2d stat functions ** Added missing prototypes for complex LU determinant functions ** Improved error handling in multifit routines ** Added check to avoid division by zero for rank-deficient matrix in multifit iteration * What was new in gsl-1.1: ** The permutation module now includes a copy function gsl_permutation_memcpy ** The implementation of gsl_sf_gamma_inc has been improved and now avoids problems caused by internal singularities which occurred in the series expansion for some combinations of parameters. ** IEEE comparisons of infinities and NaNs are tested during the configure stage and the functions gsl_isnan, gsl_isinf and gsl_finite are only compiled on platforms which support the necessary tests. ** The histogram routines now include a sum function, gsl_histogram_sum for computing the total bin sum, and additional statistics functions for 2d histograms. ** Internal error checking of user-defined functions has been improved in the multiroots functions. ** Constants now include the Bohr Radius and Vacuum Permittivity. ** Range checking is now turned off when building the library, but is still on by default when compiling user applications. ** A combinations directory has been added for generating combinations (n,k). ** The gamma function now returns exact values for integer arguments. ** Fixed bugs in gsl_sf_hyperg_1F1_int and gsl_sf_hyperg_1F1. ** Fixed internal error handling in gsl_sf_laguerre_n to allow recovery from overflow. ** Several routines for handling divided difference polynomials have been added to the poly/ directory. ** The interpolation routines now include polynomial interpolation, based on divided-differences. ** Added new random number generators from Knuth's Seminumerical Algorithms, 3rd Edition: borosh13, coveyou, fishman18, fishman20, fishman2x, knuthran, knuthran2, lecuyer21, waterman14. ** Changed divisor in random number generator gfsr4 from 2^32-1 to 2^32 to prevent exact value of 1.0 from being returned, as specified in the documentation. * What was new in gsl-1.0: ** First general release. ** Increased the maximum number of iterations in gsl_poly_complex_solve() from 30 to 60. * What was new in gsl-0.9.4: ** Reorganized the multmin functions to use the same interface as the other iterative solvers. ** Added histogram _alloc functions for consistency, in addition to the existing _calloc functions. ** Renamed all the gsl_multimin functions to be consistent with the rest of the library. An underscore has been removed from _minimizer in all the function names. ** Renamed the function gsl_sf_coulomb_CL_list to gsl_sf_coulomb_CL_array ** A bug in the multimin functions where the function parameters (params) were omitted has been fixed. ** A bug in the nonlinear minimization routines has been fixed, which could prevent the algorithms from converging. Additional tests from the NIST reference datasets have been added and these now agree with MINPACK. ** All the physical constants and conversion factors are now defined as real numbers to avoid potential problems with integer arithmetic. ** The ODE evolution routines now allow for negative step sizes, and integrating backwards as well as forwards. ** The implicit Burlisch-Stoer ODE algorithm 'bsimp' now detects singularities and forces a reduction in step size, preventing runaway instabilities. ** Fixed a bug in the ODE evolution function gsl_odeiv_evolve_apply which could cause an erroneous value to be returned if the step size is reduced on the last step. * What was new in gsl-0.9.3: ** Routines for complex LU decomposition are now available, allowing the solution of systems of equations with complex coefficients. ** Matrix views of vectors now correctly require a unit stride for the original vector. ** Permutations can now be applied to complex arrays and vectors. ** gsl_sf_pow_int now handles the case x = 0, n < 0 ** The static versions of inline functions can now be hidden by defining the preprocessor macro HIDE_INLINE_STATIC. This is needed for some compilers. ** The original seeding procedure of mt19937 is available through the generator gsl_rng_mt19937_1998. The seeding procedure was flawed, but is available for compatibility. ** Added missing functions gsl_complex_div_real and gsl_complex_div_imag. ** Missing functions for constant vector and matrix views have now been added. ** Statistical calculations for histograms are now available, and the gsl-histogram command also displays the histogram mean and standard deviation. ** The behavior of GSL_IEEE_MODE for denormalized exceptions has been fixed on Openbsd and Netbsd. ** A pkg-config file gsl.pc is included in the distribution ** The reference manual can now be printed in @smallbook format without overflow. * What was new in gsl-0.9.2: ** Vector and matrix views are now compliant with the ANSI standard. ** Added Lambert functions gsl_sf_lambert_W0, gsl_sf_lambert_Wm1. ** The reference manual now uses the GNU Free Documentation License. ** Fixed a couple of bugs in the SVD routines. ** Macros for Infinity and Nan now work correctly with Microsoft Visual C++, and a bug in the config.h file for the finite() function has been fixed. ** Redundant entries in the test suite for the complex math functions have been removed, making the distribution size smaller. ** Installed programs gsl-randist and gsl-histogram now use shared libraries. * What was new in gsl-0.9.1: ** The single precision ffts now uses float throughout, rather than mixing float and double. ** The random number distributions now include the Landau distribution. ** The fft function interface has been reorganized, with workspaces separate from wavetables to eliminate unnecessary recomputation of trigonometric factors. ** The gsl_interval type has been eliminated and replaced by two double arguments for simplicity. ** The order of the arguments to the minimization routines is no more logical, with function values assocatied with x-values. ** Modified initialization of vector and matrix views to work with the SunPro compiler. ** Renamed gsl_Efunc_t to gsl_siman_Efunc_t, in accordance with namespace conventions. ** Improved accuracy and fixed bugs in gsl_sf_hyperg_1F1, gsl_sf_bessel_I0_scaled, gsl_sf_erfc, gsl_sf_log_erfc, gsl_sf_legendre_Q0 and gsl_sf_legendre_Q1, and gsl_sf_zeta. ** Improved IEEE compliance of special functions, overflows now return Inf and domain errors return NaN. ** Improved checking for underflows in special functions when using extended precision registers * What was new in gsl-0.9: ** There is a new system of vector and matrix views. Any code using vector and matrix views will need to be updated. ** The order of arguments of the view functions involving strides have been changed to be consistent with the rest of the library. ** The ode solvers have been reorganized. ** There are new eigensystem routines for real symmetric and complex hermitian matrices. ** The linear algebra directory now includes functions for computing symmetric tridiagonal decompositions and bidiagonal decompositions. ** The svd routines now include the Golub-Reinsch and Modified Golub-Reinsch algorithms in addition to the Jacobi algorithm. ** The interpolation directory has been reorganized and a higher-level "spline" interface has been added which simplifies the handling of interpolation arguments. ** IEEE support is now available on OpenBSD. * What was new in gsl-0.8: ** The build process now uses the latest libtool and automake. ** The library should now compile with Microsoft Visual C++. ** Portable versions of the isinf, isnan and finite functions are available as gsl_isinf(x), gsl_isnan(x) and gsl_finite(x). ** The definitions of GSL_POSINF, GSL_NEGINF and GSL_NAN no longer cause divisions by zero during compilation. ** The gsl_interp_obj has been renamed to gsl_interp. ** The poly_eval and pow_int functions have been moved from the specfunc directory to the poly and sys directories. ** The Chebyshev functions are now available as an independent module in their own directory. ** The error handling conventions have been unified across the library. This simplifies the use of the special functions. ** A full CBLAS implementation is now included for systems where ATLAS has not been installed. The CBLAS library can also be used independently of GSL. The organisation of the BLAS directories has been simplified. ** IEEE support for HPUX-11, NetBSD, Apple Darwin and OS/2 are now included. ** The library now includes implementations of log1p, expm1, hypot, acosh, asinh, atanh for platforms which do not provide them. ** The convention for alloc and set functions has changed so that they are orthogonal. After allocating an object it is now necessary to initialize it. ** There is a new module for estimating numerical derivatives of functions ** There is a new module for handling data with ntuples ** The histogram lookup functions are now optimized for the case of uniform bins, and include an inline binary search for speed. ** The Chebyschev coefficients for the QAWO algorithm are now precomputed in a table for efficiency, rather than being computed on the fly. ** There are several new sorting functions for selecting the k-th smallest or largest elements of a dataset. ** Iterator functions are now available for permutations, gsl_permutation_next and gsl_permutation_prev. ** The function gsl_complex_xy has been renamed gsl_complex_rect ** The API for simulated annealing has been changed to support search spaces in which the points cannot be represented as contiguous-memory data structures. gsl_siman_solve() now takes three extra arguments: a copy constructor, a copy function and a destructor, allowing gsl_siman_solve() to do its work with linked data structures. If all three of these function pointers are NULL, then the traditioanl approach of using malloc(), memcpy(), and free() with the element size is used. * What was new in gsl-0.7: ** Linux/PowerPC should now be well supported. ** Header files for common physical constants have been added. ** Functions linear and nonlinear regression in one or more dimensions are now available. ** Vector and matrix views now have access to the address of the underlying block for compatibility with VSIPL (www.vsipl.org). ** There is a new library for generating low-discrepancy quasi-random sequences. ** The seeding procedure of the default random number generator MT19937 has been updated to match the 10/99 release of the original code. This fixes a weakness which occurred for seeds which were powers of 2. ** The blas library libgslblasnative has been renamed libgslblas to avoid confusion with system blas library * What was new in gsl-0.6: ** The library is now installed as a single shared or static libgsl file using libtool. ** The gsl-config script now works. There is also a gsl.m4 file which people can use in their configure scripts. ** All header files are now in installed as pkginclude headers in a gsl/ subdirectory. ** The header files now use extern "C" to allow them to be included in C++ programs ** For consistency the following functions have been renamed, gsl_vector_copy (dest, src) is now gsl_vector_memcpy (dest, src) gsl_rng_cpy (dest, src) is now gsl_rng_memcpy (dest, src) gsl_matrix_copy_row (v,m,i) is now gsl_matrix_get_row (v,m,i) gsl_matrix_copy_col (v,m,j) is now gsl_matrix_get_col (v,m,j) gsl_vector_swap is now gsl_vector_swap_elements gsl_vector_swap_cols is now gsl_vector_swap_columns gsl_vector_swap_row_col is now gsl_vector_swap_row_column and the vector/matrix view allocation functions have been simplified. ** A new sort directory has been added for sorting objects and vectors. ** A permutation directory has been added for manipulating permutations ** Statistics functions now support a stride argument for generality, and also support weighted samples and a covariance function. ** The names of the statistics functions have been reorganized for improved clarity. Consult manual for details. ** The environment variable GSL_IEEE_MODE now uses "," as a separator instead of ";" ** The autogen.sh script, mostly for use by developers who use the CVS repository, now does not run configure. ** The histogram directory now has additional functions for copying and comparing histograms, performing arithmetic on histograms and finding maximum and minimum values. Corresponding functions have been added for vectors and matrices. ** The linear algebra directory supports additional methods, including rectangular QR, rectangular QRPT and Cholesky decomposition. ** Complex arithmetic (+,-,*,/) and complex elementary functions (sqrt, log, exp, sin, cos, tan, arcsin, arccos, arctan, sinh, cosh, tanh, arcsinh, arccosh, arctanh) are now supported. ** Multidimensional minimization methods are now available. ** The special functions directory now includes a routine for computing the value of the incomplete beta function. * Was new in gsl-0.5: ** There is now a KNOWN-PROBLEMS file which lists compilation problems and test failures which are known to the developers. ** Many improvements have been made to the special functions directory. ** The extrapolations from the Levin u-transform are now more reliable. ** Linear algebra and Eigensystem routines are now available. ** ODE solvers are now available. ** Multidimensional root finding algorithms are available. ** Minimization now keeps track of function values. ** Matrices and vectors now use a BLAS compatible format, and have a separate memory handling layer (gsl_block). ** Roots of general polynomials can now be found using gsl_poly_complex_solve ** IEEE modes support on Sparclinux, Tru64, AIX and IRIX ** We have added the second generation RANLUX generators RANLXS and RANLXD ** Minimization algorithms are available (one-dimensional) ** Documentation now works out of the box with the standard Texinfo. ** Full reimplementation of the QUADPACK integration library ** Introduced THANKS file. We appreciate all patches from people on the net, even those which are too small to warrant adding the author to the AUTHORS file. The THANKS file should include everyone who sent in patches. They should also be mentioned in the ChangeLog entry. * What was new in gsl-0.4.1: ** Two changes not making their way into the documentation A couple of things are not getting into the docs, so here are the errata: *** The FFT routines now take a stride parameter. Passing 1 for the stride will make them behave as documented. *** The complex numbers are now an opaque type, and no assumptions can be made about the format in which they are stored (they are not stored as a simple structure anymore, since that is not portable). The type is now gsl_complex (or gsl_complex_long_double or gsl_complex_float), and the macros to access them are GSL_REAL(z) GSL_IMAG(z) GSL_COMPLEX_P_REAL(zp) GSL_COMPLEX_P_IMAG(zp) GSL_COMPLEX_EQ(z1,z2) GSL_SET_COMPLEX(zp,x,y) GSL_SET_REAL(zp,x) GSL_SET_IMAG(zp,y) This change in the complex number API makes it important that you start working with 0.4.1 or later. ** 0.4.1 is being released in occasion of the Red Hat 6.0 release. The specfunc module is still in an alpha state; if you run "make check" in the specfunc directory you will see that some tests still fail. ** Most Alpha specific problems have been fixed. In particular the random number generators rand48 and ranf now work on the Alpha ** Additional random number distributions: Rayleigh distribution n-dimensional spherical distribution (ie, points at random on an n-dimensional sphere) Gaussian tail distribution (ie, choosing values from a gaussian distribution subject to a constraint that they be larger than some fixed value, eg 5 sigmas) Walker's algorithm for arbitrary discrete distributions * What was new in gsl-0.4: ** A single libgsl.a file is built in the top level directory and installed, instead of separate .a files for each subdirectory. ** The parts of the complex struct gsl_complex, .real and .imag, are not supported anymore. The macros GSL_REAL(z) and GSL_IMAG(z) do the same job. All complex numbers are considered as packed arrays of floating point numbers, for portability since the layout of structs or arrays of structs is not guaranteed. ** The interface for matrices and vectors has changed. Vectors now support strides, and can be used to access rows and columns of a matrix. Many more types are available (float, double, long double, int, long, short, char, signed and unsigned, plus complex floats, doubles and long doubles) due to improvements in our preprocessor template system. ** The random number generators have a completely new thread-safe interface and have moved from the random directory to the rng directory. Any program using random numbers will have to be updated. You can also choose generators and seeds using the environment variables GSL_RNG_TYPE and GSL_RNG_SEED. ** Some additional random number distributions have been added in the randist directory. The available distributiosn are: bernoulli, beta, binomial, cauchy, chisq, erlang, exponential, fdist, flat, gamma, gauss, geometric, levy, logistic, lognormal, nbinomial, pareto, poisson, sphere, tdist, twosidedexp, weibull. ** The FFT interface has be extended to support strides, but the implementation hasn't been finished for all the cases yet, The FFT allocation functions now return a pointer to a newly allocated wavetable struct, instead of taking the pointer to an existing struct as an argument. e.g. status = gsl_fft_wavetable_alloc(n, w) is now w = gsl_fft_wavetable_alloc(n) in accordance with usual practice ** The statistics directory now works with all the builtin types. It has a new function for computing the lag1-autocorrelation and an extra set of numerical accuracy tests from NIST as part of 'make check'. ** The simulated annealing routines no longer set the random number seed with the time of day. You'll need to reseed the generator yourself if you want subsequent runs to use different random numbers. ** Work is in progress on a reimplementation of QUADPACK in the `integration' subdirectory, but it is not finished yet. ** Work is in progress on reimplementations of the VEGAS and MISER Monte Carlo algorithms in the monte' subdirectory. They work just fine, but the code is still evolving. ** Work has started on a portable blas system in the `blas' subdirectory. ** You can now set the IEEE arithmetic mode for your programs from the environment variable GSL_IEEE_MODE by calling the function gsl_ieee_env_setup(). Currently this only works with the Linux kernel, HP-UX, SunOS4 and Solaris. ** There are some simple spline interpolation functions in the `interp' subdir. ** The NEWS file now uses outline mode, like the Emacs NEWS file * This covers changes made *after* the gsl-0.2 snapshot ** Added several new modules: histogram, integration, matrix, specfunc and vectors. ** Changed libgsl_statisctics.a to libgslstatistics.a and libgsl_siman.a to libgslsiman.a, since most of the packages don't have the underscore. Users will have to remove the old files, unless they do a "make uninstall" on the previous release before they install this new one. ** Changes to the random number suite Incorporated the gauss, poisson and exponential distributions in the standard libgslrandom.a Local variables: mode: outline paragraph-separate: "[ ]*$" end: gsl/roots/0000755000175000017500000000000014057135461011071 5ustar eddeddgsl/roots/Makefile.in0000664000175000017500000011071314057135461013143 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -*-makefile-*- VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = roots ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslroots_la_LIBADD = am_libgslroots_la_OBJECTS = bisection.lo brent.lo falsepos.lo \ newton.lo secant.lo steffenson.lo convergence.lo fsolver.lo \ fdfsolver.lo libgslroots_la_OBJECTS = $(am_libgslroots_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_funcs.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslroots.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/bisection.Plo ./$(DEPDIR)/brent.Plo \ ./$(DEPDIR)/convergence.Plo ./$(DEPDIR)/falsepos.Plo \ ./$(DEPDIR)/fdfsolver.Plo ./$(DEPDIR)/fsolver.Plo \ ./$(DEPDIR)/newton.Plo ./$(DEPDIR)/secant.Plo \ ./$(DEPDIR)/steffenson.Plo ./$(DEPDIR)/test.Po \ ./$(DEPDIR)/test_funcs.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslroots_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslroots_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslroots.la pkginclude_HEADERS = gsl_roots.h noinst_HEADERS = roots.h AM_CPPFLAGS = -I$(top_srcdir) libgslroots_la_SOURCES = bisection.c brent.c falsepos.c newton.c secant.c steffenson.c convergence.c fsolver.c fdfsolver.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_funcs.c test.h test_LDADD = libgslroots.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu roots/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu roots/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslroots.la: $(libgslroots_la_OBJECTS) $(libgslroots_la_DEPENDENCIES) $(EXTRA_libgslroots_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslroots_la_OBJECTS) $(libgslroots_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bisection.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/brent.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convergence.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/falsepos.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdfsolver.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsolver.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newton.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/secant.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/steffenson.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_funcs.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/bisection.Plo -rm -f ./$(DEPDIR)/brent.Plo -rm -f ./$(DEPDIR)/convergence.Plo -rm -f ./$(DEPDIR)/falsepos.Plo -rm -f ./$(DEPDIR)/fdfsolver.Plo -rm -f ./$(DEPDIR)/fsolver.Plo -rm -f ./$(DEPDIR)/newton.Plo -rm -f ./$(DEPDIR)/secant.Plo -rm -f ./$(DEPDIR)/steffenson.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_funcs.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/bisection.Plo -rm -f ./$(DEPDIR)/brent.Plo -rm -f ./$(DEPDIR)/convergence.Plo -rm -f ./$(DEPDIR)/falsepos.Plo -rm -f ./$(DEPDIR)/fdfsolver.Plo -rm -f ./$(DEPDIR)/fsolver.Plo -rm -f ./$(DEPDIR)/newton.Plo -rm -f ./$(DEPDIR)/secant.Plo -rm -f ./$(DEPDIR)/steffenson.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_funcs.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/roots/gsl_roots.h0000644000175000017500000000722013536674414013265 0ustar eddedd/* roots/gsl_roots.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Reid Priedhorsky, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_ROOTS_H__ #define __GSL_ROOTS_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { const char *name; size_t size; int (*set) (void *state, gsl_function * f, double * root, double x_lower, double x_upper); int (*iterate) (void *state, gsl_function * f, double * root, double * x_lower, double * x_upper); } gsl_root_fsolver_type; typedef struct { const gsl_root_fsolver_type * type; gsl_function * function ; double root ; double x_lower; double x_upper; void *state; } gsl_root_fsolver; typedef struct { const char *name; size_t size; int (*set) (void *state, gsl_function_fdf * f, double * root); int (*iterate) (void *state, gsl_function_fdf * f, double * root); } gsl_root_fdfsolver_type; typedef struct { const gsl_root_fdfsolver_type * type; gsl_function_fdf * fdf ; double root ; void *state; } gsl_root_fdfsolver; gsl_root_fsolver * gsl_root_fsolver_alloc (const gsl_root_fsolver_type * T); void gsl_root_fsolver_free (gsl_root_fsolver * s); int gsl_root_fsolver_set (gsl_root_fsolver * s, gsl_function * f, double x_lower, double x_upper); int gsl_root_fsolver_iterate (gsl_root_fsolver * s); const char * gsl_root_fsolver_name (const gsl_root_fsolver * s); double gsl_root_fsolver_root (const gsl_root_fsolver * s); double gsl_root_fsolver_x_lower (const gsl_root_fsolver * s); double gsl_root_fsolver_x_upper (const gsl_root_fsolver * s); gsl_root_fdfsolver * gsl_root_fdfsolver_alloc (const gsl_root_fdfsolver_type * T); int gsl_root_fdfsolver_set (gsl_root_fdfsolver * s, gsl_function_fdf * fdf, double root); int gsl_root_fdfsolver_iterate (gsl_root_fdfsolver * s); void gsl_root_fdfsolver_free (gsl_root_fdfsolver * s); const char * gsl_root_fdfsolver_name (const gsl_root_fdfsolver * s); double gsl_root_fdfsolver_root (const gsl_root_fdfsolver * s); int gsl_root_test_interval (double x_lower, double x_upper, double epsabs, double epsrel); int gsl_root_test_residual (double f, double epsabs); int gsl_root_test_delta (double x1, double x0, double epsabs, double epsrel); GSL_VAR const gsl_root_fsolver_type * gsl_root_fsolver_bisection; GSL_VAR const gsl_root_fsolver_type * gsl_root_fsolver_brent; GSL_VAR const gsl_root_fsolver_type * gsl_root_fsolver_falsepos; GSL_VAR const gsl_root_fdfsolver_type * gsl_root_fdfsolver_newton; GSL_VAR const gsl_root_fdfsolver_type * gsl_root_fdfsolver_secant; GSL_VAR const gsl_root_fdfsolver_type * gsl_root_fdfsolver_steffenson; __END_DECLS #endif /* __GSL_ROOTS_H__ */ gsl/roots/newton.c0000644000175000017500000000505413536674414012562 0ustar eddedd/* roots/newton.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Reid Priedhorsky, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* newton.c -- newton root finding algorithm This is the classical Newton-Raphson iteration. x[i+1] = x[i] - f(x[i])/f'(x[i]) */ #include #include #include #include #include #include #include #include #include #include "roots.h" typedef struct { double f, df; } newton_state_t; static int newton_init (void * vstate, gsl_function_fdf * fdf, double * root); static int newton_iterate (void * vstate, gsl_function_fdf * fdf, double * root); static int newton_init (void * vstate, gsl_function_fdf * fdf, double * root) { newton_state_t * state = (newton_state_t *) vstate; const double x = *root ; state->f = GSL_FN_FDF_EVAL_F (fdf, x); state->df = GSL_FN_FDF_EVAL_DF (fdf, x) ; return GSL_SUCCESS; } static int newton_iterate (void * vstate, gsl_function_fdf * fdf, double * root) { newton_state_t * state = (newton_state_t *) vstate; double root_new, f_new, df_new; if (state->df == 0.0) { GSL_ERROR("derivative is zero", GSL_EZERODIV); } root_new = *root - (state->f / state->df); *root = root_new ; GSL_FN_FDF_EVAL_F_DF(fdf, root_new, &f_new, &df_new); state->f = f_new ; state->df = df_new ; if (!gsl_finite(f_new)) { GSL_ERROR ("function value is not finite", GSL_EBADFUNC); } if (!gsl_finite (df_new)) { GSL_ERROR ("derivative value is not finite", GSL_EBADFUNC); } return GSL_SUCCESS; } static const gsl_root_fdfsolver_type newton_type = {"newton", /* name */ sizeof (newton_state_t), &newton_init, &newton_iterate}; const gsl_root_fdfsolver_type * gsl_root_fdfsolver_newton = &newton_type; gsl/roots/ChangeLog0000644000175000017500000001335713536674414012663 0ustar eddedd2009-07-09 Brian Gough * fsolver.c (gsl_root_fsolver_free): handle NULL argument in free * fdfsolver.c (gsl_root_fdfsolver_free): handle NULL argument in free 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2007-07-30 Brian Gough * newton.c (newton_iterate): use gsl_finite instead of finite * roots.h (SAFE_FUNC_CALL): use gsl_finite instead of finite * secant.c (secant_iterate): use gsl_finite instead of finite * steffenson.c (steffenson_iterate): use gsl_finite instead of finite 2007-01-04 Brian Gough * convergence.c (gsl_root_test_delta): added termination alternative condition x1==x0 2005-03-02 Brian Gough * steffenson.c (steffenson_iterate): improved wording of error messages * secant.c (secant_iterate): improved wording of error messages * roots.h (SAFE_FUNC_CALL): improved wording of error message * newton.c (newton_iterate): improved wording of error messages * utility.c: removed, not needed any more Sun Jul 15 17:53:48 2001 Brian Gough * removed interval type Sun May 6 14:26:59 2001 Brian Gough * test.c: removed tests for macros, which are now in sys/. Mon Apr 16 20:17:04 2001 Brian Gough * fsolver.c (gsl_root_fsolver_alloc): removed unnecessary status variable Sun Feb 18 15:35:25 2001 Brian Gough * fdfsolver.c fsolver.c: changed so that the solver _alloc function no longer calls _set, the user must do that separately. Wed May 17 11:37:15 2000 Brian Gough * test_macros.c (test_macros): use GSL_POSINF and GSL_NAN macros instead of 1/0 and 0/0 Mon Feb 14 13:05:30 2000 Brian Gough * removed definition of isinf macro (no longer needed) * made all internal functions static Wed Nov 3 11:59:35 1999 Brian Gough * fixed test failures * test.c (main): added a call to gsl_ieee_env_setup for testing * test_roots.c: increased the maximum number of iterations to 150 so that the tests still work on the difficult cases. * steffenson.c (steffenson_iterate): add a check to avoid division by zero Sat Oct 16 19:43:14 1999 Brian Gough * removed GSL_ROOT_EPSILON_BUFFER, not needed anymore Wed Jul 21 18:47:01 1999 Brian Gough * gsl_roots.h, convergence.c: changed order of relative and absolute errors to make them the same as quadpack routines (abs,rel) Wed Jul 21 16:30:56 1999 Brian Gough * brent.c (brent_iterate): fixed bug where bounding interval could be incorrect and not include root. Mon Mar 1 15:38:06 1999 Brian Gough * moved static class data out of gsl_root_fsolver and gsl_root_fdfsolver and into gsl_root_fsolver_type and gsl_root_fdfsolver_type Mon Mar 1 15:38:06 1999 Brian Gough * renamed f_solver to fsolver and fdf_solver to fdfsolver, since these look neater Sun Feb 28 21:11:21 1999 Brian Gough * rewrote the root finding functions in an iterative framework Tue Nov 17 16:47:09 1998 Brian Gough * secant.c, falsepos.c newton.c: added gsl_math.h to included headers to import GSL_MAX and GSL_MIN Mon Nov 9 21:21:45 1998 Brian Gough * roots.h: got rid of local MAX(a,b) and MIN(a,b) definitions since they are now in config.h Wed Nov 4 16:08:32 1998 Brian Gough * test.c (test_brent): allow the brent tests to run for more iterations since they take longer on the pathological cases. * brent.c (gsl_root_brent): on each iteration keep track of current best estimates of the root and the bounds so that they are returned to the user if the function exits prematurely. clean up the brent algorithm based on remarks in the original paper Mon Oct 26 16:31:21 1998 Brian Gough * in all routines with upper and lower bounds if a root is found exactly then the bracket is collapsed onto the root instead of being untouched. Thu Oct 15 13:59:30 1998 Brian Gough * bisection.c, falsepos.c, secant.c: reordered the tests so that the minimum number of function evaluations are performed when there is an early exit due to one of the supplied limits lying on a root. Fri Aug 21 14:48:13 1998 Brian Gough * test.c: clean up of tests to get rid of warnings Thu Aug 20 10:21:15 1998 Brian Gough * roots.h (_WITHIN_TOL): added extra parens in macro definition, for safety * falsepos.c (gsl_root_falsepos): removed test for absolute equality and replaced by a flag indicating which variables changed. * test.c (main): simplified the tests, removed command line arguments (can use the debugger to select which ones to run) Mon Jun 15 22:22:54 1998 Brian Gough * started to eliminate void * arguments for function types (they are not a good idea and can easily be specified) 1998-02-09 Mark Galassi * test.c (main): added an extra argument so that the $(srcdir) can be passed along when "make check" is run in a separate build directory. * test-macros, test-secant, test-bisection, test-newton, test-falsepos: modified these to use build and source directories explicitly. Now "make check" in a separate build directory works. 1998-02-02 Mark Galassi * Makefile.am (TESTS): added $(srcdir) before these scripts, since the TESTS target picks things from the build directory. gsl/roots/Makefile.am0000644000175000017500000000077713536674414013147 0ustar eddedd# -*-makefile-*- noinst_LTLIBRARIES = libgslroots.la pkginclude_HEADERS = gsl_roots.h noinst_HEADERS = roots.h AM_CPPFLAGS = -I$(top_srcdir) libgslroots_la_SOURCES = bisection.c brent.c falsepos.c newton.c secant.c steffenson.c convergence.c fsolver.c fdfsolver.c check_PROGRAMS = test TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_funcs.c test.h test_LDADD = libgslroots.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la gsl/roots/bisection.c0000644000175000017500000000660113536674414013226 0ustar eddedd/* roots/bisection.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Reid Priedhorsky, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* bisection.c -- bisection root finding algorithm */ #include #include #include #include #include #include #include #include #include #include "roots.h" typedef struct { double f_lower, f_upper; } bisection_state_t; static int bisection_init (void * vstate, gsl_function * f, double * root, double x_lower, double x_upper); static int bisection_iterate (void * vstate, gsl_function * f, double * root, double * x_lower, double * x_upper); static int bisection_init (void * vstate, gsl_function * f, double * root, double x_lower, double x_upper) { bisection_state_t * state = (bisection_state_t *) vstate; double f_lower, f_upper ; *root = 0.5 * (x_lower + x_upper) ; SAFE_FUNC_CALL (f, x_lower, &f_lower); SAFE_FUNC_CALL (f, x_upper, &f_upper); state->f_lower = f_lower; state->f_upper = f_upper; if ((f_lower < 0.0 && f_upper < 0.0) || (f_lower > 0.0 && f_upper > 0.0)) { GSL_ERROR ("endpoints do not straddle y=0", GSL_EINVAL); } return GSL_SUCCESS; } static int bisection_iterate (void * vstate, gsl_function * f, double * root, double * x_lower, double * x_upper) { bisection_state_t * state = (bisection_state_t *) vstate; double x_bisect, f_bisect; const double x_left = *x_lower ; const double x_right = *x_upper ; const double f_lower = state->f_lower; const double f_upper = state->f_upper; if (f_lower == 0.0) { *root = x_left ; *x_upper = x_left; return GSL_SUCCESS; } if (f_upper == 0.0) { *root = x_right ; *x_lower = x_right; return GSL_SUCCESS; } x_bisect = (x_left + x_right) / 2.0; SAFE_FUNC_CALL (f, x_bisect, &f_bisect); if (f_bisect == 0.0) { *root = x_bisect; *x_lower = x_bisect; *x_upper = x_bisect; return GSL_SUCCESS; } /* Discard the half of the interval which doesn't contain the root. */ if ((f_lower > 0.0 && f_bisect < 0.0) || (f_lower < 0.0 && f_bisect > 0.0)) { *root = 0.5 * (x_left + x_bisect) ; *x_upper = x_bisect; state->f_upper = f_bisect; } else { *root = 0.5 * (x_bisect + x_right) ; *x_lower = x_bisect; state->f_lower = f_bisect; } return GSL_SUCCESS; } static const gsl_root_fsolver_type bisection_type = {"bisection", /* name */ sizeof (bisection_state_t), &bisection_init, &bisection_iterate}; const gsl_root_fsolver_type * gsl_root_fsolver_bisection = &bisection_type; gsl/roots/steffenson.c0000644000175000017500000000673013536674414013424 0ustar eddedd/* roots/steffenson.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Reid Priedhorsky, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* steffenson.c -- steffenson root finding algorithm This is Newton's method with an Aitken "delta-squared" acceleration of the iterates. This can improve the convergence on multiple roots where the ordinary Newton algorithm is slow. x[i+1] = x[i] - f(x[i]) / f'(x[i]) x_accelerated[i] = x[i] - (x[i+1] - x[i])**2 / (x[i+2] - 2*x[i+1] + x[i]) We can only use the accelerated estimate after three iterations, and use the unaccelerated value until then. */ #include #include #include #include #include #include #include #include #include #include "roots.h" typedef struct { double f, df; double x; double x_1; double x_2; int count; } steffenson_state_t; static int steffenson_init (void * vstate, gsl_function_fdf * fdf, double * root); static int steffenson_iterate (void * vstate, gsl_function_fdf * fdf, double * root); static int steffenson_init (void * vstate, gsl_function_fdf * fdf, double * root) { steffenson_state_t * state = (steffenson_state_t *) vstate; const double x = *root ; state->f = GSL_FN_FDF_EVAL_F (fdf, x); state->df = GSL_FN_FDF_EVAL_DF (fdf, x) ; state->x = x; state->x_1 = 0.0; state->x_2 = 0.0; state->count = 1; return GSL_SUCCESS; } static int steffenson_iterate (void * vstate, gsl_function_fdf * fdf, double * root) { steffenson_state_t * state = (steffenson_state_t *) vstate; double x_new, f_new, df_new; double x_1 = state->x_1 ; double x = state->x ; if (state->df == 0.0) { GSL_ERROR("derivative is zero", GSL_EZERODIV); } x_new = x - (state->f / state->df); GSL_FN_FDF_EVAL_F_DF(fdf, x_new, &f_new, &df_new); state->x_2 = x_1 ; state->x_1 = x ; state->x = x_new; state->f = f_new ; state->df = df_new ; if (!gsl_finite (f_new)) { GSL_ERROR ("function value is not finite", GSL_EBADFUNC); } if (state->count < 3) { *root = x_new ; state->count++ ; } else { double u = (x - x_1) ; double v = (x_new - 2 * x + x_1); if (v == 0) *root = x_new; /* avoid division by zero */ else *root = x_1 - u * u / v ; /* accelerated value */ } if (!gsl_finite (df_new)) { GSL_ERROR ("derivative value is not finite", GSL_EBADFUNC); } return GSL_SUCCESS; } static const gsl_root_fdfsolver_type steffenson_type = {"steffenson", /* name */ sizeof (steffenson_state_t), &steffenson_init, &steffenson_iterate}; const gsl_root_fdfsolver_type * gsl_root_fdfsolver_steffenson = &steffenson_type; gsl/roots/fsolver.c0000644000175000017500000000512313536674414012725 0ustar eddedd/* roots/fsolver.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Reid Priedhorsky, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include gsl_root_fsolver * gsl_root_fsolver_alloc (const gsl_root_fsolver_type * T) { gsl_root_fsolver * s = (gsl_root_fsolver *) malloc (sizeof (gsl_root_fsolver)); if (s == 0) { GSL_ERROR_VAL ("failed to allocate space for root solver struct", GSL_ENOMEM, 0); }; s->state = malloc (T->size); if (s->state == 0) { free (s); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for root solver state", GSL_ENOMEM, 0); }; s->type = T ; s->function = NULL ; return s; } int gsl_root_fsolver_set (gsl_root_fsolver * s, gsl_function * f, double x_lower, double x_upper) { if (x_lower > x_upper) { GSL_ERROR ("invalid interval (lower > upper)", GSL_EINVAL); } s->function = f; s->root = 0.5 * (x_lower + x_upper); /* initial estimate */ s->x_lower = x_lower; s->x_upper = x_upper; return (s->type->set) (s->state, s->function, &(s->root), x_lower, x_upper); } int gsl_root_fsolver_iterate (gsl_root_fsolver * s) { return (s->type->iterate) (s->state, s->function, &(s->root), &(s->x_lower), &(s->x_upper)); } void gsl_root_fsolver_free (gsl_root_fsolver * s) { RETURN_IF_NULL (s); free (s->state); free (s); } const char * gsl_root_fsolver_name (const gsl_root_fsolver * s) { return s->type->name; } double gsl_root_fsolver_root (const gsl_root_fsolver * s) { return s->root; } double gsl_root_fsolver_x_lower (const gsl_root_fsolver * s) { return s->x_lower; } double gsl_root_fsolver_x_upper (const gsl_root_fsolver * s) { return s->x_upper; } gsl/roots/TODO0000644000175000017500000000064413536674414011574 0ustar eddedd# -*- org -*- #+CATEGORY: roots * Add an inline version of the iterate method for speed? Perhaps not, the time taken for each iteration surely dominated by the convergence test. * Numerical derivatives? Maybe have a function to manufacture an fdf from an f and optionally a df. (We'll need to approximate the derivative if it is not provided; this is something which should be done outside the root finding package.) gsl/roots/convergence.c0000644000175000017500000000447013536674414013547 0ustar eddedd/* roots/convergence.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Reid Priedhorsky, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include int gsl_root_test_interval (double x_lower, double x_upper, double epsabs, double epsrel) { const double abs_lower = fabs(x_lower) ; const double abs_upper = fabs(x_upper) ; double min_abs, tolerance; if (epsrel < 0.0) GSL_ERROR ("relative tolerance is negative", GSL_EBADTOL); if (epsabs < 0.0) GSL_ERROR ("absolute tolerance is negative", GSL_EBADTOL); if (x_lower > x_upper) GSL_ERROR ("lower bound larger than upper bound", GSL_EINVAL); if ((x_lower > 0.0 && x_upper > 0.0) || (x_lower < 0.0 && x_upper < 0.0)) { min_abs = GSL_MIN_DBL(abs_lower, abs_upper) ; } else { min_abs = 0; } tolerance = epsabs + epsrel * min_abs ; if (fabs(x_upper - x_lower) < tolerance) return GSL_SUCCESS; return GSL_CONTINUE ; } int gsl_root_test_delta (double x1, double x0, double epsabs, double epsrel) { const double tolerance = epsabs + epsrel * fabs(x1) ; if (epsrel < 0.0) GSL_ERROR ("relative tolerance is negative", GSL_EBADTOL); if (epsabs < 0.0) GSL_ERROR ("absolute tolerance is negative", GSL_EBADTOL); if (fabs(x1 - x0) < tolerance || x1 == x0) return GSL_SUCCESS; return GSL_CONTINUE ; } int gsl_root_test_residual (double f, double epsabs) { if (epsabs < 0.0) GSL_ERROR ("absolute tolerance is negative", GSL_EBADTOL); if (fabs(f) < epsabs) return GSL_SUCCESS; return GSL_CONTINUE ; } gsl/roots/roots.h0000644000175000017500000000240313536674414012416 0ustar eddedd/* roots/roots.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Reid Priedhorsky, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* roots.h -- declarations for internal root finding and RF support stuff. */ #ifndef __ROOTS_H__ #define __ROOTS_H__ /* Call the pointed-to function with argument x, put its result in y, and return an error if the function value is Inf/Nan. */ #define SAFE_FUNC_CALL(f, x, yp) \ do { \ *yp = GSL_FN_EVAL(f,x); \ if (!gsl_finite(*yp)) \ GSL_ERROR("function value is not finite", GSL_EBADFUNC); \ } while (0) #endif /* __ROOTS_H__ */ gsl/roots/test.h0000644000175000017500000000620113536674414012227 0ustar eddedd/* roots/test.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Reid Priedhorsky, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ gsl_function create_function (double (*f)(double, void *)) ; gsl_function_fdf create_fdf (double (*f)(double, void *), double (*df)(double, void *), void (*fdf)(double, void *, double *, double *)); void test_macros (void); void test_roots (void); void test_poly (void); void test_f (const gsl_root_fsolver_type * T, const char * description, gsl_function *f, double lower_bound, double upper_bound, double correct_root); void test_f_e (const gsl_root_fsolver_type * T, const char * description, gsl_function *f, double lower_bound, double upper_bound, double correct_root); void test_fdf (const gsl_root_fdfsolver_type * T, const char * description, gsl_function_fdf *fdf, double root, double correct_root); void test_fdf_e (const gsl_root_fdfsolver_type * T, const char * description, gsl_function_fdf *fdf, double root, double correct_root); void usage (void); void error_handler (const char *reason, const char *file, int line); double func1 (double x, void * p); double func1_df (double x, void * p); void func1_fdf (double x, void * p, double *y, double *yprime); double func2 (double x, void * p); double func2_df (double x, void * p); void func2_fdf (double x, void * p, double *y, double *yprime); double func3 (double x, void * p); double func3_df (double x, void * p); void func3_fdf (double x, void * p, double *y, double *yprime); double func4 (double x, void * p); double func4_df (double x, void * p); void func4_fdf (double x, void * p, double *y, double *yprime); double func5 (double x, void * p); double func5_df (double x, void * p); void func5_fdf (double x, void * p, double *y, double *yprime); double func6 (double x, void * p); double func6_df (double x, void * p); void func6_fdf (double x, void * p, double *y, double *yprime); double sin_f (double x, void * p); double sin_df (double x, void * p); void sin_fdf (double x, void * p, double *y, double *yprime); double cos_f (double x, void * p); double cos_df (double x, void * p); void cos_fdf (double x, void * p, double *y, double *yprime); double func7(double x, void * p); double func7_df(double x, void * p); void func7_fdf(double x, void * p, double *y, double *yprime); gsl/roots/falsepos.c0000644000175000017500000001106113536674414013057 0ustar eddedd/* roots/falsepos.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Reid Priedhorsky, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* falsepos.c -- falsepos root finding algorithm The false position algorithm uses bracketing by linear interpolation. If a linear interpolation step would decrease the size of the bracket by less than a bisection step would then the algorithm takes a bisection step instead. The last linear interpolation estimate of the root is used. If a bisection step causes it to fall outside the brackets then it is replaced by the bisection estimate (x_upper + x_lower)/2. */ #include #include #include #include #include #include #include #include #include #include "roots.h" typedef struct { double f_lower, f_upper; } falsepos_state_t; static int falsepos_init (void * vstate, gsl_function * f, double * root, double x_lower, double x_upper); static int falsepos_iterate (void * vstate, gsl_function * f, double * root, double * x_lower, double * x_upper); static int falsepos_init (void * vstate, gsl_function * f, double * root, double x_lower, double x_upper) { falsepos_state_t * state = (falsepos_state_t *) vstate; double f_lower, f_upper ; *root = 0.5 * (x_lower + x_upper); SAFE_FUNC_CALL (f, x_lower, &f_lower); SAFE_FUNC_CALL (f, x_upper, &f_upper); state->f_lower = f_lower; state->f_upper = f_upper; if ((f_lower < 0.0 && f_upper < 0.0) || (f_lower > 0.0 && f_upper > 0.0)) { GSL_ERROR ("endpoints do not straddle y=0", GSL_EINVAL); } return GSL_SUCCESS; } static int falsepos_iterate (void * vstate, gsl_function * f, double * root, double * x_lower, double * x_upper) { falsepos_state_t * state = (falsepos_state_t *) vstate; double x_linear, f_linear; double x_bisect, f_bisect; double x_left = *x_lower ; double x_right = *x_upper ; double f_lower = state->f_lower; double f_upper = state->f_upper; double w ; if (f_lower == 0.0) { *root = x_left ; *x_upper = x_left; return GSL_SUCCESS; } if (f_upper == 0.0) { *root = x_right ; *x_lower = x_right; return GSL_SUCCESS; } /* Draw a line between f(*lower_bound) and f(*upper_bound) and note where it crosses the X axis; that's where we will split the interval. */ x_linear = x_right - (f_upper * (x_left - x_right) / (f_lower - f_upper)); SAFE_FUNC_CALL (f, x_linear, &f_linear); if (f_linear == 0.0) { *root = x_linear; *x_lower = x_linear; *x_upper = x_linear; return GSL_SUCCESS; } /* Discard the half of the interval which doesn't contain the root. */ if ((f_lower > 0.0 && f_linear < 0.0) || (f_lower < 0.0 && f_linear > 0.0)) { *root = x_linear ; *x_upper = x_linear; state->f_upper = f_linear; w = x_linear - x_left ; } else { *root = x_linear ; *x_lower = x_linear; state->f_lower = f_linear; w = x_right - x_linear; } if (w < 0.5 * (x_right - x_left)) { return GSL_SUCCESS ; } x_bisect = 0.5 * (x_left + x_right); SAFE_FUNC_CALL (f, x_bisect, &f_bisect); if ((f_lower > 0.0 && f_bisect < 0.0) || (f_lower < 0.0 && f_bisect > 0.0)) { *x_upper = x_bisect; state->f_upper = f_bisect; if (*root > x_bisect) *root = 0.5 * (x_left + x_bisect) ; } else { *x_lower = x_bisect; state->f_lower = f_bisect; if (*root < x_bisect) *root = 0.5 * (x_bisect + x_right) ; } return GSL_SUCCESS; } static const gsl_root_fsolver_type falsepos_type = {"falsepos", /* name */ sizeof (falsepos_state_t), &falsepos_init, &falsepos_iterate}; const gsl_root_fsolver_type * gsl_root_fsolver_falsepos = &falsepos_type; gsl/roots/brent.c0000644000175000017500000001146513536674414012365 0ustar eddedd/* roots/brent.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Reid Priedhorsky, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* brent.c -- brent root finding algorithm */ #include #include #include #include #include #include #include #include #include #include "roots.h" typedef struct { double a, b, c, d, e; double fa, fb, fc; } brent_state_t; static int brent_init (void * vstate, gsl_function * f, double * root, double x_lower, double x_upper); static int brent_iterate (void * vstate, gsl_function * f, double * root, double * x_lower, double * x_upper); static int brent_init (void * vstate, gsl_function * f, double * root, double x_lower, double x_upper) { brent_state_t * state = (brent_state_t *) vstate; double f_lower, f_upper ; *root = 0.5 * (x_lower + x_upper) ; SAFE_FUNC_CALL (f, x_lower, &f_lower); SAFE_FUNC_CALL (f, x_upper, &f_upper); state->a = x_lower; state->fa = f_lower; state->b = x_upper; state->fb = f_upper; state->c = x_upper; state->fc = f_upper; state->d = x_upper - x_lower ; state->e = x_upper - x_lower ; if ((f_lower < 0.0 && f_upper < 0.0) || (f_lower > 0.0 && f_upper > 0.0)) { GSL_ERROR ("endpoints do not straddle y=0", GSL_EINVAL); } return GSL_SUCCESS; } static int brent_iterate (void * vstate, gsl_function * f, double * root, double * x_lower, double * x_upper) { brent_state_t * state = (brent_state_t *) vstate; double tol, m; int ac_equal = 0; double a = state->a, b = state->b, c = state->c; double fa = state->fa, fb = state->fb, fc = state->fc; double d = state->d, e = state->e; if ((fb < 0 && fc < 0) || (fb > 0 && fc > 0)) { ac_equal = 1; c = a; fc = fa; d = b - a; e = b - a; } if (fabs (fc) < fabs (fb)) { ac_equal = 1; a = b; b = c; c = a; fa = fb; fb = fc; fc = fa; } tol = 0.5 * GSL_DBL_EPSILON * fabs (b); m = 0.5 * (c - b); if (fb == 0) { *root = b; *x_lower = b; *x_upper = b; return GSL_SUCCESS; } if (fabs (m) <= tol) { *root = b; if (b < c) { *x_lower = b; *x_upper = c; } else { *x_lower = c; *x_upper = b; } return GSL_SUCCESS; } if (fabs (e) < tol || fabs (fa) <= fabs (fb)) { d = m; /* use bisection */ e = m; } else { double p, q, r; /* use inverse cubic interpolation */ double s = fb / fa; if (ac_equal) { p = 2 * m * s; q = 1 - s; } else { q = fa / fc; r = fb / fc; p = s * (2 * m * q * (q - r) - (b - a) * (r - 1)); q = (q - 1) * (r - 1) * (s - 1); } if (p > 0) { q = -q; } else { p = -p; } if (2 * p < GSL_MIN (3 * m * q - fabs (tol * q), fabs (e * q))) { e = d; d = p / q; } else { /* interpolation failed, fall back to bisection */ d = m; e = m; } } a = b; fa = fb; if (fabs (d) > tol) { b += d; } else { b += (m > 0 ? +tol : -tol); } SAFE_FUNC_CALL (f, b, &fb); state->a = a ; state->b = b ; state->c = c ; state->d = d ; state->e = e ; state->fa = fa ; state->fb = fb ; state->fc = fc ; /* Update the best estimate of the root and bounds on each iteration */ *root = b; if ((fb < 0 && fc < 0) || (fb > 0 && fc > 0)) { c = a; } if (b < c) { *x_lower = b; *x_upper = c; } else { *x_lower = c; *x_upper = b; } return GSL_SUCCESS ; } static const gsl_root_fsolver_type brent_type = {"brent", /* name */ sizeof (brent_state_t), &brent_init, &brent_iterate}; const gsl_root_fsolver_type * gsl_root_fsolver_brent = &brent_type; gsl/roots/test.c0000644000175000017500000002346513536674414012235 0ustar eddedd/* roots/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Reid Priedhorsky, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include "roots.h" #include "test.h" /* stopping parameters */ const double EPSREL = (10 * GSL_DBL_EPSILON); const double EPSABS = (10 * GSL_DBL_EPSILON); const unsigned int MAX_ITERATIONS = 150; void my_error_handler (const char *reason, const char *file, int line, int err); #define WITHIN_TOL(a, b, epsrel, epsabs) \ ((fabs((a) - (b)) < (epsrel) * GSL_MIN(fabs(a), fabs(b)) + (epsabs))) int main (void) { gsl_function F_sin, F_cos, F_func1, F_func2, F_func3, F_func4, F_func5, F_func6; gsl_function_fdf FDF_sin, FDF_cos, FDF_func1, FDF_func2, FDF_func3, FDF_func4, FDF_func5, FDF_func6, FDF_func7; const gsl_root_fsolver_type * fsolver[4] ; const gsl_root_fdfsolver_type * fdfsolver[4] ; const gsl_root_fsolver_type ** T; const gsl_root_fdfsolver_type ** S; gsl_ieee_env_setup(); fsolver[0] = gsl_root_fsolver_bisection; fsolver[1] = gsl_root_fsolver_brent; fsolver[2] = gsl_root_fsolver_falsepos; fsolver[3] = 0; fdfsolver[0] = gsl_root_fdfsolver_newton; fdfsolver[1] = gsl_root_fdfsolver_secant; fdfsolver[2] = gsl_root_fdfsolver_steffenson; fdfsolver[3] = 0; F_sin = create_function (sin_f) ; F_cos = create_function (cos_f) ; F_func1 = create_function (func1) ; F_func2 = create_function (func2) ; F_func3 = create_function (func3) ; F_func4 = create_function (func4) ; F_func5 = create_function (func5) ; F_func6 = create_function (func6) ; FDF_sin = create_fdf (sin_f, sin_df, sin_fdf) ; FDF_cos = create_fdf (cos_f, cos_df, cos_fdf) ; FDF_func1 = create_fdf (func1, func1_df, func1_fdf) ; FDF_func2 = create_fdf (func2, func2_df, func2_fdf) ; FDF_func3 = create_fdf (func3, func3_df, func3_fdf) ; FDF_func4 = create_fdf (func4, func4_df, func4_fdf) ; FDF_func5 = create_fdf (func5, func5_df, func5_fdf) ; FDF_func6 = create_fdf (func6, func6_df, func6_fdf) ; FDF_func7 = create_fdf(func7, func7_df, func7_fdf) ; gsl_set_error_handler (&my_error_handler); for (T = fsolver ; *T != 0 ; T++) { test_f (*T, "sin(x) [3, 4]", &F_sin, 3.0, 4.0, M_PI); test_f (*T, "sin(x) [-4, -3]", &F_sin, -4.0, -3.0, -M_PI); test_f (*T, "sin(x) [-1/3, 1]", &F_sin, -1.0 / 3.0, 1.0, 0.0); test_f (*T, "cos(x) [0, 3]", &F_cos, 0.0, 3.0, M_PI / 2.0); test_f (*T, "cos(x) [-3, 0]", &F_cos, -3.0, 0.0, -M_PI / 2.0); test_f (*T, "x^20 - 1 [0.1, 2]", &F_func1, 0.1, 2.0, 1.0); test_f (*T, "sqrt(|x|)*sgn(x)", &F_func2, -1.0 / 3.0, 1.0, 0.0); test_f (*T, "x^2 - 1e-8 [0, 1]", &F_func3, 0.0, 1.0, sqrt (1e-8)); test_f (*T, "x exp(-x) [-1/3, 2]", &F_func4, -1.0 / 3.0, 2.0, 0.0); test_f (*T, "(x - 1)^7 [0.9995, 1.0002]", &F_func6, 0.9995, 1.0002, 1.0); test_f_e (*T, "invalid range check [4, 0]", &F_sin, 4.0, 0.0, M_PI); test_f_e (*T, "invalid range check [1, 1]", &F_sin, 1.0, 1.0, M_PI); test_f_e (*T, "invalid range check [0.1, 0.2]", &F_sin, 0.1, 0.2, M_PI); } for (S = fdfsolver ; *S != 0 ; S++) { test_fdf (*S,"sin(x) {3.4}", &FDF_sin, 3.4, M_PI); test_fdf (*S,"sin(x) {-3.3}", &FDF_sin, -3.3, -M_PI); test_fdf (*S,"sin(x) {0.5}", &FDF_sin, 0.5, 0.0); test_fdf (*S,"cos(x) {0.6}", &FDF_cos, 0.6, M_PI / 2.0); test_fdf (*S,"cos(x) {-2.5}", &FDF_cos, -2.5, -M_PI / 2.0); test_fdf (*S,"x^{20} - 1 {0.9}", &FDF_func1, 0.9, 1.0); test_fdf (*S,"x^{20} - 1 {1.1}", &FDF_func1, 1.1, 1.0); test_fdf (*S,"sqrt(|x|)*sgn(x) {1.001}", &FDF_func2, 0.001, 0.0); test_fdf (*S,"x^2 - 1e-8 {1}", &FDF_func3, 1.0, sqrt (1e-8)); test_fdf (*S,"x exp(-x) {-2}", &FDF_func4, -2.0, 0.0); test_fdf_e (*S,"max iterations x -> +Inf, x exp(-x) {2}", &FDF_func4, 2.0, 0.0); test_fdf_e (*S,"max iterations x -> -Inf, 1/(1 + exp(-x)) {0}", &FDF_func5, 0.0, 0.0); test_fdf(*S, "-pi * x + e {1.5}", &FDF_func7, 1.5, M_E / M_PI); } test_fdf (gsl_root_fdfsolver_steffenson, "(x - 1)^7 {0.9}", &FDF_func6, 0.9, 1.0); /* now summarize the results */ exit (gsl_test_summary ()); } /* Using gsl_root_bisection, find the root of the function pointed to by f, using the interval [lower_bound, upper_bound]. Check if f succeeded and that it was accurate enough. */ void test_f (const gsl_root_fsolver_type * T, const char * description, gsl_function *f, double lower_bound, double upper_bound, double correct_root) { int status; size_t iterations = 0; double r, a, b; double x_lower, x_upper; gsl_root_fsolver * s; x_lower = lower_bound; x_upper = upper_bound; s = gsl_root_fsolver_alloc(T); gsl_root_fsolver_set(s, f, x_lower, x_upper) ; do { iterations++ ; gsl_root_fsolver_iterate (s); r = gsl_root_fsolver_root(s); a = gsl_root_fsolver_x_lower(s); b = gsl_root_fsolver_x_upper(s); if (a > b) gsl_test (GSL_FAILURE, "interval is invalid (%g,%g)", a, b); if (r < a || r > b) gsl_test (GSL_FAILURE, "r lies outside interval %g (%g,%g)", r, a, b); status = gsl_root_test_interval (a,b, EPSABS, EPSREL); } while (status == GSL_CONTINUE && iterations < MAX_ITERATIONS); gsl_test (status, "%s, %s (%g obs vs %g expected) ", gsl_root_fsolver_name(s), description, gsl_root_fsolver_root(s), correct_root); if (iterations == MAX_ITERATIONS) { gsl_test (GSL_FAILURE, "exceeded maximum number of iterations"); } /* check the validity of the returned result */ if (!WITHIN_TOL (r, correct_root, EPSREL, EPSABS)) { gsl_test (GSL_FAILURE, "incorrect precision (%g obs vs %g expected)", r, correct_root); } gsl_root_fsolver_free(s); } void test_f_e (const gsl_root_fsolver_type * T, const char * description, gsl_function *f, double lower_bound, double upper_bound, double correct_root) { int status; size_t iterations = 0; double x_lower, x_upper; gsl_root_fsolver * s; x_lower = lower_bound; x_upper = upper_bound; s = gsl_root_fsolver_alloc(T); status = gsl_root_fsolver_set(s, f, x_lower, x_upper) ; gsl_test (status != GSL_EINVAL, "%s (set), %s", T->name, description); if (status == GSL_EINVAL) { gsl_root_fsolver_free(s); return ; } do { iterations++ ; gsl_root_fsolver_iterate (s); x_lower = gsl_root_fsolver_x_lower(s); x_upper = gsl_root_fsolver_x_lower(s); status = gsl_root_test_interval (x_lower, x_upper, EPSABS, EPSREL); } while (status == GSL_CONTINUE && iterations < MAX_ITERATIONS); gsl_test (!status, "%s, %s", gsl_root_fsolver_name(s), description, gsl_root_fsolver_root(s) - correct_root); gsl_root_fsolver_free(s); } void test_fdf (const gsl_root_fdfsolver_type * T, const char * description, gsl_function_fdf *fdf, double root, double correct_root) { int status; size_t iterations = 0; double prev = 0 ; gsl_root_fdfsolver * s = gsl_root_fdfsolver_alloc(T); gsl_root_fdfsolver_set (s, fdf, root) ; do { iterations++ ; prev = gsl_root_fdfsolver_root(s); gsl_root_fdfsolver_iterate (s); status = gsl_root_test_delta(gsl_root_fdfsolver_root(s), prev, EPSABS, EPSREL); } while (status == GSL_CONTINUE && iterations < MAX_ITERATIONS); gsl_test (status, "%s, %s (%g obs vs %g expected) ", gsl_root_fdfsolver_name(s), description, gsl_root_fdfsolver_root(s), correct_root); if (iterations == MAX_ITERATIONS) { gsl_test (GSL_FAILURE, "exceeded maximum number of iterations"); } /* check the validity of the returned result */ if (!WITHIN_TOL (gsl_root_fdfsolver_root(s), correct_root, EPSREL, EPSABS)) { gsl_test (GSL_FAILURE, "incorrect precision (%g obs vs %g expected)", gsl_root_fdfsolver_root(s), correct_root); } gsl_root_fdfsolver_free(s); } void test_fdf_e (const gsl_root_fdfsolver_type * T, const char * description, gsl_function_fdf *fdf, double root, double correct_root) { int status; size_t iterations = 0; double prev = 0 ; gsl_root_fdfsolver * s = gsl_root_fdfsolver_alloc(T); status = gsl_root_fdfsolver_set (s, fdf, root) ; gsl_test (status, "%s (set), %s", T->name, description); do { iterations++ ; prev = gsl_root_fdfsolver_root(s); gsl_root_fdfsolver_iterate (s); status = gsl_root_test_delta(gsl_root_fdfsolver_root(s), prev, EPSABS, EPSREL); } while (status == GSL_CONTINUE && iterations < MAX_ITERATIONS); gsl_test (!status, "%s, %s", gsl_root_fdfsolver_name(s), description, gsl_root_fdfsolver_root(s) - correct_root); gsl_root_fdfsolver_free(s); } void my_error_handler (const char *reason, const char *file, int line, int err) { if (0) printf ("(caught [%s:%d: %s (%d)])\n", file, line, reason, err); } gsl/roots/secant.c0000644000175000017500000000560613536674414012530 0ustar eddedd/* roots/secant.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Reid Priedhorsky, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* secant.c -- secant root finding algorithm The secant algorithm is a variant of the Newton algorithm with the derivative term replaced by a numerical estimate from the last two function evaluations. x[i+1] = x[i] - f(x[i]) / f'_est where f'_est = (f(x[i]) - f(x[i-1])) / (x[i] - x[i-1]) The exact derivative is used for the initial value of f'_est. */ #include #include #include #include #include #include #include #include #include #include "roots.h" typedef struct { double f; double df; } secant_state_t; static int secant_init (void * vstate, gsl_function_fdf * fdf, double * root); static int secant_iterate (void * vstate, gsl_function_fdf * fdf, double * root); static int secant_init (void * vstate, gsl_function_fdf * fdf, double * root) { secant_state_t * state = (secant_state_t *) vstate; const double x = *root; GSL_FN_FDF_EVAL_F_DF (fdf, x, &(state->f), &(state->df)); return GSL_SUCCESS; } static int secant_iterate (void * vstate, gsl_function_fdf * fdf, double * root) { secant_state_t * state = (secant_state_t *) vstate; const double x = *root ; const double f = state->f; const double df = state->df; double x_new, f_new, df_new; if(f == 0.0) { return GSL_SUCCESS; } if(df == 0.0) { GSL_ERROR("derivative is zero", GSL_EZERODIV); } x_new = x - (f / df); f_new = GSL_FN_FDF_EVAL_F(fdf, x_new) ; df_new = df * ((f - f_new) / f); *root = x_new ; state->f = f_new ; state->df = df_new ; if (!gsl_finite (f_new)) { GSL_ERROR ("function value is not finite", GSL_EBADFUNC); } if (!gsl_finite (df_new)) { GSL_ERROR ("derivative value is not finite", GSL_EBADFUNC); } return GSL_SUCCESS; } static const gsl_root_fdfsolver_type secant_type = {"secant", /* name */ sizeof (secant_state_t), &secant_init, &secant_iterate}; const gsl_root_fdfsolver_type * gsl_root_fdfsolver_secant = &secant_type; gsl/roots/fdfsolver.c0000644000175000017500000000416413536674414013243 0ustar eddedd/* roots/fdfsolver.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Reid Priedhorsky, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include gsl_root_fdfsolver * gsl_root_fdfsolver_alloc (const gsl_root_fdfsolver_type * T) { gsl_root_fdfsolver * s = (gsl_root_fdfsolver *) malloc (sizeof (gsl_root_fdfsolver)); if (s == 0) { GSL_ERROR_VAL ("failed to allocate space for root solver struct", GSL_ENOMEM, 0); }; s->state = malloc (T->size); if (s->state == 0) { free (s); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for root solver state", GSL_ENOMEM, 0); }; s->type = T ; s->fdf = NULL; return s; } int gsl_root_fdfsolver_set (gsl_root_fdfsolver * s, gsl_function_fdf * f, double root) { s->fdf = f; s->root = root; return (s->type->set) (s->state, s->fdf, &(s->root)); } int gsl_root_fdfsolver_iterate (gsl_root_fdfsolver * s) { return (s->type->iterate) (s->state, s->fdf, &(s->root)); } void gsl_root_fdfsolver_free (gsl_root_fdfsolver * s) { RETURN_IF_NULL (s); free (s->state); free (s); } const char * gsl_root_fdfsolver_name (const gsl_root_fdfsolver * s) { return s->type->name; } double gsl_root_fdfsolver_root (const gsl_root_fdfsolver * s) { return s->root; } gsl/roots/test_funcs.c0000644000175000017500000001044713536674414013427 0ustar eddedd/* roots/test_funcs.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Reid Priedhorsky, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include "test.h" gsl_function create_function (double (*f)(double, void *)) { gsl_function F ; F.function = f; F.params = 0; return F ; } gsl_function_fdf create_fdf (double (*f)(double, void *), double (*df)(double, void *), void (*fdf)(double, void *, double *, double *)) { gsl_function_fdf FDF ; FDF.f = f ; FDF.df = df ; FDF.fdf = fdf ; FDF.params = 0 ; return FDF ; } /* f(x) = x^{20} - 1 */ /* f'(x) = 20x^{19} */ /* zero at x = 1 or -1 */ double func1 (double x, void *p) { return pow (x, 20.0) - 1; } double func1_df (double x, void * p) { return 20.0 * pow (x, 19.0); } void func1_fdf (double x, void * p, double *y, double *yprime) { *y = func1 (x, p); *yprime = 20.0 * pow (x, 19.0); } /* f(x) = sqrt(abs(x))*sgn(x) */ /* f'(x) = 1 / sqrt(abs(x) */ /* zero at x = 0 */ double func2 (double x, void * p) { double delta; if (x > 0) delta = 1.0; else if (x < 0) delta = -1.0; else delta = 0.0; return sqrt (fabs (x)) * delta; } double func2_df (double x, void * p) { return 1 / sqrt (fabs (x)); } void func2_fdf (double x, void * p, double *y, double *yprime) { *y = func2 (x, p); *yprime = 1 / sqrt (fabs (x)); } /* f(x) = x^2 - 1e-8 */ /* f'(x) = 2x */ /* zero at x = sqrt(1e-8) or -sqrt(1e-8) */ double func3 (double x, void * p) { return pow (x, 2.0) - 1e-8; } double func3_df (double x, void * p) { return 2 * x; } void func3_fdf (double x, void * p, double *y, double *yprime) { *y = func3 (x, p); *yprime = 2 * x; } /* f(x) = x exp(-x) */ /* f'(x) = exp(-x) - x exp(-x) */ /* zero at x = 0 */ double func4 (double x, void * p) { return x * exp (-x); } double func4_df (double x, void * p) { return exp (-x) - x * exp (-x); } void func4_fdf (double x, void * p, double *y, double *yprime) { *y = func4 (x, p); *yprime = exp (-x) - x * exp (-x); } /* f(x) = 1/(1+exp(x)) */ /* f'(x) = -exp(x) / (1 + exp(x))^2 */ /* no roots! */ double func5 (double x, void * p) { return 1 / (1 + exp (x)); } double func5_df (double x, void * p) { return -exp (x) / pow (1 + exp (x), 2.0); } void func5_fdf (double x, void * p, double *y, double *yprime) { *y = func5 (x, p); *yprime = -exp (x) / pow (1 + exp (x), 2.0); } /* f(x) = (x - 1)^7 */ /* f'(x) = 7 * (x - 1)^6 */ /* zero at x = 1 */ double func6 (double x, void * p) { return pow (x - 1, 7.0); } double func6_df (double x, void * p) { return 7.0 * pow (x - 1, 6.0); } void func6_fdf (double x, void * p, double *y, double *yprime) { *y = func6 (x, p); *yprime = 7.0 * pow (x - 1, 6.0); } /* sin(x) packaged up nicely. */ double sin_f (double x, void * p) { return sin (x); } double sin_df (double x, void * p) { return cos (x); } void sin_fdf (double x, void * p, double *y, double *yprime) { *y = sin (x); *yprime = cos (x); } /* cos(x) packaged up nicely. */ double cos_f (double x, void * p) { return cos (x); } double cos_df (double x, void * p) { return -sin (x); } void cos_fdf (double x, void * p, double *y, double *yprime) { *y = cos (x); *yprime = -sin (x); } /* linear function to test that solvers exit correctly when entered with an exact root */ double func7(double x, void * p) { return -M_PI * x + M_E; } double func7_df(double x, void * p) { return -M_PI; } void func7_fdf(double x, void * p, double *f, double *df) { *f = func7(x, p); *df = func7_df(x, p); } gsl/gsl_machine.h0000644000175000017500000000733513536674414012364 0ustar eddedd/* Author: B. Gough and G. Jungman */ #ifndef __GSL_MACHINE_H__ #define __GSL_MACHINE_H__ #include #include /* magic constants; mostly for the benefit of the implementation */ /* -*-MACHINE CONSTANTS-*- * * PLATFORM: Whiz-O-Matic 9000 * FP_PLATFORM: IEEE-Virtual * HOSTNAME: nnn.lanl.gov * DATE: Fri Nov 20 17:53:26 MST 1998 */ #define GSL_DBL_EPSILON 2.2204460492503131e-16 #define GSL_SQRT_DBL_EPSILON 1.4901161193847656e-08 #define GSL_ROOT3_DBL_EPSILON 6.0554544523933429e-06 #define GSL_ROOT4_DBL_EPSILON 1.2207031250000000e-04 #define GSL_ROOT5_DBL_EPSILON 7.4009597974140505e-04 #define GSL_ROOT6_DBL_EPSILON 2.4607833005759251e-03 #define GSL_LOG_DBL_EPSILON (-3.6043653389117154e+01) #define GSL_DBL_MIN 2.2250738585072014e-308 #define GSL_SQRT_DBL_MIN 1.4916681462400413e-154 #define GSL_ROOT3_DBL_MIN 2.8126442852362996e-103 #define GSL_ROOT4_DBL_MIN 1.2213386697554620e-77 #define GSL_ROOT5_DBL_MIN 2.9476022969691763e-62 #define GSL_ROOT6_DBL_MIN 5.3034368905798218e-52 #define GSL_LOG_DBL_MIN (-7.0839641853226408e+02) #define GSL_DBL_MAX 1.7976931348623157e+308 #define GSL_SQRT_DBL_MAX 1.3407807929942596e+154 #define GSL_ROOT3_DBL_MAX 5.6438030941222897e+102 #define GSL_ROOT4_DBL_MAX 1.1579208923731620e+77 #define GSL_ROOT5_DBL_MAX 4.4765466227572707e+61 #define GSL_ROOT6_DBL_MAX 2.3756689782295612e+51 #define GSL_LOG_DBL_MAX 7.0978271289338397e+02 #define GSL_FLT_EPSILON 1.1920928955078125e-07 #define GSL_SQRT_FLT_EPSILON 3.4526698300124393e-04 #define GSL_ROOT3_FLT_EPSILON 4.9215666011518501e-03 #define GSL_ROOT4_FLT_EPSILON 1.8581361171917516e-02 #define GSL_ROOT5_FLT_EPSILON 4.1234622211652937e-02 #define GSL_ROOT6_FLT_EPSILON 7.0153878019335827e-02 #define GSL_LOG_FLT_EPSILON (-1.5942385152878742e+01) #define GSL_FLT_MIN 1.1754943508222875e-38 #define GSL_SQRT_FLT_MIN 1.0842021724855044e-19 #define GSL_ROOT3_FLT_MIN 2.2737367544323241e-13 #define GSL_ROOT4_FLT_MIN 3.2927225399135965e-10 #define GSL_ROOT5_FLT_MIN 2.5944428542140822e-08 #define GSL_ROOT6_FLT_MIN 4.7683715820312542e-07 #define GSL_LOG_FLT_MIN (-8.7336544750553102e+01) #define GSL_FLT_MAX 3.4028234663852886e+38 #define GSL_SQRT_FLT_MAX 1.8446743523953730e+19 #define GSL_ROOT3_FLT_MAX 6.9814635196223242e+12 #define GSL_ROOT4_FLT_MAX 4.2949672319999986e+09 #define GSL_ROOT5_FLT_MAX 5.0859007855960041e+07 #define GSL_ROOT6_FLT_MAX 2.6422459233807749e+06 #define GSL_LOG_FLT_MAX 8.8722839052068352e+01 #define GSL_SFLT_EPSILON 4.8828125000000000e-04 #define GSL_SQRT_SFLT_EPSILON 2.2097086912079612e-02 #define GSL_ROOT3_SFLT_EPSILON 7.8745065618429588e-02 #define GSL_ROOT4_SFLT_EPSILON 1.4865088937534013e-01 #define GSL_ROOT5_SFLT_EPSILON 2.1763764082403100e-01 #define GSL_ROOT6_SFLT_EPSILON 2.8061551207734325e-01 #define GSL_LOG_SFLT_EPSILON (-7.6246189861593985e+00) /* !MACHINE CONSTANTS! */ /* a little internal backwards compatibility */ #define GSL_MACH_EPS GSL_DBL_EPSILON /* Here are the constants related to or derived from * machine constants. These are not to be confused with * the constants that define various precision levels * for the precision/error system. * * This information is determined at configure time * and is platform dependent. Edit at your own risk. * * PLATFORM: WHIZ-O-MATIC * CONFIG-DATE: Thu Nov 19 19:27:18 MST 1998 * CONFIG-HOST: nnn.lanl.gov */ /* machine precision constants */ /* #define GSL_MACH_EPS 1.0e-15 */ #define GSL_SQRT_MACH_EPS 3.2e-08 #define GSL_ROOT3_MACH_EPS 1.0e-05 #define GSL_ROOT4_MACH_EPS 0.000178 #define GSL_ROOT5_MACH_EPS 0.00100 #define GSL_ROOT6_MACH_EPS 0.00316 #define GSL_LOG_MACH_EPS (-34.54) #endif /* __GSL_MACHINE_H__ */ gsl/combination/0000755000175000017500000000000014057135461012225 5ustar eddeddgsl/combination/Makefile.in0000664000175000017500000010711214057135461014276 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = combination ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslcombination_la_LIBADD = am_libgslcombination_la_OBJECTS = init.lo file.lo combination.lo \ inline.lo libgslcombination_la_OBJECTS = $(am_libgslcombination_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslcombination.la ../vector/libgslvector.la \ ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/combination.Plo ./$(DEPDIR)/file.Plo \ ./$(DEPDIR)/init.Plo ./$(DEPDIR)/inline.Plo \ ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslcombination_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslcombination_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslcombination.la pkginclude_HEADERS = gsl_combination.h AM_CPPFLAGS = -I$(top_srcdir) libgslcombination_la_SOURCES = init.c file.c combination.c inline.c noinst_HEADERS = TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslcombination.la ../vector/libgslvector.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu combination/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu combination/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslcombination.la: $(libgslcombination_la_OBJECTS) $(libgslcombination_la_DEPENDENCIES) $(EXTRA_libgslcombination_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslcombination_la_OBJECTS) $(libgslcombination_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/combination.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inline.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/combination.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/init.Plo -rm -f ./$(DEPDIR)/inline.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/combination.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/init.Plo -rm -f ./$(DEPDIR)/inline.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile #noinst_PROGRAMS = demo #demo_SOURCES = demo.c #demo_LDADD = libgslcombination.la ../vector/libgslvector.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la #CLEANFILES = test.txt test.dat # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/combination/ChangeLog0000644000175000017500000000261713536674414014014 0ustar eddedd2012-12-16 Rhys Ulerich * demo.c: remove NOP while statement per comment from Jorge Barros de Abreu . Add proper return statement to main(). 2009-07-09 Brian Gough * init.c (gsl_combination_free): handle NULL argument in free 2008-07-03 Brian Gough * gsl_combination.h: added gsl_inline.h, use INLINE_DECL and GSL_RANGE_COND for gsl_combination_get * combination.c: moved gsl_combination_get to inline.c * inline.c: separate file for inline function object code * Makefile.am (INCLUDES): use top_srcdir only, remove top_builddir 2003-07-30 Brian Gough * init.c (gsl_combination_alloc): set c->data to NULL when k=0 2003-04-12 Szymon Jaroszewicz * combination.c (gsl_combination_valid): fix a typo in error message 2003-03-22 Brian Gough * combination.c (gsl_combination_memcpy): added memcpy function 2003-03-21 Brian Gough * combination.c (gsl_combination_valid): fix bug in test for validity (cj * test.c: use unsigned loop variables Sat Dec 8 18:22:06 2001 Szymon Jaroszewicz * added combination support to GSL gsl/combination/Makefile.am0000644000175000017500000000130013536674414014262 0ustar eddeddnoinst_LTLIBRARIES = libgslcombination.la pkginclude_HEADERS = gsl_combination.h AM_CPPFLAGS = -I$(top_srcdir) libgslcombination_la_SOURCES = init.c file.c combination.c inline.c noinst_HEADERS = TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_SOURCES = test.c test_LDADD = libgslcombination.la ../vector/libgslvector.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la #noinst_PROGRAMS = demo #demo_SOURCES = demo.c #demo_LDADD = libgslcombination.la ../vector/libgslvector.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la #CLEANFILES = test.txt test.dat gsl/combination/gsl_combination.h0000644000175000017500000000546213536674414015563 0ustar eddedd/* combination/gsl_combination.h * based on permutation/gsl_permutation.h by Brian Gough * * Copyright (C) 2001 Szymon Jaroszewicz * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_COMBINATION_H__ #define __GSL_COMBINATION_H__ #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS struct gsl_combination_struct { size_t n; size_t k; size_t *data; }; typedef struct gsl_combination_struct gsl_combination; gsl_combination *gsl_combination_alloc (const size_t n, const size_t k); gsl_combination *gsl_combination_calloc (const size_t n, const size_t k); void gsl_combination_init_first (gsl_combination * c); void gsl_combination_init_last (gsl_combination * c); void gsl_combination_free (gsl_combination * c); int gsl_combination_memcpy (gsl_combination * dest, const gsl_combination * src); int gsl_combination_fread (FILE * stream, gsl_combination * c); int gsl_combination_fwrite (FILE * stream, const gsl_combination * c); int gsl_combination_fscanf (FILE * stream, gsl_combination * c); int gsl_combination_fprintf (FILE * stream, const gsl_combination * c, const char *format); size_t gsl_combination_n (const gsl_combination * c); size_t gsl_combination_k (const gsl_combination * c); size_t * gsl_combination_data (const gsl_combination * c); int gsl_combination_valid (gsl_combination * c); int gsl_combination_next (gsl_combination * c); int gsl_combination_prev (gsl_combination * c); INLINE_DECL size_t gsl_combination_get (const gsl_combination * c, const size_t i); #ifdef HAVE_INLINE INLINE_FUN size_t gsl_combination_get (const gsl_combination * c, const size_t i) { #if GSL_RANGE_CHECK if (GSL_RANGE_COND(i >= c->k)) /* size_t is unsigned, can't be negative */ { GSL_ERROR_VAL ("index out of range", GSL_EINVAL, 0); } #endif return c->data[i]; } #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_COMBINATION_H__ */ gsl/combination/inline.c0000644000175000017500000000162113536674414013656 0ustar eddedd/* combination/inline.c * * Copyright (C) 2008 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Compile all the inline functions */ #define COMPILE_INLINE_STATIC #include "build.h" #include gsl/combination/init.c0000644000175000017500000000537313536674414013353 0ustar eddedd/* combination/init.c * based on permutation/init.c by Brian Gough * * Copyright (C) 2001 Szymon Jaroszewicz * Copyright (C) 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include gsl_combination * gsl_combination_alloc (const size_t n, const size_t k) { gsl_combination * c; if (n == 0) { GSL_ERROR_VAL ("combination parameter n must be positive integer", GSL_EDOM, 0); } if (k > n) { GSL_ERROR_VAL ("combination length k must be an integer less than or equal to n", GSL_EDOM, 0); } c = (gsl_combination *) malloc (sizeof (gsl_combination)); if (c == 0) { GSL_ERROR_VAL ("failed to allocate space for combination struct", GSL_ENOMEM, 0); } if (k > 0) { c->data = (size_t *) malloc (k * sizeof (size_t)); if (c->data == 0) { free (c); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for combination data", GSL_ENOMEM, 0); } } else { c->data = 0; } c->n = n; c->k = k; return c; } gsl_combination * gsl_combination_calloc (const size_t n, const size_t k) { size_t i; gsl_combination * c = gsl_combination_alloc (n, k); if (c == 0) return 0; /* initialize combination to identity */ for (i = 0; i < k; i++) { c->data[i] = i; } return c; } void gsl_combination_init_first (gsl_combination * c) { const size_t k = c->k ; size_t i; /* initialize combination to identity */ for (i = 0; i < k; i++) { c->data[i] = i; } } void gsl_combination_init_last (gsl_combination * c) { const size_t k = c->k ; size_t i; size_t n = c->n; /* initialize combination to identity */ for (i = 0; i < k; i++) { c->data[i] = n - k + i; } } void gsl_combination_free (gsl_combination * c) { RETURN_IF_NULL (c); if (c->k > 0) free (c->data); free (c); } gsl/combination/TODO0000644000175000017500000000020713536674414012723 0ustar eddedd# -*- org -*- #+CATEGORY: combination * The module has a lot of overlap with multiset/ some of the functions could be abstracted out. gsl/combination/combination.c0000644000175000017500000000706113536674414014706 0ustar eddedd/* combination/combination.c * based on permutation/permutation.c by Brian Gough * * Copyright (C) 2001 Szymon Jaroszewicz * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include size_t gsl_combination_n (const gsl_combination * c) { return c->n ; } size_t gsl_combination_k (const gsl_combination * c) { return c->k ; } size_t * gsl_combination_data (const gsl_combination * c) { return c->data ; } int gsl_combination_valid (gsl_combination * c) { const size_t n = c->n ; const size_t k = c->k ; size_t i, j ; if( k > n ) { GSL_ERROR("combination has k greater than n", GSL_FAILURE) ; } for (i = 0; i < k; i++) { const size_t ci = c->data[i]; if (ci >= n) { GSL_ERROR("combination index outside range", GSL_FAILURE) ; } for (j = 0; j < i; j++) { if (c->data[j] == ci) { GSL_ERROR("duplicate combination index", GSL_FAILURE) ; } if (c->data[j] > ci) { GSL_ERROR("combination indices not in increasing order", GSL_FAILURE) ; } } } return GSL_SUCCESS; } int gsl_combination_next (gsl_combination * c) { /* Replaces c with the next combination (in the standard lexicographical * ordering). Returns GSL_FAILURE if there is no next combination. */ const size_t n = c->n; const size_t k = c->k; size_t *data = c->data; size_t i; if(k == 0) { return GSL_FAILURE; } i = k - 1; while(i > 0 && data[i] == n - k + i) { i--; } if(i == 0 && data[i] == n - k) { return GSL_FAILURE; } data[i]++; for(; i < k - 1; i++) { data[i + 1] = data[i] + 1; } return GSL_SUCCESS; } int gsl_combination_prev (gsl_combination * c) { /* Replaces c with the previous combination (in the standard * lexicographical ordering). Returns GSL_FAILURE if there is no * previous combination. */ const size_t n = c->n; const size_t k = c->k; size_t *data = c->data; size_t i; if(k == 0) { return GSL_FAILURE; } i = k - 1; while(i > 0 && data[i] == data[i-1] + 1) { i--; } if(i == 0 && data[i] == 0) { return GSL_FAILURE; } data[i++]--; for(; i < k; i++) { data[i] = n - k + i; } return GSL_SUCCESS; } int gsl_combination_memcpy (gsl_combination * dest, const gsl_combination * src) { const size_t src_n = src->n; const size_t src_k = src->k; const size_t dest_n = dest->n; const size_t dest_k = dest->k; if (src_n != dest_n || src_k != dest_k) { GSL_ERROR ("combination lengths are not equal", GSL_EBADLEN); } { size_t j; for (j = 0; j < src_k; j++) { dest->data[j] = src->data[j]; } } return GSL_SUCCESS; } gsl/combination/test.c0000644000175000017500000001460313536674414013363 0ustar eddedd/* combination/test.c * based on permutation/test.c by Brian Gough * * Copyright (C) 2001 Szymon Jaroszewicz * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include size_t c63[20][3] = { { 0, 1, 2 }, { 0, 1, 3 }, { 0, 1, 4 }, { 0, 1, 5 }, { 0, 2, 3 }, { 0, 2, 4 }, { 0, 2, 5 }, { 0, 3, 4 }, { 0, 3, 5 }, { 0, 4, 5 }, { 1, 2, 3 }, { 1, 2, 4 }, { 1, 2, 5 }, { 1, 3, 4 }, { 1, 3, 5 }, { 1, 4, 5 }, { 2, 3, 4 }, { 2, 3, 5 }, { 2, 4, 5 }, { 3, 4, 5 } } ; void my_error_handler (const char *reason, const char *file, int line, int err); int main (void) { size_t i, j; int status = 0, s; gsl_combination * c ; gsl_ieee_env_setup (); c = gsl_combination_alloc (6,3); /* Test combinations in forward order */ gsl_combination_init_first (c); i = 0; do { if ( i >= 20 ) { status = 1; break; } for (j = 0; j < 3; j++) { status |= (c->data[j] != c63[i][j]); } { int s1 = gsl_combination_valid (c); gsl_test (s1, "gsl_combination_valid (%u)", i); } i++; } while (gsl_combination_next(c) == GSL_SUCCESS); gsl_test(status, "gsl_combination_next, 6 choose 3 combination, 20 steps"); gsl_combination_next(c); gsl_combination_next(c); gsl_combination_next(c); for (j = 0; j < 3; j++) { status |= (c->data[j] != c63[19][j]); } gsl_test(status, "gsl_combination_next on the last combination"); { int s1 = gsl_combination_valid (c); gsl_test (s1, "gsl_combination_valid on the last combination"); } { gsl_combination * d = gsl_combination_alloc (6,3); gsl_combination_memcpy (d, c); status = 0; for (j = 0; j < 3; j++) { status |= (d->data[j] != c->data[j]); } gsl_test (status, "gsl_combination_memcpy, 6 choose 3 combination"); gsl_combination_free(d); } /* Now test combinations in reverse order */ gsl_combination_init_last (c); i = 20; do { if ( i == 0 ) { status = 1; break; } i--; for (j = 0; j < 3; j++) { status |= (c->data[j] != c63[i][j]); } { int s1 = gsl_combination_valid (c); gsl_test (s1, "gsl_combination_valid (%u)", i); } } while (gsl_combination_prev(c) == GSL_SUCCESS); gsl_test(status, "gsl_combination_prev, 6 choose 3 combination, 20 steps"); gsl_combination_prev(c); gsl_combination_prev(c); gsl_combination_prev(c); for (j = 0; j < 3; j++) { status |= (c->data[j] != c63[0][j]); } gsl_test(status, "gsl_combination_prev on the first combination"); { int s1 = gsl_combination_valid (c); gsl_test (s1, "gsl_combination_valid on the first combination"); } { gsl_combination * d = gsl_combination_alloc (6,3); gsl_combination_memcpy (d, c); status = 0; for (j = 0; j < 3; j++) { status |= (d->data[j] != c->data[j]); } gsl_test (status, "gsl_combination_memcpy, 6 choose 3 combination"); gsl_combination_free(d); } gsl_combination_free (c); c = gsl_combination_calloc(7, 0); /* should return GSL_FAILURE every time */ status |= (gsl_combination_next(c) != GSL_FAILURE); status |= (gsl_combination_next(c) != GSL_FAILURE); status |= (gsl_combination_prev(c) != GSL_FAILURE); status |= (gsl_combination_prev(c) != GSL_FAILURE); gsl_test(status, "gsl_combination 7 choose 0"); gsl_combination_free (c); c = gsl_combination_calloc(7, 7); /* should return GSL_FAILURE every time */ for(j = 0; j < 7; j++) { status |= (gsl_combination_get(c, j) != j); } status |= (gsl_combination_next(c) != GSL_FAILURE); for(j = 0; j < 7; j++) { status |= (gsl_combination_get(c, j) != j); } status |= (gsl_combination_next(c) != GSL_FAILURE); for(j = 0; j < 7; j++) { status |= (gsl_combination_get(c, j) != j); } status |= (gsl_combination_prev(c) != GSL_FAILURE); for(j = 0; j < 7; j++) { status |= (gsl_combination_get(c, j) != j); } status |= (gsl_combination_prev(c) != GSL_FAILURE); for(j = 0; j < 7; j++) { status |= (gsl_combination_get(c, j) != j); } gsl_test(status, "gsl_combination 7 choose 7"); gsl_combination_free (c); c = gsl_combination_calloc(6, 3); gsl_set_error_handler (&my_error_handler); c->data[0] = 1; c->data[1] = 1; c->data[2] = 2; s = gsl_combination_valid (c); gsl_test (!s, "gsl_combination_valid on an invalid combination (1,1,2)"); c->data[0] = 2; c->data[1] = 1; c->data[2] = 0; s = gsl_combination_valid (c); gsl_test (!s, "gsl_combination_valid on an invalid combination (2,1,0)"); c->data[0] = 1; c->data[1] = 2; c->data[2] = 0; s = gsl_combination_valid (c); gsl_test (!s, "gsl_combination_valid on an invalid combination (1,2,0)"); { gsl_combination * d = gsl_combination_alloc (6,4); int s = gsl_combination_memcpy (d, c); gsl_test (!s, "gsl_combination_memcpy, (6,4) vs (6,3)"); gsl_combination_free(d); } { gsl_combination * d = gsl_combination_alloc (7,3); int s = gsl_combination_memcpy (d, c); gsl_test (!s, "gsl_combination_memcpy, (7,3) vs (6,3)"); gsl_combination_free(d); } { gsl_combination * d = gsl_combination_alloc (7,2); int s = gsl_combination_memcpy (d, c); gsl_test (!s, "gsl_combination_memcpy, (7,2) vs (6,3)"); gsl_combination_free(d); } gsl_combination_free (c); exit (gsl_test_summary()); } void my_error_handler (const char *reason, const char *file, int line, int err) { if (0) printf ("(caught [%s:%d: %s (%d)])\n", file, line, reason, err) ; } gsl/combination/file.c0000644000175000017500000000464413536674414013327 0ustar eddedd/* combination/file.c * based on permutation/file.c by Brian Gough * * Copyright (C) 2001 Szymon Jaroszewicz * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #define IN_FORMAT "%lu" int gsl_combination_fread (FILE * stream, gsl_combination * c) { size_t k = c->k ; size_t * data = c->data ; size_t items = fread (data, sizeof (size_t), k, stream); if (items != k) { GSL_ERROR ("fread failed", GSL_EFAILED); } return GSL_SUCCESS; } int gsl_combination_fwrite (FILE * stream, const gsl_combination * c) { size_t k = c->k ; size_t * data = c->data ; size_t items = fwrite (data, sizeof (size_t), k, stream); if (items != k) { GSL_ERROR ("fwrite failed", GSL_EFAILED); } return GSL_SUCCESS; } int gsl_combination_fprintf (FILE * stream, const gsl_combination * c, const char *format) { size_t k = c->k ; size_t * data = c->data ; size_t i; for (i = 0; i < k; i++) { int status = fprintf (stream, format, data[i]); if (status < 0) { GSL_ERROR ("fprintf failed", GSL_EFAILED); } } return GSL_SUCCESS; } int gsl_combination_fscanf (FILE * stream, gsl_combination * c) { size_t k = c->k ; size_t * data = c->data ; size_t i; for (i = 0; i < k; i++) { unsigned long j ; /* FIXME: what if size_t != unsigned long ??? want read in size_t but have to read in unsigned long to avoid error from compiler */ int status = fscanf (stream, IN_FORMAT, &j); if (status != 1) { GSL_ERROR ("fscanf failed", GSL_EFAILED); } data[i] = j; } return GSL_SUCCESS; } gsl/min/0000755000175000017500000000000014057135461010506 5ustar eddeddgsl/min/Makefile.in0000664000175000017500000010744014057135461012563 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = min ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslmin_la_LIBADD = am_libgslmin_la_OBJECTS = fsolver.lo golden.lo brent.lo convergence.lo \ bracketing.lo quad_golden.lo libgslmin_la_OBJECTS = $(am_libgslmin_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_funcs.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslmin.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la \ ../sys/libgslsys.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/bracketing.Plo ./$(DEPDIR)/brent.Plo \ ./$(DEPDIR)/convergence.Plo ./$(DEPDIR)/fsolver.Plo \ ./$(DEPDIR)/golden.Plo ./$(DEPDIR)/quad_golden.Plo \ ./$(DEPDIR)/test.Po ./$(DEPDIR)/test_funcs.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslmin_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslmin_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslmin.la pkginclude_HEADERS = gsl_min.h noinst_HEADERS = min.h AM_CPPFLAGS = -I$(top_srcdir) libgslmin_la_SOURCES = fsolver.c golden.c brent.c convergence.c bracketing.c quad_golden.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_funcs.c test.h test_LDADD = libgslmin.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu min/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu min/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslmin.la: $(libgslmin_la_OBJECTS) $(libgslmin_la_DEPENDENCIES) $(EXTRA_libgslmin_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslmin_la_OBJECTS) $(libgslmin_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bracketing.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/brent.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convergence.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsolver.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/golden.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quad_golden.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_funcs.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/bracketing.Plo -rm -f ./$(DEPDIR)/brent.Plo -rm -f ./$(DEPDIR)/convergence.Plo -rm -f ./$(DEPDIR)/fsolver.Plo -rm -f ./$(DEPDIR)/golden.Plo -rm -f ./$(DEPDIR)/quad_golden.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_funcs.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/bracketing.Plo -rm -f ./$(DEPDIR)/brent.Plo -rm -f ./$(DEPDIR)/convergence.Plo -rm -f ./$(DEPDIR)/fsolver.Plo -rm -f ./$(DEPDIR)/golden.Plo -rm -f ./$(DEPDIR)/quad_golden.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/test_funcs.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/min/quad_golden.c0000644000175000017500000002656713536674414013163 0ustar eddedd/*----------------------------------------------------------------------------*/ /* */ /* quad_golden.c */ /* */ /* Copyright (C) 2007 James Howse */ /* Copyright (C) 2009 Brian Gough */ /* */ /* This program is free software; you can redistribute it and/or modify */ /* it under the terms of the GNU General Public License as published by */ /* the Free Software Foundation; either version 3 of the License, or (at */ /* your option) any later version. */ /* */ /* This program is distributed in the hope that it will be useful, but */ /* WITHOUT ANY WARRANTY; without even the implied warranty of */ /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU */ /* General Public License for more details. */ /* */ /* You should have received a copy of the GNU General Public License */ /* along with this program; if not, write to the Free Software */ /* Foundation, Inc., 51 Franklin Street, Fifth Floor, */ /* Boston, MA 02110-1301, USA. */ /* */ /* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ /* */ /* This algorithm performs univariate minimization (i.e., line search). */ /* It requires only objective function values g(x) to compute the minimum. */ /* The algorithm maintains an interval of uncertainty [a,b] and a point x */ /* in the interval [a,b] such that a < x < b, and g(a) > g(x) and */ /* g(x) < g(b). The algorithm also maintains the three points with the */ /* smallest objective values x, v and w such that g(x) < g(v) < g(w). The */ /* algorithm terminates when max( x - a, b - x ) < 2(r |x| + t) where r */ /* and t are small positive reals. At a given iteration, the algorithm */ /* first fits a quadratic through the three points (x, g(x)), (v, g(v)) */ /* and (w, g(w)) and computes the location of the minimum u of the */ /* resulting quadratic. If u is in the interval [a,b] then g(u) is */ /* computed. If u is not in the interval [a,b], and either v < x and */ /* w < x, or v > x and w > x (i.e., the quadratic is extrapolating), then */ /* a point u' is computed using a safeguarding procedure and g(u') is */ /* computed. If u is not in the interval [a,b], and the quadratic is not */ /* extrapolating, then a point u'' is computed using approximate golden */ /* section and g(u'') is computed. After evaluating g() at the */ /* appropriate new point, a, b, x, v, and w are updated and the next */ /* iteration is performed. The algorithm is based on work presented in */ /* the following references. */ /* */ /* Algorithms for Minimization without derivatives */ /* Richard Brent */ /* Prentice-Hall Inc., Englewood Cliffs, NJ, 1973 */ /* */ /* Safeguarded Steplength Algorithms for Optimization using Descent Methods */ /* Philip E. Gill and Walter Murray */ /* Division of Numerical Analysis and Computing */ /* National Physical Laboratory, Teddington, United Kingdom */ /* NPL Report NAC 37, August 1974 */ /* */ /*----------------------------------------------------------------------------*/ #include #include #include #include #include #include #include #include #include #include "min.h" #define REL_ERR_VAL 1.0e-06 #define ABS_ERR_VAL 1.0e-10 #define GOLDEN_MEAN 0.3819660112501052 /* (3 - sqrt(5))/2 */ #define GOLDEN_RATIO 1.6180339887498950 /* (1 + sqrt(5))/2 */ #define DEBUG_PRINTF(x) /* do nothing */ typedef struct { double step_size, stored_step, prev_stored_step; double x_prev_small, f_prev_small, x_small, f_small; unsigned int num_iter; } quad_golden_state_t; static int quad_golden_init (void *vstate, gsl_function * f, double x_minimum, double f_minimum, double x_lower, double f_lower, double x_upper, double f_upper) { quad_golden_state_t *state = (quad_golden_state_t *) vstate; /* For the original behavior, the first value for x_minimum_minimum passed in by the user should be a golden section step but we don't enforce this here. */ state->x_prev_small = x_minimum; state->x_small = x_minimum; state->f_prev_small = f_minimum; state->f_small = f_minimum; state->step_size = 0.0; state->stored_step = 0.0; state->prev_stored_step = 0.0; state->num_iter = 0; x_lower = 0 ; /* avoid warnings about unused variables */ x_upper = 0 ; f_lower = 0 ; f_upper = 0 ; f = 0; return GSL_SUCCESS; } static int quad_golden_iterate (void *vstate, gsl_function * f, double *x_minimum, double *f_minimum, double *x_lower, double *f_lower, double *x_upper, double *f_upper) { quad_golden_state_t *state = (quad_golden_state_t *) vstate; const double x_m = *x_minimum; const double f_m = *f_minimum; const double x_l = *x_lower; const double x_u = *x_upper; const double x_small = state->x_small; const double f_small = state->f_small; const double x_prev_small = state->x_prev_small; const double f_prev_small = state->f_prev_small; double stored_step = state->stored_step; /* update on exit */ double prev_stored_step = state->prev_stored_step; /* update on exit */ double step_size = state->step_size; /* update on exit */ double quad_step_size = prev_stored_step; double x_trial; double x_eval, f_eval; double x_midpoint = 0.5 * (x_l + x_u); double tol = REL_ERR_VAL * fabs (x_m) + ABS_ERR_VAL; /* total error tolerance */ if (fabs (stored_step) - tol > -2.0 * GSL_DBL_EPSILON) { /* Fit quadratic */ double c3 = (x_m - x_small) * (f_m - f_prev_small); double c2 = (x_m - x_prev_small) * (f_m - f_small); double c1 = (x_m - x_prev_small) * c2 - (x_m - x_small) * c3; c2 = 2.0 * (c2 - c3); if (fabs (c2) > GSL_DBL_EPSILON) /* if( c2 != 0 ) */ { if (c2 > 0.0) c1 = -c1; c2 = fabs (c2); quad_step_size = c1 / c2; } else { /* Handle case where c2 ~=~ 0 */ /* Insure that the line search will NOT take a quadratic interpolation step in this iteration */ quad_step_size = stored_step; } prev_stored_step = stored_step; stored_step = step_size; } x_trial = x_m + quad_step_size; if (fabs (quad_step_size) < fabs (0.5 * prev_stored_step) && x_trial > x_l && x_trial < x_u) { /* Take quadratic interpolation step */ step_size = quad_step_size; /* Do not evaluate function too close to x_l or x_u */ if ((x_trial - x_l) < 2.0 * tol || (x_u - x_trial) < 2.0 * tol) { step_size = (x_midpoint >= x_m ? +1.0 : -1.0) * fabs(tol); } DEBUG_PRINTF(("quadratic step: %g\n", step_size)); } else if ((x_small != x_prev_small && x_small < x_m && x_prev_small < x_m) || (x_small != x_prev_small && x_small > x_m && x_prev_small > x_m)) { /* Take safeguarded function comparison step */ double outside_interval, inside_interval; if (x_small < x_m) { outside_interval = x_l - x_m; inside_interval = x_u - x_m; } else { outside_interval = x_u - x_m; inside_interval = x_l - x_m; } if (fabs (inside_interval) <= tol) { /* Swap inside and outside intervals */ double tmp = outside_interval; outside_interval = inside_interval; inside_interval = tmp; } { double step = inside_interval; double scale_factor; if (fabs (outside_interval) < fabs (inside_interval)) { scale_factor = 0.5 * sqrt (-outside_interval / inside_interval); } else { scale_factor = (5.0 / 11.0) * (0.1 - inside_interval / outside_interval); } state->stored_step = step; step_size = scale_factor * step; } DEBUG_PRINTF(("safeguard step: %g\n", step_size)); } else { /* Take golden section step */ double step; if (x_m < x_midpoint) { step = x_u - x_m; } else { step = x_l - x_m; } state->stored_step = step; step_size = GOLDEN_MEAN * step; DEBUG_PRINTF(("golden step: %g\n", step_size)); } /* Do not evaluate function too close to x_minimum */ if (fabs (step_size) > tol) { x_eval = x_m + step_size; } else { x_eval = x_m + (step_size >= 0 ? +1.0 : -1.0) * fabs(tol); } /* Evaluate function at the new point x_eval */ SAFE_FUNC_CALL(f, x_eval, &f_eval); /* Update {x,f}_lower, {x,f}_upper, {x,f}_prev_small, {x,f}_small, and {x,f}_minimum */ if (f_eval <= f_m) { if (x_eval < x_m) { *x_upper = x_m; *f_upper = f_m; } else { *x_lower = x_m; *f_upper = f_m; } state->x_prev_small = x_small; state->f_prev_small = f_small; state->x_small = x_m; state->f_small = f_m; *x_minimum = x_eval; *f_minimum = f_eval; } else { if (x_eval < x_m) { *x_lower = x_eval; *f_lower = f_eval; } else { *x_upper = x_eval; *f_upper = f_eval; } if (f_eval <= f_small || fabs (x_small - x_m) < 2.0 * GSL_DBL_EPSILON) { state->x_prev_small = x_small; state->f_prev_small = f_small; state->x_small = x_eval; state->f_small = f_eval; } else if (f_eval <= f_prev_small || fabs (x_prev_small - x_m) < 2.0 * GSL_DBL_EPSILON || fabs (x_prev_small - x_small) < 2.0 * GSL_DBL_EPSILON) { state->x_prev_small = x_eval; state->f_prev_small = f_eval; } } /* Update stored values for next iteration */ state->stored_step = stored_step; state->prev_stored_step = prev_stored_step; state->step_size = step_size; state->num_iter++; DEBUG_PRINTF(("[%d] Final State: %g %g %g\n", state->num_iter, x_l, x_m, x_u)); return GSL_SUCCESS; } static const gsl_min_fminimizer_type quad_golden_type = { "quad-golden", /* name */ sizeof (quad_golden_state_t), &quad_golden_init, &quad_golden_iterate }; const gsl_min_fminimizer_type *gsl_min_fminimizer_quad_golden = &quad_golden_type; gsl/min/ChangeLog0000644000175000017500000000602113536674414012266 0ustar eddedd2009-07-11 Brian Gough * quad_golden.c: added new safeguarded step-length algorithm from James Howse 2009-07-09 Brian Gough * fsolver.c (gsl_min_fminimizer_free): handle NULL argument in free 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2008-01-09 Brian Gough * brent.c (brent_iterate): remove spurious early return 2007-07-30 Brian Gough * min.h (SAFE_FUNC_CALL): use gsl_finite instead of finite 2005-09-09 Brian Gough * min.h: improved error message, function can be discontinuous despite what error message said. 2005-04-28 Brian Gough * brent.c (brent_iterate): fixed error in ordering of tests for updates so that it agrees with Brent's book. 2004-04-13 Brian Gough * brent.c (brent_iterate): corrected condition for setting to +/-tolerance. Sun Apr 7 15:22:11 2002 Brian Gough * fsolver.c (gsl_min_fminimizer_x_minimum): new function, obsoletes gsl_min_fminimizer_minimum. (gsl_min_fminimizer_f_minimum): new function for accessing function values (gsl_min_fminimizer_f_lower): new function for accessing function values (gsl_min_fminimizer_f_upper): new function for accessing function values * renamed minimum to x_minimum throughout Wed Oct 3 11:35:45 2001 Brian Gough * test.c (main): added an extra test Sun Jul 15 17:53:26 2001 Brian Gough * eliminated interval type, changed order of arguments to set functions Tue Apr 17 22:13:58 2001 Brian Gough * fsolver.c (gsl_min_fminimizer_alloc): removed unnecessary status variable Mon Apr 2 14:54:33 2001 Brian Gough * brent.c (brent_init): fixed incorrect value for golden ratio (brent_iterate): fixed incorrect value for golden ratio * golden.c (goldensection_iterate): fixed incorrect value for golden ratio * bracketing.c (gsl_min_find_bracket): fixed incorrect value for golden ratio Sun Feb 18 11:43:04 2001 Brian Gough * fsolver.c: changed so that the solver _alloc function no longer calls _set, the user must do that separately. Fri May 5 16:09:11 2000 Brian Gough * test.c (test_bracket): fixed warning about "control reaches end of non-void function" by changing return type to void Tue Feb 15 16:32:55 2000 Brian Gough * bracketing.c (gsl_min_find_bracket): changed counter nb_eval from type int to type size_t in order to avoid comparison between signed and unsigned, (nb_eval < eval_max). Mon Feb 14 13:07:43 2000 Brian Gough * made all internal functions static Wed Oct 13 16:08:03 1999 Brian Gough * rewritten to allow initial values to be specified gsl/min/min.h0000644000175000017500000000174313536674414011456 0ustar eddedd/* min/min.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #define SAFE_FUNC_CALL(f, x, yp) \ do { \ *yp = GSL_FN_EVAL(f,x); \ if (!gsl_finite(*yp)) \ GSL_ERROR("computed function value is infinite or NaN", GSL_EBADFUNC); \ } while (0) gsl/min/Makefile.am0000644000175000017500000000070113536674414012547 0ustar eddeddnoinst_LTLIBRARIES = libgslmin.la pkginclude_HEADERS = gsl_min.h noinst_HEADERS = min.h AM_CPPFLAGS = -I$(top_srcdir) libgslmin_la_SOURCES = fsolver.c golden.c brent.c convergence.c bracketing.c quad_golden.c check_PROGRAMS = test TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_funcs.c test.h test_LDADD = libgslmin.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la gsl/min/bracketing.c0000644000175000017500000000775113536674414013004 0ustar eddedd/* min/bracketing.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Fabrice Rossi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* bracketing.c -- find an initial bracketing interval for a function to minimize */ #include #include #include #include #include #include "min.h" int gsl_min_find_bracket(gsl_function *f,double *x_minimum,double * f_minimum, double * x_lower, double * f_lower, double * x_upper, double * f_upper, size_t eval_max) { /* The three following variables must be declared volatile to avoid storage in extended precision registers available on some architecture. The code relies on the ability to compare double values. As the values will be store in regular memory, the extended precision will then be lost and values that are different in extended precision might have equal representation in double precision. This behavior might break the algorithm. */ volatile double f_left = *f_lower; volatile double f_right = *f_upper; volatile double f_center; double x_left = *x_lower; double x_right= *x_upper; double x_center; const double golden = 0.3819660; /* golden = (3 - sqrt(5))/2 */ size_t nb_eval = 0; if (f_right >= f_left) { x_center = (x_right - x_left) * golden + x_left; nb_eval++; SAFE_FUNC_CALL (f, x_center, &f_center); } else { x_center = x_right ; f_center = f_right ; x_right = (x_center - x_left) / golden + x_left; nb_eval++; SAFE_FUNC_CALL (f, x_right, &f_right); } do { if (f_center < f_left ) { if (f_center < f_right) { *x_lower = x_left; *x_upper = x_right; *x_minimum = x_center; *f_lower = f_left; *f_upper = f_right; *f_minimum = f_center; /* gsl_ieee_printf_double (&f_left); printf(" "); gsl_ieee_printf_double (&f_center); printf("\n");*/ return GSL_SUCCESS; } else if (f_center > f_right) { x_left = x_center; f_left = f_center; x_center = x_right; f_center = f_right; x_right = (x_center - x_left) / golden + x_left; nb_eval++; SAFE_FUNC_CALL (f, x_right, &f_right); } else /* f_center == f_right */ { x_right = x_center; f_right = f_center; x_center = (x_right - x_left) * golden + x_left; nb_eval++; SAFE_FUNC_CALL (f, x_center, &f_center); } } else /* f_center >= f_left */ { x_right = x_center; f_right = f_center; x_center = (x_right - x_left) * golden + x_left; nb_eval++; SAFE_FUNC_CALL (f, x_center, &f_center); } } while (nb_eval < eval_max && (x_right - x_left) > GSL_SQRT_DBL_EPSILON * ( (x_right + x_left) * 0.5 ) + GSL_SQRT_DBL_EPSILON); *x_lower = x_left; *x_upper = x_right; *x_minimum = x_center; *f_lower = f_left; *f_upper = f_right; *f_minimum = f_center; return GSL_FAILURE; } gsl/min/golden.c0000644000175000017500000000655513536674414012144 0ustar eddedd/* min/golden.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* goldensection.c -- goldensection minimum finding algorithm */ #include #include #include #include #include #include #include #include #include #include "min.h" typedef struct { double dummy; } goldensection_state_t; static int goldensection_init (void * vstate, gsl_function * f, double x_minimum, double f_minimum, double x_lower, double f_lower, double x_upper, double f_upper); static int goldensection_iterate (void * vstate, gsl_function * f, double * x_minimum, double * f_minimum, double * x_lower, double * f_lower, double * x_upper, double * f_upper); static int goldensection_init (void * vstate, gsl_function * f, double x_minimum, double f_minimum, double x_lower, double f_lower, double x_upper, double f_upper) { goldensection_state_t * state = (goldensection_state_t *) vstate; /* no initialization required, prevent warnings about unused variables */ state = 0; f = 0; x_minimum = 0; f_minimum = 0; x_lower = 0; f_lower = 0; x_upper = 0; f_upper = 0; return GSL_SUCCESS; } static int goldensection_iterate (void * vstate, gsl_function * f, double * x_minimum, double * f_minimum, double * x_lower, double * f_lower, double * x_upper, double * f_upper) { goldensection_state_t * state = (goldensection_state_t *) vstate; const double x_center = *x_minimum ; const double x_left = *x_lower ; const double x_right = *x_upper ; const double f_min = *f_minimum; const double golden = 0.3819660; /* golden = (3 - sqrt(5))/2 */ const double w_lower = (x_center - x_left); const double w_upper = (x_right - x_center); double x_new, f_new; state = 0 ; /* avoid warning about unused parameters */ x_new = x_center + golden * ((w_upper > w_lower) ? w_upper : -w_lower) ; SAFE_FUNC_CALL (f, x_new, &f_new); if (f_new < f_min) { *x_minimum = x_new ; *f_minimum = f_new ; return GSL_SUCCESS; } else if (x_new < x_center && f_new > f_min) { *x_lower = x_new ; *f_lower = f_new ; return GSL_SUCCESS; } else if (x_new > x_center && f_new > f_min) { *x_upper = x_new ; *f_upper = f_new ; return GSL_SUCCESS; } else { return GSL_FAILURE; } } static const gsl_min_fminimizer_type goldensection_type = {"goldensection", /* name */ sizeof (goldensection_state_t), &goldensection_init, &goldensection_iterate}; const gsl_min_fminimizer_type * gsl_min_fminimizer_goldensection = &goldensection_type; gsl/min/gsl_min.h0000644000175000017500000000770713536674414012331 0ustar eddedd/* min/gsl_min.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2009 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MIN_H__ #define __GSL_MIN_H__ #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef struct { const char *name; size_t size; int (*set) (void *state, gsl_function * f, double x_minimum, double f_minimum, double x_lower, double f_lower, double x_upper, double f_upper); int (*iterate) (void *state, gsl_function * f, double * x_minimum, double * f_minimum, double * x_lower, double * f_lower, double * x_upper, double * f_upper); } gsl_min_fminimizer_type; typedef struct { const gsl_min_fminimizer_type * type; gsl_function * function ; double x_minimum ; double x_lower ; double x_upper ; double f_minimum, f_lower, f_upper; void *state; } gsl_min_fminimizer; gsl_min_fminimizer * gsl_min_fminimizer_alloc (const gsl_min_fminimizer_type * T) ; void gsl_min_fminimizer_free (gsl_min_fminimizer * s); int gsl_min_fminimizer_set (gsl_min_fminimizer * s, gsl_function * f, double x_minimum, double x_lower, double x_upper); int gsl_min_fminimizer_set_with_values (gsl_min_fminimizer * s, gsl_function * f, double x_minimum, double f_minimum, double x_lower, double f_lower, double x_upper, double f_upper); int gsl_min_fminimizer_iterate (gsl_min_fminimizer * s); const char * gsl_min_fminimizer_name (const gsl_min_fminimizer * s); double gsl_min_fminimizer_x_minimum (const gsl_min_fminimizer * s); double gsl_min_fminimizer_x_lower (const gsl_min_fminimizer * s); double gsl_min_fminimizer_x_upper (const gsl_min_fminimizer * s); double gsl_min_fminimizer_f_minimum (const gsl_min_fminimizer * s); double gsl_min_fminimizer_f_lower (const gsl_min_fminimizer * s); double gsl_min_fminimizer_f_upper (const gsl_min_fminimizer * s); /* Deprecated, use x_minimum instead */ double gsl_min_fminimizer_minimum (const gsl_min_fminimizer * s); int gsl_min_test_interval (double x_lower, double x_upper, double epsabs, double epsrel); GSL_VAR const gsl_min_fminimizer_type * gsl_min_fminimizer_goldensection; GSL_VAR const gsl_min_fminimizer_type * gsl_min_fminimizer_brent; GSL_VAR const gsl_min_fminimizer_type * gsl_min_fminimizer_quad_golden; typedef int (*gsl_min_bracketing_function)(gsl_function *f, double *x_minimum,double * f_minimum, double *x_lower, double * f_lower, double *x_upper, double * f_upper, size_t eval_max); int gsl_min_find_bracket(gsl_function *f,double *x_minimum,double * f_minimum, double *x_lower, double * f_lower, double *x_upper, double * f_upper, size_t eval_max); __END_DECLS #endif /* __GSL_MIN_H__ */ gsl/min/fsolver.c0000644000175000017500000001165013536674414012344 0ustar eddedd/* min/fsolver.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include "min.h" static int compute_f_values (gsl_function * f, double x_minimum, double * f_minimum, double x_lower, double * f_lower, double x_upper, double * f_upper); static int compute_f_values (gsl_function * f, double x_minimum, double * f_minimum, double x_lower, double * f_lower, double x_upper, double * f_upper) { SAFE_FUNC_CALL(f, x_lower, f_lower); SAFE_FUNC_CALL(f, x_upper, f_upper); SAFE_FUNC_CALL(f, x_minimum, f_minimum); return GSL_SUCCESS; } int gsl_min_fminimizer_set (gsl_min_fminimizer * s, gsl_function * f, double x_minimum, double x_lower, double x_upper) { int status ; double f_minimum, f_lower, f_upper; status = compute_f_values (f, x_minimum, &f_minimum, x_lower, &f_lower, x_upper, &f_upper); if (status != GSL_SUCCESS) { return status ; } status = gsl_min_fminimizer_set_with_values (s, f, x_minimum, f_minimum, x_lower, f_lower, x_upper, f_upper); return status; } gsl_min_fminimizer * gsl_min_fminimizer_alloc (const gsl_min_fminimizer_type * T) { gsl_min_fminimizer * s = (gsl_min_fminimizer *) malloc (sizeof (gsl_min_fminimizer)); if (s == 0) { GSL_ERROR_VAL ("failed to allocate space for minimizer struct", GSL_ENOMEM, 0); }; s->state = malloc (T->size); if (s->state == 0) { free (s); /* exception in constructor, avoid memory leak */ GSL_ERROR_VAL ("failed to allocate space for minimizer state", GSL_ENOMEM, 0); }; s->type = T ; s->function = NULL; return s; } int gsl_min_fminimizer_set_with_values (gsl_min_fminimizer * s, gsl_function * f, double x_minimum, double f_minimum, double x_lower, double f_lower, double x_upper, double f_upper) { s->function = f; s->x_minimum = x_minimum; s->x_lower = x_lower; s->x_upper = x_upper; if (x_lower > x_upper) { GSL_ERROR ("invalid interval (lower > upper)", GSL_EINVAL); } if (x_minimum >= x_upper || x_minimum <= x_lower) { GSL_ERROR ("x_minimum must lie inside interval (lower < x < upper)", GSL_EINVAL); } s->f_lower = f_lower; s->f_upper = f_upper; s->f_minimum = f_minimum; if (f_minimum >= f_lower || f_minimum >= f_upper) { GSL_ERROR ("endpoints do not enclose a minimum", GSL_EINVAL); } return (s->type->set) (s->state, s->function, x_minimum, f_minimum, x_lower, f_lower, x_upper, f_upper); } int gsl_min_fminimizer_iterate (gsl_min_fminimizer * s) { return (s->type->iterate) (s->state, s->function, &(s->x_minimum), &(s->f_minimum), &(s->x_lower), &(s->f_lower), &(s->x_upper), &(s->f_upper)); } void gsl_min_fminimizer_free (gsl_min_fminimizer * s) { RETURN_IF_NULL (s); free (s->state); free (s); } const char * gsl_min_fminimizer_name (const gsl_min_fminimizer * s) { return s->type->name; } /* Deprecated, use x_minimum instead */ double gsl_min_fminimizer_minimum (const gsl_min_fminimizer * s) { return s->x_minimum; } double gsl_min_fminimizer_x_minimum (const gsl_min_fminimizer * s) { return s->x_minimum; } double gsl_min_fminimizer_x_lower (const gsl_min_fminimizer * s) { return s->x_lower; } double gsl_min_fminimizer_x_upper (const gsl_min_fminimizer * s) { return s->x_upper; } double gsl_min_fminimizer_f_minimum (const gsl_min_fminimizer * s) { return s->f_minimum; } double gsl_min_fminimizer_f_lower (const gsl_min_fminimizer * s) { return s->f_lower; } double gsl_min_fminimizer_f_upper (const gsl_min_fminimizer * s) { return s->f_upper; } gsl/min/convergence.c0000644000175000017500000000332413536674414013161 0ustar eddedd/* min/convergence.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include int gsl_min_test_interval (double x_lower, double x_upper, double epsabs, double epsrel) { const double lower = x_lower; const double upper = x_upper; const double abs_lower = fabs(lower) ; const double abs_upper = fabs(upper) ; double min_abs, tolerance; if (epsrel < 0.0) GSL_ERROR ("relative tolerance is negative", GSL_EBADTOL); if (epsabs < 0.0) GSL_ERROR ("absolute tolerance is negative", GSL_EBADTOL); if (lower > upper) GSL_ERROR ("lower bound larger than upper_bound", GSL_EINVAL); if ((lower > 0 && upper > 0) || (lower < 0 && upper < 0)) { min_abs = GSL_MIN_DBL(abs_lower, abs_upper) ; } else { min_abs = 0; } tolerance = epsabs + epsrel * min_abs ; if (fabs(upper - lower) < tolerance) return GSL_SUCCESS; return GSL_CONTINUE ; } gsl/min/test.h0000644000175000017500000000306213536674414011646 0ustar eddedd/* min/test.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ gsl_function create_function (double (*f)(double, void *)); void test_f_e (const gsl_min_fminimizer_type * T, const char * description, gsl_function *f, double lower_bound, double minimum, double upper_bound, double correct_minimum); void test_f (const gsl_min_fminimizer_type * T, const char * description, gsl_function *f, double lower_bound, double middle, double upper_bound, double correct_minimum); int test_bracket (const char * description,gsl_function *f,double lower_bound, double upper_bound, unsigned int max); double f_cos (double x, void * p); double func1 (double x, void * p); double func2 (double x, void * p); double func3 (double x, void * p); double func4 (double x, void * p); gsl/min/brent.c0000644000175000017500000001162213536674414011775 0ustar eddedd/* min/brent.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* brent.c -- brent minimum finding algorithm */ #include #include #include #include #include #include #include #include #include #include "min.h" typedef struct { double d, e, v, w; double f_v, f_w; } brent_state_t; static int brent_init (void *vstate, gsl_function * f, double x_minimum, double f_minimum, double x_lower, double f_lower, double x_upper, double f_upper); static int brent_iterate (void *vstate, gsl_function * f, double *x_minimum, double * f_minimum, double * x_lower, double * f_lower, double * x_upper, double * f_upper); static int brent_init (void *vstate, gsl_function * f, double x_minimum, double f_minimum, double x_lower, double f_lower, double x_upper, double f_upper) { brent_state_t *state = (brent_state_t *) vstate; const double golden = 0.3819660; /* golden = (3 - sqrt(5))/2 */ double v = x_lower + golden * (x_upper - x_lower); double w = v; double f_vw; x_minimum = 0 ; /* avoid warnings about unused varibles */ f_minimum = 0 ; f_lower = 0 ; f_upper = 0 ; state->v = v; state->w = w; state->d = 0; state->e = 0; SAFE_FUNC_CALL (f, v, &f_vw); state->f_v = f_vw; state->f_w = f_vw; return GSL_SUCCESS; } static int brent_iterate (void *vstate, gsl_function * f, double *x_minimum, double * f_minimum, double * x_lower, double * f_lower, double * x_upper, double * f_upper) { brent_state_t *state = (brent_state_t *) vstate; const double x_left = *x_lower; const double x_right = *x_upper; const double z = *x_minimum; double d = state->e; double e = state->d; double u, f_u; const double v = state->v; const double w = state->w; const double f_v = state->f_v; const double f_w = state->f_w; const double f_z = *f_minimum; const double golden = 0.3819660; /* golden = (3 - sqrt(5))/2 */ const double w_lower = (z - x_left); const double w_upper = (x_right - z); const double tolerance = GSL_SQRT_DBL_EPSILON * fabs (z); double p = 0, q = 0, r = 0; const double midpoint = 0.5 * (x_left + x_right); if (fabs (e) > tolerance) { /* fit parabola */ r = (z - w) * (f_z - f_v); q = (z - v) * (f_z - f_w); p = (z - v) * q - (z - w) * r; q = 2 * (q - r); if (q > 0) { p = -p; } else { q = -q; } r = e; e = d; } if (fabs (p) < fabs (0.5 * q * r) && p < q * w_lower && p < q * w_upper) { double t2 = 2 * tolerance ; d = p / q; u = z + d; if ((u - x_left) < t2 || (x_right - u) < t2) { d = (z < midpoint) ? tolerance : -tolerance ; } } else { e = (z < midpoint) ? x_right - z : -(z - x_left) ; d = golden * e; } if (fabs (d) >= tolerance) { u = z + d; } else { u = z + ((d > 0) ? tolerance : -tolerance) ; } state->e = e; state->d = d; SAFE_FUNC_CALL(f, u, &f_u); if (f_u <= f_z) { if (u < z) { *x_upper = z; *f_upper = f_z; } else { *x_lower = z; *f_lower = f_z; } state->v = w; state->f_v = f_w; state->w = z; state->f_w = f_z; *x_minimum = u; *f_minimum = f_u; return GSL_SUCCESS; } else { if (u < z) { *x_lower = u; *f_lower = f_u; } else { *x_upper = u; *f_upper = f_u; } if (f_u <= f_w || w == z) { state->v = w; state->f_v = f_w; state->w = u; state->f_w = f_u; return GSL_SUCCESS; } else if (f_u <= f_v || v == z || v == w) { state->v = u; state->f_v = f_u; return GSL_SUCCESS; } } return GSL_SUCCESS; } static const gsl_min_fminimizer_type brent_type = {"brent", /* name */ sizeof (brent_state_t), &brent_init, &brent_iterate}; const gsl_min_fminimizer_type *gsl_min_fminimizer_brent = &brent_type; gsl/min/test.c0000644000175000017500000001443613536674414011650 0ustar eddedd/* min/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include "test.h" #include "min.h" /* stopping parameters */ const double EPSABS = 0.001 ; const double EPSREL = 0.001 ; const unsigned int MAX_ITERATIONS = 100; void my_error_handler (const char *reason, const char *file, int line, int err); #define WITHIN_TOL(a, b, epsrel, epsabs) \ (fabs((a) - (b)) < (epsrel) * GSL_MIN(fabs(a), fabs(b)) + (epsabs)) int main (void) { gsl_function F_cos, F_func1, F_func2, F_func3, F_func4; const gsl_min_fminimizer_type * fminimizer[4] ; const gsl_min_fminimizer_type ** T; gsl_ieee_env_setup (); fminimizer[0] = gsl_min_fminimizer_goldensection; fminimizer[1] = gsl_min_fminimizer_brent; fminimizer[2] = gsl_min_fminimizer_quad_golden; fminimizer[3] = 0; F_cos = create_function (f_cos) ; F_func1 = create_function (func1) ; F_func2 = create_function (func2) ; F_func3 = create_function (func3) ; F_func4 = create_function (func4) ; gsl_set_error_handler (&my_error_handler); for (T = fminimizer ; *T != 0 ; T++) { test_f (*T, "cos(x) [0 (3) 6]", &F_cos, 0.0, 3.0, 6.0, M_PI); test_f (*T, "x^4 - 1 [-3 (-1) 17]", &F_func1, -3.0, -1.0, 17.0, 0.0); test_f (*T, "sqrt(|x|) [-2 (-1) 1.5]", &F_func2, -2.0, -1.0, 1.5, 0.0); test_f (*T, "func3(x) [-2 (3) 4]", &F_func3, -2.0, 3.0, 4.0, 1.0); test_f (*T, "func4(x) [0 (0.782) 1]", &F_func4, 0, 0.782, 1.0, 0.8); test_f_e (*T, "invalid range check [4, 0]", &F_cos, 4.0, 3.0, 0.0, M_PI); test_f_e (*T, "invalid range check [1, 1]", &F_cos, 1.0, 1.0, 1.0, M_PI); test_f_e (*T, "invalid range check [-1, 1]", &F_cos, -1.0, 0.0, 1.0, M_PI); } test_bracket("cos(x) [1,2]",&F_cos,1.0,2.0,15); test_bracket("sqrt(|x|) [-1,0]",&F_func2,-1.0,0.0,15); test_bracket("sqrt(|x|) [-1,-0.6]",&F_func2,-1.0,-0.6,15); test_bracket("sqrt(|x|) [-1,1]",&F_func2,-1.0,1.0,15); exit (gsl_test_summary ()); } void test_f (const gsl_min_fminimizer_type * T, const char * description, gsl_function *f, double lower_bound, double middle, double upper_bound, double correct_minimum) { int status; size_t iterations = 0; double m, a, b; double x_lower, x_upper; gsl_min_fminimizer * s; x_lower = lower_bound; x_upper = upper_bound; s = gsl_min_fminimizer_alloc (T) ; gsl_min_fminimizer_set (s, f, middle, x_lower, x_upper) ; do { iterations++ ; status = gsl_min_fminimizer_iterate (s); m = gsl_min_fminimizer_x_minimum(s); a = gsl_min_fminimizer_x_lower(s); b = gsl_min_fminimizer_x_upper(s); #ifdef DEBUG printf("%.12f %.18f %.12f %.18f %.12f %.18f status=%d\n", a, GSL_FN_EVAL(f, a), m, GSL_FN_EVAL(f, m), b, GSL_FN_EVAL(f, b), status); #endif if (a > b) gsl_test (GSL_FAILURE, "interval is invalid (%g,%g)", a, b); if (m < a || m > b) gsl_test (GSL_FAILURE, "m lies outside interval %g (%g,%g)", m, a, b); if (status) break ; status = gsl_min_test_interval (a, b, EPSABS, EPSREL); } while (status == GSL_CONTINUE && iterations < MAX_ITERATIONS); gsl_test (status, "%s, %s (%g obs vs %g expected) ", gsl_min_fminimizer_name(s), description, gsl_min_fminimizer_x_minimum(s), correct_minimum); /* check the validity of the returned result */ if (!WITHIN_TOL (m, correct_minimum, EPSREL, EPSABS)) { gsl_test (GSL_FAILURE, "incorrect precision (%g obs vs %g expected)", m, correct_minimum); } gsl_min_fminimizer_free (s); } void test_f_e (const gsl_min_fminimizer_type * T, const char * description, gsl_function *f, double lower_bound, double middle, double upper_bound, double correct_minimum) { int status; size_t iterations = 0; double x_lower, x_upper; double a, b; gsl_min_fminimizer * s; x_lower = lower_bound; x_upper = upper_bound; s = gsl_min_fminimizer_alloc (T) ; status = gsl_min_fminimizer_set (s, f, middle, x_lower, x_upper) ; if (status != GSL_SUCCESS) { gsl_min_fminimizer_free (s) ; gsl_test (status == GSL_SUCCESS, "%s, %s", T->name, description); return ; } do { iterations++ ; gsl_min_fminimizer_iterate (s); a = gsl_min_fminimizer_x_lower(s); b = gsl_min_fminimizer_x_upper(s); status = gsl_min_test_interval (a, b, EPSABS, EPSREL); } while (status == GSL_CONTINUE && iterations < MAX_ITERATIONS); gsl_test (!status, "%s, %s", gsl_min_fminimizer_name(s), description, gsl_min_fminimizer_x_minimum(s) - correct_minimum); gsl_min_fminimizer_free (s); } void my_error_handler (const char *reason, const char *file, int line, int err) { if (0) printf ("(caught [%s:%d: %s (%d)])\n", file, line, reason, err); } int test_bracket (const char * description,gsl_function *f,double lower_bound, double upper_bound, unsigned int max) { int status; double x_lower, x_upper; double f_upper,f_lower,f_minimum; double x_minimum; x_lower=lower_bound; x_upper=upper_bound; SAFE_FUNC_CALL (f,x_lower,&f_lower); SAFE_FUNC_CALL (f,x_upper,&f_upper); status=gsl_min_find_bracket(f,&x_minimum,&f_minimum,&x_lower,&f_lower,&x_upper,&f_upper,max); gsl_test (status,"%s, interval: [%g,%g], values: (%g,%g), minimum at: %g, value: %g", description,x_lower,x_upper,f_lower,f_upper,x_minimum,f_minimum); return status; } gsl/min/test_funcs.c0000644000175000017500000000354513536674414013045 0ustar eddedd/* min/test_funcs.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include "test.h" gsl_function create_function (double (*f)(double, void *)) { gsl_function F ; F.function = f ; F.params = 0 ; return F ; } double f_cos (double x, void * p) { p = 0; /* avoid warning about unused parameter */ return cos(x); } /* f(x) = x^4 - 1 */ /* minimum at x = 0 */ double func1 (double x, void * p) { p = 0; /* avoid warning about unused parameter */ return pow (x, 4.0) - 1; } /* f(x) = sqrt(|x|) */ /* minimum at x = 0 */ double func2 (double x, void * p) { p = 0; /* avoid warning about unused parameter */ return sqrt(fabs(x)); } /* f(x) = 1 for x < 1 and -exp(-x) for x >= 1 */ /* minimum at x = 1 */ double func3 (double x, void * p) { p = 0; /* avoid warning about unused parameter */ if (x < 1) return 1 ; else return - exp(-x) ; } /* f(x) = x - 30/(1+1e5*(x-0.8)**2) */ /* minimum near x = 0.8 */ double func4 (double x, void * p) { p = 0; /* avoid warning about unused parameter */ return x - 30.0 / (1.0 + 1e5 * pow(x-0.8, 2.0)); } gsl/deriv/0000755000175000017500000000000014057135461011034 5ustar eddeddgsl/deriv/gsl_deriv.h0000644000175000017500000000303413536674414013172 0ustar eddedd/* deriv/gsl_deriv.h * * Copyright (C) 2000 David Morrison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_DERIV_H__ #define __GSL_DERIV_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS int gsl_deriv_central (const gsl_function *f, double x, double h, double *result, double *abserr); int gsl_deriv_backward (const gsl_function *f, double x, double h, double *result, double *abserr); int gsl_deriv_forward (const gsl_function *f, double x, double h, double *result, double *abserr); __END_DECLS #endif /* __GSL_DERIV_H__ */ gsl/deriv/Makefile.in0000664000175000017500000010532014057135461013104 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = deriv ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslderiv_la_LIBADD = am_libgslderiv_la_OBJECTS = deriv.lo libgslderiv_la_OBJECTS = $(am_libgslderiv_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslderiv.la ../vector/libgslvector.la \ ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/deriv.Plo ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslderiv_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslderiv_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslderiv.la AM_CPPFLAGS = -I$(top_srcdir) libgslderiv_la_SOURCES = deriv.c pkginclude_HEADERS = gsl_deriv.h TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslderiv.la ../vector/libgslvector.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu deriv/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu deriv/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslderiv.la: $(libgslderiv_la_OBJECTS) $(libgslderiv_la_DEPENDENCIES) $(EXTRA_libgslderiv_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslderiv_la_OBJECTS) $(libgslderiv_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deriv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/deriv.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/deriv.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile #demo_SOURCES = demo.c #demo_LDADD = libgslderiv.la ../vector/libgslvector.la ../block/libgslblock.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/deriv/ChangeLog0000644000175000017500000000056513536674414012623 0ustar eddedd2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2007-08-22 Brian Gough * deriv.c (central_deriv): corrected dy term for error in h (forward_deriv): corrected dy term for error in h 2004-03-06 Brian Gough * reworking API of gsl_diff gsl/deriv/Makefile.am0000644000175000017500000000105513536674414013100 0ustar eddeddnoinst_LTLIBRARIES = libgslderiv.la AM_CPPFLAGS = -I$(top_srcdir) libgslderiv_la_SOURCES = deriv.c pkginclude_HEADERS = gsl_deriv.h TESTS = $(check_PROGRAMS) check_PROGRAMS = test #demo test_SOURCES = test.c test_LDADD = libgslderiv.la ../vector/libgslvector.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la #demo_SOURCES = demo.c #demo_LDADD = libgslderiv.la ../vector/libgslvector.la ../block/libgslblock.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la gsl/deriv/test.c0000644000175000017500000001105613536674414012171 0ustar eddedd/* deriv/test.c * * Copyright (C) 2000 David Morrison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include double f1 (double x, void *params) { return exp (x); } double df1 (double x, void *params) { return exp (x); } double f2 (double x, void *params) { if (x >= 0.0) { return x * sqrt (x); } else { return 0.0; } } double df2 (double x, void *params) { if (x >= 0.0) { return 1.5 * sqrt (x); } else { return 0.0; } } double f3 (double x, void *params) { if (x != 0.0) { return sin (1 / x); } else { return 0.0; } } double df3 (double x, void *params) { if (x != 0.0) { return -cos (1 / x) / (x * x); } else { return 0.0; } } double f4 (double x, void *params) { return exp (-x * x); } double df4 (double x, void *params) { return -2.0 * x * exp (-x * x); } double f5 (double x, void *params) { return x * x; } double df5 (double x, void *params) { return 2.0 * x; } double f6 (double x, void *params) { return 1.0 / x; } double df6 (double x, void *params) { return -1.0 / (x * x); } typedef int (deriv_fn) (const gsl_function * f, double x, double h, double * res, double *abserr); void test (deriv_fn * deriv, gsl_function * f, gsl_function * df, double x, const char * desc) { double result, abserr; double expected = GSL_FN_EVAL (df, x); (*deriv) (f, x, 1e-4, &result, &abserr); gsl_test_abs (result, expected, GSL_MIN(1e-4,fabs(expected)) + GSL_DBL_EPSILON, desc); if (abserr < fabs(result-expected)) { gsl_test_factor (abserr, fabs(result-expected), 2, "%s error estimate", desc); } else if (result == expected || expected == 0.0) { gsl_test_abs (abserr, 0.0, 1e-6, "%s abserr", desc); } else { double d = fabs(result - expected); gsl_test_abs (abserr, fabs(result-expected), 1e6*d, "%s abserr", desc); } } int main () { gsl_function F1, DF1, F2, DF2, F3, DF3, F4, DF4, F5, DF5, F6, DF6; gsl_ieee_env_setup (); F1.function = &f1; DF1.function = &df1; F2.function = &f2; DF2.function = &df2; F3.function = &f3; DF3.function = &df3; F4.function = &f4; DF4.function = &df4; F5.function = &f5; DF5.function = &df5; F6.function = &f6; DF6.function = &df6; test (&gsl_deriv_central, &F1, &DF1, 1.0, "exp(x), x=1, central deriv"); test (&gsl_deriv_forward, &F1, &DF1, 1.0, "exp(x), x=1, forward deriv"); test (&gsl_deriv_backward, &F1, &DF1, 1.0, "exp(x), x=1, backward deriv"); test (&gsl_deriv_central, &F2, &DF2, 0.1, "x^(3/2), x=0.1, central deriv"); test (&gsl_deriv_forward, &F2, &DF2, 0.1, "x^(3/2), x=0.1, forward deriv"); test (&gsl_deriv_backward, &F2, &DF2, 0.1, "x^(3/2), x=0.1, backward deriv"); test (&gsl_deriv_central, &F3, &DF3, 0.45, "sin(1/x), x=0.45, central deriv"); test (&gsl_deriv_forward, &F3, &DF3, 0.45, "sin(1/x), x=0.45, forward deriv"); test (&gsl_deriv_backward, &F3, &DF3, 0.45, "sin(1/x), x=0.45, backward deriv"); test (&gsl_deriv_central, &F4, &DF4, 0.5, "exp(-x^2), x=0.5, central deriv"); test (&gsl_deriv_forward, &F4, &DF4, 0.5, "exp(-x^2), x=0.5, forward deriv"); test (&gsl_deriv_backward, &F4, &DF4, 0.5, "exp(-x^2), x=0.5, backward deriv"); test (&gsl_deriv_central, &F5, &DF5, 0.0, "x^2, x=0, central deriv"); test (&gsl_deriv_forward, &F5, &DF5, 0.0, "x^2, x=0, forward deriv"); test (&gsl_deriv_backward, &F5, &DF5, 0.0, "x^2, x=0, backward deriv"); test (&gsl_deriv_central, &F6, &DF6, 10.0, "1/x, x=10, central deriv"); test (&gsl_deriv_forward, &F6, &DF6, 10.0, "1/x, x=10, forward deriv"); test (&gsl_deriv_backward, &F6, &DF6, 10.0, "1/x, x=10, backward deriv"); exit (gsl_test_summary ()); } gsl/deriv/deriv.c0000644000175000017500000001343013536674414012321 0ustar eddedd/* deriv/deriv.c * * Copyright (C) 2004, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include static void central_deriv (const gsl_function * f, double x, double h, double *result, double *abserr_round, double *abserr_trunc) { /* Compute the derivative using the 5-point rule (x-h, x-h/2, x, x+h/2, x+h). Note that the central point is not used. Compute the error using the difference between the 5-point and the 3-point rule (x-h,x,x+h). Again the central point is not used. */ double fm1 = GSL_FN_EVAL (f, x - h); double fp1 = GSL_FN_EVAL (f, x + h); double fmh = GSL_FN_EVAL (f, x - h / 2); double fph = GSL_FN_EVAL (f, x + h / 2); double r3 = 0.5 * (fp1 - fm1); double r5 = (4.0 / 3.0) * (fph - fmh) - (1.0 / 3.0) * r3; double e3 = (fabs (fp1) + fabs (fm1)) * GSL_DBL_EPSILON; double e5 = 2.0 * (fabs (fph) + fabs (fmh)) * GSL_DBL_EPSILON + e3; /* The next term is due to finite precision in x+h = O (eps * x) */ double dy = GSL_MAX (fabs (r3 / h), fabs (r5 / h)) *(fabs (x) / h) * GSL_DBL_EPSILON; /* The truncation error in the r5 approximation itself is O(h^4). However, for safety, we estimate the error from r5-r3, which is O(h^2). By scaling h we will minimise this estimated error, not the actual truncation error in r5. */ *result = r5 / h; *abserr_trunc = fabs ((r5 - r3) / h); /* Estimated truncation error O(h^2) */ *abserr_round = fabs (e5 / h) + dy; /* Rounding error (cancellations) */ } int gsl_deriv_central (const gsl_function * f, double x, double h, double *result, double *abserr) { double r_0, round, trunc, error; central_deriv (f, x, h, &r_0, &round, &trunc); error = round + trunc; if (round < trunc && (round > 0 && trunc > 0)) { double r_opt, round_opt, trunc_opt, error_opt; /* Compute an optimised stepsize to minimize the total error, using the scaling of the truncation error (O(h^2)) and rounding error (O(1/h)). */ double h_opt = h * pow (round / (2.0 * trunc), 1.0 / 3.0); central_deriv (f, x, h_opt, &r_opt, &round_opt, &trunc_opt); error_opt = round_opt + trunc_opt; /* Check that the new error is smaller, and that the new derivative is consistent with the error bounds of the original estimate. */ if (error_opt < error && fabs (r_opt - r_0) < 4.0 * error) { r_0 = r_opt; error = error_opt; } } *result = r_0; *abserr = error; return GSL_SUCCESS; } static void forward_deriv (const gsl_function * f, double x, double h, double *result, double *abserr_round, double *abserr_trunc) { /* Compute the derivative using the 4-point rule (x+h/4, x+h/2, x+3h/4, x+h). Compute the error using the difference between the 4-point and the 2-point rule (x+h/2,x+h). */ double f1 = GSL_FN_EVAL (f, x + h / 4.0); double f2 = GSL_FN_EVAL (f, x + h / 2.0); double f3 = GSL_FN_EVAL (f, x + (3.0 / 4.0) * h); double f4 = GSL_FN_EVAL (f, x + h); double r2 = 2.0*(f4 - f2); double r4 = (22.0 / 3.0) * (f4 - f3) - (62.0 / 3.0) * (f3 - f2) + (52.0 / 3.0) * (f2 - f1); /* Estimate the rounding error for r4 */ double e4 = 2 * 20.67 * (fabs (f4) + fabs (f3) + fabs (f2) + fabs (f1)) * GSL_DBL_EPSILON; /* The next term is due to finite precision in x+h = O (eps * x) */ double dy = GSL_MAX (fabs (r2 / h), fabs (r4 / h)) * fabs (x / h) * GSL_DBL_EPSILON; /* The truncation error in the r4 approximation itself is O(h^3). However, for safety, we estimate the error from r4-r2, which is O(h). By scaling h we will minimise this estimated error, not the actual truncation error in r4. */ *result = r4 / h; *abserr_trunc = fabs ((r4 - r2) / h); /* Estimated truncation error O(h) */ *abserr_round = fabs (e4 / h) + dy; } int gsl_deriv_forward (const gsl_function * f, double x, double h, double *result, double *abserr) { double r_0, round, trunc, error; forward_deriv (f, x, h, &r_0, &round, &trunc); error = round + trunc; if (round < trunc && (round > 0 && trunc > 0)) { double r_opt, round_opt, trunc_opt, error_opt; /* Compute an optimised stepsize to minimize the total error, using the scaling of the estimated truncation error (O(h)) and rounding error (O(1/h)). */ double h_opt = h * pow (round / (trunc), 1.0 / 2.0); forward_deriv (f, x, h_opt, &r_opt, &round_opt, &trunc_opt); error_opt = round_opt + trunc_opt; /* Check that the new error is smaller, and that the new derivative is consistent with the error bounds of the original estimate. */ if (error_opt < error && fabs (r_opt - r_0) < 4.0 * error) { r_0 = r_opt; error = error_opt; } } *result = r_0; *abserr = error; return GSL_SUCCESS; } int gsl_deriv_backward (const gsl_function * f, double x, double h, double *result, double *abserr) { return gsl_deriv_forward (f, x, -h, result, abserr); } gsl/sum/0000755000175000017500000000000014057135461010527 5ustar eddeddgsl/sum/Makefile.in0000664000175000017500000010615114057135461012602 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = sum ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslsum_la_LIBADD = am_libgslsum_la_OBJECTS = levin_u.lo levin_utrunc.lo work_u.lo \ work_utrunc.lo libgslsum_la_OBJECTS = $(am_libgslsum_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslsum.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/levin_u.Plo \ ./$(DEPDIR)/levin_utrunc.Plo ./$(DEPDIR)/test.Po \ ./$(DEPDIR)/work_u.Plo ./$(DEPDIR)/work_utrunc.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslsum_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslsum_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslsum.la pkginclude_HEADERS = gsl_sum.h AM_CPPFLAGS = -I$(top_srcdir) libgslsum_la_SOURCES = levin_u.c levin_utrunc.c work_u.c work_utrunc.c TESTS = $(check_PROGRAMS) test_LDADD = libgslsum.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sum/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu sum/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslsum.la: $(libgslsum_la_OBJECTS) $(libgslsum_la_DEPENDENCIES) $(EXTRA_libgslsum_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslsum_la_OBJECTS) $(libgslsum_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/levin_u.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/levin_utrunc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/work_u.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/work_utrunc.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/levin_u.Plo -rm -f ./$(DEPDIR)/levin_utrunc.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/work_u.Plo -rm -f ./$(DEPDIR)/work_utrunc.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/levin_u.Plo -rm -f ./$(DEPDIR)/levin_utrunc.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/work_u.Plo -rm -f ./$(DEPDIR)/work_utrunc.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/sum/ChangeLog0000644000175000017500000000673513536674414012323 0ustar eddedd2009-07-09 Brian Gough * work_utrunc.c (gsl_sum_levin_utrunc_free): handle NULL argument in free * work_u.c (gsl_sum_levin_u_free): handle NULL argument in free 2009-06-28 Brian Gough * test.c (check_full): allow for case where err_est is zero. * levin_u.c (gsl_sum_levin_u_minmax): handle the special case where the sum has the form 1+0+0+0+... by ignoring trailing zeros. 2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir Thu Dec 21 21:46:54 2000 Brian Gough * changed err to abserr, to make it clear that it is an absolute error in line with other modules. Thu Nov 2 20:08:14 2000 Brian Gough * added support for a workspace so that the user does not have to allocate memory * made the names of the functions consistent as either levin_u, for the full u transform with error estimate, or levin_utrunc for the u transform with only a truncation error estimate. Mon Apr 24 21:15:27 2000 Brian Gough * gsl_sum.h: added #include for size_t Mon Nov 1 12:50:17 1999 Brian Gough * test.c (main): added tests using series for the Euler constant and eta(1/2) * resolved problems with spurious failures by replacing the directly computed truncation error by an estimate which varies more smoothly. I have used the average of the previous two values, which seems to give a reliable estimate of the truncation error. The direct evaluation of the truncation error sometimes fluctuated wildly, due to cancellation effects. Thu Oct 28 12:05:47 1999 Brian Gough * test.c: cleaned up tests, now find that everything works in double-precision but not extended-precision where there are two failures depending on the optimization level * levin_uerr.c (gsl_sum_levin_u_accel_minmax): changed loop maximum from <=n to * levin_u.c levin_uerr.c: changed DBL_MAX to GSL_DBL_MAX since we don't rely on DBL_MAX Sat Feb 6 20:35:26 1999 Brian Gough * test.c: adjusted the precision check to allow for "infinite accuracy" which occurs when two results agree to machine precision Thu Nov 19 13:10:19 1998 Brian Gough * added an n_used parameter to all routines which gives the number of terms actually used Tue Nov 17 12:31:03 1998 Brian Gough * test.c: added #include * renamed test_sum.c to test.c * renamed all the functions so that _with_derivs is now the default and _trunc is the case of no error estimates from the derivatives * test_sum.c (main): cleaned up tests Mon Nov 9 22:05:45 1998 Brian Gough * levin_u.c (gsl_sum_levin_u_accel_minmax): got rid of noise variables since they aren't used in the non-derivative case 1998-11-06 * test_sum.c: replace variable N by macro to avoid variable length array warning Tue Oct 27 18:06:16 1998 Brian Gough * levin_u.c: added in noise but it does not seem to be giving the right answer for the error estimate. The actual value for the accelerated sum is correct though. Check toms/602 for the original algorithm. gsl/sum/Makefile.am0000644000175000017500000000060513536674414012573 0ustar eddeddnoinst_LTLIBRARIES = libgslsum.la pkginclude_HEADERS = gsl_sum.h AM_CPPFLAGS = -I$(top_srcdir) libgslsum_la_SOURCES = levin_u.c levin_utrunc.c work_u.c work_utrunc.c TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_LDADD = libgslsum.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la test_SOURCES = test.c gsl/sum/gsl_sum.h0000644000175000017500000001253413536674414012365 0ustar eddedd/* sum/gsl_sum.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #ifndef __GSL_SUM_H__ #define __GSL_SUM_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Workspace for Levin U Transform with error estimation, * * size = number of terms the workspace can handle * sum_plain = simple sum of series * q_num = backward diagonal of numerator; length = size * q_den = backward diagonal of denominator; length = size * dq_num = table of numerator derivatives; length = size**2 * dq_den = table of denominator derivatives; length = size**2 * dsum = derivative of sum wrt term i; length = size */ typedef struct { size_t size; size_t i; /* position in array */ size_t terms_used; /* number of calls */ double sum_plain; double *q_num; double *q_den; double *dq_num; double *dq_den; double *dsum; } gsl_sum_levin_u_workspace; gsl_sum_levin_u_workspace *gsl_sum_levin_u_alloc (size_t n); void gsl_sum_levin_u_free (gsl_sum_levin_u_workspace * w); /* Basic Levin-u acceleration method. * * array = array of series elements * n = size of array * sum_accel = result of summation acceleration * err = estimated error * * See [Fessler et al., ACM TOMS 9, 346 (1983) and TOMS-602] */ int gsl_sum_levin_u_accel (const double *array, const size_t n, gsl_sum_levin_u_workspace * w, double *sum_accel, double *abserr); /* Basic Levin-u acceleration method with constraints on the terms * used, * * array = array of series elements * n = size of array * min_terms = minimum number of terms to sum * max_terms = maximum number of terms to sum * sum_accel = result of summation acceleration * err = estimated error * * See [Fessler et al., ACM TOMS 9, 346 (1983) and TOMS-602] */ int gsl_sum_levin_u_minmax (const double *array, const size_t n, const size_t min_terms, const size_t max_terms, gsl_sum_levin_u_workspace * w, double *sum_accel, double *abserr); /* Basic Levin-u step w/o reference to the array of terms. * We only need to specify the value of the current term * to execute the step. See TOMS-745. * * sum = t0 + ... + t_{n-1} + term; term = t_{n} * * term = value of the series term to be added * n = position of term in series (starting from 0) * sum_accel = result of summation acceleration * sum_plain = simple sum of series */ int gsl_sum_levin_u_step (const double term, const size_t n, const size_t nmax, gsl_sum_levin_u_workspace * w, double *sum_accel); /* The following functions perform the same calculation without estimating the errors. They require O(N) storage instead of O(N^2). This may be useful for summing many similar series where the size of the error has already been estimated reliably and is not expected to change. */ typedef struct { size_t size; size_t i; /* position in array */ size_t terms_used; /* number of calls */ double sum_plain; double *q_num; double *q_den; double *dsum; } gsl_sum_levin_utrunc_workspace; gsl_sum_levin_utrunc_workspace *gsl_sum_levin_utrunc_alloc (size_t n); void gsl_sum_levin_utrunc_free (gsl_sum_levin_utrunc_workspace * w); int gsl_sum_levin_utrunc_accel (const double *array, const size_t n, gsl_sum_levin_utrunc_workspace * w, double *sum_accel, double *abserr_trunc); int gsl_sum_levin_utrunc_minmax (const double *array, const size_t n, const size_t min_terms, const size_t max_terms, gsl_sum_levin_utrunc_workspace * w, double *sum_accel, double *abserr_trunc); int gsl_sum_levin_utrunc_step (const double term, const size_t n, gsl_sum_levin_utrunc_workspace * w, double *sum_accel); __END_DECLS #endif /* __GSL_SUM_H__ */ gsl/sum/work_u.c0000644000175000017500000000413713536674414012215 0ustar eddedd#include #include #include #include gsl_sum_levin_u_workspace * gsl_sum_levin_u_alloc (size_t n) { gsl_sum_levin_u_workspace * w; if (n == 0) { GSL_ERROR_VAL ("length n must be positive integer", GSL_EDOM, 0); } w = (gsl_sum_levin_u_workspace *) malloc(sizeof(gsl_sum_levin_u_workspace)); if (w == NULL) { GSL_ERROR_VAL ("failed to allocate struct", GSL_ENOMEM, 0); } w->q_num = (double *) malloc (n * sizeof (double)); if (w->q_num == NULL) { free(w) ; /* error in constructor, prevent memory leak */ GSL_ERROR_VAL ("failed to allocate space for q_num", GSL_ENOMEM, 0); } w->q_den = (double *) malloc (n * sizeof (double)); if (w->q_den == NULL) { free (w->q_num); free (w) ; /* error in constructor, prevent memory leak */ GSL_ERROR_VAL ("failed to allocate space for q_den", GSL_ENOMEM, 0); } w->dq_num = (double *) malloc (n * n * sizeof (double)); if (w->dq_num == NULL) { free (w->q_den); free (w->q_num); free(w) ; /* error in constructor, prevent memory leak */ GSL_ERROR_VAL ("failed to allocate space for dq_num", GSL_ENOMEM, 0); } w->dq_den = (double *) malloc (n * n * sizeof (double)); if (w->dq_den == NULL) { free (w->dq_num); free (w->q_den); free (w->q_num); free (w) ; /* error in constructor, prevent memory leak */ GSL_ERROR_VAL ("failed to allocate space for dq_den", GSL_ENOMEM, 0); } w->dsum = (double *) malloc (n * sizeof (double)); if (w->dsum == NULL) { free (w->dq_den); free (w->dq_num); free (w->q_den); free (w->q_num); free (w) ; /* error in constructor, prevent memory leak */ GSL_ERROR_VAL ("failed to allocate space for dsum", GSL_ENOMEM, 0); } w->size = n; w->terms_used = 0; w->sum_plain = 0; return w; } void gsl_sum_levin_u_free (gsl_sum_levin_u_workspace * w) { RETURN_IF_NULL (w); free (w->dsum); free (w->dq_den); free (w->dq_num); free (w->q_den); free (w->q_num); free (w); } gsl/sum/levin_u.c0000644000175000017500000001617513536674414012355 0ustar eddedd/* sum/levin_u.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2009 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include int gsl_sum_levin_u_accel (const double *array, const size_t array_size, gsl_sum_levin_u_workspace * w, double *sum_accel, double *abserr) { return gsl_sum_levin_u_minmax (array, array_size, 0, array_size - 1, w, sum_accel, abserr); } int gsl_sum_levin_u_minmax (const double *array, const size_t array_size, const size_t min_terms, const size_t max_terms, gsl_sum_levin_u_workspace * w, double *sum_accel, double *abserr) { /* Ignore any trailing zeros in the array */ size_t size = array_size; while (size > 0 && array[size - 1] == 0) { size--; } if (size == 0) { *sum_accel = 0.0; *abserr = 0.0; w->sum_plain = 0.0; w->terms_used = 0; return GSL_SUCCESS; } else if (size == 1) { *sum_accel = array[0]; *abserr = 0.0; w->sum_plain = array[0]; w->terms_used = 1; return GSL_SUCCESS; } else { const double SMALL = 0.01; const size_t nmax = GSL_MAX (max_terms, array_size) - 1; double noise_n = 0.0, noise_nm1 = 0.0; double trunc_n = 0.0, trunc_nm1 = 0.0; double actual_trunc_n = 0.0, actual_trunc_nm1 = 0.0; double result_n = 0.0, result_nm1 = 0.0; double variance = 0; size_t n; unsigned int i; int better = 0; int before = 0; int converging = 0; double least_trunc = GSL_DBL_MAX; double least_trunc_noise = GSL_DBL_MAX; double least_trunc_result; /* Calculate specified minimum number of terms. No convergence tests are made, and no truncation information is stored. */ for (n = 0; n < min_terms; n++) { const double t = array[n]; result_nm1 = result_n; gsl_sum_levin_u_step (t, n, nmax, w, &result_n); } least_trunc_result = result_n; variance = 0; for (i = 0; i < n; i++) { double dn = w->dsum[i] * GSL_MACH_EPS * array[i]; variance += dn * dn; } noise_n = sqrt (variance); /* Calculate up to maximum number of terms. Check truncation condition. */ for (; n <= nmax; n++) { const double t = array[n]; result_nm1 = result_n; gsl_sum_levin_u_step (t, n, nmax, w, &result_n); /* Compute the truncation error directly */ actual_trunc_nm1 = actual_trunc_n; actual_trunc_n = fabs (result_n - result_nm1); /* Average results to make a more reliable estimate of the real truncation error */ trunc_nm1 = trunc_n; trunc_n = 0.5 * (actual_trunc_n + actual_trunc_nm1); noise_nm1 = noise_n; variance = 0; for (i = 0; i <= n; i++) { double dn = w->dsum[i] * GSL_MACH_EPS * array[i]; variance += dn * dn; } noise_n = sqrt (variance); /* Determine if we are in the convergence region. */ better = (trunc_n < trunc_nm1 || trunc_n < SMALL * fabs (result_n)); converging = converging || (better && before); before = better; if (converging) { if (trunc_n < least_trunc) { /* Found a low truncation point in the convergence region. Save it. */ least_trunc_result = result_n; least_trunc = trunc_n; least_trunc_noise = noise_n; } if (noise_n > trunc_n / 3.0) break; if (trunc_n < 10.0 * GSL_MACH_EPS * fabs (result_n)) break; } } if (converging) { /* Stopped in the convergence region. Return result and error estimate. */ *sum_accel = least_trunc_result; *abserr = GSL_MAX_DBL (least_trunc, least_trunc_noise); w->terms_used = n; return GSL_SUCCESS; } else { /* Never reached the convergence region. Use the last calculated values. */ *sum_accel = result_n; *abserr = GSL_MAX_DBL (trunc_n, noise_n); w->terms_used = n; return GSL_SUCCESS; } } } int gsl_sum_levin_u_step (const double term, const size_t n, const size_t nmax, gsl_sum_levin_u_workspace * w, double *sum_accel) { #define I(i,j) ((i)*(nmax+1) + (j)) if (n == 0) { *sum_accel = term; w->sum_plain = term; w->q_den[0] = 1.0 / term; w->q_num[0] = 1.0; w->dq_den[I (0, 0)] = -1.0 / (term * term); w->dq_num[I (0, 0)] = 0.0; w->dsum[0] = 1.0; return GSL_SUCCESS; } else { double result; double factor = 1.0; double ratio = (double) n / (n + 1.0); unsigned int i; int j; w->sum_plain += term; w->q_den[n] = 1.0 / (term * (n + 1.0) * (n + 1.0)); w->q_num[n] = w->sum_plain * w->q_den[n]; for (i = 0; i < n; i++) { w->dq_den[I (i, n)] = 0; w->dq_num[I (i, n)] = w->q_den[n]; } w->dq_den[I (n, n)] = -w->q_den[n] / term; w->dq_num[I (n, n)] = w->q_den[n] + w->sum_plain * (w->dq_den[I (n, n)]); for (j = n - 1; j >= 0; j--) { double c = factor * (j + 1) / (n + 1); factor *= ratio; w->q_den[j] = w->q_den[j + 1] - c * w->q_den[j]; w->q_num[j] = w->q_num[j + 1] - c * w->q_num[j]; for (i = 0; i < n; i++) { w->dq_den[I (i, j)] = w->dq_den[I (i, j + 1)] - c * w->dq_den[I (i, j)]; w->dq_num[I (i, j)] = w->dq_num[I (i, j + 1)] - c * w->dq_num[I (i, j)]; } w->dq_den[I (n, j)] = w->dq_den[I (n, j + 1)]; w->dq_num[I (n, j)] = w->dq_num[I (n, j + 1)]; } result = w->q_num[0] / w->q_den[0]; *sum_accel = result; for (i = 0; i <= n; i++) { w->dsum[i] = (w->dq_num[I (i, 0)] - result * w->dq_den[I (i, 0)]) / w->q_den[0]; } return GSL_SUCCESS; } } gsl/sum/levin_utrunc.c0000644000175000017500000001355013536674414013423 0ustar eddedd/* sum/levin_utrunc.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include int gsl_sum_levin_utrunc_accel (const double *array, const size_t array_size, gsl_sum_levin_utrunc_workspace * w, double *sum_accel, double *abserr_trunc) { return gsl_sum_levin_utrunc_minmax (array, array_size, 0, array_size - 1, w, sum_accel, abserr_trunc); } int gsl_sum_levin_utrunc_minmax (const double *array, const size_t array_size, const size_t min_terms, const size_t max_terms, gsl_sum_levin_utrunc_workspace * w, double *sum_accel, double *abserr_trunc) { if (array_size == 0) { *sum_accel = 0.0; *abserr_trunc = 0.0; w->sum_plain = 0.0; w->terms_used = 0; return GSL_SUCCESS; } else if (array_size == 1) { *sum_accel = array[0]; *abserr_trunc = GSL_POSINF; w->sum_plain = array[0]; w->terms_used = 1; return GSL_SUCCESS; } else { const double SMALL = 0.01; const size_t nmax = GSL_MAX (max_terms, array_size) - 1; double trunc_n = 0.0, trunc_nm1 = 0.0; double actual_trunc_n = 0.0, actual_trunc_nm1 = 0.0; double result_n = 0.0, result_nm1 = 0.0; size_t n; int better = 0; int before = 0; int converging = 0; double least_trunc = GSL_DBL_MAX; double result_least_trunc; /* Calculate specified minimum number of terms. No convergence tests are made, and no truncation information is stored. */ for (n = 0; n < min_terms; n++) { const double t = array[n]; result_nm1 = result_n; gsl_sum_levin_utrunc_step (t, n, w, &result_n); } /* Assume the result after the minimum calculation is the best. */ result_least_trunc = result_n; /* Calculate up to maximum number of terms. Check truncation condition. */ for (; n <= nmax; n++) { const double t = array[n]; result_nm1 = result_n; gsl_sum_levin_utrunc_step (t, n, w, &result_n); /* Compute the truncation error directly */ actual_trunc_nm1 = actual_trunc_n; actual_trunc_n = fabs (result_n - result_nm1); /* Average results to make a more reliable estimate of the real truncation error */ trunc_nm1 = trunc_n; trunc_n = 0.5 * (actual_trunc_n + actual_trunc_nm1); /* Determine if we are in the convergence region. */ better = (trunc_n < trunc_nm1 || trunc_n < SMALL * fabs (result_n)); converging = converging || (better && before); before = better; if (converging) { if (trunc_n < least_trunc) { /* Found a low truncation point in the convergence region. Save it. */ least_trunc = trunc_n; result_least_trunc = result_n; } if (fabs (trunc_n / result_n) < 10.0 * GSL_MACH_EPS) break; } } if (converging) { /* Stopped in the convergence region. Return result and error estimate. */ *sum_accel = result_least_trunc; *abserr_trunc = least_trunc; w->terms_used = n; return GSL_SUCCESS; } else { /* Never reached the convergence region. Use the last calculated values. */ *sum_accel = result_n; *abserr_trunc = trunc_n; w->terms_used = n; return GSL_SUCCESS; } } } int gsl_sum_levin_utrunc_step (const double term, const size_t n, gsl_sum_levin_utrunc_workspace * w, double *sum_accel) { if (term == 0.0) { /* This is actually harmless when treated in this way. A term which is exactly zero is simply ignored; the state is not changed. We return GSL_EZERODIV as an indicator that this occured. */ return GSL_EZERODIV; } else if (n == 0) { *sum_accel = term; w->sum_plain = term; w->q_den[0] = 1.0 / term; w->q_num[0] = 1.0; return GSL_SUCCESS; } else { double factor = 1.0; double ratio = (double) n / (n + 1.0); int j; w->sum_plain += term; w->q_den[n] = 1.0 / (term * (n + 1.0) * (n + 1.0)); w->q_num[n] = w->sum_plain * w->q_den[n]; for (j = n - 1; j >= 0; j--) { double c = factor * (j + 1) / (n + 1); factor *= ratio; w->q_den[j] = w->q_den[j + 1] - c * w->q_den[j]; w->q_num[j] = w->q_num[j + 1] - c * w->q_num[j]; } *sum_accel = w->q_num[0] / w->q_den[0]; return GSL_SUCCESS; } } gsl/sum/work_utrunc.c0000644000175000017500000000272713536674414013274 0ustar eddedd#include #include #include #include gsl_sum_levin_utrunc_workspace * gsl_sum_levin_utrunc_alloc (size_t n) { gsl_sum_levin_utrunc_workspace * w; if (n == 0) { GSL_ERROR_VAL ("length n must be positive integer", GSL_EDOM, 0); } w = (gsl_sum_levin_utrunc_workspace *) malloc(sizeof(gsl_sum_levin_utrunc_workspace)); if (w == NULL) { GSL_ERROR_VAL ("failed to allocate struct", GSL_ENOMEM, 0); } w->q_num = (double *) malloc (n * sizeof (double)); if (w->q_num == NULL) { free(w) ; /* error in constructor, prevent memory leak */ GSL_ERROR_VAL ("failed to allocate space for q_num", GSL_ENOMEM, 0); } w->q_den = (double *) malloc (n * sizeof (double)); if (w->q_den == NULL) { free (w->q_num); free (w) ; /* error in constructor, prevent memory leak */ GSL_ERROR_VAL ("failed to allocate space for q_den", GSL_ENOMEM, 0); } w->dsum = (double *) malloc (n * sizeof (double)); if (w->dsum == NULL) { free (w->q_den); free (w->q_num); free (w) ; /* error in constructor, prevent memory leak */ GSL_ERROR_VAL ("failed to allocate space for dsum", GSL_ENOMEM, 0); } w->size = n; w->terms_used = 0; w->sum_plain = 0; return w; } void gsl_sum_levin_utrunc_free (gsl_sum_levin_utrunc_workspace * w) { RETURN_IF_NULL (w); free (w->dsum); free (w->q_den); free (w->q_num); free (w); } gsl/sum/test.c0000644000175000017500000001225113536674414011662 0ustar eddedd/* sum/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Author: G. Jungman */ #include #include #include #include #include #include #include #define N 50 void check_trunc (double * t, double expected, const char * desc); void check_full (double * t, double expected, const char * desc); int main (void) { gsl_ieee_env_setup (); { double t[N]; int n; const double zeta_2 = M_PI * M_PI / 6.0; /* terms for zeta(2) */ for (n = 0; n < N; n++) { double np1 = n + 1.0; t[n] = 1.0 / (np1 * np1); } check_trunc (t, zeta_2, "zeta(2)"); check_full (t, zeta_2, "zeta(2)"); } { double t[N]; double x, y; int n; /* terms for exp(10.0) */ x = 10.0; y = exp(x); t[0] = 1.0; for (n = 1; n < N; n++) { t[n] = t[n - 1] * (x / n); } check_trunc (t, y, "exp(10)"); check_full (t, y, "exp(10)"); } { double t[N]; double x, y; int n; /* terms for exp(-10.0) */ x = -10.0; y = exp(x); t[0] = 1.0; for (n = 1; n < N; n++) { t[n] = t[n - 1] * (x / n); } check_trunc (t, y, "exp(-10)"); check_full (t, y, "exp(-10)"); } { double t[N]; double x, y; int n; /* terms for -log(1-x) */ x = 0.5; y = -log(1-x); t[0] = x; for (n = 1; n < N; n++) { t[n] = t[n - 1] * (x * n) / (n + 1.0); } check_trunc (t, y, "-log(1/2)"); check_full (t, y, "-log(1/2)"); } { double t[N]; double x, y; int n; /* terms for -log(1-x) */ x = -1.0; y = -log(1-x); t[0] = x; for (n = 1; n < N; n++) { t[n] = t[n - 1] * (x * n) / (n + 1.0); } check_trunc (t, y, "-log(2)"); check_full (t, y, "-log(2)"); } { double t[N]; int n; double result = 0.192594048773; /* terms for an alternating asymptotic series */ t[0] = 3.0 / (M_PI * M_PI); for (n = 1; n < N; n++) { t[n] = -t[n - 1] * (4.0 * (n + 1.0) - 1.0) / (M_PI * M_PI); } check_trunc (t, result, "asymptotic series"); check_full (t, result, "asymptotic series"); } { double t[N]; int n; /* Euler's gamma from GNU Calc (precision = 32) */ double result = 0.5772156649015328606065120900824; /* terms for Euler's gamma */ t[0] = 1.0; for (n = 1; n < N; n++) { t[n] = 1/(n+1.0) + log(n/(n+1.0)); } check_trunc (t, result, "Euler's constant"); check_full (t, result, "Euler's constant"); } { double t[N]; int n; /* eta(1/2) = sum_{k=1}^{\infty} (-1)^(k+1) / sqrt(k) From Levin, Intern. J. Computer Math. B3:371--388, 1973. I=(1-sqrt(2))zeta(1/2) =(2/sqrt(pi))*integ(1/(exp(x^2)+1),x,0,inf) */ double result = 0.6048986434216305; /* approx */ /* terms for eta(1/2) */ for (n = 0; n < N; n++) { t[n] = (n%2 ? -1 : 1) * 1.0 /sqrt(n + 1.0); } check_trunc (t, result, "eta(1/2)"); check_full (t, result, "eta(1/2)"); } { double t[N]; int n; double result = 1.23; for (n = 0; n < N; n++) { t[n] = (n == 0) ? 1.23 : 0.0; } check_trunc (t, result, "1.23 + 0 + 0 + 0..."); check_full (t, result, "1.23 + 0 + 0 + 0..."); } exit (gsl_test_summary ()); } void check_trunc (double * t, double expected, const char * desc) { double sum_accel, prec; gsl_sum_levin_utrunc_workspace * w = gsl_sum_levin_utrunc_alloc (N); gsl_sum_levin_utrunc_accel (t, N, w, &sum_accel, &prec); gsl_test_rel (sum_accel, expected, 1e-8, "trunc result, %s", desc); /* No need to check precision for truncated result since this is not a meaningful number */ gsl_sum_levin_utrunc_free (w); } void check_full (double * t, double expected, const char * desc) { double sum_accel, err_est, sd_actual, sd_est; gsl_sum_levin_u_workspace * w = gsl_sum_levin_u_alloc (N); gsl_sum_levin_u_accel (t, N, w, &sum_accel, &err_est); gsl_test_rel (sum_accel, expected, 1e-8, "full result, %s", desc); sd_est = -log10 (err_est/fabs(sum_accel) + GSL_DBL_EPSILON); sd_actual = -log10 (DBL_EPSILON + fabs ((sum_accel - expected)/expected)); /* Allow one digit of slop */ gsl_test (sd_est > sd_actual + 1.0, "full significant digits, %s (%g vs %g)", desc, sd_est, sd_actual); gsl_sum_levin_u_free (w); } gsl/README0000644000175000017500000000501413536674414010612 0ustar eddeddGSL - GNU Scientific Library ============================ This is GSL, the GNU Scientific Library, a collection of numerical routines for scientific computing. GSL is free software, you can redistribute it and/or modify it under the terms of the GNU General Public License. The GNU General Public License does not permit this software to be redistributed in proprietary programs. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Availability ============ The current stable version of GSL is always available from ftp.gnu.org in the directory /pub/gnu/gsl. A list of mirror sites can be found at http://www.gnu.org/order/ftp.html Installation ============ GSL follows the standard GNU installation procedure. Please consult the INSTALL file in this distribution for more detailed instructions. For information about specific platforms and compilers see the "Compilation Notes" section in the INSTALL file. More information about GSL ========================== The project homepage is http://www.gnu.org/software/gsl/ See the NEWS file for recent changes to the library. The GSL Manual has been published and can be ordered from most bookstores. The publication details are, GNU Scientific Library Reference Manual - Revised Second Edition, M. Galassi et al, ISBN 0954161734 (620 pages, paperback). The money raised from sales of the manual helps support the development of GSL. A Japanese translation of the reference manual is available from the GSL website above (thanks to Daisuke TOMINAGA). Reporting Bugs ============== A list of known bugs can be found in the BUGS file. Details of compilation problems can be found in the INSTALL file. If you find a bug which is not listed in these files please report it to bug-gsl@gnu.org. All bug reports should include: The version number of GSL, and where you obtained it. The hardware and operating system The compiler used, including version number and compilation options A description of the bug behaviour A short program which reproducibly exercises the bug It is useful if you can check whether the same problem occurs when the library is compiled without optimization. Thank you. Any errors or omissions in the manual can also be reported to the same address. Contributing to GSL =================== If you are interested in participating in GSL development, please see the webpage at http://www.gnu.org/software/gsl/ gsl/utils/0000755000175000017500000000000014057135461011063 5ustar eddeddgsl/utils/Makefile.in0000664000175000017500000004715614057135461013147 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = utils ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libutils_la_DEPENDENCIES = @LIBOBJS@ am_libutils_la_OBJECTS = placeholder.lo libutils_la_OBJECTS = $(am_libutils_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = $(DEPDIR)/memcpy.Po $(DEPDIR)/memmove.Po \ $(DEPDIR)/strdup.Po $(DEPDIR)/strtol.Po $(DEPDIR)/strtoul.Po \ ./$(DEPDIR)/placeholder.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libutils_la_SOURCES) DIST_SOURCES = $(libutils_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs README memcpy.c memmove.c strdup.c \ strtol.c strtoul.c DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libutils.la # Don't need to list alloca.c, etc., Automake includes them. libutils_la_SOURCES = system.h placeholder.c libutils_la_LIBADD = @LIBOBJS@ EXTRA_DIST = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu utils/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu utils/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libutils.la: $(libutils_la_OBJECTS) $(libutils_la_DEPENDENCIES) $(EXTRA_libutils_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libutils_la_OBJECTS) $(libutils_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/memcpy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/memmove.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strdup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoul.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/placeholder.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f $(DEPDIR)/memcpy.Po -rm -f $(DEPDIR)/memmove.Po -rm -f $(DEPDIR)/strdup.Po -rm -f $(DEPDIR)/strtol.Po -rm -f $(DEPDIR)/strtoul.Po -rm -f ./$(DEPDIR)/placeholder.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(DEPDIR)/memcpy.Po -rm -f $(DEPDIR)/memmove.Po -rm -f $(DEPDIR)/strdup.Po -rm -f $(DEPDIR)/strtol.Po -rm -f $(DEPDIR)/strtoul.Po -rm -f ./$(DEPDIR)/placeholder.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/utils/strtoul.c0000644000175000017500000000155513536674414012760 0ustar eddedd/* Copyright (C) 1991 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02110-1301, USA. */ #define UNSIGNED 1 #include gsl/utils/memmove.c0000644000175000017500000000133113536674414012701 0ustar eddedd/* memmove.c -- copy memory. Copy LENGTH bytes from SOURCE to DEST. Does not null-terminate. In the public domain. By David MacKenzie . */ #if HAVE_CONFIG_H #include #endif void * memmove (destaddr, sourceaddr, length) void *destaddr; const void *sourceaddr; unsigned length; { char *dest = destaddr; const char *source = sourceaddr; if (source < dest) /* Moving from low mem to hi mem; start at end. */ for (source += length, dest += length; length; --length) *--dest = *--source; else if (source != dest) /* Moving from hi mem to low mem; start at beginning. */ for (; length; --length) *dest++ = *source++; return destaddr; } gsl/utils/Makefile.am0000644000175000017500000000030113536674414013120 0ustar eddeddnoinst_LTLIBRARIES = libutils.la # Don't need to list alloca.c, etc., Automake includes them. libutils_la_SOURCES = system.h placeholder.c libutils_la_LIBADD = @LIBOBJS@ EXTRA_DIST = README gsl/utils/system.h0000644000175000017500000000463313536674414012575 0ustar eddedd/* system.h: System-dependent declarations. Include this first. $Id$ Copyright (C) 1997 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef TEXINFO_SYSTEM_H #define TEXINFO_SYSTEM_H #define _GNU_SOURCE #include /* should be included before any preprocessor test of _POSIX_VERSION. */ #if HAVE_UNISTD_H #include #endif /* HAVE_UNISTD_H */ #include #include #include #if HAVE_LOCALE_H #include #endif #include /* Don't use bcopy! Use memmove if source and destination may overlap, memcpy otherwise. */ #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #else # include char *memchr (); #endif #ifdef STDC_HEADERS #define getopt system_getopt #include #undef getopt #else extern char *getenv (); #endif #ifndef HAVE_STRERROR extern char *strerror (); #endif #include #ifndef errno extern int errno; #endif #ifdef VMS #include #endif #include #if HAVE_SYS_FILE_H #include #endif /* HAVE_SYS_FILE_H */ #ifndef O_RDONLY /* Since is POSIX, prefer that to . This also avoids some useless warnings on (at least) Linux. */ #if HAVE_FCNTL_H #include #else /* not HAVE_FCNTL_H */ #if HAVE_SYS_FCNTL_H #include #endif /* not HAVE_SYS_FCNTL_H */ #endif /* not HAVE_FCNTL_H */ #endif /* not O_RDONLY */ #if HAVE_PWD_H #include #endif /* Some systems don't declare this function in pwd.h. */ struct passwd *getpwnam (); /* Our library routines not included in any system library. */ extern void *xmalloc (), *xrealloc (); extern char *xstrdup (); #endif /* TEXINFO_SYSTEM_H */ gsl/utils/strtol.c0000644000175000017500000000744413536674414012576 0ustar eddedd/* Copyright (C) 1991, 1992, 1994 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02110-1301, USA. */ #include #include #include #include #include #ifndef UNSIGNED #define UNSIGNED 0 #endif /* Convert NPTR to an `unsigned long int' or `long int' in base BASE. If BASE is 0 the base is determined by the presence of a leading zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal. If BASE is < 2 or > 36, it is reset to 10. If ENDPTR is not NULL, a pointer to the character after the last one converted is stored in *ENDPTR. */ #if UNSIGNED unsigned long int #define strtol strtoul #else long int #endif strtol (nptr, endptr, base) const char *nptr; char **endptr; int base; { int negative; register unsigned long int cutoff; register unsigned int cutlim; register unsigned long int i; register const char *s; register unsigned char c; const char *save; int overflow; if (base < 0 || base == 1 || base > 36) base = 10; s = nptr; /* Skip white space. */ while (isspace (*s)) ++s; if (*s == '\0') goto noconv; /* Check for a sign. */ if (*s == '-') { negative = 1; ++s; } else if (*s == '+') { negative = 0; ++s; } else negative = 0; if (base == 16 && s[0] == '0' && toupper (s[1]) == 'X') s += 2; /* If BASE is zero, figure it out ourselves. */ if (base == 0) if (*s == '0') { if (toupper (s[1]) == 'X') { s += 2; base = 16; } else base = 8; } else base = 10; /* Save the pointer so we can check later if anything happened. */ save = s; cutoff = ULONG_MAX / (unsigned long int) base; cutlim = ULONG_MAX % (unsigned long int) base; overflow = 0; i = 0; for (c = *s; c != '\0'; c = *++s) { if (isdigit (c)) c -= '0'; else if (isalpha (c)) c = toupper (c) - 'A' + 10; else break; if (c >= base) break; /* Check for overflow. */ if (i > cutoff || (i == cutoff && c > cutlim)) overflow = 1; else { i *= (unsigned long int) base; i += c; } } /* Check if anything actually happened. */ if (s == save) goto noconv; /* Store in ENDPTR the address of one character past the last character we converted. */ if (endptr != NULL) *endptr = (char *) s; #if !UNSIGNED /* Check for a value that is within the range of `unsigned long int', but outside the range of `long int'. */ if (i > (negative ? -(unsigned long int) LONG_MIN : (unsigned long int) LONG_MAX)) overflow = 1; #endif if (overflow) { errno = ERANGE; #if UNSIGNED return ULONG_MAX; #else return negative ? LONG_MIN : LONG_MAX; #endif } /* Return the result of the appropriate sign. */ return (negative ? -i : i); noconv: /* There was no number to convert. */ if (endptr != NULL) *endptr = (char *) nptr; return 0L; } gsl/utils/placeholder.c0000644000175000017500000000014013536674414013513 0ustar eddeddvoid gsl_utils_placeholder (void); void gsl_utils_placeholder (void) { int i = 0; i++ ; } gsl/utils/strdup.c0000644000175000017500000000226713536674414012566 0ustar eddedd/* strdup.c -- return a newly allocated copy of a string Copyright (C) 1990 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #if HAVE_CONFIG_H #include #endif #ifdef STDC_HEADERS #include #include #else char *malloc (); char *strcpy (); #endif /* Return a newly allocated copy of STR, or 0 if out of memory. */ char * strdup (str) const char *str; { char *newstr; newstr = (char *) malloc (strlen (str) + 1); if (newstr) strcpy (newstr, str); return newstr; } gsl/utils/README0000644000175000017500000000027013536674414011751 0ustar eddeddSome common routines. These were taken from the lib directory of Texinfo-3.11. Many are common to other GNU packages as well. (On the FSF machines, check /gd/gnu/lib for the latest.) gsl/utils/memcpy.c0000644000175000017500000000065013536674414012531 0ustar eddedd/* Copy LEN bytes starting at SRCADDR to DESTADDR. Result undefined if the source overlaps with the destination. Return DESTADDR. */ #if HAVE_CONFIG_H #include #endif void * memcpy (destaddr, srcaddr, len) void *destaddr; const void *srcaddr; unsigned int len; { char *dest = (char *) destaddr; const char *src = srcaddr; while (len-- > 0) *dest++ = *src++; return destaddr; } gsl/siman/0000755000175000017500000000000014057135461011032 5ustar eddeddgsl/siman/Makefile.in0000664000175000017500000010756614057135461013120 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) noinst_PROGRAMS = siman_tsp$(EXEEXT) subdir = siman ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) LTLIBRARIES = $(noinst_LTLIBRARIES) libgslsiman_la_LIBADD = am_libgslsiman_la_OBJECTS = siman.lo libgslsiman_la_OBJECTS = $(am_libgslsiman_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_siman_tsp_OBJECTS = siman_tsp.$(OBJEXT) siman_tsp_OBJECTS = $(am_siman_tsp_OBJECTS) siman_tsp_DEPENDENCIES = libgslsiman.la ../rng/libgslrng.la \ ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ ../sys/libgslsys.la ../utils/libutils.la am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslsiman.la ../rng/libgslrng.la \ ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/siman.Plo ./$(DEPDIR)/siman_tsp.Po \ ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslsiman_la_SOURCES) $(siman_tsp_SOURCES) \ $(test_SOURCES) DIST_SOURCES = $(libgslsiman_la_SOURCES) $(siman_tsp_SOURCES) \ $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslsiman.la TESTS = $(check_PROGRAMS) EXTRA_DIST = siman_test_driver.sh test_SOURCES = test.c test_LDADD = libgslsiman.la ../rng/libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la siman_tsp_SOURCES = siman_tsp.c siman_tsp_LDADD = libgslsiman.la ../rng/libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../sys/libgslsys.la ../utils/libutils.la CLEANFILES = siman_test.out libgslsiman_la_SOURCES = siman.c pkginclude_HEADERS = gsl_siman.h AM_CPPFLAGS = -I$(top_srcdir) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu siman/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu siman/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslsiman.la: $(libgslsiman_la_OBJECTS) $(libgslsiman_la_DEPENDENCIES) $(EXTRA_libgslsiman_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslsiman_la_OBJECTS) $(libgslsiman_la_LIBADD) $(LIBS) siman_tsp$(EXEEXT): $(siman_tsp_OBJECTS) $(siman_tsp_DEPENDENCIES) $(EXTRA_siman_tsp_DEPENDENCIES) @rm -f siman_tsp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(siman_tsp_OBJECTS) $(siman_tsp_LDADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/siman.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/siman_tsp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/siman.Plo -rm -f ./$(DEPDIR)/siman_tsp.Po -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/siman.Plo -rm -f ./$(DEPDIR)/siman_tsp.Po -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES clean-noinstPROGRAMS cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkgincludeHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am recheck tags tags-am uninstall \ uninstall-am uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/siman/gsl_siman.h0000644000175000017500000000571213536674414013173 0ustar eddedd/* siman/gsl_siman.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Mark Galassi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_SIMAN_H__ #define __GSL_SIMAN_H__ #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* types for the function pointers passed to gsl_siman_solve */ typedef double (*gsl_siman_Efunc_t) (void *xp); typedef void (*gsl_siman_step_t) (const gsl_rng *r, void *xp, double step_size); typedef double (*gsl_siman_metric_t) (void *xp, void *yp); typedef void (*gsl_siman_print_t) (void *xp); typedef void (*gsl_siman_copy_t) (void *source, void *dest); typedef void * (*gsl_siman_copy_construct_t) (void *xp); typedef void (*gsl_siman_destroy_t) (void *xp); /* this structure contains all the information needed to structure the search, beyond the energy function, the step function and the initial guess. */ typedef struct { int n_tries; /* how many points to try for each step */ int iters_fixed_T; /* how many iterations at each temperature? */ double step_size; /* max step size in the random walk */ /* the following parameters are for the Boltzmann distribution */ double k, t_initial, mu_t, t_min; } gsl_siman_params_t; /* prototype for the workhorse function */ void gsl_siman_solve(const gsl_rng * r, void *x0_p, gsl_siman_Efunc_t Ef, gsl_siman_step_t take_step, gsl_siman_metric_t distance, gsl_siman_print_t print_position, gsl_siman_copy_t copyfunc, gsl_siman_copy_construct_t copy_constructor, gsl_siman_destroy_t destructor, size_t element_size, gsl_siman_params_t params); void gsl_siman_solve_many (const gsl_rng * r, void *x0_p, gsl_siman_Efunc_t Ef, gsl_siman_step_t take_step, gsl_siman_metric_t distance, gsl_siman_print_t print_position, size_t element_size, gsl_siman_params_t params); __END_DECLS #endif /* __GSL_SIMAN_H__ */ gsl/siman/siman.c0000644000175000017500000001772713536674414012332 0ustar eddedd/* siman/siman.c * * Copyright (C) 2007 Brian Gough * Copyright (C) 1996, 1997, 1998, 1999, 2000 Mark Galassi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include static inline double boltzmann(double E, double new_E, double T, gsl_siman_params_t *params) { double x = -(new_E - E) / (params->k * T); /* avoid underflow errors for large uphill steps */ return (x < GSL_LOG_DBL_MIN) ? 0.0 : exp(x); } static inline void copy_state(void *src, void *dst, size_t size, gsl_siman_copy_t copyfunc) { if (copyfunc) { copyfunc(src, dst); } else { memcpy(dst, src, size); } } /* implementation of a basic simulated annealing algorithm */ void gsl_siman_solve (const gsl_rng * r, void *x0_p, gsl_siman_Efunc_t Ef, gsl_siman_step_t take_step, gsl_siman_metric_t distance, gsl_siman_print_t print_position, gsl_siman_copy_t copyfunc, gsl_siman_copy_construct_t copy_constructor, gsl_siman_destroy_t destructor, size_t element_size, gsl_siman_params_t params) { void *x, *new_x, *best_x; double E, new_E, best_E; int i; double T, T_factor; int n_evals = 1, n_iter = 0, n_accepts, n_rejects, n_eless; /* this function requires that either the dynamic functions (copy, copy_constructor and destrcutor) are passed, or that an element size is given */ assert((copyfunc != NULL && copy_constructor != NULL && destructor != NULL) || (element_size != 0)); distance = 0 ; /* This parameter is not currently used */ E = Ef(x0_p); if (copyfunc) { x = copy_constructor(x0_p); new_x = copy_constructor(x0_p); best_x = copy_constructor(x0_p); } else { x = (void *) malloc (element_size); memcpy (x, x0_p, element_size); new_x = (void *) malloc (element_size); best_x = (void *) malloc (element_size); memcpy (best_x, x0_p, element_size); } best_E = E; T = params.t_initial; T_factor = 1.0 / params.mu_t; if (print_position) { printf ("#-iter #-evals temperature position energy\n"); } while (1) { n_accepts = 0; n_rejects = 0; n_eless = 0; for (i = 0; i < params.iters_fixed_T; ++i) { copy_state(x, new_x, element_size, copyfunc); take_step (r, new_x, params.step_size); new_E = Ef (new_x); if(new_E <= best_E){ if (copyfunc) { copyfunc(new_x,best_x); } else { memcpy (best_x, new_x, element_size); } best_E=new_E; } ++n_evals; /* keep track of Ef() evaluations */ /* now take the crucial step: see if the new point is accepted or not, as determined by the boltzmann probability */ if (new_E < E) { if (new_E < best_E) { copy_state(new_x, best_x, element_size, copyfunc); best_E = new_E; } /* yay! take a step */ copy_state(new_x, x, element_size, copyfunc); E = new_E; ++n_eless; } else if (gsl_rng_uniform(r) < boltzmann(E, new_E, T, ¶ms)) { /* yay! take a step */ copy_state(new_x, x, element_size, copyfunc); E = new_E; ++n_accepts; } else { ++n_rejects; } } if (print_position) { /* see if we need to print stuff as we go */ /* printf("%5d %12g %5d %3d %3d %3d", n_iter, T, n_evals, */ /* 100*n_eless/n_steps, 100*n_accepts/n_steps, */ /* 100*n_rejects/n_steps); */ printf ("%5d %7d %12g", n_iter, n_evals, T); print_position (x); printf (" %12g %12g\n", E, best_E); } /* apply the cooling schedule to the temperature */ /* FIXME: I should also introduce a cooling schedule for the iters */ T *= T_factor; ++n_iter; if (T < params.t_min) { break; } } /* at the end, copy the result onto the initial point, so we pass it back to the caller */ copy_state(best_x, x0_p, element_size, copyfunc); if (copyfunc) { destructor(x); destructor(new_x); destructor(best_x); } else { free (x); free (new_x); free (best_x); } } /* implementation of a simulated annealing algorithm with many tries */ void gsl_siman_solve_many (const gsl_rng * r, void *x0_p, gsl_siman_Efunc_t Ef, gsl_siman_step_t take_step, gsl_siman_metric_t distance, gsl_siman_print_t print_position, size_t element_size, gsl_siman_params_t params) { /* the new set of trial points, and their energies and probabilities */ void *x, *new_x; double *energies, *probs, *sum_probs; double Ex; /* energy of the chosen point */ double T, T_factor; /* the temperature and a step multiplier */ int i; double u; /* throw the die to choose a new "x" */ int n_iter; if (print_position) { printf ("#-iter temperature position"); printf (" delta_pos energy\n"); } x = (void *) malloc (params.n_tries * element_size); new_x = (void *) malloc (params.n_tries * element_size); energies = (double *) malloc (params.n_tries * sizeof (double)); probs = (double *) malloc (params.n_tries * sizeof (double)); sum_probs = (double *) malloc (params.n_tries * sizeof (double)); T = params.t_initial; T_factor = 1.0 / params.mu_t; memcpy (x, x0_p, element_size); n_iter = 0; while (1) { Ex = Ef (x); for (i = 0; i < params.n_tries - 1; ++i) { /* only go to N_TRIES-2 */ /* center the new_x[] around x, then pass it to take_step() */ sum_probs[i] = 0; memcpy ((char *)new_x + i * element_size, x, element_size); take_step (r, (char *)new_x + i * element_size, params.step_size); energies[i] = Ef ((char *)new_x + i * element_size); probs[i] = boltzmann(Ex, energies[i], T, ¶ms); } /* now add in the old value of "x", so it is a contendor */ memcpy ((char *)new_x + (params.n_tries - 1) * element_size, x, element_size); energies[params.n_tries - 1] = Ex; probs[params.n_tries - 1] = boltzmann(Ex, energies[i], T, ¶ms); /* now throw biased die to see which new_x[i] we choose */ sum_probs[0] = probs[0]; for (i = 1; i < params.n_tries; ++i) { sum_probs[i] = sum_probs[i - 1] + probs[i]; } u = gsl_rng_uniform (r) * sum_probs[params.n_tries - 1]; for (i = 0; i < params.n_tries; ++i) { if (u < sum_probs[i]) { memcpy (x, (char *) new_x + i * element_size, element_size); break; } } if (print_position) { printf ("%5d\t%12g\t", n_iter, T); print_position (x); printf ("\t%12g\t%12g\n", distance (x, x0_p), Ex); } T *= T_factor; ++n_iter; if (T < params.t_min) { break; } } /* now return the value via x0_p */ memcpy (x0_p, x, element_size); /* printf("the result is: %g (E=%g)\n", x, Ex); */ free (x); free (new_x); free (energies); free (probs); free (sum_probs); } gsl/siman/ChangeLog0000644000175000017500000001105713536674414012617 0ustar eddedd2008-07-03 Brian Gough * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2007-05-30 Brian Gough * siman.c (boltzmann): moved safe_exp into boltzmann (copy_state): put all copying into one function 2006-03-08 Brian Gough * test.c (square): removed inline since it causes problems with some compilers 2005-11-14 Brian Gough * siman.c (safe_exp): added a safe_exp function to avoid underflow for large uphill steps 2003-03-31 Brian Gough * siman.c (gsl_siman_solve): avoid reevaluation for best_E (gsl_siman_solve): loop over param.iters_fixed_T not params.n_tries (gsl_siman_solve): initialise energy at start Sat Aug 3 20:32:38 2002 Brian Gough * siman.c (gsl_siman_solve): fix acceptance criterion to match documentation (Peter S. Christopher) Thu Jun 13 20:57:00 2002 Brian Gough * siman.c (gsl_siman_solve): keep track of the best result 2002-02-07 Mark Galassi * siman.c (gsl_siman_solve): bug fix in the destructor for x and new_x which was being called on &x and &new_x instead of x and new_x; thanks to Karsten Howes Thu Jul 12 21:50:07 2001 Brian Gough * gsl_siman.h: changed renamed gsl_Efunc_t to gsl_siman_Efunc_t, in accordance with namespace conventions 2000-12-15 Mark Galassi * siman.c (gsl_siman_solve): reversed a small change I had made earlier and went back to taking Boltzmann-conditional steps when the new energy is equal to the previous one. This allows you to move around if you are stuck on a plateau. * gsl_siman.h, siman.c, siman_test.c, siman_tsp.c, test.c: changed the siman_solve API to allow for more general search spaces. The problem was that we assumed that points in the search space were data structures that were allocated in continguous memory, so they could not be linked structures. I replaced the malloc(), memcpy() and free() calls with copy_constructor(), copyfunc() and copy_destructor() functions. The user passes these functions, which means that siman_solve() now takes three more arguments of type gsl_siman_copy_t, gsl_siman_copy_construct_t and gsl_siman_destroy_t. If these arguments are NULL (and all three of them have to be NULL together), the traditional memcpy() approach is used. 1999-02-14 Mark Galassi * minor fixes. Tue Nov 17 17:22:14 1998 Brian Gough * added #include to all top-level source files Sun Nov 8 20:40:28 1998 Brian Gough * siman_tsp.c: clean up for make strict 1998-11-06 * test.c: added prototype for memcpy using #include * siman_test.c: added prototype for memcpy using #include Wed Oct 28 15:06:58 1998 Brian Gough * siman.c: added #include for memcpy Thu Aug 20 12:22:28 1998 Brian Gough * siman.c: use (char *) judiciously to avoid warnings about void pointer arithmetic (see randist/shuffle.c for similar examples) * siman_test.c: perform several tests, using the exact answer as the comparison value, rather than checking for stationarity. Sun Jun 28 14:11:04 1998 Brian Gough * Converted to work with rng-style random number generators * gsl_siman.h: gsl_siman_step_t type functions now take a gsl_rng random number generator as their first argument * siman.c (gsl_siman_solve): Now takes a gsl_rng random number generator as the first argument Fri Jun 19 11:17:24 1998 Brian Gough * siman.c (gsl_siman_solve_many): changed the variable 'throw' to 'u' (for uniform-random-number) so that we can compile with c++ where throw is a reserved word. Sat May 23 13:59:55 1998 Brian Gough * siman.c: made the solving functions deterministic by removing the random seed, gsl_ran_seed(time(0L)). When the function is non-deterministic it is hard to debug and test (about 1 time in 20 the test would fail due to the randomness). We can let the user do the seeding if they need that. 1998-02-09 Mark Galassi * siman_test_driver.sh (LAST_ENERGY): fixed a typo; the tests now report well when they converge. 1998-01-30 Mark Galassi * siman_test_driver.sh, Makefile.am (TESTS): added a test driver so that now "make check" does something interesting. gsl/siman/Makefile.am0000644000175000017500000000127513536674414013102 0ustar eddedd## Process this file with automake to produce Makefile.in check_PROGRAMS = test noinst_PROGRAMS = siman_tsp noinst_LTLIBRARIES = libgslsiman.la TESTS = $(check_PROGRAMS) EXTRA_DIST = siman_test_driver.sh test_SOURCES = test.c test_LDADD = libgslsiman.la ../rng/libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la siman_tsp_SOURCES = siman_tsp.c siman_tsp_LDADD = libgslsiman.la ../rng/libgslrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../sys/libgslsys.la ../utils/libutils.la CLEANFILES = siman_test.out libgslsiman_la_SOURCES = siman.c pkginclude_HEADERS = gsl_siman.h AM_CPPFLAGS = -I$(top_srcdir) gsl/siman/siman_tsp.c0000644000175000017500000002242313536674414013205 0ustar eddedd/* siman/siman_tsp.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Mark Galassi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include /* set up parameters for this simulated annealing run */ #define N_TRIES 200 /* how many points do we try before stepping */ #define ITERS_FIXED_T 2000 /* how many iterations for each T? */ #define STEP_SIZE 1.0 /* max step size in random walk */ #define K 1.0 /* Boltzmann constant */ #define T_INITIAL 5000.0 /* initial temperature */ #define MU_T 1.002 /* damping factor for temperature */ #define T_MIN 5.0e-1 gsl_siman_params_t params = {N_TRIES, ITERS_FIXED_T, STEP_SIZE, K, T_INITIAL, MU_T, T_MIN}; struct s_tsp_city { const char * name; double lat, longitude; /* coordinates */ }; typedef struct s_tsp_city Stsp_city; void prepare_distance_matrix(void); void exhaustive_search(void); void print_distance_matrix(void); double city_distance(Stsp_city c1, Stsp_city c2); double Etsp(void *xp); double Mtsp(void *xp, void *yp); void Stsp(const gsl_rng * r, void *xp, double step_size); void Ptsp(void *xp); /* in this table, latitude and longitude are obtained from the US Census Bureau, at http://www.census.gov/cgi-bin/gazetteer */ Stsp_city cities[] = {{"Santa Fe", 35.68, 105.95}, {"Phoenix", 33.54, 112.07}, {"Albuquerque", 35.12, 106.62}, {"Clovis", 34.41, 103.20}, {"Durango", 37.29, 107.87}, {"Dallas", 32.79, 96.77}, {"Tesuque", 35.77, 105.92}, {"Grants", 35.15, 107.84}, {"Los Alamos", 35.89, 106.28}, {"Las Cruces", 32.34, 106.76}, {"Cortez", 37.35, 108.58}, {"Gallup", 35.52, 108.74}}; #define N_CITIES (sizeof(cities)/sizeof(Stsp_city)) double distance_matrix[N_CITIES][N_CITIES]; /* distance between two cities */ double city_distance(Stsp_city c1, Stsp_city c2) { const double earth_radius = 6375.000; /* 6000KM approximately */ /* sin and cos of lat and long; must convert to radians */ double sla1 = sin(c1.lat*M_PI/180), cla1 = cos(c1.lat*M_PI/180), slo1 = sin(c1.longitude*M_PI/180), clo1 = cos(c1.longitude*M_PI/180); double sla2 = sin(c2.lat*M_PI/180), cla2 = cos(c2.lat*M_PI/180), slo2 = sin(c2.longitude*M_PI/180), clo2 = cos(c2.longitude*M_PI/180); double x1 = cla1*clo1; double x2 = cla2*clo2; double y1 = cla1*slo1; double y2 = cla2*slo2; double z1 = sla1; double z2 = sla2; double dot_product = x1*x2 + y1*y2 + z1*z2; double angle = acos(dot_product); /* distance is the angle (in radians) times the earth radius */ return angle*earth_radius; } /* energy for the travelling salesman problem */ double Etsp(void *xp) { /* an array of N_CITIES integers describing the order */ int *route = (int *) xp; double E = 0; unsigned int i; for (i = 0; i < N_CITIES; ++i) { /* use the distance_matrix to optimize this calculation; it had better be allocated!! */ E += distance_matrix[route[i]][route[(i + 1) % N_CITIES]]; } return E; } double Mtsp(void *xp, void *yp) { int *route1 = (int *) xp, *route2 = (int *) yp; double distance = 0; unsigned int i; for (i = 0; i < N_CITIES; ++i) { distance += ((route1[i] == route2[i]) ? 0 : 1); } return distance; } /* take a step through the TSP space */ void Stsp(const gsl_rng * r, void *xp, double step_size) { int x1, x2, dummy; int *route = (int *) xp; step_size = 0 ; /* prevent warnings about unused parameter */ /* pick the two cities to swap in the matrix; we leave the first city fixed */ x1 = (gsl_rng_get (r) % (N_CITIES-1)) + 1; do { x2 = (gsl_rng_get (r) % (N_CITIES-1)) + 1; } while (x2 == x1); dummy = route[x1]; route[x1] = route[x2]; route[x2] = dummy; } void Ptsp(void *xp) { unsigned int i; int *route = (int *) xp; printf(" ["); for (i = 0; i < N_CITIES; ++i) { printf(" %d ", route[i]); } printf("] "); } int main(void) { int x_initial[N_CITIES]; unsigned int i; const gsl_rng * r = gsl_rng_alloc (gsl_rng_env_setup()) ; gsl_ieee_env_setup (); prepare_distance_matrix(); /* set up a trivial initial route */ printf("# initial order of cities:\n"); for (i = 0; i < N_CITIES; ++i) { printf("# \"%s\"\n", cities[i].name); x_initial[i] = i; } printf("# distance matrix is:\n"); print_distance_matrix(); printf("# initial coordinates of cities (longitude and latitude)\n"); /* this can be plotted with */ /* ./siman_tsp > hhh ; grep city_coord hhh | awk '{print $2 " " $3}' | xyplot -ps -d "xy" > c.eps */ for (i = 0; i < N_CITIES+1; ++i) { printf("###initial_city_coord: %g %g \"%s\"\n", -cities[x_initial[i % N_CITIES]].longitude, cities[x_initial[i % N_CITIES]].lat, cities[x_initial[i % N_CITIES]].name); } /* exhaustive_search(); */ gsl_siman_solve(r, x_initial, Etsp, Stsp, Mtsp, Ptsp, NULL, NULL, NULL, N_CITIES*sizeof(int), params); printf("# final order of cities:\n"); for (i = 0; i < N_CITIES; ++i) { printf("# \"%s\"\n", cities[x_initial[i]].name); } printf("# final coordinates of cities (longitude and latitude)\n"); /* this can be plotted with */ /* ./siman_tsp > hhh ; grep city_coord hhh | awk '{print $2 " " $3}' | xyplot -ps -d "xy" > c.eps */ for (i = 0; i < N_CITIES+1; ++i) { printf("###final_city_coord: %g %g %s\n", -cities[x_initial[i % N_CITIES]].longitude, cities[x_initial[i % N_CITIES]].lat, cities[x_initial[i % N_CITIES]].name); } printf("# "); fflush(stdout); #if 0 system("date"); #endif /* 0 */ fflush(stdout); return 0; } void prepare_distance_matrix() { unsigned int i, j; double dist; for (i = 0; i < N_CITIES; ++i) { for (j = 0; j < N_CITIES; ++j) { if (i == j) { dist = 0; } else { dist = city_distance(cities[i], cities[j]); } distance_matrix[i][j] = dist; } } } void print_distance_matrix() { unsigned int i, j; for (i = 0; i < N_CITIES; ++i) { printf("# "); for (j = 0; j < N_CITIES; ++j) { printf("%15.8f ", distance_matrix[i][j]); } printf("\n"); } } /* [only works for 12] search the entire space for solutions */ static double best_E = 1.0e100, second_E = 1.0e100, third_E = 1.0e100; static int best_route[N_CITIES]; static int second_route[N_CITIES]; static int third_route[N_CITIES]; static void do_all_perms(int *route, int n); void exhaustive_search() { static int initial_route[N_CITIES] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; printf("\n# "); fflush(stdout); #if 0 system("date"); #endif fflush(stdout); do_all_perms(initial_route, 1); printf("\n# "); fflush(stdout); #if 0 system("date"); #endif /* 0 */ fflush(stdout); printf("# exhaustive best route: "); Ptsp(best_route); printf("\n# its energy is: %g\n", best_E); printf("# exhaustive second_best route: "); Ptsp(second_route); printf("\n# its energy is: %g\n", second_E); printf("# exhaustive third_best route: "); Ptsp(third_route); printf("\n# its energy is: %g\n", third_E); } /* James Theiler's recursive algorithm for generating all routes */ static void do_all_perms(int *route, int n) { if (n == (N_CITIES-1)) { /* do it! calculate the energy/cost for that route */ double E; E = Etsp(route); /* TSP energy function */ /* now save the best 3 energies and routes */ if (E < best_E) { third_E = second_E; memcpy(third_route, second_route, N_CITIES*sizeof(*route)); second_E = best_E; memcpy(second_route, best_route, N_CITIES*sizeof(*route)); best_E = E; memcpy(best_route, route, N_CITIES*sizeof(*route)); } else if (E < second_E) { third_E = second_E; memcpy(third_route, second_route, N_CITIES*sizeof(*route)); second_E = E; memcpy(second_route, route, N_CITIES*sizeof(*route)); } else if (E < third_E) { third_E = E; memcpy(route, third_route, N_CITIES*sizeof(*route)); } } else { int new_route[N_CITIES]; unsigned int j; int swap_tmp; memcpy(new_route, route, N_CITIES*sizeof(*route)); for (j = n; j < N_CITIES; ++j) { swap_tmp = new_route[j]; new_route[j] = new_route[n]; new_route[n] = swap_tmp; do_all_perms(new_route, n+1); } } } gsl/siman/TODO0000644000175000017500000000050713536674414011533 0ustar eddedd# -*- org -*- #+CATEGORY: siman * Reorganize siman interfaces to allow iterative use. * Maybe the routines can be made to work with pointers instead of structs so that only pointer manipulation is done by the siman algorithm and there is no need for malloc. A call would look something like siman(&start,&result, ...) gsl/siman/test.c0000644000175000017500000001122713536674414012167 0ustar eddedd/* siman/test.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Mark Galassi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include /* set up parameters for this simulated annealing run */ #define N_TRIES 200 /* how many points do we try before stepping */ #define ITERS_FIXED_T 1000 /* how many iterations for each T? */ #define STEP_SIZE 1.0 /* max step size in random walk */ #define K 1.0 /* Boltzmann constant */ #define T_INITIAL 0.008 /* initial temperature */ #define MU_T 1.003 /* damping factor for temperature */ #define T_MIN 2.0e-6 gsl_siman_params_t params = {N_TRIES, ITERS_FIXED_T, STEP_SIZE, K, T_INITIAL, MU_T, T_MIN}; double square (double x) ; double square (double x) { return x * x ; } double E1(void *xp); double M1(void *xp, void *yp); void S1(const gsl_rng * r, void *xp, double step_size); void P1(void *xp); /* now some functions to test in one dimension */ double E1(void *xp) { double x = * ((double *) xp); return exp(-square(x-1))*sin(8*x) - exp(-square(x-1000))*0.89; } double M1(void *xp, void *yp) { double x = *((double *) xp); double y = *((double *) yp); return fabs(x - y); } void S1(const gsl_rng * r, void *xp, double step_size) { double old_x = *((double *) xp); double new_x; new_x = gsl_rng_uniform(r)*2*step_size - step_size + old_x; memcpy(xp, &new_x, sizeof(new_x)); } void P1(void *xp) { printf(" %12g ", *((double *) xp)); } int main(void) { double x_min = 1.36312999455315182 ; double x ; gsl_rng * r = gsl_rng_alloc (gsl_rng_env_setup()) ; gsl_ieee_env_setup (); /* The function tested here has multiple mimima. The global minimum is at x = 1.36312999, (f = -0.87287) There is a local minimum at x = 0.60146196, (f = -0.84893) */ x = -10.0 ; gsl_siman_solve(r, &x, E1, S1, M1, NULL, NULL, NULL, NULL, sizeof(double), params); gsl_test_rel(x, x_min, 1e-3, "f(x)= exp(-(x-1)^2) sin(8x), x0=-10") ; x = +10.0 ; gsl_siman_solve(r, &x, E1, S1, M1, NULL, NULL, NULL, NULL, sizeof(double), params); gsl_test_rel(x, x_min, 1e-3, "f(x)= exp(-(x-1)^2) sin(8x), x0=10") ; /* Start at the false minimum */ x = +0.6 ; gsl_siman_solve(r, &x, E1, S1, M1, NULL, NULL, NULL, NULL, sizeof(double), params); gsl_test_rel(x, x_min, 1e-3, "f(x)= exp(-(x-1)^2) sin(8x), x0=0.6") ; x = +0.5 ; gsl_siman_solve(r, &x, E1, S1, M1, NULL, NULL, NULL, NULL, sizeof(double), params); gsl_test_rel(x, x_min, 1e-3, "f(x)= exp(-(x-1)^2) sin(8x), x0=0.5") ; x = +0.4 ; gsl_siman_solve(r, &x, E1, S1, M1, NULL, NULL, NULL, NULL, sizeof(double), params); gsl_test_rel(x, x_min, 1e-3, "f(x)= exp(-(x-1)^2) sin(8x), x0=0.4") ; gsl_rng_free(r); exit (gsl_test_summary ()); #ifdef JUNK x0.D1 = 12.0; printf("#one dimensional problem, x0 = %f\n", x0.D1); gsl_siman_Usolve(r, &x0, test_E_1D, test_step_1D, distance_1D, print_pos_1D, params); x0.D2[0] = 12.0; x0.D2[1] = 5.5; printf("#two dimensional problem, (x0,y0) = (%f,%f)\n", x0.D2[0], x0.D2[1]); gsl_siman_Usolve(r, &x0, test_E_2D, test_step_2D, distance_2D, print_pos_2D, params); x0.D3[0] = 12.2; x0.D3[1] = 5.5; x0.D3[2] = -15.5; printf("#three dimensional problem, (x0,y0,z0) = (%f,%f,%f)\n", x0.D3[0], x0.D3[1], x0.D3[2]); gsl_siman_Usolve(r, &x0, test_E_3D, test_step_3D, distance_3D, print_pos_3D, params); x0.D2[0] = 12.2; x0.D2[1] = 5.5; gsl_siman_solve(r, &x0, test_E_2D, test_step_2D, distance_2D, print_pos_2D, params); x0.D3[0] = 12.2; x0.D3[1] = 5.5; x0.D3[2] = -15.5; gsl_siman_solve(r, &x0, test_E_3D, test_step_3D, distance_3D, print_pos_3D, params); return 0; #endif } gsl/siman/siman_test_driver.sh0000755000175000017500000000107613536674414015125 0ustar eddedd#! /bin/sh # assume good result from tests; increment it if any test fails EXIT_STATUS=0 for seed in "" 12345 ; do ./siman_test > siman_test.out 2>&1 SECOND_LAST_ENERGY=`tail -2 siman_test.out1 | head -1 | awk '{print $4}'` LAST_ENERGY=`tail -1 siman_test.out1 | awk '{print $4}'` # echo " " $SECOND_LAST_ENERGY $LAST_ENERGY if [ $SECOND_LAST_ENERGY = $LAST_ENERGY ]; then echo -n "PASS: " else echo -n "FAIL: " EXIT_STATUS=`expr $EXIT_STATUS + 1` fi echo "simulated annealing test (travelling salesman problem) seed=${seed:-default}" done exit $EXIT_STATUS gsl/AUTHORS0000664000175000017500000000360114057135461010775 0ustar eddeddMark Galassi (rosalia@lanl.gov) - overall design, simulated annealing Jim Davies (jimmyd@nis.lanl.gov) - statistics library James Theiler (jt@lanl.gov) - random number generators Brian Gough (bjg@network-theory.co.uk) - FFTs, numerical integration, random number generators and distributions, root finding, minimization and fitting, polynomial solvers, complex numbers, physical constants, permutations, vector and matrix functions, histograms, statistics, ieee-utils, revised CBLAS Level 2 & 3, matrix decompositions and eigensystems. Reid Priedhorsky (rp@lanl.gov) - root finding Gerard Jungman (jungman@lanl.gov) special functions, interpolation, series acceleration, ODEs, BLAS, Linear Algebra, Eigensystems, Hankel Transforms. Michael Booth (booth@debian.org (email address not working)) - Monte Carlo integration Fabrice Rossi (rossi@ufrmd.dauphine.fr) - Multidimensional minimization Simone Piccardi (piccardi@fi.infn.it) - Ntuples Carlo Perassi (carlo@linux.it) - Additional random number generators Dan, Ho-Jin (hjdan@sys713.kaist.ac.kr) - divided differences interpolation Szymon Jaroszewicz (sj@cs.umb.edu) - combinations Nicolas Darnis (ndarnis@free.fr) - cyclic functions and the initial functions for canonical permutations. Tuomo Keskitalo (tuomo.keskitalo@iki.fi) - multidimensional minimization and ode-initval2 routines for ordinary differential equations Ivo Alxneit (ivo.alxneit@psi.ch) - multidimensional minimization, wavelet transforms Jason H. Stover (jason@sakla.net) - cumulative distribution functions Patrick Alken - nonsymmetric and generalized eigensystems, B-splines, linear algebra, sparse matrices, linear and nonlinear least squares Rhys Ulerich (rhys.ulerich@gmail.com) - multisets Pavel Holoborodko - fixed order Gauss-Legendre quadrature Pedro Gonnet - CQUAD integration routines. gsl/missing0000755000175000017500000001533113536674414011334 0ustar eddedd#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2012-06-26.16; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'automa4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gsl/gsl_math.h0000644000175000017500000001037113536674414011703 0ustar eddedd/* gsl_math.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2007 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MATH_H__ #define __GSL_MATH_H__ #include #include #include #include #include #include #include #include #ifndef M_E #define M_E 2.71828182845904523536028747135 /* e */ #endif #ifndef M_LOG2E #define M_LOG2E 1.44269504088896340735992468100 /* log_2 (e) */ #endif #ifndef M_LOG10E #define M_LOG10E 0.43429448190325182765112891892 /* log_10 (e) */ #endif #ifndef M_SQRT2 #define M_SQRT2 1.41421356237309504880168872421 /* sqrt(2) */ #endif #ifndef M_SQRT1_2 #define M_SQRT1_2 0.70710678118654752440084436210 /* sqrt(1/2) */ #endif #ifndef M_SQRT3 #define M_SQRT3 1.73205080756887729352744634151 /* sqrt(3) */ #endif #ifndef M_PI #define M_PI 3.14159265358979323846264338328 /* pi */ #endif #ifndef M_PI_2 #define M_PI_2 1.57079632679489661923132169164 /* pi/2 */ #endif #ifndef M_PI_4 #define M_PI_4 0.78539816339744830961566084582 /* pi/4 */ #endif #ifndef M_SQRTPI #define M_SQRTPI 1.77245385090551602729816748334 /* sqrt(pi) */ #endif #ifndef M_2_SQRTPI #define M_2_SQRTPI 1.12837916709551257389615890312 /* 2/sqrt(pi) */ #endif #ifndef M_1_PI #define M_1_PI 0.31830988618379067153776752675 /* 1/pi */ #endif #ifndef M_2_PI #define M_2_PI 0.63661977236758134307553505349 /* 2/pi */ #endif #ifndef M_LN10 #define M_LN10 2.30258509299404568401799145468 /* ln(10) */ #endif #ifndef M_LN2 #define M_LN2 0.69314718055994530941723212146 /* ln(2) */ #endif #ifndef M_LNPI #define M_LNPI 1.14472988584940017414342735135 /* ln(pi) */ #endif #ifndef M_EULER #define M_EULER 0.57721566490153286060651209008 /* Euler constant */ #endif #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* other needlessly compulsive abstractions */ #define GSL_IS_ODD(n) ((n) & 1) #define GSL_IS_EVEN(n) (!(GSL_IS_ODD(n))) #define GSL_SIGN(x) ((x) >= 0.0 ? 1 : -1) /* Return nonzero if x is a real number, i.e. non NaN or infinite. */ #define GSL_IS_REAL(x) (gsl_finite(x)) /* Definition of an arbitrary function with parameters */ struct gsl_function_struct { double (* function) (double x, void * params); void * params; }; typedef struct gsl_function_struct gsl_function ; #define GSL_FN_EVAL(F,x) (*((F)->function))(x,(F)->params) /* Definition of an arbitrary function returning two values, r1, r2 */ struct gsl_function_fdf_struct { double (* f) (double x, void * params); double (* df) (double x, void * params); void (* fdf) (double x, void * params, double * f, double * df); void * params; }; typedef struct gsl_function_fdf_struct gsl_function_fdf ; #define GSL_FN_FDF_EVAL_F(FDF,x) (*((FDF)->f))(x,(FDF)->params) #define GSL_FN_FDF_EVAL_DF(FDF,x) (*((FDF)->df))(x,(FDF)->params) #define GSL_FN_FDF_EVAL_F_DF(FDF,x,y,dy) (*((FDF)->fdf))(x,(FDF)->params,(y),(dy)) /* Definition of an arbitrary vector-valued function with parameters */ struct gsl_function_vec_struct { int (* function) (double x, double y[], void * params); void * params; }; typedef struct gsl_function_vec_struct gsl_function_vec ; #define GSL_FN_VEC_EVAL(F,x,y) (*((F)->function))(x,y,(F)->params) __END_DECLS #endif /* __GSL_MATH_H__ */ gsl/gsl_minmax.h0000644000175000017500000000511013536674414012236 0ustar eddedd/* gsl_minmax.h * * Copyright (C) 2008 Gerard Jungman, Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MINMAX_H__ #define __GSL_MINMAX_H__ #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Define MAX and MIN macros/functions if they don't exist. */ /* plain old macros for general use */ #define GSL_MAX(a,b) ((a) > (b) ? (a) : (b)) #define GSL_MIN(a,b) ((a) < (b) ? (a) : (b)) /* function versions of the above, in case they are needed */ double gsl_max (double a, double b); double gsl_min (double a, double b); /* inline-friendly strongly typed versions */ #ifdef HAVE_INLINE INLINE_FUN int GSL_MAX_INT (int a, int b); INLINE_FUN int GSL_MIN_INT (int a, int b); INLINE_FUN double GSL_MAX_DBL (double a, double b); INLINE_FUN double GSL_MIN_DBL (double a, double b); INLINE_FUN long double GSL_MAX_LDBL (long double a, long double b); INLINE_FUN long double GSL_MIN_LDBL (long double a, long double b); INLINE_FUN int GSL_MAX_INT (int a, int b) { return GSL_MAX (a, b); } INLINE_FUN int GSL_MIN_INT (int a, int b) { return GSL_MIN (a, b); } INLINE_FUN double GSL_MAX_DBL (double a, double b) { return GSL_MAX (a, b); } INLINE_FUN double GSL_MIN_DBL (double a, double b) { return GSL_MIN (a, b); } INLINE_FUN long double GSL_MAX_LDBL (long double a, long double b) { return GSL_MAX (a, b); } INLINE_FUN long double GSL_MIN_LDBL (long double a, long double b) { return GSL_MIN (a, b); } #else #define GSL_MAX_INT(a,b) GSL_MAX(a,b) #define GSL_MIN_INT(a,b) GSL_MIN(a,b) #define GSL_MAX_DBL(a,b) GSL_MAX(a,b) #define GSL_MIN_DBL(a,b) GSL_MIN(a,b) #define GSL_MAX_LDBL(a,b) GSL_MAX(a,b) #define GSL_MIN_LDBL(a,b) GSL_MIN(a,b) #endif /* HAVE_INLINE */ __END_DECLS #endif /* __GSL_POW_INT_H__ */ gsl/TODO0000644000175000017500000001730513536674414010430 0ustar eddedd# -*- org -*- #+TITLE: GSL TODO File * Main Todo Items We are looking for volunteers to do the following tasks. Consult the TODO files in each directory first for specific requirements. ** Document LQ linalg functions ** 1st-line support on the mailing lists (e.g. checking that bugs are reproducible, and that all relevant information is supplied) ** Modified Ei(x) function (see specfunc/TODO) ** Quasi-random number distributions ** ODE algorithms from RKSUITE ** Incomplete Fermi-Dirac functions ** Spheroidal wave functions ** Weierstrass elliptic functions ** Complex Bessel Functions ** Additional volunteers with access to a good library to get copies of papers for other developers. ** Estimates of condition numbers for linear solvers ** Sine and Cosine Transforms from FFTPACK (Alok Singhal ) ** Cubature, e.g as provided by Cubpack. (Gert Van den Eynde ?) ** Fresnel Integrals ("Juergen J. Zach" ) ** Cumulative Distribution functions for discrete random distributions * Changes for Release 2.0 Break binary compatibility, but keep source compatibility. ** Add a 'void *' to all workspaces, to allow for future changes. ** Disable deprecated functions ** Fix up the workspace_alloc functions so they have consistent names (add functions where needed, don't remove) ** Standardize function names, in particular VERB vs NOUN (e.g. _invert vs _inverse). Also adopt a convection for functions which can operate in place vs use of workspace (e.g linalg_solve functions). ** gsl_roots doesn't store function value, so testing the residual requires function to be recomputed Generally all the iterative routines should follow a consistent approach to outputting everything that is necessary for the next iteration ** gsl_roots - consider having two returns from solvers - GSL_SUCCESS if a root has been found or GSL_CONTINUE if further iterations may be needed. ** mathieu functions - bring functional interfaces into line with GSL conventions for special functions. ** rewriting the spherical Bessel routines (there are around 3 separate bug reports for these) ** the nonlinear least squares Levenberg-Marquardt solver should be rewritten from scratch - the current version is filled with goto statements, and while its supposed to be based on MINPACK, I've found numerous examples where GSL fails to converge when MINPACK succeeds, so something was not implemented correctly. ** import 2D interpolation code; 3d or nd linear interpolation? * Other tasks ** Remove use of long double internally, e.g. as an accumulator in loops. It introduces variation between platforms which is undesirable. It should be replaced with a preprocessor variable ACC_DOUBLE so that the user can compile the library with the old long double behavior if desired. ** Use BLAS internally as much as possible, to take advantage of speed improvements on large-scale systems. There may be some instances where a simple for() loop is preferred since there's a function-call overhead in calling BLAS routines. ** More tests. We should (at least) have a test for every error condition. Use GCOV to improve coverage. ** Annotate the header files with GAMS classifications. See if they can be included in the GAMs website. ** Make the return value EINVAL vs EDOM consistent for invalid parameters. EDOM means a domain error (i.e. float or mathematically undefined), EINVAL means invalid (i.e. zero length) ** Change return 0 to return GSL_SUCCESS, and return -1 to GSL_FAILURE throughout, where appropriate. Similarly change any if(...) checks of return values to use == GSL_SUCCESS, if they are checking for zero. N.B. want to be careful about accidentally omitting error conditions if using something like == GSL_FAILURE when function returns a different error code. ** Make sure that all #defines are fully wrapped in ()'s, especially the outermost layer which may have been missed. Everything should be of the form #define foo(x) (....) so there is no possibility of bad parsing. Need a perl script to check this! ** Eliminate use of volatile where it has been used to force rounding (integration/). It is better to write the code to avoid dependence on rounding. ** Constant objects (like gsl_roots_fsolver_brent) ought to have constant pointers (const gsl_roots_fsolver_type * const gsl_roots_fsolver_brent) ** PyGSL -- python bindings for GSL, see http://pygsl.sf.net/ ** From Goose ASCII import Categorical Sets Kernel Density Estimation Shampine Polynomial Regression Bootstrapping, Jacknife Descriptive: Range, Trimmed Mean, Winsorized Mean, Moments Harmonic mean, RMS, Durbin-Watson, AR1 independence Autocorr, Autocorr_z, Cramer vos Mises, Anderson-Darling Spearman-rho, Kendall-tau, EDF_D_both EDF_D_plus, EDF_D_minus, EDF_D, EDF_kuiper_V, pooled mean pooled var, Tests: kolmogorov_smirnov Moving average, Exponential moving average wilcoxon_statistic, wilcoxon_noties_cdf, wilcoxon_general_cdf Cochran Q test, KruskalWallis, McNemar, spearman_Rocc * Wishlist or vague ideas ** An example chapter on how to link GSL code with GNU Guile, and Python We could also provide g-wrap wrappers for guile, or swig.i files and swig demos so that swig can be run more easily. ** Provide an interface to LAPACK, as for BLAS? Clarify the license for LAPACK first, their web page is vague on what the license terms are. Some parts of LAPACK are included in octave so maybe the Octave maintainers will know more. ** Public domain or free texts which could be distributed with GSL: Abramowitz and Stegun, "Handbook of Mathematical Functions" appears to be public domain. SEPT/02: See online images at http://members.fortunecity.com/aands/ Devroye's book on Random Variates (1st ed) is/was in the public domain. ** Investigate complex support in GCC: Operations like sin(z) silently convert argument to double, losing the imaginary part. This is mentioned in CEPHES documentation in 1998 with a patch to generate a warning. What happened? (Does it now work with gcc-3.0?) ** Go through the matrix and vector functions systematically and decide what should be provided outside of BLAS. ** Change from gsl-ref.texi to gsl.texi since it is the main file? Also, put under dir section "Math" (which seems to be the appropriate one for Debian, as Octave, Gnuplot etc are in that) ** Remove error stream stuff?? It is hardly used. ** Extend histogram routines as described in recent discussion ** Check that there are no conflicts when linking with Lapack. CBLAS, ATLAS ** Make a sorted datatype for the median and quantile functions so that the user can be prevented from passing unsorted data, which is not checked for. ** Optimization/error for dest == src as appropriate ** Provide a run-time expression evaluator for interactive programs where the user can provide formulas as strings. Keith Briggs recommended formulc2.22 which he had found useful in several projects. http://www.cs.brandeis.edu/~hhelf/formu/formulc.html. It is LGPL. Alternatively, the source code for GDB contains yacc grammars and evaluators for expressions in various languages, so that would be another way to go. It would have the advantage of following the language standards. If I was going to write something from scratch I would think about using that as a base, as the full set of operators are already included with the correct precedence rules. Being able to evaluate C and Fortran expressions could be useful. ** We should have an index mapping type object which handles elements of size_t for vectors and matrices, or at least vectors and matrices of size_t in addition to long, int, etc. gsl/doc/0000755000175000017500000000000014152016745010467 5ustar eddeddgsl/doc/Makefile.in0000664000175000017500000007705014057135461012550 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" man3dir = $(mandir)/man3 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs \ TODO texinfo.tex DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = . examples #info_TEXINFOS = gsl-ref.texi noinst_TEXINFOS = gsl-design.texi man_MANS = gsl.3 gsl-config.1 gsl-randist.1 gsl-histogram.1 figures = \ images/bspline.png \ images/cheb.png \ images/dwt.png \ images/fft-complex-radix2.png \ images/fft-real-mixedradix.png \ images/filt_edge.png \ images/fit-exp.png \ images/fit-wlinear2.png \ images/fit-wlinear.png \ images/gaussfilt.png \ images/gaussfilt2.png \ images/histogram.png \ images/histogram2d.png \ images/impulse.png \ images/interp2d.png \ images/interp_compare.png \ images/interp.png \ images/interpp.png \ images/min-interval.png \ images/movstat1.png \ images/movstat2.png \ images/movstat3.png \ images/multilarge.png \ images/multimin.png \ images/nlfit2b.png \ images/nlfit2.png \ images/nlfit3.png \ images/ntuple.png \ images/ode-vdp.png \ images/qrng.png \ images/rand-bernoulli.png \ images/rand-beta.png \ images/rand-binomial.png \ images/rand-bivariate-gaussian.png \ images/rand-cauchy.png \ images/rand-chisq.png \ images/rand-erlang.png \ images/rand-exponential.png \ images/rand-exppow.png \ images/rand-fdist.png \ images/rand-flat.png \ images/rand-gamma.png \ images/rand-gaussian.png \ images/rand-gaussian-tail.png \ images/rand-geometric.png \ images/rand-gumbel1.png \ images/rand-gumbel2.png \ images/rand-hypergeometric.png \ images/rand-landau.png \ images/rand-laplace.png \ images/rand-levy.png \ images/rand-levyskew.png \ images/rand-logarithmic.png \ images/rand-logistic.png \ images/rand-lognormal.png \ images/rand-nbinomial.png \ images/random-walk.png \ images/rand-pareto.png \ images/rand-pascal.png \ images/rand-poisson.png \ images/rand-rayleigh.png \ images/rand-rayleigh-tail.png \ images/rand-tdist.png \ images/rand-weibull.png \ images/regularized2.png \ images/regularized.png \ images/robust.png \ images/siman-12-cities.png \ images/siman-energy.png \ images/siman-final-route.png \ images/siman-initial-route.png \ images/siman-test.png \ images/sparse_poisson.png rst_files = \ autoconf.rst \ blas.rst \ bspline.rst \ cblas.rst \ cheb.rst \ combination.rst \ complex.rst \ const.rst \ contrib.rst \ debug.rst \ dht.rst \ diff.rst \ dwt.rst \ eigen.rst \ err.rst \ fdl.rst \ fft.rst \ filter.rst \ gpl.rst \ histogram.rst \ ieee754.rst \ include.rst \ index.rst \ integration.rst \ interp.rst \ intro.rst \ linalg.rst \ lls.rst \ math.rst \ min.rst \ montecarlo.rst \ movstat.rst \ multimin.rst \ multiroots.rst \ multiset.rst \ nls.rst \ ntuple.rst \ ode-initval.rst \ permutation.rst \ poly.rst \ qrng.rst \ randist.rst \ rng.rst \ roots.rst \ rstat.rst \ siman.rst \ sort.rst \ spblas.rst \ specfunc-airy.rst \ specfunc-bessel.rst \ specfunc-clausen.rst \ specfunc-coulomb.rst \ specfunc-coupling.rst \ specfunc-dawson.rst \ specfunc-debye.rst \ specfunc-dilog.rst \ specfunc-elementary.rst \ specfunc-ellint.rst \ specfunc-elljac.rst \ specfunc-erf.rst \ specfunc-expint.rst \ specfunc-exp.rst \ specfunc-fermi-dirac.rst \ specfunc-gamma.rst \ specfunc-gegenbauer.rst \ specfunc-hermite.rst \ specfunc-hyperg.rst \ specfunc-laguerre.rst \ specfunc-lambert.rst \ specfunc-legendre.rst \ specfunc-log.rst \ specfunc-mathieu.rst \ specfunc-pow-int.rst \ specfunc-psi.rst \ specfunc.rst \ specfunc-synchrotron.rst \ specfunc-transport.rst \ specfunc-trig.rst \ specfunc-zeta.rst \ splinalg.rst \ spmatrix.rst \ statistics.rst \ sum.rst \ usage.rst \ vectors.rst static_files = \ _static/fdl.txt \ _static/gpl.txt noinst_DATA = $(figures) $(rst_files) $(static_files) EXTRA_DIST = $(man_MANS) $(noinst_DATA) gsl-design.texi gsl-ref.info conf.py SPHINX_OPTS = SPHINX_BUILD = sphinx-build SPHINX_SOURCEDIR = . SPHINX_BUILDDIR = _build # targets supported by sphinx SPHINX_TARGETS = html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf latexpdfja text man texinfo gettext changes xml pseudoxml linkcheck doctest coverage all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-man3: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man3dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.3[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ done; } uninstall-man3: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man3dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.3[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(MANS) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info-am: install-data-am: install-data-local install-man install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-man3 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-local uninstall-man uninstall-man: uninstall-man1 uninstall-man3 .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool clean-local \ cscopelist-am ctags ctags-am distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-man3 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-local uninstall-man uninstall-man1 \ uninstall-man3 .PRECIOUS: Makefile $(SPHINX_TARGETS) : @$(SPHINX_BUILD) -M $@ "$(SPHINX_SOURCEDIR)" "$(SPHINX_BUILDDIR)" $(SPHINX_OPTS) $(O) # special case info target info: @$(SPHINX_BUILD) -M $@ "$(SPHINX_SOURCEDIR)" "$(SPHINX_BUILDDIR)" $(SPHINX_OPTS) $(O) cp "$(SPHINX_BUILDDIR)/texinfo/gsl-ref.info" . install-data-local: $(srcdir)/gsl-ref.info $(MKDIR_P) "$(DESTDIR)$(infodir)" $(INSTALL_DATA) $(srcdir)/gsl-ref.info $(DESTDIR)$(infodir) uninstall-local: rm -f "$(DESTDIR)$(infodir)/gsl-ref.info" clean-local: rm -rf "$(SPHINX_BUILDDIR)" # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/doc/gsl-histogram.10000644000175000017500000000270013536674414013340 0ustar eddedd.\" Man page contributed by Dirk Eddelbuettel .\" and released under the GNU General Public License .TH GSL-HISTOGRAM 1 "" GNU .SH NAME gsl-histogram - compute histogram of data on stdin .SH SYNOPSYS .B gsl-histogram xmin xmax [n] .SH DESCRIPTION .B gsl-histogram is a demonstration program for the GNU Scientific Library. It takes three arguments, specifying the upper and lower bounds of the histogram and the number of bins. It then reads numbers from `stdin', one line at a time, and adds them to the histogram. When there is no more data to read it prints out the accumulated histogram using gsl_histogram_fprintf. If n is unspecified then bins of integer width are used. .SH EXAMPLE Here is an example. We generate 10000 random samples from a Cauchy distribution with a width of 30 and histogram them over the range -100 to 100, using 200 bins. gsl-randist 0 10000 cauchy 30 | gsl-histogram -100 100 200 > histogram.dat A plot of the resulting histogram will show the familiar shape of the Cauchy distribution with fluctuations caused by the finite sample size. awk '{print $1, $3 ; print $2, $3}' histogram.dat | graph -T X .SH SEE ALSO .BR gsl(3) , .BR gsl-randist(1) . .SH AUTHOR .B gsl-histogram was written by Brian Gough. Copyright 1996-2000; for copying conditions see the GNU General Public Licence. This manual page was added by the Dirk Eddelbuettel , the Debian GNU/Linux maintainer for .BR GSL . gsl/doc/Makefile.am0000664000175000017500000000040314152016745012522 0ustar eddedd## Process this file with automake to produce Makefile.in SUBDIRS = . examples #info_TEXINFOS = gsl-ref.texi noinst_TEXINFOS = man_MANS = gsl.3 gsl-config.1 gsl-randist.1 gsl-histogram.1 figures = rst_files = static_files = noinst_DATA = EXTRA_DIST = gsl/doc/gsl-config.10000644000175000017500000000265313536674414012617 0ustar eddedd.TH GSL 1 "22 May 2001" .SH NAME gsl-config - script to get version number and compiler flags of the installed GSL library .SH SYNOPSIS .B gsl-config [\-\-prefix] [\-\-version] [\-\-libs] [\-\-libs\-without\-cblas] [\-\-cflags] .SH DESCRIPTION .PP \fIgsl-config\fP is a tool that is used to configure to determine the compiler and linker flags that should be used to compile and link programs that use \fIGSL\fP. It is also used internally to the .m4 macros for GNU autoconf that are included with \fIGSL\fP. . .SH OPTIONS \fIgsl-config\fP accepts the following options: .TP 8 .B \-\-version Print the currently installed version of \fIGSL\fP on the standard output. .TP 8 .B \-\-libs Print the linker flags that are necessary to link a \fIGSL\fP program, with cblas .TP 8 .B \-\-libs\-without\-cblas Print the linker flags that are necessary to link a \fIGSL\fP program, without cblas .TP 8 .B \-\-cflags Print the compiler flags that are necessary to compile a \fIGSL\fP program. .TP 8 .B \-\-prefix Show the GSL installation prefix. .SH SEE ALSO .BR gtk-config (1), .BR gnome-config (1) .SH COPYRIGHT Copyright \(co 2001 Christopher R. Gabriel Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. gsl/doc/gsl.30000644000175000017500000000241513536674414011352 0ustar eddedd.TH GSL 3 "GNU Scientific Library" "GSL Team" \" -*- nroff -*- .SH NAME gsl - GNU Scientific Library .SH SYNOPSIS #include .SH DESCRIPTION The GNU Scientific Library (GSL) is a collection of routines for numerical computing. The routines are written from scratch by the GSL team in C, and present a modern Applications Programming Interface (API) for C programmers, allowing wrappers to be written for very high level languages. .PP The library covers the following areas, .TP .nf .BR Complex Numbers Roots of Polynomials Special Functions Vectors and Matrices Permutations Combinations Sorting BLAS Support Linear Algebra Eigensystems Fast Fourier Transforms Quadrature Random Numbers Quasi-Random Sequences Random Distributions Statistics Histograms N-Tuples Monte Carlo Integration Simulated Annealing Differential Equations Interpolation Numerical Differentiation Chebyshev Approximations Series Acceleration Discrete Hankel Transforms Root-Finding Minimization Least-Squares Fitting Physical Constants IEEE Floating-Point .fi .PP For more information please consult the GSL Reference Manual, which is available as an info file. You can read it online using the shell command .B info gsl-ref (if the library is installed). .PP Please report any bugs to .B bug-gsl@gnu.org. gsl/doc/texinfo.tex0000644000175000017500000116703613536674414012713 0ustar eddedd% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2013-02-01.11} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. % % This texinfo.tex file is free software: you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation, either version 3 of the % License, or (at your option) any later version. % % This texinfo.tex file is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied warranty % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. This Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % http://www.gnu.org/software/texinfo/ (the Texinfo home page) % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\ampChar = `\& \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\hashChar = `\# \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. The solution is % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 \noexpand\or \the\toks4 \the\toks6 \noexpand\else \the\toks8 }% } % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\tt \backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\unskip\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). This command % is not documented, not supported, and doesn't work. % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment % \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} % \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros based on pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \turnoffactive \makevalueexpandable \def\pdfdestname{#1}% \txiescapepdf\pdfdestname \safewhatsit{\pdfdest name{\pdfdestname} xyz}% }} % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. \def\urlcolor{\rgbDarkRed} \def\linkcolor{\rgbDarkRed} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \edef\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else \txiescapepdf\pdfoutlinedest \fi % % Also escape PDF chars in the display string. \edef\pdfoutlinetext{#1}% \txiescapepdf\pdfoutlinetext % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Unfortunately, we have to override this for titles and the like, since % in those cases "rm" is bold. Sigh. \def\rmisbold{\rm\def\curfontstyle{bf}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} % where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acro in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{27pt}} \def\titlefont#1{{\titlefonts\rmisbold #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqkbd \markupsetcodequoteleft \let\markupsetuprqkbd \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ptexslash \fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\normaldash \let_\realunder \fi \codex } } \def\codex #1{\tclose{#1}\endgroup} \def\normaldash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. % (This \urefnobreak definition isn't used now, leaving it for a while % for comparison.) \def\urefnobreak#1{\dourefnobreak #1,,,\finish} \def\dourefnobreak#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % This \urefbreak definition is the active one. \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode\ampChar=\active \catcode\dotChar=\active \catcode\hashChar=\active \catcode\questChar=\active \catcode\slashChar=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. \def\urefprestretch{\urefprebreak \hskip0pt plus.13em } \def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} \def\urefcodehash{\urefprestretch \#\urefpoststretch} \def\urefcodequest{\urefprestretch ?\urefpoststretch} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprestretch \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpoststretch \fi } } % One more complication: by default we'll break after the special % characters, but some people like to break before the special chars, so % allow that. Also allow no breaking at all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} \def\xkey{\key} \def\kbdsub#1#2#3\par{% \def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % ctrl is no longer a Texinfo command, but leave this definition for fun. \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. % Unless we're in typewriter, use \ecfont because the CM text fonts do % not have braces, and we don't want to switch into math. \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} \let\{=\mylbrace \let\lbracechar=\{ \let\}=\myrbrace \let\rbracechar=\} \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \selectfonts\lllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. \def\bullet{$\ptexbullet$} \def\geq{\ifmmode \ge\else $\ge$\fi} \def\leq{\ifmmode \le\else $\le$\fi} \def\minus{\ifmmode -\else $-$\fi} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the ec* fonts (cm-super in outline format) for non-CM glyphs. \def\ecfont{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: \font\thisecfont = ectt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{% \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. Because % it is always used for titles, nothing else, we call \rmisbold. \par % should be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rmisbold \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rmisbold \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. \everycr resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi % Test to see if parskip is larger than space between lines of % table. If not, do nothing. % If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\normaldash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end executes the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \relax % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % % Need these unexpandable (because we define \tt as a dummy) % definitions when @{ or @} appear in index entry text. Also, more % complicated, when \tex is in effect and \{ is a \delimiter again. % We can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. Perhaps we % should define @lbrace and @rbrace commands a la @comma. \def\{{{\tt\char123}}% \def\}{{\tt\char125}}% % % I don't entirely understand this, but when an index entry is % generated from a macro call, the \endinput which \scanmacro inserts % causes processing to be prematurely terminated. This is, % apparently, because \indexsorttmp is fully expanded, and \endinput % is an expandable command. The redefinition below makes \endinput % disappear altogether for that purpose -- although logging shows that % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} % @findex xyz % @end macro % ... % @funindex commtest % % The above is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % % So: \let\endinput = \empty % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies \otherbackslash } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\arrow \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \definedummyword\result \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % \def\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ogonek \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sansserif \definedummyword\sc \definedummyword\slanted \definedummyword\t % % Commands that take arguments. \definedummyword\abbr \definedummyword\acronym \definedummyword\anchor \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\dmn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\image \definedummyword\indicateurl \definedummyword\inforef \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % % Unfortunately, texindex is not prepared to handle braces in the % content at all. So for index sorting, we map @{ and @} to strings % starting with |, since that ASCII character is between ASCII { and }. \def\{{|a}% \def\lbracechar{|a}% % \def\}{|b}% \def\rbracechar{|b}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{ZZZ}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{zzz}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\arrow{->}% \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\geq{>=}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\leq{<=}% \def\minus{-}% \def\point{.}% \def\pounds{pounds}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% \def\quotedblright{"}% \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% \def\registeredsymbol{R}% \def\result{=>}% \def\textdegree{o}% % \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax \else \indexlquoteignore \fi % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } % Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us % ignore left quotes in the sort term. {\catcode`\`=\active \gdef\indexlquoteignore{\let`=\empty}} \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \safewhatsit\dosubindwrite }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this freezes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \setbox\boxA = \hbox{#1}% \ifdim\wd\boxA = 0pt \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like plain.tex's \dotfill, except uses up at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \pageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rmisbold #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rmisbold % % Have to define \lastsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\lastsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% \nobreak\bigskip \nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \checkenv{}% should not be in an environment. % % Switch to the right set of fonts. \csname #2fonts\endcsname \rmisbold % \def\sectionlevel{#2}% \def\temptype{#3}% % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode`\`=\other \catcode`\'=\other \escapechar=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \doingtypefntrue \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{\begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % % ... and for \example: \spaceisspace % % The \empty here causes a following catcode 5 newline to be eaten as % part of reading whitespace after a control sequence. It does not % eat a catcode 13 newline. There's no good way to handle the two % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX % would then have different behavior). See the Macro Details node in % the manual for the workaround we recommend for macros and % line-oriented commands. % \scantokens{#1\empty}% \endgroup} \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% used when scanning invocations \scanctxt \catcode`\\=0 } % why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" % for the single characters \ { }. Thus, we end up with the "commands" % that would be written @\ @{ @} in a Texinfo document. % % We already have @{ and @}. For @\, we define it here, and only for % this purpose, to produce a typewriter backslash (so, the @\ that we % define for @math can't be used with @macro calls): % \def\\{\normalbackslash}% % % We would like to do this for \, too, since that is what makeinfo does. % But it is not possible, because Texinfo already has a command @, for a % cedilla accent. Documents must use @comma{} instead. % % \anythingelse will almost certainly be an error of some kind. % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % For macro processing make @ a letter so that we can make Texinfo private macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.BLAH for each BLAH % in the params list to some hook where the argument si to be expanded. If % there are less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. % % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime underwhich the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, you need that no macro has more than 256 arguments, otherwise an % error is produced. \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax \let\xeatspaces\relax \parsemargdefxxx#1,;,% % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) % \catcode `\@\texiatcatcode \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \catcode `\@=11\relax \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } % \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } \def\macargexpandinbody@{% %% Define the named-macro outside of this group and then close this group. \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Save the token stack pointer into macro #1 \def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} % Restore the token stack pointer from number in macro #1 \def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} % newtoks that can be used non \outer . \def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} % Tailing missing arguments are set to empty \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } % This defines a Texinfo @macro. There are eight cases: recursive and % nonrecursive macros of zero, one, up to nine, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else \ifnum\paramno<10\relax % at most 9 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \else % 10 or more \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % at most 9 \ifnum\paramno<10\relax \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse \fi \fi \fi} \catcode `\@\texiatcatcode\relax \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg). % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \lastsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\lastsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf {\indexnofonts \turnoffactive \makevalueexpandable % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \edef\pdfxrefdest{#1}% \ifx\pdfxrefdest\empty \def\pdfxrefdest{Top}% no empty targets \else \txiescapepdf\pdfxrefdest % escape PDF special chars \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfxrefdest}% \else goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \setcolor{\linkcolor}% \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi\fi \fi \endlink \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% {% The node name might contain 8-bit characters, which in our current % implementation are changed to commands like @'e. Don't let these % mess up the control sequence name. \indexnofonts \turnoffactive \xdef\safexrefname{#1}% }% % \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV\else \noindent \fi % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \lastsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\lastsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies % % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start floating, we have to issue warning % whenever an insert appears inside a float which could possibly % float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \lastsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{\begingroup \let_=\normalunderscore % normal _ character for filenames \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore{#1_\finish}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX \endgroup} % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \parseargdef\documentencoding{% % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active \utfeightchardefs % \else \message{Unknown document encoding #1, ignoring.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdef^^a0{\tie} \gdef^^a1{\exclamdown} \gdef^^a2{\missingcharmsg{CENT SIGN}} \gdef^^a3{{\pounds}} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\missingcharmsg{YEN SIGN}} \gdef^^a6{\missingcharmsg{BROKEN BAR}} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{$\lnot$} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} \gdef^^b1{$\pm$} \gdef^^b2{$^2$} \gdef^^b3{$^3$} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} % \gdef^^b7{$^.$} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} % \gdef^^bb{\guillemetright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} \gdef^^be{$3\over4$} \gdef^^bf{\questiondown} % \gdef^^c0{\`A} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} \gdef^^c9{\'E} \gdef^^ca{\^E} \gdef^^cb{\"E} \gdef^^cc{\`I} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\"I} % \gdef^^d0{\DH} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\~O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\O} \gdef^^d9{\`U} \gdef^^da{\'U} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\TH} \gdef^^df{\ss} % \gdef^^e0{\`a} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\~a} \gdef^^e4{\"a} \gdef^^e5{\ringaccent a} \gdef^^e6{\ae} \gdef^^e7{\cedilla c} \gdef^^e8{\`e} \gdef^^e9{\'e} \gdef^^ea{\^e} \gdef^^eb{\"e} \gdef^^ec{\`{\dotless i}} \gdef^^ed{\'{\dotless i}} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % \gdef^^f0{\dh} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\~o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\o} \gdef^^f9{\`u} \gdef^^fa{\'u} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\th} \gdef^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdef^^a4{\euro} \gdef^^a6{\v S} \gdef^^a8{\v s} \gdef^^b4{\v Z} \gdef^^b8{\v z} \gdef^^bc{\OE} \gdef^^bd{\oe} \gdef^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdef^^a0{\tie} \gdef^^a1{\ogonek{A}} \gdef^^a2{\u{}} \gdef^^a3{\L} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\v L} \gdef^^a6{\'S} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\v S} \gdef^^aa{\cedilla S} \gdef^^ab{\v T} \gdef^^ac{\'Z} \gdef^^ad{\-} \gdef^^ae{\v Z} \gdef^^af{\dotaccent Z} % \gdef^^b0{\textdegree} \gdef^^b1{\ogonek{a}} \gdef^^b2{\ogonek{ }} \gdef^^b3{\l} \gdef^^b4{\'{}} \gdef^^b5{\v l} \gdef^^b6{\'s} \gdef^^b7{\v{}} \gdef^^b8{\cedilla\ } \gdef^^b9{\v s} \gdef^^ba{\cedilla s} \gdef^^bb{\v t} \gdef^^bc{\'z} \gdef^^bd{\H{}} \gdef^^be{\v z} \gdef^^bf{\dotaccent z} % \gdef^^c0{\'R} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\u A} \gdef^^c4{\"A} \gdef^^c5{\'L} \gdef^^c6{\'C} \gdef^^c7{\cedilla C} \gdef^^c8{\v C} \gdef^^c9{\'E} \gdef^^ca{\ogonek{E}} \gdef^^cb{\"E} \gdef^^cc{\v E} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\v D} % \gdef^^d0{\DH} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\H O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\cedilla T} \gdef^^df{\ss} % \gdef^^e0{\'r} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\u a} \gdef^^e4{\"a} \gdef^^e5{\'l} \gdef^^e6{\'c} \gdef^^e7{\cedilla c} \gdef^^e8{\v c} \gdef^^e9{\'e} \gdef^^ea{\ogonek{e}} \gdef^^eb{\"e} \gdef^^ec{\v e} \gdef^^ed{\'{\dotless{i}}} \gdef^^ee{\^{\dotless{i}}} \gdef^^ef{\v d} % \gdef^^f0{\dh} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\H o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\v r} \gdef^^f9{\ringaccent u} \gdef^^fa{\'u} \gdef^^fb{\H u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\cedilla t} \gdef^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } \begingroup \catcode`\~13 \catcode`\"12 \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiTwoOctets\string~}} \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiThreeOctets\string~}} \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiFourOctets\string~}} \UTFviiiLoop \endgroup \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacter#1#2{% \countUTFz = "#1\relax %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup \parseXMLCharref \def\UTFviiiTwoOctets##1##2{% \csname u8:##1\string ##2\endcsname}% \def\UTFviiiThreeOctets##1##2##3{% \csname u8:##1\string ##2\string ##3\endcsname}% \def\UTFviiiFourOctets##1##2##3##4{% \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% \endgroup} \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctets.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% \fi\fi\fi } \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz \multiply\countUTFz by 64 \advance\countUTFx by -\countUTFz \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A3}{\pounds} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} \DeclareUnicodeCharacter{00BF}{\questiondown} \DeclareUnicodeCharacter{00C0}{\`A} \DeclareUnicodeCharacter{00C1}{\'A} \DeclareUnicodeCharacter{00C2}{\^A} \DeclareUnicodeCharacter{00C3}{\~A} \DeclareUnicodeCharacter{00C4}{\"A} \DeclareUnicodeCharacter{00C5}{\AA} \DeclareUnicodeCharacter{00C6}{\AE} \DeclareUnicodeCharacter{00C7}{\cedilla{C}} \DeclareUnicodeCharacter{00C8}{\`E} \DeclareUnicodeCharacter{00C9}{\'E} \DeclareUnicodeCharacter{00CA}{\^E} \DeclareUnicodeCharacter{00CB}{\"E} \DeclareUnicodeCharacter{00CC}{\`I} \DeclareUnicodeCharacter{00CD}{\'I} \DeclareUnicodeCharacter{00CE}{\^I} \DeclareUnicodeCharacter{00CF}{\"I} \DeclareUnicodeCharacter{00D0}{\DH} \DeclareUnicodeCharacter{00D1}{\~N} \DeclareUnicodeCharacter{00D2}{\`O} \DeclareUnicodeCharacter{00D3}{\'O} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} \DeclareUnicodeCharacter{00DB}{\^U} \DeclareUnicodeCharacter{00DC}{\"U} \DeclareUnicodeCharacter{00DD}{\'Y} \DeclareUnicodeCharacter{00DE}{\TH} \DeclareUnicodeCharacter{00DF}{\ss} \DeclareUnicodeCharacter{00E0}{\`a} \DeclareUnicodeCharacter{00E1}{\'a} \DeclareUnicodeCharacter{00E2}{\^a} \DeclareUnicodeCharacter{00E3}{\~a} \DeclareUnicodeCharacter{00E4}{\"a} \DeclareUnicodeCharacter{00E5}{\aa} \DeclareUnicodeCharacter{00E6}{\ae} \DeclareUnicodeCharacter{00E7}{\cedilla{c}} \DeclareUnicodeCharacter{00E8}{\`e} \DeclareUnicodeCharacter{00E9}{\'e} \DeclareUnicodeCharacter{00EA}{\^e} \DeclareUnicodeCharacter{00EB}{\"e} \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} \DeclareUnicodeCharacter{00F0}{\dh} \DeclareUnicodeCharacter{00F1}{\~n} \DeclareUnicodeCharacter{00F2}{\`o} \DeclareUnicodeCharacter{00F3}{\'o} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} \DeclareUnicodeCharacter{00FB}{\^u} \DeclareUnicodeCharacter{00FC}{\"u} \DeclareUnicodeCharacter{00FD}{\'y} \DeclareUnicodeCharacter{00FE}{\th} \DeclareUnicodeCharacter{00FF}{\"y} \DeclareUnicodeCharacter{0100}{\=A} \DeclareUnicodeCharacter{0101}{\=a} \DeclareUnicodeCharacter{0102}{\u{A}} \DeclareUnicodeCharacter{0103}{\u{a}} \DeclareUnicodeCharacter{0104}{\ogonek{A}} \DeclareUnicodeCharacter{0105}{\ogonek{a}} \DeclareUnicodeCharacter{0106}{\'C} \DeclareUnicodeCharacter{0107}{\'c} \DeclareUnicodeCharacter{0108}{\^C} \DeclareUnicodeCharacter{0109}{\^c} \DeclareUnicodeCharacter{0118}{\ogonek{E}} \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{e}} \DeclareUnicodeCharacter{011A}{\v{E}} \DeclareUnicodeCharacter{011B}{\v{e}} \DeclareUnicodeCharacter{011C}{\^G} \DeclareUnicodeCharacter{011D}{\^g} \DeclareUnicodeCharacter{011E}{\u{G}} \DeclareUnicodeCharacter{011F}{\u{g}} \DeclareUnicodeCharacter{0120}{\dotaccent{G}} \DeclareUnicodeCharacter{0121}{\dotaccent{g}} \DeclareUnicodeCharacter{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} \DeclareUnicodeCharacter{0132}{IJ} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} \DeclareUnicodeCharacter{014C}{\=O} \DeclareUnicodeCharacter{014D}{\=o} \DeclareUnicodeCharacter{014E}{\u{O}} \DeclareUnicodeCharacter{014F}{\u{o}} \DeclareUnicodeCharacter{0150}{\H{O}} \DeclareUnicodeCharacter{0151}{\H{o}} \DeclareUnicodeCharacter{0152}{\OE} \DeclareUnicodeCharacter{0153}{\oe} \DeclareUnicodeCharacter{0154}{\'R} \DeclareUnicodeCharacter{0155}{\'r} \DeclareUnicodeCharacter{0158}{\v{R}} \DeclareUnicodeCharacter{0159}{\v{r}} \DeclareUnicodeCharacter{015A}{\'S} \DeclareUnicodeCharacter{015B}{\'s} \DeclareUnicodeCharacter{015C}{\^S} \DeclareUnicodeCharacter{015D}{\^s} \DeclareUnicodeCharacter{015E}{\cedilla{S}} \DeclareUnicodeCharacter{015F}{\cedilla{s}} \DeclareUnicodeCharacter{0160}{\v{S}} \DeclareUnicodeCharacter{0161}{\v{s}} \DeclareUnicodeCharacter{0162}{\cedilla{t}} \DeclareUnicodeCharacter{0163}{\cedilla{T}} \DeclareUnicodeCharacter{0164}{\v{T}} \DeclareUnicodeCharacter{0168}{\~U} \DeclareUnicodeCharacter{0169}{\~u} \DeclareUnicodeCharacter{016A}{\=U} \DeclareUnicodeCharacter{016B}{\=u} \DeclareUnicodeCharacter{016C}{\u{U}} \DeclareUnicodeCharacter{016D}{\u{u}} \DeclareUnicodeCharacter{016E}{\ringaccent{U}} \DeclareUnicodeCharacter{016F}{\ringaccent{u}} \DeclareUnicodeCharacter{0170}{\H{U}} \DeclareUnicodeCharacter{0171}{\H{u}} \DeclareUnicodeCharacter{0174}{\^W} \DeclareUnicodeCharacter{0175}{\^w} \DeclareUnicodeCharacter{0176}{\^Y} \DeclareUnicodeCharacter{0177}{\^y} \DeclareUnicodeCharacter{0178}{\"Y} \DeclareUnicodeCharacter{0179}{\'Z} \DeclareUnicodeCharacter{017A}{\'z} \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} \DeclareUnicodeCharacter{017C}{\dotaccent{z}} \DeclareUnicodeCharacter{017D}{\v{Z}} \DeclareUnicodeCharacter{017E}{\v{z}} \DeclareUnicodeCharacter{01C4}{D\v{Z}} \DeclareUnicodeCharacter{01C5}{D\v{z}} \DeclareUnicodeCharacter{01C6}{d\v{z}} \DeclareUnicodeCharacter{01C7}{LJ} \DeclareUnicodeCharacter{01C8}{Lj} \DeclareUnicodeCharacter{01C9}{lj} \DeclareUnicodeCharacter{01CA}{NJ} \DeclareUnicodeCharacter{01CB}{Nj} \DeclareUnicodeCharacter{01CC}{nj} \DeclareUnicodeCharacter{01CD}{\v{A}} \DeclareUnicodeCharacter{01CE}{\v{a}} \DeclareUnicodeCharacter{01CF}{\v{I}} \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} \DeclareUnicodeCharacter{01D1}{\v{O}} \DeclareUnicodeCharacter{01D2}{\v{o}} \DeclareUnicodeCharacter{01D3}{\v{U}} \DeclareUnicodeCharacter{01D4}{\v{u}} \DeclareUnicodeCharacter{01E2}{\={\AE}} \DeclareUnicodeCharacter{01E3}{\={\ae}} \DeclareUnicodeCharacter{01E6}{\v{G}} \DeclareUnicodeCharacter{01E7}{\v{g}} \DeclareUnicodeCharacter{01E8}{\v{K}} \DeclareUnicodeCharacter{01E9}{\v{k}} \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} \DeclareUnicodeCharacter{01F1}{DZ} \DeclareUnicodeCharacter{01F2}{Dz} \DeclareUnicodeCharacter{01F3}{dz} \DeclareUnicodeCharacter{01F4}{\'G} \DeclareUnicodeCharacter{01F5}{\'g} \DeclareUnicodeCharacter{01F8}{\`N} \DeclareUnicodeCharacter{01F9}{\`n} \DeclareUnicodeCharacter{01FC}{\'{\AE}} \DeclareUnicodeCharacter{01FD}{\'{\ae}} \DeclareUnicodeCharacter{01FE}{\'{\O}} \DeclareUnicodeCharacter{01FF}{\'{\o}} \DeclareUnicodeCharacter{021E}{\v{H}} \DeclareUnicodeCharacter{021F}{\v{h}} \DeclareUnicodeCharacter{0226}{\dotaccent{A}} \DeclareUnicodeCharacter{0227}{\dotaccent{a}} \DeclareUnicodeCharacter{0228}{\cedilla{E}} \DeclareUnicodeCharacter{0229}{\cedilla{e}} \DeclareUnicodeCharacter{022E}{\dotaccent{O}} \DeclareUnicodeCharacter{022F}{\dotaccent{o}} \DeclareUnicodeCharacter{0232}{\=Y} \DeclareUnicodeCharacter{0233}{\=y} \DeclareUnicodeCharacter{0237}{\dotless{j}} \DeclareUnicodeCharacter{02DB}{\ogonek{ }} \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} \DeclareUnicodeCharacter{1E20}{\=G} \DeclareUnicodeCharacter{1E21}{\=g} \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} \DeclareUnicodeCharacter{1E26}{\"H} \DeclareUnicodeCharacter{1E27}{\"h} \DeclareUnicodeCharacter{1E30}{\'K} \DeclareUnicodeCharacter{1E31}{\'k} \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} \DeclareUnicodeCharacter{1E3E}{\'M} \DeclareUnicodeCharacter{1E3F}{\'m} \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} \DeclareUnicodeCharacter{1E54}{\'P} \DeclareUnicodeCharacter{1E55}{\'p} \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} \DeclareUnicodeCharacter{1E7C}{\~V} \DeclareUnicodeCharacter{1E7D}{\~v} \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} \DeclareUnicodeCharacter{1E80}{\`W} \DeclareUnicodeCharacter{1E81}{\`w} \DeclareUnicodeCharacter{1E82}{\'W} \DeclareUnicodeCharacter{1E83}{\'w} \DeclareUnicodeCharacter{1E84}{\"W} \DeclareUnicodeCharacter{1E85}{\"w} \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} \DeclareUnicodeCharacter{1E8C}{\"X} \DeclareUnicodeCharacter{1E8D}{\"x} \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} \DeclareUnicodeCharacter{1E90}{\^Z} \DeclareUnicodeCharacter{1E91}{\^z} \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} \DeclareUnicodeCharacter{1E97}{\"t} \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} \DeclareUnicodeCharacter{1EBC}{\~E} \DeclareUnicodeCharacter{1EBD}{\~e} \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} \DeclareUnicodeCharacter{1EF2}{\`Y} \DeclareUnicodeCharacter{1EF3}{\`y} \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} \DeclareUnicodeCharacter{1EF8}{\~Y} \DeclareUnicodeCharacter{1EF9}{\~y} \DeclareUnicodeCharacter{2013}{--} \DeclareUnicodeCharacter{2014}{---} \DeclareUnicodeCharacter{2018}{\quoteleft} \DeclareUnicodeCharacter{2019}{\quoteright} \DeclareUnicodeCharacter{201A}{\quotesinglbase} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} \DeclareUnicodeCharacter{203A}{\guilsinglright} \DeclareUnicodeCharacter{20AC}{\euro} \DeclareUnicodeCharacter{2192}{\expansion} \DeclareUnicodeCharacter{21D2}{\result} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\point} \DeclareUnicodeCharacter{2261}{\equiv} }% end of \utfeightchardefs % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % The story here is that in math mode, the \char of \backslashcurfont % ends up printing the roman \ from the math symbol font (because \char % in math mode uses the \mathcode, and plain.tex sets % \mathcode`\\="026E). It seems better for @backslashchar{} to always % print a typewriter backslash, hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @normalbackslash % @backslashchar{} is for user documents. % On startup, @fixbackslash assigns: % @let \ = @normalbackslash % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. We switch back and forth between these. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. Also revert - to its normal character, in % case the active - from code has slipped in. % {@catcode`- = @active @gdef@normalturnoffactive{% @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let\=@normalbackslash @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } } % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\' in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore gsl/doc/conf.py0000664000175000017500000001456014057135461011777 0ustar eddedd# -*- coding: utf-8 -*- # # GSL documentation build configuration file, created by # sphinx-quickstart on Mon Feb 27 15:17:27 2017. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # # import os # import sys # sys.path.insert(0, os.path.abspath('.')) import sphinx_rtd_theme # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. # # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = ['sphinx.ext.imgmath'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The master toctree document. master_doc = 'index' # General information about the project. project = u'GSL' copyright = u'1996-2021 The GSL Team' author = u'The GSL Team' title = u'GNU Scientific Library' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = u'2.7' # The full version, including alpha/beta/rc tags. release = u'2.7' primary_domain = 'c' numfig = True # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', 'include.rst', 'specfunc-*.rst'] # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # #html_theme = 'alabaster' html_theme = 'sphinx_rtd_theme' html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # html_theme_options = { 'display_version': True, 'prev_next_buttons_location': 'both' } # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # -- Options for HTMLHelp output ------------------------------------------ # Output file base name for HTML help builder. htmlhelp_basename = 'GSLdoc' # -- Options for LaTeX output --------------------------------------------- my_latex_preamble = '\\DeclareMathOperator\\arccosh{arccosh} \ \\DeclareMathOperator\\arcsinh{arcsinh} \ \\DeclareMathOperator\\arctanh{arctanh} \ \\DeclareMathOperator\\arcsec{arcsec} \ \\DeclareMathOperator\\arccsc{arccsc} \ \\DeclareMathOperator\\arccot{arccot} \ \\DeclareMathOperator\\csch{csch} \ \\DeclareMathOperator\\sech{sech} \ \\DeclareMathOperator\\arcsech{arcsech} \ \\DeclareMathOperator\\arccsch{arccsch} \ \\DeclareMathOperator\\arccoth{arccoth} \ \\DeclareMathOperator\\erf{erf} \ \\DeclareMathOperator\\erfc{erfc} \ \\DeclareMathOperator\\sgn{sgn} \ \\DeclareMathOperator\\sinc{sinc} \ \\DeclareMathOperator\\Var{Var} \ \\DeclareMathOperator\\diag{diag} \ \\newcommand\\undermat[2]{\\makebox[0pt][l]{$\\smash{\\underbrace{\\phantom{\\begin{matrix}#2\\end{matrix}}}_{\\text{$#1$}}}$}#2}' my_latex_authors = 'Mark Galassi \\\\ \ Jim Davies \\\\ \ James Theiler \\\\ \ Brian Gough \\\\ \ Gerard Jungman \\\\ \ Patrick Alken \\\\ \ Michael Booth \\\\ \ Fabrice Rossi \\\\ \ Rhys Ulerich' latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # 'preamble': my_latex_preamble, # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'gsl-ref.tex', title, my_latex_authors, 'manual'), ] imgmath_latex_preamble = my_latex_preamble # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'gsl', title, [author], 1) ] # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'gsl-ref', title, author, 'GSL', 'One line description of project.', 'Miscellaneous'), ] gsl/doc/TODO0000644000175000017500000000017413536674414011171 0ustar eddedd1. in fft.rst, we reference doc/fftalgorithms.tex - make sure this file is in the right place in the final dir structure gsl/doc/_static/0000755000175000017500000000000013536674414012125 5ustar eddeddgsl/doc/_static/gpl.txt0000644000175000017500000010451313536674414013454 0ustar eddedd GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gsl/doc/_static/fdl.txt0000644000175000017500000005466213536674414013450 0ustar eddedd GNU Free Documentation License Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The "publisher" means any person or entity that distributes copies of the Document to the public. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements". 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. gsl/doc/examples/0000755000175000017500000000000014057135461012306 5ustar eddeddgsl/doc/examples/vectorview.txt0000644000175000017500000000047713536674414015263 0ustar eddeddmatrix column 0, norm = 4.31461 matrix column 1, norm = 3.1205 matrix column 2, norm = 2.19316 matrix column 3, norm = 3.26114 matrix column 4, norm = 2.53416 matrix column 5, norm = 2.57281 matrix column 6, norm = 4.20469 matrix column 7, norm = 3.65202 matrix column 8, norm = 2.08524 matrix column 9, norm = 3.07313 gsl/doc/examples/interpp.c0000644000175000017500000000160013536674414014137 0ustar eddedd#include #include #include #include #include int main (void) { int N = 4; double x[4] = {0.00, 0.10, 0.27, 0.30}; double y[4] = {0.15, 0.70, -0.10, 0.15}; /* Note: y[0] == y[3] for periodic data */ gsl_interp_accel *acc = gsl_interp_accel_alloc (); const gsl_interp_type *t = gsl_interp_cspline_periodic; gsl_spline *spline = gsl_spline_alloc (t, N); int i; double xi, yi; printf ("#m=0,S=5\n"); for (i = 0; i < N; i++) { printf ("%g %g\n", x[i], y[i]); } printf ("#m=1,S=0\n"); gsl_spline_init (spline, x, y, N); for (i = 0; i <= 100; i++) { xi = (1 - i / 100.0) * x[0] + (i / 100.0) * x[N-1]; yi = gsl_spline_eval (spline, xi, acc); printf ("%g %g\n", xi, yi); } gsl_spline_free (spline); gsl_interp_accel_free (acc); return 0; } gsl/doc/examples/sortsmall.txt0000644000175000017500000000022613536674414015076 0ustar eddedd5 smallest values from 100000 0: 0.000003489200025797 1: 0.000008199829608202 2: 0.000008953968062997 3: 0.000010712770745158 4: 0.000033531803637743 gsl/doc/examples/sum.txt0000644000175000017500000000042713536674414013665 0ustar eddeddterm-by-term sum = 1.5961632439130233 using 20 terms term-by-term sum = 1.5759958390005426 using 13 terms exact value = 1.6449340668482264 accelerated sum = 1.6449340669228176 using 13 terms estimated error = 0.0000000000888360 actual error = 0.0000000000745912 gsl/doc/examples/randwalk.c0000644000175000017500000000067313536674414014272 0ustar eddedd#include #include #include int main (void) { int i; double x = 0, y = 0, dx, dy; const gsl_rng_type * T; gsl_rng * r; gsl_rng_env_setup(); T = gsl_rng_default; r = gsl_rng_alloc (T); printf ("%g %g\n", x, y); for (i = 0; i < 10; i++) { gsl_ran_dir_2d (r, &dx, &dy); x += dx; y += dy; printf ("%g %g\n", x, y); } gsl_rng_free (r); return 0; } gsl/doc/examples/nlfit.c0000664000175000017500000001254414057135461013576 0ustar eddedd#include #include #include #include #include #include #include #include #define N 100 /* number of data points to fit */ #define TMAX (3.0) /* time variable in [0,TMAX] */ struct data { size_t n; double * t; double * y; }; int expb_f (const gsl_vector * x, void *data, gsl_vector * f) { size_t n = ((struct data *)data)->n; double *t = ((struct data *)data)->t; double *y = ((struct data *)data)->y; double A = gsl_vector_get (x, 0); double lambda = gsl_vector_get (x, 1); double b = gsl_vector_get (x, 2); size_t i; for (i = 0; i < n; i++) { /* Model Yi = A * exp(-lambda * t_i) + b */ double Yi = A * exp (-lambda * t[i]) + b; gsl_vector_set (f, i, Yi - y[i]); } return GSL_SUCCESS; } int expb_df (const gsl_vector * x, void *data, gsl_matrix * J) { size_t n = ((struct data *)data)->n; double *t = ((struct data *)data)->t; double A = gsl_vector_get (x, 0); double lambda = gsl_vector_get (x, 1); size_t i; for (i = 0; i < n; i++) { /* Jacobian matrix J(i,j) = dfi / dxj, */ /* where fi = (Yi - yi)/sigma[i], */ /* Yi = A * exp(-lambda * t_i) + b */ /* and the xj are the parameters (A,lambda,b) */ double e = exp(-lambda * t[i]); gsl_matrix_set (J, i, 0, e); gsl_matrix_set (J, i, 1, -t[i] * A * e); gsl_matrix_set (J, i, 2, 1.0); } return GSL_SUCCESS; } void callback(const size_t iter, void *params, const gsl_multifit_nlinear_workspace *w) { gsl_vector *f = gsl_multifit_nlinear_residual(w); gsl_vector *x = gsl_multifit_nlinear_position(w); double rcond; /* compute reciprocal condition number of J(x) */ gsl_multifit_nlinear_rcond(&rcond, w); fprintf(stderr, "iter %2zu: A = %.4f, lambda = %.4f, b = %.4f, cond(J) = %8.4f, |f(x)| = %.4f\n", iter, gsl_vector_get(x, 0), gsl_vector_get(x, 1), gsl_vector_get(x, 2), 1.0 / rcond, gsl_blas_dnrm2(f)); } int main (void) { const gsl_multifit_nlinear_type *T = gsl_multifit_nlinear_trust; gsl_multifit_nlinear_workspace *w; gsl_multifit_nlinear_fdf fdf; gsl_multifit_nlinear_parameters fdf_params = gsl_multifit_nlinear_default_parameters(); const size_t n = N; const size_t p = 3; gsl_vector *f; gsl_matrix *J; gsl_matrix *covar = gsl_matrix_alloc (p, p); double t[N], y[N], weights[N]; struct data d = { n, t, y }; double x_init[3] = { 1.0, 1.0, 0.0 }; /* starting values */ gsl_vector_view x = gsl_vector_view_array (x_init, p); gsl_vector_view wts = gsl_vector_view_array(weights, n); gsl_rng * r; double chisq, chisq0; int status, info; size_t i; const double xtol = 1e-8; const double gtol = 1e-8; const double ftol = 0.0; gsl_rng_env_setup(); r = gsl_rng_alloc(gsl_rng_default); /* define the function to be minimized */ fdf.f = expb_f; fdf.df = expb_df; /* set to NULL for finite-difference Jacobian */ fdf.fvv = NULL; /* not using geodesic acceleration */ fdf.n = n; fdf.p = p; fdf.params = &d; /* this is the data to be fitted */ for (i = 0; i < n; i++) { double ti = i * TMAX / (n - 1.0); double yi = 1.0 + 5 * exp (-1.5 * ti); double si = 0.1 * yi; double dy = gsl_ran_gaussian(r, si); t[i] = ti; y[i] = yi + dy; weights[i] = 1.0 / (si * si); printf ("data: %g %g %g\n", ti, y[i], si); }; /* allocate workspace with default parameters */ w = gsl_multifit_nlinear_alloc (T, &fdf_params, n, p); /* initialize solver with starting point and weights */ gsl_multifit_nlinear_winit (&x.vector, &wts.vector, &fdf, w); /* compute initial cost function */ f = gsl_multifit_nlinear_residual(w); gsl_blas_ddot(f, f, &chisq0); /* solve the system with a maximum of 100 iterations */ status = gsl_multifit_nlinear_driver(100, xtol, gtol, ftol, callback, NULL, &info, w); /* compute covariance of best fit parameters */ J = gsl_multifit_nlinear_jac(w); gsl_multifit_nlinear_covar (J, 0.0, covar); /* compute final cost */ gsl_blas_ddot(f, f, &chisq); #define FIT(i) gsl_vector_get(w->x, i) #define ERR(i) sqrt(gsl_matrix_get(covar,i,i)) fprintf(stderr, "summary from method '%s/%s'\n", gsl_multifit_nlinear_name(w), gsl_multifit_nlinear_trs_name(w)); fprintf(stderr, "number of iterations: %zu\n", gsl_multifit_nlinear_niter(w)); fprintf(stderr, "function evaluations: %zu\n", fdf.nevalf); fprintf(stderr, "Jacobian evaluations: %zu\n", fdf.nevaldf); fprintf(stderr, "reason for stopping: %s\n", (info == 1) ? "small step size" : "small gradient"); fprintf(stderr, "initial |f(x)| = %f\n", sqrt(chisq0)); fprintf(stderr, "final |f(x)| = %f\n", sqrt(chisq)); { double dof = n - p; double c = GSL_MAX_DBL(1, sqrt(chisq / dof)); fprintf(stderr, "chisq/dof = %g\n", chisq / dof); fprintf (stderr, "A = %.5f +/- %.5f\n", FIT(0), c*ERR(0)); fprintf (stderr, "lambda = %.5f +/- %.5f\n", FIT(1), c*ERR(1)); fprintf (stderr, "b = %.5f +/- %.5f\n", FIT(2), c*ERR(2)); } fprintf (stderr, "status = %s\n", gsl_strerror (status)); gsl_multifit_nlinear_free (w); gsl_matrix_free (covar); gsl_rng_free (r); return 0; } gsl/doc/examples/ntuple.txt0000644000175000017500000000537113536674414014373 0ustar eddedd0.000000 0.100000 0.000000 0.100000 0.200000 0.000000 0.200000 0.300000 0.000000 0.300000 0.400000 0.000000 0.400000 0.500000 0.000000 0.500000 0.600000 0.000000 0.600000 0.700000 0.000000 0.700000 0.800000 0.000000 0.800000 0.900000 0.000000 0.900000 1.000000 0.000000 1.000000 1.100000 0.000000 1.100000 1.200000 0.000000 1.200000 1.300000 0.000000 1.300000 1.400000 0.000000 1.400000 1.500000 0.000000 1.500000 1.600000 210.000000 1.600000 1.700000 221.000000 1.700000 1.800000 237.000000 1.800000 1.900000 207.000000 1.900000 2.000000 208.000000 2.000000 2.100000 212.000000 2.100000 2.200000 214.000000 2.200000 2.300000 177.000000 2.300000 2.400000 204.000000 2.400000 2.500000 172.000000 2.500000 2.600000 194.000000 2.600000 2.700000 167.000000 2.700000 2.800000 166.000000 2.800000 2.900000 174.000000 2.900000 3.000000 157.000000 3.000000 3.100000 159.000000 3.100000 3.200000 126.000000 3.200000 3.300000 146.000000 3.300000 3.400000 135.000000 3.400000 3.500000 129.000000 3.500000 3.600000 124.000000 3.600000 3.700000 110.000000 3.700000 3.800000 109.000000 3.800000 3.900000 120.000000 3.900000 4.000000 103.000000 4.000000 4.100000 104.000000 4.100000 4.200000 107.000000 4.200000 4.300000 104.000000 4.300000 4.400000 94.000000 4.400000 4.500000 88.000000 4.500000 4.600000 97.000000 4.600000 4.700000 82.000000 4.700000 4.800000 81.000000 4.800000 4.900000 69.000000 4.900000 5.000000 74.000000 5.000000 5.100000 67.000000 5.100000 5.200000 77.000000 5.200000 5.300000 66.000000 5.300000 5.400000 61.000000 5.400000 5.500000 66.000000 5.500000 5.600000 57.000000 5.600000 5.700000 62.000000 5.700000 5.800000 54.000000 5.800000 5.900000 52.000000 5.900000 6.000000 44.000000 6.000000 6.100000 43.000000 6.100000 6.200000 44.000000 6.200000 6.300000 46.000000 6.300000 6.400000 35.000000 6.400000 6.500000 37.000000 6.500000 6.600000 32.000000 6.600000 6.700000 37.000000 6.700000 6.800000 27.000000 6.800000 6.900000 38.000000 6.900000 7.000000 37.000000 7.000000 7.100000 38.000000 7.100000 7.200000 24.000000 7.200000 7.300000 33.000000 7.300000 7.400000 24.000000 7.400000 7.500000 25.000000 7.500000 7.600000 24.000000 7.600000 7.700000 20.000000 7.700000 7.800000 23.000000 7.800000 7.900000 19.000000 7.900000 8.000000 26.000000 8.000000 8.100000 18.000000 8.100000 8.200000 22.000000 8.200000 8.300000 22.000000 8.300000 8.400000 15.000000 8.400000 8.500000 14.000000 8.500000 8.600000 20.000000 8.600000 8.700000 17.000000 8.700000 8.800000 15.000000 8.800000 8.900000 9.000000 8.900000 9.000000 8.000000 9.000000 9.100000 12.000000 9.100000 9.200000 7.000000 9.200000 9.300000 10.000000 9.300000 9.400000 12.000000 9.400000 9.500000 9.000000 9.500000 9.600000 13.000000 9.600000 9.700000 12.000000 9.700000 9.800000 11.000000 9.800000 9.900000 13.000000 9.900000 10.000000 8.000000 gsl/doc/examples/cheb.txt0000644000175000017500000110336213536674414013765 0ustar eddedd0 0.25 0.228925 0.256331 0.0001 0.25 0.229373 0.25432 0.0002 0.25 0.229818 0.252531 0.0003 0.25 0.23026 0.250949 0.0004 0.25 0.230698 0.249561 0.0005 0.25 0.231134 0.248353 0.0006 0.25 0.231567 0.247312 0.0007 0.25 0.231997 0.246425 0.0008 0.25 0.232423 0.245683 0.0009 0.25 0.232847 0.245073 0.001 0.25 0.233268 0.244585 0.0011 0.25 0.233686 0.24421 0.0012 0.25 0.234101 0.243938 0.0013 0.25 0.234513 0.24376 0.0014 0.25 0.234922 0.243667 0.0015 0.25 0.235328 0.243653 0.0016 0.25 0.235731 0.243709 0.0017 0.25 0.236132 0.243829 0.0018 0.25 0.236529 0.244006 0.0019 0.25 0.236924 0.244233 0.002 0.25 0.237316 0.244505 0.0021 0.25 0.237705 0.244815 0.0022 0.25 0.238091 0.24516 0.0023 0.25 0.238474 0.245534 0.0024 0.25 0.238855 0.245932 0.0025 0.25 0.239232 0.246351 0.0026 0.25 0.239607 0.246786 0.0027 0.25 0.23998 0.247233 0.0028 0.25 0.240349 0.247689 0.0029 0.25 0.240716 0.248152 0.003 0.25 0.24108 0.248617 0.0031 0.25 0.241441 0.249083 0.0032 0.25 0.2418 0.249546 0.0033 0.25 0.242155 0.250005 0.0034 0.25 0.242509 0.250457 0.0035 0.25 0.242859 0.2509 0.0036 0.25 0.243207 0.251333 0.0037 0.25 0.243552 0.251754 0.0038 0.25 0.243894 0.252162 0.0039 0.25 0.244234 0.252555 0.004 0.25 0.244571 0.252932 0.0041 0.25 0.244906 0.253293 0.0042 0.25 0.245238 0.253635 0.0043 0.25 0.245567 0.25396 0.0044 0.25 0.245894 0.254265 0.0045 0.25 0.246218 0.254551 0.0046 0.25 0.24654 0.254816 0.0047 0.25 0.246859 0.255062 0.0048 0.25 0.247176 0.255287 0.0049 0.25 0.24749 0.255491 0.005 0.25 0.247801 0.255674 0.0051 0.25 0.24811 0.255837 0.0052 0.25 0.248417 0.255978 0.0053 0.25 0.248721 0.2561 0.0054 0.25 0.249022 0.2562 0.0055 0.25 0.249321 0.256281 0.0056 0.25 0.249618 0.256342 0.0057 0.25 0.249912 0.256383 0.0058 0.25 0.250204 0.256405 0.0059 0.25 0.250493 0.256408 0.006 0.25 0.25078 0.256393 0.0061 0.25 0.251064 0.25636 0.0062 0.25 0.251346 0.25631 0.0063 0.25 0.251626 0.256243 0.0064 0.25 0.251903 0.256159 0.0065 0.25 0.252178 0.256061 0.0066 0.25 0.252451 0.255947 0.0067 0.25 0.252721 0.255819 0.0068 0.25 0.252989 0.255677 0.0069 0.25 0.253254 0.255522 0.007 0.25 0.253517 0.255354 0.0071 0.25 0.253778 0.255175 0.0072 0.25 0.254037 0.254985 0.0073 0.25 0.254293 0.254784 0.0074 0.25 0.254547 0.254573 0.0075 0.25 0.254799 0.254354 0.0076 0.25 0.255048 0.254126 0.0077 0.25 0.255296 0.25389 0.0078 0.25 0.255541 0.253647 0.0079 0.25 0.255783 0.253397 0.008 0.25 0.256024 0.253142 0.0081 0.25 0.256262 0.252882 0.0082 0.25 0.256498 0.252617 0.0083 0.25 0.256732 0.252348 0.0084 0.25 0.256964 0.252076 0.0085 0.25 0.257194 0.251801 0.0086 0.25 0.257421 0.251524 0.0087 0.25 0.257646 0.251245 0.0088 0.25 0.257869 0.250966 0.0089 0.25 0.25809 0.250686 0.009 0.25 0.258309 0.250407 0.0091 0.25 0.258526 0.250128 0.0092 0.25 0.25874 0.24985 0.0093 0.25 0.258953 0.249573 0.0094 0.25 0.259163 0.249299 0.0095 0.25 0.259371 0.249028 0.0096 0.25 0.259578 0.248759 0.0097 0.25 0.259782 0.248494 0.0098 0.25 0.259984 0.248233 0.0099 0.25 0.260184 0.247976 0.01 0.25 0.260382 0.247724 0.0101 0.25 0.260578 0.247477 0.0102 0.25 0.260772 0.247235 0.0103 0.25 0.260964 0.246999 0.0104 0.25 0.261154 0.246768 0.0105 0.25 0.261342 0.246544 0.0106 0.25 0.261528 0.246327 0.0107 0.25 0.261712 0.246116 0.0108 0.25 0.261894 0.245912 0.0109 0.25 0.262074 0.245716 0.011 0.25 0.262253 0.245527 0.0111 0.25 0.262429 0.245346 0.0112 0.25 0.262603 0.245172 0.0113 0.25 0.262775 0.245007 0.0114 0.25 0.262946 0.244849 0.0115 0.25 0.263114 0.2447 0.0116 0.25 0.263281 0.24456 0.0117 0.25 0.263446 0.244427 0.0118 0.25 0.263609 0.244304 0.0119 0.25 0.26377 0.244189 0.012 0.25 0.263929 0.244083 0.0121 0.25 0.264086 0.243985 0.0122 0.25 0.264242 0.243896 0.0123 0.25 0.264396 0.243817 0.0124 0.25 0.264547 0.243746 0.0125 0.25 0.264697 0.243683 0.0126 0.25 0.264846 0.24363 0.0127 0.25 0.264992 0.243585 0.0128 0.25 0.265137 0.243549 0.0129 0.25 0.26528 0.243522 0.013 0.25 0.265421 0.243504 0.0131 0.25 0.26556 0.243493 0.0132 0.25 0.265697 0.243492 0.0133 0.25 0.265833 0.243499 0.0134 0.25 0.265967 0.243514 0.0135 0.25 0.2661 0.243537 0.0136 0.25 0.26623 0.243568 0.0137 0.25 0.266359 0.243608 0.0138 0.25 0.266486 0.243655 0.0139 0.25 0.266612 0.243709 0.014 0.25 0.266735 0.243772 0.0141 0.25 0.266857 0.243841 0.0142 0.25 0.266978 0.243918 0.0143 0.25 0.267097 0.244002 0.0144 0.25 0.267214 0.244093 0.0145 0.25 0.267329 0.244191 0.0146 0.25 0.267443 0.244295 0.0147 0.25 0.267555 0.244405 0.0148 0.25 0.267666 0.244522 0.0149 0.25 0.267774 0.244644 0.015 0.25 0.267882 0.244772 0.0151 0.25 0.267987 0.244906 0.0152 0.25 0.268092 0.245045 0.0153 0.25 0.268194 0.24519 0.0154 0.25 0.268295 0.245339 0.0155 0.25 0.268394 0.245493 0.0156 0.25 0.268492 0.245652 0.0157 0.25 0.268588 0.245815 0.0158 0.25 0.268683 0.245982 0.0159 0.25 0.268776 0.246153 0.016 0.25 0.268868 0.246327 0.0161 0.25 0.268958 0.246505 0.0162 0.25 0.269046 0.246687 0.0163 0.25 0.269133 0.246871 0.0164 0.25 0.269219 0.247058 0.0165 0.25 0.269303 0.247248 0.0166 0.25 0.269386 0.24744 0.0167 0.25 0.269467 0.247634 0.0168 0.25 0.269546 0.24783 0.0169 0.25 0.269624 0.248028 0.017 0.25 0.269701 0.248227 0.0171 0.25 0.269776 0.248428 0.0172 0.25 0.26985 0.248629 0.0173 0.25 0.269922 0.248832 0.0174 0.25 0.269993 0.249035 0.0175 0.25 0.270063 0.249239 0.0176 0.25 0.270131 0.249443 0.0177 0.25 0.270198 0.249647 0.0178 0.25 0.270263 0.249851 0.0179 0.25 0.270327 0.250054 0.018 0.25 0.270389 0.250257 0.0181 0.25 0.27045 0.25046 0.0182 0.25 0.27051 0.250661 0.0183 0.25 0.270568 0.250862 0.0184 0.25 0.270625 0.251061 0.0185 0.25 0.270681 0.251258 0.0186 0.25 0.270735 0.251454 0.0187 0.25 0.270788 0.251649 0.0188 0.25 0.27084 0.251841 0.0189 0.25 0.27089 0.252031 0.019 0.25 0.27094 0.252219 0.0191 0.25 0.270987 0.252405 0.0192 0.25 0.271034 0.252588 0.0193 0.25 0.271079 0.252768 0.0194 0.25 0.271123 0.252946 0.0195 0.25 0.271165 0.25312 0.0196 0.25 0.271207 0.253292 0.0197 0.25 0.271247 0.25346 0.0198 0.25 0.271285 0.253625 0.0199 0.25 0.271323 0.253786 0.02 0.25 0.271359 0.253944 0.0201 0.25 0.271394 0.254098 0.0202 0.25 0.271428 0.254249 0.0203 0.25 0.271461 0.254395 0.0204 0.25 0.271492 0.254538 0.0205 0.25 0.271522 0.254676 0.0206 0.25 0.271551 0.25481 0.0207 0.25 0.271579 0.25494 0.0208 0.25 0.271605 0.255066 0.0209 0.25 0.271631 0.255187 0.021 0.25 0.271655 0.255303 0.0211 0.25 0.271678 0.255416 0.0212 0.25 0.2717 0.255523 0.0213 0.25 0.271721 0.255626 0.0214 0.25 0.27174 0.255724 0.0215 0.25 0.271759 0.255817 0.0216 0.25 0.271776 0.255906 0.0217 0.25 0.271792 0.25599 0.0218 0.25 0.271807 0.256068 0.0219 0.25 0.271821 0.256142 0.022 0.25 0.271834 0.256211 0.0221 0.25 0.271846 0.256275 0.0222 0.25 0.271856 0.256334 0.0223 0.25 0.271866 0.256388 0.0224 0.25 0.271874 0.256437 0.0225 0.25 0.271881 0.256481 0.0226 0.25 0.271888 0.25652 0.0227 0.25 0.271893 0.256554 0.0228 0.25 0.271897 0.256583 0.0229 0.25 0.2719 0.256607 0.023 0.25 0.271902 0.256625 0.0231 0.25 0.271903 0.256639 0.0232 0.25 0.271903 0.256648 0.0233 0.25 0.271902 0.256652 0.0234 0.25 0.2719 0.256651 0.0235 0.25 0.271897 0.256646 0.0236 0.25 0.271893 0.256635 0.0237 0.25 0.271888 0.256619 0.0238 0.25 0.271881 0.256599 0.0239 0.25 0.271874 0.256574 0.024 0.25 0.271866 0.256545 0.0241 0.25 0.271857 0.25651 0.0242 0.25 0.271847 0.256471 0.0243 0.25 0.271836 0.256428 0.0244 0.25 0.271824 0.25638 0.0245 0.25 0.271811 0.256328 0.0246 0.25 0.271797 0.256271 0.0247 0.25 0.271782 0.25621 0.0248 0.25 0.271766 0.256145 0.0249 0.25 0.27175 0.256075 0.025 0.25 0.271732 0.256002 0.0251 0.25 0.271713 0.255924 0.0252 0.25 0.271694 0.255843 0.0253 0.25 0.271673 0.255757 0.0254 0.25 0.271652 0.255668 0.0255 0.25 0.27163 0.255575 0.0256 0.25 0.271607 0.255479 0.0257 0.25 0.271583 0.255379 0.0258 0.25 0.271558 0.255275 0.0259 0.25 0.271532 0.255169 0.026 0.25 0.271506 0.255058 0.0261 0.25 0.271478 0.254945 0.0262 0.25 0.27145 0.254829 0.0263 0.25 0.27142 0.254709 0.0264 0.25 0.27139 0.254587 0.0265 0.25 0.27136 0.254462 0.0266 0.25 0.271328 0.254334 0.0267 0.25 0.271295 0.254203 0.0268 0.25 0.271262 0.25407 0.0269 0.25 0.271228 0.253935 0.027 0.25 0.271193 0.253797 0.0271 0.25 0.271157 0.253657 0.0272 0.25 0.27112 0.253514 0.0273 0.25 0.271083 0.25337 0.0274 0.25 0.271044 0.253224 0.0275 0.25 0.271005 0.253076 0.0276 0.25 0.270966 0.252926 0.0277 0.25 0.270925 0.252775 0.0278 0.25 0.270884 0.252622 0.0279 0.25 0.270842 0.252467 0.028 0.25 0.270799 0.252312 0.0281 0.25 0.270755 0.252155 0.0282 0.25 0.270711 0.251997 0.0283 0.25 0.270666 0.251837 0.0284 0.25 0.27062 0.251677 0.0285 0.25 0.270573 0.251517 0.0286 0.25 0.270526 0.251355 0.0287 0.25 0.270478 0.251193 0.0288 0.25 0.270429 0.25103 0.0289 0.25 0.270379 0.250867 0.029 0.25 0.270329 0.250704 0.0291 0.25 0.270278 0.25054 0.0292 0.25 0.270227 0.250376 0.0293 0.25 0.270174 0.250213 0.0294 0.25 0.270122 0.250049 0.0295 0.25 0.270068 0.249886 0.0296 0.25 0.270013 0.249722 0.0297 0.25 0.269958 0.249559 0.0298 0.25 0.269903 0.249397 0.0299 0.25 0.269846 0.249235 0.03 0.25 0.269789 0.249074 0.0301 0.25 0.269732 0.248913 0.0302 0.25 0.269673 0.248753 0.0303 0.25 0.269615 0.248595 0.0304 0.25 0.269555 0.248437 0.0305 0.25 0.269495 0.24828 0.0306 0.25 0.269434 0.248124 0.0307 0.25 0.269372 0.24797 0.0308 0.25 0.26931 0.247817 0.0309 0.25 0.269248 0.247665 0.031 0.25 0.269184 0.247515 0.0311 0.25 0.26912 0.247366 0.0312 0.25 0.269056 0.247219 0.0313 0.25 0.268991 0.247074 0.0314 0.25 0.268925 0.246931 0.0315 0.25 0.268859 0.246789 0.0316 0.25 0.268792 0.246649 0.0317 0.25 0.268724 0.246512 0.0318 0.25 0.268656 0.246376 0.0319 0.25 0.268588 0.246242 0.032 0.25 0.268519 0.246111 0.0321 0.25 0.268449 0.245982 0.0322 0.25 0.268379 0.245855 0.0323 0.25 0.268308 0.245731 0.0324 0.25 0.268236 0.245609 0.0325 0.25 0.268165 0.245489 0.0326 0.25 0.268092 0.245372 0.0327 0.25 0.268019 0.245258 0.0328 0.25 0.267946 0.245146 0.0329 0.25 0.267872 0.245037 0.033 0.25 0.267797 0.24493 0.0331 0.25 0.267722 0.244827 0.0332 0.25 0.267647 0.244726 0.0333 0.25 0.267571 0.244628 0.0334 0.25 0.267494 0.244533 0.0335 0.25 0.267417 0.244441 0.0336 0.25 0.267339 0.244352 0.0337 0.25 0.267261 0.244266 0.0338 0.25 0.267183 0.244183 0.0339 0.25 0.267104 0.244103 0.034 0.25 0.267024 0.244026 0.0341 0.25 0.266945 0.243952 0.0342 0.25 0.266864 0.243881 0.0343 0.25 0.266783 0.243814 0.0344 0.25 0.266702 0.24375 0.0345 0.25 0.26662 0.243689 0.0346 0.25 0.266538 0.243631 0.0347 0.25 0.266455 0.243576 0.0348 0.25 0.266372 0.243525 0.0349 0.25 0.266289 0.243477 0.035 0.25 0.266205 0.243433 0.0351 0.25 0.266121 0.243391 0.0352 0.25 0.266036 0.243353 0.0353 0.25 0.265951 0.243318 0.0354 0.25 0.265865 0.243287 0.0355 0.25 0.265779 0.243259 0.0356 0.25 0.265692 0.243234 0.0357 0.25 0.265606 0.243213 0.0358 0.25 0.265518 0.243195 0.0359 0.25 0.265431 0.24318 0.036 0.25 0.265343 0.243169 0.0361 0.25 0.265254 0.243161 0.0362 0.25 0.265165 0.243156 0.0363 0.25 0.265076 0.243154 0.0364 0.25 0.264987 0.243156 0.0365 0.25 0.264897 0.243161 0.0366 0.25 0.264807 0.243169 0.0367 0.25 0.264716 0.243181 0.0368 0.25 0.264625 0.243196 0.0369 0.25 0.264534 0.243214 0.037 0.25 0.264442 0.243235 0.0371 0.25 0.26435 0.243259 0.0372 0.25 0.264257 0.243287 0.0373 0.25 0.264165 0.243318 0.0374 0.25 0.264072 0.243351 0.0375 0.25 0.263978 0.243388 0.0376 0.25 0.263885 0.243428 0.0377 0.25 0.263791 0.243471 0.0378 0.25 0.263696 0.243517 0.0379 0.25 0.263601 0.243566 0.038 0.25 0.263506 0.243617 0.0381 0.25 0.263411 0.243672 0.0382 0.25 0.263316 0.24373 0.0383 0.25 0.26322 0.24379 0.0384 0.25 0.263123 0.243853 0.0385 0.25 0.263027 0.243919 0.0386 0.25 0.26293 0.243987 0.0387 0.25 0.262833 0.244059 0.0388 0.25 0.262736 0.244132 0.0389 0.25 0.262638 0.244209 0.039 0.25 0.26254 0.244288 0.0391 0.25 0.262442 0.244369 0.0392 0.25 0.262344 0.244453 0.0393 0.25 0.262245 0.244539 0.0394 0.25 0.262146 0.244628 0.0395 0.25 0.262047 0.244719 0.0396 0.25 0.261947 0.244812 0.0397 0.25 0.261847 0.244908 0.0398 0.25 0.261747 0.245006 0.0399 0.25 0.261647 0.245105 0.04 0.25 0.261547 0.245207 0.0401 0.25 0.261446 0.245311 0.0402 0.25 0.261345 0.245417 0.0403 0.25 0.261244 0.245525 0.0404 0.25 0.261143 0.245634 0.0405 0.25 0.261041 0.245746 0.0406 0.25 0.260939 0.245859 0.0407 0.25 0.260837 0.245974 0.0408 0.25 0.260735 0.24609 0.0409 0.25 0.260632 0.246208 0.041 0.25 0.26053 0.246328 0.0411 0.25 0.260427 0.246449 0.0412 0.25 0.260324 0.246572 0.0413 0.25 0.26022 0.246696 0.0414 0.25 0.260117 0.246821 0.0415 0.25 0.260013 0.246948 0.0416 0.25 0.259909 0.247075 0.0417 0.25 0.259805 0.247204 0.0418 0.25 0.259701 0.247334 0.0419 0.25 0.259597 0.247465 0.042 0.25 0.259492 0.247597 0.0421 0.25 0.259387 0.24773 0.0422 0.25 0.259282 0.247864 0.0423 0.25 0.259177 0.247998 0.0424 0.25 0.259072 0.248133 0.0425 0.25 0.258967 0.248269 0.0426 0.25 0.258861 0.248406 0.0427 0.25 0.258755 0.248543 0.0428 0.25 0.25865 0.248681 0.0429 0.25 0.258544 0.248819 0.043 0.25 0.258437 0.248957 0.0431 0.25 0.258331 0.249096 0.0432 0.25 0.258225 0.249235 0.0433 0.25 0.258118 0.249374 0.0434 0.25 0.258012 0.249514 0.0435 0.25 0.257905 0.249653 0.0436 0.25 0.257798 0.249793 0.0437 0.25 0.257691 0.249933 0.0438 0.25 0.257584 0.250072 0.0439 0.25 0.257476 0.250212 0.044 0.25 0.257369 0.250351 0.0441 0.25 0.257261 0.25049 0.0442 0.25 0.257154 0.250629 0.0443 0.25 0.257046 0.250767 0.0444 0.25 0.256938 0.250905 0.0445 0.25 0.25683 0.251043 0.0446 0.25 0.256722 0.25118 0.0447 0.25 0.256614 0.251316 0.0448 0.25 0.256506 0.251452 0.0449 0.25 0.256398 0.251588 0.045 0.25 0.256289 0.251722 0.0451 0.25 0.256181 0.251856 0.0452 0.25 0.256072 0.251989 0.0453 0.25 0.255964 0.252121 0.0454 0.25 0.255855 0.252253 0.0455 0.25 0.255746 0.252383 0.0456 0.25 0.255638 0.252512 0.0457 0.25 0.255529 0.252641 0.0458 0.25 0.25542 0.252768 0.0459 0.25 0.255311 0.252894 0.046 0.25 0.255202 0.253019 0.0461 0.25 0.255093 0.253142 0.0462 0.25 0.254983 0.253265 0.0463 0.25 0.254874 0.253386 0.0464 0.25 0.254765 0.253505 0.0465 0.25 0.254656 0.253624 0.0466 0.25 0.254546 0.253741 0.0467 0.25 0.254437 0.253856 0.0468 0.25 0.254327 0.25397 0.0469 0.25 0.254218 0.254082 0.047 0.25 0.254109 0.254193 0.0471 0.25 0.253999 0.254302 0.0472 0.25 0.25389 0.254409 0.0473 0.25 0.25378 0.254515 0.0474 0.25 0.25367 0.254619 0.0475 0.25 0.253561 0.254721 0.0476 0.25 0.253451 0.254822 0.0477 0.25 0.253342 0.25492 0.0478 0.25 0.253232 0.255017 0.0479 0.25 0.253122 0.255112 0.048 0.25 0.253013 0.255204 0.0481 0.25 0.252903 0.255295 0.0482 0.25 0.252793 0.255384 0.0483 0.25 0.252684 0.255471 0.0484 0.25 0.252574 0.255556 0.0485 0.25 0.252465 0.255639 0.0486 0.25 0.252355 0.255719 0.0487 0.25 0.252245 0.255798 0.0488 0.25 0.252136 0.255874 0.0489 0.25 0.252026 0.255948 0.049 0.25 0.251917 0.25602 0.0491 0.25 0.251807 0.25609 0.0492 0.25 0.251698 0.256158 0.0493 0.25 0.251588 0.256223 0.0494 0.25 0.251479 0.256286 0.0495 0.25 0.251369 0.256347 0.0496 0.25 0.25126 0.256406 0.0497 0.25 0.251151 0.256462 0.0498 0.25 0.251041 0.256516 0.0499 0.25 0.250932 0.256567 0.05 0.25 0.250823 0.256617 0.0501 0.25 0.250713 0.256663 0.0502 0.25 0.250604 0.256708 0.0503 0.25 0.250495 0.25675 0.0504 0.25 0.250386 0.25679 0.0505 0.25 0.250277 0.256827 0.0506 0.25 0.250168 0.256862 0.0507 0.25 0.250059 0.256894 0.0508 0.25 0.249951 0.256924 0.0509 0.25 0.249842 0.256952 0.051 0.25 0.249733 0.256977 0.0511 0.25 0.249625 0.257 0.0512 0.25 0.249516 0.25702 0.0513 0.25 0.249407 0.257038 0.0514 0.25 0.249299 0.257053 0.0515 0.25 0.249191 0.257066 0.0516 0.25 0.249082 0.257077 0.0517 0.25 0.248974 0.257085 0.0518 0.25 0.248866 0.257091 0.0519 0.25 0.248758 0.257094 0.052 0.25 0.24865 0.257095 0.0521 0.25 0.248542 0.257093 0.0522 0.25 0.248435 0.257089 0.0523 0.25 0.248327 0.257083 0.0524 0.25 0.248219 0.257074 0.0525 0.25 0.248112 0.257063 0.0526 0.25 0.248005 0.25705 0.0527 0.25 0.247897 0.257034 0.0528 0.25 0.24779 0.257015 0.0529 0.25 0.247683 0.256995 0.053 0.25 0.247576 0.256972 0.0531 0.25 0.247469 0.256947 0.0532 0.25 0.247362 0.256919 0.0533 0.25 0.247256 0.256889 0.0534 0.25 0.247149 0.256857 0.0535 0.25 0.247043 0.256822 0.0536 0.25 0.246937 0.256786 0.0537 0.25 0.24683 0.256747 0.0538 0.25 0.246724 0.256706 0.0539 0.25 0.246618 0.256662 0.054 0.25 0.246513 0.256617 0.0541 0.25 0.246407 0.256569 0.0542 0.25 0.246301 0.256519 0.0543 0.25 0.246196 0.256468 0.0544 0.25 0.246091 0.256414 0.0545 0.25 0.245985 0.256357 0.0546 0.25 0.24588 0.256299 0.0547 0.25 0.245775 0.256239 0.0548 0.25 0.245671 0.256177 0.0549 0.25 0.245566 0.256113 0.055 0.25 0.245462 0.256047 0.0551 0.25 0.245357 0.255979 0.0552 0.25 0.245253 0.255909 0.0553 0.25 0.245149 0.255837 0.0554 0.25 0.245045 0.255763 0.0555 0.25 0.244941 0.255688 0.0556 0.25 0.244838 0.255611 0.0557 0.25 0.244734 0.255532 0.0558 0.25 0.244631 0.255451 0.0559 0.25 0.244528 0.255368 0.056 0.25 0.244425 0.255284 0.0561 0.25 0.244322 0.255198 0.0562 0.25 0.244219 0.255111 0.0563 0.25 0.244117 0.255022 0.0564 0.25 0.244015 0.254931 0.0565 0.25 0.243912 0.254839 0.0566 0.25 0.24381 0.254746 0.0567 0.25 0.243709 0.254651 0.0568 0.25 0.243607 0.254554 0.0569 0.25 0.243506 0.254457 0.057 0.25 0.243404 0.254357 0.0571 0.25 0.243303 0.254257 0.0572 0.25 0.243202 0.254155 0.0573 0.25 0.243101 0.254052 0.0574 0.25 0.243001 0.253948 0.0575 0.25 0.2429 0.253842 0.0576 0.25 0.2428 0.253735 0.0577 0.25 0.2427 0.253628 0.0578 0.25 0.2426 0.253519 0.0579 0.25 0.242501 0.253409 0.058 0.25 0.242401 0.253298 0.0581 0.25 0.242302 0.253186 0.0582 0.25 0.242203 0.253073 0.0583 0.25 0.242104 0.252959 0.0584 0.25 0.242005 0.252845 0.0585 0.25 0.241907 0.252729 0.0586 0.25 0.241809 0.252613 0.0587 0.25 0.24171 0.252496 0.0588 0.25 0.241613 0.252379 0.0589 0.25 0.241515 0.25226 0.059 0.25 0.241417 0.252141 0.0591 0.25 0.24132 0.252021 0.0592 0.25 0.241223 0.251901 0.0593 0.25 0.241126 0.25178 0.0594 0.25 0.24103 0.251659 0.0595 0.25 0.240933 0.251537 0.0596 0.25 0.240837 0.251415 0.0597 0.25 0.240741 0.251293 0.0598 0.25 0.240645 0.25117 0.0599 0.25 0.240549 0.251047 0.06 0.25 0.240454 0.250923 0.0601 0.25 0.240359 0.2508 0.0602 0.25 0.240264 0.250676 0.0603 0.25 0.240169 0.250552 0.0604 0.25 0.240075 0.250427 0.0605 0.25 0.23998 0.250303 0.0606 0.25 0.239886 0.250179 0.0607 0.25 0.239793 0.250055 0.0608 0.25 0.239699 0.24993 0.0609 0.25 0.239606 0.249806 0.061 0.25 0.239513 0.249682 0.0611 0.25 0.23942 0.249558 0.0612 0.25 0.239327 0.249434 0.0613 0.25 0.239235 0.24931 0.0614 0.25 0.239142 0.249187 0.0615 0.25 0.23905 0.249064 0.0616 0.25 0.238959 0.248941 0.0617 0.25 0.238867 0.248818 0.0618 0.25 0.238776 0.248696 0.0619 0.25 0.238685 0.248574 0.062 0.25 0.238594 0.248453 0.0621 0.25 0.238504 0.248332 0.0622 0.25 0.238413 0.248212 0.0623 0.25 0.238323 0.248092 0.0624 0.25 0.238234 0.247973 0.0625 0.25 0.238144 0.247855 0.0626 0.25 0.238055 0.247737 0.0627 0.25 0.237966 0.247619 0.0628 0.25 0.237877 0.247503 0.0629 0.25 0.237789 0.247387 0.063 0.25 0.2377 0.247272 0.0631 0.25 0.237612 0.247158 0.0632 0.25 0.237524 0.247045 0.0633 0.25 0.237437 0.246932 0.0634 0.25 0.23735 0.246821 0.0635 0.25 0.237263 0.24671 0.0636 0.25 0.237176 0.2466 0.0637 0.25 0.237089 0.246492 0.0638 0.25 0.237003 0.246384 0.0639 0.25 0.236917 0.246277 0.064 0.25 0.236832 0.246172 0.0641 0.25 0.236746 0.246067 0.0642 0.25 0.236661 0.245964 0.0643 0.25 0.236576 0.245862 0.0644 0.25 0.236492 0.245761 0.0645 0.25 0.236407 0.245661 0.0646 0.25 0.236323 0.245562 0.0647 0.25 0.236239 0.245465 0.0648 0.25 0.236156 0.245369 0.0649 0.25 0.236072 0.245274 0.065 0.25 0.235989 0.245181 0.0651 0.25 0.235907 0.245089 0.0652 0.25 0.235824 0.244998 0.0653 0.25 0.235742 0.244909 0.0654 0.25 0.23566 0.244821 0.0655 0.25 0.235579 0.244735 0.0656 0.25 0.235497 0.24465 0.0657 0.25 0.235416 0.244566 0.0658 0.25 0.235335 0.244484 0.0659 0.25 0.235255 0.244404 0.066 0.25 0.235175 0.244325 0.0661 0.25 0.235095 0.244248 0.0662 0.25 0.235015 0.244172 0.0663 0.25 0.234936 0.244098 0.0664 0.25 0.234857 0.244026 0.0665 0.25 0.234778 0.243955 0.0666 0.25 0.234699 0.243885 0.0667 0.25 0.234621 0.243818 0.0668 0.25 0.234543 0.243752 0.0669 0.25 0.234465 0.243688 0.067 0.25 0.234388 0.243625 0.0671 0.25 0.234311 0.243565 0.0672 0.25 0.234234 0.243506 0.0673 0.25 0.234158 0.243448 0.0674 0.25 0.234081 0.243393 0.0675 0.25 0.234006 0.243339 0.0676 0.25 0.23393 0.243287 0.0677 0.25 0.233855 0.243237 0.0678 0.25 0.23378 0.243189 0.0679 0.25 0.233705 0.243142 0.068 0.25 0.23363 0.243098 0.0681 0.25 0.233556 0.243055 0.0682 0.25 0.233482 0.243014 0.0683 0.25 0.233409 0.242975 0.0684 0.25 0.233336 0.242938 0.0685 0.25 0.233263 0.242902 0.0686 0.25 0.23319 0.242869 0.0687 0.25 0.233118 0.242837 0.0688 0.25 0.233046 0.242807 0.0689 0.25 0.232974 0.24278 0.069 0.25 0.232903 0.242754 0.0691 0.25 0.232832 0.24273 0.0692 0.25 0.232761 0.242707 0.0693 0.25 0.23269 0.242687 0.0694 0.25 0.23262 0.242669 0.0695 0.25 0.23255 0.242652 0.0696 0.25 0.232481 0.242638 0.0697 0.25 0.232411 0.242625 0.0698 0.25 0.232342 0.242615 0.0699 0.25 0.232274 0.242606 0.07 0.25 0.232205 0.242599 0.0701 0.25 0.232137 0.242594 0.0702 0.25 0.23207 0.242591 0.0703 0.25 0.232002 0.24259 0.0704 0.25 0.231935 0.242591 0.0705 0.25 0.231868 0.242593 0.0706 0.25 0.231802 0.242598 0.0707 0.25 0.231736 0.242604 0.0708 0.25 0.23167 0.242613 0.0709 0.25 0.231604 0.242623 0.071 0.25 0.231539 0.242635 0.0711 0.25 0.231474 0.242649 0.0712 0.25 0.23141 0.242665 0.0713 0.25 0.231345 0.242683 0.0714 0.25 0.231281 0.242702 0.0715 0.25 0.231218 0.242724 0.0716 0.25 0.231154 0.242747 0.0717 0.25 0.231091 0.242772 0.0718 0.25 0.231029 0.242799 0.0719 0.25 0.230966 0.242828 0.072 0.25 0.230904 0.242858 0.0721 0.25 0.230843 0.24289 0.0722 0.25 0.230781 0.242925 0.0723 0.25 0.23072 0.24296 0.0724 0.25 0.230659 0.242998 0.0725 0.25 0.230599 0.243037 0.0726 0.25 0.230539 0.243078 0.0727 0.25 0.230479 0.243121 0.0728 0.25 0.23042 0.243166 0.0729 0.25 0.23036 0.243212 0.073 0.25 0.230302 0.24326 0.0731 0.25 0.230243 0.243309 0.0732 0.25 0.230185 0.243361 0.0733 0.25 0.230127 0.243414 0.0734 0.25 0.23007 0.243468 0.0735 0.25 0.230013 0.243524 0.0736 0.25 0.229956 0.243582 0.0737 0.25 0.229899 0.243641 0.0738 0.25 0.229843 0.243702 0.0739 0.25 0.229787 0.243764 0.074 0.25 0.229732 0.243828 0.0741 0.25 0.229676 0.243893 0.0742 0.25 0.229621 0.24396 0.0743 0.25 0.229567 0.244029 0.0744 0.25 0.229513 0.244098 0.0745 0.25 0.229459 0.24417 0.0746 0.25 0.229405 0.244242 0.0747 0.25 0.229352 0.244316 0.0748 0.25 0.229299 0.244392 0.0749 0.25 0.229247 0.244468 0.075 0.25 0.229194 0.244546 0.0751 0.25 0.229142 0.244626 0.0752 0.25 0.229091 0.244706 0.0753 0.25 0.22904 0.244788 0.0754 0.25 0.228989 0.244872 0.0755 0.25 0.228938 0.244956 0.0756 0.25 0.228888 0.245042 0.0757 0.25 0.228838 0.245128 0.0758 0.25 0.228788 0.245216 0.0759 0.25 0.228739 0.245305 0.076 0.25 0.22869 0.245396 0.0761 0.25 0.228642 0.245487 0.0762 0.25 0.228593 0.245579 0.0763 0.25 0.228546 0.245673 0.0764 0.25 0.228498 0.245767 0.0765 0.25 0.228451 0.245862 0.0766 0.25 0.228404 0.245959 0.0767 0.25 0.228357 0.246056 0.0768 0.25 0.228311 0.246154 0.0769 0.25 0.228265 0.246254 0.077 0.25 0.22822 0.246354 0.0771 0.25 0.228174 0.246455 0.0772 0.25 0.22813 0.246556 0.0773 0.25 0.228085 0.246659 0.0774 0.25 0.228041 0.246762 0.0775 0.25 0.227997 0.246866 0.0776 0.25 0.227953 0.246971 0.0777 0.25 0.22791 0.247077 0.0778 0.25 0.227867 0.247183 0.0779 0.25 0.227825 0.247289 0.078 0.25 0.227783 0.247397 0.0781 0.25 0.227741 0.247505 0.0782 0.25 0.227699 0.247614 0.0783 0.25 0.227658 0.247723 0.0784 0.25 0.227617 0.247832 0.0785 0.25 0.227577 0.247943 0.0786 0.25 0.227537 0.248053 0.0787 0.25 0.227497 0.248164 0.0788 0.25 0.227458 0.248276 0.0789 0.25 0.227418 0.248388 0.079 0.25 0.22738 0.2485 0.0791 0.25 0.227341 0.248612 0.0792 0.25 0.227303 0.248725 0.0793 0.25 0.227265 0.248839 0.0794 0.25 0.227228 0.248952 0.0795 0.25 0.227191 0.249066 0.0796 0.25 0.227154 0.24918 0.0797 0.25 0.227118 0.249294 0.0798 0.25 0.227082 0.249408 0.0799 0.25 0.227046 0.249522 0.08 0.25 0.22701 0.249637 0.0801 0.25 0.226975 0.249751 0.0802 0.25 0.226941 0.249866 0.0803 0.25 0.226906 0.24998 0.0804 0.25 0.226872 0.250095 0.0805 0.25 0.226839 0.250209 0.0806 0.25 0.226805 0.250324 0.0807 0.25 0.226772 0.250438 0.0808 0.25 0.22674 0.250553 0.0809 0.25 0.226707 0.250667 0.081 0.25 0.226675 0.250781 0.0811 0.25 0.226644 0.250895 0.0812 0.25 0.226612 0.251008 0.0813 0.25 0.226581 0.251122 0.0814 0.25 0.226551 0.251235 0.0815 0.25 0.22652 0.251347 0.0816 0.25 0.22649 0.25146 0.0817 0.25 0.226461 0.251572 0.0818 0.25 0.226432 0.251684 0.0819 0.25 0.226403 0.251796 0.082 0.25 0.226374 0.251907 0.0821 0.25 0.226346 0.252017 0.0822 0.25 0.226318 0.252127 0.0823 0.25 0.22629 0.252237 0.0824 0.25 0.226263 0.252346 0.0825 0.25 0.226236 0.252455 0.0826 0.25 0.22621 0.252563 0.0827 0.25 0.226183 0.25267 0.0828 0.25 0.226158 0.252777 0.0829 0.25 0.226132 0.252884 0.083 0.25 0.226107 0.252989 0.0831 0.25 0.226082 0.253094 0.0832 0.25 0.226058 0.253199 0.0833 0.25 0.226033 0.253302 0.0834 0.25 0.22601 0.253405 0.0835 0.25 0.225986 0.253507 0.0836 0.25 0.225963 0.253609 0.0837 0.25 0.22594 0.253709 0.0838 0.25 0.225918 0.253809 0.0839 0.25 0.225895 0.253908 0.084 0.25 0.225874 0.254006 0.0841 0.25 0.225852 0.254103 0.0842 0.25 0.225831 0.254199 0.0843 0.25 0.22581 0.254295 0.0844 0.25 0.22579 0.254389 0.0845 0.25 0.22577 0.254483 0.0846 0.25 0.22575 0.254575 0.0847 0.25 0.225731 0.254666 0.0848 0.25 0.225711 0.254757 0.0849 0.25 0.225693 0.254846 0.085 0.25 0.225674 0.254935 0.0851 0.25 0.225656 0.255022 0.0852 0.25 0.225638 0.255108 0.0853 0.25 0.225621 0.255193 0.0854 0.25 0.225604 0.255277 0.0855 0.25 0.225587 0.25536 0.0856 0.25 0.225571 0.255442 0.0857 0.25 0.225555 0.255523 0.0858 0.25 0.225539 0.255602 0.0859 0.25 0.225524 0.25568 0.086 0.25 0.225509 0.255757 0.0861 0.25 0.225494 0.255833 0.0862 0.25 0.225479 0.255907 0.0863 0.25 0.225465 0.25598 0.0864 0.25 0.225452 0.256052 0.0865 0.25 0.225438 0.256123 0.0866 0.25 0.225425 0.256192 0.0867 0.25 0.225412 0.25626 0.0868 0.25 0.2254 0.256327 0.0869 0.25 0.225388 0.256392 0.087 0.25 0.225376 0.256456 0.0871 0.25 0.225365 0.256519 0.0872 0.25 0.225354 0.25658 0.0873 0.25 0.225343 0.25664 0.0874 0.25 0.225333 0.256698 0.0875 0.25 0.225323 0.256755 0.0876 0.25 0.225313 0.256811 0.0877 0.25 0.225304 0.256865 0.0878 0.25 0.225295 0.256918 0.0879 0.25 0.225286 0.256969 0.088 0.25 0.225277 0.257019 0.0881 0.25 0.225269 0.257067 0.0882 0.25 0.225262 0.257114 0.0883 0.25 0.225254 0.25716 0.0884 0.25 0.225247 0.257204 0.0885 0.25 0.22524 0.257246 0.0886 0.25 0.225234 0.257287 0.0887 0.25 0.225228 0.257326 0.0888 0.25 0.225222 0.257364 0.0889 0.25 0.225217 0.2574 0.089 0.25 0.225212 0.257435 0.0891 0.25 0.225207 0.257468 0.0892 0.25 0.225202 0.2575 0.0893 0.25 0.225198 0.25753 0.0894 0.25 0.225194 0.257559 0.0895 0.25 0.225191 0.257586 0.0896 0.25 0.225188 0.257611 0.0897 0.25 0.225185 0.257635 0.0898 0.25 0.225182 0.257658 0.0899 0.25 0.22518 0.257678 0.09 0.25 0.225178 0.257698 0.0901 0.25 0.225177 0.257715 0.0902 0.25 0.225176 0.257731 0.0903 0.25 0.225175 0.257746 0.0904 0.25 0.225174 0.257759 0.0905 0.25 0.225174 0.25777 0.0906 0.25 0.225174 0.25778 0.0907 0.25 0.225175 0.257788 0.0908 0.25 0.225175 0.257794 0.0909 0.25 0.225176 0.257799 0.091 0.25 0.225178 0.257802 0.0911 0.25 0.225179 0.257804 0.0912 0.25 0.225182 0.257804 0.0913 0.25 0.225184 0.257803 0.0914 0.25 0.225187 0.2578 0.0915 0.25 0.22519 0.257795 0.0916 0.25 0.225193 0.257789 0.0917 0.25 0.225196 0.257782 0.0918 0.25 0.2252 0.257772 0.0919 0.25 0.225205 0.257761 0.092 0.25 0.225209 0.257749 0.0921 0.25 0.225214 0.257735 0.0922 0.25 0.225219 0.25772 0.0923 0.25 0.225225 0.257702 0.0924 0.25 0.225231 0.257684 0.0925 0.25 0.225237 0.257664 0.0926 0.25 0.225243 0.257642 0.0927 0.25 0.22525 0.257619 0.0928 0.25 0.225257 0.257594 0.0929 0.25 0.225265 0.257568 0.093 0.25 0.225272 0.25754 0.0931 0.25 0.22528 0.257511 0.0932 0.25 0.225289 0.25748 0.0933 0.25 0.225297 0.257448 0.0934 0.25 0.225306 0.257414 0.0935 0.25 0.225316 0.257379 0.0936 0.25 0.225325 0.257342 0.0937 0.25 0.225335 0.257304 0.0938 0.25 0.225345 0.257264 0.0939 0.25 0.225356 0.257223 0.094 0.25 0.225367 0.257181 0.0941 0.25 0.225378 0.257137 0.0942 0.25 0.225389 0.257092 0.0943 0.25 0.225401 0.257045 0.0944 0.25 0.225413 0.256997 0.0945 0.25 0.225426 0.256948 0.0946 0.25 0.225438 0.256897 0.0947 0.25 0.225451 0.256845 0.0948 0.25 0.225465 0.256791 0.0949 0.25 0.225478 0.256736 0.095 0.25 0.225492 0.25668 0.0951 0.25 0.225506 0.256623 0.0952 0.25 0.225521 0.256564 0.0953 0.25 0.225536 0.256504 0.0954 0.25 0.225551 0.256443 0.0955 0.25 0.225566 0.25638 0.0956 0.25 0.225582 0.256316 0.0957 0.25 0.225598 0.256251 0.0958 0.25 0.225614 0.256185 0.0959 0.25 0.225631 0.256118 0.096 0.25 0.225648 0.256049 0.0961 0.25 0.225665 0.255979 0.0962 0.25 0.225683 0.255908 0.0963 0.25 0.225701 0.255836 0.0964 0.25 0.225719 0.255763 0.0965 0.25 0.225737 0.255689 0.0966 0.25 0.225756 0.255613 0.0967 0.25 0.225775 0.255537 0.0968 0.25 0.225794 0.255459 0.0969 0.25 0.225814 0.25538 0.097 0.25 0.225834 0.255301 0.0971 0.25 0.225854 0.25522 0.0972 0.25 0.225875 0.255138 0.0973 0.25 0.225895 0.255055 0.0974 0.25 0.225916 0.254972 0.0975 0.25 0.225938 0.254887 0.0976 0.25 0.225959 0.254801 0.0977 0.25 0.225981 0.254715 0.0978 0.25 0.226004 0.254627 0.0979 0.25 0.226026 0.254539 0.098 0.25 0.226049 0.25445 0.0981 0.25 0.226072 0.25436 0.0982 0.25 0.226096 0.254269 0.0983 0.25 0.226119 0.254177 0.0984 0.25 0.226143 0.254085 0.0985 0.25 0.226168 0.253992 0.0986 0.25 0.226192 0.253898 0.0987 0.25 0.226217 0.253803 0.0988 0.25 0.226242 0.253708 0.0989 0.25 0.226268 0.253611 0.099 0.25 0.226293 0.253514 0.0991 0.25 0.226319 0.253417 0.0992 0.25 0.226346 0.253319 0.0993 0.25 0.226372 0.25322 0.0994 0.25 0.226399 0.25312 0.0995 0.25 0.226426 0.25302 0.0996 0.25 0.226453 0.25292 0.0997 0.25 0.226481 0.252819 0.0998 0.25 0.226509 0.252717 0.0999 0.25 0.226537 0.252615 0.1 0.25 0.226566 0.252512 0.1001 0.25 0.226595 0.252409 0.1002 0.25 0.226624 0.252305 0.1003 0.25 0.226653 0.252201 0.1004 0.25 0.226683 0.252097 0.1005 0.25 0.226713 0.251992 0.1006 0.25 0.226743 0.251887 0.1007 0.25 0.226773 0.251781 0.1008 0.25 0.226804 0.251675 0.1009 0.25 0.226835 0.251569 0.101 0.25 0.226866 0.251462 0.1011 0.25 0.226898 0.251355 0.1012 0.25 0.22693 0.251248 0.1013 0.25 0.226962 0.251141 0.1014 0.25 0.226994 0.251033 0.1015 0.25 0.227027 0.250925 0.1016 0.25 0.22706 0.250817 0.1017 0.25 0.227093 0.250709 0.1018 0.25 0.227126 0.250601 0.1019 0.25 0.22716 0.250493 0.102 0.25 0.227194 0.250384 0.1021 0.25 0.227228 0.250276 0.1022 0.25 0.227263 0.250167 0.1023 0.25 0.227297 0.250058 0.1024 0.25 0.227332 0.24995 0.1025 0.25 0.227368 0.249841 0.1026 0.25 0.227403 0.249732 0.1027 0.25 0.227439 0.249624 0.1028 0.25 0.227475 0.249515 0.1029 0.25 0.227512 0.249406 0.103 0.25 0.227548 0.249298 0.1031 0.25 0.227585 0.24919 0.1032 0.25 0.227622 0.249082 0.1033 0.25 0.22766 0.248974 0.1034 0.25 0.227697 0.248866 0.1035 0.25 0.227735 0.248758 0.1036 0.25 0.227773 0.248651 0.1037 0.25 0.227812 0.248544 0.1038 0.25 0.22785 0.248437 0.1039 0.25 0.227889 0.24833 0.104 0.25 0.227928 0.248224 0.1041 0.25 0.227968 0.248118 0.1042 0.25 0.228008 0.248012 0.1043 0.25 0.228048 0.247907 0.1044 0.25 0.228088 0.247802 0.1045 0.25 0.228128 0.247697 0.1046 0.25 0.228169 0.247593 0.1047 0.25 0.22821 0.247489 0.1048 0.25 0.228251 0.247386 0.1049 0.25 0.228292 0.247283 0.105 0.25 0.228334 0.24718 0.1051 0.25 0.228376 0.247078 0.1052 0.25 0.228418 0.246977 0.1053 0.25 0.228461 0.246876 0.1054 0.25 0.228503 0.246776 0.1055 0.25 0.228546 0.246676 0.1056 0.25 0.228589 0.246577 0.1057 0.25 0.228633 0.246478 0.1058 0.25 0.228677 0.24638 0.1059 0.25 0.22872 0.246283 0.106 0.25 0.228765 0.246186 0.1061 0.25 0.228809 0.24609 0.1062 0.25 0.228854 0.245995 0.1063 0.25 0.228898 0.2459 0.1064 0.25 0.228944 0.245806 0.1065 0.25 0.228989 0.245713 0.1066 0.25 0.229034 0.24562 0.1067 0.25 0.22908 0.245528 0.1068 0.25 0.229126 0.245438 0.1069 0.25 0.229173 0.245347 0.107 0.25 0.229219 0.245258 0.1071 0.25 0.229266 0.24517 0.1072 0.25 0.229313 0.245082 0.1073 0.25 0.22936 0.244995 0.1074 0.25 0.229407 0.244909 0.1075 0.25 0.229455 0.244824 0.1076 0.25 0.229503 0.24474 0.1077 0.25 0.229551 0.244657 0.1078 0.25 0.2296 0.244574 0.1079 0.25 0.229648 0.244493 0.108 0.25 0.229697 0.244412 0.1081 0.25 0.229746 0.244333 0.1082 0.25 0.229795 0.244254 0.1083 0.25 0.229845 0.244177 0.1084 0.25 0.229895 0.2441 0.1085 0.25 0.229945 0.244025 0.1086 0.25 0.229995 0.24395 0.1087 0.25 0.230045 0.243877 0.1088 0.25 0.230096 0.243804 0.1089 0.25 0.230147 0.243733 0.109 0.25 0.230198 0.243663 0.1091 0.25 0.230249 0.243594 0.1092 0.25 0.2303 0.243526 0.1093 0.25 0.230352 0.243459 0.1094 0.25 0.230404 0.243393 0.1095 0.25 0.230456 0.243328 0.1096 0.25 0.230509 0.243265 0.1097 0.25 0.230561 0.243202 0.1098 0.25 0.230614 0.243141 0.1099 0.25 0.230667 0.243081 0.11 0.25 0.23072 0.243022 0.1101 0.25 0.230774 0.242964 0.1102 0.25 0.230827 0.242908 0.1103 0.25 0.230881 0.242852 0.1104 0.25 0.230935 0.242798 0.1105 0.25 0.23099 0.242745 0.1106 0.25 0.231044 0.242694 0.1107 0.25 0.231099 0.242643 0.1108 0.25 0.231154 0.242594 0.1109 0.25 0.231209 0.242546 0.111 0.25 0.231264 0.2425 0.1111 0.25 0.23132 0.242454 0.1112 0.25 0.231376 0.24241 0.1113 0.25 0.231432 0.242367 0.1114 0.25 0.231488 0.242326 0.1115 0.25 0.231544 0.242286 0.1116 0.25 0.231601 0.242247 0.1117 0.25 0.231657 0.242209 0.1118 0.25 0.231714 0.242173 0.1119 0.25 0.231771 0.242138 0.112 0.25 0.231829 0.242104 0.1121 0.25 0.231886 0.242072 0.1122 0.25 0.231944 0.242041 0.1123 0.25 0.232002 0.242011 0.1124 0.25 0.23206 0.241983 0.1125 0.25 0.232119 0.241956 0.1126 0.25 0.232177 0.241931 0.1127 0.25 0.232236 0.241906 0.1128 0.25 0.232295 0.241883 0.1129 0.25 0.232354 0.241862 0.113 0.25 0.232413 0.241842 0.1131 0.25 0.232473 0.241823 0.1132 0.25 0.232532 0.241805 0.1133 0.25 0.232592 0.241789 0.1134 0.25 0.232652 0.241775 0.1135 0.25 0.232713 0.241761 0.1136 0.25 0.232773 0.241749 0.1137 0.25 0.232834 0.241739 0.1138 0.25 0.232895 0.24173 0.1139 0.25 0.232956 0.241722 0.114 0.25 0.233017 0.241715 0.1141 0.25 0.233078 0.24171 0.1142 0.25 0.23314 0.241706 0.1143 0.25 0.233202 0.241704 0.1144 0.25 0.233263 0.241703 0.1145 0.25 0.233326 0.241704 0.1146 0.25 0.233388 0.241705 0.1147 0.25 0.23345 0.241709 0.1148 0.25 0.233513 0.241713 0.1149 0.25 0.233576 0.241719 0.115 0.25 0.233639 0.241726 0.1151 0.25 0.233702 0.241735 0.1152 0.25 0.233765 0.241745 0.1153 0.25 0.233829 0.241756 0.1154 0.25 0.233893 0.241769 0.1155 0.25 0.233956 0.241783 0.1156 0.25 0.23402 0.241799 0.1157 0.25 0.234085 0.241816 0.1158 0.25 0.234149 0.241834 0.1159 0.25 0.234214 0.241853 0.116 0.25 0.234278 0.241874 0.1161 0.25 0.234343 0.241896 0.1162 0.25 0.234408 0.24192 0.1163 0.25 0.234474 0.241944 0.1164 0.25 0.234539 0.241971 0.1165 0.25 0.234605 0.241998 0.1166 0.25 0.23467 0.242027 0.1167 0.25 0.234736 0.242057 0.1168 0.25 0.234802 0.242088 0.1169 0.25 0.234868 0.242121 0.117 0.25 0.234935 0.242155 0.1171 0.25 0.235001 0.24219 0.1172 0.25 0.235068 0.242227 0.1173 0.25 0.235135 0.242264 0.1174 0.25 0.235202 0.242304 0.1175 0.25 0.235269 0.242344 0.1176 0.25 0.235337 0.242385 0.1177 0.25 0.235404 0.242428 0.1178 0.25 0.235472 0.242472 0.1179 0.25 0.23554 0.242517 0.118 0.25 0.235608 0.242564 0.1181 0.25 0.235676 0.242612 0.1182 0.25 0.235744 0.24266 0.1183 0.25 0.235812 0.24271 0.1184 0.25 0.235881 0.242762 0.1185 0.25 0.23595 0.242814 0.1186 0.25 0.236019 0.242868 0.1187 0.25 0.236088 0.242922 0.1188 0.25 0.236157 0.242978 0.1189 0.25 0.236226 0.243035 0.119 0.25 0.236296 0.243094 0.1191 0.25 0.236365 0.243153 0.1192 0.25 0.236435 0.243213 0.1193 0.25 0.236505 0.243275 0.1194 0.25 0.236575 0.243337 0.1195 0.25 0.236645 0.243401 0.1196 0.25 0.236715 0.243466 0.1197 0.25 0.236786 0.243531 0.1198 0.25 0.236856 0.243598 0.1199 0.25 0.236927 0.243666 0.12 0.25 0.236998 0.243735 0.1201 0.25 0.237069 0.243805 0.1202 0.25 0.23714 0.243876 0.1203 0.25 0.237212 0.243947 0.1204 0.25 0.237283 0.24402 0.1205 0.25 0.237355 0.244094 0.1206 0.25 0.237426 0.244169 0.1207 0.25 0.237498 0.244245 0.1208 0.25 0.23757 0.244321 0.1209 0.25 0.237642 0.244399 0.121 0.25 0.237715 0.244477 0.1211 0.25 0.237787 0.244556 0.1212 0.25 0.23786 0.244637 0.1213 0.25 0.237932 0.244718 0.1214 0.25 0.238005 0.244799 0.1215 0.25 0.238078 0.244882 0.1216 0.25 0.238151 0.244966 0.1217 0.25 0.238224 0.24505 0.1218 0.25 0.238297 0.245135 0.1219 0.25 0.238371 0.245221 0.122 0.25 0.238444 0.245308 0.1221 0.25 0.238518 0.245395 0.1222 0.25 0.238592 0.245484 0.1223 0.25 0.238665 0.245573 0.1224 0.25 0.238739 0.245662 0.1225 0.25 0.238814 0.245752 0.1226 0.25 0.238888 0.245843 0.1227 0.25 0.238962 0.245935 0.1228 0.25 0.239037 0.246027 0.1229 0.25 0.239111 0.24612 0.123 0.25 0.239186 0.246214 0.1231 0.25 0.239261 0.246308 0.1232 0.25 0.239336 0.246403 0.1233 0.25 0.239411 0.246498 0.1234 0.25 0.239486 0.246594 0.1235 0.25 0.239561 0.246691 0.1236 0.25 0.239637 0.246788 0.1237 0.25 0.239712 0.246885 0.1238 0.25 0.239788 0.246983 0.1239 0.25 0.239864 0.247082 0.124 0.25 0.239939 0.247181 0.1241 0.25 0.240015 0.24728 0.1242 0.25 0.240091 0.24738 0.1243 0.25 0.240168 0.247481 0.1244 0.25 0.240244 0.247581 0.1245 0.25 0.24032 0.247683 0.1246 0.25 0.240397 0.247784 0.1247 0.25 0.240473 0.247886 0.1248 0.25 0.24055 0.247988 0.1249 0.25 0.240627 0.248091 0.125 0.25 0.240704 0.248194 0.1251 0.25 0.240781 0.248297 0.1252 0.25 0.240858 0.2484 0.1253 0.25 0.240935 0.248504 0.1254 0.25 0.241012 0.248608 0.1255 0.25 0.241089 0.248712 0.1256 0.25 0.241167 0.248817 0.1257 0.25 0.241245 0.248921 0.1258 0.25 0.241322 0.249026 0.1259 0.25 0.2414 0.249131 0.126 0.25 0.241478 0.249236 0.1261 0.25 0.241556 0.249341 0.1262 0.25 0.241634 0.249447 0.1263 0.25 0.241712 0.249552 0.1264 0.25 0.24179 0.249658 0.1265 0.25 0.241868 0.249764 0.1266 0.25 0.241947 0.249869 0.1267 0.25 0.242025 0.249975 0.1268 0.25 0.242104 0.250081 0.1269 0.25 0.242182 0.250187 0.127 0.25 0.242261 0.250293 0.1271 0.25 0.24234 0.250399 0.1272 0.25 0.242419 0.250504 0.1273 0.25 0.242498 0.25061 0.1274 0.25 0.242577 0.250716 0.1275 0.25 0.242656 0.250821 0.1276 0.25 0.242735 0.250927 0.1277 0.25 0.242815 0.251032 0.1278 0.25 0.242894 0.251137 0.1279 0.25 0.242973 0.251242 0.128 0.25 0.243053 0.251347 0.1281 0.25 0.243133 0.251452 0.1282 0.25 0.243212 0.251556 0.1283 0.25 0.243292 0.251661 0.1284 0.25 0.243372 0.251765 0.1285 0.25 0.243452 0.251869 0.1286 0.25 0.243532 0.251972 0.1287 0.25 0.243612 0.252076 0.1288 0.25 0.243692 0.252179 0.1289 0.25 0.243772 0.252281 0.129 0.25 0.243853 0.252384 0.1291 0.25 0.243933 0.252486 0.1292 0.25 0.244013 0.252588 0.1293 0.25 0.244094 0.252689 0.1294 0.25 0.244174 0.25279 0.1295 0.25 0.244255 0.252891 0.1296 0.25 0.244336 0.252991 0.1297 0.25 0.244416 0.253091 0.1298 0.25 0.244497 0.25319 0.1299 0.25 0.244578 0.253289 0.13 0.25 0.244659 0.253387 0.1301 0.25 0.24474 0.253485 0.1302 0.25 0.244821 0.253583 0.1303 0.25 0.244902 0.25368 0.1304 0.25 0.244983 0.253776 0.1305 0.25 0.245065 0.253872 0.1306 0.25 0.245146 0.253967 0.1307 0.25 0.245227 0.254062 0.1308 0.25 0.245309 0.254156 0.1309 0.25 0.24539 0.25425 0.131 0.25 0.245472 0.254343 0.1311 0.25 0.245553 0.254435 0.1312 0.25 0.245635 0.254527 0.1313 0.25 0.245717 0.254618 0.1314 0.25 0.245798 0.254709 0.1315 0.25 0.24588 0.254798 0.1316 0.25 0.245962 0.254888 0.1317 0.25 0.246044 0.254976 0.1318 0.25 0.246126 0.255064 0.1319 0.25 0.246208 0.255151 0.132 0.25 0.24629 0.255237 0.1321 0.25 0.246372 0.255322 0.1322 0.25 0.246454 0.255407 0.1323 0.25 0.246536 0.255491 0.1324 0.25 0.246618 0.255574 0.1325 0.25 0.246701 0.255657 0.1326 0.25 0.246783 0.255738 0.1327 0.25 0.246865 0.255819 0.1328 0.25 0.246948 0.255899 0.1329 0.25 0.24703 0.255978 0.133 0.25 0.247113 0.256056 0.1331 0.25 0.247195 0.256134 0.1332 0.25 0.247278 0.25621 0.1333 0.25 0.24736 0.256286 0.1334 0.25 0.247443 0.25636 0.1335 0.25 0.247526 0.256434 0.1336 0.25 0.247608 0.256507 0.1337 0.25 0.247691 0.256579 0.1338 0.25 0.247774 0.25665 0.1339 0.25 0.247857 0.25672 0.134 0.25 0.247939 0.256789 0.1341 0.25 0.248022 0.256858 0.1342 0.25 0.248105 0.256925 0.1343 0.25 0.248188 0.256991 0.1344 0.25 0.248271 0.257056 0.1345 0.25 0.248354 0.25712 0.1346 0.25 0.248437 0.257184 0.1347 0.25 0.24852 0.257246 0.1348 0.25 0.248603 0.257307 0.1349 0.25 0.248686 0.257367 0.135 0.25 0.248769 0.257426 0.1351 0.25 0.248852 0.257484 0.1352 0.25 0.248936 0.257541 0.1353 0.25 0.249019 0.257597 0.1354 0.25 0.249102 0.257652 0.1355 0.25 0.249185 0.257706 0.1356 0.25 0.249268 0.257758 0.1357 0.25 0.249352 0.25781 0.1358 0.25 0.249435 0.25786 0.1359 0.25 0.249518 0.25791 0.136 0.25 0.249602 0.257958 0.1361 0.25 0.249685 0.258005 0.1362 0.25 0.249768 0.258051 0.1363 0.25 0.249852 0.258096 0.1364 0.25 0.249935 0.258139 0.1365 0.25 0.250018 0.258182 0.1366 0.25 0.250102 0.258223 0.1367 0.25 0.250185 0.258263 0.1368 0.25 0.250269 0.258302 0.1369 0.25 0.250352 0.25834 0.137 0.25 0.250436 0.258377 0.1371 0.25 0.250519 0.258412 0.1372 0.25 0.250603 0.258447 0.1373 0.25 0.250686 0.25848 0.1374 0.25 0.25077 0.258512 0.1375 0.25 0.250853 0.258543 0.1376 0.25 0.250937 0.258572 0.1377 0.25 0.25102 0.258601 0.1378 0.25 0.251104 0.258628 0.1379 0.25 0.251187 0.258654 0.138 0.25 0.251271 0.258678 0.1381 0.25 0.251354 0.258702 0.1382 0.25 0.251438 0.258724 0.1383 0.25 0.251521 0.258745 0.1384 0.25 0.251605 0.258765 0.1385 0.25 0.251688 0.258783 0.1386 0.25 0.251772 0.258801 0.1387 0.25 0.251855 0.258817 0.1388 0.25 0.251939 0.258832 0.1389 0.25 0.252023 0.258845 0.139 0.25 0.252106 0.258858 0.1391 0.25 0.25219 0.258869 0.1392 0.25 0.252273 0.258879 0.1393 0.25 0.252357 0.258888 0.1394 0.25 0.25244 0.258895 0.1395 0.25 0.252524 0.258901 0.1396 0.25 0.252607 0.258906 0.1397 0.25 0.252691 0.25891 0.1398 0.25 0.252774 0.258912 0.1399 0.25 0.252858 0.258914 0.14 0.25 0.252941 0.258914 0.1401 0.25 0.253024 0.258912 0.1402 0.25 0.253108 0.25891 0.1403 0.25 0.253191 0.258906 0.1404 0.25 0.253275 0.258901 0.1405 0.25 0.253358 0.258895 0.1406 0.25 0.253441 0.258887 0.1407 0.25 0.253525 0.258879 0.1408 0.25 0.253608 0.258869 0.1409 0.25 0.253691 0.258857 0.141 0.25 0.253775 0.258845 0.1411 0.25 0.253858 0.258831 0.1412 0.25 0.253941 0.258817 0.1413 0.25 0.254025 0.2588 0.1414 0.25 0.254108 0.258783 0.1415 0.25 0.254191 0.258765 0.1416 0.25 0.254274 0.258745 0.1417 0.25 0.254357 0.258724 0.1418 0.25 0.254441 0.258702 0.1419 0.25 0.254524 0.258678 0.142 0.25 0.254607 0.258654 0.1421 0.25 0.25469 0.258628 0.1422 0.25 0.254773 0.258601 0.1423 0.25 0.254856 0.258573 0.1424 0.25 0.254939 0.258543 0.1425 0.25 0.255022 0.258513 0.1426 0.25 0.255105 0.258481 0.1427 0.25 0.255188 0.258448 0.1428 0.25 0.255271 0.258414 0.1429 0.25 0.255353 0.258379 0.143 0.25 0.255436 0.258342 0.1431 0.25 0.255519 0.258305 0.1432 0.25 0.255602 0.258266 0.1433 0.25 0.255684 0.258226 0.1434 0.25 0.255767 0.258185 0.1435 0.25 0.25585 0.258143 0.1436 0.25 0.255932 0.2581 0.1437 0.25 0.256015 0.258055 0.1438 0.25 0.256098 0.25801 0.1439 0.25 0.25618 0.257963 0.144 0.25 0.256263 0.257916 0.1441 0.25 0.256345 0.257867 0.1442 0.25 0.256427 0.257817 0.1443 0.25 0.25651 0.257766 0.1444 0.25 0.256592 0.257714 0.1445 0.25 0.256674 0.257661 0.1446 0.25 0.256757 0.257607 0.1447 0.25 0.256839 0.257551 0.1448 0.25 0.256921 0.257495 0.1449 0.25 0.257003 0.257438 0.145 0.25 0.257085 0.25738 0.1451 0.25 0.257167 0.25732 0.1452 0.25 0.257249 0.25726 0.1453 0.25 0.257331 0.257199 0.1454 0.25 0.257413 0.257136 0.1455 0.25 0.257495 0.257073 0.1456 0.25 0.257576 0.257009 0.1457 0.25 0.257658 0.256943 0.1458 0.25 0.25774 0.256877 0.1459 0.25 0.257821 0.25681 0.146 0.25 0.257903 0.256742 0.1461 0.25 0.257984 0.256673 0.1462 0.25 0.258066 0.256603 0.1463 0.25 0.258147 0.256532 0.1464 0.25 0.258229 0.25646 0.1465 0.25 0.25831 0.256388 0.1466 0.25 0.258391 0.256314 0.1467 0.25 0.258472 0.25624 0.1468 0.25 0.258554 0.256165 0.1469 0.25 0.258635 0.256088 0.147 0.25 0.258716 0.256012 0.1471 0.25 0.258797 0.255934 0.1472 0.25 0.258878 0.255855 0.1473 0.25 0.258958 0.255776 0.1474 0.25 0.259039 0.255696 0.1475 0.25 0.25912 0.255615 0.1476 0.25 0.259201 0.255533 0.1477 0.25 0.259281 0.25545 0.1478 0.25 0.259362 0.255367 0.1479 0.25 0.259442 0.255283 0.148 0.25 0.259523 0.255198 0.1481 0.25 0.259603 0.255113 0.1482 0.25 0.259683 0.255026 0.1483 0.25 0.259764 0.25494 0.1484 0.25 0.259844 0.254852 0.1485 0.25 0.259924 0.254764 0.1486 0.25 0.260004 0.254675 0.1487 0.25 0.260084 0.254585 0.1488 0.25 0.260164 0.254495 0.1489 0.25 0.260244 0.254404 0.149 0.25 0.260323 0.254313 0.1491 0.25 0.260403 0.254221 0.1492 0.25 0.260483 0.254128 0.1493 0.25 0.260562 0.254035 0.1494 0.25 0.260642 0.253941 0.1495 0.25 0.260721 0.253847 0.1496 0.25 0.2608 0.253752 0.1497 0.25 0.26088 0.253657 0.1498 0.25 0.260959 0.253561 0.1499 0.25 0.261038 0.253465 0.15 0.25 0.261117 0.253368 0.1501 0.25 0.261196 0.25327 0.1502 0.25 0.261275 0.253172 0.1503 0.25 0.261353 0.253074 0.1504 0.25 0.261432 0.252975 0.1505 0.25 0.261511 0.252876 0.1506 0.25 0.261589 0.252777 0.1507 0.25 0.261668 0.252677 0.1508 0.25 0.261746 0.252577 0.1509 0.25 0.261825 0.252476 0.151 0.25 0.261903 0.252375 0.1511 0.25 0.261981 0.252273 0.1512 0.25 0.262059 0.252172 0.1513 0.25 0.262137 0.25207 0.1514 0.25 0.262215 0.251967 0.1515 0.25 0.262293 0.251865 0.1516 0.25 0.26237 0.251762 0.1517 0.25 0.262448 0.251659 0.1518 0.25 0.262526 0.251555 0.1519 0.25 0.262603 0.251452 0.152 0.25 0.26268 0.251348 0.1521 0.25 0.262758 0.251244 0.1522 0.25 0.262835 0.251139 0.1523 0.25 0.262912 0.251035 0.1524 0.25 0.262989 0.25093 0.1525 0.25 0.263066 0.250825 0.1526 0.25 0.263143 0.25072 0.1527 0.25 0.26322 0.250615 0.1528 0.25 0.263296 0.25051 0.1529 0.25 0.263373 0.250405 0.153 0.25 0.263449 0.250299 0.1531 0.25 0.263526 0.250194 0.1532 0.25 0.263602 0.250088 0.1533 0.25 0.263678 0.249983 0.1534 0.25 0.263754 0.249877 0.1535 0.25 0.26383 0.249772 0.1536 0.25 0.263906 0.249666 0.1537 0.25 0.263982 0.24956 0.1538 0.25 0.264058 0.249455 0.1539 0.25 0.264133 0.249349 0.154 0.25 0.264209 0.249244 0.1541 0.25 0.264284 0.249138 0.1542 0.25 0.264359 0.249033 0.1543 0.25 0.264435 0.248928 0.1544 0.25 0.26451 0.248822 0.1545 0.25 0.264585 0.248717 0.1546 0.25 0.26466 0.248612 0.1547 0.25 0.264734 0.248508 0.1548 0.25 0.264809 0.248403 0.1549 0.25 0.264884 0.248298 0.155 0.25 0.264958 0.248194 0.1551 0.25 0.265032 0.24809 0.1552 0.25 0.265107 0.247986 0.1553 0.25 0.265181 0.247882 0.1554 0.25 0.265255 0.247779 0.1555 0.25 0.265329 0.247676 0.1556 0.25 0.265403 0.247573 0.1557 0.25 0.265476 0.24747 0.1558 0.25 0.26555 0.247368 0.1559 0.25 0.265624 0.247266 0.156 0.25 0.265697 0.247164 0.1561 0.25 0.26577 0.247063 0.1562 0.25 0.265844 0.246962 0.1563 0.25 0.265917 0.246861 0.1564 0.25 0.26599 0.24676 0.1565 0.25 0.266062 0.24666 0.1566 0.25 0.266135 0.246561 0.1567 0.25 0.266208 0.246462 0.1568 0.25 0.26628 0.246363 0.1569 0.25 0.266353 0.246265 0.157 0.25 0.266425 0.246167 0.1571 0.25 0.266497 0.246069 0.1572 0.25 0.266569 0.245972 0.1573 0.25 0.266641 0.245876 0.1574 0.25 0.266713 0.24578 0.1575 0.25 0.266785 0.245684 0.1576 0.25 0.266856 0.245589 0.1577 0.25 0.266928 0.245495 0.1578 0.25 0.266999 0.245401 0.1579 0.25 0.26707 0.245307 0.158 0.25 0.267141 0.245214 0.1581 0.25 0.267212 0.245122 0.1582 0.25 0.267283 0.24503 0.1583 0.25 0.267354 0.244939 0.1584 0.25 0.267424 0.244849 0.1585 0.25 0.267495 0.244759 0.1586 0.25 0.267565 0.24467 0.1587 0.25 0.267635 0.244581 0.1588 0.25 0.267706 0.244493 0.1589 0.25 0.267776 0.244406 0.159 0.25 0.267845 0.244319 0.1591 0.25 0.267915 0.244233 0.1592 0.25 0.267985 0.244148 0.1593 0.25 0.268054 0.244063 0.1594 0.25 0.268124 0.243979 0.1595 0.25 0.268193 0.243896 0.1596 0.25 0.268262 0.243814 0.1597 0.25 0.268331 0.243732 0.1598 0.25 0.2684 0.243651 0.1599 0.25 0.268468 0.243571 0.16 0.25 0.268537 0.243492 0.1601 0.25 0.268605 0.243413 0.1602 0.25 0.268674 0.243336 0.1603 0.25 0.268742 0.243259 0.1604 0.25 0.26881 0.243183 0.1605 0.25 0.268878 0.243107 0.1606 0.25 0.268946 0.243033 0.1607 0.25 0.269013 0.242959 0.1608 0.25 0.269081 0.242886 0.1609 0.25 0.269148 0.242814 0.161 0.25 0.269216 0.242743 0.1611 0.25 0.269283 0.242673 0.1612 0.25 0.26935 0.242604 0.1613 0.25 0.269416 0.242535 0.1614 0.25 0.269483 0.242468 0.1615 0.25 0.26955 0.242401 0.1616 0.25 0.269616 0.242336 0.1617 0.25 0.269682 0.242271 0.1618 0.25 0.269749 0.242207 0.1619 0.25 0.269815 0.242144 0.162 0.25 0.26988 0.242082 0.1621 0.25 0.269946 0.242021 0.1622 0.25 0.270012 0.241961 0.1623 0.25 0.270077 0.241902 0.1624 0.25 0.270143 0.241844 0.1625 0.25 0.270208 0.241787 0.1626 0.25 0.270273 0.241731 0.1627 0.25 0.270338 0.241676 0.1628 0.25 0.270402 0.241622 0.1629 0.25 0.270467 0.241569 0.163 0.25 0.270531 0.241516 0.1631 0.25 0.270596 0.241465 0.1632 0.25 0.27066 0.241415 0.1633 0.25 0.270724 0.241366 0.1634 0.25 0.270788 0.241319 0.1635 0.25 0.270851 0.241272 0.1636 0.25 0.270915 0.241226 0.1637 0.25 0.270978 0.241181 0.1638 0.25 0.271042 0.241137 0.1639 0.25 0.271105 0.241095 0.164 0.25 0.271168 0.241053 0.1641 0.25 0.271231 0.241013 0.1642 0.25 0.271293 0.240973 0.1643 0.25 0.271356 0.240935 0.1644 0.25 0.271418 0.240898 0.1645 0.25 0.27148 0.240862 0.1646 0.25 0.271542 0.240827 0.1647 0.25 0.271604 0.240793 0.1648 0.25 0.271666 0.24076 0.1649 0.25 0.271728 0.240729 0.165 0.25 0.271789 0.240698 0.1651 0.25 0.271851 0.240669 0.1652 0.25 0.271912 0.24064 0.1653 0.25 0.271973 0.240613 0.1654 0.25 0.272034 0.240587 0.1655 0.25 0.272094 0.240562 0.1656 0.25 0.272155 0.240539 0.1657 0.25 0.272215 0.240516 0.1658 0.25 0.272275 0.240494 0.1659 0.25 0.272335 0.240474 0.166 0.25 0.272395 0.240455 0.1661 0.25 0.272455 0.240437 0.1662 0.25 0.272515 0.24042 0.1663 0.25 0.272574 0.240404 0.1664 0.25 0.272633 0.24039 0.1665 0.25 0.272693 0.240376 0.1666 0.25 0.272752 0.240364 0.1667 0.25 0.27281 0.240353 0.1668 0.25 0.272869 0.240343 0.1669 0.25 0.272927 0.240334 0.167 0.25 0.272986 0.240327 0.1671 0.25 0.273044 0.24032 0.1672 0.25 0.273102 0.240315 0.1673 0.25 0.27316 0.240311 0.1674 0.25 0.273217 0.240308 0.1675 0.25 0.273275 0.240306 0.1676 0.25 0.273332 0.240306 0.1677 0.25 0.273389 0.240306 0.1678 0.25 0.273446 0.240308 0.1679 0.25 0.273503 0.240311 0.168 0.25 0.27356 0.240315 0.1681 0.25 0.273616 0.24032 0.1682 0.25 0.273673 0.240327 0.1683 0.25 0.273729 0.240334 0.1684 0.25 0.273785 0.240343 0.1685 0.25 0.273841 0.240353 0.1686 0.25 0.273897 0.240364 0.1687 0.25 0.273952 0.240376 0.1688 0.25 0.274007 0.24039 0.1689 0.25 0.274063 0.240404 0.169 0.25 0.274118 0.24042 0.1691 0.25 0.274172 0.240437 0.1692 0.25 0.274227 0.240455 0.1693 0.25 0.274282 0.240474 0.1694 0.25 0.274336 0.240494 0.1695 0.25 0.27439 0.240516 0.1696 0.25 0.274444 0.240538 0.1697 0.25 0.274498 0.240562 0.1698 0.25 0.274552 0.240587 0.1699 0.25 0.274605 0.240613 0.17 0.25 0.274658 0.24064 0.1701 0.25 0.274711 0.240668 0.1702 0.25 0.274764 0.240698 0.1703 0.25 0.274817 0.240728 0.1704 0.25 0.27487 0.24076 0.1705 0.25 0.274922 0.240792 0.1706 0.25 0.274974 0.240826 0.1707 0.25 0.275027 0.240861 0.1708 0.25 0.275078 0.240897 0.1709 0.25 0.27513 0.240934 0.171 0.25 0.275182 0.240972 0.1711 0.25 0.275233 0.241012 0.1712 0.25 0.275284 0.241052 0.1713 0.25 0.275335 0.241093 0.1714 0.25 0.275386 0.241136 0.1715 0.25 0.275437 0.241179 0.1716 0.25 0.275487 0.241224 0.1717 0.25 0.275538 0.24127 0.1718 0.25 0.275588 0.241317 0.1719 0.25 0.275638 0.241364 0.172 0.25 0.275687 0.241413 0.1721 0.25 0.275737 0.241463 0.1722 0.25 0.275787 0.241514 0.1723 0.25 0.275836 0.241566 0.1724 0.25 0.275885 0.241619 0.1725 0.25 0.275934 0.241673 0.1726 0.25 0.275982 0.241728 0.1727 0.25 0.276031 0.241784 0.1728 0.25 0.276079 0.24184 0.1729 0.25 0.276127 0.241898 0.173 0.25 0.276175 0.241957 0.1731 0.25 0.276223 0.242017 0.1732 0.25 0.276271 0.242078 0.1733 0.25 0.276318 0.24214 0.1734 0.25 0.276365 0.242202 0.1735 0.25 0.276412 0.242266 0.1736 0.25 0.276459 0.242331 0.1737 0.25 0.276506 0.242396 0.1738 0.25 0.276552 0.242463 0.1739 0.25 0.276599 0.24253 0.174 0.25 0.276645 0.242598 0.1741 0.25 0.276691 0.242667 0.1742 0.25 0.276737 0.242737 0.1743 0.25 0.276782 0.242808 0.1744 0.25 0.276827 0.24288 0.1745 0.25 0.276873 0.242953 0.1746 0.25 0.276918 0.243026 0.1747 0.25 0.276962 0.2431 0.1748 0.25 0.277007 0.243176 0.1749 0.25 0.277052 0.243252 0.175 0.25 0.277096 0.243328 0.1751 0.25 0.27714 0.243406 0.1752 0.25 0.277184 0.243484 0.1753 0.25 0.277227 0.243564 0.1754 0.25 0.277271 0.243644 0.1755 0.25 0.277314 0.243724 0.1756 0.25 0.277357 0.243806 0.1757 0.25 0.2774 0.243888 0.1758 0.25 0.277443 0.243971 0.1759 0.25 0.277486 0.244055 0.176 0.25 0.277528 0.244139 0.1761 0.25 0.27757 0.244225 0.1762 0.25 0.277612 0.244311 0.1763 0.25 0.277654 0.244397 0.1764 0.25 0.277695 0.244484 0.1765 0.25 0.277737 0.244572 0.1766 0.25 0.277778 0.244661 0.1767 0.25 0.277819 0.24475 0.1768 0.25 0.27786 0.24484 0.1769 0.25 0.2779 0.244931 0.177 0.25 0.277941 0.245022 0.1771 0.25 0.277981 0.245114 0.1772 0.25 0.278021 0.245206 0.1773 0.25 0.278061 0.245299 0.1774 0.25 0.278101 0.245393 0.1775 0.25 0.27814 0.245487 0.1776 0.25 0.278179 0.245582 0.1777 0.25 0.278218 0.245677 0.1778 0.25 0.278257 0.245773 0.1779 0.25 0.278296 0.245869 0.178 0.25 0.278334 0.245966 0.1781 0.25 0.278373 0.246063 0.1782 0.25 0.278411 0.246161 0.1783 0.25 0.278448 0.246259 0.1784 0.25 0.278486 0.246358 0.1785 0.25 0.278524 0.246457 0.1786 0.25 0.278561 0.246557 0.1787 0.25 0.278598 0.246657 0.1788 0.25 0.278635 0.246758 0.1789 0.25 0.278672 0.246859 0.179 0.25 0.278708 0.24696 0.1791 0.25 0.278744 0.247062 0.1792 0.25 0.27878 0.247164 0.1793 0.25 0.278816 0.247266 0.1794 0.25 0.278852 0.247369 0.1795 0.25 0.278887 0.247473 0.1796 0.25 0.278923 0.247576 0.1797 0.25 0.278958 0.24768 0.1798 0.25 0.278993 0.247784 0.1799 0.25 0.279027 0.247889 0.18 0.25 0.279062 0.247994 0.1801 0.25 0.279096 0.248099 0.1802 0.25 0.27913 0.248204 0.1803 0.25 0.279164 0.248309 0.1804 0.25 0.279198 0.248415 0.1805 0.25 0.279231 0.248521 0.1806 0.25 0.279265 0.248628 0.1807 0.25 0.279298 0.248734 0.1808 0.25 0.279331 0.248841 0.1809 0.25 0.279363 0.248947 0.181 0.25 0.279396 0.249054 0.1811 0.25 0.279428 0.249162 0.1812 0.25 0.27946 0.249269 0.1813 0.25 0.279492 0.249376 0.1814 0.25 0.279523 0.249484 0.1815 0.25 0.279555 0.249592 0.1816 0.25 0.279586 0.249699 0.1817 0.25 0.279617 0.249807 0.1818 0.25 0.279648 0.249915 0.1819 0.25 0.279679 0.250023 0.182 0.25 0.279709 0.250131 0.1821 0.25 0.279739 0.250239 0.1822 0.25 0.279769 0.250347 0.1823 0.25 0.279799 0.250455 0.1824 0.25 0.279829 0.250563 0.1825 0.25 0.279858 0.250671 0.1826 0.25 0.279887 0.250779 0.1827 0.25 0.279916 0.250887 0.1828 0.25 0.279945 0.250995 0.1829 0.25 0.279974 0.251103 0.183 0.25 0.280002 0.251211 0.1831 0.25 0.28003 0.251318 0.1832 0.25 0.280058 0.251426 0.1833 0.25 0.280086 0.251534 0.1834 0.25 0.280113 0.251641 0.1835 0.25 0.280141 0.251748 0.1836 0.25 0.280168 0.251855 0.1837 0.25 0.280195 0.251962 0.1838 0.25 0.280221 0.252069 0.1839 0.25 0.280248 0.252175 0.184 0.25 0.280274 0.252282 0.1841 0.25 0.2803 0.252388 0.1842 0.25 0.280326 0.252494 0.1843 0.25 0.280352 0.2526 0.1844 0.25 0.280377 0.252705 0.1845 0.25 0.280402 0.25281 0.1846 0.25 0.280427 0.252915 0.1847 0.25 0.280452 0.25302 0.1848 0.25 0.280477 0.253124 0.1849 0.25 0.280501 0.253229 0.185 0.25 0.280525 0.253332 0.1851 0.25 0.280549 0.253436 0.1852 0.25 0.280573 0.253539 0.1853 0.25 0.280596 0.253642 0.1854 0.25 0.28062 0.253744 0.1855 0.25 0.280643 0.253846 0.1856 0.25 0.280666 0.253948 0.1857 0.25 0.280689 0.254049 0.1858 0.25 0.280711 0.25415 0.1859 0.25 0.280733 0.25425 0.186 0.25 0.280755 0.254351 0.1861 0.25 0.280777 0.25445 0.1862 0.25 0.280799 0.254549 0.1863 0.25 0.28082 0.254648 0.1864 0.25 0.280842 0.254746 0.1865 0.25 0.280863 0.254844 0.1866 0.25 0.280883 0.254941 0.1867 0.25 0.280904 0.255038 0.1868 0.25 0.280924 0.255134 0.1869 0.25 0.280944 0.25523 0.187 0.25 0.280964 0.255325 0.1871 0.25 0.280984 0.25542 0.1872 0.25 0.281004 0.255514 0.1873 0.25 0.281023 0.255607 0.1874 0.25 0.281042 0.2557 0.1875 0.25 0.281061 0.255793 0.1876 0.25 0.281079 0.255884 0.1877 0.25 0.281098 0.255976 0.1878 0.25 0.281116 0.256066 0.1879 0.25 0.281134 0.256156 0.188 0.25 0.281152 0.256245 0.1881 0.25 0.28117 0.256334 0.1882 0.25 0.281187 0.256422 0.1883 0.25 0.281204 0.256509 0.1884 0.25 0.281221 0.256596 0.1885 0.25 0.281238 0.256682 0.1886 0.25 0.281254 0.256767 0.1887 0.25 0.281271 0.256852 0.1888 0.25 0.281287 0.256936 0.1889 0.25 0.281303 0.257019 0.189 0.25 0.281318 0.257101 0.1891 0.25 0.281334 0.257183 0.1892 0.25 0.281349 0.257264 0.1893 0.25 0.281364 0.257344 0.1894 0.25 0.281379 0.257423 0.1895 0.25 0.281393 0.257502 0.1896 0.25 0.281408 0.25758 0.1897 0.25 0.281422 0.257657 0.1898 0.25 0.281436 0.257733 0.1899 0.25 0.281449 0.257808 0.19 0.25 0.281463 0.257883 0.1901 0.25 0.281476 0.257957 0.1902 0.25 0.281489 0.25803 0.1903 0.25 0.281502 0.258102 0.1904 0.25 0.281515 0.258173 0.1905 0.25 0.281527 0.258244 0.1906 0.25 0.281539 0.258313 0.1907 0.25 0.281551 0.258382 0.1908 0.25 0.281563 0.25845 0.1909 0.25 0.281574 0.258517 0.191 0.25 0.281586 0.258583 0.1911 0.25 0.281597 0.258648 0.1912 0.25 0.281608 0.258712 0.1913 0.25 0.281618 0.258775 0.1914 0.25 0.281629 0.258838 0.1915 0.25 0.281639 0.258899 0.1916 0.25 0.281649 0.25896 0.1917 0.25 0.281659 0.259019 0.1918 0.25 0.281669 0.259078 0.1919 0.25 0.281678 0.259135 0.192 0.25 0.281687 0.259192 0.1921 0.25 0.281696 0.259248 0.1922 0.25 0.281705 0.259303 0.1923 0.25 0.281713 0.259356 0.1924 0.25 0.281722 0.259409 0.1925 0.25 0.28173 0.259461 0.1926 0.25 0.281737 0.259512 0.1927 0.25 0.281745 0.259562 0.1928 0.25 0.281752 0.25961 0.1929 0.25 0.28176 0.259658 0.193 0.25 0.281767 0.259705 0.1931 0.25 0.281773 0.259751 0.1932 0.25 0.28178 0.259795 0.1933 0.25 0.281786 0.259839 0.1934 0.25 0.281792 0.259882 0.1935 0.25 0.281798 0.259923 0.1936 0.25 0.281804 0.259964 0.1937 0.25 0.281809 0.260003 0.1938 0.25 0.281814 0.260042 0.1939 0.25 0.281819 0.260079 0.194 0.25 0.281824 0.260115 0.1941 0.25 0.281829 0.260151 0.1942 0.25 0.281833 0.260185 0.1943 0.25 0.281837 0.260218 0.1944 0.25 0.281841 0.26025 0.1945 0.25 0.281845 0.260281 0.1946 0.25 0.281848 0.260311 0.1947 0.25 0.281852 0.260339 0.1948 0.25 0.281855 0.260367 0.1949 0.25 0.281857 0.260394 0.195 0.25 0.28186 0.260419 0.1951 0.25 0.281862 0.260443 0.1952 0.25 0.281865 0.260467 0.1953 0.25 0.281867 0.260489 0.1954 0.25 0.281868 0.26051 0.1955 0.25 0.28187 0.26053 0.1956 0.25 0.281871 0.260548 0.1957 0.25 0.281872 0.260566 0.1958 0.25 0.281873 0.260583 0.1959 0.25 0.281874 0.260598 0.196 0.25 0.281874 0.260613 0.1961 0.25 0.281874 0.260626 0.1962 0.25 0.281874 0.260638 0.1963 0.25 0.281874 0.260649 0.1964 0.25 0.281873 0.260659 0.1965 0.25 0.281873 0.260667 0.1966 0.25 0.281872 0.260675 0.1967 0.25 0.281871 0.260681 0.1968 0.25 0.281869 0.260686 0.1969 0.25 0.281868 0.260691 0.197 0.25 0.281866 0.260694 0.1971 0.25 0.281864 0.260696 0.1972 0.25 0.281862 0.260696 0.1973 0.25 0.281859 0.260696 0.1974 0.25 0.281857 0.260694 0.1975 0.25 0.281854 0.260692 0.1976 0.25 0.281851 0.260688 0.1977 0.25 0.281847 0.260683 0.1978 0.25 0.281844 0.260677 0.1979 0.25 0.28184 0.26067 0.198 0.25 0.281836 0.260661 0.1981 0.25 0.281832 0.260652 0.1982 0.25 0.281828 0.260641 0.1983 0.25 0.281823 0.26063 0.1984 0.25 0.281818 0.260617 0.1985 0.25 0.281813 0.260603 0.1986 0.25 0.281808 0.260588 0.1987 0.25 0.281802 0.260572 0.1988 0.25 0.281796 0.260554 0.1989 0.25 0.28179 0.260536 0.199 0.25 0.281784 0.260516 0.1991 0.25 0.281778 0.260495 0.1992 0.25 0.281771 0.260474 0.1993 0.25 0.281765 0.260451 0.1994 0.25 0.281757 0.260427 0.1995 0.25 0.28175 0.260401 0.1996 0.25 0.281743 0.260375 0.1997 0.25 0.281735 0.260348 0.1998 0.25 0.281727 0.260319 0.1999 0.25 0.281719 0.26029 0.2 0.25 0.281711 0.260259 0.2001 0.25 0.281702 0.260227 0.2002 0.25 0.281693 0.260194 0.2003 0.25 0.281684 0.26016 0.2004 0.25 0.281675 0.260125 0.2005 0.25 0.281666 0.260089 0.2006 0.25 0.281656 0.260052 0.2007 0.25 0.281646 0.260014 0.2008 0.25 0.281636 0.259974 0.2009 0.25 0.281626 0.259934 0.201 0.25 0.281615 0.259893 0.2011 0.25 0.281604 0.25985 0.2012 0.25 0.281593 0.259807 0.2013 0.25 0.281582 0.259762 0.2014 0.25 0.281571 0.259716 0.2015 0.25 0.281559 0.25967 0.2016 0.25 0.281547 0.259622 0.2017 0.25 0.281535 0.259573 0.2018 0.25 0.281523 0.259523 0.2019 0.25 0.281511 0.259473 0.202 0.25 0.281498 0.259421 0.2021 0.25 0.281485 0.259368 0.2022 0.25 0.281472 0.259314 0.2023 0.25 0.281459 0.259259 0.2024 0.25 0.281445 0.259203 0.2025 0.25 0.281431 0.259147 0.2026 0.25 0.281417 0.259089 0.2027 0.25 0.281403 0.25903 0.2028 0.25 0.281388 0.25897 0.2029 0.25 0.281374 0.25891 0.203 0.25 0.281359 0.258848 0.2031 0.25 0.281344 0.258785 0.2032 0.25 0.281329 0.258722 0.2033 0.25 0.281313 0.258657 0.2034 0.25 0.281297 0.258592 0.2035 0.25 0.281281 0.258525 0.2036 0.25 0.281265 0.258458 0.2037 0.25 0.281249 0.25839 0.2038 0.25 0.281232 0.258321 0.2039 0.25 0.281215 0.258251 0.204 0.25 0.281198 0.25818 0.2041 0.25 0.281181 0.258108 0.2042 0.25 0.281164 0.258036 0.2043 0.25 0.281146 0.257962 0.2044 0.25 0.281128 0.257888 0.2045 0.25 0.28111 0.257812 0.2046 0.25 0.281092 0.257736 0.2047 0.25 0.281073 0.257659 0.2048 0.25 0.281054 0.257582 0.2049 0.25 0.281035 0.257503 0.205 0.25 0.281016 0.257424 0.2051 0.25 0.280997 0.257344 0.2052 0.25 0.280977 0.257263 0.2053 0.25 0.280957 0.257181 0.2054 0.25 0.280937 0.257098 0.2055 0.25 0.280917 0.257015 0.2056 0.25 0.280897 0.256931 0.2057 0.25 0.280876 0.256846 0.2058 0.25 0.280855 0.25676 0.2059 0.25 0.280834 0.256674 0.206 0.25 0.280812 0.256587 0.2061 0.25 0.280791 0.256499 0.2062 0.25 0.280769 0.25641 0.2063 0.25 0.280747 0.256321 0.2064 0.25 0.280725 0.256231 0.2065 0.25 0.280703 0.256141 0.2066 0.25 0.28068 0.256049 0.2067 0.25 0.280657 0.255957 0.2068 0.25 0.280634 0.255865 0.2069 0.25 0.280611 0.255771 0.207 0.25 0.280587 0.255677 0.2071 0.25 0.280564 0.255583 0.2072 0.25 0.28054 0.255488 0.2073 0.25 0.280516 0.255392 0.2074 0.25 0.280492 0.255296 0.2075 0.25 0.280467 0.255199 0.2076 0.25 0.280442 0.255101 0.2077 0.25 0.280417 0.255003 0.2078 0.25 0.280392 0.254904 0.2079 0.25 0.280367 0.254805 0.208 0.25 0.280341 0.254705 0.2081 0.25 0.280315 0.254605 0.2082 0.25 0.280289 0.254504 0.2083 0.25 0.280263 0.254402 0.2084 0.25 0.280237 0.2543 0.2085 0.25 0.28021 0.254198 0.2086 0.25 0.280183 0.254095 0.2087 0.25 0.280156 0.253992 0.2088 0.25 0.280129 0.253888 0.2089 0.25 0.280102 0.253784 0.209 0.25 0.280074 0.253679 0.2091 0.25 0.280046 0.253574 0.2092 0.25 0.280018 0.253468 0.2093 0.25 0.27999 0.253362 0.2094 0.25 0.279961 0.253256 0.2095 0.25 0.279932 0.253149 0.2096 0.25 0.279903 0.253042 0.2097 0.25 0.279874 0.252935 0.2098 0.25 0.279845 0.252827 0.2099 0.25 0.279815 0.252719 0.21 0.25 0.279786 0.25261 0.2101 0.25 0.279756 0.252501 0.2102 0.25 0.279725 0.252392 0.2103 0.25 0.279695 0.252282 0.2104 0.25 0.279664 0.252173 0.2105 0.25 0.279634 0.252063 0.2106 0.25 0.279603 0.251952 0.2107 0.25 0.279571 0.251842 0.2108 0.25 0.27954 0.251731 0.2109 0.25 0.279508 0.25162 0.211 0.25 0.279476 0.251508 0.2111 0.25 0.279444 0.251397 0.2112 0.25 0.279412 0.251285 0.2113 0.25 0.27938 0.251173 0.2114 0.25 0.279347 0.251061 0.2115 0.25 0.279314 0.250949 0.2116 0.25 0.279281 0.250837 0.2117 0.25 0.279248 0.250724 0.2118 0.25 0.279214 0.250611 0.2119 0.25 0.279181 0.250498 0.212 0.25 0.279147 0.250385 0.2121 0.25 0.279113 0.250272 0.2122 0.25 0.279078 0.250159 0.2123 0.25 0.279044 0.250046 0.2124 0.25 0.279009 0.249933 0.2125 0.25 0.278974 0.249819 0.2126 0.25 0.278939 0.249706 0.2127 0.25 0.278904 0.249593 0.2128 0.25 0.278868 0.249479 0.2129 0.25 0.278832 0.249366 0.213 0.25 0.278796 0.249252 0.2131 0.25 0.27876 0.249139 0.2132 0.25 0.278724 0.249025 0.2133 0.25 0.278687 0.248912 0.2134 0.25 0.278651 0.248799 0.2135 0.25 0.278614 0.248685 0.2136 0.25 0.278577 0.248572 0.2137 0.25 0.278539 0.248459 0.2138 0.25 0.278502 0.248346 0.2139 0.25 0.278464 0.248233 0.214 0.25 0.278426 0.24812 0.2141 0.25 0.278388 0.248007 0.2142 0.25 0.278349 0.247895 0.2143 0.25 0.278311 0.247782 0.2144 0.25 0.278272 0.24767 0.2145 0.25 0.278233 0.247558 0.2146 0.25 0.278194 0.247446 0.2147 0.25 0.278155 0.247334 0.2148 0.25 0.278115 0.247223 0.2149 0.25 0.278075 0.247111 0.215 0.25 0.278035 0.247 0.2151 0.25 0.277995 0.246889 0.2152 0.25 0.277955 0.246779 0.2153 0.25 0.277914 0.246668 0.2154 0.25 0.277873 0.246558 0.2155 0.25 0.277833 0.246448 0.2156 0.25 0.277791 0.246339 0.2157 0.25 0.27775 0.24623 0.2158 0.25 0.277708 0.246121 0.2159 0.25 0.277667 0.246012 0.216 0.25 0.277625 0.245904 0.2161 0.25 0.277583 0.245796 0.2162 0.25 0.27754 0.245688 0.2163 0.25 0.277498 0.245581 0.2164 0.25 0.277455 0.245474 0.2165 0.25 0.277412 0.245368 0.2166 0.25 0.277369 0.245262 0.2167 0.25 0.277326 0.245156 0.2168 0.25 0.277282 0.245051 0.2169 0.25 0.277238 0.244946 0.217 0.25 0.277195 0.244842 0.2171 0.25 0.277151 0.244738 0.2172 0.25 0.277106 0.244634 0.2173 0.25 0.277062 0.244531 0.2174 0.25 0.277017 0.244429 0.2175 0.25 0.276972 0.244327 0.2176 0.25 0.276927 0.244225 0.2177 0.25 0.276882 0.244124 0.2178 0.25 0.276836 0.244024 0.2179 0.25 0.276791 0.243924 0.218 0.25 0.276745 0.243824 0.2181 0.25 0.276699 0.243726 0.2182 0.25 0.276653 0.243627 0.2183 0.25 0.276606 0.24353 0.2184 0.25 0.27656 0.243432 0.2185 0.25 0.276513 0.243336 0.2186 0.25 0.276466 0.24324 0.2187 0.25 0.276419 0.243145 0.2188 0.25 0.276371 0.24305 0.2189 0.25 0.276324 0.242956 0.219 0.25 0.276276 0.242862 0.2191 0.25 0.276228 0.242769 0.2192 0.25 0.27618 0.242677 0.2193 0.25 0.276132 0.242586 0.2194 0.25 0.276083 0.242495 0.2195 0.25 0.276035 0.242405 0.2196 0.25 0.275986 0.242315 0.2197 0.25 0.275937 0.242227 0.2198 0.25 0.275887 0.242138 0.2199 0.25 0.275838 0.242051 0.22 0.25 0.275788 0.241965 0.2201 0.25 0.275739 0.241879 0.2202 0.25 0.275689 0.241794 0.2203 0.25 0.275638 0.241709 0.2204 0.25 0.275588 0.241626 0.2205 0.25 0.275537 0.241543 0.2206 0.25 0.275487 0.241461 0.2207 0.25 0.275436 0.241379 0.2208 0.25 0.275385 0.241299 0.2209 0.25 0.275333 0.241219 0.221 0.25 0.275282 0.24114 0.2211 0.25 0.27523 0.241062 0.2212 0.25 0.275178 0.240985 0.2213 0.25 0.275126 0.240909 0.2214 0.25 0.275074 0.240833 0.2215 0.25 0.275022 0.240758 0.2216 0.25 0.274969 0.240685 0.2217 0.25 0.274916 0.240612 0.2218 0.25 0.274863 0.240539 0.2219 0.25 0.27481 0.240468 0.222 0.25 0.274757 0.240398 0.2221 0.25 0.274703 0.240328 0.2222 0.25 0.27465 0.24026 0.2223 0.25 0.274596 0.240192 0.2224 0.25 0.274542 0.240125 0.2225 0.25 0.274488 0.24006 0.2226 0.25 0.274433 0.239995 0.2227 0.25 0.274379 0.239931 0.2228 0.25 0.274324 0.239868 0.2229 0.25 0.274269 0.239806 0.223 0.25 0.274214 0.239744 0.2231 0.25 0.274158 0.239684 0.2232 0.25 0.274103 0.239625 0.2233 0.25 0.274047 0.239567 0.2234 0.25 0.273991 0.239509 0.2235 0.25 0.273935 0.239453 0.2236 0.25 0.273879 0.239398 0.2237 0.25 0.273823 0.239344 0.2238 0.25 0.273766 0.23929 0.2239 0.25 0.27371 0.239238 0.224 0.25 0.273653 0.239187 0.2241 0.25 0.273596 0.239136 0.2242 0.25 0.273538 0.239087 0.2243 0.25 0.273481 0.239039 0.2244 0.25 0.273423 0.238992 0.2245 0.25 0.273366 0.238945 0.2246 0.25 0.273308 0.2389 0.2247 0.25 0.273249 0.238856 0.2248 0.25 0.273191 0.238813 0.2249 0.25 0.273133 0.238771 0.225 0.25 0.273074 0.23873 0.2251 0.25 0.273015 0.23869 0.2252 0.25 0.272956 0.238652 0.2253 0.25 0.272897 0.238614 0.2254 0.25 0.272838 0.238577 0.2255 0.25 0.272778 0.238541 0.2256 0.25 0.272719 0.238507 0.2257 0.25 0.272659 0.238474 0.2258 0.25 0.272599 0.238441 0.2259 0.25 0.272538 0.23841 0.226 0.25 0.272478 0.23838 0.2261 0.25 0.272418 0.238351 0.2262 0.25 0.272357 0.238323 0.2263 0.25 0.272296 0.238296 0.2264 0.25 0.272235 0.23827 0.2265 0.25 0.272174 0.238246 0.2266 0.25 0.272112 0.238222 0.2267 0.25 0.272051 0.2382 0.2268 0.25 0.271989 0.238178 0.2269 0.25 0.271927 0.238158 0.227 0.25 0.271865 0.238139 0.2271 0.25 0.271803 0.238121 0.2272 0.25 0.271741 0.238104 0.2273 0.25 0.271678 0.238089 0.2274 0.25 0.271615 0.238074 0.2275 0.25 0.271552 0.238061 0.2276 0.25 0.271489 0.238048 0.2277 0.25 0.271426 0.238037 0.2278 0.25 0.271363 0.238027 0.2279 0.25 0.271299 0.238018 0.228 0.25 0.271236 0.238011 0.2281 0.25 0.271172 0.238004 0.2282 0.25 0.271108 0.237999 0.2283 0.25 0.271043 0.237994 0.2284 0.25 0.270979 0.237991 0.2285 0.25 0.270915 0.237989 0.2286 0.25 0.27085 0.237988 0.2287 0.25 0.270785 0.237988 0.2288 0.25 0.27072 0.23799 0.2289 0.25 0.270655 0.237992 0.229 0.25 0.27059 0.237996 0.2291 0.25 0.270524 0.238001 0.2292 0.25 0.270458 0.238007 0.2293 0.25 0.270393 0.238014 0.2294 0.25 0.270327 0.238022 0.2295 0.25 0.270261 0.238032 0.2296 0.25 0.270194 0.238042 0.2297 0.25 0.270128 0.238054 0.2298 0.25 0.270061 0.238067 0.2299 0.25 0.269994 0.238081 0.23 0.25 0.269928 0.238096 0.2301 0.25 0.26986 0.238112 0.2302 0.25 0.269793 0.23813 0.2303 0.25 0.269726 0.238148 0.2304 0.25 0.269658 0.238168 0.2305 0.25 0.269591 0.238189 0.2306 0.25 0.269523 0.238211 0.2307 0.25 0.269455 0.238234 0.2308 0.25 0.269387 0.238258 0.2309 0.25 0.269318 0.238283 0.231 0.25 0.26925 0.23831 0.2311 0.25 0.269181 0.238337 0.2312 0.25 0.269112 0.238366 0.2313 0.25 0.269043 0.238396 0.2314 0.25 0.268974 0.238427 0.2315 0.25 0.268905 0.238459 0.2316 0.25 0.268836 0.238492 0.2317 0.25 0.268766 0.238526 0.2318 0.25 0.268697 0.238561 0.2319 0.25 0.268627 0.238598 0.232 0.25 0.268557 0.238635 0.2321 0.25 0.268487 0.238674 0.2322 0.25 0.268416 0.238714 0.2323 0.25 0.268346 0.238755 0.2324 0.25 0.268275 0.238797 0.2325 0.25 0.268205 0.23884 0.2326 0.25 0.268134 0.238884 0.2327 0.25 0.268063 0.238929 0.2328 0.25 0.267991 0.238975 0.2329 0.25 0.26792 0.239023 0.233 0.25 0.267849 0.239071 0.2331 0.25 0.267777 0.23912 0.2332 0.25 0.267705 0.239171 0.2333 0.25 0.267633 0.239222 0.2334 0.25 0.267561 0.239275 0.2335 0.25 0.267489 0.239329 0.2336 0.25 0.267417 0.239383 0.2337 0.25 0.267344 0.239439 0.2338 0.25 0.267272 0.239496 0.2339 0.25 0.267199 0.239553 0.234 0.25 0.267126 0.239612 0.2341 0.25 0.267053 0.239672 0.2342 0.25 0.26698 0.239733 0.2343 0.25 0.266906 0.239794 0.2344 0.25 0.266833 0.239857 0.2345 0.25 0.266759 0.239921 0.2346 0.25 0.266686 0.239986 0.2347 0.25 0.266612 0.240052 0.2348 0.25 0.266538 0.240118 0.2349 0.25 0.266463 0.240186 0.235 0.25 0.266389 0.240255 0.2351 0.25 0.266315 0.240324 0.2352 0.25 0.26624 0.240395 0.2353 0.25 0.266165 0.240466 0.2354 0.25 0.26609 0.240539 0.2355 0.25 0.266015 0.240612 0.2356 0.25 0.26594 0.240686 0.2357 0.25 0.265865 0.240761 0.2358 0.25 0.26579 0.240838 0.2359 0.25 0.265714 0.240915 0.236 0.25 0.265638 0.240992 0.2361 0.25 0.265562 0.241071 0.2362 0.25 0.265486 0.241151 0.2363 0.25 0.26541 0.241232 0.2364 0.25 0.265334 0.241313 0.2365 0.25 0.265258 0.241395 0.2366 0.25 0.265181 0.241478 0.2367 0.25 0.265105 0.241562 0.2368 0.25 0.265028 0.241647 0.2369 0.25 0.264951 0.241733 0.237 0.25 0.264874 0.241819 0.2371 0.25 0.264797 0.241907 0.2372 0.25 0.264719 0.241995 0.2373 0.25 0.264642 0.242084 0.2374 0.25 0.264564 0.242174 0.2375 0.25 0.264487 0.242264 0.2376 0.25 0.264409 0.242355 0.2377 0.25 0.264331 0.242447 0.2378 0.25 0.264253 0.24254 0.2379 0.25 0.264175 0.242634 0.238 0.25 0.264096 0.242728 0.2381 0.25 0.264018 0.242823 0.2382 0.25 0.263939 0.242919 0.2383 0.25 0.263861 0.243015 0.2384 0.25 0.263782 0.243113 0.2385 0.25 0.263703 0.243211 0.2386 0.25 0.263624 0.243309 0.2387 0.25 0.263545 0.243409 0.2388 0.25 0.263465 0.243508 0.2389 0.25 0.263386 0.243609 0.239 0.25 0.263306 0.24371 0.2391 0.25 0.263227 0.243812 0.2392 0.25 0.263147 0.243915 0.2393 0.25 0.263067 0.244018 0.2394 0.25 0.262987 0.244122 0.2395 0.25 0.262907 0.244226 0.2396 0.25 0.262826 0.244332 0.2397 0.25 0.262746 0.244437 0.2398 0.25 0.262665 0.244543 0.2399 0.25 0.262585 0.24465 0.24 0.25 0.262504 0.244758 0.2401 0.25 0.262423 0.244866 0.2402 0.25 0.262342 0.244974 0.2403 0.25 0.262261 0.245083 0.2404 0.25 0.262179 0.245193 0.2405 0.25 0.262098 0.245303 0.2406 0.25 0.262017 0.245413 0.2407 0.25 0.261935 0.245524 0.2408 0.25 0.261853 0.245636 0.2409 0.25 0.261771 0.245748 0.241 0.25 0.261689 0.24586 0.2411 0.25 0.261607 0.245973 0.2412 0.25 0.261525 0.246087 0.2413 0.25 0.261443 0.246201 0.2414 0.25 0.26136 0.246315 0.2415 0.25 0.261278 0.24643 0.2416 0.25 0.261195 0.246545 0.2417 0.25 0.261112 0.24666 0.2418 0.25 0.26103 0.246776 0.2419 0.25 0.260947 0.246892 0.242 0.25 0.260863 0.247009 0.2421 0.25 0.26078 0.247126 0.2422 0.25 0.260697 0.247243 0.2423 0.25 0.260613 0.247361 0.2424 0.25 0.26053 0.247479 0.2425 0.25 0.260446 0.247597 0.2426 0.25 0.260363 0.247716 0.2427 0.25 0.260279 0.247834 0.2428 0.25 0.260195 0.247954 0.2429 0.25 0.260111 0.248073 0.243 0.25 0.260026 0.248193 0.2431 0.25 0.259942 0.248313 0.2432 0.25 0.259858 0.248433 0.2433 0.25 0.259773 0.248553 0.2434 0.25 0.259689 0.248674 0.2435 0.25 0.259604 0.248795 0.2436 0.25 0.259519 0.248916 0.2437 0.25 0.259434 0.249037 0.2438 0.25 0.259349 0.249158 0.2439 0.25 0.259264 0.24928 0.244 0.25 0.259179 0.249401 0.2441 0.25 0.259093 0.249523 0.2442 0.25 0.259008 0.249645 0.2443 0.25 0.258922 0.249767 0.2444 0.25 0.258837 0.249889 0.2445 0.25 0.258751 0.250011 0.2446 0.25 0.258665 0.250134 0.2447 0.25 0.258579 0.250256 0.2448 0.25 0.258493 0.250379 0.2449 0.25 0.258407 0.250501 0.245 0.25 0.258321 0.250624 0.2451 0.25 0.258234 0.250746 0.2452 0.25 0.258148 0.250869 0.2453 0.25 0.258061 0.250992 0.2454 0.25 0.257975 0.251114 0.2455 0.25 0.257888 0.251237 0.2456 0.25 0.257801 0.251359 0.2457 0.25 0.257714 0.251482 0.2458 0.25 0.257627 0.251604 0.2459 0.25 0.25754 0.251727 0.246 0.25 0.257453 0.251849 0.2461 0.25 0.257366 0.251971 0.2462 0.25 0.257278 0.252094 0.2463 0.25 0.257191 0.252216 0.2464 0.25 0.257103 0.252338 0.2465 0.25 0.257016 0.252459 0.2466 0.25 0.256928 0.252581 0.2467 0.25 0.25684 0.252703 0.2468 0.25 0.256752 0.252824 0.2469 0.25 0.256664 0.252945 0.247 0.25 0.256576 0.253066 0.2471 0.25 0.256488 0.253187 0.2472 0.25 0.256399 0.253308 0.2473 0.25 0.256311 0.253428 0.2474 0.25 0.256222 0.253549 0.2475 0.25 0.256134 0.253669 0.2476 0.25 0.256045 0.253788 0.2477 0.25 0.255956 0.253908 0.2478 0.25 0.255868 0.254027 0.2479 0.25 0.255779 0.254146 0.248 0.25 0.25569 0.254265 0.2481 0.25 0.255601 0.254383 0.2482 0.25 0.255512 0.254501 0.2483 0.25 0.255422 0.254619 0.2484 0.25 0.255333 0.254736 0.2485 0.25 0.255244 0.254853 0.2486 0.25 0.255154 0.25497 0.2487 0.25 0.255064 0.255086 0.2488 0.25 0.254975 0.255202 0.2489 0.25 0.254885 0.255318 0.249 0.25 0.254795 0.255433 0.2491 0.25 0.254705 0.255547 0.2492 0.25 0.254615 0.255662 0.2493 0.25 0.254525 0.255776 0.2494 0.25 0.254435 0.255889 0.2495 0.25 0.254345 0.256002 0.2496 0.25 0.254255 0.256115 0.2497 0.25 0.254164 0.256227 0.2498 0.25 0.254074 0.256339 0.2499 0.25 0.253983 0.25645 0.25 0.25 0.253893 0.25656 0.2501 0.25 0.253802 0.256671 0.2502 0.25 0.253711 0.25678 0.2503 0.25 0.25362 0.256889 0.2504 0.25 0.253529 0.256998 0.2505 0.25 0.253438 0.257106 0.2506 0.25 0.253347 0.257213 0.2507 0.25 0.253256 0.25732 0.2508 0.25 0.253165 0.257426 0.2509 0.25 0.253074 0.257532 0.251 0.25 0.252982 0.257637 0.2511 0.25 0.252891 0.257742 0.2512 0.25 0.252799 0.257846 0.2513 0.25 0.252708 0.257949 0.2514 0.25 0.252616 0.258052 0.2515 0.25 0.252525 0.258154 0.2516 0.25 0.252433 0.258255 0.2517 0.25 0.252341 0.258356 0.2518 0.25 0.252249 0.258456 0.2519 0.25 0.252157 0.258555 0.252 0.25 0.252065 0.258654 0.2521 0.25 0.251973 0.258752 0.2522 0.25 0.251881 0.258849 0.2523 0.25 0.251789 0.258945 0.2524 0.25 0.251696 0.259041 0.2525 0.25 0.251604 0.259136 0.2526 0.25 0.251511 0.25923 0.2527 0.25 0.251419 0.259324 0.2528 0.25 0.251326 0.259417 0.2529 0.25 0.251234 0.259509 0.253 0.25 0.251141 0.2596 0.2531 0.25 0.251048 0.25969 0.2532 0.25 0.250956 0.25978 0.2533 0.25 0.250863 0.259869 0.2534 0.25 0.25077 0.259957 0.2535 0.25 0.250677 0.260044 0.2536 0.25 0.250584 0.260131 0.2537 0.25 0.250491 0.260216 0.2538 0.25 0.250397 0.260301 0.2539 0.25 0.250304 0.260385 0.254 0.25 0.250211 0.260468 0.2541 0.25 0.250118 0.26055 0.2542 0.25 0.250024 0.260631 0.2543 0.25 0.249931 0.260712 0.2544 0.25 0.249837 0.260791 0.2545 0.25 0.249744 0.26087 0.2546 0.25 0.24965 0.260947 0.2547 0.25 0.249556 0.261024 0.2548 0.25 0.249463 0.2611 0.2549 0.25 0.249369 0.261175 0.255 0.25 0.249275 0.261249 0.2551 0.25 0.249181 0.261322 0.2552 0.25 0.249087 0.261394 0.2553 0.25 0.248993 0.261465 0.2554 0.25 0.248899 0.261536 0.2555 0.25 0.248805 0.261605 0.2556 0.25 0.248711 0.261673 0.2557 0.25 0.248617 0.26174 0.2558 0.25 0.248522 0.261807 0.2559 0.25 0.248428 0.261872 0.256 0.25 0.248334 0.261936 0.2561 0.25 0.248239 0.262 0.2562 0.25 0.248145 0.262062 0.2563 0.25 0.24805 0.262123 0.2564 0.25 0.247956 0.262183 0.2565 0.25 0.247861 0.262243 0.2566 0.25 0.247767 0.262301 0.2567 0.25 0.247672 0.262358 0.2568 0.25 0.247577 0.262414 0.2569 0.25 0.247483 0.262469 0.257 0.25 0.247388 0.262523 0.2571 0.25 0.247293 0.262576 0.2572 0.25 0.247198 0.262628 0.2573 0.25 0.247103 0.262679 0.2574 0.25 0.247008 0.262728 0.2575 0.25 0.246913 0.262777 0.2576 0.25 0.246818 0.262825 0.2577 0.25 0.246723 0.262871 0.2578 0.25 0.246628 0.262916 0.2579 0.25 0.246533 0.262961 0.258 0.25 0.246438 0.263004 0.2581 0.25 0.246342 0.263046 0.2582 0.25 0.246247 0.263087 0.2583 0.25 0.246152 0.263127 0.2584 0.25 0.246056 0.263165 0.2585 0.25 0.245961 0.263203 0.2586 0.25 0.245865 0.263239 0.2587 0.25 0.24577 0.263275 0.2588 0.25 0.245675 0.263309 0.2589 0.25 0.245579 0.263342 0.259 0.25 0.245483 0.263374 0.2591 0.25 0.245388 0.263404 0.2592 0.25 0.245292 0.263434 0.2593 0.25 0.245196 0.263463 0.2594 0.25 0.245101 0.26349 0.2595 0.25 0.245005 0.263516 0.2596 0.25 0.244909 0.263541 0.2597 0.25 0.244813 0.263565 0.2598 0.25 0.244718 0.263587 0.2599 0.25 0.244622 0.263609 0.26 0.25 0.244526 0.263629 0.2601 0.25 0.24443 0.263648 0.2602 0.25 0.244334 0.263666 0.2603 0.25 0.244238 0.263683 0.2604 0.25 0.244142 0.263698 0.2605 0.25 0.244046 0.263713 0.2606 0.25 0.24395 0.263726 0.2607 0.25 0.243854 0.263738 0.2608 0.25 0.243758 0.263749 0.2609 0.25 0.243662 0.263759 0.261 0.25 0.243566 0.263767 0.2611 0.25 0.243469 0.263774 0.2612 0.25 0.243373 0.26378 0.2613 0.25 0.243277 0.263785 0.2614 0.25 0.243181 0.263789 0.2615 0.25 0.243084 0.263791 0.2616 0.25 0.242988 0.263793 0.2617 0.25 0.242892 0.263793 0.2618 0.25 0.242796 0.263792 0.2619 0.25 0.242699 0.263789 0.262 0.25 0.242603 0.263786 0.2621 0.25 0.242506 0.263781 0.2622 0.25 0.24241 0.263775 0.2623 0.25 0.242314 0.263768 0.2624 0.25 0.242217 0.26376 0.2625 0.25 0.242121 0.26375 0.2626 0.25 0.242024 0.263739 0.2627 0.25 0.241928 0.263727 0.2628 0.25 0.241831 0.263714 0.2629 0.25 0.241735 0.2637 0.263 0.25 0.241638 0.263684 0.2631 0.25 0.241542 0.263668 0.2632 0.25 0.241445 0.26365 0.2633 0.25 0.241349 0.263631 0.2634 0.25 0.241252 0.26361 0.2635 0.25 0.241155 0.263589 0.2636 0.25 0.241059 0.263566 0.2637 0.25 0.240962 0.263542 0.2638 0.25 0.240865 0.263517 0.2639 0.25 0.240769 0.263491 0.264 0.25 0.240672 0.263463 0.2641 0.25 0.240575 0.263435 0.2642 0.25 0.240479 0.263405 0.2643 0.25 0.240382 0.263374 0.2644 0.25 0.240285 0.263342 0.2645 0.25 0.240189 0.263308 0.2646 0.25 0.240092 0.263274 0.2647 0.25 0.239995 0.263238 0.2648 0.25 0.239899 0.263201 0.2649 0.25 0.239802 0.263163 0.265 0.25 0.239705 0.263124 0.2651 0.25 0.239608 0.263083 0.2652 0.25 0.239512 0.263042 0.2653 0.25 0.239415 0.262999 0.2654 0.25 0.239318 0.262955 0.2655 0.25 0.239222 0.26291 0.2656 0.25 0.239125 0.262864 0.2657 0.25 0.239028 0.262817 0.2658 0.25 0.238931 0.262768 0.2659 0.25 0.238835 0.262719 0.266 0.25 0.238738 0.262668 0.2661 0.25 0.238641 0.262616 0.2662 0.25 0.238544 0.262563 0.2663 0.25 0.238448 0.262509 0.2664 0.25 0.238351 0.262454 0.2665 0.25 0.238254 0.262397 0.2666 0.25 0.238157 0.26234 0.2667 0.25 0.238061 0.262281 0.2668 0.25 0.237964 0.262222 0.2669 0.25 0.237867 0.262161 0.267 0.25 0.23777 0.262099 0.2671 0.25 0.237674 0.262036 0.2672 0.25 0.237577 0.261972 0.2673 0.25 0.23748 0.261907 0.2674 0.25 0.237384 0.261841 0.2675 0.25 0.237287 0.261773 0.2676 0.25 0.23719 0.261705 0.2677 0.25 0.237094 0.261636 0.2678 0.25 0.236997 0.261565 0.2679 0.25 0.2369 0.261494 0.268 0.25 0.236804 0.261421 0.2681 0.25 0.236707 0.261348 0.2682 0.25 0.23661 0.261273 0.2683 0.25 0.236514 0.261198 0.2684 0.25 0.236417 0.261121 0.2685 0.25 0.236321 0.261043 0.2686 0.25 0.236224 0.260965 0.2687 0.25 0.236128 0.260885 0.2688 0.25 0.236031 0.260804 0.2689 0.25 0.235935 0.260723 0.269 0.25 0.235838 0.26064 0.2691 0.25 0.235742 0.260556 0.2692 0.25 0.235645 0.260472 0.2693 0.25 0.235549 0.260386 0.2694 0.25 0.235452 0.2603 0.2695 0.25 0.235356 0.260212 0.2696 0.25 0.235259 0.260124 0.2697 0.25 0.235163 0.260035 0.2698 0.25 0.235067 0.259944 0.2699 0.25 0.23497 0.259853 0.27 0.25 0.234874 0.259761 0.2701 0.25 0.234778 0.259668 0.2702 0.25 0.234681 0.259574 0.2703 0.25 0.234585 0.259479 0.2704 0.25 0.234489 0.259384 0.2705 0.25 0.234393 0.259287 0.2706 0.25 0.234296 0.25919 0.2707 0.25 0.2342 0.259091 0.2708 0.25 0.234104 0.258992 0.2709 0.25 0.234008 0.258892 0.271 0.25 0.233912 0.258791 0.2711 0.25 0.233816 0.25869 0.2712 0.25 0.23372 0.258587 0.2713 0.25 0.233624 0.258484 0.2714 0.25 0.233528 0.25838 0.2715 0.25 0.233432 0.258275 0.2716 0.25 0.233336 0.258169 0.2717 0.25 0.23324 0.258063 0.2718 0.25 0.233144 0.257956 0.2719 0.25 0.233048 0.257848 0.272 0.25 0.232952 0.257739 0.2721 0.25 0.232856 0.257629 0.2722 0.25 0.232761 0.257519 0.2723 0.25 0.232665 0.257408 0.2724 0.25 0.232569 0.257296 0.2725 0.25 0.232474 0.257184 0.2726 0.25 0.232378 0.257071 0.2727 0.25 0.232282 0.256957 0.2728 0.25 0.232187 0.256843 0.2729 0.25 0.232091 0.256727 0.273 0.25 0.231996 0.256612 0.2731 0.25 0.2319 0.256495 0.2732 0.25 0.231805 0.256378 0.2733 0.25 0.231709 0.25626 0.2734 0.25 0.231614 0.256142 0.2735 0.25 0.231519 0.256023 0.2736 0.25 0.231423 0.255903 0.2737 0.25 0.231328 0.255783 0.2738 0.25 0.231233 0.255662 0.2739 0.25 0.231138 0.255541 0.274 0.25 0.231043 0.255419 0.2741 0.25 0.230948 0.255296 0.2742 0.25 0.230853 0.255173 0.2743 0.25 0.230758 0.25505 0.2744 0.25 0.230663 0.254925 0.2745 0.25 0.230568 0.254801 0.2746 0.25 0.230473 0.254676 0.2747 0.25 0.230378 0.25455 0.2748 0.25 0.230283 0.254424 0.2749 0.25 0.230188 0.254297 0.275 0.25 0.230094 0.25417 0.2751 0.25 0.229999 0.254042 0.2752 0.25 0.229904 0.253914 0.2753 0.25 0.22981 0.253786 0.2754 0.25 0.229715 0.253657 0.2755 0.25 0.229621 0.253528 0.2756 0.25 0.229526 0.253398 0.2757 0.25 0.229432 0.253268 0.2758 0.25 0.229338 0.253137 0.2759 0.25 0.229243 0.253007 0.276 0.25 0.229149 0.252875 0.2761 0.25 0.229055 0.252744 0.2762 0.25 0.228961 0.252612 0.2763 0.25 0.228867 0.25248 0.2764 0.25 0.228773 0.252347 0.2765 0.25 0.228679 0.252214 0.2766 0.25 0.228585 0.252081 0.2767 0.25 0.228491 0.251947 0.2768 0.25 0.228397 0.251814 0.2769 0.25 0.228304 0.25168 0.277 0.25 0.22821 0.251545 0.2771 0.25 0.228116 0.251411 0.2772 0.25 0.228023 0.251276 0.2773 0.25 0.227929 0.251141 0.2774 0.25 0.227836 0.251006 0.2775 0.25 0.227742 0.250871 0.2776 0.25 0.227649 0.250735 0.2777 0.25 0.227555 0.250599 0.2778 0.25 0.227462 0.250463 0.2779 0.25 0.227369 0.250327 0.278 0.25 0.227276 0.250191 0.2781 0.25 0.227183 0.250055 0.2782 0.25 0.22709 0.249918 0.2783 0.25 0.226997 0.249782 0.2784 0.25 0.226904 0.249645 0.2785 0.25 0.226811 0.249508 0.2786 0.25 0.226718 0.249371 0.2787 0.25 0.226626 0.249234 0.2788 0.25 0.226533 0.249097 0.2789 0.25 0.22644 0.24896 0.279 0.25 0.226348 0.248823 0.2791 0.25 0.226256 0.248686 0.2792 0.25 0.226163 0.248549 0.2793 0.25 0.226071 0.248412 0.2794 0.25 0.225979 0.248275 0.2795 0.25 0.225886 0.248138 0.2796 0.25 0.225794 0.248001 0.2797 0.25 0.225702 0.247864 0.2798 0.25 0.22561 0.247727 0.2799 0.25 0.225518 0.24759 0.28 0.25 0.225427 0.247454 0.2801 0.25 0.225335 0.247317 0.2802 0.25 0.225243 0.247181 0.2803 0.25 0.225151 0.247044 0.2804 0.25 0.22506 0.246908 0.2805 0.25 0.224968 0.246772 0.2806 0.25 0.224877 0.246636 0.2807 0.25 0.224786 0.2465 0.2808 0.25 0.224694 0.246364 0.2809 0.25 0.224603 0.246229 0.281 0.25 0.224512 0.246093 0.2811 0.25 0.224421 0.245958 0.2812 0.25 0.22433 0.245823 0.2813 0.25 0.224239 0.245689 0.2814 0.25 0.224148 0.245554 0.2815 0.25 0.224058 0.24542 0.2816 0.25 0.223967 0.245286 0.2817 0.25 0.223876 0.245153 0.2818 0.25 0.223786 0.245019 0.2819 0.25 0.223696 0.244886 0.282 0.25 0.223605 0.244754 0.2821 0.25 0.223515 0.244621 0.2822 0.25 0.223425 0.244489 0.2823 0.25 0.223335 0.244357 0.2824 0.25 0.223245 0.244226 0.2825 0.25 0.223155 0.244095 0.2826 0.25 0.223065 0.243964 0.2827 0.25 0.222975 0.243834 0.2828 0.25 0.222885 0.243704 0.2829 0.25 0.222796 0.243575 0.283 0.25 0.222706 0.243446 0.2831 0.25 0.222617 0.243317 0.2832 0.25 0.222527 0.243189 0.2833 0.25 0.222438 0.243061 0.2834 0.25 0.222349 0.242934 0.2835 0.25 0.22226 0.242807 0.2836 0.25 0.222171 0.242681 0.2837 0.25 0.222082 0.242555 0.2838 0.25 0.221993 0.24243 0.2839 0.25 0.221904 0.242305 0.284 0.25 0.221816 0.242181 0.2841 0.25 0.221727 0.242057 0.2842 0.25 0.221639 0.241934 0.2843 0.25 0.22155 0.241811 0.2844 0.25 0.221462 0.241689 0.2845 0.25 0.221374 0.241568 0.2846 0.25 0.221286 0.241447 0.2847 0.25 0.221198 0.241326 0.2848 0.25 0.22111 0.241207 0.2849 0.25 0.221022 0.241088 0.285 0.25 0.220934 0.240969 0.2851 0.25 0.220846 0.240851 0.2852 0.25 0.220759 0.240734 0.2853 0.25 0.220671 0.240618 0.2854 0.25 0.220584 0.240502 0.2855 0.25 0.220497 0.240387 0.2856 0.25 0.22041 0.240272 0.2857 0.25 0.220323 0.240158 0.2858 0.25 0.220236 0.240045 0.2859 0.25 0.220149 0.239933 0.286 0.25 0.220062 0.239821 0.2861 0.25 0.219975 0.239711 0.2862 0.25 0.219889 0.2396 0.2863 0.25 0.219802 0.239491 0.2864 0.25 0.219716 0.239382 0.2865 0.25 0.219629 0.239275 0.2866 0.25 0.219543 0.239168 0.2867 0.25 0.219457 0.239061 0.2868 0.25 0.219371 0.238956 0.2869 0.25 0.219285 0.238851 0.287 0.25 0.2192 0.238747 0.2871 0.25 0.219114 0.238644 0.2872 0.25 0.219028 0.238542 0.2873 0.25 0.218943 0.238441 0.2874 0.25 0.218858 0.23834 0.2875 0.25 0.218772 0.238241 0.2876 0.25 0.218687 0.238142 0.2877 0.25 0.218602 0.238044 0.2878 0.25 0.218517 0.237947 0.2879 0.25 0.218432 0.237851 0.288 0.25 0.218348 0.237756 0.2881 0.25 0.218263 0.237662 0.2882 0.25 0.218179 0.237569 0.2883 0.25 0.218094 0.237476 0.2884 0.25 0.21801 0.237385 0.2885 0.25 0.217926 0.237294 0.2886 0.25 0.217842 0.237205 0.2887 0.25 0.217758 0.237116 0.2888 0.25 0.217674 0.237029 0.2889 0.25 0.21759 0.236942 0.289 0.25 0.217507 0.236857 0.2891 0.25 0.217423 0.236772 0.2892 0.25 0.21734 0.236688 0.2893 0.25 0.217257 0.236606 0.2894 0.25 0.217173 0.236524 0.2895 0.25 0.21709 0.236444 0.2896 0.25 0.217007 0.236364 0.2897 0.25 0.216925 0.236286 0.2898 0.25 0.216842 0.236208 0.2899 0.25 0.216759 0.236132 0.29 0.25 0.216677 0.236057 0.2901 0.25 0.216595 0.235982 0.2902 0.25 0.216512 0.235909 0.2903 0.25 0.21643 0.235837 0.2904 0.25 0.216348 0.235766 0.2905 0.25 0.216266 0.235696 0.2906 0.25 0.216185 0.235627 0.2907 0.25 0.216103 0.23556 0.2908 0.25 0.216022 0.235493 0.2909 0.25 0.21594 0.235428 0.291 0.25 0.215859 0.235363 0.2911 0.25 0.215778 0.2353 0.2912 0.25 0.215697 0.235238 0.2913 0.25 0.215616 0.235177 0.2914 0.25 0.215535 0.235117 0.2915 0.25 0.215455 0.235059 0.2916 0.25 0.215374 0.235001 0.2917 0.25 0.215294 0.234945 0.2918 0.25 0.215213 0.23489 0.2919 0.25 0.215133 0.234836 0.292 0.25 0.215053 0.234783 0.2921 0.25 0.214973 0.234732 0.2922 0.25 0.214894 0.234681 0.2923 0.25 0.214814 0.234632 0.2924 0.25 0.214735 0.234584 0.2925 0.25 0.214655 0.234538 0.2926 0.25 0.214576 0.234492 0.2927 0.25 0.214497 0.234448 0.2928 0.25 0.214418 0.234405 0.2929 0.25 0.214339 0.234363 0.293 0.25 0.21426 0.234322 0.2931 0.25 0.214182 0.234283 0.2932 0.25 0.214103 0.234244 0.2933 0.25 0.214025 0.234207 0.2934 0.25 0.213947 0.234172 0.2935 0.25 0.213869 0.234137 0.2936 0.25 0.213791 0.234104 0.2937 0.25 0.213713 0.234072 0.2938 0.25 0.213636 0.234041 0.2939 0.25 0.213558 0.234012 0.294 0.25 0.213481 0.233984 0.2941 0.25 0.213403 0.233957 0.2942 0.25 0.213326 0.233931 0.2943 0.25 0.213249 0.233907 0.2944 0.25 0.213173 0.233884 0.2945 0.25 0.213096 0.233862 0.2946 0.25 0.213019 0.233842 0.2947 0.25 0.212943 0.233823 0.2948 0.25 0.212867 0.233805 0.2949 0.25 0.212791 0.233788 0.295 0.25 0.212715 0.233773 0.2951 0.25 0.212639 0.233759 0.2952 0.25 0.212563 0.233746 0.2953 0.25 0.212487 0.233735 0.2954 0.25 0.212412 0.233724 0.2955 0.25 0.212337 0.233716 0.2956 0.25 0.212262 0.233708 0.2957 0.25 0.212187 0.233702 0.2958 0.25 0.212112 0.233697 0.2959 0.25 0.212037 0.233693 0.296 0.25 0.211963 0.233691 0.2961 0.25 0.211888 0.23369 0.2962 0.25 0.211814 0.233691 0.2963 0.25 0.21174 0.233692 0.2964 0.25 0.211666 0.233695 0.2965 0.25 0.211592 0.2337 0.2966 0.25 0.211518 0.233705 0.2967 0.25 0.211445 0.233712 0.2968 0.25 0.211371 0.23372 0.2969 0.25 0.211298 0.23373 0.297 0.25 0.211225 0.233741 0.2971 0.25 0.211152 0.233753 0.2972 0.25 0.211079 0.233767 0.2973 0.25 0.211007 0.233781 0.2974 0.25 0.210934 0.233798 0.2975 0.25 0.210862 0.233815 0.2976 0.25 0.21079 0.233834 0.2977 0.25 0.210718 0.233854 0.2978 0.25 0.210646 0.233876 0.2979 0.25 0.210574 0.233898 0.298 0.25 0.210503 0.233922 0.2981 0.25 0.210431 0.233948 0.2982 0.25 0.21036 0.233974 0.2983 0.25 0.210289 0.234003 0.2984 0.25 0.210218 0.234032 0.2985 0.25 0.210147 0.234062 0.2986 0.25 0.210077 0.234094 0.2987 0.25 0.210006 0.234128 0.2988 0.25 0.209936 0.234162 0.2989 0.25 0.209866 0.234198 0.299 0.25 0.209796 0.234235 0.2991 0.25 0.209726 0.234274 0.2992 0.25 0.209656 0.234314 0.2993 0.25 0.209587 0.234355 0.2994 0.25 0.209517 0.234397 0.2995 0.25 0.209448 0.234441 0.2996 0.25 0.209379 0.234486 0.2997 0.25 0.20931 0.234532 0.2998 0.25 0.209242 0.234579 0.2999 0.25 0.209173 0.234628 0.3 0.25 0.209105 0.234678 0.3001 0.25 0.209036 0.23473 0.3002 0.25 0.208968 0.234782 0.3003 0.25 0.2089 0.234836 0.3004 0.25 0.208833 0.234891 0.3005 0.25 0.208765 0.234948 0.3006 0.25 0.208698 0.235006 0.3007 0.25 0.208631 0.235064 0.3008 0.25 0.208563 0.235125 0.3009 0.25 0.208497 0.235186 0.301 0.25 0.20843 0.235249 0.3011 0.25 0.208363 0.235313 0.3012 0.25 0.208297 0.235378 0.3013 0.25 0.208231 0.235444 0.3014 0.25 0.208165 0.235512 0.3015 0.25 0.208099 0.235581 0.3016 0.25 0.208033 0.235651 0.3017 0.25 0.207967 0.235722 0.3018 0.25 0.207902 0.235795 0.3019 0.25 0.207837 0.235868 0.302 0.25 0.207772 0.235943 0.3021 0.25 0.207707 0.236019 0.3022 0.25 0.207642 0.236097 0.3023 0.25 0.207578 0.236175 0.3024 0.25 0.207513 0.236255 0.3025 0.25 0.207449 0.236336 0.3026 0.25 0.207385 0.236418 0.3027 0.25 0.207321 0.236501 0.3028 0.25 0.207258 0.236585 0.3029 0.25 0.207194 0.236671 0.303 0.25 0.207131 0.236757 0.3031 0.25 0.207068 0.236845 0.3032 0.25 0.207005 0.236934 0.3033 0.25 0.206942 0.237024 0.3034 0.25 0.20688 0.237115 0.3035 0.25 0.206817 0.237207 0.3036 0.25 0.206755 0.237301 0.3037 0.25 0.206693 0.237395 0.3038 0.25 0.206631 0.237491 0.3039 0.25 0.206569 0.237588 0.304 0.25 0.206508 0.237685 0.3041 0.25 0.206446 0.237784 0.3042 0.25 0.206385 0.237884 0.3043 0.25 0.206324 0.237985 0.3044 0.25 0.206264 0.238087 0.3045 0.25 0.206203 0.23819 0.3046 0.25 0.206142 0.238294 0.3047 0.25 0.206082 0.238399 0.3048 0.25 0.206022 0.238506 0.3049 0.25 0.205962 0.238613 0.305 0.25 0.205903 0.238721 0.3051 0.25 0.205843 0.23883 0.3052 0.25 0.205784 0.23894 0.3053 0.25 0.205725 0.239052 0.3054 0.25 0.205666 0.239164 0.3055 0.25 0.205607 0.239277 0.3056 0.25 0.205548 0.239391 0.3057 0.25 0.20549 0.239506 0.3058 0.25 0.205432 0.239622 0.3059 0.25 0.205374 0.239739 0.306 0.25 0.205316 0.239857 0.3061 0.25 0.205258 0.239976 0.3062 0.25 0.205201 0.240096 0.3063 0.25 0.205143 0.240216 0.3064 0.25 0.205086 0.240338 0.3065 0.25 0.20503 0.24046 0.3066 0.25 0.204973 0.240584 0.3067 0.25 0.204916 0.240708 0.3068 0.25 0.20486 0.240833 0.3069 0.25 0.204804 0.240959 0.307 0.25 0.204748 0.241086 0.3071 0.25 0.204692 0.241213 0.3072 0.25 0.204637 0.241342 0.3073 0.25 0.204581 0.241471 0.3074 0.25 0.204526 0.241601 0.3075 0.25 0.204471 0.241732 0.3076 0.25 0.204416 0.241863 0.3077 0.25 0.204362 0.241996 0.3078 0.25 0.204308 0.242129 0.3079 0.25 0.204253 0.242263 0.308 0.25 0.204199 0.242398 0.3081 0.25 0.204146 0.242533 0.3082 0.25 0.204092 0.242669 0.3083 0.25 0.204039 0.242806 0.3084 0.25 0.203985 0.242944 0.3085 0.25 0.203932 0.243082 0.3086 0.25 0.20388 0.243221 0.3087 0.25 0.203827 0.243361 0.3088 0.25 0.203775 0.243501 0.3089 0.25 0.203722 0.243642 0.309 0.25 0.20367 0.243784 0.3091 0.25 0.203619 0.243926 0.3092 0.25 0.203567 0.244069 0.3093 0.25 0.203516 0.244212 0.3094 0.25 0.203464 0.244356 0.3095 0.25 0.203413 0.244501 0.3096 0.25 0.203363 0.244646 0.3097 0.25 0.203312 0.244792 0.3098 0.25 0.203262 0.244939 0.3099 0.25 0.203211 0.245086 0.31 0.25 0.203161 0.245233 0.3101 0.25 0.203112 0.245381 0.3102 0.25 0.203062 0.24553 0.3103 0.25 0.203013 0.245679 0.3104 0.25 0.202964 0.245829 0.3105 0.25 0.202915 0.245979 0.3106 0.25 0.202866 0.246129 0.3107 0.25 0.202817 0.24628 0.3108 0.25 0.202769 0.246432 0.3109 0.25 0.202721 0.246584 0.311 0.25 0.202673 0.246736 0.3111 0.25 0.202625 0.246889 0.3112 0.25 0.202578 0.247042 0.3113 0.25 0.202531 0.247195 0.3114 0.25 0.202483 0.247349 0.3115 0.25 0.202437 0.247504 0.3116 0.25 0.20239 0.247658 0.3117 0.25 0.202343 0.247813 0.3118 0.25 0.202297 0.247969 0.3119 0.25 0.202251 0.248124 0.312 0.25 0.202205 0.24828 0.3121 0.25 0.20216 0.248437 0.3122 0.25 0.202114 0.248593 0.3123 0.25 0.202069 0.24875 0.3124 0.25 0.202024 0.248907 0.3125 0.25 0.20198 0.249065 0.3126 0.25 0.201935 0.249222 0.3127 0.25 0.201891 0.24938 0.3128 0.25 0.201847 0.249538 0.3129 0.25 0.201803 0.249696 0.313 0.25 0.201759 0.249855 0.3131 0.25 0.201716 0.250014 0.3132 0.25 0.201672 0.250172 0.3133 0.25 0.201629 0.250331 0.3134 0.25 0.201586 0.25049 0.3135 0.25 0.201544 0.25065 0.3136 0.25 0.201502 0.250809 0.3137 0.25 0.201459 0.250969 0.3138 0.25 0.201417 0.251128 0.3139 0.25 0.201376 0.251288 0.314 0.25 0.201334 0.251448 0.3141 0.25 0.201293 0.251607 0.3142 0.25 0.201252 0.251767 0.3143 0.25 0.201211 0.251927 0.3144 0.25 0.20117 0.252087 0.3145 0.25 0.20113 0.252247 0.3146 0.25 0.20109 0.252407 0.3147 0.25 0.20105 0.252567 0.3148 0.25 0.20101 0.252727 0.3149 0.25 0.200971 0.252887 0.315 0.25 0.200931 0.253046 0.3151 0.25 0.200892 0.253206 0.3152 0.25 0.200853 0.253366 0.3153 0.25 0.200815 0.253525 0.3154 0.25 0.200776 0.253685 0.3155 0.25 0.200738 0.253844 0.3156 0.25 0.2007 0.254003 0.3157 0.25 0.200663 0.254163 0.3158 0.25 0.200625 0.254321 0.3159 0.25 0.200588 0.25448 0.316 0.25 0.200551 0.254639 0.3161 0.25 0.200514 0.254797 0.3162 0.25 0.200477 0.254956 0.3163 0.25 0.200441 0.255114 0.3164 0.25 0.200405 0.255271 0.3165 0.25 0.200369 0.255429 0.3166 0.25 0.200333 0.255586 0.3167 0.25 0.200298 0.255743 0.3168 0.25 0.200263 0.2559 0.3169 0.25 0.200228 0.256057 0.317 0.25 0.200193 0.256213 0.3171 0.25 0.200158 0.256369 0.3172 0.25 0.200124 0.256524 0.3173 0.25 0.20009 0.256679 0.3174 0.25 0.200056 0.256834 0.3175 0.25 0.200023 0.256989 0.3176 0.25 0.199989 0.257143 0.3177 0.25 0.199956 0.257297 0.3178 0.25 0.199923 0.25745 0.3179 0.25 0.199891 0.257603 0.318 0.25 0.199858 0.257756 0.3181 0.25 0.199826 0.257908 0.3182 0.25 0.199794 0.258059 0.3183 0.25 0.199762 0.258211 0.3184 0.25 0.199731 0.258361 0.3185 0.25 0.199699 0.258512 0.3186 0.25 0.199668 0.258661 0.3187 0.25 0.199638 0.258811 0.3188 0.25 0.199607 0.258959 0.3189 0.25 0.199577 0.259108 0.319 0.25 0.199547 0.259255 0.3191 0.25 0.199517 0.259403 0.3192 0.25 0.199487 0.259549 0.3193 0.25 0.199458 0.259695 0.3194 0.25 0.199429 0.259841 0.3195 0.25 0.1994 0.259985 0.3196 0.25 0.199371 0.26013 0.3197 0.25 0.199343 0.260273 0.3198 0.25 0.199315 0.260416 0.3199 0.25 0.199287 0.260559 0.32 0.25 0.199259 0.2607 0.3201 0.25 0.199232 0.260841 0.3202 0.25 0.199204 0.260982 0.3203 0.25 0.199177 0.261121 0.3204 0.25 0.199151 0.26126 0.3205 0.25 0.199124 0.261398 0.3206 0.25 0.199098 0.261536 0.3207 0.25 0.199072 0.261673 0.3208 0.25 0.199046 0.261809 0.3209 0.25 0.199021 0.261944 0.321 0.25 0.198995 0.262078 0.3211 0.25 0.19897 0.262212 0.3212 0.25 0.198946 0.262345 0.3213 0.25 0.198921 0.262477 0.3214 0.25 0.198897 0.262608 0.3215 0.25 0.198873 0.262739 0.3216 0.25 0.198849 0.262869 0.3217 0.25 0.198825 0.262997 0.3218 0.25 0.198802 0.263125 0.3219 0.25 0.198779 0.263253 0.322 0.25 0.198756 0.263379 0.3221 0.25 0.198733 0.263504 0.3222 0.25 0.198711 0.263629 0.3223 0.25 0.198689 0.263752 0.3224 0.25 0.198667 0.263875 0.3225 0.25 0.198646 0.263996 0.3226 0.25 0.198624 0.264117 0.3227 0.25 0.198603 0.264237 0.3228 0.25 0.198582 0.264356 0.3229 0.25 0.198562 0.264474 0.323 0.25 0.198541 0.264591 0.3231 0.25 0.198521 0.264707 0.3232 0.25 0.198502 0.264821 0.3233 0.25 0.198482 0.264935 0.3234 0.25 0.198463 0.265048 0.3235 0.25 0.198444 0.26516 0.3236 0.25 0.198425 0.265271 0.3237 0.25 0.198406 0.265381 0.3238 0.25 0.198388 0.26549 0.3239 0.25 0.19837 0.265597 0.324 0.25 0.198352 0.265704 0.3241 0.25 0.198334 0.265809 0.3242 0.25 0.198317 0.265914 0.3243 0.25 0.1983 0.266017 0.3244 0.25 0.198283 0.266119 0.3245 0.25 0.198267 0.26622 0.3246 0.25 0.19825 0.26632 0.3247 0.25 0.198234 0.266419 0.3248 0.25 0.198219 0.266517 0.3249 0.25 0.198203 0.266614 0.325 0.25 0.198188 0.266709 0.3251 0.25 0.198173 0.266803 0.3252 0.25 0.198158 0.266896 0.3253 0.25 0.198143 0.266988 0.3254 0.25 0.198129 0.267079 0.3255 0.25 0.198115 0.267168 0.3256 0.25 0.198102 0.267256 0.3257 0.25 0.198088 0.267344 0.3258 0.25 0.198075 0.267429 0.3259 0.25 0.198062 0.267514 0.326 0.25 0.198049 0.267597 0.3261 0.25 0.198037 0.267679 0.3262 0.25 0.198025 0.26776 0.3263 0.25 0.198013 0.26784 0.3264 0.25 0.198001 0.267918 0.3265 0.25 0.19799 0.267995 0.3266 0.25 0.197978 0.268071 0.3267 0.25 0.197968 0.268145 0.3268 0.25 0.197957 0.268218 0.3269 0.25 0.197947 0.26829 0.327 0.25 0.197937 0.268361 0.3271 0.25 0.197927 0.26843 0.3272 0.25 0.197917 0.268498 0.3273 0.25 0.197908 0.268565 0.3274 0.25 0.197899 0.26863 0.3275 0.25 0.19789 0.268694 0.3276 0.25 0.197882 0.268756 0.3277 0.25 0.197873 0.268817 0.3278 0.25 0.197865 0.268877 0.3279 0.25 0.197858 0.268936 0.328 0.25 0.19785 0.268993 0.3281 0.25 0.197843 0.269048 0.3282 0.25 0.197836 0.269103 0.3283 0.25 0.197829 0.269155 0.3284 0.25 0.197823 0.269207 0.3285 0.25 0.197817 0.269257 0.3286 0.25 0.197811 0.269306 0.3287 0.25 0.197805 0.269353 0.3288 0.25 0.1978 0.269399 0.3289 0.25 0.197795 0.269443 0.329 0.25 0.19779 0.269486 0.3291 0.25 0.197786 0.269528 0.3292 0.25 0.197782 0.269568 0.3293 0.25 0.197778 0.269607 0.3294 0.25 0.197774 0.269644 0.3295 0.25 0.19777 0.26968 0.3296 0.25 0.197767 0.269714 0.3297 0.25 0.197764 0.269747 0.3298 0.25 0.197762 0.269779 0.3299 0.25 0.197759 0.269809 0.33 0.25 0.197757 0.269837 0.3301 0.25 0.197755 0.269864 0.3302 0.25 0.197754 0.26989 0.3303 0.25 0.197753 0.269914 0.3304 0.25 0.197752 0.269936 0.3305 0.25 0.197751 0.269957 0.3306 0.25 0.19775 0.269977 0.3307 0.25 0.19775 0.269995 0.3308 0.25 0.19775 0.270012 0.3309 0.25 0.197751 0.270027 0.331 0.25 0.197751 0.27004 0.3311 0.25 0.197752 0.270053 0.3312 0.25 0.197753 0.270063 0.3313 0.25 0.197755 0.270072 0.3314 0.25 0.197756 0.27008 0.3315 0.25 0.197758 0.270086 0.3316 0.25 0.197761 0.27009 0.3317 0.25 0.197763 0.270093 0.3318 0.25 0.197766 0.270095 0.3319 0.25 0.197769 0.270095 0.332 0.25 0.197772 0.270093 0.3321 0.25 0.197776 0.27009 0.3322 0.25 0.19778 0.270086 0.3323 0.25 0.197784 0.27008 0.3324 0.25 0.197789 0.270072 0.3325 0.25 0.197793 0.270063 0.3326 0.25 0.197798 0.270052 0.3327 0.25 0.197804 0.27004 0.3328 0.25 0.197809 0.270026 0.3329 0.25 0.197815 0.270011 0.333 0.25 0.197821 0.269994 0.3331 0.25 0.197828 0.269976 0.3332 0.25 0.197834 0.269956 0.3333 0.25 0.197841 0.269934 0.3334 0.25 0.197849 0.269911 0.3335 0.25 0.197856 0.269887 0.3336 0.25 0.197864 0.269861 0.3337 0.25 0.197872 0.269833 0.3338 0.25 0.19788 0.269804 0.3339 0.25 0.197889 0.269773 0.334 0.25 0.197898 0.269741 0.3341 0.25 0.197907 0.269708 0.3342 0.25 0.197917 0.269672 0.3343 0.25 0.197927 0.269636 0.3344 0.25 0.197937 0.269597 0.3345 0.25 0.197947 0.269557 0.3346 0.25 0.197958 0.269516 0.3347 0.25 0.197968 0.269473 0.3348 0.25 0.19798 0.269429 0.3349 0.25 0.197991 0.269383 0.335 0.25 0.198003 0.269335 0.3351 0.25 0.198015 0.269286 0.3352 0.25 0.198027 0.269236 0.3353 0.25 0.19804 0.269184 0.3354 0.25 0.198053 0.26913 0.3355 0.25 0.198066 0.269075 0.3356 0.25 0.198079 0.269019 0.3357 0.25 0.198093 0.268961 0.3358 0.25 0.198107 0.268901 0.3359 0.25 0.198121 0.26884 0.336 0.25 0.198136 0.268778 0.3361 0.25 0.198151 0.268714 0.3362 0.25 0.198166 0.268648 0.3363 0.25 0.198181 0.268581 0.3364 0.25 0.198197 0.268513 0.3365 0.25 0.198213 0.268443 0.3366 0.25 0.198229 0.268371 0.3367 0.25 0.198246 0.268298 0.3368 0.25 0.198263 0.268224 0.3369 0.25 0.19828 0.268148 0.337 0.25 0.198298 0.268071 0.3371 0.25 0.198315 0.267992 0.3372 0.25 0.198333 0.267912 0.3373 0.25 0.198352 0.26783 0.3374 0.25 0.19837 0.267747 0.3375 0.25 0.198389 0.267662 0.3376 0.25 0.198408 0.267576 0.3377 0.25 0.198428 0.267489 0.3378 0.25 0.198448 0.2674 0.3379 0.25 0.198468 0.26731 0.338 0.25 0.198488 0.267218 0.3381 0.25 0.198509 0.267125 0.3382 0.25 0.19853 0.26703 0.3383 0.25 0.198551 0.266934 0.3384 0.25 0.198572 0.266837 0.3385 0.25 0.198594 0.266738 0.3386 0.25 0.198616 0.266638 0.3387 0.25 0.198639 0.266537 0.3388 0.25 0.198661 0.266434 0.3389 0.25 0.198684 0.26633 0.339 0.25 0.198707 0.266224 0.3391 0.25 0.198731 0.266117 0.3392 0.25 0.198755 0.266009 0.3393 0.25 0.198779 0.265899 0.3394 0.25 0.198803 0.265788 0.3395 0.25 0.198828 0.265676 0.3396 0.25 0.198853 0.265562 0.3397 0.25 0.198878 0.265448 0.3398 0.25 0.198904 0.265331 0.3399 0.25 0.19893 0.265214 0.34 0.25 0.198956 0.265095 0.3401 0.25 0.198983 0.264975 0.3402 0.25 0.199009 0.264854 0.3403 0.25 0.199036 0.264731 0.3404 0.25 0.199064 0.264607 0.3405 0.25 0.199091 0.264482 0.3406 0.25 0.199119 0.264355 0.3407 0.25 0.199148 0.264228 0.3408 0.25 0.199176 0.264099 0.3409 0.25 0.199205 0.263969 0.341 0.25 0.199234 0.263837 0.3411 0.25 0.199263 0.263705 0.3412 0.25 0.199293 0.263571 0.3413 0.25 0.199323 0.263436 0.3414 0.25 0.199354 0.2633 0.3415 0.25 0.199384 0.263163 0.3416 0.25 0.199415 0.263024 0.3417 0.25 0.199446 0.262885 0.3418 0.25 0.199478 0.262744 0.3419 0.25 0.19951 0.262602 0.342 0.25 0.199542 0.262459 0.3421 0.25 0.199574 0.262315 0.3422 0.25 0.199607 0.26217 0.3423 0.25 0.19964 0.262023 0.3424 0.25 0.199673 0.261876 0.3425 0.25 0.199707 0.261727 0.3426 0.25 0.19974 0.261578 0.3427 0.25 0.199775 0.261427 0.3428 0.25 0.199809 0.261275 0.3429 0.25 0.199844 0.261123 0.343 0.25 0.199879 0.260969 0.3431 0.25 0.199914 0.260814 0.3432 0.25 0.19995 0.260658 0.3433 0.25 0.199986 0.260501 0.3434 0.25 0.200022 0.260344 0.3435 0.25 0.200059 0.260185 0.3436 0.25 0.200096 0.260025 0.3437 0.25 0.200133 0.259864 0.3438 0.25 0.20017 0.259702 0.3439 0.25 0.200208 0.25954 0.344 0.25 0.200246 0.259376 0.3441 0.25 0.200285 0.259212 0.3442 0.25 0.200323 0.259046 0.3443 0.25 0.200362 0.25888 0.3444 0.25 0.200402 0.258713 0.3445 0.25 0.200441 0.258545 0.3446 0.25 0.200481 0.258376 0.3447 0.25 0.200521 0.258206 0.3448 0.25 0.200562 0.258036 0.3449 0.25 0.200603 0.257864 0.345 0.25 0.200644 0.257692 0.3451 0.25 0.200685 0.257519 0.3452 0.25 0.200727 0.257345 0.3453 0.25 0.200769 0.25717 0.3454 0.25 0.200811 0.256995 0.3455 0.25 0.200854 0.256819 0.3456 0.25 0.200897 0.256642 0.3457 0.25 0.20094 0.256464 0.3458 0.25 0.200984 0.256286 0.3459 0.25 0.201027 0.256107 0.346 0.25 0.201072 0.255927 0.3461 0.25 0.201116 0.255747 0.3462 0.25 0.201161 0.255566 0.3463 0.25 0.201206 0.255384 0.3464 0.25 0.201251 0.255201 0.3465 0.25 0.201297 0.255018 0.3466 0.25 0.201343 0.254835 0.3467 0.25 0.201389 0.25465 0.3468 0.25 0.201436 0.254465 0.3469 0.25 0.201483 0.25428 0.347 0.25 0.20153 0.254094 0.3471 0.25 0.201577 0.253907 0.3472 0.25 0.201625 0.25372 0.3473 0.25 0.201673 0.253532 0.3474 0.25 0.201722 0.253344 0.3475 0.25 0.20177 0.253155 0.3476 0.25 0.201819 0.252966 0.3477 0.25 0.201869 0.252776 0.3478 0.25 0.201918 0.252586 0.3479 0.25 0.201968 0.252396 0.348 0.25 0.202019 0.252205 0.3481 0.25 0.202069 0.252013 0.3482 0.25 0.20212 0.251821 0.3483 0.25 0.202171 0.251629 0.3484 0.25 0.202223 0.251436 0.3485 0.25 0.202275 0.251243 0.3486 0.25 0.202327 0.25105 0.3487 0.25 0.202379 0.250856 0.3488 0.25 0.202432 0.250662 0.3489 0.25 0.202485 0.250467 0.349 0.25 0.202538 0.250273 0.3491 0.25 0.202592 0.250078 0.3492 0.25 0.202646 0.249882 0.3493 0.25 0.2027 0.249687 0.3494 0.25 0.202755 0.249491 0.3495 0.25 0.20281 0.249295 0.3496 0.25 0.202865 0.249098 0.3497 0.25 0.20292 0.248902 0.3498 0.25 0.202976 0.248705 0.3499 0.25 0.203032 0.248508 0.35 0.25 0.203089 0.248311 0.3501 0.25 0.203146 0.248114 0.3502 0.25 0.203203 0.247917 0.3503 0.25 0.20326 0.247719 0.3504 0.25 0.203318 0.247522 0.3505 0.25 0.203376 0.247324 0.3506 0.25 0.203434 0.247126 0.3507 0.25 0.203493 0.246929 0.3508 0.25 0.203551 0.246731 0.3509 0.25 0.203611 0.246533 0.351 0.25 0.20367 0.246335 0.3511 0.25 0.20373 0.246137 0.3512 0.25 0.20379 0.245939 0.3513 0.25 0.203851 0.245741 0.3514 0.25 0.203912 0.245543 0.3515 0.25 0.203973 0.245345 0.3516 0.25 0.204034 0.245148 0.3517 0.25 0.204096 0.24495 0.3518 0.25 0.204158 0.244752 0.3519 0.25 0.20422 0.244555 0.352 0.25 0.204283 0.244357 0.3521 0.25 0.204346 0.24416 0.3522 0.25 0.204409 0.243963 0.3523 0.25 0.204473 0.243766 0.3524 0.25 0.204537 0.243569 0.3525 0.25 0.204601 0.243373 0.3526 0.25 0.204665 0.243176 0.3527 0.25 0.20473 0.24298 0.3528 0.25 0.204795 0.242784 0.3529 0.25 0.204861 0.242589 0.353 0.25 0.204927 0.242393 0.3531 0.25 0.204993 0.242198 0.3532 0.25 0.205059 0.242003 0.3533 0.25 0.205126 0.241809 0.3534 0.25 0.205193 0.241615 0.3535 0.25 0.20526 0.241421 0.3536 0.25 0.205328 0.241227 0.3537 0.25 0.205396 0.241034 0.3538 0.25 0.205464 0.240841 0.3539 0.25 0.205533 0.240649 0.354 0.25 0.205602 0.240457 0.3541 0.25 0.205671 0.240266 0.3542 0.25 0.205741 0.240074 0.3543 0.25 0.205811 0.239884 0.3544 0.25 0.205881 0.239694 0.3545 0.25 0.205951 0.239504 0.3546 0.25 0.206022 0.239315 0.3547 0.25 0.206093 0.239126 0.3548 0.25 0.206165 0.238938 0.3549 0.25 0.206237 0.23875 0.355 0.25 0.206309 0.238563 0.3551 0.25 0.206381 0.238377 0.3552 0.25 0.206454 0.238191 0.3553 0.25 0.206527 0.238005 0.3554 0.25 0.2066 0.237821 0.3555 0.25 0.206674 0.237636 0.3556 0.25 0.206748 0.237453 0.3557 0.25 0.206822 0.23727 0.3558 0.25 0.206897 0.237088 0.3559 0.25 0.206972 0.236906 0.356 0.25 0.207047 0.236726 0.3561 0.25 0.207123 0.236546 0.3562 0.25 0.207198 0.236366 0.3563 0.25 0.207275 0.236188 0.3564 0.25 0.207351 0.23601 0.3565 0.25 0.207428 0.235833 0.3566 0.25 0.207505 0.235656 0.3567 0.25 0.207583 0.235481 0.3568 0.25 0.20766 0.235306 0.3569 0.25 0.207738 0.235132 0.357 0.25 0.207817 0.234959 0.3571 0.25 0.207896 0.234787 0.3572 0.25 0.207975 0.234615 0.3573 0.25 0.208054 0.234445 0.3574 0.25 0.208134 0.234275 0.3575 0.25 0.208214 0.234106 0.3576 0.25 0.208294 0.233938 0.3577 0.25 0.208375 0.233772 0.3578 0.25 0.208456 0.233606 0.3579 0.25 0.208537 0.233441 0.358 0.25 0.208618 0.233277 0.3581 0.25 0.2087 0.233113 0.3582 0.25 0.208783 0.232951 0.3583 0.25 0.208865 0.23279 0.3584 0.25 0.208948 0.23263 0.3585 0.25 0.209031 0.232471 0.3586 0.25 0.209115 0.232313 0.3587 0.25 0.209198 0.232156 0.3588 0.25 0.209283 0.232 0.3589 0.25 0.209367 0.231846 0.359 0.25 0.209452 0.231692 0.3591 0.25 0.209537 0.231539 0.3592 0.25 0.209622 0.231388 0.3593 0.25 0.209708 0.231237 0.3594 0.25 0.209794 0.231088 0.3595 0.25 0.20988 0.23094 0.3596 0.25 0.209967 0.230793 0.3597 0.25 0.210054 0.230648 0.3598 0.25 0.210141 0.230503 0.3599 0.25 0.210229 0.23036 0.36 0.25 0.210317 0.230218 0.3601 0.25 0.210405 0.230077 0.3602 0.25 0.210494 0.229937 0.3603 0.25 0.210583 0.229799 0.3604 0.25 0.210672 0.229662 0.3605 0.25 0.210762 0.229526 0.3606 0.25 0.210852 0.229391 0.3607 0.25 0.210942 0.229258 0.3608 0.25 0.211032 0.229126 0.3609 0.25 0.211123 0.228995 0.361 0.25 0.211214 0.228866 0.3611 0.25 0.211306 0.228738 0.3612 0.25 0.211397 0.228611 0.3613 0.25 0.21149 0.228486 0.3614 0.25 0.211582 0.228362 0.3615 0.25 0.211675 0.22824 0.3616 0.25 0.211768 0.228119 0.3617 0.25 0.211861 0.227999 0.3618 0.25 0.211955 0.227881 0.3619 0.25 0.212049 0.227764 0.362 0.25 0.212143 0.227649 0.3621 0.25 0.212238 0.227535 0.3622 0.25 0.212333 0.227422 0.3623 0.25 0.212428 0.227311 0.3624 0.25 0.212524 0.227202 0.3625 0.25 0.21262 0.227093 0.3626 0.25 0.212716 0.226987 0.3627 0.25 0.212813 0.226882 0.3628 0.25 0.21291 0.226778 0.3629 0.25 0.213007 0.226676 0.363 0.25 0.213104 0.226576 0.3631 0.25 0.213202 0.226477 0.3632 0.25 0.2133 0.22638 0.3633 0.25 0.213399 0.226284 0.3634 0.25 0.213498 0.22619 0.3635 0.25 0.213597 0.226097 0.3636 0.25 0.213696 0.226006 0.3637 0.25 0.213796 0.225916 0.3638 0.25 0.213896 0.225829 0.3639 0.25 0.213997 0.225742 0.364 0.25 0.214097 0.225658 0.3641 0.25 0.214198 0.225575 0.3642 0.25 0.2143 0.225493 0.3643 0.25 0.214402 0.225414 0.3644 0.25 0.214504 0.225336 0.3645 0.25 0.214606 0.225259 0.3646 0.25 0.214709 0.225185 0.3647 0.25 0.214812 0.225112 0.3648 0.25 0.214915 0.22504 0.3649 0.25 0.215019 0.224971 0.365 0.25 0.215122 0.224903 0.3651 0.25 0.215227 0.224837 0.3652 0.25 0.215331 0.224772 0.3653 0.25 0.215436 0.22471 0.3654 0.25 0.215541 0.224649 0.3655 0.25 0.215647 0.224589 0.3656 0.25 0.215753 0.224532 0.3657 0.25 0.215859 0.224476 0.3658 0.25 0.215966 0.224422 0.3659 0.25 0.216072 0.22437 0.366 0.25 0.21618 0.224319 0.3661 0.25 0.216287 0.224271 0.3662 0.25 0.216395 0.224224 0.3663 0.25 0.216503 0.224179 0.3664 0.25 0.216611 0.224136 0.3665 0.25 0.21672 0.224094 0.3666 0.25 0.216829 0.224054 0.3667 0.25 0.216939 0.224017 0.3668 0.25 0.217048 0.223981 0.3669 0.25 0.217158 0.223946 0.367 0.25 0.217269 0.223914 0.3671 0.25 0.217379 0.223883 0.3672 0.25 0.217491 0.223855 0.3673 0.25 0.217602 0.223828 0.3674 0.25 0.217713 0.223803 0.3675 0.25 0.217825 0.22378 0.3676 0.25 0.217938 0.223758 0.3677 0.25 0.21805 0.223739 0.3678 0.25 0.218163 0.223721 0.3679 0.25 0.218277 0.223706 0.368 0.25 0.21839 0.223692 0.3681 0.25 0.218504 0.22368 0.3682 0.25 0.218618 0.22367 0.3683 0.25 0.218733 0.223662 0.3684 0.25 0.218848 0.223655 0.3685 0.25 0.218963 0.223651 0.3686 0.25 0.219078 0.223649 0.3687 0.25 0.219194 0.223648 0.3688 0.25 0.21931 0.223649 0.3689 0.25 0.219427 0.223653 0.369 0.25 0.219543 0.223658 0.3691 0.25 0.219661 0.223665 0.3692 0.25 0.219778 0.223674 0.3693 0.25 0.219896 0.223685 0.3694 0.25 0.220014 0.223697 0.3695 0.25 0.220132 0.223712 0.3696 0.25 0.220251 0.223729 0.3697 0.25 0.22037 0.223747 0.3698 0.25 0.220489 0.223768 0.3699 0.25 0.220609 0.22379 0.37 0.25 0.220729 0.223815 0.3701 0.25 0.220849 0.223841 0.3702 0.25 0.22097 0.223869 0.3703 0.25 0.221091 0.223899 0.3704 0.25 0.221212 0.223931 0.3705 0.25 0.221334 0.223965 0.3706 0.25 0.221455 0.224001 0.3707 0.25 0.221578 0.224039 0.3708 0.25 0.2217 0.224079 0.3709 0.25 0.221823 0.224121 0.371 0.25 0.221946 0.224164 0.3711 0.25 0.22207 0.22421 0.3712 0.25 0.222194 0.224257 0.3713 0.25 0.222318 0.224307 0.3714 0.25 0.222442 0.224358 0.3715 0.25 0.222567 0.224412 0.3716 0.25 0.222692 0.224467 0.3717 0.25 0.222817 0.224524 0.3718 0.25 0.222943 0.224583 0.3719 0.25 0.223069 0.224644 0.372 0.25 0.223196 0.224707 0.3721 0.25 0.223322 0.224772 0.3722 0.25 0.223449 0.224839 0.3723 0.25 0.223577 0.224908 0.3724 0.25 0.223704 0.224979 0.3725 0.25 0.223832 0.225051 0.3726 0.25 0.223961 0.225126 0.3727 0.25 0.224089 0.225202 0.3728 0.25 0.224218 0.225281 0.3729 0.25 0.224347 0.225361 0.373 0.25 0.224477 0.225443 0.3731 0.25 0.224607 0.225527 0.3732 0.25 0.224737 0.225613 0.3733 0.25 0.224868 0.225701 0.3734 0.25 0.224999 0.225791 0.3735 0.25 0.22513 0.225883 0.3736 0.25 0.225261 0.225976 0.3737 0.25 0.225393 0.226072 0.3738 0.25 0.225525 0.226169 0.3739 0.25 0.225658 0.226268 0.374 0.25 0.22579 0.22637 0.3741 0.25 0.225923 0.226473 0.3742 0.25 0.226057 0.226577 0.3743 0.25 0.226191 0.226684 0.3744 0.25 0.226325 0.226793 0.3745 0.25 0.226459 0.226903 0.3746 0.25 0.226594 0.227016 0.3747 0.25 0.226729 0.22713 0.3748 0.25 0.226864 0.227246 0.3749 0.25 0.227 0.227363 0.375 0.25 0.227135 0.227483 0.3751 0.25 0.227272 0.227605 0.3752 0.25 0.227408 0.227728 0.3753 0.25 0.227545 0.227853 0.3754 0.25 0.227682 0.22798 0.3755 0.25 0.22782 0.228108 0.3756 0.25 0.227958 0.228239 0.3757 0.25 0.228096 0.228371 0.3758 0.25 0.228235 0.228505 0.3759 0.25 0.228373 0.228641 0.376 0.25 0.228512 0.228779 0.3761 0.25 0.228652 0.228918 0.3762 0.25 0.228792 0.229059 0.3763 0.25 0.228932 0.229202 0.3764 0.25 0.229072 0.229347 0.3765 0.25 0.229213 0.229493 0.3766 0.25 0.229354 0.229641 0.3767 0.25 0.229495 0.229791 0.3768 0.25 0.229637 0.229943 0.3769 0.25 0.229779 0.230096 0.377 0.25 0.229921 0.230251 0.3771 0.25 0.230064 0.230407 0.3772 0.25 0.230207 0.230566 0.3773 0.25 0.23035 0.230726 0.3774 0.25 0.230494 0.230887 0.3775 0.25 0.230637 0.23105 0.3776 0.25 0.230782 0.231215 0.3777 0.25 0.230926 0.231382 0.3778 0.25 0.231071 0.23155 0.3779 0.25 0.231216 0.23172 0.378 0.25 0.231362 0.231891 0.3781 0.25 0.231507 0.232064 0.3782 0.25 0.231653 0.232239 0.3783 0.25 0.2318 0.232415 0.3784 0.25 0.231947 0.232593 0.3785 0.25 0.232094 0.232772 0.3786 0.25 0.232241 0.232953 0.3787 0.25 0.232389 0.233136 0.3788 0.25 0.232537 0.23332 0.3789 0.25 0.232685 0.233505 0.379 0.25 0.232834 0.233692 0.3791 0.25 0.232983 0.233881 0.3792 0.25 0.233132 0.234071 0.3793 0.25 0.233281 0.234262 0.3794 0.25 0.233431 0.234455 0.3795 0.25 0.233581 0.23465 0.3796 0.25 0.233732 0.234845 0.3797 0.25 0.233883 0.235043 0.3798 0.25 0.234034 0.235241 0.3799 0.25 0.234185 0.235442 0.38 0.25 0.234337 0.235643 0.3801 0.25 0.234489 0.235846 0.3802 0.25 0.234642 0.23605 0.3803 0.25 0.234794 0.236256 0.3804 0.25 0.234947 0.236463 0.3805 0.25 0.235101 0.236672 0.3806 0.25 0.235254 0.236881 0.3807 0.25 0.235408 0.237092 0.3808 0.25 0.235563 0.237305 0.3809 0.25 0.235717 0.237518 0.381 0.25 0.235872 0.237733 0.3811 0.25 0.236027 0.23795 0.3812 0.25 0.236183 0.238167 0.3813 0.25 0.236339 0.238386 0.3814 0.25 0.236495 0.238606 0.3815 0.25 0.236651 0.238827 0.3816 0.25 0.236808 0.239049 0.3817 0.25 0.236965 0.239273 0.3818 0.25 0.237123 0.239497 0.3819 0.25 0.23728 0.239723 0.382 0.25 0.237438 0.23995 0.3821 0.25 0.237597 0.240179 0.3822 0.25 0.237755 0.240408 0.3823 0.25 0.237914 0.240638 0.3824 0.25 0.238074 0.24087 0.3825 0.25 0.238233 0.241102 0.3826 0.25 0.238393 0.241336 0.3827 0.25 0.238553 0.241571 0.3828 0.25 0.238714 0.241807 0.3829 0.25 0.238875 0.242043 0.383 0.25 0.239036 0.242281 0.3831 0.25 0.239197 0.24252 0.3832 0.25 0.239359 0.24276 0.3833 0.25 0.239521 0.243 0.3834 0.25 0.239684 0.243242 0.3835 0.25 0.239846 0.243485 0.3836 0.25 0.240009 0.243728 0.3837 0.25 0.240173 0.243973 0.3838 0.25 0.240336 0.244218 0.3839 0.25 0.2405 0.244464 0.384 0.25 0.240664 0.244711 0.3841 0.25 0.240829 0.244959 0.3842 0.25 0.240994 0.245208 0.3843 0.25 0.241159 0.245457 0.3844 0.25 0.241325 0.245708 0.3845 0.25 0.24149 0.245959 0.3846 0.25 0.241657 0.246211 0.3847 0.25 0.241823 0.246464 0.3848 0.25 0.24199 0.246717 0.3849 0.25 0.242157 0.246971 0.385 0.25 0.242324 0.247226 0.3851 0.25 0.242492 0.247481 0.3852 0.25 0.24266 0.247737 0.3853 0.25 0.242828 0.247994 0.3854 0.25 0.242997 0.248252 0.3855 0.25 0.243165 0.24851 0.3856 0.25 0.243335 0.248768 0.3857 0.25 0.243504 0.249028 0.3858 0.25 0.243674 0.249287 0.3859 0.25 0.243844 0.249548 0.386 0.25 0.244015 0.249809 0.3861 0.25 0.244185 0.25007 0.3862 0.25 0.244356 0.250332 0.3863 0.25 0.244528 0.250594 0.3864 0.25 0.244699 0.250857 0.3865 0.25 0.244871 0.25112 0.3866 0.25 0.245044 0.251384 0.3867 0.25 0.245216 0.251648 0.3868 0.25 0.245389 0.251913 0.3869 0.25 0.245562 0.252178 0.387 0.25 0.245736 0.252443 0.3871 0.25 0.245909 0.252709 0.3872 0.25 0.246084 0.252975 0.3873 0.25 0.246258 0.253241 0.3874 0.25 0.246433 0.253507 0.3875 0.25 0.246608 0.253774 0.3876 0.25 0.246783 0.254041 0.3877 0.25 0.246959 0.254309 0.3878 0.25 0.247135 0.254576 0.3879 0.25 0.247311 0.254844 0.388 0.25 0.247487 0.255112 0.3881 0.25 0.247664 0.25538 0.3882 0.25 0.247841 0.255648 0.3883 0.25 0.248019 0.255917 0.3884 0.25 0.248197 0.256185 0.3885 0.25 0.248375 0.256454 0.3886 0.25 0.248553 0.256722 0.3887 0.25 0.248732 0.256991 0.3888 0.25 0.248911 0.25726 0.3889 0.25 0.24909 0.257528 0.389 0.25 0.24927 0.257797 0.3891 0.25 0.249449 0.258066 0.3892 0.25 0.24963 0.258335 0.3893 0.25 0.24981 0.258603 0.3894 0.25 0.249991 0.258872 0.3895 0.25 0.250172 0.25914 0.3896 0.25 0.250353 0.259409 0.3897 0.25 0.250535 0.259677 0.3898 0.25 0.250717 0.259945 0.3899 0.25 0.250899 0.260213 0.39 0.25 0.251082 0.260481 0.3901 0.25 0.251265 0.260748 0.3902 0.25 0.251448 0.261016 0.3903 0.25 0.251632 0.261283 0.3904 0.25 0.251815 0.261549 0.3905 0.25 0.252 0.261816 0.3906 0.25 0.252184 0.262082 0.3907 0.25 0.252369 0.262348 0.3908 0.25 0.252554 0.262614 0.3909 0.25 0.252739 0.262879 0.391 0.25 0.252925 0.263144 0.3911 0.25 0.25311 0.263408 0.3912 0.25 0.253297 0.263672 0.3913 0.25 0.253483 0.263936 0.3914 0.25 0.25367 0.264199 0.3915 0.25 0.253857 0.264462 0.3916 0.25 0.254044 0.264724 0.3917 0.25 0.254232 0.264986 0.3918 0.25 0.25442 0.265247 0.3919 0.25 0.254608 0.265508 0.392 0.25 0.254797 0.265768 0.3921 0.25 0.254986 0.266027 0.3922 0.25 0.255175 0.266286 0.3923 0.25 0.255365 0.266545 0.3924 0.25 0.255554 0.266802 0.3925 0.25 0.255744 0.267059 0.3926 0.25 0.255935 0.267316 0.3927 0.25 0.256126 0.267571 0.3928 0.25 0.256317 0.267826 0.3929 0.25 0.256508 0.26808 0.393 0.25 0.256699 0.268334 0.3931 0.25 0.256891 0.268586 0.3932 0.25 0.257083 0.268838 0.3933 0.25 0.257276 0.269089 0.3934 0.25 0.257469 0.26934 0.3935 0.25 0.257662 0.269589 0.3936 0.25 0.257855 0.269838 0.3937 0.25 0.258049 0.270085 0.3938 0.25 0.258242 0.270332 0.3939 0.25 0.258437 0.270578 0.394 0.25 0.258631 0.270823 0.3941 0.25 0.258826 0.271067 0.3942 0.25 0.259021 0.27131 0.3943 0.25 0.259216 0.271552 0.3944 0.25 0.259412 0.271793 0.3945 0.25 0.259608 0.272033 0.3946 0.25 0.259804 0.272272 0.3947 0.25 0.260001 0.27251 0.3948 0.25 0.260198 0.272746 0.3949 0.25 0.260395 0.272982 0.395 0.25 0.260592 0.273217 0.3951 0.25 0.26079 0.27345 0.3952 0.25 0.260988 0.273682 0.3953 0.25 0.261187 0.273913 0.3954 0.25 0.261385 0.274143 0.3955 0.25 0.261584 0.274372 0.3956 0.25 0.261783 0.274599 0.3957 0.25 0.261983 0.274826 0.3958 0.25 0.262183 0.275051 0.3959 0.25 0.262383 0.275274 0.396 0.25 0.262583 0.275497 0.3961 0.25 0.262784 0.275718 0.3962 0.25 0.262985 0.275937 0.3963 0.25 0.263186 0.276156 0.3964 0.25 0.263387 0.276373 0.3965 0.25 0.263589 0.276588 0.3966 0.25 0.263791 0.276802 0.3967 0.25 0.263994 0.277015 0.3968 0.25 0.264196 0.277226 0.3969 0.25 0.264399 0.277436 0.397 0.25 0.264602 0.277645 0.3971 0.25 0.264806 0.277851 0.3972 0.25 0.26501 0.278057 0.3973 0.25 0.265214 0.278261 0.3974 0.25 0.265418 0.278463 0.3975 0.25 0.265623 0.278664 0.3976 0.25 0.265828 0.278863 0.3977 0.25 0.266033 0.27906 0.3978 0.25 0.266239 0.279256 0.3979 0.25 0.266445 0.279451 0.398 0.25 0.266651 0.279643 0.3981 0.25 0.266857 0.279834 0.3982 0.25 0.267064 0.280024 0.3983 0.25 0.267271 0.280211 0.3984 0.25 0.267478 0.280397 0.3985 0.25 0.267686 0.280582 0.3986 0.25 0.267893 0.280764 0.3987 0.25 0.268102 0.280945 0.3988 0.25 0.26831 0.281124 0.3989 0.25 0.268519 0.281301 0.399 0.25 0.268728 0.281476 0.3991 0.25 0.268937 0.28165 0.3992 0.25 0.269146 0.281821 0.3993 0.25 0.269356 0.281991 0.3994 0.25 0.269566 0.282159 0.3995 0.25 0.269777 0.282325 0.3996 0.25 0.269987 0.282489 0.3997 0.25 0.270198 0.282651 0.3998 0.25 0.27041 0.282812 0.3999 0.25 0.270621 0.28297 0.4 0.25 0.270833 0.283127 0.4001 0.25 0.271045 0.283281 0.4002 0.25 0.271257 0.283433 0.4003 0.25 0.27147 0.283584 0.4004 0.25 0.271683 0.283732 0.4005 0.25 0.271896 0.283879 0.4006 0.25 0.27211 0.284023 0.4007 0.25 0.272323 0.284165 0.4008 0.25 0.272537 0.284306 0.4009 0.25 0.272752 0.284444 0.401 0.25 0.272966 0.28458 0.4011 0.25 0.273181 0.284714 0.4012 0.25 0.273396 0.284845 0.4013 0.25 0.273612 0.284975 0.4014 0.25 0.273827 0.285103 0.4015 0.25 0.274043 0.285228 0.4016 0.25 0.27426 0.285351 0.4017 0.25 0.274476 0.285472 0.4018 0.25 0.274693 0.285591 0.4019 0.25 0.27491 0.285707 0.402 0.25 0.275128 0.285821 0.4021 0.25 0.275345 0.285933 0.4022 0.25 0.275563 0.286043 0.4023 0.25 0.275781 0.286151 0.4024 0.25 0.276 0.286256 0.4025 0.25 0.276219 0.286359 0.4026 0.25 0.276438 0.286459 0.4027 0.25 0.276657 0.286558 0.4028 0.25 0.276877 0.286654 0.4029 0.25 0.277096 0.286747 0.403 0.25 0.277317 0.286838 0.4031 0.25 0.277537 0.286927 0.4032 0.25 0.277758 0.287014 0.4033 0.25 0.277979 0.287098 0.4034 0.25 0.2782 0.287179 0.4035 0.25 0.278421 0.287259 0.4036 0.25 0.278643 0.287336 0.4037 0.25 0.278865 0.28741 0.4038 0.25 0.279087 0.287482 0.4039 0.25 0.27931 0.287552 0.404 0.25 0.279533 0.287619 0.4041 0.25 0.279756 0.287683 0.4042 0.25 0.279979 0.287745 0.4043 0.25 0.280203 0.287805 0.4044 0.25 0.280427 0.287862 0.4045 0.25 0.280651 0.287917 0.4046 0.25 0.280876 0.287969 0.4047 0.25 0.281101 0.288018 0.4048 0.25 0.281326 0.288065 0.4049 0.25 0.281551 0.28811 0.405 0.25 0.281777 0.288152 0.4051 0.25 0.282002 0.288191 0.4052 0.25 0.282228 0.288228 0.4053 0.25 0.282455 0.288262 0.4054 0.25 0.282682 0.288294 0.4055 0.25 0.282908 0.288322 0.4056 0.25 0.283136 0.288349 0.4057 0.25 0.283363 0.288373 0.4058 0.25 0.283591 0.288394 0.4059 0.25 0.283819 0.288412 0.406 0.25 0.284047 0.288428 0.4061 0.25 0.284276 0.288441 0.4062 0.25 0.284504 0.288452 0.4063 0.25 0.284733 0.28846 0.4064 0.25 0.284963 0.288465 0.4065 0.25 0.285192 0.288468 0.4066 0.25 0.285422 0.288467 0.4067 0.25 0.285652 0.288465 0.4068 0.25 0.285883 0.288459 0.4069 0.25 0.286113 0.288451 0.407 0.25 0.286344 0.28844 0.4071 0.25 0.286575 0.288427 0.4072 0.25 0.286807 0.28841 0.4073 0.25 0.287039 0.288391 0.4074 0.25 0.287271 0.288369 0.4075 0.25 0.287503 0.288345 0.4076 0.25 0.287735 0.288318 0.4077 0.25 0.287968 0.288288 0.4078 0.25 0.288201 0.288255 0.4079 0.25 0.288434 0.28822 0.408 0.25 0.288668 0.288181 0.4081 0.25 0.288902 0.28814 0.4082 0.25 0.289136 0.288097 0.4083 0.25 0.28937 0.28805 0.4084 0.25 0.289605 0.288001 0.4085 0.25 0.28984 0.287949 0.4086 0.25 0.290075 0.287894 0.4087 0.25 0.29031 0.287837 0.4088 0.25 0.290546 0.287776 0.4089 0.25 0.290782 0.287713 0.409 0.25 0.291018 0.287647 0.4091 0.25 0.291254 0.287578 0.4092 0.25 0.291491 0.287507 0.4093 0.25 0.291728 0.287433 0.4094 0.25 0.291965 0.287356 0.4095 0.25 0.292202 0.287276 0.4096 0.25 0.29244 0.287193 0.4097 0.25 0.292678 0.287108 0.4098 0.25 0.292916 0.287019 0.4099 0.25 0.293155 0.286928 0.41 0.25 0.293393 0.286834 0.4101 0.25 0.293632 0.286738 0.4102 0.25 0.293871 0.286638 0.4103 0.25 0.294111 0.286536 0.4104 0.25 0.294351 0.286431 0.4105 0.25 0.294591 0.286323 0.4106 0.25 0.294831 0.286212 0.4107 0.25 0.295071 0.286099 0.4108 0.25 0.295312 0.285983 0.4109 0.25 0.295553 0.285863 0.411 0.25 0.295794 0.285742 0.4111 0.25 0.296036 0.285617 0.4112 0.25 0.296278 0.285489 0.4113 0.25 0.29652 0.285359 0.4114 0.25 0.296762 0.285226 0.4115 0.25 0.297005 0.28509 0.4116 0.25 0.297247 0.284952 0.4117 0.25 0.29749 0.28481 0.4118 0.25 0.297734 0.284666 0.4119 0.25 0.297977 0.284519 0.412 0.25 0.298221 0.284369 0.4121 0.25 0.298465 0.284217 0.4122 0.25 0.298709 0.284061 0.4123 0.25 0.298954 0.283903 0.4124 0.25 0.299199 0.283742 0.4125 0.25 0.299444 0.283579 0.4126 0.25 0.299689 0.283412 0.4127 0.25 0.299934 0.283243 0.4128 0.25 0.30018 0.283071 0.4129 0.25 0.300426 0.282897 0.413 0.25 0.300672 0.282719 0.4131 0.25 0.300919 0.282539 0.4132 0.25 0.301166 0.282357 0.4133 0.25 0.301413 0.282171 0.4134 0.25 0.30166 0.281983 0.4135 0.25 0.301907 0.281792 0.4136 0.25 0.302155 0.281598 0.4137 0.25 0.302403 0.281402 0.4138 0.25 0.302651 0.281203 0.4139 0.25 0.3029 0.281001 0.414 0.25 0.303149 0.280796 0.4141 0.25 0.303398 0.280589 0.4142 0.25 0.303647 0.280379 0.4143 0.25 0.303896 0.280167 0.4144 0.25 0.304146 0.279952 0.4145 0.25 0.304396 0.279734 0.4146 0.25 0.304646 0.279513 0.4147 0.25 0.304896 0.27929 0.4148 0.25 0.305147 0.279065 0.4149 0.25 0.305398 0.278836 0.415 0.25 0.305649 0.278605 0.4151 0.25 0.3059 0.278372 0.4152 0.25 0.306152 0.278136 0.4153 0.25 0.306404 0.277897 0.4154 0.25 0.306656 0.277656 0.4155 0.25 0.306908 0.277412 0.4156 0.25 0.307161 0.277165 0.4157 0.25 0.307414 0.276916 0.4158 0.25 0.307667 0.276665 0.4159 0.25 0.30792 0.276411 0.416 0.25 0.308174 0.276154 0.4161 0.25 0.308428 0.275895 0.4162 0.25 0.308682 0.275633 0.4163 0.25 0.308936 0.275369 0.4164 0.25 0.30919 0.275103 0.4165 0.25 0.309445 0.274834 0.4166 0.25 0.3097 0.274562 0.4167 0.25 0.309955 0.274288 0.4168 0.25 0.310211 0.274012 0.4169 0.25 0.310466 0.273733 0.417 0.25 0.310722 0.273452 0.4171 0.25 0.310978 0.273169 0.4172 0.25 0.311235 0.272883 0.4173 0.25 0.311491 0.272594 0.4174 0.25 0.311748 0.272304 0.4175 0.25 0.312005 0.272011 0.4176 0.25 0.312263 0.271715 0.4177 0.25 0.31252 0.271417 0.4178 0.25 0.312778 0.271117 0.4179 0.25 0.313036 0.270815 0.418 0.25 0.313294 0.270511 0.4181 0.25 0.313553 0.270204 0.4182 0.25 0.313811 0.269895 0.4183 0.25 0.31407 0.269583 0.4184 0.25 0.314329 0.26927 0.4185 0.25 0.314589 0.268954 0.4186 0.25 0.314848 0.268636 0.4187 0.25 0.315108 0.268316 0.4188 0.25 0.315368 0.267993 0.4189 0.25 0.315629 0.267669 0.419 0.25 0.315889 0.267342 0.4191 0.25 0.31615 0.267014 0.4192 0.25 0.316411 0.266683 0.4193 0.25 0.316672 0.26635 0.4194 0.25 0.316933 0.266015 0.4195 0.25 0.317195 0.265678 0.4196 0.25 0.317457 0.265339 0.4197 0.25 0.317719 0.264997 0.4198 0.25 0.317982 0.264654 0.4199 0.25 0.318244 0.264309 0.42 0.25 0.318507 0.263962 0.4201 0.25 0.31877 0.263613 0.4202 0.25 0.319033 0.263262 0.4203 0.25 0.319297 0.262909 0.4204 0.25 0.31956 0.262554 0.4205 0.25 0.319824 0.262197 0.4206 0.25 0.320088 0.261839 0.4207 0.25 0.320353 0.261478 0.4208 0.25 0.320617 0.261116 0.4209 0.25 0.320882 0.260752 0.421 0.25 0.321147 0.260386 0.4211 0.25 0.321412 0.260018 0.4212 0.25 0.321678 0.259649 0.4213 0.25 0.321944 0.259278 0.4214 0.25 0.32221 0.258905 0.4215 0.25 0.322476 0.25853 0.4216 0.25 0.322742 0.258154 0.4217 0.25 0.323009 0.257776 0.4218 0.25 0.323275 0.257397 0.4219 0.25 0.323542 0.257015 0.422 0.25 0.32381 0.256633 0.4221 0.25 0.324077 0.256248 0.4222 0.25 0.324345 0.255862 0.4223 0.25 0.324613 0.255475 0.4224 0.25 0.324881 0.255086 0.4225 0.25 0.325149 0.254695 0.4226 0.25 0.325418 0.254303 0.4227 0.25 0.325686 0.25391 0.4228 0.25 0.325955 0.253515 0.4229 0.25 0.326224 0.253118 0.423 0.25 0.326494 0.252721 0.4231 0.25 0.326763 0.252322 0.4232 0.25 0.327033 0.251921 0.4233 0.25 0.327303 0.251519 0.4234 0.25 0.327574 0.251116 0.4235 0.25 0.327844 0.250712 0.4236 0.25 0.328115 0.250306 0.4237 0.25 0.328386 0.2499 0.4238 0.25 0.328657 0.249492 0.4239 0.25 0.328928 0.249082 0.424 0.25 0.3292 0.248672 0.4241 0.25 0.329471 0.24826 0.4242 0.25 0.329743 0.247848 0.4243 0.25 0.330015 0.247434 0.4244 0.25 0.330288 0.247019 0.4245 0.25 0.33056 0.246603 0.4246 0.25 0.330833 0.246186 0.4247 0.25 0.331106 0.245768 0.4248 0.25 0.331379 0.245349 0.4249 0.25 0.331653 0.244929 0.425 0.25 0.331926 0.244508 0.4251 0.25 0.3322 0.244087 0.4252 0.25 0.332474 0.243664 0.4253 0.25 0.332748 0.24324 0.4254 0.25 0.333023 0.242816 0.4255 0.25 0.333298 0.242391 0.4256 0.25 0.333572 0.241965 0.4257 0.25 0.333848 0.241538 0.4258 0.25 0.334123 0.241111 0.4259 0.25 0.334398 0.240683 0.426 0.25 0.334674 0.240254 0.4261 0.25 0.33495 0.239824 0.4262 0.25 0.335226 0.239394 0.4263 0.25 0.335502 0.238964 0.4264 0.25 0.335779 0.238532 0.4265 0.25 0.336055 0.2381 0.4266 0.25 0.336332 0.237668 0.4267 0.25 0.336609 0.237235 0.4268 0.25 0.336887 0.236802 0.4269 0.25 0.337164 0.236368 0.427 0.25 0.337442 0.235933 0.4271 0.25 0.33772 0.235499 0.4272 0.25 0.337998 0.235064 0.4273 0.25 0.338276 0.234628 0.4274 0.25 0.338555 0.234193 0.4275 0.25 0.338833 0.233757 0.4276 0.25 0.339112 0.23332 0.4277 0.25 0.339391 0.232884 0.4278 0.25 0.339671 0.232447 0.4279 0.25 0.33995 0.23201 0.428 0.25 0.34023 0.231573 0.4281 0.25 0.34051 0.231136 0.4282 0.25 0.34079 0.230699 0.4283 0.25 0.34107 0.230261 0.4284 0.25 0.341351 0.229824 0.4285 0.25 0.341631 0.229387 0.4286 0.25 0.341912 0.228949 0.4287 0.25 0.342193 0.228512 0.4288 0.25 0.342474 0.228074 0.4289 0.25 0.342756 0.227637 0.429 0.25 0.343038 0.2272 0.4291 0.25 0.343319 0.226763 0.4292 0.25 0.343601 0.226326 0.4293 0.25 0.343884 0.22589 0.4294 0.25 0.344166 0.225453 0.4295 0.25 0.344449 0.225017 0.4296 0.25 0.344731 0.224582 0.4297 0.25 0.345014 0.224146 0.4298 0.25 0.345298 0.223711 0.4299 0.25 0.345581 0.223276 0.43 0.25 0.345864 0.222842 0.4301 0.25 0.346148 0.222408 0.4302 0.25 0.346432 0.221975 0.4303 0.25 0.346716 0.221542 0.4304 0.25 0.347001 0.22111 0.4305 0.25 0.347285 0.220678 0.4306 0.25 0.34757 0.220247 0.4307 0.25 0.347855 0.219816 0.4308 0.25 0.34814 0.219386 0.4309 0.25 0.348425 0.218957 0.431 0.25 0.34871 0.218528 0.4311 0.25 0.348996 0.2181 0.4312 0.25 0.349282 0.217673 0.4313 0.25 0.349568 0.217247 0.4314 0.25 0.349854 0.216821 0.4315 0.25 0.35014 0.216397 0.4316 0.25 0.350427 0.215973 0.4317 0.25 0.350714 0.21555 0.4318 0.25 0.351 0.215128 0.4319 0.25 0.351287 0.214707 0.432 0.25 0.351575 0.214287 0.4321 0.25 0.351862 0.213868 0.4322 0.25 0.35215 0.21345 0.4323 0.25 0.352438 0.213033 0.4324 0.25 0.352726 0.212618 0.4325 0.25 0.353014 0.212203 0.4326 0.25 0.353302 0.21179 0.4327 0.25 0.353591 0.211378 0.4328 0.25 0.353879 0.210967 0.4329 0.25 0.354168 0.210557 0.433 0.25 0.354457 0.210149 0.4331 0.25 0.354747 0.209742 0.4332 0.25 0.355036 0.209336 0.4333 0.25 0.355326 0.208932 0.4334 0.25 0.355615 0.208529 0.4335 0.25 0.355905 0.208128 0.4336 0.25 0.356195 0.207728 0.4337 0.25 0.356486 0.20733 0.4338 0.25 0.356776 0.206933 0.4339 0.25 0.357067 0.206538 0.434 0.25 0.357358 0.206144 0.4341 0.25 0.357649 0.205752 0.4342 0.25 0.35794 0.205362 0.4343 0.25 0.358231 0.204973 0.4344 0.25 0.358523 0.204586 0.4345 0.25 0.358814 0.204201 0.4346 0.25 0.359106 0.203817 0.4347 0.25 0.359398 0.203436 0.4348 0.25 0.359691 0.203056 0.4349 0.25 0.359983 0.202678 0.435 0.25 0.360276 0.202302 0.4351 0.25 0.360568 0.201928 0.4352 0.25 0.360861 0.201556 0.4353 0.25 0.361154 0.201186 0.4354 0.25 0.361447 0.200818 0.4355 0.25 0.361741 0.200452 0.4356 0.25 0.362034 0.200088 0.4357 0.25 0.362328 0.199727 0.4358 0.25 0.362622 0.199367 0.4359 0.25 0.362916 0.19901 0.436 0.25 0.36321 0.198655 0.4361 0.25 0.363505 0.198302 0.4362 0.25 0.363799 0.197951 0.4363 0.25 0.364094 0.197602 0.4364 0.25 0.364389 0.197256 0.4365 0.25 0.364684 0.196913 0.4366 0.25 0.364979 0.196571 0.4367 0.25 0.365275 0.196233 0.4368 0.25 0.36557 0.195896 0.4369 0.25 0.365866 0.195562 0.437 0.25 0.366162 0.195231 0.4371 0.25 0.366458 0.194902 0.4372 0.25 0.366754 0.194576 0.4373 0.25 0.36705 0.194252 0.4374 0.25 0.367347 0.193931 0.4375 0.25 0.367644 0.193612 0.4376 0.25 0.36794 0.193297 0.4377 0.25 0.368237 0.192984 0.4378 0.25 0.368535 0.192673 0.4379 0.25 0.368832 0.192366 0.438 0.25 0.369129 0.192061 0.4381 0.25 0.369427 0.191759 0.4382 0.25 0.369725 0.19146 0.4383 0.25 0.370023 0.191164 0.4384 0.25 0.370321 0.190871 0.4385 0.25 0.370619 0.190581 0.4386 0.25 0.370918 0.190294 0.4387 0.25 0.371216 0.190009 0.4388 0.25 0.371515 0.189728 0.4389 0.25 0.371814 0.18945 0.439 0.25 0.372113 0.189175 0.4391 0.25 0.372412 0.188903 0.4392 0.25 0.372711 0.188635 0.4393 0.25 0.373011 0.188369 0.4394 0.25 0.373311 0.188107 0.4395 0.25 0.37361 0.187848 0.4396 0.25 0.37391 0.187592 0.4397 0.25 0.37421 0.187339 0.4398 0.25 0.374511 0.18709 0.4399 0.25 0.374811 0.186844 0.44 0.25 0.375112 0.186602 0.4401 0.25 0.375412 0.186363 0.4402 0.25 0.375713 0.186127 0.4403 0.25 0.376014 0.185895 0.4404 0.25 0.376315 0.185667 0.4405 0.25 0.376617 0.185442 0.4406 0.25 0.376918 0.18522 0.4407 0.25 0.37722 0.185002 0.4408 0.25 0.377522 0.184788 0.4409 0.25 0.377823 0.184577 0.441 0.25 0.378126 0.18437 0.4411 0.25 0.378428 0.184167 0.4412 0.25 0.37873 0.183967 0.4413 0.25 0.379033 0.183771 0.4414 0.25 0.379335 0.183579 0.4415 0.25 0.379638 0.183391 0.4416 0.25 0.379941 0.183206 0.4417 0.25 0.380244 0.183026 0.4418 0.25 0.380547 0.182849 0.4419 0.25 0.380851 0.182676 0.442 0.25 0.381154 0.182507 0.4421 0.25 0.381458 0.182342 0.4422 0.25 0.381761 0.182181 0.4423 0.25 0.382065 0.182024 0.4424 0.25 0.382369 0.181871 0.4425 0.25 0.382674 0.181722 0.4426 0.25 0.382978 0.181578 0.4427 0.25 0.383282 0.181437 0.4428 0.25 0.383587 0.1813 0.4429 0.25 0.383892 0.181168 0.443 0.25 0.384197 0.18104 0.4431 0.25 0.384502 0.180916 0.4432 0.25 0.384807 0.180796 0.4433 0.25 0.385112 0.18068 0.4434 0.25 0.385418 0.180569 0.4435 0.25 0.385723 0.180462 0.4436 0.25 0.386029 0.18036 0.4437 0.25 0.386335 0.180261 0.4438 0.25 0.386641 0.180168 0.4439 0.25 0.386947 0.180078 0.444 0.25 0.387253 0.179993 0.4441 0.25 0.38756 0.179913 0.4442 0.25 0.387866 0.179837 0.4443 0.25 0.388173 0.179765 0.4444 0.25 0.38848 0.179698 0.4445 0.25 0.388786 0.179635 0.4446 0.25 0.389094 0.179577 0.4447 0.25 0.389401 0.179524 0.4448 0.25 0.389708 0.179475 0.4449 0.25 0.390015 0.179431 0.445 0.25 0.390323 0.179392 0.4451 0.25 0.390631 0.179357 0.4452 0.25 0.390939 0.179327 0.4453 0.25 0.391247 0.179302 0.4454 0.25 0.391555 0.179281 0.4455 0.25 0.391863 0.179265 0.4456 0.25 0.392171 0.179254 0.4457 0.25 0.39248 0.179248 0.4458 0.25 0.392788 0.179247 0.4459 0.25 0.393097 0.17925 0.446 0.25 0.393406 0.179259 0.4461 0.25 0.393715 0.179272 0.4462 0.25 0.394024 0.17929 0.4463 0.25 0.394333 0.179313 0.4464 0.25 0.394642 0.179341 0.4465 0.25 0.394952 0.179374 0.4466 0.25 0.395262 0.179413 0.4467 0.25 0.395571 0.179456 0.4468 0.25 0.395881 0.179504 0.4469 0.25 0.396191 0.179557 0.447 0.25 0.396501 0.179615 0.4471 0.25 0.396811 0.179678 0.4472 0.25 0.397122 0.179747 0.4473 0.25 0.397432 0.17982 0.4474 0.25 0.397743 0.179899 0.4475 0.25 0.398053 0.179983 0.4476 0.25 0.398364 0.180072 0.4477 0.25 0.398675 0.180166 0.4478 0.25 0.398986 0.180266 0.4479 0.25 0.399297 0.180371 0.448 0.25 0.399609 0.180481 0.4481 0.25 0.39992 0.180596 0.4482 0.25 0.400231 0.180717 0.4483 0.25 0.400543 0.180843 0.4484 0.25 0.400855 0.180974 0.4485 0.25 0.401167 0.18111 0.4486 0.25 0.401479 0.181252 0.4487 0.25 0.401791 0.181399 0.4488 0.25 0.402103 0.181552 0.4489 0.25 0.402415 0.18171 0.449 0.25 0.402728 0.181874 0.4491 0.25 0.40304 0.182043 0.4492 0.25 0.403353 0.182217 0.4493 0.25 0.403666 0.182397 0.4494 0.25 0.403979 0.182582 0.4495 0.25 0.404292 0.182773 0.4496 0.25 0.404605 0.182969 0.4497 0.25 0.404918 0.183171 0.4498 0.25 0.405231 0.183379 0.4499 0.25 0.405545 0.183592 0.45 0.25 0.405858 0.18381 0.4501 0.25 0.406172 0.184034 0.4502 0.25 0.406485 0.184264 0.4503 0.25 0.406799 0.184499 0.4504 0.25 0.407113 0.18474 0.4505 0.25 0.407427 0.184987 0.4506 0.25 0.407742 0.185239 0.4507 0.25 0.408056 0.185497 0.4508 0.25 0.40837 0.185761 0.4509 0.25 0.408685 0.18603 0.451 0.25 0.408999 0.186305 0.4511 0.25 0.409314 0.186585 0.4512 0.25 0.409629 0.186872 0.4513 0.25 0.409944 0.187164 0.4514 0.25 0.410259 0.187461 0.4515 0.25 0.410574 0.187765 0.4516 0.25 0.410889 0.188074 0.4517 0.25 0.411204 0.188389 0.4518 0.25 0.41152 0.18871 0.4519 0.25 0.411835 0.189037 0.452 0.25 0.412151 0.189369 0.4521 0.25 0.412467 0.189707 0.4522 0.25 0.412782 0.190051 0.4523 0.25 0.413098 0.190401 0.4524 0.25 0.413414 0.190757 0.4525 0.25 0.41373 0.191119 0.4526 0.25 0.414047 0.191486 0.4527 0.25 0.414363 0.191859 0.4528 0.25 0.414679 0.192238 0.4529 0.25 0.414996 0.192623 0.453 0.25 0.415312 0.193014 0.4531 0.25 0.415629 0.193411 0.4532 0.25 0.415946 0.193813 0.4533 0.25 0.416263 0.194222 0.4534 0.25 0.41658 0.194636 0.4535 0.25 0.416897 0.195057 0.4536 0.25 0.417214 0.195483 0.4537 0.25 0.417531 0.195915 0.4538 0.25 0.417849 0.196353 0.4539 0.25 0.418166 0.196797 0.454 0.25 0.418484 0.197247 0.4541 0.25 0.418801 0.197703 0.4542 0.25 0.419119 0.198165 0.4543 0.25 0.419437 0.198633 0.4544 0.25 0.419755 0.199107 0.4545 0.25 0.420073 0.199587 0.4546 0.25 0.420391 0.200072 0.4547 0.25 0.420709 0.200564 0.4548 0.25 0.421027 0.201062 0.4549 0.25 0.421345 0.201565 0.455 0.25 0.421664 0.202075 0.4551 0.25 0.421982 0.20259 0.4552 0.25 0.422301 0.203112 0.4553 0.25 0.42262 0.20364 0.4554 0.25 0.422938 0.204173 0.4555 0.25 0.423257 0.204713 0.4556 0.25 0.423576 0.205258 0.4557 0.25 0.423895 0.20581 0.4558 0.25 0.424214 0.206367 0.4559 0.25 0.424534 0.206931 0.456 0.25 0.424853 0.2075 0.4561 0.25 0.425172 0.208076 0.4562 0.25 0.425492 0.208657 0.4563 0.25 0.425811 0.209245 0.4564 0.25 0.426131 0.209838 0.4565 0.25 0.42645 0.210438 0.4566 0.25 0.42677 0.211043 0.4567 0.25 0.42709 0.211654 0.4568 0.25 0.42741 0.212272 0.4569 0.25 0.42773 0.212895 0.457 0.25 0.42805 0.213525 0.4571 0.25 0.42837 0.21416 0.4572 0.25 0.42869 0.214801 0.4573 0.25 0.429011 0.215449 0.4574 0.25 0.429331 0.216102 0.4575 0.25 0.429651 0.216761 0.4576 0.25 0.429972 0.217427 0.4577 0.25 0.430293 0.218098 0.4578 0.25 0.430613 0.218775 0.4579 0.25 0.430934 0.219458 0.458 0.25 0.431255 0.220147 0.4581 0.25 0.431576 0.220842 0.4582 0.25 0.431897 0.221543 0.4583 0.25 0.432218 0.22225 0.4584 0.25 0.432539 0.222963 0.4585 0.25 0.43286 0.223682 0.4586 0.25 0.433181 0.224407 0.4587 0.25 0.433503 0.225137 0.4588 0.25 0.433824 0.225874 0.4589 0.25 0.434146 0.226616 0.459 0.25 0.434467 0.227365 0.4591 0.25 0.434789 0.228119 0.4592 0.25 0.43511 0.228879 0.4593 0.25 0.435432 0.229645 0.4594 0.25 0.435754 0.230417 0.4595 0.25 0.436076 0.231195 0.4596 0.25 0.436398 0.231978 0.4597 0.25 0.43672 0.232768 0.4598 0.25 0.437042 0.233563 0.4599 0.25 0.437364 0.234364 0.46 0.25 0.437686 0.235171 0.4601 0.25 0.438009 0.235984 0.4602 0.25 0.438331 0.236802 0.4603 0.25 0.438653 0.237627 0.4604 0.25 0.438976 0.238457 0.4605 0.25 0.439298 0.239293 0.4606 0.25 0.439621 0.240134 0.4607 0.25 0.439944 0.240982 0.4608 0.25 0.440266 0.241835 0.4609 0.25 0.440589 0.242694 0.461 0.25 0.440912 0.243558 0.4611 0.25 0.441235 0.244429 0.4612 0.25 0.441558 0.245305 0.4613 0.25 0.441881 0.246186 0.4614 0.25 0.442204 0.247074 0.4615 0.25 0.442527 0.247967 0.4616 0.25 0.44285 0.248865 0.4617 0.25 0.443174 0.24977 0.4618 0.25 0.443497 0.25068 0.4619 0.25 0.44382 0.251595 0.462 0.25 0.444144 0.252516 0.4621 0.25 0.444467 0.253443 0.4622 0.25 0.444791 0.254375 0.4623 0.25 0.445114 0.255313 0.4624 0.25 0.445438 0.256256 0.4625 0.25 0.445762 0.257205 0.4626 0.25 0.446086 0.25816 0.4627 0.25 0.446409 0.25912 0.4628 0.25 0.446733 0.260085 0.4629 0.25 0.447057 0.261056 0.463 0.25 0.447381 0.262032 0.4631 0.25 0.447705 0.263014 0.4632 0.25 0.448029 0.264001 0.4633 0.25 0.448353 0.264994 0.4634 0.25 0.448678 0.265992 0.4635 0.25 0.449002 0.266995 0.4636 0.25 0.449326 0.268004 0.4637 0.25 0.44965 0.269018 0.4638 0.25 0.449975 0.270037 0.4639 0.25 0.450299 0.271062 0.464 0.25 0.450624 0.272091 0.4641 0.25 0.450948 0.273127 0.4642 0.25 0.451273 0.274167 0.4643 0.25 0.451597 0.275213 0.4644 0.25 0.451922 0.276263 0.4645 0.25 0.452247 0.277319 0.4646 0.25 0.452571 0.278381 0.4647 0.25 0.452896 0.279447 0.4648 0.25 0.453221 0.280518 0.4649 0.25 0.453546 0.281595 0.465 0.25 0.453871 0.282677 0.4651 0.25 0.454196 0.283763 0.4652 0.25 0.454521 0.284855 0.4653 0.25 0.454846 0.285952 0.4654 0.25 0.455171 0.287054 0.4655 0.25 0.455496 0.288161 0.4656 0.25 0.455821 0.289272 0.4657 0.25 0.456146 0.290389 0.4658 0.25 0.456472 0.291511 0.4659 0.25 0.456797 0.292637 0.466 0.25 0.457122 0.293769 0.4661 0.25 0.457448 0.294905 0.4662 0.25 0.457773 0.296046 0.4663 0.25 0.458099 0.297192 0.4664 0.25 0.458424 0.298343 0.4665 0.25 0.45875 0.299498 0.4666 0.25 0.459075 0.300658 0.4667 0.25 0.459401 0.301823 0.4668 0.25 0.459726 0.302993 0.4669 0.25 0.460052 0.304167 0.467 0.25 0.460378 0.305346 0.4671 0.25 0.460703 0.30653 0.4672 0.25 0.461029 0.307718 0.4673 0.25 0.461355 0.308911 0.4674 0.25 0.461681 0.310108 0.4675 0.25 0.462007 0.31131 0.4676 0.25 0.462332 0.312516 0.4677 0.25 0.462658 0.313727 0.4678 0.25 0.462984 0.314942 0.4679 0.25 0.46331 0.316162 0.468 0.25 0.463636 0.317386 0.4681 0.25 0.463962 0.318614 0.4682 0.25 0.464288 0.319847 0.4683 0.25 0.464615 0.321084 0.4684 0.25 0.464941 0.322326 0.4685 0.25 0.465267 0.323572 0.4686 0.25 0.465593 0.324821 0.4687 0.25 0.465919 0.326076 0.4688 0.25 0.466245 0.327334 0.4689 0.25 0.466572 0.328596 0.469 0.25 0.466898 0.329863 0.4691 0.25 0.467224 0.331134 0.4692 0.25 0.467551 0.332408 0.4693 0.25 0.467877 0.333687 0.4694 0.25 0.468203 0.33497 0.4695 0.25 0.46853 0.336257 0.4696 0.25 0.468856 0.337548 0.4697 0.25 0.469183 0.338842 0.4698 0.25 0.469509 0.340141 0.4699 0.25 0.469836 0.341444 0.47 0.25 0.470162 0.34275 0.4701 0.25 0.470489 0.34406 0.4702 0.25 0.470815 0.345374 0.4703 0.25 0.471142 0.346692 0.4704 0.25 0.471468 0.348013 0.4705 0.25 0.471795 0.349338 0.4706 0.25 0.472122 0.350667 0.4707 0.25 0.472448 0.352 0.4708 0.25 0.472775 0.353336 0.4709 0.25 0.473102 0.354675 0.471 0.25 0.473428 0.356018 0.4711 0.25 0.473755 0.357365 0.4712 0.25 0.474082 0.358715 0.4713 0.25 0.474408 0.360069 0.4714 0.25 0.474735 0.361426 0.4715 0.25 0.475062 0.362786 0.4716 0.25 0.475389 0.36415 0.4717 0.25 0.475716 0.365517 0.4718 0.25 0.476042 0.366888 0.4719 0.25 0.476369 0.368261 0.472 0.25 0.476696 0.369638 0.4721 0.25 0.477023 0.371018 0.4722 0.25 0.47735 0.372402 0.4723 0.25 0.477677 0.373788 0.4724 0.25 0.478003 0.375177 0.4725 0.25 0.47833 0.37657 0.4726 0.25 0.478657 0.377966 0.4727 0.25 0.478984 0.379364 0.4728 0.25 0.479311 0.380766 0.4729 0.25 0.479638 0.38217 0.473 0.25 0.479965 0.383577 0.4731 0.25 0.480292 0.384988 0.4732 0.25 0.480619 0.386401 0.4733 0.25 0.480946 0.387817 0.4734 0.25 0.481273 0.389235 0.4735 0.25 0.4816 0.390657 0.4736 0.25 0.481927 0.392081 0.4737 0.25 0.482254 0.393507 0.4738 0.25 0.482581 0.394937 0.4739 0.25 0.482908 0.396369 0.474 0.25 0.483235 0.397803 0.4741 0.25 0.483562 0.39924 0.4742 0.25 0.483889 0.40068 0.4743 0.25 0.484216 0.402122 0.4744 0.25 0.484543 0.403566 0.4745 0.25 0.48487 0.405013 0.4746 0.25 0.485197 0.406462 0.4747 0.25 0.485524 0.407914 0.4748 0.25 0.485851 0.409367 0.4749 0.25 0.486178 0.410823 0.475 0.25 0.486505 0.412281 0.4751 0.25 0.486832 0.413742 0.4752 0.25 0.487159 0.415204 0.4753 0.25 0.487486 0.416669 0.4754 0.25 0.487813 0.418135 0.4755 0.25 0.48814 0.419604 0.4756 0.25 0.488466 0.421075 0.4757 0.25 0.488793 0.422547 0.4758 0.25 0.48912 0.424022 0.4759 0.25 0.489447 0.425498 0.476 0.25 0.489774 0.426977 0.4761 0.25 0.490101 0.428457 0.4762 0.25 0.490428 0.429939 0.4763 0.25 0.490755 0.431422 0.4764 0.25 0.491082 0.432908 0.4765 0.25 0.491409 0.434394 0.4766 0.25 0.491736 0.435883 0.4767 0.25 0.492063 0.437373 0.4768 0.25 0.49239 0.438865 0.4769 0.25 0.492717 0.440358 0.477 0.25 0.493044 0.441853 0.4771 0.25 0.49337 0.443349 0.4772 0.25 0.493697 0.444847 0.4773 0.25 0.494024 0.446346 0.4774 0.25 0.494351 0.447846 0.4775 0.25 0.494678 0.449347 0.4776 0.25 0.495005 0.45085 0.4777 0.25 0.495331 0.452354 0.4778 0.25 0.495658 0.453859 0.4779 0.25 0.495985 0.455366 0.478 0.25 0.496312 0.456873 0.4781 0.25 0.496638 0.458382 0.4782 0.25 0.496965 0.459891 0.4783 0.25 0.497292 0.461402 0.4784 0.25 0.497619 0.462913 0.4785 0.25 0.497945 0.464426 0.4786 0.25 0.498272 0.465939 0.4787 0.25 0.498599 0.467453 0.4788 0.25 0.498925 0.468968 0.4789 0.25 0.499252 0.470484 0.479 0.25 0.499578 0.472 0.4791 0.25 0.499905 0.473517 0.4792 0.25 0.500231 0.475035 0.4793 0.25 0.500558 0.476553 0.4794 0.25 0.500885 0.478072 0.4795 0.25 0.501211 0.479592 0.4796 0.25 0.501537 0.481112 0.4797 0.25 0.501864 0.482632 0.4798 0.25 0.50219 0.484153 0.4799 0.25 0.502517 0.485674 0.48 0.25 0.502843 0.487196 0.4801 0.25 0.503169 0.488718 0.4802 0.25 0.503496 0.49024 0.4803 0.25 0.503822 0.491762 0.4804 0.25 0.504148 0.493285 0.4805 0.25 0.504475 0.494807 0.4806 0.25 0.504801 0.49633 0.4807 0.25 0.505127 0.497853 0.4808 0.25 0.505453 0.499376 0.4809 0.25 0.505779 0.500899 0.481 0.25 0.506105 0.502422 0.4811 0.25 0.506432 0.503945 0.4812 0.25 0.506758 0.505468 0.4813 0.25 0.507084 0.50699 0.4814 0.25 0.50741 0.508512 0.4815 0.25 0.507736 0.510035 0.4816 0.25 0.508062 0.511556 0.4817 0.25 0.508388 0.513078 0.4818 0.25 0.508713 0.514599 0.4819 0.25 0.509039 0.51612 0.482 0.25 0.509365 0.51764 0.4821 0.25 0.509691 0.51916 0.4822 0.25 0.510017 0.52068 0.4823 0.25 0.510342 0.522199 0.4824 0.25 0.510668 0.523717 0.4825 0.25 0.510994 0.525235 0.4826 0.25 0.511319 0.526752 0.4827 0.25 0.511645 0.528268 0.4828 0.25 0.51197 0.529784 0.4829 0.25 0.512296 0.531299 0.483 0.25 0.512621 0.532813 0.4831 0.25 0.512947 0.534326 0.4832 0.25 0.513272 0.535839 0.4833 0.25 0.513598 0.53735 0.4834 0.25 0.513923 0.53886 0.4835 0.25 0.514248 0.54037 0.4836 0.25 0.514574 0.541878 0.4837 0.25 0.514899 0.543386 0.4838 0.25 0.515224 0.544892 0.4839 0.25 0.515549 0.546397 0.484 0.25 0.515874 0.547901 0.4841 0.25 0.516199 0.549404 0.4842 0.25 0.516524 0.550906 0.4843 0.25 0.516849 0.552406 0.4844 0.25 0.517174 0.553905 0.4845 0.25 0.517499 0.555402 0.4846 0.25 0.517824 0.556898 0.4847 0.25 0.518149 0.558393 0.4848 0.25 0.518473 0.559886 0.4849 0.25 0.518798 0.561378 0.485 0.25 0.519123 0.562868 0.4851 0.25 0.519447 0.564357 0.4852 0.25 0.519772 0.565844 0.4853 0.25 0.520097 0.567329 0.4854 0.25 0.520421 0.568812 0.4855 0.25 0.520745 0.570294 0.4856 0.25 0.52107 0.571774 0.4857 0.25 0.521394 0.573252 0.4858 0.25 0.521718 0.574729 0.4859 0.25 0.522043 0.576203 0.486 0.25 0.522367 0.577676 0.4861 0.25 0.522691 0.579147 0.4862 0.25 0.523015 0.580615 0.4863 0.25 0.523339 0.582082 0.4864 0.25 0.523663 0.583546 0.4865 0.25 0.523987 0.585009 0.4866 0.25 0.524311 0.586469 0.4867 0.25 0.524635 0.587927 0.4868 0.25 0.524959 0.589383 0.4869 0.25 0.525282 0.590837 0.487 0.25 0.525606 0.592289 0.4871 0.25 0.52593 0.593738 0.4872 0.25 0.526253 0.595184 0.4873 0.25 0.526577 0.596629 0.4874 0.25 0.5269 0.598071 0.4875 0.25 0.527224 0.59951 0.4876 0.25 0.527547 0.600947 0.4877 0.25 0.52787 0.602382 0.4878 0.25 0.528194 0.603814 0.4879 0.25 0.528517 0.605243 0.488 0.25 0.52884 0.60667 0.4881 0.25 0.529163 0.608094 0.4882 0.25 0.529486 0.609516 0.4883 0.25 0.529809 0.610934 0.4884 0.25 0.530132 0.61235 0.4885 0.25 0.530455 0.613763 0.4886 0.25 0.530777 0.615174 0.4887 0.25 0.5311 0.616581 0.4888 0.25 0.531423 0.617986 0.4889 0.25 0.531745 0.619387 0.489 0.25 0.532068 0.620786 0.4891 0.25 0.53239 0.622182 0.4892 0.25 0.532713 0.623575 0.4893 0.25 0.533035 0.624964 0.4894 0.25 0.533357 0.626351 0.4895 0.25 0.533679 0.627734 0.4896 0.25 0.534002 0.629114 0.4897 0.25 0.534324 0.630491 0.4898 0.25 0.534646 0.631865 0.4899 0.25 0.534968 0.633236 0.49 0.25 0.53529 0.634603 0.4901 0.25 0.535611 0.635967 0.4902 0.25 0.535933 0.637328 0.4903 0.25 0.536255 0.638685 0.4904 0.25 0.536576 0.640039 0.4905 0.25 0.536898 0.641389 0.4906 0.25 0.537219 0.642736 0.4907 0.25 0.537541 0.64408 0.4908 0.25 0.537862 0.64542 0.4909 0.25 0.538183 0.646756 0.491 0.25 0.538505 0.648089 0.4911 0.25 0.538826 0.649418 0.4912 0.25 0.539147 0.650743 0.4913 0.25 0.539468 0.652065 0.4914 0.25 0.539789 0.653383 0.4915 0.25 0.54011 0.654697 0.4916 0.25 0.54043 0.656008 0.4917 0.25 0.540751 0.657315 0.4918 0.25 0.541072 0.658618 0.4919 0.25 0.541392 0.659917 0.492 0.25 0.541713 0.661212 0.4921 0.25 0.542033 0.662503 0.4922 0.25 0.542353 0.66379 0.4923 0.25 0.542674 0.665074 0.4924 0.25 0.542994 0.666353 0.4925 0.25 0.543314 0.667628 0.4926 0.25 0.543634 0.6689 0.4927 0.25 0.543954 0.670167 0.4928 0.25 0.544274 0.67143 0.4929 0.25 0.544594 0.672689 0.493 0.25 0.544913 0.673943 0.4931 0.25 0.545233 0.675194 0.4932 0.25 0.545552 0.67644 0.4933 0.25 0.545872 0.677682 0.4934 0.25 0.546191 0.67892 0.4935 0.25 0.546511 0.680154 0.4936 0.25 0.54683 0.681383 0.4937 0.25 0.547149 0.682608 0.4938 0.25 0.547468 0.683828 0.4939 0.25 0.547787 0.685044 0.494 0.25 0.548106 0.686256 0.4941 0.25 0.548425 0.687463 0.4942 0.25 0.548743 0.688665 0.4943 0.25 0.549062 0.689864 0.4944 0.25 0.549381 0.691057 0.4945 0.25 0.549699 0.692246 0.4946 0.25 0.550018 0.693431 0.4947 0.25 0.550336 0.694611 0.4948 0.25 0.550654 0.695786 0.4949 0.25 0.550972 0.696957 0.495 0.25 0.55129 0.698123 0.4951 0.25 0.551608 0.699284 0.4952 0.25 0.551926 0.70044 0.4953 0.25 0.552244 0.701592 0.4954 0.25 0.552562 0.702739 0.4955 0.25 0.552879 0.703881 0.4956 0.25 0.553197 0.705019 0.4957 0.25 0.553514 0.706151 0.4958 0.25 0.553832 0.707279 0.4959 0.25 0.554149 0.708402 0.496 0.25 0.554466 0.70952 0.4961 0.25 0.554783 0.710633 0.4962 0.25 0.5551 0.711741 0.4963 0.25 0.555417 0.712844 0.4964 0.25 0.555734 0.713942 0.4965 0.25 0.55605 0.715035 0.4966 0.25 0.556367 0.716124 0.4967 0.25 0.556683 0.717207 0.4968 0.25 0.557 0.718285 0.4969 0.25 0.557316 0.719358 0.497 0.25 0.557632 0.720425 0.4971 0.25 0.557949 0.721488 0.4972 0.25 0.558265 0.722546 0.4973 0.25 0.558581 0.723598 0.4974 0.25 0.558896 0.724645 0.4975 0.25 0.559212 0.725687 0.4976 0.25 0.559528 0.726724 0.4977 0.25 0.559843 0.727756 0.4978 0.25 0.560159 0.728782 0.4979 0.25 0.560474 0.729803 0.498 0.25 0.560789 0.730819 0.4981 0.25 0.561105 0.731829 0.4982 0.25 0.56142 0.732835 0.4983 0.25 0.561735 0.733834 0.4984 0.25 0.562049 0.734829 0.4985 0.25 0.562364 0.735818 0.4986 0.25 0.562679 0.736802 0.4987 0.25 0.562993 0.73778 0.4988 0.25 0.563308 0.738753 0.4989 0.25 0.563622 0.739721 0.499 0.25 0.563936 0.740683 0.4991 0.25 0.564251 0.741639 0.4992 0.25 0.564565 0.74259 0.4993 0.25 0.564879 0.743536 0.4994 0.25 0.565192 0.744476 0.4995 0.25 0.565506 0.74541 0.4996 0.25 0.56582 0.746339 0.4997 0.25 0.566133 0.747263 0.4998 0.25 0.566447 0.748181 0.4999 0.25 0.56676 0.749093 0.5 0.75 0.567073 0.75 0.5001 0.75 0.567386 0.750901 0.5002 0.75 0.567699 0.751797 0.5003 0.75 0.568012 0.752687 0.5004 0.75 0.568325 0.753571 0.5005 0.75 0.568638 0.75445 0.5006 0.75 0.56895 0.755323 0.5007 0.75 0.569263 0.75619 0.5008 0.75 0.569575 0.757051 0.5009 0.75 0.569887 0.757907 0.501 0.75 0.570199 0.758758 0.5011 0.75 0.570511 0.759602 0.5012 0.75 0.570823 0.760441 0.5013 0.75 0.571135 0.761274 0.5014 0.75 0.571446 0.762101 0.5015 0.75 0.571758 0.762923 0.5016 0.75 0.572069 0.763739 0.5017 0.75 0.572381 0.764549 0.5018 0.75 0.572692 0.765353 0.5019 0.75 0.573003 0.766151 0.502 0.75 0.573314 0.766944 0.5021 0.75 0.573625 0.767731 0.5022 0.75 0.573936 0.768512 0.5023 0.75 0.574246 0.769287 0.5024 0.75 0.574557 0.770056 0.5025 0.75 0.574867 0.77082 0.5026 0.75 0.575177 0.771578 0.5027 0.75 0.575488 0.772329 0.5028 0.75 0.575798 0.773075 0.5029 0.75 0.576108 0.773816 0.503 0.75 0.576417 0.77455 0.5031 0.75 0.576727 0.775278 0.5032 0.75 0.577037 0.776001 0.5033 0.75 0.577346 0.776717 0.5034 0.75 0.577655 0.777428 0.5035 0.75 0.577965 0.778133 0.5036 0.75 0.578274 0.778832 0.5037 0.75 0.578583 0.779525 0.5038 0.75 0.578891 0.780212 0.5039 0.75 0.5792 0.780893 0.504 0.75 0.579509 0.781568 0.5041 0.75 0.579817 0.782237 0.5042 0.75 0.580126 0.782901 0.5043 0.75 0.580434 0.783558 0.5044 0.75 0.580742 0.78421 0.5045 0.75 0.58105 0.784855 0.5046 0.75 0.581358 0.785495 0.5047 0.75 0.581665 0.786129 0.5048 0.75 0.581973 0.786756 0.5049 0.75 0.582281 0.787378 0.505 0.75 0.582588 0.787994 0.5051 0.75 0.582895 0.788604 0.5052 0.75 0.583202 0.789208 0.5053 0.75 0.583509 0.789806 0.5054 0.75 0.583816 0.790398 0.5055 0.75 0.584123 0.790984 0.5056 0.75 0.584429 0.791564 0.5057 0.75 0.584736 0.792139 0.5058 0.75 0.585042 0.792707 0.5059 0.75 0.585348 0.793269 0.506 0.75 0.585654 0.793826 0.5061 0.75 0.58596 0.794376 0.5062 0.75 0.586266 0.794921 0.5063 0.75 0.586572 0.795459 0.5064 0.75 0.586877 0.795992 0.5065 0.75 0.587183 0.796518 0.5066 0.75 0.587488 0.797039 0.5067 0.75 0.587793 0.797554 0.5068 0.75 0.588098 0.798063 0.5069 0.75 0.588403 0.798566 0.507 0.75 0.588708 0.799063 0.5071 0.75 0.589012 0.799554 0.5072 0.75 0.589317 0.800039 0.5073 0.75 0.589621 0.800518 0.5074 0.75 0.589925 0.800991 0.5075 0.75 0.590229 0.801459 0.5076 0.75 0.590533 0.80192 0.5077 0.75 0.590837 0.802376 0.5078 0.75 0.591141 0.802826 0.5079 0.75 0.591444 0.80327 0.508 0.75 0.591748 0.803707 0.5081 0.75 0.592051 0.80414 0.5082 0.75 0.592354 0.804566 0.5083 0.75 0.592657 0.804986 0.5084 0.75 0.59296 0.8054 0.5085 0.75 0.593263 0.805809 0.5086 0.75 0.593565 0.806212 0.5087 0.75 0.593868 0.806609 0.5088 0.75 0.59417 0.807 0.5089 0.75 0.594472 0.807385 0.509 0.75 0.594774 0.807764 0.5091 0.75 0.595076 0.808138 0.5092 0.75 0.595378 0.808506 0.5093 0.75 0.595679 0.808868 0.5094 0.75 0.595981 0.809224 0.5095 0.75 0.596282 0.809574 0.5096 0.75 0.596583 0.809919 0.5097 0.75 0.596884 0.810258 0.5098 0.75 0.597185 0.810591 0.5099 0.75 0.597485 0.810919 0.51 0.75 0.597786 0.81124 0.5101 0.75 0.598086 0.811556 0.5102 0.75 0.598387 0.811866 0.5103 0.75 0.598687 0.812171 0.5104 0.75 0.598987 0.81247 0.5105 0.75 0.599287 0.812763 0.5106 0.75 0.599586 0.81305 0.5107 0.75 0.599886 0.813332 0.5108 0.75 0.600185 0.813608 0.5109 0.75 0.600484 0.813879 0.511 0.75 0.600784 0.814144 0.5111 0.75 0.601082 0.814403 0.5112 0.75 0.601381 0.814657 0.5113 0.75 0.60168 0.814905 0.5114 0.75 0.601978 0.815147 0.5115 0.75 0.602277 0.815384 0.5116 0.75 0.602575 0.815616 0.5117 0.75 0.602873 0.815841 0.5118 0.75 0.603171 0.816062 0.5119 0.75 0.603469 0.816277 0.512 0.75 0.603766 0.816486 0.5121 0.75 0.604064 0.81669 0.5122 0.75 0.604361 0.816888 0.5123 0.75 0.604658 0.817081 0.5124 0.75 0.604955 0.817268 0.5125 0.75 0.605252 0.81745 0.5126 0.75 0.605548 0.817627 0.5127 0.75 0.605845 0.817798 0.5128 0.75 0.606141 0.817964 0.5129 0.75 0.606437 0.818124 0.513 0.75 0.606733 0.81828 0.5131 0.75 0.607029 0.818429 0.5132 0.75 0.607325 0.818574 0.5133 0.75 0.607621 0.818713 0.5134 0.75 0.607916 0.818847 0.5135 0.75 0.608211 0.818975 0.5136 0.75 0.608506 0.819099 0.5137 0.75 0.608801 0.819217 0.5138 0.75 0.609096 0.819329 0.5139 0.75 0.609391 0.819437 0.514 0.75 0.609685 0.81954 0.5141 0.75 0.60998 0.819637 0.5142 0.75 0.610274 0.819729 0.5143 0.75 0.610568 0.819816 0.5144 0.75 0.610862 0.819898 0.5145 0.75 0.611155 0.819975 0.5146 0.75 0.611449 0.820046 0.5147 0.75 0.611742 0.820113 0.5148 0.75 0.612035 0.820174 0.5149 0.75 0.612328 0.820231 0.515 0.75 0.612621 0.820283 0.5151 0.75 0.612914 0.820329 0.5152 0.75 0.613206 0.820371 0.5153 0.75 0.613499 0.820407 0.5154 0.75 0.613791 0.820439 0.5155 0.75 0.614083 0.820466 0.5156 0.75 0.614375 0.820488 0.5157 0.75 0.614666 0.820505 0.5158 0.75 0.614958 0.820517 0.5159 0.75 0.615249 0.820524 0.516 0.75 0.615541 0.820527 0.5161 0.75 0.615832 0.820525 0.5162 0.75 0.616122 0.820518 0.5163 0.75 0.616413 0.820506 0.5164 0.75 0.616704 0.82049 0.5165 0.75 0.616994 0.820469 0.5166 0.75 0.617284 0.820443 0.5167 0.75 0.617574 0.820412 0.5168 0.75 0.617864 0.820377 0.5169 0.75 0.618154 0.820337 0.517 0.75 0.618443 0.820293 0.5171 0.75 0.618733 0.820244 0.5172 0.75 0.619022 0.820191 0.5173 0.75 0.619311 0.820133 0.5174 0.75 0.6196 0.82007 0.5175 0.75 0.619889 0.820003 0.5176 0.75 0.620177 0.819932 0.5177 0.75 0.620465 0.819856 0.5178 0.75 0.620754 0.819776 0.5179 0.75 0.621042 0.819691 0.518 0.75 0.621329 0.819602 0.5181 0.75 0.621617 0.819509 0.5182 0.75 0.621904 0.819411 0.5183 0.75 0.622192 0.819309 0.5184 0.75 0.622479 0.819203 0.5185 0.75 0.622766 0.819093 0.5186 0.75 0.623053 0.818978 0.5187 0.75 0.623339 0.818859 0.5188 0.75 0.623626 0.818736 0.5189 0.75 0.623912 0.818609 0.519 0.75 0.624198 0.818477 0.5191 0.75 0.624484 0.818342 0.5192 0.75 0.62477 0.818203 0.5193 0.75 0.625055 0.818059 0.5194 0.75 0.62534 0.817912 0.5195 0.75 0.625626 0.81776 0.5196 0.75 0.625911 0.817604 0.5197 0.75 0.626195 0.817445 0.5198 0.75 0.62648 0.817282 0.5199 0.75 0.626765 0.817114 0.52 0.75 0.627049 0.816943 0.5201 0.75 0.627333 0.816768 0.5202 0.75 0.627617 0.816589 0.5203 0.75 0.627901 0.816407 0.5204 0.75 0.628184 0.81622 0.5205 0.75 0.628468 0.81603 0.5206 0.75 0.628751 0.815837 0.5207 0.75 0.629034 0.815639 0.5208 0.75 0.629317 0.815438 0.5209 0.75 0.629599 0.815233 0.521 0.75 0.629882 0.815025 0.5211 0.75 0.630164 0.814813 0.5212 0.75 0.630446 0.814597 0.5213 0.75 0.630728 0.814378 0.5214 0.75 0.63101 0.814156 0.5215 0.75 0.631292 0.81393 0.5216 0.75 0.631573 0.8137 0.5217 0.75 0.631854 0.813468 0.5218 0.75 0.632135 0.813231 0.5219 0.75 0.632416 0.812992 0.522 0.75 0.632697 0.812749 0.5221 0.75 0.632977 0.812503 0.5222 0.75 0.633257 0.812253 0.5223 0.75 0.633537 0.812 0.5224 0.75 0.633817 0.811744 0.5225 0.75 0.634097 0.811485 0.5226 0.75 0.634376 0.811223 0.5227 0.75 0.634656 0.810957 0.5228 0.75 0.634935 0.810689 0.5229 0.75 0.635214 0.810417 0.523 0.75 0.635493 0.810143 0.5231 0.75 0.635771 0.809865 0.5232 0.75 0.63605 0.809584 0.5233 0.75 0.636328 0.8093 0.5234 0.75 0.636606 0.809014 0.5235 0.75 0.636884 0.808724 0.5236 0.75 0.637161 0.808432 0.5237 0.75 0.637439 0.808137 0.5238 0.75 0.637716 0.807839 0.5239 0.75 0.637993 0.807538 0.524 0.75 0.63827 0.807234 0.5241 0.75 0.638547 0.806928 0.5242 0.75 0.638823 0.806619 0.5243 0.75 0.639099 0.806307 0.5244 0.75 0.639375 0.805992 0.5245 0.75 0.639651 0.805675 0.5246 0.75 0.639927 0.805356 0.5247 0.75 0.640202 0.805034 0.5248 0.75 0.640478 0.804709 0.5249 0.75 0.640753 0.804382 0.525 0.75 0.641028 0.804052 0.5251 0.75 0.641303 0.80372 0.5252 0.75 0.641577 0.803386 0.5253 0.75 0.641851 0.803049 0.5254 0.75 0.642126 0.802709 0.5255 0.75 0.642399 0.802368 0.5256 0.75 0.642673 0.802024 0.5257 0.75 0.642947 0.801678 0.5258 0.75 0.64322 0.801329 0.5259 0.75 0.643493 0.800979 0.526 0.75 0.643766 0.800626 0.5261 0.75 0.644039 0.800271 0.5262 0.75 0.644312 0.799914 0.5263 0.75 0.644584 0.799555 0.5264 0.75 0.644856 0.799194 0.5265 0.75 0.645128 0.798831 0.5266 0.75 0.6454 0.798465 0.5267 0.75 0.645671 0.798098 0.5268 0.75 0.645943 0.797729 0.5269 0.75 0.646214 0.797358 0.527 0.75 0.646485 0.796985 0.5271 0.75 0.646756 0.79661 0.5272 0.75 0.647026 0.796234 0.5273 0.75 0.647297 0.795856 0.5274 0.75 0.647567 0.795475 0.5275 0.75 0.647837 0.795094 0.5276 0.75 0.648106 0.79471 0.5277 0.75 0.648376 0.794325 0.5278 0.75 0.648645 0.793938 0.5279 0.75 0.648914 0.793549 0.528 0.75 0.649183 0.793159 0.5281 0.75 0.649452 0.792768 0.5282 0.75 0.649721 0.792375 0.5283 0.75 0.649989 0.79198 0.5284 0.75 0.650257 0.791584 0.5285 0.75 0.650525 0.791186 0.5286 0.75 0.650793 0.790787 0.5287 0.75 0.65106 0.790387 0.5288 0.75 0.651327 0.789986 0.5289 0.75 0.651595 0.789583 0.529 0.75 0.651861 0.789178 0.5291 0.75 0.652128 0.788773 0.5292 0.75 0.652395 0.788366 0.5293 0.75 0.652661 0.787958 0.5294 0.75 0.652927 0.787549 0.5295 0.75 0.653193 0.787139 0.5296 0.75 0.653458 0.786727 0.5297 0.75 0.653724 0.786315 0.5298 0.75 0.653989 0.785902 0.5299 0.75 0.654254 0.785487 0.53 0.75 0.654519 0.785072 0.5301 0.75 0.654783 0.784655 0.5302 0.75 0.655048 0.784238 0.5303 0.75 0.655312 0.783819 0.5304 0.75 0.655576 0.7834 0.5305 0.75 0.65584 0.78298 0.5306 0.75 0.656103 0.782559 0.5307 0.75 0.656367 0.782138 0.5308 0.75 0.65663 0.781715 0.5309 0.75 0.656893 0.781292 0.531 0.75 0.657155 0.780868 0.5311 0.75 0.657418 0.780444 0.5312 0.75 0.65768 0.780019 0.5313 0.75 0.657942 0.779593 0.5314 0.75 0.658204 0.779167 0.5315 0.75 0.658466 0.77874 0.5316 0.75 0.658727 0.778313 0.5317 0.75 0.658988 0.777885 0.5318 0.75 0.659249 0.777456 0.5319 0.75 0.65951 0.777027 0.532 0.75 0.65977 0.776598 0.5321 0.75 0.660031 0.776169 0.5322 0.75 0.660291 0.775739 0.5323 0.75 0.660551 0.775308 0.5324 0.75 0.660811 0.774878 0.5325 0.75 0.66107 0.774447 0.5326 0.75 0.661329 0.774016 0.5327 0.75 0.661588 0.773584 0.5328 0.75 0.661847 0.773153 0.5329 0.75 0.662106 0.772721 0.533 0.75 0.662364 0.772289 0.5331 0.75 0.662622 0.771857 0.5332 0.75 0.66288 0.771425 0.5333 0.75 0.663138 0.770993 0.5334 0.75 0.663395 0.770561 0.5335 0.75 0.663653 0.770129 0.5336 0.75 0.66391 0.769697 0.5337 0.75 0.664167 0.769265 0.5338 0.75 0.664423 0.768833 0.5339 0.75 0.66468 0.768401 0.534 0.75 0.664936 0.767969 0.5341 0.75 0.665192 0.767538 0.5342 0.75 0.665448 0.767106 0.5343 0.75 0.665703 0.766675 0.5344 0.75 0.665959 0.766244 0.5345 0.75 0.666214 0.765813 0.5346 0.75 0.666469 0.765383 0.5347 0.75 0.666723 0.764953 0.5348 0.75 0.666978 0.764523 0.5349 0.75 0.667232 0.764094 0.535 0.75 0.667486 0.763665 0.5351 0.75 0.66774 0.763237 0.5352 0.75 0.667993 0.762809 0.5353 0.75 0.668246 0.762381 0.5354 0.75 0.6685 0.761954 0.5355 0.75 0.668752 0.761528 0.5356 0.75 0.669005 0.761102 0.5357 0.75 0.669257 0.760676 0.5358 0.75 0.66951 0.760251 0.5359 0.75 0.669762 0.759827 0.536 0.75 0.670013 0.759404 0.5361 0.75 0.670265 0.758981 0.5362 0.75 0.670516 0.758559 0.5363 0.75 0.670767 0.758137 0.5364 0.75 0.671018 0.757717 0.5365 0.75 0.671269 0.757297 0.5366 0.75 0.671519 0.756878 0.5367 0.75 0.671769 0.756459 0.5368 0.75 0.672019 0.756042 0.5369 0.75 0.672269 0.755625 0.537 0.75 0.672518 0.75521 0.5371 0.75 0.672768 0.754795 0.5372 0.75 0.673017 0.754381 0.5373 0.75 0.673265 0.753968 0.5374 0.75 0.673514 0.753557 0.5375 0.75 0.673762 0.753146 0.5376 0.75 0.67401 0.752736 0.5377 0.75 0.674258 0.752327 0.5378 0.75 0.674506 0.75192 0.5379 0.75 0.674753 0.751513 0.538 0.75 0.675001 0.751107 0.5381 0.75 0.675248 0.750703 0.5382 0.75 0.675494 0.7503 0.5383 0.75 0.675741 0.749898 0.5384 0.75 0.675987 0.749497 0.5385 0.75 0.676233 0.749098 0.5386 0.75 0.676479 0.7487 0.5387 0.75 0.676724 0.748303 0.5388 0.75 0.67697 0.747907 0.5389 0.75 0.677215 0.747513 0.539 0.75 0.67746 0.74712 0.5391 0.75 0.677704 0.746728 0.5392 0.75 0.677949 0.746338 0.5393 0.75 0.678193 0.745949 0.5394 0.75 0.678437 0.745562 0.5395 0.75 0.678681 0.745176 0.5396 0.75 0.678924 0.744791 0.5397 0.75 0.679167 0.744408 0.5398 0.75 0.67941 0.744027 0.5399 0.75 0.679653 0.743647 0.54 0.75 0.679896 0.743268 0.5401 0.75 0.680138 0.742891 0.5402 0.75 0.68038 0.742516 0.5403 0.75 0.680622 0.742142 0.5404 0.75 0.680863 0.74177 0.5405 0.75 0.681105 0.7414 0.5406 0.75 0.681346 0.741031 0.5407 0.75 0.681587 0.740664 0.5408 0.75 0.681827 0.740298 0.5409 0.75 0.682068 0.739935 0.541 0.75 0.682308 0.739573 0.5411 0.75 0.682548 0.739213 0.5412 0.75 0.682788 0.738854 0.5413 0.75 0.683027 0.738498 0.5414 0.75 0.683266 0.738143 0.5415 0.75 0.683505 0.73779 0.5416 0.75 0.683744 0.737439 0.5417 0.75 0.683983 0.737089 0.5418 0.75 0.684221 0.736742 0.5419 0.75 0.684459 0.736396 0.542 0.75 0.684697 0.736053 0.5421 0.75 0.684934 0.735711 0.5422 0.75 0.685172 0.735371 0.5423 0.75 0.685409 0.735033 0.5424 0.75 0.685646 0.734697 0.5425 0.75 0.685882 0.734364 0.5426 0.75 0.686119 0.734032 0.5427 0.75 0.686355 0.733702 0.5428 0.75 0.686591 0.733374 0.5429 0.75 0.686826 0.733048 0.543 0.75 0.687062 0.732725 0.5431 0.75 0.687297 0.732403 0.5432 0.75 0.687532 0.732084 0.5433 0.75 0.687766 0.731766 0.5434 0.75 0.688001 0.731451 0.5435 0.75 0.688235 0.731138 0.5436 0.75 0.688469 0.730827 0.5437 0.75 0.688703 0.730518 0.5438 0.75 0.688936 0.730212 0.5439 0.75 0.689169 0.729907 0.544 0.75 0.689402 0.729605 0.5441 0.75 0.689635 0.729305 0.5442 0.75 0.689867 0.729007 0.5443 0.75 0.6901 0.728712 0.5444 0.75 0.690332 0.728418 0.5445 0.75 0.690563 0.728127 0.5446 0.75 0.690795 0.727839 0.5447 0.75 0.691026 0.727552 0.5448 0.75 0.691257 0.727268 0.5449 0.75 0.691488 0.726987 0.545 0.75 0.691718 0.726707 0.5451 0.75 0.691949 0.72643 0.5452 0.75 0.692179 0.726155 0.5453 0.75 0.692409 0.725883 0.5454 0.75 0.692638 0.725613 0.5455 0.75 0.692867 0.725345 0.5456 0.75 0.693096 0.72508 0.5457 0.75 0.693325 0.724817 0.5458 0.75 0.693554 0.724557 0.5459 0.75 0.693782 0.724299 0.546 0.75 0.69401 0.724044 0.5461 0.75 0.694238 0.723791 0.5462 0.75 0.694465 0.72354 0.5463 0.75 0.694693 0.723292 0.5464 0.75 0.69492 0.723046 0.5465 0.75 0.695147 0.722803 0.5466 0.75 0.695373 0.722563 0.5467 0.75 0.6956 0.722325 0.5468 0.75 0.695826 0.722089 0.5469 0.75 0.696051 0.721856 0.547 0.75 0.696277 0.721625 0.5471 0.75 0.696502 0.721397 0.5472 0.75 0.696727 0.721172 0.5473 0.75 0.696952 0.720949 0.5474 0.75 0.697177 0.720729 0.5475 0.75 0.697401 0.720511 0.5476 0.75 0.697625 0.720296 0.5477 0.75 0.697849 0.720083 0.5478 0.75 0.698073 0.719873 0.5479 0.75 0.698296 0.719666 0.548 0.75 0.698519 0.719461 0.5481 0.75 0.698742 0.719259 0.5482 0.75 0.698964 0.719059 0.5483 0.75 0.699187 0.718862 0.5484 0.75 0.699409 0.718668 0.5485 0.75 0.699631 0.718476 0.5486 0.75 0.699852 0.718287 0.5487 0.75 0.700073 0.718101 0.5488 0.75 0.700295 0.717917 0.5489 0.75 0.700515 0.717736 0.549 0.75 0.700736 0.717558 0.5491 0.75 0.700956 0.717382 0.5492 0.75 0.701176 0.717209 0.5493 0.75 0.701396 0.717038 0.5494 0.75 0.701616 0.716871 0.5495 0.75 0.701835 0.716706 0.5496 0.75 0.702054 0.716543 0.5497 0.75 0.702273 0.716384 0.5498 0.75 0.702491 0.716227 0.5499 0.75 0.702709 0.716073 0.55 0.75 0.702927 0.715921 0.5501 0.75 0.703145 0.715772 0.5502 0.75 0.703363 0.715626 0.5503 0.75 0.70358 0.715483 0.5504 0.75 0.703797 0.715342 0.5505 0.75 0.704014 0.715204 0.5506 0.75 0.70423 0.715069 0.5507 0.75 0.704446 0.714936 0.5508 0.75 0.704662 0.714806 0.5509 0.75 0.704878 0.714679 0.551 0.75 0.705093 0.714555 0.5511 0.75 0.705309 0.714433 0.5512 0.75 0.705524 0.714314 0.5513 0.75 0.705738 0.714198 0.5514 0.75 0.705953 0.714084 0.5515 0.75 0.706167 0.713973 0.5516 0.75 0.706381 0.713865 0.5517 0.75 0.706594 0.71376 0.5518 0.75 0.706808 0.713658 0.5519 0.75 0.707021 0.713558 0.552 0.75 0.707234 0.713461 0.5521 0.75 0.707447 0.713366 0.5522 0.75 0.707659 0.713274 0.5523 0.75 0.707871 0.713186 0.5524 0.75 0.708083 0.713099 0.5525 0.75 0.708294 0.713016 0.5526 0.75 0.708506 0.712935 0.5527 0.75 0.708717 0.712857 0.5528 0.75 0.708928 0.712782 0.5529 0.75 0.709138 0.712709 0.553 0.75 0.709348 0.712639 0.5531 0.75 0.709558 0.712572 0.5532 0.75 0.709768 0.712507 0.5533 0.75 0.709978 0.712446 0.5534 0.75 0.710187 0.712387 0.5535 0.75 0.710396 0.71233 0.5536 0.75 0.710605 0.712277 0.5537 0.75 0.710813 0.712226 0.5538 0.75 0.711021 0.712177 0.5539 0.75 0.711229 0.712132 0.554 0.75 0.711437 0.712089 0.5541 0.75 0.711644 0.712049 0.5542 0.75 0.711852 0.712011 0.5543 0.75 0.712059 0.711976 0.5544 0.75 0.712265 0.711944 0.5545 0.75 0.712472 0.711915 0.5546 0.75 0.712678 0.711888 0.5547 0.75 0.712884 0.711864 0.5548 0.75 0.713089 0.711842 0.5549 0.75 0.713294 0.711823 0.555 0.75 0.7135 0.711807 0.5551 0.75 0.713704 0.711793 0.5552 0.75 0.713909 0.711782 0.5553 0.75 0.714113 0.711774 0.5554 0.75 0.714317 0.711768 0.5555 0.75 0.714521 0.711765 0.5556 0.75 0.714724 0.711765 0.5557 0.75 0.714928 0.711767 0.5558 0.75 0.715131 0.711772 0.5559 0.75 0.715333 0.711779 0.556 0.75 0.715536 0.711789 0.5561 0.75 0.715738 0.711801 0.5562 0.75 0.71594 0.711816 0.5563 0.75 0.716141 0.711834 0.5564 0.75 0.716343 0.711854 0.5565 0.75 0.716544 0.711877 0.5566 0.75 0.716745 0.711902 0.5567 0.75 0.716945 0.71193 0.5568 0.75 0.717146 0.71196 0.5569 0.75 0.717346 0.711993 0.557 0.75 0.717545 0.712028 0.5571 0.75 0.717745 0.712066 0.5572 0.75 0.717944 0.712106 0.5573 0.75 0.718143 0.712149 0.5574 0.75 0.718342 0.712194 0.5575 0.75 0.71854 0.712242 0.5576 0.75 0.718739 0.712292 0.5577 0.75 0.718936 0.712345 0.5578 0.75 0.719134 0.7124 0.5579 0.75 0.719332 0.712458 0.558 0.75 0.719529 0.712518 0.5581 0.75 0.719726 0.71258 0.5582 0.75 0.719922 0.712645 0.5583 0.75 0.720118 0.712712 0.5584 0.75 0.720314 0.712782 0.5585 0.75 0.72051 0.712853 0.5586 0.75 0.720706 0.712928 0.5587 0.75 0.720901 0.713004 0.5588 0.75 0.721096 0.713083 0.5589 0.75 0.721291 0.713165 0.559 0.75 0.721485 0.713248 0.5591 0.75 0.721679 0.713334 0.5592 0.75 0.721873 0.713423 0.5593 0.75 0.722067 0.713513 0.5594 0.75 0.72226 0.713606 0.5595 0.75 0.722453 0.713701 0.5596 0.75 0.722646 0.713799 0.5597 0.75 0.722839 0.713898 0.5598 0.75 0.723031 0.714 0.5599 0.75 0.723223 0.714104 0.56 0.75 0.723415 0.71421 0.5601 0.75 0.723606 0.714319 0.5602 0.75 0.723798 0.714429 0.5603 0.75 0.723989 0.714542 0.5604 0.75 0.724179 0.714657 0.5605 0.75 0.72437 0.714774 0.5606 0.75 0.72456 0.714894 0.5607 0.75 0.72475 0.715015 0.5608 0.75 0.724939 0.715138 0.5609 0.75 0.725129 0.715264 0.561 0.75 0.725318 0.715392 0.5611 0.75 0.725507 0.715522 0.5612 0.75 0.725695 0.715653 0.5613 0.75 0.725883 0.715787 0.5614 0.75 0.726071 0.715923 0.5615 0.75 0.726259 0.716061 0.5616 0.75 0.726446 0.716201 0.5617 0.75 0.726634 0.716343 0.5618 0.75 0.72682 0.716487 0.5619 0.75 0.727007 0.716633 0.562 0.75 0.727193 0.71678 0.5621 0.75 0.72738 0.71693 0.5622 0.75 0.727565 0.717082 0.5623 0.75 0.727751 0.717235 0.5624 0.75 0.727936 0.717391 0.5625 0.75 0.728121 0.717548 0.5626 0.75 0.728306 0.717707 0.5627 0.75 0.72849 0.717869 0.5628 0.75 0.728675 0.718031 0.5629 0.75 0.728858 0.718196 0.563 0.75 0.729042 0.718363 0.5631 0.75 0.729225 0.718531 0.5632 0.75 0.729409 0.718701 0.5633 0.75 0.729591 0.718873 0.5634 0.75 0.729774 0.719047 0.5635 0.75 0.729956 0.719222 0.5636 0.75 0.730138 0.719399 0.5637 0.75 0.73032 0.719578 0.5638 0.75 0.730501 0.719758 0.5639 0.75 0.730683 0.71994 0.564 0.75 0.730863 0.720124 0.5641 0.75 0.731044 0.72031 0.5642 0.75 0.731224 0.720497 0.5643 0.75 0.731405 0.720685 0.5644 0.75 0.731584 0.720875 0.5645 0.75 0.731764 0.721067 0.5646 0.75 0.731943 0.721261 0.5647 0.75 0.732122 0.721456 0.5648 0.75 0.732301 0.721652 0.5649 0.75 0.732479 0.72185 0.565 0.75 0.732657 0.722049 0.5651 0.75 0.732835 0.72225 0.5652 0.75 0.733013 0.722453 0.5653 0.75 0.73319 0.722656 0.5654 0.75 0.733367 0.722862 0.5655 0.75 0.733544 0.723068 0.5656 0.75 0.733721 0.723276 0.5657 0.75 0.733897 0.723486 0.5658 0.75 0.734073 0.723697 0.5659 0.75 0.734249 0.723909 0.566 0.75 0.734424 0.724122 0.5661 0.75 0.734599 0.724337 0.5662 0.75 0.734774 0.724553 0.5663 0.75 0.734949 0.724771 0.5664 0.75 0.735123 0.724989 0.5665 0.75 0.735297 0.725209 0.5666 0.75 0.735471 0.72543 0.5667 0.75 0.735644 0.725653 0.5668 0.75 0.735818 0.725876 0.5669 0.75 0.735991 0.726101 0.567 0.75 0.736163 0.726327 0.5671 0.75 0.736336 0.726554 0.5672 0.75 0.736508 0.726782 0.5673 0.75 0.73668 0.727011 0.5674 0.75 0.736851 0.727241 0.5675 0.75 0.737022 0.727473 0.5676 0.75 0.737193 0.727705 0.5677 0.75 0.737364 0.727939 0.5678 0.75 0.737535 0.728173 0.5679 0.75 0.737705 0.728408 0.568 0.75 0.737875 0.728645 0.5681 0.75 0.738044 0.728882 0.5682 0.75 0.738214 0.729121 0.5683 0.75 0.738383 0.72936 0.5684 0.75 0.738552 0.7296 0.5685 0.75 0.73872 0.729841 0.5686 0.75 0.738888 0.730083 0.5687 0.75 0.739056 0.730326 0.5688 0.75 0.739224 0.73057 0.5689 0.75 0.739391 0.730814 0.569 0.75 0.739559 0.73106 0.5691 0.75 0.739725 0.731306 0.5692 0.75 0.739892 0.731553 0.5693 0.75 0.740058 0.7318 0.5694 0.75 0.740224 0.732049 0.5695 0.75 0.74039 0.732298 0.5696 0.75 0.740556 0.732548 0.5697 0.75 0.740721 0.732798 0.5698 0.75 0.740886 0.733049 0.5699 0.75 0.74105 0.733301 0.57 0.75 0.741215 0.733553 0.5701 0.75 0.741379 0.733806 0.5702 0.75 0.741543 0.73406 0.5703 0.75 0.741706 0.734314 0.5704 0.75 0.741869 0.734569 0.5705 0.75 0.742032 0.734824 0.5706 0.75 0.742195 0.73508 0.5707 0.75 0.742358 0.735336 0.5708 0.75 0.74252 0.735593 0.5709 0.75 0.742682 0.73585 0.571 0.75 0.742843 0.736108 0.5711 0.75 0.743004 0.736366 0.5712 0.75 0.743165 0.736625 0.5713 0.75 0.743326 0.736883 0.5714 0.75 0.743487 0.737143 0.5715 0.75 0.743647 0.737402 0.5716 0.75 0.743807 0.737662 0.5717 0.75 0.743966 0.737923 0.5718 0.75 0.744126 0.738183 0.5719 0.75 0.744285 0.738444 0.572 0.75 0.744444 0.738705 0.5721 0.75 0.744602 0.738967 0.5722 0.75 0.74476 0.739228 0.5723 0.75 0.744918 0.73949 0.5724 0.75 0.745076 0.739752 0.5725 0.75 0.745233 0.740014 0.5726 0.75 0.745391 0.740277 0.5727 0.75 0.745547 0.740539 0.5728 0.75 0.745704 0.740802 0.5729 0.75 0.74586 0.741065 0.573 0.75 0.746016 0.741327 0.5731 0.75 0.746172 0.74159 0.5732 0.75 0.746327 0.741853 0.5733 0.75 0.746483 0.742116 0.5734 0.75 0.746638 0.742379 0.5735 0.75 0.746792 0.742642 0.5736 0.75 0.746946 0.742905 0.5737 0.75 0.747101 0.743168 0.5738 0.75 0.747254 0.743431 0.5739 0.75 0.747408 0.743694 0.574 0.75 0.747561 0.743957 0.5741 0.75 0.747714 0.744219 0.5742 0.75 0.747867 0.744482 0.5743 0.75 0.748019 0.744744 0.5744 0.75 0.748171 0.745007 0.5745 0.75 0.748323 0.745269 0.5746 0.75 0.748474 0.745531 0.5747 0.75 0.748626 0.745792 0.5748 0.75 0.748777 0.746054 0.5749 0.75 0.748927 0.746315 0.575 0.75 0.749078 0.746576 0.5751 0.75 0.749228 0.746836 0.5752 0.75 0.749378 0.747097 0.5753 0.75 0.749527 0.747357 0.5754 0.75 0.749677 0.747617 0.5755 0.75 0.749826 0.747876 0.5756 0.75 0.749974 0.748135 0.5757 0.75 0.750123 0.748394 0.5758 0.75 0.750271 0.748652 0.5759 0.75 0.750419 0.74891 0.576 0.75 0.750567 0.749167 0.5761 0.75 0.750714 0.749424 0.5762 0.75 0.750861 0.749681 0.5763 0.75 0.751008 0.749937 0.5764 0.75 0.751154 0.750193 0.5765 0.75 0.7513 0.750448 0.5766 0.75 0.751446 0.750702 0.5767 0.75 0.751592 0.750956 0.5768 0.75 0.751737 0.75121 0.5769 0.75 0.751882 0.751463 0.577 0.75 0.752027 0.751715 0.5771 0.75 0.752172 0.751967 0.5772 0.75 0.752316 0.752218 0.5773 0.75 0.75246 0.752468 0.5774 0.75 0.752604 0.752718 0.5775 0.75 0.752747 0.752967 0.5776 0.75 0.75289 0.753215 0.5777 0.75 0.753033 0.753463 0.5778 0.75 0.753176 0.75371 0.5779 0.75 0.753318 0.753957 0.578 0.75 0.75346 0.754202 0.5781 0.75 0.753602 0.754447 0.5782 0.75 0.753743 0.754691 0.5783 0.75 0.753884 0.754934 0.5784 0.75 0.754025 0.755177 0.5785 0.75 0.754166 0.755418 0.5786 0.75 0.754306 0.755659 0.5787 0.75 0.754446 0.755899 0.5788 0.75 0.754586 0.756138 0.5789 0.75 0.754726 0.756377 0.579 0.75 0.754865 0.756614 0.5791 0.75 0.755004 0.75685 0.5792 0.75 0.755142 0.757086 0.5793 0.75 0.755281 0.757321 0.5794 0.75 0.755419 0.757554 0.5795 0.75 0.755557 0.757787 0.5796 0.75 0.755694 0.758019 0.5797 0.75 0.755831 0.75825 0.5798 0.75 0.755968 0.758479 0.5799 0.75 0.756105 0.758708 0.58 0.75 0.756241 0.758936 0.5801 0.75 0.756377 0.759162 0.5802 0.75 0.756513 0.759388 0.5803 0.75 0.756649 0.759613 0.5804 0.75 0.756784 0.759836 0.5805 0.75 0.756919 0.760058 0.5806 0.75 0.757054 0.76028 0.5807 0.75 0.757188 0.7605 0.5808 0.75 0.757322 0.760719 0.5809 0.75 0.757456 0.760937 0.581 0.75 0.75759 0.761153 0.5811 0.75 0.757723 0.761369 0.5812 0.75 0.757856 0.761583 0.5813 0.75 0.757989 0.761796 0.5814 0.75 0.758122 0.762008 0.5815 0.75 0.758254 0.762219 0.5816 0.75 0.758386 0.762429 0.5817 0.75 0.758517 0.762637 0.5818 0.75 0.758649 0.762844 0.5819 0.75 0.75878 0.76305 0.582 0.75 0.75891 0.763254 0.5821 0.75 0.759041 0.763457 0.5822 0.75 0.759171 0.763659 0.5823 0.75 0.759301 0.76386 0.5824 0.75 0.759431 0.764059 0.5825 0.75 0.75956 0.764257 0.5826 0.75 0.759689 0.764454 0.5827 0.75 0.759818 0.764649 0.5828 0.75 0.759947 0.764843 0.5829 0.75 0.760075 0.765035 0.583 0.75 0.760203 0.765226 0.5831 0.75 0.760331 0.765416 0.5832 0.75 0.760458 0.765604 0.5833 0.75 0.760585 0.765791 0.5834 0.75 0.760712 0.765976 0.5835 0.75 0.760839 0.76616 0.5836 0.75 0.760965 0.766343 0.5837 0.75 0.761091 0.766524 0.5838 0.75 0.761217 0.766704 0.5839 0.75 0.761342 0.766882 0.584 0.75 0.761467 0.767058 0.5841 0.75 0.761592 0.767234 0.5842 0.75 0.761717 0.767407 0.5843 0.75 0.761841 0.767579 0.5844 0.75 0.761965 0.76775 0.5845 0.75 0.762089 0.767919 0.5846 0.75 0.762213 0.768087 0.5847 0.75 0.762336 0.768253 0.5848 0.75 0.762459 0.768417 0.5849 0.75 0.762582 0.76858 0.585 0.75 0.762704 0.768741 0.5851 0.75 0.762826 0.768901 0.5852 0.75 0.762948 0.769059 0.5853 0.75 0.763069 0.769216 0.5854 0.75 0.763191 0.76937 0.5855 0.75 0.763312 0.769524 0.5856 0.75 0.763432 0.769675 0.5857 0.75 0.763553 0.769825 0.5858 0.75 0.763673 0.769974 0.5859 0.75 0.763793 0.770121 0.586 0.75 0.763912 0.770266 0.5861 0.75 0.764032 0.770409 0.5862 0.75 0.764151 0.770551 0.5863 0.75 0.76427 0.770691 0.5864 0.75 0.764388 0.770829 0.5865 0.75 0.764506 0.770966 0.5866 0.75 0.764624 0.771101 0.5867 0.75 0.764742 0.771235 0.5868 0.75 0.764859 0.771366 0.5869 0.75 0.764976 0.771496 0.587 0.75 0.765093 0.771624 0.5871 0.75 0.76521 0.771751 0.5872 0.75 0.765326 0.771876 0.5873 0.75 0.765442 0.771999 0.5874 0.75 0.765557 0.77212 0.5875 0.75 0.765673 0.772239 0.5876 0.75 0.765788 0.772357 0.5877 0.75 0.765903 0.772473 0.5878 0.75 0.766017 0.772588 0.5879 0.75 0.766132 0.7727 0.588 0.75 0.766246 0.772811 0.5881 0.75 0.766359 0.77292 0.5882 0.75 0.766473 0.773027 0.5883 0.75 0.766586 0.773132 0.5884 0.75 0.766699 0.773236 0.5885 0.75 0.766812 0.773338 0.5886 0.75 0.766924 0.773438 0.5887 0.75 0.767036 0.773536 0.5888 0.75 0.767148 0.773633 0.5889 0.75 0.767259 0.773727 0.589 0.75 0.767371 0.77382 0.5891 0.75 0.767482 0.773911 0.5892 0.75 0.767592 0.774 0.5893 0.75 0.767703 0.774088 0.5894 0.75 0.767813 0.774173 0.5895 0.75 0.767923 0.774257 0.5896 0.75 0.768032 0.774339 0.5897 0.75 0.768141 0.774419 0.5898 0.75 0.76825 0.774497 0.5899 0.75 0.768359 0.774574 0.59 0.75 0.768468 0.774648 0.5901 0.75 0.768576 0.774721 0.5902 0.75 0.768684 0.774792 0.5903 0.75 0.768791 0.774861 0.5904 0.75 0.768899 0.774928 0.5905 0.75 0.769006 0.774994 0.5906 0.75 0.769113 0.775057 0.5907 0.75 0.769219 0.775119 0.5908 0.75 0.769325 0.775179 0.5909 0.75 0.769431 0.775237 0.591 0.75 0.769537 0.775293 0.5911 0.75 0.769642 0.775347 0.5912 0.75 0.769747 0.7754 0.5913 0.75 0.769852 0.77545 0.5914 0.75 0.769957 0.775499 0.5915 0.75 0.770061 0.775546 0.5916 0.75 0.770165 0.775591 0.5917 0.75 0.770269 0.775634 0.5918 0.75 0.770372 0.775675 0.5919 0.75 0.770476 0.775715 0.592 0.75 0.770579 0.775752 0.5921 0.75 0.770681 0.775788 0.5922 0.75 0.770784 0.775822 0.5923 0.75 0.770886 0.775854 0.5924 0.75 0.770987 0.775884 0.5925 0.75 0.771089 0.775913 0.5926 0.75 0.77119 0.775939 0.5927 0.75 0.771291 0.775964 0.5928 0.75 0.771392 0.775986 0.5929 0.75 0.771492 0.776007 0.593 0.75 0.771593 0.776027 0.5931 0.75 0.771692 0.776044 0.5932 0.75 0.771792 0.776059 0.5933 0.75 0.771891 0.776073 0.5934 0.75 0.77199 0.776085 0.5935 0.75 0.772089 0.776094 0.5936 0.75 0.772188 0.776103 0.5937 0.75 0.772286 0.776109 0.5938 0.75 0.772384 0.776113 0.5939 0.75 0.772482 0.776116 0.594 0.75 0.772579 0.776117 0.5941 0.75 0.772676 0.776115 0.5942 0.75 0.772773 0.776113 0.5943 0.75 0.77287 0.776108 0.5944 0.75 0.772966 0.776101 0.5945 0.75 0.773062 0.776093 0.5946 0.75 0.773158 0.776083 0.5947 0.75 0.773253 0.776071 0.5948 0.75 0.773348 0.776057 0.5949 0.75 0.773443 0.776042 0.595 0.75 0.773538 0.776025 0.5951 0.75 0.773632 0.776006 0.5952 0.75 0.773727 0.775985 0.5953 0.75 0.77382 0.775962 0.5954 0.75 0.773914 0.775938 0.5955 0.75 0.774007 0.775911 0.5956 0.75 0.7741 0.775884 0.5957 0.75 0.774193 0.775854 0.5958 0.75 0.774286 0.775822 0.5959 0.75 0.774378 0.775789 0.596 0.75 0.77447 0.775754 0.5961 0.75 0.774561 0.775718 0.5962 0.75 0.774653 0.775679 0.5963 0.75 0.774744 0.775639 0.5964 0.75 0.774835 0.775597 0.5965 0.75 0.774925 0.775554 0.5966 0.75 0.775016 0.775508 0.5967 0.75 0.775106 0.775461 0.5968 0.75 0.775195 0.775412 0.5969 0.75 0.775285 0.775362 0.597 0.75 0.775374 0.77531 0.5971 0.75 0.775463 0.775256 0.5972 0.75 0.775552 0.775201 0.5973 0.75 0.77564 0.775144 0.5974 0.75 0.775728 0.775085 0.5975 0.75 0.775816 0.775024 0.5976 0.75 0.775904 0.774962 0.5977 0.75 0.775991 0.774898 0.5978 0.75 0.776078 0.774833 0.5979 0.75 0.776165 0.774766 0.598 0.75 0.776251 0.774697 0.5981 0.75 0.776337 0.774627 0.5982 0.75 0.776423 0.774555 0.5983 0.75 0.776509 0.774482 0.5984 0.75 0.776594 0.774407 0.5985 0.75 0.77668 0.77433 0.5986 0.75 0.776764 0.774252 0.5987 0.75 0.776849 0.774172 0.5988 0.75 0.776933 0.774091 0.5989 0.75 0.777017 0.774008 0.599 0.75 0.777101 0.773923 0.5991 0.75 0.777185 0.773837 0.5992 0.75 0.777268 0.77375 0.5993 0.75 0.777351 0.773661 0.5994 0.75 0.777434 0.77357 0.5995 0.75 0.777516 0.773478 0.5996 0.75 0.777598 0.773385 0.5997 0.75 0.77768 0.773289 0.5998 0.75 0.777762 0.773193 0.5999 0.75 0.777843 0.773095 0.6 0.75 0.777924 0.772995 0.6001 0.75 0.778005 0.772894 0.6002 0.75 0.778086 0.772792 0.6003 0.75 0.778166 0.772688 0.6004 0.75 0.778246 0.772583 0.6005 0.75 0.778326 0.772476 0.6006 0.75 0.778405 0.772368 0.6007 0.75 0.778484 0.772259 0.6008 0.75 0.778563 0.772148 0.6009 0.75 0.778642 0.772036 0.601 0.75 0.77872 0.771922 0.6011 0.75 0.778799 0.771807 0.6012 0.75 0.778876 0.771691 0.6013 0.75 0.778954 0.771573 0.6014 0.75 0.779031 0.771454 0.6015 0.75 0.779108 0.771334 0.6016 0.75 0.779185 0.771212 0.6017 0.75 0.779262 0.771089 0.6018 0.75 0.779338 0.770965 0.6019 0.75 0.779414 0.77084 0.602 0.75 0.77949 0.770713 0.6021 0.75 0.779565 0.770585 0.6022 0.75 0.779641 0.770456 0.6023 0.75 0.779716 0.770325 0.6024 0.75 0.77979 0.770194 0.6025 0.75 0.779865 0.770061 0.6026 0.75 0.779939 0.769927 0.6027 0.75 0.780013 0.769791 0.6028 0.75 0.780086 0.769655 0.6029 0.75 0.78016 0.769517 0.603 0.75 0.780233 0.769378 0.6031 0.75 0.780305 0.769238 0.6032 0.75 0.780378 0.769097 0.6033 0.75 0.78045 0.768955 0.6034 0.75 0.780522 0.768812 0.6035 0.75 0.780594 0.768667 0.6036 0.75 0.780666 0.768522 0.6037 0.75 0.780737 0.768375 0.6038 0.75 0.780808 0.768227 0.6039 0.75 0.780879 0.768079 0.604 0.75 0.780949 0.767929 0.6041 0.75 0.781019 0.767778 0.6042 0.75 0.781089 0.767626 0.6043 0.75 0.781159 0.767473 0.6044 0.75 0.781228 0.767319 0.6045 0.75 0.781297 0.767165 0.6046 0.75 0.781366 0.767009 0.6047 0.75 0.781435 0.766852 0.6048 0.75 0.781503 0.766694 0.6049 0.75 0.781571 0.766536 0.605 0.75 0.781639 0.766376 0.6051 0.75 0.781706 0.766216 0.6052 0.75 0.781774 0.766054 0.6053 0.75 0.781841 0.765892 0.6054 0.75 0.781907 0.765729 0.6055 0.75 0.781974 0.765565 0.6056 0.75 0.78204 0.7654 0.6057 0.75 0.782106 0.765234 0.6058 0.75 0.782172 0.765068 0.6059 0.75 0.782237 0.7649 0.606 0.75 0.782303 0.764732 0.6061 0.75 0.782367 0.764563 0.6062 0.75 0.782432 0.764394 0.6063 0.75 0.782497 0.764223 0.6064 0.75 0.782561 0.764052 0.6065 0.75 0.782625 0.76388 0.6066 0.75 0.782688 0.763708 0.6067 0.75 0.782752 0.763534 0.6068 0.75 0.782815 0.76336 0.6069 0.75 0.782878 0.763185 0.607 0.75 0.78294 0.76301 0.6071 0.75 0.783002 0.762834 0.6072 0.75 0.783064 0.762657 0.6073 0.75 0.783126 0.76248 0.6074 0.75 0.783188 0.762302 0.6075 0.75 0.783249 0.762123 0.6076 0.75 0.78331 0.761944 0.6077 0.75 0.783371 0.761765 0.6078 0.75 0.783431 0.761584 0.6079 0.75 0.783492 0.761403 0.608 0.75 0.783552 0.761222 0.6081 0.75 0.783611 0.76104 0.6082 0.75 0.783671 0.760858 0.6083 0.75 0.78373 0.760675 0.6084 0.75 0.783789 0.760491 0.6085 0.75 0.783848 0.760308 0.6086 0.75 0.783906 0.760123 0.6087 0.75 0.783964 0.759938 0.6088 0.75 0.784022 0.759753 0.6089 0.75 0.78408 0.759568 0.609 0.75 0.784138 0.759382 0.6091 0.75 0.784195 0.759195 0.6092 0.75 0.784252 0.759008 0.6093 0.75 0.784308 0.758821 0.6094 0.75 0.784365 0.758634 0.6095 0.75 0.784421 0.758446 0.6096 0.75 0.784477 0.758258 0.6097 0.75 0.784532 0.758069 0.6098 0.75 0.784588 0.75788 0.6099 0.75 0.784643 0.757691 0.61 0.75 0.784698 0.757502 0.6101 0.75 0.784752 0.757312 0.6102 0.75 0.784807 0.757123 0.6103 0.75 0.784861 0.756932 0.6104 0.75 0.784915 0.756742 0.6105 0.75 0.784968 0.756552 0.6106 0.75 0.785022 0.756361 0.6107 0.75 0.785075 0.75617 0.6108 0.75 0.785128 0.755979 0.6109 0.75 0.78518 0.755788 0.611 0.75 0.785232 0.755597 0.6111 0.75 0.785284 0.755405 0.6112 0.75 0.785336 0.755214 0.6113 0.75 0.785388 0.755022 0.6114 0.75 0.785439 0.754831 0.6115 0.75 0.78549 0.754639 0.6116 0.75 0.785541 0.754447 0.6117 0.75 0.785592 0.754255 0.6118 0.75 0.785642 0.754063 0.6119 0.75 0.785692 0.753871 0.612 0.75 0.785742 0.753679 0.6121 0.75 0.785791 0.753487 0.6122 0.75 0.785841 0.753296 0.6123 0.75 0.78589 0.753104 0.6124 0.75 0.785939 0.752912 0.6125 0.75 0.785987 0.75272 0.6126 0.75 0.786035 0.752529 0.6127 0.75 0.786083 0.752337 0.6128 0.75 0.786131 0.752146 0.6129 0.75 0.786179 0.751954 0.613 0.75 0.786226 0.751763 0.6131 0.75 0.786273 0.751572 0.6132 0.75 0.78632 0.751381 0.6133 0.75 0.786366 0.751191 0.6134 0.75 0.786413 0.751 0.6135 0.75 0.786459 0.75081 0.6136 0.75 0.786505 0.75062 0.6137 0.75 0.78655 0.75043 0.6138 0.75 0.786595 0.75024 0.6139 0.75 0.786641 0.750051 0.614 0.75 0.786685 0.749861 0.6141 0.75 0.78673 0.749673 0.6142 0.75 0.786774 0.749484 0.6143 0.75 0.786818 0.749296 0.6144 0.75 0.786862 0.749108 0.6145 0.75 0.786906 0.74892 0.6146 0.75 0.786949 0.748733 0.6147 0.75 0.786992 0.748546 0.6148 0.75 0.787035 0.748359 0.6149 0.75 0.787077 0.748173 0.615 0.75 0.78712 0.747987 0.6151 0.75 0.787162 0.747802 0.6152 0.75 0.787204 0.747617 0.6153 0.75 0.787245 0.747432 0.6154 0.75 0.787287 0.747248 0.6155 0.75 0.787328 0.747064 0.6156 0.75 0.787369 0.746881 0.6157 0.75 0.787409 0.746698 0.6158 0.75 0.78745 0.746516 0.6159 0.75 0.78749 0.746334 0.616 0.75 0.78753 0.746153 0.6161 0.75 0.787569 0.745972 0.6162 0.75 0.787609 0.745792 0.6163 0.75 0.787648 0.745612 0.6164 0.75 0.787687 0.745433 0.6165 0.75 0.787726 0.745255 0.6166 0.75 0.787764 0.745077 0.6167 0.75 0.787802 0.744899 0.6168 0.75 0.78784 0.744723 0.6169 0.75 0.787878 0.744546 0.617 0.75 0.787915 0.744371 0.6171 0.75 0.787952 0.744196 0.6172 0.75 0.787989 0.744022 0.6173 0.75 0.788026 0.743848 0.6174 0.75 0.788063 0.743675 0.6175 0.75 0.788099 0.743503 0.6176 0.75 0.788135 0.743332 0.6177 0.75 0.788171 0.743161 0.6178 0.75 0.788206 0.742991 0.6179 0.75 0.788241 0.742821 0.618 0.75 0.788277 0.742653 0.6181 0.75 0.788311 0.742485 0.6182 0.75 0.788346 0.742318 0.6183 0.75 0.78838 0.742152 0.6184 0.75 0.788414 0.741986 0.6185 0.75 0.788448 0.741821 0.6186 0.75 0.788482 0.741657 0.6187 0.75 0.788515 0.741494 0.6188 0.75 0.788548 0.741332 0.6189 0.75 0.788581 0.741171 0.619 0.75 0.788614 0.74101 0.6191 0.75 0.788646 0.74085 0.6192 0.75 0.788678 0.740691 0.6193 0.75 0.78871 0.740533 0.6194 0.75 0.788742 0.740376 0.6195 0.75 0.788773 0.74022 0.6196 0.75 0.788805 0.740065 0.6197 0.75 0.788836 0.73991 0.6198 0.75 0.788866 0.739757 0.6199 0.75 0.788897 0.739604 0.62 0.75 0.788927 0.739453 0.6201 0.75 0.788957 0.739302 0.6202 0.75 0.788987 0.739152 0.6203 0.75 0.789017 0.739004 0.6204 0.75 0.789046 0.738856 0.6205 0.75 0.789075 0.738709 0.6206 0.75 0.789104 0.738563 0.6207 0.75 0.789133 0.738419 0.6208 0.75 0.789161 0.738275 0.6209 0.75 0.789189 0.738132 0.621 0.75 0.789217 0.737991 0.6211 0.75 0.789245 0.73785 0.6212 0.75 0.789272 0.73771 0.6213 0.75 0.7893 0.737572 0.6214 0.75 0.789327 0.737435 0.6215 0.75 0.789353 0.737298 0.6216 0.75 0.78938 0.737163 0.6217 0.75 0.789406 0.737029 0.6218 0.75 0.789432 0.736896 0.6219 0.75 0.789458 0.736764 0.622 0.75 0.789484 0.736633 0.6221 0.75 0.789509 0.736503 0.6222 0.75 0.789534 0.736375 0.6223 0.75 0.789559 0.736247 0.6224 0.75 0.789584 0.736121 0.6225 0.75 0.789608 0.735996 0.6226 0.75 0.789632 0.735872 0.6227 0.75 0.789656 0.735749 0.6228 0.75 0.78968 0.735628 0.6229 0.75 0.789704 0.735507 0.623 0.75 0.789727 0.735388 0.6231 0.75 0.78975 0.73527 0.6232 0.75 0.789773 0.735153 0.6233 0.75 0.789795 0.735038 0.6234 0.75 0.789818 0.734924 0.6235 0.75 0.78984 0.73481 0.6236 0.75 0.789862 0.734698 0.6237 0.75 0.789884 0.734588 0.6238 0.75 0.789905 0.734478 0.6239 0.75 0.789926 0.73437 0.624 0.75 0.789947 0.734263 0.6241 0.75 0.789968 0.734158 0.6242 0.75 0.789989 0.734053 0.6243 0.75 0.790009 0.73395 0.6244 0.75 0.790029 0.733849 0.6245 0.75 0.790049 0.733748 0.6246 0.75 0.790069 0.733649 0.6247 0.75 0.790088 0.733551 0.6248 0.75 0.790107 0.733454 0.6249 0.75 0.790126 0.733359 0.625 0.75 0.790145 0.733265 0.6251 0.75 0.790163 0.733172 0.6252 0.75 0.790182 0.733081 0.6253 0.75 0.7902 0.732991 0.6254 0.75 0.790218 0.732902 0.6255 0.75 0.790235 0.732815 0.6256 0.75 0.790253 0.732729 0.6257 0.75 0.79027 0.732644 0.6258 0.75 0.790287 0.732561 0.6259 0.75 0.790304 0.732479 0.626 0.75 0.79032 0.732398 0.6261 0.75 0.790336 0.732319 0.6262 0.75 0.790352 0.732241 0.6263 0.75 0.790368 0.732165 0.6264 0.75 0.790384 0.73209 0.6265 0.75 0.790399 0.732016 0.6266 0.75 0.790414 0.731944 0.6267 0.75 0.790429 0.731873 0.6268 0.75 0.790444 0.731803 0.6269 0.75 0.790459 0.731735 0.627 0.75 0.790473 0.731669 0.6271 0.75 0.790487 0.731603 0.6272 0.75 0.790501 0.731539 0.6273 0.75 0.790515 0.731477 0.6274 0.75 0.790528 0.731416 0.6275 0.75 0.790541 0.731356 0.6276 0.75 0.790554 0.731298 0.6277 0.75 0.790567 0.731241 0.6278 0.75 0.790579 0.731185 0.6279 0.75 0.790592 0.731131 0.628 0.75 0.790604 0.731079 0.6281 0.75 0.790616 0.731027 0.6282 0.75 0.790627 0.730978 0.6283 0.75 0.790639 0.730929 0.6284 0.75 0.79065 0.730882 0.6285 0.75 0.790661 0.730837 0.6286 0.75 0.790672 0.730793 0.6287 0.75 0.790682 0.73075 0.6288 0.75 0.790693 0.730709 0.6289 0.75 0.790703 0.730669 0.629 0.75 0.790713 0.730631 0.6291 0.75 0.790723 0.730594 0.6292 0.75 0.790732 0.730559 0.6293 0.75 0.790741 0.730525 0.6294 0.75 0.79075 0.730493 0.6295 0.75 0.790759 0.730461 0.6296 0.75 0.790768 0.730432 0.6297 0.75 0.790776 0.730404 0.6298 0.75 0.790785 0.730377 0.6299 0.75 0.790793 0.730352 0.63 0.75 0.7908 0.730328 0.6301 0.75 0.790808 0.730306 0.6302 0.75 0.790815 0.730285 0.6303 0.75 0.790823 0.730265 0.6304 0.75 0.790829 0.730247 0.6305 0.75 0.790836 0.730231 0.6306 0.75 0.790843 0.730215 0.6307 0.75 0.790849 0.730202 0.6308 0.75 0.790855 0.730189 0.6309 0.75 0.790861 0.730179 0.631 0.75 0.790867 0.730169 0.6311 0.75 0.790872 0.730161 0.6312 0.75 0.790877 0.730155 0.6313 0.75 0.790882 0.73015 0.6314 0.75 0.790887 0.730146 0.6315 0.75 0.790892 0.730144 0.6316 0.75 0.790896 0.730143 0.6317 0.75 0.790901 0.730144 0.6318 0.75 0.790905 0.730146 0.6319 0.75 0.790908 0.73015 0.632 0.75 0.790912 0.730155 0.6321 0.75 0.790915 0.730161 0.6322 0.75 0.790918 0.730169 0.6323 0.75 0.790921 0.730178 0.6324 0.75 0.790924 0.730189 0.6325 0.75 0.790927 0.730201 0.6326 0.75 0.790929 0.730215 0.6327 0.75 0.790931 0.73023 0.6328 0.75 0.790933 0.730246 0.6329 0.75 0.790935 0.730264 0.633 0.75 0.790936 0.730283 0.6331 0.75 0.790938 0.730303 0.6332 0.75 0.790939 0.730325 0.6333 0.75 0.79094 0.730349 0.6334 0.75 0.79094 0.730373 0.6335 0.75 0.790941 0.7304 0.6336 0.75 0.790941 0.730427 0.6337 0.75 0.790941 0.730456 0.6338 0.75 0.790941 0.730486 0.6339 0.75 0.790941 0.730518 0.634 0.75 0.79094 0.730551 0.6341 0.75 0.79094 0.730585 0.6342 0.75 0.790939 0.730621 0.6343 0.75 0.790937 0.730658 0.6344 0.75 0.790936 0.730697 0.6345 0.75 0.790935 0.730737 0.6346 0.75 0.790933 0.730778 0.6347 0.75 0.790931 0.73082 0.6348 0.75 0.790929 0.730864 0.6349 0.75 0.790926 0.730909 0.635 0.75 0.790924 0.730956 0.6351 0.75 0.790921 0.731004 0.6352 0.75 0.790918 0.731053 0.6353 0.75 0.790915 0.731103 0.6354 0.75 0.790912 0.731155 0.6355 0.75 0.790908 0.731208 0.6356 0.75 0.790904 0.731263 0.6357 0.75 0.790901 0.731318 0.6358 0.75 0.790896 0.731375 0.6359 0.75 0.790892 0.731433 0.636 0.75 0.790888 0.731493 0.6361 0.75 0.790883 0.731554 0.6362 0.75 0.790878 0.731616 0.6363 0.75 0.790873 0.731679 0.6364 0.75 0.790867 0.731744 0.6365 0.75 0.790862 0.73181 0.6366 0.75 0.790856 0.731877 0.6367 0.75 0.79085 0.731945 0.6368 0.75 0.790844 0.732014 0.6369 0.75 0.790838 0.732085 0.637 0.75 0.790832 0.732157 0.6371 0.75 0.790825 0.73223 0.6372 0.75 0.790818 0.732305 0.6373 0.75 0.790811 0.73238 0.6374 0.75 0.790804 0.732457 0.6375 0.75 0.790796 0.732535 0.6376 0.75 0.790789 0.732614 0.6377 0.75 0.790781 0.732695 0.6378 0.75 0.790773 0.732776 0.6379 0.75 0.790764 0.732859 0.638 0.75 0.790756 0.732942 0.6381 0.75 0.790747 0.733027 0.6382 0.75 0.790739 0.733113 0.6383 0.75 0.79073 0.733201 0.6384 0.75 0.79072 0.733289 0.6385 0.75 0.790711 0.733378 0.6386 0.75 0.790701 0.733469 0.6387 0.75 0.790692 0.73356 0.6388 0.75 0.790682 0.733653 0.6389 0.75 0.790672 0.733747 0.639 0.75 0.790661 0.733842 0.6391 0.75 0.790651 0.733938 0.6392 0.75 0.79064 0.734035 0.6393 0.75 0.790629 0.734133 0.6394 0.75 0.790618 0.734232 0.6395 0.75 0.790607 0.734332 0.6396 0.75 0.790595 0.734433 0.6397 0.75 0.790584 0.734535 0.6398 0.75 0.790572 0.734638 0.6399 0.75 0.79056 0.734742 0.64 0.75 0.790548 0.734848 0.6401 0.75 0.790535 0.734954 0.6402 0.75 0.790523 0.735061 0.6403 0.75 0.79051 0.735169 0.6404 0.75 0.790497 0.735278 0.6405 0.75 0.790484 0.735388 0.6406 0.75 0.790471 0.735499 0.6407 0.75 0.790457 0.735611 0.6408 0.75 0.790443 0.735723 0.6409 0.75 0.79043 0.735837 0.641 0.75 0.790416 0.735951 0.6411 0.75 0.790401 0.736067 0.6412 0.75 0.790387 0.736183 0.6413 0.75 0.790372 0.736301 0.6414 0.75 0.790358 0.736419 0.6415 0.75 0.790343 0.736538 0.6416 0.75 0.790327 0.736657 0.6417 0.75 0.790312 0.736778 0.6418 0.75 0.790297 0.736899 0.6419 0.75 0.790281 0.737022 0.642 0.75 0.790265 0.737145 0.6421 0.75 0.790249 0.737269 0.6422 0.75 0.790233 0.737393 0.6423 0.75 0.790216 0.737519 0.6424 0.75 0.7902 0.737645 0.6425 0.75 0.790183 0.737772 0.6426 0.75 0.790166 0.7379 0.6427 0.75 0.790149 0.738028 0.6428 0.75 0.790132 0.738157 0.6429 0.75 0.790114 0.738287 0.643 0.75 0.790096 0.738418 0.6431 0.75 0.790079 0.738549 0.6432 0.75 0.790061 0.738681 0.6433 0.75 0.790042 0.738814 0.6434 0.75 0.790024 0.738947 0.6435 0.75 0.790006 0.739081 0.6436 0.75 0.789987 0.739216 0.6437 0.75 0.789968 0.739351 0.6438 0.75 0.789949 0.739487 0.6439 0.75 0.78993 0.739623 0.644 0.75 0.78991 0.739761 0.6441 0.75 0.789891 0.739898 0.6442 0.75 0.789871 0.740037 0.6443 0.75 0.789851 0.740175 0.6444 0.75 0.789831 0.740315 0.6445 0.75 0.78981 0.740455 0.6446 0.75 0.78979 0.740595 0.6447 0.75 0.789769 0.740737 0.6448 0.75 0.789749 0.740878 0.6449 0.75 0.789728 0.74102 0.645 0.75 0.789706 0.741163 0.6451 0.75 0.789685 0.741306 0.6452 0.75 0.789664 0.741449 0.6453 0.75 0.789642 0.741594 0.6454 0.75 0.78962 0.741738 0.6455 0.75 0.789598 0.741883 0.6456 0.75 0.789576 0.742028 0.6457 0.75 0.789554 0.742174 0.6458 0.75 0.789531 0.74232 0.6459 0.75 0.789508 0.742467 0.646 0.75 0.789485 0.742614 0.6461 0.75 0.789462 0.742761 0.6462 0.75 0.789439 0.742909 0.6463 0.75 0.789416 0.743057 0.6464 0.75 0.789392 0.743205 0.6465 0.75 0.789369 0.743354 0.6466 0.75 0.789345 0.743503 0.6467 0.75 0.789321 0.743653 0.6468 0.75 0.789297 0.743802 0.6469 0.75 0.789272 0.743952 0.647 0.75 0.789248 0.744103 0.6471 0.75 0.789223 0.744253 0.6472 0.75 0.789198 0.744404 0.6473 0.75 0.789173 0.744555 0.6474 0.75 0.789148 0.744706 0.6475 0.75 0.789123 0.744858 0.6476 0.75 0.789097 0.74501 0.6477 0.75 0.789071 0.745161 0.6478 0.75 0.789046 0.745314 0.6479 0.75 0.78902 0.745466 0.648 0.75 0.788993 0.745618 0.6481 0.75 0.788967 0.745771 0.6482 0.75 0.788941 0.745924 0.6483 0.75 0.788914 0.746076 0.6484 0.75 0.788887 0.746229 0.6485 0.75 0.78886 0.746383 0.6486 0.75 0.788833 0.746536 0.6487 0.75 0.788806 0.746689 0.6488 0.75 0.788778 0.746842 0.6489 0.75 0.788751 0.746996 0.649 0.75 0.788723 0.747149 0.6491 0.75 0.788695 0.747303 0.6492 0.75 0.788667 0.747456 0.6493 0.75 0.788638 0.74761 0.6494 0.75 0.78861 0.747763 0.6495 0.75 0.788581 0.747917 0.6496 0.75 0.788553 0.748071 0.6497 0.75 0.788524 0.748224 0.6498 0.75 0.788495 0.748378 0.6499 0.75 0.788466 0.748531 0.65 0.75 0.788436 0.748684 0.6501 0.75 0.788407 0.748838 0.6502 0.75 0.788377 0.748991 0.6503 0.75 0.788347 0.749144 0.6504 0.75 0.788317 0.749297 0.6505 0.75 0.788287 0.74945 0.6506 0.75 0.788257 0.749603 0.6507 0.75 0.788226 0.749756 0.6508 0.75 0.788196 0.749908 0.6509 0.75 0.788165 0.75006 0.651 0.75 0.788134 0.750213 0.6511 0.75 0.788103 0.750365 0.6512 0.75 0.788072 0.750516 0.6513 0.75 0.78804 0.750668 0.6514 0.75 0.788009 0.75082 0.6515 0.75 0.787977 0.750971 0.6516 0.75 0.787945 0.751122 0.6517 0.75 0.787913 0.751272 0.6518 0.75 0.787881 0.751423 0.6519 0.75 0.787849 0.751573 0.652 0.75 0.787816 0.751723 0.6521 0.75 0.787784 0.751873 0.6522 0.75 0.787751 0.752022 0.6523 0.75 0.787718 0.752171 0.6524 0.75 0.787685 0.75232 0.6525 0.75 0.787652 0.752468 0.6526 0.75 0.787619 0.752616 0.6527 0.75 0.787585 0.752764 0.6528 0.75 0.787552 0.752911 0.6529 0.75 0.787518 0.753058 0.653 0.75 0.787484 0.753204 0.6531 0.75 0.78745 0.75335 0.6532 0.75 0.787416 0.753496 0.6533 0.75 0.787381 0.753642 0.6534 0.75 0.787347 0.753786 0.6535 0.75 0.787312 0.753931 0.6536 0.75 0.787277 0.754075 0.6537 0.75 0.787242 0.754218 0.6538 0.75 0.787207 0.754362 0.6539 0.75 0.787172 0.754504 0.654 0.75 0.787137 0.754646 0.6541 0.75 0.787101 0.754788 0.6542 0.75 0.787066 0.754929 0.6543 0.75 0.78703 0.75507 0.6544 0.75 0.786994 0.75521 0.6545 0.75 0.786958 0.755349 0.6546 0.75 0.786921 0.755488 0.6547 0.75 0.786885 0.755627 0.6548 0.75 0.786849 0.755765 0.6549 0.75 0.786812 0.755902 0.655 0.75 0.786775 0.756039 0.6551 0.75 0.786738 0.756175 0.6552 0.75 0.786701 0.756311 0.6553 0.75 0.786664 0.756445 0.6554 0.75 0.786626 0.75658 0.6555 0.75 0.786589 0.756713 0.6556 0.75 0.786551 0.756847 0.6557 0.75 0.786514 0.756979 0.6558 0.75 0.786476 0.757111 0.6559 0.75 0.786438 0.757242 0.656 0.75 0.786399 0.757372 0.6561 0.75 0.786361 0.757502 0.6562 0.75 0.786323 0.757631 0.6563 0.75 0.786284 0.757759 0.6564 0.75 0.786245 0.757887 0.6565 0.75 0.786206 0.758014 0.6566 0.75 0.786167 0.75814 0.6567 0.75 0.786128 0.758265 0.6568 0.75 0.786089 0.75839 0.6569 0.75 0.786049 0.758514 0.657 0.75 0.78601 0.758637 0.6571 0.75 0.78597 0.758759 0.6572 0.75 0.78593 0.758881 0.6573 0.75 0.78589 0.759002 0.6574 0.75 0.78585 0.759122 0.6575 0.75 0.78581 0.759241 0.6576 0.75 0.78577 0.759359 0.6577 0.75 0.785729 0.759477 0.6578 0.75 0.785689 0.759594 0.6579 0.75 0.785648 0.75971 0.658 0.75 0.785607 0.759825 0.6581 0.75 0.785566 0.759939 0.6582 0.75 0.785525 0.760052 0.6583 0.75 0.785484 0.760165 0.6584 0.75 0.785442 0.760276 0.6585 0.75 0.785401 0.760387 0.6586 0.75 0.785359 0.760497 0.6587 0.75 0.785317 0.760606 0.6588 0.75 0.785275 0.760714 0.6589 0.75 0.785233 0.760821 0.659 0.75 0.785191 0.760927 0.6591 0.75 0.785149 0.761032 0.6592 0.75 0.785106 0.761137 0.6593 0.75 0.785064 0.76124 0.6594 0.75 0.785021 0.761343 0.6595 0.75 0.784978 0.761444 0.6596 0.75 0.784935 0.761545 0.6597 0.75 0.784892 0.761644 0.6598 0.75 0.784849 0.761743 0.6599 0.75 0.784806 0.76184 0.66 0.75 0.784762 0.761937 0.6601 0.75 0.784719 0.762033 0.6602 0.75 0.784675 0.762127 0.6603 0.75 0.784631 0.762221 0.6604 0.75 0.784587 0.762314 0.6605 0.75 0.784543 0.762405 0.6606 0.75 0.784499 0.762496 0.6607 0.75 0.784455 0.762586 0.6608 0.75 0.78441 0.762674 0.6609 0.75 0.784366 0.762762 0.661 0.75 0.784321 0.762848 0.6611 0.75 0.784276 0.762933 0.6612 0.75 0.784231 0.763018 0.6613 0.75 0.784186 0.763101 0.6614 0.75 0.784141 0.763183 0.6615 0.75 0.784096 0.763264 0.6616 0.75 0.78405 0.763344 0.6617 0.75 0.784005 0.763423 0.6618 0.75 0.783959 0.763501 0.6619 0.75 0.783913 0.763578 0.662 0.75 0.783868 0.763654 0.6621 0.75 0.783822 0.763728 0.6622 0.75 0.783775 0.763802 0.6623 0.75 0.783729 0.763874 0.6624 0.75 0.783683 0.763946 0.6625 0.75 0.783636 0.764016 0.6626 0.75 0.78359 0.764085 0.6627 0.75 0.783543 0.764153 0.6628 0.75 0.783496 0.76422 0.6629 0.75 0.783449 0.764285 0.663 0.75 0.783402 0.76435 0.6631 0.75 0.783355 0.764413 0.6632 0.75 0.783308 0.764475 0.6633 0.75 0.783261 0.764536 0.6634 0.75 0.783213 0.764596 0.6635 0.75 0.783165 0.764655 0.6636 0.75 0.783118 0.764713 0.6637 0.75 0.78307 0.764769 0.6638 0.75 0.783022 0.764824 0.6639 0.75 0.782974 0.764878 0.664 0.75 0.782926 0.764931 0.6641 0.75 0.782877 0.764983 0.6642 0.75 0.782829 0.765034 0.6643 0.75 0.78278 0.765083 0.6644 0.75 0.782732 0.765131 0.6645 0.75 0.782683 0.765178 0.6646 0.75 0.782634 0.765224 0.6647 0.75 0.782585 0.765269 0.6648 0.75 0.782536 0.765312 0.6649 0.75 0.782487 0.765354 0.665 0.75 0.782438 0.765395 0.6651 0.75 0.782388 0.765435 0.6652 0.75 0.782339 0.765474 0.6653 0.75 0.782289 0.765511 0.6654 0.75 0.78224 0.765547 0.6655 0.75 0.78219 0.765582 0.6656 0.75 0.78214 0.765616 0.6657 0.75 0.78209 0.765649 0.6658 0.75 0.78204 0.76568 0.6659 0.75 0.78199 0.76571 0.666 0.75 0.781939 0.765739 0.6661 0.75 0.781889 0.765767 0.6662 0.75 0.781838 0.765793 0.6663 0.75 0.781788 0.765819 0.6664 0.75 0.781737 0.765843 0.6665 0.75 0.781686 0.765866 0.6666 0.75 0.781635 0.765887 0.6667 0.75 0.781584 0.765908 0.6668 0.75 0.781533 0.765927 0.6669 0.75 0.781481 0.765945 0.667 0.75 0.78143 0.765962 0.6671 0.75 0.781379 0.765977 0.6672 0.75 0.781327 0.765991 0.6673 0.75 0.781275 0.766004 0.6674 0.75 0.781224 0.766016 0.6675 0.75 0.781172 0.766027 0.6676 0.75 0.78112 0.766036 0.6677 0.75 0.781068 0.766044 0.6678 0.75 0.781015 0.766051 0.6679 0.75 0.780963 0.766057 0.668 0.75 0.780911 0.766062 0.6681 0.75 0.780858 0.766065 0.6682 0.75 0.780806 0.766067 0.6683 0.75 0.780753 0.766068 0.6684 0.75 0.7807 0.766068 0.6685 0.75 0.780647 0.766066 0.6686 0.75 0.780595 0.766063 0.6687 0.75 0.780541 0.766059 0.6688 0.75 0.780488 0.766054 0.6689 0.75 0.780435 0.766047 0.669 0.75 0.780382 0.76604 0.6691 0.75 0.780328 0.766031 0.6692 0.75 0.780275 0.766021 0.6693 0.75 0.780221 0.76601 0.6694 0.75 0.780167 0.765997 0.6695 0.75 0.780114 0.765983 0.6696 0.75 0.78006 0.765969 0.6697 0.75 0.780006 0.765952 0.6698 0.75 0.779952 0.765935 0.6699 0.75 0.779897 0.765917 0.67 0.75 0.779843 0.765897 0.6701 0.75 0.779789 0.765876 0.6702 0.75 0.779734 0.765854 0.6703 0.75 0.77968 0.765831 0.6704 0.75 0.779625 0.765807 0.6705 0.75 0.77957 0.765781 0.6706 0.75 0.779516 0.765754 0.6707 0.75 0.779461 0.765726 0.6708 0.75 0.779406 0.765697 0.6709 0.75 0.779351 0.765667 0.671 0.75 0.779295 0.765636 0.6711 0.75 0.77924 0.765603 0.6712 0.75 0.779185 0.765569 0.6713 0.75 0.779129 0.765534 0.6714 0.75 0.779074 0.765498 0.6715 0.75 0.779018 0.765461 0.6716 0.75 0.778963 0.765423 0.6717 0.75 0.778907 0.765383 0.6718 0.75 0.778851 0.765343 0.6719 0.75 0.778795 0.765301 0.672 0.75 0.778739 0.765258 0.6721 0.75 0.778683 0.765214 0.6722 0.75 0.778627 0.765169 0.6723 0.75 0.77857 0.765123 0.6724 0.75 0.778514 0.765076 0.6725 0.75 0.778457 0.765027 0.6726 0.75 0.778401 0.764978 0.6727 0.75 0.778344 0.764927 0.6728 0.75 0.778288 0.764875 0.6729 0.75 0.778231 0.764823 0.673 0.75 0.778174 0.764769 0.6731 0.75 0.778117 0.764714 0.6732 0.75 0.77806 0.764658 0.6733 0.75 0.778003 0.764601 0.6734 0.75 0.777946 0.764542 0.6735 0.75 0.777888 0.764483 0.6736 0.75 0.777831 0.764423 0.6737 0.75 0.777774 0.764362 0.6738 0.75 0.777716 0.764299 0.6739 0.75 0.777658 0.764236 0.674 0.75 0.777601 0.764172 0.6741 0.75 0.777543 0.764106 0.6742 0.75 0.777485 0.76404 0.6743 0.75 0.777427 0.763972 0.6744 0.75 0.777369 0.763904 0.6745 0.75 0.777311 0.763834 0.6746 0.75 0.777253 0.763764 0.6747 0.75 0.777195 0.763692 0.6748 0.75 0.777137 0.76362 0.6749 0.75 0.777078 0.763547 0.675 0.75 0.77702 0.763472 0.6751 0.75 0.776961 0.763397 0.6752 0.75 0.776903 0.763321 0.6753 0.75 0.776844 0.763243 0.6754 0.75 0.776785 0.763165 0.6755 0.75 0.776727 0.763086 0.6756 0.75 0.776668 0.763006 0.6757 0.75 0.776609 0.762925 0.6758 0.75 0.77655 0.762843 0.6759 0.75 0.776491 0.76276 0.676 0.75 0.776431 0.762677 0.6761 0.75 0.776372 0.762592 0.6762 0.75 0.776313 0.762507 0.6763 0.75 0.776254 0.76242 0.6764 0.75 0.776194 0.762333 0.6765 0.75 0.776135 0.762245 0.6766 0.75 0.776075 0.762156 0.6767 0.75 0.776015 0.762066 0.6768 0.75 0.775956 0.761976 0.6769 0.75 0.775896 0.761884 0.677 0.75 0.775836 0.761792 0.6771 0.75 0.775776 0.761699 0.6772 0.75 0.775716 0.761605 0.6773 0.75 0.775656 0.76151 0.6774 0.75 0.775596 0.761415 0.6775 0.75 0.775536 0.761318 0.6776 0.75 0.775475 0.761221 0.6777 0.75 0.775415 0.761123 0.6778 0.75 0.775355 0.761025 0.6779 0.75 0.775294 0.760925 0.678 0.75 0.775234 0.760825 0.6781 0.75 0.775173 0.760724 0.6782 0.75 0.775112 0.760623 0.6783 0.75 0.775052 0.76052 0.6784 0.75 0.774991 0.760417 0.6785 0.75 0.77493 0.760313 0.6786 0.75 0.774869 0.760209 0.6787 0.75 0.774808 0.760104 0.6788 0.75 0.774747 0.759998 0.6789 0.75 0.774686 0.759891 0.679 0.75 0.774625 0.759784 0.6791 0.75 0.774563 0.759676 0.6792 0.75 0.774502 0.759568 0.6793 0.75 0.774441 0.759459 0.6794 0.75 0.774379 0.759349 0.6795 0.75 0.774318 0.759238 0.6796 0.75 0.774256 0.759127 0.6797 0.75 0.774195 0.759016 0.6798 0.75 0.774133 0.758904 0.6799 0.75 0.774071 0.758791 0.68 0.75 0.77401 0.758678 0.6801 0.75 0.773948 0.758564 0.6802 0.75 0.773886 0.758449 0.6803 0.75 0.773824 0.758334 0.6804 0.75 0.773762 0.758218 0.6805 0.75 0.7737 0.758102 0.6806 0.75 0.773638 0.757986 0.6807 0.75 0.773576 0.757869 0.6808 0.75 0.773514 0.757751 0.6809 0.75 0.773451 0.757633 0.681 0.75 0.773389 0.757514 0.6811 0.75 0.773327 0.757395 0.6812 0.75 0.773264 0.757276 0.6813 0.75 0.773202 0.757156 0.6814 0.75 0.773139 0.757035 0.6815 0.75 0.773077 0.756914 0.6816 0.75 0.773014 0.756793 0.6817 0.75 0.772951 0.756671 0.6818 0.75 0.772888 0.756549 0.6819 0.75 0.772826 0.756426 0.682 0.75 0.772763 0.756304 0.6821 0.75 0.7727 0.75618 0.6822 0.75 0.772637 0.756057 0.6823 0.75 0.772574 0.755933 0.6824 0.75 0.772511 0.755808 0.6825 0.75 0.772448 0.755683 0.6826 0.75 0.772385 0.755558 0.6827 0.75 0.772321 0.755433 0.6828 0.75 0.772258 0.755307 0.6829 0.75 0.772195 0.755181 0.683 0.75 0.772131 0.755055 0.6831 0.75 0.772068 0.754929 0.6832 0.75 0.772005 0.754802 0.6833 0.75 0.771941 0.754675 0.6834 0.75 0.771878 0.754547 0.6835 0.75 0.771814 0.75442 0.6836 0.75 0.77175 0.754292 0.6837 0.75 0.771687 0.754164 0.6838 0.75 0.771623 0.754036 0.6839 0.75 0.771559 0.753907 0.684 0.75 0.771495 0.753779 0.6841 0.75 0.771431 0.75365 0.6842 0.75 0.771367 0.753521 0.6843 0.75 0.771304 0.753392 0.6844 0.75 0.77124 0.753262 0.6845 0.75 0.771176 0.753133 0.6846 0.75 0.771111 0.753003 0.6847 0.75 0.771047 0.752874 0.6848 0.75 0.770983 0.752744 0.6849 0.75 0.770919 0.752614 0.685 0.75 0.770855 0.752484 0.6851 0.75 0.77079 0.752354 0.6852 0.75 0.770726 0.752224 0.6853 0.75 0.770662 0.752094 0.6854 0.75 0.770597 0.751964 0.6855 0.75 0.770533 0.751833 0.6856 0.75 0.770468 0.751703 0.6857 0.75 0.770404 0.751573 0.6858 0.75 0.770339 0.751442 0.6859 0.75 0.770275 0.751312 0.686 0.75 0.77021 0.751182 0.6861 0.75 0.770145 0.751051 0.6862 0.75 0.77008 0.750921 0.6863 0.75 0.770016 0.750791 0.6864 0.75 0.769951 0.750661 0.6865 0.75 0.769886 0.750531 0.6866 0.75 0.769821 0.750401 0.6867 0.75 0.769756 0.750271 0.6868 0.75 0.769691 0.750141 0.6869 0.75 0.769626 0.750011 0.687 0.75 0.769561 0.749881 0.6871 0.75 0.769496 0.749752 0.6872 0.75 0.769431 0.749623 0.6873 0.75 0.769366 0.749493 0.6874 0.75 0.769301 0.749364 0.6875 0.75 0.769236 0.749235 0.6876 0.75 0.769171 0.749106 0.6877 0.75 0.769105 0.748978 0.6878 0.75 0.76904 0.748849 0.6879 0.75 0.768975 0.748721 0.688 0.75 0.768909 0.748593 0.6881 0.75 0.768844 0.748466 0.6882 0.75 0.768779 0.748338 0.6883 0.75 0.768713 0.748211 0.6884 0.75 0.768648 0.748084 0.6885 0.75 0.768582 0.747957 0.6886 0.75 0.768517 0.74783 0.6887 0.75 0.768451 0.747704 0.6888 0.75 0.768385 0.747578 0.6889 0.75 0.76832 0.747453 0.689 0.75 0.768254 0.747327 0.6891 0.75 0.768188 0.747202 0.6892 0.75 0.768123 0.747077 0.6893 0.75 0.768057 0.746953 0.6894 0.75 0.767991 0.746829 0.6895 0.75 0.767925 0.746705 0.6896 0.75 0.76786 0.746582 0.6897 0.75 0.767794 0.746459 0.6898 0.75 0.767728 0.746337 0.6899 0.75 0.767662 0.746215 0.69 0.75 0.767596 0.746093 0.6901 0.75 0.76753 0.745971 0.6902 0.75 0.767464 0.745851 0.6903 0.75 0.767398 0.74573 0.6904 0.75 0.767332 0.74561 0.6905 0.75 0.767266 0.74549 0.6906 0.75 0.7672 0.745371 0.6907 0.75 0.767134 0.745253 0.6908 0.75 0.767068 0.745134 0.6909 0.75 0.767002 0.745017 0.691 0.75 0.766936 0.744899 0.6911 0.75 0.76687 0.744783 0.6912 0.75 0.766803 0.744666 0.6913 0.75 0.766737 0.744551 0.6914 0.75 0.766671 0.744436 0.6915 0.75 0.766605 0.744321 0.6916 0.75 0.766538 0.744207 0.6917 0.75 0.766472 0.744093 0.6918 0.75 0.766406 0.74398 0.6919 0.75 0.766339 0.743868 0.692 0.75 0.766273 0.743756 0.6921 0.75 0.766207 0.743645 0.6922 0.75 0.76614 0.743534 0.6923 0.75 0.766074 0.743424 0.6924 0.75 0.766007 0.743315 0.6925 0.75 0.765941 0.743206 0.6926 0.75 0.765875 0.743098 0.6927 0.75 0.765808 0.74299 0.6928 0.75 0.765742 0.742883 0.6929 0.75 0.765675 0.742777 0.693 0.75 0.765608 0.742671 0.6931 0.75 0.765542 0.742566 0.6932 0.75 0.765475 0.742462 0.6933 0.75 0.765409 0.742358 0.6934 0.75 0.765342 0.742255 0.6935 0.75 0.765276 0.742153 0.6936 0.75 0.765209 0.742052 0.6937 0.75 0.765142 0.741951 0.6938 0.75 0.765076 0.741851 0.6939 0.75 0.765009 0.741752 0.694 0.75 0.764942 0.741653 0.6941 0.75 0.764876 0.741555 0.6942 0.75 0.764809 0.741458 0.6943 0.75 0.764742 0.741362 0.6944 0.75 0.764676 0.741266 0.6945 0.75 0.764609 0.741171 0.6946 0.75 0.764542 0.741077 0.6947 0.75 0.764475 0.740984 0.6948 0.75 0.764409 0.740891 0.6949 0.75 0.764342 0.7408 0.695 0.75 0.764275 0.740709 0.6951 0.75 0.764208 0.740619 0.6952 0.75 0.764142 0.74053 0.6953 0.75 0.764075 0.740441 0.6954 0.75 0.764008 0.740354 0.6955 0.75 0.763941 0.740267 0.6956 0.75 0.763874 0.740181 0.6957 0.75 0.763808 0.740096 0.6958 0.75 0.763741 0.740012 0.6959 0.75 0.763674 0.739928 0.696 0.75 0.763607 0.739846 0.6961 0.75 0.76354 0.739764 0.6962 0.75 0.763473 0.739684 0.6963 0.75 0.763406 0.739604 0.6964 0.75 0.76334 0.739525 0.6965 0.75 0.763273 0.739447 0.6966 0.75 0.763206 0.73937 0.6967 0.75 0.763139 0.739294 0.6968 0.75 0.763072 0.739218 0.6969 0.75 0.763005 0.739144 0.697 0.75 0.762938 0.73907 0.6971 0.75 0.762871 0.738998 0.6972 0.75 0.762805 0.738926 0.6973 0.75 0.762738 0.738856 0.6974 0.75 0.762671 0.738786 0.6975 0.75 0.762604 0.738717 0.6976 0.75 0.762537 0.738649 0.6977 0.75 0.76247 0.738582 0.6978 0.75 0.762403 0.738517 0.6979 0.75 0.762336 0.738452 0.698 0.75 0.762269 0.738388 0.6981 0.75 0.762202 0.738325 0.6982 0.75 0.762136 0.738263 0.6983 0.75 0.762069 0.738202 0.6984 0.75 0.762002 0.738142 0.6985 0.75 0.761935 0.738083 0.6986 0.75 0.761868 0.738025 0.6987 0.75 0.761801 0.737968 0.6988 0.75 0.761734 0.737912 0.6989 0.75 0.761667 0.737857 0.699 0.75 0.7616 0.737803 0.6991 0.75 0.761533 0.73775 0.6992 0.75 0.761467 0.737698 0.6993 0.75 0.7614 0.737647 0.6994 0.75 0.761333 0.737597 0.6995 0.75 0.761266 0.737548 0.6996 0.75 0.761199 0.7375 0.6997 0.75 0.761132 0.737453 0.6998 0.75 0.761065 0.737408 0.6999 0.75 0.760999 0.737363 0.7 0.75 0.760932 0.737319 0.7001 0.75 0.760865 0.737277 0.7002 0.75 0.760798 0.737235 0.7003 0.75 0.760731 0.737194 0.7004 0.75 0.760665 0.737155 0.7005 0.75 0.760598 0.737117 0.7006 0.75 0.760531 0.737079 0.7007 0.75 0.760464 0.737043 0.7008 0.75 0.760397 0.737008 0.7009 0.75 0.760331 0.736974 0.701 0.75 0.760264 0.736941 0.7011 0.75 0.760197 0.736909 0.7012 0.75 0.76013 0.736878 0.7013 0.75 0.760064 0.736848 0.7014 0.75 0.759997 0.736819 0.7015 0.75 0.75993 0.736791 0.7016 0.75 0.759864 0.736765 0.7017 0.75 0.759797 0.736739 0.7018 0.75 0.75973 0.736715 0.7019 0.75 0.759664 0.736691 0.702 0.75 0.759597 0.736669 0.7021 0.75 0.75953 0.736648 0.7022 0.75 0.759464 0.736628 0.7023 0.75 0.759397 0.736609 0.7024 0.75 0.75933 0.736591 0.7025 0.75 0.759264 0.736574 0.7026 0.75 0.759197 0.736559 0.7027 0.75 0.759131 0.736544 0.7028 0.75 0.759064 0.73653 0.7029 0.75 0.758998 0.736518 0.703 0.75 0.758931 0.736507 0.7031 0.75 0.758865 0.736496 0.7032 0.75 0.758798 0.736487 0.7033 0.75 0.758732 0.736479 0.7034 0.75 0.758665 0.736472 0.7035 0.75 0.758599 0.736466 0.7036 0.75 0.758533 0.736461 0.7037 0.75 0.758466 0.736458 0.7038 0.75 0.7584 0.736455 0.7039 0.75 0.758333 0.736454 0.704 0.75 0.758267 0.736453 0.7041 0.75 0.758201 0.736454 0.7042 0.75 0.758134 0.736456 0.7043 0.75 0.758068 0.736459 0.7044 0.75 0.758002 0.736463 0.7045 0.75 0.757936 0.736468 0.7046 0.75 0.757869 0.736474 0.7047 0.75 0.757803 0.736481 0.7048 0.75 0.757737 0.736489 0.7049 0.75 0.757671 0.736499 0.705 0.75 0.757605 0.736509 0.7051 0.75 0.757539 0.736521 0.7052 0.75 0.757473 0.736533 0.7053 0.75 0.757407 0.736547 0.7054 0.75 0.757341 0.736562 0.7055 0.75 0.757274 0.736578 0.7056 0.75 0.757209 0.736595 0.7057 0.75 0.757143 0.736613 0.7058 0.75 0.757077 0.736632 0.7059 0.75 0.757011 0.736652 0.706 0.75 0.756945 0.736673 0.7061 0.75 0.756879 0.736695 0.7062 0.75 0.756813 0.736719 0.7063 0.75 0.756747 0.736743 0.7064 0.75 0.756681 0.736768 0.7065 0.75 0.756616 0.736795 0.7066 0.75 0.75655 0.736823 0.7067 0.75 0.756484 0.736851 0.7068 0.75 0.756418 0.736881 0.7069 0.75 0.756353 0.736911 0.707 0.75 0.756287 0.736943 0.7071 0.75 0.756221 0.736976 0.7072 0.75 0.756156 0.73701 0.7073 0.75 0.75609 0.737044 0.7074 0.75 0.756025 0.73708 0.7075 0.75 0.755959 0.737117 0.7076 0.75 0.755894 0.737155 0.7077 0.75 0.755828 0.737194 0.7078 0.75 0.755763 0.737234 0.7079 0.75 0.755698 0.737275 0.708 0.75 0.755632 0.737316 0.7081 0.75 0.755567 0.737359 0.7082 0.75 0.755502 0.737403 0.7083 0.75 0.755436 0.737448 0.7084 0.75 0.755371 0.737494 0.7085 0.75 0.755306 0.737541 0.7086 0.75 0.755241 0.737589 0.7087 0.75 0.755176 0.737637 0.7088 0.75 0.75511 0.737687 0.7089 0.75 0.755045 0.737738 0.709 0.75 0.75498 0.73779 0.7091 0.75 0.754915 0.737842 0.7092 0.75 0.75485 0.737896 0.7093 0.75 0.754785 0.73795 0.7094 0.75 0.754721 0.738006 0.7095 0.75 0.754656 0.738062 0.7096 0.75 0.754591 0.73812 0.7097 0.75 0.754526 0.738178 0.7098 0.75 0.754461 0.738237 0.7099 0.75 0.754396 0.738297 0.71 0.75 0.754332 0.738358 0.7101 0.75 0.754267 0.73842 0.7102 0.75 0.754203 0.738483 0.7103 0.75 0.754138 0.738547 0.7104 0.75 0.754073 0.738611 0.7105 0.75 0.754009 0.738677 0.7106 0.75 0.753944 0.738743 0.7107 0.75 0.75388 0.73881 0.7108 0.75 0.753816 0.738878 0.7109 0.75 0.753751 0.738947 0.711 0.75 0.753687 0.739017 0.7111 0.75 0.753623 0.739088 0.7112 0.75 0.753558 0.739159 0.7113 0.75 0.753494 0.739231 0.7114 0.75 0.75343 0.739304 0.7115 0.75 0.753366 0.739378 0.7116 0.75 0.753302 0.739453 0.7117 0.75 0.753238 0.739529 0.7118 0.75 0.753174 0.739605 0.7119 0.75 0.75311 0.739682 0.712 0.75 0.753046 0.73976 0.7121 0.75 0.752982 0.739839 0.7122 0.75 0.752918 0.739918 0.7123 0.75 0.752854 0.739999 0.7124 0.75 0.75279 0.74008 0.7125 0.75 0.752727 0.740162 0.7126 0.75 0.752663 0.740244 0.7127 0.75 0.752599 0.740327 0.7128 0.75 0.752536 0.740411 0.7129 0.75 0.752472 0.740496 0.713 0.75 0.752409 0.740581 0.7131 0.75 0.752345 0.740668 0.7132 0.75 0.752282 0.740754 0.7133 0.75 0.752219 0.740842 0.7134 0.75 0.752155 0.74093 0.7135 0.75 0.752092 0.741019 0.7136 0.75 0.752029 0.741109 0.7137 0.75 0.751966 0.741199 0.7138 0.75 0.751902 0.74129 0.7139 0.75 0.751839 0.741381 0.714 0.75 0.751776 0.741474 0.7141 0.75 0.751713 0.741566 0.7142 0.75 0.75165 0.74166 0.7143 0.75 0.751587 0.741754 0.7144 0.75 0.751525 0.741849 0.7145 0.75 0.751462 0.741944 0.7146 0.75 0.751399 0.74204 0.7147 0.75 0.751336 0.742136 0.7148 0.75 0.751274 0.742233 0.7149 0.75 0.751211 0.742331 0.715 0.75 0.751148 0.742429 0.7151 0.75 0.751086 0.742528 0.7152 0.75 0.751023 0.742627 0.7153 0.75 0.750961 0.742727 0.7154 0.75 0.750899 0.742827 0.7155 0.75 0.750836 0.742928 0.7156 0.75 0.750774 0.743029 0.7157 0.75 0.750712 0.743131 0.7158 0.75 0.75065 0.743233 0.7159 0.75 0.750588 0.743336 0.716 0.75 0.750526 0.743439 0.7161 0.75 0.750464 0.743543 0.7162 0.75 0.750402 0.743647 0.7163 0.75 0.75034 0.743752 0.7164 0.75 0.750278 0.743857 0.7165 0.75 0.750216 0.743963 0.7166 0.75 0.750154 0.744069 0.7167 0.75 0.750093 0.744175 0.7168 0.75 0.750031 0.744282 0.7169 0.75 0.749969 0.744389 0.717 0.75 0.749908 0.744496 0.7171 0.75 0.749846 0.744604 0.7172 0.75 0.749785 0.744713 0.7173 0.75 0.749724 0.744821 0.7174 0.75 0.749662 0.74493 0.7175 0.75 0.749601 0.74504 0.7176 0.75 0.74954 0.745149 0.7177 0.75 0.749479 0.745259 0.7178 0.75 0.749418 0.74537 0.7179 0.75 0.749357 0.74548 0.718 0.75 0.749296 0.745591 0.7181 0.75 0.749235 0.745702 0.7182 0.75 0.749174 0.745814 0.7183 0.75 0.749113 0.745926 0.7184 0.75 0.749052 0.746038 0.7185 0.75 0.748992 0.74615 0.7186 0.75 0.748931 0.746262 0.7187 0.75 0.74887 0.746375 0.7188 0.75 0.74881 0.746488 0.7189 0.75 0.74875 0.746601 0.719 0.75 0.748689 0.746715 0.7191 0.75 0.748629 0.746828 0.7192 0.75 0.748569 0.746942 0.7193 0.75 0.748508 0.747056 0.7194 0.75 0.748448 0.74717 0.7195 0.75 0.748388 0.747284 0.7196 0.75 0.748328 0.747398 0.7197 0.75 0.748268 0.747513 0.7198 0.75 0.748208 0.747627 0.7199 0.75 0.748148 0.747742 0.72 0.75 0.748089 0.747857 0.7201 0.75 0.748029 0.747972 0.7202 0.75 0.747969 0.748087 0.7203 0.75 0.74791 0.748202 0.7204 0.75 0.74785 0.748317 0.7205 0.75 0.747791 0.748432 0.7206 0.75 0.747731 0.748548 0.7207 0.75 0.747672 0.748663 0.7208 0.75 0.747613 0.748778 0.7209 0.75 0.747553 0.748894 0.721 0.75 0.747494 0.749009 0.7211 0.75 0.747435 0.749124 0.7212 0.75 0.747376 0.74924 0.7213 0.75 0.747317 0.749355 0.7214 0.75 0.747258 0.74947 0.7215 0.75 0.747199 0.749586 0.7216 0.75 0.747141 0.749701 0.7217 0.75 0.747082 0.749816 0.7218 0.75 0.747023 0.749931 0.7219 0.75 0.746965 0.750046 0.722 0.75 0.746906 0.750161 0.7221 0.75 0.746848 0.750276 0.7222 0.75 0.74679 0.750391 0.7223 0.75 0.746731 0.750505 0.7224 0.75 0.746673 0.75062 0.7225 0.75 0.746615 0.750734 0.7226 0.75 0.746557 0.750848 0.7227 0.75 0.746499 0.750962 0.7228 0.75 0.746441 0.751076 0.7229 0.75 0.746383 0.75119 0.723 0.75 0.746325 0.751304 0.7231 0.75 0.746267 0.751417 0.7232 0.75 0.74621 0.75153 0.7233 0.75 0.746152 0.751643 0.7234 0.75 0.746095 0.751756 0.7235 0.75 0.746037 0.751868 0.7236 0.75 0.74598 0.751981 0.7237 0.75 0.745922 0.752093 0.7238 0.75 0.745865 0.752205 0.7239 0.75 0.745808 0.752316 0.724 0.75 0.745751 0.752427 0.7241 0.75 0.745694 0.752538 0.7242 0.75 0.745637 0.752649 0.7243 0.75 0.74558 0.752759 0.7244 0.75 0.745523 0.752869 0.7245 0.75 0.745466 0.752979 0.7246 0.75 0.74541 0.753089 0.7247 0.75 0.745353 0.753198 0.7248 0.75 0.745297 0.753306 0.7249 0.75 0.74524 0.753415 0.725 0.75 0.745184 0.753523 0.7251 0.75 0.745128 0.75363 0.7252 0.75 0.745071 0.753738 0.7253 0.75 0.745015 0.753845 0.7254 0.75 0.744959 0.753951 0.7255 0.75 0.744903 0.754057 0.7256 0.75 0.744847 0.754163 0.7257 0.75 0.744791 0.754268 0.7258 0.75 0.744735 0.754373 0.7259 0.75 0.74468 0.754477 0.726 0.75 0.744624 0.754581 0.7261 0.75 0.744569 0.754685 0.7262 0.75 0.744513 0.754788 0.7263 0.75 0.744458 0.75489 0.7264 0.75 0.744402 0.754992 0.7265 0.75 0.744347 0.755094 0.7266 0.75 0.744292 0.755195 0.7267 0.75 0.744237 0.755295 0.7268 0.75 0.744182 0.755395 0.7269 0.75 0.744127 0.755495 0.727 0.75 0.744072 0.755594 0.7271 0.75 0.744017 0.755692 0.7272 0.75 0.743963 0.75579 0.7273 0.75 0.743908 0.755887 0.7274 0.75 0.743853 0.755984 0.7275 0.75 0.743799 0.75608 0.7276 0.75 0.743744 0.756176 0.7277 0.75 0.74369 0.756271 0.7278 0.75 0.743636 0.756365 0.7279 0.75 0.743582 0.756459 0.728 0.75 0.743528 0.756552 0.7281 0.75 0.743474 0.756645 0.7282 0.75 0.74342 0.756737 0.7283 0.75 0.743366 0.756828 0.7284 0.75 0.743312 0.756919 0.7285 0.75 0.743259 0.757009 0.7286 0.75 0.743205 0.757098 0.7287 0.75 0.743151 0.757187 0.7288 0.75 0.743098 0.757275 0.7289 0.75 0.743045 0.757362 0.729 0.75 0.742991 0.757449 0.7291 0.75 0.742938 0.757535 0.7292 0.75 0.742885 0.75762 0.7293 0.75 0.742832 0.757704 0.7294 0.75 0.742779 0.757788 0.7295 0.75 0.742726 0.757871 0.7296 0.75 0.742674 0.757954 0.7297 0.75 0.742621 0.758035 0.7298 0.75 0.742568 0.758116 0.7299 0.75 0.742516 0.758196 0.73 0.75 0.742463 0.758276 0.7301 0.75 0.742411 0.758355 0.7302 0.75 0.742359 0.758432 0.7303 0.75 0.742307 0.75851 0.7304 0.75 0.742255 0.758586 0.7305 0.75 0.742203 0.758662 0.7306 0.75 0.742151 0.758736 0.7307 0.75 0.742099 0.75881 0.7308 0.75 0.742047 0.758883 0.7309 0.75 0.741995 0.758956 0.731 0.75 0.741944 0.759027 0.7311 0.75 0.741892 0.759098 0.7312 0.75 0.741841 0.759168 0.7313 0.75 0.74179 0.759237 0.7314 0.75 0.741738 0.759305 0.7315 0.75 0.741687 0.759373 0.7316 0.75 0.741636 0.759439 0.7317 0.75 0.741585 0.759505 0.7318 0.75 0.741534 0.75957 0.7319 0.75 0.741484 0.759634 0.732 0.75 0.741433 0.759697 0.7321 0.75 0.741382 0.759759 0.7322 0.75 0.741332 0.759821 0.7323 0.75 0.741281 0.759881 0.7324 0.75 0.741231 0.759941 0.7325 0.75 0.741181 0.759999 0.7326 0.75 0.741131 0.760057 0.7327 0.75 0.74108 0.760114 0.7328 0.75 0.74103 0.76017 0.7329 0.75 0.740981 0.760225 0.733 0.75 0.740931 0.760279 0.7331 0.75 0.740881 0.760333 0.7332 0.75 0.740831 0.760385 0.7333 0.75 0.740782 0.760436 0.7334 0.75 0.740732 0.760487 0.7335 0.75 0.740683 0.760536 0.7336 0.75 0.740634 0.760585 0.7337 0.75 0.740585 0.760633 0.7338 0.75 0.740536 0.76068 0.7339 0.75 0.740487 0.760725 0.734 0.75 0.740438 0.76077 0.7341 0.75 0.740389 0.760814 0.7342 0.75 0.74034 0.760857 0.7343 0.75 0.740292 0.760899 0.7344 0.75 0.740243 0.76094 0.7345 0.75 0.740195 0.76098 0.7346 0.75 0.740146 0.761019 0.7347 0.75 0.740098 0.761057 0.7348 0.75 0.74005 0.761094 0.7349 0.75 0.740002 0.76113 0.735 0.75 0.739954 0.761165 0.7351 0.75 0.739906 0.761199 0.7352 0.75 0.739858 0.761233 0.7353 0.75 0.739811 0.761265 0.7354 0.75 0.739763 0.761296 0.7355 0.75 0.739715 0.761326 0.7356 0.75 0.739668 0.761355 0.7357 0.75 0.739621 0.761383 0.7358 0.75 0.739574 0.761411 0.7359 0.75 0.739526 0.761437 0.736 0.75 0.739479 0.761462 0.7361 0.75 0.739432 0.761486 0.7362 0.75 0.739386 0.761509 0.7363 0.75 0.739339 0.761531 0.7364 0.75 0.739292 0.761552 0.7365 0.75 0.739246 0.761573 0.7366 0.75 0.739199 0.761592 0.7367 0.75 0.739153 0.76161 0.7368 0.75 0.739107 0.761627 0.7369 0.75 0.739061 0.761643 0.737 0.75 0.739014 0.761658 0.7371 0.75 0.738969 0.761672 0.7372 0.75 0.738923 0.761685 0.7373 0.75 0.738877 0.761697 0.7374 0.75 0.738831 0.761708 0.7375 0.75 0.738786 0.761718 0.7376 0.75 0.73874 0.761727 0.7377 0.75 0.738695 0.761734 0.7378 0.75 0.73865 0.761741 0.7379 0.75 0.738604 0.761747 0.738 0.75 0.738559 0.761752 0.7381 0.75 0.738514 0.761756 0.7382 0.75 0.738469 0.761758 0.7383 0.75 0.738425 0.76176 0.7384 0.75 0.73838 0.761761 0.7385 0.75 0.738335 0.761761 0.7386 0.75 0.738291 0.761759 0.7387 0.75 0.738247 0.761757 0.7388 0.75 0.738202 0.761753 0.7389 0.75 0.738158 0.761749 0.739 0.75 0.738114 0.761744 0.7391 0.75 0.73807 0.761737 0.7392 0.75 0.738026 0.76173 0.7393 0.75 0.737982 0.761721 0.7394 0.75 0.737939 0.761712 0.7395 0.75 0.737895 0.761701 0.7396 0.75 0.737852 0.76169 0.7397 0.75 0.737808 0.761677 0.7398 0.75 0.737765 0.761664 0.7399 0.75 0.737722 0.761649 0.74 0.75 0.737679 0.761634 0.7401 0.75 0.737636 0.761617 0.7402 0.75 0.737593 0.761599 0.7403 0.75 0.73755 0.761581 0.7404 0.75 0.737508 0.761561 0.7405 0.75 0.737465 0.761541 0.7406 0.75 0.737423 0.761519 0.7407 0.75 0.73738 0.761497 0.7408 0.75 0.737338 0.761473 0.7409 0.75 0.737296 0.761448 0.741 0.75 0.737254 0.761423 0.7411 0.75 0.737212 0.761396 0.7412 0.75 0.73717 0.761369 0.7413 0.75 0.737128 0.76134 0.7414 0.75 0.737087 0.761311 0.7415 0.75 0.737045 0.761281 0.7416 0.75 0.737004 0.761249 0.7417 0.75 0.736963 0.761217 0.7418 0.75 0.736921 0.761184 0.7419 0.75 0.73688 0.761149 0.742 0.75 0.736839 0.761114 0.7421 0.75 0.736798 0.761078 0.7422 0.75 0.736758 0.761041 0.7423 0.75 0.736717 0.761003 0.7424 0.75 0.736676 0.760964 0.7425 0.75 0.736636 0.760924 0.7426 0.75 0.736596 0.760883 0.7427 0.75 0.736555 0.760841 0.7428 0.75 0.736515 0.760798 0.7429 0.75 0.736475 0.760755 0.743 0.75 0.736435 0.76071 0.7431 0.75 0.736395 0.760664 0.7432 0.75 0.736356 0.760618 0.7433 0.75 0.736316 0.760571 0.7434 0.75 0.736277 0.760522 0.7435 0.75 0.736237 0.760473 0.7436 0.75 0.736198 0.760423 0.7437 0.75 0.736159 0.760372 0.7438 0.75 0.73612 0.760321 0.7439 0.75 0.736081 0.760268 0.744 0.75 0.736042 0.760215 0.7441 0.75 0.736003 0.76016 0.7442 0.75 0.735964 0.760105 0.7443 0.75 0.735926 0.760049 0.7444 0.75 0.735887 0.759992 0.7445 0.75 0.735849 0.759934 0.7446 0.75 0.735811 0.759875 0.7447 0.75 0.735773 0.759816 0.7448 0.75 0.735735 0.759756 0.7449 0.75 0.735697 0.759694 0.745 0.75 0.735659 0.759632 0.7451 0.75 0.735622 0.75957 0.7452 0.75 0.735584 0.759506 0.7453 0.75 0.735547 0.759442 0.7454 0.75 0.735509 0.759376 0.7455 0.75 0.735472 0.759311 0.7456 0.75 0.735435 0.759244 0.7457 0.75 0.735398 0.759176 0.7458 0.75 0.735361 0.759108 0.7459 0.75 0.735324 0.759039 0.746 0.75 0.735287 0.758969 0.7461 0.75 0.735251 0.758898 0.7462 0.75 0.735214 0.758827 0.7463 0.75 0.735178 0.758755 0.7464 0.75 0.735142 0.758682 0.7465 0.75 0.735106 0.758609 0.7466 0.75 0.73507 0.758535 0.7467 0.75 0.735034 0.75846 0.7468 0.75 0.734998 0.758384 0.7469 0.75 0.734962 0.758308 0.747 0.75 0.734927 0.758231 0.7471 0.75 0.734891 0.758153 0.7472 0.75 0.734856 0.758074 0.7473 0.75 0.734821 0.757995 0.7474 0.75 0.734786 0.757916 0.7475 0.75 0.734751 0.757835 0.7476 0.75 0.734716 0.757754 0.7477 0.75 0.734681 0.757672 0.7478 0.75 0.734646 0.75759 0.7479 0.75 0.734612 0.757507 0.748 0.75 0.734577 0.757424 0.7481 0.75 0.734543 0.757339 0.7482 0.75 0.734509 0.757255 0.7483 0.75 0.734475 0.757169 0.7484 0.75 0.734441 0.757083 0.7485 0.75 0.734407 0.756997 0.7486 0.75 0.734373 0.75691 0.7487 0.75 0.734339 0.756822 0.7488 0.75 0.734306 0.756734 0.7489 0.75 0.734272 0.756645 0.749 0.75 0.734239 0.756556 0.7491 0.75 0.734206 0.756466 0.7492 0.75 0.734173 0.756376 0.7493 0.75 0.73414 0.756285 0.7494 0.75 0.734107 0.756193 0.7495 0.75 0.734074 0.756101 0.7496 0.75 0.734042 0.756009 0.7497 0.75 0.734009 0.755916 0.7498 0.75 0.733977 0.755823 0.7499 0.75 0.733944 0.755729 0.75 0.75 0.733912 0.755635 0.7501 0.75 0.73388 0.75554 0.7502 0.75 0.733848 0.755445 0.7503 0.75 0.733816 0.755349 0.7504 0.75 0.733785 0.755253 0.7505 0.75 0.733753 0.755157 0.7506 0.75 0.733722 0.75506 0.7507 0.75 0.73369 0.754963 0.7508 0.75 0.733659 0.754865 0.7509 0.75 0.733628 0.754767 0.751 0.75 0.733597 0.754669 0.7511 0.75 0.733566 0.75457 0.7512 0.75 0.733535 0.754471 0.7513 0.75 0.733505 0.754372 0.7514 0.75 0.733474 0.754272 0.7515 0.75 0.733444 0.754172 0.7516 0.75 0.733413 0.754072 0.7517 0.75 0.733383 0.753971 0.7518 0.75 0.733353 0.75387 0.7519 0.75 0.733323 0.753769 0.752 0.75 0.733293 0.753667 0.7521 0.75 0.733263 0.753565 0.7522 0.75 0.733234 0.753463 0.7523 0.75 0.733204 0.753361 0.7524 0.75 0.733175 0.753258 0.7525 0.75 0.733146 0.753156 0.7526 0.75 0.733117 0.753053 0.7527 0.75 0.733087 0.752949 0.7528 0.75 0.733059 0.752846 0.7529 0.75 0.73303 0.752742 0.753 0.75 0.733001 0.752638 0.7531 0.75 0.732973 0.752534 0.7532 0.75 0.732944 0.75243 0.7533 0.75 0.732916 0.752326 0.7534 0.75 0.732888 0.752221 0.7535 0.75 0.732859 0.752117 0.7536 0.75 0.732831 0.752012 0.7537 0.75 0.732804 0.751907 0.7538 0.75 0.732776 0.751802 0.7539 0.75 0.732748 0.751697 0.754 0.75 0.732721 0.751592 0.7541 0.75 0.732693 0.751487 0.7542 0.75 0.732666 0.751381 0.7543 0.75 0.732639 0.751276 0.7544 0.75 0.732612 0.751171 0.7545 0.75 0.732585 0.751065 0.7546 0.75 0.732558 0.75096 0.7547 0.75 0.732532 0.750854 0.7548 0.75 0.732505 0.750748 0.7549 0.75 0.732479 0.750643 0.755 0.75 0.732452 0.750537 0.7551 0.75 0.732426 0.750432 0.7552 0.75 0.7324 0.750326 0.7553 0.75 0.732374 0.750221 0.7554 0.75 0.732348 0.750115 0.7555 0.75 0.732323 0.75001 0.7556 0.75 0.732297 0.749904 0.7557 0.75 0.732271 0.749799 0.7558 0.75 0.732246 0.749694 0.7559 0.75 0.732221 0.749589 0.756 0.75 0.732196 0.749484 0.7561 0.75 0.732171 0.749379 0.7562 0.75 0.732146 0.749274 0.7563 0.75 0.732121 0.74917 0.7564 0.75 0.732096 0.749065 0.7565 0.75 0.732072 0.748961 0.7566 0.75 0.732048 0.748856 0.7567 0.75 0.732023 0.748752 0.7568 0.75 0.731999 0.748649 0.7569 0.75 0.731975 0.748545 0.757 0.75 0.731951 0.748441 0.7571 0.75 0.731927 0.748338 0.7572 0.75 0.731904 0.748235 0.7573 0.75 0.73188 0.748132 0.7574 0.75 0.731857 0.748029 0.7575 0.75 0.731833 0.747927 0.7576 0.75 0.73181 0.747825 0.7577 0.75 0.731787 0.747723 0.7578 0.75 0.731764 0.747621 0.7579 0.75 0.731741 0.74752 0.758 0.75 0.731719 0.747419 0.7581 0.75 0.731696 0.747318 0.7582 0.75 0.731674 0.747218 0.7583 0.75 0.731651 0.747118 0.7584 0.75 0.731629 0.747018 0.7585 0.75 0.731607 0.746918 0.7586 0.75 0.731585 0.746819 0.7587 0.75 0.731563 0.74672 0.7588 0.75 0.731541 0.746622 0.7589 0.75 0.73152 0.746524 0.759 0.75 0.731498 0.746426 0.7591 0.75 0.731477 0.746329 0.7592 0.75 0.731456 0.746232 0.7593 0.75 0.731434 0.746135 0.7594 0.75 0.731413 0.746039 0.7595 0.75 0.731393 0.745943 0.7596 0.75 0.731372 0.745848 0.7597 0.75 0.731351 0.745753 0.7598 0.75 0.731331 0.745659 0.7599 0.75 0.73131 0.745565 0.76 0.75 0.73129 0.745471 0.7601 0.75 0.73127 0.745378 0.7602 0.75 0.73125 0.745286 0.7603 0.75 0.73123 0.745194 0.7604 0.75 0.73121 0.745102 0.7605 0.75 0.73119 0.745011 0.7606 0.75 0.731171 0.744921 0.7607 0.75 0.731151 0.744831 0.7608 0.75 0.731132 0.744741 0.7609 0.75 0.731113 0.744652 0.761 0.75 0.731094 0.744564 0.7611 0.75 0.731075 0.744476 0.7612 0.75 0.731056 0.744389 0.7613 0.75 0.731037 0.744302 0.7614 0.75 0.731019 0.744216 0.7615 0.75 0.731 0.74413 0.7616 0.75 0.730982 0.744045 0.7617 0.75 0.730964 0.743961 0.7618 0.75 0.730946 0.743877 0.7619 0.75 0.730928 0.743794 0.762 0.75 0.73091 0.743711 0.7621 0.75 0.730892 0.743629 0.7622 0.75 0.730875 0.743548 0.7623 0.75 0.730857 0.743467 0.7624 0.75 0.73084 0.743387 0.7625 0.75 0.730823 0.743308 0.7626 0.75 0.730806 0.743229 0.7627 0.75 0.730789 0.743151 0.7628 0.75 0.730772 0.743074 0.7629 0.75 0.730755 0.742997 0.763 0.75 0.730739 0.742922 0.7631 0.75 0.730722 0.742846 0.7632 0.75 0.730706 0.742772 0.7633 0.75 0.73069 0.742698 0.7634 0.75 0.730673 0.742625 0.7635 0.75 0.730657 0.742553 0.7636 0.75 0.730642 0.742481 0.7637 0.75 0.730626 0.74241 0.7638 0.75 0.73061 0.74234 0.7639 0.75 0.730595 0.74227 0.764 0.75 0.730579 0.742202 0.7641 0.75 0.730564 0.742134 0.7642 0.75 0.730549 0.742067 0.7643 0.75 0.730534 0.742001 0.7644 0.75 0.730519 0.741935 0.7645 0.75 0.730504 0.74187 0.7646 0.75 0.73049 0.741806 0.7647 0.75 0.730475 0.741743 0.7648 0.75 0.730461 0.741681 0.7649 0.75 0.730447 0.741619 0.765 0.75 0.730432 0.741558 0.7651 0.75 0.730418 0.741499 0.7652 0.75 0.730405 0.741439 0.7653 0.75 0.730391 0.741381 0.7654 0.75 0.730377 0.741324 0.7655 0.75 0.730364 0.741267 0.7656 0.75 0.73035 0.741212 0.7657 0.75 0.730337 0.741157 0.7658 0.75 0.730324 0.741103 0.7659 0.75 0.730311 0.741049 0.766 0.75 0.730298 0.740997 0.7661 0.75 0.730285 0.740946 0.7662 0.75 0.730272 0.740895 0.7663 0.75 0.73026 0.740846 0.7664 0.75 0.730248 0.740797 0.7665 0.75 0.730235 0.740749 0.7666 0.75 0.730223 0.740702 0.7667 0.75 0.730211 0.740656 0.7668 0.75 0.730199 0.740611 0.7669 0.75 0.730187 0.740567 0.767 0.75 0.730176 0.740523 0.7671 0.75 0.730164 0.740481 0.7672 0.75 0.730153 0.740439 0.7673 0.75 0.730141 0.740399 0.7674 0.75 0.73013 0.740359 0.7675 0.75 0.730119 0.74032 0.7676 0.75 0.730108 0.740282 0.7677 0.75 0.730098 0.740245 0.7678 0.75 0.730087 0.74021 0.7679 0.75 0.730076 0.740174 0.768 0.75 0.730066 0.74014 0.7681 0.75 0.730056 0.740107 0.7682 0.75 0.730045 0.740075 0.7683 0.75 0.730035 0.740044 0.7684 0.75 0.730025 0.740014 0.7685 0.75 0.730016 0.739984 0.7686 0.75 0.730006 0.739956 0.7687 0.75 0.729996 0.739929 0.7688 0.75 0.729987 0.739902 0.7689 0.75 0.729978 0.739877 0.769 0.75 0.729968 0.739852 0.7691 0.75 0.729959 0.739829 0.7692 0.75 0.72995 0.739806 0.7693 0.75 0.729942 0.739785 0.7694 0.75 0.729933 0.739764 0.7695 0.75 0.729924 0.739745 0.7696 0.75 0.729916 0.739726 0.7697 0.75 0.729908 0.739709 0.7698 0.75 0.729899 0.739692 0.7699 0.75 0.729891 0.739676 0.77 0.75 0.729883 0.739662 0.7701 0.75 0.729875 0.739648 0.7702 0.75 0.729868 0.739635 0.7703 0.75 0.72986 0.739624 0.7704 0.75 0.729853 0.739613 0.7705 0.75 0.729845 0.739603 0.7706 0.75 0.729838 0.739594 0.7707 0.75 0.729831 0.739587 0.7708 0.75 0.729824 0.73958 0.7709 0.75 0.729817 0.739574 0.771 0.75 0.729811 0.73957 0.7711 0.75 0.729804 0.739566 0.7712 0.75 0.729797 0.739563 0.7713 0.75 0.729791 0.739561 0.7714 0.75 0.729785 0.739561 0.7715 0.75 0.729779 0.739561 0.7716 0.75 0.729773 0.739562 0.7717 0.75 0.729767 0.739564 0.7718 0.75 0.729761 0.739567 0.7719 0.75 0.729756 0.739572 0.772 0.75 0.72975 0.739577 0.7721 0.75 0.729745 0.739583 0.7722 0.75 0.729739 0.73959 0.7723 0.75 0.729734 0.739598 0.7724 0.75 0.729729 0.739608 0.7725 0.75 0.729724 0.739618 0.7726 0.75 0.72972 0.739629 0.7727 0.75 0.729715 0.739641 0.7728 0.75 0.729711 0.739654 0.7729 0.75 0.729706 0.739668 0.773 0.75 0.729702 0.739683 0.7731 0.75 0.729698 0.739699 0.7732 0.75 0.729694 0.739716 0.7733 0.75 0.72969 0.739734 0.7734 0.75 0.729686 0.739753 0.7735 0.75 0.729682 0.739773 0.7736 0.75 0.729679 0.739794 0.7737 0.75 0.729676 0.739816 0.7738 0.75 0.729672 0.739839 0.7739 0.75 0.729669 0.739863 0.774 0.75 0.729666 0.739888 0.7741 0.75 0.729663 0.739913 0.7742 0.75 0.72966 0.73994 0.7743 0.75 0.729658 0.739968 0.7744 0.75 0.729655 0.739996 0.7745 0.75 0.729653 0.740026 0.7746 0.75 0.72965 0.740056 0.7747 0.75 0.729648 0.740088 0.7748 0.75 0.729646 0.74012 0.7749 0.75 0.729644 0.740154 0.775 0.75 0.729642 0.740188 0.7751 0.75 0.729641 0.740223 0.7752 0.75 0.729639 0.740259 0.7753 0.75 0.729638 0.740296 0.7754 0.75 0.729636 0.740334 0.7755 0.75 0.729635 0.740373 0.7756 0.75 0.729634 0.740413 0.7757 0.75 0.729633 0.740453 0.7758 0.75 0.729632 0.740495 0.7759 0.75 0.729632 0.740537 0.776 0.75 0.729631 0.74058 0.7761 0.75 0.729631 0.740625 0.7762 0.75 0.72963 0.74067 0.7763 0.75 0.72963 0.740716 0.7764 0.75 0.72963 0.740763 0.7765 0.75 0.72963 0.74081 0.7766 0.75 0.72963 0.740859 0.7767 0.75 0.72963 0.740908 0.7768 0.75 0.729631 0.740959 0.7769 0.75 0.729631 0.74101 0.777 0.75 0.729632 0.741062 0.7771 0.75 0.729632 0.741115 0.7772 0.75 0.729633 0.741168 0.7773 0.75 0.729634 0.741223 0.7774 0.75 0.729635 0.741278 0.7775 0.75 0.729637 0.741335 0.7776 0.75 0.729638 0.741391 0.7777 0.75 0.729639 0.741449 0.7778 0.75 0.729641 0.741508 0.7779 0.75 0.729643 0.741567 0.778 0.75 0.729644 0.741627 0.7781 0.75 0.729646 0.741688 0.7782 0.75 0.729648 0.74175 0.7783 0.75 0.729651 0.741813 0.7784 0.75 0.729653 0.741876 0.7785 0.75 0.729655 0.74194 0.7786 0.75 0.729658 0.742005 0.7787 0.75 0.729661 0.74207 0.7788 0.75 0.729663 0.742136 0.7789 0.75 0.729666 0.742203 0.779 0.75 0.729669 0.742271 0.7791 0.75 0.729672 0.74234 0.7792 0.75 0.729676 0.742409 0.7793 0.75 0.729679 0.742479 0.7794 0.75 0.729683 0.742549 0.7795 0.75 0.729686 0.74262 0.7796 0.75 0.72969 0.742692 0.7797 0.75 0.729694 0.742765 0.7798 0.75 0.729698 0.742838 0.7799 0.75 0.729702 0.742912 0.78 0.75 0.729706 0.742987 0.7801 0.75 0.72971 0.743062 0.7802 0.75 0.729715 0.743138 0.7803 0.75 0.729719 0.743214 0.7804 0.75 0.729724 0.743292 0.7805 0.75 0.729729 0.743369 0.7806 0.75 0.729734 0.743448 0.7807 0.75 0.729739 0.743527 0.7808 0.75 0.729744 0.743606 0.7809 0.75 0.729749 0.743686 0.781 0.75 0.729755 0.743767 0.7811 0.75 0.72976 0.743849 0.7812 0.75 0.729766 0.74393 0.7813 0.75 0.729772 0.744013 0.7814 0.75 0.729778 0.744096 0.7815 0.75 0.729784 0.744179 0.7816 0.75 0.72979 0.744263 0.7817 0.75 0.729796 0.744348 0.7818 0.75 0.729802 0.744433 0.7819 0.75 0.729809 0.744519 0.782 0.75 0.729815 0.744605 0.7821 0.75 0.729822 0.744691 0.7822 0.75 0.729829 0.744779 0.7823 0.75 0.729836 0.744866 0.7824 0.75 0.729843 0.744954 0.7825 0.75 0.72985 0.745043 0.7826 0.75 0.729857 0.745132 0.7827 0.75 0.729865 0.745221 0.7828 0.75 0.729872 0.745311 0.7829 0.75 0.72988 0.745401 0.783 0.75 0.729887 0.745491 0.7831 0.75 0.729895 0.745582 0.7832 0.75 0.729903 0.745674 0.7833 0.75 0.729911 0.745766 0.7834 0.75 0.72992 0.745858 0.7835 0.75 0.729928 0.74595 0.7836 0.75 0.729936 0.746043 0.7837 0.75 0.729945 0.746136 0.7838 0.75 0.729954 0.74623 0.7839 0.75 0.729962 0.746324 0.784 0.75 0.729971 0.746418 0.7841 0.75 0.72998 0.746513 0.7842 0.75 0.729989 0.746607 0.7843 0.75 0.729999 0.746703 0.7844 0.75 0.730008 0.746798 0.7845 0.75 0.730018 0.746894 0.7846 0.75 0.730027 0.746989 0.7847 0.75 0.730037 0.747086 0.7848 0.75 0.730047 0.747182 0.7849 0.75 0.730057 0.747279 0.785 0.75 0.730067 0.747376 0.7851 0.75 0.730077 0.747473 0.7852 0.75 0.730087 0.74757 0.7853 0.75 0.730098 0.747667 0.7854 0.75 0.730108 0.747765 0.7855 0.75 0.730119 0.747863 0.7856 0.75 0.730129 0.747961 0.7857 0.75 0.73014 0.748059 0.7858 0.75 0.730151 0.748158 0.7859 0.75 0.730162 0.748256 0.786 0.75 0.730174 0.748355 0.7861 0.75 0.730185 0.748453 0.7862 0.75 0.730196 0.748552 0.7863 0.75 0.730208 0.748651 0.7864 0.75 0.73022 0.74875 0.7865 0.75 0.730231 0.748849 0.7866 0.75 0.730243 0.748948 0.7867 0.75 0.730255 0.749047 0.7868 0.75 0.730267 0.749147 0.7869 0.75 0.73028 0.749246 0.787 0.75 0.730292 0.749345 0.7871 0.75 0.730304 0.749445 0.7872 0.75 0.730317 0.749544 0.7873 0.75 0.73033 0.749643 0.7874 0.75 0.730342 0.749743 0.7875 0.75 0.730355 0.749842 0.7876 0.75 0.730368 0.749941 0.7877 0.75 0.730381 0.75004 0.7878 0.75 0.730395 0.75014 0.7879 0.75 0.730408 0.750239 0.788 0.75 0.730421 0.750338 0.7881 0.75 0.730435 0.750437 0.7882 0.75 0.730449 0.750536 0.7883 0.75 0.730462 0.750634 0.7884 0.75 0.730476 0.750733 0.7885 0.75 0.73049 0.750832 0.7886 0.75 0.730504 0.75093 0.7887 0.75 0.730519 0.751028 0.7888 0.75 0.730533 0.751126 0.7889 0.75 0.730547 0.751224 0.789 0.75 0.730562 0.751322 0.7891 0.75 0.730577 0.75142 0.7892 0.75 0.730591 0.751517 0.7893 0.75 0.730606 0.751614 0.7894 0.75 0.730621 0.751711 0.7895 0.75 0.730636 0.751808 0.7896 0.75 0.730652 0.751905 0.7897 0.75 0.730667 0.752001 0.7898 0.75 0.730682 0.752097 0.7899 0.75 0.730698 0.752193 0.79 0.75 0.730713 0.752289 0.7901 0.75 0.730729 0.752384 0.7902 0.75 0.730745 0.752479 0.7903 0.75 0.730761 0.752574 0.7904 0.75 0.730777 0.752668 0.7905 0.75 0.730793 0.752762 0.7906 0.75 0.73081 0.752856 0.7907 0.75 0.730826 0.752949 0.7908 0.75 0.730843 0.753042 0.7909 0.75 0.730859 0.753135 0.791 0.75 0.730876 0.753227 0.7911 0.75 0.730893 0.753319 0.7912 0.75 0.73091 0.753411 0.7913 0.75 0.730927 0.753502 0.7914 0.75 0.730944 0.753593 0.7915 0.75 0.730961 0.753684 0.7916 0.75 0.730979 0.753774 0.7917 0.75 0.730996 0.753863 0.7918 0.75 0.731014 0.753952 0.7919 0.75 0.731031 0.754041 0.792 0.75 0.731049 0.754129 0.7921 0.75 0.731067 0.754217 0.7922 0.75 0.731085 0.754304 0.7923 0.75 0.731103 0.754391 0.7924 0.75 0.731121 0.754477 0.7925 0.75 0.73114 0.754563 0.7926 0.75 0.731158 0.754649 0.7927 0.75 0.731177 0.754734 0.7928 0.75 0.731195 0.754818 0.7929 0.75 0.731214 0.754902 0.793 0.75 0.731233 0.754985 0.7931 0.75 0.731252 0.755068 0.7932 0.75 0.731271 0.75515 0.7933 0.75 0.73129 0.755231 0.7934 0.75 0.731309 0.755312 0.7935 0.75 0.731329 0.755393 0.7936 0.75 0.731348 0.755473 0.7937 0.75 0.731368 0.755552 0.7938 0.75 0.731387 0.75563 0.7939 0.75 0.731407 0.755708 0.794 0.75 0.731427 0.755786 0.7941 0.75 0.731447 0.755863 0.7942 0.75 0.731467 0.755939 0.7943 0.75 0.731487 0.756014 0.7944 0.75 0.731508 0.756089 0.7945 0.75 0.731528 0.756163 0.7946 0.75 0.731549 0.756237 0.7947 0.75 0.731569 0.756309 0.7948 0.75 0.73159 0.756382 0.7949 0.75 0.731611 0.756453 0.795 0.75 0.731632 0.756524 0.7951 0.75 0.731653 0.756594 0.7952 0.75 0.731674 0.756663 0.7953 0.75 0.731695 0.756732 0.7954 0.75 0.731716 0.7568 0.7955 0.75 0.731738 0.756867 0.7956 0.75 0.731759 0.756933 0.7957 0.75 0.731781 0.756999 0.7958 0.75 0.731803 0.757064 0.7959 0.75 0.731824 0.757128 0.796 0.75 0.731846 0.757191 0.7961 0.75 0.731868 0.757254 0.7962 0.75 0.731891 0.757316 0.7963 0.75 0.731913 0.757377 0.7964 0.75 0.731935 0.757437 0.7965 0.75 0.731957 0.757497 0.7966 0.75 0.73198 0.757555 0.7967 0.75 0.732003 0.757613 0.7968 0.75 0.732025 0.75767 0.7969 0.75 0.732048 0.757727 0.797 0.75 0.732071 0.757782 0.7971 0.75 0.732094 0.757836 0.7972 0.75 0.732117 0.75789 0.7973 0.75 0.73214 0.757943 0.7974 0.75 0.732164 0.757995 0.7975 0.75 0.732187 0.758046 0.7976 0.75 0.732211 0.758097 0.7977 0.75 0.732234 0.758146 0.7978 0.75 0.732258 0.758195 0.7979 0.75 0.732282 0.758242 0.798 0.75 0.732306 0.758289 0.7981 0.75 0.73233 0.758335 0.7982 0.75 0.732354 0.75838 0.7983 0.75 0.732378 0.758424 0.7984 0.75 0.732402 0.758468 0.7985 0.75 0.732426 0.75851 0.7986 0.75 0.732451 0.758552 0.7987 0.75 0.732475 0.758592 0.7988 0.75 0.7325 0.758632 0.7989 0.75 0.732525 0.75867 0.799 0.75 0.73255 0.758708 0.7991 0.75 0.732575 0.758745 0.7992 0.75 0.7326 0.758781 0.7993 0.75 0.732625 0.758816 0.7994 0.75 0.73265 0.75885 0.7995 0.75 0.732675 0.758883 0.7996 0.75 0.732701 0.758915 0.7997 0.75 0.732726 0.758947 0.7998 0.75 0.732752 0.758977 0.7999 0.75 0.732778 0.759006 0.8 0.75 0.732803 0.759034 0.8001 0.75 0.732829 0.759062 0.8002 0.75 0.732855 0.759088 0.8003 0.75 0.732881 0.759114 0.8004 0.75 0.732907 0.759138 0.8005 0.75 0.732934 0.759162 0.8006 0.75 0.73296 0.759184 0.8007 0.75 0.732987 0.759206 0.8008 0.75 0.733013 0.759227 0.8009 0.75 0.73304 0.759246 0.801 0.75 0.733066 0.759265 0.8011 0.75 0.733093 0.759282 0.8012 0.75 0.73312 0.759299 0.8013 0.75 0.733147 0.759315 0.8014 0.75 0.733174 0.759329 0.8015 0.75 0.733201 0.759343 0.8016 0.75 0.733229 0.759356 0.8017 0.75 0.733256 0.759368 0.8018 0.75 0.733283 0.759378 0.8019 0.75 0.733311 0.759388 0.802 0.75 0.733338 0.759397 0.8021 0.75 0.733366 0.759404 0.8022 0.75 0.733394 0.759411 0.8023 0.75 0.733422 0.759417 0.8024 0.75 0.73345 0.759422 0.8025 0.75 0.733478 0.759425 0.8026 0.75 0.733506 0.759428 0.8027 0.75 0.733534 0.75943 0.8028 0.75 0.733563 0.759431 0.8029 0.75 0.733591 0.75943 0.803 0.75 0.733619 0.759429 0.8031 0.75 0.733648 0.759427 0.8032 0.75 0.733677 0.759423 0.8033 0.75 0.733705 0.759419 0.8034 0.75 0.733734 0.759414 0.8035 0.75 0.733763 0.759408 0.8036 0.75 0.733792 0.7594 0.8037 0.75 0.733821 0.759392 0.8038 0.75 0.733851 0.759383 0.8039 0.75 0.73388 0.759372 0.804 0.75 0.733909 0.759361 0.8041 0.75 0.733939 0.759349 0.8042 0.75 0.733968 0.759336 0.8043 0.75 0.733998 0.759322 0.8044 0.75 0.734027 0.759306 0.8045 0.75 0.734057 0.75929 0.8046 0.75 0.734087 0.759273 0.8047 0.75 0.734117 0.759255 0.8048 0.75 0.734147 0.759236 0.8049 0.75 0.734177 0.759215 0.805 0.75 0.734207 0.759194 0.8051 0.75 0.734238 0.759172 0.8052 0.75 0.734268 0.759149 0.8053 0.75 0.734299 0.759125 0.8054 0.75 0.734329 0.7591 0.8055 0.75 0.73436 0.759074 0.8056 0.75 0.73439 0.759047 0.8057 0.75 0.734421 0.759019 0.8058 0.75 0.734452 0.75899 0.8059 0.75 0.734483 0.758961 0.806 0.75 0.734514 0.75893 0.8061 0.75 0.734545 0.758898 0.8062 0.75 0.734576 0.758866 0.8063 0.75 0.734608 0.758832 0.8064 0.75 0.734639 0.758798 0.8065 0.75 0.73467 0.758762 0.8066 0.75 0.734702 0.758726 0.8067 0.75 0.734733 0.758688 0.8068 0.75 0.734765 0.75865 0.8069 0.75 0.734797 0.758611 0.807 0.75 0.734829 0.758571 0.8071 0.75 0.734861 0.75853 0.8072 0.75 0.734893 0.758488 0.8073 0.75 0.734925 0.758445 0.8074 0.75 0.734957 0.758402 0.8075 0.75 0.734989 0.758357 0.8076 0.75 0.735021 0.758312 0.8077 0.75 0.735054 0.758266 0.8078 0.75 0.735086 0.758218 0.8079 0.75 0.735119 0.75817 0.808 0.75 0.735151 0.758121 0.8081 0.75 0.735184 0.758072 0.8082 0.75 0.735217 0.758021 0.8083 0.75 0.73525 0.75797 0.8084 0.75 0.735283 0.757917 0.8085 0.75 0.735316 0.757864 0.8086 0.75 0.735349 0.75781 0.8087 0.75 0.735382 0.757755 0.8088 0.75 0.735415 0.7577 0.8089 0.75 0.735448 0.757643 0.809 0.75 0.735482 0.757586 0.8091 0.75 0.735515 0.757528 0.8092 0.75 0.735549 0.757469 0.8093 0.75 0.735582 0.757409 0.8094 0.75 0.735616 0.757349 0.8095 0.75 0.73565 0.757288 0.8096 0.75 0.735683 0.757226 0.8097 0.75 0.735717 0.757163 0.8098 0.75 0.735751 0.7571 0.8099 0.75 0.735785 0.757035 0.81 0.75 0.735819 0.75697 0.8101 0.75 0.735854 0.756905 0.8102 0.75 0.735888 0.756838 0.8103 0.75 0.735922 0.756771 0.8104 0.75 0.735957 0.756703 0.8105 0.75 0.735991 0.756635 0.8106 0.75 0.736026 0.756565 0.8107 0.75 0.73606 0.756495 0.8108 0.75 0.736095 0.756425 0.8109 0.75 0.73613 0.756353 0.811 0.75 0.736164 0.756281 0.8111 0.75 0.736199 0.756209 0.8112 0.75 0.736234 0.756135 0.8113 0.75 0.736269 0.756061 0.8114 0.75 0.736304 0.755987 0.8115 0.75 0.73634 0.755912 0.8116 0.75 0.736375 0.755836 0.8117 0.75 0.73641 0.755759 0.8118 0.75 0.736446 0.755682 0.8119 0.75 0.736481 0.755605 0.812 0.75 0.736517 0.755527 0.8121 0.75 0.736552 0.755448 0.8122 0.75 0.736588 0.755368 0.8123 0.75 0.736623 0.755288 0.8124 0.75 0.736659 0.755208 0.8125 0.75 0.736695 0.755127 0.8126 0.75 0.736731 0.755045 0.8127 0.75 0.736767 0.754963 0.8128 0.75 0.736803 0.754881 0.8129 0.75 0.736839 0.754798 0.813 0.75 0.736875 0.754714 0.8131 0.75 0.736912 0.75463 0.8132 0.75 0.736948 0.754545 0.8133 0.75 0.736984 0.75446 0.8134 0.75 0.737021 0.754375 0.8135 0.75 0.737057 0.754289 0.8136 0.75 0.737094 0.754203 0.8137 0.75 0.73713 0.754116 0.8138 0.75 0.737167 0.754028 0.8139 0.75 0.737204 0.753941 0.814 0.75 0.737241 0.753853 0.8141 0.75 0.737278 0.753764 0.8142 0.75 0.737315 0.753675 0.8143 0.75 0.737352 0.753586 0.8144 0.75 0.737389 0.753497 0.8145 0.75 0.737426 0.753407 0.8146 0.75 0.737463 0.753317 0.8147 0.75 0.7375 0.753226 0.8148 0.75 0.737537 0.753135 0.8149 0.75 0.737575 0.753044 0.815 0.75 0.737612 0.752952 0.8151 0.75 0.73765 0.75286 0.8152 0.75 0.737687 0.752768 0.8153 0.75 0.737725 0.752676 0.8154 0.75 0.737763 0.752583 0.8155 0.75 0.7378 0.75249 0.8156 0.75 0.737838 0.752397 0.8157 0.75 0.737876 0.752304 0.8158 0.75 0.737914 0.75221 0.8159 0.75 0.737952 0.752116 0.816 0.75 0.73799 0.752022 0.8161 0.75 0.738028 0.751928 0.8162 0.75 0.738066 0.751834 0.8163 0.75 0.738104 0.751739 0.8164 0.75 0.738143 0.751644 0.8165 0.75 0.738181 0.75155 0.8166 0.75 0.738219 0.751455 0.8167 0.75 0.738258 0.751359 0.8168 0.75 0.738296 0.751264 0.8169 0.75 0.738335 0.751169 0.817 0.75 0.738374 0.751073 0.8171 0.75 0.738412 0.750978 0.8172 0.75 0.738451 0.750882 0.8173 0.75 0.73849 0.750787 0.8174 0.75 0.738528 0.750691 0.8175 0.75 0.738567 0.750595 0.8176 0.75 0.738606 0.750499 0.8177 0.75 0.738645 0.750404 0.8178 0.75 0.738684 0.750308 0.8179 0.75 0.738723 0.750212 0.818 0.75 0.738763 0.750116 0.8181 0.75 0.738802 0.75002 0.8182 0.75 0.738841 0.749925 0.8183 0.75 0.73888 0.749829 0.8184 0.75 0.73892 0.749733 0.8185 0.75 0.738959 0.749638 0.8186 0.75 0.738999 0.749542 0.8187 0.75 0.739038 0.749447 0.8188 0.75 0.739078 0.749351 0.8189 0.75 0.739117 0.749256 0.819 0.75 0.739157 0.749161 0.8191 0.75 0.739197 0.749066 0.8192 0.75 0.739236 0.748971 0.8193 0.75 0.739276 0.748877 0.8194 0.75 0.739316 0.748782 0.8195 0.75 0.739356 0.748688 0.8196 0.75 0.739396 0.748594 0.8197 0.75 0.739436 0.7485 0.8198 0.75 0.739476 0.748406 0.8199 0.75 0.739516 0.748312 0.82 0.75 0.739556 0.748219 0.8201 0.75 0.739596 0.748126 0.8202 0.75 0.739637 0.748033 0.8203 0.75 0.739677 0.747941 0.8204 0.75 0.739717 0.747848 0.8205 0.75 0.739758 0.747756 0.8206 0.75 0.739798 0.747665 0.8207 0.75 0.739839 0.747573 0.8208 0.75 0.739879 0.747482 0.8209 0.75 0.73992 0.747391 0.821 0.75 0.73996 0.747301 0.8211 0.75 0.740001 0.747211 0.8212 0.75 0.740042 0.747121 0.8213 0.75 0.740083 0.747031 0.8214 0.75 0.740123 0.746942 0.8215 0.75 0.740164 0.746854 0.8216 0.75 0.740205 0.746766 0.8217 0.75 0.740246 0.746678 0.8218 0.75 0.740287 0.74659 0.8219 0.75 0.740328 0.746503 0.822 0.75 0.740369 0.746417 0.8221 0.75 0.74041 0.74633 0.8222 0.75 0.740451 0.746245 0.8223 0.75 0.740492 0.74616 0.8224 0.75 0.740534 0.746075 0.8225 0.75 0.740575 0.745991 0.8226 0.75 0.740616 0.745907 0.8227 0.75 0.740658 0.745823 0.8228 0.75 0.740699 0.745741 0.8229 0.75 0.74074 0.745658 0.823 0.75 0.740782 0.745577 0.8231 0.75 0.740823 0.745496 0.8232 0.75 0.740865 0.745415 0.8233 0.75 0.740907 0.745335 0.8234 0.75 0.740948 0.745255 0.8235 0.75 0.74099 0.745176 0.8236 0.75 0.741032 0.745098 0.8237 0.75 0.741073 0.74502 0.8238 0.75 0.741115 0.744943 0.8239 0.75 0.741157 0.744867 0.824 0.75 0.741199 0.744791 0.8241 0.75 0.741241 0.744715 0.8242 0.75 0.741283 0.744641 0.8243 0.75 0.741325 0.744567 0.8244 0.75 0.741367 0.744493 0.8245 0.75 0.741409 0.744421 0.8246 0.75 0.741451 0.744349 0.8247 0.75 0.741493 0.744277 0.8248 0.75 0.741535 0.744207 0.8249 0.75 0.741577 0.744137 0.825 0.75 0.741619 0.744068 0.8251 0.75 0.741661 0.743999 0.8252 0.75 0.741704 0.743931 0.8253 0.75 0.741746 0.743864 0.8254 0.75 0.741788 0.743798 0.8255 0.75 0.741831 0.743732 0.8256 0.75 0.741873 0.743668 0.8257 0.75 0.741916 0.743604 0.8258 0.75 0.741958 0.74354 0.8259 0.75 0.742001 0.743478 0.826 0.75 0.742043 0.743416 0.8261 0.75 0.742086 0.743355 0.8262 0.75 0.742128 0.743295 0.8263 0.75 0.742171 0.743236 0.8264 0.75 0.742214 0.743177 0.8265 0.75 0.742256 0.743119 0.8266 0.75 0.742299 0.743062 0.8267 0.75 0.742342 0.743006 0.8268 0.75 0.742385 0.742951 0.8269 0.75 0.742427 0.742897 0.827 0.75 0.74247 0.742843 0.8271 0.75 0.742513 0.742791 0.8272 0.75 0.742556 0.742739 0.8273 0.75 0.742599 0.742688 0.8274 0.75 0.742642 0.742638 0.8275 0.75 0.742685 0.742589 0.8276 0.75 0.742728 0.742541 0.8277 0.75 0.742771 0.742493 0.8278 0.75 0.742814 0.742447 0.8279 0.75 0.742857 0.742401 0.828 0.75 0.7429 0.742357 0.8281 0.75 0.742943 0.742313 0.8282 0.75 0.742986 0.74227 0.8283 0.75 0.74303 0.742228 0.8284 0.75 0.743073 0.742187 0.8285 0.75 0.743116 0.742147 0.8286 0.75 0.743159 0.742108 0.8287 0.75 0.743203 0.74207 0.8288 0.75 0.743246 0.742033 0.8289 0.75 0.743289 0.741997 0.829 0.75 0.743333 0.741961 0.8291 0.75 0.743376 0.741927 0.8292 0.75 0.743419 0.741894 0.8293 0.75 0.743463 0.741861 0.8294 0.75 0.743506 0.74183 0.8295 0.75 0.74355 0.7418 0.8296 0.75 0.743593 0.74177 0.8297 0.75 0.743637 0.741742 0.8298 0.75 0.74368 0.741714 0.8299 0.75 0.743724 0.741688 0.83 0.75 0.743767 0.741662 0.8301 0.75 0.743811 0.741638 0.8302 0.75 0.743854 0.741615 0.8303 0.75 0.743898 0.741592 0.8304 0.75 0.743942 0.741571 0.8305 0.75 0.743985 0.74155 0.8306 0.75 0.744029 0.741531 0.8307 0.75 0.744073 0.741513 0.8308 0.75 0.744116 0.741495 0.8309 0.75 0.74416 0.741479 0.831 0.75 0.744204 0.741464 0.8311 0.75 0.744248 0.741449 0.8312 0.75 0.744291 0.741436 0.8313 0.75 0.744335 0.741424 0.8314 0.75 0.744379 0.741413 0.8315 0.75 0.744423 0.741402 0.8316 0.75 0.744467 0.741393 0.8317 0.75 0.744511 0.741385 0.8318 0.75 0.744554 0.741378 0.8319 0.75 0.744598 0.741372 0.832 0.75 0.744642 0.741367 0.8321 0.75 0.744686 0.741363 0.8322 0.75 0.74473 0.74136 0.8323 0.75 0.744774 0.741359 0.8324 0.75 0.744818 0.741358 0.8325 0.75 0.744862 0.741358 0.8326 0.75 0.744906 0.741359 0.8327 0.75 0.74495 0.741362 0.8328 0.75 0.744994 0.741365 0.8329 0.75 0.745038 0.741369 0.833 0.75 0.745082 0.741375 0.8331 0.75 0.745126 0.741381 0.8332 0.75 0.74517 0.741389 0.8333 0.75 0.745214 0.741397 0.8334 0.75 0.745258 0.741407 0.8335 0.75 0.745302 0.741417 0.8336 0.75 0.745346 0.741429 0.8337 0.75 0.74539 0.741442 0.8338 0.75 0.745435 0.741455 0.8339 0.75 0.745479 0.74147 0.834 0.75 0.745523 0.741486 0.8341 0.75 0.745567 0.741503 0.8342 0.75 0.745611 0.741521 0.8343 0.75 0.745655 0.74154 0.8344 0.75 0.745699 0.741559 0.8345 0.75 0.745744 0.74158 0.8346 0.75 0.745788 0.741602 0.8347 0.75 0.745832 0.741625 0.8348 0.75 0.745876 0.741649 0.8349 0.75 0.74592 0.741674 0.835 0.75 0.745964 0.7417 0.8351 0.75 0.746009 0.741727 0.8352 0.75 0.746053 0.741755 0.8353 0.75 0.746097 0.741784 0.8354 0.75 0.746141 0.741814 0.8355 0.75 0.746186 0.741845 0.8356 0.75 0.74623 0.741877 0.8357 0.75 0.746274 0.74191 0.8358 0.75 0.746318 0.741944 0.8359 0.75 0.746362 0.741979 0.836 0.75 0.746407 0.742014 0.8361 0.75 0.746451 0.742051 0.8362 0.75 0.746495 0.742089 0.8363 0.75 0.746539 0.742128 0.8364 0.75 0.746584 0.742167 0.8365 0.75 0.746628 0.742208 0.8366 0.75 0.746672 0.74225 0.8367 0.75 0.746716 0.742292 0.8368 0.75 0.746761 0.742336 0.8369 0.75 0.746805 0.74238 0.837 0.75 0.746849 0.742425 0.8371 0.75 0.746893 0.742471 0.8372 0.75 0.746937 0.742519 0.8373 0.75 0.746982 0.742567 0.8374 0.75 0.747026 0.742616 0.8375 0.75 0.74707 0.742665 0.8376 0.75 0.747114 0.742716 0.8377 0.75 0.747159 0.742768 0.8378 0.75 0.747203 0.74282 0.8379 0.75 0.747247 0.742874 0.838 0.75 0.747291 0.742928 0.8381 0.75 0.747335 0.742983 0.8382 0.75 0.74738 0.743039 0.8383 0.75 0.747424 0.743096 0.8384 0.75 0.747468 0.743153 0.8385 0.75 0.747512 0.743212 0.8386 0.75 0.747556 0.743271 0.8387 0.75 0.747601 0.743331 0.8388 0.75 0.747645 0.743392 0.8389 0.75 0.747689 0.743454 0.839 0.75 0.747733 0.743516 0.8391 0.75 0.747777 0.74358 0.8392 0.75 0.747821 0.743644 0.8393 0.75 0.747865 0.743709 0.8394 0.75 0.74791 0.743774 0.8395 0.75 0.747954 0.743841 0.8396 0.75 0.747998 0.743908 0.8397 0.75 0.748042 0.743975 0.8398 0.75 0.748086 0.744044 0.8399 0.75 0.74813 0.744113 0.84 0.75 0.748174 0.744183 0.8401 0.75 0.748218 0.744254 0.8402 0.75 0.748262 0.744326 0.8403 0.75 0.748306 0.744398 0.8404 0.75 0.74835 0.74447 0.8405 0.75 0.748394 0.744544 0.8406 0.75 0.748438 0.744618 0.8407 0.75 0.748482 0.744693 0.8408 0.75 0.748526 0.744768 0.8409 0.75 0.74857 0.744844 0.841 0.75 0.748614 0.744921 0.8411 0.75 0.748658 0.744998 0.8412 0.75 0.748702 0.745076 0.8413 0.75 0.748746 0.745155 0.8414 0.75 0.74879 0.745234 0.8415 0.75 0.748834 0.745313 0.8416 0.75 0.748878 0.745394 0.8417 0.75 0.748922 0.745474 0.8418 0.75 0.748966 0.745556 0.8419 0.75 0.749009 0.745638 0.842 0.75 0.749053 0.74572 0.8421 0.75 0.749097 0.745803 0.8422 0.75 0.749141 0.745886 0.8423 0.75 0.749184 0.74597 0.8424 0.75 0.749228 0.746055 0.8425 0.75 0.749272 0.746139 0.8426 0.75 0.749316 0.746225 0.8427 0.75 0.749359 0.746311 0.8428 0.75 0.749403 0.746397 0.8429 0.75 0.749447 0.746483 0.843 0.75 0.74949 0.746571 0.8431 0.75 0.749534 0.746658 0.8432 0.75 0.749578 0.746746 0.8433 0.75 0.749621 0.746834 0.8434 0.75 0.749665 0.746923 0.8435 0.75 0.749708 0.747012 0.8436 0.75 0.749752 0.747101 0.8437 0.75 0.749795 0.747191 0.8438 0.75 0.749839 0.747281 0.8439 0.75 0.749882 0.747371 0.844 0.75 0.749926 0.747462 0.8441 0.75 0.749969 0.747553 0.8442 0.75 0.750012 0.747644 0.8443 0.75 0.750056 0.747736 0.8444 0.75 0.750099 0.747828 0.8445 0.75 0.750142 0.74792 0.8446 0.75 0.750186 0.748012 0.8447 0.75 0.750229 0.748105 0.8448 0.75 0.750272 0.748197 0.8449 0.75 0.750316 0.74829 0.845 0.75 0.750359 0.748383 0.8451 0.75 0.750402 0.748477 0.8452 0.75 0.750445 0.74857 0.8453 0.75 0.750488 0.748664 0.8454 0.75 0.750531 0.748758 0.8455 0.75 0.750574 0.748852 0.8456 0.75 0.750617 0.748946 0.8457 0.75 0.75066 0.74904 0.8458 0.75 0.750703 0.749134 0.8459 0.75 0.750746 0.749228 0.846 0.75 0.750789 0.749323 0.8461 0.75 0.750832 0.749417 0.8462 0.75 0.750875 0.749512 0.8463 0.75 0.750918 0.749606 0.8464 0.75 0.750961 0.749701 0.8465 0.75 0.751003 0.749795 0.8466 0.75 0.751046 0.74989 0.8467 0.75 0.751089 0.749985 0.8468 0.75 0.751132 0.750079 0.8469 0.75 0.751174 0.750174 0.847 0.75 0.751217 0.750268 0.8471 0.75 0.75126 0.750363 0.8472 0.75 0.751302 0.750457 0.8473 0.75 0.751345 0.750551 0.8474 0.75 0.751387 0.750645 0.8475 0.75 0.75143 0.750739 0.8476 0.75 0.751472 0.750833 0.8477 0.75 0.751515 0.750927 0.8478 0.75 0.751557 0.751021 0.8479 0.75 0.751599 0.751114 0.848 0.75 0.751642 0.751208 0.8481 0.75 0.751684 0.751301 0.8482 0.75 0.751726 0.751394 0.8483 0.75 0.751768 0.751486 0.8484 0.75 0.75181 0.751579 0.8485 0.75 0.751853 0.751671 0.8486 0.75 0.751895 0.751763 0.8487 0.75 0.751937 0.751855 0.8488 0.75 0.751979 0.751946 0.8489 0.75 0.752021 0.752038 0.849 0.75 0.752063 0.752129 0.8491 0.75 0.752105 0.752219 0.8492 0.75 0.752146 0.75231 0.8493 0.75 0.752188 0.7524 0.8494 0.75 0.75223 0.752489 0.8495 0.75 0.752272 0.752579 0.8496 0.75 0.752314 0.752668 0.8497 0.75 0.752355 0.752756 0.8498 0.75 0.752397 0.752844 0.8499 0.75 0.752439 0.752932 0.85 0.75 0.75248 0.753019 0.8501 0.75 0.752522 0.753106 0.8502 0.75 0.752563 0.753193 0.8503 0.75 0.752605 0.753279 0.8504 0.75 0.752646 0.753365 0.8505 0.75 0.752687 0.75345 0.8506 0.75 0.752729 0.753534 0.8507 0.75 0.75277 0.753619 0.8508 0.75 0.752811 0.753702 0.8509 0.75 0.752852 0.753786 0.851 0.75 0.752893 0.753868 0.8511 0.75 0.752935 0.75395 0.8512 0.75 0.752976 0.754032 0.8513 0.75 0.753017 0.754113 0.8514 0.75 0.753058 0.754193 0.8515 0.75 0.753098 0.754273 0.8516 0.75 0.753139 0.754353 0.8517 0.75 0.75318 0.754431 0.8518 0.75 0.753221 0.754509 0.8519 0.75 0.753262 0.754587 0.852 0.75 0.753302 0.754664 0.8521 0.75 0.753343 0.75474 0.8522 0.75 0.753384 0.754815 0.8523 0.75 0.753424 0.75489 0.8524 0.75 0.753465 0.754964 0.8525 0.75 0.753505 0.755038 0.8526 0.75 0.753546 0.755111 0.8527 0.75 0.753586 0.755183 0.8528 0.75 0.753626 0.755254 0.8529 0.75 0.753667 0.755325 0.853 0.75 0.753707 0.755395 0.8531 0.75 0.753747 0.755464 0.8532 0.75 0.753787 0.755533 0.8533 0.75 0.753827 0.7556 0.8534 0.75 0.753867 0.755667 0.8535 0.75 0.753907 0.755733 0.8536 0.75 0.753947 0.755799 0.8537 0.75 0.753987 0.755863 0.8538 0.75 0.754027 0.755927 0.8539 0.75 0.754067 0.75599 0.854 0.75 0.754106 0.756052 0.8541 0.75 0.754146 0.756114 0.8542 0.75 0.754186 0.756174 0.8543 0.75 0.754225 0.756234 0.8544 0.75 0.754265 0.756292 0.8545 0.75 0.754304 0.75635 0.8546 0.75 0.754343 0.756407 0.8547 0.75 0.754383 0.756464 0.8548 0.75 0.754422 0.756519 0.8549 0.75 0.754461 0.756573 0.855 0.75 0.754501 0.756627 0.8551 0.75 0.75454 0.756679 0.8552 0.75 0.754579 0.756731 0.8553 0.75 0.754618 0.756782 0.8554 0.75 0.754657 0.756831 0.8555 0.75 0.754696 0.75688 0.8556 0.75 0.754734 0.756928 0.8557 0.75 0.754773 0.756975 0.8558 0.75 0.754812 0.757021 0.8559 0.75 0.754851 0.757066 0.856 0.75 0.754889 0.75711 0.8561 0.75 0.754928 0.757153 0.8562 0.75 0.754966 0.757195 0.8563 0.75 0.755005 0.757236 0.8564 0.75 0.755043 0.757276 0.8565 0.75 0.755081 0.757315 0.8566 0.75 0.75512 0.757353 0.8567 0.75 0.755158 0.757391 0.8568 0.75 0.755196 0.757427 0.8569 0.75 0.755234 0.757462 0.857 0.75 0.755272 0.757496 0.8571 0.75 0.75531 0.757529 0.8572 0.75 0.755348 0.75756 0.8573 0.75 0.755386 0.757591 0.8574 0.75 0.755424 0.757621 0.8575 0.75 0.755461 0.75765 0.8576 0.75 0.755499 0.757678 0.8577 0.75 0.755537 0.757704 0.8578 0.75 0.755574 0.75773 0.8579 0.75 0.755612 0.757754 0.858 0.75 0.755649 0.757778 0.8581 0.75 0.755686 0.7578 0.8582 0.75 0.755724 0.757821 0.8583 0.75 0.755761 0.757841 0.8584 0.75 0.755798 0.757861 0.8585 0.75 0.755835 0.757879 0.8586 0.75 0.755872 0.757895 0.8587 0.75 0.755909 0.757911 0.8588 0.75 0.755946 0.757926 0.8589 0.75 0.755983 0.75794 0.859 0.75 0.756019 0.757952 0.8591 0.75 0.756056 0.757963 0.8592 0.75 0.756093 0.757974 0.8593 0.75 0.756129 0.757983 0.8594 0.75 0.756166 0.757991 0.8595 0.75 0.756202 0.757998 0.8596 0.75 0.756238 0.758004 0.8597 0.75 0.756275 0.758009 0.8598 0.75 0.756311 0.758012 0.8599 0.75 0.756347 0.758015 0.86 0.75 0.756383 0.758016 0.8601 0.75 0.756419 0.758016 0.8602 0.75 0.756455 0.758015 0.8603 0.75 0.756491 0.758013 0.8604 0.75 0.756527 0.75801 0.8605 0.75 0.756562 0.758006 0.8606 0.75 0.756598 0.758001 0.8607 0.75 0.756634 0.757994 0.8608 0.75 0.756669 0.757987 0.8609 0.75 0.756704 0.757978 0.861 0.75 0.75674 0.757968 0.8611 0.75 0.756775 0.757957 0.8612 0.75 0.75681 0.757945 0.8613 0.75 0.756845 0.757932 0.8614 0.75 0.756881 0.757918 0.8615 0.75 0.756916 0.757902 0.8616 0.75 0.75695 0.757886 0.8617 0.75 0.756985 0.757868 0.8618 0.75 0.75702 0.75785 0.8619 0.75 0.757055 0.75783 0.862 0.75 0.757089 0.757809 0.8621 0.75 0.757124 0.757787 0.8622 0.75 0.757158 0.757764 0.8623 0.75 0.757193 0.75774 0.8624 0.75 0.757227 0.757714 0.8625 0.75 0.757261 0.757688 0.8626 0.75 0.757296 0.757661 0.8627 0.75 0.75733 0.757632 0.8628 0.75 0.757364 0.757602 0.8629 0.75 0.757398 0.757572 0.863 0.75 0.757431 0.75754 0.8631 0.75 0.757465 0.757507 0.8632 0.75 0.757499 0.757473 0.8633 0.75 0.757533 0.757438 0.8634 0.75 0.757566 0.757402 0.8635 0.75 0.7576 0.757365 0.8636 0.75 0.757633 0.757327 0.8637 0.75 0.757666 0.757288 0.8638 0.75 0.7577 0.757248 0.8639 0.75 0.757733 0.757207 0.864 0.75 0.757766 0.757165 0.8641 0.75 0.757799 0.757121 0.8642 0.75 0.757832 0.757077 0.8643 0.75 0.757864 0.757032 0.8644 0.75 0.757897 0.756986 0.8645 0.75 0.75793 0.756939 0.8646 0.75 0.757962 0.75689 0.8647 0.75 0.757995 0.756841 0.8648 0.75 0.758027 0.756791 0.8649 0.75 0.75806 0.75674 0.865 0.75 0.758092 0.756688 0.8651 0.75 0.758124 0.756635 0.8652 0.75 0.758156 0.756581 0.8653 0.75 0.758188 0.756526 0.8654 0.75 0.75822 0.75647 0.8655 0.75 0.758252 0.756414 0.8656 0.75 0.758284 0.756356 0.8657 0.75 0.758315 0.756297 0.8658 0.75 0.758347 0.756238 0.8659 0.75 0.758379 0.756177 0.866 0.75 0.75841 0.756116 0.8661 0.75 0.758441 0.756054 0.8662 0.75 0.758472 0.755991 0.8663 0.75 0.758504 0.755927 0.8664 0.75 0.758535 0.755863 0.8665 0.75 0.758566 0.755797 0.8666 0.75 0.758597 0.755731 0.8667 0.75 0.758627 0.755664 0.8668 0.75 0.758658 0.755596 0.8669 0.75 0.758689 0.755527 0.867 0.75 0.758719 0.755457 0.8671 0.75 0.75875 0.755387 0.8672 0.75 0.75878 0.755316 0.8673 0.75 0.75881 0.755244 0.8674 0.75 0.758841 0.755171 0.8675 0.75 0.758871 0.755098 0.8676 0.75 0.758901 0.755024 0.8677 0.75 0.758931 0.754949 0.8678 0.75 0.75896 0.754873 0.8679 0.75 0.75899 0.754797 0.868 0.75 0.75902 0.75472 0.8681 0.75 0.759049 0.754643 0.8682 0.75 0.759079 0.754564 0.8683 0.75 0.759108 0.754486 0.8684 0.75 0.759138 0.754406 0.8685 0.75 0.759167 0.754326 0.8686 0.75 0.759196 0.754245 0.8687 0.75 0.759225 0.754164 0.8688 0.75 0.759254 0.754082 0.8689 0.75 0.759283 0.753999 0.869 0.75 0.759311 0.753916 0.8691 0.75 0.75934 0.753832 0.8692 0.75 0.759369 0.753748 0.8693 0.75 0.759397 0.753663 0.8694 0.75 0.759425 0.753577 0.8695 0.75 0.759454 0.753492 0.8696 0.75 0.759482 0.753405 0.8697 0.75 0.75951 0.753318 0.8698 0.75 0.759538 0.753231 0.8699 0.75 0.759566 0.753143 0.87 0.75 0.759594 0.753055 0.8701 0.75 0.759621 0.752966 0.8702 0.75 0.759649 0.752877 0.8703 0.75 0.759676 0.752788 0.8704 0.75 0.759704 0.752698 0.8705 0.75 0.759731 0.752607 0.8706 0.75 0.759758 0.752517 0.8707 0.75 0.759785 0.752426 0.8708 0.75 0.759812 0.752334 0.8709 0.75 0.759839 0.752243 0.871 0.75 0.759866 0.752151 0.8711 0.75 0.759893 0.752058 0.8712 0.75 0.75992 0.751966 0.8713 0.75 0.759946 0.751873 0.8714 0.75 0.759972 0.751779 0.8715 0.75 0.759999 0.751686 0.8716 0.75 0.760025 0.751592 0.8717 0.75 0.760051 0.751499 0.8718 0.75 0.760077 0.751404 0.8719 0.75 0.760103 0.75131 0.872 0.75 0.760129 0.751216 0.8721 0.75 0.760155 0.751121 0.8722 0.75 0.76018 0.751026 0.8723 0.75 0.760206 0.750931 0.8724 0.75 0.760231 0.750836 0.8725 0.75 0.760257 0.750741 0.8726 0.75 0.760282 0.750646 0.8727 0.75 0.760307 0.750551 0.8728 0.75 0.760332 0.750455 0.8729 0.75 0.760357 0.75036 0.873 0.75 0.760382 0.750264 0.8731 0.75 0.760407 0.750169 0.8732 0.75 0.760431 0.750073 0.8733 0.75 0.760456 0.749978 0.8734 0.75 0.76048 0.749882 0.8735 0.75 0.760504 0.749787 0.8736 0.75 0.760529 0.749691 0.8737 0.75 0.760553 0.749596 0.8738 0.75 0.760577 0.749501 0.8739 0.75 0.760601 0.749405 0.874 0.75 0.760624 0.74931 0.8741 0.75 0.760648 0.749215 0.8742 0.75 0.760672 0.749121 0.8743 0.75 0.760695 0.749026 0.8744 0.75 0.760719 0.748931 0.8745 0.75 0.760742 0.748837 0.8746 0.75 0.760765 0.748743 0.8747 0.75 0.760788 0.748649 0.8748 0.75 0.760811 0.748555 0.8749 0.75 0.760834 0.748462 0.875 0.75 0.760857 0.748369 0.8751 0.75 0.760879 0.748276 0.8752 0.75 0.760902 0.748183 0.8753 0.75 0.760924 0.748091 0.8754 0.75 0.760946 0.747999 0.8755 0.75 0.760969 0.747907 0.8756 0.75 0.760991 0.747815 0.8757 0.75 0.761013 0.747724 0.8758 0.75 0.761035 0.747634 0.8759 0.75 0.761056 0.747543 0.876 0.75 0.761078 0.747453 0.8761 0.75 0.761099 0.747364 0.8762 0.75 0.761121 0.747275 0.8763 0.75 0.761142 0.747186 0.8764 0.75 0.761163 0.747098 0.8765 0.75 0.761185 0.74701 0.8766 0.75 0.761206 0.746923 0.8767 0.75 0.761226 0.746836 0.8768 0.75 0.761247 0.74675 0.8769 0.75 0.761268 0.746664 0.877 0.75 0.761288 0.746579 0.8771 0.75 0.761309 0.746494 0.8772 0.75 0.761329 0.74641 0.8773 0.75 0.76135 0.746327 0.8774 0.75 0.76137 0.746244 0.8775 0.75 0.76139 0.746161 0.8776 0.75 0.76141 0.74608 0.8777 0.75 0.761429 0.745999 0.8778 0.75 0.761449 0.745918 0.8779 0.75 0.761469 0.745838 0.878 0.75 0.761488 0.745759 0.8781 0.75 0.761507 0.745681 0.8782 0.75 0.761527 0.745603 0.8783 0.75 0.761546 0.745526 0.8784 0.75 0.761565 0.745449 0.8785 0.75 0.761583 0.745374 0.8786 0.75 0.761602 0.745299 0.8787 0.75 0.761621 0.745225 0.8788 0.75 0.761639 0.745151 0.8789 0.75 0.761658 0.745079 0.879 0.75 0.761676 0.745007 0.8791 0.75 0.761694 0.744936 0.8792 0.75 0.761712 0.744866 0.8793 0.75 0.76173 0.744796 0.8794 0.75 0.761748 0.744728 0.8795 0.75 0.761766 0.74466 0.8796 0.75 0.761784 0.744593 0.8797 0.75 0.761801 0.744527 0.8798 0.75 0.761818 0.744462 0.8799 0.75 0.761836 0.744398 0.88 0.75 0.761853 0.744334 0.8801 0.75 0.76187 0.744272 0.8802 0.75 0.761887 0.744211 0.8803 0.75 0.761904 0.74415 0.8804 0.75 0.76192 0.74409 0.8805 0.75 0.761937 0.744032 0.8806 0.75 0.761953 0.743974 0.8807 0.75 0.76197 0.743917 0.8808 0.75 0.761986 0.743861 0.8809 0.75 0.762002 0.743807 0.881 0.75 0.762018 0.743753 0.8811 0.75 0.762034 0.7437 0.8812 0.75 0.76205 0.743648 0.8813 0.75 0.762065 0.743598 0.8814 0.75 0.762081 0.743548 0.8815 0.75 0.762096 0.743499 0.8816 0.75 0.762111 0.743452 0.8817 0.75 0.762126 0.743405 0.8818 0.75 0.762142 0.74336 0.8819 0.75 0.762156 0.743315 0.882 0.75 0.762171 0.743272 0.8821 0.75 0.762186 0.74323 0.8822 0.75 0.7622 0.743189 0.8823 0.75 0.762215 0.743149 0.8824 0.75 0.762229 0.74311 0.8825 0.75 0.762243 0.743072 0.8826 0.75 0.762257 0.743035 0.8827 0.75 0.762271 0.743 0.8828 0.75 0.762285 0.742965 0.8829 0.75 0.762299 0.742932 0.883 0.75 0.762312 0.7429 0.8831 0.75 0.762326 0.742869 0.8832 0.75 0.762339 0.742839 0.8833 0.75 0.762353 0.742811 0.8834 0.75 0.762366 0.742784 0.8835 0.75 0.762379 0.742757 0.8836 0.75 0.762391 0.742732 0.8837 0.75 0.762404 0.742708 0.8838 0.75 0.762417 0.742686 0.8839 0.75 0.762429 0.742664 0.884 0.75 0.762442 0.742644 0.8841 0.75 0.762454 0.742625 0.8842 0.75 0.762466 0.742607 0.8843 0.75 0.762478 0.742591 0.8844 0.75 0.76249 0.742575 0.8845 0.75 0.762502 0.742561 0.8846 0.75 0.762513 0.742548 0.8847 0.75 0.762525 0.742536 0.8848 0.75 0.762536 0.742526 0.8849 0.75 0.762547 0.742516 0.885 0.75 0.762558 0.742508 0.8851 0.75 0.762569 0.742502 0.8852 0.75 0.76258 0.742496 0.8853 0.75 0.762591 0.742492 0.8854 0.75 0.762602 0.742489 0.8855 0.75 0.762612 0.742487 0.8856 0.75 0.762623 0.742486 0.8857 0.75 0.762633 0.742487 0.8858 0.75 0.762643 0.742489 0.8859 0.75 0.762653 0.742492 0.886 0.75 0.762663 0.742497 0.8861 0.75 0.762673 0.742502 0.8862 0.75 0.762682 0.742509 0.8863 0.75 0.762692 0.742517 0.8864 0.75 0.762701 0.742527 0.8865 0.75 0.76271 0.742537 0.8866 0.75 0.76272 0.742549 0.8867 0.75 0.762729 0.742562 0.8868 0.75 0.762737 0.742577 0.8869 0.75 0.762746 0.742592 0.887 0.75 0.762755 0.742609 0.8871 0.75 0.762763 0.742627 0.8872 0.75 0.762772 0.742647 0.8873 0.75 0.76278 0.742667 0.8874 0.75 0.762788 0.742689 0.8875 0.75 0.762796 0.742712 0.8876 0.75 0.762804 0.742736 0.8877 0.75 0.762812 0.742762 0.8878 0.75 0.762819 0.742788 0.8879 0.75 0.762827 0.742816 0.888 0.75 0.762834 0.742845 0.8881 0.75 0.762841 0.742876 0.8882 0.75 0.762848 0.742907 0.8883 0.75 0.762855 0.74294 0.8884 0.75 0.762862 0.742974 0.8885 0.75 0.762869 0.743009 0.8886 0.75 0.762875 0.743045 0.8887 0.75 0.762882 0.743082 0.8888 0.75 0.762888 0.743121 0.8889 0.75 0.762894 0.743161 0.889 0.75 0.7629 0.743202 0.8891 0.75 0.762906 0.743244 0.8892 0.75 0.762912 0.743287 0.8893 0.75 0.762918 0.743332 0.8894 0.75 0.762923 0.743377 0.8895 0.75 0.762929 0.743424 0.8896 0.75 0.762934 0.743471 0.8897 0.75 0.762939 0.74352 0.8898 0.75 0.762944 0.74357 0.8899 0.75 0.762949 0.743621 0.89 0.75 0.762954 0.743674 0.8901 0.75 0.762958 0.743727 0.8902 0.75 0.762963 0.743781 0.8903 0.75 0.762967 0.743836 0.8904 0.75 0.762972 0.743893 0.8905 0.75 0.762976 0.74395 0.8906 0.75 0.76298 0.744009 0.8907 0.75 0.762984 0.744068 0.8908 0.75 0.762987 0.744129 0.8909 0.75 0.762991 0.744191 0.891 0.75 0.762994 0.744253 0.8911 0.75 0.762998 0.744317 0.8912 0.75 0.763001 0.744381 0.8913 0.75 0.763004 0.744447 0.8914 0.75 0.763007 0.744513 0.8915 0.75 0.76301 0.744581 0.8916 0.75 0.763012 0.744649 0.8917 0.75 0.763015 0.744718 0.8918 0.75 0.763017 0.744789 0.8919 0.75 0.76302 0.74486 0.892 0.75 0.763022 0.744932 0.8921 0.75 0.763024 0.745004 0.8922 0.75 0.763026 0.745078 0.8923 0.75 0.763027 0.745153 0.8924 0.75 0.763029 0.745228 0.8925 0.75 0.76303 0.745304 0.8926 0.75 0.763032 0.745381 0.8927 0.75 0.763033 0.745459 0.8928 0.75 0.763034 0.745538 0.8929 0.75 0.763035 0.745617 0.893 0.75 0.763036 0.745698 0.8931 0.75 0.763037 0.745779 0.8932 0.75 0.763037 0.74586 0.8933 0.75 0.763038 0.745943 0.8934 0.75 0.763038 0.746026 0.8935 0.75 0.763038 0.74611 0.8936 0.75 0.763038 0.746194 0.8937 0.75 0.763038 0.746279 0.8938 0.75 0.763038 0.746365 0.8939 0.75 0.763037 0.746452 0.894 0.75 0.763037 0.746539 0.8941 0.75 0.763036 0.746626 0.8942 0.75 0.763035 0.746715 0.8943 0.75 0.763035 0.746804 0.8944 0.75 0.763034 0.746893 0.8945 0.75 0.763032 0.746983 0.8946 0.75 0.763031 0.747073 0.8947 0.75 0.76303 0.747164 0.8948 0.75 0.763028 0.747256 0.8949 0.75 0.763026 0.747348 0.895 0.75 0.763025 0.74744 0.8951 0.75 0.763023 0.747533 0.8952 0.75 0.763021 0.747627 0.8953 0.75 0.763018 0.74772 0.8954 0.75 0.763016 0.747815 0.8955 0.75 0.763013 0.747909 0.8956 0.75 0.763011 0.748004 0.8957 0.75 0.763008 0.748099 0.8958 0.75 0.763005 0.748195 0.8959 0.75 0.763002 0.748291 0.896 0.75 0.762999 0.748387 0.8961 0.75 0.762996 0.748484 0.8962 0.75 0.762992 0.748581 0.8963 0.75 0.762989 0.748678 0.8964 0.75 0.762985 0.748775 0.8965 0.75 0.762981 0.748872 0.8966 0.75 0.762977 0.74897 0.8967 0.75 0.762973 0.749068 0.8968 0.75 0.762969 0.749166 0.8969 0.75 0.762964 0.749264 0.897 0.75 0.76296 0.749363 0.8971 0.75 0.762955 0.749461 0.8972 0.75 0.762951 0.749559 0.8973 0.75 0.762946 0.749658 0.8974 0.75 0.762941 0.749757 0.8975 0.75 0.762935 0.749855 0.8976 0.75 0.76293 0.749954 0.8977 0.75 0.762925 0.750053 0.8978 0.75 0.762919 0.750152 0.8979 0.75 0.762913 0.75025 0.898 0.75 0.762908 0.750349 0.8981 0.75 0.762902 0.750447 0.8982 0.75 0.762896 0.750546 0.8983 0.75 0.762889 0.750644 0.8984 0.75 0.762883 0.750743 0.8985 0.75 0.762876 0.750841 0.8986 0.75 0.76287 0.750939 0.8987 0.75 0.762863 0.751036 0.8988 0.75 0.762856 0.751134 0.8989 0.75 0.762849 0.751231 0.899 0.75 0.762842 0.751328 0.8991 0.75 0.762835 0.751425 0.8992 0.75 0.762827 0.751522 0.8993 0.75 0.762819 0.751618 0.8994 0.75 0.762812 0.751714 0.8995 0.75 0.762804 0.75181 0.8996 0.75 0.762796 0.751905 0.8997 0.75 0.762788 0.752 0.8998 0.75 0.76278 0.752095 0.8999 0.75 0.762771 0.752189 0.9 0.75 0.762763 0.752283 0.9001 0.75 0.762754 0.752376 0.9002 0.75 0.762745 0.752469 0.9003 0.75 0.762736 0.752562 0.9004 0.75 0.762727 0.752654 0.9005 0.75 0.762718 0.752745 0.9006 0.75 0.762709 0.752836 0.9007 0.75 0.762699 0.752927 0.9008 0.75 0.76269 0.753017 0.9009 0.75 0.76268 0.753106 0.901 0.75 0.76267 0.753195 0.9011 0.75 0.76266 0.753283 0.9012 0.75 0.76265 0.75337 0.9013 0.75 0.76264 0.753457 0.9014 0.75 0.762629 0.753544 0.9015 0.75 0.762619 0.753629 0.9016 0.75 0.762608 0.753714 0.9017 0.75 0.762597 0.753798 0.9018 0.75 0.762586 0.753882 0.9019 0.75 0.762575 0.753964 0.902 0.75 0.762564 0.754046 0.9021 0.75 0.762553 0.754127 0.9022 0.75 0.762541 0.754208 0.9023 0.75 0.76253 0.754287 0.9024 0.75 0.762518 0.754366 0.9025 0.75 0.762506 0.754444 0.9026 0.75 0.762494 0.754521 0.9027 0.75 0.762482 0.754597 0.9028 0.75 0.76247 0.754673 0.9029 0.75 0.762457 0.754747 0.903 0.75 0.762445 0.754821 0.9031 0.75 0.762432 0.754893 0.9032 0.75 0.762419 0.754965 0.9033 0.75 0.762406 0.755036 0.9034 0.75 0.762393 0.755105 0.9035 0.75 0.76238 0.755174 0.9036 0.75 0.762367 0.755242 0.9037 0.75 0.762353 0.755309 0.9038 0.75 0.76234 0.755374 0.9039 0.75 0.762326 0.755439 0.904 0.75 0.762312 0.755503 0.9041 0.75 0.762298 0.755565 0.9042 0.75 0.762284 0.755627 0.9043 0.75 0.76227 0.755687 0.9044 0.75 0.762256 0.755746 0.9045 0.75 0.762241 0.755805 0.9046 0.75 0.762226 0.755862 0.9047 0.75 0.762212 0.755918 0.9048 0.75 0.762197 0.755972 0.9049 0.75 0.762182 0.756026 0.905 0.75 0.762167 0.756078 0.9051 0.75 0.762151 0.75613 0.9052 0.75 0.762136 0.75618 0.9053 0.75 0.76212 0.756228 0.9054 0.75 0.762105 0.756276 0.9055 0.75 0.762089 0.756322 0.9056 0.75 0.762073 0.756367 0.9057 0.75 0.762057 0.756411 0.9058 0.75 0.76204 0.756454 0.9059 0.75 0.762024 0.756495 0.906 0.75 0.762008 0.756535 0.9061 0.75 0.761991 0.756574 0.9062 0.75 0.761974 0.756612 0.9063 0.75 0.761957 0.756648 0.9064 0.75 0.76194 0.756683 0.9065 0.75 0.761923 0.756716 0.9066 0.75 0.761906 0.756748 0.9067 0.75 0.761889 0.756779 0.9068 0.75 0.761871 0.756809 0.9069 0.75 0.761853 0.756837 0.907 0.75 0.761836 0.756864 0.9071 0.75 0.761818 0.756889 0.9072 0.75 0.7618 0.756913 0.9073 0.75 0.761781 0.756936 0.9074 0.75 0.761763 0.756957 0.9075 0.75 0.761745 0.756977 0.9076 0.75 0.761726 0.756996 0.9077 0.75 0.761707 0.757013 0.9078 0.75 0.761689 0.757028 0.9079 0.75 0.76167 0.757043 0.908 0.75 0.761651 0.757056 0.9081 0.75 0.761631 0.757067 0.9082 0.75 0.761612 0.757077 0.9083 0.75 0.761593 0.757086 0.9084 0.75 0.761573 0.757093 0.9085 0.75 0.761553 0.757099 0.9086 0.75 0.761534 0.757103 0.9087 0.75 0.761514 0.757106 0.9088 0.75 0.761493 0.757107 0.9089 0.75 0.761473 0.757107 0.909 0.75 0.761453 0.757106 0.9091 0.75 0.761432 0.757103 0.9092 0.75 0.761412 0.757099 0.9093 0.75 0.761391 0.757093 0.9094 0.75 0.76137 0.757086 0.9095 0.75 0.761349 0.757077 0.9096 0.75 0.761328 0.757067 0.9097 0.75 0.761307 0.757055 0.9098 0.75 0.761285 0.757042 0.9099 0.75 0.761264 0.757028 0.91 0.75 0.761242 0.757012 0.9101 0.75 0.761221 0.756995 0.9102 0.75 0.761199 0.756976 0.9103 0.75 0.761177 0.756956 0.9104 0.75 0.761155 0.756934 0.9105 0.75 0.761132 0.756911 0.9106 0.75 0.76111 0.756887 0.9107 0.75 0.761087 0.756861 0.9108 0.75 0.761065 0.756833 0.9109 0.75 0.761042 0.756805 0.911 0.75 0.761019 0.756775 0.9111 0.75 0.760996 0.756743 0.9112 0.75 0.760973 0.75671 0.9113 0.75 0.76095 0.756676 0.9114 0.75 0.760927 0.75664 0.9115 0.75 0.760903 0.756603 0.9116 0.75 0.760879 0.756564 0.9117 0.75 0.760856 0.756524 0.9118 0.75 0.760832 0.756483 0.9119 0.75 0.760808 0.756441 0.912 0.75 0.760784 0.756397 0.9121 0.75 0.760759 0.756351 0.9122 0.75 0.760735 0.756305 0.9123 0.75 0.760711 0.756257 0.9124 0.75 0.760686 0.756208 0.9125 0.75 0.760661 0.756157 0.9126 0.75 0.760637 0.756105 0.9127 0.75 0.760612 0.756052 0.9128 0.75 0.760586 0.755998 0.9129 0.75 0.760561 0.755942 0.913 0.75 0.760536 0.755885 0.9131 0.75 0.760511 0.755827 0.9132 0.75 0.760485 0.755767 0.9133 0.75 0.760459 0.755707 0.9134 0.75 0.760433 0.755645 0.9135 0.75 0.760408 0.755582 0.9136 0.75 0.760382 0.755518 0.9137 0.75 0.760355 0.755452 0.9138 0.75 0.760329 0.755386 0.9139 0.75 0.760303 0.755318 0.914 0.75 0.760276 0.755249 0.9141 0.75 0.760249 0.755179 0.9142 0.75 0.760223 0.755108 0.9143 0.75 0.760196 0.755035 0.9144 0.75 0.760169 0.754962 0.9145 0.75 0.760142 0.754888 0.9146 0.75 0.760115 0.754812 0.9147 0.75 0.760087 0.754736 0.9148 0.75 0.76006 0.754658 0.9149 0.75 0.760032 0.75458 0.915 0.75 0.760004 0.7545 0.9151 0.75 0.759977 0.75442 0.9152 0.75 0.759949 0.754338 0.9153 0.75 0.759921 0.754256 0.9154 0.75 0.759893 0.754173 0.9155 0.75 0.759864 0.754088 0.9156 0.75 0.759836 0.754003 0.9157 0.75 0.759807 0.753917 0.9158 0.75 0.759779 0.75383 0.9159 0.75 0.75975 0.753742 0.916 0.75 0.759721 0.753654 0.9161 0.75 0.759692 0.753565 0.9162 0.75 0.759663 0.753474 0.9163 0.75 0.759634 0.753384 0.9164 0.75 0.759605 0.753292 0.9165 0.75 0.759575 0.7532 0.9166 0.75 0.759546 0.753106 0.9167 0.75 0.759516 0.753013 0.9168 0.75 0.759486 0.752918 0.9169 0.75 0.759456 0.752823 0.917 0.75 0.759426 0.752727 0.9171 0.75 0.759396 0.752631 0.9172 0.75 0.759366 0.752534 0.9173 0.75 0.759336 0.752437 0.9174 0.75 0.759305 0.752338 0.9175 0.75 0.759275 0.75224 0.9176 0.75 0.759244 0.752141 0.9177 0.75 0.759213 0.752041 0.9178 0.75 0.759183 0.751941 0.9179 0.75 0.759152 0.751841 0.918 0.75 0.75912 0.75174 0.9181 0.75 0.759089 0.751639 0.9182 0.75 0.759058 0.751537 0.9183 0.75 0.759027 0.751435 0.9184 0.75 0.758995 0.751332 0.9185 0.75 0.758963 0.75123 0.9186 0.75 0.758932 0.751127 0.9187 0.75 0.7589 0.751024 0.9188 0.75 0.758868 0.75092 0.9189 0.75 0.758836 0.750816 0.919 0.75 0.758804 0.750713 0.9191 0.75 0.758771 0.750609 0.9192 0.75 0.758739 0.750504 0.9193 0.75 0.758707 0.7504 0.9194 0.75 0.758674 0.750296 0.9195 0.75 0.758641 0.750191 0.9196 0.75 0.758608 0.750087 0.9197 0.75 0.758576 0.749982 0.9198 0.75 0.758543 0.749877 0.9199 0.75 0.758509 0.749773 0.92 0.75 0.758476 0.749668 0.9201 0.75 0.758443 0.749564 0.9202 0.75 0.75841 0.749459 0.9203 0.75 0.758376 0.749355 0.9204 0.75 0.758342 0.749251 0.9205 0.75 0.758309 0.749147 0.9206 0.75 0.758275 0.749043 0.9207 0.75 0.758241 0.74894 0.9208 0.75 0.758207 0.748836 0.9209 0.75 0.758173 0.748733 0.921 0.75 0.758139 0.74863 0.9211 0.75 0.758104 0.748528 0.9212 0.75 0.75807 0.748425 0.9213 0.75 0.758035 0.748324 0.9214 0.75 0.758001 0.748222 0.9215 0.75 0.757966 0.748121 0.9216 0.75 0.757931 0.74802 0.9217 0.75 0.757896 0.74792 0.9218 0.75 0.757861 0.74782 0.9219 0.75 0.757826 0.747721 0.922 0.75 0.757791 0.747623 0.9221 0.75 0.757755 0.747524 0.9222 0.75 0.75772 0.747427 0.9223 0.75 0.757685 0.74733 0.9224 0.75 0.757649 0.747233 0.9225 0.75 0.757613 0.747138 0.9226 0.75 0.757577 0.747042 0.9227 0.75 0.757542 0.746948 0.9228 0.75 0.757506 0.746854 0.9229 0.75 0.75747 0.746761 0.923 0.75 0.757433 0.746669 0.9231 0.75 0.757397 0.746578 0.9232 0.75 0.757361 0.746487 0.9233 0.75 0.757324 0.746397 0.9234 0.75 0.757288 0.746308 0.9235 0.75 0.757251 0.74622 0.9236 0.75 0.757214 0.746133 0.9237 0.75 0.757178 0.746046 0.9238 0.75 0.757141 0.745961 0.9239 0.75 0.757104 0.745876 0.924 0.75 0.757067 0.745793 0.9241 0.75 0.757029 0.74571 0.9242 0.75 0.756992 0.745629 0.9243 0.75 0.756955 0.745548 0.9244 0.75 0.756917 0.745469 0.9245 0.75 0.75688 0.745391 0.9246 0.75 0.756842 0.745313 0.9247 0.75 0.756805 0.745237 0.9248 0.75 0.756767 0.745162 0.9249 0.75 0.756729 0.745088 0.925 0.75 0.756691 0.745016 0.9251 0.75 0.756653 0.744944 0.9252 0.75 0.756615 0.744874 0.9253 0.75 0.756577 0.744805 0.9254 0.75 0.756538 0.744737 0.9255 0.75 0.7565 0.744671 0.9256 0.75 0.756461 0.744606 0.9257 0.75 0.756423 0.744542 0.9258 0.75 0.756384 0.744479 0.9259 0.75 0.756345 0.744418 0.926 0.75 0.756307 0.744358 0.9261 0.75 0.756268 0.7443 0.9262 0.75 0.756229 0.744243 0.9263 0.75 0.75619 0.744187 0.9264 0.75 0.756151 0.744133 0.9265 0.75 0.756111 0.74408 0.9266 0.75 0.756072 0.744028 0.9267 0.75 0.756033 0.743978 0.9268 0.75 0.755993 0.74393 0.9269 0.75 0.755954 0.743883 0.927 0.75 0.755914 0.743838 0.9271 0.75 0.755875 0.743794 0.9272 0.75 0.755835 0.743751 0.9273 0.75 0.755795 0.74371 0.9274 0.75 0.755755 0.743671 0.9275 0.75 0.755715 0.743633 0.9276 0.75 0.755675 0.743597 0.9277 0.75 0.755635 0.743563 0.9278 0.75 0.755595 0.74353 0.9279 0.75 0.755554 0.743499 0.928 0.75 0.755514 0.743469 0.9281 0.75 0.755474 0.743441 0.9282 0.75 0.755433 0.743414 0.9283 0.75 0.755392 0.74339 0.9284 0.75 0.755352 0.743367 0.9285 0.75 0.755311 0.743345 0.9286 0.75 0.75527 0.743325 0.9287 0.75 0.755229 0.743307 0.9288 0.75 0.755189 0.743291 0.9289 0.75 0.755148 0.743276 0.929 0.75 0.755106 0.743263 0.9291 0.75 0.755065 0.743252 0.9292 0.75 0.755024 0.743243 0.9293 0.75 0.754983 0.743235 0.9294 0.75 0.754942 0.743229 0.9295 0.75 0.7549 0.743225 0.9296 0.75 0.754859 0.743222 0.9297 0.75 0.754817 0.743221 0.9298 0.75 0.754775 0.743222 0.9299 0.75 0.754734 0.743225 0.93 0.75 0.754692 0.743229 0.9301 0.75 0.75465 0.743235 0.9302 0.75 0.754608 0.743243 0.9303 0.75 0.754567 0.743253 0.9304 0.75 0.754525 0.743264 0.9305 0.75 0.754482 0.743277 0.9306 0.75 0.75444 0.743292 0.9307 0.75 0.754398 0.743309 0.9308 0.75 0.754356 0.743327 0.9309 0.75 0.754314 0.743347 0.931 0.75 0.754271 0.743369 0.9311 0.75 0.754229 0.743393 0.9312 0.75 0.754186 0.743418 0.9313 0.75 0.754144 0.743445 0.9314 0.75 0.754101 0.743474 0.9315 0.75 0.754059 0.743505 0.9316 0.75 0.754016 0.743537 0.9317 0.75 0.753973 0.743571 0.9318 0.75 0.75393 0.743606 0.9319 0.75 0.753888 0.743644 0.932 0.75 0.753845 0.743683 0.9321 0.75 0.753802 0.743724 0.9322 0.75 0.753759 0.743766 0.9323 0.75 0.753716 0.74381 0.9324 0.75 0.753672 0.743856 0.9325 0.75 0.753629 0.743903 0.9326 0.75 0.753586 0.743952 0.9327 0.75 0.753543 0.744003 0.9328 0.75 0.753499 0.744055 0.9329 0.75 0.753456 0.744109 0.933 0.75 0.753413 0.744165 0.9331 0.75 0.753369 0.744222 0.9332 0.75 0.753326 0.74428 0.9333 0.75 0.753282 0.74434 0.9334 0.75 0.753238 0.744402 0.9335 0.75 0.753195 0.744465 0.9336 0.75 0.753151 0.74453 0.9337 0.75 0.753107 0.744596 0.9338 0.75 0.753063 0.744664 0.9339 0.75 0.75302 0.744733 0.934 0.75 0.752976 0.744804 0.9341 0.75 0.752932 0.744876 0.9342 0.75 0.752888 0.74495 0.9343 0.75 0.752844 0.745025 0.9344 0.75 0.7528 0.745101 0.9345 0.75 0.752756 0.745179 0.9346 0.75 0.752711 0.745258 0.9347 0.75 0.752667 0.745338 0.9348 0.75 0.752623 0.74542 0.9349 0.75 0.752579 0.745503 0.935 0.75 0.752535 0.745587 0.9351 0.75 0.75249 0.745672 0.9352 0.75 0.752446 0.745759 0.9353 0.75 0.752401 0.745847 0.9354 0.75 0.752357 0.745936 0.9355 0.75 0.752313 0.746026 0.9356 0.75 0.752268 0.746117 0.9357 0.75 0.752223 0.74621 0.9358 0.75 0.752179 0.746303 0.9359 0.75 0.752134 0.746398 0.936 0.75 0.75209 0.746493 0.9361 0.75 0.752045 0.74659 0.9362 0.75 0.752 0.746688 0.9363 0.75 0.751956 0.746786 0.9364 0.75 0.751911 0.746886 0.9365 0.75 0.751866 0.746986 0.9366 0.75 0.751821 0.747087 0.9367 0.75 0.751776 0.74719 0.9368 0.75 0.751731 0.747293 0.9369 0.75 0.751687 0.747396 0.937 0.75 0.751642 0.747501 0.9371 0.75 0.751597 0.747606 0.9372 0.75 0.751552 0.747712 0.9373 0.75 0.751507 0.747819 0.9374 0.75 0.751462 0.747926 0.9375 0.75 0.751417 0.748034 0.9376 0.75 0.751372 0.748143 0.9377 0.75 0.751326 0.748252 0.9378 0.75 0.751281 0.748362 0.9379 0.75 0.751236 0.748472 0.938 0.75 0.751191 0.748583 0.9381 0.75 0.751146 0.748694 0.9382 0.75 0.751101 0.748805 0.9383 0.75 0.751055 0.748917 0.9384 0.75 0.75101 0.749029 0.9385 0.75 0.750965 0.749142 0.9386 0.75 0.75092 0.749255 0.9387 0.75 0.750875 0.749368 0.9388 0.75 0.750829 0.749481 0.9389 0.75 0.750784 0.749595 0.939 0.75 0.750739 0.749708 0.9391 0.75 0.750693 0.749822 0.9392 0.75 0.750648 0.749936 0.9393 0.75 0.750603 0.75005 0.9394 0.75 0.750557 0.750164 0.9395 0.75 0.750512 0.750278 0.9396 0.75 0.750467 0.750392 0.9397 0.75 0.750421 0.750506 0.9398 0.75 0.750376 0.750619 0.9399 0.75 0.75033 0.750733 0.94 0.75 0.750285 0.750846 0.9401 0.75 0.75024 0.75096 0.9402 0.75 0.750194 0.751073 0.9403 0.75 0.750149 0.751185 0.9404 0.75 0.750103 0.751298 0.9405 0.75 0.750058 0.75141 0.9406 0.75 0.750012 0.751521 0.9407 0.75 0.749967 0.751632 0.9408 0.75 0.749922 0.751743 0.9409 0.75 0.749876 0.751853 0.941 0.75 0.749831 0.751963 0.9411 0.75 0.749785 0.752072 0.9412 0.75 0.74974 0.752181 0.9413 0.75 0.749694 0.752289 0.9414 0.75 0.749649 0.752396 0.9415 0.75 0.749604 0.752503 0.9416 0.75 0.749558 0.752609 0.9417 0.75 0.749513 0.752714 0.9418 0.75 0.749467 0.752818 0.9419 0.75 0.749422 0.752922 0.942 0.75 0.749377 0.753024 0.9421 0.75 0.749331 0.753126 0.9422 0.75 0.749286 0.753227 0.9423 0.75 0.749241 0.753327 0.9424 0.75 0.749195 0.753426 0.9425 0.75 0.74915 0.753524 0.9426 0.75 0.749105 0.753621 0.9427 0.75 0.749059 0.753716 0.9428 0.75 0.749014 0.753811 0.9429 0.75 0.748969 0.753904 0.943 0.75 0.748923 0.753997 0.9431 0.75 0.748878 0.754088 0.9432 0.75 0.748833 0.754178 0.9433 0.75 0.748788 0.754266 0.9434 0.75 0.748743 0.754353 0.9435 0.75 0.748697 0.754439 0.9436 0.75 0.748652 0.754524 0.9437 0.75 0.748607 0.754607 0.9438 0.75 0.748562 0.754689 0.9439 0.75 0.748517 0.754769 0.944 0.75 0.748472 0.754848 0.9441 0.75 0.748427 0.754925 0.9442 0.75 0.748382 0.755001 0.9443 0.75 0.748337 0.755075 0.9444 0.75 0.748292 0.755148 0.9445 0.75 0.748247 0.755219 0.9446 0.75 0.748202 0.755288 0.9447 0.75 0.748157 0.755356 0.9448 0.75 0.748112 0.755422 0.9449 0.75 0.748067 0.755486 0.945 0.75 0.748022 0.755548 0.9451 0.75 0.747978 0.755609 0.9452 0.75 0.747933 0.755668 0.9453 0.75 0.747888 0.755725 0.9454 0.75 0.747844 0.755781 0.9455 0.75 0.747799 0.755834 0.9456 0.75 0.747754 0.755886 0.9457 0.75 0.74771 0.755935 0.9458 0.75 0.747665 0.755983 0.9459 0.75 0.747621 0.756029 0.946 0.75 0.747576 0.756073 0.9461 0.75 0.747532 0.756115 0.9462 0.75 0.747488 0.756155 0.9463 0.75 0.747443 0.756192 0.9464 0.75 0.747399 0.756228 0.9465 0.75 0.747355 0.756262 0.9466 0.75 0.74731 0.756294 0.9467 0.75 0.747266 0.756323 0.9468 0.75 0.747222 0.756351 0.9469 0.75 0.747178 0.756376 0.947 0.75 0.747134 0.7564 0.9471 0.75 0.74709 0.756421 0.9472 0.75 0.747046 0.75644 0.9473 0.75 0.747002 0.756457 0.9474 0.75 0.746958 0.756472 0.9475 0.75 0.746915 0.756484 0.9476 0.75 0.746871 0.756495 0.9477 0.75 0.746827 0.756503 0.9478 0.75 0.746784 0.756509 0.9479 0.75 0.74674 0.756512 0.948 0.75 0.746697 0.756514 0.9481 0.75 0.746653 0.756513 0.9482 0.75 0.74661 0.756511 0.9483 0.75 0.746566 0.756505 0.9484 0.75 0.746523 0.756498 0.9485 0.75 0.74648 0.756488 0.9486 0.75 0.746437 0.756477 0.9487 0.75 0.746394 0.756463 0.9488 0.75 0.746351 0.756446 0.9489 0.75 0.746308 0.756428 0.949 0.75 0.746265 0.756407 0.9491 0.75 0.746222 0.756384 0.9492 0.75 0.746179 0.756359 0.9493 0.75 0.746136 0.756331 0.9494 0.75 0.746094 0.756302 0.9495 0.75 0.746051 0.75627 0.9496 0.75 0.746009 0.756236 0.9497 0.75 0.745966 0.756199 0.9498 0.75 0.745924 0.756161 0.9499 0.75 0.745882 0.75612 0.95 0.75 0.745839 0.756077 0.9501 0.75 0.745797 0.756032 0.9502 0.75 0.745755 0.755985 0.9503 0.75 0.745713 0.755935 0.9504 0.75 0.745671 0.755884 0.9505 0.75 0.745629 0.75583 0.9506 0.75 0.745588 0.755774 0.9507 0.75 0.745546 0.755717 0.9508 0.75 0.745504 0.755657 0.9509 0.75 0.745463 0.755595 0.951 0.75 0.745421 0.755531 0.9511 0.75 0.74538 0.755465 0.9512 0.75 0.745339 0.755396 0.9513 0.75 0.745297 0.755326 0.9514 0.75 0.745256 0.755254 0.9515 0.75 0.745215 0.75518 0.9516 0.75 0.745174 0.755104 0.9517 0.75 0.745134 0.755027 0.9518 0.75 0.745093 0.754947 0.9519 0.75 0.745052 0.754865 0.952 0.75 0.745012 0.754782 0.9521 0.75 0.744971 0.754697 0.9522 0.75 0.744931 0.75461 0.9523 0.75 0.74489 0.754521 0.9524 0.75 0.74485 0.75443 0.9525 0.75 0.74481 0.754338 0.9526 0.75 0.74477 0.754244 0.9527 0.75 0.74473 0.754149 0.9528 0.75 0.74469 0.754052 0.9529 0.75 0.744651 0.753953 0.953 0.75 0.744611 0.753853 0.9531 0.75 0.744571 0.753752 0.9532 0.75 0.744532 0.753648 0.9533 0.75 0.744493 0.753544 0.9534 0.75 0.744454 0.753438 0.9535 0.75 0.744414 0.75333 0.9536 0.75 0.744375 0.753222 0.9537 0.75 0.744337 0.753112 0.9538 0.75 0.744298 0.753001 0.9539 0.75 0.744259 0.752888 0.954 0.75 0.744221 0.752775 0.9541 0.75 0.744182 0.75266 0.9542 0.75 0.744144 0.752544 0.9543 0.75 0.744106 0.752427 0.9544 0.75 0.744068 0.752309 0.9545 0.75 0.74403 0.752191 0.9546 0.75 0.743992 0.752071 0.9547 0.75 0.743954 0.75195 0.9548 0.75 0.743916 0.751829 0.9549 0.75 0.743879 0.751706 0.955 0.75 0.743841 0.751583 0.9551 0.75 0.743804 0.75146 0.9552 0.75 0.743767 0.751335 0.9553 0.75 0.74373 0.75121 0.9554 0.75 0.743693 0.751085 0.9555 0.75 0.743656 0.750959 0.9556 0.75 0.74362 0.750832 0.9557 0.75 0.743583 0.750705 0.9558 0.75 0.743547 0.750578 0.9559 0.75 0.74351 0.750451 0.956 0.75 0.743474 0.750323 0.9561 0.75 0.743438 0.750195 0.9562 0.75 0.743402 0.750066 0.9563 0.75 0.743367 0.749938 0.9564 0.75 0.743331 0.74981 0.9565 0.75 0.743296 0.749681 0.9566 0.75 0.74326 0.749553 0.9567 0.75 0.743225 0.749425 0.9568 0.75 0.74319 0.749297 0.9569 0.75 0.743155 0.749169 0.957 0.75 0.74312 0.749041 0.9571 0.75 0.743086 0.748914 0.9572 0.75 0.743051 0.748787 0.9573 0.75 0.743017 0.74866 0.9574 0.75 0.742983 0.748534 0.9575 0.75 0.742949 0.748408 0.9576 0.75 0.742915 0.748283 0.9577 0.75 0.742881 0.748159 0.9578 0.75 0.742848 0.748035 0.9579 0.75 0.742814 0.747912 0.958 0.75 0.742781 0.74779 0.9581 0.75 0.742748 0.747668 0.9582 0.75 0.742715 0.747548 0.9583 0.75 0.742682 0.747428 0.9584 0.75 0.742649 0.74731 0.9585 0.75 0.742617 0.747192 0.9586 0.75 0.742584 0.747076 0.9587 0.75 0.742552 0.74696 0.9588 0.75 0.74252 0.746846 0.9589 0.75 0.742488 0.746733 0.959 0.75 0.742456 0.746622 0.9591 0.75 0.742425 0.746512 0.9592 0.75 0.742394 0.746403 0.9593 0.75 0.742362 0.746296 0.9594 0.75 0.742331 0.74619 0.9595 0.75 0.7423 0.746086 0.9596 0.75 0.74227 0.745983 0.9597 0.75 0.742239 0.745882 0.9598 0.75 0.742209 0.745783 0.9599 0.75 0.742179 0.745685 0.96 0.75 0.742149 0.74559 0.9601 0.75 0.742119 0.745496 0.9602 0.75 0.742089 0.745404 0.9603 0.75 0.74206 0.745314 0.9604 0.75 0.74203 0.745226 0.9605 0.75 0.742001 0.74514 0.9606 0.75 0.741972 0.745056 0.9607 0.75 0.741943 0.744975 0.9608 0.75 0.741915 0.744895 0.9609 0.75 0.741886 0.744818 0.961 0.75 0.741858 0.744743 0.9611 0.75 0.74183 0.74467 0.9612 0.75 0.741802 0.7446 0.9613 0.75 0.741775 0.744532 0.9614 0.75 0.741747 0.744466 0.9615 0.75 0.74172 0.744403 0.9616 0.75 0.741693 0.744342 0.9617 0.75 0.741666 0.744284 0.9618 0.75 0.741639 0.744228 0.9619 0.75 0.741613 0.744175 0.962 0.75 0.741586 0.744125 0.9621 0.75 0.74156 0.744077 0.9622 0.75 0.741534 0.744032 0.9623 0.75 0.741509 0.74399 0.9624 0.75 0.741483 0.74395 0.9625 0.75 0.741458 0.743913 0.9626 0.75 0.741433 0.743879 0.9627 0.75 0.741408 0.743848 0.9628 0.75 0.741383 0.74382 0.9629 0.75 0.741359 0.743794 0.963 0.75 0.741335 0.743772 0.9631 0.75 0.741311 0.743752 0.9632 0.75 0.741287 0.743736 0.9633 0.75 0.741263 0.743722 0.9634 0.75 0.74124 0.743711 0.9635 0.75 0.741217 0.743703 0.9636 0.75 0.741194 0.743698 0.9637 0.75 0.741171 0.743697 0.9638 0.75 0.741148 0.743698 0.9639 0.75 0.741126 0.743702 0.964 0.75 0.741104 0.74371 0.9641 0.75 0.741082 0.74372 0.9642 0.75 0.74106 0.743733 0.9643 0.75 0.741039 0.74375 0.9644 0.75 0.741018 0.74377 0.9645 0.75 0.740997 0.743792 0.9646 0.75 0.740976 0.743818 0.9647 0.75 0.740955 0.743847 0.9648 0.75 0.740935 0.743879 0.9649 0.75 0.740915 0.743914 0.965 0.75 0.740895 0.743952 0.9651 0.75 0.740876 0.743993 0.9652 0.75 0.740856 0.744037 0.9653 0.75 0.740837 0.744084 0.9654 0.75 0.740818 0.744134 0.9655 0.75 0.7408 0.744187 0.9656 0.75 0.740781 0.744243 0.9657 0.75 0.740763 0.744302 0.9658 0.75 0.740745 0.744364 0.9659 0.75 0.740728 0.744429 0.966 0.75 0.74071 0.744497 0.9661 0.75 0.740693 0.744568 0.9662 0.75 0.740676 0.744641 0.9663 0.75 0.74066 0.744718 0.9664 0.75 0.740643 0.744797 0.9665 0.75 0.740627 0.744879 0.9666 0.75 0.740611 0.744964 0.9667 0.75 0.740595 0.745051 0.9668 0.75 0.74058 0.745141 0.9669 0.75 0.740565 0.745234 0.967 0.75 0.74055 0.745329 0.9671 0.75 0.740535 0.745427 0.9672 0.75 0.740521 0.745528 0.9673 0.75 0.740507 0.745631 0.9674 0.75 0.740493 0.745736 0.9675 0.75 0.74048 0.745844 0.9676 0.75 0.740466 0.745954 0.9677 0.75 0.740453 0.746066 0.9678 0.75 0.740441 0.746181 0.9679 0.75 0.740428 0.746297 0.968 0.75 0.740416 0.746416 0.9681 0.75 0.740404 0.746537 0.9682 0.75 0.740392 0.74666 0.9683 0.75 0.740381 0.746785 0.9684 0.75 0.74037 0.746912 0.9685 0.75 0.740359 0.747041 0.9686 0.75 0.740348 0.747171 0.9687 0.75 0.740338 0.747304 0.9688 0.75 0.740328 0.747438 0.9689 0.75 0.740318 0.747573 0.969 0.75 0.740309 0.74771 0.9691 0.75 0.7403 0.747848 0.9692 0.75 0.740291 0.747988 0.9693 0.75 0.740282 0.748129 0.9694 0.75 0.740274 0.748271 0.9695 0.75 0.740266 0.748415 0.9696 0.75 0.740259 0.748559 0.9697 0.75 0.740251 0.748705 0.9698 0.75 0.740244 0.748851 0.9699 0.75 0.740237 0.748998 0.97 0.75 0.740231 0.749146 0.9701 0.75 0.740225 0.749295 0.9702 0.75 0.740219 0.749444 0.9703 0.75 0.740213 0.749594 0.9704 0.75 0.740208 0.749744 0.9705 0.75 0.740203 0.749894 0.9706 0.75 0.740198 0.750045 0.9707 0.75 0.740194 0.750196 0.9708 0.75 0.74019 0.750347 0.9709 0.75 0.740186 0.750498 0.971 0.75 0.740183 0.750649 0.9711 0.75 0.74018 0.7508 0.9712 0.75 0.740177 0.75095 0.9713 0.75 0.740175 0.7511 0.9714 0.75 0.740172 0.751249 0.9715 0.75 0.740171 0.751398 0.9716 0.75 0.740169 0.751547 0.9717 0.75 0.740168 0.751694 0.9718 0.75 0.740167 0.751841 0.9719 0.75 0.740167 0.751987 0.972 0.75 0.740166 0.752131 0.9721 0.75 0.740166 0.752275 0.9722 0.75 0.740167 0.752417 0.9723 0.75 0.740168 0.752559 0.9724 0.75 0.740169 0.752698 0.9725 0.75 0.74017 0.752836 0.9726 0.75 0.740172 0.752973 0.9727 0.75 0.740174 0.753108 0.9728 0.75 0.740177 0.753241 0.9729 0.75 0.74018 0.753372 0.973 0.75 0.740183 0.753502 0.9731 0.75 0.740186 0.753629 0.9732 0.75 0.74019 0.753754 0.9733 0.75 0.740194 0.753877 0.9734 0.75 0.740199 0.753997 0.9735 0.75 0.740204 0.754115 0.9736 0.75 0.740209 0.754231 0.9737 0.75 0.740214 0.754344 0.9738 0.75 0.74022 0.754454 0.9739 0.75 0.740227 0.754561 0.974 0.75 0.740233 0.754666 0.9741 0.75 0.74024 0.754768 0.9742 0.75 0.740248 0.754866 0.9743 0.75 0.740255 0.754962 0.9744 0.75 0.740264 0.755054 0.9745 0.75 0.740272 0.755143 0.9746 0.75 0.740281 0.755229 0.9747 0.75 0.74029 0.755311 0.9748 0.75 0.7403 0.75539 0.9749 0.75 0.74031 0.755465 0.975 0.75 0.74032 0.755537 0.9751 0.75 0.74033 0.755605 0.9752 0.75 0.740342 0.755669 0.9753 0.75 0.740353 0.755729 0.9754 0.75 0.740365 0.755786 0.9755 0.75 0.740377 0.755838 0.9756 0.75 0.740389 0.755887 0.9757 0.75 0.740402 0.755931 0.9758 0.75 0.740416 0.755971 0.9759 0.75 0.740429 0.756007 0.976 0.75 0.740444 0.756039 0.9761 0.75 0.740458 0.756066 0.9762 0.75 0.740473 0.756089 0.9763 0.75 0.740488 0.756108 0.9764 0.75 0.740504 0.756123 0.9765 0.75 0.74052 0.756133 0.9766 0.75 0.740536 0.756138 0.9767 0.75 0.740553 0.756139 0.9768 0.75 0.74057 0.756135 0.9769 0.75 0.740588 0.756127 0.977 0.75 0.740606 0.756114 0.9771 0.75 0.740624 0.756097 0.9772 0.75 0.740643 0.756075 0.9773 0.75 0.740663 0.756049 0.9774 0.75 0.740682 0.756017 0.9775 0.75 0.740702 0.755982 0.9776 0.75 0.740723 0.755941 0.9777 0.75 0.740744 0.755896 0.9778 0.75 0.740765 0.755846 0.9779 0.75 0.740787 0.755792 0.978 0.75 0.740809 0.755733 0.9781 0.75 0.740831 0.75567 0.9782 0.75 0.740854 0.755601 0.9783 0.75 0.740878 0.755529 0.9784 0.75 0.740902 0.755452 0.9785 0.75 0.740926 0.75537 0.9786 0.75 0.74095 0.755284 0.9787 0.75 0.740976 0.755193 0.9788 0.75 0.741001 0.755099 0.9789 0.75 0.741027 0.754999 0.979 0.75 0.741053 0.754896 0.9791 0.75 0.74108 0.754788 0.9792 0.75 0.741108 0.754677 0.9793 0.75 0.741135 0.754561 0.9794 0.75 0.741163 0.754441 0.9795 0.75 0.741192 0.754317 0.9796 0.75 0.741221 0.754189 0.9797 0.75 0.74125 0.754058 0.9798 0.75 0.74128 0.753923 0.9799 0.75 0.741311 0.753784 0.98 0.75 0.741342 0.753642 0.9801 0.75 0.741373 0.753496 0.9802 0.75 0.741405 0.753347 0.9803 0.75 0.741437 0.753195 0.9804 0.75 0.741469 0.75304 0.9805 0.75 0.741502 0.752881 0.9806 0.75 0.741536 0.75272 0.9807 0.75 0.74157 0.752556 0.9808 0.75 0.741604 0.75239 0.9809 0.75 0.741639 0.752221 0.981 0.75 0.741675 0.752049 0.9811 0.75 0.741711 0.751876 0.9812 0.75 0.741747 0.7517 0.9813 0.75 0.741784 0.751523 0.9814 0.75 0.741821 0.751343 0.9815 0.75 0.741859 0.751162 0.9816 0.75 0.741897 0.75098 0.9817 0.75 0.741936 0.750796 0.9818 0.75 0.741975 0.750611 0.9819 0.75 0.742014 0.750425 0.982 0.75 0.742055 0.750238 0.9821 0.75 0.742095 0.75005 0.9822 0.75 0.742136 0.749862 0.9823 0.75 0.742178 0.749674 0.9824 0.75 0.74222 0.749485 0.9825 0.75 0.742263 0.749297 0.9826 0.75 0.742306 0.749109 0.9827 0.75 0.742349 0.748921 0.9828 0.75 0.742393 0.748734 0.9829 0.75 0.742438 0.748548 0.983 0.75 0.742483 0.748362 0.9831 0.75 0.742528 0.748178 0.9832 0.75 0.742574 0.747995 0.9833 0.75 0.742621 0.747814 0.9834 0.75 0.742668 0.747635 0.9835 0.75 0.742716 0.747457 0.9836 0.75 0.742764 0.747282 0.9837 0.75 0.742812 0.747109 0.9838 0.75 0.742861 0.746939 0.9839 0.75 0.742911 0.746771 0.984 0.75 0.742961 0.746607 0.9841 0.75 0.743012 0.746445 0.9842 0.75 0.743063 0.746287 0.9843 0.75 0.743115 0.746133 0.9844 0.75 0.743167 0.745982 0.9845 0.75 0.743219 0.745836 0.9846 0.75 0.743273 0.745693 0.9847 0.75 0.743327 0.745555 0.9848 0.75 0.743381 0.745422 0.9849 0.75 0.743436 0.745293 0.985 0.75 0.743491 0.745169 0.9851 0.75 0.743547 0.745051 0.9852 0.75 0.743603 0.744937 0.9853 0.75 0.74366 0.744829 0.9854 0.75 0.743718 0.744727 0.9855 0.75 0.743776 0.744631 0.9856 0.75 0.743835 0.744541 0.9857 0.75 0.743894 0.744457 0.9858 0.75 0.743953 0.744379 0.9859 0.75 0.744014 0.744308 0.986 0.75 0.744074 0.744244 0.9861 0.75 0.744136 0.744186 0.9862 0.75 0.744198 0.744135 0.9863 0.75 0.74426 0.744092 0.9864 0.75 0.744323 0.744055 0.9865 0.75 0.744387 0.744026 0.9866 0.75 0.744451 0.744005 0.9867 0.75 0.744516 0.743991 0.9868 0.75 0.744581 0.743984 0.9869 0.75 0.744647 0.743986 0.987 0.75 0.744713 0.743995 0.9871 0.75 0.74478 0.744012 0.9872 0.75 0.744848 0.744037 0.9873 0.75 0.744916 0.74407 0.9874 0.75 0.744984 0.744111 0.9875 0.75 0.745054 0.74416 0.9876 0.75 0.745124 0.744218 0.9877 0.75 0.745194 0.744284 0.9878 0.75 0.745265 0.744357 0.9879 0.75 0.745337 0.744439 0.988 0.75 0.745409 0.744529 0.9881 0.75 0.745482 0.744627 0.9882 0.75 0.745555 0.744733 0.9883 0.75 0.745629 0.744848 0.9884 0.75 0.745703 0.74497 0.9885 0.75 0.745778 0.7451 0.9886 0.75 0.745854 0.745237 0.9887 0.75 0.745931 0.745383 0.9888 0.75 0.746007 0.745536 0.9889 0.75 0.746085 0.745696 0.989 0.75 0.746163 0.745864 0.9891 0.75 0.746242 0.746038 0.9892 0.75 0.746321 0.74622 0.9893 0.75 0.746401 0.746408 0.9894 0.75 0.746482 0.746603 0.9895 0.75 0.746563 0.746804 0.9896 0.75 0.746645 0.747011 0.9897 0.75 0.746727 0.747224 0.9898 0.75 0.74681 0.747443 0.9899 0.75 0.746894 0.747667 0.99 0.75 0.746978 0.747895 0.9901 0.75 0.747063 0.748128 0.9902 0.75 0.747149 0.748366 0.9903 0.75 0.747235 0.748608 0.9904 0.75 0.747322 0.748853 0.9905 0.75 0.747409 0.749101 0.9906 0.75 0.747497 0.749352 0.9907 0.75 0.747586 0.749605 0.9908 0.75 0.747675 0.749861 0.9909 0.75 0.747765 0.750118 0.991 0.75 0.747856 0.750376 0.9911 0.75 0.747947 0.750635 0.9912 0.75 0.748039 0.750894 0.9913 0.75 0.748131 0.751152 0.9914 0.75 0.748225 0.75141 0.9915 0.75 0.748318 0.751666 0.9916 0.75 0.748413 0.75192 0.9917 0.75 0.748508 0.752172 0.9918 0.75 0.748604 0.752421 0.9919 0.75 0.7487 0.752666 0.992 0.75 0.748798 0.752907 0.9921 0.75 0.748895 0.753143 0.9922 0.75 0.748994 0.753374 0.9923 0.75 0.749093 0.753599 0.9924 0.75 0.749193 0.753817 0.9925 0.75 0.749293 0.754028 0.9926 0.75 0.749394 0.754231 0.9927 0.75 0.749496 0.754426 0.9928 0.75 0.749599 0.754612 0.9929 0.75 0.749702 0.754788 0.993 0.75 0.749806 0.754954 0.9931 0.75 0.74991 0.755109 0.9932 0.75 0.750015 0.755253 0.9933 0.75 0.750121 0.755384 0.9934 0.75 0.750228 0.755503 0.9935 0.75 0.750335 0.755608 0.9936 0.75 0.750443 0.7557 0.9937 0.75 0.750552 0.755777 0.9938 0.75 0.750661 0.755839 0.9939 0.75 0.750771 0.755885 0.994 0.75 0.750882 0.755916 0.9941 0.75 0.750993 0.75593 0.9942 0.75 0.751105 0.755927 0.9943 0.75 0.751218 0.755907 0.9944 0.75 0.751332 0.755869 0.9945 0.75 0.751446 0.755813 0.9946 0.75 0.751561 0.755738 0.9947 0.75 0.751677 0.755645 0.9948 0.75 0.751793 0.755533 0.9949 0.75 0.75191 0.755402 0.995 0.75 0.752028 0.755252 0.9951 0.75 0.752147 0.755082 0.9952 0.75 0.752266 0.754893 0.9953 0.75 0.752386 0.754685 0.9954 0.75 0.752507 0.754458 0.9955 0.75 0.752628 0.754212 0.9956 0.75 0.75275 0.753948 0.9957 0.75 0.752873 0.753665 0.9958 0.75 0.752997 0.753365 0.9959 0.75 0.753121 0.753048 0.996 0.75 0.753246 0.752714 0.9961 0.75 0.753372 0.752365 0.9962 0.75 0.753499 0.752001 0.9963 0.75 0.753626 0.751624 0.9964 0.75 0.753754 0.751234 0.9965 0.75 0.753883 0.750833 0.9966 0.75 0.754013 0.750423 0.9967 0.75 0.754143 0.750004 0.9968 0.75 0.754274 0.74958 0.9969 0.75 0.754406 0.749151 0.997 0.75 0.754539 0.74872 0.9971 0.75 0.754672 0.748289 0.9972 0.75 0.754806 0.747861 0.9973 0.75 0.754941 0.747438 0.9974 0.75 0.755077 0.747024 0.9975 0.75 0.755213 0.746621 0.9976 0.75 0.75535 0.746234 0.9977 0.75 0.755488 0.745865 0.9978 0.75 0.755627 0.745518 0.9979 0.75 0.755767 0.745199 0.998 0.75 0.755907 0.744911 0.9981 0.75 0.756048 0.74466 0.9982 0.75 0.75619 0.744449 0.9983 0.75 0.756333 0.744286 0.9984 0.75 0.756476 0.744175 0.9985 0.75 0.75662 0.744122 0.9986 0.75 0.756765 0.744136 0.9987 0.75 0.756911 0.744221 0.9988 0.75 0.757058 0.744386 0.9989 0.75 0.757205 0.744638 0.999 0.75 0.757353 0.744985 0.9991 0.75 0.757502 0.745437 0.9992 0.75 0.757652 0.746002 0.9993 0.75 0.757803 0.746689 0.9994 0.75 0.757954 0.74751 0.9995 0.75 0.758106 0.748474 0.9996 0.75 0.758259 0.749594 0.9997 0.75 0.758413 0.750879 0.9998 0.75 0.758568 0.752344 0.9999 0.75 0.758723 0.754001 gsl/doc/examples/histogram2d.txt0000644000175000017500000004253713536674414015314 0ustar eddedd0.899966 0.116291 0.80674 0.19472 0.800115 0.148497 0.894472 0.174431 0.840206 0.173995 0.868793 0.165864 0.811033 0.18044 0.837557 0.116857 0.831819 0.139231 0.788168 0.921319 0.319718 0.333354 0.752394 0.994372 0.845391 0.18983 0.856523 0.149861 0.842882 0.118228 0.808548 0.111741 0.340896 0.364813 0.864304 0.163713 0.862805 0.109958 0.860905 0.110781 0.384008 0.35024 0.770114 0.928891 0.354064 0.312812 0.841158 0.108232 0.807978 0.189162 0.795253 0.943185 0.391476 0.340039 0.859303 0.117067 0.827307 0.104534 0.810469 0.150618 0.737134 0.951103 0.866302 0.136599 0.709051 0.946011 0.851619 0.16776 0.860766 0.147854 0.35857 0.333873 0.361889 0.343654 0.831708 0.141925 0.87108 0.162461 0.897457 0.137043 0.878006 0.114081 0.866731 0.182974 0.820844 0.162196 0.815071 0.104617 0.849699 0.156737 0.834856 0.17238 0.393958 0.30423 0.810402 0.112164 0.801469 0.138106 0.827217 0.15998 0.853795 0.143263 0.842276 0.171684 0.853507 0.168578 0.362503 0.312293 0.337048 0.382007 0.381601 0.331575 0.734737 0.914223 0.856376 0.168519 0.748303 0.943634 0.89538 0.186816 0.385072 0.348444 0.818705 0.190048 0.732254 0.967964 0.850974 0.198366 0.827293 0.180474 0.89933 0.154155 0.803268 0.163895 0.844868 0.125872 0.749071 0.944566 0.397023 0.399672 0.379145 0.365154 0.318067 0.338998 0.877629 0.128381 0.849326 0.123641 0.823407 0.167771 0.880126 0.164926 0.352899 0.312083 0.832296 0.177788 0.831357 0.194334 0.897504 0.133455 0.763468 0.934284 0.854961 0.168276 0.849292 0.109993 0.869613 0.173558 0.801348 0.126318 0.894913 0.14234 0.813688 0.100025 0.882949 0.100375 0.7156 0.901182 0.848839 0.172997 0.849797 0.196577 0.834623 0.152989 0.830009 0.171303 0.845395 0.16828 0.89401 0.102366 0.806414 0.186953 0.808913 0.131955 0.809124 0.194111 0.880257 0.175335 0.839972 0.140848 0.776083 0.907614 0.807692 0.101978 0.801362 0.138462 0.829138 0.137398 0.827225 0.11179 0.874706 0.116489 0.806729 0.117269 0.89166 0.168095 0.386903 0.325476 0.821928 0.136924 0.864427 0.127784 0.860164 0.150035 0.376964 0.31513 0.858588 0.172067 0.897354 0.169678 0.842437 0.168082 0.894196 0.159821 0.870159 0.19136 0.855665 0.167097 0.845164 0.195304 0.7118 0.933506 0.893737 0.110966 0.850509 0.195682 0.898082 0.107074 0.835303 0.168072 0.841932 0.158701 0.859911 0.146265 0.844653 0.107289 0.852975 0.138776 0.787248 0.900223 0.834435 0.119132 0.314472 0.390359 0.866022 0.144453 0.824301 0.176086 0.826908 0.119098 0.845025 0.113269 0.811317 0.148692 0.892082 0.193395 0.347879 0.361244 0.836917 0.162466 0.384919 0.364521 0.387197 0.365293 0.804477 0.138181 0.846728 0.16697 0.842063 0.10195 0.739651 0.999118 0.844578 0.163776 0.847331 0.151524 0.81299 0.139674 0.884916 0.177149 0.84788 0.102473 0.307968 0.369845 0.804579 0.17367 0.899996 0.174979 0.833044 0.18237 0.850961 0.190251 0.336728 0.373908 0.818903 0.10368 0.870906 0.183735 0.814861 0.108184 0.789408 0.915248 0.822153 0.153161 0.875522 0.104078 0.376628 0.357519 0.878207 0.120464 0.801034 0.199693 0.803617 0.189206 0.880092 0.130658 0.321686 0.370642 0.7517 0.950898 0.314004 0.367273 0.875763 0.180728 0.832598 0.153752 0.87151 0.133585 0.860904 0.142586 0.877281 0.194561 0.842129 0.17105 0.819187 0.164834 0.329687 0.315548 0.885096 0.172157 0.895017 0.14303 0.38582 0.343933 0.830734 0.141008 0.806036 0.127851 0.894101 0.180436 0.895906 0.199972 0.893131 0.124855 0.304358 0.344473 0.857626 0.149648 0.313656 0.383176 0.370555 0.309315 0.885727 0.144595 0.887898 0.155404 0.868726 0.181555 0.839286 0.105514 0.335091 0.389919 0.39549 0.348265 0.343747 0.328116 0.89127 0.150732 0.843385 0.180071 0.853965 0.130922 0.331074 0.325197 0.862805 0.167099 0.848687 0.114827 0.873383 0.166528 0.881059 0.181053 0.346244 0.306879 0.885761 0.175805 0.345702 0.385209 0.870796 0.16849 0.800492 0.146158 0.891737 0.166495 0.829758 0.188782 0.844701 0.103017 0.869756 0.134548 0.849186 0.121754 0.853689 0.157139 0.8743 0.196234 0.82223 0.199655 0.866973 0.144841 0.821452 0.112339 0.83924 0.183338 0.889298 0.182561 0.827969 0.126714 0.856372 0.176686 0.856576 0.150396 0.87857 0.162241 0.82948 0.155498 0.817556 0.16563 0.889215 0.127605 0.378789 0.396618 0.860667 0.144355 0.851925 0.136835 0.800965 0.130027 0.862343 0.104747 0.834028 0.108125 0.379311 0.39931 0.816162 0.176486 0.887533 0.139611 0.876228 0.134897 0.804605 0.13675 0.867801 0.15878 0.833625 0.167347 0.812678 0.185395 0.878209 0.115959 0.811913 0.195017 0.361995 0.323102 0.881879 0.135963 0.89803 0.103198 0.877724 0.151681 0.833623 0.196398 0.894817 0.168182 0.881902 0.145583 0.813211 0.105915 0.828792 0.121735 0.814929 0.154997 0.811291 0.189298 0.833706 0.125648 0.89597 0.191064 0.794733 0.932783 0.807271 0.114252 0.364533 0.319233 0.810089 0.187142 0.820849 0.178866 0.761061 0.998648 0.884772 0.110986 0.816057 0.155574 0.859791 0.164382 0.817204 0.107886 0.761067 0.971697 0.866766 0.176764 0.801908 0.166801 0.885309 0.136685 0.839102 0.150284 0.810891 0.162254 0.312938 0.367636 0.825876 0.123284 0.898391 0.130657 0.834303 0.174861 0.88594 0.104529 0.825583 0.122698 0.832929 0.116465 0.358375 0.338426 0.315493 0.332973 0.83906 0.147668 0.884073 0.14555 0.834649 0.139618 0.885196 0.173607 0.370796 0.339792 0.879535 0.18262 0.891765 0.124559 0.85316 0.149334 0.347742 0.378014 0.327373 0.370112 0.892268 0.170055 0.870979 0.119274 0.304501 0.384298 0.889512 0.124208 0.747131 0.973508 0.713879 0.999031 0.89777 0.165717 0.312203 0.37596 0.816484 0.150902 0.866057 0.156792 0.807577 0.141502 0.897537 0.136588 0.837324 0.184421 0.895856 0.125889 0.83218 0.143734 0.819322 0.120308 0.841607 0.125554 0.841513 0.187048 0.80136 0.115711 0.783739 0.911628 0.867372 0.115829 0.831926 0.154533 0.884267 0.101714 0.840588 0.131802 0.872545 0.187172 0.866004 0.109233 0.809182 0.16371 0.844303 0.171281 0.853758 0.123048 0.89632 0.196616 0.807945 0.117529 0.810675 0.198465 0.843891 0.184447 0.393882 0.345994 0.849027 0.118412 0.814565 0.160643 0.878966 0.118619 0.319678 0.330739 0.381436 0.327039 0.883641 0.137051 0.88625 0.1408 0.884644 0.164795 0.800808 0.152881 0.808185 0.109432 0.89149 0.112168 0.815459 0.106703 0.853486 0.169245 0.81354 0.137424 0.810805 0.153874 0.364085 0.349051 0.812736 0.170973 0.884621 0.1393 0.881052 0.146378 0.838517 0.149331 0.804812 0.158308 0.337278 0.395934 0.870284 0.104272 0.834796 0.105229 0.843002 0.196036 0.850576 0.152863 0.860771 0.118616 0.84202 0.166612 0.399275 0.394875 0.742874 0.958051 0.880633 0.110687 0.857862 0.179605 0.855494 0.100935 0.768148 0.963642 0.324867 0.367771 0.858129 0.167168 0.821521 0.16616 0.852337 0.196212 0.899052 0.109934 0.344131 0.342601 0.893116 0.170833 0.830686 0.104484 0.867316 0.167837 0.774198 0.939849 0.893978 0.10289 0.89165 0.184693 0.856159 0.186791 0.854807 0.14528 0.80968 0.135203 0.806354 0.123605 0.317552 0.365206 0.86256 0.161993 0.381535 0.345279 0.889903 0.112084 0.822495 0.126029 0.87125 0.166784 0.317413 0.349133 0.888958 0.170403 0.851666 0.157834 0.85179 0.173041 0.853371 0.146371 0.849858 0.125447 0.875129 0.122898 0.828562 0.187424 0.763606 0.952371 0.382237 0.35794 0.804045 0.120777 0.841869 0.18514 0.836767 0.155826 0.856599 0.199897 0.731756 0.911674 0.344477 0.362271 0.810883 0.188983 0.874842 0.142992 0.83821 0.145268 0.851997 0.156659 0.894652 0.190805 0.861117 0.137703 0.858894 0.119809 0.850262 0.141373 0.877066 0.175558 0.861403 0.136429 0.876572 0.175158 0.3317 0.352857 0.850177 0.127094 0.874109 0.123517 0.887492 0.12588 0.748737 0.901241 0.880944 0.162101 0.881262 0.114011 0.883449 0.170884 0.360217 0.302075 0.871743 0.103008 0.835599 0.108162 0.870554 0.187258 0.884404 0.188352 0.883416 0.145872 0.887299 0.15479 0.336392 0.359118 0.843312 0.177613 0.808424 0.104085 0.821814 0.128227 0.874873 0.150716 0.85946 0.149466 0.829091 0.142148 0.325514 0.30912 0.821196 0.113537 0.895925 0.181168 0.812376 0.1962 0.365183 0.310292 0.809944 0.133368 0.881536 0.152292 0.850015 0.198156 0.873673 0.119881 0.829372 0.157097 0.779381 0.968643 0.806218 0.117974 0.821675 0.116286 0.874341 0.108365 0.852975 0.123086 0.845412 0.186429 0.891256 0.182139 0.832477 0.163637 0.735961 0.94692 0.810206 0.166881 0.863904 0.157486 0.838621 0.180923 0.898295 0.132386 0.848832 0.175956 0.872826 0.106993 0.841561 0.10093 0.872002 0.168904 0.895266 0.151644 0.816433 0.148234 0.825895 0.199631 0.848153 0.1785 0.89617 0.148785 0.361702 0.397933 0.378571 0.363026 0.752522 0.921308 0.309489 0.336667 0.814213 0.172179 0.817779 0.102103 0.385597 0.358676 0.865369 0.186364 0.389047 0.305243 0.822809 0.124166 0.831419 0.187222 0.829114 0.107158 0.810828 0.149282 0.866424 0.169478 0.897773 0.131975 0.874546 0.105347 0.867 0.130347 0.360503 0.393453 0.867093 0.110005 0.863639 0.121075 0.895203 0.174919 0.866151 0.151007 0.35674 0.365002 0.353537 0.372692 0.83924 0.174931 0.881965 0.10347 0.36053 0.365526 0.894737 0.148706 0.881786 0.108479 0.86341 0.185092 0.876455 0.171627 0.823069 0.163659 0.838099 0.137204 0.815945 0.159805 0.363366 0.327635 0.830124 0.16268 0.717562 0.929106 0.819273 0.189725 0.889623 0.188949 0.829135 0.144268 0.836247 0.137433 0.822904 0.19765 0.81784 0.11125 0.801468 0.169538 0.89537 0.191735 0.336984 0.365184 0.889404 0.106429 0.89432 0.146251 0.829836 0.125841 0.825965 0.129243 0.866793 0.107128 0.728253 0.943304 0.807663 0.154252 0.854678 0.197385 0.742775 0.942044 0.891946 0.172129 0.811272 0.173145 0.897055 0.102304 0.803476 0.176486 0.82882 0.179162 0.79981 0.933256 0.820002 0.169783 0.325439 0.34104 0.89168 0.144097 0.837094 0.110958 0.73852 0.948742 0.80801 0.161061 0.892927 0.126314 0.89878 0.12125 0.886638 0.121405 0.805034 0.145919 0.87593 0.108601 0.880843 0.178815 0.877678 0.120557 0.369679 0.385181 0.391426 0.368508 0.854451 0.149913 0.817572 0.192036 0.76975 0.962605 0.815622 0.181443 0.839968 0.197315 0.857016 0.196723 0.373833 0.344159 0.316118 0.32969 0.811795 0.167347 0.830065 0.19898 0.833357 0.111303 0.314904 0.368326 0.819208 0.149162 0.866229 0.107569 0.874317 0.1308 0.302638 0.311626 0.860183 0.117928 0.359574 0.335186 0.866013 0.151279 0.863533 0.182445 0.300713 0.380895 0.814188 0.159962 0.827448 0.144729 0.804141 0.141768 0.805786 0.142367 0.887465 0.162925 0.843153 0.190503 0.870828 0.121444 0.840672 0.168627 0.301934 0.318779 0.856546 0.174779 0.839502 0.172994 0.847336 0.146206 0.88028 0.106257 0.866252 0.155547 0.37095 0.344299 0.871458 0.199763 0.803762 0.12719 0.826329 0.175 0.893337 0.192424 0.817331 0.144659 0.832914 0.160164 0.815635 0.122196 0.885821 0.185214 0.316989 0.31792 0.870953 0.177478 0.832255 0.111237 0.844802 0.133626 0.837412 0.10615 0.759292 0.918901 0.815619 0.121267 0.378633 0.314083 0.839548 0.157009 0.828274 0.107626 0.83284 0.187813 0.890613 0.116485 0.810089 0.153584 0.814939 0.179072 0.800258 0.177972 0.895225 0.169157 0.73314 0.931236 0.848721 0.133783 0.81551 0.11701 0.868687 0.176634 0.896957 0.113196 0.389054 0.38854 0.812717 0.132332 0.87371 0.177684 0.33352 0.382369 0.846023 0.101822 0.344 0.356494 0.304544 0.366331 0.832386 0.189727 0.704722 0.910009 0.310869 0.342362 0.871299 0.116465 0.837278 0.10274 0.338403 0.365092 0.783904 0.940099 0.399713 0.306701 0.889798 0.120483 0.824056 0.108129 0.844994 0.107482 0.848904 0.112933 0.826871 0.152845 0.89664 0.12968 0.85261 0.11861 0.89598 0.12436 0.876881 0.109845 0.899763 0.139582 0.856317 0.154608 0.39 0.379794 0.329216 0.382024 0.818369 0.159607 0.867544 0.151943 0.816073 0.15709 0.808482 0.193333 0.361735 0.349184 0.811246 0.196906 0.377963 0.354646 0.876862 0.139507 0.801098 0.176761 0.839471 0.117372 0.370493 0.351441 0.831857 0.157395 0.892061 0.174507 0.879924 0.184602 0.814486 0.116701 0.880326 0.198282 0.329637 0.377028 0.800409 0.173463 0.858756 0.146521 0.770298 0.909789 0.89663 0.16985 0.822317 0.151358 0.863366 0.159056 0.837438 0.109562 0.375746 0.371853 0.863035 0.13597 0.341681 0.344239 0.837191 0.102117 0.857518 0.130338 0.877843 0.198342 0.831355 0.149361 0.833199 0.194458 0.861883 0.18576 0.383883 0.394117 0.80223 0.194725 0.836584 0.109057 0.830883 0.11098 0.34931 0.343051 0.87322 0.119193 0.801568 0.179643 0.83499 0.189089 0.883306 0.162157 0.855331 0.136167 0.827353 0.15642 0.835304 0.196587 0.81356 0.178226 0.855351 0.126984 0.336538 0.32047 0.871382 0.106942 0.807136 0.126974 0.719391 0.978292 0.896613 0.177678 0.392088 0.384363 0.859672 0.100289 0.814092 0.181898 0.313111 0.317176 0.833546 0.171589 0.886529 0.191697 0.858925 0.121079 0.818901 0.161709 0.384935 0.369578 0.364446 0.35636 0.805596 0.123281 0.821475 0.167794 0.842239 0.167674 0.845516 0.162248 0.325251 0.341913 0.872824 0.158441 0.885137 0.111048 0.720571 0.994662 0.889353 0.109002 0.805082 0.101511 0.893938 0.185086 0.811223 0.12091 0.897962 0.121979 0.842313 0.106499 0.888678 0.140187 0.829431 0.162015 0.800891 0.139997 0.841009 0.11087 0.85185 0.102892 0.810698 0.199516 0.730386 0.903186 0.817545 0.106374 0.841119 0.10445 0.892531 0.166033 0.855301 0.155058 0.848869 0.160545 0.837631 0.114136 0.811895 0.182398 0.348722 0.383998 0.887236 0.158492 0.815834 0.160024 0.894654 0.124858 0.83974 0.110182 0.891484 0.160042 0.879151 0.186509 0.357824 0.385019 0.815063 0.11887 0.759898 0.948135 0.821577 0.195292 0.715555 0.920154 0.863761 0.161641 0.304333 0.334237 0.881743 0.164423 0.306421 0.340543 0.865609 0.145499 0.821731 0.149971 0.885233 0.163874 0.813339 0.114897 0.874204 0.122921 0.889057 0.154288 0.871624 0.14409 0.869097 0.136601 0.807429 0.191712 0.345041 0.321563 0.83931 0.163284 0.842468 0.106195 0.396883 0.305262 0.894628 0.128521 0.886603 0.167256 0.831638 0.157452 0.840055 0.196995 0.896967 0.135328 0.844651 0.109273 0.804906 0.123718 0.829203 0.108781 0.859297 0.133713 0.8879 0.124796 0.805 0.115723 0.87793 0.136908 0.822777 0.18758 0.852614 0.123744 0.885222 0.123751 0.817925 0.116679 0.309115 0.378005 0.857027 0.112186 0.350599 0.311118 0.854424 0.185159 0.863059 0.187469 0.339618 0.392343 0.396734 0.305498 0.849875 0.159409 0.734899 0.92365 0.87443 0.198857 0.82217 0.12192 0.841567 0.140441 0.833852 0.135251 0.72093 0.930449 0.80088 0.163544 0.8089 0.102041 0.879216 0.126808 0.801086 0.174111 0.896652 0.129354 0.883714 0.189499 0.372874 0.342523 0.862953 0.173727 0.357003 0.392382 0.899427 0.132473 0.84053 0.107673 0.876139 0.15687 0.313842 0.393008 0.872346 0.171484 0.779851 0.9059 0.819865 0.166208 0.810167 0.104493 0.316024 0.358873 0.862212 0.194171 0.804558 0.151345 0.875668 0.151805 0.874691 0.150023 0.316198 0.321145 0.839726 0.129373 0.847198 0.139909 0.846986 0.184295 0.781493 0.959652 0.304141 0.391514 0.855865 0.176878 0.882039 0.152038 0.842595 0.125085 0.863633 0.123826 0.818991 0.169564 0.827721 0.181941 0.323965 0.341294 0.848177 0.155645 0.839904 0.128129 0.893658 0.14229 0.84368 0.141728 0.815819 0.19684 0.875087 0.19956 0.885086 0.142388 0.882871 0.116048 0.783763 0.974167 0.89856 0.167246 0.710974 0.977611 0.846421 0.192404 0.871532 0.151592 0.73495 0.926971 0.728067 0.993653 0.883032 0.177956 0.898197 0.151945 0.868946 0.167706 0.832313 0.199476 0.814887 0.138395 0.345664 0.300573 0.881858 0.111975 0.890711 0.183273 0.862358 0.160852 0.87707 0.168116 0.801645 0.169858 0.804203 0.143015 0.845769 0.170608 0.392847 0.346741 0.85175 0.119732 0.875177 0.117237 0.879914 0.112512 0.829533 0.143015 0.837703 0.142995 0.898297 0.192427 0.832538 0.170702 0.38302 0.344929 0.805033 0.170622 0.859109 0.115442 0.854626 0.116947 0.891335 0.17453 0.3722 0.3248 0.384064 0.358592 0.311068 0.316408 0.849568 0.172909 0.851721 0.12168 0.818386 0.100143 0.818008 0.126522 0.834449 0.171644 0.882466 0.142316 0.853358 0.102178 0.853925 0.136591 0.808353 0.155302 0.876852 0.15125 0.8433 0.113038 0.806072 0.179906 0.827626 0.103574 0.804642 0.146007 0.844456 0.105955 0.3178 0.327756 0.81962 0.183569 0.845153 0.135188 0.867568 0.193784 0.344677 0.31555 0.868502 0.139399 0.869761 0.182259 0.840942 0.12611 0.823803 0.198989 0.866021 0.189405 0.830472 0.176892 0.852984 0.122694 0.726376 0.945389 0.389562 0.387719 0.751666 0.93967 0.860234 0.138943 0.867301 0.160167 0.365457 0.379815 0.820076 0.106114 0.853005 0.187446 0.806597 0.166647 0.859759 0.127026 0.8194 0.154785 0.7781 0.903768 0.896834 0.162089 0.826042 0.135529 0.855017 0.140164 0.858975 0.160018 0.877841 0.120589 0.804365 0.140328 0.857401 0.100001 0.381695 0.394184 0.880224 0.128239 0.86796 0.164248 0.82237 0.138774 0.362795 0.369231 0.826243 0.121746 0.852736 0.117037 0.823795 0.16244 0.309912 0.37166 0.815552 0.11289 0.891685 0.137729 0.840182 0.119087 0.873933 0.121337 0.88245 0.10173 0.838509 0.19346 0.872295 0.148754 0.831451 0.116719 0.85136 0.107784 0.803645 0.131614 0.877537 0.103931 0.833487 0.175673 0.837578 0.152661 0.846693 0.126021 0.881463 0.100271 0.88044 0.154582 0.834019 0.181083 0.323731 0.370423 0.807529 0.136034 0.851471 0.155154 0.86134 0.152341 0.892364 0.192783 0.879169 0.168451 0.829042 0.142818 0.887935 0.192168 0.878671 0.177224 0.773011 0.936844 0.824737 0.193255 0.841652 0.171013 0.853776 0.19503 0.840213 0.147429 0.778386 0.940366 0.896618 0.180843 0.814105 0.145469 0.874934 0.143933 0.813603 0.117846 0.876049 0.153262 0.884423 0.126604 0.870341 0.199748 0.85078 0.145573 0.898638 0.129449 0.385363 0.39931 0.891271 0.17511 0.854424 0.176049 0.843832 0.182309 0.898589 0.13482 0.892447 0.144832 0.390647 0.310097 0.37252 0.327555 0.814935 0.170354 0.812245 0.113686 0.870132 0.134055 0.310231 0.383543 0.885627 0.144317 0.861609 0.139202 0.868226 0.172905 0.301905 0.314431 0.726291 0.961717 0.896298 0.153264 0.839346 0.162739 0.862207 0.117241 0.884096 0.134364 0.888349 0.164626 0.832364 0.119022 0.889722 0.194606 0.363968 0.305376 0.819101 0.199337 0.72635 0.914251 0.870371 0.157249 0.802227 0.14205 0.338385 0.327053 0.885202 0.105487 0.723888 0.934808 0.876837 0.170572 0.808673 0.161296 0.858623 0.187924 0.823542 0.176925 0.373642 0.39793 0.821952 0.198513 0.713005 0.998107 0.872504 0.153095 0.777351 0.918793 0.815999 0.163651 gsl/doc/examples/fft.txt0000644000175000017500000001664013536674414013644 0ustar eddedd0 1.000000e+00 0.000000e+00 1 1.000000e+00 0.000000e+00 2 1.000000e+00 0.000000e+00 3 1.000000e+00 0.000000e+00 4 1.000000e+00 0.000000e+00 5 1.000000e+00 0.000000e+00 6 1.000000e+00 0.000000e+00 7 1.000000e+00 0.000000e+00 8 1.000000e+00 0.000000e+00 9 1.000000e+00 0.000000e+00 10 1.000000e+00 0.000000e+00 11 0.000000e+00 0.000000e+00 12 0.000000e+00 0.000000e+00 13 0.000000e+00 0.000000e+00 14 0.000000e+00 0.000000e+00 15 0.000000e+00 0.000000e+00 16 0.000000e+00 0.000000e+00 17 0.000000e+00 0.000000e+00 18 0.000000e+00 0.000000e+00 19 0.000000e+00 0.000000e+00 20 0.000000e+00 0.000000e+00 21 0.000000e+00 0.000000e+00 22 0.000000e+00 0.000000e+00 23 0.000000e+00 0.000000e+00 24 0.000000e+00 0.000000e+00 25 0.000000e+00 0.000000e+00 26 0.000000e+00 0.000000e+00 27 0.000000e+00 0.000000e+00 28 0.000000e+00 0.000000e+00 29 0.000000e+00 0.000000e+00 30 0.000000e+00 0.000000e+00 31 0.000000e+00 0.000000e+00 32 0.000000e+00 0.000000e+00 33 0.000000e+00 0.000000e+00 34 0.000000e+00 0.000000e+00 35 0.000000e+00 0.000000e+00 36 0.000000e+00 0.000000e+00 37 0.000000e+00 0.000000e+00 38 0.000000e+00 0.000000e+00 39 0.000000e+00 0.000000e+00 40 0.000000e+00 0.000000e+00 41 0.000000e+00 0.000000e+00 42 0.000000e+00 0.000000e+00 43 0.000000e+00 0.000000e+00 44 0.000000e+00 0.000000e+00 45 0.000000e+00 0.000000e+00 46 0.000000e+00 0.000000e+00 47 0.000000e+00 0.000000e+00 48 0.000000e+00 0.000000e+00 49 0.000000e+00 0.000000e+00 50 0.000000e+00 0.000000e+00 51 0.000000e+00 0.000000e+00 52 0.000000e+00 0.000000e+00 53 0.000000e+00 0.000000e+00 54 0.000000e+00 0.000000e+00 55 0.000000e+00 0.000000e+00 56 0.000000e+00 0.000000e+00 57 0.000000e+00 0.000000e+00 58 0.000000e+00 0.000000e+00 59 0.000000e+00 0.000000e+00 60 0.000000e+00 0.000000e+00 61 0.000000e+00 0.000000e+00 62 0.000000e+00 0.000000e+00 63 0.000000e+00 0.000000e+00 64 0.000000e+00 0.000000e+00 65 0.000000e+00 0.000000e+00 66 0.000000e+00 0.000000e+00 67 0.000000e+00 0.000000e+00 68 0.000000e+00 0.000000e+00 69 0.000000e+00 0.000000e+00 70 0.000000e+00 0.000000e+00 71 0.000000e+00 0.000000e+00 72 0.000000e+00 0.000000e+00 73 0.000000e+00 0.000000e+00 74 0.000000e+00 0.000000e+00 75 0.000000e+00 0.000000e+00 76 0.000000e+00 0.000000e+00 77 0.000000e+00 0.000000e+00 78 0.000000e+00 0.000000e+00 79 0.000000e+00 0.000000e+00 80 0.000000e+00 0.000000e+00 81 0.000000e+00 0.000000e+00 82 0.000000e+00 0.000000e+00 83 0.000000e+00 0.000000e+00 84 0.000000e+00 0.000000e+00 85 0.000000e+00 0.000000e+00 86 0.000000e+00 0.000000e+00 87 0.000000e+00 0.000000e+00 88 0.000000e+00 0.000000e+00 89 0.000000e+00 0.000000e+00 90 0.000000e+00 0.000000e+00 91 0.000000e+00 0.000000e+00 92 0.000000e+00 0.000000e+00 93 0.000000e+00 0.000000e+00 94 0.000000e+00 0.000000e+00 95 0.000000e+00 0.000000e+00 96 0.000000e+00 0.000000e+00 97 0.000000e+00 0.000000e+00 98 0.000000e+00 0.000000e+00 99 0.000000e+00 0.000000e+00 100 0.000000e+00 0.000000e+00 101 0.000000e+00 0.000000e+00 102 0.000000e+00 0.000000e+00 103 0.000000e+00 0.000000e+00 104 0.000000e+00 0.000000e+00 105 0.000000e+00 0.000000e+00 106 0.000000e+00 0.000000e+00 107 0.000000e+00 0.000000e+00 108 0.000000e+00 0.000000e+00 109 0.000000e+00 0.000000e+00 110 0.000000e+00 0.000000e+00 111 0.000000e+00 0.000000e+00 112 0.000000e+00 0.000000e+00 113 0.000000e+00 0.000000e+00 114 0.000000e+00 0.000000e+00 115 0.000000e+00 0.000000e+00 116 0.000000e+00 0.000000e+00 117 0.000000e+00 0.000000e+00 118 1.000000e+00 0.000000e+00 119 1.000000e+00 0.000000e+00 120 1.000000e+00 0.000000e+00 121 1.000000e+00 0.000000e+00 122 1.000000e+00 0.000000e+00 123 1.000000e+00 0.000000e+00 124 1.000000e+00 0.000000e+00 125 1.000000e+00 0.000000e+00 126 1.000000e+00 0.000000e+00 127 1.000000e+00 0.000000e+00 0 1.856155e+00 0.000000e+00 1 1.775235e+00 1.177569e-16 2 1.545075e+00 0.000000e+00 3 1.201145e+00 2.453269e-17 4 7.952850e-01 -4.906539e-17 5 3.863025e-01 -6.869155e-17 6 2.955767e-02 -4.906539e-18 7 -2.324518e-01 -9.813078e-18 8 -3.767087e-01 2.943923e-17 9 -4.023202e-01 -5.151866e-17 10 -3.288421e-01 -1.226635e-17 11 -1.908223e-01 -3.679904e-17 12 -2.984509e-02 -5.397193e-17 13 1.141877e-01 -1.054906e-16 14 2.107341e-01 -1.496494e-16 15 2.437478e-01 -2.526868e-16 16 2.133883e-01 9.813078e-18 17 1.341899e-01 -3.618572e-17 18 3.033355e-02 -4.906539e-18 19 -7.075117e-02 -5.887847e-17 20 -1.449419e-01 2.453269e-18 21 -1.766837e-01 -1.226635e-17 22 -1.618772e-01 -9.813078e-18 23 -1.079124e-01 1.471962e-17 24 -3.103786e-02 3.925231e-17 25 4.815112e-02 2.698596e-17 26 1.099404e-01 2.759928e-17 27 1.401760e-01 -2.943923e-17 28 1.333280e-01 7.359808e-18 29 9.330968e-02 -1.079439e-16 30 3.198024e-02 -1.557826e-16 31 -3.418842e-02 -1.711155e-16 32 -8.838835e-02 0.000000e+00 33 -1.176209e-01 1.103971e-17 34 -1.157154e-01 5.642520e-17 35 -8.454075e-02 -1.717289e-17 36 -3.319203e-02 3.679904e-17 37 2.456534e-02 -1.226635e-17 38 7.390118e-02 -5.519856e-18 39 1.026526e-01 -1.226635e-18 40 1.042612e-01 9.813078e-18 41 7.921898e-02 -1.717289e-17 42 3.471627e-02 7.359808e-18 43 -1.736727e-02 -2.207943e-17 44 -6.358048e-02 -5.397193e-17 45 -9.232361e-02 -6.133174e-17 46 -9.671760e-02 -7.114481e-17 47 -7.621953e-02 -6.133174e-17 48 -3.661165e-02 0.000000e+00 49 1.159674e-02 -3.066587e-18 50 5.592184e-02 -4.906539e-18 51 8.510068e-02 -3.679904e-18 52 9.192081e-02 -4.906539e-18 53 7.498108e-02 -2.453269e-18 54 3.895842e-02 1.962616e-17 55 -6.664175e-03 -4.906539e-18 56 -5.006798e-02 0.000000e+00 57 -8.013033e-02 -2.207943e-17 58 -8.924785e-02 1.471962e-17 59 -7.524106e-02 9.813078e-18 60 -4.186758e-02 3.925231e-17 61 2.175052e-03 5.887847e-17 62 4.549549e-02 6.869155e-17 63 7.692872e-02 7.359808e-17 64 8.838835e-02 0.000000e+00 65 7.692872e-02 -1.962616e-17 66 4.549549e-02 -1.962616e-17 67 2.175052e-03 4.906539e-18 68 -4.186758e-02 9.813078e-18 69 -7.524106e-02 9.813078e-18 70 -8.924785e-02 1.471962e-17 71 -8.013033e-02 0.000000e+00 72 -5.006798e-02 -9.813078e-18 73 -6.664175e-03 7.359808e-18 74 3.895842e-02 7.359808e-18 75 7.498108e-02 2.453269e-18 76 9.192081e-02 4.906539e-18 77 8.510068e-02 -1.226635e-17 78 5.592184e-02 -2.207943e-17 79 1.159674e-02 -5.642520e-17 80 -3.661165e-02 -9.813078e-18 81 -7.621953e-02 -3.618572e-17 82 -9.671760e-02 -2.453269e-17 83 -9.232361e-02 -2.943923e-17 84 -6.358048e-02 1.717289e-17 85 -1.736727e-02 -2.453269e-18 86 3.471627e-02 9.813078e-18 87 7.921898e-02 -4.906539e-18 88 1.042612e-01 0.000000e+00 89 1.026526e-01 -2.453269e-18 90 7.390118e-02 1.839952e-18 91 2.456534e-02 9.813078e-18 92 -3.319203e-02 -4.661212e-17 93 -8.454075e-02 9.813078e-18 94 -1.157154e-01 3.802568e-17 95 -1.176209e-01 7.298477e-17 96 -8.838835e-02 0.000000e+00 97 -3.418842e-02 -6.991818e-17 98 3.198024e-02 -7.605135e-17 99 9.330968e-02 7.359808e-18 100 1.333280e-01 -3.679904e-17 101 1.401760e-01 3.189250e-17 102 1.099404e-01 1.533293e-17 103 4.815112e-02 -4.783875e-17 104 -3.103786e-02 -2.943923e-17 105 -1.079124e-01 -2.698596e-17 106 -1.618772e-01 1.717289e-17 107 -1.766837e-01 -2.453269e-18 108 -1.449419e-01 6.378501e-17 109 -7.075117e-02 1.005840e-16 110 3.033355e-02 1.251167e-16 111 1.341899e-01 2.134344e-16 112 2.133883e-01 0.000000e+00 113 2.437478e-01 3.618572e-17 114 2.107341e-01 -4.906539e-18 115 1.141877e-01 3.311914e-17 116 -2.984509e-02 2.453269e-17 117 -1.908223e-01 -2.207943e-17 118 -3.288421e-01 3.925231e-17 119 -4.023202e-01 -2.453269e-17 120 -3.767087e-01 -3.925231e-17 121 -2.324518e-01 8.586443e-17 122 2.955767e-02 1.471962e-17 123 3.863025e-01 1.079439e-16 124 7.952850e-01 3.925231e-17 125 1.201145e+00 1.962616e-16 126 1.545075e+00 8.831770e-17 127 1.775235e+00 2.600466e-16 gsl/doc/examples/fitreg2.c0000644000175000017500000001103013536674414014016 0ustar eddedd#include #include #include #include #include static int hilbert_matrix(gsl_matrix * m) { const size_t N = m->size1; const size_t M = m->size2; size_t i, j; for (i = 0; i < N; i++) { for (j = 0; j < M; j++) { gsl_matrix_set(m, i, j, 1.0/(i+j+1.0)); } } return GSL_SUCCESS; } int main() { const size_t n = 10; /* number of observations */ const size_t p = 8; /* number of model parameters */ size_t i; gsl_matrix *X = gsl_matrix_alloc(n, p); gsl_vector *y = gsl_vector_alloc(n); /* construct Hilbert matrix and rhs vector */ hilbert_matrix(X); { double val = 1.0; for (i = 0; i < n; ++i) { gsl_vector_set(y, i, val); val *= -1.0; } } { const size_t npoints = 200; /* number of points on L-curve and GCV curve */ gsl_multifit_linear_workspace *w = gsl_multifit_linear_alloc(n, p); gsl_vector *c = gsl_vector_alloc(p); /* OLS solution */ gsl_vector *c_lcurve = gsl_vector_alloc(p); /* regularized solution (L-curve) */ gsl_vector *c_gcv = gsl_vector_alloc(p); /* regularized solution (GCV) */ gsl_vector *reg_param = gsl_vector_alloc(npoints); gsl_vector *rho = gsl_vector_alloc(npoints); /* residual norms */ gsl_vector *eta = gsl_vector_alloc(npoints); /* solution norms */ gsl_vector *G = gsl_vector_alloc(npoints); /* GCV function values */ double lambda_l; /* optimal regularization parameter (L-curve) */ double lambda_gcv; /* optimal regularization parameter (GCV) */ double G_gcv; /* G(lambda_gcv) */ size_t reg_idx; /* index of optimal lambda */ double rcond; /* reciprocal condition number of X */ double chisq, rnorm, snorm; /* compute SVD of X */ gsl_multifit_linear_svd(X, w); rcond = gsl_multifit_linear_rcond(w); fprintf(stderr, "matrix condition number = %e\n", 1.0 / rcond); /* unregularized (standard) least squares fit, lambda = 0 */ gsl_multifit_linear_solve(0.0, X, y, c, &rnorm, &snorm, w); chisq = pow(rnorm, 2.0); fprintf(stderr, "\n=== Unregularized fit ===\n"); fprintf(stderr, "residual norm = %g\n", rnorm); fprintf(stderr, "solution norm = %g\n", snorm); fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); /* calculate L-curve and find its corner */ gsl_multifit_linear_lcurve(y, reg_param, rho, eta, w); gsl_multifit_linear_lcorner(rho, eta, ®_idx); /* store optimal regularization parameter */ lambda_l = gsl_vector_get(reg_param, reg_idx); /* regularize with lambda_l */ gsl_multifit_linear_solve(lambda_l, X, y, c_lcurve, &rnorm, &snorm, w); chisq = pow(rnorm, 2.0) + pow(lambda_l * snorm, 2.0); fprintf(stderr, "\n=== Regularized fit (L-curve) ===\n"); fprintf(stderr, "optimal lambda: %g\n", lambda_l); fprintf(stderr, "residual norm = %g\n", rnorm); fprintf(stderr, "solution norm = %g\n", snorm); fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); /* calculate GCV curve and find its minimum */ gsl_multifit_linear_gcv(y, reg_param, G, &lambda_gcv, &G_gcv, w); /* regularize with lambda_gcv */ gsl_multifit_linear_solve(lambda_gcv, X, y, c_gcv, &rnorm, &snorm, w); chisq = pow(rnorm, 2.0) + pow(lambda_gcv * snorm, 2.0); fprintf(stderr, "\n=== Regularized fit (GCV) ===\n"); fprintf(stderr, "optimal lambda: %g\n", lambda_gcv); fprintf(stderr, "residual norm = %g\n", rnorm); fprintf(stderr, "solution norm = %g\n", snorm); fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); /* output L-curve and GCV curve */ for (i = 0; i < npoints; ++i) { printf("%e %e %e %e\n", gsl_vector_get(reg_param, i), gsl_vector_get(rho, i), gsl_vector_get(eta, i), gsl_vector_get(G, i)); } /* output L-curve corner point */ printf("\n\n%f %f\n", gsl_vector_get(rho, reg_idx), gsl_vector_get(eta, reg_idx)); /* output GCV curve corner minimum */ printf("\n\n%e %e\n", lambda_gcv, G_gcv); gsl_multifit_linear_free(w); gsl_vector_free(c); gsl_vector_free(c_lcurve); gsl_vector_free(reg_param); gsl_vector_free(rho); gsl_vector_free(eta); gsl_vector_free(G); } gsl_matrix_free(X); gsl_vector_free(y); return 0; } gsl/doc/examples/fitreg2.txt0000644000175000017500000002432513536674414014426 0ustar eddedd1.722777e+00 3.137496e+00 1.393571e-01 1.098466e-01 1.542511e+00 3.134851e+00 1.602537e-01 1.111355e-01 1.381107e+00 3.132105e+00 1.838003e-01 1.124535e-01 1.236592e+00 3.129220e+00 2.106938e-01 1.137782e-01 1.107199e+00 3.126141e+00 2.418828e-01 1.150910e-01 9.913452e-01 3.122801e+00 2.785467e-01 1.163793e-01 8.876139e-01 3.119134e+00 3.220259e-01 1.176379e-01 7.947367e-01 3.115081e+00 3.737063e-01 1.188693e-01 7.115778e-01 3.110606e+00 4.348745e-01 1.200830e-01 6.371205e-01 3.105701e+00 5.065595e-01 1.212938e-01 5.704542e-01 3.100403e+00 5.893764e-01 1.225198e-01 5.107636e-01 3.094792e+00 6.833863e-01 1.237793e-01 4.573188e-01 3.088992e+00 7.879919e-01 1.250887e-01 4.094664e-01 3.083163e+00 9.018923e-01 1.264594e-01 3.666211e-01 3.077483e+00 1.023126e+00 1.278954e-01 3.282590e-01 3.072126e+00 1.149218e+00 1.293921e-01 2.939109e-01 3.067236e+00 1.277432e+00 1.309363e-01 2.631570e-01 3.062913e+00 1.405101e+00 1.325071e-01 2.356210e-01 3.059197e+00 1.529994e+00 1.340794e-01 2.109664e-01 3.056073e+00 1.650666e+00 1.356271e-01 1.888915e-01 3.053481e+00 1.766774e+00 1.371273e-01 1.691265e-01 3.051330e+00 1.879334e+00 1.385633e-01 1.514296e-01 3.049515e+00 1.990948e+00 1.399270e-01 1.355845e-01 3.047928e+00 2.106019e+00 1.412191e-01 1.213973e-01 3.046466e+00 2.230932e+00 1.424491e-01 1.086947e-01 3.045040e+00 2.374177e+00 1.436337e-01 9.732119e-02 3.043574e+00 2.546260e+00 1.447959e-01 8.713780e-02 3.042004e+00 2.759286e+00 1.459626e-01 7.801997e-02 3.040285e+00 3.026090e+00 1.471633e-01 6.985619e-02 3.038387e+00 3.358992e+00 1.484283e-01 6.254665e-02 3.036296e+00 3.768366e+00 1.497867e-01 5.600196e-02 3.034020e+00 4.261340e+00 1.512642e-01 5.014209e-02 3.031585e+00 4.840819e+00 1.528812e-01 4.489537e-02 3.029040e+00 5.504952e+00 1.546495e-01 4.019766e-02 3.026446e+00 6.247119e+00 1.565704e-01 3.599150e-02 3.023875e+00 7.056539e+00 1.586327e-01 3.222546e-02 3.021398e+00 7.919639e+00 1.608119e-01 2.885348e-02 3.019073e+00 8.822262e+00 1.630712e-01 2.583434e-02 3.016940e+00 9.752649e+00 1.653647e-01 2.313112e-02 3.015010e+00 1.070504e+01 1.676419e-01 2.071075e-02 3.013269e+00 1.168365e+01 1.698529e-01 1.854364e-02 3.011679e+00 1.270683e+01 1.719539e-01 1.660329e-02 3.010183e+00 1.381130e+01 1.739109e-01 1.486597e-02 3.008713e+00 1.505601e+01 1.757021e-01 1.331044e-02 3.007191e+00 1.652543e+01 1.773182e-01 1.191768e-02 3.005538e+00 1.833101e+01 1.787612e-01 1.067065e-02 3.003668e+00 2.061036e+01 1.800425e-01 9.554103e-03 3.001496e+00 2.352383e+01 1.811809e-01 8.554391e-03 2.998932e+00 2.724970e+01 1.821998e-01 7.659285e-03 2.995886e+00 3.197972e+01 1.831262e-01 6.857841e-03 2.992265e+00 3.791607e+01 1.839890e-01 6.140258e-03 2.987980e+00 4.526885e+01 1.848187e-01 5.497760e-03 2.982950e+00 5.425209e+01 1.856470e-01 4.922491e-03 2.977113e+00 6.507580e+01 1.865067e-01 4.407416e-03 2.970435e+00 7.793223e+01 1.874314e-01 3.946238e-03 2.962928e+00 9.297574e+01 1.884557e-01 3.533316e-03 2.954661e+00 1.102970e+02 1.896138e-01 3.163600e-03 2.945771e+00 1.298942e+02 1.909381e-01 2.832571e-03 2.936465e+00 1.516468e+02 1.924564e-01 2.536179e-03 2.927011e+00 1.752965e+02 1.941885e-01 2.270801e-03 2.917712e+00 2.004452e+02 1.961420e-01 2.033191e-03 2.908878e+00 2.265717e+02 1.983087e-01 1.820444e-03 2.900780e+00 2.530716e+02 2.006625e-01 1.629959e-03 2.893622e+00 2.793116e+02 2.031597e-01 1.459405e-03 2.887516e+00 3.046926e+02 2.057427e-01 1.306697e-03 2.882479e+00 3.287068e+02 2.083462e-01 1.169968e-03 2.878452e+00 3.509813e+02 2.109050e-01 1.047546e-03 2.875317e+00 3.713028e+02 2.133613e-01 9.379343e-04 2.872926e+00 3.896242e+02 2.156706e-01 8.397917e-04 2.871127e+00 4.060614e+02 2.178043e-01 7.519185e-04 2.869774e+00 4.208862e+02 2.197508e-01 6.732400e-04 2.868742e+00 4.345280e+02 2.215136e-01 6.027942e-04 2.867925e+00 4.475887e+02 2.231087e-01 5.397197e-04 2.867240e+00 4.608802e+02 2.245616e-01 4.832451e-04 2.866619e+00 4.754845e+02 2.259049e-01 4.326798e-04 2.866007e+00 4.928343e+02 2.271761e-01 3.874055e-04 2.865362e+00 5.147993e+02 2.284162e-01 3.468686e-04 2.864647e+00 5.437503e+02 2.296689e-01 3.105733e-04 2.863829e+00 5.825596e+02 2.309801e-01 2.780758e-04 2.862880e+00 6.345001e+02 2.323980e-01 2.489788e-04 2.861776e+00 7.030369e+02 2.339728e-01 2.229264e-04 2.860499e+00 7.915470e+02 2.357562e-01 1.996001e-04 2.859036e+00 9.030327e+02 2.378005e-01 1.787146e-04 2.857384e+00 1.039868e+03 2.401564e-01 1.600144e-04 2.855552e+00 1.203580e+03 2.428702e-01 1.432710e-04 2.853565e+00 1.394632e+03 2.459795e-01 1.282795e-04 2.851464e+00 1.612233e+03 2.495081e-01 1.148568e-04 2.849301e+00 1.854184e+03 2.534599e-01 1.028385e-04 2.847142e+00 2.116859e+03 2.578138e-01 9.207780e-05 2.845053e+00 2.395388e+03 2.625202e-01 8.244306e-05 2.843097e+00 2.684085e+03 2.675006e-01 7.381647e-05 2.841321e+00 2.977118e+03 2.726516e-01 6.609254e-05 2.839753e+00 3.269361e+03 2.778528e-01 5.917682e-05 2.838397e+00 3.557342e+03 2.829790e-01 5.298473e-05 2.837240e+00 3.840201e+03 2.879116e-01 4.744057e-05 2.836251e+00 4.120650e+03 2.925500e-01 4.247654e-05 2.835386e+00 4.405963e+03 2.968191e-01 3.803192e-05 2.834600e+00 4.709062e+03 3.006723e-01 3.405238e-05 2.833841e+00 5.049753e+03 3.040905e-01 3.048924e-05 2.833062e+00 5.456018e+03 3.070781e-01 2.729894e-05 2.832211e+00 5.965090e+03 3.096580e-01 2.444246e-05 2.831239e+00 6.623983e+03 3.118655e-01 2.188488e-05 2.830091e+00 7.489257e+03 3.137428e-01 1.959491e-05 2.828710e+00 8.626347e+03 3.153358e-01 1.754456e-05 2.827031e+00 1.010924e+04 3.166905e-01 1.570875e-05 2.824979e+00 1.202123e+04 3.178516e-01 1.406503e-05 2.822470e+00 1.445704e+04 3.188617e-01 1.259331e-05 2.819406e+00 1.752562e+04 3.197610e-01 1.127559e-05 2.815678e+00 2.135312e+04 3.205881e-01 1.009574e-05 2.811161e+00 2.608500e+04 3.213810e-01 9.039355e-06 2.805726e+00 3.188670e+04 3.221777e-01 8.093504e-06 2.799237e+00 3.894202e+04 3.230184e-01 7.246625e-06 2.791566e+00 4.744843e+04 3.239468e-01 6.488360e-06 2.782605e+00 5.760813e+04 3.250117e-01 5.809438e-06 2.772286e+00 6.961416e+04 3.262684e-01 5.201556e-06 2.760602e+00 8.363085e+04 3.277796e-01 4.657281e-06 2.747633e+00 9.976912e+04 3.296152e-01 4.169957e-06 2.733562e+00 1.180587e+05 3.318499e-01 3.733626e-06 2.718689e+00 1.384212e+05 3.345583e-01 3.342950e-06 2.703419e+00 1.606491e+05 3.378069e-01 2.993154e-06 2.688234e+00 1.843986e+05 3.416434e-01 2.679960e-06 2.673643e+00 2.092005e+05 3.460840e-01 2.399537e-06 2.660116e+00 2.344916e+05 3.511029e-01 2.148457e-06 2.648030e+00 2.596630e+05 3.566257e-01 1.923649e-06 2.637620e+00 2.841185e+05 3.625315e-01 1.722364e-06 2.628969e+00 3.073291e+05 3.686627e-01 1.542141e-06 2.622018e+00 3.288765e+05 3.748433e-01 1.380776e-06 2.616606e+00 3.484761e+05 3.808989e-01 1.236296e-06 2.612510e+00 3.659817e+05 3.866765e-01 1.106934e-06 2.609484e+00 3.813726e+05 3.920571e-01 9.911075e-07 2.607295e+00 3.947318e+05 3.969632e-01 8.874010e-07 2.605735e+00 4.062212e+05 4.013572e-01 7.945461e-07 2.604636e+00 4.160595e+05 4.052372e-01 7.114072e-07 2.603862e+00 4.245066e+05 4.086289e-01 6.369677e-07 2.603312e+00 4.318573e+05 4.115774e-01 5.703174e-07 2.602910e+00 4.384463e+05 4.141403e-01 5.106411e-07 2.602602e+00 4.446656e+05 4.163818e-01 4.572092e-07 2.602348e+00 4.509978e+05 4.183691e-01 4.093682e-07 2.602117e+00 4.580674e+05 4.201702e-01 3.665332e-07 2.601887e+00 4.667134e+05 4.218530e-01 3.281802e-07 2.601639e+00 4.780848e+05 4.234853e-01 2.938405e-07 2.601359e+00 4.937527e+05 4.251364e-01 2.630939e-07 2.601029e+00 5.158218e+05 4.268778e-01 2.355646e-07 2.600636e+00 5.470072e+05 4.287857e-01 2.109158e-07 2.600165e+00 5.906325e+05 4.309424e-01 1.888462e-07 2.599598e+00 6.505218e+05 4.334390e-01 1.690859e-07 2.598921e+00 7.308011e+05 4.363771e-01 1.513933e-07 2.598116e+00 8.356695e+05 4.398698e-01 1.355519e-07 2.597169e+00 9.692012e+05 4.440427e-01 1.213682e-07 2.596067e+00 1.135182e+06 4.490330e-01 1.086686e-07 2.594806e+00 1.336932e+06 4.549863e-01 9.729786e-08 2.593385e+00 1.577052e+06 4.620509e-01 8.711690e-08 2.591819e+00 1.857073e+06 4.703688e-01 7.800126e-08 2.590132e+00 2.177024e+06 4.800613e-01 6.983944e-08 2.588362e+00 2.535010e+06 4.912121e-01 6.253166e-08 2.586559e+00 2.926897e+06 5.038476e-01 5.598853e-08 2.584781e+00 3.346241e+06 5.179163e-01 5.013007e-08 2.583085e+00 3.784553e+06 5.332744e-01 4.488461e-08 2.581523e+00 4.231936e+06 5.496803e-01 4.018802e-08 2.580133e+00 4.678037e+06 5.668022e-01 3.598287e-08 2.578938e+00 5.113157e+06 5.842421e-01 3.221773e-08 2.577940e+00 5.529355e+06 6.015712e-01 2.884656e-08 2.577129e+00 5.921393e+06 6.183721e-01 2.582815e-08 2.576482e+00 6.287444e+06 6.342778e-01 2.312557e-08 2.575968e+00 6.629644e+06 6.490016e-01 2.070578e-08 2.575557e+00 6.954609e+06 6.623514e-01 1.853919e-08 2.575218e+00 7.274153e+06 6.742307e-01 1.659931e-08 2.574923e+00 7.606397e+06 6.846274e-01 1.486241e-08 2.574646e+00 7.977424e+06 6.935959e-01 1.330725e-08 2.574366e+00 8.423477e+06 7.012373e-01 1.191482e-08 2.574061e+00 8.993390e+06 7.076806e-01 1.066809e-08 2.573713e+00 9.750697e+06 7.130674e-01 9.551812e-09 2.573299e+00 1.077472e+07 7.175402e-01 8.552340e-09 2.572797e+00 1.216047e+07 7.212348e-01 7.657449e-09 2.572182e+00 1.401811e+07 7.242757e-01 6.856197e-09 2.571422e+00 1.647375e+07 7.267742e-01 6.138785e-09 2.570481e+00 1.967292e+07 7.288276e-01 5.496441e-09 2.569314e+00 2.378700e+07 7.305201e-01 4.921311e-09 2.567867e+00 2.902207e+07 7.319240e-01 4.406360e-09 2.566074e+00 3.562921e+07 7.331015e-01 3.945292e-09 2.563853e+00 4.391592e+07 7.341066e-01 3.532468e-09 2.561108e+00 5.425840e+07 7.349869e-01 3.162842e-09 2.557722e+00 6.711471e+07 7.357857e-01 2.831891e-09 2.553557e+00 8.303847e+07 7.365440e-01 2.535571e-09 2.548448e+00 1.026925e+08 7.373029e-01 2.270257e-09 2.542210e+00 1.268609e+08 7.381063e-01 2.032704e-09 2.534630e+00 1.564577e+08 7.390036e-01 1.820008e-09 2.525476e+00 1.925281e+08 7.400539e-01 1.629568e-09 2.514504e+00 2.362389e+08 7.413306e-01 1.459055e-09 2.501475e+00 2.888508e+08 7.429267e-01 1.306384e-09 2.486172e+00 3.516668e+08 7.449623e-01 1.169688e-09 2.468436e+00 4.259500e+08 7.475918e-01 1.047295e-09 2.448205e+00 5.128065e+08 7.510116e-01 9.377094e-10 2.425553e+00 6.130339e+08 7.554664e-01 8.395904e-10 2.400735e+00 7.269474e+08 7.612503e-01 7.517382e-10 2.374214e+00 8.542031e+08 7.687001e-01 6.730786e-10 2.346657e+00 9.936560e+08 7.781758e-01 6.026497e-10 2.318902e+00 1.143292e+09 7.900244e-01 5.395903e-10 2.291876e+00 1.300270e+09 8.045283e-01 4.831292e-10 2.266486e+00 1.461099e+09 8.218422e-01 2.603862 424506.610976 1.722777e+00 1.098466e-01 gsl/doc/examples/interp2d.txt0000644000175000017500000101742413536674414014616 0ustar eddedd0.000000 0.000000 0.000000 0.000000 0.010101 0.010101 0.000000 0.020202 0.020202 0.000000 0.030303 0.030303 0.000000 0.040404 0.040404 0.000000 0.050505 0.050505 0.000000 0.060606 0.060606 0.000000 0.070707 0.070707 0.000000 0.080808 0.080808 0.000000 0.090909 0.090909 0.000000 0.101010 0.101010 0.000000 0.111111 0.111111 0.000000 0.121212 0.121212 0.000000 0.131313 0.131313 0.000000 0.141414 0.141414 0.000000 0.151515 0.151515 0.000000 0.161616 0.161616 0.000000 0.171717 0.171717 0.000000 0.181818 0.181818 0.000000 0.191919 0.191919 0.000000 0.202020 0.202020 0.000000 0.212121 0.212121 0.000000 0.222222 0.222222 0.000000 0.232323 0.232323 0.000000 0.242424 0.242424 0.000000 0.252525 0.252525 0.000000 0.262626 0.262626 0.000000 0.272727 0.272727 0.000000 0.282828 0.282828 0.000000 0.292929 0.292929 0.000000 0.303030 0.303030 0.000000 0.313131 0.313131 0.000000 0.323232 0.323232 0.000000 0.333333 0.333333 0.000000 0.343434 0.343434 0.000000 0.353535 0.353535 0.000000 0.363636 0.363636 0.000000 0.373737 0.373737 0.000000 0.383838 0.383838 0.000000 0.393939 0.393939 0.000000 0.404040 0.404040 0.000000 0.414141 0.414141 0.000000 0.424242 0.424242 0.000000 0.434343 0.434343 0.000000 0.444444 0.444444 0.000000 0.454545 0.454545 0.000000 0.464646 0.464646 0.000000 0.474747 0.474747 0.000000 0.484848 0.484848 0.000000 0.494949 0.494949 0.000000 0.505051 0.505051 0.000000 0.515152 0.515152 0.000000 0.525253 0.525253 0.000000 0.535354 0.535354 0.000000 0.545455 0.545455 0.000000 0.555556 0.555556 0.000000 0.565657 0.565657 0.000000 0.575758 0.575758 0.000000 0.585859 0.585859 0.000000 0.595960 0.595960 0.000000 0.606061 0.606061 0.000000 0.616162 0.616162 0.000000 0.626263 0.626263 0.000000 0.636364 0.636364 0.000000 0.646465 0.646465 0.000000 0.656566 0.656566 0.000000 0.666667 0.666667 0.000000 0.676768 0.676768 0.000000 0.686869 0.686869 0.000000 0.696970 0.696970 0.000000 0.707071 0.707071 0.000000 0.717172 0.717172 0.000000 0.727273 0.727273 0.000000 0.737374 0.737374 0.000000 0.747475 0.747475 0.000000 0.757576 0.757576 0.000000 0.767677 0.767677 0.000000 0.777778 0.777778 0.000000 0.787879 0.787879 0.000000 0.797980 0.797980 0.000000 0.808081 0.808081 0.000000 0.818182 0.818182 0.000000 0.828283 0.828283 0.000000 0.838384 0.838384 0.000000 0.848485 0.848485 0.000000 0.858586 0.858586 0.000000 0.868687 0.868687 0.000000 0.878788 0.878788 0.000000 0.888889 0.888889 0.000000 0.898990 0.898990 0.000000 0.909091 0.909091 0.000000 0.919192 0.919192 0.000000 0.929293 0.929293 0.000000 0.939394 0.939394 0.000000 0.949495 0.949495 0.000000 0.959596 0.959596 0.000000 0.969697 0.969697 0.000000 0.979798 0.979798 0.000000 0.989899 0.989899 0.000000 1.000000 1.000000 0.010101 0.000000 0.010101 0.010101 0.010101 0.020049 0.010101 0.020202 0.029997 0.010101 0.030303 0.039945 0.010101 0.040404 0.049893 0.010101 0.050505 0.059841 0.010101 0.060606 0.069789 0.010101 0.070707 0.079737 0.010101 0.080808 0.089685 0.010101 0.090909 0.099633 0.010101 0.101010 0.109581 0.010101 0.111111 0.119529 0.010101 0.121212 0.129477 0.010101 0.131313 0.139425 0.010101 0.141414 0.149373 0.010101 0.151515 0.159320 0.010101 0.161616 0.169268 0.010101 0.171717 0.179216 0.010101 0.181818 0.189164 0.010101 0.191919 0.199112 0.010101 0.202020 0.209060 0.010101 0.212121 0.219008 0.010101 0.222222 0.228956 0.010101 0.232323 0.238904 0.010101 0.242424 0.248852 0.010101 0.252525 0.258800 0.010101 0.262626 0.268748 0.010101 0.272727 0.278696 0.010101 0.282828 0.288644 0.010101 0.292929 0.298592 0.010101 0.303030 0.308540 0.010101 0.313131 0.318488 0.010101 0.323232 0.328436 0.010101 0.333333 0.338384 0.010101 0.343434 0.348332 0.010101 0.353535 0.358280 0.010101 0.363636 0.368228 0.010101 0.373737 0.378176 0.010101 0.383838 0.388124 0.010101 0.393939 0.398072 0.010101 0.404040 0.408020 0.010101 0.414141 0.417968 0.010101 0.424242 0.427916 0.010101 0.434343 0.437863 0.010101 0.444444 0.447811 0.010101 0.454545 0.457759 0.010101 0.464646 0.467707 0.010101 0.474747 0.477655 0.010101 0.484848 0.487603 0.010101 0.494949 0.497551 0.010101 0.505051 0.507499 0.010101 0.515152 0.517447 0.010101 0.525253 0.527395 0.010101 0.535354 0.537343 0.010101 0.545455 0.547291 0.010101 0.555556 0.557239 0.010101 0.565657 0.567187 0.010101 0.575758 0.577135 0.010101 0.585859 0.587083 0.010101 0.595960 0.597031 0.010101 0.606061 0.606979 0.010101 0.616162 0.616927 0.010101 0.626263 0.626875 0.010101 0.636364 0.636823 0.010101 0.646465 0.646771 0.010101 0.656566 0.656719 0.010101 0.666667 0.666667 0.010101 0.676768 0.676615 0.010101 0.686869 0.686563 0.010101 0.696970 0.696511 0.010101 0.707071 0.706459 0.010101 0.717172 0.716406 0.010101 0.727273 0.726354 0.010101 0.737374 0.736302 0.010101 0.747475 0.746250 0.010101 0.757576 0.756198 0.010101 0.767677 0.766146 0.010101 0.777778 0.776094 0.010101 0.787879 0.786042 0.010101 0.797980 0.795990 0.010101 0.808081 0.805938 0.010101 0.818182 0.815886 0.010101 0.828283 0.825834 0.010101 0.838384 0.835782 0.010101 0.848485 0.845730 0.010101 0.858586 0.855678 0.010101 0.868687 0.865626 0.010101 0.878788 0.875574 0.010101 0.888889 0.885522 0.010101 0.898990 0.895470 0.010101 0.909091 0.905418 0.010101 0.919192 0.915366 0.010101 0.929293 0.925314 0.010101 0.939394 0.935262 0.010101 0.949495 0.945210 0.010101 0.959596 0.955158 0.010101 0.969697 0.965106 0.010101 0.979798 0.975054 0.010101 0.989899 0.985002 0.010101 1.000000 0.994949 0.020202 0.000000 0.020202 0.020202 0.010101 0.029997 0.020202 0.020202 0.039792 0.020202 0.030303 0.049587 0.020202 0.040404 0.059382 0.020202 0.050505 0.069177 0.020202 0.060606 0.078972 0.020202 0.070707 0.088766 0.020202 0.080808 0.098561 0.020202 0.090909 0.108356 0.020202 0.101010 0.118151 0.020202 0.111111 0.127946 0.020202 0.121212 0.137741 0.020202 0.131313 0.147536 0.020202 0.141414 0.157331 0.020202 0.151515 0.167126 0.020202 0.161616 0.176921 0.020202 0.171717 0.186716 0.020202 0.181818 0.196511 0.020202 0.191919 0.206305 0.020202 0.202020 0.216100 0.020202 0.212121 0.225895 0.020202 0.222222 0.235690 0.020202 0.232323 0.245485 0.020202 0.242424 0.255280 0.020202 0.252525 0.265075 0.020202 0.262626 0.274870 0.020202 0.272727 0.284665 0.020202 0.282828 0.294460 0.020202 0.292929 0.304255 0.020202 0.303030 0.314050 0.020202 0.313131 0.323845 0.020202 0.323232 0.333639 0.020202 0.333333 0.343434 0.020202 0.343434 0.353229 0.020202 0.353535 0.363024 0.020202 0.363636 0.372819 0.020202 0.373737 0.382614 0.020202 0.383838 0.392409 0.020202 0.393939 0.402204 0.020202 0.404040 0.411999 0.020202 0.414141 0.421794 0.020202 0.424242 0.431589 0.020202 0.434343 0.441384 0.020202 0.444444 0.451178 0.020202 0.454545 0.460973 0.020202 0.464646 0.470768 0.020202 0.474747 0.480563 0.020202 0.484848 0.490358 0.020202 0.494949 0.500153 0.020202 0.505051 0.509948 0.020202 0.515152 0.519743 0.020202 0.525253 0.529538 0.020202 0.535354 0.539333 0.020202 0.545455 0.549128 0.020202 0.555556 0.558923 0.020202 0.565657 0.568717 0.020202 0.575758 0.578512 0.020202 0.585859 0.588307 0.020202 0.595960 0.598102 0.020202 0.606061 0.607897 0.020202 0.616162 0.617692 0.020202 0.626263 0.627487 0.020202 0.636364 0.637282 0.020202 0.646465 0.647077 0.020202 0.656566 0.656872 0.020202 0.666667 0.666667 0.020202 0.676768 0.676462 0.020202 0.686869 0.686257 0.020202 0.696970 0.696051 0.020202 0.707071 0.705846 0.020202 0.717172 0.715641 0.020202 0.727273 0.725436 0.020202 0.737374 0.735231 0.020202 0.747475 0.745026 0.020202 0.757576 0.754821 0.020202 0.767677 0.764616 0.020202 0.777778 0.774411 0.020202 0.787879 0.784206 0.020202 0.797980 0.794001 0.020202 0.808081 0.803796 0.020202 0.818182 0.813590 0.020202 0.828283 0.823385 0.020202 0.838384 0.833180 0.020202 0.848485 0.842975 0.020202 0.858586 0.852770 0.020202 0.868687 0.862565 0.020202 0.878788 0.872360 0.020202 0.888889 0.882155 0.020202 0.898990 0.891950 0.020202 0.909091 0.901745 0.020202 0.919192 0.911540 0.020202 0.929293 0.921335 0.020202 0.939394 0.931129 0.020202 0.949495 0.940924 0.020202 0.959596 0.950719 0.020202 0.969697 0.960514 0.020202 0.979798 0.970309 0.020202 0.989899 0.980104 0.020202 1.000000 0.989899 0.030303 0.000000 0.030303 0.030303 0.010101 0.039945 0.030303 0.020202 0.049587 0.030303 0.030303 0.059229 0.030303 0.040404 0.068871 0.030303 0.050505 0.078512 0.030303 0.060606 0.088154 0.030303 0.070707 0.097796 0.030303 0.080808 0.107438 0.030303 0.090909 0.117080 0.030303 0.101010 0.126722 0.030303 0.111111 0.136364 0.030303 0.121212 0.146006 0.030303 0.131313 0.155647 0.030303 0.141414 0.165289 0.030303 0.151515 0.174931 0.030303 0.161616 0.184573 0.030303 0.171717 0.194215 0.030303 0.181818 0.203857 0.030303 0.191919 0.213499 0.030303 0.202020 0.223140 0.030303 0.212121 0.232782 0.030303 0.222222 0.242424 0.030303 0.232323 0.252066 0.030303 0.242424 0.261708 0.030303 0.252525 0.271350 0.030303 0.262626 0.280992 0.030303 0.272727 0.290634 0.030303 0.282828 0.300275 0.030303 0.292929 0.309917 0.030303 0.303030 0.319559 0.030303 0.313131 0.329201 0.030303 0.323232 0.338843 0.030303 0.333333 0.348485 0.030303 0.343434 0.358127 0.030303 0.353535 0.367769 0.030303 0.363636 0.377410 0.030303 0.373737 0.387052 0.030303 0.383838 0.396694 0.030303 0.393939 0.406336 0.030303 0.404040 0.415978 0.030303 0.414141 0.425620 0.030303 0.424242 0.435262 0.030303 0.434343 0.444904 0.030303 0.444444 0.454545 0.030303 0.454545 0.464187 0.030303 0.464646 0.473829 0.030303 0.474747 0.483471 0.030303 0.484848 0.493113 0.030303 0.494949 0.502755 0.030303 0.505051 0.512397 0.030303 0.515152 0.522039 0.030303 0.525253 0.531680 0.030303 0.535354 0.541322 0.030303 0.545455 0.550964 0.030303 0.555556 0.560606 0.030303 0.565657 0.570248 0.030303 0.575758 0.579890 0.030303 0.585859 0.589532 0.030303 0.595960 0.599174 0.030303 0.606061 0.608815 0.030303 0.616162 0.618457 0.030303 0.626263 0.628099 0.030303 0.636364 0.637741 0.030303 0.646465 0.647383 0.030303 0.656566 0.657025 0.030303 0.666667 0.666667 0.030303 0.676768 0.676309 0.030303 0.686869 0.685950 0.030303 0.696970 0.695592 0.030303 0.707071 0.705234 0.030303 0.717172 0.714876 0.030303 0.727273 0.724518 0.030303 0.737374 0.734160 0.030303 0.747475 0.743802 0.030303 0.757576 0.753444 0.030303 0.767677 0.763085 0.030303 0.777778 0.772727 0.030303 0.787879 0.782369 0.030303 0.797980 0.792011 0.030303 0.808081 0.801653 0.030303 0.818182 0.811295 0.030303 0.828283 0.820937 0.030303 0.838384 0.830579 0.030303 0.848485 0.840220 0.030303 0.858586 0.849862 0.030303 0.868687 0.859504 0.030303 0.878788 0.869146 0.030303 0.888889 0.878788 0.030303 0.898990 0.888430 0.030303 0.909091 0.898072 0.030303 0.919192 0.907713 0.030303 0.929293 0.917355 0.030303 0.939394 0.926997 0.030303 0.949495 0.936639 0.030303 0.959596 0.946281 0.030303 0.969697 0.955923 0.030303 0.979798 0.965565 0.030303 0.989899 0.975207 0.030303 1.000000 0.984848 0.040404 0.000000 0.040404 0.040404 0.010101 0.049893 0.040404 0.020202 0.059382 0.040404 0.030303 0.068871 0.040404 0.040404 0.078359 0.040404 0.050505 0.087848 0.040404 0.060606 0.097337 0.040404 0.070707 0.106826 0.040404 0.080808 0.116315 0.040404 0.090909 0.125803 0.040404 0.101010 0.135292 0.040404 0.111111 0.144781 0.040404 0.121212 0.154270 0.040404 0.131313 0.163759 0.040404 0.141414 0.173248 0.040404 0.151515 0.182736 0.040404 0.161616 0.192225 0.040404 0.171717 0.201714 0.040404 0.181818 0.211203 0.040404 0.191919 0.220692 0.040404 0.202020 0.230181 0.040404 0.212121 0.239669 0.040404 0.222222 0.249158 0.040404 0.232323 0.258647 0.040404 0.242424 0.268136 0.040404 0.252525 0.277625 0.040404 0.262626 0.287114 0.040404 0.272727 0.296602 0.040404 0.282828 0.306091 0.040404 0.292929 0.315580 0.040404 0.303030 0.325069 0.040404 0.313131 0.334558 0.040404 0.323232 0.344047 0.040404 0.333333 0.353535 0.040404 0.343434 0.363024 0.040404 0.353535 0.372513 0.040404 0.363636 0.382002 0.040404 0.373737 0.391491 0.040404 0.383838 0.400979 0.040404 0.393939 0.410468 0.040404 0.404040 0.419957 0.040404 0.414141 0.429446 0.040404 0.424242 0.438935 0.040404 0.434343 0.448424 0.040404 0.444444 0.457912 0.040404 0.454545 0.467401 0.040404 0.464646 0.476890 0.040404 0.474747 0.486379 0.040404 0.484848 0.495868 0.040404 0.494949 0.505357 0.040404 0.505051 0.514845 0.040404 0.515152 0.524334 0.040404 0.525253 0.533823 0.040404 0.535354 0.543312 0.040404 0.545455 0.552801 0.040404 0.555556 0.562290 0.040404 0.565657 0.571778 0.040404 0.575758 0.581267 0.040404 0.585859 0.590756 0.040404 0.595960 0.600245 0.040404 0.606061 0.609734 0.040404 0.616162 0.619223 0.040404 0.626263 0.628711 0.040404 0.636364 0.638200 0.040404 0.646465 0.647689 0.040404 0.656566 0.657178 0.040404 0.666667 0.666667 0.040404 0.676768 0.676155 0.040404 0.686869 0.685644 0.040404 0.696970 0.695133 0.040404 0.707071 0.704622 0.040404 0.717172 0.714111 0.040404 0.727273 0.723600 0.040404 0.737374 0.733088 0.040404 0.747475 0.742577 0.040404 0.757576 0.752066 0.040404 0.767677 0.761555 0.040404 0.777778 0.771044 0.040404 0.787879 0.780533 0.040404 0.797980 0.790021 0.040404 0.808081 0.799510 0.040404 0.818182 0.808999 0.040404 0.828283 0.818488 0.040404 0.838384 0.827977 0.040404 0.848485 0.837466 0.040404 0.858586 0.846954 0.040404 0.868687 0.856443 0.040404 0.878788 0.865932 0.040404 0.888889 0.875421 0.040404 0.898990 0.884910 0.040404 0.909091 0.894399 0.040404 0.919192 0.903887 0.040404 0.929293 0.913376 0.040404 0.939394 0.922865 0.040404 0.949495 0.932354 0.040404 0.959596 0.941843 0.040404 0.969697 0.951331 0.040404 0.979798 0.960820 0.040404 0.989899 0.970309 0.040404 1.000000 0.979798 0.050505 0.000000 0.050505 0.050505 0.010101 0.059841 0.050505 0.020202 0.069177 0.050505 0.030303 0.078512 0.050505 0.040404 0.087848 0.050505 0.050505 0.097184 0.050505 0.060606 0.106520 0.050505 0.070707 0.115856 0.050505 0.080808 0.125191 0.050505 0.090909 0.134527 0.050505 0.101010 0.143863 0.050505 0.111111 0.153199 0.050505 0.121212 0.162534 0.050505 0.131313 0.171870 0.050505 0.141414 0.181206 0.050505 0.151515 0.190542 0.050505 0.161616 0.199878 0.050505 0.171717 0.209213 0.050505 0.181818 0.218549 0.050505 0.191919 0.227885 0.050505 0.202020 0.237221 0.050505 0.212121 0.246556 0.050505 0.222222 0.255892 0.050505 0.232323 0.265228 0.050505 0.242424 0.274564 0.050505 0.252525 0.283900 0.050505 0.262626 0.293235 0.050505 0.272727 0.302571 0.050505 0.282828 0.311907 0.050505 0.292929 0.321243 0.050505 0.303030 0.330579 0.050505 0.313131 0.339914 0.050505 0.323232 0.349250 0.050505 0.333333 0.358586 0.050505 0.343434 0.367922 0.050505 0.353535 0.377257 0.050505 0.363636 0.386593 0.050505 0.373737 0.395929 0.050505 0.383838 0.405265 0.050505 0.393939 0.414601 0.050505 0.404040 0.423936 0.050505 0.414141 0.433272 0.050505 0.424242 0.442608 0.050505 0.434343 0.451944 0.050505 0.444444 0.461279 0.050505 0.454545 0.470615 0.050505 0.464646 0.479951 0.050505 0.474747 0.489287 0.050505 0.484848 0.498623 0.050505 0.494949 0.507958 0.050505 0.505051 0.517294 0.050505 0.515152 0.526630 0.050505 0.525253 0.535966 0.050505 0.535354 0.545301 0.050505 0.545455 0.554637 0.050505 0.555556 0.563973 0.050505 0.565657 0.573309 0.050505 0.575758 0.582645 0.050505 0.585859 0.591980 0.050505 0.595960 0.601316 0.050505 0.606061 0.610652 0.050505 0.616162 0.619988 0.050505 0.626263 0.629324 0.050505 0.636364 0.638659 0.050505 0.646465 0.647995 0.050505 0.656566 0.657331 0.050505 0.666667 0.666667 0.050505 0.676768 0.676002 0.050505 0.686869 0.685338 0.050505 0.696970 0.694674 0.050505 0.707071 0.704010 0.050505 0.717172 0.713346 0.050505 0.727273 0.722681 0.050505 0.737374 0.732017 0.050505 0.747475 0.741353 0.050505 0.757576 0.750689 0.050505 0.767677 0.760024 0.050505 0.777778 0.769360 0.050505 0.787879 0.778696 0.050505 0.797980 0.788032 0.050505 0.808081 0.797368 0.050505 0.818182 0.806703 0.050505 0.828283 0.816039 0.050505 0.838384 0.825375 0.050505 0.848485 0.834711 0.050505 0.858586 0.844047 0.050505 0.868687 0.853382 0.050505 0.878788 0.862718 0.050505 0.888889 0.872054 0.050505 0.898990 0.881390 0.050505 0.909091 0.890725 0.050505 0.919192 0.900061 0.050505 0.929293 0.909397 0.050505 0.939394 0.918733 0.050505 0.949495 0.928069 0.050505 0.959596 0.937404 0.050505 0.969697 0.946740 0.050505 0.979798 0.956076 0.050505 0.989899 0.965412 0.050505 1.000000 0.974747 0.060606 0.000000 0.060606 0.060606 0.010101 0.069789 0.060606 0.020202 0.078972 0.060606 0.030303 0.088154 0.060606 0.040404 0.097337 0.060606 0.050505 0.106520 0.060606 0.060606 0.115702 0.060606 0.070707 0.124885 0.060606 0.080808 0.134068 0.060606 0.090909 0.143251 0.060606 0.101010 0.152433 0.060606 0.111111 0.161616 0.060606 0.121212 0.170799 0.060606 0.131313 0.179982 0.060606 0.141414 0.189164 0.060606 0.151515 0.198347 0.060606 0.161616 0.207530 0.060606 0.171717 0.216713 0.060606 0.181818 0.225895 0.060606 0.191919 0.235078 0.060606 0.202020 0.244261 0.060606 0.212121 0.253444 0.060606 0.222222 0.262626 0.060606 0.232323 0.271809 0.060606 0.242424 0.280992 0.060606 0.252525 0.290174 0.060606 0.262626 0.299357 0.060606 0.272727 0.308540 0.060606 0.282828 0.317723 0.060606 0.292929 0.326905 0.060606 0.303030 0.336088 0.060606 0.313131 0.345271 0.060606 0.323232 0.354454 0.060606 0.333333 0.363636 0.060606 0.343434 0.372819 0.060606 0.353535 0.382002 0.060606 0.363636 0.391185 0.060606 0.373737 0.400367 0.060606 0.383838 0.409550 0.060606 0.393939 0.418733 0.060606 0.404040 0.427916 0.060606 0.414141 0.437098 0.060606 0.424242 0.446281 0.060606 0.434343 0.455464 0.060606 0.444444 0.464646 0.060606 0.454545 0.473829 0.060606 0.464646 0.483012 0.060606 0.474747 0.492195 0.060606 0.484848 0.501377 0.060606 0.494949 0.510560 0.060606 0.505051 0.519743 0.060606 0.515152 0.528926 0.060606 0.525253 0.538108 0.060606 0.535354 0.547291 0.060606 0.545455 0.556474 0.060606 0.555556 0.565657 0.060606 0.565657 0.574839 0.060606 0.575758 0.584022 0.060606 0.585859 0.593205 0.060606 0.595960 0.602388 0.060606 0.606061 0.611570 0.060606 0.616162 0.620753 0.060606 0.626263 0.629936 0.060606 0.636364 0.639118 0.060606 0.646465 0.648301 0.060606 0.656566 0.657484 0.060606 0.666667 0.666667 0.060606 0.676768 0.675849 0.060606 0.686869 0.685032 0.060606 0.696970 0.694215 0.060606 0.707071 0.703398 0.060606 0.717172 0.712580 0.060606 0.727273 0.721763 0.060606 0.737374 0.730946 0.060606 0.747475 0.740129 0.060606 0.757576 0.749311 0.060606 0.767677 0.758494 0.060606 0.777778 0.767677 0.060606 0.787879 0.776860 0.060606 0.797980 0.786042 0.060606 0.808081 0.795225 0.060606 0.818182 0.804408 0.060606 0.828283 0.813590 0.060606 0.838384 0.822773 0.060606 0.848485 0.831956 0.060606 0.858586 0.841139 0.060606 0.868687 0.850321 0.060606 0.878788 0.859504 0.060606 0.888889 0.868687 0.060606 0.898990 0.877870 0.060606 0.909091 0.887052 0.060606 0.919192 0.896235 0.060606 0.929293 0.905418 0.060606 0.939394 0.914601 0.060606 0.949495 0.923783 0.060606 0.959596 0.932966 0.060606 0.969697 0.942149 0.060606 0.979798 0.951331 0.060606 0.989899 0.960514 0.060606 1.000000 0.969697 0.070707 0.000000 0.070707 0.070707 0.010101 0.079737 0.070707 0.020202 0.088766 0.070707 0.030303 0.097796 0.070707 0.040404 0.106826 0.070707 0.050505 0.115856 0.070707 0.060606 0.124885 0.070707 0.070707 0.133915 0.070707 0.080808 0.142945 0.070707 0.090909 0.151974 0.070707 0.101010 0.161004 0.070707 0.111111 0.170034 0.070707 0.121212 0.179063 0.070707 0.131313 0.188093 0.070707 0.141414 0.197123 0.070707 0.151515 0.206152 0.070707 0.161616 0.215182 0.070707 0.171717 0.224212 0.070707 0.181818 0.233242 0.070707 0.191919 0.242271 0.070707 0.202020 0.251301 0.070707 0.212121 0.260331 0.070707 0.222222 0.269360 0.070707 0.232323 0.278390 0.070707 0.242424 0.287420 0.070707 0.252525 0.296449 0.070707 0.262626 0.305479 0.070707 0.272727 0.314509 0.070707 0.282828 0.323538 0.070707 0.292929 0.332568 0.070707 0.303030 0.341598 0.070707 0.313131 0.350627 0.070707 0.323232 0.359657 0.070707 0.333333 0.368687 0.070707 0.343434 0.377717 0.070707 0.353535 0.386746 0.070707 0.363636 0.395776 0.070707 0.373737 0.404806 0.070707 0.383838 0.413835 0.070707 0.393939 0.422865 0.070707 0.404040 0.431895 0.070707 0.414141 0.440924 0.070707 0.424242 0.449954 0.070707 0.434343 0.458984 0.070707 0.444444 0.468013 0.070707 0.454545 0.477043 0.070707 0.464646 0.486073 0.070707 0.474747 0.495103 0.070707 0.484848 0.504132 0.070707 0.494949 0.513162 0.070707 0.505051 0.522192 0.070707 0.515152 0.531221 0.070707 0.525253 0.540251 0.070707 0.535354 0.549281 0.070707 0.545455 0.558310 0.070707 0.555556 0.567340 0.070707 0.565657 0.576370 0.070707 0.575758 0.585399 0.070707 0.585859 0.594429 0.070707 0.595960 0.603459 0.070707 0.606061 0.612489 0.070707 0.616162 0.621518 0.070707 0.626263 0.630548 0.070707 0.636364 0.639578 0.070707 0.646465 0.648607 0.070707 0.656566 0.657637 0.070707 0.666667 0.666667 0.070707 0.676768 0.675696 0.070707 0.686869 0.684726 0.070707 0.696970 0.693756 0.070707 0.707071 0.702785 0.070707 0.717172 0.711815 0.070707 0.727273 0.720845 0.070707 0.737374 0.729875 0.070707 0.747475 0.738904 0.070707 0.757576 0.747934 0.070707 0.767677 0.756964 0.070707 0.777778 0.765993 0.070707 0.787879 0.775023 0.070707 0.797980 0.784053 0.070707 0.808081 0.793082 0.070707 0.818182 0.802112 0.070707 0.828283 0.811142 0.070707 0.838384 0.820171 0.070707 0.848485 0.829201 0.070707 0.858586 0.838231 0.070707 0.868687 0.847260 0.070707 0.878788 0.856290 0.070707 0.888889 0.865320 0.070707 0.898990 0.874350 0.070707 0.909091 0.883379 0.070707 0.919192 0.892409 0.070707 0.929293 0.901439 0.070707 0.939394 0.910468 0.070707 0.949495 0.919498 0.070707 0.959596 0.928528 0.070707 0.969697 0.937557 0.070707 0.979798 0.946587 0.070707 0.989899 0.955617 0.070707 1.000000 0.964646 0.080808 0.000000 0.080808 0.080808 0.010101 0.089685 0.080808 0.020202 0.098561 0.080808 0.030303 0.107438 0.080808 0.040404 0.116315 0.080808 0.050505 0.125191 0.080808 0.060606 0.134068 0.080808 0.070707 0.142945 0.080808 0.080808 0.151821 0.080808 0.090909 0.160698 0.080808 0.101010 0.169575 0.080808 0.111111 0.178451 0.080808 0.121212 0.187328 0.080808 0.131313 0.196204 0.080808 0.141414 0.205081 0.080808 0.151515 0.213958 0.080808 0.161616 0.222834 0.080808 0.171717 0.231711 0.080808 0.181818 0.240588 0.080808 0.191919 0.249464 0.080808 0.202020 0.258341 0.080808 0.212121 0.267218 0.080808 0.222222 0.276094 0.080808 0.232323 0.284971 0.080808 0.242424 0.293848 0.080808 0.252525 0.302724 0.080808 0.262626 0.311601 0.080808 0.272727 0.320478 0.080808 0.282828 0.329354 0.080808 0.292929 0.338231 0.080808 0.303030 0.347107 0.080808 0.313131 0.355984 0.080808 0.323232 0.364861 0.080808 0.333333 0.373737 0.080808 0.343434 0.382614 0.080808 0.353535 0.391491 0.080808 0.363636 0.400367 0.080808 0.373737 0.409244 0.080808 0.383838 0.418121 0.080808 0.393939 0.426997 0.080808 0.404040 0.435874 0.080808 0.414141 0.444751 0.080808 0.424242 0.453627 0.080808 0.434343 0.462504 0.080808 0.444444 0.471380 0.080808 0.454545 0.480257 0.080808 0.464646 0.489134 0.080808 0.474747 0.498010 0.080808 0.484848 0.506887 0.080808 0.494949 0.515764 0.080808 0.505051 0.524640 0.080808 0.515152 0.533517 0.080808 0.525253 0.542394 0.080808 0.535354 0.551270 0.080808 0.545455 0.560147 0.080808 0.555556 0.569024 0.080808 0.565657 0.577900 0.080808 0.575758 0.586777 0.080808 0.585859 0.595654 0.080808 0.595960 0.604530 0.080808 0.606061 0.613407 0.080808 0.616162 0.622283 0.080808 0.626263 0.631160 0.080808 0.636364 0.640037 0.080808 0.646465 0.648913 0.080808 0.656566 0.657790 0.080808 0.666667 0.666667 0.080808 0.676768 0.675543 0.080808 0.686869 0.684420 0.080808 0.696970 0.693297 0.080808 0.707071 0.702173 0.080808 0.717172 0.711050 0.080808 0.727273 0.719927 0.080808 0.737374 0.728803 0.080808 0.747475 0.737680 0.080808 0.757576 0.746556 0.080808 0.767677 0.755433 0.080808 0.777778 0.764310 0.080808 0.787879 0.773186 0.080808 0.797980 0.782063 0.080808 0.808081 0.790940 0.080808 0.818182 0.799816 0.080808 0.828283 0.808693 0.080808 0.838384 0.817570 0.080808 0.848485 0.826446 0.080808 0.858586 0.835323 0.080808 0.868687 0.844200 0.080808 0.878788 0.853076 0.080808 0.888889 0.861953 0.080808 0.898990 0.870830 0.080808 0.909091 0.879706 0.080808 0.919192 0.888583 0.080808 0.929293 0.897459 0.080808 0.939394 0.906336 0.080808 0.949495 0.915213 0.080808 0.959596 0.924089 0.080808 0.969697 0.932966 0.080808 0.979798 0.941843 0.080808 0.989899 0.950719 0.080808 1.000000 0.959596 0.090909 0.000000 0.090909 0.090909 0.010101 0.099633 0.090909 0.020202 0.108356 0.090909 0.030303 0.117080 0.090909 0.040404 0.125803 0.090909 0.050505 0.134527 0.090909 0.060606 0.143251 0.090909 0.070707 0.151974 0.090909 0.080808 0.160698 0.090909 0.090909 0.169421 0.090909 0.101010 0.178145 0.090909 0.111111 0.186869 0.090909 0.121212 0.195592 0.090909 0.131313 0.204316 0.090909 0.141414 0.213039 0.090909 0.151515 0.221763 0.090909 0.161616 0.230487 0.090909 0.171717 0.239210 0.090909 0.181818 0.247934 0.090909 0.191919 0.256657 0.090909 0.202020 0.265381 0.090909 0.212121 0.274105 0.090909 0.222222 0.282828 0.090909 0.232323 0.291552 0.090909 0.242424 0.300275 0.090909 0.252525 0.308999 0.090909 0.262626 0.317723 0.090909 0.272727 0.326446 0.090909 0.282828 0.335170 0.090909 0.292929 0.343893 0.090909 0.303030 0.352617 0.090909 0.313131 0.361341 0.090909 0.323232 0.370064 0.090909 0.333333 0.378788 0.090909 0.343434 0.387511 0.090909 0.353535 0.396235 0.090909 0.363636 0.404959 0.090909 0.373737 0.413682 0.090909 0.383838 0.422406 0.090909 0.393939 0.431129 0.090909 0.404040 0.439853 0.090909 0.414141 0.448577 0.090909 0.424242 0.457300 0.090909 0.434343 0.466024 0.090909 0.444444 0.474747 0.090909 0.454545 0.483471 0.090909 0.464646 0.492195 0.090909 0.474747 0.500918 0.090909 0.484848 0.509642 0.090909 0.494949 0.518365 0.090909 0.505051 0.527089 0.090909 0.515152 0.535813 0.090909 0.525253 0.544536 0.090909 0.535354 0.553260 0.090909 0.545455 0.561983 0.090909 0.555556 0.570707 0.090909 0.565657 0.579431 0.090909 0.575758 0.588154 0.090909 0.585859 0.596878 0.090909 0.595960 0.605601 0.090909 0.606061 0.614325 0.090909 0.616162 0.623049 0.090909 0.626263 0.631772 0.090909 0.636364 0.640496 0.090909 0.646465 0.649219 0.090909 0.656566 0.657943 0.090909 0.666667 0.666667 0.090909 0.676768 0.675390 0.090909 0.686869 0.684114 0.090909 0.696970 0.692837 0.090909 0.707071 0.701561 0.090909 0.717172 0.710285 0.090909 0.727273 0.719008 0.090909 0.737374 0.727732 0.090909 0.747475 0.736455 0.090909 0.757576 0.745179 0.090909 0.767677 0.753903 0.090909 0.777778 0.762626 0.090909 0.787879 0.771350 0.090909 0.797980 0.780073 0.090909 0.808081 0.788797 0.090909 0.818182 0.797521 0.090909 0.828283 0.806244 0.090909 0.838384 0.814968 0.090909 0.848485 0.823691 0.090909 0.858586 0.832415 0.090909 0.868687 0.841139 0.090909 0.878788 0.849862 0.090909 0.888889 0.858586 0.090909 0.898990 0.867309 0.090909 0.909091 0.876033 0.090909 0.919192 0.884757 0.090909 0.929293 0.893480 0.090909 0.939394 0.902204 0.090909 0.949495 0.910927 0.090909 0.959596 0.919651 0.090909 0.969697 0.928375 0.090909 0.979798 0.937098 0.090909 0.989899 0.945822 0.090909 1.000000 0.954545 0.101010 0.000000 0.101010 0.101010 0.010101 0.109581 0.101010 0.020202 0.118151 0.101010 0.030303 0.126722 0.101010 0.040404 0.135292 0.101010 0.050505 0.143863 0.101010 0.060606 0.152433 0.101010 0.070707 0.161004 0.101010 0.080808 0.169575 0.101010 0.090909 0.178145 0.101010 0.101010 0.186716 0.101010 0.111111 0.195286 0.101010 0.121212 0.203857 0.101010 0.131313 0.212427 0.101010 0.141414 0.220998 0.101010 0.151515 0.229568 0.101010 0.161616 0.238139 0.101010 0.171717 0.246710 0.101010 0.181818 0.255280 0.101010 0.191919 0.263851 0.101010 0.202020 0.272421 0.101010 0.212121 0.280992 0.101010 0.222222 0.289562 0.101010 0.232323 0.298133 0.101010 0.242424 0.306703 0.101010 0.252525 0.315274 0.101010 0.262626 0.323845 0.101010 0.272727 0.332415 0.101010 0.282828 0.340986 0.101010 0.292929 0.349556 0.101010 0.303030 0.358127 0.101010 0.313131 0.366697 0.101010 0.323232 0.375268 0.101010 0.333333 0.383838 0.101010 0.343434 0.392409 0.101010 0.353535 0.400979 0.101010 0.363636 0.409550 0.101010 0.373737 0.418121 0.101010 0.383838 0.426691 0.101010 0.393939 0.435262 0.101010 0.404040 0.443832 0.101010 0.414141 0.452403 0.101010 0.424242 0.460973 0.101010 0.434343 0.469544 0.101010 0.444444 0.478114 0.101010 0.454545 0.486685 0.101010 0.464646 0.495256 0.101010 0.474747 0.503826 0.101010 0.484848 0.512397 0.101010 0.494949 0.520967 0.101010 0.505051 0.529538 0.101010 0.515152 0.538108 0.101010 0.525253 0.546679 0.101010 0.535354 0.555249 0.101010 0.545455 0.563820 0.101010 0.555556 0.572391 0.101010 0.565657 0.580961 0.101010 0.575758 0.589532 0.101010 0.585859 0.598102 0.101010 0.595960 0.606673 0.101010 0.606061 0.615243 0.101010 0.616162 0.623814 0.101010 0.626263 0.632384 0.101010 0.636364 0.640955 0.101010 0.646465 0.649526 0.101010 0.656566 0.658096 0.101010 0.666667 0.666667 0.101010 0.676768 0.675237 0.101010 0.686869 0.683808 0.101010 0.696970 0.692378 0.101010 0.707071 0.700949 0.101010 0.717172 0.709519 0.101010 0.727273 0.718090 0.101010 0.737374 0.726661 0.101010 0.747475 0.735231 0.101010 0.757576 0.743802 0.101010 0.767677 0.752372 0.101010 0.777778 0.760943 0.101010 0.787879 0.769513 0.101010 0.797980 0.778084 0.101010 0.808081 0.786654 0.101010 0.818182 0.795225 0.101010 0.828283 0.803796 0.101010 0.838384 0.812366 0.101010 0.848485 0.820937 0.101010 0.858586 0.829507 0.101010 0.868687 0.838078 0.101010 0.878788 0.846648 0.101010 0.888889 0.855219 0.101010 0.898990 0.863789 0.101010 0.909091 0.872360 0.101010 0.919192 0.880931 0.101010 0.929293 0.889501 0.101010 0.939394 0.898072 0.101010 0.949495 0.906642 0.101010 0.959596 0.915213 0.101010 0.969697 0.923783 0.101010 0.979798 0.932354 0.101010 0.989899 0.940924 0.101010 1.000000 0.949495 0.111111 0.000000 0.111111 0.111111 0.010101 0.119529 0.111111 0.020202 0.127946 0.111111 0.030303 0.136364 0.111111 0.040404 0.144781 0.111111 0.050505 0.153199 0.111111 0.060606 0.161616 0.111111 0.070707 0.170034 0.111111 0.080808 0.178451 0.111111 0.090909 0.186869 0.111111 0.101010 0.195286 0.111111 0.111111 0.203704 0.111111 0.121212 0.212121 0.111111 0.131313 0.220539 0.111111 0.141414 0.228956 0.111111 0.151515 0.237374 0.111111 0.161616 0.245791 0.111111 0.171717 0.254209 0.111111 0.181818 0.262626 0.111111 0.191919 0.271044 0.111111 0.202020 0.279461 0.111111 0.212121 0.287879 0.111111 0.222222 0.296296 0.111111 0.232323 0.304714 0.111111 0.242424 0.313131 0.111111 0.252525 0.321549 0.111111 0.262626 0.329966 0.111111 0.272727 0.338384 0.111111 0.282828 0.346801 0.111111 0.292929 0.355219 0.111111 0.303030 0.363636 0.111111 0.313131 0.372054 0.111111 0.323232 0.380471 0.111111 0.333333 0.388889 0.111111 0.343434 0.397306 0.111111 0.353535 0.405724 0.111111 0.363636 0.414141 0.111111 0.373737 0.422559 0.111111 0.383838 0.430976 0.111111 0.393939 0.439394 0.111111 0.404040 0.447811 0.111111 0.414141 0.456229 0.111111 0.424242 0.464646 0.111111 0.434343 0.473064 0.111111 0.444444 0.481481 0.111111 0.454545 0.489899 0.111111 0.464646 0.498316 0.111111 0.474747 0.506734 0.111111 0.484848 0.515152 0.111111 0.494949 0.523569 0.111111 0.505051 0.531987 0.111111 0.515152 0.540404 0.111111 0.525253 0.548822 0.111111 0.535354 0.557239 0.111111 0.545455 0.565657 0.111111 0.555556 0.574074 0.111111 0.565657 0.582492 0.111111 0.575758 0.590909 0.111111 0.585859 0.599327 0.111111 0.595960 0.607744 0.111111 0.606061 0.616162 0.111111 0.616162 0.624579 0.111111 0.626263 0.632997 0.111111 0.636364 0.641414 0.111111 0.646465 0.649832 0.111111 0.656566 0.658249 0.111111 0.666667 0.666667 0.111111 0.676768 0.675084 0.111111 0.686869 0.683502 0.111111 0.696970 0.691919 0.111111 0.707071 0.700337 0.111111 0.717172 0.708754 0.111111 0.727273 0.717172 0.111111 0.737374 0.725589 0.111111 0.747475 0.734007 0.111111 0.757576 0.742424 0.111111 0.767677 0.750842 0.111111 0.777778 0.759259 0.111111 0.787879 0.767677 0.111111 0.797980 0.776094 0.111111 0.808081 0.784512 0.111111 0.818182 0.792929 0.111111 0.828283 0.801347 0.111111 0.838384 0.809764 0.111111 0.848485 0.818182 0.111111 0.858586 0.826599 0.111111 0.868687 0.835017 0.111111 0.878788 0.843434 0.111111 0.888889 0.851852 0.111111 0.898990 0.860269 0.111111 0.909091 0.868687 0.111111 0.919192 0.877104 0.111111 0.929293 0.885522 0.111111 0.939394 0.893939 0.111111 0.949495 0.902357 0.111111 0.959596 0.910774 0.111111 0.969697 0.919192 0.111111 0.979798 0.927609 0.111111 0.989899 0.936027 0.111111 1.000000 0.944444 0.121212 0.000000 0.121212 0.121212 0.010101 0.129477 0.121212 0.020202 0.137741 0.121212 0.030303 0.146006 0.121212 0.040404 0.154270 0.121212 0.050505 0.162534 0.121212 0.060606 0.170799 0.121212 0.070707 0.179063 0.121212 0.080808 0.187328 0.121212 0.090909 0.195592 0.121212 0.101010 0.203857 0.121212 0.111111 0.212121 0.121212 0.121212 0.220386 0.121212 0.131313 0.228650 0.121212 0.141414 0.236915 0.121212 0.151515 0.245179 0.121212 0.161616 0.253444 0.121212 0.171717 0.261708 0.121212 0.181818 0.269972 0.121212 0.191919 0.278237 0.121212 0.202020 0.286501 0.121212 0.212121 0.294766 0.121212 0.222222 0.303030 0.121212 0.232323 0.311295 0.121212 0.242424 0.319559 0.121212 0.252525 0.327824 0.121212 0.262626 0.336088 0.121212 0.272727 0.344353 0.121212 0.282828 0.352617 0.121212 0.292929 0.360882 0.121212 0.303030 0.369146 0.121212 0.313131 0.377410 0.121212 0.323232 0.385675 0.121212 0.333333 0.393939 0.121212 0.343434 0.402204 0.121212 0.353535 0.410468 0.121212 0.363636 0.418733 0.121212 0.373737 0.426997 0.121212 0.383838 0.435262 0.121212 0.393939 0.443526 0.121212 0.404040 0.451791 0.121212 0.414141 0.460055 0.121212 0.424242 0.468320 0.121212 0.434343 0.476584 0.121212 0.444444 0.484848 0.121212 0.454545 0.493113 0.121212 0.464646 0.501377 0.121212 0.474747 0.509642 0.121212 0.484848 0.517906 0.121212 0.494949 0.526171 0.121212 0.505051 0.534435 0.121212 0.515152 0.542700 0.121212 0.525253 0.550964 0.121212 0.535354 0.559229 0.121212 0.545455 0.567493 0.121212 0.555556 0.575758 0.121212 0.565657 0.584022 0.121212 0.575758 0.592287 0.121212 0.585859 0.600551 0.121212 0.595960 0.608815 0.121212 0.606061 0.617080 0.121212 0.616162 0.625344 0.121212 0.626263 0.633609 0.121212 0.636364 0.641873 0.121212 0.646465 0.650138 0.121212 0.656566 0.658402 0.121212 0.666667 0.666667 0.121212 0.676768 0.674931 0.121212 0.686869 0.683196 0.121212 0.696970 0.691460 0.121212 0.707071 0.699725 0.121212 0.717172 0.707989 0.121212 0.727273 0.716253 0.121212 0.737374 0.724518 0.121212 0.747475 0.732782 0.121212 0.757576 0.741047 0.121212 0.767677 0.749311 0.121212 0.777778 0.757576 0.121212 0.787879 0.765840 0.121212 0.797980 0.774105 0.121212 0.808081 0.782369 0.121212 0.818182 0.790634 0.121212 0.828283 0.798898 0.121212 0.838384 0.807163 0.121212 0.848485 0.815427 0.121212 0.858586 0.823691 0.121212 0.868687 0.831956 0.121212 0.878788 0.840220 0.121212 0.888889 0.848485 0.121212 0.898990 0.856749 0.121212 0.909091 0.865014 0.121212 0.919192 0.873278 0.121212 0.929293 0.881543 0.121212 0.939394 0.889807 0.121212 0.949495 0.898072 0.121212 0.959596 0.906336 0.121212 0.969697 0.914601 0.121212 0.979798 0.922865 0.121212 0.989899 0.931129 0.121212 1.000000 0.939394 0.131313 0.000000 0.131313 0.131313 0.010101 0.139425 0.131313 0.020202 0.147536 0.131313 0.030303 0.155647 0.131313 0.040404 0.163759 0.131313 0.050505 0.171870 0.131313 0.060606 0.179982 0.131313 0.070707 0.188093 0.131313 0.080808 0.196204 0.131313 0.090909 0.204316 0.131313 0.101010 0.212427 0.131313 0.111111 0.220539 0.131313 0.121212 0.228650 0.131313 0.131313 0.236762 0.131313 0.141414 0.244873 0.131313 0.151515 0.252984 0.131313 0.161616 0.261096 0.131313 0.171717 0.269207 0.131313 0.181818 0.277319 0.131313 0.191919 0.285430 0.131313 0.202020 0.293541 0.131313 0.212121 0.301653 0.131313 0.222222 0.309764 0.131313 0.232323 0.317876 0.131313 0.242424 0.325987 0.131313 0.252525 0.334099 0.131313 0.262626 0.342210 0.131313 0.272727 0.350321 0.131313 0.282828 0.358433 0.131313 0.292929 0.366544 0.131313 0.303030 0.374656 0.131313 0.313131 0.382767 0.131313 0.323232 0.390878 0.131313 0.333333 0.398990 0.131313 0.343434 0.407101 0.131313 0.353535 0.415213 0.131313 0.363636 0.423324 0.131313 0.373737 0.431436 0.131313 0.383838 0.439547 0.131313 0.393939 0.447658 0.131313 0.404040 0.455770 0.131313 0.414141 0.463881 0.131313 0.424242 0.471993 0.131313 0.434343 0.480104 0.131313 0.444444 0.488215 0.131313 0.454545 0.496327 0.131313 0.464646 0.504438 0.131313 0.474747 0.512550 0.131313 0.484848 0.520661 0.131313 0.494949 0.528773 0.131313 0.505051 0.536884 0.131313 0.515152 0.544995 0.131313 0.525253 0.553107 0.131313 0.535354 0.561218 0.131313 0.545455 0.569330 0.131313 0.555556 0.577441 0.131313 0.565657 0.585552 0.131313 0.575758 0.593664 0.131313 0.585859 0.601775 0.131313 0.595960 0.609887 0.131313 0.606061 0.617998 0.131313 0.616162 0.626110 0.131313 0.626263 0.634221 0.131313 0.636364 0.642332 0.131313 0.646465 0.650444 0.131313 0.656566 0.658555 0.131313 0.666667 0.666667 0.131313 0.676768 0.674778 0.131313 0.686869 0.682890 0.131313 0.696970 0.691001 0.131313 0.707071 0.699112 0.131313 0.717172 0.707224 0.131313 0.727273 0.715335 0.131313 0.737374 0.723447 0.131313 0.747475 0.731558 0.131313 0.757576 0.739669 0.131313 0.767677 0.747781 0.131313 0.777778 0.755892 0.131313 0.787879 0.764004 0.131313 0.797980 0.772115 0.131313 0.808081 0.780227 0.131313 0.818182 0.788338 0.131313 0.828283 0.796449 0.131313 0.838384 0.804561 0.131313 0.848485 0.812672 0.131313 0.858586 0.820784 0.131313 0.868687 0.828895 0.131313 0.878788 0.837006 0.131313 0.888889 0.845118 0.131313 0.898990 0.853229 0.131313 0.909091 0.861341 0.131313 0.919192 0.869452 0.131313 0.929293 0.877564 0.131313 0.939394 0.885675 0.131313 0.949495 0.893786 0.131313 0.959596 0.901898 0.131313 0.969697 0.910009 0.131313 0.979798 0.918121 0.131313 0.989899 0.926232 0.131313 1.000000 0.934343 0.141414 0.000000 0.141414 0.141414 0.010101 0.149373 0.141414 0.020202 0.157331 0.141414 0.030303 0.165289 0.141414 0.040404 0.173248 0.141414 0.050505 0.181206 0.141414 0.060606 0.189164 0.141414 0.070707 0.197123 0.141414 0.080808 0.205081 0.141414 0.090909 0.213039 0.141414 0.101010 0.220998 0.141414 0.111111 0.228956 0.141414 0.121212 0.236915 0.141414 0.131313 0.244873 0.141414 0.141414 0.252831 0.141414 0.151515 0.260790 0.141414 0.161616 0.268748 0.141414 0.171717 0.276706 0.141414 0.181818 0.284665 0.141414 0.191919 0.292623 0.141414 0.202020 0.300582 0.141414 0.212121 0.308540 0.141414 0.222222 0.316498 0.141414 0.232323 0.324457 0.141414 0.242424 0.332415 0.141414 0.252525 0.340373 0.141414 0.262626 0.348332 0.141414 0.272727 0.356290 0.141414 0.282828 0.364249 0.141414 0.292929 0.372207 0.141414 0.303030 0.380165 0.141414 0.313131 0.388124 0.141414 0.323232 0.396082 0.141414 0.333333 0.404040 0.141414 0.343434 0.411999 0.141414 0.353535 0.419957 0.141414 0.363636 0.427916 0.141414 0.373737 0.435874 0.141414 0.383838 0.443832 0.141414 0.393939 0.451791 0.141414 0.404040 0.459749 0.141414 0.414141 0.467707 0.141414 0.424242 0.475666 0.141414 0.434343 0.483624 0.141414 0.444444 0.491582 0.141414 0.454545 0.499541 0.141414 0.464646 0.507499 0.141414 0.474747 0.515458 0.141414 0.484848 0.523416 0.141414 0.494949 0.531374 0.141414 0.505051 0.539333 0.141414 0.515152 0.547291 0.141414 0.525253 0.555249 0.141414 0.535354 0.563208 0.141414 0.545455 0.571166 0.141414 0.555556 0.579125 0.141414 0.565657 0.587083 0.141414 0.575758 0.595041 0.141414 0.585859 0.603000 0.141414 0.595960 0.610958 0.141414 0.606061 0.618916 0.141414 0.616162 0.626875 0.141414 0.626263 0.634833 0.141414 0.636364 0.642792 0.141414 0.646465 0.650750 0.141414 0.656566 0.658708 0.141414 0.666667 0.666667 0.141414 0.676768 0.674625 0.141414 0.686869 0.682583 0.141414 0.696970 0.690542 0.141414 0.707071 0.698500 0.141414 0.717172 0.706459 0.141414 0.727273 0.714417 0.141414 0.737374 0.722375 0.141414 0.747475 0.730334 0.141414 0.757576 0.738292 0.141414 0.767677 0.746250 0.141414 0.777778 0.754209 0.141414 0.787879 0.762167 0.141414 0.797980 0.770125 0.141414 0.808081 0.778084 0.141414 0.818182 0.786042 0.141414 0.828283 0.794001 0.141414 0.838384 0.801959 0.141414 0.848485 0.809917 0.141414 0.858586 0.817876 0.141414 0.868687 0.825834 0.141414 0.878788 0.833792 0.141414 0.888889 0.841751 0.141414 0.898990 0.849709 0.141414 0.909091 0.857668 0.141414 0.919192 0.865626 0.141414 0.929293 0.873584 0.141414 0.939394 0.881543 0.141414 0.949495 0.889501 0.141414 0.959596 0.897459 0.141414 0.969697 0.905418 0.141414 0.979798 0.913376 0.141414 0.989899 0.921335 0.141414 1.000000 0.929293 0.151515 0.000000 0.151515 0.151515 0.010101 0.159320 0.151515 0.020202 0.167126 0.151515 0.030303 0.174931 0.151515 0.040404 0.182736 0.151515 0.050505 0.190542 0.151515 0.060606 0.198347 0.151515 0.070707 0.206152 0.151515 0.080808 0.213958 0.151515 0.090909 0.221763 0.151515 0.101010 0.229568 0.151515 0.111111 0.237374 0.151515 0.121212 0.245179 0.151515 0.131313 0.252984 0.151515 0.141414 0.260790 0.151515 0.151515 0.268595 0.151515 0.161616 0.276400 0.151515 0.171717 0.284206 0.151515 0.181818 0.292011 0.151515 0.191919 0.299816 0.151515 0.202020 0.307622 0.151515 0.212121 0.315427 0.151515 0.222222 0.323232 0.151515 0.232323 0.331038 0.151515 0.242424 0.338843 0.151515 0.252525 0.346648 0.151515 0.262626 0.354454 0.151515 0.272727 0.362259 0.151515 0.282828 0.370064 0.151515 0.292929 0.377870 0.151515 0.303030 0.385675 0.151515 0.313131 0.393480 0.151515 0.323232 0.401286 0.151515 0.333333 0.409091 0.151515 0.343434 0.416896 0.151515 0.353535 0.424702 0.151515 0.363636 0.432507 0.151515 0.373737 0.440312 0.151515 0.383838 0.448118 0.151515 0.393939 0.455923 0.151515 0.404040 0.463728 0.151515 0.414141 0.471534 0.151515 0.424242 0.479339 0.151515 0.434343 0.487144 0.151515 0.444444 0.494949 0.151515 0.454545 0.502755 0.151515 0.464646 0.510560 0.151515 0.474747 0.518365 0.151515 0.484848 0.526171 0.151515 0.494949 0.533976 0.151515 0.505051 0.541781 0.151515 0.515152 0.549587 0.151515 0.525253 0.557392 0.151515 0.535354 0.565197 0.151515 0.545455 0.573003 0.151515 0.555556 0.580808 0.151515 0.565657 0.588613 0.151515 0.575758 0.596419 0.151515 0.585859 0.604224 0.151515 0.595960 0.612029 0.151515 0.606061 0.619835 0.151515 0.616162 0.627640 0.151515 0.626263 0.635445 0.151515 0.636364 0.643251 0.151515 0.646465 0.651056 0.151515 0.656566 0.658861 0.151515 0.666667 0.666667 0.151515 0.676768 0.674472 0.151515 0.686869 0.682277 0.151515 0.696970 0.690083 0.151515 0.707071 0.697888 0.151515 0.717172 0.705693 0.151515 0.727273 0.713499 0.151515 0.737374 0.721304 0.151515 0.747475 0.729109 0.151515 0.757576 0.736915 0.151515 0.767677 0.744720 0.151515 0.777778 0.752525 0.151515 0.787879 0.760331 0.151515 0.797980 0.768136 0.151515 0.808081 0.775941 0.151515 0.818182 0.783747 0.151515 0.828283 0.791552 0.151515 0.838384 0.799357 0.151515 0.848485 0.807163 0.151515 0.858586 0.814968 0.151515 0.868687 0.822773 0.151515 0.878788 0.830579 0.151515 0.888889 0.838384 0.151515 0.898990 0.846189 0.151515 0.909091 0.853994 0.151515 0.919192 0.861800 0.151515 0.929293 0.869605 0.151515 0.939394 0.877410 0.151515 0.949495 0.885216 0.151515 0.959596 0.893021 0.151515 0.969697 0.900826 0.151515 0.979798 0.908632 0.151515 0.989899 0.916437 0.151515 1.000000 0.924242 0.161616 0.000000 0.161616 0.161616 0.010101 0.169268 0.161616 0.020202 0.176921 0.161616 0.030303 0.184573 0.161616 0.040404 0.192225 0.161616 0.050505 0.199878 0.161616 0.060606 0.207530 0.161616 0.070707 0.215182 0.161616 0.080808 0.222834 0.161616 0.090909 0.230487 0.161616 0.101010 0.238139 0.161616 0.111111 0.245791 0.161616 0.121212 0.253444 0.161616 0.131313 0.261096 0.161616 0.141414 0.268748 0.161616 0.151515 0.276400 0.161616 0.161616 0.284053 0.161616 0.171717 0.291705 0.161616 0.181818 0.299357 0.161616 0.191919 0.307009 0.161616 0.202020 0.314662 0.161616 0.212121 0.322314 0.161616 0.222222 0.329966 0.161616 0.232323 0.337619 0.161616 0.242424 0.345271 0.161616 0.252525 0.352923 0.161616 0.262626 0.360575 0.161616 0.272727 0.368228 0.161616 0.282828 0.375880 0.161616 0.292929 0.383532 0.161616 0.303030 0.391185 0.161616 0.313131 0.398837 0.161616 0.323232 0.406489 0.161616 0.333333 0.414141 0.161616 0.343434 0.421794 0.161616 0.353535 0.429446 0.161616 0.363636 0.437098 0.161616 0.373737 0.444751 0.161616 0.383838 0.452403 0.161616 0.393939 0.460055 0.161616 0.404040 0.467707 0.161616 0.414141 0.475360 0.161616 0.424242 0.483012 0.161616 0.434343 0.490664 0.161616 0.444444 0.498316 0.161616 0.454545 0.505969 0.161616 0.464646 0.513621 0.161616 0.474747 0.521273 0.161616 0.484848 0.528926 0.161616 0.494949 0.536578 0.161616 0.505051 0.544230 0.161616 0.515152 0.551882 0.161616 0.525253 0.559535 0.161616 0.535354 0.567187 0.161616 0.545455 0.574839 0.161616 0.555556 0.582492 0.161616 0.565657 0.590144 0.161616 0.575758 0.597796 0.161616 0.585859 0.605448 0.161616 0.595960 0.613101 0.161616 0.606061 0.620753 0.161616 0.616162 0.628405 0.161616 0.626263 0.636058 0.161616 0.636364 0.643710 0.161616 0.646465 0.651362 0.161616 0.656566 0.659014 0.161616 0.666667 0.666667 0.161616 0.676768 0.674319 0.161616 0.686869 0.681971 0.161616 0.696970 0.689624 0.161616 0.707071 0.697276 0.161616 0.717172 0.704928 0.161616 0.727273 0.712580 0.161616 0.737374 0.720233 0.161616 0.747475 0.727885 0.161616 0.757576 0.735537 0.161616 0.767677 0.743189 0.161616 0.777778 0.750842 0.161616 0.787879 0.758494 0.161616 0.797980 0.766146 0.161616 0.808081 0.773799 0.161616 0.818182 0.781451 0.161616 0.828283 0.789103 0.161616 0.838384 0.796755 0.161616 0.848485 0.804408 0.161616 0.858586 0.812060 0.161616 0.868687 0.819712 0.161616 0.878788 0.827365 0.161616 0.888889 0.835017 0.161616 0.898990 0.842669 0.161616 0.909091 0.850321 0.161616 0.919192 0.857974 0.161616 0.929293 0.865626 0.161616 0.939394 0.873278 0.161616 0.949495 0.880931 0.161616 0.959596 0.888583 0.161616 0.969697 0.896235 0.161616 0.979798 0.903887 0.161616 0.989899 0.911540 0.161616 1.000000 0.919192 0.171717 0.000000 0.171717 0.171717 0.010101 0.179216 0.171717 0.020202 0.186716 0.171717 0.030303 0.194215 0.171717 0.040404 0.201714 0.171717 0.050505 0.209213 0.171717 0.060606 0.216713 0.171717 0.070707 0.224212 0.171717 0.080808 0.231711 0.171717 0.090909 0.239210 0.171717 0.101010 0.246710 0.171717 0.111111 0.254209 0.171717 0.121212 0.261708 0.171717 0.131313 0.269207 0.171717 0.141414 0.276706 0.171717 0.151515 0.284206 0.171717 0.161616 0.291705 0.171717 0.171717 0.299204 0.171717 0.181818 0.306703 0.171717 0.191919 0.314203 0.171717 0.202020 0.321702 0.171717 0.212121 0.329201 0.171717 0.222222 0.336700 0.171717 0.232323 0.344200 0.171717 0.242424 0.351699 0.171717 0.252525 0.359198 0.171717 0.262626 0.366697 0.171717 0.272727 0.374197 0.171717 0.282828 0.381696 0.171717 0.292929 0.389195 0.171717 0.303030 0.396694 0.171717 0.313131 0.404193 0.171717 0.323232 0.411693 0.171717 0.333333 0.419192 0.171717 0.343434 0.426691 0.171717 0.353535 0.434190 0.171717 0.363636 0.441690 0.171717 0.373737 0.449189 0.171717 0.383838 0.456688 0.171717 0.393939 0.464187 0.171717 0.404040 0.471687 0.171717 0.414141 0.479186 0.171717 0.424242 0.486685 0.171717 0.434343 0.494184 0.171717 0.444444 0.501684 0.171717 0.454545 0.509183 0.171717 0.464646 0.516682 0.171717 0.474747 0.524181 0.171717 0.484848 0.531680 0.171717 0.494949 0.539180 0.171717 0.505051 0.546679 0.171717 0.515152 0.554178 0.171717 0.525253 0.561677 0.171717 0.535354 0.569177 0.171717 0.545455 0.576676 0.171717 0.555556 0.584175 0.171717 0.565657 0.591674 0.171717 0.575758 0.599174 0.171717 0.585859 0.606673 0.171717 0.595960 0.614172 0.171717 0.606061 0.621671 0.171717 0.616162 0.629170 0.171717 0.626263 0.636670 0.171717 0.636364 0.644169 0.171717 0.646465 0.651668 0.171717 0.656566 0.659167 0.171717 0.666667 0.666667 0.171717 0.676768 0.674166 0.171717 0.686869 0.681665 0.171717 0.696970 0.689164 0.171717 0.707071 0.696664 0.171717 0.717172 0.704163 0.171717 0.727273 0.711662 0.171717 0.737374 0.719161 0.171717 0.747475 0.726661 0.171717 0.757576 0.734160 0.171717 0.767677 0.741659 0.171717 0.777778 0.749158 0.171717 0.787879 0.756657 0.171717 0.797980 0.764157 0.171717 0.808081 0.771656 0.171717 0.818182 0.779155 0.171717 0.828283 0.786654 0.171717 0.838384 0.794154 0.171717 0.848485 0.801653 0.171717 0.858586 0.809152 0.171717 0.868687 0.816651 0.171717 0.878788 0.824151 0.171717 0.888889 0.831650 0.171717 0.898990 0.839149 0.171717 0.909091 0.846648 0.171717 0.919192 0.854148 0.171717 0.929293 0.861647 0.171717 0.939394 0.869146 0.171717 0.949495 0.876645 0.171717 0.959596 0.884144 0.171717 0.969697 0.891644 0.171717 0.979798 0.899143 0.171717 0.989899 0.906642 0.171717 1.000000 0.914141 0.181818 0.000000 0.181818 0.181818 0.010101 0.189164 0.181818 0.020202 0.196511 0.181818 0.030303 0.203857 0.181818 0.040404 0.211203 0.181818 0.050505 0.218549 0.181818 0.060606 0.225895 0.181818 0.070707 0.233242 0.181818 0.080808 0.240588 0.181818 0.090909 0.247934 0.181818 0.101010 0.255280 0.181818 0.111111 0.262626 0.181818 0.121212 0.269972 0.181818 0.131313 0.277319 0.181818 0.141414 0.284665 0.181818 0.151515 0.292011 0.181818 0.161616 0.299357 0.181818 0.171717 0.306703 0.181818 0.181818 0.314050 0.181818 0.191919 0.321396 0.181818 0.202020 0.328742 0.181818 0.212121 0.336088 0.181818 0.222222 0.343434 0.181818 0.232323 0.350781 0.181818 0.242424 0.358127 0.181818 0.252525 0.365473 0.181818 0.262626 0.372819 0.181818 0.272727 0.380165 0.181818 0.282828 0.387511 0.181818 0.292929 0.394858 0.181818 0.303030 0.402204 0.181818 0.313131 0.409550 0.181818 0.323232 0.416896 0.181818 0.333333 0.424242 0.181818 0.343434 0.431589 0.181818 0.353535 0.438935 0.181818 0.363636 0.446281 0.181818 0.373737 0.453627 0.181818 0.383838 0.460973 0.181818 0.393939 0.468320 0.181818 0.404040 0.475666 0.181818 0.414141 0.483012 0.181818 0.424242 0.490358 0.181818 0.434343 0.497704 0.181818 0.444444 0.505051 0.181818 0.454545 0.512397 0.181818 0.464646 0.519743 0.181818 0.474747 0.527089 0.181818 0.484848 0.534435 0.181818 0.494949 0.541781 0.181818 0.505051 0.549128 0.181818 0.515152 0.556474 0.181818 0.525253 0.563820 0.181818 0.535354 0.571166 0.181818 0.545455 0.578512 0.181818 0.555556 0.585859 0.181818 0.565657 0.593205 0.181818 0.575758 0.600551 0.181818 0.585859 0.607897 0.181818 0.595960 0.615243 0.181818 0.606061 0.622590 0.181818 0.616162 0.629936 0.181818 0.626263 0.637282 0.181818 0.636364 0.644628 0.181818 0.646465 0.651974 0.181818 0.656566 0.659320 0.181818 0.666667 0.666667 0.181818 0.676768 0.674013 0.181818 0.686869 0.681359 0.181818 0.696970 0.688705 0.181818 0.707071 0.696051 0.181818 0.717172 0.703398 0.181818 0.727273 0.710744 0.181818 0.737374 0.718090 0.181818 0.747475 0.725436 0.181818 0.757576 0.732782 0.181818 0.767677 0.740129 0.181818 0.777778 0.747475 0.181818 0.787879 0.754821 0.181818 0.797980 0.762167 0.181818 0.808081 0.769513 0.181818 0.818182 0.776860 0.181818 0.828283 0.784206 0.181818 0.838384 0.791552 0.181818 0.848485 0.798898 0.181818 0.858586 0.806244 0.181818 0.868687 0.813590 0.181818 0.878788 0.820937 0.181818 0.888889 0.828283 0.181818 0.898990 0.835629 0.181818 0.909091 0.842975 0.181818 0.919192 0.850321 0.181818 0.929293 0.857668 0.181818 0.939394 0.865014 0.181818 0.949495 0.872360 0.181818 0.959596 0.879706 0.181818 0.969697 0.887052 0.181818 0.979798 0.894399 0.181818 0.989899 0.901745 0.181818 1.000000 0.909091 0.191919 0.000000 0.191919 0.191919 0.010101 0.199112 0.191919 0.020202 0.206305 0.191919 0.030303 0.213499 0.191919 0.040404 0.220692 0.191919 0.050505 0.227885 0.191919 0.060606 0.235078 0.191919 0.070707 0.242271 0.191919 0.080808 0.249464 0.191919 0.090909 0.256657 0.191919 0.101010 0.263851 0.191919 0.111111 0.271044 0.191919 0.121212 0.278237 0.191919 0.131313 0.285430 0.191919 0.141414 0.292623 0.191919 0.151515 0.299816 0.191919 0.161616 0.307009 0.191919 0.171717 0.314203 0.191919 0.181818 0.321396 0.191919 0.191919 0.328589 0.191919 0.202020 0.335782 0.191919 0.212121 0.342975 0.191919 0.222222 0.350168 0.191919 0.232323 0.357361 0.191919 0.242424 0.364555 0.191919 0.252525 0.371748 0.191919 0.262626 0.378941 0.191919 0.272727 0.386134 0.191919 0.282828 0.393327 0.191919 0.292929 0.400520 0.191919 0.303030 0.407713 0.191919 0.313131 0.414907 0.191919 0.323232 0.422100 0.191919 0.333333 0.429293 0.191919 0.343434 0.436486 0.191919 0.353535 0.443679 0.191919 0.363636 0.450872 0.191919 0.373737 0.458066 0.191919 0.383838 0.465259 0.191919 0.393939 0.472452 0.191919 0.404040 0.479645 0.191919 0.414141 0.486838 0.191919 0.424242 0.494031 0.191919 0.434343 0.501224 0.191919 0.444444 0.508418 0.191919 0.454545 0.515611 0.191919 0.464646 0.522804 0.191919 0.474747 0.529997 0.191919 0.484848 0.537190 0.191919 0.494949 0.544383 0.191919 0.505051 0.551576 0.191919 0.515152 0.558770 0.191919 0.525253 0.565963 0.191919 0.535354 0.573156 0.191919 0.545455 0.580349 0.191919 0.555556 0.587542 0.191919 0.565657 0.594735 0.191919 0.575758 0.601928 0.191919 0.585859 0.609122 0.191919 0.595960 0.616315 0.191919 0.606061 0.623508 0.191919 0.616162 0.630701 0.191919 0.626263 0.637894 0.191919 0.636364 0.645087 0.191919 0.646465 0.652280 0.191919 0.656566 0.659474 0.191919 0.666667 0.666667 0.191919 0.676768 0.673860 0.191919 0.686869 0.681053 0.191919 0.696970 0.688246 0.191919 0.707071 0.695439 0.191919 0.717172 0.702632 0.191919 0.727273 0.709826 0.191919 0.737374 0.717019 0.191919 0.747475 0.724212 0.191919 0.757576 0.731405 0.191919 0.767677 0.738598 0.191919 0.777778 0.745791 0.191919 0.787879 0.752984 0.191919 0.797980 0.760178 0.191919 0.808081 0.767371 0.191919 0.818182 0.774564 0.191919 0.828283 0.781757 0.191919 0.838384 0.788950 0.191919 0.848485 0.796143 0.191919 0.858586 0.803336 0.191919 0.868687 0.810530 0.191919 0.878788 0.817723 0.191919 0.888889 0.824916 0.191919 0.898990 0.832109 0.191919 0.909091 0.839302 0.191919 0.919192 0.846495 0.191919 0.929293 0.853688 0.191919 0.939394 0.860882 0.191919 0.949495 0.868075 0.191919 0.959596 0.875268 0.191919 0.969697 0.882461 0.191919 0.979798 0.889654 0.191919 0.989899 0.896847 0.191919 1.000000 0.904040 0.202020 0.000000 0.202020 0.202020 0.010101 0.209060 0.202020 0.020202 0.216100 0.202020 0.030303 0.223140 0.202020 0.040404 0.230181 0.202020 0.050505 0.237221 0.202020 0.060606 0.244261 0.202020 0.070707 0.251301 0.202020 0.080808 0.258341 0.202020 0.090909 0.265381 0.202020 0.101010 0.272421 0.202020 0.111111 0.279461 0.202020 0.121212 0.286501 0.202020 0.131313 0.293541 0.202020 0.141414 0.300582 0.202020 0.151515 0.307622 0.202020 0.161616 0.314662 0.202020 0.171717 0.321702 0.202020 0.181818 0.328742 0.202020 0.191919 0.335782 0.202020 0.202020 0.342822 0.202020 0.212121 0.349862 0.202020 0.222222 0.356902 0.202020 0.232323 0.363942 0.202020 0.242424 0.370983 0.202020 0.252525 0.378023 0.202020 0.262626 0.385063 0.202020 0.272727 0.392103 0.202020 0.282828 0.399143 0.202020 0.292929 0.406183 0.202020 0.303030 0.413223 0.202020 0.313131 0.420263 0.202020 0.323232 0.427303 0.202020 0.333333 0.434343 0.202020 0.343434 0.441384 0.202020 0.353535 0.448424 0.202020 0.363636 0.455464 0.202020 0.373737 0.462504 0.202020 0.383838 0.469544 0.202020 0.393939 0.476584 0.202020 0.404040 0.483624 0.202020 0.414141 0.490664 0.202020 0.424242 0.497704 0.202020 0.434343 0.504744 0.202020 0.444444 0.511785 0.202020 0.454545 0.518825 0.202020 0.464646 0.525865 0.202020 0.474747 0.532905 0.202020 0.484848 0.539945 0.202020 0.494949 0.546985 0.202020 0.505051 0.554025 0.202020 0.515152 0.561065 0.202020 0.525253 0.568105 0.202020 0.535354 0.575145 0.202020 0.545455 0.582185 0.202020 0.555556 0.589226 0.202020 0.565657 0.596266 0.202020 0.575758 0.603306 0.202020 0.585859 0.610346 0.202020 0.595960 0.617386 0.202020 0.606061 0.624426 0.202020 0.616162 0.631466 0.202020 0.626263 0.638506 0.202020 0.636364 0.645546 0.202020 0.646465 0.652586 0.202020 0.656566 0.659627 0.202020 0.666667 0.666667 0.202020 0.676768 0.673707 0.202020 0.686869 0.680747 0.202020 0.696970 0.687787 0.202020 0.707071 0.694827 0.202020 0.717172 0.701867 0.202020 0.727273 0.708907 0.202020 0.737374 0.715947 0.202020 0.747475 0.722987 0.202020 0.757576 0.730028 0.202020 0.767677 0.737068 0.202020 0.777778 0.744108 0.202020 0.787879 0.751148 0.202020 0.797980 0.758188 0.202020 0.808081 0.765228 0.202020 0.818182 0.772268 0.202020 0.828283 0.779308 0.202020 0.838384 0.786348 0.202020 0.848485 0.793388 0.202020 0.858586 0.800429 0.202020 0.868687 0.807469 0.202020 0.878788 0.814509 0.202020 0.888889 0.821549 0.202020 0.898990 0.828589 0.202020 0.909091 0.835629 0.202020 0.919192 0.842669 0.202020 0.929293 0.849709 0.202020 0.939394 0.856749 0.202020 0.949495 0.863789 0.202020 0.959596 0.870830 0.202020 0.969697 0.877870 0.202020 0.979798 0.884910 0.202020 0.989899 0.891950 0.202020 1.000000 0.898990 0.212121 0.000000 0.212121 0.212121 0.010101 0.219008 0.212121 0.020202 0.225895 0.212121 0.030303 0.232782 0.212121 0.040404 0.239669 0.212121 0.050505 0.246556 0.212121 0.060606 0.253444 0.212121 0.070707 0.260331 0.212121 0.080808 0.267218 0.212121 0.090909 0.274105 0.212121 0.101010 0.280992 0.212121 0.111111 0.287879 0.212121 0.121212 0.294766 0.212121 0.131313 0.301653 0.212121 0.141414 0.308540 0.212121 0.151515 0.315427 0.212121 0.161616 0.322314 0.212121 0.171717 0.329201 0.212121 0.181818 0.336088 0.212121 0.191919 0.342975 0.212121 0.202020 0.349862 0.212121 0.212121 0.356749 0.212121 0.222222 0.363636 0.212121 0.232323 0.370523 0.212121 0.242424 0.377410 0.212121 0.252525 0.384298 0.212121 0.262626 0.391185 0.212121 0.272727 0.398072 0.212121 0.282828 0.404959 0.212121 0.292929 0.411846 0.212121 0.303030 0.418733 0.212121 0.313131 0.425620 0.212121 0.323232 0.432507 0.212121 0.333333 0.439394 0.212121 0.343434 0.446281 0.212121 0.353535 0.453168 0.212121 0.363636 0.460055 0.212121 0.373737 0.466942 0.212121 0.383838 0.473829 0.212121 0.393939 0.480716 0.212121 0.404040 0.487603 0.212121 0.414141 0.494490 0.212121 0.424242 0.501377 0.212121 0.434343 0.508264 0.212121 0.444444 0.515152 0.212121 0.454545 0.522039 0.212121 0.464646 0.528926 0.212121 0.474747 0.535813 0.212121 0.484848 0.542700 0.212121 0.494949 0.549587 0.212121 0.505051 0.556474 0.212121 0.515152 0.563361 0.212121 0.525253 0.570248 0.212121 0.535354 0.577135 0.212121 0.545455 0.584022 0.212121 0.555556 0.590909 0.212121 0.565657 0.597796 0.212121 0.575758 0.604683 0.212121 0.585859 0.611570 0.212121 0.595960 0.618457 0.212121 0.606061 0.625344 0.212121 0.616162 0.632231 0.212121 0.626263 0.639118 0.212121 0.636364 0.646006 0.212121 0.646465 0.652893 0.212121 0.656566 0.659780 0.212121 0.666667 0.666667 0.212121 0.676768 0.673554 0.212121 0.686869 0.680441 0.212121 0.696970 0.687328 0.212121 0.707071 0.694215 0.212121 0.717172 0.701102 0.212121 0.727273 0.707989 0.212121 0.737374 0.714876 0.212121 0.747475 0.721763 0.212121 0.757576 0.728650 0.212121 0.767677 0.735537 0.212121 0.777778 0.742424 0.212121 0.787879 0.749311 0.212121 0.797980 0.756198 0.212121 0.808081 0.763085 0.212121 0.818182 0.769972 0.212121 0.828283 0.776860 0.212121 0.838384 0.783747 0.212121 0.848485 0.790634 0.212121 0.858586 0.797521 0.212121 0.868687 0.804408 0.212121 0.878788 0.811295 0.212121 0.888889 0.818182 0.212121 0.898990 0.825069 0.212121 0.909091 0.831956 0.212121 0.919192 0.838843 0.212121 0.929293 0.845730 0.212121 0.939394 0.852617 0.212121 0.949495 0.859504 0.212121 0.959596 0.866391 0.212121 0.969697 0.873278 0.212121 0.979798 0.880165 0.212121 0.989899 0.887052 0.212121 1.000000 0.893939 0.222222 0.000000 0.222222 0.222222 0.010101 0.228956 0.222222 0.020202 0.235690 0.222222 0.030303 0.242424 0.222222 0.040404 0.249158 0.222222 0.050505 0.255892 0.222222 0.060606 0.262626 0.222222 0.070707 0.269360 0.222222 0.080808 0.276094 0.222222 0.090909 0.282828 0.222222 0.101010 0.289562 0.222222 0.111111 0.296296 0.222222 0.121212 0.303030 0.222222 0.131313 0.309764 0.222222 0.141414 0.316498 0.222222 0.151515 0.323232 0.222222 0.161616 0.329966 0.222222 0.171717 0.336700 0.222222 0.181818 0.343434 0.222222 0.191919 0.350168 0.222222 0.202020 0.356902 0.222222 0.212121 0.363636 0.222222 0.222222 0.370370 0.222222 0.232323 0.377104 0.222222 0.242424 0.383838 0.222222 0.252525 0.390572 0.222222 0.262626 0.397306 0.222222 0.272727 0.404040 0.222222 0.282828 0.410774 0.222222 0.292929 0.417508 0.222222 0.303030 0.424242 0.222222 0.313131 0.430976 0.222222 0.323232 0.437710 0.222222 0.333333 0.444444 0.222222 0.343434 0.451178 0.222222 0.353535 0.457912 0.222222 0.363636 0.464646 0.222222 0.373737 0.471380 0.222222 0.383838 0.478114 0.222222 0.393939 0.484848 0.222222 0.404040 0.491582 0.222222 0.414141 0.498316 0.222222 0.424242 0.505051 0.222222 0.434343 0.511785 0.222222 0.444444 0.518519 0.222222 0.454545 0.525253 0.222222 0.464646 0.531987 0.222222 0.474747 0.538721 0.222222 0.484848 0.545455 0.222222 0.494949 0.552189 0.222222 0.505051 0.558923 0.222222 0.515152 0.565657 0.222222 0.525253 0.572391 0.222222 0.535354 0.579125 0.222222 0.545455 0.585859 0.222222 0.555556 0.592593 0.222222 0.565657 0.599327 0.222222 0.575758 0.606061 0.222222 0.585859 0.612795 0.222222 0.595960 0.619529 0.222222 0.606061 0.626263 0.222222 0.616162 0.632997 0.222222 0.626263 0.639731 0.222222 0.636364 0.646465 0.222222 0.646465 0.653199 0.222222 0.656566 0.659933 0.222222 0.666667 0.666667 0.222222 0.676768 0.673401 0.222222 0.686869 0.680135 0.222222 0.696970 0.686869 0.222222 0.707071 0.693603 0.222222 0.717172 0.700337 0.222222 0.727273 0.707071 0.222222 0.737374 0.713805 0.222222 0.747475 0.720539 0.222222 0.757576 0.727273 0.222222 0.767677 0.734007 0.222222 0.777778 0.740741 0.222222 0.787879 0.747475 0.222222 0.797980 0.754209 0.222222 0.808081 0.760943 0.222222 0.818182 0.767677 0.222222 0.828283 0.774411 0.222222 0.838384 0.781145 0.222222 0.848485 0.787879 0.222222 0.858586 0.794613 0.222222 0.868687 0.801347 0.222222 0.878788 0.808081 0.222222 0.888889 0.814815 0.222222 0.898990 0.821549 0.222222 0.909091 0.828283 0.222222 0.919192 0.835017 0.222222 0.929293 0.841751 0.222222 0.939394 0.848485 0.222222 0.949495 0.855219 0.222222 0.959596 0.861953 0.222222 0.969697 0.868687 0.222222 0.979798 0.875421 0.222222 0.989899 0.882155 0.222222 1.000000 0.888889 0.232323 0.000000 0.232323 0.232323 0.010101 0.238904 0.232323 0.020202 0.245485 0.232323 0.030303 0.252066 0.232323 0.040404 0.258647 0.232323 0.050505 0.265228 0.232323 0.060606 0.271809 0.232323 0.070707 0.278390 0.232323 0.080808 0.284971 0.232323 0.090909 0.291552 0.232323 0.101010 0.298133 0.232323 0.111111 0.304714 0.232323 0.121212 0.311295 0.232323 0.131313 0.317876 0.232323 0.141414 0.324457 0.232323 0.151515 0.331038 0.232323 0.161616 0.337619 0.232323 0.171717 0.344200 0.232323 0.181818 0.350781 0.232323 0.191919 0.357361 0.232323 0.202020 0.363942 0.232323 0.212121 0.370523 0.232323 0.222222 0.377104 0.232323 0.232323 0.383685 0.232323 0.242424 0.390266 0.232323 0.252525 0.396847 0.232323 0.262626 0.403428 0.232323 0.272727 0.410009 0.232323 0.282828 0.416590 0.232323 0.292929 0.423171 0.232323 0.303030 0.429752 0.232323 0.313131 0.436333 0.232323 0.323232 0.442914 0.232323 0.333333 0.449495 0.232323 0.343434 0.456076 0.232323 0.353535 0.462657 0.232323 0.363636 0.469238 0.232323 0.373737 0.475819 0.232323 0.383838 0.482400 0.232323 0.393939 0.488981 0.232323 0.404040 0.495562 0.232323 0.414141 0.502143 0.232323 0.424242 0.508724 0.232323 0.434343 0.515305 0.232323 0.444444 0.521886 0.232323 0.454545 0.528466 0.232323 0.464646 0.535047 0.232323 0.474747 0.541628 0.232323 0.484848 0.548209 0.232323 0.494949 0.554790 0.232323 0.505051 0.561371 0.232323 0.515152 0.567952 0.232323 0.525253 0.574533 0.232323 0.535354 0.581114 0.232323 0.545455 0.587695 0.232323 0.555556 0.594276 0.232323 0.565657 0.600857 0.232323 0.575758 0.607438 0.232323 0.585859 0.614019 0.232323 0.595960 0.620600 0.232323 0.606061 0.627181 0.232323 0.616162 0.633762 0.232323 0.626263 0.640343 0.232323 0.636364 0.646924 0.232323 0.646465 0.653505 0.232323 0.656566 0.660086 0.232323 0.666667 0.666667 0.232323 0.676768 0.673248 0.232323 0.686869 0.679829 0.232323 0.696970 0.686410 0.232323 0.707071 0.692991 0.232323 0.717172 0.699571 0.232323 0.727273 0.706152 0.232323 0.737374 0.712733 0.232323 0.747475 0.719314 0.232323 0.757576 0.725895 0.232323 0.767677 0.732476 0.232323 0.777778 0.739057 0.232323 0.787879 0.745638 0.232323 0.797980 0.752219 0.232323 0.808081 0.758800 0.232323 0.818182 0.765381 0.232323 0.828283 0.771962 0.232323 0.838384 0.778543 0.232323 0.848485 0.785124 0.232323 0.858586 0.791705 0.232323 0.868687 0.798286 0.232323 0.878788 0.804867 0.232323 0.888889 0.811448 0.232323 0.898990 0.818029 0.232323 0.909091 0.824610 0.232323 0.919192 0.831191 0.232323 0.929293 0.837772 0.232323 0.939394 0.844353 0.232323 0.949495 0.850934 0.232323 0.959596 0.857515 0.232323 0.969697 0.864096 0.232323 0.979798 0.870676 0.232323 0.989899 0.877257 0.232323 1.000000 0.883838 0.242424 0.000000 0.242424 0.242424 0.010101 0.248852 0.242424 0.020202 0.255280 0.242424 0.030303 0.261708 0.242424 0.040404 0.268136 0.242424 0.050505 0.274564 0.242424 0.060606 0.280992 0.242424 0.070707 0.287420 0.242424 0.080808 0.293848 0.242424 0.090909 0.300275 0.242424 0.101010 0.306703 0.242424 0.111111 0.313131 0.242424 0.121212 0.319559 0.242424 0.131313 0.325987 0.242424 0.141414 0.332415 0.242424 0.151515 0.338843 0.242424 0.161616 0.345271 0.242424 0.171717 0.351699 0.242424 0.181818 0.358127 0.242424 0.191919 0.364555 0.242424 0.202020 0.370983 0.242424 0.212121 0.377410 0.242424 0.222222 0.383838 0.242424 0.232323 0.390266 0.242424 0.242424 0.396694 0.242424 0.252525 0.403122 0.242424 0.262626 0.409550 0.242424 0.272727 0.415978 0.242424 0.282828 0.422406 0.242424 0.292929 0.428834 0.242424 0.303030 0.435262 0.242424 0.313131 0.441690 0.242424 0.323232 0.448118 0.242424 0.333333 0.454545 0.242424 0.343434 0.460973 0.242424 0.353535 0.467401 0.242424 0.363636 0.473829 0.242424 0.373737 0.480257 0.242424 0.383838 0.486685 0.242424 0.393939 0.493113 0.242424 0.404040 0.499541 0.242424 0.414141 0.505969 0.242424 0.424242 0.512397 0.242424 0.434343 0.518825 0.242424 0.444444 0.525253 0.242424 0.454545 0.531680 0.242424 0.464646 0.538108 0.242424 0.474747 0.544536 0.242424 0.484848 0.550964 0.242424 0.494949 0.557392 0.242424 0.505051 0.563820 0.242424 0.515152 0.570248 0.242424 0.525253 0.576676 0.242424 0.535354 0.583104 0.242424 0.545455 0.589532 0.242424 0.555556 0.595960 0.242424 0.565657 0.602388 0.242424 0.575758 0.608815 0.242424 0.585859 0.615243 0.242424 0.595960 0.621671 0.242424 0.606061 0.628099 0.242424 0.616162 0.634527 0.242424 0.626263 0.640955 0.242424 0.636364 0.647383 0.242424 0.646465 0.653811 0.242424 0.656566 0.660239 0.242424 0.666667 0.666667 0.242424 0.676768 0.673095 0.242424 0.686869 0.679522 0.242424 0.696970 0.685950 0.242424 0.707071 0.692378 0.242424 0.717172 0.698806 0.242424 0.727273 0.705234 0.242424 0.737374 0.711662 0.242424 0.747475 0.718090 0.242424 0.757576 0.724518 0.242424 0.767677 0.730946 0.242424 0.777778 0.737374 0.242424 0.787879 0.743802 0.242424 0.797980 0.750230 0.242424 0.808081 0.756657 0.242424 0.818182 0.763085 0.242424 0.828283 0.769513 0.242424 0.838384 0.775941 0.242424 0.848485 0.782369 0.242424 0.858586 0.788797 0.242424 0.868687 0.795225 0.242424 0.878788 0.801653 0.242424 0.888889 0.808081 0.242424 0.898990 0.814509 0.242424 0.909091 0.820937 0.242424 0.919192 0.827365 0.242424 0.929293 0.833792 0.242424 0.939394 0.840220 0.242424 0.949495 0.846648 0.242424 0.959596 0.853076 0.242424 0.969697 0.859504 0.242424 0.979798 0.865932 0.242424 0.989899 0.872360 0.242424 1.000000 0.878788 0.252525 0.000000 0.252525 0.252525 0.010101 0.258800 0.252525 0.020202 0.265075 0.252525 0.030303 0.271350 0.252525 0.040404 0.277625 0.252525 0.050505 0.283900 0.252525 0.060606 0.290174 0.252525 0.070707 0.296449 0.252525 0.080808 0.302724 0.252525 0.090909 0.308999 0.252525 0.101010 0.315274 0.252525 0.111111 0.321549 0.252525 0.121212 0.327824 0.252525 0.131313 0.334099 0.252525 0.141414 0.340373 0.252525 0.151515 0.346648 0.252525 0.161616 0.352923 0.252525 0.171717 0.359198 0.252525 0.181818 0.365473 0.252525 0.191919 0.371748 0.252525 0.202020 0.378023 0.252525 0.212121 0.384298 0.252525 0.222222 0.390572 0.252525 0.232323 0.396847 0.252525 0.242424 0.403122 0.252525 0.252525 0.409397 0.252525 0.262626 0.415672 0.252525 0.272727 0.421947 0.252525 0.282828 0.428222 0.252525 0.292929 0.434496 0.252525 0.303030 0.440771 0.252525 0.313131 0.447046 0.252525 0.323232 0.453321 0.252525 0.333333 0.459596 0.252525 0.343434 0.465871 0.252525 0.353535 0.472146 0.252525 0.363636 0.478421 0.252525 0.373737 0.484695 0.252525 0.383838 0.490970 0.252525 0.393939 0.497245 0.252525 0.404040 0.503520 0.252525 0.414141 0.509795 0.252525 0.424242 0.516070 0.252525 0.434343 0.522345 0.252525 0.444444 0.528620 0.252525 0.454545 0.534894 0.252525 0.464646 0.541169 0.252525 0.474747 0.547444 0.252525 0.484848 0.553719 0.252525 0.494949 0.559994 0.252525 0.505051 0.566269 0.252525 0.515152 0.572544 0.252525 0.525253 0.578818 0.252525 0.535354 0.585093 0.252525 0.545455 0.591368 0.252525 0.555556 0.597643 0.252525 0.565657 0.603918 0.252525 0.575758 0.610193 0.252525 0.585859 0.616468 0.252525 0.595960 0.622743 0.252525 0.606061 0.629017 0.252525 0.616162 0.635292 0.252525 0.626263 0.641567 0.252525 0.636364 0.647842 0.252525 0.646465 0.654117 0.252525 0.656566 0.660392 0.252525 0.666667 0.666667 0.252525 0.676768 0.672942 0.252525 0.686869 0.679216 0.252525 0.696970 0.685491 0.252525 0.707071 0.691766 0.252525 0.717172 0.698041 0.252525 0.727273 0.704316 0.252525 0.737374 0.710591 0.252525 0.747475 0.716866 0.252525 0.757576 0.723140 0.252525 0.767677 0.729415 0.252525 0.777778 0.735690 0.252525 0.787879 0.741965 0.252525 0.797980 0.748240 0.252525 0.808081 0.754515 0.252525 0.818182 0.760790 0.252525 0.828283 0.767065 0.252525 0.838384 0.773339 0.252525 0.848485 0.779614 0.252525 0.858586 0.785889 0.252525 0.868687 0.792164 0.252525 0.878788 0.798439 0.252525 0.888889 0.804714 0.252525 0.898990 0.810989 0.252525 0.909091 0.817264 0.252525 0.919192 0.823538 0.252525 0.929293 0.829813 0.252525 0.939394 0.836088 0.252525 0.949495 0.842363 0.252525 0.959596 0.848638 0.252525 0.969697 0.854913 0.252525 0.979798 0.861188 0.252525 0.989899 0.867463 0.252525 1.000000 0.873737 0.262626 0.000000 0.262626 0.262626 0.010101 0.268748 0.262626 0.020202 0.274870 0.262626 0.030303 0.280992 0.262626 0.040404 0.287114 0.262626 0.050505 0.293235 0.262626 0.060606 0.299357 0.262626 0.070707 0.305479 0.262626 0.080808 0.311601 0.262626 0.090909 0.317723 0.262626 0.101010 0.323845 0.262626 0.111111 0.329966 0.262626 0.121212 0.336088 0.262626 0.131313 0.342210 0.262626 0.141414 0.348332 0.262626 0.151515 0.354454 0.262626 0.161616 0.360575 0.262626 0.171717 0.366697 0.262626 0.181818 0.372819 0.262626 0.191919 0.378941 0.262626 0.202020 0.385063 0.262626 0.212121 0.391185 0.262626 0.222222 0.397306 0.262626 0.232323 0.403428 0.262626 0.242424 0.409550 0.262626 0.252525 0.415672 0.262626 0.262626 0.421794 0.262626 0.272727 0.427916 0.262626 0.282828 0.434037 0.262626 0.292929 0.440159 0.262626 0.303030 0.446281 0.262626 0.313131 0.452403 0.262626 0.323232 0.458525 0.262626 0.333333 0.464646 0.262626 0.343434 0.470768 0.262626 0.353535 0.476890 0.262626 0.363636 0.483012 0.262626 0.373737 0.489134 0.262626 0.383838 0.495256 0.262626 0.393939 0.501377 0.262626 0.404040 0.507499 0.262626 0.414141 0.513621 0.262626 0.424242 0.519743 0.262626 0.434343 0.525865 0.262626 0.444444 0.531987 0.262626 0.454545 0.538108 0.262626 0.464646 0.544230 0.262626 0.474747 0.550352 0.262626 0.484848 0.556474 0.262626 0.494949 0.562596 0.262626 0.505051 0.568717 0.262626 0.515152 0.574839 0.262626 0.525253 0.580961 0.262626 0.535354 0.587083 0.262626 0.545455 0.593205 0.262626 0.555556 0.599327 0.262626 0.565657 0.605448 0.262626 0.575758 0.611570 0.262626 0.585859 0.617692 0.262626 0.595960 0.623814 0.262626 0.606061 0.629936 0.262626 0.616162 0.636058 0.262626 0.626263 0.642179 0.262626 0.636364 0.648301 0.262626 0.646465 0.654423 0.262626 0.656566 0.660545 0.262626 0.666667 0.666667 0.262626 0.676768 0.672788 0.262626 0.686869 0.678910 0.262626 0.696970 0.685032 0.262626 0.707071 0.691154 0.262626 0.717172 0.697276 0.262626 0.727273 0.703398 0.262626 0.737374 0.709519 0.262626 0.747475 0.715641 0.262626 0.757576 0.721763 0.262626 0.767677 0.727885 0.262626 0.777778 0.734007 0.262626 0.787879 0.740129 0.262626 0.797980 0.746250 0.262626 0.808081 0.752372 0.262626 0.818182 0.758494 0.262626 0.828283 0.764616 0.262626 0.838384 0.770738 0.262626 0.848485 0.776860 0.262626 0.858586 0.782981 0.262626 0.868687 0.789103 0.262626 0.878788 0.795225 0.262626 0.888889 0.801347 0.262626 0.898990 0.807469 0.262626 0.909091 0.813590 0.262626 0.919192 0.819712 0.262626 0.929293 0.825834 0.262626 0.939394 0.831956 0.262626 0.949495 0.838078 0.262626 0.959596 0.844200 0.262626 0.969697 0.850321 0.262626 0.979798 0.856443 0.262626 0.989899 0.862565 0.262626 1.000000 0.868687 0.272727 0.000000 0.272727 0.272727 0.010101 0.278696 0.272727 0.020202 0.284665 0.272727 0.030303 0.290634 0.272727 0.040404 0.296602 0.272727 0.050505 0.302571 0.272727 0.060606 0.308540 0.272727 0.070707 0.314509 0.272727 0.080808 0.320478 0.272727 0.090909 0.326446 0.272727 0.101010 0.332415 0.272727 0.111111 0.338384 0.272727 0.121212 0.344353 0.272727 0.131313 0.350321 0.272727 0.141414 0.356290 0.272727 0.151515 0.362259 0.272727 0.161616 0.368228 0.272727 0.171717 0.374197 0.272727 0.181818 0.380165 0.272727 0.191919 0.386134 0.272727 0.202020 0.392103 0.272727 0.212121 0.398072 0.272727 0.222222 0.404040 0.272727 0.232323 0.410009 0.272727 0.242424 0.415978 0.272727 0.252525 0.421947 0.272727 0.262626 0.427916 0.272727 0.272727 0.433884 0.272727 0.282828 0.439853 0.272727 0.292929 0.445822 0.272727 0.303030 0.451791 0.272727 0.313131 0.457759 0.272727 0.323232 0.463728 0.272727 0.333333 0.469697 0.272727 0.343434 0.475666 0.272727 0.353535 0.481635 0.272727 0.363636 0.487603 0.272727 0.373737 0.493572 0.272727 0.383838 0.499541 0.272727 0.393939 0.505510 0.272727 0.404040 0.511478 0.272727 0.414141 0.517447 0.272727 0.424242 0.523416 0.272727 0.434343 0.529385 0.272727 0.444444 0.535354 0.272727 0.454545 0.541322 0.272727 0.464646 0.547291 0.272727 0.474747 0.553260 0.272727 0.484848 0.559229 0.272727 0.494949 0.565197 0.272727 0.505051 0.571166 0.272727 0.515152 0.577135 0.272727 0.525253 0.583104 0.272727 0.535354 0.589073 0.272727 0.545455 0.595041 0.272727 0.555556 0.601010 0.272727 0.565657 0.606979 0.272727 0.575758 0.612948 0.272727 0.585859 0.618916 0.272727 0.595960 0.624885 0.272727 0.606061 0.630854 0.272727 0.616162 0.636823 0.272727 0.626263 0.642792 0.272727 0.636364 0.648760 0.272727 0.646465 0.654729 0.272727 0.656566 0.660698 0.272727 0.666667 0.666667 0.272727 0.676768 0.672635 0.272727 0.686869 0.678604 0.272727 0.696970 0.684573 0.272727 0.707071 0.690542 0.272727 0.717172 0.696511 0.272727 0.727273 0.702479 0.272727 0.737374 0.708448 0.272727 0.747475 0.714417 0.272727 0.757576 0.720386 0.272727 0.767677 0.726354 0.272727 0.777778 0.732323 0.272727 0.787879 0.738292 0.272727 0.797980 0.744261 0.272727 0.808081 0.750230 0.272727 0.818182 0.756198 0.272727 0.828283 0.762167 0.272727 0.838384 0.768136 0.272727 0.848485 0.774105 0.272727 0.858586 0.780073 0.272727 0.868687 0.786042 0.272727 0.878788 0.792011 0.272727 0.888889 0.797980 0.272727 0.898990 0.803949 0.272727 0.909091 0.809917 0.272727 0.919192 0.815886 0.272727 0.929293 0.821855 0.272727 0.939394 0.827824 0.272727 0.949495 0.833792 0.272727 0.959596 0.839761 0.272727 0.969697 0.845730 0.272727 0.979798 0.851699 0.272727 0.989899 0.857668 0.272727 1.000000 0.863636 0.282828 0.000000 0.282828 0.282828 0.010101 0.288644 0.282828 0.020202 0.294460 0.282828 0.030303 0.300275 0.282828 0.040404 0.306091 0.282828 0.050505 0.311907 0.282828 0.060606 0.317723 0.282828 0.070707 0.323538 0.282828 0.080808 0.329354 0.282828 0.090909 0.335170 0.282828 0.101010 0.340986 0.282828 0.111111 0.346801 0.282828 0.121212 0.352617 0.282828 0.131313 0.358433 0.282828 0.141414 0.364249 0.282828 0.151515 0.370064 0.282828 0.161616 0.375880 0.282828 0.171717 0.381696 0.282828 0.181818 0.387511 0.282828 0.191919 0.393327 0.282828 0.202020 0.399143 0.282828 0.212121 0.404959 0.282828 0.222222 0.410774 0.282828 0.232323 0.416590 0.282828 0.242424 0.422406 0.282828 0.252525 0.428222 0.282828 0.262626 0.434037 0.282828 0.272727 0.439853 0.282828 0.282828 0.445669 0.282828 0.292929 0.451485 0.282828 0.303030 0.457300 0.282828 0.313131 0.463116 0.282828 0.323232 0.468932 0.282828 0.333333 0.474747 0.282828 0.343434 0.480563 0.282828 0.353535 0.486379 0.282828 0.363636 0.492195 0.282828 0.373737 0.498010 0.282828 0.383838 0.503826 0.282828 0.393939 0.509642 0.282828 0.404040 0.515458 0.282828 0.414141 0.521273 0.282828 0.424242 0.527089 0.282828 0.434343 0.532905 0.282828 0.444444 0.538721 0.282828 0.454545 0.544536 0.282828 0.464646 0.550352 0.282828 0.474747 0.556168 0.282828 0.484848 0.561983 0.282828 0.494949 0.567799 0.282828 0.505051 0.573615 0.282828 0.515152 0.579431 0.282828 0.525253 0.585246 0.282828 0.535354 0.591062 0.282828 0.545455 0.596878 0.282828 0.555556 0.602694 0.282828 0.565657 0.608509 0.282828 0.575758 0.614325 0.282828 0.585859 0.620141 0.282828 0.595960 0.625957 0.282828 0.606061 0.631772 0.282828 0.616162 0.637588 0.282828 0.626263 0.643404 0.282828 0.636364 0.649219 0.282828 0.646465 0.655035 0.282828 0.656566 0.660851 0.282828 0.666667 0.666667 0.282828 0.676768 0.672482 0.282828 0.686869 0.678298 0.282828 0.696970 0.684114 0.282828 0.707071 0.689930 0.282828 0.717172 0.695745 0.282828 0.727273 0.701561 0.282828 0.737374 0.707377 0.282828 0.747475 0.713193 0.282828 0.757576 0.719008 0.282828 0.767677 0.724824 0.282828 0.777778 0.730640 0.282828 0.787879 0.736455 0.282828 0.797980 0.742271 0.282828 0.808081 0.748087 0.282828 0.818182 0.753903 0.282828 0.828283 0.759718 0.282828 0.838384 0.765534 0.282828 0.848485 0.771350 0.282828 0.858586 0.777166 0.282828 0.868687 0.782981 0.282828 0.878788 0.788797 0.282828 0.888889 0.794613 0.282828 0.898990 0.800429 0.282828 0.909091 0.806244 0.282828 0.919192 0.812060 0.282828 0.929293 0.817876 0.282828 0.939394 0.823691 0.282828 0.949495 0.829507 0.282828 0.959596 0.835323 0.282828 0.969697 0.841139 0.282828 0.979798 0.846954 0.282828 0.989899 0.852770 0.282828 1.000000 0.858586 0.292929 0.000000 0.292929 0.292929 0.010101 0.298592 0.292929 0.020202 0.304255 0.292929 0.030303 0.309917 0.292929 0.040404 0.315580 0.292929 0.050505 0.321243 0.292929 0.060606 0.326905 0.292929 0.070707 0.332568 0.292929 0.080808 0.338231 0.292929 0.090909 0.343893 0.292929 0.101010 0.349556 0.292929 0.111111 0.355219 0.292929 0.121212 0.360882 0.292929 0.131313 0.366544 0.292929 0.141414 0.372207 0.292929 0.151515 0.377870 0.292929 0.161616 0.383532 0.292929 0.171717 0.389195 0.292929 0.181818 0.394858 0.292929 0.191919 0.400520 0.292929 0.202020 0.406183 0.292929 0.212121 0.411846 0.292929 0.222222 0.417508 0.292929 0.232323 0.423171 0.292929 0.242424 0.428834 0.292929 0.252525 0.434496 0.292929 0.262626 0.440159 0.292929 0.272727 0.445822 0.292929 0.282828 0.451485 0.292929 0.292929 0.457147 0.292929 0.303030 0.462810 0.292929 0.313131 0.468473 0.292929 0.323232 0.474135 0.292929 0.333333 0.479798 0.292929 0.343434 0.485461 0.292929 0.353535 0.491123 0.292929 0.363636 0.496786 0.292929 0.373737 0.502449 0.292929 0.383838 0.508111 0.292929 0.393939 0.513774 0.292929 0.404040 0.519437 0.292929 0.414141 0.525099 0.292929 0.424242 0.530762 0.292929 0.434343 0.536425 0.292929 0.444444 0.542088 0.292929 0.454545 0.547750 0.292929 0.464646 0.553413 0.292929 0.474747 0.559076 0.292929 0.484848 0.564738 0.292929 0.494949 0.570401 0.292929 0.505051 0.576064 0.292929 0.515152 0.581726 0.292929 0.525253 0.587389 0.292929 0.535354 0.593052 0.292929 0.545455 0.598714 0.292929 0.555556 0.604377 0.292929 0.565657 0.610040 0.292929 0.575758 0.615702 0.292929 0.585859 0.621365 0.292929 0.595960 0.627028 0.292929 0.606061 0.632691 0.292929 0.616162 0.638353 0.292929 0.626263 0.644016 0.292929 0.636364 0.649679 0.292929 0.646465 0.655341 0.292929 0.656566 0.661004 0.292929 0.666667 0.666667 0.292929 0.676768 0.672329 0.292929 0.686869 0.677992 0.292929 0.696970 0.683655 0.292929 0.707071 0.689317 0.292929 0.717172 0.694980 0.292929 0.727273 0.700643 0.292929 0.737374 0.706305 0.292929 0.747475 0.711968 0.292929 0.757576 0.717631 0.292929 0.767677 0.723294 0.292929 0.777778 0.728956 0.292929 0.787879 0.734619 0.292929 0.797980 0.740282 0.292929 0.808081 0.745944 0.292929 0.818182 0.751607 0.292929 0.828283 0.757270 0.292929 0.838384 0.762932 0.292929 0.848485 0.768595 0.292929 0.858586 0.774258 0.292929 0.868687 0.779920 0.292929 0.878788 0.785583 0.292929 0.888889 0.791246 0.292929 0.898990 0.796908 0.292929 0.909091 0.802571 0.292929 0.919192 0.808234 0.292929 0.929293 0.813897 0.292929 0.939394 0.819559 0.292929 0.949495 0.825222 0.292929 0.959596 0.830885 0.292929 0.969697 0.836547 0.292929 0.979798 0.842210 0.292929 0.989899 0.847873 0.292929 1.000000 0.853535 0.303030 0.000000 0.303030 0.303030 0.010101 0.308540 0.303030 0.020202 0.314050 0.303030 0.030303 0.319559 0.303030 0.040404 0.325069 0.303030 0.050505 0.330579 0.303030 0.060606 0.336088 0.303030 0.070707 0.341598 0.303030 0.080808 0.347107 0.303030 0.090909 0.352617 0.303030 0.101010 0.358127 0.303030 0.111111 0.363636 0.303030 0.121212 0.369146 0.303030 0.131313 0.374656 0.303030 0.141414 0.380165 0.303030 0.151515 0.385675 0.303030 0.161616 0.391185 0.303030 0.171717 0.396694 0.303030 0.181818 0.402204 0.303030 0.191919 0.407713 0.303030 0.202020 0.413223 0.303030 0.212121 0.418733 0.303030 0.222222 0.424242 0.303030 0.232323 0.429752 0.303030 0.242424 0.435262 0.303030 0.252525 0.440771 0.303030 0.262626 0.446281 0.303030 0.272727 0.451791 0.303030 0.282828 0.457300 0.303030 0.292929 0.462810 0.303030 0.303030 0.468320 0.303030 0.313131 0.473829 0.303030 0.323232 0.479339 0.303030 0.333333 0.484848 0.303030 0.343434 0.490358 0.303030 0.353535 0.495868 0.303030 0.363636 0.501377 0.303030 0.373737 0.506887 0.303030 0.383838 0.512397 0.303030 0.393939 0.517906 0.303030 0.404040 0.523416 0.303030 0.414141 0.528926 0.303030 0.424242 0.534435 0.303030 0.434343 0.539945 0.303030 0.444444 0.545455 0.303030 0.454545 0.550964 0.303030 0.464646 0.556474 0.303030 0.474747 0.561983 0.303030 0.484848 0.567493 0.303030 0.494949 0.573003 0.303030 0.505051 0.578512 0.303030 0.515152 0.584022 0.303030 0.525253 0.589532 0.303030 0.535354 0.595041 0.303030 0.545455 0.600551 0.303030 0.555556 0.606061 0.303030 0.565657 0.611570 0.303030 0.575758 0.617080 0.303030 0.585859 0.622590 0.303030 0.595960 0.628099 0.303030 0.606061 0.633609 0.303030 0.616162 0.639118 0.303030 0.626263 0.644628 0.303030 0.636364 0.650138 0.303030 0.646465 0.655647 0.303030 0.656566 0.661157 0.303030 0.666667 0.666667 0.303030 0.676768 0.672176 0.303030 0.686869 0.677686 0.303030 0.696970 0.683196 0.303030 0.707071 0.688705 0.303030 0.717172 0.694215 0.303030 0.727273 0.699725 0.303030 0.737374 0.705234 0.303030 0.747475 0.710744 0.303030 0.757576 0.716253 0.303030 0.767677 0.721763 0.303030 0.777778 0.727273 0.303030 0.787879 0.732782 0.303030 0.797980 0.738292 0.303030 0.808081 0.743802 0.303030 0.818182 0.749311 0.303030 0.828283 0.754821 0.303030 0.838384 0.760331 0.303030 0.848485 0.765840 0.303030 0.858586 0.771350 0.303030 0.868687 0.776860 0.303030 0.878788 0.782369 0.303030 0.888889 0.787879 0.303030 0.898990 0.793388 0.303030 0.909091 0.798898 0.303030 0.919192 0.804408 0.303030 0.929293 0.809917 0.303030 0.939394 0.815427 0.303030 0.949495 0.820937 0.303030 0.959596 0.826446 0.303030 0.969697 0.831956 0.303030 0.979798 0.837466 0.303030 0.989899 0.842975 0.303030 1.000000 0.848485 0.313131 0.000000 0.313131 0.313131 0.010101 0.318488 0.313131 0.020202 0.323845 0.313131 0.030303 0.329201 0.313131 0.040404 0.334558 0.313131 0.050505 0.339914 0.313131 0.060606 0.345271 0.313131 0.070707 0.350627 0.313131 0.080808 0.355984 0.313131 0.090909 0.361341 0.313131 0.101010 0.366697 0.313131 0.111111 0.372054 0.313131 0.121212 0.377410 0.313131 0.131313 0.382767 0.313131 0.141414 0.388124 0.313131 0.151515 0.393480 0.313131 0.161616 0.398837 0.313131 0.171717 0.404193 0.313131 0.181818 0.409550 0.313131 0.191919 0.414907 0.313131 0.202020 0.420263 0.313131 0.212121 0.425620 0.313131 0.222222 0.430976 0.313131 0.232323 0.436333 0.313131 0.242424 0.441690 0.313131 0.252525 0.447046 0.313131 0.262626 0.452403 0.313131 0.272727 0.457759 0.313131 0.282828 0.463116 0.313131 0.292929 0.468473 0.313131 0.303030 0.473829 0.313131 0.313131 0.479186 0.313131 0.323232 0.484542 0.313131 0.333333 0.489899 0.313131 0.343434 0.495256 0.313131 0.353535 0.500612 0.313131 0.363636 0.505969 0.313131 0.373737 0.511325 0.313131 0.383838 0.516682 0.313131 0.393939 0.522039 0.313131 0.404040 0.527395 0.313131 0.414141 0.532752 0.313131 0.424242 0.538108 0.313131 0.434343 0.543465 0.313131 0.444444 0.548822 0.313131 0.454545 0.554178 0.313131 0.464646 0.559535 0.313131 0.474747 0.564891 0.313131 0.484848 0.570248 0.313131 0.494949 0.575605 0.313131 0.505051 0.580961 0.313131 0.515152 0.586318 0.313131 0.525253 0.591674 0.313131 0.535354 0.597031 0.313131 0.545455 0.602388 0.313131 0.555556 0.607744 0.313131 0.565657 0.613101 0.313131 0.575758 0.618457 0.313131 0.585859 0.623814 0.313131 0.595960 0.629170 0.313131 0.606061 0.634527 0.313131 0.616162 0.639884 0.313131 0.626263 0.645240 0.313131 0.636364 0.650597 0.313131 0.646465 0.655953 0.313131 0.656566 0.661310 0.313131 0.666667 0.666667 0.313131 0.676768 0.672023 0.313131 0.686869 0.677380 0.313131 0.696970 0.682736 0.313131 0.707071 0.688093 0.313131 0.717172 0.693450 0.313131 0.727273 0.698806 0.313131 0.737374 0.704163 0.313131 0.747475 0.709519 0.313131 0.757576 0.714876 0.313131 0.767677 0.720233 0.313131 0.777778 0.725589 0.313131 0.787879 0.730946 0.313131 0.797980 0.736302 0.313131 0.808081 0.741659 0.313131 0.818182 0.747016 0.313131 0.828283 0.752372 0.313131 0.838384 0.757729 0.313131 0.848485 0.763085 0.313131 0.858586 0.768442 0.313131 0.868687 0.773799 0.313131 0.878788 0.779155 0.313131 0.888889 0.784512 0.313131 0.898990 0.789868 0.313131 0.909091 0.795225 0.313131 0.919192 0.800582 0.313131 0.929293 0.805938 0.313131 0.939394 0.811295 0.313131 0.949495 0.816651 0.313131 0.959596 0.822008 0.313131 0.969697 0.827365 0.313131 0.979798 0.832721 0.313131 0.989899 0.838078 0.313131 1.000000 0.843434 0.323232 0.000000 0.323232 0.323232 0.010101 0.328436 0.323232 0.020202 0.333639 0.323232 0.030303 0.338843 0.323232 0.040404 0.344047 0.323232 0.050505 0.349250 0.323232 0.060606 0.354454 0.323232 0.070707 0.359657 0.323232 0.080808 0.364861 0.323232 0.090909 0.370064 0.323232 0.101010 0.375268 0.323232 0.111111 0.380471 0.323232 0.121212 0.385675 0.323232 0.131313 0.390878 0.323232 0.141414 0.396082 0.323232 0.151515 0.401286 0.323232 0.161616 0.406489 0.323232 0.171717 0.411693 0.323232 0.181818 0.416896 0.323232 0.191919 0.422100 0.323232 0.202020 0.427303 0.323232 0.212121 0.432507 0.323232 0.222222 0.437710 0.323232 0.232323 0.442914 0.323232 0.242424 0.448118 0.323232 0.252525 0.453321 0.323232 0.262626 0.458525 0.323232 0.272727 0.463728 0.323232 0.282828 0.468932 0.323232 0.292929 0.474135 0.323232 0.303030 0.479339 0.323232 0.313131 0.484542 0.323232 0.323232 0.489746 0.323232 0.333333 0.494949 0.323232 0.343434 0.500153 0.323232 0.353535 0.505357 0.323232 0.363636 0.510560 0.323232 0.373737 0.515764 0.323232 0.383838 0.520967 0.323232 0.393939 0.526171 0.323232 0.404040 0.531374 0.323232 0.414141 0.536578 0.323232 0.424242 0.541781 0.323232 0.434343 0.546985 0.323232 0.444444 0.552189 0.323232 0.454545 0.557392 0.323232 0.464646 0.562596 0.323232 0.474747 0.567799 0.323232 0.484848 0.573003 0.323232 0.494949 0.578206 0.323232 0.505051 0.583410 0.323232 0.515152 0.588613 0.323232 0.525253 0.593817 0.323232 0.535354 0.599021 0.323232 0.545455 0.604224 0.323232 0.555556 0.609428 0.323232 0.565657 0.614631 0.323232 0.575758 0.619835 0.323232 0.585859 0.625038 0.323232 0.595960 0.630242 0.323232 0.606061 0.635445 0.323232 0.616162 0.640649 0.323232 0.626263 0.645852 0.323232 0.636364 0.651056 0.323232 0.646465 0.656260 0.323232 0.656566 0.661463 0.323232 0.666667 0.666667 0.323232 0.676768 0.671870 0.323232 0.686869 0.677074 0.323232 0.696970 0.682277 0.323232 0.707071 0.687481 0.323232 0.717172 0.692684 0.323232 0.727273 0.697888 0.323232 0.737374 0.703092 0.323232 0.747475 0.708295 0.323232 0.757576 0.713499 0.323232 0.767677 0.718702 0.323232 0.777778 0.723906 0.323232 0.787879 0.729109 0.323232 0.797980 0.734313 0.323232 0.808081 0.739516 0.323232 0.818182 0.744720 0.323232 0.828283 0.749923 0.323232 0.838384 0.755127 0.323232 0.848485 0.760331 0.323232 0.858586 0.765534 0.323232 0.868687 0.770738 0.323232 0.878788 0.775941 0.323232 0.888889 0.781145 0.323232 0.898990 0.786348 0.323232 0.909091 0.791552 0.323232 0.919192 0.796755 0.323232 0.929293 0.801959 0.323232 0.939394 0.807163 0.323232 0.949495 0.812366 0.323232 0.959596 0.817570 0.323232 0.969697 0.822773 0.323232 0.979798 0.827977 0.323232 0.989899 0.833180 0.323232 1.000000 0.838384 0.333333 0.000000 0.333333 0.333333 0.010101 0.338384 0.333333 0.020202 0.343434 0.333333 0.030303 0.348485 0.333333 0.040404 0.353535 0.333333 0.050505 0.358586 0.333333 0.060606 0.363636 0.333333 0.070707 0.368687 0.333333 0.080808 0.373737 0.333333 0.090909 0.378788 0.333333 0.101010 0.383838 0.333333 0.111111 0.388889 0.333333 0.121212 0.393939 0.333333 0.131313 0.398990 0.333333 0.141414 0.404040 0.333333 0.151515 0.409091 0.333333 0.161616 0.414141 0.333333 0.171717 0.419192 0.333333 0.181818 0.424242 0.333333 0.191919 0.429293 0.333333 0.202020 0.434343 0.333333 0.212121 0.439394 0.333333 0.222222 0.444444 0.333333 0.232323 0.449495 0.333333 0.242424 0.454545 0.333333 0.252525 0.459596 0.333333 0.262626 0.464646 0.333333 0.272727 0.469697 0.333333 0.282828 0.474747 0.333333 0.292929 0.479798 0.333333 0.303030 0.484848 0.333333 0.313131 0.489899 0.333333 0.323232 0.494949 0.333333 0.333333 0.500000 0.333333 0.343434 0.505051 0.333333 0.353535 0.510101 0.333333 0.363636 0.515152 0.333333 0.373737 0.520202 0.333333 0.383838 0.525253 0.333333 0.393939 0.530303 0.333333 0.404040 0.535354 0.333333 0.414141 0.540404 0.333333 0.424242 0.545455 0.333333 0.434343 0.550505 0.333333 0.444444 0.555556 0.333333 0.454545 0.560606 0.333333 0.464646 0.565657 0.333333 0.474747 0.570707 0.333333 0.484848 0.575758 0.333333 0.494949 0.580808 0.333333 0.505051 0.585859 0.333333 0.515152 0.590909 0.333333 0.525253 0.595960 0.333333 0.535354 0.601010 0.333333 0.545455 0.606061 0.333333 0.555556 0.611111 0.333333 0.565657 0.616162 0.333333 0.575758 0.621212 0.333333 0.585859 0.626263 0.333333 0.595960 0.631313 0.333333 0.606061 0.636364 0.333333 0.616162 0.641414 0.333333 0.626263 0.646465 0.333333 0.636364 0.651515 0.333333 0.646465 0.656566 0.333333 0.656566 0.661616 0.333333 0.666667 0.666667 0.333333 0.676768 0.671717 0.333333 0.686869 0.676768 0.333333 0.696970 0.681818 0.333333 0.707071 0.686869 0.333333 0.717172 0.691919 0.333333 0.727273 0.696970 0.333333 0.737374 0.702020 0.333333 0.747475 0.707071 0.333333 0.757576 0.712121 0.333333 0.767677 0.717172 0.333333 0.777778 0.722222 0.333333 0.787879 0.727273 0.333333 0.797980 0.732323 0.333333 0.808081 0.737374 0.333333 0.818182 0.742424 0.333333 0.828283 0.747475 0.333333 0.838384 0.752525 0.333333 0.848485 0.757576 0.333333 0.858586 0.762626 0.333333 0.868687 0.767677 0.333333 0.878788 0.772727 0.333333 0.888889 0.777778 0.333333 0.898990 0.782828 0.333333 0.909091 0.787879 0.333333 0.919192 0.792929 0.333333 0.929293 0.797980 0.333333 0.939394 0.803030 0.333333 0.949495 0.808081 0.333333 0.959596 0.813131 0.333333 0.969697 0.818182 0.333333 0.979798 0.823232 0.333333 0.989899 0.828283 0.333333 1.000000 0.833333 0.343434 0.000000 0.343434 0.343434 0.010101 0.348332 0.343434 0.020202 0.353229 0.343434 0.030303 0.358127 0.343434 0.040404 0.363024 0.343434 0.050505 0.367922 0.343434 0.060606 0.372819 0.343434 0.070707 0.377717 0.343434 0.080808 0.382614 0.343434 0.090909 0.387511 0.343434 0.101010 0.392409 0.343434 0.111111 0.397306 0.343434 0.121212 0.402204 0.343434 0.131313 0.407101 0.343434 0.141414 0.411999 0.343434 0.151515 0.416896 0.343434 0.161616 0.421794 0.343434 0.171717 0.426691 0.343434 0.181818 0.431589 0.343434 0.191919 0.436486 0.343434 0.202020 0.441384 0.343434 0.212121 0.446281 0.343434 0.222222 0.451178 0.343434 0.232323 0.456076 0.343434 0.242424 0.460973 0.343434 0.252525 0.465871 0.343434 0.262626 0.470768 0.343434 0.272727 0.475666 0.343434 0.282828 0.480563 0.343434 0.292929 0.485461 0.343434 0.303030 0.490358 0.343434 0.313131 0.495256 0.343434 0.323232 0.500153 0.343434 0.333333 0.505051 0.343434 0.343434 0.509948 0.343434 0.353535 0.514845 0.343434 0.363636 0.519743 0.343434 0.373737 0.524640 0.343434 0.383838 0.529538 0.343434 0.393939 0.534435 0.343434 0.404040 0.539333 0.343434 0.414141 0.544230 0.343434 0.424242 0.549128 0.343434 0.434343 0.554025 0.343434 0.444444 0.558923 0.343434 0.454545 0.563820 0.343434 0.464646 0.568717 0.343434 0.474747 0.573615 0.343434 0.484848 0.578512 0.343434 0.494949 0.583410 0.343434 0.505051 0.588307 0.343434 0.515152 0.593205 0.343434 0.525253 0.598102 0.343434 0.535354 0.603000 0.343434 0.545455 0.607897 0.343434 0.555556 0.612795 0.343434 0.565657 0.617692 0.343434 0.575758 0.622590 0.343434 0.585859 0.627487 0.343434 0.595960 0.632384 0.343434 0.606061 0.637282 0.343434 0.616162 0.642179 0.343434 0.626263 0.647077 0.343434 0.636364 0.651974 0.343434 0.646465 0.656872 0.343434 0.656566 0.661769 0.343434 0.666667 0.666667 0.343434 0.676768 0.671564 0.343434 0.686869 0.676462 0.343434 0.696970 0.681359 0.343434 0.707071 0.686257 0.343434 0.717172 0.691154 0.343434 0.727273 0.696051 0.343434 0.737374 0.700949 0.343434 0.747475 0.705846 0.343434 0.757576 0.710744 0.343434 0.767677 0.715641 0.343434 0.777778 0.720539 0.343434 0.787879 0.725436 0.343434 0.797980 0.730334 0.343434 0.808081 0.735231 0.343434 0.818182 0.740129 0.343434 0.828283 0.745026 0.343434 0.838384 0.749923 0.343434 0.848485 0.754821 0.343434 0.858586 0.759718 0.343434 0.868687 0.764616 0.343434 0.878788 0.769513 0.343434 0.888889 0.774411 0.343434 0.898990 0.779308 0.343434 0.909091 0.784206 0.343434 0.919192 0.789103 0.343434 0.929293 0.794001 0.343434 0.939394 0.798898 0.343434 0.949495 0.803796 0.343434 0.959596 0.808693 0.343434 0.969697 0.813590 0.343434 0.979798 0.818488 0.343434 0.989899 0.823385 0.343434 1.000000 0.828283 0.353535 0.000000 0.353535 0.353535 0.010101 0.358280 0.353535 0.020202 0.363024 0.353535 0.030303 0.367769 0.353535 0.040404 0.372513 0.353535 0.050505 0.377257 0.353535 0.060606 0.382002 0.353535 0.070707 0.386746 0.353535 0.080808 0.391491 0.353535 0.090909 0.396235 0.353535 0.101010 0.400979 0.353535 0.111111 0.405724 0.353535 0.121212 0.410468 0.353535 0.131313 0.415213 0.353535 0.141414 0.419957 0.353535 0.151515 0.424702 0.353535 0.161616 0.429446 0.353535 0.171717 0.434190 0.353535 0.181818 0.438935 0.353535 0.191919 0.443679 0.353535 0.202020 0.448424 0.353535 0.212121 0.453168 0.353535 0.222222 0.457912 0.353535 0.232323 0.462657 0.353535 0.242424 0.467401 0.353535 0.252525 0.472146 0.353535 0.262626 0.476890 0.353535 0.272727 0.481635 0.353535 0.282828 0.486379 0.353535 0.292929 0.491123 0.353535 0.303030 0.495868 0.353535 0.313131 0.500612 0.353535 0.323232 0.505357 0.353535 0.333333 0.510101 0.353535 0.343434 0.514845 0.353535 0.353535 0.519590 0.353535 0.363636 0.524334 0.353535 0.373737 0.529079 0.353535 0.383838 0.533823 0.353535 0.393939 0.538567 0.353535 0.404040 0.543312 0.353535 0.414141 0.548056 0.353535 0.424242 0.552801 0.353535 0.434343 0.557545 0.353535 0.444444 0.562290 0.353535 0.454545 0.567034 0.353535 0.464646 0.571778 0.353535 0.474747 0.576523 0.353535 0.484848 0.581267 0.353535 0.494949 0.586012 0.353535 0.505051 0.590756 0.353535 0.515152 0.595500 0.353535 0.525253 0.600245 0.353535 0.535354 0.604989 0.353535 0.545455 0.609734 0.353535 0.555556 0.614478 0.353535 0.565657 0.619223 0.353535 0.575758 0.623967 0.353535 0.585859 0.628711 0.353535 0.595960 0.633456 0.353535 0.606061 0.638200 0.353535 0.616162 0.642945 0.353535 0.626263 0.647689 0.353535 0.636364 0.652433 0.353535 0.646465 0.657178 0.353535 0.656566 0.661922 0.353535 0.666667 0.666667 0.353535 0.676768 0.671411 0.353535 0.686869 0.676155 0.353535 0.696970 0.680900 0.353535 0.707071 0.685644 0.353535 0.717172 0.690389 0.353535 0.727273 0.695133 0.353535 0.737374 0.699878 0.353535 0.747475 0.704622 0.353535 0.757576 0.709366 0.353535 0.767677 0.714111 0.353535 0.777778 0.718855 0.353535 0.787879 0.723600 0.353535 0.797980 0.728344 0.353535 0.808081 0.733088 0.353535 0.818182 0.737833 0.353535 0.828283 0.742577 0.353535 0.838384 0.747322 0.353535 0.848485 0.752066 0.353535 0.858586 0.756811 0.353535 0.868687 0.761555 0.353535 0.878788 0.766299 0.353535 0.888889 0.771044 0.353535 0.898990 0.775788 0.353535 0.909091 0.780533 0.353535 0.919192 0.785277 0.353535 0.929293 0.790021 0.353535 0.939394 0.794766 0.353535 0.949495 0.799510 0.353535 0.959596 0.804255 0.353535 0.969697 0.808999 0.353535 0.979798 0.813743 0.353535 0.989899 0.818488 0.353535 1.000000 0.823232 0.363636 0.000000 0.363636 0.363636 0.010101 0.368228 0.363636 0.020202 0.372819 0.363636 0.030303 0.377410 0.363636 0.040404 0.382002 0.363636 0.050505 0.386593 0.363636 0.060606 0.391185 0.363636 0.070707 0.395776 0.363636 0.080808 0.400367 0.363636 0.090909 0.404959 0.363636 0.101010 0.409550 0.363636 0.111111 0.414141 0.363636 0.121212 0.418733 0.363636 0.131313 0.423324 0.363636 0.141414 0.427916 0.363636 0.151515 0.432507 0.363636 0.161616 0.437098 0.363636 0.171717 0.441690 0.363636 0.181818 0.446281 0.363636 0.191919 0.450872 0.363636 0.202020 0.455464 0.363636 0.212121 0.460055 0.363636 0.222222 0.464646 0.363636 0.232323 0.469238 0.363636 0.242424 0.473829 0.363636 0.252525 0.478421 0.363636 0.262626 0.483012 0.363636 0.272727 0.487603 0.363636 0.282828 0.492195 0.363636 0.292929 0.496786 0.363636 0.303030 0.501377 0.363636 0.313131 0.505969 0.363636 0.323232 0.510560 0.363636 0.333333 0.515152 0.363636 0.343434 0.519743 0.363636 0.353535 0.524334 0.363636 0.363636 0.528926 0.363636 0.373737 0.533517 0.363636 0.383838 0.538108 0.363636 0.393939 0.542700 0.363636 0.404040 0.547291 0.363636 0.414141 0.551882 0.363636 0.424242 0.556474 0.363636 0.434343 0.561065 0.363636 0.444444 0.565657 0.363636 0.454545 0.570248 0.363636 0.464646 0.574839 0.363636 0.474747 0.579431 0.363636 0.484848 0.584022 0.363636 0.494949 0.588613 0.363636 0.505051 0.593205 0.363636 0.515152 0.597796 0.363636 0.525253 0.602388 0.363636 0.535354 0.606979 0.363636 0.545455 0.611570 0.363636 0.555556 0.616162 0.363636 0.565657 0.620753 0.363636 0.575758 0.625344 0.363636 0.585859 0.629936 0.363636 0.595960 0.634527 0.363636 0.606061 0.639118 0.363636 0.616162 0.643710 0.363636 0.626263 0.648301 0.363636 0.636364 0.652893 0.363636 0.646465 0.657484 0.363636 0.656566 0.662075 0.363636 0.666667 0.666667 0.363636 0.676768 0.671258 0.363636 0.686869 0.675849 0.363636 0.696970 0.680441 0.363636 0.707071 0.685032 0.363636 0.717172 0.689624 0.363636 0.727273 0.694215 0.363636 0.737374 0.698806 0.363636 0.747475 0.703398 0.363636 0.757576 0.707989 0.363636 0.767677 0.712580 0.363636 0.777778 0.717172 0.363636 0.787879 0.721763 0.363636 0.797980 0.726354 0.363636 0.808081 0.730946 0.363636 0.818182 0.735537 0.363636 0.828283 0.740129 0.363636 0.838384 0.744720 0.363636 0.848485 0.749311 0.363636 0.858586 0.753903 0.363636 0.868687 0.758494 0.363636 0.878788 0.763085 0.363636 0.888889 0.767677 0.363636 0.898990 0.772268 0.363636 0.909091 0.776860 0.363636 0.919192 0.781451 0.363636 0.929293 0.786042 0.363636 0.939394 0.790634 0.363636 0.949495 0.795225 0.363636 0.959596 0.799816 0.363636 0.969697 0.804408 0.363636 0.979798 0.808999 0.363636 0.989899 0.813590 0.363636 1.000000 0.818182 0.373737 0.000000 0.373737 0.373737 0.010101 0.378176 0.373737 0.020202 0.382614 0.373737 0.030303 0.387052 0.373737 0.040404 0.391491 0.373737 0.050505 0.395929 0.373737 0.060606 0.400367 0.373737 0.070707 0.404806 0.373737 0.080808 0.409244 0.373737 0.090909 0.413682 0.373737 0.101010 0.418121 0.373737 0.111111 0.422559 0.373737 0.121212 0.426997 0.373737 0.131313 0.431436 0.373737 0.141414 0.435874 0.373737 0.151515 0.440312 0.373737 0.161616 0.444751 0.373737 0.171717 0.449189 0.373737 0.181818 0.453627 0.373737 0.191919 0.458066 0.373737 0.202020 0.462504 0.373737 0.212121 0.466942 0.373737 0.222222 0.471380 0.373737 0.232323 0.475819 0.373737 0.242424 0.480257 0.373737 0.252525 0.484695 0.373737 0.262626 0.489134 0.373737 0.272727 0.493572 0.373737 0.282828 0.498010 0.373737 0.292929 0.502449 0.373737 0.303030 0.506887 0.373737 0.313131 0.511325 0.373737 0.323232 0.515764 0.373737 0.333333 0.520202 0.373737 0.343434 0.524640 0.373737 0.353535 0.529079 0.373737 0.363636 0.533517 0.373737 0.373737 0.537955 0.373737 0.383838 0.542394 0.373737 0.393939 0.546832 0.373737 0.404040 0.551270 0.373737 0.414141 0.555709 0.373737 0.424242 0.560147 0.373737 0.434343 0.564585 0.373737 0.444444 0.569024 0.373737 0.454545 0.573462 0.373737 0.464646 0.577900 0.373737 0.474747 0.582339 0.373737 0.484848 0.586777 0.373737 0.494949 0.591215 0.373737 0.505051 0.595654 0.373737 0.515152 0.600092 0.373737 0.525253 0.604530 0.373737 0.535354 0.608968 0.373737 0.545455 0.613407 0.373737 0.555556 0.617845 0.373737 0.565657 0.622283 0.373737 0.575758 0.626722 0.373737 0.585859 0.631160 0.373737 0.595960 0.635598 0.373737 0.606061 0.640037 0.373737 0.616162 0.644475 0.373737 0.626263 0.648913 0.373737 0.636364 0.653352 0.373737 0.646465 0.657790 0.373737 0.656566 0.662228 0.373737 0.666667 0.666667 0.373737 0.676768 0.671105 0.373737 0.686869 0.675543 0.373737 0.696970 0.679982 0.373737 0.707071 0.684420 0.373737 0.717172 0.688858 0.373737 0.727273 0.693297 0.373737 0.737374 0.697735 0.373737 0.747475 0.702173 0.373737 0.757576 0.706612 0.373737 0.767677 0.711050 0.373737 0.777778 0.715488 0.373737 0.787879 0.719927 0.373737 0.797980 0.724365 0.373737 0.808081 0.728803 0.373737 0.818182 0.733242 0.373737 0.828283 0.737680 0.373737 0.838384 0.742118 0.373737 0.848485 0.746556 0.373737 0.858586 0.750995 0.373737 0.868687 0.755433 0.373737 0.878788 0.759871 0.373737 0.888889 0.764310 0.373737 0.898990 0.768748 0.373737 0.909091 0.773186 0.373737 0.919192 0.777625 0.373737 0.929293 0.782063 0.373737 0.939394 0.786501 0.373737 0.949495 0.790940 0.373737 0.959596 0.795378 0.373737 0.969697 0.799816 0.373737 0.979798 0.804255 0.373737 0.989899 0.808693 0.373737 1.000000 0.813131 0.383838 0.000000 0.383838 0.383838 0.010101 0.388124 0.383838 0.020202 0.392409 0.383838 0.030303 0.396694 0.383838 0.040404 0.400979 0.383838 0.050505 0.405265 0.383838 0.060606 0.409550 0.383838 0.070707 0.413835 0.383838 0.080808 0.418121 0.383838 0.090909 0.422406 0.383838 0.101010 0.426691 0.383838 0.111111 0.430976 0.383838 0.121212 0.435262 0.383838 0.131313 0.439547 0.383838 0.141414 0.443832 0.383838 0.151515 0.448118 0.383838 0.161616 0.452403 0.383838 0.171717 0.456688 0.383838 0.181818 0.460973 0.383838 0.191919 0.465259 0.383838 0.202020 0.469544 0.383838 0.212121 0.473829 0.383838 0.222222 0.478114 0.383838 0.232323 0.482400 0.383838 0.242424 0.486685 0.383838 0.252525 0.490970 0.383838 0.262626 0.495256 0.383838 0.272727 0.499541 0.383838 0.282828 0.503826 0.383838 0.292929 0.508111 0.383838 0.303030 0.512397 0.383838 0.313131 0.516682 0.383838 0.323232 0.520967 0.383838 0.333333 0.525253 0.383838 0.343434 0.529538 0.383838 0.353535 0.533823 0.383838 0.363636 0.538108 0.383838 0.373737 0.542394 0.383838 0.383838 0.546679 0.383838 0.393939 0.550964 0.383838 0.404040 0.555249 0.383838 0.414141 0.559535 0.383838 0.424242 0.563820 0.383838 0.434343 0.568105 0.383838 0.444444 0.572391 0.383838 0.454545 0.576676 0.383838 0.464646 0.580961 0.383838 0.474747 0.585246 0.383838 0.484848 0.589532 0.383838 0.494949 0.593817 0.383838 0.505051 0.598102 0.383838 0.515152 0.602388 0.383838 0.525253 0.606673 0.383838 0.535354 0.610958 0.383838 0.545455 0.615243 0.383838 0.555556 0.619529 0.383838 0.565657 0.623814 0.383838 0.575758 0.628099 0.383838 0.585859 0.632384 0.383838 0.595960 0.636670 0.383838 0.606061 0.640955 0.383838 0.616162 0.645240 0.383838 0.626263 0.649526 0.383838 0.636364 0.653811 0.383838 0.646465 0.658096 0.383838 0.656566 0.662381 0.383838 0.666667 0.666667 0.383838 0.676768 0.670952 0.383838 0.686869 0.675237 0.383838 0.696970 0.679522 0.383838 0.707071 0.683808 0.383838 0.717172 0.688093 0.383838 0.727273 0.692378 0.383838 0.737374 0.696664 0.383838 0.747475 0.700949 0.383838 0.757576 0.705234 0.383838 0.767677 0.709519 0.383838 0.777778 0.713805 0.383838 0.787879 0.718090 0.383838 0.797980 0.722375 0.383838 0.808081 0.726661 0.383838 0.818182 0.730946 0.383838 0.828283 0.735231 0.383838 0.838384 0.739516 0.383838 0.848485 0.743802 0.383838 0.858586 0.748087 0.383838 0.868687 0.752372 0.383838 0.878788 0.756657 0.383838 0.888889 0.760943 0.383838 0.898990 0.765228 0.383838 0.909091 0.769513 0.383838 0.919192 0.773799 0.383838 0.929293 0.778084 0.383838 0.939394 0.782369 0.383838 0.949495 0.786654 0.383838 0.959596 0.790940 0.383838 0.969697 0.795225 0.383838 0.979798 0.799510 0.383838 0.989899 0.803796 0.383838 1.000000 0.808081 0.393939 0.000000 0.393939 0.393939 0.010101 0.398072 0.393939 0.020202 0.402204 0.393939 0.030303 0.406336 0.393939 0.040404 0.410468 0.393939 0.050505 0.414601 0.393939 0.060606 0.418733 0.393939 0.070707 0.422865 0.393939 0.080808 0.426997 0.393939 0.090909 0.431129 0.393939 0.101010 0.435262 0.393939 0.111111 0.439394 0.393939 0.121212 0.443526 0.393939 0.131313 0.447658 0.393939 0.141414 0.451791 0.393939 0.151515 0.455923 0.393939 0.161616 0.460055 0.393939 0.171717 0.464187 0.393939 0.181818 0.468320 0.393939 0.191919 0.472452 0.393939 0.202020 0.476584 0.393939 0.212121 0.480716 0.393939 0.222222 0.484848 0.393939 0.232323 0.488981 0.393939 0.242424 0.493113 0.393939 0.252525 0.497245 0.393939 0.262626 0.501377 0.393939 0.272727 0.505510 0.393939 0.282828 0.509642 0.393939 0.292929 0.513774 0.393939 0.303030 0.517906 0.393939 0.313131 0.522039 0.393939 0.323232 0.526171 0.393939 0.333333 0.530303 0.393939 0.343434 0.534435 0.393939 0.353535 0.538567 0.393939 0.363636 0.542700 0.393939 0.373737 0.546832 0.393939 0.383838 0.550964 0.393939 0.393939 0.555096 0.393939 0.404040 0.559229 0.393939 0.414141 0.563361 0.393939 0.424242 0.567493 0.393939 0.434343 0.571625 0.393939 0.444444 0.575758 0.393939 0.454545 0.579890 0.393939 0.464646 0.584022 0.393939 0.474747 0.588154 0.393939 0.484848 0.592287 0.393939 0.494949 0.596419 0.393939 0.505051 0.600551 0.393939 0.515152 0.604683 0.393939 0.525253 0.608815 0.393939 0.535354 0.612948 0.393939 0.545455 0.617080 0.393939 0.555556 0.621212 0.393939 0.565657 0.625344 0.393939 0.575758 0.629477 0.393939 0.585859 0.633609 0.393939 0.595960 0.637741 0.393939 0.606061 0.641873 0.393939 0.616162 0.646006 0.393939 0.626263 0.650138 0.393939 0.636364 0.654270 0.393939 0.646465 0.658402 0.393939 0.656566 0.662534 0.393939 0.666667 0.666667 0.393939 0.676768 0.670799 0.393939 0.686869 0.674931 0.393939 0.696970 0.679063 0.393939 0.707071 0.683196 0.393939 0.717172 0.687328 0.393939 0.727273 0.691460 0.393939 0.737374 0.695592 0.393939 0.747475 0.699725 0.393939 0.757576 0.703857 0.393939 0.767677 0.707989 0.393939 0.777778 0.712121 0.393939 0.787879 0.716253 0.393939 0.797980 0.720386 0.393939 0.808081 0.724518 0.393939 0.818182 0.728650 0.393939 0.828283 0.732782 0.393939 0.838384 0.736915 0.393939 0.848485 0.741047 0.393939 0.858586 0.745179 0.393939 0.868687 0.749311 0.393939 0.878788 0.753444 0.393939 0.888889 0.757576 0.393939 0.898990 0.761708 0.393939 0.909091 0.765840 0.393939 0.919192 0.769972 0.393939 0.929293 0.774105 0.393939 0.939394 0.778237 0.393939 0.949495 0.782369 0.393939 0.959596 0.786501 0.393939 0.969697 0.790634 0.393939 0.979798 0.794766 0.393939 0.989899 0.798898 0.393939 1.000000 0.803030 0.404040 0.000000 0.404040 0.404040 0.010101 0.408020 0.404040 0.020202 0.411999 0.404040 0.030303 0.415978 0.404040 0.040404 0.419957 0.404040 0.050505 0.423936 0.404040 0.060606 0.427916 0.404040 0.070707 0.431895 0.404040 0.080808 0.435874 0.404040 0.090909 0.439853 0.404040 0.101010 0.443832 0.404040 0.111111 0.447811 0.404040 0.121212 0.451791 0.404040 0.131313 0.455770 0.404040 0.141414 0.459749 0.404040 0.151515 0.463728 0.404040 0.161616 0.467707 0.404040 0.171717 0.471687 0.404040 0.181818 0.475666 0.404040 0.191919 0.479645 0.404040 0.202020 0.483624 0.404040 0.212121 0.487603 0.404040 0.222222 0.491582 0.404040 0.232323 0.495562 0.404040 0.242424 0.499541 0.404040 0.252525 0.503520 0.404040 0.262626 0.507499 0.404040 0.272727 0.511478 0.404040 0.282828 0.515458 0.404040 0.292929 0.519437 0.404040 0.303030 0.523416 0.404040 0.313131 0.527395 0.404040 0.323232 0.531374 0.404040 0.333333 0.535354 0.404040 0.343434 0.539333 0.404040 0.353535 0.543312 0.404040 0.363636 0.547291 0.404040 0.373737 0.551270 0.404040 0.383838 0.555249 0.404040 0.393939 0.559229 0.404040 0.404040 0.563208 0.404040 0.414141 0.567187 0.404040 0.424242 0.571166 0.404040 0.434343 0.575145 0.404040 0.444444 0.579125 0.404040 0.454545 0.583104 0.404040 0.464646 0.587083 0.404040 0.474747 0.591062 0.404040 0.484848 0.595041 0.404040 0.494949 0.599021 0.404040 0.505051 0.603000 0.404040 0.515152 0.606979 0.404040 0.525253 0.610958 0.404040 0.535354 0.614937 0.404040 0.545455 0.618916 0.404040 0.555556 0.622896 0.404040 0.565657 0.626875 0.404040 0.575758 0.630854 0.404040 0.585859 0.634833 0.404040 0.595960 0.638812 0.404040 0.606061 0.642792 0.404040 0.616162 0.646771 0.404040 0.626263 0.650750 0.404040 0.636364 0.654729 0.404040 0.646465 0.658708 0.404040 0.656566 0.662687 0.404040 0.666667 0.666667 0.404040 0.676768 0.670646 0.404040 0.686869 0.674625 0.404040 0.696970 0.678604 0.404040 0.707071 0.682583 0.404040 0.717172 0.686563 0.404040 0.727273 0.690542 0.404040 0.737374 0.694521 0.404040 0.747475 0.698500 0.404040 0.757576 0.702479 0.404040 0.767677 0.706459 0.404040 0.777778 0.710438 0.404040 0.787879 0.714417 0.404040 0.797980 0.718396 0.404040 0.808081 0.722375 0.404040 0.818182 0.726354 0.404040 0.828283 0.730334 0.404040 0.838384 0.734313 0.404040 0.848485 0.738292 0.404040 0.858586 0.742271 0.404040 0.868687 0.746250 0.404040 0.878788 0.750230 0.404040 0.888889 0.754209 0.404040 0.898990 0.758188 0.404040 0.909091 0.762167 0.404040 0.919192 0.766146 0.404040 0.929293 0.770125 0.404040 0.939394 0.774105 0.404040 0.949495 0.778084 0.404040 0.959596 0.782063 0.404040 0.969697 0.786042 0.404040 0.979798 0.790021 0.404040 0.989899 0.794001 0.404040 1.000000 0.797980 0.414141 0.000000 0.414141 0.414141 0.010101 0.417968 0.414141 0.020202 0.421794 0.414141 0.030303 0.425620 0.414141 0.040404 0.429446 0.414141 0.050505 0.433272 0.414141 0.060606 0.437098 0.414141 0.070707 0.440924 0.414141 0.080808 0.444751 0.414141 0.090909 0.448577 0.414141 0.101010 0.452403 0.414141 0.111111 0.456229 0.414141 0.121212 0.460055 0.414141 0.131313 0.463881 0.414141 0.141414 0.467707 0.414141 0.151515 0.471534 0.414141 0.161616 0.475360 0.414141 0.171717 0.479186 0.414141 0.181818 0.483012 0.414141 0.191919 0.486838 0.414141 0.202020 0.490664 0.414141 0.212121 0.494490 0.414141 0.222222 0.498316 0.414141 0.232323 0.502143 0.414141 0.242424 0.505969 0.414141 0.252525 0.509795 0.414141 0.262626 0.513621 0.414141 0.272727 0.517447 0.414141 0.282828 0.521273 0.414141 0.292929 0.525099 0.414141 0.303030 0.528926 0.414141 0.313131 0.532752 0.414141 0.323232 0.536578 0.414141 0.333333 0.540404 0.414141 0.343434 0.544230 0.414141 0.353535 0.548056 0.414141 0.363636 0.551882 0.414141 0.373737 0.555709 0.414141 0.383838 0.559535 0.414141 0.393939 0.563361 0.414141 0.404040 0.567187 0.414141 0.414141 0.571013 0.414141 0.424242 0.574839 0.414141 0.434343 0.578665 0.414141 0.444444 0.582492 0.414141 0.454545 0.586318 0.414141 0.464646 0.590144 0.414141 0.474747 0.593970 0.414141 0.484848 0.597796 0.414141 0.494949 0.601622 0.414141 0.505051 0.605448 0.414141 0.515152 0.609275 0.414141 0.525253 0.613101 0.414141 0.535354 0.616927 0.414141 0.545455 0.620753 0.414141 0.555556 0.624579 0.414141 0.565657 0.628405 0.414141 0.575758 0.632231 0.414141 0.585859 0.636058 0.414141 0.595960 0.639884 0.414141 0.606061 0.643710 0.414141 0.616162 0.647536 0.414141 0.626263 0.651362 0.414141 0.636364 0.655188 0.414141 0.646465 0.659014 0.414141 0.656566 0.662841 0.414141 0.666667 0.666667 0.414141 0.676768 0.670493 0.414141 0.686869 0.674319 0.414141 0.696970 0.678145 0.414141 0.707071 0.681971 0.414141 0.717172 0.685797 0.414141 0.727273 0.689624 0.414141 0.737374 0.693450 0.414141 0.747475 0.697276 0.414141 0.757576 0.701102 0.414141 0.767677 0.704928 0.414141 0.777778 0.708754 0.414141 0.787879 0.712580 0.414141 0.797980 0.716406 0.414141 0.808081 0.720233 0.414141 0.818182 0.724059 0.414141 0.828283 0.727885 0.414141 0.838384 0.731711 0.414141 0.848485 0.735537 0.414141 0.858586 0.739363 0.414141 0.868687 0.743189 0.414141 0.878788 0.747016 0.414141 0.888889 0.750842 0.414141 0.898990 0.754668 0.414141 0.909091 0.758494 0.414141 0.919192 0.762320 0.414141 0.929293 0.766146 0.414141 0.939394 0.769972 0.414141 0.949495 0.773799 0.414141 0.959596 0.777625 0.414141 0.969697 0.781451 0.414141 0.979798 0.785277 0.414141 0.989899 0.789103 0.414141 1.000000 0.792929 0.424242 0.000000 0.424242 0.424242 0.010101 0.427916 0.424242 0.020202 0.431589 0.424242 0.030303 0.435262 0.424242 0.040404 0.438935 0.424242 0.050505 0.442608 0.424242 0.060606 0.446281 0.424242 0.070707 0.449954 0.424242 0.080808 0.453627 0.424242 0.090909 0.457300 0.424242 0.101010 0.460973 0.424242 0.111111 0.464646 0.424242 0.121212 0.468320 0.424242 0.131313 0.471993 0.424242 0.141414 0.475666 0.424242 0.151515 0.479339 0.424242 0.161616 0.483012 0.424242 0.171717 0.486685 0.424242 0.181818 0.490358 0.424242 0.191919 0.494031 0.424242 0.202020 0.497704 0.424242 0.212121 0.501377 0.424242 0.222222 0.505051 0.424242 0.232323 0.508724 0.424242 0.242424 0.512397 0.424242 0.252525 0.516070 0.424242 0.262626 0.519743 0.424242 0.272727 0.523416 0.424242 0.282828 0.527089 0.424242 0.292929 0.530762 0.424242 0.303030 0.534435 0.424242 0.313131 0.538108 0.424242 0.323232 0.541781 0.424242 0.333333 0.545455 0.424242 0.343434 0.549128 0.424242 0.353535 0.552801 0.424242 0.363636 0.556474 0.424242 0.373737 0.560147 0.424242 0.383838 0.563820 0.424242 0.393939 0.567493 0.424242 0.404040 0.571166 0.424242 0.414141 0.574839 0.424242 0.424242 0.578512 0.424242 0.434343 0.582185 0.424242 0.444444 0.585859 0.424242 0.454545 0.589532 0.424242 0.464646 0.593205 0.424242 0.474747 0.596878 0.424242 0.484848 0.600551 0.424242 0.494949 0.604224 0.424242 0.505051 0.607897 0.424242 0.515152 0.611570 0.424242 0.525253 0.615243 0.424242 0.535354 0.618916 0.424242 0.545455 0.622590 0.424242 0.555556 0.626263 0.424242 0.565657 0.629936 0.424242 0.575758 0.633609 0.424242 0.585859 0.637282 0.424242 0.595960 0.640955 0.424242 0.606061 0.644628 0.424242 0.616162 0.648301 0.424242 0.626263 0.651974 0.424242 0.636364 0.655647 0.424242 0.646465 0.659320 0.424242 0.656566 0.662994 0.424242 0.666667 0.666667 0.424242 0.676768 0.670340 0.424242 0.686869 0.674013 0.424242 0.696970 0.677686 0.424242 0.707071 0.681359 0.424242 0.717172 0.685032 0.424242 0.727273 0.688705 0.424242 0.737374 0.692378 0.424242 0.747475 0.696051 0.424242 0.757576 0.699725 0.424242 0.767677 0.703398 0.424242 0.777778 0.707071 0.424242 0.787879 0.710744 0.424242 0.797980 0.714417 0.424242 0.808081 0.718090 0.424242 0.818182 0.721763 0.424242 0.828283 0.725436 0.424242 0.838384 0.729109 0.424242 0.848485 0.732782 0.424242 0.858586 0.736455 0.424242 0.868687 0.740129 0.424242 0.878788 0.743802 0.424242 0.888889 0.747475 0.424242 0.898990 0.751148 0.424242 0.909091 0.754821 0.424242 0.919192 0.758494 0.424242 0.929293 0.762167 0.424242 0.939394 0.765840 0.424242 0.949495 0.769513 0.424242 0.959596 0.773186 0.424242 0.969697 0.776860 0.424242 0.979798 0.780533 0.424242 0.989899 0.784206 0.424242 1.000000 0.787879 0.434343 0.000000 0.434343 0.434343 0.010101 0.437863 0.434343 0.020202 0.441384 0.434343 0.030303 0.444904 0.434343 0.040404 0.448424 0.434343 0.050505 0.451944 0.434343 0.060606 0.455464 0.434343 0.070707 0.458984 0.434343 0.080808 0.462504 0.434343 0.090909 0.466024 0.434343 0.101010 0.469544 0.434343 0.111111 0.473064 0.434343 0.121212 0.476584 0.434343 0.131313 0.480104 0.434343 0.141414 0.483624 0.434343 0.151515 0.487144 0.434343 0.161616 0.490664 0.434343 0.171717 0.494184 0.434343 0.181818 0.497704 0.434343 0.191919 0.501224 0.434343 0.202020 0.504744 0.434343 0.212121 0.508264 0.434343 0.222222 0.511785 0.434343 0.232323 0.515305 0.434343 0.242424 0.518825 0.434343 0.252525 0.522345 0.434343 0.262626 0.525865 0.434343 0.272727 0.529385 0.434343 0.282828 0.532905 0.434343 0.292929 0.536425 0.434343 0.303030 0.539945 0.434343 0.313131 0.543465 0.434343 0.323232 0.546985 0.434343 0.333333 0.550505 0.434343 0.343434 0.554025 0.434343 0.353535 0.557545 0.434343 0.363636 0.561065 0.434343 0.373737 0.564585 0.434343 0.383838 0.568105 0.434343 0.393939 0.571625 0.434343 0.404040 0.575145 0.434343 0.414141 0.578665 0.434343 0.424242 0.582185 0.434343 0.434343 0.585706 0.434343 0.444444 0.589226 0.434343 0.454545 0.592746 0.434343 0.464646 0.596266 0.434343 0.474747 0.599786 0.434343 0.484848 0.603306 0.434343 0.494949 0.606826 0.434343 0.505051 0.610346 0.434343 0.515152 0.613866 0.434343 0.525253 0.617386 0.434343 0.535354 0.620906 0.434343 0.545455 0.624426 0.434343 0.555556 0.627946 0.434343 0.565657 0.631466 0.434343 0.575758 0.634986 0.434343 0.585859 0.638506 0.434343 0.595960 0.642026 0.434343 0.606061 0.645546 0.434343 0.616162 0.649066 0.434343 0.626263 0.652586 0.434343 0.636364 0.656107 0.434343 0.646465 0.659627 0.434343 0.656566 0.663147 0.434343 0.666667 0.666667 0.434343 0.676768 0.670187 0.434343 0.686869 0.673707 0.434343 0.696970 0.677227 0.434343 0.707071 0.680747 0.434343 0.717172 0.684267 0.434343 0.727273 0.687787 0.434343 0.737374 0.691307 0.434343 0.747475 0.694827 0.434343 0.757576 0.698347 0.434343 0.767677 0.701867 0.434343 0.777778 0.705387 0.434343 0.787879 0.708907 0.434343 0.797980 0.712427 0.434343 0.808081 0.715947 0.434343 0.818182 0.719467 0.434343 0.828283 0.722987 0.434343 0.838384 0.726507 0.434343 0.848485 0.730028 0.434343 0.858586 0.733548 0.434343 0.868687 0.737068 0.434343 0.878788 0.740588 0.434343 0.888889 0.744108 0.434343 0.898990 0.747628 0.434343 0.909091 0.751148 0.434343 0.919192 0.754668 0.434343 0.929293 0.758188 0.434343 0.939394 0.761708 0.434343 0.949495 0.765228 0.434343 0.959596 0.768748 0.434343 0.969697 0.772268 0.434343 0.979798 0.775788 0.434343 0.989899 0.779308 0.434343 1.000000 0.782828 0.444444 0.000000 0.444444 0.444444 0.010101 0.447811 0.444444 0.020202 0.451178 0.444444 0.030303 0.454545 0.444444 0.040404 0.457912 0.444444 0.050505 0.461279 0.444444 0.060606 0.464646 0.444444 0.070707 0.468013 0.444444 0.080808 0.471380 0.444444 0.090909 0.474747 0.444444 0.101010 0.478114 0.444444 0.111111 0.481481 0.444444 0.121212 0.484848 0.444444 0.131313 0.488215 0.444444 0.141414 0.491582 0.444444 0.151515 0.494949 0.444444 0.161616 0.498316 0.444444 0.171717 0.501684 0.444444 0.181818 0.505051 0.444444 0.191919 0.508418 0.444444 0.202020 0.511785 0.444444 0.212121 0.515152 0.444444 0.222222 0.518519 0.444444 0.232323 0.521886 0.444444 0.242424 0.525253 0.444444 0.252525 0.528620 0.444444 0.262626 0.531987 0.444444 0.272727 0.535354 0.444444 0.282828 0.538721 0.444444 0.292929 0.542088 0.444444 0.303030 0.545455 0.444444 0.313131 0.548822 0.444444 0.323232 0.552189 0.444444 0.333333 0.555556 0.444444 0.343434 0.558923 0.444444 0.353535 0.562290 0.444444 0.363636 0.565657 0.444444 0.373737 0.569024 0.444444 0.383838 0.572391 0.444444 0.393939 0.575758 0.444444 0.404040 0.579125 0.444444 0.414141 0.582492 0.444444 0.424242 0.585859 0.444444 0.434343 0.589226 0.444444 0.444444 0.592593 0.444444 0.454545 0.595960 0.444444 0.464646 0.599327 0.444444 0.474747 0.602694 0.444444 0.484848 0.606061 0.444444 0.494949 0.609428 0.444444 0.505051 0.612795 0.444444 0.515152 0.616162 0.444444 0.525253 0.619529 0.444444 0.535354 0.622896 0.444444 0.545455 0.626263 0.444444 0.555556 0.629630 0.444444 0.565657 0.632997 0.444444 0.575758 0.636364 0.444444 0.585859 0.639731 0.444444 0.595960 0.643098 0.444444 0.606061 0.646465 0.444444 0.616162 0.649832 0.444444 0.626263 0.653199 0.444444 0.636364 0.656566 0.444444 0.646465 0.659933 0.444444 0.656566 0.663300 0.444444 0.666667 0.666667 0.444444 0.676768 0.670034 0.444444 0.686869 0.673401 0.444444 0.696970 0.676768 0.444444 0.707071 0.680135 0.444444 0.717172 0.683502 0.444444 0.727273 0.686869 0.444444 0.737374 0.690236 0.444444 0.747475 0.693603 0.444444 0.757576 0.696970 0.444444 0.767677 0.700337 0.444444 0.777778 0.703704 0.444444 0.787879 0.707071 0.444444 0.797980 0.710438 0.444444 0.808081 0.713805 0.444444 0.818182 0.717172 0.444444 0.828283 0.720539 0.444444 0.838384 0.723906 0.444444 0.848485 0.727273 0.444444 0.858586 0.730640 0.444444 0.868687 0.734007 0.444444 0.878788 0.737374 0.444444 0.888889 0.740741 0.444444 0.898990 0.744108 0.444444 0.909091 0.747475 0.444444 0.919192 0.750842 0.444444 0.929293 0.754209 0.444444 0.939394 0.757576 0.444444 0.949495 0.760943 0.444444 0.959596 0.764310 0.444444 0.969697 0.767677 0.444444 0.979798 0.771044 0.444444 0.989899 0.774411 0.444444 1.000000 0.777778 0.454545 0.000000 0.454545 0.454545 0.010101 0.457759 0.454545 0.020202 0.460973 0.454545 0.030303 0.464187 0.454545 0.040404 0.467401 0.454545 0.050505 0.470615 0.454545 0.060606 0.473829 0.454545 0.070707 0.477043 0.454545 0.080808 0.480257 0.454545 0.090909 0.483471 0.454545 0.101010 0.486685 0.454545 0.111111 0.489899 0.454545 0.121212 0.493113 0.454545 0.131313 0.496327 0.454545 0.141414 0.499541 0.454545 0.151515 0.502755 0.454545 0.161616 0.505969 0.454545 0.171717 0.509183 0.454545 0.181818 0.512397 0.454545 0.191919 0.515611 0.454545 0.202020 0.518825 0.454545 0.212121 0.522039 0.454545 0.222222 0.525253 0.454545 0.232323 0.528466 0.454545 0.242424 0.531680 0.454545 0.252525 0.534894 0.454545 0.262626 0.538108 0.454545 0.272727 0.541322 0.454545 0.282828 0.544536 0.454545 0.292929 0.547750 0.454545 0.303030 0.550964 0.454545 0.313131 0.554178 0.454545 0.323232 0.557392 0.454545 0.333333 0.560606 0.454545 0.343434 0.563820 0.454545 0.353535 0.567034 0.454545 0.363636 0.570248 0.454545 0.373737 0.573462 0.454545 0.383838 0.576676 0.454545 0.393939 0.579890 0.454545 0.404040 0.583104 0.454545 0.414141 0.586318 0.454545 0.424242 0.589532 0.454545 0.434343 0.592746 0.454545 0.444444 0.595960 0.454545 0.454545 0.599174 0.454545 0.464646 0.602388 0.454545 0.474747 0.605601 0.454545 0.484848 0.608815 0.454545 0.494949 0.612029 0.454545 0.505051 0.615243 0.454545 0.515152 0.618457 0.454545 0.525253 0.621671 0.454545 0.535354 0.624885 0.454545 0.545455 0.628099 0.454545 0.555556 0.631313 0.454545 0.565657 0.634527 0.454545 0.575758 0.637741 0.454545 0.585859 0.640955 0.454545 0.595960 0.644169 0.454545 0.606061 0.647383 0.454545 0.616162 0.650597 0.454545 0.626263 0.653811 0.454545 0.636364 0.657025 0.454545 0.646465 0.660239 0.454545 0.656566 0.663453 0.454545 0.666667 0.666667 0.454545 0.676768 0.669881 0.454545 0.686869 0.673095 0.454545 0.696970 0.676309 0.454545 0.707071 0.679522 0.454545 0.717172 0.682736 0.454545 0.727273 0.685950 0.454545 0.737374 0.689164 0.454545 0.747475 0.692378 0.454545 0.757576 0.695592 0.454545 0.767677 0.698806 0.454545 0.777778 0.702020 0.454545 0.787879 0.705234 0.454545 0.797980 0.708448 0.454545 0.808081 0.711662 0.454545 0.818182 0.714876 0.454545 0.828283 0.718090 0.454545 0.838384 0.721304 0.454545 0.848485 0.724518 0.454545 0.858586 0.727732 0.454545 0.868687 0.730946 0.454545 0.878788 0.734160 0.454545 0.888889 0.737374 0.454545 0.898990 0.740588 0.454545 0.909091 0.743802 0.454545 0.919192 0.747016 0.454545 0.929293 0.750230 0.454545 0.939394 0.753444 0.454545 0.949495 0.756657 0.454545 0.959596 0.759871 0.454545 0.969697 0.763085 0.454545 0.979798 0.766299 0.454545 0.989899 0.769513 0.454545 1.000000 0.772727 0.464646 0.000000 0.464646 0.464646 0.010101 0.467707 0.464646 0.020202 0.470768 0.464646 0.030303 0.473829 0.464646 0.040404 0.476890 0.464646 0.050505 0.479951 0.464646 0.060606 0.483012 0.464646 0.070707 0.486073 0.464646 0.080808 0.489134 0.464646 0.090909 0.492195 0.464646 0.101010 0.495256 0.464646 0.111111 0.498316 0.464646 0.121212 0.501377 0.464646 0.131313 0.504438 0.464646 0.141414 0.507499 0.464646 0.151515 0.510560 0.464646 0.161616 0.513621 0.464646 0.171717 0.516682 0.464646 0.181818 0.519743 0.464646 0.191919 0.522804 0.464646 0.202020 0.525865 0.464646 0.212121 0.528926 0.464646 0.222222 0.531987 0.464646 0.232323 0.535047 0.464646 0.242424 0.538108 0.464646 0.252525 0.541169 0.464646 0.262626 0.544230 0.464646 0.272727 0.547291 0.464646 0.282828 0.550352 0.464646 0.292929 0.553413 0.464646 0.303030 0.556474 0.464646 0.313131 0.559535 0.464646 0.323232 0.562596 0.464646 0.333333 0.565657 0.464646 0.343434 0.568717 0.464646 0.353535 0.571778 0.464646 0.363636 0.574839 0.464646 0.373737 0.577900 0.464646 0.383838 0.580961 0.464646 0.393939 0.584022 0.464646 0.404040 0.587083 0.464646 0.414141 0.590144 0.464646 0.424242 0.593205 0.464646 0.434343 0.596266 0.464646 0.444444 0.599327 0.464646 0.454545 0.602388 0.464646 0.464646 0.605448 0.464646 0.474747 0.608509 0.464646 0.484848 0.611570 0.464646 0.494949 0.614631 0.464646 0.505051 0.617692 0.464646 0.515152 0.620753 0.464646 0.525253 0.623814 0.464646 0.535354 0.626875 0.464646 0.545455 0.629936 0.464646 0.555556 0.632997 0.464646 0.565657 0.636058 0.464646 0.575758 0.639118 0.464646 0.585859 0.642179 0.464646 0.595960 0.645240 0.464646 0.606061 0.648301 0.464646 0.616162 0.651362 0.464646 0.626263 0.654423 0.464646 0.636364 0.657484 0.464646 0.646465 0.660545 0.464646 0.656566 0.663606 0.464646 0.666667 0.666667 0.464646 0.676768 0.669728 0.464646 0.686869 0.672788 0.464646 0.696970 0.675849 0.464646 0.707071 0.678910 0.464646 0.717172 0.681971 0.464646 0.727273 0.685032 0.464646 0.737374 0.688093 0.464646 0.747475 0.691154 0.464646 0.757576 0.694215 0.464646 0.767677 0.697276 0.464646 0.777778 0.700337 0.464646 0.787879 0.703398 0.464646 0.797980 0.706459 0.464646 0.808081 0.709519 0.464646 0.818182 0.712580 0.464646 0.828283 0.715641 0.464646 0.838384 0.718702 0.464646 0.848485 0.721763 0.464646 0.858586 0.724824 0.464646 0.868687 0.727885 0.464646 0.878788 0.730946 0.464646 0.888889 0.734007 0.464646 0.898990 0.737068 0.464646 0.909091 0.740129 0.464646 0.919192 0.743189 0.464646 0.929293 0.746250 0.464646 0.939394 0.749311 0.464646 0.949495 0.752372 0.464646 0.959596 0.755433 0.464646 0.969697 0.758494 0.464646 0.979798 0.761555 0.464646 0.989899 0.764616 0.464646 1.000000 0.767677 0.474747 0.000000 0.474747 0.474747 0.010101 0.477655 0.474747 0.020202 0.480563 0.474747 0.030303 0.483471 0.474747 0.040404 0.486379 0.474747 0.050505 0.489287 0.474747 0.060606 0.492195 0.474747 0.070707 0.495103 0.474747 0.080808 0.498010 0.474747 0.090909 0.500918 0.474747 0.101010 0.503826 0.474747 0.111111 0.506734 0.474747 0.121212 0.509642 0.474747 0.131313 0.512550 0.474747 0.141414 0.515458 0.474747 0.151515 0.518365 0.474747 0.161616 0.521273 0.474747 0.171717 0.524181 0.474747 0.181818 0.527089 0.474747 0.191919 0.529997 0.474747 0.202020 0.532905 0.474747 0.212121 0.535813 0.474747 0.222222 0.538721 0.474747 0.232323 0.541628 0.474747 0.242424 0.544536 0.474747 0.252525 0.547444 0.474747 0.262626 0.550352 0.474747 0.272727 0.553260 0.474747 0.282828 0.556168 0.474747 0.292929 0.559076 0.474747 0.303030 0.561983 0.474747 0.313131 0.564891 0.474747 0.323232 0.567799 0.474747 0.333333 0.570707 0.474747 0.343434 0.573615 0.474747 0.353535 0.576523 0.474747 0.363636 0.579431 0.474747 0.373737 0.582339 0.474747 0.383838 0.585246 0.474747 0.393939 0.588154 0.474747 0.404040 0.591062 0.474747 0.414141 0.593970 0.474747 0.424242 0.596878 0.474747 0.434343 0.599786 0.474747 0.444444 0.602694 0.474747 0.454545 0.605601 0.474747 0.464646 0.608509 0.474747 0.474747 0.611417 0.474747 0.484848 0.614325 0.474747 0.494949 0.617233 0.474747 0.505051 0.620141 0.474747 0.515152 0.623049 0.474747 0.525253 0.625957 0.474747 0.535354 0.628864 0.474747 0.545455 0.631772 0.474747 0.555556 0.634680 0.474747 0.565657 0.637588 0.474747 0.575758 0.640496 0.474747 0.585859 0.643404 0.474747 0.595960 0.646312 0.474747 0.606061 0.649219 0.474747 0.616162 0.652127 0.474747 0.626263 0.655035 0.474747 0.636364 0.657943 0.474747 0.646465 0.660851 0.474747 0.656566 0.663759 0.474747 0.666667 0.666667 0.474747 0.676768 0.669575 0.474747 0.686869 0.672482 0.474747 0.696970 0.675390 0.474747 0.707071 0.678298 0.474747 0.717172 0.681206 0.474747 0.727273 0.684114 0.474747 0.737374 0.687022 0.474747 0.747475 0.689930 0.474747 0.757576 0.692837 0.474747 0.767677 0.695745 0.474747 0.777778 0.698653 0.474747 0.787879 0.701561 0.474747 0.797980 0.704469 0.474747 0.808081 0.707377 0.474747 0.818182 0.710285 0.474747 0.828283 0.713193 0.474747 0.838384 0.716100 0.474747 0.848485 0.719008 0.474747 0.858586 0.721916 0.474747 0.868687 0.724824 0.474747 0.878788 0.727732 0.474747 0.888889 0.730640 0.474747 0.898990 0.733548 0.474747 0.909091 0.736455 0.474747 0.919192 0.739363 0.474747 0.929293 0.742271 0.474747 0.939394 0.745179 0.474747 0.949495 0.748087 0.474747 0.959596 0.750995 0.474747 0.969697 0.753903 0.474747 0.979798 0.756811 0.474747 0.989899 0.759718 0.474747 1.000000 0.762626 0.484848 0.000000 0.484848 0.484848 0.010101 0.487603 0.484848 0.020202 0.490358 0.484848 0.030303 0.493113 0.484848 0.040404 0.495868 0.484848 0.050505 0.498623 0.484848 0.060606 0.501377 0.484848 0.070707 0.504132 0.484848 0.080808 0.506887 0.484848 0.090909 0.509642 0.484848 0.101010 0.512397 0.484848 0.111111 0.515152 0.484848 0.121212 0.517906 0.484848 0.131313 0.520661 0.484848 0.141414 0.523416 0.484848 0.151515 0.526171 0.484848 0.161616 0.528926 0.484848 0.171717 0.531680 0.484848 0.181818 0.534435 0.484848 0.191919 0.537190 0.484848 0.202020 0.539945 0.484848 0.212121 0.542700 0.484848 0.222222 0.545455 0.484848 0.232323 0.548209 0.484848 0.242424 0.550964 0.484848 0.252525 0.553719 0.484848 0.262626 0.556474 0.484848 0.272727 0.559229 0.484848 0.282828 0.561983 0.484848 0.292929 0.564738 0.484848 0.303030 0.567493 0.484848 0.313131 0.570248 0.484848 0.323232 0.573003 0.484848 0.333333 0.575758 0.484848 0.343434 0.578512 0.484848 0.353535 0.581267 0.484848 0.363636 0.584022 0.484848 0.373737 0.586777 0.484848 0.383838 0.589532 0.484848 0.393939 0.592287 0.484848 0.404040 0.595041 0.484848 0.414141 0.597796 0.484848 0.424242 0.600551 0.484848 0.434343 0.603306 0.484848 0.444444 0.606061 0.484848 0.454545 0.608815 0.484848 0.464646 0.611570 0.484848 0.474747 0.614325 0.484848 0.484848 0.617080 0.484848 0.494949 0.619835 0.484848 0.505051 0.622590 0.484848 0.515152 0.625344 0.484848 0.525253 0.628099 0.484848 0.535354 0.630854 0.484848 0.545455 0.633609 0.484848 0.555556 0.636364 0.484848 0.565657 0.639118 0.484848 0.575758 0.641873 0.484848 0.585859 0.644628 0.484848 0.595960 0.647383 0.484848 0.606061 0.650138 0.484848 0.616162 0.652893 0.484848 0.626263 0.655647 0.484848 0.636364 0.658402 0.484848 0.646465 0.661157 0.484848 0.656566 0.663912 0.484848 0.666667 0.666667 0.484848 0.676768 0.669421 0.484848 0.686869 0.672176 0.484848 0.696970 0.674931 0.484848 0.707071 0.677686 0.484848 0.717172 0.680441 0.484848 0.727273 0.683196 0.484848 0.737374 0.685950 0.484848 0.747475 0.688705 0.484848 0.757576 0.691460 0.484848 0.767677 0.694215 0.484848 0.777778 0.696970 0.484848 0.787879 0.699725 0.484848 0.797980 0.702479 0.484848 0.808081 0.705234 0.484848 0.818182 0.707989 0.484848 0.828283 0.710744 0.484848 0.838384 0.713499 0.484848 0.848485 0.716253 0.484848 0.858586 0.719008 0.484848 0.868687 0.721763 0.484848 0.878788 0.724518 0.484848 0.888889 0.727273 0.484848 0.898990 0.730028 0.484848 0.909091 0.732782 0.484848 0.919192 0.735537 0.484848 0.929293 0.738292 0.484848 0.939394 0.741047 0.484848 0.949495 0.743802 0.484848 0.959596 0.746556 0.484848 0.969697 0.749311 0.484848 0.979798 0.752066 0.484848 0.989899 0.754821 0.484848 1.000000 0.757576 0.494949 0.000000 0.494949 0.494949 0.010101 0.497551 0.494949 0.020202 0.500153 0.494949 0.030303 0.502755 0.494949 0.040404 0.505357 0.494949 0.050505 0.507958 0.494949 0.060606 0.510560 0.494949 0.070707 0.513162 0.494949 0.080808 0.515764 0.494949 0.090909 0.518365 0.494949 0.101010 0.520967 0.494949 0.111111 0.523569 0.494949 0.121212 0.526171 0.494949 0.131313 0.528773 0.494949 0.141414 0.531374 0.494949 0.151515 0.533976 0.494949 0.161616 0.536578 0.494949 0.171717 0.539180 0.494949 0.181818 0.541781 0.494949 0.191919 0.544383 0.494949 0.202020 0.546985 0.494949 0.212121 0.549587 0.494949 0.222222 0.552189 0.494949 0.232323 0.554790 0.494949 0.242424 0.557392 0.494949 0.252525 0.559994 0.494949 0.262626 0.562596 0.494949 0.272727 0.565197 0.494949 0.282828 0.567799 0.494949 0.292929 0.570401 0.494949 0.303030 0.573003 0.494949 0.313131 0.575605 0.494949 0.323232 0.578206 0.494949 0.333333 0.580808 0.494949 0.343434 0.583410 0.494949 0.353535 0.586012 0.494949 0.363636 0.588613 0.494949 0.373737 0.591215 0.494949 0.383838 0.593817 0.494949 0.393939 0.596419 0.494949 0.404040 0.599021 0.494949 0.414141 0.601622 0.494949 0.424242 0.604224 0.494949 0.434343 0.606826 0.494949 0.444444 0.609428 0.494949 0.454545 0.612029 0.494949 0.464646 0.614631 0.494949 0.474747 0.617233 0.494949 0.484848 0.619835 0.494949 0.494949 0.622436 0.494949 0.505051 0.625038 0.494949 0.515152 0.627640 0.494949 0.525253 0.630242 0.494949 0.535354 0.632844 0.494949 0.545455 0.635445 0.494949 0.555556 0.638047 0.494949 0.565657 0.640649 0.494949 0.575758 0.643251 0.494949 0.585859 0.645852 0.494949 0.595960 0.648454 0.494949 0.606061 0.651056 0.494949 0.616162 0.653658 0.494949 0.626263 0.656260 0.494949 0.636364 0.658861 0.494949 0.646465 0.661463 0.494949 0.656566 0.664065 0.494949 0.666667 0.666667 0.494949 0.676768 0.669268 0.494949 0.686869 0.671870 0.494949 0.696970 0.674472 0.494949 0.707071 0.677074 0.494949 0.717172 0.679676 0.494949 0.727273 0.682277 0.494949 0.737374 0.684879 0.494949 0.747475 0.687481 0.494949 0.757576 0.690083 0.494949 0.767677 0.692684 0.494949 0.777778 0.695286 0.494949 0.787879 0.697888 0.494949 0.797980 0.700490 0.494949 0.808081 0.703092 0.494949 0.818182 0.705693 0.494949 0.828283 0.708295 0.494949 0.838384 0.710897 0.494949 0.848485 0.713499 0.494949 0.858586 0.716100 0.494949 0.868687 0.718702 0.494949 0.878788 0.721304 0.494949 0.888889 0.723906 0.494949 0.898990 0.726507 0.494949 0.909091 0.729109 0.494949 0.919192 0.731711 0.494949 0.929293 0.734313 0.494949 0.939394 0.736915 0.494949 0.949495 0.739516 0.494949 0.959596 0.742118 0.494949 0.969697 0.744720 0.494949 0.979798 0.747322 0.494949 0.989899 0.749923 0.494949 1.000000 0.752525 0.505051 0.000000 0.505051 0.505051 0.010101 0.507499 0.505051 0.020202 0.509948 0.505051 0.030303 0.512397 0.505051 0.040404 0.514845 0.505051 0.050505 0.517294 0.505051 0.060606 0.519743 0.505051 0.070707 0.522192 0.505051 0.080808 0.524640 0.505051 0.090909 0.527089 0.505051 0.101010 0.529538 0.505051 0.111111 0.531987 0.505051 0.121212 0.534435 0.505051 0.131313 0.536884 0.505051 0.141414 0.539333 0.505051 0.151515 0.541781 0.505051 0.161616 0.544230 0.505051 0.171717 0.546679 0.505051 0.181818 0.549128 0.505051 0.191919 0.551576 0.505051 0.202020 0.554025 0.505051 0.212121 0.556474 0.505051 0.222222 0.558923 0.505051 0.232323 0.561371 0.505051 0.242424 0.563820 0.505051 0.252525 0.566269 0.505051 0.262626 0.568717 0.505051 0.272727 0.571166 0.505051 0.282828 0.573615 0.505051 0.292929 0.576064 0.505051 0.303030 0.578512 0.505051 0.313131 0.580961 0.505051 0.323232 0.583410 0.505051 0.333333 0.585859 0.505051 0.343434 0.588307 0.505051 0.353535 0.590756 0.505051 0.363636 0.593205 0.505051 0.373737 0.595654 0.505051 0.383838 0.598102 0.505051 0.393939 0.600551 0.505051 0.404040 0.603000 0.505051 0.414141 0.605448 0.505051 0.424242 0.607897 0.505051 0.434343 0.610346 0.505051 0.444444 0.612795 0.505051 0.454545 0.615243 0.505051 0.464646 0.617692 0.505051 0.474747 0.620141 0.505051 0.484848 0.622590 0.505051 0.494949 0.625038 0.505051 0.505051 0.627487 0.505051 0.515152 0.629936 0.505051 0.525253 0.632384 0.505051 0.535354 0.634833 0.505051 0.545455 0.637282 0.505051 0.555556 0.639731 0.505051 0.565657 0.642179 0.505051 0.575758 0.644628 0.505051 0.585859 0.647077 0.505051 0.595960 0.649526 0.505051 0.606061 0.651974 0.505051 0.616162 0.654423 0.505051 0.626263 0.656872 0.505051 0.636364 0.659320 0.505051 0.646465 0.661769 0.505051 0.656566 0.664218 0.505051 0.666667 0.666667 0.505051 0.676768 0.669115 0.505051 0.686869 0.671564 0.505051 0.696970 0.674013 0.505051 0.707071 0.676462 0.505051 0.717172 0.678910 0.505051 0.727273 0.681359 0.505051 0.737374 0.683808 0.505051 0.747475 0.686257 0.505051 0.757576 0.688705 0.505051 0.767677 0.691154 0.505051 0.777778 0.693603 0.505051 0.787879 0.696051 0.505051 0.797980 0.698500 0.505051 0.808081 0.700949 0.505051 0.818182 0.703398 0.505051 0.828283 0.705846 0.505051 0.838384 0.708295 0.505051 0.848485 0.710744 0.505051 0.858586 0.713193 0.505051 0.868687 0.715641 0.505051 0.878788 0.718090 0.505051 0.888889 0.720539 0.505051 0.898990 0.722987 0.505051 0.909091 0.725436 0.505051 0.919192 0.727885 0.505051 0.929293 0.730334 0.505051 0.939394 0.732782 0.505051 0.949495 0.735231 0.505051 0.959596 0.737680 0.505051 0.969697 0.740129 0.505051 0.979798 0.742577 0.505051 0.989899 0.745026 0.505051 1.000000 0.747475 0.515152 0.000000 0.515152 0.515152 0.010101 0.517447 0.515152 0.020202 0.519743 0.515152 0.030303 0.522039 0.515152 0.040404 0.524334 0.515152 0.050505 0.526630 0.515152 0.060606 0.528926 0.515152 0.070707 0.531221 0.515152 0.080808 0.533517 0.515152 0.090909 0.535813 0.515152 0.101010 0.538108 0.515152 0.111111 0.540404 0.515152 0.121212 0.542700 0.515152 0.131313 0.544995 0.515152 0.141414 0.547291 0.515152 0.151515 0.549587 0.515152 0.161616 0.551882 0.515152 0.171717 0.554178 0.515152 0.181818 0.556474 0.515152 0.191919 0.558770 0.515152 0.202020 0.561065 0.515152 0.212121 0.563361 0.515152 0.222222 0.565657 0.515152 0.232323 0.567952 0.515152 0.242424 0.570248 0.515152 0.252525 0.572544 0.515152 0.262626 0.574839 0.515152 0.272727 0.577135 0.515152 0.282828 0.579431 0.515152 0.292929 0.581726 0.515152 0.303030 0.584022 0.515152 0.313131 0.586318 0.515152 0.323232 0.588613 0.515152 0.333333 0.590909 0.515152 0.343434 0.593205 0.515152 0.353535 0.595500 0.515152 0.363636 0.597796 0.515152 0.373737 0.600092 0.515152 0.383838 0.602388 0.515152 0.393939 0.604683 0.515152 0.404040 0.606979 0.515152 0.414141 0.609275 0.515152 0.424242 0.611570 0.515152 0.434343 0.613866 0.515152 0.444444 0.616162 0.515152 0.454545 0.618457 0.515152 0.464646 0.620753 0.515152 0.474747 0.623049 0.515152 0.484848 0.625344 0.515152 0.494949 0.627640 0.515152 0.505051 0.629936 0.515152 0.515152 0.632231 0.515152 0.525253 0.634527 0.515152 0.535354 0.636823 0.515152 0.545455 0.639118 0.515152 0.555556 0.641414 0.515152 0.565657 0.643710 0.515152 0.575758 0.646006 0.515152 0.585859 0.648301 0.515152 0.595960 0.650597 0.515152 0.606061 0.652893 0.515152 0.616162 0.655188 0.515152 0.626263 0.657484 0.515152 0.636364 0.659780 0.515152 0.646465 0.662075 0.515152 0.656566 0.664371 0.515152 0.666667 0.666667 0.515152 0.676768 0.668962 0.515152 0.686869 0.671258 0.515152 0.696970 0.673554 0.515152 0.707071 0.675849 0.515152 0.717172 0.678145 0.515152 0.727273 0.680441 0.515152 0.737374 0.682736 0.515152 0.747475 0.685032 0.515152 0.757576 0.687328 0.515152 0.767677 0.689624 0.515152 0.777778 0.691919 0.515152 0.787879 0.694215 0.515152 0.797980 0.696511 0.515152 0.808081 0.698806 0.515152 0.818182 0.701102 0.515152 0.828283 0.703398 0.515152 0.838384 0.705693 0.515152 0.848485 0.707989 0.515152 0.858586 0.710285 0.515152 0.868687 0.712580 0.515152 0.878788 0.714876 0.515152 0.888889 0.717172 0.515152 0.898990 0.719467 0.515152 0.909091 0.721763 0.515152 0.919192 0.724059 0.515152 0.929293 0.726354 0.515152 0.939394 0.728650 0.515152 0.949495 0.730946 0.515152 0.959596 0.733242 0.515152 0.969697 0.735537 0.515152 0.979798 0.737833 0.515152 0.989899 0.740129 0.515152 1.000000 0.742424 0.525253 0.000000 0.525253 0.525253 0.010101 0.527395 0.525253 0.020202 0.529538 0.525253 0.030303 0.531680 0.525253 0.040404 0.533823 0.525253 0.050505 0.535966 0.525253 0.060606 0.538108 0.525253 0.070707 0.540251 0.525253 0.080808 0.542394 0.525253 0.090909 0.544536 0.525253 0.101010 0.546679 0.525253 0.111111 0.548822 0.525253 0.121212 0.550964 0.525253 0.131313 0.553107 0.525253 0.141414 0.555249 0.525253 0.151515 0.557392 0.525253 0.161616 0.559535 0.525253 0.171717 0.561677 0.525253 0.181818 0.563820 0.525253 0.191919 0.565963 0.525253 0.202020 0.568105 0.525253 0.212121 0.570248 0.525253 0.222222 0.572391 0.525253 0.232323 0.574533 0.525253 0.242424 0.576676 0.525253 0.252525 0.578818 0.525253 0.262626 0.580961 0.525253 0.272727 0.583104 0.525253 0.282828 0.585246 0.525253 0.292929 0.587389 0.525253 0.303030 0.589532 0.525253 0.313131 0.591674 0.525253 0.323232 0.593817 0.525253 0.333333 0.595960 0.525253 0.343434 0.598102 0.525253 0.353535 0.600245 0.525253 0.363636 0.602388 0.525253 0.373737 0.604530 0.525253 0.383838 0.606673 0.525253 0.393939 0.608815 0.525253 0.404040 0.610958 0.525253 0.414141 0.613101 0.525253 0.424242 0.615243 0.525253 0.434343 0.617386 0.525253 0.444444 0.619529 0.525253 0.454545 0.621671 0.525253 0.464646 0.623814 0.525253 0.474747 0.625957 0.525253 0.484848 0.628099 0.525253 0.494949 0.630242 0.525253 0.505051 0.632384 0.525253 0.515152 0.634527 0.525253 0.525253 0.636670 0.525253 0.535354 0.638812 0.525253 0.545455 0.640955 0.525253 0.555556 0.643098 0.525253 0.565657 0.645240 0.525253 0.575758 0.647383 0.525253 0.585859 0.649526 0.525253 0.595960 0.651668 0.525253 0.606061 0.653811 0.525253 0.616162 0.655953 0.525253 0.626263 0.658096 0.525253 0.636364 0.660239 0.525253 0.646465 0.662381 0.525253 0.656566 0.664524 0.525253 0.666667 0.666667 0.525253 0.676768 0.668809 0.525253 0.686869 0.670952 0.525253 0.696970 0.673095 0.525253 0.707071 0.675237 0.525253 0.717172 0.677380 0.525253 0.727273 0.679522 0.525253 0.737374 0.681665 0.525253 0.747475 0.683808 0.525253 0.757576 0.685950 0.525253 0.767677 0.688093 0.525253 0.777778 0.690236 0.525253 0.787879 0.692378 0.525253 0.797980 0.694521 0.525253 0.808081 0.696664 0.525253 0.818182 0.698806 0.525253 0.828283 0.700949 0.525253 0.838384 0.703092 0.525253 0.848485 0.705234 0.525253 0.858586 0.707377 0.525253 0.868687 0.709519 0.525253 0.878788 0.711662 0.525253 0.888889 0.713805 0.525253 0.898990 0.715947 0.525253 0.909091 0.718090 0.525253 0.919192 0.720233 0.525253 0.929293 0.722375 0.525253 0.939394 0.724518 0.525253 0.949495 0.726661 0.525253 0.959596 0.728803 0.525253 0.969697 0.730946 0.525253 0.979798 0.733088 0.525253 0.989899 0.735231 0.525253 1.000000 0.737374 0.535354 0.000000 0.535354 0.535354 0.010101 0.537343 0.535354 0.020202 0.539333 0.535354 0.030303 0.541322 0.535354 0.040404 0.543312 0.535354 0.050505 0.545301 0.535354 0.060606 0.547291 0.535354 0.070707 0.549281 0.535354 0.080808 0.551270 0.535354 0.090909 0.553260 0.535354 0.101010 0.555249 0.535354 0.111111 0.557239 0.535354 0.121212 0.559229 0.535354 0.131313 0.561218 0.535354 0.141414 0.563208 0.535354 0.151515 0.565197 0.535354 0.161616 0.567187 0.535354 0.171717 0.569177 0.535354 0.181818 0.571166 0.535354 0.191919 0.573156 0.535354 0.202020 0.575145 0.535354 0.212121 0.577135 0.535354 0.222222 0.579125 0.535354 0.232323 0.581114 0.535354 0.242424 0.583104 0.535354 0.252525 0.585093 0.535354 0.262626 0.587083 0.535354 0.272727 0.589073 0.535354 0.282828 0.591062 0.535354 0.292929 0.593052 0.535354 0.303030 0.595041 0.535354 0.313131 0.597031 0.535354 0.323232 0.599021 0.535354 0.333333 0.601010 0.535354 0.343434 0.603000 0.535354 0.353535 0.604989 0.535354 0.363636 0.606979 0.535354 0.373737 0.608968 0.535354 0.383838 0.610958 0.535354 0.393939 0.612948 0.535354 0.404040 0.614937 0.535354 0.414141 0.616927 0.535354 0.424242 0.618916 0.535354 0.434343 0.620906 0.535354 0.444444 0.622896 0.535354 0.454545 0.624885 0.535354 0.464646 0.626875 0.535354 0.474747 0.628864 0.535354 0.484848 0.630854 0.535354 0.494949 0.632844 0.535354 0.505051 0.634833 0.535354 0.515152 0.636823 0.535354 0.525253 0.638812 0.535354 0.535354 0.640802 0.535354 0.545455 0.642792 0.535354 0.555556 0.644781 0.535354 0.565657 0.646771 0.535354 0.575758 0.648760 0.535354 0.585859 0.650750 0.535354 0.595960 0.652740 0.535354 0.606061 0.654729 0.535354 0.616162 0.656719 0.535354 0.626263 0.658708 0.535354 0.636364 0.660698 0.535354 0.646465 0.662687 0.535354 0.656566 0.664677 0.535354 0.666667 0.666667 0.535354 0.676768 0.668656 0.535354 0.686869 0.670646 0.535354 0.696970 0.672635 0.535354 0.707071 0.674625 0.535354 0.717172 0.676615 0.535354 0.727273 0.678604 0.535354 0.737374 0.680594 0.535354 0.747475 0.682583 0.535354 0.757576 0.684573 0.535354 0.767677 0.686563 0.535354 0.777778 0.688552 0.535354 0.787879 0.690542 0.535354 0.797980 0.692531 0.535354 0.808081 0.694521 0.535354 0.818182 0.696511 0.535354 0.828283 0.698500 0.535354 0.838384 0.700490 0.535354 0.848485 0.702479 0.535354 0.858586 0.704469 0.535354 0.868687 0.706459 0.535354 0.878788 0.708448 0.535354 0.888889 0.710438 0.535354 0.898990 0.712427 0.535354 0.909091 0.714417 0.535354 0.919192 0.716406 0.535354 0.929293 0.718396 0.535354 0.939394 0.720386 0.535354 0.949495 0.722375 0.535354 0.959596 0.724365 0.535354 0.969697 0.726354 0.535354 0.979798 0.728344 0.535354 0.989899 0.730334 0.535354 1.000000 0.732323 0.545455 0.000000 0.545455 0.545455 0.010101 0.547291 0.545455 0.020202 0.549128 0.545455 0.030303 0.550964 0.545455 0.040404 0.552801 0.545455 0.050505 0.554637 0.545455 0.060606 0.556474 0.545455 0.070707 0.558310 0.545455 0.080808 0.560147 0.545455 0.090909 0.561983 0.545455 0.101010 0.563820 0.545455 0.111111 0.565657 0.545455 0.121212 0.567493 0.545455 0.131313 0.569330 0.545455 0.141414 0.571166 0.545455 0.151515 0.573003 0.545455 0.161616 0.574839 0.545455 0.171717 0.576676 0.545455 0.181818 0.578512 0.545455 0.191919 0.580349 0.545455 0.202020 0.582185 0.545455 0.212121 0.584022 0.545455 0.222222 0.585859 0.545455 0.232323 0.587695 0.545455 0.242424 0.589532 0.545455 0.252525 0.591368 0.545455 0.262626 0.593205 0.545455 0.272727 0.595041 0.545455 0.282828 0.596878 0.545455 0.292929 0.598714 0.545455 0.303030 0.600551 0.545455 0.313131 0.602388 0.545455 0.323232 0.604224 0.545455 0.333333 0.606061 0.545455 0.343434 0.607897 0.545455 0.353535 0.609734 0.545455 0.363636 0.611570 0.545455 0.373737 0.613407 0.545455 0.383838 0.615243 0.545455 0.393939 0.617080 0.545455 0.404040 0.618916 0.545455 0.414141 0.620753 0.545455 0.424242 0.622590 0.545455 0.434343 0.624426 0.545455 0.444444 0.626263 0.545455 0.454545 0.628099 0.545455 0.464646 0.629936 0.545455 0.474747 0.631772 0.545455 0.484848 0.633609 0.545455 0.494949 0.635445 0.545455 0.505051 0.637282 0.545455 0.515152 0.639118 0.545455 0.525253 0.640955 0.545455 0.535354 0.642792 0.545455 0.545455 0.644628 0.545455 0.555556 0.646465 0.545455 0.565657 0.648301 0.545455 0.575758 0.650138 0.545455 0.585859 0.651974 0.545455 0.595960 0.653811 0.545455 0.606061 0.655647 0.545455 0.616162 0.657484 0.545455 0.626263 0.659320 0.545455 0.636364 0.661157 0.545455 0.646465 0.662994 0.545455 0.656566 0.664830 0.545455 0.666667 0.666667 0.545455 0.676768 0.668503 0.545455 0.686869 0.670340 0.545455 0.696970 0.672176 0.545455 0.707071 0.674013 0.545455 0.717172 0.675849 0.545455 0.727273 0.677686 0.545455 0.737374 0.679522 0.545455 0.747475 0.681359 0.545455 0.757576 0.683196 0.545455 0.767677 0.685032 0.545455 0.777778 0.686869 0.545455 0.787879 0.688705 0.545455 0.797980 0.690542 0.545455 0.808081 0.692378 0.545455 0.818182 0.694215 0.545455 0.828283 0.696051 0.545455 0.838384 0.697888 0.545455 0.848485 0.699725 0.545455 0.858586 0.701561 0.545455 0.868687 0.703398 0.545455 0.878788 0.705234 0.545455 0.888889 0.707071 0.545455 0.898990 0.708907 0.545455 0.909091 0.710744 0.545455 0.919192 0.712580 0.545455 0.929293 0.714417 0.545455 0.939394 0.716253 0.545455 0.949495 0.718090 0.545455 0.959596 0.719927 0.545455 0.969697 0.721763 0.545455 0.979798 0.723600 0.545455 0.989899 0.725436 0.545455 1.000000 0.727273 0.555556 0.000000 0.555556 0.555556 0.010101 0.557239 0.555556 0.020202 0.558923 0.555556 0.030303 0.560606 0.555556 0.040404 0.562290 0.555556 0.050505 0.563973 0.555556 0.060606 0.565657 0.555556 0.070707 0.567340 0.555556 0.080808 0.569024 0.555556 0.090909 0.570707 0.555556 0.101010 0.572391 0.555556 0.111111 0.574074 0.555556 0.121212 0.575758 0.555556 0.131313 0.577441 0.555556 0.141414 0.579125 0.555556 0.151515 0.580808 0.555556 0.161616 0.582492 0.555556 0.171717 0.584175 0.555556 0.181818 0.585859 0.555556 0.191919 0.587542 0.555556 0.202020 0.589226 0.555556 0.212121 0.590909 0.555556 0.222222 0.592593 0.555556 0.232323 0.594276 0.555556 0.242424 0.595960 0.555556 0.252525 0.597643 0.555556 0.262626 0.599327 0.555556 0.272727 0.601010 0.555556 0.282828 0.602694 0.555556 0.292929 0.604377 0.555556 0.303030 0.606061 0.555556 0.313131 0.607744 0.555556 0.323232 0.609428 0.555556 0.333333 0.611111 0.555556 0.343434 0.612795 0.555556 0.353535 0.614478 0.555556 0.363636 0.616162 0.555556 0.373737 0.617845 0.555556 0.383838 0.619529 0.555556 0.393939 0.621212 0.555556 0.404040 0.622896 0.555556 0.414141 0.624579 0.555556 0.424242 0.626263 0.555556 0.434343 0.627946 0.555556 0.444444 0.629630 0.555556 0.454545 0.631313 0.555556 0.464646 0.632997 0.555556 0.474747 0.634680 0.555556 0.484848 0.636364 0.555556 0.494949 0.638047 0.555556 0.505051 0.639731 0.555556 0.515152 0.641414 0.555556 0.525253 0.643098 0.555556 0.535354 0.644781 0.555556 0.545455 0.646465 0.555556 0.555556 0.648148 0.555556 0.565657 0.649832 0.555556 0.575758 0.651515 0.555556 0.585859 0.653199 0.555556 0.595960 0.654882 0.555556 0.606061 0.656566 0.555556 0.616162 0.658249 0.555556 0.626263 0.659933 0.555556 0.636364 0.661616 0.555556 0.646465 0.663300 0.555556 0.656566 0.664983 0.555556 0.666667 0.666667 0.555556 0.676768 0.668350 0.555556 0.686869 0.670034 0.555556 0.696970 0.671717 0.555556 0.707071 0.673401 0.555556 0.717172 0.675084 0.555556 0.727273 0.676768 0.555556 0.737374 0.678451 0.555556 0.747475 0.680135 0.555556 0.757576 0.681818 0.555556 0.767677 0.683502 0.555556 0.777778 0.685185 0.555556 0.787879 0.686869 0.555556 0.797980 0.688552 0.555556 0.808081 0.690236 0.555556 0.818182 0.691919 0.555556 0.828283 0.693603 0.555556 0.838384 0.695286 0.555556 0.848485 0.696970 0.555556 0.858586 0.698653 0.555556 0.868687 0.700337 0.555556 0.878788 0.702020 0.555556 0.888889 0.703704 0.555556 0.898990 0.705387 0.555556 0.909091 0.707071 0.555556 0.919192 0.708754 0.555556 0.929293 0.710438 0.555556 0.939394 0.712121 0.555556 0.949495 0.713805 0.555556 0.959596 0.715488 0.555556 0.969697 0.717172 0.555556 0.979798 0.718855 0.555556 0.989899 0.720539 0.555556 1.000000 0.722222 0.565657 0.000000 0.565657 0.565657 0.010101 0.567187 0.565657 0.020202 0.568717 0.565657 0.030303 0.570248 0.565657 0.040404 0.571778 0.565657 0.050505 0.573309 0.565657 0.060606 0.574839 0.565657 0.070707 0.576370 0.565657 0.080808 0.577900 0.565657 0.090909 0.579431 0.565657 0.101010 0.580961 0.565657 0.111111 0.582492 0.565657 0.121212 0.584022 0.565657 0.131313 0.585552 0.565657 0.141414 0.587083 0.565657 0.151515 0.588613 0.565657 0.161616 0.590144 0.565657 0.171717 0.591674 0.565657 0.181818 0.593205 0.565657 0.191919 0.594735 0.565657 0.202020 0.596266 0.565657 0.212121 0.597796 0.565657 0.222222 0.599327 0.565657 0.232323 0.600857 0.565657 0.242424 0.602388 0.565657 0.252525 0.603918 0.565657 0.262626 0.605448 0.565657 0.272727 0.606979 0.565657 0.282828 0.608509 0.565657 0.292929 0.610040 0.565657 0.303030 0.611570 0.565657 0.313131 0.613101 0.565657 0.323232 0.614631 0.565657 0.333333 0.616162 0.565657 0.343434 0.617692 0.565657 0.353535 0.619223 0.565657 0.363636 0.620753 0.565657 0.373737 0.622283 0.565657 0.383838 0.623814 0.565657 0.393939 0.625344 0.565657 0.404040 0.626875 0.565657 0.414141 0.628405 0.565657 0.424242 0.629936 0.565657 0.434343 0.631466 0.565657 0.444444 0.632997 0.565657 0.454545 0.634527 0.565657 0.464646 0.636058 0.565657 0.474747 0.637588 0.565657 0.484848 0.639118 0.565657 0.494949 0.640649 0.565657 0.505051 0.642179 0.565657 0.515152 0.643710 0.565657 0.525253 0.645240 0.565657 0.535354 0.646771 0.565657 0.545455 0.648301 0.565657 0.555556 0.649832 0.565657 0.565657 0.651362 0.565657 0.575758 0.652893 0.565657 0.585859 0.654423 0.565657 0.595960 0.655953 0.565657 0.606061 0.657484 0.565657 0.616162 0.659014 0.565657 0.626263 0.660545 0.565657 0.636364 0.662075 0.565657 0.646465 0.663606 0.565657 0.656566 0.665136 0.565657 0.666667 0.666667 0.565657 0.676768 0.668197 0.565657 0.686869 0.669728 0.565657 0.696970 0.671258 0.565657 0.707071 0.672788 0.565657 0.717172 0.674319 0.565657 0.727273 0.675849 0.565657 0.737374 0.677380 0.565657 0.747475 0.678910 0.565657 0.757576 0.680441 0.565657 0.767677 0.681971 0.565657 0.777778 0.683502 0.565657 0.787879 0.685032 0.565657 0.797980 0.686563 0.565657 0.808081 0.688093 0.565657 0.818182 0.689624 0.565657 0.828283 0.691154 0.565657 0.838384 0.692684 0.565657 0.848485 0.694215 0.565657 0.858586 0.695745 0.565657 0.868687 0.697276 0.565657 0.878788 0.698806 0.565657 0.888889 0.700337 0.565657 0.898990 0.701867 0.565657 0.909091 0.703398 0.565657 0.919192 0.704928 0.565657 0.929293 0.706459 0.565657 0.939394 0.707989 0.565657 0.949495 0.709519 0.565657 0.959596 0.711050 0.565657 0.969697 0.712580 0.565657 0.979798 0.714111 0.565657 0.989899 0.715641 0.565657 1.000000 0.717172 0.575758 0.000000 0.575758 0.575758 0.010101 0.577135 0.575758 0.020202 0.578512 0.575758 0.030303 0.579890 0.575758 0.040404 0.581267 0.575758 0.050505 0.582645 0.575758 0.060606 0.584022 0.575758 0.070707 0.585399 0.575758 0.080808 0.586777 0.575758 0.090909 0.588154 0.575758 0.101010 0.589532 0.575758 0.111111 0.590909 0.575758 0.121212 0.592287 0.575758 0.131313 0.593664 0.575758 0.141414 0.595041 0.575758 0.151515 0.596419 0.575758 0.161616 0.597796 0.575758 0.171717 0.599174 0.575758 0.181818 0.600551 0.575758 0.191919 0.601928 0.575758 0.202020 0.603306 0.575758 0.212121 0.604683 0.575758 0.222222 0.606061 0.575758 0.232323 0.607438 0.575758 0.242424 0.608815 0.575758 0.252525 0.610193 0.575758 0.262626 0.611570 0.575758 0.272727 0.612948 0.575758 0.282828 0.614325 0.575758 0.292929 0.615702 0.575758 0.303030 0.617080 0.575758 0.313131 0.618457 0.575758 0.323232 0.619835 0.575758 0.333333 0.621212 0.575758 0.343434 0.622590 0.575758 0.353535 0.623967 0.575758 0.363636 0.625344 0.575758 0.373737 0.626722 0.575758 0.383838 0.628099 0.575758 0.393939 0.629477 0.575758 0.404040 0.630854 0.575758 0.414141 0.632231 0.575758 0.424242 0.633609 0.575758 0.434343 0.634986 0.575758 0.444444 0.636364 0.575758 0.454545 0.637741 0.575758 0.464646 0.639118 0.575758 0.474747 0.640496 0.575758 0.484848 0.641873 0.575758 0.494949 0.643251 0.575758 0.505051 0.644628 0.575758 0.515152 0.646006 0.575758 0.525253 0.647383 0.575758 0.535354 0.648760 0.575758 0.545455 0.650138 0.575758 0.555556 0.651515 0.575758 0.565657 0.652893 0.575758 0.575758 0.654270 0.575758 0.585859 0.655647 0.575758 0.595960 0.657025 0.575758 0.606061 0.658402 0.575758 0.616162 0.659780 0.575758 0.626263 0.661157 0.575758 0.636364 0.662534 0.575758 0.646465 0.663912 0.575758 0.656566 0.665289 0.575758 0.666667 0.666667 0.575758 0.676768 0.668044 0.575758 0.686869 0.669421 0.575758 0.696970 0.670799 0.575758 0.707071 0.672176 0.575758 0.717172 0.673554 0.575758 0.727273 0.674931 0.575758 0.737374 0.676309 0.575758 0.747475 0.677686 0.575758 0.757576 0.679063 0.575758 0.767677 0.680441 0.575758 0.777778 0.681818 0.575758 0.787879 0.683196 0.575758 0.797980 0.684573 0.575758 0.808081 0.685950 0.575758 0.818182 0.687328 0.575758 0.828283 0.688705 0.575758 0.838384 0.690083 0.575758 0.848485 0.691460 0.575758 0.858586 0.692837 0.575758 0.868687 0.694215 0.575758 0.878788 0.695592 0.575758 0.888889 0.696970 0.575758 0.898990 0.698347 0.575758 0.909091 0.699725 0.575758 0.919192 0.701102 0.575758 0.929293 0.702479 0.575758 0.939394 0.703857 0.575758 0.949495 0.705234 0.575758 0.959596 0.706612 0.575758 0.969697 0.707989 0.575758 0.979798 0.709366 0.575758 0.989899 0.710744 0.575758 1.000000 0.712121 0.585859 0.000000 0.585859 0.585859 0.010101 0.587083 0.585859 0.020202 0.588307 0.585859 0.030303 0.589532 0.585859 0.040404 0.590756 0.585859 0.050505 0.591980 0.585859 0.060606 0.593205 0.585859 0.070707 0.594429 0.585859 0.080808 0.595654 0.585859 0.090909 0.596878 0.585859 0.101010 0.598102 0.585859 0.111111 0.599327 0.585859 0.121212 0.600551 0.585859 0.131313 0.601775 0.585859 0.141414 0.603000 0.585859 0.151515 0.604224 0.585859 0.161616 0.605448 0.585859 0.171717 0.606673 0.585859 0.181818 0.607897 0.585859 0.191919 0.609122 0.585859 0.202020 0.610346 0.585859 0.212121 0.611570 0.585859 0.222222 0.612795 0.585859 0.232323 0.614019 0.585859 0.242424 0.615243 0.585859 0.252525 0.616468 0.585859 0.262626 0.617692 0.585859 0.272727 0.618916 0.585859 0.282828 0.620141 0.585859 0.292929 0.621365 0.585859 0.303030 0.622590 0.585859 0.313131 0.623814 0.585859 0.323232 0.625038 0.585859 0.333333 0.626263 0.585859 0.343434 0.627487 0.585859 0.353535 0.628711 0.585859 0.363636 0.629936 0.585859 0.373737 0.631160 0.585859 0.383838 0.632384 0.585859 0.393939 0.633609 0.585859 0.404040 0.634833 0.585859 0.414141 0.636058 0.585859 0.424242 0.637282 0.585859 0.434343 0.638506 0.585859 0.444444 0.639731 0.585859 0.454545 0.640955 0.585859 0.464646 0.642179 0.585859 0.474747 0.643404 0.585859 0.484848 0.644628 0.585859 0.494949 0.645852 0.585859 0.505051 0.647077 0.585859 0.515152 0.648301 0.585859 0.525253 0.649526 0.585859 0.535354 0.650750 0.585859 0.545455 0.651974 0.585859 0.555556 0.653199 0.585859 0.565657 0.654423 0.585859 0.575758 0.655647 0.585859 0.585859 0.656872 0.585859 0.595960 0.658096 0.585859 0.606061 0.659320 0.585859 0.616162 0.660545 0.585859 0.626263 0.661769 0.585859 0.636364 0.662994 0.585859 0.646465 0.664218 0.585859 0.656566 0.665442 0.585859 0.666667 0.666667 0.585859 0.676768 0.667891 0.585859 0.686869 0.669115 0.585859 0.696970 0.670340 0.585859 0.707071 0.671564 0.585859 0.717172 0.672788 0.585859 0.727273 0.674013 0.585859 0.737374 0.675237 0.585859 0.747475 0.676462 0.585859 0.757576 0.677686 0.585859 0.767677 0.678910 0.585859 0.777778 0.680135 0.585859 0.787879 0.681359 0.585859 0.797980 0.682583 0.585859 0.808081 0.683808 0.585859 0.818182 0.685032 0.585859 0.828283 0.686257 0.585859 0.838384 0.687481 0.585859 0.848485 0.688705 0.585859 0.858586 0.689930 0.585859 0.868687 0.691154 0.585859 0.878788 0.692378 0.585859 0.888889 0.693603 0.585859 0.898990 0.694827 0.585859 0.909091 0.696051 0.585859 0.919192 0.697276 0.585859 0.929293 0.698500 0.585859 0.939394 0.699725 0.585859 0.949495 0.700949 0.585859 0.959596 0.702173 0.585859 0.969697 0.703398 0.585859 0.979798 0.704622 0.585859 0.989899 0.705846 0.585859 1.000000 0.707071 0.595960 0.000000 0.595960 0.595960 0.010101 0.597031 0.595960 0.020202 0.598102 0.595960 0.030303 0.599174 0.595960 0.040404 0.600245 0.595960 0.050505 0.601316 0.595960 0.060606 0.602388 0.595960 0.070707 0.603459 0.595960 0.080808 0.604530 0.595960 0.090909 0.605601 0.595960 0.101010 0.606673 0.595960 0.111111 0.607744 0.595960 0.121212 0.608815 0.595960 0.131313 0.609887 0.595960 0.141414 0.610958 0.595960 0.151515 0.612029 0.595960 0.161616 0.613101 0.595960 0.171717 0.614172 0.595960 0.181818 0.615243 0.595960 0.191919 0.616315 0.595960 0.202020 0.617386 0.595960 0.212121 0.618457 0.595960 0.222222 0.619529 0.595960 0.232323 0.620600 0.595960 0.242424 0.621671 0.595960 0.252525 0.622743 0.595960 0.262626 0.623814 0.595960 0.272727 0.624885 0.595960 0.282828 0.625957 0.595960 0.292929 0.627028 0.595960 0.303030 0.628099 0.595960 0.313131 0.629170 0.595960 0.323232 0.630242 0.595960 0.333333 0.631313 0.595960 0.343434 0.632384 0.595960 0.353535 0.633456 0.595960 0.363636 0.634527 0.595960 0.373737 0.635598 0.595960 0.383838 0.636670 0.595960 0.393939 0.637741 0.595960 0.404040 0.638812 0.595960 0.414141 0.639884 0.595960 0.424242 0.640955 0.595960 0.434343 0.642026 0.595960 0.444444 0.643098 0.595960 0.454545 0.644169 0.595960 0.464646 0.645240 0.595960 0.474747 0.646312 0.595960 0.484848 0.647383 0.595960 0.494949 0.648454 0.595960 0.505051 0.649526 0.595960 0.515152 0.650597 0.595960 0.525253 0.651668 0.595960 0.535354 0.652740 0.595960 0.545455 0.653811 0.595960 0.555556 0.654882 0.595960 0.565657 0.655953 0.595960 0.575758 0.657025 0.595960 0.585859 0.658096 0.595960 0.595960 0.659167 0.595960 0.606061 0.660239 0.595960 0.616162 0.661310 0.595960 0.626263 0.662381 0.595960 0.636364 0.663453 0.595960 0.646465 0.664524 0.595960 0.656566 0.665595 0.595960 0.666667 0.666667 0.595960 0.676768 0.667738 0.595960 0.686869 0.668809 0.595960 0.696970 0.669881 0.595960 0.707071 0.670952 0.595960 0.717172 0.672023 0.595960 0.727273 0.673095 0.595960 0.737374 0.674166 0.595960 0.747475 0.675237 0.595960 0.757576 0.676309 0.595960 0.767677 0.677380 0.595960 0.777778 0.678451 0.595960 0.787879 0.679522 0.595960 0.797980 0.680594 0.595960 0.808081 0.681665 0.595960 0.818182 0.682736 0.595960 0.828283 0.683808 0.595960 0.838384 0.684879 0.595960 0.848485 0.685950 0.595960 0.858586 0.687022 0.595960 0.868687 0.688093 0.595960 0.878788 0.689164 0.595960 0.888889 0.690236 0.595960 0.898990 0.691307 0.595960 0.909091 0.692378 0.595960 0.919192 0.693450 0.595960 0.929293 0.694521 0.595960 0.939394 0.695592 0.595960 0.949495 0.696664 0.595960 0.959596 0.697735 0.595960 0.969697 0.698806 0.595960 0.979798 0.699878 0.595960 0.989899 0.700949 0.595960 1.000000 0.702020 0.606061 0.000000 0.606061 0.606061 0.010101 0.606979 0.606061 0.020202 0.607897 0.606061 0.030303 0.608815 0.606061 0.040404 0.609734 0.606061 0.050505 0.610652 0.606061 0.060606 0.611570 0.606061 0.070707 0.612489 0.606061 0.080808 0.613407 0.606061 0.090909 0.614325 0.606061 0.101010 0.615243 0.606061 0.111111 0.616162 0.606061 0.121212 0.617080 0.606061 0.131313 0.617998 0.606061 0.141414 0.618916 0.606061 0.151515 0.619835 0.606061 0.161616 0.620753 0.606061 0.171717 0.621671 0.606061 0.181818 0.622590 0.606061 0.191919 0.623508 0.606061 0.202020 0.624426 0.606061 0.212121 0.625344 0.606061 0.222222 0.626263 0.606061 0.232323 0.627181 0.606061 0.242424 0.628099 0.606061 0.252525 0.629017 0.606061 0.262626 0.629936 0.606061 0.272727 0.630854 0.606061 0.282828 0.631772 0.606061 0.292929 0.632691 0.606061 0.303030 0.633609 0.606061 0.313131 0.634527 0.606061 0.323232 0.635445 0.606061 0.333333 0.636364 0.606061 0.343434 0.637282 0.606061 0.353535 0.638200 0.606061 0.363636 0.639118 0.606061 0.373737 0.640037 0.606061 0.383838 0.640955 0.606061 0.393939 0.641873 0.606061 0.404040 0.642792 0.606061 0.414141 0.643710 0.606061 0.424242 0.644628 0.606061 0.434343 0.645546 0.606061 0.444444 0.646465 0.606061 0.454545 0.647383 0.606061 0.464646 0.648301 0.606061 0.474747 0.649219 0.606061 0.484848 0.650138 0.606061 0.494949 0.651056 0.606061 0.505051 0.651974 0.606061 0.515152 0.652893 0.606061 0.525253 0.653811 0.606061 0.535354 0.654729 0.606061 0.545455 0.655647 0.606061 0.555556 0.656566 0.606061 0.565657 0.657484 0.606061 0.575758 0.658402 0.606061 0.585859 0.659320 0.606061 0.595960 0.660239 0.606061 0.606061 0.661157 0.606061 0.616162 0.662075 0.606061 0.626263 0.662994 0.606061 0.636364 0.663912 0.606061 0.646465 0.664830 0.606061 0.656566 0.665748 0.606061 0.666667 0.666667 0.606061 0.676768 0.667585 0.606061 0.686869 0.668503 0.606061 0.696970 0.669421 0.606061 0.707071 0.670340 0.606061 0.717172 0.671258 0.606061 0.727273 0.672176 0.606061 0.737374 0.673095 0.606061 0.747475 0.674013 0.606061 0.757576 0.674931 0.606061 0.767677 0.675849 0.606061 0.777778 0.676768 0.606061 0.787879 0.677686 0.606061 0.797980 0.678604 0.606061 0.808081 0.679522 0.606061 0.818182 0.680441 0.606061 0.828283 0.681359 0.606061 0.838384 0.682277 0.606061 0.848485 0.683196 0.606061 0.858586 0.684114 0.606061 0.868687 0.685032 0.606061 0.878788 0.685950 0.606061 0.888889 0.686869 0.606061 0.898990 0.687787 0.606061 0.909091 0.688705 0.606061 0.919192 0.689624 0.606061 0.929293 0.690542 0.606061 0.939394 0.691460 0.606061 0.949495 0.692378 0.606061 0.959596 0.693297 0.606061 0.969697 0.694215 0.606061 0.979798 0.695133 0.606061 0.989899 0.696051 0.606061 1.000000 0.696970 0.616162 0.000000 0.616162 0.616162 0.010101 0.616927 0.616162 0.020202 0.617692 0.616162 0.030303 0.618457 0.616162 0.040404 0.619223 0.616162 0.050505 0.619988 0.616162 0.060606 0.620753 0.616162 0.070707 0.621518 0.616162 0.080808 0.622283 0.616162 0.090909 0.623049 0.616162 0.101010 0.623814 0.616162 0.111111 0.624579 0.616162 0.121212 0.625344 0.616162 0.131313 0.626110 0.616162 0.141414 0.626875 0.616162 0.151515 0.627640 0.616162 0.161616 0.628405 0.616162 0.171717 0.629170 0.616162 0.181818 0.629936 0.616162 0.191919 0.630701 0.616162 0.202020 0.631466 0.616162 0.212121 0.632231 0.616162 0.222222 0.632997 0.616162 0.232323 0.633762 0.616162 0.242424 0.634527 0.616162 0.252525 0.635292 0.616162 0.262626 0.636058 0.616162 0.272727 0.636823 0.616162 0.282828 0.637588 0.616162 0.292929 0.638353 0.616162 0.303030 0.639118 0.616162 0.313131 0.639884 0.616162 0.323232 0.640649 0.616162 0.333333 0.641414 0.616162 0.343434 0.642179 0.616162 0.353535 0.642945 0.616162 0.363636 0.643710 0.616162 0.373737 0.644475 0.616162 0.383838 0.645240 0.616162 0.393939 0.646006 0.616162 0.404040 0.646771 0.616162 0.414141 0.647536 0.616162 0.424242 0.648301 0.616162 0.434343 0.649066 0.616162 0.444444 0.649832 0.616162 0.454545 0.650597 0.616162 0.464646 0.651362 0.616162 0.474747 0.652127 0.616162 0.484848 0.652893 0.616162 0.494949 0.653658 0.616162 0.505051 0.654423 0.616162 0.515152 0.655188 0.616162 0.525253 0.655953 0.616162 0.535354 0.656719 0.616162 0.545455 0.657484 0.616162 0.555556 0.658249 0.616162 0.565657 0.659014 0.616162 0.575758 0.659780 0.616162 0.585859 0.660545 0.616162 0.595960 0.661310 0.616162 0.606061 0.662075 0.616162 0.616162 0.662841 0.616162 0.626263 0.663606 0.616162 0.636364 0.664371 0.616162 0.646465 0.665136 0.616162 0.656566 0.665901 0.616162 0.666667 0.666667 0.616162 0.676768 0.667432 0.616162 0.686869 0.668197 0.616162 0.696970 0.668962 0.616162 0.707071 0.669728 0.616162 0.717172 0.670493 0.616162 0.727273 0.671258 0.616162 0.737374 0.672023 0.616162 0.747475 0.672788 0.616162 0.757576 0.673554 0.616162 0.767677 0.674319 0.616162 0.777778 0.675084 0.616162 0.787879 0.675849 0.616162 0.797980 0.676615 0.616162 0.808081 0.677380 0.616162 0.818182 0.678145 0.616162 0.828283 0.678910 0.616162 0.838384 0.679676 0.616162 0.848485 0.680441 0.616162 0.858586 0.681206 0.616162 0.868687 0.681971 0.616162 0.878788 0.682736 0.616162 0.888889 0.683502 0.616162 0.898990 0.684267 0.616162 0.909091 0.685032 0.616162 0.919192 0.685797 0.616162 0.929293 0.686563 0.616162 0.939394 0.687328 0.616162 0.949495 0.688093 0.616162 0.959596 0.688858 0.616162 0.969697 0.689624 0.616162 0.979798 0.690389 0.616162 0.989899 0.691154 0.616162 1.000000 0.691919 0.626263 0.000000 0.626263 0.626263 0.010101 0.626875 0.626263 0.020202 0.627487 0.626263 0.030303 0.628099 0.626263 0.040404 0.628711 0.626263 0.050505 0.629324 0.626263 0.060606 0.629936 0.626263 0.070707 0.630548 0.626263 0.080808 0.631160 0.626263 0.090909 0.631772 0.626263 0.101010 0.632384 0.626263 0.111111 0.632997 0.626263 0.121212 0.633609 0.626263 0.131313 0.634221 0.626263 0.141414 0.634833 0.626263 0.151515 0.635445 0.626263 0.161616 0.636058 0.626263 0.171717 0.636670 0.626263 0.181818 0.637282 0.626263 0.191919 0.637894 0.626263 0.202020 0.638506 0.626263 0.212121 0.639118 0.626263 0.222222 0.639731 0.626263 0.232323 0.640343 0.626263 0.242424 0.640955 0.626263 0.252525 0.641567 0.626263 0.262626 0.642179 0.626263 0.272727 0.642792 0.626263 0.282828 0.643404 0.626263 0.292929 0.644016 0.626263 0.303030 0.644628 0.626263 0.313131 0.645240 0.626263 0.323232 0.645852 0.626263 0.333333 0.646465 0.626263 0.343434 0.647077 0.626263 0.353535 0.647689 0.626263 0.363636 0.648301 0.626263 0.373737 0.648913 0.626263 0.383838 0.649526 0.626263 0.393939 0.650138 0.626263 0.404040 0.650750 0.626263 0.414141 0.651362 0.626263 0.424242 0.651974 0.626263 0.434343 0.652586 0.626263 0.444444 0.653199 0.626263 0.454545 0.653811 0.626263 0.464646 0.654423 0.626263 0.474747 0.655035 0.626263 0.484848 0.655647 0.626263 0.494949 0.656260 0.626263 0.505051 0.656872 0.626263 0.515152 0.657484 0.626263 0.525253 0.658096 0.626263 0.535354 0.658708 0.626263 0.545455 0.659320 0.626263 0.555556 0.659933 0.626263 0.565657 0.660545 0.626263 0.575758 0.661157 0.626263 0.585859 0.661769 0.626263 0.595960 0.662381 0.626263 0.606061 0.662994 0.626263 0.616162 0.663606 0.626263 0.626263 0.664218 0.626263 0.636364 0.664830 0.626263 0.646465 0.665442 0.626263 0.656566 0.666054 0.626263 0.666667 0.666667 0.626263 0.676768 0.667279 0.626263 0.686869 0.667891 0.626263 0.696970 0.668503 0.626263 0.707071 0.669115 0.626263 0.717172 0.669728 0.626263 0.727273 0.670340 0.626263 0.737374 0.670952 0.626263 0.747475 0.671564 0.626263 0.757576 0.672176 0.626263 0.767677 0.672788 0.626263 0.777778 0.673401 0.626263 0.787879 0.674013 0.626263 0.797980 0.674625 0.626263 0.808081 0.675237 0.626263 0.818182 0.675849 0.626263 0.828283 0.676462 0.626263 0.838384 0.677074 0.626263 0.848485 0.677686 0.626263 0.858586 0.678298 0.626263 0.868687 0.678910 0.626263 0.878788 0.679522 0.626263 0.888889 0.680135 0.626263 0.898990 0.680747 0.626263 0.909091 0.681359 0.626263 0.919192 0.681971 0.626263 0.929293 0.682583 0.626263 0.939394 0.683196 0.626263 0.949495 0.683808 0.626263 0.959596 0.684420 0.626263 0.969697 0.685032 0.626263 0.979798 0.685644 0.626263 0.989899 0.686257 0.626263 1.000000 0.686869 0.636364 0.000000 0.636364 0.636364 0.010101 0.636823 0.636364 0.020202 0.637282 0.636364 0.030303 0.637741 0.636364 0.040404 0.638200 0.636364 0.050505 0.638659 0.636364 0.060606 0.639118 0.636364 0.070707 0.639578 0.636364 0.080808 0.640037 0.636364 0.090909 0.640496 0.636364 0.101010 0.640955 0.636364 0.111111 0.641414 0.636364 0.121212 0.641873 0.636364 0.131313 0.642332 0.636364 0.141414 0.642792 0.636364 0.151515 0.643251 0.636364 0.161616 0.643710 0.636364 0.171717 0.644169 0.636364 0.181818 0.644628 0.636364 0.191919 0.645087 0.636364 0.202020 0.645546 0.636364 0.212121 0.646006 0.636364 0.222222 0.646465 0.636364 0.232323 0.646924 0.636364 0.242424 0.647383 0.636364 0.252525 0.647842 0.636364 0.262626 0.648301 0.636364 0.272727 0.648760 0.636364 0.282828 0.649219 0.636364 0.292929 0.649679 0.636364 0.303030 0.650138 0.636364 0.313131 0.650597 0.636364 0.323232 0.651056 0.636364 0.333333 0.651515 0.636364 0.343434 0.651974 0.636364 0.353535 0.652433 0.636364 0.363636 0.652893 0.636364 0.373737 0.653352 0.636364 0.383838 0.653811 0.636364 0.393939 0.654270 0.636364 0.404040 0.654729 0.636364 0.414141 0.655188 0.636364 0.424242 0.655647 0.636364 0.434343 0.656107 0.636364 0.444444 0.656566 0.636364 0.454545 0.657025 0.636364 0.464646 0.657484 0.636364 0.474747 0.657943 0.636364 0.484848 0.658402 0.636364 0.494949 0.658861 0.636364 0.505051 0.659320 0.636364 0.515152 0.659780 0.636364 0.525253 0.660239 0.636364 0.535354 0.660698 0.636364 0.545455 0.661157 0.636364 0.555556 0.661616 0.636364 0.565657 0.662075 0.636364 0.575758 0.662534 0.636364 0.585859 0.662994 0.636364 0.595960 0.663453 0.636364 0.606061 0.663912 0.636364 0.616162 0.664371 0.636364 0.626263 0.664830 0.636364 0.636364 0.665289 0.636364 0.646465 0.665748 0.636364 0.656566 0.666208 0.636364 0.666667 0.666667 0.636364 0.676768 0.667126 0.636364 0.686869 0.667585 0.636364 0.696970 0.668044 0.636364 0.707071 0.668503 0.636364 0.717172 0.668962 0.636364 0.727273 0.669421 0.636364 0.737374 0.669881 0.636364 0.747475 0.670340 0.636364 0.757576 0.670799 0.636364 0.767677 0.671258 0.636364 0.777778 0.671717 0.636364 0.787879 0.672176 0.636364 0.797980 0.672635 0.636364 0.808081 0.673095 0.636364 0.818182 0.673554 0.636364 0.828283 0.674013 0.636364 0.838384 0.674472 0.636364 0.848485 0.674931 0.636364 0.858586 0.675390 0.636364 0.868687 0.675849 0.636364 0.878788 0.676309 0.636364 0.888889 0.676768 0.636364 0.898990 0.677227 0.636364 0.909091 0.677686 0.636364 0.919192 0.678145 0.636364 0.929293 0.678604 0.636364 0.939394 0.679063 0.636364 0.949495 0.679522 0.636364 0.959596 0.679982 0.636364 0.969697 0.680441 0.636364 0.979798 0.680900 0.636364 0.989899 0.681359 0.636364 1.000000 0.681818 0.646465 0.000000 0.646465 0.646465 0.010101 0.646771 0.646465 0.020202 0.647077 0.646465 0.030303 0.647383 0.646465 0.040404 0.647689 0.646465 0.050505 0.647995 0.646465 0.060606 0.648301 0.646465 0.070707 0.648607 0.646465 0.080808 0.648913 0.646465 0.090909 0.649219 0.646465 0.101010 0.649526 0.646465 0.111111 0.649832 0.646465 0.121212 0.650138 0.646465 0.131313 0.650444 0.646465 0.141414 0.650750 0.646465 0.151515 0.651056 0.646465 0.161616 0.651362 0.646465 0.171717 0.651668 0.646465 0.181818 0.651974 0.646465 0.191919 0.652280 0.646465 0.202020 0.652586 0.646465 0.212121 0.652893 0.646465 0.222222 0.653199 0.646465 0.232323 0.653505 0.646465 0.242424 0.653811 0.646465 0.252525 0.654117 0.646465 0.262626 0.654423 0.646465 0.272727 0.654729 0.646465 0.282828 0.655035 0.646465 0.292929 0.655341 0.646465 0.303030 0.655647 0.646465 0.313131 0.655953 0.646465 0.323232 0.656260 0.646465 0.333333 0.656566 0.646465 0.343434 0.656872 0.646465 0.353535 0.657178 0.646465 0.363636 0.657484 0.646465 0.373737 0.657790 0.646465 0.383838 0.658096 0.646465 0.393939 0.658402 0.646465 0.404040 0.658708 0.646465 0.414141 0.659014 0.646465 0.424242 0.659320 0.646465 0.434343 0.659627 0.646465 0.444444 0.659933 0.646465 0.454545 0.660239 0.646465 0.464646 0.660545 0.646465 0.474747 0.660851 0.646465 0.484848 0.661157 0.646465 0.494949 0.661463 0.646465 0.505051 0.661769 0.646465 0.515152 0.662075 0.646465 0.525253 0.662381 0.646465 0.535354 0.662687 0.646465 0.545455 0.662994 0.646465 0.555556 0.663300 0.646465 0.565657 0.663606 0.646465 0.575758 0.663912 0.646465 0.585859 0.664218 0.646465 0.595960 0.664524 0.646465 0.606061 0.664830 0.646465 0.616162 0.665136 0.646465 0.626263 0.665442 0.646465 0.636364 0.665748 0.646465 0.646465 0.666054 0.646465 0.656566 0.666361 0.646465 0.666667 0.666667 0.646465 0.676768 0.666973 0.646465 0.686869 0.667279 0.646465 0.696970 0.667585 0.646465 0.707071 0.667891 0.646465 0.717172 0.668197 0.646465 0.727273 0.668503 0.646465 0.737374 0.668809 0.646465 0.747475 0.669115 0.646465 0.757576 0.669421 0.646465 0.767677 0.669728 0.646465 0.777778 0.670034 0.646465 0.787879 0.670340 0.646465 0.797980 0.670646 0.646465 0.808081 0.670952 0.646465 0.818182 0.671258 0.646465 0.828283 0.671564 0.646465 0.838384 0.671870 0.646465 0.848485 0.672176 0.646465 0.858586 0.672482 0.646465 0.868687 0.672788 0.646465 0.878788 0.673095 0.646465 0.888889 0.673401 0.646465 0.898990 0.673707 0.646465 0.909091 0.674013 0.646465 0.919192 0.674319 0.646465 0.929293 0.674625 0.646465 0.939394 0.674931 0.646465 0.949495 0.675237 0.646465 0.959596 0.675543 0.646465 0.969697 0.675849 0.646465 0.979798 0.676155 0.646465 0.989899 0.676462 0.646465 1.000000 0.676768 0.656566 0.000000 0.656566 0.656566 0.010101 0.656719 0.656566 0.020202 0.656872 0.656566 0.030303 0.657025 0.656566 0.040404 0.657178 0.656566 0.050505 0.657331 0.656566 0.060606 0.657484 0.656566 0.070707 0.657637 0.656566 0.080808 0.657790 0.656566 0.090909 0.657943 0.656566 0.101010 0.658096 0.656566 0.111111 0.658249 0.656566 0.121212 0.658402 0.656566 0.131313 0.658555 0.656566 0.141414 0.658708 0.656566 0.151515 0.658861 0.656566 0.161616 0.659014 0.656566 0.171717 0.659167 0.656566 0.181818 0.659320 0.656566 0.191919 0.659474 0.656566 0.202020 0.659627 0.656566 0.212121 0.659780 0.656566 0.222222 0.659933 0.656566 0.232323 0.660086 0.656566 0.242424 0.660239 0.656566 0.252525 0.660392 0.656566 0.262626 0.660545 0.656566 0.272727 0.660698 0.656566 0.282828 0.660851 0.656566 0.292929 0.661004 0.656566 0.303030 0.661157 0.656566 0.313131 0.661310 0.656566 0.323232 0.661463 0.656566 0.333333 0.661616 0.656566 0.343434 0.661769 0.656566 0.353535 0.661922 0.656566 0.363636 0.662075 0.656566 0.373737 0.662228 0.656566 0.383838 0.662381 0.656566 0.393939 0.662534 0.656566 0.404040 0.662687 0.656566 0.414141 0.662841 0.656566 0.424242 0.662994 0.656566 0.434343 0.663147 0.656566 0.444444 0.663300 0.656566 0.454545 0.663453 0.656566 0.464646 0.663606 0.656566 0.474747 0.663759 0.656566 0.484848 0.663912 0.656566 0.494949 0.664065 0.656566 0.505051 0.664218 0.656566 0.515152 0.664371 0.656566 0.525253 0.664524 0.656566 0.535354 0.664677 0.656566 0.545455 0.664830 0.656566 0.555556 0.664983 0.656566 0.565657 0.665136 0.656566 0.575758 0.665289 0.656566 0.585859 0.665442 0.656566 0.595960 0.665595 0.656566 0.606061 0.665748 0.656566 0.616162 0.665901 0.656566 0.626263 0.666054 0.656566 0.636364 0.666208 0.656566 0.646465 0.666361 0.656566 0.656566 0.666514 0.656566 0.666667 0.666667 0.656566 0.676768 0.666820 0.656566 0.686869 0.666973 0.656566 0.696970 0.667126 0.656566 0.707071 0.667279 0.656566 0.717172 0.667432 0.656566 0.727273 0.667585 0.656566 0.737374 0.667738 0.656566 0.747475 0.667891 0.656566 0.757576 0.668044 0.656566 0.767677 0.668197 0.656566 0.777778 0.668350 0.656566 0.787879 0.668503 0.656566 0.797980 0.668656 0.656566 0.808081 0.668809 0.656566 0.818182 0.668962 0.656566 0.828283 0.669115 0.656566 0.838384 0.669268 0.656566 0.848485 0.669421 0.656566 0.858586 0.669575 0.656566 0.868687 0.669728 0.656566 0.878788 0.669881 0.656566 0.888889 0.670034 0.656566 0.898990 0.670187 0.656566 0.909091 0.670340 0.656566 0.919192 0.670493 0.656566 0.929293 0.670646 0.656566 0.939394 0.670799 0.656566 0.949495 0.670952 0.656566 0.959596 0.671105 0.656566 0.969697 0.671258 0.656566 0.979798 0.671411 0.656566 0.989899 0.671564 0.656566 1.000000 0.671717 0.666667 0.000000 0.666667 0.666667 0.010101 0.666667 0.666667 0.020202 0.666667 0.666667 0.030303 0.666667 0.666667 0.040404 0.666667 0.666667 0.050505 0.666667 0.666667 0.060606 0.666667 0.666667 0.070707 0.666667 0.666667 0.080808 0.666667 0.666667 0.090909 0.666667 0.666667 0.101010 0.666667 0.666667 0.111111 0.666667 0.666667 0.121212 0.666667 0.666667 0.131313 0.666667 0.666667 0.141414 0.666667 0.666667 0.151515 0.666667 0.666667 0.161616 0.666667 0.666667 0.171717 0.666667 0.666667 0.181818 0.666667 0.666667 0.191919 0.666667 0.666667 0.202020 0.666667 0.666667 0.212121 0.666667 0.666667 0.222222 0.666667 0.666667 0.232323 0.666667 0.666667 0.242424 0.666667 0.666667 0.252525 0.666667 0.666667 0.262626 0.666667 0.666667 0.272727 0.666667 0.666667 0.282828 0.666667 0.666667 0.292929 0.666667 0.666667 0.303030 0.666667 0.666667 0.313131 0.666667 0.666667 0.323232 0.666667 0.666667 0.333333 0.666667 0.666667 0.343434 0.666667 0.666667 0.353535 0.666667 0.666667 0.363636 0.666667 0.666667 0.373737 0.666667 0.666667 0.383838 0.666667 0.666667 0.393939 0.666667 0.666667 0.404040 0.666667 0.666667 0.414141 0.666667 0.666667 0.424242 0.666667 0.666667 0.434343 0.666667 0.666667 0.444444 0.666667 0.666667 0.454545 0.666667 0.666667 0.464646 0.666667 0.666667 0.474747 0.666667 0.666667 0.484848 0.666667 0.666667 0.494949 0.666667 0.666667 0.505051 0.666667 0.666667 0.515152 0.666667 0.666667 0.525253 0.666667 0.666667 0.535354 0.666667 0.666667 0.545455 0.666667 0.666667 0.555556 0.666667 0.666667 0.565657 0.666667 0.666667 0.575758 0.666667 0.666667 0.585859 0.666667 0.666667 0.595960 0.666667 0.666667 0.606061 0.666667 0.666667 0.616162 0.666667 0.666667 0.626263 0.666667 0.666667 0.636364 0.666667 0.666667 0.646465 0.666667 0.666667 0.656566 0.666667 0.666667 0.666667 0.666667 0.666667 0.676768 0.666667 0.666667 0.686869 0.666667 0.666667 0.696970 0.666667 0.666667 0.707071 0.666667 0.666667 0.717172 0.666667 0.666667 0.727273 0.666667 0.666667 0.737374 0.666667 0.666667 0.747475 0.666667 0.666667 0.757576 0.666667 0.666667 0.767677 0.666667 0.666667 0.777778 0.666667 0.666667 0.787879 0.666667 0.666667 0.797980 0.666667 0.666667 0.808081 0.666667 0.666667 0.818182 0.666667 0.666667 0.828283 0.666667 0.666667 0.838384 0.666667 0.666667 0.848485 0.666667 0.666667 0.858586 0.666667 0.666667 0.868687 0.666667 0.666667 0.878788 0.666667 0.666667 0.888889 0.666667 0.666667 0.898990 0.666667 0.666667 0.909091 0.666667 0.666667 0.919192 0.666667 0.666667 0.929293 0.666667 0.666667 0.939394 0.666667 0.666667 0.949495 0.666667 0.666667 0.959596 0.666667 0.666667 0.969697 0.666667 0.666667 0.979798 0.666667 0.666667 0.989899 0.666667 0.666667 1.000000 0.666667 0.676768 0.000000 0.676768 0.676768 0.010101 0.676615 0.676768 0.020202 0.676462 0.676768 0.030303 0.676309 0.676768 0.040404 0.676155 0.676768 0.050505 0.676002 0.676768 0.060606 0.675849 0.676768 0.070707 0.675696 0.676768 0.080808 0.675543 0.676768 0.090909 0.675390 0.676768 0.101010 0.675237 0.676768 0.111111 0.675084 0.676768 0.121212 0.674931 0.676768 0.131313 0.674778 0.676768 0.141414 0.674625 0.676768 0.151515 0.674472 0.676768 0.161616 0.674319 0.676768 0.171717 0.674166 0.676768 0.181818 0.674013 0.676768 0.191919 0.673860 0.676768 0.202020 0.673707 0.676768 0.212121 0.673554 0.676768 0.222222 0.673401 0.676768 0.232323 0.673248 0.676768 0.242424 0.673095 0.676768 0.252525 0.672942 0.676768 0.262626 0.672788 0.676768 0.272727 0.672635 0.676768 0.282828 0.672482 0.676768 0.292929 0.672329 0.676768 0.303030 0.672176 0.676768 0.313131 0.672023 0.676768 0.323232 0.671870 0.676768 0.333333 0.671717 0.676768 0.343434 0.671564 0.676768 0.353535 0.671411 0.676768 0.363636 0.671258 0.676768 0.373737 0.671105 0.676768 0.383838 0.670952 0.676768 0.393939 0.670799 0.676768 0.404040 0.670646 0.676768 0.414141 0.670493 0.676768 0.424242 0.670340 0.676768 0.434343 0.670187 0.676768 0.444444 0.670034 0.676768 0.454545 0.669881 0.676768 0.464646 0.669728 0.676768 0.474747 0.669575 0.676768 0.484848 0.669421 0.676768 0.494949 0.669268 0.676768 0.505051 0.669115 0.676768 0.515152 0.668962 0.676768 0.525253 0.668809 0.676768 0.535354 0.668656 0.676768 0.545455 0.668503 0.676768 0.555556 0.668350 0.676768 0.565657 0.668197 0.676768 0.575758 0.668044 0.676768 0.585859 0.667891 0.676768 0.595960 0.667738 0.676768 0.606061 0.667585 0.676768 0.616162 0.667432 0.676768 0.626263 0.667279 0.676768 0.636364 0.667126 0.676768 0.646465 0.666973 0.676768 0.656566 0.666820 0.676768 0.666667 0.666667 0.676768 0.676768 0.666514 0.676768 0.686869 0.666361 0.676768 0.696970 0.666208 0.676768 0.707071 0.666054 0.676768 0.717172 0.665901 0.676768 0.727273 0.665748 0.676768 0.737374 0.665595 0.676768 0.747475 0.665442 0.676768 0.757576 0.665289 0.676768 0.767677 0.665136 0.676768 0.777778 0.664983 0.676768 0.787879 0.664830 0.676768 0.797980 0.664677 0.676768 0.808081 0.664524 0.676768 0.818182 0.664371 0.676768 0.828283 0.664218 0.676768 0.838384 0.664065 0.676768 0.848485 0.663912 0.676768 0.858586 0.663759 0.676768 0.868687 0.663606 0.676768 0.878788 0.663453 0.676768 0.888889 0.663300 0.676768 0.898990 0.663147 0.676768 0.909091 0.662994 0.676768 0.919192 0.662841 0.676768 0.929293 0.662687 0.676768 0.939394 0.662534 0.676768 0.949495 0.662381 0.676768 0.959596 0.662228 0.676768 0.969697 0.662075 0.676768 0.979798 0.661922 0.676768 0.989899 0.661769 0.676768 1.000000 0.661616 0.686869 0.000000 0.686869 0.686869 0.010101 0.686563 0.686869 0.020202 0.686257 0.686869 0.030303 0.685950 0.686869 0.040404 0.685644 0.686869 0.050505 0.685338 0.686869 0.060606 0.685032 0.686869 0.070707 0.684726 0.686869 0.080808 0.684420 0.686869 0.090909 0.684114 0.686869 0.101010 0.683808 0.686869 0.111111 0.683502 0.686869 0.121212 0.683196 0.686869 0.131313 0.682890 0.686869 0.141414 0.682583 0.686869 0.151515 0.682277 0.686869 0.161616 0.681971 0.686869 0.171717 0.681665 0.686869 0.181818 0.681359 0.686869 0.191919 0.681053 0.686869 0.202020 0.680747 0.686869 0.212121 0.680441 0.686869 0.222222 0.680135 0.686869 0.232323 0.679829 0.686869 0.242424 0.679522 0.686869 0.252525 0.679216 0.686869 0.262626 0.678910 0.686869 0.272727 0.678604 0.686869 0.282828 0.678298 0.686869 0.292929 0.677992 0.686869 0.303030 0.677686 0.686869 0.313131 0.677380 0.686869 0.323232 0.677074 0.686869 0.333333 0.676768 0.686869 0.343434 0.676462 0.686869 0.353535 0.676155 0.686869 0.363636 0.675849 0.686869 0.373737 0.675543 0.686869 0.383838 0.675237 0.686869 0.393939 0.674931 0.686869 0.404040 0.674625 0.686869 0.414141 0.674319 0.686869 0.424242 0.674013 0.686869 0.434343 0.673707 0.686869 0.444444 0.673401 0.686869 0.454545 0.673095 0.686869 0.464646 0.672788 0.686869 0.474747 0.672482 0.686869 0.484848 0.672176 0.686869 0.494949 0.671870 0.686869 0.505051 0.671564 0.686869 0.515152 0.671258 0.686869 0.525253 0.670952 0.686869 0.535354 0.670646 0.686869 0.545455 0.670340 0.686869 0.555556 0.670034 0.686869 0.565657 0.669728 0.686869 0.575758 0.669421 0.686869 0.585859 0.669115 0.686869 0.595960 0.668809 0.686869 0.606061 0.668503 0.686869 0.616162 0.668197 0.686869 0.626263 0.667891 0.686869 0.636364 0.667585 0.686869 0.646465 0.667279 0.686869 0.656566 0.666973 0.686869 0.666667 0.666667 0.686869 0.676768 0.666361 0.686869 0.686869 0.666054 0.686869 0.696970 0.665748 0.686869 0.707071 0.665442 0.686869 0.717172 0.665136 0.686869 0.727273 0.664830 0.686869 0.737374 0.664524 0.686869 0.747475 0.664218 0.686869 0.757576 0.663912 0.686869 0.767677 0.663606 0.686869 0.777778 0.663300 0.686869 0.787879 0.662994 0.686869 0.797980 0.662687 0.686869 0.808081 0.662381 0.686869 0.818182 0.662075 0.686869 0.828283 0.661769 0.686869 0.838384 0.661463 0.686869 0.848485 0.661157 0.686869 0.858586 0.660851 0.686869 0.868687 0.660545 0.686869 0.878788 0.660239 0.686869 0.888889 0.659933 0.686869 0.898990 0.659627 0.686869 0.909091 0.659320 0.686869 0.919192 0.659014 0.686869 0.929293 0.658708 0.686869 0.939394 0.658402 0.686869 0.949495 0.658096 0.686869 0.959596 0.657790 0.686869 0.969697 0.657484 0.686869 0.979798 0.657178 0.686869 0.989899 0.656872 0.686869 1.000000 0.656566 0.696970 0.000000 0.696970 0.696970 0.010101 0.696511 0.696970 0.020202 0.696051 0.696970 0.030303 0.695592 0.696970 0.040404 0.695133 0.696970 0.050505 0.694674 0.696970 0.060606 0.694215 0.696970 0.070707 0.693756 0.696970 0.080808 0.693297 0.696970 0.090909 0.692837 0.696970 0.101010 0.692378 0.696970 0.111111 0.691919 0.696970 0.121212 0.691460 0.696970 0.131313 0.691001 0.696970 0.141414 0.690542 0.696970 0.151515 0.690083 0.696970 0.161616 0.689624 0.696970 0.171717 0.689164 0.696970 0.181818 0.688705 0.696970 0.191919 0.688246 0.696970 0.202020 0.687787 0.696970 0.212121 0.687328 0.696970 0.222222 0.686869 0.696970 0.232323 0.686410 0.696970 0.242424 0.685950 0.696970 0.252525 0.685491 0.696970 0.262626 0.685032 0.696970 0.272727 0.684573 0.696970 0.282828 0.684114 0.696970 0.292929 0.683655 0.696970 0.303030 0.683196 0.696970 0.313131 0.682736 0.696970 0.323232 0.682277 0.696970 0.333333 0.681818 0.696970 0.343434 0.681359 0.696970 0.353535 0.680900 0.696970 0.363636 0.680441 0.696970 0.373737 0.679982 0.696970 0.383838 0.679522 0.696970 0.393939 0.679063 0.696970 0.404040 0.678604 0.696970 0.414141 0.678145 0.696970 0.424242 0.677686 0.696970 0.434343 0.677227 0.696970 0.444444 0.676768 0.696970 0.454545 0.676309 0.696970 0.464646 0.675849 0.696970 0.474747 0.675390 0.696970 0.484848 0.674931 0.696970 0.494949 0.674472 0.696970 0.505051 0.674013 0.696970 0.515152 0.673554 0.696970 0.525253 0.673095 0.696970 0.535354 0.672635 0.696970 0.545455 0.672176 0.696970 0.555556 0.671717 0.696970 0.565657 0.671258 0.696970 0.575758 0.670799 0.696970 0.585859 0.670340 0.696970 0.595960 0.669881 0.696970 0.606061 0.669421 0.696970 0.616162 0.668962 0.696970 0.626263 0.668503 0.696970 0.636364 0.668044 0.696970 0.646465 0.667585 0.696970 0.656566 0.667126 0.696970 0.666667 0.666667 0.696970 0.676768 0.666208 0.696970 0.686869 0.665748 0.696970 0.696970 0.665289 0.696970 0.707071 0.664830 0.696970 0.717172 0.664371 0.696970 0.727273 0.663912 0.696970 0.737374 0.663453 0.696970 0.747475 0.662994 0.696970 0.757576 0.662534 0.696970 0.767677 0.662075 0.696970 0.777778 0.661616 0.696970 0.787879 0.661157 0.696970 0.797980 0.660698 0.696970 0.808081 0.660239 0.696970 0.818182 0.659780 0.696970 0.828283 0.659320 0.696970 0.838384 0.658861 0.696970 0.848485 0.658402 0.696970 0.858586 0.657943 0.696970 0.868687 0.657484 0.696970 0.878788 0.657025 0.696970 0.888889 0.656566 0.696970 0.898990 0.656107 0.696970 0.909091 0.655647 0.696970 0.919192 0.655188 0.696970 0.929293 0.654729 0.696970 0.939394 0.654270 0.696970 0.949495 0.653811 0.696970 0.959596 0.653352 0.696970 0.969697 0.652893 0.696970 0.979798 0.652433 0.696970 0.989899 0.651974 0.696970 1.000000 0.651515 0.707071 0.000000 0.707071 0.707071 0.010101 0.706459 0.707071 0.020202 0.705846 0.707071 0.030303 0.705234 0.707071 0.040404 0.704622 0.707071 0.050505 0.704010 0.707071 0.060606 0.703398 0.707071 0.070707 0.702785 0.707071 0.080808 0.702173 0.707071 0.090909 0.701561 0.707071 0.101010 0.700949 0.707071 0.111111 0.700337 0.707071 0.121212 0.699725 0.707071 0.131313 0.699112 0.707071 0.141414 0.698500 0.707071 0.151515 0.697888 0.707071 0.161616 0.697276 0.707071 0.171717 0.696664 0.707071 0.181818 0.696051 0.707071 0.191919 0.695439 0.707071 0.202020 0.694827 0.707071 0.212121 0.694215 0.707071 0.222222 0.693603 0.707071 0.232323 0.692991 0.707071 0.242424 0.692378 0.707071 0.252525 0.691766 0.707071 0.262626 0.691154 0.707071 0.272727 0.690542 0.707071 0.282828 0.689930 0.707071 0.292929 0.689317 0.707071 0.303030 0.688705 0.707071 0.313131 0.688093 0.707071 0.323232 0.687481 0.707071 0.333333 0.686869 0.707071 0.343434 0.686257 0.707071 0.353535 0.685644 0.707071 0.363636 0.685032 0.707071 0.373737 0.684420 0.707071 0.383838 0.683808 0.707071 0.393939 0.683196 0.707071 0.404040 0.682583 0.707071 0.414141 0.681971 0.707071 0.424242 0.681359 0.707071 0.434343 0.680747 0.707071 0.444444 0.680135 0.707071 0.454545 0.679522 0.707071 0.464646 0.678910 0.707071 0.474747 0.678298 0.707071 0.484848 0.677686 0.707071 0.494949 0.677074 0.707071 0.505051 0.676462 0.707071 0.515152 0.675849 0.707071 0.525253 0.675237 0.707071 0.535354 0.674625 0.707071 0.545455 0.674013 0.707071 0.555556 0.673401 0.707071 0.565657 0.672788 0.707071 0.575758 0.672176 0.707071 0.585859 0.671564 0.707071 0.595960 0.670952 0.707071 0.606061 0.670340 0.707071 0.616162 0.669728 0.707071 0.626263 0.669115 0.707071 0.636364 0.668503 0.707071 0.646465 0.667891 0.707071 0.656566 0.667279 0.707071 0.666667 0.666667 0.707071 0.676768 0.666054 0.707071 0.686869 0.665442 0.707071 0.696970 0.664830 0.707071 0.707071 0.664218 0.707071 0.717172 0.663606 0.707071 0.727273 0.662994 0.707071 0.737374 0.662381 0.707071 0.747475 0.661769 0.707071 0.757576 0.661157 0.707071 0.767677 0.660545 0.707071 0.777778 0.659933 0.707071 0.787879 0.659320 0.707071 0.797980 0.658708 0.707071 0.808081 0.658096 0.707071 0.818182 0.657484 0.707071 0.828283 0.656872 0.707071 0.838384 0.656260 0.707071 0.848485 0.655647 0.707071 0.858586 0.655035 0.707071 0.868687 0.654423 0.707071 0.878788 0.653811 0.707071 0.888889 0.653199 0.707071 0.898990 0.652586 0.707071 0.909091 0.651974 0.707071 0.919192 0.651362 0.707071 0.929293 0.650750 0.707071 0.939394 0.650138 0.707071 0.949495 0.649526 0.707071 0.959596 0.648913 0.707071 0.969697 0.648301 0.707071 0.979798 0.647689 0.707071 0.989899 0.647077 0.707071 1.000000 0.646465 0.717172 0.000000 0.717172 0.717172 0.010101 0.716406 0.717172 0.020202 0.715641 0.717172 0.030303 0.714876 0.717172 0.040404 0.714111 0.717172 0.050505 0.713346 0.717172 0.060606 0.712580 0.717172 0.070707 0.711815 0.717172 0.080808 0.711050 0.717172 0.090909 0.710285 0.717172 0.101010 0.709519 0.717172 0.111111 0.708754 0.717172 0.121212 0.707989 0.717172 0.131313 0.707224 0.717172 0.141414 0.706459 0.717172 0.151515 0.705693 0.717172 0.161616 0.704928 0.717172 0.171717 0.704163 0.717172 0.181818 0.703398 0.717172 0.191919 0.702632 0.717172 0.202020 0.701867 0.717172 0.212121 0.701102 0.717172 0.222222 0.700337 0.717172 0.232323 0.699571 0.717172 0.242424 0.698806 0.717172 0.252525 0.698041 0.717172 0.262626 0.697276 0.717172 0.272727 0.696511 0.717172 0.282828 0.695745 0.717172 0.292929 0.694980 0.717172 0.303030 0.694215 0.717172 0.313131 0.693450 0.717172 0.323232 0.692684 0.717172 0.333333 0.691919 0.717172 0.343434 0.691154 0.717172 0.353535 0.690389 0.717172 0.363636 0.689624 0.717172 0.373737 0.688858 0.717172 0.383838 0.688093 0.717172 0.393939 0.687328 0.717172 0.404040 0.686563 0.717172 0.414141 0.685797 0.717172 0.424242 0.685032 0.717172 0.434343 0.684267 0.717172 0.444444 0.683502 0.717172 0.454545 0.682736 0.717172 0.464646 0.681971 0.717172 0.474747 0.681206 0.717172 0.484848 0.680441 0.717172 0.494949 0.679676 0.717172 0.505051 0.678910 0.717172 0.515152 0.678145 0.717172 0.525253 0.677380 0.717172 0.535354 0.676615 0.717172 0.545455 0.675849 0.717172 0.555556 0.675084 0.717172 0.565657 0.674319 0.717172 0.575758 0.673554 0.717172 0.585859 0.672788 0.717172 0.595960 0.672023 0.717172 0.606061 0.671258 0.717172 0.616162 0.670493 0.717172 0.626263 0.669728 0.717172 0.636364 0.668962 0.717172 0.646465 0.668197 0.717172 0.656566 0.667432 0.717172 0.666667 0.666667 0.717172 0.676768 0.665901 0.717172 0.686869 0.665136 0.717172 0.696970 0.664371 0.717172 0.707071 0.663606 0.717172 0.717172 0.662841 0.717172 0.727273 0.662075 0.717172 0.737374 0.661310 0.717172 0.747475 0.660545 0.717172 0.757576 0.659780 0.717172 0.767677 0.659014 0.717172 0.777778 0.658249 0.717172 0.787879 0.657484 0.717172 0.797980 0.656719 0.717172 0.808081 0.655953 0.717172 0.818182 0.655188 0.717172 0.828283 0.654423 0.717172 0.838384 0.653658 0.717172 0.848485 0.652893 0.717172 0.858586 0.652127 0.717172 0.868687 0.651362 0.717172 0.878788 0.650597 0.717172 0.888889 0.649832 0.717172 0.898990 0.649066 0.717172 0.909091 0.648301 0.717172 0.919192 0.647536 0.717172 0.929293 0.646771 0.717172 0.939394 0.646006 0.717172 0.949495 0.645240 0.717172 0.959596 0.644475 0.717172 0.969697 0.643710 0.717172 0.979798 0.642945 0.717172 0.989899 0.642179 0.717172 1.000000 0.641414 0.727273 0.000000 0.727273 0.727273 0.010101 0.726354 0.727273 0.020202 0.725436 0.727273 0.030303 0.724518 0.727273 0.040404 0.723600 0.727273 0.050505 0.722681 0.727273 0.060606 0.721763 0.727273 0.070707 0.720845 0.727273 0.080808 0.719927 0.727273 0.090909 0.719008 0.727273 0.101010 0.718090 0.727273 0.111111 0.717172 0.727273 0.121212 0.716253 0.727273 0.131313 0.715335 0.727273 0.141414 0.714417 0.727273 0.151515 0.713499 0.727273 0.161616 0.712580 0.727273 0.171717 0.711662 0.727273 0.181818 0.710744 0.727273 0.191919 0.709826 0.727273 0.202020 0.708907 0.727273 0.212121 0.707989 0.727273 0.222222 0.707071 0.727273 0.232323 0.706152 0.727273 0.242424 0.705234 0.727273 0.252525 0.704316 0.727273 0.262626 0.703398 0.727273 0.272727 0.702479 0.727273 0.282828 0.701561 0.727273 0.292929 0.700643 0.727273 0.303030 0.699725 0.727273 0.313131 0.698806 0.727273 0.323232 0.697888 0.727273 0.333333 0.696970 0.727273 0.343434 0.696051 0.727273 0.353535 0.695133 0.727273 0.363636 0.694215 0.727273 0.373737 0.693297 0.727273 0.383838 0.692378 0.727273 0.393939 0.691460 0.727273 0.404040 0.690542 0.727273 0.414141 0.689624 0.727273 0.424242 0.688705 0.727273 0.434343 0.687787 0.727273 0.444444 0.686869 0.727273 0.454545 0.685950 0.727273 0.464646 0.685032 0.727273 0.474747 0.684114 0.727273 0.484848 0.683196 0.727273 0.494949 0.682277 0.727273 0.505051 0.681359 0.727273 0.515152 0.680441 0.727273 0.525253 0.679522 0.727273 0.535354 0.678604 0.727273 0.545455 0.677686 0.727273 0.555556 0.676768 0.727273 0.565657 0.675849 0.727273 0.575758 0.674931 0.727273 0.585859 0.674013 0.727273 0.595960 0.673095 0.727273 0.606061 0.672176 0.727273 0.616162 0.671258 0.727273 0.626263 0.670340 0.727273 0.636364 0.669421 0.727273 0.646465 0.668503 0.727273 0.656566 0.667585 0.727273 0.666667 0.666667 0.727273 0.676768 0.665748 0.727273 0.686869 0.664830 0.727273 0.696970 0.663912 0.727273 0.707071 0.662994 0.727273 0.717172 0.662075 0.727273 0.727273 0.661157 0.727273 0.737374 0.660239 0.727273 0.747475 0.659320 0.727273 0.757576 0.658402 0.727273 0.767677 0.657484 0.727273 0.777778 0.656566 0.727273 0.787879 0.655647 0.727273 0.797980 0.654729 0.727273 0.808081 0.653811 0.727273 0.818182 0.652893 0.727273 0.828283 0.651974 0.727273 0.838384 0.651056 0.727273 0.848485 0.650138 0.727273 0.858586 0.649219 0.727273 0.868687 0.648301 0.727273 0.878788 0.647383 0.727273 0.888889 0.646465 0.727273 0.898990 0.645546 0.727273 0.909091 0.644628 0.727273 0.919192 0.643710 0.727273 0.929293 0.642792 0.727273 0.939394 0.641873 0.727273 0.949495 0.640955 0.727273 0.959596 0.640037 0.727273 0.969697 0.639118 0.727273 0.979798 0.638200 0.727273 0.989899 0.637282 0.727273 1.000000 0.636364 0.737374 0.000000 0.737374 0.737374 0.010101 0.736302 0.737374 0.020202 0.735231 0.737374 0.030303 0.734160 0.737374 0.040404 0.733088 0.737374 0.050505 0.732017 0.737374 0.060606 0.730946 0.737374 0.070707 0.729875 0.737374 0.080808 0.728803 0.737374 0.090909 0.727732 0.737374 0.101010 0.726661 0.737374 0.111111 0.725589 0.737374 0.121212 0.724518 0.737374 0.131313 0.723447 0.737374 0.141414 0.722375 0.737374 0.151515 0.721304 0.737374 0.161616 0.720233 0.737374 0.171717 0.719161 0.737374 0.181818 0.718090 0.737374 0.191919 0.717019 0.737374 0.202020 0.715947 0.737374 0.212121 0.714876 0.737374 0.222222 0.713805 0.737374 0.232323 0.712733 0.737374 0.242424 0.711662 0.737374 0.252525 0.710591 0.737374 0.262626 0.709519 0.737374 0.272727 0.708448 0.737374 0.282828 0.707377 0.737374 0.292929 0.706305 0.737374 0.303030 0.705234 0.737374 0.313131 0.704163 0.737374 0.323232 0.703092 0.737374 0.333333 0.702020 0.737374 0.343434 0.700949 0.737374 0.353535 0.699878 0.737374 0.363636 0.698806 0.737374 0.373737 0.697735 0.737374 0.383838 0.696664 0.737374 0.393939 0.695592 0.737374 0.404040 0.694521 0.737374 0.414141 0.693450 0.737374 0.424242 0.692378 0.737374 0.434343 0.691307 0.737374 0.444444 0.690236 0.737374 0.454545 0.689164 0.737374 0.464646 0.688093 0.737374 0.474747 0.687022 0.737374 0.484848 0.685950 0.737374 0.494949 0.684879 0.737374 0.505051 0.683808 0.737374 0.515152 0.682736 0.737374 0.525253 0.681665 0.737374 0.535354 0.680594 0.737374 0.545455 0.679522 0.737374 0.555556 0.678451 0.737374 0.565657 0.677380 0.737374 0.575758 0.676309 0.737374 0.585859 0.675237 0.737374 0.595960 0.674166 0.737374 0.606061 0.673095 0.737374 0.616162 0.672023 0.737374 0.626263 0.670952 0.737374 0.636364 0.669881 0.737374 0.646465 0.668809 0.737374 0.656566 0.667738 0.737374 0.666667 0.666667 0.737374 0.676768 0.665595 0.737374 0.686869 0.664524 0.737374 0.696970 0.663453 0.737374 0.707071 0.662381 0.737374 0.717172 0.661310 0.737374 0.727273 0.660239 0.737374 0.737374 0.659167 0.737374 0.747475 0.658096 0.737374 0.757576 0.657025 0.737374 0.767677 0.655953 0.737374 0.777778 0.654882 0.737374 0.787879 0.653811 0.737374 0.797980 0.652740 0.737374 0.808081 0.651668 0.737374 0.818182 0.650597 0.737374 0.828283 0.649526 0.737374 0.838384 0.648454 0.737374 0.848485 0.647383 0.737374 0.858586 0.646312 0.737374 0.868687 0.645240 0.737374 0.878788 0.644169 0.737374 0.888889 0.643098 0.737374 0.898990 0.642026 0.737374 0.909091 0.640955 0.737374 0.919192 0.639884 0.737374 0.929293 0.638812 0.737374 0.939394 0.637741 0.737374 0.949495 0.636670 0.737374 0.959596 0.635598 0.737374 0.969697 0.634527 0.737374 0.979798 0.633456 0.737374 0.989899 0.632384 0.737374 1.000000 0.631313 0.747475 0.000000 0.747475 0.747475 0.010101 0.746250 0.747475 0.020202 0.745026 0.747475 0.030303 0.743802 0.747475 0.040404 0.742577 0.747475 0.050505 0.741353 0.747475 0.060606 0.740129 0.747475 0.070707 0.738904 0.747475 0.080808 0.737680 0.747475 0.090909 0.736455 0.747475 0.101010 0.735231 0.747475 0.111111 0.734007 0.747475 0.121212 0.732782 0.747475 0.131313 0.731558 0.747475 0.141414 0.730334 0.747475 0.151515 0.729109 0.747475 0.161616 0.727885 0.747475 0.171717 0.726661 0.747475 0.181818 0.725436 0.747475 0.191919 0.724212 0.747475 0.202020 0.722987 0.747475 0.212121 0.721763 0.747475 0.222222 0.720539 0.747475 0.232323 0.719314 0.747475 0.242424 0.718090 0.747475 0.252525 0.716866 0.747475 0.262626 0.715641 0.747475 0.272727 0.714417 0.747475 0.282828 0.713193 0.747475 0.292929 0.711968 0.747475 0.303030 0.710744 0.747475 0.313131 0.709519 0.747475 0.323232 0.708295 0.747475 0.333333 0.707071 0.747475 0.343434 0.705846 0.747475 0.353535 0.704622 0.747475 0.363636 0.703398 0.747475 0.373737 0.702173 0.747475 0.383838 0.700949 0.747475 0.393939 0.699725 0.747475 0.404040 0.698500 0.747475 0.414141 0.697276 0.747475 0.424242 0.696051 0.747475 0.434343 0.694827 0.747475 0.444444 0.693603 0.747475 0.454545 0.692378 0.747475 0.464646 0.691154 0.747475 0.474747 0.689930 0.747475 0.484848 0.688705 0.747475 0.494949 0.687481 0.747475 0.505051 0.686257 0.747475 0.515152 0.685032 0.747475 0.525253 0.683808 0.747475 0.535354 0.682583 0.747475 0.545455 0.681359 0.747475 0.555556 0.680135 0.747475 0.565657 0.678910 0.747475 0.575758 0.677686 0.747475 0.585859 0.676462 0.747475 0.595960 0.675237 0.747475 0.606061 0.674013 0.747475 0.616162 0.672788 0.747475 0.626263 0.671564 0.747475 0.636364 0.670340 0.747475 0.646465 0.669115 0.747475 0.656566 0.667891 0.747475 0.666667 0.666667 0.747475 0.676768 0.665442 0.747475 0.686869 0.664218 0.747475 0.696970 0.662994 0.747475 0.707071 0.661769 0.747475 0.717172 0.660545 0.747475 0.727273 0.659320 0.747475 0.737374 0.658096 0.747475 0.747475 0.656872 0.747475 0.757576 0.655647 0.747475 0.767677 0.654423 0.747475 0.777778 0.653199 0.747475 0.787879 0.651974 0.747475 0.797980 0.650750 0.747475 0.808081 0.649526 0.747475 0.818182 0.648301 0.747475 0.828283 0.647077 0.747475 0.838384 0.645852 0.747475 0.848485 0.644628 0.747475 0.858586 0.643404 0.747475 0.868687 0.642179 0.747475 0.878788 0.640955 0.747475 0.888889 0.639731 0.747475 0.898990 0.638506 0.747475 0.909091 0.637282 0.747475 0.919192 0.636058 0.747475 0.929293 0.634833 0.747475 0.939394 0.633609 0.747475 0.949495 0.632384 0.747475 0.959596 0.631160 0.747475 0.969697 0.629936 0.747475 0.979798 0.628711 0.747475 0.989899 0.627487 0.747475 1.000000 0.626263 0.757576 0.000000 0.757576 0.757576 0.010101 0.756198 0.757576 0.020202 0.754821 0.757576 0.030303 0.753444 0.757576 0.040404 0.752066 0.757576 0.050505 0.750689 0.757576 0.060606 0.749311 0.757576 0.070707 0.747934 0.757576 0.080808 0.746556 0.757576 0.090909 0.745179 0.757576 0.101010 0.743802 0.757576 0.111111 0.742424 0.757576 0.121212 0.741047 0.757576 0.131313 0.739669 0.757576 0.141414 0.738292 0.757576 0.151515 0.736915 0.757576 0.161616 0.735537 0.757576 0.171717 0.734160 0.757576 0.181818 0.732782 0.757576 0.191919 0.731405 0.757576 0.202020 0.730028 0.757576 0.212121 0.728650 0.757576 0.222222 0.727273 0.757576 0.232323 0.725895 0.757576 0.242424 0.724518 0.757576 0.252525 0.723140 0.757576 0.262626 0.721763 0.757576 0.272727 0.720386 0.757576 0.282828 0.719008 0.757576 0.292929 0.717631 0.757576 0.303030 0.716253 0.757576 0.313131 0.714876 0.757576 0.323232 0.713499 0.757576 0.333333 0.712121 0.757576 0.343434 0.710744 0.757576 0.353535 0.709366 0.757576 0.363636 0.707989 0.757576 0.373737 0.706612 0.757576 0.383838 0.705234 0.757576 0.393939 0.703857 0.757576 0.404040 0.702479 0.757576 0.414141 0.701102 0.757576 0.424242 0.699725 0.757576 0.434343 0.698347 0.757576 0.444444 0.696970 0.757576 0.454545 0.695592 0.757576 0.464646 0.694215 0.757576 0.474747 0.692837 0.757576 0.484848 0.691460 0.757576 0.494949 0.690083 0.757576 0.505051 0.688705 0.757576 0.515152 0.687328 0.757576 0.525253 0.685950 0.757576 0.535354 0.684573 0.757576 0.545455 0.683196 0.757576 0.555556 0.681818 0.757576 0.565657 0.680441 0.757576 0.575758 0.679063 0.757576 0.585859 0.677686 0.757576 0.595960 0.676309 0.757576 0.606061 0.674931 0.757576 0.616162 0.673554 0.757576 0.626263 0.672176 0.757576 0.636364 0.670799 0.757576 0.646465 0.669421 0.757576 0.656566 0.668044 0.757576 0.666667 0.666667 0.757576 0.676768 0.665289 0.757576 0.686869 0.663912 0.757576 0.696970 0.662534 0.757576 0.707071 0.661157 0.757576 0.717172 0.659780 0.757576 0.727273 0.658402 0.757576 0.737374 0.657025 0.757576 0.747475 0.655647 0.757576 0.757576 0.654270 0.757576 0.767677 0.652893 0.757576 0.777778 0.651515 0.757576 0.787879 0.650138 0.757576 0.797980 0.648760 0.757576 0.808081 0.647383 0.757576 0.818182 0.646006 0.757576 0.828283 0.644628 0.757576 0.838384 0.643251 0.757576 0.848485 0.641873 0.757576 0.858586 0.640496 0.757576 0.868687 0.639118 0.757576 0.878788 0.637741 0.757576 0.888889 0.636364 0.757576 0.898990 0.634986 0.757576 0.909091 0.633609 0.757576 0.919192 0.632231 0.757576 0.929293 0.630854 0.757576 0.939394 0.629477 0.757576 0.949495 0.628099 0.757576 0.959596 0.626722 0.757576 0.969697 0.625344 0.757576 0.979798 0.623967 0.757576 0.989899 0.622590 0.757576 1.000000 0.621212 0.767677 0.000000 0.767677 0.767677 0.010101 0.766146 0.767677 0.020202 0.764616 0.767677 0.030303 0.763085 0.767677 0.040404 0.761555 0.767677 0.050505 0.760024 0.767677 0.060606 0.758494 0.767677 0.070707 0.756964 0.767677 0.080808 0.755433 0.767677 0.090909 0.753903 0.767677 0.101010 0.752372 0.767677 0.111111 0.750842 0.767677 0.121212 0.749311 0.767677 0.131313 0.747781 0.767677 0.141414 0.746250 0.767677 0.151515 0.744720 0.767677 0.161616 0.743189 0.767677 0.171717 0.741659 0.767677 0.181818 0.740129 0.767677 0.191919 0.738598 0.767677 0.202020 0.737068 0.767677 0.212121 0.735537 0.767677 0.222222 0.734007 0.767677 0.232323 0.732476 0.767677 0.242424 0.730946 0.767677 0.252525 0.729415 0.767677 0.262626 0.727885 0.767677 0.272727 0.726354 0.767677 0.282828 0.724824 0.767677 0.292929 0.723294 0.767677 0.303030 0.721763 0.767677 0.313131 0.720233 0.767677 0.323232 0.718702 0.767677 0.333333 0.717172 0.767677 0.343434 0.715641 0.767677 0.353535 0.714111 0.767677 0.363636 0.712580 0.767677 0.373737 0.711050 0.767677 0.383838 0.709519 0.767677 0.393939 0.707989 0.767677 0.404040 0.706459 0.767677 0.414141 0.704928 0.767677 0.424242 0.703398 0.767677 0.434343 0.701867 0.767677 0.444444 0.700337 0.767677 0.454545 0.698806 0.767677 0.464646 0.697276 0.767677 0.474747 0.695745 0.767677 0.484848 0.694215 0.767677 0.494949 0.692684 0.767677 0.505051 0.691154 0.767677 0.515152 0.689624 0.767677 0.525253 0.688093 0.767677 0.535354 0.686563 0.767677 0.545455 0.685032 0.767677 0.555556 0.683502 0.767677 0.565657 0.681971 0.767677 0.575758 0.680441 0.767677 0.585859 0.678910 0.767677 0.595960 0.677380 0.767677 0.606061 0.675849 0.767677 0.616162 0.674319 0.767677 0.626263 0.672788 0.767677 0.636364 0.671258 0.767677 0.646465 0.669728 0.767677 0.656566 0.668197 0.767677 0.666667 0.666667 0.767677 0.676768 0.665136 0.767677 0.686869 0.663606 0.767677 0.696970 0.662075 0.767677 0.707071 0.660545 0.767677 0.717172 0.659014 0.767677 0.727273 0.657484 0.767677 0.737374 0.655953 0.767677 0.747475 0.654423 0.767677 0.757576 0.652893 0.767677 0.767677 0.651362 0.767677 0.777778 0.649832 0.767677 0.787879 0.648301 0.767677 0.797980 0.646771 0.767677 0.808081 0.645240 0.767677 0.818182 0.643710 0.767677 0.828283 0.642179 0.767677 0.838384 0.640649 0.767677 0.848485 0.639118 0.767677 0.858586 0.637588 0.767677 0.868687 0.636058 0.767677 0.878788 0.634527 0.767677 0.888889 0.632997 0.767677 0.898990 0.631466 0.767677 0.909091 0.629936 0.767677 0.919192 0.628405 0.767677 0.929293 0.626875 0.767677 0.939394 0.625344 0.767677 0.949495 0.623814 0.767677 0.959596 0.622283 0.767677 0.969697 0.620753 0.767677 0.979798 0.619223 0.767677 0.989899 0.617692 0.767677 1.000000 0.616162 0.777778 0.000000 0.777778 0.777778 0.010101 0.776094 0.777778 0.020202 0.774411 0.777778 0.030303 0.772727 0.777778 0.040404 0.771044 0.777778 0.050505 0.769360 0.777778 0.060606 0.767677 0.777778 0.070707 0.765993 0.777778 0.080808 0.764310 0.777778 0.090909 0.762626 0.777778 0.101010 0.760943 0.777778 0.111111 0.759259 0.777778 0.121212 0.757576 0.777778 0.131313 0.755892 0.777778 0.141414 0.754209 0.777778 0.151515 0.752525 0.777778 0.161616 0.750842 0.777778 0.171717 0.749158 0.777778 0.181818 0.747475 0.777778 0.191919 0.745791 0.777778 0.202020 0.744108 0.777778 0.212121 0.742424 0.777778 0.222222 0.740741 0.777778 0.232323 0.739057 0.777778 0.242424 0.737374 0.777778 0.252525 0.735690 0.777778 0.262626 0.734007 0.777778 0.272727 0.732323 0.777778 0.282828 0.730640 0.777778 0.292929 0.728956 0.777778 0.303030 0.727273 0.777778 0.313131 0.725589 0.777778 0.323232 0.723906 0.777778 0.333333 0.722222 0.777778 0.343434 0.720539 0.777778 0.353535 0.718855 0.777778 0.363636 0.717172 0.777778 0.373737 0.715488 0.777778 0.383838 0.713805 0.777778 0.393939 0.712121 0.777778 0.404040 0.710438 0.777778 0.414141 0.708754 0.777778 0.424242 0.707071 0.777778 0.434343 0.705387 0.777778 0.444444 0.703704 0.777778 0.454545 0.702020 0.777778 0.464646 0.700337 0.777778 0.474747 0.698653 0.777778 0.484848 0.696970 0.777778 0.494949 0.695286 0.777778 0.505051 0.693603 0.777778 0.515152 0.691919 0.777778 0.525253 0.690236 0.777778 0.535354 0.688552 0.777778 0.545455 0.686869 0.777778 0.555556 0.685185 0.777778 0.565657 0.683502 0.777778 0.575758 0.681818 0.777778 0.585859 0.680135 0.777778 0.595960 0.678451 0.777778 0.606061 0.676768 0.777778 0.616162 0.675084 0.777778 0.626263 0.673401 0.777778 0.636364 0.671717 0.777778 0.646465 0.670034 0.777778 0.656566 0.668350 0.777778 0.666667 0.666667 0.777778 0.676768 0.664983 0.777778 0.686869 0.663300 0.777778 0.696970 0.661616 0.777778 0.707071 0.659933 0.777778 0.717172 0.658249 0.777778 0.727273 0.656566 0.777778 0.737374 0.654882 0.777778 0.747475 0.653199 0.777778 0.757576 0.651515 0.777778 0.767677 0.649832 0.777778 0.777778 0.648148 0.777778 0.787879 0.646465 0.777778 0.797980 0.644781 0.777778 0.808081 0.643098 0.777778 0.818182 0.641414 0.777778 0.828283 0.639731 0.777778 0.838384 0.638047 0.777778 0.848485 0.636364 0.777778 0.858586 0.634680 0.777778 0.868687 0.632997 0.777778 0.878788 0.631313 0.777778 0.888889 0.629630 0.777778 0.898990 0.627946 0.777778 0.909091 0.626263 0.777778 0.919192 0.624579 0.777778 0.929293 0.622896 0.777778 0.939394 0.621212 0.777778 0.949495 0.619529 0.777778 0.959596 0.617845 0.777778 0.969697 0.616162 0.777778 0.979798 0.614478 0.777778 0.989899 0.612795 0.777778 1.000000 0.611111 0.787879 0.000000 0.787879 0.787879 0.010101 0.786042 0.787879 0.020202 0.784206 0.787879 0.030303 0.782369 0.787879 0.040404 0.780533 0.787879 0.050505 0.778696 0.787879 0.060606 0.776860 0.787879 0.070707 0.775023 0.787879 0.080808 0.773186 0.787879 0.090909 0.771350 0.787879 0.101010 0.769513 0.787879 0.111111 0.767677 0.787879 0.121212 0.765840 0.787879 0.131313 0.764004 0.787879 0.141414 0.762167 0.787879 0.151515 0.760331 0.787879 0.161616 0.758494 0.787879 0.171717 0.756657 0.787879 0.181818 0.754821 0.787879 0.191919 0.752984 0.787879 0.202020 0.751148 0.787879 0.212121 0.749311 0.787879 0.222222 0.747475 0.787879 0.232323 0.745638 0.787879 0.242424 0.743802 0.787879 0.252525 0.741965 0.787879 0.262626 0.740129 0.787879 0.272727 0.738292 0.787879 0.282828 0.736455 0.787879 0.292929 0.734619 0.787879 0.303030 0.732782 0.787879 0.313131 0.730946 0.787879 0.323232 0.729109 0.787879 0.333333 0.727273 0.787879 0.343434 0.725436 0.787879 0.353535 0.723600 0.787879 0.363636 0.721763 0.787879 0.373737 0.719927 0.787879 0.383838 0.718090 0.787879 0.393939 0.716253 0.787879 0.404040 0.714417 0.787879 0.414141 0.712580 0.787879 0.424242 0.710744 0.787879 0.434343 0.708907 0.787879 0.444444 0.707071 0.787879 0.454545 0.705234 0.787879 0.464646 0.703398 0.787879 0.474747 0.701561 0.787879 0.484848 0.699725 0.787879 0.494949 0.697888 0.787879 0.505051 0.696051 0.787879 0.515152 0.694215 0.787879 0.525253 0.692378 0.787879 0.535354 0.690542 0.787879 0.545455 0.688705 0.787879 0.555556 0.686869 0.787879 0.565657 0.685032 0.787879 0.575758 0.683196 0.787879 0.585859 0.681359 0.787879 0.595960 0.679522 0.787879 0.606061 0.677686 0.787879 0.616162 0.675849 0.787879 0.626263 0.674013 0.787879 0.636364 0.672176 0.787879 0.646465 0.670340 0.787879 0.656566 0.668503 0.787879 0.666667 0.666667 0.787879 0.676768 0.664830 0.787879 0.686869 0.662994 0.787879 0.696970 0.661157 0.787879 0.707071 0.659320 0.787879 0.717172 0.657484 0.787879 0.727273 0.655647 0.787879 0.737374 0.653811 0.787879 0.747475 0.651974 0.787879 0.757576 0.650138 0.787879 0.767677 0.648301 0.787879 0.777778 0.646465 0.787879 0.787879 0.644628 0.787879 0.797980 0.642792 0.787879 0.808081 0.640955 0.787879 0.818182 0.639118 0.787879 0.828283 0.637282 0.787879 0.838384 0.635445 0.787879 0.848485 0.633609 0.787879 0.858586 0.631772 0.787879 0.868687 0.629936 0.787879 0.878788 0.628099 0.787879 0.888889 0.626263 0.787879 0.898990 0.624426 0.787879 0.909091 0.622590 0.787879 0.919192 0.620753 0.787879 0.929293 0.618916 0.787879 0.939394 0.617080 0.787879 0.949495 0.615243 0.787879 0.959596 0.613407 0.787879 0.969697 0.611570 0.787879 0.979798 0.609734 0.787879 0.989899 0.607897 0.787879 1.000000 0.606061 0.797980 0.000000 0.797980 0.797980 0.010101 0.795990 0.797980 0.020202 0.794001 0.797980 0.030303 0.792011 0.797980 0.040404 0.790021 0.797980 0.050505 0.788032 0.797980 0.060606 0.786042 0.797980 0.070707 0.784053 0.797980 0.080808 0.782063 0.797980 0.090909 0.780073 0.797980 0.101010 0.778084 0.797980 0.111111 0.776094 0.797980 0.121212 0.774105 0.797980 0.131313 0.772115 0.797980 0.141414 0.770125 0.797980 0.151515 0.768136 0.797980 0.161616 0.766146 0.797980 0.171717 0.764157 0.797980 0.181818 0.762167 0.797980 0.191919 0.760178 0.797980 0.202020 0.758188 0.797980 0.212121 0.756198 0.797980 0.222222 0.754209 0.797980 0.232323 0.752219 0.797980 0.242424 0.750230 0.797980 0.252525 0.748240 0.797980 0.262626 0.746250 0.797980 0.272727 0.744261 0.797980 0.282828 0.742271 0.797980 0.292929 0.740282 0.797980 0.303030 0.738292 0.797980 0.313131 0.736302 0.797980 0.323232 0.734313 0.797980 0.333333 0.732323 0.797980 0.343434 0.730334 0.797980 0.353535 0.728344 0.797980 0.363636 0.726354 0.797980 0.373737 0.724365 0.797980 0.383838 0.722375 0.797980 0.393939 0.720386 0.797980 0.404040 0.718396 0.797980 0.414141 0.716406 0.797980 0.424242 0.714417 0.797980 0.434343 0.712427 0.797980 0.444444 0.710438 0.797980 0.454545 0.708448 0.797980 0.464646 0.706459 0.797980 0.474747 0.704469 0.797980 0.484848 0.702479 0.797980 0.494949 0.700490 0.797980 0.505051 0.698500 0.797980 0.515152 0.696511 0.797980 0.525253 0.694521 0.797980 0.535354 0.692531 0.797980 0.545455 0.690542 0.797980 0.555556 0.688552 0.797980 0.565657 0.686563 0.797980 0.575758 0.684573 0.797980 0.585859 0.682583 0.797980 0.595960 0.680594 0.797980 0.606061 0.678604 0.797980 0.616162 0.676615 0.797980 0.626263 0.674625 0.797980 0.636364 0.672635 0.797980 0.646465 0.670646 0.797980 0.656566 0.668656 0.797980 0.666667 0.666667 0.797980 0.676768 0.664677 0.797980 0.686869 0.662687 0.797980 0.696970 0.660698 0.797980 0.707071 0.658708 0.797980 0.717172 0.656719 0.797980 0.727273 0.654729 0.797980 0.737374 0.652740 0.797980 0.747475 0.650750 0.797980 0.757576 0.648760 0.797980 0.767677 0.646771 0.797980 0.777778 0.644781 0.797980 0.787879 0.642792 0.797980 0.797980 0.640802 0.797980 0.808081 0.638812 0.797980 0.818182 0.636823 0.797980 0.828283 0.634833 0.797980 0.838384 0.632844 0.797980 0.848485 0.630854 0.797980 0.858586 0.628864 0.797980 0.868687 0.626875 0.797980 0.878788 0.624885 0.797980 0.888889 0.622896 0.797980 0.898990 0.620906 0.797980 0.909091 0.618916 0.797980 0.919192 0.616927 0.797980 0.929293 0.614937 0.797980 0.939394 0.612948 0.797980 0.949495 0.610958 0.797980 0.959596 0.608968 0.797980 0.969697 0.606979 0.797980 0.979798 0.604989 0.797980 0.989899 0.603000 0.797980 1.000000 0.601010 0.808081 0.000000 0.808081 0.808081 0.010101 0.805938 0.808081 0.020202 0.803796 0.808081 0.030303 0.801653 0.808081 0.040404 0.799510 0.808081 0.050505 0.797368 0.808081 0.060606 0.795225 0.808081 0.070707 0.793082 0.808081 0.080808 0.790940 0.808081 0.090909 0.788797 0.808081 0.101010 0.786654 0.808081 0.111111 0.784512 0.808081 0.121212 0.782369 0.808081 0.131313 0.780227 0.808081 0.141414 0.778084 0.808081 0.151515 0.775941 0.808081 0.161616 0.773799 0.808081 0.171717 0.771656 0.808081 0.181818 0.769513 0.808081 0.191919 0.767371 0.808081 0.202020 0.765228 0.808081 0.212121 0.763085 0.808081 0.222222 0.760943 0.808081 0.232323 0.758800 0.808081 0.242424 0.756657 0.808081 0.252525 0.754515 0.808081 0.262626 0.752372 0.808081 0.272727 0.750230 0.808081 0.282828 0.748087 0.808081 0.292929 0.745944 0.808081 0.303030 0.743802 0.808081 0.313131 0.741659 0.808081 0.323232 0.739516 0.808081 0.333333 0.737374 0.808081 0.343434 0.735231 0.808081 0.353535 0.733088 0.808081 0.363636 0.730946 0.808081 0.373737 0.728803 0.808081 0.383838 0.726661 0.808081 0.393939 0.724518 0.808081 0.404040 0.722375 0.808081 0.414141 0.720233 0.808081 0.424242 0.718090 0.808081 0.434343 0.715947 0.808081 0.444444 0.713805 0.808081 0.454545 0.711662 0.808081 0.464646 0.709519 0.808081 0.474747 0.707377 0.808081 0.484848 0.705234 0.808081 0.494949 0.703092 0.808081 0.505051 0.700949 0.808081 0.515152 0.698806 0.808081 0.525253 0.696664 0.808081 0.535354 0.694521 0.808081 0.545455 0.692378 0.808081 0.555556 0.690236 0.808081 0.565657 0.688093 0.808081 0.575758 0.685950 0.808081 0.585859 0.683808 0.808081 0.595960 0.681665 0.808081 0.606061 0.679522 0.808081 0.616162 0.677380 0.808081 0.626263 0.675237 0.808081 0.636364 0.673095 0.808081 0.646465 0.670952 0.808081 0.656566 0.668809 0.808081 0.666667 0.666667 0.808081 0.676768 0.664524 0.808081 0.686869 0.662381 0.808081 0.696970 0.660239 0.808081 0.707071 0.658096 0.808081 0.717172 0.655953 0.808081 0.727273 0.653811 0.808081 0.737374 0.651668 0.808081 0.747475 0.649526 0.808081 0.757576 0.647383 0.808081 0.767677 0.645240 0.808081 0.777778 0.643098 0.808081 0.787879 0.640955 0.808081 0.797980 0.638812 0.808081 0.808081 0.636670 0.808081 0.818182 0.634527 0.808081 0.828283 0.632384 0.808081 0.838384 0.630242 0.808081 0.848485 0.628099 0.808081 0.858586 0.625957 0.808081 0.868687 0.623814 0.808081 0.878788 0.621671 0.808081 0.888889 0.619529 0.808081 0.898990 0.617386 0.808081 0.909091 0.615243 0.808081 0.919192 0.613101 0.808081 0.929293 0.610958 0.808081 0.939394 0.608815 0.808081 0.949495 0.606673 0.808081 0.959596 0.604530 0.808081 0.969697 0.602388 0.808081 0.979798 0.600245 0.808081 0.989899 0.598102 0.808081 1.000000 0.595960 0.818182 0.000000 0.818182 0.818182 0.010101 0.815886 0.818182 0.020202 0.813590 0.818182 0.030303 0.811295 0.818182 0.040404 0.808999 0.818182 0.050505 0.806703 0.818182 0.060606 0.804408 0.818182 0.070707 0.802112 0.818182 0.080808 0.799816 0.818182 0.090909 0.797521 0.818182 0.101010 0.795225 0.818182 0.111111 0.792929 0.818182 0.121212 0.790634 0.818182 0.131313 0.788338 0.818182 0.141414 0.786042 0.818182 0.151515 0.783747 0.818182 0.161616 0.781451 0.818182 0.171717 0.779155 0.818182 0.181818 0.776860 0.818182 0.191919 0.774564 0.818182 0.202020 0.772268 0.818182 0.212121 0.769972 0.818182 0.222222 0.767677 0.818182 0.232323 0.765381 0.818182 0.242424 0.763085 0.818182 0.252525 0.760790 0.818182 0.262626 0.758494 0.818182 0.272727 0.756198 0.818182 0.282828 0.753903 0.818182 0.292929 0.751607 0.818182 0.303030 0.749311 0.818182 0.313131 0.747016 0.818182 0.323232 0.744720 0.818182 0.333333 0.742424 0.818182 0.343434 0.740129 0.818182 0.353535 0.737833 0.818182 0.363636 0.735537 0.818182 0.373737 0.733242 0.818182 0.383838 0.730946 0.818182 0.393939 0.728650 0.818182 0.404040 0.726354 0.818182 0.414141 0.724059 0.818182 0.424242 0.721763 0.818182 0.434343 0.719467 0.818182 0.444444 0.717172 0.818182 0.454545 0.714876 0.818182 0.464646 0.712580 0.818182 0.474747 0.710285 0.818182 0.484848 0.707989 0.818182 0.494949 0.705693 0.818182 0.505051 0.703398 0.818182 0.515152 0.701102 0.818182 0.525253 0.698806 0.818182 0.535354 0.696511 0.818182 0.545455 0.694215 0.818182 0.555556 0.691919 0.818182 0.565657 0.689624 0.818182 0.575758 0.687328 0.818182 0.585859 0.685032 0.818182 0.595960 0.682736 0.818182 0.606061 0.680441 0.818182 0.616162 0.678145 0.818182 0.626263 0.675849 0.818182 0.636364 0.673554 0.818182 0.646465 0.671258 0.818182 0.656566 0.668962 0.818182 0.666667 0.666667 0.818182 0.676768 0.664371 0.818182 0.686869 0.662075 0.818182 0.696970 0.659780 0.818182 0.707071 0.657484 0.818182 0.717172 0.655188 0.818182 0.727273 0.652893 0.818182 0.737374 0.650597 0.818182 0.747475 0.648301 0.818182 0.757576 0.646006 0.818182 0.767677 0.643710 0.818182 0.777778 0.641414 0.818182 0.787879 0.639118 0.818182 0.797980 0.636823 0.818182 0.808081 0.634527 0.818182 0.818182 0.632231 0.818182 0.828283 0.629936 0.818182 0.838384 0.627640 0.818182 0.848485 0.625344 0.818182 0.858586 0.623049 0.818182 0.868687 0.620753 0.818182 0.878788 0.618457 0.818182 0.888889 0.616162 0.818182 0.898990 0.613866 0.818182 0.909091 0.611570 0.818182 0.919192 0.609275 0.818182 0.929293 0.606979 0.818182 0.939394 0.604683 0.818182 0.949495 0.602388 0.818182 0.959596 0.600092 0.818182 0.969697 0.597796 0.818182 0.979798 0.595500 0.818182 0.989899 0.593205 0.818182 1.000000 0.590909 0.828283 0.000000 0.828283 0.828283 0.010101 0.825834 0.828283 0.020202 0.823385 0.828283 0.030303 0.820937 0.828283 0.040404 0.818488 0.828283 0.050505 0.816039 0.828283 0.060606 0.813590 0.828283 0.070707 0.811142 0.828283 0.080808 0.808693 0.828283 0.090909 0.806244 0.828283 0.101010 0.803796 0.828283 0.111111 0.801347 0.828283 0.121212 0.798898 0.828283 0.131313 0.796449 0.828283 0.141414 0.794001 0.828283 0.151515 0.791552 0.828283 0.161616 0.789103 0.828283 0.171717 0.786654 0.828283 0.181818 0.784206 0.828283 0.191919 0.781757 0.828283 0.202020 0.779308 0.828283 0.212121 0.776860 0.828283 0.222222 0.774411 0.828283 0.232323 0.771962 0.828283 0.242424 0.769513 0.828283 0.252525 0.767065 0.828283 0.262626 0.764616 0.828283 0.272727 0.762167 0.828283 0.282828 0.759718 0.828283 0.292929 0.757270 0.828283 0.303030 0.754821 0.828283 0.313131 0.752372 0.828283 0.323232 0.749923 0.828283 0.333333 0.747475 0.828283 0.343434 0.745026 0.828283 0.353535 0.742577 0.828283 0.363636 0.740129 0.828283 0.373737 0.737680 0.828283 0.383838 0.735231 0.828283 0.393939 0.732782 0.828283 0.404040 0.730334 0.828283 0.414141 0.727885 0.828283 0.424242 0.725436 0.828283 0.434343 0.722987 0.828283 0.444444 0.720539 0.828283 0.454545 0.718090 0.828283 0.464646 0.715641 0.828283 0.474747 0.713193 0.828283 0.484848 0.710744 0.828283 0.494949 0.708295 0.828283 0.505051 0.705846 0.828283 0.515152 0.703398 0.828283 0.525253 0.700949 0.828283 0.535354 0.698500 0.828283 0.545455 0.696051 0.828283 0.555556 0.693603 0.828283 0.565657 0.691154 0.828283 0.575758 0.688705 0.828283 0.585859 0.686257 0.828283 0.595960 0.683808 0.828283 0.606061 0.681359 0.828283 0.616162 0.678910 0.828283 0.626263 0.676462 0.828283 0.636364 0.674013 0.828283 0.646465 0.671564 0.828283 0.656566 0.669115 0.828283 0.666667 0.666667 0.828283 0.676768 0.664218 0.828283 0.686869 0.661769 0.828283 0.696970 0.659320 0.828283 0.707071 0.656872 0.828283 0.717172 0.654423 0.828283 0.727273 0.651974 0.828283 0.737374 0.649526 0.828283 0.747475 0.647077 0.828283 0.757576 0.644628 0.828283 0.767677 0.642179 0.828283 0.777778 0.639731 0.828283 0.787879 0.637282 0.828283 0.797980 0.634833 0.828283 0.808081 0.632384 0.828283 0.818182 0.629936 0.828283 0.828283 0.627487 0.828283 0.838384 0.625038 0.828283 0.848485 0.622590 0.828283 0.858586 0.620141 0.828283 0.868687 0.617692 0.828283 0.878788 0.615243 0.828283 0.888889 0.612795 0.828283 0.898990 0.610346 0.828283 0.909091 0.607897 0.828283 0.919192 0.605448 0.828283 0.929293 0.603000 0.828283 0.939394 0.600551 0.828283 0.949495 0.598102 0.828283 0.959596 0.595654 0.828283 0.969697 0.593205 0.828283 0.979798 0.590756 0.828283 0.989899 0.588307 0.828283 1.000000 0.585859 0.838384 0.000000 0.838384 0.838384 0.010101 0.835782 0.838384 0.020202 0.833180 0.838384 0.030303 0.830579 0.838384 0.040404 0.827977 0.838384 0.050505 0.825375 0.838384 0.060606 0.822773 0.838384 0.070707 0.820171 0.838384 0.080808 0.817570 0.838384 0.090909 0.814968 0.838384 0.101010 0.812366 0.838384 0.111111 0.809764 0.838384 0.121212 0.807163 0.838384 0.131313 0.804561 0.838384 0.141414 0.801959 0.838384 0.151515 0.799357 0.838384 0.161616 0.796755 0.838384 0.171717 0.794154 0.838384 0.181818 0.791552 0.838384 0.191919 0.788950 0.838384 0.202020 0.786348 0.838384 0.212121 0.783747 0.838384 0.222222 0.781145 0.838384 0.232323 0.778543 0.838384 0.242424 0.775941 0.838384 0.252525 0.773339 0.838384 0.262626 0.770738 0.838384 0.272727 0.768136 0.838384 0.282828 0.765534 0.838384 0.292929 0.762932 0.838384 0.303030 0.760331 0.838384 0.313131 0.757729 0.838384 0.323232 0.755127 0.838384 0.333333 0.752525 0.838384 0.343434 0.749923 0.838384 0.353535 0.747322 0.838384 0.363636 0.744720 0.838384 0.373737 0.742118 0.838384 0.383838 0.739516 0.838384 0.393939 0.736915 0.838384 0.404040 0.734313 0.838384 0.414141 0.731711 0.838384 0.424242 0.729109 0.838384 0.434343 0.726507 0.838384 0.444444 0.723906 0.838384 0.454545 0.721304 0.838384 0.464646 0.718702 0.838384 0.474747 0.716100 0.838384 0.484848 0.713499 0.838384 0.494949 0.710897 0.838384 0.505051 0.708295 0.838384 0.515152 0.705693 0.838384 0.525253 0.703092 0.838384 0.535354 0.700490 0.838384 0.545455 0.697888 0.838384 0.555556 0.695286 0.838384 0.565657 0.692684 0.838384 0.575758 0.690083 0.838384 0.585859 0.687481 0.838384 0.595960 0.684879 0.838384 0.606061 0.682277 0.838384 0.616162 0.679676 0.838384 0.626263 0.677074 0.838384 0.636364 0.674472 0.838384 0.646465 0.671870 0.838384 0.656566 0.669268 0.838384 0.666667 0.666667 0.838384 0.676768 0.664065 0.838384 0.686869 0.661463 0.838384 0.696970 0.658861 0.838384 0.707071 0.656260 0.838384 0.717172 0.653658 0.838384 0.727273 0.651056 0.838384 0.737374 0.648454 0.838384 0.747475 0.645852 0.838384 0.757576 0.643251 0.838384 0.767677 0.640649 0.838384 0.777778 0.638047 0.838384 0.787879 0.635445 0.838384 0.797980 0.632844 0.838384 0.808081 0.630242 0.838384 0.818182 0.627640 0.838384 0.828283 0.625038 0.838384 0.838384 0.622436 0.838384 0.848485 0.619835 0.838384 0.858586 0.617233 0.838384 0.868687 0.614631 0.838384 0.878788 0.612029 0.838384 0.888889 0.609428 0.838384 0.898990 0.606826 0.838384 0.909091 0.604224 0.838384 0.919192 0.601622 0.838384 0.929293 0.599021 0.838384 0.939394 0.596419 0.838384 0.949495 0.593817 0.838384 0.959596 0.591215 0.838384 0.969697 0.588613 0.838384 0.979798 0.586012 0.838384 0.989899 0.583410 0.838384 1.000000 0.580808 0.848485 0.000000 0.848485 0.848485 0.010101 0.845730 0.848485 0.020202 0.842975 0.848485 0.030303 0.840220 0.848485 0.040404 0.837466 0.848485 0.050505 0.834711 0.848485 0.060606 0.831956 0.848485 0.070707 0.829201 0.848485 0.080808 0.826446 0.848485 0.090909 0.823691 0.848485 0.101010 0.820937 0.848485 0.111111 0.818182 0.848485 0.121212 0.815427 0.848485 0.131313 0.812672 0.848485 0.141414 0.809917 0.848485 0.151515 0.807163 0.848485 0.161616 0.804408 0.848485 0.171717 0.801653 0.848485 0.181818 0.798898 0.848485 0.191919 0.796143 0.848485 0.202020 0.793388 0.848485 0.212121 0.790634 0.848485 0.222222 0.787879 0.848485 0.232323 0.785124 0.848485 0.242424 0.782369 0.848485 0.252525 0.779614 0.848485 0.262626 0.776860 0.848485 0.272727 0.774105 0.848485 0.282828 0.771350 0.848485 0.292929 0.768595 0.848485 0.303030 0.765840 0.848485 0.313131 0.763085 0.848485 0.323232 0.760331 0.848485 0.333333 0.757576 0.848485 0.343434 0.754821 0.848485 0.353535 0.752066 0.848485 0.363636 0.749311 0.848485 0.373737 0.746556 0.848485 0.383838 0.743802 0.848485 0.393939 0.741047 0.848485 0.404040 0.738292 0.848485 0.414141 0.735537 0.848485 0.424242 0.732782 0.848485 0.434343 0.730028 0.848485 0.444444 0.727273 0.848485 0.454545 0.724518 0.848485 0.464646 0.721763 0.848485 0.474747 0.719008 0.848485 0.484848 0.716253 0.848485 0.494949 0.713499 0.848485 0.505051 0.710744 0.848485 0.515152 0.707989 0.848485 0.525253 0.705234 0.848485 0.535354 0.702479 0.848485 0.545455 0.699725 0.848485 0.555556 0.696970 0.848485 0.565657 0.694215 0.848485 0.575758 0.691460 0.848485 0.585859 0.688705 0.848485 0.595960 0.685950 0.848485 0.606061 0.683196 0.848485 0.616162 0.680441 0.848485 0.626263 0.677686 0.848485 0.636364 0.674931 0.848485 0.646465 0.672176 0.848485 0.656566 0.669421 0.848485 0.666667 0.666667 0.848485 0.676768 0.663912 0.848485 0.686869 0.661157 0.848485 0.696970 0.658402 0.848485 0.707071 0.655647 0.848485 0.717172 0.652893 0.848485 0.727273 0.650138 0.848485 0.737374 0.647383 0.848485 0.747475 0.644628 0.848485 0.757576 0.641873 0.848485 0.767677 0.639118 0.848485 0.777778 0.636364 0.848485 0.787879 0.633609 0.848485 0.797980 0.630854 0.848485 0.808081 0.628099 0.848485 0.818182 0.625344 0.848485 0.828283 0.622590 0.848485 0.838384 0.619835 0.848485 0.848485 0.617080 0.848485 0.858586 0.614325 0.848485 0.868687 0.611570 0.848485 0.878788 0.608815 0.848485 0.888889 0.606061 0.848485 0.898990 0.603306 0.848485 0.909091 0.600551 0.848485 0.919192 0.597796 0.848485 0.929293 0.595041 0.848485 0.939394 0.592287 0.848485 0.949495 0.589532 0.848485 0.959596 0.586777 0.848485 0.969697 0.584022 0.848485 0.979798 0.581267 0.848485 0.989899 0.578512 0.848485 1.000000 0.575758 0.858586 0.000000 0.858586 0.858586 0.010101 0.855678 0.858586 0.020202 0.852770 0.858586 0.030303 0.849862 0.858586 0.040404 0.846954 0.858586 0.050505 0.844047 0.858586 0.060606 0.841139 0.858586 0.070707 0.838231 0.858586 0.080808 0.835323 0.858586 0.090909 0.832415 0.858586 0.101010 0.829507 0.858586 0.111111 0.826599 0.858586 0.121212 0.823691 0.858586 0.131313 0.820784 0.858586 0.141414 0.817876 0.858586 0.151515 0.814968 0.858586 0.161616 0.812060 0.858586 0.171717 0.809152 0.858586 0.181818 0.806244 0.858586 0.191919 0.803336 0.858586 0.202020 0.800429 0.858586 0.212121 0.797521 0.858586 0.222222 0.794613 0.858586 0.232323 0.791705 0.858586 0.242424 0.788797 0.858586 0.252525 0.785889 0.858586 0.262626 0.782981 0.858586 0.272727 0.780073 0.858586 0.282828 0.777166 0.858586 0.292929 0.774258 0.858586 0.303030 0.771350 0.858586 0.313131 0.768442 0.858586 0.323232 0.765534 0.858586 0.333333 0.762626 0.858586 0.343434 0.759718 0.858586 0.353535 0.756811 0.858586 0.363636 0.753903 0.858586 0.373737 0.750995 0.858586 0.383838 0.748087 0.858586 0.393939 0.745179 0.858586 0.404040 0.742271 0.858586 0.414141 0.739363 0.858586 0.424242 0.736455 0.858586 0.434343 0.733548 0.858586 0.444444 0.730640 0.858586 0.454545 0.727732 0.858586 0.464646 0.724824 0.858586 0.474747 0.721916 0.858586 0.484848 0.719008 0.858586 0.494949 0.716100 0.858586 0.505051 0.713193 0.858586 0.515152 0.710285 0.858586 0.525253 0.707377 0.858586 0.535354 0.704469 0.858586 0.545455 0.701561 0.858586 0.555556 0.698653 0.858586 0.565657 0.695745 0.858586 0.575758 0.692837 0.858586 0.585859 0.689930 0.858586 0.595960 0.687022 0.858586 0.606061 0.684114 0.858586 0.616162 0.681206 0.858586 0.626263 0.678298 0.858586 0.636364 0.675390 0.858586 0.646465 0.672482 0.858586 0.656566 0.669575 0.858586 0.666667 0.666667 0.858586 0.676768 0.663759 0.858586 0.686869 0.660851 0.858586 0.696970 0.657943 0.858586 0.707071 0.655035 0.858586 0.717172 0.652127 0.858586 0.727273 0.649219 0.858586 0.737374 0.646312 0.858586 0.747475 0.643404 0.858586 0.757576 0.640496 0.858586 0.767677 0.637588 0.858586 0.777778 0.634680 0.858586 0.787879 0.631772 0.858586 0.797980 0.628864 0.858586 0.808081 0.625957 0.858586 0.818182 0.623049 0.858586 0.828283 0.620141 0.858586 0.838384 0.617233 0.858586 0.848485 0.614325 0.858586 0.858586 0.611417 0.858586 0.868687 0.608509 0.858586 0.878788 0.605601 0.858586 0.888889 0.602694 0.858586 0.898990 0.599786 0.858586 0.909091 0.596878 0.858586 0.919192 0.593970 0.858586 0.929293 0.591062 0.858586 0.939394 0.588154 0.858586 0.949495 0.585246 0.858586 0.959596 0.582339 0.858586 0.969697 0.579431 0.858586 0.979798 0.576523 0.858586 0.989899 0.573615 0.858586 1.000000 0.570707 0.868687 0.000000 0.868687 0.868687 0.010101 0.865626 0.868687 0.020202 0.862565 0.868687 0.030303 0.859504 0.868687 0.040404 0.856443 0.868687 0.050505 0.853382 0.868687 0.060606 0.850321 0.868687 0.070707 0.847260 0.868687 0.080808 0.844200 0.868687 0.090909 0.841139 0.868687 0.101010 0.838078 0.868687 0.111111 0.835017 0.868687 0.121212 0.831956 0.868687 0.131313 0.828895 0.868687 0.141414 0.825834 0.868687 0.151515 0.822773 0.868687 0.161616 0.819712 0.868687 0.171717 0.816651 0.868687 0.181818 0.813590 0.868687 0.191919 0.810530 0.868687 0.202020 0.807469 0.868687 0.212121 0.804408 0.868687 0.222222 0.801347 0.868687 0.232323 0.798286 0.868687 0.242424 0.795225 0.868687 0.252525 0.792164 0.868687 0.262626 0.789103 0.868687 0.272727 0.786042 0.868687 0.282828 0.782981 0.868687 0.292929 0.779920 0.868687 0.303030 0.776860 0.868687 0.313131 0.773799 0.868687 0.323232 0.770738 0.868687 0.333333 0.767677 0.868687 0.343434 0.764616 0.868687 0.353535 0.761555 0.868687 0.363636 0.758494 0.868687 0.373737 0.755433 0.868687 0.383838 0.752372 0.868687 0.393939 0.749311 0.868687 0.404040 0.746250 0.868687 0.414141 0.743189 0.868687 0.424242 0.740129 0.868687 0.434343 0.737068 0.868687 0.444444 0.734007 0.868687 0.454545 0.730946 0.868687 0.464646 0.727885 0.868687 0.474747 0.724824 0.868687 0.484848 0.721763 0.868687 0.494949 0.718702 0.868687 0.505051 0.715641 0.868687 0.515152 0.712580 0.868687 0.525253 0.709519 0.868687 0.535354 0.706459 0.868687 0.545455 0.703398 0.868687 0.555556 0.700337 0.868687 0.565657 0.697276 0.868687 0.575758 0.694215 0.868687 0.585859 0.691154 0.868687 0.595960 0.688093 0.868687 0.606061 0.685032 0.868687 0.616162 0.681971 0.868687 0.626263 0.678910 0.868687 0.636364 0.675849 0.868687 0.646465 0.672788 0.868687 0.656566 0.669728 0.868687 0.666667 0.666667 0.868687 0.676768 0.663606 0.868687 0.686869 0.660545 0.868687 0.696970 0.657484 0.868687 0.707071 0.654423 0.868687 0.717172 0.651362 0.868687 0.727273 0.648301 0.868687 0.737374 0.645240 0.868687 0.747475 0.642179 0.868687 0.757576 0.639118 0.868687 0.767677 0.636058 0.868687 0.777778 0.632997 0.868687 0.787879 0.629936 0.868687 0.797980 0.626875 0.868687 0.808081 0.623814 0.868687 0.818182 0.620753 0.868687 0.828283 0.617692 0.868687 0.838384 0.614631 0.868687 0.848485 0.611570 0.868687 0.858586 0.608509 0.868687 0.868687 0.605448 0.868687 0.878788 0.602388 0.868687 0.888889 0.599327 0.868687 0.898990 0.596266 0.868687 0.909091 0.593205 0.868687 0.919192 0.590144 0.868687 0.929293 0.587083 0.868687 0.939394 0.584022 0.868687 0.949495 0.580961 0.868687 0.959596 0.577900 0.868687 0.969697 0.574839 0.868687 0.979798 0.571778 0.868687 0.989899 0.568717 0.868687 1.000000 0.565657 0.878788 0.000000 0.878788 0.878788 0.010101 0.875574 0.878788 0.020202 0.872360 0.878788 0.030303 0.869146 0.878788 0.040404 0.865932 0.878788 0.050505 0.862718 0.878788 0.060606 0.859504 0.878788 0.070707 0.856290 0.878788 0.080808 0.853076 0.878788 0.090909 0.849862 0.878788 0.101010 0.846648 0.878788 0.111111 0.843434 0.878788 0.121212 0.840220 0.878788 0.131313 0.837006 0.878788 0.141414 0.833792 0.878788 0.151515 0.830579 0.878788 0.161616 0.827365 0.878788 0.171717 0.824151 0.878788 0.181818 0.820937 0.878788 0.191919 0.817723 0.878788 0.202020 0.814509 0.878788 0.212121 0.811295 0.878788 0.222222 0.808081 0.878788 0.232323 0.804867 0.878788 0.242424 0.801653 0.878788 0.252525 0.798439 0.878788 0.262626 0.795225 0.878788 0.272727 0.792011 0.878788 0.282828 0.788797 0.878788 0.292929 0.785583 0.878788 0.303030 0.782369 0.878788 0.313131 0.779155 0.878788 0.323232 0.775941 0.878788 0.333333 0.772727 0.878788 0.343434 0.769513 0.878788 0.353535 0.766299 0.878788 0.363636 0.763085 0.878788 0.373737 0.759871 0.878788 0.383838 0.756657 0.878788 0.393939 0.753444 0.878788 0.404040 0.750230 0.878788 0.414141 0.747016 0.878788 0.424242 0.743802 0.878788 0.434343 0.740588 0.878788 0.444444 0.737374 0.878788 0.454545 0.734160 0.878788 0.464646 0.730946 0.878788 0.474747 0.727732 0.878788 0.484848 0.724518 0.878788 0.494949 0.721304 0.878788 0.505051 0.718090 0.878788 0.515152 0.714876 0.878788 0.525253 0.711662 0.878788 0.535354 0.708448 0.878788 0.545455 0.705234 0.878788 0.555556 0.702020 0.878788 0.565657 0.698806 0.878788 0.575758 0.695592 0.878788 0.585859 0.692378 0.878788 0.595960 0.689164 0.878788 0.606061 0.685950 0.878788 0.616162 0.682736 0.878788 0.626263 0.679522 0.878788 0.636364 0.676309 0.878788 0.646465 0.673095 0.878788 0.656566 0.669881 0.878788 0.666667 0.666667 0.878788 0.676768 0.663453 0.878788 0.686869 0.660239 0.878788 0.696970 0.657025 0.878788 0.707071 0.653811 0.878788 0.717172 0.650597 0.878788 0.727273 0.647383 0.878788 0.737374 0.644169 0.878788 0.747475 0.640955 0.878788 0.757576 0.637741 0.878788 0.767677 0.634527 0.878788 0.777778 0.631313 0.878788 0.787879 0.628099 0.878788 0.797980 0.624885 0.878788 0.808081 0.621671 0.878788 0.818182 0.618457 0.878788 0.828283 0.615243 0.878788 0.838384 0.612029 0.878788 0.848485 0.608815 0.878788 0.858586 0.605601 0.878788 0.868687 0.602388 0.878788 0.878788 0.599174 0.878788 0.888889 0.595960 0.878788 0.898990 0.592746 0.878788 0.909091 0.589532 0.878788 0.919192 0.586318 0.878788 0.929293 0.583104 0.878788 0.939394 0.579890 0.878788 0.949495 0.576676 0.878788 0.959596 0.573462 0.878788 0.969697 0.570248 0.878788 0.979798 0.567034 0.878788 0.989899 0.563820 0.878788 1.000000 0.560606 0.888889 0.000000 0.888889 0.888889 0.010101 0.885522 0.888889 0.020202 0.882155 0.888889 0.030303 0.878788 0.888889 0.040404 0.875421 0.888889 0.050505 0.872054 0.888889 0.060606 0.868687 0.888889 0.070707 0.865320 0.888889 0.080808 0.861953 0.888889 0.090909 0.858586 0.888889 0.101010 0.855219 0.888889 0.111111 0.851852 0.888889 0.121212 0.848485 0.888889 0.131313 0.845118 0.888889 0.141414 0.841751 0.888889 0.151515 0.838384 0.888889 0.161616 0.835017 0.888889 0.171717 0.831650 0.888889 0.181818 0.828283 0.888889 0.191919 0.824916 0.888889 0.202020 0.821549 0.888889 0.212121 0.818182 0.888889 0.222222 0.814815 0.888889 0.232323 0.811448 0.888889 0.242424 0.808081 0.888889 0.252525 0.804714 0.888889 0.262626 0.801347 0.888889 0.272727 0.797980 0.888889 0.282828 0.794613 0.888889 0.292929 0.791246 0.888889 0.303030 0.787879 0.888889 0.313131 0.784512 0.888889 0.323232 0.781145 0.888889 0.333333 0.777778 0.888889 0.343434 0.774411 0.888889 0.353535 0.771044 0.888889 0.363636 0.767677 0.888889 0.373737 0.764310 0.888889 0.383838 0.760943 0.888889 0.393939 0.757576 0.888889 0.404040 0.754209 0.888889 0.414141 0.750842 0.888889 0.424242 0.747475 0.888889 0.434343 0.744108 0.888889 0.444444 0.740741 0.888889 0.454545 0.737374 0.888889 0.464646 0.734007 0.888889 0.474747 0.730640 0.888889 0.484848 0.727273 0.888889 0.494949 0.723906 0.888889 0.505051 0.720539 0.888889 0.515152 0.717172 0.888889 0.525253 0.713805 0.888889 0.535354 0.710438 0.888889 0.545455 0.707071 0.888889 0.555556 0.703704 0.888889 0.565657 0.700337 0.888889 0.575758 0.696970 0.888889 0.585859 0.693603 0.888889 0.595960 0.690236 0.888889 0.606061 0.686869 0.888889 0.616162 0.683502 0.888889 0.626263 0.680135 0.888889 0.636364 0.676768 0.888889 0.646465 0.673401 0.888889 0.656566 0.670034 0.888889 0.666667 0.666667 0.888889 0.676768 0.663300 0.888889 0.686869 0.659933 0.888889 0.696970 0.656566 0.888889 0.707071 0.653199 0.888889 0.717172 0.649832 0.888889 0.727273 0.646465 0.888889 0.737374 0.643098 0.888889 0.747475 0.639731 0.888889 0.757576 0.636364 0.888889 0.767677 0.632997 0.888889 0.777778 0.629630 0.888889 0.787879 0.626263 0.888889 0.797980 0.622896 0.888889 0.808081 0.619529 0.888889 0.818182 0.616162 0.888889 0.828283 0.612795 0.888889 0.838384 0.609428 0.888889 0.848485 0.606061 0.888889 0.858586 0.602694 0.888889 0.868687 0.599327 0.888889 0.878788 0.595960 0.888889 0.888889 0.592593 0.888889 0.898990 0.589226 0.888889 0.909091 0.585859 0.888889 0.919192 0.582492 0.888889 0.929293 0.579125 0.888889 0.939394 0.575758 0.888889 0.949495 0.572391 0.888889 0.959596 0.569024 0.888889 0.969697 0.565657 0.888889 0.979798 0.562290 0.888889 0.989899 0.558923 0.888889 1.000000 0.555556 0.898990 0.000000 0.898990 0.898990 0.010101 0.895470 0.898990 0.020202 0.891950 0.898990 0.030303 0.888430 0.898990 0.040404 0.884910 0.898990 0.050505 0.881390 0.898990 0.060606 0.877870 0.898990 0.070707 0.874350 0.898990 0.080808 0.870830 0.898990 0.090909 0.867309 0.898990 0.101010 0.863789 0.898990 0.111111 0.860269 0.898990 0.121212 0.856749 0.898990 0.131313 0.853229 0.898990 0.141414 0.849709 0.898990 0.151515 0.846189 0.898990 0.161616 0.842669 0.898990 0.171717 0.839149 0.898990 0.181818 0.835629 0.898990 0.191919 0.832109 0.898990 0.202020 0.828589 0.898990 0.212121 0.825069 0.898990 0.222222 0.821549 0.898990 0.232323 0.818029 0.898990 0.242424 0.814509 0.898990 0.252525 0.810989 0.898990 0.262626 0.807469 0.898990 0.272727 0.803949 0.898990 0.282828 0.800429 0.898990 0.292929 0.796908 0.898990 0.303030 0.793388 0.898990 0.313131 0.789868 0.898990 0.323232 0.786348 0.898990 0.333333 0.782828 0.898990 0.343434 0.779308 0.898990 0.353535 0.775788 0.898990 0.363636 0.772268 0.898990 0.373737 0.768748 0.898990 0.383838 0.765228 0.898990 0.393939 0.761708 0.898990 0.404040 0.758188 0.898990 0.414141 0.754668 0.898990 0.424242 0.751148 0.898990 0.434343 0.747628 0.898990 0.444444 0.744108 0.898990 0.454545 0.740588 0.898990 0.464646 0.737068 0.898990 0.474747 0.733548 0.898990 0.484848 0.730028 0.898990 0.494949 0.726507 0.898990 0.505051 0.722987 0.898990 0.515152 0.719467 0.898990 0.525253 0.715947 0.898990 0.535354 0.712427 0.898990 0.545455 0.708907 0.898990 0.555556 0.705387 0.898990 0.565657 0.701867 0.898990 0.575758 0.698347 0.898990 0.585859 0.694827 0.898990 0.595960 0.691307 0.898990 0.606061 0.687787 0.898990 0.616162 0.684267 0.898990 0.626263 0.680747 0.898990 0.636364 0.677227 0.898990 0.646465 0.673707 0.898990 0.656566 0.670187 0.898990 0.666667 0.666667 0.898990 0.676768 0.663147 0.898990 0.686869 0.659627 0.898990 0.696970 0.656107 0.898990 0.707071 0.652586 0.898990 0.717172 0.649066 0.898990 0.727273 0.645546 0.898990 0.737374 0.642026 0.898990 0.747475 0.638506 0.898990 0.757576 0.634986 0.898990 0.767677 0.631466 0.898990 0.777778 0.627946 0.898990 0.787879 0.624426 0.898990 0.797980 0.620906 0.898990 0.808081 0.617386 0.898990 0.818182 0.613866 0.898990 0.828283 0.610346 0.898990 0.838384 0.606826 0.898990 0.848485 0.603306 0.898990 0.858586 0.599786 0.898990 0.868687 0.596266 0.898990 0.878788 0.592746 0.898990 0.888889 0.589226 0.898990 0.898990 0.585706 0.898990 0.909091 0.582185 0.898990 0.919192 0.578665 0.898990 0.929293 0.575145 0.898990 0.939394 0.571625 0.898990 0.949495 0.568105 0.898990 0.959596 0.564585 0.898990 0.969697 0.561065 0.898990 0.979798 0.557545 0.898990 0.989899 0.554025 0.898990 1.000000 0.550505 0.909091 0.000000 0.909091 0.909091 0.010101 0.905418 0.909091 0.020202 0.901745 0.909091 0.030303 0.898072 0.909091 0.040404 0.894399 0.909091 0.050505 0.890725 0.909091 0.060606 0.887052 0.909091 0.070707 0.883379 0.909091 0.080808 0.879706 0.909091 0.090909 0.876033 0.909091 0.101010 0.872360 0.909091 0.111111 0.868687 0.909091 0.121212 0.865014 0.909091 0.131313 0.861341 0.909091 0.141414 0.857668 0.909091 0.151515 0.853994 0.909091 0.161616 0.850321 0.909091 0.171717 0.846648 0.909091 0.181818 0.842975 0.909091 0.191919 0.839302 0.909091 0.202020 0.835629 0.909091 0.212121 0.831956 0.909091 0.222222 0.828283 0.909091 0.232323 0.824610 0.909091 0.242424 0.820937 0.909091 0.252525 0.817264 0.909091 0.262626 0.813590 0.909091 0.272727 0.809917 0.909091 0.282828 0.806244 0.909091 0.292929 0.802571 0.909091 0.303030 0.798898 0.909091 0.313131 0.795225 0.909091 0.323232 0.791552 0.909091 0.333333 0.787879 0.909091 0.343434 0.784206 0.909091 0.353535 0.780533 0.909091 0.363636 0.776860 0.909091 0.373737 0.773186 0.909091 0.383838 0.769513 0.909091 0.393939 0.765840 0.909091 0.404040 0.762167 0.909091 0.414141 0.758494 0.909091 0.424242 0.754821 0.909091 0.434343 0.751148 0.909091 0.444444 0.747475 0.909091 0.454545 0.743802 0.909091 0.464646 0.740129 0.909091 0.474747 0.736455 0.909091 0.484848 0.732782 0.909091 0.494949 0.729109 0.909091 0.505051 0.725436 0.909091 0.515152 0.721763 0.909091 0.525253 0.718090 0.909091 0.535354 0.714417 0.909091 0.545455 0.710744 0.909091 0.555556 0.707071 0.909091 0.565657 0.703398 0.909091 0.575758 0.699725 0.909091 0.585859 0.696051 0.909091 0.595960 0.692378 0.909091 0.606061 0.688705 0.909091 0.616162 0.685032 0.909091 0.626263 0.681359 0.909091 0.636364 0.677686 0.909091 0.646465 0.674013 0.909091 0.656566 0.670340 0.909091 0.666667 0.666667 0.909091 0.676768 0.662994 0.909091 0.686869 0.659320 0.909091 0.696970 0.655647 0.909091 0.707071 0.651974 0.909091 0.717172 0.648301 0.909091 0.727273 0.644628 0.909091 0.737374 0.640955 0.909091 0.747475 0.637282 0.909091 0.757576 0.633609 0.909091 0.767677 0.629936 0.909091 0.777778 0.626263 0.909091 0.787879 0.622590 0.909091 0.797980 0.618916 0.909091 0.808081 0.615243 0.909091 0.818182 0.611570 0.909091 0.828283 0.607897 0.909091 0.838384 0.604224 0.909091 0.848485 0.600551 0.909091 0.858586 0.596878 0.909091 0.868687 0.593205 0.909091 0.878788 0.589532 0.909091 0.888889 0.585859 0.909091 0.898990 0.582185 0.909091 0.909091 0.578512 0.909091 0.919192 0.574839 0.909091 0.929293 0.571166 0.909091 0.939394 0.567493 0.909091 0.949495 0.563820 0.909091 0.959596 0.560147 0.909091 0.969697 0.556474 0.909091 0.979798 0.552801 0.909091 0.989899 0.549128 0.909091 1.000000 0.545455 0.919192 0.000000 0.919192 0.919192 0.010101 0.915366 0.919192 0.020202 0.911540 0.919192 0.030303 0.907713 0.919192 0.040404 0.903887 0.919192 0.050505 0.900061 0.919192 0.060606 0.896235 0.919192 0.070707 0.892409 0.919192 0.080808 0.888583 0.919192 0.090909 0.884757 0.919192 0.101010 0.880931 0.919192 0.111111 0.877104 0.919192 0.121212 0.873278 0.919192 0.131313 0.869452 0.919192 0.141414 0.865626 0.919192 0.151515 0.861800 0.919192 0.161616 0.857974 0.919192 0.171717 0.854148 0.919192 0.181818 0.850321 0.919192 0.191919 0.846495 0.919192 0.202020 0.842669 0.919192 0.212121 0.838843 0.919192 0.222222 0.835017 0.919192 0.232323 0.831191 0.919192 0.242424 0.827365 0.919192 0.252525 0.823538 0.919192 0.262626 0.819712 0.919192 0.272727 0.815886 0.919192 0.282828 0.812060 0.919192 0.292929 0.808234 0.919192 0.303030 0.804408 0.919192 0.313131 0.800582 0.919192 0.323232 0.796755 0.919192 0.333333 0.792929 0.919192 0.343434 0.789103 0.919192 0.353535 0.785277 0.919192 0.363636 0.781451 0.919192 0.373737 0.777625 0.919192 0.383838 0.773799 0.919192 0.393939 0.769972 0.919192 0.404040 0.766146 0.919192 0.414141 0.762320 0.919192 0.424242 0.758494 0.919192 0.434343 0.754668 0.919192 0.444444 0.750842 0.919192 0.454545 0.747016 0.919192 0.464646 0.743189 0.919192 0.474747 0.739363 0.919192 0.484848 0.735537 0.919192 0.494949 0.731711 0.919192 0.505051 0.727885 0.919192 0.515152 0.724059 0.919192 0.525253 0.720233 0.919192 0.535354 0.716406 0.919192 0.545455 0.712580 0.919192 0.555556 0.708754 0.919192 0.565657 0.704928 0.919192 0.575758 0.701102 0.919192 0.585859 0.697276 0.919192 0.595960 0.693450 0.919192 0.606061 0.689624 0.919192 0.616162 0.685797 0.919192 0.626263 0.681971 0.919192 0.636364 0.678145 0.919192 0.646465 0.674319 0.919192 0.656566 0.670493 0.919192 0.666667 0.666667 0.919192 0.676768 0.662841 0.919192 0.686869 0.659014 0.919192 0.696970 0.655188 0.919192 0.707071 0.651362 0.919192 0.717172 0.647536 0.919192 0.727273 0.643710 0.919192 0.737374 0.639884 0.919192 0.747475 0.636058 0.919192 0.757576 0.632231 0.919192 0.767677 0.628405 0.919192 0.777778 0.624579 0.919192 0.787879 0.620753 0.919192 0.797980 0.616927 0.919192 0.808081 0.613101 0.919192 0.818182 0.609275 0.919192 0.828283 0.605448 0.919192 0.838384 0.601622 0.919192 0.848485 0.597796 0.919192 0.858586 0.593970 0.919192 0.868687 0.590144 0.919192 0.878788 0.586318 0.919192 0.888889 0.582492 0.919192 0.898990 0.578665 0.919192 0.909091 0.574839 0.919192 0.919192 0.571013 0.919192 0.929293 0.567187 0.919192 0.939394 0.563361 0.919192 0.949495 0.559535 0.919192 0.959596 0.555709 0.919192 0.969697 0.551882 0.919192 0.979798 0.548056 0.919192 0.989899 0.544230 0.919192 1.000000 0.540404 0.929293 0.000000 0.929293 0.929293 0.010101 0.925314 0.929293 0.020202 0.921335 0.929293 0.030303 0.917355 0.929293 0.040404 0.913376 0.929293 0.050505 0.909397 0.929293 0.060606 0.905418 0.929293 0.070707 0.901439 0.929293 0.080808 0.897459 0.929293 0.090909 0.893480 0.929293 0.101010 0.889501 0.929293 0.111111 0.885522 0.929293 0.121212 0.881543 0.929293 0.131313 0.877564 0.929293 0.141414 0.873584 0.929293 0.151515 0.869605 0.929293 0.161616 0.865626 0.929293 0.171717 0.861647 0.929293 0.181818 0.857668 0.929293 0.191919 0.853688 0.929293 0.202020 0.849709 0.929293 0.212121 0.845730 0.929293 0.222222 0.841751 0.929293 0.232323 0.837772 0.929293 0.242424 0.833792 0.929293 0.252525 0.829813 0.929293 0.262626 0.825834 0.929293 0.272727 0.821855 0.929293 0.282828 0.817876 0.929293 0.292929 0.813897 0.929293 0.303030 0.809917 0.929293 0.313131 0.805938 0.929293 0.323232 0.801959 0.929293 0.333333 0.797980 0.929293 0.343434 0.794001 0.929293 0.353535 0.790021 0.929293 0.363636 0.786042 0.929293 0.373737 0.782063 0.929293 0.383838 0.778084 0.929293 0.393939 0.774105 0.929293 0.404040 0.770125 0.929293 0.414141 0.766146 0.929293 0.424242 0.762167 0.929293 0.434343 0.758188 0.929293 0.444444 0.754209 0.929293 0.454545 0.750230 0.929293 0.464646 0.746250 0.929293 0.474747 0.742271 0.929293 0.484848 0.738292 0.929293 0.494949 0.734313 0.929293 0.505051 0.730334 0.929293 0.515152 0.726354 0.929293 0.525253 0.722375 0.929293 0.535354 0.718396 0.929293 0.545455 0.714417 0.929293 0.555556 0.710438 0.929293 0.565657 0.706459 0.929293 0.575758 0.702479 0.929293 0.585859 0.698500 0.929293 0.595960 0.694521 0.929293 0.606061 0.690542 0.929293 0.616162 0.686563 0.929293 0.626263 0.682583 0.929293 0.636364 0.678604 0.929293 0.646465 0.674625 0.929293 0.656566 0.670646 0.929293 0.666667 0.666667 0.929293 0.676768 0.662687 0.929293 0.686869 0.658708 0.929293 0.696970 0.654729 0.929293 0.707071 0.650750 0.929293 0.717172 0.646771 0.929293 0.727273 0.642792 0.929293 0.737374 0.638812 0.929293 0.747475 0.634833 0.929293 0.757576 0.630854 0.929293 0.767677 0.626875 0.929293 0.777778 0.622896 0.929293 0.787879 0.618916 0.929293 0.797980 0.614937 0.929293 0.808081 0.610958 0.929293 0.818182 0.606979 0.929293 0.828283 0.603000 0.929293 0.838384 0.599021 0.929293 0.848485 0.595041 0.929293 0.858586 0.591062 0.929293 0.868687 0.587083 0.929293 0.878788 0.583104 0.929293 0.888889 0.579125 0.929293 0.898990 0.575145 0.929293 0.909091 0.571166 0.929293 0.919192 0.567187 0.929293 0.929293 0.563208 0.929293 0.939394 0.559229 0.929293 0.949495 0.555249 0.929293 0.959596 0.551270 0.929293 0.969697 0.547291 0.929293 0.979798 0.543312 0.929293 0.989899 0.539333 0.929293 1.000000 0.535354 0.939394 0.000000 0.939394 0.939394 0.010101 0.935262 0.939394 0.020202 0.931129 0.939394 0.030303 0.926997 0.939394 0.040404 0.922865 0.939394 0.050505 0.918733 0.939394 0.060606 0.914601 0.939394 0.070707 0.910468 0.939394 0.080808 0.906336 0.939394 0.090909 0.902204 0.939394 0.101010 0.898072 0.939394 0.111111 0.893939 0.939394 0.121212 0.889807 0.939394 0.131313 0.885675 0.939394 0.141414 0.881543 0.939394 0.151515 0.877410 0.939394 0.161616 0.873278 0.939394 0.171717 0.869146 0.939394 0.181818 0.865014 0.939394 0.191919 0.860882 0.939394 0.202020 0.856749 0.939394 0.212121 0.852617 0.939394 0.222222 0.848485 0.939394 0.232323 0.844353 0.939394 0.242424 0.840220 0.939394 0.252525 0.836088 0.939394 0.262626 0.831956 0.939394 0.272727 0.827824 0.939394 0.282828 0.823691 0.939394 0.292929 0.819559 0.939394 0.303030 0.815427 0.939394 0.313131 0.811295 0.939394 0.323232 0.807163 0.939394 0.333333 0.803030 0.939394 0.343434 0.798898 0.939394 0.353535 0.794766 0.939394 0.363636 0.790634 0.939394 0.373737 0.786501 0.939394 0.383838 0.782369 0.939394 0.393939 0.778237 0.939394 0.404040 0.774105 0.939394 0.414141 0.769972 0.939394 0.424242 0.765840 0.939394 0.434343 0.761708 0.939394 0.444444 0.757576 0.939394 0.454545 0.753444 0.939394 0.464646 0.749311 0.939394 0.474747 0.745179 0.939394 0.484848 0.741047 0.939394 0.494949 0.736915 0.939394 0.505051 0.732782 0.939394 0.515152 0.728650 0.939394 0.525253 0.724518 0.939394 0.535354 0.720386 0.939394 0.545455 0.716253 0.939394 0.555556 0.712121 0.939394 0.565657 0.707989 0.939394 0.575758 0.703857 0.939394 0.585859 0.699725 0.939394 0.595960 0.695592 0.939394 0.606061 0.691460 0.939394 0.616162 0.687328 0.939394 0.626263 0.683196 0.939394 0.636364 0.679063 0.939394 0.646465 0.674931 0.939394 0.656566 0.670799 0.939394 0.666667 0.666667 0.939394 0.676768 0.662534 0.939394 0.686869 0.658402 0.939394 0.696970 0.654270 0.939394 0.707071 0.650138 0.939394 0.717172 0.646006 0.939394 0.727273 0.641873 0.939394 0.737374 0.637741 0.939394 0.747475 0.633609 0.939394 0.757576 0.629477 0.939394 0.767677 0.625344 0.939394 0.777778 0.621212 0.939394 0.787879 0.617080 0.939394 0.797980 0.612948 0.939394 0.808081 0.608815 0.939394 0.818182 0.604683 0.939394 0.828283 0.600551 0.939394 0.838384 0.596419 0.939394 0.848485 0.592287 0.939394 0.858586 0.588154 0.939394 0.868687 0.584022 0.939394 0.878788 0.579890 0.939394 0.888889 0.575758 0.939394 0.898990 0.571625 0.939394 0.909091 0.567493 0.939394 0.919192 0.563361 0.939394 0.929293 0.559229 0.939394 0.939394 0.555096 0.939394 0.949495 0.550964 0.939394 0.959596 0.546832 0.939394 0.969697 0.542700 0.939394 0.979798 0.538567 0.939394 0.989899 0.534435 0.939394 1.000000 0.530303 0.949495 0.000000 0.949495 0.949495 0.010101 0.945210 0.949495 0.020202 0.940924 0.949495 0.030303 0.936639 0.949495 0.040404 0.932354 0.949495 0.050505 0.928069 0.949495 0.060606 0.923783 0.949495 0.070707 0.919498 0.949495 0.080808 0.915213 0.949495 0.090909 0.910927 0.949495 0.101010 0.906642 0.949495 0.111111 0.902357 0.949495 0.121212 0.898072 0.949495 0.131313 0.893786 0.949495 0.141414 0.889501 0.949495 0.151515 0.885216 0.949495 0.161616 0.880931 0.949495 0.171717 0.876645 0.949495 0.181818 0.872360 0.949495 0.191919 0.868075 0.949495 0.202020 0.863789 0.949495 0.212121 0.859504 0.949495 0.222222 0.855219 0.949495 0.232323 0.850934 0.949495 0.242424 0.846648 0.949495 0.252525 0.842363 0.949495 0.262626 0.838078 0.949495 0.272727 0.833792 0.949495 0.282828 0.829507 0.949495 0.292929 0.825222 0.949495 0.303030 0.820937 0.949495 0.313131 0.816651 0.949495 0.323232 0.812366 0.949495 0.333333 0.808081 0.949495 0.343434 0.803796 0.949495 0.353535 0.799510 0.949495 0.363636 0.795225 0.949495 0.373737 0.790940 0.949495 0.383838 0.786654 0.949495 0.393939 0.782369 0.949495 0.404040 0.778084 0.949495 0.414141 0.773799 0.949495 0.424242 0.769513 0.949495 0.434343 0.765228 0.949495 0.444444 0.760943 0.949495 0.454545 0.756657 0.949495 0.464646 0.752372 0.949495 0.474747 0.748087 0.949495 0.484848 0.743802 0.949495 0.494949 0.739516 0.949495 0.505051 0.735231 0.949495 0.515152 0.730946 0.949495 0.525253 0.726661 0.949495 0.535354 0.722375 0.949495 0.545455 0.718090 0.949495 0.555556 0.713805 0.949495 0.565657 0.709519 0.949495 0.575758 0.705234 0.949495 0.585859 0.700949 0.949495 0.595960 0.696664 0.949495 0.606061 0.692378 0.949495 0.616162 0.688093 0.949495 0.626263 0.683808 0.949495 0.636364 0.679522 0.949495 0.646465 0.675237 0.949495 0.656566 0.670952 0.949495 0.666667 0.666667 0.949495 0.676768 0.662381 0.949495 0.686869 0.658096 0.949495 0.696970 0.653811 0.949495 0.707071 0.649526 0.949495 0.717172 0.645240 0.949495 0.727273 0.640955 0.949495 0.737374 0.636670 0.949495 0.747475 0.632384 0.949495 0.757576 0.628099 0.949495 0.767677 0.623814 0.949495 0.777778 0.619529 0.949495 0.787879 0.615243 0.949495 0.797980 0.610958 0.949495 0.808081 0.606673 0.949495 0.818182 0.602388 0.949495 0.828283 0.598102 0.949495 0.838384 0.593817 0.949495 0.848485 0.589532 0.949495 0.858586 0.585246 0.949495 0.868687 0.580961 0.949495 0.878788 0.576676 0.949495 0.888889 0.572391 0.949495 0.898990 0.568105 0.949495 0.909091 0.563820 0.949495 0.919192 0.559535 0.949495 0.929293 0.555249 0.949495 0.939394 0.550964 0.949495 0.949495 0.546679 0.949495 0.959596 0.542394 0.949495 0.969697 0.538108 0.949495 0.979798 0.533823 0.949495 0.989899 0.529538 0.949495 1.000000 0.525253 0.959596 0.000000 0.959596 0.959596 0.010101 0.955158 0.959596 0.020202 0.950719 0.959596 0.030303 0.946281 0.959596 0.040404 0.941843 0.959596 0.050505 0.937404 0.959596 0.060606 0.932966 0.959596 0.070707 0.928528 0.959596 0.080808 0.924089 0.959596 0.090909 0.919651 0.959596 0.101010 0.915213 0.959596 0.111111 0.910774 0.959596 0.121212 0.906336 0.959596 0.131313 0.901898 0.959596 0.141414 0.897459 0.959596 0.151515 0.893021 0.959596 0.161616 0.888583 0.959596 0.171717 0.884144 0.959596 0.181818 0.879706 0.959596 0.191919 0.875268 0.959596 0.202020 0.870830 0.959596 0.212121 0.866391 0.959596 0.222222 0.861953 0.959596 0.232323 0.857515 0.959596 0.242424 0.853076 0.959596 0.252525 0.848638 0.959596 0.262626 0.844200 0.959596 0.272727 0.839761 0.959596 0.282828 0.835323 0.959596 0.292929 0.830885 0.959596 0.303030 0.826446 0.959596 0.313131 0.822008 0.959596 0.323232 0.817570 0.959596 0.333333 0.813131 0.959596 0.343434 0.808693 0.959596 0.353535 0.804255 0.959596 0.363636 0.799816 0.959596 0.373737 0.795378 0.959596 0.383838 0.790940 0.959596 0.393939 0.786501 0.959596 0.404040 0.782063 0.959596 0.414141 0.777625 0.959596 0.424242 0.773186 0.959596 0.434343 0.768748 0.959596 0.444444 0.764310 0.959596 0.454545 0.759871 0.959596 0.464646 0.755433 0.959596 0.474747 0.750995 0.959596 0.484848 0.746556 0.959596 0.494949 0.742118 0.959596 0.505051 0.737680 0.959596 0.515152 0.733242 0.959596 0.525253 0.728803 0.959596 0.535354 0.724365 0.959596 0.545455 0.719927 0.959596 0.555556 0.715488 0.959596 0.565657 0.711050 0.959596 0.575758 0.706612 0.959596 0.585859 0.702173 0.959596 0.595960 0.697735 0.959596 0.606061 0.693297 0.959596 0.616162 0.688858 0.959596 0.626263 0.684420 0.959596 0.636364 0.679982 0.959596 0.646465 0.675543 0.959596 0.656566 0.671105 0.959596 0.666667 0.666667 0.959596 0.676768 0.662228 0.959596 0.686869 0.657790 0.959596 0.696970 0.653352 0.959596 0.707071 0.648913 0.959596 0.717172 0.644475 0.959596 0.727273 0.640037 0.959596 0.737374 0.635598 0.959596 0.747475 0.631160 0.959596 0.757576 0.626722 0.959596 0.767677 0.622283 0.959596 0.777778 0.617845 0.959596 0.787879 0.613407 0.959596 0.797980 0.608968 0.959596 0.808081 0.604530 0.959596 0.818182 0.600092 0.959596 0.828283 0.595654 0.959596 0.838384 0.591215 0.959596 0.848485 0.586777 0.959596 0.858586 0.582339 0.959596 0.868687 0.577900 0.959596 0.878788 0.573462 0.959596 0.888889 0.569024 0.959596 0.898990 0.564585 0.959596 0.909091 0.560147 0.959596 0.919192 0.555709 0.959596 0.929293 0.551270 0.959596 0.939394 0.546832 0.959596 0.949495 0.542394 0.959596 0.959596 0.537955 0.959596 0.969697 0.533517 0.959596 0.979798 0.529079 0.959596 0.989899 0.524640 0.959596 1.000000 0.520202 0.969697 0.000000 0.969697 0.969697 0.010101 0.965106 0.969697 0.020202 0.960514 0.969697 0.030303 0.955923 0.969697 0.040404 0.951331 0.969697 0.050505 0.946740 0.969697 0.060606 0.942149 0.969697 0.070707 0.937557 0.969697 0.080808 0.932966 0.969697 0.090909 0.928375 0.969697 0.101010 0.923783 0.969697 0.111111 0.919192 0.969697 0.121212 0.914601 0.969697 0.131313 0.910009 0.969697 0.141414 0.905418 0.969697 0.151515 0.900826 0.969697 0.161616 0.896235 0.969697 0.171717 0.891644 0.969697 0.181818 0.887052 0.969697 0.191919 0.882461 0.969697 0.202020 0.877870 0.969697 0.212121 0.873278 0.969697 0.222222 0.868687 0.969697 0.232323 0.864096 0.969697 0.242424 0.859504 0.969697 0.252525 0.854913 0.969697 0.262626 0.850321 0.969697 0.272727 0.845730 0.969697 0.282828 0.841139 0.969697 0.292929 0.836547 0.969697 0.303030 0.831956 0.969697 0.313131 0.827365 0.969697 0.323232 0.822773 0.969697 0.333333 0.818182 0.969697 0.343434 0.813590 0.969697 0.353535 0.808999 0.969697 0.363636 0.804408 0.969697 0.373737 0.799816 0.969697 0.383838 0.795225 0.969697 0.393939 0.790634 0.969697 0.404040 0.786042 0.969697 0.414141 0.781451 0.969697 0.424242 0.776860 0.969697 0.434343 0.772268 0.969697 0.444444 0.767677 0.969697 0.454545 0.763085 0.969697 0.464646 0.758494 0.969697 0.474747 0.753903 0.969697 0.484848 0.749311 0.969697 0.494949 0.744720 0.969697 0.505051 0.740129 0.969697 0.515152 0.735537 0.969697 0.525253 0.730946 0.969697 0.535354 0.726354 0.969697 0.545455 0.721763 0.969697 0.555556 0.717172 0.969697 0.565657 0.712580 0.969697 0.575758 0.707989 0.969697 0.585859 0.703398 0.969697 0.595960 0.698806 0.969697 0.606061 0.694215 0.969697 0.616162 0.689624 0.969697 0.626263 0.685032 0.969697 0.636364 0.680441 0.969697 0.646465 0.675849 0.969697 0.656566 0.671258 0.969697 0.666667 0.666667 0.969697 0.676768 0.662075 0.969697 0.686869 0.657484 0.969697 0.696970 0.652893 0.969697 0.707071 0.648301 0.969697 0.717172 0.643710 0.969697 0.727273 0.639118 0.969697 0.737374 0.634527 0.969697 0.747475 0.629936 0.969697 0.757576 0.625344 0.969697 0.767677 0.620753 0.969697 0.777778 0.616162 0.969697 0.787879 0.611570 0.969697 0.797980 0.606979 0.969697 0.808081 0.602388 0.969697 0.818182 0.597796 0.969697 0.828283 0.593205 0.969697 0.838384 0.588613 0.969697 0.848485 0.584022 0.969697 0.858586 0.579431 0.969697 0.868687 0.574839 0.969697 0.878788 0.570248 0.969697 0.888889 0.565657 0.969697 0.898990 0.561065 0.969697 0.909091 0.556474 0.969697 0.919192 0.551882 0.969697 0.929293 0.547291 0.969697 0.939394 0.542700 0.969697 0.949495 0.538108 0.969697 0.959596 0.533517 0.969697 0.969697 0.528926 0.969697 0.979798 0.524334 0.969697 0.989899 0.519743 0.969697 1.000000 0.515152 0.979798 0.000000 0.979798 0.979798 0.010101 0.975054 0.979798 0.020202 0.970309 0.979798 0.030303 0.965565 0.979798 0.040404 0.960820 0.979798 0.050505 0.956076 0.979798 0.060606 0.951331 0.979798 0.070707 0.946587 0.979798 0.080808 0.941843 0.979798 0.090909 0.937098 0.979798 0.101010 0.932354 0.979798 0.111111 0.927609 0.979798 0.121212 0.922865 0.979798 0.131313 0.918121 0.979798 0.141414 0.913376 0.979798 0.151515 0.908632 0.979798 0.161616 0.903887 0.979798 0.171717 0.899143 0.979798 0.181818 0.894399 0.979798 0.191919 0.889654 0.979798 0.202020 0.884910 0.979798 0.212121 0.880165 0.979798 0.222222 0.875421 0.979798 0.232323 0.870676 0.979798 0.242424 0.865932 0.979798 0.252525 0.861188 0.979798 0.262626 0.856443 0.979798 0.272727 0.851699 0.979798 0.282828 0.846954 0.979798 0.292929 0.842210 0.979798 0.303030 0.837466 0.979798 0.313131 0.832721 0.979798 0.323232 0.827977 0.979798 0.333333 0.823232 0.979798 0.343434 0.818488 0.979798 0.353535 0.813743 0.979798 0.363636 0.808999 0.979798 0.373737 0.804255 0.979798 0.383838 0.799510 0.979798 0.393939 0.794766 0.979798 0.404040 0.790021 0.979798 0.414141 0.785277 0.979798 0.424242 0.780533 0.979798 0.434343 0.775788 0.979798 0.444444 0.771044 0.979798 0.454545 0.766299 0.979798 0.464646 0.761555 0.979798 0.474747 0.756811 0.979798 0.484848 0.752066 0.979798 0.494949 0.747322 0.979798 0.505051 0.742577 0.979798 0.515152 0.737833 0.979798 0.525253 0.733088 0.979798 0.535354 0.728344 0.979798 0.545455 0.723600 0.979798 0.555556 0.718855 0.979798 0.565657 0.714111 0.979798 0.575758 0.709366 0.979798 0.585859 0.704622 0.979798 0.595960 0.699878 0.979798 0.606061 0.695133 0.979798 0.616162 0.690389 0.979798 0.626263 0.685644 0.979798 0.636364 0.680900 0.979798 0.646465 0.676155 0.979798 0.656566 0.671411 0.979798 0.666667 0.666667 0.979798 0.676768 0.661922 0.979798 0.686869 0.657178 0.979798 0.696970 0.652433 0.979798 0.707071 0.647689 0.979798 0.717172 0.642945 0.979798 0.727273 0.638200 0.979798 0.737374 0.633456 0.979798 0.747475 0.628711 0.979798 0.757576 0.623967 0.979798 0.767677 0.619223 0.979798 0.777778 0.614478 0.979798 0.787879 0.609734 0.979798 0.797980 0.604989 0.979798 0.808081 0.600245 0.979798 0.818182 0.595500 0.979798 0.828283 0.590756 0.979798 0.838384 0.586012 0.979798 0.848485 0.581267 0.979798 0.858586 0.576523 0.979798 0.868687 0.571778 0.979798 0.878788 0.567034 0.979798 0.888889 0.562290 0.979798 0.898990 0.557545 0.979798 0.909091 0.552801 0.979798 0.919192 0.548056 0.979798 0.929293 0.543312 0.979798 0.939394 0.538567 0.979798 0.949495 0.533823 0.979798 0.959596 0.529079 0.979798 0.969697 0.524334 0.979798 0.979798 0.519590 0.979798 0.989899 0.514845 0.979798 1.000000 0.510101 0.989899 0.000000 0.989899 0.989899 0.010101 0.985002 0.989899 0.020202 0.980104 0.989899 0.030303 0.975207 0.989899 0.040404 0.970309 0.989899 0.050505 0.965412 0.989899 0.060606 0.960514 0.989899 0.070707 0.955617 0.989899 0.080808 0.950719 0.989899 0.090909 0.945822 0.989899 0.101010 0.940924 0.989899 0.111111 0.936027 0.989899 0.121212 0.931129 0.989899 0.131313 0.926232 0.989899 0.141414 0.921335 0.989899 0.151515 0.916437 0.989899 0.161616 0.911540 0.989899 0.171717 0.906642 0.989899 0.181818 0.901745 0.989899 0.191919 0.896847 0.989899 0.202020 0.891950 0.989899 0.212121 0.887052 0.989899 0.222222 0.882155 0.989899 0.232323 0.877257 0.989899 0.242424 0.872360 0.989899 0.252525 0.867463 0.989899 0.262626 0.862565 0.989899 0.272727 0.857668 0.989899 0.282828 0.852770 0.989899 0.292929 0.847873 0.989899 0.303030 0.842975 0.989899 0.313131 0.838078 0.989899 0.323232 0.833180 0.989899 0.333333 0.828283 0.989899 0.343434 0.823385 0.989899 0.353535 0.818488 0.989899 0.363636 0.813590 0.989899 0.373737 0.808693 0.989899 0.383838 0.803796 0.989899 0.393939 0.798898 0.989899 0.404040 0.794001 0.989899 0.414141 0.789103 0.989899 0.424242 0.784206 0.989899 0.434343 0.779308 0.989899 0.444444 0.774411 0.989899 0.454545 0.769513 0.989899 0.464646 0.764616 0.989899 0.474747 0.759718 0.989899 0.484848 0.754821 0.989899 0.494949 0.749923 0.989899 0.505051 0.745026 0.989899 0.515152 0.740129 0.989899 0.525253 0.735231 0.989899 0.535354 0.730334 0.989899 0.545455 0.725436 0.989899 0.555556 0.720539 0.989899 0.565657 0.715641 0.989899 0.575758 0.710744 0.989899 0.585859 0.705846 0.989899 0.595960 0.700949 0.989899 0.606061 0.696051 0.989899 0.616162 0.691154 0.989899 0.626263 0.686257 0.989899 0.636364 0.681359 0.989899 0.646465 0.676462 0.989899 0.656566 0.671564 0.989899 0.666667 0.666667 0.989899 0.676768 0.661769 0.989899 0.686869 0.656872 0.989899 0.696970 0.651974 0.989899 0.707071 0.647077 0.989899 0.717172 0.642179 0.989899 0.727273 0.637282 0.989899 0.737374 0.632384 0.989899 0.747475 0.627487 0.989899 0.757576 0.622590 0.989899 0.767677 0.617692 0.989899 0.777778 0.612795 0.989899 0.787879 0.607897 0.989899 0.797980 0.603000 0.989899 0.808081 0.598102 0.989899 0.818182 0.593205 0.989899 0.828283 0.588307 0.989899 0.838384 0.583410 0.989899 0.848485 0.578512 0.989899 0.858586 0.573615 0.989899 0.868687 0.568717 0.989899 0.878788 0.563820 0.989899 0.888889 0.558923 0.989899 0.898990 0.554025 0.989899 0.909091 0.549128 0.989899 0.919192 0.544230 0.989899 0.929293 0.539333 0.989899 0.939394 0.534435 0.989899 0.949495 0.529538 0.989899 0.959596 0.524640 0.989899 0.969697 0.519743 0.989899 0.979798 0.514845 0.989899 0.989899 0.509948 0.989899 1.000000 0.505051 1.000000 0.000000 1.000000 1.000000 0.010101 0.994949 1.000000 0.020202 0.989899 1.000000 0.030303 0.984848 1.000000 0.040404 0.979798 1.000000 0.050505 0.974747 1.000000 0.060606 0.969697 1.000000 0.070707 0.964646 1.000000 0.080808 0.959596 1.000000 0.090909 0.954545 1.000000 0.101010 0.949495 1.000000 0.111111 0.944444 1.000000 0.121212 0.939394 1.000000 0.131313 0.934343 1.000000 0.141414 0.929293 1.000000 0.151515 0.924242 1.000000 0.161616 0.919192 1.000000 0.171717 0.914141 1.000000 0.181818 0.909091 1.000000 0.191919 0.904040 1.000000 0.202020 0.898990 1.000000 0.212121 0.893939 1.000000 0.222222 0.888889 1.000000 0.232323 0.883838 1.000000 0.242424 0.878788 1.000000 0.252525 0.873737 1.000000 0.262626 0.868687 1.000000 0.272727 0.863636 1.000000 0.282828 0.858586 1.000000 0.292929 0.853535 1.000000 0.303030 0.848485 1.000000 0.313131 0.843434 1.000000 0.323232 0.838384 1.000000 0.333333 0.833333 1.000000 0.343434 0.828283 1.000000 0.353535 0.823232 1.000000 0.363636 0.818182 1.000000 0.373737 0.813131 1.000000 0.383838 0.808081 1.000000 0.393939 0.803030 1.000000 0.404040 0.797980 1.000000 0.414141 0.792929 1.000000 0.424242 0.787879 1.000000 0.434343 0.782828 1.000000 0.444444 0.777778 1.000000 0.454545 0.772727 1.000000 0.464646 0.767677 1.000000 0.474747 0.762626 1.000000 0.484848 0.757576 1.000000 0.494949 0.752525 1.000000 0.505051 0.747475 1.000000 0.515152 0.742424 1.000000 0.525253 0.737374 1.000000 0.535354 0.732323 1.000000 0.545455 0.727273 1.000000 0.555556 0.722222 1.000000 0.565657 0.717172 1.000000 0.575758 0.712121 1.000000 0.585859 0.707071 1.000000 0.595960 0.702020 1.000000 0.606061 0.696970 1.000000 0.616162 0.691919 1.000000 0.626263 0.686869 1.000000 0.636364 0.681818 1.000000 0.646465 0.676768 1.000000 0.656566 0.671717 1.000000 0.666667 0.666667 1.000000 0.676768 0.661616 1.000000 0.686869 0.656566 1.000000 0.696970 0.651515 1.000000 0.707071 0.646465 1.000000 0.717172 0.641414 1.000000 0.727273 0.636364 1.000000 0.737374 0.631313 1.000000 0.747475 0.626263 1.000000 0.757576 0.621212 1.000000 0.767677 0.616162 1.000000 0.777778 0.611111 1.000000 0.787879 0.606061 1.000000 0.797980 0.601010 1.000000 0.808081 0.595960 1.000000 0.818182 0.590909 1.000000 0.828283 0.585859 1.000000 0.838384 0.580808 1.000000 0.848485 0.575758 1.000000 0.858586 0.570707 1.000000 0.868687 0.565657 1.000000 0.878788 0.560606 1.000000 0.888889 0.555556 1.000000 0.898990 0.550505 1.000000 0.909091 0.545455 1.000000 0.919192 0.540404 1.000000 0.929293 0.535354 1.000000 0.939394 0.530303 1.000000 0.949495 0.525253 1.000000 0.959596 0.520202 1.000000 0.969697 0.515152 1.000000 0.979798 0.510101 1.000000 0.989899 0.505051 1.000000 1.000000 0.500000 gsl/doc/examples/fftmr.c0000644000175000017500000000231313536674414013576 0ustar eddedd#include #include #include #include #define REAL(z,i) ((z)[2*(i)]) #define IMAG(z,i) ((z)[2*(i)+1]) int main (void) { int i; const int n = 630; double data[2*n]; gsl_fft_complex_wavetable * wavetable; gsl_fft_complex_workspace * workspace; for (i = 0; i < n; i++) { REAL(data,i) = 0.0; IMAG(data,i) = 0.0; } data[0] = 1.0; for (i = 1; i <= 10; i++) { REAL(data,i) = REAL(data,n-i) = 1.0; } for (i = 0; i < n; i++) { printf ("%d: %e %e\n", i, REAL(data,i), IMAG(data,i)); } printf ("\n"); wavetable = gsl_fft_complex_wavetable_alloc (n); workspace = gsl_fft_complex_workspace_alloc (n); for (i = 0; i < (int) wavetable->nf; i++) { printf ("# factor %d: %zu\n", i, wavetable->factor[i]); } gsl_fft_complex_forward (data, 1, n, wavetable, workspace); for (i = 0; i < n; i++) { printf ("%d: %e %e\n", i, REAL(data,i), IMAG(data,i)); } gsl_fft_complex_wavetable_free (wavetable); gsl_fft_complex_workspace_free (workspace); return 0; } gsl/doc/examples/fitreg.txt0000755000175000017500000002432113536674414014343 0ustar eddedd2.224664e+02 1.608585e+02 7.089304e-01 2.590135e-02 2.123781e+02 1.536944e+02 7.418066e-01 2.364670e-02 2.027474e+02 1.465757e+02 7.745418e-01 2.150793e-02 1.935533e+02 1.395346e+02 8.069972e-01 1.949208e-02 1.847762e+02 1.326021e+02 8.390388e-01 1.760414e-02 1.763970e+02 1.258080e+02 8.705396e-01 1.584709e-02 1.683979e+02 1.191799e+02 9.013813e-01 1.422193e-02 1.607615e+02 1.127436e+02 9.314562e-01 1.272784e-02 1.534714e+02 1.065220e+02 9.606681e-01 1.136232e-02 1.465119e+02 1.005353e+02 9.889334e-01 1.012146e-02 1.398679e+02 9.480095e+01 1.016182e+00 9.000116e-03 1.335253e+02 8.933330e+01 1.042357e+00 7.992184e-03 1.274703e+02 8.414375e+01 1.067414e+00 7.090842e-03 1.216898e+02 7.924077e+01 1.091323e+00 6.288777e-03 1.161715e+02 7.462999e+01 1.114065e+00 5.578398e-03 1.109034e+02 7.031430e+01 1.135633e+00 4.952031e-03 1.058743e+02 6.629405e+01 1.156030e+00 4.402076e-03 1.010731e+02 6.256714e+01 1.175267e+00 3.921145e-03 9.648973e+01 5.912926e+01 1.193366e+00 3.502162e-03 9.211417e+01 5.597400e+01 1.210352e+00 3.138444e-03 8.793704e+01 5.309306e+01 1.226260e+00 2.823755e-03 8.394932e+01 5.047643e+01 1.241126e+00 2.552337e-03 8.014244e+01 4.811257e+01 1.254992e+00 2.318922e-03 7.650819e+01 4.598859e+01 1.267902e+00 2.118738e-03 7.303874e+01 4.409052e+01 1.279901e+00 1.947488e-03 6.972663e+01 4.240351e+01 1.291035e+00 1.801336e-03 6.656471e+01 4.091211e+01 1.301353e+00 1.676878e-03 6.354617e+01 3.960054e+01 1.310901e+00 1.571107e-03 6.066452e+01 3.845296e+01 1.319726e+00 1.481387e-03 5.791354e+01 3.745374e+01 1.327872e+00 1.405414e-03 5.528732e+01 3.658771e+01 1.335385e+00 1.341185e-03 5.278018e+01 3.584034e+01 1.342306e+00 1.286966e-03 5.038674e+01 3.519797e+01 1.348676e+00 1.241257e-03 4.810183e+01 3.464788e+01 1.354534e+00 1.202773e-03 4.592054e+01 3.417841e+01 1.359918e+00 1.170408e-03 4.383816e+01 3.377896e+01 1.364862e+00 1.143218e-03 4.185022e+01 3.344003e+01 1.369399e+00 1.120399e-03 3.995242e+01 3.315315e+01 1.373561e+00 1.101264e-03 3.814068e+01 3.291086e+01 1.377375e+00 1.085232e-03 3.641110e+01 3.270663e+01 1.380870e+00 1.071811e-03 3.475995e+01 3.253478e+01 1.384071e+00 1.060581e-03 3.318368e+01 3.239039e+01 1.387001e+00 1.051193e-03 3.167889e+01 3.226924e+01 1.389682e+00 1.043348e-03 3.024233e+01 3.216770e+01 1.392134e+00 1.036796e-03 2.887092e+01 3.208269e+01 1.394377e+00 1.031327e-03 2.756170e+01 3.201158e+01 1.396427e+00 1.026763e-03 2.631185e+01 3.195215e+01 1.398300e+00 1.022957e-03 2.511868e+01 3.190252e+01 1.400012e+00 1.019783e-03 2.397961e+01 3.186109e+01 1.401576e+00 1.017139e-03 2.289220e+01 3.182652e+01 1.403005e+00 1.014935e-03 2.185410e+01 3.179770e+01 1.404309e+00 1.013100e-03 2.086307e+01 3.177368e+01 1.405500e+00 1.011571e-03 1.991699e+01 3.175367e+01 1.406587e+00 1.010299e-03 1.901380e+01 3.173700e+01 1.407579e+00 1.009240e-03 1.815158e+01 3.172311e+01 1.408484e+00 1.008358e-03 1.732845e+01 3.171156e+01 1.409310e+00 1.007625e-03 1.654265e+01 3.170194e+01 1.410064e+00 1.007015e-03 1.579248e+01 3.169394e+01 1.410752e+00 1.006508e-03 1.507634e+01 3.168728e+01 1.411379e+00 1.006086e-03 1.439266e+01 3.168175e+01 1.411951e+00 1.005735e-03 1.373999e+01 3.167714e+01 1.412473e+00 1.005444e-03 1.311692e+01 3.167331e+01 1.412949e+00 1.005201e-03 1.252210e+01 3.167013e+01 1.413383e+00 1.005000e-03 1.195426e+01 3.166748e+01 1.413779e+00 1.004832e-03 1.141216e+01 3.166528e+01 1.414139e+00 1.004693e-03 1.089465e+01 3.166345e+01 1.414468e+00 1.004577e-03 1.040061e+01 3.166193e+01 1.414769e+00 1.004481e-03 9.928969e+00 3.166067e+01 1.415042e+00 1.004402e-03 9.478716e+00 3.165962e+01 1.415291e+00 1.004335e-03 9.048881e+00 3.165874e+01 1.415519e+00 1.004280e-03 8.638538e+00 3.165802e+01 1.415726e+00 1.004235e-03 8.246803e+00 3.165741e+01 1.415915e+00 1.004197e-03 7.872832e+00 3.165691e+01 1.416087e+00 1.004165e-03 7.515820e+00 3.165650e+01 1.416244e+00 1.004139e-03 7.174997e+00 3.165615e+01 1.416388e+00 1.004117e-03 6.849630e+00 3.165587e+01 1.416518e+00 1.004099e-03 6.539017e+00 3.165563e+01 1.416637e+00 1.004084e-03 6.242490e+00 3.165543e+01 1.416745e+00 1.004072e-03 5.959409e+00 3.165526e+01 1.416844e+00 1.004061e-03 5.689166e+00 3.165513e+01 1.416934e+00 1.004053e-03 5.431177e+00 3.165501e+01 1.417017e+00 1.004046e-03 5.184887e+00 3.165492e+01 1.417091e+00 1.004040e-03 4.949766e+00 3.165484e+01 1.417160e+00 1.004035e-03 4.725307e+00 3.165477e+01 1.417222e+00 1.004031e-03 4.511027e+00 3.165472e+01 1.417279e+00 1.004028e-03 4.306464e+00 3.165467e+01 1.417331e+00 1.004025e-03 4.111177e+00 3.165464e+01 1.417378e+00 1.004022e-03 3.924746e+00 3.165461e+01 1.417421e+00 1.004021e-03 3.746769e+00 3.165458e+01 1.417460e+00 1.004019e-03 3.576863e+00 3.165456e+01 1.417496e+00 1.004018e-03 3.414661e+00 3.165454e+01 1.417529e+00 1.004017e-03 3.259815e+00 3.165453e+01 1.417559e+00 1.004016e-03 3.111991e+00 3.165451e+01 1.417587e+00 1.004015e-03 2.970871e+00 3.165450e+01 1.417612e+00 1.004014e-03 2.836149e+00 3.165449e+01 1.417635e+00 1.004014e-03 2.707537e+00 3.165449e+01 1.417657e+00 1.004013e-03 2.584758e+00 3.165448e+01 1.417676e+00 1.004013e-03 2.467546e+00 3.165448e+01 1.417695e+00 1.004013e-03 2.355649e+00 3.165447e+01 1.417712e+00 1.004012e-03 2.248826e+00 3.165447e+01 1.417728e+00 1.004012e-03 2.146848e+00 3.165446e+01 1.417743e+00 1.004012e-03 2.049494e+00 3.165446e+01 1.417758e+00 1.004012e-03 1.956555e+00 3.165446e+01 1.417772e+00 1.004012e-03 1.867830e+00 3.165446e+01 1.417786e+00 1.004012e-03 1.783129e+00 3.165445e+01 1.417801e+00 1.004012e-03 1.702269e+00 3.165445e+01 1.417815e+00 1.004012e-03 1.625075e+00 3.165445e+01 1.417830e+00 1.004011e-03 1.551383e+00 3.165445e+01 1.417846e+00 1.004011e-03 1.481031e+00 3.165445e+01 1.417863e+00 1.004011e-03 1.413870e+00 3.165444e+01 1.417882e+00 1.004011e-03 1.349755e+00 3.165444e+01 1.417903e+00 1.004011e-03 1.288547e+00 3.165444e+01 1.417926e+00 1.004011e-03 1.230115e+00 3.165444e+01 1.417954e+00 1.004011e-03 1.174333e+00 3.165444e+01 1.417985e+00 1.004011e-03 1.121080e+00 3.165443e+01 1.418022e+00 1.004011e-03 1.070242e+00 3.165443e+01 1.418066e+00 1.004011e-03 1.021709e+00 3.165443e+01 1.418117e+00 1.004011e-03 9.753771e-01 3.165443e+01 1.418178e+00 1.004011e-03 9.311463e-01 3.165442e+01 1.418250e+00 1.004011e-03 8.889213e-01 3.165442e+01 1.418337e+00 1.004011e-03 8.486110e-01 3.165442e+01 1.418441e+00 1.004010e-03 8.101288e-01 3.165441e+01 1.418565e+00 1.004010e-03 7.733915e-01 3.165441e+01 1.418714e+00 1.004010e-03 7.383203e-01 3.165440e+01 1.418893e+00 1.004010e-03 7.048394e-01 3.165440e+01 1.419108e+00 1.004010e-03 6.728768e-01 3.165439e+01 1.419366e+00 1.004010e-03 6.423636e-01 3.165439e+01 1.419676e+00 1.004010e-03 6.132340e-01 3.165438e+01 1.420049e+00 1.004009e-03 5.854255e-01 3.165437e+01 1.420498e+00 1.004009e-03 5.588780e-01 3.165437e+01 1.421037e+00 1.004009e-03 5.335343e-01 3.165436e+01 1.421685e+00 1.004009e-03 5.093399e-01 3.165435e+01 1.422465e+00 1.004008e-03 4.862427e-01 3.165434e+01 1.423403e+00 1.004008e-03 4.641929e-01 3.165433e+01 1.424530e+00 1.004008e-03 4.431429e-01 3.165431e+01 1.425885e+00 1.004007e-03 4.230476e-01 3.165430e+01 1.427514e+00 1.004007e-03 4.038635e-01 3.165429e+01 1.429470e+00 1.004007e-03 3.855493e-01 3.165427e+01 1.431820e+00 1.004006e-03 3.680657e-01 3.165425e+01 1.434642e+00 1.004006e-03 3.513749e-01 3.165423e+01 1.438028e+00 1.004005e-03 3.354409e-01 3.165421e+01 1.442091e+00 1.004004e-03 3.202296e-01 3.165419e+01 1.446961e+00 1.004004e-03 3.057080e-01 3.165416e+01 1.452795e+00 1.004003e-03 2.918449e-01 3.165413e+01 1.459779e+00 1.004002e-03 2.786105e-01 3.165410e+01 1.468130e+00 1.004001e-03 2.659763e-01 3.165406e+01 1.478105e+00 1.004000e-03 2.539149e-01 3.165403e+01 1.490005e+00 1.003999e-03 2.424006e-01 3.165399e+01 1.504178e+00 1.003998e-03 2.314083e-01 3.165394e+01 1.521030e+00 1.003996e-03 2.209146e-01 3.165389e+01 1.541026e+00 1.003995e-03 2.108967e-01 3.165384e+01 1.564700e+00 1.003993e-03 2.013331e-01 3.165378e+01 1.592654e+00 1.003992e-03 1.922031e-01 3.165371e+01 1.625568e+00 1.003990e-03 1.834872e-01 3.165364e+01 1.664198e+00 1.003988e-03 1.751666e-01 3.165357e+01 1.709378e+00 1.003985e-03 1.672232e-01 3.165348e+01 1.762018e+00 1.003983e-03 1.596401e-01 3.165339e+01 1.823102e+00 1.003980e-03 1.524008e-01 3.165329e+01 1.893683e+00 1.003977e-03 1.454898e-01 3.165318e+01 1.974875e+00 1.003974e-03 1.388923e-01 3.165306e+01 2.067851e+00 1.003971e-03 1.325939e-01 3.165293e+01 2.173834e+00 1.003967e-03 1.265811e-01 3.165279e+01 2.294096e+00 1.003963e-03 1.208410e-01 3.165263e+01 2.429951e+00 1.003959e-03 1.153611e-01 3.165246e+01 2.582761e+00 1.003954e-03 1.101298e-01 3.165228e+01 2.753932e+00 1.003949e-03 1.051357e-01 3.165208e+01 2.944919e+00 1.003943e-03 1.003681e-01 3.165186e+01 3.157231e+00 1.003937e-03 9.581665e-02 3.165163e+01 3.392436e+00 1.003930e-03 9.147162e-02 3.165138e+01 3.652162e+00 1.003923e-03 8.732362e-02 3.165110e+01 3.938104e+00 1.003916e-03 8.336372e-02 3.165081e+01 4.252021e+00 1.003908e-03 7.958340e-02 3.165049e+01 4.595739e+00 1.003899e-03 7.597450e-02 3.165015e+01 4.971143e+00 1.003890e-03 7.252925e-02 3.164978e+01 5.380172e+00 1.003880e-03 6.924024e-02 3.164938e+01 5.824807e+00 1.003870e-03 6.610038e-02 3.164896e+01 6.307055e+00 1.003859e-03 6.310290e-02 3.164851e+01 6.828932e+00 1.003847e-03 6.024135e-02 3.164803e+01 7.392437e+00 1.003835e-03 5.750956e-02 3.164752e+01 7.999525e+00 1.003822e-03 5.490165e-02 3.164698e+01 8.652072e+00 1.003809e-03 5.241201e-02 3.164640e+01 9.351841e+00 1.003795e-03 5.003526e-02 3.164580e+01 1.010044e+01 1.003781e-03 4.776629e-02 3.164517e+01 1.089926e+01 1.003766e-03 4.560022e-02 3.164451e+01 1.174946e+01 1.003752e-03 4.353237e-02 3.164382e+01 1.265188e+01 1.003737e-03 4.155829e-02 3.164310e+01 1.360703e+01 1.003722e-03 3.967373e-02 3.164236e+01 1.461497e+01 1.003707e-03 3.787463e-02 3.164160e+01 1.567535e+01 1.003693e-03 3.615711e-02 3.164082e+01 1.678729e+01 1.003679e-03 3.451748e-02 3.164002e+01 1.794939e+01 1.003665e-03 3.295221e-02 3.163921e+01 1.915966e+01 1.003653e-03 3.145791e-02 3.163840e+01 2.041553e+01 1.003641e-03 3.003138e-02 3.163758e+01 2.171386e+01 1.003631e-03 2.866953e-02 3.163677e+01 2.305089e+01 1.003622e-03 2.736944e-02 3.163596e+01 2.442232e+01 1.003614e-03 2.612831e-02 3.163517e+01 2.582333e+01 1.003608e-03 2.494346e-02 3.163439e+01 2.724862e+01 1.003604e-03 2.381234e-02 3.163363e+01 2.869253e+01 1.003602e-03 2.273251e-02 3.163290e+01 3.014906e+01 1.003602e-03 2.170165e-02 3.163219e+01 3.161203e+01 1.003604e-03 31.654720 1.417279 2.320286e-02 1.003602e-03 gsl/doc/examples/Makefile.in0000664000175000017500000017706414057135461014374 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = blas$(EXEEXT) block$(EXEEXT) cblas$(EXEEXT) \ cdf$(EXEEXT) cheb$(EXEEXT) combination$(EXEEXT) \ multiset$(EXEEXT) const$(EXEEXT) diff$(EXEEXT) eigen$(EXEEXT) \ fft$(EXEEXT) fftmr$(EXEEXT) fftreal$(EXEEXT) \ filt_edge$(EXEEXT) fitting$(EXEEXT) fitting2$(EXEEXT) \ fitting3$(EXEEXT) fitreg$(EXEEXT) fitreg2$(EXEEXT) \ gaussfilt$(EXEEXT) gaussfilt2$(EXEEXT) histogram$(EXEEXT) \ histogram2d$(EXEEXT) ieee$(EXEEXT) ieeeround$(EXEEXT) \ impulse$(EXEEXT) integration$(EXEEXT) integration2$(EXEEXT) \ interp$(EXEEXT) interp2d$(EXEEXT) intro$(EXEEXT) \ linalglu$(EXEEXT) largefit$(EXEEXT) matrix$(EXEEXT) \ matrixw$(EXEEXT) min$(EXEEXT) monte$(EXEEXT) movstat1$(EXEEXT) \ movstat2$(EXEEXT) movstat3$(EXEEXT) ntupler$(EXEEXT) \ ntuplew$(EXEEXT) ode-initval$(EXEEXT) permseq$(EXEEXT) \ permshuffle$(EXEEXT) polyroots$(EXEEXT) qrng$(EXEEXT) \ randpoisson$(EXEEXT) randwalk$(EXEEXT) rng$(EXEEXT) \ rngunif$(EXEEXT) robfit$(EXEEXT) rootnewt$(EXEEXT) \ roots$(EXEEXT) siman$(EXEEXT) siman_tsp$(EXEEXT) \ sortsmall$(EXEEXT) specfun$(EXEEXT) specfun_e$(EXEEXT) \ rstat$(EXEEXT) rquantile$(EXEEXT) stat$(EXEEXT) \ statsort$(EXEEXT) sum$(EXEEXT) vector$(EXEEXT) \ vectorr$(EXEEXT) vectorview$(EXEEXT) vectorw$(EXEEXT) \ dwt$(EXEEXT) nlfit$(EXEEXT) nlfit2$(EXEEXT) nlfit2b$(EXEEXT) \ nlfit3$(EXEEXT) nlfit4$(EXEEXT) interpp$(EXEEXT) \ eigen_nonsymm$(EXEEXT) bspline$(EXEEXT) poisson$(EXEEXT) \ interp_compare$(EXEEXT) spmatrix$(EXEEXT) subdir = doc/examples ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_noinst_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = blas_SOURCES = blas.c blas_OBJECTS = blas.$(OBJEXT) blas_LDADD = $(LDADD) blas_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = block_SOURCES = block.c block_OBJECTS = block.$(OBJEXT) block_LDADD = $(LDADD) block_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la bspline_SOURCES = bspline.c bspline_OBJECTS = bspline.$(OBJEXT) bspline_LDADD = $(LDADD) bspline_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la cblas_SOURCES = cblas.c cblas_OBJECTS = cblas.$(OBJEXT) cblas_LDADD = $(LDADD) cblas_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la cdf_SOURCES = cdf.c cdf_OBJECTS = cdf.$(OBJEXT) cdf_LDADD = $(LDADD) cdf_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la cheb_SOURCES = cheb.c cheb_OBJECTS = cheb.$(OBJEXT) cheb_LDADD = $(LDADD) cheb_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la combination_SOURCES = combination.c combination_OBJECTS = combination.$(OBJEXT) combination_LDADD = $(LDADD) combination_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la const_SOURCES = const.c const_OBJECTS = const.$(OBJEXT) const_LDADD = $(LDADD) const_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la diff_SOURCES = diff.c diff_OBJECTS = diff.$(OBJEXT) diff_LDADD = $(LDADD) diff_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la dwt_SOURCES = dwt.c dwt_OBJECTS = dwt.$(OBJEXT) dwt_LDADD = $(LDADD) dwt_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la eigen_SOURCES = eigen.c eigen_OBJECTS = eigen.$(OBJEXT) eigen_LDADD = $(LDADD) eigen_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la eigen_nonsymm_SOURCES = eigen_nonsymm.c eigen_nonsymm_OBJECTS = eigen_nonsymm.$(OBJEXT) eigen_nonsymm_LDADD = $(LDADD) eigen_nonsymm_DEPENDENCIES = ../../libgsl.la \ ../../cblas/libgslcblas.la fft_SOURCES = fft.c fft_OBJECTS = fft.$(OBJEXT) fft_LDADD = $(LDADD) fft_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la fftmr_SOURCES = fftmr.c fftmr_OBJECTS = fftmr.$(OBJEXT) fftmr_LDADD = $(LDADD) fftmr_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la fftreal_SOURCES = fftreal.c fftreal_OBJECTS = fftreal.$(OBJEXT) fftreal_LDADD = $(LDADD) fftreal_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la filt_edge_SOURCES = filt_edge.c filt_edge_OBJECTS = filt_edge.$(OBJEXT) filt_edge_LDADD = $(LDADD) filt_edge_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la fitreg_SOURCES = fitreg.c fitreg_OBJECTS = fitreg.$(OBJEXT) fitreg_LDADD = $(LDADD) fitreg_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la fitreg2_SOURCES = fitreg2.c fitreg2_OBJECTS = fitreg2.$(OBJEXT) fitreg2_LDADD = $(LDADD) fitreg2_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la fitting_SOURCES = fitting.c fitting_OBJECTS = fitting.$(OBJEXT) fitting_LDADD = $(LDADD) fitting_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la fitting2_SOURCES = fitting2.c fitting2_OBJECTS = fitting2.$(OBJEXT) fitting2_LDADD = $(LDADD) fitting2_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la fitting3_SOURCES = fitting3.c fitting3_OBJECTS = fitting3.$(OBJEXT) fitting3_LDADD = $(LDADD) fitting3_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la gaussfilt_SOURCES = gaussfilt.c gaussfilt_OBJECTS = gaussfilt.$(OBJEXT) gaussfilt_LDADD = $(LDADD) gaussfilt_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la gaussfilt2_SOURCES = gaussfilt2.c gaussfilt2_OBJECTS = gaussfilt2.$(OBJEXT) gaussfilt2_LDADD = $(LDADD) gaussfilt2_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la histogram_SOURCES = histogram.c histogram_OBJECTS = histogram.$(OBJEXT) histogram_LDADD = $(LDADD) histogram_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la histogram2d_SOURCES = histogram2d.c histogram2d_OBJECTS = histogram2d.$(OBJEXT) histogram2d_LDADD = $(LDADD) histogram2d_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la ieee_SOURCES = ieee.c ieee_OBJECTS = ieee.$(OBJEXT) ieee_LDADD = $(LDADD) ieee_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la ieeeround_SOURCES = ieeeround.c ieeeround_OBJECTS = ieeeround.$(OBJEXT) ieeeround_LDADD = $(LDADD) ieeeround_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la impulse_SOURCES = impulse.c impulse_OBJECTS = impulse.$(OBJEXT) impulse_LDADD = $(LDADD) impulse_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la integration_SOURCES = integration.c integration_OBJECTS = integration.$(OBJEXT) integration_LDADD = $(LDADD) integration_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la integration2_SOURCES = integration2.c integration2_OBJECTS = integration2.$(OBJEXT) integration2_LDADD = $(LDADD) integration2_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la interp_SOURCES = interp.c interp_OBJECTS = interp.$(OBJEXT) interp_LDADD = $(LDADD) interp_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la interp2d_SOURCES = interp2d.c interp2d_OBJECTS = interp2d.$(OBJEXT) interp2d_LDADD = $(LDADD) interp2d_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la interp_compare_SOURCES = interp_compare.c interp_compare_OBJECTS = interp_compare.$(OBJEXT) interp_compare_LDADD = $(LDADD) interp_compare_DEPENDENCIES = ../../libgsl.la \ ../../cblas/libgslcblas.la interpp_SOURCES = interpp.c interpp_OBJECTS = interpp.$(OBJEXT) interpp_LDADD = $(LDADD) interpp_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la intro_SOURCES = intro.c intro_OBJECTS = intro.$(OBJEXT) intro_LDADD = $(LDADD) intro_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la largefit_SOURCES = largefit.c largefit_OBJECTS = largefit.$(OBJEXT) largefit_LDADD = $(LDADD) largefit_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la linalglu_SOURCES = linalglu.c linalglu_OBJECTS = linalglu.$(OBJEXT) linalglu_LDADD = $(LDADD) linalglu_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la matrix_SOURCES = matrix.c matrix_OBJECTS = matrix.$(OBJEXT) matrix_LDADD = $(LDADD) matrix_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la matrixw_SOURCES = matrixw.c matrixw_OBJECTS = matrixw.$(OBJEXT) matrixw_LDADD = $(LDADD) matrixw_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la min_SOURCES = min.c min_OBJECTS = min.$(OBJEXT) min_LDADD = $(LDADD) min_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la monte_SOURCES = monte.c monte_OBJECTS = monte.$(OBJEXT) monte_LDADD = $(LDADD) monte_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la movstat1_SOURCES = movstat1.c movstat1_OBJECTS = movstat1.$(OBJEXT) movstat1_LDADD = $(LDADD) movstat1_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la movstat2_SOURCES = movstat2.c movstat2_OBJECTS = movstat2.$(OBJEXT) movstat2_LDADD = $(LDADD) movstat2_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la movstat3_SOURCES = movstat3.c movstat3_OBJECTS = movstat3.$(OBJEXT) movstat3_LDADD = $(LDADD) movstat3_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la multiset_SOURCES = multiset.c multiset_OBJECTS = multiset.$(OBJEXT) multiset_LDADD = $(LDADD) multiset_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la nlfit_SOURCES = nlfit.c nlfit_OBJECTS = nlfit.$(OBJEXT) nlfit_LDADD = $(LDADD) nlfit_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la nlfit2_SOURCES = nlfit2.c nlfit2_OBJECTS = nlfit2.$(OBJEXT) nlfit2_LDADD = $(LDADD) nlfit2_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la nlfit2b_SOURCES = nlfit2b.c nlfit2b_OBJECTS = nlfit2b.$(OBJEXT) nlfit2b_LDADD = $(LDADD) nlfit2b_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la nlfit3_SOURCES = nlfit3.c nlfit3_OBJECTS = nlfit3.$(OBJEXT) nlfit3_LDADD = $(LDADD) nlfit3_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la nlfit4_SOURCES = nlfit4.c nlfit4_OBJECTS = nlfit4.$(OBJEXT) nlfit4_LDADD = $(LDADD) nlfit4_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la ntupler_SOURCES = ntupler.c ntupler_OBJECTS = ntupler.$(OBJEXT) ntupler_LDADD = $(LDADD) ntupler_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la ntuplew_SOURCES = ntuplew.c ntuplew_OBJECTS = ntuplew.$(OBJEXT) ntuplew_LDADD = $(LDADD) ntuplew_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la ode_initval_SOURCES = ode-initval.c ode_initval_OBJECTS = ode-initval.$(OBJEXT) ode_initval_LDADD = $(LDADD) ode_initval_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la permseq_SOURCES = permseq.c permseq_OBJECTS = permseq.$(OBJEXT) permseq_LDADD = $(LDADD) permseq_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la permshuffle_SOURCES = permshuffle.c permshuffle_OBJECTS = permshuffle.$(OBJEXT) permshuffle_LDADD = $(LDADD) permshuffle_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la poisson_SOURCES = poisson.c poisson_OBJECTS = poisson.$(OBJEXT) poisson_LDADD = $(LDADD) poisson_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la polyroots_SOURCES = polyroots.c polyroots_OBJECTS = polyroots.$(OBJEXT) polyroots_LDADD = $(LDADD) polyroots_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la qrng_SOURCES = qrng.c qrng_OBJECTS = qrng.$(OBJEXT) qrng_LDADD = $(LDADD) qrng_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la randpoisson_SOURCES = randpoisson.c randpoisson_OBJECTS = randpoisson.$(OBJEXT) randpoisson_LDADD = $(LDADD) randpoisson_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la randwalk_SOURCES = randwalk.c randwalk_OBJECTS = randwalk.$(OBJEXT) randwalk_LDADD = $(LDADD) randwalk_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la rng_SOURCES = rng.c rng_OBJECTS = rng.$(OBJEXT) rng_LDADD = $(LDADD) rng_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la rngunif_SOURCES = rngunif.c rngunif_OBJECTS = rngunif.$(OBJEXT) rngunif_LDADD = $(LDADD) rngunif_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la robfit_SOURCES = robfit.c robfit_OBJECTS = robfit.$(OBJEXT) robfit_LDADD = $(LDADD) robfit_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la rootnewt_SOURCES = rootnewt.c rootnewt_OBJECTS = rootnewt.$(OBJEXT) rootnewt_LDADD = $(LDADD) rootnewt_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la roots_SOURCES = roots.c roots_OBJECTS = roots.$(OBJEXT) roots_LDADD = $(LDADD) roots_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la rquantile_SOURCES = rquantile.c rquantile_OBJECTS = rquantile.$(OBJEXT) rquantile_LDADD = $(LDADD) rquantile_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la rstat_SOURCES = rstat.c rstat_OBJECTS = rstat.$(OBJEXT) rstat_LDADD = $(LDADD) rstat_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la siman_SOURCES = siman.c siman_OBJECTS = siman.$(OBJEXT) siman_LDADD = $(LDADD) siman_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la siman_tsp_SOURCES = siman_tsp.c siman_tsp_OBJECTS = siman_tsp.$(OBJEXT) siman_tsp_LDADD = $(LDADD) siman_tsp_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la sortsmall_SOURCES = sortsmall.c sortsmall_OBJECTS = sortsmall.$(OBJEXT) sortsmall_LDADD = $(LDADD) sortsmall_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la specfun_SOURCES = specfun.c specfun_OBJECTS = specfun.$(OBJEXT) specfun_LDADD = $(LDADD) specfun_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la specfun_e_SOURCES = specfun_e.c specfun_e_OBJECTS = specfun_e.$(OBJEXT) specfun_e_LDADD = $(LDADD) specfun_e_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la spmatrix_SOURCES = spmatrix.c spmatrix_OBJECTS = spmatrix.$(OBJEXT) spmatrix_LDADD = $(LDADD) spmatrix_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la stat_SOURCES = stat.c stat_OBJECTS = stat.$(OBJEXT) stat_LDADD = $(LDADD) stat_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la statsort_SOURCES = statsort.c statsort_OBJECTS = statsort.$(OBJEXT) statsort_LDADD = $(LDADD) statsort_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la sum_SOURCES = sum.c sum_OBJECTS = sum.$(OBJEXT) sum_LDADD = $(LDADD) sum_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la vector_SOURCES = vector.c vector_OBJECTS = vector.$(OBJEXT) vector_LDADD = $(LDADD) vector_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la vectorr_SOURCES = vectorr.c vectorr_OBJECTS = vectorr.$(OBJEXT) vectorr_LDADD = $(LDADD) vectorr_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la vectorview_SOURCES = vectorview.c vectorview_OBJECTS = vectorview.$(OBJEXT) vectorview_LDADD = $(LDADD) vectorview_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la vectorw_SOURCES = vectorw.c vectorw_OBJECTS = vectorw.$(OBJEXT) vectorw_LDADD = $(LDADD) vectorw_DEPENDENCIES = ../../libgsl.la ../../cblas/libgslcblas.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/blas.Po ./$(DEPDIR)/block.Po \ ./$(DEPDIR)/bspline.Po ./$(DEPDIR)/cblas.Po ./$(DEPDIR)/cdf.Po \ ./$(DEPDIR)/cheb.Po ./$(DEPDIR)/combination.Po \ ./$(DEPDIR)/const.Po ./$(DEPDIR)/diff.Po ./$(DEPDIR)/dwt.Po \ ./$(DEPDIR)/eigen.Po ./$(DEPDIR)/eigen_nonsymm.Po \ ./$(DEPDIR)/fft.Po ./$(DEPDIR)/fftmr.Po ./$(DEPDIR)/fftreal.Po \ ./$(DEPDIR)/filt_edge.Po ./$(DEPDIR)/fitreg.Po \ ./$(DEPDIR)/fitreg2.Po ./$(DEPDIR)/fitting.Po \ ./$(DEPDIR)/fitting2.Po ./$(DEPDIR)/fitting3.Po \ ./$(DEPDIR)/gaussfilt.Po ./$(DEPDIR)/gaussfilt2.Po \ ./$(DEPDIR)/histogram.Po ./$(DEPDIR)/histogram2d.Po \ ./$(DEPDIR)/ieee.Po ./$(DEPDIR)/ieeeround.Po \ ./$(DEPDIR)/impulse.Po ./$(DEPDIR)/integration.Po \ ./$(DEPDIR)/integration2.Po ./$(DEPDIR)/interp.Po \ ./$(DEPDIR)/interp2d.Po ./$(DEPDIR)/interp_compare.Po \ ./$(DEPDIR)/interpp.Po ./$(DEPDIR)/intro.Po \ ./$(DEPDIR)/largefit.Po ./$(DEPDIR)/linalglu.Po \ ./$(DEPDIR)/matrix.Po ./$(DEPDIR)/matrixw.Po \ ./$(DEPDIR)/min.Po ./$(DEPDIR)/monte.Po \ ./$(DEPDIR)/movstat1.Po ./$(DEPDIR)/movstat2.Po \ ./$(DEPDIR)/movstat3.Po ./$(DEPDIR)/multiset.Po \ ./$(DEPDIR)/nlfit.Po ./$(DEPDIR)/nlfit2.Po \ ./$(DEPDIR)/nlfit2b.Po ./$(DEPDIR)/nlfit3.Po \ ./$(DEPDIR)/nlfit4.Po ./$(DEPDIR)/ntupler.Po \ ./$(DEPDIR)/ntuplew.Po ./$(DEPDIR)/ode-initval.Po \ ./$(DEPDIR)/permseq.Po ./$(DEPDIR)/permshuffle.Po \ ./$(DEPDIR)/poisson.Po ./$(DEPDIR)/polyroots.Po \ ./$(DEPDIR)/qrng.Po ./$(DEPDIR)/randpoisson.Po \ ./$(DEPDIR)/randwalk.Po ./$(DEPDIR)/rng.Po \ ./$(DEPDIR)/rngunif.Po ./$(DEPDIR)/robfit.Po \ ./$(DEPDIR)/rootnewt.Po ./$(DEPDIR)/roots.Po \ ./$(DEPDIR)/rquantile.Po ./$(DEPDIR)/rstat.Po \ ./$(DEPDIR)/siman.Po ./$(DEPDIR)/siman_tsp.Po \ ./$(DEPDIR)/sortsmall.Po ./$(DEPDIR)/specfun.Po \ ./$(DEPDIR)/specfun_e.Po ./$(DEPDIR)/spmatrix.Po \ ./$(DEPDIR)/stat.Po ./$(DEPDIR)/statsort.Po ./$(DEPDIR)/sum.Po \ ./$(DEPDIR)/vector.Po ./$(DEPDIR)/vectorr.Po \ ./$(DEPDIR)/vectorview.Po ./$(DEPDIR)/vectorw.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = blas.c block.c bspline.c cblas.c cdf.c cheb.c combination.c \ const.c diff.c dwt.c eigen.c eigen_nonsymm.c fft.c fftmr.c \ fftreal.c filt_edge.c fitreg.c fitreg2.c fitting.c fitting2.c \ fitting3.c gaussfilt.c gaussfilt2.c histogram.c histogram2d.c \ ieee.c ieeeround.c impulse.c integration.c integration2.c \ interp.c interp2d.c interp_compare.c interpp.c intro.c \ largefit.c linalglu.c matrix.c matrixw.c min.c monte.c \ movstat1.c movstat2.c movstat3.c multiset.c nlfit.c nlfit2.c \ nlfit2b.c nlfit3.c nlfit4.c ntupler.c ntuplew.c ode-initval.c \ permseq.c permshuffle.c poisson.c polyroots.c qrng.c \ randpoisson.c randwalk.c rng.c rngunif.c robfit.c rootnewt.c \ roots.c rquantile.c rstat.c siman.c siman_tsp.c sortsmall.c \ specfun.c specfun_e.c spmatrix.c stat.c statsort.c sum.c \ vector.c vectorr.c vectorview.c vectorw.c DIST_SOURCES = blas.c block.c bspline.c cblas.c cdf.c cheb.c \ combination.c const.c diff.c dwt.c eigen.c eigen_nonsymm.c \ fft.c fftmr.c fftreal.c filt_edge.c fitreg.c fitreg2.c \ fitting.c fitting2.c fitting3.c gaussfilt.c gaussfilt2.c \ histogram.c histogram2d.c ieee.c ieeeround.c impulse.c \ integration.c integration2.c interp.c interp2d.c \ interp_compare.c interpp.c intro.c largefit.c linalglu.c \ matrix.c matrixw.c min.c monte.c movstat1.c movstat2.c \ movstat3.c multiset.c nlfit.c nlfit2.c nlfit2b.c nlfit3.c \ nlfit4.c ntupler.c ntuplew.c ode-initval.c permseq.c \ permshuffle.c poisson.c polyroots.c qrng.c randpoisson.c \ randwalk.c rng.c rngunif.c robfit.c rootnewt.c roots.c \ rquantile.c rstat.c siman.c siman_tsp.c sortsmall.c specfun.c \ specfun_e.c spmatrix.c stat.c statsort.c sum.c vector.c \ vectorr.c vectorview.c vectorw.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(dist_noinst_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ examples_src = blas.c block.c cblas.c cdf.c cheb.c combination.c multiset.c const.c demo_fn.c diff.c eigen.c fft.c fftmr.c fftreal.c filt_edge.c fitting.c fitting2.c fitting3.c fitreg.c fitreg2.c gaussfilt.c gaussfilt2.c histogram.c histogram2d.c ieee.c ieeeround.c impulse.c integration.c integration2.c interp.c interp2d.c intro.c linalglu.c largefit.c matrix.c matrixw.c min.c monte.c movstat1.c movstat2.c movstat3.c ntupler.c ntuplew.c ode-initval.c odefixed.c permseq.c permshuffle.c polyroots.c qrng.c randpoisson.c randwalk.c rng.c rngunif.c robfit.c rootnewt.c roots.c siman.c siman_tsp.c sortsmall.c specfun.c specfun_e.c rstat.c rquantile.c stat.c statsort.c sum.c vector.c vectorr.c vectorview.c vectorw.c demo_fn.h dwt.c nlfit.c nlfit2.c nlfit2b.c nlfit3.c interpp.c eigen_nonsymm.c bspline.c multimin.c multiminfn.c nmsimplex.c ode-initval-low-level.c poisson.c interp_compare.c spmatrix.c examples_txt = blas.txt block.txt bspline.txt cblas.txt cdf.txt cheb.txt combination.txt const.txt diff.txt dwt.txt eigen_nonsymm.txt eigen.txt fftmr.txt fftreal.txt fft.txt fitreg.txt fitreg2.txt filt_edge.txt fitting2.txt fitting.txt gaussfilt.txt gaussfilt2.txt histogram2d.txt ieeeround.txt ieee.txt impulse.txt integration.txt integration2a.txt integration2b.txt interp2d.txt interp_compare.txt interpp.txt interp.txt intro.txt largefit.txt largefit2.txt linalglu.txt matrix.txt matrixw.txt min.txt monte.txt movstat1.txt movstat2.txt movstat3.txt multimin.txt multiset.txt nlfit.txt nlfit2.txt nlfit3.txt nmsimplex.txt ntuple.txt ode-initval.txt permseq.txt permshuffle.txt poisson.txt polyroots.txt qrng.txt randpoisson2.txt randpoisson.txt randwalk.txt rng.txt rngunif.txt rngunif2.txt robfit.txt rootnewt.txt roots.txt rquantile.txt rstat.txt siman.txt siman_tsp.txt sortsmall.txt specfun.txt specfun_e.txt spmatrix.txt statsort.txt stat.txt sum.txt vectorr.txt vectorview.txt dist_noinst_DATA = $(examples_src) $(examples_txt) LDADD = ../../libgsl.la ../../cblas/libgslcblas.la AM_DEFAULT_SOURCE_EXT = .c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/examples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/examples/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list blas$(EXEEXT): $(blas_OBJECTS) $(blas_DEPENDENCIES) $(EXTRA_blas_DEPENDENCIES) @rm -f blas$(EXEEXT) $(AM_V_CCLD)$(LINK) $(blas_OBJECTS) $(blas_LDADD) $(LIBS) block$(EXEEXT): $(block_OBJECTS) $(block_DEPENDENCIES) $(EXTRA_block_DEPENDENCIES) @rm -f block$(EXEEXT) $(AM_V_CCLD)$(LINK) $(block_OBJECTS) $(block_LDADD) $(LIBS) bspline$(EXEEXT): $(bspline_OBJECTS) $(bspline_DEPENDENCIES) $(EXTRA_bspline_DEPENDENCIES) @rm -f bspline$(EXEEXT) $(AM_V_CCLD)$(LINK) $(bspline_OBJECTS) $(bspline_LDADD) $(LIBS) cblas$(EXEEXT): $(cblas_OBJECTS) $(cblas_DEPENDENCIES) $(EXTRA_cblas_DEPENDENCIES) @rm -f cblas$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cblas_OBJECTS) $(cblas_LDADD) $(LIBS) cdf$(EXEEXT): $(cdf_OBJECTS) $(cdf_DEPENDENCIES) $(EXTRA_cdf_DEPENDENCIES) @rm -f cdf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cdf_OBJECTS) $(cdf_LDADD) $(LIBS) cheb$(EXEEXT): $(cheb_OBJECTS) $(cheb_DEPENDENCIES) $(EXTRA_cheb_DEPENDENCIES) @rm -f cheb$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cheb_OBJECTS) $(cheb_LDADD) $(LIBS) combination$(EXEEXT): $(combination_OBJECTS) $(combination_DEPENDENCIES) $(EXTRA_combination_DEPENDENCIES) @rm -f combination$(EXEEXT) $(AM_V_CCLD)$(LINK) $(combination_OBJECTS) $(combination_LDADD) $(LIBS) const$(EXEEXT): $(const_OBJECTS) $(const_DEPENDENCIES) $(EXTRA_const_DEPENDENCIES) @rm -f const$(EXEEXT) $(AM_V_CCLD)$(LINK) $(const_OBJECTS) $(const_LDADD) $(LIBS) diff$(EXEEXT): $(diff_OBJECTS) $(diff_DEPENDENCIES) $(EXTRA_diff_DEPENDENCIES) @rm -f diff$(EXEEXT) $(AM_V_CCLD)$(LINK) $(diff_OBJECTS) $(diff_LDADD) $(LIBS) dwt$(EXEEXT): $(dwt_OBJECTS) $(dwt_DEPENDENCIES) $(EXTRA_dwt_DEPENDENCIES) @rm -f dwt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(dwt_OBJECTS) $(dwt_LDADD) $(LIBS) eigen$(EXEEXT): $(eigen_OBJECTS) $(eigen_DEPENDENCIES) $(EXTRA_eigen_DEPENDENCIES) @rm -f eigen$(EXEEXT) $(AM_V_CCLD)$(LINK) $(eigen_OBJECTS) $(eigen_LDADD) $(LIBS) eigen_nonsymm$(EXEEXT): $(eigen_nonsymm_OBJECTS) $(eigen_nonsymm_DEPENDENCIES) $(EXTRA_eigen_nonsymm_DEPENDENCIES) @rm -f eigen_nonsymm$(EXEEXT) $(AM_V_CCLD)$(LINK) $(eigen_nonsymm_OBJECTS) $(eigen_nonsymm_LDADD) $(LIBS) fft$(EXEEXT): $(fft_OBJECTS) $(fft_DEPENDENCIES) $(EXTRA_fft_DEPENDENCIES) @rm -f fft$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fft_OBJECTS) $(fft_LDADD) $(LIBS) fftmr$(EXEEXT): $(fftmr_OBJECTS) $(fftmr_DEPENDENCIES) $(EXTRA_fftmr_DEPENDENCIES) @rm -f fftmr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fftmr_OBJECTS) $(fftmr_LDADD) $(LIBS) fftreal$(EXEEXT): $(fftreal_OBJECTS) $(fftreal_DEPENDENCIES) $(EXTRA_fftreal_DEPENDENCIES) @rm -f fftreal$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fftreal_OBJECTS) $(fftreal_LDADD) $(LIBS) filt_edge$(EXEEXT): $(filt_edge_OBJECTS) $(filt_edge_DEPENDENCIES) $(EXTRA_filt_edge_DEPENDENCIES) @rm -f filt_edge$(EXEEXT) $(AM_V_CCLD)$(LINK) $(filt_edge_OBJECTS) $(filt_edge_LDADD) $(LIBS) fitreg$(EXEEXT): $(fitreg_OBJECTS) $(fitreg_DEPENDENCIES) $(EXTRA_fitreg_DEPENDENCIES) @rm -f fitreg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fitreg_OBJECTS) $(fitreg_LDADD) $(LIBS) fitreg2$(EXEEXT): $(fitreg2_OBJECTS) $(fitreg2_DEPENDENCIES) $(EXTRA_fitreg2_DEPENDENCIES) @rm -f fitreg2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fitreg2_OBJECTS) $(fitreg2_LDADD) $(LIBS) fitting$(EXEEXT): $(fitting_OBJECTS) $(fitting_DEPENDENCIES) $(EXTRA_fitting_DEPENDENCIES) @rm -f fitting$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fitting_OBJECTS) $(fitting_LDADD) $(LIBS) fitting2$(EXEEXT): $(fitting2_OBJECTS) $(fitting2_DEPENDENCIES) $(EXTRA_fitting2_DEPENDENCIES) @rm -f fitting2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fitting2_OBJECTS) $(fitting2_LDADD) $(LIBS) fitting3$(EXEEXT): $(fitting3_OBJECTS) $(fitting3_DEPENDENCIES) $(EXTRA_fitting3_DEPENDENCIES) @rm -f fitting3$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fitting3_OBJECTS) $(fitting3_LDADD) $(LIBS) gaussfilt$(EXEEXT): $(gaussfilt_OBJECTS) $(gaussfilt_DEPENDENCIES) $(EXTRA_gaussfilt_DEPENDENCIES) @rm -f gaussfilt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gaussfilt_OBJECTS) $(gaussfilt_LDADD) $(LIBS) gaussfilt2$(EXEEXT): $(gaussfilt2_OBJECTS) $(gaussfilt2_DEPENDENCIES) $(EXTRA_gaussfilt2_DEPENDENCIES) @rm -f gaussfilt2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gaussfilt2_OBJECTS) $(gaussfilt2_LDADD) $(LIBS) histogram$(EXEEXT): $(histogram_OBJECTS) $(histogram_DEPENDENCIES) $(EXTRA_histogram_DEPENDENCIES) @rm -f histogram$(EXEEXT) $(AM_V_CCLD)$(LINK) $(histogram_OBJECTS) $(histogram_LDADD) $(LIBS) histogram2d$(EXEEXT): $(histogram2d_OBJECTS) $(histogram2d_DEPENDENCIES) $(EXTRA_histogram2d_DEPENDENCIES) @rm -f histogram2d$(EXEEXT) $(AM_V_CCLD)$(LINK) $(histogram2d_OBJECTS) $(histogram2d_LDADD) $(LIBS) ieee$(EXEEXT): $(ieee_OBJECTS) $(ieee_DEPENDENCIES) $(EXTRA_ieee_DEPENDENCIES) @rm -f ieee$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ieee_OBJECTS) $(ieee_LDADD) $(LIBS) ieeeround$(EXEEXT): $(ieeeround_OBJECTS) $(ieeeround_DEPENDENCIES) $(EXTRA_ieeeround_DEPENDENCIES) @rm -f ieeeround$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ieeeround_OBJECTS) $(ieeeround_LDADD) $(LIBS) impulse$(EXEEXT): $(impulse_OBJECTS) $(impulse_DEPENDENCIES) $(EXTRA_impulse_DEPENDENCIES) @rm -f impulse$(EXEEXT) $(AM_V_CCLD)$(LINK) $(impulse_OBJECTS) $(impulse_LDADD) $(LIBS) integration$(EXEEXT): $(integration_OBJECTS) $(integration_DEPENDENCIES) $(EXTRA_integration_DEPENDENCIES) @rm -f integration$(EXEEXT) $(AM_V_CCLD)$(LINK) $(integration_OBJECTS) $(integration_LDADD) $(LIBS) integration2$(EXEEXT): $(integration2_OBJECTS) $(integration2_DEPENDENCIES) $(EXTRA_integration2_DEPENDENCIES) @rm -f integration2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(integration2_OBJECTS) $(integration2_LDADD) $(LIBS) interp$(EXEEXT): $(interp_OBJECTS) $(interp_DEPENDENCIES) $(EXTRA_interp_DEPENDENCIES) @rm -f interp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(interp_OBJECTS) $(interp_LDADD) $(LIBS) interp2d$(EXEEXT): $(interp2d_OBJECTS) $(interp2d_DEPENDENCIES) $(EXTRA_interp2d_DEPENDENCIES) @rm -f interp2d$(EXEEXT) $(AM_V_CCLD)$(LINK) $(interp2d_OBJECTS) $(interp2d_LDADD) $(LIBS) interp_compare$(EXEEXT): $(interp_compare_OBJECTS) $(interp_compare_DEPENDENCIES) $(EXTRA_interp_compare_DEPENDENCIES) @rm -f interp_compare$(EXEEXT) $(AM_V_CCLD)$(LINK) $(interp_compare_OBJECTS) $(interp_compare_LDADD) $(LIBS) interpp$(EXEEXT): $(interpp_OBJECTS) $(interpp_DEPENDENCIES) $(EXTRA_interpp_DEPENDENCIES) @rm -f interpp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(interpp_OBJECTS) $(interpp_LDADD) $(LIBS) intro$(EXEEXT): $(intro_OBJECTS) $(intro_DEPENDENCIES) $(EXTRA_intro_DEPENDENCIES) @rm -f intro$(EXEEXT) $(AM_V_CCLD)$(LINK) $(intro_OBJECTS) $(intro_LDADD) $(LIBS) largefit$(EXEEXT): $(largefit_OBJECTS) $(largefit_DEPENDENCIES) $(EXTRA_largefit_DEPENDENCIES) @rm -f largefit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(largefit_OBJECTS) $(largefit_LDADD) $(LIBS) linalglu$(EXEEXT): $(linalglu_OBJECTS) $(linalglu_DEPENDENCIES) $(EXTRA_linalglu_DEPENDENCIES) @rm -f linalglu$(EXEEXT) $(AM_V_CCLD)$(LINK) $(linalglu_OBJECTS) $(linalglu_LDADD) $(LIBS) matrix$(EXEEXT): $(matrix_OBJECTS) $(matrix_DEPENDENCIES) $(EXTRA_matrix_DEPENDENCIES) @rm -f matrix$(EXEEXT) $(AM_V_CCLD)$(LINK) $(matrix_OBJECTS) $(matrix_LDADD) $(LIBS) matrixw$(EXEEXT): $(matrixw_OBJECTS) $(matrixw_DEPENDENCIES) $(EXTRA_matrixw_DEPENDENCIES) @rm -f matrixw$(EXEEXT) $(AM_V_CCLD)$(LINK) $(matrixw_OBJECTS) $(matrixw_LDADD) $(LIBS) min$(EXEEXT): $(min_OBJECTS) $(min_DEPENDENCIES) $(EXTRA_min_DEPENDENCIES) @rm -f min$(EXEEXT) $(AM_V_CCLD)$(LINK) $(min_OBJECTS) $(min_LDADD) $(LIBS) monte$(EXEEXT): $(monte_OBJECTS) $(monte_DEPENDENCIES) $(EXTRA_monte_DEPENDENCIES) @rm -f monte$(EXEEXT) $(AM_V_CCLD)$(LINK) $(monte_OBJECTS) $(monte_LDADD) $(LIBS) movstat1$(EXEEXT): $(movstat1_OBJECTS) $(movstat1_DEPENDENCIES) $(EXTRA_movstat1_DEPENDENCIES) @rm -f movstat1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(movstat1_OBJECTS) $(movstat1_LDADD) $(LIBS) movstat2$(EXEEXT): $(movstat2_OBJECTS) $(movstat2_DEPENDENCIES) $(EXTRA_movstat2_DEPENDENCIES) @rm -f movstat2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(movstat2_OBJECTS) $(movstat2_LDADD) $(LIBS) movstat3$(EXEEXT): $(movstat3_OBJECTS) $(movstat3_DEPENDENCIES) $(EXTRA_movstat3_DEPENDENCIES) @rm -f movstat3$(EXEEXT) $(AM_V_CCLD)$(LINK) $(movstat3_OBJECTS) $(movstat3_LDADD) $(LIBS) multiset$(EXEEXT): $(multiset_OBJECTS) $(multiset_DEPENDENCIES) $(EXTRA_multiset_DEPENDENCIES) @rm -f multiset$(EXEEXT) $(AM_V_CCLD)$(LINK) $(multiset_OBJECTS) $(multiset_LDADD) $(LIBS) nlfit$(EXEEXT): $(nlfit_OBJECTS) $(nlfit_DEPENDENCIES) $(EXTRA_nlfit_DEPENDENCIES) @rm -f nlfit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(nlfit_OBJECTS) $(nlfit_LDADD) $(LIBS) nlfit2$(EXEEXT): $(nlfit2_OBJECTS) $(nlfit2_DEPENDENCIES) $(EXTRA_nlfit2_DEPENDENCIES) @rm -f nlfit2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(nlfit2_OBJECTS) $(nlfit2_LDADD) $(LIBS) nlfit2b$(EXEEXT): $(nlfit2b_OBJECTS) $(nlfit2b_DEPENDENCIES) $(EXTRA_nlfit2b_DEPENDENCIES) @rm -f nlfit2b$(EXEEXT) $(AM_V_CCLD)$(LINK) $(nlfit2b_OBJECTS) $(nlfit2b_LDADD) $(LIBS) nlfit3$(EXEEXT): $(nlfit3_OBJECTS) $(nlfit3_DEPENDENCIES) $(EXTRA_nlfit3_DEPENDENCIES) @rm -f nlfit3$(EXEEXT) $(AM_V_CCLD)$(LINK) $(nlfit3_OBJECTS) $(nlfit3_LDADD) $(LIBS) nlfit4$(EXEEXT): $(nlfit4_OBJECTS) $(nlfit4_DEPENDENCIES) $(EXTRA_nlfit4_DEPENDENCIES) @rm -f nlfit4$(EXEEXT) $(AM_V_CCLD)$(LINK) $(nlfit4_OBJECTS) $(nlfit4_LDADD) $(LIBS) ntupler$(EXEEXT): $(ntupler_OBJECTS) $(ntupler_DEPENDENCIES) $(EXTRA_ntupler_DEPENDENCIES) @rm -f ntupler$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ntupler_OBJECTS) $(ntupler_LDADD) $(LIBS) ntuplew$(EXEEXT): $(ntuplew_OBJECTS) $(ntuplew_DEPENDENCIES) $(EXTRA_ntuplew_DEPENDENCIES) @rm -f ntuplew$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ntuplew_OBJECTS) $(ntuplew_LDADD) $(LIBS) ode-initval$(EXEEXT): $(ode_initval_OBJECTS) $(ode_initval_DEPENDENCIES) $(EXTRA_ode_initval_DEPENDENCIES) @rm -f ode-initval$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ode_initval_OBJECTS) $(ode_initval_LDADD) $(LIBS) permseq$(EXEEXT): $(permseq_OBJECTS) $(permseq_DEPENDENCIES) $(EXTRA_permseq_DEPENDENCIES) @rm -f permseq$(EXEEXT) $(AM_V_CCLD)$(LINK) $(permseq_OBJECTS) $(permseq_LDADD) $(LIBS) permshuffle$(EXEEXT): $(permshuffle_OBJECTS) $(permshuffle_DEPENDENCIES) $(EXTRA_permshuffle_DEPENDENCIES) @rm -f permshuffle$(EXEEXT) $(AM_V_CCLD)$(LINK) $(permshuffle_OBJECTS) $(permshuffle_LDADD) $(LIBS) poisson$(EXEEXT): $(poisson_OBJECTS) $(poisson_DEPENDENCIES) $(EXTRA_poisson_DEPENDENCIES) @rm -f poisson$(EXEEXT) $(AM_V_CCLD)$(LINK) $(poisson_OBJECTS) $(poisson_LDADD) $(LIBS) polyroots$(EXEEXT): $(polyroots_OBJECTS) $(polyroots_DEPENDENCIES) $(EXTRA_polyroots_DEPENDENCIES) @rm -f polyroots$(EXEEXT) $(AM_V_CCLD)$(LINK) $(polyroots_OBJECTS) $(polyroots_LDADD) $(LIBS) qrng$(EXEEXT): $(qrng_OBJECTS) $(qrng_DEPENDENCIES) $(EXTRA_qrng_DEPENDENCIES) @rm -f qrng$(EXEEXT) $(AM_V_CCLD)$(LINK) $(qrng_OBJECTS) $(qrng_LDADD) $(LIBS) randpoisson$(EXEEXT): $(randpoisson_OBJECTS) $(randpoisson_DEPENDENCIES) $(EXTRA_randpoisson_DEPENDENCIES) @rm -f randpoisson$(EXEEXT) $(AM_V_CCLD)$(LINK) $(randpoisson_OBJECTS) $(randpoisson_LDADD) $(LIBS) randwalk$(EXEEXT): $(randwalk_OBJECTS) $(randwalk_DEPENDENCIES) $(EXTRA_randwalk_DEPENDENCIES) @rm -f randwalk$(EXEEXT) $(AM_V_CCLD)$(LINK) $(randwalk_OBJECTS) $(randwalk_LDADD) $(LIBS) rng$(EXEEXT): $(rng_OBJECTS) $(rng_DEPENDENCIES) $(EXTRA_rng_DEPENDENCIES) @rm -f rng$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rng_OBJECTS) $(rng_LDADD) $(LIBS) rngunif$(EXEEXT): $(rngunif_OBJECTS) $(rngunif_DEPENDENCIES) $(EXTRA_rngunif_DEPENDENCIES) @rm -f rngunif$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rngunif_OBJECTS) $(rngunif_LDADD) $(LIBS) robfit$(EXEEXT): $(robfit_OBJECTS) $(robfit_DEPENDENCIES) $(EXTRA_robfit_DEPENDENCIES) @rm -f robfit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(robfit_OBJECTS) $(robfit_LDADD) $(LIBS) rootnewt$(EXEEXT): $(rootnewt_OBJECTS) $(rootnewt_DEPENDENCIES) $(EXTRA_rootnewt_DEPENDENCIES) @rm -f rootnewt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rootnewt_OBJECTS) $(rootnewt_LDADD) $(LIBS) roots$(EXEEXT): $(roots_OBJECTS) $(roots_DEPENDENCIES) $(EXTRA_roots_DEPENDENCIES) @rm -f roots$(EXEEXT) $(AM_V_CCLD)$(LINK) $(roots_OBJECTS) $(roots_LDADD) $(LIBS) rquantile$(EXEEXT): $(rquantile_OBJECTS) $(rquantile_DEPENDENCIES) $(EXTRA_rquantile_DEPENDENCIES) @rm -f rquantile$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rquantile_OBJECTS) $(rquantile_LDADD) $(LIBS) rstat$(EXEEXT): $(rstat_OBJECTS) $(rstat_DEPENDENCIES) $(EXTRA_rstat_DEPENDENCIES) @rm -f rstat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rstat_OBJECTS) $(rstat_LDADD) $(LIBS) siman$(EXEEXT): $(siman_OBJECTS) $(siman_DEPENDENCIES) $(EXTRA_siman_DEPENDENCIES) @rm -f siman$(EXEEXT) $(AM_V_CCLD)$(LINK) $(siman_OBJECTS) $(siman_LDADD) $(LIBS) siman_tsp$(EXEEXT): $(siman_tsp_OBJECTS) $(siman_tsp_DEPENDENCIES) $(EXTRA_siman_tsp_DEPENDENCIES) @rm -f siman_tsp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(siman_tsp_OBJECTS) $(siman_tsp_LDADD) $(LIBS) sortsmall$(EXEEXT): $(sortsmall_OBJECTS) $(sortsmall_DEPENDENCIES) $(EXTRA_sortsmall_DEPENDENCIES) @rm -f sortsmall$(EXEEXT) $(AM_V_CCLD)$(LINK) $(sortsmall_OBJECTS) $(sortsmall_LDADD) $(LIBS) specfun$(EXEEXT): $(specfun_OBJECTS) $(specfun_DEPENDENCIES) $(EXTRA_specfun_DEPENDENCIES) @rm -f specfun$(EXEEXT) $(AM_V_CCLD)$(LINK) $(specfun_OBJECTS) $(specfun_LDADD) $(LIBS) specfun_e$(EXEEXT): $(specfun_e_OBJECTS) $(specfun_e_DEPENDENCIES) $(EXTRA_specfun_e_DEPENDENCIES) @rm -f specfun_e$(EXEEXT) $(AM_V_CCLD)$(LINK) $(specfun_e_OBJECTS) $(specfun_e_LDADD) $(LIBS) spmatrix$(EXEEXT): $(spmatrix_OBJECTS) $(spmatrix_DEPENDENCIES) $(EXTRA_spmatrix_DEPENDENCIES) @rm -f spmatrix$(EXEEXT) $(AM_V_CCLD)$(LINK) $(spmatrix_OBJECTS) $(spmatrix_LDADD) $(LIBS) stat$(EXEEXT): $(stat_OBJECTS) $(stat_DEPENDENCIES) $(EXTRA_stat_DEPENDENCIES) @rm -f stat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(stat_OBJECTS) $(stat_LDADD) $(LIBS) statsort$(EXEEXT): $(statsort_OBJECTS) $(statsort_DEPENDENCIES) $(EXTRA_statsort_DEPENDENCIES) @rm -f statsort$(EXEEXT) $(AM_V_CCLD)$(LINK) $(statsort_OBJECTS) $(statsort_LDADD) $(LIBS) sum$(EXEEXT): $(sum_OBJECTS) $(sum_DEPENDENCIES) $(EXTRA_sum_DEPENDENCIES) @rm -f sum$(EXEEXT) $(AM_V_CCLD)$(LINK) $(sum_OBJECTS) $(sum_LDADD) $(LIBS) vector$(EXEEXT): $(vector_OBJECTS) $(vector_DEPENDENCIES) $(EXTRA_vector_DEPENDENCIES) @rm -f vector$(EXEEXT) $(AM_V_CCLD)$(LINK) $(vector_OBJECTS) $(vector_LDADD) $(LIBS) vectorr$(EXEEXT): $(vectorr_OBJECTS) $(vectorr_DEPENDENCIES) $(EXTRA_vectorr_DEPENDENCIES) @rm -f vectorr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(vectorr_OBJECTS) $(vectorr_LDADD) $(LIBS) vectorview$(EXEEXT): $(vectorview_OBJECTS) $(vectorview_DEPENDENCIES) $(EXTRA_vectorview_DEPENDENCIES) @rm -f vectorview$(EXEEXT) $(AM_V_CCLD)$(LINK) $(vectorview_OBJECTS) $(vectorview_LDADD) $(LIBS) vectorw$(EXEEXT): $(vectorw_OBJECTS) $(vectorw_DEPENDENCIES) $(EXTRA_vectorw_DEPENDENCIES) @rm -f vectorw$(EXEEXT) $(AM_V_CCLD)$(LINK) $(vectorw_OBJECTS) $(vectorw_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blas.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/block.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bspline.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cblas.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cheb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/combination.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/const.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diff.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eigen.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eigen_nonsymm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fft.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fftmr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fftreal.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filt_edge.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fitreg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fitreg2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fitting.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fitting2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fitting3.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gaussfilt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gaussfilt2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/histogram.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/histogram2d.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ieee.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ieeeround.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/impulse.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/integration.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/integration2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interp2d.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interp_compare.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interpp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/intro.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/largefit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linalglu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matrix.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matrixw.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/min.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/monte.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movstat1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movstat2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movstat3.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiset.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlfit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlfit2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlfit2b.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlfit3.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlfit4.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntupler.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntuplew.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ode-initval.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/permseq.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/permshuffle.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poisson.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/polyroots.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qrng.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/randpoisson.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/randwalk.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rng.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rngunif.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/robfit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rootnewt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/roots.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rquantile.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rstat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/siman.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/siman_tsp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sortsmall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/specfun.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/specfun_e.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spmatrix.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/statsort.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sum.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vectorr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vectorview.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vectorw.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile $(DATA) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/blas.Po -rm -f ./$(DEPDIR)/block.Po -rm -f ./$(DEPDIR)/bspline.Po -rm -f ./$(DEPDIR)/cblas.Po -rm -f ./$(DEPDIR)/cdf.Po -rm -f ./$(DEPDIR)/cheb.Po -rm -f ./$(DEPDIR)/combination.Po -rm -f ./$(DEPDIR)/const.Po -rm -f ./$(DEPDIR)/diff.Po -rm -f ./$(DEPDIR)/dwt.Po -rm -f ./$(DEPDIR)/eigen.Po -rm -f ./$(DEPDIR)/eigen_nonsymm.Po -rm -f ./$(DEPDIR)/fft.Po -rm -f ./$(DEPDIR)/fftmr.Po -rm -f ./$(DEPDIR)/fftreal.Po -rm -f ./$(DEPDIR)/filt_edge.Po -rm -f ./$(DEPDIR)/fitreg.Po -rm -f ./$(DEPDIR)/fitreg2.Po -rm -f ./$(DEPDIR)/fitting.Po -rm -f ./$(DEPDIR)/fitting2.Po -rm -f ./$(DEPDIR)/fitting3.Po -rm -f ./$(DEPDIR)/gaussfilt.Po -rm -f ./$(DEPDIR)/gaussfilt2.Po -rm -f ./$(DEPDIR)/histogram.Po -rm -f ./$(DEPDIR)/histogram2d.Po -rm -f ./$(DEPDIR)/ieee.Po -rm -f ./$(DEPDIR)/ieeeround.Po -rm -f ./$(DEPDIR)/impulse.Po -rm -f ./$(DEPDIR)/integration.Po -rm -f ./$(DEPDIR)/integration2.Po -rm -f ./$(DEPDIR)/interp.Po -rm -f ./$(DEPDIR)/interp2d.Po -rm -f ./$(DEPDIR)/interp_compare.Po -rm -f ./$(DEPDIR)/interpp.Po -rm -f ./$(DEPDIR)/intro.Po -rm -f ./$(DEPDIR)/largefit.Po -rm -f ./$(DEPDIR)/linalglu.Po -rm -f ./$(DEPDIR)/matrix.Po -rm -f ./$(DEPDIR)/matrixw.Po -rm -f ./$(DEPDIR)/min.Po -rm -f ./$(DEPDIR)/monte.Po -rm -f ./$(DEPDIR)/movstat1.Po -rm -f ./$(DEPDIR)/movstat2.Po -rm -f ./$(DEPDIR)/movstat3.Po -rm -f ./$(DEPDIR)/multiset.Po -rm -f ./$(DEPDIR)/nlfit.Po -rm -f ./$(DEPDIR)/nlfit2.Po -rm -f ./$(DEPDIR)/nlfit2b.Po -rm -f ./$(DEPDIR)/nlfit3.Po -rm -f ./$(DEPDIR)/nlfit4.Po -rm -f ./$(DEPDIR)/ntupler.Po -rm -f ./$(DEPDIR)/ntuplew.Po -rm -f ./$(DEPDIR)/ode-initval.Po -rm -f ./$(DEPDIR)/permseq.Po -rm -f ./$(DEPDIR)/permshuffle.Po -rm -f ./$(DEPDIR)/poisson.Po -rm -f ./$(DEPDIR)/polyroots.Po -rm -f ./$(DEPDIR)/qrng.Po -rm -f ./$(DEPDIR)/randpoisson.Po -rm -f ./$(DEPDIR)/randwalk.Po -rm -f ./$(DEPDIR)/rng.Po -rm -f ./$(DEPDIR)/rngunif.Po -rm -f ./$(DEPDIR)/robfit.Po -rm -f ./$(DEPDIR)/rootnewt.Po -rm -f ./$(DEPDIR)/roots.Po -rm -f ./$(DEPDIR)/rquantile.Po -rm -f ./$(DEPDIR)/rstat.Po -rm -f ./$(DEPDIR)/siman.Po -rm -f ./$(DEPDIR)/siman_tsp.Po -rm -f ./$(DEPDIR)/sortsmall.Po -rm -f ./$(DEPDIR)/specfun.Po -rm -f ./$(DEPDIR)/specfun_e.Po -rm -f ./$(DEPDIR)/spmatrix.Po -rm -f ./$(DEPDIR)/stat.Po -rm -f ./$(DEPDIR)/statsort.Po -rm -f ./$(DEPDIR)/sum.Po -rm -f ./$(DEPDIR)/vector.Po -rm -f ./$(DEPDIR)/vectorr.Po -rm -f ./$(DEPDIR)/vectorview.Po -rm -f ./$(DEPDIR)/vectorw.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/blas.Po -rm -f ./$(DEPDIR)/block.Po -rm -f ./$(DEPDIR)/bspline.Po -rm -f ./$(DEPDIR)/cblas.Po -rm -f ./$(DEPDIR)/cdf.Po -rm -f ./$(DEPDIR)/cheb.Po -rm -f ./$(DEPDIR)/combination.Po -rm -f ./$(DEPDIR)/const.Po -rm -f ./$(DEPDIR)/diff.Po -rm -f ./$(DEPDIR)/dwt.Po -rm -f ./$(DEPDIR)/eigen.Po -rm -f ./$(DEPDIR)/eigen_nonsymm.Po -rm -f ./$(DEPDIR)/fft.Po -rm -f ./$(DEPDIR)/fftmr.Po -rm -f ./$(DEPDIR)/fftreal.Po -rm -f ./$(DEPDIR)/filt_edge.Po -rm -f ./$(DEPDIR)/fitreg.Po -rm -f ./$(DEPDIR)/fitreg2.Po -rm -f ./$(DEPDIR)/fitting.Po -rm -f ./$(DEPDIR)/fitting2.Po -rm -f ./$(DEPDIR)/fitting3.Po -rm -f ./$(DEPDIR)/gaussfilt.Po -rm -f ./$(DEPDIR)/gaussfilt2.Po -rm -f ./$(DEPDIR)/histogram.Po -rm -f ./$(DEPDIR)/histogram2d.Po -rm -f ./$(DEPDIR)/ieee.Po -rm -f ./$(DEPDIR)/ieeeround.Po -rm -f ./$(DEPDIR)/impulse.Po -rm -f ./$(DEPDIR)/integration.Po -rm -f ./$(DEPDIR)/integration2.Po -rm -f ./$(DEPDIR)/interp.Po -rm -f ./$(DEPDIR)/interp2d.Po -rm -f ./$(DEPDIR)/interp_compare.Po -rm -f ./$(DEPDIR)/interpp.Po -rm -f ./$(DEPDIR)/intro.Po -rm -f ./$(DEPDIR)/largefit.Po -rm -f ./$(DEPDIR)/linalglu.Po -rm -f ./$(DEPDIR)/matrix.Po -rm -f ./$(DEPDIR)/matrixw.Po -rm -f ./$(DEPDIR)/min.Po -rm -f ./$(DEPDIR)/monte.Po -rm -f ./$(DEPDIR)/movstat1.Po -rm -f ./$(DEPDIR)/movstat2.Po -rm -f ./$(DEPDIR)/movstat3.Po -rm -f ./$(DEPDIR)/multiset.Po -rm -f ./$(DEPDIR)/nlfit.Po -rm -f ./$(DEPDIR)/nlfit2.Po -rm -f ./$(DEPDIR)/nlfit2b.Po -rm -f ./$(DEPDIR)/nlfit3.Po -rm -f ./$(DEPDIR)/nlfit4.Po -rm -f ./$(DEPDIR)/ntupler.Po -rm -f ./$(DEPDIR)/ntuplew.Po -rm -f ./$(DEPDIR)/ode-initval.Po -rm -f ./$(DEPDIR)/permseq.Po -rm -f ./$(DEPDIR)/permshuffle.Po -rm -f ./$(DEPDIR)/poisson.Po -rm -f ./$(DEPDIR)/polyroots.Po -rm -f ./$(DEPDIR)/qrng.Po -rm -f ./$(DEPDIR)/randpoisson.Po -rm -f ./$(DEPDIR)/randwalk.Po -rm -f ./$(DEPDIR)/rng.Po -rm -f ./$(DEPDIR)/rngunif.Po -rm -f ./$(DEPDIR)/robfit.Po -rm -f ./$(DEPDIR)/rootnewt.Po -rm -f ./$(DEPDIR)/roots.Po -rm -f ./$(DEPDIR)/rquantile.Po -rm -f ./$(DEPDIR)/rstat.Po -rm -f ./$(DEPDIR)/siman.Po -rm -f ./$(DEPDIR)/siman_tsp.Po -rm -f ./$(DEPDIR)/sortsmall.Po -rm -f ./$(DEPDIR)/specfun.Po -rm -f ./$(DEPDIR)/specfun_e.Po -rm -f ./$(DEPDIR)/spmatrix.Po -rm -f ./$(DEPDIR)/stat.Po -rm -f ./$(DEPDIR)/statsort.Po -rm -f ./$(DEPDIR)/sum.Po -rm -f ./$(DEPDIR)/vector.Po -rm -f ./$(DEPDIR)/vectorr.Po -rm -f ./$(DEPDIR)/vectorview.Po -rm -f ./$(DEPDIR)/vectorw.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/doc/examples/qrng.c0000644000175000017500000000044413536674414013432 0ustar eddedd#include #include int main (void) { int i; gsl_qrng * q = gsl_qrng_alloc (gsl_qrng_sobol, 2); for (i = 0; i < 1024; i++) { double v[2]; gsl_qrng_get (q, v); printf ("%.5f %.5f\n", v[0], v[1]); } gsl_qrng_free (q); return 0; } gsl/doc/examples/roots.txt0000644000175000017500000000070213536674414014223 0ustar eddeddusing brent method iter [ lower, upper] root err err(est) 1 [1.0000000, 5.0000000] 1.0000000 -1.2360680 4.0000000 2 [1.0000000, 3.0000000] 3.0000000 +0.7639320 2.0000000 3 [2.0000000, 3.0000000] 2.0000000 -0.2360680 1.0000000 4 [2.2000000, 3.0000000] 2.2000000 -0.0360680 0.8000000 5 [2.2000000, 2.2366300] 2.2366300 +0.0005621 0.0366300 Converged: 6 [2.2360634, 2.2366300] 2.2360634 -0.0000046 0.0005666 gsl/doc/examples/cblas.txt0000644000175000017500000000004413536674414014140 0ustar eddedd[ 367.76, 368.12 674.06, 674.72 ] gsl/doc/examples/intro.txt0000644000175000017500000000004213536674414014205 0ustar eddeddJ0(5) = -1.775967713143382642e-01 gsl/doc/examples/gaussfilt2.c0000644000175000017500000000415413536674414014550 0ustar eddedd#include #include #include #include #include #include #include int main(void) { const size_t N = 1000; /* length of time series */ const size_t K = 61; /* window size */ const double alpha = 3.0; /* Gaussian kernel has +/- 3 standard deviations */ gsl_vector *x = gsl_vector_alloc(N); /* input vector */ gsl_vector *y = gsl_vector_alloc(N); /* filtered output vector */ gsl_vector *dy = gsl_vector_alloc(N); /* first derivative filtered vector */ gsl_vector *d2y = gsl_vector_alloc(N); /* second derivative filtered vector */ gsl_rng *r = gsl_rng_alloc(gsl_rng_default); gsl_filter_gaussian_workspace *gauss_p = gsl_filter_gaussian_alloc(K); size_t i; /* generate input signal */ for (i = 0; i < N; ++i) { double xi = (i > N / 2) ? 0.5 : 0.0; double ei = gsl_ran_gaussian(r, 0.1); gsl_vector_set(x, i, xi + ei); } /* apply filters */ gsl_filter_gaussian(GSL_FILTER_END_PADVALUE, alpha, 0, x, y, gauss_p); gsl_filter_gaussian(GSL_FILTER_END_PADVALUE, alpha, 1, x, dy, gauss_p); gsl_filter_gaussian(GSL_FILTER_END_PADVALUE, alpha, 2, x, d2y, gauss_p); /* print results */ for (i = 0; i < N; ++i) { double xi = gsl_vector_get(x, i); double yi = gsl_vector_get(y, i); double dyi = gsl_vector_get(dy, i); double d2yi = gsl_vector_get(d2y, i); double dxi; /* compute finite difference of x vector */ if (i == 0) dxi = gsl_vector_get(x, i + 1) - xi; else if (i == N - 1) dxi = gsl_vector_get(x, i) - gsl_vector_get(x, i - 1); else dxi = 0.5 * (gsl_vector_get(x, i + 1) - gsl_vector_get(x, i - 1)); printf("%.12e %.12e %.12e %.12e %.12e\n", xi, yi, dxi, dyi, d2yi); } gsl_vector_free(x); gsl_vector_free(y); gsl_vector_free(dy); gsl_vector_free(d2y); gsl_rng_free(r); gsl_filter_gaussian_free(gauss_p); return 0; } gsl/doc/examples/ntuplew.c0000644000175000017500000000130613536674414014157 0ustar eddedd#include #include #include struct data { double x; double y; double z; }; int main (void) { const gsl_rng_type * T; gsl_rng * r; struct data ntuple_row; int i; gsl_ntuple *ntuple = gsl_ntuple_create ("test.dat", &ntuple_row, sizeof (ntuple_row)); gsl_rng_env_setup (); T = gsl_rng_default; r = gsl_rng_alloc (T); for (i = 0; i < 10000; i++) { ntuple_row.x = gsl_ran_ugaussian (r); ntuple_row.y = gsl_ran_ugaussian (r); ntuple_row.z = gsl_ran_ugaussian (r); gsl_ntuple_write (ntuple); } gsl_ntuple_close (ntuple); gsl_rng_free (r); return 0; } gsl/doc/examples/rngunif.c0000644000175000017500000000052113536674414014127 0ustar eddedd#include #include int main (void) { const gsl_rng_type * T; gsl_rng * r; int i, n = 10; gsl_rng_env_setup(); T = gsl_rng_default; r = gsl_rng_alloc (T); for (i = 0; i < n; i++) { double u = gsl_rng_uniform (r); printf ("%.5f\n", u); } gsl_rng_free (r); return 0; } gsl/doc/examples/specfun_e.txt0000644000175000017500000000016213536674414015024 0ustar eddeddstatus = success J0(5.0) = -0.177596771314338264 +/- 0.000000000000000193 exact = -0.177596771314338292 gsl/doc/examples/specfun.c0000644000175000017500000000041413536674414014123 0ustar eddedd#include #include int main (void) { double x = 5.0; double expected = -0.17759677131433830434739701; double y = gsl_sf_bessel_J0 (x); printf ("J0(5.0) = %.18f\n", y); printf ("exact = %.18f\n", expected); return 0; } gsl/doc/examples/multimin.c0000644000175000017500000000231713536674414014322 0ustar eddeddint main (void) { size_t iter = 0; int status; const gsl_multimin_fdfminimizer_type *T; gsl_multimin_fdfminimizer *s; /* Position of the minimum (1,2), scale factors 10,20, height 30. */ double par[5] = { 1.0, 2.0, 10.0, 20.0, 30.0 }; gsl_vector *x; gsl_multimin_function_fdf my_func; my_func.n = 2; my_func.f = my_f; my_func.df = my_df; my_func.fdf = my_fdf; my_func.params = par; /* Starting point, x = (5,7) */ x = gsl_vector_alloc (2); gsl_vector_set (x, 0, 5.0); gsl_vector_set (x, 1, 7.0); T = gsl_multimin_fdfminimizer_conjugate_fr; s = gsl_multimin_fdfminimizer_alloc (T, 2); gsl_multimin_fdfminimizer_set (s, &my_func, x, 0.01, 1e-4); do { iter++; status = gsl_multimin_fdfminimizer_iterate (s); if (status) break; status = gsl_multimin_test_gradient (s->gradient, 1e-3); if (status == GSL_SUCCESS) printf ("Minimum found at:\n"); printf ("%5d %.5f %.5f %10.5f\n", iter, gsl_vector_get (s->x, 0), gsl_vector_get (s->x, 1), s->f); } while (status == GSL_CONTINUE && iter < 100); gsl_multimin_fdfminimizer_free (s); gsl_vector_free (x); return 0; } gsl/doc/examples/nlfit2b.c0000644000175000017500000001465013536674414014027 0ustar eddedd#include #include #include #include #include #include #include #include struct data { double *t; double *y; size_t n; }; /* model function: a * exp( -1/2 * [ (t - b) / c ]^2 ) */ double gaussian(const double a, const double b, const double c, const double t) { const double z = (t - b) / c; return (a * exp(-0.5 * z * z)); } int func_f (const gsl_vector * x, void *params, gsl_vector * f) { struct data *d = (struct data *) params; double a = gsl_vector_get(x, 0); double b = gsl_vector_get(x, 1); double c = gsl_vector_get(x, 2); size_t i; for (i = 0; i < d->n; ++i) { double ti = d->t[i]; double yi = d->y[i]; double y = gaussian(a, b, c, ti); gsl_vector_set(f, i, yi - y); } return GSL_SUCCESS; } int func_df (const gsl_vector * x, void *params, gsl_matrix * J) { struct data *d = (struct data *) params; double a = gsl_vector_get(x, 0); double b = gsl_vector_get(x, 1); double c = gsl_vector_get(x, 2); size_t i; for (i = 0; i < d->n; ++i) { double ti = d->t[i]; double zi = (ti - b) / c; double ei = exp(-0.5 * zi * zi); gsl_matrix_set(J, i, 0, -ei); gsl_matrix_set(J, i, 1, -(a / c) * ei * zi); gsl_matrix_set(J, i, 2, -(a / c) * ei * zi * zi); } return GSL_SUCCESS; } int func_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { struct data *d = (struct data *) params; double a = gsl_vector_get(x, 0); double b = gsl_vector_get(x, 1); double c = gsl_vector_get(x, 2); double va = gsl_vector_get(v, 0); double vb = gsl_vector_get(v, 1); double vc = gsl_vector_get(v, 2); size_t i; for (i = 0; i < d->n; ++i) { double ti = d->t[i]; double zi = (ti - b) / c; double ei = exp(-0.5 * zi * zi); double Dab = -zi * ei / c; double Dac = -zi * zi * ei / c; double Dbb = a * ei / (c * c) * (1.0 - zi*zi); double Dbc = a * zi * ei / (c * c) * (2.0 - zi*zi); double Dcc = a * zi * zi * ei / (c * c) * (3.0 - zi*zi); double sum; sum = 2.0 * va * vb * Dab + 2.0 * va * vc * Dac + vb * vb * Dbb + 2.0 * vb * vc * Dbc + vc * vc * Dcc; gsl_vector_set(fvv, i, sum); } return GSL_SUCCESS; } void callback(const size_t iter, void *params, const gsl_multifit_nlinear_workspace *w) { gsl_vector *f = gsl_multifit_nlinear_residual(w); gsl_vector *x = gsl_multifit_nlinear_position(w); double avratio = gsl_multifit_nlinear_avratio(w); double rcond; (void) params; /* not used */ /* compute reciprocal condition number of J(x) */ gsl_multifit_nlinear_rcond(&rcond, w); fprintf(stderr, "iter %2zu: a = %.4f, b = %.4f, c = %.4f, |a|/|v| = %.4f cond(J) = %8.4f, |f(x)| = %.4f\n", iter, gsl_vector_get(x, 0), gsl_vector_get(x, 1), gsl_vector_get(x, 2), avratio, 1.0 / rcond, gsl_blas_dnrm2(f)); } void solve_system(gsl_vector *x, gsl_multifit_nlinear_fdf *fdf, gsl_multifit_nlinear_parameters *params) { const gsl_multifit_nlinear_type *T = gsl_multifit_nlinear_trust; const size_t max_iter = 200; const double xtol = 1.0e-8; const double gtol = 1.0e-8; const double ftol = 1.0e-8; const size_t n = fdf->n; const size_t p = fdf->p; gsl_multifit_nlinear_workspace *work = gsl_multifit_nlinear_alloc(T, params, n, p); gsl_vector * f = gsl_multifit_nlinear_residual(work); gsl_vector * y = gsl_multifit_nlinear_position(work); int info; double chisq0, chisq, rcond; /* initialize solver */ gsl_multifit_nlinear_init(x, fdf, work); /* store initial cost */ gsl_blas_ddot(f, f, &chisq0); /* iterate until convergence */ gsl_multifit_nlinear_driver(max_iter, xtol, gtol, ftol, callback, NULL, &info, work); /* store final cost */ gsl_blas_ddot(f, f, &chisq); /* store cond(J(x)) */ gsl_multifit_nlinear_rcond(&rcond, work); gsl_vector_memcpy(x, y); /* print summary */ fprintf(stderr, "NITER = %zu\n", gsl_multifit_nlinear_niter(work)); fprintf(stderr, "NFEV = %zu\n", fdf->nevalf); fprintf(stderr, "NJEV = %zu\n", fdf->nevaldf); fprintf(stderr, "NAEV = %zu\n", fdf->nevalfvv); fprintf(stderr, "initial cost = %.12e\n", chisq0); fprintf(stderr, "final cost = %.12e\n", chisq); fprintf(stderr, "final x = (%.12e, %.12e, %12e)\n", gsl_vector_get(x, 0), gsl_vector_get(x, 1), gsl_vector_get(x, 2)); fprintf(stderr, "final cond(J) = %.12e\n", 1.0 / rcond); gsl_multifit_nlinear_free(work); } int main (void) { const size_t n = 300; /* number of data points to fit */ const size_t p = 3; /* number of model parameters */ const double a = 5.0; /* amplitude */ const double b = 0.4; /* center */ const double c = 0.15; /* width */ const gsl_rng_type * T = gsl_rng_default; gsl_vector *f = gsl_vector_alloc(n); gsl_vector *x = gsl_vector_alloc(p); gsl_multifit_nlinear_fdf fdf; gsl_multifit_nlinear_parameters fdf_params = gsl_multifit_nlinear_default_parameters(); struct data fit_data; gsl_rng * r; size_t i; gsl_rng_env_setup (); r = gsl_rng_alloc (T); fit_data.t = malloc(n * sizeof(double)); fit_data.y = malloc(n * sizeof(double)); fit_data.n = n; /* generate synthetic data with noise */ for (i = 0; i < n; ++i) { double t = (double)i / (double) n; double y0 = gaussian(a, b, c, t); double dy = gsl_ran_gaussian (r, 0.1 * y0); fit_data.t[i] = t; fit_data.y[i] = y0 + dy; } /* define function to be minimized */ fdf.f = func_f; fdf.df = func_df; fdf.fvv = func_fvv; fdf.n = n; fdf.p = p; fdf.params = &fit_data; /* starting point */ gsl_vector_set(x, 0, 1.0); gsl_vector_set(x, 1, 0.0); gsl_vector_set(x, 2, 1.0); fdf_params.trs = gsl_multifit_nlinear_trs_lmaccel; solve_system(x, &fdf, &fdf_params); /* print data and model */ { double A = gsl_vector_get(x, 0); double B = gsl_vector_get(x, 1); double C = gsl_vector_get(x, 2); for (i = 0; i < n; ++i) { double ti = fit_data.t[i]; double yi = fit_data.y[i]; double fi = gaussian(A, B, C, ti); printf("%f %f %f\n", ti, yi, fi); } } gsl_vector_free(f); gsl_vector_free(x); gsl_rng_free(r); return 0; } gsl/doc/examples/integration.txt0000644000175000017500000000026413536674414015403 0ustar eddeddresult = -4.000000000000085265 exact result = -4.000000000000000000 estimated error = 0.000000000000135447 actual error = -0.000000000000085265 intervals = 8 gsl/doc/examples/gaussfilt2.txt0000644000175000017500000027546013536674414015157 0ustar eddedd1.339186081187e-02 1.871557820404e-03 -2.220195999501e-02 -1.573169611469e-03 -8.780933065889e-05 -8.810099183144e-03 2.415680115678e-04 7.702448990675e-02 -1.653816610174e-03 -7.005130799944e-05 1.674408406254e-01 -1.454282712577e-03 4.108710495620e-02 -1.713695984914e-03 -4.919451563066e-05 7.336411072926e-02 -3.306034888695e-03 -3.384418873259e-02 -1.783635876377e-03 -3.472562516214e-05 9.975246316020e-02 -5.081926575132e-03 -1.005571594148e-01 -1.797742614170e-03 -9.791367133915e-06 -1.277502081003e-01 -6.886517573974e-03 -1.697119957168e-01 -1.794540678705e-03 1.394740395800e-05 -2.396715282733e-01 -8.684487585528e-03 2.991109581368e-02 -1.770188198653e-03 3.677209095397e-05 -6.792801647292e-02 -1.040504637514e-02 1.178811982150e-01 -1.710981218632e-03 6.179293643257e-05 -3.909131843359e-03 -1.201573660787e-02 7.864178551250e-02 -1.615736647016e-03 8.884204822403e-05 8.935555455208e-02 -1.360525848411e-02 1.072176192190e-03 -1.520044775751e-03 1.081313502520e-04 -1.764779458978e-03 -1.501991219708e-02 -1.095056227149e-01 -1.385387202482e-03 1.303213239924e-04 -1.296556908777e-01 -1.626198081420e-02 -3.251663557094e-02 -1.221246546222e-03 1.529854510433e-04 -6.679805060086e-02 -1.744091505144e-02 7.391328435427e-02 -1.068685416631e-03 1.654942663557e-04 1.817087783080e-02 -1.845705073427e-02 7.495156481747e-02 -9.038477536258e-04 1.751758671492e-04 8.310507903407e-02 -1.918407911513e-02 -3.649786248524e-02 -6.949241925893e-04 1.912854247622e-04 -5.482484713968e-02 -1.982637352378e-02 -7.345411465170e-02 -5.099625338587e-04 1.960049564819e-04 -6.380315026934e-02 -2.016464203437e-02 2.776685015461e-02 -2.866171416268e-04 2.071097411276e-04 7.088531695428e-04 -2.028979940521e-02 -1.591109584209e-03 -5.724068925701e-05 2.162677520576e-04 -6.698536943776e-02 -2.025923242644e-02 -4.174254315412e-02 1.575094262484e-04 2.185205888168e-04 -8.277623313869e-02 -2.000995387708e-02 6.411768623691e-02 3.744948162908e-04 2.190930556687e-04 6.125000303605e-02 -1.947452200865e-02 2.300869606146e-02 6.118521903759e-04 2.232633096190e-04 -3.675884101578e-02 -1.876761828155e-02 -4.509967197398e-02 8.326570840256e-04 2.212724176753e-04 -2.894934091191e-02 -1.783113384070e-02 -2.746431303284e-02 1.053487569511e-03 2.180154419193e-04 -9.168746708146e-02 -1.663824928790e-02 -1.471560248396e-02 1.281262021665e-03 2.155843598936e-04 -5.838054587982e-02 -1.523059769679e-02 4.907449804867e-02 1.502285947755e-03 2.104581433189e-04 6.461529015869e-03 -1.362501860026e-02 3.152746592858e-02 1.711034228145e-03 2.014748297262e-04 4.674385977342e-03 -1.175926667966e-02 -4.076711344134e-02 1.926285906608e-03 1.940885263869e-04 -7.507269786680e-02 -9.741891073338e-03 -9.548827356906e-03 2.115225424765e-03 1.798184279671e-04 -1.442326873647e-02 -7.510499062373e-03 1.113143887795e-01 2.298069934070e-03 1.648311423671e-04 1.475560796922e-01 -5.207561936769e-03 -3.112314377764e-03 2.433507631725e-03 1.387413154366e-04 -2.064789749200e-02 -2.723606303483e-03 -8.681290378986e-02 2.558311348821e-03 1.126430419545e-04 -2.606972788753e-02 -1.030257826429e-04 3.413050151456e-03 2.662808533086e-03 8.490266321611e-05 -1.382179718908e-02 2.596464419364e-03 -1.141349969088e-01 2.730271334044e-03 5.338954370435e-05 -2.543397217052e-01 5.268954596640e-03 3.578182543003e-02 2.776465611888e-03 1.236646176699e-05 5.774185367097e-02 7.960356274602e-03 1.253643676972e-01 2.760073528894e-03 -3.056491722833e-05 -3.610986310676e-03 1.074241071818e-02 -4.017955524345e-02 2.743474156440e-03 -6.558367109374e-05 -2.261725681593e-02 1.350731785655e-02 3.755560401180e-02 2.651947528600e-03 -9.764599140462e-05 7.150022171291e-02 1.625039095980e-02 9.017197273503e-02 2.531536878966e-03 -1.228282378203e-04 1.577266886541e-01 1.876714402116e-02 -5.536380393083e-02 2.392749558747e-03 -1.544773942329e-04 -3.922738614874e-02 2.105217343415e-02 -1.972480153745e-02 2.213329136277e-03 -1.892465936792e-04 1.182770855792e-01 2.319506509447e-02 1.092693774449e-01 2.035746477432e-03 -2.162343890414e-04 1.793113687411e-01 2.508229440944e-02 -9.570584115491e-02 1.796523467735e-03 -2.416656010038e-04 -7.313459673059e-02 2.683164719697e-02 -1.211465684341e-01 1.542744324677e-03 -2.528145296266e-04 -6.298176812702e-02 2.823196053893e-02 1.401020269054e-01 1.266102492149e-03 -2.653794257844e-04 2.070694570803e-01 2.935433718760e-02 -1.365941630819e-02 9.978300408839e-04 -2.722888410824e-04 -9.030060074339e-02 3.025509025609e-02 -1.675745165959e-02 7.536387375223e-04 -2.687876332880e-04 1.735545537611e-01 3.091113613083e-02 1.143047433780e-01 4.883915044989e-04 -2.571809741572e-04 1.383088860127e-01 3.144231497398e-02 -1.055456088744e-01 2.760503833692e-04 -2.288973332126e-04 -3.753666398769e-02 3.168720635546e-02 -8.436995298190e-02 8.203308679792e-05 -1.999750310869e-04 -3.043101995114e-02 3.177386057518e-02 8.144689443517e-02 -8.714389997872e-05 -1.626518900041e-04 1.253571248826e-01 3.166774027672e-02 1.523251013207e-03 -2.323373680662e-04 -1.233393076262e-04 -2.738451792472e-02 3.131325651773e-02 -6.499503151252e-02 -3.446447640491e-04 -9.068062957442e-05 -4.632938142394e-03 3.095652626726e-02 5.364138246776e-02 -4.148376469146e-04 -4.858016700655e-05 7.989824701079e-02 3.055386156076e-02 2.931426353365e-02 -4.399746821099e-04 -5.503686238907e-06 5.399558892491e-02 3.004365219459e-02 -3.565660655810e-02 -4.658613897120e-04 2.891960632728e-05 8.585033894587e-03 2.959014119311e-02 4.076676657457e-02 -4.330336720089e-04 6.391502934445e-05 1.355291220741e-01 2.909626166452e-02 -3.599973905726e-03 -3.814324162442e-04 8.699160863910e-05 1.385086083134e-03 2.871656951911e-02 -3.019637628587e-02 -2.947924315440e-04 1.073351548449e-04 7.513636950232e-02 2.848256166847e-02 -7.943800195185e-02 -1.923264719514e-04 1.244195890968e-04 -1.574909178206e-01 2.832252708080e-02 -4.943709740400e-02 -7.557450556358e-05 1.299515117566e-04 -2.373782530568e-02 2.827197268808e-02 9.556998854168e-02 7.195075201348e-05 1.252628926726e-04 3.364905926279e-02 2.839464912051e-02 7.888929013239e-03 1.861012499984e-04 1.154102993742e-04 -7.959967279201e-03 2.857010988481e-02 -4.386814174634e-02 2.680805549799e-04 9.164445557554e-05 -5.408722422989e-02 2.884210172953e-02 -6.504171349934e-02 3.320073117016e-04 5.981109875036e-05 -1.380433942779e-01 2.928146600021e-02 1.128712051287e-01 3.477716370906e-04 2.916720818601e-05 1.716551860274e-01 2.966878263266e-02 8.992728733895e-02 3.755401784967e-04 -1.465283608251e-05 4.181118040001e-02 3.011342084624e-02 -9.579763641416e-03 3.609077382076e-04 -5.780120992919e-05 1.524956587446e-01 3.044935035391e-02 1.341822636362e-02 2.768320148499e-04 -1.079659429754e-04 6.864763312725e-02 3.064820832293e-02 -1.056756279152e-01 1.526795900951e-04 -1.608963833680e-04 -5.885559708574e-02 3.071731461534e-02 3.151357890540e-02 1.720664675615e-07 -2.095349267326e-04 1.316747909381e-01 3.064369705685e-02 -1.222140869860e-02 -2.271917632214e-04 -2.483091508045e-04 -8.329841448294e-02 3.022662065650e-02 -2.713938060011e-02 -4.876768968775e-04 -2.876917035402e-04 7.739602973783e-02 2.955247624900e-02 1.473436918277e-03 -7.640368646928e-04 -3.154200358312e-04 -8.035154064639e-02 2.874189341622e-02 -4.296952862004e-02 -1.066668830659e-03 -3.174968047473e-04 -8.543027502252e-03 2.763249012690e-02 1.149856650852e-01 -1.361632944326e-03 -3.052271367386e-04 1.496197895241e-01 2.603642057367e-02 2.415985342709e-02 -1.642793749927e-03 -2.939498493657e-04 3.977667935192e-02 2.424823288261e-02 9.211159858135e-02 -1.940009896307e-03 -2.600551802797e-04 3.338429866868e-01 2.207167812716e-02 7.015841164175e-02 -2.177366495845e-03 -2.230132113904e-04 1.800935026354e-01 1.968515943263e-02 -7.910756281289e-02 -2.376408465567e-03 -1.731535658420e-04 1.756278610610e-01 1.722847354302e-02 -5.667306833665e-02 -2.525129338530e-03 -1.054404414581e-04 6.674736596213e-02 1.473850218041e-02 -1.403223357728e-01 -2.577358336631e-03 -2.538564400394e-05 -1.050168104847e-01 1.206120817707e-02 -1.690515616878e-02 -2.568820516554e-03 4.449794975256e-05 3.293705362457e-02 9.490046346518e-03 7.526245716532e-02 -2.502138487845e-03 1.189879303270e-04 4.550810384591e-02 7.054784988395e-03 -1.338188928364e-01 -2.349030256266e-03 1.905547324162e-04 -2.347007320482e-01 4.793917081331e-03 -5.344901379397e-02 -2.115317992673e-03 2.525681723330e-04 -6.138992374203e-02 2.900259156721e-03 9.260336589885e-03 -1.798666991899e-03 3.121509289343e-04 -2.161800588684e-01 1.277929045051e-03 -1.937219414059e-02 -1.459227772024e-03 3.541075699427e-04 -1.001343120232e-01 -2.719625174994e-05 8.497664802117e-02 -1.072317248001e-03 3.770508214232e-04 -4.622676282608e-02 -9.411313531490e-04 9.189102942768e-03 -6.984246874668e-04 3.842130030982e-04 -8.175610613768e-02 -1.395953477289e-03 3.233298332326e-02 -2.860940694787e-04 3.803908914441e-04 1.843920382043e-02 -1.459465065641e-03 2.113220426750e-02 6.371117880009e-05 3.614767319837e-04 -3.949169760269e-02 -1.128468849121e-03 -9.269746735876e-02 4.304174778314e-04 3.313296209648e-04 -1.669557308971e-01 -5.328247181917e-04 -2.751154337991e-02 7.475970915718e-04 2.842015429647e-04 -9.451478436250e-02 3.060639438584e-04 8.365636512283e-02 9.905662526818e-04 2.256303061926e-04 3.569993485712e-04 1.429847529450e-03 1.050443655017e-01 1.184342883857e-03 1.673133548275e-04 1.155739466408e-01 2.717732096965e-03 9.369306802902e-02 1.302007663652e-03 1.077870837367e-04 1.877431354066e-01 4.047380179628e-03 -5.217702680601e-02 1.408411808873e-03 4.503591438342e-05 1.121989302880e-02 5.513801734057e-03 -8.481090581584e-02 1.447706075482e-03 -5.397428463681e-06 1.812132377494e-02 6.936330311721e-03 5.830527600021e-02 1.445247991918e-03 -5.163097897937e-05 1.278304450292e-01 8.309711379610e-03 1.949222689298e-02 1.377743207154e-03 -8.839161697230e-05 5.710577756089e-02 9.683743925279e-03 -8.746060896531e-02 1.278780620319e-03 -1.073518886997e-04 -4.709077290139e-02 1.083514758391e-02 -5.384970040374e-03 1.169576767204e-03 -1.250427074487e-04 4.633583748014e-02 1.194511139035e-02 1.244116413153e-01 1.027603602715e-03 -1.256695203332e-04 2.017325097293e-01 1.291928601412e-02 8.431732455616e-02 9.227311549852e-04 -1.182640196020e-04 2.149704865925e-01 1.382003644701e-02 -1.194204208023e-01 8.059496604060e-04 -1.001617942053e-04 -3.710833187533e-02 1.456161910202e-02 -1.446997940231e-01 7.084272681736e-04 -8.174277179946e-05 -7.442910145369e-02 1.520552148700e-02 -4.548202703200e-02 6.592940680493e-04 -6.217318942569e-05 -1.280723859393e-01 1.580391943501e-02 -3.221867459784e-02 6.068314165534e-04 -4.132223173378e-05 -1.388664506494e-01 1.628629586942e-02 4.491276361623e-02 6.109015421777e-04 -2.920244979253e-05 -3.824685870686e-02 1.684950064837e-02 1.434992647736e-01 6.168383022635e-04 -1.309897763538e-05 1.481320788979e-01 1.753061138966e-02 -4.746000928867e-02 6.673046075419e-04 7.053827047688e-06 -1.331668772842e-01 1.815244029918e-02 -1.264801431343e-01 6.787611852633e-04 1.456123039590e-05 -1.048282073707e-01 1.884528710936e-02 5.939482018676e-02 6.769841194981e-04 1.989200423297e-05 -1.437723691069e-02 1.959957996907e-02 6.145699464946e-02 7.226264843872e-04 2.192136097253e-05 1.808578192825e-02 2.038446451240e-02 1.239345945525e-01 7.659961839768e-04 1.845496164137e-05 2.334919521944e-01 2.125011614817e-02 8.542052619537e-03 7.601969073070e-04 1.567300609918e-05 3.516988716732e-02 2.203239175548e-02 -9.817540673567e-02 7.613438859780e-04 2.282302630988e-06 3.714113872303e-02 2.285509655623e-02 -5.364025222138e-02 7.310962720226e-04 -8.804606815248e-06 -7.211061727544e-02 2.350426134241e-02 6.776851888394e-02 6.709494848491e-04 -3.234352703243e-05 1.726781764909e-01 2.412827373191e-02 1.788498587988e-02 6.115736632638e-04 -5.316259952696e-05 -3.634064551569e-02 2.473619949593e-02 8.769559371904e-03 5.410004286741e-04 -6.815528687603e-05 1.902172952347e-01 2.523267115184e-02 3.854931981830e-02 4.666041637255e-04 -8.334746011555e-05 4.075799412091e-02 2.566262965055e-02 -1.451807727500e-01 3.717670397791e-04 -9.348082120019e-05 -1.001442502652e-01 2.604612391132e-02 -6.079719953604e-03 2.588705061742e-04 -9.581127184836e-05 2.859855421370e-02 2.631791782388e-02 3.327253427390e-02 1.599619129124e-04 -9.562864262339e-05 -3.359918171739e-02 2.639959176380e-02 3.106467067680e-02 5.422718083639e-05 -9.986941333048e-05 9.072789556730e-02 2.636341064804e-02 8.258527535324e-02 -3.478397448066e-05 -1.031958052396e-04 1.315713689891e-01 2.620889049798e-02 -5.649239243746e-03 -1.199092022419e-04 -1.066326593138e-04 7.942941707981e-02 2.603323878112e-02 -8.556998604908e-02 -2.231960979720e-04 -1.028300439517e-04 -3.956860310906e-02 2.581391165524e-02 -1.107819786190e-02 -3.040531659108e-04 -9.466981646095e-05 5.727302135601e-02 2.536098096431e-02 -1.193795669092e-02 -4.016844164659e-04 -9.887873350308e-05 -6.344451649090e-02 2.493472924459e-02 -5.540756616063e-02 -4.803421336860e-04 -9.426956096898e-05 -5.354211096524e-02 2.437584667391e-02 6.993002597026e-02 -5.922184909094e-04 -9.422692235098e-05 7.641553544962e-02 2.374852023757e-02 3.642280421815e-02 -6.734752354137e-04 -9.328802926790e-05 1.930349747106e-02 2.297665541481e-02 -6.096347811159e-02 -7.419504278373e-04 -9.782498093587e-05 -4.551142077357e-02 2.212821314542e-02 1.480172770990e-02 -8.135330295160e-04 -1.016018439504e-04 4.890695289085e-02 2.130826351998e-02 -6.169654981857e-04 -9.078494442464e-04 -9.486611779088e-05 -4.674535176994e-02 2.036799167588e-02 -2.240449560054e-02 -1.011171103199e-03 -8.909867780968e-05 4.097961689768e-03 1.936332265092e-02 4.861319243066e-02 -1.108134943728e-03 -7.913257920560e-05 5.048103309137e-02 1.830630761606e-02 1.392691930104e-01 -1.184560740511e-03 -6.401870479764e-05 2.826363477106e-01 1.708435185065e-02 -5.832444044916e-02 -1.253181614618e-03 -5.358840128930e-05 -6.616784780695e-02 1.572719402911e-02 -1.735679685433e-01 -1.294293150520e-03 -4.621948010436e-05 -6.449958937596e-02 1.439755599266e-02 1.213677796306e-01 -1.362954718097e-03 -2.927619350873e-05 1.765677114543e-01 1.309943190153e-02 1.079337835445e-01 -1.381051186886e-03 -4.160175939721e-06 1.513679777130e-01 1.170931542457e-02 -7.118799994705e-02 -1.380820959208e-03 1.613307123524e-05 3.419171156019e-02 1.029177997157e-02 -7.959091370786e-02 -1.364611502469e-03 3.434976941703e-05 -7.813849702685e-03 8.927479474851e-03 -2.590456780356e-02 -1.278904300528e-03 5.389833020785e-05 -1.761742404694e-02 7.593590650136e-03 -1.168795172901e-01 -1.232058726509e-03 7.000867618067e-05 -2.415728842828e-01 6.439431935802e-03 -3.925089711962e-02 -1.132804109400e-03 9.249422744228e-05 -9.611921828617e-02 5.381692721457e-03 1.198375106059e-01 -1.038177037181e-03 1.115910102287e-04 -1.897863070918e-03 4.362670771751e-03 4.598288591432e-02 -8.973555974496e-04 1.201304097098e-04 -4.153446457531e-03 3.637682078127e-03 -5.751355901644e-03 -7.466407180202e-04 1.374393410753e-04 -1.340057487421e-02 2.961939872520e-03 7.924170023270e-03 -5.681046684931e-04 1.417911809545e-04 1.169489358901e-02 2.442088588915e-03 4.142580316102e-02 -4.237241241764e-04 1.418329360469e-04 6.945103144784e-02 2.098774029568e-03 -3.953361239770e-02 -2.999333364678e-04 1.401294608773e-04 -6.737233120639e-02 1.795423281697e-03 -3.761561869230e-02 -1.794244438931e-04 1.263991278641e-04 -5.780205936755e-03 1.653472320963e-03 2.577985818788e-02 -7.272397802643e-05 1.123790816760e-04 -1.581261483063e-02 1.601152697177e-03 3.531734114753e-03 4.018609925233e-05 9.398322605724e-05 1.283262292751e-03 1.605144557864e-03 7.606669657136e-02 1.281076729612e-04 7.069710082618e-05 1.363207783121e-01 1.795112456969e-03 -6.866412811447e-02 2.149430160106e-04 5.575899414047e-05 -1.360449939362e-01 2.038875059967e-03 -1.970658074797e-02 2.560643862503e-04 4.061978490402e-05 9.690761681616e-02 2.271249020163e-03 1.478294064879e-02 2.880889039399e-04 2.220982817770e-05 -1.064791126386e-01 2.554386014467e-03 -1.793023194208e-02 2.866214385933e-04 7.751706574770e-06 6.104715293200e-02 2.883331919331e-03 6.931464952454e-02 2.893608783261e-04 -1.590083656990e-06 3.215018641048e-02 3.236177693813e-03 -1.635108738045e-02 3.173991933551e-04 -7.046248985918e-06 2.834497817111e-02 3.581736694466e-03 1.963962279546e-02 3.207334272166e-04 -1.073917296646e-05 7.142943200140e-02 3.897192712795e-03 -2.547844854603e-02 2.992814703804e-04 -1.394362490799e-05 -2.261191892094e-02 4.188004457922e-03 -2.641403369137e-02 2.935966449706e-04 -1.622849324172e-05 1.860136461866e-02 4.480398296531e-03 6.090666922823e-02 2.699736542221e-04 -1.568581640753e-05 9.920141953552e-02 4.724905527246e-03 -3.133537646025e-02 2.499403829415e-04 -1.671854055423e-05 -4.406938830183e-02 4.952987596249e-03 -8.433878266717e-02 2.395250939177e-04 -1.725854000061e-05 -6.947614579882e-02 5.115779051270e-03 -4.402519579645e-02 2.588105599755e-04 -2.213210735091e-05 -1.321197798947e-01 5.389095485591e-03 8.214939194939e-02 2.326057984675e-04 -1.680956884695e-05 9.482263809997e-02 5.628722925628e-03 4.903240640553e-02 2.086121985907e-04 -1.317393167653e-05 -3.405496708369e-02 5.753106404145e-03 -9.526237551516e-02 2.080407333176e-04 -1.841625215489e-05 -9.570211293036e-02 5.837347691392e-03 8.001686162523e-02 1.862911985200e-04 -2.618807838998e-05 1.259787561668e-01 6.028558265940e-03 -3.582197078666e-02 1.728142813905e-04 -2.387900683323e-05 -1.673460545037e-01 6.222706233294e-03 -4.805528100591e-03 1.578946412059e-04 -2.009286505821e-05 1.163676999656e-01 6.301305030731e-03 8.617454965467e-02 1.141144586747e-04 -2.429243474580e-05 5.003044805673e-03 6.451021559237e-03 -3.825653675848e-02 5.576360835742e-05 -2.031758411206e-05 3.985462644862e-02 6.495004853214e-03 1.086905996284e-01 1.458593784544e-05 -2.283006127744e-05 2.223842440624e-01 6.531587580015e-03 5.152089576082e-02 -3.253693151459e-07 -2.394102321633e-05 1.428964179703e-01 6.577869771682e-03 -1.222614099360e-01 -8.996791483192e-06 -2.248701360912e-05 -2.213857580950e-02 6.595888216284e-03 -9.738115224897e-02 -2.372054508238e-05 -2.167967521708e-05 -5.186588652768e-02 6.603173436623e-03 -5.979876392803e-02 -3.132976859342e-05 -2.016107124217e-05 -1.417361036656e-01 6.509420094081e-03 -1.326502004684e-02 -5.376167902934e-05 -2.545937408092e-05 -7.839592662136e-02 6.493471000814e-03 6.684660950803e-02 -7.804400720984e-05 -2.248592874778e-05 -8.042884649495e-03 6.443077212778e-03 -2.888590368219e-03 -9.061253127830e-05 -2.068088880429e-05 -8.417310735779e-02 6.381590618285e-03 6.633151534258e-02 -1.029190030795e-04 -1.813593308335e-05 1.246201460357e-01 6.256262829331e-03 3.149493148419e-02 -1.247411497699e-04 -1.898856899062e-05 -2.118324438940e-02 6.090714484028e-03 -8.785831506140e-02 -1.256544490959e-04 -2.110828872938e-05 -5.109648408714e-02 6.043558753592e-03 -2.825698987287e-02 -1.460652228794e-04 -1.102026049623e-05 -7.769722413513e-02 5.794653669878e-03 5.156694972481e-02 -1.652715439885e-04 -1.510426786667e-05 5.203741536248e-02 5.731696003366e-03 1.414550812785e-01 -1.665338281246e-04 -1.137905700952e-06 2.052129384218e-01 5.480877637195e-03 1.803941362587e-02 -1.773713914530e-04 -5.640034429313e-07 8.811624261422e-02 5.238062478592e-03 -1.185532301880e-01 -1.872924599352e-04 2.703604945794e-06 -3.189352195412e-02 5.034713487491e-03 -2.724812977604e-02 -1.800100168248e-04 1.053746889224e-05 3.361998306215e-02 4.753397381968e-03 6.573732102553e-03 -1.825199993979e-04 1.220605033552e-05 -1.874605774901e-02 4.580566557858e-03 -3.517372703263e-02 -1.693633253368e-04 2.213289104754e-05 -3.672747100311e-02 4.306364004937e-03 1.267674048807e-02 -1.742163773811e-04 2.159203221505e-05 6.607423227128e-03 4.126085783579e-03 4.565350486069e-02 -1.352720367319e-04 2.538632357638e-05 5.457953871826e-02 4.008329130630e-03 4.715317621101e-04 -1.153674739248e-04 2.946870545396e-05 7.550486751349e-03 3.944973697461e-03 -3.415198071262e-02 -8.846579055446e-05 3.225276861957e-05 -1.372442270698e-02 3.910521950872e-03 -2.636340418378e-02 -7.301299253889e-05 3.096953923197e-05 -4.517632161622e-02 3.827101682079e-03 -6.668374035758e-02 -3.504438035405e-05 1.886036151732e-05 -1.470919034221e-01 3.781781640556e-03 5.525441159763e-02 -3.473219800640e-05 3.854343848737e-06 6.533250157905e-02 3.771568147043e-03 1.078867558600e-01 -5.133347904280e-05 -1.258684545052e-05 6.868160829776e-02 3.695891889713e-03 -1.173640343607e-01 -5.430914663849e-05 -3.699642034207e-05 -1.693955671424e-01 3.680207439208e-03 -6.957703741121e-02 -1.183596576916e-04 -5.600964789157e-05 -7.047246652465e-02 3.511683100920e-03 4.793716938770e-02 -1.696188260614e-04 -8.401823615578e-05 -7.352122836696e-02 3.264789825046e-03 7.286520789335e-02 -2.744011324345e-04 -1.111466437490e-04 7.525794926205e-02 2.917000532555e-03 1.017808428790e-01 -3.934441447194e-04 -1.352045878800e-04 1.300404573910e-01 2.433946764713e-03 9.296152143915e-04 -4.995639800688e-04 -1.557844852689e-04 7.711717969083e-02 1.688348016243e-03 -1.326676716347e-02 -6.824656785619e-04 -1.799548758996e-04 1.035069230641e-01 8.671207797737e-04 -7.169788785993e-02 -8.842616462577e-04 -1.887957149295e-04 -6.627859602902e-02 -1.671526203570e-04 -1.947674096703e-02 -1.100088450568e-03 -1.918761425581e-04 6.455344113001e-02 -1.268375250810e-03 7.503527004843e-02 -1.289004400436e-03 -1.765366267331e-04 8.379194406784e-02 -2.645353598540e-03 6.450751074183e-03 -1.474682203135e-03 -1.609680244343e-04 7.745494327837e-02 -4.210334286989e-03 -5.645574818672e-02 -1.630655730402e-03 -1.396267980931e-04 -2.911955230561e-02 -5.908084829327e-03 -2.381884276758e-02 -1.773710915415e-03 -1.107007070285e-04 2.981725774322e-02 -7.653660970284e-03 6.419499709035e-02 -1.819840197418e-03 -7.145036061396e-05 9.927044187508e-02 -9.581492931470e-03 -8.941195703950e-02 -1.899401050732e-03 -3.769421255893e-05 -1.490066563358e-01 -1.145911746076e-02 3.391988309650e-02 -1.917087288243e-03 5.293682213602e-06 1.671102080681e-01 -1.335972717084e-02 1.463114463528e-03 -1.905124904419e-03 4.591661525312e-05 -1.460804274087e-01 -1.520957600819e-02 -1.465945687265e-01 -1.822282366578e-03 8.483738755988e-05 -1.260789293849e-01 -1.697538620990e-02 6.218904996191e-02 -1.676493948597e-03 1.193616934232e-04 -2.170232748490e-02 -1.867043798552e-02 -3.252535618092e-02 -1.548260682000e-03 1.443443003428e-04 -1.911296417467e-01 -2.016971098771e-02 4.721009209825e-03 -1.405420611649e-03 1.674063440861e-04 -1.226030906525e-02 -2.144745069587e-02 -2.975848305381e-02 -1.209777338914e-03 1.880006958290e-04 -2.506466078543e-01 -2.256062238412e-02 2.259723278080e-02 -1.019026208568e-03 1.997049668550e-04 3.293415649636e-02 -2.352012940086e-02 1.136747279474e-01 -8.360942273116e-04 2.014185501143e-04 -2.329715195959e-02 -2.420877168775e-02 -2.311743928977e-04 -6.198563966755e-04 2.031520299857e-04 3.247180771056e-02 -2.476285382691e-02 6.269130800161e-03 -4.188626542197e-04 1.944474007504e-04 -1.075889035926e-02 -2.510505909339e-02 -8.769687299189e-03 -2.330405629185e-04 1.836229993411e-04 1.493243311218e-02 -2.525774235600e-02 -2.699853486825e-02 -6.084081312085e-05 1.709375187200e-04 -6.475596009576e-02 -2.522983556102e-02 -1.399535809997e-02 9.598298288855e-05 1.578413447408e-04 -1.305828308776e-02 -2.499484434178e-02 6.266219549015e-02 2.359572954375e-04 1.486678030794e-04 6.056843088455e-02 -2.470071653442e-02 1.360301381143e-02 3.861411103471e-04 1.327269097146e-04 1.414774453511e-02 -2.429722411709e-02 -7.408354877708e-03 5.118942049806e-04 1.157163860282e-04 4.575172112913e-02 -2.369881299373e-02 -4.024176537456e-02 5.968889955588e-04 1.064787001182e-04 -6.633578621402e-02 -2.296641560255e-02 -2.380635489066e-02 7.082254209643e-04 1.007497697572e-04 -1.860988652191e-03 -2.223611077399e-02 9.407856757571e-02 7.807565913562e-04 8.770664507498e-05 1.218213489374e-01 -2.142033369421e-02 -1.333878309862e-01 8.754782587892e-04 7.513716194002e-05 -2.686366506246e-01 -2.055266935303e-02 -1.227012695458e-01 9.580529905182e-04 6.043074683887e-05 -1.235811901542e-01 -1.953749151250e-02 5.273135516607e-02 1.037259566965e-03 5.201087001924e-05 -1.631739402925e-01 -1.852128213682e-02 1.152258463810e-01 1.091442156055e-03 3.828361465470e-05 1.068705026078e-01 -1.739595052460e-02 5.048690949776e-02 1.116306301027e-03 2.932152901422e-05 -6.220012129697e-02 -1.632430975853e-02 -7.129524009086e-02 1.135402042169e-03 1.263535778143e-05 -3.571997757391e-02 -1.518700932724e-02 -1.992069013867e-03 1.157632161215e-03 -7.611442989527e-07 -6.618425932470e-02 -1.408673224247e-02 1.517450973834e-01 1.149597687847e-03 -1.791999807324e-05 2.677702171928e-01 -1.291478087843e-02 -6.342677562326e-02 1.129498789550e-03 -2.797222025176e-05 -1.930378105712e-01 -1.178665058696e-02 -1.144895803219e-01 1.105747981573e-03 -3.899989945884e-05 3.879105654894e-02 -1.077569029269e-02 7.591379799814e-02 1.059210227882e-03 -5.547170823209e-05 -4.121021457494e-02 -9.610334522868e-03 2.909272478441e-02 1.010024222579e-03 -5.321633720521e-05 9.697650611776e-02 -8.668163203473e-03 1.054164703062e-01 9.748630280822e-04 -6.290283282504e-05 1.696227260375e-01 -7.630737501136e-03 -1.103239184424e-01 9.098485063205e-04 -5.716110145599e-05 -1.236713307670e-01 -6.683547654679e-03 -1.277072532175e-01 8.473550499970e-04 -5.098808762995e-05 -8.579178039754e-02 -5.850875532669e-03 1.201346261794e-01 7.965692467331e-04 -4.674395673685e-05 1.165979215919e-01 -4.962399544343e-03 3.641996579428e-02 7.488628626564e-04 -3.092843116771e-05 -1.295184880899e-02 -4.150497600399e-03 -1.184533154980e-01 7.427620423049e-04 -1.603134057307e-05 -1.203087094041e-01 -3.314902547856e-03 6.164963825827e-02 7.123420957819e-04 4.770170556316e-06 1.103474277076e-01 -2.614300935814e-03 4.086466704419e-02 7.251859684710e-04 1.642675795077e-05 -3.857937531571e-02 -1.866510535485e-03 -7.394260614128e-02 7.477221210509e-04 3.188851593209e-05 -3.753778457500e-02 -1.137785454319e-03 3.490857590899e-03 7.822681122016e-04 4.361340905322e-05 -3.159766013391e-02 -2.915168801719e-04 8.325700765324e-03 8.427572849749e-04 6.080436802876e-05 -2.088638304435e-02 5.584206279814e-04 3.193810702655e-02 9.056269403274e-04 7.190263315958e-05 3.227855391920e-02 1.560976905279e-03 1.912909609474e-02 9.878989522824e-04 8.748454539560e-05 1.737180914514e-02 2.570280862318e-03 -4.347978529296e-02 1.069959807376e-03 9.376053383105e-05 -5.468101666672e-02 3.622700446507e-03 -3.655508660641e-02 1.158644747409e-03 9.262741915143e-05 -5.573836406768e-02 4.781444753701e-03 9.638440509506e-02 1.240457804813e-03 8.871422429389e-05 1.380877935234e-01 6.052751638592e-03 -2.895891980351e-02 1.332191332920e-03 8.226576531803e-05 -1.136562036747e-01 7.483464945861e-03 -4.900509880406e-02 1.414367578487e-03 7.732189867637e-05 4.007759591529e-02 8.929021010344e-03 5.572163905216e-02 1.482961928237e-03 6.258957503846e-05 -2.212925570379e-03 1.033340646654e-02 4.062106635113e-02 1.528704481336e-03 3.484220812828e-05 1.213197286176e-01 1.199374016362e-02 -1.189894495471e-02 1.533787877489e-03 2.110080914495e-05 -2.601081547980e-02 1.357349948228e-02 -6.658638374860e-02 1.528105237100e-03 -4.245401671084e-06 -1.185303887964e-02 1.515854014055e-02 -2.777966511835e-02 1.494539270284e-03 -3.124563122078e-05 -8.157014571650e-02 1.664744911949e-02 3.424454829802e-02 1.471899125070e-03 -6.535336328267e-05 5.663605771639e-02 1.816325278863e-02 7.548878748236e-03 1.401726647664e-03 -9.281308544093e-05 -6.647238822003e-02 1.950022133868e-02 -1.403166946418e-03 1.281413043419e-03 -1.265668495724e-04 5.382972382356e-02 2.067160728326e-02 6.074183165901e-02 1.113269059946e-03 -1.611794334663e-04 5.501127509799e-02 2.158550743001e-02 -7.305727294292e-02 9.562769668098e-04 -2.005599017292e-04 -9.228482206229e-02 2.254717809900e-02 7.002246362194e-02 7.376514718131e-04 -2.155681934339e-04 1.950562023419e-01 2.316595986977e-02 6.258038252090e-02 5.174026513890e-04 -2.355251402606e-04 3.287594297951e-02 2.358633199430e-02 -4.502171656378e-02 2.737938234190e-04 -2.460020216702e-04 1.050127692143e-01 2.366757806384e-02 1.132063288508e-02 2.339716640366e-05 -2.569172088527e-04 5.551720874966e-02 2.355839084665e-02 -4.881986281058e-02 -2.003651943428e-04 -2.552570166132e-04 7.373043593134e-03 2.339863096766e-02 3.051321877695e-02 -4.250130931252e-04 -2.297608472917e-04 1.165436463036e-01 2.289798635514e-02 7.865466650334e-02 -6.512804737976e-04 -2.058456555524e-04 1.646823765998e-01 2.214066063604e-02 -3.935176467356e-02 -8.228322786336e-04 -1.790639178184e-04 3.784011695644e-02 2.122467388804e-02 -8.846090148298e-02 -9.901401932086e-04 -1.446106742318e-04 -1.223942636615e-02 2.009026204260e-02 -1.397844439126e-02 -1.162791133481e-03 -1.109317058331e-04 9.883228173914e-03 1.888708773397e-02 -2.401631012736e-02 -1.229327108075e-03 -7.049633115165e-05 -6.027204662086e-02 1.760202647280e-02 3.591678489644e-02 -1.294421814411e-03 -2.977872471768e-05 8.171679796680e-02 1.626726428805e-02 6.949308729666e-03 -1.320625128722e-03 9.044684486179e-06 -4.637342916153e-02 1.490953870539e-02 1.781347705235e-03 -1.313094482642e-03 4.314817824542e-05 8.527949337727e-02 1.365464596113e-02 -8.441172273892e-03 -1.248174136993e-03 7.811335848887e-05 -6.325577370931e-02 1.239795767602e-02 -9.379017351845e-02 -1.165254038981e-03 1.009473044823e-04 -1.023008536596e-01 1.130601781890e-02 -1.534485146126e-02 -1.044588055303e-03 1.221728774387e-04 -9.394547663184e-02 1.034463336714e-02 5.358791415272e-02 -9.204616720357e-04 1.364800173638e-04 4.874974645806e-03 9.447161105805e-03 8.872941411206e-02 -8.061790190734e-04 1.372099549363e-04 8.351335159228e-02 8.636236893560e-03 -9.066082958008e-03 -6.651575538779e-04 1.259532826759e-04 -1.325719127021e-02 8.058248314768e-03 -1.171832470357e-01 -5.597022738281e-04 1.158503558108e-04 -1.508531424790e-01 7.555772179967e-03 4.042068414992e-02 -4.447363571459e-04 9.568129656459e-05 6.758417702962e-02 7.172801268327e-03 7.499746737925e-02 -3.564027085041e-04 7.170744647461e-05 -8.582077205386e-04 6.770289589297e-03 -2.147393921617e-02 -2.980059376251e-04 3.597496410241e-05 2.463629859728e-02 6.513652302206e-03 5.760394732882e-02 -2.743905681903e-04 6.512703490850e-06 1.143496869371e-01 6.235721205305e-03 5.736371186627e-02 -2.869287336421e-04 -2.610812883278e-05 1.393637223298e-01 5.961897602013e-03 -8.477899183525e-02 -3.359027762545e-04 -5.517702391262e-05 -5.520829673338e-02 5.580402471826e-03 -1.406702961452e-01 -3.986763495050e-04 -8.576169735184e-05 -1.419768699605e-01 5.221516265486e-03 -1.647308272665e-03 -4.843164422453e-04 -1.032004560216e-04 -5.850291327871e-02 4.595766096191e-03 1.235438815610e-01 -6.122304011550e-04 -1.281035842952e-04 1.051108931615e-01 3.900663114111e-03 3.496901034100e-02 -7.407851686916e-04 -1.412552596908e-04 1.143510740330e-02 3.116032718147e-03 -4.175714144659e-02 -8.946647319896e-04 -1.425696528811e-04 2.159661026838e-02 1.986033147557e-03 -4.691977256827e-02 -1.046444243117e-03 -1.525081828992e-04 -8.240443773324e-02 8.093331939240e-04 4.699148087235e-02 -1.204244830447e-03 -1.462228740641e-04 1.155795720131e-01 -4.904623766814e-04 1.831018963506e-01 -1.328996504841e-03 -1.313594438938e-04 2.837993549680e-01 -1.947249965279e-03 -4.878947320973e-02 -1.457548065076e-03 -1.128959196337e-04 1.800062559362e-02 -3.455891026098e-03 -1.072995048458e-01 -1.555056150858e-03 -8.488653421815e-05 6.920034527635e-02 -5.077984537900e-03 -2.418462244590e-02 -1.610181899256e-03 -5.632046065472e-05 -3.036861929819e-02 -6.790460657902e-03 -1.672029190880e-01 -1.640765175407e-03 -2.939953369411e-05 -2.652054928996e-01 -8.351014832581e-03 6.543970845794e-02 -1.618745274037e-03 1.167058553411e-05 1.005107976177e-01 -9.923980141238e-03 8.730828990300e-02 -1.581927166504e-03 4.873859156025e-05 -9.058891309362e-02 -1.151587560070e-02 -1.005605631679e-01 -1.526944843815e-03 7.736421921491e-05 -1.006103287182e-01 -1.302996351903e-02 -2.046311537405e-02 -1.456815193182e-03 1.022070701836e-04 -1.315151438417e-01 -1.451473532139e-02 7.751663317179e-02 -1.352240662340e-03 1.162775576197e-04 5.442293762542e-02 -1.574398256421e-02 1.873504174496e-02 -1.218725371355e-03 1.360576844260e-04 -9.404506035180e-02 -1.682093428252e-02 8.567690555066e-04 -1.038880126287e-03 1.510352223570e-04 5.613647573643e-02 -1.776803002682e-02 4.902695902659e-02 -8.923904334086e-04 1.586872459176e-04 4.008857701367e-03 -1.849886478873e-02 -1.007318629848e-01 -7.286916922647e-04 1.664905887063e-04 -1.453272502332e-01 -1.908918151498e-02 -3.307729415584e-02 -5.653426880796e-04 1.685770879724e-04 -6.214573061031e-02 -1.951155369320e-02 5.998232172185e-02 -3.804277121591e-04 1.680407294547e-04 -2.536260678954e-02 -1.977369656842e-02 4.856360221234e-02 -1.878482432644e-04 1.651918790119e-04 3.498147381436e-02 -1.988556015739e-02 3.207100035938e-02 -2.911339682992e-05 1.607383801165e-04 3.877939392923e-02 -1.975522024692e-02 -5.969747101024e-02 1.235445414394e-04 1.638685571357e-04 -8.441346820611e-02 -1.957150148098e-02 3.217539234833e-03 2.931298618537e-04 1.595471445653e-04 4.521447239890e-02 -1.921057366460e-02 3.629019984386e-02 4.487600686966e-04 1.585792758316e-04 -1.183306851839e-02 -1.863101732456e-02 -1.718386788950e-02 6.283606110863e-04 1.643696552161e-04 1.084673661990e-02 -1.795775799092e-02 1.221710970300e-02 8.063910837239e-04 1.658065699799e-04 1.260115088760e-02 -1.709945630111e-02 6.797496672093e-02 9.936539367633e-04 1.695525897142e-04 1.467966700618e-01 -1.602712438831e-02 -8.391597498902e-02 1.153930346775e-03 1.769515878335e-04 -1.552307990904e-01 -1.468117297395e-02 -7.176749061743e-02 1.336416234625e-03 1.914629469254e-04 3.261688826900e-03 -1.323579592618e-02 7.481338604589e-02 1.522156638752e-03 1.966128837894e-04 -5.604026998657e-03 -1.163877069491e-02 -1.146955043745e-01 1.733193528877e-03 1.949602303456e-04 -2.261293199221e-01 -9.783593498697e-03 -4.754995624482e-02 1.936826270377e-03 1.940211230007e-04 -1.007039394883e-01 -7.822452809069e-03 1.236095341746e-01 2.110355411670e-03 1.807017497477e-04 2.108974842706e-02 -5.549021198784e-03 -3.322277533118e-03 2.290307513993e-03 1.722764016356e-04 -1.073484945545e-01 -3.247696847982e-03 -6.862168520767e-03 2.454278751659e-03 1.456129169348e-04 7.365411385529e-03 -8.211653166289e-04 6.320882841679e-02 2.614735870193e-03 1.103824288509e-04 1.906916227905e-02 1.876363068008e-03 -3.270889391396e-02 2.723259975813e-03 8.144812287224e-05 -5.805237644238e-02 4.574152136965e-03 1.048127717210e-01 2.782631988755e-03 4.001783747444e-05 2.286947057211e-01 7.361209129852e-03 6.293208172002e-02 2.793573510554e-03 -2.031669167425e-06 6.781178699766e-02 1.019325991231e-02 -1.554895382379e-01 2.730185035416e-03 -4.313482633154e-05 -8.228437075476e-02 1.286392721080e-02 -9.050048281356e-02 2.673455410111e-03 -9.536373816889e-05 -1.131891786295e-01 1.552210889836e-02 -2.189514569244e-02 2.547636555179e-03 -1.408878728218e-04 -1.260746621396e-01 1.803373996986e-02 1.094656137463e-01 2.375351702061e-03 -1.849467032064e-04 1.057420488632e-01 2.042509526346e-02 1.754468744276e-01 2.176280709748e-03 -2.200355091139e-04 2.248190867155e-01 2.247857131883e-02 -5.930185005315e-02 1.945338562585e-03 -2.595168307645e-04 -1.286165124314e-02 2.431866343059e-02 -5.797604126319e-02 1.659693397951e-03 -2.884244990846e-04 1.088670041891e-01 2.584426137646e-02 3.418696556474e-02 1.374012174289e-03 -3.116202802195e-04 5.551227988634e-02 2.708380259574e-02 1.431548195458e-02 1.062399806661e-03 -3.242719385413e-04 1.374979680983e-01 2.810817661375e-02 4.258742064213e-02 7.434512370234e-04 -3.189058671516e-04 1.406871211706e-01 2.861162194176e-02 -8.031170020236e-02 3.894933519679e-04 -3.203686520566e-04 -2.312543230646e-02 2.890126581749e-02 -3.620646043493e-02 8.686005389242e-05 -3.037925742388e-04 6.827420030075e-02 2.881555847863e-02 1.253327222671e-02 -2.072584660513e-04 -2.847419899698e-04 1.941112146955e-03 2.855595172496e-02 -4.783440251597e-02 -4.448860710956e-04 -2.494206160575e-04 -2.739460473120e-02 2.799669691286e-02 6.584931521468e-02 -6.918552497010e-04 -2.119700779547e-04 1.336397425763e-01 2.722732329475e-02 1.306321130409e-02 -8.681169249494e-04 -1.693388487533e-04 -1.268182123023e-03 2.618900917006e-02 -5.154577479586e-02 -1.045232829335e-03 -1.313495171230e-04 3.054819298460e-02 2.497807383498e-02 -2.807660684008e-02 -1.184114246152e-03 -9.474124149089e-05 -5.742139580318e-02 2.376464980766e-02 4.774715620457e-02 -1.251449973694e-03 -5.085802761892e-05 1.260425053937e-01 2.240908060277e-02 2.116783802194e-02 -1.277861403421e-03 -1.685660219653e-05 -1.508571975930e-02 2.121545251709e-02 -5.091736577445e-02 -1.280707883255e-03 2.784473535702e-05 2.420777384483e-02 1.996048937307e-02 3.965841101173e-02 -1.233967702633e-03 6.008545587960e-05 6.423110226415e-02 1.876078430013e-02 -8.481976581652e-02 -1.161746844546e-03 8.564153283725e-05 -1.454317577882e-01 1.764519134474e-02 2.181117286561e-02 -1.111489737866e-03 1.044262658011e-04 1.078534479954e-01 1.654395400873e-02 3.433594171555e-02 -1.035683860247e-03 1.089892475150e-04 -7.675987435711e-02 1.554706912917e-02 -5.776131819609e-02 -9.275489424835e-04 1.056617692919e-04 -7.669188396814e-03 1.469466661796e-02 8.169856119452e-02 -8.404895130043e-04 9.801649452000e-05 8.663724803194e-02 1.391428641963e-02 -3.857778529326e-02 -7.451971842936e-04 8.133938135387e-05 -8.482475898333e-02 1.320589571712e-02 -6.448384273347e-02 -6.713891409335e-04 5.780702929022e-05 -4.233043743501e-02 1.256347805569e-02 -2.491275881111e-03 -6.374640647930e-04 3.031217678598e-05 -8.980731074555e-02 1.186656060246e-02 2.476489977807e-02 -5.979888359967e-04 -7.453500946046e-06 7.199362121134e-03 1.128811833206e-02 5.721275876690e-02 -5.990808893612e-04 -3.688345541154e-05 2.461820678824e-02 1.073021060989e-02 7.145796735285e-03 -6.480356447050e-04 -6.137128159345e-05 2.149095559170e-02 1.014746550312e-02 6.990228710022e-02 -7.157178183354e-04 -8.030064946866e-05 1.644227809887e-01 9.397303378448e-03 2.504452246126e-03 -8.298788222332e-04 -1.014765614749e-04 2.649986008396e-02 8.546719521990e-03 -8.302755866669e-02 -9.094572412759e-04 -1.161898574990e-04 -1.632336344686e-03 7.499719233917e-03 2.376790650475e-02 -1.008503993144e-03 -1.302703187937e-04 7.403567309346e-02 6.426105353760e-03 2.946822373660e-02 -1.140765686802e-03 -1.275984564289e-04 5.730411112851e-02 5.143347185659e-03 5.048464916234e-02 -1.265580433831e-03 -1.227847543138e-04 1.750049714181e-01 3.798808927201e-03 -1.426994504185e-01 -1.374111747043e-03 -1.044757615147e-04 -2.280947897085e-01 2.368123351090e-03 -3.074162294943e-02 -1.440197093271e-03 -7.710280186845e-05 1.135217255193e-01 8.415899304672e-04 1.001092417782e-01 -1.487441788649e-03 -4.495557134202e-05 -2.787630615215e-02 -6.673114152411e-04 5.383180031254e-02 -1.517800127825e-03 -2.703674753622e-06 2.211853261443e-01 -2.184150667149e-03 -1.218733484475e-02 -1.485867930738e-03 4.220530234805e-05 -5.225097584165e-02 -3.662696853503e-03 -6.937012311654e-02 -1.426136289029e-03 8.772338972017e-05 8.244507991127e-02 -5.009541098246e-03 -8.289900808988e-02 -1.312555590375e-03 1.356078549604e-04 -2.180489920214e-01 -6.291390298161e-03 -1.582717344794e-01 -1.142051333870e-03 1.740358765838e-04 -2.340983890475e-01 -7.309557990208e-03 1.258596251792e-01 -9.398809606511e-04 2.139080195940e-04 3.367025833693e-02 -8.123464395667e-03 7.471664078202e-02 -6.998943768298e-04 2.453347540179e-04 -8.466510748345e-02 -8.629486740811e-03 2.299605656055e-02 -4.340677682499e-04 2.728687243369e-04 7.966237145803e-02 -8.945677160208e-03 5.061594098714e-02 -1.351737777525e-04 2.836018835133e-04 1.656677449083e-02 -8.926572944929e-03 -4.226128632719e-02 1.515114320346e-04 2.881387312061e-04 -4.860201196352e-03 -8.646199693560e-03 -9.166375112951e-02 4.376389132607e-04 2.802720322942e-04 -1.667607277682e-01 -8.040075187528e-03 -8.375363496694e-02 7.325626985783e-04 2.662896618261e-04 -1.723674711302e-01 -7.118588893526e-03 7.349834220449e-02 9.764888467808e-04 2.477494553476e-04 -1.976404335919e-02 -6.103414913619e-03 7.321441740866e-02 1.206531789981e-03 2.097314657150e-04 -2.593863631290e-02 -4.780090324216e-03 2.811296973037e-02 1.388267033288e-03 1.745050643542e-04 3.646189610155e-02 -3.321041131305e-03 1.979662176214e-02 1.538029061698e-03 1.327431498227e-04 1.365460721137e-02 -1.779614560612e-03 -3.449136464717e-02 1.649944177026e-03 8.524549297859e-05 -3.252083319279e-02 -1.072599235247e-04 -6.723833784757e-04 1.692942380497e-03 4.176070349082e-05 1.230984045442e-02 1.601928314590e-03 7.334114138209e-02 1.705700239098e-03 -1.366975277530e-07 1.141614495714e-01 3.334307212869e-03 3.628021251289e-02 1.677590529736e-03 -3.682304323863e-05 8.487026548020e-02 5.021316286246e-03 1.450366573114e-02 1.634099719271e-03 -6.993903353842e-05 1.431687810337e-01 6.653502532716e-03 -7.805107222934e-02 1.565087991453e-03 -9.698820165583e-05 -7.123187897848e-02 8.077649959487e-03 4.749039441053e-03 1.433655085477e-03 -1.276622226738e-04 1.526668599158e-01 9.366030176267e-03 3.082760374992e-02 1.305273037019e-03 -1.536945837682e-04 -9.576671478635e-03 1.055860500188e-02 -8.113101915313e-02 1.139528982261e-03 -1.703408582119e-04 -9.595178390504e-03 1.162269174427e-02 -4.482269174105e-02 9.670129060242e-04 -1.793990020440e-04 -9.922205496074e-02 1.251373366359e-02 2.115039500771e-03 8.034898364966e-04 -1.845706120721e-04 -5.365099388963e-03 1.317499990995e-02 9.044021707046e-02 6.142829014836e-04 -1.906627754985e-04 8.165837918018e-02 1.372137567865e-02 -5.854836342987e-03 4.667372538508e-04 -1.886370956768e-04 -1.707477207494e-02 1.422230012899e-02 -5.601421358070e-02 2.731021069033e-04 -1.732293757802e-04 -3.037004798123e-02 1.444939513008e-02 2.787949562236e-02 1.372745668520e-04 -1.643193111938e-04 3.868421916978e-02 1.447367059984e-02 -8.478233463705e-03 -3.748368495543e-05 -1.568139089197e-04 -4.732651490864e-02 1.430390807415e-02 1.774284820574e-03 -1.614430379392e-04 -1.506480368073e-04 4.223278881093e-02 1.408040373187e-02 2.302378221091e-02 -3.120449147848e-04 -1.349259757851e-04 -1.278950486817e-03 1.363728847247e-02 1.257505973216e-02 -4.424130387693e-04 -1.241185399094e-04 6.738290827524e-02 1.327682631581e-02 2.721653724353e-02 -5.588438056498e-04 -9.422484141409e-05 5.315412400024e-02 1.271473917977e-02 2.071197015464e-02 -6.777411368939e-04 -7.028707376820e-05 1.088068485845e-01 1.210447588166e-02 -3.860967712829e-03 -7.014652574349e-04 -4.190472716712e-05 4.543218857458e-02 1.136072171457e-02 -4.708094577134e-02 -7.555296885010e-04 -1.861745831236e-05 1.464495704184e-02 1.060523914016e-02 -3.013541676924e-02 -7.440005907336e-04 7.293895476548e-06 -1.483864496390e-02 9.819467007056e-03 5.088443454834e-02 -7.344813496860e-04 3.125100781211e-05 1.164138261385e-01 9.025295649688e-03 2.065421472225e-02 -7.143925408455e-04 5.236206446109e-05 2.646978448059e-02 8.363858218752e-03 -1.087491933764e-01 -6.759878228046e-04 7.935496884205e-05 -1.010845606143e-01 7.763231029892e-03 -2.141080609202e-02 -6.108189975973e-04 1.029807244452e-04 -1.635182770344e-02 7.161136511464e-03 3.674560820994e-02 -5.173348088566e-04 1.149036500915e-04 -2.759334419440e-02 6.819802388317e-03 -2.277157343257e-02 -3.673143317690e-04 1.339570215110e-04 -6.189497456859e-02 6.473669526663e-03 -3.218272384718e-02 -2.368110121352e-04 1.358596170466e-04 -9.195879188876e-02 6.347260860384e-03 1.815685275932e-02 -8.545372045127e-05 1.382338982027e-04 -2.558126904995e-02 6.356573285953e-03 5.057903249850e-02 5.140265770673e-05 1.336315384006e-04 9.199273108238e-03 6.519548772722e-03 5.371117688913e-02 1.953759482774e-04 1.240125697535e-04 8.184108472831e-02 6.769255948798e-03 4.757219047974e-02 3.320074890046e-04 1.049976799073e-04 1.043436540677e-01 7.098013714352e-03 -1.323753287223e-01 4.275612577544e-04 7.842797747803e-05 -1.829095727162e-01 7.441147309866e-03 -7.935140073382e-02 4.859625317079e-04 4.242433920368e-05 -5.435914739992e-02 7.920954928062e-03 6.369243296966e-02 4.928921020664e-04 1.139460048292e-05 -5.552470677691e-02 8.398927644467e-03 3.958419633197e-02 5.142045988530e-04 -2.219307255537e-05 2.480924526401e-02 8.846435111118e-03 7.182360140381e-02 4.597925251828e-04 -5.631237376197e-05 8.812249603071e-02 9.303750559386e-03 -4.698959540118e-02 3.959452889208e-04 -8.301690448041e-05 -6.916994553836e-02 9.673354595891e-03 5.137113983306e-02 2.860075661659e-04 -1.064713334235e-04 1.908647756968e-01 9.908965122241e-03 9.436037301356e-02 1.694070795280e-04 -1.270717056157e-04 1.195508004888e-01 1.002775722762e-02 -8.911165623861e-03 5.529637542302e-05 -1.410194996069e-04 1.730424444491e-01 1.001463385270e-02 -1.065554124036e-01 -9.215866183908e-05 -1.477314732829e-04 -9.356002431854e-02 9.833037745977e-03 -6.762401165258e-02 -2.512275951398e-04 -1.491350078657e-04 3.779442114395e-02 9.474329770374e-03 3.977207289003e-02 -4.003497674297e-04 -1.460830907229e-04 -1.401587853848e-02 9.025789312033e-03 -6.306360439385e-02 -5.435393017389e-04 -1.323926920493e-04 -8.833278764374e-02 8.383646962718e-03 8.542959561939e-02 -6.700441571771e-04 -1.186118883189e-04 1.568433127003e-01 7.623414567049e-03 3.590103578789e-03 -7.891915443544e-04 -1.008744801361e-04 -8.115258048616e-02 6.731959786820e-03 4.577133398215e-02 -8.822432238888e-04 -8.315065588722e-05 2.483859806646e-01 5.751109956936e-03 -1.925212991419e-02 -9.615106119688e-04 -6.504380930815e-05 -1.196568403145e-01 4.777020857033e-03 -8.903569083813e-02 -9.888099700687e-04 -4.188103334688e-05 7.031459898835e-02 3.705852369093e-03 9.596666606616e-03 -1.030011138909e-03 -2.525934559997e-05 -1.004635071013e-01 2.686576031710e-03 -1.269020190611e-01 -1.036777293589e-03 -5.177048734541e-06 -1.834894391338e-01 1.669226174896e-03 1.415913439030e-02 -1.031065203554e-03 1.191744389193e-05 -7.214523832071e-02 6.650939962570e-04 6.435658187995e-02 -9.839755450828e-04 2.510179503877e-05 -5.477627537394e-02 -3.074746653538e-04 -2.245531975766e-02 -9.491765812874e-04 3.480854505032e-05 -1.170558778360e-01 -1.163573119579e-03 1.492045045969e-01 -9.085398495256e-04 4.782999453449e-05 2.436327338198e-01 -2.025377017172e-03 1.906205185713e-02 -8.550853357215e-04 5.380611008136e-05 -7.893177412177e-02 -2.844869735464e-03 -6.910278703910e-02 -8.029643516901e-04 5.699601636642e-05 1.054271597416e-01 -3.371171744656e-03 5.730854756870e-02 -6.832898117679e-04 7.816667817721e-05 3.568532101563e-02 -3.779549517942e-03 4.401999726641e-03 -5.505509926032e-04 1.021580742959e-04 1.142311591949e-01 -4.012694963115e-03 1.877928565310e-02 -3.694223878525e-04 1.330426994769e-04 7.324389232184e-02 -4.151171808349e-03 -8.463895919199e-02 -1.778172661223e-04 1.629569124774e-04 -5.504675918911e-02 -4.046787693150e-03 -1.182857685290e-01 7.215804740346e-05 2.024392794934e-04 -1.633276447361e-01 -3.565013171725e-03 -2.413322485119e-02 4.024277789583e-04 2.593589356927e-04 -1.033132088915e-01 -2.734355225907e-03 1.207108580053e-01 7.344652713637e-04 3.274641987063e-04 7.809407127448e-02 -1.632101370848e-03 -8.760669474301e-03 1.135473164828e-03 3.954948972672e-04 -1.208345478401e-01 -1.442816628053e-05 -8.080024033537e-03 1.631715920812e-03 4.770846598401e-04 6.193402320741e-02 2.064344638669e-03 4.585113901993e-02 2.206293004982e-03 5.598725735466e-04 -2.913226980024e-02 4.750302836072e-03 -2.552259890320e-02 2.876295558873e-03 6.472691407509e-04 1.088882540100e-02 8.223398885568e-03 6.232933058642e-02 3.626214120645e-03 7.446194594461e-04 9.552639137260e-02 1.242401322887e-02 -7.742936745527e-03 4.504500291123e-03 8.362038811719e-04 -4.597048090056e-03 1.750181805376e-02 -7.611364513107e-02 5.445997082885e-03 9.234907592416e-04 -5.670089888954e-02 2.360270986618e-02 -2.127875489173e-02 6.494379309464e-03 1.007679621257e-03 -4.715455787351e-02 3.082507214254e-02 3.694001176225e-02 7.579398966958e-03 1.086365698521e-03 1.717912463497e-02 3.916172193076e-02 -2.445393348657e-04 8.759728990737e-03 1.148941992147e-03 -4.764363654325e-02 4.871004038283e-02 -4.751071540588e-02 9.984717120917e-03 1.194415308512e-03 -7.784230617679e-02 5.949172079031e-02 -1.378025829864e-02 1.122657801598e-02 1.217651520647e-03 -7.520415314053e-02 7.146268091778e-02 -1.000483118612e-02 1.251002421727e-02 1.209915351644e-03 -9.785196854903e-02 8.485058894022e-02 9.595137140726e-02 1.376777841374e-02 1.187780419285e-03 1.166985896740e-01 9.937584709824e-02 -7.683755555629e-03 1.502376865200e-02 1.128371424661e-03 -1.132194796603e-01 1.151702285398e-01 -3.027638451987e-02 1.614776563469e-02 1.046941138879e-03 5.614582063426e-02 1.319765193185e-01 7.283693175017e-02 1.719334315493e-02 9.299583533409e-04 3.245438384007e-02 1.498594294793e-01 3.602956877136e-02 1.810235853324e-02 7.937697384858e-04 1.282049581770e-01 1.685860108839e-01 -9.804060628377e-03 1.884803399391e-02 6.335389505649e-04 1.284626258331e-02 1.879966736699e-01 -1.761645197372e-02 1.945119961640e-02 4.531980676792e-04 9.297205422953e-02 2.079229913729e-01 1.234467862729e-02 1.987121014111e-02 2.583693167320e-04 3.753561983789e-02 2.281601981988e-01 -4.741000551627e-02 2.007604842249e-02 5.406217645732e-05 -1.847956803011e-03 2.483124372121e-01 2.375010835743e-01 2.009029615810e-02 -1.694043253863e-04 5.125377869864e-01 2.686148061724e-01 2.315871218596e-01 1.989225548091e-02 -3.685931987519e-04 4.613262869162e-01 2.884976672112e-01 3.238174071326e-02 1.949952431767e-02 -5.675792472007e-04 5.773012684129e-01 3.079400510909e-01 -4.521601708472e-02 1.891647057837e-02 -7.459053294134e-04 3.708942527468e-01 3.265817161875e-01 -3.683424857368e-02 1.814171519112e-02 -9.130838110424e-04 5.036327712656e-01 3.443943831472e-01 1.941971331671e-01 1.721127241711e-02 -1.053435758111e-03 7.592885190810e-01 3.613186243123e-01 8.723125336616e-03 1.616077094223e-02 -1.157296804451e-03 5.210790219388e-01 3.771645620310e-01 -1.795668727796e-01 1.500536319956e-02 -1.229522742435e-03 4.001547735218e-01 3.918450881793e-01 2.820549822887e-02 1.381090486642e-02 -1.270459979156e-03 5.774900183965e-01 4.052916508233e-01 3.132590132995e-02 1.261981146236e-02 -1.283225942097e-03 4.628065761817e-01 4.174837885870e-01 -4.502613513866e-02 1.137310363056e-02 -1.269880722630e-03 4.874377481192e-01 4.284895981131e-01 3.616813253004e-02 1.020350906129e-02 -1.228685800263e-03 5.351428412417e-01 4.383346399485e-01 3.947122613496e-02 9.064362559528e-03 -1.164825436279e-03 5.663802003891e-01 4.470513067512e-01 -6.347610975406e-02 7.999166124057e-03 -1.084939217950e-03 4.081906217336e-01 4.546706059148e-01 -1.570309662054e-02 7.015513842376e-03 -9.977522676693e-04 5.349740071481e-01 4.614968856025e-01 1.453107732675e-03 6.147210306977e-03 -8.905292217981e-04 4.110968371990e-01 4.675387473744e-01 -2.218568568701e-02 5.387291748808e-03 -7.760163141727e-04 4.906026357740e-01 4.728727365255e-01 2.381281334618e-02 4.742785704863e-03 -6.613204222428e-04 4.587224638913e-01 4.775121588510e-01 -5.561642199975e-02 4.192548741383e-03 -5.581654147437e-04 3.793697917745e-01 4.816945542440e-01 -1.689118333193e-02 3.742057559295e-03 -4.584777773702e-04 4.249400972275e-01 4.854211101552e-01 9.450426207188e-02 3.364531019073e-03 -3.725266658193e-04 5.683783159183e-01 4.888243950410e-01 7.535781219804e-02 3.071310663763e-03 -2.980893090735e-04 5.756557216236e-01 4.920004597254e-01 -7.882265266589e-02 2.850664714367e-03 -2.345193314382e-04 4.107330105865e-01 4.950212847406e-01 -8.712934659425e-02 2.740454228795e-03 -1.820098463547e-04 4.013970284351e-01 4.979099230249e-01 3.834436660366e-02 2.617871727701e-03 -1.426575036430e-04 4.874217437939e-01 5.006189929903e-01 2.031640164097e-02 2.539604340318e-03 -1.224971333539e-04 4.420298317170e-01 5.032957724307e-01 4.346640447164e-02 2.482432287465e-03 -1.104592813604e-04 5.743545527371e-01 5.058757604933e-01 7.860274948758e-02 2.438264190945e-03 -1.118618682777e-04 5.992353306922e-01 5.084466822093e-01 -2.175549887224e-02 2.376664295483e-03 -1.181579262276e-04 5.308435549927e-01 5.109589338535e-01 -1.115295634215e-01 2.323078895386e-03 -1.316205047988e-04 3.761762038492e-01 5.134495680337e-01 8.205580167910e-02 2.254181603207e-03 -1.468942062142e-04 6.949551583509e-01 5.159155265879e-01 8.850032021208e-02 2.175946904166e-03 -1.615597517154e-04 5.531768442734e-01 5.180076086377e-01 -4.119483818578e-02 2.098405473696e-03 -2.020181796856e-04 6.125654819793e-01 5.201126017259e-01 -8.986962110593e-02 2.003609540329e-03 -2.329424501225e-04 3.734376020616e-01 5.220350769728e-01 -1.061073854668e-01 1.880476867733e-03 -2.673357536937e-04 4.003507110457e-01 5.239279265385e-01 8.739406509658e-02 1.716429394092e-03 -2.890995913478e-04 5.482257322547e-01 5.255103813415e-01 5.565409328125e-02 1.518008628130e-03 -3.184923362766e-04 5.116588976082e-01 5.268451554409e-01 2.766304296466e-02 1.332395171078e-03 -3.477882359892e-04 6.035518181840e-01 5.280553511535e-01 8.561800907283e-02 1.095448775286e-03 -3.642986343705e-04 6.828949157539e-01 5.290091916374e-01 -1.036092261707e-01 8.167268546502e-04 -3.764883541977e-04 3.963333658427e-01 5.296649851122e-01 -2.017093189072e-02 5.589131432569e-04 -3.864208972631e-04 6.425530519724e-01 5.301239571963e-01 7.165399784376e-02 2.907180237443e-04 -3.849729832240e-04 5.396413615302e-01 5.302652715749e-01 -6.412031313450e-02 1.645298656857e-05 -3.818160106555e-04 5.143124257034e-01 5.301732013437e-01 -6.539071942301e-02 -2.309559423105e-04 -3.704160115690e-04 4.088599226842e-01 5.298125280424e-01 7.410786681474e-02 -4.659194914434e-04 -3.549696578033e-04 6.625281593329e-01 5.292600074501e-01 1.405953667627e-01 -7.037558944625e-04 -3.306383356067e-04 6.900506562097e-01 5.284273574711e-01 1.111605056164e-02 -9.065045698517e-04 -3.071355189658e-04 6.847602604562e-01 5.274588930204e-01 -9.945409402982e-02 -1.092246599695e-03 -2.754279040981e-04 4.911424681501e-01 5.263085309052e-01 -7.265791117773e-02 -1.233036646847e-03 -2.428773529750e-04 5.394444381008e-01 5.249907942108e-01 -4.741757927135e-02 -1.359659605733e-03 -2.120291954998e-04 3.963073096074e-01 5.236008760206e-01 -5.560936001205e-02 -1.459812464482e-03 -1.786222201461e-04 4.282257180767e-01 5.221433137735e-01 4.248584371751e-02 -1.513648133596e-03 -1.462690760818e-04 4.812789970424e-01 5.205833474051e-01 1.459771209173e-01 -1.526943737005e-03 -1.218178805151e-04 7.201799599112e-01 5.190036503559e-01 -1.769784809460e-02 -1.521139029595e-03 -1.016846972883e-04 4.458833008532e-01 5.175429754163e-01 -1.585590909455e-01 -1.498952343238e-03 -7.695697890432e-05 4.030617780201e-01 5.161968315753e-01 1.240626418000e-02 -1.432049723967e-03 -5.054349781534e-05 4.706958292132e-01 5.147729627671e-01 1.961874174439e-02 -1.370464184102e-03 -4.030539073577e-05 4.422992615089e-01 5.134742674758e-01 -1.483889286814e-02 -1.292410794682e-03 -3.020782292010e-05 4.410180434769e-01 5.123152287685e-01 3.722186603915e-02 -1.162782284722e-03 -1.997481129022e-05 5.167429935872e-01 5.111899967818e-01 6.201024192390e-02 -1.048652946425e-03 -1.865156394108e-05 5.650385273247e-01 5.101789265201e-01 6.876272403755e-02 -9.477798269213e-04 -1.873294004116e-05 6.542684416623e-01 5.092823642240e-01 -8.993361450944e-02 -8.745678293846e-04 -1.902035600424e-05 3.851712983058e-01 5.083522361909e-01 -2.892339807514e-02 -7.711537341636e-04 -3.095224793877e-05 5.964216455120e-01 5.075675486465e-01 6.658635057689e-02 -6.935313006891e-04 -3.857419291498e-05 5.183439994596e-01 5.068264891550e-01 8.885366680933e-03 -6.209115101875e-04 -4.907669462911e-05 6.141923788739e-01 5.062702258221e-01 -5.625390549142e-02 -5.712826818035e-04 -4.959000021621e-05 4.058361884768e-01 5.057320106854e-01 -4.947937122921e-02 -5.264590047849e-04 -5.320135410227e-05 5.152336364155e-01 5.052013302869e-01 5.091646380508e-02 -4.666223075741e-04 -6.052566908439e-05 5.076691160869e-01 5.048015728640e-01 -6.182786892944e-02 -3.987431024253e-04 -6.130607066030e-05 3.915778985566e-01 5.043386136983e-01 -8.259317336599e-03 -3.519765023263e-04 -7.161472204999e-05 4.911504814137e-01 5.039354559177e-01 8.065287947979e-02 -2.944019158033e-04 -8.114911036268e-05 5.528836575162e-01 5.036442749215e-01 -1.763445234772e-02 -2.857519227662e-04 -8.527957681756e-05 4.558815767183e-01 5.032911770132e-01 1.232581747749e-02 -2.539212727165e-04 -9.833036651441e-05 5.775352924712e-01 5.030743951976e-01 4.086433556034e-02 -2.230704329295e-04 -1.038696492764e-04 5.376102478390e-01 5.028807112693e-01 -3.954353141528e-02 -2.048455557459e-04 -1.109294108045e-04 4.984482296406e-01 5.027688862131e-01 -3.490294009740e-02 -1.952905581539e-04 -1.139058164436e-04 4.678043676442e-01 5.024950383331e-01 4.141164471926e-04 -1.896728354013e-04 -1.322098651715e-04 4.992764625350e-01 5.021727301955e-01 3.110024670897e-02 -2.106456189361e-04 -1.547878945143e-04 5.300048610621e-01 5.017829125617e-01 -4.500071328271e-02 -2.661992078636e-04 -1.809331762857e-04 4.092750359696e-01 5.013869573495e-01 -4.561742764466e-02 -3.683344623129e-04 -2.027453294330e-04 4.387700057728e-01 5.009364237669e-01 4.970292799631e-02 -4.659459433282e-04 -2.217170467366e-04 5.086808919622e-01 5.004786169599e-01 1.535794303108e-02 -5.808841565998e-04 -2.316301875072e-04 4.694858918349e-01 4.998391083820e-01 -3.743597848595e-02 -7.171197955473e-04 -2.446272918009e-04 4.338089349903e-01 4.990971728043e-01 3.820340350601e-02 -8.426562809655e-04 -2.521359910401e-04 5.458926988470e-01 4.981050610706e-01 1.435174218779e-01 -9.621729259892e-04 -2.650865882816e-04 7.208437787461e-01 4.971299004103e-01 -5.782558382578e-02 -1.103768863554e-03 -2.599242174542e-04 4.302415311954e-01 4.959512008218e-01 -9.527986089258e-02 -1.265571293247e-03 -2.541818183473e-04 5.302840569609e-01 4.946400938292e-01 1.632583735248e-01 -1.398231589104e-03 -2.422059753105e-04 7.567582782450e-01 4.932307806350e-01 8.978112421007e-03 -1.513542589402e-03 -2.224367171070e-04 5.482402818029e-01 4.917558613337e-01 -1.298572426704e-01 -1.594952392831e-03 -1.941898157809e-04 4.970437929042e-01 4.901113214537e-01 -6.686602192044e-02 -1.661144038993e-03 -1.687807726314e-04 4.145082379620e-01 4.884104925180e-01 -4.329721711495e-02 -1.691301514985e-03 -1.398695394356e-04 4.104493586743e-01 4.866744468619e-01 -2.808090664285e-04 -1.679013255174e-03 -1.094524984184e-04 4.139466198292e-01 4.850468762209e-01 -1.025283395563e-02 -1.664414580309e-03 -6.927785904642e-05 3.899436907631e-01 4.833838749787e-01 3.202873601018e-02 -1.588562739087e-03 -3.547134004833e-05 4.780040918495e-01 4.818357821857e-01 1.880908661737e-02 -1.487797267216e-03 1.894978253048e-07 4.275618639978e-01 4.802929849351e-01 -1.054927871376e-02 -1.366953349079e-03 2.481406989115e-05 4.569055344220e-01 4.789587372960e-01 8.522607450135e-02 -1.242101280621e-03 5.213083062453e-05 5.980140130005e-01 4.778502363342e-01 -4.290711148239e-02 -1.044615485558e-03 8.013935633642e-05 3.710913114572e-01 4.769253985077e-01 -6.367836689794e-02 -8.306882552365e-04 1.021128411108e-04 4.706572792046e-01 4.762943747525e-01 1.071879212136e-02 -5.994866365982e-04 1.249799920679e-04 3.925288956999e-01 4.758231349528e-01 -2.488263175625e-02 -3.527880910565e-04 1.357478575973e-04 4.208920156921e-01 4.755092072567e-01 1.014814612155e-01 -1.139579617015e-04 1.332263505929e-04 5.954918181309e-01 4.754923971967e-01 7.257652093847e-02 1.177969711131e-04 1.289366542810e-04 5.660450575691e-01 4.757720940080e-01 2.230561906021e-02 3.864317650712e-04 1.227471987439e-04 6.401030562514e-01 4.763212401725e-01 -6.067551223454e-02 6.401756349189e-04 1.128396312418e-04 4.446940331000e-01 4.770697108650e-01 -1.379985825597e-01 8.594494075818e-04 9.497263274382e-05 3.641058911319e-01 4.780939464754e-01 -8.175874537526e-02 1.072099362704e-03 7.753072984892e-05 2.811765423495e-01 4.791800647298e-01 -4.226539607583e-02 1.229400173867e-03 4.535170886370e-05 2.795750989802e-01 4.804709756755e-01 8.317699739164e-02 1.377575563374e-03 1.357231276992e-05 4.475305371327e-01 4.818517049686e-01 1.434852908486e-01 1.456005772682e-03 -2.364552842860e-05 5.665456806775e-01 4.833793369680e-01 1.396487710138e-03 1.527540340741e-03 -5.751318287478e-05 4.503235125530e-01 4.849187117773e-01 6.410875526119e-03 1.565985347804e-03 -9.546486141383e-05 5.793674317297e-01 4.865305093094e-01 1.565031345307e-02 1.574815203352e-03 -1.283094482687e-04 4.816241394591e-01 4.881359541164e-01 9.782725575223e-03 1.545064866668e-03 -1.585512311785e-04 5.989328828802e-01 4.896725308275e-01 -3.080774487281e-02 1.501636099871e-03 -1.877370153520e-04 4.200086497135e-01 4.910654619430e-01 -3.548386752687e-02 1.440569002882e-03 -2.189585098563e-04 5.279651478264e-01 4.924487116478e-01 7.450705194836e-02 1.313237947984e-03 -2.378212801712e-04 5.690227536102e-01 4.937033701364e-01 6.385482047853e-02 1.191433925926e-03 -2.518790079902e-04 6.556747887835e-01 4.947418363695e-01 -4.502540925036e-02 1.077311084044e-03 -2.674144244882e-04 4.789719351095e-01 4.957611374771e-01 -7.448201879104e-02 9.400577968429e-04 -2.672992892072e-04 5.067107512014e-01 4.966358986477e-01 2.411572378584e-02 7.931675165275e-04 -2.618573424693e-04 5.272033826812e-01 4.973336262752e-01 1.633981026425e-03 6.274981881409e-04 -2.543163263907e-04 5.099787132543e-01 4.979583544547e-01 -9.663162987187e-03 4.963106263370e-04 -2.374163147166e-04 5.078770567068e-01 4.984482533786e-01 -4.935660138421e-03 3.805139403347e-04 -2.184865348960e-04 5.001073929774e-01 4.988521068255e-01 -9.580420214561e-02 2.859512099701e-04 -1.957895873315e-04 3.162686524156e-01 4.990873221654e-01 -8.319430196716e-02 2.067428501044e-04 -1.786886522125e-04 3.337187890431e-01 4.993638170103e-01 1.483519229221e-01 1.682868400657e-04 -1.523629874622e-04 6.129724982597e-01 4.995266637071e-01 1.062193367282e-01 1.359197212674e-04 -1.323467375097e-04 5.461574624995e-01 4.995725772568e-01 2.263717307951e-03 1.229901221598e-04 -1.211380013601e-04 6.174999328756e-01 4.997172296936e-01 -1.988877823032e-02 1.070836992570e-04 -1.026198657194e-04 5.063799060389e-01 4.997405050480e-01 -1.384297245466e-01 9.374936085866e-05 -9.663469739300e-05 3.406404837825e-01 4.997626881208e-01 -5.032881234843e-02 7.159567688815e-05 -9.418161397440e-05 4.057222813420e-01 4.999546932107e-01 1.540116357363e-01 1.121908894473e-04 -8.228846312769e-05 6.486637552550e-01 5.000464111831e-01 1.119541157546e-01 1.545107750352e-04 -8.463594752266e-05 6.296305128512e-01 5.002359521033e-01 -7.882819105646e-02 2.044482542287e-04 -8.495266233291e-05 4.910073731421e-01 5.003710657564e-01 -6.008370204867e-03 2.367090254436e-04 -9.568316286722e-05 6.176137724414e-01 5.005895050672e-01 -8.431377633407e-02 2.348568547346e-04 -1.043317645777e-04 3.223798204739e-01 5.008759001645e-01 -6.381155819097e-02 2.285897713380e-04 -1.110352141507e-04 4.899906560595e-01 5.011631150466e-01 -8.012841501296e-03 2.005981205190e-04 -1.201249199392e-04 3.063541374714e-01 5.014414858792e-01 1.779643864186e-02 1.686347498980e-04 -1.308556199591e-04 5.255835333432e-01 5.016821051449e-01 8.729804218539e-02 1.582486311914e-04 -1.442438137079e-04 4.809502218421e-01 5.017455495675e-01 2.274706752116e-02 1.104858650189e-04 -1.699310213209e-04 5.710776683855e-01 5.017810059038e-01 3.290751202917e-02 2.363428322454e-05 -1.926302143048e-04 5.467652459005e-01 5.018183988469e-01 1.588808141082e-03 -3.018832715785e-05 -2.076502075061e-04 5.742552846677e-01 5.017359615642e-01 -1.909498443553e-02 -1.342687744006e-04 -2.229699800252e-04 5.085752770294e-01 5.015092623515e-01 -6.573451899650e-02 -2.387536950684e-04 -2.382669988529e-04 4.427862466747e-01 5.011762570367e-01 1.236643274878e-02 -3.905285538865e-04 -2.482621835721e-04 5.333081425270e-01 5.007301689223e-01 2.926787939281e-02 -5.163265930385e-04 -2.520327395277e-04 5.013220054603e-01 5.001255364784e-01 2.142907189589e-02 -6.444515818089e-04 -2.527972038384e-04 5.761662863188e-01 4.993157770432e-01 9.164526253494e-03 -7.763886728023e-04 -2.540769611571e-04 5.196510579673e-01 4.985177754889e-01 -9.656478563259e-02 -8.991310850387e-04 -2.381118336072e-04 3.830367150536e-01 4.975354457345e-01 2.979921389653e-02 -1.018761984559e-03 -2.223697829012e-04 5.792494857604e-01 4.964452019863e-01 8.518086699848e-02 -1.115508820295e-03 -2.023165154412e-04 5.533984490505e-01 4.952579424016e-01 6.271910318497e-04 -1.197048236540e-03 -1.795122164146e-04 5.805038678241e-01 4.940799957551e-01 -5.044957516810e-02 -1.231333840653e-03 -1.482668715120e-04 4.524992987143e-01 4.927553304978e-01 4.332941067771e-02 -1.273195878786e-03 -1.249060215592e-04 6.671626891795e-01 4.915168701122e-01 1.851264306214e-02 -1.293989800862e-03 -9.318296094764e-05 4.895245848386e-01 4.903219277566e-01 -1.431159727684e-01 -1.266252121345e-03 -6.045277697736e-05 3.809307436427e-01 4.889764027662e-01 -1.827436691218e-02 -1.209599864660e-03 -4.659463072649e-05 4.529758510143e-01 4.877961362282e-01 -5.584113553130e-02 -1.123579683225e-03 -2.829801093227e-05 2.692484725801e-01 4.867024845871e-01 -1.094350770901e-01 -1.009301164738e-03 -1.472505536182e-05 2.341056968341e-01 4.858128312698e-01 2.086674402181e-01 -8.804514063529e-04 1.925921319064e-06 6.865833530163e-01 4.849895346045e-01 1.257322131736e-01 -7.910678155805e-04 9.385747024283e-06 4.855701231813e-01 4.842843178825e-01 -4.708360049439e-02 -6.769308369332e-04 1.175019832914e-05 5.924161520275e-01 4.836032745402e-01 -3.620645387990e-02 -5.416906563363e-04 1.083002896530e-06 4.131572154215e-01 4.830370613056e-01 -9.759740221334e-02 -4.269757311013e-04 -1.403196553234e-05 3.972213476009e-01 4.826888316073e-01 4.657624752670e-02 -3.233126905477e-04 -2.317867087382e-05 5.063097104749e-01 4.823743949830e-01 3.640252368075e-02 -2.240931838598e-04 -3.979669953217e-05 4.700263949624e-01 4.822175218501e-01 8.646310700680e-03 -1.807607320060e-04 -5.098616974998e-05 5.236023318763e-01 4.821094767337e-01 8.869320949721e-02 -1.127539825580e-04 -6.348939222716e-05 6.474128139568e-01 4.821256806603e-01 -7.453224077923e-02 -7.454042141927e-05 -6.904792061769e-05 3.745378503178e-01 4.820149379410e-01 -1.425577491402e-01 -4.620021274497e-05 -8.650713591108e-05 3.622973156764e-01 4.820261828426e-01 1.542072908259e-01 -1.257615188892e-05 -9.355393273849e-05 6.829524319697e-01 4.820033461929e-01 5.771005154990e-02 1.445340882876e-05 -1.021016576100e-04 4.777174187762e-01 4.819233623083e-01 -9.649171895198e-02 5.938825117259e-06 -1.129791201637e-04 4.899689940658e-01 4.818583600255e-01 -5.407996428894e-02 1.686625581986e-06 -1.195474722223e-04 3.695574901983e-01 4.818952447264e-01 2.822799664986e-02 1.169689965562e-05 -1.148662280680e-04 5.464249873655e-01 4.819062048518e-01 6.779350735027e-02 3.153544586280e-06 -1.101389396664e-04 5.051445048988e-01 4.818746576975e-01 -7.604334893410e-02 6.997679213279e-06 -1.075502422093e-04 3.943382894973e-01 4.818656311932e-01 4.090310905261e-02 1.263468441476e-05 -1.028100723675e-04 5.869507230041e-01 4.818930905222e-01 2.718617788150e-02 4.647264592633e-05 -9.613363612649e-05 4.487106452603e-01 4.818702850301e-01 -5.803999345862e-02 4.975763687435e-05 -9.580551376655e-05 4.708707360868e-01 4.819821180780e-01 -7.575075257313e-03 6.438609683178e-05 -8.714984053759e-05 4.335604947456e-01 4.819717814039e-01 6.955025115886e-02 8.348428575309e-05 -9.248919717028e-05 6.099712384045e-01 4.820018899949e-01 -5.929763379802e-02 9.806532509896e-05 -9.861538227701e-05 3.149652271496e-01 4.821616611749e-01 -8.407306974625e-02 1.460071611181e-04 -9.839078882329e-05 4.418250989120e-01 4.822925611568e-01 1.248842767463e-01 1.452398082115e-04 -1.046522129164e-04 5.647337806423e-01 4.823800486620e-01 -5.428777175810e-02 1.677304379883e-04 -1.177471807909e-04 3.332495553958e-01 4.824884588833e-01 -2.525388009111e-02 1.426770183550e-04 -1.310553216170e-04 5.142260204601e-01 4.826342242714e-01 1.078579513570e-01 1.020891530199e-04 -1.412920923230e-04 5.489654581098e-01 4.827698634096e-01 7.046143957785e-02 7.530580747932e-05 -1.509331660037e-04 6.551488996158e-01 4.828982315699e-01 -8.696998607218e-02 9.568250480287e-06 -1.579206428042e-04 3.750254859654e-01 4.829153647288e-01 -8.663586583637e-02 -8.307019749973e-05 -1.686644230529e-04 4.818771679430e-01 4.827121424725e-01 4.139608736885e-02 -1.331399355524e-04 -1.907377729190e-04 4.578176607031e-01 4.825064168738e-01 -3.536716217223e-02 -2.263066035226e-04 -2.042808618899e-04 4.111428435986e-01 4.822766343092e-01 5.095604593202e-02 -2.878619232637e-04 -2.095926060154e-04 5.597297525672e-01 4.820871718466e-01 4.789129643097e-02 -3.566894056555e-04 -2.006548102345e-04 5.069254364605e-01 4.816541460647e-01 -6.004627742057e-02 -4.709485081388e-04 -2.002608621860e-04 4.396371977260e-01 4.811466611085e-01 4.102802461146e-02 -5.499050042769e-04 -1.942017801088e-04 5.889814856834e-01 4.806303154006e-01 7.708830881385e-02 -6.077823503483e-04 -1.780201997671e-04 5.938138153537e-01 4.799459287167e-01 -9.979933659433e-02 -6.718392520120e-04 -1.661336381074e-04 3.893828124948e-01 4.792419962756e-01 -3.813928004785e-03 -6.861046480038e-04 -1.479989624151e-04 5.861859593442e-01 4.785946185683e-01 5.867130626435e-02 -7.159236549561e-04 -1.194866943895e-04 5.067254250235e-01 4.779478733037e-01 -1.393943486338e-01 -7.139143578618e-04 -8.778104721240e-05 3.073972620765e-01 4.770931252800e-01 -5.737403535671e-02 -6.832627373795e-04 -7.347365529711e-05 3.919773543101e-01 4.764644183237e-01 1.407747629987e-01 -6.226488440347e-04 -4.356165462519e-05 5.889467880739e-01 4.758612816396e-01 3.056787684621e-02 -5.447589876689e-04 -1.801247634131e-05 4.531131080025e-01 4.754439105305e-01 -7.565550554900e-02 -4.377228913232e-04 1.327065455230e-05 4.376357769759e-01 4.751385466803e-01 -1.337579249415e-04 -2.685207424401e-04 4.050484641027e-05 4.528455921526e-01 4.749702344167e-01 6.724568553288e-02 -9.471713613701e-05 6.260388820104e-05 5.721271480417e-01 4.749289816357e-01 -5.974718298256e-02 6.013180964506e-05 7.671486499561e-05 3.333512261875e-01 4.750388284189e-01 -2.164247686903e-02 2.613261259763e-04 8.289812113918e-05 5.288421943036e-01 4.753923163325e-01 1.163515700237e-02 4.506128215959e-04 8.739568945541e-05 3.566215401922e-01 4.759424544539e-01 -6.810542654902e-02 6.473937390461e-04 8.572048694734e-05 3.926313412056e-01 4.766663769507e-01 1.615478965771e-01 8.255348998522e-04 7.606271715736e-05 6.797173333464e-01 4.775558966496e-01 9.901779724768e-03 1.023708363498e-03 5.837665500504e-05 4.124349006551e-01 4.787086914754e-01 -9.837219674682e-02 1.165266238100e-03 4.244165609971e-05 4.829729398527e-01 4.799326704782e-01 -2.439833694886e-02 1.294470837172e-03 1.474061321216e-05 3.636382267574e-01 4.813212796685e-01 -2.141989425362e-02 1.432866980658e-03 -1.448303997538e-05 4.401331513455e-01 4.829100929147e-01 1.052911750200e-01 1.517805706621e-03 -3.898265364344e-05 5.742205767973e-01 4.844523928718e-01 2.670118937917e-02 1.577584374966e-03 -7.542889500115e-05 4.935355301039e-01 4.860136201872e-01 -1.004336378636e-01 1.600732785044e-03 -1.142923419257e-04 3.733533010700e-01 4.876165122651e-01 -3.087464853091e-02 1.617839506138e-03 -1.496408734641e-04 4.317862330420e-01 4.892160108138e-01 2.045830572360e-02 1.544486860189e-03 -1.807574592141e-04 4.142699125172e-01 4.906981535975e-01 1.156058038354e-01 1.453466395593e-03 -2.127611728361e-04 6.629978407129e-01 4.921062431134e-01 1.749330461561e-01 1.337060426068e-03 -2.385648985341e-04 7.641360048294e-01 4.933709590660e-01 -1.580824310081e-01 1.183388073573e-03 -2.607047577341e-04 3.468329786968e-01 4.944957794469e-01 -1.243841886523e-01 1.046746352142e-03 -2.765925411326e-04 5.153676275248e-01 4.954763587470e-01 1.454889071353e-01 8.870693640912e-04 -2.850691627518e-04 6.378107929675e-01 4.962994443855e-01 -5.315125872929e-02 7.104978589463e-04 -2.861028813833e-04 4.090651100662e-01 4.969953562318e-01 -2.600927143368e-02 5.804359377419e-04 -2.774669417243e-04 5.857922501001e-01 4.974285664047e-01 5.633599659817e-02 4.227501475869e-04 -2.713877095286e-04 5.217371032626e-01 4.977973141472e-01 -1.869647588110e-02 2.598682266530e-04 -2.523653845881e-04 5.483992983379e-01 4.979751886880e-01 -1.230113459881e-01 1.456829033993e-04 -2.333369936758e-04 2.757144112864e-01 4.980028831386e-01 -2.016930196847e-04 2.295892319628e-05 -2.136988942279e-04 5.479959122985e-01 4.980324207339e-01 8.439290434961e-02 -8.497811306652e-05 -1.835378198114e-04 4.445002199856e-01 4.979705956483e-01 1.127018245133e-02 -1.456816007950e-04 -1.541907239285e-04 5.705362772012e-01 4.977595010256e-01 1.166983007574e-01 -1.689420330784e-04 -1.342677356359e-04 6.778968215004e-01 4.975976051616e-01 -1.279013860204e-02 -1.811832193313e-04 -1.104323219905e-04 5.449559999971e-01 4.974218167656e-01 -1.717155449833e-01 -1.780794756881e-04 -9.071387161888e-05 3.344657315337e-01 4.972994389186e-01 -4.518182146101e-02 -1.420058723231e-04 -7.212279982849e-05 4.545923570751e-01 4.971958213588e-01 5.435487937811e-02 -7.328993400980e-05 -5.988687437203e-05 4.431754902900e-01 4.972400749086e-01 9.447141820423e-03 -1.959489784598e-05 -4.460500223545e-05 4.734866407159e-01 4.973111201215e-01 -2.234461370660e-02 7.581468993129e-05 -3.735738049511e-05 3.984862628768e-01 4.974818435823e-01 2.018257762078e-02 1.430167155831e-04 -3.238850557406e-05 5.138517959575e-01 4.977083483368e-01 3.310748162463e-02 2.162252059991e-04 -3.284290074324e-05 4.647012261260e-01 4.978796397198e-01 -4.678649921415e-02 3.063020952805e-04 -4.741877623611e-05 4.202787975292e-01 4.983056456941e-01 7.958522554889e-02 3.793345359058e-04 -4.908701038897e-05 6.238716772238e-01 4.987056545313e-01 1.029049676436e-01 4.348471257114e-04 -5.963538243506e-05 6.260887328164e-01 4.992601125642e-01 -6.590473441715e-02 4.868046338471e-04 -6.244251158350e-05 4.920622083895e-01 4.997640303640e-01 -7.952000215669e-02 5.210214227961e-04 -7.307375497892e-05 4.670487285030e-01 5.003199928016e-01 6.926885252066e-02 5.784502108426e-04 -8.177352359323e-05 6.305999134308e-01 5.009436112378e-01 -2.532912152022e-02 6.167305422917e-04 -8.624427446212e-05 4.163904854626e-01 5.015879268549e-01 -9.998674131757e-02 6.230491616381e-04 -8.920784138849e-05 4.306264307957e-01 5.022558347524e-01 3.473945531693e-02 6.441008680529e-04 -8.990652149154e-05 4.858693960964e-01 5.029356848279e-01 -6.265390876748e-03 6.591961866167e-04 -8.938976540822e-05 4.180956490422e-01 5.035468746759e-01 4.800500872247e-02 6.998756142698e-04 -9.485119972434e-05 5.818794135414e-01 5.041191928461e-01 6.145018994230e-02 7.333235909213e-04 -1.044368566696e-04 5.409960289268e-01 5.049353859220e-01 -3.930211848836e-02 7.389890915602e-04 -9.487704943475e-05 5.032751765646e-01 5.056297997978e-01 9.122180662469e-02 7.477402929892e-04 -9.733528318781e-05 7.234396421762e-01 5.063856915189e-01 -4.391622457335e-02 7.938079411455e-04 -9.776893565723e-05 4.154427274180e-01 5.071710111914e-01 -1.288906606563e-01 7.887148315614e-04 -9.941516615223e-05 4.656583208636e-01 5.079942766570e-01 5.473820147534e-02 8.286048535651e-04 -1.019952976674e-04 5.249191303686e-01 5.087961379158e-01 -5.171886572247e-02 8.344593333115e-04 -1.107336521908e-04 3.622205894187e-01 5.096271577931e-01 -2.589935547907e-02 8.435991756229e-04 -1.208525304436e-04 4.731204194105e-01 5.104556052554e-01 8.839737517315e-02 7.849163173285e-04 -1.336591108419e-04 5.390153397650e-01 5.112519114306e-01 -1.057158217046e-02 7.749786643345e-04 -1.502520618035e-04 4.519772550696e-01 5.120785652679e-01 -2.303861484257e-02 7.417047613407e-04 -1.640537347498e-04 4.929381100798e-01 5.127763149543e-01 3.949430031339e-05 6.927343558312e-04 -1.860139399944e-04 4.520562436702e-01 5.133829878097e-01 3.148073123620e-02 6.339379318852e-04 -2.104614131909e-04 5.558995725522e-01 5.139500443654e-01 6.667166829578e-02 5.343831198976e-04 -2.301820710664e-04 5.853995802618e-01 5.144871589727e-01 9.570320707945e-03 3.976785131788e-04 -2.412617931142e-04 5.750402139681e-01 5.147648550337e-01 2.892995598797e-02 2.394813881207e-04 -2.601119182208e-04 6.432594922377e-01 5.149262348658e-01 -2.810995522959e-02 7.652618508358e-05 -2.725657332558e-04 5.188203035089e-01 5.149533005223e-01 -6.376137518407e-02 -8.071155105095e-05 -2.785504825344e-04 5.157367418695e-01 5.148844295312e-01 -3.936884123191e-02 -2.372398970715e-04 -2.739301109175e-04 4.400826210451e-01 5.145783544600e-01 5.747032386998e-02 -3.883108965387e-04 -2.702124791069e-04 6.306773896095e-01 5.140645898834e-01 1.098321257208e-02 -5.602594274143e-04 -2.650386405833e-04 4.620490461893e-01 5.134396804733e-01 -1.079931399245e-02 -7.165832651703e-04 -2.511447424357e-04 6.090787616246e-01 5.126528662322e-01 -1.211692564298e-02 -8.203359963630e-04 -2.348903131442e-04 4.378151949033e-01 5.117856186549e-01 -1.020102927086e-02 -9.003899351410e-04 -2.122290742782e-04 5.886767030829e-01 5.108298179596e-01 6.156994710610e-02 -9.884047447710e-04 -1.864665475984e-04 5.609550891155e-01 5.099029527037e-01 -7.589183700152e-02 -1.023778454697e-03 -1.510864732458e-04 4.368930290798e-01 5.088378946926e-01 -1.954857160337e-02 -1.026403713742e-03 -1.239417608834e-04 5.218579459088e-01 5.078693039045e-01 2.580144755866e-02 -1.018667045108e-03 -8.896627925366e-05 4.884959241972e-01 5.068902618907e-01 -1.983110983890e-02 -9.844841763348e-04 -5.847123841946e-05 4.821957262310e-01 5.059323342948e-01 -5.280853174917e-02 -9.185059448205e-04 -3.319163259681e-05 3.828788606988e-01 5.050962351952e-01 3.853190654556e-02 -8.293142754582e-04 -7.705236196456e-06 5.592595393221e-01 5.043509999661e-01 1.657134641743e-03 -6.870349694316e-04 1.258418014589e-05 3.861931299823e-01 5.037160516589e-01 1.967453358197e-02 -5.463680137562e-04 2.714439689167e-05 5.986086064860e-01 5.032737989233e-01 3.449612897018e-03 -3.870139978812e-04 4.146536730653e-05 3.930923557763e-01 5.029537808215e-01 1.250126832502e-02 -1.842899264282e-04 4.822737660229e-05 6.236111431361e-01 5.027911635944e-01 2.437955308998e-02 -5.162751107579e-05 5.019494284959e-05 4.418514619563e-01 5.028611198097e-01 -4.923804988841e-02 1.199157050250e-04 5.386346124623e-05 5.251350433593e-01 5.030476604622e-01 -6.582664488559e-02 2.883150647834e-04 4.940300204557e-05 3.101981721851e-01 5.034980027983e-01 3.110722511720e-02 4.474746786010e-04 4.966570278254e-05 5.873494935937e-01 5.041085750775e-01 1.553978231356e-01 6.277827177619e-04 4.647904583414e-05 6.209938184563e-01 5.048007932302e-01 -3.639561421094e-02 7.882780300714e-04 3.401186274569e-05 5.145582651718e-01 5.056552077570e-01 -4.868079770559e-02 9.203954451012e-04 2.038936012109e-05 5.236322230451e-01 5.066452179425e-01 -9.436560868010e-03 1.048896393537e-03 4.767551901735e-06 4.956851434358e-01 5.077925675629e-01 -2.397155694675e-03 1.163736339579e-03 -9.718814437748e-06 5.188379116557e-01 5.089208290385e-01 -7.633207688219e-02 1.246117592108e-03 -3.605275568365e-05 3.430209896714e-01 5.101756047512e-01 -3.476031673628e-02 1.324175294173e-03 -6.022612261970e-05 4.493172781832e-01 5.115346056620e-01 1.028894415144e-01 1.387020273684e-03 -8.227740616211e-05 5.487998727001e-01 5.128970962538e-01 9.348403866086e-02 1.426833889424e-03 -1.085130954060e-04 6.362853555049e-01 5.142682499022e-01 -8.262938903161e-03 1.410174140502e-03 -1.358429248918e-04 5.322739948938e-01 5.156680688697e-01 -1.370993287104e-01 1.382569512535e-03 -1.599219302493e-04 3.620866980841e-01 5.170807081682e-01 -3.672092428325e-02 1.331466590546e-03 -1.796666503347e-04 4.588321463273e-01 5.183035254376e-01 1.085566599856e-01 1.260277008513e-03 -2.094354884705e-04 5.792000180553e-01 5.195731321666e-01 7.706541208000e-02 1.166080831860e-03 -2.268946605458e-04 6.129629704873e-01 5.206182953075e-01 -5.572946656931e-02 1.048290480016e-03 -2.521424109708e-04 4.677410849167e-01 5.216184029130e-01 3.501938785369e-02 8.977706653425e-04 -2.677036429491e-04 6.830017461947e-01 5.223761846321e-01 3.188878695870e-02 7.376716377370e-04 -2.878664731175e-04 5.315186588341e-01 5.230044172785e-01 -5.859288428056e-02 5.655220983275e-04 -3.014827412268e-04 5.658159776336e-01 5.234884016135e-01 -1.749701291806e-02 3.671335008460e-04 -3.082097189928e-04 4.965246329980e-01 5.237293016353e-01 -4.565592438340e-02 1.680244775122e-04 -3.152224671702e-04 4.745041288668e-01 5.238083016593e-01 1.325948544355e-02 -3.089396271594e-05 -3.152937504394e-04 5.230436038851e-01 5.236366365569e-01 7.291186069121e-02 -2.448830280603e-04 -3.156099626405e-04 6.203278502492e-01 5.232570143986e-01 -1.340472761541e-02 -4.759186376873e-04 -3.125459241181e-04 4.962341486542e-01 5.227300434373e-01 -2.484724082159e-02 -6.434445739970e-04 -3.020768612919e-04 5.706333686060e-01 5.220535891545e-01 6.918716669473e-02 -8.291624829769e-04 -2.857607942556e-04 6.346084820437e-01 5.210968565615e-01 -1.360598316828e-01 -9.859035834469e-04 -2.758261108981e-04 2.985137052404e-01 5.200999909510e-01 -3.701814711504e-02 -1.139028552304e-03 -2.539417753635e-04 5.605721878136e-01 5.188852798767e-01 8.962125671351e-02 -1.246192177444e-03 -2.370052354558e-04 4.777562186674e-01 5.175563155228e-01 9.185212818326e-03 -1.376129589147e-03 -2.182726954283e-04 5.789426134503e-01 5.161428373919e-01 9.317772882562e-02 -1.460019415586e-03 -1.972009882077e-04 6.641116763187e-01 5.146510101408e-01 -4.210581655138e-02 -1.566844787203e-03 -1.752358056906e-04 4.947309803475e-01 5.130164671940e-01 -1.074569629605e-01 -1.611404793681e-03 -1.597990474685e-04 4.491977503977e-01 5.113423281705e-01 4.441176746246e-03 -1.634591308561e-03 -1.446271676323e-04 5.036133338400e-01 5.096528578159e-01 5.375886363718e-02 -1.663768731299e-03 -1.292519196767e-04 5.567154776721e-01 5.080307813102e-01 -7.747613103253e-02 -1.649845557537e-03 -1.084822783201e-04 3.486610717749e-01 5.063802670037e-01 -2.821118121530e-02 -1.636627073786e-03 -9.202515265122e-05 5.002931152415e-01 5.047022526024e-01 1.152460974671e-01 -1.617675504770e-03 -8.100131678396e-05 5.791532667092e-01 5.031218773105e-01 1.022196623499e-02 -1.601852524905e-03 -6.597594204300e-05 5.207370477115e-01 5.015876568475e-01 -9.537638895243e-02 -1.544375364144e-03 -5.250350224527e-05 3.884004888043e-01 4.999643363167e-01 -6.082946629564e-04 -1.500176770234e-03 -5.285372055626e-05 5.195204583855e-01 4.984089107889e-01 9.676213969409e-02 -1.433025737899e-03 -5.445066681058e-05 5.819247681925e-01 4.970426247263e-01 -4.367312518408e-02 -1.352209799782e-03 -4.781938681134e-05 4.321742080174e-01 4.958142244542e-01 1.229314489529e-02 -1.283090770206e-03 -3.754058440266e-05 6.065110579831e-01 4.945776248378e-01 4.191359737483e-03 -1.209996825688e-03 -3.594036342890e-05 4.405569274923e-01 4.933587711296e-01 -5.047476266394e-02 -1.128972215769e-03 -4.094639980879e-05 5.055615326552e-01 4.922136820015e-01 -6.906900513135e-03 -1.048223535158e-03 -4.768303969625e-05 4.267431264661e-01 4.911328468511e-01 -4.494584059489e-03 -1.007570886032e-03 -5.608128313858e-05 4.965723645362e-01 4.900895768339e-01 2.753786057036e-02 -9.332920198079e-04 -6.765705327917e-05 4.818188476068e-01 4.892042913258e-01 -2.318045505477e-02 -8.740045408734e-04 -7.176310361306e-05 4.502114544267e-01 4.883358287528e-01 1.704162578612e-02 -8.241078498690e-04 -7.910976553370e-05 5.159020991790e-01 4.875511397430e-01 -2.842336665854e-02 -7.840435290592e-04 -8.304514052855e-05 3.933647211096e-01 4.867827765614e-01 -9.143166709608e-02 -7.586094378171e-04 -8.806549533375e-05 3.330387649869e-01 4.860549588854e-01 1.270749580452e-01 -7.230130213026e-04 -9.124537459149e-05 6.475146371999e-01 4.852976401400e-01 1.070041403717e-01 -6.893555192242e-04 -9.772440569559e-05 5.470470457302e-01 4.845916991197e-01 -8.801061459083e-02 -6.795816984065e-04 -9.984491036580e-05 4.714934080183e-01 4.839457567335e-01 1.161629307648e-02 -6.410219269491e-04 -9.652750310654e-05 5.702796318832e-01 4.832543016530e-01 4.887478348733e-02 -6.104933599130e-04 -9.667032425702e-05 5.692429749929e-01 4.826254062614e-01 -8.555516046937e-02 -6.363187575817e-04 -9.078660505650e-05 3.991693109444e-01 4.819490479483e-01 -1.370645714953e-02 -6.117515510189e-04 -8.843299362826e-05 5.418300606939e-01 4.813664599269e-01 -1.369181909692e-02 -5.802840096254e-04 -7.906710412584e-05 3.717856727506e-01 4.807569416321e-01 -3.522708307967e-02 -5.376356253507e-04 -7.386125738273e-05 4.713758945345e-01 4.802274334745e-01 5.906858304877e-02 -4.620052418794e-04 -6.542605775818e-05 4.899228388481e-01 4.797821346177e-01 -2.966483768223e-02 -4.097007857011e-04 -5.474950529436e-05 4.120462191701e-01 4.794327073043e-01 6.476387153753e-02 -3.448282379823e-04 -4.208707744821e-05 6.194505819232e-01 4.791557636805e-01 3.405863211635e-02 -2.567444240866e-04 -3.105232612740e-05 4.801634834028e-01 4.789931675840e-01 -1.159313016917e-01 -1.413909412281e-04 -1.983475762354e-05 3.875879785399e-01 4.789955402694e-01 -2.831028111363e-02 -4.345698958809e-05 -5.340302879291e-06 4.235429211755e-01 4.790055346305e-01 8.344444629555e-02 6.883203862118e-05 -1.473228359674e-06 5.544768711310e-01 4.791365320546e-01 -7.017830068952e-02 2.017104288042e-04 4.379995964767e-07 2.831863197965e-01 4.794145209667e-01 -7.598222112953e-02 3.282166362815e-04 2.299191406267e-06 4.025124288719e-01 4.798474025965e-01 1.598687451548e-01 4.376788640971e-04 5.111844647620e-06 6.029238101062e-01 4.803339567795e-01 9.818356251327e-02 5.579190757755e-04 8.356719721372e-07 5.988795538985e-01 4.809020533406e-01 -5.880453449175e-02 6.748120502941e-04 -7.673683272414e-06 4.853147411227e-01 4.816490087493e-01 -7.525739030302e-02 7.727992383781e-04 -1.131654972744e-05 4.483647732924e-01 4.823600949665e-01 -1.114124473449e-02 8.618449545774e-04 -2.691011337185e-05 4.630322516537e-01 4.832115784878e-01 -6.079034620211e-02 9.194423654619e-04 -3.844105255172e-05 3.267840808882e-01 4.840934186409e-01 1.300953566098e-02 9.711323273382e-04 -5.382251242345e-05 4.890513229757e-01 4.850756955527e-01 1.260448450622e-01 1.007900943893e-03 -6.615521457220e-05 5.788737710127e-01 4.861047136017e-01 1.207773100246e-02 1.050344128897e-03 -7.906684010837e-05 5.132067849806e-01 4.871914674634e-01 -1.613314001344e-02 1.083139591958e-03 -9.092655372846e-05 5.466074909858e-01 4.882457029644e-01 -1.600838335766e-02 1.079643640428e-03 -1.081675629004e-04 4.811900182653e-01 4.892912740453e-01 4.941947636336e-03 1.071989500494e-03 -1.276751609294e-04 5.564913862584e-01 4.903728593588e-01 1.669932753139e-03 1.035548015092e-03 -1.445405658239e-04 4.845298837715e-01 4.913994921712e-01 -5.857537326285e-02 9.659735216725e-04 -1.647162917299e-04 4.393406397327e-01 4.923131262806e-01 6.228229688398e-02 9.274275608487e-04 -1.916873385853e-04 6.090944775395e-01 4.931977765610e-01 1.129424228958e-02 8.487328148118e-04 -2.166405424577e-04 4.619291243119e-01 4.940872687421e-01 -1.618587309358e-01 7.585317961319e-04 -2.342558075980e-04 2.853770156680e-01 4.948033010708e-01 -1.917083250947e-02 6.485434217658e-04 -2.568900790462e-04 4.235874592930e-01 4.953361281879e-01 1.148621130576e-01 4.980631670562e-04 -2.822697847596e-04 5.151012417832e-01 4.957512130048e-01 1.181673642431e-02 3.028118513180e-04 -3.014029952294e-04 4.472209321416e-01 4.959796449330e-01 3.642145550467e-02 1.233091850510e-04 -3.170748792225e-04 5.879441527925e-01 4.959666610700e-01 1.251376363609e-02 -1.194882036656e-04 -3.308757665877e-04 4.722484594138e-01 4.957154248889e-01 -3.140857420161e-02 -3.509704657138e-04 -3.398370926553e-04 5.251270043893e-01 4.952273471540e-01 4.822010988108e-02 -5.850118292837e-04 -3.422586083941e-04 5.686886791759e-01 4.945863025991e-01 6.494556320554e-02 -8.089109824400e-04 -3.303221568803e-04 6.550181308004e-01 4.936713894667e-01 1.613293698125e-02 -9.923445047501e-04 -3.146936422312e-04 6.009545531384e-01 4.925749673411e-01 -8.047753345168e-02 -1.185074313843e-03 -2.890901347712e-04 4.940630638970e-01 4.913379101974e-01 -1.630703752413e-02 -1.355323916721e-03 -2.524476641095e-04 5.683404780902e-01 4.900125969866e-01 3.065528681827e-02 -1.459734529033e-03 -2.045940345336e-04 5.553736375336e-01 4.885141385321e-01 -2.405140807199e-02 -1.514924339160e-03 -1.580503965823e-04 5.202376619462e-01 4.870371341364e-01 -3.317074659668e-02 -1.559545432469e-03 -1.022243884859e-04 4.890321443402e-01 4.854546506270e-01 -3.351258302977e-02 -1.551049708053e-03 -5.389472158972e-05 4.532124958866e-01 4.839194617056e-01 1.589261568590e-03 -1.450821951717e-03 -7.436568239734e-06 4.922106674774e-01 4.825664818922e-01 -6.464864986406e-02 -1.288243137609e-03 4.130211449562e-05 3.239151961585e-01 4.813622326003e-01 -7.854484565314e-02 -1.112610978720e-03 8.351224609704e-05 3.351209761711e-01 4.803825540973e-01 5.771571819289e-03 -8.971654175746e-04 1.203659701254e-04 3.354583397971e-01 4.796456731016e-01 3.494799293173e-02 -6.432917345606e-04 1.488820676228e-04 4.050169620346e-01 4.792038880995e-01 7.900618409390e-02 -3.843136826066e-04 1.703393136007e-04 4.934707079849e-01 4.789248417852e-01 6.339773331269e-02 -1.085263902491e-04 1.720475518939e-04 5.318124286600e-01 4.790085571593e-01 -5.919905554842e-02 2.079438638162e-04 1.699917010298e-04 3.750725968881e-01 4.793741567059e-01 -4.983211026782e-02 4.958623719699e-04 1.582907743953e-04 4.321482081243e-01 4.799389222567e-01 4.384955898408e-02 7.504748609509e-04 1.326476926319e-04 4.627717148562e-01 4.807458455106e-01 -1.776895006870e-02 9.632525456552e-04 1.002964626199e-04 3.966103079869e-01 4.818260500450e-01 4.596991205050e-02 1.178799505560e-03 6.777055933679e-05 5.547115389572e-01 4.831645037190e-01 6.797850233365e-02 1.364020596655e-03 3.794447596958e-05 5.325673126542e-01 4.846705952648e-01 6.927731428719e-02 1.509378993425e-03 7.838106704748e-06 6.932661675316e-01 4.862098981609e-01 3.279348393312e-02 1.629753814198e-03 -2.934517015925e-05 5.981542805205e-01 4.879577449707e-01 -1.179770219029e-01 1.716778420758e-03 -5.489229977959e-05 4.573121237258e-01 4.897634117211e-01 -8.234409011624e-02 1.739789086556e-03 -7.743869929222e-05 4.334661002880e-01 4.916088186322e-01 6.073771424593e-02 1.777299355138e-03 -9.561912052466e-05 5.787875522177e-01 4.934097010835e-01 -5.192450409843e-02 1.795366680202e-03 -1.146090991943e-04 3.296170920911e-01 4.951555310888e-01 -7.572159256405e-02 1.764181682163e-03 -1.333442214992e-04 4.273443670896e-01 4.968650588228e-01 5.349315538511e-02 1.745006191066e-03 -1.491183919043e-04 4.366034028614e-01 4.985489575875e-01 6.712968709222e-02 1.689288724264e-03 -1.604801669630e-04 5.616037412740e-01 5.001719255199e-01 7.436448520011e-02 1.633810431014e-03 -1.700752827515e-04 5.853323732616e-01 5.017662568763e-01 -4.804980322549e-02 1.587727817364e-03 -1.756244172567e-04 4.655041348231e-01 5.033242937386e-01 -5.131066847580e-02 1.557997401946e-03 -1.785234195914e-04 4.827110363100e-01 5.048573968535e-01 9.229080594936e-02 1.517555750600e-03 -1.784948688625e-04 6.500857467218e-01 5.063470076556e-01 2.635989017352e-02 1.455412838320e-03 -1.774099710946e-04 5.354308166570e-01 5.077143232216e-01 -9.819216488431e-02 1.390643821970e-03 -1.821409660994e-04 4.537014169532e-01 5.090785702267e-01 -9.688393763372e-02 1.337155212193e-03 -1.831576386774e-04 3.416629413896e-01 5.104281663087e-01 3.469554949778e-02 1.287088543820e-03 -1.817437313876e-04 5.230925159487e-01 5.117193996486e-01 1.556988772121e-01 1.229246366112e-03 -1.815291807913e-04 6.530606958138e-01 5.128982223911e-01 -1.928571556483e-02 1.147631084848e-03 -1.865226246647e-04 4.845210848191e-01 5.139570154460e-01 -6.518530027358e-02 1.057065140668e-03 -1.965644567602e-04 5.226900952666e-01 5.150038311603e-01 3.619717899524e-02 9.469753608559e-04 -2.016389710863e-04 5.569154428095e-01 5.158554565850e-01 -9.743388209806e-04 8.081896272213e-04 -2.156474591429e-04 5.207414176247e-01 5.166840485554e-01 -7.661500431708e-02 6.908051028360e-04 -2.230409969010e-04 4.036854341754e-01 5.174065606484e-01 7.352315253931e-02 5.841392549445e-04 -2.298776229833e-04 6.677877227033e-01 5.179586886587e-01 7.147387209858e-02 4.707752128454e-04 -2.403645045292e-04 5.466331783725e-01 5.183183412443e-01 -1.401400886316e-01 3.333026343851e-04 -2.548196614237e-04 3.875075454402e-01 5.185917801404e-01 -1.018868839920e-01 1.683189194940e-04 -2.626943576114e-04 3.428594103886e-01 5.187015011260e-01 9.298736631223e-02 8.860363341912e-06 -2.692351044151e-04 5.734822780646e-01 5.186312914809e-01 1.556588812835e-01 -1.551972034160e-04 -2.749969242127e-04 6.541771729556e-01 5.184100124848e-01 2.080776679033e-02 -3.323218314437e-04 -2.768095019560e-04 6.150978116453e-01 5.179985700053e-01 -6.638034868002e-02 -4.823464078476e-04 -2.777500553343e-04 5.214164755956e-01 5.173626864123e-01 1.861253759401e-02 -6.581167912615e-04 -2.806200130854e-04 6.523228868333e-01 5.165543593734e-01 -1.881150950795e-02 -8.022310536871e-04 -2.812933000856e-04 4.837934565797e-01 5.156091456904e-01 -2.224819303970e-03 -9.619798387019e-04 -2.773726832957e-04 6.478732482254e-01 5.144857172793e-01 3.269193061353e-02 -1.150993317083e-03 -2.725257053434e-04 5.491773178068e-01 5.133048982947e-01 -1.469783916998e-01 -1.301276291940e-03 -2.576282472400e-04 3.539164648257e-01 5.119484383263e-01 -4.155808272027e-02 -1.416862354049e-03 -2.443182364881e-04 4.660611523662e-01 5.105141179403e-01 1.423568568713e-02 -1.558497038387e-03 -2.256817778168e-04 3.823878362000e-01 5.089982158601e-01 -2.221105677268e-02 -1.646918411971e-03 -2.035489567188e-04 4.216390388209e-01 5.073405099434e-01 7.094568852817e-02 -1.729893992406e-03 -1.848237504653e-04 5.242792132563e-01 5.055669964626e-01 9.689302398583e-02 -1.781485914644e-03 -1.689628080194e-04 6.154250867925e-01 5.037145272519e-01 3.220122261394e-02 -1.822388188365e-03 -1.545126759181e-04 5.886816584842e-01 5.019028145871e-01 -5.645315800007e-02 -1.850003553531e-03 -1.329414550556e-04 5.025187707924e-01 5.001012983569e-01 -8.389231473884e-02 -1.844206481789e-03 -1.085878253705e-04 4.208970290065e-01 4.981921885289e-01 2.677313735325e-02 -1.817661180515e-03 -9.320742509971e-05 5.560650454989e-01 4.963330937613e-01 9.906493426622e-02 -1.793365364655e-03 -7.521735214237e-05 6.190268975390e-01 4.945193659657e-01 9.954211373285e-03 -1.763928734587e-03 -5.647846170005e-05 5.759734682455e-01 4.929125831164e-01 -9.608933496405e-02 -1.688364448161e-03 -2.560624823031e-05 4.268482276109e-01 4.912722280907e-01 -1.002111185184e-01 -1.583114746516e-03 -5.168184090829e-06 3.755512312087e-01 4.896820488650e-01 6.836688848916e-03 -1.451143424378e-03 9.522887464534e-06 4.405216053087e-01 4.882986105245e-01 -5.585632091721e-02 -1.318048250269e-03 2.953541611263e-05 2.638385893743e-01 4.870708102143e-01 5.058525557711e-02 -1.154407631661e-03 4.851850629556e-05 5.416921164629e-01 4.860289107208e-01 1.815789054742e-01 -9.619011028865e-04 6.664855681415e-05 6.269964003227e-01 4.851808934953e-01 7.156599013982e-03 -7.615234336351e-04 8.256156608184e-05 5.560053144909e-01 4.845212738040e-01 -1.048696081831e-01 -5.758073490492e-04 9.437843941655e-05 4.172571839565e-01 4.840553365128e-01 -6.159687316647e-02 -3.271450304407e-04 1.008602859311e-04 4.328115681579e-01 4.838319668879e-01 3.449450020719e-02 -9.989783368443e-05 1.048118762360e-04 4.862461843709e-01 4.838522850888e-01 1.823647013341e-02 1.020645570638e-04 1.062753092506e-04 4.692845084248e-01 4.840889442801e-01 -1.547809557092e-02 2.980432089655e-04 1.031743084465e-04 4.552899932291e-01 4.844435129896e-01 3.721228074960e-02 5.113206492165e-04 8.759471301796e-05 5.437090699240e-01 4.849764347765e-01 -4.793959564328e-02 7.150751747344e-04 6.549217015035e-05 3.594108019425e-01 4.857142560009e-01 -2.798501464340e-02 8.909693162395e-04 4.094103741403e-05 4.877390406372e-01 4.866457674790e-01 3.687968253372e-02 1.031012840181e-03 1.551651935680e-05 4.331701670099e-01 4.876611181367e-01 -1.026411816566e-01 1.157056621027e-03 -1.721624679688e-05 2.824566773241e-01 4.888409490464e-01 6.132298546076e-02 1.232150070844e-03 -4.732379421819e-05 5.558161379315e-01 4.900266371829e-01 1.530519655589e-01 1.292451490258e-03 -8.459304284016e-05 5.885606084419e-01 4.912861680821e-01 -4.094634902063e-02 1.305074340489e-03 -1.197498989644e-04 4.739234398902e-01 4.926045454470e-01 3.587500894522e-02 1.262358744074e-03 -1.499928882443e-04 6.603106263323e-01 4.938281583735e-01 2.372963470607e-02 1.200200940628e-03 -1.843953365850e-04 5.213827093023e-01 4.949998845065e-01 -7.103590762764e-02 1.095406660243e-03 -2.157887568107e-04 5.182388110771e-01 4.960383827290e-01 -3.284006264524e-02 9.635825948743e-04 -2.473932357636e-04 4.557025840119e-01 4.968959371884e-01 8.164736762583e-03 8.114707106764e-04 -2.799799334712e-04 5.345682846022e-01 4.975557534089e-01 7.607287745704e-02 6.375764824487e-04 -3.119488625535e-04 6.078483389259e-01 4.980351348267e-01 -4.327723737796e-02 4.310746519393e-04 -3.389574634430e-04 4.480138098463e-01 4.983234342144e-01 -1.046426631079e-01 1.909680220185e-04 -3.591836280627e-04 3.985630127102e-01 4.983889119982e-01 -4.119868560246e-02 -7.561436769295e-05 -3.729723879935e-04 3.656164386414e-01 4.981373050847e-01 1.317702649205e-01 -3.402970748995e-04 -3.865599642805e-04 6.621035425512e-01 4.975944726788e-01 7.491218543652e-02 -6.095674116247e-04 -3.966662341506e-04 5.154408095144e-01 4.967923831057e-01 -9.889696285946e-02 -8.904016328049e-04 -3.997180681217e-04 4.643096168323e-01 4.957576977524e-01 -1.174665290180e-02 -1.186611060539e-03 -3.929267079075e-04 4.919475037108e-01 4.944477808560e-01 4.234347274537e-02 -1.478870623182e-03 -3.799331918944e-04 5.489965623230e-01 4.928315791344e-01 5.582848765563e-02 -1.749285101234e-03 -3.642457964425e-04 6.036044790221e-01 4.910114827838e-01 5.610601004413e-03 -2.019477164603e-03 -3.386695574289e-04 5.602177643318e-01 4.888436048250e-01 -8.677902077242e-02 -2.234097424520e-03 -3.173661919824e-04 4.300464374773e-01 4.864446895970e-01 3.549410074085e-02 -2.416196512038e-03 -2.934632424295e-04 6.312059658135e-01 4.838997037326e-01 4.578635206015e-02 -2.579139771401e-03 -2.627993842353e-04 5.216191415975e-01 4.812531298806e-01 -9.641496569592e-02 -2.723763322244e-03 -2.249108376355e-04 4.383760344217e-01 4.784760592091e-01 -8.324310717584e-02 -2.828131635023e-03 -1.860399488934e-04 gsl/doc/examples/histogram2d.c0000644000175000017500000000200413536674414014700 0ustar eddedd#include #include #include int main (void) { const gsl_rng_type * T; gsl_rng * r; gsl_histogram2d * h = gsl_histogram2d_alloc (10, 10); gsl_histogram2d_set_ranges_uniform (h, 0.0, 1.0, 0.0, 1.0); gsl_histogram2d_accumulate (h, 0.3, 0.3, 1); gsl_histogram2d_accumulate (h, 0.8, 0.1, 5); gsl_histogram2d_accumulate (h, 0.7, 0.9, 0.5); gsl_rng_env_setup (); T = gsl_rng_default; r = gsl_rng_alloc (T); { int i; gsl_histogram2d_pdf * p = gsl_histogram2d_pdf_alloc (h->nx, h->ny); gsl_histogram2d_pdf_init (p, h); for (i = 0; i < 1000; i++) { double x, y; double u = gsl_rng_uniform (r); double v = gsl_rng_uniform (r); gsl_histogram2d_pdf_sample (p, u, v, &x, &y); printf ("%g %g\n", x, y); } gsl_histogram2d_pdf_free (p); } gsl_histogram2d_free (h); gsl_rng_free (r); return 0; } gsl/doc/examples/siman.c0000644000175000017500000000302713536674414013572 0ustar eddedd#include #include #include #include /* set up parameters for this simulated annealing run */ /* how many points do we try before stepping */ #define N_TRIES 200 /* how many iterations for each T? */ #define ITERS_FIXED_T 1000 /* max step size in random walk */ #define STEP_SIZE 1.0 /* Boltzmann constant */ #define K 1.0 /* initial temperature */ #define T_INITIAL 0.008 /* damping factor for temperature */ #define MU_T 1.003 #define T_MIN 2.0e-6 gsl_siman_params_t params = {N_TRIES, ITERS_FIXED_T, STEP_SIZE, K, T_INITIAL, MU_T, T_MIN}; /* now some functions to test in one dimension */ double E1(void *xp) { double x = * ((double *) xp); return exp(-pow((x-1.0),2.0))*sin(8*x); } double M1(void *xp, void *yp) { double x = *((double *) xp); double y = *((double *) yp); return fabs(x - y); } void S1(const gsl_rng * r, void *xp, double step_size) { double old_x = *((double *) xp); double new_x; double u = gsl_rng_uniform(r); new_x = u * 2 * step_size - step_size + old_x; memcpy(xp, &new_x, sizeof(new_x)); } void P1(void *xp) { printf ("%12g", *((double *) xp)); } int main(void) { const gsl_rng_type * T; gsl_rng * r; double x_initial = 15.5; gsl_rng_env_setup(); T = gsl_rng_default; r = gsl_rng_alloc(T); gsl_siman_solve(r, &x_initial, E1, S1, M1, P1, NULL, NULL, NULL, sizeof(double), params); gsl_rng_free (r); return 0; } gsl/doc/examples/dwt.c0000644000175000017500000000232013536674414013254 0ustar eddedd#include #include #include #include int main (int argc, char **argv) { (void)(argc); /* avoid unused parameter warning */ int i, n = 256, nc = 20; double *orig_data = malloc (n * sizeof (double)); double *data = malloc (n * sizeof (double)); double *abscoeff = malloc (n * sizeof (double)); size_t *p = malloc (n * sizeof (size_t)); FILE * f; gsl_wavelet *w; gsl_wavelet_workspace *work; w = gsl_wavelet_alloc (gsl_wavelet_daubechies, 4); work = gsl_wavelet_workspace_alloc (n); f = fopen (argv[1], "r"); for (i = 0; i < n; i++) { fscanf (f, "%lg", &orig_data[i]); data[i] = orig_data[i]; } fclose (f); gsl_wavelet_transform_forward (w, data, 1, n, work); for (i = 0; i < n; i++) { abscoeff[i] = fabs (data[i]); } gsl_sort_index (p, abscoeff, 1, n); for (i = 0; (i + nc) < n; i++) data[p[i]] = 0; gsl_wavelet_transform_inverse (w, data, 1, n, work); for (i = 0; i < n; i++) { printf ("%g %g\n", orig_data[i], data[i]); } gsl_wavelet_free (w); gsl_wavelet_workspace_free (work); free (data); free (orig_data); free (abscoeff); free (p); return 0; } gsl/doc/examples/siman.txt0000644000175000017500000057253213536674414014203 0ustar eddedd#-iter #-evals temperature position energy 0 1001 0.008 1.3507 -0.868361 -0.872837 1 2001 0.00797607 1.37079 -0.871175 -0.87287 2 3001 0.00795222 1.38039 -0.864303 -0.87287 3 4001 0.00792843 1.36375 -0.87286 -0.872871 4 5001 0.00790472 0.61174 -0.845934 -0.872871 5 6001 0.00788107 1.40147 -0.831327 -0.872871 6 7001 0.0078575 1.35283 -0.869778 -0.872871 7 8001 0.007834 1.3638 -0.872858 -0.872871 8 9001 0.00781057 1.36943 -0.871721 -0.872871 9 10001 0.0077872 1.38445 -0.859842 -0.872871 10 11001 0.00776391 1.34438 -0.862599 -0.872871 11 12001 0.00774069 0.601995 -0.848928 -0.872871 12 13001 0.00771754 1.37681 -0.86748 -0.872871 13 14001 0.00769445 1.3528 -0.869761 -0.872871 14 15001 0.00767144 1.34345 -0.861549 -0.872871 15 16001 0.0076485 1.34485 -0.86311 -0.872871 16 17001 0.00762562 1.35505 -0.870971 -0.872871 17 18001 0.00760281 1.3606 -0.872685 -0.872871 18 19001 0.00758007 0.603733 -0.84879 -0.872871 19 20001 0.0075574 1.37855 -0.866026 -0.872871 20 21001 0.00753479 1.36968 -0.871629 -0.872871 21 22001 0.00751226 1.36059 -0.872684 -0.872871 22 23001 0.00748979 1.34605 -0.864345 -0.872871 23 24001 0.00746738 1.36367 -0.872863 -0.872871 24 25001 0.00744505 1.36304 -0.872871 -0.872871 25 26001 0.00742278 0.613129 -0.845066 -0.872871 26 27001 0.00740058 1.36855 -0.872021 -0.872871 27 28001 0.00737844 1.37322 -0.86993 -0.872871 28 29001 0.00735638 1.36499 -0.872771 -0.872871 29 30001 0.00733437 1.35743 -0.871925 -0.872871 30 31001 0.00731243 1.35513 -0.871008 -0.872871 31 32001 0.00729056 1.37978 -0.864895 -0.872871 32 33001 0.00726876 1.35101 -0.868582 -0.872871 33 34001 0.00724702 1.34567 -0.863959 -0.872871 34 35001 0.00722534 1.37749 -0.866933 -0.872871 35 36001 0.00720373 1.36842 -0.872061 -0.872871 36 37001 0.00718218 1.3651 -0.872759 -0.872871 37 38001 0.0071607 1.34729 -0.865547 -0.872871 38 39001 0.00713928 1.36695 -0.872448 -0.872871 39 40001 0.00711793 1.36643 -0.872556 -0.872871 40 41001 0.00709664 1.35418 -0.870539 -0.872871 41 42001 0.00707541 0.594794 -0.847683 -0.872871 42 43001 0.00705425 1.35379 -0.87033 -0.872871 43 44001 0.00703315 1.36793 -0.872204 -0.872871 44 45001 0.00701211 1.36258 -0.872863 -0.872871 45 46001 0.00699114 1.36767 -0.872274 -0.872871 46 47001 0.00697023 1.39137 -0.85014 -0.872871 47 48001 0.00694938 1.38381 -0.860609 -0.872871 48 49001 0.0069286 1.37191 -0.870645 -0.872871 49 50001 0.00690787 1.36438 -0.872826 -0.872871 50 51001 0.00688721 1.36643 -0.872556 -0.872871 51 52001 0.00686661 1.34557 -0.863864 -0.872871 52 53001 0.00684607 1.35271 -0.869704 -0.872871 53 54001 0.0068256 1.35461 -0.870755 -0.872871 54 55001 0.00680518 1.34705 -0.865317 -0.872871 55 56001 0.00678483 1.34555 -0.863844 -0.872871 56 57001 0.00676453 1.3544 -0.870651 -0.872871 57 58001 0.0067443 1.37319 -0.869947 -0.872871 58 59001 0.00672413 1.37289 -0.87012 -0.872871 59 60001 0.00670401 1.36561 -0.872692 -0.872871 60 61001 0.00668396 1.36889 -0.871909 -0.872871 61 62001 0.00666397 1.3717 -0.870748 -0.872871 62 63001 0.00664404 1.38076 -0.86394 -0.872871 63 64001 0.00662417 1.33705 -0.852963 -0.872871 64 65001 0.00660435 1.37052 -0.871291 -0.872871 65 66001 0.0065846 1.38734 -0.856103 -0.872871 66 67001 0.0065649 1.3718 -0.870701 -0.872871 67 68001 0.00654527 1.34896 -0.867008 -0.872871 68 69001 0.00652569 1.35488 -0.870887 -0.872871 69 70001 0.00650617 1.37107 -0.871048 -0.872871 70 71001 0.00648671 1.36726 -0.872376 -0.872871 71 72001 0.00646731 1.36707 -0.872421 -0.872871 72 73001 0.00644797 1.34789 -0.86609 -0.872871 73 74001 0.00642868 1.3705 -0.8713 -0.872871 74 75001 0.00640945 1.37711 -0.867239 -0.872871 75 76001 0.00639028 1.35185 -0.869158 -0.872871 76 77001 0.00637117 0.616273 -0.842692 -0.872871 77 78001 0.00635211 1.35411 -0.870502 -0.872871 78 79001 0.00633311 1.36347 -0.872868 -0.872871 79 80001 0.00631417 1.36476 -0.872794 -0.872871 80 81001 0.00629528 1.3997 -0.835005 -0.872871 81 82001 0.00627645 1.38277 -0.861803 -0.872871 82 83001 0.00625768 1.37485 -0.868909 -0.872871 83 84001 0.00623896 1.35295 -0.869852 -0.872871 84 85001 0.0062203 1.35708 -0.871806 -0.872871 85 86001 0.0062017 1.3662 -0.872597 -0.872871 86 87001 0.00618315 1.37209 -0.870549 -0.872871 87 88001 0.00616466 1.35771 -0.872016 -0.872871 88 89001 0.00614622 1.35419 -0.87054 -0.872871 89 90001 0.00612783 1.35902 -0.872379 -0.872871 90 91001 0.0061095 1.37822 -0.866319 -0.872871 91 92001 0.00609123 1.37957 -0.865102 -0.872871 92 93001 0.00607301 1.35634 -0.87153 -0.872871 93 94001 0.00605485 1.37988 -0.8648 -0.872871 94 95001 0.00603674 1.37147 -0.870862 -0.872871 95 96001 0.00601868 1.34329 -0.861361 -0.872871 96 97001 0.00600068 1.37891 -0.865705 -0.872871 97 98001 0.00598273 1.36987 -0.871556 -0.872871 98 99001 0.00596484 1.38152 -0.863159 -0.872871 99 100001 0.005947 1.37272 -0.870212 -0.872871 100 101001 0.00592921 1.38517 -0.858957 -0.872871 101 102001 0.00591147 1.36958 -0.871666 -0.872871 102 103001 0.00589379 1.35112 -0.868666 -0.872871 103 104001 0.00587616 1.35983 -0.872554 -0.872871 104 105001 0.00585859 1.34827 -0.866422 -0.872871 105 106001 0.00584106 1.36394 -0.872852 -0.872871 106 107001 0.00582359 1.35721 -0.87185 -0.872871 107 108001 0.00580618 1.37301 -0.870054 -0.872871 108 109001 0.00578881 1.35705 -0.871794 -0.872871 109 110001 0.00577149 1.36788 -0.872218 -0.872871 110 111001 0.00575423 1.35034 -0.8681 -0.872871 111 112001 0.00573702 1.38082 -0.86388 -0.872871 112 113001 0.00571986 1.3645 -0.872817 -0.872871 113 114001 0.00570275 1.36162 -0.872805 -0.872871 114 115001 0.0056857 1.37579 -0.868252 -0.872871 115 116001 0.00566869 1.37627 -0.867897 -0.872871 116 117001 0.00565173 1.37343 -0.869809 -0.872871 117 118001 0.00563483 1.36924 -0.871792 -0.872871 118 119001 0.00561798 1.36836 -0.87208 -0.872871 119 120001 0.00560117 1.37157 -0.87081 -0.872871 120 121001 0.00558442 1.35632 -0.871522 -0.872871 121 122001 0.00556772 1.35976 -0.872541 -0.872871 122 123001 0.00555106 1.38023 -0.864462 -0.872871 123 124001 0.00553446 1.38095 -0.863748 -0.872871 124 125001 0.00551791 1.36894 -0.871894 -0.872871 125 126001 0.0055014 1.3784 -0.866157 -0.872871 126 127001 0.00548495 1.37446 -0.869164 -0.872871 127 128001 0.00546854 1.33953 -0.856572 -0.872871 128 129001 0.00545218 1.36883 -0.871932 -0.872871 129 130001 0.00543588 1.35546 -0.871156 -0.872871 130 131001 0.00541962 1.35448 -0.870693 -0.872871 131 132001 0.00540341 1.38166 -0.863013 -0.872871 132 133001 0.00538725 1.36231 -0.872852 -0.872871 133 134001 0.00537113 1.35093 -0.868532 -0.872871 134 135001 0.00535507 1.36347 -0.872868 -0.872871 135 136001 0.00533905 1.36546 -0.872714 -0.872871 136 137001 0.00532308 1.3565 -0.871593 -0.872871 137 138001 0.00530716 1.36342 -0.872869 -0.872871 138 139001 0.00529129 1.37767 -0.866785 -0.872871 139 140001 0.00527546 1.35735 -0.8719 -0.872871 140 141001 0.00525968 1.35466 -0.870779 -0.872871 141 142001 0.00524395 1.36762 -0.872288 -0.872871 142 143001 0.00522826 1.34728 -0.865538 -0.872871 143 144001 0.00521263 1.36686 -0.872469 -0.872871 144 145001 0.00519703 1.3457 -0.863996 -0.872871 145 146001 0.00518149 1.36457 -0.872811 -0.872871 146 147001 0.00516599 1.36191 -0.872828 -0.872871 147 148001 0.00515054 1.35299 -0.869874 -0.872871 148 149001 0.00513514 1.37083 -0.871156 -0.872871 149 150001 0.00511978 1.36041 -0.872656 -0.872871 150 151001 0.00510446 1.36889 -0.87191 -0.872871 151 152001 0.0050892 1.35861 -0.872278 -0.872871 152 153001 0.00507397 1.37867 -0.865921 -0.872871 153 154001 0.0050588 1.35613 -0.871444 -0.872871 154 155001 0.00504367 1.36702 -0.872434 -0.872871 155 156001 0.00502858 1.36367 -0.872863 -0.872871 156 157001 0.00501354 1.33862 -0.855295 -0.872871 157 158001 0.00499854 1.36721 -0.872388 -0.872871 158 159001 0.00498359 1.37434 -0.869244 -0.872871 159 160001 0.00496869 1.3711 -0.871035 -0.872871 160 161001 0.00495383 1.37796 -0.866542 -0.872871 161 162001 0.00493901 1.35155 -0.868962 -0.872871 162 163001 0.00492424 1.36935 -0.871751 -0.872871 163 164001 0.00490951 1.37406 -0.869424 -0.872871 164 165001 0.00489482 1.37 -0.871508 -0.872871 165 166001 0.00488018 1.36735 -0.872355 -0.872871 166 167001 0.00486559 1.37326 -0.869909 -0.872871 167 168001 0.00485103 1.33658 -0.852239 -0.872871 168 169001 0.00483652 1.36361 -0.872864 -0.872871 169 170001 0.00482206 1.37817 -0.866362 -0.872871 170 171001 0.00480763 1.36476 -0.872794 -0.872871 171 172001 0.00479325 1.3458 -0.864091 -0.872871 172 173001 0.00477892 1.36734 -0.872358 -0.872871 173 174001 0.00476462 1.34898 -0.867027 -0.872871 174 175001 0.00475037 1.35619 -0.871468 -0.872871 175 176001 0.00473616 1.38367 -0.860772 -0.872871 176 177001 0.004722 1.36996 -0.871522 -0.872871 177 178001 0.00470787 1.34626 -0.864555 -0.872871 178 179001 0.00469379 1.34821 -0.866372 -0.872871 179 180001 0.00467975 1.38758 -0.855774 -0.872871 180 181001 0.00466576 1.34724 -0.865497 -0.872871 181 182001 0.0046518 1.35349 -0.870165 -0.872871 182 183001 0.00463789 1.36837 -0.872075 -0.872871 183 184001 0.00462402 1.37752 -0.866909 -0.872871 184 185001 0.00461018 1.35046 -0.868189 -0.872871 185 186001 0.0045964 1.36951 -0.871694 -0.872871 186 187001 0.00458265 1.35783 -0.872054 -0.872871 187 188001 0.00456894 1.37784 -0.866644 -0.872871 188 189001 0.00455527 1.34244 -0.860352 -0.872871 189 190001 0.00454165 1.3553 -0.871086 -0.872871 190 191001 0.00452807 1.37205 -0.87057 -0.872871 191 192001 0.00451452 1.35714 -0.871827 -0.872871 192 193001 0.00450102 1.36194 -0.87283 -0.872871 193 194001 0.00448756 1.36681 -0.872478 -0.872871 194 195001 0.00447413 1.35001 -0.867852 -0.872871 195 196001 0.00446075 1.36337 -0.87287 -0.872871 196 197001 0.00444741 1.36626 -0.872587 -0.872871 197 198001 0.00443411 1.36089 -0.872725 -0.872871 198 199001 0.00442084 1.36872 -0.871966 -0.872871 199 200001 0.00440762 1.36137 -0.872781 -0.872871 200 201001 0.00439444 1.37496 -0.868831 -0.872871 201 202001 0.00438129 1.37225 -0.870468 -0.872871 202 203001 0.00436819 1.35427 -0.870583 -0.872871 203 204001 0.00435512 1.36808 -0.87216 -0.872871 204 205001 0.0043421 1.35467 -0.870788 -0.872871 205 206001 0.00432911 1.37245 -0.870362 -0.872871 206 207001 0.00431616 1.37061 -0.871253 -0.872871 207 208001 0.00430325 1.35811 -0.872138 -0.872871 208 209001 0.00429038 1.35285 -0.869791 -0.872871 209 210001 0.00427755 1.35997 -0.872582 -0.872871 210 211001 0.00426475 1.36263 -0.872864 -0.872871 211 212001 0.004252 1.3777 -0.866761 -0.872871 212 213001 0.00423928 1.36066 -0.872695 -0.872871 213 214001 0.0042266 1.36446 -0.87282 -0.872871 214 215001 0.00421396 1.36274 -0.872867 -0.872871 215 216001 0.00420136 1.36139 -0.872783 -0.872871 216 217001 0.00418879 0.600455 -0.848907 -0.872871 217 218001 0.00417626 1.3655 -0.872708 -0.872871 218 219001 0.00416377 1.35761 -0.871983 -0.872871 219 220001 0.00415131 1.35207 -0.869303 -0.872871 220 221001 0.0041389 1.37308 -0.870012 -0.872871 221 222001 0.00412652 0.604398 -0.848692 -0.872871 222 223001 0.00411418 1.35878 -0.872322 -0.872871 223 224001 0.00410187 1.35973 -0.872536 -0.872871 224 225001 0.0040896 1.34116 -0.858756 -0.872871 225 226001 0.00407737 1.36912 -0.871832 -0.872871 226 227001 0.00406517 1.36083 -0.872718 -0.872871 227 228001 0.00405301 1.35755 -0.871965 -0.872871 228 229001 0.00404089 1.36452 -0.872816 -0.872871 229 230001 0.00402881 1.34913 -0.867153 -0.872871 230 231001 0.00401676 1.37163 -0.870783 -0.872871 231 232001 0.00400474 1.36975 -0.871601 -0.872871 232 233001 0.00399276 1.36343 -0.872869 -0.872871 233 234001 0.00398082 1.38015 -0.864542 -0.872871 234 235001 0.00396891 1.36349 -0.872867 -0.872871 235 236001 0.00395704 1.37645 -0.86776 -0.872871 236 237001 0.00394521 1.36781 -0.872236 -0.872871 237 238001 0.00393341 1.36205 -0.872837 -0.872871 238 239001 0.00392164 1.35652 -0.871598 -0.872871 239 240001 0.00390991 1.3626 -0.872863 -0.872871 240 241001 0.00389822 1.36858 -0.872011 -0.872871 241 242001 0.00388656 1.36371 -0.872861 -0.872871 242 243001 0.00387493 1.36043 -0.872659 -0.872871 243 244001 0.00386334 1.35087 -0.868488 -0.872871 244 245001 0.00385179 1.35152 -0.868938 -0.872871 245 246001 0.00384027 1.36402 -0.872848 -0.872871 246 247001 0.00382878 1.366 -0.872632 -0.872871 247 248001 0.00381733 1.36967 -0.871634 -0.872871 248 249001 0.00380591 1.36207 -0.872838 -0.872871 249 250001 0.00379453 1.36612 -0.872611 -0.872871 250 251001 0.00378318 1.36431 -0.872831 -0.872871 251 252001 0.00377186 1.36101 -0.872741 -0.872871 252 253001 0.00376058 1.3605 -0.872671 -0.872871 253 254001 0.00374933 1.36757 -0.872301 -0.872871 254 255001 0.00373812 1.35845 -0.872233 -0.872871 255 256001 0.00372694 1.36429 -0.872832 -0.872871 256 257001 0.00371579 1.34785 -0.866052 -0.872871 257 258001 0.00370468 1.36754 -0.872307 -0.872871 258 259001 0.00369359 1.36264 -0.872864 -0.872871 259 260001 0.00368255 1.37189 -0.870654 -0.872871 260 261001 0.00367153 1.37913 -0.865504 -0.872871 261 262001 0.00366055 1.3585 -0.872247 -0.872871 262 263001 0.0036496 1.35574 -0.871279 -0.872871 263 264001 0.00363869 1.35072 -0.86838 -0.872871 264 265001 0.0036278 1.36427 -0.872833 -0.872871 265 266001 0.00361695 1.3643 -0.872832 -0.872871 266 267001 0.00360613 1.35975 -0.87254 -0.872871 267 268001 0.00359535 1.35908 -0.872395 -0.872871 268 269001 0.00358459 1.36747 -0.872326 -0.872871 269 270001 0.00357387 1.36209 -0.87284 -0.872871 270 271001 0.00356318 1.3685 -0.872035 -0.872871 271 272001 0.00355252 1.36348 -0.872868 -0.872871 272 273001 0.0035419 1.36101 -0.87274 -0.872871 273 274001 0.00353131 1.36915 -0.871821 -0.872871 274 275001 0.00352074 1.36716 -0.8724 -0.872871 275 276001 0.00351021 1.36475 -0.872795 -0.872871 276 277001 0.00349971 1.36847 -0.872046 -0.872871 277 278001 0.00348925 1.3609 -0.872726 -0.872871 278 279001 0.00347881 1.36209 -0.87284 -0.872871 279 280001 0.0034684 1.36487 -0.872784 -0.872871 280 281001 0.00345803 1.36245 -0.872858 -0.872871 281 282001 0.00344769 1.34269 -0.860654 -0.872871 282 283001 0.00343737 1.36668 -0.872507 -0.872871 283 284001 0.00342709 1.35441 -0.870653 -0.872871 284 285001 0.00341684 1.34053 -0.857935 -0.872871 285 286001 0.00340662 1.36165 -0.872808 -0.872871 286 287001 0.00339643 1.37413 -0.86938 -0.872871 287 288001 0.00338627 1.36601 -0.87263 -0.872871 288 289001 0.00337615 1.35865 -0.872288 -0.872871 289 290001 0.00336605 1.36106 -0.872746 -0.872871 290 291001 0.00335598 1.37665 -0.867603 -0.872871 291 292001 0.00334594 1.35901 -0.872377 -0.872871 292 293001 0.00333593 1.35115 -0.868684 -0.872871 293 294001 0.00332596 1.36462 -0.872807 -0.872871 294 295001 0.00331601 1.36175 -0.872816 -0.872871 295 296001 0.00330609 1.36041 -0.872656 -0.872871 296 297001 0.0032962 1.36403 -0.872848 -0.872871 297 298001 0.00328634 1.35409 -0.870487 -0.872871 298 299001 0.00327651 1.36861 -0.872 -0.872871 299 300001 0.00326671 1.36051 -0.872671 -0.872871 300 301001 0.00325694 1.36871 -0.87197 -0.872871 301 302001 0.0032472 1.3616 -0.872803 -0.872871 302 303001 0.00323749 1.3669 -0.872458 -0.872871 303 304001 0.0032278 1.36647 -0.872548 -0.872871 304 305001 0.00321815 1.36554 -0.872703 -0.872871 305 306001 0.00320852 1.3593 -0.872445 -0.872871 306 307001 0.00319893 1.38291 -0.861649 -0.872871 307 308001 0.00318936 1.37155 -0.870824 -0.872871 308 309001 0.00317982 1.35609 -0.871427 -0.872871 309 310001 0.00317031 1.35635 -0.871533 -0.872871 310 311001 0.00316083 1.36805 -0.87217 -0.872871 311 312001 0.00315137 1.37938 -0.865279 -0.872871 312 313001 0.00314195 1.34956 -0.867498 -0.872871 313 314001 0.00313255 1.36637 -0.872567 -0.872871 314 315001 0.00312318 1.36095 -0.872733 -0.872871 315 316001 0.00311384 1.36249 -0.872859 -0.872871 316 317001 0.00310452 1.36363 -0.872864 -0.872871 317 318001 0.00309524 1.35647 -0.871581 -0.872871 318 319001 0.00308598 1.34571 -0.864007 -0.872871 319 320001 0.00307675 1.35461 -0.870758 -0.872871 320 321001 0.00306755 1.36393 -0.872853 -0.872871 321 322001 0.00305837 1.36118 -0.872761 -0.872871 322 323001 0.00304923 1.35368 -0.87027 -0.872871 323 324001 0.00304011 1.37103 -0.871068 -0.872871 324 325001 0.00303101 1.37314 -0.869978 -0.872871 325 326001 0.00302195 1.36879 -0.871942 -0.872871 326 327001 0.00301291 1.34159 -0.859304 -0.872871 327 328001 0.0030039 1.36714 -0.872406 -0.872871 328 329001 0.00299491 1.36767 -0.872273 -0.872871 329 330001 0.00298595 1.35963 -0.872516 -0.872871 330 331001 0.00297702 1.36921 -0.8718 -0.872871 331 332001 0.00296812 1.35815 -0.87215 -0.872871 332 333001 0.00295924 1.35581 -0.871313 -0.872871 333 334001 0.00295039 1.36319 -0.872871 -0.872871 334 335001 0.00294156 1.35885 -0.872339 -0.872871 335 336001 0.00293277 1.37292 -0.870101 -0.872871 336 337001 0.00292399 1.36824 -0.872114 -0.872871 337 338001 0.00291525 1.36924 -0.871791 -0.872871 338 339001 0.00290653 1.36079 -0.872712 -0.872871 339 340001 0.00289784 1.35188 -0.86918 -0.872871 340 341001 0.00288917 1.35845 -0.872233 -0.872871 341 342001 0.00288053 1.35184 -0.869155 -0.872871 342 343001 0.00287191 1.37069 -0.871219 -0.872871 343 344001 0.00286332 1.36534 -0.87273 -0.872871 344 345001 0.00285476 1.36339 -0.872869 -0.872871 345 346001 0.00284622 1.34957 -0.867503 -0.872871 346 347001 0.0028377 1.36435 -0.872828 -0.872871 347 348001 0.00282922 1.36561 -0.872693 -0.872871 348 349001 0.00282075 1.34822 -0.86638 -0.872871 349 350001 0.00281232 1.35894 -0.87236 -0.872871 350 351001 0.00280391 1.37104 -0.871063 -0.872871 351 352001 0.00279552 1.35846 -0.872235 -0.872871 352 353001 0.00278716 1.36966 -0.871638 -0.872871 353 354001 0.00277882 1.35813 -0.872145 -0.872871 354 355001 0.00277051 1.36289 -0.87287 -0.872871 355 356001 0.00276222 1.35734 -0.871895 -0.872871 356 357001 0.00275396 1.3575 -0.87195 -0.872871 357 358001 0.00274572 1.3584 -0.872221 -0.872871 358 359001 0.00273751 1.3591 -0.872398 -0.872871 359 360001 0.00272932 1.36881 -0.871937 -0.872871 360 361001 0.00272116 1.3541 -0.870494 -0.872871 361 362001 0.00271302 1.37306 -0.870025 -0.872871 362 363001 0.00270491 1.36662 -0.872519 -0.872871 363 364001 0.00269682 1.36343 -0.872869 -0.872871 364 365001 0.00268875 1.37472 -0.868994 -0.872871 365 366001 0.00268071 1.36041 -0.872656 -0.872871 366 367001 0.00267269 1.3676 -0.872293 -0.872871 367 368001 0.0026647 1.35906 -0.872391 -0.872871 368 369001 0.00265673 1.35233 -0.869467 -0.872871 369 370001 0.00264878 1.36062 -0.872689 -0.872871 370 371001 0.00264086 1.36286 -0.872869 -0.872871 371 372001 0.00263296 1.35729 -0.871879 -0.872871 372 373001 0.00262508 1.35858 -0.87227 -0.872871 373 374001 0.00261723 1.37122 -0.87098 -0.872871 374 375001 0.0026094 1.35803 -0.872113 -0.872871 375 376001 0.0026016 1.36793 -0.872204 -0.872871 376 377001 0.00259382 1.37147 -0.870863 -0.872871 377 378001 0.00258606 1.36211 -0.872841 -0.872871 378 379001 0.00257832 1.36328 -0.872871 -0.872871 379 380001 0.00257061 1.35359 -0.87022 -0.872871 380 381001 0.00256292 1.367 -0.872438 -0.872871 381 382001 0.00255526 1.35373 -0.870296 -0.872871 382 383001 0.00254761 1.36303 -0.872871 -0.872871 383 384001 0.00253999 1.3633 -0.87287 -0.872871 384 385001 0.0025324 1.36557 -0.872698 -0.872871 385 386001 0.00252482 1.36821 -0.872123 -0.872871 386 387001 0.00251727 1.36262 -0.872864 -0.872871 387 388001 0.00250974 1.36021 -0.872624 -0.872871 388 389001 0.00250223 1.3663 -0.87258 -0.872871 389 390001 0.00249475 1.3582 -0.872163 -0.872871 390 391001 0.00248729 1.36916 -0.871817 -0.872871 391 392001 0.00247985 1.3652 -0.872747 -0.872871 392 393001 0.00247243 1.35635 -0.871532 -0.872871 393 394001 0.00246504 1.3656 -0.872695 -0.872871 394 395001 0.00245766 1.37178 -0.870707 -0.872871 395 396001 0.00245031 1.367 -0.872436 -0.872871 396 397001 0.00244298 1.36534 -0.87273 -0.872871 397 398001 0.00243568 1.36641 -0.87256 -0.872871 398 399001 0.00242839 1.36502 -0.872768 -0.872871 399 400001 0.00242113 1.3695 -0.871696 -0.872871 400 401001 0.00241389 1.36242 -0.872857 -0.872871 401 402001 0.00240667 1.36178 -0.872818 -0.872871 402 403001 0.00239947 1.36304 -0.872871 -0.872871 403 404001 0.00239229 1.36687 -0.872466 -0.872871 404 405001 0.00238514 1.35853 -0.872255 -0.872871 405 406001 0.002378 1.35999 -0.872585 -0.872871 406 407001 0.00237089 1.36968 -0.871628 -0.872871 407 408001 0.0023638 1.35955 -0.872499 -0.872871 408 409001 0.00235673 1.36998 -0.871515 -0.872871 409 410001 0.00234968 1.36547 -0.872713 -0.872871 410 411001 0.00234265 1.35463 -0.870767 -0.872871 411 412001 0.00233564 1.36503 -0.872767 -0.872871 412 413001 0.00232866 1.36648 -0.872546 -0.872871 413 414001 0.00232169 1.36683 -0.872475 -0.872871 414 415001 0.00231475 1.36674 -0.872493 -0.872871 415 416001 0.00230782 1.35824 -0.872174 -0.872871 416 417001 0.00230092 1.36944 -0.87172 -0.872871 417 418001 0.00229404 1.36587 -0.872653 -0.872871 418 419001 0.00228718 1.36152 -0.872796 -0.872871 419 420001 0.00228034 1.37223 -0.87048 -0.872871 420 421001 0.00227352 1.35744 -0.87193 -0.872871 421 422001 0.00226672 1.36376 -0.87286 -0.872871 422 423001 0.00225994 1.35723 -0.871858 -0.872871 423 424001 0.00225318 1.36273 -0.872867 -0.872871 424 425001 0.00224644 1.34229 -0.860172 -0.872871 425 426001 0.00223972 1.36341 -0.872869 -0.872871 426 427001 0.00223302 1.35882 -0.872332 -0.872871 427 428001 0.00222634 1.3738 -0.869586 -0.872871 428 429001 0.00221968 1.36062 -0.872689 -0.872871 429 430001 0.00221304 1.36108 -0.872749 -0.872871 430 431001 0.00220642 1.35994 -0.872576 -0.872871 431 432001 0.00219982 1.36885 -0.871925 -0.872871 432 433001 0.00219324 1.36229 -0.872851 -0.872871 433 434001 0.00218668 1.35676 -0.871691 -0.872871 434 435001 0.00218014 1.35708 -0.871807 -0.872871 435 436001 0.00217362 1.36478 -0.872792 -0.872871 436 437001 0.00216712 1.36736 -0.872352 -0.872871 437 438001 0.00216064 1.36322 -0.872871 -0.872871 438 439001 0.00215418 1.35076 -0.868408 -0.872871 439 440001 0.00214773 1.37074 -0.871197 -0.872871 440 441001 0.00214131 1.3573 -0.871883 -0.872871 441 442001 0.0021349 1.36093 -0.872731 -0.872871 442 443001 0.00212852 1.35681 -0.87171 -0.872871 443 444001 0.00212215 1.35607 -0.871418 -0.872871 444 445001 0.00211581 1.37319 -0.86995 -0.872871 445 446001 0.00210948 1.36296 -0.87287 -0.872871 446 447001 0.00210317 1.36916 -0.87182 -0.872871 447 448001 0.00209688 1.38194 -0.862709 -0.872871 448 449001 0.00209061 1.37269 -0.870233 -0.872871 449 450001 0.00208435 1.36146 -0.872791 -0.872871 450 451001 0.00207812 1.35221 -0.869396 -0.872871 451 452001 0.0020719 1.36202 -0.872835 -0.872871 452 453001 0.0020657 1.3605 -0.87267 -0.872871 453 454001 0.00205953 1.35976 -0.87254 -0.872871 454 455001 0.00205337 1.36948 -0.871703 -0.872871 455 456001 0.00204722 1.35624 -0.871489 -0.872871 456 457001 0.0020411 1.36128 -0.872772 -0.872871 457 458001 0.002035 1.37114 -0.871017 -0.872871 458 459001 0.00202891 1.35722 -0.871853 -0.872871 459 460001 0.00202284 1.36133 -0.872777 -0.872871 460 461001 0.00201679 1.35651 -0.871594 -0.872871 461 462001 0.00201076 1.37495 -0.868842 -0.872871 462 463001 0.00200474 1.36967 -0.871632 -0.872871 463 464001 0.00199875 1.36456 -0.872812 -0.872871 464 465001 0.00199277 1.36506 -0.872763 -0.872871 465 466001 0.00198681 1.3579 -0.872076 -0.872871 466 467001 0.00198087 1.35926 -0.872436 -0.872871 467 468001 0.00197494 1.3684 -0.872068 -0.872871 468 469001 0.00196903 1.36255 -0.872861 -0.872871 469 470001 0.00196315 1.3599 -0.872568 -0.872871 470 471001 0.00195727 1.37334 -0.86986 -0.872871 471 472001 0.00195142 1.35974 -0.872536 -0.872871 472 473001 0.00194558 1.35682 -0.871711 -0.872871 473 474001 0.00193976 1.367 -0.872437 -0.872871 474 475001 0.00193396 1.35525 -0.871063 -0.872871 475 476001 0.00192818 1.36734 -0.872357 -0.872871 476 477001 0.00192241 1.3531 -0.86994 -0.872871 477 478001 0.00191666 1.36192 -0.872829 -0.872871 478 479001 0.00191093 1.35485 -0.870875 -0.872871 479 480001 0.00190521 1.35417 -0.870532 -0.872871 480 481001 0.00189951 1.36015 -0.872613 -0.872871 481 482001 0.00189383 1.36068 -0.872697 -0.872871 482 483001 0.00188817 1.37158 -0.870808 -0.872871 483 484001 0.00188252 1.36887 -0.871919 -0.872871 484 485001 0.00187689 1.35996 -0.872579 -0.872871 485 486001 0.00187127 1.37107 -0.871049 -0.872871 486 487001 0.00186568 1.36997 -0.871517 -0.872871 487 488001 0.0018601 1.36937 -0.871743 -0.872871 488 489001 0.00185453 1.36417 -0.87284 -0.872871 489 490001 0.00184899 1.36969 -0.871627 -0.872871 490 491001 0.00184346 1.3664 -0.872562 -0.872871 491 492001 0.00183794 1.35847 -0.872239 -0.872871 492 493001 0.00183244 1.35724 -0.87186 -0.872871 493 494001 0.00182696 1.36995 -0.871525 -0.872871 494 495001 0.0018215 1.36546 -0.872714 -0.872871 495 496001 0.00181605 1.36061 -0.872686 -0.872871 496 497001 0.00181062 1.36768 -0.872272 -0.872871 497 498001 0.0018052 1.36436 -0.872827 -0.872871 498 499001 0.0017998 1.36797 -0.872193 -0.872871 499 500001 0.00179442 1.35838 -0.872215 -0.872871 500 501001 0.00178905 1.35469 -0.870796 -0.872871 501 502001 0.0017837 1.3623 -0.872851 -0.872871 502 503001 0.00177837 1.37334 -0.869861 -0.872871 503 504001 0.00177305 1.35608 -0.871426 -0.872871 504 505001 0.00176775 1.36054 -0.872676 -0.872871 505 506001 0.00176246 1.36229 -0.872851 -0.872871 506 507001 0.00175719 1.35876 -0.872316 -0.872871 507 508001 0.00175193 1.3588 -0.872326 -0.872871 508 509001 0.00174669 1.36077 -0.87271 -0.872871 509 510001 0.00174147 1.35534 -0.871104 -0.872871 510 511001 0.00173626 1.36767 -0.872275 -0.872871 511 512001 0.00173106 1.36506 -0.872763 -0.872871 512 513001 0.00172589 1.37553 -0.868436 -0.872871 513 514001 0.00172072 1.36152 -0.872796 -0.872871 514 515001 0.00171558 1.36445 -0.872821 -0.872871 515 516001 0.00171045 1.37093 -0.87111 -0.872871 516 517001 0.00170533 1.36191 -0.872828 -0.872871 517 518001 0.00170023 1.3592 -0.872421 -0.872871 518 519001 0.00169514 1.37028 -0.871394 -0.872871 519 520001 0.00169007 1.36369 -0.872862 -0.872871 520 521001 0.00168502 1.36131 -0.872775 -0.872871 521 522001 0.00167998 1.3701 -0.871467 -0.872871 522 523001 0.00167495 1.3617 -0.872812 -0.872871 523 524001 0.00166994 1.364 -0.872849 -0.872871 524 525001 0.00166495 1.36182 -0.872822 -0.872871 525 526001 0.00165997 1.35741 -0.871921 -0.872871 526 527001 0.001655 1.36783 -0.872232 -0.872871 527 528001 0.00165005 1.37589 -0.868174 -0.872871 528 529001 0.00164512 1.36191 -0.872828 -0.872871 529 530001 0.0016402 1.36505 -0.872765 -0.872871 530 531001 0.00163529 1.36189 -0.872827 -0.872871 531 532001 0.0016304 1.37241 -0.870383 -0.872871 532 533001 0.00162552 1.36016 -0.872614 -0.872871 533 534001 0.00162066 1.35598 -0.871383 -0.872871 534 535001 0.00161582 1.36102 -0.872742 -0.872871 535 536001 0.00161098 1.36105 -0.872745 -0.872871 536 537001 0.00160616 1.37132 -0.870931 -0.872871 537 538001 0.00160136 1.36178 -0.872818 -0.872871 538 539001 0.00159657 1.36101 -0.872741 -0.872871 539 540001 0.00159179 1.3514 -0.868857 -0.872871 540 541001 0.00158703 1.35059 -0.868281 -0.872871 541 542001 0.00158229 1.36146 -0.87279 -0.872871 542 543001 0.00157755 1.3644 -0.872825 -0.872871 543 544001 0.00157284 1.36709 -0.872418 -0.872871 544 545001 0.00156813 1.36591 -0.872647 -0.872871 545 546001 0.00156344 1.35839 -0.872216 -0.872871 546 547001 0.00155876 1.3643 -0.872831 -0.872871 547 548001 0.0015541 1.36053 -0.872675 -0.872871 548 549001 0.00154945 1.3635 -0.872867 -0.872871 549 550001 0.00154482 1.35505 -0.870968 -0.872871 550 551001 0.0015402 1.36611 -0.872613 -0.872871 551 552001 0.00153559 1.35797 -0.872096 -0.872871 552 553001 0.001531 1.35848 -0.872241 -0.872871 553 554001 0.00152642 1.37049 -0.871304 -0.872871 554 555001 0.00152185 1.36536 -0.872727 -0.872871 555 556001 0.0015173 1.3616 -0.872803 -0.872871 556 557001 0.00151276 1.3575 -0.871948 -0.872871 557 558001 0.00150824 1.3654 -0.872722 -0.872871 558 559001 0.00150373 1.36713 -0.872406 -0.872871 559 560001 0.00149923 1.36467 -0.872802 -0.872871 560 561001 0.00149475 1.37246 -0.870359 -0.872871 561 562001 0.00149028 1.36 -0.872587 -0.872871 562 563001 0.00148582 1.36101 -0.87274 -0.872871 563 564001 0.00148137 1.36336 -0.87287 -0.872871 564 565001 0.00147694 1.37169 -0.870753 -0.872871 565 566001 0.00147253 1.36314 -0.872871 -0.872871 566 567001 0.00146812 1.36512 -0.872757 -0.872871 567 568001 0.00146373 1.36534 -0.87273 -0.872871 568 569001 0.00145935 1.36425 -0.872835 -0.872871 569 570001 0.00145499 1.36591 -0.872647 -0.872871 570 571001 0.00145064 1.36356 -0.872866 -0.872871 571 572001 0.0014463 1.36166 -0.872808 -0.872871 572 573001 0.00144197 1.37086 -0.871142 -0.872871 573 574001 0.00143766 1.36407 -0.872846 -0.872871 574 575001 0.00143336 1.36241 -0.872856 -0.872871 575 576001 0.00142907 1.36366 -0.872863 -0.872871 576 577001 0.0014248 1.36099 -0.872738 -0.872871 577 578001 0.00142053 1.36255 -0.872862 -0.872871 578 579001 0.00141629 1.36556 -0.872701 -0.872871 579 580001 0.00141205 1.36467 -0.872803 -0.872871 580 581001 0.00140783 1.36248 -0.872859 -0.872871 581 582001 0.00140361 1.36518 -0.87275 -0.872871 582 583001 0.00139942 1.36438 -0.872826 -0.872871 583 584001 0.00139523 1.35489 -0.870893 -0.872871 584 585001 0.00139106 1.37375 -0.869615 -0.872871 585 586001 0.0013869 1.36305 -0.872871 -0.872871 586 587001 0.00138275 1.3626 -0.872863 -0.872871 587 588001 0.00137861 1.35603 -0.871402 -0.872871 588 589001 0.00137449 1.3666 -0.872523 -0.872871 589 590001 0.00137038 1.3674 -0.872344 -0.872871 590 591001 0.00136628 1.36803 -0.872176 -0.872871 591 592001 0.00136219 1.35847 -0.872241 -0.872871 592 593001 0.00135812 1.36606 -0.872623 -0.872871 593 594001 0.00135406 1.36121 -0.872765 -0.872871 594 595001 0.00135001 1.36789 -0.872214 -0.872871 595 596001 0.00134597 1.36256 -0.872862 -0.872871 596 597001 0.00134194 1.37111 -0.871032 -0.872871 597 598001 0.00133793 1.36379 -0.872859 -0.872871 598 599001 0.00133393 1.35218 -0.869374 -0.872871 599 600001 0.00132994 1.35903 -0.872382 -0.872871 600 601001 0.00132596 1.36535 -0.872729 -0.872871 601 602001 0.00132199 1.35313 -0.869955 -0.872871 602 603001 0.00131804 1.36631 -0.872578 -0.872871 603 604001 0.0013141 1.35686 -0.871726 -0.872871 604 605001 0.00131017 1.35392 -0.870401 -0.872871 605 606001 0.00130625 1.35453 -0.870717 -0.872871 606 607001 0.00130234 1.3581 -0.872136 -0.872871 607 608001 0.00129845 1.36816 -0.87214 -0.872871 608 609001 0.00129456 1.36221 -0.872847 -0.872871 609 610001 0.00129069 1.36332 -0.87287 -0.872871 610 611001 0.00128683 1.3673 -0.872367 -0.872871 611 612001 0.00128298 1.36123 -0.872767 -0.872871 612 613001 0.00127914 1.36295 -0.87287 -0.872871 613 614001 0.00127532 1.35909 -0.872396 -0.872871 614 615001 0.0012715 1.36361 -0.872864 -0.872871 615 616001 0.0012677 1.37071 -0.871209 -0.872871 616 617001 0.00126391 1.36319 -0.872871 -0.872871 617 618001 0.00126013 1.36313 -0.872871 -0.872871 618 619001 0.00125636 1.36924 -0.871791 -0.872871 619 620001 0.0012526 1.35652 -0.871598 -0.872871 620 621001 0.00124885 1.36422 -0.872837 -0.872871 621 622001 0.00124512 1.36763 -0.872284 -0.872871 622 623001 0.00124139 1.37126 -0.870962 -0.872871 623 624001 0.00123768 1.36319 -0.872871 -0.872871 624 625001 0.00123398 1.36594 -0.872642 -0.872871 625 626001 0.00123029 1.36094 -0.872732 -0.872871 626 627001 0.00122661 1.35974 -0.872537 -0.872871 627 628001 0.00122294 1.36172 -0.872813 -0.872871 628 629001 0.00121928 1.36462 -0.872807 -0.872871 629 630001 0.00121563 1.36037 -0.87265 -0.872871 630 631001 0.001212 1.35818 -0.872157 -0.872871 631 632001 0.00120837 1.35545 -0.871154 -0.872871 632 633001 0.00120476 1.35413 -0.87051 -0.872871 633 634001 0.00120116 1.35937 -0.87246 -0.872871 634 635001 0.00119756 1.35932 -0.872449 -0.872871 635 636001 0.00119398 1.36742 -0.872338 -0.872871 636 637001 0.00119041 1.35626 -0.871498 -0.872871 637 638001 0.00118685 1.36757 -0.872299 -0.872871 638 639001 0.0011833 1.36882 -0.871932 -0.872871 639 640001 0.00117976 1.35882 -0.872332 -0.872871 640 641001 0.00117623 1.35949 -0.872486 -0.872871 641 642001 0.00117271 1.36847 -0.872044 -0.872871 642 643001 0.00116921 1.36486 -0.872784 -0.872871 643 644001 0.00116571 1.36733 -0.872361 -0.872871 644 645001 0.00116222 1.35384 -0.870357 -0.872871 645 646001 0.00115875 1.36427 -0.872833 -0.872871 646 647001 0.00115528 1.36758 -0.872296 -0.872871 647 648001 0.00115182 1.36076 -0.872708 -0.872871 648 649001 0.00114838 1.36452 -0.872815 -0.872871 649 650001 0.00114494 1.35918 -0.872418 -0.872871 650 651001 0.00114152 1.36823 -0.872119 -0.872871 651 652001 0.00113811 1.36347 -0.872868 -0.872871 652 653001 0.0011347 1.3697 -0.871621 -0.872871 653 654001 0.00113131 1.3619 -0.872827 -0.872871 654 655001 0.00112792 1.3665 -0.872541 -0.872871 655 656001 0.00112455 1.36215 -0.872843 -0.872871 656 657001 0.00112119 1.36463 -0.872806 -0.872871 657 658001 0.00111783 1.36283 -0.872869 -0.872871 658 659001 0.00111449 1.35811 -0.872138 -0.872871 659 660001 0.00111116 1.36891 -0.871904 -0.872871 660 661001 0.00110783 1.35995 -0.872577 -0.872871 661 662001 0.00110452 1.36238 -0.872855 -0.872871 662 663001 0.00110122 1.36286 -0.872869 -0.872871 663 664001 0.00109792 1.36694 -0.872449 -0.872871 664 665001 0.00109464 1.36139 -0.872783 -0.872871 665 666001 0.00109136 1.3604 -0.872655 -0.872871 666 667001 0.0010881 1.35803 -0.872114 -0.872871 667 668001 0.00108484 1.36366 -0.872863 -0.872871 668 669001 0.0010816 1.36379 -0.872859 -0.872871 669 670001 0.00107837 1.36165 -0.872807 -0.872871 670 671001 0.00107514 1.36086 -0.872721 -0.872871 671 672001 0.00107192 1.36679 -0.872484 -0.872871 672 673001 0.00106872 1.35909 -0.872397 -0.872871 673 674001 0.00106552 1.36562 -0.872692 -0.872871 674 675001 0.00106233 1.37245 -0.870359 -0.872871 675 676001 0.00105916 1.3625 -0.87286 -0.872871 676 677001 0.00105599 1.3582 -0.872163 -0.872871 677 678001 0.00105283 1.36365 -0.872864 -0.872871 678 679001 0.00104968 1.35899 -0.872372 -0.872871 679 680001 0.00104654 1.36224 -0.872848 -0.872871 680 681001 0.00104341 1.36048 -0.872667 -0.872871 681 682001 0.00104029 1.36562 -0.872691 -0.872871 682 683001 0.00103718 1.36453 -0.872814 -0.872871 683 684001 0.00103408 1.35992 -0.872572 -0.872871 684 685001 0.00103098 1.36693 -0.872453 -0.872871 685 686001 0.0010279 1.36254 -0.872861 -0.872871 686 687001 0.00102483 1.36824 -0.872115 -0.872871 687 688001 0.00102176 1.35755 -0.871965 -0.872871 688 689001 0.0010187 1.36406 -0.872846 -0.872871 689 690001 0.00101566 1.36389 -0.872854 -0.872871 690 691001 0.00101262 1.36461 -0.872808 -0.872871 691 692001 0.00100959 1.35533 -0.871099 -0.872871 692 693001 0.00100657 1.36532 -0.872731 -0.872871 693 694001 0.00100356 1.36156 -0.8728 -0.872871 694 695001 0.00100056 1.36411 -0.872844 -0.872871 695 696001 0.000997566 1.35819 -0.87216 -0.872871 696 697001 0.000994582 1.36309 -0.872871 -0.872871 697 698001 0.000991607 1.36442 -0.872823 -0.872871 698 699001 0.000988641 1.36261 -0.872863 -0.872871 699 700001 0.000985684 1.36147 -0.872791 -0.872871 700 701001 0.000982736 1.35507 -0.870978 -0.872871 701 702001 0.000979797 1.36101 -0.872741 -0.872871 702 703001 0.000976866 1.36711 -0.872413 -0.872871 703 704001 0.000973944 1.36502 -0.872767 -0.872871 704 705001 0.000971031 1.36334 -0.87287 -0.872871 705 706001 0.000968127 1.36524 -0.872742 -0.872871 706 707001 0.000965231 1.36328 -0.872871 -0.872871 707 708001 0.000962344 1.35354 -0.870189 -0.872871 708 709001 0.000959466 1.36114 -0.872757 -0.872871 709 710001 0.000956596 1.3637 -0.872862 -0.872871 710 711001 0.000953735 1.35535 -0.871109 -0.872871 711 712001 0.000950882 1.36995 -0.871525 -0.872871 712 713001 0.000948038 1.36615 -0.872606 -0.872871 713 714001 0.000945202 1.36559 -0.872696 -0.872871 714 715001 0.000942375 1.36517 -0.872751 -0.872871 715 716001 0.000939556 1.371 -0.87108 -0.872871 716 717001 0.000936746 1.3632 -0.872871 -0.872871 717 718001 0.000933944 1.35744 -0.871928 -0.872871 718 719001 0.000931151 1.36004 -0.872593 -0.872871 719 720001 0.000928366 1.36458 -0.87281 -0.872871 720 721001 0.000925589 1.36931 -0.871766 -0.872871 721 722001 0.000922821 1.36014 -0.872611 -0.872871 722 723001 0.00092006 1.35872 -0.872304 -0.872871 723 724001 0.000917308 1.36377 -0.872859 -0.872871 724 725001 0.000914565 1.35852 -0.872252 -0.872871 725 726001 0.000911829 1.36911 -0.871837 -0.872871 726 727001 0.000909102 1.36687 -0.872467 -0.872871 727 728001 0.000906383 1.35309 -0.869931 -0.872871 728 729001 0.000903672 1.37063 -0.871242 -0.872871 729 730001 0.000900969 1.36644 -0.872554 -0.872871 730 731001 0.000898274 1.36738 -0.872349 -0.872871 731 732001 0.000895587 1.36226 -0.872849 -0.872871 732 733001 0.000892909 1.36152 -0.872796 -0.872871 733 734001 0.000890238 1.36796 -0.872196 -0.872871 734 735001 0.000887575 1.36851 -0.872034 -0.872871 735 736001 0.00088492 1.36574 -0.872674 -0.872871 736 737001 0.000882274 1.35826 -0.872181 -0.872871 737 738001 0.000879635 1.35813 -0.872145 -0.872871 738 739001 0.000877004 1.36273 -0.872867 -0.872871 739 740001 0.000874381 1.36833 -0.872089 -0.872871 740 741001 0.000871765 1.35915 -0.87241 -0.872871 741 742001 0.000869158 1.35948 -0.872483 -0.872871 742 743001 0.000866558 1.35829 -0.872188 -0.872871 743 744001 0.000863966 1.36289 -0.87287 -0.872871 744 745001 0.000861382 1.36202 -0.872836 -0.872871 745 746001 0.000858806 1.36155 -0.872798 -0.872871 746 747001 0.000856237 1.37042 -0.871334 -0.872871 747 748001 0.000853676 1.36189 -0.872826 -0.872871 748 749001 0.000851123 1.36451 -0.872816 -0.872871 749 750001 0.000848577 1.36106 -0.872746 -0.872871 750 751001 0.000846039 1.36355 -0.872866 -0.872871 751 752001 0.000843508 1.36382 -0.872858 -0.872871 752 753001 0.000840985 1.36166 -0.872808 -0.872871 753 754001 0.00083847 1.36154 -0.872797 -0.872871 754 755001 0.000835962 1.35798 -0.872101 -0.872871 755 756001 0.000833462 1.36525 -0.872741 -0.872871 756 757001 0.000830969 1.36833 -0.872088 -0.872871 757 758001 0.000828483 1.36298 -0.872871 -0.872871 758 759001 0.000826005 1.36331 -0.87287 -0.872871 759 760001 0.000823535 1.36146 -0.87279 -0.872871 760 761001 0.000821071 1.3542 -0.870547 -0.872871 761 762001 0.000818615 1.36001 -0.872588 -0.872871 762 763001 0.000816167 1.35866 -0.872289 -0.872871 763 764001 0.000813726 1.35784 -0.872056 -0.872871 764 765001 0.000811292 1.35984 -0.872556 -0.872871 765 766001 0.000808865 1.36139 -0.872783 -0.872871 766 767001 0.000806446 1.3684 -0.872068 -0.872871 767 768001 0.000804034 1.36663 -0.872516 -0.872871 768 769001 0.000801629 1.36485 -0.872786 -0.872871 769 770001 0.000799231 1.36366 -0.872863 -0.872871 770 771001 0.000796841 1.36585 -0.872656 -0.872871 771 772001 0.000794457 1.36478 -0.872792 -0.872871 772 773001 0.000792081 1.36449 -0.872818 -0.872871 773 774001 0.000789712 1.3625 -0.87286 -0.872871 774 775001 0.00078735 1.35714 -0.871826 -0.872871 775 776001 0.000784995 1.35575 -0.871287 -0.872871 776 777001 0.000782647 1.36554 -0.872702 -0.872871 777 778001 0.000780306 1.36192 -0.872828 -0.872871 778 779001 0.000777972 1.36058 -0.872682 -0.872871 779 780001 0.000775645 1.36158 -0.872802 -0.872871 780 781001 0.000773325 1.35714 -0.871828 -0.872871 781 782001 0.000771012 1.35913 -0.872406 -0.872871 782 783001 0.000768706 1.37067 -0.871226 -0.872871 783 784001 0.000766407 1.36358 -0.872865 -0.872871 784 785001 0.000764115 1.37209 -0.87055 -0.872871 785 786001 0.000761829 1.36342 -0.872869 -0.872871 786 787001 0.00075955 1.36347 -0.872868 -0.872871 787 788001 0.000757279 1.36002 -0.87259 -0.872871 788 789001 0.000755014 1.36031 -0.87264 -0.872871 789 790001 0.000752755 1.3633 -0.87287 -0.872871 790 791001 0.000750504 1.35722 -0.871855 -0.872871 791 792001 0.000748259 1.36779 -0.872242 -0.872871 792 793001 0.000746021 1.36131 -0.872775 -0.872871 793 794001 0.00074379 1.35909 -0.872396 -0.872871 794 795001 0.000741565 1.36358 -0.872865 -0.872871 795 796001 0.000739347 1.36943 -0.871724 -0.872871 796 797001 0.000737135 1.35745 -0.871933 -0.872871 797 798001 0.000734931 1.36768 -0.872271 -0.872871 798 799001 0.000732732 1.35962 -0.872513 -0.872871 799 800001 0.000730541 1.36914 -0.871825 -0.872871 800 801001 0.000728356 1.36705 -0.872426 -0.872871 801 802001 0.000726177 1.36543 -0.872717 -0.872871 802 803001 0.000724005 1.3659 -0.872649 -0.872871 803 804001 0.00072184 1.35906 -0.87239 -0.872871 804 805001 0.000719681 1.36344 -0.872868 -0.872871 805 806001 0.000717528 1.36602 -0.872628 -0.872871 806 807001 0.000715382 1.36774 -0.872256 -0.872871 807 808001 0.000713242 1.3632 -0.872871 -0.872871 808 809001 0.000711109 1.36476 -0.872794 -0.872871 809 810001 0.000708982 1.36415 -0.872841 -0.872871 810 811001 0.000706861 1.36339 -0.872869 -0.872871 811 812001 0.000704747 1.36324 -0.872871 -0.872871 812 813001 0.000702639 1.36142 -0.872786 -0.872871 813 814001 0.000700538 1.35976 -0.872541 -0.872871 814 815001 0.000698442 1.36461 -0.872808 -0.872871 815 816001 0.000696353 1.3652 -0.872747 -0.872871 816 817001 0.00069427 1.35712 -0.871819 -0.872871 817 818001 0.000692194 1.36273 -0.872867 -0.872871 818 819001 0.000690123 1.36259 -0.872863 -0.872871 819 820001 0.000688059 1.36756 -0.872303 -0.872871 820 821001 0.000686001 1.36319 -0.872871 -0.872871 821 822001 0.000683949 1.36672 -0.872497 -0.872871 822 823001 0.000681904 1.36774 -0.872257 -0.872871 823 824001 0.000679864 1.36625 -0.872588 -0.872871 824 825001 0.000677831 1.35879 -0.872323 -0.872871 825 826001 0.000675803 1.35983 -0.872554 -0.872871 826 827001 0.000673782 1.36623 -0.872592 -0.872871 827 828001 0.000671767 1.36211 -0.872841 -0.872871 828 829001 0.000669757 1.36048 -0.872667 -0.872871 829 830001 0.000667754 1.36969 -0.871627 -0.872871 830 831001 0.000665757 1.36714 -0.872406 -0.872871 831 832001 0.000663765 1.35992 -0.872572 -0.872871 832 833001 0.00066178 1.36301 -0.872871 -0.872871 833 834001 0.000659801 1.36734 -0.872358 -0.872871 834 835001 0.000657827 1.36353 -0.872867 -0.872871 835 836001 0.00065586 1.36274 -0.872867 -0.872871 836 837001 0.000653898 1.36681 -0.872479 -0.872871 837 838001 0.000651942 1.36606 -0.872622 -0.872871 838 839001 0.000649992 1.36215 -0.872843 -0.872871 839 840001 0.000648048 1.36247 -0.872859 -0.872871 840 841001 0.00064611 1.36049 -0.872668 -0.872871 841 842001 0.000644177 1.36752 -0.872312 -0.872871 842 843001 0.00064225 1.35992 -0.872571 -0.872871 843 844001 0.000640329 1.36357 -0.872866 -0.872871 844 845001 0.000638414 1.36056 -0.872679 -0.872871 845 846001 0.000636505 1.35748 -0.871941 -0.872871 846 847001 0.000634601 1.36902 -0.871867 -0.872871 847 848001 0.000632703 1.36376 -0.87286 -0.872871 848 849001 0.00063081 1.37013 -0.871455 -0.872871 849 850001 0.000628924 1.36757 -0.872301 -0.872871 850 851001 0.000627042 1.36152 -0.872796 -0.872871 851 852001 0.000625167 1.36131 -0.872774 -0.872871 852 853001 0.000623297 1.3603 -0.872638 -0.872871 853 854001 0.000621433 1.35714 -0.871827 -0.872871 854 855001 0.000619574 1.36582 -0.872661 -0.872871 855 856001 0.000617721 1.36807 -0.872164 -0.872871 856 857001 0.000615873 1.36099 -0.872738 -0.872871 857 858001 0.000614031 1.3713 -0.870942 -0.872871 858 859001 0.000612195 1.36258 -0.872862 -0.872871 859 860001 0.000610363 1.35747 -0.87194 -0.872871 860 861001 0.000608538 1.36144 -0.872788 -0.872871 861 862001 0.000606718 1.35959 -0.872507 -0.872871 862 863001 0.000604903 1.35959 -0.872507 -0.872871 863 864001 0.000603094 1.3621 -0.87284 -0.872871 864 865001 0.00060129 1.36425 -0.872835 -0.872871 865 866001 0.000599491 1.35953 -0.872494 -0.872871 866 867001 0.000597698 1.35934 -0.872455 -0.872871 867 868001 0.000595911 1.36376 -0.87286 -0.872871 868 869001 0.000594128 1.36274 -0.872867 -0.872871 869 870001 0.000592351 1.36081 -0.872715 -0.872871 870 871001 0.000590579 1.36426 -0.872834 -0.872871 871 872001 0.000588813 1.3656 -0.872695 -0.872871 872 873001 0.000587052 1.36599 -0.872634 -0.872871 873 874001 0.000585296 1.37014 -0.871448 -0.872871 874 875001 0.000583545 1.36366 -0.872863 -0.872871 875 876001 0.0005818 1.36094 -0.872732 -0.872871 876 877001 0.00058006 1.36571 -0.872679 -0.872871 877 878001 0.000578325 1.36001 -0.872588 -0.872871 878 879001 0.000576595 1.36311 -0.872871 -0.872871 879 880001 0.00057487 1.35965 -0.872518 -0.872871 880 881001 0.000573151 1.36703 -0.87243 -0.872871 881 882001 0.000571437 1.36317 -0.872871 -0.872871 882 883001 0.000569727 1.36463 -0.872806 -0.872871 883 884001 0.000568023 1.36304 -0.872871 -0.872871 884 885001 0.000566324 1.36445 -0.87282 -0.872871 885 886001 0.00056463 1.3674 -0.872343 -0.872871 886 887001 0.000562942 1.36924 -0.87179 -0.872871 887 888001 0.000561258 1.36122 -0.872766 -0.872871 888 889001 0.000559579 1.36427 -0.872833 -0.872871 889 890001 0.000557905 1.36101 -0.872741 -0.872871 890 891001 0.000556237 1.35674 -0.871681 -0.872871 891 892001 0.000554573 1.36364 -0.872864 -0.872871 892 893001 0.000552914 1.3638 -0.872858 -0.872871 893 894001 0.00055126 1.36486 -0.872785 -0.872871 894 895001 0.000549612 1.36618 -0.872602 -0.872871 895 896001 0.000547968 1.36431 -0.872831 -0.872871 896 897001 0.000546329 1.36147 -0.872791 -0.872871 897 898001 0.000544695 1.36441 -0.872824 -0.872871 898 899001 0.000543065 1.37013 -0.871455 -0.872871 899 900001 0.000541441 1.35838 -0.872216 -0.872871 900 901001 0.000539822 1.36367 -0.872863 -0.872871 901 902001 0.000538207 1.36321 -0.872871 -0.872871 902 903001 0.000536597 1.36206 -0.872838 -0.872871 903 904001 0.000534992 1.36764 -0.872282 -0.872871 904 905001 0.000533392 1.35984 -0.872556 -0.872871 905 906001 0.000531797 1.36195 -0.87283 -0.872871 906 907001 0.000530206 1.3631 -0.872871 -0.872871 907 908001 0.00052862 1.3579 -0.872076 -0.872871 908 909001 0.000527039 1.36618 -0.872601 -0.872871 909 910001 0.000525463 1.35773 -0.872022 -0.872871 910 911001 0.000523891 1.3673 -0.872368 -0.872871 911 912001 0.000522324 1.3631 -0.872871 -0.872871 912 913001 0.000520762 1.36224 -0.872848 -0.872871 913 914001 0.000519204 1.36509 -0.87276 -0.872871 914 915001 0.000517651 1.36441 -0.872824 -0.872871 915 916001 0.000516103 1.36586 -0.872655 -0.872871 916 917001 0.000514559 1.36662 -0.872518 -0.872871 917 918001 0.00051302 1.36347 -0.872868 -0.872871 918 919001 0.000511486 1.36132 -0.872777 -0.872871 919 920001 0.000509956 1.36319 -0.872871 -0.872871 920 921001 0.000508431 1.36335 -0.87287 -0.872871 921 922001 0.00050691 1.3679 -0.872212 -0.872871 922 923001 0.000505394 1.3644 -0.872824 -0.872871 923 924001 0.000503882 1.36273 -0.872867 -0.872871 924 925001 0.000502375 1.36403 -0.872848 -0.872871 925 926001 0.000500872 1.36403 -0.872848 -0.872871 926 927001 0.000499374 1.36403 -0.872848 -0.872871 927 928001 0.00049788 1.36778 -0.872244 -0.872871 928 929001 0.000496391 1.36273 -0.872867 -0.872871 929 930001 0.000494907 1.36245 -0.872858 -0.872871 930 931001 0.000493426 1.36307 -0.872871 -0.872871 931 932001 0.00049195 1.35921 -0.872424 -0.872871 932 933001 0.000490479 1.36139 -0.872784 -0.872871 933 934001 0.000489012 1.36502 -0.872767 -0.872871 934 935001 0.000487549 1.36033 -0.872643 -0.872871 935 936001 0.000486091 1.36587 -0.872653 -0.872871 936 937001 0.000484637 1.36311 -0.872871 -0.872871 937 938001 0.000483188 1.36373 -0.872861 -0.872871 938 939001 0.000481742 1.36313 -0.872871 -0.872871 939 940001 0.000480301 1.36032 -0.872642 -0.872871 940 941001 0.000478865 1.36913 -0.87183 -0.872871 941 942001 0.000477433 1.36294 -0.87287 -0.872871 942 943001 0.000476005 1.36495 -0.872775 -0.872871 943 944001 0.000474581 1.36691 -0.872457 -0.872871 944 945001 0.000473161 1.36686 -0.872468 -0.872871 945 946001 0.000471746 1.36688 -0.872463 -0.872871 946 947001 0.000470335 1.36308 -0.872871 -0.872871 947 948001 0.000468928 1.36482 -0.872789 -0.872871 948 949001 0.000467526 1.36195 -0.872831 -0.872871 949 950001 0.000466127 1.36542 -0.872719 -0.872871 950 951001 0.000464733 1.36673 -0.872495 -0.872871 951 952001 0.000463343 1.36435 -0.872828 -0.872871 952 953001 0.000461957 1.36421 -0.872837 -0.872871 953 954001 0.000460575 1.36126 -0.87277 -0.872871 954 955001 0.000459198 1.3603 -0.872639 -0.872871 955 956001 0.000457824 1.36138 -0.872782 -0.872871 956 957001 0.000456455 1.36434 -0.872829 -0.872871 957 958001 0.00045509 1.36263 -0.872864 -0.872871 958 959001 0.000453729 1.3647 -0.8728 -0.872871 959 960001 0.000452371 1.35968 -0.872524 -0.872871 960 961001 0.000451018 1.35798 -0.872098 -0.872871 961 962001 0.000449669 1.36319 -0.872871 -0.872871 962 963001 0.000448324 1.36422 -0.872837 -0.872871 963 964001 0.000446983 1.36203 -0.872836 -0.872871 964 965001 0.000445647 1.36043 -0.872659 -0.872871 965 966001 0.000444314 1.36729 -0.872371 -0.872871 966 967001 0.000442985 1.37151 -0.870844 -0.872871 967 968001 0.00044166 1.36535 -0.872728 -0.872871 968 969001 0.000440339 1.36535 -0.872728 -0.872871 969 970001 0.000439022 1.363 -0.872871 -0.872871 970 971001 0.000437708 1.36594 -0.872642 -0.872871 971 972001 0.000436399 1.36311 -0.872871 -0.872871 972 973001 0.000435094 1.36419 -0.872839 -0.872871 973 974001 0.000433793 1.36258 -0.872862 -0.872871 974 975001 0.000432495 1.36318 -0.872871 -0.872871 975 976001 0.000431202 1.3573 -0.871881 -0.872871 976 977001 0.000429912 1.36288 -0.872869 -0.872871 977 978001 0.000428626 1.36275 -0.872867 -0.872871 978 979001 0.000427344 1.36272 -0.872866 -0.872871 979 980001 0.000426066 1.36116 -0.872759 -0.872871 980 981001 0.000424791 1.36125 -0.872768 -0.872871 981 982001 0.000423521 1.36465 -0.872804 -0.872871 982 983001 0.000422254 1.36249 -0.872859 -0.872871 983 984001 0.000420991 1.36692 -0.872455 -0.872871 984 985001 0.000419732 1.36214 -0.872843 -0.872871 985 986001 0.000418476 1.36129 -0.872772 -0.872871 986 987001 0.000417225 1.36434 -0.872828 -0.872871 987 988001 0.000415977 1.36606 -0.872622 -0.872871 988 989001 0.000414733 1.36031 -0.87264 -0.872871 989 990001 0.000413492 1.36632 -0.872576 -0.872871 990 991001 0.000412255 1.36248 -0.872859 -0.872871 991 992001 0.000411022 1.36208 -0.872839 -0.872871 992 993001 0.000409793 1.36041 -0.872656 -0.872871 993 994001 0.000408567 1.36633 -0.872574 -0.872871 994 995001 0.000407345 1.36787 -0.87222 -0.872871 995 996001 0.000406127 1.36254 -0.872861 -0.872871 996 997001 0.000404912 1.36359 -0.872865 -0.872871 997 998001 0.000403701 1.36359 -0.872865 -0.872871 998 999001 0.000402493 1.36816 -0.872137 -0.872871 999 1000001 0.00040129 1.3633 -0.87287 -0.872871 1000 1001001 0.000400089 1.36013 -0.872609 -0.872871 1001 1002001 0.000398893 1.35879 -0.872324 -0.872871 1002 1003001 0.0003977 1.35898 -0.872371 -0.872871 1003 1004001 0.00039651 1.36044 -0.872661 -0.872871 1004 1005001 0.000395324 1.36323 -0.872871 -0.872871 1005 1006001 0.000394142 1.36405 -0.872846 -0.872871 1006 1007001 0.000392963 1.36426 -0.872834 -0.872871 1007 1008001 0.000391787 1.36273 -0.872867 -0.872871 1008 1009001 0.000390616 1.36387 -0.872855 -0.872871 1009 1010001 0.000389447 1.36545 -0.872716 -0.872871 1010 1011001 0.000388282 1.36385 -0.872856 -0.872871 1011 1012001 0.000387121 1.36801 -0.872182 -0.872871 1012 1013001 0.000385963 1.36536 -0.872727 -0.872871 1013 1014001 0.000384809 1.36579 -0.872667 -0.872871 1014 1015001 0.000383658 1.3632 -0.872871 -0.872871 1015 1016001 0.00038251 1.36117 -0.87276 -0.872871 1016 1017001 0.000381366 1.36095 -0.872733 -0.872871 1017 1018001 0.000380225 1.3664 -0.872562 -0.872871 1018 1019001 0.000379088 1.36417 -0.87284 -0.872871 1019 1020001 0.000377954 1.36178 -0.872819 -0.872871 1020 1021001 0.000376824 1.36634 -0.872572 -0.872871 1021 1022001 0.000375697 1.36589 -0.87265 -0.872871 1022 1023001 0.000374573 1.36425 -0.872835 -0.872871 1023 1024001 0.000373453 1.36156 -0.8728 -0.872871 1024 1025001 0.000372336 1.36708 -0.87242 -0.872871 1025 1026001 0.000371222 1.3598 -0.872548 -0.872871 1026 1027001 0.000370112 1.36262 -0.872864 -0.872871 1027 1028001 0.000369005 1.36378 -0.872859 -0.872871 1028 1029001 0.000367901 1.36519 -0.872748 -0.872871 1029 1030001 0.0003668 1.36515 -0.872753 -0.872871 1030 1031001 0.000365703 1.3601 -0.872605 -0.872871 1031 1032001 0.00036461 1.36379 -0.872859 -0.872871 1032 1033001 0.000363519 1.36076 -0.872707 -0.872871 1033 1034001 0.000362432 1.36056 -0.872679 -0.872871 1034 1035001 0.000361348 1.36597 -0.872637 -0.872871 1035 1036001 0.000360267 1.3597 -0.87253 -0.872871 1036 1037001 0.000359189 1.36519 -0.872748 -0.872871 1037 1038001 0.000358115 1.36388 -0.872855 -0.872871 1038 1039001 0.000357044 1.3585 -0.872247 -0.872871 1039 1040001 0.000355976 1.35857 -0.872266 -0.872871 1040 1041001 0.000354911 1.36244 -0.872857 -0.872871 1041 1042001 0.00035385 1.36827 -0.872106 -0.872871 1042 1043001 0.000352791 1.36311 -0.872871 -0.872871 1043 1044001 0.000351736 1.3575 -0.871947 -0.872871 1044 1045001 0.000350684 1.36111 -0.872753 -0.872871 1045 1046001 0.000349635 1.35875 -0.872312 -0.872871 1046 1047001 0.000348589 1.36477 -0.872793 -0.872871 1047 1048001 0.000347547 1.36178 -0.872819 -0.872871 1048 1049001 0.000346507 1.36469 -0.872801 -0.872871 1049 1050001 0.000345471 1.36429 -0.872832 -0.872871 1050 1051001 0.000344437 1.36506 -0.872764 -0.872871 1051 1052001 0.000343407 1.36387 -0.872855 -0.872871 1052 1053001 0.00034238 1.36509 -0.87276 -0.872871 1053 1054001 0.000341356 1.36212 -0.872842 -0.872871 1054 1055001 0.000340335 1.3641 -0.872844 -0.872871 1055 1056001 0.000339317 1.36357 -0.872865 -0.872871 1056 1057001 0.000338302 1.36211 -0.872841 -0.872871 1057 1058001 0.00033729 1.36118 -0.87276 -0.872871 1058 1059001 0.000336281 1.36303 -0.872871 -0.872871 1059 1060001 0.000335276 1.36268 -0.872865 -0.872871 1060 1061001 0.000334273 1.36276 -0.872867 -0.872871 1061 1062001 0.000333273 1.36395 -0.872852 -0.872871 1062 1063001 0.000332276 1.36104 -0.872744 -0.872871 1063 1064001 0.000331282 1.36124 -0.872768 -0.872871 1064 1065001 0.000330291 1.36263 -0.872864 -0.872871 1065 1066001 0.000329303 1.36263 -0.872864 -0.872871 1066 1067001 0.000328319 1.36364 -0.872864 -0.872871 1067 1068001 0.000327337 1.36353 -0.872867 -0.872871 1068 1069001 0.000326357 1.36353 -0.872867 -0.872871 1069 1070001 0.000325381 1.36344 -0.872868 -0.872871 1070 1071001 0.000324408 1.36344 -0.872868 -0.872871 1071 1072001 0.000323438 1.36076 -0.872708 -0.872871 1072 1073001 0.00032247 1.36184 -0.872823 -0.872871 1073 1074001 0.000321506 1.36232 -0.872852 -0.872871 1074 1075001 0.000320544 1.35925 -0.872434 -0.872871 1075 1076001 0.000319585 1.3654 -0.872721 -0.872871 1076 1077001 0.00031863 1.36145 -0.872789 -0.872871 1077 1078001 0.000317677 1.36502 -0.872767 -0.872871 1078 1079001 0.000316726 1.3666 -0.872523 -0.872871 1079 1080001 0.000315779 1.36509 -0.872759 -0.872871 1080 1081001 0.000314835 1.36518 -0.87275 -0.872871 1081 1082001 0.000313893 1.35987 -0.872561 -0.872871 1082 1083001 0.000312954 1.36265 -0.872865 -0.872871 1083 1084001 0.000312018 1.36598 -0.872636 -0.872871 1084 1085001 0.000311085 1.36197 -0.872832 -0.872871 1085 1086001 0.000310154 1.36223 -0.872848 -0.872871 1086 1087001 0.000309227 1.36379 -0.872858 -0.872871 1087 1088001 0.000308302 1.36122 -0.872765 -0.872871 1088 1089001 0.000307379 1.36289 -0.87287 -0.872871 1089 1090001 0.00030646 1.36249 -0.872859 -0.872871 1090 1091001 0.000305543 1.3649 -0.87278 -0.872871 1091 1092001 0.00030463 1.36049 -0.872668 -0.872871 1092 1093001 0.000303718 1.36541 -0.872721 -0.872871 1093 1094001 0.00030281 1.35666 -0.871652 -0.872871 1094 1095001 0.000301904 1.36574 -0.872674 -0.872871 1095 1096001 0.000301001 1.3633 -0.87287 -0.872871 1096 1097001 0.000300101 1.3633 -0.87287 -0.872871 1097 1098001 0.000299203 1.3657 -0.87268 -0.872871 1098 1099001 0.000298308 1.36507 -0.872762 -0.872871 1099 1100001 0.000297416 1.36082 -0.872716 -0.872871 1100 1101001 0.000296527 1.36307 -0.872871 -0.872871 1101 1102001 0.00029564 1.36425 -0.872835 -0.872871 1102 1103001 0.000294755 1.36425 -0.872835 -0.872871 1103 1104001 0.000293874 1.36421 -0.872838 -0.872871 1104 1105001 0.000292995 1.36228 -0.87285 -0.872871 1105 1106001 0.000292118 1.36313 -0.872871 -0.872871 1106 1107001 0.000291245 1.36313 -0.872871 -0.872871 1107 1108001 0.000290374 1.36321 -0.872871 -0.872871 1108 1109001 0.000289505 1.36226 -0.872849 -0.872871 1109 1110001 0.000288639 1.36669 -0.872505 -0.872871 1110 1111001 0.000287776 1.36429 -0.872832 -0.872871 1111 1112001 0.000286915 1.36429 -0.872832 -0.872871 1112 1113001 0.000286057 1.36187 -0.872825 -0.872871 1113 1114001 0.000285201 1.36514 -0.872754 -0.872871 1114 1115001 0.000284348 1.36682 -0.872476 -0.872871 1115 1116001 0.000283498 1.3648 -0.872791 -0.872871 1116 1117001 0.00028265 1.36239 -0.872855 -0.872871 1117 1118001 0.000281804 1.36613 -0.87261 -0.872871 1118 1119001 0.000280962 1.36275 -0.872867 -0.872871 1119 1120001 0.000280121 1.35968 -0.872526 -0.872871 1120 1121001 0.000279283 1.36144 -0.872789 -0.872871 1121 1122001 0.000278448 1.36665 -0.872511 -0.872871 1122 1123001 0.000277615 1.362 -0.872834 -0.872871 1123 1124001 0.000276785 1.36083 -0.872717 -0.872871 1124 1125001 0.000275957 1.36152 -0.872796 -0.872871 1125 1126001 0.000275132 1.36342 -0.872869 -0.872871 1126 1127001 0.000274309 1.36342 -0.872869 -0.872871 1127 1128001 0.000273488 1.36302 -0.872871 -0.872871 1128 1129001 0.00027267 1.36542 -0.872719 -0.872871 1129 1130001 0.000271855 1.36216 -0.872844 -0.872871 1130 1131001 0.000271041 1.36054 -0.872677 -0.872871 1131 1132001 0.000270231 1.36195 -0.87283 -0.872871 1132 1133001 0.000269422 1.36134 -0.872778 -0.872871 1133 1134001 0.000268617 1.36384 -0.872857 -0.872871 1134 1135001 0.000267813 1.36486 -0.872785 -0.872871 1135 1136001 0.000267012 1.36064 -0.872691 -0.872871 1136 1137001 0.000266214 1.36517 -0.87275 -0.872871 1137 1138001 0.000265417 1.36247 -0.872858 -0.872871 1138 1139001 0.000264623 1.36396 -0.872851 -0.872871 1139 1140001 0.000263832 1.36327 -0.872871 -0.872871 1140 1141001 0.000263043 1.36402 -0.872848 -0.872871 1141 1142001 0.000262256 1.36091 -0.872729 -0.872871 1142 1143001 0.000261472 1.36273 -0.872867 -0.872871 1143 1144001 0.00026069 1.36598 -0.872636 -0.872871 1144 1145001 0.00025991 1.36567 -0.872683 -0.872871 1145 1146001 0.000259132 1.36193 -0.872829 -0.872871 1146 1147001 0.000258357 1.36305 -0.872871 -0.872871 1147 1148001 0.000257585 1.36212 -0.872842 -0.872871 1148 1149001 0.000256814 1.36845 -0.872051 -0.872871 1149 1150001 0.000256046 1.363 -0.872871 -0.872871 1150 1151001 0.00025528 1.36597 -0.872638 -0.872871 1151 1152001 0.000254517 1.36242 -0.872857 -0.872871 1152 1153001 0.000253755 1.36525 -0.872741 -0.872871 1153 1154001 0.000252996 1.36314 -0.872871 -0.872871 1154 1155001 0.00025224 1.36199 -0.872834 -0.872871 1155 1156001 0.000251485 1.36559 -0.872696 -0.872871 1156 1157001 0.000250733 1.35875 -0.872312 -0.872871 1157 1158001 0.000249983 1.3637 -0.872862 -0.872871 1158 1159001 0.000249235 1.36209 -0.87284 -0.872871 1159 1160001 0.00024849 1.36342 -0.872869 -0.872871 1160 1161001 0.000247747 1.36327 -0.872871 -0.872871 1161 1162001 0.000247006 1.36327 -0.872871 -0.872871 1162 1163001 0.000246267 1.36413 -0.872842 -0.872871 1163 1164001 0.00024553 1.36413 -0.872842 -0.872871 1164 1165001 0.000244796 1.36066 -0.872693 -0.872871 1165 1166001 0.000244064 1.36152 -0.872796 -0.872871 1166 1167001 0.000243334 1.36421 -0.872838 -0.872871 1167 1168001 0.000242606 1.36114 -0.872756 -0.872871 1168 1169001 0.00024188 1.36162 -0.872805 -0.872871 1169 1170001 0.000241157 1.3643 -0.872832 -0.872871 1170 1171001 0.000240435 1.36674 -0.872493 -0.872871 1171 1172001 0.000239716 1.36533 -0.872731 -0.872871 1172 1173001 0.000238999 1.36003 -0.872591 -0.872871 1173 1174001 0.000238284 1.364 -0.872849 -0.872871 1174 1175001 0.000237572 1.36194 -0.87283 -0.872871 1175 1176001 0.000236861 1.36088 -0.872724 -0.872871 1176 1177001 0.000236153 1.36086 -0.872721 -0.872871 1177 1178001 0.000235446 1.36304 -0.872871 -0.872871 1178 1179001 0.000234742 1.36291 -0.87287 -0.872871 1179 1180001 0.00023404 1.36018 -0.872617 -0.872871 1180 1181001 0.00023334 1.36241 -0.872856 -0.872871 1181 1182001 0.000232642 1.36353 -0.872867 -0.872871 1182 1183001 0.000231946 1.36371 -0.872862 -0.872871 1183 1184001 0.000231252 1.36204 -0.872837 -0.872871 1184 1185001 0.000230561 1.36075 -0.872706 -0.872871 1185 1186001 0.000229871 1.36376 -0.87286 -0.872871 1186 1187001 0.000229184 1.36404 -0.872847 -0.872871 1187 1188001 0.000228498 1.36574 -0.872673 -0.872871 1188 1189001 0.000227815 1.36355 -0.872866 -0.872871 1189 1190001 0.000227133 1.36263 -0.872864 -0.872871 1190 1191001 0.000226454 1.36204 -0.872837 -0.872871 1191 1192001 0.000225777 1.36124 -0.872767 -0.872871 1192 1193001 0.000225101 1.36353 -0.872867 -0.872871 1193 1194001 0.000224428 1.36287 -0.872869 -0.872871 1194 1195001 0.000223757 1.36312 -0.872871 -0.872871 1195 1196001 0.000223087 1.36312 -0.872871 -0.872871 1196 1197001 0.00022242 1.36327 -0.872871 -0.872871 1197 1198001 0.000221755 1.35818 -0.872157 -0.872871 1198 1199001 0.000221092 1.36099 -0.872738 -0.872871 1199 1200001 0.00022043 1.36115 -0.872757 -0.872871 1200 1201001 0.000219771 1.36272 -0.872866 -0.872871 1201 1202001 0.000219114 1.36362 -0.872864 -0.872871 1202 1203001 0.000218458 1.36236 -0.872854 -0.872871 1203 1204001 0.000217805 1.36236 -0.872854 -0.872871 1204 1205001 0.000217153 1.36277 -0.872868 -0.872871 1205 1206001 0.000216504 1.36343 -0.872869 -0.872871 1206 1207001 0.000215856 1.36177 -0.872817 -0.872871 1207 1208001 0.000215211 1.36386 -0.872856 -0.872871 1208 1209001 0.000214567 1.35774 -0.872027 -0.872871 1209 1210001 0.000213925 1.36105 -0.872746 -0.872871 1210 1211001 0.000213285 1.36053 -0.872674 -0.872871 1211 1212001 0.000212647 1.36532 -0.872732 -0.872871 1212 1213001 0.000212011 1.36071 -0.872701 -0.872871 1213 1214001 0.000211377 1.36262 -0.872864 -0.872871 1214 1215001 0.000210745 1.36305 -0.872871 -0.872871 1215 1216001 0.000210115 1.36039 -0.872653 -0.872871 1216 1217001 0.000209486 1.3639 -0.872854 -0.872871 1217 1218001 0.00020886 1.36313 -0.872871 -0.872871 1218 1219001 0.000208235 1.365 -0.872769 -0.872871 1219 1220001 0.000207612 1.36007 -0.872599 -0.872871 1220 1221001 0.000206991 1.36285 -0.872869 -0.872871 1221 1222001 0.000206372 1.35941 -0.87247 -0.872871 1222 1223001 0.000205755 1.36246 -0.872858 -0.872871 1223 1224001 0.000205139 1.36378 -0.872859 -0.872871 1224 1225001 0.000204526 1.36333 -0.87287 -0.872871 1225 1226001 0.000203914 1.36148 -0.872792 -0.872871 1226 1227001 0.000203304 1.36399 -0.87285 -0.872871 1227 1228001 0.000202696 1.36454 -0.872813 -0.872871 1228 1229001 0.00020209 1.36454 -0.872813 -0.872871 1229 1230001 0.000201485 1.36379 -0.872859 -0.872871 1230 1231001 0.000200883 1.36541 -0.87272 -0.872871 1231 1232001 0.000200282 1.36195 -0.872831 -0.872871 1232 1233001 0.000199683 1.36454 -0.872814 -0.872871 1233 1234001 0.000199085 1.36088 -0.872724 -0.872871 1234 1235001 0.00019849 1.36711 -0.872413 -0.872871 1235 1236001 0.000197896 1.36318 -0.872871 -0.872871 1236 1237001 0.000197304 1.36106 -0.872747 -0.872871 1237 1238001 0.000196714 1.36243 -0.872857 -0.872871 1238 1239001 0.000196126 1.36449 -0.872817 -0.872871 1239 1240001 0.000195539 1.36371 -0.872862 -0.872871 1240 1241001 0.000194954 1.36435 -0.872828 -0.872871 1241 1242001 0.000194371 1.36108 -0.872749 -0.872871 1242 1243001 0.00019379 1.3638 -0.872858 -0.872871 1243 1244001 0.00019321 1.3638 -0.872858 -0.872871 1244 1245001 0.000192632 1.36265 -0.872865 -0.872871 1245 1246001 0.000192056 1.36265 -0.872865 -0.872871 1246 1247001 0.000191482 1.36129 -0.872773 -0.872871 1247 1248001 0.000190909 1.36326 -0.872871 -0.872871 1248 1249001 0.000190338 1.36251 -0.87286 -0.872871 1249 1250001 0.000189769 1.36188 -0.872826 -0.872871 1250 1251001 0.000189201 1.36573 -0.872675 -0.872871 1251 1252001 0.000188635 1.36535 -0.872728 -0.872871 1252 1253001 0.000188071 1.36517 -0.872751 -0.872871 1253 1254001 0.000187508 1.35986 -0.872561 -0.872871 1254 1255001 0.000186948 1.36587 -0.872654 -0.872871 1255 1256001 0.000186388 1.36403 -0.872848 -0.872871 1256 1257001 0.000185831 1.36395 -0.872852 -0.872871 1257 1258001 0.000185275 1.36394 -0.872852 -0.872871 1258 1259001 0.000184721 1.36436 -0.872827 -0.872871 1259 1260001 0.000184168 1.36185 -0.872824 -0.872871 1260 1261001 0.000183618 1.36533 -0.872731 -0.872871 1261 1262001 0.000183068 1.3601 -0.872605 -0.872871 1262 1263001 0.000182521 1.36157 -0.8728 -0.872871 1263 1264001 0.000181975 1.36622 -0.872594 -0.872871 1264 1265001 0.000181431 1.36129 -0.872773 -0.872871 1265 1266001 0.000180888 1.36437 -0.872826 -0.872871 1266 1267001 0.000180347 1.36559 -0.872695 -0.872871 1267 1268001 0.000179808 1.36277 -0.872868 -0.872871 1268 1269001 0.00017927 1.3639 -0.872854 -0.872871 1269 1270001 0.000178734 1.36488 -0.872782 -0.872871 1270 1271001 0.000178199 1.36525 -0.872741 -0.872871 1271 1272001 0.000177666 1.36439 -0.872825 -0.872871 1272 1273001 0.000177135 1.36046 -0.872663 -0.872871 1273 1274001 0.000176605 1.36604 -0.872626 -0.872871 1274 1275001 0.000176076 1.36069 -0.872699 -0.872871 1275 1276001 0.00017555 1.36593 -0.872645 -0.872871 1276 1277001 0.000175025 1.36241 -0.872856 -0.872871 1277 1278001 0.000174501 1.36433 -0.87283 -0.872871 1278 1279001 0.000173979 1.36277 -0.872867 -0.872871 1279 1280001 0.000173459 1.36141 -0.872786 -0.872871 1280 1281001 0.00017294 1.36141 -0.872786 -0.872871 1281 1282001 0.000172423 1.36196 -0.872832 -0.872871 1282 1283001 0.000171907 1.36385 -0.872856 -0.872871 1283 1284001 0.000171393 1.36543 -0.872718 -0.872871 1284 1285001 0.00017088 1.36273 -0.872867 -0.872871 1285 1286001 0.000170369 1.36432 -0.87283 -0.872871 1286 1287001 0.00016986 1.36313 -0.872871 -0.872871 1287 1288001 0.000169352 1.36313 -0.872871 -0.872871 1288 1289001 0.000168845 1.36381 -0.872858 -0.872871 1289 1290001 0.00016834 1.36428 -0.872833 -0.872871 1290 1291001 0.000167836 1.36108 -0.872749 -0.872871 1291 1292001 0.000167334 1.36157 -0.872801 -0.872871 1292 1293001 0.000166834 1.36326 -0.872871 -0.872871 1293 1294001 0.000166335 1.36184 -0.872823 -0.872871 1294 1295001 0.000165837 1.36134 -0.872778 -0.872871 1295 1296001 0.000165341 1.3613 -0.872773 -0.872871 1296 1297001 0.000164847 1.36622 -0.872594 -0.872871 1297 1298001 0.000164354 1.36601 -0.872631 -0.872871 1298 1299001 0.000163862 1.36472 -0.872798 -0.872871 1299 1300001 0.000163372 1.36451 -0.872816 -0.872871 1300 1301001 0.000162883 1.36274 -0.872867 -0.872871 1301 1302001 0.000162396 1.36295 -0.87287 -0.872871 1302 1303001 0.000161911 1.36295 -0.87287 -0.872871 1303 1304001 0.000161426 1.36295 -0.87287 -0.872871 1304 1305001 0.000160943 1.36334 -0.87287 -0.872871 1305 1306001 0.000160462 1.36047 -0.872665 -0.872871 1306 1307001 0.000159982 1.36395 -0.872852 -0.872871 1307 1308001 0.000159504 1.36443 -0.872822 -0.872871 1308 1309001 0.000159027 1.36019 -0.87262 -0.872871 1309 1310001 0.000158551 1.36581 -0.872662 -0.872871 1310 1311001 0.000158077 1.36156 -0.8728 -0.872871 1311 1312001 0.000157604 1.36375 -0.87286 -0.872871 1312 1313001 0.000157132 1.36249 -0.872859 -0.872871 1313 1314001 0.000156662 1.36183 -0.872822 -0.872871 1314 1315001 0.000156194 1.36183 -0.872822 -0.872871 1315 1316001 0.000155727 1.36316 -0.872871 -0.872871 1316 1317001 0.000155261 1.36551 -0.872707 -0.872871 1317 1318001 0.000154797 1.36077 -0.872709 -0.872871 1318 1319001 0.000154334 1.36087 -0.872722 -0.872871 1319 1320001 0.000153872 1.3611 -0.872751 -0.872871 1320 1321001 0.000153412 1.36292 -0.87287 -0.872871 1321 1322001 0.000152953 1.36482 -0.872788 -0.872871 1322 1323001 0.000152495 1.36422 -0.872837 -0.872871 1323 1324001 0.000152039 1.36306 -0.872871 -0.872871 1324 1325001 0.000151584 1.36082 -0.872716 -0.872871 1325 1326001 0.000151131 1.36112 -0.872754 -0.872871 1326 1327001 0.000150679 1.3655 -0.872708 -0.872871 1327 1328001 0.000150228 1.36332 -0.87287 -0.872871 1328 1329001 0.000149779 1.36193 -0.872829 -0.872871 1329 1330001 0.000149331 1.36357 -0.872866 -0.872871 1330 1331001 0.000148884 1.36316 -0.872871 -0.872871 1331 1332001 0.000148439 1.36316 -0.872871 -0.872871 1332 1333001 0.000147995 1.36585 -0.872657 -0.872871 1333 1334001 0.000147552 1.36395 -0.872852 -0.872871 1334 1335001 0.000147111 1.3645 -0.872817 -0.872871 1335 1336001 0.000146671 1.3643 -0.872832 -0.872871 1336 1337001 0.000146232 1.3643 -0.872832 -0.872871 1337 1338001 0.000145795 1.36099 -0.872738 -0.872871 1338 1339001 0.000145359 1.36385 -0.872856 -0.872871 1339 1340001 0.000144924 1.36648 -0.872545 -0.872871 1340 1341001 0.000144491 1.3633 -0.87287 -0.872871 1341 1342001 0.000144058 1.36315 -0.872871 -0.872871 1342 1343001 0.000143628 1.36289 -0.87287 -0.872871 1343 1344001 0.000143198 1.36289 -0.87287 -0.872871 1344 1345001 0.00014277 1.36306 -0.872871 -0.872871 1345 1346001 0.000142343 1.36054 -0.872676 -0.872871 1346 1347001 0.000141917 1.36207 -0.872838 -0.872871 1347 1348001 0.000141492 1.36325 -0.872871 -0.872871 1348 1349001 0.000141069 1.36319 -0.872871 -0.872871 1349 1350001 0.000140647 1.36417 -0.87284 -0.872871 1350 1351001 0.000140227 1.36038 -0.872652 -0.872871 1351 1352001 0.000139807 1.36471 -0.872799 -0.872871 1352 1353001 0.000139389 1.36525 -0.872741 -0.872871 1353 1354001 0.000138972 1.36271 -0.872866 -0.872871 1354 1355001 0.000138556 1.36357 -0.872865 -0.872871 1355 1356001 0.000138142 1.36357 -0.872865 -0.872871 1356 1357001 0.000137729 1.36207 -0.872839 -0.872871 1357 1358001 0.000137317 1.36483 -0.872787 -0.872871 1358 1359001 0.000136906 1.36332 -0.87287 -0.872871 1359 1360001 0.000136497 1.3629 -0.87287 -0.872871 1360 1361001 0.000136088 1.36303 -0.872871 -0.872871 1361 1362001 0.000135681 1.36463 -0.872806 -0.872871 1362 1363001 0.000135276 1.36443 -0.872822 -0.872871 1363 1364001 0.000134871 1.36249 -0.872859 -0.872871 1364 1365001 0.000134468 1.36518 -0.872749 -0.872871 1365 1366001 0.000134065 1.36495 -0.872775 -0.872871 1366 1367001 0.000133664 1.36495 -0.872775 -0.872871 1367 1368001 0.000133265 1.36077 -0.872709 -0.872871 1368 1369001 0.000132866 1.36077 -0.872709 -0.872871 1369 1370001 0.000132469 1.35985 -0.872558 -0.872871 1370 1371001 0.000132072 1.36582 -0.872662 -0.872871 1371 1372001 0.000131677 1.36433 -0.87283 -0.872871 1372 1373001 0.000131283 1.36097 -0.872736 -0.872871 1373 1374001 0.000130891 1.36239 -0.872855 -0.872871 1374 1375001 0.000130499 1.36405 -0.872847 -0.872871 1375 1376001 0.000130109 1.36405 -0.872847 -0.872871 1376 1377001 0.00012972 1.36392 -0.872853 -0.872871 1377 1378001 0.000129332 1.36751 -0.872314 -0.872871 1378 1379001 0.000128945 1.3611 -0.872751 -0.872871 1379 1380001 0.000128559 1.36289 -0.87287 -0.872871 1380 1381001 0.000128175 1.36344 -0.872868 -0.872871 1381 1382001 0.000127791 1.36387 -0.872855 -0.872871 1382 1383001 0.000127409 1.36198 -0.872833 -0.872871 1383 1384001 0.000127028 1.36384 -0.872857 -0.872871 1384 1385001 0.000126648 1.36381 -0.872858 -0.872871 1385 1386001 0.000126269 1.36215 -0.872843 -0.872871 1386 1387001 0.000125892 1.36341 -0.872869 -0.872871 1387 1388001 0.000125515 1.36191 -0.872828 -0.872871 1388 1389001 0.00012514 1.36308 -0.872871 -0.872871 1389 1390001 0.000124765 1.36397 -0.872851 -0.872871 1390 1391001 0.000124392 1.3629 -0.87287 -0.872871 1391 1392001 0.00012402 1.36201 -0.872835 -0.872871 1392 1393001 0.000123649 1.36683 -0.872475 -0.872871 1393 1394001 0.000123279 1.36143 -0.872787 -0.872871 1394 1395001 0.000122911 1.36307 -0.872871 -0.872871 1395 1396001 0.000122543 1.36316 -0.872871 -0.872871 1396 1397001 0.000122176 1.36449 -0.872818 -0.872871 1397 1398001 0.000121811 1.36427 -0.872834 -0.872871 1398 1399001 0.000121447 1.36353 -0.872867 -0.872871 1399 1400001 0.000121083 1.36355 -0.872866 -0.872871 1400 1401001 0.000120721 1.36205 -0.872837 -0.872871 1401 1402001 0.00012036 1.36638 -0.872565 -0.872871 1402 1403001 0.00012 1.36348 -0.872868 -0.872871 1403 1404001 0.000119641 1.36397 -0.872851 -0.872871 1404 1405001 0.000119283 1.36674 -0.872494 -0.872871 1405 1406001 0.000118927 1.36498 -0.872772 -0.872871 1406 1407001 0.000118571 1.36344 -0.872868 -0.872871 1407 1408001 0.000118216 1.36435 -0.872828 -0.872871 1408 1409001 0.000117863 1.36231 -0.872852 -0.872871 1409 1410001 0.00011751 1.36336 -0.87287 -0.872871 1410 1411001 0.000117159 1.36315 -0.872871 -0.872871 1411 1412001 0.000116808 1.36342 -0.872869 -0.872871 1412 1413001 0.000116459 1.36342 -0.872869 -0.872871 1413 1414001 0.000116111 1.3616 -0.872803 -0.872871 1414 1415001 0.000115763 1.35987 -0.872562 -0.872871 1415 1416001 0.000115417 1.36143 -0.872787 -0.872871 1416 1417001 0.000115072 1.36143 -0.872787 -0.872871 1417 1418001 0.000114728 1.36502 -0.872768 -0.872871 1418 1419001 0.000114384 1.36475 -0.872795 -0.872871 1419 1420001 0.000114042 1.36312 -0.872871 -0.872871 1420 1421001 0.000113701 1.36321 -0.872871 -0.872871 1421 1422001 0.000113361 1.36107 -0.872747 -0.872871 1422 1423001 0.000113022 1.36489 -0.872781 -0.872871 1423 1424001 0.000112684 1.36157 -0.872801 -0.872871 1424 1425001 0.000112347 1.36157 -0.872801 -0.872871 1425 1426001 0.000112011 1.36157 -0.872801 -0.872871 1426 1427001 0.000111676 1.36337 -0.87287 -0.872871 1427 1428001 0.000111342 1.36337 -0.87287 -0.872871 1428 1429001 0.000111009 1.36347 -0.872868 -0.872871 1429 1430001 0.000110677 1.36187 -0.872825 -0.872871 1430 1431001 0.000110346 1.36187 -0.872825 -0.872871 1431 1432001 0.000110016 1.36232 -0.872852 -0.872871 1432 1433001 0.000109687 1.36352 -0.872867 -0.872871 1433 1434001 0.000109359 1.3654 -0.872721 -0.872871 1434 1435001 0.000109032 1.36327 -0.872871 -0.872871 1435 1436001 0.000108705 1.36223 -0.872848 -0.872871 1436 1437001 0.00010838 1.36236 -0.872854 -0.872871 1437 1438001 0.000108056 1.36517 -0.872751 -0.872871 1438 1439001 0.000107733 1.36446 -0.87282 -0.872871 1439 1440001 0.000107411 1.36303 -0.872871 -0.872871 1440 1441001 0.000107089 1.36189 -0.872826 -0.872871 1441 1442001 0.000106769 1.36197 -0.872832 -0.872871 1442 1443001 0.00010645 1.36237 -0.872854 -0.872871 1443 1444001 0.000106131 1.36377 -0.872859 -0.872871 1444 1445001 0.000105814 1.36511 -0.872758 -0.872871 1445 1446001 0.000105497 1.36363 -0.872864 -0.872871 1446 1447001 0.000105182 1.36221 -0.872846 -0.872871 1447 1448001 0.000104867 1.36383 -0.872857 -0.872871 1448 1449001 0.000104554 1.36199 -0.872833 -0.872871 1449 1450001 0.000104241 1.36227 -0.87285 -0.872871 1450 1451001 0.000103929 1.36427 -0.872833 -0.872871 1451 1452001 0.000103618 1.36425 -0.872835 -0.872871 1452 1453001 0.000103308 1.3646 -0.872808 -0.872871 1453 1454001 0.000102999 1.35945 -0.872478 -0.872871 1454 1455001 0.000102691 1.36169 -0.872811 -0.872871 1455 1456001 0.000102384 1.36339 -0.872869 -0.872871 1456 1457001 0.000102078 1.36297 -0.87287 -0.872871 1457 1458001 0.000101773 1.36265 -0.872864 -0.872871 1458 1459001 0.000101468 1.36336 -0.87287 -0.872871 1459 1460001 0.000101165 1.36456 -0.872812 -0.872871 1460 1461001 0.000100862 1.36253 -0.872861 -0.872871 1461 1462001 0.00010056 1.36166 -0.872808 -0.872871 1462 1463001 0.00010026 1.36242 -0.872856 -0.872871 1463 1464001 9.99597e-05 1.36165 -0.872808 -0.872871 1464 1465001 9.96607e-05 1.36419 -0.872838 -0.872871 1465 1466001 9.93626e-05 1.36332 -0.87287 -0.872871 1466 1467001 9.90654e-05 1.36213 -0.872842 -0.872871 1467 1468001 9.87691e-05 1.36424 -0.872836 -0.872871 1468 1469001 9.84737e-05 1.36424 -0.872836 -0.872871 1469 1470001 9.81792e-05 1.36368 -0.872863 -0.872871 1470 1471001 9.78855e-05 1.36368 -0.872863 -0.872871 1471 1472001 9.75927e-05 1.36368 -0.872863 -0.872871 1472 1473001 9.73008e-05 1.36339 -0.872869 -0.872871 1473 1474001 9.70098e-05 1.36159 -0.872802 -0.872871 1474 1475001 9.67196e-05 1.36167 -0.872809 -0.872871 1475 1476001 9.64304e-05 1.36167 -0.872809 -0.872871 1476 1477001 9.61419e-05 1.36231 -0.872852 -0.872871 1477 1478001 9.58544e-05 1.36215 -0.872843 -0.872871 1478 1479001 9.55677e-05 1.36291 -0.87287 -0.872871 1479 1480001 9.52818e-05 1.36174 -0.872815 -0.872871 1480 1481001 9.49968e-05 1.36431 -0.872831 -0.872871 1481 1482001 9.47127e-05 1.36368 -0.872862 -0.872871 1482 1483001 9.44294e-05 1.36327 -0.872871 -0.872871 1483 1484001 9.4147e-05 1.36119 -0.872762 -0.872871 1484 1485001 9.38654e-05 1.36149 -0.872793 -0.872871 1485 1486001 9.35846e-05 1.36354 -0.872866 -0.872871 1486 1487001 9.33047e-05 1.36354 -0.872866 -0.872871 1487 1488001 9.30256e-05 1.36395 -0.872852 -0.872871 1488 1489001 9.27474e-05 1.36256 -0.872862 -0.872871 1489 1490001 9.247e-05 1.36502 -0.872768 -0.872871 1490 1491001 9.21934e-05 1.36081 -0.872714 -0.872871 1491 1492001 9.19176e-05 1.36533 -0.872731 -0.872871 1492 1493001 9.16427e-05 1.36374 -0.872861 -0.872871 1493 1494001 9.13686e-05 1.36354 -0.872866 -0.872871 1494 1495001 9.10953e-05 1.36354 -0.872866 -0.872871 1495 1496001 9.08228e-05 1.36238 -0.872855 -0.872871 1496 1497001 9.05512e-05 1.36416 -0.872841 -0.872871 1497 1498001 9.02804e-05 1.36416 -0.872841 -0.872871 1498 1499001 9.00103e-05 1.3644 -0.872825 -0.872871 1499 1500001 8.97411e-05 1.36689 -0.872461 -0.872871 1500 1501001 8.94727e-05 1.36263 -0.872864 -0.872871 1501 1502001 8.92051e-05 1.36387 -0.872855 -0.872871 1502 1503001 8.89383e-05 1.36387 -0.872855 -0.872871 1503 1504001 8.86722e-05 1.3626 -0.872863 -0.872871 1504 1505001 8.8407e-05 1.3626 -0.872863 -0.872871 1505 1506001 8.81426e-05 1.36317 -0.872871 -0.872871 1506 1507001 8.78789e-05 1.36331 -0.87287 -0.872871 1507 1508001 8.76161e-05 1.36331 -0.87287 -0.872871 1508 1509001 8.7354e-05 1.3635 -0.872867 -0.872871 1509 1510001 8.70928e-05 1.36244 -0.872857 -0.872871 1510 1511001 8.68323e-05 1.36353 -0.872867 -0.872871 1511 1512001 8.65725e-05 1.36407 -0.872845 -0.872871 1512 1513001 8.63136e-05 1.36461 -0.872808 -0.872871 1513 1514001 8.60554e-05 1.36553 -0.872705 -0.872871 1514 1515001 8.5798e-05 1.36138 -0.872783 -0.872871 1515 1516001 8.55414e-05 1.36443 -0.872822 -0.872871 1516 1517001 8.52856e-05 1.36273 -0.872867 -0.872871 1517 1518001 8.50305e-05 1.36376 -0.87286 -0.872871 1518 1519001 8.47761e-05 1.36346 -0.872868 -0.872871 1519 1520001 8.45226e-05 1.36404 -0.872847 -0.872871 1520 1521001 8.42698e-05 1.36374 -0.872861 -0.872871 1521 1522001 8.40177e-05 1.36313 -0.872871 -0.872871 1522 1523001 8.37664e-05 1.36437 -0.872827 -0.872871 1523 1524001 8.35159e-05 1.36437 -0.872827 -0.872871 1524 1525001 8.32661e-05 1.36232 -0.872852 -0.872871 1525 1526001 8.3017e-05 1.36437 -0.872826 -0.872871 1526 1527001 8.27687e-05 1.36254 -0.872861 -0.872871 1527 1528001 8.25211e-05 1.36264 -0.872864 -0.872871 1528 1529001 8.22743e-05 1.36377 -0.872859 -0.872871 1529 1530001 8.20282e-05 1.36143 -0.872787 -0.872871 1530 1531001 8.17829e-05 1.36241 -0.872856 -0.872871 1531 1532001 8.15383e-05 1.36552 -0.872706 -0.872871 1532 1533001 8.12944e-05 1.36189 -0.872826 -0.872871 1533 1534001 8.10512e-05 1.36325 -0.872871 -0.872871 1534 1535001 8.08088e-05 1.36337 -0.872869 -0.872871 1535 1536001 8.05671e-05 1.36337 -0.872869 -0.872871 1536 1537001 8.03261e-05 1.36337 -0.872869 -0.872871 1537 1538001 8.00859e-05 1.36414 -0.872842 -0.872871 1538 1539001 7.98463e-05 1.36355 -0.872866 -0.872871 1539 1540001 7.96075e-05 1.36355 -0.872866 -0.872871 1540 1541001 7.93694e-05 1.36372 -0.872861 -0.872871 1541 1542001 7.9132e-05 1.3621 -0.87284 -0.872871 1542 1543001 7.88953e-05 1.36443 -0.872822 -0.872871 1543 1544001 7.86593e-05 1.36295 -0.87287 -0.872871 1544 1545001 7.84241e-05 1.36128 -0.872772 -0.872871 1545 1546001 7.81895e-05 1.364 -0.872849 -0.872871 1546 1547001 7.79556e-05 1.3649 -0.87278 -0.872871 1547 1548001 7.77225e-05 1.36311 -0.872871 -0.872871 1548 1549001 7.749e-05 1.36095 -0.872733 -0.872871 1549 1550001 7.72582e-05 1.36508 -0.872761 -0.872871 1550 1551001 7.70271e-05 1.36479 -0.872792 -0.872871 1551 1552001 7.67968e-05 1.3613 -0.872774 -0.872871 1552 1553001 7.65671e-05 1.36154 -0.872798 -0.872871 1553 1554001 7.6338e-05 1.36432 -0.87283 -0.872871 1554 1555001 7.61097e-05 1.36244 -0.872857 -0.872871 1555 1556001 7.58821e-05 1.36252 -0.87286 -0.872871 1556 1557001 7.56551e-05 1.36272 -0.872866 -0.872871 1557 1558001 7.54288e-05 1.36272 -0.872866 -0.872871 1558 1559001 7.52032e-05 1.36088 -0.872724 -0.872871 1559 1560001 7.49783e-05 1.36562 -0.872692 -0.872871 1560 1561001 7.4754e-05 1.36259 -0.872863 -0.872871 1561 1562001 7.45304e-05 1.36259 -0.872863 -0.872871 1562 1563001 7.43075e-05 1.36166 -0.872808 -0.872871 1563 1564001 7.40852e-05 1.36219 -0.872845 -0.872871 1564 1565001 7.38636e-05 1.36264 -0.872864 -0.872871 1565 1566001 7.36427e-05 1.36414 -0.872842 -0.872871 1566 1567001 7.34225e-05 1.36185 -0.872824 -0.872871 1567 1568001 7.32028e-05 1.36353 -0.872867 -0.872871 1568 1569001 7.29839e-05 1.36233 -0.872853 -0.872871 1569 1570001 7.27656e-05 1.3626 -0.872863 -0.872871 1570 1571001 7.25479e-05 1.36337 -0.87287 -0.872871 1571 1572001 7.2331e-05 1.36337 -0.87287 -0.872871 1572 1573001 7.21146e-05 1.36227 -0.87285 -0.872871 1573 1574001 7.18989e-05 1.36429 -0.872832 -0.872871 1574 1575001 7.16839e-05 1.36295 -0.87287 -0.872871 1575 1576001 7.14695e-05 1.3617 -0.872812 -0.872871 1576 1577001 7.12557e-05 1.3617 -0.872812 -0.872871 1577 1578001 7.10426e-05 1.36253 -0.872861 -0.872871 1578 1579001 7.08301e-05 1.36317 -0.872871 -0.872871 1579 1580001 7.06182e-05 1.36317 -0.872871 -0.872871 1580 1581001 7.0407e-05 1.36317 -0.872871 -0.872871 1581 1582001 7.01964e-05 1.36508 -0.872761 -0.872871 1582 1583001 6.99864e-05 1.36508 -0.872761 -0.872871 1583 1584001 6.97771e-05 1.36511 -0.872757 -0.872871 1584 1585001 6.95684e-05 1.36413 -0.872842 -0.872871 1585 1586001 6.93603e-05 1.36323 -0.872871 -0.872871 1586 1587001 6.91529e-05 1.36205 -0.872838 -0.872871 1587 1588001 6.8946e-05 1.3646 -0.872809 -0.872871 1588 1589001 6.87398e-05 1.36411 -0.872843 -0.872871 1589 1590001 6.85342e-05 1.36117 -0.872759 -0.872871 1590 1591001 6.83292e-05 1.36388 -0.872855 -0.872871 1591 1592001 6.81248e-05 1.36388 -0.872855 -0.872871 1592 1593001 6.79211e-05 1.36109 -0.87275 -0.872871 1593 1594001 6.77179e-05 1.36221 -0.872847 -0.872871 1594 1595001 6.75154e-05 1.36394 -0.872852 -0.872871 1595 1596001 6.73134e-05 1.3643 -0.872832 -0.872871 1596 1597001 6.71121e-05 1.36331 -0.87287 -0.872871 1597 1598001 6.69114e-05 1.36299 -0.872871 -0.872871 1598 1599001 6.67112e-05 1.36357 -0.872866 -0.872871 1599 1600001 6.65117e-05 1.36118 -0.872761 -0.872871 1600 1601001 6.63128e-05 1.36215 -0.872843 -0.872871 1601 1602001 6.61144e-05 1.36454 -0.872813 -0.872871 1602 1603001 6.59167e-05 1.36454 -0.872813 -0.872871 1603 1604001 6.57195e-05 1.36327 -0.872871 -0.872871 1604 1605001 6.55229e-05 1.36276 -0.872867 -0.872871 1605 1606001 6.5327e-05 1.36437 -0.872827 -0.872871 1606 1607001 6.51316e-05 1.36351 -0.872867 -0.872871 1607 1608001 6.49368e-05 1.3652 -0.872746 -0.872871 1608 1609001 6.47425e-05 1.36478 -0.872793 -0.872871 1609 1610001 6.45489e-05 1.36478 -0.872793 -0.872871 1610 1611001 6.43558e-05 1.36363 -0.872864 -0.872871 1611 1612001 6.41633e-05 1.36478 -0.872792 -0.872871 1612 1613001 6.39714e-05 1.36159 -0.872803 -0.872871 1613 1614001 6.37801e-05 1.36422 -0.872837 -0.872871 1614 1615001 6.35893e-05 1.36446 -0.87282 -0.872871 1615 1616001 6.33991e-05 1.36227 -0.87285 -0.872871 1616 1617001 6.32095e-05 1.3645 -0.872817 -0.872871 1617 1618001 6.30204e-05 1.36347 -0.872868 -0.872871 1618 1619001 6.28319e-05 1.36263 -0.872864 -0.872871 1619 1620001 6.2644e-05 1.36142 -0.872787 -0.872871 1620 1621001 6.24566e-05 1.36507 -0.872762 -0.872871 1621 1622001 6.22698e-05 1.36191 -0.872828 -0.872871 1622 1623001 6.20836e-05 1.36178 -0.872819 -0.872871 1623 1624001 6.18979e-05 1.36178 -0.872819 -0.872871 1624 1625001 6.17127e-05 1.36176 -0.872817 -0.872871 1625 1626001 6.15281e-05 1.36306 -0.872871 -0.872871 1626 1627001 6.13441e-05 1.36405 -0.872847 -0.872871 1627 1628001 6.11606e-05 1.36405 -0.872847 -0.872871 1628 1629001 6.09777e-05 1.36325 -0.872871 -0.872871 1629 1630001 6.07953e-05 1.36238 -0.872855 -0.872871 1630 1631001 6.06135e-05 1.36382 -0.872857 -0.872871 1631 1632001 6.04322e-05 1.36066 -0.872694 -0.872871 1632 1633001 6.02514e-05 1.36505 -0.872764 -0.872871 1633 1634001 6.00712e-05 1.36302 -0.872871 -0.872871 1634 1635001 5.98915e-05 1.36302 -0.872871 -0.872871 1635 1636001 5.97124e-05 1.36486 -0.872784 -0.872871 1636 1637001 5.95338e-05 1.36253 -0.872861 -0.872871 1637 1638001 5.93557e-05 1.36246 -0.872858 -0.872871 1638 1639001 5.91782e-05 1.36127 -0.872771 -0.872871 1639 1640001 5.90012e-05 1.36127 -0.872771 -0.872871 1640 1641001 5.88247e-05 1.36262 -0.872864 -0.872871 1641 1642001 5.86488e-05 1.36386 -0.872856 -0.872871 1642 1643001 5.84733e-05 1.3639 -0.872854 -0.872871 1643 1644001 5.82985e-05 1.36272 -0.872866 -0.872871 1644 1645001 5.81241e-05 1.36272 -0.872866 -0.872871 1645 1646001 5.79502e-05 1.36253 -0.872861 -0.872871 1646 1647001 5.77769e-05 1.36253 -0.872861 -0.872871 1647 1648001 5.76041e-05 1.36344 -0.872868 -0.872871 1648 1649001 5.74318e-05 1.36348 -0.872868 -0.872871 1649 1650001 5.726e-05 1.36348 -0.872868 -0.872871 1650 1651001 5.70887e-05 1.36327 -0.872871 -0.872871 1651 1652001 5.6918e-05 1.36283 -0.872869 -0.872871 1652 1653001 5.67477e-05 1.36283 -0.872869 -0.872871 1653 1654001 5.6578e-05 1.36395 -0.872852 -0.872871 1654 1655001 5.64088e-05 1.36395 -0.872852 -0.872871 1655 1656001 5.62401e-05 1.36375 -0.87286 -0.872871 1656 1657001 5.60719e-05 1.36375 -0.87286 -0.872871 1657 1658001 5.59041e-05 1.36189 -0.872827 -0.872871 1658 1659001 5.57369e-05 1.36168 -0.87281 -0.872871 1659 1660001 5.55702e-05 1.36105 -0.872746 -0.872871 1660 1661001 5.5404e-05 1.36105 -0.872746 -0.872871 1661 1662001 5.52383e-05 1.36256 -0.872862 -0.872871 1662 1663001 5.50731e-05 1.36298 -0.872871 -0.872871 1663 1664001 5.49083e-05 1.36419 -0.872839 -0.872871 1664 1665001 5.47441e-05 1.36419 -0.872839 -0.872871 1665 1666001 5.45804e-05 1.36348 -0.872868 -0.872871 1666 1667001 5.44171e-05 1.36175 -0.872816 -0.872871 1667 1668001 5.42544e-05 1.36401 -0.872849 -0.872871 1668 1669001 5.40921e-05 1.36186 -0.872824 -0.872871 1669 1670001 5.39303e-05 1.36365 -0.872864 -0.872871 1670 1671001 5.3769e-05 1.36365 -0.872864 -0.872871 1671 1672001 5.36082e-05 1.36231 -0.872852 -0.872871 1672 1673001 5.34478e-05 1.36327 -0.872871 -0.872871 1673 1674001 5.3288e-05 1.36299 -0.872871 -0.872871 1674 1675001 5.31286e-05 1.36269 -0.872866 -0.872871 1675 1676001 5.29697e-05 1.36158 -0.872802 -0.872871 1676 1677001 5.28112e-05 1.36316 -0.872871 -0.872871 1677 1678001 5.26533e-05 1.36292 -0.87287 -0.872871 1678 1679001 5.24958e-05 1.3623 -0.872851 -0.872871 1679 1680001 5.23388e-05 1.36274 -0.872867 -0.872871 1680 1681001 5.21822e-05 1.361 -0.872739 -0.872871 1681 1682001 5.20261e-05 1.3629 -0.87287 -0.872871 1682 1683001 5.18705e-05 1.36335 -0.87287 -0.872871 1683 1684001 5.17154e-05 1.36304 -0.872871 -0.872871 1684 1685001 5.15607e-05 1.36304 -0.872871 -0.872871 1685 1686001 5.14065e-05 1.36304 -0.872871 -0.872871 1686 1687001 5.12527e-05 1.36319 -0.872871 -0.872871 1687 1688001 5.10994e-05 1.3634 -0.872869 -0.872871 1688 1689001 5.09466e-05 1.36572 -0.872677 -0.872871 1689 1690001 5.07942e-05 1.3641 -0.872844 -0.872871 1690 1691001 5.06423e-05 1.36262 -0.872864 -0.872871 1691 1692001 5.04908e-05 1.362 -0.872834 -0.872871 1692 1693001 5.03398e-05 1.362 -0.872834 -0.872871 1693 1694001 5.01892e-05 1.36451 -0.872816 -0.872871 1694 1695001 5.00391e-05 1.36458 -0.87281 -0.872871 1695 1696001 4.98894e-05 1.36206 -0.872838 -0.872871 1696 1697001 4.97402e-05 1.36201 -0.872835 -0.872871 1697 1698001 4.95914e-05 1.36201 -0.872835 -0.872871 1698 1699001 4.94431e-05 1.36201 -0.872835 -0.872871 1699 1700001 4.92952e-05 1.36201 -0.872835 -0.872871 1700 1701001 4.91478e-05 1.36251 -0.87286 -0.872871 1701 1702001 4.90008e-05 1.3634 -0.872869 -0.872871 1702 1703001 4.88542e-05 1.36247 -0.872858 -0.872871 1703 1704001 4.87081e-05 1.36469 -0.872801 -0.872871 1704 1705001 4.85624e-05 1.36194 -0.87283 -0.872871 1705 1706001 4.84171e-05 1.36335 -0.87287 -0.872871 1706 1707001 4.82723e-05 1.3626 -0.872863 -0.872871 1707 1708001 4.81279e-05 1.3636 -0.872865 -0.872871 1708 1709001 4.7984e-05 1.36352 -0.872867 -0.872871 1709 1710001 4.78405e-05 1.36368 -0.872863 -0.872871 1710 1711001 4.76974e-05 1.36368 -0.872863 -0.872871 1711 1712001 4.75547e-05 1.36392 -0.872853 -0.872871 1712 1713001 4.74125e-05 1.36269 -0.872866 -0.872871 1713 1714001 4.72707e-05 1.36269 -0.872866 -0.872871 1714 1715001 4.71293e-05 1.36339 -0.872869 -0.872871 1715 1716001 4.69883e-05 1.3627 -0.872866 -0.872871 1716 1717001 4.68478e-05 1.36275 -0.872867 -0.872871 1717 1718001 4.67076e-05 1.36303 -0.872871 -0.872871 1718 1719001 4.65679e-05 1.36517 -0.872751 -0.872871 1719 1720001 4.64287e-05 1.36192 -0.872828 -0.872871 1720 1721001 4.62898e-05 1.3632 -0.872871 -0.872871 1721 1722001 4.61513e-05 1.36169 -0.872811 -0.872871 1722 1723001 4.60133e-05 1.36366 -0.872863 -0.872871 1723 1724001 4.58757e-05 1.36353 -0.872867 -0.872871 1724 1725001 4.57385e-05 1.36326 -0.872871 -0.872871 1725 1726001 4.56016e-05 1.36326 -0.872871 -0.872871 1726 1727001 4.54653e-05 1.3627 -0.872866 -0.872871 1727 1728001 4.53293e-05 1.36245 -0.872858 -0.872871 1728 1729001 4.51937e-05 1.36278 -0.872868 -0.872871 1729 1730001 4.50585e-05 1.36278 -0.872868 -0.872871 1730 1731001 4.49237e-05 1.36278 -0.872868 -0.872871 1731 1732001 4.47894e-05 1.36278 -0.872868 -0.872871 1732 1733001 4.46554e-05 1.36311 -0.872871 -0.872871 1733 1734001 4.45218e-05 1.36374 -0.87286 -0.872871 1734 1735001 4.43887e-05 1.36374 -0.87286 -0.872871 1735 1736001 4.42559e-05 1.36482 -0.872789 -0.872871 1736 1737001 4.41235e-05 1.36324 -0.872871 -0.872871 1737 1738001 4.39916e-05 1.36187 -0.872825 -0.872871 1738 1739001 4.386e-05 1.36322 -0.872871 -0.872871 1739 1740001 4.37288e-05 1.36291 -0.87287 -0.872871 1740 1741001 4.3598e-05 1.36215 -0.872843 -0.872871 1741 1742001 4.34676e-05 1.36215 -0.872843 -0.872871 1742 1743001 4.33376e-05 1.36215 -0.872843 -0.872871 1743 1744001 4.3208e-05 1.36209 -0.87284 -0.872871 1744 1745001 4.30787e-05 1.36306 -0.872871 -0.872871 1745 1746001 4.29499e-05 1.36295 -0.87287 -0.872871 1746 1747001 4.28214e-05 1.36295 -0.87287 -0.872871 1747 1748001 4.26933e-05 1.36317 -0.872871 -0.872871 1748 1749001 4.25656e-05 1.36276 -0.872867 -0.872871 1749 1750001 4.24383e-05 1.36276 -0.872867 -0.872871 1750 1751001 4.23114e-05 1.36312 -0.872871 -0.872871 1751 1752001 4.21848e-05 1.36299 -0.872871 -0.872871 1752 1753001 4.20587e-05 1.36355 -0.872866 -0.872871 1753 1754001 4.19329e-05 1.36355 -0.872866 -0.872871 1754 1755001 4.18074e-05 1.36274 -0.872867 -0.872871 1755 1756001 4.16824e-05 1.36211 -0.872841 -0.872871 1756 1757001 4.15577e-05 1.36315 -0.872871 -0.872871 1757 1758001 4.14334e-05 1.3631 -0.872871 -0.872871 1758 1759001 4.13095e-05 1.3631 -0.872871 -0.872871 1759 1760001 4.11859e-05 1.36393 -0.872853 -0.872871 1760 1761001 4.10627e-05 1.36264 -0.872864 -0.872871 1761 1762001 4.09399e-05 1.36296 -0.87287 -0.872871 1762 1763001 4.08175e-05 1.36296 -0.87287 -0.872871 1763 1764001 4.06954e-05 1.36296 -0.87287 -0.872871 1764 1765001 4.05737e-05 1.36353 -0.872866 -0.872871 1765 1766001 4.04523e-05 1.36163 -0.872806 -0.872871 1766 1767001 4.03313e-05 1.36213 -0.872842 -0.872871 1767 1768001 4.02107e-05 1.36216 -0.872844 -0.872871 1768 1769001 4.00904e-05 1.36221 -0.872847 -0.872871 1769 1770001 3.99705e-05 1.36197 -0.872832 -0.872871 1770 1771001 3.98509e-05 1.36197 -0.872832 -0.872871 1771 1772001 3.97317e-05 1.36279 -0.872868 -0.872871 1772 1773001 3.96129e-05 1.36279 -0.872868 -0.872871 1773 1774001 3.94944e-05 1.36382 -0.872858 -0.872871 1774 1775001 3.93763e-05 1.3622 -0.872846 -0.872871 1775 1776001 3.92585e-05 1.363 -0.872871 -0.872871 1776 1777001 3.91411e-05 1.363 -0.872871 -0.872871 1777 1778001 3.9024e-05 1.36098 -0.872737 -0.872871 1778 1779001 3.89073e-05 1.36324 -0.872871 -0.872871 1779 1780001 3.87909e-05 1.36239 -0.872855 -0.872871 1780 1781001 3.86749e-05 1.36239 -0.872855 -0.872871 1781 1782001 3.85592e-05 1.36239 -0.872855 -0.872871 1782 1783001 3.84439e-05 1.36344 -0.872868 -0.872871 1783 1784001 3.83289e-05 1.36394 -0.872852 -0.872871 1784 1785001 3.82143e-05 1.36386 -0.872856 -0.872871 1785 1786001 3.81e-05 1.36386 -0.872856 -0.872871 1786 1787001 3.7986e-05 1.36386 -0.872856 -0.872871 1787 1788001 3.78724e-05 1.36214 -0.872843 -0.872871 1788 1789001 3.77591e-05 1.3631 -0.872871 -0.872871 1789 1790001 3.76462e-05 1.3631 -0.872871 -0.872871 1790 1791001 3.75336e-05 1.36225 -0.872849 -0.872871 1791 1792001 3.74213e-05 1.36225 -0.872849 -0.872871 1792 1793001 3.73094e-05 1.3635 -0.872867 -0.872871 1793 1794001 3.71978e-05 1.36278 -0.872868 -0.872871 1794 1795001 3.70865e-05 1.36359 -0.872865 -0.872871 1795 1796001 3.69756e-05 1.36359 -0.872865 -0.872871 1796 1797001 3.6865e-05 1.36359 -0.872865 -0.872871 1797 1798001 3.67547e-05 1.36302 -0.872871 -0.872871 1798 1799001 3.66448e-05 1.36176 -0.872817 -0.872871 1799 1800001 3.65352e-05 1.36336 -0.87287 -0.872871 1800 1801001 3.64259e-05 1.36313 -0.872871 -0.872871 1801 1802001 3.6317e-05 1.3621 -0.87284 -0.872871 1802 1803001 3.62083e-05 1.36376 -0.87286 -0.872871 1803 1804001 3.61e-05 1.36346 -0.872868 -0.872871 1804 1805001 3.59921e-05 1.36409 -0.872845 -0.872871 1805 1806001 3.58844e-05 1.36209 -0.87284 -0.872871 1806 1807001 3.57771e-05 1.36332 -0.87287 -0.872871 1807 1808001 3.56701e-05 1.36332 -0.87287 -0.872871 1808 1809001 3.55634e-05 1.3637 -0.872862 -0.872871 1809 1810001 3.5457e-05 1.36253 -0.872861 -0.872871 1810 1811001 3.5351e-05 1.36253 -0.872861 -0.872871 1811 1812001 3.52452e-05 1.36201 -0.872835 -0.872871 1812 1813001 3.51398e-05 1.36285 -0.872869 -0.872871 1813 1814001 3.50347e-05 1.36368 -0.872863 -0.872871 1814 1815001 3.49299e-05 1.36345 -0.872868 -0.872871 1815 1816001 3.48254e-05 1.36261 -0.872863 -0.872871 1816 1817001 3.47213e-05 1.36369 -0.872862 -0.872871 1817 1818001 3.46174e-05 1.36369 -0.872862 -0.872871 1818 1819001 3.45139e-05 1.36445 -0.87282 -0.872871 1819 1820001 3.44106e-05 1.36378 -0.872859 -0.872871 1820 1821001 3.43077e-05 1.36394 -0.872852 -0.872871 1821 1822001 3.42051e-05 1.36394 -0.872852 -0.872871 1822 1823001 3.41028e-05 1.36347 -0.872868 -0.872871 1823 1824001 3.40008e-05 1.36311 -0.872871 -0.872871 1824 1825001 3.38991e-05 1.36246 -0.872858 -0.872871 1825 1826001 3.37977e-05 1.36266 -0.872865 -0.872871 1826 1827001 3.36966e-05 1.3624 -0.872856 -0.872871 1827 1828001 3.35958e-05 1.3624 -0.872856 -0.872871 1828 1829001 3.34953e-05 1.36332 -0.87287 -0.872871 1829 1830001 3.33952e-05 1.36332 -0.87287 -0.872871 1830 1831001 3.32953e-05 1.36332 -0.87287 -0.872871 1831 1832001 3.31957e-05 1.36332 -0.87287 -0.872871 1832 1833001 3.30964e-05 1.36398 -0.87285 -0.872871 1833 1834001 3.29974e-05 1.36359 -0.872865 -0.872871 1834 1835001 3.28987e-05 1.36334 -0.87287 -0.872871 1835 1836001 3.28003e-05 1.36244 -0.872857 -0.872871 1836 1837001 3.27022e-05 1.36358 -0.872865 -0.872871 1837 1838001 3.26044e-05 1.36358 -0.872865 -0.872871 1838 1839001 3.25069e-05 1.36406 -0.872846 -0.872871 1839 1840001 3.24096e-05 1.36267 -0.872865 -0.872871 1840 1841001 3.23127e-05 1.36463 -0.872806 -0.872871 1841 1842001 3.22161e-05 1.36425 -0.872835 -0.872871 1842 1843001 3.21197e-05 1.36411 -0.872843 -0.872871 1843 1844001 3.20236e-05 1.36211 -0.872841 -0.872871 1844 1845001 3.19278e-05 1.36369 -0.872862 -0.872871 1845 1846001 3.18323e-05 1.3632 -0.872871 -0.872871 1846 1847001 3.17371e-05 1.3632 -0.872871 -0.872871 1847 1848001 3.16422e-05 1.36343 -0.872869 -0.872871 1848 1849001 3.15476e-05 1.36185 -0.872823 -0.872871 1849 1850001 3.14532e-05 1.36438 -0.872826 -0.872871 1850 1851001 3.13591e-05 1.36316 -0.872871 -0.872871 1851 1852001 3.12653e-05 1.36359 -0.872865 -0.872871 1852 1853001 3.11718e-05 1.36264 -0.872864 -0.872871 1853 1854001 3.10786e-05 1.36348 -0.872868 -0.872871 1854 1855001 3.09856e-05 1.36348 -0.872868 -0.872871 1855 1856001 3.08929e-05 1.3637 -0.872862 -0.872871 1856 1857001 3.08005e-05 1.36327 -0.872871 -0.872871 1857 1858001 3.07084e-05 1.36426 -0.872834 -0.872871 1858 1859001 3.06166e-05 1.36322 -0.872871 -0.872871 1859 1860001 3.0525e-05 1.3629 -0.87287 -0.872871 1860 1861001 3.04337e-05 1.3629 -0.87287 -0.872871 1861 1862001 3.03427e-05 1.36321 -0.872871 -0.872871 1862 1863001 3.02519e-05 1.36252 -0.87286 -0.872871 1863 1864001 3.01614e-05 1.36339 -0.872869 -0.872871 1864 1865001 3.00712e-05 1.36339 -0.872869 -0.872871 1865 1866001 2.99813e-05 1.36339 -0.872869 -0.872871 1866 1867001 2.98916e-05 1.36339 -0.872869 -0.872871 1867 1868001 2.98022e-05 1.36143 -0.872787 -0.872871 1868 1869001 2.9713e-05 1.36473 -0.872797 -0.872871 1869 1870001 2.96242e-05 1.36473 -0.872797 -0.872871 1870 1871001 2.95356e-05 1.3629 -0.87287 -0.872871 1871 1872001 2.94472e-05 1.36281 -0.872868 -0.872871 1872 1873001 2.93591e-05 1.36313 -0.872871 -0.872871 1873 1874001 2.92713e-05 1.36354 -0.872866 -0.872871 1874 1875001 2.91838e-05 1.36354 -0.872866 -0.872871 1875 1876001 2.90965e-05 1.3639 -0.872854 -0.872871 1876 1877001 2.90095e-05 1.36339 -0.872869 -0.872871 1877 1878001 2.89227e-05 1.36168 -0.87281 -0.872871 1878 1879001 2.88362e-05 1.36312 -0.872871 -0.872871 1879 1880001 2.87499e-05 1.36406 -0.872846 -0.872871 1880 1881001 2.86639e-05 1.3622 -0.872846 -0.872871 1881 1882001 2.85782e-05 1.3622 -0.872846 -0.872871 1882 1883001 2.84927e-05 1.3622 -0.872846 -0.872871 1883 1884001 2.84075e-05 1.36263 -0.872864 -0.872871 1884 1885001 2.83225e-05 1.36356 -0.872866 -0.872871 1885 1886001 2.82378e-05 1.36356 -0.872866 -0.872871 1886 1887001 2.81534e-05 1.36384 -0.872857 -0.872871 1887 1888001 2.80692e-05 1.36384 -0.872857 -0.872871 1888 1889001 2.79852e-05 1.36346 -0.872868 -0.872871 1889 1890001 2.79015e-05 1.36346 -0.872868 -0.872871 1890 1891001 2.7818e-05 1.36331 -0.87287 -0.872871 1891 1892001 2.77348e-05 1.36331 -0.87287 -0.872871 1892 1893001 2.76519e-05 1.36331 -0.87287 -0.872871 1893 1894001 2.75692e-05 1.3627 -0.872866 -0.872871 1894 1895001 2.74867e-05 1.36355 -0.872866 -0.872871 1895 1896001 2.74045e-05 1.36355 -0.872866 -0.872871 1896 1897001 2.73225e-05 1.36283 -0.872869 -0.872871 1897 1898001 2.72408e-05 1.36174 -0.872815 -0.872871 1898 1899001 2.71593e-05 1.36234 -0.872853 -0.872871 1899 1900001 2.70781e-05 1.36234 -0.872853 -0.872871 1900 1901001 2.69971e-05 1.3623 -0.872851 -0.872871 1901 1902001 2.69164e-05 1.36299 -0.872871 -0.872871 1902 1903001 2.68359e-05 1.36263 -0.872864 -0.872871 1903 1904001 2.67556e-05 1.36254 -0.872861 -0.872871 1904 1905001 2.66756e-05 1.36254 -0.872861 -0.872871 1905 1906001 2.65958e-05 1.36194 -0.87283 -0.872871 1906 1907001 2.65162e-05 1.36194 -0.87283 -0.872871 1907 1908001 2.64369e-05 1.3635 -0.872867 -0.872871 1908 1909001 2.63578e-05 1.36316 -0.872871 -0.872871 1909 1910001 2.6279e-05 1.36316 -0.872871 -0.872871 1910 1911001 2.62004e-05 1.36316 -0.872871 -0.872871 1911 1912001 2.6122e-05 1.36316 -0.872871 -0.872871 1912 1913001 2.60439e-05 1.363 -0.872871 -0.872871 1913 1914001 2.5966e-05 1.36462 -0.872806 -0.872871 1914 1915001 2.58883e-05 1.3637 -0.872862 -0.872871 1915 1916001 2.58109e-05 1.36303 -0.872871 -0.872871 1916 1917001 2.57337e-05 1.36299 -0.872871 -0.872871 1917 1918001 2.56567e-05 1.36299 -0.872871 -0.872871 1918 1919001 2.558e-05 1.36299 -0.872871 -0.872871 1919 1920001 2.55035e-05 1.36331 -0.87287 -0.872871 1920 1921001 2.54272e-05 1.36333 -0.87287 -0.872871 1921 1922001 2.53511e-05 1.36371 -0.872861 -0.872871 1922 1923001 2.52753e-05 1.36377 -0.872859 -0.872871 1923 1924001 2.51997e-05 1.36377 -0.872859 -0.872871 1924 1925001 2.51244e-05 1.36377 -0.872859 -0.872871 1925 1926001 2.50492e-05 1.36289 -0.87287 -0.872871 1926 1927001 2.49743e-05 1.36289 -0.87287 -0.872871 1927 1928001 2.48996e-05 1.36289 -0.87287 -0.872871 1928 1929001 2.48251e-05 1.36348 -0.872868 -0.872871 1929 1930001 2.47509e-05 1.36348 -0.872868 -0.872871 1930 1931001 2.46768e-05 1.36323 -0.872871 -0.872871 1931 1932001 2.4603e-05 1.36344 -0.872868 -0.872871 1932 1933001 2.45294e-05 1.36315 -0.872871 -0.872871 1933 1934001 2.44561e-05 1.36358 -0.872865 -0.872871 1934 1935001 2.43829e-05 1.36358 -0.872865 -0.872871 1935 1936001 2.431e-05 1.36254 -0.872861 -0.872871 1936 1937001 2.42373e-05 1.36299 -0.872871 -0.872871 1937 1938001 2.41648e-05 1.36335 -0.87287 -0.872871 1938 1939001 2.40925e-05 1.36274 -0.872867 -0.872871 1939 1940001 2.40204e-05 1.36274 -0.872867 -0.872871 1940 1941001 2.39486e-05 1.36274 -0.872867 -0.872871 1941 1942001 2.3877e-05 1.36274 -0.872867 -0.872871 1942 1943001 2.38055e-05 1.36274 -0.872867 -0.872871 1943 1944001 2.37343e-05 1.36287 -0.872869 -0.872871 1944 1945001 2.36633e-05 1.36345 -0.872868 -0.872871 1945 1946001 2.35926e-05 1.36224 -0.872848 -0.872871 1946 1947001 2.3522e-05 1.36224 -0.872848 -0.872871 1947 1948001 2.34516e-05 1.36417 -0.87284 -0.872871 1948 1949001 2.33815e-05 1.36173 -0.872815 -0.872871 1949 1950001 2.33116e-05 1.36173 -0.872815 -0.872871 1950 1951001 2.32418e-05 1.36345 -0.872868 -0.872871 1951 1952001 2.31723e-05 1.36286 -0.872869 -0.872871 1952 1953001 2.3103e-05 1.36286 -0.872869 -0.872871 1953 1954001 2.30339e-05 1.36286 -0.872869 -0.872871 1954 1955001 2.2965e-05 1.36286 -0.872869 -0.872871 1955 1956001 2.28963e-05 1.36385 -0.872856 -0.872871 1956 1957001 2.28278e-05 1.36256 -0.872862 -0.872871 1957 1958001 2.27596e-05 1.36256 -0.872862 -0.872871 1958 1959001 2.26915e-05 1.36256 -0.872862 -0.872871 1959 1960001 2.26236e-05 1.36256 -0.872862 -0.872871 1960 1961001 2.2556e-05 1.36357 -0.872866 -0.872871 1961 1962001 2.24885e-05 1.36282 -0.872868 -0.872871 1962 1963001 2.24212e-05 1.36282 -0.872868 -0.872871 1963 1964001 2.23542e-05 1.36373 -0.872861 -0.872871 1964 1965001 2.22873e-05 1.36382 -0.872857 -0.872871 1965 1966001 2.22206e-05 1.36305 -0.872871 -0.872871 1966 1967001 2.21542e-05 1.36346 -0.872868 -0.872871 1967 1968001 2.20879e-05 1.36285 -0.872869 -0.872871 1968 1969001 2.20219e-05 1.36317 -0.872871 -0.872871 1969 1970001 2.1956e-05 1.36291 -0.87287 -0.872871 1970 1971001 2.18903e-05 1.36308 -0.872871 -0.872871 1971 1972001 2.18248e-05 1.36197 -0.872832 -0.872871 1972 1973001 2.17596e-05 1.36323 -0.872871 -0.872871 1973 1974001 2.16945e-05 1.36323 -0.872871 -0.872871 1974 1975001 2.16296e-05 1.36324 -0.872871 -0.872871 1975 1976001 2.15649e-05 1.36323 -0.872871 -0.872871 1976 1977001 2.15004e-05 1.36323 -0.872871 -0.872871 1977 1978001 2.14361e-05 1.36378 -0.872859 -0.872871 1978 1979001 2.1372e-05 1.36314 -0.872871 -0.872871 1979 1980001 2.1308e-05 1.36327 -0.872871 -0.872871 1980 1981001 2.12443e-05 1.3631 -0.872871 -0.872871 1981 1982001 2.11808e-05 1.3631 -0.872871 -0.872871 1982 1983001 2.11174e-05 1.36334 -0.87287 -0.872871 1983 1984001 2.10543e-05 1.36334 -0.87287 -0.872871 1984 1985001 2.09913e-05 1.36334 -0.87287 -0.872871 1985 1986001 2.09285e-05 1.36258 -0.872862 -0.872871 1986 1987001 2.08659e-05 1.36258 -0.872862 -0.872871 1987 1988001 2.08035e-05 1.36258 -0.872862 -0.872871 1988 1989001 2.07413e-05 1.36258 -0.872862 -0.872871 1989 1990001 2.06792e-05 1.36367 -0.872863 -0.872871 1990 1991001 2.06174e-05 1.3623 -0.872851 -0.872871 1991 1992001 2.05557e-05 1.36308 -0.872871 -0.872871 1992 1993001 2.04942e-05 1.36234 -0.872853 -0.872871 1993 1994001 2.04329e-05 1.36272 -0.872866 -0.872871 1994 1995001 2.03718e-05 1.36272 -0.872866 -0.872871 1995 1996001 2.03109e-05 1.36272 -0.872866 -0.872871 1996 1997001 2.02501e-05 1.36272 -0.872866 -0.872871 1997 1998001 2.01896e-05 1.36272 -0.872866 -0.872871 1998 1999001 2.01292e-05 1.36226 -0.872849 -0.872871 1999 2000001 2.0069e-05 1.36315 -0.872871 -0.872871 2000 2001001 2.00089e-05 1.36315 -0.872871 -0.872871 2001 2002001 1.99491e-05 1.36315 -0.872871 -0.872871 2002 2003001 1.98894e-05 1.36347 -0.872868 -0.872871 2003 2004001 1.98299e-05 1.36275 -0.872867 -0.872871 2004 2005001 1.97706e-05 1.36275 -0.872867 -0.872871 2005 2006001 1.97115e-05 1.36255 -0.872862 -0.872871 2006 2007001 1.96525e-05 1.36276 -0.872867 -0.872871 2007 2008001 1.95937e-05 1.36276 -0.872867 -0.872871 2008 2009001 1.95351e-05 1.36332 -0.87287 -0.872871 2009 2010001 1.94767e-05 1.36332 -0.87287 -0.872871 2010 2011001 1.94185e-05 1.36332 -0.87287 -0.872871 2011 2012001 1.93604e-05 1.36361 -0.872864 -0.872871 2012 2013001 1.93025e-05 1.36361 -0.872864 -0.872871 2013 2014001 1.92447e-05 1.36361 -0.872864 -0.872871 2014 2015001 1.91872e-05 1.36268 -0.872865 -0.872871 2015 2016001 1.91298e-05 1.36268 -0.872865 -0.872871 2016 2017001 1.90726e-05 1.36385 -0.872856 -0.872871 2017 2018001 1.90155e-05 1.36385 -0.872856 -0.872871 2018 2019001 1.89586e-05 1.36347 -0.872868 -0.872871 2019 2020001 1.89019e-05 1.36315 -0.872871 -0.872871 2020 2021001 1.88454e-05 1.36315 -0.872871 -0.872871 2021 2022001 1.8789e-05 1.36315 -0.872871 -0.872871 2022 2023001 1.87328e-05 1.36275 -0.872867 -0.872871 2023 2024001 1.86768e-05 1.36285 -0.872869 -0.872871 2024 2025001 1.86209e-05 1.36192 -0.872829 -0.872871 2025 2026001 1.85652e-05 1.36271 -0.872866 -0.872871 2026 2027001 1.85097e-05 1.3624 -0.872856 -0.872871 2027 2028001 1.84544e-05 1.36254 -0.872861 -0.872871 2028 2029001 1.83992e-05 1.3622 -0.872846 -0.872871 2029 2030001 1.83441e-05 1.36245 -0.872858 -0.872871 2030 2031001 1.82893e-05 1.36363 -0.872864 -0.872871 2031 2032001 1.82345e-05 1.36347 -0.872868 -0.872871 2032 2033001 1.818e-05 1.36254 -0.872861 -0.872871 2033 2034001 1.81256e-05 1.36237 -0.872854 -0.872871 2034 2035001 1.80714e-05 1.36237 -0.872854 -0.872871 2035 2036001 1.80174e-05 1.36248 -0.872859 -0.872871 2036 2037001 1.79635e-05 1.36257 -0.872862 -0.872871 2037 2038001 1.79097e-05 1.36346 -0.872868 -0.872871 2038 2039001 1.78562e-05 1.36346 -0.872868 -0.872871 2039 2040001 1.78028e-05 1.36346 -0.872868 -0.872871 2040 2041001 1.77495e-05 1.36346 -0.872868 -0.872871 2041 2042001 1.76964e-05 1.36346 -0.872868 -0.872871 2042 2043001 1.76435e-05 1.36346 -0.872868 -0.872871 2043 2044001 1.75907e-05 1.36334 -0.87287 -0.872871 2044 2045001 1.75381e-05 1.36334 -0.87287 -0.872871 2045 2046001 1.74857e-05 1.3637 -0.872862 -0.872871 2046 2047001 1.74334e-05 1.3637 -0.872862 -0.872871 2047 2048001 1.73812e-05 1.3637 -0.872862 -0.872871 2048 2049001 1.73292e-05 1.3637 -0.872862 -0.872871 2049 2050001 1.72774e-05 1.36239 -0.872855 -0.872871 2050 2051001 1.72257e-05 1.36375 -0.87286 -0.872871 2051 2052001 1.71742e-05 1.36282 -0.872868 -0.872871 2052 2053001 1.71228e-05 1.36282 -0.872868 -0.872871 2053 2054001 1.70716e-05 1.36282 -0.872868 -0.872871 2054 2055001 1.70205e-05 1.36282 -0.872868 -0.872871 2055 2056001 1.69696e-05 1.36282 -0.872868 -0.872871 2056 2057001 1.69189e-05 1.36282 -0.872868 -0.872871 2057 2058001 1.68683e-05 1.36282 -0.872868 -0.872871 2058 2059001 1.68178e-05 1.36282 -0.872868 -0.872871 2059 2060001 1.67675e-05 1.36282 -0.872868 -0.872871 2060 2061001 1.67174e-05 1.36282 -0.872868 -0.872871 2061 2062001 1.66674e-05 1.36282 -0.872868 -0.872871 2062 2063001 1.66175e-05 1.36309 -0.872871 -0.872871 2063 2064001 1.65678e-05 1.36247 -0.872858 -0.872871 2064 2065001 1.65183e-05 1.36233 -0.872853 -0.872871 2065 2066001 1.64689e-05 1.3627 -0.872866 -0.872871 2066 2067001 1.64196e-05 1.3627 -0.872866 -0.872871 2067 2068001 1.63705e-05 1.3627 -0.872866 -0.872871 2068 2069001 1.63215e-05 1.3627 -0.872866 -0.872871 2069 2070001 1.62727e-05 1.3625 -0.87286 -0.872871 2070 2071001 1.6224e-05 1.36342 -0.872869 -0.872871 2071 2072001 1.61755e-05 1.36214 -0.872843 -0.872871 2072 2073001 1.61271e-05 1.36301 -0.872871 -0.872871 2073 2074001 1.60789e-05 1.36368 -0.872862 -0.872871 2074 2075001 1.60308e-05 1.36337 -0.872869 -0.872871 2075 2076001 1.59828e-05 1.36337 -0.872869 -0.872871 2076 2077001 1.5935e-05 1.36337 -0.872869 -0.872871 2077 2078001 1.58874e-05 1.36317 -0.872871 -0.872871 2078 2079001 1.58399e-05 1.36423 -0.872836 -0.872871 2079 2080001 1.57925e-05 1.3621 -0.872841 -0.872871 2080 2081001 1.57452e-05 1.36254 -0.872861 -0.872871 2081 2082001 1.56981e-05 1.36257 -0.872862 -0.872871 2082 2083001 1.56512e-05 1.36257 -0.872862 -0.872871 2083 2084001 1.56044e-05 1.36257 -0.872862 -0.872871 2084 2085001 1.55577e-05 1.36257 -0.872862 -0.872871 2085 2086001 1.55112e-05 1.36257 -0.872862 -0.872871 2086 2087001 1.54648e-05 1.36337 -0.87287 -0.872871 2087 2088001 1.54185e-05 1.36241 -0.872856 -0.872871 2088 2089001 1.53724e-05 1.36241 -0.872856 -0.872871 2089 2090001 1.53264e-05 1.3627 -0.872866 -0.872871 2090 2091001 1.52806e-05 1.3627 -0.872866 -0.872871 2091 2092001 1.52349e-05 1.3627 -0.872866 -0.872871 2092 2093001 1.51893e-05 1.3636 -0.872865 -0.872871 2093 2094001 1.51439e-05 1.36265 -0.872865 -0.872871 2094 2095001 1.50986e-05 1.36265 -0.872865 -0.872871 2095 2096001 1.50534e-05 1.36265 -0.872865 -0.872871 2096 2097001 1.50084e-05 1.36265 -0.872865 -0.872871 2097 2098001 1.49635e-05 1.36265 -0.872865 -0.872871 2098 2099001 1.49188e-05 1.36368 -0.872863 -0.872871 2099 2100001 1.48741e-05 1.36315 -0.872871 -0.872871 2100 2101001 1.48296e-05 1.36315 -0.872871 -0.872871 2101 2102001 1.47853e-05 1.36315 -0.872871 -0.872871 2102 2103001 1.47411e-05 1.36315 -0.872871 -0.872871 2103 2104001 1.4697e-05 1.36315 -0.872871 -0.872871 2104 2105001 1.4653e-05 1.36315 -0.872871 -0.872871 2105 2106001 1.46092e-05 1.36315 -0.872871 -0.872871 2106 2107001 1.45655e-05 1.36315 -0.872871 -0.872871 2107 2108001 1.45219e-05 1.36315 -0.872871 -0.872871 2108 2109001 1.44785e-05 1.36276 -0.872867 -0.872871 2109 2110001 1.44352e-05 1.36359 -0.872865 -0.872871 2110 2111001 1.4392e-05 1.36345 -0.872868 -0.872871 2111 2112001 1.4349e-05 1.36345 -0.872868 -0.872871 2112 2113001 1.4306e-05 1.36238 -0.872855 -0.872871 2113 2114001 1.42633e-05 1.36273 -0.872867 -0.872871 2114 2115001 1.42206e-05 1.36274 -0.872867 -0.872871 2115 2116001 1.41781e-05 1.36274 -0.872867 -0.872871 2116 2117001 1.41356e-05 1.36274 -0.872867 -0.872871 2117 2118001 1.40934e-05 1.36274 -0.872867 -0.872871 2118 2119001 1.40512e-05 1.36365 -0.872863 -0.872871 2119 2120001 1.40092e-05 1.36235 -0.872854 -0.872871 2120 2121001 1.39673e-05 1.36235 -0.872854 -0.872871 2121 2122001 1.39255e-05 1.36235 -0.872854 -0.872871 2122 2123001 1.38839e-05 1.36235 -0.872854 -0.872871 2123 2124001 1.38423e-05 1.3631 -0.872871 -0.872871 2124 2125001 1.38009e-05 1.3631 -0.872871 -0.872871 2125 2126001 1.37596e-05 1.36287 -0.872869 -0.872871 2126 2127001 1.37185e-05 1.36232 -0.872852 -0.872871 2127 2128001 1.36775e-05 1.36261 -0.872863 -0.872871 2128 2129001 1.36366e-05 1.36317 -0.872871 -0.872871 2129 2130001 1.35958e-05 1.36317 -0.872871 -0.872871 2130 2131001 1.35551e-05 1.36329 -0.87287 -0.872871 2131 2132001 1.35146e-05 1.36256 -0.872862 -0.872871 2132 2133001 1.34741e-05 1.36256 -0.872862 -0.872871 2133 2134001 1.34338e-05 1.36256 -0.872862 -0.872871 2134 2135001 1.33936e-05 1.36256 -0.872862 -0.872871 2135 2136001 1.33536e-05 1.36256 -0.872862 -0.872871 2136 2137001 1.33136e-05 1.3631 -0.872871 -0.872871 2137 2138001 1.32738e-05 1.3631 -0.872871 -0.872871 2138 2139001 1.32341e-05 1.36292 -0.87287 -0.872871 2139 2140001 1.31945e-05 1.36331 -0.87287 -0.872871 2140 2141001 1.31551e-05 1.36239 -0.872855 -0.872871 2141 2142001 1.31157e-05 1.36239 -0.872855 -0.872871 2142 2143001 1.30765e-05 1.36317 -0.872871 -0.872871 2143 2144001 1.30374e-05 1.36299 -0.872871 -0.872871 2144 2145001 1.29984e-05 1.36299 -0.872871 -0.872871 2145 2146001 1.29595e-05 1.36335 -0.87287 -0.872871 2146 2147001 1.29208e-05 1.36335 -0.87287 -0.872871 2147 2148001 1.28821e-05 1.36334 -0.87287 -0.872871 2148 2149001 1.28436e-05 1.36303 -0.872871 -0.872871 2149 2150001 1.28052e-05 1.36337 -0.87287 -0.872871 2150 2151001 1.27669e-05 1.36274 -0.872867 -0.872871 2151 2152001 1.27287e-05 1.36327 -0.872871 -0.872871 2152 2153001 1.26906e-05 1.36327 -0.872871 -0.872871 2153 2154001 1.26526e-05 1.36291 -0.87287 -0.872871 2154 2155001 1.26148e-05 1.36291 -0.87287 -0.872871 2155 2156001 1.25771e-05 1.36291 -0.87287 -0.872871 2156 2157001 1.25394e-05 1.36291 -0.87287 -0.872871 2157 2158001 1.25019e-05 1.36291 -0.87287 -0.872871 2158 2159001 1.24645e-05 1.36236 -0.872854 -0.872871 2159 2160001 1.24273e-05 1.36232 -0.872852 -0.872871 2160 2161001 1.23901e-05 1.36253 -0.872861 -0.872871 2161 2162001 1.2353e-05 1.36186 -0.872824 -0.872871 2162 2163001 1.23161e-05 1.36239 -0.872855 -0.872871 2163 2164001 1.22793e-05 1.36239 -0.872855 -0.872871 2164 2165001 1.22425e-05 1.36239 -0.872855 -0.872871 2165 2166001 1.22059e-05 1.36239 -0.872855 -0.872871 2166 2167001 1.21694e-05 1.36273 -0.872867 -0.872871 2167 2168001 1.2133e-05 1.36273 -0.872867 -0.872871 2168 2169001 1.20967e-05 1.36346 -0.872868 -0.872871 2169 2170001 1.20605e-05 1.36346 -0.872868 -0.872871 2170 2171001 1.20245e-05 1.36341 -0.872869 -0.872871 2171 2172001 1.19885e-05 1.36341 -0.872869 -0.872871 2172 2173001 1.19526e-05 1.36341 -0.872869 -0.872871 2173 2174001 1.19169e-05 1.36313 -0.872871 -0.872871 2174 2175001 1.18812e-05 1.36238 -0.872855 -0.872871 2175 2176001 1.18457e-05 1.36302 -0.872871 -0.872871 2176 2177001 1.18103e-05 1.36302 -0.872871 -0.872871 2177 2178001 1.17749e-05 1.36271 -0.872866 -0.872871 2178 2179001 1.17397e-05 1.36271 -0.872866 -0.872871 2179 2180001 1.17046e-05 1.36271 -0.872866 -0.872871 2180 2181001 1.16696e-05 1.36263 -0.872864 -0.872871 2181 2182001 1.16347e-05 1.36263 -0.872864 -0.872871 2182 2183001 1.15999e-05 1.36292 -0.87287 -0.872871 2183 2184001 1.15652e-05 1.36274 -0.872867 -0.872871 2184 2185001 1.15306e-05 1.36274 -0.872867 -0.872871 2185 2186001 1.14961e-05 1.36384 -0.872857 -0.872871 2186 2187001 1.14617e-05 1.36384 -0.872857 -0.872871 2187 2188001 1.14275e-05 1.36395 -0.872852 -0.872871 2188 2189001 1.13933e-05 1.36273 -0.872867 -0.872871 2189 2190001 1.13592e-05 1.36273 -0.872867 -0.872871 2190 2191001 1.13252e-05 1.36273 -0.872867 -0.872871 2191 2192001 1.12913e-05 1.36273 -0.872867 -0.872871 2192 2193001 1.12576e-05 1.36322 -0.872871 -0.872871 2193 2194001 1.12239e-05 1.36322 -0.872871 -0.872871 2194 2195001 1.11903e-05 1.36281 -0.872868 -0.872871 2195 2196001 1.11569e-05 1.36314 -0.872871 -0.872871 2196 2197001 1.11235e-05 1.36344 -0.872868 -0.872871 2197 2198001 1.10902e-05 1.36316 -0.872871 -0.872871 2198 2199001 1.1057e-05 1.36316 -0.872871 -0.872871 2199 2200001 1.1024e-05 1.36316 -0.872871 -0.872871 2200 2201001 1.0991e-05 1.36316 -0.872871 -0.872871 2201 2202001 1.09581e-05 1.36316 -0.872871 -0.872871 2202 2203001 1.09254e-05 1.36287 -0.872869 -0.872871 2203 2204001 1.08927e-05 1.36287 -0.872869 -0.872871 2204 2205001 1.08601e-05 1.36287 -0.872869 -0.872871 2205 2206001 1.08276e-05 1.36287 -0.872869 -0.872871 2206 2207001 1.07952e-05 1.36287 -0.872869 -0.872871 2207 2208001 1.07629e-05 1.36218 -0.872845 -0.872871 2208 2209001 1.07307e-05 1.36203 -0.872836 -0.872871 2209 2210001 1.06986e-05 1.36339 -0.872869 -0.872871 2210 2211001 1.06666e-05 1.36339 -0.872869 -0.872871 2211 2212001 1.06347e-05 1.36339 -0.872869 -0.872871 2212 2213001 1.06029e-05 1.36279 -0.872868 -0.872871 2213 2214001 1.05712e-05 1.36279 -0.872868 -0.872871 2214 2215001 1.05396e-05 1.36279 -0.872868 -0.872871 2215 2216001 1.05081e-05 1.36304 -0.872871 -0.872871 2216 2217001 1.04766e-05 1.36337 -0.87287 -0.872871 2217 2218001 1.04453e-05 1.36337 -0.87287 -0.872871 2218 2219001 1.04141e-05 1.36374 -0.87286 -0.872871 2219 2220001 1.03829e-05 1.36374 -0.87286 -0.872871 2220 2221001 1.03519e-05 1.36371 -0.872861 -0.872871 2221 2222001 1.03209e-05 1.36273 -0.872867 -0.872871 2222 2223001 1.029e-05 1.36299 -0.872871 -0.872871 2223 2224001 1.02593e-05 1.36348 -0.872868 -0.872871 2224 2225001 1.02286e-05 1.36252 -0.87286 -0.872871 2225 2226001 1.0198e-05 1.36252 -0.87286 -0.872871 2226 2227001 1.01675e-05 1.36252 -0.87286 -0.872871 2227 2228001 1.01371e-05 1.36226 -0.872849 -0.872871 2228 2229001 1.01067e-05 1.36369 -0.872862 -0.872871 2229 2230001 1.00765e-05 1.36369 -0.872862 -0.872871 2230 2231001 1.00464e-05 1.36369 -0.872862 -0.872871 2231 2232001 1.00163e-05 1.36369 -0.872862 -0.872871 2232 2233001 9.98637e-06 1.36369 -0.872862 -0.872871 2233 2234001 9.9565e-06 1.3633 -0.87287 -0.872871 2234 2235001 9.92672e-06 1.3633 -0.87287 -0.872871 2235 2236001 9.89703e-06 1.36289 -0.87287 -0.872871 2236 2237001 9.86742e-06 1.36351 -0.872867 -0.872871 2237 2238001 9.83791e-06 1.36323 -0.872871 -0.872871 2238 2239001 9.80848e-06 1.36323 -0.872871 -0.872871 2239 2240001 9.77915e-06 1.36323 -0.872871 -0.872871 2240 2241001 9.7499e-06 1.36356 -0.872866 -0.872871 2241 2242001 9.72073e-06 1.36284 -0.872869 -0.872871 2242 2243001 9.69166e-06 1.36284 -0.872869 -0.872871 2243 2244001 9.66267e-06 1.36307 -0.872871 -0.872871 2244 2245001 9.63377e-06 1.36307 -0.872871 -0.872871 2245 2246001 9.60496e-06 1.36307 -0.872871 -0.872871 2246 2247001 9.57623e-06 1.36337 -0.87287 -0.872871 2247 2248001 9.54758e-06 1.36337 -0.87287 -0.872871 2248 2249001 9.51903e-06 1.36305 -0.872871 -0.872871 2249 2250001 9.49056e-06 1.36305 -0.872871 -0.872871 2250 2251001 9.46217e-06 1.36317 -0.872871 -0.872871 2251 2252001 9.43387e-06 1.36317 -0.872871 -0.872871 2252 2253001 9.40565e-06 1.36317 -0.872871 -0.872871 2253 2254001 9.37752e-06 1.36339 -0.872869 -0.872871 2254 2255001 9.34947e-06 1.36385 -0.872856 -0.872871 2255 2256001 9.3215e-06 1.36429 -0.872832 -0.872871 2256 2257001 9.29362e-06 1.36398 -0.87285 -0.872871 2257 2258001 9.26583e-06 1.36398 -0.87285 -0.872871 2258 2259001 9.23811e-06 1.36398 -0.87285 -0.872871 2259 2260001 9.21048e-06 1.36258 -0.872862 -0.872871 2260 2261001 9.18293e-06 1.36258 -0.872862 -0.872871 2261 2262001 9.15547e-06 1.36258 -0.872862 -0.872871 2262 2263001 9.12808e-06 1.3631 -0.872871 -0.872871 2263 2264001 9.10078e-06 1.36306 -0.872871 -0.872871 2264 2265001 9.07356e-06 1.36306 -0.872871 -0.872871 2265 2266001 9.04642e-06 1.36306 -0.872871 -0.872871 2266 2267001 9.01936e-06 1.36306 -0.872871 -0.872871 2267 2268001 8.99238e-06 1.36335 -0.87287 -0.872871 2268 2269001 8.96549e-06 1.36335 -0.87287 -0.872871 2269 2270001 8.93867e-06 1.36341 -0.872869 -0.872871 2270 2271001 8.91194e-06 1.36278 -0.872868 -0.872871 2271 2272001 8.88528e-06 1.36379 -0.872859 -0.872871 2272 2273001 8.8587e-06 1.36379 -0.872859 -0.872871 2273 2274001 8.83221e-06 1.36379 -0.872859 -0.872871 2274 2275001 8.80579e-06 1.3636 -0.872865 -0.872871 2275 2276001 8.77945e-06 1.36336 -0.87287 -0.872871 2276 2277001 8.75319e-06 1.36318 -0.872871 -0.872871 2277 2278001 8.72701e-06 1.36318 -0.872871 -0.872871 2278 2279001 8.70091e-06 1.36372 -0.872861 -0.872871 2279 2280001 8.67488e-06 1.36332 -0.87287 -0.872871 2280 2281001 8.64894e-06 1.36332 -0.87287 -0.872871 2281 2282001 8.62307e-06 1.36332 -0.87287 -0.872871 2282 2283001 8.59728e-06 1.36332 -0.87287 -0.872871 2283 2284001 8.57156e-06 1.36332 -0.87287 -0.872871 2284 2285001 8.54592e-06 1.36332 -0.87287 -0.872871 2285 2286001 8.52036e-06 1.36332 -0.87287 -0.872871 2286 2287001 8.49488e-06 1.36332 -0.87287 -0.872871 2287 2288001 8.46947e-06 1.36258 -0.872862 -0.872871 2288 2289001 8.44414e-06 1.36258 -0.872862 -0.872871 2289 2290001 8.41888e-06 1.36258 -0.872862 -0.872871 2290 2291001 8.3937e-06 1.36258 -0.872862 -0.872871 2291 2292001 8.36859e-06 1.36355 -0.872866 -0.872871 2292 2293001 8.34356e-06 1.36355 -0.872866 -0.872871 2293 2294001 8.31861e-06 1.36326 -0.872871 -0.872871 2294 2295001 8.29373e-06 1.36383 -0.872857 -0.872871 2295 2296001 8.26892e-06 1.36339 -0.872869 -0.872871 2296 2297001 8.24419e-06 1.36339 -0.872869 -0.872871 2297 2298001 8.21953e-06 1.36339 -0.872869 -0.872871 2298 2299001 8.19494e-06 1.3628 -0.872868 -0.872871 2299 2300001 8.17043e-06 1.36324 -0.872871 -0.872871 2300 2301001 8.14599e-06 1.36324 -0.872871 -0.872871 2301 2302001 8.12163e-06 1.36324 -0.872871 -0.872871 2302 2303001 8.09734e-06 1.36346 -0.872868 -0.872871 2303 2304001 8.07312e-06 1.36346 -0.872868 -0.872871 2304 2305001 8.04897e-06 1.36346 -0.872868 -0.872871 2305 2306001 8.0249e-06 1.36346 -0.872868 -0.872871 2306 2307001 8.00089e-06 1.36295 -0.87287 -0.872871 2307 2308001 7.97696e-06 1.36297 -0.87287 -0.872871 2308 2309001 7.9531e-06 1.36297 -0.87287 -0.872871 2309 2310001 7.92931e-06 1.36322 -0.872871 -0.872871 2310 2311001 7.9056e-06 1.36284 -0.872869 -0.872871 2311 2312001 7.88195e-06 1.36284 -0.872869 -0.872871 2312 2313001 7.85838e-06 1.36284 -0.872869 -0.872871 2313 2314001 7.83487e-06 1.36285 -0.872869 -0.872871 2314 2315001 7.81144e-06 1.36302 -0.872871 -0.872871 2315 2316001 7.78807e-06 1.36302 -0.872871 -0.872871 2316 2317001 7.76478e-06 1.3635 -0.872867 -0.872871 2317 2318001 7.74155e-06 1.3635 -0.872867 -0.872871 2318 2319001 7.7184e-06 1.3635 -0.872867 -0.872871 2319 2320001 7.69531e-06 1.3635 -0.872867 -0.872871 2320 2321001 7.6723e-06 1.3635 -0.872867 -0.872871 2321 2322001 7.64935e-06 1.3635 -0.872867 -0.872871 2322 2323001 7.62647e-06 1.36326 -0.872871 -0.872871 2323 2324001 7.60366e-06 1.36351 -0.872867 -0.872871 2324 2325001 7.58092e-06 1.36351 -0.872867 -0.872871 2325 2326001 7.55824e-06 1.36319 -0.872871 -0.872871 2326 2327001 7.53563e-06 1.36319 -0.872871 -0.872871 2327 2328001 7.51309e-06 1.36319 -0.872871 -0.872871 2328 2329001 7.49062e-06 1.36319 -0.872871 -0.872871 2329 2330001 7.46822e-06 1.36267 -0.872865 -0.872871 2330 2331001 7.44588e-06 1.36267 -0.872865 -0.872871 2331 2332001 7.42361e-06 1.36256 -0.872862 -0.872871 2332 2333001 7.40141e-06 1.36256 -0.872862 -0.872871 2333 2334001 7.37927e-06 1.36256 -0.872862 -0.872871 2334 2335001 7.3572e-06 1.36322 -0.872871 -0.872871 2335 2336001 7.33519e-06 1.36322 -0.872871 -0.872871 2336 2337001 7.31325e-06 1.36296 -0.87287 -0.872871 2337 2338001 7.29138e-06 1.36228 -0.87285 -0.872871 2338 2339001 7.26957e-06 1.36212 -0.872841 -0.872871 2339 2340001 7.24782e-06 1.36212 -0.872841 -0.872871 2340 2341001 7.22615e-06 1.36349 -0.872867 -0.872871 2341 2342001 7.20453e-06 1.36349 -0.872867 -0.872871 2342 2343001 7.18298e-06 1.36349 -0.872867 -0.872871 2343 2344001 7.1615e-06 1.36349 -0.872867 -0.872871 2344 2345001 7.14008e-06 1.36325 -0.872871 -0.872871 2345 2346001 7.11872e-06 1.36263 -0.872864 -0.872871 2346 2347001 7.09743e-06 1.36346 -0.872868 -0.872871 2347 2348001 7.0762e-06 1.36254 -0.872861 -0.872871 2348 2349001 7.05504e-06 1.36274 -0.872867 -0.872871 2349 2350001 7.03393e-06 1.363 -0.872871 -0.872871 2350 2351001 7.0129e-06 1.363 -0.872871 -0.872871 2351 2352001 6.99192e-06 1.363 -0.872871 -0.872871 2352 2353001 6.97101e-06 1.36302 -0.872871 -0.872871 2353 2354001 6.95016e-06 1.36312 -0.872871 -0.872871 2354 2355001 6.92937e-06 1.36312 -0.872871 -0.872871 2355 2356001 6.90864e-06 1.36312 -0.872871 -0.872871 2356 2357001 6.88798e-06 1.36294 -0.87287 -0.872871 2357 2358001 6.86738e-06 1.36294 -0.87287 -0.872871 2358 2359001 6.84684e-06 1.36295 -0.87287 -0.872871 2359 2360001 6.82636e-06 1.36295 -0.87287 -0.872871 2360 2361001 6.80594e-06 1.36295 -0.87287 -0.872871 2361 2362001 6.78558e-06 1.36295 -0.87287 -0.872871 2362 2363001 6.76529e-06 1.36295 -0.87287 -0.872871 2363 2364001 6.74505e-06 1.36295 -0.87287 -0.872871 2364 2365001 6.72488e-06 1.3627 -0.872866 -0.872871 2365 2366001 6.70476e-06 1.36351 -0.872867 -0.872871 2366 2367001 6.68471e-06 1.36302 -0.872871 -0.872871 2367 2368001 6.66471e-06 1.36302 -0.872871 -0.872871 2368 2369001 6.64478e-06 1.36302 -0.872871 -0.872871 2369 2370001 6.62491e-06 1.36302 -0.872871 -0.872871 2370 2371001 6.60509e-06 1.36302 -0.872871 -0.872871 2371 2372001 6.58533e-06 1.36306 -0.872871 -0.872871 2372 2373001 6.56564e-06 1.36306 -0.872871 -0.872871 2373 2374001 6.546e-06 1.36323 -0.872871 -0.872871 2374 2375001 6.52642e-06 1.36323 -0.872871 -0.872871 2375 2376001 6.5069e-06 1.36323 -0.872871 -0.872871 2376 2377001 6.48744e-06 1.36323 -0.872871 -0.872871 2377 2378001 6.46803e-06 1.36323 -0.872871 -0.872871 2378 2379001 6.44869e-06 1.36323 -0.872871 -0.872871 2379 2380001 6.4294e-06 1.36323 -0.872871 -0.872871 2380 2381001 6.41017e-06 1.36305 -0.872871 -0.872871 2381 2382001 6.39099e-06 1.36305 -0.872871 -0.872871 2382 2383001 6.37188e-06 1.36305 -0.872871 -0.872871 2383 2384001 6.35282e-06 1.36305 -0.872871 -0.872871 2384 2385001 6.33382e-06 1.36305 -0.872871 -0.872871 2385 2386001 6.31487e-06 1.36305 -0.872871 -0.872871 2386 2387001 6.29599e-06 1.36305 -0.872871 -0.872871 2387 2388001 6.27716e-06 1.36383 -0.872857 -0.872871 2388 2389001 6.25838e-06 1.36383 -0.872857 -0.872871 2389 2390001 6.23966e-06 1.3627 -0.872866 -0.872871 2390 2391001 6.221e-06 1.36353 -0.872867 -0.872871 2391 2392001 6.20239e-06 1.36353 -0.872867 -0.872871 2392 2393001 6.18384e-06 1.36353 -0.872867 -0.872871 2393 2394001 6.16534e-06 1.36353 -0.872867 -0.872871 2394 2395001 6.1469e-06 1.36353 -0.872867 -0.872871 2395 2396001 6.12852e-06 1.36349 -0.872867 -0.872871 2396 2397001 6.11019e-06 1.36305 -0.872871 -0.872871 2397 2398001 6.09191e-06 1.36305 -0.872871 -0.872871 2398 2399001 6.07369e-06 1.36305 -0.872871 -0.872871 2399 2400001 6.05552e-06 1.36323 -0.872871 -0.872871 2400 2401001 6.03741e-06 1.36323 -0.872871 -0.872871 2401 2402001 6.01935e-06 1.36323 -0.872871 -0.872871 2402 2403001 6.00135e-06 1.36311 -0.872871 -0.872871 2403 2404001 5.9834e-06 1.36311 -0.872871 -0.872871 2404 2405001 5.9655e-06 1.36311 -0.872871 -0.872871 2405 2406001 5.94766e-06 1.36311 -0.872871 -0.872871 2406 2407001 5.92987e-06 1.36318 -0.872871 -0.872871 2407 2408001 5.91213e-06 1.36318 -0.872871 -0.872871 2408 2409001 5.89445e-06 1.36351 -0.872867 -0.872871 2409 2410001 5.87682e-06 1.36265 -0.872865 -0.872871 2410 2411001 5.85924e-06 1.36265 -0.872865 -0.872871 2411 2412001 5.84172e-06 1.36299 -0.872871 -0.872871 2412 2413001 5.82424e-06 1.36299 -0.872871 -0.872871 2413 2414001 5.80682e-06 1.36299 -0.872871 -0.872871 2414 2415001 5.78945e-06 1.36299 -0.872871 -0.872871 2415 2416001 5.77214e-06 1.36299 -0.872871 -0.872871 2416 2417001 5.75487e-06 1.36328 -0.872871 -0.872871 2417 2418001 5.73766e-06 1.3629 -0.87287 -0.872871 2418 2419001 5.7205e-06 1.3629 -0.87287 -0.872871 2419 2420001 5.70339e-06 1.3627 -0.872866 -0.872871 2420 2421001 5.68633e-06 1.36367 -0.872863 -0.872871 2421 2422001 5.66932e-06 1.36367 -0.872863 -0.872871 2422 2423001 5.65237e-06 1.36367 -0.872863 -0.872871 2423 2424001 5.63546e-06 1.36277 -0.872867 -0.872871 2424 2425001 5.6186e-06 1.36277 -0.872867 -0.872871 2425 2426001 5.6018e-06 1.36311 -0.872871 -0.872871 2426 2427001 5.58504e-06 1.36311 -0.872871 -0.872871 2427 2428001 5.56834e-06 1.36366 -0.872863 -0.872871 2428 2429001 5.55168e-06 1.36295 -0.87287 -0.872871 2429 2430001 5.53508e-06 1.36295 -0.87287 -0.872871 2430 2431001 5.51852e-06 1.36295 -0.87287 -0.872871 2431 2432001 5.50202e-06 1.36319 -0.872871 -0.872871 2432 2433001 5.48556e-06 1.36319 -0.872871 -0.872871 2433 2434001 5.46915e-06 1.36312 -0.872871 -0.872871 2434 2435001 5.45279e-06 1.36243 -0.872857 -0.872871 2435 2436001 5.43648e-06 1.36268 -0.872865 -0.872871 2436 2437001 5.42022e-06 1.36329 -0.872871 -0.872871 2437 2438001 5.40401e-06 1.36292 -0.87287 -0.872871 2438 2439001 5.38785e-06 1.36261 -0.872863 -0.872871 2439 2440001 5.37173e-06 1.36261 -0.872863 -0.872871 2440 2441001 5.35567e-06 1.36261 -0.872863 -0.872871 2441 2442001 5.33965e-06 1.36319 -0.872871 -0.872871 2442 2443001 5.32368e-06 1.36319 -0.872871 -0.872871 2443 2444001 5.30775e-06 1.36319 -0.872871 -0.872871 2444 2445001 5.29188e-06 1.36267 -0.872865 -0.872871 2445 2446001 5.27605e-06 1.36272 -0.872866 -0.872871 2446 2447001 5.26027e-06 1.36297 -0.872871 -0.872871 2447 2448001 5.24453e-06 1.36297 -0.872871 -0.872871 2448 2449001 5.22885e-06 1.36322 -0.872871 -0.872871 2449 2450001 5.21321e-06 1.36322 -0.872871 -0.872871 2450 2451001 5.19761e-06 1.36322 -0.872871 -0.872871 2451 2452001 5.18207e-06 1.36322 -0.872871 -0.872871 2452 2453001 5.16657e-06 1.36322 -0.872871 -0.872871 2453 2454001 5.15112e-06 1.36316 -0.872871 -0.872871 2454 2455001 5.13571e-06 1.36294 -0.87287 -0.872871 2455 2456001 5.12035e-06 1.36323 -0.872871 -0.872871 2456 2457001 5.10503e-06 1.36293 -0.87287 -0.872871 2457 2458001 5.08976e-06 1.36293 -0.87287 -0.872871 2458 2459001 5.07454e-06 1.36288 -0.872869 -0.872871 2459 2460001 5.05936e-06 1.36288 -0.872869 -0.872871 2460 2461001 5.04423e-06 1.36288 -0.872869 -0.872871 2461 2462001 5.02914e-06 1.36288 -0.872869 -0.872871 2462 2463001 5.0141e-06 1.36319 -0.872871 -0.872871 2463 2464001 4.9991e-06 1.36331 -0.87287 -0.872871 2464 2465001 4.98415e-06 1.36331 -0.87287 -0.872871 2465 2466001 4.96924e-06 1.36331 -0.87287 -0.872871 2466 2467001 4.95438e-06 1.36285 -0.872869 -0.872871 2467 2468001 4.93956e-06 1.36341 -0.872869 -0.872871 2468 2469001 4.92479e-06 1.36341 -0.872869 -0.872871 2469 2470001 4.91006e-06 1.36341 -0.872869 -0.872871 2470 2471001 4.89537e-06 1.3631 -0.872871 -0.872871 2471 2472001 4.88073e-06 1.36282 -0.872868 -0.872871 2472 2473001 4.86613e-06 1.36282 -0.872868 -0.872871 2473 2474001 4.85157e-06 1.36295 -0.87287 -0.872871 2474 2475001 4.83706e-06 1.36315 -0.872871 -0.872871 2475 2476001 4.82259e-06 1.36315 -0.872871 -0.872871 2476 2477001 4.80817e-06 1.36315 -0.872871 -0.872871 2477 2478001 4.79379e-06 1.36315 -0.872871 -0.872871 2478 2479001 4.77945e-06 1.36315 -0.872871 -0.872871 2479 2480001 4.76515e-06 1.36322 -0.872871 -0.872871 2480 2481001 4.7509e-06 1.36322 -0.872871 -0.872871 2481 2482001 4.73669e-06 1.36322 -0.872871 -0.872871 2482 2483001 4.72252e-06 1.36313 -0.872871 -0.872871 2483 2484001 4.7084e-06 1.36355 -0.872866 -0.872871 2484 2485001 4.69432e-06 1.36355 -0.872866 -0.872871 2485 2486001 4.68028e-06 1.36355 -0.872866 -0.872871 2486 2487001 4.66628e-06 1.36278 -0.872868 -0.872871 2487 2488001 4.65232e-06 1.36311 -0.872871 -0.872871 2488 2489001 4.6384e-06 1.36288 -0.872869 -0.872871 2489 2490001 4.62453e-06 1.36288 -0.872869 -0.872871 2490 2491001 4.6107e-06 1.36288 -0.872869 -0.872871 2491 2492001 4.59691e-06 1.36288 -0.872869 -0.872871 2492 2493001 4.58316e-06 1.36288 -0.872869 -0.872871 2493 2494001 4.56945e-06 1.36288 -0.872869 -0.872871 2494 2495001 4.55578e-06 1.36361 -0.872864 -0.872871 2495 2496001 4.54216e-06 1.36361 -0.872864 -0.872871 2496 2497001 4.52857e-06 1.36361 -0.872864 -0.872871 2497 2498001 4.51503e-06 1.36336 -0.87287 -0.872871 2498 2499001 4.50152e-06 1.36337 -0.87287 -0.872871 2499 2500001 4.48806e-06 1.36337 -0.87287 -0.872871 2500 2501001 4.47463e-06 1.36337 -0.87287 -0.872871 2501 2502001 4.46125e-06 1.36337 -0.87287 -0.872871 2502 2503001 4.44791e-06 1.36337 -0.87287 -0.872871 2503 2504001 4.4346e-06 1.36337 -0.87287 -0.872871 2504 2505001 4.42134e-06 1.36337 -0.87287 -0.872871 2505 2506001 4.40811e-06 1.36337 -0.87287 -0.872871 2506 2507001 4.39493e-06 1.36337 -0.87287 -0.872871 2507 2508001 4.38178e-06 1.36337 -0.87287 -0.872871 2508 2509001 4.36868e-06 1.36288 -0.872869 -0.872871 2509 2510001 4.35561e-06 1.36288 -0.872869 -0.872871 2510 2511001 4.34258e-06 1.36288 -0.872869 -0.872871 2511 2512001 4.32959e-06 1.36288 -0.872869 -0.872871 2512 2513001 4.31664e-06 1.36323 -0.872871 -0.872871 2513 2514001 4.30373e-06 1.36323 -0.872871 -0.872871 2514 2515001 4.29086e-06 1.36323 -0.872871 -0.872871 2515 2516001 4.27803e-06 1.36337 -0.87287 -0.872871 2516 2517001 4.26523e-06 1.36337 -0.87287 -0.872871 2517 2518001 4.25247e-06 1.36322 -0.872871 -0.872871 2518 2519001 4.23975e-06 1.36332 -0.87287 -0.872871 2519 2520001 4.22707e-06 1.36332 -0.87287 -0.872871 2520 2521001 4.21443e-06 1.36357 -0.872866 -0.872871 2521 2522001 4.20182e-06 1.36357 -0.872866 -0.872871 2522 2523001 4.18926e-06 1.36357 -0.872866 -0.872871 2523 2524001 4.17673e-06 1.36357 -0.872866 -0.872871 2524 2525001 4.16423e-06 1.36292 -0.87287 -0.872871 2525 2526001 4.15178e-06 1.36311 -0.872871 -0.872871 2526 2527001 4.13936e-06 1.36342 -0.872869 -0.872871 2527 2528001 4.12698e-06 1.36342 -0.872869 -0.872871 2528 2529001 4.11463e-06 1.36342 -0.872869 -0.872871 2529 2530001 4.10233e-06 1.36342 -0.872869 -0.872871 2530 2531001 4.09006e-06 1.36342 -0.872869 -0.872871 2531 2532001 4.07782e-06 1.36342 -0.872869 -0.872871 2532 2533001 4.06563e-06 1.36348 -0.872868 -0.872871 2533 2534001 4.05347e-06 1.36293 -0.87287 -0.872871 2534 2535001 4.04134e-06 1.36293 -0.87287 -0.872871 2535 2536001 4.02926e-06 1.36293 -0.87287 -0.872871 2536 2537001 4.0172e-06 1.36293 -0.87287 -0.872871 2537 2538001 4.00519e-06 1.36342 -0.872869 -0.872871 2538 2539001 3.99321e-06 1.36342 -0.872869 -0.872871 2539 2540001 3.98126e-06 1.36342 -0.872869 -0.872871 2540 2541001 3.96936e-06 1.36342 -0.872869 -0.872871 2541 2542001 3.95748e-06 1.36342 -0.872869 -0.872871 2542 2543001 3.94565e-06 1.36342 -0.872869 -0.872871 2543 2544001 3.93385e-06 1.36342 -0.872869 -0.872871 2544 2545001 3.92208e-06 1.36351 -0.872867 -0.872871 2545 2546001 3.91035e-06 1.36351 -0.872867 -0.872871 2546 2547001 3.89865e-06 1.36351 -0.872867 -0.872871 2547 2548001 3.88699e-06 1.36351 -0.872867 -0.872871 2548 2549001 3.87537e-06 1.36351 -0.872867 -0.872871 2549 2550001 3.86377e-06 1.3627 -0.872866 -0.872871 2550 2551001 3.85222e-06 1.3627 -0.872866 -0.872871 2551 2552001 3.8407e-06 1.36323 -0.872871 -0.872871 2552 2553001 3.82921e-06 1.36327 -0.872871 -0.872871 2553 2554001 3.81775e-06 1.36327 -0.872871 -0.872871 2554 2555001 3.80634e-06 1.36327 -0.872871 -0.872871 2555 2556001 3.79495e-06 1.36327 -0.872871 -0.872871 2556 2557001 3.7836e-06 1.36327 -0.872871 -0.872871 2557 2558001 3.77228e-06 1.36327 -0.872871 -0.872871 2558 2559001 3.761e-06 1.36322 -0.872871 -0.872871 2559 2560001 3.74975e-06 1.36322 -0.872871 -0.872871 2560 2561001 3.73854e-06 1.36286 -0.872869 -0.872871 2561 2562001 3.72735e-06 1.36286 -0.872869 -0.872871 2562 2563001 3.7162e-06 1.36286 -0.872869 -0.872871 2563 2564001 3.70509e-06 1.36286 -0.872869 -0.872871 2564 2565001 3.69401e-06 1.36286 -0.872869 -0.872871 2565 2566001 3.68296e-06 1.36286 -0.872869 -0.872871 2566 2567001 3.67194e-06 1.36286 -0.872869 -0.872871 2567 2568001 3.66096e-06 1.36286 -0.872869 -0.872871 2568 2569001 3.65001e-06 1.36286 -0.872869 -0.872871 2569 2570001 3.63909e-06 1.36286 -0.872869 -0.872871 2570 2571001 3.62821e-06 1.36286 -0.872869 -0.872871 2571 2572001 3.61736e-06 1.36286 -0.872869 -0.872871 2572 2573001 3.60654e-06 1.36286 -0.872869 -0.872871 2573 2574001 3.59575e-06 1.36286 -0.872869 -0.872871 2574 2575001 3.58499e-06 1.36306 -0.872871 -0.872871 2575 2576001 3.57427e-06 1.36311 -0.872871 -0.872871 2576 2577001 3.56358e-06 1.36311 -0.872871 -0.872871 2577 2578001 3.55292e-06 1.36311 -0.872871 -0.872871 2578 2579001 3.54229e-06 1.36311 -0.872871 -0.872871 2579 2580001 3.5317e-06 1.36311 -0.872871 -0.872871 2580 2581001 3.52114e-06 1.36311 -0.872871 -0.872871 2581 2582001 3.5106e-06 1.36311 -0.872871 -0.872871 2582 2583001 3.5001e-06 1.36311 -0.872871 -0.872871 2583 2584001 3.48963e-06 1.36311 -0.872871 -0.872871 2584 2585001 3.4792e-06 1.36342 -0.872869 -0.872871 2585 2586001 3.46879e-06 1.36342 -0.872869 -0.872871 2586 2587001 3.45842e-06 1.36342 -0.872869 -0.872871 2587 2588001 3.44807e-06 1.36336 -0.87287 -0.872871 2588 2589001 3.43776e-06 1.3631 -0.872871 -0.872871 2589 2590001 3.42748e-06 1.3631 -0.872871 -0.872871 2590 2591001 3.41722e-06 1.3631 -0.872871 -0.872871 2591 2592001 3.407e-06 1.3631 -0.872871 -0.872871 2592 2593001 3.39681e-06 1.3631 -0.872871 -0.872871 2593 2594001 3.38665e-06 1.36282 -0.872868 -0.872871 2594 2595001 3.37652e-06 1.36282 -0.872868 -0.872871 2595 2596001 3.36642e-06 1.36282 -0.872868 -0.872871 2596 2597001 3.35635e-06 1.36282 -0.872868 -0.872871 2597 2598001 3.34632e-06 1.36282 -0.872868 -0.872871 2598 2599001 3.33631e-06 1.36282 -0.872868 -0.872871 2599 2600001 3.32633e-06 1.36282 -0.872868 -0.872871 2600 2601001 3.31638e-06 1.36337 -0.872869 -0.872871 2601 2602001 3.30646e-06 1.36337 -0.872869 -0.872871 2602 2603001 3.29657e-06 1.36337 -0.872869 -0.872871 2603 2604001 3.28671e-06 1.36337 -0.872869 -0.872871 2604 2605001 3.27688e-06 1.36337 -0.872869 -0.872871 2605 2606001 3.26708e-06 1.36337 -0.872869 -0.872871 2606 2607001 3.25731e-06 1.36337 -0.872869 -0.872871 2607 2608001 3.24756e-06 1.36337 -0.872869 -0.872871 2608 2609001 3.23785e-06 1.36337 -0.872869 -0.872871 2609 2610001 3.22817e-06 1.36337 -0.872869 -0.872871 2610 2611001 3.21851e-06 1.36279 -0.872868 -0.872871 2611 2612001 3.20888e-06 1.3633 -0.87287 -0.872871 2612 2613001 3.19929e-06 1.3633 -0.87287 -0.872871 2613 2614001 3.18972e-06 1.3633 -0.87287 -0.872871 2614 2615001 3.18018e-06 1.36287 -0.872869 -0.872871 2615 2616001 3.17066e-06 1.36322 -0.872871 -0.872871 2616 2617001 3.16118e-06 1.36309 -0.872871 -0.872871 2617 2618001 3.15172e-06 1.36309 -0.872871 -0.872871 2618 2619001 3.1423e-06 1.36309 -0.872871 -0.872871 2619 2620001 3.1329e-06 1.36309 -0.872871 -0.872871 2620 2621001 3.12353e-06 1.36309 -0.872871 -0.872871 2621 2622001 3.11419e-06 1.36309 -0.872871 -0.872871 2622 2623001 3.10487e-06 1.36309 -0.872871 -0.872871 2623 2624001 3.09558e-06 1.36309 -0.872871 -0.872871 2624 2625001 3.08633e-06 1.36309 -0.872871 -0.872871 2625 2626001 3.07709e-06 1.36309 -0.872871 -0.872871 2626 2627001 3.06789e-06 1.36309 -0.872871 -0.872871 2627 2628001 3.05871e-06 1.36309 -0.872871 -0.872871 2628 2629001 3.04957e-06 1.36309 -0.872871 -0.872871 2629 2630001 3.04044e-06 1.36309 -0.872871 -0.872871 2630 2631001 3.03135e-06 1.36309 -0.872871 -0.872871 2631 2632001 3.02228e-06 1.36309 -0.872871 -0.872871 2632 2633001 3.01324e-06 1.36309 -0.872871 -0.872871 2633 2634001 3.00423e-06 1.36309 -0.872871 -0.872871 2634 2635001 2.99525e-06 1.36309 -0.872871 -0.872871 2635 2636001 2.98629e-06 1.36309 -0.872871 -0.872871 2636 2637001 2.97735e-06 1.36309 -0.872871 -0.872871 2637 2638001 2.96845e-06 1.36309 -0.872871 -0.872871 2638 2639001 2.95957e-06 1.36309 -0.872871 -0.872871 2639 2640001 2.95072e-06 1.36311 -0.872871 -0.872871 2640 2641001 2.94189e-06 1.36311 -0.872871 -0.872871 2641 2642001 2.93309e-06 1.36311 -0.872871 -0.872871 2642 2643001 2.92432e-06 1.36299 -0.872871 -0.872871 2643 2644001 2.91557e-06 1.36299 -0.872871 -0.872871 2644 2645001 2.90685e-06 1.36299 -0.872871 -0.872871 2645 2646001 2.89816e-06 1.36299 -0.872871 -0.872871 2646 2647001 2.88949e-06 1.36299 -0.872871 -0.872871 2647 2648001 2.88085e-06 1.36328 -0.872871 -0.872871 2648 2649001 2.87223e-06 1.36328 -0.872871 -0.872871 2649 2650001 2.86364e-06 1.36328 -0.872871 -0.872871 2650 2651001 2.85507e-06 1.36356 -0.872866 -0.872871 2651 2652001 2.84654e-06 1.36356 -0.872866 -0.872871 2652 2653001 2.83802e-06 1.36356 -0.872866 -0.872871 2653 2654001 2.82953e-06 1.36356 -0.872866 -0.872871 2654 2655001 2.82107e-06 1.36345 -0.872868 -0.872871 2655 2656001 2.81263e-06 1.36345 -0.872868 -0.872871 2656 2657001 2.80422e-06 1.36345 -0.872868 -0.872871 2657 2658001 2.79583e-06 1.36345 -0.872868 -0.872871 2658 2659001 2.78747e-06 1.36345 -0.872868 -0.872871 2659 2660001 2.77913e-06 1.36296 -0.87287 -0.872871 2660 2661001 2.77082e-06 1.36296 -0.87287 -0.872871 2661 2662001 2.76253e-06 1.36289 -0.872869 -0.872871 2662 2663001 2.75427e-06 1.36289 -0.872869 -0.872871 2663 2664001 2.74603e-06 1.36289 -0.872869 -0.872871 2664 2665001 2.73782e-06 1.36289 -0.872869 -0.872871 2665 2666001 2.72963e-06 1.36289 -0.872869 -0.872871 2666 2667001 2.72146e-06 1.36306 -0.872871 -0.872871 2667 2668001 2.71332e-06 1.363 -0.872871 -0.872871 2668 2669001 2.70521e-06 1.36303 -0.872871 -0.872871 2669 2670001 2.69712e-06 1.36303 -0.872871 -0.872871 2670 2671001 2.68905e-06 1.36315 -0.872871 -0.872871 2671 2672001 2.68101e-06 1.36315 -0.872871 -0.872871 2672 2673001 2.67299e-06 1.36314 -0.872871 -0.872871 2673 2674001 2.66499e-06 1.36314 -0.872871 -0.872871 2674 2675001 2.65702e-06 1.36293 -0.87287 -0.872871 2675 2676001 2.64907e-06 1.36348 -0.872868 -0.872871 2676 2677001 2.64115e-06 1.36348 -0.872868 -0.872871 2677 2678001 2.63325e-06 1.36305 -0.872871 -0.872871 2678 2679001 2.62538e-06 1.36305 -0.872871 -0.872871 2679 2680001 2.61752e-06 1.36305 -0.872871 -0.872871 2680 2681001 2.60969e-06 1.36305 -0.872871 -0.872871 2681 2682001 2.60189e-06 1.36326 -0.872871 -0.872871 2682 2683001 2.59411e-06 1.36358 -0.872865 -0.872871 2683 2684001 2.58635e-06 1.36358 -0.872865 -0.872871 2684 2685001 2.57861e-06 1.36266 -0.872865 -0.872871 2685 2686001 2.5709e-06 1.36266 -0.872865 -0.872871 2686 2687001 2.56321e-06 1.36266 -0.872865 -0.872871 2687 2688001 2.55554e-06 1.36317 -0.872871 -0.872871 2688 2689001 2.5479e-06 1.36317 -0.872871 -0.872871 2689 2690001 2.54028e-06 1.36317 -0.872871 -0.872871 2690 2691001 2.53268e-06 1.36317 -0.872871 -0.872871 2691 2692001 2.5251e-06 1.36317 -0.872871 -0.872871 2692 2693001 2.51755e-06 1.36317 -0.872871 -0.872871 2693 2694001 2.51002e-06 1.36317 -0.872871 -0.872871 2694 2695001 2.50251e-06 1.36317 -0.872871 -0.872871 2695 2696001 2.49503e-06 1.36317 -0.872871 -0.872871 2696 2697001 2.48757e-06 1.36317 -0.872871 -0.872871 2697 2698001 2.48013e-06 1.36294 -0.87287 -0.872871 2698 2699001 2.47271e-06 1.36322 -0.872871 -0.872871 2699 2700001 2.46531e-06 1.36322 -0.872871 -0.872871 2700 2701001 2.45794e-06 1.36322 -0.872871 -0.872871 2701 2702001 2.45059e-06 1.36322 -0.872871 -0.872871 2702 2703001 2.44326e-06 1.36322 -0.872871 -0.872871 2703 2704001 2.43595e-06 1.36322 -0.872871 -0.872871 2704 2705001 2.42866e-06 1.36322 -0.872871 -0.872871 2705 2706001 2.4214e-06 1.36301 -0.872871 -0.872871 2706 2707001 2.41416e-06 1.36301 -0.872871 -0.872871 2707 2708001 2.40693e-06 1.36301 -0.872871 -0.872871 2708 2709001 2.39974e-06 1.36301 -0.872871 -0.872871 2709 2710001 2.39256e-06 1.36328 -0.872871 -0.872871 2710 2711001 2.3854e-06 1.36298 -0.872871 -0.872871 2711 2712001 2.37827e-06 1.36298 -0.872871 -0.872871 2712 2713001 2.37115e-06 1.36298 -0.872871 -0.872871 2713 2714001 2.36406e-06 1.36298 -0.872871 -0.872871 2714 2715001 2.35699e-06 1.36298 -0.872871 -0.872871 2715 2716001 2.34994e-06 1.36298 -0.872871 -0.872871 2716 2717001 2.34291e-06 1.36298 -0.872871 -0.872871 2717 2718001 2.3359e-06 1.36291 -0.87287 -0.872871 2718 2719001 2.32892e-06 1.36308 -0.872871 -0.872871 2719 2720001 2.32195e-06 1.36327 -0.872871 -0.872871 2720 2721001 2.31501e-06 1.36327 -0.872871 -0.872871 2721 2722001 2.30808e-06 1.36327 -0.872871 -0.872871 2722 2723001 2.30118e-06 1.36336 -0.87287 -0.872871 2723 2724001 2.2943e-06 1.36337 -0.87287 -0.872871 2724 2725001 2.28743e-06 1.36309 -0.872871 -0.872871 2725 2726001 2.28059e-06 1.36309 -0.872871 -0.872871 2726 2727001 2.27377e-06 1.36324 -0.872871 -0.872871 2727 2728001 2.26697e-06 1.36324 -0.872871 -0.872871 2728 2729001 2.26019e-06 1.36268 -0.872865 -0.872871 2729 2730001 2.25343e-06 1.36305 -0.872871 -0.872871 2730 2731001 2.24669e-06 1.36305 -0.872871 -0.872871 2731 2732001 2.23997e-06 1.36305 -0.872871 -0.872871 2732 2733001 2.23327e-06 1.36305 -0.872871 -0.872871 2733 2734001 2.22659e-06 1.36305 -0.872871 -0.872871 2734 2735001 2.21993e-06 1.36305 -0.872871 -0.872871 2735 2736001 2.21329e-06 1.36305 -0.872871 -0.872871 2736 2737001 2.20667e-06 1.36323 -0.872871 -0.872871 2737 2738001 2.20007e-06 1.36323 -0.872871 -0.872871 2738 2739001 2.19349e-06 1.36323 -0.872871 -0.872871 2739 2740001 2.18693e-06 1.36294 -0.87287 -0.872871 2740 2741001 2.18039e-06 1.36294 -0.87287 -0.872871 2741 2742001 2.17387e-06 1.36294 -0.87287 -0.872871 2742 2743001 2.16736e-06 1.36294 -0.87287 -0.872871 2743 2744001 2.16088e-06 1.3629 -0.87287 -0.872871 2744 2745001 2.15442e-06 1.36279 -0.872868 -0.872871 2745 2746001 2.14797e-06 1.36279 -0.872868 -0.872871 2746 2747001 2.14155e-06 1.36281 -0.872868 -0.872871 2747 2748001 2.13514e-06 1.36281 -0.872868 -0.872871 2748 2749001 2.12876e-06 1.36281 -0.872868 -0.872871 2749 2750001 2.12239e-06 1.36281 -0.872868 -0.872871 2750 2751001 2.11604e-06 1.36281 -0.872868 -0.872871 2751 2752001 2.10971e-06 1.36281 -0.872868 -0.872871 2752 2753001 2.1034e-06 1.36286 -0.872869 -0.872871 2753 2754001 2.09711e-06 1.36286 -0.872869 -0.872871 2754 2755001 2.09084e-06 1.36286 -0.872869 -0.872871 2755 2756001 2.08458e-06 1.36309 -0.872871 -0.872871 2756 2757001 2.07835e-06 1.36309 -0.872871 -0.872871 2757 2758001 2.07213e-06 1.36338 -0.872869 -0.872871 2758 2759001 2.06594e-06 1.36344 -0.872868 -0.872871 2759 2760001 2.05976e-06 1.36317 -0.872871 -0.872871 2760 2761001 2.0536e-06 1.36317 -0.872871 -0.872871 2761 2762001 2.04745e-06 1.36326 -0.872871 -0.872871 2762 2763001 2.04133e-06 1.36326 -0.872871 -0.872871 2763 2764001 2.03522e-06 1.36317 -0.872871 -0.872871 2764 2765001 2.02914e-06 1.36317 -0.872871 -0.872871 2765 2766001 2.02307e-06 1.36317 -0.872871 -0.872871 2766 2767001 2.01702e-06 1.36328 -0.872871 -0.872871 2767 2768001 2.01098e-06 1.36323 -0.872871 -0.872871 2768 2769001 2.00497e-06 1.36323 -0.872871 -0.872871 gsl/doc/examples/rstat.c0000644000175000017500000000310613536674414013616 0ustar eddedd#include #include int main(void) { double data[5] = {17.2, 18.1, 16.5, 18.3, 12.6}; double mean, variance, largest, smallest, sd, rms, sd_mean, median, skew, kurtosis; gsl_rstat_workspace *rstat_p = gsl_rstat_alloc(); size_t i, n; /* add data to rstat accumulator */ for (i = 0; i < 5; ++i) gsl_rstat_add(data[i], rstat_p); mean = gsl_rstat_mean(rstat_p); variance = gsl_rstat_variance(rstat_p); largest = gsl_rstat_max(rstat_p); smallest = gsl_rstat_min(rstat_p); median = gsl_rstat_median(rstat_p); sd = gsl_rstat_sd(rstat_p); sd_mean = gsl_rstat_sd_mean(rstat_p); skew = gsl_rstat_skew(rstat_p); rms = gsl_rstat_rms(rstat_p); kurtosis = gsl_rstat_kurtosis(rstat_p); n = gsl_rstat_n(rstat_p); printf ("The dataset is %g, %g, %g, %g, %g\n", data[0], data[1], data[2], data[3], data[4]); printf ("The sample mean is %g\n", mean); printf ("The estimated variance is %g\n", variance); printf ("The largest value is %g\n", largest); printf ("The smallest value is %g\n", smallest); printf( "The median is %g\n", median); printf( "The standard deviation is %g\n", sd); printf( "The root mean square is %g\n", rms); printf( "The standard devation of the mean is %g\n", sd_mean); printf( "The skew is %g\n", skew); printf( "The kurtosis %g\n", kurtosis); printf( "There are %zu items in the accumulator\n", n); gsl_rstat_reset(rstat_p); n = gsl_rstat_n(rstat_p); printf( "There are %zu items in the accumulator\n", n); gsl_rstat_free(rstat_p); return 0; } gsl/doc/examples/cdf.txt0000644000175000017500000000016013536674414013607 0ustar eddeddprob(x < 2.000000) = 0.977250 prob(x > 2.000000) = 0.022750 Pinv(0.977250) = 2.000000 Qinv(0.022750) = 2.000000 gsl/doc/examples/stat.c0000644000175000017500000000121213536674414013430 0ustar eddedd#include #include int main(void) { double data[5] = {17.2, 18.1, 16.5, 18.3, 12.6}; double mean, variance, largest, smallest; mean = gsl_stats_mean(data, 1, 5); variance = gsl_stats_variance(data, 1, 5); largest = gsl_stats_max(data, 1, 5); smallest = gsl_stats_min(data, 1, 5); printf ("The dataset is %g, %g, %g, %g, %g\n", data[0], data[1], data[2], data[3], data[4]); printf ("The sample mean is %g\n", mean); printf ("The estimated variance is %g\n", variance); printf ("The largest value is %g\n", largest); printf ("The smallest value is %g\n", smallest); return 0; } gsl/doc/examples/rquantile.c0000644000175000017500000000377013536674414014474 0ustar eddedd#include #include #include #include #include #include #include int main(void) { const size_t N = 10000; double *data = malloc(N * sizeof(double)); gsl_rstat_quantile_workspace *work_25 = gsl_rstat_quantile_alloc(0.25); gsl_rstat_quantile_workspace *work_50 = gsl_rstat_quantile_alloc(0.5); gsl_rstat_quantile_workspace *work_75 = gsl_rstat_quantile_alloc(0.75); gsl_rng *r = gsl_rng_alloc(gsl_rng_default); double exact_p25, exact_p50, exact_p75; double val_p25, val_p50, val_p75; size_t i; /* add data to quantile accumulators; also store data for exact * comparisons */ for (i = 0; i < N; ++i) { data[i] = gsl_ran_rayleigh(r, 1.0); gsl_rstat_quantile_add(data[i], work_25); gsl_rstat_quantile_add(data[i], work_50); gsl_rstat_quantile_add(data[i], work_75); } /* exact values */ gsl_sort(data, 1, N); exact_p25 = gsl_stats_quantile_from_sorted_data(data, 1, N, 0.25); exact_p50 = gsl_stats_quantile_from_sorted_data(data, 1, N, 0.5); exact_p75 = gsl_stats_quantile_from_sorted_data(data, 1, N, 0.75); /* estimated values */ val_p25 = gsl_rstat_quantile_get(work_25); val_p50 = gsl_rstat_quantile_get(work_50); val_p75 = gsl_rstat_quantile_get(work_75); printf ("The dataset is %g, %g, %g, %g, %g, ...\n", data[0], data[1], data[2], data[3], data[4]); printf ("0.25 quartile: exact = %.5f, estimated = %.5f, error = %.6e\n", exact_p25, val_p25, (val_p25 - exact_p25) / exact_p25); printf ("0.50 quartile: exact = %.5f, estimated = %.5f, error = %.6e\n", exact_p50, val_p50, (val_p50 - exact_p50) / exact_p50); printf ("0.75 quartile: exact = %.5f, estimated = %.5f, error = %.6e\n", exact_p75, val_p75, (val_p75 - exact_p75) / exact_p75); gsl_rstat_quantile_free(work_25); gsl_rstat_quantile_free(work_50); gsl_rstat_quantile_free(work_75); gsl_rng_free(r); free(data); return 0; } gsl/doc/examples/qrng.txt0000644000175000017500000004000013536674414014017 0ustar eddedd0.50000 0.50000 0.75000 0.25000 0.25000 0.75000 0.37500 0.37500 0.87500 0.87500 0.62500 0.12500 0.12500 0.62500 0.18750 0.31250 0.68750 0.81250 0.93750 0.06250 0.43750 0.56250 0.31250 0.18750 0.81250 0.68750 0.56250 0.43750 0.06250 0.93750 0.09375 0.46875 0.59375 0.96875 0.84375 0.21875 0.34375 0.71875 0.46875 0.09375 0.96875 0.59375 0.71875 0.34375 0.21875 0.84375 0.15625 0.15625 0.65625 0.65625 0.90625 0.40625 0.40625 0.90625 0.28125 0.28125 0.78125 0.78125 0.53125 0.03125 0.03125 0.53125 0.04688 0.26562 0.54688 0.76562 0.79688 0.01562 0.29688 0.51562 0.42188 0.14062 0.92188 0.64062 0.67188 0.39062 0.17188 0.89062 0.23438 0.07812 0.73438 0.57812 0.98438 0.32812 0.48438 0.82812 0.35938 0.45312 0.85938 0.95312 0.60938 0.20312 0.10938 0.70312 0.07812 0.23438 0.57812 0.73438 0.82812 0.48438 0.32812 0.98438 0.45312 0.35938 0.95312 0.85938 0.70312 0.10938 0.20312 0.60938 0.14062 0.42188 0.64062 0.92188 0.89062 0.17188 0.39062 0.67188 0.26562 0.04688 0.76562 0.54688 0.51562 0.29688 0.01562 0.79688 0.02344 0.39844 0.52344 0.89844 0.77344 0.14844 0.27344 0.64844 0.39844 0.02344 0.89844 0.52344 0.64844 0.27344 0.14844 0.77344 0.21094 0.21094 0.71094 0.71094 0.96094 0.46094 0.46094 0.96094 0.33594 0.33594 0.83594 0.83594 0.58594 0.08594 0.08594 0.58594 0.11719 0.11719 0.61719 0.61719 0.86719 0.36719 0.36719 0.86719 0.49219 0.49219 0.99219 0.99219 0.74219 0.24219 0.24219 0.74219 0.17969 0.30469 0.67969 0.80469 0.92969 0.05469 0.42969 0.55469 0.30469 0.17969 0.80469 0.67969 0.55469 0.42969 0.05469 0.92969 0.03906 0.13281 0.53906 0.63281 0.78906 0.38281 0.28906 0.88281 0.41406 0.25781 0.91406 0.75781 0.66406 0.00781 0.16406 0.50781 0.22656 0.44531 0.72656 0.94531 0.97656 0.19531 0.47656 0.69531 0.35156 0.07031 0.85156 0.57031 0.60156 0.32031 0.10156 0.82031 0.07031 0.35156 0.57031 0.85156 0.82031 0.10156 0.32031 0.60156 0.44531 0.22656 0.94531 0.72656 0.69531 0.47656 0.19531 0.97656 0.13281 0.03906 0.63281 0.53906 0.88281 0.28906 0.38281 0.78906 0.25781 0.41406 0.75781 0.91406 0.50781 0.16406 0.00781 0.66406 0.01172 0.33203 0.51172 0.83203 0.76172 0.08203 0.26172 0.58203 0.38672 0.20703 0.88672 0.70703 0.63672 0.45703 0.13672 0.95703 0.19922 0.01953 0.69922 0.51953 0.94922 0.26953 0.44922 0.76953 0.32422 0.39453 0.82422 0.89453 0.57422 0.14453 0.07422 0.64453 0.10547 0.17578 0.60547 0.67578 0.85547 0.42578 0.35547 0.92578 0.48047 0.30078 0.98047 0.80078 0.73047 0.05078 0.23047 0.55078 0.16797 0.48828 0.66797 0.98828 0.91797 0.23828 0.41797 0.73828 0.29297 0.11328 0.79297 0.61328 0.54297 0.36328 0.04297 0.86328 0.05859 0.06641 0.55859 0.56641 0.80859 0.31641 0.30859 0.81641 0.43359 0.44141 0.93359 0.94141 0.68359 0.19141 0.18359 0.69141 0.24609 0.25391 0.74609 0.75391 0.99609 0.00391 0.49609 0.50391 0.37109 0.12891 0.87109 0.62891 0.62109 0.37891 0.12109 0.87891 0.08984 0.41016 0.58984 0.91016 0.83984 0.16016 0.33984 0.66016 0.46484 0.03516 0.96484 0.53516 0.71484 0.28516 0.21484 0.78516 0.15234 0.22266 0.65234 0.72266 0.90234 0.47266 0.40234 0.97266 0.27734 0.34766 0.77734 0.84766 0.52734 0.09766 0.02734 0.59766 0.01953 0.19922 0.51953 0.69922 0.76953 0.44922 0.26953 0.94922 0.39453 0.32422 0.89453 0.82422 0.64453 0.07422 0.14453 0.57422 0.20703 0.38672 0.70703 0.88672 0.95703 0.13672 0.45703 0.63672 0.33203 0.01172 0.83203 0.51172 0.58203 0.26172 0.08203 0.76172 0.11328 0.29297 0.61328 0.79297 0.86328 0.04297 0.36328 0.54297 0.48828 0.16797 0.98828 0.66797 0.73828 0.41797 0.23828 0.91797 0.17578 0.10547 0.67578 0.60547 0.92578 0.35547 0.42578 0.85547 0.30078 0.48047 0.80078 0.98047 0.55078 0.23047 0.05078 0.73047 0.03516 0.46484 0.53516 0.96484 0.78516 0.21484 0.28516 0.71484 0.41016 0.08984 0.91016 0.58984 0.66016 0.33984 0.16016 0.83984 0.22266 0.15234 0.72266 0.65234 0.97266 0.40234 0.47266 0.90234 0.34766 0.27734 0.84766 0.77734 0.59766 0.02734 0.09766 0.52734 0.06641 0.05859 0.56641 0.55859 0.81641 0.30859 0.31641 0.80859 0.44141 0.43359 0.94141 0.93359 0.69141 0.18359 0.19141 0.68359 0.12891 0.37109 0.62891 0.87109 0.87891 0.12109 0.37891 0.62109 0.25391 0.24609 0.75391 0.74609 0.50391 0.49609 0.00391 0.99609 0.00586 0.49805 0.50586 0.99805 0.75586 0.24805 0.25586 0.74805 0.38086 0.12305 0.88086 0.62305 0.63086 0.37305 0.13086 0.87305 0.19336 0.18555 0.69336 0.68555 0.94336 0.43555 0.44336 0.93555 0.31836 0.31055 0.81836 0.81055 0.56836 0.06055 0.06836 0.56055 0.09961 0.02930 0.59961 0.52930 0.84961 0.27930 0.34961 0.77930 0.47461 0.40430 0.97461 0.90430 0.72461 0.15430 0.22461 0.65430 0.16211 0.34180 0.66211 0.84180 0.91211 0.09180 0.41211 0.59180 0.28711 0.21680 0.78711 0.71680 0.53711 0.46680 0.03711 0.96680 0.05273 0.23242 0.55273 0.73242 0.80273 0.48242 0.30273 0.98242 0.42773 0.35742 0.92773 0.85742 0.67773 0.10742 0.17773 0.60742 0.24023 0.41992 0.74023 0.91992 0.99023 0.16992 0.49023 0.66992 0.36523 0.04492 0.86523 0.54492 0.61523 0.29492 0.11523 0.79492 0.08398 0.26367 0.58398 0.76367 0.83398 0.01367 0.33398 0.51367 0.45898 0.13867 0.95898 0.63867 0.70898 0.38867 0.20898 0.88867 0.14648 0.07617 0.64648 0.57617 0.89648 0.32617 0.39648 0.82617 0.27148 0.45117 0.77148 0.95117 0.52148 0.20117 0.02148 0.70117 0.02930 0.09961 0.52930 0.59961 0.77930 0.34961 0.27930 0.84961 0.40430 0.47461 0.90430 0.97461 0.65430 0.22461 0.15430 0.72461 0.21680 0.28711 0.71680 0.78711 0.96680 0.03711 0.46680 0.53711 0.34180 0.16211 0.84180 0.66211 0.59180 0.41211 0.09180 0.91211 0.12305 0.38086 0.62305 0.88086 0.87305 0.13086 0.37305 0.63086 0.49805 0.00586 0.99805 0.50586 0.74805 0.25586 0.24805 0.75586 0.18555 0.19336 0.68555 0.69336 0.93555 0.44336 0.43555 0.94336 0.31055 0.31836 0.81055 0.81836 0.56055 0.06836 0.06055 0.56836 0.04492 0.36523 0.54492 0.86523 0.79492 0.11523 0.29492 0.61523 0.41992 0.24023 0.91992 0.74023 0.66992 0.49023 0.16992 0.99023 0.23242 0.05273 0.73242 0.55273 0.98242 0.30273 0.48242 0.80273 0.35742 0.42773 0.85742 0.92773 0.60742 0.17773 0.10742 0.67773 0.07617 0.14648 0.57617 0.64648 0.82617 0.39648 0.32617 0.89648 0.45117 0.27148 0.95117 0.77148 0.70117 0.02148 0.20117 0.52148 0.13867 0.45898 0.63867 0.95898 0.88867 0.20898 0.38867 0.70898 0.26367 0.08398 0.76367 0.58398 0.51367 0.33398 0.01367 0.83398 0.00977 0.16602 0.50977 0.66602 0.75977 0.41602 0.25977 0.91602 0.38477 0.29102 0.88477 0.79102 0.63477 0.04102 0.13477 0.54102 0.19727 0.47852 0.69727 0.97852 0.94727 0.22852 0.44727 0.72852 0.32227 0.10352 0.82227 0.60352 0.57227 0.35352 0.07227 0.85352 0.10352 0.32227 0.60352 0.82227 0.85352 0.07227 0.35352 0.57227 0.47852 0.19727 0.97852 0.69727 0.72852 0.44727 0.22852 0.94727 0.16602 0.00977 0.66602 0.50977 0.91602 0.25977 0.41602 0.75977 0.29102 0.38477 0.79102 0.88477 0.54102 0.13477 0.04102 0.63477 0.05664 0.43164 0.55664 0.93164 0.80664 0.18164 0.30664 0.68164 0.43164 0.05664 0.93164 0.55664 0.68164 0.30664 0.18164 0.80664 0.24414 0.24414 0.74414 0.74414 0.99414 0.49414 0.49414 0.99414 0.36914 0.36914 0.86914 0.86914 0.61914 0.11914 0.11914 0.61914 0.08789 0.08789 0.58789 0.58789 0.83789 0.33789 0.33789 0.83789 0.46289 0.46289 0.96289 0.96289 0.71289 0.21289 0.21289 0.71289 0.15039 0.27539 0.65039 0.77539 0.90039 0.02539 0.40039 0.52539 0.27539 0.15039 0.77539 0.65039 0.52539 0.40039 0.02539 0.90039 0.01758 0.29883 0.51758 0.79883 0.76758 0.04883 0.26758 0.54883 0.39258 0.17383 0.89258 0.67383 0.64258 0.42383 0.14258 0.92383 0.20508 0.11133 0.70508 0.61133 0.95508 0.36133 0.45508 0.86133 0.33008 0.48633 0.83008 0.98633 0.58008 0.23633 0.08008 0.73633 0.11133 0.20508 0.61133 0.70508 0.86133 0.45508 0.36133 0.95508 0.48633 0.33008 0.98633 0.83008 0.73633 0.08008 0.23633 0.58008 0.17383 0.39258 0.67383 0.89258 0.92383 0.14258 0.42383 0.64258 0.29883 0.01758 0.79883 0.51758 0.54883 0.26758 0.04883 0.76758 0.03320 0.03320 0.53320 0.53320 0.78320 0.28320 0.28320 0.78320 0.40820 0.40820 0.90820 0.90820 0.65820 0.15820 0.15820 0.65820 0.22070 0.34570 0.72070 0.84570 0.97070 0.09570 0.47070 0.59570 0.34570 0.22070 0.84570 0.72070 0.59570 0.47070 0.09570 0.97070 0.06445 0.43945 0.56445 0.93945 0.81445 0.18945 0.31445 0.68945 0.43945 0.06445 0.93945 0.56445 0.68945 0.31445 0.18945 0.81445 0.12695 0.12695 0.62695 0.62695 0.87695 0.37695 0.37695 0.87695 0.25195 0.25195 0.75195 0.75195 0.50195 0.00195 0.00195 0.50195 0.00293 0.25098 0.50293 0.75098 0.75293 0.00098 0.25293 0.50098 0.37793 0.12598 0.87793 0.62598 0.62793 0.37598 0.12793 0.87598 0.19043 0.06348 0.69043 0.56348 0.94043 0.31348 0.44043 0.81348 0.31543 0.43848 0.81543 0.93848 0.56543 0.18848 0.06543 0.68848 0.09668 0.21973 0.59668 0.71973 0.84668 0.46973 0.34668 0.96973 0.47168 0.34473 0.97168 0.84473 0.72168 0.09473 0.22168 0.59473 0.15918 0.40723 0.65918 0.90723 0.90918 0.15723 0.40918 0.65723 0.28418 0.03223 0.78418 0.53223 0.53418 0.28223 0.03418 0.78223 0.04980 0.01660 0.54980 0.51660 0.79980 0.26660 0.29980 0.76660 0.42480 0.39160 0.92480 0.89160 0.67480 0.14160 0.17480 0.64160 0.23730 0.32910 0.73730 0.82910 0.98730 0.07910 0.48730 0.57910 0.36230 0.20410 0.86230 0.70410 0.61230 0.45410 0.11230 0.95410 0.08105 0.48535 0.58105 0.98535 0.83105 0.23535 0.33105 0.73535 0.45605 0.11035 0.95605 0.61035 0.70605 0.36035 0.20605 0.86035 0.14355 0.17285 0.64355 0.67285 0.89355 0.42285 0.39355 0.92285 0.26855 0.29785 0.76855 0.79785 0.51855 0.04785 0.01855 0.54785 0.02637 0.14941 0.52637 0.64941 0.77637 0.39941 0.27637 0.89941 0.40137 0.27441 0.90137 0.77441 0.65137 0.02441 0.15137 0.52441 0.21387 0.46191 0.71387 0.96191 0.96387 0.21191 0.46387 0.71191 0.33887 0.08691 0.83887 0.58691 0.58887 0.33691 0.08887 0.83691 0.12012 0.36816 0.62012 0.86816 0.87012 0.11816 0.37012 0.61816 0.49512 0.24316 0.99512 0.74316 0.74512 0.49316 0.24512 0.99316 0.18262 0.05566 0.68262 0.55566 0.93262 0.30566 0.43262 0.80566 0.30762 0.43066 0.80762 0.93066 0.55762 0.18066 0.05762 0.68066 0.04199 0.38379 0.54199 0.88379 0.79199 0.13379 0.29199 0.63379 0.41699 0.00879 0.91699 0.50879 0.66699 0.25879 0.16699 0.75879 0.22949 0.19629 0.72949 0.69629 0.97949 0.44629 0.47949 0.94629 0.35449 0.32129 0.85449 0.82129 0.60449 0.07129 0.10449 0.57129 0.07324 0.10254 0.57324 0.60254 0.82324 0.35254 0.32324 0.85254 0.44824 0.47754 0.94824 0.97754 0.69824 0.22754 0.19824 0.72754 0.13574 0.29004 0.63574 0.79004 0.88574 0.04004 0.38574 0.54004 0.26074 0.16504 0.76074 0.66504 0.51074 0.41504 0.01074 0.91504 0.01465 0.08301 0.51465 0.58301 0.76465 0.33301 0.26465 0.83301 0.38965 0.45801 0.88965 0.95801 0.63965 0.20801 0.13965 0.70801 0.20215 0.27051 0.70215 0.77051 0.95215 0.02051 0.45215 0.52051 0.32715 0.14551 0.82715 0.64551 0.57715 0.39551 0.07715 0.89551 0.10840 0.42676 0.60840 0.92676 0.85840 0.17676 0.35840 0.67676 0.48340 0.05176 0.98340 0.55176 0.73340 0.30176 0.23340 0.80176 0.17090 0.23926 0.67090 0.73926 0.92090 0.48926 0.42090 0.98926 0.29590 0.36426 0.79590 0.86426 0.54590 0.11426 0.04590 0.61426 0.06152 0.31738 0.56152 0.81738 0.81152 0.06738 0.31152 0.56738 0.43652 0.19238 0.93652 0.69238 0.68652 0.44238 0.18652 0.94238 0.24902 0.00488 0.74902 0.50488 0.99902 0.25488 0.49902 0.75488 0.37402 0.37988 0.87402 0.87988 0.62402 0.12988 0.12402 0.62988 0.09277 0.16113 0.59277 0.66113 0.84277 0.41113 0.34277 0.91113 0.46777 0.28613 0.96777 0.78613 0.71777 0.03613 0.21777 0.53613 0.15527 0.47363 0.65527 0.97363 0.90527 0.22363 0.40527 0.72363 0.28027 0.09863 0.78027 0.59863 0.53027 0.34863 0.03027 0.84863 0.02246 0.45020 0.52246 0.95020 0.77246 0.20020 0.27246 0.70020 0.39746 0.07520 0.89746 0.57520 0.64746 0.32520 0.14746 0.82520 0.20996 0.13770 0.70996 0.63770 0.95996 0.38770 0.45996 0.88770 0.33496 0.26270 0.83496 0.76270 0.58496 0.01270 0.08496 0.51270 0.11621 0.04395 0.61621 0.54395 0.86621 0.29395 0.36621 0.79395 0.49121 0.41895 0.99121 0.91895 0.74121 0.16895 0.24121 0.66895 0.17871 0.35645 0.67871 0.85645 0.92871 0.10645 0.42871 0.60645 0.30371 0.23145 0.80371 0.73145 0.55371 0.48145 0.05371 0.98145 0.03809 0.21582 0.53809 0.71582 0.78809 0.46582 0.28809 0.96582 0.41309 0.34082 0.91309 0.84082 0.66309 0.09082 0.16309 0.59082 0.22559 0.40332 0.72559 0.90332 0.97559 0.15332 0.47559 0.65332 0.35059 0.02832 0.85059 0.52832 0.60059 0.27832 0.10059 0.77832 0.06934 0.30957 0.56934 0.80957 0.81934 0.05957 0.31934 0.55957 0.44434 0.18457 0.94434 0.68457 0.69434 0.43457 0.19434 0.93457 0.13184 0.12207 0.63184 0.62207 0.88184 0.37207 0.38184 0.87207 0.25684 0.49707 0.75684 0.99707 0.50684 0.24707 0.00684 0.74707 0.00488 0.24902 0.50488 0.74902 0.75488 0.49902 0.25488 0.99902 0.37988 0.37402 0.87988 0.87402 0.62988 0.12402 0.12988 0.62402 0.19238 0.43652 0.69238 0.93652 0.94238 0.18652 0.44238 0.68652 0.31738 0.06152 0.81738 0.56152 0.56738 0.31152 0.06738 0.81152 0.09863 0.28027 0.59863 0.78027 0.84863 0.03027 0.34863 0.53027 0.47363 0.15527 0.97363 0.65527 0.72363 0.40527 0.22363 0.90527 0.16113 0.09277 0.66113 0.59277 0.91113 0.34277 0.41113 0.84277 0.28613 0.46777 0.78613 0.96777 0.53613 0.21777 0.03613 0.71777 0.05176 0.48340 0.55176 0.98340 0.80176 0.23340 0.30176 0.73340 0.42676 0.10840 0.92676 0.60840 0.67676 0.35840 0.17676 0.85840 0.23926 0.17090 0.73926 0.67090 0.98926 0.42090 0.48926 0.92090 0.36426 0.29590 0.86426 0.79590 0.61426 0.04590 0.11426 0.54590 0.08301 0.01465 0.58301 0.51465 0.83301 0.26465 0.33301 0.76465 0.45801 0.38965 0.95801 0.88965 0.70801 0.13965 0.20801 0.63965 0.14551 0.32715 0.64551 0.82715 0.89551 0.07715 0.39551 0.57715 0.27051 0.20215 0.77051 0.70215 0.52051 0.45215 0.02051 0.95215 0.02832 0.35059 0.52832 0.85059 0.77832 0.10059 0.27832 0.60059 0.40332 0.22559 0.90332 0.72559 0.65332 0.47559 0.15332 0.97559 0.21582 0.03809 0.71582 0.53809 0.96582 0.28809 0.46582 0.78809 0.34082 0.41309 0.84082 0.91309 0.59082 0.16309 0.09082 0.66309 0.12207 0.13184 0.62207 0.63184 0.87207 0.38184 0.37207 0.88184 0.49707 0.25684 0.99707 0.75684 0.74707 0.00684 0.24707 0.50684 0.18457 0.44434 0.68457 0.94434 0.93457 0.19434 0.43457 0.69434 0.30957 0.06934 0.80957 0.56934 0.55957 0.31934 0.05957 0.81934 0.04395 0.11621 0.54395 0.61621 0.79395 0.36621 0.29395 0.86621 0.41895 0.49121 0.91895 0.99121 0.66895 0.24121 0.16895 0.74121 0.23145 0.30371 0.73145 0.80371 0.98145 0.05371 0.48145 0.55371 0.35645 0.17871 0.85645 0.67871 0.60645 0.42871 0.10645 0.92871 0.07520 0.39746 0.57520 0.89746 0.82520 0.14746 0.32520 0.64746 0.45020 0.02246 0.95020 0.52246 0.70020 0.27246 0.20020 0.77246 0.13770 0.20996 0.63770 0.70996 0.88770 0.45996 0.38770 0.95996 0.26270 0.33496 0.76270 0.83496 0.51270 0.08496 0.01270 0.58496 0.00879 0.41699 0.50879 0.91699 0.75879 0.16699 0.25879 0.66699 0.38379 0.04199 0.88379 0.54199 0.63379 0.29199 0.13379 0.79199 0.19629 0.22949 0.69629 0.72949 0.94629 0.47949 0.44629 0.97949 0.32129 0.35449 0.82129 0.85449 0.57129 0.10449 0.07129 0.60449 0.10254 0.07324 0.60254 0.57324 0.85254 0.32324 0.35254 0.82324 0.47754 0.44824 0.97754 0.94824 0.72754 0.19824 0.22754 0.69824 0.16504 0.26074 0.66504 0.76074 0.91504 0.01074 0.41504 0.51074 0.29004 0.13574 0.79004 0.63574 0.54004 0.38574 0.04004 0.88574 0.05566 0.18262 0.55566 0.68262 0.80566 0.43262 0.30566 0.93262 0.43066 0.30762 0.93066 0.80762 0.68066 0.05762 0.18066 0.55762 0.24316 0.49512 0.74316 0.99512 0.99316 0.24512 0.49316 0.74512 0.36816 0.12012 0.86816 0.62012 0.61816 0.37012 0.11816 0.87012 0.08691 0.33887 0.58691 0.83887 0.83691 0.08887 0.33691 0.58887 0.46191 0.21387 0.96191 0.71387 0.71191 0.46387 0.21191 0.96387 0.14941 0.02637 0.64941 0.52637 0.89941 0.27637 0.39941 0.77637 0.27441 0.40137 0.77441 0.90137 0.52441 0.15137 0.02441 0.65137 0.01660 0.04980 0.51660 0.54980 0.76660 0.29980 0.26660 0.79980 0.39160 0.42480 0.89160 0.92480 0.64160 0.17480 0.14160 0.67480 0.20410 0.36230 0.70410 0.86230 0.95410 0.11230 0.45410 0.61230 0.32910 0.23730 0.82910 0.73730 0.57910 0.48730 0.07910 0.98730 0.11035 0.45605 0.61035 0.95605 0.86035 0.20605 0.36035 0.70605 0.48535 0.08105 0.98535 0.58105 0.73535 0.33105 0.23535 0.83105 0.17285 0.14355 0.67285 0.64355 0.92285 0.39355 0.42285 0.89355 0.29785 0.26855 0.79785 0.76855 0.54785 0.01855 0.04785 0.51855 0.03223 0.28418 0.53223 0.78418 0.78223 0.03418 0.28223 0.53418 0.40723 0.15918 0.90723 0.65918 0.65723 0.40918 0.15723 0.90918 0.21973 0.09668 0.71973 0.59668 0.96973 0.34668 0.46973 0.84668 0.34473 0.47168 0.84473 0.97168 0.59473 0.22168 0.09473 0.72168 0.06348 0.19043 0.56348 0.69043 0.81348 0.44043 0.31348 0.94043 0.43848 0.31543 0.93848 0.81543 0.68848 0.06543 0.18848 0.56543 0.12598 0.37793 0.62598 0.87793 0.87598 0.12793 0.37598 0.62793 0.25098 0.00293 0.75098 0.50293 0.50098 0.25293 0.00098 0.75293 0.00146 0.37646 gsl/doc/examples/min.c0000644000175000017500000000266013536674414013250 0ustar eddedd#include #include #include #include double fn1 (double x, void * params) { (void)(params); /* avoid unused parameter warning */ return cos(x) + 1.0; } int main (void) { int status; int iter = 0, max_iter = 100; const gsl_min_fminimizer_type *T; gsl_min_fminimizer *s; double m = 2.0, m_expected = M_PI; double a = 0.0, b = 6.0; gsl_function F; F.function = &fn1; F.params = 0; T = gsl_min_fminimizer_brent; s = gsl_min_fminimizer_alloc (T); gsl_min_fminimizer_set (s, &F, m, a, b); printf ("using %s method\n", gsl_min_fminimizer_name (s)); printf ("%5s [%9s, %9s] %9s %10s %9s\n", "iter", "lower", "upper", "min", "err", "err(est)"); printf ("%5d [%.7f, %.7f] %.7f %+.7f %.7f\n", iter, a, b, m, m - m_expected, b - a); do { iter++; status = gsl_min_fminimizer_iterate (s); m = gsl_min_fminimizer_x_minimum (s); a = gsl_min_fminimizer_x_lower (s); b = gsl_min_fminimizer_x_upper (s); status = gsl_min_test_interval (a, b, 0.001, 0.0); if (status == GSL_SUCCESS) printf ("Converged:\n"); printf ("%5d [%.7f, %.7f] " "%.7f %+.7f %.7f\n", iter, a, b, m, m - m_expected, b - a); } while (status == GSL_CONTINUE && iter < max_iter); gsl_min_fminimizer_free (s); return status; } gsl/doc/examples/specfun_e.c0000644000175000017500000000070413536674414014431 0ustar eddedd#include #include #include int main (void) { double x = 5.0; gsl_sf_result result; double expected = -0.17759677131433830434739701; int status = gsl_sf_bessel_J0_e (x, &result); printf ("status = %s\n", gsl_strerror(status)); printf ("J0(5.0) = %.18f\n" " +/- % .18f\n", result.val, result.err); printf ("exact = %.18f\n", expected); return status; } gsl/doc/examples/poisson.txt0000644000175000017500000001077613536674414014563 0ustar eddedd0.010101 3.173059613385e-02 3.172793349807e-02 0.020202 6.342924224708e-02 6.342391965656e-02 0.030303 9.506402049003e-02 9.505604330418e-02 0.040404 1.266030773226e-01 1.265924535737e-01 0.050505 1.580146555880e-01 1.580013959733e-01 0.060606 1.892671264895e-01 1.892512443604e-01 0.070707 2.203290214381e-01 2.203105327865e-01 0.080808 2.511690637386e-01 2.511479871811e-01 0.090909 2.817562000827e-01 2.817325568414e-01 0.101010 3.120596318167e-01 3.120334456985e-01 0.111111 3.420488459536e-01 3.420201433257e-01 0.121212 3.716936458969e-01 3.716624556603e-01 0.131313 4.009641818459e-01 4.009305354066e-01 0.141414 4.298309808521e-01 4.297949120892e-01 0.151515 4.582649764957e-01 4.582265217274e-01 0.161616 4.862375381535e-01 4.861967361005e-01 0.171717 5.137204998270e-01 5.136773915734e-01 0.181818 5.406861885033e-01 5.406408174556e-01 0.191919 5.671074520199e-01 5.670598638628e-01 0.202020 5.929576864038e-01 5.929079290546e-01 0.212121 6.182108626605e-01 6.181589862206e-01 0.222222 6.428415529819e-01 6.427876096865e-01 0.232323 6.668249563509e-01 6.667690005163e-01 0.242424 6.901369235131e-01 6.900790114821e-01 0.252525 7.127539812937e-01 7.126941713789e-01 0.262626 7.346533562328e-01 7.345917086575e-01 0.272727 7.558129975160e-01 7.557495743543e-01 0.282828 7.762115991782e-01 7.761464642918e-01 0.292929 7.958286215568e-01 7.957618405308e-01 0.303030 8.146443119729e-01 8.145759520503e-01 0.313131 8.326397246213e-01 8.325698546348e-01 0.323232 8.497967396468e-01 8.497254299495e-01 0.333333 8.660980813897e-01 8.660254037844e-01 0.343434 8.815273357807e-01 8.814533634476e-01 0.353535 8.960689668683e-01 8.959937742913e-01 0.363636 9.097083324629e-01 9.096319953545e-01 0.373737 9.224316988793e-01 9.223542941046e-01 0.383838 9.342262547662e-01 9.341478602651e-01 0.393939 9.450801240055e-01 9.450008187147e-01 0.404040 9.549823776709e-01 9.549022414441e-01 0.414141 9.639230450324e-01 9.638421585599e-01 0.424242 9.718931235958e-01 9.718115683235e-01 0.434343 9.788845881676e-01 9.788024462148e-01 0.444444 9.848903989356e-01 9.848077530122e-01 0.454545 9.899045085574e-01 9.898214418809e-01 0.464646 9.939218682498e-01 9.938384644613e-01 0.474747 9.969384328719e-01 9.968547759519e-01 0.484848 9.989511649991e-01 9.988673391830e-01 0.494949 9.999580379805e-01 9.998741276739e-01 0.505051 9.999580379805e-01 9.998741276739e-01 0.515152 9.989511649991e-01 9.988673391830e-01 0.525253 9.969384328719e-01 9.968547759519e-01 0.535354 9.939218682498e-01 9.938384644613e-01 0.545455 9.899045085574e-01 9.898214418809e-01 0.555556 9.848903989356e-01 9.848077530122e-01 0.565657 9.788845881676e-01 9.788024462148e-01 0.575758 9.718931235958e-01 9.718115683235e-01 0.585859 9.639230450324e-01 9.638421585599e-01 0.595960 9.549823776709e-01 9.549022414441e-01 0.606061 9.450801240055e-01 9.450008187147e-01 0.616162 9.342262547662e-01 9.341478602651e-01 0.626263 9.224316988793e-01 9.223542941046e-01 0.636364 9.097083324629e-01 9.096319953545e-01 0.646465 8.960689668683e-01 8.959937742913e-01 0.656566 8.815273357807e-01 8.814533634476e-01 0.666667 8.660980813897e-01 8.660254037844e-01 0.676768 8.497967396468e-01 8.497254299495e-01 0.686869 8.326397246213e-01 8.325698546348e-01 0.696970 8.146443119729e-01 8.145759520503e-01 0.707071 7.958286215568e-01 7.957618405308e-01 0.717172 7.762115991782e-01 7.761464642918e-01 0.727273 7.558129975160e-01 7.557495743543e-01 0.737374 7.346533562328e-01 7.345917086575e-01 0.747475 7.127539812937e-01 7.126941713789e-01 0.757576 6.901369235131e-01 6.900790114821e-01 0.767677 6.668249563509e-01 6.667690005163e-01 0.777778 6.428415529819e-01 6.427876096865e-01 0.787879 6.182108626605e-01 6.181589862206e-01 0.797980 5.929576864038e-01 5.929079290546e-01 0.808081 5.671074520199e-01 5.670598638628e-01 0.818182 5.406861885033e-01 5.406408174556e-01 0.828283 5.137204998270e-01 5.136773915734e-01 0.838384 4.862375381535e-01 4.861967361005e-01 0.848485 4.582649764957e-01 4.582265217274e-01 0.858586 4.298309808521e-01 4.297949120892e-01 0.868687 4.009641818459e-01 4.009305354066e-01 0.878788 3.716936458969e-01 3.716624556603e-01 0.888889 3.420488459536e-01 3.420201433257e-01 0.898990 3.120596318167e-01 3.120334456985e-01 0.909091 2.817562000827e-01 2.817325568414e-01 0.919192 2.511690637386e-01 2.511479871811e-01 0.929293 2.203290214381e-01 2.203105327865e-01 0.939394 1.892671264895e-01 1.892512443604e-01 0.949495 1.580146555880e-01 1.580013959733e-01 0.959596 1.266030773226e-01 1.265924535737e-01 0.969697 9.506402049003e-02 9.505604330418e-02 0.979798 6.342924224708e-02 6.342391965656e-02 0.989899 3.173059613385e-02 3.172793349807e-02 gsl/doc/examples/rngunif2.txt0000644000175000017500000000012013536674414014601 0ustar eddedd0.33050 0.86631 0.32982 0.67620 0.53391 0.06457 0.16847 0.70229 0.04371 0.86374 gsl/doc/examples/spmatrix.c0000644000175000017500000000332113536675317014332 0ustar eddedd#include #include #include int main() { gsl_spmatrix *A = gsl_spmatrix_alloc(5, 4); /* triplet format */ gsl_spmatrix *B, *C; size_t i, j; /* build the sparse matrix */ gsl_spmatrix_set(A, 0, 2, 3.1); gsl_spmatrix_set(A, 0, 3, 4.6); gsl_spmatrix_set(A, 1, 0, 1.0); gsl_spmatrix_set(A, 1, 2, 7.2); gsl_spmatrix_set(A, 3, 0, 2.1); gsl_spmatrix_set(A, 3, 1, 2.9); gsl_spmatrix_set(A, 3, 3, 8.5); gsl_spmatrix_set(A, 4, 0, 4.1); printf("printing all matrix elements:\n"); for (i = 0; i < 5; ++i) for (j = 0; j < 4; ++j) printf("A(%zu,%zu) = %g\n", i, j, gsl_spmatrix_get(A, i, j)); /* print out elements in triplet format */ printf("matrix in triplet format (i,j,Aij):\n"); gsl_spmatrix_fprintf(stdout, A, "%.1f"); /* convert to compressed column format */ B = gsl_spmatrix_ccs(A); printf("matrix in compressed column format:\n"); printf("i = [ "); for (i = 0; i < B->nz; ++i) printf("%d, ", B->i[i]); printf("]\n"); printf("p = [ "); for (i = 0; i < B->size2 + 1; ++i) printf("%d, ", B->p[i]); printf("]\n"); printf("d = [ "); for (i = 0; i < B->nz; ++i) printf("%g, ", B->data[i]); printf("]\n"); /* convert to compressed row format */ C = gsl_spmatrix_crs(A); printf("matrix in compressed row format:\n"); printf("i = [ "); for (i = 0; i < C->nz; ++i) printf("%d, ", C->i[i]); printf("]\n"); printf("p = [ "); for (i = 0; i < C->size1 + 1; ++i) printf("%d, ", C->p[i]); printf("]\n"); printf("d = [ "); for (i = 0; i < C->nz; ++i) printf("%g, ", C->data[i]); printf("]\n"); gsl_spmatrix_free(A); gsl_spmatrix_free(B); gsl_spmatrix_free(C); return 0; } gsl/doc/examples/rng.txt0000644000175000017500000000007213536674414013643 0ustar eddeddgenerator type: mt19937 seed = 0 first value = 4293858116 gsl/doc/examples/randpoisson.txt0000644000175000017500000000002513536674414015412 0ustar eddedd 2 5 5 2 1 0 3 4 1 1 gsl/doc/examples/integration2.c0000644000175000017500000000207013536674414015065 0ustar eddedd#include #include #include #include double f(double x, void * params) { int m = *(int *) params; double f = gsl_pow_int(x, m) + 1.0; return f; } int main (int argc, char *argv[]) { gsl_integration_fixed_workspace * w; const gsl_integration_fixed_type * T = gsl_integration_fixed_hermite; int m = 10; int n = 6; double expected, result; gsl_function F; if (argc > 1) m = atoi(argv[1]); if (argc > 2) n = atoi(argv[2]); w = gsl_integration_fixed_alloc(T, n, 0.0, 1.0, 0.0, 0.0); F.function = &f; F.params = &m; gsl_integration_fixed(&F, &result, w); if (m % 2 == 0) expected = M_SQRTPI + gsl_sf_gamma(0.5*(1.0 + m)); else expected = M_SQRTPI; printf ("m = %d\n", m); printf ("intervals = %zu\n", gsl_integration_fixed_n(w)); printf ("result = % .18f\n", result); printf ("exact result = % .18f\n", expected); printf ("actual error = % .18f\n", result - expected); gsl_integration_fixed_free (w); return 0; } gsl/doc/examples/nmsimplex.txt0000644000175000017500000000250013536674414015067 0ustar eddedd 1 6.500e+00 5.000e+00 f() = 512.500 size = 1.130 2 5.250e+00 4.000e+00 f() = 290.625 size = 1.409 3 5.250e+00 4.000e+00 f() = 290.625 size = 1.409 4 5.500e+00 1.000e+00 f() = 252.500 size = 1.409 5 2.625e+00 3.500e+00 f() = 101.406 size = 1.847 6 2.625e+00 3.500e+00 f() = 101.406 size = 1.847 7 0.000e+00 3.000e+00 f() = 60.000 size = 1.847 8 2.094e+00 1.875e+00 f() = 42.275 size = 1.321 9 2.578e-01 1.906e+00 f() = 35.684 size = 1.069 10 5.879e-01 2.445e+00 f() = 35.664 size = 0.841 11 1.258e+00 2.025e+00 f() = 30.680 size = 0.476 12 1.258e+00 2.025e+00 f() = 30.680 size = 0.367 13 1.093e+00 1.849e+00 f() = 30.539 size = 0.300 14 8.830e-01 2.004e+00 f() = 30.137 size = 0.172 15 8.830e-01 2.004e+00 f() = 30.137 size = 0.126 16 9.582e-01 2.060e+00 f() = 30.090 size = 0.106 17 1.022e+00 2.004e+00 f() = 30.005 size = 0.063 18 1.022e+00 2.004e+00 f() = 30.005 size = 0.043 19 1.022e+00 2.004e+00 f() = 30.005 size = 0.043 20 1.022e+00 2.004e+00 f() = 30.005 size = 0.027 21 1.022e+00 2.004e+00 f() = 30.005 size = 0.022 22 9.920e-01 1.997e+00 f() = 30.001 size = 0.016 23 9.920e-01 1.997e+00 f() = 30.001 size = 0.013 converged to minimum at 24 9.920e-01 1.997e+00 f() = 30.001 size = 0.008 gsl/doc/examples/intro.c0000644000175000017500000000025513536674414013616 0ustar eddedd#include #include int main (void) { double x = 5.0; double y = gsl_sf_bessel_J0 (x); printf ("J0(%g) = %.18e\n", x, y); return 0; } gsl/doc/examples/rstat.txt0000664000175000017500000000062114057135461014205 0ustar eddeddThe dataset is 17.2, 18.1, 16.5, 18.3, 12.6 The sample mean is 16.54 The estimated variance is 5.373 The largest value is 18.3 The smallest value is 12.6 The median is 17.2 The standard deviation is 2.31797 The root mean square is 16.6694 The standard devation of the mean is 1.03663 The skew is -0.829058 The kurtosis -1.2217 There are 5 items in the accumulator There are 0 items in the accumulator gsl/doc/examples/gaussfilt.txt0000644000175000017500000011635513536674414015072 0ustar eddedd8.824969e-01 1.110900e-02 1.928750e-22 8.911879e-01 1.580862e-02 9.720985e-21 8.996046e-01 2.217477e-02 4.175010e-19 9.077375e-01 3.065989e-02 1.527980e-17 9.155777e-01 4.178575e-02 4.765305e-16 9.231163e-01 5.613476e-02 1.266417e-14 9.303448e-01 7.433302e-02 2.867975e-13 9.372549e-01 9.702370e-02 5.534610e-12 9.438387e-01 1.248303e-01 9.101471e-11 9.500886e-01 1.583100e-01 1.275408e-09 9.559975e-01 1.978987e-01 1.522998e-08 9.615584e-01 2.438505e-01 1.549753e-07 9.667648e-01 2.961764e-01 1.343812e-06 9.716108e-01 3.545875e-01 9.929504e-06 9.760905e-01 4.184491e-01 6.252150e-05 9.801987e-01 4.867523e-01 3.354626e-04 9.839305e-01 5.581096e-01 1.533811e-03 9.872816e-01 6.307788e-01 5.976023e-03 9.902479e-01 7.027177e-01 1.984109e-02 9.928259e-01 7.716687e-01 5.613476e-02 9.950125e-01 8.352702e-01 1.353353e-01 9.968051e-01 8.911879e-01 2.780373e-01 9.982016e-01 9.372549e-01 4.867523e-01 9.992003e-01 9.716108e-01 7.261490e-01 9.998000e-01 9.928259e-01 9.231163e-01 1.000000e+00 1.000000e+00 1.000000e+00 9.998000e-01 9.928259e-01 9.231163e-01 9.992003e-01 9.716108e-01 7.261490e-01 9.982016e-01 9.372549e-01 4.867523e-01 9.968051e-01 8.911879e-01 2.780373e-01 9.950125e-01 8.352702e-01 1.353353e-01 9.928259e-01 7.716687e-01 5.613476e-02 9.902479e-01 7.027177e-01 1.984109e-02 9.872816e-01 6.307788e-01 5.976023e-03 9.839305e-01 5.581096e-01 1.533811e-03 9.801987e-01 4.867523e-01 3.354626e-04 9.760905e-01 4.184491e-01 6.252150e-05 9.716108e-01 3.545875e-01 9.929504e-06 9.667648e-01 2.961764e-01 1.343812e-06 9.615584e-01 2.438505e-01 1.549753e-07 9.559975e-01 1.978987e-01 1.522998e-08 9.500886e-01 1.583100e-01 1.275408e-09 9.438387e-01 1.248303e-01 9.101471e-11 9.372549e-01 9.702370e-02 5.534610e-12 9.303448e-01 7.433302e-02 2.867975e-13 9.231163e-01 5.613476e-02 1.266417e-14 9.155777e-01 4.178575e-02 4.765305e-16 9.077375e-01 3.065989e-02 1.527980e-17 8.996046e-01 2.217477e-02 4.175010e-19 8.911879e-01 1.580862e-02 9.720985e-21 8.824969e-01 1.110900e-02 1.928750e-22 1.339186081187e-01 -6.070493125425e-01 2.239349873726e-01 6.686289175208e-01 4.581761628724e-02 -7.086638672628e-01 1.775996159801e-01 9.498404054028e-01 1.720226022541e+00 -8.245219701383e-01 1.161862442933e-01 1.209594922857e+00 2.453867129834e+00 -9.437690360386e-01 3.872998648548e-02 1.351442163044e+00 3.451391761436e+00 -1.037140782454e+00 -5.478716622101e-02 1.299949983543e+00 2.173889680433e+00 -1.134703560609e+00 -1.654348363323e-01 1.045266677505e+00 -2.228256023004e-01 -1.237437128405e+00 -2.933055042800e-01 6.508268378924e-01 -9.021057670296e-01 -1.343138636054e+00 -4.380236339223e-01 2.147792705380e-01 -9.411970854632e-01 -1.495222756662e+00 -6.001690829276e-01 -1.854328314680e-01 -4.764153994235e-02 -1.637749130671e+00 -7.775792833451e-01 -5.226678353009e-01 -6.528933453213e-02 -1.781637748222e+00 -9.692755572326e-01 -8.079987482231e-01 -1.361846243309e+00 -1.930273603246e+00 -1.173943753038e+00 -1.059689373754e+00 -2.029826749318e+00 -2.066648068805e+00 -1.389558626196e+00 -1.286440780500e+00 -1.848117971010e+00 -2.175008040515e+00 -1.613846909930e+00 -1.494016029216e+00 -1.017067180669e+00 -2.290583582906e+00 -1.845754527356e+00 -1.697215318882e+00 -1.565315652066e+00 -2.384959713176e+00 -2.082648212411e+00 -1.918348654150e+00 -2.203347154760e+00 -2.446858416322e+00 -2.322078331445e+00 -2.173498714681e+00 -2.196258623064e+00 -2.521503954927e+00 -2.563057400406e+00 -2.462192827137e+00 -2.866112317442e+00 -2.607162938195e+00 -2.803638031757e+00 -2.770979816627e+00 -3.693874648829e+00 -2.655151181545e+00 -3.040504881271e+00 -3.086634323094e+00 -3.081374618468e+00 -2.718758966857e+00 -3.272803761337e+00 -3.406142807249e+00 -3.448963028626e+00 -2.750478393504e+00 -3.497203587731e+00 -3.734530573136e+00 -3.738456437745e+00 -2.756335953060e+00 -3.711414477380e+00 -4.073172482348e+00 -4.655331108560e+00 -2.767818979076e+00 -3.913829249274e+00 -4.409769737866e+00 -5.239136567358e+00 -2.783701288416e+00 -4.102120225411e+00 -4.718778051537e+00 -5.174521277199e+00 -2.775896077214e+00 -4.273137079472e+00 -4.971344371386e+00 -5.127777417426e+00 -2.771749499910e+00 -4.425034469660e+00 -5.148057294654e+00 -5.878504396094e+00 -2.765624574186e+00 -4.555274734934e+00 -5.249919972829e+00 -6.022737083459e+00 -2.773781917316e+00 -4.661710767281e+00 -5.304979107315e+00 -4.547176286537e+00 -2.783625044889e+00 -4.741511349811e+00 -5.364959037747e+00 -4.753655261457e+00 -2.807832165868e+00 -4.792752863391e+00 -5.485988392084e+00 -5.014352540332e+00 -2.782612968365e+00 -4.811954079811e+00 -5.698069331607e+00 -5.152570512223e+00 -2.712180256119e+00 -4.797773826966e+00 -5.981370354061e+00 -7.695967729274e+00 -2.614374434295e+00 -4.749480982760e+00 -6.267361770366e+00 -7.118549192565e+00 -2.542663408959e+00 -4.667584005347e+00 -6.466046922899e+00 -7.154659055671e+00 -2.489888517259e+00 -4.551654769137e+00 -6.502368813716e+00 -7.380831623831e+00 -2.429303895362e+00 -4.401280016514e+00 -6.341546197271e+00 -6.665829406702e+00 -2.345532297905e+00 -4.217093869227e+00 -5.994516323951e+00 -5.088562520160e+00 -2.258424361803e+00 -4.001301764787e+00 -5.507570520400e+00 -5.480836381648e+00 -2.198584704729e+00 -3.756984997601e+00 -4.944506401559e+00 -4.298065525855e+00 -2.121946613049e+00 -3.485733306718e+00 -4.366727459184e+00 -2.504951838444e+00 -2.026870780451e+00 -3.190592860527e+00 -3.814681444014e+00 -3.236297805750e+00 -1.891831514730e+00 -2.874612667443e+00 -3.296752260529e+00 -3.866115487020e+00 -1.743391028298e+00 -2.542182557628e+00 -2.793544189031e+00 -1.795420916217e+00 -1.592404763057e+00 -2.197620550529e+00 -2.278335052080e+00 -2.698426923651e+00 -1.401937950089e+00 -1.844128055772e+00 -1.741330088670e+00 -9.628813860394e-01 -1.236533730909e+00 -1.487212940488e+00 -1.200040761302e+00 4.202074740873e-01 -1.049765129013e+00 -1.129517538614e+00 -6.884034367950e-01 4.484083421036e-02 -8.715110105691e-01 -7.753376998318e-01 -2.342840450497e-01 -2.594693653010e-01 -6.778633924510e-01 -4.274001878315e-01 1.572402469889e-01 9.941018835254e-01 -4.464764349007e-01 -8.784792874812e-02 5.049173472051e-01 7.202567042782e-01 -2.086944751338e-01 2.405341182491e-01 8.398393318263e-01 6.739273228542e-01 8.889531232368e-02 5.578358038596e-01 1.190386144566e+00 1.472909792962e+00 4.332963423032e-01 8.632897536179e-01 1.569585589700e+00 2.012865682211e+00 8.129315704827e-01 1.156792027811e+00 1.967176988021e+00 2.098716021157e+00 1.179350491252e+00 1.438151333358e+00 2.348741017839e+00 3.454007241898e+00 1.531863328652e+00 1.708760894892e+00 2.664880480298e+00 3.467858102729e+00 1.895990565284e+00 1.971080864819e+00 2.869868505346e+00 4.219221797752e+00 2.271693031487e+00 2.227627972813e+00 2.941866135934e+00 2.644312619546e+00 2.651284464904e+00 2.480818486744e+00 2.892948056943e+00 2.406934366490e+00 3.009244966425e+00 2.732915144040e+00 2.763821064135e+00 2.743424959118e+00 3.328452110180e+00 2.986690508853e+00 2.610648935920e+00 2.663825286326e+00 3.632734628041e+00 3.245723685248e+00 2.494986096332e+00 2.122953044027e+00 3.914664974200e+00 3.512763958692e+00 2.477296465679e+00 7.425191012479e-01 4.152355431580e+00 3.789919013923e+00 2.605048966480e+00 2.459070961522e+00 4.399146955367e+00 4.080485448186e+00 2.893429908871e+00 2.877182765522e+00 4.616294943171e+00 4.384787931426e+00 3.312090816339e+00 4.402139352969e+00 4.769934255557e+00 4.702383743835e+00 3.793169674932e+00 5.088615684241e+00 4.918224077972e+00 5.033816062949e+00 4.259439176601e+00 4.500059713384e+00 5.076111257795e+00 5.377430946295e+00 4.655714603310e+00 5.816807622764e+00 5.215954455545e+00 5.729829882331e+00 4.968052556583e+00 4.983823477935e+00 5.404469976316e+00 6.088995490134e+00 5.228023160031e+00 5.757783775313e+00 5.562731818754e+00 6.448331936942e+00 5.506599662134e+00 4.954268368849e+00 5.698564176239e+00 6.802582036849e+00 5.898732757387e+00 4.868838093827e+00 5.863440496573e+00 7.146870811635e+00 6.495728856143e+00 6.365035989067e+00 6.043424798965e+00 7.474363914164e+00 7.348029265534e+00 6.762802782586e+00 6.191841916238e+00 7.777449489628e+00 8.432633291626e+00 1.010123264945e+01 6.352950446917e+00 8.051046512343e+00 9.644808846243e+00 1.190216767581e+01 6.550720041773e+00 8.290389862232e+00 1.082422101753e+01 1.365844628642e+01 6.772724934204e+00 8.491163248720e+00 1.180508189712e+01 1.432591994604e+01 6.978542246304e+00 8.649637500801e+00 1.246380993813e+01 1.327575184119e+01 7.169509457143e+00 8.764414632385e+00 1.274100159350e+01 1.360512237744e+01 7.313063717087e+00 8.834960207243e+00 1.263578554697e+01 1.406020341590e+01 7.431193356530e+00 8.863725097946e+00 1.218966064086e+01 1.171319609542e+01 7.528588371676e+00 8.854418593120e+00 1.147545821406e+01 1.109929685799e+01 7.680510651323e+00 8.814129954974e+00 1.059036812584e+01 8.937496269310e+00 7.812189184697e+00 8.747491065200e+00 9.641908582205e+00 7.936153149078e+00 7.918148861272e+00 8.661707504052e+00 8.723567734754e+00 7.473885520818e+00 8.021989464721e+00 8.565266160831e+00 7.891929519877e+00 6.656324459441e+00 8.137738548785e+00 8.466507998232e+00 7.162278563485e+00 6.840716497645e+00 8.319190904972e+00 8.374526204808e+00 6.529035371439e+00 6.445799521618e+00 8.475297928153e+00 8.294382827562e+00 5.998520795679e+00 4.776242212647e+00 8.629951358986e+00 8.232825223891e+00 5.609051317510e+00 3.831094369022e+00 8.743735462308e+00 8.193544042265e+00 5.419864834606e+00 3.834664362508e+00 8.875947585491e+00 8.181188197081e+00 5.474781859900e+00 4.990403828916e+00 9.012034602574e+00 8.196888330889e+00 5.769024065149e+00 6.867835182982e+00 9.158632954484e+00 8.240846824444e+00 6.245942871291e+00 6.980034113270e+00 9.327721467922e+00 8.312087847142e+00 6.825242436059e+00 7.161247351020e+00 9.465004518813e+00 8.406620368808e+00 7.440494569726e+00 8.439551801312e+00 9.621837887281e+00 8.522143484639e+00 8.061453675627e+00 9.010609576921e+00 9.774011067640e+00 8.653962510208e+00 8.690516332677e+00 8.539701847907e+00 9.915578391980e+00 8.797853737798e+00 9.336752981588e+00 9.003060222708e+00 1.007394255366e+01 8.950702393371e+00 9.981551335442e+00 1.102038532000e+01 1.018739166256e+01 9.107792659510e+00 1.055890825740e+01 1.317009018593e+01 1.026263804078e+01 9.266685753640e+00 1.097100830688e+01 1.279900686717e+01 1.031819580454e+01 9.425887705730e+00 1.113620345097e+01 1.205471585264e+01 1.035213133242e+01 9.584218492408e+00 1.103702868062e+01 1.077399199324e+01 1.039692041362e+01 9.741976133090e+00 1.073145373239e+01 9.385327486748e+00 1.045105829917e+01 9.899602371256e+00 1.032027662127e+01 9.002858899680e+00 1.050215872714e+01 1.005818723768e+01 9.900026951721e+00 1.048417968866e+01 1.058869245036e+01 1.022030108959e+01 9.538361936534e+00 9.152510915816e+00 1.069617883927e+01 1.038750452598e+01 9.281356100446e+00 8.104228842110e+00 1.083494326811e+01 1.056207756328e+01 9.169208929532e+00 7.960456473003e+00 1.099288674134e+01 1.074554659947e+01 9.233701155077e+00 8.141314292285e+00 1.116851092234e+01 1.093954571855e+01 9.478557541846e+00 1.047623381423e+01 1.141002567755e+01 1.114667027358e+01 9.868438512825e+00 1.082793268590e+01 1.163682025278e+01 1.136578765422e+01 1.034438425356e+01 1.119934407313e+01 1.185937888799e+01 1.159709958410e+01 1.085378841896e+01 1.047823790038e+01 1.214373943696e+01 1.184158099371e+01 1.136727851767e+01 1.220501966529e+01 1.247232041337e+01 1.209782664789e+01 1.187049826699e+01 1.184161321013e+01 1.280699663415e+01 1.236359053435e+01 1.234616573907e+01 1.374378616248e+01 1.311953720451e+01 1.263660604756e+01 1.277029157667e+01 1.415136610369e+01 1.339536066091e+01 1.291482902486e+01 1.312861602057e+01 1.314992360103e+01 1.362579170728e+01 1.319599383158e+01 1.343554306742e+01 1.343590914317e+01 1.383535342875e+01 1.347847282361e+01 1.373277262463e+01 1.309991732600e+01 1.402122830417e+01 1.376039268740e+01 1.406319499200e+01 1.400719628167e+01 1.419580903019e+01 1.404058899156e+01 1.443920303210e+01 1.532290997156e+01 1.437607827926e+01 1.431817020454e+01 1.483089421701e+01 1.611720414236e+01 1.454968842671e+01 1.459186565333e+01 1.518346909503e+01 1.572151811127e+01 1.469933257730e+01 1.486082447167e+01 1.545009012088e+01 1.629424832483e+01 1.479837568927e+01 1.512421942176e+01 1.561647176652e+01 1.565980315992e+01 1.490321989411e+01 1.538310378232e+01 1.570266966838e+01 1.512438205027e+01 1.501859860201e+01 1.563715614895e+01 1.574586104879e+01 1.588853740476e+01 1.515697124363e+01 1.588618696660e+01 1.578048300377e+01 1.608157237947e+01 1.534436146467e+01 1.613034245229e+01 1.583063134768e+01 1.562645817174e+01 1.551352918474e+01 1.636730546914e+01 1.591664915363e+01 1.611552770065e+01 1.567284139771e+01 1.659651193562e+01 1.606446088502e+01 1.564807418295e+01 1.583623871292e+01 1.681716079877e+01 1.630419649438e+01 1.568905379985e+01 1.602840471962e+01 1.702823028026e+01 1.665634290816e+01 1.619386413076e+01 1.622780500917e+01 1.722759525231e+01 1.711801509291e+01 1.902022760786e+01 1.642791200453e+01 1.741345997261e+01 1.766290358868e+01 1.835854912980e+01 1.659801979736e+01 1.758363680261e+01 1.825275854222e+01 1.771355323604e+01 1.675709302726e+01 1.773721247759e+01 1.884415060598e+01 1.947923035058e+01 1.691218758865e+01 1.787304261979e+01 1.938186345631e+01 2.099291012771e+01 1.709743165202e+01 1.799108653446e+01 1.979225497625e+01 2.133482724331e+01 1.724318930124e+01 1.808937475683e+01 1.999710797352e+01 2.125668874628e+01 1.738241649235e+01 1.816889802766e+01 1.994889535174e+01 2.108051450581e+01 1.746306547564e+01 1.822907265718e+01 1.966350520684e+01 1.866478566299e+01 1.755290398607e+01 1.827295248105e+01 1.922336862166e+01 1.770359348012e+01 1.765406053001e+01 1.830237581892e+01 1.874523200648e+01 1.768461484942e+01 1.773211101576e+01 1.831858956871e+01 1.833241213320e+01 1.764308038484e+01 1.783804933522e+01 1.832540440359e+01 1.804008970119e+01 1.750907463610e+01 1.789682228206e+01 1.832370064829e+01 1.786967808036e+01 1.762602357199e+01 1.795219738307e+01 1.831732872413e+01 1.778806816579e+01 1.832053388647e+01 1.799381992289e+01 1.830875932492e+01 1.775549948171e+01 1.764681057440e+01 1.804939137105e+01 1.830092500657e+01 1.774602974889e+01 1.758900851504e+01 1.813454290160e+01 1.829628739442e+01 1.775217655732e+01 1.743088236673e+01 1.825698257234e+01 1.829683509977e+01 1.777575643081e+01 1.744371498966e+01 1.838524700747e+01 1.830296302822e+01 1.781590834261e+01 1.880692277278e+01 1.849056078824e+01 1.831467229775e+01 1.786602027181e+01 1.744647283342e+01 1.856691492452e+01 1.833203031845e+01 1.792150727414e+01 1.841554900158e+01 1.863708125744e+01 1.835528068892e+01 1.798889343597e+01 1.735075787519e+01 1.869663671338e+01 1.838381836270e+01 1.808532095530e+01 1.796122940451e+01 1.874898576096e+01 1.841700705849e+01 1.822742338094e+01 1.828273126862e+01 1.882248459787e+01 1.845478296623e+01 1.841849137372e+01 1.856618105033e+01 1.888272792816e+01 1.849568294601e+01 1.864312678778e+01 1.928047537034e+01 1.888285447360e+01 1.853804684064e+01 1.887072178164e+01 1.905435618113e+01 1.888082735616e+01 1.858267488512e+01 1.906293103508e+01 1.924036982732e+01 1.889950987171e+01 1.862945998163e+01 1.918184020372e+01 2.023238402267e+01 1.892344381909e+01 1.867797198062e+01 1.919988943863e+01 1.979169013966e+01 1.893668064384e+01 1.872814355493e+01 1.911106576321e+01 1.909692868167e+01 1.893892707764e+01 1.878012428874e+01 1.893651209631e+01 1.777573088272e+01 1.894952157793e+01 1.883446859795e+01 1.871761350236e+01 1.872395726372e+01 1.896080165017e+01 1.889109690566e+01 1.850004265805e+01 1.838340759288e+01 1.900947512868e+01 1.895078926682e+01 1.832151814185e+01 1.742638646358e+01 1.907684037048e+01 1.901291570218e+01 1.821189855955e+01 1.868617402525e+01 1.915453028548e+01 1.907728075493e+01 1.820101782100e+01 1.701271348021e+01 1.923452483009e+01 1.914364989227e+01 1.832162924342e+01 1.817639047987e+01 1.931461279400e+01 1.921174673149e+01 1.859859350765e+01 1.822642092792e+01 1.938455102793e+01 1.928096884837e+01 1.902668670572e+01 1.862496719241e+01 1.941552663159e+01 1.935012906874e+01 1.955081111740e+01 2.084880963303e+01 1.947019506951e+01 1.942024616111e+01 2.006688600440e+01 2.227777381274e+01 1.953812747786e+01 1.949073311649e+01 2.045286822637e+01 2.205638805464e+01 1.957821825204e+01 1.956022146872e+01 2.061865856218e+01 2.153772918936e+01 1.960491807046e+01 1.962866433869e+01 2.054612283459e+01 2.012036815271e+01 1.959340148398e+01 1.969528708883e+01 2.029348819903e+01 1.933640888649e+01 1.961932901795e+01 1.976180873294e+01 1.996204088226e+01 1.925598004000e+01 1.965083328062e+01 1.982752209550e+01 1.964811584718e+01 1.841424896642e+01 1.971511373963e+01 1.989322826439e+01 1.941054254656e+01 1.966045042678e+01 1.978691689746e+01 1.995839322369e+01 1.926966706424e+01 1.944861798288e+01 1.984102730721e+01 2.002238835137e+01 1.922999031787e+01 1.893765314201e+01 1.990166765685e+01 2.008556733917e+01 1.930126066570e+01 1.816068090066e+01 1.996476048200e+01 2.014757329580e+01 1.949657248838e+01 1.868105505429e+01 2.004623268994e+01 2.020837731798e+01 1.980987393666e+01 2.073318443850e+01 2.011954714122e+01 2.026670189720e+01 2.019790907733e+01 2.161434686465e+01 2.018089516218e+01 2.032183266351e+01 2.058903074954e+01 2.129541164511e+01 2.026863937788e+01 2.037417813019e+01 2.091529637465e+01 2.163161147573e+01 2.034256066615e+01 2.042213032895e+01 2.114241886059e+01 2.144415089824e+01 2.047050879322e+01 2.046697801797e+01 2.127560441925e+01 2.107687618821e+01 2.055539022457e+01 2.050647966236e+01 2.134078687786e+01 2.114295042048e+01 2.062372706363e+01 2.054160062319e+01 2.135855116670e+01 2.168874580766e+01 2.070506576305e+01 2.057368827101e+01 2.132992676063e+01 2.176425067517e+01 2.072894677167e+01 2.060207638041e+01 2.124157558087e+01 2.162700644810e+01 2.077996421369e+01 2.063009262325e+01 2.108228289281e+01 2.117524323194e+01 2.076401529917e+01 2.065681496687e+01 2.085480179099e+01 1.970432419772e+01 2.075196549187e+01 2.068549664546e+01 2.057448397501e+01 2.035764921351e+01 2.072750263835e+01 2.071722782739e+01 2.026225386499e+01 2.104446529649e+01 2.066810830918e+01 2.075280473795e+01 1.994575502162e+01 1.935050962506e+01 2.058066730563e+01 2.079332637026e+01 1.966926262326e+01 1.864578495982e+01 2.049958356565e+01 2.083974262347e+01 1.949567599218e+01 1.791057267615e+01 2.041579172104e+01 2.089107531641e+01 1.948672905854e+01 1.866315216877e+01 2.035450073472e+01 2.094634585575e+01 1.967082307467e+01 1.996355674268e+01 2.031741910934e+01 2.100336721558e+01 2.002495453953e+01 2.073472853959e+01 2.028356972342e+01 2.105886304374e+01 2.048723518029e+01 2.176979777023e+01 2.027228939310e+01 2.110996260582e+01 2.098959010100e+01 2.110701180994e+01 2.022595554502e+01 2.115154689781e+01 2.148444371144e+01 2.175254622124e+01 2.018239404107e+01 2.118059913551e+01 2.194881234353e+01 2.259046566192e+01 2.016925882692e+01 2.119391200050e+01 2.237124279460e+01 2.336501509470e+01 2.012093818558e+01 2.118607574288e+01 2.273820794895e+01 2.307381957164e+01 2.003982099878e+01 2.115370382056e+01 2.302937608778e+01 2.337199214908e+01 1.989127927007e+01 2.109341096172e+01 2.321893496606e+01 2.436469656783e+01 1.974513159525e+01 2.100532529669e+01 2.327745585854e+01 2.287463000447e+01 1.959270775442e+01 2.088849616840e+01 2.317453482891e+01 2.454573208515e+01 1.942696097325e+01 2.074286671403e+01 2.288578299954e+01 2.308492781106e+01 1.925180462163e+01 2.056960449753e+01 2.240392947986e+01 2.182413851721e+01 1.913066024241e+01 2.037239909271e+01 2.174848947118e+01 2.160711524236e+01 1.897304543862e+01 2.015187870552e+01 2.096839941455e+01 1.969581882490e+01 1.881196295345e+01 1.991208562039e+01 2.013628139162e+01 1.957321573425e+01 1.864160350164e+01 1.965650623311e+01 1.933567410874e+01 1.706674965570e+01 1.849072270301e+01 1.938954750459e+01 1.864269390269e+01 1.739609122067e+01 1.837826952807e+01 1.911543780629e+01 1.810609787357e+01 1.716311970107e+01 1.826977467960e+01 1.883662236942e+01 1.773491749636e+01 1.748783777818e+01 1.813365934384e+01 1.855510638924e+01 1.750274229124e+01 1.738024887458e+01 1.800588618906e+01 1.827437076278e+01 1.736771057852e+01 1.752957320570e+01 1.790600653111e+01 1.799687238479e+01 1.729507857079e+01 1.688201360475e+01 1.779666355791e+01 1.772294786972e+01 1.726713421643e+01 1.675143077387e+01 1.771974828814e+01 1.745464516531e+01 1.727582992109e+01 1.735711508271e+01 1.762188244534e+01 1.719157010770e+01 1.730698196984e+01 1.749859252807e+01 1.749357396943e+01 1.693421401695e+01 1.732922310725e+01 1.795610973936e+01 1.734557766187e+01 1.668342478621e+01 1.729433832808e+01 1.729275187722e+01 1.717525366400e+01 1.643969026194e+01 1.714769515891e+01 1.727414199069e+01 1.702276578916e+01 1.620456555884e+01 1.684577988205e+01 1.849235548007e+01 1.686203634190e+01 1.597815514939e+01 1.637749422955e+01 1.580598897382e+01 1.667682921073e+01 1.576099750052e+01 1.577973307710e+01 1.457017707228e+01 1.646820909115e+01 1.555407550523e+01 1.513310200669e+01 1.293843766936e+01 1.629033915032e+01 1.535976286305e+01 1.453384276735e+01 1.400714269543e+01 1.608749462611e+01 1.517766273381e+01 1.405770376201e+01 1.338514148246e+01 1.587494057873e+01 1.500899414371e+01 1.373822496916e+01 1.302794170672e+01 1.568974704110e+01 1.485523214769e+01 1.356807737109e+01 1.236609911348e+01 1.549750799621e+01 1.471596548417e+01 1.351561307687e+01 1.504380128541e+01 1.532819434554e+01 1.459202373752e+01 1.354491147912e+01 1.311342317969e+01 1.518053165611e+01 1.448282685762e+01 1.363046907114e+01 1.350133374518e+01 1.502307489519e+01 1.438679089382e+01 1.375939298368e+01 1.308923159943e+01 1.491092714259e+01 1.430413925176e+01 1.392024695159e+01 1.405899666061e+01 1.478968250204e+01 1.423221450745e+01 1.409027072016e+01 1.575522392099e+01 1.472356958756e+01 1.417105177906e+01 1.423633506289e+01 1.451851061332e+01 1.466178089601e+01 1.411796838745e+01 1.433031812382e+01 1.366059280934e+01 1.458795521689e+01 1.407119635444e+01 1.436309910075e+01 1.482657202526e+01 1.454382456829e+01 1.403056997605e+01 1.434391376906e+01 1.469705353717e+01 1.450826630423e+01 1.399470057810e+01 1.428840610579e+01 1.349396644313e+01 1.448976947619e+01 1.396311875795e+01 1.420799637993e+01 1.459744072020e+01 1.449386881370e+01 1.393559142327e+01 1.410794314709e+01 1.421164696705e+01 1.450261554851e+01 1.391157211450e+01 1.399212460484e+01 1.383626912130e+01 1.452255166178e+01 1.389159548208e+01 1.386810432736e+01 1.352029251996e+01 1.457098614135e+01 1.387694098264e+01 1.374726964709e+01 1.331142868951e+01 1.461967988735e+01 1.386803935572e+01 1.364006235609e+01 1.363421422871e+01 1.467976135063e+01 1.386636580417e+01 1.355166793188e+01 1.380793232016e+01 1.474353657385e+01 1.387310882860e+01 1.348306442028e+01 1.326112215349e+01 1.477622302981e+01 1.388905543507e+01 1.343604360114e+01 1.270373851281e+01 1.487334528986e+01 1.391812434961e+01 1.341652487495e+01 1.408461644805e+01 1.498546986062e+01 1.396064602185e+01 1.343280818252e+01 1.294805441130e+01 1.514309317780e+01 1.401905590527e+01 1.348980938786e+01 1.334883037045e+01 1.527093032448e+01 1.409333879522e+01 1.358220222882e+01 1.332670111475e+01 1.539218275490e+01 1.418564178356e+01 1.369057083460e+01 1.453989840093e+01 1.550327918578e+01 1.429706332040e+01 1.378573813410e+01 1.427979024613e+01 1.562722788157e+01 1.442911578849e+01 1.384256220621e+01 1.416125985733e+01 1.571837984620e+01 1.458161937125e+01 1.385568310790e+01 1.334555840017e+01 1.584223026193e+01 1.475653122706e+01 1.384572276732e+01 1.391191897733e+01 1.593207238357e+01 1.495171849858e+01 1.385176044056e+01 1.324719509513e+01 1.604140506436e+01 1.516757010037e+01 1.391695196075e+01 1.378549233337e+01 1.613317613179e+01 1.540179637933e+01 1.407690797079e+01 1.433560508435e+01 1.619914268947e+01 1.565227345428e+01 1.435395060915e+01 1.341275686372e+01 1.630825125377e+01 1.591804538286e+01 1.475446281080e+01 1.536331888714e+01 1.645818731128e+01 1.619582872847e+01 1.526795844043e+01 1.569207831694e+01 1.657768540474e+01 1.648031692860e+01 1.587046815017e+01 1.674220600908e+01 1.667429803550e+01 1.676758489680e+01 1.653279162727e+01 1.729737809658e+01 1.678196145077e+01 1.705391138009e+01 1.722731689051e+01 1.737110853251e+01 1.688862081102e+01 1.733469223709e+01 1.792630205698e+01 1.853654499554e+01 1.700433073634e+01 1.760612187197e+01 1.859434479202e+01 2.018336876154e+01 1.713064361187e+01 1.786434258083e+01 1.918713844113e+01 2.056176993111e+01 1.724763967654e+01 1.810540368156e+01 1.966388547109e+01 2.043937566744e+01 1.738889829385e+01 1.832737732151e+01 2.000511018355e+01 2.053820794918e+01 1.757541189515e+01 1.852916279344e+01 2.021911470510e+01 1.993548748297e+01 1.776236236568e+01 1.870892471195e+01 2.032968496506e+01 2.075265546264e+01 1.797187044498e+01 1.886715579926e+01 2.035541345215e+01 2.028892117103e+01 1.818609848943e+01 1.900419187235e+01 2.029910154475e+01 2.114171610480e+01 1.832776549380e+01 1.911959169602e+01 2.015647573186e+01 2.050915836771e+01 1.850761616848e+01 1.921817773541e+01 1.993542769348e+01 1.948614983111e+01 1.866357715580e+01 1.930116312839e+01 1.966663862706e+01 1.854669506479e+01 1.880124728817e+01 1.937170944370e+01 1.939444147655e+01 1.859544481125e+01 1.889272620739e+01 1.943232292505e+01 1.915671927751e+01 1.943057832717e+01 1.899786507886e+01 1.948770096974e+01 1.897394469761e+01 1.929800641447e+01 1.908733599101e+01 1.954011299147e+01 1.885659745877e+01 1.778947498968e+01 1.920048805121e+01 1.959314422065e+01 1.881868280000e+01 1.846531675998e+01 1.930311808525e+01 1.964827150477e+01 1.887774441569e+01 1.845673468277e+01 1.939033803683e+01 1.970695982305e+01 1.903698078210e+01 1.870309766874e+01 1.945524533049e+01 1.976986945796e+01 1.926599706087e+01 1.984659453812e+01 1.950423105277e+01 1.983740837668e+01 1.950207819328e+01 2.124023176141e+01 1.957455427983e+01 1.990995170211e+01 1.967837575399e+01 2.068814879408e+01 1.961541445579e+01 1.998518807781e+01 1.976174546499e+01 1.926838009447e+01 1.963396915577e+01 2.006154509593e+01 1.977218592543e+01 1.868335096169e+01 1.964063118794e+01 2.013686396583e+01 1.977035898431e+01 1.973445989330e+01 1.963422000694e+01 2.020831761917e+01 1.982683816733e+01 1.984881096734e+01 1.962751913154e+01 2.027301539592e+01 1.999735418385e+01 2.006477707002e+01 1.960137017382e+01 2.032721811755e+01 2.031192741263e+01 1.924073269269e+01 1.957164748606e+01 2.036830301321e+01 2.076663124873e+01 2.039652841282e+01 1.950706848323e+01 2.039251730972e+01 2.131154149820e+01 2.323452196250e+01 1.944500989281e+01 2.039791013711e+01 2.184856953447e+01 2.341452821843e+01 1.937992210446e+01 2.038213040723e+01 2.225641060493e+01 2.410653167120e+01 1.928455539947e+01 2.034274599629e+01 2.243679640048e+01 2.380284547822e+01 1.915568662498e+01 2.027857954069e+01 2.235288362524e+01 2.115079054922e+01 1.903820998569e+01 2.019055070213e+01 2.203495416559e+01 2.215589852540e+01 1.888539648989e+01 2.007808189408e+01 2.155580318436e+01 2.125000939446e+01 1.874451889700e+01 1.994354166038e+01 2.099855138293e+01 2.024390610728e+01 1.862461510985e+01 1.978893792236e+01 2.043493663592e+01 1.892875466886e+01 1.851015637149e+01 1.961611803113e+01 1.991466003975e+01 1.947298404512e+01 1.843502069736e+01 1.942873649629e+01 1.945928550170e+01 1.853253344160e+01 1.835656161487e+01 1.922902343295e+01 1.906156746722e+01 1.909389819896e+01 1.826528282431e+01 1.901977366088e+01 1.869659308291e+01 1.913398677598e+01 1.818005883395e+01 1.880398628753e+01 1.834331562070e+01 1.768071427364e+01 1.805907231390e+01 1.858289590382e+01 1.800256174034e+01 1.705925696754e+01 1.795635465924e+01 1.835992941247e+01 1.769714811703e+01 1.680563089964e+01 1.788908505282e+01 1.813743746402e+01 1.745478901574e+01 1.715544563779e+01 1.779880056297e+01 1.791554087584e+01 1.728981274137e+01 1.754323957708e+01 1.770323572894e+01 1.769583134445e+01 1.719864731703e+01 1.669910489502e+01 1.762802875589e+01 1.747972513924e+01 1.716838505562e+01 1.715124961901e+01 1.760352696741e+01 1.726845287208e+01 1.718529613709e+01 1.703291893382e+01 1.761539713835e+01 1.706229156450e+01 1.723313508448e+01 1.714138630002e+01 1.760497474217e+01 1.686066537246e+01 1.728383119407e+01 1.726739780890e+01 1.760567050250e+01 1.666545614825e+01 1.729186458115e+01 1.873536450952e+01 1.760384617380e+01 1.647767317210e+01 1.720128038219e+01 1.718305651861e+01 1.761284582096e+01 1.629923784856e+01 1.696456760750e+01 1.721567340688e+01 1.762616449499e+01 1.613219582351e+01 1.656402597301e+01 1.715963313690e+01 1.758983529250e+01 1.597812812583e+01 1.602434927019e+01 1.489833993767e+01 1.755764496166e+01 1.584139025013e+01 1.540965850023e+01 1.389130054279e+01 1.750466052822e+01 1.572445113362e+01 1.480598751287e+01 1.410219802706e+01 1.748184581144e+01 1.563181675388e+01 1.429748241552e+01 1.302871308152e+01 1.750587403939e+01 1.556698820591e+01 1.394620358373e+01 1.310236719537e+01 1.751795246439e+01 1.553154705869e+01 1.377952201512e+01 1.329305881816e+01 1.755968680125e+01 1.552939517520e+01 1.378320343194e+01 1.271253505374e+01 1.759494538395e+01 1.556175887986e+01 1.390159625696e+01 1.499948211095e+01 1.767452047668e+01 1.563135796621e+01 1.405399099137e+01 1.567759998093e+01 1.773176998762e+01 1.573747653246e+01 1.417163961031e+01 1.485475627338e+01 1.780564051186e+01 1.588105084233e+01 1.423915843550e+01 1.372286448708e+01 1.788610133901e+01 1.606105636872e+01 1.430888522001e+01 1.246211786569e+01 1.795173745554e+01 1.627531660311e+01 1.447140841882e+01 1.351953835432e+01 1.803673563686e+01 1.652189122605e+01 1.480172600508e+01 1.576772922147e+01 1.811727550429e+01 1.679659280458e+01 1.532099525292e+01 1.563911270904e+01 1.820398499039e+01 1.709551641628e+01 1.599622885962e+01 1.672778275093e+01 1.828915292216e+01 1.741390421332e+01 1.676555355267e+01 1.728290554980e+01 1.837160759908e+01 1.774679880058e+01 1.756249200857e+01 1.865788523078e+01 1.849925020191e+01 1.809023460217e+01 1.832761947360e+01 2.006475644249e+01 1.862410316896e+01 1.843791232065e+01 1.901453331627e+01 1.983350211942e+01 1.875136414413e+01 1.878489341849e+01 1.959748399521e+01 2.051624412243e+01 1.889056636446e+01 1.912663610262e+01 2.007667013952e+01 2.053565524390e+01 1.903847501646e+01 1.945879639829e+01 2.047328726110e+01 2.026170919659e+01 1.919242697661e+01 1.977780764349e+01 2.081517315823e+01 2.159810662235e+01 1.933414682661e+01 2.008004230260e+01 2.112332241581e+01 2.158542480112e+01 1.949623045213e+01 2.036369068820e+01 2.140788344718e+01 2.189090673097e+01 1.965487978267e+01 2.062662961582e+01 2.167187401781e+01 2.131669277293e+01 1.989435723476e+01 2.087012605695e+01 2.191434676694e+01 2.257711782687e+01 2.014277368195e+01 2.109244320705e+01 2.212918100861e+01 2.242626062928e+01 2.040231048119e+01 2.129454703582e+01 2.230405709059e+01 2.266833836773e+01 2.064175969846e+01 2.147713544424e+01 2.242510595984e+01 2.331064939037e+01 2.083703518874e+01 2.164134429009e+01 2.248537403151e+01 2.185633181249e+01 2.103390513996e+01 2.179067190638e+01 2.248929843779e+01 2.293486629244e+01 2.122480862798e+01 2.192764746460e+01 2.244817836830e+01 2.216726754887e+01 2.138783296548e+01 2.205477076752e+01 2.237032478222e+01 2.209057566490e+01 2.154084313906e+01 2.217563694153e+01 2.225561852686e+01 2.295694814522e+01 2.170689338480e+01 2.229348963643e+01 2.210169476314e+01 2.210870055539e+01 2.186205191172e+01 2.240984481255e+01 2.191906256221e+01 2.168539618104e+01 2.200703878690e+01 2.252616993510e+01 2.174294901354e+01 2.078732307358e+01 2.212737549142e+01 2.264318304393e+01 2.162959768252e+01 2.085931669479e+01 2.220077733896e+01 2.276099393158e+01 2.163586570983e+01 2.110549876267e+01 2.228132949196e+01 2.288067039311e+01 2.179429468687e+01 2.132040831859e+01 2.234317044624e+01 2.300046367953e+01 2.209977175855e+01 2.296463612848e+01 2.238770082900e+01 2.311852520544e+01 2.251515453541e+01 2.322963472932e+01 2.240838792506e+01 2.323213761573e+01 2.298934094877e+01 2.321331136587e+01 2.242331940414e+01 2.333880845136e+01 2.347425956164e+01 2.395366809681e+01 2.245694689125e+01 2.343579695886e+01 2.393317493188e+01 2.452670920809e+01 2.250356374581e+01 2.351951481874e+01 2.434375406484e+01 2.627675892227e+01 2.253668598655e+01 2.358590209894e+01 2.470078440538e+01 2.399581102519e+01 2.260184937814e+01 2.363293881628e+01 2.501367438737e+01 2.513102828038e+01 2.264118652197e+01 2.365680893466e+01 2.529009231638e+01 2.485226521886e+01 2.267902333790e+01 2.365632886370e+01 2.551132812795e+01 2.706411848030e+01 2.269345916797e+01 2.362990735493e+01 2.562245011573e+01 2.654160872188e+01 2.271703557706e+01 2.357821524915e+01 2.555569032940e+01 2.736605952100e+01 2.273255384622e+01 2.350196410793e+01 2.527689375203e+01 2.518556960078e+01 2.274778774777e+01 2.340353329378e+01 2.481954521528e+01 2.284458571031e+01 2.275325119216e+01 2.328567990990e+01 2.427567886490e+01 2.318128829368e+01 2.275424780150e+01 2.315246407933e+01 2.374597690353e+01 2.233463721884e+01 2.277291027862e+01 2.300889173876e+01 2.328401932299e+01 2.313126093342e+01 2.277978149268e+01 2.285922908358e+01 2.287429459710e+01 2.329692867833e+01 2.280027553459e+01 2.270940054664e+01 2.245782106821e+01 2.324832666637e+01 2.283429351293e+01 2.256463826802e+01 2.198479071506e+01 2.158071938869e+01 2.286251064082e+01 2.242963797827e+01 2.145621300158e+01 1.985704467738e+01 2.292587084480e+01 2.231008323696e+01 2.092755893477e+01 1.965940424379e+01 2.300536120672e+01 2.220948590741e+01 2.047747150415e+01 1.940001788066e+01 2.310389069518e+01 2.213106913816e+01 2.016942949691e+01 1.976463684168e+01 2.319863012372e+01 2.207655079336e+01 2.003367339331e+01 1.990118291379e+01 2.331012381582e+01 2.204794885562e+01 2.007380117723e+01 1.957597458187e+01 2.342291474803e+01 2.204555097674e+01 2.028086700968e+01 1.969907298641e+01 2.348847754110e+01 2.206792179719e+01 2.063728619856e+01 2.084068748212e+01 2.354685922630e+01 2.211496702942e+01 2.110967258054e+01 2.168939013693e+01 2.360105776009e+01 2.218500294804e+01 2.164349630011e+01 2.312107794726e+01 2.363128311134e+01 2.227535659503e+01 2.216982959415e+01 2.240875915748e+01 2.363510796857e+01 2.238347054428e+01 2.262220632328e+01 2.393542775663e+01 2.360341307669e+01 2.250655404214e+01 2.295454629461e+01 2.383966104185e+01 2.361480642651e+01 2.264380335866e+01 2.315283243365e+01 2.374370925794e+01 2.362093759543e+01 2.279151547443e+01 2.323651962103e+01 2.275148870834e+01 2.365149450018e+01 2.294834671617e+01 2.324774310162e+01 2.269783771445e+01 2.361021879124e+01 2.310996316462e+01 2.323186482016e+01 2.351442150625e+01 2.356927197243e+01 2.327612276458e+01 2.322045156585e+01 2.334367378550e+01 2.350417936271e+01 2.344432495440e+01 2.322760189987e+01 2.303997330569e+01 2.348321742624e+01 2.361436465479e+01 2.325966294898e+01 2.342681549738e+01 2.352033214270e+01 2.378469312716e+01 2.332765208522e+01 2.295355034830e+01 2.353897636472e+01 2.395173230569e+01 2.345163242468e+01 2.337587823641e+01 2.360717682131e+01 2.411557464198e+01 2.365447847884e+01 2.336308873154e+01 2.368285269979e+01 2.427377104656e+01 2.394991757557e+01 2.403691781429e+01 2.378727546982e+01 2.442548239663e+01 2.433230536951e+01 2.456845905429e+01 2.387644381267e+01 2.456808989915e+01 2.477428047164e+01 2.565652754014e+01 2.400279818786e+01 2.470119387273e+01 2.523404214369e+01 2.611084942588e+01 2.415770301061e+01 2.482308148761e+01 2.566755502495e+01 2.625729899630e+01 2.430006733072e+01 2.493159558865e+01 2.603727807051e+01 2.610891254666e+01 2.447501676796e+01 2.502731920007e+01 2.631311965740e+01 2.727305080805e+01 2.462860359707e+01 2.510895559819e+01 2.647017019657e+01 2.753774865286e+01 2.482427268520e+01 2.517873673885e+01 2.649102092843e+01 2.652690304671e+01 2.500423484875e+01 2.523648635708e+01 2.637393801736e+01 2.636338476968e+01 2.519443978159e+01 2.528454683830e+01 2.614037401661e+01 2.608745132773e+01 2.534593330882e+01 2.532410256662e+01 2.583515551112e+01 2.546850158205e+01 2.544893150969e+01 2.535754529882e+01 2.551738312747e+01 2.454891366316e+01 2.551290078578e+01 2.538800269394e+01 2.524307614169e+01 2.429310097266e+01 2.557940222916e+01 2.541945675666e+01 2.504367886704e+01 2.438509370374e+01 2.559691410919e+01 2.545352727849e+01 2.491132203661e+01 2.520350455103e+01 2.565961716304e+01 2.549542564121e+01 2.480500419339e+01 2.624694109170e+01 2.570967411573e+01 2.554620187519e+01 2.468070973487e+01 2.441784536454e+01 2.579621047421e+01 2.560883288324e+01 2.452784606275e+01 2.387425389054e+01 2.588983748764e+01 2.568384629581e+01 2.438545632487e+01 2.331900682277e+01 2.598920603185e+01 2.577187706291e+01 2.432656081672e+01 2.356709927541e+01 2.610488619637e+01 2.587310539580e+01 2.442310464617e+01 2.444832423572e+01 2.621615227343e+01 2.598599148377e+01 2.471337657111e+01 2.375662478034e+01 2.629091477159e+01 2.610786035233e+01 2.518483393213e+01 2.566527253731e+01 2.635512747571e+01 2.623674049223e+01 2.577474562081e+01 2.686078054219e+01 2.642523913438e+01 2.637012225923e+01 2.638866197712e+01 2.859120498668e+01 2.647330189974e+01 2.650413233987e+01 2.693398260278e+01 2.765560474350e+01 2.651980337313e+01 2.663595613588e+01 2.735593991280e+01 2.803354895494e+01 2.655106262233e+01 2.676212416516e+01 2.765599664499e+01 2.789339016955e+01 2.656439048851e+01 2.687966760178e+01 2.788031795063e+01 2.701006229312e+01 2.658660934542e+01 2.698683418357e+01 2.808456426938e+01 2.857849542012e+01 2.660539166620e+01 2.708139299547e+01 2.829544859629e+01 2.776696961526e+01 2.661660881662e+01 2.716178376359e+01 2.849020130554e+01 3.025082942190e+01 2.659838780224e+01 2.722668744973e+01 2.860454398775e+01 2.905426101876e+01 2.657855075706e+01 2.727667440183e+01 2.856509288695e+01 2.975740700864e+01 2.656827417427e+01 2.731229683364e+01 2.833013895259e+01 2.875277193763e+01 2.654668811521e+01 2.733369127294e+01 2.791858545705e+01 2.691787754629e+01 2.651610936884e+01 2.734191075935e+01 2.741235666337e+01 2.619642516308e+01 2.647839783154e+01 2.733810348113e+01 2.693046208293e+01 2.564866240934e+01 2.647738457701e+01 2.732458778215e+01 2.658706280211e+01 2.447810363098e+01 2.645973457028e+01 2.730127801917e+01 2.645363216497e+01 2.691443096918e+01 2.644956382298e+01 2.726982587561e+01 2.654127337492e+01 2.612511322796e+01 2.642973414122e+01 2.723081279301e+01 2.680561640482e+01 2.717938482538e+01 2.641372953046e+01 2.718541659826e+01 2.716430948218e+01 2.753623803554e+01 2.643249471097e+01 2.713478614911e+01 2.751678415661e+01 2.867854962748e+01 2.647720619378e+01 2.707880247304e+01 2.776535892597e+01 2.941098855070e+01 2.653812231887e+01 2.701735083705e+01 2.784085448341e+01 2.886052095881e+01 2.659405884843e+01 2.694997395544e+01 2.772674551584e+01 2.722724451145e+01 2.663373179007e+01 2.687652763678e+01 2.746598789327e+01 2.619411242253e+01 2.668540829428e+01 2.679782655328e+01 2.714127707666e+01 2.697505313528e+01 2.670247312423e+01 2.671309047067e+01 2.683911995895e+01 2.576670765688e+01 2.669802163507e+01 2.662332504661e+01 2.661919153949e+01 2.638604788895e+01 2.666271776761e+01 2.652919807806e+01 2.650191675889e+01 2.609472519095e+01 2.664454442211e+01 2.643289657894e+01 2.647169079614e+01 2.620361344496e+01 2.661986181332e+01 2.633509217922e+01 2.648753325830e+01 2.715887735869e+01 2.659801048208e+01 2.623763465188e+01 2.649708386376e+01 2.711290687779e+01 2.659225764061e+01 2.614263776691e+01 2.645218631783e+01 2.654589788889e+01 2.655862477978e+01 2.605114247192e+01 2.632145305731e+01 2.607435231016e+01 2.653995037398e+01 2.596639183220e+01 2.609490582000e+01 2.624614355650e+01 2.647719378113e+01 2.588919317572e+01 2.578190116327e+01 2.576970719107e+01 2.643661298253e+01 2.582324548716e+01 2.540833576667e+01 2.499128412930e+01 2.638404775853e+01 2.576945445495e+01 2.501548479649e+01 2.423924259790e+01 2.635016756015e+01 2.573002615043e+01 2.465637410204e+01 2.326072291241e+01 2.634963845945e+01 2.570621613562e+01 2.438623728074e+01 2.442770880915e+01 2.636222345366e+01 2.569803247322e+01 2.425011626721e+01 2.329551401255e+01 2.638468220910e+01 2.570549993933e+01 2.427330519539e+01 2.385697221889e+01 2.642803923489e+01 2.572842666722e+01 2.445655909185e+01 2.418151605729e+01 2.642759960761e+01 2.576446391127e+01 2.477499865226e+01 2.546356563906e+01 2.644146351847e+01 2.581375543162e+01 2.518132181277e+01 2.559202826489e+01 2.643653078314e+01 2.587368864419e+01 2.561531328219e+01 2.652174880719e+01 2.642546115534e+01 2.594253765556e+01 2.601854287576e+01 2.689710500557e+01 2.639428397085e+01 2.601772128932e+01 2.634877900964e+01 gsl/doc/examples/Makefile.am0000644000175000017500000000527213536674414014357 0ustar eddedd## Process this file with automake to produce Makefile.in check_PROGRAMS = blas block cblas cdf cheb combination multiset const diff eigen fft fftmr fftreal filt_edge fitting fitting2 fitting3 fitreg fitreg2 gaussfilt gaussfilt2 histogram histogram2d ieee ieeeround impulse integration integration2 interp interp2d intro linalglu largefit matrix matrixw min monte movstat1 movstat2 movstat3 ntupler ntuplew ode-initval permseq permshuffle polyroots qrng randpoisson randwalk rng rngunif robfit rootnewt roots siman siman_tsp sortsmall specfun specfun_e rstat rquantile stat statsort sum vector vectorr vectorview vectorw dwt nlfit nlfit2 nlfit2b nlfit3 nlfit4 interpp eigen_nonsymm bspline poisson interp_compare spmatrix examples_src = blas.c block.c cblas.c cdf.c cheb.c combination.c multiset.c const.c demo_fn.c diff.c eigen.c fft.c fftmr.c fftreal.c filt_edge.c fitting.c fitting2.c fitting3.c fitreg.c fitreg2.c gaussfilt.c gaussfilt2.c histogram.c histogram2d.c ieee.c ieeeround.c impulse.c integration.c integration2.c interp.c interp2d.c intro.c linalglu.c largefit.c matrix.c matrixw.c min.c monte.c movstat1.c movstat2.c movstat3.c ntupler.c ntuplew.c ode-initval.c odefixed.c permseq.c permshuffle.c polyroots.c qrng.c randpoisson.c randwalk.c rng.c rngunif.c robfit.c rootnewt.c roots.c siman.c siman_tsp.c sortsmall.c specfun.c specfun_e.c rstat.c rquantile.c stat.c statsort.c sum.c vector.c vectorr.c vectorview.c vectorw.c demo_fn.h dwt.c nlfit.c nlfit2.c nlfit2b.c nlfit3.c interpp.c eigen_nonsymm.c bspline.c multimin.c multiminfn.c nmsimplex.c ode-initval-low-level.c poisson.c interp_compare.c spmatrix.c examples_txt = blas.txt block.txt bspline.txt cblas.txt cdf.txt cheb.txt combination.txt const.txt diff.txt dwt.txt eigen_nonsymm.txt eigen.txt fftmr.txt fftreal.txt fft.txt fitreg.txt fitreg2.txt filt_edge.txt fitting2.txt fitting.txt gaussfilt.txt gaussfilt2.txt histogram2d.txt ieeeround.txt ieee.txt impulse.txt integration.txt integration2a.txt integration2b.txt interp2d.txt interp_compare.txt interpp.txt interp.txt intro.txt largefit.txt largefit2.txt linalglu.txt matrix.txt matrixw.txt min.txt monte.txt movstat1.txt movstat2.txt movstat3.txt multimin.txt multiset.txt nlfit.txt nlfit2.txt nlfit3.txt nmsimplex.txt ntuple.txt ode-initval.txt permseq.txt permshuffle.txt poisson.txt polyroots.txt qrng.txt randpoisson2.txt randpoisson.txt randwalk.txt rng.txt rngunif.txt rngunif2.txt robfit.txt rootnewt.txt roots.txt rquantile.txt rstat.txt siman.txt siman_tsp.txt sortsmall.txt specfun.txt specfun_e.txt spmatrix.txt statsort.txt stat.txt sum.txt vectorr.txt vectorview.txt dist_noinst_DATA = $(examples_src) $(examples_txt) LDADD = ../../libgsl.la ../../cblas/libgslcblas.la AM_DEFAULT_SOURCE_EXT = .c gsl/doc/examples/ode-initval.c0000644000175000017500000000264513536674414014703 0ustar eddedd#include #include #include #include int func (double t, const double y[], double f[], void *params) { (void)(t); /* avoid unused parameter warning */ double mu = *(double *)params; f[0] = y[1]; f[1] = -y[0] - mu*y[1]*(y[0]*y[0] - 1); return GSL_SUCCESS; } int jac (double t, const double y[], double *dfdy, double dfdt[], void *params) { (void)(t); /* avoid unused parameter warning */ double mu = *(double *)params; gsl_matrix_view dfdy_mat = gsl_matrix_view_array (dfdy, 2, 2); gsl_matrix * m = &dfdy_mat.matrix; gsl_matrix_set (m, 0, 0, 0.0); gsl_matrix_set (m, 0, 1, 1.0); gsl_matrix_set (m, 1, 0, -2.0*mu*y[0]*y[1] - 1.0); gsl_matrix_set (m, 1, 1, -mu*(y[0]*y[0] - 1.0)); dfdt[0] = 0.0; dfdt[1] = 0.0; return GSL_SUCCESS; } int main (void) { double mu = 10; gsl_odeiv2_system sys = {func, jac, 2, &mu}; gsl_odeiv2_driver * d = gsl_odeiv2_driver_alloc_y_new (&sys, gsl_odeiv2_step_rk8pd, 1e-6, 1e-6, 0.0); int i; double t = 0.0, t1 = 100.0; double y[2] = { 1.0, 0.0 }; for (i = 1; i <= 100; i++) { double ti = i * t1 / 100.0; int status = gsl_odeiv2_driver_apply (d, &t, ti, y); if (status != GSL_SUCCESS) { printf ("error, return value=%d\n", status); break; } printf ("%.5e %.5e %.5e\n", t, y[0], y[1]); } gsl_odeiv2_driver_free (d); return 0; } gsl/doc/examples/fftmr.txt0000644000175000017500000011523513536674414014203 0ustar eddedd0: 1.000000e+00 0.000000e+00 1: 1.000000e+00 0.000000e+00 2: 1.000000e+00 0.000000e+00 3: 1.000000e+00 0.000000e+00 4: 1.000000e+00 0.000000e+00 5: 1.000000e+00 0.000000e+00 6: 1.000000e+00 0.000000e+00 7: 1.000000e+00 0.000000e+00 8: 1.000000e+00 0.000000e+00 9: 1.000000e+00 0.000000e+00 10: 1.000000e+00 0.000000e+00 11: 0.000000e+00 0.000000e+00 12: 0.000000e+00 0.000000e+00 13: 0.000000e+00 0.000000e+00 14: 0.000000e+00 0.000000e+00 15: 0.000000e+00 0.000000e+00 16: 0.000000e+00 0.000000e+00 17: 0.000000e+00 0.000000e+00 18: 0.000000e+00 0.000000e+00 19: 0.000000e+00 0.000000e+00 20: 0.000000e+00 0.000000e+00 21: 0.000000e+00 0.000000e+00 22: 0.000000e+00 0.000000e+00 23: 0.000000e+00 0.000000e+00 24: 0.000000e+00 0.000000e+00 25: 0.000000e+00 0.000000e+00 26: 0.000000e+00 0.000000e+00 27: 0.000000e+00 0.000000e+00 28: 0.000000e+00 0.000000e+00 29: 0.000000e+00 0.000000e+00 30: 0.000000e+00 0.000000e+00 31: 0.000000e+00 0.000000e+00 32: 0.000000e+00 0.000000e+00 33: 0.000000e+00 0.000000e+00 34: 0.000000e+00 0.000000e+00 35: 0.000000e+00 0.000000e+00 36: 0.000000e+00 0.000000e+00 37: 0.000000e+00 0.000000e+00 38: 0.000000e+00 0.000000e+00 39: 0.000000e+00 0.000000e+00 40: 0.000000e+00 0.000000e+00 41: 0.000000e+00 0.000000e+00 42: 0.000000e+00 0.000000e+00 43: 0.000000e+00 0.000000e+00 44: 0.000000e+00 0.000000e+00 45: 0.000000e+00 0.000000e+00 46: 0.000000e+00 0.000000e+00 47: 0.000000e+00 0.000000e+00 48: 0.000000e+00 0.000000e+00 49: 0.000000e+00 0.000000e+00 50: 0.000000e+00 0.000000e+00 51: 0.000000e+00 0.000000e+00 52: 0.000000e+00 0.000000e+00 53: 0.000000e+00 0.000000e+00 54: 0.000000e+00 0.000000e+00 55: 0.000000e+00 0.000000e+00 56: 0.000000e+00 0.000000e+00 57: 0.000000e+00 0.000000e+00 58: 0.000000e+00 0.000000e+00 59: 0.000000e+00 0.000000e+00 60: 0.000000e+00 0.000000e+00 61: 0.000000e+00 0.000000e+00 62: 0.000000e+00 0.000000e+00 63: 0.000000e+00 0.000000e+00 64: 0.000000e+00 0.000000e+00 65: 0.000000e+00 0.000000e+00 66: 0.000000e+00 0.000000e+00 67: 0.000000e+00 0.000000e+00 68: 0.000000e+00 0.000000e+00 69: 0.000000e+00 0.000000e+00 70: 0.000000e+00 0.000000e+00 71: 0.000000e+00 0.000000e+00 72: 0.000000e+00 0.000000e+00 73: 0.000000e+00 0.000000e+00 74: 0.000000e+00 0.000000e+00 75: 0.000000e+00 0.000000e+00 76: 0.000000e+00 0.000000e+00 77: 0.000000e+00 0.000000e+00 78: 0.000000e+00 0.000000e+00 79: 0.000000e+00 0.000000e+00 80: 0.000000e+00 0.000000e+00 81: 0.000000e+00 0.000000e+00 82: 0.000000e+00 0.000000e+00 83: 0.000000e+00 0.000000e+00 84: 0.000000e+00 0.000000e+00 85: 0.000000e+00 0.000000e+00 86: 0.000000e+00 0.000000e+00 87: 0.000000e+00 0.000000e+00 88: 0.000000e+00 0.000000e+00 89: 0.000000e+00 0.000000e+00 90: 0.000000e+00 0.000000e+00 91: 0.000000e+00 0.000000e+00 92: 0.000000e+00 0.000000e+00 93: 0.000000e+00 0.000000e+00 94: 0.000000e+00 0.000000e+00 95: 0.000000e+00 0.000000e+00 96: 0.000000e+00 0.000000e+00 97: 0.000000e+00 0.000000e+00 98: 0.000000e+00 0.000000e+00 99: 0.000000e+00 0.000000e+00 100: 0.000000e+00 0.000000e+00 101: 0.000000e+00 0.000000e+00 102: 0.000000e+00 0.000000e+00 103: 0.000000e+00 0.000000e+00 104: 0.000000e+00 0.000000e+00 105: 0.000000e+00 0.000000e+00 106: 0.000000e+00 0.000000e+00 107: 0.000000e+00 0.000000e+00 108: 0.000000e+00 0.000000e+00 109: 0.000000e+00 0.000000e+00 110: 0.000000e+00 0.000000e+00 111: 0.000000e+00 0.000000e+00 112: 0.000000e+00 0.000000e+00 113: 0.000000e+00 0.000000e+00 114: 0.000000e+00 0.000000e+00 115: 0.000000e+00 0.000000e+00 116: 0.000000e+00 0.000000e+00 117: 0.000000e+00 0.000000e+00 118: 0.000000e+00 0.000000e+00 119: 0.000000e+00 0.000000e+00 120: 0.000000e+00 0.000000e+00 121: 0.000000e+00 0.000000e+00 122: 0.000000e+00 0.000000e+00 123: 0.000000e+00 0.000000e+00 124: 0.000000e+00 0.000000e+00 125: 0.000000e+00 0.000000e+00 126: 0.000000e+00 0.000000e+00 127: 0.000000e+00 0.000000e+00 128: 0.000000e+00 0.000000e+00 129: 0.000000e+00 0.000000e+00 130: 0.000000e+00 0.000000e+00 131: 0.000000e+00 0.000000e+00 132: 0.000000e+00 0.000000e+00 133: 0.000000e+00 0.000000e+00 134: 0.000000e+00 0.000000e+00 135: 0.000000e+00 0.000000e+00 136: 0.000000e+00 0.000000e+00 137: 0.000000e+00 0.000000e+00 138: 0.000000e+00 0.000000e+00 139: 0.000000e+00 0.000000e+00 140: 0.000000e+00 0.000000e+00 141: 0.000000e+00 0.000000e+00 142: 0.000000e+00 0.000000e+00 143: 0.000000e+00 0.000000e+00 144: 0.000000e+00 0.000000e+00 145: 0.000000e+00 0.000000e+00 146: 0.000000e+00 0.000000e+00 147: 0.000000e+00 0.000000e+00 148: 0.000000e+00 0.000000e+00 149: 0.000000e+00 0.000000e+00 150: 0.000000e+00 0.000000e+00 151: 0.000000e+00 0.000000e+00 152: 0.000000e+00 0.000000e+00 153: 0.000000e+00 0.000000e+00 154: 0.000000e+00 0.000000e+00 155: 0.000000e+00 0.000000e+00 156: 0.000000e+00 0.000000e+00 157: 0.000000e+00 0.000000e+00 158: 0.000000e+00 0.000000e+00 159: 0.000000e+00 0.000000e+00 160: 0.000000e+00 0.000000e+00 161: 0.000000e+00 0.000000e+00 162: 0.000000e+00 0.000000e+00 163: 0.000000e+00 0.000000e+00 164: 0.000000e+00 0.000000e+00 165: 0.000000e+00 0.000000e+00 166: 0.000000e+00 0.000000e+00 167: 0.000000e+00 0.000000e+00 168: 0.000000e+00 0.000000e+00 169: 0.000000e+00 0.000000e+00 170: 0.000000e+00 0.000000e+00 171: 0.000000e+00 0.000000e+00 172: 0.000000e+00 0.000000e+00 173: 0.000000e+00 0.000000e+00 174: 0.000000e+00 0.000000e+00 175: 0.000000e+00 0.000000e+00 176: 0.000000e+00 0.000000e+00 177: 0.000000e+00 0.000000e+00 178: 0.000000e+00 0.000000e+00 179: 0.000000e+00 0.000000e+00 180: 0.000000e+00 0.000000e+00 181: 0.000000e+00 0.000000e+00 182: 0.000000e+00 0.000000e+00 183: 0.000000e+00 0.000000e+00 184: 0.000000e+00 0.000000e+00 185: 0.000000e+00 0.000000e+00 186: 0.000000e+00 0.000000e+00 187: 0.000000e+00 0.000000e+00 188: 0.000000e+00 0.000000e+00 189: 0.000000e+00 0.000000e+00 190: 0.000000e+00 0.000000e+00 191: 0.000000e+00 0.000000e+00 192: 0.000000e+00 0.000000e+00 193: 0.000000e+00 0.000000e+00 194: 0.000000e+00 0.000000e+00 195: 0.000000e+00 0.000000e+00 196: 0.000000e+00 0.000000e+00 197: 0.000000e+00 0.000000e+00 198: 0.000000e+00 0.000000e+00 199: 0.000000e+00 0.000000e+00 200: 0.000000e+00 0.000000e+00 201: 0.000000e+00 0.000000e+00 202: 0.000000e+00 0.000000e+00 203: 0.000000e+00 0.000000e+00 204: 0.000000e+00 0.000000e+00 205: 0.000000e+00 0.000000e+00 206: 0.000000e+00 0.000000e+00 207: 0.000000e+00 0.000000e+00 208: 0.000000e+00 0.000000e+00 209: 0.000000e+00 0.000000e+00 210: 0.000000e+00 0.000000e+00 211: 0.000000e+00 0.000000e+00 212: 0.000000e+00 0.000000e+00 213: 0.000000e+00 0.000000e+00 214: 0.000000e+00 0.000000e+00 215: 0.000000e+00 0.000000e+00 216: 0.000000e+00 0.000000e+00 217: 0.000000e+00 0.000000e+00 218: 0.000000e+00 0.000000e+00 219: 0.000000e+00 0.000000e+00 220: 0.000000e+00 0.000000e+00 221: 0.000000e+00 0.000000e+00 222: 0.000000e+00 0.000000e+00 223: 0.000000e+00 0.000000e+00 224: 0.000000e+00 0.000000e+00 225: 0.000000e+00 0.000000e+00 226: 0.000000e+00 0.000000e+00 227: 0.000000e+00 0.000000e+00 228: 0.000000e+00 0.000000e+00 229: 0.000000e+00 0.000000e+00 230: 0.000000e+00 0.000000e+00 231: 0.000000e+00 0.000000e+00 232: 0.000000e+00 0.000000e+00 233: 0.000000e+00 0.000000e+00 234: 0.000000e+00 0.000000e+00 235: 0.000000e+00 0.000000e+00 236: 0.000000e+00 0.000000e+00 237: 0.000000e+00 0.000000e+00 238: 0.000000e+00 0.000000e+00 239: 0.000000e+00 0.000000e+00 240: 0.000000e+00 0.000000e+00 241: 0.000000e+00 0.000000e+00 242: 0.000000e+00 0.000000e+00 243: 0.000000e+00 0.000000e+00 244: 0.000000e+00 0.000000e+00 245: 0.000000e+00 0.000000e+00 246: 0.000000e+00 0.000000e+00 247: 0.000000e+00 0.000000e+00 248: 0.000000e+00 0.000000e+00 249: 0.000000e+00 0.000000e+00 250: 0.000000e+00 0.000000e+00 251: 0.000000e+00 0.000000e+00 252: 0.000000e+00 0.000000e+00 253: 0.000000e+00 0.000000e+00 254: 0.000000e+00 0.000000e+00 255: 0.000000e+00 0.000000e+00 256: 0.000000e+00 0.000000e+00 257: 0.000000e+00 0.000000e+00 258: 0.000000e+00 0.000000e+00 259: 0.000000e+00 0.000000e+00 260: 0.000000e+00 0.000000e+00 261: 0.000000e+00 0.000000e+00 262: 0.000000e+00 0.000000e+00 263: 0.000000e+00 0.000000e+00 264: 0.000000e+00 0.000000e+00 265: 0.000000e+00 0.000000e+00 266: 0.000000e+00 0.000000e+00 267: 0.000000e+00 0.000000e+00 268: 0.000000e+00 0.000000e+00 269: 0.000000e+00 0.000000e+00 270: 0.000000e+00 0.000000e+00 271: 0.000000e+00 0.000000e+00 272: 0.000000e+00 0.000000e+00 273: 0.000000e+00 0.000000e+00 274: 0.000000e+00 0.000000e+00 275: 0.000000e+00 0.000000e+00 276: 0.000000e+00 0.000000e+00 277: 0.000000e+00 0.000000e+00 278: 0.000000e+00 0.000000e+00 279: 0.000000e+00 0.000000e+00 280: 0.000000e+00 0.000000e+00 281: 0.000000e+00 0.000000e+00 282: 0.000000e+00 0.000000e+00 283: 0.000000e+00 0.000000e+00 284: 0.000000e+00 0.000000e+00 285: 0.000000e+00 0.000000e+00 286: 0.000000e+00 0.000000e+00 287: 0.000000e+00 0.000000e+00 288: 0.000000e+00 0.000000e+00 289: 0.000000e+00 0.000000e+00 290: 0.000000e+00 0.000000e+00 291: 0.000000e+00 0.000000e+00 292: 0.000000e+00 0.000000e+00 293: 0.000000e+00 0.000000e+00 294: 0.000000e+00 0.000000e+00 295: 0.000000e+00 0.000000e+00 296: 0.000000e+00 0.000000e+00 297: 0.000000e+00 0.000000e+00 298: 0.000000e+00 0.000000e+00 299: 0.000000e+00 0.000000e+00 300: 0.000000e+00 0.000000e+00 301: 0.000000e+00 0.000000e+00 302: 0.000000e+00 0.000000e+00 303: 0.000000e+00 0.000000e+00 304: 0.000000e+00 0.000000e+00 305: 0.000000e+00 0.000000e+00 306: 0.000000e+00 0.000000e+00 307: 0.000000e+00 0.000000e+00 308: 0.000000e+00 0.000000e+00 309: 0.000000e+00 0.000000e+00 310: 0.000000e+00 0.000000e+00 311: 0.000000e+00 0.000000e+00 312: 0.000000e+00 0.000000e+00 313: 0.000000e+00 0.000000e+00 314: 0.000000e+00 0.000000e+00 315: 0.000000e+00 0.000000e+00 316: 0.000000e+00 0.000000e+00 317: 0.000000e+00 0.000000e+00 318: 0.000000e+00 0.000000e+00 319: 0.000000e+00 0.000000e+00 320: 0.000000e+00 0.000000e+00 321: 0.000000e+00 0.000000e+00 322: 0.000000e+00 0.000000e+00 323: 0.000000e+00 0.000000e+00 324: 0.000000e+00 0.000000e+00 325: 0.000000e+00 0.000000e+00 326: 0.000000e+00 0.000000e+00 327: 0.000000e+00 0.000000e+00 328: 0.000000e+00 0.000000e+00 329: 0.000000e+00 0.000000e+00 330: 0.000000e+00 0.000000e+00 331: 0.000000e+00 0.000000e+00 332: 0.000000e+00 0.000000e+00 333: 0.000000e+00 0.000000e+00 334: 0.000000e+00 0.000000e+00 335: 0.000000e+00 0.000000e+00 336: 0.000000e+00 0.000000e+00 337: 0.000000e+00 0.000000e+00 338: 0.000000e+00 0.000000e+00 339: 0.000000e+00 0.000000e+00 340: 0.000000e+00 0.000000e+00 341: 0.000000e+00 0.000000e+00 342: 0.000000e+00 0.000000e+00 343: 0.000000e+00 0.000000e+00 344: 0.000000e+00 0.000000e+00 345: 0.000000e+00 0.000000e+00 346: 0.000000e+00 0.000000e+00 347: 0.000000e+00 0.000000e+00 348: 0.000000e+00 0.000000e+00 349: 0.000000e+00 0.000000e+00 350: 0.000000e+00 0.000000e+00 351: 0.000000e+00 0.000000e+00 352: 0.000000e+00 0.000000e+00 353: 0.000000e+00 0.000000e+00 354: 0.000000e+00 0.000000e+00 355: 0.000000e+00 0.000000e+00 356: 0.000000e+00 0.000000e+00 357: 0.000000e+00 0.000000e+00 358: 0.000000e+00 0.000000e+00 359: 0.000000e+00 0.000000e+00 360: 0.000000e+00 0.000000e+00 361: 0.000000e+00 0.000000e+00 362: 0.000000e+00 0.000000e+00 363: 0.000000e+00 0.000000e+00 364: 0.000000e+00 0.000000e+00 365: 0.000000e+00 0.000000e+00 366: 0.000000e+00 0.000000e+00 367: 0.000000e+00 0.000000e+00 368: 0.000000e+00 0.000000e+00 369: 0.000000e+00 0.000000e+00 370: 0.000000e+00 0.000000e+00 371: 0.000000e+00 0.000000e+00 372: 0.000000e+00 0.000000e+00 373: 0.000000e+00 0.000000e+00 374: 0.000000e+00 0.000000e+00 375: 0.000000e+00 0.000000e+00 376: 0.000000e+00 0.000000e+00 377: 0.000000e+00 0.000000e+00 378: 0.000000e+00 0.000000e+00 379: 0.000000e+00 0.000000e+00 380: 0.000000e+00 0.000000e+00 381: 0.000000e+00 0.000000e+00 382: 0.000000e+00 0.000000e+00 383: 0.000000e+00 0.000000e+00 384: 0.000000e+00 0.000000e+00 385: 0.000000e+00 0.000000e+00 386: 0.000000e+00 0.000000e+00 387: 0.000000e+00 0.000000e+00 388: 0.000000e+00 0.000000e+00 389: 0.000000e+00 0.000000e+00 390: 0.000000e+00 0.000000e+00 391: 0.000000e+00 0.000000e+00 392: 0.000000e+00 0.000000e+00 393: 0.000000e+00 0.000000e+00 394: 0.000000e+00 0.000000e+00 395: 0.000000e+00 0.000000e+00 396: 0.000000e+00 0.000000e+00 397: 0.000000e+00 0.000000e+00 398: 0.000000e+00 0.000000e+00 399: 0.000000e+00 0.000000e+00 400: 0.000000e+00 0.000000e+00 401: 0.000000e+00 0.000000e+00 402: 0.000000e+00 0.000000e+00 403: 0.000000e+00 0.000000e+00 404: 0.000000e+00 0.000000e+00 405: 0.000000e+00 0.000000e+00 406: 0.000000e+00 0.000000e+00 407: 0.000000e+00 0.000000e+00 408: 0.000000e+00 0.000000e+00 409: 0.000000e+00 0.000000e+00 410: 0.000000e+00 0.000000e+00 411: 0.000000e+00 0.000000e+00 412: 0.000000e+00 0.000000e+00 413: 0.000000e+00 0.000000e+00 414: 0.000000e+00 0.000000e+00 415: 0.000000e+00 0.000000e+00 416: 0.000000e+00 0.000000e+00 417: 0.000000e+00 0.000000e+00 418: 0.000000e+00 0.000000e+00 419: 0.000000e+00 0.000000e+00 420: 0.000000e+00 0.000000e+00 421: 0.000000e+00 0.000000e+00 422: 0.000000e+00 0.000000e+00 423: 0.000000e+00 0.000000e+00 424: 0.000000e+00 0.000000e+00 425: 0.000000e+00 0.000000e+00 426: 0.000000e+00 0.000000e+00 427: 0.000000e+00 0.000000e+00 428: 0.000000e+00 0.000000e+00 429: 0.000000e+00 0.000000e+00 430: 0.000000e+00 0.000000e+00 431: 0.000000e+00 0.000000e+00 432: 0.000000e+00 0.000000e+00 433: 0.000000e+00 0.000000e+00 434: 0.000000e+00 0.000000e+00 435: 0.000000e+00 0.000000e+00 436: 0.000000e+00 0.000000e+00 437: 0.000000e+00 0.000000e+00 438: 0.000000e+00 0.000000e+00 439: 0.000000e+00 0.000000e+00 440: 0.000000e+00 0.000000e+00 441: 0.000000e+00 0.000000e+00 442: 0.000000e+00 0.000000e+00 443: 0.000000e+00 0.000000e+00 444: 0.000000e+00 0.000000e+00 445: 0.000000e+00 0.000000e+00 446: 0.000000e+00 0.000000e+00 447: 0.000000e+00 0.000000e+00 448: 0.000000e+00 0.000000e+00 449: 0.000000e+00 0.000000e+00 450: 0.000000e+00 0.000000e+00 451: 0.000000e+00 0.000000e+00 452: 0.000000e+00 0.000000e+00 453: 0.000000e+00 0.000000e+00 454: 0.000000e+00 0.000000e+00 455: 0.000000e+00 0.000000e+00 456: 0.000000e+00 0.000000e+00 457: 0.000000e+00 0.000000e+00 458: 0.000000e+00 0.000000e+00 459: 0.000000e+00 0.000000e+00 460: 0.000000e+00 0.000000e+00 461: 0.000000e+00 0.000000e+00 462: 0.000000e+00 0.000000e+00 463: 0.000000e+00 0.000000e+00 464: 0.000000e+00 0.000000e+00 465: 0.000000e+00 0.000000e+00 466: 0.000000e+00 0.000000e+00 467: 0.000000e+00 0.000000e+00 468: 0.000000e+00 0.000000e+00 469: 0.000000e+00 0.000000e+00 470: 0.000000e+00 0.000000e+00 471: 0.000000e+00 0.000000e+00 472: 0.000000e+00 0.000000e+00 473: 0.000000e+00 0.000000e+00 474: 0.000000e+00 0.000000e+00 475: 0.000000e+00 0.000000e+00 476: 0.000000e+00 0.000000e+00 477: 0.000000e+00 0.000000e+00 478: 0.000000e+00 0.000000e+00 479: 0.000000e+00 0.000000e+00 480: 0.000000e+00 0.000000e+00 481: 0.000000e+00 0.000000e+00 482: 0.000000e+00 0.000000e+00 483: 0.000000e+00 0.000000e+00 484: 0.000000e+00 0.000000e+00 485: 0.000000e+00 0.000000e+00 486: 0.000000e+00 0.000000e+00 487: 0.000000e+00 0.000000e+00 488: 0.000000e+00 0.000000e+00 489: 0.000000e+00 0.000000e+00 490: 0.000000e+00 0.000000e+00 491: 0.000000e+00 0.000000e+00 492: 0.000000e+00 0.000000e+00 493: 0.000000e+00 0.000000e+00 494: 0.000000e+00 0.000000e+00 495: 0.000000e+00 0.000000e+00 496: 0.000000e+00 0.000000e+00 497: 0.000000e+00 0.000000e+00 498: 0.000000e+00 0.000000e+00 499: 0.000000e+00 0.000000e+00 500: 0.000000e+00 0.000000e+00 501: 0.000000e+00 0.000000e+00 502: 0.000000e+00 0.000000e+00 503: 0.000000e+00 0.000000e+00 504: 0.000000e+00 0.000000e+00 505: 0.000000e+00 0.000000e+00 506: 0.000000e+00 0.000000e+00 507: 0.000000e+00 0.000000e+00 508: 0.000000e+00 0.000000e+00 509: 0.000000e+00 0.000000e+00 510: 0.000000e+00 0.000000e+00 511: 0.000000e+00 0.000000e+00 512: 0.000000e+00 0.000000e+00 513: 0.000000e+00 0.000000e+00 514: 0.000000e+00 0.000000e+00 515: 0.000000e+00 0.000000e+00 516: 0.000000e+00 0.000000e+00 517: 0.000000e+00 0.000000e+00 518: 0.000000e+00 0.000000e+00 519: 0.000000e+00 0.000000e+00 520: 0.000000e+00 0.000000e+00 521: 0.000000e+00 0.000000e+00 522: 0.000000e+00 0.000000e+00 523: 0.000000e+00 0.000000e+00 524: 0.000000e+00 0.000000e+00 525: 0.000000e+00 0.000000e+00 526: 0.000000e+00 0.000000e+00 527: 0.000000e+00 0.000000e+00 528: 0.000000e+00 0.000000e+00 529: 0.000000e+00 0.000000e+00 530: 0.000000e+00 0.000000e+00 531: 0.000000e+00 0.000000e+00 532: 0.000000e+00 0.000000e+00 533: 0.000000e+00 0.000000e+00 534: 0.000000e+00 0.000000e+00 535: 0.000000e+00 0.000000e+00 536: 0.000000e+00 0.000000e+00 537: 0.000000e+00 0.000000e+00 538: 0.000000e+00 0.000000e+00 539: 0.000000e+00 0.000000e+00 540: 0.000000e+00 0.000000e+00 541: 0.000000e+00 0.000000e+00 542: 0.000000e+00 0.000000e+00 543: 0.000000e+00 0.000000e+00 544: 0.000000e+00 0.000000e+00 545: 0.000000e+00 0.000000e+00 546: 0.000000e+00 0.000000e+00 547: 0.000000e+00 0.000000e+00 548: 0.000000e+00 0.000000e+00 549: 0.000000e+00 0.000000e+00 550: 0.000000e+00 0.000000e+00 551: 0.000000e+00 0.000000e+00 552: 0.000000e+00 0.000000e+00 553: 0.000000e+00 0.000000e+00 554: 0.000000e+00 0.000000e+00 555: 0.000000e+00 0.000000e+00 556: 0.000000e+00 0.000000e+00 557: 0.000000e+00 0.000000e+00 558: 0.000000e+00 0.000000e+00 559: 0.000000e+00 0.000000e+00 560: 0.000000e+00 0.000000e+00 561: 0.000000e+00 0.000000e+00 562: 0.000000e+00 0.000000e+00 563: 0.000000e+00 0.000000e+00 564: 0.000000e+00 0.000000e+00 565: 0.000000e+00 0.000000e+00 566: 0.000000e+00 0.000000e+00 567: 0.000000e+00 0.000000e+00 568: 0.000000e+00 0.000000e+00 569: 0.000000e+00 0.000000e+00 570: 0.000000e+00 0.000000e+00 571: 0.000000e+00 0.000000e+00 572: 0.000000e+00 0.000000e+00 573: 0.000000e+00 0.000000e+00 574: 0.000000e+00 0.000000e+00 575: 0.000000e+00 0.000000e+00 576: 0.000000e+00 0.000000e+00 577: 0.000000e+00 0.000000e+00 578: 0.000000e+00 0.000000e+00 579: 0.000000e+00 0.000000e+00 580: 0.000000e+00 0.000000e+00 581: 0.000000e+00 0.000000e+00 582: 0.000000e+00 0.000000e+00 583: 0.000000e+00 0.000000e+00 584: 0.000000e+00 0.000000e+00 585: 0.000000e+00 0.000000e+00 586: 0.000000e+00 0.000000e+00 587: 0.000000e+00 0.000000e+00 588: 0.000000e+00 0.000000e+00 589: 0.000000e+00 0.000000e+00 590: 0.000000e+00 0.000000e+00 591: 0.000000e+00 0.000000e+00 592: 0.000000e+00 0.000000e+00 593: 0.000000e+00 0.000000e+00 594: 0.000000e+00 0.000000e+00 595: 0.000000e+00 0.000000e+00 596: 0.000000e+00 0.000000e+00 597: 0.000000e+00 0.000000e+00 598: 0.000000e+00 0.000000e+00 599: 0.000000e+00 0.000000e+00 600: 0.000000e+00 0.000000e+00 601: 0.000000e+00 0.000000e+00 602: 0.000000e+00 0.000000e+00 603: 0.000000e+00 0.000000e+00 604: 0.000000e+00 0.000000e+00 605: 0.000000e+00 0.000000e+00 606: 0.000000e+00 0.000000e+00 607: 0.000000e+00 0.000000e+00 608: 0.000000e+00 0.000000e+00 609: 0.000000e+00 0.000000e+00 610: 0.000000e+00 0.000000e+00 611: 0.000000e+00 0.000000e+00 612: 0.000000e+00 0.000000e+00 613: 0.000000e+00 0.000000e+00 614: 0.000000e+00 0.000000e+00 615: 0.000000e+00 0.000000e+00 616: 0.000000e+00 0.000000e+00 617: 0.000000e+00 0.000000e+00 618: 0.000000e+00 0.000000e+00 619: 0.000000e+00 0.000000e+00 620: 1.000000e+00 0.000000e+00 621: 1.000000e+00 0.000000e+00 622: 1.000000e+00 0.000000e+00 623: 1.000000e+00 0.000000e+00 624: 1.000000e+00 0.000000e+00 625: 1.000000e+00 0.000000e+00 626: 1.000000e+00 0.000000e+00 627: 1.000000e+00 0.000000e+00 628: 1.000000e+00 0.000000e+00 629: 1.000000e+00 0.000000e+00 # factor 0: 7 # factor 1: 6 # factor 2: 5 # factor 3: 3 0: 2.100000e+01 0.000000e+00 1: 2.096173e+01 -1.051242e-15 2: 2.084715e+01 1.373901e-15 3: 2.065704e+01 6.383782e-16 4: 2.039261e+01 6.397660e-15 5: 2.005560e+01 5.939693e-15 6: 1.964821e+01 7.355228e-15 7: 1.917307e+01 6.383782e-16 8: 1.863328e+01 -5.273559e-16 9: 1.803232e+01 1.887379e-15 10: 1.737406e+01 6.661338e-16 11: 1.666272e+01 4.884981e-15 12: 1.590285e+01 5.273559e-15 13: 1.509927e+01 5.939693e-15 14: 1.425706e+01 1.165734e-15 15: 1.338149e+01 8.326673e-16 16: 1.247803e+01 2.081668e-15 17: 1.155225e+01 7.494005e-16 18: 1.060982e+01 3.039236e-15 19: 9.656443e+00 4.177214e-15 20: 8.697842e+00 3.788636e-15 21: 7.739681e+00 1.110223e-15 22: 6.787549e+00 8.604228e-16 23: 5.846909e+00 1.748601e-15 24: 4.923063e+00 1.387779e-16 25: 4.021112e+00 7.216450e-16 26: 3.145923e+00 1.942890e-15 27: 2.302090e+00 1.276756e-15 28: 1.493907e+00 -1.665335e-16 29: 7.253407e-01 -5.551115e-16 30: -6.661338e-16 -2.220446e-16 31: -6.788825e-01 -1.221245e-15 32: -1.308472e+00 -2.498002e-15 33: -1.886344e+00 -1.110223e-15 34: -2.410503e+00 -2.220446e-15 35: -2.879385e+00 -1.276756e-15 36: -3.291865e+00 -1.332268e-15 37: -3.647260e+00 -1.165734e-15 38: -3.945325e+00 -3.108624e-15 39: -4.186247e+00 -4.662937e-15 40: -4.370640e+00 -3.774758e-15 41: -4.499527e+00 -3.552714e-15 42: -4.574329e+00 -2.220446e-16 43: -4.596844e+00 -6.277699e-17 44: -4.569225e+00 -3.979137e-16 45: -4.493959e+00 -6.125144e-16 46: -4.373836e+00 -2.588272e-15 47: -4.211924e+00 -1.708533e-15 48: -4.011536e+00 -1.610301e-15 49: -3.776200e+00 -6.521231e-16 50: -3.509623e+00 -9.518362e-16 51: -3.215658e+00 -8.615412e-16 52: -2.898269e+00 -8.023074e-16 53: -2.561495e+00 -1.295581e-15 54: -2.209413e+00 -1.882798e-15 55: -1.846105e+00 -1.309680e-15 56: -1.475622e+00 -8.731621e-17 57: -1.101950e+00 -6.064088e-16 58: -7.289764e-01 -5.283445e-16 59: -3.604599e-01 -3.700906e-16 60: -2.480852e-16 -3.217778e-16 61: 3.489905e-01 -3.427744e-16 62: 6.833118e-01 -5.628327e-17 63: 1.000000e+00 9.525275e-17 64: 1.296348e+00 -1.015236e-16 65: 1.569925e+00 1.617614e-16 66: 1.818588e+00 1.651517e-16 67: 2.040501e+00 8.832176e-16 68: 2.234139e+00 7.155281e-16 69: 2.398296e+00 8.060351e-16 70: 2.532089e+00 9.180115e-16 71: 2.634960e+00 2.633349e-16 72: 2.706672e+00 1.187041e-15 73: 2.747304e+00 3.755772e-16 74: 2.757241e+00 8.376828e-16 75: 2.737169e+00 2.203930e-15 76: 2.688054e+00 1.197283e-15 77: 2.611133e+00 -2.998065e-16 78: 2.507892e+00 -9.785191e-16 79: 2.380048e+00 -9.898606e-16 80: 2.229526e+00 -5.077927e-16 81: 2.058436e+00 -5.413850e-16 82: 1.869051e+00 6.993526e-16 83: 1.663775e+00 -4.736301e-16 84: 1.445125e+00 1.110223e-16 85: 1.215696e+00 -2.373302e-16 86: 9.781383e-01 2.565092e-16 87: 7.351295e-01 -2.522207e-16 88: 4.893460e-01 -1.473382e-16 89: 2.434373e-01 1.109184e-15 90: -1.989431e-15 -3.411591e-16 91: -2.384474e-01 -5.318012e-16 92: -4.694881e-01 2.328401e-16 93: -6.908292e-01 -8.646065e-17 94: -9.003229e-01 -7.857807e-16 95: -1.095985e+00 -1.799037e-15 96: -1.276012e+00 -2.161196e-16 97: -1.438796e+00 -9.983452e-16 98: -1.582939e+00 -6.065732e-16 99: -1.707260e+00 2.152265e-16 100: -1.810806e+00 -3.264639e-16 101: -1.892859e+00 -5.055122e-16 102: -1.952933e+00 -2.036075e-15 103: -1.990783e+00 -1.452785e-15 104: -2.006398e+00 -1.506787e-15 105: -2.000000e+00 -3.771208e-16 106: -1.972036e+00 3.323489e-16 107: -1.923170e+00 -7.476386e-16 108: -1.854275e+00 -9.508935e-17 109: -1.766419e+00 -1.940360e-15 110: -1.660850e+00 -1.760991e-15 111: -1.538980e+00 -6.147117e-16 112: -1.402374e+00 -8.585493e-16 113: -1.252721e+00 -3.300750e-16 114: -1.091826e+00 -1.311000e-15 115: -9.215804e-01 -4.440252e-16 116: -7.439464e-01 -2.073484e-15 117: -5.609343e-01 -2.601855e-15 118: -3.745807e-01 -8.979032e-16 119: -1.869274e-01 2.912711e-16 120: -1.715798e-15 5.664477e-16 121: 1.842128e-01 1.230585e-16 122: 3.637795e-01 1.061285e-15 123: 5.368447e-01 8.829804e-16 124: 7.016480e-01 -4.939307e-16 125: 8.565403e-01 1.392795e-15 126: 1.000000e+00 0.000000e+00 127: 1.130647e+00 -1.528557e-17 128: 1.247255e+00 -4.291169e-16 129: 1.348762e+00 3.223830e-16 130: 1.434281e+00 -6.912208e-16 131: 1.503106e+00 -1.380961e-15 132: 1.554714e+00 1.253781e-16 133: 1.588775e+00 -1.792421e-16 134: 1.605146e+00 -6.501297e-16 135: 1.603875e+00 2.105874e-16 136: 1.585197e+00 1.751581e-16 137: 1.549526e+00 1.205978e-16 138: 1.497454e+00 -1.026329e-15 139: 1.429739e+00 2.034781e-17 140: 1.347296e+00 -4.955509e-16 141: 1.251187e+00 -1.428373e-15 142: 1.142604e+00 -3.568238e-16 143: 1.022861e+00 -3.836222e-16 144: 8.933738e-01 -6.389491e-16 145: 7.556456e-01 -1.247492e-15 146: 6.112512e-01 -8.130105e-16 147: 4.618187e-01 8.646065e-17 148: 3.090116e-01 -6.532673e-16 149: 1.545116e-01 -1.839025e-16 150: -6.539201e-17 1.134394e-16 151: -1.528597e-01 -3.883800e-16 152: -3.024391e-01 -9.790769e-16 153: -4.471621e-01 -3.570986e-16 154: -5.855204e-01 -3.154104e-17 155: -7.160894e-01 -3.803775e-16 156: -8.375420e-01 -1.423005e-16 157: -9.486618e-01 9.467191e-16 158: -1.048355e+00 -1.075184e-15 159: -1.135660e+00 2.958649e-16 160: -1.209758e+00 -7.434995e-16 161: -1.269978e+00 -1.197924e-15 162: -1.315804e+00 -2.483837e-15 163: -1.346880e+00 -1.986506e-15 164: -1.363010e+00 -2.273250e-15 165: -1.364160e+00 -3.362421e-15 166: -1.350455e+00 -2.707155e-15 167: -1.322180e+00 -2.640979e-15 168: -1.279773e+00 2.220446e-16 169: -1.223817e+00 -5.068662e-16 170: -1.155037e+00 1.680655e-16 171: -1.074290e+00 7.088856e-16 172: -9.825500e-01 -1.675164e-16 173: -8.809036e-01 -2.262585e-16 174: -7.705329e-01 1.660555e-16 175: -6.527036e-01 4.472323e-16 176: -5.287511e-01 7.307475e-16 177: -4.000650e-01 -3.172974e-16 178: -2.680744e-01 4.137293e-16 179: -1.342324e-01 -6.064496e-16 180: 6.742551e-16 -1.470733e-16 181: 1.331690e-01 1.504979e-16 182: 2.638437e-01 -8.731621e-17 183: 3.906312e-01 3.207541e-16 184: 5.121908e-01 -7.590137e-16 185: 6.272483e-01 -1.424316e-16 186: 7.346089e-01 -7.936247e-16 187: 8.331694e-01 -8.288514e-16 188: 9.219291e-01 -6.631544e-16 189: 1.000000e+00 -7.482822e-16 190: 1.066615e+00 -2.159362e-16 191: 1.121136e+00 -3.681989e-16 192: 1.163060e+00 -9.267006e-16 193: 1.192020e+00 -6.361458e-16 194: 1.207795e+00 -1.250618e-15 195: 1.210304e+00 -2.498760e-15 196: 1.199610e+00 -1.082633e-15 197: 1.175919e+00 -1.051684e-15 198: 1.139572e+00 -2.953387e-15 199: 1.091048e+00 -1.988494e-15 200: 1.030951e+00 -2.573996e-15 201: 9.600058e-01 -2.506964e-15 202: 8.790504e-01 -2.525727e-15 203: 7.890244e-01 -1.430320e-15 204: 6.909592e-01 -7.940139e-16 205: 5.859667e-01 -1.448806e-15 206: 4.752260e-01 -3.331757e-15 207: 3.599714e-01 -2.696823e-15 208: 2.414782e-01 -1.273025e-15 209: 1.210491e-01 -3.884812e-15 210: 0.000000e+00 0.000000e+00 211: -1.203541e-01 9.367507e-17 212: -2.387131e-01 -8.326673e-17 213: -3.538059e-01 -1.671241e-15 214: -4.644036e-01 -1.032863e-15 215: -5.693324e-01 -5.551115e-17 216: -6.674861e-01 -2.656564e-15 217: -7.578373e-01 -1.046741e-15 218: -8.394483e-01 5.748960e-16 219: -9.114803e-01 -1.110223e-16 220: -9.732024e-01 -6.661338e-16 221: -1.023998e+00 -4.440892e-16 222: -1.063373e+00 -5.551115e-17 223: -1.090956e+00 -3.092682e-15 224: -1.106507e+00 -1.665335e-16 225: -1.109916e+00 -3.330669e-16 226: -1.101205e+00 -8.524518e-16 227: -1.080526e+00 -1.352052e-15 228: -1.048159e+00 -6.760261e-16 229: -1.004510e+00 -3.707147e-16 230: -9.501041e-01 -1.643486e-15 231: -8.855794e-01 -7.731706e-16 232: -8.116813e-01 -4.718448e-16 233: -7.292528e-01 -6.343927e-16 234: -6.392251e-01 -1.213274e-15 235: -5.426076e-01 -1.354045e-15 236: -4.404764e-01 2.775558e-17 237: -3.339626e-01 -1.586978e-15 238: -2.242400e-01 -3.845925e-16 239: -1.125123e-01 2.200518e-16 240: -2.369188e-16 -4.916293e-16 241: 1.120728e-01 -3.439556e-16 242: 2.224913e-01 -4.163336e-16 243: 3.300635e-01 3.885781e-16 244: 4.336325e-01 3.221783e-16 245: 5.320889e-01 -2.131487e-16 246: 6.243825e-01 5.134066e-16 247: 7.095336e-01 5.709105e-16 248: 7.866431e-01 7.096884e-16 249: 8.549018e-01 3.468732e-16 250: 9.135989e-01 1.042755e-15 251: 9.621294e-01 1.342088e-15 252: 1.000000e+00 3.033186e-16 253: 1.026834e+00 2.702899e-16 254: 1.042376e+00 6.785755e-16 255: 1.046493e+00 5.789826e-16 256: 1.039174e+00 1.089270e-15 257: 1.020536e+00 3.671570e-16 258: 9.908126e-01 4.396257e-16 259: 9.503608e-01 3.728405e-16 260: 8.996505e-01 3.804314e-16 261: 8.392616e-01 -2.887396e-17 262: 7.698769e-01 4.595749e-16 263: 6.922746e-01 9.020201e-16 264: 6.073198e-01 2.890403e-16 265: 5.159547e-01 -3.175108e-18 266: 4.191883e-01 3.195876e-16 267: 3.180856e-01 1.301103e-16 268: 2.137557e-01 5.687302e-16 269: 1.073401e-01 6.100192e-16 270: -2.894407e-16 5.826677e-16 271: -1.070960e-01 -2.616340e-16 272: -2.127847e-01 -1.107472e-15 273: -3.159206e-01 -3.949178e-16 274: -4.153883e-01 -4.401969e-17 275: -5.101143e-01 5.618340e-17 276: -5.990789e-01 -8.538336e-16 277: -6.813264e-01 5.927817e-18 278: -7.559760e-01 -1.212488e-15 279: -8.222306e-01 -1.417329e-15 280: -8.793852e-01 -6.323152e-16 281: -9.268349e-01 2.641613e-17 282: -9.640807e-01 -3.563825e-16 283: -9.907347e-01 -2.201713e-16 284: -1.006524e+00 -1.872807e-16 285: -1.011295e+00 -1.030591e-15 286: -1.005012e+00 -1.762599e-15 287: -9.877604e-01 -1.287051e-15 288: -9.597424e-01 8.416380e-17 289: -9.212779e-01 -5.229262e-16 290: -8.727990e-01 -6.623696e-16 291: -8.148456e-01 -5.929106e-16 292: -7.480596e-01 -1.254426e-15 293: -6.731776e-01 -1.896992e-15 294: -5.910229e-01 -1.516593e-16 295: -5.024970e-01 2.399589e-16 296: -4.085691e-01 -2.688540e-16 297: -3.102660e-01 -3.933898e-17 298: -2.086610e-01 -8.122086e-16 299: -1.048621e-01 -8.027307e-16 300: 7.718245e-16 -3.315040e-16 301: 1.047837e-01 3.818447e-17 302: 2.083493e-01 -1.594565e-16 303: 3.095711e-01 -1.937644e-16 304: 4.073493e-01 -2.527135e-16 305: 5.006223e-01 -1.132903e-15 306: 5.883777e-01 -1.074550e-15 307: 6.696634e-01 2.412259e-16 308: 7.435978e-01 4.441532e-16 309: 8.093792e-01 4.332855e-16 310: 8.662947e-01 1.765880e-16 311: 9.137272e-01 4.971401e-16 312: 9.511629e-01 -3.896002e-16 313: 9.781962e-01 2.715655e-17 314: 9.945343e-01 8.315841e-16 315: 1.000000e+00 3.405386e-16 316: 9.945343e-01 4.577114e-16 317: 9.781962e-01 2.807765e-16 318: 9.511629e-01 4.560366e-16 319: 9.137272e-01 -1.015889e-16 320: 8.662947e-01 2.889358e-16 321: 8.093792e-01 9.202069e-16 322: 7.435978e-01 -3.847117e-16 323: 6.696634e-01 -6.442822e-16 324: 5.883777e-01 9.510423e-17 325: 5.006223e-01 -5.178621e-16 326: 4.073493e-01 -2.175789e-16 327: 3.095711e-01 -2.918347e-16 328: 2.083493e-01 -1.411991e-16 329: 1.047837e-01 1.072074e-15 330: -9.220486e-16 4.483855e-17 331: -1.048621e-01 3.913489e-16 332: -2.086610e-01 3.703136e-16 333: -3.102660e-01 -5.325539e-16 334: -4.085691e-01 -5.660418e-16 335: -5.024970e-01 -9.996290e-16 336: -5.910229e-01 -7.211110e-17 337: -6.731776e-01 -4.239151e-16 338: -7.480596e-01 -9.777574e-17 339: -8.148456e-01 -6.837208e-16 340: -8.727990e-01 -2.689088e-16 341: -9.212779e-01 -8.882634e-16 342: -9.597424e-01 -1.457615e-15 343: -9.877604e-01 -4.711380e-16 344: -1.005012e+00 -4.166625e-16 345: -1.011295e+00 -1.465166e-16 346: -1.006524e+00 -6.866384e-17 347: -9.907347e-01 -7.860160e-17 348: -9.640807e-01 -3.190243e-16 349: -9.268349e-01 -1.562645e-15 350: -8.793852e-01 -6.689875e-16 351: -8.222306e-01 -4.120382e-16 352: -7.559760e-01 -6.006457e-16 353: -6.813264e-01 -1.082422e-15 354: -5.990789e-01 -3.007668e-16 355: -5.101143e-01 -1.113625e-15 356: -4.153883e-01 -1.059421e-15 357: -3.159206e-01 -2.723691e-16 358: -2.127847e-01 -8.842800e-17 359: -1.070960e-01 -8.046626e-17 360: -1.906317e-16 -4.332091e-16 361: 1.073401e-01 -2.998168e-17 362: 2.137557e-01 -9.919583e-16 363: 3.180856e-01 -5.691174e-16 364: 4.191883e-01 -2.426970e-16 365: 5.159547e-01 -3.323034e-16 366: 6.073198e-01 5.066994e-16 367: 6.922746e-01 6.240069e-16 368: 7.698769e-01 -3.540730e-16 369: 8.392616e-01 2.615971e-16 370: 8.996505e-01 2.214334e-16 371: 9.503608e-01 -1.437466e-16 372: 9.908126e-01 7.610382e-16 373: 1.020536e+00 6.918356e-16 374: 1.039174e+00 1.404292e-15 375: 1.046493e+00 6.516396e-16 376: 1.042376e+00 1.124964e-15 377: 1.026834e+00 1.764577e-15 378: 1.000000e+00 4.899035e-16 379: 9.621294e-01 1.117297e-15 380: 9.135989e-01 2.951538e-16 381: 8.549018e-01 4.273443e-16 382: 7.866431e-01 -2.086873e-16 383: 7.095336e-01 1.243452e-15 384: 6.243825e-01 5.610027e-16 385: 5.320889e-01 2.120393e-16 386: 4.336325e-01 4.199919e-16 387: 3.300635e-01 1.840288e-16 388: 2.224913e-01 -8.919745e-16 389: 1.120728e-01 -3.674045e-16 390: 3.723582e-16 1.676634e-16 391: -1.125123e-01 -7.950819e-16 392: -2.242400e-01 -3.173938e-16 393: -3.339626e-01 -1.822978e-16 394: -4.404764e-01 -7.659168e-16 395: -5.426076e-01 -1.206964e-15 396: -6.392251e-01 -1.343149e-15 397: -7.292528e-01 -1.765238e-16 398: -8.116813e-01 -2.792220e-15 399: -8.855794e-01 -1.338977e-15 400: -9.501041e-01 -9.920244e-16 401: -1.004510e+00 -2.009620e-15 402: -1.048159e+00 -2.005039e-15 403: -1.080526e+00 -2.305180e-15 404: -1.101205e+00 -1.099740e-15 405: -1.109916e+00 -3.130874e-15 406: -1.106507e+00 -1.687134e-15 407: -1.090956e+00 -1.656185e-15 408: -1.063373e+00 -1.085649e-15 409: -1.023998e+00 -2.991394e-15 410: -9.732024e-01 -1.503056e-15 411: -9.114803e-01 -1.614514e-15 412: -8.394483e-01 -4.325425e-15 413: -7.578373e-01 -1.100952e-15 414: -6.674861e-01 -1.412321e-15 415: -5.693324e-01 -1.504031e-15 416: -4.644036e-01 -1.876225e-15 417: -3.538059e-01 -1.268903e-15 418: -2.387131e-01 -1.355863e-15 419: -1.203541e-01 -3.610669e-15 420: 0.000000e+00 0.000000e+00 421: 1.210491e-01 9.367507e-17 422: 2.414782e-01 -8.326673e-17 423: 3.599714e-01 -1.328711e-16 424: 4.752260e-01 5.055071e-16 425: 5.859667e-01 -5.551115e-17 426: 6.909592e-01 -1.118194e-15 427: 7.890244e-01 4.916293e-16 428: 8.790504e-01 -9.634741e-16 429: 9.600058e-01 -1.110223e-16 430: 1.030951e+00 -6.661338e-16 431: 1.091048e+00 -4.440892e-16 432: 1.139572e+00 -5.551115e-17 433: 1.175919e+00 -1.594209e-17 434: 1.199610e+00 -1.665335e-16 435: 1.210304e+00 -3.330669e-16 436: 1.207795e+00 6.859183e-16 437: 1.192020e+00 1.863180e-16 438: 1.163060e+00 9.315899e-17 439: 1.121136e+00 3.984703e-16 440: 1.066615e+00 -1.051156e-16 441: 1.000000e+00 -3.985521e-18 442: 9.219291e-01 -4.718448e-16 443: 8.331694e-01 1.347924e-16 444: 7.346089e-01 3.250959e-16 445: 6.272483e-01 -2.002673e-16 446: 5.121908e-01 2.775558e-17 447: 3.906312e-01 1.436882e-16 448: 2.638437e-01 3.845925e-16 449: 1.331690e-01 -1.645407e-16 450: -4.292150e-16 1.046741e-15 451: -1.342324e-01 2.329333e-16 452: -2.680744e-01 -4.163336e-16 453: -4.000650e-01 3.885781e-16 454: -5.287511e-01 8.990671e-16 455: -6.527036e-01 -1.174630e-15 456: -7.705329e-01 -2.178741e-15 457: -8.809036e-01 -1.736645e-15 458: -9.825500e-01 -1.597867e-15 459: -1.074290e+00 -2.345275e-15 460: -1.155037e+00 -1.264800e-15 461: -1.223817e+00 -2.119244e-15 462: -1.279773e+00 -8.127397e-17 463: -1.322180e+00 2.702899e-16 464: -1.350455e+00 -4.752021e-16 465: -1.364160e+00 1.943900e-16 466: -1.363010e+00 -1.602877e-15 467: -1.346880e+00 -7.866206e-16 468: -1.315804e+00 -3.295594e-16 469: -1.269978e+00 -1.175205e-17 470: -1.209758e+00 3.804314e-16 471: -1.135660e+00 -2.887396e-17 472: -1.048355e+00 2.672787e-16 473: -9.486618e-01 -8.286463e-16 474: -8.375420e-01 -1.057034e-15 475: -7.160894e-01 3.814174e-16 476: -5.855204e-01 -1.611531e-16 477: -4.471621e-01 3.224066e-16 478: -3.024391e-01 3.991542e-17 479: -1.528597e-01 2.735007e-16 480: 1.536727e-15 -6.379847e-16 481: 1.545116e-01 -1.006782e-15 482: 3.090116e-01 9.116388e-16 483: 4.618187e-01 8.582290e-17 484: 6.112512e-01 3.405728e-16 485: 7.556456e-01 -2.322610e-16 486: 8.933738e-01 6.845365e-16 487: 1.022861e+00 -5.709610e-16 488: 1.142604e+00 -1.020192e-15 489: 1.251187e+00 6.979304e-16 490: 1.347296e+00 1.368698e-16 491: 1.429739e+00 -1.658801e-16 492: 1.497454e+00 -9.332713e-16 493: 1.549526e+00 -2.787505e-17 494: 1.585197e+00 1.973118e-16 495: 1.603875e+00 -1.222888e-15 496: 1.605146e+00 1.603633e-16 497: 1.588775e+00 1.020505e-15 498: 1.554714e+00 1.622534e-15 499: 1.503106e+00 1.207740e-15 500: 1.434281e+00 1.645186e-15 501: 1.348762e+00 1.762744e-16 502: 1.247255e+00 -6.775376e-16 503: 1.130647e+00 1.948933e-15 504: 1.000000e+00 4.063698e-17 505: 8.565403e-01 -4.848547e-17 506: 7.016480e-01 1.157385e-16 507: 5.368447e-01 2.010314e-16 508: 3.637795e-01 1.011987e-16 509: 1.842128e-01 -8.508047e-16 510: 2.184058e-16 3.826635e-16 511: -1.869274e-01 2.304807e-16 512: -3.745807e-01 -2.075306e-16 513: -5.609343e-01 -1.456903e-16 514: -7.439464e-01 1.799531e-16 515: -9.215804e-01 -1.132903e-15 516: -1.091826e+00 -6.899572e-16 517: -1.252721e+00 -2.395148e-16 518: -1.402374e+00 -3.250319e-16 519: -1.538980e+00 -3.358995e-16 520: -1.660850e+00 -4.964489e-16 521: -1.766419e+00 -1.758968e-16 522: -1.854275e+00 -1.351082e-15 523: -1.923170e+00 -9.343248e-16 524: -1.972036e+00 -5.144897e-16 525: -2.000000e+00 -4.286464e-16 526: -2.006398e+00 -7.922144e-16 527: -1.990783e+00 -7.768530e-16 528: -1.952933e+00 -3.131484e-16 529: -1.892859e+00 -1.447663e-15 530: -1.810806e+00 -4.802492e-16 531: -1.707260e+00 -1.483496e-15 532: -1.582939e+00 -1.191984e-19 533: -1.438796e+00 3.171992e-16 534: -1.276012e+00 -3.856364e-16 535: -1.095985e+00 -3.712144e-17 536: -9.003229e-01 -2.656530e-16 537: -6.908292e-01 -7.485384e-16 538: -4.694881e-01 -4.056065e-16 539: -2.384474e-01 -1.571999e-15 540: -6.928228e-16 -1.164851e-15 541: 2.434373e-01 -8.946324e-16 542: 4.893460e-01 -1.744945e-15 543: 7.351295e-01 -5.325539e-16 544: 9.781383e-01 -4.218196e-16 545: 1.215696e+00 -7.111846e-16 546: 1.445125e+00 7.211110e-17 547: 1.663775e+00 3.933440e-16 548: 1.869051e+00 2.387427e-16 549: 2.058436e+00 6.623531e-16 550: 2.229526e+00 8.848688e-16 551: 2.380048e+00 4.578105e-16 552: 2.507892e+00 1.042237e-15 553: 2.611133e+00 7.787877e-16 554: 2.688054e+00 4.486707e-16 555: 2.737169e+00 -9.844252e-17 556: 2.757241e+00 1.085114e-15 557: 2.747304e+00 1.652065e-15 558: 2.706672e+00 9.309014e-16 559: 2.634960e+00 9.372066e-16 560: 2.532089e+00 6.770864e-16 561: 2.398296e+00 8.859616e-16 562: 2.234139e+00 5.531319e-16 563: 2.040501e+00 6.482444e-16 564: 1.818588e+00 1.021270e-15 565: 1.569925e+00 6.170418e-16 566: 1.296348e+00 5.991342e-16 567: 1.000000e+00 1.122235e-16 568: 6.833118e-01 -5.237245e-17 569: 3.489905e-01 4.572817e-17 570: 1.255224e-15 -1.911841e-16 571: -3.604599e-01 -3.304446e-16 572: -7.289764e-01 -7.996621e-16 573: -1.101950e+00 -9.777470e-16 574: -1.475622e+00 -8.195858e-16 575: -1.846105e+00 -4.284516e-16 576: -2.209413e+00 -7.913004e-16 577: -2.561495e+00 -1.395104e-15 578: -2.898269e+00 -1.796295e-15 579: -3.215658e+00 -2.334403e-15 580: -3.509623e+00 -2.374566e-15 581: -3.776200e+00 -1.585969e-15 582: -4.011536e+00 -1.065776e-15 583: -4.211924e+00 -2.000312e-15 584: -4.373836e+00 -1.287856e-15 585: -4.493959e+00 -2.713545e-15 586: -4.569225e+00 -3.874739e-15 587: -4.596844e+00 -3.715867e-15 588: -4.574329e+00 -7.119481e-16 589: -4.499527e+00 -1.326284e-16 590: -4.370640e+00 -1.291290e-15 591: -4.186247e+00 -3.418408e-16 592: -3.945325e+00 -1.458613e-15 593: -3.647260e+00 -2.362103e-15 594: -3.291865e+00 -2.227293e-15 595: -2.879385e+00 -3.167754e-16 596: -2.410503e+00 7.084363e-16 597: -1.886344e+00 -1.524897e-16 598: -1.308472e+00 8.867659e-16 599: -6.788825e-01 5.700398e-16 600: 3.116723e-15 -1.372575e-16 601: 7.253407e-01 3.466772e-16 602: 1.493907e+00 4.758283e-16 603: 2.302090e+00 4.907391e-16 604: 3.145923e+00 5.801571e-16 605: 4.021112e+00 2.254369e-15 606: 4.923063e+00 3.752702e-15 607: 5.846909e+00 2.515624e-15 608: 6.787549e+00 4.130446e-15 609: 7.739681e+00 2.506948e-15 610: 8.697842e+00 1.892420e-15 611: 9.656443e+00 2.605490e-15 612: 1.060982e+01 4.148441e-15 613: 1.155225e+01 7.694226e-15 614: 1.247803e+01 6.592110e-15 615: 1.338149e+01 8.791495e-15 616: 1.425706e+01 4.850939e-15 617: 1.509927e+01 4.881888e-15 618: 1.590285e+01 5.837016e-15 619: 1.666272e+01 7.008012e-15 620: 1.737406e+01 1.234228e-14 621: 1.803232e+01 9.923262e-15 622: 1.863328e+01 1.259665e-14 623: 1.917307e+01 8.898454e-15 624: 1.964821e+01 7.817899e-15 625: 2.005560e+01 9.264560e-15 626: 2.039261e+01 1.119992e-14 627: 2.065704e+01 1.719154e-14 628: 2.084715e+01 1.479702e-14 629: 2.096173e+01 1.715733e-14 gsl/doc/examples/cdf.c0000644000175000017500000000061513536674414013217 0ustar eddedd#include #include int main (void) { double P, Q; double x = 2.0; P = gsl_cdf_ugaussian_P (x); printf ("prob(x < %f) = %f\n", x, P); Q = gsl_cdf_ugaussian_Q (x); printf ("prob(x > %f) = %f\n", x, Q); x = gsl_cdf_ugaussian_Pinv (P); printf ("Pinv(%f) = %f\n", P, x); x = gsl_cdf_ugaussian_Qinv (Q); printf ("Qinv(%f) = %f\n", Q, x); return 0; } gsl/doc/examples/ieee.c0000644000175000017500000000057313536674414013375 0ustar eddedd#include #include int main (void) { float f = 1.0/3.0; double d = 1.0/3.0; double fd = f; /* promote from float to double */ printf (" f="); gsl_ieee_printf_float(&f); printf ("\n"); printf ("fd="); gsl_ieee_printf_double(&fd); printf ("\n"); printf (" d="); gsl_ieee_printf_double(&d); printf ("\n"); return 0; } gsl/doc/examples/permshuffle.c0000644000175000017500000000155113536674414015003 0ustar eddedd#include #include #include #include int main (void) { const size_t N = 10; const gsl_rng_type * T; gsl_rng * r; gsl_permutation * p = gsl_permutation_alloc (N); gsl_permutation * q = gsl_permutation_alloc (N); gsl_rng_env_setup(); T = gsl_rng_default; r = gsl_rng_alloc (T); printf ("initial permutation:"); gsl_permutation_init (p); gsl_permutation_fprintf (stdout, p, " %u"); printf ("\n"); printf (" random permutation:"); gsl_ran_shuffle (r, p->data, N, sizeof(size_t)); gsl_permutation_fprintf (stdout, p, " %u"); printf ("\n"); printf ("inverse permutation:"); gsl_permutation_inverse (q, p); gsl_permutation_fprintf (stdout, q, " %u"); printf ("\n"); gsl_permutation_free (p); gsl_permutation_free (q); gsl_rng_free (r); return 0; } gsl/doc/examples/rootnewt.txt0000644000175000017500000000034213536674414014736 0ustar eddeddusing newton method iter root err err(est) 1 3.0000000 +0.7639320 -2.0000000 2 2.3333333 +0.0972654 -0.6666667 3 2.2380952 +0.0020273 -0.0952381 Converged: 4 2.2360689 +0.0000009 -0.0020263 gsl/doc/examples/vectorr.txt0000644000175000017500000000006313536674414014541 0ustar eddedd1.23 2.23 3.23 4.23 5.23 6.23 7.23 8.23 9.23 10.23 gsl/doc/examples/blas.c0000644000175000017500000000127013536674414013402 0ustar eddedd#include #include int main (void) { double a[] = { 0.11, 0.12, 0.13, 0.21, 0.22, 0.23 }; double b[] = { 1011, 1012, 1021, 1022, 1031, 1032 }; double c[] = { 0.00, 0.00, 0.00, 0.00 }; gsl_matrix_view A = gsl_matrix_view_array(a, 2, 3); gsl_matrix_view B = gsl_matrix_view_array(b, 3, 2); gsl_matrix_view C = gsl_matrix_view_array(c, 2, 2); /* Compute C = A B */ gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0, &A.matrix, &B.matrix, 0.0, &C.matrix); printf ("[ %g, %g\n", c[0], c[1]); printf (" %g, %g ]\n", c[2], c[3]); return 0; } gsl/doc/examples/randpoisson.c0000644000175000017500000000112313536674414015015 0ustar eddedd#include #include #include int main (void) { const gsl_rng_type * T; gsl_rng * r; int i, n = 10; double mu = 3.0; /* create a generator chosen by the environment variable GSL_RNG_TYPE */ gsl_rng_env_setup(); T = gsl_rng_default; r = gsl_rng_alloc (T); /* print n random variates chosen from the poisson distribution with mean parameter mu */ for (i = 0; i < n; i++) { unsigned int k = gsl_ran_poisson (r, mu); printf (" %u", k); } printf ("\n"); gsl_rng_free (r); return 0; } gsl/doc/examples/block.txt0000644000175000017500000000006513536674414014151 0ustar eddeddlength of block = 100 block data address = 0x804b0d8 gsl/doc/examples/multiset.c0000644000175000017500000000071213536674414014327 0ustar eddedd#include #include int main (void) { gsl_multiset * c; size_t i; printf ("All multisets of {0,1,2,3} by size:\n") ; for (i = 0; i <= 4; i++) { c = gsl_multiset_calloc (4, i); do { printf ("{"); gsl_multiset_fprintf (stdout, c, " %u"); printf (" }\n"); } while (gsl_multiset_next (c) == GSL_SUCCESS); gsl_multiset_free (c); } return 0; } gsl/doc/examples/demo_fn.c0000644000175000017500000000123613536674414014072 0ustar eddedddouble quadratic (double x, void *params) { struct quadratic_params *p = (struct quadratic_params *) params; double a = p->a; double b = p->b; double c = p->c; return (a * x + b) * x + c; } double quadratic_deriv (double x, void *params) { struct quadratic_params *p = (struct quadratic_params *) params; double a = p->a; double b = p->b; return 2.0 * a * x + b; } void quadratic_fdf (double x, void *params, double *y, double *dy) { struct quadratic_params *p = (struct quadratic_params *) params; double a = p->a; double b = p->b; double c = p->c; *y = (a * x + b) * x + c; *dy = 2.0 * a * x + b; } gsl/doc/examples/demo_fn.h0000644000175000017500000000035313536674414014076 0ustar eddeddstruct quadratic_params { double a, b, c; }; double quadratic (double x, void *params); double quadratic_deriv (double x, void *params); void quadratic_fdf (double x, void *params, double *y, double *dy); gsl/doc/examples/statsort.txt0000644000175000017500000000024613536674414014743 0ustar eddeddOriginal dataset: 17.2, 18.1, 16.5, 18.3, 12.6 Sorted dataset: 12.6, 16.5, 17.2, 18.1, 18.3 The median is 17.2 The upper quartile is 18.1 The lower quartile is 16.5 gsl/doc/examples/const.c0000644000175000017500000000110113536674414013600 0ustar eddedd#include #include int main (void) { double c = GSL_CONST_MKSA_SPEED_OF_LIGHT; double au = GSL_CONST_MKSA_ASTRONOMICAL_UNIT; double minutes = GSL_CONST_MKSA_MINUTE; /* distance stored in meters */ double r_earth = 1.00 * au; double r_mars = 1.52 * au; double t_min, t_max; t_min = (r_mars - r_earth) / c; t_max = (r_mars + r_earth) / c; printf ("light travel time from Earth to Mars:\n"); printf ("minimum = %.1f minutes\n", t_min / minutes); printf ("maximum = %.1f minutes\n", t_max / minutes); return 0; } gsl/doc/examples/histogram.c0000644000175000017500000000134113536674414014455 0ustar eddedd#include #include #include int main (int argc, char **argv) { double a, b; size_t n; if (argc != 4) { printf ("Usage: gsl-histogram xmin xmax n\n" "Computes a histogram of the data " "on stdin using n bins from xmin " "to xmax\n"); exit (0); } a = atof (argv[1]); b = atof (argv[2]); n = atoi (argv[3]); { double x; gsl_histogram * h = gsl_histogram_alloc (n); gsl_histogram_set_ranges_uniform (h, a, b); while (fscanf (stdin, "%lg", &x) == 1) { gsl_histogram_increment (h, x); } gsl_histogram_fprintf (stdout, h, "%g", "%g"); gsl_histogram_free (h); } exit (0); } gsl/doc/examples/rng.c0000644000175000017500000000060713536674414013252 0ustar eddedd#include #include gsl_rng * r; /* global generator */ int main (void) { const gsl_rng_type * T; gsl_rng_env_setup(); T = gsl_rng_default; r = gsl_rng_alloc (T); printf ("generator type: %s\n", gsl_rng_name (r)); printf ("seed = %lu\n", gsl_rng_default_seed); printf ("first value = %lu\n", gsl_rng_get (r)); gsl_rng_free (r); return 0; } gsl/doc/examples/nlfit2.c0000644000175000017500000001016013536674414013655 0ustar eddedd#include #include #include #include #include #include int func_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); gsl_vector_set(f, 0, 100.0 * (x2 - x1*x1)); gsl_vector_set(f, 1, 1.0 - x1); return GSL_SUCCESS; } int func_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); gsl_matrix_set(J, 0, 0, -200.0*x1); gsl_matrix_set(J, 0, 1, 100.0); gsl_matrix_set(J, 1, 0, -1.0); gsl_matrix_set(J, 1, 1, 0.0); return GSL_SUCCESS; } int func_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double v1 = gsl_vector_get(v, 0); gsl_vector_set(fvv, 0, -200.0 * v1 * v1); gsl_vector_set(fvv, 1, 0.0); return GSL_SUCCESS; } void callback(const size_t iter, void *params, const gsl_multifit_nlinear_workspace *w) { gsl_vector * x = gsl_multifit_nlinear_position(w); /* print out current location */ printf("%f %f\n", gsl_vector_get(x, 0), gsl_vector_get(x, 1)); } void solve_system(gsl_vector *x0, gsl_multifit_nlinear_fdf *fdf, gsl_multifit_nlinear_parameters *params) { const gsl_multifit_nlinear_type *T = gsl_multifit_nlinear_trust; const size_t max_iter = 200; const double xtol = 1.0e-8; const double gtol = 1.0e-8; const double ftol = 1.0e-8; const size_t n = fdf->n; const size_t p = fdf->p; gsl_multifit_nlinear_workspace *work = gsl_multifit_nlinear_alloc(T, params, n, p); gsl_vector * f = gsl_multifit_nlinear_residual(work); gsl_vector * x = gsl_multifit_nlinear_position(work); int info; double chisq0, chisq, rcond; /* initialize solver */ gsl_multifit_nlinear_init(x0, fdf, work); /* store initial cost */ gsl_blas_ddot(f, f, &chisq0); /* iterate until convergence */ gsl_multifit_nlinear_driver(max_iter, xtol, gtol, ftol, callback, NULL, &info, work); /* store final cost */ gsl_blas_ddot(f, f, &chisq); /* store cond(J(x)) */ gsl_multifit_nlinear_rcond(&rcond, work); /* print summary */ fprintf(stderr, "NITER = %zu\n", gsl_multifit_nlinear_niter(work)); fprintf(stderr, "NFEV = %zu\n", fdf->nevalf); fprintf(stderr, "NJEV = %zu\n", fdf->nevaldf); fprintf(stderr, "NAEV = %zu\n", fdf->nevalfvv); fprintf(stderr, "initial cost = %.12e\n", chisq0); fprintf(stderr, "final cost = %.12e\n", chisq); fprintf(stderr, "final x = (%.12e, %.12e)\n", gsl_vector_get(x, 0), gsl_vector_get(x, 1)); fprintf(stderr, "final cond(J) = %.12e\n", 1.0 / rcond); printf("\n\n"); gsl_multifit_nlinear_free(work); } int main (void) { const size_t n = 2; const size_t p = 2; gsl_vector *f = gsl_vector_alloc(n); gsl_vector *x = gsl_vector_alloc(p); gsl_multifit_nlinear_fdf fdf; gsl_multifit_nlinear_parameters fdf_params = gsl_multifit_nlinear_default_parameters(); /* print map of Phi(x1, x2) */ { double x1, x2, chisq; double *f1 = gsl_vector_ptr(f, 0); double *f2 = gsl_vector_ptr(f, 1); for (x1 = -1.2; x1 < 1.3; x1 += 0.1) { for (x2 = -0.5; x2 < 2.1; x2 += 0.1) { gsl_vector_set(x, 0, x1); gsl_vector_set(x, 1, x2); func_f(x, NULL, f); chisq = (*f1) * (*f1) + (*f2) * (*f2); printf("%f %f %f\n", x1, x2, chisq); } printf("\n"); } printf("\n\n"); } /* define function to be minimized */ fdf.f = func_f; fdf.df = func_df; fdf.fvv = func_fvv; fdf.n = n; fdf.p = p; fdf.params = NULL; /* starting point */ gsl_vector_set(x, 0, -0.5); gsl_vector_set(x, 1, 1.75); fprintf(stderr, "=== Solving system without acceleration ===\n"); fdf_params.trs = gsl_multifit_nlinear_trs_lm; solve_system(x, &fdf, &fdf_params); fprintf(stderr, "=== Solving system with acceleration ===\n"); fdf_params.trs = gsl_multifit_nlinear_trs_lmaccel; solve_system(x, &fdf, &fdf_params); gsl_vector_free(f); gsl_vector_free(x); return 0; } gsl/doc/examples/movstat3.txt0000644000175000017500000004527413536674414014652 0ustar eddedd0.133919 0.276114 0.728047 0.094351 2.402456 -0.079084 1.115486 -0.254480 -0.162016 -0.440587 -1.501952 -0.659391 -1.541044 -0.724272 -1.426997 -0.926058 -1.444645 -1.274116 -2.017030 -1.539856 -1.835321 -1.865572 -0.450003 -2.101777 -1.088034 -2.365805 -2.553682 -2.660233 -3.381444 -2.763080 -3.627798 -2.818354 -3.917291 -2.762394 -4.141471 -2.818432 -4.076856 -2.963609 -2.370265 -2.908849 -2.514497 -2.681098 -1.331678 -2.386039 -1.592375 -2.147711 -2.638269 -1.760234 -2.060850 -1.611102 -0.972274 -1.573009 -0.257272 -1.586761 -1.772335 -1.778994 -0.589564 -1.943796 -1.296081 -2.034095 -2.027427 -2.143194 -3.061772 -2.403673 -3.964778 -2.778696 -3.075592 -3.148963 -3.450958 -3.576487 -3.042740 -3.921212 -3.316585 -4.038872 -5.644687 -4.180794 -5.104731 -4.241522 -5.143800 -4.461146 -5.129949 -4.693582 -4.101686 -4.894492 -4.339064 -5.014553 -4.511335 -4.898206 -5.052207 -4.946890 -5.542885 -4.849052 -5.124773 -4.734800 -5.182236 -4.817522 -4.495760 -4.955404 -5.580003 -5.029333 -4.263255 -5.043533 -4.042668 -4.876842 -4.846184 -4.682876 -16.672890 -4.452275 -5.176692 -4.353543 -5.180009 -4.083774 -3.379074 -4.110754 -3.106832 -4.230454 -2.439358 -4.368534 -3.607167 -4.368534 -3.152086 -4.521254 -4.506071 -4.763144 -5.119970 -5.284490 -6.088904 -5.707670 -6.551172 -6.067230 -7.357022 -6.363759 -9.026579 -6.532698 -8.071187 -6.569975 -6.915448 -6.569975 -6.388126 -6.458495 -6.275928 -6.244167 -6.026521 -5.939830 -5.455463 -5.317285 -5.085584 -4.699535 -4.622226 -4.140505 -4.617985 -3.636438 -2.468281 -3.200792 -0.074973 -2.945073 -1.355697 -2.650531 -1.356859 -2.387378 -1.739327 -2.229742 -2.105708 -2.188474 -3.153990 -2.079946 -2.434705 -2.135417 -2.253847 -2.188067 -3.199265 -2.188067 -2.827853 -2.152933 -1.491530 -2.011698 -1.854937 -1.872420 -1.830705 -1.666873 -1.423125 -1.561829 -0.498595 -1.329370 -0.834586 -1.234596 -1.900494 -1.163814 -0.584780 -1.124394 -1.308451 -1.033325 -0.735721 -1.086366 -1.047530 -1.179030 -0.854495 -1.151274 -1.500155 -1.003416 -1.011085 -0.992844 -1.923564 -0.839102 -1.418754 -0.760946 0.075220 -0.858283 -0.569776 -0.822780 -0.489626 -0.730427 1.024053 -0.519072 -0.032311 -0.281189 -2.448040 -0.183587 -0.534972 -0.250557 -0.668978 -0.184302 0.891108 -0.019278 0.217385 -0.019278 -0.540338 0.136607 -0.527505 0.398954 0.026518 0.667121 0.995594 0.881047 1.370647 0.886958 1.692149 1.094108 2.104650 1.386569 1.878530 1.709333 1.384998 1.892281 0.944305 2.079669 2.081734 2.039445 3.029960 2.043475 2.931387 2.045954 2.590838 1.942151 2.682091 1.795818 1.008630 1.902657 1.728415 1.796009 2.126962 1.593796 0.067998 1.557750 -0.153388 1.567889 1.905858 1.579792 1.121899 1.742647 1.111473 1.923433 2.357674 2.007114 3.566190 2.298741 2.789218 2.298741 2.474325 2.181783 3.355488 2.143542 2.880096 1.893674 2.692635 1.341903 0.777733 0.467928 0.853238 -0.531346 -1.137343 -1.509975 -2.608262 -2.615379 -4.510291 -3.622099 -6.204247 -4.457685 -6.333333 -5.169875 -7.068545 -5.560910 -7.668243 -5.702448 -6.367839 -5.702448 -6.667043 -5.574312 -5.631973 -5.228527 -4.656653 -4.787531 -3.882104 -4.170070 -3.357076 -3.737308 -2.364371 -3.368439 -3.092173 -3.293700 -1.421071 -3.293700 -1.511396 -3.311642 -2.772185 -3.292273 -3.048023 -3.343195 -4.959319 -3.468265 -5.147475 -3.696632 -4.818134 -4.067665 -3.707785 -4.282892 -3.815373 -4.658277 -3.489995 -4.986622 -14.137555 -5.168666 -4.850700 -5.467116 -4.709223 -5.764967 -6.426491 -6.255301 -6.445101 -6.697600 -6.597715 -6.743059 -7.833527 -6.405990 -7.498788 -6.390270 -8.120790 -6.419580 -7.796062 -6.227665 -5.118359 -5.935204 -5.087165 -5.566212 -4.699255 -4.989928 -4.973012 -4.198352 -3.276785 -3.332919 -3.812951 -2.800117 -2.646972 -2.164659 -0.374605 -1.531116 0.728869 -0.956661 -0.007167 -0.443480 -0.323144 -0.038358 0.631962 0.294326 0.805680 0.446891 0.470841 0.580569 1.851719 0.463679 0.369312 0.367770 0.347183 0.245605 0.998487 0.004824 0.879957 -0.345305 -0.870347 -0.724208 -1.535071 -1.126683 -1.422628 -1.397563 -2.345476 -1.535638 -3.268049 -1.549930 -2.939290 -1.549930 -2.623782 -1.367927 -2.068610 -1.229655 -0.895495 -1.009122 0.751328 -0.892555 1.370399 -0.814393 0.767679 -0.625650 -0.290622 -0.494743 0.562173 -0.409490 -1.296378 -0.379490 -2.235833 -0.436661 -0.925094 -0.436661 -1.057666 -0.368594 -1.301337 -0.249569 -0.625496 -0.256137 0.236789 -0.043494 1.380286 -0.005302 2.200370 0.119508 0.780601 0.473288 0.503061 0.824175 0.617412 1.149937 -0.957608 1.097715 0.198188 0.978840 2.126361 0.668191 2.306367 0.568356 2.418842 0.559828 -0.233213 0.662040 0.310416 0.903472 -0.595473 1.150177 -0.117919 1.154459 0.426310 1.166957 1.537325 1.251130 1.577413 1.673063 2.418531 2.035137 2.164905 2.495042 3.176398 2.996303 3.564192 3.307124 3.569078 3.441012 4.021223 3.729076 4.937664 3.737704 5.063676 3.737704 4.334714 3.662610 2.782406 3.520994 4.757479 3.376185 2.496185 3.172954 2.289650 2.929144 2.500548 2.662689 2.192145 2.410526 2.265799 2.223440 2.065253 2.031805 2.743371 1.988461 2.359380 2.038874 1.098633 2.147821 1.018649 2.373600 0.890033 2.344726 2.106088 2.486624 3.481068 2.451364 4.455412 2.492713 4.224157 2.514389 2.005936 2.528190 3.342334 2.702030 2.426032 2.607253 2.731514 2.347452 1.293718 2.002939 1.142861 1.860413 2.707418 1.772126 1.253101 1.605617 1.123533 1.452373 1.046841 1.282323 2.059603 1.296704 1.211356 1.355768 1.232930 1.342415 0.334857 1.432026 1.176966 1.649897 1.423148 1.883110 1.674430 1.750355 1.939429 1.652967 3.084372 1.764195 3.824729 1.880205 3.145757 1.751891 0.864810 1.504703 0.022136 1.087030 2.233989 0.617025 1.378946 0.014404 -0.801544 -0.645980 -2.084624 -1.219898 -2.931275 -1.648804 -2.290618 -2.160401 -2.339220 -2.748269 -2.797697 -2.967014 -2.995338 -3.074094 -4.718787 -3.237433 -4.582241 -3.255361 -3.911864 -3.449319 -2.770250 -3.665823 -3.048347 -4.016577 -3.760666 -4.215820 -3.092624 -4.180587 -4.084845 -4.184625 -5.954484 -4.216224 -6.125231 -4.558100 -4.788526 -4.876615 -4.401684 -5.102787 -4.618585 -5.276667 -4.196258 -5.484099 -6.490801 -5.366824 -5.959260 -5.231394 -5.796213 -5.262655 -5.649763 -5.297966 -6.063147 -5.337600 -4.899009 -5.337600 -4.906356 -5.015635 -5.069874 -4.773469 -4.719483 -4.611112 -4.975295 -4.356689 -3.165467 -4.243553 -2.122030 -4.088041 -3.779758 -3.778672 -4.335005 -3.422414 -3.359953 -2.962839 -4.051653 -2.503991 -3.499400 -2.110569 -1.768976 -1.856123 -0.583313 -1.296298 -0.205369 -0.551465 1.258660 0.153358 0.375332 0.951803 0.167986 1.498429 2.651846 1.854770 2.983459 2.307823 3.686605 2.847855 3.872109 3.270235 3.150657 3.753820 2.623749 3.926418 5.060077 3.959535 5.028278 4.042577 5.385131 4.010247 4.727598 4.026122 4.177130 4.157845 2.949897 4.428426 3.730838 4.331465 3.395642 4.232930 4.014982 4.102061 4.336160 4.063339 14.445049 3.963551 4.187429 3.963551 4.141458 3.846512 4.207309 3.896382 4.379100 3.981778 3.279038 4.093871 2.500615 4.043623 2.677489 4.136268 3.844475 4.041694 4.783544 3.937749 5.345002 3.958893 4.892768 4.188156 5.021231 4.188156 3.290288 4.183904 3.271809 4.080649 4.569393 3.959153 5.342405 3.635378 2.428432 3.380067 2.639222 3.169031 2.915180 3.189182 3.690080 3.148649 2.243538 2.918077 2.594966 2.883370 3.121907 2.905447 3.471647 2.917209 2.907017 2.842582 2.494242 2.816174 3.377719 2.952630 2.627120 3.106247 2.745080 3.370139 1.852410 3.803776 3.233974 4.159524 3.977520 4.630545 5.496934 4.892680 7.446486 5.182818 7.374375 5.574907 6.108751 5.907768 6.733428 6.042828 5.736936 6.042828 5.238363 5.917991 6.273881 5.568648 6.229725 5.457463 5.193058 5.369225 4.230282 5.306466 4.373406 5.276384 3.832263 5.186485 5.732769 5.019144 5.314607 4.886219 5.709051 4.735020 5.466199 4.619246 4.429272 4.379860 4.723655 4.190661 4.536445 3.866406 3.188313 3.757388 2.218931 3.584984 2.129475 3.515467 1.539656 3.532947 2.790758 3.428320 4.333442 3.433891 3.914564 3.489302 4.098004 3.413827 4.586587 3.313635 3.644949 3.330042 4.771233 3.205714 3.687012 2.811615 1.227743 2.346717 0.786559 1.901713 1.687320 1.412067 1.671802 1.197804 -0.569571 1.029859 -0.269522 1.029859 0.092968 1.076871 0.179777 1.235446 1.716580 1.308903 2.175507 1.654404 2.348435 2.221910 1.650850 2.778105 2.213728 3.300214 4.781311 3.693093 5.733539 4.139422 4.838032 4.582910 5.098723 4.935721 4.878764 5.378375 5.186761 5.580279 6.166901 5.837445 6.598444 5.949744 5.523733 6.154560 6.197611 6.130120 7.152529 6.091799 7.297293 5.977655 6.744233 5.680667 6.722108 5.310106 4.533874 5.038540 3.494007 4.649108 4.159463 4.064695 3.263396 3.562179 3.079638 3.044929 2.692724 2.747451 1.892810 2.673207 1.531368 2.683990 2.221595 2.683990 2.066853 2.671774 1.856572 2.850674 3.491266 3.106013 3.591053 3.495401 4.990771 3.895905 3.153458 4.349845 4.689737 4.986161 15.151312 5.695400 5.397308 6.169750 5.461107 6.816431 6.307054 7.336014 7.793692 8.005214 9.536615 8.674770 7.760413 8.570693 9.411183 9.211590 9.667019 9.610048 10.712534 9.884032 11.423310 10.287323 10.486624 10.542182 11.229177 10.542182 9.893180 10.832814 10.226261 10.986157 11.830355 10.970554 12.026865 10.791473 1.368634 10.584169 12.161129 10.330018 11.047111 9.967920 10.572104 9.596900 9.811583 9.254963 8.620890 8.703151 8.941815 8.703151 6.634300 8.163708 6.887081 7.648865 8.752915 7.259827 7.060557 6.899902 6.192129 6.503761 5.702488 6.089465 5.938511 5.886787 6.310247 5.707606 5.055626 5.707606 5.024249 5.820582 4.801423 6.126663 4.810198 6.748219 5.274448 7.465742 8.077345 8.218041 8.946852 9.130143 11.296500 10.061539 12.396212 11.007249 13.662685 11.762515 13.080936 12.082755 13.264548 12.259513 13.406808 12.417945 13.321589 12.499758 12.071844 12.478642 10.959503 12.449476 10.537680 12.373121 11.963564 12.283837 12.032818 12.283837 12.206172 12.338501 13.144310 12.556976 12.393740 12.846651 12.460995 12.895600 13.813560 12.968901 14.703027 13.088905 14.038123 13.345492 13.566579 13.459792 12.404107 13.637417 12.692529 13.868581 13.286200 14.009671 15.083374 13.754236 14.173008 13.553576 14.002737 13.433272 14.541464 13.623240 15.283670 13.911145 12.232182 14.278759 11.550045 14.347277 12.483844 14.612271 14.113823 14.917345 16.594728 15.219404 16.748404 15.492773 15.700035 16.200592 16.557958 16.809489 17.259995 17.361566 17.743988 17.810772 18.602550 18.116371 19.082509 18.343020 17.963922 18.561371 19.742891 18.751905 19.799196 18.849442 19.345119 18.951484 18.788247 19.084445 18.523113 19.199834 18.974808 19.395473 18.621820 19.341310 18.882299 19.203810 20.121015 19.314867 20.613373 19.517659 20.283860 19.778352 19.255429 19.996782 18.561693 20.414756 20.344629 20.765631 31.163423 20.945174 20.907931 21.040145 20.940683 21.000200 22.383586 21.066678 22.040169 21.183857 21.736907 21.341382 21.468111 21.247194 19.924352 21.337880 19.853733 21.260994 20.908350 21.207140 21.762346 21.046100 21.535902 20.836858 21.724105 20.639416 20.248708 20.609855 21.555482 20.662446 20.312980 20.585076 19.691132 20.411603 19.048752 20.324885 19.658303 20.214718 20.327055 20.359313 20.212015 20.359313 20.162847 20.446608 20.755442 20.496955 20.563977 20.648004 21.550063 20.802227 21.680123 20.952568 21.098637 21.043073 20.144252 21.041007 21.017747 20.896710 21.532259 20.877548 21.768581 20.750405 21.026562 20.455798 19.456772 20.225577 19.028660 20.090430 20.391514 19.858231 20.405780 19.603884 19.026646 19.272662 17.798299 19.006554 18.927929 18.890089 18.927955 18.817008 19.243142 18.568386 18.045560 18.407848 18.010806 18.087005 18.408590 17.875317 18.370932 17.398744 18.153916 16.926182 16.139053 16.529478 14.251999 16.173437 15.893116 15.932280 14.638765 15.527111 14.674898 15.314334 14.838256 15.238972 14.841187 15.130969 15.840401 15.130969 14.724406 15.169392 16.238921 15.384195 15.560663 15.451067 15.167031 15.444467 14.572601 15.414625 16.606267 15.174551 16.571990 14.872965 15.276747 14.534815 14.778862 14.376012 13.679742 14.339034 12.010130 14.342701 11.720424 14.170691 13.195570 14.170691 14.131435 14.197012 14.834232 14.289849 14.605601 14.554631 15.023902 15.026966 15.614401 15.405463 15.513630 15.740504 16.261146 15.992090 16.062781 16.326591 16.602039 16.659408 17.146807 17.047677 17.844746 17.505449 16.869870 17.954477 18.019254 18.379803 19.008050 18.626657 20.104029 18.822851 19.734352 19.031663 20.198570 19.095527 20.089083 19.095527 18.823720 19.086822 18.635620 18.729780 19.026116 18.192142 18.419522 17.696225 17.940904 17.237216 15.794674 16.811277 15.265283 16.401231 14.737492 15.974504 15.271107 15.594275 15.957994 15.238340 15.192671 15.038790 15.133302 14.805401 14.795082 14.333479 14.997459 13.737002 14.162042 12.990280 13.694167 12.265989 11.017989 11.583642 9.369199 10.761789 8.550610 9.909570 7.600779 9.072657 8.674054 8.348520 8.992178 8.008302 -2.196372 8.008302 7.125110 8.066022 6.629824 8.255156 7.176939 8.524547 7.956022 8.604244 9.888684 8.709871 10.252815 9.039653 11.040690 9.368819 10.025298 9.731593 9.391332 9.970087 9.942817 10.074760 9.597858 10.202760 10.087603 10.299527 10.441911 10.333963 10.102464 10.568398 10.333389 10.724307 11.123714 10.893701 11.350615 11.029997 12.135215 11.246289 12.342629 11.457480 11.001033 11.692816 11.467365 11.827952 11.314267 12.103361 12.049090 12.368902 12.451419 12.706672 13.602397 13.076037 12.217254 13.619828 13.740483 14.184318 15.175142 14.714318 15.666915 15.116218 16.547774 15.494898 16.208386 15.816562 16.819094 16.034990 17.061886 16.034990 15.834354 15.995894 15.859541 15.919986 16.497367 15.680116 15.706337 15.441801 14.063547 15.201073 14.823281 15.109746 14.983736 15.000151 14.388952 14.994534 13.382577 14.960406 14.652541 14.971811 15.675425 15.070675 14.847997 14.982601 15.808988 14.804694 15.501833 14.523164 16.359209 14.342161 14.953317 13.991077 14.030617 13.414669 11.855184 12.909932 11.753548 12.296993 11.492782 11.668963 10.305366 11.088800 10.487754 10.553397 10.292535 10.553397 9.849561 10.139567 9.731853 9.705256 9.211991 9.416505 8.130711 9.326598 19.751746 9.174716 7.844749 9.068547 7.764224 9.048912 8.894025 8.936065 9.496203 9.025337 9.120819 9.146274 9.337011 9.045249 9.672848 9.141471 8.716229 9.197384 10.015441 9.238283 9.219141 9.295977 9.106215 9.326113 8.710750 9.363158 9.213964 9.321544 9.262122 9.459126 10.019188 9.459543 9.392049 9.403055 9.670414 9.412763 9.298319 9.517506 9.954473 9.456542 10.483519 9.505303 8.443160 9.531046 9.193584 9.516307 9.653446 9.442335 8.665282 9.347318 9.700969 9.131405 10.250881 8.738901 9.259392 8.454298 9.004671 8.074770 8.011262 7.633586 6.718342 7.491302 5.212562 7.245482 5.881734 7.091647 5.777835 7.088755 5.682790 6.924685 7.384727 6.774260 7.488584 6.606951 7.874875 6.579047 8.978647 6.425623 7.502016 6.248903 6.657437 6.089150 4.961421 5.733288 4.500925 5.371078 4.187354 4.970054 3.705592 4.548229 4.245012 4.068918 4.181964 3.756847 4.228702 3.697853 4.265653 3.697853 2.343638 3.762828 1.025213 3.939685 2.152784 4.013210 3.969977 3.909514 4.772131 3.877396 5.613650 3.933521 5.297305 4.191817 4.906737 4.514138 3.248699 4.701163 3.939639 4.773031 4.770780 4.733412 4.668303 4.673639 5.053668 4.473087 4.931925 4.297284 4.616795 4.314971 4.415554 4.303389 4.759347 4.334821 3.231042 4.422419 3.324516 4.511779 3.407882 4.481232 3.835396 4.693767 5.456687 4.919085 5.857908 5.191399 6.529610 5.460178 4.656999 5.632159 7.324861 5.708009 6.443420 5.890055 7.210172 6.074507 5.743525 6.202426 4.955717 6.290787 4.518043 6.620585 6.156455 6.688287 7.116756 6.942237 7.009178 7.083388 7.625185 7.502479 7.934176 8.052414 9.515337 8.473689 8.728965 8.602206 8.480539 8.754147 9.947932 8.754147 9.905135 8.853707 11.264929 8.785042 8.165825 8.516065 8.484223 8.372016 7.094545 8.348980 8.521226 8.030012 7.316196 7.740725 7.077217 7.575316 7.432522 7.453257 8.273217 7.277689 7.032545 7.217552 7.301554 7.025442 6.544227 6.813840 7.067290 6.605650 6.904117 6.311738 6.553311 5.843008 5.203508 5.392034 5.411779 4.847942 4.787313 4.220538 2.973780 3.469160 3.082981 2.834456 2.170460 2.286119 0.897589 1.826542 0.141722 1.384034 -0.608689 1.073545 0.840973 0.675493 0.476747 0.343727 1.067315 0.343727 0.804743 0.373082 0.288579 0.675273 -2.018337 1.018915 -0.815431 1.185582 9.773635 1.515636 1.161779 1.767255 2.861438 2.119135 2.484089 2.565124 2.340976 3.234356 3.447235 3.667960 3.331886 3.550261 3.971662 3.684321 4.302480 3.806538 5.207661 4.035863 5.064210 4.244282 4.148375 4.537615 3.547513 4.849420 3.961390 5.142232 4.548013 5.490327 6.606968 5.850974 6.087229 6.235436 6.353763 6.719278 7.435331 7.142955 8.453489 7.375373 8.653796 7.419154 8.524364 7.483388 8.502952 7.607795 7.774491 7.738685 6.639772 7.756273 6.481253 7.537135 7.185079 7.429656 7.473421 7.319686 7.659268 7.319686 7.593618 7.549529 5.979517 7.994797 7.557045 8.403891 7.513230 8.778790 9.843072 9.191797 10.647189 9.399890 11.426131 9.607721 10.163100 10.022686 10.559162 10.364704 11.190489 10.582708 9.532104 10.642140 9.464096 10.678567 11.247919 10.738748 10.635203 10.851903 11.967758 10.940330 10.377964 10.902093 10.975028 11.171490 11.968463 11.348212 11.181500 11.410981 11.355002 11.541459 10.846360 11.504429 11.956673 11.625116 12.675808 11.814092 11.812839 11.871511 11.809508 12.039170 11.634489 12.187723 11.932542 12.338334 12.690427 12.478111 12.485238 12.362409 12.691980 12.393551 12.989995 12.656350 14.174699 13.013985 13.214663 13.348775 11.225347 13.634907 12.093121 14.049552 14.945654 14.542276 14.853200 14.962969 15.265613 15.297104 16.217039 15.787072 17.624368 16.592109 17.126499 17.054724 16.776231 17.311909 17.181919 17.764898 19.338456 18.164381 19.342522 18.544146 19.016734 18.892047 17.260317 19.553161 19.812379 20.458343 20.194122 21.375109 20.755476 22.085863 23.076520 22.747427 25.328559 23.314089 25.511210 23.764285 25.921188 24.207849 25.735241 24.684226 25.296601 25.000300 24.116689 25.251350 23.864148 25.430543 24.186195 25.740438 25.042868 26.022156 26.123599 26.342755 26.941294 26.714350 28.456649 27.373732 28.300271 28.060209 28.620633 28.651549 28.640949 29.174406 30.051132 29.628013 30.364935 29.940152 30.364483 30.132942 30.829304 30.230992 31.664285 30.325733 31.023764 30.360552 31.109518 30.298606 30.191761 30.248642 29.503083 30.114266 29.493620 29.970124 29.806984 29.739660 29.035340 29.526075 29.915261 29.457487 29.155097 29.457487 29.532027 29.545179 28.922687 29.722798 29.101506 29.870680 29.574463 30.124860 30.292314 30.283653 31.137927 30.530622 31.092188 30.755885 31.322958 30.956505 31.344397 31.073295 31.377819 31.166269 32.007384 31.166269 31.559389 31.241139 30.907089 31.261088 30.625572 31.247899 31.129078 31.104230 30.051382 30.889657 31.811757 30.619755 31.271730 30.428024 31.204254 30.318880 29.446664 30.226373 29.382633 30.100075 28.987492 30.030418 29.833812 29.776614 29.924794 29.657419 29.793010 29.657419 29.992392 29.940612 29.424473 30.266221 28.193563 30.667952 30.131497 31.125553 31.995406 31.532457 32.313114 32.026068 32.603067 32.529153 33.952221 32.933304 34.797493 33.180860 33.586933 33.180860 34.235509 33.137591 34.520158 33.062347 33.061826 32.936109 32.359506 32.745710 31.605983 32.537009 31.294197 32.379519 31.635919 32.199305 31.466928 32.199305 32.238629 32.222231 32.641844 32.404811 32.169525 32.573158 32.613585 32.573158 33.268164 32.469291 34.002723 32.384200 34.323950 32.213365 33.121110 31.997729 30.701113 31.834572 gsl/doc/examples/spmatrix.txt0000644000175000017500000000126213536674414014726 0ustar eddeddprinting all matrix elements: A(0,0) = 0 A(0,1) = 0 A(0,2) = 3.1 A(0,3) = 4.6 A(1,0) = 1 A(1,1) = 0 A(1,2) = 7.2 A(1,3) = 0 A(2,0) = 0 A(2,1) = 0 A(2,2) = 0 A(2,3) = 0 A(3,0) = 2.1 A(3,1) = 2.9 A(3,2) = 0 A(3,3) = 8.5 A(4,0) = 4.1 A(4,1) = 0 A(4,2) = 0 A(4,3) = 0 matrix in triplet format (i,j,Aij): %%MatrixMarket matrix coordinate real general 5 4 8 1 3 3.1 1 4 4.6 2 1 1.0 2 3 7.2 4 1 2.1 4 2 2.9 4 4 8.5 5 1 4.1 matrix in compressed column format: i = [ 1, 3, 4, 3, 0, 1, 0, 3, ] p = [ 0, 3, 4, 6, 8, ] d = [ 1, 2.1, 4.1, 2.9, 3.1, 7.2, 4.6, 8.5, ] matrix in compressed row format: i = [ 2, 3, 0, 2, 0, 1, 3, 0, ] p = [ 0, 2, 4, 4, 7, 8, ] d = [ 3.1, 4.6, 1, 7.2, 2.1, 2.9, 8.5, 4.1, ] gsl/doc/examples/eigen_nonsymm.c0000644000175000017500000000250613536674414015333 0ustar eddedd#include #include #include int main (void) { double data[] = { -1.0, 1.0, -1.0, 1.0, -8.0, 4.0, -2.0, 1.0, 27.0, 9.0, 3.0, 1.0, 64.0, 16.0, 4.0, 1.0 }; gsl_matrix_view m = gsl_matrix_view_array (data, 4, 4); gsl_vector_complex *eval = gsl_vector_complex_alloc (4); gsl_matrix_complex *evec = gsl_matrix_complex_alloc (4, 4); gsl_eigen_nonsymmv_workspace * w = gsl_eigen_nonsymmv_alloc (4); gsl_eigen_nonsymmv (&m.matrix, eval, evec, w); gsl_eigen_nonsymmv_free (w); gsl_eigen_nonsymmv_sort (eval, evec, GSL_EIGEN_SORT_ABS_DESC); { int i, j; for (i = 0; i < 4; i++) { gsl_complex eval_i = gsl_vector_complex_get (eval, i); gsl_vector_complex_view evec_i = gsl_matrix_complex_column (evec, i); printf ("eigenvalue = %g + %gi\n", GSL_REAL(eval_i), GSL_IMAG(eval_i)); printf ("eigenvector = \n"); for (j = 0; j < 4; ++j) { gsl_complex z = gsl_vector_complex_get(&evec_i.vector, j); printf("%g + %gi\n", GSL_REAL(z), GSL_IMAG(z)); } } } gsl_vector_complex_free(eval); gsl_matrix_complex_free(evec); return 0; } gsl/doc/examples/cblas.c0000644000175000017500000000111013536674414013536 0ustar eddedd#include #include int main (void) { int lda = 3; float A[] = { 0.11, 0.12, 0.13, 0.21, 0.22, 0.23 }; int ldb = 2; float B[] = { 1011, 1012, 1021, 1022, 1031, 1032 }; int ldc = 2; float C[] = { 0.00, 0.00, 0.00, 0.00 }; /* Compute C = A B */ cblas_sgemm (CblasRowMajor, CblasNoTrans, CblasNoTrans, 2, 2, 3, 1.0, A, lda, B, ldb, 0.0, C, ldc); printf ("[ %g, %g\n", C[0], C[1]); printf (" %g, %g ]\n", C[2], C[3]); return 0; } gsl/doc/examples/permseq.txt0000644000175000017500000000005213536674414014527 0ustar eddedd 0 1 2 0 2 1 1 0 2 1 2 0 2 0 1 2 1 0 gsl/doc/examples/filt_edge.c0000644000175000017500000000362313536674414014407 0ustar eddedd#include #include #include #include #include #include #include int main(void) { const size_t N = 1000; /* length of time series */ const size_t K = 7; /* window size */ const double f = 5.0; /* frequency of square wave in Hz */ gsl_filter_median_workspace *median_p = gsl_filter_median_alloc(K); gsl_filter_rmedian_workspace *rmedian_p = gsl_filter_rmedian_alloc(K); gsl_vector *t = gsl_vector_alloc(N); /* time */ gsl_vector *x = gsl_vector_alloc(N); /* input vector */ gsl_vector *y_median = gsl_vector_alloc(N); /* median filtered output */ gsl_vector *y_rmedian = gsl_vector_alloc(N); /* recursive median filtered output */ gsl_rng *r = gsl_rng_alloc(gsl_rng_default); size_t i; /* generate input signal */ for (i = 0; i < N; ++i) { double ti = (double) i / (N - 1.0); double tmp = sin(2.0 * M_PI * f * ti); double xi = (tmp >= 0.0) ? 1.0 : -1.0; double ei = gsl_ran_gaussian(r, 0.1); gsl_vector_set(t, i, ti); gsl_vector_set(x, i, xi + ei); } gsl_filter_median(GSL_FILTER_END_PADVALUE, x, y_median, median_p); gsl_filter_rmedian(GSL_FILTER_END_PADVALUE, x, y_rmedian, rmedian_p); /* print results */ for (i = 0; i < N; ++i) { double ti = gsl_vector_get(t, i); double xi = gsl_vector_get(x, i); double medi = gsl_vector_get(y_median, i); double rmedi = gsl_vector_get(y_rmedian, i); printf("%f %f %f %f\n", ti, xi, medi, rmedi); } gsl_vector_free(t); gsl_vector_free(x); gsl_vector_free(y_median); gsl_vector_free(y_rmedian); gsl_rng_free(r); gsl_filter_median_free(median_p); return 0; } gsl/doc/examples/sum.c0000644000175000017500000000175013536674414013270 0ustar eddedd#include #include #include #define N 20 int main (void) { double t[N]; double sum_accel, err; double sum = 0; int n; gsl_sum_levin_u_workspace * w = gsl_sum_levin_u_alloc (N); const double zeta_2 = M_PI * M_PI / 6.0; /* terms for zeta(2) = \sum_{n=1}^{\infty} 1/n^2 */ for (n = 0; n < N; n++) { double np1 = n + 1.0; t[n] = 1.0 / (np1 * np1); sum += t[n]; } gsl_sum_levin_u_accel (t, N, w, &sum_accel, &err); printf ("term-by-term sum = % .16f using %d terms\n", sum, N); printf ("term-by-term sum = % .16f using %zu terms\n", w->sum_plain, w->terms_used); printf ("exact value = % .16f\n", zeta_2); printf ("accelerated sum = % .16f using %zu terms\n", sum_accel, w->terms_used); printf ("estimated error = % .16f\n", err); printf ("actual error = % .16f\n", sum_accel - zeta_2); gsl_sum_levin_u_free (w); return 0; } gsl/doc/examples/nlfit3.c0000644000175000017500000001236313536674414013665 0ustar eddedd#include #include #include #include #include #include /* parameters to model */ struct model_params { double a1; double a2; double a3; double a4; double a5; }; /* Branin function */ int func_f (const gsl_vector * x, void *params, gsl_vector * f) { struct model_params *par = (struct model_params *) params; double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double f1 = x2 + par->a1 * x1 * x1 + par->a2 * x1 + par->a3; double f2 = sqrt(par->a4) * sqrt(1.0 + (1.0 - par->a5) * cos(x1)); gsl_vector_set(f, 0, f1); gsl_vector_set(f, 1, f2); return GSL_SUCCESS; } int func_df (const gsl_vector * x, void *params, gsl_matrix * J) { struct model_params *par = (struct model_params *) params; double x1 = gsl_vector_get(x, 0); double f2 = sqrt(par->a4) * sqrt(1.0 + (1.0 - par->a5) * cos(x1)); gsl_matrix_set(J, 0, 0, 2.0 * par->a1 * x1 + par->a2); gsl_matrix_set(J, 0, 1, 1.0); gsl_matrix_set(J, 1, 0, -0.5 * par->a4 / f2 * (1.0 - par->a5) * sin(x1)); gsl_matrix_set(J, 1, 1, 0.0); return GSL_SUCCESS; } int func_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { struct model_params *par = (struct model_params *) params; double x1 = gsl_vector_get(x, 0); double v1 = gsl_vector_get(v, 0); double c = cos(x1); double s = sin(x1); double f2 = sqrt(par->a4) * sqrt(1.0 + (1.0 - par->a5) * c); double t = 0.5 * par->a4 * (1.0 - par->a5) / f2; gsl_vector_set(fvv, 0, 2.0 * par->a1 * v1 * v1); gsl_vector_set(fvv, 1, -t * (c + s*s/f2) * v1 * v1); return GSL_SUCCESS; } void callback(const size_t iter, void *params, const gsl_multifit_nlinear_workspace *w) { gsl_vector * x = gsl_multifit_nlinear_position(w); double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); /* print out current location */ printf("%f %f\n", x1, x2); } void solve_system(gsl_vector *x0, gsl_multifit_nlinear_fdf *fdf, gsl_multifit_nlinear_parameters *params) { const gsl_multifit_nlinear_type *T = gsl_multifit_nlinear_trust; const size_t max_iter = 200; const double xtol = 1.0e-8; const double gtol = 1.0e-8; const double ftol = 1.0e-8; const size_t n = fdf->n; const size_t p = fdf->p; gsl_multifit_nlinear_workspace *work = gsl_multifit_nlinear_alloc(T, params, n, p); gsl_vector * f = gsl_multifit_nlinear_residual(work); gsl_vector * x = gsl_multifit_nlinear_position(work); int info; double chisq0, chisq, rcond; printf("# %s/%s\n", gsl_multifit_nlinear_name(work), gsl_multifit_nlinear_trs_name(work)); /* initialize solver */ gsl_multifit_nlinear_init(x0, fdf, work); /* store initial cost */ gsl_blas_ddot(f, f, &chisq0); /* iterate until convergence */ gsl_multifit_nlinear_driver(max_iter, xtol, gtol, ftol, callback, NULL, &info, work); /* store final cost */ gsl_blas_ddot(f, f, &chisq); /* store cond(J(x)) */ gsl_multifit_nlinear_rcond(&rcond, work); /* print summary */ fprintf(stderr, "%-25s %-6zu %-5zu %-5zu %-13.4e %-12.4e %-13.4e (%.2e, %.2e)\n", gsl_multifit_nlinear_trs_name(work), gsl_multifit_nlinear_niter(work), fdf->nevalf, fdf->nevaldf, chisq0, chisq, 1.0 / rcond, gsl_vector_get(x, 0), gsl_vector_get(x, 1)); printf("\n\n"); gsl_multifit_nlinear_free(work); } int main (void) { const size_t n = 2; const size_t p = 2; gsl_vector *f = gsl_vector_alloc(n); gsl_vector *x = gsl_vector_alloc(p); gsl_multifit_nlinear_fdf fdf; gsl_multifit_nlinear_parameters fdf_params = gsl_multifit_nlinear_default_parameters(); struct model_params params; params.a1 = -5.1 / (4.0 * M_PI * M_PI); params.a2 = 5.0 / M_PI; params.a3 = -6.0; params.a4 = 10.0; params.a5 = 1.0 / (8.0 * M_PI); /* print map of Phi(x1, x2) */ { double x1, x2, chisq; for (x1 = -5.0; x1 < 15.0; x1 += 0.1) { for (x2 = -5.0; x2 < 15.0; x2 += 0.1) { gsl_vector_set(x, 0, x1); gsl_vector_set(x, 1, x2); func_f(x, ¶ms, f); gsl_blas_ddot(f, f, &chisq); printf("%f %f %f\n", x1, x2, chisq); } printf("\n"); } printf("\n\n"); } /* define function to be minimized */ fdf.f = func_f; fdf.df = func_df; fdf.fvv = func_fvv; fdf.n = n; fdf.p = p; fdf.params = ¶ms; /* starting point */ gsl_vector_set(x, 0, 6.0); gsl_vector_set(x, 1, 14.5); fprintf(stderr, "%-25s %-6s %-5s %-5s %-13s %-12s %-13s %-15s\n", "Method", "NITER", "NFEV", "NJEV", "Initial Cost", "Final cost", "Final cond(J)", "Final x"); fdf_params.trs = gsl_multifit_nlinear_trs_lm; solve_system(x, &fdf, &fdf_params); fdf_params.trs = gsl_multifit_nlinear_trs_lmaccel; solve_system(x, &fdf, &fdf_params); fdf_params.trs = gsl_multifit_nlinear_trs_dogleg; solve_system(x, &fdf, &fdf_params); fdf_params.trs = gsl_multifit_nlinear_trs_ddogleg; solve_system(x, &fdf, &fdf_params); fdf_params.trs = gsl_multifit_nlinear_trs_subspace2D; solve_system(x, &fdf, &fdf_params); gsl_vector_free(f); gsl_vector_free(x); return 0; } gsl/doc/examples/largefit.txt0000644000175000017500000010737613536675317014674 0ustar eddedd0.000000 1.013392 0.002000 1.057114 0.004000 1.006672 0.006000 1.005092 0.008000 1.034198 0.010000 0.999146 0.012000 0.972324 0.014000 1.091945 0.016000 1.027780 0.018000 0.997921 0.020000 0.911458 0.022000 1.176001 0.024000 1.249657 0.026001 0.873918 0.028001 0.996930 0.030001 1.168647 0.032001 1.042424 0.034001 0.956186 0.036001 1.032493 0.038001 1.016478 0.040001 0.916054 0.042001 1.160628 0.044001 1.129574 0.046001 1.134291 0.048001 1.103102 0.050001 1.067503 0.052001 1.242134 0.054001 1.210027 0.056001 1.286558 0.058001 1.167437 0.060001 1.270989 0.062001 1.238484 0.064001 1.247879 0.066001 1.318323 0.068001 1.290329 0.070001 1.076233 0.072001 1.364227 0.074001 1.331892 0.076002 1.644310 0.078002 1.272358 0.080002 1.444683 0.082002 1.379124 0.084002 1.681307 0.086002 1.662120 0.088002 1.616803 0.090002 1.563115 0.092002 1.980689 0.094002 1.605972 0.096002 1.714268 0.098002 1.721501 0.100002 1.835777 0.102002 1.843517 0.104002 1.874658 0.106002 1.839987 0.108002 2.096691 0.110002 1.874711 0.112002 2.227526 0.114002 2.198516 0.116002 2.531939 0.118002 2.440293 0.120002 2.474498 0.122002 1.886756 0.124002 2.395872 0.126003 2.424067 0.128003 2.533481 0.130003 2.920822 0.132003 2.639199 0.134003 2.178261 0.136003 2.563181 0.138003 2.330377 0.140003 2.482197 0.142003 2.944214 0.144003 2.375046 0.146003 2.706059 0.148003 2.644492 0.150003 2.344976 0.152003 2.700872 0.154003 3.176028 0.156003 2.982176 0.158003 2.663030 0.160003 2.816813 0.162003 2.245545 0.164003 2.257987 0.166003 2.447319 0.168003 2.955995 0.170003 2.754546 0.172003 3.082176 0.174003 2.488766 0.176004 2.452559 0.178004 2.407845 0.180004 2.795500 0.182004 2.230950 0.184004 2.287802 0.186004 2.460347 0.188004 2.083690 0.190004 2.204919 0.192004 2.696174 0.194004 2.395705 0.196004 2.178485 0.198004 2.307372 0.200004 2.255902 0.202004 1.987918 0.204004 1.887785 0.206004 2.075691 0.208004 1.686572 0.210004 1.982841 0.212004 2.020780 0.214004 1.649430 0.216004 1.963334 0.218004 1.816612 0.220004 2.047502 0.222004 1.570563 0.224004 1.573427 0.226005 1.335974 0.228005 1.378628 0.230005 1.628469 0.232005 1.620938 0.234005 1.216537 0.236005 1.638633 0.238005 1.554498 0.240005 1.391226 0.242005 1.431787 0.244005 1.263934 0.246005 1.425465 0.248005 1.105883 0.250005 1.265657 0.252005 1.168639 0.254005 1.242218 0.256005 1.245104 0.258005 1.108120 0.260005 1.211894 0.262005 1.078647 0.264005 1.057431 0.266005 1.108110 0.268005 1.266898 0.270005 1.100118 0.272005 0.990081 0.274005 1.023601 0.276006 1.238272 0.278006 1.145608 0.280006 1.064366 0.282006 1.025441 0.284006 1.121463 0.286006 0.977097 0.288006 1.032786 0.290006 1.166776 0.292006 1.089725 0.294006 1.048237 0.296006 0.994855 0.298006 0.981623 0.300006 0.964743 0.302006 1.170996 0.304006 0.909883 0.306006 1.060783 0.308006 1.066695 0.310006 1.235120 0.312006 0.983080 0.314006 0.818831 0.316006 1.173228 0.318006 1.052397 0.320006 0.958336 0.322006 1.063317 0.324006 1.045760 0.326007 0.918851 0.328007 0.828151 0.330007 0.922930 0.332007 0.960096 0.334007 0.837558 0.336007 1.093800 0.338007 0.822421 0.340007 0.982303 0.342007 0.857034 0.344007 0.929809 0.346007 1.098484 0.348007 0.912742 0.350007 0.877250 0.352007 0.875453 0.354007 0.842108 0.356007 0.885992 0.358007 0.906674 0.360007 0.948593 0.362007 0.826321 0.364007 0.794805 0.366007 0.799018 0.368007 0.762520 0.370007 0.854828 0.372007 0.913891 0.374007 0.900230 0.376008 0.764344 0.378008 0.893758 0.380008 0.843119 0.382008 0.637597 0.384008 0.732940 0.386008 0.632072 0.388008 0.820424 0.390008 0.653834 0.392008 0.723423 0.394008 0.668586 0.396008 0.587775 0.398008 0.638778 0.400008 0.675101 0.402008 0.679205 0.404008 0.558361 0.406008 0.669089 0.408008 0.659724 0.410008 0.599887 0.412008 0.691995 0.414008 0.577313 0.416008 0.483322 0.418008 0.536498 0.420008 0.504125 0.422008 0.548830 0.424008 0.493233 0.426009 0.477806 0.428009 0.407442 0.430009 0.503880 0.432009 0.460940 0.434009 0.469029 0.436009 0.501596 0.438009 0.405411 0.440009 0.418834 0.442009 0.478496 0.444009 0.420672 0.446009 0.447649 0.448009 0.375458 0.450009 0.400451 0.452009 0.373357 0.454009 0.434920 0.456009 0.422812 0.458009 0.340769 0.460009 0.414966 0.462009 0.369741 0.464009 0.385961 0.466009 0.366010 0.468009 0.353909 0.470009 0.320795 0.472009 0.422465 0.474009 0.402222 0.476010 0.335765 0.478010 0.409413 0.480010 0.384967 0.482010 0.381460 0.484010 0.357884 0.486010 0.423619 0.488010 0.450770 0.490010 0.421563 0.492010 0.386944 0.494010 0.434098 0.496010 0.414335 0.498010 0.373130 0.500010 0.494584 0.502010 0.399168 0.504010 0.327445 0.506010 0.414090 0.508010 0.548788 0.510010 0.413589 0.512010 0.415560 0.514010 0.402811 0.516010 0.467932 0.518010 0.447742 0.520010 0.514848 0.522010 0.545292 0.524010 0.585226 0.526011 0.481420 0.528011 0.542183 0.530011 0.566527 0.532011 0.639324 0.534011 0.665601 0.536011 0.728721 0.538011 0.628460 0.540011 0.745176 0.542011 0.629362 0.544011 0.755605 0.546011 0.730199 0.548011 0.538527 0.550011 0.716283 0.552011 0.653197 0.554011 0.750977 0.556011 0.751317 0.558011 0.669732 0.560011 0.890732 0.562011 0.801524 0.564011 0.896916 0.566011 0.728432 0.568011 0.873384 0.570011 0.915557 0.572011 0.801362 0.574011 0.939248 0.576012 0.841058 0.578012 0.982556 0.580012 0.801244 0.582012 0.944939 0.584012 0.849316 0.586012 1.044572 0.588012 0.991711 0.590012 0.775179 0.592012 0.900808 0.594012 1.054818 0.596012 0.949419 0.598012 1.055190 0.600012 0.960703 0.602012 0.994899 0.604012 0.942069 0.606012 0.782694 0.608012 0.862081 0.610012 0.972296 0.612012 1.084091 0.614012 0.859938 0.616012 0.945606 0.618012 0.991509 0.620012 1.135856 0.622012 1.113732 0.624012 1.075624 0.626013 1.136413 0.628013 0.989279 0.630013 0.986572 0.632013 0.963125 0.634013 0.976137 0.636013 1.133298 0.638013 0.942319 0.640013 1.061070 0.642013 1.010832 0.644013 1.017137 0.646013 1.033211 0.648013 1.023089 0.650013 1.207996 0.652013 1.029256 0.654013 0.894798 0.656013 1.034056 0.658013 1.023175 0.660013 0.972134 0.662013 1.000921 0.664013 1.059754 0.666013 1.205824 0.668013 1.291515 0.670013 1.253979 0.672013 1.021328 0.674013 1.099351 0.676014 1.250217 0.678014 1.053546 0.680014 1.240934 0.682014 1.132546 0.684014 1.207390 0.686014 1.143019 0.688014 1.187569 0.690014 1.117158 0.692014 1.017676 0.694014 1.148909 0.696014 1.307952 0.698014 1.134271 0.700014 1.339668 0.702014 1.360803 0.704014 1.209263 0.706014 1.643307 0.708014 1.482189 0.710014 1.620002 0.712014 1.531291 0.714014 1.508616 0.716014 1.551789 0.718014 1.820704 0.720014 1.190510 0.722014 1.871826 0.724014 1.808171 0.726015 1.639588 0.728015 1.896243 0.730015 1.814870 0.732015 2.268629 0.734015 1.860003 0.736015 1.909307 0.738015 2.091058 0.740015 2.307699 0.742015 1.724754 0.744015 2.136682 0.746015 2.482358 0.748015 2.739133 0.750015 2.183903 0.752015 2.505655 0.754015 2.256298 0.756015 2.232645 0.758015 2.418358 0.760015 2.743980 0.762015 2.490451 0.764015 2.591839 0.766015 2.890467 0.768015 2.441939 0.770015 2.795238 0.772015 2.882743 0.774015 2.704971 0.776016 2.864923 0.778016 2.931144 0.780016 2.595133 0.782016 2.778879 0.784016 2.588524 0.786016 2.424629 0.788016 3.490356 0.790016 2.725991 0.792016 2.819722 0.794016 2.795897 0.796016 2.278287 0.798016 2.709274 0.800016 2.864658 0.802016 2.495316 0.804016 2.481585 0.806016 2.761135 0.808016 2.443268 0.810016 2.565330 0.812016 2.160156 0.814016 2.817464 0.816016 2.687451 0.818016 2.225290 0.820016 2.234668 0.822016 2.366997 0.824016 1.801739 0.826017 1.999203 0.828017 2.121902 0.830017 1.658141 0.832017 2.048377 0.834017 1.987455 0.836017 2.056994 0.838017 1.748644 0.840017 2.035117 0.842017 1.991255 0.844017 1.933487 0.846017 1.927148 0.848017 1.526116 0.850017 1.825349 0.852017 1.448218 0.854017 1.266984 0.856017 1.574851 0.858017 1.569314 0.860017 1.461266 0.862017 1.241627 0.864017 1.385409 0.866017 1.438944 0.868017 1.458593 0.870017 1.045023 0.872017 1.156637 0.874017 1.231397 0.876018 1.060101 0.878018 1.208137 0.880018 1.297885 0.882018 1.261846 0.884018 1.073377 0.886018 1.146843 0.888018 1.110004 0.890018 1.142169 0.892018 1.091117 0.894018 1.018172 0.896018 1.325115 0.898018 1.055748 0.900018 0.984488 0.902018 0.967879 0.904018 0.961651 0.906018 1.085517 0.908018 0.924754 0.910018 1.080906 0.912018 0.949908 0.914018 1.084287 0.916018 1.115371 0.918018 1.150677 0.920018 1.197850 0.922018 0.909476 0.924018 0.920649 0.926019 1.061322 0.928019 0.867733 0.930019 1.122616 0.932019 0.730512 0.934019 1.068192 0.936019 1.051183 0.938019 0.939787 0.940019 0.793864 0.942019 0.954387 0.944019 0.949134 0.946019 0.950377 0.948019 0.837390 0.950019 0.920521 0.952019 1.038896 0.954019 1.054405 0.956019 0.800492 0.958019 1.108765 0.960019 1.029235 0.962019 0.886213 0.964019 1.086449 0.966019 0.845174 0.968019 0.825587 0.970019 0.979444 0.972019 0.801748 0.974019 1.027216 0.976020 1.065852 0.978020 0.918422 0.980020 1.073070 0.982020 0.794571 0.984020 1.009434 0.986020 0.789657 0.988020 1.017966 0.990020 0.877302 0.992020 1.009978 0.994020 0.872902 0.996020 0.866302 0.998020 0.851322 3.049679424205e+02 2.259835726033e+02 4.582825874915e-01 2.680463872353e+02 2.141625853653e+02 5.231740344075e-01 2.355948141292e+02 2.030649037295e+02 5.890884776982e-01 2.070720557626e+02 1.929847719797e+02 6.548268540695e-01 1.820024623048e+02 1.841071982023e+02 7.193816095680e-01 1.599679694250e+02 1.765119078743e+02 7.819323547760e-01 1.406011265886e+02 1.701896559003e+02 8.418164329920e-01 1.235789693965e+02 1.650602801823e+02 8.985337456939e-01 1.086176337817e+02 1.609890629028e+02 9.518224933892e-01 9.546762224962e+01 1.578034008239e+02 1.001803669977e+00 8.390964321973e+01 1.553114332041e+02 1.049166815092e+00 7.375095408631e+01 1.533208841935e+02 1.095369599339e+00 6.482214701353e+01 1.516545498708e+02 1.142835320650e+00 5.697432386469e+01 1.501600777143e+02 1.195128929827e+00 5.007661315447e+01 1.487142570824e+02 1.257055202434e+00 4.401398761620e+01 1.472238699840e+02 1.334559838311e+00 3.868534598983e+01 1.456254533319e+02 1.434275606090e+00 3.400182704195e+01 1.438854216430e+02 1.562624192539e+00 2.988532770251e+01 1.420005472786e+02 1.724597716200e+00 2.626720060614e+01 1.399973932808e+02 1.922590427409e+00 2.308710931837e+01 1.379285203982e+02 2.155727436629e+00 2.029202215610e+01 1.358637251011e+02 2.419980289486e+00 1.783532782322e+01 1.338764558197e+02 2.709112123017e+00 1.567605811361e+01 1.320282500419e+02 3.016299195617e+00 1.377820471914e+01 1.303559093072e+02 3.336148879600e+00 1.211011874966e+01 1.288656095431e+02 3.666763770801e+00 1.064398295137e+01 1.275352199420e+02 4.011508248042e+00 9.355347822018e+00 1.263226144169e+02 4.380228764200e+00 8.222723887366e+00 1.251758487077e+02 4.789835871491e+00 7.227223339438e+00 1.240414506579e+02 5.264343723688e+00 6.352245060591e+00 1.228688717559e+02 5.834654184759e+00 5.583197780759e+00 1.216111137835e+02 6.538472436688e+00 4.907256751234e+00 1.202229385257e+02 7.420558509837e+00 4.313149877211e+00 1.186587175264e+02 8.532960587025e+00 3.790969742639e+00 1.168719379270e+02 9.934219924074e+00 3.332008392645e+00 1.148177823395e+02 1.168633847574e+01 2.928612118367e+00 1.124592677172e+02 1.384884250160e+01 2.574053822548e+00 1.097763883030e+02 1.647024317418e+01 2.262420837439e+00 1.067766418728e+02 1.957807528503e+01 1.988516324268e+00 1.035042077114e+02 2.316935060446e+01 1.747772609960e+00 1.000440930064e+02 2.720383880835e+01 1.536175015939e+00 9.651748136730e+01 3.160294630043e+01 1.350194908735e+00 9.306629085685e+01 3.625651584899e+01 1.186730855963e+00 8.982891542035e+01 4.103813255675e+01 1.043056906365e+00 8.691388337114e+01 4.582681024607e+01 9.167771314351e-01 8.438067558766e+01 5.053043899741e+01 8.057856705552e-01 8.223468267428e+01 5.510535691100e+01 7.082316133428e-01 8.043700500142e+01 5.956716578954e+01 6.224881335909e-01 7.892356351996e+01 6.398963467744e+01 5.471253600676e-01 7.762558672375e+01 6.849033381418e+01 4.808865317678e-01 7.648530608569e+01 7.320368200710e+01 4.226670399761e-01 7.546417256280e+01 7.824541364617e+01 3.714960076454e-01 7.454377148874e+01 8.367712359559e+01 3.265200989040e-01 7.372121887768e+01 8.948288666964e+01 2.869892886980e-01 7.300159062338e+01 9.556806330652e+01 2.522443552596e-01 7.239018247590e+01 1.017824376816e+02 2.217058868260e-01 7.188698436434e+01 1.079601014690e+02 1.948646192805e-01 7.148458327893e+01 1.139629629420e+02 1.712729435873e-01 7.116921805899e+01 1.197158468470e+02 1.505374413958e-01 7.092365038045e+01 1.252265216700e+02 1.323123243366e-01 7.073032274734e+01 1.305894966813e+02 1.162936676020e-01 7.057376310858e+01 1.359755192765e+02 1.022143416507e-01 7.044186308552e+01 1.416097761877e+02 8.983955751429e-02 7.032612681170e+01 1.477432927100e+02 7.896295142170e-02 7.022118124324e+01 1.546259786009e+02 6.940314344529e-02 7.012386310913e+01 1.624951913686e+02 6.100071278192e-02 7.003217039665e+01 1.715959043726e+02 5.361553922749e-02 6.994432878077e+01 1.822425671211e+02 4.712446651126e-02 6.985815727234e+01 1.949181851600e+02 4.141924852323e-02 6.977080947993e+01 2.103881673438e+02 3.640474418569e-02 6.967884811449e+01 2.297917342820e+02 3.199733086616e-02 6.957853248782e+01 2.546688827200e+02 2.812350987377e-02 6.946618479519e+01 2.868957469282e+02 2.471868078399e-02 6.933852785878e+01 3.285424944922e+02 2.172606415213e-02 6.919291344387e+01 3.817205441187e+02 1.909575465080e-02 6.902736499974e+01 4.485132210340e+02 1.678388884108e-02 6.884035630317e+01 5.310675633949e+02 1.475191369921e-02 6.863027538446e+01 6.318855763701e+02 1.296594370049e-02 6.839460884722e+01 7.543117523171e+02 1.139619573923e-02 6.812900888296e+01 9.031615850636e+02 1.001649246108e-02 6.782650841753e+01 1.085363754514e+03 8.803825725593e-03 6.747715935584e+01 1.310423758147e+03 7.737972918940e-03 6.706827726943e+01 1.590512859046e+03 6.801159718574e-03 6.658535294760e+01 1.940067526847e+03 5.977763685930e-03 6.601361942674e+01 2.374898865018e+03 5.254053744281e-03 6.534025480379e+01 2.910867555554e+03 4.617961197223e-03 6.455718022478e+01 3.562152917030e+03 4.058878469271e-03 6.366426983735e+01 4.339120040535e+03 3.567482212328e-03 6.267246675446e+01 5.245879972185e+03 3.135577828119e-03 6.160586603077e+01 6.277876537643e+03 2.755962813834e-03 6.050152878588e+01 7.420129432771e+03 2.422306652102e-03 5.940600544608e+01 8.646931410865e+03 2.129045242325e-03 5.836853473873e+01 9.923641204006e+03 1.871288112896e-03 5.743242713839e+01 1.121066534369e+04 1.644736866954e-03 5.662738001373e+01 1.246896420997e+04 1.445613501671e-03 5.596541146964e+01 1.366584108870e+04 1.270597405701e-03 5.544154120061e+01 1.477972133305e+04 1.116769984168e-03 5.503826029298e+01 1.580312198272e+04 9.815659877337e-04 5.473156067468e+01 1.674371614963e+04 8.627307341121e-04 5.449639557682e+01 1.762387065864e+04 7.582825086473e-04 5.431042588540e+01 1.847902667293e+04 6.664795169402e-04 5.415593097959e+01 1.935486665317e+04 5.857908384214e-04 5.402033020861e+01 2.030272757827e+04 5.148708964889e-04 5.389585571844e+01 2.137272939197e+04 4.525370194686e-04 5.377876175685e+01 2.260505111453e+04 3.977497182033e-04 5.366827369467e+01 2.402154467835e+04 3.495953513739e-04 5.356539430801e+01 2.562129178542e+04 3.072708894787e-04 5.347170544468e+01 2.738334955837e+04 2.700705233922e-04 5.338835705332e+01 2.927757252543e+04 2.373738941853e-04 5.331542911668e+01 3.128152881945e+04 2.086357479260e-04 5.325174824334e+01 3.339993406541e+04 1.833768429424e-04 5.319509150475e+01 3.568312199170e+04 1.611759579161e-04 5.314260751159e+01 3.824173467584e+04 1.416628675319e-04 5.309127888846e+01 4.125456058062e+04 1.245121685445e-04 5.303831822342e+01 4.496496103020e+04 1.094378533045e-04 5.298147100660e+01 4.966054745530e+04 9.618854025191e-05 5.291924721409e+01 5.563401938189e+04 8.454328183916e-05 5.285110492743e+01 6.313094817125e+04 7.430787997631e-05 5.277757730083e+01 7.229745409848e+04 6.531164755442e-05 5.270029342860e+01 8.314101305380e+04 5.740456204151e-05 5.262182417067e+01 9.551247341902e+04 5.045476368410e-05 5.254531164829e+01 1.091129967699e+05 4.434635659406e-05 5.247392006841e+01 1.235275455201e+05 3.897747605122e-05 5.241024129901e+01 1.382832346593e+05 3.425858979196e-05 5.235583788157e+01 1.529249751721e+05 3.011100495556e-05 5.231106317263e+01 1.670958254815e+05 2.646555579024e-05 5.227518098782e+01 1.806098846275e+05 2.326145023455e-05 5.224668896173e+01 1.935123615479e+05 2.044525613984e-05 5.222369845386e+01 2.061308984463e+05 1.797001022759e-05 5.220425027281e+01 2.191284356976e+05 1.579443492276e-05 5.218651101326e+01 2.335660368913e+05 1.388225000263e-05 5.216885358583e+01 2.509722971636e+05 1.220156758238e-05 5.214985520678e+01 2.733981376512e+05 1.072436034786e-05 5.212824866716e+01 3.034266277081e+05 9.425994167906e-06 5.210285039413e+01 3.441301201637e+05 8.284817291795e-06 5.207247299144e+01 3.990262617420e+05 7.281799281409e-06 5.203581767290e+01 4.721363480416e+05 6.400213656763e-06 5.199133706856e+01 5.682352479972e+05 5.625358962694e-06 5.193706254792e+01 6.933072114664e+05 4.944313605175e-06 5.187040030184e+01 8.551500491813e+05 4.345720368858e-06 5.178791093781e+01 1.064042950091e+06 3.819597022435e-06 5.168509149442e+01 1.333407680239e+06 3.357169853436e-06 5.155617488361e+01 1.680431438951e+06 2.950727356477e-06 5.139395622140e+01 2.126657842772e+06 2.593491635031e-06 5.118965877463e+01 2.698558351860e+06 2.279505372196e-06 5.093287136406e+01 3.428048537624e+06 2.003532485582e-06 5.061162375266e+01 4.352816652907e+06 1.760970809609e-06 5.021271052892e+01 5.516208459941e+06 1.547775349094e-06 4.972241637330e+01 6.966287219399e+06 1.360390824307e-06 4.912781796753e+01 8.753591118568e+06 1.195692382581e-06 4.841880840383e+01 1.092709555886e+07 1.050933487801e-06 4.759086219226e+01 1.352804492018e+07 9.237001187534e-07 4.664828637236e+01 1.658175847359e+07 8.118705125383e-07 4.560728345680e+01 2.008830002734e+07 7.135797817356e-07 4.449769791026e+01 2.401392005723e+07 6.271888152581e-07 4.336211016106e+01 2.828603412660e+07 5.512569442873e-07 4.225135798008e+01 3.279455146982e+07 4.845179174632e-07 4.121679351182e+01 3.740107906645e+07 4.258587846840e-07 4.030124195326e+01 4.195502308072e+07 3.743013373831e-07 3.953170701875e+01 4.631294074984e+07 3.289857957744e-07 3.891640305825e+01 5.035613735668e+07 2.891564710349e-07 3.844674820167e+01 5.400229251024e+07 2.541491633233e-07 3.810279052248e+01 5.720935693906e+07 2.233800854838e-07 3.785953510544e+01 5.997268292048e+07 1.963361277222e-07 3.769210406865e+01 6.231807672454e+07 1.725663009102e-07 3.757885197305e+01 6.429379284239e+07 1.516742158222e-07 3.750258577471e+01 6.596381139578e+07 1.333114728886e-07 3.745051526259e+01 6.740367846874e+07 1.171718522321e-07 3.741357883370e+01 6.869916905747e+07 1.029862070984e-07 3.738560011943e+01 6.994715615352e+07 9.051797552454e-08 3.736252019673e+01 7.125724628095e+07 7.955923539581e-08 3.734179601391e+01 7.275194110193e+07 6.992723710496e-08 3.732196619532e+01 7.456262946587e+07 6.146135599226e-08 3.730234328488e+01 7.681944204890e+07 5.402041374432e-08 3.728277951991e+01 7.963588797480e+07 4.748032408323e-08 3.726346143674e+01 8.309413917424e+07 4.173202348503e-08 3.724471093212e+01 8.724143912631e+07 3.667965241985e-08 3.722679812395e+01 9.210863082156e+07 3.223895678396e-08 3.720979103905e+01 9.775667164273e+07 2.833588286556e-08 3.719346730105e+01 1.043491226146e+08 2.490534241387e-08 3.717729401082e+01 1.122423279802e+08 2.189012721767e-08 3.716045763856e+01 1.220810806830e+08 1.923995509249e-08 3.714191206702e+01 1.348829859011e+08 1.691063136728e-08 3.712041594974e+01 1.520897163217e+08 1.486331188744e-08 3.709454450409e+01 1.755681653921e+08 1.306385524380e-08 3.706267615412e+01 2.075702236628e+08 1.148225342530e-08 3.702296535692e+01 2.506922662840e+08 1.009213140091e-08 3.697331925736e+01 3.078765184126e+08 8.870307285572e-09 3.691140006655e+01 3.824564034331e+08 7.796405755613e-09 3.683467942291e+01 4.782037589937e+08 6.852518266760e-09 3.674057542311e+01 5.993180800575e+08 6.022904408544e-09 3.662670435331e+01 7.503008114813e+08 5.293729414838e-09 3.649127077540e+01 9.356660661811e+08 4.652833453203e-09 3.633359218657e+01 1.159452801912e+09 4.089528845688e-09 3.615469987038e+01 1.424534382531e+09 3.594421839492e-09 3.595787824143e+01 1.731781275581e+09 3.159255955327e-09 3.574892710720e+01 2.079220110391e+09 2.776774301114e-09 3.553591074377e+01 2.461421359731e+09 2.440598554963e-09 3.532825899053e+01 2.869385364166e+09 2.145122599305e-09 3.513532377102e+01 3.291124080668e+09 3.049679424205e+02 2.259835726033e+02 4.582825874915e-01 2.580143967012e+02 2.107917110746e+02 5.426082927241e-01 2.182899237760e+02 1.969684354706e+02 6.280418497061e-01 1.846815194475e+02 1.850487061133e+02 7.121585522137e-01 1.562475401313e+02 1.752656274770e+02 7.930682981603e-01 1.321913197927e+02 1.675964837258e+02 8.693421204564e-01 1.118388488795e+02 1.618268821054e+02 9.400558583882e-01 9.461988985585e+01 1.576110875095e+02 1.005149540682e+00 8.005200023099e+01 1.545371696057e+02 1.066046743531e+00 6.772701543772e+01 1.521942914640e+02 1.126373406299e+00 5.729961283748e+01 1.502241872559e+02 1.192658486550e+00 4.847763643658e+01 1.483466628748e+02 1.274825221439e+00 4.101391123083e+01 1.463656702668e+02 1.385929772224e+00 3.469931783187e+01 1.441690985792e+02 1.540301316776e+00 2.935693333953e+01 1.417297421472e+02 1.749806092407e+00 2.483707429862e+01 1.391041033590e+02 2.019585643005e+00 2.101310285311e+01 1.364177628998e+02 2.345735002147e+00 1.777787859417e+01 1.338283415434e+02 2.716599205799e+00 1.504075668969e+01 1.314720392843e+02 3.117640207549e+00 1.272504818840e+01 1.294169569152e+02 3.538511961844e+00 1.076587134131e+01 1.276471559312e+02 3.980317715907e+00 9.108333738442e+00 1.260812049620e+02 4.461112370318e+00 7.705994327879e+00 1.246070234525e+02 5.018597491481e+00 6.519562225819e+00 1.231104890422e+02 5.710329194895e+00 5.515795860705e+00 1.214867211134e+02 6.613138593918e+00 4.666571607597e+00 1.196368388221e+02 7.823580755521e+00 3.948095817681e+00 1.174610443004e+02 9.458350960490e+00 3.340238165469e+00 1.148598056939e+02 1.164917560198e+01 2.825967635357e+00 1.117502412693e+02 1.452604760013e+01 2.390875344951e+00 1.080972264270e+02 1.818796364880e+01 2.022770835581e+00 1.039503446808e+02 2.266732295247e+01 1.711340518826e+00 9.946934383100e+01 2.789962785978e+01 1.447858709380e+00 9.491587394605e+01 3.371400985488e+01 1.224943147940e+00 9.059756018015e+01 3.985883912725e+01 1.036348164336e+00 8.677789061808e+01 4.606460668162e+01 8.767896857335e-01 8.359646347454e+01 5.212653786164e+01 7.417971869529e-01 8.104571911452e+01 5.797568302674e+01 6.275884348605e-01 7.901219010388e+01 6.370905876257e+01 5.309635173847e-01 7.734832525029e+01 6.956172344973e+01 4.492151880655e-01 7.593296422152e+01 7.581897226353e+01 3.800530141556e-01 7.469915091789e+01 8.268988116770e+01 3.215392030504e-01 7.362996788668e+01 9.019565601115e+01 2.720343090240e-01 7.273474094263e+01 9.813916665311e+01 2.301512990768e-01 7.202192463260e+01 1.061832261120e+02 1.947166909085e-01 7.148248866518e+01 1.139975843326e+02 1.647376741754e-01 7.108865833151e+01 1.213999943426e+02 1.393742938322e-01 7.080299585597e+01 1.284368824993e+02 1.179159161890e-01 7.058920502242e+01 1.353897398738e+02 9.976131830610e-02 7.041904289966e+01 1.427184814664e+02 8.440184287099e-02 7.027423887441e+01 1.509648598648e+02 7.140714658724e-02 7.014478571723e+01 1.606625767586e+02 6.041314277373e-02 7.002547201598e+01 1.723360934443e+02 5.111180034816e-02 6.991233631341e+01 1.866698902619e+02 4.324251338182e-02 6.980030144280e+01 2.048512607129e+02 3.658479941695e-02 6.968249354301e+01 2.289602472653e+02 3.095212196757e-02 6.955090952715e+01 2.621794592342e+02 2.618666412181e-02 6.939767543508e+01 3.086242095967e+02 2.215490681210e-02 6.921620850220e+01 3.728421070941e+02 1.874388786482e-02 6.900177043127e+01 4.593858158015e+02 1.585803701495e-02 6.875094124298e+01 5.729767286329e+02 1.341649820897e-02 6.845968368672e+01 7.195640312202e+02 1.135086417200e-02 6.812026175196e+01 9.082478527657e+02 9.603259766031e-03 6.771817255890e+01 1.153588957260e+03 8.124720438586e-03 6.723070460554e+01 1.477311919966e+03 6.873820329080e-03 6.662828151041e+01 1.908279929703e+03 5.815511594968e-03 6.587892358726e+01 2.480184995003e+03 4.920142437842e-03 6.495574739348e+01 3.227080971755e+03 4.162626316419e-03 6.384720902352e+01 4.176967888995e+03 3.521739069356e-03 6.256865189533e+01 5.343610023949e+03 2.979524254605e-03 6.117107241963e+01 6.717761698214e+03 2.520790044052e-03 5.974038342171e+01 8.260990809897e+03 2.132683577376e-03 5.838168041421e+01 9.906594096892e+03 1.804330849347e-03 5.719097362515e+01 1.157044737306e+04 1.526532040872e-03 5.622731680193e+01 1.316986773805e+04 1.291503757557e-03 5.550067935030e+01 1.464383942896e+04 1.092660953800e-03 5.498030595282e+01 1.596756846729e+04 9.244324323271e-04 5.461483795556e+01 1.715834848082e+04 7.821047498462e-04 5.435156838532e+01 1.827395522176e+04 6.616901553228e-04 5.414797155027e+01 1.940535150537e+04 5.598148607808e-04 5.397562129996e+01 2.066230476892e+04 4.736245141778e-04 5.381940615164e+01 2.214935417579e+04 4.007042258887e-04 5.367450862450e+01 2.393455809231e+04 3.390109080900e-04 5.354230197229e+01 2.602635673295e+04 2.868160313236e-04 5.342604913697e+01 2.837816866245e+04 2.426571943885e-04 5.332736618017e+01 3.092957487782e+04 2.052971506396e-04 5.324459235746e+01 3.367036378178e+04 1.736891426893e-04 5.317300055828e+01 3.671054477273e+04 1.469475742560e-04 5.310630487674e+01 4.032996033573e+04 1.243231974398e-04 5.303818409190e+01 4.499692361949e+04 1.051821202216e-04 5.296361285806e+01 5.132240559186e+04 8.898804601339e-05 5.287978227703e+01 5.991137866923e+04 7.528724764817e-05 5.278643768255e+01 7.121912977097e+04 6.369585480710e-05 5.268658740482e+01 8.532273347144e+04 5.388909870323e-05 5.258584605341e+01 1.018952249999e+05 4.559221267760e-05 5.249126310399e+01 1.201572005034e+05 3.857273375988e-05 5.240853675985e+01 1.391645456226e+05 3.263398949798e-05 5.234168831540e+01 1.578539545145e+05 2.760958756991e-05 5.229073728917e+01 1.755608246764e+05 2.335875378730e-05 5.225326028593e+01 1.920132730862e+05 1.976238787030e-05 5.222547545635e+01 2.076665675001e+05 1.671972648424e-05 5.220316796146e+01 2.239842148093e+05 1.414552004253e-05 5.218318334750e+01 2.429731803338e+05 1.196764417542e-05 5.216233315603e+01 2.682791077346e+05 1.012507894223e-05 5.213805927806e+01 3.045456738731e+05 8.566199168660e-06 5.210961785238e+01 3.567579887800e+05 7.247328007599e-06 5.207565432776e+01 4.300648742505e+05 6.131513196879e-06 5.203029201061e+01 5.380080813171e+05 5.187491727169e-06 5.184349112308e+01 9.817432934456e+05 4.388813911898e-06 0.000000000000e+00 0.000000000000e+00 3.713102317328e-06 0.000000000000e+00 0.000000000000e+00 3.141424789410e-06 0.000000000000e+00 0.000000000000e+00 2.657764010829e-06 0.000000000000e+00 0.000000000000e+00 2.248568726226e-06 0.000000000000e+00 0.000000000000e+00 1.902374061791e-06 0.000000000000e+00 0.000000000000e+00 1.609480301297e-06 0.000000000000e+00 0.000000000000e+00 1.361681118499e-06 0.000000000000e+00 0.000000000000e+00 1.152033651473e-06 0.000000000000e+00 0.000000000000e+00 9.746639768273e-07 0.000000000000e+00 0.000000000000e+00 8.246025335369e-07 0.000000000000e+00 0.000000000000e+00 6.976448852957e-07 0.000000000000e+00 0.000000000000e+00 5.902339202035e-07 0.000000000000e+00 0.000000000000e+00 4.993601872550e-07 0.000000000000e+00 0.000000000000e+00 4.224775772450e-07 0.000000000000e+00 0.000000000000e+00 3.574319856293e-07 0.000000000000e+00 0.000000000000e+00 3.024009586119e-07 0.000000000000e+00 0.000000000000e+00 2.558426314545e-07 0.000000000000e+00 0.000000000000e+00 2.164525283584e-07 0.000000000000e+00 0.000000000000e+00 1.831270135332e-07 0.000000000000e+00 0.000000000000e+00 1.549323694204e-07 0.000000000000e+00 0.000000000000e+00 1.310786357025e-07 0.000000000000e+00 0.000000000000e+00 1.108974761176e-07 0.000000000000e+00 0.000000000000e+00 9.382345294742e-08 0.000000000000e+00 0.000000000000e+00 7.937818452824e-08 0.000000000000e+00 0.000000000000e+00 6.715694190588e-08 0.000000000000e+00 0.000000000000e+00 5.681730910015e-08 0.000000000000e+00 0.000000000000e+00 4.806958926013e-08 0.000000000000e+00 0.000000000000e+00 4.066868790926e-08 0.000000000000e+00 0.000000000000e+00 3.440724586412e-08 0.000000000000e+00 0.000000000000e+00 2.910982942443e-08 0.000000000000e+00 0.000000000000e+00 2.462801505433e-08 0.000000000000e+00 0.000000000000e+00 2.083623083710e-08 0.000000000000e+00 0.000000000000e+00 1.762823818888e-08 0.000000000000e+00 0.000000000000e+00 1.491415525550e-08 0.000000000000e+00 0.000000000000e+00 1.261793859385e-08 0.000000000000e+00 0.000000000000e+00 1.067525257923e-08 0.000000000000e+00 0.000000000000e+00 9.031666843409e-09 0.000000000000e+00 0.000000000000e+00 7.641131239281e-09 0.000000000000e+00 0.000000000000e+00 6.464685603247e-09 0.000000000000e+00 0.000000000000e+00 5.469368165539e-09 0.000000000000e+00 0.000000000000e+00 4.627292024099e-09 0.000000000000e+00 0.000000000000e+00 3.914863806610e-09 0.000000000000e+00 0.000000000000e+00 3.312122629063e-09 0.000000000000e+00 0.000000000000e+00 2.802180829747e-09 0.000000000000e+00 0.000000000000e+00 2.370750809073e-09 0.000000000000e+00 0.000000000000e+00 2.005744718205e-09 0.000000000000e+00 0.000000000000e+00 1.696935780518e-09 0.000000000000e+00 0.000000000000e+00 1.435671756763e-09 0.000000000000e+00 0.000000000000e+00 1.214632525773e-09 0.000000000000e+00 0.000000000000e+00 1.027624988593e-09 0.000000000000e+00 0.000000000000e+00 8.694095496150e-10 0.000000000000e+00 0.000000000000e+00 7.355533130786e-10 0.000000000000e+00 0.000000000000e+00 6.223058817568e-10 0.000000000000e+00 0.000000000000e+00 5.264942779582e-10 0.000000000000e+00 0.000000000000e+00 4.454340427254e-10 0.000000000000e+00 0.000000000000e+00 3.768540223992e-10 0.000000000000e+00 0.000000000000e+00 3.188327352115e-10 0.000000000000e+00 0.000000000000e+00 2.697445350199e-10 0.000000000000e+00 0.000000000000e+00 2.282140637938e-10 0.000000000000e+00 0.000000000000e+00 1.930777166975e-10 0.000000000000e+00 0.000000000000e+00 1.633510400954e-10 0.000000000000e+00 0.000000000000e+00 1.382011490329e-10 0.000000000000e+00 0.000000000000e+00 1.169233913838e-10 0.000000000000e+00 0.000000000000e+00 9.892160483726e-11 0.000000000000e+00 0.000000000000e+00 8.369141356375e-11 0.000000000000e+00 0.000000000000e+00 7.080609656325e-11 0.000000000000e+00 0.000000000000e+00 5.990463175419e-11 0.000000000000e+00 0.000000000000e+00 5.068158082121e-11 0.000000000000e+00 0.000000000000e+00 4.287853141435e-11 0.000000000000e+00 0.000000000000e+00 3.627685692634e-11 0.000000000000e+00 0.000000000000e+00 3.069159099076e-11 0.000000000000e+00 0.000000000000e+00 2.596624507622e-11 0.000000000000e+00 0.000000000000e+00 2.196842397520e-11 0.000000000000e+00 0.000000000000e+00 1.858611634209e-11 0.000000000000e+00 0.000000000000e+00 1.572455634832e-11 0.000000000000e+00 0.000000000000e+00 1.330356852397e-11 0.000000000000e+00 0.000000000000e+00 1.125532139360e-11 0.000000000000e+00 0.000000000000e+00 9.522426967234e-12 0.000000000000e+00 0.000000000000e+00 8.056332838073e-12 0.000000000000e+00 0.000000000000e+00 6.815961836321e-12 0.000000000000e+00 0.000000000000e+00 5.766561125012e-12 0.000000000000e+00 0.000000000000e+00 4.878728491596e-12 0.000000000000e+00 0.000000000000e+00 4.127588553857e-12 0.000000000000e+00 0.000000000000e+00 3.492095798993e-12 0.000000000000e+00 0.000000000000e+00 2.954444928371e-12 0.000000000000e+00 0.000000000000e+00 2.499571986912e-12 0.000000000000e+00 0.000000000000e+00 2.114732299715e-12 0.000000000000e+00 0.000000000000e+00 1.789143390499e-12 0.000000000000e+00 0.000000000000e+00 1.513682877117e-12 0.000000000000e+00 0.000000000000e+00 1.280632879759e-12 0.000000000000e+00 0.000000000000e+00 1.083463780633e-12 0.000000000000e+00 0.000000000000e+00 0.000000 1.000000e+00 1.106410e+00 0.000000e+00 0.010000 1.000996e+00 9.642986e-01 0.000000e+00 0.020000 1.007872e+00 9.985405e-01 0.000000e+00 0.030000 1.026144e+00 1.055623e+00 0.000000e+00 0.040000 1.060833e+00 1.095439e+00 0.000000e+00 0.050000 1.116496e+00 1.129114e+00 0.000000e+00 0.060000 1.197241e+00 1.182457e+00 0.000000e+00 0.070000 1.306512e+00 1.276832e+00 0.000000e+00 0.080000 1.446506e+00 1.421316e+00 0.000000e+00 0.090000 1.617126e+00 1.611698e+00 0.000000e+00 0.100000 1.814524e+00 1.833157e+00 0.000000e+00 0.110000 2.029607e+00 2.064493e+00 0.000000e+00 0.120000 2.247143e+00 2.282529e+00 0.000000e+00 0.130000 2.446382e+00 2.465886e+00 0.000000e+00 0.140000 2.603824e+00 2.597743e+00 0.000000e+00 0.150000 2.697981e+00 2.667449e+00 0.000000e+00 0.160000 2.714808e+00 2.671080e+00 0.000000e+00 0.170000 2.651704e+00 2.611104e+00 0.000000e+00 0.180000 2.518282e+00 2.495385e+00 0.000000e+00 0.190000 2.333563e+00 2.335777e+00 0.000000e+00 0.200000 2.120871e+00 2.146520e+00 0.000000e+00 0.210000 1.902566e+00 1.942646e+00 0.000000e+00 0.220000 1.696364e+00 1.738530e+00 0.000000e+00 0.230000 1.513870e+00 1.546716e+00 0.000000e+00 0.240000 1.360947e+00 1.377054e+00 0.000000e+00 0.250000 1.239061e+00 1.236203e+00 0.000000e+00 0.260000 1.146817e+00 1.127462e+00 0.000000e+00 0.270000 1.081190e+00 1.050914e+00 0.000000e+00 0.280000 1.038307e+00 1.003822e+00 0.000000e+00 0.290000 1.013789e+00 9.812106e-01 0.000000e+00 0.300000 1.002814e+00 9.765644e-01 0.000000e+00 0.310000 1.000072e+00 9.825753e-01 0.000000e+00 0.320000 9.998011e-01 9.918730e-01 0.000000e+00 0.330000 9.960824e-01 9.976840e-01 0.000000e+00 0.340000 9.834513e-01 9.943769e-01 0.000000e+00 0.350000 9.577548e-01 9.778645e-01 0.000000e+00 0.360000 9.169922e-01 9.458439e-01 0.000000e+00 0.370000 8.617940e-01 8.978740e-01 0.000000e+00 0.380000 7.952798e-01 8.352963e-01 0.000000e+00 0.390000 7.222899e-01 7.610186e-01 0.000000e+00 0.400000 6.482631e-01 6.791879e-01 0.000000e+00 0.410000 5.781627e-01 5.947843e-01 0.000000e+00 0.420000 5.157735e-01 5.131709e-01 0.000000e+00 0.430000 4.634795e-01 4.396358e-01 0.000000e+00 0.440000 4.224349e-01 3.789600e-01 0.000000e+00 0.450000 3.929418e-01 3.350419e-01 0.000000e+00 0.460000 3.748639e-01 3.106033e-01 0.000000e+00 0.470000 3.679641e-01 3.069959e-01 0.000000e+00 0.480000 3.721204e-01 3.241184e-01 0.000000e+00 0.490000 3.874083e-01 3.604476e-01 0.000000e+00 0.500000 4.140514e-01 4.131800e-01 0.000000e+00 0.510000 4.522382e-01 4.784696e-01 0.000000e+00 0.520000 5.018122e-01 5.517455e-01 0.000000e+00 0.530000 5.618693e-01 6.280852e-01 0.000000e+00 0.540000 6.303577e-01 7.026154e-01 0.000000e+00 0.550000 7.038367e-01 7.709133e-01 0.000000e+00 0.560000 7.775882e-01 8.293763e-01 0.000000e+00 0.570000 8.462014e-01 8.755349e-01 0.000000e+00 0.580000 9.045780e-01 9.082835e-01 0.000000e+00 0.590000 9.490803e-01 9.280098e-01 0.000000e+00 0.600000 9.784214e-01 9.366098e-01 0.000000e+00 0.610000 9.939735e-01 9.373840e-01 0.000000e+00 0.620000 9.994265e-01 9.348153e-01 0.000000e+00 0.630000 1.000005e+00 9.342407e-01 0.000000e+00 0.640000 1.001584e+00 9.414349e-01 0.000000e+00 0.650000 1.010005e+00 9.621306e-01 0.000000e+00 0.660000 1.030699e+00 1.001509e+00 0.000000e+00 0.670000 1.068607e+00 1.063694e+00 0.000000e+00 0.680000 1.128215e+00 1.151291e+00 0.000000e+00 0.690000 1.213540e+00 1.265006e+00 0.000000e+00 0.700000 1.327870e+00 1.403383e+00 0.000000e+00 0.710000 1.473103e+00 1.562686e+00 0.000000e+00 0.720000 1.648620e+00 1.736961e+00 0.000000e+00 0.730000 1.849790e+00 1.918267e+00 0.000000e+00 0.740000 2.066518e+00 2.097100e+00 0.000000e+00 0.750000 2.282551e+00 2.262987e+00 0.000000e+00 0.760000 2.476419e+00 2.405214e+00 0.000000e+00 0.770000 2.624586e+00 2.513661e+00 0.000000e+00 0.780000 2.706446e+00 2.579673e+00 0.000000e+00 0.790000 2.709671e+00 2.596910e+00 0.000000e+00 0.800000 2.633762e+00 2.562089e+00 0.000000e+00 0.810000 2.490197e+00 2.475550e+00 0.000000e+00 0.820000 2.299110e+00 2.341556e+00 0.000000e+00 0.830000 2.084002e+00 2.168272e+00 0.000000e+00 0.840000 1.866653e+00 1.967356e+00 0.000000e+00 0.850000 1.663794e+00 1.753157e+00 0.000000e+00 0.860000 1.486002e+00 1.541508e+00 0.000000e+00 0.870000 1.338291e+00 1.348185e+00 0.000000e+00 0.880000 1.221545e+00 1.187126e+00 0.000000e+00 0.890000 1.134018e+00 1.068584e+00 0.000000e+00 0.900000 1.072503e+00 9.974160e-01 0.000000e+00 0.910000 1.033025e+00 9.718047e-01 0.000000e+00 0.920000 1.011135e+00 9.827411e-01 0.000000e+00 0.930000 1.001930e+00 1.014613e+00 0.000000e+00 0.940000 1.000015e+00 1.047290e+00 0.000000e+00 0.950000 9.995757e-01 1.060023e+00 0.000000e+00 0.960000 9.947162e-01 1.037409e+00 0.000000e+00 0.970000 9.801295e-01 9.774992e-01 0.000000e+00 0.980000 9.519710e-01 9.018499e-01 0.000000e+00 0.990000 9.086638e-01 8.669326e-01 0.000000e+00 gsl/doc/examples/matrix.c0000644000175000017500000000066513536674414013774 0ustar eddedd#include #include int main (void) { int i, j; gsl_matrix * m = gsl_matrix_alloc (10, 3); for (i = 0; i < 10; i++) for (j = 0; j < 3; j++) gsl_matrix_set (m, i, j, 0.23 + 100*i + j); for (i = 0; i < 100; i++) /* OUT OF RANGE ERROR */ for (j = 0; j < 3; j++) printf ("m(%d,%d) = %g\n", i, j, gsl_matrix_get (m, i, j)); gsl_matrix_free (m); return 0; } gsl/doc/examples/ntupler.c0000644000175000017500000000250113536674414014150 0ustar eddedd#include #include #include struct data { double x; double y; double z; }; int sel_func (void *ntuple_data, void *params); double val_func (void *ntuple_data, void *params); int main (void) { struct data ntuple_row; gsl_ntuple *ntuple = gsl_ntuple_open ("test.dat", &ntuple_row, sizeof (ntuple_row)); double lower = 1.5; gsl_ntuple_select_fn S; gsl_ntuple_value_fn V; gsl_histogram *h = gsl_histogram_alloc (100); gsl_histogram_set_ranges_uniform(h, 0.0, 10.0); S.function = &sel_func; S.params = &lower; V.function = &val_func; V.params = 0; gsl_ntuple_project (h, ntuple, &V, &S); gsl_histogram_fprintf (stdout, h, "%f", "%f"); gsl_histogram_free (h); gsl_ntuple_close (ntuple); return 0; } int sel_func (void *ntuple_data, void *params) { struct data * data = (struct data *) ntuple_data; double x, y, z, E2, scale; scale = *(double *) params; x = data->x; y = data->y; z = data->z; E2 = x * x + y * y + z * z; return E2 > scale; } double val_func (void *ntuple_data, void *params) { (void)(params); /* avoid unused parameter warning */ struct data * data = (struct data *) ntuple_data; double x, y, z; x = data->x; y = data->y; z = data->z; return x * x + y * y + z * z; } gsl/doc/examples/eigen_nonsymm.txt0000644000175000017500000000074013536674414015726 0ustar eddeddeigenvalue = -6.41391 + 0i eigenvector = 0.0998822 + 0i 0.111251 + 0i -0.292501 + 0i -0.944505 + 0i eigenvalue = 5.54555 + 3.08545i eigenvector = 0.0430757 + 0.00968662i -0.0709124 + 0.138917i 0.516595 + -0.0160059i 0.839574 + 0.0413888i eigenvalue = 5.54555 + -3.08545i eigenvector = 0.0430757 + -0.00968662i -0.0709124 + -0.138917i 0.516595 + 0.0160059i 0.839574 + -0.0413888i eigenvalue = 2.3228 + 0i eigenvector = -0.144933 + 0i 0.356601 + 0i 0.919369 + 0i 0.0811836 + 0i gsl/doc/examples/randpoisson2.txt0000644000175000017500000000002513536674414015474 0ustar eddedd 4 5 6 3 3 1 4 2 5 5 gsl/doc/examples/diff.c0000644000175000017500000000126313536674414013373 0ustar eddedd#include #include #include double f (double x, void * params) { (void)(params); /* avoid unused parameter warning */ return pow (x, 1.5); } int main (void) { gsl_function F; double result, abserr; F.function = &f; F.params = 0; printf ("f(x) = x^(3/2)\n"); gsl_deriv_central (&F, 2.0, 1e-8, &result, &abserr); printf ("x = 2.0\n"); printf ("f'(x) = %.10f +/- %.10f\n", result, abserr); printf ("exact = %.10f\n\n", 1.5 * sqrt(2.0)); gsl_deriv_forward (&F, 0.0, 1e-8, &result, &abserr); printf ("x = 0.0\n"); printf ("f'(x) = %.10f +/- %.10f\n", result, abserr); printf ("exact = %.10f\n", 0.0); return 0; } gsl/doc/examples/multiminfn.c0000644000175000017500000000153213536674414014644 0ustar eddedd/* Paraboloid centered on (p[0],p[1]), with scale factors (p[2],p[3]) and minimum p[4] */ double my_f (const gsl_vector *v, void *params) { double x, y; double *p = (double *)params; x = gsl_vector_get(v, 0); y = gsl_vector_get(v, 1); return p[2] * (x - p[0]) * (x - p[0]) + p[3] * (y - p[1]) * (y - p[1]) + p[4]; } /* The gradient of f, df = (df/dx, df/dy). */ void my_df (const gsl_vector *v, void *params, gsl_vector *df) { double x, y; double *p = (double *)params; x = gsl_vector_get(v, 0); y = gsl_vector_get(v, 1); gsl_vector_set(df, 0, 2.0 * p[2] * (x - p[0])); gsl_vector_set(df, 1, 2.0 * p[3] * (y - p[1])); } /* Compute both f and df together. */ void my_fdf (const gsl_vector *x, void *params, double *f, gsl_vector *df) { *f = my_f(x, params); my_df(x, params, df); } gsl/doc/examples/cheb.c0000644000175000017500000000124213536674414013361 0ustar eddedd#include #include #include double f (double x, void *p) { (void)(p); /* avoid unused parameter warning */ if (x < 0.5) return 0.25; else return 0.75; } int main (void) { int i, n = 10000; gsl_cheb_series *cs = gsl_cheb_alloc (40); gsl_function F; F.function = f; F.params = 0; gsl_cheb_init (cs, &F, 0.0, 1.0); for (i = 0; i < n; i++) { double x = i / (double)n; double r10 = gsl_cheb_eval_n (cs, 10, x); double r40 = gsl_cheb_eval (cs, x); printf ("%g %g %g %g\n", x, GSL_FN_EVAL (&F, x), r10, r40); } gsl_cheb_free (cs); return 0; } gsl/doc/examples/diff.txt0000644000175000017500000000022613536674414013766 0ustar eddeddf(x) = x^(3/2) x = 2.0 f'(x) = 2.1213203120 +/- 0.0000005006 exact = 2.1213203436 x = 0.0 f'(x) = 0.0000000160 +/- 0.0000000339 exact = 0.0000000000 gsl/doc/examples/integration2a.txt0000644000175000017500000000024313536674414015623 0ustar eddeddm = 10 intervals = 5 result = 47.468529694563351029 exact result = 54.115231635459025483 actual error = -6.646701940895674454 gsl/doc/examples/interp2d.c0000644000175000017500000000273213536674414014214 0ustar eddedd#include #include #include #include #include int main() { const gsl_interp2d_type *T = gsl_interp2d_bilinear; const size_t N = 100; /* number of points to interpolate */ const double xa[] = { 0.0, 1.0 }; /* define unit square */ const double ya[] = { 0.0, 1.0 }; const size_t nx = sizeof(xa) / sizeof(double); /* x grid points */ const size_t ny = sizeof(ya) / sizeof(double); /* y grid points */ double *za = malloc(nx * ny * sizeof(double)); gsl_spline2d *spline = gsl_spline2d_alloc(T, nx, ny); gsl_interp_accel *xacc = gsl_interp_accel_alloc(); gsl_interp_accel *yacc = gsl_interp_accel_alloc(); size_t i, j; /* set z grid values */ gsl_spline2d_set(spline, za, 0, 0, 0.0); gsl_spline2d_set(spline, za, 0, 1, 1.0); gsl_spline2d_set(spline, za, 1, 1, 0.5); gsl_spline2d_set(spline, za, 1, 0, 1.0); /* initialize interpolation */ gsl_spline2d_init(spline, xa, ya, za, nx, ny); /* interpolate N values in x and y and print out grid for plotting */ for (i = 0; i < N; ++i) { double xi = i / (N - 1.0); for (j = 0; j < N; ++j) { double yj = j / (N - 1.0); double zij = gsl_spline2d_eval(spline, xi, yj, xacc, yacc); printf("%f %f %f\n", xi, yj, zij); } printf("\n"); } gsl_spline2d_free(spline); gsl_interp_accel_free(xacc); gsl_interp_accel_free(yacc); free(za); return 0; } gsl/doc/examples/siman_tsp.txt0000644000175000017500000163671013536674414015071 0ustar eddedd# initial order of cities: # "Santa Fe" # "Phoenix" # "Albuquerque" # "Clovis" # "Durango" # "Dallas" # "Tesuque" # "Grants" # "Los Alamos" # "Las Cruces" # "Cortez" # "Gallup" # distance matrix is: # 0.00000000 608.77061959 87.03271377 287.59290063 248.16351027 903.12120984 10.37400305 181.23944205 37.85681473 379.05414878 299.70633436 253.02812978 # 608.77061959 0.00000000 530.63020490 823.86536910 564.78721117 1426.18240636 614.98206049 427.84327434 590.43655018 513.42812109 528.84796530 376.39544061 # 87.03271377 530.63020490 0.00000000 322.40876207 266.24411451 944.83559077 96.21014120 111.05985737 91.04048654 309.58702367 304.12839735 197.53825393 # 287.59290063 823.86536910 322.40876207 0.00000000 529.09045005 622.42730884 290.18965531 431.91179848 324.98308262 403.01862798 584.85531083 519.94358387 # 248.16351027 564.78721117 266.24411451 529.09045005 0.00000000 1127.31442708 242.88234809 238.12176595 210.80398253 560.00230509 63.17762200 211.78598592 # 903.12120984 1426.18240636 944.83559077 622.42730884 1127.31442708 0.00000000 903.73819055 1054.05003294 938.78535660 937.76850712 1187.93791188 1142.36738376 # 10.37400305 614.98206049 96.21014120 290.18965531 242.88234809 903.73819055 0.00000000 187.17569512 35.11270533 389.40890226 295.64628393 256.48386739 # 181.23944205 427.84327434 111.05985737 431.91179848 238.12176595 1054.05003294 187.17569512 0.00000000 163.51214736 328.22512709 253.62545891 91.47762010 # 37.85681473 590.43655018 91.04048654 324.98308262 210.80398253 938.78535660 35.11270533 163.51214736 0.00000000 397.45511196 261.85461811 226.03623935 # 379.05414878 513.42812109 309.58702367 403.01862798 560.00230509 937.76850712 389.40890226 328.22512709 397.45511196 0.00000000 581.64556257 398.22247415 # 299.70633436 528.84796530 304.12839735 584.85531083 63.17762200 1187.93791188 295.64628393 253.62545891 261.85461811 581.64556257 0.00000000 204.11747465 # 253.02812978 376.39544061 197.53825393 519.94358387 211.78598592 1142.36738376 256.48386739 91.47762010 226.03623935 398.22247415 204.11747465 0.00000000 # initial coordinates of cities (longitude and latitude) ###initial_city_coord: -105.95 35.68 "Santa Fe" ###initial_city_coord: -112.07 33.54 "Phoenix" ###initial_city_coord: -106.62 35.12 "Albuquerque" ###initial_city_coord: -103.2 34.41 "Clovis" ###initial_city_coord: -107.87 37.29 "Durango" ###initial_city_coord: -96.77 32.79 "Dallas" ###initial_city_coord: -105.92 35.77 "Tesuque" ###initial_city_coord: -107.84 35.15 "Grants" ###initial_city_coord: -106.28 35.89 "Los Alamos" ###initial_city_coord: -106.76 32.34 "Las Cruces" ###initial_city_coord: -108.58 37.35 "Cortez" ###initial_city_coord: -108.74 35.52 "Gallup" ###initial_city_coord: -105.95 35.68 "Santa Fe" #-iter #-evals temperature position energy 0 2001 5000 [ 0 3 2 6 9 10 7 1 11 4 8 5 ] 4999.63 3882.38 1 4001 4990.02 [ 0 1 6 9 10 5 4 3 2 11 7 8 ] 5851.94 3823.86 2 6001 4980.06 [ 0 2 9 1 10 5 3 7 11 8 6 4 ] 4524.85 3823.86 3 8001 4970.12 [ 0 9 5 7 3 8 6 4 11 1 2 10 ] 5128.41 3823.86 4 10001 4960.2 [ 0 2 4 8 10 3 6 11 1 5 9 7 ] 5207.28 3763.11 5 12001 4950.3 [ 0 11 6 3 1 10 5 4 8 2 9 7 ] 5588.56 3763.11 6 14001 4940.42 [ 0 10 5 6 4 2 1 8 7 11 3 9 ] 5578.58 3763.11 7 16001 4930.56 [ 0 9 2 1 8 3 7 6 4 5 10 11 ] 5769.06 3763.11 8 18001 4920.72 [ 0 8 11 9 3 5 1 2 7 4 6 10 ] 4831.79 3763.11 9 20001 4910.89 [ 0 10 4 5 3 1 8 7 2 9 11 6 ] 4776.17 3598.05 10 22001 4901.09 [ 0 4 6 9 10 5 3 7 1 8 2 11 ] 5264.26 3598.05 11 24001 4891.31 [ 0 10 5 9 7 11 3 6 2 1 8 4 ] 5331.49 3598.05 12 26001 4881.55 [ 0 3 9 2 1 7 4 8 6 11 10 5 ] 4994.37 3598.05 13 28001 4871.8 [ 0 3 7 9 11 10 5 4 8 1 6 2 ] 5564.79 3598.05 14 30001 4862.08 [ 0 10 1 7 8 6 2 3 9 5 4 11 ] 4806.56 3598.05 15 32001 4852.37 [ 0 6 5 7 3 8 11 10 4 2 1 9 ] 4907.75 3598.05 16 34001 4842.69 [ 0 6 5 9 11 10 2 3 1 7 8 4 ] 4954.95 3598.05 17 36001 4833.02 [ 0 2 3 11 8 10 5 6 9 7 1 4 ] 5467.38 3598.05 18 38001 4823.37 [ 0 3 6 11 2 9 8 5 7 10 1 4 ] 5327.11 3598.05 19 40001 4813.75 [ 0 9 10 4 11 5 1 2 7 6 8 3 ] 5280.77 3598.05 20 42001 4804.14 [ 0 3 7 8 1 6 10 2 11 4 9 5 ] 5498.43 3598.05 21 44001 4794.55 [ 0 7 3 9 1 4 6 10 2 11 5 8 ] 5253.59 3598.05 22 46001 4784.98 [ 0 3 7 10 1 8 2 6 5 4 9 11 ] 5521.97 3598.05 23 48001 4775.43 [ 0 5 1 4 11 2 8 3 9 10 6 7 ] 5368.16 3598.05 24 50001 4765.9 [ 0 1 4 7 11 9 5 2 6 10 8 3 ] 5050.27 3598.05 25 52001 4756.38 [ 0 4 8 11 7 6 10 5 9 1 3 2 ] 5131.74 3598.05 26 54001 4746.89 [ 0 11 9 6 5 7 8 2 10 3 1 4 ] 5778.8 3598.05 27 56001 4737.42 [ 0 10 11 3 9 1 5 2 8 6 4 7 ] 5099.63 3598.05 28 58001 4727.96 [ 0 1 11 10 3 5 4 6 9 2 8 7 ] 4901.55 3598.05 29 60001 4718.52 [ 0 3 5 8 7 9 2 6 10 11 4 1 ] 4631.45 3598.05 30 62001 4709.1 [ 0 2 11 3 9 7 5 10 4 8 6 1 ] 5310.59 3598.05 31 64001 4699.71 [ 0 4 7 8 3 2 5 1 11 9 10 6 ] 5330.49 3598.05 32 66001 4690.32 [ 0 4 3 6 8 5 1 11 10 7 9 2 ] 5026.51 3598.05 33 68001 4680.96 [ 0 8 9 2 5 6 11 1 7 10 4 3 ] 4787.68 3598.05 34 70001 4671.62 [ 0 4 11 7 9 6 3 8 1 5 2 10 ] 5449.52 3598.05 35 72001 4662.3 [ 0 2 11 3 8 6 4 10 7 9 5 1 ] 5025.24 3598.05 36 74001 4652.99 [ 0 11 2 6 7 10 3 1 9 4 5 8 ] 5573.69 3598.05 37 76001 4643.7 [ 0 3 5 1 2 6 11 4 9 7 10 8 ] 4872.88 3598.05 38 78001 4634.43 [ 0 1 6 7 5 3 4 2 10 11 8 9 ] 5393.53 3598.05 39 80001 4625.18 [ 0 6 4 8 2 11 10 3 5 7 1 9 ] 4538.41 3598.05 40 82001 4615.95 [ 0 8 3 10 11 9 6 1 4 5 7 2 ] 5498.67 3598.05 41 84001 4606.74 [ 0 3 8 10 2 7 1 5 6 4 9 11 ] 5501.52 3598.05 42 86001 4597.54 [ 0 2 10 5 9 1 3 8 6 11 7 4 ] 5048.5 3598.05 43 88001 4588.37 [ 0 8 4 10 5 9 3 1 2 7 11 6 ] 4664.45 3598.05 44 90001 4579.21 [ 0 3 2 9 7 6 5 4 11 8 10 1 ] 5303.34 3598.05 45 92001 4570.07 [ 0 1 2 7 6 9 3 10 8 11 5 4 ] 5820.66 3598.05 46 94001 4560.94 [ 0 2 1 3 7 10 8 11 5 9 6 4 ] 5575.55 3598.05 47 96001 4551.84 [ 0 1 2 9 3 11 7 5 4 6 10 8 ] 5483.03 3598.05 48 98001 4542.76 [ 0 5 9 11 10 4 1 2 3 7 6 8 ] 4616.29 3598.05 49 100001 4533.69 [ 0 11 10 7 5 8 1 9 6 2 3 4 ] 5392.75 3598.05 50 102001 4524.64 [ 0 6 9 4 1 5 8 3 10 11 2 7 ] 5493.33 3598.05 51 104001 4515.61 [ 0 4 9 1 8 3 5 6 2 11 10 7 ] 4695.91 3598.05 52 106001 4506.59 [ 0 6 7 5 1 3 9 11 8 2 10 4 ] 5235.43 3598.05 53 108001 4497.6 [ 0 5 6 10 2 3 8 9 11 4 7 1 ] 5336.23 3598.05 54 110001 4488.62 [ 0 6 5 11 8 4 9 7 10 2 3 1 ] 5694.35 3598.05 55 112001 4479.66 [ 0 8 11 9 3 4 1 2 10 7 6 5 ] 5241.43 3598.05 56 114001 4470.72 [ 0 10 1 4 7 6 9 2 3 5 11 8 ] 4868.73 3598.05 57 116001 4461.8 [ 0 5 11 6 4 9 1 10 2 8 3 7 ] 5480.44 3598.05 58 118001 4452.89 [ 0 4 10 6 1 5 7 8 2 3 9 11 ] 5333.43 3598.05 59 120001 4444 [ 0 11 3 7 2 4 9 5 1 8 6 10 ] 5727.04 3598.05 60 122001 4435.13 [ 0 10 11 7 5 1 2 4 8 9 3 6 ] 5184.25 3598.05 61 124001 4426.28 [ 0 1 10 8 11 6 7 5 4 3 2 9 ] 5790.67 3598.05 62 126001 4417.45 [ 0 10 6 1 8 11 7 4 2 9 3 5 ] 4860.81 3598.05 63 128001 4408.63 [ 0 4 10 5 11 3 7 1 2 9 8 6 ] 5304.5 3598.05 64 130001 4399.83 [ 0 11 4 10 3 8 7 9 5 2 1 6 ] 4968.16 3598.05 65 132001 4391.05 [ 0 4 7 10 11 3 6 1 2 9 8 5 ] 5448.72 3598.05 66 134001 4382.28 [ 0 6 4 2 11 1 8 10 7 9 5 3 ] 4375.36 3598.05 67 136001 4373.54 [ 0 3 5 6 2 8 1 10 7 11 9 4 ] 4671.78 3598.05 68 138001 4364.81 [ 0 5 1 4 6 7 3 8 10 2 11 9 ] 5621.84 3598.05 69 140001 4356.09 [ 0 4 11 6 5 1 10 9 3 2 7 8 ] 5194.7 3598.05 70 142001 4347.4 [ 0 8 2 10 1 4 6 5 7 3 11 9 ] 5456.46 3598.05 71 144001 4338.72 [ 0 11 8 3 6 4 1 10 9 5 7 2 ] 5202.31 3598.05 72 146001 4330.06 [ 0 6 7 8 11 9 1 4 2 10 3 5 ] 4744.31 3598.05 73 148001 4321.42 [ 0 4 11 1 7 2 10 8 6 9 5 3 ] 4213.54 3598.05 74 150001 4312.79 [ 0 2 9 4 3 1 11 5 7 6 10 8 ] 5664.92 3598.05 75 152001 4304.18 [ 0 11 3 6 1 10 4 8 5 9 7 2 ] 4883.84 3598.05 76 154001 4295.59 [ 0 6 7 11 1 9 5 4 3 8 10 2 ] 4751.02 3598.05 77 156001 4287.02 [ 0 2 9 6 7 4 1 3 8 5 11 10 ] 5509.94 3598.05 78 158001 4278.46 [ 0 5 7 11 10 3 2 6 1 8 4 9 ] 5611.52 3598.05 79 160001 4269.92 [ 0 7 1 2 5 9 10 8 11 6 3 4 ] 5415.78 3598.05 80 162001 4261.4 [ 0 6 5 9 2 8 10 1 3 4 11 7 ] 4880.67 3598.05 81 164001 4252.89 [ 0 1 11 8 9 4 2 5 6 3 7 10 ] 5558.91 3598.05 82 166001 4244.41 [ 0 3 8 2 10 1 9 7 5 6 11 4 ] 5052.47 3598.05 83 168001 4235.93 [ 0 4 5 6 10 11 2 9 3 8 7 1 ] 5214.23 3598.05 84 170001 4227.48 [ 0 5 3 4 7 10 9 6 1 11 8 2 ] 4912.93 3598.05 85 172001 4219.04 [ 0 11 4 9 7 6 2 10 5 1 3 8 ] 5741.38 3598.05 86 174001 4210.62 [ 0 7 11 6 8 5 1 4 3 2 9 10 ] 5536.51 3598.05 87 176001 4202.21 [ 0 4 1 9 8 2 10 7 11 6 5 3 ] 4534.35 3598.05 88 178001 4193.83 [ 0 10 1 6 2 9 3 5 7 11 4 8 ] 4480.75 3598.05 89 180001 4185.46 [ 0 5 10 1 6 8 11 3 4 9 7 2 ] 5631.39 3598.05 90 182001 4177.1 [ 0 5 6 3 7 11 10 8 1 2 4 9 ] 5412.78 3598.05 91 184001 4168.76 [ 0 4 1 7 6 8 2 5 10 3 11 9 ] 5568.97 3598.05 92 186001 4160.44 [ 0 5 3 6 10 8 2 11 1 9 4 7 ] 4531 3598.05 93 188001 4152.14 [ 0 10 1 9 5 2 6 3 11 7 8 4 ] 4844.89 3598.05 94 190001 4143.85 [ 0 3 6 10 8 9 7 1 2 11 4 5 ] 5259.2 3598.05 95 192001 4135.58 [ 0 4 10 2 6 9 1 11 8 3 5 7 ] 4399.65 3598.05 96 194001 4127.33 [ 0 10 6 5 2 9 3 4 11 7 8 1 ] 5351.61 3598.05 97 196001 4119.09 [ 0 2 8 3 6 4 10 7 1 11 9 5 ] 4396.28 3598.05 98 198001 4110.87 [ 0 3 7 8 5 10 9 4 2 1 6 11 ] 6072.76 3598.05 99 200001 4102.66 [ 0 11 8 7 4 10 3 6 9 5 2 1 ] 5230.33 3598.05 100 202001 4094.47 [ 0 4 3 1 5 10 11 6 7 8 2 9 ] 5806.21 3598.05 101 204001 4086.3 [ 0 9 4 7 8 11 2 3 6 1 10 5 ] 5611.75 3598.05 102 206001 4078.14 [ 0 5 3 2 1 6 10 11 7 4 9 8 ] 4818.25 3598.05 103 208001 4070 [ 0 1 5 9 8 2 4 7 6 10 3 11 ] 5806.23 3598.05 104 210001 4061.88 [ 0 6 2 4 1 3 7 9 5 8 10 11 ] 5117.17 3598.05 105 212001 4053.77 [ 0 1 4 5 10 11 3 2 6 7 8 9 ] 5758.69 3598.05 106 214001 4045.68 [ 0 5 8 4 10 3 6 11 7 1 2 9 ] 4986.01 3598.05 107 216001 4037.6 [ 0 1 7 11 3 8 2 4 9 6 5 10 ] 5671.1 3598.05 108 218001 4029.55 [ 0 9 4 7 1 2 8 3 10 5 6 11 ] 5737.72 3598.05 109 220001 4021.5 [ 0 10 7 3 9 11 8 4 5 2 6 1 ] 5615.44 3598.05 110 222001 4013.48 [ 0 10 8 5 4 9 1 3 7 11 6 2 ] 5488.07 3598.05 111 224001 4005.46 [ 0 11 6 10 1 7 2 4 3 9 5 8 ] 4985.67 3598.05 112 226001 3997.47 [ 0 8 9 1 3 2 5 10 4 11 6 7 ] 5127.65 3598.05 113 228001 3989.49 [ 0 10 9 5 1 7 11 2 3 4 6 8 ] 5129.51 3598.05 114 230001 3981.53 [ 0 1 7 11 4 10 3 8 2 9 5 6 ] 4565.4 3598.05 115 232001 3973.58 [ 0 10 3 11 5 2 1 7 4 6 8 9 ] 5742.81 3598.05 116 234001 3965.65 [ 0 5 6 4 10 8 7 1 3 11 9 2 ] 5104.78 3598.05 117 236001 3957.73 [ 0 5 9 3 10 8 4 6 1 2 11 7 ] 5160.17 3598.05 118 238001 3949.83 [ 0 11 5 9 6 4 1 8 7 2 10 3 ] 5571.83 3598.05 119 240001 3941.95 [ 0 7 10 3 9 4 2 5 1 11 6 8 ] 5325.85 3598.05 120 242001 3934.08 [ 0 1 6 3 2 11 8 4 10 5 7 9 ] 5483.17 3598.05 121 244001 3926.23 [ 0 1 3 9 6 4 7 5 2 10 8 11 ] 5750 3598.05 122 246001 3918.39 [ 0 11 3 10 2 6 8 5 9 7 4 1 ] 5409.74 3598.05 123 248001 3910.57 [ 0 2 3 11 8 7 10 4 5 6 1 9 ] 5174.25 3598.05 124 250001 3902.77 [ 0 7 4 1 10 9 3 2 11 6 8 5 ] 5151.11 3598.05 125 252001 3894.98 [ 0 11 10 2 6 9 8 7 5 3 1 4 ] 5121.15 3598.05 126 254001 3887.2 [ 0 9 2 11 5 3 6 4 10 7 8 1 ] 4863.57 3555.95 127 256001 3879.44 [ 0 10 9 1 3 7 2 11 5 4 8 6 ] 5485.13 3555.95 128 258001 3871.7 [ 0 1 4 5 8 9 3 11 6 10 7 2 ] 5563.92 3555.95 129 260001 3863.97 [ 0 9 1 6 10 5 8 2 7 3 4 11 ] 5557.75 3555.95 130 262001 3856.26 [ 0 9 1 5 4 10 11 6 8 7 3 2 ] 5009.74 3555.95 131 264001 3848.56 [ 0 4 3 11 9 2 10 5 8 6 1 7 ] 5695.04 3555.95 132 266001 3840.88 [ 0 1 4 6 9 5 11 10 8 2 7 3 ] 5273.56 3555.95 133 268001 3833.21 [ 0 7 10 2 1 9 4 3 5 11 8 6 ] 4908.46 3555.95 134 270001 3825.56 [ 0 7 6 4 5 10 1 2 9 11 8 3 ] 5532.45 3555.95 135 272001 3817.93 [ 0 11 4 2 9 8 7 1 3 10 5 6 ] 5540.23 3555.95 136 274001 3810.31 [ 0 4 5 3 9 1 7 8 11 2 10 6 ] 4539.43 3555.95 137 276001 3802.7 [ 0 7 9 11 5 2 8 10 1 6 3 4 ] 5559.06 3555.95 138 278001 3795.11 [ 0 1 2 8 9 11 3 5 10 6 4 7 ] 5314.32 3555.95 139 280001 3787.54 [ 0 8 4 1 9 7 11 5 6 3 10 2 ] 5058.89 3555.95 140 282001 3779.98 [ 0 10 3 11 2 7 1 8 9 4 6 5 ] 5738.58 3555.95 141 284001 3772.43 [ 0 11 5 8 1 10 3 6 7 2 4 9 ] 5832.05 3555.95 142 286001 3764.9 [ 0 6 4 11 9 1 7 2 10 8 3 5 ] 4332.11 3555.95 143 288001 3757.39 [ 0 5 7 8 2 10 6 1 3 11 4 9 ] 5921.13 3555.95 144 290001 3749.89 [ 0 6 9 11 10 1 4 5 8 2 3 7 ] 5188.46 3555.95 145 292001 3742.4 [ 0 9 3 11 8 6 5 2 10 4 1 7 ] 4952.92 3555.95 146 294001 3734.93 [ 0 10 1 9 2 5 7 3 11 4 8 6 ] 5070.39 3555.95 147 296001 3727.48 [ 0 1 11 3 10 9 4 2 5 6 8 7 ] 5726.3 3555.95 148 298001 3720.04 [ 0 3 11 6 1 2 9 10 8 5 7 4 ] 5841.84 3555.95 149 300001 3712.61 [ 0 2 3 10 6 5 9 4 11 1 7 8 ] 4908.85 3555.95 150 302001 3705.2 [ 0 1 2 10 4 3 8 11 7 5 6 9 ] 5404.55 3555.95 151 304001 3697.81 [ 0 6 5 8 7 4 11 2 3 10 9 1 ] 5274.96 3555.95 152 306001 3690.42 [ 0 9 3 10 5 6 1 4 7 11 2 8 ] 5294.41 3555.95 153 308001 3683.06 [ 0 5 1 10 8 7 3 2 6 9 11 4 ] 5381.63 3555.95 154 310001 3675.71 [ 0 7 1 2 4 3 6 10 8 9 11 5 ] 5623.9 3555.95 155 312001 3668.37 [ 0 11 9 3 1 4 6 5 8 10 2 7 ] 5386.61 3555.95 156 314001 3661.05 [ 0 2 8 10 7 4 5 9 1 3 11 6 ] 5120.85 3555.95 157 316001 3653.74 [ 0 7 2 3 5 1 11 6 10 9 4 8 ] 4982.15 3555.95 158 318001 3646.45 [ 0 10 3 11 7 2 9 4 1 8 5 6 ] 5484.75 3555.95 159 320001 3639.17 [ 0 5 3 10 11 7 4 9 8 6 2 1 ] 4872.3 3555.95 160 322001 3631.91 [ 0 7 8 6 9 3 2 4 5 10 11 1 ] 5265.48 3555.95 161 324001 3624.66 [ 0 1 9 5 10 4 11 2 3 6 8 7 ] 4712.87 3555.95 162 326001 3617.42 [ 0 6 2 3 5 9 4 10 8 1 11 7 ] 4113.77 3555.95 163 328001 3610.2 [ 0 3 5 8 10 9 1 2 4 6 7 11 ] 4777.17 3555.95 164 330001 3603 [ 0 1 8 2 4 3 9 6 5 11 10 7 ] 5563.1 3555.95 165 332001 3595.8 [ 0 8 4 9 1 3 11 5 10 7 6 2 ] 5620.25 3555.95 166 334001 3588.63 [ 0 6 4 10 7 11 9 8 3 1 5 2 ] 5064.11 3555.95 167 336001 3581.46 [ 0 7 5 8 3 6 2 4 11 9 10 1 ] 5480.97 3555.95 168 338001 3574.31 [ 0 11 8 10 6 4 9 1 7 5 2 3 ] 5389.61 3555.95 169 340001 3567.18 [ 0 3 4 10 8 11 9 7 5 6 2 1 ] 5287.6 3555.95 170 342001 3560.06 [ 0 4 2 8 10 6 3 11 5 7 9 1 ] 5619.92 3555.95 171 344001 3552.95 [ 0 10 7 4 9 11 6 1 2 8 5 3 ] 5091.62 3555.95 172 346001 3545.86 [ 0 9 6 3 5 8 10 2 4 7 1 11 ] 4747.48 3555.95 173 348001 3538.79 [ 0 7 1 11 8 9 6 2 4 10 5 3 ] 4521.97 3555.95 174 350001 3531.72 [ 0 11 7 3 10 5 9 4 2 1 8 6 ] 5479.78 3555.95 175 352001 3524.67 [ 0 1 9 7 2 6 5 11 4 8 3 10 ] 5335.93 3555.95 176 354001 3517.64 [ 0 10 7 5 11 3 4 2 9 1 6 8 ] 5575.99 3555.95 177 356001 3510.62 [ 0 7 2 4 1 6 8 5 9 3 11 10 ] 5076.77 3555.95 178 358001 3503.61 [ 0 11 3 1 6 5 2 4 7 9 10 8 ] 5774.34 3555.95 179 360001 3496.62 [ 0 2 6 10 1 9 11 4 8 3 7 5 ] 5056.04 3555.95 180 362001 3489.64 [ 0 11 6 10 8 3 1 2 5 4 7 9 ] 5764.04 3555.95 181 364001 3482.67 [ 0 5 3 9 10 7 4 1 2 8 6 11 ] 4733.04 3555.95 182 366001 3475.72 [ 0 7 10 1 9 4 5 6 2 8 3 11 ] 5353.4 3555.95 183 368001 3468.78 [ 0 6 7 8 5 9 2 11 1 4 10 3 ] 4621.55 3555.95 184 370001 3461.86 [ 0 3 2 5 10 9 4 11 1 8 6 7 ] 5466.57 3555.95 185 372001 3454.95 [ 0 3 10 7 11 4 8 1 2 6 9 5 ] 5087.72 3555.95 186 374001 3448.05 [ 0 5 9 8 11 2 10 4 3 7 1 6 ] 5043.43 3555.95 187 376001 3441.17 [ 0 2 4 1 3 10 9 11 5 8 7 6 ] 5748.87 3555.95 188 378001 3434.3 [ 0 8 5 7 1 9 10 2 3 11 4 6 ] 5165.13 3555.95 189 380001 3427.45 [ 0 8 5 4 2 7 1 3 9 11 10 6 ] 5044.35 3555.95 190 382001 3420.6 [ 0 5 7 1 11 8 3 10 9 4 6 2 ] 5465.06 3555.95 191 384001 3413.78 [ 0 9 2 1 8 3 5 4 7 11 6 10 ] 5065.87 3555.95 192 386001 3406.96 [ 0 4 6 2 5 7 1 8 9 10 3 11 ] 5941.35 3555.95 193 388001 3400.16 [ 0 11 8 7 10 5 9 3 6 1 2 4 ] 5375.14 3555.95 194 390001 3393.38 [ 0 8 6 3 5 2 11 9 1 7 4 10 ] 4068.46 3555.95 195 392001 3386.6 [ 0 4 9 7 2 8 3 10 6 11 1 5 ] 5506.16 3555.95 196 394001 3379.84 [ 0 8 5 1 2 9 3 11 4 10 6 7 ] 5105.03 3555.95 197 396001 3373.1 [ 0 3 2 5 7 6 9 4 1 8 10 11 ] 5619.7 3555.95 198 398001 3366.36 [ 0 1 11 8 4 3 5 10 2 9 6 7 ] 5133 3555.95 199 400001 3359.65 [ 0 9 5 4 8 1 11 3 2 10 6 7 ] 5432.32 3555.95 200 402001 3352.94 [ 0 3 10 9 6 8 1 4 2 11 5 7 ] 5875.28 3555.95 201 404001 3346.25 [ 0 4 11 2 7 5 1 3 8 10 6 9 ] 5723.59 3555.95 202 406001 3339.57 [ 0 2 8 4 3 10 1 7 11 6 9 5 ] 5037.77 3555.95 203 408001 3332.9 [ 0 10 1 6 7 3 8 4 11 5 2 9 ] 5586.04 3555.95 204 410001 3326.25 [ 0 6 11 5 4 1 3 9 2 10 8 7 ] 5548.53 3555.95 205 412001 3319.61 [ 0 4 2 7 9 3 5 6 10 11 1 8 ] 4387.33 3555.95 206 414001 3312.98 [ 0 4 10 11 3 7 2 1 9 8 5 6 ] 4872.78 3555.95 207 416001 3306.37 [ 0 11 10 6 4 7 2 3 8 1 9 5 ] 4937 3555.95 208 418001 3299.77 [ 0 10 9 5 8 1 6 3 11 2 4 7 ] 5656.6 3555.95 209 420001 3293.19 [ 0 10 1 8 11 7 4 9 5 6 3 2 ] 5075.77 3555.95 210 422001 3286.61 [ 0 6 1 9 5 2 4 7 3 10 8 11 ] 5283.44 3555.95 211 424001 3280.05 [ 0 3 7 6 9 8 5 10 11 2 4 1 ] 5661.73 3555.95 212 426001 3273.51 [ 0 10 7 1 2 4 9 8 5 6 11 3 ] 5642.05 3555.95 213 428001 3266.97 [ 0 3 1 10 6 4 2 11 7 8 9 5 ] 5135.95 3555.95 214 430001 3260.45 [ 0 11 10 7 5 1 2 6 9 3 8 4 ] 5394.22 3555.95 215 432001 3253.94 [ 0 3 2 1 8 4 7 6 11 10 5 9 ] 5332.53 3555.95 216 434001 3247.45 [ 0 11 3 9 2 6 8 1 5 10 4 7 ] 5304 3555.95 217 436001 3240.97 [ 0 8 3 10 4 2 11 9 5 6 1 7 ] 4938.45 3555.95 218 438001 3234.5 [ 0 8 5 10 11 6 9 4 1 7 3 2 ] 5408.58 3555.95 219 440001 3228.04 [ 0 1 7 8 2 10 5 6 11 3 4 9 ] 5931.55 3555.95 220 442001 3221.6 [ 0 1 3 7 5 11 8 2 4 9 10 6 ] 6091.95 3555.95 221 444001 3215.17 [ 0 2 3 11 6 7 1 10 4 5 8 9 ] 5235.52 3555.95 222 446001 3208.75 [ 0 4 1 8 3 6 9 2 5 7 10 11 ] 5427.21 3555.95 223 448001 3202.34 [ 0 8 2 9 6 3 1 5 11 10 4 7 ] 5197.15 3555.95 224 450001 3195.95 [ 0 9 3 6 8 10 5 2 7 11 4 1 ] 5089.88 3555.95 225 452001 3189.57 [ 0 11 6 10 1 4 3 9 8 5 2 7 ] 5404.28 3555.95 226 454001 3183.21 [ 0 5 1 10 6 8 4 9 3 11 2 7 ] 5372.52 3555.95 227 456001 3176.85 [ 0 8 10 11 6 7 2 9 4 1 5 3 ] 4829.13 3555.95 228 458001 3170.51 [ 0 11 5 1 7 10 3 4 6 8 2 9 ] 5674.67 3555.95 229 460001 3164.18 [ 0 3 9 11 2 10 5 8 4 1 7 6 ] 5118.21 3555.95 230 462001 3157.87 [ 0 2 11 5 6 7 8 3 10 1 9 4 ] 5441.64 3555.95 231 464001 3151.57 [ 0 8 11 1 10 3 4 7 6 9 2 5 ] 5255.33 3555.95 232 466001 3145.27 [ 0 11 7 10 8 6 9 3 5 2 1 4 ] 4598.37 3555.95 233 468001 3139 [ 0 9 5 6 8 11 10 1 2 4 7 3 ] 4969.18 3555.95 234 470001 3132.73 [ 0 1 9 11 3 8 10 7 4 6 5 2 ] 5297.44 3555.95 235 472001 3126.48 [ 0 2 11 5 3 7 10 8 4 9 6 1 ] 5380.73 3555.95 236 474001 3120.24 [ 0 6 7 5 10 1 8 9 4 2 3 11 ] 5877.9 3555.95 237 476001 3114.01 [ 0 3 10 4 7 2 5 6 9 1 8 11 ] 5105.72 3555.95 238 478001 3107.79 [ 0 11 2 7 10 4 5 9 3 1 6 8 ] 4858.35 3555.95 239 480001 3101.59 [ 0 8 7 4 2 9 3 6 10 5 1 11 ] 5247.72 3555.95 240 482001 3095.4 [ 0 3 10 7 9 6 4 8 1 2 11 5 ] 5661.49 3555.95 241 484001 3089.22 [ 0 4 5 8 6 11 9 3 7 10 2 1 ] 5536.17 3555.95 242 486001 3083.06 [ 0 7 9 3 8 2 4 10 1 5 11 6 ] 5022.18 3555.95 243 488001 3076.9 [ 0 9 2 8 5 6 1 11 10 4 7 3 ] 4838.5 3555.95 244 490001 3070.76 [ 0 5 4 9 10 2 6 8 1 11 3 7 ] 5707.46 3555.95 245 492001 3064.63 [ 0 1 10 8 11 6 4 9 2 5 3 7 ] 5174.88 3555.95 246 494001 3058.51 [ 0 10 9 2 1 8 5 3 11 7 6 4 ] 5162.86 3555.95 247 496001 3052.41 [ 0 9 6 5 4 8 10 2 11 7 1 3 ] 5404.62 3555.95 248 498001 3046.32 [ 0 6 1 5 2 3 8 7 4 10 11 9 ] 5089.97 3555.95 249 500001 3040.24 [ 0 1 7 4 9 10 11 5 3 6 8 2 ] 4888.67 3555.95 250 502001 3034.17 [ 0 4 6 1 11 10 2 9 3 5 7 8 ] 4581.12 3555.95 251 504001 3028.11 [ 0 10 3 11 9 8 1 5 2 6 7 4 ] 5931.31 3555.95 252 506001 3022.07 [ 0 6 8 7 10 4 2 3 11 5 9 1 ] 4836.73 3555.95 253 508001 3016.04 [ 0 2 9 7 6 11 8 4 3 1 5 10 ] 5872.13 3555.95 254 510001 3010.02 [ 0 9 7 2 11 5 8 1 6 10 3 4 ] 5960.2 3555.95 255 512001 3004.01 [ 0 2 3 8 6 10 1 4 7 9 11 5 ] 5168.88 3555.95 256 514001 2998.01 [ 0 5 2 3 8 4 1 7 10 6 11 9 ] 5281.82 3555.95 257 516001 2992.03 [ 0 8 11 2 5 4 9 7 3 1 10 6 ] 5512.45 3555.95 258 518001 2986.06 [ 0 5 1 4 8 10 7 9 3 11 6 2 ] 5311.29 3555.95 259 520001 2980.1 [ 0 8 7 4 11 6 1 2 9 5 10 3 ] 5361.11 3555.95 260 522001 2974.15 [ 0 2 7 9 10 11 8 4 1 6 3 5 ] 4744.43 3555.95 261 524001 2968.21 [ 0 4 6 7 3 9 5 1 2 8 11 10 ] 5228.63 3555.95 262 526001 2962.29 [ 0 1 3 10 6 9 8 2 11 7 4 5 ] 5748.62 3555.95 263 528001 2956.37 [ 0 8 2 5 4 7 11 10 1 9 6 3 ] 4744.23 3555.95 264 530001 2950.47 [ 0 6 4 8 7 3 11 1 9 2 10 5 ] 5174.03 3555.95 265 532001 2944.58 [ 0 8 3 4 11 7 9 2 6 10 5 1 ] 5447.75 3555.95 266 534001 2938.71 [ 0 3 8 11 5 9 2 7 6 10 4 1 ] 5058.95 3555.95 267 536001 2932.84 [ 0 5 9 2 1 7 10 3 11 4 8 6 ] 4935.45 3555.95 268 538001 2926.99 [ 0 1 8 6 3 2 5 4 7 11 9 10 ] 5528.24 3555.95 269 540001 2921.14 [ 0 8 5 1 9 10 4 2 7 3 11 6 ] 5157.09 3555.95 270 542001 2915.31 [ 0 9 1 5 3 10 8 2 4 7 11 6 ] 4741.54 3555.95 271 544001 2909.49 [ 0 3 4 5 6 2 7 10 8 9 1 11 ] 5110.79 3555.95 272 546001 2903.69 [ 0 4 5 6 8 3 11 9 1 10 2 7 ] 5196.18 3555.95 273 548001 2897.89 [ 0 4 2 10 6 11 7 8 9 5 3 1 ] 5015.94 3555.95 274 550001 2892.11 [ 0 11 5 1 9 6 2 8 10 3 4 7 ] 5706.83 3555.95 275 552001 2886.33 [ 0 4 5 2 11 10 6 1 3 8 7 9 ] 5652.24 3555.95 276 554001 2880.57 [ 0 6 11 4 5 8 9 7 10 2 1 3 ] 5470.27 3555.95 277 556001 2874.82 [ 0 4 11 3 10 9 5 1 7 8 6 2 ] 5320.06 3555.95 278 558001 2869.09 [ 0 4 1 11 5 7 9 10 6 2 3 8 ] 5372.74 3555.95 279 560001 2863.36 [ 0 2 4 11 10 3 5 8 9 6 1 7 ] 4926.18 3555.95 280 562001 2857.64 [ 0 8 9 2 10 5 3 4 1 7 11 6 ] 4739.45 3555.95 281 564001 2851.94 [ 0 2 8 9 1 11 4 10 5 6 7 3 ] 4738.67 3555.95 282 566001 2846.25 [ 0 9 2 8 4 11 6 3 5 1 7 10 ] 4778.73 3555.95 283 568001 2840.57 [ 0 6 7 4 10 11 8 5 9 1 2 3 ] 4459.62 3555.95 284 570001 2834.9 [ 0 2 9 3 1 6 10 4 8 11 7 5 ] 5082.8 3555.95 285 572001 2829.24 [ 0 9 2 5 1 7 10 11 6 3 8 4 ] 5275.87 3555.95 286 574001 2823.59 [ 0 1 11 4 3 9 5 8 10 7 6 2 ] 4891.51 3555.95 287 576001 2817.95 [ 0 7 2 10 8 4 11 5 9 6 3 1 ] 5473.24 3555.95 288 578001 2812.33 [ 0 2 9 10 6 8 5 7 1 3 4 11 ] 5547.47 3555.95 289 580001 2806.72 [ 0 11 1 8 7 10 4 6 5 2 3 9 ] 4896.11 3555.95 290 582001 2801.11 [ 0 6 3 1 10 11 9 2 8 5 4 7 ] 5141.71 3555.95 291 584001 2795.52 [ 0 1 6 11 3 8 2 10 4 5 7 9 ] 5672.15 3555.95 292 586001 2789.94 [ 0 8 11 9 2 10 4 5 6 7 1 3 ] 5096.54 3555.95 293 588001 2784.37 [ 0 6 4 10 11 3 8 5 7 1 9 2 ] 4696.2 3555.95 294 590001 2778.82 [ 0 5 9 1 6 7 3 4 10 11 2 8 ] 4711.21 3555.95 295 592001 2773.27 [ 0 6 11 7 10 5 1 8 9 2 3 4 ] 5623.22 3555.95 296 594001 2767.73 [ 0 4 7 11 9 3 8 10 5 2 6 1 ] 5418.58 3555.95 297 596001 2762.21 [ 0 4 8 6 10 11 9 1 5 3 2 7 ] 4568.81 3555.95 298 598001 2756.7 [ 0 7 6 5 1 8 10 3 11 2 9 4 ] 5970.72 3555.95 299 600001 2751.19 [ 0 9 11 1 4 7 8 5 6 10 3 2 ] 5252.56 3555.95 300 602001 2745.7 [ 0 9 3 2 11 7 8 1 6 10 4 5 ] 5151.69 3555.95 301 604001 2740.22 [ 0 7 9 2 3 8 10 11 4 5 6 1 ] 5399.01 3555.95 302 606001 2734.75 [ 0 5 11 2 3 8 4 9 10 1 6 7 ] 5755.12 3555.95 303 608001 2729.29 [ 0 4 8 6 1 10 2 7 3 9 5 11 ] 5221.19 3555.95 304 610001 2723.85 [ 0 1 7 11 2 6 9 3 5 10 4 8 ] 4336.47 3555.95 305 612001 2718.41 [ 0 9 8 10 4 3 5 6 7 1 2 11 ] 4753.01 3555.95 306 614001 2712.98 [ 0 2 5 3 8 6 7 11 1 4 10 9 ] 4258.1 3555.95 307 616001 2707.57 [ 0 8 6 5 10 2 9 3 7 4 1 11 ] 5045.62 3555.95 308 618001 2702.16 [ 0 11 1 7 10 3 5 9 2 4 8 6 ] 4288.07 3555.95 309 620001 2696.77 [ 0 10 9 5 8 2 1 11 4 6 3 7 ] 5113.98 3555.95 310 622001 2691.39 [ 0 9 2 10 4 3 1 11 6 5 8 7 ] 5229.06 3555.95 311 624001 2686.02 [ 0 2 10 4 11 8 5 6 7 3 1 9 ] 5070.12 3555.95 312 626001 2680.65 [ 0 1 9 6 8 2 5 3 11 7 4 10 ] 4417.45 3555.95 313 628001 2675.3 [ 0 2 9 5 11 6 4 3 1 7 10 8 ] 5310.26 3555.95 314 630001 2669.96 [ 0 5 2 10 7 1 6 3 4 9 8 11 ] 5704.34 3555.95 315 632001 2664.63 [ 0 11 3 6 4 2 8 9 5 7 1 10 ] 5309 3555.95 316 634001 2659.32 [ 0 2 10 5 8 4 9 3 6 1 11 7 ] 5245.99 3555.95 317 636001 2654.01 [ 0 11 5 1 10 8 9 4 6 3 7 2 ] 5732.81 3555.95 318 638001 2648.71 [ 0 3 2 6 9 1 10 8 11 7 4 5 ] 4985.82 3555.95 319 640001 2643.42 [ 0 6 8 1 9 11 10 5 7 4 3 2 ] 5170.33 3555.95 320 642001 2638.15 [ 0 3 5 6 1 9 10 8 11 2 4 7 ] 4894.85 3555.95 321 644001 2632.88 [ 0 3 5 9 1 7 6 8 10 4 2 11 ] 4053.19 3555.95 322 646001 2627.63 [ 0 11 6 10 1 8 4 2 9 7 5 3 ] 5003.37 3555.95 323 648001 2622.38 [ 0 9 11 3 5 8 6 2 10 7 1 4 ] 4788.3 3555.95 324 650001 2617.15 [ 0 1 5 7 11 8 2 6 4 3 9 10 ] 5650.11 3555.95 325 652001 2611.92 [ 0 7 10 8 4 9 3 2 6 11 1 5 ] 5251.35 3555.95 326 654001 2606.71 [ 0 9 1 7 3 6 10 2 5 11 8 4 ] 5414.41 3555.95 327 656001 2601.51 [ 0 6 11 9 5 8 1 2 10 7 3 4 ] 5429.62 3555.95 328 658001 2596.31 [ 0 4 1 7 11 10 9 8 6 5 3 2 ] 4486.21 3555.95 329 660001 2591.13 [ 0 11 3 6 7 5 2 8 10 4 1 9 ] 5122.56 3555.95 330 662001 2585.96 [ 0 4 7 2 1 11 3 8 5 6 9 10 ] 5462.58 3555.95 331 664001 2580.8 [ 0 2 6 4 11 3 8 1 10 5 9 7 ] 5237.29 3555.95 332 666001 2575.65 [ 0 4 10 5 2 6 7 8 9 3 1 11 ] 5144.78 3555.95 333 668001 2570.51 [ 0 2 9 10 6 8 4 1 3 7 5 11 ] 5789.84 3555.95 334 670001 2565.38 [ 0 9 10 11 1 5 8 6 4 3 2 7 ] 5327.97 3555.95 335 672001 2560.26 [ 0 6 2 5 7 10 9 8 11 1 3 4 ] 5541.75 3555.95 336 674001 2555.15 [ 0 2 1 11 7 6 10 4 9 8 3 5 ] 4439.52 3555.95 337 676001 2550.05 [ 0 7 3 5 11 2 9 10 6 1 4 8 ] 5190.79 3555.95 338 678001 2544.96 [ 0 6 10 7 4 8 1 5 3 9 2 11 ] 4810.79 3555.95 339 680001 2539.88 [ 0 6 7 3 4 9 5 10 11 2 1 8 ] 5404.84 3555.95 340 682001 2534.81 [ 0 2 9 11 7 5 10 8 1 6 4 3 ] 5655.15 3555.95 341 684001 2529.75 [ 0 5 6 2 1 4 8 7 9 10 11 3 ] 5294.33 3555.95 342 686001 2524.7 [ 0 6 5 8 4 3 10 1 2 9 11 7 ] 5217.65 3555.95 343 688001 2519.66 [ 0 8 10 2 9 5 6 11 1 7 3 4 ] 5024.82 3555.95 344 690001 2514.63 [ 0 11 1 10 2 7 9 5 3 6 4 8 ] 4243.61 3555.95 345 692001 2509.61 [ 0 8 9 3 5 1 7 10 4 11 6 2 ] 4283.1 3555.95 346 694001 2504.6 [ 0 2 1 7 5 8 11 4 3 9 6 10 ] 5393.03 3555.95 347 696001 2499.6 [ 0 3 5 10 8 1 11 9 6 2 4 7 ] 4896.09 3555.95 348 698001 2494.61 [ 0 1 6 7 8 3 5 11 10 9 2 4 ] 5273.98 3555.95 349 700001 2489.63 [ 0 2 5 7 4 11 9 6 1 8 3 10 ] 5738.42 3555.95 350 702001 2484.66 [ 0 11 6 10 9 2 1 4 8 7 5 3 ] 5130.19 3555.95 351 704001 2479.7 [ 0 9 1 5 7 10 11 3 4 2 6 8 ] 5314.92 3555.95 352 706001 2474.75 [ 0 7 11 9 10 8 5 2 3 4 1 6 ] 5439.7 3555.95 353 708001 2469.81 [ 0 4 11 9 3 2 7 1 6 5 8 10 ] 5141.57 3555.95 354 710001 2464.88 [ 0 9 8 6 7 5 10 1 11 2 4 3 ] 5426.49 3554.01 355 712001 2459.96 [ 0 5 7 4 1 11 6 8 2 9 3 10 ] 5116.28 3554.01 356 714001 2455.05 [ 0 5 3 11 4 1 7 9 10 2 8 6 ] 4600.43 3554.01 357 716001 2450.15 [ 0 2 4 6 5 11 8 9 7 10 1 3 ] 5487.91 3554.01 358 718001 2445.26 [ 0 9 10 6 5 1 4 7 8 11 2 3 ] 5586.26 3554.01 359 720001 2440.38 [ 0 2 7 11 1 3 5 4 9 6 10 8 ] 4784.34 3554.01 360 722001 2435.51 [ 0 2 10 1 3 11 7 8 6 9 4 5 ] 5533.77 3554.01 361 724001 2430.65 [ 0 8 1 7 4 2 6 5 11 10 3 9 ] 5273.86 3554.01 362 726001 2425.8 [ 0 7 10 6 2 4 11 8 5 1 9 3 ] 5099.8 3554.01 363 728001 2420.96 [ 0 9 11 4 5 7 8 1 10 6 2 3 ] 5455.08 3554.01 364 730001 2416.12 [ 0 10 11 6 8 1 4 2 5 3 9 7 ] 4696.63 3554.01 365 732001 2411.3 [ 0 8 11 1 10 6 4 7 2 5 3 9 ] 4406.18 3554.01 366 734001 2406.49 [ 0 3 2 7 10 6 4 1 9 11 8 5 ] 5057.6 3554.01 367 736001 2401.69 [ 0 2 9 1 11 8 5 6 7 4 3 10 ] 5193.95 3554.01 368 738001 2396.89 [ 0 2 3 8 11 4 1 7 5 6 9 10 ] 5393.43 3554.01 369 740001 2392.11 [ 0 2 10 7 11 1 6 8 9 4 3 5 ] 4774.85 3554.01 370 742001 2387.33 [ 0 5 1 3 2 9 10 7 11 6 4 8 ] 5459.94 3554.01 371 744001 2382.57 [ 0 5 7 3 8 1 9 2 6 10 4 11 ] 5047.37 3554.01 372 746001 2377.81 [ 0 6 11 3 2 5 4 7 9 8 10 1 ] 5544.64 3554.01 373 748001 2373.07 [ 0 10 7 6 9 1 3 5 4 2 8 11 ] 5053.3 3554.01 374 750001 2368.33 [ 0 3 10 8 9 7 11 2 6 4 5 1 ] 5650.36 3554.01 375 752001 2363.6 [ 0 3 4 11 8 2 10 9 5 6 1 7 ] 5296.89 3554.01 376 754001 2358.88 [ 0 7 2 10 1 5 4 3 11 6 8 9 ] 5795.91 3554.01 377 756001 2354.18 [ 0 1 9 5 6 4 2 3 7 11 10 8 ] 4822.46 3554.01 378 758001 2349.48 [ 0 4 1 10 8 7 5 6 11 9 2 3 ] 5299.25 3554.01 379 760001 2344.79 [ 0 9 5 6 8 10 7 3 11 1 2 4 ] 5144.44 3554.01 380 762001 2340.11 [ 0 9 2 8 3 10 5 4 7 11 1 6 ] 5336.12 3554.01 381 764001 2335.44 [ 0 9 10 7 3 1 4 11 8 6 5 2 ] 5443.43 3554.01 382 766001 2330.78 [ 0 9 2 5 1 10 3 6 4 7 11 8 ] 5299.93 3554.01 383 768001 2326.12 [ 0 2 4 7 1 10 5 9 11 6 8 3 ] 4976.19 3554.01 384 770001 2321.48 [ 0 7 8 1 2 4 3 9 10 6 11 5 ] 5843.44 3554.01 385 772001 2316.85 [ 0 11 4 8 6 2 1 10 7 9 3 5 ] 4376.84 3554.01 386 774001 2312.22 [ 0 2 4 7 10 11 3 8 1 6 9 5 ] 5329.79 3554.01 387 776001 2307.61 [ 0 9 2 10 8 11 5 1 6 3 7 4 ] 5872.58 3554.01 388 778001 2303 [ 0 1 3 9 4 7 2 8 5 10 11 6 ] 5433.58 3554.01 389 780001 2298.4 [ 0 7 6 3 10 9 1 11 4 8 5 2 ] 5108.17 3554.01 390 782001 2293.82 [ 0 3 2 8 5 1 11 4 7 9 6 10 ] 5205.3 3554.01 391 784001 2289.24 [ 0 8 4 5 11 2 7 9 1 3 10 6 ] 5383.33 3554.01 392 786001 2284.67 [ 0 3 6 10 9 4 1 8 7 2 5 11 ] 5785.1 3554.01 393 788001 2280.11 [ 0 8 11 2 6 1 3 10 5 9 4 7 ] 5686.41 3554.01 394 790001 2275.56 [ 0 5 11 8 6 4 9 10 7 3 1 2 ] 5818.23 3554.01 395 792001 2271.01 [ 0 7 1 3 9 5 8 10 6 11 4 2 ] 5091.57 3554.01 396 794001 2266.48 [ 0 6 5 1 8 9 10 11 4 2 3 7 ] 5527.54 3554.01 397 796001 2261.96 [ 0 8 11 6 7 10 3 4 5 2 9 1 ] 5579.06 3554.01 398 798001 2257.44 [ 0 7 8 2 1 3 11 10 5 9 4 6 ] 5453.31 3554.01 399 800001 2252.94 [ 0 3 5 2 6 1 10 4 8 11 7 9 ] 4393.67 3554.01 400 802001 2248.44 [ 0 3 10 6 2 5 9 1 11 7 8 4 ] 4750.69 3554.01 401 804001 2243.95 [ 0 9 8 3 7 11 5 4 1 2 10 6 ] 5600.13 3554.01 402 806001 2239.47 [ 0 11 4 3 7 6 5 1 9 8 2 10 ] 5548.67 3554.01 403 808001 2235 [ 0 7 10 4 6 2 8 3 11 9 5 1 ] 5144.05 3554.01 404 810001 2230.54 [ 0 6 7 4 5 2 3 8 11 1 10 9 ] 5247.19 3554.01 405 812001 2226.09 [ 0 4 8 7 1 6 3 9 11 5 10 2 ] 5478.2 3554.01 406 814001 2221.65 [ 0 7 4 11 6 8 9 1 10 3 2 5 ] 5117.7 3554.01 407 816001 2217.21 [ 0 2 4 9 8 1 6 5 10 3 11 7 ] 5985.34 3554.01 408 818001 2212.79 [ 0 2 9 4 11 1 3 5 6 8 7 10 ] 4646.79 3554.01 409 820001 2208.37 [ 0 4 9 11 5 2 3 7 8 6 10 1 ] 5679.8 3554.01 410 822001 2203.96 [ 0 8 6 1 11 9 4 7 10 2 5 3 ] 4673.3 3554.01 411 824001 2199.56 [ 0 9 7 1 11 3 10 8 4 5 2 6 ] 5267.71 3554.01 412 826001 2195.17 [ 0 4 9 7 3 10 5 2 8 11 6 1 ] 6083.24 3554.01 413 828001 2190.79 [ 0 9 10 4 11 8 1 5 2 3 6 7 ] 5404.17 3554.01 414 830001 2186.42 [ 0 8 1 3 9 6 4 5 10 11 2 7 ] 5496.68 3554.01 415 832001 2182.05 [ 0 1 11 3 10 9 2 8 4 6 7 5 ] 5670.27 3554.01 416 834001 2177.7 [ 0 9 3 2 1 7 5 8 10 11 4 6 ] 4986.8 3554.01 417 836001 2173.35 [ 0 4 9 3 1 7 8 6 10 5 2 11 ] 5540.5 3554.01 418 838001 2169.01 [ 0 3 5 11 7 9 6 2 8 10 4 1 ] 4547.34 3554.01 419 840001 2164.68 [ 0 2 4 5 7 1 10 6 9 11 8 3 ] 5413.22 3554.01 420 842001 2160.36 [ 0 6 4 9 5 2 11 8 3 10 7 1 ] 5319.51 3554.01 421 844001 2156.05 [ 0 8 2 4 5 3 9 10 6 1 7 11 ] 4812.52 3554.01 422 846001 2151.75 [ 0 8 4 2 6 3 5 7 9 11 1 10 ] 4509.18 3554.01 423 848001 2147.45 [ 0 4 2 10 9 7 5 1 11 6 8 3 ] 5489.21 3554.01 424 850001 2143.17 [ 0 2 9 6 8 7 4 5 10 3 1 11 ] 5576.17 3554.01 425 852001 2138.89 [ 0 2 5 11 3 6 9 1 10 8 4 7 ] 5308.07 3554.01 426 854001 2134.62 [ 0 9 3 5 1 4 6 11 2 8 10 7 ] 4880.13 3554.01 427 856001 2130.36 [ 0 8 2 4 9 1 7 5 3 6 10 11 ] 4615.87 3554.01 428 858001 2126.11 [ 0 9 11 8 6 1 3 5 10 4 2 7 ] 4909.36 3554.01 429 860001 2121.86 [ 0 10 3 5 11 8 9 4 1 7 2 6 ] 5043.12 3554.01 430 862001 2117.63 [ 0 1 11 9 4 8 6 2 10 7 5 3 ] 4807.34 3554.01 431 864001 2113.4 [ 0 2 11 9 1 8 6 7 10 5 4 3 ] 5394.51 3554.01 432 866001 2109.18 [ 0 6 7 4 2 8 9 10 5 3 11 1 ] 5087.53 3554.01 433 868001 2104.97 [ 0 11 4 10 7 9 1 2 3 6 5 8 ] 4646.88 3554.01 434 870001 2100.77 [ 0 5 1 3 6 9 10 2 7 8 4 11 ] 5668.73 3554.01 435 872001 2096.58 [ 0 4 8 6 3 5 2 1 7 11 10 9 ] 4566.3 3554.01 436 874001 2092.39 [ 0 7 2 5 11 4 8 10 3 9 1 6 ] 5190.6 3554.01 437 876001 2088.22 [ 0 2 9 11 5 8 7 10 1 6 4 3 ] 5496.53 3554.01 438 878001 2084.05 [ 0 10 8 3 4 1 6 5 2 7 11 9 ] 5423.79 3554.01 439 880001 2079.89 [ 0 5 9 10 11 4 2 8 1 3 7 6 ] 5239.49 3554.01 440 882001 2075.74 [ 0 10 2 9 8 6 11 4 1 5 7 3 ] 5578.78 3554.01 441 884001 2071.59 [ 0 11 4 3 9 2 10 8 7 6 5 1 ] 5561.87 3554.01 442 886001 2067.46 [ 0 9 3 7 2 1 11 10 5 6 8 4 ] 5021.94 3554.01 443 888001 2063.33 [ 0 4 9 8 6 2 5 1 3 10 11 7 ] 5593.52 3554.01 444 890001 2059.21 [ 0 11 2 7 4 5 6 8 9 1 3 10 ] 5485.22 3554.01 445 892001 2055.1 [ 0 2 6 8 9 11 5 1 7 10 3 4 ] 5626.16 3554.01 446 894001 2051 [ 0 6 10 8 11 7 9 5 3 1 2 4 ] 4642.71 3554.01 447 896001 2046.91 [ 0 3 9 10 2 6 8 11 7 4 1 5 ] 5157.43 3554.01 448 898001 2042.82 [ 0 10 5 4 3 9 2 1 6 11 8 7 ] 5829.54 3554.01 449 900001 2038.75 [ 0 2 9 5 6 4 10 3 7 11 1 8 ] 4657.12 3554.01 450 902001 2034.68 [ 0 7 4 10 11 1 8 2 6 9 5 3 ] 4077.94 3554.01 451 904001 2030.62 [ 0 2 1 8 6 9 11 10 4 7 3 5 ] 4493.72 3554.01 452 906001 2026.56 [ 0 1 2 5 3 7 11 4 9 10 8 6 ] 4890.83 3554.01 453 908001 2022.52 [ 0 1 2 4 8 7 3 9 11 10 5 6 ] 5319.28 3554.01 454 910001 2018.48 [ 0 6 8 5 9 7 3 11 4 10 1 2 ] 4623.6 3554.01 455 912001 2014.45 [ 0 2 5 7 8 3 11 4 1 9 10 6 ] 5272.02 3554.01 456 914001 2010.43 [ 0 1 4 8 7 6 3 2 11 9 10 5 ] 5616.11 3554.01 457 916001 2006.42 [ 0 11 4 6 7 9 1 3 5 8 2 10 ] 4816.48 3554.01 458 918001 2002.41 [ 0 7 5 9 6 11 8 10 3 2 1 4 ] 5557.69 3554.01 459 920001 1998.42 [ 0 1 9 5 7 4 3 11 8 10 2 6 ] 5299.78 3554.01 460 922001 1994.43 [ 0 1 8 10 9 7 4 3 11 6 2 5 ] 5858.74 3554.01 461 924001 1990.45 [ 0 7 8 11 3 2 5 10 1 6 4 9 ] 5871.68 3554.01 462 926001 1986.47 [ 0 10 2 8 6 7 4 9 1 11 3 5 ] 4650.6 3554.01 463 928001 1982.51 [ 0 1 9 11 5 4 7 8 6 10 3 2 ] 5516.79 3554.01 464 930001 1978.55 [ 0 2 4 1 5 10 6 11 8 9 7 3 ] 5755.54 3554.01 465 932001 1974.6 [ 0 7 11 8 6 1 9 2 4 5 3 10 ] 4872.41 3554.01 466 934001 1970.66 [ 0 5 8 11 10 1 4 6 2 7 3 9 ] 5029.83 3554.01 467 936001 1966.73 [ 0 1 11 3 10 7 8 9 6 2 5 4 ] 5710.49 3554.01 468 938001 1962.8 [ 0 2 7 11 8 5 9 6 4 10 1 3 ] 4727.94 3554.01 469 940001 1958.88 [ 0 3 2 11 5 10 1 7 8 9 6 4 ] 5535.96 3554.01 470 942001 1954.97 [ 0 10 2 3 1 9 5 7 8 6 11 4 ] 5170.41 3554.01 471 944001 1951.07 [ 0 6 10 5 11 4 9 7 3 1 8 2 ] 5760.63 3554.01 472 946001 1947.18 [ 0 9 6 1 10 11 2 5 3 8 4 7 ] 4836.36 3554.01 473 948001 1943.29 [ 0 1 3 5 7 9 2 6 11 4 10 8 ] 4674.29 3554.01 474 950001 1939.41 [ 0 3 8 1 9 11 7 4 10 2 6 5 ] 4714.64 3554.01 475 952001 1935.54 [ 0 7 4 3 1 11 9 5 8 2 10 6 ] 5124.68 3554.01 476 954001 1931.68 [ 0 2 1 10 7 5 9 6 8 11 4 3 ] 5070.98 3554.01 477 956001 1927.82 [ 0 6 3 4 1 5 9 7 11 8 2 10 ] 5099.01 3554.01 478 958001 1923.97 [ 0 7 10 4 11 5 2 3 8 1 6 9 ] 5418.3 3554.01 479 960001 1920.13 [ 0 5 6 9 2 4 1 10 11 8 3 7 ] 5234.02 3554.01 480 962001 1916.3 [ 0 10 11 9 3 4 7 1 8 2 5 6 ] 5040.55 3554.01 481 964001 1912.48 [ 0 2 5 4 8 9 1 7 10 11 6 3 ] 5000.72 3554.01 482 966001 1908.66 [ 0 9 8 3 5 7 6 4 11 1 2 10 ] 4930.67 3554.01 483 968001 1904.85 [ 0 8 9 2 4 7 10 3 6 5 11 1 ] 5409.21 3554.01 484 970001 1901.05 [ 0 4 5 8 9 6 10 7 11 3 2 1 ] 5723.63 3554.01 485 972001 1897.25 [ 0 5 6 7 2 3 9 8 4 10 11 1 ] 4691.24 3554.01 486 974001 1893.47 [ 0 4 10 1 5 2 11 7 9 6 3 8 ] 4870.89 3554.01 487 976001 1889.69 [ 0 1 11 8 10 2 5 9 3 4 7 6 ] 5027.57 3554.01 488 978001 1885.91 [ 0 7 4 1 3 5 9 2 8 11 6 10 ] 4846.71 3554.01 489 980001 1882.15 [ 0 1 8 9 4 3 5 11 6 7 2 10 ] 5609.1 3554.01 490 982001 1878.39 [ 0 7 10 3 1 5 8 11 9 6 2 4 ] 5832.84 3554.01 491 984001 1874.64 [ 0 10 1 9 11 8 2 5 3 7 6 4 ] 4734.68 3554.01 492 986001 1870.9 [ 0 11 3 9 6 2 7 4 1 8 10 5 ] 5518.93 3554.01 493 988001 1867.17 [ 0 7 9 1 4 6 8 2 5 11 3 10 ] 5448.42 3554.01 494 990001 1863.44 [ 0 5 4 7 10 1 11 3 6 2 9 8 ] 5078.67 3554.01 495 992001 1859.72 [ 0 5 7 8 9 2 11 1 4 10 6 3 ] 4903.05 3554.01 496 994001 1856.01 [ 0 6 4 3 2 9 8 10 7 5 1 11 ] 5436.93 3554.01 497 996001 1852.3 [ 0 8 10 5 6 9 1 11 2 4 7 3 ] 5092.03 3554.01 498 998001 1848.61 [ 0 9 4 8 6 7 1 3 5 10 2 11 ] 5188.92 3554.01 499 1000001 1844.92 [ 0 10 6 8 5 2 4 9 1 11 7 3 ] 5041.14 3554.01 500 1002001 1841.24 [ 0 7 4 9 6 2 5 3 10 11 8 1 ] 5246.46 3554.01 501 1004001 1837.56 [ 0 3 11 1 10 9 4 5 6 8 2 7 ] 5303.93 3554.01 502 1006001 1833.89 [ 0 2 3 5 4 6 1 11 9 10 7 8 ] 4828.31 3554.01 503 1008001 1830.23 [ 0 3 1 2 10 5 4 8 6 11 9 7 ] 5671.56 3554.01 504 1010001 1826.58 [ 0 9 4 10 8 11 6 1 2 3 5 7 ] 5072.35 3554.01 505 1012001 1822.93 [ 0 4 9 8 2 7 1 5 6 10 11 3 ] 5472.79 3554.01 506 1014001 1819.29 [ 0 2 8 7 9 11 6 10 4 1 3 5 ] 4597.54 3554.01 507 1016001 1815.66 [ 0 10 3 4 9 6 2 8 7 1 5 11 ] 5963.25 3554.01 508 1018001 1812.04 [ 0 6 4 10 3 1 9 7 8 11 2 5 ] 5001.85 3554.01 509 1020001 1808.42 [ 0 2 7 6 11 1 9 4 5 8 10 3 ] 5291.98 3554.01 510 1022001 1804.81 [ 0 6 8 10 3 9 5 2 7 11 1 4 ] 4569.7 3554.01 511 1024001 1801.21 [ 0 4 7 3 9 6 1 10 8 2 5 11 ] 5547.58 3554.01 512 1026001 1797.61 [ 0 9 11 1 6 7 5 3 10 2 8 4 ] 5071.3 3554.01 513 1028001 1794.03 [ 0 9 1 5 6 7 2 3 11 8 10 4 ] 5162.22 3554.01 514 1030001 1790.45 [ 0 3 8 10 5 9 7 1 11 4 6 2 ] 4770.51 3554.01 515 1032001 1786.87 [ 0 10 2 3 4 5 1 11 8 6 7 9 ] 5540.83 3554.01 516 1034001 1783.31 [ 0 7 1 9 5 11 6 10 8 3 4 2 ] 5223.98 3554.01 517 1036001 1779.75 [ 0 9 3 6 1 2 5 8 11 4 10 7 ] 5037.36 3554.01 518 1038001 1776.19 [ 0 6 11 10 8 9 1 5 3 4 7 2 ] 4657.63 3554.01 519 1040001 1772.65 [ 0 5 11 8 1 6 3 7 9 10 4 2 ] 5525.37 3554.01 520 1042001 1769.11 [ 0 1 11 10 3 7 8 4 5 6 9 2 ] 5397.45 3554.01 521 1044001 1765.58 [ 0 4 1 6 3 7 5 10 2 9 8 11 ] 5882.26 3554.01 522 1046001 1762.05 [ 0 4 7 3 5 9 6 11 8 1 2 10 ] 5075.22 3554.01 523 1048001 1758.54 [ 0 9 10 3 4 7 1 11 8 6 2 5 ] 5322.32 3554.01 524 1050001 1755.03 [ 0 9 5 3 4 8 2 6 1 10 11 7 ] 4487.06 3554.01 525 1052001 1751.52 [ 0 8 5 6 3 10 7 4 2 11 1 9 ] 4979.83 3554.01 526 1054001 1748.03 [ 0 6 9 4 3 8 2 5 10 1 7 11 ] 5338.87 3554.01 527 1056001 1744.54 [ 0 7 8 5 9 6 3 4 1 11 10 2 ] 4966.46 3535.92 528 1058001 1741.06 [ 0 2 5 11 4 1 7 10 6 9 3 8 ] 5083.19 3535.92 529 1060001 1737.58 [ 0 4 3 9 8 6 11 2 7 1 5 10 ] 5519.59 3535.92 530 1062001 1734.11 [ 0 5 11 7 10 2 3 6 9 4 1 8 ] 5449.81 3535.92 531 1064001 1730.65 [ 0 11 1 6 3 4 8 2 5 7 9 10 ] 5573.99 3535.92 532 1066001 1727.2 [ 0 8 5 4 10 6 2 3 9 7 1 11 ] 4669.91 3535.92 533 1068001 1723.75 [ 0 4 7 11 10 8 1 6 2 9 5 3 ] 4502.74 3535.92 534 1070001 1720.31 [ 0 6 9 2 11 1 4 5 3 7 10 8 ] 4583.08 3535.92 535 1072001 1716.88 [ 0 10 9 7 5 3 8 4 2 6 1 11 ] 5028.7 3535.92 536 1074001 1713.45 [ 0 1 3 5 8 2 9 11 4 6 10 7 ] 4977.88 3535.92 537 1076001 1710.03 [ 0 1 8 5 11 2 3 9 6 7 10 4 ] 5344.88 3535.92 538 1078001 1706.62 [ 0 2 4 7 8 11 3 5 1 6 9 10 ] 5435.24 3535.92 539 1080001 1703.21 [ 0 5 11 10 4 3 9 6 1 2 7 8 ] 5092.34 3535.92 540 1082001 1699.81 [ 0 9 11 2 6 5 7 10 4 1 3 8 ] 5097.11 3535.92 541 1084001 1696.42 [ 0 7 9 11 1 4 5 3 6 10 8 2 ] 4624.38 3535.92 542 1086001 1693.03 [ 0 6 5 10 2 4 3 8 7 11 9 1 ] 5301.91 3535.92 543 1088001 1689.65 [ 0 10 4 2 5 3 7 8 9 1 11 6 ] 4345.95 3535.92 544 1090001 1686.28 [ 0 8 1 4 2 3 6 10 7 9 11 5 ] 5393.13 3535.92 545 1092001 1682.91 [ 0 10 8 3 11 1 7 5 6 9 4 2 ] 5471.2 3535.92 546 1094001 1679.55 [ 0 8 7 3 2 11 9 5 6 1 4 10 ] 4935.61 3535.92 547 1096001 1676.2 [ 0 1 4 10 9 7 11 3 6 8 2 5 ] 5022.33 3535.92 548 1098001 1672.86 [ 0 5 3 9 6 8 11 7 2 1 10 4 ] 4152.48 3535.92 549 1100001 1669.52 [ 0 4 8 6 7 3 2 9 5 1 10 11 ] 5095.11 3535.92 550 1102001 1666.18 [ 0 11 10 5 9 8 3 2 4 7 6 1 ] 5542.99 3535.92 551 1104001 1662.86 [ 0 8 2 3 7 6 4 9 5 1 11 10 ] 5117.45 3535.92 552 1106001 1659.54 [ 0 6 4 2 11 10 3 7 9 8 5 1 ] 5637.34 3535.92 553 1108001 1656.23 [ 0 7 3 5 6 4 11 10 8 1 9 2 ] 4560.44 3535.92 554 1110001 1652.92 [ 0 5 11 8 9 1 10 6 2 3 4 7 ] 5373.97 3535.92 555 1112001 1649.62 [ 0 8 2 9 6 5 3 10 11 4 7 1 ] 4629.55 3535.92 556 1114001 1646.33 [ 0 8 3 5 11 7 6 4 10 9 1 2 ] 4425.08 3535.92 557 1116001 1643.04 [ 0 1 9 11 6 3 8 10 4 5 7 2 ] 5096.57 3535.92 558 1118001 1639.76 [ 0 8 1 7 2 10 3 6 4 9 5 11 ] 5482.42 3535.92 559 1120001 1636.49 [ 0 2 6 4 7 10 3 1 5 9 11 8 ] 5352.66 3525.97 560 1122001 1633.22 [ 0 1 7 10 3 6 4 5 8 2 9 11 ] 5526.14 3525.97 561 1124001 1629.96 [ 0 8 1 7 3 5 10 9 2 11 4 6 ] 4852.23 3525.97 562 1126001 1626.71 [ 0 2 4 8 3 9 1 5 11 10 6 7 ] 5242.24 3525.97 563 1128001 1623.46 [ 0 4 3 2 9 7 1 8 10 11 5 6 ] 5278.21 3525.97 564 1130001 1620.22 [ 0 6 5 11 2 9 7 1 10 4 8 3 ] 4735.08 3525.97 565 1132001 1616.99 [ 0 10 6 2 7 4 3 8 9 5 11 1 ] 5357.57 3525.97 566 1134001 1613.76 [ 0 5 8 2 11 9 6 10 1 3 4 7 ] 5514.93 3525.97 567 1136001 1610.54 [ 0 10 4 1 3 11 2 7 5 9 6 8 ] 5034.28 3525.97 568 1138001 1607.33 [ 0 8 6 11 7 10 1 4 2 5 3 9 ] 4383.77 3525.97 569 1140001 1604.12 [ 0 2 9 7 10 6 1 8 3 4 5 11 ] 5856.32 3525.97 570 1142001 1600.92 [ 0 11 4 10 3 5 9 8 2 1 7 6 ] 4317.56 3525.97 571 1144001 1597.72 [ 0 2 9 1 7 5 3 6 11 10 4 8 ] 4077 3525.97 572 1146001 1594.53 [ 0 3 1 11 5 6 8 7 2 9 4 10 ] 5076.12 3525.97 573 1148001 1591.35 [ 0 9 2 1 10 7 4 5 8 3 6 11 ] 5430.65 3525.97 574 1150001 1588.17 [ 0 11 6 5 3 9 7 8 2 4 1 10 ] 4681.06 3525.97 575 1152001 1585 [ 0 3 10 4 7 2 6 8 9 1 5 11 ] 5148.59 3525.97 576 1154001 1581.84 [ 0 7 9 3 2 4 11 6 1 8 5 10 ] 5601.25 3525.97 577 1156001 1578.68 [ 0 10 7 2 4 5 1 6 9 11 3 8 ] 5769.53 3525.97 578 1158001 1575.53 [ 0 10 7 6 4 5 8 9 11 1 2 3 ] 5362.19 3525.97 579 1160001 1572.39 [ 0 5 1 10 6 8 4 3 9 2 11 7 ] 5111.67 3525.97 580 1162001 1569.25 [ 0 7 3 5 10 8 1 11 6 4 2 9 ] 5106.45 3525.97 581 1164001 1566.12 [ 0 6 2 3 9 8 1 4 11 7 5 10 ] 5229.65 3525.97 582 1166001 1562.99 [ 0 9 7 2 3 4 6 10 8 11 5 1 ] 5873.58 3525.97 583 1168001 1559.87 [ 0 9 7 4 10 8 2 6 5 1 11 3 ] 4971.54 3525.97 584 1170001 1556.76 [ 0 5 11 8 3 9 7 4 1 10 2 6 ] 5070.22 3525.97 585 1172001 1553.65 [ 0 4 5 2 3 10 9 6 1 8 7 11 ] 5912.07 3525.97 586 1174001 1550.55 [ 0 3 2 10 1 7 9 5 4 6 8 11 ] 5021.19 3525.97 587 1176001 1547.45 [ 0 5 6 9 7 11 3 4 10 2 8 1 ] 5322.56 3525.97 588 1178001 1544.36 [ 0 5 8 4 3 11 10 9 2 6 7 1 ] 5517.09 3525.97 589 1180001 1541.28 [ 0 4 1 6 7 9 3 10 2 8 5 11 ] 5660.56 3525.97 590 1182001 1538.21 [ 0 5 4 3 2 6 9 7 1 11 10 8 ] 5003.85 3525.97 591 1184001 1535.14 [ 0 4 2 5 11 3 9 8 7 6 1 10 ] 5716.25 3525.97 592 1186001 1532.07 [ 0 2 6 4 8 3 9 7 10 11 1 5 ] 4856.6 3525.97 593 1188001 1529.01 [ 0 8 10 11 1 5 2 7 4 3 9 6 ] 4932.32 3525.97 594 1190001 1525.96 [ 0 3 9 6 11 5 1 2 7 4 8 10 ] 5557.23 3525.97 595 1192001 1522.92 [ 0 10 5 8 9 4 1 3 2 7 6 11 ] 5902.7 3525.97 596 1194001 1519.88 [ 0 9 3 5 1 8 4 6 2 7 11 10 ] 4677.38 3525.97 597 1196001 1516.84 [ 0 3 11 2 10 8 7 4 9 5 1 6 ] 5522 3525.97 598 1198001 1513.81 [ 0 7 10 9 11 2 4 6 8 5 3 1 ] 5150.36 3525.97 599 1200001 1510.79 [ 0 11 5 2 6 8 3 4 9 10 1 7 ] 5605.21 3525.97 600 1202001 1507.78 [ 0 5 7 11 8 2 1 3 6 9 4 10 ] 5322.71 3525.97 601 1204001 1504.77 [ 0 3 5 7 4 6 9 1 8 2 10 11 ] 4790.66 3525.97 602 1206001 1501.76 [ 0 7 1 11 4 10 9 8 6 5 3 2 ] 4210.26 3525.97 603 1208001 1498.77 [ 0 3 11 6 1 2 5 4 10 7 8 9 ] 5538.61 3525.97 604 1210001 1495.77 [ 0 6 1 11 3 8 7 10 4 9 5 2 ] 4856.63 3525.97 605 1212001 1492.79 [ 0 3 1 7 10 6 11 9 2 5 8 4 ] 5395.46 3525.97 606 1214001 1489.81 [ 0 11 4 10 9 7 5 8 2 1 6 3 ] 5245.13 3525.97 607 1216001 1486.84 [ 0 2 7 11 10 4 5 8 6 1 9 3 ] 4477.1 3525.97 608 1218001 1483.87 [ 0 9 4 6 2 7 10 1 5 8 11 3 ] 5570.22 3525.97 609 1220001 1480.91 [ 0 4 2 10 1 7 11 8 9 3 6 5 ] 4990.26 3525.97 610 1222001 1477.95 [ 0 10 9 8 2 3 6 5 4 11 7 1 ] 5353.38 3525.97 611 1224001 1475 [ 0 4 10 11 3 5 1 2 7 9 6 8 ] 4516.31 3525.97 612 1226001 1472.06 [ 0 1 6 4 11 5 9 8 10 7 2 3 ] 5392.55 3525.97 613 1228001 1469.12 [ 0 6 8 1 4 11 3 7 2 9 5 10 ] 5210.41 3525.97 614 1230001 1466.19 [ 0 8 11 5 6 3 1 7 2 9 10 4 ] 5165.53 3525.97 615 1232001 1463.26 [ 0 8 6 1 2 10 3 11 7 9 5 4 ] 5360.46 3525.97 616 1234001 1460.34 [ 0 1 2 11 7 3 6 4 8 9 5 10 ] 5427.07 3525.97 617 1236001 1457.42 [ 0 10 3 2 4 9 6 5 11 8 1 7 ] 5894.29 3525.97 618 1238001 1454.51 [ 0 5 1 7 11 6 9 8 3 10 2 4 ] 5620.35 3525.97 619 1240001 1451.61 [ 0 11 7 8 10 6 4 1 9 2 3 5 ] 4544.16 3525.97 620 1242001 1448.71 [ 0 5 3 8 1 2 10 9 11 7 4 6 ] 4838.45 3525.97 621 1244001 1445.82 [ 0 9 5 4 6 2 8 1 11 3 10 7 ] 5380.77 3525.97 622 1246001 1442.94 [ 0 4 7 5 2 11 6 1 3 9 8 10 ] 5740.08 3525.97 623 1248001 1440.06 [ 0 5 8 2 1 9 3 6 7 11 4 10 ] 4523.54 3525.97 624 1250001 1437.18 [ 0 9 6 1 5 3 2 8 11 7 4 10 ] 4764.02 3525.97 625 1252001 1434.31 [ 0 5 1 3 11 4 9 6 2 8 10 7 ] 5718.28 3525.97 626 1254001 1431.45 [ 0 4 10 8 1 5 11 6 9 3 7 2 ] 5411.1 3525.97 627 1256001 1428.59 [ 0 2 9 5 10 7 6 11 1 4 8 3 ] 4984.17 3525.97 628 1258001 1425.74 [ 0 10 7 2 3 5 1 8 9 6 11 4 ] 5129.14 3525.97 629 1260001 1422.9 [ 0 7 2 9 8 5 10 4 6 11 1 3 ] 5176.46 3525.97 630 1262001 1420.06 [ 0 5 6 2 7 10 3 11 8 4 1 9 ] 5266.66 3525.97 631 1264001 1417.22 [ 0 9 4 2 7 10 5 8 6 11 3 1 ] 5940.89 3525.97 632 1266001 1414.39 [ 0 7 5 3 10 8 1 9 4 11 2 6 ] 4884.2 3525.97 633 1268001 1411.57 [ 0 10 4 11 1 2 5 9 6 8 3 7 ] 4726.96 3525.97 634 1270001 1408.75 [ 0 9 4 7 3 8 10 1 6 5 2 11 ] 5638.9 3525.97 635 1272001 1405.94 [ 0 10 7 4 2 5 11 6 3 8 1 9 ] 5499.48 3525.97 636 1274001 1403.13 [ 0 11 5 7 8 6 1 10 3 4 2 9 ] 5860.73 3525.97 637 1276001 1400.33 [ 0 4 10 8 1 5 9 11 2 7 3 6 ] 4966.88 3525.97 638 1278001 1397.54 [ 0 4 3 1 8 9 7 11 6 2 10 5 ] 5756.6 3525.97 639 1280001 1394.75 [ 0 3 10 9 7 4 6 8 5 2 11 1 ] 5364.76 3525.97 640 1282001 1391.96 [ 0 4 11 10 3 2 5 6 8 1 7 9 ] 5180.58 3525.97 641 1284001 1389.19 [ 0 9 7 6 5 1 4 11 3 10 8 2 ] 5545.68 3525.97 642 1286001 1386.41 [ 0 8 4 7 2 3 10 11 9 5 6 1 ] 5172.71 3525.97 643 1288001 1383.65 [ 0 2 1 7 8 9 6 3 10 11 4 5 ] 5317.27 3525.97 644 1290001 1380.88 [ 0 3 2 7 9 11 6 8 10 1 5 4 ] 5331.47 3525.97 645 1292001 1378.13 [ 0 4 5 7 3 1 11 10 2 6 9 8 ] 5490.88 3525.97 646 1294001 1375.38 [ 0 1 3 5 11 6 7 8 2 10 4 9 ] 5202.01 3525.97 647 1296001 1372.63 [ 0 11 10 9 2 1 8 4 5 3 6 7 ] 5088.6 3525.97 648 1298001 1369.89 [ 0 8 7 11 5 10 2 3 9 1 4 6 ] 4984.18 3525.97 649 1300001 1367.16 [ 0 9 3 2 5 7 6 8 4 11 10 1 ] 5089.98 3525.97 650 1302001 1364.43 [ 0 6 1 11 4 5 2 8 3 10 7 9 ] 5247.47 3525.97 651 1304001 1361.71 [ 0 4 11 2 3 9 10 1 8 7 6 5 ] 5241.39 3525.97 652 1306001 1358.99 [ 0 11 3 9 5 7 4 10 1 2 6 8 ] 4697.77 3525.97 653 1308001 1356.28 [ 0 6 2 8 3 9 7 10 4 1 11 5 ] 4557.33 3525.97 654 1310001 1353.57 [ 0 8 4 7 9 1 2 3 10 11 5 6 ] 5026.93 3525.97 655 1312001 1350.87 [ 0 1 7 3 11 4 6 5 10 2 8 9 ] 5706.49 3525.97 656 1314001 1348.17 [ 0 3 8 5 1 2 10 6 7 4 11 9 ] 5522.31 3525.97 657 1316001 1345.48 [ 0 4 10 9 2 1 11 6 7 3 8 5 ] 5152.06 3525.97 658 1318001 1342.79 [ 0 2 3 5 9 1 7 8 4 6 10 11 ] 4280.9 3525.97 659 1320001 1340.11 [ 0 10 3 5 8 2 11 9 4 7 1 6 ] 4983.9 3525.97 660 1322001 1337.44 [ 0 7 8 3 1 6 10 4 2 5 9 11 ] 5267.5 3525.97 661 1324001 1334.77 [ 0 2 3 5 4 8 7 6 9 1 10 11 ] 4609.51 3525.97 662 1326001 1332.1 [ 0 1 6 11 7 4 10 2 8 5 3 9 ] 4611.47 3525.97 663 1328001 1329.45 [ 0 1 9 11 6 8 10 4 5 3 2 7 ] 4501.5 3525.97 664 1330001 1326.79 [ 0 5 2 6 1 9 3 11 8 4 10 7 ] 4930.42 3525.97 665 1332001 1324.14 [ 0 8 1 3 6 9 11 10 5 7 4 2 ] 5567.48 3525.97 666 1334001 1321.5 [ 0 5 4 8 6 7 3 9 2 11 1 10 ] 5010.53 3525.97 667 1336001 1318.86 [ 0 6 8 5 10 11 1 2 4 7 3 9 ] 5001.7 3525.97 668 1338001 1316.23 [ 0 7 6 9 8 10 2 3 4 5 11 1 ] 5827.61 3525.97 669 1340001 1313.6 [ 0 8 11 1 3 5 6 9 10 7 4 2 ] 4806.4 3525.97 670 1342001 1310.98 [ 0 10 6 2 3 9 5 4 8 11 1 7 ] 4904.39 3525.97 671 1344001 1308.36 [ 0 2 8 10 1 5 6 9 4 7 11 3 ] 5385.24 3525.97 672 1346001 1305.75 [ 0 1 7 3 2 4 5 9 11 8 10 6 ] 5314.4 3525.97 673 1348001 1303.15 [ 0 6 4 8 7 9 1 3 2 10 5 11 ] 5502.96 3525.97 674 1350001 1300.55 [ 0 8 4 2 10 1 9 11 7 6 5 3 ] 4351.94 3525.97 675 1352001 1297.95 [ 0 11 1 5 10 3 6 4 9 8 2 7 ] 5702.27 3525.97 676 1354001 1295.36 [ 0 9 2 6 11 1 10 8 3 5 7 4 ] 4696.18 3525.97 677 1356001 1292.77 [ 0 4 5 2 11 3 8 6 7 10 1 9 ] 5260.02 3525.97 678 1358001 1290.19 [ 0 9 11 8 4 6 1 10 3 5 7 2 ] 5060.25 3525.97 679 1360001 1287.62 [ 0 4 6 7 2 3 8 11 5 9 10 1 ] 5462.11 3525.97 680 1362001 1285.05 [ 0 1 11 4 3 8 5 7 9 2 6 10 ] 5373.24 3525.97 681 1364001 1282.48 [ 0 2 10 11 9 6 7 5 3 8 4 1 ] 4955.91 3525.97 682 1366001 1279.92 [ 0 10 2 4 7 1 8 9 11 6 5 3 ] 4992.4 3525.97 683 1368001 1277.37 [ 0 3 6 2 11 5 9 10 8 4 7 1 ] 5280.71 3525.97 684 1370001 1274.82 [ 0 8 10 4 1 9 2 11 7 5 3 6 ] 4016.75 3525.97 685 1372001 1272.27 [ 0 5 10 8 4 11 3 6 1 2 9 7 ] 5550.3 3525.97 686 1374001 1269.73 [ 0 4 10 11 7 9 2 5 6 3 8 1 ] 4907.7 3523.27 687 1376001 1267.2 [ 0 10 4 11 2 7 9 3 5 1 8 6 ] 4299.04 3523.27 688 1378001 1264.67 [ 0 8 4 6 2 11 5 7 3 10 1 9 ] 5419.81 3523.27 689 1380001 1262.15 [ 0 11 8 7 6 10 4 1 3 9 5 2 ] 4949.88 3523.27 690 1382001 1259.63 [ 0 11 9 1 10 2 8 3 4 6 5 7 ] 5324.68 3523.27 691 1384001 1257.11 [ 0 9 5 10 8 11 1 6 2 4 3 7 ] 5488.72 3523.27 692 1386001 1254.6 [ 0 7 2 9 5 8 1 4 6 10 3 11 ] 5530.02 3523.27 693 1388001 1252.1 [ 0 5 9 10 6 8 7 2 1 4 11 3 ] 5142.61 3523.27 694 1390001 1249.6 [ 0 9 11 1 2 8 6 10 4 7 3 5 ] 4364.86 3523.27 695 1392001 1247.11 [ 0 11 1 5 7 10 9 2 8 6 3 4 ] 5448.11 3523.27 696 1394001 1244.62 [ 0 8 4 7 3 5 2 6 11 10 9 1 ] 4746.61 3523.27 697 1396001 1242.13 [ 0 8 7 11 10 6 4 9 5 3 1 2 ] 4597.22 3523.27 698 1398001 1239.65 [ 0 7 3 5 9 6 2 8 4 11 1 10 ] 4377.55 3523.27 699 1400001 1237.18 [ 0 2 3 9 1 11 10 5 8 7 4 6 ] 4688.01 3523.27 700 1402001 1234.71 [ 0 6 11 2 7 3 1 10 5 4 8 9 ] 5662.65 3523.27 701 1404001 1232.25 [ 0 11 7 4 3 1 10 8 9 5 6 2 ] 5148.49 3523.27 702 1406001 1229.79 [ 0 11 1 9 3 8 2 7 4 10 5 6 ] 4476.3 3523.27 703 1408001 1227.33 [ 0 7 11 9 1 4 10 3 8 2 6 5 ] 4716.28 3523.27 704 1410001 1224.88 [ 0 5 11 10 4 6 1 9 7 3 2 8 ] 4895.52 3523.27 705 1412001 1222.44 [ 0 10 6 4 3 9 2 1 7 11 5 8 ] 5248.89 3523.27 706 1414001 1220 [ 0 3 1 2 8 11 7 4 10 9 6 5 ] 5129.86 3523.27 707 1416001 1217.56 [ 0 7 10 9 3 2 5 1 8 6 4 11 ] 5446.2 3523.27 708 1418001 1215.13 [ 0 5 2 6 7 8 4 11 1 10 9 3 ] 4894.95 3523.27 709 1420001 1212.71 [ 0 2 5 6 8 3 11 7 9 1 10 4 ] 4588.97 3523.27 710 1422001 1210.29 [ 0 8 10 7 6 3 2 9 5 1 11 4 ] 4862.99 3523.27 711 1424001 1207.87 [ 0 5 9 8 11 2 4 1 7 10 3 6 ] 5059.84 3523.27 712 1426001 1205.46 [ 0 1 4 9 5 3 10 2 8 6 11 7 ] 4838.09 3523.27 713 1428001 1203.05 [ 0 8 10 11 5 4 3 7 9 6 1 2 ] 5684.79 3523.27 714 1430001 1200.65 [ 0 3 6 5 10 11 1 2 7 8 4 9 ] 5205.03 3523.27 715 1432001 1198.25 [ 0 1 6 2 7 5 9 11 8 4 3 10 ] 5671.56 3523.27 716 1434001 1195.86 [ 0 1 6 9 8 2 10 11 4 3 5 7 ] 5208.5 3523.27 717 1436001 1193.48 [ 0 11 2 8 5 10 6 9 3 4 1 7 ] 5459.36 3523.27 718 1438001 1191.09 [ 0 11 5 6 10 1 2 3 7 8 4 9 ] 5721.95 3523.27 719 1440001 1188.72 [ 0 3 9 2 5 7 8 10 6 1 4 11 ] 5364.68 3523.27 720 1442001 1186.34 [ 0 3 10 4 7 8 9 6 1 2 11 5 ] 5512.76 3523.27 721 1444001 1183.98 [ 0 2 11 10 4 5 7 3 9 8 1 6 ] 5181.41 3523.27 722 1446001 1181.61 [ 0 11 5 10 2 4 6 3 8 7 9 1 ] 5625.7 3523.27 723 1448001 1179.25 [ 0 10 4 3 8 7 9 2 11 6 5 1 ] 5411 3523.27 724 1450001 1176.9 [ 0 10 7 9 8 1 5 2 3 4 11 6 ] 5570.61 3523.27 725 1452001 1174.55 [ 0 6 1 7 4 2 10 11 5 3 9 8 ] 4668.94 3523.27 726 1454001 1172.21 [ 0 6 2 9 3 11 7 10 5 4 1 8 ] 5192.57 3523.27 727 1456001 1169.87 [ 0 4 10 11 2 7 1 3 9 5 8 6 ] 4400.82 3523.27 728 1458001 1167.53 [ 0 1 6 9 10 4 7 8 3 5 2 11 ] 5002.43 3523.27 729 1460001 1165.2 [ 0 8 7 4 3 10 6 2 9 11 1 5 ] 5358.8 3523.27 730 1462001 1162.88 [ 0 11 2 10 3 8 4 6 5 7 1 9 ] 5396.33 3523.27 731 1464001 1160.55 [ 0 6 2 3 1 9 5 7 11 10 8 4 ] 4774.52 3523.27 732 1466001 1158.24 [ 0 7 3 1 9 5 11 6 10 2 4 8 ] 5401.74 3523.27 733 1468001 1155.93 [ 0 5 6 2 9 4 7 1 8 11 10 3 ] 5331.66 3523.27 734 1470001 1153.62 [ 0 1 7 3 2 9 5 11 10 6 4 8 ] 5171.96 3523.27 735 1472001 1151.32 [ 0 1 6 7 11 2 4 9 3 10 5 8 ] 5678.64 3523.27 736 1474001 1149.02 [ 0 9 6 7 2 11 8 5 3 1 10 4 ] 4715.54 3523.27 737 1476001 1146.72 [ 0 11 1 6 10 4 8 2 9 5 7 3 ] 4925.98 3523.27 738 1478001 1144.44 [ 0 3 7 1 9 10 5 4 8 11 2 6 ] 5298.64 3523.27 739 1480001 1142.15 [ 0 6 9 3 11 5 8 4 1 2 10 7 ] 5449.11 3523.27 740 1482001 1139.87 [ 0 11 1 5 10 8 4 2 6 7 3 9 ] 5479.82 3523.27 741 1484001 1137.6 [ 0 6 8 5 4 10 3 1 11 7 2 9 ] 4851.06 3523.27 742 1486001 1135.33 [ 0 2 4 10 1 6 8 11 3 5 7 9 ] 4725.13 3523.27 743 1488001 1133.06 [ 0 3 1 6 11 4 8 10 2 5 7 9 ] 5677.66 3523.27 744 1490001 1130.8 [ 0 3 5 8 2 1 9 10 11 7 6 4 ] 4539.37 3523.27 745 1492001 1128.54 [ 0 2 9 11 7 3 6 1 8 10 4 5 ] 5169.31 3523.27 746 1494001 1126.29 [ 0 4 2 5 9 6 3 10 1 7 8 11 ] 5260.73 3523.27 747 1496001 1124.04 [ 0 5 11 7 1 2 6 3 9 10 4 8 ] 4778.34 3523.27 748 1498001 1121.8 [ 0 6 3 11 10 9 8 2 4 5 1 7 ] 5523.59 3523.27 749 1500001 1119.56 [ 0 8 9 4 10 1 3 7 11 5 6 2 ] 5163.94 3523.27 750 1502001 1117.32 [ 0 9 6 5 11 7 3 4 1 8 2 10 ] 5717.15 3523.27 751 1504001 1115.09 [ 0 8 6 4 5 2 11 1 3 7 9 10 ] 5427.29 3523.27 752 1506001 1112.87 [ 0 2 6 11 7 5 8 4 3 9 1 10 ] 5008.94 3523.27 753 1508001 1110.65 [ 0 3 5 1 11 9 7 8 4 6 10 2 ] 4743.05 3523.27 754 1510001 1108.43 [ 0 3 6 1 2 10 7 9 5 4 8 11 ] 5364.33 3523.27 755 1512001 1106.22 [ 0 9 8 3 1 10 5 2 4 11 7 6 ] 5354.04 3523.27 756 1514001 1104.01 [ 0 8 9 3 11 6 5 1 10 4 7 2 ] 4972.92 3523.27 757 1516001 1101.81 [ 0 6 5 7 4 11 10 1 3 2 8 9 ] 5164.86 3523.27 758 1518001 1099.61 [ 0 4 2 11 1 7 3 9 6 5 10 8 ] 5131.91 3523.27 759 1520001 1097.41 [ 0 1 8 6 2 10 4 9 3 5 7 11 ] 4681.84 3523.27 760 1522001 1095.22 [ 0 10 5 3 1 6 11 9 8 2 4 7 ] 5377.73 3523.27 761 1524001 1093.03 [ 0 8 4 6 7 10 1 9 11 2 3 5 ] 4418.34 3523.27 762 1526001 1090.85 [ 0 6 5 1 2 9 7 11 8 3 4 10 ] 5043.21 3523.27 763 1528001 1088.68 [ 0 5 9 3 4 1 10 8 6 2 11 7 ] 4730.07 3523.27 764 1530001 1086.5 [ 0 2 10 8 5 7 3 6 1 11 4 9 ] 5510.17 3523.27 765 1532001 1084.33 [ 0 6 10 8 2 11 9 1 5 4 7 3 ] 5279.23 3523.27 766 1534001 1082.17 [ 0 9 6 2 1 11 8 3 5 4 10 7 ] 4570.5 3523.27 767 1536001 1080.01 [ 0 8 6 5 2 9 10 11 1 3 4 7 ] 5165.61 3523.27 768 1538001 1077.85 [ 0 5 9 3 7 11 1 6 2 10 4 8 ] 4470.85 3523.27 769 1540001 1075.7 [ 0 5 10 4 7 2 11 1 3 9 6 8 ] 4766.61 3523.27 770 1542001 1073.56 [ 0 5 11 6 8 1 9 4 3 2 7 10 ] 5516.84 3523.27 771 1544001 1071.41 [ 0 11 4 10 3 8 7 2 1 9 5 6 ] 4608.34 3523.27 772 1546001 1069.27 [ 0 9 6 10 8 1 2 5 11 3 7 4 ] 5972.37 3523.27 773 1548001 1067.14 [ 0 6 1 9 11 2 7 8 4 3 5 10 ] 4859.08 3523.27 774 1550001 1065.01 [ 0 7 6 8 10 11 2 1 3 5 9 4 ] 4789.9 3523.27 775 1552001 1062.88 [ 0 1 3 5 11 2 7 10 4 6 8 9 ] 4877.34 3523.27 776 1554001 1060.76 [ 0 2 3 7 8 10 5 11 6 1 9 4 ] 5790.09 3523.27 777 1556001 1058.65 [ 0 9 4 8 5 2 7 1 10 3 11 6 ] 5472.89 3523.27 778 1558001 1056.53 [ 0 8 5 2 1 11 4 6 9 10 7 3 ] 5227.36 3523.27 779 1560001 1054.42 [ 0 5 9 8 6 11 10 3 2 4 1 7 ] 5081.44 3523.27 780 1562001 1052.32 [ 0 4 3 5 1 10 9 8 7 11 6 2 ] 5028.53 3523.27 781 1564001 1050.22 [ 0 8 9 6 1 3 5 11 4 7 10 2 ] 5123.06 3523.27 782 1566001 1048.12 [ 0 2 8 9 7 11 6 3 5 1 4 10 ] 4518.19 3523.27 783 1568001 1046.03 [ 0 3 2 11 9 1 8 4 5 10 6 7 ] 5499.74 3523.27 784 1570001 1043.94 [ 0 5 1 10 2 9 6 3 8 7 4 11 ] 5342.9 3523.27 785 1572001 1041.86 [ 0 4 11 6 5 1 7 3 2 10 8 9 ] 5571.01 3523.27 786 1574001 1039.78 [ 0 2 4 6 5 9 3 10 11 7 8 1 ] 5083.85 3523.27 787 1576001 1037.7 [ 0 9 3 8 7 10 5 11 2 6 4 1 ] 5564.69 3523.27 788 1578001 1035.63 [ 0 2 6 5 1 11 3 9 7 10 4 8 ] 4706.21 3523.27 789 1580001 1033.56 [ 0 8 10 9 11 3 6 2 4 1 5 7 ] 5678.43 3523.27 790 1582001 1031.5 [ 0 5 11 9 8 6 2 7 1 4 3 10 ] 5489.83 3523.27 791 1584001 1029.44 [ 0 3 2 5 4 10 11 8 7 6 9 1 ] 5037.78 3523.27 792 1586001 1027.39 [ 0 5 10 8 3 7 4 9 11 1 6 2 ] 5480.78 3523.27 793 1588001 1025.34 [ 0 11 8 10 7 1 2 9 4 5 6 3 ] 5431.44 3523.27 794 1590001 1023.29 [ 0 2 1 3 10 8 9 7 6 5 4 11 ] 5696.96 3523.27 795 1592001 1021.25 [ 0 2 7 1 3 9 4 8 5 6 11 10 ] 5226.46 3523.27 796 1594001 1019.21 [ 0 6 2 3 8 7 10 9 5 11 1 4 ] 5022.24 3523.27 797 1596001 1017.18 [ 0 6 5 4 10 2 1 7 11 9 3 8 ] 4622.76 3523.27 798 1598001 1015.15 [ 0 10 6 11 3 4 9 5 8 1 2 7 ] 5750.79 3523.27 799 1600001 1013.12 [ 0 6 3 9 5 8 10 4 11 2 1 7 ] 4454.21 3523.27 800 1602001 1011.1 [ 0 1 8 2 3 9 6 4 10 5 11 7 ] 5314.17 3523.27 801 1604001 1009.08 [ 0 1 11 7 3 8 4 6 2 9 5 10 ] 5118.43 3523.27 802 1606001 1007.06 [ 0 4 9 3 11 6 5 7 10 2 8 1 ] 5793.4 3523.27 803 1608001 1005.05 [ 0 11 3 5 1 9 7 8 10 4 2 6 ] 4524.61 3523.27 804 1610001 1003.05 [ 0 8 7 3 6 11 5 10 2 4 1 9 ] 5537.9 3523.27 805 1612001 1001.05 [ 0 8 9 2 6 4 5 3 7 11 1 10 ] 4562.07 3523.27 806 1614001 999.048 [ 0 7 4 11 1 10 2 6 8 3 9 5 ] 4540.73 3523.27 807 1616001 997.054 [ 0 1 11 2 3 9 5 10 6 4 7 8 ] 5011.86 3523.27 808 1618001 995.064 [ 0 5 7 11 1 8 3 9 6 4 10 2 ] 4830.11 3523.27 809 1620001 993.078 [ 0 6 8 2 3 10 4 1 5 7 11 9 ] 5020.74 3523.27 810 1622001 991.096 [ 0 10 1 9 11 5 2 4 7 8 6 3 ] 5108.18 3523.27 811 1624001 989.117 [ 0 10 2 4 11 6 8 7 9 5 1 3 ] 5340.61 3523.27 812 1626001 987.143 [ 0 3 8 4 1 10 2 11 7 6 5 9 ] 4917.9 3523.27 813 1628001 985.173 [ 0 6 10 7 2 9 5 3 8 1 11 4 ] 4292.25 3523.27 814 1630001 983.206 [ 0 10 8 2 7 4 11 3 5 1 9 6 ] 4695.33 3523.27 815 1632001 981.244 [ 0 11 4 8 7 1 6 10 3 9 2 5 ] 5323.02 3523.27 816 1634001 979.285 [ 0 2 9 10 1 11 7 3 4 6 5 8 ] 5059.25 3523.27 817 1636001 977.331 [ 0 9 6 8 4 5 3 11 7 10 1 2 ] 4775.68 3523.27 818 1638001 975.38 [ 0 6 10 1 3 5 9 8 4 2 11 7 ] 4563.69 3523.27 819 1640001 973.433 [ 0 6 8 3 2 11 1 7 9 4 10 5 ] 4737.12 3523.27 820 1642001 971.49 [ 0 4 3 5 2 6 9 7 10 8 11 1 ] 4885.04 3523.27 821 1644001 969.551 [ 0 3 6 7 9 5 1 10 4 2 8 11 ] 4885.51 3523.27 822 1646001 967.616 [ 0 5 11 2 4 8 6 7 9 10 1 3 ] 5492.54 3523.27 823 1648001 965.684 [ 0 9 3 8 7 1 6 4 10 5 2 11 ] 5202.79 3523.27 824 1650001 963.757 [ 0 2 6 7 9 3 4 1 8 10 11 5 ] 5297.44 3523.27 825 1652001 961.833 [ 0 3 5 2 4 7 11 1 9 8 6 10 ] 4368.44 3523.27 826 1654001 959.913 [ 0 9 1 2 6 11 8 3 5 4 10 7 ] 4574.61 3523.27 827 1656001 957.997 [ 0 8 9 7 5 3 4 1 10 2 6 11 ] 4972.59 3523.27 828 1658001 956.085 [ 0 5 11 1 2 10 4 3 9 7 6 8 ] 4840.3 3523.27 829 1660001 954.177 [ 0 5 4 8 11 6 2 1 3 7 10 9 ] 5820.7 3523.27 830 1662001 952.272 [ 0 7 1 10 8 9 4 6 2 11 3 5 ] 4939.37 3523.27 831 1664001 950.372 [ 0 1 11 2 5 3 10 4 7 9 8 6 ] 4407.29 3523.27 832 1666001 948.475 [ 0 8 7 5 4 1 11 6 10 3 9 2 ] 5260.54 3523.27 833 1668001 946.581 [ 0 8 3 10 4 7 11 1 6 2 5 9 ] 4689.72 3523.27 834 1670001 944.692 [ 0 3 9 4 7 8 6 1 10 5 11 2 ] 5446.07 3523.27 835 1672001 942.806 [ 0 9 5 11 1 4 8 2 3 6 7 10 ] 5055.32 3523.27 836 1674001 940.925 [ 0 2 6 7 8 10 4 1 3 5 11 9 ] 4789.69 3523.27 837 1676001 939.046 [ 0 9 4 5 8 3 1 11 2 10 6 7 ] 5696.13 3523.27 838 1678001 937.172 [ 0 7 3 9 4 2 10 1 6 8 5 11 ] 5659.67 3523.27 839 1680001 935.302 [ 0 11 4 8 10 1 3 7 9 5 2 6 ] 5039.51 3523.27 840 1682001 933.435 [ 0 2 9 3 7 11 1 10 4 6 8 5 ] 4411.35 3523.27 841 1684001 931.572 [ 0 10 3 11 2 1 4 5 9 6 7 8 ] 5540.5 3523.27 842 1686001 929.712 [ 0 11 7 2 3 8 5 9 10 6 1 4 ] 5284.74 3523.27 843 1688001 927.856 [ 0 4 1 11 9 6 3 7 10 2 5 8 ] 5178.31 3523.27 844 1690001 926.004 [ 0 2 4 11 10 7 3 8 6 9 5 1 ] 5176.94 3523.27 845 1692001 924.156 [ 0 3 4 8 11 10 5 6 7 2 9 1 ] 5279.34 3523.27 846 1694001 922.311 [ 0 1 11 5 3 10 4 6 9 7 8 2 ] 4700.1 3523.27 847 1696001 920.47 [ 0 2 7 10 5 9 1 11 4 6 3 8 ] 4574.95 3523.27 848 1698001 918.633 [ 0 4 6 10 7 9 1 5 3 2 11 8 ] 4714.42 3523.27 849 1700001 916.8 [ 0 2 1 3 11 10 9 6 8 7 5 4 ] 5764.8 3523.27 850 1702001 914.97 [ 0 4 10 7 6 2 8 1 9 3 5 11 ] 4464.1 3523.27 851 1704001 913.143 [ 0 5 9 3 4 7 8 6 1 2 10 11 ] 5116.63 3523.27 852 1706001 911.321 [ 0 10 2 6 8 4 3 1 5 9 11 7 ] 5333.81 3523.27 853 1708001 909.502 [ 0 10 8 2 4 11 1 7 6 5 9 3 ] 4654.16 3523.27 854 1710001 907.686 [ 0 10 2 1 9 8 6 3 11 5 7 4 ] 5573.3 3523.27 855 1712001 905.875 [ 0 2 5 7 6 10 1 4 9 11 8 3 ] 5459.21 3523.27 856 1714001 904.066 [ 0 5 3 10 2 1 8 7 6 4 11 9 ] 5118.23 3523.27 857 1716001 902.262 [ 0 1 3 6 11 8 2 7 4 5 10 9 ] 5921.52 3523.27 858 1718001 900.461 [ 0 10 5 7 4 6 1 11 9 2 3 8 ] 5407.13 3523.27 859 1720001 898.664 [ 0 6 2 10 9 3 5 1 8 4 11 7 ] 4729.73 3523.27 860 1722001 896.87 [ 0 4 1 7 10 6 9 11 2 5 8 3 ] 5271.43 3523.27 861 1724001 895.08 [ 0 2 9 8 3 5 1 10 4 6 11 7 ] 4531.78 3523.27 862 1726001 893.293 [ 0 6 11 9 1 7 4 10 3 8 5 2 ] 4788.14 3523.27 863 1728001 891.51 [ 0 6 2 3 5 8 11 7 1 10 4 9 ] 4266.64 3523.27 864 1730001 889.731 [ 0 3 10 4 1 8 9 5 11 7 6 2 ] 5030.34 3523.27 865 1732001 887.955 [ 0 3 5 4 11 8 10 9 2 1 7 6 ] 4784.27 3523.27 866 1734001 886.182 [ 0 5 3 1 4 2 11 9 7 10 8 6 ] 4665.4 3523.27 867 1736001 884.414 [ 0 4 1 8 2 7 11 5 6 3 10 9 ] 5578.82 3523.27 868 1738001 882.648 [ 0 4 11 2 6 10 7 1 9 5 8 3 ] 4733.37 3523.27 869 1740001 880.887 [ 0 7 3 5 8 2 4 6 11 9 1 10 ] 4771.22 3523.27 870 1742001 879.128 [ 0 10 1 11 7 2 6 4 9 3 8 5 ] 4876.49 3523.27 871 1744001 877.374 [ 0 6 5 7 2 10 3 9 1 8 11 4 ] 5161.07 3523.27 872 1746001 875.622 [ 0 2 7 10 6 8 11 3 5 4 1 9 ] 4735.47 3523.27 873 1748001 873.875 [ 0 8 9 1 11 7 10 2 6 5 4 3 ] 4918.31 3523.27 874 1750001 872.13 [ 0 1 10 6 8 11 2 4 5 9 3 7 ] 5239.45 3523.27 875 1752001 870.39 [ 0 10 7 1 4 9 3 5 6 11 2 8 ] 4618.07 3523.27 876 1754001 868.652 [ 0 5 11 7 2 9 3 6 1 10 4 8 ] 4706.49 3523.27 877 1756001 866.918 [ 0 3 5 4 9 1 10 6 11 2 7 8 ] 4701.71 3523.27 878 1758001 865.188 [ 0 2 4 9 6 5 3 10 1 7 8 11 ] 5012.98 3523.27 879 1760001 863.461 [ 0 7 1 8 9 4 11 2 5 3 6 10 ] 5019.11 3523.27 880 1762001 861.738 [ 0 8 3 6 11 7 1 5 10 4 9 2 ] 5062.75 3523.27 881 1764001 860.018 [ 0 4 3 5 9 1 11 10 6 7 2 8 ] 4154.17 3523.27 882 1766001 858.301 [ 0 5 7 11 9 3 8 10 6 2 4 1 ] 5268.39 3523.27 883 1768001 856.588 [ 0 9 10 4 2 7 8 6 1 5 3 11 ] 5036.37 3523.27 884 1770001 854.878 [ 0 6 4 2 10 11 7 8 5 3 9 1 ] 4369.17 3523.27 885 1772001 853.172 [ 0 10 9 3 6 1 4 8 7 11 2 5 ] 5265.62 3523.27 886 1774001 851.469 [ 0 6 10 2 9 8 3 1 5 11 4 7 ] 5665.74 3523.27 887 1776001 849.769 [ 0 8 5 9 10 1 4 11 7 3 2 6 ] 4753.86 3523.27 888 1778001 848.073 [ 0 2 5 9 4 11 10 1 8 6 3 7 ] 5003.28 3523.27 889 1780001 846.38 [ 0 1 3 5 6 4 10 11 8 9 7 2 ] 4618.79 3523.27 890 1782001 844.691 [ 0 7 8 6 2 5 11 9 3 1 4 10 ] 5116.06 3523.27 891 1784001 843.005 [ 0 1 9 3 11 8 2 6 7 10 5 4 ] 5462.66 3523.27 892 1786001 841.322 [ 0 4 10 5 7 11 3 1 8 6 9 2 ] 5400.19 3523.27 893 1788001 839.643 [ 0 11 3 9 6 7 4 10 2 1 8 5 ] 5320.98 3523.27 894 1790001 837.967 [ 0 5 6 3 8 10 4 7 2 9 11 1 ] 4789.22 3523.27 895 1792001 836.294 [ 0 8 1 6 5 10 7 3 9 4 11 2 ] 5479.87 3523.27 896 1794001 834.625 [ 0 2 3 1 9 4 8 6 7 5 10 11 ] 5438.96 3523.27 897 1796001 832.959 [ 0 10 9 4 11 2 6 1 8 3 5 7 ] 5335.01 3523.27 898 1798001 831.297 [ 0 11 5 2 1 6 9 7 10 4 8 3 ] 5343.66 3523.27 899 1800001 829.637 [ 0 8 7 3 4 11 1 2 10 9 6 5 ] 5363.23 3523.27 900 1802001 827.981 [ 0 10 9 7 11 3 6 2 5 4 1 8 ] 5472.63 3523.27 901 1804001 826.329 [ 0 2 8 6 11 1 7 9 3 5 4 10 ] 4117.78 3523.27 902 1806001 824.679 [ 0 2 6 5 3 11 7 9 10 4 8 1 ] 4703.89 3523.27 903 1808001 823.033 [ 0 8 10 4 1 6 9 11 5 3 7 2 ] 4725.09 3523.27 904 1810001 821.391 [ 0 11 10 7 3 1 5 2 4 8 9 6 ] 5611.85 3523.27 905 1812001 819.751 [ 0 3 11 4 1 5 10 7 6 9 2 8 ] 5466.92 3523.27 906 1814001 818.115 [ 0 3 11 6 10 4 8 2 7 1 9 5 ] 4617.91 3523.27 907 1816001 816.482 [ 0 2 7 10 5 4 1 6 9 8 11 3 ] 5767.18 3523.27 908 1818001 814.852 [ 0 11 8 4 9 7 1 3 5 2 10 6 ] 5007.22 3523.27 909 1820001 813.226 [ 0 6 2 4 10 7 11 9 1 8 3 5 ] 4133.73 3523.27 910 1822001 811.603 [ 0 1 8 3 6 11 7 10 9 2 4 5 ] 5603.88 3523.27 911 1824001 809.983 [ 0 9 11 1 8 5 10 3 6 2 7 4 ] 5439.43 3523.27 912 1826001 808.366 [ 0 7 1 10 2 11 4 5 3 6 9 8 ] 4716.04 3523.27 913 1828001 806.752 [ 0 9 11 7 6 3 2 5 10 1 4 8 ] 5143.6 3523.27 914 1830001 805.142 [ 0 8 10 6 9 4 3 5 1 2 7 11 ] 5108.66 3523.27 915 1832001 803.535 [ 0 6 4 1 9 7 2 11 10 3 5 8 ] 4356.34 3523.27 916 1834001 801.931 [ 0 8 6 10 1 2 3 5 4 11 9 7 ] 4619.72 3523.27 917 1836001 800.33 [ 0 4 7 9 1 8 6 10 11 2 5 3 ] 4505.65 3523.27 918 1838001 798.733 [ 0 9 4 2 8 10 6 3 7 11 1 5 ] 5373.12 3523.27 919 1840001 797.139 [ 0 4 10 3 7 9 2 8 5 6 11 1 ] 5141.13 3523.27 920 1842001 795.548 [ 0 2 1 11 4 10 6 8 7 5 3 9 ] 4221.84 3523.27 921 1844001 793.96 [ 0 10 4 8 6 5 2 7 1 3 11 9 ] 5117.36 3523.27 922 1846001 792.375 [ 0 8 4 2 11 6 1 7 3 9 5 10 ] 5272.1 3523.27 923 1848001 790.793 [ 0 5 3 6 9 4 10 11 1 7 2 8 ] 4076.64 3523.27 924 1850001 789.215 [ 0 5 7 9 1 3 10 4 8 2 11 6 ] 5036.96 3523.27 925 1852001 787.64 [ 0 5 3 7 11 9 2 1 6 10 4 8 ] 4509.84 3523.27 926 1854001 786.068 [ 0 1 3 7 9 5 6 8 4 11 2 10 ] 5293.36 3523.27 927 1856001 784.499 [ 0 1 5 11 3 2 9 8 7 6 4 10 ] 5683.17 3523.27 928 1858001 782.933 [ 0 2 4 7 1 10 9 3 6 5 8 11 ] 5144.53 3523.27 929 1860001 781.37 [ 0 3 1 8 2 9 6 7 11 5 10 4 ] 5412.23 3523.27 930 1862001 779.81 [ 0 8 6 9 1 2 5 4 7 3 10 11 ] 5290.62 3523.27 931 1864001 778.254 [ 0 4 8 2 6 5 1 9 3 7 11 10 ] 4919.8 3523.27 932 1866001 776.7 [ 0 6 10 1 2 11 8 9 7 4 5 3 ] 4790.21 3523.27 933 1868001 775.15 [ 0 6 10 5 2 8 1 4 3 7 9 11 ] 5625.54 3523.27 934 1870001 773.603 [ 0 6 11 10 4 3 1 7 2 5 8 9 ] 5086.14 3523.27 935 1872001 772.059 [ 0 1 9 8 2 11 10 5 3 7 4 6 ] 4746.01 3523.27 936 1874001 770.518 [ 0 9 7 6 1 11 10 4 8 5 3 2 ] 4334.59 3523.27 937 1876001 768.98 [ 0 4 10 1 2 7 11 8 5 9 3 6 ] 4379.53 3523.27 938 1878001 767.445 [ 0 11 5 6 7 8 2 1 10 4 3 9 ] 5174.68 3523.27 939 1880001 765.913 [ 0 6 11 4 3 2 8 1 5 9 7 10 ] 5257.13 3523.27 940 1882001 764.384 [ 0 11 4 8 10 9 7 2 3 1 5 6 ] 5444.97 3523.27 941 1884001 762.859 [ 0 2 3 9 7 11 8 4 5 6 10 1 ] 5133.32 3523.27 942 1886001 761.336 [ 0 5 9 8 7 1 2 3 6 11 4 10 ] 4804.08 3523.27 943 1888001 759.816 [ 0 9 1 3 6 10 2 4 8 11 5 7 ] 5687.05 3523.27 944 1890001 758.3 [ 0 2 7 11 8 9 6 10 5 3 4 1 ] 5111.13 3523.27 945 1892001 756.786 [ 0 10 6 11 7 1 5 9 3 2 4 8 ] 4975.44 3523.27 946 1894001 755.276 [ 0 2 8 1 5 6 11 4 9 10 7 3 ] 5681.48 3523.27 947 1896001 753.768 [ 0 4 10 2 9 11 5 1 7 8 3 6 ] 5108.73 3523.27 948 1898001 752.264 [ 0 4 11 2 1 5 3 9 8 10 6 7 ] 4963.12 3523.27 949 1900001 750.762 [ 0 9 11 5 4 7 10 8 1 3 6 2 ] 5688.29 3523.27 950 1902001 749.263 [ 0 4 8 7 3 11 5 9 2 10 6 1 ] 5787.59 3523.27 951 1904001 747.768 [ 0 5 10 9 7 2 8 11 4 3 6 1 ] 5683.89 3523.27 952 1906001 746.275 [ 0 6 3 11 7 9 4 1 10 5 2 8 ] 5155.52 3523.27 953 1908001 744.786 [ 0 8 2 9 10 4 7 6 3 11 1 5 ] 5024.44 3523.27 954 1910001 743.299 [ 0 10 11 1 7 3 2 5 4 9 6 8 ] 5156.91 3523.27 955 1912001 741.816 [ 0 6 9 2 5 3 11 7 4 8 1 10 ] 4755.97 3523.27 956 1914001 740.335 [ 0 2 8 11 6 10 4 9 5 3 7 1 ] 4608.14 3523.27 957 1916001 738.857 [ 0 2 8 11 1 6 10 7 9 4 5 3 ] 4870.32 3523.27 958 1918001 737.382 [ 0 3 9 2 5 8 10 7 1 4 6 11 ] 5144.32 3523.27 959 1920001 735.911 [ 0 4 9 7 1 11 2 10 8 3 5 6 ] 4565.67 3523.27 960 1922001 734.442 [ 0 7 6 5 9 2 11 3 8 1 4 10 ] 5080.08 3523.27 961 1924001 732.976 [ 0 6 5 1 7 10 4 9 11 2 3 8 ] 4925.95 3523.27 962 1926001 731.513 [ 0 1 10 9 2 11 7 6 8 4 3 5 ] 4805.6 3523.27 963 1928001 730.053 [ 0 11 8 10 9 5 4 6 3 2 1 7 ] 5382.84 3523.27 964 1930001 728.595 [ 0 5 1 3 2 8 6 9 10 7 11 4 ] 5377.84 3523.27 965 1932001 727.141 [ 0 3 6 5 1 10 8 2 11 7 4 9 ] 5255.64 3523.27 966 1934001 725.69 [ 0 5 2 11 4 10 1 9 7 8 3 6 ] 4480.02 3523.27 967 1936001 724.241 [ 0 8 1 7 6 9 4 5 3 2 10 11 ] 5026.15 3523.27 968 1938001 722.796 [ 0 6 3 5 2 7 10 8 11 4 9 1 ] 4614.39 3523.27 969 1940001 721.353 [ 0 7 4 5 9 3 6 2 8 10 11 1 ] 4816.04 3523.27 970 1942001 719.913 [ 0 8 11 10 6 1 4 3 5 2 9 7 ] 4858.83 3523.27 971 1944001 718.476 [ 0 1 5 4 8 3 6 9 2 7 10 11 ] 5509.07 3523.27 972 1946001 717.042 [ 0 11 4 8 5 2 3 9 6 10 7 1 ] 5259.96 3523.27 973 1948001 715.611 [ 0 8 2 9 7 1 4 11 10 6 5 3 ] 4284.65 3523.27 974 1950001 714.183 [ 0 5 3 6 9 10 1 4 8 2 7 11 ] 4637.84 3523.27 975 1952001 712.757 [ 0 8 6 2 1 10 3 4 9 7 11 5 ] 5367.8 3523.27 976 1954001 711.334 [ 0 5 2 8 6 9 3 11 4 1 7 10 ] 5044.23 3523.27 977 1956001 709.915 [ 0 8 2 3 5 7 1 10 4 11 9 6 ] 4157.44 3523.27 978 1958001 708.498 [ 0 6 10 4 7 1 11 5 3 2 8 9 ] 4366.31 3523.27 979 1960001 707.083 [ 0 10 7 3 1 8 6 2 5 4 11 9 ] 5592.08 3523.27 980 1962001 705.672 [ 0 7 11 4 9 8 3 5 2 6 1 10 ] 4873.95 3523.27 981 1964001 704.264 [ 0 8 3 7 11 6 4 1 2 10 5 9 ] 5289.9 3523.27 982 1966001 702.858 [ 0 5 6 11 10 8 9 7 4 2 1 3 ] 5401.45 3523.27 983 1968001 701.455 [ 0 11 1 9 2 4 7 3 10 5 8 6 ] 5145.78 3523.27 984 1970001 700.055 [ 0 1 7 4 10 8 9 11 5 3 6 2 ] 4633.67 3523.27 985 1972001 698.657 [ 0 6 5 10 1 2 3 7 4 9 8 11 ] 5590.49 3523.27 986 1974001 697.263 [ 0 5 7 10 11 9 3 6 2 4 1 8 ] 5061.88 3523.27 987 1976001 695.871 [ 0 1 11 10 8 7 9 4 2 6 5 3 ] 4679.09 3523.27 988 1978001 694.482 [ 0 10 7 9 8 4 3 5 11 6 1 2 ] 5272.83 3523.27 989 1980001 693.096 [ 0 5 8 11 4 10 6 7 2 9 3 1 ] 5082.03 3523.27 990 1982001 691.713 [ 0 4 3 9 2 7 5 8 10 6 11 1 ] 5392.91 3523.27 991 1984001 690.332 [ 0 8 5 2 10 4 11 6 7 1 3 9 ] 4978.01 3523.27 992 1986001 688.954 [ 0 8 4 2 6 1 11 10 7 9 5 3 ] 4236.25 3523.27 993 1988001 687.579 [ 0 5 7 3 11 9 1 4 10 6 8 2 ] 4957.47 3523.27 994 1990001 686.206 [ 0 1 11 2 3 6 10 5 9 4 8 7 ] 5332.21 3523.27 995 1992001 684.837 [ 0 2 1 11 10 4 6 8 5 9 7 3 ] 4463.63 3523.27 996 1994001 683.47 [ 0 6 10 3 5 7 11 8 4 1 2 9 ] 4879.73 3523.27 997 1996001 682.106 [ 0 6 9 10 1 5 2 8 4 7 3 11 ] 5626.14 3523.27 998 1998001 680.744 [ 0 9 7 3 6 4 11 2 1 10 5 8 ] 5305.65 3523.27 999 2000001 679.385 [ 0 5 7 6 1 9 11 2 3 8 4 10 ] 5089.6 3523.27 1000 2002001 678.029 [ 0 5 3 1 8 2 11 6 7 10 4 9 ] 4927.95 3523.27 1001 2004001 676.676 [ 0 11 4 10 2 5 3 7 1 6 8 9 ] 4685.74 3523.27 1002 2006001 675.325 [ 0 2 1 7 11 6 9 3 8 4 10 5 ] 4875.92 3523.27 1003 2008001 673.977 [ 0 7 4 10 11 6 2 3 5 1 9 8 ] 4359.11 3523.27 1004 2010001 672.632 [ 0 8 2 11 7 5 9 3 1 10 4 6 ] 4481.9 3523.27 1005 2012001 671.29 [ 0 5 1 6 11 8 3 4 10 7 2 9 ] 5397.38 3523.27 1006 2014001 669.95 [ 0 4 6 3 10 7 1 8 2 5 11 9 ] 5593.52 3523.27 1007 2016001 668.612 [ 0 6 11 4 7 3 8 9 2 1 10 5 ] 5331.24 3523.27 1008 2018001 667.278 [ 0 2 9 3 1 8 10 4 11 5 6 7 ] 5165.28 3523.27 1009 2020001 665.946 [ 0 1 2 9 10 7 3 8 11 4 6 5 ] 5528.72 3523.27 1010 2022001 664.617 [ 0 9 7 11 10 4 1 3 6 8 2 5 ] 4719 3523.27 1011 2024001 663.29 [ 0 3 11 6 2 7 1 4 8 5 9 10 ] 5232.63 3523.27 1012 2026001 661.966 [ 0 5 8 1 10 11 2 4 7 9 6 3 ] 5162.63 3523.27 1013 2028001 660.645 [ 0 5 7 9 6 8 10 1 4 11 3 2 ] 5206.58 3523.27 1014 2030001 659.326 [ 0 8 11 4 6 2 1 10 9 5 3 7 ] 4629.24 3523.27 1015 2032001 658.01 [ 0 10 3 6 8 4 5 7 2 9 11 1 ] 5406.07 3523.27 1016 2034001 656.697 [ 0 6 11 2 9 10 4 3 7 1 5 8 ] 5210.48 3523.27 1017 2036001 655.386 [ 0 6 10 9 2 8 11 7 4 1 3 5 ] 4758.13 3523.27 1018 2038001 654.078 [ 0 6 5 10 11 4 1 9 3 8 2 7 ] 4707.51 3523.27 1019 2040001 652.772 [ 0 6 1 3 7 9 5 11 4 8 2 10 ] 5406.96 3523.27 1020 2042001 651.469 [ 0 6 5 2 1 9 10 4 8 7 11 3 ] 4821.16 3523.27 1021 2044001 650.169 [ 0 1 5 8 2 9 6 10 3 11 4 7 ] 5795.37 3523.27 1022 2046001 648.871 [ 0 3 6 4 11 1 2 7 5 8 10 9 ] 5265.93 3523.27 1023 2048001 647.576 [ 0 11 5 10 8 1 9 3 7 6 4 2 ] 5567.32 3523.27 1024 2050001 646.284 [ 0 5 7 1 3 8 6 9 2 10 11 4 ] 5236.17 3523.27 1025 2052001 644.994 [ 0 5 3 6 10 1 11 4 9 8 7 2 ] 4547.48 3523.27 1026 2054001 643.706 [ 0 11 3 7 9 5 6 1 2 4 8 10 ] 5558.84 3523.27 1027 2056001 642.421 [ 0 5 11 10 4 8 3 1 9 2 7 6 ] 4804.06 3523.27 1028 2058001 641.139 [ 0 9 2 6 3 7 5 11 4 1 10 8 ] 5308.5 3523.27 1029 2060001 639.859 [ 0 5 3 7 1 11 8 9 2 6 10 4 ] 4397.97 3523.27 1030 2062001 638.582 [ 0 6 9 3 10 1 7 5 4 2 8 11 ] 5362.06 3523.27 1031 2064001 637.308 [ 0 2 3 5 11 7 6 8 9 1 10 4 ] 4239.07 3523.27 1032 2066001 636.036 [ 0 10 1 8 2 4 7 9 3 5 11 6 ] 4777.29 3523.27 1033 2068001 634.766 [ 0 10 8 2 11 4 3 5 6 7 1 9 ] 4624.68 3523.27 1034 2070001 633.499 [ 0 7 11 2 5 3 1 6 8 9 4 10 ] 4831.82 3523.27 1035 2072001 632.235 [ 0 10 4 6 3 1 11 2 8 9 5 7 ] 4955.31 3523.27 1036 2074001 630.973 [ 0 8 6 4 7 2 1 9 11 10 5 3 ] 4409.39 3523.27 1037 2076001 629.713 [ 0 8 3 2 9 5 6 10 4 11 7 1 ] 4535.04 3523.27 1038 2078001 628.456 [ 0 7 9 5 3 1 11 6 8 10 4 2 ] 4239.83 3523.27 1039 2080001 627.202 [ 0 8 4 11 5 1 7 2 6 10 3 9 ] 5326.68 3523.27 1040 2082001 625.95 [ 0 1 10 5 7 4 11 8 2 3 6 9 ] 5527.65 3523.27 1041 2084001 624.701 [ 0 7 11 6 4 8 2 1 10 3 9 5 ] 4962.17 3523.27 1042 2086001 623.454 [ 0 1 4 7 5 11 10 8 2 9 3 6 ] 5178.28 3523.27 1043 2088001 622.209 [ 0 5 3 10 9 1 6 2 11 7 8 4 ] 4828.17 3523.27 1044 2090001 620.967 [ 0 5 6 11 7 1 10 9 3 4 8 2 ] 5014.14 3523.27 1045 2092001 619.728 [ 0 3 2 1 4 10 11 8 7 6 5 9 ] 4770 3523.27 1046 2094001 618.491 [ 0 11 4 6 1 7 10 2 5 9 3 8 ] 4956.74 3523.27 1047 2096001 617.256 [ 0 2 4 10 6 7 8 9 3 5 11 1 ] 4613.22 3523.27 1048 2098001 616.024 [ 0 5 11 4 7 6 10 8 3 1 2 9 ] 5608.19 3523.27 1049 2100001 614.795 [ 0 5 11 10 9 3 7 6 8 2 1 4 ] 5323.09 3523.27 1050 2102001 613.568 [ 0 7 10 4 2 11 1 8 9 6 3 5 ] 4531.26 3523.27 1051 2104001 612.343 [ 0 6 5 8 9 3 7 2 1 11 10 4 ] 4618.83 3523.27 1052 2106001 611.121 [ 0 3 11 2 7 10 9 6 5 4 8 1 ] 5781.88 3523.27 1053 2108001 609.901 [ 0 3 9 5 6 2 1 4 10 11 7 8 ] 4283.89 3523.27 1054 2110001 608.683 [ 0 6 11 1 10 4 7 2 9 5 8 3 ] 4383.18 3523.27 1055 2112001 607.469 [ 0 10 4 3 5 6 7 1 11 2 8 9 ] 4474.64 3523.27 1056 2114001 606.256 [ 0 2 5 6 1 7 4 8 3 9 10 11 ] 5194.15 3523.27 1057 2116001 605.046 [ 0 6 1 9 5 3 7 10 8 11 2 4 ] 4584.35 3523.27 1058 2118001 603.838 [ 0 9 5 3 2 6 1 7 8 4 11 10 ] 4490.62 3523.27 1059 2120001 602.633 [ 0 8 1 10 7 6 2 9 3 4 5 11 ] 5458.56 3523.27 1060 2122001 601.43 [ 0 3 9 6 2 10 1 4 11 7 8 5 ] 4882.68 3523.27 1061 2124001 600.23 [ 0 6 11 9 2 5 1 8 7 4 3 10 ] 5751.41 3523.27 1062 2126001 599.032 [ 0 10 2 4 6 5 11 8 7 9 1 3 ] 5501.73 3523.27 1063 2128001 597.836 [ 0 10 4 2 11 3 5 7 6 9 1 8 ] 4741.39 3523.27 1064 2130001 596.643 [ 0 3 5 9 7 1 11 6 10 4 2 8 ] 3990.7 3523.27 1065 2132001 595.452 [ 0 5 2 7 11 10 6 3 9 1 4 8 ] 4570.34 3523.27 1066 2134001 594.263 [ 0 7 9 1 6 2 3 10 11 8 5 4 ] 5385.77 3523.27 1067 2136001 593.077 [ 0 9 3 4 10 1 5 2 8 6 7 11 ] 4932.04 3523.27 1068 2138001 591.893 [ 0 11 1 2 8 5 6 7 9 4 10 3 ] 5104.65 3523.27 1069 2140001 590.712 [ 0 7 2 8 5 3 9 4 6 1 10 11 ] 4751.43 3523.27 1070 2142001 589.533 [ 0 11 9 10 8 3 2 6 5 4 7 1 ] 5544.14 3523.27 1071 2144001 588.356 [ 0 2 9 5 8 7 11 6 3 1 10 4 ] 4738.89 3523.27 1072 2146001 587.182 [ 0 7 5 4 6 9 1 10 8 11 2 3 ] 5332.6 3523.27 1073 2148001 586.01 [ 0 11 10 6 5 3 9 4 1 7 2 8 ] 4474.57 3523.27 1074 2150001 584.84 [ 0 5 11 10 2 1 4 9 8 7 3 6 ] 5502.6 3523.27 1075 2152001 583.673 [ 0 6 3 11 2 7 4 10 8 1 9 5 ] 4637.01 3523.27 1076 2154001 582.508 [ 0 7 2 11 10 1 9 4 6 5 3 8 ] 4428.12 3523.27 1077 2156001 581.345 [ 0 3 8 6 2 7 9 1 11 4 10 5 ] 4439.03 3523.27 1078 2158001 580.185 [ 0 2 3 5 8 6 11 1 9 10 7 4 ] 4473.63 3523.27 1079 2160001 579.027 [ 0 3 1 7 9 2 4 10 6 5 8 11 ] 5123.77 3523.27 1080 2162001 577.871 [ 0 4 7 1 8 11 10 6 3 9 5 2 ] 4893.21 3523.27 1081 2164001 576.717 [ 0 2 9 5 6 7 8 1 11 3 4 10 ] 4967.56 3523.27 1082 2166001 575.566 [ 0 7 5 8 9 6 2 11 4 1 3 10 ] 5739.69 3523.27 1083 2168001 574.417 [ 0 3 5 9 6 2 8 10 1 7 11 4 ] 4194.42 3523.27 1084 2170001 573.271 [ 0 7 1 3 10 11 9 5 6 8 2 4 ] 5102.21 3523.27 1085 2172001 572.127 [ 0 1 2 6 9 11 4 8 10 5 7 3 ] 5669.18 3523.27 1086 2174001 570.985 [ 0 2 9 11 7 1 4 10 8 3 5 6 ] 4065.51 3523.27 1087 2176001 569.845 [ 0 10 11 9 8 1 4 7 2 3 6 5 ] 5223.36 3523.27 1088 2178001 568.708 [ 0 4 2 7 3 11 6 9 1 8 5 10 ] 5753.51 3523.27 1089 2180001 567.572 [ 0 7 8 3 9 1 10 11 5 2 4 6 ] 4925.85 3523.27 1090 2182001 566.44 [ 0 4 8 6 11 10 1 9 7 2 3 5 ] 4284.2 3523.27 1091 2184001 565.309 [ 0 4 1 11 10 5 9 2 8 6 7 3 ] 4861.59 3523.27 1092 2186001 564.181 [ 0 6 4 9 7 1 5 3 10 11 2 8 ] 4733.35 3523.27 1093 2188001 563.054 [ 0 2 8 10 7 11 1 5 9 4 6 3 ] 4906.04 3523.27 1094 2190001 561.931 [ 0 7 11 4 6 1 3 9 5 2 10 8 ] 5055.7 3523.27 1095 2192001 560.809 [ 0 4 10 7 11 1 9 3 5 6 8 2 ] 3688.64 3523.27 1096 2194001 559.69 [ 0 4 8 2 6 1 11 3 5 9 10 7 ] 4734.25 3523.27 1097 2196001 558.572 [ 0 11 1 8 9 2 6 7 3 10 5 4 ] 5790.47 3523.27 1098 2198001 557.458 [ 0 11 7 5 9 4 1 10 8 2 3 6 ] 4965.83 3523.27 1099 2200001 556.345 [ 0 7 8 9 4 6 5 2 1 10 11 3 ] 5464.8 3523.27 1100 2202001 555.234 [ 0 2 5 9 1 7 3 8 11 10 4 6 ] 4414.39 3523.27 1101 2204001 554.126 [ 0 4 2 7 11 10 1 3 5 9 6 8 ] 4296.35 3523.27 1102 2206001 553.02 [ 0 2 3 11 10 8 9 1 6 5 7 4 ] 5365.3 3523.27 1103 2208001 551.916 [ 0 2 7 4 10 3 6 1 9 11 5 8 ] 5020.08 3523.27 1104 2210001 550.815 [ 0 2 3 5 6 11 7 1 8 9 10 4 ] 4592.29 3523.27 1105 2212001 549.715 [ 0 11 10 6 3 5 2 7 1 9 8 4 ] 4519 3523.27 1106 2214001 548.618 [ 0 2 3 9 11 10 7 1 5 4 8 6 ] 4906.06 3523.27 1107 2216001 547.523 [ 0 10 6 5 3 9 2 11 8 7 4 1 ] 4832.89 3523.27 1108 2218001 546.43 [ 0 9 3 8 6 4 10 2 11 5 7 1 ] 5182.93 3523.27 1109 2220001 545.339 [ 0 4 10 5 11 7 8 9 2 3 6 1 ] 5440.03 3523.27 1110 2222001 544.251 [ 0 7 2 11 8 6 3 1 9 4 10 5 ] 5092.71 3523.27 1111 2224001 543.165 [ 0 9 5 2 1 10 11 8 7 3 4 6 ] 5129.06 3523.27 1112 2226001 542.08 [ 0 1 10 4 5 6 11 8 9 2 3 7 ] 5356.97 3523.27 1113 2228001 540.998 [ 0 7 10 2 5 6 11 9 4 3 8 1 ] 5855.56 3523.27 1114 2230001 539.919 [ 0 7 6 1 2 11 8 3 4 10 5 9 ] 5359.61 3523.27 1115 2232001 538.841 [ 0 3 1 11 5 4 10 6 7 9 2 8 ] 5070.24 3523.27 1116 2234001 537.765 [ 0 2 11 6 7 8 3 9 5 1 10 4 ] 4823.88 3523.27 1117 2236001 536.692 [ 0 3 5 9 6 8 2 7 1 10 4 11 ] 3959.09 3523.27 1118 2238001 535.621 [ 0 3 4 1 7 2 5 9 6 8 10 11 ] 4946.5 3523.27 1119 2240001 534.552 [ 0 11 1 10 6 3 5 8 2 7 4 9 ] 4684.6 3523.27 1120 2242001 533.485 [ 0 5 3 7 6 8 4 9 1 11 2 10 ] 4641.75 3523.27 1121 2244001 532.42 [ 0 7 4 11 6 9 2 1 10 8 3 5 ] 4758.49 3523.27 1122 2246001 531.357 [ 0 7 8 3 5 10 1 4 6 11 9 2 ] 4867.94 3523.27 1123 2248001 530.296 [ 0 10 6 7 1 4 3 5 8 2 11 9 ] 4931.32 3523.27 1124 2250001 529.238 [ 0 6 7 5 10 2 9 1 11 4 3 8 ] 5046.79 3523.27 1125 2252001 528.182 [ 0 2 7 10 4 6 3 9 5 8 1 11 ] 4547.4 3523.27 1126 2254001 527.127 [ 0 11 8 5 2 9 4 3 7 6 1 10 ] 5823.99 3523.27 1127 2256001 526.075 [ 0 11 9 10 8 2 7 5 3 1 4 6 ] 5015.24 3523.27 1128 2258001 525.025 [ 0 5 3 4 6 9 8 1 7 10 11 2 ] 4844.98 3523.27 1129 2260001 523.977 [ 0 8 4 6 9 1 7 11 10 3 5 2 ] 4356.97 3523.27 1130 2262001 522.931 [ 0 5 9 3 2 1 7 6 11 4 8 10 ] 4952.6 3523.27 1131 2264001 521.888 [ 0 2 5 3 4 9 7 1 8 6 11 10 ] 4885.31 3523.27 1132 2266001 520.846 [ 0 4 5 8 9 1 11 7 10 2 6 3 ] 4924.77 3523.27 1133 2268001 519.806 [ 0 5 2 7 1 6 4 10 8 9 11 3 ] 5172.97 3523.27 1134 2270001 518.769 [ 0 5 10 8 1 11 7 6 9 2 3 4 ] 5397.06 3523.27 1135 2272001 517.733 [ 0 4 9 2 5 3 6 10 8 11 7 1 ] 4886.83 3523.27 1136 2274001 516.7 [ 0 1 10 2 6 8 9 4 11 7 3 5 ] 4791.25 3523.27 1137 2276001 515.669 [ 0 10 6 4 8 11 2 9 1 7 3 5 ] 4680.93 3523.27 1138 2278001 514.639 [ 0 8 5 9 2 3 10 6 4 7 1 11 ] 4965.18 3523.27 1139 2280001 513.612 [ 0 11 8 9 7 1 10 2 5 4 3 6 ] 5367.37 3523.27 1140 2282001 512.587 [ 0 6 1 4 5 3 11 7 9 2 8 10 ] 4841.72 3523.27 1141 2284001 511.564 [ 0 6 9 4 5 10 7 11 1 3 8 2 ] 5323.46 3523.27 1142 2286001 510.543 [ 0 11 7 3 9 6 5 8 10 4 1 2 ] 4918.85 3523.27 1143 2288001 509.524 [ 0 4 11 10 9 2 8 3 7 1 5 6 ] 5171.37 3523.27 1144 2290001 508.507 [ 0 5 7 2 6 11 10 8 1 9 3 4 ] 5171.03 3523.27 1145 2292001 507.492 [ 0 8 6 3 5 11 1 10 4 7 9 2 ] 4059.34 3523.27 1146 2294001 506.479 [ 0 5 11 10 7 3 6 8 4 2 1 9 ] 5160.61 3523.27 1147 2296001 505.468 [ 0 7 5 4 9 6 8 10 1 3 11 2 ] 5766.21 3523.27 1148 2298001 504.459 [ 0 9 5 3 1 10 6 8 11 7 2 4 ] 4565.7 3523.27 1149 2300001 503.452 [ 0 7 3 5 9 4 10 6 11 2 1 8 ] 4705.12 3523.27 1150 2302001 502.447 [ 0 10 7 9 3 5 4 1 6 2 8 11 ] 4880.4 3523.27 1151 2304001 501.444 [ 0 3 4 8 10 9 5 6 1 7 11 2 ] 5131.37 3523.27 1152 2306001 500.443 [ 0 8 2 1 9 5 3 11 10 7 6 4 ] 4389.06 3523.27 1153 2308001 499.444 [ 0 8 3 9 1 4 5 6 10 2 11 7 ] 4945.16 3523.27 1154 2310001 498.447 [ 0 8 10 5 9 3 1 11 4 2 6 7 ] 4971.35 3523.27 1155 2312001 497.453 [ 0 2 7 1 6 8 4 10 9 3 5 11 ] 4552.5 3523.27 1156 2314001 496.46 [ 0 11 10 4 5 2 1 8 6 9 7 3 ] 5185.79 3523.27 1157 2316001 495.469 [ 0 4 6 8 1 5 3 2 11 9 10 7 ] 5099.88 3523.27 1158 2318001 494.48 [ 0 8 5 3 11 10 4 1 9 7 2 6 ] 4010.39 3523.27 1159 2320001 493.493 [ 0 7 9 6 2 1 8 3 5 11 10 4 ] 4721.39 3523.27 1160 2322001 492.508 [ 0 11 7 6 4 5 9 3 10 1 2 8 ] 5015.9 3523.27 1161 2324001 491.525 [ 0 4 10 7 2 9 1 6 3 11 5 8 ] 5043.17 3523.27 1162 2326001 490.544 [ 0 9 1 11 5 3 6 2 7 10 8 4 ] 4505.58 3523.27 1163 2328001 489.564 [ 0 11 10 6 7 9 5 4 8 2 3 1 ] 5390.16 3523.27 1164 2330001 488.587 [ 0 1 9 5 11 2 7 8 6 4 10 3 ] 4888.07 3523.27 1165 2332001 487.612 [ 0 2 1 11 6 4 10 9 5 8 3 7 ] 4952.94 3523.27 1166 2334001 486.639 [ 0 3 5 9 6 4 10 2 11 1 7 8 ] 4050.53 3523.27 1167 2336001 485.667 [ 0 9 7 2 5 8 10 3 11 1 4 6 ] 5263.05 3523.27 1168 2338001 484.698 [ 0 8 4 1 2 3 7 10 5 6 11 9 ] 5477.46 3523.27 1169 2340001 483.731 [ 0 2 4 9 3 5 10 1 11 7 8 6 ] 4332.38 3523.27 1170 2342001 482.765 [ 0 7 1 8 11 9 5 3 10 4 6 2 ] 4458.13 3523.27 1171 2344001 481.801 [ 0 2 4 5 7 6 3 8 1 11 10 9 ] 5468.64 3523.27 1172 2346001 480.84 [ 0 10 9 1 11 7 6 8 5 3 4 2 ] 4528.52 3523.27 1173 2348001 479.88 [ 0 5 3 2 7 9 8 6 11 1 4 10 ] 4280.36 3523.27 1174 2350001 478.922 [ 0 5 9 2 6 11 3 1 8 7 10 4 ] 5165.89 3523.27 1175 2352001 477.966 [ 0 6 8 11 10 1 7 4 2 3 9 5 ] 4503.01 3523.27 1176 2354001 477.012 [ 0 5 7 2 1 6 10 11 8 3 4 9 ] 5732.77 3523.27 1177 2356001 476.06 [ 0 3 11 8 6 5 10 2 4 7 9 1 ] 5419.28 3523.27 1178 2358001 475.11 [ 0 1 3 10 7 8 11 2 4 6 5 9 ] 5587.89 3523.27 1179 2360001 474.162 [ 0 10 1 5 7 2 4 3 6 11 9 8 ] 5595.39 3523.27 1180 2362001 473.215 [ 0 6 7 5 10 11 1 3 9 2 4 8 ] 5071.43 3523.27 1181 2364001 472.271 [ 0 5 3 6 2 1 9 7 11 4 10 8 ] 3950.38 3523.27 1182 2366001 471.328 [ 0 4 1 10 5 3 8 7 6 2 9 11 ] 4884.88 3523.27 1183 2368001 470.387 [ 0 8 4 9 1 3 10 11 7 5 6 2 ] 5167.44 3523.27 1184 2370001 469.448 [ 0 7 2 6 9 1 3 5 8 10 4 11 ] 4466.27 3523.27 1185 2372001 468.511 [ 0 3 8 9 11 4 1 6 7 10 5 2 ] 5460.42 3523.27 1186 2374001 467.576 [ 0 6 11 4 5 10 1 8 7 2 9 3 ] 5187.95 3523.27 1187 2376001 466.643 [ 0 4 11 2 6 3 9 1 7 5 8 10 ] 4942.57 3523.27 1188 2378001 465.711 [ 0 2 1 7 4 10 6 3 8 11 9 5 ] 4722.77 3523.27 1189 2380001 464.782 [ 0 3 8 7 4 9 1 10 11 6 5 2 ] 5012.7 3523.27 1190 2382001 463.854 [ 0 9 1 3 8 4 10 2 11 5 7 6 ] 5210.95 3523.27 1191 2384001 462.928 [ 0 1 2 10 4 11 8 7 6 9 3 5 ] 4613.19 3523.27 1192 2386001 462.004 [ 0 9 4 1 5 3 2 7 10 8 11 6 ] 4994.3 3523.27 1193 2388001 461.082 [ 0 11 2 4 5 6 8 9 3 7 1 10 ] 5271.76 3523.27 1194 2390001 460.162 [ 0 4 10 11 2 5 3 6 9 1 8 7 ] 4408.47 3523.27 1195 2392001 459.243 [ 0 10 7 2 3 11 5 8 9 1 6 4 ] 5604.81 3523.27 1196 2394001 458.327 [ 0 1 9 4 10 5 3 2 7 8 6 11 ] 4697.35 3523.27 1197 2396001 457.412 [ 0 9 5 8 11 6 1 10 4 3 7 2 ] 5104.23 3523.27 1198 2398001 456.499 [ 0 11 6 10 1 2 9 8 7 4 5 3 ] 5010.65 3523.27 1199 2400001 455.588 [ 0 7 6 10 1 3 4 11 5 2 8 9 ] 5712.4 3523.27 1200 2402001 454.678 [ 0 7 3 2 11 10 5 6 4 9 8 1 ] 5828.44 3523.27 1201 2404001 453.771 [ 0 1 3 2 6 7 11 9 10 4 5 8 ] 5276.91 3523.27 1202 2406001 452.865 [ 0 11 10 5 8 6 4 2 1 3 9 7 ] 5395.09 3523.27 1203 2408001 451.961 [ 0 4 5 3 1 7 10 9 2 11 6 8 ] 4921.46 3523.27 1204 2410001 451.059 [ 0 1 3 8 6 9 2 7 5 11 10 4 ] 5314.66 3523.27 1205 2412001 450.159 [ 0 2 3 7 6 5 1 4 9 11 10 8 ] 5385.29 3523.27 1206 2414001 449.26 [ 0 6 10 2 7 5 8 11 9 1 4 3 ] 5233.2 3523.27 1207 2416001 448.363 [ 0 7 4 6 8 10 11 1 2 9 5 3 ] 4227.73 3523.27 1208 2418001 447.468 [ 0 3 5 6 1 2 4 9 8 10 11 7 ] 4921.76 3523.27 1209 2420001 446.575 [ 0 1 6 2 10 4 11 3 5 9 7 8 ] 4508.79 3523.27 1210 2422001 445.684 [ 0 10 5 3 9 11 4 8 6 2 7 1 ] 4612.9 3523.27 1211 2424001 444.794 [ 0 4 9 2 1 10 6 11 7 3 5 8 ] 4851.82 3523.27 1212 2426001 443.907 [ 0 3 11 4 1 7 8 2 9 5 6 10 ] 5012.95 3523.27 1213 2428001 443.02 [ 0 3 10 11 8 1 5 6 4 9 2 7 ] 5627.73 3523.27 1214 2430001 442.136 [ 0 4 5 6 7 9 11 10 1 3 2 8 ] 5200.98 3523.27 1215 2432001 441.254 [ 0 10 9 11 1 5 3 4 8 7 2 6 ] 4825.63 3523.27 1216 2434001 440.373 [ 0 8 9 4 6 11 7 10 1 5 3 2 ] 4826.68 3523.27 1217 2436001 439.494 [ 0 1 11 4 2 7 5 3 9 8 10 6 ] 4619.08 3523.27 1218 2438001 438.617 [ 0 9 1 11 10 2 4 5 3 7 6 8 ] 4485.17 3523.27 1219 2440001 437.741 [ 0 5 3 4 10 9 6 1 11 8 2 7 ] 4689.62 3523.27 1220 2442001 436.867 [ 0 5 8 2 3 11 9 1 4 10 7 6 ] 4766.09 3523.27 1221 2444001 435.996 [ 0 10 1 8 9 3 5 4 6 2 11 7 ] 4778.55 3523.27 1222 2446001 435.125 [ 0 10 11 1 8 6 9 4 7 2 5 3 ] 4659.22 3523.27 1223 2448001 434.257 [ 0 1 9 3 7 2 8 10 11 5 4 6 ] 5148.14 3523.27 1224 2450001 433.39 [ 0 7 10 11 8 6 9 3 5 4 1 2 ] 4624.75 3523.27 1225 2452001 432.525 [ 0 8 11 10 2 3 1 7 6 9 4 5 ] 5513.28 3523.27 1226 2454001 431.662 [ 0 9 4 10 7 2 3 5 8 6 1 11 ] 4530.06 3523.27 1227 2456001 430.8 [ 0 6 2 1 11 10 5 3 9 7 8 4 ] 4381.82 3523.27 1228 2458001 429.94 [ 0 3 7 4 10 1 6 9 5 11 8 2 ] 5038.29 3523.27 1229 2460001 429.082 [ 0 5 3 11 7 4 6 8 10 1 2 9 ] 4663.06 3523.27 1230 2462001 428.225 [ 0 11 5 3 8 4 9 6 10 2 1 7 ] 5242.51 3523.27 1231 2464001 427.371 [ 0 3 2 9 8 1 10 4 7 11 5 6 ] 4885.58 3523.27 1232 2466001 426.518 [ 0 1 10 4 7 6 9 5 2 8 3 11 ] 5087.1 3490.62 1233 2468001 425.666 [ 0 6 5 3 10 1 11 9 4 7 2 8 ] 4462.94 3490.62 1234 2470001 424.817 [ 0 2 8 7 9 5 3 10 4 11 1 6 ] 4091.58 3490.62 1235 2472001 423.969 [ 0 11 7 1 2 6 8 3 4 10 5 9 ] 4856.31 3490.62 1236 2474001 423.123 [ 0 5 3 6 11 2 10 4 1 9 7 8 ] 4244.88 3490.62 1237 2476001 422.278 [ 0 1 7 2 11 3 5 9 4 10 8 6 ] 4355.87 3490.62 1238 2478001 421.435 [ 0 7 8 3 5 9 10 6 1 4 2 11 ] 5003.8 3490.62 1239 2480001 420.594 [ 0 11 1 4 10 3 9 5 8 2 7 6 ] 4521.47 3490.62 1240 2482001 419.754 [ 0 8 10 11 1 2 6 9 3 5 7 4 ] 4462.25 3490.62 1241 2484001 418.917 [ 0 2 6 10 4 1 5 8 7 11 9 3 ] 4815.65 3490.62 1242 2486001 418.08 [ 0 6 10 1 11 9 5 3 8 2 7 4 ] 4183.05 3490.62 1243 2488001 417.246 [ 0 8 7 5 9 4 3 2 1 6 10 11 ] 5503.09 3490.62 1244 2490001 416.413 [ 0 3 5 6 8 10 4 7 1 9 2 11 ] 4113.45 3490.62 1245 2492001 415.582 [ 0 5 3 1 7 10 4 8 9 11 2 6 ] 4404.66 3490.62 1246 2494001 414.752 [ 0 8 2 11 4 1 6 10 9 7 3 5 ] 4880.97 3490.62 1247 2496001 413.925 [ 0 6 11 8 2 4 10 3 7 9 5 1 ] 5231.07 3490.62 1248 2498001 413.098 [ 0 11 7 3 9 10 2 4 6 8 1 5 ] 5529.19 3490.62 1249 2500001 412.274 [ 0 1 7 9 3 5 10 11 2 8 4 6 ] 4534.98 3490.62 1250 2502001 411.451 [ 0 4 3 5 2 9 8 11 1 10 6 7 ] 4846.9 3490.62 1251 2504001 410.63 [ 0 11 9 4 2 5 8 3 7 6 1 10 ] 5748.72 3490.62 1252 2506001 409.81 [ 0 4 2 11 1 8 5 3 7 10 6 9 ] 4989.64 3490.62 1253 2508001 408.992 [ 0 5 8 7 10 1 3 2 11 4 6 9 ] 5354.84 3490.62 1254 2510001 408.176 [ 0 1 4 10 7 2 11 9 8 3 5 6 ] 4456.16 3490.62 1255 2512001 407.361 [ 0 7 3 11 8 6 9 5 1 10 4 2 ] 5092.91 3490.62 1256 2514001 406.548 [ 0 4 5 11 8 6 3 1 10 9 2 7 ] 5605.43 3490.62 1257 2516001 405.736 [ 0 4 7 2 6 8 1 9 5 11 3 10 ] 5317.17 3490.62 1258 2518001 404.927 [ 0 11 7 1 3 9 5 6 8 10 4 2 ] 4554.16 3490.62 1259 2520001 404.118 [ 0 2 9 5 3 7 8 6 11 1 4 10 ] 4147.9 3490.62 1260 2522001 403.312 [ 0 4 10 9 2 8 11 1 7 5 3 6 ] 4300.93 3490.62 1261 2524001 402.507 [ 0 2 8 1 11 7 6 4 10 9 3 5 ] 4239.83 3490.62 1262 2526001 401.703 [ 0 3 5 8 7 4 10 11 9 1 2 6 ] 4066.6 3490.62 1263 2528001 400.902 [ 0 5 3 7 2 6 11 4 10 1 9 8 ] 4173.77 3490.62 1264 2530001 400.101 [ 0 9 1 11 2 4 6 10 8 7 5 3 ] 4660.63 3490.62 1265 2532001 399.303 [ 0 10 3 6 8 1 2 4 7 5 11 9 ] 5808.99 3490.62 1266 2534001 398.506 [ 0 7 2 5 8 1 9 11 4 3 6 10 ] 5304.43 3490.62 1267 2536001 397.71 [ 0 2 1 7 5 3 9 4 6 10 11 8 ] 4691.54 3490.62 1268 2538001 396.916 [ 0 8 5 10 4 6 9 3 2 1 7 11 ] 4888.46 3490.62 1269 2540001 396.124 [ 0 3 1 2 7 11 9 4 5 8 6 10 ] 5499.42 3490.62 1270 2542001 395.334 [ 0 10 7 3 4 8 6 5 1 11 9 2 ] 5261.41 3490.62 1271 2544001 394.544 [ 0 8 2 1 6 10 9 5 4 11 3 7 ] 5561.77 3490.62 1272 2546001 393.757 [ 0 3 8 1 2 9 5 6 11 7 10 4 ] 4797.66 3490.62 1273 2548001 392.971 [ 0 2 1 3 6 5 4 7 9 8 10 11 ] 5445.57 3490.62 1274 2550001 392.187 [ 0 8 2 11 1 6 10 4 5 3 9 7 ] 4338.86 3490.62 1275 2552001 391.404 [ 0 2 8 6 10 7 11 4 1 3 5 9 ] 4393.62 3490.62 1276 2554001 390.623 [ 0 6 1 8 9 3 7 10 4 11 2 5 ] 5022.26 3490.62 1277 2556001 389.843 [ 0 1 9 5 3 6 4 7 10 2 8 11 ] 4581.45 3490.62 1278 2558001 389.065 [ 0 3 1 11 7 4 10 6 8 9 5 2 ] 4578.48 3490.62 1279 2560001 388.288 [ 0 11 5 3 6 8 4 10 1 7 9 2 ] 4298.64 3490.62 1280 2562001 387.513 [ 0 5 8 6 10 1 4 3 9 7 11 2 ] 4902.68 3490.62 1281 2564001 386.74 [ 0 2 10 11 5 3 8 6 9 1 7 4 ] 4537.13 3490.62 1282 2566001 385.968 [ 0 7 11 2 5 3 6 10 4 1 9 8 ] 4200.06 3490.62 1283 2568001 385.197 [ 0 8 7 3 6 2 4 10 5 1 11 9 ] 5116.89 3490.62 1284 2570001 384.428 [ 0 7 5 8 4 10 6 1 3 9 11 2 ] 5268.36 3490.62 1285 2572001 383.661 [ 0 2 3 6 11 7 8 10 1 9 4 5 ] 5105.67 3490.62 1286 2574001 382.895 [ 0 4 8 7 6 2 3 5 9 1 11 10 ] 4182.12 3490.62 1287 2576001 382.131 [ 0 10 1 6 2 4 3 9 7 5 11 8 ] 5526.64 3490.62 1288 2578001 381.368 [ 0 7 3 10 1 11 4 9 8 2 6 5 ] 5266.6 3490.62 1289 2580001 380.607 [ 0 3 11 10 7 6 4 9 1 2 8 5 ] 5232.35 3490.62 1290 2582001 379.847 [ 0 3 9 7 8 10 4 2 11 5 1 6 ] 5165.07 3490.62 1291 2584001 379.089 [ 0 8 3 9 7 4 11 5 2 1 10 6 ] 4996.69 3490.62 1292 2586001 378.333 [ 0 10 1 11 7 3 5 8 6 2 4 9 ] 4626.18 3490.62 1293 2588001 377.577 [ 0 7 5 2 11 8 1 10 9 6 4 3 ] 5753.6 3490.62 1294 2590001 376.824 [ 0 1 10 7 8 3 5 11 2 6 4 9 ] 5120.22 3490.62 1295 2592001 376.072 [ 0 6 3 8 9 4 1 7 5 10 11 2 ] 5306.31 3490.62 1296 2594001 375.321 [ 0 2 9 8 6 4 11 3 5 1 10 7 ] 4816.12 3490.62 1297 2596001 374.572 [ 0 8 6 11 3 10 1 5 9 2 4 7 ] 5322.24 3490.62 1298 2598001 373.824 [ 0 3 6 8 11 5 1 4 10 9 2 7 ] 5218.98 3490.62 1299 2600001 373.078 [ 0 8 3 9 6 2 4 10 7 11 1 5 ] 4631.7 3490.62 1300 2602001 372.333 [ 0 9 2 7 10 1 3 11 4 8 6 5 ] 5190.55 3490.62 1301 2604001 371.59 [ 0 6 9 5 3 10 11 4 1 7 2 8 ] 4193.33 3490.62 1302 2606001 370.849 [ 0 4 10 8 9 5 3 11 1 2 7 6 ] 4266.43 3490.62 1303 2608001 370.108 [ 0 11 2 1 7 8 10 4 3 5 9 6 ] 4386.65 3490.62 1304 2610001 369.37 [ 0 10 4 1 3 11 6 8 7 2 5 9 ] 5099.31 3490.62 1305 2612001 368.632 [ 0 11 9 5 3 4 7 6 1 8 2 10 ] 5066.13 3490.62 1306 2614001 367.897 [ 0 6 8 3 5 11 2 7 10 1 9 4 ] 4547.93 3490.62 1307 2616001 367.162 [ 0 8 9 5 3 2 4 1 6 11 10 7 ] 4659.4 3490.62 1308 2618001 366.429 [ 0 3 2 7 8 10 6 9 11 1 4 5 ] 5201.32 3490.62 1309 2620001 365.698 [ 0 10 2 7 11 4 6 1 9 8 3 5 ] 4637.44 3490.62 1310 2622001 364.968 [ 0 8 11 2 5 1 10 3 6 7 4 9 ] 5600.7 3490.62 1311 2624001 364.24 [ 0 8 4 11 6 10 1 9 7 2 3 5 ] 4342.1 3490.62 1312 2626001 363.513 [ 0 8 10 4 5 2 6 9 1 7 11 3 ] 4760.94 3490.62 1313 2628001 362.787 [ 0 6 7 11 1 4 10 9 5 3 2 8 ] 3886.54 3490.62 1314 2630001 362.063 [ 0 3 2 7 5 10 6 8 9 4 1 11 ] 5445.48 3490.62 1315 2632001 361.34 [ 0 8 6 9 3 11 7 4 10 2 5 1 ] 5062.03 3490.62 1316 2634001 360.619 [ 0 4 2 7 1 9 11 10 3 5 8 6 ] 4360.63 3490.62 1317 2636001 359.899 [ 0 11 10 4 1 5 3 2 7 6 9 8 ] 4579.09 3490.62 1318 2638001 359.181 [ 0 3 5 9 8 6 10 2 11 4 7 1 ] 4564.19 3490.62 1319 2640001 358.464 [ 0 7 9 8 10 2 5 1 3 11 6 4 ] 5935.26 3490.62 1320 2642001 357.748 [ 0 6 7 1 9 8 3 5 2 11 10 4 ] 4141.52 3490.62 1321 2644001 357.034 [ 0 6 4 7 11 8 3 10 9 2 1 5 ] 5469.9 3490.62 1322 2646001 356.322 [ 0 10 1 9 2 6 11 4 7 8 3 5 ] 4468.21 3490.62 1323 2648001 355.61 [ 0 8 5 3 6 7 4 11 10 2 9 1 ] 4466.37 3490.62 1324 2650001 354.901 [ 0 8 5 3 1 2 11 10 4 6 7 9 ] 4555.74 3490.62 1325 2652001 354.192 [ 0 4 7 10 6 9 3 5 1 8 11 2 ] 4977.64 3490.62 1326 2654001 353.485 [ 0 8 11 7 4 10 6 3 5 2 1 9 ] 4232.88 3490.62 1327 2656001 352.78 [ 0 1 11 10 2 3 9 7 4 8 6 5 ] 4837.96 3490.62 1328 2658001 352.076 [ 0 7 4 2 6 8 11 9 10 1 3 5 ] 4901.09 3490.62 1329 2660001 351.373 [ 0 7 11 1 10 3 9 8 5 6 4 2 ] 5001.97 3490.62 1330 2662001 350.671 [ 0 10 8 3 5 4 11 9 2 1 7 6 ] 4711.9 3490.62 1331 2664001 349.971 [ 0 3 8 5 7 6 2 1 4 9 10 11 ] 5583.01 3490.62 1332 2666001 349.273 [ 0 11 2 7 10 5 3 4 1 9 6 8 ] 4695.3 3490.62 1333 2668001 348.576 [ 0 1 3 5 6 2 11 9 4 8 10 7 ] 5118.3 3490.62 1334 2670001 347.88 [ 0 10 7 2 1 11 9 8 5 3 4 6 ] 4710.65 3490.62 1335 2672001 347.186 [ 0 8 2 4 10 5 1 11 6 3 9 7 ] 4907.99 3490.62 1336 2674001 346.493 [ 0 5 3 11 10 1 7 8 4 9 6 2 ] 4713.27 3490.62 1337 2676001 345.801 [ 0 7 2 8 6 4 5 9 1 11 10 3 ] 4692.81 3490.62 1338 2678001 345.111 [ 0 6 3 5 9 4 10 1 8 11 7 2 ] 4118.83 3490.62 1339 2680001 344.422 [ 0 8 10 4 1 6 3 5 7 9 2 11 ] 4597.7 3490.62 1340 2682001 343.735 [ 0 6 8 3 2 10 11 5 9 7 4 1 ] 5021.17 3490.62 1341 2684001 343.048 [ 0 2 9 3 5 6 8 7 10 4 11 1 ] 4038.18 3490.62 1342 2686001 342.364 [ 0 8 2 4 5 7 11 3 9 1 10 6 ] 4939.24 3490.62 1343 2688001 341.68 [ 0 5 3 9 1 2 10 7 11 4 6 8 ] 4149.49 3490.62 1344 2690001 340.998 [ 0 8 3 7 10 9 2 5 11 4 6 1 ] 5705.23 3490.62 1345 2692001 340.318 [ 0 10 6 3 9 4 1 5 7 11 2 8 ] 5311.5 3490.62 1346 2694001 339.638 [ 0 1 11 7 8 5 4 10 3 9 2 6 ] 4773.48 3490.62 1347 2696001 338.961 [ 0 4 1 11 9 10 7 2 6 3 8 5 ] 5087.19 3490.62 1348 2698001 338.284 [ 0 5 3 1 8 10 11 9 4 6 7 2 ] 4992.2 3490.62 1349 2700001 337.609 [ 0 9 2 3 5 4 8 10 11 7 1 6 ] 4582.24 3490.62 1350 2702001 336.935 [ 0 6 5 1 11 2 10 4 7 8 3 9 ] 4790.22 3490.62 1351 2704001 336.262 [ 0 11 4 7 2 10 1 6 8 3 5 9 ] 4561.3 3490.62 1352 2706001 335.591 [ 0 3 2 10 5 4 7 1 9 11 6 8 ] 5136.45 3490.62 1353 2708001 334.921 [ 0 4 10 5 8 11 9 1 7 2 3 6 ] 4737.63 3490.62 1354 2710001 334.253 [ 0 10 9 8 7 5 4 6 3 2 11 1 ] 5661.87 3490.62 1355 2712001 333.586 [ 0 11 9 3 1 2 7 4 10 6 8 5 ] 4993.79 3490.62 1356 2714001 332.92 [ 0 2 8 1 4 10 9 7 3 5 6 11 ] 4773.93 3490.62 1357 2716001 332.255 [ 0 6 8 7 9 11 3 5 2 4 10 1 ] 4489.69 3490.62 1358 2718001 331.592 [ 0 9 7 10 3 5 4 2 11 1 6 8 ] 4823.63 3490.62 1359 2720001 330.93 [ 0 10 7 4 6 3 5 9 2 11 1 8 ] 4396.54 3490.62 1360 2722001 330.27 [ 0 10 4 1 5 3 9 6 2 8 7 11 ] 4463.98 3490.62 1361 2724001 329.61 [ 0 2 1 9 8 5 3 11 7 10 4 6 ] 4271.24 3490.62 1362 2726001 328.953 [ 0 6 4 11 9 1 8 5 3 10 7 2 ] 4564.92 3490.62 1363 2728001 328.296 [ 0 5 3 10 6 11 1 8 7 4 9 2 ] 4987.62 3490.62 1364 2730001 327.641 [ 0 2 9 8 1 5 3 4 7 11 10 6 ] 4801.95 3490.62 1365 2732001 326.987 [ 0 3 5 9 1 4 11 7 8 2 10 6 ] 4093.97 3490.62 1366 2734001 326.334 [ 0 8 2 7 1 3 5 11 10 4 6 9 ] 4535.1 3490.62 1367 2736001 325.683 [ 0 8 10 9 5 3 4 6 7 11 1 2 ] 4486.24 3490.62 1368 2738001 325.033 [ 0 7 5 8 10 4 6 3 1 2 9 11 ] 5347.51 3490.62 1369 2740001 324.384 [ 0 10 3 5 7 9 11 1 2 4 8 6 ] 4717.05 3490.62 1370 2742001 323.736 [ 0 1 8 4 10 9 5 3 2 11 7 6 ] 4424 3490.62 1371 2744001 323.09 [ 0 8 5 10 11 3 2 7 6 4 1 9 ] 5209.44 3490.62 1372 2746001 322.445 [ 0 8 10 4 11 7 2 1 9 3 5 6 ] 3760.83 3490.62 1373 2748001 321.802 [ 0 2 6 5 3 9 11 1 8 7 10 4 ] 4205.96 3490.62 1374 2750001 321.159 [ 0 5 9 3 6 2 1 10 7 8 11 4 ] 4792.91 3490.62 1375 2752001 320.518 [ 0 3 5 2 7 10 9 11 6 8 1 4 ] 4894.39 3490.62 1376 2754001 319.879 [ 0 2 8 4 10 11 1 7 9 5 3 6 ] 3649.4 3490.62 1377 2756001 319.24 [ 0 9 11 1 4 10 7 3 6 2 5 8 ] 4775.05 3490.62 1378 2758001 318.603 [ 0 4 11 5 3 2 8 6 7 10 1 9 ] 4535.44 3490.62 1379 2760001 317.967 [ 0 11 8 6 2 3 10 4 1 5 9 7 ] 5019.03 3490.62 1380 2762001 317.332 [ 0 7 6 3 5 10 4 11 2 9 1 8 ] 4392.78 3490.62 1381 2764001 316.699 [ 0 7 6 2 9 1 11 10 4 8 5 3 ] 3990.94 3490.62 1382 2766001 316.067 [ 0 2 6 8 3 7 10 4 5 9 1 11 ] 4499.99 3490.62 1383 2768001 315.436 [ 0 5 3 6 9 1 4 11 10 7 8 2 ] 4294.48 3490.62 1384 2770001 314.806 [ 0 4 3 2 6 9 1 11 8 5 7 10 ] 5247.31 3490.62 1385 2772001 314.178 [ 0 7 1 11 8 10 4 2 6 5 9 3 ] 4431.12 3490.62 1386 2774001 313.551 [ 0 4 9 7 1 8 6 5 3 10 11 2 ] 4789.49 3490.62 1387 2776001 312.925 [ 0 10 4 7 11 9 5 3 1 2 6 8 ] 4174.58 3490.62 1388 2778001 312.3 [ 0 4 10 6 7 1 8 5 3 9 2 11 ] 4536.83 3490.62 1389 2780001 311.677 [ 0 6 10 11 1 8 9 3 5 2 7 4 ] 4442.05 3490.62 1390 2782001 311.055 [ 0 4 10 3 5 1 11 6 8 2 9 7 ] 4522.89 3490.62 1391 2784001 310.434 [ 0 10 7 3 5 9 1 11 8 4 2 6 ] 4244.93 3490.62 1392 2786001 309.814 [ 0 5 3 11 2 10 4 9 7 8 6 1 ] 4920.94 3490.62 1393 2788001 309.196 [ 0 1 11 9 3 6 8 2 7 5 10 4 ] 4867.14 3490.62 1394 2790001 308.579 [ 0 4 10 2 1 9 3 5 11 8 7 6 ] 4414.44 3490.62 1395 2792001 307.963 [ 0 3 2 9 11 8 10 4 5 7 1 6 ] 5103.44 3490.62 1396 2794001 307.348 [ 0 8 5 3 9 2 6 7 1 4 10 11 ] 4108.01 3490.62 1397 2796001 306.735 [ 0 6 7 2 3 4 10 1 9 5 8 11 ] 4621.18 3490.62 1398 2798001 306.123 [ 0 9 3 5 8 2 7 11 1 10 4 6 ] 3858.54 3490.62 1399 2800001 305.512 [ 0 7 2 9 5 4 6 3 1 11 10 8 ] 4904.13 3490.62 1400 2802001 304.902 [ 0 2 9 8 4 5 3 10 7 11 1 6 ] 4686.33 3490.62 1401 2804001 304.293 [ 0 11 10 4 2 8 5 6 9 7 1 3 ] 4977.07 3490.62 1402 2806001 303.686 [ 0 9 1 10 4 5 3 6 7 2 8 11 ] 4392.78 3490.62 1403 2808001 303.08 [ 0 1 4 5 3 11 8 9 6 2 10 7 ] 5291.35 3490.62 1404 2810001 302.475 [ 0 2 3 9 4 1 11 7 10 6 5 8 ] 4834.77 3490.62 1405 2812001 301.871 [ 0 2 8 10 1 4 11 7 5 3 9 6 ] 4316.11 3490.62 1406 2814001 301.268 [ 0 7 9 3 6 11 1 8 2 5 10 4 ] 4961.14 3490.62 1407 2816001 300.667 [ 0 1 6 9 5 3 11 7 10 8 4 2 ] 4864.34 3490.62 1408 2818001 300.067 [ 0 9 1 3 5 7 10 6 11 8 4 2 ] 4988.7 3490.62 1409 2820001 299.468 [ 0 9 5 6 8 4 3 10 2 11 1 7 ] 5067.57 3490.62 1410 2822001 298.87 [ 0 6 4 11 1 10 7 2 5 3 9 8 ] 4140.56 3490.62 1411 2824001 298.274 [ 0 2 4 8 6 1 10 5 9 11 3 7 ] 5400.05 3490.62 1412 2826001 297.678 [ 0 8 6 5 11 1 4 10 7 9 3 2 ] 4517.75 3490.62 1413 2828001 297.084 [ 0 7 4 10 8 1 6 11 9 2 3 5 ] 4762.06 3490.62 1414 2830001 296.491 [ 0 6 3 5 8 10 4 2 9 1 7 11 ] 4048.42 3490.62 1415 2832001 295.899 [ 0 7 3 5 2 1 10 9 8 11 6 4 ] 5192.56 3490.62 1416 2834001 295.309 [ 0 2 3 5 8 7 11 1 9 10 4 6 ] 4013.55 3490.62 1417 2836001 294.719 [ 0 3 5 2 9 4 1 11 7 10 6 8 ] 4379.35 3490.62 1418 2838001 294.131 [ 0 5 9 1 10 4 8 7 3 6 11 2 ] 4583.82 3490.62 1419 2840001 293.544 [ 0 5 2 11 10 7 8 6 4 1 9 3 ] 4713.57 3490.62 1420 2842001 292.958 [ 0 6 11 9 7 3 5 8 1 2 4 10 ] 4736.62 3490.62 1421 2844001 292.373 [ 0 2 4 10 8 3 5 6 7 11 9 1 ] 4328.53 3490.62 1422 2846001 291.79 [ 0 1 2 3 5 9 7 8 11 4 6 10 ] 4789.8 3490.62 1423 2848001 291.207 [ 0 4 6 3 9 7 11 1 10 8 2 5 ] 4710.05 3490.62 1424 2850001 290.626 [ 0 7 2 3 8 4 1 11 6 5 10 9 ] 5400.54 3490.62 1425 2852001 290.046 [ 0 5 3 11 1 8 6 9 7 10 2 4 ] 4837.23 3490.62 1426 2854001 289.467 [ 0 10 11 8 4 5 9 1 2 3 6 7 ] 5030.82 3490.62 1427 2856001 288.889 [ 0 5 2 8 9 7 11 4 1 3 6 10 ] 5242.14 3490.62 1428 2858001 288.313 [ 0 6 9 7 2 5 4 11 10 3 8 1 ] 5436.17 3490.62 1429 2860001 287.737 [ 0 10 3 9 2 7 6 4 8 11 5 1 ] 5752.45 3490.62 1430 2862001 287.163 [ 0 7 9 4 10 6 2 1 3 5 8 11 ] 4919.27 3490.62 1431 2864001 286.59 [ 0 1 8 4 10 7 11 6 2 9 5 3 ] 4328.36 3490.62 1432 2866001 286.018 [ 0 7 4 6 10 5 3 8 2 11 1 9 ] 4650.69 3490.62 1433 2868001 285.447 [ 0 6 3 7 9 1 5 11 8 4 10 2 ] 5033.86 3490.62 1434 2870001 284.877 [ 0 8 1 2 5 3 9 10 4 11 7 6 ] 4274.84 3490.62 1435 2872001 284.308 [ 0 3 5 9 1 6 7 11 8 4 10 2 ] 4146.03 3490.62 1436 2874001 283.741 [ 0 2 6 11 1 9 5 3 8 4 10 7 ] 3923.58 3490.62 1437 2876001 283.175 [ 0 11 1 10 8 2 7 9 4 5 6 3 ] 5119.29 3490.62 1438 2878001 282.609 [ 0 3 9 1 7 8 5 4 2 6 11 10 ] 4984.26 3490.62 1439 2880001 282.045 [ 0 9 10 7 8 2 5 3 6 4 1 11 ] 4763.42 3490.62 1440 2882001 281.482 [ 0 8 5 3 9 2 11 1 4 10 7 6 ] 3964.75 3490.62 1441 2884001 280.92 [ 0 11 10 1 7 8 4 2 6 3 5 9 ] 4380.05 3490.62 1442 2886001 280.36 [ 0 2 1 7 6 4 8 10 3 5 9 11 ] 4744.52 3490.62 1443 2888001 279.8 [ 0 5 1 7 9 2 8 10 4 11 3 6 ] 4843.32 3490.62 1444 2890001 279.242 [ 0 1 3 5 8 2 10 7 9 4 11 6 ] 5009.51 3490.62 1445 2892001 278.684 [ 0 7 10 11 9 3 5 4 6 8 1 2 ] 4676.06 3490.62 1446 2894001 278.128 [ 0 6 11 3 5 8 7 2 1 10 4 9 ] 4684.3 3490.62 1447 2896001 277.573 [ 0 4 10 7 11 6 3 1 8 2 5 9 ] 4970.12 3490.62 1448 2898001 277.019 [ 0 6 4 1 10 2 8 3 11 7 9 5 ] 4847.58 3490.62 1449 2900001 276.466 [ 0 8 6 3 5 4 10 11 1 7 2 9 ] 3984.14 3490.62 1450 2902001 275.914 [ 0 6 2 9 8 4 1 7 10 3 5 11 ] 4873.36 3490.62 1451 2904001 275.363 [ 0 2 7 10 5 3 4 1 6 8 9 11 ] 5054.76 3490.62 1452 2906001 274.814 [ 0 8 5 9 10 2 1 3 7 11 4 6 ] 5143.11 3490.62 1453 2908001 274.265 [ 0 6 8 10 3 5 4 2 1 9 11 7 ] 4623.18 3490.62 1454 2910001 273.718 [ 0 11 3 4 7 1 2 9 5 10 8 6 ] 5241.29 3490.62 1455 2912001 273.171 [ 0 9 7 6 1 11 3 5 2 10 4 8 ] 4589.01 3490.62 1456 2914001 272.626 [ 0 8 2 3 5 11 6 7 4 9 1 10 ] 4799.87 3490.62 1457 2916001 272.082 [ 0 11 1 9 10 7 4 2 6 5 3 8 ] 4467.7 3490.62 1458 2918001 271.539 [ 0 10 11 7 6 2 5 3 9 1 8 4 ] 4411.8 3490.62 1459 2920001 270.997 [ 0 7 11 2 9 4 1 6 8 10 5 3 ] 4914.54 3490.62 1460 2922001 270.456 [ 0 6 3 5 9 2 4 10 1 7 11 8 ] 3811.83 3490.62 1461 2924001 269.916 [ 0 8 3 5 2 7 10 1 9 4 6 11 ] 4649.46 3490.62 1462 2926001 269.377 [ 0 3 2 9 1 11 7 6 4 5 8 10 ] 4958.61 3490.62 1463 2928001 268.84 [ 0 6 5 11 9 10 2 4 3 8 1 7 ] 5660.31 3490.62 1464 2930001 268.303 [ 0 11 4 10 7 2 6 5 3 1 9 8 ] 4287.66 3490.62 1465 2932001 267.768 [ 0 2 8 7 11 6 10 4 9 1 3 5 ] 4471.22 3490.62 1466 2934001 267.233 [ 0 7 9 3 5 2 10 4 1 11 8 6 ] 4059.76 3490.62 1467 2936001 266.7 [ 0 6 9 4 1 7 11 8 3 5 10 2 ] 4796.44 3490.62 1468 2938001 266.167 [ 0 2 9 6 3 5 4 10 11 8 7 1 ] 4519.42 3490.62 1469 2940001 265.636 [ 0 10 4 7 11 8 2 6 9 1 5 3 ] 4344.81 3490.62 1470 2942001 265.106 [ 0 1 11 6 2 4 10 7 3 5 9 8 ] 4348.33 3490.62 1471 2944001 264.577 [ 0 11 7 2 8 6 9 3 5 10 4 1 ] 4421.25 3490.62 1472 2946001 264.049 [ 0 6 5 3 2 4 10 8 1 11 9 7 ] 4324.74 3490.62 1473 2948001 263.522 [ 0 1 11 10 3 5 9 2 7 4 6 8 ] 4308.96 3490.62 1474 2950001 262.996 [ 0 11 1 7 10 9 5 3 4 8 2 6 ] 4390.25 3490.62 1475 2952001 262.471 [ 0 8 6 5 3 4 1 11 2 9 10 7 ] 4593.04 3490.62 1476 2954001 261.947 [ 0 4 1 10 6 7 11 2 8 3 5 9 ] 4468.91 3490.62 1477 2956001 261.424 [ 0 1 2 3 5 10 8 7 9 4 11 6 ] 5064.41 3490.62 1478 2958001 260.902 [ 0 8 3 5 9 6 1 10 11 7 2 4 ] 4377.34 3490.62 1479 2960001 260.381 [ 0 6 8 10 7 1 9 11 2 4 3 5 ] 4418.88 3490.62 1480 2962001 259.862 [ 0 7 5 2 10 1 4 6 11 8 3 9 ] 5410.35 3490.62 1481 2964001 259.343 [ 0 9 6 11 4 1 7 5 10 8 3 2 ] 5467.63 3490.62 1482 2966001 258.825 [ 0 8 6 9 3 5 1 2 10 4 7 11 ] 4394.57 3490.62 1483 2968001 258.309 [ 0 2 1 11 4 8 9 5 10 6 7 3 ] 5142.14 3490.62 1484 2970001 257.793 [ 0 4 10 11 1 7 2 8 3 5 9 6 ] 3806.76 3490.62 1485 2972001 257.279 [ 0 4 10 2 3 9 5 8 7 11 1 6 ] 4474.19 3490.62 1486 2974001 256.765 [ 0 9 3 5 7 1 11 2 8 4 10 6 ] 4131.37 3490.62 1487 2976001 256.252 [ 0 2 5 3 6 8 9 1 7 11 4 10 ] 3984.47 3490.62 1488 2978001 255.741 [ 0 11 8 7 2 4 1 9 10 6 3 5 ] 4791.13 3490.62 1489 2980001 255.231 [ 0 10 8 5 3 9 7 11 4 2 6 1 ] 4743.49 3490.62 1490 2982001 254.721 [ 0 6 1 2 7 8 9 4 11 10 5 3 ] 4901.88 3490.62 1491 2984001 254.213 [ 0 10 4 1 5 9 3 2 11 7 8 6 ] 4515.06 3490.62 1492 2986001 253.705 [ 0 9 7 2 5 3 6 8 4 10 1 11 ] 4143.16 3490.62 1493 2988001 253.199 [ 0 2 4 8 7 10 1 9 11 5 3 6 ] 4487.08 3490.62 1494 2990001 252.693 [ 0 8 1 9 2 11 10 7 5 4 6 3 ] 5108.62 3490.62 1495 2992001 252.189 [ 0 8 1 4 2 7 6 10 9 5 3 11 ] 4968.02 3490.62 1496 2994001 251.686 [ 0 8 1 10 4 7 9 2 6 11 3 5 ] 4494.44 3490.62 1497 2996001 251.183 [ 0 6 4 10 8 3 5 9 7 2 11 1 ] 4085.46 3490.62 1498 2998001 250.682 [ 0 9 5 2 10 1 4 7 6 8 11 3 ] 5153.4 3490.62 1499 3000001 250.182 [ 0 4 10 11 9 3 6 7 8 1 5 2 ] 5006.06 3490.62 1500 3002001 249.682 [ 0 7 6 2 8 11 9 3 5 4 10 1 ] 4533.48 3490.62 1501 3004001 249.184 [ 0 6 11 5 3 4 1 7 9 2 10 8 ] 4795.03 3490.62 1502 3006001 248.687 [ 0 4 8 7 1 11 10 2 6 9 5 3 ] 4268.37 3490.62 1503 3008001 248.19 [ 0 11 10 6 2 5 9 1 4 3 7 8 ] 4972.19 3490.62 1504 3010001 247.695 [ 0 4 11 9 7 1 5 3 10 2 6 8 ] 4721.01 3490.62 1505 3012001 247.2 [ 0 1 9 5 7 10 4 8 11 2 3 6 ] 4688.17 3490.62 1506 3014001 246.707 [ 0 7 11 2 1 9 6 3 4 10 8 5 ] 4889.94 3490.62 1507 3016001 246.215 [ 0 6 3 5 8 10 7 2 4 9 1 11 ] 4457.41 3490.62 1508 3018001 245.723 [ 0 2 1 4 11 7 10 6 8 5 3 9 ] 4413.38 3490.62 1509 3020001 245.233 [ 0 1 11 2 10 7 4 3 6 9 5 8 ] 5101.68 3490.62 1510 3022001 244.743 [ 0 6 4 9 5 3 8 7 11 10 1 2 ] 4304.06 3490.62 1511 3024001 244.255 [ 0 1 4 3 2 8 5 9 10 7 6 11 ] 5524.61 3490.62 1512 3026001 243.767 [ 0 9 6 4 10 11 7 8 5 3 2 1 ] 4556.65 3490.62 1513 3028001 243.281 [ 0 5 3 6 2 7 4 1 11 10 9 8 ] 4423.39 3490.62 1514 3030001 242.795 [ 0 7 10 5 3 6 8 2 1 4 9 11 ] 4968.24 3490.62 1515 3032001 242.31 [ 0 8 6 11 10 1 9 2 7 5 3 4 ] 4450.23 3490.62 1516 3034001 241.827 [ 0 1 7 11 3 4 10 9 8 2 6 5 ] 5213.51 3490.62 1517 3036001 241.344 [ 0 5 3 1 6 9 10 11 7 2 4 8 ] 4857.01 3490.62 1518 3038001 240.862 [ 0 6 9 5 2 1 10 4 8 3 7 11 ] 4717.25 3490.62 1519 3040001 240.381 [ 0 2 6 7 1 10 4 11 9 5 3 8 ] 3923.33 3490.62 1520 3042001 239.902 [ 0 3 5 2 1 10 4 9 11 8 7 6 ] 4522.83 3490.62 1521 3044001 239.423 [ 0 10 11 7 3 5 9 1 4 8 2 6 ] 4074.05 3490.62 1522 3046001 238.945 [ 0 3 6 7 4 10 11 2 5 9 1 8 ] 4492.24 3490.62 1523 3048001 238.468 [ 0 11 10 1 7 4 2 8 6 3 5 9 ] 4273.8 3490.62 1524 3050001 237.992 [ 0 3 10 4 11 8 6 7 5 2 1 9 ] 5017.73 3490.62 1525 3052001 237.517 [ 0 8 7 9 1 11 2 6 4 10 3 5 ] 4129.63 3490.62 1526 3054001 237.043 [ 0 8 9 11 5 3 4 10 2 1 7 6 ] 4650.75 3490.62 1527 3056001 236.57 [ 0 6 7 2 10 9 3 11 1 4 8 5 ] 5111.24 3490.62 1528 3058001 236.098 [ 0 8 10 7 9 4 5 3 2 1 11 6 ] 4687.6 3490.62 1529 3060001 235.626 [ 0 3 5 4 6 1 9 7 8 10 2 11 ] 4916.91 3490.62 1530 3062001 235.156 [ 0 2 4 10 9 1 7 6 3 5 8 11 ] 4457.01 3490.62 1531 3064001 234.687 [ 0 4 8 6 2 10 11 1 3 5 9 7 ] 4368.46 3490.62 1532 3066001 234.218 [ 0 6 1 7 11 10 4 8 9 2 5 3 ] 4184.67 3490.62 1533 3068001 233.751 [ 0 3 5 4 10 7 9 1 2 11 8 6 ] 4195.48 3490.62 1534 3070001 233.284 [ 0 5 7 2 3 10 1 4 11 9 8 6 ] 5122.08 3490.62 1535 3072001 232.818 [ 0 8 3 5 10 1 11 7 4 9 2 6 ] 4384.22 3490.62 1536 3074001 232.354 [ 0 7 11 6 1 10 4 8 2 9 3 5 ] 4276.21 3490.62 1537 3076001 231.89 [ 0 6 10 7 4 5 3 1 9 11 2 8 ] 4609.46 3490.62 1538 3078001 231.427 [ 0 3 5 4 2 9 1 8 6 10 11 7 ] 4524.62 3490.62 1539 3080001 230.965 [ 0 8 2 10 11 6 7 9 3 5 1 4 ] 4673.61 3490.62 1540 3082001 230.504 [ 0 1 9 11 2 3 7 4 10 8 6 5 ] 4877.41 3490.62 1541 3084001 230.044 [ 0 1 11 6 10 4 5 3 9 2 7 8 ] 4375.25 3490.62 1542 3086001 229.585 [ 0 5 9 3 8 1 11 6 10 4 7 2 ] 4587.25 3490.62 1543 3088001 229.127 [ 0 10 1 9 6 8 4 7 2 3 5 11 ] 4666.72 3490.62 1544 3090001 228.669 [ 0 11 1 5 3 8 6 9 2 10 7 4 ] 4781.16 3490.62 1545 3092001 228.213 [ 0 9 1 7 11 10 4 6 8 5 2 3 ] 4450.72 3490.62 1546 3094001 227.757 [ 0 8 11 7 5 3 9 10 1 6 2 4 ] 4770.96 3490.62 1547 3096001 227.303 [ 0 4 2 6 7 3 5 9 8 10 1 11 ] 4607.48 3490.62 1548 3098001 226.849 [ 0 6 7 11 3 5 9 2 8 4 1 10 ] 4373.94 3490.62 1549 3100001 226.396 [ 0 7 11 1 5 3 9 2 4 10 6 8 ] 4108.37 3490.62 1550 3102001 225.944 [ 0 7 8 3 5 4 6 2 9 1 11 10 ] 4461.8 3490.62 1551 3104001 225.493 [ 0 10 8 11 4 2 5 3 6 9 1 7 ] 4635 3490.62 1552 3106001 225.043 [ 0 10 2 9 5 3 8 6 7 4 11 1 ] 4455.96 3490.62 1553 3108001 224.594 [ 0 9 1 10 3 5 6 4 2 8 7 11 ] 4640.54 3490.62 1554 3110001 224.146 [ 0 6 8 4 7 1 2 10 11 9 5 3 ] 4207.14 3490.62 1555 3112001 223.698 [ 0 10 4 11 7 3 2 9 1 8 5 6 ] 4686.82 3490.62 1556 3114001 223.252 [ 0 8 11 10 6 5 3 2 9 1 4 7 ] 4419.39 3490.62 1557 3116001 222.806 [ 0 11 1 7 10 4 3 8 9 5 2 6 ] 4614.79 3490.62 1558 3118001 222.362 [ 0 5 1 9 3 7 11 10 4 2 6 8 ] 4471.86 3490.62 1559 3120001 221.918 [ 0 6 9 1 7 2 8 4 10 5 3 11 ] 4400.47 3490.62 1560 3122001 221.475 [ 0 10 4 9 3 5 8 6 2 7 1 11 ] 4186.77 3490.62 1561 3124001 221.033 [ 0 7 9 1 11 10 4 3 5 2 8 6 ] 3899.46 3490.62 1562 3126001 220.592 [ 0 6 7 3 5 9 4 10 2 1 8 11 ] 4717.1 3490.62 1563 3128001 220.151 [ 0 10 8 1 9 3 4 11 7 6 2 5 ] 5032.14 3490.62 1564 3130001 219.712 [ 0 1 10 4 8 5 2 6 9 7 11 3 ] 5008.08 3490.62 1565 3132001 219.273 [ 0 6 3 5 9 2 8 11 1 4 10 7 ] 3926.65 3490.62 1566 3134001 218.836 [ 0 5 3 1 7 2 6 9 11 10 4 8 ] 4288.11 3490.62 1567 3136001 218.399 [ 0 10 1 5 3 2 9 7 11 4 6 8 ] 4456.5 3490.62 1568 3138001 217.963 [ 0 9 8 5 3 2 10 4 11 1 7 6 ] 4241.01 3490.62 1569 3140001 217.528 [ 0 11 9 10 4 6 1 7 2 5 3 8 ] 4622.94 3490.62 1570 3142001 217.094 [ 0 10 11 1 9 8 4 6 2 7 3 5 ] 4409.52 3490.62 1571 3144001 216.66 [ 0 6 9 5 10 4 1 8 7 11 3 2 ] 4928.27 3490.62 1572 3146001 216.228 [ 0 2 3 7 8 9 1 4 10 11 5 6 ] 4804.31 3490.62 1573 3148001 215.796 [ 0 6 7 4 3 10 5 9 2 11 1 8 ] 5187.14 3490.62 1574 3150001 215.366 [ 0 10 11 7 1 4 2 8 3 5 9 6 ] 4230.18 3490.62 1575 3152001 214.936 [ 0 2 3 5 9 11 1 8 7 6 10 4 ] 4292.37 3490.62 1576 3154001 214.507 [ 0 4 10 11 1 9 2 8 3 6 5 7 ] 4560.11 3490.62 1577 3156001 214.079 [ 0 2 1 11 7 6 10 4 5 8 9 3 ] 4785.7 3490.62 1578 3158001 213.651 [ 0 5 7 11 6 8 2 4 10 1 9 3 ] 4493.6 3490.62 1579 3160001 213.225 [ 0 10 11 1 9 7 3 5 4 6 8 2 ] 4359.59 3490.62 1580 3162001 212.799 [ 0 5 3 7 6 9 10 2 1 11 8 4 ] 5011.85 3490.62 1581 3164001 212.374 [ 0 6 5 3 8 1 11 4 7 10 9 2 ] 4510.15 3490.62 1582 3166001 211.951 [ 0 5 7 2 3 9 6 1 11 10 4 8 ] 4690.4 3490.62 1583 3168001 211.527 [ 0 9 5 3 6 10 1 4 11 7 8 2 ] 4263.57 3490.62 1584 3170001 211.105 [ 0 10 4 6 11 7 2 3 1 9 5 8 ] 4638.9 3490.62 1585 3172001 210.684 [ 0 3 5 9 1 4 11 8 2 6 10 7 ] 4281.59 3490.62 1586 3174001 210.263 [ 0 8 6 1 2 9 7 5 3 4 10 11 ] 4582.28 3490.62 1587 3176001 209.844 [ 0 7 2 11 4 1 3 5 9 6 8 10 ] 4636.55 3490.62 1588 3178001 209.425 [ 0 6 4 10 11 7 1 9 5 3 2 8 ] 3564.8 3490.62 1589 3180001 209.007 [ 0 4 2 9 8 6 3 5 11 7 10 1 ] 4794.27 3490.62 1590 3182001 208.59 [ 0 9 2 1 11 4 10 7 5 3 8 6 ] 4171.2 3490.62 1591 3184001 208.173 [ 0 8 9 4 6 7 11 10 1 2 3 5 ] 4628.4 3490.62 1592 3186001 207.758 [ 0 2 6 8 7 9 5 3 11 1 4 10 ] 4094.3 3490.62 1593 3188001 207.343 [ 0 1 11 7 8 2 4 10 3 6 9 5 ] 4765.96 3490.62 1594 3190001 206.929 [ 0 7 2 5 1 9 4 11 10 6 8 3 ] 5095.99 3490.62 1595 3192001 206.516 [ 0 3 2 6 8 9 7 4 11 1 10 5 ] 4913.22 3490.62 1596 3194001 206.104 [ 0 9 4 6 2 1 10 7 11 5 3 8 ] 4810.36 3490.62 1597 3196001 205.693 [ 0 1 7 8 11 4 5 2 10 3 6 9 ] 5657.73 3490.62 1598 3198001 205.282 [ 0 8 10 4 7 6 11 1 9 2 5 3 ] 4098.94 3490.62 1599 3200001 204.872 [ 0 6 1 2 8 11 7 10 4 3 5 9 ] 4349.68 3490.62 1600 3202001 204.463 [ 0 3 5 2 9 10 1 7 8 6 11 4 ] 4617.84 3490.62 1601 3204001 204.055 [ 0 8 11 9 1 7 10 4 2 6 5 3 ] 4096.4 3490.62 1602 3206001 203.648 [ 0 9 1 11 4 6 7 10 5 3 2 8 ] 4426.02 3490.62 1603 3208001 203.241 [ 0 2 11 8 7 5 9 1 3 10 4 6 ] 4904.52 3490.62 1604 3210001 202.836 [ 0 1 5 3 4 11 10 2 6 8 9 7 ] 4944.75 3490.62 1605 3212001 202.431 [ 0 6 2 11 1 4 10 8 7 9 5 3 ] 3909.86 3490.62 1606 3214001 202.027 [ 0 6 8 3 5 9 2 11 10 1 7 4 ] 4084.88 3490.62 1607 3216001 201.624 [ 0 6 8 9 1 5 3 2 4 10 7 11 ] 4254.94 3490.62 1608 3218001 201.221 [ 0 5 3 6 10 4 7 8 9 1 11 2 ] 4148.05 3490.62 1609 3220001 200.82 [ 0 4 8 10 11 1 7 6 9 5 3 2 ] 4275.4 3490.62 1610 3222001 200.419 [ 0 9 11 8 1 3 5 7 4 2 6 10 ] 5290.02 3490.62 1611 3224001 200.019 [ 0 3 5 2 8 11 10 6 7 1 9 4 ] 4608.31 3490.62 1612 3226001 199.619 [ 0 7 9 2 1 4 10 11 8 6 3 5 ] 4258.65 3490.62 1613 3228001 199.221 [ 0 4 1 10 11 7 9 3 5 8 6 2 ] 4148.21 3490.62 1614 3230001 198.823 [ 0 9 10 4 7 1 11 2 6 5 3 8 ] 4248.99 3490.62 1615 3232001 198.427 [ 0 4 10 11 1 9 5 2 8 7 6 3 ] 4307.4 3490.62 1616 3234001 198.03 [ 0 2 5 3 1 10 11 7 6 9 4 8 ] 4687.85 3490.62 1617 3236001 197.635 [ 0 11 7 10 1 6 2 4 9 5 3 8 ] 4587.45 3490.62 1618 3238001 197.241 [ 0 4 3 5 2 7 6 9 11 1 10 8 ] 4635.34 3490.62 1619 3240001 196.847 [ 0 8 7 4 11 1 10 3 5 9 2 6 ] 4117.74 3490.62 1620 3242001 196.454 [ 0 10 11 1 2 7 5 3 4 8 6 9 ] 4741.86 3490.62 1621 3244001 196.062 [ 0 6 8 11 1 9 3 5 2 7 4 10 ] 3843.69 3490.62 1622 3246001 195.671 [ 0 4 11 1 10 7 3 5 9 8 2 6 ] 4206.01 3490.62 1623 3248001 195.28 [ 0 4 10 7 2 3 5 1 11 8 9 6 ] 4446.71 3490.62 1624 3250001 194.89 [ 0 1 5 3 9 10 4 11 7 8 6 2 ] 4390.35 3490.62 1625 3252001 194.501 [ 0 6 11 5 3 9 1 4 2 7 8 10 ] 4615.26 3490.62 1626 3254001 194.113 [ 0 8 7 2 11 9 1 4 10 6 3 5 ] 4160.97 3490.62 1627 3256001 193.726 [ 0 10 7 2 8 11 1 9 4 5 3 6 ] 4481.6 3490.62 1628 3258001 193.339 [ 0 9 10 4 11 6 7 5 1 8 2 3 ] 5451.03 3490.62 1629 3260001 192.953 [ 0 9 7 11 1 2 5 3 6 4 10 8 ] 4169.01 3490.62 1630 3262001 192.568 [ 0 9 7 11 8 6 1 10 4 3 5 2 ] 4450.3 3490.62 1631 3264001 192.184 [ 0 10 4 6 9 7 8 11 5 3 1 2 ] 4919.27 3490.62 1632 3266001 191.8 [ 0 4 2 10 6 9 3 8 5 1 11 7 ] 5245.67 3490.62 1633 3268001 191.417 [ 0 9 1 7 11 8 10 2 6 5 4 3 ] 5147.77 3490.62 1634 3270001 191.035 [ 0 3 5 9 1 7 11 10 4 2 8 6 ] 3550.6 3490.62 1635 3272001 190.654 [ 0 2 6 3 5 9 1 7 11 10 8 4 ] 3991.32 3490.62 1636 3274001 190.273 [ 0 6 7 11 2 8 9 1 10 4 3 5 ] 4135.15 3490.62 1637 3276001 189.893 [ 0 10 6 3 5 9 11 2 4 1 8 7 ] 4807.72 3490.62 1638 3278001 189.514 [ 0 10 4 1 2 5 6 8 7 11 3 9 ] 4898.99 3490.62 1639 3280001 189.136 [ 0 6 5 7 2 11 10 4 8 9 1 3 ] 4777.2 3490.62 1640 3282001 188.759 [ 0 6 2 9 11 7 10 3 4 1 5 8 ] 5241.05 3490.62 1641 3284001 188.382 [ 0 11 3 5 4 10 1 9 8 2 7 6 ] 4425.27 3490.62 1642 3286001 188.006 [ 0 2 10 4 11 7 6 8 1 9 3 5 ] 4012.32 3490.62 1643 3288001 187.631 [ 0 1 9 5 6 2 7 4 10 8 3 11 ] 4832.08 3490.62 1644 3290001 187.256 [ 0 2 11 10 1 4 7 9 3 5 6 8 ] 4150.82 3490.62 1645 3292001 186.882 [ 0 3 5 6 11 7 1 9 10 4 8 2 ] 4136.69 3490.62 1646 3294001 186.509 [ 0 11 7 4 5 3 8 2 9 1 10 6 ] 4406.28 3490.62 1647 3296001 186.137 [ 0 8 6 5 3 9 7 10 4 11 2 1 ] 4195.91 3490.62 1648 3298001 185.765 [ 0 10 1 11 7 4 6 2 5 9 3 8 ] 4522.1 3490.62 1649 3300001 185.395 [ 0 10 11 8 2 6 7 1 5 3 9 4 ] 4791.92 3490.62 1650 3302001 185.025 [ 0 10 2 7 6 8 3 5 4 11 1 9 ] 4492.57 3490.62 1651 3304001 184.655 [ 0 9 3 5 4 10 7 1 11 6 8 2 ] 4122.53 3490.62 1652 3306001 184.287 [ 0 9 8 7 11 2 3 5 6 1 4 10 ] 4620.26 3490.62 1653 3308001 183.919 [ 0 4 1 9 2 5 3 6 8 7 10 11 ] 4402.81 3490.62 1654 3310001 183.552 [ 0 4 8 5 3 1 11 7 10 9 2 6 ] 4563.36 3490.62 1655 3312001 183.185 [ 0 9 1 5 3 8 11 4 10 2 7 6 ] 4379.81 3490.62 1656 3314001 182.82 [ 0 6 8 10 4 2 1 7 3 5 9 11 ] 4238.59 3490.62 1657 3316001 182.455 [ 0 6 8 7 10 11 1 4 9 2 5 3 ] 4332.37 3490.62 1658 3318001 182.091 [ 0 7 2 5 3 9 10 4 11 1 8 6 ] 4131.51 3490.62 1659 3320001 181.727 [ 0 6 9 5 1 11 2 3 7 8 10 4 ] 4828.7 3490.62 1660 3322001 181.364 [ 0 7 8 6 2 3 11 9 5 1 10 4 ] 4920.79 3490.62 1661 3324001 181.002 [ 0 6 5 9 8 10 4 2 3 11 1 7 ] 4668.44 3490.62 1662 3326001 180.641 [ 0 10 4 2 11 7 6 1 8 3 5 9 ] 4574.97 3490.62 1663 3328001 180.281 [ 0 6 8 10 4 7 5 3 9 1 11 2 ] 3862.53 3490.62 1664 3330001 179.921 [ 0 7 2 4 11 9 6 8 10 1 5 3 ] 4719.98 3490.62 1665 3332001 179.562 [ 0 6 4 5 3 9 7 10 1 11 8 2 ] 4297.22 3490.62 1666 3334001 179.203 [ 0 3 6 8 2 7 10 9 5 11 1 4 ] 4919.75 3490.62 1667 3336001 178.846 [ 0 11 10 7 9 3 2 8 4 1 6 5 ] 5052.9 3490.62 1668 3338001 178.489 [ 0 6 2 1 11 7 10 4 8 3 5 9 ] 3896.93 3490.62 1669 3340001 178.132 [ 0 10 11 9 5 4 1 8 3 2 7 6 ] 5078.35 3490.62 1670 3342001 177.777 [ 0 11 4 3 5 6 2 10 1 7 8 9 ] 4817.12 3490.62 1671 3344001 177.422 [ 0 3 5 2 6 8 11 7 9 1 10 4 ] 3985.53 3490.62 1672 3346001 177.068 [ 0 8 10 4 11 2 1 7 9 5 3 6 ] 3919.67 3490.62 1673 3348001 176.714 [ 0 8 11 9 2 4 10 6 5 3 7 1 ] 4591.46 3490.62 1674 3350001 176.362 [ 0 6 7 2 10 4 1 9 5 3 11 8 ] 4098.16 3490.62 1675 3352001 176.01 [ 0 9 4 2 6 3 5 11 8 1 10 7 ] 5136.68 3490.62 1676 3354001 175.658 [ 0 1 11 7 6 10 4 8 5 3 9 2 ] 4194.3 3490.62 1677 3356001 175.308 [ 0 7 11 6 3 5 9 2 1 4 10 8 ] 4147.48 3490.62 1678 3358001 174.958 [ 0 3 6 8 4 1 11 5 9 7 10 2 ] 4818.03 3490.62 1679 3360001 174.609 [ 0 1 9 3 5 6 2 7 4 10 11 8 ] 4027.96 3490.62 1680 3362001 174.26 [ 0 9 8 11 1 7 4 5 3 6 2 10 ] 4784.88 3490.62 1681 3364001 173.912 [ 0 3 5 8 11 9 7 1 4 10 6 2 ] 4335.99 3490.62 1682 3366001 173.565 [ 0 2 8 10 4 6 3 5 9 7 11 1 ] 4001.24 3490.62 1683 3368001 173.219 [ 0 8 4 10 7 1 11 9 5 3 2 6 ] 3757.11 3490.62 1684 3370001 172.873 [ 0 5 3 6 11 10 4 1 2 7 9 8 ] 4309.53 3490.62 1685 3372001 172.528 [ 0 11 2 7 5 10 4 8 6 3 9 1 ] 4928.12 3490.62 1686 3374001 172.183 [ 0 6 3 5 9 1 11 10 4 2 7 8 ] 3596.55 3490.62 1687 3376001 171.84 [ 0 8 10 4 5 3 9 2 6 1 11 7 ] 4185.54 3490.62 1688 3378001 171.497 [ 0 10 4 1 2 9 5 3 11 7 6 8 ] 4199.65 3490.62 1689 3380001 171.155 [ 0 11 4 10 1 7 5 6 9 3 2 8 ] 4686.2 3490.62 1690 3382001 170.813 [ 0 3 4 10 8 5 9 2 7 6 11 1 ] 4867.74 3490.62 1691 3384001 170.472 [ 0 1 9 5 3 2 10 4 6 8 11 7 ] 4148.86 3490.62 1692 3386001 170.132 [ 0 10 4 2 9 6 11 1 7 8 3 5 ] 4402.89 3490.62 1693 3388001 169.792 [ 0 8 3 4 11 7 2 1 9 10 5 6 ] 5034.01 3490.62 1694 3390001 169.453 [ 0 8 7 11 10 2 3 5 9 4 6 1 ] 4710.33 3490.62 1695 3392001 169.115 [ 0 8 6 2 9 7 1 11 4 10 3 5 ] 3996.6 3490.62 1696 3394001 168.777 [ 0 6 8 4 10 1 11 7 5 2 9 3 ] 4315.27 3490.62 1697 3396001 168.441 [ 0 6 8 4 9 5 3 10 11 1 7 2 ] 4167.79 3490.62 1698 3398001 168.104 [ 0 2 9 11 4 1 8 6 3 5 7 10 ] 4716.96 3490.62 1699 3400001 167.769 [ 0 5 3 9 2 1 7 10 11 6 4 8 ] 4402.4 3490.62 1700 3402001 167.434 [ 0 11 10 4 5 9 1 7 6 8 3 2 ] 4483.39 3490.62 1701 3404001 167.1 [ 0 2 11 4 10 8 6 7 1 9 5 3 ] 3832.74 3490.62 1702 3406001 166.766 [ 0 9 1 11 7 10 4 6 8 3 5 2 ] 3934.43 3490.62 1703 3408001 166.433 [ 0 6 8 2 5 3 7 11 10 4 9 1 ] 4176.68 3490.62 1704 3410001 166.101 [ 0 1 10 4 2 7 11 9 8 5 3 6 ] 4327.03 3490.62 1705 3412001 165.77 [ 0 3 9 11 7 1 5 2 4 10 6 8 ] 4677.21 3490.62 1706 3414001 165.439 [ 0 7 9 1 2 6 3 5 10 4 11 8 ] 4289.14 3490.62 1707 3416001 165.108 [ 0 6 7 1 2 8 5 3 9 11 10 4 ] 4124.98 3490.62 1708 3418001 164.779 [ 0 6 8 4 10 7 11 2 3 5 9 1 ] 3866.91 3490.62 1709 3420001 164.45 [ 0 11 8 7 1 2 10 4 6 9 3 5 ] 4529.21 3490.62 1710 3422001 164.122 [ 0 11 9 5 3 6 7 10 4 1 2 8 ] 4229.93 3490.62 1711 3424001 163.794 [ 0 6 3 5 9 8 10 1 7 11 4 2 ] 4133.3 3490.62 1712 3426001 163.467 [ 0 11 4 7 5 3 9 1 10 2 6 8 ] 4298.02 3490.62 1713 3428001 163.141 [ 0 1 9 4 5 3 11 7 10 6 8 2 ] 4805.82 3490.62 1714 3430001 162.815 [ 0 8 5 3 11 4 10 7 9 2 1 6 ] 4441.4 3490.62 1715 3432001 162.49 [ 0 8 5 3 2 7 11 1 9 10 6 4 ] 4382.18 3490.62 1716 3434001 162.166 [ 0 5 3 1 11 2 7 6 9 8 10 4 ] 4581.64 3490.62 1717 3436001 161.842 [ 0 5 3 6 11 9 1 2 7 10 4 8 ] 4191.03 3490.62 1718 3438001 161.519 [ 0 6 3 5 7 10 11 1 9 2 8 4 ] 4184.2 3490.62 1719 3440001 161.197 [ 0 8 6 11 10 4 1 3 5 9 2 7 ] 4147.48 3490.62 1720 3442001 160.875 [ 0 3 5 9 6 2 8 4 10 11 1 7 ] 3888.03 3490.62 1721 3444001 160.554 [ 0 4 11 7 9 2 6 5 3 8 1 10 ] 4555.59 3490.62 1722 3446001 160.234 [ 0 7 8 4 10 1 11 2 6 3 5 9 ] 4047.16 3490.62 1723 3448001 159.914 [ 0 5 3 9 10 4 6 8 11 1 7 2 ] 4079.75 3490.62 1724 3450001 159.595 [ 0 6 8 10 11 9 3 5 1 7 4 2 ] 4380.55 3490.62 1725 3452001 159.276 [ 0 8 2 10 4 7 1 11 9 5 3 6 ] 3797.55 3490.62 1726 3454001 158.958 [ 0 9 7 11 1 4 10 8 6 3 5 2 ] 4044.57 3490.62 1727 3456001 158.641 [ 0 9 5 3 6 2 11 7 1 4 10 8 ] 3970.19 3490.62 1728 3458001 158.324 [ 0 2 8 10 7 6 11 4 1 9 5 3 ] 4275 3490.62 1729 3460001 158.008 [ 0 3 5 9 2 1 7 11 8 10 4 6 ] 4011.65 3490.62 1730 3462001 157.693 [ 0 5 3 9 1 11 7 2 8 10 4 6 ] 3690.26 3490.62 1731 3464001 157.378 [ 0 5 3 8 4 2 6 7 10 9 1 11 ] 4589.09 3490.62 1732 3466001 157.064 [ 0 2 3 5 4 11 1 9 6 7 10 8 ] 4390.71 3490.62 1733 3468001 156.75 [ 0 3 5 9 6 4 11 8 7 1 10 2 ] 4429.27 3490.62 1734 3470001 156.438 [ 0 1 10 9 3 5 7 11 4 8 6 2 ] 4531.18 3490.62 1735 3472001 156.125 [ 0 8 1 9 3 5 6 2 10 4 11 7 ] 4018.92 3490.62 1736 3474001 155.814 [ 0 3 9 1 11 4 10 7 6 2 8 5 ] 4325.36 3490.62 1737 3476001 155.503 [ 0 9 8 11 7 1 4 10 2 5 3 6 ] 4321.79 3490.62 1738 3478001 155.192 [ 0 4 10 6 11 5 2 8 9 7 1 3 ] 5306.7 3490.62 1739 3480001 154.882 [ 0 6 7 1 11 4 10 3 5 9 2 8 ] 3860.29 3490.62 1740 3482001 154.573 [ 0 4 10 1 6 8 3 5 9 11 7 2 ] 4063.26 3490.62 1741 3484001 154.265 [ 0 6 5 3 11 1 10 4 2 9 7 8 ] 4130.33 3490.62 1742 3486001 153.957 [ 0 6 2 3 5 1 9 11 10 7 8 4 ] 4469.48 3490.62 1743 3488001 153.65 [ 0 5 3 6 9 8 2 7 1 11 4 10 ] 4183.61 3490.62 1744 3490001 153.343 [ 0 6 1 8 11 4 10 7 9 2 3 5 ] 4456.19 3490.62 1745 3492001 153.037 [ 0 4 6 3 5 9 2 8 7 11 1 10 ] 4202 3490.62 1746 3494001 152.731 [ 0 8 9 6 7 2 5 3 4 10 11 1 ] 4471.77 3490.62 1747 3496001 152.427 [ 0 9 2 1 7 5 3 10 4 11 8 6 ] 4454.93 3490.62 1748 3498001 152.122 [ 0 4 3 5 9 1 7 2 11 10 8 6 ] 4098.78 3490.62 1749 3500001 151.819 [ 0 6 1 7 9 2 8 11 4 10 3 5 ] 4393.46 3490.62 1750 3502001 151.516 [ 0 6 5 3 4 9 2 8 11 7 1 10 ] 4600.17 3490.62 1751 3504001 151.213 [ 0 6 3 5 7 8 11 1 9 2 4 10 ] 4195.13 3490.62 1752 3506001 150.911 [ 0 6 8 3 5 9 2 10 1 7 11 4 ] 4052.5 3490.62 1753 3508001 150.61 [ 0 6 2 5 9 3 7 11 8 4 10 1 ] 4553.23 3490.62 1754 3510001 150.31 [ 0 6 5 9 1 11 10 8 4 3 2 7 ] 4562.28 3490.62 1755 3512001 150.009 [ 0 7 2 8 10 11 3 5 9 1 4 6 ] 4260.92 3490.62 1756 3514001 149.71 [ 0 6 11 1 7 10 2 8 9 4 3 5 ] 4731.99 3490.62 1757 3516001 149.411 [ 0 10 1 11 2 6 5 3 9 7 4 8 ] 4242.89 3490.62 1758 3518001 149.113 [ 0 3 5 2 6 1 11 7 9 10 4 8 ] 4255.63 3490.62 1759 3520001 148.815 [ 0 6 8 3 5 9 2 11 1 10 4 7 ] 3825.57 3490.62 1760 3522001 148.518 [ 0 9 11 4 3 5 1 10 7 2 8 6 ] 4596.82 3490.62 1761 3524001 148.222 [ 0 5 3 9 8 11 7 1 4 10 2 6 ] 4110.06 3490.62 1762 3526001 147.926 [ 0 6 1 7 11 9 5 3 4 10 8 2 ] 4135.29 3490.62 1763 3528001 147.631 [ 0 4 10 1 7 9 5 3 6 2 11 8 ] 4004.28 3490.62 1764 3530001 147.336 [ 0 7 8 2 11 1 9 5 3 6 10 4 ] 3980.53 3490.62 1765 3532001 147.042 [ 0 7 11 4 10 8 1 2 5 3 9 6 ] 4300.67 3490.62 1766 3534001 146.749 [ 0 8 3 5 1 9 6 11 10 4 7 2 ] 4274.28 3490.62 1767 3536001 146.456 [ 0 2 8 5 3 9 6 4 10 11 1 7 ] 4027.37 3490.62 1768 3538001 146.163 [ 0 7 11 1 9 5 3 10 4 2 8 6 ] 3773.54 3490.62 1769 3540001 145.872 [ 0 6 2 9 1 10 4 7 5 3 8 11 ] 4240.27 3490.62 1770 3542001 145.58 [ 0 11 4 10 7 2 8 6 5 1 9 3 ] 4552.79 3490.62 1771 3544001 145.29 [ 0 10 4 2 3 5 9 1 7 11 8 6 ] 3816 3490.62 1772 3546001 145 [ 0 8 6 5 3 2 9 1 7 11 4 10 ] 3838.55 3490.62 1773 3548001 144.71 [ 0 6 4 7 3 5 8 11 9 2 10 1 ] 4860.1 3490.62 1774 3550001 144.422 [ 0 4 10 11 8 6 7 1 9 5 3 2 ] 3874.69 3490.62 1775 3552001 144.133 [ 0 8 4 10 1 5 3 2 6 9 11 7 ] 4368.26 3490.62 1776 3554001 143.846 [ 0 8 1 7 3 5 11 6 2 9 4 10 ] 4838.01 3490.62 1777 3556001 143.558 [ 0 4 11 10 8 6 9 5 3 2 1 7 ] 4372.76 3490.62 1778 3558001 143.272 [ 0 2 9 1 11 7 10 8 4 6 5 3 ] 4160.85 3490.62 1779 3560001 142.986 [ 0 2 7 11 9 6 4 10 1 8 3 5 ] 4353.08 3490.62 1780 3562001 142.701 [ 0 5 3 6 4 10 2 1 9 11 7 8 ] 4161.05 3490.62 1781 3564001 142.416 [ 0 10 4 7 2 5 3 9 1 11 8 6 ] 3843.69 3490.62 1782 3566001 142.131 [ 0 10 11 1 2 5 3 9 8 4 7 6 ] 4425.06 3490.62 1783 3568001 141.848 [ 0 6 4 1 11 7 2 8 10 9 3 5 ] 4260.08 3490.62 1784 3570001 141.565 [ 0 8 6 11 5 3 4 10 2 9 1 7 ] 4422.74 3490.62 1785 3572001 141.282 [ 0 6 9 5 2 3 8 10 4 11 1 7 ] 4452.08 3490.62 1786 3574001 141 [ 0 8 6 4 10 7 11 1 9 5 3 2 ] 3583.59 3490.62 1787 3576001 140.719 [ 0 9 5 3 2 4 10 6 7 1 11 8 ] 4142.03 3490.62 1788 3578001 140.438 [ 0 1 11 8 7 6 4 10 3 5 9 2 ] 4409.62 3490.62 1789 3580001 140.157 [ 0 6 3 5 7 8 9 1 11 10 4 2 ] 4048.4 3490.62 1790 3582001 139.878 [ 0 11 7 9 3 5 2 8 10 1 4 6 ] 4342.8 3490.62 1791 3584001 139.598 [ 0 8 4 3 5 2 7 11 10 1 9 6 ] 4193.73 3490.62 1792 3586001 139.32 [ 0 11 4 10 1 2 6 8 7 9 5 3 ] 4058.32 3490.62 1793 3588001 139.042 [ 0 5 3 1 9 11 4 10 7 2 8 6 ] 4037.24 3490.62 1794 3590001 138.764 [ 0 6 2 4 1 10 11 3 5 9 8 7 ] 4492.93 3490.62 1795 3592001 138.487 [ 0 8 3 5 9 10 4 1 11 7 2 6 ] 3818.16 3490.62 1796 3594001 138.211 [ 0 8 7 4 10 2 1 11 3 5 9 6 ] 4193.74 3490.62 1797 3596001 137.935 [ 0 4 10 1 9 3 5 6 2 11 7 8 ] 3869.4 3490.62 1798 3598001 137.66 [ 0 6 8 2 4 1 10 11 7 9 5 3 ] 3968.02 3490.62 1799 3600001 137.385 [ 0 3 5 9 8 2 4 10 1 11 7 6 ] 3859.98 3490.62 1800 3602001 137.111 [ 0 5 3 9 1 11 10 4 7 6 2 8 ] 3736.09 3490.62 1801 3604001 136.837 [ 0 10 7 9 8 1 3 5 2 4 11 6 ] 5005.46 3490.62 1802 3606001 136.564 [ 0 5 3 2 7 8 4 10 6 1 11 9 ] 4460.81 3490.62 1803 3608001 136.291 [ 0 6 2 11 1 10 4 7 9 5 3 8 ] 3761.93 3490.62 1804 3610001 136.019 [ 0 4 10 2 7 11 1 9 3 5 8 6 ] 3717.55 3490.62 1805 3612001 135.748 [ 0 4 10 2 8 6 5 3 1 7 11 9 ] 4388.25 3490.62 1806 3614001 135.477 [ 0 4 10 6 8 1 11 9 2 7 5 3 ] 4391.87 3490.62 1807 3616001 135.206 [ 0 2 6 7 9 1 11 10 4 8 5 3 ] 3915.37 3490.62 1808 3618001 134.937 [ 0 6 8 5 3 2 1 10 4 11 7 9 ] 4062.31 3490.62 1809 3620001 134.667 [ 0 3 5 9 1 11 10 7 4 6 2 8 ] 3901.47 3490.62 1810 3622001 134.398 [ 0 2 4 11 1 9 5 3 7 10 6 8 ] 4069.24 3490.62 1811 3624001 134.13 [ 0 8 4 10 11 2 7 1 9 3 5 6 ] 3705.38 3490.62 1812 3626001 133.862 [ 0 5 3 6 4 10 11 9 1 7 2 8 ] 3905.37 3490.62 1813 3628001 133.595 [ 0 4 10 1 2 6 8 3 5 9 7 11 ] 4060.05 3490.62 1814 3630001 133.329 [ 0 8 2 9 10 7 11 1 3 5 6 4 ] 4582.71 3490.62 1815 3632001 133.062 [ 0 6 1 7 11 4 10 3 5 9 8 2 ] 4140.22 3490.62 1816 3634001 132.797 [ 0 3 5 1 4 10 7 11 9 6 2 8 ] 4322.01 3490.62 1817 3636001 132.532 [ 0 5 3 9 1 6 8 10 7 11 4 2 ] 4264.11 3490.62 1818 3638001 132.267 [ 0 4 10 1 11 9 5 3 6 8 2 7 ] 3883.64 3490.62 1819 3640001 132.003 [ 0 3 5 6 10 4 9 2 7 11 1 8 ] 4249.4 3490.62 1820 3642001 131.74 [ 0 6 2 7 1 10 4 11 8 9 3 5 ] 4001.36 3490.62 1821 3644001 131.477 [ 0 3 5 10 2 6 8 7 9 1 11 4 ] 4374.92 3490.62 1822 3646001 131.214 [ 0 6 4 8 1 11 7 5 3 9 2 10 ] 4515.29 3490.62 1823 3648001 130.952 [ 0 6 7 11 1 9 3 5 2 4 10 8 ] 3778.27 3490.62 1824 3650001 130.691 [ 0 6 3 9 11 8 10 4 1 7 5 2 ] 4731.42 3490.62 1825 3652001 130.43 [ 0 6 2 7 11 1 9 3 5 4 10 8 ] 3714.59 3490.62 1826 3654001 130.17 [ 0 6 4 10 2 3 5 7 9 11 1 8 ] 4350.58 3490.62 1827 3656001 129.91 [ 0 4 10 11 7 8 9 3 5 2 1 6 ] 4294.17 3490.62 1828 3658001 129.651 [ 0 8 2 1 11 10 4 7 9 5 3 6 ] 3730.32 3490.62 1829 3660001 129.392 [ 0 1 9 3 5 11 10 4 6 7 2 8 ] 4227.32 3490.62 1830 3662001 129.134 [ 0 4 10 11 1 9 5 3 2 7 8 6 ] 3607.95 3490.62 1831 3664001 128.876 [ 0 2 3 7 11 10 1 9 5 6 8 4 ] 4514.81 3490.62 1832 3666001 128.619 [ 0 6 2 5 3 9 8 10 4 7 11 1 ] 4114.12 3490.62 1833 3668001 128.362 [ 0 5 3 9 1 2 4 6 8 7 11 10 ] 4275.68 3490.62 1834 3670001 128.106 [ 0 11 5 3 9 1 7 2 4 10 8 6 ] 4109.94 3490.62 1835 3672001 127.85 [ 0 7 6 1 4 10 11 9 5 3 8 2 ] 4276.95 3490.62 1836 3674001 127.595 [ 0 4 10 6 3 5 9 1 11 7 2 8 ] 3678.63 3490.62 1837 3676001 127.34 [ 0 6 2 7 10 4 11 1 9 8 5 3 ] 3882.32 3490.62 1838 3678001 127.086 [ 0 6 8 2 9 1 11 7 10 4 5 3 ] 3781.55 3490.62 1839 3680001 126.832 [ 0 5 3 9 4 11 10 7 8 1 2 6 ] 4549.26 3490.62 1840 3682001 126.579 [ 0 7 11 1 10 4 6 8 2 9 3 5 ] 3848.33 3490.62 1841 3684001 126.327 [ 0 7 9 1 11 4 10 2 5 3 6 8 ] 3908.8 3490.62 1842 3686001 126.074 [ 0 5 6 8 7 2 1 11 10 4 3 9 ] 4602.03 3490.62 1843 3688001 125.823 [ 0 2 5 3 10 4 8 11 1 9 6 7 ] 4386.82 3490.62 1844 3690001 125.572 [ 0 8 2 6 4 10 7 3 5 9 1 11 ] 3919.75 3490.62 1845 3692001 125.321 [ 0 8 1 11 10 4 7 2 9 5 3 6 ] 3791.51 3490.62 1846 3694001 125.071 [ 0 3 5 9 1 4 10 11 8 2 6 7 ] 3975 3490.62 1847 3696001 124.821 [ 0 7 4 2 10 11 1 9 5 3 8 6 ] 4014.34 3490.62 1848 3698001 124.572 [ 0 3 5 6 7 10 4 11 1 9 2 8 ] 3857.83 3490.62 1849 3700001 124.323 [ 0 6 8 2 7 9 1 11 10 4 3 5 ] 3787.57 3490.62 1850 3702001 124.075 [ 0 10 4 11 6 8 2 7 1 9 3 5 ] 3938.21 3490.62 1851 3704001 123.828 [ 0 3 5 9 7 2 6 8 1 11 10 4 ] 3900.69 3490.62 1852 3706001 123.58 [ 0 2 4 11 7 8 9 5 3 1 10 6 ] 4436.44 3490.62 1853 3708001 123.334 [ 0 5 3 6 9 1 11 7 2 8 4 10 ] 3962.24 3490.62 1854 3710001 123.088 [ 0 1 11 10 4 8 2 9 7 3 5 6 ] 4160.57 3490.62 1855 3712001 122.842 [ 0 6 4 10 8 2 7 1 11 9 3 5 ] 3911.42 3490.62 1856 3714001 122.597 [ 0 2 4 10 1 11 3 5 9 7 8 6 ] 3939.06 3490.62 1857 3716001 122.352 [ 0 7 3 5 8 6 2 9 1 11 4 10 ] 4079.77 3490.62 1858 3718001 122.108 [ 0 3 5 6 2 7 9 11 1 10 4 8 ] 3964.56 3490.62 1859 3720001 121.864 [ 0 7 4 10 11 1 9 5 3 2 6 8 ] 3628.26 3490.62 1860 3722001 121.621 [ 0 4 10 2 11 7 8 1 9 5 3 6 ] 4032.62 3490.62 1861 3724001 121.378 [ 0 1 10 4 7 9 3 5 2 11 8 6 ] 4206.49 3490.62 1862 3726001 121.136 [ 0 7 1 9 11 2 5 3 6 4 10 8 ] 4181.5 3490.62 1863 3728001 120.894 [ 0 2 1 7 11 10 4 8 6 9 3 5 ] 3968.17 3490.62 1864 3730001 120.653 [ 0 10 4 11 2 5 3 9 1 7 6 8 ] 3943.91 3490.62 1865 3732001 120.412 [ 0 3 5 9 6 8 2 7 1 11 4 10 ] 3853.32 3490.62 1866 3734001 120.172 [ 0 8 1 5 3 9 6 2 7 4 10 11 ] 4435.05 3490.62 1867 3736001 119.932 [ 0 10 4 3 5 9 1 11 8 2 6 7 ] 4123.7 3490.62 1868 3738001 119.692 [ 0 6 8 2 7 9 3 5 4 10 1 11 ] 3950.02 3490.62 1869 3740001 119.453 [ 0 6 4 11 1 8 10 7 9 5 3 2 ] 4245.22 3490.62 1870 3742001 119.215 [ 0 9 8 4 10 11 1 7 6 3 5 2 ] 4190.51 3490.62 1871 3744001 118.977 [ 0 5 9 1 11 3 8 6 7 4 10 2 ] 4490.39 3490.62 1872 3746001 118.74 [ 0 8 3 5 9 7 1 11 4 2 6 10 ] 4225.09 3490.62 1873 3748001 118.503 [ 0 8 10 4 11 7 2 1 9 5 3 6 ] 3682.03 3490.62 1874 3750001 118.266 [ 0 8 6 3 5 4 10 1 11 7 9 2 ] 3897.64 3490.62 1875 3752001 118.03 [ 0 3 5 9 7 2 1 11 10 4 8 6 ] 3717.69 3490.62 1876 3754001 117.794 [ 0 2 9 3 5 8 7 11 1 4 10 6 ] 3926.22 3490.62 1877 3756001 117.559 [ 0 6 11 1 7 3 5 9 2 8 4 10 ] 4037.52 3490.62 1878 3758001 117.325 [ 0 4 10 3 5 9 2 7 1 11 8 6 ] 3952.8 3490.62 1879 3760001 117.09 [ 0 2 8 10 4 3 5 6 7 1 9 11 ] 4338.06 3490.62 1880 3762001 116.857 [ 0 8 10 11 7 4 6 3 5 9 1 2 ] 4057.79 3490.62 1881 3764001 116.623 [ 0 8 7 11 9 1 4 10 6 2 5 3 ] 4079.17 3490.62 1882 3766001 116.391 [ 0 2 11 10 4 8 7 1 9 3 5 6 ] 3807.01 3490.62 1883 3768001 116.158 [ 0 3 5 8 10 4 1 9 11 7 2 6 ] 3959.4 3490.62 1884 3770001 115.926 [ 0 2 11 7 1 9 8 4 10 6 3 5 ] 4100.14 3490.62 1885 3772001 115.695 [ 0 8 3 5 1 7 11 10 4 6 2 9 ] 4225.8 3490.62 1886 3774001 115.464 [ 0 6 4 10 11 1 3 5 9 2 7 8 ] 3903.02 3490.62 1887 3776001 115.234 [ 0 8 2 3 5 6 9 11 1 7 10 4 ] 4134.31 3490.62 1888 3778001 115.004 [ 0 3 5 9 1 4 10 7 11 8 2 6 ] 3757.95 3490.62 1889 3780001 114.774 [ 0 8 3 6 2 10 4 11 1 9 5 7 ] 4391.21 3490.62 1890 3782001 114.545 [ 0 4 10 7 8 5 3 6 2 9 1 11 ] 4128.53 3490.62 1891 3784001 114.316 [ 0 2 9 5 3 8 6 7 1 11 4 10 ] 3883 3490.62 1892 3786001 114.088 [ 0 2 4 10 1 7 11 9 5 3 8 6 ] 3793.51 3490.62 1893 3788001 113.861 [ 0 8 3 5 9 1 11 6 4 10 7 2 ] 3827.12 3490.62 1894 3790001 113.633 [ 0 8 9 3 5 6 10 4 11 1 7 2 ] 3937.44 3490.62 1895 3792001 113.406 [ 0 4 10 11 7 1 9 5 3 8 6 2 ] 3651.74 3490.62 1896 3794001 113.18 [ 0 2 3 5 6 4 10 7 11 1 9 8 ] 3911.91 3490.62 1897 3796001 112.954 [ 0 8 3 5 9 10 4 6 2 7 1 11 ] 4075.28 3490.62 1898 3798001 112.729 [ 0 9 1 11 8 7 2 10 5 3 6 4 ] 4665.22 3490.62 1899 3800001 112.504 [ 0 8 4 10 7 11 2 1 9 5 3 6 ] 3759.3 3490.62 1900 3802001 112.279 [ 0 8 4 1 9 6 7 3 5 11 10 2 ] 4695.45 3490.62 1901 3804001 112.055 [ 0 6 4 10 1 9 3 5 2 7 11 8 ] 3795.42 3490.62 1902 3806001 111.831 [ 0 8 1 11 6 3 5 9 4 10 7 2 ] 4186.46 3490.62 1903 3808001 111.608 [ 0 3 5 9 1 11 4 10 7 8 2 6 ] 3627.34 3490.62 1904 3810001 111.385 [ 0 8 2 9 7 11 5 3 6 4 10 1 ] 4356.85 3490.62 1905 3812001 111.163 [ 0 6 8 2 7 11 10 4 5 1 3 9 ] 4765.79 3490.62 1906 3814001 110.941 [ 0 11 4 10 1 9 2 7 8 6 5 3 ] 4003.3 3490.62 1907 3816001 110.72 [ 0 8 1 11 3 5 9 2 7 10 4 6 ] 4075.53 3490.62 1908 3818001 110.499 [ 0 2 10 4 7 11 1 9 5 3 6 8 ] 3597.12 3490.62 1909 3820001 110.278 [ 0 6 4 10 2 7 11 1 9 5 3 8 ] 3635.96 3490.62 1910 3822001 110.058 [ 0 6 1 4 8 5 3 9 7 11 10 2 ] 4380.16 3490.62 1911 3824001 109.838 [ 0 2 6 8 7 5 3 9 1 4 10 11 ] 4059.9 3490.62 1912 3826001 109.619 [ 0 6 3 5 9 1 2 7 8 10 4 11 ] 3969.24 3490.62 1913 3828001 109.4 [ 0 6 8 2 9 5 7 11 1 10 4 3 ] 4314.51 3490.62 1914 3830001 109.182 [ 0 11 4 10 6 7 9 3 1 2 8 5 ] 5029.5 3490.62 1915 3832001 108.964 [ 0 6 8 10 4 1 2 11 7 9 5 3 ] 3930.97 3490.62 1916 3834001 108.747 [ 0 2 8 6 10 4 7 9 5 3 1 11 ] 4151.84 3490.62 1917 3836001 108.53 [ 0 8 7 2 10 4 11 1 9 3 5 6 ] 3720.9 3490.62 1918 3838001 108.313 [ 0 2 7 11 4 6 8 5 3 9 1 10 ] 4085.56 3490.62 1919 3840001 108.097 [ 0 7 11 10 4 8 6 2 1 9 5 3 ] 3773.99 3490.62 1920 3842001 107.881 [ 0 6 8 4 10 2 5 3 9 1 11 7 ] 3756.42 3490.62 1921 3844001 107.666 [ 0 5 3 6 8 7 11 2 1 4 10 9 ] 4422.67 3490.62 1922 3846001 107.451 [ 0 5 3 9 1 11 8 2 6 7 4 10 ] 4019.86 3490.62 1923 3848001 107.236 [ 0 6 2 8 10 4 7 11 1 9 5 3 ] 3589.87 3490.62 1924 3850001 107.022 [ 0 6 5 3 8 2 9 7 4 10 11 1 ] 4080.96 3490.62 1925 3852001 106.809 [ 0 8 9 11 1 7 3 5 6 10 4 2 ] 4307.95 3490.62 1926 3854001 106.595 [ 0 2 1 11 4 10 7 9 5 3 6 8 ] 3774.23 3490.62 1927 3856001 106.383 [ 0 6 2 1 10 4 7 9 3 5 8 11 ] 4238.88 3490.62 1928 3858001 106.17 [ 0 6 9 5 3 1 11 2 7 4 10 8 ] 4069.85 3490.62 1929 3860001 105.958 [ 0 6 8 7 11 4 10 1 2 9 5 3 ] 3792.29 3490.62 1930 3862001 105.747 [ 0 7 1 9 3 5 6 2 11 10 4 8 ] 3861.4 3490.62 1931 3864001 105.536 [ 0 6 10 11 8 1 9 5 3 2 7 4 ] 4319.99 3490.62 1932 3866001 105.325 [ 0 3 5 9 7 11 1 10 4 8 2 6 ] 3644.34 3490.62 1933 3868001 105.115 [ 0 6 5 3 2 7 9 1 10 4 8 11 ] 4093.56 3490.62 1934 3870001 104.905 [ 0 2 7 6 3 5 9 1 11 4 10 8 ] 3700.15 3490.62 1935 3872001 104.696 [ 0 2 1 9 5 3 6 8 7 11 4 10 ] 3846.25 3490.62 1936 3874001 104.487 [ 0 6 2 8 3 5 9 1 7 11 10 4 ] 3631.01 3490.62 1937 3876001 104.278 [ 0 2 7 1 10 4 11 9 8 6 3 5 ] 4076.28 3490.62 1938 3878001 104.07 [ 0 4 10 11 1 7 9 5 3 6 2 8 ] 3723.42 3490.62 1939 3880001 103.862 [ 0 8 6 10 4 7 11 1 9 2 5 3 ] 3815.66 3490.62 1940 3882001 103.655 [ 0 4 7 10 3 5 9 1 11 8 2 6 ] 4198.45 3490.62 1941 3884001 103.448 [ 0 6 8 4 10 11 7 1 9 5 3 2 ] 3525.97 3490.62 1942 3886001 103.242 [ 0 6 2 10 1 11 5 3 9 7 4 8 ] 4298.78 3490.62 1943 3888001 103.036 [ 0 9 1 7 11 10 4 5 8 2 3 6 ] 4459.21 3490.62 1944 3890001 102.83 [ 0 8 6 7 1 4 10 11 9 5 3 2 ] 3887.93 3490.62 1945 3892001 102.625 [ 0 6 3 5 9 2 8 7 1 11 10 4 ] 3744.6 3490.62 1946 3894001 102.42 [ 0 4 10 5 3 9 1 11 2 8 6 7 ] 4106.66 3490.62 1947 3896001 102.215 [ 0 3 5 9 1 8 11 4 10 6 2 7 ] 4136.81 3490.62 1948 3898001 102.011 [ 0 8 6 3 5 9 2 11 1 4 10 7 ] 3869.71 3490.62 1949 3900001 101.808 [ 0 6 5 3 7 10 4 11 1 9 2 8 ] 3825.35 3490.62 1950 3902001 101.605 [ 0 8 5 3 9 11 1 10 4 2 7 6 ] 3943.59 3490.62 1951 3904001 101.402 [ 0 3 5 9 1 11 7 10 4 8 2 6 ] 3554.32 3490.62 1952 3906001 101.199 [ 0 8 4 10 2 6 3 5 9 7 11 1 ] 3967.43 3490.62 1953 3908001 100.997 [ 0 2 8 7 4 10 11 1 9 6 5 3 ] 3939.99 3490.62 1954 3910001 100.796 [ 0 6 2 7 10 4 11 1 9 5 3 8 ] 3559.09 3490.62 1955 3912001 100.595 [ 0 9 5 3 6 2 7 10 4 8 11 1 ] 4175.52 3490.62 1956 3914001 100.394 [ 0 8 2 6 3 5 9 1 4 10 11 7 ] 3693.72 3490.62 1957 3916001 100.193 [ 0 5 3 2 8 10 4 1 9 11 7 6 ] 4029.5 3490.62 1958 3918001 99.9934 [ 0 7 11 2 8 5 3 9 1 10 4 6 ] 3884.24 3490.62 1959 3920001 99.7938 [ 0 5 3 6 4 10 11 1 9 8 7 2 ] 3974.8 3490.62 1960 3922001 99.5946 [ 0 2 3 5 8 9 7 6 4 10 1 11 ] 4347.84 3490.62 1961 3924001 99.3958 [ 0 6 3 5 9 2 7 10 4 11 1 8 ] 3814.68 3490.62 1962 3926001 99.1974 [ 0 8 7 6 3 5 9 1 11 4 10 2 ] 3794.88 3490.62 1963 3928001 98.9994 [ 0 9 1 11 3 5 6 2 7 10 4 8 ] 4087.72 3490.62 1964 3930001 98.8018 [ 0 11 7 5 3 9 1 10 4 6 2 8 ] 3997.45 3490.62 1965 3932001 98.6046 [ 0 5 3 9 11 1 10 6 2 8 4 7 ] 4345.1 3490.62 1966 3934001 98.4078 [ 0 5 3 9 11 1 2 6 8 7 10 4 ] 4093.62 3490.62 1967 3936001 98.2114 [ 0 2 5 3 6 8 1 9 7 11 10 4 ] 4018.62 3490.62 1968 3938001 98.0153 [ 0 7 6 3 5 9 1 11 10 4 8 2 ] 3764.8 3490.62 1969 3940001 97.8197 [ 0 2 8 10 11 7 4 1 9 5 3 6 ] 3912.62 3490.62 1970 3942001 97.6244 [ 0 8 10 4 7 11 1 9 2 5 3 6 ] 3759.73 3490.62 1971 3944001 97.4296 [ 0 7 11 4 10 1 9 3 5 8 2 6 ] 3751.81 3490.62 1972 3946001 97.2351 [ 0 2 8 11 4 10 7 1 9 5 3 6 ] 3734.73 3490.62 1973 3948001 97.041 [ 0 8 6 11 10 4 7 1 2 9 5 3 ] 3950.72 3490.62 1974 3950001 96.8473 [ 0 7 1 11 4 10 2 9 8 6 5 3 ] 4120.48 3490.62 1975 3952001 96.654 [ 0 6 8 7 11 1 9 3 5 2 10 4 ] 3776.05 3490.62 1976 3954001 96.4611 [ 0 4 11 1 8 2 6 10 5 3 9 7 ] 4632.53 3490.62 1977 3956001 96.2686 [ 0 6 3 5 9 1 11 4 10 7 2 8 ] 3519.13 3490.62 1978 3958001 96.0764 [ 0 10 5 3 7 11 4 6 8 9 1 2 ] 4651.79 3490.62 1979 3960001 95.8847 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 1980 3962001 95.6933 [ 0 8 10 4 7 11 1 9 5 3 2 6 ] 3571.5 3490.62 1981 3964001 95.5023 [ 0 10 3 5 4 11 1 9 7 2 6 8 ] 4344.38 3490.62 1982 3966001 95.3116 [ 0 6 2 8 3 5 9 1 7 11 4 10 ] 3690.22 3490.62 1983 3968001 95.1214 [ 0 4 10 7 8 6 1 11 2 9 3 5 ] 4190.66 3490.62 1984 3970001 94.9315 [ 0 10 11 7 8 3 5 9 1 4 2 6 ] 4095.04 3490.62 1985 3972001 94.742 [ 0 2 8 10 4 11 7 1 9 5 3 6 ] 3608.4 3490.62 1986 3974001 94.5529 [ 0 4 7 9 1 11 2 6 8 5 3 10 ] 4478.97 3490.62 1987 3976001 94.3642 [ 0 10 2 6 8 7 4 11 1 9 5 3 ] 4086.19 3490.62 1988 3978001 94.1759 [ 0 8 6 11 1 9 5 3 2 4 10 7 ] 3866.17 3490.62 1989 3980001 93.9879 [ 0 3 5 9 2 1 11 7 10 4 8 6 ] 3728.97 3490.62 1990 3982001 93.8003 [ 0 2 6 8 4 10 11 1 7 9 5 3 ] 3676.71 3490.62 1991 3984001 93.6131 [ 0 10 4 8 6 1 11 7 2 9 3 5 ] 4040.87 3490.62 1992 3986001 93.4262 [ 0 3 5 9 1 10 7 2 11 4 6 8 ] 3979.93 3490.62 1993 3988001 93.2397 [ 0 5 3 11 1 9 7 10 4 2 6 8 ] 4015.77 3490.62 1994 3990001 93.0536 [ 0 6 8 10 4 7 2 11 1 9 5 3 ] 3654.85 3490.62 1995 3992001 92.8679 [ 0 4 10 6 8 9 1 11 7 2 3 5 ] 3979.87 3490.62 1996 3994001 92.6825 [ 0 6 9 1 11 4 10 3 5 2 7 8 ] 4029.12 3490.62 1997 3996001 92.4975 [ 0 6 10 4 11 7 2 8 1 9 5 3 ] 3826.22 3490.62 1998 3998001 92.3129 [ 0 6 8 4 11 7 2 10 3 5 9 1 ] 4241.99 3490.62 1999 4000001 92.1286 [ 0 8 2 6 3 5 7 4 10 11 1 9 ] 3966.07 3490.62 2000 4002001 91.9448 [ 0 5 3 6 11 1 9 2 7 8 4 10 ] 4119.89 3490.62 2001 4004001 91.7612 [ 0 8 2 3 5 9 1 4 10 11 7 6 ] 3646.04 3490.62 2002 4006001 91.5781 [ 0 4 10 11 1 2 7 9 8 6 5 3 ] 4108.1 3490.62 2003 4008001 91.3953 [ 0 4 10 11 8 6 2 7 3 5 9 1 ] 4098.18 3490.62 2004 4010001 91.2129 [ 0 6 8 7 2 10 4 11 1 9 3 5 ] 3717.54 3490.62 2005 4012001 91.0308 [ 0 2 11 10 4 6 8 7 1 9 5 3 ] 3782.43 3490.62 2006 4014001 90.8491 [ 0 6 7 11 10 4 1 2 8 9 5 3 ] 3988.02 3490.62 2007 4016001 90.6678 [ 0 2 7 10 4 11 1 9 3 5 8 6 ] 3626.22 3490.62 2008 4018001 90.4868 [ 0 6 2 4 10 11 1 7 9 3 5 8 ] 3774.68 3490.62 2009 4020001 90.3062 [ 0 8 3 5 2 9 7 11 1 10 4 6 ] 3881.07 3490.62 2010 4022001 90.1259 [ 0 2 9 7 8 11 1 10 4 6 3 5 ] 4141.43 3490.62 2011 4024001 89.946 [ 0 8 2 11 7 1 9 3 5 10 4 6 ] 3889 3490.62 2012 4026001 89.7665 [ 0 4 10 11 1 7 9 3 5 8 6 2 ] 3830.51 3490.62 2013 4028001 89.5873 [ 0 4 10 7 11 1 9 5 3 2 8 6 ] 3565.4 3490.62 2014 4030001 89.4085 [ 0 8 7 11 1 9 3 5 6 4 10 2 ] 3809.08 3490.62 2015 4032001 89.23 [ 0 6 2 8 3 5 9 1 7 4 10 11 ] 3782.52 3490.62 2016 4034001 89.0519 [ 0 4 10 6 8 3 5 9 1 11 7 2 ] 3706.67 3490.62 2017 4036001 88.8742 [ 0 2 4 10 11 7 1 9 5 3 8 6 ] 3583.99 3490.62 2018 4038001 88.6968 [ 0 8 5 3 4 10 11 7 1 9 2 6 ] 3844.38 3490.62 2019 4040001 88.5198 [ 0 8 3 5 9 1 4 10 11 7 2 6 ] 3577.67 3490.62 2020 4042001 88.3431 [ 0 10 4 1 11 7 6 3 5 9 2 8 ] 3871.59 3490.62 2021 4044001 88.1667 [ 0 6 8 11 10 4 5 3 1 9 7 2 ] 4152.17 3490.62 2022 4046001 87.9908 [ 0 6 10 4 1 9 5 3 8 2 11 7 ] 3893.89 3490.62 2023 4048001 87.8151 [ 0 1 10 4 9 7 11 8 3 5 6 2 ] 4440.93 3490.62 2024 4050001 87.6398 [ 0 8 2 7 10 4 11 1 9 3 5 6 ] 3597.93 3490.62 2025 4052001 87.4649 [ 0 6 4 10 1 11 8 7 2 3 5 9 ] 3983.94 3490.62 2026 4054001 87.2903 [ 0 8 7 2 4 10 11 1 9 5 3 6 ] 3596.55 3490.62 2027 4056001 87.1161 [ 0 7 4 10 11 1 9 5 3 6 2 8 ] 3651.97 3490.62 2028 4058001 86.9422 [ 0 7 9 6 8 5 3 10 4 11 1 2 ] 4349.08 3490.62 2029 4060001 86.7687 [ 0 8 10 4 6 3 5 9 1 7 11 2 ] 3773.48 3490.62 2030 4062001 86.5955 [ 0 4 10 11 1 3 5 6 8 9 7 2 ] 4200.77 3490.62 2031 4064001 86.4226 [ 0 2 7 4 10 11 1 9 3 5 8 6 ] 3603.05 3490.62 2032 4066001 86.2501 [ 0 11 4 10 6 2 8 7 1 9 5 3 ] 3963.46 3490.62 2033 4068001 86.078 [ 0 6 4 11 7 2 8 10 1 9 5 3 ] 3910.54 3490.62 2034 4070001 85.9062 [ 0 8 6 10 4 11 1 9 5 3 2 7 ] 3708.31 3490.62 2035 4072001 85.7347 [ 0 7 9 1 10 4 11 2 5 3 6 8 ] 3954.66 3490.62 2036 4074001 85.5636 [ 0 6 5 3 9 1 11 10 4 7 2 8 ] 3574.76 3490.62 2037 4076001 85.3928 [ 0 3 5 9 1 7 11 4 10 8 2 6 ] 3614.98 3490.62 2038 4078001 85.2224 [ 0 6 11 7 9 2 5 3 8 1 10 4 ] 4319.02 3490.62 2039 4080001 85.0522 [ 0 3 5 9 1 7 2 11 10 4 6 8 ] 3680.81 3490.62 2040 4082001 84.8825 [ 0 5 3 6 2 7 8 9 1 11 10 4 ] 3989.26 3490.62 2041 4084001 84.7131 [ 0 8 10 4 11 1 2 6 9 3 5 7 ] 4228.06 3490.62 2042 4086001 84.544 [ 0 8 6 7 4 10 11 1 9 2 3 5 ] 3812.93 3490.62 2043 4088001 84.3752 [ 0 8 2 6 10 4 7 11 1 9 5 3 ] 3651.14 3490.62 2044 4090001 84.2068 [ 0 10 4 1 9 7 11 2 5 3 8 6 ] 3996.07 3490.62 2045 4092001 84.0387 [ 0 2 8 6 4 10 11 7 1 9 5 3 ] 3603.9 3490.62 2046 4094001 83.871 [ 0 8 6 4 10 11 1 7 2 3 5 9 ] 3760.1 3490.62 2047 4096001 83.7036 [ 0 6 8 10 4 11 1 3 5 9 7 2 ] 3869.08 3490.62 2048 4098001 83.5365 [ 0 4 10 2 7 11 1 9 3 5 6 8 ] 3709.98 3490.62 2049 4100001 83.3698 [ 0 4 10 1 11 7 5 3 9 2 8 6 ] 3833.67 3490.62 2050 4102001 83.2034 [ 0 2 7 4 10 11 1 9 5 3 8 6 ] 3524 3490.62 2051 4104001 83.0373 [ 0 2 11 4 10 7 1 9 5 3 8 6 ] 3685.1 3490.62 2052 4106001 82.8715 [ 0 8 3 5 9 1 4 10 7 11 2 6 ] 3713.65 3490.62 2053 4108001 82.7061 [ 0 8 7 5 3 9 1 11 4 10 6 2 ] 3924.54 3490.62 2054 4110001 82.541 [ 0 8 10 4 6 2 7 11 1 9 5 3 ] 3642.13 3490.62 2055 4112001 82.3763 [ 0 8 2 7 11 1 9 5 3 6 4 10 ] 3677.41 3490.62 2056 4114001 82.2119 [ 0 6 8 7 2 11 10 4 1 9 5 3 ] 3710.9 3490.62 2057 4116001 82.0478 [ 0 6 7 2 4 10 11 1 9 5 3 8 ] 3655.01 3490.62 2058 4118001 81.884 [ 0 2 7 11 1 10 4 8 3 5 9 6 ] 3753.76 3490.62 2059 4120001 81.7206 [ 0 1 11 7 2 4 10 8 6 3 5 9 ] 4043.53 3490.62 2060 4122001 81.5575 [ 0 2 8 4 10 1 9 3 5 11 7 6 ] 3951.17 3490.62 2061 4124001 81.3947 [ 0 10 4 1 11 9 5 3 2 7 8 6 ] 3904.95 3490.62 2062 4126001 81.2322 [ 0 8 2 9 1 11 7 10 4 5 3 6 ] 3786.89 3490.62 2063 4128001 81.0701 [ 0 2 8 9 1 7 11 4 10 3 5 6 ] 4004.64 3490.62 2064 4130001 80.9082 [ 0 8 6 4 10 7 11 1 9 5 3 2 ] 3583.59 3490.62 2065 4132001 80.7467 [ 0 2 7 6 8 10 4 11 1 9 5 3 ] 3694.81 3490.62 2066 4134001 80.5856 [ 0 8 4 10 7 2 6 11 1 9 5 3 ] 3766.83 3490.62 2067 4136001 80.4247 [ 0 6 10 4 2 9 11 1 7 8 5 3 ] 4159.81 3490.62 2068 4138001 80.2642 [ 0 2 9 1 10 4 11 7 6 3 5 8 ] 3881.77 3490.62 2069 4140001 80.104 [ 0 3 5 9 1 7 4 6 8 10 11 2 ] 4055.72 3490.62 2070 4142001 79.9441 [ 0 2 1 7 11 10 4 6 8 5 3 9 ] 4025.56 3490.62 2071 4144001 79.7845 [ 0 8 10 1 11 4 7 9 5 3 2 6 ] 3972.28 3490.62 2072 4146001 79.6253 [ 0 6 7 11 4 10 2 8 3 5 9 1 ] 3966.54 3490.62 2073 4148001 79.4664 [ 0 2 1 9 5 3 10 4 11 7 8 6 ] 3851.58 3490.62 2074 4150001 79.3077 [ 0 8 5 3 9 1 10 4 11 7 2 6 ] 3628.45 3490.62 2075 4152001 79.1494 [ 0 2 8 3 5 9 7 1 11 10 4 6 ] 3716.27 3490.62 2076 4154001 78.9915 [ 0 3 7 11 1 9 5 8 6 10 4 2 ] 4324.57 3490.62 2077 4156001 78.8338 [ 0 8 4 10 5 3 9 1 11 7 2 6 ] 3724.17 3490.62 2078 4158001 78.6764 [ 0 3 5 2 11 1 10 4 7 9 6 8 ] 4049.54 3490.62 2079 4160001 78.5194 [ 0 9 5 3 8 7 10 4 11 1 2 6 ] 3969.94 3490.62 2080 4162001 78.3627 [ 0 6 5 3 9 1 11 10 4 7 8 2 ] 3676.38 3490.62 2081 4164001 78.2063 [ 0 9 3 5 8 4 10 1 2 11 7 6 ] 4163.31 3490.62 2082 4166001 78.0502 [ 0 6 5 3 9 1 11 7 2 10 4 8 ] 3647.89 3490.62 2083 4168001 77.8944 [ 0 8 2 3 5 9 1 7 11 4 10 6 ] 3625.23 3490.62 2084 4170001 77.7389 [ 0 3 5 9 1 2 8 10 4 11 7 6 ] 3808.73 3490.62 2085 4172001 77.5837 [ 0 6 3 5 9 1 11 10 4 8 7 2 ] 3590.29 3490.62 2086 4174001 77.4289 [ 0 6 1 9 5 3 10 4 11 7 2 8 ] 3890.23 3490.62 2087 4176001 77.2743 [ 0 2 9 3 5 1 7 11 10 4 6 8 ] 3950.72 3490.62 2088 4178001 77.1201 [ 0 8 4 10 11 1 3 5 9 7 2 6 ] 3822.28 3490.62 2089 4180001 76.9661 [ 0 4 10 1 9 5 3 2 11 7 8 6 ] 3734.24 3490.62 2090 4182001 76.8125 [ 0 6 11 10 4 5 3 7 2 9 1 8 ] 4278.17 3490.62 2091 4184001 76.6592 [ 0 9 3 5 6 8 10 4 7 11 1 2 ] 3992.04 3490.62 2092 4186001 76.5062 [ 0 7 11 10 4 1 9 5 3 2 6 8 ] 3670.01 3490.62 2093 4188001 76.3535 [ 0 6 2 8 10 4 11 7 1 9 5 3 ] 3614.98 3490.62 2094 4190001 76.2011 [ 0 6 8 5 3 2 7 11 1 4 10 9 ] 4096.71 3490.62 2095 4192001 76.049 [ 0 5 3 9 11 7 10 4 6 1 2 8 ] 4252.46 3490.62 2096 4194001 75.8972 [ 0 2 1 9 5 3 8 10 4 11 7 6 ] 3842.12 3490.62 2097 4196001 75.7457 [ 0 8 6 5 3 9 7 1 11 10 4 2 ] 3755.19 3490.62 2098 4198001 75.5945 [ 0 6 3 5 2 9 1 11 7 10 4 8 ] 3724.18 3490.62 2099 4200001 75.4436 [ 0 9 5 3 4 2 6 8 7 1 11 10 ] 4337.48 3490.62 2100 4202001 75.293 [ 0 3 5 9 2 6 8 10 4 7 11 1 ] 3928.5 3490.62 2101 4204001 75.1427 [ 0 2 5 3 9 1 7 10 4 11 8 6 ] 3798.7 3490.62 2102 4206001 74.9928 [ 0 8 2 3 5 9 1 10 6 4 11 7 ] 4076.81 3490.62 2103 4208001 74.8431 [ 0 3 5 9 1 4 10 11 7 2 6 8 ] 3565.02 3490.62 2104 4210001 74.6937 [ 0 3 5 9 7 8 2 1 11 10 4 6 ] 3858.14 3490.62 2105 4212001 74.5446 [ 0 6 8 5 3 2 10 4 11 7 1 9 ] 3920 3490.62 2106 4214001 74.3958 [ 0 5 3 9 2 4 10 8 1 11 7 6 ] 4085.29 3490.62 2107 4216001 74.2473 [ 0 3 5 9 1 11 7 10 4 6 2 8 ] 3613.88 3490.62 2108 4218001 74.0991 [ 0 3 5 9 10 4 6 2 7 1 11 8 ] 4010.9 3490.62 2109 4220001 73.9512 [ 0 3 5 9 1 11 4 10 7 8 2 6 ] 3627.34 3490.62 2110 4222001 73.8036 [ 0 3 5 9 1 11 4 10 8 7 2 6 ] 3655.59 3490.62 2111 4224001 73.6563 [ 0 2 3 5 9 1 7 11 10 4 8 6 ] 3525.97 3490.62 2112 4226001 73.5093 [ 0 3 5 6 11 4 10 1 9 7 2 8 ] 3955.66 3490.62 2113 4228001 73.3625 [ 0 6 2 3 5 9 1 7 11 10 4 8 ] 3537.89 3490.62 2114 4230001 73.2161 [ 0 6 8 11 1 9 3 5 10 4 2 7 ] 3996.45 3490.62 2115 4232001 73.07 [ 0 2 7 1 9 11 10 4 8 5 3 6 ] 3877.46 3490.62 2116 4234001 72.9241 [ 0 7 9 1 11 10 4 2 6 5 3 8 ] 3918.04 3490.62 2117 4236001 72.7786 [ 0 6 8 7 10 4 11 1 9 5 3 2 ] 3597.05 3490.62 2118 4238001 72.6333 [ 0 2 1 11 7 10 4 8 6 9 3 5 ] 3966.23 3490.62 2119 4240001 72.4883 [ 0 8 6 2 7 5 3 9 11 1 10 4 ] 3974.54 3490.62 2120 4242001 72.3436 [ 0 8 2 1 9 5 3 7 11 10 4 6 ] 3777.09 3490.62 2121 4244001 72.1992 [ 0 5 3 9 1 11 4 10 2 7 6 8 ] 3768.69 3490.62 2122 4246001 72.0551 [ 0 3 5 9 1 11 7 4 10 2 8 6 ] 3571.04 3490.62 2123 4248001 71.9113 [ 0 8 2 5 3 9 1 11 7 4 10 6 ] 3687.8 3490.62 2124 4250001 71.7678 [ 0 6 8 3 5 9 1 11 10 4 7 2 ] 3524 3490.62 2125 4252001 71.6245 [ 0 8 3 5 9 1 10 4 11 7 6 2 ] 3702.17 3490.62 2126 4254001 71.4816 [ 0 3 5 9 1 4 10 11 7 2 8 6 ] 3532.36 3490.62 2127 4256001 71.3389 [ 0 10 4 11 1 9 3 5 6 8 2 7 ] 3812.13 3490.62 2128 4258001 71.1965 [ 0 6 7 11 1 9 5 3 2 4 10 8 ] 3690.59 3490.62 2129 4260001 71.0544 [ 0 8 10 4 3 5 9 1 11 7 2 6 ] 3651.12 3490.62 2130 4262001 70.9126 [ 0 6 5 3 9 4 10 1 11 8 7 2 ] 4055.62 3490.62 2131 4264001 70.771 [ 0 2 8 4 10 11 7 1 9 5 3 6 ] 3549.68 3490.62 2132 4266001 70.6298 [ 0 6 8 2 10 1 11 7 9 5 3 4 ] 4103.05 3490.62 2133 4268001 70.4888 [ 0 7 4 10 11 1 3 5 9 2 8 6 ] 3893.23 3490.62 2134 4270001 70.3481 [ 0 4 10 11 2 7 1 9 8 6 5 3 ] 4011.65 3490.62 2135 4272001 70.2077 [ 0 6 8 7 4 10 11 1 9 5 3 2 ] 3573.88 3490.62 2136 4274001 70.0675 [ 0 2 8 10 4 11 1 7 9 3 5 6 ] 3786.91 3490.62 2137 4276001 69.9277 [ 0 6 2 7 11 4 10 1 9 3 5 8 ] 3628.45 3490.62 2138 4278001 69.7881 [ 0 6 2 7 4 11 1 10 9 3 5 8 ] 4156.53 3490.62 2139 4280001 69.6488 [ 0 6 10 4 1 9 3 5 7 11 2 8 ] 3944.82 3490.62 2140 4282001 69.5098 [ 0 8 7 11 4 10 1 9 5 3 2 6 ] 3599.27 3490.62 2141 4284001 69.371 [ 0 6 8 1 7 11 10 4 2 9 5 3 ] 3846.16 3490.62 2142 4286001 69.2326 [ 0 6 8 11 1 4 10 7 9 3 5 2 ] 3915.05 3490.62 2143 4288001 69.0944 [ 0 9 1 4 10 11 7 2 8 5 3 6 ] 3879.92 3490.62 2144 4290001 68.9565 [ 0 2 8 6 10 4 7 11 1 9 5 3 ] 3639.22 3490.62 2145 4292001 68.8188 [ 0 2 8 7 1 11 10 4 9 5 3 6 ] 3833.88 3490.62 2146 4294001 68.6815 [ 0 10 4 7 1 11 2 9 5 3 6 8 ] 3835.72 3490.62 2147 4296001 68.5444 [ 0 4 10 11 1 7 8 6 9 5 3 2 ] 3877.37 3490.62 2148 4298001 68.4076 [ 0 10 4 9 1 7 11 8 3 5 2 6 ] 4180.5 3490.62 2149 4300001 68.271 [ 0 8 2 11 7 10 4 1 9 5 3 6 ] 3673.69 3490.62 2150 4302001 68.1348 [ 0 8 6 4 10 7 11 1 9 3 5 2 ] 3671.27 3490.62 2151 4304001 67.9988 [ 0 4 10 11 7 1 9 5 3 6 2 8 ] 3623.7 3490.62 2152 4306001 67.863 [ 0 8 6 7 2 9 1 11 10 4 5 3 ] 3875.25 3490.62 2153 4308001 67.7276 [ 0 2 7 8 6 4 10 11 1 9 5 3 ] 3644.51 3490.62 2154 4310001 67.5924 [ 0 6 2 8 4 11 7 3 5 9 1 10 ] 4045.78 3490.62 2155 4312001 67.4575 [ 0 6 8 4 10 7 11 1 9 3 5 2 ] 3611.71 3490.62 2156 4314001 67.3228 [ 0 6 2 8 3 5 9 1 4 10 11 7 ] 3701.03 3490.62 2157 4316001 67.1885 [ 0 8 6 3 5 9 2 7 1 11 4 10 ] 3722.91 3490.62 2158 4318001 67.0543 [ 0 8 2 3 5 9 6 4 10 11 7 1 ] 4039.18 3490.62 2159 4320001 66.9205 [ 0 6 8 3 5 9 10 4 11 1 7 2 ] 3789.61 3490.62 2160 4322001 66.7869 [ 0 2 3 5 9 1 7 11 10 4 8 6 ] 3525.97 3490.62 2161 4324001 66.6536 [ 0 5 3 9 1 11 7 8 6 4 10 2 ] 3805.71 3490.62 2162 4326001 66.5206 [ 0 5 3 9 1 7 11 10 4 8 6 2 ] 3657.77 3490.62 2163 4328001 66.3878 [ 0 5 3 2 6 4 10 7 9 1 11 8 ] 3985.79 3490.62 2164 4330001 66.2553 [ 0 3 5 9 1 11 4 10 6 7 2 8 ] 3735.36 3490.62 2165 4332001 66.1231 [ 0 6 9 5 3 2 8 4 10 1 11 7 ] 3825.37 3490.62 2166 4334001 65.9911 [ 0 2 3 5 9 7 1 11 4 10 6 8 ] 3745.68 3490.62 2167 4336001 65.8594 [ 0 5 3 9 1 7 4 10 11 6 8 2 ] 3844.93 3490.62 2168 4338001 65.7279 [ 0 2 6 5 3 9 1 11 7 10 4 8 ] 3659.19 3490.62 2169 4340001 65.5967 [ 0 6 8 3 5 9 1 2 7 11 10 4 ] 3692.72 3490.62 2170 4342001 65.4658 [ 0 6 8 5 3 9 1 7 11 10 4 2 ] 3663.04 3490.62 2171 4344001 65.3351 [ 0 3 5 9 1 8 2 7 11 10 4 6 ] 3765.78 3490.62 2172 4346001 65.2047 [ 0 8 6 5 3 4 10 9 1 11 7 2 ] 3952.44 3490.62 2173 4348001 65.0745 [ 0 3 5 2 1 11 10 4 7 9 8 6 ] 4038.47 3490.62 2174 4350001 64.9447 [ 0 3 5 9 6 2 4 10 11 1 7 8 ] 3872.55 3490.62 2175 4352001 64.815 [ 0 3 5 9 2 4 10 11 1 7 8 6 ] 3704.15 3490.62 2176 4354001 64.6857 [ 0 3 5 9 1 2 7 11 4 10 8 6 ] 3676.69 3490.62 2177 4356001 64.5565 [ 0 3 5 9 1 11 8 4 10 6 2 7 ] 3921.79 3490.62 2178 4358001 64.4277 [ 0 2 8 3 5 9 1 7 11 10 4 6 ] 3616.55 3490.62 2179 4360001 64.2991 [ 0 6 3 5 9 1 10 4 11 7 2 8 ] 3509.43 3490.62 2180 4362001 64.1707 [ 0 6 3 5 9 1 11 10 4 7 2 8 ] 3495.96 3490.62 2181 4364001 64.0427 [ 0 6 5 3 9 1 11 4 10 7 2 8 ] 3597.93 3490.62 2182 4366001 63.9148 [ 0 3 5 9 1 7 11 4 10 6 2 8 ] 3676.26 3490.62 2183 4368001 63.7873 [ 0 6 2 3 5 10 4 11 9 1 7 8 ] 4055.18 3490.62 2184 4370001 63.6599 [ 0 3 5 9 1 11 10 4 7 8 2 6 ] 3604.17 3490.62 2185 4372001 63.5329 [ 0 8 5 3 9 2 6 11 1 10 4 7 ] 4052.15 3490.62 2186 4374001 63.4061 [ 0 3 5 9 4 10 1 11 7 2 8 6 ] 3715.28 3490.62 2187 4376001 63.2795 [ 0 5 3 9 7 11 1 2 10 4 8 6 ] 3878.89 3490.62 2188 4378001 63.1532 [ 0 5 3 9 1 7 11 10 4 2 8 6 ] 3631.38 3490.62 2189 4380001 63.0271 [ 0 8 6 5 3 9 4 10 11 1 7 2 ] 3831.78 3490.62 2190 4382001 62.9013 [ 0 6 2 3 5 9 1 4 10 7 11 8 ] 3739.58 3490.62 2191 4384001 62.7758 [ 0 6 2 3 5 9 7 1 11 10 4 8 ] 3637.61 3490.62 2192 4386001 62.6505 [ 0 5 3 9 6 7 11 10 4 8 1 2 ] 4282.83 3490.62 2193 4388001 62.5254 [ 0 3 5 9 1 11 4 10 7 2 6 8 ] 3546.44 3490.62 2194 4390001 62.4006 [ 0 2 3 5 9 1 7 11 10 4 6 8 ] 3585.53 3490.62 2195 4392001 62.2761 [ 0 6 10 3 5 9 1 11 4 7 8 2 ] 4132.39 3490.62 2196 4394001 62.1518 [ 0 6 2 3 5 9 1 11 7 10 4 8 ] 3535.95 3490.62 2197 4396001 62.0277 [ 0 3 5 9 2 6 8 7 1 11 10 4 ] 3771.91 3490.62 2198 4398001 61.9039 [ 0 6 5 3 9 1 4 10 11 7 2 8 ] 3616.5 3490.62 2199 4400001 61.7803 [ 0 8 5 3 9 2 7 1 11 10 4 6 ] 3747.53 3490.62 2200 4402001 61.657 [ 0 3 5 9 1 11 7 6 4 10 2 8 ] 3755.35 3490.62 2201 4404001 61.534 [ 0 3 5 9 1 11 4 10 7 2 6 8 ] 3546.44 3490.62 2202 4406001 61.4111 [ 0 5 3 8 7 11 4 10 1 9 2 6 ] 3838.93 3490.62 2203 4408001 61.2886 [ 0 8 5 3 9 1 11 10 4 7 2 6 ] 3614.97 3490.62 2204 4410001 61.1662 [ 0 3 5 9 1 11 7 10 4 8 2 6 ] 3554.32 3490.62 2205 4412001 61.0441 [ 0 2 3 5 9 1 7 11 10 4 8 6 ] 3525.97 3490.62 2206 4414001 60.9223 [ 0 8 3 5 9 1 11 7 2 6 4 10 ] 3717.37 3490.62 2207 4416001 60.8007 [ 0 3 5 9 1 10 4 11 7 2 8 6 ] 3504.09 3490.62 2208 4418001 60.6793 [ 0 3 5 9 1 11 2 7 4 10 6 8 ] 3716.13 3490.62 2209 4420001 60.5582 [ 0 3 5 9 6 2 4 10 11 1 7 8 ] 3872.55 3490.62 2210 4422001 60.4374 [ 0 8 6 3 5 9 1 11 2 7 4 10 ] 3722.78 3490.62 2211 4424001 60.3167 [ 0 3 5 9 1 10 4 7 11 2 8 6 ] 3616.91 3490.62 2212 4426001 60.1963 [ 0 8 5 3 9 1 11 7 2 6 10 4 ] 3797.65 3490.62 2213 4428001 60.0762 [ 0 6 8 3 5 9 2 7 11 4 10 1 ] 3855.37 3490.62 2214 4430001 59.9563 [ 0 6 8 5 3 9 2 7 11 1 10 4 ] 3738.43 3490.62 2215 4432001 59.8366 [ 0 7 1 9 5 3 6 2 11 10 4 8 ] 3782.6 3490.62 2216 4434001 59.7172 [ 0 8 6 3 5 9 1 7 4 10 11 2 ] 3654.61 3490.62 2217 4436001 59.598 [ 0 3 5 6 8 2 7 10 4 11 1 9 ] 3848.44 3490.62 2218 4438001 59.479 [ 0 2 3 5 9 1 11 4 10 7 8 6 ] 3597.05 3490.62 2219 4440001 59.3603 [ 0 8 6 3 5 9 2 7 11 1 10 4 ] 3652.06 3490.62 2220 4442001 59.2418 [ 0 6 2 3 5 9 7 1 11 4 10 8 ] 3696.33 3490.62 2221 4444001 59.1235 [ 0 6 8 2 3 5 9 1 7 11 10 4 ] 3567.34 3490.62 2222 4446001 59.0055 [ 0 6 4 10 8 3 5 9 1 11 7 2 ] 3642.86 3490.62 2223 4448001 58.8878 [ 0 4 10 1 9 3 5 11 7 2 6 8 ] 3893.15 3490.62 2224 4450001 58.7702 [ 0 8 6 3 5 9 1 10 4 11 7 2 ] 3530.16 3490.62 2225 4452001 58.6529 [ 0 2 9 5 3 7 1 11 4 10 6 8 ] 3836.55 3490.62 2226 4454001 58.5358 [ 0 5 3 9 1 4 10 11 7 2 6 8 ] 3645.79 3490.62 2227 4456001 58.419 [ 0 6 8 2 7 11 1 9 3 5 10 4 ] 3753.61 3490.62 2228 4458001 58.3024 [ 0 2 10 4 11 7 1 9 5 3 6 8 ] 3622.23 3490.62 2229 4460001 58.186 [ 0 6 11 10 4 1 7 9 3 5 2 8 ] 3954.19 3490.62 2230 4462001 58.0699 [ 0 6 10 4 7 11 1 9 5 3 2 8 ] 3600.12 3490.62 2231 4464001 57.954 [ 0 6 4 10 11 1 7 9 5 3 2 8 ] 3664.52 3490.62 2232 4466001 57.8383 [ 0 8 4 10 11 2 7 1 9 3 5 6 ] 3705.38 3490.62 2233 4468001 57.7229 [ 0 8 10 4 2 9 1 11 7 3 5 6 ] 3888.47 3490.62 2234 4470001 57.6076 [ 0 6 2 8 7 11 4 10 1 9 3 5 ] 3698.42 3490.62 2235 4472001 57.4927 [ 0 6 8 7 2 10 4 11 1 9 5 3 ] 3636.76 3490.62 2236 4474001 57.3779 [ 0 8 7 11 4 10 1 9 5 3 2 6 ] 3599.27 3490.62 2237 4476001 57.2634 [ 0 6 8 2 10 4 11 7 1 9 5 3 ] 3596.16 3490.62 2238 4478001 57.1491 [ 0 10 4 6 8 2 7 11 1 9 3 5 ] 3752.85 3490.62 2239 4480001 57.035 [ 0 6 8 2 4 10 1 11 7 9 3 5 ] 3719.46 3490.62 2240 4482001 56.9212 [ 0 6 8 2 4 10 7 1 11 9 5 3 ] 3769.82 3490.62 2241 4484001 56.8075 [ 0 6 11 4 10 8 2 7 1 9 5 3 ] 3794.84 3490.62 2242 4486001 56.6942 [ 0 6 8 2 7 11 4 10 1 9 3 5 ] 3584.87 3490.62 2243 4488001 56.581 [ 0 8 4 10 11 7 1 9 5 3 2 6 ] 3537.89 3490.62 2244 4490001 56.4681 [ 0 6 2 7 11 4 10 1 9 5 3 8 ] 3549.4 3490.62 2245 4492001 56.3554 [ 0 6 8 2 4 10 7 11 1 9 3 5 ] 3629.44 3490.62 2246 4494001 56.2429 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2247 4496001 56.1306 [ 0 6 8 4 10 11 7 1 9 5 3 2 ] 3525.97 3490.62 2248 4498001 56.0186 [ 0 8 2 4 10 7 11 1 9 5 3 6 ] 3554.01 3490.62 2249 4500001 55.9068 [ 0 6 8 4 10 7 11 1 9 5 3 2 ] 3524.03 3490.62 2250 4502001 55.7952 [ 0 8 2 7 4 10 11 1 9 3 5 6 ] 3574.76 3490.62 2251 4504001 55.6838 [ 0 8 9 1 11 7 10 4 6 5 3 2 ] 3911.91 3490.62 2252 4506001 55.5727 [ 0 6 7 2 11 4 10 1 9 5 3 8 ] 3746.42 3490.62 2253 4508001 55.4617 [ 0 8 4 10 11 7 1 9 5 3 2 6 ] 3537.89 3490.62 2254 4510001 55.351 [ 0 2 10 4 1 9 5 3 6 7 11 8 ] 3925.49 3490.62 2255 4512001 55.2405 [ 0 11 1 7 10 4 2 9 5 3 8 6 ] 3880.57 3490.62 2256 4514001 55.1303 [ 0 4 10 2 8 7 11 1 9 3 5 6 ] 3790.88 3490.62 2257 4516001 55.0202 [ 0 8 6 2 7 10 4 11 1 9 3 5 ] 3627.22 3490.62 2258 4518001 54.9104 [ 0 2 6 8 4 10 7 11 1 9 5 3 ] 3575.05 3490.62 2259 4520001 54.8008 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2260 4522001 54.6914 [ 0 6 8 4 10 1 11 7 2 9 5 3 ] 3584.62 3490.62 2261 4524001 54.5823 [ 0 6 8 7 10 4 1 11 2 9 3 5 ] 3902.68 3490.62 2262 4526001 54.4733 [ 0 6 7 11 1 10 4 8 2 3 5 9 ] 3820.95 3490.62 2263 4528001 54.3646 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2264 4530001 54.2561 [ 0 2 6 8 4 10 7 11 1 9 5 3 ] 3575.05 3490.62 2265 4532001 54.1478 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2266 4534001 54.0397 [ 0 2 8 6 10 4 7 11 1 9 5 3 ] 3639.22 3490.62 2267 4536001 53.9318 [ 0 6 8 2 7 10 4 11 1 9 3 5 ] 3594.57 3490.62 2268 4538001 53.8242 [ 0 7 2 4 10 11 1 9 5 3 6 8 ] 3639.02 3490.62 2269 4540001 53.7168 [ 0 8 4 10 7 11 1 9 5 3 2 6 ] 3535.95 3490.62 2270 4542001 53.6095 [ 0 6 4 10 11 1 7 8 2 9 5 3 ] 3736.72 3490.62 2271 4544001 53.5025 [ 0 6 2 8 4 10 7 11 1 9 5 3 ] 3554.32 3490.62 2272 4546001 53.3957 [ 0 8 4 10 1 11 7 2 9 5 3 6 ] 3589.97 3490.62 2273 4548001 53.2892 [ 0 8 4 10 11 7 1 9 5 3 6 2 ] 3582.33 3490.62 2274 4550001 53.1828 [ 0 2 7 11 4 10 1 9 5 3 8 6 ] 3537.48 3490.62 2275 4552001 53.0767 [ 0 6 8 4 10 11 7 1 9 3 5 2 ] 3613.65 3490.62 2276 4554001 52.9707 [ 0 6 10 4 8 2 7 11 1 9 5 3 ] 3611.19 3490.62 2277 4556001 52.865 [ 0 8 4 10 7 11 1 9 5 3 6 2 ] 3580.39 3490.62 2278 4558001 52.7595 [ 0 2 7 11 10 4 1 9 5 3 8 6 ] 3565.75 3490.62 2279 4560001 52.6542 [ 0 8 2 7 11 10 4 1 9 5 3 6 ] 3537.7 3490.62 2280 4562001 52.5491 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2281 4564001 52.4442 [ 0 2 8 10 4 7 11 1 9 3 5 6 ] 3662.09 3490.62 2282 4566001 52.3395 [ 0 8 2 7 11 10 4 1 9 5 3 6 ] 3537.7 3490.62 2283 4568001 52.235 [ 0 2 7 10 4 11 1 9 5 3 6 8 ] 3539.86 3490.62 2284 4570001 52.1308 [ 0 8 7 4 10 11 1 9 3 5 6 2 ] 3709.04 3490.62 2285 4572001 52.0267 [ 0 8 4 10 1 11 7 9 5 3 2 6 ] 3625.97 3490.62 2286 4574001 51.9229 [ 0 2 6 8 4 10 7 11 1 9 5 3 ] 3575.05 3490.62 2287 4576001 51.8192 [ 0 6 2 7 8 4 10 11 1 9 5 3 ] 3596.87 3490.62 2288 4578001 51.7158 [ 0 6 8 7 4 10 11 1 9 5 3 2 ] 3573.88 3490.62 2289 4580001 51.6126 [ 0 8 2 7 11 10 4 1 9 5 3 6 ] 3537.7 3490.62 2290 4582001 51.5095 [ 0 8 6 2 4 10 11 7 1 9 5 3 ] 3583.26 3490.62 2291 4584001 51.4067 [ 0 8 2 6 4 10 11 7 1 9 5 3 ] 3615.82 3490.62 2292 4586001 51.3041 [ 0 2 10 4 8 6 7 11 1 9 5 3 ] 3716.52 3490.62 2293 4588001 51.2017 [ 0 2 6 8 4 10 7 11 1 9 5 3 ] 3575.05 3490.62 2294 4590001 51.0995 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2295 4592001 50.9975 [ 0 2 6 8 1 11 4 10 7 9 5 3 ] 3889.79 3490.62 2296 4594001 50.8957 [ 0 2 6 8 4 10 7 11 1 9 5 3 ] 3575.05 3490.62 2297 4596001 50.7941 [ 0 4 10 6 8 2 7 11 1 9 5 3 ] 3673.29 3490.62 2298 4598001 50.6928 [ 0 6 2 8 4 10 7 11 1 9 5 3 ] 3554.32 3490.62 2299 4600001 50.5916 [ 0 8 6 2 7 10 4 11 1 9 5 3 ] 3546.44 3490.62 2300 4602001 50.4906 [ 0 8 6 2 7 10 4 11 1 9 3 5 ] 3627.22 3490.62 2301 4604001 50.3898 [ 0 2 8 6 10 7 4 11 1 9 5 3 ] 3949.98 3490.62 2302 4606001 50.2892 [ 0 6 2 10 4 8 7 11 1 9 5 3 ] 3677.3 3490.62 2303 4608001 50.1889 [ 0 6 8 10 4 11 1 9 5 3 7 2 ] 3662.33 3490.62 2304 4610001 50.0887 [ 0 10 4 7 11 1 9 5 3 6 8 2 ] 3645.88 3490.62 2305 4612001 49.9887 [ 0 8 10 4 11 1 7 9 5 3 6 2 ] 3740.77 3490.62 2306 4614001 49.8889 [ 0 2 7 4 10 11 1 9 3 5 6 8 ] 3595.49 3490.62 2307 4616001 49.7893 [ 0 8 7 11 10 4 1 9 3 5 6 2 ] 3750.78 3490.62 2308 4618001 49.69 [ 0 2 7 10 4 11 1 9 5 3 8 6 ] 3547.17 3490.62 2309 4620001 49.5908 [ 0 6 2 7 4 10 11 1 9 5 3 8 ] 3535.92 3490.62 2310 4622001 49.4918 [ 0 8 2 4 10 11 7 1 9 3 5 6 ] 3634.74 3490.62 2311 4624001 49.393 [ 0 2 7 4 10 8 6 11 1 9 5 3 ] 3790.46 3490.62 2312 4626001 49.2944 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2313 4628001 49.196 [ 0 8 2 7 4 10 11 1 9 3 5 6 ] 3574.76 3490.62 2314 4630001 49.0978 [ 0 2 8 10 4 11 1 7 9 5 3 6 ] 3708.11 3490.62 2315 4632001 48.9998 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2316 4634001 48.902 [ 0 8 6 4 10 11 7 1 9 5 3 2 ] 3585.53 3490.62 2317 4636001 48.8044 [ 0 4 10 11 1 7 2 6 8 3 5 9 ] 3826.31 3490.62 2318 4638001 48.707 [ 0 6 2 8 4 10 11 7 1 9 5 3 ] 3556.26 3490.62 2319 4640001 48.6098 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2320 4642001 48.5128 [ 0 6 2 8 10 4 11 7 1 9 5 3 ] 3614.98 3490.62 2321 4644001 48.4159 [ 0 6 8 10 4 11 1 7 9 3 5 2 ] 3772.08 3490.62 2322 4646001 48.3193 [ 0 6 2 4 10 7 11 1 9 5 3 8 ] 3593.97 3490.62 2323 4648001 48.2229 [ 0 6 2 11 10 4 7 1 9 5 3 8 ] 3673.85 3490.62 2324 4650001 48.1266 [ 0 2 7 10 4 11 1 9 5 3 8 6 ] 3547.17 3490.62 2325 4652001 48.0305 [ 0 7 4 10 11 1 9 5 3 2 8 6 ] 3595.61 3490.62 2326 4654001 47.9347 [ 0 10 4 7 11 1 9 5 3 2 8 6 ] 3601.44 3490.62 2327 4656001 47.839 [ 0 8 2 6 10 4 7 11 1 9 5 3 ] 3651.14 3490.62 2328 4658001 47.7435 [ 0 2 4 10 8 7 11 1 9 5 3 6 ] 3683.88 3490.62 2329 4660001 47.6482 [ 0 2 4 10 11 7 1 9 3 5 6 8 ] 3655.47 3490.62 2330 4662001 47.5531 [ 0 4 10 11 7 1 9 5 3 2 8 6 ] 3567.34 3490.62 2331 4664001 47.4582 [ 0 6 8 4 10 11 1 7 2 9 5 3 ] 3596.26 3490.62 2332 4666001 47.3635 [ 0 6 8 2 7 4 10 11 1 9 3 5 ] 3571.39 3490.62 2333 4668001 47.2689 [ 0 2 8 6 7 10 4 11 1 9 5 3 ] 3666.56 3490.62 2334 4670001 47.1746 [ 0 6 2 7 4 10 1 11 9 5 3 8 ] 3745.44 3490.62 2335 4672001 47.0804 [ 0 4 10 8 2 7 11 1 9 6 3 5 ] 3961.74 3490.62 2336 4674001 46.9864 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2337 4676001 46.8927 [ 0 8 4 10 1 11 7 2 9 5 3 6 ] 3589.97 3490.62 2338 4678001 46.7991 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2339 4680001 46.7056 [ 0 2 7 6 4 10 11 1 9 5 3 8 ] 3708.3 3490.62 2340 4682001 46.6124 [ 0 6 8 4 10 7 11 1 9 5 3 2 ] 3524.03 3490.62 2341 4684001 46.5194 [ 0 6 8 4 10 11 7 1 9 3 5 2 ] 3613.65 3490.62 2342 4686001 46.4265 [ 0 6 8 4 10 7 11 1 9 5 3 2 ] 3524.03 3490.62 2343 4688001 46.3339 [ 0 6 2 8 4 10 11 1 9 5 3 7 ] 3738.89 3490.62 2344 4690001 46.2414 [ 0 8 10 4 7 11 1 9 5 3 2 6 ] 3571.5 3490.62 2345 4692001 46.1491 [ 0 2 6 8 4 10 1 11 7 9 5 3 ] 3665.07 3490.62 2346 4694001 46.057 [ 0 2 7 6 8 10 4 11 1 9 5 3 ] 3694.81 3490.62 2347 4696001 45.965 [ 0 2 6 8 10 4 11 7 1 9 5 3 ] 3635.71 3490.62 2348 4698001 45.8733 [ 0 4 10 6 8 7 11 1 9 5 3 2 ] 3756.55 3490.62 2349 4700001 45.7817 [ 0 2 4 10 11 7 1 9 5 3 8 6 ] 3583.99 3490.62 2350 4702001 45.6903 [ 0 2 7 10 4 11 1 9 3 5 6 8 ] 3618.66 3490.62 2351 4704001 45.5991 [ 0 2 7 11 10 4 1 9 5 3 6 8 ] 3558.44 3490.62 2352 4706001 45.5081 [ 0 2 7 4 10 11 1 9 3 5 6 8 ] 3595.49 3490.62 2353 4708001 45.4173 [ 0 8 10 4 11 1 9 5 3 7 2 6 ] 3674.25 3490.62 2354 4710001 45.3266 [ 0 2 4 10 11 7 1 9 5 3 8 6 ] 3583.99 3490.62 2355 4712001 45.2362 [ 0 2 7 11 10 4 1 9 5 3 6 8 ] 3558.44 3490.62 2356 4714001 45.1459 [ 0 2 10 4 7 11 1 9 3 5 8 6 ] 3683.48 3490.62 2357 4716001 45.0558 [ 0 6 4 10 11 7 1 9 5 3 2 8 ] 3564.8 3490.62 2358 4718001 44.9658 [ 0 8 4 10 7 11 1 9 5 3 6 2 ] 3580.39 3490.62 2359 4720001 44.8761 [ 0 6 10 4 7 11 1 9 5 3 2 8 ] 3600.12 3490.62 2360 4722001 44.7865 [ 0 8 4 10 7 11 1 9 5 3 2 6 ] 3535.95 3490.62 2361 4724001 44.6971 [ 0 7 4 10 11 1 9 5 3 2 8 6 ] 3595.61 3490.62 2362 4726001 44.6079 [ 0 4 10 7 11 1 9 5 3 6 2 8 ] 3621.76 3490.62 2363 4728001 44.5189 [ 0 8 4 10 11 7 1 9 5 3 2 6 ] 3537.89 3490.62 2364 4730001 44.43 [ 0 6 4 10 11 7 1 9 5 3 2 8 ] 3564.8 3490.62 2365 4732001 44.3413 [ 0 4 10 7 11 1 9 8 2 3 5 6 ] 3893.71 3490.62 2366 4734001 44.2528 [ 0 8 6 4 10 2 7 11 1 9 5 3 ] 3623.31 3490.62 2367 4736001 44.1645 [ 0 6 8 7 2 11 4 10 1 9 5 3 ] 3682.63 3490.62 2368 4738001 44.0763 [ 0 8 2 7 11 1 4 10 6 9 5 3 ] 3868.64 3490.62 2369 4740001 43.9884 [ 0 2 7 6 8 10 4 11 1 9 5 3 ] 3694.81 3490.62 2370 4742001 43.9006 [ 0 8 2 7 11 10 4 1 9 5 3 6 ] 3537.7 3490.62 2371 4744001 43.8129 [ 0 6 8 4 10 11 7 1 9 5 3 2 ] 3525.97 3490.62 2372 4746001 43.7255 [ 0 8 4 10 11 7 1 2 9 5 3 6 ] 3736.25 3490.62 2373 4748001 43.6382 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2374 4750001 43.5511 [ 0 6 7 11 1 10 4 8 2 9 5 3 ] 3716.67 3490.62 2375 4752001 43.4642 [ 0 2 7 10 4 11 1 9 5 3 6 8 ] 3539.86 3490.62 2376 4754001 43.3774 [ 0 4 10 11 1 7 8 3 5 9 2 6 ] 3784.56 3490.62 2377 4756001 43.2908 [ 0 4 10 11 1 9 5 3 8 7 2 6 ] 3671.62 3490.62 2378 4758001 43.2044 [ 0 2 7 11 1 9 5 3 8 4 10 6 ] 3644.57 3490.62 2379 4760001 43.1182 [ 0 2 7 11 1 9 5 3 4 10 8 6 ] 3639.2 3490.62 2380 4762001 43.0321 [ 0 6 8 7 1 9 5 3 10 4 11 2 ] 3854.86 3490.62 2381 4764001 42.9462 [ 0 6 4 10 1 9 5 3 8 11 7 2 ] 3759.5 3490.62 2382 4766001 42.8605 [ 0 6 8 4 10 2 5 3 9 1 11 7 ] 3756.42 3490.62 2383 4768001 42.775 [ 0 2 10 4 8 6 3 5 9 1 11 7 ] 3713.18 3490.62 2384 4770001 42.6896 [ 0 7 10 4 11 1 9 3 5 6 8 2 ] 3742.02 3490.62 2385 4772001 42.6044 [ 0 2 8 4 10 7 11 1 9 5 3 6 ] 3547.74 3490.62 2386 4774001 42.5193 [ 0 8 6 2 11 7 10 4 5 3 9 1 ] 4049.96 3490.62 2387 4776001 42.4345 [ 0 6 10 4 8 2 7 11 1 9 5 3 ] 3611.19 3490.62 2388 4778001 42.3498 [ 0 8 2 7 10 4 11 1 9 5 3 6 ] 3519.13 3490.62 2389 4780001 42.2652 [ 0 8 6 7 10 4 11 1 9 5 3 2 ] 3648.2 3490.62 2390 4782001 42.1809 [ 0 8 10 4 2 7 11 1 9 5 3 6 ] 3582.25 3490.62 2391 4784001 42.0967 [ 0 6 2 7 10 4 11 1 9 5 3 8 ] 3559.09 3490.62 2392 4786001 42.0127 [ 0 8 2 7 10 4 11 1 9 5 3 6 ] 3519.13 3490.62 2393 4788001 41.9288 [ 0 6 2 7 4 10 11 1 9 5 3 8 ] 3535.92 3490.62 2394 4790001 41.8451 [ 0 4 10 7 6 2 11 1 9 5 3 8 ] 3858.75 3490.62 2395 4792001 41.7616 [ 0 8 2 7 10 4 11 1 9 5 3 6 ] 3519.13 3490.62 2396 4794001 41.6782 [ 0 8 7 4 10 11 1 9 5 3 6 2 ] 3630.24 3490.62 2397 4796001 41.595 [ 0 8 7 2 4 10 11 1 9 3 5 6 ] 3675.35 3490.62 2398 4798001 41.512 [ 0 6 8 4 10 11 7 1 9 5 3 2 ] 3525.97 3490.62 2399 4800001 41.4292 [ 0 8 4 10 7 2 11 1 9 5 3 6 ] 3624.65 3490.62 2400 4802001 41.3465 [ 0 6 2 7 4 10 11 1 9 5 3 8 ] 3535.92 3490.62 2401 4804001 41.2639 [ 0 2 8 4 10 7 11 1 9 5 3 6 ] 3547.74 3490.62 2402 4806001 41.1816 [ 0 6 2 7 10 4 11 1 9 5 3 8 ] 3559.09 3490.62 2403 4808001 41.0994 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2404 4810001 41.0173 [ 0 8 4 10 11 2 7 1 9 3 5 6 ] 3705.38 3490.62 2405 4812001 40.9355 [ 0 6 8 4 10 11 7 1 9 3 5 2 ] 3613.65 3490.62 2406 4814001 40.8538 [ 0 6 8 4 10 7 11 1 9 3 5 2 ] 3611.71 3490.62 2407 4816001 40.7722 [ 0 2 8 10 4 7 11 1 9 3 5 6 ] 3662.09 3490.62 2408 4818001 40.6908 [ 0 8 2 10 4 11 7 1 9 5 3 6 ] 3601.5 3490.62 2409 4820001 40.6096 [ 0 2 7 11 4 10 1 9 3 5 8 6 ] 3616.53 3490.62 2410 4822001 40.5286 [ 0 6 4 10 11 7 1 9 5 3 8 2 ] 3616.55 3490.62 2411 4824001 40.4477 [ 0 8 4 10 11 7 1 9 5 3 6 2 ] 3582.33 3490.62 2412 4826001 40.3669 [ 0 2 7 4 10 11 1 9 5 3 6 8 ] 3516.69 3490.62 2413 4828001 40.2864 [ 0 4 10 7 11 1 9 5 3 8 2 6 ] 3629.07 3490.62 2414 4830001 40.2059 [ 0 10 4 7 11 1 9 5 3 6 2 8 ] 3657.8 3490.62 2415 4832001 40.1257 [ 0 4 10 7 11 1 9 5 3 6 8 2 ] 3609.84 3490.62 2416 4834001 40.0456 [ 0 7 11 10 4 1 9 5 3 8 2 6 ] 3701.03 3490.62 2417 4836001 39.9657 [ 0 6 2 7 11 1 9 5 3 8 4 10 ] 3657.81 3490.62 2418 4838001 39.8859 [ 0 4 10 7 11 1 9 5 3 6 8 2 ] 3609.84 3490.62 2419 4840001 39.8063 [ 0 4 10 7 11 1 9 5 3 2 8 6 ] 3565.4 3490.62 2420 4842001 39.7268 [ 0 6 4 10 11 1 9 3 5 8 7 2 ] 3736.21 3490.62 2421 4844001 39.6475 [ 0 7 4 10 11 1 9 5 3 2 8 6 ] 3595.61 3490.62 2422 4846001 39.5684 [ 0 2 7 10 4 11 1 9 3 5 6 8 ] 3618.66 3490.62 2423 4848001 39.4894 [ 0 2 7 4 10 11 1 9 5 3 8 6 ] 3524 3490.62 2424 4850001 39.4106 [ 0 7 2 4 10 11 1 9 5 3 8 6 ] 3646.33 3490.62 2425 4852001 39.3319 [ 0 2 7 4 10 11 1 9 5 3 6 8 ] 3516.69 3490.62 2426 4854001 39.2534 [ 0 8 4 10 7 11 1 9 5 3 2 6 ] 3535.95 3490.62 2427 4856001 39.1751 [ 0 2 7 11 4 10 1 9 5 3 8 6 ] 3537.48 3490.62 2428 4858001 39.0969 [ 0 6 4 10 7 11 1 9 5 3 2 8 ] 3562.86 3490.62 2429 4860001 39.0188 [ 0 8 4 10 11 7 1 9 5 3 2 6 ] 3537.89 3490.62 2430 4862001 38.941 [ 0 2 7 11 4 10 1 9 5 3 6 8 ] 3530.16 3490.62 2431 4864001 38.8632 [ 0 2 11 1 4 10 7 9 5 3 8 6 ] 3801.45 3490.62 2432 4866001 38.7857 [ 0 6 4 10 11 7 1 9 5 3 2 8 ] 3564.8 3490.62 2433 4868001 38.7082 [ 0 6 10 4 11 7 1 9 5 3 2 8 ] 3625.23 3490.62 2434 4870001 38.631 [ 0 2 7 4 10 11 1 9 5 3 8 6 ] 3524 3490.62 2435 4872001 38.5539 [ 0 2 7 11 4 10 1 9 5 3 8 6 ] 3537.48 3490.62 2436 4874001 38.4769 [ 0 2 7 11 10 4 1 9 5 3 6 8 ] 3558.44 3490.62 2437 4876001 38.4001 [ 0 8 4 10 7 11 1 9 5 3 2 6 ] 3535.95 3490.62 2438 4878001 38.3235 [ 0 8 4 10 7 11 1 9 5 3 2 6 ] 3535.95 3490.62 2439 4880001 38.247 [ 0 6 4 10 7 11 1 9 5 3 2 8 ] 3562.86 3490.62 2440 4882001 38.1706 [ 0 2 7 11 4 10 1 9 5 3 6 8 ] 3530.16 3490.62 2441 4884001 38.0945 [ 0 8 6 4 10 11 1 9 5 3 2 7 ] 3647.87 3490.62 2442 4886001 38.0184 [ 0 2 7 10 4 11 1 9 5 3 8 6 ] 3547.17 3490.62 2443 4888001 37.9425 [ 0 2 7 4 10 11 1 9 5 3 6 8 ] 3516.69 3490.62 2444 4890001 37.8668 [ 0 2 7 11 4 10 1 9 5 3 6 8 ] 3530.16 3490.62 2445 4892001 37.7912 [ 0 6 8 10 4 7 11 1 9 5 3 2 ] 3559.58 3490.62 2446 4894001 37.7158 [ 0 2 7 8 4 10 11 1 9 5 3 6 ] 3590.29 3490.62 2447 4896001 37.6405 [ 0 2 11 7 4 10 1 9 5 3 6 8 ] 3642.98 3490.62 2448 4898001 37.5654 [ 0 6 10 4 7 11 1 9 5 3 2 8 ] 3600.12 3490.62 2449 4900001 37.4904 [ 0 2 7 11 10 4 1 9 5 3 6 8 ] 3558.44 3490.62 2450 4902001 37.4156 [ 0 6 8 4 10 1 11 7 9 5 3 2 ] 3614.05 3490.62 2451 4904001 37.3409 [ 0 6 8 4 10 11 7 1 9 5 3 2 ] 3525.97 3490.62 2452 4906001 37.2663 [ 0 8 2 7 10 4 11 1 9 3 5 6 ] 3597.93 3490.62 2453 4908001 37.192 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2454 4910001 37.1177 [ 0 8 4 10 2 7 11 1 9 5 3 6 ] 3569.09 3490.62 2455 4912001 37.0436 [ 0 6 2 4 10 11 1 7 9 5 3 8 ] 3695.62 3490.62 2456 4914001 36.9697 [ 0 10 4 8 2 7 11 1 9 3 5 6 ] 3696.65 3490.62 2457 4916001 36.8959 [ 0 6 10 4 8 7 11 1 9 5 3 2 ] 3694.45 3490.62 2458 4918001 36.8223 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2459 4920001 36.7488 [ 0 8 6 2 7 11 10 4 1 9 5 3 ] 3565.02 3490.62 2460 4922001 36.6754 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2461 4924001 36.6022 [ 0 2 8 6 4 10 7 11 1 9 5 3 ] 3601.96 3490.62 2462 4926001 36.5292 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2463 4928001 36.4562 [ 0 6 8 7 2 4 10 11 1 9 5 3 ] 3591.21 3490.62 2464 4930001 36.3835 [ 0 2 8 6 4 10 7 11 1 9 3 5 ] 3682.74 3490.62 2465 4932001 36.3109 [ 0 6 2 7 8 4 10 11 1 9 5 3 ] 3596.87 3490.62 2466 4934001 36.2384 [ 0 6 8 4 10 1 11 7 2 9 5 3 ] 3584.62 3490.62 2467 4936001 36.166 [ 0 6 8 4 10 11 7 1 9 3 5 2 ] 3613.65 3490.62 2468 4938001 36.0939 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2469 4940001 36.0218 [ 0 8 4 10 2 7 11 1 9 5 3 6 ] 3569.09 3490.62 2470 4942001 35.9499 [ 0 8 6 7 11 4 10 1 9 5 3 2 ] 3638.5 3490.62 2471 4944001 35.8782 [ 0 2 7 4 10 11 1 9 5 3 6 8 ] 3516.69 3490.62 2472 4946001 35.8065 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2473 4948001 35.7351 [ 0 8 2 4 10 7 11 1 9 5 3 6 ] 3554.01 3490.62 2474 4950001 35.6637 [ 0 6 2 7 11 4 10 1 9 5 3 8 ] 3549.4 3490.62 2475 4952001 35.5926 [ 0 8 2 10 4 11 7 1 9 5 3 6 ] 3601.5 3490.62 2476 4954001 35.5215 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2477 4956001 35.4506 [ 0 6 2 7 11 4 10 1 9 5 3 8 ] 3549.4 3490.62 2478 4958001 35.3799 [ 0 6 8 2 4 10 11 7 1 9 5 3 ] 3550.6 3490.62 2479 4960001 35.3092 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2480 4962001 35.2388 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2481 4964001 35.1684 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2482 4966001 35.0982 [ 0 6 4 10 8 7 11 1 9 5 3 2 ] 3692.74 3490.62 2483 4968001 35.0282 [ 0 2 8 4 10 1 11 7 3 5 9 6 ] 3840.67 3490.62 2484 4970001 34.9583 [ 0 8 4 10 11 7 1 9 5 3 2 6 ] 3537.89 3490.62 2485 4972001 34.8885 [ 0 8 4 10 7 11 1 9 5 3 2 6 ] 3535.95 3490.62 2486 4974001 34.8188 [ 0 4 10 11 1 7 2 9 5 3 8 6 ] 3671.01 3490.62 2487 4976001 34.7493 [ 0 2 4 10 1 11 7 9 5 3 8 6 ] 3672.07 3490.62 2488 4978001 34.68 [ 0 6 4 10 7 11 1 9 5 3 2 8 ] 3562.86 3490.62 2489 4980001 34.6108 [ 0 6 8 10 4 11 1 9 5 3 2 7 ] 3647.03 3490.62 2490 4982001 34.5417 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2491 4984001 34.4727 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2492 4986001 34.4039 [ 0 8 6 4 10 11 7 1 9 5 3 2 ] 3585.53 3490.62 2493 4988001 34.3353 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2494 4990001 34.2667 [ 0 6 2 4 10 11 7 1 9 5 3 8 ] 3595.91 3490.62 2495 4992001 34.1983 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2496 4994001 34.1301 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2497 4996001 34.0619 [ 0 8 2 4 10 11 7 1 9 5 3 6 ] 3555.95 3490.62 2498 4998001 33.9939 [ 0 8 2 11 10 4 7 1 9 5 3 6 ] 3633.88 3490.62 2499 5000001 33.9261 [ 0 6 2 7 4 10 11 1 9 5 3 8 ] 3535.92 3490.62 2500 5002001 33.8584 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2501 5004001 33.7908 [ 0 8 7 2 4 10 11 1 9 5 3 6 ] 3596.55 3490.62 2502 5006001 33.7234 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2503 5008001 33.656 [ 0 2 8 4 10 11 7 1 9 5 3 6 ] 3549.68 3490.62 2504 5010001 33.5889 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2505 5012001 33.5218 [ 0 8 7 2 4 10 11 1 9 3 5 6 ] 3675.35 3490.62 2506 5014001 33.4549 [ 0 8 2 7 10 4 11 1 9 5 3 6 ] 3519.13 3490.62 2507 5016001 33.3881 [ 0 6 7 2 4 10 11 1 9 5 3 8 ] 3655.01 3490.62 2508 5018001 33.3215 [ 0 2 8 10 4 7 11 1 9 5 3 6 ] 3583.29 3490.62 2509 5020001 33.255 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2510 5022001 33.1886 [ 0 6 8 4 10 7 11 1 9 5 3 2 ] 3524.03 3490.62 2511 5024001 33.1224 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2512 5026001 33.0562 [ 0 6 8 4 10 11 7 1 9 3 5 2 ] 3613.65 3490.62 2513 5028001 32.9903 [ 0 2 4 10 11 7 1 9 5 3 6 8 ] 3576.68 3490.62 2514 5030001 32.9244 [ 0 2 7 10 4 11 1 9 5 3 8 6 ] 3547.17 3490.62 2515 5032001 32.8587 [ 0 2 7 10 4 11 1 9 3 5 6 8 ] 3618.66 3490.62 2516 5034001 32.7931 [ 0 2 7 4 10 11 1 9 3 5 6 8 ] 3595.49 3490.62 2517 5036001 32.7277 [ 0 8 10 4 7 11 1 9 5 3 6 2 ] 3615.94 3490.62 2518 5038001 32.6623 [ 0 2 7 4 10 11 1 9 5 3 6 8 ] 3516.69 3490.62 2519 5040001 32.5971 [ 0 6 4 10 7 11 1 9 5 3 2 8 ] 3562.86 3490.62 2520 5042001 32.5321 [ 0 8 10 4 7 11 1 9 3 5 6 2 ] 3694.74 3490.62 2521 5044001 32.4671 [ 0 2 7 4 10 11 1 9 5 3 6 8 ] 3516.69 3490.62 2522 5046001 32.4023 [ 0 8 4 10 11 7 1 9 3 5 2 6 ] 3625.57 3490.62 2523 5048001 32.3377 [ 0 2 7 11 4 10 1 9 5 3 6 8 ] 3530.16 3490.62 2524 5050001 32.2731 [ 0 2 7 4 10 11 1 9 5 3 8 6 ] 3524 3490.62 2525 5052001 32.2087 [ 0 8 4 10 7 11 1 9 5 3 6 2 ] 3580.39 3490.62 2526 5054001 32.1444 [ 0 2 7 4 10 11 1 9 5 3 6 8 ] 3516.69 3490.62 2527 5056001 32.0802 [ 0 8 10 4 1 11 7 9 5 3 2 6 ] 3712.96 3490.62 2528 5058001 32.0162 [ 0 8 7 11 4 10 1 9 5 3 2 6 ] 3599.27 3490.62 2529 5060001 31.9523 [ 0 6 4 10 7 11 1 9 5 3 2 8 ] 3562.86 3490.62 2530 5062001 31.8885 [ 0 2 7 4 10 11 1 9 5 3 8 6 ] 3524 3490.62 2531 5064001 31.8249 [ 0 4 10 1 11 7 2 9 5 3 6 8 ] 3652.06 3490.62 2532 5066001 31.7614 [ 0 2 7 4 10 11 1 9 5 3 8 6 ] 3524 3490.62 2533 5068001 31.698 [ 0 2 7 11 4 10 1 9 5 3 6 8 ] 3530.16 3490.62 2534 5070001 31.6347 [ 0 6 10 4 11 7 1 9 5 3 2 8 ] 3625.23 3490.62 2535 5072001 31.5716 [ 0 2 10 4 11 1 7 9 5 3 6 8 ] 3721.94 3490.62 2536 5074001 31.5085 [ 0 2 7 4 10 11 1 9 5 3 8 6 ] 3524 3490.62 2537 5076001 31.4456 [ 0 6 4 10 7 11 1 9 5 3 2 8 ] 3562.86 3490.62 2538 5078001 31.3829 [ 0 2 7 4 10 11 1 9 5 3 6 8 ] 3516.69 3490.62 2539 5080001 31.3202 [ 0 8 7 11 4 10 1 9 5 3 6 2 ] 3643.71 3490.62 2540 5082001 31.2577 [ 0 8 10 4 7 11 1 9 5 3 6 2 ] 3615.94 3490.62 2541 5084001 31.1953 [ 0 2 7 4 10 11 1 9 3 5 6 8 ] 3595.49 3490.62 2542 5086001 31.1331 [ 0 2 7 4 10 11 1 9 5 3 8 6 ] 3524 3490.62 2543 5088001 31.0709 [ 0 2 10 4 11 7 1 9 5 3 8 6 ] 3629.54 3490.62 2544 5090001 31.0089 [ 0 2 7 11 4 10 1 9 5 3 8 6 ] 3537.48 3490.62 2545 5092001 30.947 [ 0 2 4 10 7 11 1 9 5 3 6 8 ] 3574.74 3490.62 2546 5094001 30.8852 [ 0 2 7 11 10 4 1 9 5 3 8 6 ] 3565.75 3490.62 2547 5096001 30.8236 [ 0 8 4 10 11 1 7 2 9 5 3 6 ] 3601.6 3490.62 2548 5098001 30.7621 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2549 5100001 30.7007 [ 0 6 8 4 10 11 7 1 9 5 3 2 ] 3525.97 3490.62 2550 5102001 30.6394 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2551 5104001 30.5782 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2552 5106001 30.5172 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2553 5108001 30.4563 [ 0 6 8 10 4 11 1 7 2 9 5 3 ] 3654.98 3490.62 2554 5110001 30.3955 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2555 5112001 30.3348 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2556 5114001 30.2743 [ 0 6 8 2 10 4 7 11 1 9 5 3 ] 3571.04 3490.62 2557 5116001 30.2138 [ 0 8 6 2 4 10 1 7 11 9 5 3 ] 3792.78 3490.62 2558 5118001 30.1535 [ 0 8 2 6 4 10 11 7 1 9 5 3 ] 3615.82 3490.62 2559 5120001 30.0934 [ 0 6 8 2 7 4 10 11 1 9 3 5 ] 3571.39 3490.62 2560 5122001 30.0333 [ 0 6 2 8 7 4 10 11 1 9 5 3 ] 3604.17 3490.62 2561 5124001 29.9733 [ 0 8 2 6 4 10 7 11 1 9 5 3 ] 3613.88 3490.62 2562 5126001 29.9135 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2563 5128001 29.8538 [ 0 2 6 8 4 10 7 11 1 9 5 3 ] 3575.05 3490.62 2564 5130001 29.7942 [ 0 8 2 6 4 10 7 11 1 9 5 3 ] 3613.88 3490.62 2565 5132001 29.7347 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2566 5134001 29.6754 [ 0 8 6 2 7 10 4 11 1 9 5 3 ] 3546.44 3490.62 2567 5136001 29.6162 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2568 5138001 29.5571 [ 0 6 2 8 4 10 11 7 1 9 5 3 ] 3556.26 3490.62 2569 5140001 29.4981 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2570 5142001 29.4392 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2571 5144001 29.3804 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2572 5146001 29.3218 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2573 5148001 29.2632 [ 0 6 2 8 4 10 7 11 1 9 3 5 ] 3635.1 3490.62 2574 5150001 29.2048 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2575 5152001 29.1465 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2576 5154001 29.0884 [ 0 6 8 2 4 10 11 7 1 9 5 3 ] 3550.6 3490.62 2577 5156001 29.0303 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2578 5158001 28.9724 [ 0 8 6 2 7 11 10 4 1 9 5 3 ] 3565.02 3490.62 2579 5160001 28.9145 [ 0 8 6 2 4 10 7 11 1 9 5 3 ] 3581.32 3490.62 2580 5162001 28.8568 [ 0 2 8 4 10 7 11 1 9 5 3 6 ] 3547.74 3490.62 2581 5164001 28.7992 [ 0 2 8 4 10 11 7 1 9 5 3 6 ] 3549.68 3490.62 2582 5166001 28.7417 [ 0 6 8 7 10 4 11 1 9 5 3 2 ] 3597.05 3490.62 2583 5168001 28.6844 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2584 5170001 28.6271 [ 0 8 2 4 10 11 7 1 9 5 3 6 ] 3555.95 3490.62 2585 5172001 28.57 [ 0 6 2 4 10 7 11 1 9 5 3 8 ] 3593.97 3490.62 2586 5174001 28.5129 [ 0 2 8 10 4 7 11 1 9 5 3 6 ] 3583.29 3490.62 2587 5176001 28.456 [ 0 8 2 7 10 4 11 1 9 5 3 6 ] 3519.13 3490.62 2588 5178001 28.3992 [ 0 8 2 7 10 4 11 1 9 5 3 6 ] 3519.13 3490.62 2589 5180001 28.3426 [ 0 6 2 7 10 4 11 1 9 5 3 8 ] 3559.09 3490.62 2590 5182001 28.286 [ 0 6 8 4 10 11 7 1 9 5 3 2 ] 3525.97 3490.62 2591 5184001 28.2295 [ 0 8 2 7 10 4 11 1 9 5 3 6 ] 3519.13 3490.62 2592 5186001 28.1732 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2593 5188001 28.1169 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2594 5190001 28.0608 [ 0 8 4 10 2 7 11 1 9 5 3 6 ] 3569.09 3490.62 2595 5192001 28.0048 [ 0 6 2 7 11 4 10 1 9 5 3 8 ] 3549.4 3490.62 2596 5194001 27.9489 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2597 5196001 27.8931 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2598 5198001 27.8375 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2599 5200001 27.7819 [ 0 6 8 4 10 7 11 1 9 5 3 2 ] 3524.03 3490.62 2600 5202001 27.7264 [ 0 8 4 10 2 7 11 1 9 5 3 6 ] 3569.09 3490.62 2601 5204001 27.6711 [ 0 2 8 4 10 11 7 1 9 5 3 6 ] 3549.68 3490.62 2602 5206001 27.6159 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2603 5208001 27.5607 [ 0 6 2 7 10 4 11 1 9 5 3 8 ] 3559.09 3490.62 2604 5210001 27.5057 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2605 5212001 27.4508 [ 0 6 8 4 10 11 7 1 9 5 3 2 ] 3525.97 3490.62 2606 5214001 27.396 [ 0 6 2 7 10 4 11 1 9 5 3 8 ] 3559.09 3490.62 2607 5216001 27.3414 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2608 5218001 27.2868 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2609 5220001 27.2323 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2610 5222001 27.178 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2611 5224001 27.1237 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2612 5226001 27.0696 [ 0 2 8 10 4 7 11 1 9 5 3 6 ] 3583.29 3490.62 2613 5228001 27.0155 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2614 5230001 26.9616 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2615 5232001 26.9078 [ 0 8 2 7 11 4 10 1 9 5 3 6 ] 3509.43 3490.62 2616 5234001 26.8541 [ 0 6 8 4 10 11 7 1 9 5 3 2 ] 3525.97 3490.62 2617 5236001 26.8005 [ 0 8 2 4 10 7 11 1 9 5 3 6 ] 3554.01 3490.62 2618 5238001 26.747 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2619 5240001 26.6936 [ 0 8 2 7 4 10 11 1 9 5 3 6 ] 3495.96 3490.62 2620 5242001 26.6403 [ 0 2 8 4 10 7 11 1 9 5 3 6 ] 3547.74 3490.62 2621 5244001 26.5872 [ 0 6 8 4 10 11 7 1 9 5 3 2 ] 3525.97 3490.62 2622 5246001 26.5341 [ 0 8 2 4 10 11 7 1 9 5 3 6 ] 3555.95 3490.62 2623 5248001 26.4811 [ 0 8 10 4 2 7 11 1 9 5 3 6 ] 3582.25 3490.62 2624 5250001 26.4283 [ 0 2 8 7 11 4 10 1 9 5 3 6 ] 3611.06 3490.62 2625 5252001 26.3755 [ 0 6 2 7 11 4 10 1 9 3 5 8 ] 3628.45 3490.62 2626 5254001 26.3229 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2627 5256001 26.2703 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2628 5258001 26.2179 [ 0 6 8 2 11 4 10 7 1 9 5 3 ] 3651.71 3490.62 2629 5260001 26.1656 [ 0 8 6 2 7 10 4 11 1 9 5 3 ] 3546.44 3490.62 2630 5262001 26.1133 [ 0 6 2 8 7 4 10 11 1 9 5 3 ] 3604.17 3490.62 2631 5264001 26.0612 [ 0 6 8 2 7 11 4 10 1 9 3 5 ] 3584.87 3490.62 2632 5266001 26.0092 [ 0 10 4 8 6 2 7 11 1 9 5 3 ] 3645.16 3490.62 2633 5268001 25.9573 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2634 5270001 25.9055 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2635 5272001 25.8538 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2636 5274001 25.8022 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2637 5276001 25.7507 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2638 5278001 25.6993 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2639 5280001 25.648 [ 0 8 6 2 7 10 4 11 1 9 5 3 ] 3546.44 3490.62 2640 5282001 25.5968 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2641 5284001 25.5457 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2642 5286001 25.4947 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2643 5288001 25.4438 [ 0 6 2 8 4 10 1 11 7 9 5 3 ] 3644.34 3490.62 2644 5290001 25.393 [ 0 8 6 2 7 11 4 10 1 9 5 3 ] 3536.75 3490.62 2645 5292001 25.3423 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2646 5294001 25.2917 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2647 5296001 25.2413 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2648 5298001 25.1909 [ 0 6 2 8 7 11 4 10 1 9 5 3 ] 3617.64 3490.62 2649 5300001 25.1406 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2650 5302001 25.0904 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2651 5304001 25.0403 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2652 5306001 24.9904 [ 0 2 8 6 7 10 4 11 1 9 5 3 ] 3666.56 3490.62 2653 5308001 24.9405 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2654 5310001 24.8907 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2655 5312001 24.841 [ 0 8 6 2 7 10 4 11 1 9 5 3 ] 3546.44 3490.62 2656 5314001 24.7914 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2657 5316001 24.7419 [ 0 2 6 8 4 10 11 7 1 9 5 3 ] 3576.99 3490.62 2658 5318001 24.6926 [ 0 2 8 6 4 10 11 7 1 9 5 3 ] 3603.9 3490.62 2659 5320001 24.6433 [ 0 6 8 2 10 4 7 11 1 9 5 3 ] 3571.04 3490.62 2660 5322001 24.5941 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2661 5324001 24.545 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2662 5326001 24.496 [ 0 6 2 7 8 4 10 11 1 9 5 3 ] 3596.87 3490.62 2663 5328001 24.4471 [ 0 8 6 2 4 10 11 7 1 9 5 3 ] 3583.26 3490.62 2664 5330001 24.3983 [ 0 6 8 2 4 10 11 7 1 9 5 3 ] 3550.6 3490.62 2665 5332001 24.3496 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2666 5334001 24.301 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2667 5336001 24.2525 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2668 5338001 24.2041 [ 0 8 6 2 7 11 4 10 1 9 5 3 ] 3536.75 3490.62 2669 5340001 24.1558 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2670 5342001 24.1076 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2671 5344001 24.0595 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2672 5346001 24.0114 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2673 5348001 23.9635 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2674 5350001 23.9157 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2675 5352001 23.8679 [ 0 6 2 8 4 10 7 11 1 9 5 3 ] 3554.32 3490.62 2676 5354001 23.8203 [ 0 8 6 2 7 11 4 10 1 9 5 3 ] 3536.75 3490.62 2677 5356001 23.7728 [ 0 6 8 7 2 4 10 11 1 9 5 3 ] 3591.21 3490.62 2678 5358001 23.7253 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2679 5360001 23.6779 [ 0 8 6 2 4 10 7 11 1 9 5 3 ] 3581.32 3490.62 2680 5362001 23.6307 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2681 5364001 23.5835 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2682 5366001 23.5364 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2683 5368001 23.4895 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2684 5370001 23.4426 [ 0 6 2 8 4 10 7 11 1 9 3 5 ] 3635.1 3490.62 2685 5372001 23.3958 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2686 5374001 23.3491 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2687 5376001 23.3025 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2688 5378001 23.256 [ 0 6 8 2 4 10 7 11 1 9 5 3 ] 3548.66 3490.62 2689 5380001 23.2096 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2690 5382001 23.1632 [ 0 8 6 2 7 10 4 11 1 9 5 3 ] 3546.44 3490.62 2691 5384001 23.117 [ 0 8 6 2 7 11 4 10 1 9 5 3 ] 3536.75 3490.62 2692 5386001 23.0709 [ 0 6 2 8 7 4 10 11 1 9 5 3 ] 3604.17 3490.62 2693 5388001 23.0248 [ 0 6 8 2 4 10 11 7 1 9 5 3 ] 3550.6 3490.62 2694 5390001 22.9788 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2695 5392001 22.933 [ 0 6 8 2 4 10 7 11 1 9 5 3 ] 3548.66 3490.62 2696 5394001 22.8872 [ 0 8 6 2 7 10 4 11 1 9 5 3 ] 3546.44 3490.62 2697 5396001 22.8415 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2698 5398001 22.7959 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2699 5400001 22.7504 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2700 5402001 22.705 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2701 5404001 22.6597 [ 0 8 6 2 7 10 4 11 1 9 5 3 ] 3546.44 3490.62 2702 5406001 22.6145 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2703 5408001 22.5693 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2704 5410001 22.5243 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2705 5412001 22.4793 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2706 5414001 22.4345 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2707 5416001 22.3897 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2708 5418001 22.345 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2709 5420001 22.3004 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2710 5422001 22.2559 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2711 5424001 22.2115 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2712 5426001 22.1671 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2713 5428001 22.1229 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2714 5430001 22.0787 [ 0 6 8 2 4 10 11 7 1 9 5 3 ] 3550.6 3490.62 2715 5432001 22.0346 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2716 5434001 21.9907 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2717 5436001 21.9468 [ 0 8 6 2 7 11 10 4 1 9 5 3 ] 3565.02 3490.62 2718 5438001 21.903 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2719 5440001 21.8592 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2720 5442001 21.8156 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2721 5444001 21.7721 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2722 5446001 21.7286 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2723 5448001 21.6852 [ 0 6 8 7 2 4 10 11 1 9 5 3 ] 3591.21 3490.62 2724 5450001 21.642 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2725 5452001 21.5988 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2726 5454001 21.5556 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2727 5456001 21.5126 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2728 5458001 21.4697 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2729 5460001 21.4268 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2730 5462001 21.3841 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2731 5464001 21.3414 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2732 5466001 21.2988 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2733 5468001 21.2563 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2734 5470001 21.2138 [ 0 6 2 8 4 10 7 11 1 9 5 3 ] 3554.32 3490.62 2735 5472001 21.1715 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2736 5474001 21.1292 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2737 5476001 21.0871 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2738 5478001 21.045 [ 0 6 8 2 4 10 11 7 1 9 5 3 ] 3550.6 3490.62 2739 5480001 21.003 [ 0 8 6 2 7 11 10 4 1 9 5 3 ] 3565.02 3490.62 2740 5482001 20.961 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2741 5484001 20.9192 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2742 5486001 20.8775 [ 0 8 6 2 7 10 4 11 1 9 5 3 ] 3546.44 3490.62 2743 5488001 20.8358 [ 0 6 8 2 4 10 7 11 1 9 5 3 ] 3548.66 3490.62 2744 5490001 20.7942 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2745 5492001 20.7527 [ 0 6 8 2 4 10 11 7 1 9 5 3 ] 3550.6 3490.62 2746 5494001 20.7113 [ 0 6 8 4 10 2 7 11 1 9 5 3 ] 3563.75 3490.62 2747 5496001 20.6699 [ 0 6 8 2 7 10 4 11 1 9 3 5 ] 3594.57 3490.62 2748 5498001 20.6287 [ 0 6 8 2 4 10 11 7 1 9 5 3 ] 3550.6 3490.62 2749 5500001 20.5875 [ 0 8 6 2 7 11 10 4 1 9 5 3 ] 3565.02 3490.62 2750 5502001 20.5464 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2751 5504001 20.5054 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2752 5506001 20.4645 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2753 5508001 20.4236 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2754 5510001 20.3828 [ 0 6 8 2 4 10 7 11 1 9 5 3 ] 3548.66 3490.62 2755 5512001 20.3422 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2756 5514001 20.3016 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2757 5516001 20.261 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2758 5518001 20.2206 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2759 5520001 20.1802 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2760 5522001 20.14 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2761 5524001 20.0998 [ 0 8 2 6 4 10 11 7 1 9 5 3 ] 3615.82 3490.62 2762 5526001 20.0596 [ 0 6 2 8 4 10 7 11 1 9 5 3 ] 3554.32 3490.62 2763 5528001 20.0196 [ 0 6 8 2 4 10 11 7 1 9 5 3 ] 3550.6 3490.62 2764 5530001 19.9796 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2765 5532001 19.9398 [ 0 8 6 4 10 1 11 7 2 9 5 3 ] 3644.19 3490.62 2766 5534001 19.9 [ 0 6 8 4 10 1 11 7 2 9 3 5 ] 3665.4 3490.62 2767 5536001 19.8602 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2768 5538001 19.8206 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2769 5540001 19.781 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2770 5542001 19.7416 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2771 5544001 19.7022 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2772 5546001 19.6628 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2773 5548001 19.6236 [ 0 6 2 8 4 10 11 7 1 9 5 3 ] 3556.26 3490.62 2774 5550001 19.5844 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2775 5552001 19.5453 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2776 5554001 19.5063 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2777 5556001 19.4674 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2778 5558001 19.4285 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2779 5560001 19.3897 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2780 5562001 19.351 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2781 5564001 19.3124 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2782 5566001 19.2739 [ 0 6 8 2 4 10 11 7 1 9 3 5 ] 3631.38 3490.62 2783 5568001 19.2354 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2784 5570001 19.197 [ 0 8 6 2 7 11 10 4 1 9 5 3 ] 3565.02 3490.62 2785 5572001 19.1587 [ 0 6 8 2 4 10 11 7 1 9 5 3 ] 3550.6 3490.62 2786 5574001 19.1204 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2787 5576001 19.0823 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2788 5578001 19.0442 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2789 5580001 19.0062 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2790 5582001 18.9682 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2791 5584001 18.9304 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2792 5586001 18.8926 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2793 5588001 18.8549 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2794 5590001 18.8172 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2795 5592001 18.7797 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2796 5594001 18.7422 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2797 5596001 18.7048 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2798 5598001 18.6675 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2799 5600001 18.6302 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2800 5602001 18.593 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2801 5604001 18.5559 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2802 5606001 18.5189 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2803 5608001 18.4819 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2804 5610001 18.445 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2805 5612001 18.4082 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2806 5614001 18.3714 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2807 5616001 18.3348 [ 0 8 6 2 7 11 4 10 1 9 5 3 ] 3536.75 3490.62 2808 5618001 18.2982 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2809 5620001 18.2617 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2810 5622001 18.2252 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2811 5624001 18.1888 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2812 5626001 18.1525 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2813 5628001 18.1163 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2814 5630001 18.0801 [ 0 6 8 4 10 11 1 7 2 9 5 3 ] 3596.26 3490.62 2815 5632001 18.044 [ 0 6 8 4 10 1 11 7 2 9 5 3 ] 3584.62 3490.62 2816 5634001 18.008 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2817 5636001 17.9721 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2818 5638001 17.9362 [ 0 6 8 2 4 10 11 7 1 9 5 3 ] 3550.6 3490.62 2819 5640001 17.9004 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2820 5642001 17.8647 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2821 5644001 17.829 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2822 5646001 17.7934 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2823 5648001 17.7579 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2824 5650001 17.7225 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2825 5652001 17.6871 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2826 5654001 17.6518 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2827 5656001 17.6166 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2828 5658001 17.5814 [ 0 8 6 2 7 11 4 10 1 9 5 3 ] 3536.75 3490.62 2829 5660001 17.5463 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2830 5662001 17.5113 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2831 5664001 17.4763 [ 0 8 6 2 7 10 4 11 1 9 5 3 ] 3546.44 3490.62 2832 5666001 17.4415 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2833 5668001 17.4066 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2834 5670001 17.3719 [ 0 8 6 2 7 10 4 11 1 9 5 3 ] 3546.44 3490.62 2835 5672001 17.3372 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2836 5674001 17.3026 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2837 5676001 17.2681 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2838 5678001 17.2336 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2839 5680001 17.1992 [ 0 6 8 2 4 10 11 7 1 9 5 3 ] 3550.6 3490.62 2840 5682001 17.1649 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2841 5684001 17.1306 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2842 5686001 17.0964 [ 0 8 6 2 4 10 11 7 1 9 5 3 ] 3583.26 3490.62 2843 5688001 17.0623 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2844 5690001 17.0282 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2845 5692001 16.9943 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2846 5694001 16.9603 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2847 5696001 16.9265 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2848 5698001 16.8927 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2849 5700001 16.859 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2850 5702001 16.8253 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2851 5704001 16.7917 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2852 5706001 16.7582 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2853 5708001 16.7248 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2854 5710001 16.6914 [ 0 6 2 8 4 10 7 11 1 9 5 3 ] 3554.32 3490.62 2855 5712001 16.6581 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2856 5714001 16.6248 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2857 5716001 16.5917 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2858 5718001 16.5585 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2859 5720001 16.5255 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2860 5722001 16.4925 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2861 5724001 16.4596 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2862 5726001 16.4267 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2863 5728001 16.3939 [ 0 8 6 2 7 11 4 10 1 9 5 3 ] 3536.75 3490.62 2864 5730001 16.3612 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2865 5732001 16.3286 [ 0 6 8 4 10 1 11 7 2 9 5 3 ] 3584.62 3490.62 2866 5734001 16.296 [ 0 8 6 4 10 1 11 7 2 9 5 3 ] 3644.19 3490.62 2867 5736001 16.2634 [ 0 6 8 4 10 11 1 7 2 9 5 3 ] 3596.26 3490.62 2868 5738001 16.231 [ 0 6 8 4 10 11 1 7 2 9 5 3 ] 3596.26 3490.62 2869 5740001 16.1986 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2870 5742001 16.1662 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2871 5744001 16.134 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2872 5746001 16.1018 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2873 5748001 16.0696 [ 0 8 6 2 7 11 4 10 1 9 5 3 ] 3536.75 3490.62 2874 5750001 16.0376 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2875 5752001 16.0055 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2876 5754001 15.9736 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2877 5756001 15.9417 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2878 5758001 15.9099 [ 0 6 8 2 4 10 11 7 1 9 5 3 ] 3550.6 3490.62 2879 5760001 15.8781 [ 0 8 6 2 7 11 4 10 1 9 5 3 ] 3536.75 3490.62 2880 5762001 15.8465 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2881 5764001 15.8148 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2882 5766001 15.7833 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2883 5768001 15.7518 [ 0 8 6 2 7 10 4 11 1 9 5 3 ] 3546.44 3490.62 2884 5770001 15.7203 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2885 5772001 15.6889 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2886 5774001 15.6576 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2887 5776001 15.6264 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2888 5778001 15.5952 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2889 5780001 15.564 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2890 5782001 15.533 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2891 5784001 15.502 [ 0 8 6 2 7 11 4 10 1 9 5 3 ] 3536.75 3490.62 2892 5786001 15.471 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2893 5788001 15.4402 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2894 5790001 15.4093 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2895 5792001 15.3786 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2896 5794001 15.3479 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2897 5796001 15.3172 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2898 5798001 15.2867 [ 0 6 2 8 4 10 11 7 1 9 5 3 ] 3556.26 3490.62 2899 5800001 15.2562 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2900 5802001 15.2257 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2901 5804001 15.1953 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2902 5806001 15.165 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2903 5808001 15.1347 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2904 5810001 15.1045 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2905 5812001 15.0744 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2906 5814001 15.0443 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2907 5816001 15.0142 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2908 5818001 14.9843 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2909 5820001 14.9544 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2910 5822001 14.9245 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2911 5824001 14.8947 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2912 5826001 14.865 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2913 5828001 14.8353 [ 0 8 6 2 7 10 4 11 1 9 5 3 ] 3546.44 3490.62 2914 5830001 14.8057 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2915 5832001 14.7762 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2916 5834001 14.7467 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2917 5836001 14.7172 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2918 5838001 14.6879 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2919 5840001 14.6585 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2920 5842001 14.6293 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2921 5844001 14.6001 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2922 5846001 14.5709 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2923 5848001 14.5419 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2924 5850001 14.5128 [ 0 6 8 2 4 10 11 7 1 9 5 3 ] 3550.6 3490.62 2925 5852001 14.4839 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2926 5854001 14.455 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2927 5856001 14.4261 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2928 5858001 14.3973 [ 0 6 8 2 4 10 11 7 1 9 5 3 ] 3550.6 3490.62 2929 5860001 14.3686 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2930 5862001 14.3399 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2931 5864001 14.3113 [ 0 6 8 2 4 10 7 11 1 9 5 3 ] 3548.66 3490.62 2932 5866001 14.2827 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2933 5868001 14.2542 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2934 5870001 14.2257 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2935 5872001 14.1974 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2936 5874001 14.169 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2937 5876001 14.1407 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2938 5878001 14.1125 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2939 5880001 14.0843 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2940 5882001 14.0562 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2941 5884001 14.0282 [ 0 6 8 4 10 2 7 11 1 9 5 3 ] 3563.75 3490.62 2942 5886001 14.0002 [ 0 6 2 8 4 10 11 7 1 9 5 3 ] 3556.26 3490.62 2943 5888001 13.9722 [ 0 8 6 2 7 11 4 10 1 9 5 3 ] 3536.75 3490.62 2944 5890001 13.9443 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2945 5892001 13.9165 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2946 5894001 13.8887 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2947 5896001 13.861 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2948 5898001 13.8333 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2949 5900001 13.8057 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2950 5902001 13.7782 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2951 5904001 13.7507 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2952 5906001 13.7232 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2953 5908001 13.6958 [ 0 8 6 2 7 11 4 10 1 9 5 3 ] 3536.75 3490.62 2954 5910001 13.6685 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2955 5912001 13.6412 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2956 5914001 13.614 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2957 5916001 13.5868 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2958 5918001 13.5597 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2959 5920001 13.5326 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2960 5922001 13.5056 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2961 5924001 13.4787 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2962 5926001 13.4518 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2963 5928001 13.4249 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2964 5930001 13.3981 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 2965 5932001 13.3714 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2966 5934001 13.3447 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2967 5936001 13.318 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2968 5938001 13.2915 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2969 5940001 13.2649 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2970 5942001 13.2384 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2971 5944001 13.212 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2972 5946001 13.1857 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2973 5948001 13.1593 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2974 5950001 13.1331 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2975 5952001 13.1069 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2976 5954001 13.0807 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2977 5956001 13.0546 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2978 5958001 13.0285 [ 0 6 8 4 10 2 7 11 1 9 5 3 ] 3563.75 3490.62 2979 5960001 13.0025 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2980 5962001 12.9766 [ 0 8 6 2 7 10 4 11 1 9 5 3 ] 3546.44 3490.62 2981 5964001 12.9507 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2982 5966001 12.9248 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2983 5968001 12.899 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2984 5970001 12.8733 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2985 5972001 12.8476 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2986 5974001 12.8219 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2987 5976001 12.7963 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2988 5978001 12.7708 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2989 5980001 12.7453 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2990 5982001 12.7199 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 2991 5984001 12.6945 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2992 5986001 12.6691 [ 0 8 6 2 7 11 10 4 1 9 5 3 ] 3565.02 3490.62 2993 5988001 12.6439 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2994 5990001 12.6186 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 2995 5992001 12.5934 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2996 5994001 12.5683 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2997 5996001 12.5432 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 2998 5998001 12.5182 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 2999 6000001 12.4932 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3000 6002001 12.4682 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3001 6004001 12.4434 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3002 6006001 12.4185 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3003 6008001 12.3937 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3004 6010001 12.369 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3005 6012001 12.3443 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3006 6014001 12.3197 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3007 6016001 12.2951 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3008 6018001 12.2705 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3009 6020001 12.246 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3010 6022001 12.2216 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3011 6024001 12.1972 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3012 6026001 12.1729 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3013 6028001 12.1486 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3014 6030001 12.1243 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3015 6032001 12.1001 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3016 6034001 12.076 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3017 6036001 12.0519 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3018 6038001 12.0278 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3019 6040001 12.0038 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3020 6042001 11.9798 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3021 6044001 11.9559 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3022 6046001 11.9321 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3023 6048001 11.9082 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3024 6050001 11.8845 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3025 6052001 11.8608 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3026 6054001 11.8371 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3027 6056001 11.8135 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3028 6058001 11.7899 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 3029 6060001 11.7663 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3030 6062001 11.7429 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3031 6064001 11.7194 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3032 6066001 11.696 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3033 6068001 11.6727 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3034 6070001 11.6494 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3035 6072001 11.6261 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3036 6074001 11.6029 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3037 6076001 11.5798 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3038 6078001 11.5567 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3039 6080001 11.5336 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3040 6082001 11.5106 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3041 6084001 11.4876 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3042 6086001 11.4647 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3043 6088001 11.4418 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3044 6090001 11.4189 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3045 6092001 11.3961 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3046 6094001 11.3734 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3047 6096001 11.3507 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3048 6098001 11.328 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3049 6100001 11.3054 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3050 6102001 11.2829 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 3051 6104001 11.2603 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3052 6106001 11.2379 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3053 6108001 11.2154 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 3054 6110001 11.1931 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3055 6112001 11.1707 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3056 6114001 11.1484 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3057 6116001 11.1262 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3058 6118001 11.104 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3059 6120001 11.0818 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3060 6122001 11.0597 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3061 6124001 11.0376 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3062 6126001 11.0156 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3063 6128001 10.9936 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3064 6130001 10.9716 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3065 6132001 10.9497 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3066 6134001 10.9279 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3067 6136001 10.9061 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3068 6138001 10.8843 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3069 6140001 10.8626 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3070 6142001 10.8409 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3071 6144001 10.8193 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3072 6146001 10.7977 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3073 6148001 10.7761 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3074 6150001 10.7546 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3075 6152001 10.7331 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 3076 6154001 10.7117 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3077 6156001 10.6903 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3078 6158001 10.669 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3079 6160001 10.6477 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3080 6162001 10.6264 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3081 6164001 10.6052 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 3082 6166001 10.5841 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3083 6168001 10.5629 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3084 6170001 10.5418 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3085 6172001 10.5208 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3086 6174001 10.4998 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3087 6176001 10.4789 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3088 6178001 10.4579 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3089 6180001 10.4371 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3090 6182001 10.4162 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3091 6184001 10.3954 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3092 6186001 10.3747 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3093 6188001 10.354 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3094 6190001 10.3333 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3095 6192001 10.3127 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3096 6194001 10.2921 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3097 6196001 10.2716 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3098 6198001 10.2511 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3099 6200001 10.2306 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3100 6202001 10.2102 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3101 6204001 10.1898 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3102 6206001 10.1695 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3103 6208001 10.1492 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3104 6210001 10.1289 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3105 6212001 10.1087 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3106 6214001 10.0885 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3107 6216001 10.0684 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3108 6218001 10.0483 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3109 6220001 10.0282 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3110 6222001 10.0082 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3111 6224001 9.98823 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3112 6226001 9.96829 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3113 6228001 9.94839 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3114 6230001 9.92853 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3115 6232001 9.90872 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3116 6234001 9.88894 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3117 6236001 9.8692 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 3118 6238001 9.8495 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3119 6240001 9.82984 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3120 6242001 9.81022 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 3121 6244001 9.79064 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3122 6246001 9.7711 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3123 6248001 9.7516 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3124 6250001 9.73213 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3125 6252001 9.71271 [ 0 6 8 2 7 11 10 4 1 9 5 3 ] 3532.36 3490.62 3126 6254001 9.69332 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3127 6256001 9.67397 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3128 6258001 9.65466 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3129 6260001 9.63539 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3130 6262001 9.61616 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3131 6264001 9.59696 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3132 6266001 9.57781 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3133 6268001 9.55869 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3134 6270001 9.53961 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3135 6272001 9.52057 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3136 6274001 9.50157 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3137 6276001 9.4826 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3138 6278001 9.46368 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3139 6280001 9.44479 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3140 6282001 9.42593 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3141 6284001 9.40712 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3142 6286001 9.38834 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3143 6288001 9.3696 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3144 6290001 9.3509 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3145 6292001 9.33224 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3146 6294001 9.31361 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3147 6296001 9.29502 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3148 6298001 9.27647 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 3149 6300001 9.25795 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3150 6302001 9.23947 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3151 6304001 9.22103 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3152 6306001 9.20263 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3153 6308001 9.18426 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3154 6310001 9.16592 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3155 6312001 9.14763 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3156 6314001 9.12937 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3157 6316001 9.11115 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3158 6318001 9.09296 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3159 6320001 9.07481 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3160 6322001 9.0567 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3161 6324001 9.03862 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3162 6326001 9.02058 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3163 6328001 9.00258 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3164 6330001 8.98461 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3165 6332001 8.96667 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3166 6334001 8.94878 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3167 6336001 8.93091 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3168 6338001 8.91309 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3169 6340001 8.8953 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 3170 6342001 8.87754 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 3171 6344001 8.85982 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3172 6346001 8.84214 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3173 6348001 8.82449 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3174 6350001 8.80688 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3175 6352001 8.7893 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3176 6354001 8.77175 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3177 6356001 8.75425 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3178 6358001 8.73677 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3179 6360001 8.71933 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3180 6362001 8.70193 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3181 6364001 8.68456 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3182 6366001 8.66723 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3183 6368001 8.64993 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3184 6370001 8.63266 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3185 6372001 8.61543 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3186 6374001 8.59823 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3187 6376001 8.58107 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3188 6378001 8.56394 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3189 6380001 8.54685 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3190 6382001 8.52979 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3191 6384001 8.51276 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3192 6386001 8.49577 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3193 6388001 8.47881 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3194 6390001 8.46189 [ 0 8 6 2 7 10 4 11 1 9 5 3 ] 3546.44 3490.62 3195 6392001 8.445 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3196 6394001 8.42814 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3197 6396001 8.41132 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3198 6398001 8.39453 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3199 6400001 8.37778 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3200 6402001 8.36106 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3201 6404001 8.34437 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3202 6406001 8.32771 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 3203 6408001 8.31109 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3204 6410001 8.2945 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3205 6412001 8.27794 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3206 6414001 8.26142 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3207 6416001 8.24493 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3208 6418001 8.22847 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3209 6420001 8.21205 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3210 6422001 8.19566 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3211 6424001 8.1793 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3212 6426001 8.16297 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3213 6428001 8.14668 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3214 6430001 8.13042 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3215 6432001 8.11419 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3216 6434001 8.098 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3217 6436001 8.08183 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3218 6438001 8.0657 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3219 6440001 8.0496 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3220 6442001 8.03353 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3221 6444001 8.0175 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3222 6446001 8.0015 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3223 6448001 7.98553 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3224 6450001 7.96959 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3225 6452001 7.95368 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 3226 6454001 7.9378 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3227 6456001 7.92196 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3228 6458001 7.90615 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3229 6460001 7.89037 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3230 6462001 7.87462 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3231 6464001 7.8589 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3232 6466001 7.84321 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3233 6468001 7.82756 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3234 6470001 7.81193 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3235 6472001 7.79634 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3236 6474001 7.78078 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3237 6476001 7.76525 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3238 6478001 7.74975 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3239 6480001 7.73428 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3240 6482001 7.71884 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3241 6484001 7.70344 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3242 6486001 7.68806 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3243 6488001 7.67272 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3244 6490001 7.6574 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3245 6492001 7.64212 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3246 6494001 7.62686 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3247 6496001 7.61164 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 3248 6498001 7.59645 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3249 6500001 7.58128 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3250 6502001 7.56615 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3251 6504001 7.55105 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3252 6506001 7.53598 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3253 6508001 7.52094 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3254 6510001 7.50592 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3255 6512001 7.49094 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3256 6514001 7.47599 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3257 6516001 7.46107 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3258 6518001 7.44618 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3259 6520001 7.43131 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3260 6522001 7.41648 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3261 6524001 7.40168 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 3262 6526001 7.3869 [ 0 8 6 2 7 4 10 11 1 9 5 3 ] 3523.27 3490.62 3263 6528001 7.37216 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3264 6530001 7.35744 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3265 6532001 7.34276 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3266 6534001 7.3281 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3267 6536001 7.31347 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3268 6538001 7.29888 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3269 6540001 7.28431 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3270 6542001 7.26977 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3271 6544001 7.25526 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3272 6546001 7.24078 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3273 6548001 7.22632 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3274 6550001 7.2119 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3275 6552001 7.19751 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3276 6554001 7.18314 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3277 6556001 7.1688 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3278 6558001 7.15449 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3279 6560001 7.14021 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3280 6562001 7.12596 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3281 6564001 7.11174 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3282 6566001 7.09754 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3283 6568001 7.08337 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3284 6570001 7.06924 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3285 6572001 7.05513 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3286 6574001 7.04104 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3287 6576001 7.02699 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3288 6578001 7.01296 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3289 6580001 6.99897 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3290 6582001 6.985 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3291 6584001 6.97105 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3292 6586001 6.95714 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3293 6588001 6.94325 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3294 6590001 6.92939 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3295 6592001 6.91556 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3296 6594001 6.90176 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3297 6596001 6.88798 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3298 6598001 6.87424 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3299 6600001 6.86051 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3300 6602001 6.84682 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3301 6604001 6.83315 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3302 6606001 6.81952 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3303 6608001 6.8059 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3304 6610001 6.79232 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3305 6612001 6.77876 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3306 6614001 6.76523 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3307 6616001 6.75173 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3308 6618001 6.73825 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3309 6620001 6.7248 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3310 6622001 6.71138 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3311 6624001 6.69798 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3312 6626001 6.68461 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3313 6628001 6.67127 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3314 6630001 6.65795 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3315 6632001 6.64467 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3316 6634001 6.6314 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3317 6636001 6.61817 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3318 6638001 6.60496 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3319 6640001 6.59177 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3320 6642001 6.57862 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3321 6644001 6.56548 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3322 6646001 6.55238 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3323 6648001 6.5393 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3324 6650001 6.52625 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3325 6652001 6.51322 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3326 6654001 6.50022 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3327 6656001 6.48725 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3328 6658001 6.4743 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3329 6660001 6.46138 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3330 6662001 6.44848 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3331 6664001 6.43561 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3332 6666001 6.42276 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3333 6668001 6.40994 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3334 6670001 6.39715 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3335 6672001 6.38438 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3336 6674001 6.37164 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3337 6676001 6.35892 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3338 6678001 6.34623 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3339 6680001 6.33356 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3340 6682001 6.32092 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3341 6684001 6.3083 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3342 6686001 6.29571 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3343 6688001 6.28314 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3344 6690001 6.2706 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3345 6692001 6.25809 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3346 6694001 6.24559 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3347 6696001 6.23313 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3348 6698001 6.22069 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3349 6700001 6.20827 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3350 6702001 6.19588 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3351 6704001 6.18351 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3352 6706001 6.17117 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3353 6708001 6.15885 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3354 6710001 6.14656 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3355 6712001 6.13429 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3356 6714001 6.12205 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3357 6716001 6.10983 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3358 6718001 6.09763 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3359 6720001 6.08546 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3360 6722001 6.07331 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3361 6724001 6.06119 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3362 6726001 6.04909 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3363 6728001 6.03702 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3364 6730001 6.02497 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3365 6732001 6.01294 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3366 6734001 6.00094 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3367 6736001 5.98896 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3368 6738001 5.97701 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3369 6740001 5.96508 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3370 6742001 5.95317 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3371 6744001 5.94129 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3372 6746001 5.92943 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3373 6748001 5.9176 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3374 6750001 5.90578 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3375 6752001 5.894 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3376 6754001 5.88223 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3377 6756001 5.87049 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3378 6758001 5.85877 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3379 6760001 5.84708 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3380 6762001 5.83541 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3381 6764001 5.82376 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3382 6766001 5.81214 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3383 6768001 5.80054 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3384 6770001 5.78896 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3385 6772001 5.7774 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3386 6774001 5.76587 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3387 6776001 5.75436 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3388 6778001 5.74288 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3389 6780001 5.73141 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3390 6782001 5.71997 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3391 6784001 5.70856 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3392 6786001 5.69716 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3393 6788001 5.68579 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3394 6790001 5.67444 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3395 6792001 5.66312 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3396 6794001 5.65181 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3397 6796001 5.64053 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3398 6798001 5.62927 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3399 6800001 5.61804 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3400 6802001 5.60682 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3401 6804001 5.59563 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3402 6806001 5.58446 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3403 6808001 5.57332 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3404 6810001 5.56219 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3405 6812001 5.55109 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3406 6814001 5.54001 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3407 6816001 5.52895 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3408 6818001 5.51792 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3409 6820001 5.5069 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3410 6822001 5.49591 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3411 6824001 5.48494 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3412 6826001 5.47399 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3413 6828001 5.46307 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3414 6830001 5.45216 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3415 6832001 5.44128 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3416 6834001 5.43042 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3417 6836001 5.41958 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3418 6838001 5.40876 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3419 6840001 5.39797 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3420 6842001 5.38719 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3421 6844001 5.37644 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3422 6846001 5.36571 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3423 6848001 5.355 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3424 6850001 5.34431 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3425 6852001 5.33364 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3426 6854001 5.32299 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3427 6856001 5.31237 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3428 6858001 5.30177 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3429 6860001 5.29118 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3430 6862001 5.28062 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3431 6864001 5.27008 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3432 6866001 5.25956 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3433 6868001 5.24907 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3434 6870001 5.23859 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3435 6872001 5.22813 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3436 6874001 5.2177 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3437 6876001 5.20728 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3438 6878001 5.19689 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3439 6880001 5.18652 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3440 6882001 5.17616 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3441 6884001 5.16583 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3442 6886001 5.15552 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3443 6888001 5.14523 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3444 6890001 5.13496 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3445 6892001 5.12471 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3446 6894001 5.11448 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3447 6896001 5.10427 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3448 6898001 5.09408 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3449 6900001 5.08392 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3450 6902001 5.07377 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3451 6904001 5.06364 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3452 6906001 5.05354 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3453 6908001 5.04345 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3454 6910001 5.03338 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3455 6912001 5.02333 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3456 6914001 5.01331 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3457 6916001 5.0033 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3458 6918001 4.99331 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3459 6920001 4.98335 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3460 6922001 4.9734 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3461 6924001 4.96347 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3462 6926001 4.95357 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3463 6928001 4.94368 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3464 6930001 4.93381 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3465 6932001 4.92396 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3466 6934001 4.91414 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3467 6936001 4.90433 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3468 6938001 4.89454 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3469 6940001 4.88477 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3470 6942001 4.87502 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3471 6944001 4.86529 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3472 6946001 4.85558 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3473 6948001 4.84589 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3474 6950001 4.83621 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3475 6952001 4.82656 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3476 6954001 4.81693 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3477 6956001 4.80731 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3478 6958001 4.79772 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3479 6960001 4.78814 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3480 6962001 4.77858 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3481 6964001 4.76904 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3482 6966001 4.75953 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3483 6968001 4.75003 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3484 6970001 4.74054 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3485 6972001 4.73108 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3486 6974001 4.72164 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3487 6976001 4.71221 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3488 6978001 4.70281 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3489 6980001 4.69342 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3490 6982001 4.68405 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3491 6984001 4.6747 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3492 6986001 4.66537 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3493 6988001 4.65606 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3494 6990001 4.64677 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3495 6992001 4.63749 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3496 6994001 4.62824 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3497 6996001 4.619 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3498 6998001 4.60978 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3499 7000001 4.60058 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3500 7002001 4.59139 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3501 7004001 4.58223 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3502 7006001 4.57308 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3503 7008001 4.56396 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3504 7010001 4.55485 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3505 7012001 4.54576 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3506 7014001 4.53668 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3507 7016001 4.52763 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3508 7018001 4.51859 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3509 7020001 4.50957 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3510 7022001 4.50057 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3511 7024001 4.49159 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3512 7026001 4.48262 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3513 7028001 4.47367 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3514 7030001 4.46474 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3515 7032001 4.45583 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3516 7034001 4.44694 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3517 7036001 4.43806 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3518 7038001 4.4292 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3519 7040001 4.42036 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3520 7042001 4.41154 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3521 7044001 4.40273 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3522 7046001 4.39395 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3523 7048001 4.38518 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3524 7050001 4.37642 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3525 7052001 4.36769 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3526 7054001 4.35897 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3527 7056001 4.35027 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3528 7058001 4.34159 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3529 7060001 4.33292 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3530 7062001 4.32427 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3531 7064001 4.31564 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3532 7066001 4.30703 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3533 7068001 4.29843 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3534 7070001 4.28985 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3535 7072001 4.28129 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3536 7074001 4.27274 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3537 7076001 4.26421 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3538 7078001 4.2557 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3539 7080001 4.24721 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3540 7082001 4.23873 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3541 7084001 4.23027 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3542 7086001 4.22183 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3543 7088001 4.2134 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3544 7090001 4.20499 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3545 7092001 4.1966 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3546 7094001 4.18822 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3547 7096001 4.17986 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3548 7098001 4.17152 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3549 7100001 4.16319 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3550 7102001 4.15488 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3551 7104001 4.14659 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3552 7106001 4.13831 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3553 7108001 4.13005 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3554 7110001 4.12181 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3555 7112001 4.11358 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3556 7114001 4.10537 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3557 7116001 4.09718 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3558 7118001 4.089 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3559 7120001 4.08084 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3560 7122001 4.07269 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3561 7124001 4.06456 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3562 7126001 4.05645 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3563 7128001 4.04835 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3564 7130001 4.04027 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3565 7132001 4.03221 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3566 7134001 4.02416 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3567 7136001 4.01613 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3568 7138001 4.00811 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3569 7140001 4.00011 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3570 7142001 3.99213 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3571 7144001 3.98416 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3572 7146001 3.9762 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3573 7148001 3.96827 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3574 7150001 3.96035 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3575 7152001 3.95244 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3576 7154001 3.94455 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3577 7156001 3.93668 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3578 7158001 3.92882 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3579 7160001 3.92098 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3580 7162001 3.91315 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3581 7164001 3.90534 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3582 7166001 3.89755 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3583 7168001 3.88977 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3584 7170001 3.882 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3585 7172001 3.87426 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3586 7174001 3.86652 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3587 7176001 3.85881 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3588 7178001 3.8511 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3589 7180001 3.84342 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3590 7182001 3.83574 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3591 7184001 3.82809 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3592 7186001 3.82045 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3593 7188001 3.81282 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3594 7190001 3.80521 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3595 7192001 3.79762 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3596 7194001 3.79004 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3597 7196001 3.78247 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3598 7198001 3.77492 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3599 7200001 3.76739 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3600 7202001 3.75987 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3601 7204001 3.75236 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3602 7206001 3.74487 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3603 7208001 3.7374 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3604 7210001 3.72994 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3605 7212001 3.72249 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3606 7214001 3.71506 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3607 7216001 3.70765 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3608 7218001 3.70025 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3609 7220001 3.69286 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3610 7222001 3.68549 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3611 7224001 3.67813 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3612 7226001 3.67079 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3613 7228001 3.66347 [ 0 6 8 2 7 10 4 11 1 9 5 3 ] 3513.79 3490.62 3614 7230001 3.65615 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3615 7232001 3.64886 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3616 7234001 3.64157 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3617 7236001 3.6343 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3618 7238001 3.62705 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3619 7240001 3.61981 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3620 7242001 3.61258 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3621 7244001 3.60537 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3622 7246001 3.59818 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3623 7248001 3.591 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3624 7250001 3.58383 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3625 7252001 3.57667 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3626 7254001 3.56954 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3627 7256001 3.56241 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3628 7258001 3.5553 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3629 7260001 3.5482 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3630 7262001 3.54112 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3631 7264001 3.53405 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3632 7266001 3.527 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3633 7268001 3.51996 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3634 7270001 3.51293 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3635 7272001 3.50592 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3636 7274001 3.49892 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3637 7276001 3.49194 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3638 7278001 3.48497 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3639 7280001 3.47801 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3640 7282001 3.47107 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3641 7284001 3.46414 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3642 7286001 3.45723 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3643 7288001 3.45033 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3644 7290001 3.44344 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3645 7292001 3.43657 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3646 7294001 3.42971 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3647 7296001 3.42286 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3648 7298001 3.41603 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3649 7300001 3.40921 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3650 7302001 3.40241 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3651 7304001 3.39562 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3652 7306001 3.38884 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3653 7308001 3.38208 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3654 7310001 3.37532 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3655 7312001 3.36859 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3656 7314001 3.36186 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3657 7316001 3.35515 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3658 7318001 3.34846 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3659 7320001 3.34177 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3660 7322001 3.3351 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3661 7324001 3.32845 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3662 7326001 3.3218 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3663 7328001 3.31517 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3664 7330001 3.30855 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3665 7332001 3.30195 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3666 7334001 3.29536 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3667 7336001 3.28878 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3668 7338001 3.28222 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3669 7340001 3.27567 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3670 7342001 3.26913 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3671 7344001 3.2626 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3672 7346001 3.25609 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3673 7348001 3.24959 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3674 7350001 3.24311 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3675 7352001 3.23663 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3676 7354001 3.23017 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3677 7356001 3.22372 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3678 7358001 3.21729 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3679 7360001 3.21087 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3680 7362001 3.20446 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3681 7364001 3.19806 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3682 7366001 3.19168 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3683 7368001 3.18531 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3684 7370001 3.17895 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3685 7372001 3.17261 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3686 7374001 3.16627 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3687 7376001 3.15995 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3688 7378001 3.15365 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3689 7380001 3.14735 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3690 7382001 3.14107 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3691 7384001 3.1348 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3692 7386001 3.12854 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3693 7388001 3.1223 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3694 7390001 3.11607 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3695 7392001 3.10985 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3696 7394001 3.10364 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3697 7396001 3.09744 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3698 7398001 3.09126 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3699 7400001 3.08509 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3700 7402001 3.07893 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3701 7404001 3.07279 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3702 7406001 3.06665 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3703 7408001 3.06053 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3704 7410001 3.05442 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3705 7412001 3.04833 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3706 7414001 3.04224 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3707 7416001 3.03617 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3708 7418001 3.03011 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3709 7420001 3.02406 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3710 7422001 3.01803 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3711 7424001 3.012 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3712 7426001 3.00599 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3713 7428001 2.99999 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3714 7430001 2.994 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3715 7432001 2.98803 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3716 7434001 2.98206 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3717 7436001 2.97611 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3718 7438001 2.97017 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3719 7440001 2.96424 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3720 7442001 2.95833 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3721 7444001 2.95242 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3722 7446001 2.94653 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3723 7448001 2.94065 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3724 7450001 2.93478 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3725 7452001 2.92892 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3726 7454001 2.92307 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3727 7456001 2.91724 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3728 7458001 2.91142 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3729 7460001 2.9056 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3730 7462001 2.8998 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3731 7464001 2.89402 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3732 7466001 2.88824 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3733 7468001 2.88247 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3734 7470001 2.87672 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3735 7472001 2.87098 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3736 7474001 2.86525 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3737 7476001 2.85953 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3738 7478001 2.85382 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3739 7480001 2.84813 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3740 7482001 2.84244 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3741 7484001 2.83677 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3742 7486001 2.83111 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3743 7488001 2.82545 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3744 7490001 2.81981 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3745 7492001 2.81419 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3746 7494001 2.80857 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3747 7496001 2.80296 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3748 7498001 2.79737 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3749 7500001 2.79179 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3750 7502001 2.78621 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3751 7504001 2.78065 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3752 7506001 2.7751 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3753 7508001 2.76956 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3754 7510001 2.76403 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3755 7512001 2.75852 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3756 7514001 2.75301 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3757 7516001 2.74752 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3758 7518001 2.74203 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3759 7520001 2.73656 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3760 7522001 2.7311 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3761 7524001 2.72565 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3762 7526001 2.7202 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3763 7528001 2.71478 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3764 7530001 2.70936 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3765 7532001 2.70395 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3766 7534001 2.69855 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3767 7536001 2.69317 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3768 7538001 2.68779 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3769 7540001 2.68242 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3770 7542001 2.67707 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3771 7544001 2.67173 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3772 7546001 2.66639 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3773 7548001 2.66107 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3774 7550001 2.65576 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3775 7552001 2.65046 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3776 7554001 2.64517 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3777 7556001 2.63989 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3778 7558001 2.63462 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3779 7560001 2.62936 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3780 7562001 2.62411 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3781 7564001 2.61888 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3782 7566001 2.61365 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3783 7568001 2.60843 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3784 7570001 2.60323 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3785 7572001 2.59803 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3786 7574001 2.59284 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3787 7576001 2.58767 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3788 7578001 2.5825 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3789 7580001 2.57735 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3790 7582001 2.5722 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3791 7584001 2.56707 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3792 7586001 2.56195 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3793 7588001 2.55683 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3794 7590001 2.55173 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3795 7592001 2.54664 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3796 7594001 2.54155 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3797 7596001 2.53648 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3798 7598001 2.53142 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3799 7600001 2.52636 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3800 7602001 2.52132 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3801 7604001 2.51629 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3802 7606001 2.51127 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3803 7608001 2.50625 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3804 7610001 2.50125 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3805 7612001 2.49626 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3806 7614001 2.49128 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3807 7616001 2.4863 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3808 7618001 2.48134 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3809 7620001 2.47639 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3810 7622001 2.47145 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3811 7624001 2.46651 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3812 7626001 2.46159 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3813 7628001 2.45668 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3814 7630001 2.45177 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3815 7632001 2.44688 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3816 7634001 2.44199 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3817 7636001 2.43712 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3818 7638001 2.43226 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3819 7640001 2.4274 [ 0 6 8 2 7 11 4 10 1 9 5 3 ] 3504.09 3490.62 3820 7642001 2.42256 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3821 7644001 2.41772 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3822 7646001 2.41289 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3823 7648001 2.40808 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3824 7650001 2.40327 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3825 7652001 2.39847 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3826 7654001 2.39369 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3827 7656001 2.38891 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3828 7658001 2.38414 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3829 7660001 2.37938 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3830 7662001 2.37463 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3831 7664001 2.36989 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3832 7666001 2.36516 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3833 7668001 2.36044 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3834 7670001 2.35573 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3835 7672001 2.35103 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3836 7674001 2.34634 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3837 7676001 2.34165 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3838 7678001 2.33698 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3839 7680001 2.33231 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3840 7682001 2.32766 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3841 7684001 2.32301 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3842 7686001 2.31838 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3843 7688001 2.31375 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3844 7690001 2.30913 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3845 7692001 2.30452 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3846 7694001 2.29992 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3847 7696001 2.29533 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3848 7698001 2.29075 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3849 7700001 2.28618 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3850 7702001 2.28161 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3851 7704001 2.27706 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3852 7706001 2.27251 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3853 7708001 2.26798 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3854 7710001 2.26345 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3855 7712001 2.25893 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3856 7714001 2.25442 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3857 7716001 2.24993 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3858 7718001 2.24543 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3859 7720001 2.24095 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3860 7722001 2.23648 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3861 7724001 2.23202 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3862 7726001 2.22756 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3863 7728001 2.22311 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3864 7730001 2.21868 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3865 7732001 2.21425 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3866 7734001 2.20983 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3867 7736001 2.20542 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3868 7738001 2.20102 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3869 7740001 2.19662 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3870 7742001 2.19224 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3871 7744001 2.18786 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3872 7746001 2.1835 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3873 7748001 2.17914 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3874 7750001 2.17479 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3875 7752001 2.17045 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3876 7754001 2.16611 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3877 7756001 2.16179 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3878 7758001 2.15748 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3879 7760001 2.15317 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3880 7762001 2.14887 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3881 7764001 2.14458 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3882 7766001 2.1403 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3883 7768001 2.13603 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3884 7770001 2.13177 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3885 7772001 2.12751 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3886 7774001 2.12326 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3887 7776001 2.11903 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3888 7778001 2.1148 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3889 7780001 2.11058 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3890 7782001 2.10636 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3891 7784001 2.10216 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3892 7786001 2.09796 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3893 7788001 2.09378 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3894 7790001 2.0896 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3895 7792001 2.08543 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3896 7794001 2.08126 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3897 7796001 2.07711 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3898 7798001 2.07296 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3899 7800001 2.06882 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3900 7802001 2.0647 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3901 7804001 2.06057 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3902 7806001 2.05646 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3903 7808001 2.05236 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3904 7810001 2.04826 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3905 7812001 2.04417 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3906 7814001 2.04009 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3907 7816001 2.03602 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3908 7818001 2.03196 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3909 7820001 2.0279 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3910 7822001 2.02385 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3911 7824001 2.01981 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3912 7826001 2.01578 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3913 7828001 2.01176 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3914 7830001 2.00774 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3915 7832001 2.00373 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3916 7834001 1.99974 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3917 7836001 1.99574 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3918 7838001 1.99176 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3919 7840001 1.98778 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3920 7842001 1.98382 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3921 7844001 1.97986 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3922 7846001 1.97591 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3923 7848001 1.97196 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3924 7850001 1.96803 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3925 7852001 1.9641 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3926 7854001 1.96018 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3927 7856001 1.95626 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3928 7858001 1.95236 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3929 7860001 1.94846 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3930 7862001 1.94457 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3931 7864001 1.94069 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3932 7866001 1.93682 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3933 7868001 1.93295 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3934 7870001 1.92909 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3935 7872001 1.92524 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3936 7874001 1.9214 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3937 7876001 1.91757 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3938 7878001 1.91374 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3939 7880001 1.90992 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3940 7882001 1.90611 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3941 7884001 1.9023 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3942 7886001 1.8985 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3943 7888001 1.89472 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3944 7890001 1.89093 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3945 7892001 1.88716 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3946 7894001 1.88339 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3947 7896001 1.87963 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3948 7898001 1.87588 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3949 7900001 1.87214 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3950 7902001 1.8684 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3951 7904001 1.86467 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3952 7906001 1.86095 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3953 7908001 1.85723 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3954 7910001 1.85353 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3955 7912001 1.84983 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3956 7914001 1.84614 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3957 7916001 1.84245 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3958 7918001 1.83877 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3959 7920001 1.8351 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3960 7922001 1.83144 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3961 7924001 1.82778 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3962 7926001 1.82414 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3963 7928001 1.8205 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3964 7930001 1.81686 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3965 7932001 1.81324 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3966 7934001 1.80962 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3967 7936001 1.806 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3968 7938001 1.8024 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3969 7940001 1.7988 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3970 7942001 1.79521 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3971 7944001 1.79163 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3972 7946001 1.78805 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3973 7948001 1.78448 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3974 7950001 1.78092 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3975 7952001 1.77737 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3976 7954001 1.77382 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3977 7956001 1.77028 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3978 7958001 1.76674 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3979 7960001 1.76322 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3980 7962001 1.7597 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3981 7964001 1.75619 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3982 7966001 1.75268 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3983 7968001 1.74918 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3984 7970001 1.74569 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3985 7972001 1.74221 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3986 7974001 1.73873 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3987 7976001 1.73526 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3988 7978001 1.7318 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3989 7980001 1.72834 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3990 7982001 1.72489 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3991 7984001 1.72145 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3992 7986001 1.71801 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3993 7988001 1.71458 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3994 7990001 1.71116 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3995 7992001 1.70774 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3996 7994001 1.70433 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3997 7996001 1.70093 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3998 7998001 1.69754 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 3999 8000001 1.69415 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4000 8002001 1.69077 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4001 8004001 1.68739 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4002 8006001 1.68402 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4003 8008001 1.68066 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4004 8010001 1.67731 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4005 8012001 1.67396 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4006 8014001 1.67062 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4007 8016001 1.66728 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4008 8018001 1.66396 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4009 8020001 1.66064 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4010 8022001 1.65732 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4011 8024001 1.65401 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4012 8026001 1.65071 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4013 8028001 1.64742 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4014 8030001 1.64413 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4015 8032001 1.64085 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4016 8034001 1.63757 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4017 8036001 1.6343 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4018 8038001 1.63104 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4019 8040001 1.62779 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4020 8042001 1.62454 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4021 8044001 1.62129 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4022 8046001 1.61806 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4023 8048001 1.61483 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4024 8050001 1.6116 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4025 8052001 1.60839 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4026 8054001 1.60518 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4027 8056001 1.60197 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4028 8058001 1.59878 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4029 8060001 1.59559 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4030 8062001 1.5924 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4031 8064001 1.58922 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4032 8066001 1.58605 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4033 8068001 1.58288 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4034 8070001 1.57972 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4035 8072001 1.57657 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4036 8074001 1.57342 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4037 8076001 1.57028 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4038 8078001 1.56715 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4039 8080001 1.56402 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4040 8082001 1.5609 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4041 8084001 1.55778 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4042 8086001 1.55467 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4043 8088001 1.55157 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4044 8090001 1.54847 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4045 8092001 1.54538 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4046 8094001 1.5423 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4047 8096001 1.53922 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4048 8098001 1.53615 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4049 8100001 1.53308 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4050 8102001 1.53002 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4051 8104001 1.52697 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4052 8106001 1.52392 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4053 8108001 1.52088 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4054 8110001 1.51784 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4055 8112001 1.51481 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4056 8114001 1.51179 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4057 8116001 1.50877 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4058 8118001 1.50576 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4059 8120001 1.50276 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4060 8122001 1.49976 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4061 8124001 1.49676 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4062 8126001 1.49377 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4063 8128001 1.49079 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4064 8130001 1.48782 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4065 8132001 1.48485 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4066 8134001 1.48188 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4067 8136001 1.47893 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4068 8138001 1.47597 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4069 8140001 1.47303 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4070 8142001 1.47009 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4071 8144001 1.46715 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4072 8146001 1.46423 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4073 8148001 1.4613 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4074 8150001 1.45839 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4075 8152001 1.45548 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4076 8154001 1.45257 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4077 8156001 1.44967 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4078 8158001 1.44678 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4079 8160001 1.44389 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4080 8162001 1.44101 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4081 8164001 1.43813 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4082 8166001 1.43526 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4083 8168001 1.4324 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4084 8170001 1.42954 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4085 8172001 1.42668 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4086 8174001 1.42384 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4087 8176001 1.42099 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4088 8178001 1.41816 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4089 8180001 1.41533 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4090 8182001 1.4125 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4091 8184001 1.40968 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4092 8186001 1.40687 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4093 8188001 1.40406 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4094 8190001 1.40126 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4095 8192001 1.39846 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4096 8194001 1.39567 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4097 8196001 1.39288 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4098 8198001 1.3901 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4099 8200001 1.38733 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4100 8202001 1.38456 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4101 8204001 1.3818 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4102 8206001 1.37904 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4103 8208001 1.37629 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4104 8210001 1.37354 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4105 8212001 1.3708 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4106 8214001 1.36806 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4107 8216001 1.36533 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4108 8218001 1.3626 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4109 8220001 1.35989 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4110 8222001 1.35717 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4111 8224001 1.35446 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4112 8226001 1.35176 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4113 8228001 1.34906 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4114 8230001 1.34637 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4115 8232001 1.34368 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4116 8234001 1.341 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4117 8236001 1.33832 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4118 8238001 1.33565 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4119 8240001 1.33298 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4120 8242001 1.33032 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4121 8244001 1.32767 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4122 8246001 1.32502 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4123 8248001 1.32237 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4124 8250001 1.31973 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4125 8252001 1.3171 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4126 8254001 1.31447 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4127 8256001 1.31185 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4128 8258001 1.30923 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4129 8260001 1.30662 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4130 8262001 1.30401 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4131 8264001 1.3014 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4132 8266001 1.29881 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4133 8268001 1.29621 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4134 8270001 1.29363 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4135 8272001 1.29105 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4136 8274001 1.28847 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4137 8276001 1.2859 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4138 8278001 1.28333 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4139 8280001 1.28077 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4140 8282001 1.27821 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4141 8284001 1.27566 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4142 8286001 1.27311 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4143 8288001 1.27057 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4144 8290001 1.26804 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4145 8292001 1.26551 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4146 8294001 1.26298 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4147 8296001 1.26046 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4148 8298001 1.25794 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4149 8300001 1.25543 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4150 8302001 1.25293 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4151 8304001 1.25043 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4152 8306001 1.24793 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4153 8308001 1.24544 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4154 8310001 1.24295 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4155 8312001 1.24047 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4156 8314001 1.238 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4157 8316001 1.23553 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4158 8318001 1.23306 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4159 8320001 1.2306 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4160 8322001 1.22814 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4161 8324001 1.22569 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4162 8326001 1.22324 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4163 8328001 1.2208 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4164 8330001 1.21837 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4165 8332001 1.21593 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4166 8334001 1.21351 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4167 8336001 1.21108 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4168 8338001 1.20867 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4169 8340001 1.20625 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4170 8342001 1.20385 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4171 8344001 1.20144 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4172 8346001 1.19905 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4173 8348001 1.19665 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4174 8350001 1.19426 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4175 8352001 1.19188 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4176 8354001 1.1895 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4177 8356001 1.18713 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4178 8358001 1.18476 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4179 8360001 1.18239 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4180 8362001 1.18003 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4181 8364001 1.17768 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4182 8366001 1.17533 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4183 8368001 1.17298 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4184 8370001 1.17064 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4185 8372001 1.1683 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4186 8374001 1.16597 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4187 8376001 1.16364 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4188 8378001 1.16132 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4189 8380001 1.159 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4190 8382001 1.15669 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4191 8384001 1.15438 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4192 8386001 1.15208 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4193 8388001 1.14978 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4194 8390001 1.14748 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4195 8392001 1.14519 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4196 8394001 1.14291 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4197 8396001 1.14062 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4198 8398001 1.13835 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4199 8400001 1.13608 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4200 8402001 1.13381 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4201 8404001 1.13155 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4202 8406001 1.12929 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4203 8408001 1.12703 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4204 8410001 1.12478 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4205 8412001 1.12254 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4206 8414001 1.1203 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4207 8416001 1.11806 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4208 8418001 1.11583 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4209 8420001 1.1136 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4210 8422001 1.11138 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4211 8424001 1.10916 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4212 8426001 1.10695 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4213 8428001 1.10474 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4214 8430001 1.10253 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4215 8432001 1.10033 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4216 8434001 1.09814 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4217 8436001 1.09594 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4218 8438001 1.09376 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4219 8440001 1.09157 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4220 8442001 1.08939 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4221 8444001 1.08722 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4222 8446001 1.08505 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4223 8448001 1.08288 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4224 8450001 1.08072 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4225 8452001 1.07857 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4226 8454001 1.07641 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4227 8456001 1.07426 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4228 8458001 1.07212 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4229 8460001 1.06998 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4230 8462001 1.06784 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4231 8464001 1.06571 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4232 8466001 1.06359 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4233 8468001 1.06146 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4234 8470001 1.05934 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4235 8472001 1.05723 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4236 8474001 1.05512 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4237 8476001 1.05301 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4238 8478001 1.05091 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4239 8480001 1.04881 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4240 8482001 1.04672 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4241 8484001 1.04463 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4242 8486001 1.04255 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4243 8488001 1.04047 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4244 8490001 1.03839 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4245 8492001 1.03632 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4246 8494001 1.03425 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4247 8496001 1.03218 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4248 8498001 1.03012 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4249 8500001 1.02807 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4250 8502001 1.02601 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4251 8504001 1.02397 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4252 8506001 1.02192 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4253 8508001 1.01988 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4254 8510001 1.01785 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4255 8512001 1.01582 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4256 8514001 1.01379 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4257 8516001 1.01176 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4258 8518001 1.00975 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4259 8520001 1.00773 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4260 8522001 1.00572 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4261 8524001 1.00371 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4262 8526001 1.00171 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4263 8528001 0.999708 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4264 8530001 0.997712 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4265 8532001 0.995721 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4266 8534001 0.993734 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4267 8536001 0.99175 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4268 8538001 0.989771 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4269 8540001 0.987795 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4270 8542001 0.985823 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4271 8544001 0.983856 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4272 8546001 0.981892 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4273 8548001 0.979932 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4274 8550001 0.977976 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4275 8552001 0.976024 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4276 8554001 0.974076 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4277 8556001 0.972131 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4278 8558001 0.970191 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4279 8560001 0.968255 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4280 8562001 0.966322 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4281 8564001 0.964393 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4282 8566001 0.962468 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4283 8568001 0.960547 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4284 8570001 0.95863 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4285 8572001 0.956716 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4286 8574001 0.954807 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4287 8576001 0.952901 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4288 8578001 0.950999 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4289 8580001 0.949101 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4290 8582001 0.947206 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4291 8584001 0.945316 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4292 8586001 0.943429 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4293 8588001 0.941546 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4294 8590001 0.939667 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4295 8592001 0.937791 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4296 8594001 0.935919 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4297 8596001 0.934051 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4298 8598001 0.932187 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4299 8600001 0.930326 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4300 8602001 0.928469 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4301 8604001 0.926616 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4302 8606001 0.924766 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4303 8608001 0.92292 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4304 8610001 0.921078 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4305 8612001 0.91924 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4306 8614001 0.917405 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4307 8616001 0.915574 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4308 8618001 0.913746 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4309 8620001 0.911922 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4310 8622001 0.910102 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4311 8624001 0.908286 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4312 8626001 0.906473 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4313 8628001 0.904663 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4314 8630001 0.902858 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4315 8632001 0.901056 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4316 8634001 0.899257 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4317 8636001 0.897462 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4318 8638001 0.895671 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4319 8640001 0.893883 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4320 8642001 0.892099 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4321 8644001 0.890318 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4322 8646001 0.888541 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4323 8648001 0.886768 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4324 8650001 0.884998 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4325 8652001 0.883231 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4326 8654001 0.881468 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4327 8656001 0.879709 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4328 8658001 0.877953 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4329 8660001 0.8762 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4330 8662001 0.874452 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4331 8664001 0.872706 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4332 8666001 0.870964 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4333 8668001 0.869226 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4334 8670001 0.867491 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4335 8672001 0.865759 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4336 8674001 0.864031 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4337 8676001 0.862307 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4338 8678001 0.860585 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4339 8680001 0.858868 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4340 8682001 0.857153 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4341 8684001 0.855443 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4342 8686001 0.853735 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4343 8688001 0.852031 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4344 8690001 0.85033 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4345 8692001 0.848633 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4346 8694001 0.846939 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4347 8696001 0.845249 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4348 8698001 0.843562 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4349 8700001 0.841878 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4350 8702001 0.840197 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4351 8704001 0.83852 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4352 8706001 0.836847 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4353 8708001 0.835176 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4354 8710001 0.833509 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4355 8712001 0.831846 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4356 8714001 0.830185 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4357 8716001 0.828528 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4358 8718001 0.826874 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4359 8720001 0.825224 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4360 8722001 0.823577 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4361 8724001 0.821933 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4362 8726001 0.820292 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4363 8728001 0.818655 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4364 8730001 0.817021 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4365 8732001 0.81539 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4366 8734001 0.813763 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4367 8736001 0.812138 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4368 8738001 0.810517 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4369 8740001 0.8089 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4370 8742001 0.807285 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4371 8744001 0.805674 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4372 8746001 0.804066 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4373 8748001 0.802461 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4374 8750001 0.800859 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4375 8752001 0.79926 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4376 8754001 0.797665 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4377 8756001 0.796073 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4378 8758001 0.794484 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4379 8760001 0.792898 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4380 8762001 0.791316 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4381 8764001 0.789736 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4382 8766001 0.78816 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4383 8768001 0.786587 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4384 8770001 0.785017 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4385 8772001 0.78345 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4386 8774001 0.781886 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4387 8776001 0.780325 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4388 8778001 0.778768 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4389 8780001 0.777213 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4390 8782001 0.775662 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4391 8784001 0.774114 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4392 8786001 0.772569 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4393 8788001 0.771027 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4394 8790001 0.769488 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4395 8792001 0.767952 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4396 8794001 0.766419 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4397 8796001 0.764889 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4398 8798001 0.763362 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4399 8800001 0.761839 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4400 8802001 0.760318 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4401 8804001 0.7588 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4402 8806001 0.757286 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4403 8808001 0.755774 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4404 8810001 0.754266 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4405 8812001 0.75276 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4406 8814001 0.751258 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4407 8816001 0.749758 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4408 8818001 0.748262 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4409 8820001 0.746768 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4410 8822001 0.745278 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4411 8824001 0.74379 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4412 8826001 0.742305 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4413 8828001 0.740824 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4414 8830001 0.739345 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4415 8832001 0.737869 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4416 8834001 0.736397 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4417 8836001 0.734927 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4418 8838001 0.73346 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4419 8840001 0.731996 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4420 8842001 0.730535 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4421 8844001 0.729077 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4422 8846001 0.727621 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4423 8848001 0.726169 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4424 8850001 0.72472 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4425 8852001 0.723273 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4426 8854001 0.721829 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4427 8856001 0.720389 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4428 8858001 0.718951 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4429 8860001 0.717516 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4430 8862001 0.716083 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4431 8864001 0.714654 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4432 8866001 0.713228 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4433 8868001 0.711804 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4434 8870001 0.710383 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4435 8872001 0.708965 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4436 8874001 0.70755 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4437 8876001 0.706138 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4438 8878001 0.704729 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4439 8880001 0.703322 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4440 8882001 0.701918 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4441 8884001 0.700517 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4442 8886001 0.699119 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4443 8888001 0.697723 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4444 8890001 0.696331 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4445 8892001 0.694941 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4446 8894001 0.693554 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4447 8896001 0.692169 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4448 8898001 0.690788 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4449 8900001 0.689409 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4450 8902001 0.688033 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4451 8904001 0.68666 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4452 8906001 0.685289 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4453 8908001 0.683921 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4454 8910001 0.682556 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4455 8912001 0.681194 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4456 8914001 0.679834 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4457 8916001 0.678477 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4458 8918001 0.677123 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4459 8920001 0.675771 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4460 8922001 0.674422 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4461 8924001 0.673076 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4462 8926001 0.671733 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4463 8928001 0.670392 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4464 8930001 0.669054 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4465 8932001 0.667718 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4466 8934001 0.666386 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4467 8936001 0.665056 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4468 8938001 0.663728 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4469 8940001 0.662403 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4470 8942001 0.661081 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4471 8944001 0.659762 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4472 8946001 0.658445 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4473 8948001 0.65713 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4474 8950001 0.655819 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4475 8952001 0.65451 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4476 8954001 0.653203 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4477 8956001 0.6519 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4478 8958001 0.650598 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4479 8960001 0.6493 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4480 8962001 0.648004 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4481 8964001 0.64671 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4482 8966001 0.64542 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4483 8968001 0.644131 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4484 8970001 0.642846 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4485 8972001 0.641562 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4486 8974001 0.640282 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4487 8976001 0.639004 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4488 8978001 0.637728 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4489 8980001 0.636456 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4490 8982001 0.635185 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4491 8984001 0.633917 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4492 8986001 0.632652 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4493 8988001 0.631389 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4494 8990001 0.630129 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4495 8992001 0.628871 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4496 8994001 0.627616 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4497 8996001 0.626363 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4498 8998001 0.625113 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4499 9000001 0.623865 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4500 9002001 0.62262 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4501 9004001 0.621377 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4502 9006001 0.620137 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4503 9008001 0.618899 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4504 9010001 0.617664 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4505 9012001 0.616431 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4506 9014001 0.615201 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4507 9016001 0.613973 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4508 9018001 0.612747 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4509 9020001 0.611524 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4510 9022001 0.610304 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4511 9024001 0.609085 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4512 9026001 0.60787 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4513 9028001 0.606656 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4514 9030001 0.605445 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4515 9032001 0.604237 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4516 9034001 0.603031 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4517 9036001 0.601827 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4518 9038001 0.600626 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4519 9040001 0.599427 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4520 9042001 0.598231 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4521 9044001 0.597037 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4522 9046001 0.595845 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4523 9048001 0.594656 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4524 9050001 0.593469 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4525 9052001 0.592284 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4526 9054001 0.591102 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4527 9056001 0.589922 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4528 9058001 0.588745 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4529 9060001 0.587569 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4530 9062001 0.586397 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4531 9064001 0.585226 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4532 9066001 0.584058 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4533 9068001 0.582892 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4534 9070001 0.581729 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4535 9072001 0.580568 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4536 9074001 0.579409 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4537 9076001 0.578252 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4538 9078001 0.577098 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4539 9080001 0.575946 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4540 9082001 0.574797 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4541 9084001 0.573649 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4542 9086001 0.572504 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4543 9088001 0.571362 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4544 9090001 0.570221 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4545 9092001 0.569083 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4546 9094001 0.567947 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4547 9096001 0.566814 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4548 9098001 0.565682 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4549 9100001 0.564553 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4550 9102001 0.563426 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4551 9104001 0.562302 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4552 9106001 0.561179 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4553 9108001 0.560059 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4554 9110001 0.558941 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4555 9112001 0.557826 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4556 9114001 0.556712 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4557 9116001 0.555601 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4558 9118001 0.554492 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4559 9120001 0.553385 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4560 9122001 0.552281 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4561 9124001 0.551178 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4562 9126001 0.550078 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4563 9128001 0.54898 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4564 9130001 0.547884 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4565 9132001 0.546791 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4566 9134001 0.545699 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4567 9136001 0.54461 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4568 9138001 0.543523 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4569 9140001 0.542438 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4570 9142001 0.541356 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4571 9144001 0.540275 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4572 9146001 0.539197 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4573 9148001 0.53812 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4574 9150001 0.537046 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4575 9152001 0.535974 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4576 9154001 0.534905 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4577 9156001 0.533837 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4578 9158001 0.532771 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4579 9160001 0.531708 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4580 9162001 0.530647 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4581 9164001 0.529587 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4582 9166001 0.52853 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4583 9168001 0.527475 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4584 9170001 0.526423 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4585 9172001 0.525372 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4586 9174001 0.524323 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4587 9176001 0.523277 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4588 9178001 0.522232 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4589 9180001 0.52119 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4590 9182001 0.520149 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4591 9184001 0.519111 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4592 9186001 0.518075 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4593 9188001 0.517041 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4594 9190001 0.516009 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4595 9192001 0.514979 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4596 9194001 0.513951 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4597 9196001 0.512925 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4598 9198001 0.511902 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4599 9200001 0.51088 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4600 9202001 0.50986 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4601 9204001 0.508842 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4602 9206001 0.507827 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4603 9208001 0.506813 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4604 9210001 0.505801 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4605 9212001 0.504792 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4606 9214001 0.503784 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4607 9216001 0.502779 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4608 9218001 0.501775 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 4609 9220001 0.500774 [ 0 6 8 2 7 4 10 11 1 9 5 3 ] 3490.62 3490.62 # final order of cities: # "Santa Fe" # "Tesuque" # "Los Alamos" # "Albuquerque" # "Grants" # "Durango" # "Cortez" # "Gallup" # "Phoenix" # "Las Cruces" # "Dallas" # "Clovis" # final coordinates of cities (longitude and latitude) ###final_city_coord: -105.95 35.68 Santa Fe ###final_city_coord: -105.92 35.77 Tesuque ###final_city_coord: -106.28 35.89 Los Alamos ###final_city_coord: -106.62 35.12 Albuquerque ###final_city_coord: -107.84 35.15 Grants ###final_city_coord: -107.87 37.29 Durango ###final_city_coord: -108.58 37.35 Cortez ###final_city_coord: -108.74 35.52 Gallup ###final_city_coord: -112.07 33.54 Phoenix ###final_city_coord: -106.76 32.34 Las Cruces ###final_city_coord: -96.77 32.79 Dallas ###final_city_coord: -103.2 34.41 Clovis ###final_city_coord: -105.95 35.68 Santa Fe # gsl/doc/examples/vectorw.c0000644000175000017500000000053413536674414014154 0ustar eddedd#include #include int main (void) { int i; gsl_vector * v = gsl_vector_alloc (100); for (i = 0; i < 100; i++) { gsl_vector_set (v, i, 1.23 + i); } { FILE * f = fopen ("test.dat", "w"); gsl_vector_fprintf (f, v, "%.5g"); fclose (f); } gsl_vector_free (v); return 0; } gsl/doc/examples/rquantile.txt0000644000175000017500000000045313536674414015064 0ustar eddeddThe dataset is 0.00645272, 0.0074002, 0.0120706, 0.0207256, 0.0227282, ... 0.25 quartile: exact = 0.75766, estimated = 0.75580, error = -2.450209e-03 0.50 quartile: exact = 1.17508, estimated = 1.17438, error = -5.995912e-04 0.75 quartile: exact = 1.65347, estimated = 1.65696, error = 2.110571e-03 gsl/doc/examples/movstat3.c0000644000175000017500000000307513536674414014246 0ustar eddedd#include #include #include #include #include #include #include #include #include double func(const size_t n, double x[], void * params) { const double alpha = *(double *) params; gsl_sort(x, 1, n); return gsl_stats_trmean_from_sorted_data(alpha, x, 1, n); } int main(void) { const size_t N = 1000; /* length of time series */ const size_t K = 11; /* window size */ double alpha = 0.1; /* trimmed mean parameter */ gsl_vector *x = gsl_vector_alloc(N); /* input vector */ gsl_vector *y = gsl_vector_alloc(N); /* filtered output vector for alpha1 */ gsl_rng *r = gsl_rng_alloc(gsl_rng_default); gsl_movstat_workspace *w = gsl_movstat_alloc(K); gsl_movstat_function F; size_t i; double sum = 0.0; /* generate input signal */ for (i = 0; i < N; ++i) { double ui = gsl_ran_gaussian(r, 1.0); double outlier = (gsl_rng_uniform(r) < 0.01) ? 10.0*GSL_SIGN(ui) : 0.0; sum += ui; gsl_vector_set(x, i, sum + outlier); } /* apply moving window function */ F.function = func; F.params = α gsl_movstat_apply(GSL_MOVSTAT_END_PADVALUE, &F, x, y, w); /* print results */ for (i = 0; i < N; ++i) { double xi = gsl_vector_get(x, i); double yi = gsl_vector_get(y, i); printf("%f %f\n", xi, yi); } gsl_vector_free(x); gsl_vector_free(y); gsl_rng_free(r); gsl_movstat_free(w); return 0; } gsl/doc/examples/nlfit2.txt0000644000175000017500000005144513536674414014265 0ustar eddedd-1.200000 -0.500000 37640.840000 -1.200000 -0.400000 33860.840000 -1.200000 -0.300000 30280.840000 -1.200000 -0.200000 26900.840000 -1.200000 -0.100000 23720.840000 -1.200000 -0.000000 20740.840000 -1.200000 0.100000 17960.840000 -1.200000 0.200000 15380.840000 -1.200000 0.300000 13000.840000 -1.200000 0.400000 10820.840000 -1.200000 0.500000 8840.840000 -1.200000 0.600000 7060.840000 -1.200000 0.700000 5480.840000 -1.200000 0.800000 4100.840000 -1.200000 0.900000 2920.840000 -1.200000 1.000000 1940.840000 -1.200000 1.100000 1160.840000 -1.200000 1.200000 580.840000 -1.200000 1.300000 200.840000 -1.200000 1.400000 20.840000 -1.200000 1.500000 40.840000 -1.200000 1.600000 260.840000 -1.200000 1.700000 680.840000 -1.200000 1.800000 1300.840000 -1.200000 1.900000 2120.840000 -1.200000 2.000000 3140.840000 -1.100000 -0.500000 29245.410000 -1.100000 -0.400000 25925.410000 -1.100000 -0.300000 22805.410000 -1.100000 -0.200000 19885.410000 -1.100000 -0.100000 17165.410000 -1.100000 -0.000000 14645.410000 -1.100000 0.100000 12325.410000 -1.100000 0.200000 10205.410000 -1.100000 0.300000 8285.410000 -1.100000 0.400000 6565.410000 -1.100000 0.500000 5045.410000 -1.100000 0.600000 3725.410000 -1.100000 0.700000 2605.410000 -1.100000 0.800000 1685.410000 -1.100000 0.900000 965.410000 -1.100000 1.000000 445.410000 -1.100000 1.100000 125.410000 -1.100000 1.200000 5.410000 -1.100000 1.300000 85.410000 -1.100000 1.400000 365.410000 -1.100000 1.500000 845.410000 -1.100000 1.600000 1525.410000 -1.100000 1.700000 2405.410000 -1.100000 1.800000 3485.410000 -1.100000 1.900000 4765.410000 -1.100000 2.000000 6245.410000 -1.000000 -0.500000 22504.000000 -1.000000 -0.400000 19604.000000 -1.000000 -0.300000 16904.000000 -1.000000 -0.200000 14404.000000 -1.000000 -0.100000 12104.000000 -1.000000 -0.000000 10004.000000 -1.000000 0.100000 8104.000000 -1.000000 0.200000 6404.000000 -1.000000 0.300000 4904.000000 -1.000000 0.400000 3604.000000 -1.000000 0.500000 2504.000000 -1.000000 0.600000 1604.000000 -1.000000 0.700000 904.000000 -1.000000 0.800000 404.000000 -1.000000 0.900000 104.000000 -1.000000 1.000000 4.000000 -1.000000 1.100000 104.000000 -1.000000 1.200000 404.000000 -1.000000 1.300000 904.000000 -1.000000 1.400000 1604.000000 -1.000000 1.500000 2504.000000 -1.000000 1.600000 3604.000000 -1.000000 1.700000 4904.000000 -1.000000 1.800000 6404.000000 -1.000000 1.900000 8104.000000 -1.000000 2.000000 10004.000000 -0.900000 -0.500000 17164.610000 -0.900000 -0.400000 14644.610000 -0.900000 -0.300000 12324.610000 -0.900000 -0.200000 10204.610000 -0.900000 -0.100000 8284.610000 -0.900000 -0.000000 6564.610000 -0.900000 0.100000 5044.610000 -0.900000 0.200000 3724.610000 -0.900000 0.300000 2604.610000 -0.900000 0.400000 1684.610000 -0.900000 0.500000 964.610000 -0.900000 0.600000 444.610000 -0.900000 0.700000 124.610000 -0.900000 0.800000 4.610000 -0.900000 0.900000 84.610000 -0.900000 1.000000 364.610000 -0.900000 1.100000 844.610000 -0.900000 1.200000 1524.610000 -0.900000 1.300000 2404.610000 -0.900000 1.400000 3484.610000 -0.900000 1.500000 4764.610000 -0.900000 1.600000 6244.610000 -0.900000 1.700000 7924.610000 -0.900000 1.800000 9804.610000 -0.900000 1.900000 11884.610000 -0.900000 2.000000 14164.610000 -0.800000 -0.500000 12999.240000 -0.800000 -0.400000 10819.240000 -0.800000 -0.300000 8839.240000 -0.800000 -0.200000 7059.240000 -0.800000 -0.100000 5479.240000 -0.800000 -0.000000 4099.240000 -0.800000 0.100000 2919.240000 -0.800000 0.200000 1939.240000 -0.800000 0.300000 1159.240000 -0.800000 0.400000 579.240000 -0.800000 0.500000 199.240000 -0.800000 0.600000 19.240000 -0.800000 0.700000 39.240000 -0.800000 0.800000 259.240000 -0.800000 0.900000 679.240000 -0.800000 1.000000 1299.240000 -0.800000 1.100000 2119.240000 -0.800000 1.200000 3139.240000 -0.800000 1.300000 4359.240000 -0.800000 1.400000 5779.240000 -0.800000 1.500000 7399.240000 -0.800000 1.600000 9219.240000 -0.800000 1.700000 11239.240000 -0.800000 1.800000 13459.240000 -0.800000 1.900000 15879.240000 -0.800000 2.000000 18499.240000 -0.700000 -0.500000 9803.890000 -0.700000 -0.400000 7923.890000 -0.700000 -0.300000 6243.890000 -0.700000 -0.200000 4763.890000 -0.700000 -0.100000 3483.890000 -0.700000 -0.000000 2403.890000 -0.700000 0.100000 1523.890000 -0.700000 0.200000 843.890000 -0.700000 0.300000 363.890000 -0.700000 0.400000 83.890000 -0.700000 0.500000 3.890000 -0.700000 0.600000 123.890000 -0.700000 0.700000 443.890000 -0.700000 0.800000 963.890000 -0.700000 0.900000 1683.890000 -0.700000 1.000000 2603.890000 -0.700000 1.100000 3723.890000 -0.700000 1.200000 5043.890000 -0.700000 1.300000 6563.890000 -0.700000 1.400000 8283.890000 -0.700000 1.500000 10203.890000 -0.700000 1.600000 12323.890000 -0.700000 1.700000 14643.890000 -0.700000 1.800000 17163.890000 -0.700000 1.900000 19883.890000 -0.700000 2.000000 22803.890000 -0.600000 -0.500000 7398.560000 -0.600000 -0.400000 5778.560000 -0.600000 -0.300000 4358.560000 -0.600000 -0.200000 3138.560000 -0.600000 -0.100000 2118.560000 -0.600000 -0.000000 1298.560000 -0.600000 0.100000 678.560000 -0.600000 0.200000 258.560000 -0.600000 0.300000 38.560000 -0.600000 0.400000 18.560000 -0.600000 0.500000 198.560000 -0.600000 0.600000 578.560000 -0.600000 0.700000 1158.560000 -0.600000 0.800000 1938.560000 -0.600000 0.900000 2918.560000 -0.600000 1.000000 4098.560000 -0.600000 1.100000 5478.560000 -0.600000 1.200000 7058.560000 -0.600000 1.300000 8838.560000 -0.600000 1.400000 10818.560000 -0.600000 1.500000 12998.560000 -0.600000 1.600000 15378.560000 -0.600000 1.700000 17958.560000 -0.600000 1.800000 20738.560000 -0.600000 1.900000 23718.560000 -0.600000 2.000000 26898.560000 -0.500000 -0.500000 5627.250000 -0.500000 -0.400000 4227.250000 -0.500000 -0.300000 3027.250000 -0.500000 -0.200000 2027.250000 -0.500000 -0.100000 1227.250000 -0.500000 -0.000000 627.250000 -0.500000 0.100000 227.250000 -0.500000 0.200000 27.250000 -0.500000 0.300000 27.250000 -0.500000 0.400000 227.250000 -0.500000 0.500000 627.250000 -0.500000 0.600000 1227.250000 -0.500000 0.700000 2027.250000 -0.500000 0.800000 3027.250000 -0.500000 0.900000 4227.250000 -0.500000 1.000000 5627.250000 -0.500000 1.100000 7227.250000 -0.500000 1.200000 9027.250000 -0.500000 1.300000 11027.250000 -0.500000 1.400000 13227.250000 -0.500000 1.500000 15627.250000 -0.500000 1.600000 18227.250000 -0.500000 1.700000 21027.250000 -0.500000 1.800000 24027.250000 -0.500000 1.900000 27227.250000 -0.500000 2.000000 30627.250000 -0.400000 -0.500000 4357.960000 -0.400000 -0.400000 3137.960000 -0.400000 -0.300000 2117.960000 -0.400000 -0.200000 1297.960000 -0.400000 -0.100000 677.960000 -0.400000 -0.000000 257.960000 -0.400000 0.100000 37.960000 -0.400000 0.200000 17.960000 -0.400000 0.300000 197.960000 -0.400000 0.400000 577.960000 -0.400000 0.500000 1157.960000 -0.400000 0.600000 1937.960000 -0.400000 0.700000 2917.960000 -0.400000 0.800000 4097.960000 -0.400000 0.900000 5477.960000 -0.400000 1.000000 7057.960000 -0.400000 1.100000 8837.960000 -0.400000 1.200000 10817.960000 -0.400000 1.300000 12997.960000 -0.400000 1.400000 15377.960000 -0.400000 1.500000 17957.960000 -0.400000 1.600000 20737.960000 -0.400000 1.700000 23717.960000 -0.400000 1.800000 26897.960000 -0.400000 1.900000 30277.960000 -0.400000 2.000000 33857.960000 -0.300000 -0.500000 3482.690000 -0.300000 -0.400000 2402.690000 -0.300000 -0.300000 1522.690000 -0.300000 -0.200000 842.690000 -0.300000 -0.100000 362.690000 -0.300000 -0.000000 82.690000 -0.300000 0.100000 2.690000 -0.300000 0.200000 122.690000 -0.300000 0.300000 442.690000 -0.300000 0.400000 962.690000 -0.300000 0.500000 1682.690000 -0.300000 0.600000 2602.690000 -0.300000 0.700000 3722.690000 -0.300000 0.800000 5042.690000 -0.300000 0.900000 6562.690000 -0.300000 1.000000 8282.690000 -0.300000 1.100000 10202.690000 -0.300000 1.200000 12322.690000 -0.300000 1.300000 14642.690000 -0.300000 1.400000 17162.690000 -0.300000 1.500000 19882.690000 -0.300000 1.600000 22802.690000 -0.300000 1.700000 25922.690000 -0.300000 1.800000 29242.690000 -0.300000 1.900000 32762.690000 -0.300000 2.000000 36482.690000 -0.200000 -0.500000 2917.440000 -0.200000 -0.400000 1937.440000 -0.200000 -0.300000 1157.440000 -0.200000 -0.200000 577.440000 -0.200000 -0.100000 197.440000 -0.200000 -0.000000 17.440000 -0.200000 0.100000 37.440000 -0.200000 0.200000 257.440000 -0.200000 0.300000 677.440000 -0.200000 0.400000 1297.440000 -0.200000 0.500000 2117.440000 -0.200000 0.600000 3137.440000 -0.200000 0.700000 4357.440000 -0.200000 0.800000 5777.440000 -0.200000 0.900000 7397.440000 -0.200000 1.000000 9217.440000 -0.200000 1.100000 11237.440000 -0.200000 1.200000 13457.440000 -0.200000 1.300000 15877.440000 -0.200000 1.400000 18497.440000 -0.200000 1.500000 21317.440000 -0.200000 1.600000 24337.440000 -0.200000 1.700000 27557.440000 -0.200000 1.800000 30977.440000 -0.200000 1.900000 34597.440000 -0.200000 2.000000 38417.440000 -0.100000 -0.500000 2602.210000 -0.100000 -0.400000 1682.210000 -0.100000 -0.300000 962.210000 -0.100000 -0.200000 442.210000 -0.100000 -0.100000 122.210000 -0.100000 -0.000000 2.210000 -0.100000 0.100000 82.210000 -0.100000 0.200000 362.210000 -0.100000 0.300000 842.210000 -0.100000 0.400000 1522.210000 -0.100000 0.500000 2402.210000 -0.100000 0.600000 3482.210000 -0.100000 0.700000 4762.210000 -0.100000 0.800000 6242.210000 -0.100000 0.900000 7922.210000 -0.100000 1.000000 9802.210000 -0.100000 1.100000 11882.210000 -0.100000 1.200000 14162.210000 -0.100000 1.300000 16642.210000 -0.100000 1.400000 19322.210000 -0.100000 1.500000 22202.210000 -0.100000 1.600000 25282.210000 -0.100000 1.700000 28562.210000 -0.100000 1.800000 32042.210000 -0.100000 1.900000 35722.210000 -0.100000 2.000000 39602.210000 -0.000000 -0.500000 2501.000000 -0.000000 -0.400000 1601.000000 -0.000000 -0.300000 901.000000 -0.000000 -0.200000 401.000000 -0.000000 -0.100000 101.000000 -0.000000 -0.000000 1.000000 -0.000000 0.100000 101.000000 -0.000000 0.200000 401.000000 -0.000000 0.300000 901.000000 -0.000000 0.400000 1601.000000 -0.000000 0.500000 2501.000000 -0.000000 0.600000 3601.000000 -0.000000 0.700000 4901.000000 -0.000000 0.800000 6401.000000 -0.000000 0.900000 8101.000000 -0.000000 1.000000 10001.000000 -0.000000 1.100000 12101.000000 -0.000000 1.200000 14401.000000 -0.000000 1.300000 16901.000000 -0.000000 1.400000 19601.000000 -0.000000 1.500000 22501.000000 -0.000000 1.600000 25601.000000 -0.000000 1.700000 28901.000000 -0.000000 1.800000 32401.000000 -0.000000 1.900000 36101.000000 -0.000000 2.000000 40001.000000 0.100000 -0.500000 2601.810000 0.100000 -0.400000 1681.810000 0.100000 -0.300000 961.810000 0.100000 -0.200000 441.810000 0.100000 -0.100000 121.810000 0.100000 -0.000000 1.810000 0.100000 0.100000 81.810000 0.100000 0.200000 361.810000 0.100000 0.300000 841.810000 0.100000 0.400000 1521.810000 0.100000 0.500000 2401.810000 0.100000 0.600000 3481.810000 0.100000 0.700000 4761.810000 0.100000 0.800000 6241.810000 0.100000 0.900000 7921.810000 0.100000 1.000000 9801.810000 0.100000 1.100000 11881.810000 0.100000 1.200000 14161.810000 0.100000 1.300000 16641.810000 0.100000 1.400000 19321.810000 0.100000 1.500000 22201.810000 0.100000 1.600000 25281.810000 0.100000 1.700000 28561.810000 0.100000 1.800000 32041.810000 0.100000 1.900000 35721.810000 0.100000 2.000000 39601.810000 0.200000 -0.500000 2916.640000 0.200000 -0.400000 1936.640000 0.200000 -0.300000 1156.640000 0.200000 -0.200000 576.640000 0.200000 -0.100000 196.640000 0.200000 -0.000000 16.640000 0.200000 0.100000 36.640000 0.200000 0.200000 256.640000 0.200000 0.300000 676.640000 0.200000 0.400000 1296.640000 0.200000 0.500000 2116.640000 0.200000 0.600000 3136.640000 0.200000 0.700000 4356.640000 0.200000 0.800000 5776.640000 0.200000 0.900000 7396.640000 0.200000 1.000000 9216.640000 0.200000 1.100000 11236.640000 0.200000 1.200000 13456.640000 0.200000 1.300000 15876.640000 0.200000 1.400000 18496.640000 0.200000 1.500000 21316.640000 0.200000 1.600000 24336.640000 0.200000 1.700000 27556.640000 0.200000 1.800000 30976.640000 0.200000 1.900000 34596.640000 0.200000 2.000000 38416.640000 0.300000 -0.500000 3481.490000 0.300000 -0.400000 2401.490000 0.300000 -0.300000 1521.490000 0.300000 -0.200000 841.490000 0.300000 -0.100000 361.490000 0.300000 -0.000000 81.490000 0.300000 0.100000 1.490000 0.300000 0.200000 121.490000 0.300000 0.300000 441.490000 0.300000 0.400000 961.490000 0.300000 0.500000 1681.490000 0.300000 0.600000 2601.490000 0.300000 0.700000 3721.490000 0.300000 0.800000 5041.490000 0.300000 0.900000 6561.490000 0.300000 1.000000 8281.490000 0.300000 1.100000 10201.490000 0.300000 1.200000 12321.490000 0.300000 1.300000 14641.490000 0.300000 1.400000 17161.490000 0.300000 1.500000 19881.490000 0.300000 1.600000 22801.490000 0.300000 1.700000 25921.490000 0.300000 1.800000 29241.490000 0.300000 1.900000 32761.490000 0.300000 2.000000 36481.490000 0.400000 -0.500000 4356.360000 0.400000 -0.400000 3136.360000 0.400000 -0.300000 2116.360000 0.400000 -0.200000 1296.360000 0.400000 -0.100000 676.360000 0.400000 -0.000000 256.360000 0.400000 0.100000 36.360000 0.400000 0.200000 16.360000 0.400000 0.300000 196.360000 0.400000 0.400000 576.360000 0.400000 0.500000 1156.360000 0.400000 0.600000 1936.360000 0.400000 0.700000 2916.360000 0.400000 0.800000 4096.360000 0.400000 0.900000 5476.360000 0.400000 1.000000 7056.360000 0.400000 1.100000 8836.360000 0.400000 1.200000 10816.360000 0.400000 1.300000 12996.360000 0.400000 1.400000 15376.360000 0.400000 1.500000 17956.360000 0.400000 1.600000 20736.360000 0.400000 1.700000 23716.360000 0.400000 1.800000 26896.360000 0.400000 1.900000 30276.360000 0.400000 2.000000 33856.360000 0.500000 -0.500000 5625.250000 0.500000 -0.400000 4225.250000 0.500000 -0.300000 3025.250000 0.500000 -0.200000 2025.250000 0.500000 -0.100000 1225.250000 0.500000 -0.000000 625.250000 0.500000 0.100000 225.250000 0.500000 0.200000 25.250000 0.500000 0.300000 25.250000 0.500000 0.400000 225.250000 0.500000 0.500000 625.250000 0.500000 0.600000 1225.250000 0.500000 0.700000 2025.250000 0.500000 0.800000 3025.250000 0.500000 0.900000 4225.250000 0.500000 1.000000 5625.250000 0.500000 1.100000 7225.250000 0.500000 1.200000 9025.250000 0.500000 1.300000 11025.250000 0.500000 1.400000 13225.250000 0.500000 1.500000 15625.250000 0.500000 1.600000 18225.250000 0.500000 1.700000 21025.250000 0.500000 1.800000 24025.250000 0.500000 1.900000 27225.250000 0.500000 2.000000 30625.250000 0.600000 -0.500000 7396.160000 0.600000 -0.400000 5776.160000 0.600000 -0.300000 4356.160000 0.600000 -0.200000 3136.160000 0.600000 -0.100000 2116.160000 0.600000 -0.000000 1296.160000 0.600000 0.100000 676.160000 0.600000 0.200000 256.160000 0.600000 0.300000 36.160000 0.600000 0.400000 16.160000 0.600000 0.500000 196.160000 0.600000 0.600000 576.160000 0.600000 0.700000 1156.160000 0.600000 0.800000 1936.160000 0.600000 0.900000 2916.160000 0.600000 1.000000 4096.160000 0.600000 1.100000 5476.160000 0.600000 1.200000 7056.160000 0.600000 1.300000 8836.160000 0.600000 1.400000 10816.160000 0.600000 1.500000 12996.160000 0.600000 1.600000 15376.160000 0.600000 1.700000 17956.160000 0.600000 1.800000 20736.160000 0.600000 1.900000 23716.160000 0.600000 2.000000 26896.160000 0.700000 -0.500000 9801.090000 0.700000 -0.400000 7921.090000 0.700000 -0.300000 6241.090000 0.700000 -0.200000 4761.090000 0.700000 -0.100000 3481.090000 0.700000 -0.000000 2401.090000 0.700000 0.100000 1521.090000 0.700000 0.200000 841.090000 0.700000 0.300000 361.090000 0.700000 0.400000 81.090000 0.700000 0.500000 1.090000 0.700000 0.600000 121.090000 0.700000 0.700000 441.090000 0.700000 0.800000 961.090000 0.700000 0.900000 1681.090000 0.700000 1.000000 2601.090000 0.700000 1.100000 3721.090000 0.700000 1.200000 5041.090000 0.700000 1.300000 6561.090000 0.700000 1.400000 8281.090000 0.700000 1.500000 10201.090000 0.700000 1.600000 12321.090000 0.700000 1.700000 14641.090000 0.700000 1.800000 17161.090000 0.700000 1.900000 19881.090000 0.700000 2.000000 22801.090000 0.800000 -0.500000 12996.040000 0.800000 -0.400000 10816.040000 0.800000 -0.300000 8836.040000 0.800000 -0.200000 7056.040000 0.800000 -0.100000 5476.040000 0.800000 -0.000000 4096.040000 0.800000 0.100000 2916.040000 0.800000 0.200000 1936.040000 0.800000 0.300000 1156.040000 0.800000 0.400000 576.040000 0.800000 0.500000 196.040000 0.800000 0.600000 16.040000 0.800000 0.700000 36.040000 0.800000 0.800000 256.040000 0.800000 0.900000 676.040000 0.800000 1.000000 1296.040000 0.800000 1.100000 2116.040000 0.800000 1.200000 3136.040000 0.800000 1.300000 4356.040000 0.800000 1.400000 5776.040000 0.800000 1.500000 7396.040000 0.800000 1.600000 9216.040000 0.800000 1.700000 11236.040000 0.800000 1.800000 13456.040000 0.800000 1.900000 15876.040000 0.800000 2.000000 18496.040000 0.900000 -0.500000 17161.010000 0.900000 -0.400000 14641.010000 0.900000 -0.300000 12321.010000 0.900000 -0.200000 10201.010000 0.900000 -0.100000 8281.010000 0.900000 -0.000000 6561.010000 0.900000 0.100000 5041.010000 0.900000 0.200000 3721.010000 0.900000 0.300000 2601.010000 0.900000 0.400000 1681.010000 0.900000 0.500000 961.010000 0.900000 0.600000 441.010000 0.900000 0.700000 121.010000 0.900000 0.800000 1.010000 0.900000 0.900000 81.010000 0.900000 1.000000 361.010000 0.900000 1.100000 841.010000 0.900000 1.200000 1521.010000 0.900000 1.300000 2401.010000 0.900000 1.400000 3481.010000 0.900000 1.500000 4761.010000 0.900000 1.600000 6241.010000 0.900000 1.700000 7921.010000 0.900000 1.800000 9801.010000 0.900000 1.900000 11881.010000 0.900000 2.000000 14161.010000 1.000000 -0.500000 22500.000000 1.000000 -0.400000 19600.000000 1.000000 -0.300000 16900.000000 1.000000 -0.200000 14400.000000 1.000000 -0.100000 12100.000000 1.000000 -0.000000 10000.000000 1.000000 0.100000 8100.000000 1.000000 0.200000 6400.000000 1.000000 0.300000 4900.000000 1.000000 0.400000 3600.000000 1.000000 0.500000 2500.000000 1.000000 0.600000 1600.000000 1.000000 0.700000 900.000000 1.000000 0.800000 400.000000 1.000000 0.900000 100.000000 1.000000 1.000000 0.000000 1.000000 1.100000 100.000000 1.000000 1.200000 400.000000 1.000000 1.300000 900.000000 1.000000 1.400000 1600.000000 1.000000 1.500000 2500.000000 1.000000 1.600000 3600.000000 1.000000 1.700000 4900.000000 1.000000 1.800000 6400.000000 1.000000 1.900000 8100.000000 1.000000 2.000000 10000.000000 1.100000 -0.500000 29241.010000 1.100000 -0.400000 25921.010000 1.100000 -0.300000 22801.010000 1.100000 -0.200000 19881.010000 1.100000 -0.100000 17161.010000 1.100000 -0.000000 14641.010000 1.100000 0.100000 12321.010000 1.100000 0.200000 10201.010000 1.100000 0.300000 8281.010000 1.100000 0.400000 6561.010000 1.100000 0.500000 5041.010000 1.100000 0.600000 3721.010000 1.100000 0.700000 2601.010000 1.100000 0.800000 1681.010000 1.100000 0.900000 961.010000 1.100000 1.000000 441.010000 1.100000 1.100000 121.010000 1.100000 1.200000 1.010000 1.100000 1.300000 81.010000 1.100000 1.400000 361.010000 1.100000 1.500000 841.010000 1.100000 1.600000 1521.010000 1.100000 1.700000 2401.010000 1.100000 1.800000 3481.010000 1.100000 1.900000 4761.010000 1.100000 2.000000 6241.010000 1.200000 -0.500000 37636.040000 1.200000 -0.400000 33856.040000 1.200000 -0.300000 30276.040000 1.200000 -0.200000 26896.040000 1.200000 -0.100000 23716.040000 1.200000 -0.000000 20736.040000 1.200000 0.100000 17956.040000 1.200000 0.200000 15376.040000 1.200000 0.300000 12996.040000 1.200000 0.400000 10816.040000 1.200000 0.500000 8836.040000 1.200000 0.600000 7056.040000 1.200000 0.700000 5476.040000 1.200000 0.800000 4096.040000 1.200000 0.900000 2916.040000 1.200000 1.000000 1936.040000 1.200000 1.100000 1156.040000 1.200000 1.200000 576.040000 1.200000 1.300000 196.040000 1.200000 1.400000 16.040000 1.200000 1.500000 36.040000 1.200000 1.600000 256.040000 1.200000 1.700000 676.040000 1.200000 1.800000 1296.040000 1.200000 1.900000 2116.040000 1.200000 2.000000 3136.040000 -0.500000 1.750000 -1.142419 0.893275 -1.002809 0.986100 -0.918244 0.836060 -0.843637 0.706196 -0.767030 0.582503 -0.689381 0.469250 -0.611125 0.367380 -0.532857 0.277838 -0.455124 0.201118 -0.378459 0.137373 -0.303367 0.086408 -0.230328 0.047728 -0.159798 0.020569 -0.092192 0.003934 -0.027873 -0.003358 0.032893 -0.002611 0.089988 0.004836 0.143479 0.017721 0.193621 0.034970 0.240795 0.055751 0.285430 0.079471 0.327928 0.105723 0.368632 0.134225 0.407805 0.164762 0.445640 0.197155 0.482269 0.231234 0.517778 0.266826 0.552221 0.303754 0.585627 0.341835 0.618008 0.380878 0.649364 0.420684 0.679689 0.461051 0.708966 0.501770 0.737174 0.542625 0.764288 0.583396 0.790274 0.623854 0.815097 0.663764 0.838715 0.702882 0.861079 0.740954 0.882134 0.777714 0.901817 0.812884 0.920054 0.846166 0.936762 0.877243 0.951840 0.905772 0.965169 0.931373 0.976604 0.953625 0.985967 0.972043 0.993042 0.986082 0.997603 0.995191 0.999638 0.999272 0.999980 0.999959 1.000000 0.999999 1.000000 1.000000 -0.500000 1.750000 -0.946006 1.109349 -0.921962 0.850093 -0.691178 0.472692 -0.415856 0.165195 -0.135440 0.012083 0.128552 0.014498 0.393660 0.156838 0.667141 0.449487 0.796457 0.635023 0.923422 0.853111 0.985892 0.972006 0.998922 0.997845 0.999970 0.999941 1.000000 0.999999 1.000000 1.000000 gsl/doc/examples/movstat2.txt0000644000175000017500000020351413536674414014642 0ustar eddedd0 0.133919 1.000000 0.634780 0.572247 0.808577 0.746831 0.911713 1 0.594129 1.000000 0.761385 0.586651 0.842338 0.851958 0.932072 2 1.674408 1.000000 0.634780 0.565628 0.805441 0.786105 0.911598 3 -1.286970 1.000000 0.624178 0.616265 0.818638 0.793885 0.913578 4 -1.277502 1.000000 0.732107 0.607673 0.845620 0.853599 0.904846 5 -1.339936 1.000000 0.901014 0.815512 0.899332 0.892324 0.915826 6 -0.039091 1.000000 0.914039 0.882875 0.973002 0.931867 0.909640 7 0.114046 1.000000 1.004368 0.939272 0.955987 0.962021 0.936883 8 -0.017648 1.000000 0.938813 0.913400 0.994361 0.989223 0.948653 9 -0.572385 1.000000 1.004368 0.948380 0.977622 0.975446 0.940535 10 0.181709 1.000000 1.013403 0.967178 1.006853 0.996549 0.932949 11 1.385318 1.000000 1.041662 0.991152 1.002304 0.976706 0.933625 12 -0.638032 1.000000 1.006429 1.041661 1.007452 0.991973 0.929606 13 -1.465648 1.000000 1.097440 1.033083 1.002304 0.982959 0.931635 14 -0.827762 1.000000 1.006429 1.012117 0.991703 0.982032 0.919095 15 -0.246354 1.000000 1.009916 0.991152 0.924432 0.966532 0.909800 16 -0.289493 1.000000 0.937596 0.970187 0.923188 0.958141 0.897614 17 -0.224180 1.000000 0.972012 0.992435 0.924432 0.980047 0.956973 18 0.064615 1.000000 1.006429 0.992038 0.945551 1.001505 0.950711 19 1.706591 1.000000 1.009916 0.967227 0.940569 0.975836 0.938556 20 -0.144233 1.000000 1.013403 0.942416 0.961679 0.974183 0.927016 21 1.182820 1.000000 1.014380 0.970187 0.976290 1.003298 0.943637 22 -0.260697 1.000000 0.937596 0.942416 0.919517 0.967429 0.937187 23 -1.045894 1.000000 0.894872 0.844759 0.844112 0.910789 0.891896 24 0.577419 1.000000 0.751925 0.826354 0.833473 0.862953 0.875977 25 1.088576 1.000000 0.715114 0.775585 0.819886 0.829490 0.859125 26 0.715002 1.000000 0.792076 0.734255 0.813865 0.798872 0.840971 27 -1.515063 1.000000 0.792076 0.734255 0.813865 0.798872 0.840949 28 1.182771 1.000000 0.828887 0.824578 0.827717 0.847499 0.849113 29 -0.706517 1.000000 0.894872 0.873242 0.831686 0.872197 0.863533 30 -0.731346 1.000000 0.875302 0.901013 0.843749 0.922323 0.887804 31 -1.034345 1.000000 0.875302 0.901013 0.843749 0.940883 0.888084 32 -0.903006 1.000000 0.894872 0.924011 0.831686 0.915578 0.864894 33 0.889186 1.000000 0.937596 0.942416 0.844140 0.984041 2.751313 34 -0.375367 1.000000 0.935885 0.951782 0.909712 0.979339 2.764234 35 0.408219 1.000000 0.870455 0.828989 0.887733 0.953368 2.764266 36 -0.273845 1.000000 0.962290 0.909833 0.947194 1.003298 2.785699 37 -2.328102 1.000000 0.989562 0.909833 0.940293 1.007373 2.787434 38 0.539956 1.000000 1.022690 0.909833 0.970569 1.027996 2.791884 39 -0.039068 1.000000 1.047520 1.032626 0.996669 1.055270 2.794225 40 0.013851 1.000000 1.026373 1.018540 0.955638 1.007373 2.777936 41 1.028263 1.000000 1.047520 1.036945 0.987347 1.042200 2.781737 42 -0.237378 1.000000 0.999101 0.970187 0.975734 1.007373 2.770074 43 -0.172270 1.000000 1.074792 1.023686 0.993536 1.022731 2.771019 44 -0.540872 1.000000 0.999101 0.970187 0.975734 1.005811 2.769515 45 -0.490678 1.000000 0.939346 0.995915 0.992322 1.000660 2.764966 46 0.418112 1.000000 0.986861 0.934728 1.061442 1.022731 2.759020 47 -0.057463 1.000000 0.986861 0.934728 1.061442 1.033751 2.762056 48 0.686476 1.000000 0.939346 0.995915 0.992322 1.022731 2.770365 49 -1.084243 1.000000 0.939346 0.986549 0.978580 1.005811 2.762342 50 1.316748 1.000000 0.999101 0.986549 0.962601 1.007373 2.763825 51 0.220587 1.000000 0.858462 0.986549 0.947194 1.003500 2.765904 52 -0.803515 1.000000 0.851570 0.855353 0.906389 0.980266 2.768981 53 -16.826706 1.000000 0.822434 0.801218 0.895637 0.955649 2.770614 54 1.496198 1.000000 0.780004 0.791852 0.884705 0.943552 2.766481 55 -0.003318 1.000000 0.780004 0.791852 0.841112 0.934656 2.767213 56 1.800935 1.000000 0.822434 0.801218 0.884705 0.996285 2.793084 57 0.272243 1.000000 0.851705 0.824274 0.991485 1.040969 2.825814 58 0.667474 1.000000 0.851705 0.824274 0.963355 1.015499 2.811598 59 -1.167809 1.000000 0.826116 0.824274 0.895637 1.000660 2.809012 60 0.455081 1.000000 0.826116 0.824274 0.917388 1.005811 2.808804 61 -1.353985 1.000000 0.840365 0.824274 0.963639 1.016996 2.808428 62 -0.613899 1.000000 0.848375 0.845987 1.001663 1.015499 2.802740 63 -0.968935 1.000000 0.916455 0.878409 1.001663 1.016996 2.807617 64 -0.462268 1.000000 0.893827 0.878409 0.963639 1.016996 2.808621 65 -0.805850 1.000000 0.893827 1.018971 1.001663 1.005811 2.810159 66 -1.669557 1.000000 0.835189 1.018971 0.919256 0.981250 2.812080 67 0.955392 1.000000 0.953499 1.090444 1.011756 1.020490 2.821579 68 1.155739 1.000000 0.953499 1.090444 1.011756 1.035414 2.821388 69 0.527321 1.000000 0.900067 1.018971 1.011756 1.023422 2.817582 70 0.112199 1.000000 0.835189 0.878409 0.998036 0.993358 2.816845 71 0.249406 1.000000 0.835189 0.878409 0.919256 0.981445 2.812003 72 0.571058 1.000000 0.851705 0.878409 0.986470 0.997608 2.810899 73 0.369879 1.000000 0.851705 0.878409 0.986470 1.003898 2.812401 74 0.463358 1.000000 0.835189 0.837477 0.974701 0.986197 0.969756 75 0.004240 1.000000 0.851705 0.878409 0.964608 0.964104 0.954479 76 2.149705 1.000000 0.835189 0.879648 0.974701 0.964104 0.957241 77 2.393308 1.000000 0.823252 0.878409 0.935121 0.915411 0.919993 78 -1.280724 1.000000 0.823252 0.878409 0.935121 0.921353 0.919612 79 -0.001162 1.000000 0.813205 0.869530 0.933139 0.915411 0.920612 80 -0.382469 1.000000 0.733395 0.845987 0.945214 0.880601 0.903238 81 -0.366381 1.000000 0.813205 0.869530 0.933139 0.905382 0.913601 82 -1.048282 1.000000 0.733395 0.845987 0.961340 0.862525 0.888996 83 0.719285 1.000000 0.811337 0.766004 0.961340 0.906725 0.908871 84 0.180858 1.000000 0.811337 0.766004 0.961340 0.887721 0.900477 85 -0.945417 1.000000 0.806927 0.706849 0.856607 0.874078 0.895459 86 0.371411 1.000000 0.824981 0.696163 0.894144 0.880746 0.906899 87 1.336323 1.000000 0.824981 0.696163 0.868543 0.862525 0.879876 88 -0.363406 1.000000 0.806927 0.706849 0.961340 0.880746 0.962966 89 0.024232 1.000000 0.806927 0.706849 0.986470 0.896215 0.989880 90 0.407580 1.000000 0.709543 0.706849 0.974701 0.897554 0.989059 91 0.924530 1.000000 0.811337 0.708089 1.021867 0.986197 1.013604 92 -0.335992 1.000000 0.947584 0.902700 1.033113 0.993358 1.022123 93 -1.065908 1.000000 0.993182 0.903192 1.031373 0.981805 1.029552 94 1.315714 1.000000 0.976282 0.903192 1.031373 0.954886 1.028894 95 -0.723670 1.000000 0.976282 0.903192 1.039481 0.989289 1.029767 96 0.572730 1.000000 1.030487 1.011833 1.040474 1.048340 1.038201 97 -0.311810 1.000000 0.993182 0.903192 1.025245 0.948526 0.987965 98 0.193035 1.000000 0.992199 0.889324 0.980151 0.874459 0.917902 99 -0.645659 1.000000 0.730301 0.888833 0.995759 0.845335 0.894647 100 0.489070 1.000000 0.730301 0.888833 0.995759 0.860992 0.895874 101 -0.912479 1.000000 0.850541 0.888833 0.995759 0.862411 0.897471 102 0.504810 1.000000 0.850541 0.888833 0.995759 0.874459 0.898461 103 1.493974 1.000000 0.921514 0.790420 0.976565 0.880601 0.895020 104 -0.644996 1.000000 0.999852 0.790420 0.988788 0.895750 0.899506 105 0.080149 1.000000 0.850541 0.790420 0.988788 0.897169 0.900195 106 1.513680 1.000000 0.772203 0.751251 0.976565 0.887574 0.887050 107 -1.056364 1.000000 0.772203 0.751251 0.931100 0.880746 0.886311 108 -2.415729 1.000000 0.785469 0.776552 0.932787 0.896344 0.908634 109 1.913067 1.000000 0.850541 0.790420 0.928780 0.898312 0.911728 110 -0.134006 1.000000 0.867004 0.790420 0.968049 0.898684 0.912953 111 1.560086 1.000000 0.948325 0.902700 0.997878 0.957183 0.971343 112 -0.673723 1.000000 0.830105 0.888833 0.988788 0.908120 0.961586 113 -0.757723 1.000000 0.948325 0.902700 1.024635 1.018413 1.011598 114 0.012833 1.000000 0.948325 0.902700 1.024635 1.008893 1.004640 115 0.554023 1.000000 0.830105 0.888833 0.974090 0.948227 0.984805 116 0.969076 1.000000 0.850541 0.790420 0.993825 0.974084 0.994552 117 0.375053 1.000000 0.948325 0.899432 0.997878 1.008893 1.007153 118 0.321502 1.000000 1.075102 1.011712 1.159322 1.033102 1.014558 119 0.412501 1.000000 0.976282 1.011712 1.084628 1.018413 1.016412 120 -0.226119 1.000000 1.075102 1.019061 1.087173 1.033102 1.017086 121 -0.493532 1.000000 1.017889 1.019061 1.084628 1.013358 1.019450 122 -0.440694 1.000000 0.975298 1.005614 1.024635 0.992813 1.007760 123 1.137429 1.000000 0.983407 1.019061 1.084628 1.044047 1.054007 124 0.948226 1.000000 0.940815 0.899432 0.932787 0.989613 1.028517 125 -0.098573 1.000000 0.983407 0.899432 1.041084 1.039852 1.070832 126 -0.340550 1.000000 0.977257 1.033008 1.093148 1.125720 1.094564 127 0.091253 1.000000 0.953264 0.972397 1.093148 1.111274 1.102403 128 -1.673461 1.000000 0.953264 0.972397 1.118139 1.103869 1.120081 129 0.719785 1.000000 0.932019 0.910128 1.084628 1.033102 1.059777 130 0.398546 1.000000 0.891350 0.850800 0.993825 0.989613 1.014061 131 -2.058964 1.000000 0.868815 0.850800 1.007764 1.002214 1.016375 132 -0.221386 1.000000 0.868815 0.850800 1.007764 0.988137 1.006077 133 2.059246 1.000000 0.868815 0.850800 1.007764 0.948213 1.003151 134 -0.783959 1.000000 0.898645 0.855254 1.084628 0.949440 1.015792 135 -0.010426 1.000000 0.960558 0.978133 1.109619 1.002214 1.030059 136 1.246201 1.000000 0.960558 1.018730 1.118139 0.988137 1.034131 137 1.208516 1.000000 0.960558 0.978133 1.109619 0.968823 1.024990 138 -0.776972 1.000000 0.969790 1.018730 1.118139 0.963562 1.036711 139 -0.314893 1.000000 0.889504 1.113693 1.147632 0.961287 1.039220 140 0.881162 1.000000 1.056337 1.192725 1.213913 0.994310 1.073273 141 -0.475392 1.000000 0.970917 1.192725 1.191793 1.000106 1.073040 142 -0.187461 1.000000 1.258537 1.198219 1.213913 1.071636 1.086984 143 -1.914903 1.000000 1.258537 1.198219 1.213913 1.071636 1.086002 144 0.075505 1.000000 1.345084 1.150143 1.214410 1.086597 1.103572 145 -1.990580 1.000000 1.057369 1.109546 1.067205 1.063068 1.088914 146 -1.470919 1.000000 1.057369 1.109546 1.153104 1.090701 1.091951 147 -1.902030 1.000000 1.345084 1.150143 1.213913 1.128318 1.110274 148 -1.693956 1.000000 1.345084 1.150143 1.213913 1.125720 1.109612 149 -0.129086 1.000000 0.970917 1.119186 1.293248 1.106648 1.085023 150 -0.735212 1.000000 1.056337 1.150143 1.303892 1.171344 2.651855 151 -0.599698 1.000000 1.057369 1.150143 1.195968 1.169232 2.648025 152 1.300405 1.000000 0.884370 1.119186 1.109619 1.111274 2.638670 153 -0.299204 1.000000 1.056337 1.150143 1.178096 1.169856 2.645304 154 1.035069 1.000000 0.884370 0.965173 1.109619 1.096684 2.614401 155 0.975320 1.000000 0.925674 0.934216 1.069006 1.030642 2.614966 156 0.774549 1.000000 1.056337 0.965173 1.118139 1.105160 2.615599 157 0.525028 1.000000 0.874011 0.824111 1.069006 1.096684 2.603500 158 0.992704 1.000000 0.811066 0.820110 0.979526 1.070511 2.587245 159 -0.727802 1.000000 0.801111 0.789154 1.059970 1.052355 2.591621 160 1.671102 1.000000 0.863761 0.793154 1.173043 1.122667 2.642193 161 -0.090324 1.000000 0.852774 0.789154 1.059970 1.096684 2.633997 162 -1.260789 1.000000 0.887658 0.793154 1.154410 1.100049 2.638234 163 -0.275838 1.000000 0.887658 0.793154 1.154410 1.098172 2.637971 164 -1.911296 1.000000 0.919529 0.827078 1.154410 1.111274 2.651606 165 -0.188156 1.000000 0.887658 0.827078 1.154410 1.122667 2.650210 166 0.329342 1.000000 0.919529 0.917858 1.154410 1.117701 2.651070 167 1.110349 1.000000 0.923396 1.035263 1.155203 1.133913 2.677685 168 -0.107589 1.000000 1.029720 1.167561 1.155203 1.118189 2.674187 169 0.325378 1.000000 1.029720 1.167561 1.154410 1.098172 2.665319 170 -15.647560 1.000000 1.029720 1.167561 1.154410 1.098172 2.665329 171 -0.713145 1.000000 1.102100 1.120465 1.155203 1.106648 2.670217 172 0.141477 1.000000 1.131935 0.957238 1.155203 1.090701 2.669896 173 -1.717268 1.000000 0.968429 0.956236 1.093226 1.042184 2.659742 174 -0.018610 1.000000 1.131935 0.971221 1.155203 1.090701 2.671078 175 -0.152614 1.000000 1.102100 1.105480 1.154410 1.106773 2.671900 176 -1.235812 1.000000 0.894589 0.971634 1.049746 1.059605 2.665282 177 0.334738 1.000000 0.894589 0.880272 1.049150 1.059605 2.664174 178 -0.622001 1.000000 0.889371 0.880272 0.970274 1.021298 2.661407 179 0.324728 1.000000 0.788265 0.748648 0.970274 1.029574 2.663541 180 2.677702 1.000000 0.788265 0.748648 1.049150 1.080184 2.703795 181 0.031194 1.000000 0.788265 0.748648 0.980272 1.030642 2.688135 182 0.387911 1.000000 0.897799 0.816213 1.050539 1.118189 2.765993 183 -0.273757 1.000000 0.897799 0.816213 1.055372 1.135571 2.836766 184 1.696227 1.000000 0.998434 0.945426 1.160036 1.247624 2.858211 185 -0.536167 1.000000 0.993216 0.943901 1.160036 1.231895 2.869043 186 1.165979 1.000000 1.103559 1.169109 1.266341 1.326080 2.913577 187 2.272367 1.000000 1.137498 1.279095 1.294253 1.432352 3.072539 188 1.103474 1.000000 1.137498 1.279095 1.294253 1.496162 3.342283 189 -0.736036 1.000000 1.301004 1.325430 1.498434 1.663867 3.379302 190 -0.315977 1.000000 1.589765 1.392995 1.679350 1.876527 3.410838 191 0.955105 1.000000 1.589765 1.392995 1.679350 1.840987 2.490017 192 0.173718 1.000000 1.518929 1.484734 1.755566 2.023496 2.566998 193 -0.334839 1.000000 1.878466 1.569269 1.869889 2.237125 2.970150 194 1.380878 1.000000 1.878466 1.569269 2.062122 2.258532 3.049667 195 -1.482407 1.000000 2.081312 1.715055 2.190484 2.420870 3.218398 196 -0.022129 1.000000 2.081312 1.715055 2.257412 2.425033 3.220501 197 0.651304 1.000000 2.063892 1.715055 2.257412 2.425033 3.220319 198 -0.118530 1.000000 2.081312 1.764171 2.338202 2.596382 3.260310 199 -1.750304 1.000000 2.033388 1.803037 2.581295 2.773204 3.320026 200 -3.323619 5.000000 2.381455 2.230130 2.907379 3.026913 3.425691 201 0.562217 5.000000 2.381455 2.230130 2.907379 3.075772 3.455961 202 -4.614241 5.000000 2.772937 2.587673 3.169419 3.364469 3.652797 203 -4.612867 5.000000 2.455375 2.713210 3.375916 3.458025 3.662293 204 1.643797 5.000000 2.890957 2.713210 3.375916 3.458025 3.661587 205 1.577542 5.000000 2.852559 2.783414 3.491394 3.616436 3.868408 206 2.775860 5.000000 3.281952 3.156654 3.661902 3.774702 3.968982 207 5.865571 5.000000 3.428549 3.393494 3.811989 4.114441 4.232382 208 8.234119 5.000000 3.428549 3.393494 3.767490 3.998191 4.222691 209 3.095353 5.000000 3.428549 3.393494 3.767490 3.998191 4.221204 210 -3.013602 5.000000 3.755633 3.592086 3.918902 4.372677 4.725675 211 -5.291502 5.000000 3.755402 3.592086 4.122688 4.576830 4.743418 212 4.263975 5.000000 4.176478 4.528569 4.193060 4.794995 4.796623 213 -9.292755 5.000000 4.176247 4.528569 4.193060 4.871193 4.811104 214 -4.697274 5.000000 4.162337 4.528569 4.242076 4.794995 4.828620 215 6.553692 5.000000 5.231606 4.738991 4.582639 5.000304 4.899242 216 -0.662860 5.000000 5.231606 4.738991 4.571658 4.945563 4.891604 217 -1.218356 5.000000 5.269586 5.273625 4.760161 4.945563 4.929741 218 3.379209 5.000000 5.315659 5.273625 4.800042 5.021326 4.936126 219 4.311424 5.000000 4.987390 5.351584 5.006539 5.000304 4.990401 220 5.717484 5.000000 4.219000 5.351584 4.864391 4.879123 4.982976 221 4.100420 5.000000 4.145204 4.146305 4.864391 4.794995 4.945355 222 -7.098843 5.000000 4.243435 4.146305 4.816507 4.782220 4.951947 223 -1.387704 5.000000 3.918867 4.100949 4.755502 4.610035 4.915036 224 0.571755 5.000000 3.857478 4.064052 4.302735 4.190221 4.835901 225 -7.875097 5.000000 3.918867 4.100949 4.688771 4.589972 4.888980 226 5.778979 5.000000 4.623493 4.189589 4.787967 4.713386 5.070206 227 9.640863 5.000000 4.681058 4.224764 5.069979 5.021326 5.261907 228 0.900031 5.000000 5.057739 5.394868 5.320686 5.246220 5.527964 229 0.562373 5.000000 5.387654 5.351584 4.970126 5.021326 5.387885 230 -13.260275 5.000000 5.387654 5.351584 4.919430 4.996126 5.369747 231 2.718149 5.000000 5.301086 4.260697 4.919430 4.966821 5.353048 232 -4.529446 5.000000 5.145167 4.146305 4.800042 4.652996 5.281081 233 2.387767 5.000000 4.162337 4.068346 4.603683 4.644887 5.246485 234 2.721147 5.000000 4.075898 3.979706 4.468489 4.520211 5.043787 235 5.555074 5.000000 3.780652 3.979706 4.442412 4.399273 4.990713 236 0.200443 5.000000 3.694213 3.542148 4.550858 4.405824 5.008626 237 4.205586 5.000000 3.694213 3.542148 4.550858 4.405824 5.007600 238 -1.268130 5.000000 3.694213 3.542148 4.550858 4.385338 5.004178 239 5.057468 5.000000 3.694213 4.068346 4.603683 4.463309 5.063598 240 1.938970 5.000000 3.694213 4.068346 4.603683 4.596383 5.129349 241 0.024430 5.000000 3.694213 4.068346 4.603683 4.589972 5.109072 242 2.260724 5.000000 3.200603 3.542148 4.448770 4.500147 5.079116 243 4.582206 5.000000 3.200603 3.542148 4.448770 4.534378 5.258559 244 0.630058 5.000000 3.694213 4.057666 4.679094 4.628659 5.349815 245 -3.644809 5.000000 4.193120 4.260697 4.883738 5.002537 5.404640 246 -7.761540 5.000000 3.780652 4.057666 4.636933 4.644887 5.249803 247 9.875363 5.000000 3.680303 3.656540 4.636933 4.893271 5.311000 248 -11.306466 5.000000 3.483934 3.160282 4.170773 4.598910 5.089286 249 -1.032675 5.000000 3.488380 3.656540 4.636933 4.879310 5.236676 250 1.054487 5.000000 4.729718 3.936705 5.098362 5.384008 5.358965 251 -1.542016 5.000000 3.737201 3.656540 4.636933 4.964392 4.932118 252 0.368271 5.000000 3.998158 3.656540 4.622022 4.847064 4.915745 253 -1.002730 5.000000 3.737201 4.057666 4.636933 4.644887 4.918690 254 3.390589 5.000000 4.990675 4.260697 4.705442 4.879310 4.957943 255 -1.919953 5.000000 4.990675 4.260697 4.622022 4.534378 4.940991 256 -6.303733 5.000000 4.835284 3.936705 4.688771 4.651672 4.912625 257 -0.399922 5.000000 5.595413 4.540862 4.918525 4.966821 4.959404 258 -0.643083 5.000000 4.835284 3.936705 4.893415 4.857668 4.917188 259 6.080277 5.000000 4.990675 3.936705 4.622022 4.831081 4.918276 260 6.874898 5.000000 3.315534 3.099136 3.873154 4.603781 4.855329 261 4.871720 5.000000 4.990675 3.936705 4.622022 4.644887 4.931465 262 -1.156272 5.000000 5.328340 4.167394 5.001482 4.963970 4.966330 263 -11.091105 5.000000 5.595413 5.260739 5.019805 5.041774 4.981375 264 6.681987 5.000000 5.619820 5.215340 5.019805 5.229324 5.224911 265 -4.581508 5.000000 5.334633 5.636815 5.269179 5.575973 5.253475 266 1.527410 5.000000 5.695144 5.867504 5.586700 5.738940 5.535770 267 -7.188982 5.000000 5.695144 5.867504 5.586700 5.691624 5.443611 268 -0.754286 5.000000 5.385009 5.657474 5.586700 5.661132 5.452097 269 7.822788 5.000000 5.385009 5.657474 5.303160 5.474633 5.263990 270 -7.271588 5.000000 5.385009 5.657474 5.303781 5.712579 5.294837 271 -0.647836 5.000000 5.702634 5.657474 5.303781 5.770878 5.322557 272 -0.383459 5.000000 5.695144 5.657474 5.303160 5.752622 5.320580 273 5.063808 5.000000 5.702634 5.657474 5.054122 5.737772 5.325291 274 -4.241238 5.000000 5.702634 5.657474 5.054122 5.737772 5.325265 275 0.107873 5.000000 5.696942 5.543813 5.364874 5.874387 5.428538 276 -4.490366 5.000000 5.702634 5.543813 5.342140 5.947527 5.431649 277 4.210545 5.000000 5.695144 5.628783 5.344592 5.884553 5.398343 278 1.230910 5.000000 5.769927 5.888162 5.994389 5.960932 5.487853 279 1.256412 5.000000 5.769927 5.888162 5.994389 6.036620 5.489710 280 1.324993 5.000000 5.696942 5.628783 5.428206 5.960932 5.407547 281 5.724715 5.000000 5.696942 5.620125 5.344592 5.752622 5.310821 282 3.701784 5.000000 5.539120 5.543813 5.344581 5.707877 5.270076 283 -3.394856 5.000000 5.674248 5.703303 5.479595 5.960932 5.427475 284 -11.404739 5.000000 5.539120 5.543813 5.294530 5.682901 5.193445 285 -4.213370 5.000000 5.539120 5.543813 5.294530 5.682901 5.193502 286 11.059266 5.000000 5.377961 5.518625 5.335961 5.605745 5.180578 287 -4.275216 5.000000 5.220139 5.518625 5.277917 5.646749 5.166872 288 -10.902450 5.000000 5.327585 5.512708 5.175387 5.335664 5.087248 289 -6.415396 5.000000 5.377961 5.518625 5.843820 5.706934 5.359813 290 -4.233255 5.000000 5.327585 5.114187 5.640505 5.356382 5.207455 291 3.203285 5.000000 5.520715 5.108270 5.303781 5.082667 5.118572 292 -0.243010 5.000000 5.312485 5.108270 4.981409 5.063582 5.124535 293 -2.292388 5.000000 5.312485 5.108270 5.554852 5.074195 5.127643 294 -0.988202 5.000000 5.312485 5.108270 5.554852 5.106748 5.150840 295 -8.617249 5.000000 5.006661 5.093529 4.383496 5.035319 5.123388 296 0.682730 5.000000 5.109485 5.093529 5.084121 5.038606 5.121570 297 3.351886 5.000000 4.978758 4.610367 4.383496 4.867844 5.100909 298 5.708072 5.000000 4.672934 4.205568 4.902923 4.722350 5.042756 299 -1.390486 5.000000 4.920140 4.610367 5.113957 5.106748 5.262576 300 -3.561594 5.000000 5.109485 5.014805 5.128198 5.391971 5.332633 301 3.340206 5.000000 5.126282 5.497967 5.718812 5.706934 5.461842 302 -4.961103 5.000000 5.010479 5.093529 5.336958 5.511373 5.372576 303 -9.348193 5.000000 5.010479 5.093529 5.336958 5.577010 5.400782 304 -0.853739 5.000000 5.010479 5.093529 5.336958 5.589529 5.401533 305 6.683526 5.000000 5.064071 4.687134 5.211245 5.399548 5.158954 306 1.934211 5.000000 4.920140 4.938380 5.292158 5.570167 5.318262 307 -1.084508 5.000000 4.920140 4.938380 5.128198 5.473333 5.102231 308 2.111639 5.000000 4.803662 4.432619 5.084121 5.356382 5.074232 309 -11.472716 5.000000 4.076637 4.175442 4.902923 5.279437 4.908097 310 2.657706 5.000000 4.076637 4.175442 4.902923 5.106748 4.849805 311 0.815234 5.000000 3.957296 4.008303 4.853005 4.881096 4.800551 312 0.732248 5.000000 4.076637 4.016961 5.084121 5.279437 5.139921 313 -2.066920 5.000000 4.150052 4.016961 5.084121 5.371390 5.140675 314 5.820691 5.000000 4.003762 3.636978 4.853005 5.304413 5.137616 315 -0.036735 5.000000 3.837284 3.636978 4.363936 5.184403 5.129738 316 -0.817591 5.000000 3.837284 3.636978 4.363936 5.058771 4.955603 317 1.751958 5.000000 4.439564 4.138418 4.853005 5.159427 4.987217 318 -1.279063 5.000000 5.281118 5.146236 5.283907 5.473333 5.278802 319 9.049142 5.000000 4.273087 4.138418 5.283907 5.251880 5.229896 320 5.217183 5.000000 4.439564 4.138418 4.853005 5.294091 5.217850 321 -8.288637 5.000000 4.439564 4.138418 4.853005 5.228289 5.211998 322 -2.776235 5.000000 5.114641 4.559194 5.348747 5.204853 5.231451 323 4.875258 5.000000 5.114641 4.559194 5.348747 5.294091 5.267383 324 -3.458497 5.000000 4.439564 4.426764 4.955135 4.978755 5.026550 325 2.761264 5.000000 4.439564 4.426764 4.955135 4.978755 5.036502 326 8.652122 5.000000 4.413978 4.138418 4.772958 4.711363 4.968877 327 5.928311 5.000000 4.413978 4.138418 4.772958 4.718688 4.967719 328 1.889721 5.000000 4.865704 4.426764 4.955135 5.182514 5.443802 329 7.320146 5.000000 4.439564 4.426764 5.283907 5.178847 5.459672 330 -4.416639 5.000000 4.413978 4.136959 4.772958 4.641304 5.065697 331 -1.036730 5.000000 4.273087 4.136959 4.487097 4.534561 5.067312 332 12.419299 5.000000 4.337910 4.136959 4.487097 4.591389 5.067146 333 1.658067 5.000000 4.515632 4.426764 4.631147 4.915916 5.186128 334 3.515730 5.000000 5.179464 4.847541 5.040168 5.142322 5.224802 335 0.927521 5.000000 4.515632 4.559194 4.631147 4.730982 5.177288 336 -3.607262 5.000000 5.217139 4.847541 5.040168 4.978755 5.220703 337 -2.634539 5.000000 5.455767 5.433643 5.314278 5.228289 5.232270 338 12.181637 5.000000 5.455767 5.433643 5.314278 5.228289 5.235794 339 -0.158993 5.000000 5.455767 5.433643 5.314278 5.293852 5.251487 340 1.784266 5.000000 5.217139 4.847541 4.567238 4.804339 5.114469 341 -3.287667 5.000000 5.179464 4.646519 4.715363 5.159204 5.308371 342 -2.752338 5.000000 4.625905 4.559194 4.434477 4.730982 5.099029 343 -6.136168 5.000000 4.663580 4.570761 4.487097 4.798812 5.122461 344 3.904704 5.000000 4.477957 4.541376 4.487097 4.739118 5.107991 345 -1.675977 5.000000 4.477957 4.541376 4.825596 5.142322 5.640669 346 3.096701 5.000000 4.477957 4.541376 4.641262 4.959511 5.634822 347 1.605890 5.000000 4.419186 4.282415 4.359785 4.645731 5.504573 348 15.544441 5.000000 4.419186 4.282415 4.322957 4.629714 5.467235 349 -1.288100 5.000000 4.470853 4.559194 4.497622 4.915916 5.609190 350 -0.229852 5.000000 4.456861 4.248568 4.439661 4.609383 5.510586 351 0.329253 5.000000 3.901263 3.971789 4.065422 4.449698 5.462203 352 0.858956 5.000000 3.859952 3.971789 3.929714 4.288101 5.457372 353 -5.500308 5.000000 3.901263 4.034029 3.929714 4.166432 5.154648 354 -3.892115 5.000000 4.333399 4.034029 4.199089 4.275990 5.164648 355 0.884368 5.000000 4.456861 4.034029 4.311449 4.343885 5.180551 356 5.834929 5.000000 4.778057 4.121353 4.497622 4.469879 5.218446 357 4.695344 5.000000 4.304709 4.034029 4.311449 4.372944 5.182654 358 2.807291 5.000000 4.304709 4.121353 4.311449 4.427750 5.216447 359 -2.261169 5.000000 4.304709 4.121353 4.005256 4.372944 4.974854 360 0.642313 5.000000 4.456861 4.335893 3.978050 4.469879 5.005713 361 -8.654712 5.000000 4.470853 4.796260 4.175938 4.731294 5.131351 362 -0.092398 5.000000 4.433178 4.541376 4.186231 4.915916 5.299535 363 6.487920 5.000000 4.419186 4.395123 4.136632 4.731294 5.273712 364 3.865063 5.000000 4.419186 4.395123 4.136632 4.731294 5.280065 365 -14.569866 5.000000 4.371074 4.285903 4.136632 4.709270 5.269798 366 1.053951 5.000000 4.419186 4.432156 4.504785 4.742014 5.332498 367 1.379787 5.000000 4.470853 4.603911 4.474791 4.851329 5.339864 368 3.874501 5.000000 4.625905 4.713131 4.667231 5.173955 5.387031 369 -7.232712 5.000000 4.648220 4.603911 4.322957 4.709270 4.827389 370 1.757142 5.000000 4.778057 4.848752 4.463610 4.842387 4.895612 371 2.634704 5.000000 4.792049 5.538047 4.667231 5.068787 4.955838 372 1.748700 5.000000 4.756907 5.538047 4.633249 5.047151 4.956826 373 -2.823149 5.000000 4.963795 5.538047 4.667231 5.148903 4.972983 374 -2.063877 5.000000 5.072482 4.957972 4.889501 5.305669 5.113165 375 4.417386 5.000000 4.756907 4.870919 4.722181 5.313927 5.083906 376 -3.752995 5.000000 4.756907 4.870919 4.899794 5.228880 5.089637 377 0.589799 5.000000 4.778057 4.761699 4.837104 5.133296 5.018975 378 -4.463349 5.000000 4.855914 4.408166 4.903747 5.172565 5.034793 379 6.907824 5.000000 4.855914 4.408166 4.802487 5.148903 5.020191 380 3.717728 5.000000 4.855914 4.408166 4.727607 5.131172 5.010025 381 7.597070 5.000000 5.427210 5.097461 4.972918 5.173955 5.116314 382 9.747758 5.000000 5.427210 5.097461 4.972918 5.073570 4.992504 383 -0.360552 5.000000 5.236867 5.097461 5.078670 5.049937 4.992743 384 -6.328120 5.000000 5.029643 4.735202 5.173245 4.858752 4.896177 385 3.123386 5.000000 5.029643 4.735202 5.173245 4.988539 4.961658 386 -4.982464 5.000000 4.958070 4.501532 5.078670 4.858752 4.565345 387 -2.492864 5.000000 5.029643 4.501532 5.002814 4.869931 4.577641 388 5.177591 5.000000 5.029643 4.501532 5.002814 4.858752 4.575117 389 -0.220782 5.000000 4.440774 4.139272 5.002814 4.802576 4.551337 390 -5.183332 5.000000 4.440774 4.139272 5.002814 4.599155 4.465799 391 -4.813882 5.000000 5.029643 4.501532 5.301365 4.737383 4.540566 392 0.715621 5.000000 5.293875 5.097461 5.222898 4.737383 4.609255 393 -2.705716 5.000000 5.592584 5.624047 5.364765 5.034031 4.987675 394 9.502533 5.000000 5.592584 5.624047 5.324491 5.065919 4.980714 395 -2.090813 5.000000 6.175048 6.064632 5.470516 5.173955 5.026604 396 1.972222 5.000000 5.954235 5.624047 5.430242 5.034031 4.974397 397 -1.214261 5.000000 6.175048 5.805547 5.596937 5.323906 5.236500 398 -5.184635 5.000000 6.175048 5.805547 5.596937 5.313927 5.242685 399 1.471915 5.000000 6.046467 5.805547 5.646401 5.350998 5.211639 400 -0.936050 5.000000 5.165294 5.301113 5.528275 5.209911 5.087036 401 -6.740659 5.000000 5.165294 5.301113 5.561079 5.301063 5.203150 402 -4.846911 5.000000 4.156424 5.191195 5.528275 5.174001 5.066682 403 -0.447279 5.000000 3.936586 4.952190 4.829758 4.829573 4.804838 404 -2.949098 5.000000 4.285006 4.952190 5.347469 4.858752 4.825368 405 6.255510 5.000000 4.045008 4.286611 4.829758 4.829573 4.769609 406 7.713422 5.000000 4.045008 4.286611 5.347469 5.149333 5.176752 407 -2.094391 5.000000 4.257306 3.997098 4.912404 5.274512 5.177156 408 0.917200 5.000000 4.287655 4.396529 4.954329 5.286284 5.210216 409 2.442914 5.000000 4.257306 4.286611 4.912404 4.862131 5.147818 410 -4.708191 5.000000 4.257306 4.286611 4.912404 5.090271 5.149978 411 5.631424 5.000000 3.914019 3.887179 4.650344 4.839602 5.092908 412 -5.421105 5.000000 4.331485 3.816679 4.573163 5.072900 5.089364 413 -12.296347 5.000000 4.552420 3.816679 4.573163 5.103898 5.097737 414 -2.205921 5.000000 4.552420 3.997098 4.573163 5.184600 5.153410 415 4.503806 5.000000 4.387065 3.997098 4.484631 4.857745 4.962289 416 -0.077589 5.000000 4.630346 4.272474 4.437477 4.957424 5.003673 417 -11.206864 5.000000 4.552420 4.272474 4.484631 4.839602 4.996563 418 1.500243 5.000000 5.381754 4.272474 4.609187 4.956988 5.013333 419 1.812451 5.000000 4.552420 4.136224 4.484631 4.724219 4.940300 420 0.434045 5.000000 5.172976 4.272474 4.961299 5.096248 5.236862 421 7.684015 5.000000 5.445477 4.671906 4.962531 5.205085 5.297417 422 2.294635 5.000000 5.381754 4.652682 4.609187 5.017013 5.215906 423 0.864640 5.000000 5.381754 4.652682 4.609187 4.986194 5.207489 424 -3.487923 5.000000 5.381754 4.652682 4.609187 5.072900 5.209310 425 2.814391 5.000000 4.552420 4.516431 4.519173 5.090271 5.196782 426 12.837914 5.000000 4.343642 4.671906 4.279213 4.986194 5.141610 427 4.761137 5.000000 4.289523 4.396529 4.192072 4.752178 4.992292 428 -4.477532 5.000000 4.043526 4.671906 4.279213 4.551350 5.018673 429 1.303452 5.000000 4.351943 4.671906 4.279213 4.688257 5.016155 430 -1.099795 5.000000 5.048072 4.671906 4.364926 4.662450 4.997656 431 1.539987 5.000000 4.289523 4.136224 4.243410 4.415913 4.956182 432 4.900701 5.000000 4.024678 3.750929 4.188295 4.134028 4.869178 433 2.157716 5.000000 3.529107 3.336262 4.065719 3.945399 4.805683 434 -5.373555 5.000000 3.511712 3.135109 3.910426 3.763098 4.404351 435 3.369386 5.000000 3.752517 3.063013 3.935502 3.686000 4.393520 436 4.774591 5.000000 3.752517 3.063013 4.033002 3.742874 4.957682 437 0.723821 5.000000 3.752517 3.063013 3.935502 3.742874 4.957018 438 -2.765298 5.000000 3.099484 3.040700 3.310097 3.561608 4.590831 439 -0.110626 5.000000 3.099484 3.040700 3.310097 3.529767 4.589366 440 -10.941173 5.000000 3.099484 3.040700 3.310097 3.529767 4.587770 441 -5.199335 5.000000 2.918419 3.040700 3.310097 3.561608 4.590097 442 3.327284 5.000000 3.099484 2.939203 3.310097 3.478121 4.470489 443 -4.480336 5.000000 3.099484 2.631717 3.310097 3.478121 4.465326 444 -0.918793 5.000000 3.012703 2.631717 3.310097 3.442915 4.465203 445 -1.934569 5.000000 2.703698 2.608728 3.131815 3.231079 4.419449 446 -3.999568 5.000000 2.416004 2.540414 2.933102 3.099830 4.405615 447 -1.807214 5.000000 2.068133 2.528496 2.827115 2.969671 3.948695 448 3.451138 5.000000 2.044298 2.458291 2.553253 2.685466 3.882998 449 -0.773710 5.000000 2.044298 2.131967 2.428477 2.591104 3.820045 450 -0.210281 1.000000 2.044298 2.131967 2.251567 2.591104 3.816161 451 1.634693 1.000000 1.929772 2.179489 2.395212 2.580917 3.816587 452 0.099787 1.000000 2.044298 2.179489 2.218302 2.565652 3.811095 453 1.399718 1.000000 2.058885 2.455542 2.218302 2.572988 4.475544 454 -1.837313 1.000000 2.013519 2.418743 2.115226 2.423295 4.462064 455 1.536279 1.000000 2.013519 2.092419 2.101201 2.210105 4.390144 456 15.461575 1.000000 1.942993 2.027986 2.082939 2.139251 4.352843 457 0.245996 1.000000 1.927281 1.765415 2.069165 2.022400 4.276809 458 0.063799 1.000000 1.980637 1.765415 2.035218 2.099358 4.274333 459 0.845947 1.000000 1.913268 1.657701 1.858039 1.964217 4.260197 460 1.486638 1.000000 1.927281 1.765415 2.035218 2.101232 4.270235 461 1.742924 1.000000 1.912745 1.657701 1.843216 1.932605 3.927183 462 -1.776202 1.000000 1.839378 1.863433 1.734962 1.861585 3.855941 463 1.650770 1.000000 1.912745 1.657701 1.670353 1.790977 3.826878 464 0.255835 1.000000 1.783879 1.600862 1.628975 1.709738 3.765389 465 1.045515 1.000000 1.783879 1.600862 1.628975 1.688697 3.763496 466 0.710777 1.000000 1.725297 1.469406 1.484396 1.591194 3.751352 467 -0.936687 1.000000 1.652247 1.418806 1.454122 1.499168 3.696021 468 0.742553 1.000000 1.652247 1.418806 1.380636 1.481326 3.689802 469 -1.335997 1.000000 1.497032 1.270866 1.359474 1.374527 3.651517 470 0.333081 1.000000 1.477478 1.270866 1.315445 1.306576 3.649411 471 1.604094 1.000000 1.477478 1.270866 1.315445 1.315489 3.649156 472 0.196511 1.000000 1.200154 1.231242 1.145298 1.261929 3.641195 473 -15.658232 1.000000 1.492264 1.270866 1.315445 1.388793 3.666623 474 0.792495 1.000000 1.185369 1.270866 1.177150 1.366498 3.662891 475 -1.114018 1.000000 1.175309 1.208340 1.177150 1.380593 3.665994 476 -0.475007 1.000000 1.175309 1.208340 1.145298 1.354679 3.662644 477 -0.760521 1.000000 1.175309 1.208340 1.069780 1.274487 2.736621 478 -1.190693 1.000000 1.237276 1.208340 1.162648 1.312312 2.736617 479 0.320925 1.000000 1.237276 1.208340 1.162648 1.304296 2.736947 480 -2.307515 1.000000 1.212431 1.208340 1.138404 1.302200 2.732584 481 0.252781 1.000000 1.153849 1.151250 1.100690 1.252087 2.719429 482 1.865834 1.000000 1.134726 1.194220 1.098508 1.195271 2.705248 483 -1.692357 1.000000 1.134726 1.194220 1.098508 1.188332 2.698193 484 -0.868428 1.000000 1.073418 1.170664 1.089281 1.154155 2.680321 485 -0.489642 1.000000 1.078218 1.194220 1.164161 1.195271 2.693005 486 0.236023 1.000000 1.072278 1.170664 1.089281 1.173121 2.685026 487 0.371736 1.000000 1.072278 0.987914 1.080448 1.163880 2.681108 488 -1.254621 1.000000 1.073418 1.114228 1.009357 1.188784 2.686777 489 -0.031377 1.000000 1.186457 0.907922 1.138735 1.188784 2.682394 490 -0.222826 1.000000 1.072278 0.900546 1.004602 1.138235 2.678284 491 0.008775 1.000000 1.186457 1.143874 1.098508 1.176948 2.689050 492 0.464250 1.000000 1.186457 1.143874 1.098508 1.162788 2.678840 493 2.802897 1.000000 1.189422 1.143874 1.126600 1.175016 2.678260 494 0.869507 1.000000 1.085500 1.080370 1.080448 1.107148 1.071941 495 2.349648 1.000000 1.125806 0.900546 1.032490 1.097603 1.081688 496 1.099712 1.000000 1.085500 0.837042 1.080448 1.065844 1.067468 497 1.266472 1.000000 1.088466 0.932983 1.022144 1.065844 1.067622 498 -0.581749 1.000000 1.078218 1.075816 1.034653 1.124375 1.092542 499 0.183612 1.000000 1.078218 1.075816 1.034653 1.093282 1.084930 500 0.142260 1.000000 1.088466 1.075816 1.022144 1.067466 1.085543 501 -0.085219 1.000000 1.073418 1.007537 0.925369 1.017065 1.014907 502 -1.249745 1.000000 1.073418 1.007537 0.943281 1.050149 1.018502 503 -1.112341 1.000000 0.997719 0.981448 0.943281 1.061808 1.103952 504 -0.421823 1.000000 0.997719 0.981448 0.943281 1.027143 1.074166 505 1.425884 1.000000 1.073418 1.007537 0.920746 1.032999 1.070014 506 0.069254 1.000000 1.061713 1.008918 0.978240 1.059877 1.089199 507 0.173353 1.000000 1.119516 1.041781 1.049548 1.128557 1.145746 508 0.938138 1.000000 1.090886 1.041781 1.043157 1.133280 1.145720 509 -0.750569 1.000000 1.090886 1.041781 1.043157 1.121444 1.139363 510 0.067254 1.000000 1.119516 1.041781 1.006157 1.133280 1.142146 511 1.352565 1.000000 1.112230 1.041781 1.052769 1.134882 1.141073 512 0.889468 1.000000 1.053011 1.041781 1.080448 1.125722 1.140414 513 -0.664905 1.000000 1.053011 1.041781 1.104522 1.134882 1.143359 514 -0.471544 1.000000 0.963271 1.008918 1.063664 1.052303 1.072888 515 -1.162472 1.000000 1.112230 1.090613 1.009540 1.067466 1.089835 516 0.288422 1.000000 1.112230 1.090613 1.009540 1.057772 1.065324 517 0.593672 1.000000 1.061713 1.067702 0.962455 1.052303 1.055861 518 1.797173 1.000000 1.045065 1.067228 0.964114 1.050149 1.045766 519 -0.910366 1.000000 1.045065 1.048787 0.964114 1.050149 1.045345 520 -0.170271 1.000000 1.061043 1.048787 0.980201 1.044728 1.047216 521 0.538727 1.000000 1.045065 1.048787 0.980201 1.031639 1.048434 522 0.742206 1.000000 1.045065 1.048787 1.020586 1.031639 1.050677 523 -3.051487 1.000000 1.014944 0.985534 0.964894 0.979797 1.027336 524 -0.682138 1.000000 0.998268 0.973059 0.962455 0.975757 1.019779 525 0.933800 1.000000 0.950955 0.973059 0.951256 0.940912 1.015302 526 1.629978 1.000000 0.909526 0.972585 0.962171 0.914593 1.001206 527 2.480905 1.000000 0.932541 0.985534 0.964894 0.940912 1.019382 528 0.153676 1.000000 0.998268 1.048787 1.030724 0.940912 1.028396 529 -1.048369 1.000000 0.998268 1.048787 1.112643 0.970398 1.052656 530 0.857923 1.000000 0.956838 0.986008 1.123092 1.051045 2.652727 531 0.702038 1.000000 0.956838 0.986008 1.127931 1.056405 2.654764 532 0.483993 1.000000 0.932541 0.985534 1.089465 1.027175 2.653062 533 0.858562 1.000000 0.998268 0.985534 1.127151 1.057754 2.656292 534 0.479959 1.000000 0.909526 0.972585 1.069988 1.063013 2.653079 535 -1.118587 1.000000 0.895336 0.897648 1.069988 1.051045 2.651571 536 1.778968 1.000000 0.886720 0.890553 1.047198 0.980895 2.640665 537 0.056305 1.000000 0.901056 0.897648 1.144511 1.082007 2.661266 538 -0.454076 1.000000 0.957365 0.897648 1.036490 1.061768 2.662966 539 -0.556872 1.000000 0.957365 0.897648 1.036490 1.041062 2.656623 540 -0.265134 1.000000 0.901056 0.890553 1.112643 1.030154 2.647348 541 0.451695 1.000000 0.901056 0.890553 1.127151 1.008409 2.647745 542 -0.352988 1.000000 0.901056 0.890553 1.061264 0.999284 2.648347 543 0.260478 1.000000 0.957365 0.897648 1.036490 1.041263 2.666717 544 1.238717 1.000000 1.038295 0.891027 1.036490 0.977273 2.608369 545 0.492358 1.000000 1.038295 0.891027 1.036490 1.041062 2.616674 546 -0.329513 1.000000 0.957365 0.897648 0.987749 1.033279 2.622681 547 -1.028432 1.000000 0.970511 0.969674 0.959953 0.968247 2.623117 548 -0.693736 1.000000 0.874178 0.857027 0.945648 0.916548 2.603750 549 1.782936 1.000000 0.942936 0.857027 0.987749 0.937164 2.603574 550 15.818794 1.000000 0.874178 0.782090 0.953131 0.905967 2.594181 551 -0.255493 1.000000 0.802867 0.757416 0.913007 0.886705 2.594710 552 0.032752 1.000000 0.802867 0.713530 0.913007 0.875255 2.594504 553 1.442903 1.000000 0.817254 0.713530 0.878542 0.860304 2.596434 554 -0.343417 1.000000 0.817254 0.713530 0.878542 0.864776 2.597031 555 -0.303262 1.000000 0.817254 0.713530 0.823233 0.845104 2.597463 556 -0.268796 1.000000 0.774383 0.713530 0.798197 0.822710 2.590808 557 -1.543759 1.000000 0.751394 0.775898 0.748980 0.805205 2.590720 558 -0.070619 1.000000 0.781834 0.788467 0.756806 0.824487 2.591346 559 1.054617 1.000000 0.834670 0.713530 0.874077 0.834041 2.587819 560 0.853996 1.000000 0.835712 0.706435 0.910085 0.835011 2.583300 561 -0.226444 1.000000 0.849057 0.713530 0.916851 0.873077 2.587618 562 0.188203 1.000000 0.867516 0.882915 0.941887 0.920355 2.606325 563 -1.475397 1.000000 0.867516 0.882915 0.941887 0.924734 2.606878 564 1.306774 1.000000 0.923834 0.926801 0.953131 0.951755 2.611340 565 -1.242503 1.000000 0.867516 0.882915 0.922189 0.920355 2.608540 566 -0.621848 1.000000 0.929559 0.912836 0.894256 0.926640 2.622731 567 -0.642380 1.000000 0.933376 0.928056 0.966058 0.976884 2.632097 568 0.609551 1.000000 0.983283 0.956722 0.955139 0.985566 2.626332 569 0.668753 1.000000 0.951479 0.926801 0.938918 0.964261 2.621618 570 -0.115041 1.000000 0.879498 0.882915 0.916851 0.914806 2.611912 571 -0.049168 1.000000 0.867516 0.900267 0.903496 0.852394 0.844950 572 0.592595 1.000000 0.879498 0.900267 0.860845 0.852394 0.844481 573 -0.191465 1.000000 0.879498 0.900267 0.898372 0.901035 0.847517 574 0.986086 1.000000 0.849057 0.842384 0.806022 0.825155 0.812627 575 0.130059 1.000000 0.849057 0.842384 0.806022 0.834041 0.811912 576 -0.581485 1.000000 0.879498 0.857604 0.875408 0.914806 0.865156 577 -0.954385 1.000000 0.951479 0.931466 0.923408 0.955787 0.907232 578 0.873495 1.000000 0.934416 0.915487 0.923408 0.975591 0.923398 579 0.514512 1.000000 0.959554 0.989350 0.938532 1.017289 0.940851 580 0.236322 1.000000 0.934416 0.931466 0.915476 0.975591 0.922564 581 -0.742019 1.000000 0.896561 0.913349 0.883543 0.964261 0.914375 582 -1.569790 1.000000 0.900868 0.913349 0.867634 0.964261 0.914680 583 -0.428112 1.000000 0.930109 0.931466 0.915476 1.071690 1.037852 584 1.362854 1.000000 0.930109 0.931466 0.915476 1.096653 1.137038 585 0.014266 1.000000 0.930109 0.931466 0.939227 1.125413 1.334542 586 -1.379133 1.000000 0.930109 0.931466 0.955731 1.138339 1.357751 587 -1.228347 1.000000 0.955247 1.088893 0.972625 1.147308 1.366202 588 1.129630 1.000000 1.043020 1.256805 1.007069 1.148425 1.389272 589 0.000026 1.000000 1.048593 1.256805 1.063383 1.205405 1.692282 590 0.315187 1.000000 1.044287 1.238687 1.036973 1.177336 1.689192 591 -1.197582 1.000000 1.350878 1.251058 1.181140 1.273989 1.795091 592 -0.034754 1.000000 1.359141 1.273864 1.329732 1.317496 1.808411 593 0.397784 1.000000 1.598342 1.224727 1.460323 1.408617 1.870814 594 -0.037659 1.000000 1.614428 1.317228 1.508528 1.589512 2.014759 595 -0.217015 1.000000 1.453790 1.255999 1.516079 1.564340 2.005114 596 -2.014863 1.000000 1.499403 1.317228 1.657350 1.668902 2.140207 597 -1.887054 1.000000 1.668696 1.385642 1.761323 1.818586 2.192964 598 1.641117 1.000000 1.765318 1.403759 1.931545 1.901629 2.218456 599 -1.254351 1.000000 1.707249 1.385642 1.924872 1.825985 2.214361 600 0.108400 3.000000 1.827246 1.385642 1.924872 1.954925 2.222985 601 0.490072 3.000000 1.892251 1.859746 1.924987 2.096900 2.242326 602 0.008793 3.000000 1.892251 1.859746 1.924987 2.096900 2.240242 603 2.997641 3.000000 1.916353 1.860109 1.973322 2.215651 2.256421 604 -3.347985 3.000000 1.916353 1.860109 1.973322 2.215651 2.257366 605 4.543545 3.000000 1.916353 1.860109 1.973322 2.302730 2.261569 606 -2.034774 3.000000 1.988873 2.129106 2.103072 2.396861 2.275871 607 -1.180894 3.000000 2.162972 2.122085 2.185209 2.411543 2.286230 608 -1.783292 3.000000 2.450041 2.141361 2.199375 2.461461 2.326376 609 6.100999 3.000000 2.474552 2.146410 2.237281 2.540909 2.379937 610 -0.102829 3.000000 2.484649 2.243061 2.265744 2.601845 2.420237 611 -3.885730 3.000000 2.592387 2.481996 2.424726 2.658816 2.467381 612 -1.493656 3.000000 2.592387 2.481996 2.424726 2.644251 2.466087 613 -3.297359 3.000000 2.613389 2.481996 2.580747 2.699986 2.471461 614 -5.008837 3.000000 2.588080 2.481996 2.528738 2.699986 2.473525 615 -0.869117 3.000000 2.645296 2.659393 2.698299 2.808248 2.554917 616 4.425439 3.000000 2.645296 2.659393 2.729840 2.762799 2.556960 617 2.807595 3.000000 2.613389 2.481996 2.780789 2.740275 2.536087 618 2.108389 3.000000 2.613389 2.481996 2.780789 2.701181 2.534669 619 -0.685891 3.000000 2.550970 2.616546 2.660747 2.685061 2.539093 620 1.254902 3.000000 2.575480 2.659393 2.848193 2.906569 2.735396 621 1.771498 3.000000 2.846728 2.729457 2.868415 2.906569 2.747831 622 -0.302315 3.000000 2.885491 2.729457 2.868415 2.896194 2.758460 623 2.242549 3.000000 2.885491 2.729457 2.970128 2.903450 2.769875 624 -0.595095 3.000000 2.885491 2.704880 2.970128 2.865029 2.748574 625 1.617774 3.000000 2.885491 2.704880 2.916815 2.725071 2.721230 626 1.634306 3.000000 2.860391 2.490523 2.780789 2.618938 2.623792 627 2.093815 3.000000 2.860391 2.486965 2.780789 2.555220 2.609599 628 -2.924627 3.000000 2.821627 2.486965 2.767425 2.606765 2.605268 629 3.448153 3.000000 2.846728 2.486965 2.780789 2.689642 2.619958 630 2.966387 3.000000 2.860391 2.385265 2.668373 2.509029 2.436651 631 3.287939 3.000000 2.901382 2.388823 2.807509 2.593412 2.725013 632 -1.109032 3.000000 2.901382 2.388823 2.885745 2.620717 2.763630 633 1.392653 3.000000 2.901382 2.560515 2.917290 2.739487 2.776920 634 -0.328460 3.000000 2.901382 2.560515 2.917290 2.693841 2.766323 635 -3.796088 3.000000 2.910002 2.490523 2.913214 2.580587 2.725111 636 -0.564299 3.000000 2.871239 2.490523 2.921761 2.618938 2.729533 637 1.171487 3.000000 2.910002 2.560515 2.953642 2.683576 3.876342 638 -1.819781 3.000000 2.879141 2.708212 2.877988 2.683576 3.838504 639 -1.435856 3.000000 2.758637 2.695662 2.676878 2.620717 3.809517 640 -6.438690 3.000000 2.879141 2.708212 2.875264 2.624484 3.831074 641 -1.588172 3.000000 2.901382 2.720467 2.877988 2.618938 3.850043 642 -1.583372 3.000000 2.901382 2.720467 2.959294 2.749752 3.968964 643 1.600844 3.000000 2.901382 2.720467 3.238340 2.743285 3.979167 644 2.060660 3.000000 2.901382 2.720467 3.238340 2.743285 3.981488 645 -2.295968 3.000000 3.210046 2.913512 3.539941 2.848598 3.997507 646 -0.178108 3.000000 3.011935 2.913512 3.231812 2.758265 3.981881 647 -1.014658 3.000000 3.011935 2.918731 3.231812 2.758265 3.982202 648 0.607130 3.000000 2.949265 2.888707 2.875264 2.743285 3.953410 649 -2.506250 3.000000 3.011935 2.695662 3.059425 2.718478 3.958630 650 -1.403625 3.000000 3.011935 2.598099 3.053427 2.689642 3.910942 651 -8.028533 3.000000 2.924752 2.541330 2.762414 2.538213 3.861135 652 -4.946371 3.000000 2.714866 2.377379 2.676878 2.365749 3.809720 653 -2.455768 3.000000 2.919289 2.541330 3.033267 2.475046 3.847652 654 -2.849491 3.000000 2.720328 2.377379 3.033267 2.492932 3.838198 655 3.219823 3.000000 2.919289 2.598099 3.193748 2.528325 3.872865 656 0.954373 3.000000 2.567376 2.499020 3.149137 2.249963 3.853050 657 -18.565652 3.000000 2.919289 2.598099 3.193748 2.492932 3.884630 658 -2.035554 3.000000 2.919289 2.598099 3.193748 2.365749 3.887860 659 -1.485858 3.000000 2.755101 2.598099 3.189256 2.446993 3.885785 660 1.641346 3.000000 2.697527 2.695662 2.976980 2.446993 3.914385 661 2.337248 3.000000 2.565077 2.596583 2.905234 2.207343 3.819874 662 5.797985 3.000000 2.542671 2.626607 2.351580 2.365749 3.868440 663 1.092394 3.000000 2.542671 2.725686 2.434436 2.446993 3.907315 664 2.363627 3.000000 2.567210 2.735403 2.722161 2.725088 3.975097 665 -3.046177 3.000000 2.581780 2.735403 2.722161 2.957221 4.026025 666 -1.901898 3.000000 2.513546 2.636324 2.708998 2.781497 4.025248 667 1.654455 3.000000 2.536907 3.044049 2.943128 2.781497 4.051945 668 -1.034876 3.000000 2.536907 3.044049 2.947405 2.781497 4.051962 669 1.469234 3.000000 2.924490 3.044049 3.033051 2.697463 4.063035 670 1.062924 3.000000 2.502937 2.735639 2.561448 2.539779 4.049163 671 -1.018342 3.000000 2.502937 3.044049 2.577433 2.659349 4.082257 672 0.692775 3.000000 2.100257 2.735639 2.411250 2.452413 3.885650 673 2.370975 3.000000 1.939318 2.401326 2.241089 2.339270 3.814896 674 0.680703 3.000000 1.939318 2.401326 2.241089 2.339270 3.813503 675 2.353799 3.000000 1.939318 2.401326 2.241089 2.372086 3.867918 676 0.622243 3.000000 1.928424 2.401326 2.046340 2.313725 3.851750 677 -4.024787 3.000000 1.928424 2.401326 2.101096 2.339270 3.849786 678 1.398995 3.000000 1.928424 2.401326 2.101096 2.195268 2.459831 679 -0.459292 3.000000 1.928424 2.401326 2.101096 2.313725 2.489612 680 2.204468 3.000000 1.884733 2.444471 2.101096 2.350454 2.523394 681 1.206986 3.000000 1.895627 2.487499 2.334113 2.436448 2.548028 682 3.452934 3.000000 2.256842 2.456728 2.411250 2.496133 2.577908 683 -4.155428 3.000000 2.256842 2.456728 2.334113 2.429935 2.466030 684 4.569687 3.000000 2.446058 2.456728 2.577433 2.470298 2.472619 685 4.303976 3.000000 2.589427 2.456728 2.577433 2.489142 2.477002 686 1.475320 3.000000 2.589427 2.456728 2.577433 2.508606 2.523933 687 2.642578 3.000000 2.589427 2.456728 2.627244 2.509973 2.546866 688 -1.018165 3.000000 2.536907 3.012314 2.815284 2.761247 2.753353 689 1.832124 3.000000 2.536645 3.012314 2.705022 2.664034 2.747922 690 0.728376 3.000000 2.518746 3.012314 2.752862 2.888544 2.743551 691 -3.682597 3.000000 2.592674 3.448745 3.003536 2.999890 2.797642 692 0.075563 3.000000 2.592674 3.448745 2.983071 2.897447 2.794217 693 1.913475 3.000000 2.703985 3.448745 3.003536 2.919299 2.793748 694 -2.373089 3.000000 2.776077 3.393343 2.928443 2.993320 2.774841 695 -4.928370 3.000000 3.267123 3.393343 3.040472 2.999890 2.772328 696 2.279204 3.000000 3.228184 3.177630 3.059849 2.999890 2.752379 697 0.481364 3.000000 3.360464 3.258577 2.985805 3.060622 2.788998 698 -1.784352 3.000000 3.288980 3.393343 3.118642 3.130957 4.154187 699 -3.019125 3.000000 3.580452 3.474290 3.248101 3.292068 4.253630 700 3.809892 3.000000 3.651936 3.474290 3.118954 3.292068 4.253050 701 3.068653 3.000000 3.651936 3.529691 3.209772 3.299164 4.271650 702 -2.482284 3.000000 3.651936 3.529691 3.220083 3.316380 4.276435 703 2.882974 3.000000 3.360464 3.258577 3.187937 3.230511 4.247706 704 -0.921465 3.000000 3.228184 3.177630 3.115824 3.140602 4.195075 705 2.572128 3.000000 3.168368 3.117324 2.948163 3.038754 4.137857 706 -4.217676 3.000000 3.201911 3.179300 2.982675 2.909659 4.105819 707 -2.768101 3.000000 3.239852 3.198271 2.985805 3.059858 4.146381 708 -6.526300 3.000000 3.235694 3.179300 3.003536 2.931256 4.139220 709 -0.304908 3.000000 3.201911 3.179300 2.916958 2.909659 4.137100 710 -0.782297 3.000000 2.811942 2.586985 2.692556 2.842997 4.127723 711 -3.562248 3.000000 3.106499 2.959216 2.911837 2.909659 4.134044 712 0.547164 3.000000 3.018246 2.889990 2.732246 2.846009 4.096676 713 -0.585658 3.000000 3.156699 3.110074 2.804846 2.919359 4.113546 714 -1.328922 3.000000 2.811942 2.889990 2.692556 2.846009 4.110689 715 -0.353123 3.000000 3.018246 2.889990 2.732246 2.882257 4.097908 716 -1.559586 3.000000 2.761742 2.513794 2.589684 2.717177 4.027700 717 -3.243840 3.000000 2.761742 2.513794 2.589684 2.702338 4.023627 718 19.863106 3.000000 2.876634 2.571240 2.655020 2.770927 4.030568 719 -5.720992 3.000000 3.018246 2.947436 2.804846 2.900036 4.135098 720 -0.241575 3.000000 3.039515 2.733878 2.830864 2.878981 4.123004 721 3.389403 3.000000 2.855365 2.571240 2.649434 2.801957 4.085030 722 1.806533 3.000000 2.876634 2.889990 2.732246 2.801957 4.080391 723 -1.126151 3.000000 2.855365 2.571240 2.649434 2.818511 4.093769 724 0.648574 3.000000 2.855365 2.571240 2.649434 2.781123 4.076470 725 1.007511 3.000000 2.948174 2.947436 2.725765 2.834541 4.100098 726 -2.869856 3.000000 2.876634 2.889990 2.741013 2.804224 4.078977 727 3.897635 3.000000 2.876634 2.889990 2.741013 2.721434 4.052790 728 -2.388899 3.000000 2.876634 2.889990 2.741013 2.801957 4.074435 729 -0.338777 3.000000 2.876634 2.889990 2.741013 2.770927 4.007605 730 -1.186396 3.000000 2.969444 2.947436 2.772607 2.818511 4.021189 731 1.509644 3.000000 2.948174 2.947436 2.649434 2.801957 4.019758 732 0.144474 3.000000 2.815216 2.571240 2.568901 2.702338 3.980612 733 2.271196 3.000000 2.908025 2.617644 2.683003 2.906037 4.058393 734 -1.881418 3.000000 2.868645 2.617644 2.683003 2.906037 4.056808 735 0.835095 3.000000 2.804062 2.617644 2.780351 2.861612 4.052573 736 -1.116284 3.000000 2.704250 2.733878 2.795581 2.994796 4.079903 737 1.968463 3.000000 2.762149 3.110074 2.859741 3.085075 4.137025 738 1.587137 3.000000 2.762149 3.110074 2.859741 3.074505 4.123536 739 -6.121077 3.000000 3.183628 3.101207 2.859741 3.028435 2.780199 740 2.251272 3.000000 3.036529 2.993840 2.795581 2.881229 2.650197 741 1.379585 3.000000 3.101112 2.993840 2.827970 2.919359 2.652425 742 -2.964491 3.000000 2.908025 2.947436 2.813371 2.846009 2.592848 743 3.107060 3.000000 2.861358 2.947436 2.813371 2.846009 2.589043 744 1.649736 3.000000 2.821978 2.947436 2.780351 2.821071 2.586465 745 -2.974466 3.000000 2.821978 2.947436 2.702828 2.836899 2.582718 746 -0.764166 3.000000 2.821978 2.947436 2.479890 2.871637 2.574512 747 -2.980226 3.000000 2.821978 2.947436 2.702828 2.882671 2.681601 748 -3.878759 3.000000 2.861358 2.997357 2.702828 2.861612 2.642274 749 -4.517339 3.000000 2.821978 3.054803 2.827970 2.919359 2.700840 750 2.007515 3.000000 2.726325 3.077874 3.097630 3.100053 2.857255 751 -0.311697 3.000000 2.811999 3.101207 3.138391 3.100053 2.886718 752 -0.285136 3.000000 2.953741 3.337480 3.175423 3.116427 2.906802 753 5.105813 3.000000 3.256769 3.337480 3.175423 3.133703 2.907982 754 0.311570 3.000000 3.333779 3.101207 3.224720 3.144749 2.881762 755 1.158871 3.000000 3.341190 3.420526 3.314432 3.183738 2.961575 756 3.311317 3.000000 3.399089 3.656798 3.379695 3.191304 2.981240 757 -4.429894 3.000000 3.476099 3.685748 3.388083 3.183738 3.013271 758 -2.533736 3.000000 3.495910 3.685748 3.364041 3.191304 2.990726 759 -5.088047 3.000000 3.495910 3.685748 3.224720 3.144749 2.984364 760 -1.381488 3.000000 3.399089 3.366429 3.114643 3.039905 2.840284 761 -0.940713 3.000000 3.300724 3.101207 2.975714 2.940805 2.813460 762 -1.445287 3.000000 3.294399 3.101207 3.045089 2.912642 2.800264 763 1.618259 3.000000 2.901700 2.294340 2.972874 2.857299 2.777626 764 -0.189142 3.000000 2.908025 3.077874 3.019963 2.857299 2.802392 765 0.140214 3.000000 2.861358 2.737330 2.942170 2.742694 2.784559 766 0.110850 3.000000 2.173943 1.930462 2.893244 2.586012 2.758536 767 -5.766043 3.000000 2.324243 2.022140 2.838440 2.629138 2.770795 768 -3.955276 3.000000 2.181923 2.223713 2.841829 2.648474 2.856138 769 3.382713 3.000000 2.212545 2.068202 2.822768 2.564291 2.801673 770 5.451579 3.000000 2.191354 2.191689 2.795581 2.480934 2.726770 771 2.406461 3.000000 2.212545 2.068202 2.832027 2.564291 2.850405 772 2.524557 3.000000 2.256079 2.362386 2.896445 2.758102 3.117517 773 -0.949033 3.000000 2.350666 2.517897 2.972874 2.876728 3.146689 774 -1.171706 3.000000 2.350666 2.517897 2.902398 2.771888 3.063528 775 -4.974113 3.000000 2.823257 2.565191 3.152246 2.876728 3.138506 776 2.072820 3.000000 3.268027 3.245806 3.230040 3.024616 3.150593 777 2.493424 3.000000 3.048219 2.951622 3.183387 2.924566 3.103674 778 -0.307431 3.000000 3.223594 2.565191 3.186841 2.986586 3.137744 779 1.156092 3.000000 2.823257 2.560679 3.193314 2.940556 3.146619 780 -0.365228 3.000000 2.307132 2.509924 3.068760 2.846933 3.038874 781 -0.945390 3.000000 2.531999 2.405167 2.992629 2.859828 3.040044 782 -0.603722 3.000000 2.513581 2.405167 2.943193 2.824677 3.036075 783 1.031379 3.000000 2.571849 2.408696 2.996484 2.921351 3.101589 784 -4.584915 3.000000 2.702371 2.573764 2.953074 3.032406 3.125446 785 0.280422 3.000000 2.702371 2.573764 2.972874 3.107682 3.128952 786 0.250098 3.000000 2.994607 2.652496 3.207917 3.273325 3.193153 787 1.282542 3.000000 2.994607 2.652496 3.221877 3.273325 3.193948 788 4.863871 3.000000 2.775968 2.551893 3.170940 3.253183 3.086084 789 1.203662 3.000000 2.775968 2.551893 3.170940 3.277231 3.383899 790 2.015108 3.000000 2.479282 2.487428 2.953074 3.231410 3.353705 791 -5.617834 3.000000 2.657413 2.573764 2.953074 3.253183 3.332458 792 8.003587 3.000000 2.657413 2.573764 2.965529 3.333674 3.375635 793 -2.644323 3.000000 2.702371 2.509924 3.068760 3.355007 3.409329 794 2.300254 3.000000 2.702371 2.509924 3.068760 3.400091 3.407694 795 -4.399941 3.000000 2.657413 2.509924 2.965529 3.352244 3.404238 796 -2.363424 3.000000 2.437263 2.405996 2.890444 3.264131 3.320509 797 -1.313021 3.000000 2.994607 2.678521 2.965529 3.349792 3.369088 798 4.915234 3.000000 2.571849 2.467142 2.937447 3.258930 3.350963 799 2.880904 3.000000 2.994607 3.178020 2.989573 3.350737 3.372162 800 -0.322732 3.000000 2.994607 3.178020 2.989573 3.355007 3.375897 801 1.848021 3.000000 2.994607 3.178020 3.054059 3.407512 3.376424 802 0.926972 3.000000 2.994607 3.178020 3.054059 3.404221 3.377329 803 4.743483 3.000000 3.323497 3.242613 3.125989 3.432812 3.438656 804 -2.359116 3.000000 3.323497 3.242613 3.125989 3.432812 3.436363 805 -0.745278 3.000000 3.193255 3.178020 3.125989 3.407512 3.370436 806 4.402179 3.000000 3.368456 3.242613 3.414675 3.586689 3.480014 807 -0.128392 3.000000 3.263202 3.242613 3.414675 3.586689 3.480188 808 4.079384 3.000000 3.313663 3.245806 3.625801 3.608663 3.499044 809 -9.297312 3.000000 3.441995 3.330174 3.584094 3.576037 3.452184 810 0.955193 3.000000 3.332951 3.330174 3.679062 3.576037 3.456104 811 -4.169035 3.000000 2.995781 3.123477 3.749098 3.515430 3.445217 812 4.280045 3.000000 3.194716 3.121944 3.749098 3.508401 3.428276 813 -3.615090 3.000000 2.857547 2.915246 3.674526 3.316028 3.162917 814 -0.716937 3.000000 3.052247 3.062177 3.305526 3.316775 3.163299 815 1.065912 3.000000 2.643256 2.912053 3.268416 3.264792 3.134189 816 2.522087 3.000000 2.479103 2.847461 3.018496 3.129667 3.075868 817 -3.722015 3.000000 2.643256 2.847461 3.181533 3.307408 3.227247 818 0.807026 3.000000 3.052247 2.997584 3.268416 3.330214 3.287613 819 -2.271982 3.000000 3.052247 2.997584 3.268416 3.451125 4.168753 820 1.569190 3.000000 3.052247 2.997584 3.416289 3.512087 4.196434 821 -0.489519 3.000000 3.332951 3.054158 3.737556 3.630207 4.272992 822 -1.052418 3.000000 2.995781 2.997584 3.729138 3.517509 4.267200 823 -4.049410 3.000000 2.995781 2.997584 3.674526 3.451125 4.265009 824 0.624813 3.000000 2.995781 2.997584 3.449086 3.433325 4.230699 825 -1.873395 3.000000 3.052247 2.994337 3.245795 3.350737 4.215219 826 -5.440599 3.000000 3.263273 3.103771 3.268416 3.586689 4.224431 827 0.327601 3.000000 2.963026 2.994337 3.169845 3.410289 4.169533 828 -2.737561 3.000000 3.263273 3.103771 3.526914 3.527665 4.191745 829 -3.818614 3.000000 2.964529 2.994337 3.169845 3.351781 4.141487 830 -2.267602 3.000000 2.964529 2.994337 2.916132 3.316032 3.939834 831 -2.251232 3.000000 3.332951 2.997584 3.138594 3.316775 3.964966 832 4.348987 3.000000 3.264776 3.103771 3.120870 3.307408 3.923187 833 -1.092680 3.000000 3.264776 3.103771 3.120870 3.258930 3.892682 834 1.771703 3.000000 3.263273 3.202874 3.169845 3.325399 4.162102 835 -0.787716 3.000000 3.263273 3.215009 3.241395 3.367788 4.184917 836 -1.548491 3.000000 3.263273 3.215009 3.241395 3.422484 4.186276 837 -6.920749 3.000000 3.263273 3.215009 3.295995 3.603606 4.247523 838 3.608718 3.000000 3.339778 3.681870 3.568225 3.724733 4.255643 839 16.767200 3.000000 3.339778 3.681870 3.568225 3.724733 4.255948 840 4.164433 3.000000 3.339778 3.401780 3.506953 3.612689 4.235673 841 5.098976 3.000000 3.339778 3.401780 3.295995 3.517509 4.234960 842 -1.132046 3.000000 3.358650 3.681870 3.465326 3.672786 4.284294 843 -0.429341 3.000000 3.545664 3.694005 3.580101 3.826235 4.387368 844 3.318777 3.000000 3.358650 3.681870 3.526914 3.777243 4.333033 845 -0.346047 3.000000 3.545664 3.843156 3.580101 3.817264 4.358146 846 1.919328 3.000000 3.694106 3.843156 3.834766 3.862258 4.341850 847 0.992457 3.000000 3.823383 3.322214 3.955246 3.767985 4.229888 848 2.715543 3.000000 3.226797 3.322214 3.955246 3.789384 4.233095 849 -0.430354 3.000000 3.226797 3.322214 3.966313 3.847345 4.422802 850 -4.579176 5.000000 3.542740 3.299395 3.998499 3.928876 4.501671 851 -3.004309 5.000000 3.056060 3.270213 3.711497 3.847345 4.476080 852 2.069386 5.000000 3.149793 3.196283 3.711497 4.017648 4.740379 853 2.933114 5.000000 3.149793 3.196283 3.711497 4.017648 4.735483 854 10.294773 5.000000 3.435550 3.259076 4.048533 4.038927 4.735075 855 -2.598693 5.000000 3.746049 3.262695 4.447061 4.285211 4.888453 856 1.332669 5.000000 3.732592 3.262695 4.313934 4.333337 4.878284 857 5.407839 5.000000 3.241649 3.154884 4.277709 4.233788 4.863772 858 5.090794 5.000000 3.241649 3.154884 4.277709 4.235181 4.927157 859 1.001533 5.000000 3.195159 3.088472 4.116225 4.235181 4.922075 860 -0.647163 5.000000 3.195159 3.088472 4.116225 4.227250 4.435368 861 -0.107056 5.000000 3.208617 3.047762 4.249352 4.333337 4.455799 862 -3.642306 5.000000 3.208617 3.047762 4.263725 4.442465 4.498559 863 -5.673594 5.000000 3.449007 3.047762 4.447061 4.636900 4.700873 864 -0.792598 5.000000 3.435550 3.047762 4.313934 4.608596 4.708123 865 3.519129 5.000000 3.732592 3.196283 4.558236 4.675652 4.736074 866 1.441713 5.000000 4.289433 4.535141 4.879622 4.814103 4.793635 867 0.929235 5.000000 4.302890 4.535141 4.879622 4.814103 4.790707 868 -0.328249 5.000000 4.583239 4.535141 4.926736 4.893770 4.819760 869 -8.070508 5.000000 5.148255 4.813561 5.016210 5.088720 4.868617 870 7.887639 5.000000 5.255445 4.813561 5.033105 5.040657 4.883139 871 -0.219072 5.000000 5.255445 4.813561 5.033105 5.040657 4.875855 872 11.649209 5.000000 4.476050 4.772432 4.922872 4.893770 4.837691 873 4.020583 5.000000 4.583239 4.772432 4.879622 4.936753 4.843386 874 3.894712 5.000000 4.583239 4.772432 4.879622 4.865796 4.833743 875 -6.315154 5.000000 4.396623 4.694384 4.859083 4.736603 4.619699 876 1.980309 5.000000 4.240527 3.569635 4.751241 4.675652 4.597745 877 3.156636 5.000000 4.240527 3.569635 4.751241 4.606157 4.597084 878 -8.291929 5.000000 3.953270 3.426007 4.514987 4.466974 4.538681 879 -0.340037 5.000000 3.953270 3.426007 4.514987 4.528842 4.560734 880 8.919116 5.000000 4.332040 4.550756 4.859083 4.777980 4.640380 881 -3.063581 5.000000 4.488136 4.936506 4.887829 4.961961 4.919543 882 6.662776 5.000000 4.583239 5.080135 4.918285 4.995592 4.958527 883 -7.948970 5.000000 4.428344 4.772432 4.998998 5.121459 5.362227 884 2.985318 5.000000 4.241728 3.647683 4.891199 4.969578 5.263995 885 4.967178 5.000000 3.658555 3.647683 4.769389 4.954401 5.258546 886 -3.934817 5.000000 3.823438 3.740991 4.786110 4.970073 5.276477 887 0.867510 5.000000 4.223627 3.976936 4.923732 5.136797 5.357228 888 -2.543210 5.000000 4.843741 5.061755 5.100099 5.287745 5.388664 889 5.551567 5.000000 4.843741 5.061755 5.310979 5.402935 5.403018 890 3.595675 5.000000 4.806010 4.514671 4.818862 5.058228 5.199951 891 -4.314848 5.000000 4.806010 4.514671 5.074988 5.121459 5.309229 892 -0.016654 5.000000 4.806010 4.514671 5.074988 5.141809 5.307494 893 -0.875097 5.000000 4.624252 4.278726 4.877776 4.961961 5.068873 894 1.490265 5.000000 4.900235 4.732501 5.310979 5.141809 5.275762 895 3.789427 5.000000 5.223289 5.061755 5.574519 5.478655 5.578500 896 -1.025945 5.000000 4.805729 4.514671 5.310979 5.196787 5.454534 897 1.033710 5.000000 4.805729 4.514671 5.310979 5.287745 5.458927 898 1.490075 5.000000 4.843741 4.824727 5.585001 5.600300 5.687619 899 5.923518 5.000000 4.843459 4.889699 5.585001 5.562792 5.670075 900 -4.800176 5.000000 4.843459 4.889699 5.549839 5.600300 5.660922 901 -9.946581 5.000000 4.806010 4.733989 5.265883 5.366831 5.550287 902 4.338869 5.000000 4.624534 4.286992 4.635090 5.175071 5.513526 903 14.262665 5.000000 4.624252 4.423933 4.641008 4.941615 5.493358 904 -0.462271 5.000000 4.624252 4.423933 4.641008 4.940752 5.412793 905 2.062066 5.000000 4.129121 4.423933 4.852603 4.941615 5.427730 906 4.757129 5.000000 4.085632 4.016632 4.519414 4.874650 5.400482 907 7.036645 5.000000 4.141334 4.111298 4.462945 4.822055 5.346344 908 -2.489345 5.000000 4.223346 4.152445 4.641008 4.941615 5.375744 909 -1.751339 5.000000 4.045482 3.976936 4.635090 4.917066 5.341423 910 2.028441 5.000000 4.045482 3.976936 4.635090 5.070249 5.384630 911 10.782682 5.000000 4.141053 3.976936 4.641008 5.070249 5.395836 912 0.020329 5.000000 3.975680 3.905617 4.608938 4.868846 5.303650 913 -1.628935 5.000000 3.975680 3.905617 4.595912 4.874650 5.302531 914 -8.782086 5.000000 4.045482 4.215673 4.253523 5.070249 5.337491 915 12.760311 5.000000 4.045482 4.215673 4.253523 5.070249 5.337227 916 1.908713 5.000000 4.057973 4.215673 4.608938 4.907286 5.342695 917 2.806770 5.000000 4.045482 4.106074 4.177078 4.894889 5.318387 918 11.605220 5.000000 4.208290 4.106074 4.253523 4.941615 5.323241 919 11.260197 5.000000 4.223068 4.215673 4.966874 5.196787 5.391405 920 0.913256 5.000000 4.045482 3.905617 4.861485 4.940752 5.364741 921 2.049888 5.000000 4.045482 3.905617 4.861485 4.926536 5.358075 922 -0.929736 5.000000 4.045482 3.905617 4.861485 4.860429 5.082622 923 -2.193199 5.000000 3.975680 3.864470 4.462945 4.647129 5.083263 924 -5.899560 5.000000 3.863491 3.784069 3.949733 4.366170 4.697244 925 -1.262703 5.000000 4.024294 4.030897 4.098989 4.510821 4.767767 926 1.610233 5.000000 4.196631 4.111298 4.627504 4.685223 4.785785 927 4.283363 5.000000 4.195058 4.302385 4.587521 4.661326 4.839312 928 5.403657 5.000000 4.027551 4.238315 4.088715 4.438356 4.760266 929 4.088473 5.000000 4.027551 4.238315 4.088715 4.438915 4.772583 930 7.576778 5.000000 3.866747 3.966827 3.939460 4.365322 4.746189 931 -0.781889 5.000000 3.866747 3.966827 3.939460 4.359429 4.747410 932 1.601807 5.000000 3.738607 3.596756 3.939460 4.131427 4.523862 933 0.101579 5.000000 3.863491 3.966827 4.083307 4.250072 4.540969 934 7.050916 5.000000 3.735350 3.719998 4.083307 4.182880 4.522551 935 1.569018 5.000000 3.704658 3.610399 3.503161 3.900190 4.215072 936 -0.002263 5.000000 3.482203 3.240329 3.431770 3.593768 3.831949 937 2.324108 5.000000 3.089134 3.240329 3.245351 3.544593 3.835892 938 4.174902 5.000000 3.089134 3.240329 3.452905 3.560577 3.839468 939 -3.202602 5.000000 3.226081 3.022695 3.450227 3.448255 3.511829 940 0.428766 5.000000 3.197676 2.689056 3.164886 3.306090 3.170430 941 -4.588781 5.000000 2.870346 2.796455 3.164886 3.430238 3.186843 942 -3.443394 5.000000 3.096802 2.909683 3.164886 3.430238 3.192906 943 -0.047314 5.000000 3.887330 3.492061 3.707641 3.522594 3.320903 944 1.566821 5.000000 3.412475 3.376922 3.707641 3.672888 3.532972 945 -3.858219 5.000000 3.412475 3.376922 3.707641 3.526577 3.414776 946 4.399602 5.000000 3.412475 3.376922 3.707641 3.522594 3.403349 947 -3.800820 5.000000 4.031281 3.993973 3.839183 3.844337 3.721307 948 1.884652 5.000000 3.568748 3.526735 3.815276 3.801018 3.677873 949 -3.046701 5.000000 3.479915 3.413507 3.245329 3.657918 3.613366 950 0.894097 5.000000 3.479915 3.413507 3.245329 3.665471 3.617136 951 2.364784 5.000000 3.347108 3.383354 3.013588 3.395144 3.427585 952 3.589254 5.000000 3.347108 3.383354 3.013588 3.381011 3.426777 953 4.228067 5.000000 3.347108 3.383354 3.013588 3.360118 3.421810 954 -0.228697 5.000000 3.479915 3.724471 3.127481 3.451760 3.453902 955 1.153853 5.000000 3.509390 3.502082 3.127481 3.381011 3.404449 956 0.107194 5.000000 3.735846 3.827852 3.348653 3.672888 3.731989 957 0.167111 5.000000 4.162151 3.858005 3.815276 3.982862 4.007414 958 3.147823 5.000000 4.162151 3.858005 3.815276 3.886087 3.999301 959 -2.239973 5.000000 3.573565 3.502082 3.460174 3.665471 3.953648 960 -3.261503 5.000000 3.568748 3.754624 3.821580 3.902935 4.049106 961 -1.407582 5.000000 4.250984 3.867852 4.042150 4.038791 4.093972 962 2.517527 5.000000 4.250984 3.867852 4.042150 4.123780 4.145083 963 -5.388479 5.000000 3.995440 3.993973 4.161425 4.081666 4.120984 964 8.801876 5.000000 3.995847 3.993973 4.233123 4.035219 4.121813 965 -2.700134 5.000000 4.133449 4.335091 4.466806 4.410819 4.298934 966 -0.337379 5.000000 4.133449 4.335091 4.466806 4.410819 4.290690 967 -8.787952 5.000000 4.419210 3.971233 4.344644 4.396896 4.290204 968 -0.320155 5.000000 4.250984 3.867852 4.249740 4.175697 4.251973 969 -1.975703 5.000000 4.250984 3.867852 4.249740 4.142849 4.250381 970 4.231599 5.000000 3.568748 3.526735 4.144564 4.069873 4.221413 971 0.454910 5.000000 4.250984 3.993973 4.344644 4.265449 4.256900 972 -0.658922 5.000000 4.250984 3.993973 4.344644 4.274367 4.253187 973 0.996911 5.000000 3.660233 3.616893 4.144564 4.264021 4.242248 974 -2.839593 5.000000 3.573565 3.396556 4.138318 4.081666 4.206367 975 -6.154551 5.000000 3.749066 3.616893 4.387216 4.118500 4.233324 976 9.689669 5.000000 4.250984 4.084132 4.402248 4.301085 4.264703 977 9.319547 5.000000 4.133449 4.084132 4.402248 4.289885 4.269196 978 1.588541 5.000000 4.175757 4.335091 4.757726 4.419468 4.383903 979 1.449763 5.000000 4.207153 3.971233 5.021169 4.806105 4.759353 980 6.745770 5.000000 4.508943 4.183849 4.910948 4.805979 4.808167 981 4.226361 5.000000 4.177951 4.188394 4.799851 4.807988 4.843379 982 -6.052798 5.000000 4.473302 4.348665 4.760599 4.809336 4.903000 983 3.242879 5.000000 4.677676 4.508936 5.072554 4.977193 4.952553 984 1.423245 5.000000 4.473302 4.436964 4.760599 4.843016 4.939043 985 -7.291660 5.000000 4.177951 4.078226 4.665393 4.777649 4.776579 986 -3.511600 5.000000 4.187240 4.230841 4.710933 4.587962 4.827588 987 -3.767617 5.000000 4.242607 4.508936 4.894074 4.810059 4.902228 988 -1.558932 5.000000 4.015952 4.248744 4.710933 4.510046 4.720420 989 1.708610 5.000000 4.155905 4.342892 4.391040 4.757592 4.797493 990 -0.844955 5.000000 3.863556 4.437040 4.177548 4.527021 4.861991 991 3.858505 5.000000 3.610522 4.508936 4.311348 4.738681 4.889573 992 2.016079 5.000000 3.863556 4.639039 4.731916 4.713819 4.978938 993 -2.361595 5.000000 4.116591 4.769141 4.321601 4.782224 5.071283 994 2.220296 5.000000 4.288644 4.899244 5.313357 4.885008 5.168955 995 3.272895 5.000000 3.910838 5.029346 5.035401 4.802522 5.239045 996 3.672797 5.000000 3.759372 4.464084 4.177548 4.671521 5.174955 997 1.606136 5.000000 3.607907 4.591971 3.446223 4.604706 4.900145 998 -6.014203 5.000000 3.486680 4.604460 3.002670 4.187014 4.576577 999 -12.099984 5.000000 3.571207 5.007095 3.459641 4.455075 4.669759 gsl/doc/examples/vectorview.c0000644000175000017500000000102213536674414014651 0ustar eddedd#include #include #include #include int main (void) { size_t i,j; gsl_matrix *m = gsl_matrix_alloc (10, 10); for (i = 0; i < 10; i++) for (j = 0; j < 10; j++) gsl_matrix_set (m, i, j, sin (i) + cos (j)); for (j = 0; j < 10; j++) { gsl_vector_view column = gsl_matrix_column (m, j); double d; d = gsl_blas_dnrm2 (&column.vector); printf ("matrix column %zu, norm = %g\n", j, d); } gsl_matrix_free (m); return 0; } gsl/doc/examples/movstat1.c0000644000175000017500000000243513536675317014246 0ustar eddedd#include #include #include #include #include #include #include int main(void) { const size_t N = 500; /* length of time series */ const size_t K = 11; /* window size */ gsl_movstat_workspace * w = gsl_movstat_alloc(K); gsl_vector *x = gsl_vector_alloc(N); gsl_vector *xmean = gsl_vector_alloc(N); gsl_vector *xmin = gsl_vector_alloc(N); gsl_vector *xmax = gsl_vector_alloc(N); gsl_rng *r = gsl_rng_alloc(gsl_rng_default); size_t i; for (i = 0; i < N; ++i) { double xi = cos(4.0 * M_PI * i / (double) N); double ei = gsl_ran_gaussian(r, 0.1); gsl_vector_set(x, i, xi + ei); } /* compute moving statistics */ gsl_movstat_mean(GSL_MOVSTAT_END_PADVALUE, x, xmean, w); gsl_movstat_minmax(GSL_MOVSTAT_END_PADVALUE, x, xmin, xmax, w); /* print results */ for (i = 0; i < N; ++i) { printf("%zu %f %f %f %f\n", i, gsl_vector_get(x, i), gsl_vector_get(xmean, i), gsl_vector_get(xmin, i), gsl_vector_get(xmax, i)); } gsl_vector_free(x); gsl_vector_free(xmean); gsl_rng_free(r); gsl_movstat_free(w); return 0; } gsl/doc/examples/robfit.txt0000644000175000017500000000655313536674414014354 0ustar eddedd-5 -2.37026 -2.87902 -2.10098 -4.89899 -3.06063 -2.73364 -1.98182 -4.79798 -2.79445 -2.58825 -1.86266 -4.69697 -1.9834 -2.44287 -1.7435 -4.59596 -2.55248 -2.29749 -1.62435 -4.49495 -2.1527 -2.1521 -1.50519 -4.39394 -1.53374 -2.00672 -1.38603 -4.29293 -1.60044 -1.86134 -1.26687 -4.19192 -1.65824 -1.71596 -1.14772 -4.09091 -1.31187 -1.57057 -1.02856 -3.9899 -1.14541 -1.42519 -0.909399 -3.88889 -1.10025 -1.27981 -0.790242 -3.78788 -1.29679 -1.13443 -0.671084 -3.68687 -0.661557 -0.989042 -0.551926 -3.58586 -0.799823 -0.843659 -0.432768 -3.48485 -1.00446 -0.698277 -0.31361 -3.38384 -0.551036 -0.552894 -0.194452 -3.28283 -0.487787 -0.407511 -0.0752942 -3.18182 -0.511969 -0.262128 0.0438637 -3.08081 -0.373981 -0.116746 0.163022 -2.9798 -0.410372 0.0286373 0.282179 -2.87879 0.0392968 0.17402 0.401337 -2.77778 0.0463711 0.319403 0.520495 -2.67677 0.942404 0.464786 0.639653 -2.57576 0.725083 0.610168 0.758811 -2.47475 1.18992 0.755551 0.877969 -2.37374 1.10364 0.900934 0.997127 -2.27273 1.08316 1.04632 1.11628 -2.17172 1.29164 1.1917 1.23544 -2.07071 1.05976 1.33708 1.3546 -1.9697 1.32046 1.48247 1.47376 -1.86869 1.28781 1.62785 1.59292 -1.76768 1.37979 1.77323 1.71207 -1.66667 2.11146 1.91861 1.83123 -1.56566 2.33522 2.064 1.95039 -1.46465 2.39339 2.20938 2.06955 -1.36364 2.61661 2.35476 2.18871 -1.26263 2.14877 2.50014 2.30786 -1.16162 2.89492 2.64553 2.42702 -1.06061 2.44993 2.79091 2.54618 -0.959596 2.61783 2.93629 2.66534 -0.858586 3.13745 3.08168 2.7845 -0.757576 2.9893 3.22706 2.90365 -0.656566 3.21689 3.37244 3.02281 -0.555556 3.15762 3.51782 3.14197 -0.454545 3.34903 3.66321 3.26113 -0.353535 3.91475 3.80859 3.38028 -0.252525 3.59616 3.95397 3.49944 -0.151515 3.95244 4.09936 3.6186 -0.0505051 4.69839 4.24474 3.73776 0.0505051 4.18035 4.39012 3.85692 0.151515 4.53154 4.5355 3.97607 0.252525 4.38689 4.68089 4.09523 0.353535 4.79302 4.82627 4.21439 0.454545 5.22604 4.97165 4.33355 0.555556 4.85623 5.11704 4.45271 0.656566 5.27284 5.26242 4.57186 0.757576 5.02382 5.4078 4.69102 0.858586 5.43625 5.55318 4.81018 0.959596 5.7776 5.69857 4.92934 1.06061 5.60029 5.84395 5.0485 1.16162 6.07538 5.98933 5.16765 1.26263 6.4516 6.13471 5.28681 1.36364 6.22326 6.2801 5.40597 1.46465 6.16455 6.42548 5.52513 1.56566 6.61031 6.57086 5.64428 1.66667 6.9245 6.71625 5.76344 1.76768 7.12074 6.86163 5.8826 1.86869 7.28779 7.00701 6.00176 1.9697 7.2146 7.15239 6.12092 2.07071 6.97263 7.29778 6.24007 2.17172 7.36772 7.44316 6.35923 2.27273 7.27067 7.58854 6.47839 2.37374 7.75846 7.73393 6.59755 2.47475 7.94306 7.87931 6.71671 2.57576 8.03409 8.02469 6.83586 2.67677 8.53885 8.17007 6.95502 2.77778 8.53239 8.31546 7.07418 2.87879 9.03468 8.46084 7.19334 2.9798 8.57114 8.60622 7.31249 3.08081 9.17798 8.7516 7.43165 3.18182 8.63444 8.89699 7.55081 3.28283 9.38419 9.04237 7.66997 3.38384 9.61631 9.18775 7.78913 3.48485 9.32413 9.33314 7.90828 3.58586 9.70145 9.47852 8.02744 3.68687 9.57266 9.6239 8.1466 3.78788 9.41859 9.76928 8.26576 3.88889 10.132 9.91467 8.38492 3.9899 10.2327 10.0601 8.50407 4.09091 10.3107 10.2054 8.62323 4.19192 10.6821 10.3508 8.74239 4.29293 10.2493 10.4962 8.86155 4.39394 10.2935 10.6416 8.98071 4.49495 10.7085 10.787 9.09986 4.59596 10.6658 10.9323 9.21902 4.69697 10.9327 11.0777 9.33818 4.7 -8.3 11.0821 9.34175 3.5 -6.7 9.35494 7.92616 4.1 -6 10.2185 8.63396 # best fit: Y = 4.31743 + 1.43929 X # covariance matrix: # [ +4.01177e-03, +1.15955e-05 # +1.15955e-05, +4.83755e-04 gsl/doc/examples/ode-initval-low-level.c0000644000175000017500000000153213536674414016601 0ustar eddeddint main (void) { const gsl_odeiv2_step_type * T = gsl_odeiv2_step_rk8pd; gsl_odeiv2_step * s = gsl_odeiv2_step_alloc (T, 2); gsl_odeiv2_control * c = gsl_odeiv2_control_y_new (1e-6, 0.0); gsl_odeiv2_evolve * e = gsl_odeiv2_evolve_alloc (2); double mu = 10; gsl_odeiv2_system sys = {func, jac, 2, &mu}; double t = 0.0, t1 = 100.0; double h = 1e-6; double y[2] = { 1.0, 0.0 }; while (t < t1) { int status = gsl_odeiv2_evolve_apply (e, c, s, &sys, &t, t1, &h, y); if (status != GSL_SUCCESS) break; printf ("%.5e %.5e %.5e\n", t, y[0], y[1]); } gsl_odeiv2_evolve_free (e); gsl_odeiv2_control_free (c); gsl_odeiv2_step_free (s); return 0; } gsl/doc/examples/vectorr.c0000644000175000017500000000052513536674414014147 0ustar eddedd#include #include int main (void) { int i; gsl_vector * v = gsl_vector_alloc (10); { FILE * f = fopen ("test.dat", "r"); gsl_vector_fscanf (f, v); fclose (f); } for (i = 0; i < 10; i++) { printf ("%g\n", gsl_vector_get(v, i)); } gsl_vector_free (v); return 0; } gsl/doc/examples/ieeeround.c0000644000175000017500000000070213536674414014437 0ustar eddedd#include #include #include int main (void) { double x = 1, oldsum = 0, sum = 0; int i = 0; gsl_ieee_env_setup (); /* read GSL_IEEE_MODE */ do { i++; oldsum = sum; sum += x; x = x / i; printf ("i=%2d sum=%.18f error=%g\n", i, sum, sum - M_E); if (i > 30) break; } while (sum != oldsum); return 0; } gsl/doc/examples/interp.txt0000644000175000017500000002722713536674414014371 0ustar eddedd#m=0,S=17 0 1 1.42074 1.5403 2.45465 1.34636 3.07056 2.08887 3.6216 3.04234 4.52054 5.9912 5.86029 5.87204 7.32849 7.30059 8.49468 8.39186 9.20606 9.77669 #m=1,S=0 0 1 0.01 1.00699 0.02 1.01397 0.03 1.02096 0.04 1.02794 0.05 1.03492 0.06 1.04189 0.07 1.04886 0.08 1.05582 0.09 1.06278 0.1 1.06972 0.11 1.07666 0.12 1.08358 0.13 1.0905 0.14 1.0974 0.15 1.10429 0.16 1.11116 0.17 1.11802 0.18 1.12487 0.19 1.13169 0.2 1.1385 0.21 1.14529 0.22 1.15206 0.23 1.15881 0.24 1.16553 0.25 1.17224 0.26 1.17892 0.27 1.18557 0.28 1.1922 0.29 1.19881 0.3 1.20538 0.31 1.21193 0.32 1.21845 0.33 1.22494 0.34 1.23139 0.35 1.23782 0.36 1.24421 0.37 1.25057 0.38 1.25689 0.39 1.26317 0.4 1.26942 0.41 1.27564 0.42 1.28181 0.43 1.28794 0.44 1.29403 0.45 1.30008 0.46 1.30609 0.47 1.31206 0.48 1.31798 0.49 1.32385 0.5 1.32968 0.51 1.33546 0.52 1.34119 0.53 1.34688 0.54 1.35251 0.55 1.35809 0.56 1.36362 0.57 1.3691 0.58 1.37452 0.59 1.37989 0.6 1.3852 0.61 1.39046 0.62 1.39565 0.63 1.40079 0.64 1.40587 0.65 1.41089 0.66 1.41585 0.67 1.42074 0.68 1.42557 0.69 1.43034 0.7 1.43504 0.71 1.43968 0.72 1.44424 0.73 1.44874 0.74 1.45317 0.75 1.45754 0.76 1.46182 0.77 1.46604 0.78 1.47019 0.79 1.47426 0.8 1.47825 0.81 1.48217 0.82 1.48602 0.83 1.48978 0.84 1.49347 0.85 1.49708 0.86 1.50061 0.87 1.50405 0.88 1.50742 0.89 1.5107 0.9 1.51389 0.91 1.517 0.92 1.52003 0.93 1.52297 0.94 1.52582 0.95 1.52858 0.96 1.53125 0.97 1.53383 0.98 1.53631 0.99 1.53871 1 1.54101 1.01 1.54322 1.02 1.54533 1.03 1.54734 1.04 1.54926 1.05 1.55108 1.06 1.5528 1.07 1.55442 1.08 1.55593 1.09 1.55735 1.1 1.55866 1.11 1.55987 1.12 1.56097 1.13 1.56197 1.14 1.56286 1.15 1.56364 1.16 1.56431 1.17 1.56488 1.18 1.56533 1.19 1.56567 1.2 1.5659 1.21 1.56601 1.22 1.56601 1.23 1.5659 1.24 1.56566 1.25 1.56531 1.26 1.56485 1.27 1.56426 1.28 1.56355 1.29 1.56272 1.3 1.56177 1.31 1.5607 1.32 1.5595 1.33 1.55818 1.34 1.55673 1.35 1.55515 1.36 1.55345 1.37 1.55162 1.38 1.54965 1.39 1.54756 1.4 1.54534 1.41 1.54298 1.42 1.54049 1.43 1.53787 1.44 1.53511 1.45 1.53223 1.46 1.52923 1.47 1.52611 1.48 1.52287 1.49 1.51953 1.5 1.51608 1.51 1.51254 1.52 1.50889 1.53 1.50516 1.54 1.50133 1.55 1.49742 1.56 1.49344 1.57 1.48938 1.58 1.48525 1.59 1.48105 1.6 1.47679 1.61 1.47247 1.62 1.4681 1.63 1.46368 1.64 1.45922 1.65 1.45471 1.66 1.45017 1.67 1.4456 1.68 1.441 1.69 1.43638 1.7 1.43173 1.71 1.42708 1.72 1.42241 1.73 1.41774 1.74 1.41306 1.75 1.40839 1.76 1.40372 1.77 1.39907 1.78 1.39443 1.79 1.38981 1.8 1.38521 1.81 1.38064 1.82 1.37611 1.83 1.37161 1.84 1.36715 1.85 1.36274 1.86 1.35838 1.87 1.35407 1.88 1.34982 1.89 1.34563 1.9 1.34151 1.91 1.33746 1.92 1.33349 1.93 1.32959 1.94 1.32578 1.95 1.32206 1.96 1.31843 1.97 1.3149 1.98 1.31147 1.99 1.30814 2 1.30493 2.01 1.30182 2.02 1.29884 2.03 1.29598 2.04 1.29325 2.05 1.29064 2.06 1.28817 2.07 1.28585 2.08 1.28366 2.09 1.28163 2.1 1.27975 2.11 1.27802 2.12 1.27646 2.13 1.27506 2.14 1.27383 2.15 1.27277 2.16 1.2719 2.17 1.2712 2.18 1.2707 2.19 1.27038 2.2 1.27026 2.21 1.27034 2.22 1.27063 2.23 1.27112 2.24 1.27183 2.25 1.27275 2.26 1.27389 2.27 1.27526 2.28 1.27686 2.29 1.27869 2.3 1.28077 2.31 1.28308 2.32 1.28564 2.33 1.28846 2.34 1.29153 2.35 1.29486 2.36 1.29845 2.37 1.30231 2.38 1.30644 2.39 1.31086 2.4 1.31555 2.41 1.32053 2.42 1.3258 2.43 1.33136 2.44 1.33722 2.45 1.34339 2.46 1.34986 2.47 1.35663 2.48 1.36371 2.49 1.37108 2.5 1.37874 2.51 1.38668 2.52 1.39489 2.53 1.40337 2.54 1.41212 2.55 1.42112 2.56 1.43037 2.57 1.43986 2.58 1.44959 2.59 1.45955 2.6 1.46974 2.61 1.48015 2.62 1.49077 2.63 1.50159 2.64 1.51262 2.65 1.52384 2.66 1.53525 2.67 1.54684 2.68 1.5586 2.69 1.57054 2.7 1.58263 2.71 1.59489 2.72 1.60729 2.73 1.61984 2.74 1.63253 2.75 1.64535 2.76 1.65829 2.77 1.67136 2.78 1.68454 2.79 1.69782 2.8 1.71121 2.81 1.72469 2.82 1.73826 2.83 1.75191 2.84 1.76564 2.85 1.77943 2.86 1.7933 2.87 1.80722 2.88 1.82119 2.89 1.8352 2.9 1.84925 2.91 1.86334 2.92 1.87745 2.93 1.89159 2.94 1.90573 2.95 1.91989 2.96 1.93405 2.97 1.9482 2.98 1.96234 2.99 1.97646 3 1.99057 3.01 2.00464 3.02 2.01867 3.03 2.03267 3.04 2.04661 3.05 2.06051 3.06 2.07434 3.07 2.0881 3.08 2.1018 3.09 2.11543 3.1 2.12901 3.11 2.14254 3.12 2.15605 3.13 2.16954 3.14 2.18303 3.15 2.19651 3.16 2.21002 3.17 2.22354 3.18 2.23711 3.19 2.25072 3.2 2.26439 3.21 2.27813 3.22 2.29195 3.23 2.30586 3.24 2.31988 3.25 2.33401 3.26 2.34826 3.27 2.36266 3.28 2.37719 3.29 2.39189 3.3 2.40676 3.31 2.42181 3.32 2.43704 3.33 2.45249 3.34 2.46814 3.35 2.48402 3.36 2.50014 3.37 2.5165 3.38 2.53312 3.39 2.55001 3.4 2.56718 3.41 2.58464 3.42 2.6024 3.43 2.62047 3.44 2.63887 3.45 2.65761 3.46 2.67669 3.47 2.69613 3.48 2.71593 3.49 2.73612 3.5 2.7567 3.51 2.77768 3.52 2.79907 3.53 2.82088 3.54 2.84313 3.55 2.86583 3.56 2.88898 3.57 2.9126 3.58 2.9367 3.59 2.96129 3.6 2.98638 3.61 3.01199 3.62 3.03811 3.63 3.06477 3.64 3.09196 3.65 3.11965 3.66 3.14785 3.67 3.17653 3.68 3.20568 3.69 3.23529 3.7 3.26534 3.71 3.29583 3.72 3.32674 3.73 3.35806 3.74 3.38977 3.75 3.42185 3.76 3.45431 3.77 3.48712 3.78 3.52026 3.79 3.55374 3.8 3.58753 3.81 3.62162 3.82 3.656 3.83 3.69065 3.84 3.72556 3.85 3.76072 3.86 3.79612 3.87 3.83174 3.88 3.86756 3.89 3.90358 3.9 3.93979 3.91 3.97616 3.92 4.01269 3.93 4.04936 3.94 4.08616 3.95 4.12307 3.96 4.16009 3.97 4.1972 3.98 4.23438 3.99 4.27163 4 4.30892 4.01 4.34626 4.02 4.38361 4.03 4.42098 4.04 4.45835 4.05 4.4957 4.06 4.53302 4.07 4.5703 4.08 4.60752 4.09 4.64467 4.1 4.68174 4.11 4.71872 4.12 4.75559 4.13 4.79233 4.14 4.82895 4.15 4.86541 4.16 4.90171 4.17 4.93784 4.18 4.97378 4.19 5.00953 4.2 5.04505 4.21 5.08035 4.22 5.11541 4.23 5.15022 4.24 5.18476 4.25 5.21902 4.26 5.25299 4.27 5.28665 4.28 5.31999 4.29 5.353 4.3 5.38566 4.31 5.41796 4.32 5.44989 4.33 5.48144 4.34 5.51259 4.35 5.54332 4.36 5.57364 4.37 5.60351 4.38 5.63293 4.39 5.66189 4.4 5.69037 4.41 5.71835 4.42 5.74584 4.43 5.77281 4.44 5.79924 4.45 5.82514 4.46 5.85047 4.47 5.87524 4.48 5.89942 4.49 5.92301 4.5 5.94598 4.51 5.96834 4.52 5.99005 4.53 6.01112 4.54 6.03155 4.55 6.05134 4.56 6.07051 4.57 6.08905 4.58 6.10697 4.59 6.12429 4.6 6.14101 4.61 6.15713 4.62 6.17267 4.63 6.18763 4.64 6.20202 4.65 6.21584 4.66 6.22911 4.67 6.24182 4.68 6.25399 4.69 6.26562 4.7 6.27673 4.71 6.28731 4.72 6.29738 4.73 6.30693 4.74 6.31599 4.75 6.32456 4.76 6.33263 4.77 6.34023 4.78 6.34736 4.79 6.35402 4.8 6.36022 4.81 6.36597 4.82 6.37128 4.83 6.37615 4.84 6.38059 4.85 6.38461 4.86 6.38821 4.87 6.3914 4.88 6.39419 4.89 6.39659 4.9 6.3986 4.91 6.40024 4.92 6.40149 4.93 6.40239 4.94 6.40292 4.95 6.4031 4.96 6.40294 4.97 6.40244 4.98 6.40162 4.99 6.40046 5 6.399 5.01 6.39722 5.02 6.39514 5.03 6.39277 5.04 6.39011 5.05 6.38717 5.06 6.38396 5.07 6.38048 5.08 6.37674 5.09 6.37275 5.1 6.36852 5.11 6.36404 5.12 6.35934 5.13 6.35441 5.14 6.34927 5.15 6.34392 5.16 6.33837 5.17 6.33262 5.18 6.32668 5.19 6.32057 5.2 6.31428 5.21 6.30782 5.22 6.3012 5.23 6.29444 5.24 6.28752 5.25 6.28047 5.26 6.27329 5.27 6.26598 5.28 6.25856 5.29 6.25103 5.3 6.2434 5.31 6.23567 5.32 6.22785 5.33 6.21995 5.34 6.21198 5.35 6.20394 5.36 6.19584 5.37 6.18769 5.38 6.17949 5.39 6.17126 5.4 6.16299 5.41 6.1547 5.42 6.14639 5.43 6.13807 5.44 6.12975 5.45 6.12144 5.46 6.11313 5.47 6.10485 5.48 6.09659 5.49 6.08836 5.5 6.08017 5.51 6.07203 5.52 6.06395 5.53 6.05592 5.54 6.04797 5.55 6.04009 5.56 6.03229 5.57 6.02458 5.58 6.01697 5.59 6.00946 5.6 6.00207 5.61 5.99479 5.62 5.98764 5.63 5.98062 5.64 5.97374 5.65 5.967 5.66 5.96042 5.67 5.954 5.68 5.94775 5.69 5.94168 5.7 5.93578 5.71 5.93008 5.72 5.92457 5.73 5.91927 5.74 5.91418 5.75 5.9093 5.76 5.90465 5.77 5.90023 5.78 5.89605 5.79 5.89212 5.8 5.88844 5.81 5.88502 5.82 5.88187 5.83 5.879 5.84 5.8764 5.85 5.8741 5.86 5.87209 5.87 5.87038 5.88 5.86898 5.89 5.86787 5.9 5.86705 5.91 5.86653 5.92 5.8663 5.93 5.86635 5.94 5.86668 5.95 5.8673 5.96 5.86819 5.97 5.86935 5.98 5.87079 5.99 5.87249 6 5.87446 6.01 5.87669 6.02 5.87918 6.03 5.88193 6.04 5.88492 6.05 5.88817 6.06 5.89167 6.07 5.89541 6.08 5.89939 6.09 5.9036 6.1 5.90806 6.11 5.91274 6.12 5.91766 6.13 5.9228 6.14 5.92816 6.15 5.93374 6.16 5.93955 6.17 5.94556 6.18 5.95179 6.19 5.95822 6.2 5.96486 6.21 5.9717 6.22 5.97875 6.23 5.98598 6.24 5.99342 6.25 6.00104 6.26 6.00885 6.27 6.01684 6.28 6.02502 6.29 6.03337 6.3 6.0419 6.31 6.0506 6.32 6.05947 6.33 6.06851 6.34 6.07771 6.35 6.08707 6.36 6.09659 6.37 6.10627 6.38 6.11609 6.39 6.12607 6.4 6.13619 6.41 6.14645 6.42 6.15686 6.43 6.1674 6.44 6.17807 6.45 6.18887 6.46 6.19981 6.47 6.21086 6.48 6.22204 6.49 6.23334 6.5 6.24475 6.51 6.25628 6.52 6.26792 6.53 6.27966 6.54 6.29151 6.55 6.30346 6.56 6.31551 6.57 6.32765 6.58 6.33988 6.59 6.35221 6.6 6.36462 6.61 6.37711 6.62 6.38968 6.63 6.40233 6.64 6.41506 6.65 6.42786 6.66 6.44072 6.67 6.45365 6.68 6.46664 6.69 6.47969 6.7 6.4928 6.71 6.50596 6.72 6.51917 6.73 6.53243 6.74 6.54574 6.75 6.55908 6.76 6.57246 6.77 6.58588 6.78 6.59933 6.79 6.61282 6.8 6.62632 6.81 6.63986 6.82 6.65341 6.83 6.66698 6.84 6.68056 6.85 6.69416 6.86 6.70776 6.87 6.72137 6.88 6.73499 6.89 6.7486 6.9 6.76221 6.91 6.77581 6.92 6.78941 6.93 6.80299 6.94 6.81656 6.95 6.83011 6.96 6.84364 6.97 6.85714 6.98 6.87062 6.99 6.88407 7 6.89748 7.01 6.91086 7.02 6.9242 7.03 6.9375 7.04 6.95075 7.05 6.96396 7.06 6.97711 7.07 6.99021 7.08 7.00326 7.09 7.01624 7.1 7.02916 7.11 7.04202 7.12 7.0548 7.13 7.06752 7.14 7.08016 7.15 7.09272 7.16 7.10521 7.17 7.1176 7.18 7.12992 7.19 7.14214 7.2 7.15427 7.21 7.1663 7.22 7.17824 7.23 7.19008 7.24 7.20181 7.25 7.21343 7.26 7.22494 7.27 7.23634 7.28 7.24762 7.29 7.25879 7.3 7.26983 7.31 7.28075 7.32 7.29153 7.33 7.30219 7.34 7.31271 7.35 7.32311 7.36 7.33337 7.37 7.34351 7.38 7.35353 7.39 7.36343 7.4 7.37322 7.41 7.38289 7.42 7.39245 7.43 7.40191 7.44 7.41125 7.45 7.4205 7.46 7.42965 7.47 7.43871 7.48 7.44767 7.49 7.45654 7.5 7.46532 7.51 7.47402 7.52 7.48264 7.53 7.49118 7.54 7.49964 7.55 7.50803 7.56 7.51635 7.57 7.52461 7.58 7.5328 7.59 7.54093 7.6 7.549 7.61 7.55702 7.62 7.56498 7.63 7.57289 7.64 7.58076 7.65 7.58858 7.66 7.59637 7.67 7.60411 7.68 7.61182 7.69 7.6195 7.7 7.62715 7.71 7.63477 7.72 7.64237 7.73 7.64994 7.74 7.6575 7.75 7.66505 7.76 7.67258 7.77 7.6801 7.78 7.68762 7.79 7.69513 7.8 7.70265 7.81 7.71016 7.82 7.71768 7.83 7.72521 7.84 7.73275 7.85 7.74031 7.86 7.74788 7.87 7.75547 7.88 7.76308 7.89 7.77072 7.9 7.77839 7.91 7.78609 7.92 7.79382 7.93 7.80159 7.94 7.8094 7.95 7.81725 7.96 7.82515 7.97 7.8331 7.98 7.8411 7.99 7.84915 8 7.85726 8.01 7.86543 8.02 7.87367 8.03 7.88197 8.04 7.89034 8.05 7.89878 8.06 7.90729 8.07 7.91588 8.08 7.92456 8.09 7.93331 8.1 7.94216 8.11 7.95109 8.12 7.96011 8.13 7.96923 8.14 7.97844 8.15 7.98776 8.16 7.99718 8.17 8.00671 8.18 8.01634 8.19 8.02609 8.2 8.03596 8.21 8.04594 8.22 8.05604 8.23 8.06626 8.24 8.07662 8.25 8.0871 8.26 8.09771 8.27 8.10846 8.28 8.11935 8.29 8.13038 8.3 8.14155 8.31 8.15287 8.32 8.16434 8.33 8.17596 8.34 8.18774 8.35 8.19967 8.36 8.21177 8.37 8.22403 8.38 8.23646 8.39 8.24906 8.4 8.26183 8.41 8.27478 8.42 8.2879 8.43 8.30121 8.44 8.3147 8.45 8.32838 8.46 8.34225 8.47 8.35631 8.48 8.37057 8.49 8.38502 8.5 8.39968 8.51 8.41454 8.52 8.4296 8.53 8.44485 8.54 8.4603 8.55 8.47594 8.56 8.49176 8.57 8.50777 8.58 8.52396 8.59 8.54033 8.6 8.55688 8.61 8.57359 8.62 8.59048 8.63 8.60754 8.64 8.62476 8.65 8.64214 8.66 8.65968 8.67 8.67737 8.68 8.69522 8.69 8.71322 8.7 8.73137 8.71 8.74966 8.72 8.76809 8.73 8.78666 8.74 8.80537 8.75 8.82421 8.76 8.84318 8.77 8.86228 8.78 8.8815 8.79 8.90085 8.8 8.92031 8.81 8.93989 8.82 8.95958 8.83 8.97938 8.84 8.99929 8.85 9.0193 8.86 9.03942 8.87 9.05963 8.88 9.07994 8.89 9.10035 8.9 9.12084 8.91 9.14142 8.92 9.16208 8.93 9.18283 8.94 9.20366 8.95 9.22456 8.96 9.24553 8.97 9.26658 8.98 9.28769 8.99 9.30887 9 9.33011 9.01 9.3514 9.02 9.37276 9.03 9.39416 9.04 9.41562 9.05 9.43712 9.06 9.45867 9.07 9.48026 9.08 9.50189 9.09 9.52356 9.1 9.54526 9.11 9.56698 9.12 9.58874 9.13 9.61052 9.14 9.63232 9.15 9.65414 9.16 9.67598 9.17 9.69783 9.18 9.71969 9.19 9.74156 9.2 9.76343 gsl/doc/examples/ieee.txt0000644000175000017500000000024313536674414013764 0ustar eddedd f= 1.01010101010101010101011*2^-2 fd= 1.0101010101010101010101100000000000000000000000000000*2^-2 d= 1.0101010101010101010101010101010101010101010101010101*2^-2 gsl/doc/examples/fitting2.c0000644000175000017500000000340713536674414014213 0ustar eddedd#include #include int main (int argc, char **argv) { int i, n; double xi, yi, ei, chisq; gsl_matrix *X, *cov; gsl_vector *y, *w, *c; if (argc != 2) { fprintf (stderr,"usage: fit n < data\n"); exit (-1); } n = atoi (argv[1]); X = gsl_matrix_alloc (n, 3); y = gsl_vector_alloc (n); w = gsl_vector_alloc (n); c = gsl_vector_alloc (3); cov = gsl_matrix_alloc (3, 3); for (i = 0; i < n; i++) { int count = fscanf (stdin, "%lg %lg %lg", &xi, &yi, &ei); if (count != 3) { fprintf (stderr, "error reading file\n"); exit (-1); } printf ("%g %g +/- %g\n", xi, yi, ei); gsl_matrix_set (X, i, 0, 1.0); gsl_matrix_set (X, i, 1, xi); gsl_matrix_set (X, i, 2, xi*xi); gsl_vector_set (y, i, yi); gsl_vector_set (w, i, 1.0/(ei*ei)); } { gsl_multifit_linear_workspace * work = gsl_multifit_linear_alloc (n, 3); gsl_multifit_wlinear (X, w, y, c, cov, &chisq, work); gsl_multifit_linear_free (work); } #define C(i) (gsl_vector_get(c,(i))) #define COV(i,j) (gsl_matrix_get(cov,(i),(j))) { printf ("# best fit: Y = %g + %g X + %g X^2\n", C(0), C(1), C(2)); printf ("# covariance matrix:\n"); printf ("[ %+.5e, %+.5e, %+.5e \n", COV(0,0), COV(0,1), COV(0,2)); printf (" %+.5e, %+.5e, %+.5e \n", COV(1,0), COV(1,1), COV(1,2)); printf (" %+.5e, %+.5e, %+.5e ]\n", COV(2,0), COV(2,1), COV(2,2)); printf ("# chisq = %g\n", chisq); } gsl_matrix_free (X); gsl_vector_free (y); gsl_vector_free (w); gsl_vector_free (c); gsl_matrix_free (cov); return 0; } gsl/doc/examples/rootnewt.c0000644000175000017500000000227113536674414014344 0ustar eddedd#include #include #include #include #include "demo_fn.h" #include "demo_fn.c" int main (void) { int status; int iter = 0, max_iter = 100; const gsl_root_fdfsolver_type *T; gsl_root_fdfsolver *s; double x0, x = 5.0, r_expected = sqrt (5.0); gsl_function_fdf FDF; struct quadratic_params params = {1.0, 0.0, -5.0}; FDF.f = &quadratic; FDF.df = &quadratic_deriv; FDF.fdf = &quadratic_fdf; FDF.params = ¶ms; T = gsl_root_fdfsolver_newton; s = gsl_root_fdfsolver_alloc (T); gsl_root_fdfsolver_set (s, &FDF, x); printf ("using %s method\n", gsl_root_fdfsolver_name (s)); printf ("%-5s %10s %10s %10s\n", "iter", "root", "err", "err(est)"); do { iter++; status = gsl_root_fdfsolver_iterate (s); x0 = x; x = gsl_root_fdfsolver_root (s); status = gsl_root_test_delta (x, x0, 0, 1e-3); if (status == GSL_SUCCESS) printf ("Converged:\n"); printf ("%5d %10.7f %+10.7f %10.7f\n", iter, x, x - r_expected, x - x0); } while (status == GSL_CONTINUE && iter < max_iter); gsl_root_fdfsolver_free (s); return status; } gsl/doc/examples/ode-initval.txt0000644000175000017500000000716713536674414015304 0ustar eddedd1.00000e+00 -1.45686e+00 -1.15474e+01 2.00000e+00 -1.95608e+00 6.90647e-02 3.00000e+00 -1.88481e+00 7.36425e-02 4.00000e+00 -1.80842e+00 7.93679e-02 5.00000e+00 -1.72550e+00 8.68268e-02 6.00000e+00 -1.63383e+00 9.71295e-02 7.00000e+00 -1.52952e+00 1.12715e-01 8.00000e+00 -1.40454e+00 1.40376e-01 9.00000e+00 -1.23605e+00 2.10149e-01 1.00000e+01 -8.53916e-01 9.01984e-01 1.10000e+01 1.99274e+00 -6.69455e-02 1.20000e+01 1.92381e+00 -7.10572e-02 1.30000e+01 1.85032e+00 -7.61105e-02 1.40000e+01 1.77113e+00 -8.25398e-02 1.50000e+01 1.68453e+00 -9.11205e-02 1.60000e+01 1.58767e+00 -1.03413e-01 1.70000e+01 1.47528e+00 -1.23181e-01 1.80000e+01 1.33506e+00 -1.62840e-01 1.90000e+01 1.12079e+00 -3.05570e-01 2.00000e+01 -1.59837e+00 -9.82301e+00 2.10000e+01 -1.96148e+00 6.87433e-02 2.20000e+01 -1.89057e+00 7.32476e-02 2.30000e+01 -1.81462e+00 7.88663e-02 2.40000e+01 -1.73228e+00 8.61590e-02 2.50000e+01 -1.64141e+00 9.61768e-02 2.60000e+01 -1.53829e+00 1.11197e-01 2.70000e+01 -1.41542e+00 1.37412e-01 2.80000e+01 -1.25215e+00 2.00819e-01 2.90000e+01 -9.15979e-01 6.98133e-01 3.00000e+01 1.99798e+00 -6.66422e-02 3.10000e+01 1.92936e+00 -7.07053e-02 3.20000e+01 1.85626e+00 -7.56719e-02 3.30000e+01 1.77758e+00 -8.19715e-02 3.40000e+01 1.69164e+00 -9.03420e-02 3.50000e+01 1.59573e+00 -1.02252e-01 3.60000e+01 1.48485e+00 -1.21185e-01 3.70000e+01 1.34764e+00 -1.58256e-01 3.80000e+01 1.14377e+00 -2.81644e-01 3.90000e+01 -5.76613e-01 -1.26648e+01 4.00000e+01 -1.96686e+00 6.84268e-02 4.10000e+01 -1.89629e+00 7.28598e-02 4.20000e+01 -1.82078e+00 7.83750e-02 4.30000e+01 -1.73901e+00 8.55074e-02 4.40000e+01 -1.64891e+00 9.52534e-02 4.50000e+01 -1.54695e+00 1.09742e-01 4.60000e+01 -1.42608e+00 1.34632e-01 4.70000e+01 -1.26756e+00 1.92566e-01 4.80000e+01 -9.65230e-01 5.67682e-01 4.90000e+01 2.00319e+00 -6.62229e-02 5.00000e+01 1.93489e+00 -7.03588e-02 5.10000e+01 1.86218e+00 -7.52414e-02 5.20000e+01 1.78398e+00 -8.14156e-02 5.30000e+01 1.69869e+00 -8.95845e-02 5.40000e+01 1.60370e+00 -1.01133e-01 5.50000e+01 1.49428e+00 -1.19287e-01 5.60000e+01 1.35987e+00 -1.54035e-01 5.70000e+01 1.16505e+00 -2.61951e-01 5.80000e+01 1.42891e-01 -6.13207e+00 5.90000e+01 -1.97221e+00 6.81150e-02 6.00000e+01 -1.90199e+00 7.24784e-02 6.10000e+01 -1.82690e+00 7.78933e-02 6.20000e+01 -1.74568e+00 8.48713e-02 6.30000e+01 -1.65634e+00 9.43576e-02 6.40000e+01 -1.55550e+00 1.08345e-01 6.50000e+01 -1.43653e+00 1.32018e-01 6.60000e+01 -1.28235e+00 1.85208e-01 6.70000e+01 -1.00603e+00 4.78809e-01 6.80000e+01 2.00833e+00 -6.45142e-02 6.90000e+01 1.94039e+00 -7.00179e-02 7.00000e+01 1.86806e+00 -7.48186e-02 7.10000e+01 1.79034e+00 -8.08716e-02 7.20000e+01 1.70568e+00 -8.88470e-02 7.30000e+01 1.61158e+00 -1.00051e-01 7.40000e+01 1.50355e+00 -1.17479e-01 7.50000e+01 1.37179e+00 -1.50135e-01 7.60000e+01 1.18491e+00 -2.45468e-01 7.70000e+01 4.84591e-01 -3.05853e+00 7.80000e+01 -1.97754e+00 6.78077e-02 7.90000e+01 -1.90765e+00 7.21034e-02 8.00000e+01 -1.83299e+00 7.74210e-02 8.10000e+01 -1.75231e+00 8.42502e-02 8.20000e+01 -1.66370e+00 9.34883e-02 8.30000e+01 -1.56393e+00 1.07003e-01 8.40000e+01 -1.44678e+00 1.29554e-01 8.50000e+01 -1.29661e+00 1.78603e-01 8.60000e+01 -1.04093e+00 4.15185e-01 8.70000e+01 2.01299e+00 -4.86619e-02 8.80000e+01 1.94586e+00 -6.96821e-02 8.90000e+01 1.87390e+00 -7.44034e-02 9.00000e+01 1.79665e+00 -8.03392e-02 9.10000e+01 1.71261e+00 -8.81285e-02 9.20000e+01 1.61938e+00 -9.90050e-02 9.30000e+01 1.51269e+00 -1.15754e-01 9.40000e+01 1.38341e+00 -1.46518e-01 9.50000e+01 1.20359e+00 -2.31470e-01 9.60000e+01 6.68012e-01 -1.79285e+00 9.70000e+01 -1.98284e+00 6.75047e-02 9.80000e+01 -1.91329e+00 7.17346e-02 9.90000e+01 -1.83904e+00 7.69577e-02 1.00000e+02 -1.75889e+00 8.36435e-02 gsl/doc/examples/fftreal.c0000644000175000017500000000210413536674414014101 0ustar eddedd#include #include #include #include #include int main (void) { int i, n = 100; double data[n]; gsl_fft_real_wavetable * real; gsl_fft_halfcomplex_wavetable * hc; gsl_fft_real_workspace * work; for (i = 0; i < n; i++) { data[i] = 0.0; } for (i = n / 3; i < 2 * n / 3; i++) { data[i] = 1.0; } for (i = 0; i < n; i++) { printf ("%d: %e\n", i, data[i]); } printf ("\n"); work = gsl_fft_real_workspace_alloc (n); real = gsl_fft_real_wavetable_alloc (n); gsl_fft_real_transform (data, 1, n, real, work); gsl_fft_real_wavetable_free (real); for (i = 11; i < n; i++) { data[i] = 0; } hc = gsl_fft_halfcomplex_wavetable_alloc (n); gsl_fft_halfcomplex_inverse (data, 1, n, hc, work); gsl_fft_halfcomplex_wavetable_free (hc); for (i = 0; i < n; i++) { printf ("%d: %e\n", i, data[i]); } gsl_fft_real_workspace_free (work); return 0; } gsl/doc/examples/sortsmall.c0000644000175000017500000000116413536674414014503 0ustar eddedd#include #include int main (void) { const gsl_rng_type * T; gsl_rng * r; size_t i, k = 5, N = 100000; double * x = malloc (N * sizeof(double)); double * small = malloc (k * sizeof(double)); gsl_rng_env_setup(); T = gsl_rng_default; r = gsl_rng_alloc (T); for (i = 0; i < N; i++) { x[i] = gsl_rng_uniform(r); } gsl_sort_smallest (small, k, x, 1, N); printf ("%zu smallest values from %zu\n", k, N); for (i = 0; i < k; i++) { printf ("%zu: %.18f\n", i, small[i]); } free (x); free (small); gsl_rng_free (r); return 0; } gsl/doc/examples/blas.txt0000644000175000017500000000004413536674414013775 0ustar eddedd[ 367.76, 368.12 674.06, 674.72 ] gsl/doc/examples/statsort.c0000644000175000017500000000175013536674414014347 0ustar eddedd#include #include #include int main(void) { double data[5] = {17.2, 18.1, 16.5, 18.3, 12.6}; double median, upperq, lowerq; printf ("Original dataset: %g, %g, %g, %g, %g\n", data[0], data[1], data[2], data[3], data[4]); gsl_sort (data, 1, 5); printf ("Sorted dataset: %g, %g, %g, %g, %g\n", data[0], data[1], data[2], data[3], data[4]); median = gsl_stats_median_from_sorted_data (data, 1, 5); upperq = gsl_stats_quantile_from_sorted_data (data, 1, 5, 0.75); lowerq = gsl_stats_quantile_from_sorted_data (data, 1, 5, 0.25); printf ("The median is %g\n", median); printf ("The upper quartile is %g\n", upperq); printf ("The lower quartile is %g\n", lowerq); return 0; } gsl/doc/examples/matrixw.c0000644000175000017500000000145113536674414014155 0ustar eddedd#include #include int main (void) { int i, j, k = 0; gsl_matrix * m = gsl_matrix_alloc (100, 100); gsl_matrix * a = gsl_matrix_alloc (100, 100); for (i = 0; i < 100; i++) for (j = 0; j < 100; j++) gsl_matrix_set (m, i, j, 0.23 + i + j); { FILE * f = fopen ("test.dat", "wb"); gsl_matrix_fwrite (f, m); fclose (f); } { FILE * f = fopen ("test.dat", "rb"); gsl_matrix_fread (f, a); fclose (f); } for (i = 0; i < 100; i++) for (j = 0; j < 100; j++) { double mij = gsl_matrix_get (m, i, j); double aij = gsl_matrix_get (a, i, j); if (mij != aij) k++; } gsl_matrix_free (m); gsl_matrix_free (a); printf ("differences = %d (should be zero)\n", k); return (k > 0); } gsl/doc/examples/nlfit4.c0000644000175000017500000001267713536674414013676 0ustar eddedd#include #include #include #include #include #include #include #include #include /* parameters for functions */ struct model_params { double alpha; gsl_spmatrix *J; }; /* penalty function */ int penalty_f (const gsl_vector * x, void *params, gsl_vector * f) { struct model_params *par = (struct model_params *) params; const double sqrt_alpha = sqrt(par->alpha); const size_t p = x->size; size_t i; double sum = 0.0; for (i = 0; i < p; ++i) { double xi = gsl_vector_get(x, i); gsl_vector_set(f, i, sqrt_alpha*(xi - 1.0)); sum += xi * xi; } gsl_vector_set(f, p, sum - 0.25); return GSL_SUCCESS; } int penalty_df (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x, const gsl_vector * u, void * params, gsl_vector * v, gsl_matrix * JTJ) { struct model_params *par = (struct model_params *) params; const size_t p = x->size; size_t j; /* store 2*x in last row of J */ for (j = 0; j < p; ++j) { double xj = gsl_vector_get(x, j); gsl_spmatrix_set(par->J, p, j, 2.0 * xj); } /* compute v = op(J) u */ if (v) gsl_spblas_dgemv(TransJ, 1.0, par->J, u, 0.0, v); if (JTJ) { gsl_vector_view diag = gsl_matrix_diagonal(JTJ); /* compute J^T J = [ alpha*I_p + 4 x x^T ] */ gsl_matrix_set_zero(JTJ); /* store 4 x x^T in lower half of JTJ */ gsl_blas_dsyr(CblasLower, 4.0, x, JTJ); /* add alpha to diag(JTJ) */ gsl_vector_add_constant(&diag.vector, par->alpha); } return GSL_SUCCESS; } int penalty_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { const size_t p = x->size; double normv = gsl_blas_dnrm2(v); gsl_vector_set_zero(fvv); gsl_vector_set(fvv, p, 2.0 * normv * normv); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } void solve_system(const gsl_vector *x0, gsl_multilarge_nlinear_fdf *fdf, gsl_multilarge_nlinear_parameters *params) { const gsl_multilarge_nlinear_type *T = gsl_multilarge_nlinear_trust; const size_t max_iter = 200; const double xtol = 1.0e-8; const double gtol = 1.0e-8; const double ftol = 1.0e-8; const size_t n = fdf->n; const size_t p = fdf->p; gsl_multilarge_nlinear_workspace *work = gsl_multilarge_nlinear_alloc(T, params, n, p); gsl_vector * f = gsl_multilarge_nlinear_residual(work); gsl_vector * x = gsl_multilarge_nlinear_position(work); int info; double chisq0, chisq, rcond, xsq; struct timeval tv0, tv1; gettimeofday(&tv0, NULL); /* initialize solver */ gsl_multilarge_nlinear_init(x0, fdf, work); /* store initial cost */ gsl_blas_ddot(f, f, &chisq0); /* iterate until convergence */ gsl_multilarge_nlinear_driver(max_iter, xtol, gtol, ftol, NULL, NULL, &info, work); gettimeofday(&tv1, NULL); /* store final cost */ gsl_blas_ddot(f, f, &chisq); /* compute final ||x||^2 */ gsl_blas_ddot(x, x, &xsq); /* store cond(J(x)) */ gsl_multilarge_nlinear_rcond(&rcond, work); /* print summary */ fprintf(stderr, "%-25s %-5zu %-4zu %-5zu %-6zu %-4zu %-10.4e %-10.4e %-7.2f %-11.4e %.2f\n", gsl_multilarge_nlinear_trs_name(work), gsl_multilarge_nlinear_niter(work), fdf->nevalf, fdf->nevaldfu, fdf->nevaldf2, fdf->nevalfvv, chisq0, chisq, 1.0 / rcond, xsq, (tv1.tv_sec - tv0.tv_sec) + 1.0e-6 * (tv1.tv_usec - tv0.tv_usec)); gsl_multilarge_nlinear_free(work); } int main (void) { const size_t p = 2000; const size_t n = p + 1; gsl_vector *f = gsl_vector_alloc(n); gsl_vector *x = gsl_vector_alloc(p); /* allocate sparse Jacobian matrix with 2*p non-zero elements in triplet format */ gsl_spmatrix *J = gsl_spmatrix_alloc_nzmax(n, p, 2 * p, GSL_SPMATRIX_TRIPLET); gsl_multilarge_nlinear_fdf fdf; gsl_multilarge_nlinear_parameters fdf_params = gsl_multilarge_nlinear_default_parameters(); struct model_params params; size_t i; params.alpha = 1.0e-5; params.J = J; /* define function to be minimized */ fdf.f = penalty_f; fdf.df = penalty_df; fdf.fvv = penalty_fvv; fdf.n = n; fdf.p = p; fdf.params = ¶ms; for (i = 0; i < p; ++i) { /* starting point */ gsl_vector_set(x, i, i + 1.0); /* store sqrt(alpha)*I_p in upper p-by-p block of J */ gsl_spmatrix_set(J, i, i, sqrt(params.alpha)); } fprintf(stderr, "%-25s %-4s %-4s %-5s %-6s %-4s %-10s %-10s %-7s %-11s %-10s\n", "Method", "NITER", "NFEV", "NJUEV", "NJTJEV", "NAEV", "Init Cost", "Final cost", "cond(J)", "Final |x|^2", "Time (s)"); fdf_params.scale = gsl_multilarge_nlinear_scale_levenberg; fdf_params.trs = gsl_multilarge_nlinear_trs_lm; solve_system(x, &fdf, &fdf_params); fdf_params.trs = gsl_multilarge_nlinear_trs_lmaccel; solve_system(x, &fdf, &fdf_params); fdf_params.trs = gsl_multilarge_nlinear_trs_dogleg; solve_system(x, &fdf, &fdf_params); fdf_params.trs = gsl_multilarge_nlinear_trs_ddogleg; solve_system(x, &fdf, &fdf_params); fdf_params.trs = gsl_multilarge_nlinear_trs_subspace2D; solve_system(x, &fdf, &fdf_params); fdf_params.trs = gsl_multilarge_nlinear_trs_cgst; solve_system(x, &fdf, &fdf_params); gsl_vector_free(f); gsl_vector_free(x); gsl_spmatrix_free(J); return 0; } gsl/doc/examples/impulse.c0000644000175000017500000000416613536674414014146 0ustar eddedd#include #include #include #include #include #include #include int main(void) { const size_t N = 1000; /* length of time series */ const size_t K = 25; /* window size */ const double t = 4.0; /* number of scale factors for outlier detection */ gsl_vector *x = gsl_vector_alloc(N); /* input vector */ gsl_vector *y = gsl_vector_alloc(N); /* output (filtered) vector */ gsl_vector *xmedian = gsl_vector_alloc(N); /* window medians */ gsl_vector *xsigma = gsl_vector_alloc(N); /* window scale estimates */ gsl_vector_int *ioutlier = gsl_vector_int_alloc(N); /* outlier detected? */ gsl_filter_impulse_workspace * w = gsl_filter_impulse_alloc(K); gsl_rng *r = gsl_rng_alloc(gsl_rng_default); size_t noutlier; size_t i; /* generate input signal */ for (i = 0; i < N; ++i) { double xi = 10.0 * sin(2.0 * M_PI * i / (double) N); double ei = gsl_ran_gaussian(r, 2.0); double u = gsl_rng_uniform(r); double outlier = (u < 0.01) ? 15.0*GSL_SIGN(ei) : 0.0; gsl_vector_set(x, i, xi + ei + outlier); } /* apply impulse detection filter */ gsl_filter_impulse(GSL_FILTER_END_TRUNCATE, GSL_FILTER_SCALE_QN, t, x, y, xmedian, xsigma, &noutlier, ioutlier, w); /* print results */ for (i = 0; i < N; ++i) { double xi = gsl_vector_get(x, i); double yi = gsl_vector_get(y, i); double xmedi = gsl_vector_get(xmedian, i); double xsigmai = gsl_vector_get(xsigma, i); int outlier = gsl_vector_int_get(ioutlier, i); printf("%zu %f %f %f %f %d\n", i, xi, yi, xmedi + t * xsigmai, xmedi - t * xsigmai, outlier); } gsl_vector_free(x); gsl_vector_free(y); gsl_vector_free(xmedian); gsl_vector_free(xsigma); gsl_vector_int_free(ioutlier); gsl_filter_impulse_free(w); gsl_rng_free(r); return 0; } gsl/doc/examples/siman_tsp.c0000644000175000017500000002242313536674414014461 0ustar eddedd/* siman/siman_tsp.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000 Mark Galassi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include /* set up parameters for this simulated annealing run */ #define N_TRIES 200 /* how many points do we try before stepping */ #define ITERS_FIXED_T 2000 /* how many iterations for each T? */ #define STEP_SIZE 1.0 /* max step size in random walk */ #define K 1.0 /* Boltzmann constant */ #define T_INITIAL 5000.0 /* initial temperature */ #define MU_T 1.002 /* damping factor for temperature */ #define T_MIN 5.0e-1 gsl_siman_params_t params = {N_TRIES, ITERS_FIXED_T, STEP_SIZE, K, T_INITIAL, MU_T, T_MIN}; struct s_tsp_city { const char * name; double lat, longitude; /* coordinates */ }; typedef struct s_tsp_city Stsp_city; void prepare_distance_matrix(void); void exhaustive_search(void); void print_distance_matrix(void); double city_distance(Stsp_city c1, Stsp_city c2); double Etsp(void *xp); double Mtsp(void *xp, void *yp); void Stsp(const gsl_rng * r, void *xp, double step_size); void Ptsp(void *xp); /* in this table, latitude and longitude are obtained from the US Census Bureau, at http://www.census.gov/cgi-bin/gazetteer */ Stsp_city cities[] = {{"Santa Fe", 35.68, 105.95}, {"Phoenix", 33.54, 112.07}, {"Albuquerque", 35.12, 106.62}, {"Clovis", 34.41, 103.20}, {"Durango", 37.29, 107.87}, {"Dallas", 32.79, 96.77}, {"Tesuque", 35.77, 105.92}, {"Grants", 35.15, 107.84}, {"Los Alamos", 35.89, 106.28}, {"Las Cruces", 32.34, 106.76}, {"Cortez", 37.35, 108.58}, {"Gallup", 35.52, 108.74}}; #define N_CITIES (sizeof(cities)/sizeof(Stsp_city)) double distance_matrix[N_CITIES][N_CITIES]; /* distance between two cities */ double city_distance(Stsp_city c1, Stsp_city c2) { const double earth_radius = 6375.000; /* 6000KM approximately */ /* sin and cos of lat and long; must convert to radians */ double sla1 = sin(c1.lat*M_PI/180), cla1 = cos(c1.lat*M_PI/180), slo1 = sin(c1.longitude*M_PI/180), clo1 = cos(c1.longitude*M_PI/180); double sla2 = sin(c2.lat*M_PI/180), cla2 = cos(c2.lat*M_PI/180), slo2 = sin(c2.longitude*M_PI/180), clo2 = cos(c2.longitude*M_PI/180); double x1 = cla1*clo1; double x2 = cla2*clo2; double y1 = cla1*slo1; double y2 = cla2*slo2; double z1 = sla1; double z2 = sla2; double dot_product = x1*x2 + y1*y2 + z1*z2; double angle = acos(dot_product); /* distance is the angle (in radians) times the earth radius */ return angle*earth_radius; } /* energy for the travelling salesman problem */ double Etsp(void *xp) { /* an array of N_CITIES integers describing the order */ int *route = (int *) xp; double E = 0; unsigned int i; for (i = 0; i < N_CITIES; ++i) { /* use the distance_matrix to optimize this calculation; it had better be allocated!! */ E += distance_matrix[route[i]][route[(i + 1) % N_CITIES]]; } return E; } double Mtsp(void *xp, void *yp) { int *route1 = (int *) xp, *route2 = (int *) yp; double distance = 0; unsigned int i; for (i = 0; i < N_CITIES; ++i) { distance += ((route1[i] == route2[i]) ? 0 : 1); } return distance; } /* take a step through the TSP space */ void Stsp(const gsl_rng * r, void *xp, double step_size) { int x1, x2, dummy; int *route = (int *) xp; step_size = 0 ; /* prevent warnings about unused parameter */ /* pick the two cities to swap in the matrix; we leave the first city fixed */ x1 = (gsl_rng_get (r) % (N_CITIES-1)) + 1; do { x2 = (gsl_rng_get (r) % (N_CITIES-1)) + 1; } while (x2 == x1); dummy = route[x1]; route[x1] = route[x2]; route[x2] = dummy; } void Ptsp(void *xp) { unsigned int i; int *route = (int *) xp; printf(" ["); for (i = 0; i < N_CITIES; ++i) { printf(" %d ", route[i]); } printf("] "); } int main(void) { int x_initial[N_CITIES]; unsigned int i; const gsl_rng * r = gsl_rng_alloc (gsl_rng_env_setup()) ; gsl_ieee_env_setup (); prepare_distance_matrix(); /* set up a trivial initial route */ printf("# initial order of cities:\n"); for (i = 0; i < N_CITIES; ++i) { printf("# \"%s\"\n", cities[i].name); x_initial[i] = i; } printf("# distance matrix is:\n"); print_distance_matrix(); printf("# initial coordinates of cities (longitude and latitude)\n"); /* this can be plotted with */ /* ./siman_tsp > hhh ; grep city_coord hhh | awk '{print $2 " " $3}' | xyplot -ps -d "xy" > c.eps */ for (i = 0; i < N_CITIES+1; ++i) { printf("###initial_city_coord: %g %g \"%s\"\n", -cities[x_initial[i % N_CITIES]].longitude, cities[x_initial[i % N_CITIES]].lat, cities[x_initial[i % N_CITIES]].name); } /* exhaustive_search(); */ gsl_siman_solve(r, x_initial, Etsp, Stsp, Mtsp, Ptsp, NULL, NULL, NULL, N_CITIES*sizeof(int), params); printf("# final order of cities:\n"); for (i = 0; i < N_CITIES; ++i) { printf("# \"%s\"\n", cities[x_initial[i]].name); } printf("# final coordinates of cities (longitude and latitude)\n"); /* this can be plotted with */ /* ./siman_tsp > hhh ; grep city_coord hhh | awk '{print $2 " " $3}' | xyplot -ps -d "xy" > c.eps */ for (i = 0; i < N_CITIES+1; ++i) { printf("###final_city_coord: %g %g %s\n", -cities[x_initial[i % N_CITIES]].longitude, cities[x_initial[i % N_CITIES]].lat, cities[x_initial[i % N_CITIES]].name); } printf("# "); fflush(stdout); #if 0 system("date"); #endif /* 0 */ fflush(stdout); return 0; } void prepare_distance_matrix() { unsigned int i, j; double dist; for (i = 0; i < N_CITIES; ++i) { for (j = 0; j < N_CITIES; ++j) { if (i == j) { dist = 0; } else { dist = city_distance(cities[i], cities[j]); } distance_matrix[i][j] = dist; } } } void print_distance_matrix() { unsigned int i, j; for (i = 0; i < N_CITIES; ++i) { printf("# "); for (j = 0; j < N_CITIES; ++j) { printf("%15.8f ", distance_matrix[i][j]); } printf("\n"); } } /* [only works for 12] search the entire space for solutions */ static double best_E = 1.0e100, second_E = 1.0e100, third_E = 1.0e100; static int best_route[N_CITIES]; static int second_route[N_CITIES]; static int third_route[N_CITIES]; static void do_all_perms(int *route, int n); void exhaustive_search() { static int initial_route[N_CITIES] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; printf("\n# "); fflush(stdout); #if 0 system("date"); #endif fflush(stdout); do_all_perms(initial_route, 1); printf("\n# "); fflush(stdout); #if 0 system("date"); #endif /* 0 */ fflush(stdout); printf("# exhaustive best route: "); Ptsp(best_route); printf("\n# its energy is: %g\n", best_E); printf("# exhaustive second_best route: "); Ptsp(second_route); printf("\n# its energy is: %g\n", second_E); printf("# exhaustive third_best route: "); Ptsp(third_route); printf("\n# its energy is: %g\n", third_E); } /* James Theiler's recursive algorithm for generating all routes */ static void do_all_perms(int *route, int n) { if (n == (N_CITIES-1)) { /* do it! calculate the energy/cost for that route */ double E; E = Etsp(route); /* TSP energy function */ /* now save the best 3 energies and routes */ if (E < best_E) { third_E = second_E; memcpy(third_route, second_route, N_CITIES*sizeof(*route)); second_E = best_E; memcpy(second_route, best_route, N_CITIES*sizeof(*route)); best_E = E; memcpy(best_route, route, N_CITIES*sizeof(*route)); } else if (E < second_E) { third_E = second_E; memcpy(third_route, second_route, N_CITIES*sizeof(*route)); second_E = E; memcpy(second_route, route, N_CITIES*sizeof(*route)); } else if (E < third_E) { third_E = E; memcpy(route, third_route, N_CITIES*sizeof(*route)); } } else { int new_route[N_CITIES]; unsigned int j; int swap_tmp; memcpy(new_route, route, N_CITIES*sizeof(*route)); for (j = n; j < N_CITIES; ++j) { swap_tmp = new_route[j]; new_route[j] = new_route[n]; new_route[n] = swap_tmp; do_all_perms(new_route, n+1); } } } gsl/doc/examples/nlfit.txt0000664000175000017500000000600614057135461014167 0ustar eddedddata: 0 6.08035 0.6 data: 0.030303 5.72691 0.577782 data: 0.0606061 6.4974 0.55655 data: 0.0909091 5.75605 0.536263 data: 0.121212 5.68436 0.516876 data: 0.151515 4.34687 0.498352 data: 0.181818 3.65452 0.48065 data: 0.212121 4.32235 0.463735 data: 0.242424 4.45822 0.447572 data: 0.272727 4.7074 0.432127 data: 0.30303 4.16632 0.417368 data: 0.333333 3.5098 0.403265 data: 0.363636 3.63752 0.389789 data: 0.393939 3.83761 0.376912 data: 0.424242 3.94907 0.364607 data: 0.454545 3.33503 0.352848 data: 0.484848 3.19817 0.341613 data: 0.515152 3.31111 0.330876 data: 0.545455 2.9914 0.320617 data: 0.575758 2.85085 0.310813 data: 0.606061 3.19909 0.301445 data: 0.636364 2.81742 0.292494 data: 0.666667 2.7572 0.28394 data: 0.69697 2.50482 0.275766 data: 0.727273 2.52312 0.267955 data: 0.757576 2.62175 0.260492 data: 0.787879 2.54545 0.25336 data: 0.818182 2.28037 0.246545 data: 0.848485 2.36571 0.240033 data: 0.878788 2.68311 0.233811 data: 0.909091 2.2316 0.227865 data: 0.939394 2.1639 0.222183 data: 0.969697 2.13757 0.216753 data: 1 1.57756 0.211565 data: 1.0303 2.18537 0.206607 data: 1.06061 2.01141 0.20187 data: 1.09091 1.9288 0.197343 data: 1.12121 2.06819 0.193018 data: 1.15152 2.18676 0.188884 data: 1.18182 1.7768 0.184935 data: 1.21212 2.02587 0.18116 data: 1.24242 2.09391 0.177554 data: 1.27273 1.61374 0.174108 data: 1.30303 1.60056 0.170814 data: 1.33333 2.02386 0.167668 data: 1.36364 1.49792 0.164661 data: 1.39394 1.89866 0.161787 data: 1.42424 1.81039 0.159042 data: 1.45455 1.50547 0.156418 data: 1.48485 1.49227 0.153911 data: 1.51515 1.70509 0.151515 data: 1.54545 1.4514 0.149226 data: 1.57576 1.46358 0.147039 data: 1.60606 1.5653 0.144948 data: 1.63636 1.5067 0.142951 data: 1.66667 1.42253 0.141042 data: 1.69697 1.58087 0.139219 data: 1.72727 1.37666 0.137476 data: 1.75758 1.46015 0.135811 data: 1.78788 1.13081 0.134219 data: 1.81818 1.29549 0.132699 data: 1.84848 1.35662 0.131246 data: 1.87879 1.28824 0.129857 data: 1.90909 1.21579 0.12853 data: 1.93939 1.09695 0.127263 data: 1.9697 1.47689 0.126051 data: 2 1.30115 0.124894 data: 2.0303 1.42664 0.123787 data: 2.06061 1.31155 0.12273 data: 2.09091 1.14556 0.12172 data: 2.12121 1.36655 0.120755 data: 2.15152 1.09851 0.119833 data: 2.18182 1.28158 0.118951 data: 2.21212 1.08619 0.118109 data: 2.24242 1.16302 0.117305 data: 2.27273 1.33972 0.116536 data: 2.30303 1.20407 0.115801 data: 2.33333 1.53524 0.115099 data: 2.36364 1.35035 0.114428 data: 2.39394 1.33771 0.113787 data: 2.42424 1.20728 0.113174 data: 2.45455 1.00765 0.112589 data: 2.48485 1.15719 0.112029 data: 2.51515 1.16569 0.111495 data: 2.54545 0.849359 0.110984 data: 2.57576 1.03712 0.110496 data: 2.60606 0.862432 0.110029 data: 2.63636 0.986106 0.109584 data: 2.66667 1.04112 0.109158 data: 2.69697 0.998598 0.108751 data: 2.72727 1.1036 0.108362 data: 2.75758 1.03726 0.10799 data: 2.78788 0.89665 0.107635 data: 2.81818 0.97155 0.107296 data: 2.84848 1.0701 0.106972 data: 2.87879 1.18989 0.106662 data: 2.90909 1.26335 0.106366 data: 2.93939 1.07273 0.106083 data: 2.9697 1.0773 0.105813 data: 3 1.19048 0.105554 gsl/doc/examples/combination.txt0000644000175000017500000000024213536674414015356 0ustar eddeddAll subsets of {0,1,2,3} by size: { } { 0 } { 1 } { 2 } { 3 } { 0 1 } { 0 2 } { 0 3 } { 1 2 } { 1 3 } { 2 3 } { 0 1 2 } { 0 1 3 } { 0 2 3 } { 1 2 3 } { 0 1 2 3 } gsl/doc/examples/const.txt0000644000175000017500000000012313536674414014200 0ustar eddeddlight travel time from Earth to Mars: minimum = 4.3 minutes maximum = 21.0 minutes gsl/doc/examples/roots.c0000644000175000017500000000254013536674414013630 0ustar eddedd#include #include #include #include #include "demo_fn.h" #include "demo_fn.c" int main (void) { int status; int iter = 0, max_iter = 100; const gsl_root_fsolver_type *T; gsl_root_fsolver *s; double r = 0, r_expected = sqrt (5.0); double x_lo = 0.0, x_hi = 5.0; gsl_function F; struct quadratic_params params = {1.0, 0.0, -5.0}; F.function = &quadratic; F.params = ¶ms; T = gsl_root_fsolver_brent; s = gsl_root_fsolver_alloc (T); gsl_root_fsolver_set (s, &F, x_lo, x_hi); printf ("using %s method\n", gsl_root_fsolver_name (s)); printf ("%5s [%9s, %9s] %9s %10s %9s\n", "iter", "lower", "upper", "root", "err", "err(est)"); do { iter++; status = gsl_root_fsolver_iterate (s); r = gsl_root_fsolver_root (s); x_lo = gsl_root_fsolver_x_lower (s); x_hi = gsl_root_fsolver_x_upper (s); status = gsl_root_test_interval (x_lo, x_hi, 0, 0.001); if (status == GSL_SUCCESS) printf ("Converged:\n"); printf ("%5d [%.7f, %.7f] %.7f %+.7f %.7f\n", iter, x_lo, x_hi, r, r - r_expected, x_hi - x_lo); } while (status == GSL_CONTINUE && iter < max_iter); gsl_root_fsolver_free (s); return status; } gsl/doc/examples/specfun.txt0000644000175000017500000000010013536674414014510 0ustar eddeddJ0(5.0) = -0.177596771314338264 exact = -0.177596771314338292 gsl/doc/examples/min.txt0000644000175000017500000000077613536674414013653 0ustar eddeddusing brent method iter [ lower, upper] min err err(est) 0 [0.0000000, 6.0000000] 2.0000000 -1.1415927 6.0000000 1 [2.0000000, 6.0000000] 3.5278640 +0.3862713 4.0000000 2 [2.0000000, 3.5278640] 3.1748217 +0.0332290 1.5278640 3 [2.0000000, 3.1748217] 3.1264576 -0.0151351 1.1748217 4 [3.1264576, 3.1748217] 3.1414743 -0.0001183 0.0483641 5 [3.1414743, 3.1748217] 3.1415930 +0.0000004 0.0333474 Converged: 6 [3.1414743, 3.1415930] 3.1415927 +0.0000000 0.0001187 gsl/doc/examples/largefit.c0000644000175000017500000001111113536675317014254 0ustar eddedd#include #include #include #include #include #include #include #include #include /* function to be fitted */ double func(const double t) { double x = sin(10.0 * t); return exp(x*x*x); } /* construct a row of the least squares matrix */ int build_row(const double t, gsl_vector *row) { const size_t p = row->size; double Xj = 1.0; size_t j; for (j = 0; j < p; ++j) { gsl_vector_set(row, j, Xj); Xj *= t; } return 0; } int solve_system(const int print_data, const gsl_multilarge_linear_type * T, const double lambda, const size_t n, const size_t p, gsl_vector * c) { const size_t nblock = 5; /* number of blocks to accumulate */ const size_t nrows = n / nblock; /* number of rows per block */ gsl_multilarge_linear_workspace * w = gsl_multilarge_linear_alloc(T, p); gsl_matrix *X = gsl_matrix_alloc(nrows, p); gsl_vector *y = gsl_vector_alloc(nrows); gsl_rng *r = gsl_rng_alloc(gsl_rng_default); const size_t nlcurve = 200; gsl_vector *reg_param = gsl_vector_alloc(nlcurve); gsl_vector *rho = gsl_vector_calloc(nlcurve); gsl_vector *eta = gsl_vector_calloc(nlcurve); size_t rowidx = 0; double rnorm, snorm, rcond; double t = 0.0; double dt = 1.0 / (n - 1.0); while (rowidx < n) { size_t nleft = n - rowidx; /* number of rows left to accumulate */ size_t nr = GSL_MIN(nrows, nleft); /* number of rows in this block */ gsl_matrix_view Xv = gsl_matrix_submatrix(X, 0, 0, nr, p); gsl_vector_view yv = gsl_vector_subvector(y, 0, nr); size_t i; /* build (X,y) block with 'nr' rows */ for (i = 0; i < nr; ++i) { gsl_vector_view row = gsl_matrix_row(&Xv.matrix, i); double fi = func(t); double ei = gsl_ran_gaussian (r, 0.1 * fi); /* noise */ double yi = fi + ei; /* construct this row of LS matrix */ build_row(t, &row.vector); /* set right hand side value with added noise */ gsl_vector_set(&yv.vector, i, yi); if (print_data && (i % 100 == 0)) printf("%f %f\n", t, yi); t += dt; } /* accumulate (X,y) block into LS system */ gsl_multilarge_linear_accumulate(&Xv.matrix, &yv.vector, w); rowidx += nr; } if (print_data) printf("\n\n"); /* compute L-curve */ gsl_multilarge_linear_lcurve(reg_param, rho, eta, w); /* solve large LS system and store solution in c */ gsl_multilarge_linear_solve(lambda, c, &rnorm, &snorm, w); /* compute reciprocal condition number */ gsl_multilarge_linear_rcond(&rcond, w); fprintf(stderr, "=== Method %s ===\n", gsl_multilarge_linear_name(w)); fprintf(stderr, "condition number = %e\n", 1.0 / rcond); fprintf(stderr, "residual norm = %e\n", rnorm); fprintf(stderr, "solution norm = %e\n", snorm); /* output L-curve */ { size_t i; for (i = 0; i < nlcurve; ++i) { printf("%.12e %.12e %.12e\n", gsl_vector_get(reg_param, i), gsl_vector_get(rho, i), gsl_vector_get(eta, i)); } printf("\n\n"); } gsl_matrix_free(X); gsl_vector_free(y); gsl_multilarge_linear_free(w); gsl_rng_free(r); gsl_vector_free(reg_param); gsl_vector_free(rho); gsl_vector_free(eta); return 0; } int main(int argc, char *argv[]) { const size_t n = 50000; /* number of observations */ const size_t p = 16; /* polynomial order + 1 */ double lambda = 0.0; /* regularization parameter */ gsl_vector *c_tsqr = gsl_vector_calloc(p); gsl_vector *c_normal = gsl_vector_calloc(p); if (argc > 1) lambda = atof(argv[1]); /* turn off error handler so normal equations method won't abort */ gsl_set_error_handler_off(); /* solve system with TSQR method */ solve_system(1, gsl_multilarge_linear_tsqr, lambda, n, p, c_tsqr); /* solve system with Normal equations method */ solve_system(0, gsl_multilarge_linear_normal, lambda, n, p, c_normal); /* output solutions */ { gsl_vector *v = gsl_vector_alloc(p); double t; for (t = 0.0; t <= 1.0; t += 0.01) { double f_exact = func(t); double f_tsqr, f_normal; build_row(t, v); gsl_blas_ddot(v, c_tsqr, &f_tsqr); gsl_blas_ddot(v, c_normal, &f_normal); printf("%f %e %e %e\n", t, f_exact, f_tsqr, f_normal); } gsl_vector_free(v); } gsl_vector_free(c_tsqr); gsl_vector_free(c_normal); return 0; } gsl/doc/examples/nmsimplex.c0000644000175000017500000000255213536674414014501 0ustar eddeddint main(void) { double par[5] = {1.0, 2.0, 10.0, 20.0, 30.0}; const gsl_multimin_fminimizer_type *T = gsl_multimin_fminimizer_nmsimplex2; gsl_multimin_fminimizer *s = NULL; gsl_vector *ss, *x; gsl_multimin_function minex_func; size_t iter = 0; int status; double size; /* Starting point */ x = gsl_vector_alloc (2); gsl_vector_set (x, 0, 5.0); gsl_vector_set (x, 1, 7.0); /* Set initial step sizes to 1 */ ss = gsl_vector_alloc (2); gsl_vector_set_all (ss, 1.0); /* Initialize method and iterate */ minex_func.n = 2; minex_func.f = my_f; minex_func.params = par; s = gsl_multimin_fminimizer_alloc (T, 2); gsl_multimin_fminimizer_set (s, &minex_func, x, ss); do { iter++; status = gsl_multimin_fminimizer_iterate(s); if (status) break; size = gsl_multimin_fminimizer_size (s); status = gsl_multimin_test_size (size, 1e-2); if (status == GSL_SUCCESS) { printf ("converged to minimum at\n"); } printf ("%5d %10.3e %10.3e f() = %7.3f size = %.3f\n", iter, gsl_vector_get (s->x, 0), gsl_vector_get (s->x, 1), s->fval, size); } while (status == GSL_CONTINUE && iter < 100); gsl_vector_free(x); gsl_vector_free(ss); gsl_multimin_fminimizer_free (s); return status; } gsl/doc/examples/dwt.txt0000644000175000017500000001246513536674414013664 0ustar eddedd0.0462458 0.0167729 0.0462458 0.031888 0.0512458 0.0412921 0.0712458 0.0522264 0.0712458 0.0574496 0.0662458 0.0642031 0.0962458 0.0724869 0.101246 0.0803607 0.116246 0.0825233 0.121246 0.0862162 0.116246 0.0914394 0.106246 0.0962525 0.0912458 0.102596 0.101246 0.108529 0.0962458 0.114053 0.0962458 0.119686 0.0962458 0.104007 0.0912458 0.094039 0.0862458 0.0897813 0.0812458 0.0839935 0.0862458 0.0839162 0.101246 0.0823088 0.111246 0.0791713 0.116246 0.0764437 0.0762458 0.0509741 0.0362458 0.0315983 0.0362458 0.0183161 0.0212458 0.00340114 0.0112458 -0.00542012 -0.00875415 -0.0158742 -0.00875415 -0.0279611 -0.00375415 -0.0396104 0.00624585 -0.0160286 0.00124585 -0.00188697 0.00624585 0.00281451 -0.00375415 0.0100455 -0.0187542 0.00783627 -0.0237542 0.00815656 -0.0187542 0.0110063 -0.0187542 0.0131783 -0.0287542 0.00591016 -0.0237542 0.00117148 -0.0337542 -0.00103772 -0.00875415 -0.00392469 -0.0137542 -0.00428218 -0.00875415 -0.00531744 0.00124585 -0.00703047 -0.0237542 -0.0085619 -0.0337542 -0.014332 -0.0187542 -0.0189663 -0.00875415 -0.0224649 -0.00375415 -0.0262678 -0.00875415 -0.0289349 -0.0287542 -0.0319064 -0.0437542 -0.0351822 -0.0387542 -0.0383765 -0.0587542 -0.0801973 -0.103754 -0.111668 -0.123754 -0.132789 -0.153754 -0.156683 -0.188754 -0.162696 -0.213754 -0.1735 -0.183754 -0.189095 -0.0937542 -0.203407 0.0212458 -0.00510083 0.161246 0.136235 0.306246 0.341101 0.556246 0.528945 0.811246 0.801527 1.04125 1.0514 1.19625 1.15485 1.26125 1.29754 1.22625 1.16912 1.07625 1.11335 0.811246 0.760921 0.486246 0.487984 0.211246 0.24772 0.0512458 -0.00129903 -0.0687542 -0.0610099 -0.128754 -0.171446 -0.153754 -0.102442 -0.133754 -0.081519 -0.103754 -0.108677 -0.0687542 -0.122951 -0.0687542 -0.0931296 -0.0637542 -0.0751235 -0.0687542 -0.0689329 -0.0587542 -0.0595764 -0.0587542 -0.0723311 -0.0587542 -0.0791611 -0.0737542 -0.0800665 -0.0637542 -0.0825593 -0.0637542 -0.0791275 -0.0637542 -0.0772832 -0.0537542 -0.0770263 -0.0737542 -0.0763442 -0.0887542 -0.078946 -0.0887542 -0.080668 -0.0787542 -0.0815099 -0.0737542 -0.0825877 -0.0687542 -0.0827855 -0.0837542 -0.083219 -0.0737542 -0.0838884 -0.0637542 -0.0844945 -0.0537542 -0.0842208 -0.0687542 -0.0841828 -0.0687542 -0.0843805 -0.0837542 -0.0845151 -0.0887542 -0.0848855 -0.0887542 -0.0851927 -0.0687542 -0.0854368 -0.0687542 -0.0856977 -0.0737542 -0.0858204 -0.0837542 -0.0859801 -0.0937542 -0.0861769 -0.0787542 -0.0863638 -0.0887542 -0.0865877 -0.0837542 -0.0868017 -0.0887542 -0.0870057 -0.0937542 -0.0872124 -0.0887542 -0.0874562 -0.0787542 -0.08769 -0.0787542 -0.0879139 -0.0737542 -0.0881405 -0.0687542 -0.0883571 -0.0837542 -0.0885764 -0.0887542 -0.0887984 -0.0687542 -0.0890196 -0.0687542 -0.0890797 -0.0637542 -0.0891829 -0.0637542 -0.0893293 -0.0887542 -0.0894642 -0.0837542 -0.0896423 -0.0737542 -0.0898087 -0.0687542 -0.0899636 -0.0537542 -0.0901216 -0.0687542 -0.0903228 -0.0737542 -0.0905125 -0.0887542 -0.0906905 -0.0787542 -0.0908717 -0.0687542 -0.0910413 -0.0687542 -0.0912139 -0.0637542 -0.0913897 -0.0837542 -0.0915647 -0.0937542 -0.0917828 -0.0937542 -0.0919894 -0.0787542 -0.0921844 -0.0737542 -0.0923825 -0.0837542 -0.092569 -0.0937542 -0.0927586 -0.0987542 -0.0929514 -0.0987542 -0.0931433 -0.0887542 -0.0933236 -0.0937542 -0.093507 -0.103754 -0.0936935 -0.0987542 -0.0938792 -0.113754 -0.094068 -0.108754 -0.094256 -0.108754 -0.0944431 -0.0987542 -0.0946305 -0.108754 -0.103627 -0.128754 -0.110264 -0.133754 -0.11454 -0.128754 -0.119448 -0.113754 -0.121996 -0.123754 -0.125177 -0.128754 -0.12899 -0.133754 -0.132633 -0.148754 -0.133916 -0.138754 -0.135831 -0.133754 -0.138379 -0.128754 -0.140758 -0.133754 -0.143768 -0.148754 -0.14661 -0.153754 -0.149282 -0.138754 -0.151999 -0.128754 -0.121242 -0.123754 -0.0994544 -0.118754 -0.0866362 -0.113754 -0.0714146 -0.118754 -0.0651625 -0.0887542 -0.056507 -0.0737542 -0.0454482 -0.0487542 -0.0350333 -0.0437542 -0.033588 -0.0387542 -0.0297392 -0.0437542 -0.0234871 -0.0187542 -0.017879 -0.00375415 -0.00986753 0.00624585 -0.00250002 0.00124585 0.00422351 -0.00875415 0.0111196 -0.00875415 -0.00226639 0.00124585 -0.0102178 0.0112458 -0.0127347 0.0212458 -0.0167077 0.0212458 -0.0152462 0.00124585 -0.0152409 0.00124585 -0.0166917 0.00624585 -0.0177524 0.0162458 -0.0133785 0.0162458 -0.0104608 0.0262458 -0.00899926 0.00124585 -0.00714755 -0.00875415 -0.00675204 0.0162458 -0.00596633 0.0112458 -0.00479045 0.0212458 -0.00371911 0.0212458 0.00278678 0.00124585 0.00783649 -0.00375415 0.01143 0.0112458 0.0154137 0.0162458 0.0179412 0.00624585 0.0208589 0.0162458 0.0241668 0.00624585 0.0273702 0.00624585 0.0291173 0.0112458 0.0312547 0.0262458 0.0337822 0.0312458 0.0362052 0.0162458 0.0390183 0.0112458 0.0417269 0.00124585 0.044331 0.00624585 0.0469631 0.0212458 0.0347545 0.00624585 0.0265225 0.00624585 0.0222671 0.00624585 0.0169461 -0.00875415 0.0156016 0.00624585 0.0131917 0.00124585 0.00971622 0.00624585 0.00652626 -0.00375415 0.00731282 -0.0137542 0.00703387 -0.0187542 0.00568942 -0.0137542 0.00463047 -0.0137542 0.00250601 -0.00875415 0.000667052 -0.00375415 -0.000886403 -0.0237542 -0.00251636 -0.0287542 -0.000169788 -0.0237542 0.00111128 -0.0137542 0.00132683 -0.00875415 0.00182789 -0.00875415 0.00126344 -0.0237542 0.000984496 -0.0237542 0.000991051 -0.0237542 0.000921107 0.00124585 -0.000214344 -0.00875415 -0.00106429 -0.0137542 -0.00162874 -0.0187542 -0.00226969 -0.0337542 -0.00262514 -0.0137542 -0.00305708 -0.00875415 -0.00356553 -0.00875415 -0.00405348 gsl/doc/examples/monte.txt0000644000175000017500000000103013536674414014172 0ustar eddeddplain ================== result = 1.412209 sigma = 0.013436 exact = 1.393204 error = 0.019005 = 1.4 sigma miser ================== result = 1.391322 sigma = 0.003461 exact = 1.393204 error = -0.001882 = 0.54 sigma vegas warm-up ================== result = 1.392673 sigma = 0.003410 exact = 1.393204 error = -0.000531 = 0.16 sigma converging... result = 1.393281 sigma = 0.000362 chisq/dof = 1.5 vegas final ================== result = 1.393281 sigma = 0.000362 exact = 1.393204 error = 0.000077 = 0.21 sigma gsl/doc/examples/stat.txt0000644000175000017500000000023213536674414014026 0ustar eddeddThe dataset is 17.2, 18.1, 16.5, 18.3, 12.6 The sample mean is 16.54 The estimated variance is 5.373 The largest value is 18.3 The smallest value is 12.6 gsl/doc/examples/movstat2.c0000644000175000017500000000443013536674414014241 0ustar eddedd#include #include #include #include #include #include #include int main(void) { const size_t N = 1000; /* length of time series */ const double sigma[] = { 1.0, 5.0, 1.0, 3.0, 5.0 }; /* variances */ const size_t N_sigma[] = { 200, 450, 600, 850, 1000 }; /* samples where variance changes */ const size_t K = 41; /* window size */ gsl_vector *x = gsl_vector_alloc(N); gsl_vector *xmedian = gsl_vector_alloc(N); gsl_vector *xmad = gsl_vector_alloc(N); gsl_vector *xiqr = gsl_vector_alloc(N); gsl_vector *xSn = gsl_vector_alloc(N); gsl_vector *xQn = gsl_vector_alloc(N); gsl_vector *xsd = gsl_vector_alloc(N); gsl_rng *r = gsl_rng_alloc(gsl_rng_default); gsl_movstat_workspace * w = gsl_movstat_alloc(K); size_t idx = 0; size_t i; for (i = 0; i < N; ++i) { double gi = gsl_ran_gaussian(r, sigma[idx]); double u = gsl_rng_uniform(r); double outlier = (u < 0.01) ? 15.0*GSL_SIGN(gi) : 0.0; double xi = gi + outlier; gsl_vector_set(x, i, xi); if (i == N_sigma[idx] - 1) ++idx; } /* compute moving statistics */ gsl_movstat_mad(GSL_MOVSTAT_END_TRUNCATE, x, xmedian, xmad, w); gsl_movstat_qqr(GSL_MOVSTAT_END_TRUNCATE, x, 0.25, xiqr, w); gsl_movstat_Sn(GSL_MOVSTAT_END_TRUNCATE, x, xSn, w); gsl_movstat_Qn(GSL_MOVSTAT_END_TRUNCATE, x, xQn, w); gsl_movstat_sd(GSL_MOVSTAT_END_TRUNCATE, x, xsd, w); /* scale IQR by factor to approximate standard deviation */ gsl_vector_scale(xiqr, 0.7413); /* print results */ idx = 0; for (i = 0; i < N; ++i) { printf("%zu %f %f %f %f %f %f %f\n", i, gsl_vector_get(x, i), sigma[idx], gsl_vector_get(xmad, i), gsl_vector_get(xiqr, i), gsl_vector_get(xSn, i), gsl_vector_get(xQn, i), gsl_vector_get(xsd, i)); if (i == N_sigma[idx] - 1) ++idx; } gsl_vector_free(x); gsl_vector_free(xmedian); gsl_vector_free(xmad); gsl_vector_free(xiqr); gsl_vector_free(xSn); gsl_vector_free(xQn); gsl_vector_free(xsd); gsl_rng_free(r); gsl_movstat_free(w); return 0; } gsl/doc/examples/impulse.txt0000644000175000017500000013006213536674414014536 0ustar eddedd0 0.267837 0.267837 7.086028 -6.488589 0 1 1.251089 1.251089 7.185481 -6.618925 0 2 3.474477 3.474477 7.982536 -7.446861 0 3 -2.385455 -2.385455 7.333649 -6.767092 0 4 -2.303703 -2.303703 6.860939 -6.263500 0 5 -2.365765 -2.365765 6.384663 -5.661314 0 6 0.298719 0.298719 6.383899 -5.534638 0 7 0.667774 0.667774 6.993067 -6.120060 0 8 0.467148 0.467148 6.445286 -5.548534 0 9 -0.579585 -0.579585 6.878966 -5.963442 0 10 0.991323 0.991323 6.238783 -5.304488 0 11 3.461237 3.461237 6.799291 -5.883767 0 12 -0.522795 -0.522795 7.309829 -6.375534 0 13 -2.115389 -2.115389 8.549063 -7.313561 0 14 -0.777013 -0.777013 8.904994 -7.669491 0 15 0.448376 0.448376 8.597245 -7.662949 0 16 0.424630 0.424630 8.670336 -7.434833 0 17 0.617751 0.617751 7.592533 -6.357030 0 18 1.257794 1.257794 6.394977 -5.159474 0 19 4.604154 4.604154 6.394977 -5.159474 0 20 0.964867 0.964867 6.753645 -5.819350 0 21 3.681283 3.681283 7.152683 -5.917180 0 22 0.856508 0.856508 7.555626 -5.842609 0 23 -0.651680 -0.651680 7.881223 -6.168206 0 24 2.657093 2.657093 8.045661 -6.332644 0 25 3.741497 3.741497 8.765068 -7.052052 0 26 3.056376 3.056376 8.052739 -6.123005 0 27 -1.341791 -1.341791 8.312972 -5.797383 0 28 4.115772 4.115772 9.095099 -6.356424 0 29 0.399023 0.399023 9.748974 -6.358940 0 30 0.411121 0.411121 10.187616 -5.920299 0 31 -0.133195 -0.133195 10.346130 -5.697171 0 32 0.191088 0.191088 9.860073 -5.592756 0 33 3.836998 3.836998 9.858131 -5.590814 0 34 1.369338 1.369338 9.817099 -5.549782 0 35 2.997870 2.997870 9.559169 -4.910210 0 36 1.695017 1.695017 9.451341 -4.755629 0 37 -2.352311 -2.352311 9.581057 -4.932098 0 38 3.444902 3.444902 10.346130 -5.697171 0 39 2.347856 2.347856 10.516084 -5.867125 0 40 2.514601 2.514601 9.783262 -5.134303 0 41 4.604232 4.604232 10.129567 -5.862250 0 42 2.133659 2.133659 10.586098 -5.937139 0 43 2.324479 2.324479 10.272998 -5.577286 0 44 1.647775 1.647775 10.439743 -5.410542 0 45 1.808555 1.808555 10.052014 -4.461141 0 46 3.686416 3.686416 10.478877 -4.888004 0 47 2.795436 2.795436 10.478877 -4.888004 0 48 4.343368 4.343368 11.057055 -5.466182 0 49 0.861866 0.861866 11.479494 -5.888621 0 50 5.723666 5.723666 10.478877 -4.888004 0 51 3.591039 3.591039 9.990002 -4.850017 0 52 1.602405 1.602405 10.254219 -4.663346 0 53 -15.384532 2.795436 10.254219 -4.663346 1 54 6.320591 6.320591 10.146072 -5.006087 0 55 3.380744 3.380744 11.169962 -5.579090 0 56 7.048299 7.048299 11.830315 -5.851912 0 57 4.049829 4.049829 12.360317 -5.598829 0 58 4.899066 4.899066 12.784621 -5.602543 0 59 1.287136 1.287136 12.811733 -5.629656 0 60 4.591408 4.591408 13.017568 -4.917911 0 61 1.031623 1.031623 13.017568 -4.917911 0 62 2.569992 2.569992 13.029816 -4.065434 0 63 1.917971 1.917971 13.029127 -4.064746 0 64 2.989201 2.989201 13.516125 -4.419354 0 65 2.359780 2.359780 14.245773 -5.062958 0 66 0.689950 0.689950 13.559147 -4.376332 0 67 5.997274 5.997274 13.223050 -4.040235 0 68 6.455235 6.455235 12.363100 -3.180285 0 69 5.255499 5.255499 11.610613 -2.513841 0 70 4.482191 4.482191 11.765932 -2.669160 0 71 4.813373 4.813373 13.150880 -4.054109 0 72 5.513273 5.513273 12.257609 -3.074794 0 73 5.167341 5.167341 13.002466 -3.905695 0 74 5.410549 5.410549 12.400990 -2.880875 0 75 4.548386 4.548386 13.267454 -3.640707 0 76 8.895208 8.895208 12.227249 -2.600502 0 77 9.438126 9.438126 12.104269 -1.769588 0 78 2.145592 2.145592 11.624270 -1.113271 0 79 4.760058 4.760058 11.659073 -0.951921 0 80 4.052600 4.052600 11.281908 -0.770910 0 81 4.139740 4.139740 11.193750 -0.859068 0 82 2.830709 2.830709 11.907940 -1.573258 0 83 6.420421 6.420421 11.907940 -1.573258 0 84 5.397948 5.397948 12.947706 -2.240554 0 85 3.199579 3.199579 12.581216 -2.246535 0 86 5.887218 5.887218 13.146814 -2.439662 0 87 7.870819 7.870819 12.893940 -2.692536 0 88 4.524933 4.524933 13.506636 -2.799484 0 89 5.353576 5.353576 12.668741 -2.467337 0 90 6.173428 6.173428 12.022822 -1.821418 0 91 7.260273 7.260273 12.275696 -1.568544 0 92 4.791960 4.791960 12.275696 -1.568544 0 93 3.384643 3.384643 12.334876 -1.538981 0 94 8.200184 8.200184 13.455257 -1.680821 0 95 4.173493 4.173493 12.917990 -1.143554 0 96 6.818150 6.818150 13.191185 -2.395290 0 97 5.100702 5.100702 14.382786 -2.608350 0 98 6.161797 6.161797 14.234090 -2.021633 0 99 4.535586 4.535586 14.657365 -2.333771 0 100 6.855992 6.855992 14.336318 -2.123861 0 101 4.103610 4.103610 14.336318 -2.123861 0 102 6.988670 6.988670 14.508887 -2.185293 0 103 9.017243 9.017243 14.581556 -2.257962 0 104 4.789311 4.789311 14.696500 -2.372907 0 105 6.289369 6.289369 15.172261 -2.593523 0 106 9.205956 9.205956 15.011282 -1.828236 0 107 4.115150 4.115150 14.938613 -1.755567 0 108 1.445456 1.445456 14.938613 -1.755567 0 109 10.151837 10.151837 14.810936 -2.024470 0 110 6.106228 6.106228 14.623322 -1.836857 0 111 9.542699 9.542699 15.126226 -1.943181 0 112 5.123113 5.123113 15.390695 -1.678712 0 113 5.002891 5.002891 15.408626 -1.660781 0 114 6.591523 6.591523 14.927868 -1.180024 0 115 7.721164 7.721164 15.104012 -1.356167 0 116 8.598271 8.598271 15.153033 -1.969987 0 117 7.456962 7.456962 15.271304 -1.523460 0 118 7.396332 7.396332 15.571961 -0.888218 0 119 7.624535 7.624535 15.521721 -1.773876 0 120 6.393233 6.393233 14.986306 -1.121586 0 121 5.904074 5.904074 15.395817 -0.712075 0 122 6.055145 6.055145 14.371231 -0.506512 0 123 9.256512 9.256512 14.780743 -0.097000 0 124 8.922952 8.922952 14.886066 -0.202323 0 125 6.873922 6.873922 14.994365 -0.201702 0 126 6.434257 6.434257 14.488965 0.303699 0 127 7.341871 7.341871 14.488965 0.303699 0 128 3.856169 3.856169 14.994365 -0.201702 0 129 8.686101 8.686101 13.882945 0.800798 0 130 8.086779 8.086779 13.882945 0.800798 0 131 3.214626 3.214626 14.487172 -0.416884 0 132 6.932360 6.932360 14.645270 -0.574982 0 133 11.535909 11.535909 15.259491 -1.189203 0 134 5.891493 5.891493 15.884419 -1.814130 0 135 7.480259 7.480259 16.057033 -1.986744 0 136 10.034917 10.034917 15.954248 -2.089529 0 137 10.000651 10.000651 15.336973 -1.472254 0 138 6.070481 6.070481 15.645911 -1.781192 0 139 7.035144 7.035144 15.336973 -1.472254 0 140 9.467457 9.467457 16.026665 -2.161945 0 141 6.794247 6.794247 15.748696 -1.678407 0 142 7.409702 7.409702 15.748696 -1.678407 0 143 3.994103 3.994103 15.748696 -1.678407 0 144 8.013894 8.013894 15.786670 -0.967267 0 145 3.920389 3.920389 16.457912 -1.497394 0 146 4.998066 4.998066 15.555881 -0.595363 0 147 4.173885 4.173885 14.741335 0.219184 0 148 4.627759 4.627759 15.978082 -0.775855 0 149 7.794908 7.794908 16.578767 -1.376540 0 150 6.619745 6.619745 16.387355 -1.567951 0 151 6.927545 6.927545 16.475275 -1.273048 0 152 10.764202 10.764202 17.406799 -2.204572 0 153 7.601114 7.601114 16.765408 -1.563181 0 154 10.305464 10.305464 16.959203 -1.369387 0 155 10.221445 10.221445 18.335622 -2.353424 0 156 9.855058 9.855058 17.178189 -1.150401 0 157 9.390841 9.390841 17.395402 -0.933187 0 158 10.360689 10.360689 18.575631 -2.113415 0 159 6.953842 6.953842 17.395402 -0.933187 0 160 11.785483 11.785483 16.979465 -0.387203 0 161 8.296131 8.296131 16.971849 -0.379587 0 162 5.988366 5.988366 17.036257 -0.062937 0 163 7.991099 7.991099 16.786314 0.423359 0 164 4.752674 4.752674 16.991229 0.218444 0 165 8.231108 8.231108 16.384063 0.825610 0 166 9.297917 9.297917 16.336095 0.873578 0 167 10.891405 10.891405 16.139820 1.069853 0 168 8.486660 8.486660 17.067633 0.142040 0 169 9.383381 9.383381 16.687256 0.522417 0 170 -7.532052 8.604837 16.991229 0.218444 1 171 7.366873 7.366873 16.064121 1.094682 0 172 9.105867 9.105867 16.139820 1.069853 0 173 5.417777 5.417777 15.522268 1.636536 0 174 8.844145 8.844145 16.981751 0.227922 0 175 8.604837 8.604837 17.304231 0.384059 0 176 6.466790 6.466790 17.950170 0.261564 0 177 9.635887 9.635887 17.565953 0.645781 0 178 7.750050 7.750050 17.226795 0.984939 0 179 9.670796 9.670796 17.826946 0.384788 0 180 14.403675 14.403675 17.685871 0.525864 0 181 9.137232 9.137232 17.482781 0.728953 0 182 9.876881 9.876881 17.826946 0.384788 0 183 8.579402 8.579402 17.737244 0.474490 0 184 12.544866 12.544866 17.466014 0.808451 0 185 8.105213 8.105213 18.031133 0.740161 0 186 11.534277 11.534277 17.255353 1.515941 0 187 13.771462 13.771462 18.025133 0.746161 0 188 11.457721 11.457721 18.280417 0.490876 0 189 7.802379 7.802379 18.049049 1.222726 0 190 8.665812 8.665812 17.965650 0.805643 0 191 11.230922 11.230922 17.965650 0.805643 0 192 9.690726 9.690726 18.025133 0.746161 0 193 8.695821 8.695821 17.714428 1.056866 0 194 12.149094 12.149094 18.036785 1.344666 0 195 6.443993 6.443993 18.135953 1.245498 0 196 9.385647 9.385647 18.618854 0.890506 0 197 10.753240 10.753240 18.334684 1.174677 0 198 9.233922 9.233922 18.126380 1.382981 0 199 5.990353 5.990353 18.270729 1.110722 0 200 8.181117 8.181117 18.002493 1.378959 0 201 9.754680 9.754680 17.830875 0.940419 0 202 7.702949 7.702949 17.830875 0.940419 0 203 7.721974 7.721974 18.585496 0.795955 0 204 10.242737 10.242737 18.402308 0.612767 0 205 10.233953 10.233953 18.387530 0.383764 0 206 10.730621 10.730621 19.056600 -0.041525 0 207 11.983465 11.983465 18.509420 0.505654 0 208 12.947464 12.947464 18.126380 1.382981 0 209 10.908156 10.908156 18.403979 2.063928 0 210 8.480391 8.480391 18.257990 1.251371 0 211 7.584665 7.584665 18.257990 1.251371 0 212 11.421907 11.421907 17.976201 2.214923 0 213 6.013883 6.013883 18.121571 2.069553 0 214 7.866359 7.866359 18.138853 2.329054 0 215 12.380644 12.380644 18.549067 1.936406 0 216 9.507537 9.507537 18.290636 2.238618 0 217 9.298467 9.298467 18.298128 2.231126 0 218 11.150234 11.150234 19.266510 1.262744 0 219 11.535475 11.535475 19.093752 1.435502 0 220 12.109866 12.109866 19.991457 0.284595 0 221 11.474620 11.474620 19.294543 0.981508 0 222 7.006106 7.006106 19.111347 1.164704 0 223 9.301365 9.301365 19.093752 1.435502 0 224 10.095562 10.095562 18.570957 1.958296 0 225 6.726845 6.726845 18.570957 1.958296 0 226 12.198109 12.198109 17.970736 2.558518 0 227 13.752106 13.752106 18.004448 3.791782 0 228 10.264627 10.264627 17.455432 4.056278 0 229 10.138026 10.138026 17.428687 4.083024 0 230 4.617037 4.617037 17.230802 4.552516 0 231 11.016086 11.016086 17.254699 4.528619 0 232 8.124335 8.124335 17.229841 4.281869 0 233 10.898115 10.898115 16.913198 3.616056 0 234 11.037969 11.037969 17.595542 2.894294 0 235 12.177649 12.177649 17.740643 2.788610 0 236 10.041513 10.041513 18.009017 2.520237 0 237 11.648894 11.648894 18.423198 2.106056 0 238 9.464337 9.464337 17.617773 3.225817 0 239 11.999112 11.999112 17.381569 3.147684 0 240 10.755855 10.755855 16.624520 3.865316 0 241 9.993788 9.993788 16.681103 3.611934 0 242 10.891659 10.891659 17.147767 3.342068 0 243 11.823212 11.823212 16.663326 3.826509 0 244 10.244918 10.244918 17.049368 3.243669 0 245 8.537142 8.537142 16.485662 3.807376 0 246 6.892226 6.892226 15.831689 4.251338 0 247 13.948369 13.948369 16.279409 3.803617 0 248 5.476624 5.476624 16.421115 3.661911 0 249 9.586733 9.586733 17.050137 3.242900 0 250 10.421795 10.421795 16.385567 3.602008 0 251 9.382996 9.382996 17.586808 2.400767 0 252 10.146519 10.146519 17.634521 2.353054 0 253 9.597132 9.597132 17.966881 1.693841 0 254 11.353078 11.353078 18.479345 1.181376 0 255 9.227084 9.227084 18.603772 0.856501 0 256 7.471401 7.471401 17.786014 1.482783 0 257 9.830361 9.830361 18.533646 0.735152 0 258 9.730137 9.730137 19.120312 0.148485 0 259 12.416126 12.416126 17.718503 1.589380 0 260 12.730227 12.730227 16.289174 3.018710 0 261 11.924813 11.924813 16.121916 3.338357 0 262 9.509080 9.509080 16.681255 2.779018 0 263 5.530217 5.530217 16.472607 2.987666 0 264 12.634131 12.634131 17.794698 1.665575 0 265 8.123016 8.123016 18.588804 0.871470 0 266 10.560474 10.560474 18.609898 0.892563 0 267 7.067415 7.067415 18.150279 1.352182 0 268 9.634399 9.634399 17.419340 2.241382 0 269 13.057941 13.057941 17.248913 2.591152 0 270 7.012512 7.012512 18.224980 2.449054 0 271 9.653942 9.653942 19.195684 1.478350 0 272 9.751230 9.751230 19.435485 0.404580 0 273 11.921285 11.921285 19.237144 0.265317 0 274 8.190022 8.190022 19.827486 -0.325025 0 275 9.920032 9.920032 20.015243 -0.512782 0 276 8.070713 8.070713 20.015243 -0.512782 0 277 11.540664 11.540664 19.721905 -0.414021 0 278 10.338007 10.338007 19.721905 -0.414021 0 279 10.337017 10.337017 19.721905 -0.414021 0 280 10.352870 10.352870 19.700492 -0.392609 0 281 12.100791 12.100791 19.511397 -0.203514 0 282 11.279264 11.279264 18.415279 0.697945 0 283 8.427866 8.427866 18.865828 0.247397 0 284 5.210785 5.210785 18.865828 0.247397 0 285 8.073820 8.073820 18.706753 0.406472 0 286 14.168975 14.168975 18.706753 0.406472 0 287 8.020899 8.020899 18.190048 0.923177 0 288 5.355337 5.355337 18.011363 0.438629 0 289 7.135108 7.135108 17.968488 1.144737 0 290 7.992529 7.992529 17.636871 0.813121 0 291 10.951329 10.951329 18.422825 -0.475627 0 292 9.556612 9.556612 18.147694 -0.200496 0 293 8.720282 8.720282 18.500534 -0.553336 0 294 9.224996 9.224996 18.123740 -0.176542 0 295 6.156037 6.156037 17.323914 0.539477 0 296 9.858310 9.858310 17.759966 0.187232 0 297 10.907875 10.907875 17.910204 0.036995 0 298 11.831874 11.831874 18.238551 -0.061731 0 299 8.973599 8.973599 17.149681 1.027139 0 300 8.085928 8.085928 16.982089 1.467903 0 301 10.827044 10.827044 16.596427 1.853565 0 302 7.486542 7.486542 16.544963 2.542380 0 303 5.711353 5.711353 15.988842 3.098500 0 304 9.088410 9.088410 15.346503 3.103489 0 305 12.082218 12.082218 15.477221 2.972771 0 306 10.161023 10.161023 15.477221 2.972771 0 307 8.931696 8.931696 16.949973 2.137369 0 308 10.187945 10.187945 16.441484 2.759606 0 309 4.731625 4.731625 17.278876 1.808466 0 310 10.360847 10.360847 17.092265 1.233440 0 311 9.600545 9.600545 17.047213 1.278491 0 312 9.543671 9.543671 17.364590 0.961114 0 313 8.399960 8.399960 17.532006 1.555336 0 314 11.530595 11.530595 17.899796 1.187546 0 315 9.162852 9.162852 17.756504 1.444586 0 316 8.825375 8.825375 16.788096 2.412994 0 317 9.827699 9.827699 17.378258 2.277139 0 318 8.589434 8.589434 17.588880 1.612210 0 319 12.694501 12.694501 17.726550 1.431051 0 320 11.135144 11.135144 18.715490 0.485600 0 321 5.705885 5.705885 18.238375 0.919226 0 322 7.883558 7.883558 17.588880 1.612210 0 323 10.916514 10.916514 17.463161 1.694440 0 324 7.555015 7.555015 18.049063 1.038279 0 325 10.014571 10.014571 18.267074 0.400793 0 326 12.342213 12.342213 18.959607 0.197994 0 327 11.223638 11.223638 18.455599 0.212269 0 328 9.578801 9.578801 18.455599 0.212269 0 329 11.721221 11.721221 18.714740 -0.046873 0 330 6.996411 6.996411 18.537792 -0.223821 0 331 8.317932 8.317932 19.278614 -0.964643 0 332 13.669557 13.669557 19.081916 -0.767945 0 333 9.333934 9.333934 18.342516 -0.385658 0 334 10.045526 10.045526 17.866513 0.447458 0 335 8.978429 8.978429 17.893311 0.420661 0 336 7.132362 7.132362 18.521073 -0.207101 0 337 7.488959 7.488959 18.521073 -0.207101 0 338 13.382599 13.382599 17.714754 0.242103 0 339 8.413182 8.413182 16.463526 1.220228 0 340 9.156986 9.156986 15.217216 1.609149 0 341 7.094379 7.094379 15.797614 0.920891 0 342 7.274345 7.274345 15.257634 1.378230 0 343 5.886317 5.886317 14.996107 1.639757 0 344 9.867840 9.867840 15.644862 1.073643 0 345 7.600415 7.600415 15.037427 1.681077 0 346 9.474006 9.474006 15.003232 1.715273 0 347 8.841877 8.841877 14.616349 1.894245 0 348 23.381169 8.184780 14.537342 1.832218 1 349 7.611702 7.611702 14.988813 1.380747 0 350 7.998229 7.998229 14.894325 1.475235 0 351 8.184780 8.184780 14.640320 1.729240 0 352 8.359252 8.359252 14.708652 1.660908 0 353 5.777821 5.777821 15.363583 0.632875 0 354 6.383058 6.383058 15.060778 0.935680 0 355 8.255297 8.255297 14.649390 1.347068 0 356 10.196856 10.196856 14.537342 1.832218 0 357 9.702046 9.702046 14.459191 1.537267 0 358 8.907539 8.907539 14.503793 1.492665 0 359 6.840563 6.840563 14.103408 1.893050 0 360 7.962058 7.962058 13.598345 2.386741 0 361 4.203045 4.203045 13.429538 2.509128 0 362 7.587466 7.587466 14.074512 1.864153 0 363 10.178787 10.178787 14.430294 1.508371 0 364 9.088539 9.088539 15.234237 0.689878 0 365 1.673164 1.673164 15.708002 0.097138 0 366 7.880992 7.880992 15.733646 0.071495 0 367 7.969333 7.969333 15.728807 0.195308 0 368 8.924932 8.924932 15.728807 0.195308 0 369 4.439469 4.439469 15.608783 0.315332 0 370 7.992543 7.992543 15.793133 0.130982 0 371 8.300413 8.300413 15.963209 -0.158068 0 372 7.902570 7.902570 16.460880 -0.655739 0 373 6.030105 6.030105 16.439625 -0.677641 0 374 6.289806 6.289806 16.439302 -0.677318 0 375 8.838022 8.838022 16.599369 -0.837385 0 376 5.525302 5.525302 15.892711 -0.130727 0 377 7.217574 7.217574 16.029222 -0.304276 0 378 5.151193 5.151193 15.801274 -0.076329 0 379 9.654268 9.654268 15.384323 -0.949175 0 380 8.332562 8.332562 15.121795 -1.995471 0 381 9.838362 9.838362 15.074049 -1.948780 0 382 10.652431 10.652431 15.251547 -2.125222 0 383 6.562635 6.562635 15.120945 -1.995675 0 384 4.128871 4.128871 14.936918 -1.811648 0 385 7.862473 7.862473 14.637325 -1.968897 0 386 4.572872 4.572872 14.869491 -2.201064 0 387 5.521192 5.521192 15.075644 -2.040975 0 388 8.541596 8.541596 14.822030 -2.153602 0 389 6.334214 6.334214 15.057004 -2.388577 0 390 4.300907 4.300907 14.266381 -3.179200 0 391 4.400149 4.400149 14.263999 -3.173179 0 392 6.563162 6.563162 14.055005 -2.967824 0 393 5.145591 5.145591 14.055005 -2.967824 0 394 9.979609 9.979609 14.031407 -2.944225 0 395 5.292745 5.292745 12.993509 -1.951126 0 396 6.868192 6.868192 12.567765 -1.525382 0 397 5.543591 5.543591 12.600447 -1.513265 0 398 3.905196 3.905196 12.574038 -1.531654 0 399 6.517334 6.517334 12.803186 -1.716005 0 400 5.503432 5.503432 13.695224 -2.608042 0 401 3.130641 3.130641 13.828988 -2.822123 0 402 3.836963 3.836963 13.618301 -3.032811 0 403 5.545410 5.545410 14.026047 -3.019182 0 404 4.493050 4.493050 14.023483 -3.016618 0 405 8.123038 8.123038 14.102507 -3.517016 0 406 8.654125 8.654125 14.297967 -3.291102 0 407 4.678703 4.678703 13.639838 -2.632973 0 408 5.830823 5.830823 13.203921 -2.197056 0 409 6.388378 6.388378 13.406502 -2.399637 0 410 3.474992 3.474992 13.406502 -2.399637 0 411 7.557681 7.557681 12.911699 -1.904834 0 412 3.083304 3.083304 12.260782 -2.250389 0 413 0.279635 0.279635 12.260782 -2.250389 0 414 4.262027 4.262027 13.604743 -2.550001 0 415 6.891936 6.891936 13.448479 -2.357659 0 416 5.005197 5.005197 14.706181 -3.651439 0 417 0.499105 0.499105 13.855964 -2.801223 0 418 5.527371 5.527371 13.082569 -3.072175 0 419 5.597482 5.597482 12.026603 -2.031869 0 420 4.991155 4.991155 11.951146 -1.940753 0 421 7.835988 7.835988 11.733583 -1.738850 0 422 5.624893 5.624893 12.894224 -2.911915 0 423 4.997367 4.997367 11.593225 -1.598492 0 424 3.200629 3.200629 11.153218 -1.158485 0 425 5.665661 5.665661 11.146653 -1.151920 0 426 9.618998 9.618998 11.101214 -1.106481 0 427 6.332037 6.332037 11.532358 -1.537625 0 428 2.580145 2.580145 11.561083 -1.578774 0 429 4.835941 4.835941 12.030025 -2.130870 0 430 3.817875 3.817875 11.400850 -1.501696 0 431 4.816852 4.816852 11.975480 -2.185415 0 432 6.104036 6.104036 13.027082 -3.355199 0 433 4.949577 4.949577 13.244553 -3.610849 0 434 1.879642 1.879642 12.054193 -3.763456 0 435 5.319233 5.319233 12.009015 -4.373266 0 436 5.823573 5.823573 12.009015 -4.373266 0 437 4.145368 4.145368 12.009015 -4.373266 0 438 2.691672 2.691672 11.878367 -4.487684 0 439 3.695342 3.695342 11.701783 -4.311100 0 440 -0.695224 -0.695224 10.486591 -4.146611 0 441 1.543020 1.543020 11.184007 -3.793324 0 442 4.895032 4.895032 11.234223 -4.894243 0 443 1.713209 1.713209 11.212757 -4.872777 0 444 3.078912 3.078912 11.566334 -5.226354 0 445 2.613552 2.613552 11.326330 -5.004306 0 446 1.728368 1.728368 11.121679 -4.963855 0 447 2.545995 2.545995 11.369256 -5.047232 0 448 4.589891 4.589891 11.352152 -5.030128 0 449 2.840381 2.840381 11.401490 -5.079466 0 450 2.669609 2.669609 11.591050 -5.433226 0 451 6.299739 6.299739 12.122904 -5.800880 0 452 3.169990 3.169990 11.794997 -5.637173 0 453 5.709799 5.709799 11.750190 -5.428166 0 454 -0.824434 -0.824434 11.049524 -4.709544 0 455 5.862470 5.862470 11.723355 -5.401331 0 456 18.652669 3.169990 10.580246 -4.240266 1 457 3.161012 3.161012 11.671545 -5.331564 0 458 2.736013 2.736013 11.671545 -5.331564 0 459 4.239602 4.239602 11.370021 -4.405610 0 460 5.460174 5.460174 11.983760 -5.019349 0 461 5.911840 5.911840 12.399270 -6.059290 0 462 -1.187414 -1.187414 12.165547 -5.742824 0 463 5.605434 5.605434 13.429308 -7.006585 0 464 2.754378 2.754378 14.378958 -8.038978 0 465 4.272463 4.272463 14.867402 -8.545378 0 466 3.541624 3.541624 14.279138 -8.770381 0 467 0.185253 0.185253 14.460769 -8.952012 0 468 3.482205 3.482205 15.323209 -9.851183 0 469 -0.736499 -0.736499 13.973959 -8.894007 0 470 2.539976 2.539976 14.246366 -9.166414 0 471 5.020245 5.020245 14.824536 -10.538033 0 472 2.143252 2.143252 14.721528 -10.806542 0 473 -14.628129 1.696534 14.348131 -10.955063 1 474 3.211361 3.211361 12.976464 -10.275347 0 475 -0.663691 -0.663691 13.185284 -10.066528 0 476 0.552242 0.552242 12.853966 -10.152849 0 477 -0.080934 -0.080934 11.836815 -10.581122 0 478 -1.003482 -1.003482 11.340857 -10.236374 0 479 1.957493 1.957493 10.478555 -9.374072 0 480 -3.361698 -3.361698 10.539870 -9.374398 0 481 1.696534 1.696534 10.539870 -9.374398 0 482 4.860231 4.860231 10.554160 -9.298467 0 483 -2.318603 -2.318603 11.124527 -9.868834 0 484 -0.733239 -0.733239 10.550038 -9.294345 0 485 -0.038200 -0.038200 10.806957 -9.551264 0 486 1.350559 1.350559 9.951934 -8.696241 0 487 1.559378 1.559378 9.222653 -8.057181 0 488 -1.755975 -1.755975 9.144510 -7.979038 0 489 0.627846 0.627846 9.144510 -7.979038 0 490 0.182254 0.182254 9.906824 -8.741352 0 491 0.582736 0.582736 10.036788 -8.871316 0 492 1.430943 1.430943 10.158094 -9.297982 0 493 6.045474 6.045474 9.906824 -8.741352 0 494 2.115916 2.115916 9.640037 -8.779925 0 495 5.013403 5.013403 8.474157 -7.905116 0 496 2.450726 2.450726 8.228316 -7.368204 0 497 2.721429 2.721429 8.605954 -7.745842 0 498 -1.037838 -1.037838 8.605954 -7.745842 0 499 0.430056 0.430056 8.605954 -7.745842 0 500 0.284520 0.284520 8.561873 -7.701761 0 501 -0.233270 -0.233270 8.808920 -7.948808 0 502 -2.625151 -2.625151 8.924437 -8.355397 0 503 -2.413166 -2.413166 9.549345 -8.980304 0 504 -1.094948 -1.094948 9.181555 -9.367505 0 505 2.537661 2.537661 9.033974 -9.219923 0 506 -0.238393 -0.238393 8.516936 -8.702885 0 507 -0.092975 -0.092975 8.563166 -9.029706 0 508 1.373833 1.373833 7.671468 -8.148254 0 509 -2.066324 -2.066324 6.934499 -7.411285 0 510 -0.493397 -0.493397 6.488480 -6.965267 0 511 2.014530 2.014530 7.011178 -7.487965 0 512 1.025668 1.025668 7.487417 -8.340964 0 513 -2.145715 -2.145715 7.487417 -8.340964 0 514 -1.821600 -1.821600 8.206499 -9.060046 0 515 -3.266027 -3.266027 9.126253 -9.603039 0 516 -0.426773 -0.426773 9.126253 -9.603039 0 517 0.121232 0.121232 9.846584 -10.323370 0 518 2.465783 2.465783 9.670341 -10.147127 0 519 -3.011704 -3.011704 8.951845 -9.805391 0 520 -1.593874 -1.593874 8.854164 -9.840957 0 521 -0.238189 -0.238189 8.231858 -9.218651 0 522 0.106509 0.106509 7.757179 -8.743972 0 523 -7.543083 -7.543083 8.975374 -10.038212 0 524 -2.866531 -2.866531 8.975374 -10.038212 0 525 0.303255 0.303255 8.190985 -10.249213 0 526 1.633585 1.633585 8.560060 -10.618287 0 527 3.273476 3.273476 8.560060 -10.618287 0 528 -1.442878 -1.442878 8.560060 -10.618287 0 529 -3.908796 -3.908796 8.835319 -11.155625 0 530 -0.157968 -0.157968 8.286159 -11.171915 0 531 -0.531419 -0.531419 7.649997 -10.837744 0 532 -1.029114 -1.029114 7.800993 -10.686749 0 533 -0.341502 -0.341502 7.800993 -10.686749 0 534 -1.160153 -1.160153 7.672243 -10.960878 0 535 -4.418606 -4.418606 7.613339 -11.223731 0 536 1.315229 1.315229 7.251516 -10.861908 0 537 -2.191284 -2.191284 7.575781 -10.864416 0 538 -3.273143 -3.273143 7.944856 -11.233491 0 539 -3.539737 -3.539737 7.414903 -11.025294 0 540 -3.017166 -3.017166 6.122166 -10.418292 0 541 -1.644318 -1.644318 6.122166 -10.418292 0 542 -3.314391 -3.314391 6.122166 -10.418292 0 543 -2.148063 -2.148063 5.498660 -9.881229 0 544 -0.252086 -0.252086 4.275164 -10.309496 0 545 -1.805196 -1.805196 4.827314 -11.115179 0 546 -3.509218 -3.509218 3.831438 -10.377724 0 547 -4.967225 -4.967225 3.759604 -10.305890 0 548 -4.357887 -4.357887 3.971547 -10.259412 0 549 0.535519 0.535519 2.760661 -9.306946 0 550 13.547418 -3.314391 2.374110 -9.002891 1 551 -3.660851 -3.660851 3.172002 -10.014772 0 552 -3.143933 -3.143933 4.036477 -10.665258 0 553 -0.383074 -0.383074 4.726713 -11.569482 0 554 -4.015029 -4.015029 5.226349 -12.244786 0 555 -3.993904 -3.993904 6.207155 -13.528856 0 556 -3.984021 -3.984021 5.424119 -12.745820 0 557 -6.592861 -6.592861 5.116996 -12.438697 0 558 -3.705357 -3.705357 3.984588 -11.395301 0 559 -1.513520 -1.513520 3.855850 -11.823892 0 560 -1.973254 -1.973254 3.953448 -11.364161 0 561 -4.192480 -4.192480 3.972216 -11.382929 0 562 -3.421385 -3.421385 3.410123 -10.820836 0 563 -6.806633 -6.806633 2.692188 -10.660230 0 564 -1.300189 -1.300189 3.121576 -11.109383 0 565 -6.456484 -6.456484 3.436372 -11.466430 0 566 -5.272760 -5.272760 2.925413 -10.955471 0 567 -5.371250 -5.371250 2.842293 -10.830100 0 568 -2.924654 -2.924654 2.790071 -11.175030 0 569 -2.863352 -2.863352 3.115339 -11.674911 0 570 -4.487874 -4.487874 3.658482 -12.218054 0 571 -4.412896 -4.412896 3.916005 -12.605790 0 572 -3.185967 -3.185967 3.619695 -12.309479 0 573 -4.810513 -4.810513 2.915812 -11.741604 0 574 -2.511660 -2.511660 3.620352 -12.596101 0 575 -4.279786 -4.279786 3.791655 -13.412681 0 576 -5.758769 -5.758769 3.970091 -12.945840 0 577 -6.560281 -6.560281 2.518195 -12.139221 0 578 -2.960049 -2.960049 1.981907 -11.437697 0 579 -3.733358 -3.733358 2.667231 -12.123020 0 580 -4.344892 -4.344892 2.600813 -12.056603 0 581 -6.356539 -6.356539 2.162541 -11.618330 0 582 -8.066854 -8.066854 2.030501 -11.651527 0 583 -5.838075 -5.838075 1.916214 -12.039979 0 584 -2.310525 -2.310525 2.962012 -13.572131 0 585 -5.061883 -5.061883 3.062592 -14.129493 0 586 -7.902661 -7.902661 3.760352 -14.827253 0 587 -7.654868 -7.654868 3.649729 -14.937876 0 588 -2.992487 -2.992487 2.929761 -14.447300 0 589 -5.305060 -5.305060 2.951969 -14.240116 0 590 -4.727895 -4.727895 2.622998 -13.911144 0 591 -7.806376 -7.806376 2.622998 -13.911144 0 592 -5.533451 -5.533451 1.922773 -13.533945 0 593 -4.720891 -4.720891 1.986777 -13.597948 0 594 -5.644073 -5.644073 2.507102 -14.118274 0 595 -6.054865 -6.054865 2.825490 -14.436662 0 596 -9.702415 -9.702415 2.887155 -14.498327 0 597 -9.498429 -9.498429 2.887155 -14.498327 0 598 -2.493494 -2.493494 3.048636 -14.995011 0 599 -8.335606 -8.335606 3.551274 -15.497649 0 600 -5.805586 -5.805586 3.171096 -15.117471 0 601 -5.601854 -5.601854 2.966959 -15.076688 0 602 -5.973188 -5.973188 3.495245 -16.380830 0 603 -4.030868 -4.030868 2.554052 -16.584334 0 604 -8.311293 -8.311293 3.682921 -16.568506 0 605 -3.100040 -3.100040 3.682921 -16.568506 0 606 -7.535112 -7.535112 3.506708 -16.392293 0 607 -7.015141 -7.015141 2.922896 -16.953178 0 608 -7.465775 -7.465775 2.893797 -16.924078 0 609 -2.258369 -2.258369 3.291708 -16.177293 0 610 -6.442793 -6.442793 2.922864 -15.808449 0 611 -9.013013 -9.013013 2.125692 -15.011277 0 612 -7.466331 -7.466331 1.764878 -14.650464 0 613 -8.716577 -8.716577 1.981141 -14.866727 0 614 -9.905082 -9.905082 1.981141 -14.866727 0 615 -7.192530 -7.192530 1.839250 -14.724835 0 616 -3.709826 -3.709826 1.192530 -15.222812 0 617 -4.835126 -4.835126 1.981141 -14.866727 0 618 -5.347735 -5.347735 0.386000 -13.271585 0 619 -7.256794 -7.256794 0.802973 -12.854612 0 620 -6.008870 -6.008870 1.242898 -13.294536 0 621 -5.710140 -5.710140 0.802973 -12.854612 0 622 -7.138076 -7.138076 -0.166413 -12.719173 0 623 -5.486622 -5.486622 0.691131 -13.669095 0 624 -7.423230 -7.423230 -0.061292 -12.916673 0 625 -5.992552 -5.992552 0.031051 -13.009016 0 626 -6.025819 -6.025819 0.031051 -13.009016 0 627 -5.763488 -5.763488 -0.061292 -12.916673 0 628 -9.152842 -9.152842 0.643131 -13.621095 0 629 -4.947763 -4.947763 -0.267572 -13.337683 0 630 -5.312095 -5.312095 -0.603021 -13.673132 0 631 -5.140594 -5.140594 -0.493181 -13.782972 0 632 -8.114486 -8.114486 -0.281520 -13.323736 0 633 -6.488982 -6.488982 -0.309284 -13.966869 0 634 -7.678385 -7.678385 -0.291117 -14.555343 0 635 -10.031836 -10.031836 -0.896886 -14.459884 0 636 -7.918713 -7.918713 -0.896886 -14.459884 0 637 -6.802628 -6.802628 -0.587367 -15.250060 0 638 -8.837612 -8.837612 -0.727296 -15.389990 0 639 -8.622168 -8.622168 -0.421981 -15.806991 0 640 -11.997592 -11.997592 -0.721350 -16.522985 0 641 -8.803812 -8.803812 -0.201202 -17.043133 0 642 -8.840204 -8.840204 -0.312285 -16.996481 0 643 -6.756679 -6.756679 -0.753566 -16.555200 0 644 -6.489111 -6.489111 -1.234777 -16.073989 0 645 -9.432196 -9.432196 -0.560687 -17.046938 0 646 -8.058643 -8.058643 -1.064698 -16.610527 0 647 -8.654383 -8.654383 -1.371945 -16.308463 0 648 -7.610917 -7.610917 -1.418007 -16.257218 0 649 -9.723912 -9.723912 -1.418007 -16.257218 0 650 -9.025920 -9.025920 -0.740110 -16.935114 0 651 -13.479297 -13.479297 -0.461714 -17.145910 0 652 -11.460973 -11.460973 -0.217291 -17.390333 0 653 -9.836700 -9.836700 -0.706310 -16.901314 0 654 -10.134987 -10.134987 -0.742702 -16.937706 0 655 -6.124257 -6.124257 -1.000439 -16.308327 0 656 -7.669710 -7.669710 -1.442329 -16.609511 0 657 -25.717885 -9.025920 -1.994991 -16.056849 1 658 -9.732316 -9.732316 -1.327212 -15.981554 0 659 -9.400018 -9.400018 -1.994991 -16.056849 0 660 -7.349048 -7.349048 -2.138168 -15.913672 0 661 -6.918614 -6.918614 -2.039774 -16.012066 0 662 -4.644621 -4.644621 -1.100392 -15.754733 0 663 -7.814512 -7.814512 -1.374915 -15.347208 0 664 -6.999516 -6.999516 -1.719792 -15.002332 0 665 -10.638205 -10.638205 -1.719792 -15.002332 0 666 -9.907166 -9.907166 -1.752506 -14.370272 0 667 -7.567737 -7.567737 -1.717077 -14.405701 0 668 -9.391755 -9.391755 -2.450894 -13.671884 0 669 -7.753135 -7.753135 -2.389669 -14.150705 0 670 -8.054450 -8.054450 -2.929273 -13.193505 0 671 -9.472058 -9.472058 -2.272019 -13.850759 0 672 -8.361062 -8.361062 -2.118481 -13.990420 0 673 -7.271663 -7.271663 -1.604673 -14.504228 0 674 -8.427563 -8.427563 -1.941543 -14.181235 0 675 -7.340866 -7.340866 -2.611289 -13.511489 0 676 -8.523586 -8.523586 -2.245041 -14.192503 0 677 -11.649602 -11.649602 -2.429402 -14.008142 0 678 -8.061389 -8.061389 -3.226213 -13.211331 0 679 -9.327534 -9.327534 -3.129554 -13.307991 0 680 -7.578625 -7.578625 -2.695602 -13.844772 0 681 -8.270187 -8.270187 -3.179044 -13.258501 0 682 -6.799103 -6.799103 -2.296456 -14.243919 0 683 -11.897201 -11.897201 -1.749922 -14.972202 0 684 -6.105954 -6.105954 -2.000122 -14.540252 0 685 -6.308229 -6.308229 -1.829805 -14.710570 0 686 -8.218772 -8.218772 -1.731857 -15.123268 0 687 -7.465009 -7.465009 -1.328047 -15.719125 0 688 -9.929549 -9.929549 -0.897629 -16.149543 0 689 -8.053036 -8.053036 -0.644230 -15.896144 0 690 -8.812181 -8.812181 -0.721288 -15.819086 0 691 -11.775775 -11.775775 -1.031546 -15.508829 0 692 -9.292914 -9.292914 -0.721288 -15.819086 0 693 -8.089849 -8.089849 -0.644230 -15.896144 0 694 -10.969398 -10.969398 -0.407474 -17.216887 0 695 -12.694388 -12.694388 -1.181684 -17.077759 0 696 -7.910436 -7.910436 -0.068489 -18.190954 0 697 -9.129722 -9.129722 -0.409930 -18.175898 0 698 -10.660551 -10.660551 -2.005819 -17.740754 0 699 -11.503712 -11.503712 -1.524843 -18.334255 0 700 -6.970637 -6.970637 -1.524843 -18.334255 0 701 -7.484025 -7.484025 -1.782309 -18.460539 0 702 -11.203502 -11.203502 -2.332060 -18.066995 0 703 -7.645138 -7.645138 -2.518332 -17.880723 0 704 -10.199528 -10.199528 -2.895493 -17.503562 0 705 -7.888185 -7.888185 -2.967228 -17.447497 0 706 -12.432061 -12.432061 -2.435747 -17.978979 0 707 -11.482637 -11.482637 -1.251547 -19.163179 0 708 -14.004683 -14.004683 -2.337757 -18.061298 0 709 -9.873287 -9.873287 -2.427912 -17.971144 0 710 -10.207363 -10.207363 -2.251490 -18.147565 0 711 -12.076098 -12.076098 -2.251490 -18.147565 0 712 -9.351541 -9.351541 -2.173387 -18.069461 0 713 -10.121424 -10.121424 -2.792862 -17.449986 0 714 -10.631217 -10.631217 -3.035069 -17.363986 0 715 -9.994583 -9.994583 -2.259653 -17.983195 0 716 -10.812405 -10.812405 -2.949891 -17.449164 0 717 -11.948369 -11.948369 -2.889291 -17.388564 0 718 8.443520 -10.207363 -3.615804 -16.798922 1 719 -13.624900 -13.624900 -3.566211 -16.711645 0 720 -9.983922 -9.983922 -3.697051 -16.545797 0 721 -7.574850 -7.574850 -3.649616 -16.339550 0 722 -8.641288 -8.641288 -3.622406 -16.620442 0 723 -10.607213 -10.607213 -3.495565 -16.493601 0 724 -9.434477 -9.434477 -3.898877 -16.090289 0 725 -9.205209 -9.205209 -3.652368 -16.336798 0 726 -11.799755 -11.799755 -3.453147 -16.514698 0 727 -7.297338 -7.297338 -2.834490 -17.133355 0 728 -11.497214 -11.497214 -2.267255 -17.412340 0 729 -10.138928 -10.138928 -2.187089 -16.681864 0 730 -10.712078 -10.712078 -2.187089 -16.681864 0 731 -8.922397 -8.922397 -2.915529 -15.953424 0 732 -9.839797 -9.839797 -3.303184 -15.494596 0 733 -8.428877 -8.428877 -3.056675 -15.741104 0 734 -11.203789 -11.203789 -3.358568 -15.510385 0 735 -9.398890 -9.398890 -3.415425 -16.264170 0 736 -10.705525 -10.705525 -3.340779 -16.338816 0 737 -8.654351 -8.654351 -2.458968 -17.818888 0 738 -8.913498 -8.913498 -2.458968 -17.818888 0 739 -14.056843 -14.056843 -2.458968 -17.818888 0 740 -8.479419 -8.479419 -3.616584 -16.762018 0 741 -9.064292 -9.064292 -2.458968 -17.818888 0 742 -11.963697 -11.963697 -2.509506 -17.170089 0 743 -7.918956 -7.918956 -3.172250 -16.406007 0 744 -8.893071 -8.893071 -2.453181 -17.125076 0 745 -11.978043 -11.978043 -1.695487 -17.882771 0 746 -10.506286 -10.506286 -1.942463 -18.436139 0 747 -11.985041 -11.985041 -1.597522 -18.781080 0 748 -12.585050 -12.585050 -1.193377 -19.221824 0 749 -13.011362 -13.011362 -1.193377 -19.221824 0 750 -8.661657 -8.661657 -1.521559 -19.491012 0 751 -10.207601 -10.207601 -1.521559 -19.491012 0 752 -10.189301 -10.189301 -1.615822 -18.799380 0 753 -6.594348 -6.594348 -2.004469 -18.410732 0 754 -9.789129 -9.789129 -2.052858 -18.362344 0 755 -9.222485 -9.222485 -2.051107 -18.364095 0 756 -7.785350 -7.785350 -2.423251 -18.589320 0 757 -12.943592 -12.943592 -2.259448 -18.753123 0 758 -11.676527 -11.676527 -1.615822 -18.799380 0 759 -13.376047 -13.376047 -1.207002 -19.171600 0 760 -10.901260 -10.901260 -1.105132 -19.069730 0 761 -10.603267 -10.603267 -1.708391 -18.466471 0 762 -10.935113 -10.935113 -2.438315 -17.736547 0 763 -8.887820 -8.887820 -2.095659 -18.282943 0 764 -10.087431 -10.087431 -1.641725 -18.533137 0 765 -9.862144 -9.862144 -1.006042 -18.745178 0 766 -9.875610 -9.875610 -2.505344 -17.595850 0 767 -13.787036 -13.787036 -2.401481 -17.699713 0 768 -12.572964 -12.572964 -2.661687 -17.471029 0 769 -7.673684 -7.673684 -3.026587 -17.148275 0 770 -6.286761 -6.286761 -3.403508 -16.771354 0 771 -8.308769 -8.308769 -3.671243 -16.461473 0 772 -8.221577 -8.221577 -3.671243 -16.461473 0 773 -10.528450 -10.528450 -3.905278 -16.195917 0 774 -10.667655 -10.667655 -4.068707 -15.682512 0 775 -13.192959 -13.192959 -4.284206 -15.440081 0 776 -8.484980 -8.484980 -3.467029 -16.257258 0 777 -8.194163 -8.194163 -3.070691 -16.086382 0 778 -10.050597 -10.050597 -3.064374 -16.080065 0 779 -9.063724 -9.063724 -2.350779 -16.793659 0 780 -10.066358 -10.066358 -1.818750 -16.377697 0 781 -10.441165 -10.441165 -1.759431 -16.437015 0 782 -10.201032 -10.201032 -1.818750 -16.377697 0 783 -9.098223 -9.098223 -2.297895 -16.846544 0 784 -12.829292 -12.829292 -2.010255 -17.146819 0 785 -9.572219 -9.572219 -2.692047 -17.409148 0 786 -9.578537 -9.578537 -1.400063 -17.757011 0 787 -8.875957 -8.875957 -1.104937 -18.039502 0 788 -6.473736 -6.473736 -1.599477 -17.544962 0 789 -8.898824 -8.898824 -1.599477 -17.544962 0 790 -8.342426 -8.342426 -2.266312 -16.878127 0 791 -13.415238 -13.415238 -0.993542 -17.202904 0 792 -4.318092 -4.318092 -0.340125 -18.804313 0 793 -11.400119 -11.400119 -0.759957 -18.384482 0 794 -8.086774 -8.086774 0.939858 -19.136304 0 795 -12.536231 -12.536231 0.412671 -18.609117 0 796 -11.160834 -11.160834 1.608785 -19.406434 0 797 -10.442468 -10.442468 1.790913 -19.588562 0 798 -6.271823 -6.271823 1.631653 -19.383567 0 799 -7.609191 -7.609191 2.319737 -20.071650 0 800 -9.725720 -9.725720 2.727157 -20.433160 0 801 -8.258947 -8.258947 2.681334 -20.478983 0 802 -8.853002 -8.853002 2.447473 -21.349660 0 803 -6.288309 -6.288309 2.447473 -21.349660 0 804 -11.002650 -11.002650 1.654608 -19.360611 0 805 -9.905660 -9.905660 0.528883 -19.431069 0 806 -6.452553 -6.452553 0.906350 -18.612353 0 807 -9.451093 -9.451093 0.231632 -19.133818 0 808 -6.623700 -6.623700 0.288792 -17.994795 0 809 -15.518919 -15.518919 0.060491 -17.766494 0 810 -8.660969 -8.660969 -0.048101 -17.657902 0 811 -12.053808 -12.053808 -0.542785 -18.152586 0 812 -6.397409 -6.397409 -0.580373 -18.114998 0 813 -11.636788 -11.636788 -0.580373 -18.114998 0 814 -9.680276 -9.680276 -0.638831 -18.263356 0 815 -8.466938 -8.466938 -0.463420 -18.438767 0 816 -7.471020 -7.471020 -1.018390 -18.342163 0 817 -11.608259 -11.608259 -1.018390 -18.342163 0 818 -8.563042 -8.563042 -1.018390 -18.342163 0 819 -10.589499 -10.589499 -1.417694 -17.973635 0 820 -8.002144 -8.002144 -0.807272 -18.584058 0 821 -9.347686 -9.347686 -1.358403 -18.032927 0 822 -9.695665 -9.695665 -1.579434 -17.781119 0 823 -11.666017 -11.666017 -1.641128 -17.719424 0 824 -8.521872 -8.521872 -1.846304 -17.368883 0 825 -10.158995 -10.158995 -1.918986 -17.441566 0 826 -12.508431 -12.508431 -1.568445 -17.646742 0 827 -8.633912 -8.633912 -0.654764 -18.143556 0 828 -10.647953 -10.647953 -0.257367 -18.540954 0 829 -11.338906 -11.338906 -0.183199 -18.615121 0 830 -10.274801 -10.274801 -0.439601 -18.255771 0 831 -10.233446 -10.233446 -0.439601 -18.255771 0 832 -5.802513 -5.802513 0.025827 -18.290956 0 833 -9.399160 -9.399160 -0.224479 -18.040649 0 834 -7.458099 -7.458099 0.432187 -18.692143 0 835 -9.132564 -9.132564 1.156693 -18.424518 0 836 -9.607594 -9.607594 0.956806 -18.210830 0 837 -13.156607 -13.156607 1.027440 -18.281463 0 838 -6.104133 -6.104133 1.027440 -18.281463 0 839 7.701354 -8.627012 0.490559 -17.744583 1 840 -5.666991 -5.666991 0.714457 -17.717465 0 841 -5.010128 -5.010128 0.703727 -17.531416 0 842 -9.129978 -9.129978 1.620508 -16.696275 0 843 -8.627012 -8.627012 1.196916 -16.272683 0 844 -6.093441 -6.093441 0.790409 -15.706607 0 845 -8.501504 -8.501504 0.790409 -15.706607 0 846 -6.955774 -6.955774 1.739069 -16.398702 0 847 -7.537883 -7.537883 1.739069 -16.398702 0 848 -6.353031 -6.353031 1.622828 -16.282462 0 849 -8.413845 -8.413845 0.849326 -15.508959 0 850 -9.921840 -9.921840 -0.200358 -14.459276 0 851 -9.254802 -9.254802 0.215441 -14.904275 0 852 -7.187916 -7.187916 -1.077569 -13.998198 0 853 -6.804699 -6.804699 -1.077569 -13.998198 0 854 -3.821995 -3.821995 -1.484674 -13.591093 0 855 -8.941027 -8.941027 -1.433411 -13.255424 0 856 -7.329817 -7.329817 -1.756458 -12.932376 0 857 -5.660773 -5.660773 -1.707594 -13.305267 0 858 -5.748305 -5.748305 -1.390320 -13.298514 0 859 -7.344417 -7.344417 -1.433411 -13.255424 0 860 -7.963998 -7.963998 -0.294135 -14.374185 0 861 -7.707752 -7.707752 0.353113 -15.021433 0 862 -9.081348 -9.081348 0.849326 -15.508959 0 863 -9.853057 -9.853057 0.847627 -15.507261 0 864 -7.859553 -7.859553 0.447082 -14.822913 0 865 -6.093459 -6.093459 1.131720 -15.223168 0 866 -6.882726 -6.882726 1.962823 -16.622456 0 867 -7.045724 -7.045724 0.486540 -15.146173 0 868 -7.506431 -7.506431 0.797015 -14.888462 0 869 -10.560757 -10.560757 1.131720 -15.223168 0 870 -4.134631 -4.134631 2.006073 -16.097520 0 871 -7.334160 -7.334160 1.717637 -16.385957 0 872 -2.543407 -2.543407 2.696338 -16.787786 0 873 -5.551132 -5.551132 3.359296 -17.413601 0 874 -5.557472 -5.557472 3.359296 -17.413601 0 875 -9.597129 -9.597129 2.679465 -16.444917 0 876 -6.234376 -6.234376 2.265183 -16.030635 0 877 -5.719000 -5.719000 3.327815 -15.796567 0 878 -10.253305 -10.253305 3.500156 -15.968909 0 879 -7.027153 -7.027153 4.107391 -16.576143 0 880 -3.277825 -3.277825 4.002682 -16.471434 0 881 -8.024966 -8.024966 3.074034 -15.542787 0 882 -4.088218 -4.088218 2.181800 -14.524466 0 883 -9.886444 -9.886444 1.833792 -14.176458 0 884 -5.465992 -5.465992 1.679668 -14.022334 0 885 -4.626248 -4.626248 0.993107 -13.335774 0 886 -8.139784 -8.139784 0.966924 -13.309590 0 887 -6.171333 -6.171333 1.446066 -13.788732 0 888 -7.487844 -7.487844 1.144210 -13.486877 0 889 -4.201900 -4.201900 2.112739 -14.455406 0 890 -4.935970 -4.935970 2.181800 -14.524466 0 891 -8.051641 -8.051641 2.776652 -14.008275 0 892 -6.283575 -6.283575 2.717340 -13.948963 0 893 -6.577917 -6.577917 2.001588 -13.233210 0 894 -5.582490 -5.582490 2.034909 -13.199889 0 895 -4.613300 -4.613300 2.531026 -13.696006 0 896 -6.489681 -6.489681 2.132861 -13.297842 0 897 -5.615811 -5.615811 2.315248 -13.546871 0 898 -5.383020 -5.383020 2.099540 -13.331163 0 899 -3.559161 -3.559161 2.488447 -13.653427 0 900 -7.797923 -7.797923 2.687918 -13.453957 0 901 -9.805537 -9.805537 1.992106 -12.758146 0 902 -4.040180 -4.040180 2.132861 -13.297842 0 903 -0.019255 -0.019255 2.837078 -14.002058 0 904 -5.857598 -5.857598 2.744540 -13.510579 0 905 -4.796007 -4.796007 3.025108 -13.512337 0 906 -3.665905 -3.665905 3.873442 -13.465457 0 907 -2.701801 -2.701801 4.681279 -13.907879 0 908 -6.459681 -6.459681 4.913691 -14.007474 0 909 -6.111748 -6.111748 4.560972 -13.465441 0 910 -4.546891 -4.546891 4.369087 -13.273556 0 911 -0.992039 -0.992039 4.369087 -13.273556 0 912 -5.243615 -5.243615 4.913691 -14.007474 0 913 -5.849748 -5.849748 3.872676 -12.966459 0 914 -8.657230 -8.657230 3.340663 -12.245132 0 915 0.013710 0.013710 3.767670 -12.672139 0 916 -4.272747 -4.272747 4.193908 -13.098377 0 917 -3.859143 -3.859143 4.739573 -13.285066 0 918 -0.285185 -0.285185 5.746194 -13.631048 0 919 -0.368422 -0.368422 5.311762 -13.857256 0 920 -4.452234 -4.452234 4.739573 -13.285066 0 921 -3.942427 -3.942427 4.414149 -12.505867 0 922 -5.078934 -5.078934 4.477141 -12.361995 0 923 -5.528790 -5.528790 4.789178 -12.507464 0 924 -6.955623 -6.955623 4.449488 -12.278772 0 925 -5.044986 -5.044986 4.415567 -12.133853 0 926 -3.839739 -3.839739 4.045286 -11.724764 0 927 -2.714237 -2.714237 3.700820 -11.380299 0 928 -2.209695 -2.209695 2.625013 -10.304491 0 929 -2.679171 -2.679171 3.348472 -11.027951 0 930 -1.227082 -1.227082 3.700820 -11.380299 0 931 -4.513613 -4.513613 2.819757 -10.499235 0 932 -3.503033 -3.503033 1.724761 -9.404239 0 933 -4.045859 -4.045859 1.880733 -9.560211 0 934 -1.208698 -1.208698 2.373978 -9.422515 0 935 -3.343872 -3.343872 2.473880 -9.522417 0 936 -3.914642 -3.914642 2.388507 -9.407986 0 937 -2.926197 -2.926197 1.949169 -8.968648 0 938 -2.127830 -2.127830 1.767915 -8.773980 0 939 -5.020633 -5.020633 2.025069 -8.712812 0 940 -3.509739 -3.509739 2.257104 -8.944848 0 941 -5.458266 -5.458266 2.448082 -9.135825 0 942 -4.941477 -4.941477 2.432743 -9.120486 0 943 -3.524269 -3.524269 2.115037 -8.802781 0 944 -2.819701 -2.819701 2.483792 -8.367135 0 945 -4.930667 -4.930667 2.191604 -8.043997 0 946 -1.568355 -1.568355 2.298100 -7.937501 0 947 -4.789208 -4.789208 2.115106 -7.967499 0 948 -2.455575 -2.455575 2.208019 -8.060412 0 949 -4.368546 -4.368546 2.039036 -7.891430 0 950 -2.732531 -2.732531 2.605763 -8.245165 0 951 -2.084439 -2.084439 2.648658 -8.532001 0 952 -1.534714 -1.534714 3.334589 -8.973990 0 953 -1.219135 -1.219135 3.078546 -8.717948 0 954 -2.941671 -2.941671 2.692933 -8.157995 0 955 -2.328370 -2.328370 2.857798 -8.322861 0 956 -2.686642 -2.686642 2.697365 -8.070648 0 957 -2.602175 -2.602175 2.682271 -8.055554 0 958 -1.349286 -1.349286 2.928461 -8.132812 0 959 -3.443697 -3.443697 2.917203 -8.121554 0 960 -3.791500 -3.791500 2.585727 -7.496878 0 961 -2.989025 -2.989025 3.161788 -7.818528 0 962 -1.357979 -1.357979 2.699634 -7.356374 0 963 -4.459286 -4.459286 3.161788 -7.818528 0 964 1.278043 1.278043 3.631898 -8.288637 0 965 -3.261486 -3.261486 4.073094 -8.729833 0 966 -2.255023 -2.255023 4.073094 -8.729833 0 967 -5.573807 -5.573807 4.740080 -9.250126 0 968 -2.125162 -2.125162 5.648860 -9.899183 0 969 -2.725776 -2.725776 6.488144 -10.515743 0 970 -0.181174 -0.181174 6.602848 -10.630446 0 971 -1.630094 -1.630094 7.157691 -11.185290 0 972 -2.013799 -2.013799 7.542343 -10.802530 0 973 -1.289570 -1.289570 7.648779 -10.908966 0 974 -2.762209 -2.762209 7.648779 -10.908966 0 975 -4.026165 -4.026165 7.265073 -11.292672 0 976 2.373612 2.373612 6.795451 -10.055638 0 977 2.287711 2.287711 6.463232 -9.723419 0 978 -0.742487 -0.742487 6.649116 -9.402798 0 979 -0.735738 -0.735738 7.361328 -9.940469 0 980 1.444976 1.444976 6.954431 -8.886205 0 981 0.499573 0.499573 6.948494 -8.880268 0 982 -3.549683 -3.549683 7.115226 -8.600199 0 983 0.231040 0.231040 7.173007 -8.657980 0 984 -0.434319 -0.434319 7.290218 -8.761695 0 985 -3.857747 -3.857747 7.481174 -8.349812 0 986 -2.283152 -2.283152 7.591638 -8.460276 0 987 -2.322953 -2.322953 7.814671 -8.683308 0 988 -1.376841 -1.376841 7.469332 -7.910807 0 989 -0.007156 -0.007156 7.443955 -8.312592 0 990 -0.965887 -0.965887 6.579616 -7.749673 0 991 0.978217 0.978217 7.305529 -8.174167 0 992 0.303988 0.303988 6.837712 -7.279187 0 993 -1.384319 -1.384319 7.030861 -7.899499 0 994 0.511217 0.511217 6.524228 -7.924435 0 995 0.995050 0.995050 6.974820 -7.843458 0 996 1.217818 1.217818 6.174443 -7.574649 0 997 0.453970 0.453970 6.698121 -8.629895 0 998 -2.531342 -2.531342 6.110080 -7.083124 0 999 -4.902825 -4.902825 6.110777 -6.125089 0 gsl/doc/examples/matrixw.txt0000644000175000017500000000004113536674414014544 0ustar eddedddifferences = 0 (should be zero) gsl/doc/examples/linalglu.c0000644000175000017500000000136313536674414014273 0ustar eddedd#include #include int main (void) { double a_data[] = { 0.18, 0.60, 0.57, 0.96, 0.41, 0.24, 0.99, 0.58, 0.14, 0.30, 0.97, 0.66, 0.51, 0.13, 0.19, 0.85 }; double b_data[] = { 1.0, 2.0, 3.0, 4.0 }; gsl_matrix_view m = gsl_matrix_view_array (a_data, 4, 4); gsl_vector_view b = gsl_vector_view_array (b_data, 4); gsl_vector *x = gsl_vector_alloc (4); int s; gsl_permutation * p = gsl_permutation_alloc (4); gsl_linalg_LU_decomp (&m.matrix, p, &s); gsl_linalg_LU_solve (&m.matrix, p, &b.vector, x); printf ("x = \n"); gsl_vector_fprintf (stdout, x, "%g"); gsl_permutation_free (p); gsl_vector_free (x); return 0; } gsl/doc/examples/matrix.txt0000644000175000017500000000073213536674414014364 0ustar eddeddm(0,0) = 0.23 m(0,1) = 1.23 m(0,2) = 2.23 m(1,0) = 100.23 m(1,1) = 101.23 m(1,2) = 102.23 m(2,0) = 200.23 m(2,1) = 201.23 m(2,2) = 202.23 m(3,0) = 300.23 m(3,1) = 301.23 m(3,2) = 302.23 m(4,0) = 400.23 m(4,1) = 401.23 m(4,2) = 402.23 m(5,0) = 500.23 m(5,1) = 501.23 m(5,2) = 502.23 m(6,0) = 600.23 m(6,1) = 601.23 m(6,2) = 602.23 m(7,0) = 700.23 m(7,1) = 701.23 m(7,2) = 702.23 m(8,0) = 800.23 m(8,1) = 801.23 m(8,2) = 802.23 m(9,0) = 900.23 m(9,1) = 901.23 m(9,2) = 902.23 gsl/doc/examples/vector.c0000644000175000017500000000054613536674414013770 0ustar eddedd#include #include int main (void) { int i; gsl_vector * v = gsl_vector_alloc (3); for (i = 0; i < 3; i++) { gsl_vector_set (v, i, 1.23 + i); } for (i = 0; i < 100; i++) /* OUT OF RANGE ERROR */ { printf ("v_%d = %g\n", i, gsl_vector_get (v, i)); } gsl_vector_free (v); return 0; } gsl/doc/examples/eigen.c0000644000175000017500000000213213536674414013546 0ustar eddedd#include #include #include int main (void) { double data[] = { 1.0 , 1/2.0, 1/3.0, 1/4.0, 1/2.0, 1/3.0, 1/4.0, 1/5.0, 1/3.0, 1/4.0, 1/5.0, 1/6.0, 1/4.0, 1/5.0, 1/6.0, 1/7.0 }; gsl_matrix_view m = gsl_matrix_view_array (data, 4, 4); gsl_vector *eval = gsl_vector_alloc (4); gsl_matrix *evec = gsl_matrix_alloc (4, 4); gsl_eigen_symmv_workspace * w = gsl_eigen_symmv_alloc (4); gsl_eigen_symmv (&m.matrix, eval, evec, w); gsl_eigen_symmv_free (w); gsl_eigen_symmv_sort (eval, evec, GSL_EIGEN_SORT_ABS_ASC); { int i; for (i = 0; i < 4; i++) { double eval_i = gsl_vector_get (eval, i); gsl_vector_view evec_i = gsl_matrix_column (evec, i); printf ("eigenvalue = %g\n", eval_i); printf ("eigenvector = \n"); gsl_vector_fprintf (stdout, &evec_i.vector, "%g"); } } gsl_vector_free (eval); gsl_matrix_free (evec); return 0; } gsl/doc/examples/polyroots.c0000644000175000017500000000072113536674414014533 0ustar eddedd#include #include int main (void) { int i; /* coefficients of P(x) = -1 + x^5 */ double a[6] = { -1, 0, 0, 0, 0, 1 }; double z[10]; gsl_poly_complex_workspace * w = gsl_poly_complex_workspace_alloc (6); gsl_poly_complex_solve (a, 6, w, z); gsl_poly_complex_workspace_free (w); for (i = 0; i < 5; i++) { printf ("z%d = %+.18f %+.18f\n", i, z[2*i], z[2*i+1]); } return 0; } gsl/doc/examples/fft.c0000644000175000017500000000136713536674414013247 0ustar eddedd#include #include #include #include #define REAL(z,i) ((z)[2*(i)]) #define IMAG(z,i) ((z)[2*(i)+1]) int main (void) { int i; double data[2*128]; for (i = 0; i < 128; i++) { REAL(data,i) = 0.0; IMAG(data,i) = 0.0; } REAL(data,0) = 1.0; for (i = 1; i <= 10; i++) { REAL(data,i) = REAL(data,128-i) = 1.0; } for (i = 0; i < 128; i++) { printf ("%d %e %e\n", i, REAL(data,i), IMAG(data,i)); } printf ("\n\n"); gsl_fft_complex_radix2_forward (data, 1, 128); for (i = 0; i < 128; i++) { printf ("%d %e %e\n", i, REAL(data,i)/sqrt(128), IMAG(data,i)/sqrt(128)); } return 0; } gsl/doc/examples/interp_compare.txt0000644000175000017500000000662213536674414016073 0ustar eddedd7.99 0 8.09 2.76429e-05 8.19 0.0437498 8.7 0.169183 9.2 0.469428 10 0.94374 12 0.998636 15 0.999919 20 0.999994 7.99 0 0 0 8.1101 0.00610446 0.00744955 0.00331374 8.2302 0.0614194 0.0555643 0.0585695 8.3503 0.0977872 0.077852 0.0890428 8.4704 0.119747 0.0939162 0.109376 8.5905 0.140403 0.120807 0.133115 8.7106 0.172856 0.175411 0.173766 8.8307 0.226073 0.246775 0.235226 8.9508 0.296298 0.319125 0.309035 9.0709 0.377336 0.391778 0.387772 9.191 0.462995 0.464047 0.464021 9.3111 0.54776 0.537332 0.542831 9.4312 0.629514 0.612947 0.632609 9.5513 0.707207 0.688966 0.724776 9.6714 0.779786 0.76345 0.810671 9.7915 0.846198 0.834458 0.881632 9.9116 0.905394 0.900051 0.928998 10.0317 0.956324 0.958173 0.945466 10.1518 0.998494 1.0054 0.951748 10.2719 1.03243 1.04165 0.957624 10.392 1.05878 1.06799 0.963098 10.5121 1.07819 1.08551 0.96817 10.6322 1.0913 1.09528 0.972843 10.7523 1.09875 1.09837 0.97712 10.8724 1.10119 1.09586 0.981003 10.9925 1.09925 1.08883 0.984493 11.1126 1.09359 1.07836 0.987594 11.2327 1.08484 1.06552 0.990307 11.3528 1.07366 1.05138 0.992634 11.4729 1.06067 1.03704 0.994578 11.593 1.04654 1.02355 0.996142 11.7131 1.03189 1.012 0.997326 11.8332 1.01737 1.00347 0.998134 11.9533 1.00363 0.999027 0.998568 12.0734 0.991283 0.998669 0.998698 12.1935 0.980549 0.998727 0.998796 12.3136 0.971356 0.998787 0.998889 12.4337 0.963625 0.99885 0.998979 12.5538 0.957277 0.998914 0.999063 12.6739 0.952232 0.99898 0.999144 12.794 0.94841 0.999047 0.999221 12.9141 0.945733 0.999114 0.999293 13.0342 0.944121 0.999182 0.999361 13.1543 0.943493 0.999249 0.999425 13.2744 0.943772 0.999316 0.999485 13.3945 0.944877 0.999381 0.999541 13.5146 0.946729 0.999445 0.999593 13.6347 0.949248 0.999507 0.999641 13.7548 0.952355 0.999566 0.999685 13.8749 0.955971 0.999622 0.999725 13.995 0.960016 0.999674 0.999762 14.1151 0.964411 0.999723 0.999794 14.2352 0.969075 0.999767 0.999823 14.3553 0.973931 0.999807 0.999848 14.4754 0.978897 0.999841 0.999869 14.5955 0.983896 0.99987 0.999887 14.7156 0.988847 0.999893 0.9999 14.8357 0.99367 0.999909 0.999911 14.9558 0.998288 0.999918 0.999917 15.0759 1.00262 0.999921 0.999921 15.196 1.00665 0.999925 0.999925 15.3161 1.01037 0.999929 0.999928 15.4362 1.0138 0.999935 0.999931 15.5563 1.01694 0.999941 0.999934 15.6764 1.01979 0.999949 0.999937 15.7965 1.02238 0.999956 0.999939 15.9166 1.0247 0.999965 0.999942 16.0367 1.02677 0.999974 0.999944 16.1568 1.02858 0.999983 0.999947 16.2769 1.03015 0.999993 0.999949 16.397 1.03149 1 0.999951 16.5171 1.0326 1.00001 0.999953 16.6372 1.03349 1.00002 0.999955 16.7573 1.03417 1.00003 0.999956 16.8774 1.03464 1.00004 0.999958 16.9975 1.03492 1.00005 0.99996 17.1176 1.035 1.00006 0.999961 17.2377 1.03491 1.00007 0.999963 17.3578 1.03464 1.00008 0.999964 17.4779 1.03421 1.00009 0.999966 17.598 1.03361 1.0001 0.999967 17.7181 1.03287 1.0001 0.999968 17.8382 1.03198 1.00011 0.99997 17.9583 1.03095 1.00011 0.999971 18.0784 1.0298 1.00012 0.999972 18.1985 1.02852 1.00012 0.999973 18.3186 1.02713 1.00012 0.999974 18.4387 1.02563 1.00013 0.999976 18.5588 1.02404 1.00012 0.999977 18.6789 1.02236 1.00012 0.999978 18.799 1.02059 1.00012 0.999979 18.9191 1.01875 1.00012 0.999981 19.0392 1.01683 1.00011 0.999982 19.1593 1.01486 1.0001 0.999983 19.2794 1.01284 1.00009 0.999985 19.3995 1.01076 1.00008 0.999986 19.5196 1.00866 1.00007 0.999987 19.6397 1.00652 1.00005 0.999989 19.7598 1.00436 1.00004 0.999991 19.8799 1.00218 1.00002 0.999992 20 0.999994 0.999994 0.999994 gsl/doc/examples/interp_compare.c0000644000175000017500000000303713536674414015473 0ustar eddedd#include #include #include #include #include int main(void) { size_t i; const size_t N = 9; /* this dataset is taken from * J. M. Hyman, Accurate Monotonicity preserving cubic interpolation, * SIAM J. Sci. Stat. Comput. 4, 4, 1983. */ const double x[] = { 7.99, 8.09, 8.19, 8.7, 9.2, 10.0, 12.0, 15.0, 20.0 }; const double y[] = { 0.0, 2.76429e-5, 4.37498e-2, 0.169183, 0.469428, 0.943740, 0.998636, 0.999919, 0.999994 }; gsl_interp_accel *acc = gsl_interp_accel_alloc(); gsl_spline *spline_cubic = gsl_spline_alloc(gsl_interp_cspline, N); gsl_spline *spline_akima = gsl_spline_alloc(gsl_interp_akima, N); gsl_spline *spline_steffen = gsl_spline_alloc(gsl_interp_steffen, N); gsl_spline_init(spline_cubic, x, y, N); gsl_spline_init(spline_akima, x, y, N); gsl_spline_init(spline_steffen, x, y, N); for (i = 0; i < N; ++i) printf("%g %g\n", x[i], y[i]); printf("\n\n"); for (i = 0; i <= 100; ++i) { double xi = (1 - i / 100.0) * x[0] + (i / 100.0) * x[N-1]; double yi_cubic = gsl_spline_eval(spline_cubic, xi, acc); double yi_akima = gsl_spline_eval(spline_akima, xi, acc); double yi_steffen = gsl_spline_eval(spline_steffen, xi, acc); printf("%g %g %g %g\n", xi, yi_cubic, yi_akima, yi_steffen); } gsl_spline_free(spline_cubic); gsl_spline_free(spline_akima); gsl_spline_free(spline_steffen); gsl_interp_accel_free(acc); return 0; } gsl/doc/examples/polyroots.txt0000644000175000017500000000036513536674414015134 0ustar eddeddz0 = -0.809016994374947673 +0.587785252292473359 z1 = -0.809016994374947673 -0.587785252292473359 z2 = +0.309016994374947507 +0.951056516295152976 z3 = +0.309016994374947507 -0.951056516295152976 z4 = +0.999999999999999889 +0.000000000000000000 gsl/doc/examples/fftreal.txt0000644000175000017500000000652513536674414014511 0ustar eddedd0: 0.000000e+00 1: 0.000000e+00 2: 0.000000e+00 3: 0.000000e+00 4: 0.000000e+00 5: 0.000000e+00 6: 0.000000e+00 7: 0.000000e+00 8: 0.000000e+00 9: 0.000000e+00 10: 0.000000e+00 11: 0.000000e+00 12: 0.000000e+00 13: 0.000000e+00 14: 0.000000e+00 15: 0.000000e+00 16: 0.000000e+00 17: 0.000000e+00 18: 0.000000e+00 19: 0.000000e+00 20: 0.000000e+00 21: 0.000000e+00 22: 0.000000e+00 23: 0.000000e+00 24: 0.000000e+00 25: 0.000000e+00 26: 0.000000e+00 27: 0.000000e+00 28: 0.000000e+00 29: 0.000000e+00 30: 0.000000e+00 31: 0.000000e+00 32: 0.000000e+00 33: 1.000000e+00 34: 1.000000e+00 35: 1.000000e+00 36: 1.000000e+00 37: 1.000000e+00 38: 1.000000e+00 39: 1.000000e+00 40: 1.000000e+00 41: 1.000000e+00 42: 1.000000e+00 43: 1.000000e+00 44: 1.000000e+00 45: 1.000000e+00 46: 1.000000e+00 47: 1.000000e+00 48: 1.000000e+00 49: 1.000000e+00 50: 1.000000e+00 51: 1.000000e+00 52: 1.000000e+00 53: 1.000000e+00 54: 1.000000e+00 55: 1.000000e+00 56: 1.000000e+00 57: 1.000000e+00 58: 1.000000e+00 59: 1.000000e+00 60: 1.000000e+00 61: 1.000000e+00 62: 1.000000e+00 63: 1.000000e+00 64: 1.000000e+00 65: 1.000000e+00 66: 0.000000e+00 67: 0.000000e+00 68: 0.000000e+00 69: 0.000000e+00 70: 0.000000e+00 71: 0.000000e+00 72: 0.000000e+00 73: 0.000000e+00 74: 0.000000e+00 75: 0.000000e+00 76: 0.000000e+00 77: 0.000000e+00 78: 0.000000e+00 79: 0.000000e+00 80: 0.000000e+00 81: 0.000000e+00 82: 0.000000e+00 83: 0.000000e+00 84: 0.000000e+00 85: 0.000000e+00 86: 0.000000e+00 87: 0.000000e+00 88: 0.000000e+00 89: 0.000000e+00 90: 0.000000e+00 91: 0.000000e+00 92: 0.000000e+00 93: 0.000000e+00 94: 0.000000e+00 95: 0.000000e+00 96: 0.000000e+00 97: 0.000000e+00 98: 0.000000e+00 99: 0.000000e+00 0: 3.122705e-02 1: 2.450194e-02 2: 1.427646e-02 3: 1.899536e-03 4: -1.097701e-02 5: -2.260263e-02 6: -3.134804e-02 7: -3.591554e-02 8: -3.551489e-02 9: -2.998321e-02 10: -1.983327e-02 11: -6.221841e-03 12: 9.161253e-03 13: 2.427436e-02 14: 3.695824e-02 15: 4.519985e-02 16: 4.739798e-02 17: 4.260194e-02 18: 3.069621e-02 19: 1.250816e-02 20: -1.017626e-02 21: -3.469604e-02 22: -5.769429e-02 23: -7.538051e-02 24: -8.385398e-02 25: -7.945977e-02 26: -5.914429e-02 27: -2.077636e-02 28: 3.659819e-02 29: 1.125953e-01 30: 2.054434e-01 31: 3.120546e-01 32: 4.282146e-01 33: 5.488770e-01 34: 6.685387e-01 35: 7.816653e-01 36: 8.831282e-01 37: 9.686159e-01 38: 1.034981e+00 39: 1.080492e+00 40: 1.104967e+00 41: 1.109770e+00 42: 1.097677e+00 43: 1.072623e+00 44: 1.039334e+00 45: 1.002904e+00 46: 9.683306e-01 47: 9.400659e-01 48: 9.216117e-01 49: 9.152040e-01 50: 9.216117e-01 51: 9.400659e-01 52: 9.683306e-01 53: 1.002904e+00 54: 1.039334e+00 55: 1.072623e+00 56: 1.097677e+00 57: 1.109770e+00 58: 1.104967e+00 59: 1.080492e+00 60: 1.034981e+00 61: 9.686159e-01 62: 8.831282e-01 63: 7.816653e-01 64: 6.685387e-01 65: 5.488770e-01 66: 4.282146e-01 67: 3.120546e-01 68: 2.054434e-01 69: 1.125953e-01 70: 3.659819e-02 71: -2.077636e-02 72: -5.914429e-02 73: -7.945977e-02 74: -8.385398e-02 75: -7.538051e-02 76: -5.769429e-02 77: -3.469604e-02 78: -1.017626e-02 79: 1.250816e-02 80: 3.069621e-02 81: 4.260194e-02 82: 4.739798e-02 83: 4.519985e-02 84: 3.695824e-02 85: 2.427436e-02 86: 9.161253e-03 87: -6.221841e-03 88: -1.983327e-02 89: -2.998321e-02 90: -3.551489e-02 91: -3.591554e-02 92: -3.134804e-02 93: -2.260263e-02 94: -1.097701e-02 95: 1.899536e-03 96: 1.427646e-02 97: 2.450194e-02 98: 3.122705e-02 99: 3.357077e-02 gsl/doc/examples/filt_edge.txt0000644000175000017500000011117413536674414015005 0ustar eddedd0.000000 1.013392 1.013392 1.013392 0.001001 0.991190 1.013392 1.013392 0.002002 1.167441 1.013392 1.013392 0.003003 1.073364 1.013392 1.013392 0.004004 1.099752 0.991190 1.013392 0.005005 0.872250 0.996091 0.996091 0.006006 0.760328 0.996091 0.996091 0.007007 0.932072 0.996091 0.996091 0.008008 0.996091 0.932072 0.996091 0.009009 1.089356 0.933202 0.996091 0.010010 0.998235 0.996091 0.996091 0.011011 0.870344 0.998235 0.996091 0.012012 0.933202 0.998235 0.996091 0.013013 1.018171 0.945175 0.996091 0.014014 1.083105 0.945175 0.996091 0.015015 0.945175 0.945175 0.996091 0.016016 0.936197 0.945175 0.996091 0.017017 1.000709 0.945175 0.996091 0.018018 0.933015 0.945175 0.996091 0.019019 0.917224 0.963241 0.996091 0.020020 1.061250 0.963241 0.996091 0.021021 0.963241 0.941619 0.971051 0.022022 0.971051 0.963241 0.971051 0.023023 0.908313 0.971051 0.971051 0.024024 0.941619 0.963241 0.971051 0.025025 1.006462 0.971051 0.971051 0.026026 1.004674 0.985577 0.971051 0.027027 0.924927 0.985577 0.971051 0.028028 0.985577 0.985577 0.973930 0.029029 1.147556 0.985577 0.973930 0.030030 0.979352 0.979352 0.973930 0.031031 0.973930 0.985577 0.973930 0.032032 0.986178 0.986178 0.973930 0.033033 0.745660 0.979352 0.973930 0.034034 1.057742 0.986178 0.977383 0.035035 0.996389 0.996389 0.977383 0.036036 0.977383 0.996389 0.977383 0.037037 1.071500 1.057742 0.977383 0.038038 1.157727 1.071500 0.977383 0.039039 0.960773 1.071500 0.977383 0.040040 1.118277 1.071500 0.977383 0.041041 1.179311 1.118277 0.977383 0.042042 0.926865 0.960773 0.977383 0.043043 0.937018 1.118277 0.977383 0.044044 1.207069 1.138309 0.977383 0.045045 0.909699 0.962463 0.977383 0.046046 1.173555 0.969569 0.977383 0.047047 1.138309 1.125357 0.977383 0.048048 0.962463 0.972615 0.977383 0.049049 0.969569 0.995367 0.977383 0.050050 1.125357 0.995367 0.977383 0.051051 0.972615 0.995367 0.977383 0.052052 0.995367 1.008585 0.995367 0.053053 1.079898 1.053996 1.008585 0.054054 1.053996 1.008585 1.008585 0.055055 1.008585 1.053996 1.008585 0.056056 1.135529 1.053996 1.008585 0.057057 1.001385 1.008585 1.008585 0.058058 1.075136 1.008585 1.008585 0.059059 0.842509 1.001385 1.008585 0.060060 0.976262 0.992040 1.008585 0.061061 1.033649 0.976262 1.008585 0.062062 0.992040 0.976262 1.008585 0.063063 0.945913 0.992040 1.008585 0.064064 0.861957 1.033649 1.008585 0.065065 1.171655 1.041811 1.041811 0.066066 1.041811 1.041811 1.041811 0.067067 1.152496 1.068648 1.041811 0.068068 1.068648 1.068648 1.041811 0.069069 0.941144 1.068648 1.041811 0.070070 1.131675 1.068648 1.041811 0.071071 0.916702 0.991457 1.041811 0.072072 1.077396 0.991457 1.041811 0.073073 0.919648 1.039777 1.041811 0.074074 0.991457 1.039777 1.041811 0.075075 1.149620 1.077396 1.041811 0.076076 1.039777 1.149620 1.041811 0.077077 1.333843 1.149620 1.066747 0.078078 1.180094 1.149620 1.066747 0.079079 1.175628 1.066747 1.066747 0.080080 1.066747 1.066747 1.066747 0.081081 0.894983 1.045508 1.045508 0.082082 1.032937 1.032937 1.045508 0.083083 1.045508 0.938610 1.045508 0.084084 0.765299 0.899866 0.938610 0.085085 0.938610 0.938610 0.938610 0.086086 0.783820 0.918244 0.938610 0.087087 0.899866 0.918244 0.938610 0.088088 0.953773 0.938610 0.938610 0.089089 0.918244 0.918244 0.938610 0.090090 1.018439 0.918244 0.938610 0.091091 0.960508 0.953773 0.938610 0.092092 0.833044 0.960508 0.938610 0.093093 0.905485 1.000357 0.938610 0.094094 1.000357 1.000357 1.000357 0.095095 1.115574 1.011220 1.011220 0.096096 1.187743 1.018121 1.011220 0.097097 1.011220 1.018121 1.011220 0.098098 1.018121 1.018121 1.011220 0.099099 1.127830 1.011220 1.011220 0.100100 -0.942894 -0.798267 -0.798267 0.101101 -1.047091 -0.798267 -0.798267 0.102102 -0.953664 -0.942894 -0.798267 0.103103 -0.798267 -0.953664 -0.798267 0.104104 -0.785030 -1.037108 -0.798267 0.105105 -1.037108 -1.037108 -1.037108 0.106106 -1.074429 -1.038247 -1.038247 0.107107 -1.128072 -1.038247 -1.038247 0.108108 -1.138866 -1.074429 -1.038247 0.109109 -1.038247 -1.104828 -1.038247 0.110110 -0.851868 -1.104828 -1.038247 0.111111 -1.133167 -1.038247 -1.038247 0.112112 -1.104828 -1.014377 -1.038247 0.113113 -1.014377 -0.981914 -1.014377 0.114114 -0.981914 -0.981914 -0.981914 0.115115 -0.766508 -0.981914 -0.981914 0.116116 -0.964830 -0.964830 -0.981914 0.117117 -0.962859 -0.964830 -0.981914 0.118118 -1.072111 -0.962859 -0.981914 0.119119 -0.827322 -0.962859 -0.981914 0.120120 -1.036341 -0.962859 -0.981914 0.121121 -0.809783 -0.971401 -0.981914 0.122122 -0.959242 -0.971401 -0.981914 0.123123 -1.100144 -0.971401 -0.981914 0.124124 -0.971401 -0.959242 -0.981914 0.125125 -1.033599 -0.959242 -0.981914 0.126126 -0.909272 -0.971401 -0.981914 0.127127 -0.868429 -0.942727 -0.981914 0.128128 -0.920571 -0.942727 -0.981914 0.129129 -1.039569 -0.942727 -0.981914 0.130130 -0.942727 -0.942727 -0.981914 0.131131 -1.063445 -0.980697 -0.981914 0.132132 -1.053542 -1.039569 -0.981914 0.133133 -0.923584 -0.980697 -0.981914 0.134134 -0.980697 -1.045511 -0.981914 0.135135 -1.045511 -0.995902 -0.981914 0.136136 -0.951093 -0.980697 -0.981914 0.137137 -1.046745 -0.980697 -0.981914 0.138138 -0.995902 -0.995902 -0.981914 0.139139 -0.949519 -0.995902 -0.981914 0.140140 -0.717364 -0.995902 -0.981914 0.141141 -1.066168 -0.949519 -0.981914 0.142142 -1.064500 -0.949519 -0.981914 0.143143 -0.823432 -0.965808 -0.981914 0.144144 -0.848632 -1.007814 -0.981914 0.145145 -0.965808 -1.007814 -0.981914 0.146146 -1.007814 -1.007814 -1.007814 0.147147 -1.017617 -1.007814 -1.007814 0.148148 -1.241573 -1.007814 -1.007814 0.149149 -1.096119 -1.013401 -1.007814 0.150150 -1.001898 -1.013401 -1.007814 0.151151 -1.004153 -1.004153 -1.007814 0.152152 -1.013401 -1.004153 -1.007814 0.153153 -0.988305 -1.004153 -1.007814 0.154154 -0.930549 -1.005780 -1.007814 0.155155 -1.067372 -1.005780 -1.007814 0.156156 -1.005780 -0.998717 -1.007814 0.157157 -1.015813 -1.005780 -1.007814 0.158158 -0.998717 -1.005780 -1.007814 0.159159 -0.863679 -1.005780 -1.007814 0.160160 -1.136045 -0.998717 -1.007814 0.161161 -0.903092 -0.967850 -1.007814 0.162162 -1.106479 -0.967850 -1.007814 0.163163 -0.938953 -0.967850 -0.971655 0.164164 -0.967850 -0.967850 -0.971655 0.165165 -0.971655 -0.971655 -0.971655 0.166166 -0.928571 -0.967850 -0.971655 0.167167 -1.022612 -0.971655 -0.971655 0.168168 -0.981399 -0.981399 -0.971655 0.169169 -0.900799 -1.022612 -0.971655 0.170170 -1.044069 -1.022612 -0.971655 0.171171 -1.069476 -1.034055 -0.971655 0.172172 -1.132120 -1.044069 -0.971655 0.173173 -0.905177 -1.044069 -0.971655 0.174174 -1.034055 -1.069476 -0.971655 0.175175 -1.095702 -1.034055 -0.971655 0.176176 -0.874021 -0.994997 -0.971655 0.177177 -1.167346 -0.994997 -0.971655 0.178178 -0.883632 -0.960145 -0.971655 0.179179 -0.994997 -0.883632 -0.971655 0.180180 -0.960145 -0.960145 -0.971655 0.181181 -0.777616 -0.960145 -0.971655 0.182182 -0.857104 -0.994997 -0.971655 0.183183 -1.022139 -1.022139 -1.022139 0.184184 -1.051866 -1.022139 -1.022139 0.185185 -1.141736 -1.051866 -1.022139 0.186186 -1.078396 -1.051866 -1.022139 0.187187 -1.008043 -1.051866 -1.022139 0.188188 -1.084173 -1.051096 -1.022139 0.189189 -0.875380 -1.051096 -1.022139 0.190190 -1.021183 -1.021183 -1.022139 0.191191 -1.051096 -1.021183 -1.022139 0.192192 -1.077697 -0.947963 -1.022139 0.193193 -0.947963 -1.021183 -1.022139 0.194194 -0.794787 -0.966380 -1.022139 0.195195 -0.911884 -0.966380 -1.022139 0.196196 -1.031894 -0.966380 -1.022139 0.197197 -0.966380 -0.966380 -1.022139 0.198198 -1.018746 -0.966380 -1.022139 0.199199 -1.036727 -0.966380 -1.022139 0.200200 1.006607 0.986276 0.986276 0.201201 1.054580 0.986276 0.986276 0.202202 1.007550 0.986276 0.986276 0.203203 0.986276 1.006607 0.986276 0.204204 0.954824 1.007550 0.986276 0.205205 0.852908 0.986276 0.986276 0.206206 1.065333 0.954824 0.986276 0.207207 1.068682 0.929528 0.986276 0.208208 0.830604 0.929528 0.986276 0.209209 0.929528 1.065333 0.986276 0.210210 0.926479 1.068682 0.986276 0.211211 1.075258 1.075258 1.075258 0.212212 1.130040 1.075258 1.075258 0.213213 1.077117 1.075258 1.075258 0.214214 1.103507 1.077117 1.075258 0.215215 0.933721 1.077455 1.075258 0.216216 1.064553 1.077117 1.075258 0.217217 1.083792 1.064553 1.075258 0.218218 1.077455 1.064553 1.075258 0.219219 0.970880 1.064553 1.075258 0.220220 1.029817 1.077455 1.075258 0.221221 1.099270 1.029817 1.075258 0.222222 0.850993 0.970880 1.075258 0.223223 1.167110 0.978298 1.075258 0.224224 0.853920 0.873921 0.978298 0.225225 0.873921 0.873921 0.978298 0.226226 0.978298 0.873921 0.978298 0.227227 0.808870 0.873921 0.978298 0.228228 0.987740 0.976703 0.978298 0.229229 0.749353 0.978298 0.978298 0.230230 1.032934 0.987740 0.978298 0.231231 0.976703 0.989241 0.978298 0.232232 1.032472 0.989241 0.978298 0.233233 0.989241 0.989241 0.978298 0.234234 1.014932 0.989241 0.978298 0.235235 0.935244 1.014148 0.978298 0.236236 0.986942 1.014148 0.986942 0.237237 1.060568 1.014148 0.986942 0.238238 1.014148 0.998139 0.986942 0.239239 1.045752 1.014148 0.986942 0.240240 0.933664 1.014148 0.986942 0.241241 0.998139 0.998139 0.986942 0.242242 1.121821 0.933664 0.986942 0.243243 0.731363 0.933664 0.986942 0.244244 0.876419 0.937800 0.986942 0.245245 0.836826 0.937800 0.986942 0.246246 1.106871 0.933816 0.986942 0.247247 0.937800 0.937800 0.986942 0.248248 0.964280 0.937800 0.986942 0.249249 0.933816 0.964280 0.986942 0.250250 1.267770 0.958790 0.986942 0.251251 0.806962 0.964280 0.986942 0.252252 1.038791 1.038791 0.986942 0.253253 0.958790 1.038791 0.986942 0.254254 1.096977 0.958790 0.986942 0.255255 1.169623 1.038791 0.986942 0.256256 0.876329 0.987048 0.986942 0.257257 0.914208 0.987048 0.986942 0.258258 1.116598 0.987048 0.986942 0.259259 0.987048 0.961421 0.986942 0.260260 0.879691 0.962462 0.986942 0.261261 1.110347 0.968402 0.986942 0.262262 0.961421 0.968402 0.979114 0.263263 0.962462 0.968402 0.979114 0.264264 0.968402 0.979114 0.979114 0.265265 0.979114 0.968402 0.979114 0.266266 1.032279 0.968402 0.979114 0.267267 1.017372 0.979114 0.979114 0.268268 0.945319 0.979114 0.979114 0.269269 0.944262 1.017372 0.979114 0.270270 1.138088 0.997787 0.979114 0.271271 0.886344 0.997787 0.979114 0.272272 1.040078 0.997787 0.979114 0.273273 0.997787 0.997787 0.979114 0.274274 1.121320 0.988147 0.979114 0.275275 0.973989 0.997787 0.979114 0.276276 0.988147 0.988147 0.979114 0.277277 0.918430 0.988147 0.979114 0.278278 1.056636 0.988147 0.979114 0.279279 0.933528 0.988147 0.979114 0.280280 1.053830 1.053830 0.979114 0.281281 1.055011 1.053830 0.979114 0.282282 0.907715 1.053830 0.979114 0.283283 1.195056 1.055011 1.032876 0.284284 1.032876 1.055011 1.032876 0.285285 1.105013 1.055517 1.032876 0.286286 1.055517 1.105013 1.032876 0.287287 1.007373 1.055517 1.032876 0.288288 1.116544 1.055517 1.032876 0.289289 1.164682 1.037840 1.032876 0.290290 1.037840 1.009883 1.032876 0.291291 0.987761 1.037840 1.032876 0.292292 1.009883 1.009883 1.032876 0.293293 0.939728 1.009883 1.032876 0.294294 1.081717 0.987761 1.032876 0.295295 0.953627 0.953627 1.032876 0.296296 1.085279 0.939728 1.032876 0.297297 0.936744 0.936744 0.936744 0.298298 0.897699 0.906055 0.906055 0.299299 0.906055 0.897699 0.906055 0.300300 -0.995125 -0.916487 -0.916487 0.301301 -0.916487 -0.932416 -0.916487 0.302302 -1.013257 -0.995125 -0.932416 0.303303 -1.150853 -0.995125 -0.932416 0.304304 -0.932416 -0.975364 -0.932416 0.305305 -1.000858 -0.975364 -0.932416 0.306306 -0.975364 -0.975364 -0.932416 0.307307 -0.885650 -0.975364 -0.932416 0.308308 -0.860636 -1.000858 -0.932416 0.309309 -1.055208 -0.975364 -0.932416 0.310310 -1.141977 -0.988565 -0.932416 0.311311 -1.058503 -0.988565 -0.932416 0.312312 -0.894889 -1.055208 -0.932416 0.313313 -0.988565 -0.988565 -0.932416 0.314314 -0.978403 -0.978403 -0.932416 0.315315 -1.082404 -0.978403 -0.932416 0.316316 -0.884420 -0.978403 -0.932416 0.317317 -0.716201 -0.978403 -0.932416 0.318318 -0.981999 -0.981999 -0.932416 0.319319 -0.930800 -0.930800 -0.932416 0.320320 -1.030369 -0.981999 -0.932416 0.321321 -1.265205 -1.030369 -0.932416 0.322322 -0.899489 -1.090589 -0.932416 0.323323 -1.090589 -1.090589 -0.945577 0.324324 -1.100610 -1.094045 -0.945577 0.325325 -1.131515 -1.090589 -0.945577 0.326326 -0.945577 -1.090589 -0.945577 0.327327 -1.094045 -1.094045 -0.945577 0.328328 -0.943864 -1.062146 -0.945577 0.329329 -0.995991 -1.025363 -0.995991 0.330330 -1.145327 -1.025363 -0.995991 0.331331 -1.062146 -0.995991 -0.995991 0.332332 -1.025363 -1.025363 -0.995991 0.333333 -0.965019 -1.025363 -0.995991 0.334334 -0.961221 -1.011833 -0.995991 0.335335 -1.084413 -0.989153 -0.995991 0.336336 -0.954786 -0.987399 -0.995991 0.337337 -1.011833 -0.987399 -0.995991 0.338338 -0.989153 -0.989153 -0.995991 0.339339 -0.987399 -0.989153 -0.995991 0.340340 -0.853203 -0.996738 -0.995991 0.341341 -1.155231 -0.996738 -0.996738 0.342342 -0.996738 -1.005604 -0.996738 0.343343 -1.005604 -1.005604 -0.996738 0.344344 -1.226129 -1.100704 -0.996738 0.345345 -1.100704 -1.005604 -0.996738 0.346346 -0.978910 -1.005604 -0.996738 0.347347 -1.107348 -1.058052 -0.996738 0.348348 -0.992635 -0.992635 -0.996738 0.349349 -0.980931 -0.980931 -0.996738 0.350350 -1.058052 -0.992635 -0.996738 0.351351 -0.771305 -0.992635 -0.996738 0.352352 -0.932188 -1.058052 -0.996738 0.353353 -1.082284 -1.058052 -0.996738 0.354354 -1.113189 -0.932188 -0.996738 0.355355 -1.126075 -1.012862 -0.996738 0.356356 -0.894258 -1.012862 -0.996738 0.357357 -0.775181 -0.944488 -0.996738 0.358358 -1.012862 -0.894258 -0.996738 0.359359 -0.891133 -0.891133 -0.944488 0.360360 -0.944488 -0.891133 -0.944488 0.361361 -0.862502 -0.931726 -0.944488 0.362362 -0.859313 -0.931726 -0.944488 0.363363 -1.023125 -0.944488 -0.944488 0.364364 -0.931726 -0.931726 -0.944488 0.365365 -0.998059 -0.998059 -0.944488 0.366366 -1.027395 -0.998059 -0.944488 0.367367 -0.866360 -0.998059 -0.944488 0.368368 -1.001268 -0.998059 -0.944488 0.369369 -0.969452 -1.001268 -0.944488 0.370370 -1.057421 -0.975792 -0.944488 0.371371 -0.873957 -0.975792 -0.944488 0.372372 -1.015086 -0.975792 -0.944488 0.373373 -0.975792 -0.975792 -0.944488 0.374374 -0.935769 -0.975792 -0.944488 0.375375 -1.145432 -1.007669 -0.944488 0.376376 -0.892147 -0.975792 -0.944488 0.377377 -1.076760 -1.007669 -0.944488 0.378378 -1.007669 -1.042330 -0.944488 0.379379 -0.913363 -1.042330 -0.944488 0.380380 -1.084825 -1.042330 -0.992801 0.381381 -1.042330 -1.007669 -0.992801 0.382382 -1.089807 -0.992801 -0.992801 0.383383 -0.992801 -0.992801 -0.992801 0.384384 -0.975382 -0.978509 -0.978509 0.385385 -0.978509 -0.978509 -0.978509 0.386386 -0.835577 -0.975382 -0.978509 0.387387 -0.973500 -0.973500 -0.978509 0.388388 -1.001632 -0.942696 -0.978509 0.389389 -0.925964 -0.942696 -0.978509 0.390390 -0.942696 -0.942696 -0.978509 0.391391 -0.824995 -0.942696 -0.978509 0.392392 -1.228095 -0.925964 -0.978509 0.393393 -0.886478 -0.942696 -0.978509 0.394394 -1.027876 -0.917555 -0.978509 0.395395 -0.778815 -1.027876 -0.978509 0.396396 -1.052251 -1.027876 -0.978509 0.397397 -0.917555 -1.027876 -0.978509 0.398398 -1.218049 -0.917555 -0.978509 0.399399 -1.234098 -0.917555 -0.978509 0.400400 1.033670 0.915335 0.915335 0.401401 0.915335 0.995140 0.915335 0.402402 1.079662 0.995140 0.915335 0.403403 1.016567 0.995140 0.915335 0.404404 0.995140 0.980236 0.915335 0.405405 0.833239 0.980236 0.915335 0.406406 0.827633 0.980236 0.915335 0.407407 0.980236 0.980236 0.974061 0.408408 0.974061 0.974061 0.974061 0.409409 1.036462 0.980236 0.974061 0.410410 1.013655 1.012310 0.974061 0.411411 0.967479 1.013655 0.974061 0.412412 1.012310 1.036462 1.012310 0.413413 1.114161 1.013655 1.012310 0.414414 1.084870 1.084870 1.012310 0.415415 1.143169 1.084870 1.012310 0.416416 0.928768 1.084870 1.012310 0.417417 1.152667 0.990423 1.012310 0.418418 0.990423 0.990423 0.994635 0.419419 0.990405 0.990423 0.994635 0.420420 0.900778 0.990423 0.994635 0.421421 0.994635 0.990405 0.994635 0.422422 1.081658 0.990405 0.994635 0.423423 0.982925 0.982925 0.994635 0.424424 0.969630 0.994635 0.994635 0.425425 1.038684 0.998721 0.994635 0.426426 0.952673 0.998721 0.994635 0.427427 1.042233 1.038684 0.998721 0.428428 0.998721 1.042233 0.998721 0.429429 1.067383 1.045432 1.045432 0.430430 1.053154 1.045432 1.045432 0.431431 1.108807 1.045432 1.045432 0.432432 1.045432 1.053154 1.045432 0.433433 1.014645 1.045432 1.045432 0.434434 0.985161 1.026470 1.045432 0.435435 1.116414 1.014645 1.045432 0.436436 1.026470 0.985161 1.026470 0.437437 0.898915 0.983648 0.983648 0.438438 0.983648 0.972407 0.983648 0.439439 0.972407 0.972407 0.974419 0.440440 0.938105 0.972407 0.974419 0.441441 0.908041 0.974419 0.974419 0.442442 0.974419 0.974419 0.974419 0.443443 1.009199 0.974419 0.974419 0.444444 1.081841 0.974419 0.974419 0.445445 1.104344 0.974419 0.974419 0.446446 0.817090 1.009199 0.974419 0.447447 0.945641 1.024809 0.974419 0.448448 0.944475 0.945641 0.974419 0.449449 1.024809 0.945641 0.974419 0.450450 1.088122 1.024809 0.974419 0.451451 0.930830 1.088122 0.974419 0.452452 1.190865 1.088122 0.974419 0.453453 1.119551 1.088122 0.974419 0.454454 1.173042 1.037794 0.974419 0.455455 0.906440 1.037794 0.974419 0.456456 1.037794 1.037794 0.974419 0.457457 0.985984 0.985984 0.974419 0.458458 0.911667 0.985984 0.974419 0.459459 1.156843 0.985984 0.974419 0.460460 0.918847 0.985984 0.974419 0.461461 1.248386 0.918847 0.974419 0.462462 0.880343 0.918847 0.974419 0.463463 1.070315 0.918847 0.974419 0.464464 0.899536 0.927855 0.945224 0.465465 0.816511 0.899536 0.945224 0.466466 0.927855 0.927855 0.945224 0.467467 0.945224 0.921068 0.945224 0.468468 0.882944 0.927855 0.945224 0.469469 1.243633 0.945224 0.945224 0.470470 0.921068 1.035685 0.945224 0.471471 1.105427 1.073244 1.035685 0.472472 1.035685 1.073244 1.035685 0.473473 1.114231 1.035685 1.035685 0.474474 1.073244 1.035685 1.035685 0.475475 0.944953 1.035685 1.035685 0.476476 0.836672 0.944953 1.035685 0.477477 0.896687 0.944953 1.035685 0.478478 1.078094 0.944953 1.035685 0.479479 0.879165 0.970868 1.035685 0.480480 1.061934 1.010889 1.035685 0.481481 0.970868 1.010889 1.035685 0.482482 1.010889 0.995403 1.035685 0.483483 1.095526 0.995403 1.035685 0.484484 0.995403 0.995403 1.017179 0.485485 0.943299 0.995403 1.017179 0.486486 0.952845 0.952845 1.017179 0.487487 1.017179 0.952356 1.017179 0.488488 0.952356 0.943299 0.952356 0.489489 0.922158 0.952356 0.952356 0.490490 0.924796 0.924796 0.952356 0.491491 0.902148 0.924796 0.952356 0.492492 1.116699 0.924796 0.952356 0.493493 0.886781 1.032454 0.952356 0.494494 1.056146 1.032454 1.012846 0.495495 1.032454 1.056146 1.012846 0.496496 1.128205 1.037536 1.012846 0.497497 1.012846 1.037536 1.012846 0.498498 1.092972 1.032454 1.012846 0.499499 1.037536 1.012846 1.012846 0.500501 -1.001848 -0.922699 -0.922699 0.501502 -0.987462 -0.987462 -0.922699 0.502503 -1.038674 -0.996367 -0.922699 0.503504 -0.922699 -0.996367 -0.922699 0.504505 -1.129106 -0.987462 -0.922699 0.505506 -0.996367 -0.996367 -0.922699 0.506507 -0.740711 -0.978921 -0.922699 0.507508 -0.978921 -0.996367 -0.922699 0.508509 -1.099845 -0.996367 -0.922699 0.509510 -0.922510 -0.978921 -0.922699 0.510511 -1.037193 -0.978921 -0.933620 0.511512 -1.012562 -1.012562 -0.933620 0.512513 -0.964857 -0.965026 -0.933620 0.513514 -0.933620 -1.012562 -0.933620 0.514515 -1.091809 -1.009397 -0.965026 0.515516 -0.965026 -1.009397 -0.965026 0.516517 -1.088903 -1.041278 -1.009397 0.517518 -1.009397 -1.075060 -1.009397 0.518519 -1.041278 -1.041278 -1.009397 0.519520 -1.120630 -1.041278 -1.009397 0.520521 -1.075060 -1.041278 -1.009397 0.521522 -0.931622 -1.075060 -1.009397 0.522523 -0.924344 -1.075060 -1.009397 0.523524 -1.089267 -1.057970 -1.012578 0.524525 -1.098603 -1.012578 -1.012578 0.525526 -1.012578 -1.012578 -1.012578 0.526527 -1.057970 -1.012578 -1.012578 0.527528 -0.925645 -1.012578 -1.012578 0.528529 -0.900765 -0.969156 -1.012578 0.529530 -0.969156 -0.946823 -1.012578 0.530531 -1.123824 -0.925645 -1.012578 0.531532 -0.805045 -0.946823 -1.012578 0.532533 -0.946823 -0.969156 -1.012578 0.533534 -0.887435 -0.951774 -1.012578 0.534535 -1.126562 -0.951774 -1.012578 0.535536 -1.099649 -0.951774 -1.012578 0.536537 -0.951774 -0.951774 -0.988341 0.537538 -0.988341 -0.988341 -0.988341 0.538539 -0.896448 -0.951774 -0.988341 0.539540 -0.817105 -0.951774 -0.988341 0.540541 -1.103667 -0.960359 -0.988341 0.541542 -0.857447 -0.960359 -0.988341 0.542543 -0.960359 -0.960359 -0.988341 0.543544 -0.985688 -0.960359 -0.988341 0.544545 -1.091140 -0.857447 -0.988341 0.545546 -0.837472 -0.960359 -0.988341 0.546547 -0.809949 -0.960556 -0.988341 0.547548 -0.815240 -0.960556 -0.988341 0.548549 -1.008858 -0.960556 -0.988341 0.549550 -0.960556 -1.008858 -0.988341 0.550551 -1.103693 -1.008858 -0.988341 0.551552 -1.071774 -1.018721 -0.988341 0.552553 -1.018721 -1.054117 -0.988341 0.553554 -0.779820 -1.054117 -0.988341 0.554555 -1.054117 -1.054117 -1.029304 0.555556 -1.096938 -1.054117 -1.029304 0.556557 -1.029304 -1.054117 -1.029304 0.557558 -1.057701 -1.054117 -1.029304 0.558559 -1.058982 -1.029304 -1.029304 0.559560 -0.983257 -1.029304 -1.029304 0.560561 -0.934961 -0.983257 -1.029304 0.561562 -0.845732 -0.981656 -1.029304 0.562563 -1.114829 -0.934961 -1.029304 0.563564 -0.903578 -0.934961 -1.029304 0.564565 -0.981656 -0.981656 -1.029304 0.565566 -0.885808 -0.984766 -1.029304 0.566567 -1.094164 -0.984766 -1.029304 0.567568 -0.984766 -0.992331 -1.029304 0.568569 -0.992331 -0.992331 -1.029304 0.569570 -1.108422 -1.008850 -1.029304 0.570571 -1.008850 -0.992331 -1.029304 0.571572 -0.947116 -0.992331 -1.029304 0.572573 -1.044118 -1.001552 -1.029304 0.573574 -0.922465 -1.001552 -1.029304 0.574575 -0.962390 -1.000724 -1.029304 0.575576 -1.001552 -1.000724 -1.029304 0.576577 -1.032196 -1.000724 -1.029304 0.577578 -1.000724 -1.001552 -1.029304 0.578579 -0.969995 -1.001552 -1.029304 0.579580 -1.090725 -1.030514 -1.029304 0.580581 -1.061230 -1.030514 -1.029304 0.581582 -0.991319 -1.030514 -1.029304 0.582583 -1.030514 -1.030514 -1.029304 0.583584 -1.066191 -1.030514 -1.029304 0.584585 -0.954107 -0.991319 -1.029304 0.585586 -0.779156 -0.969716 -1.029304 0.586587 -1.069758 -0.954107 -1.029304 0.587588 -0.969716 -0.954107 -1.002956 0.588589 -0.743242 -0.969716 -1.002956 0.589590 -0.951760 -1.002956 -1.002956 0.590591 -1.002956 -1.002956 -1.002956 0.591592 -1.085492 -1.085492 -1.085492 0.592593 -1.089551 -1.085492 -1.085492 0.593594 -1.086053 -1.085492 -1.085492 0.594595 -1.110056 -1.085492 -1.085492 0.595596 -1.021996 -1.072438 -1.072438 0.596597 -1.072438 -1.072438 -1.072438 0.597598 -1.043094 -1.043094 -1.072438 0.598599 -0.901986 -1.021996 -1.072438 0.599600 -1.128909 -0.901986 -1.072438 0.600601 0.970657 0.892529 0.892529 0.601602 0.892529 0.920892 0.892529 0.602603 0.920892 0.970657 0.920892 0.603604 1.095492 0.970657 0.944694 0.604605 1.066045 0.944694 0.944694 0.605606 1.140103 0.944694 0.944694 0.606607 0.944694 0.944694 0.944694 0.607608 0.864106 0.944694 0.944694 0.608609 0.781177 0.944694 0.944694 0.609610 0.779575 0.944694 0.944694 0.610611 0.947531 0.947531 0.947531 0.611612 1.066546 0.950324 0.950324 0.612613 0.950324 0.981624 0.950324 0.613614 1.079367 0.981624 0.950324 0.614615 0.981624 1.027965 0.950324 0.615616 1.098933 1.027965 0.950324 0.616617 0.920009 1.069023 0.950324 0.617618 1.027965 1.027965 0.978972 0.618619 1.069023 1.027965 0.978972 0.619620 1.155675 1.027203 0.978972 0.620621 0.978972 1.027203 0.978972 0.621622 1.006711 1.009979 1.006711 0.622623 1.027203 1.007877 1.006711 0.623624 1.009979 1.006711 1.006711 0.624625 1.007877 1.006711 1.006711 0.625626 1.000107 1.007877 1.006711 0.626627 0.816269 1.007877 1.006711 0.627628 0.833719 1.007877 1.006711 0.628629 1.112972 1.006380 1.006711 0.629630 1.046157 1.006380 1.006711 0.630631 1.117500 1.006380 1.006711 0.631632 1.006380 1.046157 1.006711 0.632633 0.840640 1.046157 1.006711 0.633634 0.905722 1.006380 1.006711 0.634635 1.148664 1.006380 1.006711 0.635636 1.129631 0.991007 1.006711 0.636637 0.991007 0.991007 1.006711 0.637638 1.117614 0.991007 1.006711 0.638639 0.822380 0.991007 1.006711 0.639640 0.989991 0.989991 1.006711 0.640641 0.806354 0.989991 1.006711 0.641642 1.025584 0.989991 1.006711 0.642643 0.980950 1.025584 1.006711 0.643644 1.071078 1.025584 1.008575 0.644645 1.046765 1.025584 1.008575 0.645646 1.074255 1.033308 1.008575 0.646647 1.008575 1.033308 1.008575 0.647648 0.942786 1.033308 1.008575 0.648649 1.033308 1.019651 1.008575 0.649650 1.001322 1.008575 1.008575 0.650651 1.076166 1.019651 1.008575 0.651652 1.019651 1.033308 1.008575 0.652653 0.883037 1.053398 1.008575 0.653654 1.079249 1.053398 1.008575 0.654655 1.053398 1.053398 1.008575 0.655656 1.080504 1.053398 1.008575 0.656657 0.952499 1.053398 1.008575 0.657658 1.167163 0.989525 1.008575 0.658659 0.989525 0.952976 0.989525 0.659660 0.880931 0.952499 0.952976 0.660661 0.952976 0.952976 0.952976 0.661662 0.769248 0.952976 0.952976 0.662663 0.734106 0.952976 0.952976 0.663664 1.186583 0.952976 0.952976 0.664665 0.985570 0.913157 0.952976 0.665666 1.092416 0.985570 0.952976 0.666667 0.913157 0.985570 0.952976 0.667668 0.897221 0.985570 0.952976 0.668669 1.006310 1.006310 0.970026 0.669670 0.970026 0.970026 0.970026 0.670671 1.023602 0.970026 0.970026 0.671672 1.147413 1.006310 0.970026 0.672673 0.874538 0.977717 0.970026 0.673674 0.862297 0.989969 0.970026 0.674675 1.182952 0.977717 0.970026 0.675676 0.977717 0.977717 0.970026 0.676677 0.989969 0.989969 0.970026 0.677678 0.869557 0.989969 0.970026 0.678679 1.046425 0.989969 0.970026 0.679680 1.005145 0.989969 0.970026 0.680681 0.894338 0.970871 0.970026 0.681682 1.086951 0.970871 0.970026 0.682683 0.948711 0.970871 0.970026 0.683684 0.970871 0.948711 0.970026 0.684685 0.933560 0.948711 0.970026 0.685686 1.109971 0.948711 0.970026 0.686687 0.814965 0.941825 0.970026 0.687688 0.941825 0.941825 0.970026 0.688689 1.064734 1.014226 0.970026 0.689690 0.833250 1.014226 0.970026 0.690691 1.014226 1.014226 0.970026 0.691692 1.048965 1.014226 0.970026 0.692693 1.155149 0.981877 0.970026 0.693694 0.875025 0.981877 0.970026 0.694695 0.981877 0.981877 0.970026 0.695696 0.957818 0.981877 0.970026 0.696697 0.911143 0.957818 0.970026 0.697698 1.059730 0.957818 0.970026 0.698699 1.006925 0.939637 0.970026 0.699700 0.939637 0.911143 0.939637 0.700701 -0.911019 -0.906186 -0.906186 0.701702 -0.906186 -0.911019 -0.906186 0.702703 -1.110617 -0.913814 -0.913814 0.703704 -0.913814 -0.993275 -0.913814 0.704705 -0.993275 -0.993275 -0.913814 0.705706 -1.192603 -1.046887 -0.913814 0.706707 -1.108023 -1.046887 -0.913814 0.707708 -0.911053 -1.047154 -0.913814 0.708709 -1.046887 -1.047154 -0.927873 0.709710 -1.062364 -1.047154 -0.927873 0.710711 -1.047154 -1.046887 -0.927873 0.711712 -0.927873 -1.047154 -0.927873 0.712713 -1.166649 -1.062364 -0.971158 0.713714 -0.971158 -1.047154 -0.971158 0.714715 -1.143378 -1.087565 -0.971158 0.715716 -1.107369 -1.087565 -0.971158 0.716717 -0.820283 -1.087565 -0.971158 0.717718 -1.087565 -1.087565 -1.017027 0.718719 -1.017027 -1.059867 -1.017027 0.719720 -1.136362 -1.017027 -1.017027 0.720721 -1.059867 -1.059867 -1.017027 0.721722 -0.925779 -1.059867 -1.017027 0.722723 -1.006464 -1.068214 -1.017027 0.723724 -1.126647 -1.059867 -1.017027 0.724725 -1.068214 -1.006464 -1.017027 0.725726 -1.085730 -1.068214 -1.017027 0.726727 -0.837002 -1.068214 -1.017027 0.727728 -0.735864 -0.984632 -1.017027 0.728729 -1.153167 -0.984632 -1.017027 0.729730 -0.984632 -0.914208 -1.017027 0.730731 -0.862189 -0.978263 -1.017027 0.731732 -1.090935 -0.978263 -1.017027 0.732733 -0.914208 -0.978263 -1.017027 0.733734 -0.978263 -0.952004 -1.017027 0.734735 -0.951601 -0.978263 -1.017027 0.735736 -1.224286 -0.952004 -1.017027 0.736737 -0.952004 -0.952004 -1.017027 0.737738 -1.055500 -0.952004 -1.017027 0.738739 -0.929464 -0.955044 -1.017027 0.739740 -0.822103 -0.955044 -1.017027 0.740741 -0.955044 -1.045408 -1.017027 0.741742 -1.165534 -1.026513 -1.026513 0.742743 -1.045408 -1.045408 -1.026513 0.743744 -1.056825 -1.045408 -1.026513 0.744745 -1.026513 -1.045408 -1.026513 0.745746 -1.101514 -1.045408 -1.026513 0.746747 -0.986148 -1.035299 -1.026513 0.747748 -1.035299 -1.026513 -1.026513 0.748749 -1.079721 -1.007938 -1.026513 0.749750 -0.876128 -1.007938 -1.026513 0.750751 -0.873911 -1.007938 -1.026513 0.751752 -1.007938 -1.007938 -1.026513 0.752753 -1.032951 -1.007938 -1.026513 0.753754 -0.869400 -1.014131 -1.026513 0.754755 -1.083610 -1.032951 -1.026513 0.755756 -1.069374 -1.032951 -1.026513 0.756757 -1.014131 -1.014131 -1.026513 0.757758 -1.081904 -1.014131 -1.026513 0.758759 -0.918121 -0.996725 -0.996725 0.759760 -0.959004 -0.996725 -0.996725 0.760761 -0.996725 -0.996725 -0.996725 0.761762 -0.776560 -0.975081 -0.996725 0.762763 -1.084557 -0.996725 -0.996725 0.763764 -1.034342 -1.026880 -0.996725 0.764765 -0.975081 -1.026880 -0.996725 0.765766 -1.137779 -1.034342 -0.996725 0.766767 -1.026880 -1.026880 -0.996725 0.767768 -0.960985 -1.026880 -0.996725 0.768769 -1.048023 -1.026880 -0.996725 0.769770 -1.007062 -1.007062 -0.996725 0.770771 -1.047944 -0.960985 -0.996725 0.771772 -0.944100 -0.944100 -0.944100 0.772773 -0.914600 -0.944100 -0.944100 0.773774 -0.924960 -0.944100 -0.944100 0.774775 -0.856741 -0.944100 -0.944100 0.775776 -0.981180 -0.924960 -0.944100 0.776777 -0.984263 -0.981180 -0.944100 0.777778 -1.059917 -0.981180 -0.944100 0.778779 -0.869323 -0.984263 -0.944100 0.779780 -1.037951 -0.984263 -0.944100 0.780781 -0.890921 -0.939045 -0.944100 0.781782 -1.062185 -0.939045 -0.944100 0.782783 -0.911323 -0.978142 -0.944100 0.783784 -0.939045 -0.978142 -0.944100 0.784785 -1.063107 -1.011504 -0.978142 0.785786 -0.978142 -1.011504 -0.978142 0.786787 -1.011504 -1.011504 -0.978142 0.787788 -1.017804 -1.017804 -0.978142 0.788789 -1.117121 -1.011504 -0.978142 0.789790 -0.940740 -1.017804 -0.978142 0.790791 -1.113807 -1.017804 -0.978142 0.791792 -0.901391 -1.058149 -0.978142 0.792793 -1.106908 -0.974865 -0.978142 0.793794 -0.876389 -1.058149 -0.978142 0.794795 -1.058149 -0.974865 -0.978142 0.795796 -0.974865 -0.974865 -0.978142 0.796797 -1.189802 -0.974865 -0.978142 0.797798 -0.912651 -0.974865 -0.978142 0.798799 -0.879006 -0.912651 -0.978142 0.799800 -0.985442 -0.879006 -0.978142 0.800801 1.023632 0.843021 0.843021 0.801802 0.995685 0.949317 0.843021 0.802803 1.018838 0.995685 0.843021 0.803804 0.843021 1.018838 0.843021 0.804805 0.949317 1.018838 0.949317 0.805806 1.048800 1.018838 0.949317 0.806807 1.136285 0.958832 0.949317 0.807808 1.032274 1.032274 0.949317 0.808809 0.862087 1.048800 0.949317 0.809810 0.958832 1.032274 0.958832 0.810811 1.079200 1.032274 0.967741 0.811812 1.112963 1.031519 0.967741 0.812813 0.967741 1.065816 0.967741 0.813814 1.183002 1.065816 0.996525 0.814815 1.031519 1.031519 0.996525 0.815816 1.065816 1.023044 0.996525 0.816817 0.996525 1.031519 0.996525 0.817818 0.974504 1.023044 0.996525 0.818819 1.023044 1.023044 0.996525 0.819820 1.120328 1.023044 0.996525 0.820821 0.996234 1.023044 0.996525 0.821822 1.070633 1.060572 0.996525 0.822823 1.134608 1.060572 0.996525 0.823824 0.798514 1.060572 0.996525 0.824825 1.060572 1.070633 0.996525 0.825826 0.977756 1.060572 0.996525 0.826827 1.078943 0.994731 0.996525 0.827828 1.164112 1.003613 0.996525 0.828829 0.994731 1.003613 0.996525 0.829830 0.949198 1.003613 0.996525 0.830831 1.003613 1.000293 0.996525 0.831832 1.056715 1.000293 0.996525 0.832833 0.848661 1.003613 0.996525 0.833834 1.000293 1.003613 0.996525 0.834835 1.079153 1.019520 0.996525 0.835836 1.020737 1.019520 0.996525 0.836837 0.888400 1.019520 0.996525 0.837838 1.019520 1.020737 0.996525 0.838839 1.081925 1.019520 0.996525 0.839840 0.932174 1.005562 0.996525 0.840841 1.106511 1.005562 0.996525 0.841842 0.940557 0.996572 0.996525 0.842843 1.005562 0.981819 0.996525 0.843844 0.926743 0.981819 0.996525 0.844845 0.996572 0.981819 0.996525 0.845846 0.981819 0.981819 0.996525 0.846847 0.950211 0.950211 0.996525 0.847848 1.015902 0.981819 0.996525 0.848849 0.893365 0.981819 0.996525 0.849850 0.833039 0.971493 0.996525 0.850851 1.147515 1.015902 0.996525 0.851852 1.047047 1.047047 0.996525 0.852853 0.971493 1.047047 0.996525 0.853854 1.070280 1.047047 0.996525 0.854855 1.069243 1.041830 0.996525 0.855856 0.899169 0.971493 0.996525 0.856857 1.041830 0.989923 0.996525 0.857858 0.871786 0.971376 0.989923 0.858859 0.971376 0.971376 0.989923 0.859860 0.989923 0.980163 0.989923 0.860861 0.912046 0.971376 0.989923 0.861862 1.119451 0.971376 0.989923 0.862863 0.980163 0.980163 0.989923 0.863864 0.887588 0.923543 0.989923 0.864865 0.923543 0.923543 0.989923 0.865866 1.054477 0.923543 0.989923 0.866867 0.783186 0.923543 0.989923 0.867868 0.902512 0.985315 0.989923 0.868869 1.102924 0.985315 0.989923 0.869870 1.098880 0.963032 0.989923 0.870871 0.985315 0.963032 0.985315 0.871872 0.948365 0.985315 0.985315 0.872873 0.963032 0.985315 0.985315 0.873874 0.826784 0.985315 0.985315 0.874875 0.989051 0.989051 0.989051 0.875876 1.078874 0.989051 0.989051 0.876877 1.013207 1.013207 0.989051 0.877878 1.046607 1.013207 0.989051 0.878879 0.981190 1.013207 0.989051 0.879880 1.056491 1.013207 0.989051 0.880881 0.984530 0.984530 0.989051 0.881882 0.939341 0.981190 0.989051 0.882883 1.109094 0.961929 0.989051 0.883884 0.961929 0.961929 0.989051 0.884885 0.785377 0.947221 0.989051 0.885886 0.923587 0.961929 0.989051 0.886887 1.015101 0.961929 0.989051 0.887888 0.947221 0.972248 0.989051 0.888889 1.087944 1.015101 0.989051 0.889890 0.972248 1.025127 0.989051 0.890891 1.025127 1.068689 1.025127 0.891892 1.068689 1.068689 1.025127 0.892893 1.155018 1.068340 1.025127 0.893894 1.100955 1.068340 1.025127 0.894895 0.994063 1.068340 1.025127 0.895896 1.068340 1.055374 1.025127 0.896897 1.055374 1.020238 1.025127 0.897898 1.020238 0.994063 1.020238 0.898899 0.989032 0.989032 0.989032 0.899900 0.953212 0.953212 0.953212 0.900901 -1.007789 -1.007789 -1.007789 0.901902 -1.176085 -1.094983 -1.094983 0.902903 -1.164879 -1.094983 -1.094983 0.903904 -1.164542 -1.094983 -1.094983 0.904905 -1.094983 -1.124927 -1.094983 0.905906 -1.006529 -1.094983 -1.094983 0.906907 -0.968188 -1.067852 -1.094983 0.907908 -1.124927 -1.067852 -1.094983 0.908909 -1.067852 -1.037228 -1.094983 0.909910 -1.037228 -1.037228 -1.094983 0.910911 -1.103390 -1.037228 -1.094983 0.911912 -0.945288 -0.967433 -0.967433 0.912913 -0.967433 -0.967433 -0.967433 0.913914 -0.806734 -0.967433 -0.967433 0.914915 -0.901846 -0.945288 -0.967433 0.915916 -1.042688 -0.967433 -0.967433 0.916917 -1.066534 -1.042688 -0.967433 0.917918 -0.921212 -1.063397 -0.967433 0.918919 -1.170383 -1.063397 -0.967433 0.919920 -1.072656 -1.063397 -0.967433 0.920921 -1.063397 -1.034496 -0.967433 0.921922 -0.938396 -1.034496 -0.967433 0.922923 -0.914668 -1.017289 -0.967433 0.923924 -1.034496 -0.964569 -0.967433 0.924925 -1.017289 -0.964569 -0.967433 0.925926 -0.849914 -1.017289 -0.967433 0.926927 -0.964569 -1.017289 -0.967433 0.927928 -1.046299 -0.976907 -0.967433 0.928929 -1.158337 -0.976907 -0.967433 0.929930 -0.976907 -0.977310 -0.967433 0.930931 -0.846939 -0.977310 -0.967433 0.931932 -1.015479 -0.977310 -0.967433 0.932933 -0.977310 -0.977310 -0.967433 0.933934 -0.943085 -0.977310 -0.967433 0.934935 -0.979259 -0.977310 -0.967433 0.935936 -1.096315 -0.977310 -0.967433 0.936937 -0.832212 -0.979259 -0.967433 0.937938 -0.953367 -0.979259 -0.967433 0.938939 -1.112492 -0.953367 -0.967433 0.939940 -1.157141 -0.926518 -0.967433 0.940941 -0.926518 -0.953367 -0.967433 0.941942 -0.845823 -0.926518 -0.967433 0.942943 -0.884902 -0.926518 -0.967433 0.943944 -0.978584 -0.884902 -0.967433 0.944945 -0.847677 -0.884902 -0.967433 0.945946 -1.016207 -0.950823 -0.967433 0.946947 -0.852127 -0.978584 -0.967433 0.947948 -0.950823 -1.016207 -0.967433 0.948949 -1.146084 -1.033939 -1.033939 0.949950 -1.033939 -1.033939 -1.033939 0.950951 -1.117612 -1.033939 -1.033939 0.951952 -1.078361 -1.033939 -1.033939 0.952953 -0.975721 -0.997481 -0.997481 0.953954 -0.884575 -0.997481 -0.997481 0.954955 -0.911318 -0.975721 -0.997481 0.955956 -0.997481 -0.943935 -0.997481 0.956957 -1.079103 -0.924027 -0.997481 0.957958 -0.943935 -0.943935 -0.997481 0.958959 -0.880973 -0.997481 -0.997481 0.959960 -0.924027 -1.059478 -0.997481 0.960961 -1.073152 -1.059478 -1.059478 0.961962 -1.124449 -1.059478 -1.059478 0.962963 -1.059478 -1.059478 -1.059478 0.963964 -1.236161 -1.059478 -1.059478 0.964965 -0.958308 -1.059478 -1.059478 0.965966 -0.873004 -1.059478 -1.059478 0.966967 -0.943995 -1.013754 -1.059478 0.967968 -1.082743 -1.013754 -1.059478 0.968969 -1.067188 -1.030715 -1.059478 0.969970 -1.013754 -1.030715 -1.044710 0.970971 -1.030715 -1.044710 -1.044710 0.971972 -1.044710 -1.030715 -1.044710 0.972973 -0.956291 -1.030715 -1.044710 0.973974 -1.140589 -1.044710 -1.044710 0.974975 -1.012261 -1.044710 -1.044710 0.975976 -1.066830 -1.012261 -1.044710 0.976977 -1.217543 -1.026077 -1.044710 0.977978 -0.944184 -1.012261 -1.026077 0.978979 -0.911439 -0.978617 -1.026077 0.979980 -1.026077 -0.978617 -1.026077 0.980981 -0.839689 -0.978617 -1.026077 0.981982 -0.978617 -0.978617 -1.026077 0.982983 -0.981761 -0.978617 -1.026077 0.983984 -1.044297 -0.978617 -1.026077 0.984985 -0.965432 -0.981761 -1.026077 0.985986 -0.892152 -1.044297 -1.026077 0.986987 -1.051986 -1.044297 -1.026077 0.987988 -1.101437 -0.984559 -1.026077 0.988989 -1.134384 -1.035690 -1.026077 0.989990 -0.837896 -1.035690 -1.026077 0.990991 -0.984559 -1.008052 -1.026077 0.991992 -1.035690 -0.984559 -1.026077 0.992993 -1.008052 -0.951003 -1.008052 0.993994 -0.951003 -0.984559 -1.008052 0.994995 -0.896396 -0.951003 -1.008052 0.995996 -0.939782 -0.951003 -1.008052 0.996997 -1.069954 -0.951003 -1.008052 0.997998 -0.868794 -0.978381 -1.008052 0.998999 -0.978381 -1.061624 -1.008052 1.000000 -1.061624 -1.061624 -1.061624 gsl/doc/examples/interp.c0000644000175000017500000000140413536674414013761 0ustar eddedd#include #include #include #include #include int main (void) { int i; double xi, yi, x[10], y[10]; printf ("#m=0,S=17\n"); for (i = 0; i < 10; i++) { x[i] = i + 0.5 * sin (i); y[i] = i + cos (i * i); printf ("%g %g\n", x[i], y[i]); } printf ("#m=1,S=0\n"); { gsl_interp_accel *acc = gsl_interp_accel_alloc (); gsl_spline *spline = gsl_spline_alloc (gsl_interp_cspline, 10); gsl_spline_init (spline, x, y, 10); for (xi = x[0]; xi < x[9]; xi += 0.01) { yi = gsl_spline_eval (spline, xi, acc); printf ("%g %g\n", xi, yi); } gsl_spline_free (spline); gsl_interp_accel_free (acc); } return 0; } gsl/doc/examples/robfit.c0000644000175000017500000000536213536674414013754 0ustar eddedd#include #include #include int dofit(const gsl_multifit_robust_type *T, const gsl_matrix *X, const gsl_vector *y, gsl_vector *c, gsl_matrix *cov) { int s; gsl_multifit_robust_workspace * work = gsl_multifit_robust_alloc (T, X->size1, X->size2); s = gsl_multifit_robust (X, y, c, cov, work); gsl_multifit_robust_free (work); return s; } int main (int argc, char **argv) { size_t i; size_t n; const size_t p = 2; /* linear fit */ gsl_matrix *X, *cov; gsl_vector *x, *y, *c, *c_ols; const double a = 1.45; /* slope */ const double b = 3.88; /* intercept */ gsl_rng *r; if (argc != 2) { fprintf (stderr,"usage: robfit n\n"); exit (-1); } n = atoi (argv[1]); X = gsl_matrix_alloc (n, p); x = gsl_vector_alloc (n); y = gsl_vector_alloc (n); c = gsl_vector_alloc (p); c_ols = gsl_vector_alloc (p); cov = gsl_matrix_alloc (p, p); r = gsl_rng_alloc(gsl_rng_default); /* generate linear dataset */ for (i = 0; i < n - 3; i++) { double dx = 10.0 / (n - 1.0); double ei = gsl_rng_uniform(r); double xi = -5.0 + i * dx; double yi = a * xi + b; gsl_vector_set (x, i, xi); gsl_vector_set (y, i, yi + ei); } /* add a few outliers */ gsl_vector_set(x, n - 3, 4.7); gsl_vector_set(y, n - 3, -8.3); gsl_vector_set(x, n - 2, 3.5); gsl_vector_set(y, n - 2, -6.7); gsl_vector_set(x, n - 1, 4.1); gsl_vector_set(y, n - 1, -6.0); /* construct design matrix X for linear fit */ for (i = 0; i < n; ++i) { double xi = gsl_vector_get(x, i); gsl_matrix_set (X, i, 0, 1.0); gsl_matrix_set (X, i, 1, xi); } /* perform robust and OLS fit */ dofit(gsl_multifit_robust_ols, X, y, c_ols, cov); dofit(gsl_multifit_robust_bisquare, X, y, c, cov); /* output data and model */ for (i = 0; i < n; ++i) { double xi = gsl_vector_get(x, i); double yi = gsl_vector_get(y, i); gsl_vector_view v = gsl_matrix_row(X, i); double y_ols, y_rob, y_err; gsl_multifit_robust_est(&v.vector, c, cov, &y_rob, &y_err); gsl_multifit_robust_est(&v.vector, c_ols, cov, &y_ols, &y_err); printf("%g %g %g %g\n", xi, yi, y_rob, y_ols); } #define C(i) (gsl_vector_get(c,(i))) #define COV(i,j) (gsl_matrix_get(cov,(i),(j))) { printf ("# best fit: Y = %g + %g X\n", C(0), C(1)); printf ("# covariance matrix:\n"); printf ("# [ %+.5e, %+.5e\n", COV(0,0), COV(0,1)); printf ("# %+.5e, %+.5e\n", COV(1,0), COV(1,1)); } gsl_matrix_free (X); gsl_vector_free (x); gsl_vector_free (y); gsl_vector_free (c); gsl_vector_free (c_ols); gsl_matrix_free (cov); gsl_rng_free(r); return 0; } gsl/doc/examples/combination.c0000644000175000017500000000073413536674414014767 0ustar eddedd#include #include int main (void) { gsl_combination * c; size_t i; printf ("All subsets of {0,1,2,3} by size:\n") ; for (i = 0; i <= 4; i++) { c = gsl_combination_calloc (4, i); do { printf ("{"); gsl_combination_fprintf (stdout, c, " %u"); printf (" }\n"); } while (gsl_combination_next (c) == GSL_SUCCESS); gsl_combination_free (c); } return 0; } gsl/doc/examples/randwalk.txt0000644000175000017500000000030013536674414014652 0ustar eddedd0 0 -0.617746 -0.786378 0.376003 -0.674734 -0.569808 -0.350015 -0.112542 0.539315 -0.575798 -0.34691 -1.56878 -0.465204 -2.47057 -0.0330451 -2.50057 0.966505 -1.72376 1.59625 -2.64634 1.98207 gsl/doc/examples/fitting.txt0000644000175000017500000002235513536674414014531 0ustar eddedd# best fit: Y = -106.6 + 0.06 X # covariance matrix: # [ 39602, -19.9 # -19.9, 0.01] # chisq = 0.8 data: 1970 12 3.16228 data: 1980 11 2.23607 data: 1990 14 1.82574 data: 2000 13 1.58114 fit: 1961 11.06 hi : 1961 14.1276 lo : 1961 7.99243 fit: 1961.3 11.078 hi : 1961.3 14.1172 lo : 1961.3 8.03877 fit: 1961.6 11.096 hi : 1961.6 14.1069 lo : 1961.6 8.08509 fit: 1961.9 11.114 hi : 1961.9 14.0966 lo : 1961.9 8.13137 fit: 1962.2 11.132 hi : 1962.2 14.0864 lo : 1962.2 8.17761 fit: 1962.5 11.15 hi : 1962.5 14.0762 lo : 1962.5 8.22383 fit: 1962.8 11.168 hi : 1962.8 14.066 lo : 1962.8 8.27 fit: 1963.1 11.186 hi : 1963.1 14.0559 lo : 1963.1 8.31614 fit: 1963.4 11.204 hi : 1963.4 14.0458 lo : 1963.4 8.36224 fit: 1963.7 11.222 hi : 1963.7 14.0357 lo : 1963.7 8.4083 fit: 1964 11.24 hi : 1964 14.0257 lo : 1964 8.45432 fit: 1964.3 11.258 hi : 1964.3 14.0157 lo : 1964.3 8.5003 fit: 1964.6 11.276 hi : 1964.6 14.0058 lo : 1964.6 8.54624 fit: 1964.9 11.294 hi : 1964.9 13.9959 lo : 1964.9 8.59213 fit: 1965.2 11.312 hi : 1965.2 13.986 lo : 1965.2 8.63798 fit: 1965.5 11.33 hi : 1965.5 13.9762 lo : 1965.5 8.68378 fit: 1965.8 11.348 hi : 1965.8 13.9665 lo : 1965.8 8.72953 fit: 1966.1 11.366 hi : 1966.1 13.9568 lo : 1966.1 8.77523 fit: 1966.4 11.384 hi : 1966.4 13.9471 lo : 1966.4 8.82088 fit: 1966.7 11.402 hi : 1966.7 13.9375 lo : 1966.7 8.86647 fit: 1967 11.42 hi : 1967 13.928 lo : 1967 8.91201 fit: 1967.3 11.438 hi : 1967.3 13.9185 lo : 1967.3 8.9575 fit: 1967.6 11.456 hi : 1967.6 13.9091 lo : 1967.6 9.00292 fit: 1967.9 11.474 hi : 1967.9 13.8997 lo : 1967.9 9.04828 fit: 1968.2 11.492 hi : 1968.2 13.8904 lo : 1968.2 9.09358 fit: 1968.5 11.51 hi : 1968.5 13.8812 lo : 1968.5 9.13882 fit: 1968.8 11.528 hi : 1968.8 13.872 lo : 1968.8 9.18399 fit: 1969.1 11.546 hi : 1969.1 13.8629 lo : 1969.1 9.22908 fit: 1969.4 11.564 hi : 1969.4 13.8539 lo : 1969.4 9.27411 fit: 1969.7 11.582 hi : 1969.7 13.8449 lo : 1969.7 9.31906 fit: 1970 11.6 hi : 1970 13.8361 lo : 1970 9.36393 fit: 1970.3 11.618 hi : 1970.3 13.8273 lo : 1970.3 9.40872 fit: 1970.6 11.636 hi : 1970.6 13.8186 lo : 1970.6 9.45343 fit: 1970.9 11.654 hi : 1970.9 13.8099 lo : 1970.9 9.49805 fit: 1971.2 11.672 hi : 1971.2 13.8014 lo : 1971.2 9.54259 fit: 1971.5 11.69 hi : 1971.5 13.793 lo : 1971.5 9.58703 fit: 1971.8 11.708 hi : 1971.8 13.7846 lo : 1971.8 9.63137 fit: 1972.1 11.726 hi : 1972.1 13.7764 lo : 1972.1 9.67561 fit: 1972.4 11.744 hi : 1972.4 13.7683 lo : 1972.4 9.71975 fit: 1972.7 11.762 hi : 1972.7 13.7602 lo : 1972.7 9.76378 fit: 1973 11.78 hi : 1973 13.7523 lo : 1973 9.80769 fit: 1973.3 11.798 hi : 1973.3 13.7445 lo : 1973.3 9.85149 fit: 1973.6 11.816 hi : 1973.6 13.7368 lo : 1973.6 9.89517 fit: 1973.9 11.834 hi : 1973.9 13.7293 lo : 1973.9 9.93872 fit: 1974.2 11.852 hi : 1974.2 13.7219 lo : 1974.2 9.98213 fit: 1974.5 11.87 hi : 1974.5 13.7146 lo : 1974.5 10.0254 fit: 1974.8 11.888 hi : 1974.8 13.7075 lo : 1974.8 10.0685 fit: 1975.1 11.906 hi : 1975.1 13.7005 lo : 1975.1 10.1115 fit: 1975.4 11.924 hi : 1975.4 13.6936 lo : 1975.4 10.1544 fit: 1975.7 11.942 hi : 1975.7 13.687 lo : 1975.7 10.197 fit: 1976 11.96 hi : 1976 13.6805 lo : 1976 10.2395 fit: 1976.3 11.978 hi : 1976.3 13.6741 lo : 1976.3 10.2819 fit: 1976.6 11.996 hi : 1976.6 13.668 lo : 1976.6 10.324 fit: 1976.9 12.014 hi : 1976.9 13.6621 lo : 1976.9 10.3659 fit: 1977.2 12.032 hi : 1977.2 13.6563 lo : 1977.2 10.4077 fit: 1977.5 12.05 hi : 1977.5 13.6508 lo : 1977.5 10.4492 fit: 1977.8 12.068 hi : 1977.8 13.6455 lo : 1977.8 10.4905 fit: 1978.1 12.086 hi : 1978.1 13.6404 lo : 1978.1 10.5316 fit: 1978.4 12.104 hi : 1978.4 13.6355 lo : 1978.4 10.5725 fit: 1978.7 12.122 hi : 1978.7 13.6309 lo : 1978.7 10.6131 fit: 1979 12.14 hi : 1979 13.6266 lo : 1979 10.6534 fit: 1979.3 12.158 hi : 1979.3 13.6225 lo : 1979.3 10.6935 fit: 1979.6 12.176 hi : 1979.6 13.6188 lo : 1979.6 10.7332 fit: 1979.9 12.194 hi : 1979.9 13.6153 lo : 1979.9 10.7727 fit: 1980.2 12.212 hi : 1980.2 13.6121 lo : 1980.2 10.8119 fit: 1980.5 12.23 hi : 1980.5 13.6093 lo : 1980.5 10.8507 fit: 1980.8 12.248 hi : 1980.8 13.6068 lo : 1980.8 10.8892 fit: 1981.1 12.266 hi : 1981.1 13.6047 lo : 1981.1 10.9273 fit: 1981.4 12.284 hi : 1981.4 13.6029 lo : 1981.4 10.9651 fit: 1981.7 12.302 hi : 1981.7 13.6016 lo : 1981.7 11.0024 fit: 1982 12.32 hi : 1982 13.6006 lo : 1982 11.0394 fit: 1982.3 12.338 hi : 1982.3 13.6001 lo : 1982.3 11.0759 fit: 1982.6 12.356 hi : 1982.6 13.6 lo : 1982.6 11.112 fit: 1982.9 12.374 hi : 1982.9 13.6004 lo : 1982.9 11.1476 fit: 1983.2 12.392 hi : 1983.2 13.6013 lo : 1983.2 11.1827 fit: 1983.5 12.41 hi : 1983.5 13.6027 lo : 1983.5 11.2173 fit: 1983.8 12.428 hi : 1983.8 13.6046 lo : 1983.8 11.2514 fit: 1984.1 12.446 hi : 1984.1 13.6071 lo : 1984.1 11.2849 fit: 1984.4 12.464 hi : 1984.4 13.6101 lo : 1984.4 11.3179 fit: 1984.7 12.482 hi : 1984.7 13.6138 lo : 1984.7 11.3502 fit: 1985 12.5 hi : 1985 13.618 lo : 1985 11.382 fit: 1985.3 12.518 hi : 1985.3 13.6229 lo : 1985.3 11.4131 fit: 1985.6 12.536 hi : 1985.6 13.6285 lo : 1985.6 11.4435 fit: 1985.9 12.554 hi : 1985.9 13.6348 lo : 1985.9 11.4732 fit: 1986.2 12.572 hi : 1986.2 13.6418 lo : 1986.2 11.5022 fit: 1986.5 12.59 hi : 1986.5 13.6495 lo : 1986.5 11.5305 fit: 1986.8 12.608 hi : 1986.8 13.658 lo : 1986.8 11.558 fit: 1987.1 12.626 hi : 1987.1 13.6672 lo : 1987.1 11.5848 fit: 1987.4 12.644 hi : 1987.4 13.6772 lo : 1987.4 11.6108 fit: 1987.7 12.662 hi : 1987.7 13.6881 lo : 1987.7 11.6359 fit: 1988 12.68 hi : 1988 13.6998 lo : 1988 11.6602 fit: 1988.3 12.698 hi : 1988.3 13.7123 lo : 1988.3 11.6837 fit: 1988.6 12.716 hi : 1988.6 13.7258 lo : 1988.6 11.7062 fit: 1988.9 12.734 hi : 1988.9 13.74 lo : 1988.9 11.728 fit: 1989.2 12.752 hi : 1989.2 13.7552 lo : 1989.2 11.7488 fit: 1989.5 12.77 hi : 1989.5 13.7712 lo : 1989.5 11.7688 fit: 1989.8 12.788 hi : 1989.8 13.7882 lo : 1989.8 11.7878 fit: 1990.1 12.806 hi : 1990.1 13.806 lo : 1990.1 11.806 fit: 1990.4 12.824 hi : 1990.4 13.8248 lo : 1990.4 11.8232 fit: 1990.7 12.842 hi : 1990.7 13.8444 lo : 1990.7 11.8396 fit: 1991 12.86 hi : 1991 13.865 lo : 1991 11.855 fit: 1991.3 12.878 hi : 1991.3 13.8864 lo : 1991.3 11.8696 fit: 1991.6 12.896 hi : 1991.6 13.9087 lo : 1991.6 11.8833 fit: 1991.9 12.914 hi : 1991.9 13.9319 lo : 1991.9 11.8961 fit: 1992.2 12.932 hi : 1992.2 13.9559 lo : 1992.2 11.9081 fit: 1992.5 12.95 hi : 1992.5 13.9808 lo : 1992.5 11.9192 fit: 1992.8 12.968 hi : 1992.8 14.0065 lo : 1992.8 11.9295 fit: 1993.1 12.986 hi : 1993.1 14.0329 lo : 1993.1 11.9391 fit: 1993.4 13.004 hi : 1993.4 14.0602 lo : 1993.4 11.9478 fit: 1993.7 13.022 hi : 1993.7 14.0883 lo : 1993.7 11.9557 fit: 1994 13.04 hi : 1994 14.117 lo : 1994 11.963 fit: 1994.3 13.058 hi : 1994.3 14.1465 lo : 1994.3 11.9695 fit: 1994.6 13.076 hi : 1994.6 14.1767 lo : 1994.6 11.9753 fit: 1994.9 13.094 hi : 1994.9 14.2076 lo : 1994.9 11.9804 fit: 1995.2 13.112 hi : 1995.2 14.2391 lo : 1995.2 11.9849 fit: 1995.5 13.13 hi : 1995.5 14.2713 lo : 1995.5 11.9887 fit: 1995.8 13.148 hi : 1995.8 14.304 lo : 1995.8 11.992 fit: 1996.1 13.166 hi : 1996.1 14.3374 lo : 1996.1 11.9946 fit: 1996.4 13.184 hi : 1996.4 14.3713 lo : 1996.4 11.9967 fit: 1996.7 13.202 hi : 1996.7 14.4057 lo : 1996.7 11.9983 fit: 1997 13.22 hi : 1997 14.4407 lo : 1997 11.9993 fit: 1997.3 13.238 hi : 1997.3 14.4761 lo : 1997.3 11.9999 fit: 1997.6 13.256 hi : 1997.6 14.512 lo : 1997.6 12 fit: 1997.9 13.274 hi : 1997.9 14.5484 lo : 1997.9 11.9996 fit: 1998.2 13.292 hi : 1998.2 14.5852 lo : 1998.2 11.9988 fit: 1998.5 13.31 hi : 1998.5 14.6224 lo : 1998.5 11.9976 fit: 1998.8 13.328 hi : 1998.8 14.6601 lo : 1998.8 11.9959 fit: 1999.1 13.346 hi : 1999.1 14.6981 lo : 1999.1 11.9939 fit: 1999.4 13.364 hi : 1999.4 14.7364 lo : 1999.4 11.9916 fit: 1999.7 13.382 hi : 1999.7 14.7752 lo : 1999.7 11.9888 fit: 2000 13.4 hi : 2000 14.8142 lo : 2000 11.9858 fit: 2000.3 13.418 hi : 2000.3 14.8536 lo : 2000.3 11.9824 fit: 2000.6 13.436 hi : 2000.6 14.8933 lo : 2000.6 11.9787 fit: 2000.9 13.454 hi : 2000.9 14.9332 lo : 2000.9 11.9748 fit: 2001.2 13.472 hi : 2001.2 14.9735 lo : 2001.2 11.9705 fit: 2001.5 13.49 hi : 2001.5 15.014 lo : 2001.5 11.966 fit: 2001.8 13.508 hi : 2001.8 15.0547 lo : 2001.8 11.9613 fit: 2002.1 13.526 hi : 2002.1 15.0957 lo : 2002.1 11.9563 fit: 2002.4 13.544 hi : 2002.4 15.137 lo : 2002.4 11.951 fit: 2002.7 13.562 hi : 2002.7 15.1784 lo : 2002.7 11.9456 fit: 2003 13.58 hi : 2003 15.2201 lo : 2003 11.9399 fit: 2003.3 13.598 hi : 2003.3 15.262 lo : 2003.3 11.934 fit: 2003.6 13.616 hi : 2003.6 15.3041 lo : 2003.6 11.9279 fit: 2003.9 13.634 hi : 2003.9 15.3463 lo : 2003.9 11.9217 fit: 2004.2 13.652 hi : 2004.2 15.3888 lo : 2004.2 11.9152 fit: 2004.5 13.67 hi : 2004.5 15.4314 lo : 2004.5 11.9086 fit: 2004.8 13.688 hi : 2004.8 15.4742 lo : 2004.8 11.9018 fit: 2005.1 13.706 hi : 2005.1 15.5171 lo : 2005.1 11.8949 fit: 2005.4 13.724 hi : 2005.4 15.5602 lo : 2005.4 11.8878 fit: 2005.7 13.742 hi : 2005.7 15.6034 lo : 2005.7 11.8806 fit: 2006 13.76 hi : 2006 15.6468 lo : 2006 11.8732 fit: 2006.3 13.778 hi : 2006.3 15.6903 lo : 2006.3 11.8657 fit: 2006.6 13.796 hi : 2006.6 15.7339 lo : 2006.6 11.8581 fit: 2006.9 13.814 hi : 2006.9 15.7777 lo : 2006.9 11.8503 fit: 2007.2 13.832 hi : 2007.2 15.8216 lo : 2007.2 11.8424 fit: 2007.5 13.85 hi : 2007.5 15.8656 lo : 2007.5 11.8344 fit: 2007.8 13.868 hi : 2007.8 15.9097 lo : 2007.8 11.8263 fit: 2008.1 13.886 hi : 2008.1 15.9539 lo : 2008.1 11.8181 fit: 2008.4 13.904 hi : 2008.4 15.9982 lo : 2008.4 11.8098 fit: 2008.7 13.922 hi : 2008.7 16.0426 lo : 2008.7 11.8014 gsl/doc/examples/interpp.txt0000644000175000017500000000305513536674414014542 0ustar eddedd#m=0,S=5 0 0.15 0.1 0.7 0.27 -0.1 0.3 0.15 #m=1,S=0 0 0.15 0.003 0.178463 0.006 0.206683 0.009 0.234613 0.012 0.262204 0.015 0.28941 0.018 0.316182 0.021 0.342474 0.024 0.368236 0.027 0.393423 0.03 0.417986 0.033 0.441878 0.036 0.465051 0.039 0.487458 0.042 0.50905 0.045 0.529781 0.048 0.549603 0.051 0.568468 0.054 0.586329 0.057 0.603138 0.06 0.618847 0.063 0.633409 0.066 0.646777 0.069 0.658902 0.072 0.669737 0.075 0.679235 0.078 0.687348 0.081 0.694029 0.084 0.699229 0.087 0.702901 0.09 0.704998 0.093 0.705472 0.096 0.704276 0.099 0.701362 0.102 0.696687 0.105 0.690283 0.108 0.682225 0.111 0.672587 0.114 0.661448 0.117 0.648882 0.12 0.634965 0.123 0.619775 0.126 0.603387 0.129 0.585877 0.132 0.567321 0.135 0.547796 0.138 0.527377 0.141 0.506141 0.144 0.484164 0.147 0.461522 0.15 0.43829 0.153 0.414546 0.156 0.390366 0.159 0.365824 0.162 0.340999 0.165 0.315964 0.168 0.290798 0.171 0.265576 0.174 0.240373 0.177 0.215267 0.18 0.190333 0.183 0.165648 0.186 0.141287 0.189 0.117326 0.192 0.0938429 0.195 0.0709122 0.198 0.0486106 0.201 0.0270141 0.204 0.00619895 0.207 -0.0137588 0.21 -0.0327831 0.213 -0.0507978 0.216 -0.0677266 0.219 -0.0834936 0.222 -0.0980226 0.225 -0.111237 0.228 -0.123062 0.231 -0.13342 0.234 -0.142236 0.237 -0.149433 0.24 -0.154935 0.243 -0.158667 0.246 -0.160551 0.249 -0.160512 0.252 -0.158475 0.255 -0.154361 0.258 -0.148096 0.261 -0.139604 0.264 -0.128808 0.267 -0.115632 0.27 -0.1 0.273 -0.0818941 0.276 -0.0615288 0.279 -0.0391769 0.282 -0.0151111 0.285 0.0103957 0.288 0.0370709 0.291 0.0646417 0.294 0.0928353 0.297 0.121379 0.3 0.15 gsl/doc/examples/multimin.txt0000644000175000017500000000073413536674414014720 0ustar eddedd x y f 1 4.99629 6.99072 687.84780 2 4.98886 6.97215 683.55456 3 4.97400 6.93501 675.01278 4 4.94429 6.86073 658.10798 5 4.88487 6.71217 625.01340 6 4.76602 6.41506 561.68440 7 4.52833 5.82083 446.46694 8 4.05295 4.63238 261.79422 9 3.10219 2.25548 75.49762 10 2.85185 1.62963 67.03704 11 2.19088 1.76182 45.31640 12 0.86892 2.02622 30.18555 Minimum found at: 13 1.00000 2.00000 30.00000 gsl/doc/examples/fitreg.c0000644000175000017500000001172513536674414013747 0ustar eddedd#include #include #include #include #include #include int main() { const size_t n = 1000; /* number of observations */ const size_t p = 2; /* number of model parameters */ size_t i; gsl_rng *r = gsl_rng_alloc(gsl_rng_default); gsl_matrix *X = gsl_matrix_alloc(n, p); gsl_vector *y = gsl_vector_alloc(n); for (i = 0; i < n; ++i) { /* generate first random variable u */ double ui = 5.0 * gsl_ran_gaussian(r, 1.0); /* set v = u + noise */ double vi = ui + gsl_ran_gaussian(r, 0.001); /* set y = u + v + noise */ double yi = ui + vi + gsl_ran_gaussian(r, 1.0); /* since u =~ v, the matrix X is ill-conditioned */ gsl_matrix_set(X, i, 0, ui); gsl_matrix_set(X, i, 1, vi); /* rhs vector */ gsl_vector_set(y, i, yi); } { const size_t npoints = 200; /* number of points on L-curve and GCV curve */ gsl_multifit_linear_workspace *w = gsl_multifit_linear_alloc(n, p); gsl_vector *c = gsl_vector_alloc(p); /* OLS solution */ gsl_vector *c_lcurve = gsl_vector_alloc(p); /* regularized solution (L-curve) */ gsl_vector *c_gcv = gsl_vector_alloc(p); /* regularized solution (GCV) */ gsl_vector *reg_param = gsl_vector_alloc(npoints); gsl_vector *rho = gsl_vector_alloc(npoints); /* residual norms */ gsl_vector *eta = gsl_vector_alloc(npoints); /* solution norms */ gsl_vector *G = gsl_vector_alloc(npoints); /* GCV function values */ double lambda_l; /* optimal regularization parameter (L-curve) */ double lambda_gcv; /* optimal regularization parameter (GCV) */ double G_gcv; /* G(lambda_gcv) */ size_t reg_idx; /* index of optimal lambda */ double rcond; /* reciprocal condition number of X */ double chisq, rnorm, snorm; /* compute SVD of X */ gsl_multifit_linear_svd(X, w); rcond = gsl_multifit_linear_rcond(w); fprintf(stderr, "matrix condition number = %e\n\n", 1.0 / rcond); /* unregularized (standard) least squares fit, lambda = 0 */ gsl_multifit_linear_solve(0.0, X, y, c, &rnorm, &snorm, w); chisq = pow(rnorm, 2.0); fprintf(stderr, "=== Unregularized fit ===\n"); fprintf(stderr, "best fit: y = %g u + %g v\n", gsl_vector_get(c, 0), gsl_vector_get(c, 1)); fprintf(stderr, "residual norm = %g\n", rnorm); fprintf(stderr, "solution norm = %g\n", snorm); fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); /* calculate L-curve and find its corner */ gsl_multifit_linear_lcurve(y, reg_param, rho, eta, w); gsl_multifit_linear_lcorner(rho, eta, ®_idx); /* store optimal regularization parameter */ lambda_l = gsl_vector_get(reg_param, reg_idx); /* regularize with lambda_l */ gsl_multifit_linear_solve(lambda_l, X, y, c_lcurve, &rnorm, &snorm, w); chisq = pow(rnorm, 2.0) + pow(lambda_l * snorm, 2.0); fprintf(stderr, "\n=== Regularized fit (L-curve) ===\n"); fprintf(stderr, "optimal lambda: %g\n", lambda_l); fprintf(stderr, "best fit: y = %g u + %g v\n", gsl_vector_get(c_lcurve, 0), gsl_vector_get(c_lcurve, 1)); fprintf(stderr, "residual norm = %g\n", rnorm); fprintf(stderr, "solution norm = %g\n", snorm); fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); /* calculate GCV curve and find its minimum */ gsl_multifit_linear_gcv(y, reg_param, G, &lambda_gcv, &G_gcv, w); /* regularize with lambda_gcv */ gsl_multifit_linear_solve(lambda_gcv, X, y, c_gcv, &rnorm, &snorm, w); chisq = pow(rnorm, 2.0) + pow(lambda_gcv * snorm, 2.0); fprintf(stderr, "\n=== Regularized fit (GCV) ===\n"); fprintf(stderr, "optimal lambda: %g\n", lambda_gcv); fprintf(stderr, "best fit: y = %g u + %g v\n", gsl_vector_get(c_gcv, 0), gsl_vector_get(c_gcv, 1)); fprintf(stderr, "residual norm = %g\n", rnorm); fprintf(stderr, "solution norm = %g\n", snorm); fprintf(stderr, "chisq/dof = %g\n", chisq / (n - p)); /* output L-curve and GCV curve */ for (i = 0; i < npoints; ++i) { printf("%e %e %e %e\n", gsl_vector_get(reg_param, i), gsl_vector_get(rho, i), gsl_vector_get(eta, i), gsl_vector_get(G, i)); } /* output L-curve corner point */ printf("\n\n%f %f\n", gsl_vector_get(rho, reg_idx), gsl_vector_get(eta, reg_idx)); /* output GCV curve corner minimum */ printf("\n\n%e %e\n", lambda_gcv, G_gcv); gsl_multifit_linear_free(w); gsl_vector_free(c); gsl_vector_free(c_lcurve); gsl_vector_free(reg_param); gsl_vector_free(rho); gsl_vector_free(eta); gsl_vector_free(G); } gsl_rng_free(r); gsl_matrix_free(X); gsl_vector_free(y); return 0; } gsl/doc/examples/nlfit3.txt0000644000175000017500000437560713536674414014303 0ustar eddedd-5.000000 -5.000000 505.002695 -5.000000 -4.900000 500.575223 -5.000000 -4.800000 496.167751 -5.000000 -4.700000 491.780279 -5.000000 -4.600000 487.412807 -5.000000 -4.500000 483.065335 -5.000000 -4.400000 478.737863 -5.000000 -4.300000 474.430391 -5.000000 -4.200000 470.142919 -5.000000 -4.100000 465.875447 -5.000000 -4.000000 461.627975 -5.000000 -3.900000 457.400503 -5.000000 -3.800000 453.193031 -5.000000 -3.700000 449.005559 -5.000000 -3.600000 444.838087 -5.000000 -3.500000 440.690615 -5.000000 -3.400000 436.563143 -5.000000 -3.300000 432.455671 -5.000000 -3.200000 428.368199 -5.000000 -3.100000 424.300727 -5.000000 -3.000000 420.253255 -5.000000 -2.900000 416.225783 -5.000000 -2.800000 412.218311 -5.000000 -2.700000 408.230839 -5.000000 -2.600000 404.263367 -5.000000 -2.500000 400.315895 -5.000000 -2.400000 396.388423 -5.000000 -2.300000 392.480951 -5.000000 -2.200000 388.593479 -5.000000 -2.100000 384.726008 -5.000000 -2.000000 380.878536 -5.000000 -1.900000 377.051064 -5.000000 -1.800000 373.243592 -5.000000 -1.700000 369.456120 -5.000000 -1.600000 365.688648 -5.000000 -1.500000 361.941176 -5.000000 -1.400000 358.213704 -5.000000 -1.300000 354.506232 -5.000000 -1.200000 350.818760 -5.000000 -1.100000 347.151288 -5.000000 -1.000000 343.503816 -5.000000 -0.900000 339.876344 -5.000000 -0.800000 336.268872 -5.000000 -0.700000 332.681400 -5.000000 -0.600000 329.113928 -5.000000 -0.500000 325.566456 -5.000000 -0.400000 322.038984 -5.000000 -0.300000 318.531512 -5.000000 -0.200000 315.044040 -5.000000 -0.100000 311.576568 -5.000000 -0.000000 308.129096 -5.000000 0.100000 304.701624 -5.000000 0.200000 301.294152 -5.000000 0.300000 297.906680 -5.000000 0.400000 294.539208 -5.000000 0.500000 291.191736 -5.000000 0.600000 287.864264 -5.000000 0.700000 284.556792 -5.000000 0.800000 281.269320 -5.000000 0.900000 278.001848 -5.000000 1.000000 274.754376 -5.000000 1.100000 271.526904 -5.000000 1.200000 268.319432 -5.000000 1.300000 265.131960 -5.000000 1.400000 261.964488 -5.000000 1.500000 258.817016 -5.000000 1.600000 255.689544 -5.000000 1.700000 252.582072 -5.000000 1.800000 249.494600 -5.000000 1.900000 246.427128 -5.000000 2.000000 243.379656 -5.000000 2.100000 240.352185 -5.000000 2.200000 237.344713 -5.000000 2.300000 234.357241 -5.000000 2.400000 231.389769 -5.000000 2.500000 228.442297 -5.000000 2.600000 225.514825 -5.000000 2.700000 222.607353 -5.000000 2.800000 219.719881 -5.000000 2.900000 216.852409 -5.000000 3.000000 214.004937 -5.000000 3.100000 211.177465 -5.000000 3.200000 208.369993 -5.000000 3.300000 205.582521 -5.000000 3.400000 202.815049 -5.000000 3.500000 200.067577 -5.000000 3.600000 197.340105 -5.000000 3.700000 194.632633 -5.000000 3.800000 191.945161 -5.000000 3.900000 189.277689 -5.000000 4.000000 186.630217 -5.000000 4.100000 184.002745 -5.000000 4.200000 181.395273 -5.000000 4.300000 178.807801 -5.000000 4.400000 176.240329 -5.000000 4.500000 173.692857 -5.000000 4.600000 171.165385 -5.000000 4.700000 168.657913 -5.000000 4.800000 166.170441 -5.000000 4.900000 163.702969 -5.000000 5.000000 161.255497 -5.000000 5.100000 158.828025 -5.000000 5.200000 156.420553 -5.000000 5.300000 154.033081 -5.000000 5.400000 151.665609 -5.000000 5.500000 149.318137 -5.000000 5.600000 146.990665 -5.000000 5.700000 144.683193 -5.000000 5.800000 142.395721 -5.000000 5.900000 140.128249 -5.000000 6.000000 137.880777 -5.000000 6.100000 135.653305 -5.000000 6.200000 133.445833 -5.000000 6.300000 131.258361 -5.000000 6.400000 129.090890 -5.000000 6.500000 126.943418 -5.000000 6.600000 124.815946 -5.000000 6.700000 122.708474 -5.000000 6.800000 120.621002 -5.000000 6.900000 118.553530 -5.000000 7.000000 116.506058 -5.000000 7.100000 114.478586 -5.000000 7.200000 112.471114 -5.000000 7.300000 110.483642 -5.000000 7.400000 108.516170 -5.000000 7.500000 106.568698 -5.000000 7.600000 104.641226 -5.000000 7.700000 102.733754 -5.000000 7.800000 100.846282 -5.000000 7.900000 98.978810 -5.000000 8.000000 97.131338 -5.000000 8.100000 95.303866 -5.000000 8.200000 93.496394 -5.000000 8.300000 91.708922 -5.000000 8.400000 89.941450 -5.000000 8.500000 88.193978 -5.000000 8.600000 86.466506 -5.000000 8.700000 84.759034 -5.000000 8.800000 83.071562 -5.000000 8.900000 81.404090 -5.000000 9.000000 79.756618 -5.000000 9.100000 78.129146 -5.000000 9.200000 76.521674 -5.000000 9.300000 74.934202 -5.000000 9.400000 73.366730 -5.000000 9.500000 71.819258 -5.000000 9.600000 70.291786 -5.000000 9.700000 68.784314 -5.000000 9.800000 67.296842 -5.000000 9.900000 65.829370 -5.000000 10.000000 64.381898 -5.000000 10.100000 62.954426 -5.000000 10.200000 61.546954 -5.000000 10.300000 60.159482 -5.000000 10.400000 58.792010 -5.000000 10.500000 57.444538 -5.000000 10.600000 56.117066 -5.000000 10.700000 54.809595 -5.000000 10.800000 53.522123 -5.000000 10.900000 52.254651 -5.000000 11.000000 51.007179 -5.000000 11.100000 49.779707 -5.000000 11.200000 48.572235 -5.000000 11.300000 47.384763 -5.000000 11.400000 46.217291 -5.000000 11.500000 45.069819 -5.000000 11.600000 43.942347 -5.000000 11.700000 42.834875 -5.000000 11.800000 41.747403 -5.000000 11.900000 40.679931 -5.000000 12.000000 39.632459 -5.000000 12.100000 38.604987 -5.000000 12.200000 37.597515 -5.000000 12.300000 36.610043 -5.000000 12.400000 35.642571 -5.000000 12.500000 34.695099 -5.000000 12.600000 33.767627 -5.000000 12.700000 32.860155 -5.000000 12.800000 31.972683 -5.000000 12.900000 31.105211 -5.000000 13.000000 30.257739 -5.000000 13.100000 29.430267 -5.000000 13.200000 28.622795 -5.000000 13.300000 27.835323 -5.000000 13.400000 27.067851 -5.000000 13.500000 26.320379 -5.000000 13.600000 25.592907 -5.000000 13.700000 24.885435 -5.000000 13.800000 24.197963 -5.000000 13.900000 23.530491 -5.000000 14.000000 22.883019 -5.000000 14.100000 22.255547 -5.000000 14.200000 21.648075 -5.000000 14.300000 21.060603 -5.000000 14.400000 20.493131 -5.000000 14.500000 19.945659 -5.000000 14.600000 19.418187 -5.000000 14.700000 18.910715 -5.000000 14.800000 18.423243 -5.000000 14.900000 17.955771 -5.000000 15.000000 17.508300 -4.900000 -5.000000 491.414591 -4.900000 -4.900000 487.044528 -4.900000 -4.800000 482.694466 -4.900000 -4.700000 478.364403 -4.900000 -4.600000 474.054341 -4.900000 -4.500000 469.764278 -4.900000 -4.400000 465.494216 -4.900000 -4.300000 461.244153 -4.900000 -4.200000 457.014091 -4.900000 -4.100000 452.804028 -4.900000 -4.000000 448.613966 -4.900000 -3.900000 444.443904 -4.900000 -3.800000 440.293841 -4.900000 -3.700000 436.163779 -4.900000 -3.600000 432.053716 -4.900000 -3.500000 427.963654 -4.900000 -3.400000 423.893591 -4.900000 -3.300000 419.843529 -4.900000 -3.200000 415.813466 -4.900000 -3.100000 411.803404 -4.900000 -3.000000 407.813341 -4.900000 -2.900000 403.843279 -4.900000 -2.800000 399.893217 -4.900000 -2.700000 395.963154 -4.900000 -2.600000 392.053092 -4.900000 -2.500000 388.163029 -4.900000 -2.400000 384.292967 -4.900000 -2.300000 380.442904 -4.900000 -2.200000 376.612842 -4.900000 -2.100000 372.802779 -4.900000 -2.000000 369.012717 -4.900000 -1.900000 365.242654 -4.900000 -1.800000 361.492592 -4.900000 -1.700000 357.762530 -4.900000 -1.600000 354.052467 -4.900000 -1.500000 350.362405 -4.900000 -1.400000 346.692342 -4.900000 -1.300000 343.042280 -4.900000 -1.200000 339.412217 -4.900000 -1.100000 335.802155 -4.900000 -1.000000 332.212092 -4.900000 -0.900000 328.642030 -4.900000 -0.800000 325.091967 -4.900000 -0.700000 321.561905 -4.900000 -0.600000 318.051843 -4.900000 -0.500000 314.561780 -4.900000 -0.400000 311.091718 -4.900000 -0.300000 307.641655 -4.900000 -0.200000 304.211593 -4.900000 -0.100000 300.801530 -4.900000 -0.000000 297.411468 -4.900000 0.100000 294.041405 -4.900000 0.200000 290.691343 -4.900000 0.300000 287.361280 -4.900000 0.400000 284.051218 -4.900000 0.500000 280.761156 -4.900000 0.600000 277.491093 -4.900000 0.700000 274.241031 -4.900000 0.800000 271.010968 -4.900000 0.900000 267.800906 -4.900000 1.000000 264.610843 -4.900000 1.100000 261.440781 -4.900000 1.200000 258.290718 -4.900000 1.300000 255.160656 -4.900000 1.400000 252.050593 -4.900000 1.500000 248.960531 -4.900000 1.600000 245.890469 -4.900000 1.700000 242.840406 -4.900000 1.800000 239.810344 -4.900000 1.900000 236.800281 -4.900000 2.000000 233.810219 -4.900000 2.100000 230.840156 -4.900000 2.200000 227.890094 -4.900000 2.300000 224.960031 -4.900000 2.400000 222.049969 -4.900000 2.500000 219.159906 -4.900000 2.600000 216.289844 -4.900000 2.700000 213.439782 -4.900000 2.800000 210.609719 -4.900000 2.900000 207.799657 -4.900000 3.000000 205.009594 -4.900000 3.100000 202.239532 -4.900000 3.200000 199.489469 -4.900000 3.300000 196.759407 -4.900000 3.400000 194.049344 -4.900000 3.500000 191.359282 -4.900000 3.600000 188.689219 -4.900000 3.700000 186.039157 -4.900000 3.800000 183.409095 -4.900000 3.900000 180.799032 -4.900000 4.000000 178.208970 -4.900000 4.100000 175.638907 -4.900000 4.200000 173.088845 -4.900000 4.300000 170.558782 -4.900000 4.400000 168.048720 -4.900000 4.500000 165.558657 -4.900000 4.600000 163.088595 -4.900000 4.700000 160.638532 -4.900000 4.800000 158.208470 -4.900000 4.900000 155.798408 -4.900000 5.000000 153.408345 -4.900000 5.100000 151.038283 -4.900000 5.200000 148.688220 -4.900000 5.300000 146.358158 -4.900000 5.400000 144.048095 -4.900000 5.500000 141.758033 -4.900000 5.600000 139.487970 -4.900000 5.700000 137.237908 -4.900000 5.800000 135.007845 -4.900000 5.900000 132.797783 -4.900000 6.000000 130.607720 -4.900000 6.100000 128.437658 -4.900000 6.200000 126.287596 -4.900000 6.300000 124.157533 -4.900000 6.400000 122.047471 -4.900000 6.500000 119.957408 -4.900000 6.600000 117.887346 -4.900000 6.700000 115.837283 -4.900000 6.800000 113.807221 -4.900000 6.900000 111.797158 -4.900000 7.000000 109.807096 -4.900000 7.100000 107.837033 -4.900000 7.200000 105.886971 -4.900000 7.300000 103.956909 -4.900000 7.400000 102.046846 -4.900000 7.500000 100.156784 -4.900000 7.600000 98.286721 -4.900000 7.700000 96.436659 -4.900000 7.800000 94.606596 -4.900000 7.900000 92.796534 -4.900000 8.000000 91.006471 -4.900000 8.100000 89.236409 -4.900000 8.200000 87.486346 -4.900000 8.300000 85.756284 -4.900000 8.400000 84.046222 -4.900000 8.500000 82.356159 -4.900000 8.600000 80.686097 -4.900000 8.700000 79.036034 -4.900000 8.800000 77.405972 -4.900000 8.900000 75.795909 -4.900000 9.000000 74.205847 -4.900000 9.100000 72.635784 -4.900000 9.200000 71.085722 -4.900000 9.300000 69.555659 -4.900000 9.400000 68.045597 -4.900000 9.500000 66.555535 -4.900000 9.600000 65.085472 -4.900000 9.700000 63.635410 -4.900000 9.800000 62.205347 -4.900000 9.900000 60.795285 -4.900000 10.000000 59.405222 -4.900000 10.100000 58.035160 -4.900000 10.200000 56.685097 -4.900000 10.300000 55.355035 -4.900000 10.400000 54.044972 -4.900000 10.500000 52.754910 -4.900000 10.600000 51.484848 -4.900000 10.700000 50.234785 -4.900000 10.800000 49.004723 -4.900000 10.900000 47.794660 -4.900000 11.000000 46.604598 -4.900000 11.100000 45.434535 -4.900000 11.200000 44.284473 -4.900000 11.300000 43.154410 -4.900000 11.400000 42.044348 -4.900000 11.500000 40.954285 -4.900000 11.600000 39.884223 -4.900000 11.700000 38.834161 -4.900000 11.800000 37.804098 -4.900000 11.900000 36.794036 -4.900000 12.000000 35.803973 -4.900000 12.100000 34.833911 -4.900000 12.200000 33.883848 -4.900000 12.300000 32.953786 -4.900000 12.400000 32.043723 -4.900000 12.500000 31.153661 -4.900000 12.600000 30.283598 -4.900000 12.700000 29.433536 -4.900000 12.800000 28.603474 -4.900000 12.900000 27.793411 -4.900000 13.000000 27.003349 -4.900000 13.100000 26.233286 -4.900000 13.200000 25.483224 -4.900000 13.300000 24.753161 -4.900000 13.400000 24.043099 -4.900000 13.500000 23.353036 -4.900000 13.600000 22.682974 -4.900000 13.700000 22.032911 -4.900000 13.800000 21.402849 -4.900000 13.900000 20.792787 -4.900000 14.000000 20.202724 -4.900000 14.100000 19.632662 -4.900000 14.200000 19.082599 -4.900000 14.300000 18.552537 -4.900000 14.400000 18.042474 -4.900000 14.500000 17.552412 -4.900000 14.600000 17.082349 -4.900000 14.700000 16.632287 -4.900000 14.800000 16.202224 -4.900000 14.900000 15.792162 -4.900000 15.000000 15.402100 -4.800000 -5.000000 478.085075 -4.800000 -4.900000 473.771906 -4.800000 -4.800000 469.478736 -4.800000 -4.700000 465.205566 -4.800000 -4.600000 460.952397 -4.800000 -4.500000 456.719227 -4.800000 -4.400000 452.506057 -4.800000 -4.300000 448.312888 -4.800000 -4.200000 444.139718 -4.800000 -4.100000 439.986548 -4.800000 -4.000000 435.853379 -4.800000 -3.900000 431.740209 -4.800000 -3.800000 427.647039 -4.800000 -3.700000 423.573870 -4.800000 -3.600000 419.520700 -4.800000 -3.500000 415.487530 -4.800000 -3.400000 411.474361 -4.800000 -3.300000 407.481191 -4.800000 -3.200000 403.508021 -4.800000 -3.100000 399.554852 -4.800000 -3.000000 395.621682 -4.800000 -2.900000 391.708512 -4.800000 -2.800000 387.815343 -4.800000 -2.700000 383.942173 -4.800000 -2.600000 380.089003 -4.800000 -2.500000 376.255834 -4.800000 -2.400000 372.442664 -4.800000 -2.300000 368.649494 -4.800000 -2.200000 364.876325 -4.800000 -2.100000 361.123155 -4.800000 -2.000000 357.389985 -4.800000 -1.900000 353.676816 -4.800000 -1.800000 349.983646 -4.800000 -1.700000 346.310476 -4.800000 -1.600000 342.657307 -4.800000 -1.500000 339.024137 -4.800000 -1.400000 335.410967 -4.800000 -1.300000 331.817798 -4.800000 -1.200000 328.244628 -4.800000 -1.100000 324.691458 -4.800000 -1.000000 321.158289 -4.800000 -0.900000 317.645119 -4.800000 -0.800000 314.151949 -4.800000 -0.700000 310.678779 -4.800000 -0.600000 307.225610 -4.800000 -0.500000 303.792440 -4.800000 -0.400000 300.379270 -4.800000 -0.300000 296.986101 -4.800000 -0.200000 293.612931 -4.800000 -0.100000 290.259761 -4.800000 -0.000000 286.926592 -4.800000 0.100000 283.613422 -4.800000 0.200000 280.320252 -4.800000 0.300000 277.047083 -4.800000 0.400000 273.793913 -4.800000 0.500000 270.560743 -4.800000 0.600000 267.347574 -4.800000 0.700000 264.154404 -4.800000 0.800000 260.981234 -4.800000 0.900000 257.828065 -4.800000 1.000000 254.694895 -4.800000 1.100000 251.581725 -4.800000 1.200000 248.488556 -4.800000 1.300000 245.415386 -4.800000 1.400000 242.362216 -4.800000 1.500000 239.329047 -4.800000 1.600000 236.315877 -4.800000 1.700000 233.322707 -4.800000 1.800000 230.349538 -4.800000 1.900000 227.396368 -4.800000 2.000000 224.463198 -4.800000 2.100000 221.550029 -4.800000 2.200000 218.656859 -4.800000 2.300000 215.783689 -4.800000 2.400000 212.930520 -4.800000 2.500000 210.097350 -4.800000 2.600000 207.284180 -4.800000 2.700000 204.491011 -4.800000 2.800000 201.717841 -4.800000 2.900000 198.964671 -4.800000 3.000000 196.231502 -4.800000 3.100000 193.518332 -4.800000 3.200000 190.825162 -4.800000 3.300000 188.151993 -4.800000 3.400000 185.498823 -4.800000 3.500000 182.865653 -4.800000 3.600000 180.252484 -4.800000 3.700000 177.659314 -4.800000 3.800000 175.086144 -4.800000 3.900000 172.532975 -4.800000 4.000000 169.999805 -4.800000 4.100000 167.486635 -4.800000 4.200000 164.993466 -4.800000 4.300000 162.520296 -4.800000 4.400000 160.067126 -4.800000 4.500000 157.633957 -4.800000 4.600000 155.220787 -4.800000 4.700000 152.827617 -4.800000 4.800000 150.454448 -4.800000 4.900000 148.101278 -4.800000 5.000000 145.768108 -4.800000 5.100000 143.454939 -4.800000 5.200000 141.161769 -4.800000 5.300000 138.888599 -4.800000 5.400000 136.635430 -4.800000 5.500000 134.402260 -4.800000 5.600000 132.189090 -4.800000 5.700000 129.995920 -4.800000 5.800000 127.822751 -4.800000 5.900000 125.669581 -4.800000 6.000000 123.536411 -4.800000 6.100000 121.423242 -4.800000 6.200000 119.330072 -4.800000 6.300000 117.256902 -4.800000 6.400000 115.203733 -4.800000 6.500000 113.170563 -4.800000 6.600000 111.157393 -4.800000 6.700000 109.164224 -4.800000 6.800000 107.191054 -4.800000 6.900000 105.237884 -4.800000 7.000000 103.304715 -4.800000 7.100000 101.391545 -4.800000 7.200000 99.498375 -4.800000 7.300000 97.625206 -4.800000 7.400000 95.772036 -4.800000 7.500000 93.938866 -4.800000 7.600000 92.125697 -4.800000 7.700000 90.332527 -4.800000 7.800000 88.559357 -4.800000 7.900000 86.806188 -4.800000 8.000000 85.073018 -4.800000 8.100000 83.359848 -4.800000 8.200000 81.666679 -4.800000 8.300000 79.993509 -4.800000 8.400000 78.340339 -4.800000 8.500000 76.707170 -4.800000 8.600000 75.094000 -4.800000 8.700000 73.500830 -4.800000 8.800000 71.927661 -4.800000 8.900000 70.374491 -4.800000 9.000000 68.841321 -4.800000 9.100000 67.328152 -4.800000 9.200000 65.834982 -4.800000 9.300000 64.361812 -4.800000 9.400000 62.908643 -4.800000 9.500000 61.475473 -4.800000 9.600000 60.062303 -4.800000 9.700000 58.669134 -4.800000 9.800000 57.295964 -4.800000 9.900000 55.942794 -4.800000 10.000000 54.609625 -4.800000 10.100000 53.296455 -4.800000 10.200000 52.003285 -4.800000 10.300000 50.730116 -4.800000 10.400000 49.476946 -4.800000 10.500000 48.243776 -4.800000 10.600000 47.030607 -4.800000 10.700000 45.837437 -4.800000 10.800000 44.664267 -4.800000 10.900000 43.511098 -4.800000 11.000000 42.377928 -4.800000 11.100000 41.264758 -4.800000 11.200000 40.171589 -4.800000 11.300000 39.098419 -4.800000 11.400000 38.045249 -4.800000 11.500000 37.012080 -4.800000 11.600000 35.998910 -4.800000 11.700000 35.005740 -4.800000 11.800000 34.032571 -4.800000 11.900000 33.079401 -4.800000 12.000000 32.146231 -4.800000 12.100000 31.233061 -4.800000 12.200000 30.339892 -4.800000 12.300000 29.466722 -4.800000 12.400000 28.613552 -4.800000 12.500000 27.780383 -4.800000 12.600000 26.967213 -4.800000 12.700000 26.174043 -4.800000 12.800000 25.400874 -4.800000 12.900000 24.647704 -4.800000 13.000000 23.914534 -4.800000 13.100000 23.201365 -4.800000 13.200000 22.508195 -4.800000 13.300000 21.835025 -4.800000 13.400000 21.181856 -4.800000 13.500000 20.548686 -4.800000 13.600000 19.935516 -4.800000 13.700000 19.342347 -4.800000 13.800000 18.769177 -4.800000 13.900000 18.216007 -4.800000 14.000000 17.682838 -4.800000 14.100000 17.169668 -4.800000 14.200000 16.676498 -4.800000 14.300000 16.203329 -4.800000 14.400000 15.750159 -4.800000 14.500000 15.316989 -4.800000 14.600000 14.903820 -4.800000 14.700000 14.510650 -4.800000 14.800000 14.137480 -4.800000 14.900000 13.784311 -4.800000 15.000000 13.451141 -4.700000 -5.000000 465.019239 -4.700000 -4.900000 460.762445 -4.700000 -4.800000 456.525652 -4.700000 -4.700000 452.308858 -4.700000 -4.600000 448.112064 -4.700000 -4.500000 443.935271 -4.700000 -4.400000 439.778477 -4.700000 -4.300000 435.641684 -4.700000 -4.200000 431.524890 -4.700000 -4.100000 427.428096 -4.700000 -4.000000 423.351303 -4.700000 -3.900000 419.294509 -4.700000 -3.800000 415.257715 -4.700000 -3.700000 411.240922 -4.700000 -3.600000 407.244128 -4.700000 -3.500000 403.267335 -4.700000 -3.400000 399.310541 -4.700000 -3.300000 395.373747 -4.700000 -3.200000 391.456954 -4.700000 -3.100000 387.560160 -4.700000 -3.000000 383.683366 -4.700000 -2.900000 379.826573 -4.700000 -2.800000 375.989779 -4.700000 -2.700000 372.172986 -4.700000 -2.600000 368.376192 -4.700000 -2.500000 364.599398 -4.700000 -2.400000 360.842605 -4.700000 -2.300000 357.105811 -4.700000 -2.200000 353.389017 -4.700000 -2.100000 349.692224 -4.700000 -2.000000 346.015430 -4.700000 -1.900000 342.358637 -4.700000 -1.800000 338.721843 -4.700000 -1.700000 335.105049 -4.700000 -1.600000 331.508256 -4.700000 -1.500000 327.931462 -4.700000 -1.400000 324.374668 -4.700000 -1.300000 320.837875 -4.700000 -1.200000 317.321081 -4.700000 -1.100000 313.824287 -4.700000 -1.000000 310.347494 -4.700000 -0.900000 306.890700 -4.700000 -0.800000 303.453907 -4.700000 -0.700000 300.037113 -4.700000 -0.600000 296.640319 -4.700000 -0.500000 293.263526 -4.700000 -0.400000 289.906732 -4.700000 -0.300000 286.569938 -4.700000 -0.200000 283.253145 -4.700000 -0.100000 279.956351 -4.700000 -0.000000 276.679558 -4.700000 0.100000 273.422764 -4.700000 0.200000 270.185970 -4.700000 0.300000 266.969177 -4.700000 0.400000 263.772383 -4.700000 0.500000 260.595589 -4.700000 0.600000 257.438796 -4.700000 0.700000 254.302002 -4.700000 0.800000 251.185209 -4.700000 0.900000 248.088415 -4.700000 1.000000 245.011621 -4.700000 1.100000 241.954828 -4.700000 1.200000 238.918034 -4.700000 1.300000 235.901240 -4.700000 1.400000 232.904447 -4.700000 1.500000 229.927653 -4.700000 1.600000 226.970860 -4.700000 1.700000 224.034066 -4.700000 1.800000 221.117272 -4.700000 1.900000 218.220479 -4.700000 2.000000 215.343685 -4.700000 2.100000 212.486891 -4.700000 2.200000 209.650098 -4.700000 2.300000 206.833304 -4.700000 2.400000 204.036511 -4.700000 2.500000 201.259717 -4.700000 2.600000 198.502923 -4.700000 2.700000 195.766130 -4.700000 2.800000 193.049336 -4.700000 2.900000 190.352542 -4.700000 3.000000 187.675749 -4.700000 3.100000 185.018955 -4.700000 3.200000 182.382162 -4.700000 3.300000 179.765368 -4.700000 3.400000 177.168574 -4.700000 3.500000 174.591781 -4.700000 3.600000 172.034987 -4.700000 3.700000 169.498193 -4.700000 3.800000 166.981400 -4.700000 3.900000 164.484606 -4.700000 4.000000 162.007813 -4.700000 4.100000 159.551019 -4.700000 4.200000 157.114225 -4.700000 4.300000 154.697432 -4.700000 4.400000 152.300638 -4.700000 4.500000 149.923844 -4.700000 4.600000 147.567051 -4.700000 4.700000 145.230257 -4.700000 4.800000 142.913464 -4.700000 4.900000 140.616670 -4.700000 5.000000 138.339876 -4.700000 5.100000 136.083083 -4.700000 5.200000 133.846289 -4.700000 5.300000 131.629495 -4.700000 5.400000 129.432702 -4.700000 5.500000 127.255908 -4.700000 5.600000 125.099115 -4.700000 5.700000 122.962321 -4.700000 5.800000 120.845527 -4.700000 5.900000 118.748734 -4.700000 6.000000 116.671940 -4.700000 6.100000 114.615146 -4.700000 6.200000 112.578353 -4.700000 6.300000 110.561559 -4.700000 6.400000 108.564766 -4.700000 6.500000 106.587972 -4.700000 6.600000 104.631178 -4.700000 6.700000 102.694385 -4.700000 6.800000 100.777591 -4.700000 6.900000 98.880797 -4.700000 7.000000 97.004004 -4.700000 7.100000 95.147210 -4.700000 7.200000 93.310416 -4.700000 7.300000 91.493623 -4.700000 7.400000 89.696829 -4.700000 7.500000 87.920036 -4.700000 7.600000 86.163242 -4.700000 7.700000 84.426448 -4.700000 7.800000 82.709655 -4.700000 7.900000 81.012861 -4.700000 8.000000 79.336067 -4.700000 8.100000 77.679274 -4.700000 8.200000 76.042480 -4.700000 8.300000 74.425687 -4.700000 8.400000 72.828893 -4.700000 8.500000 71.252099 -4.700000 8.600000 69.695306 -4.700000 8.700000 68.158512 -4.700000 8.800000 66.641718 -4.700000 8.900000 65.144925 -4.700000 9.000000 63.668131 -4.700000 9.100000 62.211338 -4.700000 9.200000 60.774544 -4.700000 9.300000 59.357750 -4.700000 9.400000 57.960957 -4.700000 9.500000 56.584163 -4.700000 9.600000 55.227369 -4.700000 9.700000 53.890576 -4.700000 9.800000 52.573782 -4.700000 9.900000 51.276989 -4.700000 10.000000 50.000195 -4.700000 10.100000 48.743401 -4.700000 10.200000 47.506608 -4.700000 10.300000 46.289814 -4.700000 10.400000 45.093020 -4.700000 10.500000 43.916227 -4.700000 10.600000 42.759433 -4.700000 10.700000 41.622640 -4.700000 10.800000 40.505846 -4.700000 10.900000 39.409052 -4.700000 11.000000 38.332259 -4.700000 11.100000 37.275465 -4.700000 11.200000 36.238671 -4.700000 11.300000 35.221878 -4.700000 11.400000 34.225084 -4.700000 11.500000 33.248291 -4.700000 11.600000 32.291497 -4.700000 11.700000 31.354703 -4.700000 11.800000 30.437910 -4.700000 11.900000 29.541116 -4.700000 12.000000 28.664322 -4.700000 12.100000 27.807529 -4.700000 12.200000 26.970735 -4.700000 12.300000 26.153942 -4.700000 12.400000 25.357148 -4.700000 12.500000 24.580354 -4.700000 12.600000 23.823561 -4.700000 12.700000 23.086767 -4.700000 12.800000 22.369973 -4.700000 12.900000 21.673180 -4.700000 13.000000 20.996386 -4.700000 13.100000 20.339593 -4.700000 13.200000 19.702799 -4.700000 13.300000 19.086005 -4.700000 13.400000 18.489212 -4.700000 13.500000 17.912418 -4.700000 13.600000 17.355624 -4.700000 13.700000 16.818831 -4.700000 13.800000 16.302037 -4.700000 13.900000 15.805244 -4.700000 14.000000 15.328450 -4.700000 14.100000 14.871656 -4.700000 14.200000 14.434863 -4.700000 14.300000 14.018069 -4.700000 14.400000 13.621275 -4.700000 14.500000 13.244482 -4.700000 14.600000 12.887688 -4.700000 14.700000 12.550895 -4.700000 14.800000 12.234101 -4.700000 14.900000 11.937307 -4.700000 15.000000 11.660514 -4.600000 -5.000000 452.222295 -4.600000 -4.900000 448.021360 -4.600000 -4.800000 443.840426 -4.600000 -4.700000 439.679492 -4.600000 -4.600000 435.538558 -4.600000 -4.500000 431.417623 -4.600000 -4.400000 427.316689 -4.600000 -4.300000 423.235755 -4.600000 -4.200000 419.174820 -4.600000 -4.100000 415.133886 -4.600000 -4.000000 411.112952 -4.600000 -3.900000 407.112017 -4.600000 -3.800000 403.131083 -4.600000 -3.700000 399.170149 -4.600000 -3.600000 395.229214 -4.600000 -3.500000 391.308280 -4.600000 -3.400000 387.407346 -4.600000 -3.300000 383.526411 -4.600000 -3.200000 379.665477 -4.600000 -3.100000 375.824543 -4.600000 -3.000000 372.003608 -4.600000 -2.900000 368.202674 -4.600000 -2.800000 364.421740 -4.600000 -2.700000 360.660805 -4.600000 -2.600000 356.919871 -4.600000 -2.500000 353.198937 -4.600000 -2.400000 349.498003 -4.600000 -2.300000 345.817068 -4.600000 -2.200000 342.156134 -4.600000 -2.100000 338.515200 -4.600000 -2.000000 334.894265 -4.600000 -1.900000 331.293331 -4.600000 -1.800000 327.712397 -4.600000 -1.700000 324.151462 -4.600000 -1.600000 320.610528 -4.600000 -1.500000 317.089594 -4.600000 -1.400000 313.588659 -4.600000 -1.300000 310.107725 -4.600000 -1.200000 306.646791 -4.600000 -1.100000 303.205856 -4.600000 -1.000000 299.784922 -4.600000 -0.900000 296.383988 -4.600000 -0.800000 293.003053 -4.600000 -0.700000 289.642119 -4.600000 -0.600000 286.301185 -4.600000 -0.500000 282.980250 -4.600000 -0.400000 279.679316 -4.600000 -0.300000 276.398382 -4.600000 -0.200000 273.137447 -4.600000 -0.100000 269.896513 -4.600000 -0.000000 266.675579 -4.600000 0.100000 263.474645 -4.600000 0.200000 260.293710 -4.600000 0.300000 257.132776 -4.600000 0.400000 253.991842 -4.600000 0.500000 250.870907 -4.600000 0.600000 247.769973 -4.600000 0.700000 244.689039 -4.600000 0.800000 241.628104 -4.600000 0.900000 238.587170 -4.600000 1.000000 235.566236 -4.600000 1.100000 232.565301 -4.600000 1.200000 229.584367 -4.600000 1.300000 226.623433 -4.600000 1.400000 223.682498 -4.600000 1.500000 220.761564 -4.600000 1.600000 217.860630 -4.600000 1.700000 214.979695 -4.600000 1.800000 212.118761 -4.600000 1.900000 209.277827 -4.600000 2.000000 206.456892 -4.600000 2.100000 203.655958 -4.600000 2.200000 200.875024 -4.600000 2.300000 198.114090 -4.600000 2.400000 195.373155 -4.600000 2.500000 192.652221 -4.600000 2.600000 189.951287 -4.600000 2.700000 187.270352 -4.600000 2.800000 184.609418 -4.600000 2.900000 181.968484 -4.600000 3.000000 179.347549 -4.600000 3.100000 176.746615 -4.600000 3.200000 174.165681 -4.600000 3.300000 171.604746 -4.600000 3.400000 169.063812 -4.600000 3.500000 166.542878 -4.600000 3.600000 164.041943 -4.600000 3.700000 161.561009 -4.600000 3.800000 159.100075 -4.600000 3.900000 156.659140 -4.600000 4.000000 154.238206 -4.600000 4.100000 151.837272 -4.600000 4.200000 149.456337 -4.600000 4.300000 147.095403 -4.600000 4.400000 144.754469 -4.600000 4.500000 142.433534 -4.600000 4.600000 140.132600 -4.600000 4.700000 137.851666 -4.600000 4.800000 135.590732 -4.600000 4.900000 133.349797 -4.600000 5.000000 131.128863 -4.600000 5.100000 128.927929 -4.600000 5.200000 126.746994 -4.600000 5.300000 124.586060 -4.600000 5.400000 122.445126 -4.600000 5.500000 120.324191 -4.600000 5.600000 118.223257 -4.600000 5.700000 116.142323 -4.600000 5.800000 114.081388 -4.600000 5.900000 112.040454 -4.600000 6.000000 110.019520 -4.600000 6.100000 108.018585 -4.600000 6.200000 106.037651 -4.600000 6.300000 104.076717 -4.600000 6.400000 102.135782 -4.600000 6.500000 100.214848 -4.600000 6.600000 98.313914 -4.600000 6.700000 96.432979 -4.600000 6.800000 94.572045 -4.600000 6.900000 92.731111 -4.600000 7.000000 90.910177 -4.600000 7.100000 89.109242 -4.600000 7.200000 87.328308 -4.600000 7.300000 85.567374 -4.600000 7.400000 83.826439 -4.600000 7.500000 82.105505 -4.600000 7.600000 80.404571 -4.600000 7.700000 78.723636 -4.600000 7.800000 77.062702 -4.600000 7.900000 75.421768 -4.600000 8.000000 73.800833 -4.600000 8.100000 72.199899 -4.600000 8.200000 70.618965 -4.600000 8.300000 69.058030 -4.600000 8.400000 67.517096 -4.600000 8.500000 65.996162 -4.600000 8.600000 64.495227 -4.600000 8.700000 63.014293 -4.600000 8.800000 61.553359 -4.600000 8.900000 60.112424 -4.600000 9.000000 58.691490 -4.600000 9.100000 57.290556 -4.600000 9.200000 55.909621 -4.600000 9.300000 54.548687 -4.600000 9.400000 53.207753 -4.600000 9.500000 51.886819 -4.600000 9.600000 50.585884 -4.600000 9.700000 49.304950 -4.600000 9.800000 48.044016 -4.600000 9.900000 46.803081 -4.600000 10.000000 45.582147 -4.600000 10.100000 44.381213 -4.600000 10.200000 43.200278 -4.600000 10.300000 42.039344 -4.600000 10.400000 40.898410 -4.600000 10.500000 39.777475 -4.600000 10.600000 38.676541 -4.600000 10.700000 37.595607 -4.600000 10.800000 36.534672 -4.600000 10.900000 35.493738 -4.600000 11.000000 34.472804 -4.600000 11.100000 33.471869 -4.600000 11.200000 32.490935 -4.600000 11.300000 31.530001 -4.600000 11.400000 30.589066 -4.600000 11.500000 29.668132 -4.600000 11.600000 28.767198 -4.600000 11.700000 27.886264 -4.600000 11.800000 27.025329 -4.600000 11.900000 26.184395 -4.600000 12.000000 25.363461 -4.600000 12.100000 24.562526 -4.600000 12.200000 23.781592 -4.600000 12.300000 23.020658 -4.600000 12.400000 22.279723 -4.600000 12.500000 21.558789 -4.600000 12.600000 20.857855 -4.600000 12.700000 20.176920 -4.600000 12.800000 19.515986 -4.600000 12.900000 18.875052 -4.600000 13.000000 18.254117 -4.600000 13.100000 17.653183 -4.600000 13.200000 17.072249 -4.600000 13.300000 16.511314 -4.600000 13.400000 15.970380 -4.600000 13.500000 15.449446 -4.600000 13.600000 14.948511 -4.600000 13.700000 14.467577 -4.600000 13.800000 14.006643 -4.600000 13.900000 13.565708 -4.600000 14.000000 13.144774 -4.600000 14.100000 12.743840 -4.600000 14.200000 12.362906 -4.600000 14.300000 12.001971 -4.600000 14.400000 11.661037 -4.600000 14.500000 11.340103 -4.600000 14.600000 11.039168 -4.600000 14.700000 10.758234 -4.600000 14.800000 10.497300 -4.600000 14.900000 10.256365 -4.600000 15.000000 10.035431 -4.500000 -5.000000 439.699485 -4.500000 -4.900000 435.553893 -4.500000 -4.800000 431.428301 -4.500000 -4.700000 427.322710 -4.500000 -4.600000 423.237118 -4.500000 -4.500000 419.171526 -4.500000 -4.400000 415.125934 -4.500000 -4.300000 411.100343 -4.500000 -4.200000 407.094751 -4.500000 -4.100000 403.109159 -4.500000 -4.000000 399.143567 -4.500000 -3.900000 395.197976 -4.500000 -3.800000 391.272384 -4.500000 -3.700000 387.366792 -4.500000 -3.600000 383.481200 -4.500000 -3.500000 379.615609 -4.500000 -3.400000 375.770017 -4.500000 -3.300000 371.944425 -4.500000 -3.200000 368.138833 -4.500000 -3.100000 364.353242 -4.500000 -3.000000 360.587650 -4.500000 -2.900000 356.842058 -4.500000 -2.800000 353.116466 -4.500000 -2.700000 349.410875 -4.500000 -2.600000 345.725283 -4.500000 -2.500000 342.059691 -4.500000 -2.400000 338.414099 -4.500000 -2.300000 334.788508 -4.500000 -2.200000 331.182916 -4.500000 -2.100000 327.597324 -4.500000 -2.000000 324.031732 -4.500000 -1.900000 320.486141 -4.500000 -1.800000 316.960549 -4.500000 -1.700000 313.454957 -4.500000 -1.600000 309.969365 -4.500000 -1.500000 306.503774 -4.500000 -1.400000 303.058182 -4.500000 -1.300000 299.632590 -4.500000 -1.200000 296.226998 -4.500000 -1.100000 292.841407 -4.500000 -1.000000 289.475815 -4.500000 -0.900000 286.130223 -4.500000 -0.800000 282.804631 -4.500000 -0.700000 279.499040 -4.500000 -0.600000 276.213448 -4.500000 -0.500000 272.947856 -4.500000 -0.400000 269.702264 -4.500000 -0.300000 266.476673 -4.500000 -0.200000 263.271081 -4.500000 -0.100000 260.085489 -4.500000 -0.000000 256.919897 -4.500000 0.100000 253.774306 -4.500000 0.200000 250.648714 -4.500000 0.300000 247.543122 -4.500000 0.400000 244.457530 -4.500000 0.500000 241.391939 -4.500000 0.600000 238.346347 -4.500000 0.700000 235.320755 -4.500000 0.800000 232.315163 -4.500000 0.900000 229.329572 -4.500000 1.000000 226.363980 -4.500000 1.100000 223.418388 -4.500000 1.200000 220.492796 -4.500000 1.300000 217.587205 -4.500000 1.400000 214.701613 -4.500000 1.500000 211.836021 -4.500000 1.600000 208.990429 -4.500000 1.700000 206.164838 -4.500000 1.800000 203.359246 -4.500000 1.900000 200.573654 -4.500000 2.000000 197.808062 -4.500000 2.100000 195.062471 -4.500000 2.200000 192.336879 -4.500000 2.300000 189.631287 -4.500000 2.400000 186.945695 -4.500000 2.500000 184.280104 -4.500000 2.600000 181.634512 -4.500000 2.700000 179.008920 -4.500000 2.800000 176.403328 -4.500000 2.900000 173.817737 -4.500000 3.000000 171.252145 -4.500000 3.100000 168.706553 -4.500000 3.200000 166.180961 -4.500000 3.300000 163.675370 -4.500000 3.400000 161.189778 -4.500000 3.500000 158.724186 -4.500000 3.600000 156.278594 -4.500000 3.700000 153.853003 -4.500000 3.800000 151.447411 -4.500000 3.900000 149.061819 -4.500000 4.000000 146.696227 -4.500000 4.100000 144.350636 -4.500000 4.200000 142.025044 -4.500000 4.300000 139.719452 -4.500000 4.400000 137.433860 -4.500000 4.500000 135.168269 -4.500000 4.600000 132.922677 -4.500000 4.700000 130.697085 -4.500000 4.800000 128.491493 -4.500000 4.900000 126.305902 -4.500000 5.000000 124.140310 -4.500000 5.100000 121.994718 -4.500000 5.200000 119.869126 -4.500000 5.300000 117.763535 -4.500000 5.400000 115.677943 -4.500000 5.500000 113.612351 -4.500000 5.600000 111.566759 -4.500000 5.700000 109.541168 -4.500000 5.800000 107.535576 -4.500000 5.900000 105.549984 -4.500000 6.000000 103.584392 -4.500000 6.100000 101.638801 -4.500000 6.200000 99.713209 -4.500000 6.300000 97.807617 -4.500000 6.400000 95.922025 -4.500000 6.500000 94.056434 -4.500000 6.600000 92.210842 -4.500000 6.700000 90.385250 -4.500000 6.800000 88.579658 -4.500000 6.900000 86.794067 -4.500000 7.000000 85.028475 -4.500000 7.100000 83.282883 -4.500000 7.200000 81.557291 -4.500000 7.300000 79.851700 -4.500000 7.400000 78.166108 -4.500000 7.500000 76.500516 -4.500000 7.600000 74.854924 -4.500000 7.700000 73.229333 -4.500000 7.800000 71.623741 -4.500000 7.900000 70.038149 -4.500000 8.000000 68.472557 -4.500000 8.100000 66.926966 -4.500000 8.200000 65.401374 -4.500000 8.300000 63.895782 -4.500000 8.400000 62.410190 -4.500000 8.500000 60.944599 -4.500000 8.600000 59.499007 -4.500000 8.700000 58.073415 -4.500000 8.800000 56.667823 -4.500000 8.900000 55.282232 -4.500000 9.000000 53.916640 -4.500000 9.100000 52.571048 -4.500000 9.200000 51.245456 -4.500000 9.300000 49.939865 -4.500000 9.400000 48.654273 -4.500000 9.500000 47.388681 -4.500000 9.600000 46.143089 -4.500000 9.700000 44.917498 -4.500000 9.800000 43.711906 -4.500000 9.900000 42.526314 -4.500000 10.000000 41.360722 -4.500000 10.100000 40.215131 -4.500000 10.200000 39.089539 -4.500000 10.300000 37.983947 -4.500000 10.400000 36.898355 -4.500000 10.500000 35.832764 -4.500000 10.600000 34.787172 -4.500000 10.700000 33.761580 -4.500000 10.800000 32.755988 -4.500000 10.900000 31.770397 -4.500000 11.000000 30.804805 -4.500000 11.100000 29.859213 -4.500000 11.200000 28.933621 -4.500000 11.300000 28.028030 -4.500000 11.400000 27.142438 -4.500000 11.500000 26.276846 -4.500000 11.600000 25.431254 -4.500000 11.700000 24.605663 -4.500000 11.800000 23.800071 -4.500000 11.900000 23.014479 -4.500000 12.000000 22.248887 -4.500000 12.100000 21.503296 -4.500000 12.200000 20.777704 -4.500000 12.300000 20.072112 -4.500000 12.400000 19.386520 -4.500000 12.500000 18.720929 -4.500000 12.600000 18.075337 -4.500000 12.700000 17.449745 -4.500000 12.800000 16.844153 -4.500000 12.900000 16.258562 -4.500000 13.000000 15.692970 -4.500000 13.100000 15.147378 -4.500000 13.200000 14.621786 -4.500000 13.300000 14.116195 -4.500000 13.400000 13.630603 -4.500000 13.500000 13.165011 -4.500000 13.600000 12.719419 -4.500000 13.700000 12.293828 -4.500000 13.800000 11.888236 -4.500000 13.900000 11.502644 -4.500000 14.000000 11.137052 -4.500000 14.100000 10.791461 -4.500000 14.200000 10.465869 -4.500000 14.300000 10.160277 -4.500000 14.400000 9.874685 -4.500000 14.500000 9.609094 -4.500000 14.600000 9.363502 -4.500000 14.700000 9.137910 -4.500000 14.800000 8.932318 -4.500000 14.900000 8.746727 -4.500000 15.000000 8.581135 -4.400000 -5.000000 427.455983 -4.400000 -4.900000 423.365217 -4.400000 -4.800000 419.294451 -4.400000 -4.700000 415.243685 -4.400000 -4.600000 411.212919 -4.400000 -4.500000 407.202154 -4.400000 -4.400000 403.211388 -4.400000 -4.300000 399.240622 -4.400000 -4.200000 395.289856 -4.400000 -4.100000 391.359090 -4.400000 -4.000000 387.448324 -4.400000 -3.900000 383.557558 -4.400000 -3.800000 379.686792 -4.400000 -3.700000 375.836026 -4.400000 -3.600000 372.005260 -4.400000 -3.500000 368.194494 -4.400000 -3.400000 364.403728 -4.400000 -3.300000 360.632963 -4.400000 -3.200000 356.882197 -4.400000 -3.100000 353.151431 -4.400000 -3.000000 349.440665 -4.400000 -2.900000 345.749899 -4.400000 -2.800000 342.079133 -4.400000 -2.700000 338.428367 -4.400000 -2.600000 334.797601 -4.400000 -2.500000 331.186835 -4.400000 -2.400000 327.596069 -4.400000 -2.300000 324.025303 -4.400000 -2.200000 320.474537 -4.400000 -2.100000 316.943772 -4.400000 -2.000000 313.433006 -4.400000 -1.900000 309.942240 -4.400000 -1.800000 306.471474 -4.400000 -1.700000 303.020708 -4.400000 -1.600000 299.589942 -4.400000 -1.500000 296.179176 -4.400000 -1.400000 292.788410 -4.400000 -1.300000 289.417644 -4.400000 -1.200000 286.066878 -4.400000 -1.100000 282.736112 -4.400000 -1.000000 279.425346 -4.400000 -0.900000 276.134580 -4.400000 -0.800000 272.863815 -4.400000 -0.700000 269.613049 -4.400000 -0.600000 266.382283 -4.400000 -0.500000 263.171517 -4.400000 -0.400000 259.980751 -4.400000 -0.300000 256.809985 -4.400000 -0.200000 253.659219 -4.400000 -0.100000 250.528453 -4.400000 -0.000000 247.417687 -4.400000 0.100000 244.326921 -4.400000 0.200000 241.256155 -4.400000 0.300000 238.205389 -4.400000 0.400000 235.174624 -4.400000 0.500000 232.163858 -4.400000 0.600000 229.173092 -4.400000 0.700000 226.202326 -4.400000 0.800000 223.251560 -4.400000 0.900000 220.320794 -4.400000 1.000000 217.410028 -4.400000 1.100000 214.519262 -4.400000 1.200000 211.648496 -4.400000 1.300000 208.797730 -4.400000 1.400000 205.966964 -4.400000 1.500000 203.156198 -4.400000 1.600000 200.365433 -4.400000 1.700000 197.594667 -4.400000 1.800000 194.843901 -4.400000 1.900000 192.113135 -4.400000 2.000000 189.402369 -4.400000 2.100000 186.711603 -4.400000 2.200000 184.040837 -4.400000 2.300000 181.390071 -4.400000 2.400000 178.759305 -4.400000 2.500000 176.148539 -4.400000 2.600000 173.557773 -4.400000 2.700000 170.987007 -4.400000 2.800000 168.436241 -4.400000 2.900000 165.905476 -4.400000 3.000000 163.394710 -4.400000 3.100000 160.903944 -4.400000 3.200000 158.433178 -4.400000 3.300000 155.982412 -4.400000 3.400000 153.551646 -4.400000 3.500000 151.140880 -4.400000 3.600000 148.750114 -4.400000 3.700000 146.379348 -4.400000 3.800000 144.028582 -4.400000 3.900000 141.697816 -4.400000 4.000000 139.387050 -4.400000 4.100000 137.096285 -4.400000 4.200000 134.825519 -4.400000 4.300000 132.574753 -4.400000 4.400000 130.343987 -4.400000 4.500000 128.133221 -4.400000 4.600000 125.942455 -4.400000 4.700000 123.771689 -4.400000 4.800000 121.620923 -4.400000 4.900000 119.490157 -4.400000 5.000000 117.379391 -4.400000 5.100000 115.288625 -4.400000 5.200000 113.217859 -4.400000 5.300000 111.167094 -4.400000 5.400000 109.136328 -4.400000 5.500000 107.125562 -4.400000 5.600000 105.134796 -4.400000 5.700000 103.164030 -4.400000 5.800000 101.213264 -4.400000 5.900000 99.282498 -4.400000 6.000000 97.371732 -4.400000 6.100000 95.480966 -4.400000 6.200000 93.610200 -4.400000 6.300000 91.759434 -4.400000 6.400000 89.928668 -4.400000 6.500000 88.117903 -4.400000 6.600000 86.327137 -4.400000 6.700000 84.556371 -4.400000 6.800000 82.805605 -4.400000 6.900000 81.074839 -4.400000 7.000000 79.364073 -4.400000 7.100000 77.673307 -4.400000 7.200000 76.002541 -4.400000 7.300000 74.351775 -4.400000 7.400000 72.721009 -4.400000 7.500000 71.110243 -4.400000 7.600000 69.519477 -4.400000 7.700000 67.948711 -4.400000 7.800000 66.397946 -4.400000 7.900000 64.867180 -4.400000 8.000000 63.356414 -4.400000 8.100000 61.865648 -4.400000 8.200000 60.394882 -4.400000 8.300000 58.944116 -4.400000 8.400000 57.513350 -4.400000 8.500000 56.102584 -4.400000 8.600000 54.711818 -4.400000 8.700000 53.341052 -4.400000 8.800000 51.990286 -4.400000 8.900000 50.659520 -4.400000 9.000000 49.348755 -4.400000 9.100000 48.057989 -4.400000 9.200000 46.787223 -4.400000 9.300000 45.536457 -4.400000 9.400000 44.305691 -4.400000 9.500000 43.094925 -4.400000 9.600000 41.904159 -4.400000 9.700000 40.733393 -4.400000 9.800000 39.582627 -4.400000 9.900000 38.451861 -4.400000 10.000000 37.341095 -4.400000 10.100000 36.250329 -4.400000 10.200000 35.179564 -4.400000 10.300000 34.128798 -4.400000 10.400000 33.098032 -4.400000 10.500000 32.087266 -4.400000 10.600000 31.096500 -4.400000 10.700000 30.125734 -4.400000 10.800000 29.174968 -4.400000 10.900000 28.244202 -4.400000 11.000000 27.333436 -4.400000 11.100000 26.442670 -4.400000 11.200000 25.571904 -4.400000 11.300000 24.721138 -4.400000 11.400000 23.890372 -4.400000 11.500000 23.079607 -4.400000 11.600000 22.288841 -4.400000 11.700000 21.518075 -4.400000 11.800000 20.767309 -4.400000 11.900000 20.036543 -4.400000 12.000000 19.325777 -4.400000 12.100000 18.635011 -4.400000 12.200000 17.964245 -4.400000 12.300000 17.313479 -4.400000 12.400000 16.682713 -4.400000 12.500000 16.071947 -4.400000 12.600000 15.481181 -4.400000 12.700000 14.910416 -4.400000 12.800000 14.359650 -4.400000 12.900000 13.828884 -4.400000 13.000000 13.318118 -4.400000 13.100000 12.827352 -4.400000 13.200000 12.356586 -4.400000 13.300000 11.905820 -4.400000 13.400000 11.475054 -4.400000 13.500000 11.064288 -4.400000 13.600000 10.673522 -4.400000 13.700000 10.302756 -4.400000 13.800000 9.951990 -4.400000 13.900000 9.621225 -4.400000 14.000000 9.310459 -4.400000 14.100000 9.019693 -4.400000 14.200000 8.748927 -4.400000 14.300000 8.498161 -4.400000 14.400000 8.267395 -4.400000 14.500000 8.056629 -4.400000 14.600000 7.865863 -4.400000 14.700000 7.695097 -4.400000 14.800000 7.544331 -4.400000 14.900000 7.413565 -4.400000 15.000000 7.302799 -4.300000 -5.000000 415.496802 -4.300000 -4.900000 411.460345 -4.300000 -4.800000 407.443889 -4.300000 -4.700000 403.447432 -4.300000 -4.600000 399.470975 -4.300000 -4.500000 395.514518 -4.300000 -4.400000 391.578061 -4.300000 -4.300000 387.661604 -4.300000 -4.200000 383.765148 -4.300000 -4.100000 379.888691 -4.300000 -4.000000 376.032234 -4.300000 -3.900000 372.195777 -4.300000 -3.800000 368.379320 -4.300000 -3.700000 364.582863 -4.300000 -3.600000 360.806407 -4.300000 -3.500000 357.049950 -4.300000 -3.400000 353.313493 -4.300000 -3.300000 349.597036 -4.300000 -3.200000 345.900579 -4.300000 -3.100000 342.224123 -4.300000 -3.000000 338.567666 -4.300000 -2.900000 334.931209 -4.300000 -2.800000 331.314752 -4.300000 -2.700000 327.718295 -4.300000 -2.600000 324.141838 -4.300000 -2.500000 320.585382 -4.300000 -2.400000 317.048925 -4.300000 -2.300000 313.532468 -4.300000 -2.200000 310.036011 -4.300000 -2.100000 306.559554 -4.300000 -2.000000 303.103097 -4.300000 -1.900000 299.666641 -4.300000 -1.800000 296.250184 -4.300000 -1.700000 292.853727 -4.300000 -1.600000 289.477270 -4.300000 -1.500000 286.120813 -4.300000 -1.400000 282.784356 -4.300000 -1.300000 279.467900 -4.300000 -1.200000 276.171443 -4.300000 -1.100000 272.894986 -4.300000 -1.000000 269.638529 -4.300000 -0.900000 266.402072 -4.300000 -0.800000 263.185616 -4.300000 -0.700000 259.989159 -4.300000 -0.600000 256.812702 -4.300000 -0.500000 253.656245 -4.300000 -0.400000 250.519788 -4.300000 -0.300000 247.403331 -4.300000 -0.200000 244.306875 -4.300000 -0.100000 241.230418 -4.300000 -0.000000 238.173961 -4.300000 0.100000 235.137504 -4.300000 0.200000 232.121047 -4.300000 0.300000 229.124590 -4.300000 0.400000 226.148134 -4.300000 0.500000 223.191677 -4.300000 0.600000 220.255220 -4.300000 0.700000 217.338763 -4.300000 0.800000 214.442306 -4.300000 0.900000 211.565850 -4.300000 1.000000 208.709393 -4.300000 1.100000 205.872936 -4.300000 1.200000 203.056479 -4.300000 1.300000 200.260022 -4.300000 1.400000 197.483565 -4.300000 1.500000 194.727109 -4.300000 1.600000 191.990652 -4.300000 1.700000 189.274195 -4.300000 1.800000 186.577738 -4.300000 1.900000 183.901281 -4.300000 2.000000 181.244824 -4.300000 2.100000 178.608368 -4.300000 2.200000 175.991911 -4.300000 2.300000 173.395454 -4.300000 2.400000 170.818997 -4.300000 2.500000 168.262540 -4.300000 2.600000 165.726083 -4.300000 2.700000 163.209627 -4.300000 2.800000 160.713170 -4.300000 2.900000 158.236713 -4.300000 3.000000 155.780256 -4.300000 3.100000 153.343799 -4.300000 3.200000 150.927343 -4.300000 3.300000 148.530886 -4.300000 3.400000 146.154429 -4.300000 3.500000 143.797972 -4.300000 3.600000 141.461515 -4.300000 3.700000 139.145058 -4.300000 3.800000 136.848602 -4.300000 3.900000 134.572145 -4.300000 4.000000 132.315688 -4.300000 4.100000 130.079231 -4.300000 4.200000 127.862774 -4.300000 4.300000 125.666317 -4.300000 4.400000 123.489861 -4.300000 4.500000 121.333404 -4.300000 4.600000 119.196947 -4.300000 4.700000 117.080490 -4.300000 4.800000 114.984033 -4.300000 4.900000 112.907576 -4.300000 5.000000 110.851120 -4.300000 5.100000 108.814663 -4.300000 5.200000 106.798206 -4.300000 5.300000 104.801749 -4.300000 5.400000 102.825292 -4.300000 5.500000 100.868836 -4.300000 5.600000 98.932379 -4.300000 5.700000 97.015922 -4.300000 5.800000 95.119465 -4.300000 5.900000 93.243008 -4.300000 6.000000 91.386551 -4.300000 6.100000 89.550095 -4.300000 6.200000 87.733638 -4.300000 6.300000 85.937181 -4.300000 6.400000 84.160724 -4.300000 6.500000 82.404267 -4.300000 6.600000 80.667810 -4.300000 6.700000 78.951354 -4.300000 6.800000 77.254897 -4.300000 6.900000 75.578440 -4.300000 7.000000 73.921983 -4.300000 7.100000 72.285526 -4.300000 7.200000 70.669069 -4.300000 7.300000 69.072613 -4.300000 7.400000 67.496156 -4.300000 7.500000 65.939699 -4.300000 7.600000 64.403242 -4.300000 7.700000 62.886785 -4.300000 7.800000 61.390329 -4.300000 7.900000 59.913872 -4.300000 8.000000 58.457415 -4.300000 8.100000 57.020958 -4.300000 8.200000 55.604501 -4.300000 8.300000 54.208044 -4.300000 8.400000 52.831588 -4.300000 8.500000 51.475131 -4.300000 8.600000 50.138674 -4.300000 8.700000 48.822217 -4.300000 8.800000 47.525760 -4.300000 8.900000 46.249303 -4.300000 9.000000 44.992847 -4.300000 9.100000 43.756390 -4.300000 9.200000 42.539933 -4.300000 9.300000 41.343476 -4.300000 9.400000 40.167019 -4.300000 9.500000 39.010563 -4.300000 9.600000 37.874106 -4.300000 9.700000 36.757649 -4.300000 9.800000 35.661192 -4.300000 9.900000 34.584735 -4.300000 10.000000 33.528278 -4.300000 10.100000 32.491822 -4.300000 10.200000 31.475365 -4.300000 10.300000 30.478908 -4.300000 10.400000 29.502451 -4.300000 10.500000 28.545994 -4.300000 10.600000 27.609537 -4.300000 10.700000 26.693081 -4.300000 10.800000 25.796624 -4.300000 10.900000 24.920167 -4.300000 11.000000 24.063710 -4.300000 11.100000 23.227253 -4.300000 11.200000 22.410796 -4.300000 11.300000 21.614340 -4.300000 11.400000 20.837883 -4.300000 11.500000 20.081426 -4.300000 11.600000 19.344969 -4.300000 11.700000 18.628512 -4.300000 11.800000 17.932056 -4.300000 11.900000 17.255599 -4.300000 12.000000 16.599142 -4.300000 12.100000 15.962685 -4.300000 12.200000 15.346228 -4.300000 12.300000 14.749771 -4.300000 12.400000 14.173315 -4.300000 12.500000 13.616858 -4.300000 12.600000 13.080401 -4.300000 12.700000 12.563944 -4.300000 12.800000 12.067487 -4.300000 12.900000 11.591030 -4.300000 13.000000 11.134574 -4.300000 13.100000 10.698117 -4.300000 13.200000 10.281660 -4.300000 13.300000 9.885203 -4.300000 13.400000 9.508746 -4.300000 13.500000 9.152289 -4.300000 13.600000 8.815833 -4.300000 13.700000 8.499376 -4.300000 13.800000 8.202919 -4.300000 13.900000 7.926462 -4.300000 14.000000 7.670005 -4.300000 14.100000 7.433549 -4.300000 14.200000 7.217092 -4.300000 14.300000 7.020635 -4.300000 14.400000 6.844178 -4.300000 14.500000 6.687721 -4.300000 14.600000 6.551264 -4.300000 14.700000 6.434808 -4.300000 14.800000 6.338351 -4.300000 14.900000 6.261894 -4.300000 15.000000 6.205437 -4.200000 -5.000000 403.826700 -4.200000 -4.900000 399.844035 -4.200000 -4.800000 395.881371 -4.200000 -4.700000 391.938706 -4.200000 -4.600000 388.016042 -4.200000 -4.500000 384.113377 -4.200000 -4.400000 380.230713 -4.200000 -4.300000 376.368048 -4.200000 -4.200000 372.525384 -4.200000 -4.100000 368.702719 -4.200000 -4.000000 364.900055 -4.200000 -3.900000 361.117390 -4.200000 -3.800000 357.354726 -4.200000 -3.700000 353.612062 -4.200000 -3.600000 349.889397 -4.200000 -3.500000 346.186733 -4.200000 -3.400000 342.504068 -4.200000 -3.300000 338.841404 -4.200000 -3.200000 335.198739 -4.200000 -3.100000 331.576075 -4.200000 -3.000000 327.973410 -4.200000 -2.900000 324.390746 -4.200000 -2.800000 320.828081 -4.200000 -2.700000 317.285417 -4.200000 -2.600000 313.762752 -4.200000 -2.500000 310.260088 -4.200000 -2.400000 306.777423 -4.200000 -2.300000 303.314759 -4.200000 -2.200000 299.872094 -4.200000 -2.100000 296.449430 -4.200000 -2.000000 293.046766 -4.200000 -1.900000 289.664101 -4.200000 -1.800000 286.301437 -4.200000 -1.700000 282.958772 -4.200000 -1.600000 279.636108 -4.200000 -1.500000 276.333443 -4.200000 -1.400000 273.050779 -4.200000 -1.300000 269.788114 -4.200000 -1.200000 266.545450 -4.200000 -1.100000 263.322785 -4.200000 -1.000000 260.120121 -4.200000 -0.900000 256.937456 -4.200000 -0.800000 253.774792 -4.200000 -0.700000 250.632127 -4.200000 -0.600000 247.509463 -4.200000 -0.500000 244.406799 -4.200000 -0.400000 241.324134 -4.200000 -0.300000 238.261470 -4.200000 -0.200000 235.218805 -4.200000 -0.100000 232.196141 -4.200000 -0.000000 229.193476 -4.200000 0.100000 226.210812 -4.200000 0.200000 223.248147 -4.200000 0.300000 220.305483 -4.200000 0.400000 217.382818 -4.200000 0.500000 214.480154 -4.200000 0.600000 211.597489 -4.200000 0.700000 208.734825 -4.200000 0.800000 205.892160 -4.200000 0.900000 203.069496 -4.200000 1.000000 200.266831 -4.200000 1.100000 197.484167 -4.200000 1.200000 194.721503 -4.200000 1.300000 191.978838 -4.200000 1.400000 189.256174 -4.200000 1.500000 186.553509 -4.200000 1.600000 183.870845 -4.200000 1.700000 181.208180 -4.200000 1.800000 178.565516 -4.200000 1.900000 175.942851 -4.200000 2.000000 173.340187 -4.200000 2.100000 170.757522 -4.200000 2.200000 168.194858 -4.200000 2.300000 165.652193 -4.200000 2.400000 163.129529 -4.200000 2.500000 160.626864 -4.200000 2.600000 158.144200 -4.200000 2.700000 155.681535 -4.200000 2.800000 153.238871 -4.200000 2.900000 150.816207 -4.200000 3.000000 148.413542 -4.200000 3.100000 146.030878 -4.200000 3.200000 143.668213 -4.200000 3.300000 141.325549 -4.200000 3.400000 139.002884 -4.200000 3.500000 136.700220 -4.200000 3.600000 134.417555 -4.200000 3.700000 132.154891 -4.200000 3.800000 129.912226 -4.200000 3.900000 127.689562 -4.200000 4.000000 125.486897 -4.200000 4.100000 123.304233 -4.200000 4.200000 121.141568 -4.200000 4.300000 118.998904 -4.200000 4.400000 116.876239 -4.200000 4.500000 114.773575 -4.200000 4.600000 112.690911 -4.200000 4.700000 110.628246 -4.200000 4.800000 108.585582 -4.200000 4.900000 106.562917 -4.200000 5.000000 104.560253 -4.200000 5.100000 102.577588 -4.200000 5.200000 100.614924 -4.200000 5.300000 98.672259 -4.200000 5.400000 96.749595 -4.200000 5.500000 94.846930 -4.200000 5.600000 92.964266 -4.200000 5.700000 91.101601 -4.200000 5.800000 89.258937 -4.200000 5.900000 87.436272 -4.200000 6.000000 85.633608 -4.200000 6.100000 83.850943 -4.200000 6.200000 82.088279 -4.200000 6.300000 80.345615 -4.200000 6.400000 78.622950 -4.200000 6.500000 76.920286 -4.200000 6.600000 75.237621 -4.200000 6.700000 73.574957 -4.200000 6.800000 71.932292 -4.200000 6.900000 70.309628 -4.200000 7.000000 68.706963 -4.200000 7.100000 67.124299 -4.200000 7.200000 65.561634 -4.200000 7.300000 64.018970 -4.200000 7.400000 62.496305 -4.200000 7.500000 60.993641 -4.200000 7.600000 59.510976 -4.200000 7.700000 58.048312 -4.200000 7.800000 56.605647 -4.200000 7.900000 55.182983 -4.200000 8.000000 53.780319 -4.200000 8.100000 52.397654 -4.200000 8.200000 51.034990 -4.200000 8.300000 49.692325 -4.200000 8.400000 48.369661 -4.200000 8.500000 47.066996 -4.200000 8.600000 45.784332 -4.200000 8.700000 44.521667 -4.200000 8.800000 43.279003 -4.200000 8.900000 42.056338 -4.200000 9.000000 40.853674 -4.200000 9.100000 39.671009 -4.200000 9.200000 38.508345 -4.200000 9.300000 37.365680 -4.200000 9.400000 36.243016 -4.200000 9.500000 35.140351 -4.200000 9.600000 34.057687 -4.200000 9.700000 32.995023 -4.200000 9.800000 31.952358 -4.200000 9.900000 30.929694 -4.200000 10.000000 29.927029 -4.200000 10.100000 28.944365 -4.200000 10.200000 27.981700 -4.200000 10.300000 27.039036 -4.200000 10.400000 26.116371 -4.200000 10.500000 25.213707 -4.200000 10.600000 24.331042 -4.200000 10.700000 23.468378 -4.200000 10.800000 22.625713 -4.200000 10.900000 21.803049 -4.200000 11.000000 21.000384 -4.200000 11.100000 20.217720 -4.200000 11.200000 19.455055 -4.200000 11.300000 18.712391 -4.200000 11.400000 17.989727 -4.200000 11.500000 17.287062 -4.200000 11.600000 16.604398 -4.200000 11.700000 15.941733 -4.200000 11.800000 15.299069 -4.200000 11.900000 14.676404 -4.200000 12.000000 14.073740 -4.200000 12.100000 13.491075 -4.200000 12.200000 12.928411 -4.200000 12.300000 12.385746 -4.200000 12.400000 11.863082 -4.200000 12.500000 11.360417 -4.200000 12.600000 10.877753 -4.200000 12.700000 10.415088 -4.200000 12.800000 9.972424 -4.200000 12.900000 9.549759 -4.200000 13.000000 9.147095 -4.200000 13.100000 8.764431 -4.200000 13.200000 8.401766 -4.200000 13.300000 8.059102 -4.200000 13.400000 7.736437 -4.200000 13.500000 7.433773 -4.200000 13.600000 7.151108 -4.200000 13.700000 6.888444 -4.200000 13.800000 6.645779 -4.200000 13.900000 6.423115 -4.200000 14.000000 6.220450 -4.200000 14.100000 6.037786 -4.200000 14.200000 5.875121 -4.200000 14.300000 5.732457 -4.200000 14.400000 5.609792 -4.200000 14.500000 5.507128 -4.200000 14.600000 5.424464 -4.200000 14.700000 5.361799 -4.200000 14.800000 5.319135 -4.200000 14.900000 5.296470 -4.200000 15.000000 5.293806 -4.100000 -5.000000 392.450089 -4.100000 -4.900000 388.520700 -4.100000 -4.800000 384.611311 -4.100000 -4.700000 380.721923 -4.100000 -4.600000 376.852534 -4.100000 -4.500000 373.003145 -4.100000 -4.400000 369.173756 -4.100000 -4.300000 365.364367 -4.100000 -4.200000 361.574978 -4.100000 -4.100000 357.805589 -4.100000 -4.000000 354.056201 -4.100000 -3.900000 350.326812 -4.100000 -3.800000 346.617423 -4.100000 -3.700000 342.928034 -4.100000 -3.600000 339.258645 -4.100000 -3.500000 335.609256 -4.100000 -3.400000 331.979867 -4.100000 -3.300000 328.370479 -4.100000 -3.200000 324.781090 -4.100000 -3.100000 321.211701 -4.100000 -3.000000 317.662312 -4.100000 -2.900000 314.132923 -4.100000 -2.800000 310.623534 -4.100000 -2.700000 307.134145 -4.100000 -2.600000 303.664757 -4.100000 -2.500000 300.215368 -4.100000 -2.400000 296.785979 -4.100000 -2.300000 293.376590 -4.100000 -2.200000 289.987201 -4.100000 -2.100000 286.617812 -4.100000 -2.000000 283.268424 -4.100000 -1.900000 279.939035 -4.100000 -1.800000 276.629646 -4.100000 -1.700000 273.340257 -4.100000 -1.600000 270.070868 -4.100000 -1.500000 266.821479 -4.100000 -1.400000 263.592090 -4.100000 -1.300000 260.382702 -4.100000 -1.200000 257.193313 -4.100000 -1.100000 254.023924 -4.100000 -1.000000 250.874535 -4.100000 -0.900000 247.745146 -4.100000 -0.800000 244.635757 -4.100000 -0.700000 241.546368 -4.100000 -0.600000 238.476980 -4.100000 -0.500000 235.427591 -4.100000 -0.400000 232.398202 -4.100000 -0.300000 229.388813 -4.100000 -0.200000 226.399424 -4.100000 -0.100000 223.430035 -4.100000 -0.000000 220.480646 -4.100000 0.100000 217.551258 -4.100000 0.200000 214.641869 -4.100000 0.300000 211.752480 -4.100000 0.400000 208.883091 -4.100000 0.500000 206.033702 -4.100000 0.600000 203.204313 -4.100000 0.700000 200.394924 -4.100000 0.800000 197.605536 -4.100000 0.900000 194.836147 -4.100000 1.000000 192.086758 -4.100000 1.100000 189.357369 -4.100000 1.200000 186.647980 -4.100000 1.300000 183.958591 -4.100000 1.400000 181.289203 -4.100000 1.500000 178.639814 -4.100000 1.600000 176.010425 -4.100000 1.700000 173.401036 -4.100000 1.800000 170.811647 -4.100000 1.900000 168.242258 -4.100000 2.000000 165.692869 -4.100000 2.100000 163.163481 -4.100000 2.200000 160.654092 -4.100000 2.300000 158.164703 -4.100000 2.400000 155.695314 -4.100000 2.500000 153.245925 -4.100000 2.600000 150.816536 -4.100000 2.700000 148.407147 -4.100000 2.800000 146.017759 -4.100000 2.900000 143.648370 -4.100000 3.000000 141.298981 -4.100000 3.100000 138.969592 -4.100000 3.200000 136.660203 -4.100000 3.300000 134.370814 -4.100000 3.400000 132.101425 -4.100000 3.500000 129.852037 -4.100000 3.600000 127.622648 -4.100000 3.700000 125.413259 -4.100000 3.800000 123.223870 -4.100000 3.900000 121.054481 -4.100000 4.000000 118.905092 -4.100000 4.100000 116.775703 -4.100000 4.200000 114.666315 -4.100000 4.300000 112.576926 -4.100000 4.400000 110.507537 -4.100000 4.500000 108.458148 -4.100000 4.600000 106.428759 -4.100000 4.700000 104.419370 -4.100000 4.800000 102.429982 -4.100000 4.900000 100.460593 -4.100000 5.000000 98.511204 -4.100000 5.100000 96.581815 -4.100000 5.200000 94.672426 -4.100000 5.300000 92.783037 -4.100000 5.400000 90.913648 -4.100000 5.500000 89.064260 -4.100000 5.600000 87.234871 -4.100000 5.700000 85.425482 -4.100000 5.800000 83.636093 -4.100000 5.900000 81.866704 -4.100000 6.000000 80.117315 -4.100000 6.100000 78.387926 -4.100000 6.200000 76.678538 -4.100000 6.300000 74.989149 -4.100000 6.400000 73.319760 -4.100000 6.500000 71.670371 -4.100000 6.600000 70.040982 -4.100000 6.700000 68.431593 -4.100000 6.800000 66.842204 -4.100000 6.900000 65.272816 -4.100000 7.000000 63.723427 -4.100000 7.100000 62.194038 -4.100000 7.200000 60.684649 -4.100000 7.300000 59.195260 -4.100000 7.400000 57.725871 -4.100000 7.500000 56.276482 -4.100000 7.600000 54.847094 -4.100000 7.700000 53.437705 -4.100000 7.800000 52.048316 -4.100000 7.900000 50.678927 -4.100000 8.000000 49.329538 -4.100000 8.100000 48.000149 -4.100000 8.200000 46.690761 -4.100000 8.300000 45.401372 -4.100000 8.400000 44.131983 -4.100000 8.500000 42.882594 -4.100000 8.600000 41.653205 -4.100000 8.700000 40.443816 -4.100000 8.800000 39.254427 -4.100000 8.900000 38.085039 -4.100000 9.000000 36.935650 -4.100000 9.100000 35.806261 -4.100000 9.200000 34.696872 -4.100000 9.300000 33.607483 -4.100000 9.400000 32.538094 -4.100000 9.500000 31.488705 -4.100000 9.600000 30.459317 -4.100000 9.700000 29.449928 -4.100000 9.800000 28.460539 -4.100000 9.900000 27.491150 -4.100000 10.000000 26.541761 -4.100000 10.100000 25.612372 -4.100000 10.200000 24.702983 -4.100000 10.300000 23.813595 -4.100000 10.400000 22.944206 -4.100000 10.500000 22.094817 -4.100000 10.600000 21.265428 -4.100000 10.700000 20.456039 -4.100000 10.800000 19.666650 -4.100000 10.900000 18.897261 -4.100000 11.000000 18.147873 -4.100000 11.100000 17.418484 -4.100000 11.200000 16.709095 -4.100000 11.300000 16.019706 -4.100000 11.400000 15.350317 -4.100000 11.500000 14.700928 -4.100000 11.600000 14.071539 -4.100000 11.700000 13.462151 -4.100000 11.800000 12.872762 -4.100000 11.900000 12.303373 -4.100000 12.000000 11.753984 -4.100000 12.100000 11.224595 -4.100000 12.200000 10.715206 -4.100000 12.300000 10.225818 -4.100000 12.400000 9.756429 -4.100000 12.500000 9.307040 -4.100000 12.600000 8.877651 -4.100000 12.700000 8.468262 -4.100000 12.800000 8.078873 -4.100000 12.900000 7.709484 -4.100000 13.000000 7.360096 -4.100000 13.100000 7.030707 -4.100000 13.200000 6.721318 -4.100000 13.300000 6.431929 -4.100000 13.400000 6.162540 -4.100000 13.500000 5.913151 -4.100000 13.600000 5.683762 -4.100000 13.700000 5.474374 -4.100000 13.800000 5.284985 -4.100000 13.900000 5.115596 -4.100000 14.000000 4.966207 -4.100000 14.100000 4.836818 -4.100000 14.200000 4.727429 -4.100000 14.300000 4.638040 -4.100000 14.400000 4.568652 -4.100000 14.500000 4.519263 -4.100000 14.600000 4.489874 -4.100000 14.700000 4.480485 -4.100000 14.800000 4.491096 -4.100000 14.900000 4.521707 -4.100000 15.000000 4.572318 -4.000000 -5.000000 381.370954 -4.000000 -4.900000 377.494324 -4.000000 -4.800000 373.637694 -4.000000 -4.700000 369.801064 -4.000000 -4.600000 365.984434 -4.000000 -4.500000 362.187804 -4.000000 -4.400000 358.411174 -4.000000 -4.300000 354.654544 -4.000000 -4.200000 350.917914 -4.000000 -4.100000 347.201284 -4.000000 -4.000000 343.504654 -4.000000 -3.900000 339.828024 -4.000000 -3.800000 336.171395 -4.000000 -3.700000 332.534765 -4.000000 -3.600000 328.918135 -4.000000 -3.500000 325.321505 -4.000000 -3.400000 321.744875 -4.000000 -3.300000 318.188245 -4.000000 -3.200000 314.651615 -4.000000 -3.100000 311.134985 -4.000000 -3.000000 307.638355 -4.000000 -2.900000 304.161725 -4.000000 -2.800000 300.705095 -4.000000 -2.700000 297.268465 -4.000000 -2.600000 293.851835 -4.000000 -2.500000 290.455205 -4.000000 -2.400000 287.078575 -4.000000 -2.300000 283.721945 -4.000000 -2.200000 280.385315 -4.000000 -2.100000 277.068685 -4.000000 -2.000000 273.772055 -4.000000 -1.900000 270.495425 -4.000000 -1.800000 267.238795 -4.000000 -1.700000 264.002165 -4.000000 -1.600000 260.785535 -4.000000 -1.500000 257.588905 -4.000000 -1.400000 254.412275 -4.000000 -1.300000 251.255645 -4.000000 -1.200000 248.119015 -4.000000 -1.100000 245.002385 -4.000000 -1.000000 241.905755 -4.000000 -0.900000 238.829125 -4.000000 -0.800000 235.772495 -4.000000 -0.700000 232.735865 -4.000000 -0.600000 229.719235 -4.000000 -0.500000 226.722605 -4.000000 -0.400000 223.745975 -4.000000 -0.300000 220.789345 -4.000000 -0.200000 217.852715 -4.000000 -0.100000 214.936085 -4.000000 -0.000000 212.039455 -4.000000 0.100000 209.162826 -4.000000 0.200000 206.306196 -4.000000 0.300000 203.469566 -4.000000 0.400000 200.652936 -4.000000 0.500000 197.856306 -4.000000 0.600000 195.079676 -4.000000 0.700000 192.323046 -4.000000 0.800000 189.586416 -4.000000 0.900000 186.869786 -4.000000 1.000000 184.173156 -4.000000 1.100000 181.496526 -4.000000 1.200000 178.839896 -4.000000 1.300000 176.203266 -4.000000 1.400000 173.586636 -4.000000 1.500000 170.990006 -4.000000 1.600000 168.413376 -4.000000 1.700000 165.856746 -4.000000 1.800000 163.320116 -4.000000 1.900000 160.803486 -4.000000 2.000000 158.306856 -4.000000 2.100000 155.830226 -4.000000 2.200000 153.373596 -4.000000 2.300000 150.936966 -4.000000 2.400000 148.520336 -4.000000 2.500000 146.123706 -4.000000 2.600000 143.747076 -4.000000 2.700000 141.390446 -4.000000 2.800000 139.053816 -4.000000 2.900000 136.737186 -4.000000 3.000000 134.440556 -4.000000 3.100000 132.163926 -4.000000 3.200000 129.907296 -4.000000 3.300000 127.670666 -4.000000 3.400000 125.454036 -4.000000 3.500000 123.257406 -4.000000 3.600000 121.080776 -4.000000 3.700000 118.924146 -4.000000 3.800000 116.787516 -4.000000 3.900000 114.670887 -4.000000 4.000000 112.574257 -4.000000 4.100000 110.497627 -4.000000 4.200000 108.440997 -4.000000 4.300000 106.404367 -4.000000 4.400000 104.387737 -4.000000 4.500000 102.391107 -4.000000 4.600000 100.414477 -4.000000 4.700000 98.457847 -4.000000 4.800000 96.521217 -4.000000 4.900000 94.604587 -4.000000 5.000000 92.707957 -4.000000 5.100000 90.831327 -4.000000 5.200000 88.974697 -4.000000 5.300000 87.138067 -4.000000 5.400000 85.321437 -4.000000 5.500000 83.524807 -4.000000 5.600000 81.748177 -4.000000 5.700000 79.991547 -4.000000 5.800000 78.254917 -4.000000 5.900000 76.538287 -4.000000 6.000000 74.841657 -4.000000 6.100000 73.165027 -4.000000 6.200000 71.508397 -4.000000 6.300000 69.871767 -4.000000 6.400000 68.255137 -4.000000 6.500000 66.658507 -4.000000 6.600000 65.081877 -4.000000 6.700000 63.525247 -4.000000 6.800000 61.988617 -4.000000 6.900000 60.471987 -4.000000 7.000000 58.975357 -4.000000 7.100000 57.498727 -4.000000 7.200000 56.042097 -4.000000 7.300000 54.605467 -4.000000 7.400000 53.188837 -4.000000 7.500000 51.792207 -4.000000 7.600000 50.415577 -4.000000 7.700000 49.058947 -4.000000 7.800000 47.722318 -4.000000 7.900000 46.405688 -4.000000 8.000000 45.109058 -4.000000 8.100000 43.832428 -4.000000 8.200000 42.575798 -4.000000 8.300000 41.339168 -4.000000 8.400000 40.122538 -4.000000 8.500000 38.925908 -4.000000 8.600000 37.749278 -4.000000 8.700000 36.592648 -4.000000 8.800000 35.456018 -4.000000 8.900000 34.339388 -4.000000 9.000000 33.242758 -4.000000 9.100000 32.166128 -4.000000 9.200000 31.109498 -4.000000 9.300000 30.072868 -4.000000 9.400000 29.056238 -4.000000 9.500000 28.059608 -4.000000 9.600000 27.082978 -4.000000 9.700000 26.126348 -4.000000 9.800000 25.189718 -4.000000 9.900000 24.273088 -4.000000 10.000000 23.376458 -4.000000 10.100000 22.499828 -4.000000 10.200000 21.643198 -4.000000 10.300000 20.806568 -4.000000 10.400000 19.989938 -4.000000 10.500000 19.193308 -4.000000 10.600000 18.416678 -4.000000 10.700000 17.660048 -4.000000 10.800000 16.923418 -4.000000 10.900000 16.206788 -4.000000 11.000000 15.510158 -4.000000 11.100000 14.833528 -4.000000 11.200000 14.176898 -4.000000 11.300000 13.540268 -4.000000 11.400000 12.923638 -4.000000 11.500000 12.327008 -4.000000 11.600000 11.750379 -4.000000 11.700000 11.193749 -4.000000 11.800000 10.657119 -4.000000 11.900000 10.140489 -4.000000 12.000000 9.643859 -4.000000 12.100000 9.167229 -4.000000 12.200000 8.710599 -4.000000 12.300000 8.273969 -4.000000 12.400000 7.857339 -4.000000 12.500000 7.460709 -4.000000 12.600000 7.084079 -4.000000 12.700000 6.727449 -4.000000 12.800000 6.390819 -4.000000 12.900000 6.074189 -4.000000 13.000000 5.777559 -4.000000 13.100000 5.500929 -4.000000 13.200000 5.244299 -4.000000 13.300000 5.007669 -4.000000 13.400000 4.791039 -4.000000 13.500000 4.594409 -4.000000 13.600000 4.417779 -4.000000 13.700000 4.261149 -4.000000 13.800000 4.124519 -4.000000 13.900000 4.007889 -4.000000 14.000000 3.911259 -4.000000 14.100000 3.834629 -4.000000 14.200000 3.777999 -4.000000 14.300000 3.741369 -4.000000 14.400000 3.724739 -4.000000 14.500000 3.728109 -4.000000 14.600000 3.751479 -4.000000 14.700000 3.794849 -4.000000 14.800000 3.858219 -4.000000 14.900000 3.941589 -4.000000 15.000000 4.044959 -3.900000 -5.000000 370.592768 -3.900000 -4.900000 366.768380 -3.900000 -4.800000 362.963992 -3.900000 -4.700000 359.179604 -3.900000 -4.600000 355.415216 -3.900000 -4.500000 351.670828 -3.900000 -4.400000 347.946441 -3.900000 -4.300000 344.242053 -3.900000 -4.200000 340.557665 -3.900000 -4.100000 336.893277 -3.900000 -4.000000 333.248889 -3.900000 -3.900000 329.624501 -3.900000 -3.800000 326.020114 -3.900000 -3.700000 322.435726 -3.900000 -3.600000 318.871338 -3.900000 -3.500000 315.326950 -3.900000 -3.400000 311.802562 -3.900000 -3.300000 308.298174 -3.900000 -3.200000 304.813787 -3.900000 -3.100000 301.349399 -3.900000 -3.000000 297.905011 -3.900000 -2.900000 294.480623 -3.900000 -2.800000 291.076235 -3.900000 -2.700000 287.691847 -3.900000 -2.600000 284.327460 -3.900000 -2.500000 280.983072 -3.900000 -2.400000 277.658684 -3.900000 -2.300000 274.354296 -3.900000 -2.200000 271.069908 -3.900000 -2.100000 267.805520 -3.900000 -2.000000 264.561133 -3.900000 -1.900000 261.336745 -3.900000 -1.800000 258.132357 -3.900000 -1.700000 254.947969 -3.900000 -1.600000 251.783581 -3.900000 -1.500000 248.639193 -3.900000 -1.400000 245.514806 -3.900000 -1.300000 242.410418 -3.900000 -1.200000 239.326030 -3.900000 -1.100000 236.261642 -3.900000 -1.000000 233.217254 -3.900000 -0.900000 230.192866 -3.900000 -0.800000 227.188479 -3.900000 -0.700000 224.204091 -3.900000 -0.600000 221.239703 -3.900000 -0.500000 218.295315 -3.900000 -0.400000 215.370927 -3.900000 -0.300000 212.466539 -3.900000 -0.200000 209.582152 -3.900000 -0.100000 206.717764 -3.900000 -0.000000 203.873376 -3.900000 0.100000 201.048988 -3.900000 0.200000 198.244600 -3.900000 0.300000 195.460212 -3.900000 0.400000 192.695825 -3.900000 0.500000 189.951437 -3.900000 0.600000 187.227049 -3.900000 0.700000 184.522661 -3.900000 0.800000 181.838273 -3.900000 0.900000 179.173885 -3.900000 1.000000 176.529498 -3.900000 1.100000 173.905110 -3.900000 1.200000 171.300722 -3.900000 1.300000 168.716334 -3.900000 1.400000 166.151946 -3.900000 1.500000 163.607558 -3.900000 1.600000 161.083171 -3.900000 1.700000 158.578783 -3.900000 1.800000 156.094395 -3.900000 1.900000 153.630007 -3.900000 2.000000 151.185619 -3.900000 2.100000 148.761231 -3.900000 2.200000 146.356844 -3.900000 2.300000 143.972456 -3.900000 2.400000 141.608068 -3.900000 2.500000 139.263680 -3.900000 2.600000 136.939292 -3.900000 2.700000 134.634904 -3.900000 2.800000 132.350517 -3.900000 2.900000 130.086129 -3.900000 3.000000 127.841741 -3.900000 3.100000 125.617353 -3.900000 3.200000 123.412965 -3.900000 3.300000 121.228577 -3.900000 3.400000 119.064190 -3.900000 3.500000 116.919802 -3.900000 3.600000 114.795414 -3.900000 3.700000 112.691026 -3.900000 3.800000 110.606638 -3.900000 3.900000 108.542250 -3.900000 4.000000 106.497863 -3.900000 4.100000 104.473475 -3.900000 4.200000 102.469087 -3.900000 4.300000 100.484699 -3.900000 4.400000 98.520311 -3.900000 4.500000 96.575923 -3.900000 4.600000 94.651536 -3.900000 4.700000 92.747148 -3.900000 4.800000 90.862760 -3.900000 4.900000 88.998372 -3.900000 5.000000 87.153984 -3.900000 5.100000 85.329596 -3.900000 5.200000 83.525209 -3.900000 5.300000 81.740821 -3.900000 5.400000 79.976433 -3.900000 5.500000 78.232045 -3.900000 5.600000 76.507657 -3.900000 5.700000 74.803269 -3.900000 5.800000 73.118882 -3.900000 5.900000 71.454494 -3.900000 6.000000 69.810106 -3.900000 6.100000 68.185718 -3.900000 6.200000 66.581330 -3.900000 6.300000 64.996942 -3.900000 6.400000 63.432555 -3.900000 6.500000 61.888167 -3.900000 6.600000 60.363779 -3.900000 6.700000 58.859391 -3.900000 6.800000 57.375003 -3.900000 6.900000 55.910615 -3.900000 7.000000 54.466228 -3.900000 7.100000 53.041840 -3.900000 7.200000 51.637452 -3.900000 7.300000 50.253064 -3.900000 7.400000 48.888676 -3.900000 7.500000 47.544288 -3.900000 7.600000 46.219901 -3.900000 7.700000 44.915513 -3.900000 7.800000 43.631125 -3.900000 7.900000 42.366737 -3.900000 8.000000 41.122349 -3.900000 8.100000 39.897961 -3.900000 8.200000 38.693574 -3.900000 8.300000 37.509186 -3.900000 8.400000 36.344798 -3.900000 8.500000 35.200410 -3.900000 8.600000 34.076022 -3.900000 8.700000 32.971634 -3.900000 8.800000 31.887247 -3.900000 8.900000 30.822859 -3.900000 9.000000 29.778471 -3.900000 9.100000 28.754083 -3.900000 9.200000 27.749695 -3.900000 9.300000 26.765307 -3.900000 9.400000 25.800920 -3.900000 9.500000 24.856532 -3.900000 9.600000 23.932144 -3.900000 9.700000 23.027756 -3.900000 9.800000 22.143368 -3.900000 9.900000 21.278980 -3.900000 10.000000 20.434593 -3.900000 10.100000 19.610205 -3.900000 10.200000 18.805817 -3.900000 10.300000 18.021429 -3.900000 10.400000 17.257041 -3.900000 10.500000 16.512653 -3.900000 10.600000 15.788266 -3.900000 10.700000 15.083878 -3.900000 10.800000 14.399490 -3.900000 10.900000 13.735102 -3.900000 11.000000 13.090714 -3.900000 11.100000 12.466326 -3.900000 11.200000 11.861939 -3.900000 11.300000 11.277551 -3.900000 11.400000 10.713163 -3.900000 11.500000 10.168775 -3.900000 11.600000 9.644387 -3.900000 11.700000 9.139999 -3.900000 11.800000 8.655612 -3.900000 11.900000 8.191224 -3.900000 12.000000 7.746836 -3.900000 12.100000 7.322448 -3.900000 12.200000 6.918060 -3.900000 12.300000 6.533672 -3.900000 12.400000 6.169285 -3.900000 12.500000 5.824897 -3.900000 12.600000 5.500509 -3.900000 12.700000 5.196121 -3.900000 12.800000 4.911733 -3.900000 12.900000 4.647345 -3.900000 13.000000 4.402958 -3.900000 13.100000 4.178570 -3.900000 13.200000 3.974182 -3.900000 13.300000 3.789794 -3.900000 13.400000 3.625406 -3.900000 13.500000 3.481018 -3.900000 13.600000 3.356631 -3.900000 13.700000 3.252243 -3.900000 13.800000 3.167855 -3.900000 13.900000 3.103467 -3.900000 14.000000 3.059079 -3.900000 14.100000 3.034691 -3.900000 14.200000 3.030304 -3.900000 14.300000 3.045916 -3.900000 14.400000 3.081528 -3.900000 14.500000 3.137140 -3.900000 14.600000 3.212752 -3.900000 14.700000 3.308364 -3.900000 14.800000 3.423977 -3.900000 14.900000 3.559589 -3.900000 15.000000 3.715201 -3.800000 -5.000000 360.118415 -3.800000 -4.900000 356.345753 -3.800000 -4.800000 352.593091 -3.800000 -4.700000 348.860428 -3.800000 -4.600000 345.147766 -3.800000 -4.500000 341.455103 -3.800000 -4.400000 337.782441 -3.800000 -4.300000 334.129778 -3.800000 -4.200000 330.497116 -3.800000 -4.100000 326.884454 -3.800000 -4.000000 323.291791 -3.800000 -3.900000 319.719129 -3.800000 -3.800000 316.166466 -3.800000 -3.700000 312.633804 -3.800000 -3.600000 309.121141 -3.800000 -3.500000 305.628479 -3.800000 -3.400000 302.155817 -3.800000 -3.300000 298.703154 -3.800000 -3.200000 295.270492 -3.800000 -3.100000 291.857829 -3.800000 -3.000000 288.465167 -3.800000 -2.900000 285.092504 -3.800000 -2.800000 281.739842 -3.800000 -2.700000 278.407180 -3.800000 -2.600000 275.094517 -3.800000 -2.500000 271.801855 -3.800000 -2.400000 268.529192 -3.800000 -2.300000 265.276530 -3.800000 -2.200000 262.043867 -3.800000 -2.100000 258.831205 -3.800000 -2.000000 255.638543 -3.800000 -1.900000 252.465880 -3.800000 -1.800000 249.313218 -3.800000 -1.700000 246.180555 -3.800000 -1.600000 243.067893 -3.800000 -1.500000 239.975230 -3.800000 -1.400000 236.902568 -3.800000 -1.300000 233.849905 -3.800000 -1.200000 230.817243 -3.800000 -1.100000 227.804581 -3.800000 -1.000000 224.811918 -3.800000 -0.900000 221.839256 -3.800000 -0.800000 218.886593 -3.800000 -0.700000 215.953931 -3.800000 -0.600000 213.041268 -3.800000 -0.500000 210.148606 -3.800000 -0.400000 207.275944 -3.800000 -0.300000 204.423281 -3.800000 -0.200000 201.590619 -3.800000 -0.100000 198.777956 -3.800000 -0.000000 195.985294 -3.800000 0.100000 193.212631 -3.800000 0.200000 190.459969 -3.800000 0.300000 187.727307 -3.800000 0.400000 185.014644 -3.800000 0.500000 182.321982 -3.800000 0.600000 179.649319 -3.800000 0.700000 176.996657 -3.800000 0.800000 174.363994 -3.800000 0.900000 171.751332 -3.800000 1.000000 169.158670 -3.800000 1.100000 166.586007 -3.800000 1.200000 164.033345 -3.800000 1.300000 161.500682 -3.800000 1.400000 158.988020 -3.800000 1.500000 156.495357 -3.800000 1.600000 154.022695 -3.800000 1.700000 151.570033 -3.800000 1.800000 149.137370 -3.800000 1.900000 146.724708 -3.800000 2.000000 144.332045 -3.800000 2.100000 141.959383 -3.800000 2.200000 139.606720 -3.800000 2.300000 137.274058 -3.800000 2.400000 134.961396 -3.800000 2.500000 132.668733 -3.800000 2.600000 130.396071 -3.800000 2.700000 128.143408 -3.800000 2.800000 125.910746 -3.800000 2.900000 123.698083 -3.800000 3.000000 121.505421 -3.800000 3.100000 119.332759 -3.800000 3.200000 117.180096 -3.800000 3.300000 115.047434 -3.800000 3.400000 112.934771 -3.800000 3.500000 110.842109 -3.800000 3.600000 108.769446 -3.800000 3.700000 106.716784 -3.800000 3.800000 104.684122 -3.800000 3.900000 102.671459 -3.800000 4.000000 100.678797 -3.800000 4.100000 98.706134 -3.800000 4.200000 96.753472 -3.800000 4.300000 94.820809 -3.800000 4.400000 92.908147 -3.800000 4.500000 91.015485 -3.800000 4.600000 89.142822 -3.800000 4.700000 87.290160 -3.800000 4.800000 85.457497 -3.800000 4.900000 83.644835 -3.800000 5.000000 81.852172 -3.800000 5.100000 80.079510 -3.800000 5.200000 78.326848 -3.800000 5.300000 76.594185 -3.800000 5.400000 74.881523 -3.800000 5.500000 73.188860 -3.800000 5.600000 71.516198 -3.800000 5.700000 69.863535 -3.800000 5.800000 68.230873 -3.800000 5.900000 66.618211 -3.800000 6.000000 65.025548 -3.800000 6.100000 63.452886 -3.800000 6.200000 61.900223 -3.800000 6.300000 60.367561 -3.800000 6.400000 58.854898 -3.800000 6.500000 57.362236 -3.800000 6.600000 55.889574 -3.800000 6.700000 54.436911 -3.800000 6.800000 53.004249 -3.800000 6.900000 51.591586 -3.800000 7.000000 50.198924 -3.800000 7.100000 48.826261 -3.800000 7.200000 47.473599 -3.800000 7.300000 46.140937 -3.800000 7.400000 44.828274 -3.800000 7.500000 43.535612 -3.800000 7.600000 42.262949 -3.800000 7.700000 41.010287 -3.800000 7.800000 39.777624 -3.800000 7.900000 38.564962 -3.800000 8.000000 37.372300 -3.800000 8.100000 36.199637 -3.800000 8.200000 35.046975 -3.800000 8.300000 33.914312 -3.800000 8.400000 32.801650 -3.800000 8.500000 31.708987 -3.800000 8.600000 30.636325 -3.800000 8.700000 29.583663 -3.800000 8.800000 28.551000 -3.800000 8.900000 27.538338 -3.800000 9.000000 26.545675 -3.800000 9.100000 25.573013 -3.800000 9.200000 24.620350 -3.800000 9.300000 23.687688 -3.800000 9.400000 22.775025 -3.800000 9.500000 21.882363 -3.800000 9.600000 21.009701 -3.800000 9.700000 20.157038 -3.800000 9.800000 19.324376 -3.800000 9.900000 18.511713 -3.800000 10.000000 17.719051 -3.800000 10.100000 16.946388 -3.800000 10.200000 16.193726 -3.800000 10.300000 15.461064 -3.800000 10.400000 14.748401 -3.800000 10.500000 14.055739 -3.800000 10.600000 13.383076 -3.800000 10.700000 12.730414 -3.800000 10.800000 12.097751 -3.800000 10.900000 11.485089 -3.800000 11.000000 10.892427 -3.800000 11.100000 10.319764 -3.800000 11.200000 9.767102 -3.800000 11.300000 9.234439 -3.800000 11.400000 8.721777 -3.800000 11.500000 8.229114 -3.800000 11.600000 7.756452 -3.800000 11.700000 7.303790 -3.800000 11.800000 6.871127 -3.800000 11.900000 6.458465 -3.800000 12.000000 6.065802 -3.800000 12.100000 5.693140 -3.800000 12.200000 5.340477 -3.800000 12.300000 5.007815 -3.800000 12.400000 4.695153 -3.800000 12.500000 4.402490 -3.800000 12.600000 4.129828 -3.800000 12.700000 3.877165 -3.800000 12.800000 3.644503 -3.800000 12.900000 3.431840 -3.800000 13.000000 3.239178 -3.800000 13.100000 3.066516 -3.800000 13.200000 2.913853 -3.800000 13.300000 2.781191 -3.800000 13.400000 2.668528 -3.800000 13.500000 2.575866 -3.800000 13.600000 2.503203 -3.800000 13.700000 2.450541 -3.800000 13.800000 2.417879 -3.800000 13.900000 2.405216 -3.800000 14.000000 2.412554 -3.800000 14.100000 2.439891 -3.800000 14.200000 2.487229 -3.800000 14.300000 2.554566 -3.800000 14.400000 2.641904 -3.800000 14.500000 2.749242 -3.800000 14.600000 2.876579 -3.800000 14.700000 3.023917 -3.800000 14.800000 3.191254 -3.800000 14.900000 3.378592 -3.800000 15.000000 3.585929 -3.700000 -5.000000 349.950128 -3.700000 -4.900000 346.228674 -3.700000 -4.800000 342.527220 -3.700000 -4.700000 338.845767 -3.700000 -4.600000 335.184313 -3.700000 -4.500000 331.542859 -3.700000 -4.400000 327.921405 -3.700000 -4.300000 324.319952 -3.700000 -4.200000 320.738498 -3.700000 -4.100000 317.177044 -3.700000 -4.000000 313.635590 -3.700000 -3.900000 310.114137 -3.700000 -3.800000 306.612683 -3.700000 -3.700000 303.131229 -3.700000 -3.600000 299.669775 -3.700000 -3.500000 296.228321 -3.700000 -3.400000 292.806868 -3.700000 -3.300000 289.405414 -3.700000 -3.200000 286.023960 -3.700000 -3.100000 282.662506 -3.700000 -3.000000 279.321053 -3.700000 -2.900000 275.999599 -3.700000 -2.800000 272.698145 -3.700000 -2.700000 269.416691 -3.700000 -2.600000 266.155238 -3.700000 -2.500000 262.913784 -3.700000 -2.400000 259.692330 -3.700000 -2.300000 256.490876 -3.700000 -2.200000 253.309423 -3.700000 -2.100000 250.147969 -3.700000 -2.000000 247.006515 -3.700000 -1.900000 243.885061 -3.700000 -1.800000 240.783607 -3.700000 -1.700000 237.702154 -3.700000 -1.600000 234.640700 -3.700000 -1.500000 231.599246 -3.700000 -1.400000 228.577792 -3.700000 -1.300000 225.576339 -3.700000 -1.200000 222.594885 -3.700000 -1.100000 219.633431 -3.700000 -1.000000 216.691977 -3.700000 -0.900000 213.770524 -3.700000 -0.800000 210.869070 -3.700000 -0.700000 207.987616 -3.700000 -0.600000 205.126162 -3.700000 -0.500000 202.284709 -3.700000 -0.400000 199.463255 -3.700000 -0.300000 196.661801 -3.700000 -0.200000 193.880347 -3.700000 -0.100000 191.118893 -3.700000 -0.000000 188.377440 -3.700000 0.100000 185.655986 -3.700000 0.200000 182.954532 -3.700000 0.300000 180.273078 -3.700000 0.400000 177.611625 -3.700000 0.500000 174.970171 -3.700000 0.600000 172.348717 -3.700000 0.700000 169.747263 -3.700000 0.800000 167.165810 -3.700000 0.900000 164.604356 -3.700000 1.000000 162.062902 -3.700000 1.100000 159.541448 -3.700000 1.200000 157.039995 -3.700000 1.300000 154.558541 -3.700000 1.400000 152.097087 -3.700000 1.500000 149.655633 -3.700000 1.600000 147.234179 -3.700000 1.700000 144.832726 -3.700000 1.800000 142.451272 -3.700000 1.900000 140.089818 -3.700000 2.000000 137.748364 -3.700000 2.100000 135.426911 -3.700000 2.200000 133.125457 -3.700000 2.300000 130.844003 -3.700000 2.400000 128.582549 -3.700000 2.500000 126.341096 -3.700000 2.600000 124.119642 -3.700000 2.700000 121.918188 -3.700000 2.800000 119.736734 -3.700000 2.900000 117.575281 -3.700000 3.000000 115.433827 -3.700000 3.100000 113.312373 -3.700000 3.200000 111.210919 -3.700000 3.300000 109.129465 -3.700000 3.400000 107.068012 -3.700000 3.500000 105.026558 -3.700000 3.600000 103.005104 -3.700000 3.700000 101.003650 -3.700000 3.800000 99.022197 -3.700000 3.900000 97.060743 -3.700000 4.000000 95.119289 -3.700000 4.100000 93.197835 -3.700000 4.200000 91.296382 -3.700000 4.300000 89.414928 -3.700000 4.400000 87.553474 -3.700000 4.500000 85.712020 -3.700000 4.600000 83.890567 -3.700000 4.700000 82.089113 -3.700000 4.800000 80.307659 -3.700000 4.900000 78.546205 -3.700000 5.000000 76.804751 -3.700000 5.100000 75.083298 -3.700000 5.200000 73.381844 -3.700000 5.300000 71.700390 -3.700000 5.400000 70.038936 -3.700000 5.500000 68.397483 -3.700000 5.600000 66.776029 -3.700000 5.700000 65.174575 -3.700000 5.800000 63.593121 -3.700000 5.900000 62.031668 -3.700000 6.000000 60.490214 -3.700000 6.100000 58.968760 -3.700000 6.200000 57.467306 -3.700000 6.300000 55.985853 -3.700000 6.400000 54.524399 -3.700000 6.500000 53.082945 -3.700000 6.600000 51.661491 -3.700000 6.700000 50.260037 -3.700000 6.800000 48.878584 -3.700000 6.900000 47.517130 -3.700000 7.000000 46.175676 -3.700000 7.100000 44.854222 -3.700000 7.200000 43.552769 -3.700000 7.300000 42.271315 -3.700000 7.400000 41.009861 -3.700000 7.500000 39.768407 -3.700000 7.600000 38.546954 -3.700000 7.700000 37.345500 -3.700000 7.800000 36.164046 -3.700000 7.900000 35.002592 -3.700000 8.000000 33.861139 -3.700000 8.100000 32.739685 -3.700000 8.200000 31.638231 -3.700000 8.300000 30.556777 -3.700000 8.400000 29.495323 -3.700000 8.500000 28.453870 -3.700000 8.600000 27.432416 -3.700000 8.700000 26.430962 -3.700000 8.800000 25.449508 -3.700000 8.900000 24.488055 -3.700000 9.000000 23.546601 -3.700000 9.100000 22.625147 -3.700000 9.200000 21.723693 -3.700000 9.300000 20.842240 -3.700000 9.400000 19.980786 -3.700000 9.500000 19.139332 -3.700000 9.600000 18.317878 -3.700000 9.700000 17.516425 -3.700000 9.800000 16.734971 -3.700000 9.900000 15.973517 -3.700000 10.000000 15.232063 -3.700000 10.100000 14.510609 -3.700000 10.200000 13.809156 -3.700000 10.300000 13.127702 -3.700000 10.400000 12.466248 -3.700000 10.500000 11.824794 -3.700000 10.600000 11.203341 -3.700000 10.700000 10.601887 -3.700000 10.800000 10.020433 -3.700000 10.900000 9.458979 -3.700000 11.000000 8.917526 -3.700000 11.100000 8.396072 -3.700000 11.200000 7.894618 -3.700000 11.300000 7.413164 -3.700000 11.400000 6.951711 -3.700000 11.500000 6.510257 -3.700000 11.600000 6.088803 -3.700000 11.700000 5.687349 -3.700000 11.800000 5.305895 -3.700000 11.900000 4.944442 -3.700000 12.000000 4.602988 -3.700000 12.100000 4.281534 -3.700000 12.200000 3.980080 -3.700000 12.300000 3.698627 -3.700000 12.400000 3.437173 -3.700000 12.500000 3.195719 -3.700000 12.600000 2.974265 -3.700000 12.700000 2.772812 -3.700000 12.800000 2.591358 -3.700000 12.900000 2.429904 -3.700000 13.000000 2.288450 -3.700000 13.100000 2.166997 -3.700000 13.200000 2.065543 -3.700000 13.300000 1.984089 -3.700000 13.400000 1.922635 -3.700000 13.500000 1.881181 -3.700000 13.600000 1.859728 -3.700000 13.700000 1.858274 -3.700000 13.800000 1.876820 -3.700000 13.900000 1.915366 -3.700000 14.000000 1.973913 -3.700000 14.100000 2.052459 -3.700000 14.200000 2.151005 -3.700000 14.300000 2.269551 -3.700000 14.400000 2.408098 -3.700000 14.500000 2.566644 -3.700000 14.600000 2.745190 -3.700000 14.700000 2.943736 -3.700000 14.800000 3.162283 -3.700000 14.900000 3.400829 -3.700000 15.000000 3.659375 -3.600000 -5.000000 340.089417 -3.600000 -4.900000 336.418656 -3.600000 -4.800000 332.767894 -3.600000 -4.700000 329.137132 -3.600000 -4.600000 325.526370 -3.600000 -4.500000 321.935608 -3.600000 -4.400000 318.364846 -3.600000 -4.300000 314.814085 -3.600000 -4.200000 311.283323 -3.600000 -4.100000 307.772561 -3.600000 -4.000000 304.281799 -3.600000 -3.900000 300.811037 -3.600000 -3.800000 297.360275 -3.600000 -3.700000 293.929513 -3.600000 -3.600000 290.518752 -3.600000 -3.500000 287.127990 -3.600000 -3.400000 283.757228 -3.600000 -3.300000 280.406466 -3.600000 -3.200000 277.075704 -3.600000 -3.100000 273.764942 -3.600000 -3.000000 270.474181 -3.600000 -2.900000 267.203419 -3.600000 -2.800000 263.952657 -3.600000 -2.700000 260.721895 -3.600000 -2.600000 257.511133 -3.600000 -2.500000 254.320371 -3.600000 -2.400000 251.149610 -3.600000 -2.300000 247.998848 -3.600000 -2.200000 244.868086 -3.600000 -2.100000 241.757324 -3.600000 -2.000000 238.666562 -3.600000 -1.900000 235.595800 -3.600000 -1.800000 232.545039 -3.600000 -1.700000 229.514277 -3.600000 -1.600000 226.503515 -3.600000 -1.500000 223.512753 -3.600000 -1.400000 220.541991 -3.600000 -1.300000 217.591229 -3.600000 -1.200000 214.660468 -3.600000 -1.100000 211.749706 -3.600000 -1.000000 208.858944 -3.600000 -0.900000 205.988182 -3.600000 -0.800000 203.137420 -3.600000 -0.700000 200.306658 -3.600000 -0.600000 197.495896 -3.600000 -0.500000 194.705135 -3.600000 -0.400000 191.934373 -3.600000 -0.300000 189.183611 -3.600000 -0.200000 186.452849 -3.600000 -0.100000 183.742087 -3.600000 -0.000000 181.051325 -3.600000 0.100000 178.380564 -3.600000 0.200000 175.729802 -3.600000 0.300000 173.099040 -3.600000 0.400000 170.488278 -3.600000 0.500000 167.897516 -3.600000 0.600000 165.326754 -3.600000 0.700000 162.775993 -3.600000 0.800000 160.245231 -3.600000 0.900000 157.734469 -3.600000 1.000000 155.243707 -3.600000 1.100000 152.772945 -3.600000 1.200000 150.322183 -3.600000 1.300000 147.891422 -3.600000 1.400000 145.480660 -3.600000 1.500000 143.089898 -3.600000 1.600000 140.719136 -3.600000 1.700000 138.368374 -3.600000 1.800000 136.037612 -3.600000 1.900000 133.726851 -3.600000 2.000000 131.436089 -3.600000 2.100000 129.165327 -3.600000 2.200000 126.914565 -3.600000 2.300000 124.683803 -3.600000 2.400000 122.473041 -3.600000 2.500000 120.282280 -3.600000 2.600000 118.111518 -3.600000 2.700000 115.960756 -3.600000 2.800000 113.829994 -3.600000 2.900000 111.719232 -3.600000 3.000000 109.628470 -3.600000 3.100000 107.557708 -3.600000 3.200000 105.506947 -3.600000 3.300000 103.476185 -3.600000 3.400000 101.465423 -3.600000 3.500000 99.474661 -3.600000 3.600000 97.503899 -3.600000 3.700000 95.553137 -3.600000 3.800000 93.622376 -3.600000 3.900000 91.711614 -3.600000 4.000000 89.820852 -3.600000 4.100000 87.950090 -3.600000 4.200000 86.099328 -3.600000 4.300000 84.268566 -3.600000 4.400000 82.457805 -3.600000 4.500000 80.667043 -3.600000 4.600000 78.896281 -3.600000 4.700000 77.145519 -3.600000 4.800000 75.414757 -3.600000 4.900000 73.703995 -3.600000 5.000000 72.013234 -3.600000 5.100000 70.342472 -3.600000 5.200000 68.691710 -3.600000 5.300000 67.060948 -3.600000 5.400000 65.450186 -3.600000 5.500000 63.859424 -3.600000 5.600000 62.288663 -3.600000 5.700000 60.737901 -3.600000 5.800000 59.207139 -3.600000 5.900000 57.696377 -3.600000 6.000000 56.205615 -3.600000 6.100000 54.734853 -3.600000 6.200000 53.284092 -3.600000 6.300000 51.853330 -3.600000 6.400000 50.442568 -3.600000 6.500000 49.051806 -3.600000 6.600000 47.681044 -3.600000 6.700000 46.330282 -3.600000 6.800000 44.999520 -3.600000 6.900000 43.688759 -3.600000 7.000000 42.397997 -3.600000 7.100000 41.127235 -3.600000 7.200000 39.876473 -3.600000 7.300000 38.645711 -3.600000 7.400000 37.434949 -3.600000 7.500000 36.244188 -3.600000 7.600000 35.073426 -3.600000 7.700000 33.922664 -3.600000 7.800000 32.791902 -3.600000 7.900000 31.681140 -3.600000 8.000000 30.590378 -3.600000 8.100000 29.519617 -3.600000 8.200000 28.468855 -3.600000 8.300000 27.438093 -3.600000 8.400000 26.427331 -3.600000 8.500000 25.436569 -3.600000 8.600000 24.465807 -3.600000 8.700000 23.515046 -3.600000 8.800000 22.584284 -3.600000 8.900000 21.673522 -3.600000 9.000000 20.782760 -3.600000 9.100000 19.911998 -3.600000 9.200000 19.061236 -3.600000 9.300000 18.230475 -3.600000 9.400000 17.419713 -3.600000 9.500000 16.628951 -3.600000 9.600000 15.858189 -3.600000 9.700000 15.107427 -3.600000 9.800000 14.376665 -3.600000 9.900000 13.665904 -3.600000 10.000000 12.975142 -3.600000 10.100000 12.304380 -3.600000 10.200000 11.653618 -3.600000 10.300000 11.022856 -3.600000 10.400000 10.412094 -3.600000 10.500000 9.821332 -3.600000 10.600000 9.250571 -3.600000 10.700000 8.699809 -3.600000 10.800000 8.169047 -3.600000 10.900000 7.658285 -3.600000 11.000000 7.167523 -3.600000 11.100000 6.696761 -3.600000 11.200000 6.246000 -3.600000 11.300000 5.815238 -3.600000 11.400000 5.404476 -3.600000 11.500000 5.013714 -3.600000 11.600000 4.642952 -3.600000 11.700000 4.292190 -3.600000 11.800000 3.961429 -3.600000 11.900000 3.650667 -3.600000 12.000000 3.359905 -3.600000 12.100000 3.089143 -3.600000 12.200000 2.838381 -3.600000 12.300000 2.607619 -3.600000 12.400000 2.396858 -3.600000 12.500000 2.206096 -3.600000 12.600000 2.035334 -3.600000 12.700000 1.884572 -3.600000 12.800000 1.753810 -3.600000 12.900000 1.643048 -3.600000 13.000000 1.552287 -3.600000 13.100000 1.481525 -3.600000 13.200000 1.430763 -3.600000 13.300000 1.400001 -3.600000 13.400000 1.389239 -3.600000 13.500000 1.398477 -3.600000 13.600000 1.427716 -3.600000 13.700000 1.476954 -3.600000 13.800000 1.546192 -3.600000 13.900000 1.635430 -3.600000 14.000000 1.744668 -3.600000 14.100000 1.873906 -3.600000 14.200000 2.023144 -3.600000 14.300000 2.192383 -3.600000 14.400000 2.381621 -3.600000 14.500000 2.590859 -3.600000 14.600000 2.820097 -3.600000 14.700000 3.069335 -3.600000 14.800000 3.338573 -3.600000 14.900000 3.627812 -3.600000 15.000000 3.937050 -3.500000 -5.000000 330.537023 -3.500000 -4.900000 326.916436 -3.500000 -4.800000 323.315850 -3.500000 -4.700000 319.735263 -3.500000 -4.600000 316.174676 -3.500000 -4.500000 312.634090 -3.500000 -4.400000 309.113503 -3.500000 -4.300000 305.612916 -3.500000 -4.200000 302.132330 -3.500000 -4.100000 298.671743 -3.500000 -4.000000 295.231156 -3.500000 -3.900000 291.810570 -3.500000 -3.800000 288.409983 -3.500000 -3.700000 285.029396 -3.500000 -3.600000 281.668810 -3.500000 -3.500000 278.328223 -3.500000 -3.400000 275.007636 -3.500000 -3.300000 271.707050 -3.500000 -3.200000 268.426463 -3.500000 -3.100000 265.165876 -3.500000 -3.000000 261.925290 -3.500000 -2.900000 258.704703 -3.500000 -2.800000 255.504117 -3.500000 -2.700000 252.323530 -3.500000 -2.600000 249.162943 -3.500000 -2.500000 246.022357 -3.500000 -2.400000 242.901770 -3.500000 -2.300000 239.801183 -3.500000 -2.200000 236.720597 -3.500000 -2.100000 233.660010 -3.500000 -2.000000 230.619423 -3.500000 -1.900000 227.598837 -3.500000 -1.800000 224.598250 -3.500000 -1.700000 221.617663 -3.500000 -1.600000 218.657077 -3.500000 -1.500000 215.716490 -3.500000 -1.400000 212.795903 -3.500000 -1.300000 209.895317 -3.500000 -1.200000 207.014730 -3.500000 -1.100000 204.154143 -3.500000 -1.000000 201.313557 -3.500000 -0.900000 198.492970 -3.500000 -0.800000 195.692384 -3.500000 -0.700000 192.911797 -3.500000 -0.600000 190.151210 -3.500000 -0.500000 187.410624 -3.500000 -0.400000 184.690037 -3.500000 -0.300000 181.989450 -3.500000 -0.200000 179.308864 -3.500000 -0.100000 176.648277 -3.500000 -0.000000 174.007690 -3.500000 0.100000 171.387104 -3.500000 0.200000 168.786517 -3.500000 0.300000 166.205930 -3.500000 0.400000 163.645344 -3.500000 0.500000 161.104757 -3.500000 0.600000 158.584170 -3.500000 0.700000 156.083584 -3.500000 0.800000 153.602997 -3.500000 0.900000 151.142411 -3.500000 1.000000 148.701824 -3.500000 1.100000 146.281237 -3.500000 1.200000 143.880651 -3.500000 1.300000 141.500064 -3.500000 1.400000 139.139477 -3.500000 1.500000 136.798891 -3.500000 1.600000 134.478304 -3.500000 1.700000 132.177717 -3.500000 1.800000 129.897131 -3.500000 1.900000 127.636544 -3.500000 2.000000 125.395957 -3.500000 2.100000 123.175371 -3.500000 2.200000 120.974784 -3.500000 2.300000 118.794197 -3.500000 2.400000 116.633611 -3.500000 2.500000 114.493024 -3.500000 2.600000 112.372437 -3.500000 2.700000 110.271851 -3.500000 2.800000 108.191264 -3.500000 2.900000 106.130678 -3.500000 3.000000 104.090091 -3.500000 3.100000 102.069504 -3.500000 3.200000 100.068918 -3.500000 3.300000 98.088331 -3.500000 3.400000 96.127744 -3.500000 3.500000 94.187158 -3.500000 3.600000 92.266571 -3.500000 3.700000 90.365984 -3.500000 3.800000 88.485398 -3.500000 3.900000 86.624811 -3.500000 4.000000 84.784224 -3.500000 4.100000 82.963638 -3.500000 4.200000 81.163051 -3.500000 4.300000 79.382464 -3.500000 4.400000 77.621878 -3.500000 4.500000 75.881291 -3.500000 4.600000 74.160705 -3.500000 4.700000 72.460118 -3.500000 4.800000 70.779531 -3.500000 4.900000 69.118945 -3.500000 5.000000 67.478358 -3.500000 5.100000 65.857771 -3.500000 5.200000 64.257185 -3.500000 5.300000 62.676598 -3.500000 5.400000 61.116011 -3.500000 5.500000 59.575425 -3.500000 5.600000 58.054838 -3.500000 5.700000 56.554251 -3.500000 5.800000 55.073665 -3.500000 5.900000 53.613078 -3.500000 6.000000 52.172491 -3.500000 6.100000 50.751905 -3.500000 6.200000 49.351318 -3.500000 6.300000 47.970731 -3.500000 6.400000 46.610145 -3.500000 6.500000 45.269558 -3.500000 6.600000 43.948972 -3.500000 6.700000 42.648385 -3.500000 6.800000 41.367798 -3.500000 6.900000 40.107212 -3.500000 7.000000 38.866625 -3.500000 7.100000 37.646038 -3.500000 7.200000 36.445452 -3.500000 7.300000 35.264865 -3.500000 7.400000 34.104278 -3.500000 7.500000 32.963692 -3.500000 7.600000 31.843105 -3.500000 7.700000 30.742518 -3.500000 7.800000 29.661932 -3.500000 7.900000 28.601345 -3.500000 8.000000 27.560758 -3.500000 8.100000 26.540172 -3.500000 8.200000 25.539585 -3.500000 8.300000 24.558998 -3.500000 8.400000 23.598412 -3.500000 8.500000 22.657825 -3.500000 8.600000 21.737239 -3.500000 8.700000 20.836652 -3.500000 8.800000 19.956065 -3.500000 8.900000 19.095479 -3.500000 9.000000 18.254892 -3.500000 9.100000 17.434305 -3.500000 9.200000 16.633719 -3.500000 9.300000 15.853132 -3.500000 9.400000 15.092545 -3.500000 9.500000 14.351959 -3.500000 9.600000 13.631372 -3.500000 9.700000 12.930785 -3.500000 9.800000 12.250199 -3.500000 9.900000 11.589612 -3.500000 10.000000 10.949025 -3.500000 10.100000 10.328439 -3.500000 10.200000 9.727852 -3.500000 10.300000 9.147266 -3.500000 10.400000 8.586679 -3.500000 10.500000 8.046092 -3.500000 10.600000 7.525506 -3.500000 10.700000 7.024919 -3.500000 10.800000 6.544332 -3.500000 10.900000 6.083746 -3.500000 11.000000 5.643159 -3.500000 11.100000 5.222572 -3.500000 11.200000 4.821986 -3.500000 11.300000 4.441399 -3.500000 11.400000 4.080812 -3.500000 11.500000 3.740226 -3.500000 11.600000 3.419639 -3.500000 11.700000 3.119052 -3.500000 11.800000 2.838466 -3.500000 11.900000 2.577879 -3.500000 12.000000 2.337292 -3.500000 12.100000 2.116706 -3.500000 12.200000 1.916119 -3.500000 12.300000 1.735533 -3.500000 12.400000 1.574946 -3.500000 12.500000 1.434359 -3.500000 12.600000 1.313773 -3.500000 12.700000 1.213186 -3.500000 12.800000 1.132599 -3.500000 12.900000 1.072013 -3.500000 13.000000 1.031426 -3.500000 13.100000 1.010839 -3.500000 13.200000 1.010253 -3.500000 13.300000 1.029666 -3.500000 13.400000 1.069079 -3.500000 13.500000 1.128493 -3.500000 13.600000 1.207906 -3.500000 13.700000 1.307319 -3.500000 13.800000 1.426733 -3.500000 13.900000 1.566146 -3.500000 14.000000 1.725559 -3.500000 14.100000 1.904973 -3.500000 14.200000 2.104386 -3.500000 14.300000 2.323800 -3.500000 14.400000 2.563213 -3.500000 14.500000 2.822626 -3.500000 14.600000 3.102040 -3.500000 14.700000 3.401453 -3.500000 14.800000 3.720866 -3.500000 14.900000 4.060280 -3.500000 15.000000 4.419693 -3.400000 -5.000000 321.292864 -3.400000 -4.900000 317.721936 -3.400000 -4.800000 314.171007 -3.400000 -4.700000 310.640079 -3.400000 -4.600000 307.129151 -3.400000 -4.500000 303.638223 -3.400000 -4.400000 300.167295 -3.400000 -4.300000 296.716366 -3.400000 -4.200000 293.285438 -3.400000 -4.100000 289.874510 -3.400000 -4.000000 286.483582 -3.400000 -3.900000 283.112654 -3.400000 -3.800000 279.761725 -3.400000 -3.700000 276.430797 -3.400000 -3.600000 273.119869 -3.400000 -3.500000 269.828941 -3.400000 -3.400000 266.558013 -3.400000 -3.300000 263.307084 -3.400000 -3.200000 260.076156 -3.400000 -3.100000 256.865228 -3.400000 -3.000000 253.674300 -3.400000 -2.900000 250.503372 -3.400000 -2.800000 247.352444 -3.400000 -2.700000 244.221515 -3.400000 -2.600000 241.110587 -3.400000 -2.500000 238.019659 -3.400000 -2.400000 234.948731 -3.400000 -2.300000 231.897803 -3.400000 -2.200000 228.866874 -3.400000 -2.100000 225.855946 -3.400000 -2.000000 222.865018 -3.400000 -1.900000 219.894090 -3.400000 -1.800000 216.943162 -3.400000 -1.700000 214.012233 -3.400000 -1.600000 211.101305 -3.400000 -1.500000 208.210377 -3.400000 -1.400000 205.339449 -3.400000 -1.300000 202.488521 -3.400000 -1.200000 199.657592 -3.400000 -1.100000 196.846664 -3.400000 -1.000000 194.055736 -3.400000 -0.900000 191.284808 -3.400000 -0.800000 188.533880 -3.400000 -0.700000 185.802951 -3.400000 -0.600000 183.092023 -3.400000 -0.500000 180.401095 -3.400000 -0.400000 177.730167 -3.400000 -0.300000 175.079239 -3.400000 -0.200000 172.448310 -3.400000 -0.100000 169.837382 -3.400000 -0.000000 167.246454 -3.400000 0.100000 164.675526 -3.400000 0.200000 162.124598 -3.400000 0.300000 159.593669 -3.400000 0.400000 157.082741 -3.400000 0.500000 154.591813 -3.400000 0.600000 152.120885 -3.400000 0.700000 149.669957 -3.400000 0.800000 147.239028 -3.400000 0.900000 144.828100 -3.400000 1.000000 142.437172 -3.400000 1.100000 140.066244 -3.400000 1.200000 137.715316 -3.400000 1.300000 135.384387 -3.400000 1.400000 133.073459 -3.400000 1.500000 130.782531 -3.400000 1.600000 128.511603 -3.400000 1.700000 126.260675 -3.400000 1.800000 124.029746 -3.400000 1.900000 121.818818 -3.400000 2.000000 119.627890 -3.400000 2.100000 117.456962 -3.400000 2.200000 115.306034 -3.400000 2.300000 113.175105 -3.400000 2.400000 111.064177 -3.400000 2.500000 108.973249 -3.400000 2.600000 106.902321 -3.400000 2.700000 104.851393 -3.400000 2.800000 102.820464 -3.400000 2.900000 100.809536 -3.400000 3.000000 98.818608 -3.400000 3.100000 96.847680 -3.400000 3.200000 94.896752 -3.400000 3.300000 92.965823 -3.400000 3.400000 91.054895 -3.400000 3.500000 89.163967 -3.400000 3.600000 87.293039 -3.400000 3.700000 85.442111 -3.400000 3.800000 83.611182 -3.400000 3.900000 81.800254 -3.400000 4.000000 80.009326 -3.400000 4.100000 78.238398 -3.400000 4.200000 76.487470 -3.400000 4.300000 74.756541 -3.400000 4.400000 73.045613 -3.400000 4.500000 71.354685 -3.400000 4.600000 69.683757 -3.400000 4.700000 68.032829 -3.400000 4.800000 66.401900 -3.400000 4.900000 64.790972 -3.400000 5.000000 63.200044 -3.400000 5.100000 61.629116 -3.400000 5.200000 60.078188 -3.400000 5.300000 58.547259 -3.400000 5.400000 57.036331 -3.400000 5.500000 55.545403 -3.400000 5.600000 54.074475 -3.400000 5.700000 52.623547 -3.400000 5.800000 51.192618 -3.400000 5.900000 49.781690 -3.400000 6.000000 48.390762 -3.400000 6.100000 47.019834 -3.400000 6.200000 45.668906 -3.400000 6.300000 44.337977 -3.400000 6.400000 43.027049 -3.400000 6.500000 41.736121 -3.400000 6.600000 40.465193 -3.400000 6.700000 39.214265 -3.400000 6.800000 37.983336 -3.400000 6.900000 36.772408 -3.400000 7.000000 35.581480 -3.400000 7.100000 34.410552 -3.400000 7.200000 33.259624 -3.400000 7.300000 32.128695 -3.400000 7.400000 31.017767 -3.400000 7.500000 29.926839 -3.400000 7.600000 28.855911 -3.400000 7.700000 27.804983 -3.400000 7.800000 26.774054 -3.400000 7.900000 25.763126 -3.400000 8.000000 24.772198 -3.400000 8.100000 23.801270 -3.400000 8.200000 22.850342 -3.400000 8.300000 21.919414 -3.400000 8.400000 21.008485 -3.400000 8.500000 20.117557 -3.400000 8.600000 19.246629 -3.400000 8.700000 18.395701 -3.400000 8.800000 17.564773 -3.400000 8.900000 16.753844 -3.400000 9.000000 15.962916 -3.400000 9.100000 15.191988 -3.400000 9.200000 14.441060 -3.400000 9.300000 13.710132 -3.400000 9.400000 12.999203 -3.400000 9.500000 12.308275 -3.400000 9.600000 11.637347 -3.400000 9.700000 10.986419 -3.400000 9.800000 10.355491 -3.400000 9.900000 9.744562 -3.400000 10.000000 9.153634 -3.400000 10.100000 8.582706 -3.400000 10.200000 8.031778 -3.400000 10.300000 7.500850 -3.400000 10.400000 6.989921 -3.400000 10.500000 6.498993 -3.400000 10.600000 6.028065 -3.400000 10.700000 5.577137 -3.400000 10.800000 5.146209 -3.400000 10.900000 4.735280 -3.400000 11.000000 4.344352 -3.400000 11.100000 3.973424 -3.400000 11.200000 3.622496 -3.400000 11.300000 3.291568 -3.400000 11.400000 2.980639 -3.400000 11.500000 2.689711 -3.400000 11.600000 2.418783 -3.400000 11.700000 2.167855 -3.400000 11.800000 1.936927 -3.400000 11.900000 1.725998 -3.400000 12.000000 1.535070 -3.400000 12.100000 1.364142 -3.400000 12.200000 1.213214 -3.400000 12.300000 1.082286 -3.400000 12.400000 0.971357 -3.400000 12.500000 0.880429 -3.400000 12.600000 0.809501 -3.400000 12.700000 0.758573 -3.400000 12.800000 0.727645 -3.400000 12.900000 0.716716 -3.400000 13.000000 0.725788 -3.400000 13.100000 0.754860 -3.400000 13.200000 0.803932 -3.400000 13.300000 0.873004 -3.400000 13.400000 0.962075 -3.400000 13.500000 1.071147 -3.400000 13.600000 1.200219 -3.400000 13.700000 1.349291 -3.400000 13.800000 1.518363 -3.400000 13.900000 1.707434 -3.400000 14.000000 1.916506 -3.400000 14.100000 2.145578 -3.400000 14.200000 2.394650 -3.400000 14.300000 2.663722 -3.400000 14.400000 2.952793 -3.400000 14.500000 3.261865 -3.400000 14.600000 3.590937 -3.400000 14.700000 3.940009 -3.400000 14.800000 4.309081 -3.400000 14.900000 4.698152 -3.400000 15.000000 5.107224 -3.300000 -5.000000 312.356002 -3.300000 -4.900000 308.834216 -3.300000 -4.800000 305.332429 -3.300000 -4.700000 301.850643 -3.300000 -4.600000 298.388857 -3.300000 -4.500000 294.947070 -3.300000 -4.400000 291.525284 -3.300000 -4.300000 288.123497 -3.300000 -4.200000 284.741711 -3.300000 -4.100000 281.379924 -3.300000 -4.000000 278.038138 -3.300000 -3.900000 274.716351 -3.300000 -3.800000 271.414565 -3.300000 -3.700000 268.132778 -3.300000 -3.600000 264.870992 -3.300000 -3.500000 261.629205 -3.300000 -3.400000 258.407419 -3.300000 -3.300000 255.205632 -3.300000 -3.200000 252.023846 -3.300000 -3.100000 248.862059 -3.300000 -3.000000 245.720273 -3.300000 -2.900000 242.598486 -3.300000 -2.800000 239.496700 -3.300000 -2.700000 236.414913 -3.300000 -2.600000 233.353127 -3.300000 -2.500000 230.311340 -3.300000 -2.400000 227.289554 -3.300000 -2.300000 224.287767 -3.300000 -2.200000 221.305981 -3.300000 -2.100000 218.344194 -3.300000 -2.000000 215.402408 -3.300000 -1.900000 212.480621 -3.300000 -1.800000 209.578835 -3.300000 -1.700000 206.697048 -3.300000 -1.600000 203.835262 -3.300000 -1.500000 200.993475 -3.300000 -1.400000 198.171689 -3.300000 -1.300000 195.369903 -3.300000 -1.200000 192.588116 -3.300000 -1.100000 189.826330 -3.300000 -1.000000 187.084543 -3.300000 -0.900000 184.362757 -3.300000 -0.800000 181.660970 -3.300000 -0.700000 178.979184 -3.300000 -0.600000 176.317397 -3.300000 -0.500000 173.675611 -3.300000 -0.400000 171.053824 -3.300000 -0.300000 168.452038 -3.300000 -0.200000 165.870251 -3.300000 -0.100000 163.308465 -3.300000 -0.000000 160.766678 -3.300000 0.100000 158.244892 -3.300000 0.200000 155.743105 -3.300000 0.300000 153.261319 -3.300000 0.400000 150.799532 -3.300000 0.500000 148.357746 -3.300000 0.600000 145.935959 -3.300000 0.700000 143.534173 -3.300000 0.800000 141.152386 -3.300000 0.900000 138.790600 -3.300000 1.000000 136.448813 -3.300000 1.100000 134.127027 -3.300000 1.200000 131.825240 -3.300000 1.300000 129.543454 -3.300000 1.400000 127.281667 -3.300000 1.500000 125.039881 -3.300000 1.600000 122.818094 -3.300000 1.700000 120.616308 -3.300000 1.800000 118.434521 -3.300000 1.900000 116.272735 -3.300000 2.000000 114.130948 -3.300000 2.100000 112.009162 -3.300000 2.200000 109.907376 -3.300000 2.300000 107.825589 -3.300000 2.400000 105.763803 -3.300000 2.500000 103.722016 -3.300000 2.600000 101.700230 -3.300000 2.700000 99.698443 -3.300000 2.800000 97.716657 -3.300000 2.900000 95.754870 -3.300000 3.000000 93.813084 -3.300000 3.100000 91.891297 -3.300000 3.200000 89.989511 -3.300000 3.300000 88.107724 -3.300000 3.400000 86.245938 -3.300000 3.500000 84.404151 -3.300000 3.600000 82.582365 -3.300000 3.700000 80.780578 -3.300000 3.800000 78.998792 -3.300000 3.900000 77.237005 -3.300000 4.000000 75.495219 -3.300000 4.100000 73.773432 -3.300000 4.200000 72.071646 -3.300000 4.300000 70.389859 -3.300000 4.400000 68.728073 -3.300000 4.500000 67.086286 -3.300000 4.600000 65.464500 -3.300000 4.700000 63.862713 -3.300000 4.800000 62.280927 -3.300000 4.900000 60.719140 -3.300000 5.000000 59.177354 -3.300000 5.100000 57.655567 -3.300000 5.200000 56.153781 -3.300000 5.300000 54.671994 -3.300000 5.400000 53.210208 -3.300000 5.500000 51.768422 -3.300000 5.600000 50.346635 -3.300000 5.700000 48.944849 -3.300000 5.800000 47.563062 -3.300000 5.900000 46.201276 -3.300000 6.000000 44.859489 -3.300000 6.100000 43.537703 -3.300000 6.200000 42.235916 -3.300000 6.300000 40.954130 -3.300000 6.400000 39.692343 -3.300000 6.500000 38.450557 -3.300000 6.600000 37.228770 -3.300000 6.700000 36.026984 -3.300000 6.800000 34.845197 -3.300000 6.900000 33.683411 -3.300000 7.000000 32.541624 -3.300000 7.100000 31.419838 -3.300000 7.200000 30.318051 -3.300000 7.300000 29.236265 -3.300000 7.400000 28.174478 -3.300000 7.500000 27.132692 -3.300000 7.600000 26.110905 -3.300000 7.700000 25.109119 -3.300000 7.800000 24.127332 -3.300000 7.900000 23.165546 -3.300000 8.000000 22.223759 -3.300000 8.100000 21.301973 -3.300000 8.200000 20.400186 -3.300000 8.300000 19.518400 -3.300000 8.400000 18.656613 -3.300000 8.500000 17.814827 -3.300000 8.600000 16.993040 -3.300000 8.700000 16.191254 -3.300000 8.800000 15.409467 -3.300000 8.900000 14.647681 -3.300000 9.000000 13.905895 -3.300000 9.100000 13.184108 -3.300000 9.200000 12.482322 -3.300000 9.300000 11.800535 -3.300000 9.400000 11.138749 -3.300000 9.500000 10.496962 -3.300000 9.600000 9.875176 -3.300000 9.700000 9.273389 -3.300000 9.800000 8.691603 -3.300000 9.900000 8.129816 -3.300000 10.000000 7.588030 -3.300000 10.100000 7.066243 -3.300000 10.200000 6.564457 -3.300000 10.300000 6.082670 -3.300000 10.400000 5.620884 -3.300000 10.500000 5.179097 -3.300000 10.600000 4.757311 -3.300000 10.700000 4.355524 -3.300000 10.800000 3.973738 -3.300000 10.900000 3.611951 -3.300000 11.000000 3.270165 -3.300000 11.100000 2.948378 -3.300000 11.200000 2.646592 -3.300000 11.300000 2.364805 -3.300000 11.400000 2.103019 -3.300000 11.500000 1.861232 -3.300000 11.600000 1.639446 -3.300000 11.700000 1.437659 -3.300000 11.800000 1.255873 -3.300000 11.900000 1.094086 -3.300000 12.000000 0.952300 -3.300000 12.100000 0.830513 -3.300000 12.200000 0.728727 -3.300000 12.300000 0.646941 -3.300000 12.400000 0.585154 -3.300000 12.500000 0.543368 -3.300000 12.600000 0.521581 -3.300000 12.700000 0.519795 -3.300000 12.800000 0.538008 -3.300000 12.900000 0.576222 -3.300000 13.000000 0.634435 -3.300000 13.100000 0.712649 -3.300000 13.200000 0.810862 -3.300000 13.300000 0.929076 -3.300000 13.400000 1.067289 -3.300000 13.500000 1.225503 -3.300000 13.600000 1.403716 -3.300000 13.700000 1.601930 -3.300000 13.800000 1.820143 -3.300000 13.900000 2.058357 -3.300000 14.000000 2.316570 -3.300000 14.100000 2.594784 -3.300000 14.200000 2.892997 -3.300000 14.300000 3.211211 -3.300000 14.400000 3.549424 -3.300000 14.500000 3.907638 -3.300000 14.600000 4.285851 -3.300000 14.700000 4.684065 -3.300000 14.800000 5.102278 -3.300000 14.900000 5.540492 -3.300000 15.000000 5.998705 -3.200000 -5.000000 303.724614 -3.200000 -4.900000 300.251452 -3.200000 -4.800000 296.798291 -3.200000 -4.700000 293.365129 -3.200000 -4.600000 289.951968 -3.200000 -4.500000 286.558806 -3.200000 -4.400000 283.185645 -3.200000 -4.300000 279.832483 -3.200000 -4.200000 276.499322 -3.200000 -4.100000 273.186160 -3.200000 -4.000000 269.892999 -3.200000 -3.900000 266.619837 -3.200000 -3.800000 263.366676 -3.200000 -3.700000 260.133514 -3.200000 -3.600000 256.920353 -3.200000 -3.500000 253.727191 -3.200000 -3.400000 250.554030 -3.200000 -3.300000 247.400868 -3.200000 -3.200000 244.267707 -3.200000 -3.100000 241.154545 -3.200000 -3.000000 238.061384 -3.200000 -2.900000 234.988222 -3.200000 -2.800000 231.935061 -3.200000 -2.700000 228.901899 -3.200000 -2.600000 225.888738 -3.200000 -2.500000 222.895576 -3.200000 -2.400000 219.922415 -3.200000 -2.300000 216.969253 -3.200000 -2.200000 214.036092 -3.200000 -2.100000 211.122930 -3.200000 -2.000000 208.229769 -3.200000 -1.900000 205.356607 -3.200000 -1.800000 202.503445 -3.200000 -1.700000 199.670284 -3.200000 -1.600000 196.857122 -3.200000 -1.500000 194.063961 -3.200000 -1.400000 191.290799 -3.200000 -1.300000 188.537638 -3.200000 -1.200000 185.804476 -3.200000 -1.100000 183.091315 -3.200000 -1.000000 180.398153 -3.200000 -0.900000 177.724992 -3.200000 -0.800000 175.071830 -3.200000 -0.700000 172.438669 -3.200000 -0.600000 169.825507 -3.200000 -0.500000 167.232346 -3.200000 -0.400000 164.659184 -3.200000 -0.300000 162.106023 -3.200000 -0.200000 159.572861 -3.200000 -0.100000 157.059700 -3.200000 -0.000000 154.566538 -3.200000 0.100000 152.093377 -3.200000 0.200000 149.640215 -3.200000 0.300000 147.207054 -3.200000 0.400000 144.793892 -3.200000 0.500000 142.400731 -3.200000 0.600000 140.027569 -3.200000 0.700000 137.674408 -3.200000 0.800000 135.341246 -3.200000 0.900000 133.028085 -3.200000 1.000000 130.734923 -3.200000 1.100000 128.461762 -3.200000 1.200000 126.208600 -3.200000 1.300000 123.975439 -3.200000 1.400000 121.762277 -3.200000 1.500000 119.569116 -3.200000 1.600000 117.395954 -3.200000 1.700000 115.242793 -3.200000 1.800000 113.109631 -3.200000 1.900000 110.996470 -3.200000 2.000000 108.903308 -3.200000 2.100000 106.830147 -3.200000 2.200000 104.776985 -3.200000 2.300000 102.743824 -3.200000 2.400000 100.730662 -3.200000 2.500000 98.737501 -3.200000 2.600000 96.764339 -3.200000 2.700000 94.811178 -3.200000 2.800000 92.878016 -3.200000 2.900000 90.964854 -3.200000 3.000000 89.071693 -3.200000 3.100000 87.198531 -3.200000 3.200000 85.345370 -3.200000 3.300000 83.512208 -3.200000 3.400000 81.699047 -3.200000 3.500000 79.905885 -3.200000 3.600000 78.132724 -3.200000 3.700000 76.379562 -3.200000 3.800000 74.646401 -3.200000 3.900000 72.933239 -3.200000 4.000000 71.240078 -3.200000 4.100000 69.566916 -3.200000 4.200000 67.913755 -3.200000 4.300000 66.280593 -3.200000 4.400000 64.667432 -3.200000 4.500000 63.074270 -3.200000 4.600000 61.501109 -3.200000 4.700000 59.947947 -3.200000 4.800000 58.414786 -3.200000 4.900000 56.901624 -3.200000 5.000000 55.408463 -3.200000 5.100000 53.935301 -3.200000 5.200000 52.482140 -3.200000 5.300000 51.048978 -3.200000 5.400000 49.635817 -3.200000 5.500000 48.242655 -3.200000 5.600000 46.869494 -3.200000 5.700000 45.516332 -3.200000 5.800000 44.183171 -3.200000 5.900000 42.870009 -3.200000 6.000000 41.576848 -3.200000 6.100000 40.303686 -3.200000 6.200000 39.050525 -3.200000 6.300000 37.817363 -3.200000 6.400000 36.604202 -3.200000 6.500000 35.411040 -3.200000 6.600000 34.237879 -3.200000 6.700000 33.084717 -3.200000 6.800000 31.951556 -3.200000 6.900000 30.838394 -3.200000 7.000000 29.745233 -3.200000 7.100000 28.672071 -3.200000 7.200000 27.618910 -3.200000 7.300000 26.585748 -3.200000 7.400000 25.572587 -3.200000 7.500000 24.579425 -3.200000 7.600000 23.606263 -3.200000 7.700000 22.653102 -3.200000 7.800000 21.719940 -3.200000 7.900000 20.806779 -3.200000 8.000000 19.913617 -3.200000 8.100000 19.040456 -3.200000 8.200000 18.187294 -3.200000 8.300000 17.354133 -3.200000 8.400000 16.540971 -3.200000 8.500000 15.747810 -3.200000 8.600000 14.974648 -3.200000 8.700000 14.221487 -3.200000 8.800000 13.488325 -3.200000 8.900000 12.775164 -3.200000 9.000000 12.082002 -3.200000 9.100000 11.408841 -3.200000 9.200000 10.755679 -3.200000 9.300000 10.122518 -3.200000 9.400000 9.509356 -3.200000 9.500000 8.916195 -3.200000 9.600000 8.343033 -3.200000 9.700000 7.789872 -3.200000 9.800000 7.256710 -3.200000 9.900000 6.743549 -3.200000 10.000000 6.250387 -3.200000 10.100000 5.777226 -3.200000 10.200000 5.324064 -3.200000 10.300000 4.890903 -3.200000 10.400000 4.477741 -3.200000 10.500000 4.084580 -3.200000 10.600000 3.711418 -3.200000 10.700000 3.358257 -3.200000 10.800000 3.025095 -3.200000 10.900000 2.711934 -3.200000 11.000000 2.418772 -3.200000 11.100000 2.145611 -3.200000 11.200000 1.892449 -3.200000 11.300000 1.659288 -3.200000 11.400000 1.446126 -3.200000 11.500000 1.252965 -3.200000 11.600000 1.079803 -3.200000 11.700000 0.926642 -3.200000 11.800000 0.793480 -3.200000 11.900000 0.680319 -3.200000 12.000000 0.587157 -3.200000 12.100000 0.513996 -3.200000 12.200000 0.460834 -3.200000 12.300000 0.427673 -3.200000 12.400000 0.414511 -3.200000 12.500000 0.421349 -3.200000 12.600000 0.448188 -3.200000 12.700000 0.495026 -3.200000 12.800000 0.561865 -3.200000 12.900000 0.648703 -3.200000 13.000000 0.755542 -3.200000 13.100000 0.882380 -3.200000 13.200000 1.029219 -3.200000 13.300000 1.196057 -3.200000 13.400000 1.382896 -3.200000 13.500000 1.589734 -3.200000 13.600000 1.816573 -3.200000 13.700000 2.063411 -3.200000 13.800000 2.330250 -3.200000 13.900000 2.617088 -3.200000 14.000000 2.923927 -3.200000 14.100000 3.250765 -3.200000 14.200000 3.597604 -3.200000 14.300000 3.964442 -3.200000 14.400000 4.351281 -3.200000 14.500000 4.758119 -3.200000 14.600000 5.184958 -3.200000 14.700000 5.631796 -3.200000 14.800000 6.098635 -3.200000 14.900000 6.585473 -3.200000 15.000000 7.092312 -3.100000 -5.000000 295.395967 -3.100000 -4.900000 291.970913 -3.100000 -4.800000 288.565860 -3.100000 -4.700000 285.180807 -3.100000 -4.600000 281.815753 -3.100000 -4.500000 278.470700 -3.100000 -4.400000 275.145647 -3.100000 -4.300000 271.840594 -3.100000 -4.200000 268.555540 -3.100000 -4.100000 265.290487 -3.100000 -4.000000 262.045434 -3.100000 -3.900000 258.820381 -3.100000 -3.800000 255.615327 -3.100000 -3.700000 252.430274 -3.100000 -3.600000 249.265221 -3.100000 -3.500000 246.120167 -3.100000 -3.400000 242.995114 -3.100000 -3.300000 239.890061 -3.100000 -3.200000 236.805008 -3.100000 -3.100000 233.739954 -3.100000 -3.000000 230.694901 -3.100000 -2.900000 227.669848 -3.100000 -2.800000 224.664795 -3.100000 -2.700000 221.679741 -3.100000 -2.600000 218.714688 -3.100000 -2.500000 215.769635 -3.100000 -2.400000 212.844581 -3.100000 -2.300000 209.939528 -3.100000 -2.200000 207.054475 -3.100000 -2.100000 204.189422 -3.100000 -2.000000 201.344368 -3.100000 -1.900000 198.519315 -3.100000 -1.800000 195.714262 -3.100000 -1.700000 192.929209 -3.100000 -1.600000 190.164155 -3.100000 -1.500000 187.419102 -3.100000 -1.400000 184.694049 -3.100000 -1.300000 181.988995 -3.100000 -1.200000 179.303942 -3.100000 -1.100000 176.638889 -3.100000 -1.000000 173.993836 -3.100000 -0.900000 171.368782 -3.100000 -0.800000 168.763729 -3.100000 -0.700000 166.178676 -3.100000 -0.600000 163.613623 -3.100000 -0.500000 161.068569 -3.100000 -0.400000 158.543516 -3.100000 -0.300000 156.038463 -3.100000 -0.200000 153.553409 -3.100000 -0.100000 151.088356 -3.100000 -0.000000 148.643303 -3.100000 0.100000 146.218250 -3.100000 0.200000 143.813196 -3.100000 0.300000 141.428143 -3.100000 0.400000 139.063090 -3.100000 0.500000 136.718037 -3.100000 0.600000 134.392983 -3.100000 0.700000 132.087930 -3.100000 0.800000 129.802877 -3.100000 0.900000 127.537823 -3.100000 1.000000 125.292770 -3.100000 1.100000 123.067717 -3.100000 1.200000 120.862664 -3.100000 1.300000 118.677610 -3.100000 1.400000 116.512557 -3.100000 1.500000 114.367504 -3.100000 1.600000 112.242451 -3.100000 1.700000 110.137397 -3.100000 1.800000 108.052344 -3.100000 1.900000 105.987291 -3.100000 2.000000 103.942237 -3.100000 2.100000 101.917184 -3.100000 2.200000 99.912131 -3.100000 2.300000 97.927078 -3.100000 2.400000 95.962024 -3.100000 2.500000 94.016971 -3.100000 2.600000 92.091918 -3.100000 2.700000 90.186865 -3.100000 2.800000 88.301811 -3.100000 2.900000 86.436758 -3.100000 3.000000 84.591705 -3.100000 3.100000 82.766651 -3.100000 3.200000 80.961598 -3.100000 3.300000 79.176545 -3.100000 3.400000 77.411492 -3.100000 3.500000 75.666438 -3.100000 3.600000 73.941385 -3.100000 3.700000 72.236332 -3.100000 3.800000 70.551278 -3.100000 3.900000 68.886225 -3.100000 4.000000 67.241172 -3.100000 4.100000 65.616119 -3.100000 4.200000 64.011065 -3.100000 4.300000 62.426012 -3.100000 4.400000 60.860959 -3.100000 4.500000 59.315906 -3.100000 4.600000 57.790852 -3.100000 4.700000 56.285799 -3.100000 4.800000 54.800746 -3.100000 4.900000 53.335692 -3.100000 5.000000 51.890639 -3.100000 5.100000 50.465586 -3.100000 5.200000 49.060533 -3.100000 5.300000 47.675479 -3.100000 5.400000 46.310426 -3.100000 5.500000 44.965373 -3.100000 5.600000 43.640320 -3.100000 5.700000 42.335266 -3.100000 5.800000 41.050213 -3.100000 5.900000 39.785160 -3.100000 6.000000 38.540106 -3.100000 6.100000 37.315053 -3.100000 6.200000 36.110000 -3.100000 6.300000 34.924947 -3.100000 6.400000 33.759893 -3.100000 6.500000 32.614840 -3.100000 6.600000 31.489787 -3.100000 6.700000 30.384734 -3.100000 6.800000 29.299680 -3.100000 6.900000 28.234627 -3.100000 7.000000 27.189574 -3.100000 7.100000 26.164520 -3.100000 7.200000 25.159467 -3.100000 7.300000 24.174414 -3.100000 7.400000 23.209361 -3.100000 7.500000 22.264307 -3.100000 7.600000 21.339254 -3.100000 7.700000 20.434201 -3.100000 7.800000 19.549148 -3.100000 7.900000 18.684094 -3.100000 8.000000 17.839041 -3.100000 8.100000 17.013988 -3.100000 8.200000 16.208934 -3.100000 8.300000 15.423881 -3.100000 8.400000 14.658828 -3.100000 8.500000 13.913775 -3.100000 8.600000 13.188721 -3.100000 8.700000 12.483668 -3.100000 8.800000 11.798615 -3.100000 8.900000 11.133562 -3.100000 9.000000 10.488508 -3.100000 9.100000 9.863455 -3.100000 9.200000 9.258402 -3.100000 9.300000 8.673348 -3.100000 9.400000 8.108295 -3.100000 9.500000 7.563242 -3.100000 9.600000 7.038189 -3.100000 9.700000 6.533135 -3.100000 9.800000 6.048082 -3.100000 9.900000 5.583029 -3.100000 10.000000 5.137976 -3.100000 10.100000 4.712922 -3.100000 10.200000 4.307869 -3.100000 10.300000 3.922816 -3.100000 10.400000 3.557762 -3.100000 10.500000 3.212709 -3.100000 10.600000 2.887656 -3.100000 10.700000 2.582603 -3.100000 10.800000 2.297549 -3.100000 10.900000 2.032496 -3.100000 11.000000 1.787443 -3.100000 11.100000 1.562390 -3.100000 11.200000 1.357336 -3.100000 11.300000 1.172283 -3.100000 11.400000 1.007230 -3.100000 11.500000 0.862176 -3.100000 11.600000 0.737123 -3.100000 11.700000 0.632070 -3.100000 11.800000 0.547017 -3.100000 11.900000 0.481963 -3.100000 12.000000 0.436910 -3.100000 12.100000 0.411857 -3.100000 12.200000 0.406803 -3.100000 12.300000 0.421750 -3.100000 12.400000 0.456697 -3.100000 12.500000 0.511644 -3.100000 12.600000 0.586590 -3.100000 12.700000 0.681537 -3.100000 12.800000 0.796484 -3.100000 12.900000 0.931431 -3.100000 13.000000 1.086377 -3.100000 13.100000 1.261324 -3.100000 13.200000 1.456271 -3.100000 13.300000 1.671217 -3.100000 13.400000 1.906164 -3.100000 13.500000 2.161111 -3.100000 13.600000 2.436058 -3.100000 13.700000 2.731004 -3.100000 13.800000 3.045951 -3.100000 13.900000 3.380898 -3.100000 14.000000 3.735845 -3.100000 14.100000 4.110791 -3.100000 14.200000 4.505738 -3.100000 14.300000 4.920685 -3.100000 14.400000 5.355631 -3.100000 14.500000 5.810578 -3.100000 14.600000 6.285525 -3.100000 14.700000 6.780472 -3.100000 14.800000 7.295418 -3.100000 14.900000 7.830365 -3.100000 15.000000 8.385312 -3.000000 -5.000000 287.366412 -3.000000 -4.900000 283.988951 -3.000000 -4.800000 280.631489 -3.000000 -4.700000 277.294027 -3.000000 -4.600000 273.976565 -3.000000 -4.500000 270.679104 -3.000000 -4.400000 267.401642 -3.000000 -4.300000 264.144180 -3.000000 -4.200000 260.906718 -3.000000 -4.100000 257.689256 -3.000000 -4.000000 254.491795 -3.000000 -3.900000 251.314333 -3.000000 -3.800000 248.156871 -3.000000 -3.700000 245.019409 -3.000000 -3.600000 241.901948 -3.000000 -3.500000 238.804486 -3.000000 -3.400000 235.727024 -3.000000 -3.300000 232.669562 -3.000000 -3.200000 229.632101 -3.000000 -3.100000 226.614639 -3.000000 -3.000000 223.617177 -3.000000 -2.900000 220.639715 -3.000000 -2.800000 217.682253 -3.000000 -2.700000 214.744792 -3.000000 -2.600000 211.827330 -3.000000 -2.500000 208.929868 -3.000000 -2.400000 206.052406 -3.000000 -2.300000 203.194945 -3.000000 -2.200000 200.357483 -3.000000 -2.100000 197.540021 -3.000000 -2.000000 194.742559 -3.000000 -1.900000 191.965097 -3.000000 -1.800000 189.207636 -3.000000 -1.700000 186.470174 -3.000000 -1.600000 183.752712 -3.000000 -1.500000 181.055250 -3.000000 -1.400000 178.377789 -3.000000 -1.300000 175.720327 -3.000000 -1.200000 173.082865 -3.000000 -1.100000 170.465403 -3.000000 -1.000000 167.867941 -3.000000 -0.900000 165.290480 -3.000000 -0.800000 162.733018 -3.000000 -0.700000 160.195556 -3.000000 -0.600000 157.678094 -3.000000 -0.500000 155.180633 -3.000000 -0.400000 152.703171 -3.000000 -0.300000 150.245709 -3.000000 -0.200000 147.808247 -3.000000 -0.100000 145.390785 -3.000000 -0.000000 142.993324 -3.000000 0.100000 140.615862 -3.000000 0.200000 138.258400 -3.000000 0.300000 135.920938 -3.000000 0.400000 133.603477 -3.000000 0.500000 131.306015 -3.000000 0.600000 129.028553 -3.000000 0.700000 126.771091 -3.000000 0.800000 124.533630 -3.000000 0.900000 122.316168 -3.000000 1.000000 120.118706 -3.000000 1.100000 117.941244 -3.000000 1.200000 115.783782 -3.000000 1.300000 113.646321 -3.000000 1.400000 111.528859 -3.000000 1.500000 109.431397 -3.000000 1.600000 107.353935 -3.000000 1.700000 105.296474 -3.000000 1.800000 103.259012 -3.000000 1.900000 101.241550 -3.000000 2.000000 99.244088 -3.000000 2.100000 97.266626 -3.000000 2.200000 95.309165 -3.000000 2.300000 93.371703 -3.000000 2.400000 91.454241 -3.000000 2.500000 89.556779 -3.000000 2.600000 87.679318 -3.000000 2.700000 85.821856 -3.000000 2.800000 83.984394 -3.000000 2.900000 82.166932 -3.000000 3.000000 80.369470 -3.000000 3.100000 78.592009 -3.000000 3.200000 76.834547 -3.000000 3.300000 75.097085 -3.000000 3.400000 73.379623 -3.000000 3.500000 71.682162 -3.000000 3.600000 70.004700 -3.000000 3.700000 68.347238 -3.000000 3.800000 66.709776 -3.000000 3.900000 65.092314 -3.000000 4.000000 63.494853 -3.000000 4.100000 61.917391 -3.000000 4.200000 60.359929 -3.000000 4.300000 58.822467 -3.000000 4.400000 57.305006 -3.000000 4.500000 55.807544 -3.000000 4.600000 54.330082 -3.000000 4.700000 52.872620 -3.000000 4.800000 51.435159 -3.000000 4.900000 50.017697 -3.000000 5.000000 48.620235 -3.000000 5.100000 47.242773 -3.000000 5.200000 45.885311 -3.000000 5.300000 44.547850 -3.000000 5.400000 43.230388 -3.000000 5.500000 41.932926 -3.000000 5.600000 40.655464 -3.000000 5.700000 39.398003 -3.000000 5.800000 38.160541 -3.000000 5.900000 36.943079 -3.000000 6.000000 35.745617 -3.000000 6.100000 34.568155 -3.000000 6.200000 33.410694 -3.000000 6.300000 32.273232 -3.000000 6.400000 31.155770 -3.000000 6.500000 30.058308 -3.000000 6.600000 28.980847 -3.000000 6.700000 27.923385 -3.000000 6.800000 26.885923 -3.000000 6.900000 25.868461 -3.000000 7.000000 24.870999 -3.000000 7.100000 23.893538 -3.000000 7.200000 22.936076 -3.000000 7.300000 21.998614 -3.000000 7.400000 21.081152 -3.000000 7.500000 20.183691 -3.000000 7.600000 19.306229 -3.000000 7.700000 18.448767 -3.000000 7.800000 17.611305 -3.000000 7.900000 16.793843 -3.000000 8.000000 15.996382 -3.000000 8.100000 15.218920 -3.000000 8.200000 14.461458 -3.000000 8.300000 13.723996 -3.000000 8.400000 13.006535 -3.000000 8.500000 12.309073 -3.000000 8.600000 11.631611 -3.000000 8.700000 10.974149 -3.000000 8.800000 10.336688 -3.000000 8.900000 9.719226 -3.000000 9.000000 9.121764 -3.000000 9.100000 8.544302 -3.000000 9.200000 7.986840 -3.000000 9.300000 7.449379 -3.000000 9.400000 6.931917 -3.000000 9.500000 6.434455 -3.000000 9.600000 5.956993 -3.000000 9.700000 5.499532 -3.000000 9.800000 5.062070 -3.000000 9.900000 4.644608 -3.000000 10.000000 4.247146 -3.000000 10.100000 3.869684 -3.000000 10.200000 3.512223 -3.000000 10.300000 3.174761 -3.000000 10.400000 2.857299 -3.000000 10.500000 2.559837 -3.000000 10.600000 2.282376 -3.000000 10.700000 2.024914 -3.000000 10.800000 1.787452 -3.000000 10.900000 1.569990 -3.000000 11.000000 1.372528 -3.000000 11.100000 1.195067 -3.000000 11.200000 1.037605 -3.000000 11.300000 0.900143 -3.000000 11.400000 0.782681 -3.000000 11.500000 0.685220 -3.000000 11.600000 0.607758 -3.000000 11.700000 0.550296 -3.000000 11.800000 0.512834 -3.000000 11.900000 0.495372 -3.000000 12.000000 0.497911 -3.000000 12.100000 0.520449 -3.000000 12.200000 0.562987 -3.000000 12.300000 0.625525 -3.000000 12.400000 0.708064 -3.000000 12.500000 0.810602 -3.000000 12.600000 0.933140 -3.000000 12.700000 1.075678 -3.000000 12.800000 1.238217 -3.000000 12.900000 1.420755 -3.000000 13.000000 1.623293 -3.000000 13.100000 1.845831 -3.000000 13.200000 2.088369 -3.000000 13.300000 2.350908 -3.000000 13.400000 2.633446 -3.000000 13.500000 2.935984 -3.000000 13.600000 3.258522 -3.000000 13.700000 3.601061 -3.000000 13.800000 3.963599 -3.000000 13.900000 4.346137 -3.000000 14.000000 4.748675 -3.000000 14.100000 5.171213 -3.000000 14.200000 5.613752 -3.000000 14.300000 6.076290 -3.000000 14.400000 6.558828 -3.000000 14.500000 7.061366 -3.000000 14.600000 7.583905 -3.000000 14.700000 8.126443 -3.000000 14.800000 8.688981 -3.000000 14.900000 9.271519 -3.000000 15.000000 9.874057 -2.900000 -5.000000 279.631385 -2.900000 -4.900000 276.300998 -2.900000 -4.800000 272.990611 -2.900000 -4.700000 269.700224 -2.900000 -4.600000 266.429837 -2.900000 -4.500000 263.179450 -2.900000 -4.400000 259.949063 -2.900000 -4.300000 256.738676 -2.900000 -4.200000 253.548289 -2.900000 -4.100000 250.377902 -2.900000 -4.000000 247.227515 -2.900000 -3.900000 244.097128 -2.900000 -3.800000 240.986741 -2.900000 -3.700000 237.896354 -2.900000 -3.600000 234.825967 -2.900000 -3.500000 231.775580 -2.900000 -3.400000 228.745193 -2.900000 -3.300000 225.734806 -2.900000 -3.200000 222.744419 -2.900000 -3.100000 219.774032 -2.900000 -3.000000 216.823645 -2.900000 -2.900000 213.893258 -2.900000 -2.800000 210.982871 -2.900000 -2.700000 208.092484 -2.900000 -2.600000 205.222097 -2.900000 -2.500000 202.371710 -2.900000 -2.400000 199.541323 -2.900000 -2.300000 196.730936 -2.900000 -2.200000 193.940549 -2.900000 -2.100000 191.170162 -2.900000 -2.000000 188.419775 -2.900000 -1.900000 185.689388 -2.900000 -1.800000 182.979001 -2.900000 -1.700000 180.288614 -2.900000 -1.600000 177.618227 -2.900000 -1.500000 174.967840 -2.900000 -1.400000 172.337453 -2.900000 -1.300000 169.727066 -2.900000 -1.200000 167.136679 -2.900000 -1.100000 164.566292 -2.900000 -1.000000 162.015905 -2.900000 -0.900000 159.485518 -2.900000 -0.800000 156.975131 -2.900000 -0.700000 154.484744 -2.900000 -0.600000 152.014357 -2.900000 -0.500000 149.563970 -2.900000 -0.400000 147.133583 -2.900000 -0.300000 144.723196 -2.900000 -0.200000 142.332809 -2.900000 -0.100000 139.962422 -2.900000 -0.000000 137.612035 -2.900000 0.100000 135.281648 -2.900000 0.200000 132.971261 -2.900000 0.300000 130.680874 -2.900000 0.400000 128.410487 -2.900000 0.500000 126.160100 -2.900000 0.600000 123.929713 -2.900000 0.700000 121.719326 -2.900000 0.800000 119.528939 -2.900000 0.900000 117.358552 -2.900000 1.000000 115.208165 -2.900000 1.100000 113.077778 -2.900000 1.200000 110.967391 -2.900000 1.300000 108.877004 -2.900000 1.400000 106.806617 -2.900000 1.500000 104.756230 -2.900000 1.600000 102.725843 -2.900000 1.700000 100.715456 -2.900000 1.800000 98.725068 -2.900000 1.900000 96.754681 -2.900000 2.000000 94.804294 -2.900000 2.100000 92.873907 -2.900000 2.200000 90.963520 -2.900000 2.300000 89.073133 -2.900000 2.400000 87.202746 -2.900000 2.500000 85.352359 -2.900000 2.600000 83.521972 -2.900000 2.700000 81.711585 -2.900000 2.800000 79.921198 -2.900000 2.900000 78.150811 -2.900000 3.000000 76.400424 -2.900000 3.100000 74.670037 -2.900000 3.200000 72.959650 -2.900000 3.300000 71.269263 -2.900000 3.400000 69.598876 -2.900000 3.500000 67.948489 -2.900000 3.600000 66.318102 -2.900000 3.700000 64.707715 -2.900000 3.800000 63.117328 -2.900000 3.900000 61.546941 -2.900000 4.000000 59.996554 -2.900000 4.100000 58.466167 -2.900000 4.200000 56.955780 -2.900000 4.300000 55.465393 -2.900000 4.400000 53.995006 -2.900000 4.500000 52.544619 -2.900000 4.600000 51.114232 -2.900000 4.700000 49.703845 -2.900000 4.800000 48.313458 -2.900000 4.900000 46.943071 -2.900000 5.000000 45.592684 -2.900000 5.100000 44.262297 -2.900000 5.200000 42.951910 -2.900000 5.300000 41.661523 -2.900000 5.400000 40.391136 -2.900000 5.500000 39.140749 -2.900000 5.600000 37.910362 -2.900000 5.700000 36.699975 -2.900000 5.800000 35.509588 -2.900000 5.900000 34.339201 -2.900000 6.000000 33.188814 -2.900000 6.100000 32.058427 -2.900000 6.200000 30.948040 -2.900000 6.300000 29.857653 -2.900000 6.400000 28.787266 -2.900000 6.500000 27.736879 -2.900000 6.600000 26.706492 -2.900000 6.700000 25.696105 -2.900000 6.800000 24.705718 -2.900000 6.900000 23.735331 -2.900000 7.000000 22.784944 -2.900000 7.100000 21.854557 -2.900000 7.200000 20.944170 -2.900000 7.300000 20.053783 -2.900000 7.400000 19.183396 -2.900000 7.500000 18.333009 -2.900000 7.600000 17.502622 -2.900000 7.700000 16.692235 -2.900000 7.800000 15.901848 -2.900000 7.900000 15.131461 -2.900000 8.000000 14.381074 -2.900000 8.100000 13.650687 -2.900000 8.200000 12.940300 -2.900000 8.300000 12.249913 -2.900000 8.400000 11.579526 -2.900000 8.500000 10.929139 -2.900000 8.600000 10.298752 -2.900000 8.700000 9.688365 -2.900000 8.800000 9.097977 -2.900000 8.900000 8.527590 -2.900000 9.000000 7.977203 -2.900000 9.100000 7.446816 -2.900000 9.200000 6.936429 -2.900000 9.300000 6.446042 -2.900000 9.400000 5.975655 -2.900000 9.500000 5.525268 -2.900000 9.600000 5.094881 -2.900000 9.700000 4.684494 -2.900000 9.800000 4.294107 -2.900000 9.900000 3.923720 -2.900000 10.000000 3.573333 -2.900000 10.100000 3.242946 -2.900000 10.200000 2.932559 -2.900000 10.300000 2.642172 -2.900000 10.400000 2.371785 -2.900000 10.500000 2.121398 -2.900000 10.600000 1.891011 -2.900000 10.700000 1.680624 -2.900000 10.800000 1.490237 -2.900000 10.900000 1.319850 -2.900000 11.000000 1.169463 -2.900000 11.100000 1.039076 -2.900000 11.200000 0.928689 -2.900000 11.300000 0.838302 -2.900000 11.400000 0.767915 -2.900000 11.500000 0.717528 -2.900000 11.600000 0.687141 -2.900000 11.700000 0.676754 -2.900000 11.800000 0.686367 -2.900000 11.900000 0.715980 -2.900000 12.000000 0.765593 -2.900000 12.100000 0.835206 -2.900000 12.200000 0.924819 -2.900000 12.300000 1.034432 -2.900000 12.400000 1.164045 -2.900000 12.500000 1.313658 -2.900000 12.600000 1.483271 -2.900000 12.700000 1.672884 -2.900000 12.800000 1.882497 -2.900000 12.900000 2.112110 -2.900000 13.000000 2.361723 -2.900000 13.100000 2.631336 -2.900000 13.200000 2.920949 -2.900000 13.300000 3.230562 -2.900000 13.400000 3.560175 -2.900000 13.500000 3.909788 -2.900000 13.600000 4.279401 -2.900000 13.700000 4.669014 -2.900000 13.800000 5.078627 -2.900000 13.900000 5.508240 -2.900000 14.000000 5.957853 -2.900000 14.100000 6.427466 -2.900000 14.200000 6.917079 -2.900000 14.300000 7.426692 -2.900000 14.400000 7.956305 -2.900000 14.500000 8.505918 -2.900000 14.600000 9.075531 -2.900000 14.700000 9.665144 -2.900000 14.800000 10.274757 -2.900000 14.900000 10.904370 -2.900000 15.000000 11.553983 -2.800000 -5.000000 272.185411 -2.800000 -4.900000 268.901582 -2.800000 -4.800000 265.637753 -2.800000 -4.700000 262.393924 -2.800000 -4.600000 259.170095 -2.800000 -4.500000 255.966266 -2.800000 -4.400000 252.782437 -2.800000 -4.300000 249.618608 -2.800000 -4.200000 246.474779 -2.800000 -4.100000 243.350950 -2.800000 -4.000000 240.247121 -2.800000 -3.900000 237.163292 -2.800000 -3.800000 234.099463 -2.800000 -3.700000 231.055634 -2.800000 -3.600000 228.031805 -2.800000 -3.500000 225.027976 -2.800000 -3.400000 222.044147 -2.800000 -3.300000 219.080318 -2.800000 -3.200000 216.136489 -2.800000 -3.100000 213.212660 -2.800000 -3.000000 210.308831 -2.800000 -2.900000 207.425002 -2.800000 -2.800000 204.561173 -2.800000 -2.700000 201.717344 -2.800000 -2.600000 198.893515 -2.800000 -2.500000 196.089686 -2.800000 -2.400000 193.305857 -2.800000 -2.300000 190.542028 -2.800000 -2.200000 187.798199 -2.800000 -2.100000 185.074370 -2.800000 -2.000000 182.370541 -2.800000 -1.900000 179.686712 -2.800000 -1.800000 177.022883 -2.800000 -1.700000 174.379054 -2.800000 -1.600000 171.755225 -2.800000 -1.500000 169.151396 -2.800000 -1.400000 166.567567 -2.800000 -1.300000 164.003738 -2.800000 -1.200000 161.459909 -2.800000 -1.100000 158.936080 -2.800000 -1.000000 156.432251 -2.800000 -0.900000 153.948422 -2.800000 -0.800000 151.484593 -2.800000 -0.700000 149.040764 -2.800000 -0.600000 146.616935 -2.800000 -0.500000 144.213106 -2.800000 -0.400000 141.829277 -2.800000 -0.300000 139.465448 -2.800000 -0.200000 137.121619 -2.800000 -0.100000 134.797790 -2.800000 -0.000000 132.493961 -2.800000 0.100000 130.210132 -2.800000 0.200000 127.946303 -2.800000 0.300000 125.702474 -2.800000 0.400000 123.478645 -2.800000 0.500000 121.274816 -2.800000 0.600000 119.090987 -2.800000 0.700000 116.927158 -2.800000 0.800000 114.783329 -2.800000 0.900000 112.659500 -2.800000 1.000000 110.555671 -2.800000 1.100000 108.471842 -2.800000 1.200000 106.408013 -2.800000 1.300000 104.364184 -2.800000 1.400000 102.340355 -2.800000 1.500000 100.336526 -2.800000 1.600000 98.352697 -2.800000 1.700000 96.388868 -2.800000 1.800000 94.445039 -2.800000 1.900000 92.521210 -2.800000 2.000000 90.617381 -2.800000 2.100000 88.733552 -2.800000 2.200000 86.869723 -2.800000 2.300000 85.025894 -2.800000 2.400000 83.202065 -2.800000 2.500000 81.398236 -2.800000 2.600000 79.614407 -2.800000 2.700000 77.850578 -2.800000 2.800000 76.106749 -2.800000 2.900000 74.382920 -2.800000 3.000000 72.679091 -2.800000 3.100000 70.995262 -2.800000 3.200000 69.331433 -2.800000 3.300000 67.687604 -2.800000 3.400000 66.063775 -2.800000 3.500000 64.459946 -2.800000 3.600000 62.876117 -2.800000 3.700000 61.312288 -2.800000 3.800000 59.768459 -2.800000 3.900000 58.244630 -2.800000 4.000000 56.740801 -2.800000 4.100000 55.256972 -2.800000 4.200000 53.793143 -2.800000 4.300000 52.349314 -2.800000 4.400000 50.925485 -2.800000 4.500000 49.521656 -2.800000 4.600000 48.137827 -2.800000 4.700000 46.773998 -2.800000 4.800000 45.430169 -2.800000 4.900000 44.106340 -2.800000 5.000000 42.802511 -2.800000 5.100000 41.518682 -2.800000 5.200000 40.254853 -2.800000 5.300000 39.011024 -2.800000 5.400000 37.787195 -2.800000 5.500000 36.583366 -2.800000 5.600000 35.399537 -2.800000 5.700000 34.235709 -2.800000 5.800000 33.091880 -2.800000 5.900000 31.968051 -2.800000 6.000000 30.864222 -2.800000 6.100000 29.780393 -2.800000 6.200000 28.716564 -2.800000 6.300000 27.672735 -2.800000 6.400000 26.648906 -2.800000 6.500000 25.645077 -2.800000 6.600000 24.661248 -2.800000 6.700000 23.697419 -2.800000 6.800000 22.753590 -2.800000 6.900000 21.829761 -2.800000 7.000000 20.925932 -2.800000 7.100000 20.042103 -2.800000 7.200000 19.178274 -2.800000 7.300000 18.334445 -2.800000 7.400000 17.510616 -2.800000 7.500000 16.706787 -2.800000 7.600000 15.922958 -2.800000 7.700000 15.159129 -2.800000 7.800000 14.415300 -2.800000 7.900000 13.691471 -2.800000 8.000000 12.987642 -2.800000 8.100000 12.303813 -2.800000 8.200000 11.639984 -2.800000 8.300000 10.996155 -2.800000 8.400000 10.372326 -2.800000 8.500000 9.768497 -2.800000 8.600000 9.184668 -2.800000 8.700000 8.620839 -2.800000 8.800000 8.077010 -2.800000 8.900000 7.553181 -2.800000 9.000000 7.049352 -2.800000 9.100000 6.565523 -2.800000 9.200000 6.101694 -2.800000 9.300000 5.657865 -2.800000 9.400000 5.234036 -2.800000 9.500000 4.830207 -2.800000 9.600000 4.446378 -2.800000 9.700000 4.082549 -2.800000 9.800000 3.738720 -2.800000 9.900000 3.414891 -2.800000 10.000000 3.111062 -2.800000 10.100000 2.827233 -2.800000 10.200000 2.563404 -2.800000 10.300000 2.319575 -2.800000 10.400000 2.095746 -2.800000 10.500000 1.891917 -2.800000 10.600000 1.708088 -2.800000 10.700000 1.544259 -2.800000 10.800000 1.400430 -2.800000 10.900000 1.276601 -2.800000 11.000000 1.172772 -2.800000 11.100000 1.088943 -2.800000 11.200000 1.025114 -2.800000 11.300000 0.981285 -2.800000 11.400000 0.957456 -2.800000 11.500000 0.953627 -2.800000 11.600000 0.969798 -2.800000 11.700000 1.005969 -2.800000 11.800000 1.062140 -2.800000 11.900000 1.138311 -2.800000 12.000000 1.234482 -2.800000 12.100000 1.350653 -2.800000 12.200000 1.486824 -2.800000 12.300000 1.642995 -2.800000 12.400000 1.819166 -2.800000 12.500000 2.015337 -2.800000 12.600000 2.231508 -2.800000 12.700000 2.467679 -2.800000 12.800000 2.723850 -2.800000 12.900000 3.000021 -2.800000 13.000000 3.296192 -2.800000 13.100000 3.612363 -2.800000 13.200000 3.948534 -2.800000 13.300000 4.304705 -2.800000 13.400000 4.680876 -2.800000 13.500000 5.077047 -2.800000 13.600000 5.493218 -2.800000 13.700000 5.929389 -2.800000 13.800000 6.385560 -2.800000 13.900000 6.861731 -2.800000 14.000000 7.357902 -2.800000 14.100000 7.874073 -2.800000 14.200000 8.410244 -2.800000 14.300000 8.966415 -2.800000 14.400000 9.542586 -2.800000 14.500000 10.138757 -2.800000 14.600000 10.754928 -2.800000 14.700000 11.391099 -2.800000 14.800000 12.047270 -2.800000 14.900000 12.723441 -2.800000 15.000000 13.419612 -2.700000 -5.000000 265.022122 -2.700000 -4.900000 261.784334 -2.700000 -4.800000 258.566547 -2.700000 -4.700000 255.368759 -2.700000 -4.600000 252.190971 -2.700000 -4.500000 249.033184 -2.700000 -4.400000 245.895396 -2.700000 -4.300000 242.777608 -2.700000 -4.200000 239.679821 -2.700000 -4.100000 236.602033 -2.700000 -4.000000 233.544245 -2.700000 -3.900000 230.506457 -2.700000 -3.800000 227.488670 -2.700000 -3.700000 224.490882 -2.700000 -3.600000 221.513094 -2.700000 -3.500000 218.555307 -2.700000 -3.400000 215.617519 -2.700000 -3.300000 212.699731 -2.700000 -3.200000 209.801943 -2.700000 -3.100000 206.924156 -2.700000 -3.000000 204.066368 -2.700000 -2.900000 201.228580 -2.700000 -2.800000 198.410793 -2.700000 -2.700000 195.613005 -2.700000 -2.600000 192.835217 -2.700000 -2.500000 190.077430 -2.700000 -2.400000 187.339642 -2.700000 -2.300000 184.621854 -2.700000 -2.200000 181.924066 -2.700000 -2.100000 179.246279 -2.700000 -2.000000 176.588491 -2.700000 -1.900000 173.950703 -2.700000 -1.800000 171.332916 -2.700000 -1.700000 168.735128 -2.700000 -1.600000 166.157340 -2.700000 -1.500000 163.599552 -2.700000 -1.400000 161.061765 -2.700000 -1.300000 158.543977 -2.700000 -1.200000 156.046189 -2.700000 -1.100000 153.568402 -2.700000 -1.000000 151.110614 -2.700000 -0.900000 148.672826 -2.700000 -0.800000 146.255039 -2.700000 -0.700000 143.857251 -2.700000 -0.600000 141.479463 -2.700000 -0.500000 139.121675 -2.700000 -0.400000 136.783888 -2.700000 -0.300000 134.466100 -2.700000 -0.200000 132.168312 -2.700000 -0.100000 129.890525 -2.700000 -0.000000 127.632737 -2.700000 0.100000 125.394949 -2.700000 0.200000 123.177161 -2.700000 0.300000 120.979374 -2.700000 0.400000 118.801586 -2.700000 0.500000 116.643798 -2.700000 0.600000 114.506011 -2.700000 0.700000 112.388223 -2.700000 0.800000 110.290435 -2.700000 0.900000 108.212647 -2.700000 1.000000 106.154860 -2.700000 1.100000 104.117072 -2.700000 1.200000 102.099284 -2.700000 1.300000 100.101497 -2.700000 1.400000 98.123709 -2.700000 1.500000 96.165921 -2.700000 1.600000 94.228134 -2.700000 1.700000 92.310346 -2.700000 1.800000 90.412558 -2.700000 1.900000 88.534770 -2.700000 2.000000 86.676983 -2.700000 2.100000 84.839195 -2.700000 2.200000 83.021407 -2.700000 2.300000 81.223620 -2.700000 2.400000 79.445832 -2.700000 2.500000 77.688044 -2.700000 2.600000 75.950256 -2.700000 2.700000 74.232469 -2.700000 2.800000 72.534681 -2.700000 2.900000 70.856893 -2.700000 3.000000 69.199106 -2.700000 3.100000 67.561318 -2.700000 3.200000 65.943530 -2.700000 3.300000 64.345743 -2.700000 3.400000 62.767955 -2.700000 3.500000 61.210167 -2.700000 3.600000 59.672379 -2.700000 3.700000 58.154592 -2.700000 3.800000 56.656804 -2.700000 3.900000 55.179016 -2.700000 4.000000 53.721229 -2.700000 4.100000 52.283441 -2.700000 4.200000 50.865653 -2.700000 4.300000 49.467865 -2.700000 4.400000 48.090078 -2.700000 4.500000 46.732290 -2.700000 4.600000 45.394502 -2.700000 4.700000 44.076715 -2.700000 4.800000 42.778927 -2.700000 4.900000 41.501139 -2.700000 5.000000 40.243352 -2.700000 5.100000 39.005564 -2.700000 5.200000 37.787776 -2.700000 5.300000 36.589988 -2.700000 5.400000 35.412201 -2.700000 5.500000 34.254413 -2.700000 5.600000 33.116625 -2.700000 5.700000 31.998838 -2.700000 5.800000 30.901050 -2.700000 5.900000 29.823262 -2.700000 6.000000 28.765474 -2.700000 6.100000 27.727687 -2.700000 6.200000 26.709899 -2.700000 6.300000 25.712111 -2.700000 6.400000 24.734324 -2.700000 6.500000 23.776536 -2.700000 6.600000 22.838748 -2.700000 6.700000 21.920960 -2.700000 6.800000 21.023173 -2.700000 6.900000 20.145385 -2.700000 7.000000 19.287597 -2.700000 7.100000 18.449810 -2.700000 7.200000 17.632022 -2.700000 7.300000 16.834234 -2.700000 7.400000 16.056447 -2.700000 7.500000 15.298659 -2.700000 7.600000 14.560871 -2.700000 7.700000 13.843083 -2.700000 7.800000 13.145296 -2.700000 7.900000 12.467508 -2.700000 8.000000 11.809720 -2.700000 8.100000 11.171933 -2.700000 8.200000 10.554145 -2.700000 8.300000 9.956357 -2.700000 8.400000 9.378569 -2.700000 8.500000 8.820782 -2.700000 8.600000 8.282994 -2.700000 8.700000 7.765206 -2.700000 8.800000 7.267419 -2.700000 8.900000 6.789631 -2.700000 9.000000 6.331843 -2.700000 9.100000 5.894056 -2.700000 9.200000 5.476268 -2.700000 9.300000 5.078480 -2.700000 9.400000 4.700692 -2.700000 9.500000 4.342905 -2.700000 9.600000 4.005117 -2.700000 9.700000 3.687329 -2.700000 9.800000 3.389542 -2.700000 9.900000 3.111754 -2.700000 10.000000 2.853966 -2.700000 10.100000 2.616178 -2.700000 10.200000 2.398391 -2.700000 10.300000 2.200603 -2.700000 10.400000 2.022815 -2.700000 10.500000 1.865028 -2.700000 10.600000 1.727240 -2.700000 10.700000 1.609452 -2.700000 10.800000 1.511664 -2.700000 10.900000 1.433877 -2.700000 11.000000 1.376089 -2.700000 11.100000 1.338301 -2.700000 11.200000 1.320514 -2.700000 11.300000 1.322726 -2.700000 11.400000 1.344938 -2.700000 11.500000 1.387151 -2.700000 11.600000 1.449363 -2.700000 11.700000 1.531575 -2.700000 11.800000 1.633787 -2.700000 11.900000 1.756000 -2.700000 12.000000 1.898212 -2.700000 12.100000 2.060424 -2.700000 12.200000 2.242637 -2.700000 12.300000 2.444849 -2.700000 12.400000 2.667061 -2.700000 12.500000 2.909273 -2.700000 12.600000 3.171486 -2.700000 12.700000 3.453698 -2.700000 12.800000 3.755910 -2.700000 12.900000 4.078123 -2.700000 13.000000 4.420335 -2.700000 13.100000 4.782547 -2.700000 13.200000 5.164760 -2.700000 13.300000 5.566972 -2.700000 13.400000 5.989184 -2.700000 13.500000 6.431396 -2.700000 13.600000 6.893609 -2.700000 13.700000 7.375821 -2.700000 13.800000 7.878033 -2.700000 13.900000 8.400246 -2.700000 14.000000 8.942458 -2.700000 14.100000 9.504670 -2.700000 14.200000 10.086882 -2.700000 14.300000 10.689095 -2.700000 14.400000 11.311307 -2.700000 14.500000 11.953519 -2.700000 14.600000 12.615732 -2.700000 14.700000 13.297944 -2.700000 14.800000 14.000156 -2.700000 14.900000 14.722369 -2.700000 15.000000 15.464581 -2.600000 -5.000000 258.134291 -2.600000 -4.900000 254.942028 -2.600000 -4.800000 251.769765 -2.600000 -4.700000 248.617502 -2.600000 -4.600000 245.485239 -2.600000 -4.500000 242.372976 -2.600000 -4.400000 239.280712 -2.600000 -4.300000 236.208449 -2.600000 -4.200000 233.156186 -2.600000 -4.100000 230.123923 -2.600000 -4.000000 227.111660 -2.600000 -3.900000 224.119397 -2.600000 -3.800000 221.147133 -2.600000 -3.700000 218.194870 -2.600000 -3.600000 215.262607 -2.600000 -3.500000 212.350344 -2.600000 -3.400000 209.458081 -2.600000 -3.300000 206.585818 -2.600000 -3.200000 203.733554 -2.600000 -3.100000 200.901291 -2.600000 -3.000000 198.089028 -2.600000 -2.900000 195.296765 -2.600000 -2.800000 192.524502 -2.600000 -2.700000 189.772239 -2.600000 -2.600000 187.039976 -2.600000 -2.500000 184.327712 -2.600000 -2.400000 181.635449 -2.600000 -2.300000 178.963186 -2.600000 -2.200000 176.310923 -2.600000 -2.100000 173.678660 -2.600000 -2.000000 171.066397 -2.600000 -1.900000 168.474133 -2.600000 -1.800000 165.901870 -2.600000 -1.700000 163.349607 -2.600000 -1.600000 160.817344 -2.600000 -1.500000 158.305081 -2.600000 -1.400000 155.812818 -2.600000 -1.300000 153.340554 -2.600000 -1.200000 150.888291 -2.600000 -1.100000 148.456028 -2.600000 -1.000000 146.043765 -2.600000 -0.900000 143.651502 -2.600000 -0.800000 141.279239 -2.600000 -0.700000 138.926975 -2.600000 -0.600000 136.594712 -2.600000 -0.500000 134.282449 -2.600000 -0.400000 131.990186 -2.600000 -0.300000 129.717923 -2.600000 -0.200000 127.465660 -2.600000 -0.100000 125.233397 -2.600000 -0.000000 123.021133 -2.600000 0.100000 120.828870 -2.600000 0.200000 118.656607 -2.600000 0.300000 116.504344 -2.600000 0.400000 114.372081 -2.600000 0.500000 112.259818 -2.600000 0.600000 110.167554 -2.600000 0.700000 108.095291 -2.600000 0.800000 106.043028 -2.600000 0.900000 104.010765 -2.600000 1.000000 101.998502 -2.600000 1.100000 100.006239 -2.600000 1.200000 98.033975 -2.600000 1.300000 96.081712 -2.600000 1.400000 94.149449 -2.600000 1.500000 92.237186 -2.600000 1.600000 90.344923 -2.600000 1.700000 88.472660 -2.600000 1.800000 86.620396 -2.600000 1.900000 84.788133 -2.600000 2.000000 82.975870 -2.600000 2.100000 81.183607 -2.600000 2.200000 79.411344 -2.600000 2.300000 77.659081 -2.600000 2.400000 75.926818 -2.600000 2.500000 74.214554 -2.600000 2.600000 72.522291 -2.600000 2.700000 70.850028 -2.600000 2.800000 69.197765 -2.600000 2.900000 67.565502 -2.600000 3.000000 65.953239 -2.600000 3.100000 64.360975 -2.600000 3.200000 62.788712 -2.600000 3.300000 61.236449 -2.600000 3.400000 59.704186 -2.600000 3.500000 58.191923 -2.600000 3.600000 56.699660 -2.600000 3.700000 55.227396 -2.600000 3.800000 53.775133 -2.600000 3.900000 52.342870 -2.600000 4.000000 50.930607 -2.600000 4.100000 49.538344 -2.600000 4.200000 48.166081 -2.600000 4.300000 46.813817 -2.600000 4.400000 45.481554 -2.600000 4.500000 44.169291 -2.600000 4.600000 42.877028 -2.600000 4.700000 41.604765 -2.600000 4.800000 40.352502 -2.600000 4.900000 39.120239 -2.600000 5.000000 37.907975 -2.600000 5.100000 36.715712 -2.600000 5.200000 35.543449 -2.600000 5.300000 34.391186 -2.600000 5.400000 33.258923 -2.600000 5.500000 32.146660 -2.600000 5.600000 31.054396 -2.600000 5.700000 29.982133 -2.600000 5.800000 28.929870 -2.600000 5.900000 27.897607 -2.600000 6.000000 26.885344 -2.600000 6.100000 25.893081 -2.600000 6.200000 24.920817 -2.600000 6.300000 23.968554 -2.600000 6.400000 23.036291 -2.600000 6.500000 22.124028 -2.600000 6.600000 21.231765 -2.600000 6.700000 20.359502 -2.600000 6.800000 19.507238 -2.600000 6.900000 18.674975 -2.600000 7.000000 17.862712 -2.600000 7.100000 17.070449 -2.600000 7.200000 16.298186 -2.600000 7.300000 15.545923 -2.600000 7.400000 14.813659 -2.600000 7.500000 14.101396 -2.600000 7.600000 13.409133 -2.600000 7.700000 12.736870 -2.600000 7.800000 12.084607 -2.600000 7.900000 11.452344 -2.600000 8.000000 10.840081 -2.600000 8.100000 10.247817 -2.600000 8.200000 9.675554 -2.600000 8.300000 9.123291 -2.600000 8.400000 8.591028 -2.600000 8.500000 8.078765 -2.600000 8.600000 7.586502 -2.600000 8.700000 7.114238 -2.600000 8.800000 6.661975 -2.600000 8.900000 6.229712 -2.600000 9.000000 5.817449 -2.600000 9.100000 5.425186 -2.600000 9.200000 5.052923 -2.600000 9.300000 4.700659 -2.600000 9.400000 4.368396 -2.600000 9.500000 4.056133 -2.600000 9.600000 3.763870 -2.600000 9.700000 3.491607 -2.600000 9.800000 3.239344 -2.600000 9.900000 3.007080 -2.600000 10.000000 2.794817 -2.600000 10.100000 2.602554 -2.600000 10.200000 2.430291 -2.600000 10.300000 2.278028 -2.600000 10.400000 2.145765 -2.600000 10.500000 2.033502 -2.600000 10.600000 1.941238 -2.600000 10.700000 1.868975 -2.600000 10.800000 1.816712 -2.600000 10.900000 1.784449 -2.600000 11.000000 1.772186 -2.600000 11.100000 1.779923 -2.600000 11.200000 1.807659 -2.600000 11.300000 1.855396 -2.600000 11.400000 1.923133 -2.600000 11.500000 2.010870 -2.600000 11.600000 2.118607 -2.600000 11.700000 2.246344 -2.600000 11.800000 2.394080 -2.600000 11.900000 2.561817 -2.600000 12.000000 2.749554 -2.600000 12.100000 2.957291 -2.600000 12.200000 3.185028 -2.600000 12.300000 3.432765 -2.600000 12.400000 3.700501 -2.600000 12.500000 3.988238 -2.600000 12.600000 4.295975 -2.600000 12.700000 4.623712 -2.600000 12.800000 4.971449 -2.600000 12.900000 5.339186 -2.600000 13.000000 5.726923 -2.600000 13.100000 6.134659 -2.600000 13.200000 6.562396 -2.600000 13.300000 7.010133 -2.600000 13.400000 7.477870 -2.600000 13.500000 7.965607 -2.600000 13.600000 8.473344 -2.600000 13.700000 9.001080 -2.600000 13.800000 9.548817 -2.600000 13.900000 10.116554 -2.600000 14.000000 10.704291 -2.600000 14.100000 11.312028 -2.600000 14.200000 11.939765 -2.600000 14.300000 12.587501 -2.600000 14.400000 13.255238 -2.600000 14.500000 13.942975 -2.600000 14.600000 14.650712 -2.600000 14.700000 15.378449 -2.600000 14.800000 16.126186 -2.600000 14.900000 16.893922 -2.600000 15.000000 17.681659 -2.500000 -5.000000 251.513863 -2.500000 -4.900000 248.366607 -2.500000 -4.800000 245.239352 -2.500000 -4.700000 242.132097 -2.500000 -4.600000 239.044841 -2.500000 -4.500000 235.977586 -2.500000 -4.400000 232.930331 -2.500000 -4.300000 229.903075 -2.500000 -4.200000 226.895820 -2.500000 -4.100000 223.908565 -2.500000 -4.000000 220.941309 -2.500000 -3.900000 217.994054 -2.500000 -3.800000 215.066798 -2.500000 -3.700000 212.159543 -2.500000 -3.600000 209.272288 -2.500000 -3.500000 206.405032 -2.500000 -3.400000 203.557777 -2.500000 -3.300000 200.730522 -2.500000 -3.200000 197.923266 -2.500000 -3.100000 195.136011 -2.500000 -3.000000 192.368756 -2.500000 -2.900000 189.621500 -2.500000 -2.800000 186.894245 -2.500000 -2.700000 184.186990 -2.500000 -2.600000 181.499734 -2.500000 -2.500000 178.832479 -2.500000 -2.400000 176.185224 -2.500000 -2.300000 173.557968 -2.500000 -2.200000 170.950713 -2.500000 -2.100000 168.363457 -2.500000 -2.000000 165.796202 -2.500000 -1.900000 163.248947 -2.500000 -1.800000 160.721691 -2.500000 -1.700000 158.214436 -2.500000 -1.600000 155.727181 -2.500000 -1.500000 153.259925 -2.500000 -1.400000 150.812670 -2.500000 -1.300000 148.385415 -2.500000 -1.200000 145.978159 -2.500000 -1.100000 143.590904 -2.500000 -1.000000 141.223649 -2.500000 -0.900000 138.876393 -2.500000 -0.800000 136.549138 -2.500000 -0.700000 134.241883 -2.500000 -0.600000 131.954627 -2.500000 -0.500000 129.687372 -2.500000 -0.400000 127.440116 -2.500000 -0.300000 125.212861 -2.500000 -0.200000 123.005606 -2.500000 -0.100000 120.818350 -2.500000 -0.000000 118.651095 -2.500000 0.100000 116.503840 -2.500000 0.200000 114.376584 -2.500000 0.300000 112.269329 -2.500000 0.400000 110.182074 -2.500000 0.500000 108.114818 -2.500000 0.600000 106.067563 -2.500000 0.700000 104.040308 -2.500000 0.800000 102.033052 -2.500000 0.900000 100.045797 -2.500000 1.000000 98.078542 -2.500000 1.100000 96.131286 -2.500000 1.200000 94.204031 -2.500000 1.300000 92.296776 -2.500000 1.400000 90.409520 -2.500000 1.500000 88.542265 -2.500000 1.600000 86.695009 -2.500000 1.700000 84.867754 -2.500000 1.800000 83.060499 -2.500000 1.900000 81.273243 -2.500000 2.000000 79.505988 -2.500000 2.100000 77.758733 -2.500000 2.200000 76.031477 -2.500000 2.300000 74.324222 -2.500000 2.400000 72.636967 -2.500000 2.500000 70.969711 -2.500000 2.600000 69.322456 -2.500000 2.700000 67.695201 -2.500000 2.800000 66.087945 -2.500000 2.900000 64.500690 -2.500000 3.000000 62.933435 -2.500000 3.100000 61.386179 -2.500000 3.200000 59.858924 -2.500000 3.300000 58.351668 -2.500000 3.400000 56.864413 -2.500000 3.500000 55.397158 -2.500000 3.600000 53.949902 -2.500000 3.700000 52.522647 -2.500000 3.800000 51.115392 -2.500000 3.900000 49.728136 -2.500000 4.000000 48.360881 -2.500000 4.100000 47.013626 -2.500000 4.200000 45.686370 -2.500000 4.300000 44.379115 -2.500000 4.400000 43.091860 -2.500000 4.500000 41.824604 -2.500000 4.600000 40.577349 -2.500000 4.700000 39.350094 -2.500000 4.800000 38.142838 -2.500000 4.900000 36.955583 -2.500000 5.000000 35.788327 -2.500000 5.100000 34.641072 -2.500000 5.200000 33.513817 -2.500000 5.300000 32.406561 -2.500000 5.400000 31.319306 -2.500000 5.500000 30.252051 -2.500000 5.600000 29.204795 -2.500000 5.700000 28.177540 -2.500000 5.800000 27.170285 -2.500000 5.900000 26.183029 -2.500000 6.000000 25.215774 -2.500000 6.100000 24.268519 -2.500000 6.200000 23.341263 -2.500000 6.300000 22.434008 -2.500000 6.400000 21.546753 -2.500000 6.500000 20.679497 -2.500000 6.600000 19.832242 -2.500000 6.700000 19.004987 -2.500000 6.800000 18.197731 -2.500000 6.900000 17.410476 -2.500000 7.000000 16.643220 -2.500000 7.100000 15.895965 -2.500000 7.200000 15.168710 -2.500000 7.300000 14.461454 -2.500000 7.400000 13.774199 -2.500000 7.500000 13.106944 -2.500000 7.600000 12.459688 -2.500000 7.700000 11.832433 -2.500000 7.800000 11.225178 -2.500000 7.900000 10.637922 -2.500000 8.000000 10.070667 -2.500000 8.100000 9.523412 -2.500000 8.200000 8.996156 -2.500000 8.300000 8.488901 -2.500000 8.400000 8.001646 -2.500000 8.500000 7.534390 -2.500000 8.600000 7.087135 -2.500000 8.700000 6.659879 -2.500000 8.800000 6.252624 -2.500000 8.900000 5.865369 -2.500000 9.000000 5.498113 -2.500000 9.100000 5.150858 -2.500000 9.200000 4.823603 -2.500000 9.300000 4.516347 -2.500000 9.400000 4.229092 -2.500000 9.500000 3.961837 -2.500000 9.600000 3.714581 -2.500000 9.700000 3.487326 -2.500000 9.800000 3.280071 -2.500000 9.900000 3.092815 -2.500000 10.000000 2.925560 -2.500000 10.100000 2.778305 -2.500000 10.200000 2.651049 -2.500000 10.300000 2.543794 -2.500000 10.400000 2.456538 -2.500000 10.500000 2.389283 -2.500000 10.600000 2.342028 -2.500000 10.700000 2.314772 -2.500000 10.800000 2.307517 -2.500000 10.900000 2.320262 -2.500000 11.000000 2.353006 -2.500000 11.100000 2.405751 -2.500000 11.200000 2.478496 -2.500000 11.300000 2.571240 -2.500000 11.400000 2.683985 -2.500000 11.500000 2.816730 -2.500000 11.600000 2.969474 -2.500000 11.700000 3.142219 -2.500000 11.800000 3.334964 -2.500000 11.900000 3.547708 -2.500000 12.000000 3.780453 -2.500000 12.100000 4.033198 -2.500000 12.200000 4.305942 -2.500000 12.300000 4.598687 -2.500000 12.400000 4.911431 -2.500000 12.500000 5.244176 -2.500000 12.600000 5.596921 -2.500000 12.700000 5.969665 -2.500000 12.800000 6.362410 -2.500000 12.900000 6.775155 -2.500000 13.000000 7.207899 -2.500000 13.100000 7.660644 -2.500000 13.200000 8.133389 -2.500000 13.300000 8.626133 -2.500000 13.400000 9.138878 -2.500000 13.500000 9.671623 -2.500000 13.600000 10.224367 -2.500000 13.700000 10.797112 -2.500000 13.800000 11.389857 -2.500000 13.900000 12.002601 -2.500000 14.000000 12.635346 -2.500000 14.100000 13.288090 -2.500000 14.200000 13.960835 -2.500000 14.300000 14.653580 -2.500000 14.400000 15.366324 -2.500000 14.500000 16.099069 -2.500000 14.600000 16.851814 -2.500000 14.700000 17.624558 -2.500000 14.800000 18.417303 -2.500000 14.900000 19.230048 -2.500000 15.000000 20.062792 -2.400000 -5.000000 245.151999 -2.400000 -4.900000 242.049235 -2.400000 -4.800000 238.966471 -2.400000 -4.700000 235.903706 -2.400000 -4.600000 232.860942 -2.400000 -4.500000 229.838178 -2.400000 -4.400000 226.835414 -2.400000 -4.300000 223.852649 -2.400000 -4.200000 220.889885 -2.400000 -4.100000 217.947121 -2.400000 -4.000000 215.024356 -2.400000 -3.900000 212.121592 -2.400000 -3.800000 209.238828 -2.400000 -3.700000 206.376064 -2.400000 -3.600000 203.533299 -2.400000 -3.500000 200.710535 -2.400000 -3.400000 197.907771 -2.400000 -3.300000 195.125006 -2.400000 -3.200000 192.362242 -2.400000 -3.100000 189.619478 -2.400000 -3.000000 186.896714 -2.400000 -2.900000 184.193949 -2.400000 -2.800000 181.511185 -2.400000 -2.700000 178.848421 -2.400000 -2.600000 176.205657 -2.400000 -2.500000 173.582892 -2.400000 -2.400000 170.980128 -2.400000 -2.300000 168.397364 -2.400000 -2.200000 165.834599 -2.400000 -2.100000 163.291835 -2.400000 -2.000000 160.769071 -2.400000 -1.900000 158.266307 -2.400000 -1.800000 155.783542 -2.400000 -1.700000 153.320778 -2.400000 -1.600000 150.878014 -2.400000 -1.500000 148.455249 -2.400000 -1.400000 146.052485 -2.400000 -1.300000 143.669721 -2.400000 -1.200000 141.306957 -2.400000 -1.100000 138.964192 -2.400000 -1.000000 136.641428 -2.400000 -0.900000 134.338664 -2.400000 -0.800000 132.055899 -2.400000 -0.700000 129.793135 -2.400000 -0.600000 127.550371 -2.400000 -0.500000 125.327607 -2.400000 -0.400000 123.124842 -2.400000 -0.300000 120.942078 -2.400000 -0.200000 118.779314 -2.400000 -0.100000 116.636549 -2.400000 -0.000000 114.513785 -2.400000 0.100000 112.411021 -2.400000 0.200000 110.328257 -2.400000 0.300000 108.265492 -2.400000 0.400000 106.222728 -2.400000 0.500000 104.199964 -2.400000 0.600000 102.197200 -2.400000 0.700000 100.214435 -2.400000 0.800000 98.251671 -2.400000 0.900000 96.308907 -2.400000 1.000000 94.386142 -2.400000 1.100000 92.483378 -2.400000 1.200000 90.600614 -2.400000 1.300000 88.737850 -2.400000 1.400000 86.895085 -2.400000 1.500000 85.072321 -2.400000 1.600000 83.269557 -2.400000 1.700000 81.486792 -2.400000 1.800000 79.724028 -2.400000 1.900000 77.981264 -2.400000 2.000000 76.258500 -2.400000 2.100000 74.555735 -2.400000 2.200000 72.872971 -2.400000 2.300000 71.210207 -2.400000 2.400000 69.567442 -2.400000 2.500000 67.944678 -2.400000 2.600000 66.341914 -2.400000 2.700000 64.759150 -2.400000 2.800000 63.196385 -2.400000 2.900000 61.653621 -2.400000 3.000000 60.130857 -2.400000 3.100000 58.628092 -2.400000 3.200000 57.145328 -2.400000 3.300000 55.682564 -2.400000 3.400000 54.239800 -2.400000 3.500000 52.817035 -2.400000 3.600000 51.414271 -2.400000 3.700000 50.031507 -2.400000 3.800000 48.668743 -2.400000 3.900000 47.325978 -2.400000 4.000000 46.003214 -2.400000 4.100000 44.700450 -2.400000 4.200000 43.417685 -2.400000 4.300000 42.154921 -2.400000 4.400000 40.912157 -2.400000 4.500000 39.689393 -2.400000 4.600000 38.486628 -2.400000 4.700000 37.303864 -2.400000 4.800000 36.141100 -2.400000 4.900000 34.998335 -2.400000 5.000000 33.875571 -2.400000 5.100000 32.772807 -2.400000 5.200000 31.690043 -2.400000 5.300000 30.627278 -2.400000 5.400000 29.584514 -2.400000 5.500000 28.561750 -2.400000 5.600000 27.558985 -2.400000 5.700000 26.576221 -2.400000 5.800000 25.613457 -2.400000 5.900000 24.670693 -2.400000 6.000000 23.747928 -2.400000 6.100000 22.845164 -2.400000 6.200000 21.962400 -2.400000 6.300000 21.099635 -2.400000 6.400000 20.256871 -2.400000 6.500000 19.434107 -2.400000 6.600000 18.631343 -2.400000 6.700000 17.848578 -2.400000 6.800000 17.085814 -2.400000 6.900000 16.343050 -2.400000 7.000000 15.620286 -2.400000 7.100000 14.917521 -2.400000 7.200000 14.234757 -2.400000 7.300000 13.571993 -2.400000 7.400000 12.929228 -2.400000 7.500000 12.306464 -2.400000 7.600000 11.703700 -2.400000 7.700000 11.120936 -2.400000 7.800000 10.558171 -2.400000 7.900000 10.015407 -2.400000 8.000000 9.492643 -2.400000 8.100000 8.989878 -2.400000 8.200000 8.507114 -2.400000 8.300000 8.044350 -2.400000 8.400000 7.601586 -2.400000 8.500000 7.178821 -2.400000 8.600000 6.776057 -2.400000 8.700000 6.393293 -2.400000 8.800000 6.030528 -2.400000 8.900000 5.687764 -2.400000 9.000000 5.365000 -2.400000 9.100000 5.062236 -2.400000 9.200000 4.779471 -2.400000 9.300000 4.516707 -2.400000 9.400000 4.273943 -2.400000 9.500000 4.051178 -2.400000 9.600000 3.848414 -2.400000 9.700000 3.665650 -2.400000 9.800000 3.502886 -2.400000 9.900000 3.360121 -2.400000 10.000000 3.237357 -2.400000 10.100000 3.134593 -2.400000 10.200000 3.051828 -2.400000 10.300000 2.989064 -2.400000 10.400000 2.946300 -2.400000 10.500000 2.923536 -2.400000 10.600000 2.920771 -2.400000 10.700000 2.938007 -2.400000 10.800000 2.975243 -2.400000 10.900000 3.032479 -2.400000 11.000000 3.109714 -2.400000 11.100000 3.206950 -2.400000 11.200000 3.324186 -2.400000 11.300000 3.461421 -2.400000 11.400000 3.618657 -2.400000 11.500000 3.795893 -2.400000 11.600000 3.993129 -2.400000 11.700000 4.210364 -2.400000 11.800000 4.447600 -2.400000 11.900000 4.704836 -2.400000 12.000000 4.982071 -2.400000 12.100000 5.279307 -2.400000 12.200000 5.596543 -2.400000 12.300000 5.933779 -2.400000 12.400000 6.291014 -2.400000 12.500000 6.668250 -2.400000 12.600000 7.065486 -2.400000 12.700000 7.482721 -2.400000 12.800000 7.919957 -2.400000 12.900000 8.377193 -2.400000 13.000000 8.854429 -2.400000 13.100000 9.351664 -2.400000 13.200000 9.868900 -2.400000 13.300000 10.406136 -2.400000 13.400000 10.963371 -2.400000 13.500000 11.540607 -2.400000 13.600000 12.137843 -2.400000 13.700000 12.755079 -2.400000 13.800000 13.392314 -2.400000 13.900000 14.049550 -2.400000 14.000000 14.726786 -2.400000 14.100000 15.424022 -2.400000 14.200000 16.141257 -2.400000 14.300000 16.878493 -2.400000 14.400000 17.635729 -2.400000 14.500000 18.412964 -2.400000 14.600000 19.210200 -2.400000 14.700000 20.027436 -2.400000 14.800000 20.864672 -2.400000 14.900000 21.721907 -2.400000 15.000000 22.599143 -2.300000 -5.000000 239.039136 -2.300000 -4.900000 235.980346 -2.300000 -4.800000 232.941556 -2.300000 -4.700000 229.922767 -2.300000 -4.600000 226.923977 -2.300000 -4.500000 223.945187 -2.300000 -4.400000 220.986397 -2.300000 -4.300000 218.047607 -2.300000 -4.200000 215.128817 -2.300000 -4.100000 212.230027 -2.300000 -4.000000 209.351237 -2.300000 -3.900000 206.492447 -2.300000 -3.800000 203.653657 -2.300000 -3.700000 200.834867 -2.300000 -3.600000 198.036077 -2.300000 -3.500000 195.257287 -2.300000 -3.400000 192.498497 -2.300000 -3.300000 189.759707 -2.300000 -3.200000 187.040917 -2.300000 -3.100000 184.342127 -2.300000 -3.000000 181.663337 -2.300000 -2.900000 179.004547 -2.300000 -2.800000 176.365757 -2.300000 -2.700000 173.746968 -2.300000 -2.600000 171.148178 -2.300000 -2.500000 168.569388 -2.300000 -2.400000 166.010598 -2.300000 -2.300000 163.471808 -2.300000 -2.200000 160.953018 -2.300000 -2.100000 158.454228 -2.300000 -2.000000 155.975438 -2.300000 -1.900000 153.516648 -2.300000 -1.800000 151.077858 -2.300000 -1.700000 148.659068 -2.300000 -1.600000 146.260278 -2.300000 -1.500000 143.881488 -2.300000 -1.400000 141.522698 -2.300000 -1.300000 139.183908 -2.300000 -1.200000 136.865118 -2.300000 -1.100000 134.566328 -2.300000 -1.000000 132.287538 -2.300000 -0.900000 130.028748 -2.300000 -0.800000 127.789959 -2.300000 -0.700000 125.571169 -2.300000 -0.600000 123.372379 -2.300000 -0.500000 121.193589 -2.300000 -0.400000 119.034799 -2.300000 -0.300000 116.896009 -2.300000 -0.200000 114.777219 -2.300000 -0.100000 112.678429 -2.300000 -0.000000 110.599639 -2.300000 0.100000 108.540849 -2.300000 0.200000 106.502059 -2.300000 0.300000 104.483269 -2.300000 0.400000 102.484479 -2.300000 0.500000 100.505689 -2.300000 0.600000 98.546899 -2.300000 0.700000 96.608109 -2.300000 0.800000 94.689319 -2.300000 0.900000 92.790529 -2.300000 1.000000 90.911739 -2.300000 1.100000 89.052949 -2.300000 1.200000 87.214160 -2.300000 1.300000 85.395370 -2.300000 1.400000 83.596580 -2.300000 1.500000 81.817790 -2.300000 1.600000 80.059000 -2.300000 1.700000 78.320210 -2.300000 1.800000 76.601420 -2.300000 1.900000 74.902630 -2.300000 2.000000 73.223840 -2.300000 2.100000 71.565050 -2.300000 2.200000 69.926260 -2.300000 2.300000 68.307470 -2.300000 2.400000 66.708680 -2.300000 2.500000 65.129890 -2.300000 2.600000 63.571100 -2.300000 2.700000 62.032310 -2.300000 2.800000 60.513520 -2.300000 2.900000 59.014730 -2.300000 3.000000 57.535940 -2.300000 3.100000 56.077150 -2.300000 3.200000 54.638361 -2.300000 3.300000 53.219571 -2.300000 3.400000 51.820781 -2.300000 3.500000 50.441991 -2.300000 3.600000 49.083201 -2.300000 3.700000 47.744411 -2.300000 3.800000 46.425621 -2.300000 3.900000 45.126831 -2.300000 4.000000 43.848041 -2.300000 4.100000 42.589251 -2.300000 4.200000 41.350461 -2.300000 4.300000 40.131671 -2.300000 4.400000 38.932881 -2.300000 4.500000 37.754091 -2.300000 4.600000 36.595301 -2.300000 4.700000 35.456511 -2.300000 4.800000 34.337721 -2.300000 4.900000 33.238931 -2.300000 5.000000 32.160141 -2.300000 5.100000 31.101352 -2.300000 5.200000 30.062562 -2.300000 5.300000 29.043772 -2.300000 5.400000 28.044982 -2.300000 5.500000 27.066192 -2.300000 5.600000 26.107402 -2.300000 5.700000 25.168612 -2.300000 5.800000 24.249822 -2.300000 5.900000 23.351032 -2.300000 6.000000 22.472242 -2.300000 6.100000 21.613452 -2.300000 6.200000 20.774662 -2.300000 6.300000 19.955872 -2.300000 6.400000 19.157082 -2.300000 6.500000 18.378292 -2.300000 6.600000 17.619502 -2.300000 6.700000 16.880712 -2.300000 6.800000 16.161922 -2.300000 6.900000 15.463132 -2.300000 7.000000 14.784342 -2.300000 7.100000 14.125553 -2.300000 7.200000 13.486763 -2.300000 7.300000 12.867973 -2.300000 7.400000 12.269183 -2.300000 7.500000 11.690393 -2.300000 7.600000 11.131603 -2.300000 7.700000 10.592813 -2.300000 7.800000 10.074023 -2.300000 7.900000 9.575233 -2.300000 8.000000 9.096443 -2.300000 8.100000 8.637653 -2.300000 8.200000 8.198863 -2.300000 8.300000 7.780073 -2.300000 8.400000 7.381283 -2.300000 8.500000 7.002493 -2.300000 8.600000 6.643703 -2.300000 8.700000 6.304913 -2.300000 8.800000 5.986123 -2.300000 8.900000 5.687333 -2.300000 9.000000 5.408544 -2.300000 9.100000 5.149754 -2.300000 9.200000 4.910964 -2.300000 9.300000 4.692174 -2.300000 9.400000 4.493384 -2.300000 9.500000 4.314594 -2.300000 9.600000 4.155804 -2.300000 9.700000 4.017014 -2.300000 9.800000 3.898224 -2.300000 9.900000 3.799434 -2.300000 10.000000 3.720644 -2.300000 10.100000 3.661854 -2.300000 10.200000 3.623064 -2.300000 10.300000 3.604274 -2.300000 10.400000 3.605484 -2.300000 10.500000 3.626694 -2.300000 10.600000 3.667904 -2.300000 10.700000 3.729114 -2.300000 10.800000 3.810324 -2.300000 10.900000 3.911534 -2.300000 11.000000 4.032745 -2.300000 11.100000 4.173955 -2.300000 11.200000 4.335165 -2.300000 11.300000 4.516375 -2.300000 11.400000 4.717585 -2.300000 11.500000 4.938795 -2.300000 11.600000 5.180005 -2.300000 11.700000 5.441215 -2.300000 11.800000 5.722425 -2.300000 11.900000 6.023635 -2.300000 12.000000 6.344845 -2.300000 12.100000 6.686055 -2.300000 12.200000 7.047265 -2.300000 12.300000 7.428475 -2.300000 12.400000 7.829685 -2.300000 12.500000 8.250895 -2.300000 12.600000 8.692105 -2.300000 12.700000 9.153315 -2.300000 12.800000 9.634525 -2.300000 12.900000 10.135736 -2.300000 13.000000 10.656946 -2.300000 13.100000 11.198156 -2.300000 13.200000 11.759366 -2.300000 13.300000 12.340576 -2.300000 13.400000 12.941786 -2.300000 13.500000 13.562996 -2.300000 13.600000 14.204206 -2.300000 13.700000 14.865416 -2.300000 13.800000 15.546626 -2.300000 13.900000 16.247836 -2.300000 14.000000 16.969046 -2.300000 14.100000 17.710256 -2.300000 14.200000 18.471466 -2.300000 14.300000 19.252676 -2.300000 14.400000 20.053886 -2.300000 14.500000 20.875096 -2.300000 14.600000 21.716306 -2.300000 14.700000 22.577516 -2.300000 14.800000 23.458726 -2.300000 14.900000 24.359937 -2.300000 15.000000 25.281147 -2.200000 -5.000000 233.165042 -2.200000 -4.900000 230.149710 -2.200000 -4.800000 227.154378 -2.200000 -4.700000 224.179045 -2.200000 -4.600000 221.223713 -2.200000 -4.500000 218.288381 -2.200000 -4.400000 215.373048 -2.200000 -4.300000 212.477716 -2.200000 -4.200000 209.602384 -2.200000 -4.100000 206.747051 -2.200000 -4.000000 203.911719 -2.200000 -3.900000 201.096386 -2.200000 -3.800000 198.301054 -2.200000 -3.700000 195.525722 -2.200000 -3.600000 192.770389 -2.200000 -3.500000 190.035057 -2.200000 -3.400000 187.319725 -2.200000 -3.300000 184.624392 -2.200000 -3.200000 181.949060 -2.200000 -3.100000 179.293728 -2.200000 -3.000000 176.658395 -2.200000 -2.900000 174.043063 -2.200000 -2.800000 171.447731 -2.200000 -2.700000 168.872398 -2.200000 -2.600000 166.317066 -2.200000 -2.500000 163.781733 -2.200000 -2.400000 161.266401 -2.200000 -2.300000 158.771069 -2.200000 -2.200000 156.295736 -2.200000 -2.100000 153.840404 -2.200000 -2.000000 151.405072 -2.200000 -1.900000 148.989739 -2.200000 -1.800000 146.594407 -2.200000 -1.700000 144.219075 -2.200000 -1.600000 141.863742 -2.200000 -1.500000 139.528410 -2.200000 -1.400000 137.213078 -2.200000 -1.300000 134.917745 -2.200000 -1.200000 132.642413 -2.200000 -1.100000 130.387081 -2.200000 -1.000000 128.151748 -2.200000 -0.900000 125.936416 -2.200000 -0.800000 123.741083 -2.200000 -0.700000 121.565751 -2.200000 -0.600000 119.410419 -2.200000 -0.500000 117.275086 -2.200000 -0.400000 115.159754 -2.200000 -0.300000 113.064422 -2.200000 -0.200000 110.989089 -2.200000 -0.100000 108.933757 -2.200000 -0.000000 106.898425 -2.200000 0.100000 104.883092 -2.200000 0.200000 102.887760 -2.200000 0.300000 100.912428 -2.200000 0.400000 98.957095 -2.200000 0.500000 97.021763 -2.200000 0.600000 95.106431 -2.200000 0.700000 93.211098 -2.200000 0.800000 91.335766 -2.200000 0.900000 89.480433 -2.200000 1.000000 87.645101 -2.200000 1.100000 85.829769 -2.200000 1.200000 84.034436 -2.200000 1.300000 82.259104 -2.200000 1.400000 80.503772 -2.200000 1.500000 78.768439 -2.200000 1.600000 77.053107 -2.200000 1.700000 75.357775 -2.200000 1.800000 73.682442 -2.200000 1.900000 72.027110 -2.200000 2.000000 70.391778 -2.200000 2.100000 68.776445 -2.200000 2.200000 67.181113 -2.200000 2.300000 65.605780 -2.200000 2.400000 64.050448 -2.200000 2.500000 62.515116 -2.200000 2.600000 60.999783 -2.200000 2.700000 59.504451 -2.200000 2.800000 58.029119 -2.200000 2.900000 56.573786 -2.200000 3.000000 55.138454 -2.200000 3.100000 53.723122 -2.200000 3.200000 52.327789 -2.200000 3.300000 50.952457 -2.200000 3.400000 49.597125 -2.200000 3.500000 48.261792 -2.200000 3.600000 46.946460 -2.200000 3.700000 45.651128 -2.200000 3.800000 44.375795 -2.200000 3.900000 43.120463 -2.200000 4.000000 41.885130 -2.200000 4.100000 40.669798 -2.200000 4.200000 39.474466 -2.200000 4.300000 38.299133 -2.200000 4.400000 37.143801 -2.200000 4.500000 36.008469 -2.200000 4.600000 34.893136 -2.200000 4.700000 33.797804 -2.200000 4.800000 32.722472 -2.200000 4.900000 31.667139 -2.200000 5.000000 30.631807 -2.200000 5.100000 29.616475 -2.200000 5.200000 28.621142 -2.200000 5.300000 27.645810 -2.200000 5.400000 26.690477 -2.200000 5.500000 25.755145 -2.200000 5.600000 24.839813 -2.200000 5.700000 23.944480 -2.200000 5.800000 23.069148 -2.200000 5.900000 22.213816 -2.200000 6.000000 21.378483 -2.200000 6.100000 20.563151 -2.200000 6.200000 19.767819 -2.200000 6.300000 18.992486 -2.200000 6.400000 18.237154 -2.200000 6.500000 17.501822 -2.200000 6.600000 16.786489 -2.200000 6.700000 16.091157 -2.200000 6.800000 15.415825 -2.200000 6.900000 14.760492 -2.200000 7.000000 14.125160 -2.200000 7.100000 13.509827 -2.200000 7.200000 12.914495 -2.200000 7.300000 12.339163 -2.200000 7.400000 11.783830 -2.200000 7.500000 11.248498 -2.200000 7.600000 10.733166 -2.200000 7.700000 10.237833 -2.200000 7.800000 9.762501 -2.200000 7.900000 9.307169 -2.200000 8.000000 8.871836 -2.200000 8.100000 8.456504 -2.200000 8.200000 8.061172 -2.200000 8.300000 7.685839 -2.200000 8.400000 7.330507 -2.200000 8.500000 6.995175 -2.200000 8.600000 6.679842 -2.200000 8.700000 6.384510 -2.200000 8.800000 6.109177 -2.200000 8.900000 5.853845 -2.200000 9.000000 5.618513 -2.200000 9.100000 5.403180 -2.200000 9.200000 5.207848 -2.200000 9.300000 5.032516 -2.200000 9.400000 4.877183 -2.200000 9.500000 4.741851 -2.200000 9.600000 4.626519 -2.200000 9.700000 4.531186 -2.200000 9.800000 4.455854 -2.200000 9.900000 4.400522 -2.200000 10.000000 4.365189 -2.200000 10.100000 4.349857 -2.200000 10.200000 4.354524 -2.200000 10.300000 4.379192 -2.200000 10.400000 4.423860 -2.200000 10.500000 4.488527 -2.200000 10.600000 4.573195 -2.200000 10.700000 4.677863 -2.200000 10.800000 4.802530 -2.200000 10.900000 4.947198 -2.200000 11.000000 5.111866 -2.200000 11.100000 5.296533 -2.200000 11.200000 5.501201 -2.200000 11.300000 5.725869 -2.200000 11.400000 5.970536 -2.200000 11.500000 6.235204 -2.200000 11.600000 6.519872 -2.200000 11.700000 6.824539 -2.200000 11.800000 7.149207 -2.200000 11.900000 7.493874 -2.200000 12.000000 7.858542 -2.200000 12.100000 8.243210 -2.200000 12.200000 8.647877 -2.200000 12.300000 9.072545 -2.200000 12.400000 9.517213 -2.200000 12.500000 9.981880 -2.200000 12.600000 10.466548 -2.200000 12.700000 10.971216 -2.200000 12.800000 11.495883 -2.200000 12.900000 12.040551 -2.200000 13.000000 12.605219 -2.200000 13.100000 13.189886 -2.200000 13.200000 13.794554 -2.200000 13.300000 14.419221 -2.200000 13.400000 15.063889 -2.200000 13.500000 15.728557 -2.200000 13.600000 16.413224 -2.200000 13.700000 17.117892 -2.200000 13.800000 17.842560 -2.200000 13.900000 18.587227 -2.200000 14.000000 19.351895 -2.200000 14.100000 20.136563 -2.200000 14.200000 20.941230 -2.200000 14.300000 21.765898 -2.200000 14.400000 22.610566 -2.200000 14.500000 23.475233 -2.200000 14.600000 24.359901 -2.200000 14.700000 25.264569 -2.200000 14.800000 26.189236 -2.200000 14.900000 27.133904 -2.200000 15.000000 28.098571 -2.100000 -5.000000 227.518887 -2.100000 -4.900000 224.546496 -2.100000 -4.800000 221.594104 -2.100000 -4.700000 218.661713 -2.100000 -4.600000 215.749321 -2.100000 -4.500000 212.856930 -2.100000 -4.400000 209.984538 -2.100000 -4.300000 207.132147 -2.100000 -4.200000 204.299755 -2.100000 -4.100000 201.487364 -2.100000 -4.000000 198.694972 -2.100000 -3.900000 195.922581 -2.100000 -3.800000 193.170189 -2.100000 -3.700000 190.437798 -2.100000 -3.600000 187.725406 -2.100000 -3.500000 185.033015 -2.100000 -3.400000 182.360623 -2.100000 -3.300000 179.708232 -2.100000 -3.200000 177.075840 -2.100000 -3.100000 174.463449 -2.100000 -3.000000 171.871057 -2.100000 -2.900000 169.298666 -2.100000 -2.800000 166.746274 -2.100000 -2.700000 164.213883 -2.100000 -2.600000 161.701491 -2.100000 -2.500000 159.209100 -2.100000 -2.400000 156.736708 -2.100000 -2.300000 154.284317 -2.100000 -2.200000 151.851925 -2.100000 -2.100000 149.439534 -2.100000 -2.000000 147.047142 -2.100000 -1.900000 144.674751 -2.100000 -1.800000 142.322359 -2.100000 -1.700000 139.989968 -2.100000 -1.600000 137.677576 -2.100000 -1.500000 135.385185 -2.100000 -1.400000 133.112793 -2.100000 -1.300000 130.860402 -2.100000 -1.200000 128.628010 -2.100000 -1.100000 126.415619 -2.100000 -1.000000 124.223227 -2.100000 -0.900000 122.050836 -2.100000 -0.800000 119.898444 -2.100000 -0.700000 117.766053 -2.100000 -0.600000 115.653661 -2.100000 -0.500000 113.561270 -2.100000 -0.400000 111.488878 -2.100000 -0.300000 109.436487 -2.100000 -0.200000 107.404095 -2.100000 -0.100000 105.391704 -2.100000 -0.000000 103.399312 -2.100000 0.100000 101.426921 -2.100000 0.200000 99.474529 -2.100000 0.300000 97.542138 -2.100000 0.400000 95.629746 -2.100000 0.500000 93.737355 -2.100000 0.600000 91.864963 -2.100000 0.700000 90.012572 -2.100000 0.800000 88.180180 -2.100000 0.900000 86.367789 -2.100000 1.000000 84.575397 -2.100000 1.100000 82.803006 -2.100000 1.200000 81.050614 -2.100000 1.300000 79.318223 -2.100000 1.400000 77.605831 -2.100000 1.500000 75.913440 -2.100000 1.600000 74.241048 -2.100000 1.700000 72.588657 -2.100000 1.800000 70.956265 -2.100000 1.900000 69.343874 -2.100000 2.000000 67.751482 -2.100000 2.100000 66.179091 -2.100000 2.200000 64.626699 -2.100000 2.300000 63.094308 -2.100000 2.400000 61.581916 -2.100000 2.500000 60.089525 -2.100000 2.600000 58.617133 -2.100000 2.700000 57.164742 -2.100000 2.800000 55.732350 -2.100000 2.900000 54.319959 -2.100000 3.000000 52.927567 -2.100000 3.100000 51.555176 -2.100000 3.200000 50.202784 -2.100000 3.300000 48.870393 -2.100000 3.400000 47.558001 -2.100000 3.500000 46.265610 -2.100000 3.600000 44.993218 -2.100000 3.700000 43.740827 -2.100000 3.800000 42.508435 -2.100000 3.900000 41.296044 -2.100000 4.000000 40.103652 -2.100000 4.100000 38.931261 -2.100000 4.200000 37.778869 -2.100000 4.300000 36.646478 -2.100000 4.400000 35.534086 -2.100000 4.500000 34.441695 -2.100000 4.600000 33.369303 -2.100000 4.700000 32.316912 -2.100000 4.800000 31.284520 -2.100000 4.900000 30.272129 -2.100000 5.000000 29.279737 -2.100000 5.100000 28.307346 -2.100000 5.200000 27.354954 -2.100000 5.300000 26.422563 -2.100000 5.400000 25.510171 -2.100000 5.500000 24.617780 -2.100000 5.600000 23.745388 -2.100000 5.700000 22.892997 -2.100000 5.800000 22.060605 -2.100000 5.900000 21.248214 -2.100000 6.000000 20.455822 -2.100000 6.100000 19.683431 -2.100000 6.200000 18.931039 -2.100000 6.300000 18.198648 -2.100000 6.400000 17.486256 -2.100000 6.500000 16.793865 -2.100000 6.600000 16.121473 -2.100000 6.700000 15.469082 -2.100000 6.800000 14.836690 -2.100000 6.900000 14.224299 -2.100000 7.000000 13.631907 -2.100000 7.100000 13.059516 -2.100000 7.200000 12.507124 -2.100000 7.300000 11.974733 -2.100000 7.400000 11.462341 -2.100000 7.500000 10.969950 -2.100000 7.600000 10.497558 -2.100000 7.700000 10.045167 -2.100000 7.800000 9.612775 -2.100000 7.900000 9.200384 -2.100000 8.000000 8.807992 -2.100000 8.100000 8.435601 -2.100000 8.200000 8.083209 -2.100000 8.300000 7.750818 -2.100000 8.400000 7.438426 -2.100000 8.500000 7.146035 -2.100000 8.600000 6.873643 -2.100000 8.700000 6.621252 -2.100000 8.800000 6.388860 -2.100000 8.900000 6.176469 -2.100000 9.000000 5.984077 -2.100000 9.100000 5.811686 -2.100000 9.200000 5.659294 -2.100000 9.300000 5.526903 -2.100000 9.400000 5.414511 -2.100000 9.500000 5.322120 -2.100000 9.600000 5.249728 -2.100000 9.700000 5.197337 -2.100000 9.800000 5.164945 -2.100000 9.900000 5.152554 -2.100000 10.000000 5.160162 -2.100000 10.100000 5.187771 -2.100000 10.200000 5.235379 -2.100000 10.300000 5.302988 -2.100000 10.400000 5.390596 -2.100000 10.500000 5.498205 -2.100000 10.600000 5.625813 -2.100000 10.700000 5.773422 -2.100000 10.800000 5.941030 -2.100000 10.900000 6.128639 -2.100000 11.000000 6.336247 -2.100000 11.100000 6.563856 -2.100000 11.200000 6.811464 -2.100000 11.300000 7.079073 -2.100000 11.400000 7.366681 -2.100000 11.500000 7.674290 -2.100000 11.600000 8.001898 -2.100000 11.700000 8.349507 -2.100000 11.800000 8.717115 -2.100000 11.900000 9.104724 -2.100000 12.000000 9.512332 -2.100000 12.100000 9.939941 -2.100000 12.200000 10.387549 -2.100000 12.300000 10.855158 -2.100000 12.400000 11.342766 -2.100000 12.500000 11.850375 -2.100000 12.600000 12.377983 -2.100000 12.700000 12.925592 -2.100000 12.800000 13.493200 -2.100000 12.900000 14.080809 -2.100000 13.000000 14.688417 -2.100000 13.100000 15.316026 -2.100000 13.200000 15.963634 -2.100000 13.300000 16.631243 -2.100000 13.400000 17.318851 -2.100000 13.500000 18.026460 -2.100000 13.600000 18.754068 -2.100000 13.700000 19.501677 -2.100000 13.800000 20.269285 -2.100000 13.900000 21.056894 -2.100000 14.000000 21.864502 -2.100000 14.100000 22.692111 -2.100000 14.200000 23.539719 -2.100000 14.300000 24.407328 -2.100000 14.400000 25.294936 -2.100000 14.500000 26.202545 -2.100000 14.600000 27.130153 -2.100000 14.700000 28.077762 -2.100000 14.800000 29.045370 -2.100000 14.900000 30.032979 -2.100000 15.000000 31.040587 -2.000000 -5.000000 222.089316 -2.000000 -4.900000 219.159349 -2.000000 -4.800000 216.249381 -2.000000 -4.700000 213.359414 -2.000000 -4.600000 210.489447 -2.000000 -4.500000 207.639479 -2.000000 -4.400000 204.809512 -2.000000 -4.300000 201.999544 -2.000000 -4.200000 199.209577 -2.000000 -4.100000 196.439610 -2.000000 -4.000000 193.689642 -2.000000 -3.900000 190.959675 -2.000000 -3.800000 188.249707 -2.000000 -3.700000 185.559740 -2.000000 -3.600000 182.889773 -2.000000 -3.500000 180.239805 -2.000000 -3.400000 177.609838 -2.000000 -3.300000 174.999871 -2.000000 -3.200000 172.409903 -2.000000 -3.100000 169.839936 -2.000000 -3.000000 167.289968 -2.000000 -2.900000 164.760001 -2.000000 -2.800000 162.250034 -2.000000 -2.700000 159.760066 -2.000000 -2.600000 157.290099 -2.000000 -2.500000 154.840132 -2.000000 -2.400000 152.410164 -2.000000 -2.300000 150.000197 -2.000000 -2.200000 147.610229 -2.000000 -2.100000 145.240262 -2.000000 -2.000000 142.890295 -2.000000 -1.900000 140.560327 -2.000000 -1.800000 138.250360 -2.000000 -1.700000 135.960393 -2.000000 -1.600000 133.690425 -2.000000 -1.500000 131.440458 -2.000000 -1.400000 129.210490 -2.000000 -1.300000 127.000523 -2.000000 -1.200000 124.810556 -2.000000 -1.100000 122.640588 -2.000000 -1.000000 120.490621 -2.000000 -0.900000 118.360653 -2.000000 -0.800000 116.250686 -2.000000 -0.700000 114.160719 -2.000000 -0.600000 112.090751 -2.000000 -0.500000 110.040784 -2.000000 -0.400000 108.010817 -2.000000 -0.300000 106.000849 -2.000000 -0.200000 104.010882 -2.000000 -0.100000 102.040914 -2.000000 -0.000000 100.090947 -2.000000 0.100000 98.160980 -2.000000 0.200000 96.251012 -2.000000 0.300000 94.361045 -2.000000 0.400000 92.491078 -2.000000 0.500000 90.641110 -2.000000 0.600000 88.811143 -2.000000 0.700000 87.001175 -2.000000 0.800000 85.211208 -2.000000 0.900000 83.441241 -2.000000 1.000000 81.691273 -2.000000 1.100000 79.961306 -2.000000 1.200000 78.251338 -2.000000 1.300000 76.561371 -2.000000 1.400000 74.891404 -2.000000 1.500000 73.241436 -2.000000 1.600000 71.611469 -2.000000 1.700000 70.001502 -2.000000 1.800000 68.411534 -2.000000 1.900000 66.841567 -2.000000 2.000000 65.291599 -2.000000 2.100000 63.761632 -2.000000 2.200000 62.251665 -2.000000 2.300000 60.761697 -2.000000 2.400000 59.291730 -2.000000 2.500000 57.841763 -2.000000 2.600000 56.411795 -2.000000 2.700000 55.001828 -2.000000 2.800000 53.611860 -2.000000 2.900000 52.241893 -2.000000 3.000000 50.891926 -2.000000 3.100000 49.561958 -2.000000 3.200000 48.251991 -2.000000 3.300000 46.962024 -2.000000 3.400000 45.692056 -2.000000 3.500000 44.442089 -2.000000 3.600000 43.212121 -2.000000 3.700000 42.002154 -2.000000 3.800000 40.812187 -2.000000 3.900000 39.642219 -2.000000 4.000000 38.492252 -2.000000 4.100000 37.362284 -2.000000 4.200000 36.252317 -2.000000 4.300000 35.162350 -2.000000 4.400000 34.092382 -2.000000 4.500000 33.042415 -2.000000 4.600000 32.012448 -2.000000 4.700000 31.002480 -2.000000 4.800000 30.012513 -2.000000 4.900000 29.042545 -2.000000 5.000000 28.092578 -2.000000 5.100000 27.162611 -2.000000 5.200000 26.252643 -2.000000 5.300000 25.362676 -2.000000 5.400000 24.492709 -2.000000 5.500000 23.642741 -2.000000 5.600000 22.812774 -2.000000 5.700000 22.002806 -2.000000 5.800000 21.212839 -2.000000 5.900000 20.442872 -2.000000 6.000000 19.692904 -2.000000 6.100000 18.962937 -2.000000 6.200000 18.252970 -2.000000 6.300000 17.563002 -2.000000 6.400000 16.893035 -2.000000 6.500000 16.243067 -2.000000 6.600000 15.613100 -2.000000 6.700000 15.003133 -2.000000 6.800000 14.413165 -2.000000 6.900000 13.843198 -2.000000 7.000000 13.293230 -2.000000 7.100000 12.763263 -2.000000 7.200000 12.253296 -2.000000 7.300000 11.763328 -2.000000 7.400000 11.293361 -2.000000 7.500000 10.843394 -2.000000 7.600000 10.413426 -2.000000 7.700000 10.003459 -2.000000 7.800000 9.613491 -2.000000 7.900000 9.243524 -2.000000 8.000000 8.893557 -2.000000 8.100000 8.563589 -2.000000 8.200000 8.253622 -2.000000 8.300000 7.963655 -2.000000 8.400000 7.693687 -2.000000 8.500000 7.443720 -2.000000 8.600000 7.213752 -2.000000 8.700000 7.003785 -2.000000 8.800000 6.813818 -2.000000 8.900000 6.643850 -2.000000 9.000000 6.493883 -2.000000 9.100000 6.363916 -2.000000 9.200000 6.253948 -2.000000 9.300000 6.163981 -2.000000 9.400000 6.094013 -2.000000 9.500000 6.044046 -2.000000 9.600000 6.014079 -2.000000 9.700000 6.004111 -2.000000 9.800000 6.014144 -2.000000 9.900000 6.044176 -2.000000 10.000000 6.094209 -2.000000 10.100000 6.164242 -2.000000 10.200000 6.254274 -2.000000 10.300000 6.364307 -2.000000 10.400000 6.494340 -2.000000 10.500000 6.644372 -2.000000 10.600000 6.814405 -2.000000 10.700000 7.004437 -2.000000 10.800000 7.214470 -2.000000 10.900000 7.444503 -2.000000 11.000000 7.694535 -2.000000 11.100000 7.964568 -2.000000 11.200000 8.254601 -2.000000 11.300000 8.564633 -2.000000 11.400000 8.894666 -2.000000 11.500000 9.244698 -2.000000 11.600000 9.614731 -2.000000 11.700000 10.004764 -2.000000 11.800000 10.414796 -2.000000 11.900000 10.844829 -2.000000 12.000000 11.294861 -2.000000 12.100000 11.764894 -2.000000 12.200000 12.254927 -2.000000 12.300000 12.764959 -2.000000 12.400000 13.294992 -2.000000 12.500000 13.845025 -2.000000 12.600000 14.415057 -2.000000 12.700000 15.005090 -2.000000 12.800000 15.615122 -2.000000 12.900000 16.245155 -2.000000 13.000000 16.895188 -2.000000 13.100000 17.565220 -2.000000 13.200000 18.255253 -2.000000 13.300000 18.965286 -2.000000 13.400000 19.695318 -2.000000 13.500000 20.445351 -2.000000 13.600000 21.215383 -2.000000 13.700000 22.005416 -2.000000 13.800000 22.815449 -2.000000 13.900000 23.645481 -2.000000 14.000000 24.495514 -2.000000 14.100000 25.365547 -2.000000 14.200000 26.255579 -2.000000 14.300000 27.165612 -2.000000 14.400000 28.095644 -2.000000 14.500000 29.045677 -2.000000 14.600000 30.015710 -2.000000 14.700000 31.005742 -2.000000 14.800000 32.015775 -2.000000 14.900000 33.045807 -2.000000 15.000000 34.095840 -1.900000 -5.000000 216.864531 -1.900000 -4.900000 213.976471 -1.900000 -4.800000 211.108411 -1.900000 -4.700000 208.260351 -1.900000 -4.600000 205.432291 -1.900000 -4.500000 202.624231 -1.900000 -4.400000 199.836171 -1.900000 -4.300000 197.068111 -1.900000 -4.200000 194.320051 -1.900000 -4.100000 191.591991 -1.900000 -4.000000 188.883931 -1.900000 -3.900000 186.195871 -1.900000 -3.800000 183.527811 -1.900000 -3.700000 180.879751 -1.900000 -3.600000 178.251691 -1.900000 -3.500000 175.643631 -1.900000 -3.400000 173.055571 -1.900000 -3.300000 170.487511 -1.900000 -3.200000 167.939451 -1.900000 -3.100000 165.411391 -1.900000 -3.000000 162.903331 -1.900000 -2.900000 160.415271 -1.900000 -2.800000 157.947211 -1.900000 -2.700000 155.499151 -1.900000 -2.600000 153.071091 -1.900000 -2.500000 150.663031 -1.900000 -2.400000 148.274971 -1.900000 -2.300000 145.906911 -1.900000 -2.200000 143.558851 -1.900000 -2.100000 141.230791 -1.900000 -2.000000 138.922731 -1.900000 -1.900000 136.634671 -1.900000 -1.800000 134.366611 -1.900000 -1.700000 132.118551 -1.900000 -1.600000 129.890491 -1.900000 -1.500000 127.682431 -1.900000 -1.400000 125.494371 -1.900000 -1.300000 123.326311 -1.900000 -1.200000 121.178251 -1.900000 -1.100000 119.050191 -1.900000 -1.000000 116.942131 -1.900000 -0.900000 114.854071 -1.900000 -0.800000 112.786011 -1.900000 -0.700000 110.737951 -1.900000 -0.600000 108.709891 -1.900000 -0.500000 106.701831 -1.900000 -0.400000 104.713771 -1.900000 -0.300000 102.745711 -1.900000 -0.200000 100.797651 -1.900000 -0.100000 98.869591 -1.900000 -0.000000 96.961531 -1.900000 0.100000 95.073471 -1.900000 0.200000 93.205411 -1.900000 0.300000 91.357351 -1.900000 0.400000 89.529291 -1.900000 0.500000 87.721231 -1.900000 0.600000 85.933171 -1.900000 0.700000 84.165111 -1.900000 0.800000 82.417051 -1.900000 0.900000 80.688991 -1.900000 1.000000 78.980931 -1.900000 1.100000 77.292871 -1.900000 1.200000 75.624811 -1.900000 1.300000 73.976751 -1.900000 1.400000 72.348691 -1.900000 1.500000 70.740631 -1.900000 1.600000 69.152571 -1.900000 1.700000 67.584511 -1.900000 1.800000 66.036451 -1.900000 1.900000 64.508391 -1.900000 2.000000 63.000331 -1.900000 2.100000 61.512271 -1.900000 2.200000 60.044211 -1.900000 2.300000 58.596151 -1.900000 2.400000 57.168091 -1.900000 2.500000 55.760031 -1.900000 2.600000 54.371971 -1.900000 2.700000 53.003911 -1.900000 2.800000 51.655851 -1.900000 2.900000 50.327791 -1.900000 3.000000 49.019731 -1.900000 3.100000 47.731671 -1.900000 3.200000 46.463611 -1.900000 3.300000 45.215551 -1.900000 3.400000 43.987491 -1.900000 3.500000 42.779431 -1.900000 3.600000 41.591371 -1.900000 3.700000 40.423311 -1.900000 3.800000 39.275251 -1.900000 3.900000 38.147191 -1.900000 4.000000 37.039131 -1.900000 4.100000 35.951071 -1.900000 4.200000 34.883011 -1.900000 4.300000 33.834951 -1.900000 4.400000 32.806891 -1.900000 4.500000 31.798831 -1.900000 4.600000 30.810771 -1.900000 4.700000 29.842711 -1.900000 4.800000 28.894651 -1.900000 4.900000 27.966591 -1.900000 5.000000 27.058531 -1.900000 5.100000 26.170471 -1.900000 5.200000 25.302411 -1.900000 5.300000 24.454351 -1.900000 5.400000 23.626291 -1.900000 5.500000 22.818231 -1.900000 5.600000 22.030171 -1.900000 5.700000 21.262111 -1.900000 5.800000 20.514051 -1.900000 5.900000 19.785991 -1.900000 6.000000 19.077931 -1.900000 6.100000 18.389871 -1.900000 6.200000 17.721811 -1.900000 6.300000 17.073751 -1.900000 6.400000 16.445691 -1.900000 6.500000 15.837631 -1.900000 6.600000 15.249571 -1.900000 6.700000 14.681511 -1.900000 6.800000 14.133451 -1.900000 6.900000 13.605391 -1.900000 7.000000 13.097331 -1.900000 7.100000 12.609271 -1.900000 7.200000 12.141211 -1.900000 7.300000 11.693151 -1.900000 7.400000 11.265091 -1.900000 7.500000 10.857031 -1.900000 7.600000 10.468971 -1.900000 7.700000 10.100911 -1.900000 7.800000 9.752851 -1.900000 7.900000 9.424791 -1.900000 8.000000 9.116731 -1.900000 8.100000 8.828671 -1.900000 8.200000 8.560611 -1.900000 8.300000 8.312551 -1.900000 8.400000 8.084491 -1.900000 8.500000 7.876431 -1.900000 8.600000 7.688371 -1.900000 8.700000 7.520311 -1.900000 8.800000 7.372251 -1.900000 8.900000 7.244191 -1.900000 9.000000 7.136131 -1.900000 9.100000 7.048071 -1.900000 9.200000 6.980011 -1.900000 9.300000 6.931951 -1.900000 9.400000 6.903891 -1.900000 9.500000 6.895831 -1.900000 9.600000 6.907771 -1.900000 9.700000 6.939711 -1.900000 9.800000 6.991651 -1.900000 9.900000 7.063591 -1.900000 10.000000 7.155531 -1.900000 10.100000 7.267471 -1.900000 10.200000 7.399411 -1.900000 10.300000 7.551351 -1.900000 10.400000 7.723291 -1.900000 10.500000 7.915231 -1.900000 10.600000 8.127171 -1.900000 10.700000 8.359111 -1.900000 10.800000 8.611051 -1.900000 10.900000 8.882991 -1.900000 11.000000 9.174931 -1.900000 11.100000 9.486871 -1.900000 11.200000 9.818811 -1.900000 11.300000 10.170751 -1.900000 11.400000 10.542691 -1.900000 11.500000 10.934631 -1.900000 11.600000 11.346571 -1.900000 11.700000 11.778511 -1.900000 11.800000 12.230451 -1.900000 11.900000 12.702391 -1.900000 12.000000 13.194331 -1.900000 12.100000 13.706271 -1.900000 12.200000 14.238211 -1.900000 12.300000 14.790151 -1.900000 12.400000 15.362091 -1.900000 12.500000 15.954031 -1.900000 12.600000 16.565971 -1.900000 12.700000 17.197911 -1.900000 12.800000 17.849851 -1.900000 12.900000 18.521791 -1.900000 13.000000 19.213731 -1.900000 13.100000 19.925671 -1.900000 13.200000 20.657611 -1.900000 13.300000 21.409551 -1.900000 13.400000 22.181491 -1.900000 13.500000 22.973431 -1.900000 13.600000 23.785371 -1.900000 13.700000 24.617311 -1.900000 13.800000 25.469251 -1.900000 13.900000 26.341191 -1.900000 14.000000 27.233131 -1.900000 14.100000 28.145071 -1.900000 14.200000 29.077011 -1.900000 14.300000 30.028951 -1.900000 14.400000 31.000891 -1.900000 14.500000 31.992831 -1.900000 14.600000 33.004771 -1.900000 14.700000 34.036711 -1.900000 14.800000 35.088651 -1.900000 14.900000 36.160591 -1.900000 15.000000 37.252531 -1.800000 -5.000000 211.832375 -1.800000 -4.900000 208.985706 -1.800000 -4.800000 206.159037 -1.800000 -4.700000 203.352367 -1.800000 -4.600000 200.565698 -1.800000 -4.500000 197.799028 -1.800000 -4.400000 195.052359 -1.800000 -4.300000 192.325690 -1.800000 -4.200000 189.619020 -1.800000 -4.100000 186.932351 -1.800000 -4.000000 184.265682 -1.800000 -3.900000 181.619012 -1.800000 -3.800000 178.992343 -1.800000 -3.700000 176.385674 -1.800000 -3.600000 173.799004 -1.800000 -3.500000 171.232335 -1.800000 -3.400000 168.685666 -1.800000 -3.300000 166.158996 -1.800000 -3.200000 163.652327 -1.800000 -3.100000 161.165657 -1.800000 -3.000000 158.698988 -1.800000 -2.900000 156.252319 -1.800000 -2.800000 153.825649 -1.800000 -2.700000 151.418980 -1.800000 -2.600000 149.032311 -1.800000 -2.500000 146.665641 -1.800000 -2.400000 144.318972 -1.800000 -2.300000 141.992303 -1.800000 -2.200000 139.685633 -1.800000 -2.100000 137.398964 -1.800000 -2.000000 135.132295 -1.800000 -1.900000 132.885625 -1.800000 -1.800000 130.658956 -1.800000 -1.700000 128.452286 -1.800000 -1.600000 126.265617 -1.800000 -1.500000 124.098948 -1.800000 -1.400000 121.952278 -1.800000 -1.300000 119.825609 -1.800000 -1.200000 117.718940 -1.800000 -1.100000 115.632270 -1.800000 -1.000000 113.565601 -1.800000 -0.900000 111.518932 -1.800000 -0.800000 109.492262 -1.800000 -0.700000 107.485593 -1.800000 -0.600000 105.498924 -1.800000 -0.500000 103.532254 -1.800000 -0.400000 101.585585 -1.800000 -0.300000 99.658916 -1.800000 -0.200000 97.752246 -1.800000 -0.100000 95.865577 -1.800000 -0.000000 93.998907 -1.800000 0.100000 92.152238 -1.800000 0.200000 90.325569 -1.800000 0.300000 88.518899 -1.800000 0.400000 86.732230 -1.800000 0.500000 84.965561 -1.800000 0.600000 83.218891 -1.800000 0.700000 81.492222 -1.800000 0.800000 79.785553 -1.800000 0.900000 78.098883 -1.800000 1.000000 76.432214 -1.800000 1.100000 74.785545 -1.800000 1.200000 73.158875 -1.800000 1.300000 71.552206 -1.800000 1.400000 69.965536 -1.800000 1.500000 68.398867 -1.800000 1.600000 66.852198 -1.800000 1.700000 65.325528 -1.800000 1.800000 63.818859 -1.800000 1.900000 62.332190 -1.800000 2.000000 60.865520 -1.800000 2.100000 59.418851 -1.800000 2.200000 57.992182 -1.800000 2.300000 56.585512 -1.800000 2.400000 55.198843 -1.800000 2.500000 53.832174 -1.800000 2.600000 52.485504 -1.800000 2.700000 51.158835 -1.800000 2.800000 49.852165 -1.800000 2.900000 48.565496 -1.800000 3.000000 47.298827 -1.800000 3.100000 46.052157 -1.800000 3.200000 44.825488 -1.800000 3.300000 43.618819 -1.800000 3.400000 42.432149 -1.800000 3.500000 41.265480 -1.800000 3.600000 40.118811 -1.800000 3.700000 38.992141 -1.800000 3.800000 37.885472 -1.800000 3.900000 36.798803 -1.800000 4.000000 35.732133 -1.800000 4.100000 34.685464 -1.800000 4.200000 33.658794 -1.800000 4.300000 32.652125 -1.800000 4.400000 31.665456 -1.800000 4.500000 30.698786 -1.800000 4.600000 29.752117 -1.800000 4.700000 28.825448 -1.800000 4.800000 27.918778 -1.800000 4.900000 27.032109 -1.800000 5.000000 26.165440 -1.800000 5.100000 25.318770 -1.800000 5.200000 24.492101 -1.800000 5.300000 23.685432 -1.800000 5.400000 22.898762 -1.800000 5.500000 22.132093 -1.800000 5.600000 21.385423 -1.800000 5.700000 20.658754 -1.800000 5.800000 19.952085 -1.800000 5.900000 19.265415 -1.800000 6.000000 18.598746 -1.800000 6.100000 17.952077 -1.800000 6.200000 17.325407 -1.800000 6.300000 16.718738 -1.800000 6.400000 16.132069 -1.800000 6.500000 15.565399 -1.800000 6.600000 15.018730 -1.800000 6.700000 14.492061 -1.800000 6.800000 13.985391 -1.800000 6.900000 13.498722 -1.800000 7.000000 13.032052 -1.800000 7.100000 12.585383 -1.800000 7.200000 12.158714 -1.800000 7.300000 11.752044 -1.800000 7.400000 11.365375 -1.800000 7.500000 10.998706 -1.800000 7.600000 10.652036 -1.800000 7.700000 10.325367 -1.800000 7.800000 10.018698 -1.800000 7.900000 9.732028 -1.800000 8.000000 9.465359 -1.800000 8.100000 9.218690 -1.800000 8.200000 8.992020 -1.800000 8.300000 8.785351 -1.800000 8.400000 8.598681 -1.800000 8.500000 8.432012 -1.800000 8.600000 8.285343 -1.800000 8.700000 8.158673 -1.800000 8.800000 8.052004 -1.800000 8.900000 7.965335 -1.800000 9.000000 7.898665 -1.800000 9.100000 7.851996 -1.800000 9.200000 7.825327 -1.800000 9.300000 7.818657 -1.800000 9.400000 7.831988 -1.800000 9.500000 7.865319 -1.800000 9.600000 7.918649 -1.800000 9.700000 7.991980 -1.800000 9.800000 8.085310 -1.800000 9.900000 8.198641 -1.800000 10.000000 8.331972 -1.800000 10.100000 8.485302 -1.800000 10.200000 8.658633 -1.800000 10.300000 8.851964 -1.800000 10.400000 9.065294 -1.800000 10.500000 9.298625 -1.800000 10.600000 9.551956 -1.800000 10.700000 9.825286 -1.800000 10.800000 10.118617 -1.800000 10.900000 10.431948 -1.800000 11.000000 10.765278 -1.800000 11.100000 11.118609 -1.800000 11.200000 11.491939 -1.800000 11.300000 11.885270 -1.800000 11.400000 12.298601 -1.800000 11.500000 12.731931 -1.800000 11.600000 13.185262 -1.800000 11.700000 13.658593 -1.800000 11.800000 14.151923 -1.800000 11.900000 14.665254 -1.800000 12.000000 15.198585 -1.800000 12.100000 15.751915 -1.800000 12.200000 16.325246 -1.800000 12.300000 16.918577 -1.800000 12.400000 17.531907 -1.800000 12.500000 18.165238 -1.800000 12.600000 18.818568 -1.800000 12.700000 19.491899 -1.800000 12.800000 20.185230 -1.800000 12.900000 20.898560 -1.800000 13.000000 21.631891 -1.800000 13.100000 22.385222 -1.800000 13.200000 23.158552 -1.800000 13.300000 23.951883 -1.800000 13.400000 24.765214 -1.800000 13.500000 25.598544 -1.800000 13.600000 26.451875 -1.800000 13.700000 27.325206 -1.800000 13.800000 28.218536 -1.800000 13.900000 29.131867 -1.800000 14.000000 30.065197 -1.800000 14.100000 31.018528 -1.800000 14.200000 31.991859 -1.800000 14.300000 32.985189 -1.800000 14.400000 33.998520 -1.800000 14.500000 35.031851 -1.800000 14.600000 36.085181 -1.800000 14.700000 37.158512 -1.800000 14.800000 38.251843 -1.800000 14.900000 39.365173 -1.800000 15.000000 40.498504 -1.700000 -5.000000 206.980421 -1.700000 -4.900000 204.174626 -1.700000 -4.800000 201.388831 -1.700000 -4.700000 198.623035 -1.700000 -4.600000 195.877240 -1.700000 -4.500000 193.151444 -1.700000 -4.400000 190.445649 -1.700000 -4.300000 187.759853 -1.700000 -4.200000 185.094058 -1.700000 -4.100000 182.448262 -1.700000 -4.000000 179.822467 -1.700000 -3.900000 177.216671 -1.700000 -3.800000 174.630876 -1.700000 -3.700000 172.065081 -1.700000 -3.600000 169.519285 -1.700000 -3.500000 166.993490 -1.700000 -3.400000 164.487694 -1.700000 -3.300000 162.001899 -1.700000 -3.200000 159.536103 -1.700000 -3.100000 157.090308 -1.700000 -3.000000 154.664512 -1.700000 -2.900000 152.258717 -1.700000 -2.800000 149.872921 -1.700000 -2.700000 147.507126 -1.700000 -2.600000 145.161331 -1.700000 -2.500000 142.835535 -1.700000 -2.400000 140.529740 -1.700000 -2.300000 138.243944 -1.700000 -2.200000 135.978149 -1.700000 -2.100000 133.732353 -1.700000 -2.000000 131.506558 -1.700000 -1.900000 129.300762 -1.700000 -1.800000 127.114967 -1.700000 -1.700000 124.949172 -1.700000 -1.600000 122.803376 -1.700000 -1.500000 120.677581 -1.700000 -1.400000 118.571785 -1.700000 -1.300000 116.485990 -1.700000 -1.200000 114.420194 -1.700000 -1.100000 112.374399 -1.700000 -1.000000 110.348603 -1.700000 -0.900000 108.342808 -1.700000 -0.800000 106.357012 -1.700000 -0.700000 104.391217 -1.700000 -0.600000 102.445422 -1.700000 -0.500000 100.519626 -1.700000 -0.400000 98.613831 -1.700000 -0.300000 96.728035 -1.700000 -0.200000 94.862240 -1.700000 -0.100000 93.016444 -1.700000 -0.000000 91.190649 -1.700000 0.100000 89.384853 -1.700000 0.200000 87.599058 -1.700000 0.300000 85.833262 -1.700000 0.400000 84.087467 -1.700000 0.500000 82.361672 -1.700000 0.600000 80.655876 -1.700000 0.700000 78.970081 -1.700000 0.800000 77.304285 -1.700000 0.900000 75.658490 -1.700000 1.000000 74.032694 -1.700000 1.100000 72.426899 -1.700000 1.200000 70.841103 -1.700000 1.300000 69.275308 -1.700000 1.400000 67.729512 -1.700000 1.500000 66.203717 -1.700000 1.600000 64.697922 -1.700000 1.700000 63.212126 -1.700000 1.800000 61.746331 -1.700000 1.900000 60.300535 -1.700000 2.000000 58.874740 -1.700000 2.100000 57.468944 -1.700000 2.200000 56.083149 -1.700000 2.300000 54.717353 -1.700000 2.400000 53.371558 -1.700000 2.500000 52.045762 -1.700000 2.600000 50.739967 -1.700000 2.700000 49.454172 -1.700000 2.800000 48.188376 -1.700000 2.900000 46.942581 -1.700000 3.000000 45.716785 -1.700000 3.100000 44.510990 -1.700000 3.200000 43.325194 -1.700000 3.300000 42.159399 -1.700000 3.400000 41.013603 -1.700000 3.500000 39.887808 -1.700000 3.600000 38.782013 -1.700000 3.700000 37.696217 -1.700000 3.800000 36.630422 -1.700000 3.900000 35.584626 -1.700000 4.000000 34.558831 -1.700000 4.100000 33.553035 -1.700000 4.200000 32.567240 -1.700000 4.300000 31.601444 -1.700000 4.400000 30.655649 -1.700000 4.500000 29.729853 -1.700000 4.600000 28.824058 -1.700000 4.700000 27.938263 -1.700000 4.800000 27.072467 -1.700000 4.900000 26.226672 -1.700000 5.000000 25.400876 -1.700000 5.100000 24.595081 -1.700000 5.200000 23.809285 -1.700000 5.300000 23.043490 -1.700000 5.400000 22.297694 -1.700000 5.500000 21.571899 -1.700000 5.600000 20.866103 -1.700000 5.700000 20.180308 -1.700000 5.800000 19.514513 -1.700000 5.900000 18.868717 -1.700000 6.000000 18.242922 -1.700000 6.100000 17.637126 -1.700000 6.200000 17.051331 -1.700000 6.300000 16.485535 -1.700000 6.400000 15.939740 -1.700000 6.500000 15.413944 -1.700000 6.600000 14.908149 -1.700000 6.700000 14.422353 -1.700000 6.800000 13.956558 -1.700000 6.900000 13.510763 -1.700000 7.000000 13.084967 -1.700000 7.100000 12.679172 -1.700000 7.200000 12.293376 -1.700000 7.300000 11.927581 -1.700000 7.400000 11.581785 -1.700000 7.500000 11.255990 -1.700000 7.600000 10.950194 -1.700000 7.700000 10.664399 -1.700000 7.800000 10.398603 -1.700000 7.900000 10.152808 -1.700000 8.000000 9.927013 -1.700000 8.100000 9.721217 -1.700000 8.200000 9.535422 -1.700000 8.300000 9.369626 -1.700000 8.400000 9.223831 -1.700000 8.500000 9.098035 -1.700000 8.600000 8.992240 -1.700000 8.700000 8.906444 -1.700000 8.800000 8.840649 -1.700000 8.900000 8.794854 -1.700000 9.000000 8.769058 -1.700000 9.100000 8.763263 -1.700000 9.200000 8.777467 -1.700000 9.300000 8.811672 -1.700000 9.400000 8.865876 -1.700000 9.500000 8.940081 -1.700000 9.600000 9.034285 -1.700000 9.700000 9.148490 -1.700000 9.800000 9.282694 -1.700000 9.900000 9.436899 -1.700000 10.000000 9.611104 -1.700000 10.100000 9.805308 -1.700000 10.200000 10.019513 -1.700000 10.300000 10.253717 -1.700000 10.400000 10.507922 -1.700000 10.500000 10.782126 -1.700000 10.600000 11.076331 -1.700000 10.700000 11.390535 -1.700000 10.800000 11.724740 -1.700000 10.900000 12.078944 -1.700000 11.000000 12.453149 -1.700000 11.100000 12.847354 -1.700000 11.200000 13.261558 -1.700000 11.300000 13.695763 -1.700000 11.400000 14.149967 -1.700000 11.500000 14.624172 -1.700000 11.600000 15.118376 -1.700000 11.700000 15.632581 -1.700000 11.800000 16.166785 -1.700000 11.900000 16.720990 -1.700000 12.000000 17.295194 -1.700000 12.100000 17.889399 -1.700000 12.200000 18.503604 -1.700000 12.300000 19.137808 -1.700000 12.400000 19.792013 -1.700000 12.500000 20.466217 -1.700000 12.600000 21.160422 -1.700000 12.700000 21.874626 -1.700000 12.800000 22.608831 -1.700000 12.900000 23.363035 -1.700000 13.000000 24.137240 -1.700000 13.100000 24.931444 -1.700000 13.200000 25.745649 -1.700000 13.300000 26.579854 -1.700000 13.400000 27.434058 -1.700000 13.500000 28.308263 -1.700000 13.600000 29.202467 -1.700000 13.700000 30.116672 -1.700000 13.800000 31.050876 -1.700000 13.900000 32.005081 -1.700000 14.000000 32.979285 -1.700000 14.100000 33.973490 -1.700000 14.200000 34.987695 -1.700000 14.300000 36.021899 -1.700000 14.400000 37.076104 -1.700000 14.500000 38.150308 -1.700000 14.600000 39.244513 -1.700000 14.700000 40.358717 -1.700000 14.800000 41.492922 -1.700000 14.900000 42.647126 -1.700000 15.000000 43.821331 -1.600000 -5.000000 202.296065 -1.600000 -4.900000 199.530627 -1.600000 -4.800000 196.785188 -1.600000 -4.700000 194.059750 -1.600000 -4.600000 191.354312 -1.600000 -4.500000 188.668874 -1.600000 -4.400000 186.003435 -1.600000 -4.300000 183.357997 -1.600000 -4.200000 180.732559 -1.600000 -4.100000 178.127120 -1.600000 -4.000000 175.541682 -1.600000 -3.900000 172.976244 -1.600000 -3.800000 170.430806 -1.600000 -3.700000 167.905367 -1.600000 -3.600000 165.399929 -1.600000 -3.500000 162.914491 -1.600000 -3.400000 160.449052 -1.600000 -3.300000 158.003614 -1.600000 -3.200000 155.578176 -1.600000 -3.100000 153.172738 -1.600000 -3.000000 150.787299 -1.600000 -2.900000 148.421861 -1.600000 -2.800000 146.076423 -1.600000 -2.700000 143.750984 -1.600000 -2.600000 141.445546 -1.600000 -2.500000 139.160108 -1.600000 -2.400000 136.894670 -1.600000 -2.300000 134.649231 -1.600000 -2.200000 132.423793 -1.600000 -2.100000 130.218355 -1.600000 -2.000000 128.032916 -1.600000 -1.900000 125.867478 -1.600000 -1.800000 123.722040 -1.600000 -1.700000 121.596602 -1.600000 -1.600000 119.491163 -1.600000 -1.500000 117.405725 -1.600000 -1.400000 115.340287 -1.600000 -1.300000 113.294848 -1.600000 -1.200000 111.269410 -1.600000 -1.100000 109.263972 -1.600000 -1.000000 107.278533 -1.600000 -0.900000 105.313095 -1.600000 -0.800000 103.367657 -1.600000 -0.700000 101.442219 -1.600000 -0.600000 99.536780 -1.600000 -0.500000 97.651342 -1.600000 -0.400000 95.785904 -1.600000 -0.300000 93.940465 -1.600000 -0.200000 92.115027 -1.600000 -0.100000 90.309589 -1.600000 -0.000000 88.524151 -1.600000 0.100000 86.758712 -1.600000 0.200000 85.013274 -1.600000 0.300000 83.287836 -1.600000 0.400000 81.582397 -1.600000 0.500000 79.896959 -1.600000 0.600000 78.231521 -1.600000 0.700000 76.586083 -1.600000 0.800000 74.960644 -1.600000 0.900000 73.355206 -1.600000 1.000000 71.769768 -1.600000 1.100000 70.204329 -1.600000 1.200000 68.658891 -1.600000 1.300000 67.133453 -1.600000 1.400000 65.628015 -1.600000 1.500000 64.142576 -1.600000 1.600000 62.677138 -1.600000 1.700000 61.231700 -1.600000 1.800000 59.806261 -1.600000 1.900000 58.400823 -1.600000 2.000000 57.015385 -1.600000 2.100000 55.649947 -1.600000 2.200000 54.304508 -1.600000 2.300000 52.979070 -1.600000 2.400000 51.673632 -1.600000 2.500000 50.388193 -1.600000 2.600000 49.122755 -1.600000 2.700000 47.877317 -1.600000 2.800000 46.651879 -1.600000 2.900000 45.446440 -1.600000 3.000000 44.261002 -1.600000 3.100000 43.095564 -1.600000 3.200000 41.950125 -1.600000 3.300000 40.824687 -1.600000 3.400000 39.719249 -1.600000 3.500000 38.633811 -1.600000 3.600000 37.568372 -1.600000 3.700000 36.522934 -1.600000 3.800000 35.497496 -1.600000 3.900000 34.492057 -1.600000 4.000000 33.506619 -1.600000 4.100000 32.541181 -1.600000 4.200000 31.595743 -1.600000 4.300000 30.670304 -1.600000 4.400000 29.764866 -1.600000 4.500000 28.879428 -1.600000 4.600000 28.013989 -1.600000 4.700000 27.168551 -1.600000 4.800000 26.343113 -1.600000 4.900000 25.537675 -1.600000 5.000000 24.752236 -1.600000 5.100000 23.986798 -1.600000 5.200000 23.241360 -1.600000 5.300000 22.515921 -1.600000 5.400000 21.810483 -1.600000 5.500000 21.125045 -1.600000 5.600000 20.459607 -1.600000 5.700000 19.814168 -1.600000 5.800000 19.188730 -1.600000 5.900000 18.583292 -1.600000 6.000000 17.997853 -1.600000 6.100000 17.432415 -1.600000 6.200000 16.886977 -1.600000 6.300000 16.361539 -1.600000 6.400000 15.856100 -1.600000 6.500000 15.370662 -1.600000 6.600000 14.905224 -1.600000 6.700000 14.459785 -1.600000 6.800000 14.034347 -1.600000 6.900000 13.628909 -1.600000 7.000000 13.243471 -1.600000 7.100000 12.878032 -1.600000 7.200000 12.532594 -1.600000 7.300000 12.207156 -1.600000 7.400000 11.901717 -1.600000 7.500000 11.616279 -1.600000 7.600000 11.350841 -1.600000 7.700000 11.105403 -1.600000 7.800000 10.879964 -1.600000 7.900000 10.674526 -1.600000 8.000000 10.489088 -1.600000 8.100000 10.323649 -1.600000 8.200000 10.178211 -1.600000 8.300000 10.052773 -1.600000 8.400000 9.947335 -1.600000 8.500000 9.861896 -1.600000 8.600000 9.796458 -1.600000 8.700000 9.751020 -1.600000 8.800000 9.725581 -1.600000 8.900000 9.720143 -1.600000 9.000000 9.734705 -1.600000 9.100000 9.769267 -1.600000 9.200000 9.823828 -1.600000 9.300000 9.898390 -1.600000 9.400000 9.992952 -1.600000 9.500000 10.107513 -1.600000 9.600000 10.242075 -1.600000 9.700000 10.396637 -1.600000 9.800000 10.571199 -1.600000 9.900000 10.765760 -1.600000 10.000000 10.980322 -1.600000 10.100000 11.214884 -1.600000 10.200000 11.469445 -1.600000 10.300000 11.744007 -1.600000 10.400000 12.038569 -1.600000 10.500000 12.353131 -1.600000 10.600000 12.687692 -1.600000 10.700000 13.042254 -1.600000 10.800000 13.416816 -1.600000 10.900000 13.811377 -1.600000 11.000000 14.225939 -1.600000 11.100000 14.660501 -1.600000 11.200000 15.115063 -1.600000 11.300000 15.589624 -1.600000 11.400000 16.084186 -1.600000 11.500000 16.598748 -1.600000 11.600000 17.133309 -1.600000 11.700000 17.687871 -1.600000 11.800000 18.262433 -1.600000 11.900000 18.856995 -1.600000 12.000000 19.471556 -1.600000 12.100000 20.106118 -1.600000 12.200000 20.760680 -1.600000 12.300000 21.435241 -1.600000 12.400000 22.129803 -1.600000 12.500000 22.844365 -1.600000 12.600000 23.578927 -1.600000 12.700000 24.333488 -1.600000 12.800000 25.108050 -1.600000 12.900000 25.902612 -1.600000 13.000000 26.717173 -1.600000 13.100000 27.551735 -1.600000 13.200000 28.406297 -1.600000 13.300000 29.280859 -1.600000 13.400000 30.175420 -1.600000 13.500000 31.089982 -1.600000 13.600000 32.024544 -1.600000 13.700000 32.979105 -1.600000 13.800000 33.953667 -1.600000 13.900000 34.948229 -1.600000 14.000000 35.962791 -1.600000 14.100000 36.997352 -1.600000 14.200000 38.051914 -1.600000 14.300000 39.126476 -1.600000 14.400000 40.221037 -1.600000 14.500000 41.335599 -1.600000 14.600000 42.470161 -1.600000 14.700000 43.624723 -1.600000 14.800000 44.799284 -1.600000 14.900000 45.993846 -1.600000 15.000000 47.208408 -1.500000 -5.000000 197.766618 -1.500000 -4.900000 195.041020 -1.500000 -4.800000 192.335422 -1.500000 -4.700000 189.649824 -1.500000 -4.600000 186.984226 -1.500000 -4.500000 184.338628 -1.500000 -4.400000 181.713030 -1.500000 -4.300000 179.107433 -1.500000 -4.200000 176.521835 -1.500000 -4.100000 173.956237 -1.500000 -4.000000 171.410639 -1.500000 -3.900000 168.885041 -1.500000 -3.800000 166.379443 -1.500000 -3.700000 163.893845 -1.500000 -3.600000 161.428248 -1.500000 -3.500000 158.982650 -1.500000 -3.400000 156.557052 -1.500000 -3.300000 154.151454 -1.500000 -3.200000 151.765856 -1.500000 -3.100000 149.400258 -1.500000 -3.000000 147.054660 -1.500000 -2.900000 144.729063 -1.500000 -2.800000 142.423465 -1.500000 -2.700000 140.137867 -1.500000 -2.600000 137.872269 -1.500000 -2.500000 135.626671 -1.500000 -2.400000 133.401073 -1.500000 -2.300000 131.195475 -1.500000 -2.200000 129.009878 -1.500000 -2.100000 126.844280 -1.500000 -2.000000 124.698682 -1.500000 -1.900000 122.573084 -1.500000 -1.800000 120.467486 -1.500000 -1.700000 118.381888 -1.500000 -1.600000 116.316290 -1.500000 -1.500000 114.270693 -1.500000 -1.400000 112.245095 -1.500000 -1.300000 110.239497 -1.500000 -1.200000 108.253899 -1.500000 -1.100000 106.288301 -1.500000 -1.000000 104.342703 -1.500000 -0.900000 102.417105 -1.500000 -0.800000 100.511508 -1.500000 -0.700000 98.625910 -1.500000 -0.600000 96.760312 -1.500000 -0.500000 94.914714 -1.500000 -0.400000 93.089116 -1.500000 -0.300000 91.283518 -1.500000 -0.200000 89.497920 -1.500000 -0.100000 87.732323 -1.500000 -0.000000 85.986725 -1.500000 0.100000 84.261127 -1.500000 0.200000 82.555529 -1.500000 0.300000 80.869931 -1.500000 0.400000 79.204333 -1.500000 0.500000 77.558735 -1.500000 0.600000 75.933138 -1.500000 0.700000 74.327540 -1.500000 0.800000 72.741942 -1.500000 0.900000 71.176344 -1.500000 1.000000 69.630746 -1.500000 1.100000 68.105148 -1.500000 1.200000 66.599550 -1.500000 1.300000 65.113953 -1.500000 1.400000 63.648355 -1.500000 1.500000 62.202757 -1.500000 1.600000 60.777159 -1.500000 1.700000 59.371561 -1.500000 1.800000 57.985963 -1.500000 1.900000 56.620365 -1.500000 2.000000 55.274768 -1.500000 2.100000 53.949170 -1.500000 2.200000 52.643572 -1.500000 2.300000 51.357974 -1.500000 2.400000 50.092376 -1.500000 2.500000 48.846778 -1.500000 2.600000 47.621180 -1.500000 2.700000 46.415583 -1.500000 2.800000 45.229985 -1.500000 2.900000 44.064387 -1.500000 3.000000 42.918789 -1.500000 3.100000 41.793191 -1.500000 3.200000 40.687593 -1.500000 3.300000 39.601995 -1.500000 3.400000 38.536398 -1.500000 3.500000 37.490800 -1.500000 3.600000 36.465202 -1.500000 3.700000 35.459604 -1.500000 3.800000 34.474006 -1.500000 3.900000 33.508408 -1.500000 4.000000 32.562810 -1.500000 4.100000 31.637213 -1.500000 4.200000 30.731615 -1.500000 4.300000 29.846017 -1.500000 4.400000 28.980419 -1.500000 4.500000 28.134821 -1.500000 4.600000 27.309223 -1.500000 4.700000 26.503625 -1.500000 4.800000 25.718028 -1.500000 4.900000 24.952430 -1.500000 5.000000 24.206832 -1.500000 5.100000 23.481234 -1.500000 5.200000 22.775636 -1.500000 5.300000 22.090038 -1.500000 5.400000 21.424440 -1.500000 5.500000 20.778843 -1.500000 5.600000 20.153245 -1.500000 5.700000 19.547647 -1.500000 5.800000 18.962049 -1.500000 5.900000 18.396451 -1.500000 6.000000 17.850853 -1.500000 6.100000 17.325255 -1.500000 6.200000 16.819658 -1.500000 6.300000 16.334060 -1.500000 6.400000 15.868462 -1.500000 6.500000 15.422864 -1.500000 6.600000 14.997266 -1.500000 6.700000 14.591668 -1.500000 6.800000 14.206070 -1.500000 6.900000 13.840473 -1.500000 7.000000 13.494875 -1.500000 7.100000 13.169277 -1.500000 7.200000 12.863679 -1.500000 7.300000 12.578081 -1.500000 7.400000 12.312483 -1.500000 7.500000 12.066885 -1.500000 7.600000 11.841287 -1.500000 7.700000 11.635690 -1.500000 7.800000 11.450092 -1.500000 7.900000 11.284494 -1.500000 8.000000 11.138896 -1.500000 8.100000 11.013298 -1.500000 8.200000 10.907700 -1.500000 8.300000 10.822102 -1.500000 8.400000 10.756505 -1.500000 8.500000 10.710907 -1.500000 8.600000 10.685309 -1.500000 8.700000 10.679711 -1.500000 8.800000 10.694113 -1.500000 8.900000 10.728515 -1.500000 9.000000 10.782917 -1.500000 9.100000 10.857320 -1.500000 9.200000 10.951722 -1.500000 9.300000 11.066124 -1.500000 9.400000 11.200526 -1.500000 9.500000 11.354928 -1.500000 9.600000 11.529330 -1.500000 9.700000 11.723732 -1.500000 9.800000 11.938135 -1.500000 9.900000 12.172537 -1.500000 10.000000 12.426939 -1.500000 10.100000 12.701341 -1.500000 10.200000 12.995743 -1.500000 10.300000 13.310145 -1.500000 10.400000 13.644547 -1.500000 10.500000 13.998950 -1.500000 10.600000 14.373352 -1.500000 10.700000 14.767754 -1.500000 10.800000 15.182156 -1.500000 10.900000 15.616558 -1.500000 11.000000 16.070960 -1.500000 11.100000 16.545362 -1.500000 11.200000 17.039765 -1.500000 11.300000 17.554167 -1.500000 11.400000 18.088569 -1.500000 11.500000 18.642971 -1.500000 11.600000 19.217373 -1.500000 11.700000 19.811775 -1.500000 11.800000 20.426177 -1.500000 11.900000 21.060580 -1.500000 12.000000 21.714982 -1.500000 12.100000 22.389384 -1.500000 12.200000 23.083786 -1.500000 12.300000 23.798188 -1.500000 12.400000 24.532590 -1.500000 12.500000 25.286992 -1.500000 12.600000 26.061395 -1.500000 12.700000 26.855797 -1.500000 12.800000 27.670199 -1.500000 12.900000 28.504601 -1.500000 13.000000 29.359003 -1.500000 13.100000 30.233405 -1.500000 13.200000 31.127807 -1.500000 13.300000 32.042210 -1.500000 13.400000 32.976612 -1.500000 13.500000 33.931014 -1.500000 13.600000 34.905416 -1.500000 13.700000 35.899818 -1.500000 13.800000 36.914220 -1.500000 13.900000 37.948622 -1.500000 14.000000 39.003025 -1.500000 14.100000 40.077427 -1.500000 14.200000 41.171829 -1.500000 14.300000 42.286231 -1.500000 14.400000 43.420633 -1.500000 14.500000 44.575035 -1.500000 14.600000 45.749437 -1.500000 14.700000 46.943840 -1.500000 14.800000 48.158242 -1.500000 14.900000 49.392644 -1.500000 15.000000 50.647046 -1.400000 -5.000000 193.379403 -1.400000 -4.900000 190.693129 -1.400000 -4.800000 188.026855 -1.400000 -4.700000 185.380581 -1.400000 -4.600000 182.754307 -1.400000 -4.500000 180.148033 -1.400000 -4.400000 177.561758 -1.400000 -4.300000 174.995484 -1.400000 -4.200000 172.449210 -1.400000 -4.100000 169.922936 -1.400000 -4.000000 167.416662 -1.400000 -3.900000 164.930388 -1.400000 -3.800000 162.464113 -1.400000 -3.700000 160.017839 -1.400000 -3.600000 157.591565 -1.400000 -3.500000 155.185291 -1.400000 -3.400000 152.799017 -1.400000 -3.300000 150.432743 -1.400000 -3.200000 148.086468 -1.400000 -3.100000 145.760194 -1.400000 -3.000000 143.453920 -1.400000 -2.900000 141.167646 -1.400000 -2.800000 138.901372 -1.400000 -2.700000 136.655098 -1.400000 -2.600000 134.428823 -1.400000 -2.500000 132.222549 -1.400000 -2.400000 130.036275 -1.400000 -2.300000 127.870001 -1.400000 -2.200000 125.723727 -1.400000 -2.100000 123.597453 -1.400000 -2.000000 121.491178 -1.400000 -1.900000 119.404904 -1.400000 -1.800000 117.338630 -1.400000 -1.700000 115.292356 -1.400000 -1.600000 113.266082 -1.400000 -1.500000 111.259808 -1.400000 -1.400000 109.273533 -1.400000 -1.300000 107.307259 -1.400000 -1.200000 105.360985 -1.400000 -1.100000 103.434711 -1.400000 -1.000000 101.528437 -1.400000 -0.900000 99.642163 -1.400000 -0.800000 97.775888 -1.400000 -0.700000 95.929614 -1.400000 -0.600000 94.103340 -1.400000 -0.500000 92.297066 -1.400000 -0.400000 90.510792 -1.400000 -0.300000 88.744518 -1.400000 -0.200000 86.998243 -1.400000 -0.100000 85.271969 -1.400000 -0.000000 83.565695 -1.400000 0.100000 81.879421 -1.400000 0.200000 80.213147 -1.400000 0.300000 78.566872 -1.400000 0.400000 76.940598 -1.400000 0.500000 75.334324 -1.400000 0.600000 73.748050 -1.400000 0.700000 72.181776 -1.400000 0.800000 70.635502 -1.400000 0.900000 69.109227 -1.400000 1.000000 67.602953 -1.400000 1.100000 66.116679 -1.400000 1.200000 64.650405 -1.400000 1.300000 63.204131 -1.400000 1.400000 61.777857 -1.400000 1.500000 60.371582 -1.400000 1.600000 58.985308 -1.400000 1.700000 57.619034 -1.400000 1.800000 56.272760 -1.400000 1.900000 54.946486 -1.400000 2.000000 53.640212 -1.400000 2.100000 52.353937 -1.400000 2.200000 51.087663 -1.400000 2.300000 49.841389 -1.400000 2.400000 48.615115 -1.400000 2.500000 47.408841 -1.400000 2.600000 46.222567 -1.400000 2.700000 45.056292 -1.400000 2.800000 43.910018 -1.400000 2.900000 42.783744 -1.400000 3.000000 41.677470 -1.400000 3.100000 40.591196 -1.400000 3.200000 39.524922 -1.400000 3.300000 38.478647 -1.400000 3.400000 37.452373 -1.400000 3.500000 36.446099 -1.400000 3.600000 35.459825 -1.400000 3.700000 34.493551 -1.400000 3.800000 33.547277 -1.400000 3.900000 32.621002 -1.400000 4.000000 31.714728 -1.400000 4.100000 30.828454 -1.400000 4.200000 29.962180 -1.400000 4.300000 29.115906 -1.400000 4.400000 28.289632 -1.400000 4.500000 27.483357 -1.400000 4.600000 26.697083 -1.400000 4.700000 25.930809 -1.400000 4.800000 25.184535 -1.400000 4.900000 24.458261 -1.400000 5.000000 23.751987 -1.400000 5.100000 23.065712 -1.400000 5.200000 22.399438 -1.400000 5.300000 21.753164 -1.400000 5.400000 21.126890 -1.400000 5.500000 20.520616 -1.400000 5.600000 19.934342 -1.400000 5.700000 19.368067 -1.400000 5.800000 18.821793 -1.400000 5.900000 18.295519 -1.400000 6.000000 17.789245 -1.400000 6.100000 17.302971 -1.400000 6.200000 16.836697 -1.400000 6.300000 16.390422 -1.400000 6.400000 15.964148 -1.400000 6.500000 15.557874 -1.400000 6.600000 15.171600 -1.400000 6.700000 14.805326 -1.400000 6.800000 14.459052 -1.400000 6.900000 14.132777 -1.400000 7.000000 13.826503 -1.400000 7.100000 13.540229 -1.400000 7.200000 13.273955 -1.400000 7.300000 13.027681 -1.400000 7.400000 12.801407 -1.400000 7.500000 12.595132 -1.400000 7.600000 12.408858 -1.400000 7.700000 12.242584 -1.400000 7.800000 12.096310 -1.400000 7.900000 11.970036 -1.400000 8.000000 11.863762 -1.400000 8.100000 11.777487 -1.400000 8.200000 11.711213 -1.400000 8.300000 11.664939 -1.400000 8.400000 11.638665 -1.400000 8.500000 11.632391 -1.400000 8.600000 11.646117 -1.400000 8.700000 11.679842 -1.400000 8.800000 11.733568 -1.400000 8.900000 11.807294 -1.400000 9.000000 11.901020 -1.400000 9.100000 12.014746 -1.400000 9.200000 12.148472 -1.400000 9.300000 12.302197 -1.400000 9.400000 12.475923 -1.400000 9.500000 12.669649 -1.400000 9.600000 12.883375 -1.400000 9.700000 13.117101 -1.400000 9.800000 13.370827 -1.400000 9.900000 13.644552 -1.400000 10.000000 13.938278 -1.400000 10.100000 14.252004 -1.400000 10.200000 14.585730 -1.400000 10.300000 14.939456 -1.400000 10.400000 15.313182 -1.400000 10.500000 15.706907 -1.400000 10.600000 16.120633 -1.400000 10.700000 16.554359 -1.400000 10.800000 17.008085 -1.400000 10.900000 17.481811 -1.400000 11.000000 17.975536 -1.400000 11.100000 18.489262 -1.400000 11.200000 19.022988 -1.400000 11.300000 19.576714 -1.400000 11.400000 20.150440 -1.400000 11.500000 20.744166 -1.400000 11.600000 21.357891 -1.400000 11.700000 21.991617 -1.400000 11.800000 22.645343 -1.400000 11.900000 23.319069 -1.400000 12.000000 24.012795 -1.400000 12.100000 24.726521 -1.400000 12.200000 25.460246 -1.400000 12.300000 26.213972 -1.400000 12.400000 26.987698 -1.400000 12.500000 27.781424 -1.400000 12.600000 28.595150 -1.400000 12.700000 29.428876 -1.400000 12.800000 30.282601 -1.400000 12.900000 31.156327 -1.400000 13.000000 32.050053 -1.400000 13.100000 32.963779 -1.400000 13.200000 33.897505 -1.400000 13.300000 34.851231 -1.400000 13.400000 35.824956 -1.400000 13.500000 36.818682 -1.400000 13.600000 37.832408 -1.400000 13.700000 38.866134 -1.400000 13.800000 39.919860 -1.400000 13.900000 40.993586 -1.400000 14.000000 42.087311 -1.400000 14.100000 43.201037 -1.400000 14.200000 44.334763 -1.400000 14.300000 45.488489 -1.400000 14.400000 46.662215 -1.400000 14.500000 47.855941 -1.400000 14.600000 49.069666 -1.400000 14.700000 50.303392 -1.400000 14.800000 51.557118 -1.400000 14.900000 52.830844 -1.400000 15.000000 54.124570 -1.300000 -5.000000 189.121854 -1.300000 -4.900000 186.474387 -1.300000 -4.800000 183.846920 -1.300000 -4.700000 181.239452 -1.300000 -4.600000 178.651985 -1.300000 -4.500000 176.084518 -1.300000 -4.400000 173.537051 -1.300000 -4.300000 171.009583 -1.300000 -4.200000 168.502116 -1.300000 -4.100000 166.014649 -1.300000 -4.000000 163.547182 -1.300000 -3.900000 161.099715 -1.300000 -3.800000 158.672247 -1.300000 -3.700000 156.264780 -1.300000 -3.600000 153.877313 -1.300000 -3.500000 151.509846 -1.300000 -3.400000 149.162379 -1.300000 -3.300000 146.834911 -1.300000 -3.200000 144.527444 -1.300000 -3.100000 142.239977 -1.300000 -3.000000 139.972510 -1.300000 -2.900000 137.725042 -1.300000 -2.800000 135.497575 -1.300000 -2.700000 133.290108 -1.300000 -2.600000 131.102641 -1.300000 -2.500000 128.935174 -1.300000 -2.400000 126.787706 -1.300000 -2.300000 124.660239 -1.300000 -2.200000 122.552772 -1.300000 -2.100000 120.465305 -1.300000 -2.000000 118.397838 -1.300000 -1.900000 116.350370 -1.300000 -1.800000 114.322903 -1.300000 -1.700000 112.315436 -1.300000 -1.600000 110.327969 -1.300000 -1.500000 108.360501 -1.300000 -1.400000 106.413034 -1.300000 -1.300000 104.485567 -1.300000 -1.200000 102.578100 -1.300000 -1.100000 100.690633 -1.300000 -1.000000 98.823165 -1.300000 -0.900000 96.975698 -1.300000 -0.800000 95.148231 -1.300000 -0.700000 93.340764 -1.300000 -0.600000 91.553296 -1.300000 -0.500000 89.785829 -1.300000 -0.400000 88.038362 -1.300000 -0.300000 86.310895 -1.300000 -0.200000 84.603428 -1.300000 -0.100000 82.915960 -1.300000 -0.000000 81.248493 -1.300000 0.100000 79.601026 -1.300000 0.200000 77.973559 -1.300000 0.300000 76.366092 -1.300000 0.400000 74.778624 -1.300000 0.500000 73.211157 -1.300000 0.600000 71.663690 -1.300000 0.700000 70.136223 -1.300000 0.800000 68.628755 -1.300000 0.900000 67.141288 -1.300000 1.000000 65.673821 -1.300000 1.100000 64.226354 -1.300000 1.200000 62.798887 -1.300000 1.300000 61.391419 -1.300000 1.400000 60.003952 -1.300000 1.500000 58.636485 -1.300000 1.600000 57.289018 -1.300000 1.700000 55.961551 -1.300000 1.800000 54.654083 -1.300000 1.900000 53.366616 -1.300000 2.000000 52.099149 -1.300000 2.100000 50.851682 -1.300000 2.200000 49.624214 -1.300000 2.300000 48.416747 -1.300000 2.400000 47.229280 -1.300000 2.500000 46.061813 -1.300000 2.600000 44.914346 -1.300000 2.700000 43.786878 -1.300000 2.800000 42.679411 -1.300000 2.900000 41.591944 -1.300000 3.000000 40.524477 -1.300000 3.100000 39.477009 -1.300000 3.200000 38.449542 -1.300000 3.300000 37.442075 -1.300000 3.400000 36.454608 -1.300000 3.500000 35.487141 -1.300000 3.600000 34.539673 -1.300000 3.700000 33.612206 -1.300000 3.800000 32.704739 -1.300000 3.900000 31.817272 -1.300000 4.000000 30.949805 -1.300000 4.100000 30.102337 -1.300000 4.200000 29.274870 -1.300000 4.300000 28.467403 -1.300000 4.400000 27.679936 -1.300000 4.500000 26.912468 -1.300000 4.600000 26.165001 -1.300000 4.700000 25.437534 -1.300000 4.800000 24.730067 -1.300000 4.900000 24.042600 -1.300000 5.000000 23.375132 -1.300000 5.100000 22.727665 -1.300000 5.200000 22.100198 -1.300000 5.300000 21.492731 -1.300000 5.400000 20.905264 -1.300000 5.500000 20.337796 -1.300000 5.600000 19.790329 -1.300000 5.700000 19.262862 -1.300000 5.800000 18.755395 -1.300000 5.900000 18.267927 -1.300000 6.000000 17.800460 -1.300000 6.100000 17.352993 -1.300000 6.200000 16.925526 -1.300000 6.300000 16.518059 -1.300000 6.400000 16.130591 -1.300000 6.500000 15.763124 -1.300000 6.600000 15.415657 -1.300000 6.700000 15.088190 -1.300000 6.800000 14.780723 -1.300000 6.900000 14.493255 -1.300000 7.000000 14.225788 -1.300000 7.100000 13.978321 -1.300000 7.200000 13.750854 -1.300000 7.300000 13.543386 -1.300000 7.400000 13.355919 -1.300000 7.500000 13.188452 -1.300000 7.600000 13.040985 -1.300000 7.700000 12.913518 -1.300000 7.800000 12.806050 -1.300000 7.900000 12.718583 -1.300000 8.000000 12.651116 -1.300000 8.100000 12.603649 -1.300000 8.200000 12.576181 -1.300000 8.300000 12.568714 -1.300000 8.400000 12.581247 -1.300000 8.500000 12.613780 -1.300000 8.600000 12.666313 -1.300000 8.700000 12.738845 -1.300000 8.800000 12.831378 -1.300000 8.900000 12.943911 -1.300000 9.000000 13.076444 -1.300000 9.100000 13.228977 -1.300000 9.200000 13.401509 -1.300000 9.300000 13.594042 -1.300000 9.400000 13.806575 -1.300000 9.500000 14.039108 -1.300000 9.600000 14.291640 -1.300000 9.700000 14.564173 -1.300000 9.800000 14.856706 -1.300000 9.900000 15.169239 -1.300000 10.000000 15.501772 -1.300000 10.100000 15.854304 -1.300000 10.200000 16.226837 -1.300000 10.300000 16.619370 -1.300000 10.400000 17.031903 -1.300000 10.500000 17.464436 -1.300000 10.600000 17.916968 -1.300000 10.700000 18.389501 -1.300000 10.800000 18.882034 -1.300000 10.900000 19.394567 -1.300000 11.000000 19.927099 -1.300000 11.100000 20.479632 -1.300000 11.200000 21.052165 -1.300000 11.300000 21.644698 -1.300000 11.400000 22.257231 -1.300000 11.500000 22.889763 -1.300000 11.600000 23.542296 -1.300000 11.700000 24.214829 -1.300000 11.800000 24.907362 -1.300000 11.900000 25.619894 -1.300000 12.000000 26.352427 -1.300000 12.100000 27.104960 -1.300000 12.200000 27.877493 -1.300000 12.300000 28.670026 -1.300000 12.400000 29.482558 -1.300000 12.500000 30.315091 -1.300000 12.600000 31.167624 -1.300000 12.700000 32.040157 -1.300000 12.800000 32.932690 -1.300000 12.900000 33.845222 -1.300000 13.000000 34.777755 -1.300000 13.100000 35.730288 -1.300000 13.200000 36.702821 -1.300000 13.300000 37.695353 -1.300000 13.400000 38.707886 -1.300000 13.500000 39.740419 -1.300000 13.600000 40.792952 -1.300000 13.700000 41.865485 -1.300000 13.800000 42.958017 -1.300000 13.900000 44.070550 -1.300000 14.000000 45.203083 -1.300000 14.100000 46.355616 -1.300000 14.200000 47.528149 -1.300000 14.300000 48.720681 -1.300000 14.400000 49.933214 -1.300000 14.500000 51.165747 -1.300000 14.600000 52.418280 -1.300000 14.700000 53.690812 -1.300000 14.800000 54.983345 -1.300000 14.900000 56.295878 -1.300000 15.000000 57.628411 -1.200000 -5.000000 184.981604 -1.200000 -4.900000 182.372427 -1.200000 -4.800000 179.783250 -1.200000 -4.700000 177.214073 -1.200000 -4.600000 174.664896 -1.200000 -4.500000 172.135719 -1.200000 -4.400000 169.626542 -1.200000 -4.300000 167.137365 -1.200000 -4.200000 164.668188 -1.200000 -4.100000 162.219011 -1.200000 -4.000000 159.789834 -1.200000 -3.900000 157.380657 -1.200000 -3.800000 154.991480 -1.200000 -3.700000 152.622303 -1.200000 -3.600000 150.273126 -1.200000 -3.500000 147.943949 -1.200000 -3.400000 145.634772 -1.200000 -3.300000 143.345595 -1.200000 -3.200000 141.076418 -1.200000 -3.100000 138.827241 -1.200000 -3.000000 136.598064 -1.200000 -2.900000 134.388887 -1.200000 -2.800000 132.199710 -1.200000 -2.700000 130.030533 -1.200000 -2.600000 127.881356 -1.200000 -2.500000 125.752179 -1.200000 -2.400000 123.643002 -1.200000 -2.300000 121.553825 -1.200000 -2.200000 119.484648 -1.200000 -2.100000 117.435471 -1.200000 -2.000000 115.406294 -1.200000 -1.900000 113.397117 -1.200000 -1.800000 111.407940 -1.200000 -1.700000 109.438763 -1.200000 -1.600000 107.489586 -1.200000 -1.500000 105.560409 -1.200000 -1.400000 103.651232 -1.200000 -1.300000 101.762055 -1.200000 -1.200000 99.892878 -1.200000 -1.100000 98.043701 -1.200000 -1.000000 96.214524 -1.200000 -0.900000 94.405347 -1.200000 -0.800000 92.616170 -1.200000 -0.700000 90.846993 -1.200000 -0.600000 89.097816 -1.200000 -0.500000 87.368639 -1.200000 -0.400000 85.659462 -1.200000 -0.300000 83.970285 -1.200000 -0.200000 82.301108 -1.200000 -0.100000 80.651931 -1.200000 -0.000000 79.022754 -1.200000 0.100000 77.413577 -1.200000 0.200000 75.824400 -1.200000 0.300000 74.255223 -1.200000 0.400000 72.706046 -1.200000 0.500000 71.176869 -1.200000 0.600000 69.667692 -1.200000 0.700000 68.178515 -1.200000 0.800000 66.709338 -1.200000 0.900000 65.260161 -1.200000 1.000000 63.830984 -1.200000 1.100000 62.421807 -1.200000 1.200000 61.032630 -1.200000 1.300000 59.663453 -1.200000 1.400000 58.314276 -1.200000 1.500000 56.985099 -1.200000 1.600000 55.675922 -1.200000 1.700000 54.386745 -1.200000 1.800000 53.117568 -1.200000 1.900000 51.868391 -1.200000 2.000000 50.639214 -1.200000 2.100000 49.430037 -1.200000 2.200000 48.240860 -1.200000 2.300000 47.071683 -1.200000 2.400000 45.922506 -1.200000 2.500000 44.793329 -1.200000 2.600000 43.684152 -1.200000 2.700000 42.594975 -1.200000 2.800000 41.525798 -1.200000 2.900000 40.476621 -1.200000 3.000000 39.447444 -1.200000 3.100000 38.438267 -1.200000 3.200000 37.449090 -1.200000 3.300000 36.479913 -1.200000 3.400000 35.530736 -1.200000 3.500000 34.601559 -1.200000 3.600000 33.692382 -1.200000 3.700000 32.803205 -1.200000 3.800000 31.934028 -1.200000 3.900000 31.084851 -1.200000 4.000000 30.255674 -1.200000 4.100000 29.446497 -1.200000 4.200000 28.657320 -1.200000 4.300000 27.888143 -1.200000 4.400000 27.138966 -1.200000 4.500000 26.409789 -1.200000 4.600000 25.700612 -1.200000 4.700000 25.011435 -1.200000 4.800000 24.342258 -1.200000 4.900000 23.693081 -1.200000 5.000000 23.063904 -1.200000 5.100000 22.454727 -1.200000 5.200000 21.865550 -1.200000 5.300000 21.296373 -1.200000 5.400000 20.747196 -1.200000 5.500000 20.218019 -1.200000 5.600000 19.708842 -1.200000 5.700000 19.219665 -1.200000 5.800000 18.750488 -1.200000 5.900000 18.301311 -1.200000 6.000000 17.872134 -1.200000 6.100000 17.462957 -1.200000 6.200000 17.073780 -1.200000 6.300000 16.704603 -1.200000 6.400000 16.355426 -1.200000 6.500000 16.026249 -1.200000 6.600000 15.717072 -1.200000 6.700000 15.427895 -1.200000 6.800000 15.158718 -1.200000 6.900000 14.909541 -1.200000 7.000000 14.680364 -1.200000 7.100000 14.471187 -1.200000 7.200000 14.282010 -1.200000 7.300000 14.112833 -1.200000 7.400000 13.963656 -1.200000 7.500000 13.834479 -1.200000 7.600000 13.725302 -1.200000 7.700000 13.636125 -1.200000 7.800000 13.566948 -1.200000 7.900000 13.517771 -1.200000 8.000000 13.488594 -1.200000 8.100000 13.479417 -1.200000 8.200000 13.490240 -1.200000 8.300000 13.521063 -1.200000 8.400000 13.571886 -1.200000 8.500000 13.642709 -1.200000 8.600000 13.733532 -1.200000 8.700000 13.844355 -1.200000 8.800000 13.975178 -1.200000 8.900000 14.126001 -1.200000 9.000000 14.296824 -1.200000 9.100000 14.487647 -1.200000 9.200000 14.698470 -1.200000 9.300000 14.929293 -1.200000 9.400000 15.180116 -1.200000 9.500000 15.450939 -1.200000 9.600000 15.741762 -1.200000 9.700000 16.052585 -1.200000 9.800000 16.383408 -1.200000 9.900000 16.734231 -1.200000 10.000000 17.105054 -1.200000 10.100000 17.495877 -1.200000 10.200000 17.906700 -1.200000 10.300000 18.337523 -1.200000 10.400000 18.788346 -1.200000 10.500000 19.259169 -1.200000 10.600000 19.749992 -1.200000 10.700000 20.260815 -1.200000 10.800000 20.791638 -1.200000 10.900000 21.342461 -1.200000 11.000000 21.913284 -1.200000 11.100000 22.504107 -1.200000 11.200000 23.114930 -1.200000 11.300000 23.745753 -1.200000 11.400000 24.396576 -1.200000 11.500000 25.067399 -1.200000 11.600000 25.758222 -1.200000 11.700000 26.469045 -1.200000 11.800000 27.199868 -1.200000 11.900000 27.950691 -1.200000 12.000000 28.721514 -1.200000 12.100000 29.512337 -1.200000 12.200000 30.323160 -1.200000 12.300000 31.153983 -1.200000 12.400000 32.004806 -1.200000 12.500000 32.875629 -1.200000 12.600000 33.766452 -1.200000 12.700000 34.677275 -1.200000 12.800000 35.608098 -1.200000 12.900000 36.558921 -1.200000 13.000000 37.529744 -1.200000 13.100000 38.520567 -1.200000 13.200000 39.531390 -1.200000 13.300000 40.562213 -1.200000 13.400000 41.613036 -1.200000 13.500000 42.683859 -1.200000 13.600000 43.774682 -1.200000 13.700000 44.885505 -1.200000 13.800000 46.016328 -1.200000 13.900000 47.167151 -1.200000 14.000000 48.337974 -1.200000 14.100000 49.528797 -1.200000 14.200000 50.739620 -1.200000 14.300000 51.970443 -1.200000 14.400000 53.221266 -1.200000 14.500000 54.492089 -1.200000 14.600000 55.782912 -1.200000 14.700000 57.093735 -1.200000 14.800000 58.424558 -1.200000 14.900000 59.775381 -1.200000 15.000000 61.146204 -1.100000 -5.000000 180.946585 -1.100000 -4.900000 178.375182 -1.100000 -4.800000 175.823778 -1.100000 -4.700000 173.292375 -1.100000 -4.600000 170.780971 -1.100000 -4.500000 168.289568 -1.100000 -4.400000 165.818164 -1.100000 -4.300000 163.366760 -1.100000 -4.200000 160.935357 -1.100000 -4.100000 158.523953 -1.100000 -4.000000 156.132550 -1.100000 -3.900000 153.761146 -1.100000 -3.800000 151.409743 -1.100000 -3.700000 149.078339 -1.100000 -3.600000 146.766936 -1.100000 -3.500000 144.475532 -1.100000 -3.400000 142.204129 -1.100000 -3.300000 139.952725 -1.100000 -3.200000 137.721322 -1.100000 -3.100000 135.509918 -1.100000 -3.000000 133.318515 -1.100000 -2.900000 131.147111 -1.100000 -2.800000 128.995708 -1.100000 -2.700000 126.864304 -1.100000 -2.600000 124.752901 -1.100000 -2.500000 122.661497 -1.100000 -2.400000 120.590093 -1.100000 -2.300000 118.538690 -1.100000 -2.200000 116.507286 -1.100000 -2.100000 114.495883 -1.100000 -2.000000 112.504479 -1.100000 -1.900000 110.533076 -1.100000 -1.800000 108.581672 -1.100000 -1.700000 106.650269 -1.100000 -1.600000 104.738865 -1.100000 -1.500000 102.847462 -1.100000 -1.400000 100.976058 -1.100000 -1.300000 99.124655 -1.100000 -1.200000 97.293251 -1.100000 -1.100000 95.481848 -1.100000 -1.000000 93.690444 -1.100000 -0.900000 91.919041 -1.100000 -0.800000 90.167637 -1.100000 -0.700000 88.436234 -1.100000 -0.600000 86.724830 -1.100000 -0.500000 85.033426 -1.100000 -0.400000 83.362023 -1.100000 -0.300000 81.710619 -1.100000 -0.200000 80.079216 -1.100000 -0.100000 78.467812 -1.100000 -0.000000 76.876409 -1.100000 0.100000 75.305005 -1.100000 0.200000 73.753602 -1.100000 0.300000 72.222198 -1.100000 0.400000 70.710795 -1.100000 0.500000 69.219391 -1.100000 0.600000 67.747988 -1.100000 0.700000 66.296584 -1.100000 0.800000 64.865181 -1.100000 0.900000 63.453777 -1.100000 1.000000 62.062374 -1.100000 1.100000 60.690970 -1.100000 1.200000 59.339567 -1.100000 1.300000 58.008163 -1.100000 1.400000 56.696759 -1.100000 1.500000 55.405356 -1.100000 1.600000 54.133952 -1.100000 1.700000 52.882549 -1.100000 1.800000 51.651145 -1.100000 1.900000 50.439742 -1.100000 2.000000 49.248338 -1.100000 2.100000 48.076935 -1.100000 2.200000 46.925531 -1.100000 2.300000 45.794128 -1.100000 2.400000 44.682724 -1.100000 2.500000 43.591321 -1.100000 2.600000 42.519917 -1.100000 2.700000 41.468514 -1.100000 2.800000 40.437110 -1.100000 2.900000 39.425707 -1.100000 3.000000 38.434303 -1.100000 3.100000 37.462900 -1.100000 3.200000 36.511496 -1.100000 3.300000 35.580092 -1.100000 3.400000 34.668689 -1.100000 3.500000 33.777285 -1.100000 3.600000 32.905882 -1.100000 3.700000 32.054478 -1.100000 3.800000 31.223075 -1.100000 3.900000 30.411671 -1.100000 4.000000 29.620268 -1.100000 4.100000 28.848864 -1.100000 4.200000 28.097461 -1.100000 4.300000 27.366057 -1.100000 4.400000 26.654654 -1.100000 4.500000 25.963250 -1.100000 4.600000 25.291847 -1.100000 4.700000 24.640443 -1.100000 4.800000 24.009040 -1.100000 4.900000 23.397636 -1.100000 5.000000 22.806233 -1.100000 5.100000 22.234829 -1.100000 5.200000 21.683426 -1.100000 5.300000 21.152022 -1.100000 5.400000 20.640618 -1.100000 5.500000 20.149215 -1.100000 5.600000 19.677811 -1.100000 5.700000 19.226408 -1.100000 5.800000 18.795004 -1.100000 5.900000 18.383601 -1.100000 6.000000 17.992197 -1.100000 6.100000 17.620794 -1.100000 6.200000 17.269390 -1.100000 6.300000 16.937987 -1.100000 6.400000 16.626583 -1.100000 6.500000 16.335180 -1.100000 6.600000 16.063776 -1.100000 6.700000 15.812373 -1.100000 6.800000 15.580969 -1.100000 6.900000 15.369566 -1.100000 7.000000 15.178162 -1.100000 7.100000 15.006759 -1.100000 7.200000 14.855355 -1.100000 7.300000 14.723951 -1.100000 7.400000 14.612548 -1.100000 7.500000 14.521144 -1.100000 7.600000 14.449741 -1.100000 7.700000 14.398337 -1.100000 7.800000 14.366934 -1.100000 7.900000 14.355530 -1.100000 8.000000 14.364127 -1.100000 8.100000 14.392723 -1.100000 8.200000 14.441320 -1.100000 8.300000 14.509916 -1.100000 8.400000 14.598513 -1.100000 8.500000 14.707109 -1.100000 8.600000 14.835706 -1.100000 8.700000 14.984302 -1.100000 8.800000 15.152899 -1.100000 8.900000 15.341495 -1.100000 9.000000 15.550092 -1.100000 9.100000 15.778688 -1.100000 9.200000 16.027284 -1.100000 9.300000 16.295881 -1.100000 9.400000 16.584477 -1.100000 9.500000 16.893074 -1.100000 9.600000 17.221670 -1.100000 9.700000 17.570267 -1.100000 9.800000 17.938863 -1.100000 9.900000 18.327460 -1.100000 10.000000 18.736056 -1.100000 10.100000 19.164653 -1.100000 10.200000 19.613249 -1.100000 10.300000 20.081846 -1.100000 10.400000 20.570442 -1.100000 10.500000 21.079039 -1.100000 10.600000 21.607635 -1.100000 10.700000 22.156232 -1.100000 10.800000 22.724828 -1.100000 10.900000 23.313425 -1.100000 11.000000 23.922021 -1.100000 11.100000 24.550617 -1.100000 11.200000 25.199214 -1.100000 11.300000 25.867810 -1.100000 11.400000 26.556407 -1.100000 11.500000 27.265003 -1.100000 11.600000 27.993600 -1.100000 11.700000 28.742196 -1.100000 11.800000 29.510793 -1.100000 11.900000 30.299389 -1.100000 12.000000 31.107986 -1.100000 12.100000 31.936582 -1.100000 12.200000 32.785179 -1.100000 12.300000 33.653775 -1.100000 12.400000 34.542372 -1.100000 12.500000 35.450968 -1.100000 12.600000 36.379565 -1.100000 12.700000 37.328161 -1.100000 12.800000 38.296758 -1.100000 12.900000 39.285354 -1.100000 13.000000 40.293950 -1.100000 13.100000 41.322547 -1.100000 13.200000 42.371143 -1.100000 13.300000 43.439740 -1.100000 13.400000 44.528336 -1.100000 13.500000 45.636933 -1.100000 13.600000 46.765529 -1.100000 13.700000 47.914126 -1.100000 13.800000 49.082722 -1.100000 13.900000 50.271319 -1.100000 14.000000 51.479915 -1.100000 14.100000 52.708512 -1.100000 14.200000 53.957108 -1.100000 14.300000 55.225705 -1.100000 14.400000 56.514301 -1.100000 14.500000 57.822898 -1.100000 14.600000 59.151494 -1.100000 14.700000 60.500091 -1.100000 14.800000 61.868687 -1.100000 14.900000 63.257283 -1.100000 15.000000 64.665880 -1.000000 -5.000000 177.005116 -1.000000 -4.900000 174.470969 -1.000000 -4.800000 171.956822 -1.000000 -4.700000 169.462675 -1.000000 -4.600000 166.988528 -1.000000 -4.500000 164.534382 -1.000000 -4.400000 162.100235 -1.000000 -4.300000 159.686088 -1.000000 -4.200000 157.291941 -1.000000 -4.100000 154.917794 -1.000000 -4.000000 152.563648 -1.000000 -3.900000 150.229501 -1.000000 -3.800000 147.915354 -1.000000 -3.700000 145.621207 -1.000000 -3.600000 143.347061 -1.000000 -3.500000 141.092914 -1.000000 -3.400000 138.858767 -1.000000 -3.300000 136.644620 -1.000000 -3.200000 134.450473 -1.000000 -3.100000 132.276327 -1.000000 -3.000000 130.122180 -1.000000 -2.900000 127.988033 -1.000000 -2.800000 125.873886 -1.000000 -2.700000 123.779739 -1.000000 -2.600000 121.705593 -1.000000 -2.500000 119.651446 -1.000000 -2.400000 117.617299 -1.000000 -2.300000 115.603152 -1.000000 -2.200000 113.609006 -1.000000 -2.100000 111.634859 -1.000000 -2.000000 109.680712 -1.000000 -1.900000 107.746565 -1.000000 -1.800000 105.832418 -1.000000 -1.700000 103.938272 -1.000000 -1.600000 102.064125 -1.000000 -1.500000 100.209978 -1.000000 -1.400000 98.375831 -1.000000 -1.300000 96.561684 -1.000000 -1.200000 94.767538 -1.000000 -1.100000 92.993391 -1.000000 -1.000000 91.239244 -1.000000 -0.900000 89.505097 -1.000000 -0.800000 87.790950 -1.000000 -0.700000 86.096804 -1.000000 -0.600000 84.422657 -1.000000 -0.500000 82.768510 -1.000000 -0.400000 81.134363 -1.000000 -0.300000 79.520217 -1.000000 -0.200000 77.926070 -1.000000 -0.100000 76.351923 -1.000000 -0.000000 74.797776 -1.000000 0.100000 73.263629 -1.000000 0.200000 71.749483 -1.000000 0.300000 70.255336 -1.000000 0.400000 68.781189 -1.000000 0.500000 67.327042 -1.000000 0.600000 65.892895 -1.000000 0.700000 64.478749 -1.000000 0.800000 63.084602 -1.000000 0.900000 61.710455 -1.000000 1.000000 60.356308 -1.000000 1.100000 59.022162 -1.000000 1.200000 57.708015 -1.000000 1.300000 56.413868 -1.000000 1.400000 55.139721 -1.000000 1.500000 53.885574 -1.000000 1.600000 52.651428 -1.000000 1.700000 51.437281 -1.000000 1.800000 50.243134 -1.000000 1.900000 49.068987 -1.000000 2.000000 47.914840 -1.000000 2.100000 46.780694 -1.000000 2.200000 45.666547 -1.000000 2.300000 44.572400 -1.000000 2.400000 43.498253 -1.000000 2.500000 42.444106 -1.000000 2.600000 41.409960 -1.000000 2.700000 40.395813 -1.000000 2.800000 39.401666 -1.000000 2.900000 38.427519 -1.000000 3.000000 37.473373 -1.000000 3.100000 36.539226 -1.000000 3.200000 35.625079 -1.000000 3.300000 34.730932 -1.000000 3.400000 33.856785 -1.000000 3.500000 33.002639 -1.000000 3.600000 32.168492 -1.000000 3.700000 31.354345 -1.000000 3.800000 30.560198 -1.000000 3.900000 29.786051 -1.000000 4.000000 29.031905 -1.000000 4.100000 28.297758 -1.000000 4.200000 27.583611 -1.000000 4.300000 26.889464 -1.000000 4.400000 26.215318 -1.000000 4.500000 25.561171 -1.000000 4.600000 24.927024 -1.000000 4.700000 24.312877 -1.000000 4.800000 23.718730 -1.000000 4.900000 23.144584 -1.000000 5.000000 22.590437 -1.000000 5.100000 22.056290 -1.000000 5.200000 21.542143 -1.000000 5.300000 21.047996 -1.000000 5.400000 20.573850 -1.000000 5.500000 20.119703 -1.000000 5.600000 19.685556 -1.000000 5.700000 19.271409 -1.000000 5.800000 18.877262 -1.000000 5.900000 18.503116 -1.000000 6.000000 18.148969 -1.000000 6.100000 17.814822 -1.000000 6.200000 17.500675 -1.000000 6.300000 17.206529 -1.000000 6.400000 16.932382 -1.000000 6.500000 16.678235 -1.000000 6.600000 16.444088 -1.000000 6.700000 16.229941 -1.000000 6.800000 16.035795 -1.000000 6.900000 15.861648 -1.000000 7.000000 15.707501 -1.000000 7.100000 15.573354 -1.000000 7.200000 15.459207 -1.000000 7.300000 15.365061 -1.000000 7.400000 15.290914 -1.000000 7.500000 15.236767 -1.000000 7.600000 15.202620 -1.000000 7.700000 15.188473 -1.000000 7.800000 15.194327 -1.000000 7.900000 15.220180 -1.000000 8.000000 15.266033 -1.000000 8.100000 15.331886 -1.000000 8.200000 15.417740 -1.000000 8.300000 15.523593 -1.000000 8.400000 15.649446 -1.000000 8.500000 15.795299 -1.000000 8.600000 15.961152 -1.000000 8.700000 16.147006 -1.000000 8.800000 16.352859 -1.000000 8.900000 16.578712 -1.000000 9.000000 16.824565 -1.000000 9.100000 17.090418 -1.000000 9.200000 17.376272 -1.000000 9.300000 17.682125 -1.000000 9.400000 18.007978 -1.000000 9.500000 18.353831 -1.000000 9.600000 18.719685 -1.000000 9.700000 19.105538 -1.000000 9.800000 19.511391 -1.000000 9.900000 19.937244 -1.000000 10.000000 20.383097 -1.000000 10.100000 20.848951 -1.000000 10.200000 21.334804 -1.000000 10.300000 21.840657 -1.000000 10.400000 22.366510 -1.000000 10.500000 22.912363 -1.000000 10.600000 23.478217 -1.000000 10.700000 24.064070 -1.000000 10.800000 24.669923 -1.000000 10.900000 25.295776 -1.000000 11.000000 25.941629 -1.000000 11.100000 26.607483 -1.000000 11.200000 27.293336 -1.000000 11.300000 27.999189 -1.000000 11.400000 28.725042 -1.000000 11.500000 29.470896 -1.000000 11.600000 30.236749 -1.000000 11.700000 31.022602 -1.000000 11.800000 31.828455 -1.000000 11.900000 32.654308 -1.000000 12.000000 33.500162 -1.000000 12.100000 34.366015 -1.000000 12.200000 35.251868 -1.000000 12.300000 36.157721 -1.000000 12.400000 37.083574 -1.000000 12.500000 38.029428 -1.000000 12.600000 38.995281 -1.000000 12.700000 39.981134 -1.000000 12.800000 40.986987 -1.000000 12.900000 42.012841 -1.000000 13.000000 43.058694 -1.000000 13.100000 44.124547 -1.000000 13.200000 45.210400 -1.000000 13.300000 46.316253 -1.000000 13.400000 47.442107 -1.000000 13.500000 48.587960 -1.000000 13.600000 49.753813 -1.000000 13.700000 50.939666 -1.000000 13.800000 52.145519 -1.000000 13.900000 53.371373 -1.000000 14.000000 54.617226 -1.000000 14.100000 55.883079 -1.000000 14.200000 57.168932 -1.000000 14.300000 58.474785 -1.000000 14.400000 59.800639 -1.000000 14.500000 61.146492 -1.000000 14.600000 62.512345 -1.000000 14.700000 63.898198 -1.000000 14.800000 65.304052 -1.000000 14.900000 66.729905 -1.000000 15.000000 68.175758 -0.900000 -5.000000 173.145989 -0.900000 -4.900000 170.648582 -0.900000 -4.800000 168.171175 -0.900000 -4.700000 165.713769 -0.900000 -4.600000 163.276362 -0.900000 -4.500000 160.858955 -0.900000 -4.400000 158.461548 -0.900000 -4.300000 156.084141 -0.900000 -4.200000 153.726735 -0.900000 -4.100000 151.389328 -0.900000 -4.000000 149.071921 -0.900000 -3.900000 146.774514 -0.900000 -3.800000 144.497107 -0.900000 -3.700000 142.239701 -0.900000 -3.600000 140.002294 -0.900000 -3.500000 137.784887 -0.900000 -3.400000 135.587480 -0.900000 -3.300000 133.410074 -0.900000 -3.200000 131.252667 -0.900000 -3.100000 129.115260 -0.900000 -3.000000 126.997853 -0.900000 -2.900000 124.900446 -0.900000 -2.800000 122.823040 -0.900000 -2.700000 120.765633 -0.900000 -2.600000 118.728226 -0.900000 -2.500000 116.710819 -0.900000 -2.400000 114.713412 -0.900000 -2.300000 112.736006 -0.900000 -2.200000 110.778599 -0.900000 -2.100000 108.841192 -0.900000 -2.000000 106.923785 -0.900000 -1.900000 105.026379 -0.900000 -1.800000 103.148972 -0.900000 -1.700000 101.291565 -0.900000 -1.600000 99.454158 -0.900000 -1.500000 97.636751 -0.900000 -1.400000 95.839345 -0.900000 -1.300000 94.061938 -0.900000 -1.200000 92.304531 -0.900000 -1.100000 90.567124 -0.900000 -1.000000 88.849717 -0.900000 -0.900000 87.152311 -0.900000 -0.800000 85.474904 -0.900000 -0.700000 83.817497 -0.900000 -0.600000 82.180090 -0.900000 -0.500000 80.562683 -0.900000 -0.400000 78.965277 -0.900000 -0.300000 77.387870 -0.900000 -0.200000 75.830463 -0.900000 -0.100000 74.293056 -0.900000 -0.000000 72.775650 -0.900000 0.100000 71.278243 -0.900000 0.200000 69.800836 -0.900000 0.300000 68.343429 -0.900000 0.400000 66.906022 -0.900000 0.500000 65.488616 -0.900000 0.600000 64.091209 -0.900000 0.700000 62.713802 -0.900000 0.800000 61.356395 -0.900000 0.900000 60.018988 -0.900000 1.000000 58.701582 -0.900000 1.100000 57.404175 -0.900000 1.200000 56.126768 -0.900000 1.300000 54.869361 -0.900000 1.400000 53.631955 -0.900000 1.500000 52.414548 -0.900000 1.600000 51.217141 -0.900000 1.700000 50.039734 -0.900000 1.800000 48.882327 -0.900000 1.900000 47.744921 -0.900000 2.000000 46.627514 -0.900000 2.100000 45.530107 -0.900000 2.200000 44.452700 -0.900000 2.300000 43.395293 -0.900000 2.400000 42.357887 -0.900000 2.500000 41.340480 -0.900000 2.600000 40.343073 -0.900000 2.700000 39.365666 -0.900000 2.800000 38.408259 -0.900000 2.900000 37.470853 -0.900000 3.000000 36.553446 -0.900000 3.100000 35.656039 -0.900000 3.200000 34.778632 -0.900000 3.300000 33.921226 -0.900000 3.400000 33.083819 -0.900000 3.500000 32.266412 -0.900000 3.600000 31.469005 -0.900000 3.700000 30.691598 -0.900000 3.800000 29.934192 -0.900000 3.900000 29.196785 -0.900000 4.000000 28.479378 -0.900000 4.100000 27.781971 -0.900000 4.200000 27.104564 -0.900000 4.300000 26.447158 -0.900000 4.400000 25.809751 -0.900000 4.500000 25.192344 -0.900000 4.600000 24.594937 -0.900000 4.700000 24.017531 -0.900000 4.800000 23.460124 -0.900000 4.900000 22.922717 -0.900000 5.000000 22.405310 -0.900000 5.100000 21.907903 -0.900000 5.200000 21.430497 -0.900000 5.300000 20.973090 -0.900000 5.400000 20.535683 -0.900000 5.500000 20.118276 -0.900000 5.600000 19.720869 -0.900000 5.700000 19.343463 -0.900000 5.800000 18.986056 -0.900000 5.900000 18.648649 -0.900000 6.000000 18.331242 -0.900000 6.100000 18.033835 -0.900000 6.200000 17.756429 -0.900000 6.300000 17.499022 -0.900000 6.400000 17.261615 -0.900000 6.500000 17.044208 -0.900000 6.600000 16.846802 -0.900000 6.700000 16.669395 -0.900000 6.800000 16.511988 -0.900000 6.900000 16.374581 -0.900000 7.000000 16.257174 -0.900000 7.100000 16.159768 -0.900000 7.200000 16.082361 -0.900000 7.300000 16.024954 -0.900000 7.400000 15.987547 -0.900000 7.500000 15.970140 -0.900000 7.600000 15.972734 -0.900000 7.700000 15.995327 -0.900000 7.800000 16.037920 -0.900000 7.900000 16.100513 -0.900000 8.000000 16.183107 -0.900000 8.100000 16.285700 -0.900000 8.200000 16.408293 -0.900000 8.300000 16.550886 -0.900000 8.400000 16.713479 -0.900000 8.500000 16.896073 -0.900000 8.600000 17.098666 -0.900000 8.700000 17.321259 -0.900000 8.800000 17.563852 -0.900000 8.900000 17.826445 -0.900000 9.000000 18.109039 -0.900000 9.100000 18.411632 -0.900000 9.200000 18.734225 -0.900000 9.300000 19.076818 -0.900000 9.400000 19.439411 -0.900000 9.500000 19.822005 -0.900000 9.600000 20.224598 -0.900000 9.700000 20.647191 -0.900000 9.800000 21.089784 -0.900000 9.900000 21.552378 -0.900000 10.000000 22.034971 -0.900000 10.100000 22.537564 -0.900000 10.200000 23.060157 -0.900000 10.300000 23.602750 -0.900000 10.400000 24.165344 -0.900000 10.500000 24.747937 -0.900000 10.600000 25.350530 -0.900000 10.700000 25.973123 -0.900000 10.800000 26.615716 -0.900000 10.900000 27.278310 -0.900000 11.000000 27.960903 -0.900000 11.100000 28.663496 -0.900000 11.200000 29.386089 -0.900000 11.300000 30.128683 -0.900000 11.400000 30.891276 -0.900000 11.500000 31.673869 -0.900000 11.600000 32.476462 -0.900000 11.700000 33.299055 -0.900000 11.800000 34.141649 -0.900000 11.900000 35.004242 -0.900000 12.000000 35.886835 -0.900000 12.100000 36.789428 -0.900000 12.200000 37.712021 -0.900000 12.300000 38.654615 -0.900000 12.400000 39.617208 -0.900000 12.500000 40.599801 -0.900000 12.600000 41.602394 -0.900000 12.700000 42.624987 -0.900000 12.800000 43.667581 -0.900000 12.900000 44.730174 -0.900000 13.000000 45.812767 -0.900000 13.100000 46.915360 -0.900000 13.200000 48.037954 -0.900000 13.300000 49.180547 -0.900000 13.400000 50.343140 -0.900000 13.500000 51.525733 -0.900000 13.600000 52.728326 -0.900000 13.700000 53.950920 -0.900000 13.800000 55.193513 -0.900000 13.900000 56.456106 -0.900000 14.000000 57.738699 -0.900000 14.100000 59.041292 -0.900000 14.200000 60.363886 -0.900000 14.300000 61.706479 -0.900000 14.400000 63.069072 -0.900000 14.500000 64.451665 -0.900000 14.600000 65.854258 -0.900000 14.700000 67.276852 -0.900000 14.800000 68.719445 -0.900000 14.900000 70.182038 -0.900000 15.000000 71.664631 -0.800000 -5.000000 169.358557 -0.800000 -4.900000 166.897373 -0.800000 -4.800000 164.456190 -0.800000 -4.700000 162.035006 -0.800000 -4.600000 159.633823 -0.800000 -4.500000 157.252639 -0.800000 -4.400000 154.891456 -0.800000 -4.300000 152.550272 -0.800000 -4.200000 150.229089 -0.800000 -4.100000 147.927905 -0.800000 -4.000000 145.646722 -0.800000 -3.900000 143.385538 -0.800000 -3.800000 141.144354 -0.800000 -3.700000 138.923171 -0.800000 -3.600000 136.721987 -0.800000 -3.500000 134.540804 -0.800000 -3.400000 132.379620 -0.800000 -3.300000 130.238437 -0.800000 -3.200000 128.117253 -0.800000 -3.100000 126.016070 -0.800000 -3.000000 123.934886 -0.800000 -2.900000 121.873703 -0.800000 -2.800000 119.832519 -0.800000 -2.700000 117.811336 -0.800000 -2.600000 115.810152 -0.800000 -2.500000 113.828969 -0.800000 -2.400000 111.867785 -0.800000 -2.300000 109.926602 -0.800000 -2.200000 108.005418 -0.800000 -2.100000 106.104235 -0.800000 -2.000000 104.223051 -0.800000 -1.900000 102.361867 -0.800000 -1.800000 100.520684 -0.800000 -1.700000 98.699500 -0.800000 -1.600000 96.898317 -0.800000 -1.500000 95.117133 -0.800000 -1.400000 93.355950 -0.800000 -1.300000 91.614766 -0.800000 -1.200000 89.893583 -0.800000 -1.100000 88.192399 -0.800000 -1.000000 86.511216 -0.800000 -0.900000 84.850032 -0.800000 -0.800000 83.208849 -0.800000 -0.700000 81.587665 -0.800000 -0.600000 79.986482 -0.800000 -0.500000 78.405298 -0.800000 -0.400000 76.844115 -0.800000 -0.300000 75.302931 -0.800000 -0.200000 73.781748 -0.800000 -0.100000 72.280564 -0.800000 -0.000000 70.799380 -0.800000 0.100000 69.338197 -0.800000 0.200000 67.897013 -0.800000 0.300000 66.475830 -0.800000 0.400000 65.074646 -0.800000 0.500000 63.693463 -0.800000 0.600000 62.332279 -0.800000 0.700000 60.991096 -0.800000 0.800000 59.669912 -0.800000 0.900000 58.368729 -0.800000 1.000000 57.087545 -0.800000 1.100000 55.826362 -0.800000 1.200000 54.585178 -0.800000 1.300000 53.363995 -0.800000 1.400000 52.162811 -0.800000 1.500000 50.981628 -0.800000 1.600000 49.820444 -0.800000 1.700000 48.679261 -0.800000 1.800000 47.558077 -0.800000 1.900000 46.456893 -0.800000 2.000000 45.375710 -0.800000 2.100000 44.314526 -0.800000 2.200000 43.273343 -0.800000 2.300000 42.252159 -0.800000 2.400000 41.250976 -0.800000 2.500000 40.269792 -0.800000 2.600000 39.308609 -0.800000 2.700000 38.367425 -0.800000 2.800000 37.446242 -0.800000 2.900000 36.545058 -0.800000 3.000000 35.663875 -0.800000 3.100000 34.802691 -0.800000 3.200000 33.961508 -0.800000 3.300000 33.140324 -0.800000 3.400000 32.339141 -0.800000 3.500000 31.557957 -0.800000 3.600000 30.796774 -0.800000 3.700000 30.055590 -0.800000 3.800000 29.334406 -0.800000 3.900000 28.633223 -0.800000 4.000000 27.952039 -0.800000 4.100000 27.290856 -0.800000 4.200000 26.649672 -0.800000 4.300000 26.028489 -0.800000 4.400000 25.427305 -0.800000 4.500000 24.846122 -0.800000 4.600000 24.284938 -0.800000 4.700000 23.743755 -0.800000 4.800000 23.222571 -0.800000 4.900000 22.721388 -0.800000 5.000000 22.240204 -0.800000 5.100000 21.779021 -0.800000 5.200000 21.337837 -0.800000 5.300000 20.916654 -0.800000 5.400000 20.515470 -0.800000 5.500000 20.134287 -0.800000 5.600000 19.773103 -0.800000 5.700000 19.431920 -0.800000 5.800000 19.110736 -0.800000 5.900000 18.809552 -0.800000 6.000000 18.528369 -0.800000 6.100000 18.267185 -0.800000 6.200000 18.026002 -0.800000 6.300000 17.804818 -0.800000 6.400000 17.603635 -0.800000 6.500000 17.422451 -0.800000 6.600000 17.261268 -0.800000 6.700000 17.120084 -0.800000 6.800000 16.998901 -0.800000 6.900000 16.897717 -0.800000 7.000000 16.816534 -0.800000 7.100000 16.755350 -0.800000 7.200000 16.714167 -0.800000 7.300000 16.692983 -0.800000 7.400000 16.691800 -0.800000 7.500000 16.710616 -0.800000 7.600000 16.749433 -0.800000 7.700000 16.808249 -0.800000 7.800000 16.887065 -0.800000 7.900000 16.985882 -0.800000 8.000000 17.104698 -0.800000 8.100000 17.243515 -0.800000 8.200000 17.402331 -0.800000 8.300000 17.581148 -0.800000 8.400000 17.779964 -0.800000 8.500000 17.998781 -0.800000 8.600000 18.237597 -0.800000 8.700000 18.496414 -0.800000 8.800000 18.775230 -0.800000 8.900000 19.074047 -0.800000 9.000000 19.392863 -0.800000 9.100000 19.731680 -0.800000 9.200000 20.090496 -0.800000 9.300000 20.469313 -0.800000 9.400000 20.868129 -0.800000 9.500000 21.286946 -0.800000 9.600000 21.725762 -0.800000 9.700000 22.184578 -0.800000 9.800000 22.663395 -0.800000 9.900000 23.162211 -0.800000 10.000000 23.681028 -0.800000 10.100000 24.219844 -0.800000 10.200000 24.778661 -0.800000 10.300000 25.357477 -0.800000 10.400000 25.956294 -0.800000 10.500000 26.575110 -0.800000 10.600000 27.213927 -0.800000 10.700000 27.872743 -0.800000 10.800000 28.551560 -0.800000 10.900000 29.250376 -0.800000 11.000000 29.969193 -0.800000 11.100000 30.708009 -0.800000 11.200000 31.466826 -0.800000 11.300000 32.245642 -0.800000 11.400000 33.044459 -0.800000 11.500000 33.863275 -0.800000 11.600000 34.702091 -0.800000 11.700000 35.560908 -0.800000 11.800000 36.439724 -0.800000 11.900000 37.338541 -0.800000 12.000000 38.257357 -0.800000 12.100000 39.196174 -0.800000 12.200000 40.154990 -0.800000 12.300000 41.133807 -0.800000 12.400000 42.132623 -0.800000 12.500000 43.151440 -0.800000 12.600000 44.190256 -0.800000 12.700000 45.249073 -0.800000 12.800000 46.327889 -0.800000 12.900000 47.426706 -0.800000 13.000000 48.545522 -0.800000 13.100000 49.684339 -0.800000 13.200000 50.843155 -0.800000 13.300000 52.021972 -0.800000 13.400000 53.220788 -0.800000 13.500000 54.439604 -0.800000 13.600000 55.678421 -0.800000 13.700000 56.937237 -0.800000 13.800000 58.216054 -0.800000 13.900000 59.514870 -0.800000 14.000000 60.833687 -0.800000 14.100000 62.172503 -0.800000 14.200000 63.531320 -0.800000 14.300000 64.910136 -0.800000 14.400000 66.308953 -0.800000 14.500000 67.727769 -0.800000 14.600000 69.166586 -0.800000 14.700000 70.625402 -0.800000 14.800000 72.104219 -0.800000 14.900000 73.603035 -0.800000 15.000000 75.121852 -0.700000 -5.000000 165.632807 -0.700000 -4.900000 163.207330 -0.700000 -4.800000 160.801853 -0.700000 -4.700000 158.416376 -0.700000 -4.600000 156.050899 -0.700000 -4.500000 153.705422 -0.700000 -4.400000 151.379945 -0.700000 -4.300000 149.074468 -0.700000 -4.200000 146.788991 -0.700000 -4.100000 144.523514 -0.700000 -4.000000 142.278037 -0.700000 -3.900000 140.052560 -0.700000 -3.800000 137.847083 -0.700000 -3.700000 135.661606 -0.700000 -3.600000 133.496129 -0.700000 -3.500000 131.350652 -0.700000 -3.400000 129.225175 -0.700000 -3.300000 127.119698 -0.700000 -3.200000 125.034221 -0.700000 -3.100000 122.968744 -0.700000 -3.000000 120.923267 -0.700000 -2.900000 118.897789 -0.700000 -2.800000 116.892312 -0.700000 -2.700000 114.906835 -0.700000 -2.600000 112.941358 -0.700000 -2.500000 110.995881 -0.700000 -2.400000 109.070404 -0.700000 -2.300000 107.164927 -0.700000 -2.200000 105.279450 -0.700000 -2.100000 103.413973 -0.700000 -2.000000 101.568496 -0.700000 -1.900000 99.743019 -0.700000 -1.800000 97.937542 -0.700000 -1.700000 96.152065 -0.700000 -1.600000 94.386588 -0.700000 -1.500000 92.641111 -0.700000 -1.400000 90.915634 -0.700000 -1.300000 89.210157 -0.700000 -1.200000 87.524680 -0.700000 -1.100000 85.859203 -0.700000 -1.000000 84.213726 -0.700000 -0.900000 82.588249 -0.700000 -0.800000 80.982772 -0.700000 -0.700000 79.397295 -0.700000 -0.600000 77.831818 -0.700000 -0.500000 76.286341 -0.700000 -0.400000 74.760864 -0.700000 -0.300000 73.255387 -0.700000 -0.200000 71.769910 -0.700000 -0.100000 70.304433 -0.700000 -0.000000 68.858956 -0.700000 0.100000 67.433479 -0.700000 0.200000 66.028002 -0.700000 0.300000 64.642525 -0.700000 0.400000 63.277048 -0.700000 0.500000 61.931571 -0.700000 0.600000 60.606094 -0.700000 0.700000 59.300617 -0.700000 0.800000 58.015140 -0.700000 0.900000 56.749663 -0.700000 1.000000 55.504186 -0.700000 1.100000 54.278709 -0.700000 1.200000 53.073232 -0.700000 1.300000 51.887755 -0.700000 1.400000 50.722278 -0.700000 1.500000 49.576801 -0.700000 1.600000 48.451324 -0.700000 1.700000 47.345847 -0.700000 1.800000 46.260370 -0.700000 1.900000 45.194893 -0.700000 2.000000 44.149416 -0.700000 2.100000 43.123939 -0.700000 2.200000 42.118462 -0.700000 2.300000 41.132985 -0.700000 2.400000 40.167508 -0.700000 2.500000 39.222031 -0.700000 2.600000 38.296554 -0.700000 2.700000 37.391077 -0.700000 2.800000 36.505600 -0.700000 2.900000 35.640123 -0.700000 3.000000 34.794646 -0.700000 3.100000 33.969169 -0.700000 3.200000 33.163692 -0.700000 3.300000 32.378215 -0.700000 3.400000 31.612738 -0.700000 3.500000 30.867261 -0.700000 3.600000 30.141784 -0.700000 3.700000 29.436307 -0.700000 3.800000 28.750830 -0.700000 3.900000 28.085353 -0.700000 4.000000 27.439876 -0.700000 4.100000 26.814399 -0.700000 4.200000 26.208922 -0.700000 4.300000 25.623445 -0.700000 4.400000 25.057968 -0.700000 4.500000 24.512491 -0.700000 4.600000 23.987014 -0.700000 4.700000 23.481537 -0.700000 4.800000 22.996060 -0.700000 4.900000 22.530583 -0.700000 5.000000 22.085106 -0.700000 5.100000 21.659629 -0.700000 5.200000 21.254152 -0.700000 5.300000 20.868675 -0.700000 5.400000 20.503198 -0.700000 5.500000 20.157721 -0.700000 5.600000 19.832244 -0.700000 5.700000 19.526767 -0.700000 5.800000 19.241290 -0.700000 5.900000 18.975813 -0.700000 6.000000 18.730336 -0.700000 6.100000 18.504859 -0.700000 6.200000 18.299382 -0.700000 6.300000 18.113905 -0.700000 6.400000 17.948428 -0.700000 6.500000 17.802951 -0.700000 6.600000 17.677474 -0.700000 6.700000 17.571997 -0.700000 6.800000 17.486520 -0.700000 6.900000 17.421043 -0.700000 7.000000 17.375566 -0.700000 7.100000 17.350089 -0.700000 7.200000 17.344612 -0.700000 7.300000 17.359135 -0.700000 7.400000 17.393658 -0.700000 7.500000 17.448181 -0.700000 7.600000 17.522704 -0.700000 7.700000 17.617227 -0.700000 7.800000 17.731750 -0.700000 7.900000 17.866273 -0.700000 8.000000 18.020796 -0.700000 8.100000 18.195319 -0.700000 8.200000 18.389842 -0.700000 8.300000 18.604365 -0.700000 8.400000 18.838888 -0.700000 8.500000 19.093411 -0.700000 8.600000 19.367934 -0.700000 8.700000 19.662457 -0.700000 8.800000 19.976980 -0.700000 8.900000 20.311503 -0.700000 9.000000 20.666026 -0.700000 9.100000 21.040549 -0.700000 9.200000 21.435072 -0.700000 9.300000 21.849595 -0.700000 9.400000 22.284118 -0.700000 9.500000 22.738641 -0.700000 9.600000 23.213164 -0.700000 9.700000 23.707687 -0.700000 9.800000 24.222210 -0.700000 9.900000 24.756733 -0.700000 10.000000 25.311256 -0.700000 10.100000 25.885779 -0.700000 10.200000 26.480302 -0.700000 10.300000 27.094825 -0.700000 10.400000 27.729348 -0.700000 10.500000 28.383871 -0.700000 10.600000 29.058394 -0.700000 10.700000 29.752917 -0.700000 10.800000 30.467440 -0.700000 10.900000 31.201963 -0.700000 11.000000 31.956486 -0.700000 11.100000 32.731009 -0.700000 11.200000 33.525532 -0.700000 11.300000 34.340055 -0.700000 11.400000 35.174578 -0.700000 11.500000 36.029101 -0.700000 11.600000 36.903624 -0.700000 11.700000 37.798147 -0.700000 11.800000 38.712670 -0.700000 11.900000 39.647193 -0.700000 12.000000 40.601716 -0.700000 12.100000 41.576239 -0.700000 12.200000 42.570762 -0.700000 12.300000 43.585285 -0.700000 12.400000 44.619808 -0.700000 12.500000 45.674331 -0.700000 12.600000 46.748854 -0.700000 12.700000 47.843377 -0.700000 12.800000 48.957900 -0.700000 12.900000 50.092423 -0.700000 13.000000 51.246946 -0.700000 13.100000 52.421469 -0.700000 13.200000 53.615992 -0.700000 13.300000 54.830515 -0.700000 13.400000 56.065038 -0.700000 13.500000 57.319561 -0.700000 13.600000 58.594084 -0.700000 13.700000 59.888607 -0.700000 13.800000 61.203130 -0.700000 13.900000 62.537653 -0.700000 14.000000 63.892176 -0.700000 14.100000 65.266699 -0.700000 14.200000 66.661222 -0.700000 14.300000 68.075745 -0.700000 14.400000 69.510268 -0.700000 14.500000 70.964791 -0.700000 14.600000 72.439314 -0.700000 14.700000 73.933837 -0.700000 14.800000 75.448360 -0.700000 14.900000 76.982883 -0.700000 15.000000 78.537406 -0.600000 -5.000000 161.959434 -0.600000 -4.900000 159.569146 -0.600000 -4.800000 157.198859 -0.600000 -4.700000 154.848572 -0.600000 -4.600000 152.518285 -0.600000 -4.500000 150.207997 -0.600000 -4.400000 147.917710 -0.600000 -4.300000 145.647423 -0.600000 -4.200000 143.397136 -0.600000 -4.100000 141.166849 -0.600000 -4.000000 138.956561 -0.600000 -3.900000 136.766274 -0.600000 -3.800000 134.595987 -0.600000 -3.700000 132.445700 -0.600000 -3.600000 130.315413 -0.600000 -3.500000 128.205125 -0.600000 -3.400000 126.114838 -0.600000 -3.300000 124.044551 -0.600000 -3.200000 121.994264 -0.600000 -3.100000 119.963976 -0.600000 -3.000000 117.953689 -0.600000 -2.900000 115.963402 -0.600000 -2.800000 113.993115 -0.600000 -2.700000 112.042828 -0.600000 -2.600000 110.112540 -0.600000 -2.500000 108.202253 -0.600000 -2.400000 106.311966 -0.600000 -2.300000 104.441679 -0.600000 -2.200000 102.591392 -0.600000 -2.100000 100.761104 -0.600000 -2.000000 98.950817 -0.600000 -1.900000 97.160530 -0.600000 -1.800000 95.390243 -0.600000 -1.700000 93.639955 -0.600000 -1.600000 91.909668 -0.600000 -1.500000 90.199381 -0.600000 -1.400000 88.509094 -0.600000 -1.300000 86.838807 -0.600000 -1.200000 85.188519 -0.600000 -1.100000 83.558232 -0.600000 -1.000000 81.947945 -0.600000 -0.900000 80.357658 -0.600000 -0.800000 78.787370 -0.600000 -0.700000 77.237083 -0.600000 -0.600000 75.706796 -0.600000 -0.500000 74.196509 -0.600000 -0.400000 72.706222 -0.600000 -0.300000 71.235934 -0.600000 -0.200000 69.785647 -0.600000 -0.100000 68.355360 -0.600000 -0.000000 66.945073 -0.600000 0.100000 65.554786 -0.600000 0.200000 64.184498 -0.600000 0.300000 62.834211 -0.600000 0.400000 61.503924 -0.600000 0.500000 60.193637 -0.600000 0.600000 58.903349 -0.600000 0.700000 57.633062 -0.600000 0.800000 56.382775 -0.600000 0.900000 55.152488 -0.600000 1.000000 53.942201 -0.600000 1.100000 52.751913 -0.600000 1.200000 51.581626 -0.600000 1.300000 50.431339 -0.600000 1.400000 49.301052 -0.600000 1.500000 48.190765 -0.600000 1.600000 47.100477 -0.600000 1.700000 46.030190 -0.600000 1.800000 44.979903 -0.600000 1.900000 43.949616 -0.600000 2.000000 42.939328 -0.600000 2.100000 41.949041 -0.600000 2.200000 40.978754 -0.600000 2.300000 40.028467 -0.600000 2.400000 39.098180 -0.600000 2.500000 38.187892 -0.600000 2.600000 37.297605 -0.600000 2.700000 36.427318 -0.600000 2.800000 35.577031 -0.600000 2.900000 34.746743 -0.600000 3.000000 33.936456 -0.600000 3.100000 33.146169 -0.600000 3.200000 32.375882 -0.600000 3.300000 31.625595 -0.600000 3.400000 30.895307 -0.600000 3.500000 30.185020 -0.600000 3.600000 29.494733 -0.600000 3.700000 28.824446 -0.600000 3.800000 28.174159 -0.600000 3.900000 27.543871 -0.600000 4.000000 26.933584 -0.600000 4.100000 26.343297 -0.600000 4.200000 25.773010 -0.600000 4.300000 25.222722 -0.600000 4.400000 24.692435 -0.600000 4.500000 24.182148 -0.600000 4.600000 23.691861 -0.600000 4.700000 23.221574 -0.600000 4.800000 22.771286 -0.600000 4.900000 22.340999 -0.600000 5.000000 21.930712 -0.600000 5.100000 21.540425 -0.600000 5.200000 21.170137 -0.600000 5.300000 20.819850 -0.600000 5.400000 20.489563 -0.600000 5.500000 20.179276 -0.600000 5.600000 19.888989 -0.600000 5.700000 19.618701 -0.600000 5.800000 19.368414 -0.600000 5.900000 19.138127 -0.600000 6.000000 18.927840 -0.600000 6.100000 18.737553 -0.600000 6.200000 18.567265 -0.600000 6.300000 18.416978 -0.600000 6.400000 18.286691 -0.600000 6.500000 18.176404 -0.600000 6.600000 18.086116 -0.600000 6.700000 18.015829 -0.600000 6.800000 17.965542 -0.600000 6.900000 17.935255 -0.600000 7.000000 17.924968 -0.600000 7.100000 17.934680 -0.600000 7.200000 17.964393 -0.600000 7.300000 18.014106 -0.600000 7.400000 18.083819 -0.600000 7.500000 18.173532 -0.600000 7.600000 18.283244 -0.600000 7.700000 18.412957 -0.600000 7.800000 18.562670 -0.600000 7.900000 18.732383 -0.600000 8.000000 18.922095 -0.600000 8.100000 19.131808 -0.600000 8.200000 19.361521 -0.600000 8.300000 19.611234 -0.600000 8.400000 19.880947 -0.600000 8.500000 20.170659 -0.600000 8.600000 20.480372 -0.600000 8.700000 20.810085 -0.600000 8.800000 21.159798 -0.600000 8.900000 21.529510 -0.600000 9.000000 21.919223 -0.600000 9.100000 22.328936 -0.600000 9.200000 22.758649 -0.600000 9.300000 23.208362 -0.600000 9.400000 23.678074 -0.600000 9.500000 24.167787 -0.600000 9.600000 24.677500 -0.600000 9.700000 25.207213 -0.600000 9.800000 25.756926 -0.600000 9.900000 26.326638 -0.600000 10.000000 26.916351 -0.600000 10.100000 27.526064 -0.600000 10.200000 28.155777 -0.600000 10.300000 28.805489 -0.600000 10.400000 29.475202 -0.600000 10.500000 30.164915 -0.600000 10.600000 30.874628 -0.600000 10.700000 31.604341 -0.600000 10.800000 32.354053 -0.600000 10.900000 33.123766 -0.600000 11.000000 33.913479 -0.600000 11.100000 34.723192 -0.600000 11.200000 35.552905 -0.600000 11.300000 36.402617 -0.600000 11.400000 37.272330 -0.600000 11.500000 38.162043 -0.600000 11.600000 39.071756 -0.600000 11.700000 40.001468 -0.600000 11.800000 40.951181 -0.600000 11.900000 41.920894 -0.600000 12.000000 42.910607 -0.600000 12.100000 43.920320 -0.600000 12.200000 44.950032 -0.600000 12.300000 45.999745 -0.600000 12.400000 47.069458 -0.600000 12.500000 48.159171 -0.600000 12.600000 49.268883 -0.600000 12.700000 50.398596 -0.600000 12.800000 51.548309 -0.600000 12.900000 52.718022 -0.600000 13.000000 53.907735 -0.600000 13.100000 55.117447 -0.600000 13.200000 56.347160 -0.600000 13.300000 57.596873 -0.600000 13.400000 58.866586 -0.600000 13.500000 60.156299 -0.600000 13.600000 61.466011 -0.600000 13.700000 62.795724 -0.600000 13.800000 64.145437 -0.600000 13.900000 65.515150 -0.600000 14.000000 66.904862 -0.600000 14.100000 68.314575 -0.600000 14.200000 69.744288 -0.600000 14.300000 71.194001 -0.600000 14.400000 72.663714 -0.600000 14.500000 74.153426 -0.600000 14.600000 75.663139 -0.600000 14.700000 77.192852 -0.600000 14.800000 78.742565 -0.600000 14.900000 80.312278 -0.600000 15.000000 81.901990 -0.500000 -5.000000 158.329906 -0.500000 -4.900000 155.974292 -0.500000 -4.800000 153.638678 -0.500000 -4.700000 151.323064 -0.500000 -4.600000 149.027450 -0.500000 -4.500000 146.751836 -0.500000 -4.400000 144.496221 -0.500000 -4.300000 142.260607 -0.500000 -4.200000 140.044993 -0.500000 -4.100000 137.849379 -0.500000 -4.000000 135.673765 -0.500000 -3.900000 133.518151 -0.500000 -3.800000 131.382536 -0.500000 -3.700000 129.266922 -0.500000 -3.600000 127.171308 -0.500000 -3.500000 125.095694 -0.500000 -3.400000 123.040080 -0.500000 -3.300000 121.004466 -0.500000 -3.200000 118.988851 -0.500000 -3.100000 116.993237 -0.500000 -3.000000 115.017623 -0.500000 -2.900000 113.062009 -0.500000 -2.800000 111.126395 -0.500000 -2.700000 109.210781 -0.500000 -2.600000 107.315166 -0.500000 -2.500000 105.439552 -0.500000 -2.400000 103.583938 -0.500000 -2.300000 101.748324 -0.500000 -2.200000 99.932710 -0.500000 -2.100000 98.137096 -0.500000 -2.000000 96.361481 -0.500000 -1.900000 94.605867 -0.500000 -1.800000 92.870253 -0.500000 -1.700000 91.154639 -0.500000 -1.600000 89.459025 -0.500000 -1.500000 87.783411 -0.500000 -1.400000 86.127796 -0.500000 -1.300000 84.492182 -0.500000 -1.200000 82.876568 -0.500000 -1.100000 81.280954 -0.500000 -1.000000 79.705340 -0.500000 -0.900000 78.149726 -0.500000 -0.800000 76.614111 -0.500000 -0.700000 75.098497 -0.500000 -0.600000 73.602883 -0.500000 -0.500000 72.127269 -0.500000 -0.400000 70.671655 -0.500000 -0.300000 69.236041 -0.500000 -0.200000 67.820426 -0.500000 -0.100000 66.424812 -0.500000 -0.000000 65.049198 -0.500000 0.100000 63.693584 -0.500000 0.200000 62.357970 -0.500000 0.300000 61.042356 -0.500000 0.400000 59.746741 -0.500000 0.500000 58.471127 -0.500000 0.600000 57.215513 -0.500000 0.700000 55.979899 -0.500000 0.800000 54.764285 -0.500000 0.900000 53.568671 -0.500000 1.000000 52.393056 -0.500000 1.100000 51.237442 -0.500000 1.200000 50.101828 -0.500000 1.300000 48.986214 -0.500000 1.400000 47.890600 -0.500000 1.500000 46.814986 -0.500000 1.600000 45.759371 -0.500000 1.700000 44.723757 -0.500000 1.800000 43.708143 -0.500000 1.900000 42.712529 -0.500000 2.000000 41.736915 -0.500000 2.100000 40.781301 -0.500000 2.200000 39.845686 -0.500000 2.300000 38.930072 -0.500000 2.400000 38.034458 -0.500000 2.500000 37.158844 -0.500000 2.600000 36.303230 -0.500000 2.700000 35.467615 -0.500000 2.800000 34.652001 -0.500000 2.900000 33.856387 -0.500000 3.000000 33.080773 -0.500000 3.100000 32.325159 -0.500000 3.200000 31.589545 -0.500000 3.300000 30.873930 -0.500000 3.400000 30.178316 -0.500000 3.500000 29.502702 -0.500000 3.600000 28.847088 -0.500000 3.700000 28.211474 -0.500000 3.800000 27.595860 -0.500000 3.900000 27.000245 -0.500000 4.000000 26.424631 -0.500000 4.100000 25.869017 -0.500000 4.200000 25.333403 -0.500000 4.300000 24.817789 -0.500000 4.400000 24.322175 -0.500000 4.500000 23.846560 -0.500000 4.600000 23.390946 -0.500000 4.700000 22.955332 -0.500000 4.800000 22.539718 -0.500000 4.900000 22.144104 -0.500000 5.000000 21.768490 -0.500000 5.100000 21.412875 -0.500000 5.200000 21.077261 -0.500000 5.300000 20.761647 -0.500000 5.400000 20.466033 -0.500000 5.500000 20.190419 -0.500000 5.600000 19.934805 -0.500000 5.700000 19.699190 -0.500000 5.800000 19.483576 -0.500000 5.900000 19.287962 -0.500000 6.000000 19.112348 -0.500000 6.100000 18.956734 -0.500000 6.200000 18.821120 -0.500000 6.300000 18.705505 -0.500000 6.400000 18.609891 -0.500000 6.500000 18.534277 -0.500000 6.600000 18.478663 -0.500000 6.700000 18.443049 -0.500000 6.800000 18.427435 -0.500000 6.900000 18.431820 -0.500000 7.000000 18.456206 -0.500000 7.100000 18.500592 -0.500000 7.200000 18.564978 -0.500000 7.300000 18.649364 -0.500000 7.400000 18.753750 -0.500000 7.500000 18.878135 -0.500000 7.600000 19.022521 -0.500000 7.700000 19.186907 -0.500000 7.800000 19.371293 -0.500000 7.900000 19.575679 -0.500000 8.000000 19.800065 -0.500000 8.100000 20.044450 -0.500000 8.200000 20.308836 -0.500000 8.300000 20.593222 -0.500000 8.400000 20.897608 -0.500000 8.500000 21.221994 -0.500000 8.600000 21.566380 -0.500000 8.700000 21.930765 -0.500000 8.800000 22.315151 -0.500000 8.900000 22.719537 -0.500000 9.000000 23.143923 -0.500000 9.100000 23.588309 -0.500000 9.200000 24.052695 -0.500000 9.300000 24.537080 -0.500000 9.400000 25.041466 -0.500000 9.500000 25.565852 -0.500000 9.600000 26.110238 -0.500000 9.700000 26.674624 -0.500000 9.800000 27.259010 -0.500000 9.900000 27.863395 -0.500000 10.000000 28.487781 -0.500000 10.100000 29.132167 -0.500000 10.200000 29.796553 -0.500000 10.300000 30.480939 -0.500000 10.400000 31.185325 -0.500000 10.500000 31.909710 -0.500000 10.600000 32.654096 -0.500000 10.700000 33.418482 -0.500000 10.800000 34.202868 -0.500000 10.900000 35.007254 -0.500000 11.000000 35.831640 -0.500000 11.100000 36.676025 -0.500000 11.200000 37.540411 -0.500000 11.300000 38.424797 -0.500000 11.400000 39.329183 -0.500000 11.500000 40.253569 -0.500000 11.600000 41.197954 -0.500000 11.700000 42.162340 -0.500000 11.800000 43.146726 -0.500000 11.900000 44.151112 -0.500000 12.000000 45.175498 -0.500000 12.100000 46.219884 -0.500000 12.200000 47.284269 -0.500000 12.300000 48.368655 -0.500000 12.400000 49.473041 -0.500000 12.500000 50.597427 -0.500000 12.600000 51.741813 -0.500000 12.700000 52.906199 -0.500000 12.800000 54.090584 -0.500000 12.900000 55.294970 -0.500000 13.000000 56.519356 -0.500000 13.100000 57.763742 -0.500000 13.200000 59.028128 -0.500000 13.300000 60.312514 -0.500000 13.400000 61.616899 -0.500000 13.500000 62.941285 -0.500000 13.600000 64.285671 -0.500000 13.700000 65.650057 -0.500000 13.800000 67.034443 -0.500000 13.900000 68.438829 -0.500000 14.000000 69.863214 -0.500000 14.100000 71.307600 -0.500000 14.200000 72.771986 -0.500000 14.300000 74.256372 -0.500000 14.400000 75.760758 -0.500000 14.500000 77.285144 -0.500000 14.600000 78.829529 -0.500000 14.700000 80.393915 -0.500000 14.800000 81.978301 -0.500000 14.900000 83.582687 -0.500000 15.000000 85.207073 -0.400000 -5.000000 154.736525 -0.400000 -4.900000 152.415067 -0.400000 -4.800000 150.113609 -0.400000 -4.700000 147.832152 -0.400000 -4.600000 145.570694 -0.400000 -4.500000 143.329236 -0.400000 -4.400000 141.107778 -0.400000 -4.300000 138.906320 -0.400000 -4.200000 136.724862 -0.400000 -4.100000 134.563404 -0.400000 -4.000000 132.421947 -0.400000 -3.900000 130.300489 -0.400000 -3.800000 128.199031 -0.400000 -3.700000 126.117573 -0.400000 -3.600000 124.056115 -0.400000 -3.500000 122.014657 -0.400000 -3.400000 119.993199 -0.400000 -3.300000 117.991741 -0.400000 -3.200000 116.010284 -0.400000 -3.100000 114.048826 -0.400000 -3.000000 112.107368 -0.400000 -2.900000 110.185910 -0.400000 -2.800000 108.284452 -0.400000 -2.700000 106.402994 -0.400000 -2.600000 104.541536 -0.400000 -2.500000 102.700079 -0.400000 -2.400000 100.878621 -0.400000 -2.300000 99.077163 -0.400000 -2.200000 97.295705 -0.400000 -2.100000 95.534247 -0.400000 -2.000000 93.792789 -0.400000 -1.900000 92.071331 -0.400000 -1.800000 90.369874 -0.400000 -1.700000 88.688416 -0.400000 -1.600000 87.026958 -0.400000 -1.500000 85.385500 -0.400000 -1.400000 83.764042 -0.400000 -1.300000 82.162584 -0.400000 -1.200000 80.581126 -0.400000 -1.100000 79.019669 -0.400000 -1.000000 77.478211 -0.400000 -0.900000 75.956753 -0.400000 -0.800000 74.455295 -0.400000 -0.700000 72.973837 -0.400000 -0.600000 71.512379 -0.400000 -0.500000 70.070921 -0.400000 -0.400000 68.649464 -0.400000 -0.300000 67.248006 -0.400000 -0.200000 65.866548 -0.400000 -0.100000 64.505090 -0.400000 -0.000000 63.163632 -0.400000 0.100000 61.842174 -0.400000 0.200000 60.540716 -0.400000 0.300000 59.259259 -0.400000 0.400000 57.997801 -0.400000 0.500000 56.756343 -0.400000 0.600000 55.534885 -0.400000 0.700000 54.333427 -0.400000 0.800000 53.151969 -0.400000 0.900000 51.990511 -0.400000 1.000000 50.849054 -0.400000 1.100000 49.727596 -0.400000 1.200000 48.626138 -0.400000 1.300000 47.544680 -0.400000 1.400000 46.483222 -0.400000 1.500000 45.441764 -0.400000 1.600000 44.420306 -0.400000 1.700000 43.418849 -0.400000 1.800000 42.437391 -0.400000 1.900000 41.475933 -0.400000 2.000000 40.534475 -0.400000 2.100000 39.613017 -0.400000 2.200000 38.711559 -0.400000 2.300000 37.830101 -0.400000 2.400000 36.968644 -0.400000 2.500000 36.127186 -0.400000 2.600000 35.305728 -0.400000 2.700000 34.504270 -0.400000 2.800000 33.722812 -0.400000 2.900000 32.961354 -0.400000 3.000000 32.219896 -0.400000 3.100000 31.498439 -0.400000 3.200000 30.796981 -0.400000 3.300000 30.115523 -0.400000 3.400000 29.454065 -0.400000 3.500000 28.812607 -0.400000 3.600000 28.191149 -0.400000 3.700000 27.589691 -0.400000 3.800000 27.008234 -0.400000 3.900000 26.446776 -0.400000 4.000000 25.905318 -0.400000 4.100000 25.383860 -0.400000 4.200000 24.882402 -0.400000 4.300000 24.400944 -0.400000 4.400000 23.939486 -0.400000 4.500000 23.498029 -0.400000 4.600000 23.076571 -0.400000 4.700000 22.675113 -0.400000 4.800000 22.293655 -0.400000 4.900000 21.932197 -0.400000 5.000000 21.590739 -0.400000 5.100000 21.269281 -0.400000 5.200000 20.967824 -0.400000 5.300000 20.686366 -0.400000 5.400000 20.424908 -0.400000 5.500000 20.183450 -0.400000 5.600000 19.961992 -0.400000 5.700000 19.760534 -0.400000 5.800000 19.579076 -0.400000 5.900000 19.417618 -0.400000 6.000000 19.276161 -0.400000 6.100000 19.154703 -0.400000 6.200000 19.053245 -0.400000 6.300000 18.971787 -0.400000 6.400000 18.910329 -0.400000 6.500000 18.868871 -0.400000 6.600000 18.847413 -0.400000 6.700000 18.845956 -0.400000 6.800000 18.864498 -0.400000 6.900000 18.903040 -0.400000 7.000000 18.961582 -0.400000 7.100000 19.040124 -0.400000 7.200000 19.138666 -0.400000 7.300000 19.257208 -0.400000 7.400000 19.395751 -0.400000 7.500000 19.554293 -0.400000 7.600000 19.732835 -0.400000 7.700000 19.931377 -0.400000 7.800000 20.149919 -0.400000 7.900000 20.388461 -0.400000 8.000000 20.647003 -0.400000 8.100000 20.925546 -0.400000 8.200000 21.224088 -0.400000 8.300000 21.542630 -0.400000 8.400000 21.881172 -0.400000 8.500000 22.239714 -0.400000 8.600000 22.618256 -0.400000 8.700000 23.016798 -0.400000 8.800000 23.435341 -0.400000 8.900000 23.873883 -0.400000 9.000000 24.332425 -0.400000 9.100000 24.810967 -0.400000 9.200000 25.309509 -0.400000 9.300000 25.828051 -0.400000 9.400000 26.366593 -0.400000 9.500000 26.925136 -0.400000 9.600000 27.503678 -0.400000 9.700000 28.102220 -0.400000 9.800000 28.720762 -0.400000 9.900000 29.359304 -0.400000 10.000000 30.017846 -0.400000 10.100000 30.696388 -0.400000 10.200000 31.394931 -0.400000 10.300000 32.113473 -0.400000 10.400000 32.852015 -0.400000 10.500000 33.610557 -0.400000 10.600000 34.389099 -0.400000 10.700000 35.187641 -0.400000 10.800000 36.006183 -0.400000 10.900000 36.844726 -0.400000 11.000000 37.703268 -0.400000 11.100000 38.581810 -0.400000 11.200000 39.480352 -0.400000 11.300000 40.398894 -0.400000 11.400000 41.337436 -0.400000 11.500000 42.295978 -0.400000 11.600000 43.274521 -0.400000 11.700000 44.273063 -0.400000 11.800000 45.291605 -0.400000 11.900000 46.330147 -0.400000 12.000000 47.388689 -0.400000 12.100000 48.467231 -0.400000 12.200000 49.565773 -0.400000 12.300000 50.684316 -0.400000 12.400000 51.822858 -0.400000 12.500000 52.981400 -0.400000 12.600000 54.159942 -0.400000 12.700000 55.358484 -0.400000 12.800000 56.577026 -0.400000 12.900000 57.815568 -0.400000 13.000000 59.074111 -0.400000 13.100000 60.352653 -0.400000 13.200000 61.651195 -0.400000 13.300000 62.969737 -0.400000 13.400000 64.308279 -0.400000 13.500000 65.666821 -0.400000 13.600000 67.045363 -0.400000 13.700000 68.443906 -0.400000 13.800000 69.862448 -0.400000 13.900000 71.300990 -0.400000 14.000000 72.759532 -0.400000 14.100000 74.238074 -0.400000 14.200000 75.736616 -0.400000 14.300000 77.255158 -0.400000 14.400000 78.793700 -0.400000 14.500000 80.352243 -0.400000 14.600000 81.930785 -0.400000 14.700000 83.529327 -0.400000 14.800000 85.147869 -0.400000 14.900000 86.786411 -0.400000 15.000000 88.444953 -0.300000 -5.000000 151.172471 -0.300000 -4.900000 148.884652 -0.300000 -4.800000 146.616834 -0.300000 -4.700000 144.369016 -0.300000 -4.600000 142.141197 -0.300000 -4.500000 139.933379 -0.300000 -4.400000 137.745561 -0.300000 -4.300000 135.577743 -0.300000 -4.200000 133.429924 -0.300000 -4.100000 131.302106 -0.300000 -4.000000 129.194288 -0.300000 -3.900000 127.106469 -0.300000 -3.800000 125.038651 -0.300000 -3.700000 122.990833 -0.300000 -3.600000 120.963015 -0.300000 -3.500000 118.955196 -0.300000 -3.400000 116.967378 -0.300000 -3.300000 114.999560 -0.300000 -3.200000 113.051741 -0.300000 -3.100000 111.123923 -0.300000 -3.000000 109.216105 -0.300000 -2.900000 107.328287 -0.300000 -2.800000 105.460468 -0.300000 -2.700000 103.612650 -0.300000 -2.600000 101.784832 -0.300000 -2.500000 99.977013 -0.300000 -2.400000 98.189195 -0.300000 -2.300000 96.421377 -0.300000 -2.200000 94.673559 -0.300000 -2.100000 92.945740 -0.300000 -2.000000 91.237922 -0.300000 -1.900000 89.550104 -0.300000 -1.800000 87.882285 -0.300000 -1.700000 86.234467 -0.300000 -1.600000 84.606649 -0.300000 -1.500000 82.998831 -0.300000 -1.400000 81.411012 -0.300000 -1.300000 79.843194 -0.300000 -1.200000 78.295376 -0.300000 -1.100000 76.767557 -0.300000 -1.000000 75.259739 -0.300000 -0.900000 73.771921 -0.300000 -0.800000 72.304103 -0.300000 -0.700000 70.856284 -0.300000 -0.600000 69.428466 -0.300000 -0.500000 68.020648 -0.300000 -0.400000 66.632829 -0.300000 -0.300000 65.265011 -0.300000 -0.200000 63.917193 -0.300000 -0.100000 62.589375 -0.300000 -0.000000 61.281556 -0.300000 0.100000 59.993738 -0.300000 0.200000 58.725920 -0.300000 0.300000 57.478101 -0.300000 0.400000 56.250283 -0.300000 0.500000 55.042465 -0.300000 0.600000 53.854647 -0.300000 0.700000 52.686828 -0.300000 0.800000 51.539010 -0.300000 0.900000 50.411192 -0.300000 1.000000 49.303373 -0.300000 1.100000 48.215555 -0.300000 1.200000 47.147737 -0.300000 1.300000 46.099919 -0.300000 1.400000 45.072100 -0.300000 1.500000 44.064282 -0.300000 1.600000 43.076464 -0.300000 1.700000 42.108645 -0.300000 1.800000 41.160827 -0.300000 1.900000 40.233009 -0.300000 2.000000 39.325190 -0.300000 2.100000 38.437372 -0.300000 2.200000 37.569554 -0.300000 2.300000 36.721736 -0.300000 2.400000 35.893917 -0.300000 2.500000 35.086099 -0.300000 2.600000 34.298281 -0.300000 2.700000 33.530462 -0.300000 2.800000 32.782644 -0.300000 2.900000 32.054826 -0.300000 3.000000 31.347008 -0.300000 3.100000 30.659189 -0.300000 3.200000 29.991371 -0.300000 3.300000 29.343553 -0.300000 3.400000 28.715734 -0.300000 3.500000 28.107916 -0.300000 3.600000 27.520098 -0.300000 3.700000 26.952280 -0.300000 3.800000 26.404461 -0.300000 3.900000 25.876643 -0.300000 4.000000 25.368825 -0.300000 4.100000 24.881006 -0.300000 4.200000 24.413188 -0.300000 4.300000 23.965370 -0.300000 4.400000 23.537552 -0.300000 4.500000 23.129733 -0.300000 4.600000 22.741915 -0.300000 4.700000 22.374097 -0.300000 4.800000 22.026278 -0.300000 4.900000 21.698460 -0.300000 5.000000 21.390642 -0.300000 5.100000 21.102824 -0.300000 5.200000 20.835005 -0.300000 5.300000 20.587187 -0.300000 5.400000 20.359369 -0.300000 5.500000 20.151550 -0.300000 5.600000 19.963732 -0.300000 5.700000 19.795914 -0.300000 5.800000 19.648096 -0.300000 5.900000 19.520277 -0.300000 6.000000 19.412459 -0.300000 6.100000 19.324641 -0.300000 6.200000 19.256822 -0.300000 6.300000 19.209004 -0.300000 6.400000 19.181186 -0.300000 6.500000 19.173368 -0.300000 6.600000 19.185549 -0.300000 6.700000 19.217731 -0.300000 6.800000 19.269913 -0.300000 6.900000 19.342094 -0.300000 7.000000 19.434276 -0.300000 7.100000 19.546458 -0.300000 7.200000 19.678640 -0.300000 7.300000 19.830821 -0.300000 7.400000 20.003003 -0.300000 7.500000 20.195185 -0.300000 7.600000 20.407366 -0.300000 7.700000 20.639548 -0.300000 7.800000 20.891730 -0.300000 7.900000 21.163912 -0.300000 8.000000 21.456093 -0.300000 8.100000 21.768275 -0.300000 8.200000 22.100457 -0.300000 8.300000 22.452638 -0.300000 8.400000 22.824820 -0.300000 8.500000 23.217002 -0.300000 8.600000 23.629184 -0.300000 8.700000 24.061365 -0.300000 8.800000 24.513547 -0.300000 8.900000 24.985729 -0.300000 9.000000 25.477910 -0.300000 9.100000 25.990092 -0.300000 9.200000 26.522274 -0.300000 9.300000 27.074456 -0.300000 9.400000 27.646637 -0.300000 9.500000 28.238819 -0.300000 9.600000 28.851001 -0.300000 9.700000 29.483182 -0.300000 9.800000 30.135364 -0.300000 9.900000 30.807546 -0.300000 10.000000 31.499728 -0.300000 10.100000 32.211909 -0.300000 10.200000 32.944091 -0.300000 10.300000 33.696273 -0.300000 10.400000 34.468454 -0.300000 10.500000 35.260636 -0.300000 10.600000 36.072818 -0.300000 10.700000 36.905000 -0.300000 10.800000 37.757181 -0.300000 10.900000 38.629363 -0.300000 11.000000 39.521545 -0.300000 11.100000 40.433726 -0.300000 11.200000 41.365908 -0.300000 11.300000 42.318090 -0.300000 11.400000 43.290272 -0.300000 11.500000 44.282453 -0.300000 11.600000 45.294635 -0.300000 11.700000 46.326817 -0.300000 11.800000 47.378998 -0.300000 11.900000 48.451180 -0.300000 12.000000 49.543362 -0.300000 12.100000 50.655544 -0.300000 12.200000 51.787725 -0.300000 12.300000 52.939907 -0.300000 12.400000 54.112089 -0.300000 12.500000 55.304270 -0.300000 12.600000 56.516452 -0.300000 12.700000 57.748634 -0.300000 12.800000 59.000815 -0.300000 12.900000 60.272997 -0.300000 13.000000 61.565179 -0.300000 13.100000 62.877361 -0.300000 13.200000 64.209542 -0.300000 13.300000 65.561724 -0.300000 13.400000 66.933906 -0.300000 13.500000 68.326087 -0.300000 13.600000 69.738269 -0.300000 13.700000 71.170451 -0.300000 13.800000 72.622633 -0.300000 13.900000 74.094814 -0.300000 14.000000 75.586996 -0.300000 14.100000 77.099178 -0.300000 14.200000 78.631359 -0.300000 14.300000 80.183541 -0.300000 14.400000 81.755723 -0.300000 14.500000 83.347905 -0.300000 14.600000 84.960086 -0.300000 14.700000 86.592268 -0.300000 14.800000 88.244450 -0.300000 14.900000 89.916631 -0.300000 15.000000 91.608813 -0.200000 -5.000000 147.631847 -0.200000 -4.900000 145.377152 -0.200000 -4.800000 143.142456 -0.200000 -4.700000 140.927761 -0.200000 -4.600000 138.733065 -0.200000 -4.500000 136.558370 -0.200000 -4.400000 134.403674 -0.200000 -4.300000 132.268979 -0.200000 -4.200000 130.154283 -0.200000 -4.100000 128.059588 -0.200000 -4.000000 125.984893 -0.200000 -3.900000 123.930197 -0.200000 -3.800000 121.895502 -0.200000 -3.700000 119.880806 -0.200000 -3.600000 117.886111 -0.200000 -3.500000 115.911415 -0.200000 -3.400000 113.956720 -0.200000 -3.300000 112.022024 -0.200000 -3.200000 110.107329 -0.200000 -3.100000 108.212633 -0.200000 -3.000000 106.337938 -0.200000 -2.900000 104.483243 -0.200000 -2.800000 102.648547 -0.200000 -2.700000 100.833852 -0.200000 -2.600000 99.039156 -0.200000 -2.500000 97.264461 -0.200000 -2.400000 95.509765 -0.200000 -2.300000 93.775070 -0.200000 -2.200000 92.060374 -0.200000 -2.100000 90.365679 -0.200000 -2.000000 88.690983 -0.200000 -1.900000 87.036288 -0.200000 -1.800000 85.401593 -0.200000 -1.700000 83.786897 -0.200000 -1.600000 82.192202 -0.200000 -1.500000 80.617506 -0.200000 -1.400000 79.062811 -0.200000 -1.300000 77.528115 -0.200000 -1.200000 76.013420 -0.200000 -1.100000 74.518724 -0.200000 -1.000000 73.044029 -0.200000 -0.900000 71.589333 -0.200000 -0.800000 70.154638 -0.200000 -0.700000 68.739943 -0.200000 -0.600000 67.345247 -0.200000 -0.500000 65.970552 -0.200000 -0.400000 64.615856 -0.200000 -0.300000 63.281161 -0.200000 -0.200000 61.966465 -0.200000 -0.100000 60.671770 -0.200000 -0.000000 59.397074 -0.200000 0.100000 58.142379 -0.200000 0.200000 56.907684 -0.200000 0.300000 55.692988 -0.200000 0.400000 54.498293 -0.200000 0.500000 53.323597 -0.200000 0.600000 52.168902 -0.200000 0.700000 51.034206 -0.200000 0.800000 49.919511 -0.200000 0.900000 48.824815 -0.200000 1.000000 47.750120 -0.200000 1.100000 46.695424 -0.200000 1.200000 45.660729 -0.200000 1.300000 44.646034 -0.200000 1.400000 43.651338 -0.200000 1.500000 42.676643 -0.200000 1.600000 41.721947 -0.200000 1.700000 40.787252 -0.200000 1.800000 39.872556 -0.200000 1.900000 38.977861 -0.200000 2.000000 38.103165 -0.200000 2.100000 37.248470 -0.200000 2.200000 36.413774 -0.200000 2.300000 35.599079 -0.200000 2.400000 34.804384 -0.200000 2.500000 34.029688 -0.200000 2.600000 33.274993 -0.200000 2.700000 32.540297 -0.200000 2.800000 31.825602 -0.200000 2.900000 31.130906 -0.200000 3.000000 30.456211 -0.200000 3.100000 29.801515 -0.200000 3.200000 29.166820 -0.200000 3.300000 28.552124 -0.200000 3.400000 27.957429 -0.200000 3.500000 27.382734 -0.200000 3.600000 26.828038 -0.200000 3.700000 26.293343 -0.200000 3.800000 25.778647 -0.200000 3.900000 25.283952 -0.200000 4.000000 24.809256 -0.200000 4.100000 24.354561 -0.200000 4.200000 23.919865 -0.200000 4.300000 23.505170 -0.200000 4.400000 23.110474 -0.200000 4.500000 22.735779 -0.200000 4.600000 22.381084 -0.200000 4.700000 22.046388 -0.200000 4.800000 21.731693 -0.200000 4.900000 21.436997 -0.200000 5.000000 21.162302 -0.200000 5.100000 20.907606 -0.200000 5.200000 20.672911 -0.200000 5.300000 20.458215 -0.200000 5.400000 20.263520 -0.200000 5.500000 20.088824 -0.200000 5.600000 19.934129 -0.200000 5.700000 19.799434 -0.200000 5.800000 19.684738 -0.200000 5.900000 19.590043 -0.200000 6.000000 19.515347 -0.200000 6.100000 19.460652 -0.200000 6.200000 19.425956 -0.200000 6.300000 19.411261 -0.200000 6.400000 19.416565 -0.200000 6.500000 19.441870 -0.200000 6.600000 19.487174 -0.200000 6.700000 19.552479 -0.200000 6.800000 19.637784 -0.200000 6.900000 19.743088 -0.200000 7.000000 19.868393 -0.200000 7.100000 20.013697 -0.200000 7.200000 20.179002 -0.200000 7.300000 20.364306 -0.200000 7.400000 20.569611 -0.200000 7.500000 20.794915 -0.200000 7.600000 21.040220 -0.200000 7.700000 21.305525 -0.200000 7.800000 21.590829 -0.200000 7.900000 21.896134 -0.200000 8.000000 22.221438 -0.200000 8.100000 22.566743 -0.200000 8.200000 22.932047 -0.200000 8.300000 23.317352 -0.200000 8.400000 23.722656 -0.200000 8.500000 24.147961 -0.200000 8.600000 24.593265 -0.200000 8.700000 25.058570 -0.200000 8.800000 25.543875 -0.200000 8.900000 26.049179 -0.200000 9.000000 26.574484 -0.200000 9.100000 27.119788 -0.200000 9.200000 27.685093 -0.200000 9.300000 28.270397 -0.200000 9.400000 28.875702 -0.200000 9.500000 29.501006 -0.200000 9.600000 30.146311 -0.200000 9.700000 30.811615 -0.200000 9.800000 31.496920 -0.200000 9.900000 32.202225 -0.200000 10.000000 32.927529 -0.200000 10.100000 33.672834 -0.200000 10.200000 34.438138 -0.200000 10.300000 35.223443 -0.200000 10.400000 36.028747 -0.200000 10.500000 36.854052 -0.200000 10.600000 37.699356 -0.200000 10.700000 38.564661 -0.200000 10.800000 39.449965 -0.200000 10.900000 40.355270 -0.200000 11.000000 41.280575 -0.200000 11.100000 42.225879 -0.200000 11.200000 43.191184 -0.200000 11.300000 44.176488 -0.200000 11.400000 45.181793 -0.200000 11.500000 46.207097 -0.200000 11.600000 47.252402 -0.200000 11.700000 48.317706 -0.200000 11.800000 49.403011 -0.200000 11.900000 50.508315 -0.200000 12.000000 51.633620 -0.200000 12.100000 52.778925 -0.200000 12.200000 53.944229 -0.200000 12.300000 55.129534 -0.200000 12.400000 56.334838 -0.200000 12.500000 57.560143 -0.200000 12.600000 58.805447 -0.200000 12.700000 60.070752 -0.200000 12.800000 61.356056 -0.200000 12.900000 62.661361 -0.200000 13.000000 63.986665 -0.200000 13.100000 65.331970 -0.200000 13.200000 66.697275 -0.200000 13.300000 68.082579 -0.200000 13.400000 69.487884 -0.200000 13.500000 70.913188 -0.200000 13.600000 72.358493 -0.200000 13.700000 73.823797 -0.200000 13.800000 75.309102 -0.200000 13.900000 76.814406 -0.200000 14.000000 78.339711 -0.200000 14.100000 79.885016 -0.200000 14.200000 81.450320 -0.200000 14.300000 83.035625 -0.200000 14.400000 84.640929 -0.200000 14.500000 86.266234 -0.200000 14.600000 87.911538 -0.200000 14.700000 89.576843 -0.200000 14.800000 91.262147 -0.200000 14.900000 92.967452 -0.200000 15.000000 94.692756 -0.100000 -5.000000 144.109715 -0.100000 -4.900000 141.887625 -0.100000 -4.800000 139.685536 -0.100000 -4.700000 137.503447 -0.100000 -4.600000 135.341357 -0.100000 -4.500000 133.199268 -0.100000 -4.400000 131.077178 -0.100000 -4.300000 128.975089 -0.100000 -4.200000 126.893000 -0.100000 -4.100000 124.830910 -0.100000 -4.000000 122.788821 -0.100000 -3.900000 120.766732 -0.100000 -3.800000 118.764642 -0.100000 -3.700000 116.782553 -0.100000 -3.600000 114.820464 -0.100000 -3.500000 112.878374 -0.100000 -3.400000 110.956285 -0.100000 -3.300000 109.054196 -0.100000 -3.200000 107.172106 -0.100000 -3.100000 105.310017 -0.100000 -3.000000 103.467927 -0.100000 -2.900000 101.645838 -0.100000 -2.800000 99.843749 -0.100000 -2.700000 98.061659 -0.100000 -2.600000 96.299570 -0.100000 -2.500000 94.557481 -0.100000 -2.400000 92.835391 -0.100000 -2.300000 91.133302 -0.100000 -2.200000 89.451213 -0.100000 -2.100000 87.789123 -0.100000 -2.000000 86.147034 -0.100000 -1.900000 84.524944 -0.100000 -1.800000 82.922855 -0.100000 -1.700000 81.340766 -0.100000 -1.600000 79.778676 -0.100000 -1.500000 78.236587 -0.100000 -1.400000 76.714498 -0.100000 -1.300000 75.212408 -0.100000 -1.200000 73.730319 -0.100000 -1.100000 72.268230 -0.100000 -1.000000 70.826140 -0.100000 -0.900000 69.404051 -0.100000 -0.800000 68.001962 -0.100000 -0.700000 66.619872 -0.100000 -0.600000 65.257783 -0.100000 -0.500000 63.915693 -0.100000 -0.400000 62.593604 -0.100000 -0.300000 61.291515 -0.100000 -0.200000 60.009425 -0.100000 -0.100000 58.747336 -0.100000 -0.000000 57.505247 -0.100000 0.100000 56.283157 -0.100000 0.200000 55.081068 -0.100000 0.300000 53.898979 -0.100000 0.400000 52.736889 -0.100000 0.500000 51.594800 -0.100000 0.600000 50.472711 -0.100000 0.700000 49.370621 -0.100000 0.800000 48.288532 -0.100000 0.900000 47.226442 -0.100000 1.000000 46.184353 -0.100000 1.100000 45.162264 -0.100000 1.200000 44.160174 -0.100000 1.300000 43.178085 -0.100000 1.400000 42.215996 -0.100000 1.500000 41.273906 -0.100000 1.600000 40.351817 -0.100000 1.700000 39.449728 -0.100000 1.800000 38.567638 -0.100000 1.900000 37.705549 -0.100000 2.000000 36.863460 -0.100000 2.100000 36.041370 -0.100000 2.200000 35.239281 -0.100000 2.300000 34.457191 -0.100000 2.400000 33.695102 -0.100000 2.500000 32.953013 -0.100000 2.600000 32.230923 -0.100000 2.700000 31.528834 -0.100000 2.800000 30.846745 -0.100000 2.900000 30.184655 -0.100000 3.000000 29.542566 -0.100000 3.100000 28.920477 -0.100000 3.200000 28.318387 -0.100000 3.300000 27.736298 -0.100000 3.400000 27.174209 -0.100000 3.500000 26.632119 -0.100000 3.600000 26.110030 -0.100000 3.700000 25.607940 -0.100000 3.800000 25.125851 -0.100000 3.900000 24.663762 -0.100000 4.000000 24.221672 -0.100000 4.100000 23.799583 -0.100000 4.200000 23.397494 -0.100000 4.300000 23.015404 -0.100000 4.400000 22.653315 -0.100000 4.500000 22.311226 -0.100000 4.600000 21.989136 -0.100000 4.700000 21.687047 -0.100000 4.800000 21.404958 -0.100000 4.900000 21.142868 -0.100000 5.000000 20.900779 -0.100000 5.100000 20.678689 -0.100000 5.200000 20.476600 -0.100000 5.300000 20.294511 -0.100000 5.400000 20.132421 -0.100000 5.500000 19.990332 -0.100000 5.600000 19.868243 -0.100000 5.700000 19.766153 -0.100000 5.800000 19.684064 -0.100000 5.900000 19.621975 -0.100000 6.000000 19.579885 -0.100000 6.100000 19.557796 -0.100000 6.200000 19.555707 -0.100000 6.300000 19.573617 -0.100000 6.400000 19.611528 -0.100000 6.500000 19.669438 -0.100000 6.600000 19.747349 -0.100000 6.700000 19.845260 -0.100000 6.800000 19.963170 -0.100000 6.900000 20.101081 -0.100000 7.000000 20.258992 -0.100000 7.100000 20.436902 -0.100000 7.200000 20.634813 -0.100000 7.300000 20.852724 -0.100000 7.400000 21.090634 -0.100000 7.500000 21.348545 -0.100000 7.600000 21.626456 -0.100000 7.700000 21.924366 -0.100000 7.800000 22.242277 -0.100000 7.900000 22.580187 -0.100000 8.000000 22.938098 -0.100000 8.100000 23.316009 -0.100000 8.200000 23.713919 -0.100000 8.300000 24.131830 -0.100000 8.400000 24.569741 -0.100000 8.500000 25.027651 -0.100000 8.600000 25.505562 -0.100000 8.700000 26.003473 -0.100000 8.800000 26.521383 -0.100000 8.900000 27.059294 -0.100000 9.000000 27.617205 -0.100000 9.100000 28.195115 -0.100000 9.200000 28.793026 -0.100000 9.300000 29.410936 -0.100000 9.400000 30.048847 -0.100000 9.500000 30.706758 -0.100000 9.600000 31.384668 -0.100000 9.700000 32.082579 -0.100000 9.800000 32.800490 -0.100000 9.900000 33.538400 -0.100000 10.000000 34.296311 -0.100000 10.100000 35.074222 -0.100000 10.200000 35.872132 -0.100000 10.300000 36.690043 -0.100000 10.400000 37.527954 -0.100000 10.500000 38.385864 -0.100000 10.600000 39.263775 -0.100000 10.700000 40.161685 -0.100000 10.800000 41.079596 -0.100000 10.900000 42.017507 -0.100000 11.000000 42.975417 -0.100000 11.100000 43.953328 -0.100000 11.200000 44.951239 -0.100000 11.300000 45.969149 -0.100000 11.400000 47.007060 -0.100000 11.500000 48.064971 -0.100000 11.600000 49.142881 -0.100000 11.700000 50.240792 -0.100000 11.800000 51.358703 -0.100000 11.900000 52.496613 -0.100000 12.000000 53.654524 -0.100000 12.100000 54.832434 -0.100000 12.200000 56.030345 -0.100000 12.300000 57.248256 -0.100000 12.400000 58.486166 -0.100000 12.500000 59.744077 -0.100000 12.600000 61.021988 -0.100000 12.700000 62.319898 -0.100000 12.800000 63.637809 -0.100000 12.900000 64.975720 -0.100000 13.000000 66.333630 -0.100000 13.100000 67.711541 -0.100000 13.200000 69.109451 -0.100000 13.300000 70.527362 -0.100000 13.400000 71.965273 -0.100000 13.500000 73.423183 -0.100000 13.600000 74.901094 -0.100000 13.700000 76.399005 -0.100000 13.800000 77.916915 -0.100000 13.900000 79.454826 -0.100000 14.000000 81.012737 -0.100000 14.100000 82.590647 -0.100000 14.200000 84.188558 -0.100000 14.300000 85.806469 -0.100000 14.400000 87.444379 -0.100000 14.500000 89.102290 -0.100000 14.600000 90.780200 -0.100000 14.700000 92.478111 -0.100000 14.800000 94.196022 -0.100000 14.900000 95.933932 -0.100000 15.000000 97.691843 -0.000000 -5.000000 140.602113 -0.000000 -4.900000 138.412113 -0.000000 -4.800000 136.242113 -0.000000 -4.700000 134.092113 -0.000000 -4.600000 131.962113 -0.000000 -4.500000 129.852113 -0.000000 -4.400000 127.762113 -0.000000 -4.300000 125.692113 -0.000000 -4.200000 123.642113 -0.000000 -4.100000 121.612113 -0.000000 -4.000000 119.602113 -0.000000 -3.900000 117.612113 -0.000000 -3.800000 115.642113 -0.000000 -3.700000 113.692113 -0.000000 -3.600000 111.762113 -0.000000 -3.500000 109.852113 -0.000000 -3.400000 107.962113 -0.000000 -3.300000 106.092113 -0.000000 -3.200000 104.242113 -0.000000 -3.100000 102.412113 -0.000000 -3.000000 100.602113 -0.000000 -2.900000 98.812113 -0.000000 -2.800000 97.042113 -0.000000 -2.700000 95.292113 -0.000000 -2.600000 93.562113 -0.000000 -2.500000 91.852113 -0.000000 -2.400000 90.162113 -0.000000 -2.300000 88.492113 -0.000000 -2.200000 86.842113 -0.000000 -2.100000 85.212113 -0.000000 -2.000000 83.602113 -0.000000 -1.900000 82.012113 -0.000000 -1.800000 80.442113 -0.000000 -1.700000 78.892113 -0.000000 -1.600000 77.362113 -0.000000 -1.500000 75.852113 -0.000000 -1.400000 74.362113 -0.000000 -1.300000 72.892113 -0.000000 -1.200000 71.442113 -0.000000 -1.100000 70.012113 -0.000000 -1.000000 68.602113 -0.000000 -0.900000 67.212113 -0.000000 -0.800000 65.842113 -0.000000 -0.700000 64.492113 -0.000000 -0.600000 63.162113 -0.000000 -0.500000 61.852113 -0.000000 -0.400000 60.562113 -0.000000 -0.300000 59.292113 -0.000000 -0.200000 58.042113 -0.000000 -0.100000 56.812113 -0.000000 -0.000000 55.602113 -0.000000 0.100000 54.412113 -0.000000 0.200000 53.242113 -0.000000 0.300000 52.092113 -0.000000 0.400000 50.962113 -0.000000 0.500000 49.852113 -0.000000 0.600000 48.762113 -0.000000 0.700000 47.692113 -0.000000 0.800000 46.642113 -0.000000 0.900000 45.612113 -0.000000 1.000000 44.602113 -0.000000 1.100000 43.612113 -0.000000 1.200000 42.642113 -0.000000 1.300000 41.692113 -0.000000 1.400000 40.762113 -0.000000 1.500000 39.852113 -0.000000 1.600000 38.962113 -0.000000 1.700000 38.092113 -0.000000 1.800000 37.242113 -0.000000 1.900000 36.412113 -0.000000 2.000000 35.602113 -0.000000 2.100000 34.812113 -0.000000 2.200000 34.042113 -0.000000 2.300000 33.292113 -0.000000 2.400000 32.562113 -0.000000 2.500000 31.852113 -0.000000 2.600000 31.162113 -0.000000 2.700000 30.492113 -0.000000 2.800000 29.842113 -0.000000 2.900000 29.212113 -0.000000 3.000000 28.602113 -0.000000 3.100000 28.012113 -0.000000 3.200000 27.442113 -0.000000 3.300000 26.892113 -0.000000 3.400000 26.362113 -0.000000 3.500000 25.852113 -0.000000 3.600000 25.362113 -0.000000 3.700000 24.892113 -0.000000 3.800000 24.442113 -0.000000 3.900000 24.012113 -0.000000 4.000000 23.602113 -0.000000 4.100000 23.212113 -0.000000 4.200000 22.842113 -0.000000 4.300000 22.492113 -0.000000 4.400000 22.162113 -0.000000 4.500000 21.852113 -0.000000 4.600000 21.562113 -0.000000 4.700000 21.292113 -0.000000 4.800000 21.042113 -0.000000 4.900000 20.812113 -0.000000 5.000000 20.602113 -0.000000 5.100000 20.412113 -0.000000 5.200000 20.242113 -0.000000 5.300000 20.092113 -0.000000 5.400000 19.962113 -0.000000 5.500000 19.852113 -0.000000 5.600000 19.762113 -0.000000 5.700000 19.692113 -0.000000 5.800000 19.642113 -0.000000 5.900000 19.612113 -0.000000 6.000000 19.602113 -0.000000 6.100000 19.612113 -0.000000 6.200000 19.642113 -0.000000 6.300000 19.692113 -0.000000 6.400000 19.762113 -0.000000 6.500000 19.852113 -0.000000 6.600000 19.962113 -0.000000 6.700000 20.092113 -0.000000 6.800000 20.242113 -0.000000 6.900000 20.412113 -0.000000 7.000000 20.602113 -0.000000 7.100000 20.812113 -0.000000 7.200000 21.042113 -0.000000 7.300000 21.292113 -0.000000 7.400000 21.562113 -0.000000 7.500000 21.852113 -0.000000 7.600000 22.162113 -0.000000 7.700000 22.492113 -0.000000 7.800000 22.842113 -0.000000 7.900000 23.212113 -0.000000 8.000000 23.602113 -0.000000 8.100000 24.012113 -0.000000 8.200000 24.442113 -0.000000 8.300000 24.892113 -0.000000 8.400000 25.362113 -0.000000 8.500000 25.852113 -0.000000 8.600000 26.362113 -0.000000 8.700000 26.892113 -0.000000 8.800000 27.442113 -0.000000 8.900000 28.012113 -0.000000 9.000000 28.602113 -0.000000 9.100000 29.212113 -0.000000 9.200000 29.842113 -0.000000 9.300000 30.492113 -0.000000 9.400000 31.162113 -0.000000 9.500000 31.852113 -0.000000 9.600000 32.562113 -0.000000 9.700000 33.292113 -0.000000 9.800000 34.042113 -0.000000 9.900000 34.812113 -0.000000 10.000000 35.602113 -0.000000 10.100000 36.412113 -0.000000 10.200000 37.242113 -0.000000 10.300000 38.092113 -0.000000 10.400000 38.962113 -0.000000 10.500000 39.852113 -0.000000 10.600000 40.762113 -0.000000 10.700000 41.692113 -0.000000 10.800000 42.642113 -0.000000 10.900000 43.612113 -0.000000 11.000000 44.602113 -0.000000 11.100000 45.612113 -0.000000 11.200000 46.642113 -0.000000 11.300000 47.692113 -0.000000 11.400000 48.762113 -0.000000 11.500000 49.852113 -0.000000 11.600000 50.962113 -0.000000 11.700000 52.092113 -0.000000 11.800000 53.242113 -0.000000 11.900000 54.412113 -0.000000 12.000000 55.602113 -0.000000 12.100000 56.812113 -0.000000 12.200000 58.042113 -0.000000 12.300000 59.292113 -0.000000 12.400000 60.562113 -0.000000 12.500000 61.852113 -0.000000 12.600000 63.162113 -0.000000 12.700000 64.492113 -0.000000 12.800000 65.842113 -0.000000 12.900000 67.212113 -0.000000 13.000000 68.602113 -0.000000 13.100000 70.012113 -0.000000 13.200000 71.442113 -0.000000 13.300000 72.892113 -0.000000 13.400000 74.362113 -0.000000 13.500000 75.852113 -0.000000 13.600000 77.362113 -0.000000 13.700000 78.892113 -0.000000 13.800000 80.442113 -0.000000 13.900000 82.012113 -0.000000 14.000000 83.602113 -0.000000 14.100000 85.212113 -0.000000 14.200000 86.842113 -0.000000 14.300000 88.492113 -0.000000 14.400000 90.162113 -0.000000 14.500000 91.852113 -0.000000 14.600000 93.562113 -0.000000 14.700000 95.292113 -0.000000 14.800000 97.042113 -0.000000 14.900000 98.812113 -0.000000 15.000000 100.602113 0.100000 -5.000000 137.106075 0.100000 -4.900000 134.947647 0.100000 -4.800000 132.809220 0.100000 -4.700000 130.690793 0.100000 -4.600000 128.592365 0.100000 -4.500000 126.513938 0.100000 -4.400000 124.455510 0.100000 -4.300000 122.417083 0.100000 -4.200000 120.398656 0.100000 -4.100000 118.400228 0.100000 -4.000000 116.421801 0.100000 -3.900000 114.463373 0.100000 -3.800000 112.524946 0.100000 -3.700000 110.606519 0.100000 -3.600000 108.708091 0.100000 -3.500000 106.829664 0.100000 -3.400000 104.971237 0.100000 -3.300000 103.132809 0.100000 -3.200000 101.314382 0.100000 -3.100000 99.515954 0.100000 -3.000000 97.737527 0.100000 -2.900000 95.979100 0.100000 -2.800000 94.240672 0.100000 -2.700000 92.522245 0.100000 -2.600000 90.823818 0.100000 -2.500000 89.145390 0.100000 -2.400000 87.486963 0.100000 -2.300000 85.848535 0.100000 -2.200000 84.230108 0.100000 -2.100000 82.631681 0.100000 -2.000000 81.053253 0.100000 -1.900000 79.494826 0.100000 -1.800000 77.956399 0.100000 -1.700000 76.437971 0.100000 -1.600000 74.939544 0.100000 -1.500000 73.461116 0.100000 -1.400000 72.002689 0.100000 -1.300000 70.564262 0.100000 -1.200000 69.145834 0.100000 -1.100000 67.747407 0.100000 -1.000000 66.368979 0.100000 -0.900000 65.010552 0.100000 -0.800000 63.672125 0.100000 -0.700000 62.353697 0.100000 -0.600000 61.055270 0.100000 -0.500000 59.776843 0.100000 -0.400000 58.518415 0.100000 -0.300000 57.279988 0.100000 -0.200000 56.061560 0.100000 -0.100000 54.863133 0.100000 -0.000000 53.684706 0.100000 0.100000 52.526278 0.100000 0.200000 51.387851 0.100000 0.300000 50.269424 0.100000 0.400000 49.170996 0.100000 0.500000 48.092569 0.100000 0.600000 47.034141 0.100000 0.700000 45.995714 0.100000 0.800000 44.977287 0.100000 0.900000 43.978859 0.100000 1.000000 43.000432 0.100000 1.100000 42.042004 0.100000 1.200000 41.103577 0.100000 1.300000 40.185150 0.100000 1.400000 39.286722 0.100000 1.500000 38.408295 0.100000 1.600000 37.549868 0.100000 1.700000 36.711440 0.100000 1.800000 35.893013 0.100000 1.900000 35.094585 0.100000 2.000000 34.316158 0.100000 2.100000 33.557731 0.100000 2.200000 32.819303 0.100000 2.300000 32.100876 0.100000 2.400000 31.402449 0.100000 2.500000 30.724021 0.100000 2.600000 30.065594 0.100000 2.700000 29.427166 0.100000 2.800000 28.808739 0.100000 2.900000 28.210312 0.100000 3.000000 27.631884 0.100000 3.100000 27.073457 0.100000 3.200000 26.535029 0.100000 3.300000 26.016602 0.100000 3.400000 25.518175 0.100000 3.500000 25.039747 0.100000 3.600000 24.581320 0.100000 3.700000 24.142893 0.100000 3.800000 23.724465 0.100000 3.900000 23.326038 0.100000 4.000000 22.947610 0.100000 4.100000 22.589183 0.100000 4.200000 22.250756 0.100000 4.300000 21.932328 0.100000 4.400000 21.633901 0.100000 4.500000 21.355474 0.100000 4.600000 21.097046 0.100000 4.700000 20.858619 0.100000 4.800000 20.640191 0.100000 4.900000 20.441764 0.100000 5.000000 20.263337 0.100000 5.100000 20.104909 0.100000 5.200000 19.966482 0.100000 5.300000 19.848054 0.100000 5.400000 19.749627 0.100000 5.500000 19.671200 0.100000 5.600000 19.612772 0.100000 5.700000 19.574345 0.100000 5.800000 19.555918 0.100000 5.900000 19.557490 0.100000 6.000000 19.579063 0.100000 6.100000 19.620635 0.100000 6.200000 19.682208 0.100000 6.300000 19.763781 0.100000 6.400000 19.865353 0.100000 6.500000 19.986926 0.100000 6.600000 20.128499 0.100000 6.700000 20.290071 0.100000 6.800000 20.471644 0.100000 6.900000 20.673216 0.100000 7.000000 20.894789 0.100000 7.100000 21.136362 0.100000 7.200000 21.397934 0.100000 7.300000 21.679507 0.100000 7.400000 21.981080 0.100000 7.500000 22.302652 0.100000 7.600000 22.644225 0.100000 7.700000 23.005797 0.100000 7.800000 23.387370 0.100000 7.900000 23.788943 0.100000 8.000000 24.210515 0.100000 8.100000 24.652088 0.100000 8.200000 25.113660 0.100000 8.300000 25.595233 0.100000 8.400000 26.096806 0.100000 8.500000 26.618378 0.100000 8.600000 27.159951 0.100000 8.700000 27.721524 0.100000 8.800000 28.303096 0.100000 8.900000 28.904669 0.100000 9.000000 29.526241 0.100000 9.100000 30.167814 0.100000 9.200000 30.829387 0.100000 9.300000 31.510959 0.100000 9.400000 32.212532 0.100000 9.500000 32.934105 0.100000 9.600000 33.675677 0.100000 9.700000 34.437250 0.100000 9.800000 35.218822 0.100000 9.900000 36.020395 0.100000 10.000000 36.841968 0.100000 10.100000 37.683540 0.100000 10.200000 38.545113 0.100000 10.300000 39.426685 0.100000 10.400000 40.328258 0.100000 10.500000 41.249831 0.100000 10.600000 42.191403 0.100000 10.700000 43.152976 0.100000 10.800000 44.134549 0.100000 10.900000 45.136121 0.100000 11.000000 46.157694 0.100000 11.100000 47.199266 0.100000 11.200000 48.260839 0.100000 11.300000 49.342412 0.100000 11.400000 50.443984 0.100000 11.500000 51.565557 0.100000 11.600000 52.707130 0.100000 11.700000 53.868702 0.100000 11.800000 55.050275 0.100000 11.900000 56.251847 0.100000 12.000000 57.473420 0.100000 12.100000 58.714993 0.100000 12.200000 59.976565 0.100000 12.300000 61.258138 0.100000 12.400000 62.559710 0.100000 12.500000 63.881283 0.100000 12.600000 65.222856 0.100000 12.700000 66.584428 0.100000 12.800000 67.966001 0.100000 12.900000 69.367574 0.100000 13.000000 70.789146 0.100000 13.100000 72.230719 0.100000 13.200000 73.692291 0.100000 13.300000 75.173864 0.100000 13.400000 76.675437 0.100000 13.500000 78.197009 0.100000 13.600000 79.738582 0.100000 13.700000 81.300155 0.100000 13.800000 82.881727 0.100000 13.900000 84.483300 0.100000 14.000000 86.104872 0.100000 14.100000 87.746445 0.100000 14.200000 89.408018 0.100000 14.300000 91.089590 0.100000 14.400000 92.791163 0.100000 14.500000 94.512735 0.100000 14.600000 96.254308 0.100000 14.700000 98.015881 0.100000 14.800000 99.797453 0.100000 14.900000 101.599026 0.100000 15.000000 103.420599 0.200000 -5.000000 133.619633 0.200000 -4.900000 131.492261 0.200000 -4.800000 129.384890 0.200000 -4.700000 127.297518 0.200000 -4.600000 125.230147 0.200000 -4.500000 123.182775 0.200000 -4.400000 121.155404 0.200000 -4.300000 119.148032 0.200000 -4.200000 117.160661 0.200000 -4.100000 115.193289 0.200000 -4.000000 113.245918 0.200000 -3.900000 111.318546 0.200000 -3.800000 109.411175 0.200000 -3.700000 107.523803 0.200000 -3.600000 105.656432 0.200000 -3.500000 103.809060 0.200000 -3.400000 101.981689 0.200000 -3.300000 100.174317 0.200000 -3.200000 98.386946 0.200000 -3.100000 96.619574 0.200000 -3.000000 94.872203 0.200000 -2.900000 93.144831 0.200000 -2.800000 91.437460 0.200000 -2.700000 89.750088 0.200000 -2.600000 88.082717 0.200000 -2.500000 86.435345 0.200000 -2.400000 84.807974 0.200000 -2.300000 83.200602 0.200000 -2.200000 81.613231 0.200000 -2.100000 80.045859 0.200000 -2.000000 78.498488 0.200000 -1.900000 76.971116 0.200000 -1.800000 75.463745 0.200000 -1.700000 73.976373 0.200000 -1.600000 72.509002 0.200000 -1.500000 71.061630 0.200000 -1.400000 69.634259 0.200000 -1.300000 68.226887 0.200000 -1.200000 66.839516 0.200000 -1.100000 65.472144 0.200000 -1.000000 64.124773 0.200000 -0.900000 62.797401 0.200000 -0.800000 61.490030 0.200000 -0.700000 60.202658 0.200000 -0.600000 58.935287 0.200000 -0.500000 57.687915 0.200000 -0.400000 56.460544 0.200000 -0.300000 55.253172 0.200000 -0.200000 54.065801 0.200000 -0.100000 52.898429 0.200000 -0.000000 51.751058 0.200000 0.100000 50.623686 0.200000 0.200000 49.516315 0.200000 0.300000 48.428943 0.200000 0.400000 47.361572 0.200000 0.500000 46.314200 0.200000 0.600000 45.286829 0.200000 0.700000 44.279457 0.200000 0.800000 43.292086 0.200000 0.900000 42.324714 0.200000 1.000000 41.377343 0.200000 1.100000 40.449971 0.200000 1.200000 39.542600 0.200000 1.300000 38.655228 0.200000 1.400000 37.787857 0.200000 1.500000 36.940485 0.200000 1.600000 36.113114 0.200000 1.700000 35.305742 0.200000 1.800000 34.518371 0.200000 1.900000 33.750999 0.200000 2.000000 33.003628 0.200000 2.100000 32.276256 0.200000 2.200000 31.568885 0.200000 2.300000 30.881513 0.200000 2.400000 30.214142 0.200000 2.500000 29.566770 0.200000 2.600000 28.939399 0.200000 2.700000 28.332027 0.200000 2.800000 27.744656 0.200000 2.900000 27.177284 0.200000 3.000000 26.629913 0.200000 3.100000 26.102541 0.200000 3.200000 25.595170 0.200000 3.300000 25.107798 0.200000 3.400000 24.640427 0.200000 3.500000 24.193055 0.200000 3.600000 23.765684 0.200000 3.700000 23.358312 0.200000 3.800000 22.970941 0.200000 3.900000 22.603569 0.200000 4.000000 22.256198 0.200000 4.100000 21.928826 0.200000 4.200000 21.621455 0.200000 4.300000 21.334083 0.200000 4.400000 21.066712 0.200000 4.500000 20.819340 0.200000 4.600000 20.591969 0.200000 4.700000 20.384597 0.200000 4.800000 20.197226 0.200000 4.900000 20.029854 0.200000 5.000000 19.882483 0.200000 5.100000 19.755111 0.200000 5.200000 19.647740 0.200000 5.300000 19.560368 0.200000 5.400000 19.492997 0.200000 5.500000 19.445625 0.200000 5.600000 19.418254 0.200000 5.700000 19.410882 0.200000 5.800000 19.423511 0.200000 5.900000 19.456139 0.200000 6.000000 19.508768 0.200000 6.100000 19.581396 0.200000 6.200000 19.674025 0.200000 6.300000 19.786653 0.200000 6.400000 19.919282 0.200000 6.500000 20.071910 0.200000 6.600000 20.244539 0.200000 6.700000 20.437167 0.200000 6.800000 20.649796 0.200000 6.900000 20.882424 0.200000 7.000000 21.135053 0.200000 7.100000 21.407681 0.200000 7.200000 21.700310 0.200000 7.300000 22.012938 0.200000 7.400000 22.345567 0.200000 7.500000 22.698195 0.200000 7.600000 23.070824 0.200000 7.700000 23.463452 0.200000 7.800000 23.876081 0.200000 7.900000 24.308709 0.200000 8.000000 24.761338 0.200000 8.100000 25.233966 0.200000 8.200000 25.726595 0.200000 8.300000 26.239223 0.200000 8.400000 26.771852 0.200000 8.500000 27.324480 0.200000 8.600000 27.897109 0.200000 8.700000 28.489737 0.200000 8.800000 29.102366 0.200000 8.900000 29.734994 0.200000 9.000000 30.387623 0.200000 9.100000 31.060251 0.200000 9.200000 31.752880 0.200000 9.300000 32.465508 0.200000 9.400000 33.198137 0.200000 9.500000 33.950765 0.200000 9.600000 34.723394 0.200000 9.700000 35.516022 0.200000 9.800000 36.328651 0.200000 9.900000 37.161279 0.200000 10.000000 38.013908 0.200000 10.100000 38.886536 0.200000 10.200000 39.779165 0.200000 10.300000 40.691793 0.200000 10.400000 41.624422 0.200000 10.500000 42.577050 0.200000 10.600000 43.549679 0.200000 10.700000 44.542307 0.200000 10.800000 45.554936 0.200000 10.900000 46.587564 0.200000 11.000000 47.640193 0.200000 11.100000 48.712821 0.200000 11.200000 49.805450 0.200000 11.300000 50.918078 0.200000 11.400000 52.050707 0.200000 11.500000 53.203335 0.200000 11.600000 54.375964 0.200000 11.700000 55.568592 0.200000 11.800000 56.781221 0.200000 11.900000 58.013849 0.200000 12.000000 59.266478 0.200000 12.100000 60.539106 0.200000 12.200000 61.831735 0.200000 12.300000 63.144363 0.200000 12.400000 64.476992 0.200000 12.500000 65.829620 0.200000 12.600000 67.202249 0.200000 12.700000 68.594877 0.200000 12.800000 70.007506 0.200000 12.900000 71.440134 0.200000 13.000000 72.892763 0.200000 13.100000 74.365391 0.200000 13.200000 75.858020 0.200000 13.300000 77.370648 0.200000 13.400000 78.903277 0.200000 13.500000 80.455905 0.200000 13.600000 82.028534 0.200000 13.700000 83.621162 0.200000 13.800000 85.233791 0.200000 13.900000 86.866419 0.200000 14.000000 88.519048 0.200000 14.100000 90.191677 0.200000 14.200000 91.884305 0.200000 14.300000 93.596934 0.200000 14.400000 95.329562 0.200000 14.500000 97.082191 0.200000 14.600000 98.854819 0.200000 14.700000 100.647448 0.200000 14.800000 102.460076 0.200000 14.900000 104.292705 0.200000 15.000000 106.145333 0.300000 -5.000000 130.141813 0.300000 -4.900000 128.044981 0.300000 -4.800000 125.968148 0.300000 -4.700000 123.911316 0.300000 -4.600000 121.874483 0.300000 -4.500000 119.857651 0.300000 -4.400000 117.860819 0.300000 -4.300000 115.883986 0.300000 -4.200000 113.927154 0.300000 -4.100000 111.990322 0.300000 -4.000000 110.073489 0.300000 -3.900000 108.176657 0.300000 -3.800000 106.299825 0.300000 -3.700000 104.442992 0.300000 -3.600000 102.606160 0.300000 -3.500000 100.789328 0.300000 -3.400000 98.992495 0.300000 -3.300000 97.215663 0.300000 -3.200000 95.458831 0.300000 -3.100000 93.721998 0.300000 -3.000000 92.005166 0.300000 -2.900000 90.308333 0.300000 -2.800000 88.631501 0.300000 -2.700000 86.974669 0.300000 -2.600000 85.337836 0.300000 -2.500000 83.721004 0.300000 -2.400000 82.124172 0.300000 -2.300000 80.547339 0.300000 -2.200000 78.990507 0.300000 -2.100000 77.453675 0.300000 -2.000000 75.936842 0.300000 -1.900000 74.440010 0.300000 -1.800000 72.963178 0.300000 -1.700000 71.506345 0.300000 -1.600000 70.069513 0.300000 -1.500000 68.652680 0.300000 -1.400000 67.255848 0.300000 -1.300000 65.879016 0.300000 -1.200000 64.522183 0.300000 -1.100000 63.185351 0.300000 -1.000000 61.868519 0.300000 -0.900000 60.571686 0.300000 -0.800000 59.294854 0.300000 -0.700000 58.038022 0.300000 -0.600000 56.801189 0.300000 -0.500000 55.584357 0.300000 -0.400000 54.387525 0.300000 -0.300000 53.210692 0.300000 -0.200000 52.053860 0.300000 -0.100000 50.917028 0.300000 -0.000000 49.800195 0.300000 0.100000 48.703363 0.300000 0.200000 47.626530 0.300000 0.300000 46.569698 0.300000 0.400000 45.532866 0.300000 0.500000 44.516033 0.300000 0.600000 43.519201 0.300000 0.700000 42.542369 0.300000 0.800000 41.585536 0.300000 0.900000 40.648704 0.300000 1.000000 39.731872 0.300000 1.100000 38.835039 0.300000 1.200000 37.958207 0.300000 1.300000 37.101375 0.300000 1.400000 36.264542 0.300000 1.500000 35.447710 0.300000 1.600000 34.650877 0.300000 1.700000 33.874045 0.300000 1.800000 33.117213 0.300000 1.900000 32.380380 0.300000 2.000000 31.663548 0.300000 2.100000 30.966716 0.300000 2.200000 30.289883 0.300000 2.300000 29.633051 0.300000 2.400000 28.996219 0.300000 2.500000 28.379386 0.300000 2.600000 27.782554 0.300000 2.700000 27.205722 0.300000 2.800000 26.648889 0.300000 2.900000 26.112057 0.300000 3.000000 25.595224 0.300000 3.100000 25.098392 0.300000 3.200000 24.621560 0.300000 3.300000 24.164727 0.300000 3.400000 23.727895 0.300000 3.500000 23.311063 0.300000 3.600000 22.914230 0.300000 3.700000 22.537398 0.300000 3.800000 22.180566 0.300000 3.900000 21.843733 0.300000 4.000000 21.526901 0.300000 4.100000 21.230069 0.300000 4.200000 20.953236 0.300000 4.300000 20.696404 0.300000 4.400000 20.459572 0.300000 4.500000 20.242739 0.300000 4.600000 20.045907 0.300000 4.700000 19.869074 0.300000 4.800000 19.712242 0.300000 4.900000 19.575410 0.300000 5.000000 19.458577 0.300000 5.100000 19.361745 0.300000 5.200000 19.284913 0.300000 5.300000 19.228080 0.300000 5.400000 19.191248 0.300000 5.500000 19.174416 0.300000 5.600000 19.177583 0.300000 5.700000 19.200751 0.300000 5.800000 19.243919 0.300000 5.900000 19.307086 0.300000 6.000000 19.390254 0.300000 6.100000 19.493421 0.300000 6.200000 19.616589 0.300000 6.300000 19.759757 0.300000 6.400000 19.922924 0.300000 6.500000 20.106092 0.300000 6.600000 20.309260 0.300000 6.700000 20.532427 0.300000 6.800000 20.775595 0.300000 6.900000 21.038763 0.300000 7.000000 21.321930 0.300000 7.100000 21.625098 0.300000 7.200000 21.948266 0.300000 7.300000 22.291433 0.300000 7.400000 22.654601 0.300000 7.500000 23.037769 0.300000 7.600000 23.440936 0.300000 7.700000 23.864104 0.300000 7.800000 24.307271 0.300000 7.900000 24.770439 0.300000 8.000000 25.253607 0.300000 8.100000 25.756774 0.300000 8.200000 26.279942 0.300000 8.300000 26.823110 0.300000 8.400000 27.386277 0.300000 8.500000 27.969445 0.300000 8.600000 28.572613 0.300000 8.700000 29.195780 0.300000 8.800000 29.838948 0.300000 8.900000 30.502116 0.300000 9.000000 31.185283 0.300000 9.100000 31.888451 0.300000 9.200000 32.611618 0.300000 9.300000 33.354786 0.300000 9.400000 34.117954 0.300000 9.500000 34.901121 0.300000 9.600000 35.704289 0.300000 9.700000 36.527457 0.300000 9.800000 37.370624 0.300000 9.900000 38.233792 0.300000 10.000000 39.116960 0.300000 10.100000 40.020127 0.300000 10.200000 40.943295 0.300000 10.300000 41.886463 0.300000 10.400000 42.849630 0.300000 10.500000 43.832798 0.300000 10.600000 44.835965 0.300000 10.700000 45.859133 0.300000 10.800000 46.902301 0.300000 10.900000 47.965468 0.300000 11.000000 49.048636 0.300000 11.100000 50.151804 0.300000 11.200000 51.274971 0.300000 11.300000 52.418139 0.300000 11.400000 53.581307 0.300000 11.500000 54.764474 0.300000 11.600000 55.967642 0.300000 11.700000 57.190810 0.300000 11.800000 58.433977 0.300000 11.900000 59.697145 0.300000 12.000000 60.980313 0.300000 12.100000 62.283480 0.300000 12.200000 63.606648 0.300000 12.300000 64.949815 0.300000 12.400000 66.312983 0.300000 12.500000 67.696151 0.300000 12.600000 69.099318 0.300000 12.700000 70.522486 0.300000 12.800000 71.965654 0.300000 12.900000 73.428821 0.300000 13.000000 74.911989 0.300000 13.100000 76.415157 0.300000 13.200000 77.938324 0.300000 13.300000 79.481492 0.300000 13.400000 81.044660 0.300000 13.500000 82.627827 0.300000 13.600000 84.230995 0.300000 13.700000 85.854162 0.300000 13.800000 87.497330 0.300000 13.900000 89.160498 0.300000 14.000000 90.843665 0.300000 14.100000 92.546833 0.300000 14.200000 94.270001 0.300000 14.300000 96.013168 0.300000 14.400000 97.776336 0.300000 14.500000 99.559504 0.300000 14.600000 101.362671 0.300000 14.700000 103.185839 0.300000 14.800000 105.029007 0.300000 14.900000 106.892174 0.300000 15.000000 108.775342 0.400000 -5.000000 126.672621 0.400000 -4.900000 124.605811 0.400000 -4.800000 122.559001 0.400000 -4.700000 120.532191 0.400000 -4.600000 118.525381 0.400000 -4.500000 116.538571 0.400000 -4.400000 114.571761 0.400000 -4.300000 112.624951 0.400000 -4.200000 110.698141 0.400000 -4.100000 108.791331 0.400000 -4.000000 106.904521 0.400000 -3.900000 105.037711 0.400000 -3.800000 103.190901 0.400000 -3.700000 101.364091 0.400000 -3.600000 99.557281 0.400000 -3.500000 97.770471 0.400000 -3.400000 96.003661 0.400000 -3.300000 94.256851 0.400000 -3.200000 92.530042 0.400000 -3.100000 90.823232 0.400000 -3.000000 89.136422 0.400000 -2.900000 87.469612 0.400000 -2.800000 85.822802 0.400000 -2.700000 84.195992 0.400000 -2.600000 82.589182 0.400000 -2.500000 81.002372 0.400000 -2.400000 79.435562 0.400000 -2.300000 77.888752 0.400000 -2.200000 76.361942 0.400000 -2.100000 74.855132 0.400000 -2.000000 73.368322 0.400000 -1.900000 71.901512 0.400000 -1.800000 70.454702 0.400000 -1.700000 69.027892 0.400000 -1.600000 67.621082 0.400000 -1.500000 66.234272 0.400000 -1.400000 64.867462 0.400000 -1.300000 63.520652 0.400000 -1.200000 62.193843 0.400000 -1.100000 60.887033 0.400000 -1.000000 59.600223 0.400000 -0.900000 58.333413 0.400000 -0.800000 57.086603 0.400000 -0.700000 55.859793 0.400000 -0.600000 54.652983 0.400000 -0.500000 53.466173 0.400000 -0.400000 52.299363 0.400000 -0.300000 51.152553 0.400000 -0.200000 50.025743 0.400000 -0.100000 48.918933 0.400000 -0.000000 47.832123 0.400000 0.100000 46.765313 0.400000 0.200000 45.718503 0.400000 0.300000 44.691693 0.400000 0.400000 43.684883 0.400000 0.500000 42.698073 0.400000 0.600000 41.731263 0.400000 0.700000 40.784453 0.400000 0.800000 39.857644 0.400000 0.900000 38.950834 0.400000 1.000000 38.064024 0.400000 1.100000 37.197214 0.400000 1.200000 36.350404 0.400000 1.300000 35.523594 0.400000 1.400000 34.716784 0.400000 1.500000 33.929974 0.400000 1.600000 33.163164 0.400000 1.700000 32.416354 0.400000 1.800000 31.689544 0.400000 1.900000 30.982734 0.400000 2.000000 30.295924 0.400000 2.100000 29.629114 0.400000 2.200000 28.982304 0.400000 2.300000 28.355494 0.400000 2.400000 27.748684 0.400000 2.500000 27.161874 0.400000 2.600000 26.595064 0.400000 2.700000 26.048254 0.400000 2.800000 25.521445 0.400000 2.900000 25.014635 0.400000 3.000000 24.527825 0.400000 3.100000 24.061015 0.400000 3.200000 23.614205 0.400000 3.300000 23.187395 0.400000 3.400000 22.780585 0.400000 3.500000 22.393775 0.400000 3.600000 22.026965 0.400000 3.700000 21.680155 0.400000 3.800000 21.353345 0.400000 3.900000 21.046535 0.400000 4.000000 20.759725 0.400000 4.100000 20.492915 0.400000 4.200000 20.246105 0.400000 4.300000 20.019295 0.400000 4.400000 19.812485 0.400000 4.500000 19.625675 0.400000 4.600000 19.458865 0.400000 4.700000 19.312055 0.400000 4.800000 19.185246 0.400000 4.900000 19.078436 0.400000 5.000000 18.991626 0.400000 5.100000 18.924816 0.400000 5.200000 18.878006 0.400000 5.300000 18.851196 0.400000 5.400000 18.844386 0.400000 5.500000 18.857576 0.400000 5.600000 18.890766 0.400000 5.700000 18.943956 0.400000 5.800000 19.017146 0.400000 5.900000 19.110336 0.400000 6.000000 19.223526 0.400000 6.100000 19.356716 0.400000 6.200000 19.509906 0.400000 6.300000 19.683096 0.400000 6.400000 19.876286 0.400000 6.500000 20.089476 0.400000 6.600000 20.322666 0.400000 6.700000 20.575856 0.400000 6.800000 20.849047 0.400000 6.900000 21.142237 0.400000 7.000000 21.455427 0.400000 7.100000 21.788617 0.400000 7.200000 22.141807 0.400000 7.300000 22.514997 0.400000 7.400000 22.908187 0.400000 7.500000 23.321377 0.400000 7.600000 23.754567 0.400000 7.700000 24.207757 0.400000 7.800000 24.680947 0.400000 7.900000 25.174137 0.400000 8.000000 25.687327 0.400000 8.100000 26.220517 0.400000 8.200000 26.773707 0.400000 8.300000 27.346897 0.400000 8.400000 27.940087 0.400000 8.500000 28.553277 0.400000 8.600000 29.186467 0.400000 8.700000 29.839657 0.400000 8.800000 30.512848 0.400000 8.900000 31.206038 0.400000 9.000000 31.919228 0.400000 9.100000 32.652418 0.400000 9.200000 33.405608 0.400000 9.300000 34.178798 0.400000 9.400000 34.971988 0.400000 9.500000 35.785178 0.400000 9.600000 36.618368 0.400000 9.700000 37.471558 0.400000 9.800000 38.344748 0.400000 9.900000 39.237938 0.400000 10.000000 40.151128 0.400000 10.100000 41.084318 0.400000 10.200000 42.037508 0.400000 10.300000 43.010698 0.400000 10.400000 44.003888 0.400000 10.500000 45.017078 0.400000 10.600000 46.050268 0.400000 10.700000 47.103458 0.400000 10.800000 48.176649 0.400000 10.900000 49.269839 0.400000 11.000000 50.383029 0.400000 11.100000 51.516219 0.400000 11.200000 52.669409 0.400000 11.300000 53.842599 0.400000 11.400000 55.035789 0.400000 11.500000 56.248979 0.400000 11.600000 57.482169 0.400000 11.700000 58.735359 0.400000 11.800000 60.008549 0.400000 11.900000 61.301739 0.400000 12.000000 62.614929 0.400000 12.100000 63.948119 0.400000 12.200000 65.301309 0.400000 12.300000 66.674499 0.400000 12.400000 68.067689 0.400000 12.500000 69.480879 0.400000 12.600000 70.914069 0.400000 12.700000 72.367259 0.400000 12.800000 73.840450 0.400000 12.900000 75.333640 0.400000 13.000000 76.846830 0.400000 13.100000 78.380020 0.400000 13.200000 79.933210 0.400000 13.300000 81.506400 0.400000 13.400000 83.099590 0.400000 13.500000 84.712780 0.400000 13.600000 86.345970 0.400000 13.700000 87.999160 0.400000 13.800000 89.672350 0.400000 13.900000 91.365540 0.400000 14.000000 93.078730 0.400000 14.100000 94.811920 0.400000 14.200000 96.565110 0.400000 14.300000 98.338300 0.400000 14.400000 100.131490 0.400000 14.500000 101.944680 0.400000 14.600000 103.777870 0.400000 14.700000 105.631060 0.400000 14.800000 107.504251 0.400000 14.900000 109.397441 0.400000 15.000000 111.310631 0.500000 -5.000000 123.213017 0.500000 -4.900000 121.175713 0.500000 -4.800000 119.158409 0.500000 -4.700000 117.161104 0.500000 -4.600000 115.183800 0.500000 -4.500000 113.226496 0.500000 -4.400000 111.289192 0.500000 -4.300000 109.371887 0.500000 -4.200000 107.474583 0.500000 -4.100000 105.597279 0.500000 -4.000000 103.739974 0.500000 -3.900000 101.902670 0.500000 -3.800000 100.085366 0.500000 -3.700000 98.288062 0.500000 -3.600000 96.510757 0.500000 -3.500000 94.753453 0.500000 -3.400000 93.016149 0.500000 -3.300000 91.298844 0.500000 -3.200000 89.601540 0.500000 -3.100000 87.924236 0.500000 -3.000000 86.266932 0.500000 -2.900000 84.629627 0.500000 -2.800000 83.012323 0.500000 -2.700000 81.415019 0.500000 -2.600000 79.837714 0.500000 -2.500000 78.280410 0.500000 -2.400000 76.743106 0.500000 -2.300000 75.225802 0.500000 -2.200000 73.728497 0.500000 -2.100000 72.251193 0.500000 -2.000000 70.793889 0.500000 -1.900000 69.356584 0.500000 -1.800000 67.939280 0.500000 -1.700000 66.541976 0.500000 -1.600000 65.164672 0.500000 -1.500000 63.807367 0.500000 -1.400000 62.470063 0.500000 -1.300000 61.152759 0.500000 -1.200000 59.855454 0.500000 -1.100000 58.578150 0.500000 -1.000000 57.320846 0.500000 -0.900000 56.083542 0.500000 -0.800000 54.866237 0.500000 -0.700000 53.668933 0.500000 -0.600000 52.491629 0.500000 -0.500000 51.334325 0.500000 -0.400000 50.197020 0.500000 -0.300000 49.079716 0.500000 -0.200000 47.982412 0.500000 -0.100000 46.905107 0.500000 -0.000000 45.847803 0.500000 0.100000 44.810499 0.500000 0.200000 43.793195 0.500000 0.300000 42.795890 0.500000 0.400000 41.818586 0.500000 0.500000 40.861282 0.500000 0.600000 39.923977 0.500000 0.700000 39.006673 0.500000 0.800000 38.109369 0.500000 0.900000 37.232065 0.500000 1.000000 36.374760 0.500000 1.100000 35.537456 0.500000 1.200000 34.720152 0.500000 1.300000 33.922847 0.500000 1.400000 33.145543 0.500000 1.500000 32.388239 0.500000 1.600000 31.650935 0.500000 1.700000 30.933630 0.500000 1.800000 30.236326 0.500000 1.900000 29.559022 0.500000 2.000000 28.901717 0.500000 2.100000 28.264413 0.500000 2.200000 27.647109 0.500000 2.300000 27.049805 0.500000 2.400000 26.472500 0.500000 2.500000 25.915196 0.500000 2.600000 25.377892 0.500000 2.700000 24.860587 0.500000 2.800000 24.363283 0.500000 2.900000 23.885979 0.500000 3.000000 23.428675 0.500000 3.100000 22.991370 0.500000 3.200000 22.574066 0.500000 3.300000 22.176762 0.500000 3.400000 21.799458 0.500000 3.500000 21.442153 0.500000 3.600000 21.104849 0.500000 3.700000 20.787545 0.500000 3.800000 20.490240 0.500000 3.900000 20.212936 0.500000 4.000000 19.955632 0.500000 4.100000 19.718328 0.500000 4.200000 19.501023 0.500000 4.300000 19.303719 0.500000 4.400000 19.126415 0.500000 4.500000 18.969110 0.500000 4.600000 18.831806 0.500000 4.700000 18.714502 0.500000 4.800000 18.617198 0.500000 4.900000 18.539893 0.500000 5.000000 18.482589 0.500000 5.100000 18.445285 0.500000 5.200000 18.427980 0.500000 5.300000 18.430676 0.500000 5.400000 18.453372 0.500000 5.500000 18.496068 0.500000 5.600000 18.558763 0.500000 5.700000 18.641459 0.500000 5.800000 18.744155 0.500000 5.900000 18.866850 0.500000 6.000000 19.009546 0.500000 6.100000 19.172242 0.500000 6.200000 19.354938 0.500000 6.300000 19.557633 0.500000 6.400000 19.780329 0.500000 6.500000 20.023025 0.500000 6.600000 20.285720 0.500000 6.700000 20.568416 0.500000 6.800000 20.871112 0.500000 6.900000 21.193808 0.500000 7.000000 21.536503 0.500000 7.100000 21.899199 0.500000 7.200000 22.281895 0.500000 7.300000 22.684590 0.500000 7.400000 23.107286 0.500000 7.500000 23.549982 0.500000 7.600000 24.012678 0.500000 7.700000 24.495373 0.500000 7.800000 24.998069 0.500000 7.900000 25.520765 0.500000 8.000000 26.063461 0.500000 8.100000 26.626156 0.500000 8.200000 27.208852 0.500000 8.300000 27.811548 0.500000 8.400000 28.434243 0.500000 8.500000 29.076939 0.500000 8.600000 29.739635 0.500000 8.700000 30.422331 0.500000 8.800000 31.125026 0.500000 8.900000 31.847722 0.500000 9.000000 32.590418 0.500000 9.100000 33.353113 0.500000 9.200000 34.135809 0.500000 9.300000 34.938505 0.500000 9.400000 35.761201 0.500000 9.500000 36.603896 0.500000 9.600000 37.466592 0.500000 9.700000 38.349288 0.500000 9.800000 39.251983 0.500000 9.900000 40.174679 0.500000 10.000000 41.117375 0.500000 10.100000 42.080071 0.500000 10.200000 43.062766 0.500000 10.300000 44.065462 0.500000 10.400000 45.088158 0.500000 10.500000 46.130853 0.500000 10.600000 47.193549 0.500000 10.700000 48.276245 0.500000 10.800000 49.378941 0.500000 10.900000 50.501636 0.500000 11.000000 51.644332 0.500000 11.100000 52.807028 0.500000 11.200000 53.989723 0.500000 11.300000 55.192419 0.500000 11.400000 56.415115 0.500000 11.500000 57.657811 0.500000 11.600000 58.920506 0.500000 11.700000 60.203202 0.500000 11.800000 61.505898 0.500000 11.900000 62.828594 0.500000 12.000000 64.171289 0.500000 12.100000 65.533985 0.500000 12.200000 66.916681 0.500000 12.300000 68.319376 0.500000 12.400000 69.742072 0.500000 12.500000 71.184768 0.500000 12.600000 72.647464 0.500000 12.700000 74.130159 0.500000 12.800000 75.632855 0.500000 12.900000 77.155551 0.500000 13.000000 78.698246 0.500000 13.100000 80.260942 0.500000 13.200000 81.843638 0.500000 13.300000 83.446334 0.500000 13.400000 85.069029 0.500000 13.500000 86.711725 0.500000 13.600000 88.374421 0.500000 13.700000 90.057116 0.500000 13.800000 91.759812 0.500000 13.900000 93.482508 0.500000 14.000000 95.225204 0.500000 14.100000 96.987899 0.500000 14.200000 98.770595 0.500000 14.300000 100.573291 0.500000 14.400000 102.395986 0.500000 14.500000 104.238682 0.500000 14.600000 106.101378 0.500000 14.700000 107.984074 0.500000 14.800000 109.886769 0.500000 14.900000 111.809465 0.500000 15.000000 113.752161 0.600000 -5.000000 119.764887 0.600000 -4.900000 117.756572 0.600000 -4.800000 115.768256 0.600000 -4.700000 113.799941 0.600000 -4.600000 111.851626 0.600000 -4.500000 109.923310 0.600000 -4.400000 108.014995 0.600000 -4.300000 106.126680 0.600000 -4.200000 104.258364 0.600000 -4.100000 102.410049 0.600000 -4.000000 100.581734 0.600000 -3.900000 98.773418 0.600000 -3.800000 96.985103 0.600000 -3.700000 95.216788 0.600000 -3.600000 93.468472 0.600000 -3.500000 91.740157 0.600000 -3.400000 90.031841 0.600000 -3.300000 88.343526 0.600000 -3.200000 86.675211 0.600000 -3.100000 85.026895 0.600000 -3.000000 83.398580 0.600000 -2.900000 81.790265 0.600000 -2.800000 80.201949 0.600000 -2.700000 78.633634 0.600000 -2.600000 77.085319 0.600000 -2.500000 75.557003 0.600000 -2.400000 74.048688 0.600000 -2.300000 72.560373 0.600000 -2.200000 71.092057 0.600000 -2.100000 69.643742 0.600000 -2.000000 68.215427 0.600000 -1.900000 66.807111 0.600000 -1.800000 65.418796 0.600000 -1.700000 64.050480 0.600000 -1.600000 62.702165 0.600000 -1.500000 61.373850 0.600000 -1.400000 60.065534 0.600000 -1.300000 58.777219 0.600000 -1.200000 57.508904 0.600000 -1.100000 56.260588 0.600000 -1.000000 55.032273 0.600000 -0.900000 53.823958 0.600000 -0.800000 52.635642 0.600000 -0.700000 51.467327 0.600000 -0.600000 50.319012 0.600000 -0.500000 49.190696 0.600000 -0.400000 48.082381 0.600000 -0.300000 46.994066 0.600000 -0.200000 45.925750 0.600000 -0.100000 44.877435 0.600000 -0.000000 43.849119 0.600000 0.100000 42.840804 0.600000 0.200000 41.852489 0.600000 0.300000 40.884173 0.600000 0.400000 39.935858 0.600000 0.500000 39.007543 0.600000 0.600000 38.099227 0.600000 0.700000 37.210912 0.600000 0.800000 36.342597 0.600000 0.900000 35.494281 0.600000 1.000000 34.665966 0.600000 1.100000 33.857651 0.600000 1.200000 33.069335 0.600000 1.300000 32.301020 0.600000 1.400000 31.552705 0.600000 1.500000 30.824389 0.600000 1.600000 30.116074 0.600000 1.700000 29.427758 0.600000 1.800000 28.759443 0.600000 1.900000 28.111128 0.600000 2.000000 27.482812 0.600000 2.100000 26.874497 0.600000 2.200000 26.286182 0.600000 2.300000 25.717866 0.600000 2.400000 25.169551 0.600000 2.500000 24.641236 0.600000 2.600000 24.132920 0.600000 2.700000 23.644605 0.600000 2.800000 23.176290 0.600000 2.900000 22.727974 0.600000 3.000000 22.299659 0.600000 3.100000 21.891344 0.600000 3.200000 21.503028 0.600000 3.300000 21.134713 0.600000 3.400000 20.786397 0.600000 3.500000 20.458082 0.600000 3.600000 20.149767 0.600000 3.700000 19.861451 0.600000 3.800000 19.593136 0.600000 3.900000 19.344821 0.600000 4.000000 19.116505 0.600000 4.100000 18.908190 0.600000 4.200000 18.719875 0.600000 4.300000 18.551559 0.600000 4.400000 18.403244 0.600000 4.500000 18.274929 0.600000 4.600000 18.166613 0.600000 4.700000 18.078298 0.600000 4.800000 18.009983 0.600000 4.900000 17.961667 0.600000 5.000000 17.933352 0.600000 5.100000 17.925036 0.600000 5.200000 17.936721 0.600000 5.300000 17.968406 0.600000 5.400000 18.020090 0.600000 5.500000 18.091775 0.600000 5.600000 18.183460 0.600000 5.700000 18.295144 0.600000 5.800000 18.426829 0.600000 5.900000 18.578514 0.600000 6.000000 18.750198 0.600000 6.100000 18.941883 0.600000 6.200000 19.153568 0.600000 6.300000 19.385252 0.600000 6.400000 19.636937 0.600000 6.500000 19.908622 0.600000 6.600000 20.200306 0.600000 6.700000 20.511991 0.600000 6.800000 20.843675 0.600000 6.900000 21.195360 0.600000 7.000000 21.567045 0.600000 7.100000 21.958729 0.600000 7.200000 22.370414 0.600000 7.300000 22.802099 0.600000 7.400000 23.253783 0.600000 7.500000 23.725468 0.600000 7.600000 24.217153 0.600000 7.700000 24.728837 0.600000 7.800000 25.260522 0.600000 7.900000 25.812207 0.600000 8.000000 26.383891 0.600000 8.100000 26.975576 0.600000 8.200000 27.587261 0.600000 8.300000 28.218945 0.600000 8.400000 28.870630 0.600000 8.500000 29.542314 0.600000 8.600000 30.233999 0.600000 8.700000 30.945684 0.600000 8.800000 31.677368 0.600000 8.900000 32.429053 0.600000 9.000000 33.200738 0.600000 9.100000 33.992422 0.600000 9.200000 34.804107 0.600000 9.300000 35.635792 0.600000 9.400000 36.487476 0.600000 9.500000 37.359161 0.600000 9.600000 38.250846 0.600000 9.700000 39.162530 0.600000 9.800000 40.094215 0.600000 9.900000 41.045900 0.600000 10.000000 42.017584 0.600000 10.100000 43.009269 0.600000 10.200000 44.020953 0.600000 10.300000 45.052638 0.600000 10.400000 46.104323 0.600000 10.500000 47.176007 0.600000 10.600000 48.267692 0.600000 10.700000 49.379377 0.600000 10.800000 50.511061 0.600000 10.900000 51.662746 0.600000 11.000000 52.834431 0.600000 11.100000 54.026115 0.600000 11.200000 55.237800 0.600000 11.300000 56.469485 0.600000 11.400000 57.721169 0.600000 11.500000 58.992854 0.600000 11.600000 60.284539 0.600000 11.700000 61.596223 0.600000 11.800000 62.927908 0.600000 11.900000 64.279592 0.600000 12.000000 65.651277 0.600000 12.100000 67.042962 0.600000 12.200000 68.454646 0.600000 12.300000 69.886331 0.600000 12.400000 71.338016 0.600000 12.500000 72.809700 0.600000 12.600000 74.301385 0.600000 12.700000 75.813070 0.600000 12.800000 77.344754 0.600000 12.900000 78.896439 0.600000 13.000000 80.468124 0.600000 13.100000 82.059808 0.600000 13.200000 83.671493 0.600000 13.300000 85.303178 0.600000 13.400000 86.954862 0.600000 13.500000 88.626547 0.600000 13.600000 90.318231 0.600000 13.700000 92.029916 0.600000 13.800000 93.761601 0.600000 13.900000 95.513285 0.600000 14.000000 97.284970 0.600000 14.100000 99.076655 0.600000 14.200000 100.888339 0.600000 14.300000 102.720024 0.600000 14.400000 104.571709 0.600000 14.500000 106.443393 0.600000 14.600000 108.335078 0.600000 14.700000 110.246763 0.600000 14.800000 112.178447 0.600000 14.900000 114.130132 0.600000 15.000000 116.101817 0.700000 -5.000000 116.330996 0.700000 -4.900000 114.351153 0.700000 -4.800000 112.391310 0.700000 -4.700000 110.451467 0.700000 -4.600000 108.531623 0.700000 -4.500000 106.631780 0.700000 -4.400000 104.751937 0.700000 -4.300000 102.892094 0.700000 -4.200000 101.052251 0.700000 -4.100000 99.232408 0.700000 -4.000000 97.432564 0.700000 -3.900000 95.652721 0.700000 -3.800000 93.892878 0.700000 -3.700000 92.153035 0.700000 -3.600000 90.433192 0.700000 -3.500000 88.733349 0.700000 -3.400000 87.053505 0.700000 -3.300000 85.393662 0.700000 -3.200000 83.753819 0.700000 -3.100000 82.133976 0.700000 -3.000000 80.534133 0.700000 -2.900000 78.954290 0.700000 -2.800000 77.394446 0.700000 -2.700000 75.854603 0.700000 -2.600000 74.334760 0.700000 -2.500000 72.834917 0.700000 -2.400000 71.355074 0.700000 -2.300000 69.895231 0.700000 -2.200000 68.455388 0.700000 -2.100000 67.035544 0.700000 -2.000000 65.635701 0.700000 -1.900000 64.255858 0.700000 -1.800000 62.896015 0.700000 -1.700000 61.556172 0.700000 -1.600000 60.236329 0.700000 -1.500000 58.936485 0.700000 -1.400000 57.656642 0.700000 -1.300000 56.396799 0.700000 -1.200000 55.156956 0.700000 -1.100000 53.937113 0.700000 -1.000000 52.737270 0.700000 -0.900000 51.557426 0.700000 -0.800000 50.397583 0.700000 -0.700000 49.257740 0.700000 -0.600000 48.137897 0.700000 -0.500000 47.038054 0.700000 -0.400000 45.958211 0.700000 -0.300000 44.898367 0.700000 -0.200000 43.858524 0.700000 -0.100000 42.838681 0.700000 -0.000000 41.838838 0.700000 0.100000 40.858995 0.700000 0.200000 39.899152 0.700000 0.300000 38.959308 0.700000 0.400000 38.039465 0.700000 0.500000 37.139622 0.700000 0.600000 36.259779 0.700000 0.700000 35.399936 0.700000 0.800000 34.560093 0.700000 0.900000 33.740249 0.700000 1.000000 32.940406 0.700000 1.100000 32.160563 0.700000 1.200000 31.400720 0.700000 1.300000 30.660877 0.700000 1.400000 29.941034 0.700000 1.500000 29.241191 0.700000 1.600000 28.561347 0.700000 1.700000 27.901504 0.700000 1.800000 27.261661 0.700000 1.900000 26.641818 0.700000 2.000000 26.041975 0.700000 2.100000 25.462132 0.700000 2.200000 24.902288 0.700000 2.300000 24.362445 0.700000 2.400000 23.842602 0.700000 2.500000 23.342759 0.700000 2.600000 22.862916 0.700000 2.700000 22.403073 0.700000 2.800000 21.963229 0.700000 2.900000 21.543386 0.700000 3.000000 21.143543 0.700000 3.100000 20.763700 0.700000 3.200000 20.403857 0.700000 3.300000 20.064014 0.700000 3.400000 19.744170 0.700000 3.500000 19.444327 0.700000 3.600000 19.164484 0.700000 3.700000 18.904641 0.700000 3.800000 18.664798 0.700000 3.900000 18.444955 0.700000 4.000000 18.245111 0.700000 4.100000 18.065268 0.700000 4.200000 17.905425 0.700000 4.300000 17.765582 0.700000 4.400000 17.645739 0.700000 4.500000 17.545896 0.700000 4.600000 17.466053 0.700000 4.700000 17.406209 0.700000 4.800000 17.366366 0.700000 4.900000 17.346523 0.700000 5.000000 17.346680 0.700000 5.100000 17.366837 0.700000 5.200000 17.406994 0.700000 5.300000 17.467150 0.700000 5.400000 17.547307 0.700000 5.500000 17.647464 0.700000 5.600000 17.767621 0.700000 5.700000 17.907778 0.700000 5.800000 18.067935 0.700000 5.900000 18.248091 0.700000 6.000000 18.448248 0.700000 6.100000 18.668405 0.700000 6.200000 18.908562 0.700000 6.300000 19.168719 0.700000 6.400000 19.448876 0.700000 6.500000 19.749032 0.700000 6.600000 20.069189 0.700000 6.700000 20.409346 0.700000 6.800000 20.769503 0.700000 6.900000 21.149660 0.700000 7.000000 21.549817 0.700000 7.100000 21.969973 0.700000 7.200000 22.410130 0.700000 7.300000 22.870287 0.700000 7.400000 23.350444 0.700000 7.500000 23.850601 0.700000 7.600000 24.370758 0.700000 7.700000 24.910915 0.700000 7.800000 25.471071 0.700000 7.900000 26.051228 0.700000 8.000000 26.651385 0.700000 8.100000 27.271542 0.700000 8.200000 27.911699 0.700000 8.300000 28.571856 0.700000 8.400000 29.252012 0.700000 8.500000 29.952169 0.700000 8.600000 30.672326 0.700000 8.700000 31.412483 0.700000 8.800000 32.172640 0.700000 8.900000 32.952797 0.700000 9.000000 33.752953 0.700000 9.100000 34.573110 0.700000 9.200000 35.413267 0.700000 9.300000 36.273424 0.700000 9.400000 37.153581 0.700000 9.500000 38.053738 0.700000 9.600000 38.973894 0.700000 9.700000 39.914051 0.700000 9.800000 40.874208 0.700000 9.900000 41.854365 0.700000 10.000000 42.854522 0.700000 10.100000 43.874679 0.700000 10.200000 44.914835 0.700000 10.300000 45.974992 0.700000 10.400000 47.055149 0.700000 10.500000 48.155306 0.700000 10.600000 49.275463 0.700000 10.700000 50.415620 0.700000 10.800000 51.575776 0.700000 10.900000 52.755933 0.700000 11.000000 53.956090 0.700000 11.100000 55.176247 0.700000 11.200000 56.416404 0.700000 11.300000 57.676561 0.700000 11.400000 58.956718 0.700000 11.500000 60.256874 0.700000 11.600000 61.577031 0.700000 11.700000 62.917188 0.700000 11.800000 64.277345 0.700000 11.900000 65.657502 0.700000 12.000000 67.057659 0.700000 12.100000 68.477815 0.700000 12.200000 69.917972 0.700000 12.300000 71.378129 0.700000 12.400000 72.858286 0.700000 12.500000 74.358443 0.700000 12.600000 75.878600 0.700000 12.700000 77.418756 0.700000 12.800000 78.978913 0.700000 12.900000 80.559070 0.700000 13.000000 82.159227 0.700000 13.100000 83.779384 0.700000 13.200000 85.419541 0.700000 13.300000 87.079697 0.700000 13.400000 88.759854 0.700000 13.500000 90.460011 0.700000 13.600000 92.180168 0.700000 13.700000 93.920325 0.700000 13.800000 95.680482 0.700000 13.900000 97.460638 0.700000 14.000000 99.260795 0.700000 14.100000 101.080952 0.700000 14.200000 102.921109 0.700000 14.300000 104.781266 0.700000 14.400000 106.661423 0.700000 14.500000 108.561580 0.700000 14.600000 110.481736 0.700000 14.700000 112.421893 0.700000 14.800000 114.382050 0.700000 14.900000 116.362207 0.700000 15.000000 118.362364 0.800000 -5.000000 112.914941 0.800000 -4.900000 110.963053 0.800000 -4.800000 109.031165 0.800000 -4.700000 107.119278 0.800000 -4.600000 105.227390 0.800000 -4.500000 103.355502 0.800000 -4.400000 101.503615 0.800000 -4.300000 99.671727 0.800000 -4.200000 97.859839 0.800000 -4.100000 96.067951 0.800000 -4.000000 94.296064 0.800000 -3.900000 92.544176 0.800000 -3.800000 90.812288 0.800000 -3.700000 89.100401 0.800000 -3.600000 87.408513 0.800000 -3.500000 85.736625 0.800000 -3.400000 84.084737 0.800000 -3.300000 82.452850 0.800000 -3.200000 80.840962 0.800000 -3.100000 79.249074 0.800000 -3.000000 77.677187 0.800000 -2.900000 76.125299 0.800000 -2.800000 74.593411 0.800000 -2.700000 73.081524 0.800000 -2.600000 71.589636 0.800000 -2.500000 70.117748 0.800000 -2.400000 68.665860 0.800000 -2.300000 67.233973 0.800000 -2.200000 65.822085 0.800000 -2.100000 64.430197 0.800000 -2.000000 63.058310 0.800000 -1.900000 61.706422 0.800000 -1.800000 60.374534 0.800000 -1.700000 59.062646 0.800000 -1.600000 57.770759 0.800000 -1.500000 56.498871 0.800000 -1.400000 55.246983 0.800000 -1.300000 54.015096 0.800000 -1.200000 52.803208 0.800000 -1.100000 51.611320 0.800000 -1.000000 50.439432 0.800000 -0.900000 49.287545 0.800000 -0.800000 48.155657 0.800000 -0.700000 47.043769 0.800000 -0.600000 45.951882 0.800000 -0.500000 44.879994 0.800000 -0.400000 43.828106 0.800000 -0.300000 42.796219 0.800000 -0.200000 41.784331 0.800000 -0.100000 40.792443 0.800000 -0.000000 39.820555 0.800000 0.100000 38.868668 0.800000 0.200000 37.936780 0.800000 0.300000 37.024892 0.800000 0.400000 36.133005 0.800000 0.500000 35.261117 0.800000 0.600000 34.409229 0.800000 0.700000 33.577341 0.800000 0.800000 32.765454 0.800000 0.900000 31.973566 0.800000 1.000000 31.201678 0.800000 1.100000 30.449791 0.800000 1.200000 29.717903 0.800000 1.300000 29.006015 0.800000 1.400000 28.314127 0.800000 1.500000 27.642240 0.800000 1.600000 26.990352 0.800000 1.700000 26.358464 0.800000 1.800000 25.746577 0.800000 1.900000 25.154689 0.800000 2.000000 24.582801 0.800000 2.100000 24.030914 0.800000 2.200000 23.499026 0.800000 2.300000 22.987138 0.800000 2.400000 22.495250 0.800000 2.500000 22.023363 0.800000 2.600000 21.571475 0.800000 2.700000 21.139587 0.800000 2.800000 20.727700 0.800000 2.900000 20.335812 0.800000 3.000000 19.963924 0.800000 3.100000 19.612036 0.800000 3.200000 19.280149 0.800000 3.300000 18.968261 0.800000 3.400000 18.676373 0.800000 3.500000 18.404486 0.800000 3.600000 18.152598 0.800000 3.700000 17.920710 0.800000 3.800000 17.708822 0.800000 3.900000 17.516935 0.800000 4.000000 17.345047 0.800000 4.100000 17.193159 0.800000 4.200000 17.061272 0.800000 4.300000 16.949384 0.800000 4.400000 16.857496 0.800000 4.500000 16.785609 0.800000 4.600000 16.733721 0.800000 4.700000 16.701833 0.800000 4.800000 16.689945 0.800000 4.900000 16.698058 0.800000 5.000000 16.726170 0.800000 5.100000 16.774282 0.800000 5.200000 16.842395 0.800000 5.300000 16.930507 0.800000 5.400000 17.038619 0.800000 5.500000 17.166731 0.800000 5.600000 17.314844 0.800000 5.700000 17.482956 0.800000 5.800000 17.671068 0.800000 5.900000 17.879181 0.800000 6.000000 18.107293 0.800000 6.100000 18.355405 0.800000 6.200000 18.623517 0.800000 6.300000 18.911630 0.800000 6.400000 19.219742 0.800000 6.500000 19.547854 0.800000 6.600000 19.895967 0.800000 6.700000 20.264079 0.800000 6.800000 20.652191 0.800000 6.900000 21.060304 0.800000 7.000000 21.488416 0.800000 7.100000 21.936528 0.800000 7.200000 22.404640 0.800000 7.300000 22.892753 0.800000 7.400000 23.400865 0.800000 7.500000 23.928977 0.800000 7.600000 24.477090 0.800000 7.700000 25.045202 0.800000 7.800000 25.633314 0.800000 7.900000 26.241426 0.800000 8.000000 26.869539 0.800000 8.100000 27.517651 0.800000 8.200000 28.185763 0.800000 8.300000 28.873876 0.800000 8.400000 29.581988 0.800000 8.500000 30.310100 0.800000 8.600000 31.058212 0.800000 8.700000 31.826325 0.800000 8.800000 32.614437 0.800000 8.900000 33.422549 0.800000 9.000000 34.250662 0.800000 9.100000 35.098774 0.800000 9.200000 35.966886 0.800000 9.300000 36.854999 0.800000 9.400000 37.763111 0.800000 9.500000 38.691223 0.800000 9.600000 39.639335 0.800000 9.700000 40.607448 0.800000 9.800000 41.595560 0.800000 9.900000 42.603672 0.800000 10.000000 43.631785 0.800000 10.100000 44.679897 0.800000 10.200000 45.748009 0.800000 10.300000 46.836121 0.800000 10.400000 47.944234 0.800000 10.500000 49.072346 0.800000 10.600000 50.220458 0.800000 10.700000 51.388571 0.800000 10.800000 52.576683 0.800000 10.900000 53.784795 0.800000 11.000000 55.012907 0.800000 11.100000 56.261020 0.800000 11.200000 57.529132 0.800000 11.300000 58.817244 0.800000 11.400000 60.125357 0.800000 11.500000 61.453469 0.800000 11.600000 62.801581 0.800000 11.700000 64.169694 0.800000 11.800000 65.557806 0.800000 11.900000 66.965918 0.800000 12.000000 68.394030 0.800000 12.100000 69.842143 0.800000 12.200000 71.310255 0.800000 12.300000 72.798367 0.800000 12.400000 74.306480 0.800000 12.500000 75.834592 0.800000 12.600000 77.382704 0.800000 12.700000 78.950816 0.800000 12.800000 80.538929 0.800000 12.900000 82.147041 0.800000 13.000000 83.775153 0.800000 13.100000 85.423266 0.800000 13.200000 87.091378 0.800000 13.300000 88.779490 0.800000 13.400000 90.487602 0.800000 13.500000 92.215715 0.800000 13.600000 93.963827 0.800000 13.700000 95.731939 0.800000 13.800000 97.520052 0.800000 13.900000 99.328164 0.800000 14.000000 101.156276 0.800000 14.100000 103.004389 0.800000 14.200000 104.872501 0.800000 14.300000 106.760613 0.800000 14.400000 108.668725 0.800000 14.500000 110.596838 0.800000 14.600000 112.544950 0.800000 14.700000 114.513062 0.800000 14.800000 116.501175 0.800000 14.900000 118.509287 0.800000 15.000000 120.537399 0.900000 -5.000000 109.521092 0.900000 -4.900000 107.596643 0.900000 -4.800000 105.692194 0.900000 -4.700000 103.807745 0.900000 -4.600000 101.943296 0.900000 -4.500000 100.098847 0.900000 -4.400000 98.274398 0.900000 -4.300000 96.469949 0.900000 -4.200000 94.685500 0.900000 -4.100000 92.921051 0.900000 -4.000000 91.176602 0.900000 -3.900000 89.452153 0.900000 -3.800000 87.747704 0.900000 -3.700000 86.063255 0.900000 -3.600000 84.398806 0.900000 -3.500000 82.754357 0.900000 -3.400000 81.129908 0.900000 -3.300000 79.525459 0.900000 -3.200000 77.941010 0.900000 -3.100000 76.376561 0.900000 -3.000000 74.832112 0.900000 -2.900000 73.307663 0.900000 -2.800000 71.803214 0.900000 -2.700000 70.318765 0.900000 -2.600000 68.854316 0.900000 -2.500000 67.409867 0.900000 -2.400000 65.985418 0.900000 -2.300000 64.580969 0.900000 -2.200000 63.196520 0.900000 -2.100000 61.832071 0.900000 -2.000000 60.487622 0.900000 -1.900000 59.163173 0.900000 -1.800000 57.858724 0.900000 -1.700000 56.574275 0.900000 -1.600000 55.309826 0.900000 -1.500000 54.065377 0.900000 -1.400000 52.840928 0.900000 -1.300000 51.636479 0.900000 -1.200000 50.452030 0.900000 -1.100000 49.287581 0.900000 -1.000000 48.143132 0.900000 -0.900000 47.018683 0.900000 -0.800000 45.914234 0.900000 -0.700000 44.829785 0.900000 -0.600000 43.765336 0.900000 -0.500000 42.720887 0.900000 -0.400000 41.696438 0.900000 -0.300000 40.691989 0.900000 -0.200000 39.707540 0.900000 -0.100000 38.743091 0.900000 -0.000000 37.798642 0.900000 0.100000 36.874193 0.900000 0.200000 35.969744 0.900000 0.300000 35.085295 0.900000 0.400000 34.220846 0.900000 0.500000 33.376397 0.900000 0.600000 32.551948 0.900000 0.700000 31.747499 0.900000 0.800000 30.963050 0.900000 0.900000 30.198601 0.900000 1.000000 29.454152 0.900000 1.100000 28.729703 0.900000 1.200000 28.025254 0.900000 1.300000 27.340805 0.900000 1.400000 26.676356 0.900000 1.500000 26.031907 0.900000 1.600000 25.407458 0.900000 1.700000 24.803009 0.900000 1.800000 24.218560 0.900000 1.900000 23.654111 0.900000 2.000000 23.109662 0.900000 2.100000 22.585213 0.900000 2.200000 22.080764 0.900000 2.300000 21.596315 0.900000 2.400000 21.131866 0.900000 2.500000 20.687417 0.900000 2.600000 20.262968 0.900000 2.700000 19.858519 0.900000 2.800000 19.474070 0.900000 2.900000 19.109621 0.900000 3.000000 18.765172 0.900000 3.100000 18.440723 0.900000 3.200000 18.136274 0.900000 3.300000 17.851825 0.900000 3.400000 17.587376 0.900000 3.500000 17.342927 0.900000 3.600000 17.118478 0.900000 3.700000 16.914029 0.900000 3.800000 16.729580 0.900000 3.900000 16.565131 0.900000 4.000000 16.420682 0.900000 4.100000 16.296233 0.900000 4.200000 16.191784 0.900000 4.300000 16.107335 0.900000 4.400000 16.042886 0.900000 4.500000 15.998437 0.900000 4.600000 15.973988 0.900000 4.700000 15.969539 0.900000 4.800000 15.985090 0.900000 4.900000 16.020641 0.900000 5.000000 16.076192 0.900000 5.100000 16.151743 0.900000 5.200000 16.247294 0.900000 5.300000 16.362845 0.900000 5.400000 16.498396 0.900000 5.500000 16.653947 0.900000 5.600000 16.829498 0.900000 5.700000 17.025049 0.900000 5.800000 17.240600 0.900000 5.900000 17.476151 0.900000 6.000000 17.731702 0.900000 6.100000 18.007253 0.900000 6.200000 18.302804 0.900000 6.300000 18.618355 0.900000 6.400000 18.953906 0.900000 6.500000 19.309457 0.900000 6.600000 19.685008 0.900000 6.700000 20.080559 0.900000 6.800000 20.496110 0.900000 6.900000 20.931661 0.900000 7.000000 21.387212 0.900000 7.100000 21.862763 0.900000 7.200000 22.358314 0.900000 7.300000 22.873865 0.900000 7.400000 23.409416 0.900000 7.500000 23.964967 0.900000 7.600000 24.540518 0.900000 7.700000 25.136069 0.900000 7.800000 25.751620 0.900000 7.900000 26.387172 0.900000 8.000000 27.042723 0.900000 8.100000 27.718274 0.900000 8.200000 28.413825 0.900000 8.300000 29.129376 0.900000 8.400000 29.864927 0.900000 8.500000 30.620478 0.900000 8.600000 31.396029 0.900000 8.700000 32.191580 0.900000 8.800000 33.007131 0.900000 8.900000 33.842682 0.900000 9.000000 34.698233 0.900000 9.100000 35.573784 0.900000 9.200000 36.469335 0.900000 9.300000 37.384886 0.900000 9.400000 38.320437 0.900000 9.500000 39.275988 0.900000 9.600000 40.251539 0.900000 9.700000 41.247090 0.900000 9.800000 42.262641 0.900000 9.900000 43.298192 0.900000 10.000000 44.353743 0.900000 10.100000 45.429294 0.900000 10.200000 46.524845 0.900000 10.300000 47.640396 0.900000 10.400000 48.775947 0.900000 10.500000 49.931498 0.900000 10.600000 51.107049 0.900000 10.700000 52.302600 0.900000 10.800000 53.518151 0.900000 10.900000 54.753702 0.900000 11.000000 56.009253 0.900000 11.100000 57.284804 0.900000 11.200000 58.580355 0.900000 11.300000 59.895906 0.900000 11.400000 61.231457 0.900000 11.500000 62.587008 0.900000 11.600000 63.962559 0.900000 11.700000 65.358110 0.900000 11.800000 66.773661 0.900000 11.900000 68.209212 0.900000 12.000000 69.664763 0.900000 12.100000 71.140314 0.900000 12.200000 72.635865 0.900000 12.300000 74.151416 0.900000 12.400000 75.686967 0.900000 12.500000 77.242518 0.900000 12.600000 78.818069 0.900000 12.700000 80.413620 0.900000 12.800000 82.029171 0.900000 12.900000 83.664722 0.900000 13.000000 85.320273 0.900000 13.100000 86.995824 0.900000 13.200000 88.691375 0.900000 13.300000 90.406926 0.900000 13.400000 92.142477 0.900000 13.500000 93.898028 0.900000 13.600000 95.673579 0.900000 13.700000 97.469130 0.900000 13.800000 99.284681 0.900000 13.900000 101.120232 0.900000 14.000000 102.975783 0.900000 14.100000 104.851334 0.900000 14.200000 106.746885 0.900000 14.300000 108.662436 0.900000 14.400000 110.597987 0.900000 14.500000 112.553538 0.900000 14.600000 114.529089 0.900000 14.700000 116.524640 0.900000 14.800000 118.540191 0.900000 14.900000 120.575742 0.900000 15.000000 122.631293 1.000000 -5.000000 106.154526 1.000000 -4.900000 104.256999 1.000000 -4.800000 102.379472 1.000000 -4.700000 100.521945 1.000000 -4.600000 98.684418 1.000000 -4.500000 96.866891 1.000000 -4.400000 95.069364 1.000000 -4.300000 93.291837 1.000000 -4.200000 91.534310 1.000000 -4.100000 89.796783 1.000000 -4.000000 88.079256 1.000000 -3.900000 86.381729 1.000000 -3.800000 84.704202 1.000000 -3.700000 83.046675 1.000000 -3.600000 81.409148 1.000000 -3.500000 79.791621 1.000000 -3.400000 78.194094 1.000000 -3.300000 76.616567 1.000000 -3.200000 75.059040 1.000000 -3.100000 73.521513 1.000000 -3.000000 72.003986 1.000000 -2.900000 70.506459 1.000000 -2.800000 69.028932 1.000000 -2.700000 67.571405 1.000000 -2.600000 66.133878 1.000000 -2.500000 64.716351 1.000000 -2.400000 63.318824 1.000000 -2.300000 61.941297 1.000000 -2.200000 60.583770 1.000000 -2.100000 59.246243 1.000000 -2.000000 57.928716 1.000000 -1.900000 56.631189 1.000000 -1.800000 55.353662 1.000000 -1.700000 54.096135 1.000000 -1.600000 52.858608 1.000000 -1.500000 51.641081 1.000000 -1.400000 50.443554 1.000000 -1.300000 49.266027 1.000000 -1.200000 48.108500 1.000000 -1.100000 46.970973 1.000000 -1.000000 45.853446 1.000000 -0.900000 44.755919 1.000000 -0.800000 43.678392 1.000000 -0.700000 42.620865 1.000000 -0.600000 41.583338 1.000000 -0.500000 40.565811 1.000000 -0.400000 39.568284 1.000000 -0.300000 38.590757 1.000000 -0.200000 37.633230 1.000000 -0.100000 36.695703 1.000000 -0.000000 35.778176 1.000000 0.100000 34.880649 1.000000 0.200000 34.003122 1.000000 0.300000 33.145595 1.000000 0.400000 32.308068 1.000000 0.500000 31.490541 1.000000 0.600000 30.693014 1.000000 0.700000 29.915487 1.000000 0.800000 29.157960 1.000000 0.900000 28.420433 1.000000 1.000000 27.702906 1.000000 1.100000 27.005379 1.000000 1.200000 26.327852 1.000000 1.300000 25.670325 1.000000 1.400000 25.032797 1.000000 1.500000 24.415270 1.000000 1.600000 23.817743 1.000000 1.700000 23.240216 1.000000 1.800000 22.682689 1.000000 1.900000 22.145162 1.000000 2.000000 21.627635 1.000000 2.100000 21.130108 1.000000 2.200000 20.652581 1.000000 2.300000 20.195054 1.000000 2.400000 19.757527 1.000000 2.500000 19.340000 1.000000 2.600000 18.942473 1.000000 2.700000 18.564946 1.000000 2.800000 18.207419 1.000000 2.900000 17.869892 1.000000 3.000000 17.552365 1.000000 3.100000 17.254838 1.000000 3.200000 16.977311 1.000000 3.300000 16.719784 1.000000 3.400000 16.482257 1.000000 3.500000 16.264730 1.000000 3.600000 16.067203 1.000000 3.700000 15.889676 1.000000 3.800000 15.732149 1.000000 3.900000 15.594622 1.000000 4.000000 15.477095 1.000000 4.100000 15.379568 1.000000 4.200000 15.302041 1.000000 4.300000 15.244514 1.000000 4.400000 15.206987 1.000000 4.500000 15.189460 1.000000 4.600000 15.191933 1.000000 4.700000 15.214406 1.000000 4.800000 15.256879 1.000000 4.900000 15.319352 1.000000 5.000000 15.401825 1.000000 5.100000 15.504298 1.000000 5.200000 15.626771 1.000000 5.300000 15.769244 1.000000 5.400000 15.931717 1.000000 5.500000 16.114190 1.000000 5.600000 16.316663 1.000000 5.700000 16.539136 1.000000 5.800000 16.781609 1.000000 5.900000 17.044082 1.000000 6.000000 17.326555 1.000000 6.100000 17.629028 1.000000 6.200000 17.951501 1.000000 6.300000 18.293974 1.000000 6.400000 18.656447 1.000000 6.500000 19.038920 1.000000 6.600000 19.441393 1.000000 6.700000 19.863866 1.000000 6.800000 20.306339 1.000000 6.900000 20.768812 1.000000 7.000000 21.251285 1.000000 7.100000 21.753758 1.000000 7.200000 22.276231 1.000000 7.300000 22.818704 1.000000 7.400000 23.381177 1.000000 7.500000 23.963650 1.000000 7.600000 24.566123 1.000000 7.700000 25.188596 1.000000 7.800000 25.831068 1.000000 7.900000 26.493541 1.000000 8.000000 27.176014 1.000000 8.100000 27.878487 1.000000 8.200000 28.600960 1.000000 8.300000 29.343433 1.000000 8.400000 30.105906 1.000000 8.500000 30.888379 1.000000 8.600000 31.690852 1.000000 8.700000 32.513325 1.000000 8.800000 33.355798 1.000000 8.900000 34.218271 1.000000 9.000000 35.100744 1.000000 9.100000 36.003217 1.000000 9.200000 36.925690 1.000000 9.300000 37.868163 1.000000 9.400000 38.830636 1.000000 9.500000 39.813109 1.000000 9.600000 40.815582 1.000000 9.700000 41.838055 1.000000 9.800000 42.880528 1.000000 9.900000 43.943001 1.000000 10.000000 45.025474 1.000000 10.100000 46.127947 1.000000 10.200000 47.250420 1.000000 10.300000 48.392893 1.000000 10.400000 49.555366 1.000000 10.500000 50.737839 1.000000 10.600000 51.940312 1.000000 10.700000 53.162785 1.000000 10.800000 54.405258 1.000000 10.900000 55.667731 1.000000 11.000000 56.950204 1.000000 11.100000 58.252677 1.000000 11.200000 59.575150 1.000000 11.300000 60.917623 1.000000 11.400000 62.280096 1.000000 11.500000 63.662569 1.000000 11.600000 65.065042 1.000000 11.700000 66.487515 1.000000 11.800000 67.929988 1.000000 11.900000 69.392461 1.000000 12.000000 70.874934 1.000000 12.100000 72.377407 1.000000 12.200000 73.899880 1.000000 12.300000 75.442353 1.000000 12.400000 77.004826 1.000000 12.500000 78.587299 1.000000 12.600000 80.189772 1.000000 12.700000 81.812245 1.000000 12.800000 83.454718 1.000000 12.900000 85.117191 1.000000 13.000000 86.799664 1.000000 13.100000 88.502137 1.000000 13.200000 90.224610 1.000000 13.300000 91.967083 1.000000 13.400000 93.729556 1.000000 13.500000 95.512029 1.000000 13.600000 97.314502 1.000000 13.700000 99.136975 1.000000 13.800000 100.979448 1.000000 13.900000 102.841921 1.000000 14.000000 104.724394 1.000000 14.100000 106.626866 1.000000 14.200000 108.549339 1.000000 14.300000 110.491812 1.000000 14.400000 112.454285 1.000000 14.500000 114.436758 1.000000 14.600000 116.439231 1.000000 14.700000 118.461704 1.000000 14.800000 120.504177 1.000000 14.900000 122.566650 1.000000 15.000000 124.649123 1.100000 -5.000000 102.820959 1.100000 -4.900000 100.949838 1.100000 -4.800000 99.098716 1.100000 -4.700000 97.267594 1.100000 -4.600000 95.456472 1.100000 -4.500000 93.665351 1.100000 -4.400000 91.894229 1.100000 -4.300000 90.143107 1.100000 -4.200000 88.411985 1.100000 -4.100000 86.700864 1.100000 -4.000000 85.009742 1.100000 -3.900000 83.338620 1.100000 -3.800000 81.687498 1.100000 -3.700000 80.056376 1.100000 -3.600000 78.445255 1.100000 -3.500000 76.854133 1.100000 -3.400000 75.283011 1.100000 -3.300000 73.731889 1.100000 -3.200000 72.200768 1.100000 -3.100000 70.689646 1.100000 -3.000000 69.198524 1.100000 -2.900000 67.727402 1.100000 -2.800000 66.276280 1.100000 -2.700000 64.845159 1.100000 -2.600000 63.434037 1.100000 -2.500000 62.042915 1.100000 -2.400000 60.671793 1.100000 -2.300000 59.320672 1.100000 -2.200000 57.989550 1.100000 -2.100000 56.678428 1.100000 -2.000000 55.387306 1.100000 -1.900000 54.116184 1.100000 -1.800000 52.865063 1.100000 -1.700000 51.633941 1.100000 -1.600000 50.422819 1.100000 -1.500000 49.231697 1.100000 -1.400000 48.060576 1.100000 -1.300000 46.909454 1.100000 -1.200000 45.778332 1.100000 -1.100000 44.667210 1.100000 -1.000000 43.576088 1.100000 -0.900000 42.504967 1.100000 -0.800000 41.453845 1.100000 -0.700000 40.422723 1.100000 -0.600000 39.411601 1.100000 -0.500000 38.420480 1.100000 -0.400000 37.449358 1.100000 -0.300000 36.498236 1.100000 -0.200000 35.567114 1.100000 -0.100000 34.655992 1.100000 -0.000000 33.764871 1.100000 0.100000 32.893749 1.100000 0.200000 32.042627 1.100000 0.300000 31.211505 1.100000 0.400000 30.400384 1.100000 0.500000 29.609262 1.100000 0.600000 28.838140 1.100000 0.700000 28.087018 1.100000 0.800000 27.355896 1.100000 0.900000 26.644775 1.100000 1.000000 25.953653 1.100000 1.100000 25.282531 1.100000 1.200000 24.631409 1.100000 1.300000 24.000288 1.100000 1.400000 23.389166 1.100000 1.500000 22.798044 1.100000 1.600000 22.226922 1.100000 1.700000 21.675800 1.100000 1.800000 21.144679 1.100000 1.900000 20.633557 1.100000 2.000000 20.142435 1.100000 2.100000 19.671313 1.100000 2.200000 19.220192 1.100000 2.300000 18.789070 1.100000 2.400000 18.377948 1.100000 2.500000 17.986826 1.100000 2.600000 17.615704 1.100000 2.700000 17.264583 1.100000 2.800000 16.933461 1.100000 2.900000 16.622339 1.100000 3.000000 16.331217 1.100000 3.100000 16.060096 1.100000 3.200000 15.808974 1.100000 3.300000 15.577852 1.100000 3.400000 15.366730 1.100000 3.500000 15.175608 1.100000 3.600000 15.004487 1.100000 3.700000 14.853365 1.100000 3.800000 14.722243 1.100000 3.900000 14.611121 1.100000 4.000000 14.520000 1.100000 4.100000 14.448878 1.100000 4.200000 14.397756 1.100000 4.300000 14.366634 1.100000 4.400000 14.355513 1.100000 4.500000 14.364391 1.100000 4.600000 14.393269 1.100000 4.700000 14.442147 1.100000 4.800000 14.511025 1.100000 4.900000 14.599904 1.100000 5.000000 14.708782 1.100000 5.100000 14.837660 1.100000 5.200000 14.986538 1.100000 5.300000 15.155417 1.100000 5.400000 15.344295 1.100000 5.500000 15.553173 1.100000 5.600000 15.782051 1.100000 5.700000 16.030929 1.100000 5.800000 16.299808 1.100000 5.900000 16.588686 1.100000 6.000000 16.897564 1.100000 6.100000 17.226442 1.100000 6.200000 17.575321 1.100000 6.300000 17.944199 1.100000 6.400000 18.333077 1.100000 6.500000 18.741955 1.100000 6.600000 19.170833 1.100000 6.700000 19.619712 1.100000 6.800000 20.088590 1.100000 6.900000 20.577468 1.100000 7.000000 21.086346 1.100000 7.100000 21.615225 1.100000 7.200000 22.164103 1.100000 7.300000 22.732981 1.100000 7.400000 23.321859 1.100000 7.500000 23.930737 1.100000 7.600000 24.559616 1.100000 7.700000 25.208494 1.100000 7.800000 25.877372 1.100000 7.900000 26.566250 1.100000 8.000000 27.275129 1.100000 8.100000 28.004007 1.100000 8.200000 28.752885 1.100000 8.300000 29.521763 1.100000 8.400000 30.310641 1.100000 8.500000 31.119520 1.100000 8.600000 31.948398 1.100000 8.700000 32.797276 1.100000 8.800000 33.666154 1.100000 8.900000 34.555033 1.100000 9.000000 35.463911 1.100000 9.100000 36.392789 1.100000 9.200000 37.341667 1.100000 9.300000 38.310545 1.100000 9.400000 39.299424 1.100000 9.500000 40.308302 1.100000 9.600000 41.337180 1.100000 9.700000 42.386058 1.100000 9.800000 43.454937 1.100000 9.900000 44.543815 1.100000 10.000000 45.652693 1.100000 10.100000 46.781571 1.100000 10.200000 47.930449 1.100000 10.300000 49.099328 1.100000 10.400000 50.288206 1.100000 10.500000 51.497084 1.100000 10.600000 52.725962 1.100000 10.700000 53.974841 1.100000 10.800000 55.243719 1.100000 10.900000 56.532597 1.100000 11.000000 57.841475 1.100000 11.100000 59.170353 1.100000 11.200000 60.519232 1.100000 11.300000 61.888110 1.100000 11.400000 63.276988 1.100000 11.500000 64.685866 1.100000 11.600000 66.114745 1.100000 11.700000 67.563623 1.100000 11.800000 69.032501 1.100000 11.900000 70.521379 1.100000 12.000000 72.030258 1.100000 12.100000 73.559136 1.100000 12.200000 75.108014 1.100000 12.300000 76.676892 1.100000 12.400000 78.265770 1.100000 12.500000 79.874649 1.100000 12.600000 81.503527 1.100000 12.700000 83.152405 1.100000 12.800000 84.821283 1.100000 12.900000 86.510162 1.100000 13.000000 88.219040 1.100000 13.100000 89.947918 1.100000 13.200000 91.696796 1.100000 13.300000 93.465674 1.100000 13.400000 95.254553 1.100000 13.500000 97.063431 1.100000 13.600000 98.892309 1.100000 13.700000 100.741187 1.100000 13.800000 102.610066 1.100000 13.900000 104.498944 1.100000 14.000000 106.407822 1.100000 14.100000 108.336700 1.100000 14.200000 110.285578 1.100000 14.300000 112.254457 1.100000 14.400000 114.243335 1.100000 14.500000 116.252213 1.100000 14.600000 118.281091 1.100000 14.700000 120.329970 1.100000 14.800000 122.398848 1.100000 14.900000 124.487726 1.100000 15.000000 126.596604 1.200000 -5.000000 99.526663 1.200000 -4.900000 97.681429 1.200000 -4.800000 95.856196 1.200000 -4.700000 94.050963 1.200000 -4.600000 92.265730 1.200000 -4.500000 90.500496 1.200000 -4.400000 88.755263 1.200000 -4.300000 87.030030 1.200000 -4.200000 85.324796 1.200000 -4.100000 83.639563 1.200000 -4.000000 81.974330 1.200000 -3.900000 80.329097 1.200000 -3.800000 78.703863 1.200000 -3.700000 77.098630 1.200000 -3.600000 75.513397 1.200000 -3.500000 73.948163 1.200000 -3.400000 72.402930 1.200000 -3.300000 70.877697 1.200000 -3.200000 69.372464 1.200000 -3.100000 67.887230 1.200000 -3.000000 66.421997 1.200000 -2.900000 64.976764 1.200000 -2.800000 63.551531 1.200000 -2.700000 62.146297 1.200000 -2.600000 60.761064 1.200000 -2.500000 59.395831 1.200000 -2.400000 58.050597 1.200000 -2.300000 56.725364 1.200000 -2.200000 55.420131 1.200000 -2.100000 54.134898 1.200000 -2.000000 52.869664 1.200000 -1.900000 51.624431 1.200000 -1.800000 50.399198 1.200000 -1.700000 49.193965 1.200000 -1.600000 48.008731 1.200000 -1.500000 46.843498 1.200000 -1.400000 45.698265 1.200000 -1.300000 44.573031 1.200000 -1.200000 43.467798 1.200000 -1.100000 42.382565 1.200000 -1.000000 41.317332 1.200000 -0.900000 40.272098 1.200000 -0.800000 39.246865 1.200000 -0.700000 38.241632 1.200000 -0.600000 37.256399 1.200000 -0.500000 36.291165 1.200000 -0.400000 35.345932 1.200000 -0.300000 34.420699 1.200000 -0.200000 33.515465 1.200000 -0.100000 32.630232 1.200000 -0.000000 31.764999 1.200000 0.100000 30.919766 1.200000 0.200000 30.094532 1.200000 0.300000 29.289299 1.200000 0.400000 28.504066 1.200000 0.500000 27.738832 1.200000 0.600000 26.993599 1.200000 0.700000 26.268366 1.200000 0.800000 25.563133 1.200000 0.900000 24.877899 1.200000 1.000000 24.212666 1.200000 1.100000 23.567433 1.200000 1.200000 22.942200 1.200000 1.300000 22.336966 1.200000 1.400000 21.751733 1.200000 1.500000 21.186500 1.200000 1.600000 20.641266 1.200000 1.700000 20.116033 1.200000 1.800000 19.610800 1.200000 1.900000 19.125567 1.200000 2.000000 18.660333 1.200000 2.100000 18.215100 1.200000 2.200000 17.789867 1.200000 2.300000 17.384634 1.200000 2.400000 16.999400 1.200000 2.500000 16.634167 1.200000 2.600000 16.288934 1.200000 2.700000 15.963700 1.200000 2.800000 15.658467 1.200000 2.900000 15.373234 1.200000 3.000000 15.108001 1.200000 3.100000 14.862767 1.200000 3.200000 14.637534 1.200000 3.300000 14.432301 1.200000 3.400000 14.247067 1.200000 3.500000 14.081834 1.200000 3.600000 13.936601 1.200000 3.700000 13.811368 1.200000 3.800000 13.706134 1.200000 3.900000 13.620901 1.200000 4.000000 13.555668 1.200000 4.100000 13.510435 1.200000 4.200000 13.485201 1.200000 4.300000 13.479968 1.200000 4.400000 13.494735 1.200000 4.500000 13.529501 1.200000 4.600000 13.584268 1.200000 4.700000 13.659035 1.200000 4.800000 13.753802 1.200000 4.900000 13.868568 1.200000 5.000000 14.003335 1.200000 5.100000 14.158102 1.200000 5.200000 14.332869 1.200000 5.300000 14.527635 1.200000 5.400000 14.742402 1.200000 5.500000 14.977169 1.200000 5.600000 15.231935 1.200000 5.700000 15.506702 1.200000 5.800000 15.801469 1.200000 5.900000 16.116236 1.200000 6.000000 16.451002 1.200000 6.100000 16.805769 1.200000 6.200000 17.180536 1.200000 6.300000 17.575303 1.200000 6.400000 17.990069 1.200000 6.500000 18.424836 1.200000 6.600000 18.879603 1.200000 6.700000 19.354369 1.200000 6.800000 19.849136 1.200000 6.900000 20.363903 1.200000 7.000000 20.898670 1.200000 7.100000 21.453436 1.200000 7.200000 22.028203 1.200000 7.300000 22.622970 1.200000 7.400000 23.237736 1.200000 7.500000 23.872503 1.200000 7.600000 24.527270 1.200000 7.700000 25.202037 1.200000 7.800000 25.896803 1.200000 7.900000 26.611570 1.200000 8.000000 27.346337 1.200000 8.100000 28.101104 1.200000 8.200000 28.875870 1.200000 8.300000 29.670637 1.200000 8.400000 30.485404 1.200000 8.500000 31.320170 1.200000 8.600000 32.174937 1.200000 8.700000 33.049704 1.200000 8.800000 33.944471 1.200000 8.900000 34.859237 1.200000 9.000000 35.794004 1.200000 9.100000 36.748771 1.200000 9.200000 37.723538 1.200000 9.300000 38.718304 1.200000 9.400000 39.733071 1.200000 9.500000 40.767838 1.200000 9.600000 41.822604 1.200000 9.700000 42.897371 1.200000 9.800000 43.992138 1.200000 9.900000 45.106905 1.200000 10.000000 46.241671 1.200000 10.100000 47.396438 1.200000 10.200000 48.571205 1.200000 10.300000 49.765972 1.200000 10.400000 50.980738 1.200000 10.500000 52.215505 1.200000 10.600000 53.470272 1.200000 10.700000 54.745038 1.200000 10.800000 56.039805 1.200000 10.900000 57.354572 1.200000 11.000000 58.689339 1.200000 11.100000 60.044105 1.200000 11.200000 61.418872 1.200000 11.300000 62.813639 1.200000 11.400000 64.228405 1.200000 11.500000 65.663172 1.200000 11.600000 67.117939 1.200000 11.700000 68.592706 1.200000 11.800000 70.087472 1.200000 11.900000 71.602239 1.200000 12.000000 73.137006 1.200000 12.100000 74.691773 1.200000 12.200000 76.266539 1.200000 12.300000 77.861306 1.200000 12.400000 79.476073 1.200000 12.500000 81.110839 1.200000 12.600000 82.765606 1.200000 12.700000 84.440373 1.200000 12.800000 86.135140 1.200000 12.900000 87.849906 1.200000 13.000000 89.584673 1.200000 13.100000 91.339440 1.200000 13.200000 93.114207 1.200000 13.300000 94.908973 1.200000 13.400000 96.723740 1.200000 13.500000 98.558507 1.200000 13.600000 100.413273 1.200000 13.700000 102.288040 1.200000 13.800000 104.182807 1.200000 13.900000 106.097574 1.200000 14.000000 108.032340 1.200000 14.100000 109.987107 1.200000 14.200000 111.961874 1.200000 14.300000 113.956640 1.200000 14.400000 115.971407 1.200000 14.500000 118.006174 1.200000 14.600000 120.060941 1.200000 14.700000 122.135707 1.200000 14.800000 124.230474 1.200000 14.900000 126.345241 1.200000 15.000000 128.480008 1.300000 -5.000000 96.278383 1.300000 -4.900000 94.458521 1.300000 -4.800000 92.658660 1.300000 -4.700000 90.878798 1.300000 -4.600000 89.118937 1.300000 -4.500000 87.379075 1.300000 -4.400000 85.659214 1.300000 -4.300000 83.959352 1.300000 -4.200000 82.279491 1.300000 -4.100000 80.619629 1.300000 -4.000000 78.979768 1.300000 -3.900000 77.359906 1.300000 -3.800000 75.760045 1.300000 -3.700000 74.180183 1.300000 -3.600000 72.620322 1.300000 -3.500000 71.080460 1.300000 -3.400000 69.560599 1.300000 -3.300000 68.060737 1.300000 -3.200000 66.580875 1.300000 -3.100000 65.121014 1.300000 -3.000000 63.681152 1.300000 -2.900000 62.261291 1.300000 -2.800000 60.861429 1.300000 -2.700000 59.481568 1.300000 -2.600000 58.121706 1.300000 -2.500000 56.781845 1.300000 -2.400000 55.461983 1.300000 -2.300000 54.162122 1.300000 -2.200000 52.882260 1.300000 -2.100000 51.622399 1.300000 -2.000000 50.382537 1.300000 -1.900000 49.162676 1.300000 -1.800000 47.962814 1.300000 -1.700000 46.782953 1.300000 -1.600000 45.623091 1.300000 -1.500000 44.483230 1.300000 -1.400000 43.363368 1.300000 -1.300000 42.263507 1.300000 -1.200000 41.183645 1.300000 -1.100000 40.123784 1.300000 -1.000000 39.083922 1.300000 -0.900000 38.064061 1.300000 -0.800000 37.064199 1.300000 -0.700000 36.084338 1.300000 -0.600000 35.124476 1.300000 -0.500000 34.184615 1.300000 -0.400000 33.264753 1.300000 -0.300000 32.364892 1.300000 -0.200000 31.485030 1.300000 -0.100000 30.625169 1.300000 -0.000000 29.785307 1.300000 0.100000 28.965446 1.300000 0.200000 28.165584 1.300000 0.300000 27.385723 1.300000 0.400000 26.625861 1.300000 0.500000 25.886000 1.300000 0.600000 25.166138 1.300000 0.700000 24.466277 1.300000 0.800000 23.786415 1.300000 0.900000 23.126554 1.300000 1.000000 22.486692 1.300000 1.100000 21.866830 1.300000 1.200000 21.266969 1.300000 1.300000 20.687107 1.300000 1.400000 20.127246 1.300000 1.500000 19.587384 1.300000 1.600000 19.067523 1.300000 1.700000 18.567661 1.300000 1.800000 18.087800 1.300000 1.900000 17.627938 1.300000 2.000000 17.188077 1.300000 2.100000 16.768215 1.300000 2.200000 16.368354 1.300000 2.300000 15.988492 1.300000 2.400000 15.628631 1.300000 2.500000 15.288769 1.300000 2.600000 14.968908 1.300000 2.700000 14.669046 1.300000 2.800000 14.389185 1.300000 2.900000 14.129323 1.300000 3.000000 13.889462 1.300000 3.100000 13.669600 1.300000 3.200000 13.469739 1.300000 3.300000 13.289877 1.300000 3.400000 13.130016 1.300000 3.500000 12.990154 1.300000 3.600000 12.870293 1.300000 3.700000 12.770431 1.300000 3.800000 12.690570 1.300000 3.900000 12.630708 1.300000 4.000000 12.590847 1.300000 4.100000 12.570985 1.300000 4.200000 12.571124 1.300000 4.300000 12.591262 1.300000 4.400000 12.631401 1.300000 4.500000 12.691539 1.300000 4.600000 12.771678 1.300000 4.700000 12.871816 1.300000 4.800000 12.991955 1.300000 4.900000 13.132093 1.300000 5.000000 13.292232 1.300000 5.100000 13.472370 1.300000 5.200000 13.672508 1.300000 5.300000 13.892647 1.300000 5.400000 14.132785 1.300000 5.500000 14.392924 1.300000 5.600000 14.673062 1.300000 5.700000 14.973201 1.300000 5.800000 15.293339 1.300000 5.900000 15.633478 1.300000 6.000000 15.993616 1.300000 6.100000 16.373755 1.300000 6.200000 16.773893 1.300000 6.300000 17.194032 1.300000 6.400000 17.634170 1.300000 6.500000 18.094309 1.300000 6.600000 18.574447 1.300000 6.700000 19.074586 1.300000 6.800000 19.594724 1.300000 6.900000 20.134863 1.300000 7.000000 20.695001 1.300000 7.100000 21.275140 1.300000 7.200000 21.875278 1.300000 7.300000 22.495417 1.300000 7.400000 23.135555 1.300000 7.500000 23.795694 1.300000 7.600000 24.475832 1.300000 7.700000 25.175971 1.300000 7.800000 25.896109 1.300000 7.900000 26.636248 1.300000 8.000000 27.396386 1.300000 8.100000 28.176525 1.300000 8.200000 28.976663 1.300000 8.300000 29.796802 1.300000 8.400000 30.636940 1.300000 8.500000 31.497079 1.300000 8.600000 32.377217 1.300000 8.700000 33.277356 1.300000 8.800000 34.197494 1.300000 8.900000 35.137633 1.300000 9.000000 36.097771 1.300000 9.100000 37.077910 1.300000 9.200000 38.078048 1.300000 9.300000 39.098186 1.300000 9.400000 40.138325 1.300000 9.500000 41.198463 1.300000 9.600000 42.278602 1.300000 9.700000 43.378740 1.300000 9.800000 44.498879 1.300000 9.900000 45.639017 1.300000 10.000000 46.799156 1.300000 10.100000 47.979294 1.300000 10.200000 49.179433 1.300000 10.300000 50.399571 1.300000 10.400000 51.639710 1.300000 10.500000 52.899848 1.300000 10.600000 54.179987 1.300000 10.700000 55.480125 1.300000 10.800000 56.800264 1.300000 10.900000 58.140402 1.300000 11.000000 59.500541 1.300000 11.100000 60.880679 1.300000 11.200000 62.280818 1.300000 11.300000 63.700956 1.300000 11.400000 65.141095 1.300000 11.500000 66.601233 1.300000 11.600000 68.081372 1.300000 11.700000 69.581510 1.300000 11.800000 71.101649 1.300000 11.900000 72.641787 1.300000 12.000000 74.201926 1.300000 12.100000 75.782064 1.300000 12.200000 77.382203 1.300000 12.300000 79.002341 1.300000 12.400000 80.642480 1.300000 12.500000 82.302618 1.300000 12.600000 83.982757 1.300000 12.700000 85.682895 1.300000 12.800000 87.403034 1.300000 12.900000 89.143172 1.300000 13.000000 90.903311 1.300000 13.100000 92.683449 1.300000 13.200000 94.483588 1.300000 13.300000 96.303726 1.300000 13.400000 98.143864 1.300000 13.500000 100.004003 1.300000 13.600000 101.884141 1.300000 13.700000 103.784280 1.300000 13.800000 105.704418 1.300000 13.900000 107.644557 1.300000 14.000000 109.604695 1.300000 14.100000 111.584834 1.300000 14.200000 113.584972 1.300000 14.300000 115.605111 1.300000 14.400000 117.645249 1.300000 14.500000 119.705388 1.300000 14.600000 121.785526 1.300000 14.700000 123.885665 1.300000 14.800000 126.005803 1.300000 14.900000 128.145942 1.300000 15.000000 130.306080 1.400000 -5.000000 93.083254 1.400000 -4.900000 91.288248 1.400000 -4.800000 89.513241 1.400000 -4.700000 87.758235 1.400000 -4.600000 86.023228 1.400000 -4.500000 84.308222 1.400000 -4.400000 82.613215 1.400000 -4.300000 80.938209 1.400000 -4.200000 79.283202 1.400000 -4.100000 77.648196 1.400000 -4.000000 76.033189 1.400000 -3.900000 74.438183 1.400000 -3.800000 72.863176 1.400000 -3.700000 71.308170 1.400000 -3.600000 69.773163 1.400000 -3.500000 68.258157 1.400000 -3.400000 66.763150 1.400000 -3.300000 65.288144 1.400000 -3.200000 63.833137 1.400000 -3.100000 62.398131 1.400000 -3.000000 60.983124 1.400000 -2.900000 59.588118 1.400000 -2.800000 58.213111 1.400000 -2.700000 56.858105 1.400000 -2.600000 55.523098 1.400000 -2.500000 54.208092 1.400000 -2.400000 52.913085 1.400000 -2.300000 51.638079 1.400000 -2.200000 50.383072 1.400000 -2.100000 49.148066 1.400000 -2.000000 47.933059 1.400000 -1.900000 46.738053 1.400000 -1.800000 45.563047 1.400000 -1.700000 44.408040 1.400000 -1.600000 43.273034 1.400000 -1.500000 42.158027 1.400000 -1.400000 41.063021 1.400000 -1.300000 39.988014 1.400000 -1.200000 38.933008 1.400000 -1.100000 37.898001 1.400000 -1.000000 36.882995 1.400000 -0.900000 35.887988 1.400000 -0.800000 34.912982 1.400000 -0.700000 33.957975 1.400000 -0.600000 33.022969 1.400000 -0.500000 32.107962 1.400000 -0.400000 31.212956 1.400000 -0.300000 30.337949 1.400000 -0.200000 29.482943 1.400000 -0.100000 28.647936 1.400000 -0.000000 27.832930 1.400000 0.100000 27.037923 1.400000 0.200000 26.262917 1.400000 0.300000 25.507910 1.400000 0.400000 24.772904 1.400000 0.500000 24.057897 1.400000 0.600000 23.362891 1.400000 0.700000 22.687884 1.400000 0.800000 22.032878 1.400000 0.900000 21.397871 1.400000 1.000000 20.782865 1.400000 1.100000 20.187858 1.400000 1.200000 19.612852 1.400000 1.300000 19.057845 1.400000 1.400000 18.522839 1.400000 1.500000 18.007832 1.400000 1.600000 17.512826 1.400000 1.700000 17.037819 1.400000 1.800000 16.582813 1.400000 1.900000 16.147806 1.400000 2.000000 15.732800 1.400000 2.100000 15.337794 1.400000 2.200000 14.962787 1.400000 2.300000 14.607781 1.400000 2.400000 14.272774 1.400000 2.500000 13.957768 1.400000 2.600000 13.662761 1.400000 2.700000 13.387755 1.400000 2.800000 13.132748 1.400000 2.900000 12.897742 1.400000 3.000000 12.682735 1.400000 3.100000 12.487729 1.400000 3.200000 12.312722 1.400000 3.300000 12.157716 1.400000 3.400000 12.022709 1.400000 3.500000 11.907703 1.400000 3.600000 11.812696 1.400000 3.700000 11.737690 1.400000 3.800000 11.682683 1.400000 3.900000 11.647677 1.400000 4.000000 11.632670 1.400000 4.100000 11.637664 1.400000 4.200000 11.662657 1.400000 4.300000 11.707651 1.400000 4.400000 11.772644 1.400000 4.500000 11.857638 1.400000 4.600000 11.962631 1.400000 4.700000 12.087625 1.400000 4.800000 12.232618 1.400000 4.900000 12.397612 1.400000 5.000000 12.582605 1.400000 5.100000 12.787599 1.400000 5.200000 13.012592 1.400000 5.300000 13.257586 1.400000 5.400000 13.522579 1.400000 5.500000 13.807573 1.400000 5.600000 14.112566 1.400000 5.700000 14.437560 1.400000 5.800000 14.782554 1.400000 5.900000 15.147547 1.400000 6.000000 15.532541 1.400000 6.100000 15.937534 1.400000 6.200000 16.362528 1.400000 6.300000 16.807521 1.400000 6.400000 17.272515 1.400000 6.500000 17.757508 1.400000 6.600000 18.262502 1.400000 6.700000 18.787495 1.400000 6.800000 19.332489 1.400000 6.900000 19.897482 1.400000 7.000000 20.482476 1.400000 7.100000 21.087469 1.400000 7.200000 21.712463 1.400000 7.300000 22.357456 1.400000 7.400000 23.022450 1.400000 7.500000 23.707443 1.400000 7.600000 24.412437 1.400000 7.700000 25.137430 1.400000 7.800000 25.882424 1.400000 7.900000 26.647417 1.400000 8.000000 27.432411 1.400000 8.100000 28.237404 1.400000 8.200000 29.062398 1.400000 8.300000 29.907391 1.400000 8.400000 30.772385 1.400000 8.500000 31.657378 1.400000 8.600000 32.562372 1.400000 8.700000 33.487365 1.400000 8.800000 34.432359 1.400000 8.900000 35.397352 1.400000 9.000000 36.382346 1.400000 9.100000 37.387339 1.400000 9.200000 38.412333 1.400000 9.300000 39.457326 1.400000 9.400000 40.522320 1.400000 9.500000 41.607313 1.400000 9.600000 42.712307 1.400000 9.700000 43.837301 1.400000 9.800000 44.982294 1.400000 9.900000 46.147288 1.400000 10.000000 47.332281 1.400000 10.100000 48.537275 1.400000 10.200000 49.762268 1.400000 10.300000 51.007262 1.400000 10.400000 52.272255 1.400000 10.500000 53.557249 1.400000 10.600000 54.862242 1.400000 10.700000 56.187236 1.400000 10.800000 57.532229 1.400000 10.900000 58.897223 1.400000 11.000000 60.282216 1.400000 11.100000 61.687210 1.400000 11.200000 63.112203 1.400000 11.300000 64.557197 1.400000 11.400000 66.022190 1.400000 11.500000 67.507184 1.400000 11.600000 69.012177 1.400000 11.700000 70.537171 1.400000 11.800000 72.082164 1.400000 11.900000 73.647158 1.400000 12.000000 75.232151 1.400000 12.100000 76.837145 1.400000 12.200000 78.462138 1.400000 12.300000 80.107132 1.400000 12.400000 81.772125 1.400000 12.500000 83.457119 1.400000 12.600000 85.162112 1.400000 12.700000 86.887106 1.400000 12.800000 88.632099 1.400000 12.900000 90.397093 1.400000 13.000000 92.182086 1.400000 13.100000 93.987080 1.400000 13.200000 95.812073 1.400000 13.300000 97.657067 1.400000 13.400000 99.522061 1.400000 13.500000 101.407054 1.400000 13.600000 103.312048 1.400000 13.700000 105.237041 1.400000 13.800000 107.182035 1.400000 13.900000 109.147028 1.400000 14.000000 111.132022 1.400000 14.100000 113.137015 1.400000 14.200000 115.162009 1.400000 14.300000 117.207002 1.400000 14.400000 119.271996 1.400000 14.500000 121.356989 1.400000 14.600000 123.461983 1.400000 14.700000 125.586976 1.400000 14.800000 127.731970 1.400000 14.900000 129.896963 1.400000 15.000000 132.081957 1.500000 -5.000000 89.948708 1.500000 -4.900000 88.178039 1.500000 -4.800000 86.427371 1.500000 -4.700000 84.696703 1.500000 -4.600000 82.986035 1.500000 -4.500000 81.295367 1.500000 -4.400000 79.624698 1.500000 -4.300000 77.974030 1.500000 -4.200000 76.343362 1.500000 -4.100000 74.732694 1.500000 -4.000000 73.142026 1.500000 -3.900000 71.571357 1.500000 -3.800000 70.020689 1.500000 -3.700000 68.490021 1.500000 -3.600000 66.979353 1.500000 -3.500000 65.488685 1.500000 -3.400000 64.018016 1.500000 -3.300000 62.567348 1.500000 -3.200000 61.136680 1.500000 -3.100000 59.726012 1.500000 -3.000000 58.335344 1.500000 -2.900000 56.964675 1.500000 -2.800000 55.614007 1.500000 -2.700000 54.283339 1.500000 -2.600000 52.972671 1.500000 -2.500000 51.682003 1.500000 -2.400000 50.411334 1.500000 -2.300000 49.160666 1.500000 -2.200000 47.929998 1.500000 -2.100000 46.719330 1.500000 -2.000000 45.528662 1.500000 -1.900000 44.357993 1.500000 -1.800000 43.207325 1.500000 -1.700000 42.076657 1.500000 -1.600000 40.965989 1.500000 -1.500000 39.875321 1.500000 -1.400000 38.804652 1.500000 -1.300000 37.753984 1.500000 -1.200000 36.723316 1.500000 -1.100000 35.712648 1.500000 -1.000000 34.721980 1.500000 -0.900000 33.751311 1.500000 -0.800000 32.800643 1.500000 -0.700000 31.869975 1.500000 -0.600000 30.959307 1.500000 -0.500000 30.068639 1.500000 -0.400000 29.197970 1.500000 -0.300000 28.347302 1.500000 -0.200000 27.516634 1.500000 -0.100000 26.705966 1.500000 -0.000000 25.915298 1.500000 0.100000 25.144629 1.500000 0.200000 24.393961 1.500000 0.300000 23.663293 1.500000 0.400000 22.952625 1.500000 0.500000 22.261957 1.500000 0.600000 21.591288 1.500000 0.700000 20.940620 1.500000 0.800000 20.309952 1.500000 0.900000 19.699284 1.500000 1.000000 19.108616 1.500000 1.100000 18.537947 1.500000 1.200000 17.987279 1.500000 1.300000 17.456611 1.500000 1.400000 16.945943 1.500000 1.500000 16.455275 1.500000 1.600000 15.984606 1.500000 1.700000 15.533938 1.500000 1.800000 15.103270 1.500000 1.900000 14.692602 1.500000 2.000000 14.301934 1.500000 2.100000 13.931265 1.500000 2.200000 13.580597 1.500000 2.300000 13.249929 1.500000 2.400000 12.939261 1.500000 2.500000 12.648593 1.500000 2.600000 12.377924 1.500000 2.700000 12.127256 1.500000 2.800000 11.896588 1.500000 2.900000 11.685920 1.500000 3.000000 11.495252 1.500000 3.100000 11.324583 1.500000 3.200000 11.173915 1.500000 3.300000 11.043247 1.500000 3.400000 10.932579 1.500000 3.500000 10.841911 1.500000 3.600000 10.771242 1.500000 3.700000 10.720574 1.500000 3.800000 10.689906 1.500000 3.900000 10.679238 1.500000 4.000000 10.688570 1.500000 4.100000 10.717901 1.500000 4.200000 10.767233 1.500000 4.300000 10.836565 1.500000 4.400000 10.925897 1.500000 4.500000 11.035229 1.500000 4.600000 11.164560 1.500000 4.700000 11.313892 1.500000 4.800000 11.483224 1.500000 4.900000 11.672556 1.500000 5.000000 11.881888 1.500000 5.100000 12.111219 1.500000 5.200000 12.360551 1.500000 5.300000 12.629883 1.500000 5.400000 12.919215 1.500000 5.500000 13.228547 1.500000 5.600000 13.557878 1.500000 5.700000 13.907210 1.500000 5.800000 14.276542 1.500000 5.900000 14.665874 1.500000 6.000000 15.075206 1.500000 6.100000 15.504537 1.500000 6.200000 15.953869 1.500000 6.300000 16.423201 1.500000 6.400000 16.912533 1.500000 6.500000 17.421865 1.500000 6.600000 17.951196 1.500000 6.700000 18.500528 1.500000 6.800000 19.069860 1.500000 6.900000 19.659192 1.500000 7.000000 20.268524 1.500000 7.100000 20.897855 1.500000 7.200000 21.547187 1.500000 7.300000 22.216519 1.500000 7.400000 22.905851 1.500000 7.500000 23.615183 1.500000 7.600000 24.344514 1.500000 7.700000 25.093846 1.500000 7.800000 25.863178 1.500000 7.900000 26.652510 1.500000 8.000000 27.461842 1.500000 8.100000 28.291173 1.500000 8.200000 29.140505 1.500000 8.300000 30.009837 1.500000 8.400000 30.899169 1.500000 8.500000 31.808501 1.500000 8.600000 32.737832 1.500000 8.700000 33.687164 1.500000 8.800000 34.656496 1.500000 8.900000 35.645828 1.500000 9.000000 36.655160 1.500000 9.100000 37.684491 1.500000 9.200000 38.733823 1.500000 9.300000 39.803155 1.500000 9.400000 40.892487 1.500000 9.500000 42.001819 1.500000 9.600000 43.131150 1.500000 9.700000 44.280482 1.500000 9.800000 45.449814 1.500000 9.900000 46.639146 1.500000 10.000000 47.848478 1.500000 10.100000 49.077809 1.500000 10.200000 50.327141 1.500000 10.300000 51.596473 1.500000 10.400000 52.885805 1.500000 10.500000 54.195137 1.500000 10.600000 55.524468 1.500000 10.700000 56.873800 1.500000 10.800000 58.243132 1.500000 10.900000 59.632464 1.500000 11.000000 61.041796 1.500000 11.100000 62.471127 1.500000 11.200000 63.920459 1.500000 11.300000 65.389791 1.500000 11.400000 66.879123 1.500000 11.500000 68.388455 1.500000 11.600000 69.917786 1.500000 11.700000 71.467118 1.500000 11.800000 73.036450 1.500000 11.900000 74.625782 1.500000 12.000000 76.235114 1.500000 12.100000 77.864445 1.500000 12.200000 79.513777 1.500000 12.300000 81.183109 1.500000 12.400000 82.872441 1.500000 12.500000 84.581773 1.500000 12.600000 86.311104 1.500000 12.700000 88.060436 1.500000 12.800000 89.829768 1.500000 12.900000 91.619100 1.500000 13.000000 93.428432 1.500000 13.100000 95.257763 1.500000 13.200000 97.107095 1.500000 13.300000 98.976427 1.500000 13.400000 100.865759 1.500000 13.500000 102.775091 1.500000 13.600000 104.704422 1.500000 13.700000 106.653754 1.500000 13.800000 108.623086 1.500000 13.900000 110.612418 1.500000 14.000000 112.621750 1.500000 14.100000 114.651081 1.500000 14.200000 116.700413 1.500000 14.300000 118.769745 1.500000 14.400000 120.859077 1.500000 14.500000 122.968409 1.500000 14.600000 125.097740 1.500000 14.700000 127.247072 1.500000 14.800000 129.416404 1.500000 14.900000 131.605736 1.500000 15.000000 133.815068 1.600000 -5.000000 86.882377 1.600000 -4.900000 85.135530 1.600000 -4.800000 83.408683 1.600000 -4.700000 81.701837 1.600000 -4.600000 80.014990 1.600000 -4.500000 78.348144 1.600000 -4.400000 76.701297 1.600000 -4.300000 75.074450 1.600000 -4.200000 73.467604 1.600000 -4.100000 71.880757 1.600000 -4.000000 70.313910 1.600000 -3.900000 68.767064 1.600000 -3.800000 67.240217 1.600000 -3.700000 65.733370 1.600000 -3.600000 64.246524 1.600000 -3.500000 62.779677 1.600000 -3.400000 61.332830 1.600000 -3.300000 59.905984 1.600000 -3.200000 58.499137 1.600000 -3.100000 57.112290 1.600000 -3.000000 55.745444 1.600000 -2.900000 54.398597 1.600000 -2.800000 53.071750 1.600000 -2.700000 51.764904 1.600000 -2.600000 50.478057 1.600000 -2.500000 49.211210 1.600000 -2.400000 47.964364 1.600000 -2.300000 46.737517 1.600000 -2.200000 45.530671 1.600000 -2.100000 44.343824 1.600000 -2.000000 43.176977 1.600000 -1.900000 42.030131 1.600000 -1.800000 40.903284 1.600000 -1.700000 39.796437 1.600000 -1.600000 38.709591 1.600000 -1.500000 37.642744 1.600000 -1.400000 36.595897 1.600000 -1.300000 35.569051 1.600000 -1.200000 34.562204 1.600000 -1.100000 33.575357 1.600000 -1.000000 32.608511 1.600000 -0.900000 31.661664 1.600000 -0.800000 30.734817 1.600000 -0.700000 29.827971 1.600000 -0.600000 28.941124 1.600000 -0.500000 28.074277 1.600000 -0.400000 27.227431 1.600000 -0.300000 26.400584 1.600000 -0.200000 25.593738 1.600000 -0.100000 24.806891 1.600000 -0.000000 24.040044 1.600000 0.100000 23.293198 1.600000 0.200000 22.566351 1.600000 0.300000 21.859504 1.600000 0.400000 21.172658 1.600000 0.500000 20.505811 1.600000 0.600000 19.858964 1.600000 0.700000 19.232118 1.600000 0.800000 18.625271 1.600000 0.900000 18.038424 1.600000 1.000000 17.471578 1.600000 1.100000 16.924731 1.600000 1.200000 16.397884 1.600000 1.300000 15.891038 1.600000 1.400000 15.404191 1.600000 1.500000 14.937344 1.600000 1.600000 14.490498 1.600000 1.700000 14.063651 1.600000 1.800000 13.656805 1.600000 1.900000 13.269958 1.600000 2.000000 12.903111 1.600000 2.100000 12.556265 1.600000 2.200000 12.229418 1.600000 2.300000 11.922571 1.600000 2.400000 11.635725 1.600000 2.500000 11.368878 1.600000 2.600000 11.122031 1.600000 2.700000 10.895185 1.600000 2.800000 10.688338 1.600000 2.900000 10.501491 1.600000 3.000000 10.334645 1.600000 3.100000 10.187798 1.600000 3.200000 10.060951 1.600000 3.300000 9.954105 1.600000 3.400000 9.867258 1.600000 3.500000 9.800411 1.600000 3.600000 9.753565 1.600000 3.700000 9.726718 1.600000 3.800000 9.719871 1.600000 3.900000 9.733025 1.600000 4.000000 9.766178 1.600000 4.100000 9.819332 1.600000 4.200000 9.892485 1.600000 4.300000 9.985638 1.600000 4.400000 10.098792 1.600000 4.500000 10.231945 1.600000 4.600000 10.385098 1.600000 4.700000 10.558252 1.600000 4.800000 10.751405 1.600000 4.900000 10.964558 1.600000 5.000000 11.197712 1.600000 5.100000 11.450865 1.600000 5.200000 11.724018 1.600000 5.300000 12.017172 1.600000 5.400000 12.330325 1.600000 5.500000 12.663478 1.600000 5.600000 13.016632 1.600000 5.700000 13.389785 1.600000 5.800000 13.782938 1.600000 5.900000 14.196092 1.600000 6.000000 14.629245 1.600000 6.100000 15.082399 1.600000 6.200000 15.555552 1.600000 6.300000 16.048705 1.600000 6.400000 16.561859 1.600000 6.500000 17.095012 1.600000 6.600000 17.648165 1.600000 6.700000 18.221319 1.600000 6.800000 18.814472 1.600000 6.900000 19.427625 1.600000 7.000000 20.060779 1.600000 7.100000 20.713932 1.600000 7.200000 21.387085 1.600000 7.300000 22.080239 1.600000 7.400000 22.793392 1.600000 7.500000 23.526545 1.600000 7.600000 24.279699 1.600000 7.700000 25.052852 1.600000 7.800000 25.846005 1.600000 7.900000 26.659159 1.600000 8.000000 27.492312 1.600000 8.100000 28.345466 1.600000 8.200000 29.218619 1.600000 8.300000 30.111772 1.600000 8.400000 31.024926 1.600000 8.500000 31.958079 1.600000 8.600000 32.911232 1.600000 8.700000 33.884386 1.600000 8.800000 34.877539 1.600000 8.900000 35.890692 1.600000 9.000000 36.923846 1.600000 9.100000 37.976999 1.600000 9.200000 39.050152 1.600000 9.300000 40.143306 1.600000 9.400000 41.256459 1.600000 9.500000 42.389612 1.600000 9.600000 43.542766 1.600000 9.700000 44.715919 1.600000 9.800000 45.909072 1.600000 9.900000 47.122226 1.600000 10.000000 48.355379 1.600000 10.100000 49.608532 1.600000 10.200000 50.881686 1.600000 10.300000 52.174839 1.600000 10.400000 53.487993 1.600000 10.500000 54.821146 1.600000 10.600000 56.174299 1.600000 10.700000 57.547453 1.600000 10.800000 58.940606 1.600000 10.900000 60.353759 1.600000 11.000000 61.786913 1.600000 11.100000 63.240066 1.600000 11.200000 64.713219 1.600000 11.300000 66.206373 1.600000 11.400000 67.719526 1.600000 11.500000 69.252679 1.600000 11.600000 70.805833 1.600000 11.700000 72.378986 1.600000 11.800000 73.972139 1.600000 11.900000 75.585293 1.600000 12.000000 77.218446 1.600000 12.100000 78.871599 1.600000 12.200000 80.544753 1.600000 12.300000 82.237906 1.600000 12.400000 83.951060 1.600000 12.500000 85.684213 1.600000 12.600000 87.437366 1.600000 12.700000 89.210520 1.600000 12.800000 91.003673 1.600000 12.900000 92.816826 1.600000 13.000000 94.649980 1.600000 13.100000 96.503133 1.600000 13.200000 98.376286 1.600000 13.300000 100.269440 1.600000 13.400000 102.182593 1.600000 13.500000 104.115746 1.600000 13.600000 106.068900 1.600000 13.700000 108.042053 1.600000 13.800000 110.035206 1.600000 13.900000 112.048360 1.600000 14.000000 114.081513 1.600000 14.100000 116.134666 1.600000 14.200000 118.207820 1.600000 14.300000 120.300973 1.600000 14.400000 122.414127 1.600000 14.500000 124.547280 1.600000 14.600000 126.700433 1.600000 14.700000 128.873587 1.600000 14.800000 131.066740 1.600000 14.900000 133.279893 1.600000 15.000000 135.513047 1.700000 -5.000000 83.892003 1.700000 -4.900000 82.168462 1.700000 -4.800000 80.464920 1.700000 -4.700000 78.781378 1.700000 -4.600000 77.117836 1.700000 -4.500000 75.474294 1.700000 -4.400000 73.850752 1.700000 -4.300000 72.247211 1.700000 -4.200000 70.663669 1.700000 -4.100000 69.100127 1.700000 -4.000000 67.556585 1.700000 -3.900000 66.033043 1.700000 -3.800000 64.529501 1.700000 -3.700000 63.045959 1.700000 -3.600000 61.582418 1.700000 -3.500000 60.138876 1.700000 -3.400000 58.715334 1.700000 -3.300000 57.311792 1.700000 -3.200000 55.928250 1.700000 -3.100000 54.564708 1.700000 -3.000000 53.221167 1.700000 -2.900000 51.897625 1.700000 -2.800000 50.594083 1.700000 -2.700000 49.310541 1.700000 -2.600000 48.046999 1.700000 -2.500000 46.803457 1.700000 -2.400000 45.579916 1.700000 -2.300000 44.376374 1.700000 -2.200000 43.192832 1.700000 -2.100000 42.029290 1.700000 -2.000000 40.885748 1.700000 -1.900000 39.762206 1.700000 -1.800000 38.658665 1.700000 -1.700000 37.575123 1.700000 -1.600000 36.511581 1.700000 -1.500000 35.468039 1.700000 -1.400000 34.444497 1.700000 -1.300000 33.440955 1.700000 -1.200000 32.457413 1.700000 -1.100000 31.493872 1.700000 -1.000000 30.550330 1.700000 -0.900000 29.626788 1.700000 -0.800000 28.723246 1.700000 -0.700000 27.839704 1.700000 -0.600000 26.976162 1.700000 -0.500000 26.132621 1.700000 -0.400000 25.309079 1.700000 -0.300000 24.505537 1.700000 -0.200000 23.721995 1.700000 -0.100000 22.958453 1.700000 -0.000000 22.214911 1.700000 0.100000 21.491370 1.700000 0.200000 20.787828 1.700000 0.300000 20.104286 1.700000 0.400000 19.440744 1.700000 0.500000 18.797202 1.700000 0.600000 18.173660 1.700000 0.700000 17.570119 1.700000 0.800000 16.986577 1.700000 0.900000 16.423035 1.700000 1.000000 15.879493 1.700000 1.100000 15.355951 1.700000 1.200000 14.852409 1.700000 1.300000 14.368868 1.700000 1.400000 13.905326 1.700000 1.500000 13.461784 1.700000 1.600000 13.038242 1.700000 1.700000 12.634700 1.700000 1.800000 12.251158 1.700000 1.900000 11.887616 1.700000 2.000000 11.544075 1.700000 2.100000 11.220533 1.700000 2.200000 10.916991 1.700000 2.300000 10.633449 1.700000 2.400000 10.369907 1.700000 2.500000 10.126365 1.700000 2.600000 9.902824 1.700000 2.700000 9.699282 1.700000 2.800000 9.515740 1.700000 2.900000 9.352198 1.700000 3.000000 9.208656 1.700000 3.100000 9.085114 1.700000 3.200000 8.981573 1.700000 3.300000 8.898031 1.700000 3.400000 8.834489 1.700000 3.500000 8.790947 1.700000 3.600000 8.767405 1.700000 3.700000 8.763863 1.700000 3.800000 8.780322 1.700000 3.900000 8.816780 1.700000 4.000000 8.873238 1.700000 4.100000 8.949696 1.700000 4.200000 9.046154 1.700000 4.300000 9.162612 1.700000 4.400000 9.299070 1.700000 4.500000 9.455529 1.700000 4.600000 9.631987 1.700000 4.700000 9.828445 1.700000 4.800000 10.044903 1.700000 4.900000 10.281361 1.700000 5.000000 10.537819 1.700000 5.100000 10.814278 1.700000 5.200000 11.110736 1.700000 5.300000 11.427194 1.700000 5.400000 11.763652 1.700000 5.500000 12.120110 1.700000 5.600000 12.496568 1.700000 5.700000 12.893027 1.700000 5.800000 13.309485 1.700000 5.900000 13.745943 1.700000 6.000000 14.202401 1.700000 6.100000 14.678859 1.700000 6.200000 15.175317 1.700000 6.300000 15.691776 1.700000 6.400000 16.228234 1.700000 6.500000 16.784692 1.700000 6.600000 17.361150 1.700000 6.700000 17.957608 1.700000 6.800000 18.574066 1.700000 6.900000 19.210524 1.700000 7.000000 19.866983 1.700000 7.100000 20.543441 1.700000 7.200000 21.239899 1.700000 7.300000 21.956357 1.700000 7.400000 22.692815 1.700000 7.500000 23.449273 1.700000 7.600000 24.225732 1.700000 7.700000 25.022190 1.700000 7.800000 25.838648 1.700000 7.900000 26.675106 1.700000 8.000000 27.531564 1.700000 8.100000 28.408022 1.700000 8.200000 29.304481 1.700000 8.300000 30.220939 1.700000 8.400000 31.157397 1.700000 8.500000 32.113855 1.700000 8.600000 33.090313 1.700000 8.700000 34.086771 1.700000 8.800000 35.103230 1.700000 8.900000 36.139688 1.700000 9.000000 37.196146 1.700000 9.100000 38.272604 1.700000 9.200000 39.369062 1.700000 9.300000 40.485520 1.700000 9.400000 41.621978 1.700000 9.500000 42.778437 1.700000 9.600000 43.954895 1.700000 9.700000 45.151353 1.700000 9.800000 46.367811 1.700000 9.900000 47.604269 1.700000 10.000000 48.860727 1.700000 10.100000 50.137186 1.700000 10.200000 51.433644 1.700000 10.300000 52.750102 1.700000 10.400000 54.086560 1.700000 10.500000 55.443018 1.700000 10.600000 56.819476 1.700000 10.700000 58.215935 1.700000 10.800000 59.632393 1.700000 10.900000 61.068851 1.700000 11.000000 62.525309 1.700000 11.100000 64.001767 1.700000 11.200000 65.498225 1.700000 11.300000 67.014684 1.700000 11.400000 68.551142 1.700000 11.500000 70.107600 1.700000 11.600000 71.684058 1.700000 11.700000 73.280516 1.700000 11.800000 74.896974 1.700000 11.900000 76.533432 1.700000 12.000000 78.189891 1.700000 12.100000 79.866349 1.700000 12.200000 81.562807 1.700000 12.300000 83.279265 1.700000 12.400000 85.015723 1.700000 12.500000 86.772181 1.700000 12.600000 88.548640 1.700000 12.700000 90.345098 1.700000 12.800000 92.161556 1.700000 12.900000 93.998014 1.700000 13.000000 95.854472 1.700000 13.100000 97.730930 1.700000 13.200000 99.627389 1.700000 13.300000 101.543847 1.700000 13.400000 103.480305 1.700000 13.500000 105.436763 1.700000 13.600000 107.413221 1.700000 13.700000 109.409679 1.700000 13.800000 111.426138 1.700000 13.900000 113.462596 1.700000 14.000000 115.519054 1.700000 14.100000 117.595512 1.700000 14.200000 119.691970 1.700000 14.300000 121.808428 1.700000 14.400000 123.944886 1.700000 14.500000 126.101345 1.700000 14.600000 128.277803 1.700000 14.700000 130.474261 1.700000 14.800000 132.690719 1.700000 14.900000 134.927177 1.700000 15.000000 137.183635 1.800000 -5.000000 80.985341 1.800000 -4.900000 79.284587 1.800000 -4.800000 77.603834 1.800000 -4.700000 75.943080 1.800000 -4.600000 74.302326 1.800000 -4.500000 72.681572 1.800000 -4.400000 71.080819 1.800000 -4.300000 69.500065 1.800000 -4.200000 67.939311 1.800000 -4.100000 66.398557 1.800000 -4.000000 64.877803 1.800000 -3.900000 63.377050 1.800000 -3.800000 61.896296 1.800000 -3.700000 60.435542 1.800000 -3.600000 58.994788 1.800000 -3.500000 57.574035 1.800000 -3.400000 56.173281 1.800000 -3.300000 54.792527 1.800000 -3.200000 53.431773 1.800000 -3.100000 52.091020 1.800000 -3.000000 50.770266 1.800000 -2.900000 49.469512 1.800000 -2.800000 48.188758 1.800000 -2.700000 46.928005 1.800000 -2.600000 45.687251 1.800000 -2.500000 44.466497 1.800000 -2.400000 43.265743 1.800000 -2.300000 42.084989 1.800000 -2.200000 40.924236 1.800000 -2.100000 39.783482 1.800000 -2.000000 38.662728 1.800000 -1.900000 37.561974 1.800000 -1.800000 36.481221 1.800000 -1.700000 35.420467 1.800000 -1.600000 34.379713 1.800000 -1.500000 33.358959 1.800000 -1.400000 32.358206 1.800000 -1.300000 31.377452 1.800000 -1.200000 30.416698 1.800000 -1.100000 29.475944 1.800000 -1.000000 28.555190 1.800000 -0.900000 27.654437 1.800000 -0.800000 26.773683 1.800000 -0.700000 25.912929 1.800000 -0.600000 25.072175 1.800000 -0.500000 24.251422 1.800000 -0.400000 23.450668 1.800000 -0.300000 22.669914 1.800000 -0.200000 21.909160 1.800000 -0.100000 21.168407 1.800000 -0.000000 20.447653 1.800000 0.100000 19.746899 1.800000 0.200000 19.066145 1.800000 0.300000 18.405392 1.800000 0.400000 17.764638 1.800000 0.500000 17.143884 1.800000 0.600000 16.543130 1.800000 0.700000 15.962376 1.800000 0.800000 15.401623 1.800000 0.900000 14.860869 1.800000 1.000000 14.340115 1.800000 1.100000 13.839361 1.800000 1.200000 13.358608 1.800000 1.300000 12.897854 1.800000 1.400000 12.457100 1.800000 1.500000 12.036346 1.800000 1.600000 11.635593 1.800000 1.700000 11.254839 1.800000 1.800000 10.894085 1.800000 1.900000 10.553331 1.800000 2.000000 10.232577 1.800000 2.100000 9.931824 1.800000 2.200000 9.651070 1.800000 2.300000 9.390316 1.800000 2.400000 9.149562 1.800000 2.500000 8.928809 1.800000 2.600000 8.728055 1.800000 2.700000 8.547301 1.800000 2.800000 8.386547 1.800000 2.900000 8.245794 1.800000 3.000000 8.125040 1.800000 3.100000 8.024286 1.800000 3.200000 7.943532 1.800000 3.300000 7.882779 1.800000 3.400000 7.842025 1.800000 3.500000 7.821271 1.800000 3.600000 7.820517 1.800000 3.700000 7.839763 1.800000 3.800000 7.879010 1.800000 3.900000 7.938256 1.800000 4.000000 8.017502 1.800000 4.100000 8.116748 1.800000 4.200000 8.235995 1.800000 4.300000 8.375241 1.800000 4.400000 8.534487 1.800000 4.500000 8.713733 1.800000 4.600000 8.912980 1.800000 4.700000 9.132226 1.800000 4.800000 9.371472 1.800000 4.900000 9.630718 1.800000 5.000000 9.909964 1.800000 5.100000 10.209211 1.800000 5.200000 10.528457 1.800000 5.300000 10.867703 1.800000 5.400000 11.226949 1.800000 5.500000 11.606196 1.800000 5.600000 12.005442 1.800000 5.700000 12.424688 1.800000 5.800000 12.863934 1.800000 5.900000 13.323181 1.800000 6.000000 13.802427 1.800000 6.100000 14.301673 1.800000 6.200000 14.820919 1.800000 6.300000 15.360166 1.800000 6.400000 15.919412 1.800000 6.500000 16.498658 1.800000 6.600000 17.097904 1.800000 6.700000 17.717150 1.800000 6.800000 18.356397 1.800000 6.900000 19.015643 1.800000 7.000000 19.694889 1.800000 7.100000 20.394135 1.800000 7.200000 21.113382 1.800000 7.300000 21.852628 1.800000 7.400000 22.611874 1.800000 7.500000 23.391120 1.800000 7.600000 24.190367 1.800000 7.700000 25.009613 1.800000 7.800000 25.848859 1.800000 7.900000 26.708105 1.800000 8.000000 27.587351 1.800000 8.100000 28.486598 1.800000 8.200000 29.405844 1.800000 8.300000 30.345090 1.800000 8.400000 31.304336 1.800000 8.500000 32.283583 1.800000 8.600000 33.282829 1.800000 8.700000 34.302075 1.800000 8.800000 35.341321 1.800000 8.900000 36.400568 1.800000 9.000000 37.479814 1.800000 9.100000 38.579060 1.800000 9.200000 39.698306 1.800000 9.300000 40.837553 1.800000 9.400000 41.996799 1.800000 9.500000 43.176045 1.800000 9.600000 44.375291 1.800000 9.700000 45.594537 1.800000 9.800000 46.833784 1.800000 9.900000 48.093030 1.800000 10.000000 49.372276 1.800000 10.100000 50.671522 1.800000 10.200000 51.990769 1.800000 10.300000 53.330015 1.800000 10.400000 54.689261 1.800000 10.500000 56.068507 1.800000 10.600000 57.467754 1.800000 10.700000 58.887000 1.800000 10.800000 60.326246 1.800000 10.900000 61.785492 1.800000 11.000000 63.264738 1.800000 11.100000 64.763985 1.800000 11.200000 66.283231 1.800000 11.300000 67.822477 1.800000 11.400000 69.381723 1.800000 11.500000 70.960970 1.800000 11.600000 72.560216 1.800000 11.700000 74.179462 1.800000 11.800000 75.818708 1.800000 11.900000 77.477955 1.800000 12.000000 79.157201 1.800000 12.100000 80.856447 1.800000 12.200000 82.575693 1.800000 12.300000 84.314940 1.800000 12.400000 86.074186 1.800000 12.500000 87.853432 1.800000 12.600000 89.652678 1.800000 12.700000 91.471924 1.800000 12.800000 93.311171 1.800000 12.900000 95.170417 1.800000 13.000000 97.049663 1.800000 13.100000 98.948909 1.800000 13.200000 100.868156 1.800000 13.300000 102.807402 1.800000 13.400000 104.766648 1.800000 13.500000 106.745894 1.800000 13.600000 108.745141 1.800000 13.700000 110.764387 1.800000 13.800000 112.803633 1.800000 13.900000 114.862879 1.800000 14.000000 116.942125 1.800000 14.100000 119.041372 1.800000 14.200000 121.160618 1.800000 14.300000 123.299864 1.800000 14.400000 125.459110 1.800000 14.500000 127.638357 1.800000 14.600000 129.837603 1.800000 14.700000 132.056849 1.800000 14.800000 134.296095 1.800000 14.900000 136.555342 1.800000 15.000000 138.834588 1.900000 -5.000000 78.170060 1.900000 -4.900000 76.491578 1.900000 -4.800000 74.833095 1.900000 -4.700000 73.194613 1.900000 -4.600000 71.576131 1.900000 -4.500000 69.977648 1.900000 -4.400000 68.399166 1.900000 -4.300000 66.840683 1.900000 -4.200000 65.302201 1.900000 -4.100000 63.783718 1.900000 -4.000000 62.285236 1.900000 -3.900000 60.806753 1.900000 -3.800000 59.348271 1.900000 -3.700000 57.909789 1.900000 -3.600000 56.491306 1.900000 -3.500000 55.092824 1.900000 -3.400000 53.714341 1.900000 -3.300000 52.355859 1.900000 -3.200000 51.017376 1.900000 -3.100000 49.698894 1.900000 -3.000000 48.400412 1.900000 -2.900000 47.121929 1.900000 -2.800000 45.863447 1.900000 -2.700000 44.624964 1.900000 -2.600000 43.406482 1.900000 -2.500000 42.207999 1.900000 -2.400000 41.029517 1.900000 -2.300000 39.871035 1.900000 -2.200000 38.732552 1.900000 -2.100000 37.614070 1.900000 -2.000000 36.515587 1.900000 -1.900000 35.437105 1.900000 -1.800000 34.378622 1.900000 -1.700000 33.340140 1.900000 -1.600000 32.321658 1.900000 -1.500000 31.323175 1.900000 -1.400000 30.344693 1.900000 -1.300000 29.386210 1.900000 -1.200000 28.447728 1.900000 -1.100000 27.529245 1.900000 -1.000000 26.630763 1.900000 -0.900000 25.752281 1.900000 -0.800000 24.893798 1.900000 -0.700000 24.055316 1.900000 -0.600000 23.236833 1.900000 -0.500000 22.438351 1.900000 -0.400000 21.659868 1.900000 -0.300000 20.901386 1.900000 -0.200000 20.162904 1.900000 -0.100000 19.444421 1.900000 -0.000000 18.745939 1.900000 0.100000 18.067456 1.900000 0.200000 17.408974 1.900000 0.300000 16.770491 1.900000 0.400000 16.152009 1.900000 0.500000 15.553526 1.900000 0.600000 14.975044 1.900000 0.700000 14.416562 1.900000 0.800000 13.878079 1.900000 0.900000 13.359597 1.900000 1.000000 12.861114 1.900000 1.100000 12.382632 1.900000 1.200000 11.924149 1.900000 1.300000 11.485667 1.900000 1.400000 11.067185 1.900000 1.500000 10.668702 1.900000 1.600000 10.290220 1.900000 1.700000 9.931737 1.900000 1.800000 9.593255 1.900000 1.900000 9.274772 1.900000 2.000000 8.976290 1.900000 2.100000 8.697808 1.900000 2.200000 8.439325 1.900000 2.300000 8.200843 1.900000 2.400000 7.982360 1.900000 2.500000 7.783878 1.900000 2.600000 7.605395 1.900000 2.700000 7.446913 1.900000 2.800000 7.308431 1.900000 2.900000 7.189948 1.900000 3.000000 7.091466 1.900000 3.100000 7.012983 1.900000 3.200000 6.954501 1.900000 3.300000 6.916018 1.900000 3.400000 6.897536 1.900000 3.500000 6.899054 1.900000 3.600000 6.920571 1.900000 3.700000 6.962089 1.900000 3.800000 7.023606 1.900000 3.900000 7.105124 1.900000 4.000000 7.206641 1.900000 4.100000 7.328159 1.900000 4.200000 7.469676 1.900000 4.300000 7.631194 1.900000 4.400000 7.812712 1.900000 4.500000 8.014229 1.900000 4.600000 8.235747 1.900000 4.700000 8.477264 1.900000 4.800000 8.738782 1.900000 4.900000 9.020299 1.900000 5.000000 9.321817 1.900000 5.100000 9.643335 1.900000 5.200000 9.984852 1.900000 5.300000 10.346370 1.900000 5.400000 10.727887 1.900000 5.500000 11.129405 1.900000 5.600000 11.550922 1.900000 5.700000 11.992440 1.900000 5.800000 12.453958 1.900000 5.900000 12.935475 1.900000 6.000000 13.436993 1.900000 6.100000 13.958510 1.900000 6.200000 14.500028 1.900000 6.300000 15.061545 1.900000 6.400000 15.643063 1.900000 6.500000 16.244581 1.900000 6.600000 16.866098 1.900000 6.700000 17.507616 1.900000 6.800000 18.169133 1.900000 6.900000 18.850651 1.900000 7.000000 19.552168 1.900000 7.100000 20.273686 1.900000 7.200000 21.015204 1.900000 7.300000 21.776721 1.900000 7.400000 22.558239 1.900000 7.500000 23.359756 1.900000 7.600000 24.181274 1.900000 7.700000 25.022791 1.900000 7.800000 25.884309 1.900000 7.900000 26.765827 1.900000 8.000000 27.667344 1.900000 8.100000 28.588862 1.900000 8.200000 29.530379 1.900000 8.300000 30.491897 1.900000 8.400000 31.473414 1.900000 8.500000 32.474932 1.900000 8.600000 33.496449 1.900000 8.700000 34.537967 1.900000 8.800000 35.599485 1.900000 8.900000 36.681002 1.900000 9.000000 37.782520 1.900000 9.100000 38.904037 1.900000 9.200000 40.045555 1.900000 9.300000 41.207072 1.900000 9.400000 42.388590 1.900000 9.500000 43.590108 1.900000 9.600000 44.811625 1.900000 9.700000 46.053143 1.900000 9.800000 47.314660 1.900000 9.900000 48.596178 1.900000 10.000000 49.897695 1.900000 10.100000 51.219213 1.900000 10.200000 52.560731 1.900000 10.300000 53.922248 1.900000 10.400000 55.303766 1.900000 10.500000 56.705283 1.900000 10.600000 58.126801 1.900000 10.700000 59.568318 1.900000 10.800000 61.029836 1.900000 10.900000 62.511354 1.900000 11.000000 64.012871 1.900000 11.100000 65.534389 1.900000 11.200000 67.075906 1.900000 11.300000 68.637424 1.900000 11.400000 70.218941 1.900000 11.500000 71.820459 1.900000 11.600000 73.441977 1.900000 11.700000 75.083494 1.900000 11.800000 76.745012 1.900000 11.900000 78.426529 1.900000 12.000000 80.128047 1.900000 12.100000 81.849564 1.900000 12.200000 83.591082 1.900000 12.300000 85.352600 1.900000 12.400000 87.134117 1.900000 12.500000 88.935635 1.900000 12.600000 90.757152 1.900000 12.700000 92.598670 1.900000 12.800000 94.460187 1.900000 12.900000 96.341705 1.900000 13.000000 98.243222 1.900000 13.100000 100.164740 1.900000 13.200000 102.106258 1.900000 13.300000 104.067775 1.900000 13.400000 106.049293 1.900000 13.500000 108.050810 1.900000 13.600000 110.072328 1.900000 13.700000 112.113845 1.900000 13.800000 114.175363 1.900000 13.900000 116.256881 1.900000 14.000000 118.358398 1.900000 14.100000 120.479916 1.900000 14.200000 122.621433 1.900000 14.300000 124.782951 1.900000 14.400000 126.964468 1.900000 14.500000 129.165986 1.900000 14.600000 131.387504 1.900000 14.700000 133.629021 1.900000 14.800000 135.890539 1.900000 14.900000 138.172056 1.900000 15.000000 140.473574 2.000000 -5.000000 75.453653 2.000000 -4.900000 73.796925 2.000000 -4.800000 72.160197 2.000000 -4.700000 70.543470 2.000000 -4.600000 68.946742 2.000000 -4.500000 67.370014 2.000000 -4.400000 65.813286 2.000000 -4.300000 64.276558 2.000000 -4.200000 62.759830 2.000000 -4.100000 61.263103 2.000000 -4.000000 59.786375 2.000000 -3.900000 58.329647 2.000000 -3.800000 56.892919 2.000000 -3.700000 55.476191 2.000000 -3.600000 54.079463 2.000000 -3.500000 52.702736 2.000000 -3.400000 51.346008 2.000000 -3.300000 50.009280 2.000000 -3.200000 48.692552 2.000000 -3.100000 47.395824 2.000000 -3.000000 46.119096 2.000000 -2.900000 44.862369 2.000000 -2.800000 43.625641 2.000000 -2.700000 42.408913 2.000000 -2.600000 41.212185 2.000000 -2.500000 40.035457 2.000000 -2.400000 38.878729 2.000000 -2.300000 37.742002 2.000000 -2.200000 36.625274 2.000000 -2.100000 35.528546 2.000000 -2.000000 34.451818 2.000000 -1.900000 33.395090 2.000000 -1.800000 32.358362 2.000000 -1.700000 31.341635 2.000000 -1.600000 30.344907 2.000000 -1.500000 29.368179 2.000000 -1.400000 28.411451 2.000000 -1.300000 27.474723 2.000000 -1.200000 26.557995 2.000000 -1.100000 25.661268 2.000000 -1.000000 24.784540 2.000000 -0.900000 23.927812 2.000000 -0.800000 23.091084 2.000000 -0.700000 22.274356 2.000000 -0.600000 21.477628 2.000000 -0.500000 20.700901 2.000000 -0.400000 19.944173 2.000000 -0.300000 19.207445 2.000000 -0.200000 18.490717 2.000000 -0.100000 17.793989 2.000000 -0.000000 17.117261 2.000000 0.100000 16.460534 2.000000 0.200000 15.823806 2.000000 0.300000 15.207078 2.000000 0.400000 14.610350 2.000000 0.500000 14.033622 2.000000 0.600000 13.476894 2.000000 0.700000 12.940167 2.000000 0.800000 12.423439 2.000000 0.900000 11.926711 2.000000 1.000000 11.449983 2.000000 1.100000 10.993255 2.000000 1.200000 10.556527 2.000000 1.300000 10.139799 2.000000 1.400000 9.743072 2.000000 1.500000 9.366344 2.000000 1.600000 9.009616 2.000000 1.700000 8.672888 2.000000 1.800000 8.356160 2.000000 1.900000 8.059432 2.000000 2.000000 7.782705 2.000000 2.100000 7.525977 2.000000 2.200000 7.289249 2.000000 2.300000 7.072521 2.000000 2.400000 6.875793 2.000000 2.500000 6.699065 2.000000 2.600000 6.542338 2.000000 2.700000 6.405610 2.000000 2.800000 6.288882 2.000000 2.900000 6.192154 2.000000 3.000000 6.115426 2.000000 3.100000 6.058698 2.000000 3.200000 6.021971 2.000000 3.300000 6.005243 2.000000 3.400000 6.008515 2.000000 3.500000 6.031787 2.000000 3.600000 6.075059 2.000000 3.700000 6.138331 2.000000 3.800000 6.221604 2.000000 3.900000 6.324876 2.000000 4.000000 6.448148 2.000000 4.100000 6.591420 2.000000 4.200000 6.754692 2.000000 4.300000 6.937964 2.000000 4.400000 7.141237 2.000000 4.500000 7.364509 2.000000 4.600000 7.607781 2.000000 4.700000 7.871053 2.000000 4.800000 8.154325 2.000000 4.900000 8.457597 2.000000 5.000000 8.780870 2.000000 5.100000 9.124142 2.000000 5.200000 9.487414 2.000000 5.300000 9.870686 2.000000 5.400000 10.273958 2.000000 5.500000 10.697230 2.000000 5.600000 11.140503 2.000000 5.700000 11.603775 2.000000 5.800000 12.087047 2.000000 5.900000 12.590319 2.000000 6.000000 13.113591 2.000000 6.100000 13.656863 2.000000 6.200000 14.220136 2.000000 6.300000 14.803408 2.000000 6.400000 15.406680 2.000000 6.500000 16.029952 2.000000 6.600000 16.673224 2.000000 6.700000 17.336496 2.000000 6.800000 18.019769 2.000000 6.900000 18.723041 2.000000 7.000000 19.446313 2.000000 7.100000 20.189585 2.000000 7.200000 20.952857 2.000000 7.300000 21.736129 2.000000 7.400000 22.539402 2.000000 7.500000 23.362674 2.000000 7.600000 24.205946 2.000000 7.700000 25.069218 2.000000 7.800000 25.952490 2.000000 7.900000 26.855762 2.000000 8.000000 27.779035 2.000000 8.100000 28.722307 2.000000 8.200000 29.685579 2.000000 8.300000 30.668851 2.000000 8.400000 31.672123 2.000000 8.500000 32.695395 2.000000 8.600000 33.738668 2.000000 8.700000 34.801940 2.000000 8.800000 35.885212 2.000000 8.900000 36.988484 2.000000 9.000000 38.111756 2.000000 9.100000 39.255028 2.000000 9.200000 40.418301 2.000000 9.300000 41.601573 2.000000 9.400000 42.804845 2.000000 9.500000 44.028117 2.000000 9.600000 45.271389 2.000000 9.700000 46.534661 2.000000 9.800000 47.817934 2.000000 9.900000 49.121206 2.000000 10.000000 50.444478 2.000000 10.100000 51.787750 2.000000 10.200000 53.151022 2.000000 10.300000 54.534294 2.000000 10.400000 55.937567 2.000000 10.500000 57.360839 2.000000 10.600000 58.804111 2.000000 10.700000 60.267383 2.000000 10.800000 61.750655 2.000000 10.900000 63.253927 2.000000 11.000000 64.777200 2.000000 11.100000 66.320472 2.000000 11.200000 67.883744 2.000000 11.300000 69.467016 2.000000 11.400000 71.070288 2.000000 11.500000 72.693560 2.000000 11.600000 74.336832 2.000000 11.700000 76.000105 2.000000 11.800000 77.683377 2.000000 11.900000 79.386649 2.000000 12.000000 81.109921 2.000000 12.100000 82.853193 2.000000 12.200000 84.616465 2.000000 12.300000 86.399738 2.000000 12.400000 88.203010 2.000000 12.500000 90.026282 2.000000 12.600000 91.869554 2.000000 12.700000 93.732826 2.000000 12.800000 95.616098 2.000000 12.900000 97.519371 2.000000 13.000000 99.442643 2.000000 13.100000 101.385915 2.000000 13.200000 103.349187 2.000000 13.300000 105.332459 2.000000 13.400000 107.335731 2.000000 13.500000 109.359004 2.000000 13.600000 111.402276 2.000000 13.700000 113.465548 2.000000 13.800000 115.548820 2.000000 13.900000 117.652092 2.000000 14.000000 119.775364 2.000000 14.100000 121.918637 2.000000 14.200000 124.081909 2.000000 14.300000 126.265181 2.000000 14.400000 128.468453 2.000000 14.500000 130.691725 2.000000 14.600000 132.934997 2.000000 14.700000 135.198270 2.000000 14.800000 137.481542 2.000000 14.900000 139.784814 2.000000 15.000000 142.108086 2.100000 -5.000000 72.843342 2.100000 -4.900000 71.207852 2.100000 -4.800000 69.592362 2.100000 -4.700000 67.996872 2.100000 -4.600000 66.421382 2.100000 -4.500000 64.865892 2.100000 -4.400000 63.330403 2.100000 -4.300000 61.814913 2.100000 -4.200000 60.319423 2.100000 -4.100000 58.843933 2.100000 -4.000000 57.388443 2.100000 -3.900000 55.952953 2.100000 -3.800000 54.537463 2.100000 -3.700000 53.141973 2.100000 -3.600000 51.766483 2.100000 -3.500000 50.410993 2.100000 -3.400000 49.075503 2.100000 -3.300000 47.760013 2.100000 -3.200000 46.464523 2.100000 -3.100000 45.189033 2.100000 -3.000000 43.933543 2.100000 -2.900000 42.698053 2.100000 -2.800000 41.482563 2.100000 -2.700000 40.287073 2.100000 -2.600000 39.111583 2.100000 -2.500000 37.956093 2.100000 -2.400000 36.820603 2.100000 -2.300000 35.705113 2.100000 -2.200000 34.609623 2.100000 -2.100000 33.534133 2.100000 -2.000000 32.478643 2.100000 -1.900000 31.443153 2.100000 -1.800000 30.427663 2.100000 -1.700000 29.432173 2.100000 -1.600000 28.456683 2.100000 -1.500000 27.501193 2.100000 -1.400000 26.565703 2.100000 -1.300000 25.650213 2.100000 -1.200000 24.754723 2.100000 -1.100000 23.879233 2.100000 -1.000000 23.023743 2.100000 -0.900000 22.188253 2.100000 -0.800000 21.372763 2.100000 -0.700000 20.577273 2.100000 -0.600000 19.801783 2.100000 -0.500000 19.046293 2.100000 -0.400000 18.310803 2.100000 -0.300000 17.595313 2.100000 -0.200000 16.899824 2.100000 -0.100000 16.224334 2.100000 -0.000000 15.568844 2.100000 0.100000 14.933354 2.100000 0.200000 14.317864 2.100000 0.300000 13.722374 2.100000 0.400000 13.146884 2.100000 0.500000 12.591394 2.100000 0.600000 12.055904 2.100000 0.700000 11.540414 2.100000 0.800000 11.044924 2.100000 0.900000 10.569434 2.100000 1.000000 10.113944 2.100000 1.100000 9.678454 2.100000 1.200000 9.262964 2.100000 1.300000 8.867474 2.100000 1.400000 8.491984 2.100000 1.500000 8.136494 2.100000 1.600000 7.801004 2.100000 1.700000 7.485514 2.100000 1.800000 7.190024 2.100000 1.900000 6.914534 2.100000 2.000000 6.659044 2.100000 2.100000 6.423554 2.100000 2.200000 6.208064 2.100000 2.300000 6.012574 2.100000 2.400000 5.837084 2.100000 2.500000 5.681594 2.100000 2.600000 5.546104 2.100000 2.700000 5.430614 2.100000 2.800000 5.335124 2.100000 2.900000 5.259634 2.100000 3.000000 5.204144 2.100000 3.100000 5.168654 2.100000 3.200000 5.153164 2.100000 3.300000 5.157674 2.100000 3.400000 5.182184 2.100000 3.500000 5.226694 2.100000 3.600000 5.291204 2.100000 3.700000 5.375714 2.100000 3.800000 5.480224 2.100000 3.900000 5.604735 2.100000 4.000000 5.749245 2.100000 4.100000 5.913755 2.100000 4.200000 6.098265 2.100000 4.300000 6.302775 2.100000 4.400000 6.527285 2.100000 4.500000 6.771795 2.100000 4.600000 7.036305 2.100000 4.700000 7.320815 2.100000 4.800000 7.625325 2.100000 4.900000 7.949835 2.100000 5.000000 8.294345 2.100000 5.100000 8.658855 2.100000 5.200000 9.043365 2.100000 5.300000 9.447875 2.100000 5.400000 9.872385 2.100000 5.500000 10.316895 2.100000 5.600000 10.781405 2.100000 5.700000 11.265915 2.100000 5.800000 11.770425 2.100000 5.900000 12.294935 2.100000 6.000000 12.839445 2.100000 6.100000 13.403955 2.100000 6.200000 13.988465 2.100000 6.300000 14.592975 2.100000 6.400000 15.217485 2.100000 6.500000 15.861995 2.100000 6.600000 16.526505 2.100000 6.700000 17.211015 2.100000 6.800000 17.915525 2.100000 6.900000 18.640035 2.100000 7.000000 19.384545 2.100000 7.100000 20.149055 2.100000 7.200000 20.933565 2.100000 7.300000 21.738075 2.100000 7.400000 22.562585 2.100000 7.500000 23.407095 2.100000 7.600000 24.271605 2.100000 7.700000 25.156115 2.100000 7.800000 26.060625 2.100000 7.900000 26.985135 2.100000 8.000000 27.929645 2.100000 8.100000 28.894156 2.100000 8.200000 29.878666 2.100000 8.300000 30.883176 2.100000 8.400000 31.907686 2.100000 8.500000 32.952196 2.100000 8.600000 34.016706 2.100000 8.700000 35.101216 2.100000 8.800000 36.205726 2.100000 8.900000 37.330236 2.100000 9.000000 38.474746 2.100000 9.100000 39.639256 2.100000 9.200000 40.823766 2.100000 9.300000 42.028276 2.100000 9.400000 43.252786 2.100000 9.500000 44.497296 2.100000 9.600000 45.761806 2.100000 9.700000 47.046316 2.100000 9.800000 48.350826 2.100000 9.900000 49.675336 2.100000 10.000000 51.019846 2.100000 10.100000 52.384356 2.100000 10.200000 53.768866 2.100000 10.300000 55.173376 2.100000 10.400000 56.597886 2.100000 10.500000 58.042396 2.100000 10.600000 59.506906 2.100000 10.700000 60.991416 2.100000 10.800000 62.495926 2.100000 10.900000 64.020436 2.100000 11.000000 65.564946 2.100000 11.100000 67.129456 2.100000 11.200000 68.713966 2.100000 11.300000 70.318476 2.100000 11.400000 71.942986 2.100000 11.500000 73.587496 2.100000 11.600000 75.252006 2.100000 11.700000 76.936516 2.100000 11.800000 78.641026 2.100000 11.900000 80.365536 2.100000 12.000000 82.110046 2.100000 12.100000 83.874556 2.100000 12.200000 85.659066 2.100000 12.300000 87.463577 2.100000 12.400000 89.288087 2.100000 12.500000 91.132597 2.100000 12.600000 92.997107 2.100000 12.700000 94.881617 2.100000 12.800000 96.786127 2.100000 12.900000 98.710637 2.100000 13.000000 100.655147 2.100000 13.100000 102.619657 2.100000 13.200000 104.604167 2.100000 13.300000 106.608677 2.100000 13.400000 108.633187 2.100000 13.500000 110.677697 2.100000 13.600000 112.742207 2.100000 13.700000 114.826717 2.100000 13.800000 116.931227 2.100000 13.900000 119.055737 2.100000 14.000000 121.200247 2.100000 14.100000 123.364757 2.100000 14.200000 125.549267 2.100000 14.300000 127.753777 2.100000 14.400000 129.978287 2.100000 14.500000 132.222797 2.100000 14.600000 134.487307 2.100000 14.700000 136.771817 2.100000 14.800000 139.076327 2.100000 14.900000 141.400837 2.100000 15.000000 143.745347 2.200000 -5.000000 70.345992 2.200000 -4.900000 68.731223 2.200000 -4.800000 67.136454 2.200000 -4.700000 65.561685 2.200000 -4.600000 64.006916 2.200000 -4.500000 62.472148 2.200000 -4.400000 60.957379 2.200000 -4.300000 59.462610 2.200000 -4.200000 57.987841 2.200000 -4.100000 56.533072 2.200000 -4.000000 55.098303 2.200000 -3.900000 53.683534 2.200000 -3.800000 52.288766 2.200000 -3.700000 50.913997 2.200000 -3.600000 49.559228 2.200000 -3.500000 48.224459 2.200000 -3.400000 46.909690 2.200000 -3.300000 45.614921 2.200000 -3.200000 44.340152 2.200000 -3.100000 43.085384 2.200000 -3.000000 41.850615 2.200000 -2.900000 40.635846 2.200000 -2.800000 39.441077 2.200000 -2.700000 38.266308 2.200000 -2.600000 37.111539 2.200000 -2.500000 35.976770 2.200000 -2.400000 34.862002 2.200000 -2.300000 33.767233 2.200000 -2.200000 32.692464 2.200000 -2.100000 31.637695 2.200000 -2.000000 30.602926 2.200000 -1.900000 29.588157 2.200000 -1.800000 28.593388 2.200000 -1.700000 27.618620 2.200000 -1.600000 26.663851 2.200000 -1.500000 25.729082 2.200000 -1.400000 24.814313 2.200000 -1.300000 23.919544 2.200000 -1.200000 23.044775 2.200000 -1.100000 22.190006 2.200000 -1.000000 21.355238 2.200000 -0.900000 20.540469 2.200000 -0.800000 19.745700 2.200000 -0.700000 18.970931 2.200000 -0.600000 18.216162 2.200000 -0.500000 17.481393 2.200000 -0.400000 16.766624 2.200000 -0.300000 16.071856 2.200000 -0.200000 15.397087 2.200000 -0.100000 14.742318 2.200000 -0.000000 14.107549 2.200000 0.100000 13.492780 2.200000 0.200000 12.898011 2.200000 0.300000 12.323242 2.200000 0.400000 11.768474 2.200000 0.500000 11.233705 2.200000 0.600000 10.718936 2.200000 0.700000 10.224167 2.200000 0.800000 9.749398 2.200000 0.900000 9.294629 2.200000 1.000000 8.859860 2.200000 1.100000 8.445092 2.200000 1.200000 8.050323 2.200000 1.300000 7.675554 2.200000 1.400000 7.320785 2.200000 1.500000 6.986016 2.200000 1.600000 6.671247 2.200000 1.700000 6.376479 2.200000 1.800000 6.101710 2.200000 1.900000 5.846941 2.200000 2.000000 5.612172 2.200000 2.100000 5.397403 2.200000 2.200000 5.202634 2.200000 2.300000 5.027865 2.200000 2.400000 4.873097 2.200000 2.500000 4.738328 2.200000 2.600000 4.623559 2.200000 2.700000 4.528790 2.200000 2.800000 4.454021 2.200000 2.900000 4.399252 2.200000 3.000000 4.364483 2.200000 3.100000 4.349715 2.200000 3.200000 4.354946 2.200000 3.300000 4.380177 2.200000 3.400000 4.425408 2.200000 3.500000 4.490639 2.200000 3.600000 4.575870 2.200000 3.700000 4.681101 2.200000 3.800000 4.806333 2.200000 3.900000 4.951564 2.200000 4.000000 5.116795 2.200000 4.100000 5.302026 2.200000 4.200000 5.507257 2.200000 4.300000 5.732488 2.200000 4.400000 5.977719 2.200000 4.500000 6.242951 2.200000 4.600000 6.528182 2.200000 4.700000 6.833413 2.200000 4.800000 7.158644 2.200000 4.900000 7.503875 2.200000 5.000000 7.869106 2.200000 5.100000 8.254337 2.200000 5.200000 8.659569 2.200000 5.300000 9.084800 2.200000 5.400000 9.530031 2.200000 5.500000 9.995262 2.200000 5.600000 10.480493 2.200000 5.700000 10.985724 2.200000 5.800000 11.510955 2.200000 5.900000 12.056187 2.200000 6.000000 12.621418 2.200000 6.100000 13.206649 2.200000 6.200000 13.811880 2.200000 6.300000 14.437111 2.200000 6.400000 15.082342 2.200000 6.500000 15.747573 2.200000 6.600000 16.432805 2.200000 6.700000 17.138036 2.200000 6.800000 17.863267 2.200000 6.900000 18.608498 2.200000 7.000000 19.373729 2.200000 7.100000 20.158960 2.200000 7.200000 20.964191 2.200000 7.300000 21.789423 2.200000 7.400000 22.634654 2.200000 7.500000 23.499885 2.200000 7.600000 24.385116 2.200000 7.700000 25.290347 2.200000 7.800000 26.215578 2.200000 7.900000 27.160809 2.200000 8.000000 28.126041 2.200000 8.100000 29.111272 2.200000 8.200000 30.116503 2.200000 8.300000 31.141734 2.200000 8.400000 32.186965 2.200000 8.500000 33.252196 2.200000 8.600000 34.337427 2.200000 8.700000 35.442659 2.200000 8.800000 36.567890 2.200000 8.900000 37.713121 2.200000 9.000000 38.878352 2.200000 9.100000 40.063583 2.200000 9.200000 41.268814 2.200000 9.300000 42.494046 2.200000 9.400000 43.739277 2.200000 9.500000 45.004508 2.200000 9.600000 46.289739 2.200000 9.700000 47.594970 2.200000 9.800000 48.920201 2.200000 9.900000 50.265432 2.200000 10.000000 51.630664 2.200000 10.100000 53.015895 2.200000 10.200000 54.421126 2.200000 10.300000 55.846357 2.200000 10.400000 57.291588 2.200000 10.500000 58.756819 2.200000 10.600000 60.242050 2.200000 10.700000 61.747282 2.200000 10.800000 63.272513 2.200000 10.900000 64.817744 2.200000 11.000000 66.382975 2.200000 11.100000 67.968206 2.200000 11.200000 69.573437 2.200000 11.300000 71.198668 2.200000 11.400000 72.843900 2.200000 11.500000 74.509131 2.200000 11.600000 76.194362 2.200000 11.700000 77.899593 2.200000 11.800000 79.624824 2.200000 11.900000 81.370055 2.200000 12.000000 83.135286 2.200000 12.100000 84.920518 2.200000 12.200000 86.725749 2.200000 12.300000 88.550980 2.200000 12.400000 90.396211 2.200000 12.500000 92.261442 2.200000 12.600000 94.146673 2.200000 12.700000 96.051904 2.200000 12.800000 97.977136 2.200000 12.900000 99.922367 2.200000 13.000000 101.887598 2.200000 13.100000 103.872829 2.200000 13.200000 105.878060 2.200000 13.300000 107.903291 2.200000 13.400000 109.948522 2.200000 13.500000 112.013754 2.200000 13.600000 114.098985 2.200000 13.700000 116.204216 2.200000 13.800000 118.329447 2.200000 13.900000 120.474678 2.200000 14.000000 122.639909 2.200000 14.100000 124.825140 2.200000 14.200000 127.030372 2.200000 14.300000 129.255603 2.200000 14.400000 131.500834 2.200000 14.500000 133.766065 2.200000 14.600000 136.051296 2.200000 14.700000 138.356527 2.200000 14.800000 140.681758 2.200000 14.900000 143.026990 2.200000 15.000000 145.392221 2.300000 -5.000000 67.968021 2.300000 -4.900000 66.373457 2.300000 -4.800000 64.798892 2.300000 -4.700000 63.244328 2.300000 -4.600000 61.709763 2.300000 -4.500000 60.195199 2.300000 -4.400000 58.700634 2.300000 -4.300000 57.226070 2.300000 -4.200000 55.771505 2.300000 -4.100000 54.336941 2.300000 -4.000000 52.922377 2.300000 -3.900000 51.527812 2.300000 -3.800000 50.153248 2.300000 -3.700000 48.798683 2.300000 -3.600000 47.464119 2.300000 -3.500000 46.149554 2.300000 -3.400000 44.854990 2.300000 -3.300000 43.580425 2.300000 -3.200000 42.325861 2.300000 -3.100000 41.091296 2.300000 -3.000000 39.876732 2.300000 -2.900000 38.682167 2.300000 -2.800000 37.507603 2.300000 -2.700000 36.353038 2.300000 -2.600000 35.218474 2.300000 -2.500000 34.103909 2.300000 -2.400000 33.009345 2.300000 -2.300000 31.934780 2.300000 -2.200000 30.880216 2.300000 -2.100000 29.845652 2.300000 -2.000000 28.831087 2.300000 -1.900000 27.836523 2.300000 -1.800000 26.861958 2.300000 -1.700000 25.907394 2.300000 -1.600000 24.972829 2.300000 -1.500000 24.058265 2.300000 -1.400000 23.163700 2.300000 -1.300000 22.289136 2.300000 -1.200000 21.434571 2.300000 -1.100000 20.600007 2.300000 -1.000000 19.785442 2.300000 -0.900000 18.990878 2.300000 -0.800000 18.216313 2.300000 -0.700000 17.461749 2.300000 -0.600000 16.727184 2.300000 -0.500000 16.012620 2.300000 -0.400000 15.318056 2.300000 -0.300000 14.643491 2.300000 -0.200000 13.988927 2.300000 -0.100000 13.354362 2.300000 -0.000000 12.739798 2.300000 0.100000 12.145233 2.300000 0.200000 11.570669 2.300000 0.300000 11.016104 2.300000 0.400000 10.481540 2.300000 0.500000 9.966975 2.300000 0.600000 9.472411 2.300000 0.700000 8.997846 2.300000 0.800000 8.543282 2.300000 0.900000 8.108717 2.300000 1.000000 7.694153 2.300000 1.100000 7.299588 2.300000 1.200000 6.925024 2.300000 1.300000 6.570459 2.300000 1.400000 6.235895 2.300000 1.500000 5.921331 2.300000 1.600000 5.626766 2.300000 1.700000 5.352202 2.300000 1.800000 5.097637 2.300000 1.900000 4.863073 2.300000 2.000000 4.648508 2.300000 2.100000 4.453944 2.300000 2.200000 4.279379 2.300000 2.300000 4.124815 2.300000 2.400000 3.990250 2.300000 2.500000 3.875686 2.300000 2.600000 3.781121 2.300000 2.700000 3.706557 2.300000 2.800000 3.651992 2.300000 2.900000 3.617428 2.300000 3.000000 3.602863 2.300000 3.100000 3.608299 2.300000 3.200000 3.633735 2.300000 3.300000 3.679170 2.300000 3.400000 3.744606 2.300000 3.500000 3.830041 2.300000 3.600000 3.935477 2.300000 3.700000 4.060912 2.300000 3.800000 4.206348 2.300000 3.900000 4.371783 2.300000 4.000000 4.557219 2.300000 4.100000 4.762654 2.300000 4.200000 4.988090 2.300000 4.300000 5.233525 2.300000 4.400000 5.498961 2.300000 4.500000 5.784396 2.300000 4.600000 6.089832 2.300000 4.700000 6.415267 2.300000 4.800000 6.760703 2.300000 4.900000 7.126138 2.300000 5.000000 7.511574 2.300000 5.100000 7.917010 2.300000 5.200000 8.342445 2.300000 5.300000 8.787881 2.300000 5.400000 9.253316 2.300000 5.500000 9.738752 2.300000 5.600000 10.244187 2.300000 5.700000 10.769623 2.300000 5.800000 11.315058 2.300000 5.900000 11.880494 2.300000 6.000000 12.465929 2.300000 6.100000 13.071365 2.300000 6.200000 13.696800 2.300000 6.300000 14.342236 2.300000 6.400000 15.007671 2.300000 6.500000 15.693107 2.300000 6.600000 16.398542 2.300000 6.700000 17.123978 2.300000 6.800000 17.869413 2.300000 6.900000 18.634849 2.300000 7.000000 19.420285 2.300000 7.100000 20.225720 2.300000 7.200000 21.051156 2.300000 7.300000 21.896591 2.300000 7.400000 22.762027 2.300000 7.500000 23.647462 2.300000 7.600000 24.552898 2.300000 7.700000 25.478333 2.300000 7.800000 26.423769 2.300000 7.900000 27.389204 2.300000 8.000000 28.374640 2.300000 8.100000 29.380075 2.300000 8.200000 30.405511 2.300000 8.300000 31.450946 2.300000 8.400000 32.516382 2.300000 8.500000 33.601817 2.300000 8.600000 34.707253 2.300000 8.700000 35.832689 2.300000 8.800000 36.978124 2.300000 8.900000 38.143560 2.300000 9.000000 39.328995 2.300000 9.100000 40.534431 2.300000 9.200000 41.759866 2.300000 9.300000 43.005302 2.300000 9.400000 44.270737 2.300000 9.500000 45.556173 2.300000 9.600000 46.861608 2.300000 9.700000 48.187044 2.300000 9.800000 49.532479 2.300000 9.900000 50.897915 2.300000 10.000000 52.283350 2.300000 10.100000 53.688786 2.300000 10.200000 55.114221 2.300000 10.300000 56.559657 2.300000 10.400000 58.025092 2.300000 10.500000 59.510528 2.300000 10.600000 61.015964 2.300000 10.700000 62.541399 2.300000 10.800000 64.086835 2.300000 10.900000 65.652270 2.300000 11.000000 67.237706 2.300000 11.100000 68.843141 2.300000 11.200000 70.468577 2.300000 11.300000 72.114012 2.300000 11.400000 73.779448 2.300000 11.500000 75.464883 2.300000 11.600000 77.170319 2.300000 11.700000 78.895754 2.300000 11.800000 80.641190 2.300000 11.900000 82.406625 2.300000 12.000000 84.192061 2.300000 12.100000 85.997496 2.300000 12.200000 87.822932 2.300000 12.300000 89.668368 2.300000 12.400000 91.533803 2.300000 12.500000 93.419239 2.300000 12.600000 95.324674 2.300000 12.700000 97.250110 2.300000 12.800000 99.195545 2.300000 12.900000 101.160981 2.300000 13.000000 103.146416 2.300000 13.100000 105.151852 2.300000 13.200000 107.177287 2.300000 13.300000 109.222723 2.300000 13.400000 111.288158 2.300000 13.500000 113.373594 2.300000 13.600000 115.479029 2.300000 13.700000 117.604465 2.300000 13.800000 119.749900 2.300000 13.900000 121.915336 2.300000 14.000000 124.100771 2.300000 14.100000 126.306207 2.300000 14.200000 128.531643 2.300000 14.300000 130.777078 2.300000 14.400000 133.042514 2.300000 14.500000 135.327949 2.300000 14.600000 137.633385 2.300000 14.700000 139.958820 2.300000 14.800000 142.304256 2.300000 14.900000 144.669691 2.300000 15.000000 147.055127 2.400000 -5.000000 65.715326 2.400000 -4.900000 64.140450 2.400000 -4.800000 62.585573 2.400000 -4.700000 61.050696 2.400000 -4.600000 59.535819 2.400000 -4.500000 58.040942 2.400000 -4.400000 56.566065 2.400000 -4.300000 55.111189 2.400000 -4.200000 53.676312 2.400000 -4.100000 52.261435 2.400000 -4.000000 50.866558 2.400000 -3.900000 49.491681 2.400000 -3.800000 48.136805 2.400000 -3.700000 46.801928 2.400000 -3.600000 45.487051 2.400000 -3.500000 44.192174 2.400000 -3.400000 42.917297 2.400000 -3.300000 41.662420 2.400000 -3.200000 40.427544 2.400000 -3.100000 39.212667 2.400000 -3.000000 38.017790 2.400000 -2.900000 36.842913 2.400000 -2.800000 35.688036 2.400000 -2.700000 34.553159 2.400000 -2.600000 33.438283 2.400000 -2.500000 32.343406 2.400000 -2.400000 31.268529 2.400000 -2.300000 30.213652 2.400000 -2.200000 29.178775 2.400000 -2.100000 28.163898 2.400000 -2.000000 27.169022 2.400000 -1.900000 26.194145 2.400000 -1.800000 25.239268 2.400000 -1.700000 24.304391 2.400000 -1.600000 23.389514 2.400000 -1.500000 22.494637 2.400000 -1.400000 21.619761 2.400000 -1.300000 20.764884 2.400000 -1.200000 19.930007 2.400000 -1.100000 19.115130 2.400000 -1.000000 18.320253 2.400000 -0.900000 17.545377 2.400000 -0.800000 16.790500 2.400000 -0.700000 16.055623 2.400000 -0.600000 15.340746 2.400000 -0.500000 14.645869 2.400000 -0.400000 13.970992 2.400000 -0.300000 13.316116 2.400000 -0.200000 12.681239 2.400000 -0.100000 12.066362 2.400000 -0.000000 11.471485 2.400000 0.100000 10.896608 2.400000 0.200000 10.341731 2.400000 0.300000 9.806855 2.400000 0.400000 9.291978 2.400000 0.500000 8.797101 2.400000 0.600000 8.322224 2.400000 0.700000 7.867347 2.400000 0.800000 7.432470 2.400000 0.900000 7.017594 2.400000 1.000000 6.622717 2.400000 1.100000 6.247840 2.400000 1.200000 5.892963 2.400000 1.300000 5.558086 2.400000 1.400000 5.243209 2.400000 1.500000 4.948333 2.400000 1.600000 4.673456 2.400000 1.700000 4.418579 2.400000 1.800000 4.183702 2.400000 1.900000 3.968825 2.400000 2.000000 3.773949 2.400000 2.100000 3.599072 2.400000 2.200000 3.444195 2.400000 2.300000 3.309318 2.400000 2.400000 3.194441 2.400000 2.500000 3.099564 2.400000 2.600000 3.024688 2.400000 2.700000 2.969811 2.400000 2.800000 2.934934 2.400000 2.900000 2.920057 2.400000 3.000000 2.925180 2.400000 3.100000 2.950303 2.400000 3.200000 2.995427 2.400000 3.300000 3.060550 2.400000 3.400000 3.145673 2.400000 3.500000 3.250796 2.400000 3.600000 3.375919 2.400000 3.700000 3.521042 2.400000 3.800000 3.686166 2.400000 3.900000 3.871289 2.400000 4.000000 4.076412 2.400000 4.100000 4.301535 2.400000 4.200000 4.546658 2.400000 4.300000 4.811781 2.400000 4.400000 5.096905 2.400000 4.500000 5.402028 2.400000 4.600000 5.727151 2.400000 4.700000 6.072274 2.400000 4.800000 6.437397 2.400000 4.900000 6.822521 2.400000 5.000000 7.227644 2.400000 5.100000 7.652767 2.400000 5.200000 8.097890 2.400000 5.300000 8.563013 2.400000 5.400000 9.048136 2.400000 5.500000 9.553260 2.400000 5.600000 10.078383 2.400000 5.700000 10.623506 2.400000 5.800000 11.188629 2.400000 5.900000 11.773752 2.400000 6.000000 12.378875 2.400000 6.100000 13.003999 2.400000 6.200000 13.649122 2.400000 6.300000 14.314245 2.400000 6.400000 14.999368 2.400000 6.500000 15.704491 2.400000 6.600000 16.429614 2.400000 6.700000 17.174738 2.400000 6.800000 17.939861 2.400000 6.900000 18.724984 2.400000 7.000000 19.530107 2.400000 7.100000 20.355230 2.400000 7.200000 21.200353 2.400000 7.300000 22.065477 2.400000 7.400000 22.950600 2.400000 7.500000 23.855723 2.400000 7.600000 24.780846 2.400000 7.700000 25.725969 2.400000 7.800000 26.691093 2.400000 7.900000 27.676216 2.400000 8.000000 28.681339 2.400000 8.100000 29.706462 2.400000 8.200000 30.751585 2.400000 8.300000 31.816708 2.400000 8.400000 32.901832 2.400000 8.500000 34.006955 2.400000 8.600000 35.132078 2.400000 8.700000 36.277201 2.400000 8.800000 37.442324 2.400000 8.900000 38.627447 2.400000 9.000000 39.832571 2.400000 9.100000 41.057694 2.400000 9.200000 42.302817 2.400000 9.300000 43.567940 2.400000 9.400000 44.853063 2.400000 9.500000 46.158186 2.400000 9.600000 47.483310 2.400000 9.700000 48.828433 2.400000 9.800000 50.193556 2.400000 9.900000 51.578679 2.400000 10.000000 52.983802 2.400000 10.100000 54.408925 2.400000 10.200000 55.854049 2.400000 10.300000 57.319172 2.400000 10.400000 58.804295 2.400000 10.500000 60.309418 2.400000 10.600000 61.834541 2.400000 10.700000 63.379665 2.400000 10.800000 64.944788 2.400000 10.900000 66.529911 2.400000 11.000000 68.135034 2.400000 11.100000 69.760157 2.400000 11.200000 71.405280 2.400000 11.300000 73.070404 2.400000 11.400000 74.755527 2.400000 11.500000 76.460650 2.400000 11.600000 78.185773 2.400000 11.700000 79.930896 2.400000 11.800000 81.696019 2.400000 11.900000 83.481143 2.400000 12.000000 85.286266 2.400000 12.100000 87.111389 2.400000 12.200000 88.956512 2.400000 12.300000 90.821635 2.400000 12.400000 92.706758 2.400000 12.500000 94.611882 2.400000 12.600000 96.537005 2.400000 12.700000 98.482128 2.400000 12.800000 100.447251 2.400000 12.900000 102.432374 2.400000 13.000000 104.437497 2.400000 13.100000 106.462621 2.400000 13.200000 108.507744 2.400000 13.300000 110.572867 2.400000 13.400000 112.657990 2.400000 13.500000 114.763113 2.400000 13.600000 116.888237 2.400000 13.700000 119.033360 2.400000 13.800000 121.198483 2.400000 13.900000 123.383606 2.400000 14.000000 125.588729 2.400000 14.100000 127.813852 2.400000 14.200000 130.058976 2.400000 14.300000 132.324099 2.400000 14.400000 134.609222 2.400000 14.500000 136.914345 2.400000 14.600000 139.239468 2.400000 14.700000 141.584591 2.400000 14.800000 143.949715 2.400000 14.900000 146.334838 2.400000 15.000000 148.739961 2.500000 -5.000000 63.593205 2.500000 -4.900000 62.037499 2.500000 -4.800000 60.501793 2.500000 -4.700000 58.986087 2.500000 -4.600000 57.490381 2.500000 -4.500000 56.014675 2.500000 -4.400000 54.558969 2.500000 -4.300000 53.123263 2.500000 -4.200000 51.707557 2.500000 -4.100000 50.311851 2.500000 -4.000000 48.936145 2.500000 -3.900000 47.580439 2.500000 -3.800000 46.244733 2.500000 -3.700000 44.929028 2.500000 -3.600000 43.633322 2.500000 -3.500000 42.357616 2.500000 -3.400000 41.101910 2.500000 -3.300000 39.866204 2.500000 -3.200000 38.650498 2.500000 -3.100000 37.454792 2.500000 -3.000000 36.279086 2.500000 -2.900000 35.123380 2.500000 -2.800000 33.987674 2.500000 -2.700000 32.871968 2.500000 -2.600000 31.776262 2.500000 -2.500000 30.700557 2.500000 -2.400000 29.644851 2.500000 -2.300000 28.609145 2.500000 -2.200000 27.593439 2.500000 -2.100000 26.597733 2.500000 -2.000000 25.622027 2.500000 -1.900000 24.666321 2.500000 -1.800000 23.730615 2.500000 -1.700000 22.814909 2.500000 -1.600000 21.919203 2.500000 -1.500000 21.043497 2.500000 -1.400000 20.187791 2.500000 -1.300000 19.352085 2.500000 -1.200000 18.536380 2.500000 -1.100000 17.740674 2.500000 -1.000000 16.964968 2.500000 -0.900000 16.209262 2.500000 -0.800000 15.473556 2.500000 -0.700000 14.757850 2.500000 -0.600000 14.062144 2.500000 -0.500000 13.386438 2.500000 -0.400000 12.730732 2.500000 -0.300000 12.095026 2.500000 -0.200000 11.479320 2.500000 -0.100000 10.883614 2.500000 -0.000000 10.307908 2.500000 0.100000 9.752203 2.500000 0.200000 9.216497 2.500000 0.300000 8.700791 2.500000 0.400000 8.205085 2.500000 0.500000 7.729379 2.500000 0.600000 7.273673 2.500000 0.700000 6.837967 2.500000 0.800000 6.422261 2.500000 0.900000 6.026555 2.500000 1.000000 5.650849 2.500000 1.100000 5.295143 2.500000 1.200000 4.959437 2.500000 1.300000 4.643732 2.500000 1.400000 4.348026 2.500000 1.500000 4.072320 2.500000 1.600000 3.816614 2.500000 1.700000 3.580908 2.500000 1.800000 3.365202 2.500000 1.900000 3.169496 2.500000 2.000000 2.993790 2.500000 2.100000 2.838084 2.500000 2.200000 2.702378 2.500000 2.300000 2.586672 2.500000 2.400000 2.490966 2.500000 2.500000 2.415260 2.500000 2.600000 2.359555 2.500000 2.700000 2.323849 2.500000 2.800000 2.308143 2.500000 2.900000 2.312437 2.500000 3.000000 2.336731 2.500000 3.100000 2.381025 2.500000 3.200000 2.445319 2.500000 3.300000 2.529613 2.500000 3.400000 2.633907 2.500000 3.500000 2.758201 2.500000 3.600000 2.902495 2.500000 3.700000 3.066789 2.500000 3.800000 3.251083 2.500000 3.900000 3.455378 2.500000 4.000000 3.679672 2.500000 4.100000 3.923966 2.500000 4.200000 4.188260 2.500000 4.300000 4.472554 2.500000 4.400000 4.776848 2.500000 4.500000 5.101142 2.500000 4.600000 5.445436 2.500000 4.700000 5.809730 2.500000 4.800000 6.194024 2.500000 4.900000 6.598318 2.500000 5.000000 7.022612 2.500000 5.100000 7.466907 2.500000 5.200000 7.931201 2.500000 5.300000 8.415495 2.500000 5.400000 8.919789 2.500000 5.500000 9.444083 2.500000 5.600000 9.988377 2.500000 5.700000 10.552671 2.500000 5.800000 11.136965 2.500000 5.900000 11.741259 2.500000 6.000000 12.365553 2.500000 6.100000 13.009847 2.500000 6.200000 13.674141 2.500000 6.300000 14.358435 2.500000 6.400000 15.062730 2.500000 6.500000 15.787024 2.500000 6.600000 16.531318 2.500000 6.700000 17.295612 2.500000 6.800000 18.079906 2.500000 6.900000 18.884200 2.500000 7.000000 19.708494 2.500000 7.100000 20.552788 2.500000 7.200000 21.417082 2.500000 7.300000 22.301376 2.500000 7.400000 23.205670 2.500000 7.500000 24.129964 2.500000 7.600000 25.074258 2.500000 7.700000 26.038553 2.500000 7.800000 27.022847 2.500000 7.900000 28.027141 2.500000 8.000000 29.051435 2.500000 8.100000 30.095729 2.500000 8.200000 31.160023 2.500000 8.300000 32.244317 2.500000 8.400000 33.348611 2.500000 8.500000 34.472905 2.500000 8.600000 35.617199 2.500000 8.700000 36.781493 2.500000 8.800000 37.965787 2.500000 8.900000 39.170082 2.500000 9.000000 40.394376 2.500000 9.100000 41.638670 2.500000 9.200000 42.902964 2.500000 9.300000 44.187258 2.500000 9.400000 45.491552 2.500000 9.500000 46.815846 2.500000 9.600000 48.160140 2.500000 9.700000 49.524434 2.500000 9.800000 50.908728 2.500000 9.900000 52.313022 2.500000 10.000000 53.737316 2.500000 10.100000 55.181610 2.500000 10.200000 56.645905 2.500000 10.300000 58.130199 2.500000 10.400000 59.634493 2.500000 10.500000 61.158787 2.500000 10.600000 62.703081 2.500000 10.700000 64.267375 2.500000 10.800000 65.851669 2.500000 10.900000 67.455963 2.500000 11.000000 69.080257 2.500000 11.100000 70.724551 2.500000 11.200000 72.388845 2.500000 11.300000 74.073139 2.500000 11.400000 75.777433 2.500000 11.500000 77.501728 2.500000 11.600000 79.246022 2.500000 11.700000 81.010316 2.500000 11.800000 82.794610 2.500000 11.900000 84.598904 2.500000 12.000000 86.423198 2.500000 12.100000 88.267492 2.500000 12.200000 90.131786 2.500000 12.300000 92.016080 2.500000 12.400000 93.920374 2.500000 12.500000 95.844668 2.500000 12.600000 97.788962 2.500000 12.700000 99.753257 2.500000 12.800000 101.737551 2.500000 12.900000 103.741845 2.500000 13.000000 105.766139 2.500000 13.100000 107.810433 2.500000 13.200000 109.874727 2.500000 13.300000 111.959021 2.500000 13.400000 114.063315 2.500000 13.500000 116.187609 2.500000 13.600000 118.331903 2.500000 13.700000 120.496197 2.500000 13.800000 122.680491 2.500000 13.900000 124.884785 2.500000 14.000000 127.109080 2.500000 14.100000 129.353374 2.500000 14.200000 131.617668 2.500000 14.300000 133.901962 2.500000 14.400000 136.206256 2.500000 14.500000 138.530550 2.500000 14.600000 140.874844 2.500000 14.700000 143.239138 2.500000 14.800000 145.623432 2.500000 14.900000 148.027726 2.500000 15.000000 150.452020 2.600000 -5.000000 61.606286 2.600000 -4.900000 60.069234 2.600000 -4.800000 58.552182 2.600000 -4.700000 57.055131 2.600000 -4.600000 55.578079 2.600000 -4.500000 54.121027 2.600000 -4.400000 52.683975 2.600000 -4.300000 51.266924 2.600000 -4.200000 49.869872 2.600000 -4.100000 48.492820 2.600000 -4.000000 47.135768 2.600000 -3.900000 45.798716 2.600000 -3.800000 44.481665 2.600000 -3.700000 43.184613 2.600000 -3.600000 41.907561 2.600000 -3.500000 40.650509 2.600000 -3.400000 39.413458 2.600000 -3.300000 38.196406 2.600000 -3.200000 36.999354 2.600000 -3.100000 35.822302 2.600000 -3.000000 34.665251 2.600000 -2.900000 33.528199 2.600000 -2.800000 32.411147 2.600000 -2.700000 31.314095 2.600000 -2.600000 30.237044 2.600000 -2.500000 29.179992 2.600000 -2.400000 28.142940 2.600000 -2.300000 27.125888 2.600000 -2.200000 26.128837 2.600000 -2.100000 25.151785 2.600000 -2.000000 24.194733 2.600000 -1.900000 23.257681 2.600000 -1.800000 22.340630 2.600000 -1.700000 21.443578 2.600000 -1.600000 20.566526 2.600000 -1.500000 19.709474 2.600000 -1.400000 18.872423 2.600000 -1.300000 18.055371 2.600000 -1.200000 17.258319 2.600000 -1.100000 16.481267 2.600000 -1.000000 15.724216 2.600000 -0.900000 14.987164 2.600000 -0.800000 14.270112 2.600000 -0.700000 13.573060 2.600000 -0.600000 12.896009 2.600000 -0.500000 12.238957 2.600000 -0.400000 11.601905 2.600000 -0.300000 10.984853 2.600000 -0.200000 10.387802 2.600000 -0.100000 9.810750 2.600000 -0.000000 9.253698 2.600000 0.100000 8.716646 2.600000 0.200000 8.199595 2.600000 0.300000 7.702543 2.600000 0.400000 7.225491 2.600000 0.500000 6.768439 2.600000 0.600000 6.331388 2.600000 0.700000 5.914336 2.600000 0.800000 5.517284 2.600000 0.900000 5.140232 2.600000 1.000000 4.783181 2.600000 1.100000 4.446129 2.600000 1.200000 4.129077 2.600000 1.300000 3.832025 2.600000 1.400000 3.554974 2.600000 1.500000 3.297922 2.600000 1.600000 3.060870 2.600000 1.700000 2.843818 2.600000 1.800000 2.646767 2.600000 1.900000 2.469715 2.600000 2.000000 2.312663 2.600000 2.100000 2.175611 2.600000 2.200000 2.058560 2.600000 2.300000 1.961508 2.600000 2.400000 1.884456 2.600000 2.500000 1.827404 2.600000 2.600000 1.790353 2.600000 2.700000 1.773301 2.600000 2.800000 1.776249 2.600000 2.900000 1.799197 2.600000 3.000000 1.842146 2.600000 3.100000 1.905094 2.600000 3.200000 1.988042 2.600000 3.300000 2.090990 2.600000 3.400000 2.213939 2.600000 3.500000 2.356887 2.600000 3.600000 2.519835 2.600000 3.700000 2.702783 2.600000 3.800000 2.905732 2.600000 3.900000 3.128680 2.600000 4.000000 3.371628 2.600000 4.100000 3.634576 2.600000 4.200000 3.917525 2.600000 4.300000 4.220473 2.600000 4.400000 4.543421 2.600000 4.500000 4.886369 2.600000 4.600000 5.249318 2.600000 4.700000 5.632266 2.600000 4.800000 6.035214 2.600000 4.900000 6.458162 2.600000 5.000000 6.901111 2.600000 5.100000 7.364059 2.600000 5.200000 7.847007 2.600000 5.300000 8.349955 2.600000 5.400000 8.872904 2.600000 5.500000 9.415852 2.600000 5.600000 9.978800 2.600000 5.700000 10.561748 2.600000 5.800000 11.164697 2.600000 5.900000 11.787645 2.600000 6.000000 12.430593 2.600000 6.100000 13.093541 2.600000 6.200000 13.776490 2.600000 6.300000 14.479438 2.600000 6.400000 15.202386 2.600000 6.500000 15.945334 2.600000 6.600000 16.708283 2.600000 6.700000 17.491231 2.600000 6.800000 18.294179 2.600000 6.900000 19.117127 2.600000 7.000000 19.960076 2.600000 7.100000 20.823024 2.600000 7.200000 21.705972 2.600000 7.300000 22.608920 2.600000 7.400000 23.531868 2.600000 7.500000 24.474817 2.600000 7.600000 25.437765 2.600000 7.700000 26.420713 2.600000 7.800000 27.423661 2.600000 7.900000 28.446610 2.600000 8.000000 29.489558 2.600000 8.100000 30.552506 2.600000 8.200000 31.635454 2.600000 8.300000 32.738403 2.600000 8.400000 33.861351 2.600000 8.500000 35.004299 2.600000 8.600000 36.167247 2.600000 8.700000 37.350196 2.600000 8.800000 38.553144 2.600000 8.900000 39.776092 2.600000 9.000000 41.019040 2.600000 9.100000 42.281989 2.600000 9.200000 43.564937 2.600000 9.300000 44.867885 2.600000 9.400000 46.190833 2.600000 9.500000 47.533782 2.600000 9.600000 48.896730 2.600000 9.700000 50.279678 2.600000 9.800000 51.682626 2.600000 9.900000 53.105575 2.600000 10.000000 54.548523 2.600000 10.100000 56.011471 2.600000 10.200000 57.494419 2.600000 10.300000 58.997368 2.600000 10.400000 60.520316 2.600000 10.500000 62.063264 2.600000 10.600000 63.626212 2.600000 10.700000 65.209161 2.600000 10.800000 66.812109 2.600000 10.900000 68.435057 2.600000 11.000000 70.078005 2.600000 11.100000 71.740954 2.600000 11.200000 73.423902 2.600000 11.300000 75.126850 2.600000 11.400000 76.849798 2.600000 11.500000 78.592747 2.600000 11.600000 80.355695 2.600000 11.700000 82.138643 2.600000 11.800000 83.941591 2.600000 11.900000 85.764540 2.600000 12.000000 87.607488 2.600000 12.100000 89.470436 2.600000 12.200000 91.353384 2.600000 12.300000 93.256333 2.600000 12.400000 95.179281 2.600000 12.500000 97.122229 2.600000 12.600000 99.085177 2.600000 12.700000 101.068126 2.600000 12.800000 103.071074 2.600000 12.900000 105.094022 2.600000 13.000000 107.136970 2.600000 13.100000 109.199919 2.600000 13.200000 111.282867 2.600000 13.300000 113.385815 2.600000 13.400000 115.508763 2.600000 13.500000 117.651712 2.600000 13.600000 119.814660 2.600000 13.700000 121.997608 2.600000 13.800000 124.200556 2.600000 13.900000 126.423505 2.600000 14.000000 128.666453 2.600000 14.100000 130.929401 2.600000 14.200000 133.212349 2.600000 14.300000 135.515298 2.600000 14.400000 137.838246 2.600000 14.500000 140.181194 2.600000 14.600000 142.544142 2.600000 14.700000 144.927091 2.600000 14.800000 147.330039 2.600000 14.900000 149.752987 2.600000 15.000000 152.195935 2.700000 -5.000000 59.758473 2.700000 -4.900000 58.239558 2.700000 -4.800000 56.740644 2.700000 -4.700000 55.261730 2.700000 -4.600000 53.802815 2.700000 -4.500000 52.363901 2.700000 -4.400000 50.944987 2.700000 -4.300000 49.546072 2.700000 -4.200000 48.167158 2.700000 -4.100000 46.808244 2.700000 -4.000000 45.469329 2.700000 -3.900000 44.150415 2.700000 -3.800000 42.851501 2.700000 -3.700000 41.572586 2.700000 -3.600000 40.313672 2.700000 -3.500000 39.074758 2.700000 -3.400000 37.855843 2.700000 -3.300000 36.656929 2.700000 -3.200000 35.478015 2.700000 -3.100000 34.319100 2.700000 -3.000000 33.180186 2.700000 -2.900000 32.061272 2.700000 -2.800000 30.962357 2.700000 -2.700000 29.883443 2.700000 -2.600000 28.824529 2.700000 -2.500000 27.785614 2.700000 -2.400000 26.766700 2.700000 -2.300000 25.767786 2.700000 -2.200000 24.788872 2.700000 -2.100000 23.829957 2.700000 -2.000000 22.891043 2.700000 -1.900000 21.972129 2.700000 -1.800000 21.073214 2.700000 -1.700000 20.194300 2.700000 -1.600000 19.335386 2.700000 -1.500000 18.496471 2.700000 -1.400000 17.677557 2.700000 -1.300000 16.878643 2.700000 -1.200000 16.099728 2.700000 -1.100000 15.340814 2.700000 -1.000000 14.601900 2.700000 -0.900000 13.882985 2.700000 -0.800000 13.184071 2.700000 -0.700000 12.505157 2.700000 -0.600000 11.846242 2.700000 -0.500000 11.207328 2.700000 -0.400000 10.588414 2.700000 -0.300000 9.989499 2.700000 -0.200000 9.410585 2.700000 -0.100000 8.851671 2.700000 -0.000000 8.312756 2.700000 0.100000 7.793842 2.700000 0.200000 7.294928 2.700000 0.300000 6.816013 2.700000 0.400000 6.357099 2.700000 0.500000 5.918185 2.700000 0.600000 5.499271 2.700000 0.700000 5.100356 2.700000 0.800000 4.721442 2.700000 0.900000 4.362528 2.700000 1.000000 4.023613 2.700000 1.100000 3.704699 2.700000 1.200000 3.405785 2.700000 1.300000 3.126870 2.700000 1.400000 2.867956 2.700000 1.500000 2.629042 2.700000 1.600000 2.410127 2.700000 1.700000 2.211213 2.700000 1.800000 2.032299 2.700000 1.900000 1.873384 2.700000 2.000000 1.734470 2.700000 2.100000 1.615556 2.700000 2.200000 1.516641 2.700000 2.300000 1.437727 2.700000 2.400000 1.378813 2.700000 2.500000 1.339898 2.700000 2.600000 1.320984 2.700000 2.700000 1.322070 2.700000 2.800000 1.343155 2.700000 2.900000 1.384241 2.700000 3.000000 1.445327 2.700000 3.100000 1.526412 2.700000 3.200000 1.627498 2.700000 3.300000 1.748584 2.700000 3.400000 1.889670 2.700000 3.500000 2.050755 2.700000 3.600000 2.231841 2.700000 3.700000 2.432927 2.700000 3.800000 2.654012 2.700000 3.900000 2.895098 2.700000 4.000000 3.156184 2.700000 4.100000 3.437269 2.700000 4.200000 3.738355 2.700000 4.300000 4.059441 2.700000 4.400000 4.400526 2.700000 4.500000 4.761612 2.700000 4.600000 5.142698 2.700000 4.700000 5.543783 2.700000 4.800000 5.964869 2.700000 4.900000 6.405955 2.700000 5.000000 6.867040 2.700000 5.100000 7.348126 2.700000 5.200000 7.849212 2.700000 5.300000 8.370297 2.700000 5.400000 8.911383 2.700000 5.500000 9.472469 2.700000 5.600000 10.053554 2.700000 5.700000 10.654640 2.700000 5.800000 11.275726 2.700000 5.900000 11.916811 2.700000 6.000000 12.577897 2.700000 6.100000 13.258983 2.700000 6.200000 13.960069 2.700000 6.300000 14.681154 2.700000 6.400000 15.422240 2.700000 6.500000 16.183326 2.700000 6.600000 16.964411 2.700000 6.700000 17.765497 2.700000 6.800000 18.586583 2.700000 6.900000 19.427668 2.700000 7.000000 20.288754 2.700000 7.100000 21.169840 2.700000 7.200000 22.070925 2.700000 7.300000 22.992011 2.700000 7.400000 23.933097 2.700000 7.500000 24.894182 2.700000 7.600000 25.875268 2.700000 7.700000 26.876354 2.700000 7.800000 27.897439 2.700000 7.900000 28.938525 2.700000 8.000000 29.999611 2.700000 8.100000 31.080696 2.700000 8.200000 32.181782 2.700000 8.300000 33.302868 2.700000 8.400000 34.443953 2.700000 8.500000 35.605039 2.700000 8.600000 36.786125 2.700000 8.700000 37.987210 2.700000 8.800000 39.208296 2.700000 8.900000 40.449382 2.700000 9.000000 41.710467 2.700000 9.100000 42.991553 2.700000 9.200000 44.292639 2.700000 9.300000 45.613725 2.700000 9.400000 46.954810 2.700000 9.500000 48.315896 2.700000 9.600000 49.696982 2.700000 9.700000 51.098067 2.700000 9.800000 52.519153 2.700000 9.900000 53.960239 2.700000 10.000000 55.421324 2.700000 10.100000 56.902410 2.700000 10.200000 58.403496 2.700000 10.300000 59.924581 2.700000 10.400000 61.465667 2.700000 10.500000 63.026753 2.700000 10.600000 64.607838 2.700000 10.700000 66.208924 2.700000 10.800000 67.830010 2.700000 10.900000 69.471095 2.700000 11.000000 71.132181 2.700000 11.100000 72.813267 2.700000 11.200000 74.514352 2.700000 11.300000 76.235438 2.700000 11.400000 77.976524 2.700000 11.500000 79.737609 2.700000 11.600000 81.518695 2.700000 11.700000 83.319781 2.700000 11.800000 85.140866 2.700000 11.900000 86.981952 2.700000 12.000000 88.843038 2.700000 12.100000 90.724124 2.700000 12.200000 92.625209 2.700000 12.300000 94.546295 2.700000 12.400000 96.487381 2.700000 12.500000 98.448466 2.700000 12.600000 100.429552 2.700000 12.700000 102.430638 2.700000 12.800000 104.451723 2.700000 12.900000 106.492809 2.700000 13.000000 108.553895 2.700000 13.100000 110.634980 2.700000 13.200000 112.736066 2.700000 13.300000 114.857152 2.700000 13.400000 116.998237 2.700000 13.500000 119.159323 2.700000 13.600000 121.340409 2.700000 13.700000 123.541494 2.700000 13.800000 125.762580 2.700000 13.900000 128.003666 2.700000 14.000000 130.264751 2.700000 14.100000 132.545837 2.700000 14.200000 134.846923 2.700000 14.300000 137.168008 2.700000 14.400000 139.509094 2.700000 14.500000 141.870180 2.700000 14.600000 144.251265 2.700000 14.700000 146.652351 2.700000 14.800000 149.073437 2.700000 14.900000 151.514523 2.700000 15.000000 153.975608 2.800000 -5.000000 58.052886 2.800000 -4.900000 56.551592 2.800000 -4.800000 55.070299 2.800000 -4.700000 53.609005 2.800000 -4.600000 52.167711 2.800000 -4.500000 50.746418 2.800000 -4.400000 49.345124 2.800000 -4.300000 47.963830 2.800000 -4.200000 46.602537 2.800000 -4.100000 45.261243 2.800000 -4.000000 43.939949 2.800000 -3.900000 42.638656 2.800000 -3.800000 41.357362 2.800000 -3.700000 40.096069 2.800000 -3.600000 38.854775 2.800000 -3.500000 37.633481 2.800000 -3.400000 36.432188 2.800000 -3.300000 35.250894 2.800000 -3.200000 34.089600 2.800000 -3.100000 32.948307 2.800000 -3.000000 31.827013 2.800000 -2.900000 30.725720 2.800000 -2.800000 29.644426 2.800000 -2.700000 28.583132 2.800000 -2.600000 27.541839 2.800000 -2.500000 26.520545 2.800000 -2.400000 25.519251 2.800000 -2.300000 24.537958 2.800000 -2.200000 23.576664 2.800000 -2.100000 22.635371 2.800000 -2.000000 21.714077 2.800000 -1.900000 20.812783 2.800000 -1.800000 19.931490 2.800000 -1.700000 19.070196 2.800000 -1.600000 18.228902 2.800000 -1.500000 17.407609 2.800000 -1.400000 16.606315 2.800000 -1.300000 15.825022 2.800000 -1.200000 15.063728 2.800000 -1.100000 14.322434 2.800000 -1.000000 13.601141 2.800000 -0.900000 12.899847 2.800000 -0.800000 12.218553 2.800000 -0.700000 11.557260 2.800000 -0.600000 10.915966 2.800000 -0.500000 10.294672 2.800000 -0.400000 9.693379 2.800000 -0.300000 9.112085 2.800000 -0.200000 8.550792 2.800000 -0.100000 8.009498 2.800000 -0.000000 7.488204 2.800000 0.100000 6.986911 2.800000 0.200000 6.505617 2.800000 0.300000 6.044323 2.800000 0.400000 5.603030 2.800000 0.500000 5.181736 2.800000 0.600000 4.780443 2.800000 0.700000 4.399149 2.800000 0.800000 4.037855 2.800000 0.900000 3.696562 2.800000 1.000000 3.375268 2.800000 1.100000 3.073974 2.800000 1.200000 2.792681 2.800000 1.300000 2.531387 2.800000 1.400000 2.290094 2.800000 1.500000 2.068800 2.800000 1.600000 1.867506 2.800000 1.700000 1.686213 2.800000 1.800000 1.524919 2.800000 1.900000 1.383625 2.800000 2.000000 1.262332 2.800000 2.100000 1.161038 2.800000 2.200000 1.079744 2.800000 2.300000 1.018451 2.800000 2.400000 0.977157 2.800000 2.500000 0.955864 2.800000 2.600000 0.954570 2.800000 2.700000 0.973276 2.800000 2.800000 1.011983 2.800000 2.900000 1.070689 2.800000 3.000000 1.149395 2.800000 3.100000 1.248102 2.800000 3.200000 1.366808 2.800000 3.300000 1.505515 2.800000 3.400000 1.664221 2.800000 3.500000 1.842927 2.800000 3.600000 2.041634 2.800000 3.700000 2.260340 2.800000 3.800000 2.499046 2.800000 3.900000 2.757753 2.800000 4.000000 3.036459 2.800000 4.100000 3.335166 2.800000 4.200000 3.653872 2.800000 4.300000 3.992578 2.800000 4.400000 4.351285 2.800000 4.500000 4.729991 2.800000 4.600000 5.128697 2.800000 4.700000 5.547404 2.800000 4.800000 5.986110 2.800000 4.900000 6.444817 2.800000 5.000000 6.923523 2.800000 5.100000 7.422229 2.800000 5.200000 7.940936 2.800000 5.300000 8.479642 2.800000 5.400000 9.038348 2.800000 5.500000 9.617055 2.800000 5.600000 10.215761 2.800000 5.700000 10.834467 2.800000 5.800000 11.473174 2.800000 5.900000 12.131880 2.800000 6.000000 12.810587 2.800000 6.100000 13.509293 2.800000 6.200000 14.227999 2.800000 6.300000 14.966706 2.800000 6.400000 15.725412 2.800000 6.500000 16.504118 2.800000 6.600000 17.302825 2.800000 6.700000 18.121531 2.800000 6.800000 18.960238 2.800000 6.900000 19.818944 2.800000 7.000000 20.697650 2.800000 7.100000 21.596357 2.800000 7.200000 22.515063 2.800000 7.300000 23.453769 2.800000 7.400000 24.412476 2.800000 7.500000 25.391182 2.800000 7.600000 26.389889 2.800000 7.700000 27.408595 2.800000 7.800000 28.447301 2.800000 7.900000 29.506008 2.800000 8.000000 30.584714 2.800000 8.100000 31.683420 2.800000 8.200000 32.802127 2.800000 8.300000 33.940833 2.800000 8.400000 35.099539 2.800000 8.500000 36.278246 2.800000 8.600000 37.476952 2.800000 8.700000 38.695659 2.800000 8.800000 39.934365 2.800000 8.900000 41.193071 2.800000 9.000000 42.471778 2.800000 9.100000 43.770484 2.800000 9.200000 45.089190 2.800000 9.300000 46.427897 2.800000 9.400000 47.786603 2.800000 9.500000 49.165310 2.800000 9.600000 50.564016 2.800000 9.700000 51.982722 2.800000 9.800000 53.421429 2.800000 9.900000 54.880135 2.800000 10.000000 56.358841 2.800000 10.100000 57.857548 2.800000 10.200000 59.376254 2.800000 10.300000 60.914961 2.800000 10.400000 62.473667 2.800000 10.500000 64.052373 2.800000 10.600000 65.651080 2.800000 10.700000 67.269786 2.800000 10.800000 68.908492 2.800000 10.900000 70.567199 2.800000 11.000000 72.245905 2.800000 11.100000 73.944612 2.800000 11.200000 75.663318 2.800000 11.300000 77.402024 2.800000 11.400000 79.160731 2.800000 11.500000 80.939437 2.800000 11.600000 82.738143 2.800000 11.700000 84.556850 2.800000 11.800000 86.395556 2.800000 11.900000 88.254262 2.800000 12.000000 90.132969 2.800000 12.100000 92.031675 2.800000 12.200000 93.950382 2.800000 12.300000 95.889088 2.800000 12.400000 97.847794 2.800000 12.500000 99.826501 2.800000 12.600000 101.825207 2.800000 12.700000 103.843913 2.800000 12.800000 105.882620 2.800000 12.900000 107.941326 2.800000 13.000000 110.020033 2.800000 13.100000 112.118739 2.800000 13.200000 114.237445 2.800000 13.300000 116.376152 2.800000 13.400000 118.534858 2.800000 13.500000 120.713564 2.800000 13.600000 122.912271 2.800000 13.700000 125.130977 2.800000 13.800000 127.369684 2.800000 13.900000 129.628390 2.800000 14.000000 131.907096 2.800000 14.100000 134.205803 2.800000 14.200000 136.524509 2.800000 14.300000 138.863215 2.800000 14.400000 141.221922 2.800000 14.500000 143.600628 2.800000 14.600000 145.999334 2.800000 14.700000 148.418041 2.800000 14.800000 150.856747 2.800000 14.900000 153.315454 2.800000 15.000000 155.794160 2.900000 -5.000000 56.491820 2.900000 -4.900000 55.007630 2.900000 -4.800000 53.543441 2.900000 -4.700000 52.099251 2.900000 -4.600000 50.675061 2.900000 -4.500000 49.270872 2.900000 -4.400000 47.886682 2.900000 -4.300000 46.522492 2.900000 -4.200000 45.178303 2.900000 -4.100000 43.854113 2.900000 -4.000000 42.549923 2.900000 -3.900000 41.265733 2.900000 -3.800000 40.001544 2.900000 -3.700000 38.757354 2.900000 -3.600000 37.533164 2.900000 -3.500000 36.328975 2.900000 -3.400000 35.144785 2.900000 -3.300000 33.980595 2.900000 -3.200000 32.836406 2.900000 -3.100000 31.712216 2.900000 -3.000000 30.608026 2.900000 -2.900000 29.523837 2.900000 -2.800000 28.459647 2.900000 -2.700000 27.415457 2.900000 -2.600000 26.391268 2.900000 -2.500000 25.387078 2.900000 -2.400000 24.402888 2.900000 -2.300000 23.438699 2.900000 -2.200000 22.494509 2.900000 -2.100000 21.570319 2.900000 -2.000000 20.666130 2.900000 -1.900000 19.781940 2.900000 -1.800000 18.917750 2.900000 -1.700000 18.073561 2.900000 -1.600000 17.249371 2.900000 -1.500000 16.445181 2.900000 -1.400000 15.660992 2.900000 -1.300000 14.896802 2.900000 -1.200000 14.152612 2.900000 -1.100000 13.428423 2.900000 -1.000000 12.724233 2.900000 -0.900000 12.040043 2.900000 -0.800000 11.375854 2.900000 -0.700000 10.731664 2.900000 -0.600000 10.107474 2.900000 -0.500000 9.503285 2.900000 -0.400000 8.919095 2.900000 -0.300000 8.354905 2.900000 -0.200000 7.810716 2.900000 -0.100000 7.286526 2.900000 -0.000000 6.782336 2.900000 0.100000 6.298147 2.900000 0.200000 5.833957 2.900000 0.300000 5.389767 2.900000 0.400000 4.965577 2.900000 0.500000 4.561388 2.900000 0.600000 4.177198 2.900000 0.700000 3.813008 2.900000 0.800000 3.468819 2.900000 0.900000 3.144629 2.900000 1.000000 2.840439 2.900000 1.100000 2.556250 2.900000 1.200000 2.292060 2.900000 1.300000 2.047870 2.900000 1.400000 1.823681 2.900000 1.500000 1.619491 2.900000 1.600000 1.435301 2.900000 1.700000 1.271112 2.900000 1.800000 1.126922 2.900000 1.900000 1.002732 2.900000 2.000000 0.898543 2.900000 2.100000 0.814353 2.900000 2.200000 0.750163 2.900000 2.300000 0.705974 2.900000 2.400000 0.681784 2.900000 2.500000 0.677594 2.900000 2.600000 0.693405 2.900000 2.700000 0.729215 2.900000 2.800000 0.785025 2.900000 2.900000 0.860836 2.900000 3.000000 0.956646 2.900000 3.100000 1.072456 2.900000 3.200000 1.208267 2.900000 3.300000 1.364077 2.900000 3.400000 1.539887 2.900000 3.500000 1.735698 2.900000 3.600000 1.951508 2.900000 3.700000 2.187318 2.900000 3.800000 2.443129 2.900000 3.900000 2.718939 2.900000 4.000000 3.014749 2.900000 4.100000 3.330560 2.900000 4.200000 3.666370 2.900000 4.300000 4.022180 2.900000 4.400000 4.397991 2.900000 4.500000 4.793801 2.900000 4.600000 5.209611 2.900000 4.700000 5.645421 2.900000 4.800000 6.101232 2.900000 4.900000 6.577042 2.900000 5.000000 7.072852 2.900000 5.100000 7.588663 2.900000 5.200000 8.124473 2.900000 5.300000 8.680283 2.900000 5.400000 9.256094 2.900000 5.500000 9.851904 2.900000 5.600000 10.467714 2.900000 5.700000 11.103525 2.900000 5.800000 11.759335 2.900000 5.900000 12.435145 2.900000 6.000000 13.130956 2.900000 6.100000 13.846766 2.900000 6.200000 14.582576 2.900000 6.300000 15.338387 2.900000 6.400000 16.114197 2.900000 6.500000 16.910007 2.900000 6.600000 17.725818 2.900000 6.700000 18.561628 2.900000 6.800000 19.417438 2.900000 6.900000 20.293249 2.900000 7.000000 21.189059 2.900000 7.100000 22.104869 2.900000 7.200000 23.040680 2.900000 7.300000 23.996490 2.900000 7.400000 24.972300 2.900000 7.500000 25.968111 2.900000 7.600000 26.983921 2.900000 7.700000 28.019731 2.900000 7.800000 29.075542 2.900000 7.900000 30.151352 2.900000 8.000000 31.247162 2.900000 8.100000 32.362973 2.900000 8.200000 33.498783 2.900000 8.300000 34.654593 2.900000 8.400000 35.830404 2.900000 8.500000 37.026214 2.900000 8.600000 38.242024 2.900000 8.700000 39.477835 2.900000 8.800000 40.733645 2.900000 8.900000 42.009455 2.900000 9.000000 43.305265 2.900000 9.100000 44.621076 2.900000 9.200000 45.956886 2.900000 9.300000 47.312696 2.900000 9.400000 48.688507 2.900000 9.500000 50.084317 2.900000 9.600000 51.500127 2.900000 9.700000 52.935938 2.900000 9.800000 54.391748 2.900000 9.900000 55.867558 2.900000 10.000000 57.363369 2.900000 10.100000 58.879179 2.900000 10.200000 60.414989 2.900000 10.300000 61.970800 2.900000 10.400000 63.546610 2.900000 10.500000 65.142420 2.900000 10.600000 66.758231 2.900000 10.700000 68.394041 2.900000 10.800000 70.049851 2.900000 10.900000 71.725662 2.900000 11.000000 73.421472 2.900000 11.100000 75.137282 2.900000 11.200000 76.873093 2.900000 11.300000 78.628903 2.900000 11.400000 80.404713 2.900000 11.500000 82.200524 2.900000 11.600000 84.016334 2.900000 11.700000 85.852144 2.900000 11.800000 87.707955 2.900000 11.900000 89.583765 2.900000 12.000000 91.479575 2.900000 12.100000 93.395386 2.900000 12.200000 95.331196 2.900000 12.300000 97.287006 2.900000 12.400000 99.262817 2.900000 12.500000 101.258627 2.900000 12.600000 103.274437 2.900000 12.700000 105.310248 2.900000 12.800000 107.366058 2.900000 12.900000 109.441868 2.900000 13.000000 111.537679 2.900000 13.100000 113.653489 2.900000 13.200000 115.789299 2.900000 13.300000 117.945109 2.900000 13.400000 120.120920 2.900000 13.500000 122.316730 2.900000 13.600000 124.532540 2.900000 13.700000 126.768351 2.900000 13.800000 129.024161 2.900000 13.900000 131.299971 2.900000 14.000000 133.595782 2.900000 14.100000 135.911592 2.900000 14.200000 138.247402 2.900000 14.300000 140.603213 2.900000 14.400000 142.979023 2.900000 14.500000 145.374833 2.900000 14.600000 147.790644 2.900000 14.700000 150.226454 2.900000 14.800000 152.682264 2.900000 14.900000 155.158075 2.900000 15.000000 157.653885 3.000000 -5.000000 55.076706 3.000000 -4.900000 53.609104 3.000000 -4.800000 52.161501 3.000000 -4.700000 50.733899 3.000000 -4.600000 49.326296 3.000000 -4.500000 47.938694 3.000000 -4.400000 46.571091 3.000000 -4.300000 45.223489 3.000000 -4.200000 43.895886 3.000000 -4.100000 42.588284 3.000000 -4.000000 41.300682 3.000000 -3.900000 40.033079 3.000000 -3.800000 38.785477 3.000000 -3.700000 37.557874 3.000000 -3.600000 36.350272 3.000000 -3.500000 35.162669 3.000000 -3.400000 33.995067 3.000000 -3.300000 32.847464 3.000000 -3.200000 31.719862 3.000000 -3.100000 30.612259 3.000000 -3.000000 29.524657 3.000000 -2.900000 28.457055 3.000000 -2.800000 27.409452 3.000000 -2.700000 26.381850 3.000000 -2.600000 25.374247 3.000000 -2.500000 24.386645 3.000000 -2.400000 23.419042 3.000000 -2.300000 22.471440 3.000000 -2.200000 21.543837 3.000000 -2.100000 20.636235 3.000000 -2.000000 19.748632 3.000000 -1.900000 18.881030 3.000000 -1.800000 18.033427 3.000000 -1.700000 17.205825 3.000000 -1.600000 16.398223 3.000000 -1.500000 15.610620 3.000000 -1.400000 14.843018 3.000000 -1.300000 14.095415 3.000000 -1.200000 13.367813 3.000000 -1.100000 12.660210 3.000000 -1.000000 11.972608 3.000000 -0.900000 11.305005 3.000000 -0.800000 10.657403 3.000000 -0.700000 10.029800 3.000000 -0.600000 9.422198 3.000000 -0.500000 8.834596 3.000000 -0.400000 8.266993 3.000000 -0.300000 7.719391 3.000000 -0.200000 7.191788 3.000000 -0.100000 6.684186 3.000000 -0.000000 6.196583 3.000000 0.100000 5.728981 3.000000 0.200000 5.281378 3.000000 0.300000 4.853776 3.000000 0.400000 4.446173 3.000000 0.500000 4.058571 3.000000 0.600000 3.690968 3.000000 0.700000 3.343366 3.000000 0.800000 3.015764 3.000000 0.900000 2.708161 3.000000 1.000000 2.420559 3.000000 1.100000 2.152956 3.000000 1.200000 1.905354 3.000000 1.300000 1.677751 3.000000 1.400000 1.470149 3.000000 1.500000 1.282546 3.000000 1.600000 1.114944 3.000000 1.700000 0.967341 3.000000 1.800000 0.839739 3.000000 1.900000 0.732137 3.000000 2.000000 0.644534 3.000000 2.100000 0.576932 3.000000 2.200000 0.529329 3.000000 2.300000 0.501727 3.000000 2.400000 0.494124 3.000000 2.500000 0.506522 3.000000 2.600000 0.538919 3.000000 2.700000 0.591317 3.000000 2.800000 0.663714 3.000000 2.900000 0.756112 3.000000 3.000000 0.868509 3.000000 3.100000 1.000907 3.000000 3.200000 1.153305 3.000000 3.300000 1.325702 3.000000 3.400000 1.518100 3.000000 3.500000 1.730497 3.000000 3.600000 1.962895 3.000000 3.700000 2.215292 3.000000 3.800000 2.487690 3.000000 3.900000 2.780087 3.000000 4.000000 3.092485 3.000000 4.100000 3.424882 3.000000 4.200000 3.777280 3.000000 4.300000 4.149678 3.000000 4.400000 4.542075 3.000000 4.500000 4.954473 3.000000 4.600000 5.386870 3.000000 4.700000 5.839268 3.000000 4.800000 6.311665 3.000000 4.900000 6.804063 3.000000 5.000000 7.316460 3.000000 5.100000 7.848858 3.000000 5.200000 8.401255 3.000000 5.300000 8.973653 3.000000 5.400000 9.566051 3.000000 5.500000 10.178448 3.000000 5.600000 10.810846 3.000000 5.700000 11.463243 3.000000 5.800000 12.135641 3.000000 5.900000 12.828038 3.000000 6.000000 13.540436 3.000000 6.100000 14.272833 3.000000 6.200000 15.025231 3.000000 6.300000 15.797628 3.000000 6.400000 16.590026 3.000000 6.500000 17.402423 3.000000 6.600000 18.234821 3.000000 6.700000 19.087219 3.000000 6.800000 19.959616 3.000000 6.900000 20.852014 3.000000 7.000000 21.764411 3.000000 7.100000 22.696809 3.000000 7.200000 23.649206 3.000000 7.300000 24.621604 3.000000 7.400000 25.614001 3.000000 7.500000 26.626399 3.000000 7.600000 27.658796 3.000000 7.700000 28.711194 3.000000 7.800000 29.783592 3.000000 7.900000 30.875989 3.000000 8.000000 31.988387 3.000000 8.100000 33.120784 3.000000 8.200000 34.273182 3.000000 8.300000 35.445579 3.000000 8.400000 36.637977 3.000000 8.500000 37.850374 3.000000 8.600000 39.082772 3.000000 8.700000 40.335169 3.000000 8.800000 41.607567 3.000000 8.900000 42.899964 3.000000 9.000000 44.212362 3.000000 9.100000 45.544760 3.000000 9.200000 46.897157 3.000000 9.300000 48.269555 3.000000 9.400000 49.661952 3.000000 9.500000 51.074350 3.000000 9.600000 52.506747 3.000000 9.700000 53.959145 3.000000 9.800000 55.431542 3.000000 9.900000 56.923940 3.000000 10.000000 58.436337 3.000000 10.100000 59.968735 3.000000 10.200000 61.521133 3.000000 10.300000 63.093530 3.000000 10.400000 64.685928 3.000000 10.500000 66.298325 3.000000 10.600000 67.930723 3.000000 10.700000 69.583120 3.000000 10.800000 71.255518 3.000000 10.900000 72.947915 3.000000 11.000000 74.660313 3.000000 11.100000 76.392710 3.000000 11.200000 78.145108 3.000000 11.300000 79.917505 3.000000 11.400000 81.709903 3.000000 11.500000 83.522301 3.000000 11.600000 85.354698 3.000000 11.700000 87.207096 3.000000 11.800000 89.079493 3.000000 11.900000 90.971891 3.000000 12.000000 92.884288 3.000000 12.100000 94.816686 3.000000 12.200000 96.769083 3.000000 12.300000 98.741481 3.000000 12.400000 100.733878 3.000000 12.500000 102.746276 3.000000 12.600000 104.778674 3.000000 12.700000 106.831071 3.000000 12.800000 108.903469 3.000000 12.900000 110.995866 3.000000 13.000000 113.108264 3.000000 13.100000 115.240661 3.000000 13.200000 117.393059 3.000000 13.300000 119.565456 3.000000 13.400000 121.757854 3.000000 13.500000 123.970251 3.000000 13.600000 126.202649 3.000000 13.700000 128.455046 3.000000 13.800000 130.727444 3.000000 13.900000 133.019842 3.000000 14.000000 135.332239 3.000000 14.100000 137.664637 3.000000 14.200000 140.017034 3.000000 14.300000 142.389432 3.000000 14.400000 144.781829 3.000000 14.500000 147.194227 3.000000 14.600000 149.626624 3.000000 14.700000 152.079022 3.000000 14.800000 154.551419 3.000000 14.900000 157.043817 3.000000 15.000000 159.556215 3.100000 -5.000000 53.808085 3.100000 -4.900000 52.356553 3.100000 -4.800000 50.925021 3.100000 -4.700000 49.513489 3.100000 -4.600000 48.121957 3.100000 -4.500000 46.750425 3.100000 -4.400000 45.398893 3.100000 -4.300000 44.067361 3.100000 -4.200000 42.755829 3.100000 -4.100000 41.464297 3.100000 -4.000000 40.192765 3.100000 -3.900000 38.941233 3.100000 -3.800000 37.709701 3.100000 -3.700000 36.498169 3.100000 -3.600000 35.306637 3.100000 -3.500000 34.135105 3.100000 -3.400000 32.983573 3.100000 -3.300000 31.852041 3.100000 -3.200000 30.740509 3.100000 -3.100000 29.648977 3.100000 -3.000000 28.577445 3.100000 -2.900000 27.525913 3.100000 -2.800000 26.494381 3.100000 -2.700000 25.482849 3.100000 -2.600000 24.491317 3.100000 -2.500000 23.519785 3.100000 -2.400000 22.568253 3.100000 -2.300000 21.636721 3.100000 -2.200000 20.725189 3.100000 -2.100000 19.833658 3.100000 -2.000000 18.962126 3.100000 -1.900000 18.110594 3.100000 -1.800000 17.279062 3.100000 -1.700000 16.467530 3.100000 -1.600000 15.675998 3.100000 -1.500000 14.904466 3.100000 -1.400000 14.152934 3.100000 -1.300000 13.421402 3.100000 -1.200000 12.709870 3.100000 -1.100000 12.018338 3.100000 -1.000000 11.346806 3.100000 -0.900000 10.695274 3.100000 -0.800000 10.063742 3.100000 -0.700000 9.452210 3.100000 -0.600000 8.860678 3.100000 -0.500000 8.289146 3.100000 -0.400000 7.737614 3.100000 -0.300000 7.206082 3.100000 -0.200000 6.694550 3.100000 -0.100000 6.203018 3.100000 -0.000000 5.731486 3.100000 0.100000 5.279954 3.100000 0.200000 4.848422 3.100000 0.300000 4.436890 3.100000 0.400000 4.045358 3.100000 0.500000 3.673826 3.100000 0.600000 3.322294 3.100000 0.700000 2.990762 3.100000 0.800000 2.679230 3.100000 0.900000 2.387698 3.100000 1.000000 2.116166 3.100000 1.100000 1.864634 3.100000 1.200000 1.633102 3.100000 1.300000 1.421570 3.100000 1.400000 1.230038 3.100000 1.500000 1.058506 3.100000 1.600000 0.906974 3.100000 1.700000 0.775442 3.100000 1.800000 0.663910 3.100000 1.900000 0.572378 3.100000 2.000000 0.500846 3.100000 2.100000 0.449314 3.100000 2.200000 0.417782 3.100000 2.300000 0.406250 3.100000 2.400000 0.414718 3.100000 2.500000 0.443186 3.100000 2.600000 0.491654 3.100000 2.700000 0.560122 3.100000 2.800000 0.648591 3.100000 2.900000 0.757059 3.100000 3.000000 0.885527 3.100000 3.100000 1.033995 3.100000 3.200000 1.202463 3.100000 3.300000 1.390931 3.100000 3.400000 1.599399 3.100000 3.500000 1.827867 3.100000 3.600000 2.076335 3.100000 3.700000 2.344803 3.100000 3.800000 2.633271 3.100000 3.900000 2.941739 3.100000 4.000000 3.270207 3.100000 4.100000 3.618675 3.100000 4.200000 3.987143 3.100000 4.300000 4.375611 3.100000 4.400000 4.784079 3.100000 4.500000 5.212547 3.100000 4.600000 5.661015 3.100000 4.700000 6.129483 3.100000 4.800000 6.617951 3.100000 4.900000 7.126419 3.100000 5.000000 7.654887 3.100000 5.100000 8.203355 3.100000 5.200000 8.771823 3.100000 5.300000 9.360291 3.100000 5.400000 9.968759 3.100000 5.500000 10.597227 3.100000 5.600000 11.245695 3.100000 5.700000 11.914163 3.100000 5.800000 12.602631 3.100000 5.900000 13.311099 3.100000 6.000000 14.039567 3.100000 6.100000 14.788035 3.100000 6.200000 15.556503 3.100000 6.300000 16.344971 3.100000 6.400000 17.153439 3.100000 6.500000 17.981907 3.100000 6.600000 18.830375 3.100000 6.700000 19.698843 3.100000 6.800000 20.587311 3.100000 6.900000 21.495779 3.100000 7.000000 22.424247 3.100000 7.100000 23.372715 3.100000 7.200000 24.341183 3.100000 7.300000 25.329651 3.100000 7.400000 26.338119 3.100000 7.500000 27.366587 3.100000 7.600000 28.415056 3.100000 7.700000 29.483524 3.100000 7.800000 30.571992 3.100000 7.900000 31.680460 3.100000 8.000000 32.808928 3.100000 8.100000 33.957396 3.100000 8.200000 35.125864 3.100000 8.300000 36.314332 3.100000 8.400000 37.522800 3.100000 8.500000 38.751268 3.100000 8.600000 39.999736 3.100000 8.700000 41.268204 3.100000 8.800000 42.556672 3.100000 8.900000 43.865140 3.100000 9.000000 45.193608 3.100000 9.100000 46.542076 3.100000 9.200000 47.910544 3.100000 9.300000 49.299012 3.100000 9.400000 50.707480 3.100000 9.500000 52.135948 3.100000 9.600000 53.584416 3.100000 9.700000 55.052884 3.100000 9.800000 56.541352 3.100000 9.900000 58.049820 3.100000 10.000000 59.578288 3.100000 10.100000 61.126756 3.100000 10.200000 62.695224 3.100000 10.300000 64.283692 3.100000 10.400000 65.892160 3.100000 10.500000 67.520628 3.100000 10.600000 69.169096 3.100000 10.700000 70.837564 3.100000 10.800000 72.526032 3.100000 10.900000 74.234500 3.100000 11.000000 75.962968 3.100000 11.100000 77.711436 3.100000 11.200000 79.479904 3.100000 11.300000 81.268372 3.100000 11.400000 83.076840 3.100000 11.500000 84.905308 3.100000 11.600000 86.753776 3.100000 11.700000 88.622244 3.100000 11.800000 90.510712 3.100000 11.900000 92.419180 3.100000 12.000000 94.347648 3.100000 12.100000 96.296116 3.100000 12.200000 98.264584 3.100000 12.300000 100.253052 3.100000 12.400000 102.261520 3.100000 12.500000 104.289989 3.100000 12.600000 106.338457 3.100000 12.700000 108.406925 3.100000 12.800000 110.495393 3.100000 12.900000 112.603861 3.100000 13.000000 114.732329 3.100000 13.100000 116.880797 3.100000 13.200000 119.049265 3.100000 13.300000 121.237733 3.100000 13.400000 123.446201 3.100000 13.500000 125.674669 3.100000 13.600000 127.923137 3.100000 13.700000 130.191605 3.100000 13.800000 132.480073 3.100000 13.900000 134.788541 3.100000 14.000000 137.117009 3.100000 14.100000 139.465477 3.100000 14.200000 141.833945 3.100000 14.300000 144.222413 3.100000 14.400000 146.630881 3.100000 14.500000 149.059349 3.100000 14.600000 151.507817 3.100000 14.700000 153.976285 3.100000 14.800000 156.464753 3.100000 14.900000 158.973221 3.100000 15.000000 161.501689 3.200000 -5.000000 52.685588 3.200000 -4.900000 51.249610 3.200000 -4.800000 49.833631 3.200000 -4.700000 48.437653 3.200000 -4.600000 47.061675 3.200000 -4.500000 45.705697 3.200000 -4.400000 44.369718 3.200000 -4.300000 43.053740 3.200000 -4.200000 41.757762 3.200000 -4.100000 40.481784 3.200000 -4.000000 39.225805 3.200000 -3.900000 37.989827 3.200000 -3.800000 36.773849 3.200000 -3.700000 35.577871 3.200000 -3.600000 34.401892 3.200000 -3.500000 33.245914 3.200000 -3.400000 32.109936 3.200000 -3.300000 30.993958 3.200000 -3.200000 29.897979 3.200000 -3.100000 28.822001 3.200000 -3.000000 27.766023 3.200000 -2.900000 26.730045 3.200000 -2.800000 25.714067 3.200000 -2.700000 24.718088 3.200000 -2.600000 23.742110 3.200000 -2.500000 22.786132 3.200000 -2.400000 21.850154 3.200000 -2.300000 20.934175 3.200000 -2.200000 20.038197 3.200000 -2.100000 19.162219 3.200000 -2.000000 18.306241 3.200000 -1.900000 17.470262 3.200000 -1.800000 16.654284 3.200000 -1.700000 15.858306 3.200000 -1.600000 15.082328 3.200000 -1.500000 14.326349 3.200000 -1.400000 13.590371 3.200000 -1.300000 12.874393 3.200000 -1.200000 12.178415 3.200000 -1.100000 11.502436 3.200000 -1.000000 10.846458 3.200000 -0.900000 10.210480 3.200000 -0.800000 9.594502 3.200000 -0.700000 8.998524 3.200000 -0.600000 8.422545 3.200000 -0.500000 7.866567 3.200000 -0.400000 7.330589 3.200000 -0.300000 6.814611 3.200000 -0.200000 6.318632 3.200000 -0.100000 5.842654 3.200000 -0.000000 5.386676 3.200000 0.100000 4.950698 3.200000 0.200000 4.534719 3.200000 0.300000 4.138741 3.200000 0.400000 3.762763 3.200000 0.500000 3.406785 3.200000 0.600000 3.070806 3.200000 0.700000 2.754828 3.200000 0.800000 2.458850 3.200000 0.900000 2.182872 3.200000 1.000000 1.926893 3.200000 1.100000 1.690915 3.200000 1.200000 1.474937 3.200000 1.300000 1.278959 3.200000 1.400000 1.102981 3.200000 1.500000 0.947002 3.200000 1.600000 0.811024 3.200000 1.700000 0.695046 3.200000 1.800000 0.599068 3.200000 1.900000 0.523089 3.200000 2.000000 0.467111 3.200000 2.100000 0.431133 3.200000 2.200000 0.415155 3.200000 2.300000 0.419176 3.200000 2.400000 0.443198 3.200000 2.500000 0.487220 3.200000 2.600000 0.551242 3.200000 2.700000 0.635263 3.200000 2.800000 0.739285 3.200000 2.900000 0.863307 3.200000 3.000000 1.007329 3.200000 3.100000 1.171350 3.200000 3.200000 1.355372 3.200000 3.300000 1.559394 3.200000 3.400000 1.783416 3.200000 3.500000 2.027437 3.200000 3.600000 2.291459 3.200000 3.700000 2.575481 3.200000 3.800000 2.879503 3.200000 3.900000 3.203525 3.200000 4.000000 3.547546 3.200000 4.100000 3.911568 3.200000 4.200000 4.295590 3.200000 4.300000 4.699612 3.200000 4.400000 5.123633 3.200000 4.500000 5.567655 3.200000 4.600000 6.031677 3.200000 4.700000 6.515699 3.200000 4.800000 7.019720 3.200000 4.900000 7.543742 3.200000 5.000000 8.087764 3.200000 5.100000 8.651786 3.200000 5.200000 9.235807 3.200000 5.300000 9.839829 3.200000 5.400000 10.463851 3.200000 5.500000 11.107873 3.200000 5.600000 11.771894 3.200000 5.700000 12.455916 3.200000 5.800000 13.159938 3.200000 5.900000 13.883960 3.200000 6.000000 14.627982 3.200000 6.100000 15.392003 3.200000 6.200000 16.176025 3.200000 6.300000 16.980047 3.200000 6.400000 17.804069 3.200000 6.500000 18.648090 3.200000 6.600000 19.512112 3.200000 6.700000 20.396134 3.200000 6.800000 21.300156 3.200000 6.900000 22.224177 3.200000 7.000000 23.168199 3.200000 7.100000 24.132221 3.200000 7.200000 25.116243 3.200000 7.300000 26.120264 3.200000 7.400000 27.144286 3.200000 7.500000 28.188308 3.200000 7.600000 29.252330 3.200000 7.700000 30.336351 3.200000 7.800000 31.440373 3.200000 7.900000 32.564395 3.200000 8.000000 33.708417 3.200000 8.100000 34.872438 3.200000 8.200000 36.056460 3.200000 8.300000 37.260482 3.200000 8.400000 38.484504 3.200000 8.500000 39.728526 3.200000 8.600000 40.992547 3.200000 8.700000 42.276569 3.200000 8.800000 43.580591 3.200000 8.900000 44.904613 3.200000 9.000000 46.248634 3.200000 9.100000 47.612656 3.200000 9.200000 48.996678 3.200000 9.300000 50.400700 3.200000 9.400000 51.824721 3.200000 9.500000 53.268743 3.200000 9.600000 54.732765 3.200000 9.700000 56.216787 3.200000 9.800000 57.720808 3.200000 9.900000 59.244830 3.200000 10.000000 60.788852 3.200000 10.100000 62.352874 3.200000 10.200000 63.936895 3.200000 10.300000 65.540917 3.200000 10.400000 67.164939 3.200000 10.500000 68.808961 3.200000 10.600000 70.472983 3.200000 10.700000 72.157004 3.200000 10.800000 73.861026 3.200000 10.900000 75.585048 3.200000 11.000000 77.329070 3.200000 11.100000 79.093091 3.200000 11.200000 80.877113 3.200000 11.300000 82.681135 3.200000 11.400000 84.505157 3.200000 11.500000 86.349178 3.200000 11.600000 88.213200 3.200000 11.700000 90.097222 3.200000 11.800000 92.001244 3.200000 11.900000 93.925265 3.200000 12.000000 95.869287 3.200000 12.100000 97.833309 3.200000 12.200000 99.817331 3.200000 12.300000 101.821352 3.200000 12.400000 103.845374 3.200000 12.500000 105.889396 3.200000 12.600000 107.953418 3.200000 12.700000 110.037440 3.200000 12.800000 112.141461 3.200000 12.900000 114.265483 3.200000 13.000000 116.409505 3.200000 13.100000 118.573527 3.200000 13.200000 120.757548 3.200000 13.300000 122.961570 3.200000 13.400000 125.185592 3.200000 13.500000 127.429614 3.200000 13.600000 129.693635 3.200000 13.700000 131.977657 3.200000 13.800000 134.281679 3.200000 13.900000 136.605701 3.200000 14.000000 138.949722 3.200000 14.100000 141.313744 3.200000 14.200000 143.697766 3.200000 14.300000 146.101788 3.200000 14.400000 148.525809 3.200000 14.500000 150.969831 3.200000 14.600000 153.433853 3.200000 14.700000 155.917875 3.200000 14.800000 158.421896 3.200000 14.900000 160.945918 3.200000 15.000000 163.489940 3.300000 -5.000000 51.707929 3.300000 -4.900000 50.286987 3.300000 -4.800000 48.886046 3.300000 -4.700000 47.505105 3.300000 -4.600000 46.144164 3.300000 -4.500000 44.803222 3.300000 -4.400000 43.482281 3.300000 -4.300000 42.181340 3.300000 -4.200000 40.900399 3.300000 -4.100000 39.639457 3.300000 -4.000000 38.398516 3.300000 -3.900000 37.177575 3.300000 -3.800000 35.976634 3.300000 -3.700000 34.795693 3.300000 -3.600000 33.634751 3.300000 -3.500000 32.493810 3.300000 -3.400000 31.372869 3.300000 -3.300000 30.271928 3.300000 -3.200000 29.190986 3.300000 -3.100000 28.130045 3.300000 -3.000000 27.089104 3.300000 -2.900000 26.068163 3.300000 -2.800000 25.067221 3.300000 -2.700000 24.086280 3.300000 -2.600000 23.125339 3.300000 -2.500000 22.184398 3.300000 -2.400000 21.263456 3.300000 -2.300000 20.362515 3.300000 -2.200000 19.481574 3.300000 -2.100000 18.620633 3.300000 -2.000000 17.779691 3.300000 -1.900000 16.958750 3.300000 -1.800000 16.157809 3.300000 -1.700000 15.376868 3.300000 -1.600000 14.615927 3.300000 -1.500000 13.874985 3.300000 -1.400000 13.154044 3.300000 -1.300000 12.453103 3.300000 -1.200000 11.772162 3.300000 -1.100000 11.111220 3.300000 -1.000000 10.470279 3.300000 -0.900000 9.849338 3.300000 -0.800000 9.248397 3.300000 -0.700000 8.667455 3.300000 -0.600000 8.106514 3.300000 -0.500000 7.565573 3.300000 -0.400000 7.044632 3.300000 -0.300000 6.543690 3.300000 -0.200000 6.062749 3.300000 -0.100000 5.601808 3.300000 -0.000000 5.160867 3.300000 0.100000 4.739926 3.300000 0.200000 4.338984 3.300000 0.300000 3.958043 3.300000 0.400000 3.597102 3.300000 0.500000 3.256161 3.300000 0.600000 2.935219 3.300000 0.700000 2.634278 3.300000 0.800000 2.353337 3.300000 0.900000 2.092396 3.300000 1.000000 1.851454 3.300000 1.100000 1.630513 3.300000 1.200000 1.429572 3.300000 1.300000 1.248631 3.300000 1.400000 1.087689 3.300000 1.500000 0.946748 3.300000 1.600000 0.825807 3.300000 1.700000 0.724866 3.300000 1.800000 0.643924 3.300000 1.900000 0.582983 3.300000 2.000000 0.542042 3.300000 2.100000 0.521101 3.300000 2.200000 0.520160 3.300000 2.300000 0.539218 3.300000 2.400000 0.578277 3.300000 2.500000 0.637336 3.300000 2.600000 0.716395 3.300000 2.700000 0.815453 3.300000 2.800000 0.934512 3.300000 2.900000 1.073571 3.300000 3.000000 1.232630 3.300000 3.100000 1.411688 3.300000 3.200000 1.610747 3.300000 3.300000 1.829806 3.300000 3.400000 2.068865 3.300000 3.500000 2.327923 3.300000 3.600000 2.606982 3.300000 3.700000 2.906041 3.300000 3.800000 3.225100 3.300000 3.900000 3.564159 3.300000 4.000000 3.923217 3.300000 4.100000 4.302276 3.300000 4.200000 4.701335 3.300000 4.300000 5.120394 3.300000 4.400000 5.559452 3.300000 4.500000 6.018511 3.300000 4.600000 6.497570 3.300000 4.700000 6.996629 3.300000 4.800000 7.515687 3.300000 4.900000 8.054746 3.300000 5.000000 8.613805 3.300000 5.100000 9.192864 3.300000 5.200000 9.791922 3.300000 5.300000 10.410981 3.300000 5.400000 11.050040 3.300000 5.500000 11.709099 3.300000 5.600000 12.388158 3.300000 5.700000 13.087216 3.300000 5.800000 13.806275 3.300000 5.900000 14.545334 3.300000 6.000000 15.304393 3.300000 6.100000 16.083451 3.300000 6.200000 16.882510 3.300000 6.300000 17.701569 3.300000 6.400000 18.540628 3.300000 6.500000 19.399686 3.300000 6.600000 20.278745 3.300000 6.700000 21.177804 3.300000 6.800000 22.096863 3.300000 6.900000 23.035921 3.300000 7.000000 23.994980 3.300000 7.100000 24.974039 3.300000 7.200000 25.973098 3.300000 7.300000 26.992156 3.300000 7.400000 28.031215 3.300000 7.500000 29.090274 3.300000 7.600000 30.169333 3.300000 7.700000 31.268392 3.300000 7.800000 32.387450 3.300000 7.900000 33.526509 3.300000 8.000000 34.685568 3.300000 8.100000 35.864627 3.300000 8.200000 37.063685 3.300000 8.300000 38.282744 3.300000 8.400000 39.521803 3.300000 8.500000 40.780862 3.300000 8.600000 42.059920 3.300000 8.700000 43.358979 3.300000 8.800000 44.678038 3.300000 8.900000 46.017097 3.300000 9.000000 47.376155 3.300000 9.100000 48.755214 3.300000 9.200000 50.154273 3.300000 9.300000 51.573332 3.300000 9.400000 53.012391 3.300000 9.500000 54.471449 3.300000 9.600000 55.950508 3.300000 9.700000 57.449567 3.300000 9.800000 58.968626 3.300000 9.900000 60.507684 3.300000 10.000000 62.066743 3.300000 10.100000 63.645802 3.300000 10.200000 65.244861 3.300000 10.300000 66.863919 3.300000 10.400000 68.502978 3.300000 10.500000 70.162037 3.300000 10.600000 71.841096 3.300000 10.700000 73.540154 3.300000 10.800000 75.259213 3.300000 10.900000 76.998272 3.300000 11.000000 78.757331 3.300000 11.100000 80.536389 3.300000 11.200000 82.335448 3.300000 11.300000 84.154507 3.300000 11.400000 85.993566 3.300000 11.500000 87.852625 3.300000 11.600000 89.731683 3.300000 11.700000 91.630742 3.300000 11.800000 93.549801 3.300000 11.900000 95.488860 3.300000 12.000000 97.447918 3.300000 12.100000 99.426977 3.300000 12.200000 101.426036 3.300000 12.300000 103.445095 3.300000 12.400000 105.484153 3.300000 12.500000 107.543212 3.300000 12.600000 109.622271 3.300000 12.700000 111.721330 3.300000 12.800000 113.840388 3.300000 12.900000 115.979447 3.300000 13.000000 118.138506 3.300000 13.100000 120.317565 3.300000 13.200000 122.516624 3.300000 13.300000 124.735682 3.300000 13.400000 126.974741 3.300000 13.500000 129.233800 3.300000 13.600000 131.512859 3.300000 13.700000 133.811917 3.300000 13.800000 136.130976 3.300000 13.900000 138.470035 3.300000 14.000000 140.829094 3.300000 14.100000 143.208152 3.300000 14.200000 145.607211 3.300000 14.300000 148.026270 3.300000 14.400000 150.465329 3.300000 14.500000 152.924387 3.300000 14.600000 155.403446 3.300000 14.700000 157.902505 3.300000 14.800000 160.421564 3.300000 14.900000 162.960623 3.300000 15.000000 165.519681 3.400000 -5.000000 50.872904 3.400000 -4.900000 49.466483 3.400000 -4.800000 48.080062 3.400000 -4.700000 46.713641 3.400000 -4.600000 45.367220 3.400000 -4.500000 44.040799 3.400000 -4.400000 42.734378 3.400000 -4.300000 41.447957 3.400000 -4.200000 40.181536 3.400000 -4.100000 38.935115 3.400000 -4.000000 37.708694 3.400000 -3.900000 36.502273 3.400000 -3.800000 35.315852 3.400000 -3.700000 34.149431 3.400000 -3.600000 33.003010 3.400000 -3.500000 31.876590 3.400000 -3.400000 30.770169 3.400000 -3.300000 29.683748 3.400000 -3.200000 28.617327 3.400000 -3.100000 27.570906 3.400000 -3.000000 26.544485 3.400000 -2.900000 25.538064 3.400000 -2.800000 24.551643 3.400000 -2.700000 23.585222 3.400000 -2.600000 22.638801 3.400000 -2.500000 21.712380 3.400000 -2.400000 20.805959 3.400000 -2.300000 19.919538 3.400000 -2.200000 19.053117 3.400000 -2.100000 18.206696 3.400000 -2.000000 17.380275 3.400000 -1.900000 16.573854 3.400000 -1.800000 15.787433 3.400000 -1.700000 15.021012 3.400000 -1.600000 14.274591 3.400000 -1.500000 13.548170 3.400000 -1.400000 12.841749 3.400000 -1.300000 12.155328 3.400000 -1.200000 11.488907 3.400000 -1.100000 10.842486 3.400000 -1.000000 10.216065 3.400000 -0.900000 9.609644 3.400000 -0.800000 9.023223 3.400000 -0.700000 8.456802 3.400000 -0.600000 7.910381 3.400000 -0.500000 7.383960 3.400000 -0.400000 6.877539 3.400000 -0.300000 6.391118 3.400000 -0.200000 5.924697 3.400000 -0.100000 5.478276 3.400000 -0.000000 5.051856 3.400000 0.100000 4.645435 3.400000 0.200000 4.259014 3.400000 0.300000 3.892593 3.400000 0.400000 3.546172 3.400000 0.500000 3.219751 3.400000 0.600000 2.913330 3.400000 0.700000 2.626909 3.400000 0.800000 2.360488 3.400000 0.900000 2.114067 3.400000 1.000000 1.887646 3.400000 1.100000 1.681225 3.400000 1.200000 1.494804 3.400000 1.300000 1.328383 3.400000 1.400000 1.181962 3.400000 1.500000 1.055541 3.400000 1.600000 0.949120 3.400000 1.700000 0.862699 3.400000 1.800000 0.796278 3.400000 1.900000 0.749857 3.400000 2.000000 0.723436 3.400000 2.100000 0.717015 3.400000 2.200000 0.730594 3.400000 2.300000 0.764173 3.400000 2.400000 0.817752 3.400000 2.500000 0.891331 3.400000 2.600000 0.984910 3.400000 2.700000 1.098489 3.400000 2.800000 1.232068 3.400000 2.900000 1.385647 3.400000 3.000000 1.559226 3.400000 3.100000 1.752805 3.400000 3.200000 1.966384 3.400000 3.300000 2.199963 3.400000 3.400000 2.453542 3.400000 3.500000 2.727121 3.400000 3.600000 3.020701 3.400000 3.700000 3.334280 3.400000 3.800000 3.667859 3.400000 3.900000 4.021438 3.400000 4.000000 4.395017 3.400000 4.100000 4.788596 3.400000 4.200000 5.202175 3.400000 4.300000 5.635754 3.400000 4.400000 6.089333 3.400000 4.500000 6.562912 3.400000 4.600000 7.056491 3.400000 4.700000 7.570070 3.400000 4.800000 8.103649 3.400000 4.900000 8.657228 3.400000 5.000000 9.230807 3.400000 5.100000 9.824386 3.400000 5.200000 10.437965 3.400000 5.300000 11.071544 3.400000 5.400000 11.725123 3.400000 5.500000 12.398702 3.400000 5.600000 13.092281 3.400000 5.700000 13.805860 3.400000 5.800000 14.539439 3.400000 5.900000 15.293018 3.400000 6.000000 16.066597 3.400000 6.100000 16.860176 3.400000 6.200000 17.673755 3.400000 6.300000 18.507334 3.400000 6.400000 19.360913 3.400000 6.500000 20.234492 3.400000 6.600000 21.128071 3.400000 6.700000 22.041650 3.400000 6.800000 22.975229 3.400000 6.900000 23.928808 3.400000 7.000000 24.902387 3.400000 7.100000 25.895966 3.400000 7.200000 26.909546 3.400000 7.300000 27.943125 3.400000 7.400000 28.996704 3.400000 7.500000 30.070283 3.400000 7.600000 31.163862 3.400000 7.700000 32.277441 3.400000 7.800000 33.411020 3.400000 7.900000 34.564599 3.400000 8.000000 35.738178 3.400000 8.100000 36.931757 3.400000 8.200000 38.145336 3.400000 8.300000 39.378915 3.400000 8.400000 40.632494 3.400000 8.500000 41.906073 3.400000 8.600000 43.199652 3.400000 8.700000 44.513231 3.400000 8.800000 45.846810 3.400000 8.900000 47.200389 3.400000 9.000000 48.573968 3.400000 9.100000 49.967547 3.400000 9.200000 51.381126 3.400000 9.300000 52.814705 3.400000 9.400000 54.268284 3.400000 9.500000 55.741863 3.400000 9.600000 57.235442 3.400000 9.700000 58.749021 3.400000 9.800000 60.282600 3.400000 9.900000 61.836179 3.400000 10.000000 63.409758 3.400000 10.100000 65.003337 3.400000 10.200000 66.616916 3.400000 10.300000 68.250495 3.400000 10.400000 69.904074 3.400000 10.500000 71.577653 3.400000 10.600000 73.271232 3.400000 10.700000 74.984811 3.400000 10.800000 76.718391 3.400000 10.900000 78.471970 3.400000 11.000000 80.245549 3.400000 11.100000 82.039128 3.400000 11.200000 83.852707 3.400000 11.300000 85.686286 3.400000 11.400000 87.539865 3.400000 11.500000 89.413444 3.400000 11.600000 91.307023 3.400000 11.700000 93.220602 3.400000 11.800000 95.154181 3.400000 11.900000 97.107760 3.400000 12.000000 99.081339 3.400000 12.100000 101.074918 3.400000 12.200000 103.088497 3.400000 12.300000 105.122076 3.400000 12.400000 107.175655 3.400000 12.500000 109.249234 3.400000 12.600000 111.342813 3.400000 12.700000 113.456392 3.400000 12.800000 115.589971 3.400000 12.900000 117.743550 3.400000 13.000000 119.917129 3.400000 13.100000 122.110708 3.400000 13.200000 124.324287 3.400000 13.300000 126.557866 3.400000 13.400000 128.811445 3.400000 13.500000 131.085024 3.400000 13.600000 133.378603 3.400000 13.700000 135.692182 3.400000 13.800000 138.025761 3.400000 13.900000 140.379340 3.400000 14.000000 142.752919 3.400000 14.100000 145.146498 3.400000 14.200000 147.560077 3.400000 14.300000 149.993656 3.400000 14.400000 152.447236 3.400000 14.500000 154.920815 3.400000 14.600000 157.414394 3.400000 14.700000 159.927973 3.400000 14.800000 162.461552 3.400000 14.900000 165.015131 3.400000 15.000000 167.588710 3.500000 -5.000000 50.177405 3.500000 -4.900000 48.784987 3.500000 -4.800000 47.412570 3.500000 -4.700000 46.060152 3.500000 -4.600000 44.727735 3.500000 -4.500000 43.415317 3.500000 -4.400000 42.122900 3.500000 -4.300000 40.850483 3.500000 -4.200000 39.598065 3.500000 -4.100000 38.365648 3.500000 -4.000000 37.153230 3.500000 -3.900000 35.960813 3.500000 -3.800000 34.788395 3.500000 -3.700000 33.635978 3.500000 -3.600000 32.503560 3.500000 -3.500000 31.391143 3.500000 -3.400000 30.298726 3.500000 -3.300000 29.226308 3.500000 -3.200000 28.173891 3.500000 -3.100000 27.141473 3.500000 -3.000000 26.129056 3.500000 -2.900000 25.136638 3.500000 -2.800000 24.164221 3.500000 -2.700000 23.211803 3.500000 -2.600000 22.279386 3.500000 -2.500000 21.366969 3.500000 -2.400000 20.474551 3.500000 -2.300000 19.602134 3.500000 -2.200000 18.749716 3.500000 -2.100000 17.917299 3.500000 -2.000000 17.104881 3.500000 -1.900000 16.312464 3.500000 -1.800000 15.540046 3.500000 -1.700000 14.787629 3.500000 -1.600000 14.055212 3.500000 -1.500000 13.342794 3.500000 -1.400000 12.650377 3.500000 -1.300000 11.977959 3.500000 -1.200000 11.325542 3.500000 -1.100000 10.693124 3.500000 -1.000000 10.080707 3.500000 -0.900000 9.488289 3.500000 -0.800000 8.915872 3.500000 -0.700000 8.363455 3.500000 -0.600000 7.831037 3.500000 -0.500000 7.318620 3.500000 -0.400000 6.826202 3.500000 -0.300000 6.353785 3.500000 -0.200000 5.901367 3.500000 -0.100000 5.468950 3.500000 -0.000000 5.056532 3.500000 0.100000 4.664115 3.500000 0.200000 4.291698 3.500000 0.300000 3.939280 3.500000 0.400000 3.606863 3.500000 0.500000 3.294445 3.500000 0.600000 3.002028 3.500000 0.700000 2.729610 3.500000 0.800000 2.477193 3.500000 0.900000 2.244775 3.500000 1.000000 2.032358 3.500000 1.100000 1.839941 3.500000 1.200000 1.667523 3.500000 1.300000 1.515106 3.500000 1.400000 1.382688 3.500000 1.500000 1.270271 3.500000 1.600000 1.177853 3.500000 1.700000 1.105436 3.500000 1.800000 1.053018 3.500000 1.900000 1.020601 3.500000 2.000000 1.008184 3.500000 2.100000 1.015766 3.500000 2.200000 1.043349 3.500000 2.300000 1.090931 3.500000 2.400000 1.158514 3.500000 2.500000 1.246096 3.500000 2.600000 1.353679 3.500000 2.700000 1.481261 3.500000 2.800000 1.628844 3.500000 2.900000 1.796426 3.500000 3.000000 1.984009 3.500000 3.100000 2.191592 3.500000 3.200000 2.419174 3.500000 3.300000 2.666757 3.500000 3.400000 2.934339 3.500000 3.500000 3.221922 3.500000 3.600000 3.529504 3.500000 3.700000 3.857087 3.500000 3.800000 4.204669 3.500000 3.900000 4.572252 3.500000 4.000000 4.959835 3.500000 4.100000 5.367417 3.500000 4.200000 5.795000 3.500000 4.300000 6.242582 3.500000 4.400000 6.710165 3.500000 4.500000 7.197747 3.500000 4.600000 7.705330 3.500000 4.700000 8.232912 3.500000 4.800000 8.780495 3.500000 4.900000 9.348078 3.500000 5.000000 9.935660 3.500000 5.100000 10.543243 3.500000 5.200000 11.170825 3.500000 5.300000 11.818408 3.500000 5.400000 12.485990 3.500000 5.500000 13.173573 3.500000 5.600000 13.881155 3.500000 5.700000 14.608738 3.500000 5.800000 15.356321 3.500000 5.900000 16.123903 3.500000 6.000000 16.911486 3.500000 6.100000 17.719068 3.500000 6.200000 18.546651 3.500000 6.300000 19.394233 3.500000 6.400000 20.261816 3.500000 6.500000 21.149398 3.500000 6.600000 22.056981 3.500000 6.700000 22.984564 3.500000 6.800000 23.932146 3.500000 6.900000 24.899729 3.500000 7.000000 25.887311 3.500000 7.100000 26.894894 3.500000 7.200000 27.922476 3.500000 7.300000 28.970059 3.500000 7.400000 30.037641 3.500000 7.500000 31.125224 3.500000 7.600000 32.232807 3.500000 7.700000 33.360389 3.500000 7.800000 34.507972 3.500000 7.900000 35.675554 3.500000 8.000000 36.863137 3.500000 8.100000 38.070719 3.500000 8.200000 39.298302 3.500000 8.300000 40.545884 3.500000 8.400000 41.813467 3.500000 8.500000 43.101050 3.500000 8.600000 44.408632 3.500000 8.700000 45.736215 3.500000 8.800000 47.083797 3.500000 8.900000 48.451380 3.500000 9.000000 49.838962 3.500000 9.100000 51.246545 3.500000 9.200000 52.674127 3.500000 9.300000 54.121710 3.500000 9.400000 55.589293 3.500000 9.500000 57.076875 3.500000 9.600000 58.584458 3.500000 9.700000 60.112040 3.500000 9.800000 61.659623 3.500000 9.900000 63.227205 3.500000 10.000000 64.814788 3.500000 10.100000 66.422370 3.500000 10.200000 68.049953 3.500000 10.300000 69.697536 3.500000 10.400000 71.365118 3.500000 10.500000 73.052701 3.500000 10.600000 74.760283 3.500000 10.700000 76.487866 3.500000 10.800000 78.235448 3.500000 10.900000 80.003031 3.500000 11.000000 81.790613 3.500000 11.100000 83.598196 3.500000 11.200000 85.425778 3.500000 11.300000 87.273361 3.500000 11.400000 89.140944 3.500000 11.500000 91.028526 3.500000 11.600000 92.936109 3.500000 11.700000 94.863691 3.500000 11.800000 96.811274 3.500000 11.900000 98.778856 3.500000 12.000000 100.766439 3.500000 12.100000 102.774021 3.500000 12.200000 104.801604 3.500000 12.300000 106.849187 3.500000 12.400000 108.916769 3.500000 12.500000 111.004352 3.500000 12.600000 113.111934 3.500000 12.700000 115.239517 3.500000 12.800000 117.387099 3.500000 12.900000 119.554682 3.500000 13.000000 121.742264 3.500000 13.100000 123.949847 3.500000 13.200000 126.177430 3.500000 13.300000 128.425012 3.500000 13.400000 130.692595 3.500000 13.500000 132.980177 3.500000 13.600000 135.287760 3.500000 13.700000 137.615342 3.500000 13.800000 139.962925 3.500000 13.900000 142.330507 3.500000 14.000000 144.718090 3.500000 14.100000 147.125673 3.500000 14.200000 149.553255 3.500000 14.300000 152.000838 3.500000 14.400000 154.468420 3.500000 14.500000 156.956003 3.500000 14.600000 159.463585 3.500000 14.700000 161.991168 3.500000 14.800000 164.538750 3.500000 14.900000 167.106333 3.500000 15.000000 169.693916 3.600000 -5.000000 49.617434 3.600000 -4.900000 48.238503 3.600000 -4.800000 46.879573 3.600000 -4.700000 45.540642 3.600000 -4.600000 44.221711 3.600000 -4.500000 42.922781 3.600000 -4.400000 41.643850 3.600000 -4.300000 40.384919 3.600000 -4.200000 39.145989 3.600000 -4.100000 37.927058 3.600000 -4.000000 36.728127 3.600000 -3.900000 35.549197 3.600000 -3.800000 34.390266 3.600000 -3.700000 33.251335 3.600000 -3.600000 32.132405 3.600000 -3.500000 31.033474 3.600000 -3.400000 29.954543 3.600000 -3.300000 28.895613 3.600000 -3.200000 27.856682 3.600000 -3.100000 26.837751 3.600000 -3.000000 25.838821 3.600000 -2.900000 24.859890 3.600000 -2.800000 23.900959 3.600000 -2.700000 22.962029 3.600000 -2.600000 22.043098 3.600000 -2.500000 21.144168 3.600000 -2.400000 20.265237 3.600000 -2.300000 19.406306 3.600000 -2.200000 18.567376 3.600000 -2.100000 17.748445 3.600000 -2.000000 16.949514 3.600000 -1.900000 16.170584 3.600000 -1.800000 15.411653 3.600000 -1.700000 14.672722 3.600000 -1.600000 13.953792 3.600000 -1.500000 13.254861 3.600000 -1.400000 12.575930 3.600000 -1.300000 11.917000 3.600000 -1.200000 11.278069 3.600000 -1.100000 10.659138 3.600000 -1.000000 10.060208 3.600000 -0.900000 9.481277 3.600000 -0.800000 8.922346 3.600000 -0.700000 8.383416 3.600000 -0.600000 7.864485 3.600000 -0.500000 7.365554 3.600000 -0.400000 6.886624 3.600000 -0.300000 6.427693 3.600000 -0.200000 5.988762 3.600000 -0.100000 5.569832 3.600000 -0.000000 5.170901 3.600000 0.100000 4.791970 3.600000 0.200000 4.433040 3.600000 0.300000 4.094109 3.600000 0.400000 3.775178 3.600000 0.500000 3.476248 3.600000 0.600000 3.197317 3.600000 0.700000 2.938386 3.600000 0.800000 2.699456 3.600000 0.900000 2.480525 3.600000 1.000000 2.281595 3.600000 1.100000 2.102664 3.600000 1.200000 1.943733 3.600000 1.300000 1.804803 3.600000 1.400000 1.685872 3.600000 1.500000 1.586941 3.600000 1.600000 1.508011 3.600000 1.700000 1.449080 3.600000 1.800000 1.410149 3.600000 1.900000 1.391219 3.600000 2.000000 1.392288 3.600000 2.100000 1.413357 3.600000 2.200000 1.454427 3.600000 2.300000 1.515496 3.600000 2.400000 1.596565 3.600000 2.500000 1.697635 3.600000 2.600000 1.818704 3.600000 2.700000 1.959773 3.600000 2.800000 2.120843 3.600000 2.900000 2.301912 3.600000 3.000000 2.502981 3.600000 3.100000 2.724051 3.600000 3.200000 2.965120 3.600000 3.300000 3.226189 3.600000 3.400000 3.507259 3.600000 3.500000 3.808328 3.600000 3.600000 4.129397 3.600000 3.700000 4.470467 3.600000 3.800000 4.831536 3.600000 3.900000 5.212605 3.600000 4.000000 5.613675 3.600000 4.100000 6.034744 3.600000 4.200000 6.475813 3.600000 4.300000 6.936883 3.600000 4.400000 7.417952 3.600000 4.500000 7.919021 3.600000 4.600000 8.440091 3.600000 4.700000 8.981160 3.600000 4.800000 9.542230 3.600000 4.900000 10.123299 3.600000 5.000000 10.724368 3.600000 5.100000 11.345438 3.600000 5.200000 11.986507 3.600000 5.300000 12.647576 3.600000 5.400000 13.328646 3.600000 5.500000 14.029715 3.600000 5.600000 14.750784 3.600000 5.700000 15.491854 3.600000 5.800000 16.252923 3.600000 5.900000 17.033992 3.600000 6.000000 17.835062 3.600000 6.100000 18.656131 3.600000 6.200000 19.497200 3.600000 6.300000 20.358270 3.600000 6.400000 21.239339 3.600000 6.500000 22.140408 3.600000 6.600000 23.061478 3.600000 6.700000 24.002547 3.600000 6.800000 24.963616 3.600000 6.900000 25.944686 3.600000 7.000000 26.945755 3.600000 7.100000 27.966824 3.600000 7.200000 29.007894 3.600000 7.300000 30.068963 3.600000 7.400000 31.150032 3.600000 7.500000 32.251102 3.600000 7.600000 33.372171 3.600000 7.700000 34.513240 3.600000 7.800000 35.674310 3.600000 7.900000 36.855379 3.600000 8.000000 38.056448 3.600000 8.100000 39.277518 3.600000 8.200000 40.518587 3.600000 8.300000 41.779657 3.600000 8.400000 43.060726 3.600000 8.500000 44.361795 3.600000 8.600000 45.682865 3.600000 8.700000 47.023934 3.600000 8.800000 48.385003 3.600000 8.900000 49.766073 3.600000 9.000000 51.167142 3.600000 9.100000 52.588211 3.600000 9.200000 54.029281 3.600000 9.300000 55.490350 3.600000 9.400000 56.971419 3.600000 9.500000 58.472489 3.600000 9.600000 59.993558 3.600000 9.700000 61.534627 3.600000 9.800000 63.095697 3.600000 9.900000 64.676766 3.600000 10.000000 66.277835 3.600000 10.100000 67.898905 3.600000 10.200000 69.539974 3.600000 10.300000 71.201043 3.600000 10.400000 72.882113 3.600000 10.500000 74.583182 3.600000 10.600000 76.304251 3.600000 10.700000 78.045321 3.600000 10.800000 79.806390 3.600000 10.900000 81.587459 3.600000 11.000000 83.388529 3.600000 11.100000 85.209598 3.600000 11.200000 87.050667 3.600000 11.300000 88.911737 3.600000 11.400000 90.792806 3.600000 11.500000 92.693875 3.600000 11.600000 94.614945 3.600000 11.700000 96.556014 3.600000 11.800000 98.517084 3.600000 11.900000 100.498153 3.600000 12.000000 102.499222 3.600000 12.100000 104.520292 3.600000 12.200000 106.561361 3.600000 12.300000 108.622430 3.600000 12.400000 110.703500 3.600000 12.500000 112.804569 3.600000 12.600000 114.925638 3.600000 12.700000 117.066708 3.600000 12.800000 119.227777 3.600000 12.900000 121.408846 3.600000 13.000000 123.609916 3.600000 13.100000 125.830985 3.600000 13.200000 128.072054 3.600000 13.300000 130.333124 3.600000 13.400000 132.614193 3.600000 13.500000 134.915262 3.600000 13.600000 137.236332 3.600000 13.700000 139.577401 3.600000 13.800000 141.938470 3.600000 13.900000 144.319540 3.600000 14.000000 146.720609 3.600000 14.100000 149.141678 3.600000 14.200000 151.582748 3.600000 14.300000 154.043817 3.600000 14.400000 156.524886 3.600000 14.500000 159.025956 3.600000 14.600000 161.547025 3.600000 14.700000 164.088094 3.600000 14.800000 166.649164 3.600000 14.900000 169.230233 3.600000 15.000000 171.831302 3.700000 -5.000000 49.188138 3.700000 -4.900000 47.822177 3.700000 -4.800000 46.476217 3.700000 -4.700000 45.150256 3.700000 -4.600000 43.844295 3.700000 -4.500000 42.558335 3.700000 -4.400000 41.292374 3.700000 -4.300000 40.046414 3.700000 -4.200000 38.820453 3.700000 -4.100000 37.614492 3.700000 -4.000000 36.428532 3.700000 -3.900000 35.262571 3.700000 -3.800000 34.116610 3.700000 -3.700000 32.990650 3.700000 -3.600000 31.884689 3.700000 -3.500000 30.798729 3.700000 -3.400000 29.732768 3.700000 -3.300000 28.686807 3.700000 -3.200000 27.660847 3.700000 -3.100000 26.654886 3.700000 -3.000000 25.668926 3.700000 -2.900000 24.702965 3.700000 -2.800000 23.757004 3.700000 -2.700000 22.831044 3.700000 -2.600000 21.925083 3.700000 -2.500000 21.039123 3.700000 -2.400000 20.173162 3.700000 -2.300000 19.327201 3.700000 -2.200000 18.501241 3.700000 -2.100000 17.695280 3.700000 -2.000000 16.909320 3.700000 -1.900000 16.143359 3.700000 -1.800000 15.397398 3.700000 -1.700000 14.671438 3.700000 -1.600000 13.965477 3.700000 -1.500000 13.279517 3.700000 -1.400000 12.613556 3.700000 -1.300000 11.967595 3.700000 -1.200000 11.341635 3.700000 -1.100000 10.735674 3.700000 -1.000000 10.149713 3.700000 -0.900000 9.583753 3.700000 -0.800000 9.037792 3.700000 -0.700000 8.511832 3.700000 -0.600000 8.005871 3.700000 -0.500000 7.519910 3.700000 -0.400000 7.053950 3.700000 -0.300000 6.607989 3.700000 -0.200000 6.182029 3.700000 -0.100000 5.776068 3.700000 -0.000000 5.390107 3.700000 0.100000 5.024147 3.700000 0.200000 4.678186 3.700000 0.300000 4.352226 3.700000 0.400000 4.046265 3.700000 0.500000 3.760304 3.700000 0.600000 3.494344 3.700000 0.700000 3.248383 3.700000 0.800000 3.022423 3.700000 0.900000 2.816462 3.700000 1.000000 2.630501 3.700000 1.100000 2.464541 3.700000 1.200000 2.318580 3.700000 1.300000 2.192620 3.700000 1.400000 2.086659 3.700000 1.500000 2.000698 3.700000 1.600000 1.934738 3.700000 1.700000 1.888777 3.700000 1.800000 1.862816 3.700000 1.900000 1.856856 3.700000 2.000000 1.870895 3.700000 2.100000 1.904935 3.700000 2.200000 1.958974 3.700000 2.300000 2.033013 3.700000 2.400000 2.127053 3.700000 2.500000 2.241092 3.700000 2.600000 2.375132 3.700000 2.700000 2.529171 3.700000 2.800000 2.703210 3.700000 2.900000 2.897250 3.700000 3.000000 3.111289 3.700000 3.100000 3.345329 3.700000 3.200000 3.599368 3.700000 3.300000 3.873407 3.700000 3.400000 4.167447 3.700000 3.500000 4.481486 3.700000 3.600000 4.815526 3.700000 3.700000 5.169565 3.700000 3.800000 5.543604 3.700000 3.900000 5.937644 3.700000 4.000000 6.351683 3.700000 4.100000 6.785723 3.700000 4.200000 7.239762 3.700000 4.300000 7.713801 3.700000 4.400000 8.207841 3.700000 4.500000 8.721880 3.700000 4.600000 9.255919 3.700000 4.700000 9.809959 3.700000 4.800000 10.383998 3.700000 4.900000 10.978038 3.700000 5.000000 11.592077 3.700000 5.100000 12.226116 3.700000 5.200000 12.880156 3.700000 5.300000 13.554195 3.700000 5.400000 14.248235 3.700000 5.500000 14.962274 3.700000 5.600000 15.696313 3.700000 5.700000 16.450353 3.700000 5.800000 17.224392 3.700000 5.900000 18.018432 3.700000 6.000000 18.832471 3.700000 6.100000 19.666510 3.700000 6.200000 20.520550 3.700000 6.300000 21.394589 3.700000 6.400000 22.288629 3.700000 6.500000 23.202668 3.700000 6.600000 24.136707 3.700000 6.700000 25.090747 3.700000 6.800000 26.064786 3.700000 6.900000 27.058826 3.700000 7.000000 28.072865 3.700000 7.100000 29.106904 3.700000 7.200000 30.160944 3.700000 7.300000 31.234983 3.700000 7.400000 32.329022 3.700000 7.500000 33.443062 3.700000 7.600000 34.577101 3.700000 7.700000 35.731141 3.700000 7.800000 36.905180 3.700000 7.900000 38.099219 3.700000 8.000000 39.313259 3.700000 8.100000 40.547298 3.700000 8.200000 41.801338 3.700000 8.300000 43.075377 3.700000 8.400000 44.369416 3.700000 8.500000 45.683456 3.700000 8.600000 47.017495 3.700000 8.700000 48.371535 3.700000 8.800000 49.745574 3.700000 8.900000 51.139613 3.700000 9.000000 52.553653 3.700000 9.100000 53.987692 3.700000 9.200000 55.441732 3.700000 9.300000 56.915771 3.700000 9.400000 58.409810 3.700000 9.500000 59.923850 3.700000 9.600000 61.457889 3.700000 9.700000 63.011929 3.700000 9.800000 64.585968 3.700000 9.900000 66.180007 3.700000 10.000000 67.794047 3.700000 10.100000 69.428086 3.700000 10.200000 71.082125 3.700000 10.300000 72.756165 3.700000 10.400000 74.450204 3.700000 10.500000 76.164244 3.700000 10.600000 77.898283 3.700000 10.700000 79.652322 3.700000 10.800000 81.426362 3.700000 10.900000 83.220401 3.700000 11.000000 85.034441 3.700000 11.100000 86.868480 3.700000 11.200000 88.722519 3.700000 11.300000 90.596559 3.700000 11.400000 92.490598 3.700000 11.500000 94.404638 3.700000 11.600000 96.338677 3.700000 11.700000 98.292716 3.700000 11.800000 100.266756 3.700000 11.900000 102.260795 3.700000 12.000000 104.274835 3.700000 12.100000 106.308874 3.700000 12.200000 108.362913 3.700000 12.300000 110.436953 3.700000 12.400000 112.530992 3.700000 12.500000 114.645032 3.700000 12.600000 116.779071 3.700000 12.700000 118.933110 3.700000 12.800000 121.107150 3.700000 12.900000 123.301189 3.700000 13.000000 125.515228 3.700000 13.100000 127.749268 3.700000 13.200000 130.003307 3.700000 13.300000 132.277347 3.700000 13.400000 134.571386 3.700000 13.500000 136.885425 3.700000 13.600000 139.219465 3.700000 13.700000 141.573504 3.700000 13.800000 143.947544 3.700000 13.900000 146.341583 3.700000 14.000000 148.755622 3.700000 14.100000 151.189662 3.700000 14.200000 153.643701 3.700000 14.300000 156.117741 3.700000 14.400000 158.611780 3.700000 14.500000 161.125819 3.700000 14.600000 163.659859 3.700000 14.700000 166.213898 3.700000 14.800000 168.787938 3.700000 14.900000 171.381977 3.700000 15.000000 173.996016 3.800000 -5.000000 48.883843 3.800000 -4.900000 47.530335 3.800000 -4.800000 46.196828 3.800000 -4.700000 44.883321 3.800000 -4.600000 43.589813 3.800000 -4.500000 42.316306 3.800000 -4.400000 41.062799 3.800000 -4.300000 39.829291 3.800000 -4.200000 38.615784 3.800000 -4.100000 37.422277 3.800000 -4.000000 36.248770 3.800000 -3.900000 35.095262 3.800000 -3.800000 33.961755 3.800000 -3.700000 32.848248 3.800000 -3.600000 31.754740 3.800000 -3.500000 30.681233 3.800000 -3.400000 29.627726 3.800000 -3.300000 28.594219 3.800000 -3.200000 27.580711 3.800000 -3.100000 26.587204 3.800000 -3.000000 25.613697 3.800000 -2.900000 24.660189 3.800000 -2.800000 23.726682 3.800000 -2.700000 22.813175 3.800000 -2.600000 21.919667 3.800000 -2.500000 21.046160 3.800000 -2.400000 20.192653 3.800000 -2.300000 19.359146 3.800000 -2.200000 18.545638 3.800000 -2.100000 17.752131 3.800000 -2.000000 16.978624 3.800000 -1.900000 16.225116 3.800000 -1.800000 15.491609 3.800000 -1.700000 14.778102 3.800000 -1.600000 14.084594 3.800000 -1.500000 13.411087 3.800000 -1.400000 12.757580 3.800000 -1.300000 12.124073 3.800000 -1.200000 11.510565 3.800000 -1.100000 10.917058 3.800000 -1.000000 10.343551 3.800000 -0.900000 9.790043 3.800000 -0.800000 9.256536 3.800000 -0.700000 8.743029 3.800000 -0.600000 8.249522 3.800000 -0.500000 7.776014 3.800000 -0.400000 7.322507 3.800000 -0.300000 6.889000 3.800000 -0.200000 6.475492 3.800000 -0.100000 6.081985 3.800000 -0.000000 5.708478 3.800000 0.100000 5.354970 3.800000 0.200000 5.021463 3.800000 0.300000 4.707956 3.800000 0.400000 4.414449 3.800000 0.500000 4.140941 3.800000 0.600000 3.887434 3.800000 0.700000 3.653927 3.800000 0.800000 3.440419 3.800000 0.900000 3.246912 3.800000 1.000000 3.073405 3.800000 1.100000 2.919898 3.800000 1.200000 2.786390 3.800000 1.300000 2.672883 3.800000 1.400000 2.579376 3.800000 1.500000 2.505868 3.800000 1.600000 2.452361 3.800000 1.700000 2.418854 3.800000 1.800000 2.405346 3.800000 1.900000 2.411839 3.800000 2.000000 2.438332 3.800000 2.100000 2.484825 3.800000 2.200000 2.551317 3.800000 2.300000 2.637810 3.800000 2.400000 2.744303 3.800000 2.500000 2.870795 3.800000 2.600000 3.017288 3.800000 2.700000 3.183781 3.800000 2.800000 3.370274 3.800000 2.900000 3.576766 3.800000 3.000000 3.803259 3.800000 3.100000 4.049752 3.800000 3.200000 4.316244 3.800000 3.300000 4.602737 3.800000 3.400000 4.909230 3.800000 3.500000 5.235722 3.800000 3.600000 5.582215 3.800000 3.700000 5.948708 3.800000 3.800000 6.335201 3.800000 3.900000 6.741693 3.800000 4.000000 7.168186 3.800000 4.100000 7.614679 3.800000 4.200000 8.081171 3.800000 4.300000 8.567664 3.800000 4.400000 9.074157 3.800000 4.500000 9.600649 3.800000 4.600000 10.147142 3.800000 4.700000 10.713635 3.800000 4.800000 11.300128 3.800000 4.900000 11.906620 3.800000 5.000000 12.533113 3.800000 5.100000 13.179606 3.800000 5.200000 13.846098 3.800000 5.300000 14.532591 3.800000 5.400000 15.239084 3.800000 5.500000 15.965577 3.800000 5.600000 16.712069 3.800000 5.700000 17.478562 3.800000 5.800000 18.265055 3.800000 5.900000 19.071547 3.800000 6.000000 19.898040 3.800000 6.100000 20.744533 3.800000 6.200000 21.611025 3.800000 6.300000 22.497518 3.800000 6.400000 23.404011 3.800000 6.500000 24.330504 3.800000 6.600000 25.276996 3.800000 6.700000 26.243489 3.800000 6.800000 27.229982 3.800000 6.900000 28.236474 3.800000 7.000000 29.262967 3.800000 7.100000 30.309460 3.800000 7.200000 31.375953 3.800000 7.300000 32.462445 3.800000 7.400000 33.568938 3.800000 7.500000 34.695431 3.800000 7.600000 35.841923 3.800000 7.700000 37.008416 3.800000 7.800000 38.194909 3.800000 7.900000 39.401401 3.800000 8.000000 40.627894 3.800000 8.100000 41.874387 3.800000 8.200000 43.140880 3.800000 8.300000 44.427372 3.800000 8.400000 45.733865 3.800000 8.500000 47.060358 3.800000 8.600000 48.406850 3.800000 8.700000 49.773343 3.800000 8.800000 51.159836 3.800000 8.900000 52.566329 3.800000 9.000000 53.992821 3.800000 9.100000 55.439314 3.800000 9.200000 56.905807 3.800000 9.300000 58.392299 3.800000 9.400000 59.898792 3.800000 9.500000 61.425285 3.800000 9.600000 62.971777 3.800000 9.700000 64.538270 3.800000 9.800000 66.124763 3.800000 9.900000 67.731256 3.800000 10.000000 69.357748 3.800000 10.100000 71.004241 3.800000 10.200000 72.670734 3.800000 10.300000 74.357226 3.800000 10.400000 76.063719 3.800000 10.500000 77.790212 3.800000 10.600000 79.536705 3.800000 10.700000 81.303197 3.800000 10.800000 83.089690 3.800000 10.900000 84.896183 3.800000 11.000000 86.722675 3.800000 11.100000 88.569168 3.800000 11.200000 90.435661 3.800000 11.300000 92.322153 3.800000 11.400000 94.228646 3.800000 11.500000 96.155139 3.800000 11.600000 98.101632 3.800000 11.700000 100.068124 3.800000 11.800000 102.054617 3.800000 11.900000 104.061110 3.800000 12.000000 106.087602 3.800000 12.100000 108.134095 3.800000 12.200000 110.200588 3.800000 12.300000 112.287080 3.800000 12.400000 114.393573 3.800000 12.500000 116.520066 3.800000 12.600000 118.666559 3.800000 12.700000 120.833051 3.800000 12.800000 123.019544 3.800000 12.900000 125.226037 3.800000 13.000000 127.452529 3.800000 13.100000 129.699022 3.800000 13.200000 131.965515 3.800000 13.300000 134.252008 3.800000 13.400000 136.558500 3.800000 13.500000 138.884993 3.800000 13.600000 141.231486 3.800000 13.700000 143.597978 3.800000 13.800000 145.984471 3.800000 13.900000 148.390964 3.800000 14.000000 150.817456 3.800000 14.100000 153.263949 3.800000 14.200000 155.730442 3.800000 14.300000 158.216935 3.800000 14.400000 160.723427 3.800000 14.500000 163.249920 3.800000 14.600000 165.796413 3.800000 14.700000 168.362905 3.800000 14.800000 170.949398 3.800000 14.900000 173.555891 3.800000 15.000000 176.182384 3.900000 -5.000000 48.698102 3.900000 -4.900000 47.356531 3.900000 -4.800000 46.034960 3.900000 -4.700000 44.733389 3.900000 -4.600000 43.451819 3.900000 -4.500000 42.190248 3.900000 -4.400000 40.948677 3.900000 -4.300000 39.727107 3.900000 -4.200000 38.525536 3.900000 -4.100000 37.343965 3.900000 -4.000000 36.182394 3.900000 -3.900000 35.040824 3.900000 -3.800000 33.919253 3.900000 -3.700000 32.817682 3.900000 -3.600000 31.736111 3.900000 -3.500000 30.674541 3.900000 -3.400000 29.632970 3.900000 -3.300000 28.611399 3.900000 -3.200000 27.609829 3.900000 -3.100000 26.628258 3.900000 -3.000000 25.666687 3.900000 -2.900000 24.725116 3.900000 -2.800000 23.803546 3.900000 -2.700000 22.901975 3.900000 -2.600000 22.020404 3.900000 -2.500000 21.158834 3.900000 -2.400000 20.317263 3.900000 -2.300000 19.495692 3.900000 -2.200000 18.694121 3.900000 -2.100000 17.912551 3.900000 -2.000000 17.150980 3.900000 -1.900000 16.409409 3.900000 -1.800000 15.687839 3.900000 -1.700000 14.986268 3.900000 -1.600000 14.304697 3.900000 -1.500000 13.643126 3.900000 -1.400000 13.001556 3.900000 -1.300000 12.379985 3.900000 -1.200000 11.778414 3.900000 -1.100000 11.196843 3.900000 -1.000000 10.635273 3.900000 -0.900000 10.093702 3.900000 -0.800000 9.572131 3.900000 -0.700000 9.070561 3.900000 -0.600000 8.588990 3.900000 -0.500000 8.127419 3.900000 -0.400000 7.685848 3.900000 -0.300000 7.264278 3.900000 -0.200000 6.862707 3.900000 -0.100000 6.481136 3.900000 -0.000000 6.119566 3.900000 0.100000 5.777995 3.900000 0.200000 5.456424 3.900000 0.300000 5.154853 3.900000 0.400000 4.873283 3.900000 0.500000 4.611712 3.900000 0.600000 4.370141 3.900000 0.700000 4.148570 3.900000 0.800000 3.947000 3.900000 0.900000 3.765429 3.900000 1.000000 3.603858 3.900000 1.100000 3.462288 3.900000 1.200000 3.340717 3.900000 1.300000 3.239146 3.900000 1.400000 3.157575 3.900000 1.500000 3.096005 3.900000 1.600000 3.054434 3.900000 1.700000 3.032863 3.900000 1.800000 3.031293 3.900000 1.900000 3.049722 3.900000 2.000000 3.088151 3.900000 2.100000 3.146580 3.900000 2.200000 3.225010 3.900000 2.300000 3.323439 3.900000 2.400000 3.441868 3.900000 2.500000 3.580298 3.900000 2.600000 3.738727 3.900000 2.700000 3.917156 3.900000 2.800000 4.115585 3.900000 2.900000 4.334015 3.900000 3.000000 4.572444 3.900000 3.100000 4.830873 3.900000 3.200000 5.109302 3.900000 3.300000 5.407732 3.900000 3.400000 5.726161 3.900000 3.500000 6.064590 3.900000 3.600000 6.423020 3.900000 3.700000 6.801449 3.900000 3.800000 7.199878 3.900000 3.900000 7.618307 3.900000 4.000000 8.056737 3.900000 4.100000 8.515166 3.900000 4.200000 8.993595 3.900000 4.300000 9.492025 3.900000 4.400000 10.010454 3.900000 4.500000 10.548883 3.900000 4.600000 11.107312 3.900000 4.700000 11.685742 3.900000 4.800000 12.284171 3.900000 4.900000 12.902600 3.900000 5.000000 13.541030 3.900000 5.100000 14.199459 3.900000 5.200000 14.877888 3.900000 5.300000 15.576317 3.900000 5.400000 16.294747 3.900000 5.500000 17.033176 3.900000 5.600000 17.791605 3.900000 5.700000 18.570034 3.900000 5.800000 19.368464 3.900000 5.900000 20.186893 3.900000 6.000000 21.025322 3.900000 6.100000 21.883752 3.900000 6.200000 22.762181 3.900000 6.300000 23.660610 3.900000 6.400000 24.579039 3.900000 6.500000 25.517469 3.900000 6.600000 26.475898 3.900000 6.700000 27.454327 3.900000 6.800000 28.452757 3.900000 6.900000 29.471186 3.900000 7.000000 30.509615 3.900000 7.100000 31.568044 3.900000 7.200000 32.646474 3.900000 7.300000 33.744903 3.900000 7.400000 34.863332 3.900000 7.500000 36.001761 3.900000 7.600000 37.160191 3.900000 7.700000 38.338620 3.900000 7.800000 39.537049 3.900000 7.900000 40.755479 3.900000 8.000000 41.993908 3.900000 8.100000 43.252337 3.900000 8.200000 44.530766 3.900000 8.300000 45.829196 3.900000 8.400000 47.147625 3.900000 8.500000 48.486054 3.900000 8.600000 49.844484 3.900000 8.700000 51.222913 3.900000 8.800000 52.621342 3.900000 8.900000 54.039771 3.900000 9.000000 55.478201 3.900000 9.100000 56.936630 3.900000 9.200000 58.415059 3.900000 9.300000 59.913489 3.900000 9.400000 61.431918 3.900000 9.500000 62.970347 3.900000 9.600000 64.528776 3.900000 9.700000 66.107206 3.900000 9.800000 67.705635 3.900000 9.900000 69.324064 3.900000 10.000000 70.962493 3.900000 10.100000 72.620923 3.900000 10.200000 74.299352 3.900000 10.300000 75.997781 3.900000 10.400000 77.716211 3.900000 10.500000 79.454640 3.900000 10.600000 81.213069 3.900000 10.700000 82.991498 3.900000 10.800000 84.789928 3.900000 10.900000 86.608357 3.900000 11.000000 88.446786 3.900000 11.100000 90.305216 3.900000 11.200000 92.183645 3.900000 11.300000 94.082074 3.900000 11.400000 96.000503 3.900000 11.500000 97.938933 3.900000 11.600000 99.897362 3.900000 11.700000 101.875791 3.900000 11.800000 103.874220 3.900000 11.900000 105.892650 3.900000 12.000000 107.931079 3.900000 12.100000 109.989508 3.900000 12.200000 112.067938 3.900000 12.300000 114.166367 3.900000 12.400000 116.284796 3.900000 12.500000 118.423225 3.900000 12.600000 120.581655 3.900000 12.700000 122.760084 3.900000 12.800000 124.958513 3.900000 12.900000 127.176943 3.900000 13.000000 129.415372 3.900000 13.100000 131.673801 3.900000 13.200000 133.952230 3.900000 13.300000 136.250660 3.900000 13.400000 138.569089 3.900000 13.500000 140.907518 3.900000 13.600000 143.265948 3.900000 13.700000 145.644377 3.900000 13.800000 148.042806 3.900000 13.900000 150.461235 3.900000 14.000000 152.899665 3.900000 14.100000 155.358094 3.900000 14.200000 157.836523 3.900000 14.300000 160.334952 3.900000 14.400000 162.853382 3.900000 14.500000 165.391811 3.900000 14.600000 167.950240 3.900000 14.700000 170.528670 3.900000 14.800000 173.127099 3.900000 14.900000 175.745528 3.900000 15.000000 178.383957 4.000000 -5.000000 48.623750 4.000000 -4.900000 47.293599 4.000000 -4.800000 45.983448 4.000000 -4.700000 44.693298 4.000000 -4.600000 43.423147 4.000000 -4.500000 42.172996 4.000000 -4.400000 40.942845 4.000000 -4.300000 39.732694 4.000000 -4.200000 38.542543 4.000000 -4.100000 37.372392 4.000000 -4.000000 36.222241 4.000000 -3.900000 35.092090 4.000000 -3.800000 33.981940 4.000000 -3.700000 32.891789 4.000000 -3.600000 31.821638 4.000000 -3.500000 30.771487 4.000000 -3.400000 29.741336 4.000000 -3.300000 28.731185 4.000000 -3.200000 27.741034 4.000000 -3.100000 26.770883 4.000000 -3.000000 25.820732 4.000000 -2.900000 24.890582 4.000000 -2.800000 23.980431 4.000000 -2.700000 23.090280 4.000000 -2.600000 22.220129 4.000000 -2.500000 21.369978 4.000000 -2.400000 20.539827 4.000000 -2.300000 19.729676 4.000000 -2.200000 18.939525 4.000000 -2.100000 18.169375 4.000000 -2.000000 17.419224 4.000000 -1.900000 16.689073 4.000000 -1.800000 15.978922 4.000000 -1.700000 15.288771 4.000000 -1.600000 14.618620 4.000000 -1.500000 13.968469 4.000000 -1.400000 13.338318 4.000000 -1.300000 12.728167 4.000000 -1.200000 12.138017 4.000000 -1.100000 11.567866 4.000000 -1.000000 11.017715 4.000000 -0.900000 10.487564 4.000000 -0.800000 9.977413 4.000000 -0.700000 9.487262 4.000000 -0.600000 9.017111 4.000000 -0.500000 8.566960 4.000000 -0.400000 8.136809 4.000000 -0.300000 7.726659 4.000000 -0.200000 7.336508 4.000000 -0.100000 6.966357 4.000000 -0.000000 6.616206 4.000000 0.100000 6.286055 4.000000 0.200000 5.975904 4.000000 0.300000 5.685753 4.000000 0.400000 5.415602 4.000000 0.500000 5.165452 4.000000 0.600000 4.935301 4.000000 0.700000 4.725150 4.000000 0.800000 4.534999 4.000000 0.900000 4.364848 4.000000 1.000000 4.214697 4.000000 1.100000 4.084546 4.000000 1.200000 3.974395 4.000000 1.300000 3.884244 4.000000 1.400000 3.814094 4.000000 1.500000 3.763943 4.000000 1.600000 3.733792 4.000000 1.700000 3.723641 4.000000 1.800000 3.733490 4.000000 1.900000 3.763339 4.000000 2.000000 3.813188 4.000000 2.100000 3.883037 4.000000 2.200000 3.972886 4.000000 2.300000 4.082736 4.000000 2.400000 4.212585 4.000000 2.500000 4.362434 4.000000 2.600000 4.532283 4.000000 2.700000 4.722132 4.000000 2.800000 4.931981 4.000000 2.900000 5.161830 4.000000 3.000000 5.411679 4.000000 3.100000 5.681529 4.000000 3.200000 5.971378 4.000000 3.300000 6.281227 4.000000 3.400000 6.611076 4.000000 3.500000 6.960925 4.000000 3.600000 7.330774 4.000000 3.700000 7.720623 4.000000 3.800000 8.130472 4.000000 3.900000 8.560321 4.000000 4.000000 9.010171 4.000000 4.100000 9.480020 4.000000 4.200000 9.969869 4.000000 4.300000 10.479718 4.000000 4.400000 11.009567 4.000000 4.500000 11.559416 4.000000 4.600000 12.129265 4.000000 4.700000 12.719114 4.000000 4.800000 13.328963 4.000000 4.900000 13.958813 4.000000 5.000000 14.608662 4.000000 5.100000 15.278511 4.000000 5.200000 15.968360 4.000000 5.300000 16.678209 4.000000 5.400000 17.408058 4.000000 5.500000 18.157907 4.000000 5.600000 18.927756 4.000000 5.700000 19.717606 4.000000 5.800000 20.527455 4.000000 5.900000 21.357304 4.000000 6.000000 22.207153 4.000000 6.100000 23.077002 4.000000 6.200000 23.966851 4.000000 6.300000 24.876700 4.000000 6.400000 25.806549 4.000000 6.500000 26.756398 4.000000 6.600000 27.726248 4.000000 6.700000 28.716097 4.000000 6.800000 29.725946 4.000000 6.900000 30.755795 4.000000 7.000000 31.805644 4.000000 7.100000 32.875493 4.000000 7.200000 33.965342 4.000000 7.300000 35.075191 4.000000 7.400000 36.205040 4.000000 7.500000 37.354890 4.000000 7.600000 38.524739 4.000000 7.700000 39.714588 4.000000 7.800000 40.924437 4.000000 7.900000 42.154286 4.000000 8.000000 43.404135 4.000000 8.100000 44.673984 4.000000 8.200000 45.963833 4.000000 8.300000 47.273683 4.000000 8.400000 48.603532 4.000000 8.500000 49.953381 4.000000 8.600000 51.323230 4.000000 8.700000 52.713079 4.000000 8.800000 54.122928 4.000000 8.900000 55.552777 4.000000 9.000000 57.002626 4.000000 9.100000 58.472475 4.000000 9.200000 59.962325 4.000000 9.300000 61.472174 4.000000 9.400000 63.002023 4.000000 9.500000 64.551872 4.000000 9.600000 66.121721 4.000000 9.700000 67.711570 4.000000 9.800000 69.321419 4.000000 9.900000 70.951268 4.000000 10.000000 72.601117 4.000000 10.100000 74.270967 4.000000 10.200000 75.960816 4.000000 10.300000 77.670665 4.000000 10.400000 79.400514 4.000000 10.500000 81.150363 4.000000 10.600000 82.920212 4.000000 10.700000 84.710061 4.000000 10.800000 86.519910 4.000000 10.900000 88.349760 4.000000 11.000000 90.199609 4.000000 11.100000 92.069458 4.000000 11.200000 93.959307 4.000000 11.300000 95.869156 4.000000 11.400000 97.799005 4.000000 11.500000 99.748854 4.000000 11.600000 101.718703 4.000000 11.700000 103.708552 4.000000 11.800000 105.718402 4.000000 11.900000 107.748251 4.000000 12.000000 109.798100 4.000000 12.100000 111.867949 4.000000 12.200000 113.957798 4.000000 12.300000 116.067647 4.000000 12.400000 118.197496 4.000000 12.500000 120.347345 4.000000 12.600000 122.517194 4.000000 12.700000 124.707044 4.000000 12.800000 126.916893 4.000000 12.900000 129.146742 4.000000 13.000000 131.396591 4.000000 13.100000 133.666440 4.000000 13.200000 135.956289 4.000000 13.300000 138.266138 4.000000 13.400000 140.595987 4.000000 13.500000 142.945837 4.000000 13.600000 145.315686 4.000000 13.700000 147.705535 4.000000 13.800000 150.115384 4.000000 13.900000 152.545233 4.000000 14.000000 154.995082 4.000000 14.100000 157.464931 4.000000 14.200000 159.954780 4.000000 14.300000 162.464629 4.000000 14.400000 164.994479 4.000000 14.500000 167.544328 4.000000 14.600000 170.114177 4.000000 14.700000 172.704026 4.000000 14.800000 175.313875 4.000000 14.900000 177.943724 4.000000 15.000000 180.593573 4.100000 -5.000000 48.652968 4.100000 -4.900000 47.333720 4.100000 -4.800000 46.034472 4.100000 -4.700000 44.755224 4.100000 -4.600000 43.495977 4.100000 -4.500000 42.256729 4.100000 -4.400000 41.037481 4.100000 -4.300000 39.838233 4.100000 -4.200000 38.658985 4.100000 -4.100000 37.499738 4.100000 -4.000000 36.360490 4.100000 -3.900000 35.241242 4.100000 -3.800000 34.141994 4.100000 -3.700000 33.062746 4.100000 -3.600000 32.003499 4.100000 -3.500000 30.964251 4.100000 -3.400000 29.945003 4.100000 -3.300000 28.945755 4.100000 -3.200000 27.966508 4.100000 -3.100000 27.007260 4.100000 -3.000000 26.068012 4.100000 -2.900000 25.148764 4.100000 -2.800000 24.249516 4.100000 -2.700000 23.370269 4.100000 -2.600000 22.511021 4.100000 -2.500000 21.671773 4.100000 -2.400000 20.852525 4.100000 -2.300000 20.053277 4.100000 -2.200000 19.274030 4.100000 -2.100000 18.514782 4.100000 -2.000000 17.775534 4.100000 -1.900000 17.056286 4.100000 -1.800000 16.357038 4.100000 -1.700000 15.677791 4.100000 -1.600000 15.018543 4.100000 -1.500000 14.379295 4.100000 -1.400000 13.760047 4.100000 -1.300000 13.160800 4.100000 -1.200000 12.581552 4.100000 -1.100000 12.022304 4.100000 -1.000000 11.483056 4.100000 -0.900000 10.963808 4.100000 -0.800000 10.464561 4.100000 -0.700000 9.985313 4.100000 -0.600000 9.526065 4.100000 -0.500000 9.086817 4.100000 -0.400000 8.667569 4.100000 -0.300000 8.268322 4.100000 -0.200000 7.889074 4.100000 -0.100000 7.529826 4.100000 -0.000000 7.190578 4.100000 0.100000 6.871331 4.100000 0.200000 6.572083 4.100000 0.300000 6.292835 4.100000 0.400000 6.033587 4.100000 0.500000 5.794339 4.100000 0.600000 5.575092 4.100000 0.700000 5.375844 4.100000 0.800000 5.196596 4.100000 0.900000 5.037348 4.100000 1.000000 4.898100 4.100000 1.100000 4.778853 4.100000 1.200000 4.679605 4.100000 1.300000 4.600357 4.100000 1.400000 4.541109 4.100000 1.500000 4.501862 4.100000 1.600000 4.482614 4.100000 1.700000 4.483366 4.100000 1.800000 4.504118 4.100000 1.900000 4.544870 4.100000 2.000000 4.605623 4.100000 2.100000 4.686375 4.100000 2.200000 4.787127 4.100000 2.300000 4.907879 4.100000 2.400000 5.048631 4.100000 2.500000 5.209384 4.100000 2.600000 5.390136 4.100000 2.700000 5.590888 4.100000 2.800000 5.811640 4.100000 2.900000 6.052393 4.100000 3.000000 6.313145 4.100000 3.100000 6.593897 4.100000 3.200000 6.894649 4.100000 3.300000 7.215401 4.100000 3.400000 7.556154 4.100000 3.500000 7.916906 4.100000 3.600000 8.297658 4.100000 3.700000 8.698410 4.100000 3.800000 9.119162 4.100000 3.900000 9.559915 4.100000 4.000000 10.020667 4.100000 4.100000 10.501419 4.100000 4.200000 11.002171 4.100000 4.300000 11.522924 4.100000 4.400000 12.063676 4.100000 4.500000 12.624428 4.100000 4.600000 13.205180 4.100000 4.700000 13.805932 4.100000 4.800000 14.426685 4.100000 4.900000 15.067437 4.100000 5.000000 15.728189 4.100000 5.100000 16.408941 4.100000 5.200000 17.109693 4.100000 5.300000 17.830446 4.100000 5.400000 18.571198 4.100000 5.500000 19.331950 4.100000 5.600000 20.112702 4.100000 5.700000 20.913455 4.100000 5.800000 21.734207 4.100000 5.900000 22.574959 4.100000 6.000000 23.435711 4.100000 6.100000 24.316463 4.100000 6.200000 25.217216 4.100000 6.300000 26.137968 4.100000 6.400000 27.078720 4.100000 6.500000 28.039472 4.100000 6.600000 29.020224 4.100000 6.700000 30.020977 4.100000 6.800000 31.041729 4.100000 6.900000 32.082481 4.100000 7.000000 33.143233 4.100000 7.100000 34.223986 4.100000 7.200000 35.324738 4.100000 7.300000 36.445490 4.100000 7.400000 37.586242 4.100000 7.500000 38.746994 4.100000 7.600000 39.927747 4.100000 7.700000 41.128499 4.100000 7.800000 42.349251 4.100000 7.900000 43.590003 4.100000 8.000000 44.850755 4.100000 8.100000 46.131508 4.100000 8.200000 47.432260 4.100000 8.300000 48.753012 4.100000 8.400000 50.093764 4.100000 8.500000 51.454516 4.100000 8.600000 52.835269 4.100000 8.700000 54.236021 4.100000 8.800000 55.656773 4.100000 8.900000 57.097525 4.100000 9.000000 58.558278 4.100000 9.100000 60.039030 4.100000 9.200000 61.539782 4.100000 9.300000 63.060534 4.100000 9.400000 64.601286 4.100000 9.500000 66.162039 4.100000 9.600000 67.742791 4.100000 9.700000 69.343543 4.100000 9.800000 70.964295 4.100000 9.900000 72.605047 4.100000 10.000000 74.265800 4.100000 10.100000 75.946552 4.100000 10.200000 77.647304 4.100000 10.300000 79.368056 4.100000 10.400000 81.108809 4.100000 10.500000 82.869561 4.100000 10.600000 84.650313 4.100000 10.700000 86.451065 4.100000 10.800000 88.271817 4.100000 10.900000 90.112570 4.100000 11.000000 91.973322 4.100000 11.100000 93.854074 4.100000 11.200000 95.754826 4.100000 11.300000 97.675578 4.100000 11.400000 99.616331 4.100000 11.500000 101.577083 4.100000 11.600000 103.557835 4.100000 11.700000 105.558587 4.100000 11.800000 107.579340 4.100000 11.900000 109.620092 4.100000 12.000000 111.680844 4.100000 12.100000 113.761596 4.100000 12.200000 115.862348 4.100000 12.300000 117.983101 4.100000 12.400000 120.123853 4.100000 12.500000 122.284605 4.100000 12.600000 124.465357 4.100000 12.700000 126.666109 4.100000 12.800000 128.886862 4.100000 12.900000 131.127614 4.100000 13.000000 133.388366 4.100000 13.100000 135.669118 4.100000 13.200000 137.969871 4.100000 13.300000 140.290623 4.100000 13.400000 142.631375 4.100000 13.500000 144.992127 4.100000 13.600000 147.372879 4.100000 13.700000 149.773632 4.100000 13.800000 152.194384 4.100000 13.900000 154.635136 4.100000 14.000000 157.095888 4.100000 14.100000 159.576640 4.100000 14.200000 162.077393 4.100000 14.300000 164.598145 4.100000 14.400000 167.138897 4.100000 14.500000 169.699649 4.100000 14.600000 172.280402 4.100000 14.700000 174.881154 4.100000 14.800000 177.501906 4.100000 14.900000 180.142658 4.100000 15.000000 182.803410 4.200000 -5.000000 48.777347 4.200000 -4.900000 47.468485 4.200000 -4.800000 46.179624 4.200000 -4.700000 44.910763 4.200000 -4.600000 43.661901 4.200000 -4.500000 42.433040 4.200000 -4.400000 41.224178 4.200000 -4.300000 40.035317 4.200000 -4.200000 38.866456 4.200000 -4.100000 37.717594 4.200000 -4.000000 36.588733 4.200000 -3.900000 35.479871 4.200000 -3.800000 34.391010 4.200000 -3.700000 33.322148 4.200000 -3.600000 32.273287 4.200000 -3.500000 31.244426 4.200000 -3.400000 30.235564 4.200000 -3.300000 29.246703 4.200000 -3.200000 28.277841 4.200000 -3.100000 27.328980 4.200000 -3.000000 26.400118 4.200000 -2.900000 25.491257 4.200000 -2.800000 24.602396 4.200000 -2.700000 23.733534 4.200000 -2.600000 22.884673 4.200000 -2.500000 22.055811 4.200000 -2.400000 21.246950 4.200000 -2.300000 20.458088 4.200000 -2.200000 19.689227 4.200000 -2.100000 18.940366 4.200000 -2.000000 18.211504 4.200000 -1.900000 17.502643 4.200000 -1.800000 16.813781 4.200000 -1.700000 16.144920 4.200000 -1.600000 15.496058 4.200000 -1.500000 14.867197 4.200000 -1.400000 14.258336 4.200000 -1.300000 13.669474 4.200000 -1.200000 13.100613 4.200000 -1.100000 12.551751 4.200000 -1.000000 12.022890 4.200000 -0.900000 11.514028 4.200000 -0.800000 11.025167 4.200000 -0.700000 10.556306 4.200000 -0.600000 10.107444 4.200000 -0.500000 9.678583 4.200000 -0.400000 9.269721 4.200000 -0.300000 8.880860 4.200000 -0.200000 8.511998 4.200000 -0.100000 8.163137 4.200000 -0.000000 7.834276 4.200000 0.100000 7.525414 4.200000 0.200000 7.236553 4.200000 0.300000 6.967691 4.200000 0.400000 6.718830 4.200000 0.500000 6.489968 4.200000 0.600000 6.281107 4.200000 0.700000 6.092246 4.200000 0.800000 5.923384 4.200000 0.900000 5.774523 4.200000 1.000000 5.645661 4.200000 1.100000 5.536800 4.200000 1.200000 5.447938 4.200000 1.300000 5.379077 4.200000 1.400000 5.330216 4.200000 1.500000 5.301354 4.200000 1.600000 5.292493 4.200000 1.700000 5.303631 4.200000 1.800000 5.334770 4.200000 1.900000 5.385908 4.200000 2.000000 5.457047 4.200000 2.100000 5.548186 4.200000 2.200000 5.659324 4.200000 2.300000 5.790463 4.200000 2.400000 5.941601 4.200000 2.500000 6.112740 4.200000 2.600000 6.303879 4.200000 2.700000 6.515017 4.200000 2.800000 6.746156 4.200000 2.900000 6.997294 4.200000 3.000000 7.268433 4.200000 3.100000 7.559571 4.200000 3.200000 7.870710 4.200000 3.300000 8.201849 4.200000 3.400000 8.552987 4.200000 3.500000 8.924126 4.200000 3.600000 9.315264 4.200000 3.700000 9.726403 4.200000 3.800000 10.157541 4.200000 3.900000 10.608680 4.200000 4.000000 11.079819 4.200000 4.100000 11.570957 4.200000 4.200000 12.082096 4.200000 4.300000 12.613234 4.200000 4.400000 13.164373 4.200000 4.500000 13.735511 4.200000 4.600000 14.326650 4.200000 4.700000 14.937789 4.200000 4.800000 15.568927 4.200000 4.900000 16.220066 4.200000 5.000000 16.891204 4.200000 5.100000 17.582343 4.200000 5.200000 18.293481 4.200000 5.300000 19.024620 4.200000 5.400000 19.775759 4.200000 5.500000 20.546897 4.200000 5.600000 21.338036 4.200000 5.700000 22.149174 4.200000 5.800000 22.980313 4.200000 5.900000 23.831451 4.200000 6.000000 24.702590 4.200000 6.100000 25.593729 4.200000 6.200000 26.504867 4.200000 6.300000 27.436006 4.200000 6.400000 28.387144 4.200000 6.500000 29.358283 4.200000 6.600000 30.349421 4.200000 6.700000 31.360560 4.200000 6.800000 32.391699 4.200000 6.900000 33.442837 4.200000 7.000000 34.513976 4.200000 7.100000 35.605114 4.200000 7.200000 36.716253 4.200000 7.300000 37.847391 4.200000 7.400000 38.998530 4.200000 7.500000 40.169669 4.200000 7.600000 41.360807 4.200000 7.700000 42.571946 4.200000 7.800000 43.803084 4.200000 7.900000 45.054223 4.200000 8.000000 46.325361 4.200000 8.100000 47.616500 4.200000 8.200000 48.927639 4.200000 8.300000 50.258777 4.200000 8.400000 51.609916 4.200000 8.500000 52.981054 4.200000 8.600000 54.372193 4.200000 8.700000 55.783332 4.200000 8.800000 57.214470 4.200000 8.900000 58.665609 4.200000 9.000000 60.136747 4.200000 9.100000 61.627886 4.200000 9.200000 63.139024 4.200000 9.300000 64.670163 4.200000 9.400000 66.221302 4.200000 9.500000 67.792440 4.200000 9.600000 69.383579 4.200000 9.700000 70.994717 4.200000 9.800000 72.625856 4.200000 9.900000 74.276994 4.200000 10.000000 75.948133 4.200000 10.100000 77.639272 4.200000 10.200000 79.350410 4.200000 10.300000 81.081549 4.200000 10.400000 82.832687 4.200000 10.500000 84.603826 4.200000 10.600000 86.394964 4.200000 10.700000 88.206103 4.200000 10.800000 90.037242 4.200000 10.900000 91.888380 4.200000 11.000000 93.759519 4.200000 11.100000 95.650657 4.200000 11.200000 97.561796 4.200000 11.300000 99.492934 4.200000 11.400000 101.444073 4.200000 11.500000 103.415212 4.200000 11.600000 105.406350 4.200000 11.700000 107.417489 4.200000 11.800000 109.448627 4.200000 11.900000 111.499766 4.200000 12.000000 113.570904 4.200000 12.100000 115.662043 4.200000 12.200000 117.773182 4.200000 12.300000 119.904320 4.200000 12.400000 122.055459 4.200000 12.500000 124.226597 4.200000 12.600000 126.417736 4.200000 12.700000 128.628874 4.200000 12.800000 130.860013 4.200000 12.900000 133.111152 4.200000 13.000000 135.382290 4.200000 13.100000 137.673429 4.200000 13.200000 139.984567 4.200000 13.300000 142.315706 4.200000 13.400000 144.666844 4.200000 13.500000 147.037983 4.200000 13.600000 149.429122 4.200000 13.700000 151.840260 4.200000 13.800000 154.271399 4.200000 13.900000 156.722537 4.200000 14.000000 159.193676 4.200000 14.100000 161.684814 4.200000 14.200000 164.195953 4.200000 14.300000 166.727092 4.200000 14.400000 169.278230 4.200000 14.500000 171.849369 4.200000 14.600000 174.440507 4.200000 14.700000 177.051646 4.200000 14.800000 179.682785 4.200000 14.900000 182.333923 4.200000 15.000000 185.005062 4.300000 -5.000000 48.987970 4.300000 -4.900000 47.688978 4.300000 -4.800000 46.409986 4.300000 -4.700000 45.150994 4.300000 -4.600000 43.912003 4.300000 -4.500000 42.693011 4.300000 -4.400000 41.494019 4.300000 -4.300000 40.315027 4.300000 -4.200000 39.156035 4.300000 -4.100000 38.017044 4.300000 -4.000000 36.898052 4.300000 -3.900000 35.799060 4.300000 -3.800000 34.720068 4.300000 -3.700000 33.661076 4.300000 -3.600000 32.622085 4.300000 -3.500000 31.603093 4.300000 -3.400000 30.604101 4.300000 -3.300000 29.625109 4.300000 -3.200000 28.666117 4.300000 -3.100000 27.727126 4.300000 -3.000000 26.808134 4.300000 -2.900000 25.909142 4.300000 -2.800000 25.030150 4.300000 -2.700000 24.171158 4.300000 -2.600000 23.332166 4.300000 -2.500000 22.513175 4.300000 -2.400000 21.714183 4.300000 -2.300000 20.935191 4.300000 -2.200000 20.176199 4.300000 -2.100000 19.437207 4.300000 -2.000000 18.718216 4.300000 -1.900000 18.019224 4.300000 -1.800000 17.340232 4.300000 -1.700000 16.681240 4.300000 -1.600000 16.042248 4.300000 -1.500000 15.423257 4.300000 -1.400000 14.824265 4.300000 -1.300000 14.245273 4.300000 -1.200000 13.686281 4.300000 -1.100000 13.147289 4.300000 -1.000000 12.628298 4.300000 -0.900000 12.129306 4.300000 -0.800000 11.650314 4.300000 -0.700000 11.191322 4.300000 -0.600000 10.752330 4.300000 -0.500000 10.333339 4.300000 -0.400000 9.934347 4.300000 -0.300000 9.555355 4.300000 -0.200000 9.196363 4.300000 -0.100000 8.857371 4.300000 -0.000000 8.538380 4.300000 0.100000 8.239388 4.300000 0.200000 7.960396 4.300000 0.300000 7.701404 4.300000 0.400000 7.462412 4.300000 0.500000 7.243421 4.300000 0.600000 7.044429 4.300000 0.700000 6.865437 4.300000 0.800000 6.706445 4.300000 0.900000 6.567453 4.300000 1.000000 6.448462 4.300000 1.100000 6.349470 4.300000 1.200000 6.270478 4.300000 1.300000 6.211486 4.300000 1.400000 6.172494 4.300000 1.500000 6.153503 4.300000 1.600000 6.154511 4.300000 1.700000 6.175519 4.300000 1.800000 6.216527 4.300000 1.900000 6.277535 4.300000 2.000000 6.358543 4.300000 2.100000 6.459552 4.300000 2.200000 6.580560 4.300000 2.300000 6.721568 4.300000 2.400000 6.882576 4.300000 2.500000 7.063584 4.300000 2.600000 7.264593 4.300000 2.700000 7.485601 4.300000 2.800000 7.726609 4.300000 2.900000 7.987617 4.300000 3.000000 8.268625 4.300000 3.100000 8.569634 4.300000 3.200000 8.890642 4.300000 3.300000 9.231650 4.300000 3.400000 9.592658 4.300000 3.500000 9.973666 4.300000 3.600000 10.374675 4.300000 3.700000 10.795683 4.300000 3.800000 11.236691 4.300000 3.900000 11.697699 4.300000 4.000000 12.178707 4.300000 4.100000 12.679716 4.300000 4.200000 13.200724 4.300000 4.300000 13.741732 4.300000 4.400000 14.302740 4.300000 4.500000 14.883748 4.300000 4.600000 15.484757 4.300000 4.700000 16.105765 4.300000 4.800000 16.746773 4.300000 4.900000 17.407781 4.300000 5.000000 18.088789 4.300000 5.100000 18.789798 4.300000 5.200000 19.510806 4.300000 5.300000 20.251814 4.300000 5.400000 21.012822 4.300000 5.500000 21.793830 4.300000 5.600000 22.594839 4.300000 5.700000 23.415847 4.300000 5.800000 24.256855 4.300000 5.900000 25.117863 4.300000 6.000000 25.998871 4.300000 6.100000 26.899880 4.300000 6.200000 27.820888 4.300000 6.300000 28.761896 4.300000 6.400000 29.722904 4.300000 6.500000 30.703912 4.300000 6.600000 31.704921 4.300000 6.700000 32.725929 4.300000 6.800000 33.766937 4.300000 6.900000 34.827945 4.300000 7.000000 35.908953 4.300000 7.100000 37.009961 4.300000 7.200000 38.130970 4.300000 7.300000 39.271978 4.300000 7.400000 40.432986 4.300000 7.500000 41.613994 4.300000 7.600000 42.815002 4.300000 7.700000 44.036011 4.300000 7.800000 45.277019 4.300000 7.900000 46.538027 4.300000 8.000000 47.819035 4.300000 8.100000 49.120043 4.300000 8.200000 50.441052 4.300000 8.300000 51.782060 4.300000 8.400000 53.143068 4.300000 8.500000 54.524076 4.300000 8.600000 55.925084 4.300000 8.700000 57.346093 4.300000 8.800000 58.787101 4.300000 8.900000 60.248109 4.300000 9.000000 61.729117 4.300000 9.100000 63.230125 4.300000 9.200000 64.751134 4.300000 9.300000 66.292142 4.300000 9.400000 67.853150 4.300000 9.500000 69.434158 4.300000 9.600000 71.035166 4.300000 9.700000 72.656175 4.300000 9.800000 74.297183 4.300000 9.900000 75.958191 4.300000 10.000000 77.639199 4.300000 10.100000 79.340207 4.300000 10.200000 81.061216 4.300000 10.300000 82.802224 4.300000 10.400000 84.563232 4.300000 10.500000 86.344240 4.300000 10.600000 88.145248 4.300000 10.700000 89.966257 4.300000 10.800000 91.807265 4.300000 10.900000 93.668273 4.300000 11.000000 95.549281 4.300000 11.100000 97.450289 4.300000 11.200000 99.371298 4.300000 11.300000 101.312306 4.300000 11.400000 103.273314 4.300000 11.500000 105.254322 4.300000 11.600000 107.255330 4.300000 11.700000 109.276338 4.300000 11.800000 111.317347 4.300000 11.900000 113.378355 4.300000 12.000000 115.459363 4.300000 12.100000 117.560371 4.300000 12.200000 119.681379 4.300000 12.300000 121.822388 4.300000 12.400000 123.983396 4.300000 12.500000 126.164404 4.300000 12.600000 128.365412 4.300000 12.700000 130.586420 4.300000 12.800000 132.827429 4.300000 12.900000 135.088437 4.300000 13.000000 137.369445 4.300000 13.100000 139.670453 4.300000 13.200000 141.991461 4.300000 13.300000 144.332470 4.300000 13.400000 146.693478 4.300000 13.500000 149.074486 4.300000 13.600000 151.475494 4.300000 13.700000 153.896502 4.300000 13.800000 156.337511 4.300000 13.900000 158.798519 4.300000 14.000000 161.279527 4.300000 14.100000 163.780535 4.300000 14.200000 166.301543 4.300000 14.300000 168.842552 4.300000 14.400000 171.403560 4.300000 14.500000 173.984568 4.300000 14.600000 176.585576 4.300000 14.700000 179.206584 4.300000 14.800000 181.847593 4.300000 14.900000 184.508601 4.300000 15.000000 187.189609 4.400000 -5.000000 49.275488 4.400000 -4.900000 47.985849 4.400000 -4.800000 46.716210 4.400000 -4.700000 45.466571 4.400000 -4.600000 44.236933 4.400000 -4.500000 43.027294 4.400000 -4.400000 41.837655 4.400000 -4.300000 40.668016 4.400000 -4.200000 39.518377 4.400000 -4.100000 38.388738 4.400000 -4.000000 37.279099 4.400000 -3.900000 36.189460 4.400000 -3.800000 35.119821 4.400000 -3.700000 34.070182 4.400000 -3.600000 33.040543 4.400000 -3.500000 32.030904 4.400000 -3.400000 31.041266 4.400000 -3.300000 30.071627 4.400000 -3.200000 29.121988 4.400000 -3.100000 28.192349 4.400000 -3.000000 27.282710 4.400000 -2.900000 26.393071 4.400000 -2.800000 25.523432 4.400000 -2.700000 24.673793 4.400000 -2.600000 23.844154 4.400000 -2.500000 23.034515 4.400000 -2.400000 22.244876 4.400000 -2.300000 21.475237 4.400000 -2.200000 20.725598 4.400000 -2.100000 19.995960 4.400000 -2.000000 19.286321 4.400000 -1.900000 18.596682 4.400000 -1.800000 17.927043 4.400000 -1.700000 17.277404 4.400000 -1.600000 16.647765 4.400000 -1.500000 16.038126 4.400000 -1.400000 15.448487 4.400000 -1.300000 14.878848 4.400000 -1.200000 14.329209 4.400000 -1.100000 13.799570 4.400000 -1.000000 13.289931 4.400000 -0.900000 12.800293 4.400000 -0.800000 12.330654 4.400000 -0.700000 11.881015 4.400000 -0.600000 11.451376 4.400000 -0.500000 11.041737 4.400000 -0.400000 10.652098 4.400000 -0.300000 10.282459 4.400000 -0.200000 9.932820 4.400000 -0.100000 9.603181 4.400000 -0.000000 9.293542 4.400000 0.100000 9.003903 4.400000 0.200000 8.734264 4.400000 0.300000 8.484625 4.400000 0.400000 8.254987 4.400000 0.500000 8.045348 4.400000 0.600000 7.855709 4.400000 0.700000 7.686070 4.400000 0.800000 7.536431 4.400000 0.900000 7.406792 4.400000 1.000000 7.297153 4.400000 1.100000 7.207514 4.400000 1.200000 7.137875 4.400000 1.300000 7.088236 4.400000 1.400000 7.058597 4.400000 1.500000 7.048958 4.400000 1.600000 7.059320 4.400000 1.700000 7.089681 4.400000 1.800000 7.140042 4.400000 1.900000 7.210403 4.400000 2.000000 7.300764 4.400000 2.100000 7.411125 4.400000 2.200000 7.541486 4.400000 2.300000 7.691847 4.400000 2.400000 7.862208 4.400000 2.500000 8.052569 4.400000 2.600000 8.262930 4.400000 2.700000 8.493291 4.400000 2.800000 8.743652 4.400000 2.900000 9.014014 4.400000 3.000000 9.304375 4.400000 3.100000 9.614736 4.400000 3.200000 9.945097 4.400000 3.300000 10.295458 4.400000 3.400000 10.665819 4.400000 3.500000 11.056180 4.400000 3.600000 11.466541 4.400000 3.700000 11.896902 4.400000 3.800000 12.347263 4.400000 3.900000 12.817624 4.400000 4.000000 13.307985 4.400000 4.100000 13.818346 4.400000 4.200000 14.348708 4.400000 4.300000 14.899069 4.400000 4.400000 15.469430 4.400000 4.500000 16.059791 4.400000 4.600000 16.670152 4.400000 4.700000 17.300513 4.400000 4.800000 17.950874 4.400000 4.900000 18.621235 4.400000 5.000000 19.311596 4.400000 5.100000 20.021957 4.400000 5.200000 20.752318 4.400000 5.300000 21.502679 4.400000 5.400000 22.273041 4.400000 5.500000 23.063402 4.400000 5.600000 23.873763 4.400000 5.700000 24.704124 4.400000 5.800000 25.554485 4.400000 5.900000 26.424846 4.400000 6.000000 27.315207 4.400000 6.100000 28.225568 4.400000 6.200000 29.155929 4.400000 6.300000 30.106290 4.400000 6.400000 31.076651 4.400000 6.500000 32.067012 4.400000 6.600000 33.077373 4.400000 6.700000 34.107735 4.400000 6.800000 35.158096 4.400000 6.900000 36.228457 4.400000 7.000000 37.318818 4.400000 7.100000 38.429179 4.400000 7.200000 39.559540 4.400000 7.300000 40.709901 4.400000 7.400000 41.880262 4.400000 7.500000 43.070623 4.400000 7.600000 44.280984 4.400000 7.700000 45.511345 4.400000 7.800000 46.761706 4.400000 7.900000 48.032068 4.400000 8.000000 49.322429 4.400000 8.100000 50.632790 4.400000 8.200000 51.963151 4.400000 8.300000 53.313512 4.400000 8.400000 54.683873 4.400000 8.500000 56.074234 4.400000 8.600000 57.484595 4.400000 8.700000 58.914956 4.400000 8.800000 60.365317 4.400000 8.900000 61.835678 4.400000 9.000000 63.326039 4.400000 9.100000 64.836400 4.400000 9.200000 66.366762 4.400000 9.300000 67.917123 4.400000 9.400000 69.487484 4.400000 9.500000 71.077845 4.400000 9.600000 72.688206 4.400000 9.700000 74.318567 4.400000 9.800000 75.968928 4.400000 9.900000 77.639289 4.400000 10.000000 79.329650 4.400000 10.100000 81.040011 4.400000 10.200000 82.770372 4.400000 10.300000 84.520733 4.400000 10.400000 86.291095 4.400000 10.500000 88.081456 4.400000 10.600000 89.891817 4.400000 10.700000 91.722178 4.400000 10.800000 93.572539 4.400000 10.900000 95.442900 4.400000 11.000000 97.333261 4.400000 11.100000 99.243622 4.400000 11.200000 101.173983 4.400000 11.300000 103.124344 4.400000 11.400000 105.094705 4.400000 11.500000 107.085066 4.400000 11.600000 109.095427 4.400000 11.700000 111.125789 4.400000 11.800000 113.176150 4.400000 11.900000 115.246511 4.400000 12.000000 117.336872 4.400000 12.100000 119.447233 4.400000 12.200000 121.577594 4.400000 12.300000 123.727955 4.400000 12.400000 125.898316 4.400000 12.500000 128.088677 4.400000 12.600000 130.299038 4.400000 12.700000 132.529399 4.400000 12.800000 134.779760 4.400000 12.900000 137.050122 4.400000 13.000000 139.340483 4.400000 13.100000 141.650844 4.400000 13.200000 143.981205 4.400000 13.300000 146.331566 4.400000 13.400000 148.701927 4.400000 13.500000 151.092288 4.400000 13.600000 153.502649 4.400000 13.700000 155.933010 4.400000 13.800000 158.383371 4.400000 13.900000 160.853732 4.400000 14.000000 163.344093 4.400000 14.100000 165.854454 4.400000 14.200000 168.384816 4.400000 14.300000 170.935177 4.400000 14.400000 173.505538 4.400000 14.500000 176.095899 4.400000 14.600000 178.706260 4.400000 14.700000 181.336621 4.400000 14.800000 183.986982 4.400000 14.900000 186.657343 4.400000 15.000000 189.347704 4.500000 -5.000000 49.630210 4.500000 -4.900000 48.349407 4.500000 -4.800000 47.088604 4.500000 -4.700000 45.847802 4.500000 -4.600000 44.626999 4.500000 -4.500000 43.426196 4.500000 -4.400000 42.245393 4.500000 -4.300000 41.084591 4.500000 -4.200000 39.943788 4.500000 -4.100000 38.822985 4.500000 -4.000000 37.722182 4.500000 -3.900000 36.641380 4.500000 -3.800000 35.580577 4.500000 -3.700000 34.539774 4.500000 -3.600000 33.518971 4.500000 -3.500000 32.518168 4.500000 -3.400000 31.537366 4.500000 -3.300000 30.576563 4.500000 -3.200000 29.635760 4.500000 -3.100000 28.714957 4.500000 -3.000000 27.814155 4.500000 -2.900000 26.933352 4.500000 -2.800000 26.072549 4.500000 -2.700000 25.231746 4.500000 -2.600000 24.410943 4.500000 -2.500000 23.610141 4.500000 -2.400000 22.829338 4.500000 -2.300000 22.068535 4.500000 -2.200000 21.327732 4.500000 -2.100000 20.606930 4.500000 -2.000000 19.906127 4.500000 -1.900000 19.225324 4.500000 -1.800000 18.564521 4.500000 -1.700000 17.923718 4.500000 -1.600000 17.302916 4.500000 -1.500000 16.702113 4.500000 -1.400000 16.121310 4.500000 -1.300000 15.560507 4.500000 -1.200000 15.019705 4.500000 -1.100000 14.498902 4.500000 -1.000000 13.998099 4.500000 -0.900000 13.517296 4.500000 -0.800000 13.056494 4.500000 -0.700000 12.615691 4.500000 -0.600000 12.194888 4.500000 -0.500000 11.794085 4.500000 -0.400000 11.413282 4.500000 -0.300000 11.052480 4.500000 -0.200000 10.711677 4.500000 -0.100000 10.390874 4.500000 -0.000000 10.090071 4.500000 0.100000 9.809269 4.500000 0.200000 9.548466 4.500000 0.300000 9.307663 4.500000 0.400000 9.086860 4.500000 0.500000 8.886057 4.500000 0.600000 8.705255 4.500000 0.700000 8.544452 4.500000 0.800000 8.403649 4.500000 0.900000 8.282846 4.500000 1.000000 8.182044 4.500000 1.100000 8.101241 4.500000 1.200000 8.040438 4.500000 1.300000 7.999635 4.500000 1.400000 7.978832 4.500000 1.500000 7.978030 4.500000 1.600000 7.997227 4.500000 1.700000 8.036424 4.500000 1.800000 8.095621 4.500000 1.900000 8.174819 4.500000 2.000000 8.274016 4.500000 2.100000 8.393213 4.500000 2.200000 8.532410 4.500000 2.300000 8.691608 4.500000 2.400000 8.870805 4.500000 2.500000 9.070002 4.500000 2.600000 9.289199 4.500000 2.700000 9.528396 4.500000 2.800000 9.787594 4.500000 2.900000 10.066791 4.500000 3.000000 10.365988 4.500000 3.100000 10.685185 4.500000 3.200000 11.024383 4.500000 3.300000 11.383580 4.500000 3.400000 11.762777 4.500000 3.500000 12.161974 4.500000 3.600000 12.581171 4.500000 3.700000 13.020369 4.500000 3.800000 13.479566 4.500000 3.900000 13.958763 4.500000 4.000000 14.457960 4.500000 4.100000 14.977158 4.500000 4.200000 15.516355 4.500000 4.300000 16.075552 4.500000 4.400000 16.654749 4.500000 4.500000 17.253946 4.500000 4.600000 17.873144 4.500000 4.700000 18.512341 4.500000 4.800000 19.171538 4.500000 4.900000 19.850735 4.500000 5.000000 20.549933 4.500000 5.100000 21.269130 4.500000 5.200000 22.008327 4.500000 5.300000 22.767524 4.500000 5.400000 23.546722 4.500000 5.500000 24.345919 4.500000 5.600000 25.165116 4.500000 5.700000 26.004313 4.500000 5.800000 26.863510 4.500000 5.900000 27.742708 4.500000 6.000000 28.641905 4.500000 6.100000 29.561102 4.500000 6.200000 30.500299 4.500000 6.300000 31.459497 4.500000 6.400000 32.438694 4.500000 6.500000 33.437891 4.500000 6.600000 34.457088 4.500000 6.700000 35.496285 4.500000 6.800000 36.555483 4.500000 6.900000 37.634680 4.500000 7.000000 38.733877 4.500000 7.100000 39.853074 4.500000 7.200000 40.992272 4.500000 7.300000 42.151469 4.500000 7.400000 43.330666 4.500000 7.500000 44.529863 4.500000 7.600000 45.749060 4.500000 7.700000 46.988258 4.500000 7.800000 48.247455 4.500000 7.900000 49.526652 4.500000 8.000000 50.825849 4.500000 8.100000 52.145047 4.500000 8.200000 53.484244 4.500000 8.300000 54.843441 4.500000 8.400000 56.222638 4.500000 8.500000 57.621836 4.500000 8.600000 59.041033 4.500000 8.700000 60.480230 4.500000 8.800000 61.939427 4.500000 8.900000 63.418624 4.500000 9.000000 64.917822 4.500000 9.100000 66.437019 4.500000 9.200000 67.976216 4.500000 9.300000 69.535413 4.500000 9.400000 71.114611 4.500000 9.500000 72.713808 4.500000 9.600000 74.333005 4.500000 9.700000 75.972202 4.500000 9.800000 77.631399 4.500000 9.900000 79.310597 4.500000 10.000000 81.009794 4.500000 10.100000 82.728991 4.500000 10.200000 84.468188 4.500000 10.300000 86.227386 4.500000 10.400000 88.006583 4.500000 10.500000 89.805780 4.500000 10.600000 91.624977 4.500000 10.700000 93.464174 4.500000 10.800000 95.323372 4.500000 10.900000 97.202569 4.500000 11.000000 99.101766 4.500000 11.100000 101.020963 4.500000 11.200000 102.960161 4.500000 11.300000 104.919358 4.500000 11.400000 106.898555 4.500000 11.500000 108.897752 4.500000 11.600000 110.916950 4.500000 11.700000 112.956147 4.500000 11.800000 115.015344 4.500000 11.900000 117.094541 4.500000 12.000000 119.193738 4.500000 12.100000 121.312936 4.500000 12.200000 123.452133 4.500000 12.300000 125.611330 4.500000 12.400000 127.790527 4.500000 12.500000 129.989725 4.500000 12.600000 132.208922 4.500000 12.700000 134.448119 4.500000 12.800000 136.707316 4.500000 12.900000 138.986513 4.500000 13.000000 141.285711 4.500000 13.100000 143.604908 4.500000 13.200000 145.944105 4.500000 13.300000 148.303302 4.500000 13.400000 150.682500 4.500000 13.500000 153.081697 4.500000 13.600000 155.500894 4.500000 13.700000 157.940091 4.500000 13.800000 160.399288 4.500000 13.900000 162.878486 4.500000 14.000000 165.377683 4.500000 14.100000 167.896880 4.500000 14.200000 170.436077 4.500000 14.300000 172.995275 4.500000 14.400000 175.574472 4.500000 14.500000 178.173669 4.500000 14.600000 180.792866 4.500000 14.700000 183.432064 4.500000 14.800000 186.091261 4.500000 14.900000 188.770458 4.500000 15.000000 191.469655 4.600000 -5.000000 50.042188 4.600000 -4.900000 48.769705 4.600000 -4.800000 47.517222 4.600000 -4.700000 46.284738 4.600000 -4.600000 45.072255 4.600000 -4.500000 43.879772 4.600000 -4.400000 42.707288 4.600000 -4.300000 41.554805 4.600000 -4.200000 40.422321 4.600000 -4.100000 39.309838 4.600000 -4.000000 38.217355 4.600000 -3.900000 37.144871 4.600000 -3.800000 36.092388 4.600000 -3.700000 35.059905 4.600000 -3.600000 34.047421 4.600000 -3.500000 33.054938 4.600000 -3.400000 32.082455 4.600000 -3.300000 31.129971 4.600000 -3.200000 30.197488 4.600000 -3.100000 29.285004 4.600000 -3.000000 28.392521 4.600000 -2.900000 27.520038 4.600000 -2.800000 26.667554 4.600000 -2.700000 25.835071 4.600000 -2.600000 25.022588 4.600000 -2.500000 24.230104 4.600000 -2.400000 23.457621 4.600000 -2.300000 22.705138 4.600000 -2.200000 21.972654 4.600000 -2.100000 21.260171 4.600000 -2.000000 20.567687 4.600000 -1.900000 19.895204 4.600000 -1.800000 19.242721 4.600000 -1.700000 18.610237 4.600000 -1.600000 17.997754 4.600000 -1.500000 17.405271 4.600000 -1.400000 16.832787 4.600000 -1.300000 16.280304 4.600000 -1.200000 15.747821 4.600000 -1.100000 15.235337 4.600000 -1.000000 14.742854 4.600000 -0.900000 14.270370 4.600000 -0.800000 13.817887 4.600000 -0.700000 13.385404 4.600000 -0.600000 12.972920 4.600000 -0.500000 12.580437 4.600000 -0.400000 12.207954 4.600000 -0.300000 11.855470 4.600000 -0.200000 11.522987 4.600000 -0.100000 11.210503 4.600000 -0.000000 10.918020 4.600000 0.100000 10.645537 4.600000 0.200000 10.393053 4.600000 0.300000 10.160570 4.600000 0.400000 9.948087 4.600000 0.500000 9.755603 4.600000 0.600000 9.583120 4.600000 0.700000 9.430637 4.600000 0.800000 9.298153 4.600000 0.900000 9.185670 4.600000 1.000000 9.093186 4.600000 1.100000 9.020703 4.600000 1.200000 8.968220 4.600000 1.300000 8.935736 4.600000 1.400000 8.923253 4.600000 1.500000 8.930770 4.600000 1.600000 8.958286 4.600000 1.700000 9.005803 4.600000 1.800000 9.073320 4.600000 1.900000 9.160836 4.600000 2.000000 9.268353 4.600000 2.100000 9.395869 4.600000 2.200000 9.543386 4.600000 2.300000 9.710903 4.600000 2.400000 9.898419 4.600000 2.500000 10.105936 4.600000 2.600000 10.333453 4.600000 2.700000 10.580969 4.600000 2.800000 10.848486 4.600000 2.900000 11.136002 4.600000 3.000000 11.443519 4.600000 3.100000 11.771036 4.600000 3.200000 12.118552 4.600000 3.300000 12.486069 4.600000 3.400000 12.873586 4.600000 3.500000 13.281102 4.600000 3.600000 13.708619 4.600000 3.700000 14.156136 4.600000 3.800000 14.623652 4.600000 3.900000 15.111169 4.600000 4.000000 15.618685 4.600000 4.100000 16.146202 4.600000 4.200000 16.693719 4.600000 4.300000 17.261235 4.600000 4.400000 17.848752 4.600000 4.500000 18.456269 4.600000 4.600000 19.083785 4.600000 4.700000 19.731302 4.600000 4.800000 20.398819 4.600000 4.900000 21.086335 4.600000 5.000000 21.793852 4.600000 5.100000 22.521368 4.600000 5.200000 23.268885 4.600000 5.300000 24.036402 4.600000 5.400000 24.823918 4.600000 5.500000 25.631435 4.600000 5.600000 26.458952 4.600000 5.700000 27.306468 4.600000 5.800000 28.173985 4.600000 5.900000 29.061501 4.600000 6.000000 29.969018 4.600000 6.100000 30.896535 4.600000 6.200000 31.844051 4.600000 6.300000 32.811568 4.600000 6.400000 33.799085 4.600000 6.500000 34.806601 4.600000 6.600000 35.834118 4.600000 6.700000 36.881635 4.600000 6.800000 37.949151 4.600000 6.900000 39.036668 4.600000 7.000000 40.144184 4.600000 7.100000 41.271701 4.600000 7.200000 42.419218 4.600000 7.300000 43.586734 4.600000 7.400000 44.774251 4.600000 7.500000 45.981768 4.600000 7.600000 47.209284 4.600000 7.700000 48.456801 4.600000 7.800000 49.724318 4.600000 7.900000 51.011834 4.600000 8.000000 52.319351 4.600000 8.100000 53.646867 4.600000 8.200000 54.994384 4.600000 8.300000 56.361901 4.600000 8.400000 57.749417 4.600000 8.500000 59.156934 4.600000 8.600000 60.584451 4.600000 8.700000 62.031967 4.600000 8.800000 63.499484 4.600000 8.900000 64.987001 4.600000 9.000000 66.494517 4.600000 9.100000 68.022034 4.600000 9.200000 69.569550 4.600000 9.300000 71.137067 4.600000 9.400000 72.724584 4.600000 9.500000 74.332100 4.600000 9.600000 75.959617 4.600000 9.700000 77.607134 4.600000 9.800000 79.274650 4.600000 9.900000 80.962167 4.600000 10.000000 82.669683 4.600000 10.100000 84.397200 4.600000 10.200000 86.144717 4.600000 10.300000 87.912233 4.600000 10.400000 89.699750 4.600000 10.500000 91.507267 4.600000 10.600000 93.334783 4.600000 10.700000 95.182300 4.600000 10.800000 97.049817 4.600000 10.900000 98.937333 4.600000 11.000000 100.844850 4.600000 11.100000 102.772366 4.600000 11.200000 104.719883 4.600000 11.300000 106.687400 4.600000 11.400000 108.674916 4.600000 11.500000 110.682433 4.600000 11.600000 112.709950 4.600000 11.700000 114.757466 4.600000 11.800000 116.824983 4.600000 11.900000 118.912500 4.600000 12.000000 121.020016 4.600000 12.100000 123.147533 4.600000 12.200000 125.295049 4.600000 12.300000 127.462566 4.600000 12.400000 129.650083 4.600000 12.500000 131.857599 4.600000 12.600000 134.085116 4.600000 12.700000 136.332633 4.600000 12.800000 138.600149 4.600000 12.900000 140.887666 4.600000 13.000000 143.195182 4.600000 13.100000 145.522699 4.600000 13.200000 147.870216 4.600000 13.300000 150.237732 4.600000 13.400000 152.625249 4.600000 13.500000 155.032766 4.600000 13.600000 157.460282 4.600000 13.700000 159.907799 4.600000 13.800000 162.375316 4.600000 13.900000 164.862832 4.600000 14.000000 167.370349 4.600000 14.100000 169.897865 4.600000 14.200000 172.445382 4.600000 14.300000 175.012899 4.600000 14.400000 177.600415 4.600000 14.500000 180.207932 4.600000 14.600000 182.835449 4.600000 14.700000 185.482965 4.600000 14.800000 188.150482 4.600000 14.900000 190.837999 4.600000 15.000000 193.545515 4.700000 -5.000000 50.501315 4.700000 -4.900000 49.236634 4.700000 -4.800000 47.991953 4.700000 -4.700000 46.767273 4.700000 -4.600000 45.562592 4.700000 -4.500000 44.377911 4.700000 -4.400000 43.213230 4.700000 -4.300000 42.068550 4.700000 -4.200000 40.943869 4.700000 -4.100000 39.839188 4.700000 -4.000000 38.754508 4.700000 -3.900000 37.689827 4.700000 -3.800000 36.645146 4.700000 -3.700000 35.620466 4.700000 -3.600000 34.615785 4.700000 -3.500000 33.631104 4.700000 -3.400000 32.666423 4.700000 -3.300000 31.721743 4.700000 -3.200000 30.797062 4.700000 -3.100000 29.892381 4.700000 -3.000000 29.007701 4.700000 -2.900000 28.143020 4.700000 -2.800000 27.298339 4.700000 -2.700000 26.473659 4.700000 -2.600000 25.668978 4.700000 -2.500000 24.884297 4.700000 -2.400000 24.119616 4.700000 -2.300000 23.374936 4.700000 -2.200000 22.650255 4.700000 -2.100000 21.945574 4.700000 -2.000000 21.260894 4.700000 -1.900000 20.596213 4.700000 -1.800000 19.951532 4.700000 -1.700000 19.326852 4.700000 -1.600000 18.722171 4.700000 -1.500000 18.137490 4.700000 -1.400000 17.572810 4.700000 -1.300000 17.028129 4.700000 -1.200000 16.503448 4.700000 -1.100000 15.998767 4.700000 -1.000000 15.514087 4.700000 -0.900000 15.049406 4.700000 -0.800000 14.604725 4.700000 -0.700000 14.180045 4.700000 -0.600000 13.775364 4.700000 -0.500000 13.390683 4.700000 -0.400000 13.026003 4.700000 -0.300000 12.681322 4.700000 -0.200000 12.356641 4.700000 -0.100000 12.051960 4.700000 -0.000000 11.767280 4.700000 0.100000 11.502599 4.700000 0.200000 11.257918 4.700000 0.300000 11.033238 4.700000 0.400000 10.828557 4.700000 0.500000 10.643876 4.700000 0.600000 10.479196 4.700000 0.700000 10.334515 4.700000 0.800000 10.209834 4.700000 0.900000 10.105154 4.700000 1.000000 10.020473 4.700000 1.100000 9.955792 4.700000 1.200000 9.911111 4.700000 1.300000 9.886431 4.700000 1.400000 9.881750 4.700000 1.500000 9.897069 4.700000 1.600000 9.932389 4.700000 1.700000 9.987708 4.700000 1.800000 10.063027 4.700000 1.900000 10.158347 4.700000 2.000000 10.273666 4.700000 2.100000 10.408985 4.700000 2.200000 10.564304 4.700000 2.300000 10.739624 4.700000 2.400000 10.934943 4.700000 2.500000 11.150262 4.700000 2.600000 11.385582 4.700000 2.700000 11.640901 4.700000 2.800000 11.916220 4.700000 2.900000 12.211540 4.700000 3.000000 12.526859 4.700000 3.100000 12.862178 4.700000 3.200000 13.217497 4.700000 3.300000 13.592817 4.700000 3.400000 13.988136 4.700000 3.500000 14.403455 4.700000 3.600000 14.838775 4.700000 3.700000 15.294094 4.700000 3.800000 15.769413 4.700000 3.900000 16.264733 4.700000 4.000000 16.780052 4.700000 4.100000 17.315371 4.700000 4.200000 17.870691 4.700000 4.300000 18.446010 4.700000 4.400000 19.041329 4.700000 4.500000 19.656648 4.700000 4.600000 20.291968 4.700000 4.700000 20.947287 4.700000 4.800000 21.622606 4.700000 4.900000 22.317926 4.700000 5.000000 23.033245 4.700000 5.100000 23.768564 4.700000 5.200000 24.523884 4.700000 5.300000 25.299203 4.700000 5.400000 26.094522 4.700000 5.500000 26.909841 4.700000 5.600000 27.745161 4.700000 5.700000 28.600480 4.700000 5.800000 29.475799 4.700000 5.900000 30.371119 4.700000 6.000000 31.286438 4.700000 6.100000 32.221757 4.700000 6.200000 33.177077 4.700000 6.300000 34.152396 4.700000 6.400000 35.147715 4.700000 6.500000 36.163035 4.700000 6.600000 37.198354 4.700000 6.700000 38.253673 4.700000 6.800000 39.328992 4.700000 6.900000 40.424312 4.700000 7.000000 41.539631 4.700000 7.100000 42.674950 4.700000 7.200000 43.830270 4.700000 7.300000 45.005589 4.700000 7.400000 46.200908 4.700000 7.500000 47.416228 4.700000 7.600000 48.651547 4.700000 7.700000 49.906866 4.700000 7.800000 51.182185 4.700000 7.900000 52.477505 4.700000 8.000000 53.792824 4.700000 8.100000 55.128143 4.700000 8.200000 56.483463 4.700000 8.300000 57.858782 4.700000 8.400000 59.254101 4.700000 8.500000 60.669421 4.700000 8.600000 62.104740 4.700000 8.700000 63.560059 4.700000 8.800000 65.035379 4.700000 8.900000 66.530698 4.700000 9.000000 68.046017 4.700000 9.100000 69.581336 4.700000 9.200000 71.136656 4.700000 9.300000 72.711975 4.700000 9.400000 74.307294 4.700000 9.500000 75.922614 4.700000 9.600000 77.557933 4.700000 9.700000 79.213252 4.700000 9.800000 80.888572 4.700000 9.900000 82.583891 4.700000 10.000000 84.299210 4.700000 10.100000 86.034529 4.700000 10.200000 87.789849 4.700000 10.300000 89.565168 4.700000 10.400000 91.360487 4.700000 10.500000 93.175807 4.700000 10.600000 95.011126 4.700000 10.700000 96.866445 4.700000 10.800000 98.741765 4.700000 10.900000 100.637084 4.700000 11.000000 102.552403 4.700000 11.100000 104.487722 4.700000 11.200000 106.443042 4.700000 11.300000 108.418361 4.700000 11.400000 110.413680 4.700000 11.500000 112.429000 4.700000 11.600000 114.464319 4.700000 11.700000 116.519638 4.700000 11.800000 118.594958 4.700000 11.900000 120.690277 4.700000 12.000000 122.805596 4.700000 12.100000 124.940916 4.700000 12.200000 127.096235 4.700000 12.300000 129.271554 4.700000 12.400000 131.466873 4.700000 12.500000 133.682193 4.700000 12.600000 135.917512 4.700000 12.700000 138.172831 4.700000 12.800000 140.448151 4.700000 12.900000 142.743470 4.700000 13.000000 145.058789 4.700000 13.100000 147.394109 4.700000 13.200000 149.749428 4.700000 13.300000 152.124747 4.700000 13.400000 154.520066 4.700000 13.500000 156.935386 4.700000 13.600000 159.370705 4.700000 13.700000 161.826024 4.700000 13.800000 164.301344 4.700000 13.900000 166.796663 4.700000 14.000000 169.311982 4.700000 14.100000 171.847302 4.700000 14.200000 174.402621 4.700000 14.300000 176.977940 4.700000 14.400000 179.573260 4.700000 14.500000 182.188579 4.700000 14.600000 184.823898 4.700000 14.700000 187.479217 4.700000 14.800000 190.154537 4.700000 14.900000 192.849856 4.700000 15.000000 195.565175 4.800000 -5.000000 50.997412 4.800000 -4.900000 49.740018 4.800000 -4.800000 48.502623 4.800000 -4.700000 47.285228 4.800000 -4.600000 46.087833 4.800000 -4.500000 44.910438 4.800000 -4.400000 43.753044 4.800000 -4.300000 42.615649 4.800000 -4.200000 41.498254 4.800000 -4.100000 40.400859 4.800000 -4.000000 39.323465 4.800000 -3.900000 38.266070 4.800000 -3.800000 37.228675 4.800000 -3.700000 36.211280 4.800000 -3.600000 35.213886 4.800000 -3.500000 34.236491 4.800000 -3.400000 33.279096 4.800000 -3.300000 32.341701 4.800000 -3.200000 31.424307 4.800000 -3.100000 30.526912 4.800000 -3.000000 29.649517 4.800000 -2.900000 28.792122 4.800000 -2.800000 27.954728 4.800000 -2.700000 27.137333 4.800000 -2.600000 26.339938 4.800000 -2.500000 25.562543 4.800000 -2.400000 24.805148 4.800000 -2.300000 24.067754 4.800000 -2.200000 23.350359 4.800000 -2.100000 22.652964 4.800000 -2.000000 21.975569 4.800000 -1.900000 21.318175 4.800000 -1.800000 20.680780 4.800000 -1.700000 20.063385 4.800000 -1.600000 19.465990 4.800000 -1.500000 18.888596 4.800000 -1.400000 18.331201 4.800000 -1.300000 17.793806 4.800000 -1.200000 17.276411 4.800000 -1.100000 16.779017 4.800000 -1.000000 16.301622 4.800000 -0.900000 15.844227 4.800000 -0.800000 15.406832 4.800000 -0.700000 14.989437 4.800000 -0.600000 14.592043 4.800000 -0.500000 14.214648 4.800000 -0.400000 13.857253 4.800000 -0.300000 13.519858 4.800000 -0.200000 13.202464 4.800000 -0.100000 12.905069 4.800000 -0.000000 12.627674 4.800000 0.100000 12.370279 4.800000 0.200000 12.132885 4.800000 0.300000 11.915490 4.800000 0.400000 11.718095 4.800000 0.500000 11.540700 4.800000 0.600000 11.383306 4.800000 0.700000 11.245911 4.800000 0.800000 11.128516 4.800000 0.900000 11.031121 4.800000 1.000000 10.953726 4.800000 1.100000 10.896332 4.800000 1.200000 10.858937 4.800000 1.300000 10.841542 4.800000 1.400000 10.844147 4.800000 1.500000 10.866753 4.800000 1.600000 10.909358 4.800000 1.700000 10.971963 4.800000 1.800000 11.054568 4.800000 1.900000 11.157174 4.800000 2.000000 11.279779 4.800000 2.100000 11.422384 4.800000 2.200000 11.584989 4.800000 2.300000 11.767595 4.800000 2.400000 11.970200 4.800000 2.500000 12.192805 4.800000 2.600000 12.435410 4.800000 2.700000 12.698015 4.800000 2.800000 12.980621 4.800000 2.900000 13.283226 4.800000 3.000000 13.605831 4.800000 3.100000 13.948436 4.800000 3.200000 14.311042 4.800000 3.300000 14.693647 4.800000 3.400000 15.096252 4.800000 3.500000 15.518857 4.800000 3.600000 15.961463 4.800000 3.700000 16.424068 4.800000 3.800000 16.906673 4.800000 3.900000 17.409278 4.800000 4.000000 17.931884 4.800000 4.100000 18.474489 4.800000 4.200000 19.037094 4.800000 4.300000 19.619699 4.800000 4.400000 20.222304 4.800000 4.500000 20.844910 4.800000 4.600000 21.487515 4.800000 4.700000 22.150120 4.800000 4.800000 22.832725 4.800000 4.900000 23.535331 4.800000 5.000000 24.257936 4.800000 5.100000 25.000541 4.800000 5.200000 25.763146 4.800000 5.300000 26.545752 4.800000 5.400000 27.348357 4.800000 5.500000 28.170962 4.800000 5.600000 29.013567 4.800000 5.700000 29.876173 4.800000 5.800000 30.758778 4.800000 5.900000 31.661383 4.800000 6.000000 32.583988 4.800000 6.100000 33.526593 4.800000 6.200000 34.489199 4.800000 6.300000 35.471804 4.800000 6.400000 36.474409 4.800000 6.500000 37.497014 4.800000 6.600000 38.539620 4.800000 6.700000 39.602225 4.800000 6.800000 40.684830 4.800000 6.900000 41.787435 4.800000 7.000000 42.910041 4.800000 7.100000 44.052646 4.800000 7.200000 45.215251 4.800000 7.300000 46.397856 4.800000 7.400000 47.600462 4.800000 7.500000 48.823067 4.800000 7.600000 50.065672 4.800000 7.700000 51.328277 4.800000 7.800000 52.610882 4.800000 7.900000 53.913488 4.800000 8.000000 55.236093 4.800000 8.100000 56.578698 4.800000 8.200000 57.941303 4.800000 8.300000 59.323909 4.800000 8.400000 60.726514 4.800000 8.500000 62.149119 4.800000 8.600000 63.591724 4.800000 8.700000 65.054330 4.800000 8.800000 66.536935 4.800000 8.900000 68.039540 4.800000 9.000000 69.562145 4.800000 9.100000 71.104751 4.800000 9.200000 72.667356 4.800000 9.300000 74.249961 4.800000 9.400000 75.852566 4.800000 9.500000 77.475171 4.800000 9.600000 79.117777 4.800000 9.700000 80.780382 4.800000 9.800000 82.462987 4.800000 9.900000 84.165592 4.800000 10.000000 85.888198 4.800000 10.100000 87.630803 4.800000 10.200000 89.393408 4.800000 10.300000 91.176013 4.800000 10.400000 92.978619 4.800000 10.500000 94.801224 4.800000 10.600000 96.643829 4.800000 10.700000 98.506434 4.800000 10.800000 100.389040 4.800000 10.900000 102.291645 4.800000 11.000000 104.214250 4.800000 11.100000 106.156855 4.800000 11.200000 108.119460 4.800000 11.300000 110.102066 4.800000 11.400000 112.104671 4.800000 11.500000 114.127276 4.800000 11.600000 116.169881 4.800000 11.700000 118.232487 4.800000 11.800000 120.315092 4.800000 11.900000 122.417697 4.800000 12.000000 124.540302 4.800000 12.100000 126.682908 4.800000 12.200000 128.845513 4.800000 12.300000 131.028118 4.800000 12.400000 133.230723 4.800000 12.500000 135.453329 4.800000 12.600000 137.695934 4.800000 12.700000 139.958539 4.800000 12.800000 142.241144 4.800000 12.900000 144.543749 4.800000 13.000000 146.866355 4.800000 13.100000 149.208960 4.800000 13.200000 151.571565 4.800000 13.300000 153.954170 4.800000 13.400000 156.356776 4.800000 13.500000 158.779381 4.800000 13.600000 161.221986 4.800000 13.700000 163.684591 4.800000 13.800000 166.167197 4.800000 13.900000 168.669802 4.800000 14.000000 171.192407 4.800000 14.100000 173.735012 4.800000 14.200000 176.297618 4.800000 14.300000 178.880223 4.800000 14.400000 181.482828 4.800000 14.500000 184.105433 4.800000 14.600000 186.748038 4.800000 14.700000 189.410644 4.800000 14.800000 192.093249 4.800000 14.900000 194.795854 4.800000 15.000000 197.518459 4.900000 -5.000000 51.520334 4.900000 -4.900000 50.269708 4.900000 -4.800000 49.039082 4.900000 -4.700000 47.828457 4.900000 -4.600000 46.637831 4.900000 -4.500000 45.467206 4.900000 -4.400000 44.316580 4.900000 -4.300000 43.185955 4.900000 -4.200000 42.075329 4.900000 -4.100000 40.984703 4.900000 -4.000000 39.914078 4.900000 -3.900000 38.863452 4.900000 -3.800000 37.832827 4.900000 -3.700000 36.822201 4.900000 -3.600000 35.831576 4.900000 -3.500000 34.860950 4.900000 -3.400000 33.910324 4.900000 -3.300000 32.979699 4.900000 -3.200000 32.069073 4.900000 -3.100000 31.178448 4.900000 -3.000000 30.307822 4.900000 -2.900000 29.457197 4.900000 -2.800000 28.626571 4.900000 -2.700000 27.815945 4.900000 -2.600000 27.025320 4.900000 -2.500000 26.254694 4.900000 -2.400000 25.504069 4.900000 -2.300000 24.773443 4.900000 -2.200000 24.062818 4.900000 -2.100000 23.372192 4.900000 -2.000000 22.701566 4.900000 -1.900000 22.050941 4.900000 -1.800000 21.420315 4.900000 -1.700000 20.809690 4.900000 -1.600000 20.219064 4.900000 -1.500000 19.648439 4.900000 -1.400000 19.097813 4.900000 -1.300000 18.567187 4.900000 -1.200000 18.056562 4.900000 -1.100000 17.565936 4.900000 -1.000000 17.095311 4.900000 -0.900000 16.644685 4.900000 -0.800000 16.214060 4.900000 -0.700000 15.803434 4.900000 -0.600000 15.412808 4.900000 -0.500000 15.042183 4.900000 -0.400000 14.691557 4.900000 -0.300000 14.360932 4.900000 -0.200000 14.050306 4.900000 -0.100000 13.759681 4.900000 -0.000000 13.489055 4.900000 0.100000 13.238429 4.900000 0.200000 13.007804 4.900000 0.300000 12.797178 4.900000 0.400000 12.606553 4.900000 0.500000 12.435927 4.900000 0.600000 12.285302 4.900000 0.700000 12.154676 4.900000 0.800000 12.044050 4.900000 0.900000 11.953425 4.900000 1.000000 11.882799 4.900000 1.100000 11.832174 4.900000 1.200000 11.801548 4.900000 1.300000 11.790923 4.900000 1.400000 11.800297 4.900000 1.500000 11.829671 4.900000 1.600000 11.879046 4.900000 1.700000 11.948420 4.900000 1.800000 12.037795 4.900000 1.900000 12.147169 4.900000 2.000000 12.276544 4.900000 2.100000 12.425918 4.900000 2.200000 12.595292 4.900000 2.300000 12.784667 4.900000 2.400000 12.994041 4.900000 2.500000 13.223416 4.900000 2.600000 13.472790 4.900000 2.700000 13.742165 4.900000 2.800000 14.031539 4.900000 2.900000 14.340913 4.900000 3.000000 14.670288 4.900000 3.100000 15.019662 4.900000 3.200000 15.389037 4.900000 3.300000 15.778411 4.900000 3.400000 16.187786 4.900000 3.500000 16.617160 4.900000 3.600000 17.066534 4.900000 3.700000 17.535909 4.900000 3.800000 18.025283 4.900000 3.900000 18.534658 4.900000 4.000000 19.064032 4.900000 4.100000 19.613407 4.900000 4.200000 20.182781 4.900000 4.300000 20.772155 4.900000 4.400000 21.381530 4.900000 4.500000 22.010904 4.900000 4.600000 22.660279 4.900000 4.700000 23.329653 4.900000 4.800000 24.019028 4.900000 4.900000 24.728402 4.900000 5.000000 25.457776 4.900000 5.100000 26.207151 4.900000 5.200000 26.976525 4.900000 5.300000 27.765900 4.900000 5.400000 28.575274 4.900000 5.500000 29.404649 4.900000 5.600000 30.254023 4.900000 5.700000 31.123397 4.900000 5.800000 32.012772 4.900000 5.900000 32.922146 4.900000 6.000000 33.851521 4.900000 6.100000 34.800895 4.900000 6.200000 35.770270 4.900000 6.300000 36.759644 4.900000 6.400000 37.769018 4.900000 6.500000 38.798393 4.900000 6.600000 39.847767 4.900000 6.700000 40.917142 4.900000 6.800000 42.006516 4.900000 6.900000 43.115891 4.900000 7.000000 44.245265 4.900000 7.100000 45.394639 4.900000 7.200000 46.564014 4.900000 7.300000 47.753388 4.900000 7.400000 48.962763 4.900000 7.500000 50.192137 4.900000 7.600000 51.441512 4.900000 7.700000 52.710886 4.900000 7.800000 54.000260 4.900000 7.900000 55.309635 4.900000 8.000000 56.639009 4.900000 8.100000 57.988384 4.900000 8.200000 59.357758 4.900000 8.300000 60.747133 4.900000 8.400000 62.156507 4.900000 8.500000 63.585881 4.900000 8.600000 65.035256 4.900000 8.700000 66.504630 4.900000 8.800000 67.994005 4.900000 8.900000 69.503379 4.900000 9.000000 71.032754 4.900000 9.100000 72.582128 4.900000 9.200000 74.151502 4.900000 9.300000 75.740877 4.900000 9.400000 77.350251 4.900000 9.500000 78.979626 4.900000 9.600000 80.629000 4.900000 9.700000 82.298375 4.900000 9.800000 83.987749 4.900000 9.900000 85.697123 4.900000 10.000000 87.426498 4.900000 10.100000 89.175872 4.900000 10.200000 90.945247 4.900000 10.300000 92.734621 4.900000 10.400000 94.543996 4.900000 10.500000 96.373370 4.900000 10.600000 98.222744 4.900000 10.700000 100.092119 4.900000 10.800000 101.981493 4.900000 10.900000 103.890868 4.900000 11.000000 105.820242 4.900000 11.100000 107.769617 4.900000 11.200000 109.738991 4.900000 11.300000 111.728366 4.900000 11.400000 113.737740 4.900000 11.500000 115.767114 4.900000 11.600000 117.816489 4.900000 11.700000 119.885863 4.900000 11.800000 121.975238 4.900000 11.900000 124.084612 4.900000 12.000000 126.213987 4.900000 12.100000 128.363361 4.900000 12.200000 130.532735 4.900000 12.300000 132.722110 4.900000 12.400000 134.931484 4.900000 12.500000 137.160859 4.900000 12.600000 139.410233 4.900000 12.700000 141.679608 4.900000 12.800000 143.968982 4.900000 12.900000 146.278356 4.900000 13.000000 148.607731 4.900000 13.100000 150.957105 4.900000 13.200000 153.326480 4.900000 13.300000 155.715854 4.900000 13.400000 158.125229 4.900000 13.500000 160.554603 4.900000 13.600000 163.003977 4.900000 13.700000 165.473352 4.900000 13.800000 167.962726 4.900000 13.900000 170.472101 4.900000 14.000000 173.001475 4.900000 14.100000 175.550850 4.900000 14.200000 178.120224 4.900000 14.300000 180.709598 4.900000 14.400000 183.318973 4.900000 14.500000 185.948347 4.900000 14.600000 188.597722 4.900000 14.700000 191.267096 4.900000 14.800000 193.956471 4.900000 14.900000 196.665845 4.900000 15.000000 199.395219 5.000000 -5.000000 52.060054 5.000000 -4.900000 50.815681 5.000000 -4.800000 49.591308 5.000000 -4.700000 48.386935 5.000000 -4.600000 47.202562 5.000000 -4.500000 46.038188 5.000000 -4.400000 44.893815 5.000000 -4.300000 43.769442 5.000000 -4.200000 42.665069 5.000000 -4.100000 41.580696 5.000000 -4.000000 40.516323 5.000000 -3.900000 39.471950 5.000000 -3.800000 38.447577 5.000000 -3.700000 37.443204 5.000000 -3.600000 36.458830 5.000000 -3.500000 35.494457 5.000000 -3.400000 34.550084 5.000000 -3.300000 33.625711 5.000000 -3.200000 32.721338 5.000000 -3.100000 31.836965 5.000000 -3.000000 30.972592 5.000000 -2.900000 30.128219 5.000000 -2.800000 29.303846 5.000000 -2.700000 28.499472 5.000000 -2.600000 27.715099 5.000000 -2.500000 26.950726 5.000000 -2.400000 26.206353 5.000000 -2.300000 25.481980 5.000000 -2.200000 24.777607 5.000000 -2.100000 24.093234 5.000000 -2.000000 23.428861 5.000000 -1.900000 22.784487 5.000000 -1.800000 22.160114 5.000000 -1.700000 21.555741 5.000000 -1.600000 20.971368 5.000000 -1.500000 20.406995 5.000000 -1.400000 19.862622 5.000000 -1.300000 19.338249 5.000000 -1.200000 18.833876 5.000000 -1.100000 18.349503 5.000000 -1.000000 17.885129 5.000000 -0.900000 17.440756 5.000000 -0.800000 17.016383 5.000000 -0.700000 16.612010 5.000000 -0.600000 16.227637 5.000000 -0.500000 15.863264 5.000000 -0.400000 15.518891 5.000000 -0.300000 15.194518 5.000000 -0.200000 14.890145 5.000000 -0.100000 14.605771 5.000000 -0.000000 14.341398 5.000000 0.100000 14.097025 5.000000 0.200000 13.872652 5.000000 0.300000 13.668279 5.000000 0.400000 13.483906 5.000000 0.500000 13.319533 5.000000 0.600000 13.175160 5.000000 0.700000 13.050786 5.000000 0.800000 12.946413 5.000000 0.900000 12.862040 5.000000 1.000000 12.797667 5.000000 1.100000 12.753294 5.000000 1.200000 12.728921 5.000000 1.300000 12.724548 5.000000 1.400000 12.740175 5.000000 1.500000 12.775802 5.000000 1.600000 12.831428 5.000000 1.700000 12.907055 5.000000 1.800000 13.002682 5.000000 1.900000 13.118309 5.000000 2.000000 13.253936 5.000000 2.100000 13.409563 5.000000 2.200000 13.585190 5.000000 2.300000 13.780817 5.000000 2.400000 13.996444 5.000000 2.500000 14.232070 5.000000 2.600000 14.487697 5.000000 2.700000 14.763324 5.000000 2.800000 15.058951 5.000000 2.900000 15.374578 5.000000 3.000000 15.710205 5.000000 3.100000 16.065832 5.000000 3.200000 16.441459 5.000000 3.300000 16.837086 5.000000 3.400000 17.252712 5.000000 3.500000 17.688339 5.000000 3.600000 18.143966 5.000000 3.700000 18.619593 5.000000 3.800000 19.115220 5.000000 3.900000 19.630847 5.000000 4.000000 20.166474 5.000000 4.100000 20.722101 5.000000 4.200000 21.297727 5.000000 4.300000 21.893354 5.000000 4.400000 22.508981 5.000000 4.500000 23.144608 5.000000 4.600000 23.800235 5.000000 4.700000 24.475862 5.000000 4.800000 25.171489 5.000000 4.900000 25.887116 5.000000 5.000000 26.622743 5.000000 5.100000 27.378369 5.000000 5.200000 28.153996 5.000000 5.300000 28.949623 5.000000 5.400000 29.765250 5.000000 5.500000 30.600877 5.000000 5.600000 31.456504 5.000000 5.700000 32.332131 5.000000 5.800000 33.227758 5.000000 5.900000 34.143385 5.000000 6.000000 35.079011 5.000000 6.100000 36.034638 5.000000 6.200000 37.010265 5.000000 6.300000 38.005892 5.000000 6.400000 39.021519 5.000000 6.500000 40.057146 5.000000 6.600000 41.112773 5.000000 6.700000 42.188400 5.000000 6.800000 43.284026 5.000000 6.900000 44.399653 5.000000 7.000000 45.535280 5.000000 7.100000 46.690907 5.000000 7.200000 47.866534 5.000000 7.300000 49.062161 5.000000 7.400000 50.277788 5.000000 7.500000 51.513415 5.000000 7.600000 52.769042 5.000000 7.700000 54.044668 5.000000 7.800000 55.340295 5.000000 7.900000 56.655922 5.000000 8.000000 57.991549 5.000000 8.100000 59.347176 5.000000 8.200000 60.722803 5.000000 8.300000 62.118430 5.000000 8.400000 63.534057 5.000000 8.500000 64.969684 5.000000 8.600000 66.425310 5.000000 8.700000 67.900937 5.000000 8.800000 69.396564 5.000000 8.900000 70.912191 5.000000 9.000000 72.447818 5.000000 9.100000 74.003445 5.000000 9.200000 75.579072 5.000000 9.300000 77.174699 5.000000 9.400000 78.790326 5.000000 9.500000 80.425952 5.000000 9.600000 82.081579 5.000000 9.700000 83.757206 5.000000 9.800000 85.452833 5.000000 9.900000 87.168460 5.000000 10.000000 88.904087 5.000000 10.100000 90.659714 5.000000 10.200000 92.435341 5.000000 10.300000 94.230967 5.000000 10.400000 96.046594 5.000000 10.500000 97.882221 5.000000 10.600000 99.737848 5.000000 10.700000 101.613475 5.000000 10.800000 103.509102 5.000000 10.900000 105.424729 5.000000 11.000000 107.360356 5.000000 11.100000 109.315983 5.000000 11.200000 111.291609 5.000000 11.300000 113.287236 5.000000 11.400000 115.302863 5.000000 11.500000 117.338490 5.000000 11.600000 119.394117 5.000000 11.700000 121.469744 5.000000 11.800000 123.565371 5.000000 11.900000 125.680998 5.000000 12.000000 127.816625 5.000000 12.100000 129.972251 5.000000 12.200000 132.147878 5.000000 12.300000 134.343505 5.000000 12.400000 136.559132 5.000000 12.500000 138.794759 5.000000 12.600000 141.050386 5.000000 12.700000 143.326013 5.000000 12.800000 145.621640 5.000000 12.900000 147.937266 5.000000 13.000000 150.272893 5.000000 13.100000 152.628520 5.000000 13.200000 155.004147 5.000000 13.300000 157.399774 5.000000 13.400000 159.815401 5.000000 13.500000 162.251028 5.000000 13.600000 164.706655 5.000000 13.700000 167.182282 5.000000 13.800000 169.677908 5.000000 13.900000 172.193535 5.000000 14.000000 174.729162 5.000000 14.100000 177.284789 5.000000 14.200000 179.860416 5.000000 14.300000 182.456043 5.000000 14.400000 185.071670 5.000000 14.500000 187.707297 5.000000 14.600000 190.362924 5.000000 14.700000 193.038550 5.000000 14.800000 195.734177 5.000000 14.900000 198.449804 5.000000 15.000000 201.185431 5.100000 -5.000000 52.606769 5.100000 -4.900000 51.368131 5.100000 -4.800000 50.149494 5.100000 -4.700000 48.950856 5.100000 -4.600000 47.772219 5.100000 -4.500000 46.613582 5.100000 -4.400000 45.474944 5.100000 -4.300000 44.356307 5.100000 -4.200000 43.257669 5.100000 -4.100000 42.179032 5.100000 -4.000000 41.120395 5.100000 -3.900000 40.081757 5.100000 -3.800000 39.063120 5.100000 -3.700000 38.064482 5.100000 -3.600000 37.085845 5.100000 -3.500000 36.127208 5.100000 -3.400000 35.188570 5.100000 -3.300000 34.269933 5.100000 -3.200000 33.371295 5.100000 -3.100000 32.492658 5.100000 -3.000000 31.634021 5.100000 -2.900000 30.795383 5.100000 -2.800000 29.976746 5.100000 -2.700000 29.178108 5.100000 -2.600000 28.399471 5.100000 -2.500000 27.640834 5.100000 -2.400000 26.902196 5.100000 -2.300000 26.183559 5.100000 -2.200000 25.484921 5.100000 -2.100000 24.806284 5.100000 -2.000000 24.147647 5.100000 -1.900000 23.509009 5.100000 -1.800000 22.890372 5.100000 -1.700000 22.291734 5.100000 -1.600000 21.713097 5.100000 -1.500000 21.154460 5.100000 -1.400000 20.615822 5.100000 -1.300000 20.097185 5.100000 -1.200000 19.598548 5.100000 -1.100000 19.119910 5.100000 -1.000000 18.661273 5.100000 -0.900000 18.222635 5.100000 -0.800000 17.803998 5.100000 -0.700000 17.405361 5.100000 -0.600000 17.026723 5.100000 -0.500000 16.668086 5.100000 -0.400000 16.329448 5.100000 -0.300000 16.010811 5.100000 -0.200000 15.712174 5.100000 -0.100000 15.433536 5.100000 -0.000000 15.174899 5.100000 0.100000 14.936261 5.100000 0.200000 14.717624 5.100000 0.300000 14.518987 5.100000 0.400000 14.340349 5.100000 0.500000 14.181712 5.100000 0.600000 14.043074 5.100000 0.700000 13.924437 5.100000 0.800000 13.825800 5.100000 0.900000 13.747162 5.100000 1.000000 13.688525 5.100000 1.100000 13.649887 5.100000 1.200000 13.631250 5.100000 1.300000 13.632613 5.100000 1.400000 13.653975 5.100000 1.500000 13.695338 5.100000 1.600000 13.756700 5.100000 1.700000 13.838063 5.100000 1.800000 13.939426 5.100000 1.900000 14.060788 5.100000 2.000000 14.202151 5.100000 2.100000 14.363513 5.100000 2.200000 14.544876 5.100000 2.300000 14.746239 5.100000 2.400000 14.967601 5.100000 2.500000 15.208964 5.100000 2.600000 15.470326 5.100000 2.700000 15.751689 5.100000 2.800000 16.053052 5.100000 2.900000 16.374414 5.100000 3.000000 16.715777 5.100000 3.100000 17.077139 5.100000 3.200000 17.458502 5.100000 3.300000 17.859865 5.100000 3.400000 18.281227 5.100000 3.500000 18.722590 5.100000 3.600000 19.183952 5.100000 3.700000 19.665315 5.100000 3.800000 20.166678 5.100000 3.900000 20.688040 5.100000 4.000000 21.229403 5.100000 4.100000 21.790765 5.100000 4.200000 22.372128 5.100000 4.300000 22.973491 5.100000 4.400000 23.594853 5.100000 4.500000 24.236216 5.100000 4.600000 24.897578 5.100000 4.700000 25.578941 5.100000 4.800000 26.280304 5.100000 4.900000 27.001666 5.100000 5.000000 27.743029 5.100000 5.100000 28.504391 5.100000 5.200000 29.285754 5.100000 5.300000 30.087117 5.100000 5.400000 30.908479 5.100000 5.500000 31.749842 5.100000 5.600000 32.611205 5.100000 5.700000 33.492567 5.100000 5.800000 34.393930 5.100000 5.900000 35.315292 5.100000 6.000000 36.256655 5.100000 6.100000 37.218018 5.100000 6.200000 38.199380 5.100000 6.300000 39.200743 5.100000 6.400000 40.222105 5.100000 6.500000 41.263468 5.100000 6.600000 42.324831 5.100000 6.700000 43.406193 5.100000 6.800000 44.507556 5.100000 6.900000 45.628918 5.100000 7.000000 46.770281 5.100000 7.100000 47.931644 5.100000 7.200000 49.113006 5.100000 7.300000 50.314369 5.100000 7.400000 51.535731 5.100000 7.500000 52.777094 5.100000 7.600000 54.038457 5.100000 7.700000 55.319819 5.100000 7.800000 56.621182 5.100000 7.900000 57.942544 5.100000 8.000000 59.283907 5.100000 8.100000 60.645270 5.100000 8.200000 62.026632 5.100000 8.300000 63.427995 5.100000 8.400000 64.849357 5.100000 8.500000 66.290720 5.100000 8.600000 67.752083 5.100000 8.700000 69.233445 5.100000 8.800000 70.734808 5.100000 8.900000 72.256170 5.100000 9.000000 73.797533 5.100000 9.100000 75.358896 5.100000 9.200000 76.940258 5.100000 9.300000 78.541621 5.100000 9.400000 80.162983 5.100000 9.500000 81.804346 5.100000 9.600000 83.465709 5.100000 9.700000 85.147071 5.100000 9.800000 86.848434 5.100000 9.900000 88.569796 5.100000 10.000000 90.311159 5.100000 10.100000 92.072522 5.100000 10.200000 93.853884 5.100000 10.300000 95.655247 5.100000 10.400000 97.476609 5.100000 10.500000 99.317972 5.100000 10.600000 101.179335 5.100000 10.700000 103.060697 5.100000 10.800000 104.962060 5.100000 10.900000 106.883422 5.100000 11.000000 108.824785 5.100000 11.100000 110.786148 5.100000 11.200000 112.767510 5.100000 11.300000 114.768873 5.100000 11.400000 116.790235 5.100000 11.500000 118.831598 5.100000 11.600000 120.892961 5.100000 11.700000 122.974323 5.100000 11.800000 125.075686 5.100000 11.900000 127.197048 5.100000 12.000000 129.338411 5.100000 12.100000 131.499774 5.100000 12.200000 133.681136 5.100000 12.300000 135.882499 5.100000 12.400000 138.103862 5.100000 12.500000 140.345224 5.100000 12.600000 142.606587 5.100000 12.700000 144.887949 5.100000 12.800000 147.189312 5.100000 12.900000 149.510675 5.100000 13.000000 151.852037 5.100000 13.100000 154.213400 5.100000 13.200000 156.594762 5.100000 13.300000 158.996125 5.100000 13.400000 161.417488 5.100000 13.500000 163.858850 5.100000 13.600000 166.320213 5.100000 13.700000 168.801575 5.100000 13.800000 171.302938 5.100000 13.900000 173.824301 5.100000 14.000000 176.365663 5.100000 14.100000 178.927026 5.100000 14.200000 181.508388 5.100000 14.300000 184.109751 5.100000 14.400000 186.731114 5.100000 14.500000 189.372476 5.100000 14.600000 192.033839 5.100000 14.700000 194.715201 5.100000 14.800000 197.416564 5.100000 14.900000 200.137927 5.100000 15.000000 202.879289 5.200000 -5.000000 53.150984 5.200000 -4.900000 51.917565 5.200000 -4.800000 50.704147 5.200000 -4.700000 49.510729 5.200000 -4.600000 48.337310 5.200000 -4.500000 47.183892 5.200000 -4.400000 46.050473 5.200000 -4.300000 44.937055 5.200000 -4.200000 43.843637 5.200000 -4.100000 42.770218 5.200000 -4.000000 41.716800 5.200000 -3.900000 40.683381 5.200000 -3.800000 39.669963 5.200000 -3.700000 38.676544 5.200000 -3.600000 37.703126 5.200000 -3.500000 36.749708 5.200000 -3.400000 35.816289 5.200000 -3.300000 34.902871 5.200000 -3.200000 34.009452 5.200000 -3.100000 33.136034 5.200000 -3.000000 32.282616 5.200000 -2.900000 31.449197 5.200000 -2.800000 30.635779 5.200000 -2.700000 29.842360 5.200000 -2.600000 29.068942 5.200000 -2.500000 28.315523 5.200000 -2.400000 27.582105 5.200000 -2.300000 26.868687 5.200000 -2.200000 26.175268 5.200000 -2.100000 25.501850 5.200000 -2.000000 24.848431 5.200000 -1.900000 24.215013 5.200000 -1.800000 23.601595 5.200000 -1.700000 23.008176 5.200000 -1.600000 22.434758 5.200000 -1.500000 21.881339 5.200000 -1.400000 21.347921 5.200000 -1.300000 20.834502 5.200000 -1.200000 20.341084 5.200000 -1.100000 19.867666 5.200000 -1.000000 19.414247 5.200000 -0.900000 18.980829 5.200000 -0.800000 18.567410 5.200000 -0.700000 18.173992 5.200000 -0.600000 17.800574 5.200000 -0.500000 17.447155 5.200000 -0.400000 17.113737 5.200000 -0.300000 16.800318 5.200000 -0.200000 16.506900 5.200000 -0.100000 16.233481 5.200000 -0.000000 15.980063 5.200000 0.100000 15.746645 5.200000 0.200000 15.533226 5.200000 0.300000 15.339808 5.200000 0.400000 15.166389 5.200000 0.500000 15.012971 5.200000 0.600000 14.879552 5.200000 0.700000 14.766134 5.200000 0.800000 14.672716 5.200000 0.900000 14.599297 5.200000 1.000000 14.545879 5.200000 1.100000 14.512460 5.200000 1.200000 14.499042 5.200000 1.300000 14.505624 5.200000 1.400000 14.532205 5.200000 1.500000 14.578787 5.200000 1.600000 14.645368 5.200000 1.700000 14.731950 5.200000 1.800000 14.838531 5.200000 1.900000 14.965113 5.200000 2.000000 15.111695 5.200000 2.100000 15.278276 5.200000 2.200000 15.464858 5.200000 2.300000 15.671439 5.200000 2.400000 15.898021 5.200000 2.500000 16.144603 5.200000 2.600000 16.411184 5.200000 2.700000 16.697766 5.200000 2.800000 17.004347 5.200000 2.900000 17.330929 5.200000 3.000000 17.677510 5.200000 3.100000 18.044092 5.200000 3.200000 18.430674 5.200000 3.300000 18.837255 5.200000 3.400000 19.263837 5.200000 3.500000 19.710418 5.200000 3.600000 20.177000 5.200000 3.700000 20.663582 5.200000 3.800000 21.170163 5.200000 3.900000 21.696745 5.200000 4.000000 22.243326 5.200000 4.100000 22.809908 5.200000 4.200000 23.396489 5.200000 4.300000 24.003071 5.200000 4.400000 24.629653 5.200000 4.500000 25.276234 5.200000 4.600000 25.942816 5.200000 4.700000 26.629397 5.200000 4.800000 27.335979 5.200000 4.900000 28.062561 5.200000 5.000000 28.809142 5.200000 5.100000 29.575724 5.200000 5.200000 30.362305 5.200000 5.300000 31.168887 5.200000 5.400000 31.995468 5.200000 5.500000 32.842050 5.200000 5.600000 33.708632 5.200000 5.700000 34.595213 5.200000 5.800000 35.501795 5.200000 5.900000 36.428376 5.200000 6.000000 37.374958 5.200000 6.100000 38.341540 5.200000 6.200000 39.328121 5.200000 6.300000 40.334703 5.200000 6.400000 41.361284 5.200000 6.500000 42.407866 5.200000 6.600000 43.474447 5.200000 6.700000 44.561029 5.200000 6.800000 45.667611 5.200000 6.900000 46.794192 5.200000 7.000000 47.940774 5.200000 7.100000 49.107355 5.200000 7.200000 50.293937 5.200000 7.300000 51.500519 5.200000 7.400000 52.727100 5.200000 7.500000 53.973682 5.200000 7.600000 55.240263 5.200000 7.700000 56.526845 5.200000 7.800000 57.833426 5.200000 7.900000 59.160008 5.200000 8.000000 60.506590 5.200000 8.100000 61.873171 5.200000 8.200000 63.259753 5.200000 8.300000 64.666334 5.200000 8.400000 66.092916 5.200000 8.500000 67.539498 5.200000 8.600000 69.006079 5.200000 8.700000 70.492661 5.200000 8.800000 71.999242 5.200000 8.900000 73.525824 5.200000 9.000000 75.072405 5.200000 9.100000 76.638987 5.200000 9.200000 78.225569 5.200000 9.300000 79.832150 5.200000 9.400000 81.458732 5.200000 9.500000 83.105313 5.200000 9.600000 84.771895 5.200000 9.700000 86.458477 5.200000 9.800000 88.165058 5.200000 9.900000 89.891640 5.200000 10.000000 91.638221 5.200000 10.100000 93.404803 5.200000 10.200000 95.191384 5.200000 10.300000 96.997966 5.200000 10.400000 98.824548 5.200000 10.500000 100.671129 5.200000 10.600000 102.537711 5.200000 10.700000 104.424292 5.200000 10.800000 106.330874 5.200000 10.900000 108.257456 5.200000 11.000000 110.204037 5.200000 11.100000 112.170619 5.200000 11.200000 114.157200 5.200000 11.300000 116.163782 5.200000 11.400000 118.190363 5.200000 11.500000 120.236945 5.200000 11.600000 122.303527 5.200000 11.700000 124.390108 5.200000 11.800000 126.496690 5.200000 11.900000 128.623271 5.200000 12.000000 130.769853 5.200000 12.100000 132.936435 5.200000 12.200000 135.123016 5.200000 12.300000 137.329598 5.200000 12.400000 139.556179 5.200000 12.500000 141.802761 5.200000 12.600000 144.069342 5.200000 12.700000 146.355924 5.200000 12.800000 148.662506 5.200000 12.900000 150.989087 5.200000 13.000000 153.335669 5.200000 13.100000 155.702250 5.200000 13.200000 158.088832 5.200000 13.300000 160.495413 5.200000 13.400000 162.921995 5.200000 13.500000 165.368577 5.200000 13.600000 167.835158 5.200000 13.700000 170.321740 5.200000 13.800000 172.828321 5.200000 13.900000 175.354903 5.200000 14.000000 177.901485 5.200000 14.100000 180.468066 5.200000 14.200000 183.054648 5.200000 14.300000 185.661229 5.200000 14.400000 188.287811 5.200000 14.500000 190.934392 5.200000 14.600000 193.600974 5.200000 14.700000 196.287556 5.200000 14.800000 198.994137 5.200000 14.900000 201.720719 5.200000 15.000000 204.467300 5.300000 -5.000000 53.683609 5.300000 -4.900000 52.454893 5.300000 -4.800000 51.246177 5.300000 -4.700000 50.057460 5.300000 -4.600000 48.888744 5.300000 -4.500000 47.740028 5.300000 -4.400000 46.611312 5.300000 -4.300000 45.502596 5.300000 -4.200000 44.413880 5.300000 -4.100000 43.345163 5.300000 -4.000000 42.296447 5.300000 -3.900000 41.267731 5.300000 -3.800000 40.259015 5.300000 -3.700000 39.270299 5.300000 -3.600000 38.301582 5.300000 -3.500000 37.352866 5.300000 -3.400000 36.424150 5.300000 -3.300000 35.515434 5.300000 -3.200000 34.626718 5.300000 -3.100000 33.758002 5.300000 -3.000000 32.909285 5.300000 -2.900000 32.080569 5.300000 -2.800000 31.271853 5.300000 -2.700000 30.483137 5.300000 -2.600000 29.714421 5.300000 -2.500000 28.965705 5.300000 -2.400000 28.236988 5.300000 -2.300000 27.528272 5.300000 -2.200000 26.839556 5.300000 -2.100000 26.170840 5.300000 -2.000000 25.522124 5.300000 -1.900000 24.893407 5.300000 -1.800000 24.284691 5.300000 -1.700000 23.695975 5.300000 -1.600000 23.127259 5.300000 -1.500000 22.578543 5.300000 -1.400000 22.049827 5.300000 -1.300000 21.541110 5.300000 -1.200000 21.052394 5.300000 -1.100000 20.583678 5.300000 -1.000000 20.134962 5.300000 -0.900000 19.706246 5.300000 -0.800000 19.297530 5.300000 -0.700000 18.908813 5.300000 -0.600000 18.540097 5.300000 -0.500000 18.191381 5.300000 -0.400000 17.862665 5.300000 -0.300000 17.553949 5.300000 -0.200000 17.265232 5.300000 -0.100000 16.996516 5.300000 -0.000000 16.747800 5.300000 0.100000 16.519084 5.300000 0.200000 16.310368 5.300000 0.300000 16.121652 5.300000 0.400000 15.952935 5.300000 0.500000 15.804219 5.300000 0.600000 15.675503 5.300000 0.700000 15.566787 5.300000 0.800000 15.478071 5.300000 0.900000 15.409355 5.300000 1.000000 15.360638 5.300000 1.100000 15.331922 5.300000 1.200000 15.323206 5.300000 1.300000 15.334490 5.300000 1.400000 15.365774 5.300000 1.500000 15.417058 5.300000 1.600000 15.488341 5.300000 1.700000 15.579625 5.300000 1.800000 15.690909 5.300000 1.900000 15.822193 5.300000 2.000000 15.973477 5.300000 2.100000 16.144760 5.300000 2.200000 16.336044 5.300000 2.300000 16.547328 5.300000 2.400000 16.778612 5.300000 2.500000 17.029896 5.300000 2.600000 17.301180 5.300000 2.700000 17.592463 5.300000 2.800000 17.903747 5.300000 2.900000 18.235031 5.300000 3.000000 18.586315 5.300000 3.100000 18.957599 5.300000 3.200000 19.348883 5.300000 3.300000 19.760166 5.300000 3.400000 20.191450 5.300000 3.500000 20.642734 5.300000 3.600000 21.114018 5.300000 3.700000 21.605302 5.300000 3.800000 22.116585 5.300000 3.900000 22.647869 5.300000 4.000000 23.199153 5.300000 4.100000 23.770437 5.300000 4.200000 24.361721 5.300000 4.300000 24.973005 5.300000 4.400000 25.604288 5.300000 4.500000 26.255572 5.300000 4.600000 26.926856 5.300000 4.700000 27.618140 5.300000 4.800000 28.329424 5.300000 4.900000 29.060708 5.300000 5.000000 29.811991 5.300000 5.100000 30.583275 5.300000 5.200000 31.374559 5.300000 5.300000 32.185843 5.300000 5.400000 33.017127 5.300000 5.500000 33.868410 5.300000 5.600000 34.739694 5.300000 5.700000 35.630978 5.300000 5.800000 36.542262 5.300000 5.900000 37.473546 5.300000 6.000000 38.424830 5.300000 6.100000 39.396113 5.300000 6.200000 40.387397 5.300000 6.300000 41.398681 5.300000 6.400000 42.429965 5.300000 6.500000 43.481249 5.300000 6.600000 44.552533 5.300000 6.700000 45.643816 5.300000 6.800000 46.755100 5.300000 6.900000 47.886384 5.300000 7.000000 49.037668 5.300000 7.100000 50.208952 5.300000 7.200000 51.400235 5.300000 7.300000 52.611519 5.300000 7.400000 53.842803 5.300000 7.500000 55.094087 5.300000 7.600000 56.365371 5.300000 7.700000 57.656655 5.300000 7.800000 58.967938 5.300000 7.900000 60.299222 5.300000 8.000000 61.650506 5.300000 8.100000 63.021790 5.300000 8.200000 64.413074 5.300000 8.300000 65.824358 5.300000 8.400000 67.255641 5.300000 8.500000 68.706925 5.300000 8.600000 70.178209 5.300000 8.700000 71.669493 5.300000 8.800000 73.180777 5.300000 8.900000 74.712061 5.300000 9.000000 76.263344 5.300000 9.100000 77.834628 5.300000 9.200000 79.425912 5.300000 9.300000 81.037196 5.300000 9.400000 82.668480 5.300000 9.500000 84.319763 5.300000 9.600000 85.991047 5.300000 9.700000 87.682331 5.300000 9.800000 89.393615 5.300000 9.900000 91.124899 5.300000 10.000000 92.876183 5.300000 10.100000 94.647466 5.300000 10.200000 96.438750 5.300000 10.300000 98.250034 5.300000 10.400000 100.081318 5.300000 10.500000 101.932602 5.300000 10.600000 103.803886 5.300000 10.700000 105.695169 5.300000 10.800000 107.606453 5.300000 10.900000 109.537737 5.300000 11.000000 111.489021 5.300000 11.100000 113.460305 5.300000 11.200000 115.451588 5.300000 11.300000 117.462872 5.300000 11.400000 119.494156 5.300000 11.500000 121.545440 5.300000 11.600000 123.616724 5.300000 11.700000 125.708008 5.300000 11.800000 127.819291 5.300000 11.900000 129.950575 5.300000 12.000000 132.101859 5.300000 12.100000 134.273143 5.300000 12.200000 136.464427 5.300000 12.300000 138.675711 5.300000 12.400000 140.906994 5.300000 12.500000 143.158278 5.300000 12.600000 145.429562 5.300000 12.700000 147.720846 5.300000 12.800000 150.032130 5.300000 12.900000 152.363413 5.300000 13.000000 154.714697 5.300000 13.100000 157.085981 5.300000 13.200000 159.477265 5.300000 13.300000 161.888549 5.300000 13.400000 164.319833 5.300000 13.500000 166.771116 5.300000 13.600000 169.242400 5.300000 13.700000 171.733684 5.300000 13.800000 174.244968 5.300000 13.900000 176.776252 5.300000 14.000000 179.327536 5.300000 14.100000 181.898819 5.300000 14.200000 184.490103 5.300000 14.300000 187.101387 5.300000 14.400000 189.732671 5.300000 14.500000 192.383955 5.300000 14.600000 195.055238 5.300000 14.700000 197.746522 5.300000 14.800000 200.457806 5.300000 14.900000 203.189090 5.300000 15.000000 205.940374 5.400000 -5.000000 54.196042 5.400000 -4.900000 52.971511 5.400000 -4.800000 51.766981 5.400000 -4.700000 50.582450 5.400000 -4.600000 49.417919 5.400000 -4.500000 48.273389 5.400000 -4.400000 47.148858 5.400000 -4.300000 46.044327 5.400000 -4.200000 44.959797 5.400000 -4.100000 43.895266 5.400000 -4.000000 42.850735 5.400000 -3.900000 41.826205 5.400000 -3.800000 40.821674 5.400000 -3.700000 39.837143 5.400000 -3.600000 38.872613 5.400000 -3.500000 37.928082 5.400000 -3.400000 37.003551 5.400000 -3.300000 36.099021 5.400000 -3.200000 35.214490 5.400000 -3.100000 34.349959 5.400000 -3.000000 33.505429 5.400000 -2.900000 32.680898 5.400000 -2.800000 31.876367 5.400000 -2.700000 31.091837 5.400000 -2.600000 30.327306 5.400000 -2.500000 29.582775 5.400000 -2.400000 28.858245 5.400000 -2.300000 28.153714 5.400000 -2.200000 27.469183 5.400000 -2.100000 26.804653 5.400000 -2.000000 26.160122 5.400000 -1.900000 25.535591 5.400000 -1.800000 24.931060 5.400000 -1.700000 24.346530 5.400000 -1.600000 23.781999 5.400000 -1.500000 23.237468 5.400000 -1.400000 22.712938 5.400000 -1.300000 22.208407 5.400000 -1.200000 21.723876 5.400000 -1.100000 21.259346 5.400000 -1.000000 20.814815 5.400000 -0.900000 20.390284 5.400000 -0.800000 19.985754 5.400000 -0.700000 19.601223 5.400000 -0.600000 19.236692 5.400000 -0.500000 18.892162 5.400000 -0.400000 18.567631 5.400000 -0.300000 18.263100 5.400000 -0.200000 17.978570 5.400000 -0.100000 17.714039 5.400000 -0.000000 17.469508 5.400000 0.100000 17.244978 5.400000 0.200000 17.040447 5.400000 0.300000 16.855916 5.400000 0.400000 16.691386 5.400000 0.500000 16.546855 5.400000 0.600000 16.422324 5.400000 0.700000 16.317794 5.400000 0.800000 16.233263 5.400000 0.900000 16.168732 5.400000 1.000000 16.124202 5.400000 1.100000 16.099671 5.400000 1.200000 16.095140 5.400000 1.300000 16.110610 5.400000 1.400000 16.146079 5.400000 1.500000 16.201548 5.400000 1.600000 16.277018 5.400000 1.700000 16.372487 5.400000 1.800000 16.487956 5.400000 1.900000 16.623426 5.400000 2.000000 16.778895 5.400000 2.100000 16.954364 5.400000 2.200000 17.149834 5.400000 2.300000 17.365303 5.400000 2.400000 17.600772 5.400000 2.500000 17.856242 5.400000 2.600000 18.131711 5.400000 2.700000 18.427180 5.400000 2.800000 18.742650 5.400000 2.900000 19.078119 5.400000 3.000000 19.433588 5.400000 3.100000 19.809058 5.400000 3.200000 20.204527 5.400000 3.300000 20.619996 5.400000 3.400000 21.055466 5.400000 3.500000 21.510935 5.400000 3.600000 21.986404 5.400000 3.700000 22.481874 5.400000 3.800000 22.997343 5.400000 3.900000 23.532812 5.400000 4.000000 24.088282 5.400000 4.100000 24.663751 5.400000 4.200000 25.259220 5.400000 4.300000 25.874689 5.400000 4.400000 26.510159 5.400000 4.500000 27.165628 5.400000 4.600000 27.841097 5.400000 4.700000 28.536567 5.400000 4.800000 29.252036 5.400000 4.900000 29.987505 5.400000 5.000000 30.742975 5.400000 5.100000 31.518444 5.400000 5.200000 32.313913 5.400000 5.300000 33.129383 5.400000 5.400000 33.964852 5.400000 5.500000 34.820321 5.400000 5.600000 35.695791 5.400000 5.700000 36.591260 5.400000 5.800000 37.506729 5.400000 5.900000 38.442199 5.400000 6.000000 39.397668 5.400000 6.100000 40.373137 5.400000 6.200000 41.368607 5.400000 6.300000 42.384076 5.400000 6.400000 43.419545 5.400000 6.500000 44.475015 5.400000 6.600000 45.550484 5.400000 6.700000 46.645953 5.400000 6.800000 47.761423 5.400000 6.900000 48.896892 5.400000 7.000000 50.052361 5.400000 7.100000 51.227831 5.400000 7.200000 52.423300 5.400000 7.300000 53.638769 5.400000 7.400000 54.874239 5.400000 7.500000 56.129708 5.400000 7.600000 57.405177 5.400000 7.700000 58.700647 5.400000 7.800000 60.016116 5.400000 7.900000 61.351585 5.400000 8.000000 62.707055 5.400000 8.100000 64.082524 5.400000 8.200000 65.477993 5.400000 8.300000 66.893463 5.400000 8.400000 68.328932 5.400000 8.500000 69.784401 5.400000 8.600000 71.259871 5.400000 8.700000 72.755340 5.400000 8.800000 74.270809 5.400000 8.900000 75.806279 5.400000 9.000000 77.361748 5.400000 9.100000 78.937217 5.400000 9.200000 80.532687 5.400000 9.300000 82.148156 5.400000 9.400000 83.783625 5.400000 9.500000 85.439095 5.400000 9.600000 87.114564 5.400000 9.700000 88.810033 5.400000 9.800000 90.525503 5.400000 9.900000 92.260972 5.400000 10.000000 94.016441 5.400000 10.100000 95.791911 5.400000 10.200000 97.587380 5.400000 10.300000 99.402849 5.400000 10.400000 101.238319 5.400000 10.500000 103.093788 5.400000 10.600000 104.969257 5.400000 10.700000 106.864726 5.400000 10.800000 108.780196 5.400000 10.900000 110.715665 5.400000 11.000000 112.671134 5.400000 11.100000 114.646604 5.400000 11.200000 116.642073 5.400000 11.300000 118.657542 5.400000 11.400000 120.693012 5.400000 11.500000 122.748481 5.400000 11.600000 124.823950 5.400000 11.700000 126.919420 5.400000 11.800000 129.034889 5.400000 11.900000 131.170358 5.400000 12.000000 133.325828 5.400000 12.100000 135.501297 5.400000 12.200000 137.696766 5.400000 12.300000 139.912236 5.400000 12.400000 142.147705 5.400000 12.500000 144.403174 5.400000 12.600000 146.678644 5.400000 12.700000 148.974113 5.400000 12.800000 151.289582 5.400000 12.900000 153.625052 5.400000 13.000000 155.980521 5.400000 13.100000 158.355990 5.400000 13.200000 160.751460 5.400000 13.300000 163.166929 5.400000 13.400000 165.602398 5.400000 13.500000 168.057868 5.400000 13.600000 170.533337 5.400000 13.700000 173.028806 5.400000 13.800000 175.544276 5.400000 13.900000 178.079745 5.400000 14.000000 180.635214 5.400000 14.100000 183.210684 5.400000 14.200000 185.806153 5.400000 14.300000 188.421622 5.400000 14.400000 191.057092 5.400000 14.500000 193.712561 5.400000 14.600000 196.388030 5.400000 14.700000 199.083500 5.400000 14.800000 201.798969 5.400000 14.900000 204.534438 5.400000 15.000000 207.289908 5.500000 -5.000000 54.680253 5.500000 -4.900000 53.459391 5.500000 -4.800000 52.258529 5.500000 -4.700000 51.077667 5.500000 -4.600000 49.916805 5.500000 -4.500000 48.775943 5.500000 -4.400000 47.655081 5.500000 -4.300000 46.554219 5.500000 -4.200000 45.473358 5.500000 -4.100000 44.412496 5.500000 -4.000000 43.371634 5.500000 -3.900000 42.350772 5.500000 -3.800000 41.349910 5.500000 -3.700000 40.369048 5.500000 -3.600000 39.408186 5.500000 -3.500000 38.467324 5.500000 -3.400000 37.546462 5.500000 -3.300000 36.645600 5.500000 -3.200000 35.764738 5.500000 -3.100000 34.903877 5.500000 -3.000000 34.063015 5.500000 -2.900000 33.242153 5.500000 -2.800000 32.441291 5.500000 -2.700000 31.660429 5.500000 -2.600000 30.899567 5.500000 -2.500000 30.158705 5.500000 -2.400000 29.437843 5.500000 -2.300000 28.736981 5.500000 -2.200000 28.056119 5.500000 -2.100000 27.395258 5.500000 -2.000000 26.754396 5.500000 -1.900000 26.133534 5.500000 -1.800000 25.532672 5.500000 -1.700000 24.951810 5.500000 -1.600000 24.390948 5.500000 -1.500000 23.850086 5.500000 -1.400000 23.329224 5.500000 -1.300000 22.828362 5.500000 -1.200000 22.347500 5.500000 -1.100000 21.886638 5.500000 -1.000000 21.445777 5.500000 -0.900000 21.024915 5.500000 -0.800000 20.624053 5.500000 -0.700000 20.243191 5.500000 -0.600000 19.882329 5.500000 -0.500000 19.541467 5.500000 -0.400000 19.220605 5.500000 -0.300000 18.919743 5.500000 -0.200000 18.638881 5.500000 -0.100000 18.378019 5.500000 -0.000000 18.137157 5.500000 0.100000 17.916296 5.500000 0.200000 17.715434 5.500000 0.300000 17.534572 5.500000 0.400000 17.373710 5.500000 0.500000 17.232848 5.500000 0.600000 17.111986 5.500000 0.700000 17.011124 5.500000 0.800000 16.930262 5.500000 0.900000 16.869400 5.500000 1.000000 16.828538 5.500000 1.100000 16.807677 5.500000 1.200000 16.806815 5.500000 1.300000 16.825953 5.500000 1.400000 16.865091 5.500000 1.500000 16.924229 5.500000 1.600000 17.003367 5.500000 1.700000 17.102505 5.500000 1.800000 17.221643 5.500000 1.900000 17.360781 5.500000 2.000000 17.519919 5.500000 2.100000 17.699057 5.500000 2.200000 17.898196 5.500000 2.300000 18.117334 5.500000 2.400000 18.356472 5.500000 2.500000 18.615610 5.500000 2.600000 18.894748 5.500000 2.700000 19.193886 5.500000 2.800000 19.513024 5.500000 2.900000 19.852162 5.500000 3.000000 20.211300 5.500000 3.100000 20.590438 5.500000 3.200000 20.989576 5.500000 3.300000 21.408715 5.500000 3.400000 21.847853 5.500000 3.500000 22.306991 5.500000 3.600000 22.786129 5.500000 3.700000 23.285267 5.500000 3.800000 23.804405 5.500000 3.900000 24.343543 5.500000 4.000000 24.902681 5.500000 4.100000 25.481819 5.500000 4.200000 26.080957 5.500000 4.300000 26.700096 5.500000 4.400000 27.339234 5.500000 4.500000 27.998372 5.500000 4.600000 28.677510 5.500000 4.700000 29.376648 5.500000 4.800000 30.095786 5.500000 4.900000 30.834924 5.500000 5.000000 31.594062 5.500000 5.100000 32.373200 5.500000 5.200000 33.172338 5.500000 5.300000 33.991476 5.500000 5.400000 34.830615 5.500000 5.500000 35.689753 5.500000 5.600000 36.568891 5.500000 5.700000 37.468029 5.500000 5.800000 38.387167 5.500000 5.900000 39.326305 5.500000 6.000000 40.285443 5.500000 6.100000 41.264581 5.500000 6.200000 42.263719 5.500000 6.300000 43.282857 5.500000 6.400000 44.321995 5.500000 6.500000 45.381134 5.500000 6.600000 46.460272 5.500000 6.700000 47.559410 5.500000 6.800000 48.678548 5.500000 6.900000 49.817686 5.500000 7.000000 50.976824 5.500000 7.100000 52.155962 5.500000 7.200000 53.355100 5.500000 7.300000 54.574238 5.500000 7.400000 55.813376 5.500000 7.500000 57.072515 5.500000 7.600000 58.351653 5.500000 7.700000 59.650791 5.500000 7.800000 60.969929 5.500000 7.900000 62.309067 5.500000 8.000000 63.668205 5.500000 8.100000 65.047343 5.500000 8.200000 66.446481 5.500000 8.300000 67.865619 5.500000 8.400000 69.304757 5.500000 8.500000 70.763895 5.500000 8.600000 72.243034 5.500000 8.700000 73.742172 5.500000 8.800000 75.261310 5.500000 8.900000 76.800448 5.500000 9.000000 78.359586 5.500000 9.100000 79.938724 5.500000 9.200000 81.537862 5.500000 9.300000 83.157000 5.500000 9.400000 84.796138 5.500000 9.500000 86.455276 5.500000 9.600000 88.134414 5.500000 9.700000 89.833553 5.500000 9.800000 91.552691 5.500000 9.900000 93.291829 5.500000 10.000000 95.050967 5.500000 10.100000 96.830105 5.500000 10.200000 98.629243 5.500000 10.300000 100.448381 5.500000 10.400000 102.287519 5.500000 10.500000 104.146657 5.500000 10.600000 106.025795 5.500000 10.700000 107.924934 5.500000 10.800000 109.844072 5.500000 10.900000 111.783210 5.500000 11.000000 113.742348 5.500000 11.100000 115.721486 5.500000 11.200000 117.720624 5.500000 11.300000 119.739762 5.500000 11.400000 121.778900 5.500000 11.500000 123.838038 5.500000 11.600000 125.917176 5.500000 11.700000 128.016314 5.500000 11.800000 130.135453 5.500000 11.900000 132.274591 5.500000 12.000000 134.433729 5.500000 12.100000 136.612867 5.500000 12.200000 138.812005 5.500000 12.300000 141.031143 5.500000 12.400000 143.270281 5.500000 12.500000 145.529419 5.500000 12.600000 147.808557 5.500000 12.700000 150.107695 5.500000 12.800000 152.426833 5.500000 12.900000 154.765972 5.500000 13.000000 157.125110 5.500000 13.100000 159.504248 5.500000 13.200000 161.903386 5.500000 13.300000 164.322524 5.500000 13.400000 166.761662 5.500000 13.500000 169.220800 5.500000 13.600000 171.699938 5.500000 13.700000 174.199076 5.500000 13.800000 176.718214 5.500000 13.900000 179.257353 5.500000 14.000000 181.816491 5.500000 14.100000 184.395629 5.500000 14.200000 186.994767 5.500000 14.300000 189.613905 5.500000 14.400000 192.253043 5.500000 14.500000 194.912181 5.500000 14.600000 197.591319 5.500000 14.700000 200.290457 5.500000 14.800000 203.009595 5.500000 14.900000 205.748733 5.500000 15.000000 208.507872 5.600000 -5.000000 55.128860 5.600000 -4.900000 53.911150 5.600000 -4.800000 52.713440 5.600000 -4.700000 51.535730 5.600000 -4.600000 50.378020 5.600000 -4.500000 49.240310 5.600000 -4.400000 48.122600 5.600000 -4.300000 47.024890 5.600000 -4.200000 45.947181 5.600000 -4.100000 44.889471 5.600000 -4.000000 43.851761 5.600000 -3.900000 42.834051 5.600000 -3.800000 41.836341 5.600000 -3.700000 40.858631 5.600000 -3.600000 39.900921 5.600000 -3.500000 38.963211 5.600000 -3.400000 38.045502 5.600000 -3.300000 37.147792 5.600000 -3.200000 36.270082 5.600000 -3.100000 35.412372 5.600000 -3.000000 34.574662 5.600000 -2.900000 33.756952 5.600000 -2.800000 32.959242 5.600000 -2.700000 32.181532 5.600000 -2.600000 31.423822 5.600000 -2.500000 30.686113 5.600000 -2.400000 29.968403 5.600000 -2.300000 29.270693 5.600000 -2.200000 28.592983 5.600000 -2.100000 27.935273 5.600000 -2.000000 27.297563 5.600000 -1.900000 26.679853 5.600000 -1.800000 26.082143 5.600000 -1.700000 25.504434 5.600000 -1.600000 24.946724 5.600000 -1.500000 24.409014 5.600000 -1.400000 23.891304 5.600000 -1.300000 23.393594 5.600000 -1.200000 22.915884 5.600000 -1.100000 22.458174 5.600000 -1.000000 22.020464 5.600000 -0.900000 21.602755 5.600000 -0.800000 21.205045 5.600000 -0.700000 20.827335 5.600000 -0.600000 20.469625 5.600000 -0.500000 20.131915 5.600000 -0.400000 19.814205 5.600000 -0.300000 19.516495 5.600000 -0.200000 19.238785 5.600000 -0.100000 18.981076 5.600000 -0.000000 18.743366 5.600000 0.100000 18.525656 5.600000 0.200000 18.327946 5.600000 0.300000 18.150236 5.600000 0.400000 17.992526 5.600000 0.500000 17.854816 5.600000 0.600000 17.737106 5.600000 0.700000 17.639396 5.600000 0.800000 17.561687 5.600000 0.900000 17.503977 5.600000 1.000000 17.466267 5.600000 1.100000 17.448557 5.600000 1.200000 17.450847 5.600000 1.300000 17.473137 5.600000 1.400000 17.515427 5.600000 1.500000 17.577717 5.600000 1.600000 17.660008 5.600000 1.700000 17.762298 5.600000 1.800000 17.884588 5.600000 1.900000 18.026878 5.600000 2.000000 18.189168 5.600000 2.100000 18.371458 5.600000 2.200000 18.573748 5.600000 2.300000 18.796038 5.600000 2.400000 19.038329 5.600000 2.500000 19.300619 5.600000 2.600000 19.582909 5.600000 2.700000 19.885199 5.600000 2.800000 20.207489 5.600000 2.900000 20.549779 5.600000 3.000000 20.912069 5.600000 3.100000 21.294359 5.600000 3.200000 21.696650 5.600000 3.300000 22.118940 5.600000 3.400000 22.561230 5.600000 3.500000 23.023520 5.600000 3.600000 23.505810 5.600000 3.700000 24.008100 5.600000 3.800000 24.530390 5.600000 3.900000 25.072680 5.600000 4.000000 25.634970 5.600000 4.100000 26.217261 5.600000 4.200000 26.819551 5.600000 4.300000 27.441841 5.600000 4.400000 28.084131 5.600000 4.500000 28.746421 5.600000 4.600000 29.428711 5.600000 4.700000 30.131001 5.600000 4.800000 30.853291 5.600000 4.900000 31.595582 5.600000 5.000000 32.357872 5.600000 5.100000 33.140162 5.600000 5.200000 33.942452 5.600000 5.300000 34.764742 5.600000 5.400000 35.607032 5.600000 5.500000 36.469322 5.600000 5.600000 37.351612 5.600000 5.700000 38.253903 5.600000 5.800000 39.176193 5.600000 5.900000 40.118483 5.600000 6.000000 41.080773 5.600000 6.100000 42.063063 5.600000 6.200000 43.065353 5.600000 6.300000 44.087643 5.600000 6.400000 45.129933 5.600000 6.500000 46.192224 5.600000 6.600000 47.274514 5.600000 6.700000 48.376804 5.600000 6.800000 49.499094 5.600000 6.900000 50.641384 5.600000 7.000000 51.803674 5.600000 7.100000 52.985964 5.600000 7.200000 54.188254 5.600000 7.300000 55.410545 5.600000 7.400000 56.652835 5.600000 7.500000 57.915125 5.600000 7.600000 59.197415 5.600000 7.700000 60.499705 5.600000 7.800000 61.821995 5.600000 7.900000 63.164285 5.600000 8.000000 64.526575 5.600000 8.100000 65.908865 5.600000 8.200000 67.311156 5.600000 8.300000 68.733446 5.600000 8.400000 70.175736 5.600000 8.500000 71.638026 5.600000 8.600000 73.120316 5.600000 8.700000 74.622606 5.600000 8.800000 76.144896 5.600000 8.900000 77.687186 5.600000 9.000000 79.249477 5.600000 9.100000 80.831767 5.600000 9.200000 82.434057 5.600000 9.300000 84.056347 5.600000 9.400000 85.698637 5.600000 9.500000 87.360927 5.600000 9.600000 89.043217 5.600000 9.700000 90.745507 5.600000 9.800000 92.467798 5.600000 9.900000 94.210088 5.600000 10.000000 95.972378 5.600000 10.100000 97.754668 5.600000 10.200000 99.556958 5.600000 10.300000 101.379248 5.600000 10.400000 103.221538 5.600000 10.500000 105.083828 5.600000 10.600000 106.966119 5.600000 10.700000 108.868409 5.600000 10.800000 110.790699 5.600000 10.900000 112.732989 5.600000 11.000000 114.695279 5.600000 11.100000 116.677569 5.600000 11.200000 118.679859 5.600000 11.300000 120.702149 5.600000 11.400000 122.744439 5.600000 11.500000 124.806730 5.600000 11.600000 126.889020 5.600000 11.700000 128.991310 5.600000 11.800000 131.113600 5.600000 11.900000 133.255890 5.600000 12.000000 135.418180 5.600000 12.100000 137.600470 5.600000 12.200000 139.802760 5.600000 12.300000 142.025051 5.600000 12.400000 144.267341 5.600000 12.500000 146.529631 5.600000 12.600000 148.811921 5.600000 12.700000 151.114211 5.600000 12.800000 153.436501 5.600000 12.900000 155.778791 5.600000 13.000000 158.141081 5.600000 13.100000 160.523372 5.600000 13.200000 162.925662 5.600000 13.300000 165.347952 5.600000 13.400000 167.790242 5.600000 13.500000 170.252532 5.600000 13.600000 172.734822 5.600000 13.700000 175.237112 5.600000 13.800000 177.759402 5.600000 13.900000 180.301693 5.600000 14.000000 182.863983 5.600000 14.100000 185.446273 5.600000 14.200000 188.048563 5.600000 14.300000 190.670853 5.600000 14.400000 193.313143 5.600000 14.500000 195.975433 5.600000 14.600000 198.657723 5.600000 14.700000 201.360013 5.600000 14.800000 204.082304 5.600000 14.900000 206.824594 5.600000 15.000000 209.586884 5.700000 -5.000000 55.535200 5.700000 -4.900000 54.320125 5.700000 -4.800000 53.125051 5.700000 -4.700000 51.949976 5.700000 -4.600000 50.794902 5.700000 -4.500000 49.659827 5.700000 -4.400000 48.544752 5.700000 -4.300000 47.449678 5.700000 -4.200000 46.374603 5.700000 -4.100000 45.319529 5.700000 -4.000000 44.284454 5.700000 -3.900000 43.269379 5.700000 -3.800000 42.274305 5.700000 -3.700000 41.299230 5.700000 -3.600000 40.344156 5.700000 -3.500000 39.409081 5.700000 -3.400000 38.494006 5.700000 -3.300000 37.598932 5.700000 -3.200000 36.723857 5.700000 -3.100000 35.868783 5.700000 -3.000000 35.033708 5.700000 -2.900000 34.218634 5.700000 -2.800000 33.423559 5.700000 -2.700000 32.648484 5.700000 -2.600000 31.893410 5.700000 -2.500000 31.158335 5.700000 -2.400000 30.443261 5.700000 -2.300000 29.748186 5.700000 -2.200000 29.073111 5.700000 -2.100000 28.418037 5.700000 -2.000000 27.782962 5.700000 -1.900000 27.167888 5.700000 -1.800000 26.572813 5.700000 -1.700000 25.997738 5.700000 -1.600000 25.442664 5.700000 -1.500000 24.907589 5.700000 -1.400000 24.392515 5.700000 -1.300000 23.897440 5.700000 -1.200000 23.422366 5.700000 -1.100000 22.967291 5.700000 -1.000000 22.532216 5.700000 -0.900000 22.117142 5.700000 -0.800000 21.722067 5.700000 -0.700000 21.346993 5.700000 -0.600000 20.991918 5.700000 -0.500000 20.656843 5.700000 -0.400000 20.341769 5.700000 -0.300000 20.046694 5.700000 -0.200000 19.771620 5.700000 -0.100000 19.516545 5.700000 -0.000000 19.281470 5.700000 0.100000 19.066396 5.700000 0.200000 18.871321 5.700000 0.300000 18.696247 5.700000 0.400000 18.541172 5.700000 0.500000 18.406098 5.700000 0.600000 18.291023 5.700000 0.700000 18.195948 5.700000 0.800000 18.120874 5.700000 0.900000 18.065799 5.700000 1.000000 18.030725 5.700000 1.100000 18.015650 5.700000 1.200000 18.020575 5.700000 1.300000 18.045501 5.700000 1.400000 18.090426 5.700000 1.500000 18.155352 5.700000 1.600000 18.240277 5.700000 1.700000 18.345202 5.700000 1.800000 18.470128 5.700000 1.900000 18.615053 5.700000 2.000000 18.779979 5.700000 2.100000 18.964904 5.700000 2.200000 19.169829 5.700000 2.300000 19.394755 5.700000 2.400000 19.639680 5.700000 2.500000 19.904606 5.700000 2.600000 20.189531 5.700000 2.700000 20.494457 5.700000 2.800000 20.819382 5.700000 2.900000 21.164307 5.700000 3.000000 21.529233 5.700000 3.100000 21.914158 5.700000 3.200000 22.319084 5.700000 3.300000 22.744009 5.700000 3.400000 23.188934 5.700000 3.500000 23.653860 5.700000 3.600000 24.138785 5.700000 3.700000 24.643711 5.700000 3.800000 25.168636 5.700000 3.900000 25.713561 5.700000 4.000000 26.278487 5.700000 4.100000 26.863412 5.700000 4.200000 27.468338 5.700000 4.300000 28.093263 5.700000 4.400000 28.738189 5.700000 4.500000 29.403114 5.700000 4.600000 30.088039 5.700000 4.700000 30.792965 5.700000 4.800000 31.517890 5.700000 4.900000 32.262816 5.700000 5.000000 33.027741 5.700000 5.100000 33.812666 5.700000 5.200000 34.617592 5.700000 5.300000 35.442517 5.700000 5.400000 36.287443 5.700000 5.500000 37.152368 5.700000 5.600000 38.037293 5.700000 5.700000 38.942219 5.700000 5.800000 39.867144 5.700000 5.900000 40.812070 5.700000 6.000000 41.776995 5.700000 6.100000 42.761921 5.700000 6.200000 43.766846 5.700000 6.300000 44.791771 5.700000 6.400000 45.836697 5.700000 6.500000 46.901622 5.700000 6.600000 47.986548 5.700000 6.700000 49.091473 5.700000 6.800000 50.216398 5.700000 6.900000 51.361324 5.700000 7.000000 52.526249 5.700000 7.100000 53.711175 5.700000 7.200000 54.916100 5.700000 7.300000 56.141025 5.700000 7.400000 57.385951 5.700000 7.500000 58.650876 5.700000 7.600000 59.935802 5.700000 7.700000 61.240727 5.700000 7.800000 62.565652 5.700000 7.900000 63.910578 5.700000 8.000000 65.275503 5.700000 8.100000 66.660429 5.700000 8.200000 68.065354 5.700000 8.300000 69.490280 5.700000 8.400000 70.935205 5.700000 8.500000 72.400130 5.700000 8.600000 73.885056 5.700000 8.700000 75.389981 5.700000 8.800000 76.914907 5.700000 8.900000 78.459832 5.700000 9.000000 80.024757 5.700000 9.100000 81.609683 5.700000 9.200000 83.214608 5.700000 9.300000 84.839534 5.700000 9.400000 86.484459 5.700000 9.500000 88.149384 5.700000 9.600000 89.834310 5.700000 9.700000 91.539235 5.700000 9.800000 93.264161 5.700000 9.900000 95.009086 5.700000 10.000000 96.774012 5.700000 10.100000 98.558937 5.700000 10.200000 100.363862 5.700000 10.300000 102.188788 5.700000 10.400000 104.033713 5.700000 10.500000 105.898639 5.700000 10.600000 107.783564 5.700000 10.700000 109.688489 5.700000 10.800000 111.613415 5.700000 10.900000 113.558340 5.700000 11.000000 115.523266 5.700000 11.100000 117.508191 5.700000 11.200000 119.513116 5.700000 11.300000 121.538042 5.700000 11.400000 123.582967 5.700000 11.500000 125.647893 5.700000 11.600000 127.732818 5.700000 11.700000 129.837744 5.700000 11.800000 131.962669 5.700000 11.900000 134.107594 5.700000 12.000000 136.272520 5.700000 12.100000 138.457445 5.700000 12.200000 140.662371 5.700000 12.300000 142.887296 5.700000 12.400000 145.132221 5.700000 12.500000 147.397147 5.700000 12.600000 149.682072 5.700000 12.700000 151.986998 5.700000 12.800000 154.311923 5.700000 12.900000 156.656848 5.700000 13.000000 159.021774 5.700000 13.100000 161.406699 5.700000 13.200000 163.811625 5.700000 13.300000 166.236550 5.700000 13.400000 168.681476 5.700000 13.500000 171.146401 5.700000 13.600000 173.631326 5.700000 13.700000 176.136252 5.700000 13.800000 178.661177 5.700000 13.900000 181.206103 5.700000 14.000000 183.771028 5.700000 14.100000 186.355953 5.700000 14.200000 188.960879 5.700000 14.300000 191.585804 5.700000 14.400000 194.230730 5.700000 14.500000 196.895655 5.700000 14.600000 199.580580 5.700000 14.700000 202.285506 5.700000 14.800000 205.010431 5.700000 14.900000 207.755357 5.700000 15.000000 210.520282 5.800000 -5.000000 55.893395 5.800000 -4.900000 54.680439 5.800000 -4.800000 53.487483 5.800000 -4.700000 52.314527 5.800000 -4.600000 51.161571 5.800000 -4.500000 50.028615 5.800000 -4.400000 48.915659 5.800000 -4.300000 47.822703 5.800000 -4.200000 46.749747 5.800000 -4.100000 45.696791 5.800000 -4.000000 44.663835 5.800000 -3.900000 43.650878 5.800000 -3.800000 42.657922 5.800000 -3.700000 41.684966 5.800000 -3.600000 40.732010 5.800000 -3.500000 39.799054 5.800000 -3.400000 38.886098 5.800000 -3.300000 37.993142 5.800000 -3.200000 37.120186 5.800000 -3.100000 36.267230 5.800000 -3.000000 35.434274 5.800000 -2.900000 34.621318 5.800000 -2.800000 33.828362 5.800000 -2.700000 33.055406 5.800000 -2.600000 32.302450 5.800000 -2.500000 31.569494 5.800000 -2.400000 30.856538 5.800000 -2.300000 30.163582 5.800000 -2.200000 29.490626 5.800000 -2.100000 28.837670 5.800000 -2.000000 28.204714 5.800000 -1.900000 27.591758 5.800000 -1.800000 26.998802 5.800000 -1.700000 26.425846 5.800000 -1.600000 25.872890 5.800000 -1.500000 25.339934 5.800000 -1.400000 24.826978 5.800000 -1.300000 24.334022 5.800000 -1.200000 23.861065 5.800000 -1.100000 23.408109 5.800000 -1.000000 22.975153 5.800000 -0.900000 22.562197 5.800000 -0.800000 22.169241 5.800000 -0.700000 21.796285 5.800000 -0.600000 21.443329 5.800000 -0.500000 21.110373 5.800000 -0.400000 20.797417 5.800000 -0.300000 20.504461 5.800000 -0.200000 20.231505 5.800000 -0.100000 19.978549 5.800000 -0.000000 19.745593 5.800000 0.100000 19.532637 5.800000 0.200000 19.339681 5.800000 0.300000 19.166725 5.800000 0.400000 19.013769 5.800000 0.500000 18.880813 5.800000 0.600000 18.767857 5.800000 0.700000 18.674901 5.800000 0.800000 18.601945 5.800000 0.900000 18.548989 5.800000 1.000000 18.516033 5.800000 1.100000 18.503077 5.800000 1.200000 18.510121 5.800000 1.300000 18.537165 5.800000 1.400000 18.584208 5.800000 1.500000 18.651252 5.800000 1.600000 18.738296 5.800000 1.700000 18.845340 5.800000 1.800000 18.972384 5.800000 1.900000 19.119428 5.800000 2.000000 19.286472 5.800000 2.100000 19.473516 5.800000 2.200000 19.680560 5.800000 2.300000 19.907604 5.800000 2.400000 20.154648 5.800000 2.500000 20.421692 5.800000 2.600000 20.708736 5.800000 2.700000 21.015780 5.800000 2.800000 21.342824 5.800000 2.900000 21.689868 5.800000 3.000000 22.056912 5.800000 3.100000 22.443956 5.800000 3.200000 22.851000 5.800000 3.300000 23.278044 5.800000 3.400000 23.725088 5.800000 3.500000 24.192132 5.800000 3.600000 24.679176 5.800000 3.700000 25.186220 5.800000 3.800000 25.713264 5.800000 3.900000 26.260308 5.800000 4.000000 26.827352 5.800000 4.100000 27.414395 5.800000 4.200000 28.021439 5.800000 4.300000 28.648483 5.800000 4.400000 29.295527 5.800000 4.500000 29.962571 5.800000 4.600000 30.649615 5.800000 4.700000 31.356659 5.800000 4.800000 32.083703 5.800000 4.900000 32.830747 5.800000 5.000000 33.597791 5.800000 5.100000 34.384835 5.800000 5.200000 35.191879 5.800000 5.300000 36.018923 5.800000 5.400000 36.865967 5.800000 5.500000 37.733011 5.800000 5.600000 38.620055 5.800000 5.700000 39.527099 5.800000 5.800000 40.454143 5.800000 5.900000 41.401187 5.800000 6.000000 42.368231 5.800000 6.100000 43.355275 5.800000 6.200000 44.362319 5.800000 6.300000 45.389363 5.800000 6.400000 46.436407 5.800000 6.500000 47.503451 5.800000 6.600000 48.590495 5.800000 6.700000 49.697538 5.800000 6.800000 50.824582 5.800000 6.900000 51.971626 5.800000 7.000000 53.138670 5.800000 7.100000 54.325714 5.800000 7.200000 55.532758 5.800000 7.300000 56.759802 5.800000 7.400000 58.006846 5.800000 7.500000 59.273890 5.800000 7.600000 60.560934 5.800000 7.700000 61.867978 5.800000 7.800000 63.195022 5.800000 7.900000 64.542066 5.800000 8.000000 65.909110 5.800000 8.100000 67.296154 5.800000 8.200000 68.703198 5.800000 8.300000 70.130242 5.800000 8.400000 71.577286 5.800000 8.500000 73.044330 5.800000 8.600000 74.531374 5.800000 8.700000 76.038418 5.800000 8.800000 77.565462 5.800000 8.900000 79.112506 5.800000 9.000000 80.679550 5.800000 9.100000 82.266594 5.800000 9.200000 83.873638 5.800000 9.300000 85.500682 5.800000 9.400000 87.147725 5.800000 9.500000 88.814769 5.800000 9.600000 90.501813 5.800000 9.700000 92.208857 5.800000 9.800000 93.935901 5.800000 9.900000 95.682945 5.800000 10.000000 97.449989 5.800000 10.100000 99.237033 5.800000 10.200000 101.044077 5.800000 10.300000 102.871121 5.800000 10.400000 104.718165 5.800000 10.500000 106.585209 5.800000 10.600000 108.472253 5.800000 10.700000 110.379297 5.800000 10.800000 112.306341 5.800000 10.900000 114.253385 5.800000 11.000000 116.220429 5.800000 11.100000 118.207473 5.800000 11.200000 120.214517 5.800000 11.300000 122.241561 5.800000 11.400000 124.288605 5.800000 11.500000 126.355649 5.800000 11.600000 128.442693 5.800000 11.700000 130.549737 5.800000 11.800000 132.676781 5.800000 11.900000 134.823825 5.800000 12.000000 136.990868 5.800000 12.100000 139.177912 5.800000 12.200000 141.384956 5.800000 12.300000 143.612000 5.800000 12.400000 145.859044 5.800000 12.500000 148.126088 5.800000 12.600000 150.413132 5.800000 12.700000 152.720176 5.800000 12.800000 155.047220 5.800000 12.900000 157.394264 5.800000 13.000000 159.761308 5.800000 13.100000 162.148352 5.800000 13.200000 164.555396 5.800000 13.300000 166.982440 5.800000 13.400000 169.429484 5.800000 13.500000 171.896528 5.800000 13.600000 174.383572 5.800000 13.700000 176.890616 5.800000 13.800000 179.417660 5.800000 13.900000 181.964704 5.800000 14.000000 184.531748 5.800000 14.100000 187.118792 5.800000 14.200000 189.725836 5.800000 14.300000 192.352880 5.800000 14.400000 194.999924 5.800000 14.500000 197.666968 5.800000 14.600000 200.354012 5.800000 14.700000 203.061055 5.800000 14.800000 205.788099 5.800000 14.900000 208.535143 5.800000 15.000000 211.302187 5.900000 -5.000000 56.198406 5.900000 -4.900000 54.987052 5.900000 -4.800000 53.795697 5.900000 -4.700000 52.624343 5.900000 -4.600000 51.472989 5.900000 -4.500000 50.341635 5.900000 -4.400000 49.230281 5.900000 -4.300000 48.138926 5.900000 -4.200000 47.067572 5.900000 -4.100000 46.016218 5.900000 -4.000000 44.984864 5.900000 -3.900000 43.973509 5.900000 -3.800000 42.982155 5.900000 -3.700000 42.010801 5.900000 -3.600000 41.059447 5.900000 -3.500000 40.128093 5.900000 -3.400000 39.216738 5.900000 -3.300000 38.325384 5.900000 -3.200000 37.454030 5.900000 -3.100000 36.602676 5.900000 -3.000000 35.771321 5.900000 -2.900000 34.959967 5.900000 -2.800000 34.168613 5.900000 -2.700000 33.397259 5.900000 -2.600000 32.645905 5.900000 -2.500000 31.914550 5.900000 -2.400000 31.203196 5.900000 -2.300000 30.511842 5.900000 -2.200000 29.840488 5.900000 -2.100000 29.189133 5.900000 -2.000000 28.557779 5.900000 -1.900000 27.946425 5.900000 -1.800000 27.355071 5.900000 -1.700000 26.783716 5.900000 -1.600000 26.232362 5.900000 -1.500000 25.701008 5.900000 -1.400000 25.189654 5.900000 -1.300000 24.698300 5.900000 -1.200000 24.226945 5.900000 -1.100000 23.775591 5.900000 -1.000000 23.344237 5.900000 -0.900000 22.932883 5.900000 -0.800000 22.541528 5.900000 -0.700000 22.170174 5.900000 -0.600000 21.818820 5.900000 -0.500000 21.487466 5.900000 -0.400000 21.176112 5.900000 -0.300000 20.884757 5.900000 -0.200000 20.613403 5.900000 -0.100000 20.362049 5.900000 -0.000000 20.130695 5.900000 0.100000 19.919340 5.900000 0.200000 19.727986 5.900000 0.300000 19.556632 5.900000 0.400000 19.405278 5.900000 0.500000 19.273924 5.900000 0.600000 19.162569 5.900000 0.700000 19.071215 5.900000 0.800000 18.999861 5.900000 0.900000 18.948507 5.900000 1.000000 18.917152 5.900000 1.100000 18.905798 5.900000 1.200000 18.914444 5.900000 1.300000 18.943090 5.900000 1.400000 18.991736 5.900000 1.500000 19.060381 5.900000 1.600000 19.149027 5.900000 1.700000 19.257673 5.900000 1.800000 19.386319 5.900000 1.900000 19.534964 5.900000 2.000000 19.703610 5.900000 2.100000 19.892256 5.900000 2.200000 20.100902 5.900000 2.300000 20.329548 5.900000 2.400000 20.578193 5.900000 2.500000 20.846839 5.900000 2.600000 21.135485 5.900000 2.700000 21.444131 5.900000 2.800000 21.772776 5.900000 2.900000 22.121422 5.900000 3.000000 22.490068 5.900000 3.100000 22.878714 5.900000 3.200000 23.287360 5.900000 3.300000 23.716005 5.900000 3.400000 24.164651 5.900000 3.500000 24.633297 5.900000 3.600000 25.121943 5.900000 3.700000 25.630588 5.900000 3.800000 26.159234 5.900000 3.900000 26.707880 5.900000 4.000000 27.276526 5.900000 4.100000 27.865171 5.900000 4.200000 28.473817 5.900000 4.300000 29.102463 5.900000 4.400000 29.751109 5.900000 4.500000 30.419755 5.900000 4.600000 31.108400 5.900000 4.700000 31.817046 5.900000 4.800000 32.545692 5.900000 4.900000 33.294338 5.900000 5.000000 34.062983 5.900000 5.100000 34.851629 5.900000 5.200000 35.660275 5.900000 5.300000 36.488921 5.900000 5.400000 37.337567 5.900000 5.500000 38.206212 5.900000 5.600000 39.094858 5.900000 5.700000 40.003504 5.900000 5.800000 40.932150 5.900000 5.900000 41.880795 5.900000 6.000000 42.849441 5.900000 6.100000 43.838087 5.900000 6.200000 44.846733 5.900000 6.300000 45.875379 5.900000 6.400000 46.924024 5.900000 6.500000 47.992670 5.900000 6.600000 49.081316 5.900000 6.700000 50.189962 5.900000 6.800000 51.318607 5.900000 6.900000 52.467253 5.900000 7.000000 53.635899 5.900000 7.100000 54.824545 5.900000 7.200000 56.033191 5.900000 7.300000 57.261836 5.900000 7.400000 58.510482 5.900000 7.500000 59.779128 5.900000 7.600000 61.067774 5.900000 7.700000 62.376419 5.900000 7.800000 63.705065 5.900000 7.900000 65.053711 5.900000 8.000000 66.422357 5.900000 8.100000 67.811003 5.900000 8.200000 69.219648 5.900000 8.300000 70.648294 5.900000 8.400000 72.096940 5.900000 8.500000 73.565586 5.900000 8.600000 75.054231 5.900000 8.700000 76.562877 5.900000 8.800000 78.091523 5.900000 8.900000 79.640169 5.900000 9.000000 81.208815 5.900000 9.100000 82.797460 5.900000 9.200000 84.406106 5.900000 9.300000 86.034752 5.900000 9.400000 87.683398 5.900000 9.500000 89.352043 5.900000 9.600000 91.040689 5.900000 9.700000 92.749335 5.900000 9.800000 94.477981 5.900000 9.900000 96.226626 5.900000 10.000000 97.995272 5.900000 10.100000 99.783918 5.900000 10.200000 101.592564 5.900000 10.300000 103.421210 5.900000 10.400000 105.269855 5.900000 10.500000 107.138501 5.900000 10.600000 109.027147 5.900000 10.700000 110.935793 5.900000 10.800000 112.864438 5.900000 10.900000 114.813084 5.900000 11.000000 116.781730 5.900000 11.100000 118.770376 5.900000 11.200000 120.779022 5.900000 11.300000 122.807667 5.900000 11.400000 124.856313 5.900000 11.500000 126.924959 5.900000 11.600000 129.013605 5.900000 11.700000 131.122250 5.900000 11.800000 133.250896 5.900000 11.900000 135.399542 5.900000 12.000000 137.568188 5.900000 12.100000 139.756834 5.900000 12.200000 141.965479 5.900000 12.300000 144.194125 5.900000 12.400000 146.442771 5.900000 12.500000 148.711417 5.900000 12.600000 151.000062 5.900000 12.700000 153.308708 5.900000 12.800000 155.637354 5.900000 12.900000 157.986000 5.900000 13.000000 160.354646 5.900000 13.100000 162.743291 5.900000 13.200000 165.151937 5.900000 13.300000 167.580583 5.900000 13.400000 170.029229 5.900000 13.500000 172.497874 5.900000 13.600000 174.986520 5.900000 13.700000 177.495166 5.900000 13.800000 180.023812 5.900000 13.900000 182.572458 5.900000 14.000000 185.141103 5.900000 14.100000 187.729749 5.900000 14.200000 190.338395 5.900000 14.300000 192.967041 5.900000 14.400000 195.615686 5.900000 14.500000 198.284332 5.900000 14.600000 200.972978 5.900000 14.700000 203.681624 5.900000 14.800000 206.410270 5.900000 14.900000 209.158915 5.900000 15.000000 211.927561 6.000000 -5.000000 56.446083 6.000000 -4.900000 55.235814 6.000000 -4.800000 54.045545 6.000000 -4.700000 52.875276 6.000000 -4.600000 51.725007 6.000000 -4.500000 50.594737 6.000000 -4.400000 49.484468 6.000000 -4.300000 48.394199 6.000000 -4.200000 47.323930 6.000000 -4.100000 46.273661 6.000000 -4.000000 45.243392 6.000000 -3.900000 44.233122 6.000000 -3.800000 43.242853 6.000000 -3.700000 42.272584 6.000000 -3.600000 41.322315 6.000000 -3.500000 40.392046 6.000000 -3.400000 39.481777 6.000000 -3.300000 38.591508 6.000000 -3.200000 37.721238 6.000000 -3.100000 36.870969 6.000000 -3.000000 36.040700 6.000000 -2.900000 35.230431 6.000000 -2.800000 34.440162 6.000000 -2.700000 33.669893 6.000000 -2.600000 32.919624 6.000000 -2.500000 32.189354 6.000000 -2.400000 31.479085 6.000000 -2.300000 30.788816 6.000000 -2.200000 30.118547 6.000000 -2.100000 29.468278 6.000000 -2.000000 28.838009 6.000000 -1.900000 28.227740 6.000000 -1.800000 27.637470 6.000000 -1.700000 27.067201 6.000000 -1.600000 26.516932 6.000000 -1.500000 25.986663 6.000000 -1.400000 25.476394 6.000000 -1.300000 24.986125 6.000000 -1.200000 24.515855 6.000000 -1.100000 24.065586 6.000000 -1.000000 23.635317 6.000000 -0.900000 23.225048 6.000000 -0.800000 22.834779 6.000000 -0.700000 22.464510 6.000000 -0.600000 22.114241 6.000000 -0.500000 21.783971 6.000000 -0.400000 21.473702 6.000000 -0.300000 21.183433 6.000000 -0.200000 20.913164 6.000000 -0.100000 20.662895 6.000000 -0.000000 20.432626 6.000000 0.100000 20.222357 6.000000 0.200000 20.032087 6.000000 0.300000 19.861818 6.000000 0.400000 19.711549 6.000000 0.500000 19.581280 6.000000 0.600000 19.471011 6.000000 0.700000 19.380742 6.000000 0.800000 19.310473 6.000000 0.900000 19.260203 6.000000 1.000000 19.229934 6.000000 1.100000 19.219665 6.000000 1.200000 19.229396 6.000000 1.300000 19.259127 6.000000 1.400000 19.308858 6.000000 1.500000 19.378588 6.000000 1.600000 19.468319 6.000000 1.700000 19.578050 6.000000 1.800000 19.707781 6.000000 1.900000 19.857512 6.000000 2.000000 20.027243 6.000000 2.100000 20.216974 6.000000 2.200000 20.426704 6.000000 2.300000 20.656435 6.000000 2.400000 20.906166 6.000000 2.500000 21.175897 6.000000 2.600000 21.465628 6.000000 2.700000 21.775359 6.000000 2.800000 22.105090 6.000000 2.900000 22.454820 6.000000 3.000000 22.824551 6.000000 3.100000 23.214282 6.000000 3.200000 23.624013 6.000000 3.300000 24.053744 6.000000 3.400000 24.503475 6.000000 3.500000 24.973205 6.000000 3.600000 25.462936 6.000000 3.700000 25.972667 6.000000 3.800000 26.502398 6.000000 3.900000 27.052129 6.000000 4.000000 27.621860 6.000000 4.100000 28.211591 6.000000 4.200000 28.821321 6.000000 4.300000 29.451052 6.000000 4.400000 30.100783 6.000000 4.500000 30.770514 6.000000 4.600000 31.460245 6.000000 4.700000 32.169976 6.000000 4.800000 32.899707 6.000000 4.900000 33.649437 6.000000 5.000000 34.419168 6.000000 5.100000 35.208899 6.000000 5.200000 36.018630 6.000000 5.300000 36.848361 6.000000 5.400000 37.698092 6.000000 5.500000 38.567823 6.000000 5.600000 39.457553 6.000000 5.700000 40.367284 6.000000 5.800000 41.297015 6.000000 5.900000 42.246746 6.000000 6.000000 43.216477 6.000000 6.100000 44.206208 6.000000 6.200000 45.215938 6.000000 6.300000 46.245669 6.000000 6.400000 47.295400 6.000000 6.500000 48.365131 6.000000 6.600000 49.454862 6.000000 6.700000 50.564593 6.000000 6.800000 51.694324 6.000000 6.900000 52.844054 6.000000 7.000000 54.013785 6.000000 7.100000 55.203516 6.000000 7.200000 56.413247 6.000000 7.300000 57.642978 6.000000 7.400000 58.892709 6.000000 7.500000 60.162440 6.000000 7.600000 61.452170 6.000000 7.700000 62.761901 6.000000 7.800000 64.091632 6.000000 7.900000 65.441363 6.000000 8.000000 66.811094 6.000000 8.100000 68.200825 6.000000 8.200000 69.610555 6.000000 8.300000 71.040286 6.000000 8.400000 72.490017 6.000000 8.500000 73.959748 6.000000 8.600000 75.449479 6.000000 8.700000 76.959210 6.000000 8.800000 78.488941 6.000000 8.900000 80.038671 6.000000 9.000000 81.608402 6.000000 9.100000 83.198133 6.000000 9.200000 84.807864 6.000000 9.300000 86.437595 6.000000 9.400000 88.087326 6.000000 9.500000 89.757057 6.000000 9.600000 91.446787 6.000000 9.700000 93.156518 6.000000 9.800000 94.886249 6.000000 9.900000 96.635980 6.000000 10.000000 98.405711 6.000000 10.100000 100.195442 6.000000 10.200000 102.005173 6.000000 10.300000 103.834903 6.000000 10.400000 105.684634 6.000000 10.500000 107.554365 6.000000 10.600000 109.444096 6.000000 10.700000 111.353827 6.000000 10.800000 113.283558 6.000000 10.900000 115.233288 6.000000 11.000000 117.203019 6.000000 11.100000 119.192750 6.000000 11.200000 121.202481 6.000000 11.300000 123.232212 6.000000 11.400000 125.281943 6.000000 11.500000 127.351674 6.000000 11.600000 129.441404 6.000000 11.700000 131.551135 6.000000 11.800000 133.680866 6.000000 11.900000 135.830597 6.000000 12.000000 138.000328 6.000000 12.100000 140.190059 6.000000 12.200000 142.399790 6.000000 12.300000 144.629520 6.000000 12.400000 146.879251 6.000000 12.500000 149.148982 6.000000 12.600000 151.438713 6.000000 12.700000 153.748444 6.000000 12.800000 156.078175 6.000000 12.900000 158.427906 6.000000 13.000000 160.797636 6.000000 13.100000 163.187367 6.000000 13.200000 165.597098 6.000000 13.300000 168.026829 6.000000 13.400000 170.476560 6.000000 13.500000 172.946291 6.000000 13.600000 175.436021 6.000000 13.700000 177.945752 6.000000 13.800000 180.475483 6.000000 13.900000 183.025214 6.000000 14.000000 185.594945 6.000000 14.100000 188.184676 6.000000 14.200000 190.794407 6.000000 14.300000 193.424137 6.000000 14.400000 196.073868 6.000000 14.500000 198.743599 6.000000 14.600000 201.433330 6.000000 14.700000 204.143061 6.000000 14.800000 206.872792 6.000000 14.900000 209.622523 6.000000 15.000000 212.392253 6.100000 -5.000000 56.633206 6.100000 -4.900000 55.423505 6.100000 -4.800000 54.233804 6.100000 -4.700000 53.064104 6.100000 -4.600000 51.914403 6.100000 -4.500000 50.784702 6.100000 -4.400000 49.675001 6.100000 -4.300000 48.585300 6.100000 -4.200000 47.515600 6.100000 -4.100000 46.465899 6.100000 -4.000000 45.436198 6.100000 -3.900000 44.426497 6.100000 -3.800000 43.436796 6.100000 -3.700000 42.467095 6.100000 -3.600000 41.517395 6.100000 -3.500000 40.587694 6.100000 -3.400000 39.677993 6.100000 -3.300000 38.788292 6.100000 -3.200000 37.918591 6.100000 -3.100000 37.068891 6.100000 -3.000000 36.239190 6.100000 -2.900000 35.429489 6.100000 -2.800000 34.639788 6.100000 -2.700000 33.870087 6.100000 -2.600000 33.120387 6.100000 -2.500000 32.390686 6.100000 -2.400000 31.680985 6.100000 -2.300000 30.991284 6.100000 -2.200000 30.321583 6.100000 -2.100000 29.671883 6.100000 -2.000000 29.042182 6.100000 -1.900000 28.432481 6.100000 -1.800000 27.842780 6.100000 -1.700000 27.273079 6.100000 -1.600000 26.723378 6.100000 -1.500000 26.193678 6.100000 -1.400000 25.683977 6.100000 -1.300000 25.194276 6.100000 -1.200000 24.724575 6.100000 -1.100000 24.274874 6.100000 -1.000000 23.845174 6.100000 -0.900000 23.435473 6.100000 -0.800000 23.045772 6.100000 -0.700000 22.676071 6.100000 -0.600000 22.326370 6.100000 -0.500000 21.996670 6.100000 -0.400000 21.686969 6.100000 -0.300000 21.397268 6.100000 -0.200000 21.127567 6.100000 -0.100000 20.877866 6.100000 -0.000000 20.648165 6.100000 0.100000 20.438465 6.100000 0.200000 20.248764 6.100000 0.300000 20.079063 6.100000 0.400000 19.929362 6.100000 0.500000 19.799661 6.100000 0.600000 19.689961 6.100000 0.700000 19.600260 6.100000 0.800000 19.530559 6.100000 0.900000 19.480858 6.100000 1.000000 19.451157 6.100000 1.100000 19.441457 6.100000 1.200000 19.451756 6.100000 1.300000 19.482055 6.100000 1.400000 19.532354 6.100000 1.500000 19.602653 6.100000 1.600000 19.692952 6.100000 1.700000 19.803252 6.100000 1.800000 19.933551 6.100000 1.900000 20.083850 6.100000 2.000000 20.254149 6.100000 2.100000 20.444448 6.100000 2.200000 20.654748 6.100000 2.300000 20.885047 6.100000 2.400000 21.135346 6.100000 2.500000 21.405645 6.100000 2.600000 21.695944 6.100000 2.700000 22.006244 6.100000 2.800000 22.336543 6.100000 2.900000 22.686842 6.100000 3.000000 23.057141 6.100000 3.100000 23.447440 6.100000 3.200000 23.857740 6.100000 3.300000 24.288039 6.100000 3.400000 24.738338 6.100000 3.500000 25.208637 6.100000 3.600000 25.698936 6.100000 3.700000 26.209235 6.100000 3.800000 26.739535 6.100000 3.900000 27.289834 6.100000 4.000000 27.860133 6.100000 4.100000 28.450432 6.100000 4.200000 29.060731 6.100000 4.300000 29.691031 6.100000 4.400000 30.341330 6.100000 4.500000 31.011629 6.100000 4.600000 31.701928 6.100000 4.700000 32.412227 6.100000 4.800000 33.142527 6.100000 4.900000 33.892826 6.100000 5.000000 34.663125 6.100000 5.100000 35.453424 6.100000 5.200000 36.263723 6.100000 5.300000 37.094022 6.100000 5.400000 37.944322 6.100000 5.500000 38.814621 6.100000 5.600000 39.704920 6.100000 5.700000 40.615219 6.100000 5.800000 41.545518 6.100000 5.900000 42.495818 6.100000 6.000000 43.466117 6.100000 6.100000 44.456416 6.100000 6.200000 45.466715 6.100000 6.300000 46.497014 6.100000 6.400000 47.547314 6.100000 6.500000 48.617613 6.100000 6.600000 49.707912 6.100000 6.700000 50.818211 6.100000 6.800000 51.948510 6.100000 6.900000 53.098809 6.100000 7.000000 54.269109 6.100000 7.100000 55.459408 6.100000 7.200000 56.669707 6.100000 7.300000 57.900006 6.100000 7.400000 59.150305 6.100000 7.500000 60.420605 6.100000 7.600000 61.710904 6.100000 7.700000 63.021203 6.100000 7.800000 64.351502 6.100000 7.900000 65.701801 6.100000 8.000000 67.072101 6.100000 8.100000 68.462400 6.100000 8.200000 69.872699 6.100000 8.300000 71.302998 6.100000 8.400000 72.753297 6.100000 8.500000 74.223597 6.100000 8.600000 75.713896 6.100000 8.700000 77.224195 6.100000 8.800000 78.754494 6.100000 8.900000 80.304793 6.100000 9.000000 81.875092 6.100000 9.100000 83.465392 6.100000 9.200000 85.075691 6.100000 9.300000 86.705990 6.100000 9.400000 88.356289 6.100000 9.500000 90.026588 6.100000 9.600000 91.716888 6.100000 9.700000 93.427187 6.100000 9.800000 95.157486 6.100000 9.900000 96.907785 6.100000 10.000000 98.678084 6.100000 10.100000 100.468384 6.100000 10.200000 102.278683 6.100000 10.300000 104.108982 6.100000 10.400000 105.959281 6.100000 10.500000 107.829580 6.100000 10.600000 109.719879 6.100000 10.700000 111.630179 6.100000 10.800000 113.560478 6.100000 10.900000 115.510777 6.100000 11.000000 117.481076 6.100000 11.100000 119.471375 6.100000 11.200000 121.481675 6.100000 11.300000 123.511974 6.100000 11.400000 125.562273 6.100000 11.500000 127.632572 6.100000 11.600000 129.722871 6.100000 11.700000 131.833171 6.100000 11.800000 133.963470 6.100000 11.900000 136.113769 6.100000 12.000000 138.284068 6.100000 12.100000 140.474367 6.100000 12.200000 142.684666 6.100000 12.300000 144.914966 6.100000 12.400000 147.165265 6.100000 12.500000 149.435564 6.100000 12.600000 151.725863 6.100000 12.700000 154.036162 6.100000 12.800000 156.366462 6.100000 12.900000 158.716761 6.100000 13.000000 161.087060 6.100000 13.100000 163.477359 6.100000 13.200000 165.887658 6.100000 13.300000 168.317958 6.100000 13.400000 170.768257 6.100000 13.500000 173.238556 6.100000 13.600000 175.728855 6.100000 13.700000 178.239154 6.100000 13.800000 180.769454 6.100000 13.900000 183.319753 6.100000 14.000000 185.890052 6.100000 14.100000 188.480351 6.100000 14.200000 191.090650 6.100000 14.300000 193.720949 6.100000 14.400000 196.371249 6.100000 14.500000 199.041548 6.100000 14.600000 201.731847 6.100000 14.700000 204.442146 6.100000 14.800000 207.172445 6.100000 14.900000 209.922745 6.100000 15.000000 212.693044 6.200000 -5.000000 56.757514 6.200000 -4.900000 55.547865 6.200000 -4.800000 54.358216 6.200000 -4.700000 53.188567 6.200000 -4.600000 52.038918 6.200000 -4.500000 50.909268 6.200000 -4.400000 49.799619 6.200000 -4.300000 48.709970 6.200000 -4.200000 47.640321 6.200000 -4.100000 46.590672 6.200000 -4.000000 45.561022 6.200000 -3.900000 44.551373 6.200000 -3.800000 43.561724 6.200000 -3.700000 42.592075 6.200000 -3.600000 41.642426 6.200000 -3.500000 40.712776 6.200000 -3.400000 39.803127 6.200000 -3.300000 38.913478 6.200000 -3.200000 38.043829 6.200000 -3.100000 37.194179 6.200000 -3.000000 36.364530 6.200000 -2.900000 35.554881 6.200000 -2.800000 34.765232 6.200000 -2.700000 33.995583 6.200000 -2.600000 33.245933 6.200000 -2.500000 32.516284 6.200000 -2.400000 31.806635 6.200000 -2.300000 31.116986 6.200000 -2.200000 30.447337 6.200000 -2.100000 29.797687 6.200000 -2.000000 29.168038 6.200000 -1.900000 28.558389 6.200000 -1.800000 27.968740 6.200000 -1.700000 27.399090 6.200000 -1.600000 26.849441 6.200000 -1.500000 26.319792 6.200000 -1.400000 25.810143 6.200000 -1.300000 25.320494 6.200000 -1.200000 24.850844 6.200000 -1.100000 24.401195 6.200000 -1.000000 23.971546 6.200000 -0.900000 23.561897 6.200000 -0.800000 23.172248 6.200000 -0.700000 22.802598 6.200000 -0.600000 22.452949 6.200000 -0.500000 22.123300 6.200000 -0.400000 21.813651 6.200000 -0.300000 21.524002 6.200000 -0.200000 21.254352 6.200000 -0.100000 21.004703 6.200000 -0.000000 20.775054 6.200000 0.100000 20.565405 6.200000 0.200000 20.375755 6.200000 0.300000 20.206106 6.200000 0.400000 20.056457 6.200000 0.500000 19.926808 6.200000 0.600000 19.817159 6.200000 0.700000 19.727509 6.200000 0.800000 19.657860 6.200000 0.900000 19.608211 6.200000 1.000000 19.578562 6.200000 1.100000 19.568913 6.200000 1.200000 19.579263 6.200000 1.300000 19.609614 6.200000 1.400000 19.659965 6.200000 1.500000 19.730316 6.200000 1.600000 19.820666 6.200000 1.700000 19.931017 6.200000 1.800000 20.061368 6.200000 1.900000 20.211719 6.200000 2.000000 20.382070 6.200000 2.100000 20.572420 6.200000 2.200000 20.782771 6.200000 2.300000 21.013122 6.200000 2.400000 21.263473 6.200000 2.500000 21.533824 6.200000 2.600000 21.824174 6.200000 2.700000 22.134525 6.200000 2.800000 22.464876 6.200000 2.900000 22.815227 6.200000 3.000000 23.185578 6.200000 3.100000 23.575928 6.200000 3.200000 23.986279 6.200000 3.300000 24.416630 6.200000 3.400000 24.866981 6.200000 3.500000 25.337331 6.200000 3.600000 25.827682 6.200000 3.700000 26.338033 6.200000 3.800000 26.868384 6.200000 3.900000 27.418735 6.200000 4.000000 27.989085 6.200000 4.100000 28.579436 6.200000 4.200000 29.189787 6.200000 4.300000 29.820138 6.200000 4.400000 30.470489 6.200000 4.500000 31.140839 6.200000 4.600000 31.831190 6.200000 4.700000 32.541541 6.200000 4.800000 33.271892 6.200000 4.900000 34.022242 6.200000 5.000000 34.792593 6.200000 5.100000 35.582944 6.200000 5.200000 36.393295 6.200000 5.300000 37.223646 6.200000 5.400000 38.073996 6.200000 5.500000 38.944347 6.200000 5.600000 39.834698 6.200000 5.700000 40.745049 6.200000 5.800000 41.675400 6.200000 5.900000 42.625750 6.200000 6.000000 43.596101 6.200000 6.100000 44.586452 6.200000 6.200000 45.596803 6.200000 6.300000 46.627154 6.200000 6.400000 47.677504 6.200000 6.500000 48.747855 6.200000 6.600000 49.838206 6.200000 6.700000 50.948557 6.200000 6.800000 52.078907 6.200000 6.900000 53.229258 6.200000 7.000000 54.399609 6.200000 7.100000 55.589960 6.200000 7.200000 56.800311 6.200000 7.300000 58.030661 6.200000 7.400000 59.281012 6.200000 7.500000 60.551363 6.200000 7.600000 61.841714 6.200000 7.700000 63.152065 6.200000 7.800000 64.482415 6.200000 7.900000 65.832766 6.200000 8.000000 67.203117 6.200000 8.100000 68.593468 6.200000 8.200000 70.003818 6.200000 8.300000 71.434169 6.200000 8.400000 72.884520 6.200000 8.500000 74.354871 6.200000 8.600000 75.845222 6.200000 8.700000 77.355572 6.200000 8.800000 78.885923 6.200000 8.900000 80.436274 6.200000 9.000000 82.006625 6.200000 9.100000 83.596976 6.200000 9.200000 85.207326 6.200000 9.300000 86.837677 6.200000 9.400000 88.488028 6.200000 9.500000 90.158379 6.200000 9.600000 91.848730 6.200000 9.700000 93.559080 6.200000 9.800000 95.289431 6.200000 9.900000 97.039782 6.200000 10.000000 98.810133 6.200000 10.100000 100.600483 6.200000 10.200000 102.410834 6.200000 10.300000 104.241185 6.200000 10.400000 106.091536 6.200000 10.500000 107.961887 6.200000 10.600000 109.852237 6.200000 10.700000 111.762588 6.200000 10.800000 113.692939 6.200000 10.900000 115.643290 6.200000 11.000000 117.613641 6.200000 11.100000 119.603991 6.200000 11.200000 121.614342 6.200000 11.300000 123.644693 6.200000 11.400000 125.695044 6.200000 11.500000 127.765395 6.200000 11.600000 129.855745 6.200000 11.700000 131.966096 6.200000 11.800000 134.096447 6.200000 11.900000 136.246798 6.200000 12.000000 138.417148 6.200000 12.100000 140.607499 6.200000 12.200000 142.817850 6.200000 12.300000 145.048201 6.200000 12.400000 147.298552 6.200000 12.500000 149.568902 6.200000 12.600000 151.859253 6.200000 12.700000 154.169604 6.200000 12.800000 156.499955 6.200000 12.900000 158.850306 6.200000 13.000000 161.220656 6.200000 13.100000 163.611007 6.200000 13.200000 166.021358 6.200000 13.300000 168.451709 6.200000 13.400000 170.902059 6.200000 13.500000 173.372410 6.200000 13.600000 175.862761 6.200000 13.700000 178.373112 6.200000 13.800000 180.903463 6.200000 13.900000 183.453813 6.200000 14.000000 186.024164 6.200000 14.100000 188.614515 6.200000 14.200000 191.224866 6.200000 14.300000 193.855217 6.200000 14.400000 196.505567 6.200000 14.500000 199.175918 6.200000 14.600000 201.866269 6.200000 14.700000 204.576620 6.200000 14.800000 207.306971 6.200000 14.900000 210.057321 6.200000 15.000000 212.827672 6.300000 -5.000000 56.817731 6.300000 -4.900000 55.607617 6.300000 -4.800000 54.417502 6.300000 -4.700000 53.247388 6.300000 -4.600000 52.097274 6.300000 -4.500000 50.967159 6.300000 -4.400000 49.857045 6.300000 -4.300000 48.766931 6.300000 -4.200000 47.696816 6.300000 -4.100000 46.646702 6.300000 -4.000000 45.616587 6.300000 -3.900000 44.606473 6.300000 -3.800000 43.616359 6.300000 -3.700000 42.646244 6.300000 -3.600000 41.696130 6.300000 -3.500000 40.766016 6.300000 -3.400000 39.855901 6.300000 -3.300000 38.965787 6.300000 -3.200000 38.095673 6.300000 -3.100000 37.245558 6.300000 -3.000000 36.415444 6.300000 -2.900000 35.605330 6.300000 -2.800000 34.815215 6.300000 -2.700000 34.045101 6.300000 -2.600000 33.294987 6.300000 -2.500000 32.564872 6.300000 -2.400000 31.854758 6.300000 -2.300000 31.164644 6.300000 -2.200000 30.494529 6.300000 -2.100000 29.844415 6.300000 -2.000000 29.214300 6.300000 -1.900000 28.604186 6.300000 -1.800000 28.014072 6.300000 -1.700000 27.443957 6.300000 -1.600000 26.893843 6.300000 -1.500000 26.363729 6.300000 -1.400000 25.853614 6.300000 -1.300000 25.363500 6.300000 -1.200000 24.893386 6.300000 -1.100000 24.443271 6.300000 -1.000000 24.013157 6.300000 -0.900000 23.603043 6.300000 -0.800000 23.212928 6.300000 -0.700000 22.842814 6.300000 -0.600000 22.492700 6.300000 -0.500000 22.162585 6.300000 -0.400000 21.852471 6.300000 -0.300000 21.562356 6.300000 -0.200000 21.292242 6.300000 -0.100000 21.042128 6.300000 -0.000000 20.812013 6.300000 0.100000 20.601899 6.300000 0.200000 20.411785 6.300000 0.300000 20.241670 6.300000 0.400000 20.091556 6.300000 0.500000 19.961442 6.300000 0.600000 19.851327 6.300000 0.700000 19.761213 6.300000 0.800000 19.691099 6.300000 0.900000 19.640984 6.300000 1.000000 19.610870 6.300000 1.100000 19.600756 6.300000 1.200000 19.610641 6.300000 1.300000 19.640527 6.300000 1.400000 19.690413 6.300000 1.500000 19.760298 6.300000 1.600000 19.850184 6.300000 1.700000 19.960069 6.300000 1.800000 20.089955 6.300000 1.900000 20.239841 6.300000 2.000000 20.409726 6.300000 2.100000 20.599612 6.300000 2.200000 20.809498 6.300000 2.300000 21.039383 6.300000 2.400000 21.289269 6.300000 2.500000 21.559155 6.300000 2.600000 21.849040 6.300000 2.700000 22.158926 6.300000 2.800000 22.488812 6.300000 2.900000 22.838697 6.300000 3.000000 23.208583 6.300000 3.100000 23.598469 6.300000 3.200000 24.008354 6.300000 3.300000 24.438240 6.300000 3.400000 24.888126 6.300000 3.500000 25.358011 6.300000 3.600000 25.847897 6.300000 3.700000 26.357782 6.300000 3.800000 26.887668 6.300000 3.900000 27.437554 6.300000 4.000000 28.007439 6.300000 4.100000 28.597325 6.300000 4.200000 29.207211 6.300000 4.300000 29.837096 6.300000 4.400000 30.486982 6.300000 4.500000 31.156868 6.300000 4.600000 31.846753 6.300000 4.700000 32.556639 6.300000 4.800000 33.286525 6.300000 4.900000 34.036410 6.300000 5.000000 34.806296 6.300000 5.100000 35.596182 6.300000 5.200000 36.406067 6.300000 5.300000 37.235953 6.300000 5.400000 38.085839 6.300000 5.500000 38.955724 6.300000 5.600000 39.845610 6.300000 5.700000 40.755495 6.300000 5.800000 41.685381 6.300000 5.900000 42.635267 6.300000 6.000000 43.605152 6.300000 6.100000 44.595038 6.300000 6.200000 45.604924 6.300000 6.300000 46.634809 6.300000 6.400000 47.684695 6.300000 6.500000 48.754581 6.300000 6.600000 49.844466 6.300000 6.700000 50.954352 6.300000 6.800000 52.084238 6.300000 6.900000 53.234123 6.300000 7.000000 54.404009 6.300000 7.100000 55.593895 6.300000 7.200000 56.803780 6.300000 7.300000 58.033666 6.300000 7.400000 59.283551 6.300000 7.500000 60.553437 6.300000 7.600000 61.843323 6.300000 7.700000 63.153208 6.300000 7.800000 64.483094 6.300000 7.900000 65.832980 6.300000 8.000000 67.202865 6.300000 8.100000 68.592751 6.300000 8.200000 70.002637 6.300000 8.300000 71.432522 6.300000 8.400000 72.882408 6.300000 8.500000 74.352294 6.300000 8.600000 75.842179 6.300000 8.700000 77.352065 6.300000 8.800000 78.881951 6.300000 8.900000 80.431836 6.300000 9.000000 82.001722 6.300000 9.100000 83.591608 6.300000 9.200000 85.201493 6.300000 9.300000 86.831379 6.300000 9.400000 88.481264 6.300000 9.500000 90.151150 6.300000 9.600000 91.841036 6.300000 9.700000 93.550921 6.300000 9.800000 95.280807 6.300000 9.900000 97.030693 6.300000 10.000000 98.800578 6.300000 10.100000 100.590464 6.300000 10.200000 102.400350 6.300000 10.300000 104.230235 6.300000 10.400000 106.080121 6.300000 10.500000 107.950007 6.300000 10.600000 109.839892 6.300000 10.700000 111.749778 6.300000 10.800000 113.679664 6.300000 10.900000 115.629549 6.300000 11.000000 117.599435 6.300000 11.100000 119.589321 6.300000 11.200000 121.599206 6.300000 11.300000 123.629092 6.300000 11.400000 125.678977 6.300000 11.500000 127.748863 6.300000 11.600000 129.838749 6.300000 11.700000 131.948634 6.300000 11.800000 134.078520 6.300000 11.900000 136.228406 6.300000 12.000000 138.398291 6.300000 12.100000 140.588177 6.300000 12.200000 142.798063 6.300000 12.300000 145.027948 6.300000 12.400000 147.277834 6.300000 12.500000 149.547720 6.300000 12.600000 151.837605 6.300000 12.700000 154.147491 6.300000 12.800000 156.477377 6.300000 12.900000 158.827262 6.300000 13.000000 161.197148 6.300000 13.100000 163.587034 6.300000 13.200000 165.996919 6.300000 13.300000 168.426805 6.300000 13.400000 170.876690 6.300000 13.500000 173.346576 6.300000 13.600000 175.836462 6.300000 13.700000 178.346347 6.300000 13.800000 180.876233 6.300000 13.900000 183.426119 6.300000 14.000000 185.996004 6.300000 14.100000 188.585890 6.300000 14.200000 191.195776 6.300000 14.300000 193.825661 6.300000 14.400000 196.475547 6.300000 14.500000 199.145433 6.300000 14.600000 201.835318 6.300000 14.700000 204.545204 6.300000 14.800000 207.275090 6.300000 14.900000 210.024975 6.300000 15.000000 212.794861 6.400000 -5.000000 56.813573 6.400000 -4.900000 55.602477 6.400000 -4.800000 54.411381 6.400000 -4.700000 53.240285 6.400000 -4.600000 52.089188 6.400000 -4.500000 50.958092 6.400000 -4.400000 49.846996 6.400000 -4.300000 48.755900 6.400000 -4.200000 47.684804 6.400000 -4.100000 46.633707 6.400000 -4.000000 45.602611 6.400000 -3.900000 44.591515 6.400000 -3.800000 43.600419 6.400000 -3.700000 42.629322 6.400000 -3.600000 41.678226 6.400000 -3.500000 40.747130 6.400000 -3.400000 39.836034 6.400000 -3.300000 38.944938 6.400000 -3.200000 38.073841 6.400000 -3.100000 37.222745 6.400000 -3.000000 36.391649 6.400000 -2.900000 35.580553 6.400000 -2.800000 34.789456 6.400000 -2.700000 34.018360 6.400000 -2.600000 33.267264 6.400000 -2.500000 32.536168 6.400000 -2.400000 31.825071 6.400000 -2.300000 31.133975 6.400000 -2.200000 30.462879 6.400000 -2.100000 29.811783 6.400000 -2.000000 29.180687 6.400000 -1.900000 28.569590 6.400000 -1.800000 27.978494 6.400000 -1.700000 27.407398 6.400000 -1.600000 26.856302 6.400000 -1.500000 26.325205 6.400000 -1.400000 25.814109 6.400000 -1.300000 25.323013 6.400000 -1.200000 24.851917 6.400000 -1.100000 24.400821 6.400000 -1.000000 23.969724 6.400000 -0.900000 23.558628 6.400000 -0.800000 23.167532 6.400000 -0.700000 22.796436 6.400000 -0.600000 22.445339 6.400000 -0.500000 22.114243 6.400000 -0.400000 21.803147 6.400000 -0.300000 21.512051 6.400000 -0.200000 21.240954 6.400000 -0.100000 20.989858 6.400000 -0.000000 20.758762 6.400000 0.100000 20.547666 6.400000 0.200000 20.356570 6.400000 0.300000 20.185473 6.400000 0.400000 20.034377 6.400000 0.500000 19.903281 6.400000 0.600000 19.792185 6.400000 0.700000 19.701088 6.400000 0.800000 19.629992 6.400000 0.900000 19.578896 6.400000 1.000000 19.547800 6.400000 1.100000 19.536704 6.400000 1.200000 19.545607 6.400000 1.300000 19.574511 6.400000 1.400000 19.623415 6.400000 1.500000 19.692319 6.400000 1.600000 19.781222 6.400000 1.700000 19.890126 6.400000 1.800000 20.019030 6.400000 1.900000 20.167934 6.400000 2.000000 20.336837 6.400000 2.100000 20.525741 6.400000 2.200000 20.734645 6.400000 2.300000 20.963549 6.400000 2.400000 21.212453 6.400000 2.500000 21.481356 6.400000 2.600000 21.770260 6.400000 2.700000 22.079164 6.400000 2.800000 22.408068 6.400000 2.900000 22.756971 6.400000 3.000000 23.125875 6.400000 3.100000 23.514779 6.400000 3.200000 23.923683 6.400000 3.300000 24.352587 6.400000 3.400000 24.801490 6.400000 3.500000 25.270394 6.400000 3.600000 25.759298 6.400000 3.700000 26.268202 6.400000 3.800000 26.797105 6.400000 3.900000 27.346009 6.400000 4.000000 27.914913 6.400000 4.100000 28.503817 6.400000 4.200000 29.112720 6.400000 4.300000 29.741624 6.400000 4.400000 30.390528 6.400000 4.500000 31.059432 6.400000 4.600000 31.748336 6.400000 4.700000 32.457239 6.400000 4.800000 33.186143 6.400000 4.900000 33.935047 6.400000 5.000000 34.703951 6.400000 5.100000 35.492854 6.400000 5.200000 36.301758 6.400000 5.300000 37.130662 6.400000 5.400000 37.979566 6.400000 5.500000 38.848470 6.400000 5.600000 39.737373 6.400000 5.700000 40.646277 6.400000 5.800000 41.575181 6.400000 5.900000 42.524085 6.400000 6.000000 43.492988 6.400000 6.100000 44.481892 6.400000 6.200000 45.490796 6.400000 6.300000 46.519700 6.400000 6.400000 47.568603 6.400000 6.500000 48.637507 6.400000 6.600000 49.726411 6.400000 6.700000 50.835315 6.400000 6.800000 51.964219 6.400000 6.900000 53.113122 6.400000 7.000000 54.282026 6.400000 7.100000 55.470930 6.400000 7.200000 56.679834 6.400000 7.300000 57.908737 6.400000 7.400000 59.157641 6.400000 7.500000 60.426545 6.400000 7.600000 61.715449 6.400000 7.700000 63.024353 6.400000 7.800000 64.353256 6.400000 7.900000 65.702160 6.400000 8.000000 67.071064 6.400000 8.100000 68.459968 6.400000 8.200000 69.868871 6.400000 8.300000 71.297775 6.400000 8.400000 72.746679 6.400000 8.500000 74.215583 6.400000 8.600000 75.704486 6.400000 8.700000 77.213390 6.400000 8.800000 78.742294 6.400000 8.900000 80.291198 6.400000 9.000000 81.860102 6.400000 9.100000 83.449005 6.400000 9.200000 85.057909 6.400000 9.300000 86.686813 6.400000 9.400000 88.335717 6.400000 9.500000 90.004620 6.400000 9.600000 91.693524 6.400000 9.700000 93.402428 6.400000 9.800000 95.131332 6.400000 9.900000 96.880236 6.400000 10.000000 98.649139 6.400000 10.100000 100.438043 6.400000 10.200000 102.246947 6.400000 10.300000 104.075851 6.400000 10.400000 105.924754 6.400000 10.500000 107.793658 6.400000 10.600000 109.682562 6.400000 10.700000 111.591466 6.400000 10.800000 113.520369 6.400000 10.900000 115.469273 6.400000 11.000000 117.438177 6.400000 11.100000 119.427081 6.400000 11.200000 121.435985 6.400000 11.300000 123.464888 6.400000 11.400000 125.513792 6.400000 11.500000 127.582696 6.400000 11.600000 129.671600 6.400000 11.700000 131.780503 6.400000 11.800000 133.909407 6.400000 11.900000 136.058311 6.400000 12.000000 138.227215 6.400000 12.100000 140.416119 6.400000 12.200000 142.625022 6.400000 12.300000 144.853926 6.400000 12.400000 147.102830 6.400000 12.500000 149.371734 6.400000 12.600000 151.660637 6.400000 12.700000 153.969541 6.400000 12.800000 156.298445 6.400000 12.900000 158.647349 6.400000 13.000000 161.016252 6.400000 13.100000 163.405156 6.400000 13.200000 165.814060 6.400000 13.300000 168.242964 6.400000 13.400000 170.691868 6.400000 13.500000 173.160771 6.400000 13.600000 175.649675 6.400000 13.700000 178.158579 6.400000 13.800000 180.687483 6.400000 13.900000 183.236386 6.400000 14.000000 185.805290 6.400000 14.100000 188.394194 6.400000 14.200000 191.003098 6.400000 14.300000 193.632001 6.400000 14.400000 196.280905 6.400000 14.500000 198.949809 6.400000 14.600000 201.638713 6.400000 14.700000 204.347617 6.400000 14.800000 207.076520 6.400000 14.900000 209.825424 6.400000 15.000000 212.594328 6.500000 -5.000000 56.745758 6.500000 -4.900000 55.533163 6.500000 -4.800000 54.340568 6.500000 -4.700000 53.167974 6.500000 -4.600000 52.015379 6.500000 -4.500000 50.882784 6.500000 -4.400000 49.770189 6.500000 -4.300000 48.677594 6.500000 -4.200000 47.604999 6.500000 -4.100000 46.552405 6.500000 -4.000000 45.519810 6.500000 -3.900000 44.507215 6.500000 -3.800000 43.514620 6.500000 -3.700000 42.542025 6.500000 -3.600000 41.589430 6.500000 -3.500000 40.656835 6.500000 -3.400000 39.744241 6.500000 -3.300000 38.851646 6.500000 -3.200000 37.979051 6.500000 -3.100000 37.126456 6.500000 -3.000000 36.293861 6.500000 -2.900000 35.481266 6.500000 -2.800000 34.688672 6.500000 -2.700000 33.916077 6.500000 -2.600000 33.163482 6.500000 -2.500000 32.430887 6.500000 -2.400000 31.718292 6.500000 -2.300000 31.025697 6.500000 -2.200000 30.353103 6.500000 -2.100000 29.700508 6.500000 -2.000000 29.067913 6.500000 -1.900000 28.455318 6.500000 -1.800000 27.862723 6.500000 -1.700000 27.290128 6.500000 -1.600000 26.737533 6.500000 -1.500000 26.204939 6.500000 -1.400000 25.692344 6.500000 -1.300000 25.199749 6.500000 -1.200000 24.727154 6.500000 -1.100000 24.274559 6.500000 -1.000000 23.841964 6.500000 -0.900000 23.429370 6.500000 -0.800000 23.036775 6.500000 -0.700000 22.664180 6.500000 -0.600000 22.311585 6.500000 -0.500000 21.978990 6.500000 -0.400000 21.666395 6.500000 -0.300000 21.373801 6.500000 -0.200000 21.101206 6.500000 -0.100000 20.848611 6.500000 -0.000000 20.616016 6.500000 0.100000 20.403421 6.500000 0.200000 20.210826 6.500000 0.300000 20.038231 6.500000 0.400000 19.885637 6.500000 0.500000 19.753042 6.500000 0.600000 19.640447 6.500000 0.700000 19.547852 6.500000 0.800000 19.475257 6.500000 0.900000 19.422662 6.500000 1.000000 19.390068 6.500000 1.100000 19.377473 6.500000 1.200000 19.384878 6.500000 1.300000 19.412283 6.500000 1.400000 19.459688 6.500000 1.500000 19.527093 6.500000 1.600000 19.614499 6.500000 1.700000 19.721904 6.500000 1.800000 19.849309 6.500000 1.900000 19.996714 6.500000 2.000000 20.164119 6.500000 2.100000 20.351524 6.500000 2.200000 20.558929 6.500000 2.300000 20.786335 6.500000 2.400000 21.033740 6.500000 2.500000 21.301145 6.500000 2.600000 21.588550 6.500000 2.700000 21.895955 6.500000 2.800000 22.223360 6.500000 2.900000 22.570766 6.500000 3.000000 22.938171 6.500000 3.100000 23.325576 6.500000 3.200000 23.732981 6.500000 3.300000 24.160386 6.500000 3.400000 24.607791 6.500000 3.500000 25.075197 6.500000 3.600000 25.562602 6.500000 3.700000 26.070007 6.500000 3.800000 26.597412 6.500000 3.900000 27.144817 6.500000 4.000000 27.712222 6.500000 4.100000 28.299627 6.500000 4.200000 28.907033 6.500000 4.300000 29.534438 6.500000 4.400000 30.181843 6.500000 4.500000 30.849248 6.500000 4.600000 31.536653 6.500000 4.700000 32.244058 6.500000 4.800000 32.971464 6.500000 4.900000 33.718869 6.500000 5.000000 34.486274 6.500000 5.100000 35.273679 6.500000 5.200000 36.081084 6.500000 5.300000 36.908489 6.500000 5.400000 37.755895 6.500000 5.500000 38.623300 6.500000 5.600000 39.510705 6.500000 5.700000 40.418110 6.500000 5.800000 41.345515 6.500000 5.900000 42.292920 6.500000 6.000000 43.260325 6.500000 6.100000 44.247731 6.500000 6.200000 45.255136 6.500000 6.300000 46.282541 6.500000 6.400000 47.329946 6.500000 6.500000 48.397351 6.500000 6.600000 49.484756 6.500000 6.700000 50.592162 6.500000 6.800000 51.719567 6.500000 6.900000 52.866972 6.500000 7.000000 54.034377 6.500000 7.100000 55.221782 6.500000 7.200000 56.429187 6.500000 7.300000 57.656593 6.500000 7.400000 58.903998 6.500000 7.500000 60.171403 6.500000 7.600000 61.458808 6.500000 7.700000 62.766213 6.500000 7.800000 64.093618 6.500000 7.900000 65.441023 6.500000 8.000000 66.808429 6.500000 8.100000 68.195834 6.500000 8.200000 69.603239 6.500000 8.300000 71.030644 6.500000 8.400000 72.478049 6.500000 8.500000 73.945454 6.500000 8.600000 75.432860 6.500000 8.700000 76.940265 6.500000 8.800000 78.467670 6.500000 8.900000 80.015075 6.500000 9.000000 81.582480 6.500000 9.100000 83.169885 6.500000 9.200000 84.777291 6.500000 9.300000 86.404696 6.500000 9.400000 88.052101 6.500000 9.500000 89.719506 6.500000 9.600000 91.406911 6.500000 9.700000 93.114316 6.500000 9.800000 94.841721 6.500000 9.900000 96.589127 6.500000 10.000000 98.356532 6.500000 10.100000 100.143937 6.500000 10.200000 101.951342 6.500000 10.300000 103.778747 6.500000 10.400000 105.626152 6.500000 10.500000 107.493558 6.500000 10.600000 109.380963 6.500000 10.700000 111.288368 6.500000 10.800000 113.215773 6.500000 10.900000 115.163178 6.500000 11.000000 117.130583 6.500000 11.100000 119.117989 6.500000 11.200000 121.125394 6.500000 11.300000 123.152799 6.500000 11.400000 125.200204 6.500000 11.500000 127.267609 6.500000 11.600000 129.355014 6.500000 11.700000 131.462419 6.500000 11.800000 133.589825 6.500000 11.900000 135.737230 6.500000 12.000000 137.904635 6.500000 12.100000 140.092040 6.500000 12.200000 142.299445 6.500000 12.300000 144.526850 6.500000 12.400000 146.774256 6.500000 12.500000 149.041661 6.500000 12.600000 151.329066 6.500000 12.700000 153.636471 6.500000 12.800000 155.963876 6.500000 12.900000 158.311281 6.500000 13.000000 160.678687 6.500000 13.100000 163.066092 6.500000 13.200000 165.473497 6.500000 13.300000 167.900902 6.500000 13.400000 170.348307 6.500000 13.500000 172.815712 6.500000 13.600000 175.303117 6.500000 13.700000 177.810523 6.500000 13.800000 180.337928 6.500000 13.900000 182.885333 6.500000 14.000000 185.452738 6.500000 14.100000 188.040143 6.500000 14.200000 190.647548 6.500000 14.300000 193.274954 6.500000 14.400000 195.922359 6.500000 14.500000 198.589764 6.500000 14.600000 201.277169 6.500000 14.700000 203.984574 6.500000 14.800000 206.711979 6.500000 14.900000 209.459385 6.500000 15.000000 212.226790 6.600000 -5.000000 56.615994 6.600000 -4.900000 55.401383 6.600000 -4.800000 54.206773 6.600000 -4.700000 53.032163 6.600000 -4.600000 51.877553 6.600000 -4.500000 50.742943 6.600000 -4.400000 49.628332 6.600000 -4.300000 48.533722 6.600000 -4.200000 47.459112 6.600000 -4.100000 46.404502 6.600000 -4.000000 45.369892 6.600000 -3.900000 44.355281 6.600000 -3.800000 43.360671 6.600000 -3.700000 42.386061 6.600000 -3.600000 41.431451 6.600000 -3.500000 40.496841 6.600000 -3.400000 39.582230 6.600000 -3.300000 38.687620 6.600000 -3.200000 37.813010 6.600000 -3.100000 36.958400 6.600000 -3.000000 36.123790 6.600000 -2.900000 35.309180 6.600000 -2.800000 34.514569 6.600000 -2.700000 33.739959 6.600000 -2.600000 32.985349 6.600000 -2.500000 32.250739 6.600000 -2.400000 31.536129 6.600000 -2.300000 30.841518 6.600000 -2.200000 30.166908 6.600000 -2.100000 29.512298 6.600000 -2.000000 28.877688 6.600000 -1.900000 28.263078 6.600000 -1.800000 27.668467 6.600000 -1.700000 27.093857 6.600000 -1.600000 26.539247 6.600000 -1.500000 26.004637 6.600000 -1.400000 25.490027 6.600000 -1.300000 24.995416 6.600000 -1.200000 24.520806 6.600000 -1.100000 24.066196 6.600000 -1.000000 23.631586 6.600000 -0.900000 23.216976 6.600000 -0.800000 22.822365 6.600000 -0.700000 22.447755 6.600000 -0.600000 22.093145 6.600000 -0.500000 21.758535 6.600000 -0.400000 21.443925 6.600000 -0.300000 21.149314 6.600000 -0.200000 20.874704 6.600000 -0.100000 20.620094 6.600000 -0.000000 20.385484 6.600000 0.100000 20.170874 6.600000 0.200000 19.976263 6.600000 0.300000 19.801653 6.600000 0.400000 19.647043 6.600000 0.500000 19.512433 6.600000 0.600000 19.397823 6.600000 0.700000 19.303213 6.600000 0.800000 19.228602 6.600000 0.900000 19.173992 6.600000 1.000000 19.139382 6.600000 1.100000 19.124772 6.600000 1.200000 19.130162 6.600000 1.300000 19.155551 6.600000 1.400000 19.200941 6.600000 1.500000 19.266331 6.600000 1.600000 19.351721 6.600000 1.700000 19.457111 6.600000 1.800000 19.582500 6.600000 1.900000 19.727890 6.600000 2.000000 19.893280 6.600000 2.100000 20.078670 6.600000 2.200000 20.284060 6.600000 2.300000 20.509449 6.600000 2.400000 20.754839 6.600000 2.500000 21.020229 6.600000 2.600000 21.305619 6.600000 2.700000 21.611009 6.600000 2.800000 21.936398 6.600000 2.900000 22.281788 6.600000 3.000000 22.647178 6.600000 3.100000 23.032568 6.600000 3.200000 23.437958 6.600000 3.300000 23.863347 6.600000 3.400000 24.308737 6.600000 3.500000 24.774127 6.600000 3.600000 25.259517 6.600000 3.700000 25.764907 6.600000 3.800000 26.290296 6.600000 3.900000 26.835686 6.600000 4.000000 27.401076 6.600000 4.100000 27.986466 6.600000 4.200000 28.591856 6.600000 4.300000 29.217245 6.600000 4.400000 29.862635 6.600000 4.500000 30.528025 6.600000 4.600000 31.213415 6.600000 4.700000 31.918805 6.600000 4.800000 32.644195 6.600000 4.900000 33.389584 6.600000 5.000000 34.154974 6.600000 5.100000 34.940364 6.600000 5.200000 35.745754 6.600000 5.300000 36.571144 6.600000 5.400000 37.416533 6.600000 5.500000 38.281923 6.600000 5.600000 39.167313 6.600000 5.700000 40.072703 6.600000 5.800000 40.998093 6.600000 5.900000 41.943482 6.600000 6.000000 42.908872 6.600000 6.100000 43.894262 6.600000 6.200000 44.899652 6.600000 6.300000 45.925042 6.600000 6.400000 46.970431 6.600000 6.500000 48.035821 6.600000 6.600000 49.121211 6.600000 6.700000 50.226601 6.600000 6.800000 51.351991 6.600000 6.900000 52.497380 6.600000 7.000000 53.662770 6.600000 7.100000 54.848160 6.600000 7.200000 56.053550 6.600000 7.300000 57.278940 6.600000 7.400000 58.524329 6.600000 7.500000 59.789719 6.600000 7.600000 61.075109 6.600000 7.700000 62.380499 6.600000 7.800000 63.705889 6.600000 7.900000 65.051278 6.600000 8.000000 66.416668 6.600000 8.100000 67.802058 6.600000 8.200000 69.207448 6.600000 8.300000 70.632838 6.600000 8.400000 72.078228 6.600000 8.500000 73.543617 6.600000 8.600000 75.029007 6.600000 8.700000 76.534397 6.600000 8.800000 78.059787 6.600000 8.900000 79.605177 6.600000 9.000000 81.170566 6.600000 9.100000 82.755956 6.600000 9.200000 84.361346 6.600000 9.300000 85.986736 6.600000 9.400000 87.632126 6.600000 9.500000 89.297515 6.600000 9.600000 90.982905 6.600000 9.700000 92.688295 6.600000 9.800000 94.413685 6.600000 9.900000 96.159075 6.600000 10.000000 97.924464 6.600000 10.100000 99.709854 6.600000 10.200000 101.515244 6.600000 10.300000 103.340634 6.600000 10.400000 105.186024 6.600000 10.500000 107.051413 6.600000 10.600000 108.936803 6.600000 10.700000 110.842193 6.600000 10.800000 112.767583 6.600000 10.900000 114.712973 6.600000 11.000000 116.678362 6.600000 11.100000 118.663752 6.600000 11.200000 120.669142 6.600000 11.300000 122.694532 6.600000 11.400000 124.739922 6.600000 11.500000 126.805311 6.600000 11.600000 128.890701 6.600000 11.700000 130.996091 6.600000 11.800000 133.121481 6.600000 11.900000 135.266871 6.600000 12.000000 137.432260 6.600000 12.100000 139.617650 6.600000 12.200000 141.823040 6.600000 12.300000 144.048430 6.600000 12.400000 146.293820 6.600000 12.500000 148.559210 6.600000 12.600000 150.844599 6.600000 12.700000 153.149989 6.600000 12.800000 155.475379 6.600000 12.900000 157.820769 6.600000 13.000000 160.186159 6.600000 13.100000 162.571548 6.600000 13.200000 164.976938 6.600000 13.300000 167.402328 6.600000 13.400000 169.847718 6.600000 13.500000 172.313108 6.600000 13.600000 174.798497 6.600000 13.700000 177.303887 6.600000 13.800000 179.829277 6.600000 13.900000 182.374667 6.600000 14.000000 184.940057 6.600000 14.100000 187.525446 6.600000 14.200000 190.130836 6.600000 14.300000 192.756226 6.600000 14.400000 195.401616 6.600000 14.500000 198.067006 6.600000 14.600000 200.752395 6.600000 14.700000 203.457785 6.600000 14.800000 206.183175 6.600000 14.900000 208.928565 6.600000 15.000000 211.693955 6.700000 -5.000000 56.426965 6.700000 -4.900000 55.209822 6.700000 -4.800000 54.012680 6.700000 -4.700000 52.835538 6.700000 -4.600000 51.678396 6.700000 -4.500000 50.541253 6.700000 -4.400000 49.424111 6.700000 -4.300000 48.326969 6.700000 -4.200000 47.249826 6.700000 -4.100000 46.192684 6.700000 -4.000000 45.155542 6.700000 -3.900000 44.138400 6.700000 -3.800000 43.141257 6.700000 -3.700000 42.164115 6.700000 -3.600000 41.206973 6.700000 -3.500000 40.269830 6.700000 -3.400000 39.352688 6.700000 -3.300000 38.455546 6.700000 -3.200000 37.578404 6.700000 -3.100000 36.721261 6.700000 -3.000000 35.884119 6.700000 -2.900000 35.066977 6.700000 -2.800000 34.269834 6.700000 -2.700000 33.492692 6.700000 -2.600000 32.735550 6.700000 -2.500000 31.998408 6.700000 -2.400000 31.281265 6.700000 -2.300000 30.584123 6.700000 -2.200000 29.906981 6.700000 -2.100000 29.249838 6.700000 -2.000000 28.612696 6.700000 -1.900000 27.995554 6.700000 -1.800000 27.398412 6.700000 -1.700000 26.821269 6.700000 -1.600000 26.264127 6.700000 -1.500000 25.726985 6.700000 -1.400000 25.209842 6.700000 -1.300000 24.712700 6.700000 -1.200000 24.235558 6.700000 -1.100000 23.778416 6.700000 -1.000000 23.341273 6.700000 -0.900000 22.924131 6.700000 -0.800000 22.526989 6.700000 -0.700000 22.149846 6.700000 -0.600000 21.792704 6.700000 -0.500000 21.455562 6.700000 -0.400000 21.138420 6.700000 -0.300000 20.841277 6.700000 -0.200000 20.564135 6.700000 -0.100000 20.306993 6.700000 -0.000000 20.069850 6.700000 0.100000 19.852708 6.700000 0.200000 19.655566 6.700000 0.300000 19.478424 6.700000 0.400000 19.321281 6.700000 0.500000 19.184139 6.700000 0.600000 19.066997 6.700000 0.700000 18.969854 6.700000 0.800000 18.892712 6.700000 0.900000 18.835570 6.700000 1.000000 18.798428 6.700000 1.100000 18.781285 6.700000 1.200000 18.784143 6.700000 1.300000 18.807001 6.700000 1.400000 18.849858 6.700000 1.500000 18.912716 6.700000 1.600000 18.995574 6.700000 1.700000 19.098432 6.700000 1.800000 19.221289 6.700000 1.900000 19.364147 6.700000 2.000000 19.527005 6.700000 2.100000 19.709862 6.700000 2.200000 19.912720 6.700000 2.300000 20.135578 6.700000 2.400000 20.378436 6.700000 2.500000 20.641293 6.700000 2.600000 20.924151 6.700000 2.700000 21.227009 6.700000 2.800000 21.549866 6.700000 2.900000 21.892724 6.700000 3.000000 22.255582 6.700000 3.100000 22.638440 6.700000 3.200000 23.041297 6.700000 3.300000 23.464155 6.700000 3.400000 23.907013 6.700000 3.500000 24.369870 6.700000 3.600000 24.852728 6.700000 3.700000 25.355586 6.700000 3.800000 25.878444 6.700000 3.900000 26.421301 6.700000 4.000000 26.984159 6.700000 4.100000 27.567017 6.700000 4.200000 28.169874 6.700000 4.300000 28.792732 6.700000 4.400000 29.435590 6.700000 4.500000 30.098448 6.700000 4.600000 30.781305 6.700000 4.700000 31.484163 6.700000 4.800000 32.207021 6.700000 4.900000 32.949878 6.700000 5.000000 33.712736 6.700000 5.100000 34.495594 6.700000 5.200000 35.298452 6.700000 5.300000 36.121309 6.700000 5.400000 36.964167 6.700000 5.500000 37.827025 6.700000 5.600000 38.709882 6.700000 5.700000 39.612740 6.700000 5.800000 40.535598 6.700000 5.900000 41.478456 6.700000 6.000000 42.441313 6.700000 6.100000 43.424171 6.700000 6.200000 44.427029 6.700000 6.300000 45.449886 6.700000 6.400000 46.492744 6.700000 6.500000 47.555602 6.700000 6.600000 48.638460 6.700000 6.700000 49.741317 6.700000 6.800000 50.864175 6.700000 6.900000 52.007033 6.700000 7.000000 53.169890 6.700000 7.100000 54.352748 6.700000 7.200000 55.555606 6.700000 7.300000 56.778464 6.700000 7.400000 58.021321 6.700000 7.500000 59.284179 6.700000 7.600000 60.567037 6.700000 7.700000 61.869894 6.700000 7.800000 63.192752 6.700000 7.900000 64.535610 6.700000 8.000000 65.898468 6.700000 8.100000 67.281325 6.700000 8.200000 68.684183 6.700000 8.300000 70.107041 6.700000 8.400000 71.549898 6.700000 8.500000 73.012756 6.700000 8.600000 74.495614 6.700000 8.700000 75.998472 6.700000 8.800000 77.521329 6.700000 8.900000 79.064187 6.700000 9.000000 80.627045 6.700000 9.100000 82.209902 6.700000 9.200000 83.812760 6.700000 9.300000 85.435618 6.700000 9.400000 87.078476 6.700000 9.500000 88.741333 6.700000 9.600000 90.424191 6.700000 9.700000 92.127049 6.700000 9.800000 93.849906 6.700000 9.900000 95.592764 6.700000 10.000000 97.355622 6.700000 10.100000 99.138480 6.700000 10.200000 100.941337 6.700000 10.300000 102.764195 6.700000 10.400000 104.607053 6.700000 10.500000 106.469910 6.700000 10.600000 108.352768 6.700000 10.700000 110.255626 6.700000 10.800000 112.178484 6.700000 10.900000 114.121341 6.700000 11.000000 116.084199 6.700000 11.100000 118.067057 6.700000 11.200000 120.069914 6.700000 11.300000 122.092772 6.700000 11.400000 124.135630 6.700000 11.500000 126.198488 6.700000 11.600000 128.281345 6.700000 11.700000 130.384203 6.700000 11.800000 132.507061 6.700000 11.900000 134.649918 6.700000 12.000000 136.812776 6.700000 12.100000 138.995634 6.700000 12.200000 141.198492 6.700000 12.300000 143.421349 6.700000 12.400000 145.664207 6.700000 12.500000 147.927065 6.700000 12.600000 150.209922 6.700000 12.700000 152.512780 6.700000 12.800000 154.835638 6.700000 12.900000 157.178496 6.700000 13.000000 159.541353 6.700000 13.100000 161.924211 6.700000 13.200000 164.327069 6.700000 13.300000 166.749926 6.700000 13.400000 169.192784 6.700000 13.500000 171.655642 6.700000 13.600000 174.138500 6.700000 13.700000 176.641357 6.700000 13.800000 179.164215 6.700000 13.900000 181.707073 6.700000 14.000000 184.269930 6.700000 14.100000 186.852788 6.700000 14.200000 189.455646 6.700000 14.300000 192.078504 6.700000 14.400000 194.721361 6.700000 14.500000 197.384219 6.700000 14.600000 200.067077 6.700000 14.700000 202.769934 6.700000 14.800000 205.492792 6.700000 14.900000 208.235650 6.700000 15.000000 210.998508 6.800000 -5.000000 56.182307 6.800000 -4.900000 54.962116 6.800000 -4.800000 53.761925 6.800000 -4.700000 52.581734 6.800000 -4.600000 51.421543 6.800000 -4.500000 50.281352 6.800000 -4.400000 49.161160 6.800000 -4.300000 48.060969 6.800000 -4.200000 46.980778 6.800000 -4.100000 45.920587 6.800000 -4.000000 44.880396 6.800000 -3.900000 43.860205 6.800000 -3.800000 42.860014 6.800000 -3.700000 41.879823 6.800000 -3.600000 40.919631 6.800000 -3.500000 39.979440 6.800000 -3.400000 39.059249 6.800000 -3.300000 38.159058 6.800000 -3.200000 37.278867 6.800000 -3.100000 36.418676 6.800000 -3.000000 35.578485 6.800000 -2.900000 34.758294 6.800000 -2.800000 33.958103 6.800000 -2.700000 33.177911 6.800000 -2.600000 32.417720 6.800000 -2.500000 31.677529 6.800000 -2.400000 30.957338 6.800000 -2.300000 30.257147 6.800000 -2.200000 29.576956 6.800000 -2.100000 28.916765 6.800000 -2.000000 28.276574 6.800000 -1.900000 27.656383 6.800000 -1.800000 27.056191 6.800000 -1.700000 26.476000 6.800000 -1.600000 25.915809 6.800000 -1.500000 25.375618 6.800000 -1.400000 24.855427 6.800000 -1.300000 24.355236 6.800000 -1.200000 23.875045 6.800000 -1.100000 23.414854 6.800000 -1.000000 22.974663 6.800000 -0.900000 22.554471 6.800000 -0.800000 22.154280 6.800000 -0.700000 21.774089 6.800000 -0.600000 21.413898 6.800000 -0.500000 21.073707 6.800000 -0.400000 20.753516 6.800000 -0.300000 20.453325 6.800000 -0.200000 20.173134 6.800000 -0.100000 19.912942 6.800000 -0.000000 19.672751 6.800000 0.100000 19.452560 6.800000 0.200000 19.252369 6.800000 0.300000 19.072178 6.800000 0.400000 18.911987 6.800000 0.500000 18.771796 6.800000 0.600000 18.651605 6.800000 0.700000 18.551414 6.800000 0.800000 18.471222 6.800000 0.900000 18.411031 6.800000 1.000000 18.370840 6.800000 1.100000 18.350649 6.800000 1.200000 18.350458 6.800000 1.300000 18.370267 6.800000 1.400000 18.410076 6.800000 1.500000 18.469885 6.800000 1.600000 18.549694 6.800000 1.700000 18.649502 6.800000 1.800000 18.769311 6.800000 1.900000 18.909120 6.800000 2.000000 19.068929 6.800000 2.100000 19.248738 6.800000 2.200000 19.448547 6.800000 2.300000 19.668356 6.800000 2.400000 19.908165 6.800000 2.500000 20.167974 6.800000 2.600000 20.447782 6.800000 2.700000 20.747591 6.800000 2.800000 21.067400 6.800000 2.900000 21.407209 6.800000 3.000000 21.767018 6.800000 3.100000 22.146827 6.800000 3.200000 22.546636 6.800000 3.300000 22.966445 6.800000 3.400000 23.406253 6.800000 3.500000 23.866062 6.800000 3.600000 24.345871 6.800000 3.700000 24.845680 6.800000 3.800000 25.365489 6.800000 3.900000 25.905298 6.800000 4.000000 26.465107 6.800000 4.100000 27.044916 6.800000 4.200000 27.644725 6.800000 4.300000 28.264533 6.800000 4.400000 28.904342 6.800000 4.500000 29.564151 6.800000 4.600000 30.243960 6.800000 4.700000 30.943769 6.800000 4.800000 31.663578 6.800000 4.900000 32.403387 6.800000 5.000000 33.163196 6.800000 5.100000 33.943005 6.800000 5.200000 34.742813 6.800000 5.300000 35.562622 6.800000 5.400000 36.402431 6.800000 5.500000 37.262240 6.800000 5.600000 38.142049 6.800000 5.700000 39.041858 6.800000 5.800000 39.961667 6.800000 5.900000 40.901476 6.800000 6.000000 41.861284 6.800000 6.100000 42.841093 6.800000 6.200000 43.840902 6.800000 6.300000 44.860711 6.800000 6.400000 45.900520 6.800000 6.500000 46.960329 6.800000 6.600000 48.040138 6.800000 6.700000 49.139947 6.800000 6.800000 50.259756 6.800000 6.900000 51.399564 6.800000 7.000000 52.559373 6.800000 7.100000 53.739182 6.800000 7.200000 54.938991 6.800000 7.300000 56.158800 6.800000 7.400000 57.398609 6.800000 7.500000 58.658418 6.800000 7.600000 59.938227 6.800000 7.700000 61.238036 6.800000 7.800000 62.557844 6.800000 7.900000 63.897653 6.800000 8.000000 65.257462 6.800000 8.100000 66.637271 6.800000 8.200000 68.037080 6.800000 8.300000 69.456889 6.800000 8.400000 70.896698 6.800000 8.500000 72.356507 6.800000 8.600000 73.836316 6.800000 8.700000 75.336124 6.800000 8.800000 76.855933 6.800000 8.900000 78.395742 6.800000 9.000000 79.955551 6.800000 9.100000 81.535360 6.800000 9.200000 83.135169 6.800000 9.300000 84.754978 6.800000 9.400000 86.394787 6.800000 9.500000 88.054595 6.800000 9.600000 89.734404 6.800000 9.700000 91.434213 6.800000 9.800000 93.154022 6.800000 9.900000 94.893831 6.800000 10.000000 96.653640 6.800000 10.100000 98.433449 6.800000 10.200000 100.233258 6.800000 10.300000 102.053067 6.800000 10.400000 103.892875 6.800000 10.500000 105.752684 6.800000 10.600000 107.632493 6.800000 10.700000 109.532302 6.800000 10.800000 111.452111 6.800000 10.900000 113.391920 6.800000 11.000000 115.351729 6.800000 11.100000 117.331538 6.800000 11.200000 119.331347 6.800000 11.300000 121.351155 6.800000 11.400000 123.390964 6.800000 11.500000 125.450773 6.800000 11.600000 127.530582 6.800000 11.700000 129.630391 6.800000 11.800000 131.750200 6.800000 11.900000 133.890009 6.800000 12.000000 136.049818 6.800000 12.100000 138.229627 6.800000 12.200000 140.429435 6.800000 12.300000 142.649244 6.800000 12.400000 144.889053 6.800000 12.500000 147.148862 6.800000 12.600000 149.428671 6.800000 12.700000 151.728480 6.800000 12.800000 154.048289 6.800000 12.900000 156.388098 6.800000 13.000000 158.747906 6.800000 13.100000 161.127715 6.800000 13.200000 163.527524 6.800000 13.300000 165.947333 6.800000 13.400000 168.387142 6.800000 13.500000 170.846951 6.800000 13.600000 173.326760 6.800000 13.700000 175.826569 6.800000 13.800000 178.346378 6.800000 13.900000 180.886186 6.800000 14.000000 183.445995 6.800000 14.100000 186.025804 6.800000 14.200000 188.625613 6.800000 14.300000 191.245422 6.800000 14.400000 193.885231 6.800000 14.500000 196.545040 6.800000 14.600000 199.224849 6.800000 14.700000 201.924658 6.800000 14.800000 204.644466 6.800000 14.900000 207.384275 6.800000 15.000000 210.144084 6.900000 -5.000000 55.886573 6.900000 -4.900000 54.662816 6.900000 -4.800000 53.459060 6.900000 -4.700000 52.275303 6.900000 -4.600000 51.111546 6.900000 -4.500000 49.967790 6.900000 -4.400000 48.844033 6.900000 -4.300000 47.740276 6.900000 -4.200000 46.656520 6.900000 -4.100000 45.592763 6.900000 -4.000000 44.549006 6.900000 -3.900000 43.525250 6.900000 -3.800000 42.521493 6.900000 -3.700000 41.537736 6.900000 -3.600000 40.573979 6.900000 -3.500000 39.630223 6.900000 -3.400000 38.706466 6.900000 -3.300000 37.802709 6.900000 -3.200000 36.918953 6.900000 -3.100000 36.055196 6.900000 -3.000000 35.211439 6.900000 -2.900000 34.387683 6.900000 -2.800000 33.583926 6.900000 -2.700000 32.800169 6.900000 -2.600000 32.036413 6.900000 -2.500000 31.292656 6.900000 -2.400000 30.568899 6.900000 -2.300000 29.865143 6.900000 -2.200000 29.181386 6.900000 -2.100000 28.517629 6.900000 -2.000000 27.873873 6.900000 -1.900000 27.250116 6.900000 -1.800000 26.646359 6.900000 -1.700000 26.062603 6.900000 -1.600000 25.498846 6.900000 -1.500000 24.955089 6.900000 -1.400000 24.431332 6.900000 -1.300000 23.927576 6.900000 -1.200000 23.443819 6.900000 -1.100000 22.980062 6.900000 -1.000000 22.536306 6.900000 -0.900000 22.112549 6.900000 -0.800000 21.708792 6.900000 -0.700000 21.325036 6.900000 -0.600000 20.961279 6.900000 -0.500000 20.617522 6.900000 -0.400000 20.293766 6.900000 -0.300000 19.990009 6.900000 -0.200000 19.706252 6.900000 -0.100000 19.442496 6.900000 -0.000000 19.198739 6.900000 0.100000 18.974982 6.900000 0.200000 18.771226 6.900000 0.300000 18.587469 6.900000 0.400000 18.423712 6.900000 0.500000 18.279956 6.900000 0.600000 18.156199 6.900000 0.700000 18.052442 6.900000 0.800000 17.968685 6.900000 0.900000 17.904929 6.900000 1.000000 17.861172 6.900000 1.100000 17.837415 6.900000 1.200000 17.833659 6.900000 1.300000 17.849902 6.900000 1.400000 17.886145 6.900000 1.500000 17.942389 6.900000 1.600000 18.018632 6.900000 1.700000 18.114875 6.900000 1.800000 18.231119 6.900000 1.900000 18.367362 6.900000 2.000000 18.523605 6.900000 2.100000 18.699849 6.900000 2.200000 18.896092 6.900000 2.300000 19.112335 6.900000 2.400000 19.348579 6.900000 2.500000 19.604822 6.900000 2.600000 19.881065 6.900000 2.700000 20.177309 6.900000 2.800000 20.493552 6.900000 2.900000 20.829795 6.900000 3.000000 21.186039 6.900000 3.100000 21.562282 6.900000 3.200000 21.958525 6.900000 3.300000 22.374768 6.900000 3.400000 22.811012 6.900000 3.500000 23.267255 6.900000 3.600000 23.743498 6.900000 3.700000 24.239742 6.900000 3.800000 24.755985 6.900000 3.900000 25.292228 6.900000 4.000000 25.848472 6.900000 4.100000 26.424715 6.900000 4.200000 27.020958 6.900000 4.300000 27.637202 6.900000 4.400000 28.273445 6.900000 4.500000 28.929688 6.900000 4.600000 29.605932 6.900000 4.700000 30.302175 6.900000 4.800000 31.018418 6.900000 4.900000 31.754662 6.900000 5.000000 32.510905 6.900000 5.100000 33.287148 6.900000 5.200000 34.083392 6.900000 5.300000 34.899635 6.900000 5.400000 35.735878 6.900000 5.500000 36.592121 6.900000 5.600000 37.468365 6.900000 5.700000 38.364608 6.900000 5.800000 39.280851 6.900000 5.900000 40.217095 6.900000 6.000000 41.173338 6.900000 6.100000 42.149581 6.900000 6.200000 43.145825 6.900000 6.300000 44.162068 6.900000 6.400000 45.198311 6.900000 6.500000 46.254555 6.900000 6.600000 47.330798 6.900000 6.700000 48.427041 6.900000 6.800000 49.543285 6.900000 6.900000 50.679528 6.900000 7.000000 51.835771 6.900000 7.100000 53.012015 6.900000 7.200000 54.208258 6.900000 7.300000 55.424501 6.900000 7.400000 56.660745 6.900000 7.500000 57.916988 6.900000 7.600000 59.193231 6.900000 7.700000 60.489474 6.900000 7.800000 61.805718 6.900000 7.900000 63.141961 6.900000 8.000000 64.498204 6.900000 8.100000 65.874448 6.900000 8.200000 67.270691 6.900000 8.300000 68.686934 6.900000 8.400000 70.123178 6.900000 8.500000 71.579421 6.900000 8.600000 73.055664 6.900000 8.700000 74.551908 6.900000 8.800000 76.068151 6.900000 8.900000 77.604394 6.900000 9.000000 79.160638 6.900000 9.100000 80.736881 6.900000 9.200000 82.333124 6.900000 9.300000 83.949368 6.900000 9.400000 85.585611 6.900000 9.500000 87.241854 6.900000 9.600000 88.918098 6.900000 9.700000 90.614341 6.900000 9.800000 92.330584 6.900000 9.900000 94.066827 6.900000 10.000000 95.823071 6.900000 10.100000 97.599314 6.900000 10.200000 99.395557 6.900000 10.300000 101.211801 6.900000 10.400000 103.048044 6.900000 10.500000 104.904287 6.900000 10.600000 106.780531 6.900000 10.700000 108.676774 6.900000 10.800000 110.593017 6.900000 10.900000 112.529261 6.900000 11.000000 114.485504 6.900000 11.100000 116.461747 6.900000 11.200000 118.457991 6.900000 11.300000 120.474234 6.900000 11.400000 122.510477 6.900000 11.500000 124.566721 6.900000 11.600000 126.642964 6.900000 11.700000 128.739207 6.900000 11.800000 130.855451 6.900000 11.900000 132.991694 6.900000 12.000000 135.147937 6.900000 12.100000 137.324180 6.900000 12.200000 139.520424 6.900000 12.300000 141.736667 6.900000 12.400000 143.972910 6.900000 12.500000 146.229154 6.900000 12.600000 148.505397 6.900000 12.700000 150.801640 6.900000 12.800000 153.117884 6.900000 12.900000 155.454127 6.900000 13.000000 157.810370 6.900000 13.100000 160.186614 6.900000 13.200000 162.582857 6.900000 13.300000 164.999100 6.900000 13.400000 167.435344 6.900000 13.500000 169.891587 6.900000 13.600000 172.367830 6.900000 13.700000 174.864074 6.900000 13.800000 177.380317 6.900000 13.900000 179.916560 6.900000 14.000000 182.472804 6.900000 14.100000 185.049047 6.900000 14.200000 187.645290 6.900000 14.300000 190.261534 6.900000 14.400000 192.897777 6.900000 14.500000 195.554020 6.900000 14.600000 198.230263 6.900000 14.700000 200.926507 6.900000 14.800000 203.642750 6.900000 14.900000 206.378993 6.900000 15.000000 209.135237 7.000000 -5.000000 55.545188 7.000000 -4.900000 54.317349 7.000000 -4.800000 53.109510 7.000000 -4.700000 51.921671 7.000000 -4.600000 50.753832 7.000000 -4.500000 49.605993 7.000000 -4.400000 48.478154 7.000000 -4.300000 47.370315 7.000000 -4.200000 46.282476 7.000000 -4.100000 45.214637 7.000000 -4.000000 44.166798 7.000000 -3.900000 43.138959 7.000000 -3.800000 42.131120 7.000000 -3.700000 41.143281 7.000000 -3.600000 40.175442 7.000000 -3.500000 39.227603 7.000000 -3.400000 38.299764 7.000000 -3.300000 37.391926 7.000000 -3.200000 36.504087 7.000000 -3.100000 35.636248 7.000000 -3.000000 34.788409 7.000000 -2.900000 33.960570 7.000000 -2.800000 33.152731 7.000000 -2.700000 32.364892 7.000000 -2.600000 31.597053 7.000000 -2.500000 30.849214 7.000000 -2.400000 30.121375 7.000000 -2.300000 29.413536 7.000000 -2.200000 28.725697 7.000000 -2.100000 28.057858 7.000000 -2.000000 27.410019 7.000000 -1.900000 26.782180 7.000000 -1.800000 26.174341 7.000000 -1.700000 25.586502 7.000000 -1.600000 25.018663 7.000000 -1.500000 24.470824 7.000000 -1.400000 23.942985 7.000000 -1.300000 23.435146 7.000000 -1.200000 22.947307 7.000000 -1.100000 22.479468 7.000000 -1.000000 22.031629 7.000000 -0.900000 21.603790 7.000000 -0.800000 21.195951 7.000000 -0.700000 20.808112 7.000000 -0.600000 20.440273 7.000000 -0.500000 20.092434 7.000000 -0.400000 19.764595 7.000000 -0.300000 19.456756 7.000000 -0.200000 19.168917 7.000000 -0.100000 18.901078 7.000000 -0.000000 18.653239 7.000000 0.100000 18.425400 7.000000 0.200000 18.217561 7.000000 0.300000 18.029722 7.000000 0.400000 17.861883 7.000000 0.500000 17.714044 7.000000 0.600000 17.586205 7.000000 0.700000 17.478366 7.000000 0.800000 17.390527 7.000000 0.900000 17.322688 7.000000 1.000000 17.274849 7.000000 1.100000 17.247010 7.000000 1.200000 17.239171 7.000000 1.300000 17.251332 7.000000 1.400000 17.283493 7.000000 1.500000 17.335654 7.000000 1.600000 17.407815 7.000000 1.700000 17.499976 7.000000 1.800000 17.612137 7.000000 1.900000 17.744298 7.000000 2.000000 17.896459 7.000000 2.100000 18.068620 7.000000 2.200000 18.260781 7.000000 2.300000 18.472942 7.000000 2.400000 18.705103 7.000000 2.500000 18.957264 7.000000 2.600000 19.229425 7.000000 2.700000 19.521586 7.000000 2.800000 19.833747 7.000000 2.900000 20.165908 7.000000 3.000000 20.518069 7.000000 3.100000 20.890230 7.000000 3.200000 21.282391 7.000000 3.300000 21.694552 7.000000 3.400000 22.126713 7.000000 3.500000 22.578874 7.000000 3.600000 23.051035 7.000000 3.700000 23.543196 7.000000 3.800000 24.055357 7.000000 3.900000 24.587518 7.000000 4.000000 25.139679 7.000000 4.100000 25.711841 7.000000 4.200000 26.304002 7.000000 4.300000 26.916163 7.000000 4.400000 27.548324 7.000000 4.500000 28.200485 7.000000 4.600000 28.872646 7.000000 4.700000 29.564807 7.000000 4.800000 30.276968 7.000000 4.900000 31.009129 7.000000 5.000000 31.761290 7.000000 5.100000 32.533451 7.000000 5.200000 33.325612 7.000000 5.300000 34.137773 7.000000 5.400000 34.969934 7.000000 5.500000 35.822095 7.000000 5.600000 36.694256 7.000000 5.700000 37.586417 7.000000 5.800000 38.498578 7.000000 5.900000 39.430739 7.000000 6.000000 40.382900 7.000000 6.100000 41.355061 7.000000 6.200000 42.347222 7.000000 6.300000 43.359383 7.000000 6.400000 44.391544 7.000000 6.500000 45.443705 7.000000 6.600000 46.515866 7.000000 6.700000 47.608027 7.000000 6.800000 48.720188 7.000000 6.900000 49.852349 7.000000 7.000000 51.004510 7.000000 7.100000 52.176671 7.000000 7.200000 53.368832 7.000000 7.300000 54.580993 7.000000 7.400000 55.813154 7.000000 7.500000 57.065315 7.000000 7.600000 58.337476 7.000000 7.700000 59.629637 7.000000 7.800000 60.941798 7.000000 7.900000 62.273959 7.000000 8.000000 63.626120 7.000000 8.100000 64.998281 7.000000 8.200000 66.390442 7.000000 8.300000 67.802603 7.000000 8.400000 69.234764 7.000000 8.500000 70.686925 7.000000 8.600000 72.159086 7.000000 8.700000 73.651247 7.000000 8.800000 75.163408 7.000000 8.900000 76.695569 7.000000 9.000000 78.247730 7.000000 9.100000 79.819891 7.000000 9.200000 81.412052 7.000000 9.300000 83.024213 7.000000 9.400000 84.656374 7.000000 9.500000 86.308535 7.000000 9.600000 87.980696 7.000000 9.700000 89.672857 7.000000 9.800000 91.385018 7.000000 9.900000 93.117179 7.000000 10.000000 94.869340 7.000000 10.100000 96.641501 7.000000 10.200000 98.433662 7.000000 10.300000 100.245823 7.000000 10.400000 102.077984 7.000000 10.500000 103.930145 7.000000 10.600000 105.802306 7.000000 10.700000 107.694467 7.000000 10.800000 109.606628 7.000000 10.900000 111.538789 7.000000 11.000000 113.490950 7.000000 11.100000 115.463111 7.000000 11.200000 117.455272 7.000000 11.300000 119.467433 7.000000 11.400000 121.499595 7.000000 11.500000 123.551756 7.000000 11.600000 125.623917 7.000000 11.700000 127.716078 7.000000 11.800000 129.828239 7.000000 11.900000 131.960400 7.000000 12.000000 134.112561 7.000000 12.100000 136.284722 7.000000 12.200000 138.476883 7.000000 12.300000 140.689044 7.000000 12.400000 142.921205 7.000000 12.500000 145.173366 7.000000 12.600000 147.445527 7.000000 12.700000 149.737688 7.000000 12.800000 152.049849 7.000000 12.900000 154.382010 7.000000 13.000000 156.734171 7.000000 13.100000 159.106332 7.000000 13.200000 161.498493 7.000000 13.300000 163.910654 7.000000 13.400000 166.342815 7.000000 13.500000 168.794976 7.000000 13.600000 171.267137 7.000000 13.700000 173.759298 7.000000 13.800000 176.271459 7.000000 13.900000 178.803620 7.000000 14.000000 181.355781 7.000000 14.100000 183.927942 7.000000 14.200000 186.520103 7.000000 14.300000 189.132264 7.000000 14.400000 191.764425 7.000000 14.500000 194.416586 7.000000 14.600000 197.088747 7.000000 14.700000 199.780908 7.000000 14.800000 202.493069 7.000000 14.900000 205.225230 7.000000 15.000000 207.977391 7.100000 -5.000000 55.164401 7.100000 -4.900000 53.931963 7.100000 -4.800000 52.719525 7.100000 -4.700000 51.527087 7.100000 -4.600000 50.354648 7.100000 -4.500000 49.202210 7.100000 -4.400000 48.069772 7.100000 -4.300000 46.957334 7.100000 -4.200000 45.864896 7.100000 -4.100000 44.792458 7.100000 -4.000000 43.740020 7.100000 -3.900000 42.707582 7.100000 -3.800000 41.695144 7.100000 -3.700000 40.702706 7.100000 -3.600000 39.730268 7.100000 -3.500000 38.777830 7.100000 -3.400000 37.845392 7.100000 -3.300000 36.932954 7.100000 -3.200000 36.040516 7.100000 -3.100000 35.168078 7.100000 -3.000000 34.315640 7.100000 -2.900000 33.483202 7.100000 -2.800000 32.670764 7.100000 -2.700000 31.878326 7.100000 -2.600000 31.105888 7.100000 -2.500000 30.353450 7.100000 -2.400000 29.621012 7.100000 -2.300000 28.908574 7.100000 -2.200000 28.216136 7.100000 -2.100000 27.543698 7.100000 -2.000000 26.891260 7.100000 -1.900000 26.258822 7.100000 -1.800000 25.646384 7.100000 -1.700000 25.053946 7.100000 -1.600000 24.481508 7.100000 -1.500000 23.929070 7.100000 -1.400000 23.396632 7.100000 -1.300000 22.884194 7.100000 -1.200000 22.391756 7.100000 -1.100000 21.919317 7.100000 -1.000000 21.466879 7.100000 -0.900000 21.034441 7.100000 -0.800000 20.622003 7.100000 -0.700000 20.229565 7.100000 -0.600000 19.857127 7.100000 -0.500000 19.504689 7.100000 -0.400000 19.172251 7.100000 -0.300000 18.859813 7.100000 -0.200000 18.567375 7.100000 -0.100000 18.294937 7.100000 -0.000000 18.042499 7.100000 0.100000 17.810061 7.100000 0.200000 17.597623 7.100000 0.300000 17.405185 7.100000 0.400000 17.232747 7.100000 0.500000 17.080309 7.100000 0.600000 16.947871 7.100000 0.700000 16.835433 7.100000 0.800000 16.742995 7.100000 0.900000 16.670557 7.100000 1.000000 16.618119 7.100000 1.100000 16.585681 7.100000 1.200000 16.573243 7.100000 1.300000 16.580805 7.100000 1.400000 16.608367 7.100000 1.500000 16.655929 7.100000 1.600000 16.723491 7.100000 1.700000 16.811053 7.100000 1.800000 16.918615 7.100000 1.900000 17.046177 7.100000 2.000000 17.193739 7.100000 2.100000 17.361301 7.100000 2.200000 17.548863 7.100000 2.300000 17.756424 7.100000 2.400000 17.983986 7.100000 2.500000 18.231548 7.100000 2.600000 18.499110 7.100000 2.700000 18.786672 7.100000 2.800000 19.094234 7.100000 2.900000 19.421796 7.100000 3.000000 19.769358 7.100000 3.100000 20.136920 7.100000 3.200000 20.524482 7.100000 3.300000 20.932044 7.100000 3.400000 21.359606 7.100000 3.500000 21.807168 7.100000 3.600000 22.274730 7.100000 3.700000 22.762292 7.100000 3.800000 23.269854 7.100000 3.900000 23.797416 7.100000 4.000000 24.344978 7.100000 4.100000 24.912540 7.100000 4.200000 25.500102 7.100000 4.300000 26.107664 7.100000 4.400000 26.735226 7.100000 4.500000 27.382788 7.100000 4.600000 28.050350 7.100000 4.700000 28.737912 7.100000 4.800000 29.445474 7.100000 4.900000 30.173036 7.100000 5.000000 30.920598 7.100000 5.100000 31.688160 7.100000 5.200000 32.475722 7.100000 5.300000 33.283284 7.100000 5.400000 34.110846 7.100000 5.500000 34.958408 7.100000 5.600000 35.825970 7.100000 5.700000 36.713531 7.100000 5.800000 37.621093 7.100000 5.900000 38.548655 7.100000 6.000000 39.496217 7.100000 6.100000 40.463779 7.100000 6.200000 41.451341 7.100000 6.300000 42.458903 7.100000 6.400000 43.486465 7.100000 6.500000 44.534027 7.100000 6.600000 45.601589 7.100000 6.700000 46.689151 7.100000 6.800000 47.796713 7.100000 6.900000 48.924275 7.100000 7.000000 50.071837 7.100000 7.100000 51.239399 7.100000 7.200000 52.426961 7.100000 7.300000 53.634523 7.100000 7.400000 54.862085 7.100000 7.500000 56.109647 7.100000 7.600000 57.377209 7.100000 7.700000 58.664771 7.100000 7.800000 59.972333 7.100000 7.900000 61.299895 7.100000 8.000000 62.647457 7.100000 8.100000 64.015019 7.100000 8.200000 65.402581 7.100000 8.300000 66.810143 7.100000 8.400000 68.237705 7.100000 8.500000 69.685267 7.100000 8.600000 71.152829 7.100000 8.700000 72.640391 7.100000 8.800000 74.147953 7.100000 8.900000 75.675515 7.100000 9.000000 77.223077 7.100000 9.100000 78.790638 7.100000 9.200000 80.378200 7.100000 9.300000 81.985762 7.100000 9.400000 83.613324 7.100000 9.500000 85.260886 7.100000 9.600000 86.928448 7.100000 9.700000 88.616010 7.100000 9.800000 90.323572 7.100000 9.900000 92.051134 7.100000 10.000000 93.798696 7.100000 10.100000 95.566258 7.100000 10.200000 97.353820 7.100000 10.300000 99.161382 7.100000 10.400000 100.988944 7.100000 10.500000 102.836506 7.100000 10.600000 104.704068 7.100000 10.700000 106.591630 7.100000 10.800000 108.499192 7.100000 10.900000 110.426754 7.100000 11.000000 112.374316 7.100000 11.100000 114.341878 7.100000 11.200000 116.329440 7.100000 11.300000 118.337002 7.100000 11.400000 120.364564 7.100000 11.500000 122.412126 7.100000 11.600000 124.479688 7.100000 11.700000 126.567250 7.100000 11.800000 128.674812 7.100000 11.900000 130.802374 7.100000 12.000000 132.949936 7.100000 12.100000 135.117498 7.100000 12.200000 137.305060 7.100000 12.300000 139.512622 7.100000 12.400000 141.740184 7.100000 12.500000 143.987745 7.100000 12.600000 146.255307 7.100000 12.700000 148.542869 7.100000 12.800000 150.850431 7.100000 12.900000 153.177993 7.100000 13.000000 155.525555 7.100000 13.100000 157.893117 7.100000 13.200000 160.280679 7.100000 13.300000 162.688241 7.100000 13.400000 165.115803 7.100000 13.500000 167.563365 7.100000 13.600000 170.030927 7.100000 13.700000 172.518489 7.100000 13.800000 175.026051 7.100000 13.900000 177.553613 7.100000 14.000000 180.101175 7.100000 14.100000 182.668737 7.100000 14.200000 185.256299 7.100000 14.300000 187.863861 7.100000 14.400000 190.491423 7.100000 14.500000 193.138985 7.100000 14.600000 195.806547 7.100000 14.700000 198.494109 7.100000 14.800000 201.201671 7.100000 14.900000 203.929233 7.100000 15.000000 206.676795 7.200000 -5.000000 54.751221 7.200000 -4.900000 53.513667 7.200000 -4.800000 52.296113 7.200000 -4.700000 51.098559 7.200000 -4.600000 49.921005 7.200000 -4.500000 48.763452 7.200000 -4.400000 47.625898 7.200000 -4.300000 46.508344 7.200000 -4.200000 45.410790 7.200000 -4.100000 44.333236 7.200000 -4.000000 43.275682 7.200000 -3.900000 42.238129 7.200000 -3.800000 41.220575 7.200000 -3.700000 40.223021 7.200000 -3.600000 39.245467 7.200000 -3.500000 38.287913 7.200000 -3.400000 37.350360 7.200000 -3.300000 36.432806 7.200000 -3.200000 35.535252 7.200000 -3.100000 34.657698 7.200000 -3.000000 33.800144 7.200000 -2.900000 32.962591 7.200000 -2.800000 32.145037 7.200000 -2.700000 31.347483 7.200000 -2.600000 30.569929 7.200000 -2.500000 29.812375 7.200000 -2.400000 29.074822 7.200000 -2.300000 28.357268 7.200000 -2.200000 27.659714 7.200000 -2.100000 26.982160 7.200000 -2.000000 26.324606 7.200000 -1.900000 25.687052 7.200000 -1.800000 25.069499 7.200000 -1.700000 24.471945 7.200000 -1.600000 23.894391 7.200000 -1.500000 23.336837 7.200000 -1.400000 22.799283 7.200000 -1.300000 22.281730 7.200000 -1.200000 21.784176 7.200000 -1.100000 21.306622 7.200000 -1.000000 20.849068 7.200000 -0.900000 20.411514 7.200000 -0.800000 19.993961 7.200000 -0.700000 19.596407 7.200000 -0.600000 19.218853 7.200000 -0.500000 18.861299 7.200000 -0.400000 18.523745 7.200000 -0.300000 18.206192 7.200000 -0.200000 17.908638 7.200000 -0.100000 17.631084 7.200000 -0.000000 17.373530 7.200000 0.100000 17.135976 7.200000 0.200000 16.918422 7.200000 0.300000 16.720869 7.200000 0.400000 16.543315 7.200000 0.500000 16.385761 7.200000 0.600000 16.248207 7.200000 0.700000 16.130653 7.200000 0.800000 16.033100 7.200000 0.900000 15.955546 7.200000 1.000000 15.897992 7.200000 1.100000 15.860438 7.200000 1.200000 15.842884 7.200000 1.300000 15.845331 7.200000 1.400000 15.867777 7.200000 1.500000 15.910223 7.200000 1.600000 15.972669 7.200000 1.700000 16.055115 7.200000 1.800000 16.157561 7.200000 1.900000 16.280008 7.200000 2.000000 16.422454 7.200000 2.100000 16.584900 7.200000 2.200000 16.767346 7.200000 2.300000 16.969792 7.200000 2.400000 17.192239 7.200000 2.500000 17.434685 7.200000 2.600000 17.697131 7.200000 2.700000 17.979577 7.200000 2.800000 18.282023 7.200000 2.900000 18.604470 7.200000 3.000000 18.946916 7.200000 3.100000 19.309362 7.200000 3.200000 19.691808 7.200000 3.300000 20.094254 7.200000 3.400000 20.516701 7.200000 3.500000 20.959147 7.200000 3.600000 21.421593 7.200000 3.700000 21.904039 7.200000 3.800000 22.406485 7.200000 3.900000 22.928931 7.200000 4.000000 23.471378 7.200000 4.100000 24.033824 7.200000 4.200000 24.616270 7.200000 4.300000 25.218716 7.200000 4.400000 25.841162 7.200000 4.500000 26.483609 7.200000 4.600000 27.146055 7.200000 4.700000 27.828501 7.200000 4.800000 28.530947 7.200000 4.900000 29.253393 7.200000 5.000000 29.995840 7.200000 5.100000 30.758286 7.200000 5.200000 31.540732 7.200000 5.300000 32.343178 7.200000 5.400000 33.165624 7.200000 5.500000 34.008071 7.200000 5.600000 34.870517 7.200000 5.700000 35.752963 7.200000 5.800000 36.655409 7.200000 5.900000 37.577855 7.200000 6.000000 38.520301 7.200000 6.100000 39.482748 7.200000 6.200000 40.465194 7.200000 6.300000 41.467640 7.200000 6.400000 42.490086 7.200000 6.500000 43.532532 7.200000 6.600000 44.594979 7.200000 6.700000 45.677425 7.200000 6.800000 46.779871 7.200000 6.900000 47.902317 7.200000 7.000000 49.044763 7.200000 7.100000 50.207210 7.200000 7.200000 51.389656 7.200000 7.300000 52.592102 7.200000 7.400000 53.814548 7.200000 7.500000 55.056994 7.200000 7.600000 56.319440 7.200000 7.700000 57.601887 7.200000 7.800000 58.904333 7.200000 7.900000 60.226779 7.200000 8.000000 61.569225 7.200000 8.100000 62.931671 7.200000 8.200000 64.314118 7.200000 8.300000 65.716564 7.200000 8.400000 67.139010 7.200000 8.500000 68.581456 7.200000 8.600000 70.043902 7.200000 8.700000 71.526349 7.200000 8.800000 73.028795 7.200000 8.900000 74.551241 7.200000 9.000000 76.093687 7.200000 9.100000 77.656133 7.200000 9.200000 79.238580 7.200000 9.300000 80.841026 7.200000 9.400000 82.463472 7.200000 9.500000 84.105918 7.200000 9.600000 85.768364 7.200000 9.700000 87.450810 7.200000 9.800000 89.153257 7.200000 9.900000 90.875703 7.200000 10.000000 92.618149 7.200000 10.100000 94.380595 7.200000 10.200000 96.163041 7.200000 10.300000 97.965488 7.200000 10.400000 99.787934 7.200000 10.500000 101.630380 7.200000 10.600000 103.492826 7.200000 10.700000 105.375272 7.200000 10.800000 107.277719 7.200000 10.900000 109.200165 7.200000 11.000000 111.142611 7.200000 11.100000 113.105057 7.200000 11.200000 115.087503 7.200000 11.300000 117.089950 7.200000 11.400000 119.112396 7.200000 11.500000 121.154842 7.200000 11.600000 123.217288 7.200000 11.700000 125.299734 7.200000 11.800000 127.402180 7.200000 11.900000 129.524627 7.200000 12.000000 131.667073 7.200000 12.100000 133.829519 7.200000 12.200000 136.011965 7.200000 12.300000 138.214411 7.200000 12.400000 140.436858 7.200000 12.500000 142.679304 7.200000 12.600000 144.941750 7.200000 12.700000 147.224196 7.200000 12.800000 149.526642 7.200000 12.900000 151.849089 7.200000 13.000000 154.191535 7.200000 13.100000 156.553981 7.200000 13.200000 158.936427 7.200000 13.300000 161.338873 7.200000 13.400000 163.761319 7.200000 13.500000 166.203766 7.200000 13.600000 168.666212 7.200000 13.700000 171.148658 7.200000 13.800000 173.651104 7.200000 13.900000 176.173550 7.200000 14.000000 178.715997 7.200000 14.100000 181.278443 7.200000 14.200000 183.860889 7.200000 14.300000 186.463335 7.200000 14.400000 189.085781 7.200000 14.500000 191.728228 7.200000 14.600000 194.390674 7.200000 14.700000 197.073120 7.200000 14.800000 199.775566 7.200000 14.900000 202.498012 7.200000 15.000000 205.240459 7.300000 -5.000000 54.313355 7.300000 -4.900000 53.070169 7.300000 -4.800000 51.846982 7.300000 -4.700000 50.643796 7.300000 -4.600000 49.460610 7.300000 -4.500000 48.297423 7.300000 -4.400000 47.154237 7.300000 -4.300000 46.031051 7.300000 -4.200000 44.927864 7.300000 -4.100000 43.844678 7.300000 -4.000000 42.781492 7.300000 -3.900000 41.738305 7.300000 -3.800000 40.715119 7.300000 -3.700000 39.711933 7.300000 -3.600000 38.728746 7.300000 -3.500000 37.765560 7.300000 -3.400000 36.822374 7.300000 -3.300000 35.899187 7.300000 -3.200000 34.996001 7.300000 -3.100000 34.112815 7.300000 -3.000000 33.249628 7.300000 -2.900000 32.406442 7.300000 -2.800000 31.583256 7.300000 -2.700000 30.780069 7.300000 -2.600000 29.996883 7.300000 -2.500000 29.233697 7.300000 -2.400000 28.490510 7.300000 -2.300000 27.767324 7.300000 -2.200000 27.064138 7.300000 -2.100000 26.380951 7.300000 -2.000000 25.717765 7.300000 -1.900000 25.074579 7.300000 -1.800000 24.451392 7.300000 -1.700000 23.848206 7.300000 -1.600000 23.265020 7.300000 -1.500000 22.701833 7.300000 -1.400000 22.158647 7.300000 -1.300000 21.635461 7.300000 -1.200000 21.132274 7.300000 -1.100000 20.649088 7.300000 -1.000000 20.185902 7.300000 -0.900000 19.742715 7.300000 -0.800000 19.319529 7.300000 -0.700000 18.916343 7.300000 -0.600000 18.533156 7.300000 -0.500000 18.169970 7.300000 -0.400000 17.826784 7.300000 -0.300000 17.503598 7.300000 -0.200000 17.200411 7.300000 -0.100000 16.917225 7.300000 -0.000000 16.654039 7.300000 0.100000 16.410852 7.300000 0.200000 16.187666 7.300000 0.300000 15.984480 7.300000 0.400000 15.801293 7.300000 0.500000 15.638107 7.300000 0.600000 15.494921 7.300000 0.700000 15.371734 7.300000 0.800000 15.268548 7.300000 0.900000 15.185362 7.300000 1.000000 15.122175 7.300000 1.100000 15.078989 7.300000 1.200000 15.055803 7.300000 1.300000 15.052616 7.300000 1.400000 15.069430 7.300000 1.500000 15.106244 7.300000 1.600000 15.163057 7.300000 1.700000 15.239871 7.300000 1.800000 15.336685 7.300000 1.900000 15.453498 7.300000 2.000000 15.590312 7.300000 2.100000 15.747126 7.300000 2.200000 15.923939 7.300000 2.300000 16.120753 7.300000 2.400000 16.337567 7.300000 2.500000 16.574380 7.300000 2.600000 16.831194 7.300000 2.700000 17.108008 7.300000 2.800000 17.404821 7.300000 2.900000 17.721635 7.300000 3.000000 18.058449 7.300000 3.100000 18.415262 7.300000 3.200000 18.792076 7.300000 3.300000 19.188890 7.300000 3.400000 19.605703 7.300000 3.500000 20.042517 7.300000 3.600000 20.499331 7.300000 3.700000 20.976144 7.300000 3.800000 21.472958 7.300000 3.900000 21.989772 7.300000 4.000000 22.526585 7.300000 4.100000 23.083399 7.300000 4.200000 23.660213 7.300000 4.300000 24.257026 7.300000 4.400000 24.873840 7.300000 4.500000 25.510654 7.300000 4.600000 26.167467 7.300000 4.700000 26.844281 7.300000 4.800000 27.541095 7.300000 4.900000 28.257908 7.300000 5.000000 28.994722 7.300000 5.100000 29.751536 7.300000 5.200000 30.528349 7.300000 5.300000 31.325163 7.300000 5.400000 32.141977 7.300000 5.500000 32.978790 7.300000 5.600000 33.835604 7.300000 5.700000 34.712418 7.300000 5.800000 35.609231 7.300000 5.900000 36.526045 7.300000 6.000000 37.462859 7.300000 6.100000 38.419672 7.300000 6.200000 39.396486 7.300000 6.300000 40.393300 7.300000 6.400000 41.410113 7.300000 6.500000 42.446927 7.300000 6.600000 43.503741 7.300000 6.700000 44.580554 7.300000 6.800000 45.677368 7.300000 6.900000 46.794182 7.300000 7.000000 47.930995 7.300000 7.100000 49.087809 7.300000 7.200000 50.264623 7.300000 7.300000 51.461436 7.300000 7.400000 52.678250 7.300000 7.500000 53.915064 7.300000 7.600000 55.171877 7.300000 7.700000 56.448691 7.300000 7.800000 57.745505 7.300000 7.900000 59.062318 7.300000 8.000000 60.399132 7.300000 8.100000 61.755946 7.300000 8.200000 63.132760 7.300000 8.300000 64.529573 7.300000 8.400000 65.946387 7.300000 8.500000 67.383201 7.300000 8.600000 68.840014 7.300000 8.700000 70.316828 7.300000 8.800000 71.813642 7.300000 8.900000 73.330455 7.300000 9.000000 74.867269 7.300000 9.100000 76.424083 7.300000 9.200000 78.000896 7.300000 9.300000 79.597710 7.300000 9.400000 81.214524 7.300000 9.500000 82.851337 7.300000 9.600000 84.508151 7.300000 9.700000 86.184965 7.300000 9.800000 87.881778 7.300000 9.900000 89.598592 7.300000 10.000000 91.335406 7.300000 10.100000 93.092219 7.300000 10.200000 94.869033 7.300000 10.300000 96.665847 7.300000 10.400000 98.482660 7.300000 10.500000 100.319474 7.300000 10.600000 102.176288 7.300000 10.700000 104.053101 7.300000 10.800000 105.949915 7.300000 10.900000 107.866729 7.300000 11.000000 109.803542 7.300000 11.100000 111.760356 7.300000 11.200000 113.737170 7.300000 11.300000 115.733983 7.300000 11.400000 117.750797 7.300000 11.500000 119.787611 7.300000 11.600000 121.844424 7.300000 11.700000 123.921238 7.300000 11.800000 126.018052 7.300000 11.900000 128.134865 7.300000 12.000000 130.271679 7.300000 12.100000 132.428493 7.300000 12.200000 134.605306 7.300000 12.300000 136.802120 7.300000 12.400000 139.018934 7.300000 12.500000 141.255747 7.300000 12.600000 143.512561 7.300000 12.700000 145.789375 7.300000 12.800000 148.086188 7.300000 12.900000 150.403002 7.300000 13.000000 152.739816 7.300000 13.100000 155.096629 7.300000 13.200000 157.473443 7.300000 13.300000 159.870257 7.300000 13.400000 162.287070 7.300000 13.500000 164.723884 7.300000 13.600000 167.180698 7.300000 13.700000 169.657511 7.300000 13.800000 172.154325 7.300000 13.900000 174.671139 7.300000 14.000000 177.207952 7.300000 14.100000 179.764766 7.300000 14.200000 182.341580 7.300000 14.300000 184.938393 7.300000 14.400000 187.555207 7.300000 14.500000 190.192021 7.300000 14.600000 192.848834 7.300000 14.700000 195.525648 7.300000 14.800000 198.222462 7.300000 14.900000 200.939275 7.300000 15.000000 203.676089 7.400000 -5.000000 53.859134 7.400000 -4.900000 52.609798 7.400000 -4.800000 51.380463 7.400000 -4.700000 50.171127 7.400000 -4.600000 48.981791 7.400000 -4.500000 47.812456 7.400000 -4.400000 46.663120 7.400000 -4.300000 45.533785 7.400000 -4.200000 44.424449 7.400000 -4.100000 43.335114 7.400000 -4.000000 42.265778 7.400000 -3.900000 41.216442 7.400000 -3.800000 40.187107 7.400000 -3.700000 39.177771 7.400000 -3.600000 38.188436 7.400000 -3.500000 37.219100 7.400000 -3.400000 36.269764 7.400000 -3.300000 35.340429 7.400000 -3.200000 34.431093 7.400000 -3.100000 33.541758 7.400000 -3.000000 32.672422 7.400000 -2.900000 31.823087 7.400000 -2.800000 30.993751 7.400000 -2.700000 30.184415 7.400000 -2.600000 29.395080 7.400000 -2.500000 28.625744 7.400000 -2.400000 27.876409 7.400000 -2.300000 27.147073 7.400000 -2.200000 26.437737 7.400000 -2.100000 25.748402 7.400000 -2.000000 25.079066 7.400000 -1.900000 24.429731 7.400000 -1.800000 23.800395 7.400000 -1.700000 23.191059 7.400000 -1.600000 22.601724 7.400000 -1.500000 22.032388 7.400000 -1.400000 21.483053 7.400000 -1.300000 20.953717 7.400000 -1.200000 20.444382 7.400000 -1.100000 19.955046 7.400000 -1.000000 19.485710 7.400000 -0.900000 19.036375 7.400000 -0.800000 18.607039 7.400000 -0.700000 18.197704 7.400000 -0.600000 17.808368 7.400000 -0.500000 17.439032 7.400000 -0.400000 17.089697 7.400000 -0.300000 16.760361 7.400000 -0.200000 16.451026 7.400000 -0.100000 16.161690 7.400000 -0.000000 15.892354 7.400000 0.100000 15.643019 7.400000 0.200000 15.413683 7.400000 0.300000 15.204348 7.400000 0.400000 15.015012 7.400000 0.500000 14.845677 7.400000 0.600000 14.696341 7.400000 0.700000 14.567005 7.400000 0.800000 14.457670 7.400000 0.900000 14.368334 7.400000 1.000000 14.298999 7.400000 1.100000 14.249663 7.400000 1.200000 14.220327 7.400000 1.300000 14.210992 7.400000 1.400000 14.221656 7.400000 1.500000 14.252321 7.400000 1.600000 14.302985 7.400000 1.700000 14.373650 7.400000 1.800000 14.464314 7.400000 1.900000 14.574978 7.400000 2.000000 14.705643 7.400000 2.100000 14.856307 7.400000 2.200000 15.026972 7.400000 2.300000 15.217636 7.400000 2.400000 15.428300 7.400000 2.500000 15.658965 7.400000 2.600000 15.909629 7.400000 2.700000 16.180294 7.400000 2.800000 16.470958 7.400000 2.900000 16.781622 7.400000 3.000000 17.112287 7.400000 3.100000 17.462951 7.400000 3.200000 17.833616 7.400000 3.300000 18.224280 7.400000 3.400000 18.634945 7.400000 3.500000 19.065609 7.400000 3.600000 19.516273 7.400000 3.700000 19.986938 7.400000 3.800000 20.477602 7.400000 3.900000 20.988267 7.400000 4.000000 21.518931 7.400000 4.100000 22.069595 7.400000 4.200000 22.640260 7.400000 4.300000 23.230924 7.400000 4.400000 23.841589 7.400000 4.500000 24.472253 7.400000 4.600000 25.122918 7.400000 4.700000 25.793582 7.400000 4.800000 26.484246 7.400000 4.900000 27.194911 7.400000 5.000000 27.925575 7.400000 5.100000 28.676240 7.400000 5.200000 29.446904 7.400000 5.300000 30.237568 7.400000 5.400000 31.048233 7.400000 5.500000 31.878897 7.400000 5.600000 32.729562 7.400000 5.700000 33.600226 7.400000 5.800000 34.490890 7.400000 5.900000 35.401555 7.400000 6.000000 36.332219 7.400000 6.100000 37.282884 7.400000 6.200000 38.253548 7.400000 6.300000 39.244213 7.400000 6.400000 40.254877 7.400000 6.500000 41.285541 7.400000 6.600000 42.336206 7.400000 6.700000 43.406870 7.400000 6.800000 44.497535 7.400000 6.900000 45.608199 7.400000 7.000000 46.738863 7.400000 7.100000 47.889528 7.400000 7.200000 49.060192 7.400000 7.300000 50.250857 7.400000 7.400000 51.461521 7.400000 7.500000 52.692186 7.400000 7.600000 53.942850 7.400000 7.700000 55.213514 7.400000 7.800000 56.504179 7.400000 7.900000 57.814843 7.400000 8.000000 59.145508 7.400000 8.100000 60.496172 7.400000 8.200000 61.866836 7.400000 8.300000 63.257501 7.400000 8.400000 64.668165 7.400000 8.500000 66.098830 7.400000 8.600000 67.549494 7.400000 8.700000 69.020158 7.400000 8.800000 70.510823 7.400000 8.900000 72.021487 7.400000 9.000000 73.552152 7.400000 9.100000 75.102816 7.400000 9.200000 76.673481 7.400000 9.300000 78.264145 7.400000 9.400000 79.874809 7.400000 9.500000 81.505474 7.400000 9.600000 83.156138 7.400000 9.700000 84.826803 7.400000 9.800000 86.517467 7.400000 9.900000 88.228131 7.400000 10.000000 89.958796 7.400000 10.100000 91.709460 7.400000 10.200000 93.480125 7.400000 10.300000 95.270789 7.400000 10.400000 97.081454 7.400000 10.500000 98.912118 7.400000 10.600000 100.762782 7.400000 10.700000 102.633447 7.400000 10.800000 104.524111 7.400000 10.900000 106.434776 7.400000 11.000000 108.365440 7.400000 11.100000 110.316104 7.400000 11.200000 112.286769 7.400000 11.300000 114.277433 7.400000 11.400000 116.288098 7.400000 11.500000 118.318762 7.400000 11.600000 120.369426 7.400000 11.700000 122.440091 7.400000 11.800000 124.530755 7.400000 11.900000 126.641420 7.400000 12.000000 128.772084 7.400000 12.100000 130.922749 7.400000 12.200000 133.093413 7.400000 12.300000 135.284077 7.400000 12.400000 137.494742 7.400000 12.500000 139.725406 7.400000 12.600000 141.976071 7.400000 12.700000 144.246735 7.400000 12.800000 146.537399 7.400000 12.900000 148.848064 7.400000 13.000000 151.178728 7.400000 13.100000 153.529393 7.400000 13.200000 155.900057 7.400000 13.300000 158.290722 7.400000 13.400000 160.701386 7.400000 13.500000 163.132050 7.400000 13.600000 165.582715 7.400000 13.700000 168.053379 7.400000 13.800000 170.544044 7.400000 13.900000 173.054708 7.400000 14.000000 175.585372 7.400000 14.100000 178.136037 7.400000 14.200000 180.706701 7.400000 14.300000 183.297366 7.400000 14.400000 185.908030 7.400000 14.500000 188.538694 7.400000 14.600000 191.189359 7.400000 14.700000 193.860023 7.400000 14.800000 196.550688 7.400000 14.900000 199.261352 7.400000 15.000000 201.992017 7.500000 -5.000000 53.397431 7.500000 -4.900000 52.141430 7.500000 -4.800000 50.905428 7.500000 -4.700000 49.689427 7.500000 -4.600000 48.493425 7.500000 -4.500000 47.317424 7.500000 -4.400000 46.161422 7.500000 -4.300000 45.025420 7.500000 -4.200000 43.909419 7.500000 -4.100000 42.813417 7.500000 -4.000000 41.737416 7.500000 -3.900000 40.681414 7.500000 -3.800000 39.645412 7.500000 -3.700000 38.629411 7.500000 -3.600000 37.633409 7.500000 -3.500000 36.657408 7.500000 -3.400000 35.701406 7.500000 -3.300000 34.765405 7.500000 -3.200000 33.849403 7.500000 -3.100000 32.953401 7.500000 -3.000000 32.077400 7.500000 -2.900000 31.221398 7.500000 -2.800000 30.385397 7.500000 -2.700000 29.569395 7.500000 -2.600000 28.773394 7.500000 -2.500000 27.997392 7.500000 -2.400000 27.241390 7.500000 -2.300000 26.505389 7.500000 -2.200000 25.789387 7.500000 -2.100000 25.093386 7.500000 -2.000000 24.417384 7.500000 -1.900000 23.761382 7.500000 -1.800000 23.125381 7.500000 -1.700000 22.509379 7.500000 -1.600000 21.913378 7.500000 -1.500000 21.337376 7.500000 -1.400000 20.781375 7.500000 -1.300000 20.245373 7.500000 -1.200000 19.729371 7.500000 -1.100000 19.233370 7.500000 -1.000000 18.757368 7.500000 -0.900000 18.301367 7.500000 -0.800000 17.865365 7.500000 -0.700000 17.449363 7.500000 -0.600000 17.053362 7.500000 -0.500000 16.677360 7.500000 -0.400000 16.321359 7.500000 -0.300000 15.985357 7.500000 -0.200000 15.669356 7.500000 -0.100000 15.373354 7.500000 -0.000000 15.097352 7.500000 0.100000 14.841351 7.500000 0.200000 14.605349 7.500000 0.300000 14.389348 7.500000 0.400000 14.193346 7.500000 0.500000 14.017344 7.500000 0.600000 13.861343 7.500000 0.700000 13.725341 7.500000 0.800000 13.609340 7.500000 0.900000 13.513338 7.500000 1.000000 13.437337 7.500000 1.100000 13.381335 7.500000 1.200000 13.345333 7.500000 1.300000 13.329332 7.500000 1.400000 13.333330 7.500000 1.500000 13.357329 7.500000 1.600000 13.401327 7.500000 1.700000 13.465326 7.500000 1.800000 13.549324 7.500000 1.900000 13.653322 7.500000 2.000000 13.777321 7.500000 2.100000 13.921319 7.500000 2.200000 14.085318 7.500000 2.300000 14.269316 7.500000 2.400000 14.473314 7.500000 2.500000 14.697313 7.500000 2.600000 14.941311 7.500000 2.700000 15.205310 7.500000 2.800000 15.489308 7.500000 2.900000 15.793307 7.500000 3.000000 16.117305 7.500000 3.100000 16.461303 7.500000 3.200000 16.825302 7.500000 3.300000 17.209300 7.500000 3.400000 17.613299 7.500000 3.500000 18.037297 7.500000 3.600000 18.481295 7.500000 3.700000 18.945294 7.500000 3.800000 19.429292 7.500000 3.900000 19.933291 7.500000 4.000000 20.457289 7.500000 4.100000 21.001288 7.500000 4.200000 21.565286 7.500000 4.300000 22.149284 7.500000 4.400000 22.753283 7.500000 4.500000 23.377281 7.500000 4.600000 24.021280 7.500000 4.700000 24.685278 7.500000 4.800000 25.369276 7.500000 4.900000 26.073275 7.500000 5.000000 26.797273 7.500000 5.100000 27.541272 7.500000 5.200000 28.305270 7.500000 5.300000 29.089269 7.500000 5.400000 29.893267 7.500000 5.500000 30.717265 7.500000 5.600000 31.561264 7.500000 5.700000 32.425262 7.500000 5.800000 33.309261 7.500000 5.900000 34.213259 7.500000 6.000000 35.137258 7.500000 6.100000 36.081256 7.500000 6.200000 37.045254 7.500000 6.300000 38.029253 7.500000 6.400000 39.033251 7.500000 6.500000 40.057250 7.500000 6.600000 41.101248 7.500000 6.700000 42.165246 7.500000 6.800000 43.249245 7.500000 6.900000 44.353243 7.500000 7.000000 45.477242 7.500000 7.100000 46.621240 7.500000 7.200000 47.785239 7.500000 7.300000 48.969237 7.500000 7.400000 50.173235 7.500000 7.500000 51.397234 7.500000 7.600000 52.641232 7.500000 7.700000 53.905231 7.500000 7.800000 55.189229 7.500000 7.900000 56.493227 7.500000 8.000000 57.817226 7.500000 8.100000 59.161224 7.500000 8.200000 60.525223 7.500000 8.300000 61.909221 7.500000 8.400000 63.313220 7.500000 8.500000 64.737218 7.500000 8.600000 66.181216 7.500000 8.700000 67.645215 7.500000 8.800000 69.129213 7.500000 8.900000 70.633212 7.500000 9.000000 72.157210 7.500000 9.100000 73.701208 7.500000 9.200000 75.265207 7.500000 9.300000 76.849205 7.500000 9.400000 78.453204 7.500000 9.500000 80.077202 7.500000 9.600000 81.721201 7.500000 9.700000 83.385199 7.500000 9.800000 85.069197 7.500000 9.900000 86.773196 7.500000 10.000000 88.497194 7.500000 10.100000 90.241193 7.500000 10.200000 92.005191 7.500000 10.300000 93.789190 7.500000 10.400000 95.593188 7.500000 10.500000 97.417186 7.500000 10.600000 99.261185 7.500000 10.700000 101.125183 7.500000 10.800000 103.009182 7.500000 10.900000 104.913180 7.500000 11.000000 106.837178 7.500000 11.100000 108.781177 7.500000 11.200000 110.745175 7.500000 11.300000 112.729174 7.500000 11.400000 114.733172 7.500000 11.500000 116.757171 7.500000 11.600000 118.801169 7.500000 11.700000 120.865167 7.500000 11.800000 122.949166 7.500000 11.900000 125.053164 7.500000 12.000000 127.177163 7.500000 12.100000 129.321161 7.500000 12.200000 131.485159 7.500000 12.300000 133.669158 7.500000 12.400000 135.873156 7.500000 12.500000 138.097155 7.500000 12.600000 140.341153 7.500000 12.700000 142.605152 7.500000 12.800000 144.889150 7.500000 12.900000 147.193148 7.500000 13.000000 149.517147 7.500000 13.100000 151.861145 7.500000 13.200000 154.225144 7.500000 13.300000 156.609142 7.500000 13.400000 159.013140 7.500000 13.500000 161.437139 7.500000 13.600000 163.881137 7.500000 13.700000 166.345136 7.500000 13.800000 168.829134 7.500000 13.900000 171.333133 7.500000 14.000000 173.857131 7.500000 14.100000 176.401129 7.500000 14.200000 178.965128 7.500000 14.300000 181.549126 7.500000 14.400000 184.153125 7.500000 14.500000 186.777123 7.500000 14.600000 189.421122 7.500000 14.700000 192.085120 7.500000 14.800000 194.769118 7.500000 14.900000 197.473117 7.500000 15.000000 200.197115 7.600000 -5.000000 52.937583 7.600000 -4.900000 51.674398 7.600000 -4.800000 50.431214 7.600000 -4.700000 49.208030 7.600000 -4.600000 48.004846 7.600000 -4.500000 46.821661 7.600000 -4.400000 45.658477 7.600000 -4.300000 44.515293 7.600000 -4.200000 43.392108 7.600000 -4.100000 42.288924 7.600000 -4.000000 41.205740 7.600000 -3.900000 40.142555 7.600000 -3.800000 39.099371 7.600000 -3.700000 38.076187 7.600000 -3.600000 37.073002 7.600000 -3.500000 36.089818 7.600000 -3.400000 35.126634 7.600000 -3.300000 34.183449 7.600000 -3.200000 33.260265 7.600000 -3.100000 32.357081 7.600000 -3.000000 31.473896 7.600000 -2.900000 30.610712 7.600000 -2.800000 29.767528 7.600000 -2.700000 28.944344 7.600000 -2.600000 28.141159 7.600000 -2.500000 27.357975 7.600000 -2.400000 26.594791 7.600000 -2.300000 25.851606 7.600000 -2.200000 25.128422 7.600000 -2.100000 24.425238 7.600000 -2.000000 23.742053 7.600000 -1.900000 23.078869 7.600000 -1.800000 22.435685 7.600000 -1.700000 21.812500 7.600000 -1.600000 21.209316 7.600000 -1.500000 20.626132 7.600000 -1.400000 20.062947 7.600000 -1.300000 19.519763 7.600000 -1.200000 18.996579 7.600000 -1.100000 18.493395 7.600000 -1.000000 18.010210 7.600000 -0.900000 17.547026 7.600000 -0.800000 17.103842 7.600000 -0.700000 16.680657 7.600000 -0.600000 16.277473 7.600000 -0.500000 15.894289 7.600000 -0.400000 15.531104 7.600000 -0.300000 15.187920 7.600000 -0.200000 14.864736 7.600000 -0.100000 14.561551 7.600000 -0.000000 14.278367 7.600000 0.100000 14.015183 7.600000 0.200000 13.771998 7.600000 0.300000 13.548814 7.600000 0.400000 13.345630 7.600000 0.500000 13.162445 7.600000 0.600000 12.999261 7.600000 0.700000 12.856077 7.600000 0.800000 12.732893 7.600000 0.900000 12.629708 7.600000 1.000000 12.546524 7.600000 1.100000 12.483340 7.600000 1.200000 12.440155 7.600000 1.300000 12.416971 7.600000 1.400000 12.413787 7.600000 1.500000 12.430602 7.600000 1.600000 12.467418 7.600000 1.700000 12.524234 7.600000 1.800000 12.601049 7.600000 1.900000 12.697865 7.600000 2.000000 12.814681 7.600000 2.100000 12.951496 7.600000 2.200000 13.108312 7.600000 2.300000 13.285128 7.600000 2.400000 13.481944 7.600000 2.500000 13.698759 7.600000 2.600000 13.935575 7.600000 2.700000 14.192391 7.600000 2.800000 14.469206 7.600000 2.900000 14.766022 7.600000 3.000000 15.082838 7.600000 3.100000 15.419653 7.600000 3.200000 15.776469 7.600000 3.300000 16.153285 7.600000 3.400000 16.550100 7.600000 3.500000 16.966916 7.600000 3.600000 17.403732 7.600000 3.700000 17.860547 7.600000 3.800000 18.337363 7.600000 3.900000 18.834179 7.600000 4.000000 19.350994 7.600000 4.100000 19.887810 7.600000 4.200000 20.444626 7.600000 4.300000 21.021442 7.600000 4.400000 21.618257 7.600000 4.500000 22.235073 7.600000 4.600000 22.871889 7.600000 4.700000 23.528704 7.600000 4.800000 24.205520 7.600000 4.900000 24.902336 7.600000 5.000000 25.619151 7.600000 5.100000 26.355967 7.600000 5.200000 27.112783 7.600000 5.300000 27.889598 7.600000 5.400000 28.686414 7.600000 5.500000 29.503230 7.600000 5.600000 30.340045 7.600000 5.700000 31.196861 7.600000 5.800000 32.073677 7.600000 5.900000 32.970492 7.600000 6.000000 33.887308 7.600000 6.100000 34.824124 7.600000 6.200000 35.780940 7.600000 6.300000 36.757755 7.600000 6.400000 37.754571 7.600000 6.500000 38.771387 7.600000 6.600000 39.808202 7.600000 6.700000 40.865018 7.600000 6.800000 41.941834 7.600000 6.900000 43.038649 7.600000 7.000000 44.155465 7.600000 7.100000 45.292281 7.600000 7.200000 46.449096 7.600000 7.300000 47.625912 7.600000 7.400000 48.822728 7.600000 7.500000 50.039543 7.600000 7.600000 51.276359 7.600000 7.700000 52.533175 7.600000 7.800000 53.809991 7.600000 7.900000 55.106806 7.600000 8.000000 56.423622 7.600000 8.100000 57.760438 7.600000 8.200000 59.117253 7.600000 8.300000 60.494069 7.600000 8.400000 61.890885 7.600000 8.500000 63.307700 7.600000 8.600000 64.744516 7.600000 8.700000 66.201332 7.600000 8.800000 67.678147 7.600000 8.900000 69.174963 7.600000 9.000000 70.691779 7.600000 9.100000 72.228594 7.600000 9.200000 73.785410 7.600000 9.300000 75.362226 7.600000 9.400000 76.959041 7.600000 9.500000 78.575857 7.600000 9.600000 80.212673 7.600000 9.700000 81.869489 7.600000 9.800000 83.546304 7.600000 9.900000 85.243120 7.600000 10.000000 86.959936 7.600000 10.100000 88.696751 7.600000 10.200000 90.453567 7.600000 10.300000 92.230383 7.600000 10.400000 94.027198 7.600000 10.500000 95.844014 7.600000 10.600000 97.680830 7.600000 10.700000 99.537645 7.600000 10.800000 101.414461 7.600000 10.900000 103.311277 7.600000 11.000000 105.228092 7.600000 11.100000 107.164908 7.600000 11.200000 109.121724 7.600000 11.300000 111.098540 7.600000 11.400000 113.095355 7.600000 11.500000 115.112171 7.600000 11.600000 117.148987 7.600000 11.700000 119.205802 7.600000 11.800000 121.282618 7.600000 11.900000 123.379434 7.600000 12.000000 125.496249 7.600000 12.100000 127.633065 7.600000 12.200000 129.789881 7.600000 12.300000 131.966696 7.600000 12.400000 134.163512 7.600000 12.500000 136.380328 7.600000 12.600000 138.617143 7.600000 12.700000 140.873959 7.600000 12.800000 143.150775 7.600000 12.900000 145.447590 7.600000 13.000000 147.764406 7.600000 13.100000 150.101222 7.600000 13.200000 152.458038 7.600000 13.300000 154.834853 7.600000 13.400000 157.231669 7.600000 13.500000 159.648485 7.600000 13.600000 162.085300 7.600000 13.700000 164.542116 7.600000 13.800000 167.018932 7.600000 13.900000 169.515747 7.600000 14.000000 172.032563 7.600000 14.100000 174.569379 7.600000 14.200000 177.126194 7.600000 14.300000 179.703010 7.600000 14.400000 182.299826 7.600000 14.500000 184.916641 7.600000 14.600000 187.553457 7.600000 14.700000 190.210273 7.600000 14.800000 192.887088 7.600000 14.900000 195.583904 7.600000 15.000000 198.300720 7.700000 -5.000000 52.489295 7.700000 -4.900000 51.218411 7.700000 -4.800000 49.967527 7.700000 -4.700000 48.736644 7.700000 -4.600000 47.525760 7.700000 -4.500000 46.334876 7.700000 -4.400000 45.163992 7.700000 -4.300000 44.013108 7.700000 -4.200000 42.882225 7.700000 -4.100000 41.771341 7.700000 -4.000000 40.680457 7.700000 -3.900000 39.609573 7.700000 -3.800000 38.558689 7.700000 -3.700000 37.527806 7.700000 -3.600000 36.516922 7.700000 -3.500000 35.526038 7.700000 -3.400000 34.555154 7.700000 -3.300000 33.604271 7.700000 -3.200000 32.673387 7.700000 -3.100000 31.762503 7.700000 -3.000000 30.871619 7.700000 -2.900000 30.000735 7.700000 -2.800000 29.149852 7.700000 -2.700000 28.318968 7.700000 -2.600000 27.508084 7.700000 -2.500000 26.717200 7.700000 -2.400000 25.946316 7.700000 -2.300000 25.195433 7.700000 -2.200000 24.464549 7.700000 -2.100000 23.753665 7.700000 -2.000000 23.062781 7.700000 -1.900000 22.391898 7.700000 -1.800000 21.741014 7.700000 -1.700000 21.110130 7.700000 -1.600000 20.499246 7.700000 -1.500000 19.908362 7.700000 -1.400000 19.337479 7.700000 -1.300000 18.786595 7.700000 -1.200000 18.255711 7.700000 -1.100000 17.744827 7.700000 -1.000000 17.253943 7.700000 -0.900000 16.783060 7.700000 -0.800000 16.332176 7.700000 -0.700000 15.901292 7.700000 -0.600000 15.490408 7.700000 -0.500000 15.099525 7.700000 -0.400000 14.728641 7.700000 -0.300000 14.377757 7.700000 -0.200000 14.046873 7.700000 -0.100000 13.735989 7.700000 -0.000000 13.445106 7.700000 0.100000 13.174222 7.700000 0.200000 12.923338 7.700000 0.300000 12.692454 7.700000 0.400000 12.481570 7.700000 0.500000 12.290687 7.700000 0.600000 12.119803 7.700000 0.700000 11.968919 7.700000 0.800000 11.838035 7.700000 0.900000 11.727152 7.700000 1.000000 11.636268 7.700000 1.100000 11.565384 7.700000 1.200000 11.514500 7.700000 1.300000 11.483616 7.700000 1.400000 11.472733 7.700000 1.500000 11.481849 7.700000 1.600000 11.510965 7.700000 1.700000 11.560081 7.700000 1.800000 11.629197 7.700000 1.900000 11.718314 7.700000 2.000000 11.827430 7.700000 2.100000 11.956546 7.700000 2.200000 12.105662 7.700000 2.300000 12.274779 7.700000 2.400000 12.463895 7.700000 2.500000 12.673011 7.700000 2.600000 12.902127 7.700000 2.700000 13.151243 7.700000 2.800000 13.420360 7.700000 2.900000 13.709476 7.700000 3.000000 14.018592 7.700000 3.100000 14.347708 7.700000 3.200000 14.696824 7.700000 3.300000 15.065941 7.700000 3.400000 15.455057 7.700000 3.500000 15.864173 7.700000 3.600000 16.293289 7.700000 3.700000 16.742406 7.700000 3.800000 17.211522 7.700000 3.900000 17.700638 7.700000 4.000000 18.209754 7.700000 4.100000 18.738870 7.700000 4.200000 19.287987 7.700000 4.300000 19.857103 7.700000 4.400000 20.446219 7.700000 4.500000 21.055335 7.700000 4.600000 21.684451 7.700000 4.700000 22.333568 7.700000 4.800000 23.002684 7.700000 4.900000 23.691800 7.700000 5.000000 24.400916 7.700000 5.100000 25.130033 7.700000 5.200000 25.879149 7.700000 5.300000 26.648265 7.700000 5.400000 27.437381 7.700000 5.500000 28.246497 7.700000 5.600000 29.075614 7.700000 5.700000 29.924730 7.700000 5.800000 30.793846 7.700000 5.900000 31.682962 7.700000 6.000000 32.592078 7.700000 6.100000 33.521195 7.700000 6.200000 34.470311 7.700000 6.300000 35.439427 7.700000 6.400000 36.428543 7.700000 6.500000 37.437660 7.700000 6.600000 38.466776 7.700000 6.700000 39.515892 7.700000 6.800000 40.585008 7.700000 6.900000 41.674124 7.700000 7.000000 42.783241 7.700000 7.100000 43.912357 7.700000 7.200000 45.061473 7.700000 7.300000 46.230589 7.700000 7.400000 47.419705 7.700000 7.500000 48.628822 7.700000 7.600000 49.857938 7.700000 7.700000 51.107054 7.700000 7.800000 52.376170 7.700000 7.900000 53.665287 7.700000 8.000000 54.974403 7.700000 8.100000 56.303519 7.700000 8.200000 57.652635 7.700000 8.300000 59.021751 7.700000 8.400000 60.410868 7.700000 8.500000 61.819984 7.700000 8.600000 63.249100 7.700000 8.700000 64.698216 7.700000 8.800000 66.167332 7.700000 8.900000 67.656449 7.700000 9.000000 69.165565 7.700000 9.100000 70.694681 7.700000 9.200000 72.243797 7.700000 9.300000 73.812914 7.700000 9.400000 75.402030 7.700000 9.500000 77.011146 7.700000 9.600000 78.640262 7.700000 9.700000 80.289378 7.700000 9.800000 81.958495 7.700000 9.900000 83.647611 7.700000 10.000000 85.356727 7.700000 10.100000 87.085843 7.700000 10.200000 88.834959 7.700000 10.300000 90.604076 7.700000 10.400000 92.393192 7.700000 10.500000 94.202308 7.700000 10.600000 96.031424 7.700000 10.700000 97.880541 7.700000 10.800000 99.749657 7.700000 10.900000 101.638773 7.700000 11.000000 103.547889 7.700000 11.100000 105.477005 7.700000 11.200000 107.426122 7.700000 11.300000 109.395238 7.700000 11.400000 111.384354 7.700000 11.500000 113.393470 7.700000 11.600000 115.422586 7.700000 11.700000 117.471703 7.700000 11.800000 119.540819 7.700000 11.900000 121.629935 7.700000 12.000000 123.739051 7.700000 12.100000 125.868168 7.700000 12.200000 128.017284 7.700000 12.300000 130.186400 7.700000 12.400000 132.375516 7.700000 12.500000 134.584632 7.700000 12.600000 136.813749 7.700000 12.700000 139.062865 7.700000 12.800000 141.331981 7.700000 12.900000 143.621097 7.700000 13.000000 145.930213 7.700000 13.100000 148.259330 7.700000 13.200000 150.608446 7.700000 13.300000 152.977562 7.700000 13.400000 155.366678 7.700000 13.500000 157.775795 7.700000 13.600000 160.204911 7.700000 13.700000 162.654027 7.700000 13.800000 165.123143 7.700000 13.900000 167.612259 7.700000 14.000000 170.121376 7.700000 14.100000 172.650492 7.700000 14.200000 175.199608 7.700000 14.300000 177.768724 7.700000 14.400000 180.357840 7.700000 14.500000 182.966957 7.700000 14.600000 185.596073 7.700000 14.700000 188.245189 7.700000 14.800000 190.914305 7.700000 14.900000 193.603422 7.700000 15.000000 196.312538 7.800000 -5.000000 52.062556 7.800000 -4.900000 50.783456 7.800000 -4.800000 49.524356 7.800000 -4.700000 48.285256 7.800000 -4.600000 47.066156 7.800000 -4.500000 45.867056 7.800000 -4.400000 44.687956 7.800000 -4.300000 43.528856 7.800000 -4.200000 42.389756 7.800000 -4.100000 41.270656 7.800000 -4.000000 40.171556 7.800000 -3.900000 39.092456 7.800000 -3.800000 38.033356 7.800000 -3.700000 36.994256 7.800000 -3.600000 35.975156 7.800000 -3.500000 34.976056 7.800000 -3.400000 33.996956 7.800000 -3.300000 33.037856 7.800000 -3.200000 32.098756 7.800000 -3.100000 31.179656 7.800000 -3.000000 30.280556 7.800000 -2.900000 29.401456 7.800000 -2.800000 28.542356 7.800000 -2.700000 27.703256 7.800000 -2.600000 26.884156 7.800000 -2.500000 26.085056 7.800000 -2.400000 25.305956 7.800000 -2.300000 24.546856 7.800000 -2.200000 23.807756 7.800000 -2.100000 23.088656 7.800000 -2.000000 22.389556 7.800000 -1.900000 21.710456 7.800000 -1.800000 21.051356 7.800000 -1.700000 20.412256 7.800000 -1.600000 19.793156 7.800000 -1.500000 19.194056 7.800000 -1.400000 18.614956 7.800000 -1.300000 18.055856 7.800000 -1.200000 17.516756 7.800000 -1.100000 16.997656 7.800000 -1.000000 16.498556 7.800000 -0.900000 16.019456 7.800000 -0.800000 15.560356 7.800000 -0.700000 15.121256 7.800000 -0.600000 14.702156 7.800000 -0.500000 14.303056 7.800000 -0.400000 13.923956 7.800000 -0.300000 13.564856 7.800000 -0.200000 13.225756 7.800000 -0.100000 12.906656 7.800000 -0.000000 12.607556 7.800000 0.100000 12.328456 7.800000 0.200000 12.069356 7.800000 0.300000 11.830256 7.800000 0.400000 11.611156 7.800000 0.500000 11.412056 7.800000 0.600000 11.232956 7.800000 0.700000 11.073856 7.800000 0.800000 10.934756 7.800000 0.900000 10.815656 7.800000 1.000000 10.716556 7.800000 1.100000 10.637456 7.800000 1.200000 10.578356 7.800000 1.300000 10.539256 7.800000 1.400000 10.520156 7.800000 1.500000 10.521056 7.800000 1.600000 10.541956 7.800000 1.700000 10.582856 7.800000 1.800000 10.643756 7.800000 1.900000 10.724656 7.800000 2.000000 10.825556 7.800000 2.100000 10.946456 7.800000 2.200000 11.087356 7.800000 2.300000 11.248256 7.800000 2.400000 11.429156 7.800000 2.500000 11.630056 7.800000 2.600000 11.850956 7.800000 2.700000 12.091856 7.800000 2.800000 12.352756 7.800000 2.900000 12.633656 7.800000 3.000000 12.934556 7.800000 3.100000 13.255456 7.800000 3.200000 13.596356 7.800000 3.300000 13.957256 7.800000 3.400000 14.338156 7.800000 3.500000 14.739056 7.800000 3.600000 15.159956 7.800000 3.700000 15.600856 7.800000 3.800000 16.061756 7.800000 3.900000 16.542656 7.800000 4.000000 17.043556 7.800000 4.100000 17.564456 7.800000 4.200000 18.105356 7.800000 4.300000 18.666256 7.800000 4.400000 19.247156 7.800000 4.500000 19.848056 7.800000 4.600000 20.468956 7.800000 4.700000 21.109856 7.800000 4.800000 21.770756 7.800000 4.900000 22.451656 7.800000 5.000000 23.152556 7.800000 5.100000 23.873456 7.800000 5.200000 24.614356 7.800000 5.300000 25.375256 7.800000 5.400000 26.156156 7.800000 5.500000 26.957056 7.800000 5.600000 27.777956 7.800000 5.700000 28.618856 7.800000 5.800000 29.479756 7.800000 5.900000 30.360656 7.800000 6.000000 31.261557 7.800000 6.100000 32.182457 7.800000 6.200000 33.123357 7.800000 6.300000 34.084257 7.800000 6.400000 35.065157 7.800000 6.500000 36.066057 7.800000 6.600000 37.086957 7.800000 6.700000 38.127857 7.800000 6.800000 39.188757 7.800000 6.900000 40.269657 7.800000 7.000000 41.370557 7.800000 7.100000 42.491457 7.800000 7.200000 43.632357 7.800000 7.300000 44.793257 7.800000 7.400000 45.974157 7.800000 7.500000 47.175057 7.800000 7.600000 48.395957 7.800000 7.700000 49.636857 7.800000 7.800000 50.897757 7.800000 7.900000 52.178657 7.800000 8.000000 53.479557 7.800000 8.100000 54.800457 7.800000 8.200000 56.141357 7.800000 8.300000 57.502257 7.800000 8.400000 58.883157 7.800000 8.500000 60.284057 7.800000 8.600000 61.704957 7.800000 8.700000 63.145857 7.800000 8.800000 64.606757 7.800000 8.900000 66.087657 7.800000 9.000000 67.588557 7.800000 9.100000 69.109457 7.800000 9.200000 70.650357 7.800000 9.300000 72.211257 7.800000 9.400000 73.792157 7.800000 9.500000 75.393057 7.800000 9.600000 77.013957 7.800000 9.700000 78.654857 7.800000 9.800000 80.315757 7.800000 9.900000 81.996657 7.800000 10.000000 83.697557 7.800000 10.100000 85.418457 7.800000 10.200000 87.159357 7.800000 10.300000 88.920257 7.800000 10.400000 90.701157 7.800000 10.500000 92.502057 7.800000 10.600000 94.322957 7.800000 10.700000 96.163857 7.800000 10.800000 98.024757 7.800000 10.900000 99.905657 7.800000 11.000000 101.806557 7.800000 11.100000 103.727457 7.800000 11.200000 105.668357 7.800000 11.300000 107.629257 7.800000 11.400000 109.610157 7.800000 11.500000 111.611057 7.800000 11.600000 113.631957 7.800000 11.700000 115.672857 7.800000 11.800000 117.733757 7.800000 11.900000 119.814657 7.800000 12.000000 121.915557 7.800000 12.100000 124.036457 7.800000 12.200000 126.177357 7.800000 12.300000 128.338257 7.800000 12.400000 130.519157 7.800000 12.500000 132.720057 7.800000 12.600000 134.940957 7.800000 12.700000 137.181857 7.800000 12.800000 139.442757 7.800000 12.900000 141.723657 7.800000 13.000000 144.024557 7.800000 13.100000 146.345457 7.800000 13.200000 148.686357 7.800000 13.300000 151.047257 7.800000 13.400000 153.428157 7.800000 13.500000 155.829057 7.800000 13.600000 158.249957 7.800000 13.700000 160.690857 7.800000 13.800000 163.151757 7.800000 13.900000 165.632657 7.800000 14.000000 168.133557 7.800000 14.100000 170.654457 7.800000 14.200000 173.195357 7.800000 14.300000 175.756257 7.800000 14.400000 178.337157 7.800000 14.500000 180.938057 7.800000 14.600000 183.558957 7.800000 14.700000 186.199857 7.800000 14.800000 188.860757 7.800000 14.900000 191.541657 7.800000 15.000000 194.242557 7.900000 -5.000000 51.667541 7.900000 -4.900000 50.379708 7.900000 -4.800000 49.111875 7.900000 -4.700000 47.864042 7.900000 -4.600000 46.636209 7.900000 -4.500000 45.428376 7.900000 -4.400000 44.240543 7.900000 -4.300000 43.072710 7.900000 -4.200000 41.924878 7.900000 -4.100000 40.797045 7.900000 -4.000000 39.689212 7.900000 -3.900000 38.601379 7.900000 -3.800000 37.533546 7.900000 -3.700000 36.485713 7.900000 -3.600000 35.457880 7.900000 -3.500000 34.450047 7.900000 -3.400000 33.462214 7.900000 -3.300000 32.494381 7.900000 -3.200000 31.546548 7.900000 -3.100000 30.618715 7.900000 -3.000000 29.710882 7.900000 -2.900000 28.823049 7.900000 -2.800000 27.955216 7.900000 -2.700000 27.107383 7.900000 -2.600000 26.279550 7.900000 -2.500000 25.471718 7.900000 -2.400000 24.683885 7.900000 -2.300000 23.916052 7.900000 -2.200000 23.168219 7.900000 -2.100000 22.440386 7.900000 -2.000000 21.732553 7.900000 -1.900000 21.044720 7.900000 -1.800000 20.376887 7.900000 -1.700000 19.729054 7.900000 -1.600000 19.101221 7.900000 -1.500000 18.493388 7.900000 -1.400000 17.905555 7.900000 -1.300000 17.337722 7.900000 -1.200000 16.789889 7.900000 -1.100000 16.262056 7.900000 -1.000000 15.754223 7.900000 -0.900000 15.266390 7.900000 -0.800000 14.798557 7.900000 -0.700000 14.350725 7.900000 -0.600000 13.922892 7.900000 -0.500000 13.515059 7.900000 -0.400000 13.127226 7.900000 -0.300000 12.759393 7.900000 -0.200000 12.411560 7.900000 -0.100000 12.083727 7.900000 -0.000000 11.775894 7.900000 0.100000 11.488061 7.900000 0.200000 11.220228 7.900000 0.300000 10.972395 7.900000 0.400000 10.744562 7.900000 0.500000 10.536729 7.900000 0.600000 10.348896 7.900000 0.700000 10.181063 7.900000 0.800000 10.033230 7.900000 0.900000 9.905397 7.900000 1.000000 9.797565 7.900000 1.100000 9.709732 7.900000 1.200000 9.641899 7.900000 1.300000 9.594066 7.900000 1.400000 9.566233 7.900000 1.500000 9.558400 7.900000 1.600000 9.570567 7.900000 1.700000 9.602734 7.900000 1.800000 9.654901 7.900000 1.900000 9.727068 7.900000 2.000000 9.819235 7.900000 2.100000 9.931402 7.900000 2.200000 10.063569 7.900000 2.300000 10.215736 7.900000 2.400000 10.387903 7.900000 2.500000 10.580070 7.900000 2.600000 10.792237 7.900000 2.700000 11.024405 7.900000 2.800000 11.276572 7.900000 2.900000 11.548739 7.900000 3.000000 11.840906 7.900000 3.100000 12.153073 7.900000 3.200000 12.485240 7.900000 3.300000 12.837407 7.900000 3.400000 13.209574 7.900000 3.500000 13.601741 7.900000 3.600000 14.013908 7.900000 3.700000 14.446075 7.900000 3.800000 14.898242 7.900000 3.900000 15.370409 7.900000 4.000000 15.862576 7.900000 4.100000 16.374743 7.900000 4.200000 16.906910 7.900000 4.300000 17.459077 7.900000 4.400000 18.031244 7.900000 4.500000 18.623412 7.900000 4.600000 19.235579 7.900000 4.700000 19.867746 7.900000 4.800000 20.519913 7.900000 4.900000 21.192080 7.900000 5.000000 21.884247 7.900000 5.100000 22.596414 7.900000 5.200000 23.328581 7.900000 5.300000 24.080748 7.900000 5.400000 24.852915 7.900000 5.500000 25.645082 7.900000 5.600000 26.457249 7.900000 5.700000 27.289416 7.900000 5.800000 28.141583 7.900000 5.900000 29.013750 7.900000 6.000000 29.905917 7.900000 6.100000 30.818084 7.900000 6.200000 31.750252 7.900000 6.300000 32.702419 7.900000 6.400000 33.674586 7.900000 6.500000 34.666753 7.900000 6.600000 35.678920 7.900000 6.700000 36.711087 7.900000 6.800000 37.763254 7.900000 6.900000 38.835421 7.900000 7.000000 39.927588 7.900000 7.100000 41.039755 7.900000 7.200000 42.171922 7.900000 7.300000 43.324089 7.900000 7.400000 44.496256 7.900000 7.500000 45.688423 7.900000 7.600000 46.900590 7.900000 7.700000 48.132757 7.900000 7.800000 49.384924 7.900000 7.900000 50.657092 7.900000 8.000000 51.949259 7.900000 8.100000 53.261426 7.900000 8.200000 54.593593 7.900000 8.300000 55.945760 7.900000 8.400000 57.317927 7.900000 8.500000 58.710094 7.900000 8.600000 60.122261 7.900000 8.700000 61.554428 7.900000 8.800000 63.006595 7.900000 8.900000 64.478762 7.900000 9.000000 65.970929 7.900000 9.100000 67.483096 7.900000 9.200000 69.015263 7.900000 9.300000 70.567430 7.900000 9.400000 72.139597 7.900000 9.500000 73.731764 7.900000 9.600000 75.343931 7.900000 9.700000 76.976099 7.900000 9.800000 78.628266 7.900000 9.900000 80.300433 7.900000 10.000000 81.992600 7.900000 10.100000 83.704767 7.900000 10.200000 85.436934 7.900000 10.300000 87.189101 7.900000 10.400000 88.961268 7.900000 10.500000 90.753435 7.900000 10.600000 92.565602 7.900000 10.700000 94.397769 7.900000 10.800000 96.249936 7.900000 10.900000 98.122103 7.900000 11.000000 100.014270 7.900000 11.100000 101.926437 7.900000 11.200000 103.858604 7.900000 11.300000 105.810771 7.900000 11.400000 107.782939 7.900000 11.500000 109.775106 7.900000 11.600000 111.787273 7.900000 11.700000 113.819440 7.900000 11.800000 115.871607 7.900000 11.900000 117.943774 7.900000 12.000000 120.035941 7.900000 12.100000 122.148108 7.900000 12.200000 124.280275 7.900000 12.300000 126.432442 7.900000 12.400000 128.604609 7.900000 12.500000 130.796776 7.900000 12.600000 133.008943 7.900000 12.700000 135.241110 7.900000 12.800000 137.493277 7.900000 12.900000 139.765444 7.900000 13.000000 142.057611 7.900000 13.100000 144.369779 7.900000 13.200000 146.701946 7.900000 13.300000 149.054113 7.900000 13.400000 151.426280 7.900000 13.500000 153.818447 7.900000 13.600000 156.230614 7.900000 13.700000 158.662781 7.900000 13.800000 161.114948 7.900000 13.900000 163.587115 7.900000 14.000000 166.079282 7.900000 14.100000 168.591449 7.900000 14.200000 171.123616 7.900000 14.300000 173.675783 7.900000 14.400000 176.247950 7.900000 14.500000 178.840117 7.900000 14.600000 181.452284 7.900000 14.700000 184.084451 7.900000 14.800000 186.736618 7.900000 14.900000 189.408786 7.900000 15.000000 192.100953 8.000000 -5.000000 51.314517 8.000000 -4.900000 50.017435 8.000000 -4.800000 48.740352 8.000000 -4.700000 47.483269 8.000000 -4.600000 46.246187 8.000000 -4.500000 45.029104 8.000000 -4.400000 43.832021 8.000000 -4.300000 42.654939 8.000000 -4.200000 41.497856 8.000000 -4.100000 40.360774 8.000000 -4.000000 39.243691 8.000000 -3.900000 38.146608 8.000000 -3.800000 37.069526 8.000000 -3.700000 36.012443 8.000000 -3.600000 34.975360 8.000000 -3.500000 33.958278 8.000000 -3.400000 32.961195 8.000000 -3.300000 31.984112 8.000000 -3.200000 31.027030 8.000000 -3.100000 30.089947 8.000000 -3.000000 29.172865 8.000000 -2.900000 28.275782 8.000000 -2.800000 27.398699 8.000000 -2.700000 26.541617 8.000000 -2.600000 25.704534 8.000000 -2.500000 24.887451 8.000000 -2.400000 24.090369 8.000000 -2.300000 23.313286 8.000000 -2.200000 22.556204 8.000000 -2.100000 21.819121 8.000000 -2.000000 21.102038 8.000000 -1.900000 20.404956 8.000000 -1.800000 19.727873 8.000000 -1.700000 19.070790 8.000000 -1.600000 18.433708 8.000000 -1.500000 17.816625 8.000000 -1.400000 17.219543 8.000000 -1.300000 16.642460 8.000000 -1.200000 16.085377 8.000000 -1.100000 15.548295 8.000000 -1.000000 15.031212 8.000000 -0.900000 14.534129 8.000000 -0.800000 14.057047 8.000000 -0.700000 13.599964 8.000000 -0.600000 13.162882 8.000000 -0.500000 12.745799 8.000000 -0.400000 12.348716 8.000000 -0.300000 11.971634 8.000000 -0.200000 11.614551 8.000000 -0.100000 11.277468 8.000000 -0.000000 10.960386 8.000000 0.100000 10.663303 8.000000 0.200000 10.386221 8.000000 0.300000 10.129138 8.000000 0.400000 9.892055 8.000000 0.500000 9.674973 8.000000 0.600000 9.477890 8.000000 0.700000 9.300807 8.000000 0.800000 9.143725 8.000000 0.900000 9.006642 8.000000 1.000000 8.889560 8.000000 1.100000 8.792477 8.000000 1.200000 8.715394 8.000000 1.300000 8.658312 8.000000 1.400000 8.621229 8.000000 1.500000 8.604146 8.000000 1.600000 8.607064 8.000000 1.700000 8.629981 8.000000 1.800000 8.672898 8.000000 1.900000 8.735816 8.000000 2.000000 8.818733 8.000000 2.100000 8.921651 8.000000 2.200000 9.044568 8.000000 2.300000 9.187485 8.000000 2.400000 9.350403 8.000000 2.500000 9.533320 8.000000 2.600000 9.736237 8.000000 2.700000 9.959155 8.000000 2.800000 10.202072 8.000000 2.900000 10.464990 8.000000 3.000000 10.747907 8.000000 3.100000 11.050824 8.000000 3.200000 11.373742 8.000000 3.300000 11.716659 8.000000 3.400000 12.079576 8.000000 3.500000 12.462494 8.000000 3.600000 12.865411 8.000000 3.700000 13.288329 8.000000 3.800000 13.731246 8.000000 3.900000 14.194163 8.000000 4.000000 14.677081 8.000000 4.100000 15.179998 8.000000 4.200000 15.702915 8.000000 4.300000 16.245833 8.000000 4.400000 16.808750 8.000000 4.500000 17.391668 8.000000 4.600000 17.994585 8.000000 4.700000 18.617502 8.000000 4.800000 19.260420 8.000000 4.900000 19.923337 8.000000 5.000000 20.606254 8.000000 5.100000 21.309172 8.000000 5.200000 22.032089 8.000000 5.300000 22.775007 8.000000 5.400000 23.537924 8.000000 5.500000 24.320841 8.000000 5.600000 25.123759 8.000000 5.700000 25.946676 8.000000 5.800000 26.789593 8.000000 5.900000 27.652511 8.000000 6.000000 28.535428 8.000000 6.100000 29.438346 8.000000 6.200000 30.361263 8.000000 6.300000 31.304180 8.000000 6.400000 32.267098 8.000000 6.500000 33.250015 8.000000 6.600000 34.252932 8.000000 6.700000 35.275850 8.000000 6.800000 36.318767 8.000000 6.900000 37.381684 8.000000 7.000000 38.464602 8.000000 7.100000 39.567519 8.000000 7.200000 40.690437 8.000000 7.300000 41.833354 8.000000 7.400000 42.996271 8.000000 7.500000 44.179189 8.000000 7.600000 45.382106 8.000000 7.700000 46.605023 8.000000 7.800000 47.847941 8.000000 7.900000 49.110858 8.000000 8.000000 50.393776 8.000000 8.100000 51.696693 8.000000 8.200000 53.019610 8.000000 8.300000 54.362528 8.000000 8.400000 55.725445 8.000000 8.500000 57.108362 8.000000 8.600000 58.511280 8.000000 8.700000 59.934197 8.000000 8.800000 61.377115 8.000000 8.900000 62.840032 8.000000 9.000000 64.322949 8.000000 9.100000 65.825867 8.000000 9.200000 67.348784 8.000000 9.300000 68.891701 8.000000 9.400000 70.454619 8.000000 9.500000 72.037536 8.000000 9.600000 73.640454 8.000000 9.700000 75.263371 8.000000 9.800000 76.906288 8.000000 9.900000 78.569206 8.000000 10.000000 80.252123 8.000000 10.100000 81.955040 8.000000 10.200000 83.677958 8.000000 10.300000 85.420875 8.000000 10.400000 87.183793 8.000000 10.500000 88.966710 8.000000 10.600000 90.769627 8.000000 10.700000 92.592545 8.000000 10.800000 94.435462 8.000000 10.900000 96.298379 8.000000 11.000000 98.181297 8.000000 11.100000 100.084214 8.000000 11.200000 102.007132 8.000000 11.300000 103.950049 8.000000 11.400000 105.912966 8.000000 11.500000 107.895884 8.000000 11.600000 109.898801 8.000000 11.700000 111.921718 8.000000 11.800000 113.964636 8.000000 11.900000 116.027553 8.000000 12.000000 118.110470 8.000000 12.100000 120.213388 8.000000 12.200000 122.336305 8.000000 12.300000 124.479223 8.000000 12.400000 126.642140 8.000000 12.500000 128.825057 8.000000 12.600000 131.027975 8.000000 12.700000 133.250892 8.000000 12.800000 135.493809 8.000000 12.900000 137.756727 8.000000 13.000000 140.039644 8.000000 13.100000 142.342562 8.000000 13.200000 144.665479 8.000000 13.300000 147.008396 8.000000 13.400000 149.371314 8.000000 13.500000 151.754231 8.000000 13.600000 154.157148 8.000000 13.700000 156.580066 8.000000 13.800000 159.022983 8.000000 13.900000 161.485901 8.000000 14.000000 163.968818 8.000000 14.100000 166.471735 8.000000 14.200000 168.994653 8.000000 14.300000 171.537570 8.000000 14.400000 174.100487 8.000000 14.500000 176.683405 8.000000 14.600000 179.286322 8.000000 14.700000 181.909240 8.000000 14.800000 184.552157 8.000000 14.900000 187.215074 8.000000 15.000000 189.897992 8.100000 -5.000000 51.013747 8.100000 -4.900000 49.706898 8.100000 -4.800000 48.420049 8.100000 -4.700000 47.153200 8.100000 -4.600000 45.906351 8.100000 -4.500000 44.679502 8.100000 -4.400000 43.472653 8.100000 -4.300000 42.285804 8.100000 -4.200000 41.118955 8.100000 -4.100000 39.972106 8.100000 -4.000000 38.845257 8.100000 -3.900000 37.738408 8.100000 -3.800000 36.651559 8.100000 -3.700000 35.584710 8.100000 -3.600000 34.537860 8.100000 -3.500000 33.511011 8.100000 -3.400000 32.504162 8.100000 -3.300000 31.517313 8.100000 -3.200000 30.550464 8.100000 -3.100000 29.603615 8.100000 -3.000000 28.676766 8.100000 -2.900000 27.769917 8.100000 -2.800000 26.883068 8.100000 -2.700000 26.016219 8.100000 -2.600000 25.169370 8.100000 -2.500000 24.342521 8.100000 -2.400000 23.535672 8.100000 -2.300000 22.748823 8.100000 -2.200000 21.981974 8.100000 -2.100000 21.235125 8.100000 -2.000000 20.508276 8.100000 -1.900000 19.801427 8.100000 -1.800000 19.114578 8.100000 -1.700000 18.447728 8.100000 -1.600000 17.800879 8.100000 -1.500000 17.174030 8.100000 -1.400000 16.567181 8.100000 -1.300000 15.980332 8.100000 -1.200000 15.413483 8.100000 -1.100000 14.866634 8.100000 -1.000000 14.339785 8.100000 -0.900000 13.832936 8.100000 -0.800000 13.346087 8.100000 -0.700000 12.879238 8.100000 -0.600000 12.432389 8.100000 -0.500000 12.005540 8.100000 -0.400000 11.598691 8.100000 -0.300000 11.211842 8.100000 -0.200000 10.844993 8.100000 -0.100000 10.498144 8.100000 -0.000000 10.171295 8.100000 0.100000 9.864446 8.100000 0.200000 9.577597 8.100000 0.300000 9.310747 8.100000 0.400000 9.063898 8.100000 0.500000 8.837049 8.100000 0.600000 8.630200 8.100000 0.700000 8.443351 8.100000 0.800000 8.276502 8.100000 0.900000 8.129653 8.100000 1.000000 8.002804 8.100000 1.100000 7.895955 8.100000 1.200000 7.809106 8.100000 1.300000 7.742257 8.100000 1.400000 7.695408 8.100000 1.500000 7.668559 8.100000 1.600000 7.661710 8.100000 1.700000 7.674861 8.100000 1.800000 7.708012 8.100000 1.900000 7.761163 8.100000 2.000000 7.834314 8.100000 2.100000 7.927465 8.100000 2.200000 8.040616 8.100000 2.300000 8.173766 8.100000 2.400000 8.326917 8.100000 2.500000 8.500068 8.100000 2.600000 8.693219 8.100000 2.700000 8.906370 8.100000 2.800000 9.139521 8.100000 2.900000 9.392672 8.100000 3.000000 9.665823 8.100000 3.100000 9.958974 8.100000 3.200000 10.272125 8.100000 3.300000 10.605276 8.100000 3.400000 10.958427 8.100000 3.500000 11.331578 8.100000 3.600000 11.724729 8.100000 3.700000 12.137880 8.100000 3.800000 12.571031 8.100000 3.900000 13.024182 8.100000 4.000000 13.497333 8.100000 4.100000 13.990484 8.100000 4.200000 14.503634 8.100000 4.300000 15.036785 8.100000 4.400000 15.589936 8.100000 4.500000 16.163087 8.100000 4.600000 16.756238 8.100000 4.700000 17.369389 8.100000 4.800000 18.002540 8.100000 4.900000 18.655691 8.100000 5.000000 19.328842 8.100000 5.100000 20.021993 8.100000 5.200000 20.735144 8.100000 5.300000 21.468295 8.100000 5.400000 22.221446 8.100000 5.500000 22.994597 8.100000 5.600000 23.787748 8.100000 5.700000 24.600899 8.100000 5.800000 25.434050 8.100000 5.900000 26.287201 8.100000 6.000000 27.160352 8.100000 6.100000 28.053503 8.100000 6.200000 28.966653 8.100000 6.300000 29.899804 8.100000 6.400000 30.852955 8.100000 6.500000 31.826106 8.100000 6.600000 32.819257 8.100000 6.700000 33.832408 8.100000 6.800000 34.865559 8.100000 6.900000 35.918710 8.100000 7.000000 36.991861 8.100000 7.100000 38.085012 8.100000 7.200000 39.198163 8.100000 7.300000 40.331314 8.100000 7.400000 41.484465 8.100000 7.500000 42.657616 8.100000 7.600000 43.850767 8.100000 7.700000 45.063918 8.100000 7.800000 46.297069 8.100000 7.900000 47.550220 8.100000 8.000000 48.823371 8.100000 8.100000 50.116522 8.100000 8.200000 51.429672 8.100000 8.300000 52.762823 8.100000 8.400000 54.115974 8.100000 8.500000 55.489125 8.100000 8.600000 56.882276 8.100000 8.700000 58.295427 8.100000 8.800000 59.728578 8.100000 8.900000 61.181729 8.100000 9.000000 62.654880 8.100000 9.100000 64.148031 8.100000 9.200000 65.661182 8.100000 9.300000 67.194333 8.100000 9.400000 68.747484 8.100000 9.500000 70.320635 8.100000 9.600000 71.913786 8.100000 9.700000 73.526937 8.100000 9.800000 75.160088 8.100000 9.900000 76.813239 8.100000 10.000000 78.486390 8.100000 10.100000 80.179540 8.100000 10.200000 81.892691 8.100000 10.300000 83.625842 8.100000 10.400000 85.378993 8.100000 10.500000 87.152144 8.100000 10.600000 88.945295 8.100000 10.700000 90.758446 8.100000 10.800000 92.591597 8.100000 10.900000 94.444748 8.100000 11.000000 96.317899 8.100000 11.100000 98.211050 8.100000 11.200000 100.124201 8.100000 11.300000 102.057352 8.100000 11.400000 104.010503 8.100000 11.500000 105.983654 8.100000 11.600000 107.976805 8.100000 11.700000 109.989956 8.100000 11.800000 112.023107 8.100000 11.900000 114.076258 8.100000 12.000000 116.149409 8.100000 12.100000 118.242559 8.100000 12.200000 120.355710 8.100000 12.300000 122.488861 8.100000 12.400000 124.642012 8.100000 12.500000 126.815163 8.100000 12.600000 129.008314 8.100000 12.700000 131.221465 8.100000 12.800000 133.454616 8.100000 12.900000 135.707767 8.100000 13.000000 137.980918 8.100000 13.100000 140.274069 8.100000 13.200000 142.587220 8.100000 13.300000 144.920371 8.100000 13.400000 147.273522 8.100000 13.500000 149.646673 8.100000 13.600000 152.039824 8.100000 13.700000 154.452975 8.100000 13.800000 156.886126 8.100000 13.900000 159.339277 8.100000 14.000000 161.812428 8.100000 14.100000 164.305578 8.100000 14.200000 166.818729 8.100000 14.300000 169.351880 8.100000 14.400000 171.905031 8.100000 14.500000 174.478182 8.100000 14.600000 177.071333 8.100000 14.700000 179.684484 8.100000 14.800000 182.317635 8.100000 14.900000 184.970786 8.100000 15.000000 187.643937 8.200000 -5.000000 50.775395 8.200000 -4.900000 49.458262 8.200000 -4.800000 48.161130 8.200000 -4.700000 46.883998 8.200000 -4.600000 45.626866 8.200000 -4.500000 44.389733 8.200000 -4.400000 43.172601 8.200000 -4.300000 41.975469 8.200000 -4.200000 40.798337 8.200000 -4.100000 39.641205 8.200000 -4.000000 38.504072 8.200000 -3.900000 37.386940 8.200000 -3.800000 36.289808 8.200000 -3.700000 35.212676 8.200000 -3.600000 34.155544 8.200000 -3.500000 33.118411 8.200000 -3.400000 32.101279 8.200000 -3.300000 31.104147 8.200000 -3.200000 30.127015 8.200000 -3.100000 29.169883 8.200000 -3.000000 28.232750 8.200000 -2.900000 27.315618 8.200000 -2.800000 26.418486 8.200000 -2.700000 25.541354 8.200000 -2.600000 24.684221 8.200000 -2.500000 23.847089 8.200000 -2.400000 23.029957 8.200000 -2.300000 22.232825 8.200000 -2.200000 21.455693 8.200000 -2.100000 20.698560 8.200000 -2.000000 19.961428 8.200000 -1.900000 19.244296 8.200000 -1.800000 18.547164 8.200000 -1.700000 17.870032 8.200000 -1.600000 17.212899 8.200000 -1.500000 16.575767 8.200000 -1.400000 15.958635 8.200000 -1.300000 15.361503 8.200000 -1.200000 14.784370 8.200000 -1.100000 14.227238 8.200000 -1.000000 13.690106 8.200000 -0.900000 13.172974 8.200000 -0.800000 12.675842 8.200000 -0.700000 12.198709 8.200000 -0.600000 11.741577 8.200000 -0.500000 11.304445 8.200000 -0.400000 10.887313 8.200000 -0.300000 10.490181 8.200000 -0.200000 10.113048 8.200000 -0.100000 9.755916 8.200000 -0.000000 9.418784 8.200000 0.100000 9.101652 8.200000 0.200000 8.804520 8.200000 0.300000 8.527387 8.200000 0.400000 8.270255 8.200000 0.500000 8.033123 8.200000 0.600000 7.815991 8.200000 0.700000 7.618858 8.200000 0.800000 7.441726 8.200000 0.900000 7.284594 8.200000 1.000000 7.147462 8.200000 1.100000 7.030330 8.200000 1.200000 6.933197 8.200000 1.300000 6.856065 8.200000 1.400000 6.798933 8.200000 1.500000 6.761801 8.200000 1.600000 6.744669 8.200000 1.700000 6.747536 8.200000 1.800000 6.770404 8.200000 1.900000 6.813272 8.200000 2.000000 6.876140 8.200000 2.100000 6.959007 8.200000 2.200000 7.061875 8.200000 2.300000 7.184743 8.200000 2.400000 7.327611 8.200000 2.500000 7.490479 8.200000 2.600000 7.673346 8.200000 2.700000 7.876214 8.200000 2.800000 8.099082 8.200000 2.900000 8.341950 8.200000 3.000000 8.604818 8.200000 3.100000 8.887685 8.200000 3.200000 9.190553 8.200000 3.300000 9.513421 8.200000 3.400000 9.856289 8.200000 3.500000 10.219156 8.200000 3.600000 10.602024 8.200000 3.700000 11.004892 8.200000 3.800000 11.427760 8.200000 3.900000 11.870628 8.200000 4.000000 12.333495 8.200000 4.100000 12.816363 8.200000 4.200000 13.319231 8.200000 4.300000 13.842099 8.200000 4.400000 14.384967 8.200000 4.500000 14.947834 8.200000 4.600000 15.530702 8.200000 4.700000 16.133570 8.200000 4.800000 16.756438 8.200000 4.900000 17.399306 8.200000 5.000000 18.062173 8.200000 5.100000 18.745041 8.200000 5.200000 19.447909 8.200000 5.300000 20.170777 8.200000 5.400000 20.913644 8.200000 5.500000 21.676512 8.200000 5.600000 22.459380 8.200000 5.700000 23.262248 8.200000 5.800000 24.085116 8.200000 5.900000 24.927983 8.200000 6.000000 25.790851 8.200000 6.100000 26.673719 8.200000 6.200000 27.576587 8.200000 6.300000 28.499455 8.200000 6.400000 29.442322 8.200000 6.500000 30.405190 8.200000 6.600000 31.388058 8.200000 6.700000 32.390926 8.200000 6.800000 33.413793 8.200000 6.900000 34.456661 8.200000 7.000000 35.519529 8.200000 7.100000 36.602397 8.200000 7.200000 37.705265 8.200000 7.300000 38.828132 8.200000 7.400000 39.971000 8.200000 7.500000 41.133868 8.200000 7.600000 42.316736 8.200000 7.700000 43.519604 8.200000 7.800000 44.742471 8.200000 7.900000 45.985339 8.200000 8.000000 47.248207 8.200000 8.100000 48.531075 8.200000 8.200000 49.833943 8.200000 8.300000 51.156810 8.200000 8.400000 52.499678 8.200000 8.500000 53.862546 8.200000 8.600000 55.245414 8.200000 8.700000 56.648281 8.200000 8.800000 58.071149 8.200000 8.900000 59.514017 8.200000 9.000000 60.976885 8.200000 9.100000 62.459753 8.200000 9.200000 63.962620 8.200000 9.300000 65.485488 8.200000 9.400000 67.028356 8.200000 9.500000 68.591224 8.200000 9.600000 70.174092 8.200000 9.700000 71.776959 8.200000 9.800000 73.399827 8.200000 9.900000 75.042695 8.200000 10.000000 76.705563 8.200000 10.100000 78.388430 8.200000 10.200000 80.091298 8.200000 10.300000 81.814166 8.200000 10.400000 83.557034 8.200000 10.500000 85.319902 8.200000 10.600000 87.102769 8.200000 10.700000 88.905637 8.200000 10.800000 90.728505 8.200000 10.900000 92.571373 8.200000 11.000000 94.434241 8.200000 11.100000 96.317108 8.200000 11.200000 98.219976 8.200000 11.300000 100.142844 8.200000 11.400000 102.085712 8.200000 11.500000 104.048580 8.200000 11.600000 106.031447 8.200000 11.700000 108.034315 8.200000 11.800000 110.057183 8.200000 11.900000 112.100051 8.200000 12.000000 114.162918 8.200000 12.100000 116.245786 8.200000 12.200000 118.348654 8.200000 12.300000 120.471522 8.200000 12.400000 122.614390 8.200000 12.500000 124.777257 8.200000 12.600000 126.960125 8.200000 12.700000 129.162993 8.200000 12.800000 131.385861 8.200000 12.900000 133.628729 8.200000 13.000000 135.891596 8.200000 13.100000 138.174464 8.200000 13.200000 140.477332 8.200000 13.300000 142.800200 8.200000 13.400000 145.143067 8.200000 13.500000 147.505935 8.200000 13.600000 149.888803 8.200000 13.700000 152.291671 8.200000 13.800000 154.714539 8.200000 13.900000 157.157406 8.200000 14.000000 159.620274 8.200000 14.100000 162.103142 8.200000 14.200000 164.606010 8.200000 14.300000 167.128878 8.200000 14.400000 169.671745 8.200000 14.500000 172.234613 8.200000 14.600000 174.817481 8.200000 14.700000 177.420349 8.200000 14.800000 180.043217 8.200000 14.900000 182.686084 8.200000 15.000000 185.348952 8.300000 -5.000000 50.609429 8.300000 -4.900000 49.281497 8.300000 -4.800000 47.973565 8.300000 -4.700000 46.685633 8.300000 -4.600000 45.417701 8.300000 -4.500000 44.169769 8.300000 -4.400000 42.941837 8.300000 -4.300000 41.733905 8.300000 -4.200000 40.545972 8.300000 -4.100000 39.378040 8.300000 -4.000000 38.230108 8.300000 -3.900000 37.102176 8.300000 -3.800000 35.994244 8.300000 -3.700000 34.906312 8.300000 -3.600000 33.838380 8.300000 -3.500000 32.790448 8.300000 -3.400000 31.762516 8.300000 -3.300000 30.754583 8.300000 -3.200000 29.766651 8.300000 -3.100000 28.798719 8.300000 -3.000000 27.850787 8.300000 -2.900000 26.922855 8.300000 -2.800000 26.014923 8.300000 -2.700000 25.126991 8.300000 -2.600000 24.259059 8.300000 -2.500000 23.411127 8.300000 -2.400000 22.583194 8.300000 -2.300000 21.775262 8.300000 -2.200000 20.987330 8.300000 -2.100000 20.219398 8.300000 -2.000000 19.471466 8.300000 -1.900000 18.743534 8.300000 -1.800000 18.035602 8.300000 -1.700000 17.347670 8.300000 -1.600000 16.679738 8.300000 -1.500000 16.031805 8.300000 -1.400000 15.403873 8.300000 -1.300000 14.795941 8.300000 -1.200000 14.208009 8.300000 -1.100000 13.640077 8.300000 -1.000000 13.092145 8.300000 -0.900000 12.564213 8.300000 -0.800000 12.056281 8.300000 -0.700000 11.568349 8.300000 -0.600000 11.100416 8.300000 -0.500000 10.652484 8.300000 -0.400000 10.224552 8.300000 -0.300000 9.816620 8.300000 -0.200000 9.428688 8.300000 -0.100000 9.060756 8.300000 -0.000000 8.712824 8.300000 0.100000 8.384892 8.300000 0.200000 8.076960 8.300000 0.300000 7.789027 8.300000 0.400000 7.521095 8.300000 0.500000 7.273163 8.300000 0.600000 7.045231 8.300000 0.700000 6.837299 8.300000 0.800000 6.649367 8.300000 0.900000 6.481435 8.300000 1.000000 6.333503 8.300000 1.100000 6.205571 8.300000 1.200000 6.097638 8.300000 1.300000 6.009706 8.300000 1.400000 5.941774 8.300000 1.500000 5.893842 8.300000 1.600000 5.865910 8.300000 1.700000 5.857978 8.300000 1.800000 5.870046 8.300000 1.900000 5.902114 8.300000 2.000000 5.954182 8.300000 2.100000 6.026249 8.300000 2.200000 6.118317 8.300000 2.300000 6.230385 8.300000 2.400000 6.362453 8.300000 2.500000 6.514521 8.300000 2.600000 6.686589 8.300000 2.700000 6.878657 8.300000 2.800000 7.090725 8.300000 2.900000 7.322793 8.300000 3.000000 7.574860 8.300000 3.100000 7.846928 8.300000 3.200000 8.138996 8.300000 3.300000 8.451064 8.300000 3.400000 8.783132 8.300000 3.500000 9.135200 8.300000 3.600000 9.507268 8.300000 3.700000 9.899336 8.300000 3.800000 10.311404 8.300000 3.900000 10.743471 8.300000 4.000000 11.195539 8.300000 4.100000 11.667607 8.300000 4.200000 12.159675 8.300000 4.300000 12.671743 8.300000 4.400000 13.203811 8.300000 4.500000 13.755879 8.300000 4.600000 14.327947 8.300000 4.700000 14.920014 8.300000 4.800000 15.532082 8.300000 4.900000 16.164150 8.300000 5.000000 16.816218 8.300000 5.100000 17.488286 8.300000 5.200000 18.180354 8.300000 5.300000 18.892422 8.300000 5.400000 19.624490 8.300000 5.500000 20.376558 8.300000 5.600000 21.148625 8.300000 5.700000 21.940693 8.300000 5.800000 22.752761 8.300000 5.900000 23.584829 8.300000 6.000000 24.436897 8.300000 6.100000 25.308965 8.300000 6.200000 26.201033 8.300000 6.300000 27.113101 8.300000 6.400000 28.045169 8.300000 6.500000 28.997236 8.300000 6.600000 29.969304 8.300000 6.700000 30.961372 8.300000 6.800000 31.973440 8.300000 6.900000 33.005508 8.300000 7.000000 34.057576 8.300000 7.100000 35.129644 8.300000 7.200000 36.221712 8.300000 7.300000 37.333780 8.300000 7.400000 38.465847 8.300000 7.500000 39.617915 8.300000 7.600000 40.789983 8.300000 7.700000 41.982051 8.300000 7.800000 43.194119 8.300000 7.900000 44.426187 8.300000 8.000000 45.678255 8.300000 8.100000 46.950323 8.300000 8.200000 48.242391 8.300000 8.300000 49.554458 8.300000 8.400000 50.886526 8.300000 8.500000 52.238594 8.300000 8.600000 53.610662 8.300000 8.700000 55.002730 8.300000 8.800000 56.414798 8.300000 8.900000 57.846866 8.300000 9.000000 59.298934 8.300000 9.100000 60.771002 8.300000 9.200000 62.263069 8.300000 9.300000 63.775137 8.300000 9.400000 65.307205 8.300000 9.500000 66.859273 8.300000 9.600000 68.431341 8.300000 9.700000 70.023409 8.300000 9.800000 71.635477 8.300000 9.900000 73.267545 8.300000 10.000000 74.919613 8.300000 10.100000 76.591680 8.300000 10.200000 78.283748 8.300000 10.300000 79.995816 8.300000 10.400000 81.727884 8.300000 10.500000 83.479952 8.300000 10.600000 85.252020 8.300000 10.700000 87.044088 8.300000 10.800000 88.856156 8.300000 10.900000 90.688224 8.300000 11.000000 92.540291 8.300000 11.100000 94.412359 8.300000 11.200000 96.304427 8.300000 11.300000 98.216495 8.300000 11.400000 100.148563 8.300000 11.500000 102.100631 8.300000 11.600000 104.072699 8.300000 11.700000 106.064767 8.300000 11.800000 108.076835 8.300000 11.900000 110.108902 8.300000 12.000000 112.160970 8.300000 12.100000 114.233038 8.300000 12.200000 116.325106 8.300000 12.300000 118.437174 8.300000 12.400000 120.569242 8.300000 12.500000 122.721310 8.300000 12.600000 124.893378 8.300000 12.700000 127.085446 8.300000 12.800000 129.297513 8.300000 12.900000 131.529581 8.300000 13.000000 133.781649 8.300000 13.100000 136.053717 8.300000 13.200000 138.345785 8.300000 13.300000 140.657853 8.300000 13.400000 142.989921 8.300000 13.500000 145.341989 8.300000 13.600000 147.714057 8.300000 13.700000 150.106124 8.300000 13.800000 152.518192 8.300000 13.900000 154.950260 8.300000 14.000000 157.402328 8.300000 14.100000 159.874396 8.300000 14.200000 162.366464 8.300000 14.300000 164.878532 8.300000 14.400000 167.410600 8.300000 14.500000 169.962668 8.300000 14.600000 172.534735 8.300000 14.700000 175.126803 8.300000 14.800000 177.738871 8.300000 14.900000 180.370939 8.300000 15.000000 183.023007 8.400000 -5.000000 50.525537 8.400000 -4.900000 49.186288 8.400000 -4.800000 47.867039 8.400000 -4.700000 46.567790 8.400000 -4.600000 45.288542 8.400000 -4.500000 44.029293 8.400000 -4.400000 42.790044 8.400000 -4.300000 41.570795 8.400000 -4.200000 40.371547 8.400000 -4.100000 39.192298 8.400000 -4.000000 38.033049 8.400000 -3.900000 36.893800 8.400000 -3.800000 35.774552 8.400000 -3.700000 34.675303 8.400000 -3.600000 33.596054 8.400000 -3.500000 32.536805 8.400000 -3.400000 31.497557 8.400000 -3.300000 30.478308 8.400000 -3.200000 29.479059 8.400000 -3.100000 28.499810 8.400000 -3.000000 27.540562 8.400000 -2.900000 26.601313 8.400000 -2.800000 25.682064 8.400000 -2.700000 24.782815 8.400000 -2.600000 23.903567 8.400000 -2.500000 23.044318 8.400000 -2.400000 22.205069 8.400000 -2.300000 21.385820 8.400000 -2.200000 20.586572 8.400000 -2.100000 19.807323 8.400000 -2.000000 19.048074 8.400000 -1.900000 18.308825 8.400000 -1.800000 17.589577 8.400000 -1.700000 16.890328 8.400000 -1.600000 16.211079 8.400000 -1.500000 15.551830 8.400000 -1.400000 14.912582 8.400000 -1.300000 14.293333 8.400000 -1.200000 13.694084 8.400000 -1.100000 13.114835 8.400000 -1.000000 12.555587 8.400000 -0.900000 12.016338 8.400000 -0.800000 11.497089 8.400000 -0.700000 10.997840 8.400000 -0.600000 10.518592 8.400000 -0.500000 10.059343 8.400000 -0.400000 9.620094 8.400000 -0.300000 9.200845 8.400000 -0.200000 8.801597 8.400000 -0.100000 8.422348 8.400000 -0.000000 8.063099 8.400000 0.100000 7.723850 8.400000 0.200000 7.404602 8.400000 0.300000 7.105353 8.400000 0.400000 6.826104 8.400000 0.500000 6.566855 8.400000 0.600000 6.327607 8.400000 0.700000 6.108358 8.400000 0.800000 5.909109 8.400000 0.900000 5.729860 8.400000 1.000000 5.570612 8.400000 1.100000 5.431363 8.400000 1.200000 5.312114 8.400000 1.300000 5.212865 8.400000 1.400000 5.133617 8.400000 1.500000 5.074368 8.400000 1.600000 5.035119 8.400000 1.700000 5.015870 8.400000 1.800000 5.016622 8.400000 1.900000 5.037373 8.400000 2.000000 5.078124 8.400000 2.100000 5.138875 8.400000 2.200000 5.219627 8.400000 2.300000 5.320378 8.400000 2.400000 5.441129 8.400000 2.500000 5.581880 8.400000 2.600000 5.742632 8.400000 2.700000 5.923383 8.400000 2.800000 6.124134 8.400000 2.900000 6.344885 8.400000 3.000000 6.585637 8.400000 3.100000 6.846388 8.400000 3.200000 7.127139 8.400000 3.300000 7.427890 8.400000 3.400000 7.748642 8.400000 3.500000 8.089393 8.400000 3.600000 8.450144 8.400000 3.700000 8.830895 8.400000 3.800000 9.231647 8.400000 3.900000 9.652398 8.400000 4.000000 10.093149 8.400000 4.100000 10.553900 8.400000 4.200000 11.034652 8.400000 4.300000 11.535403 8.400000 4.400000 12.056154 8.400000 4.500000 12.596905 8.400000 4.600000 13.157657 8.400000 4.700000 13.738408 8.400000 4.800000 14.339159 8.400000 4.900000 14.959910 8.400000 5.000000 15.600662 8.400000 5.100000 16.261413 8.400000 5.200000 16.942164 8.400000 5.300000 17.642915 8.400000 5.400000 18.363667 8.400000 5.500000 19.104418 8.400000 5.600000 19.865169 8.400000 5.700000 20.645920 8.400000 5.800000 21.446672 8.400000 5.900000 22.267423 8.400000 6.000000 23.108174 8.400000 6.100000 23.968925 8.400000 6.200000 24.849677 8.400000 6.300000 25.750428 8.400000 6.400000 26.671179 8.400000 6.500000 27.611930 8.400000 6.600000 28.572682 8.400000 6.700000 29.553433 8.400000 6.800000 30.554184 8.400000 6.900000 31.574935 8.400000 7.000000 32.615687 8.400000 7.100000 33.676438 8.400000 7.200000 34.757189 8.400000 7.300000 35.857940 8.400000 7.400000 36.978692 8.400000 7.500000 38.119443 8.400000 7.600000 39.280194 8.400000 7.700000 40.460945 8.400000 7.800000 41.661697 8.400000 7.900000 42.882448 8.400000 8.000000 44.123199 8.400000 8.100000 45.383950 8.400000 8.200000 46.664702 8.400000 8.300000 47.965453 8.400000 8.400000 49.286204 8.400000 8.500000 50.626955 8.400000 8.600000 51.987707 8.400000 8.700000 53.368458 8.400000 8.800000 54.769209 8.400000 8.900000 56.189960 8.400000 9.000000 57.630712 8.400000 9.100000 59.091463 8.400000 9.200000 60.572214 8.400000 9.300000 62.072965 8.400000 9.400000 63.593717 8.400000 9.500000 65.134468 8.400000 9.600000 66.695219 8.400000 9.700000 68.275970 8.400000 9.800000 69.876722 8.400000 9.900000 71.497473 8.400000 10.000000 73.138224 8.400000 10.100000 74.798975 8.400000 10.200000 76.479727 8.400000 10.300000 78.180478 8.400000 10.400000 79.901229 8.400000 10.500000 81.641980 8.400000 10.600000 83.402732 8.400000 10.700000 85.183483 8.400000 10.800000 86.984234 8.400000 10.900000 88.804985 8.400000 11.000000 90.645737 8.400000 11.100000 92.506488 8.400000 11.200000 94.387239 8.400000 11.300000 96.287990 8.400000 11.400000 98.208742 8.400000 11.500000 100.149493 8.400000 11.600000 102.110244 8.400000 11.700000 104.090995 8.400000 11.800000 106.091747 8.400000 11.900000 108.112498 8.400000 12.000000 110.153249 8.400000 12.100000 112.214000 8.400000 12.200000 114.294752 8.400000 12.300000 116.395503 8.400000 12.400000 118.516254 8.400000 12.500000 120.657005 8.400000 12.600000 122.817757 8.400000 12.700000 124.998508 8.400000 12.800000 127.199259 8.400000 12.900000 129.420010 8.400000 13.000000 131.660762 8.400000 13.100000 133.921513 8.400000 13.200000 136.202264 8.400000 13.300000 138.503015 8.400000 13.400000 140.823767 8.400000 13.500000 143.164518 8.400000 13.600000 145.525269 8.400000 13.700000 147.906020 8.400000 13.800000 150.306772 8.400000 13.900000 152.727523 8.400000 14.000000 155.168274 8.400000 14.100000 157.629025 8.400000 14.200000 160.109777 8.400000 14.300000 162.610528 8.400000 14.400000 165.131279 8.400000 14.500000 167.672030 8.400000 14.600000 170.232782 8.400000 14.700000 172.813533 8.400000 14.800000 175.414284 8.400000 14.900000 178.035035 8.400000 15.000000 180.675787 8.500000 -5.000000 50.533028 8.500000 -4.900000 49.181946 8.500000 -4.800000 47.850863 8.500000 -4.700000 46.539781 8.500000 -4.600000 45.248699 8.500000 -4.500000 43.977617 8.500000 -4.400000 42.726535 8.500000 -4.300000 41.495453 8.500000 -4.200000 40.284371 8.500000 -4.100000 39.093289 8.500000 -4.000000 37.922206 8.500000 -3.900000 36.771124 8.500000 -3.800000 35.640042 8.500000 -3.700000 34.528960 8.500000 -3.600000 33.437878 8.500000 -3.500000 32.366796 8.500000 -3.400000 31.315714 8.500000 -3.300000 30.284632 8.500000 -3.200000 29.273549 8.500000 -3.100000 28.282467 8.500000 -3.000000 27.311385 8.500000 -2.900000 26.360303 8.500000 -2.800000 25.429221 8.500000 -2.700000 24.518139 8.500000 -2.600000 23.627057 8.500000 -2.500000 22.755975 8.500000 -2.400000 21.904892 8.500000 -2.300000 21.073810 8.500000 -2.200000 20.262728 8.500000 -2.100000 19.471646 8.500000 -2.000000 18.700564 8.500000 -1.900000 17.949482 8.500000 -1.800000 17.218400 8.500000 -1.700000 16.507318 8.500000 -1.600000 15.816235 8.500000 -1.500000 15.145153 8.500000 -1.400000 14.494071 8.500000 -1.300000 13.862989 8.500000 -1.200000 13.251907 8.500000 -1.100000 12.660825 8.500000 -1.000000 12.089743 8.500000 -0.900000 11.538661 8.500000 -0.800000 11.007578 8.500000 -0.700000 10.496496 8.500000 -0.600000 10.005414 8.500000 -0.500000 9.534332 8.500000 -0.400000 9.083250 8.500000 -0.300000 8.652168 8.500000 -0.200000 8.241086 8.500000 -0.100000 7.850004 8.500000 -0.000000 7.478921 8.500000 0.100000 7.127839 8.500000 0.200000 6.796757 8.500000 0.300000 6.485675 8.500000 0.400000 6.194593 8.500000 0.500000 5.923511 8.500000 0.600000 5.672429 8.500000 0.700000 5.441347 8.500000 0.800000 5.230264 8.500000 0.900000 5.039182 8.500000 1.000000 4.868100 8.500000 1.100000 4.717018 8.500000 1.200000 4.585936 8.500000 1.300000 4.474854 8.500000 1.400000 4.383772 8.500000 1.500000 4.312690 8.500000 1.600000 4.261607 8.500000 1.700000 4.230525 8.500000 1.800000 4.219443 8.500000 1.900000 4.228361 8.500000 2.000000 4.257279 8.500000 2.100000 4.306197 8.500000 2.200000 4.375115 8.500000 2.300000 4.464033 8.500000 2.400000 4.572950 8.500000 2.500000 4.701868 8.500000 2.600000 4.850786 8.500000 2.700000 5.019704 8.500000 2.800000 5.208622 8.500000 2.900000 5.417540 8.500000 3.000000 5.646458 8.500000 3.100000 5.895376 8.500000 3.200000 6.164293 8.500000 3.300000 6.453211 8.500000 3.400000 6.762129 8.500000 3.500000 7.091047 8.500000 3.600000 7.439965 8.500000 3.700000 7.808883 8.500000 3.800000 8.197801 8.500000 3.900000 8.606719 8.500000 4.000000 9.035636 8.500000 4.100000 9.484554 8.500000 4.200000 9.953472 8.500000 4.300000 10.442390 8.500000 4.400000 10.951308 8.500000 4.500000 11.480226 8.500000 4.600000 12.029144 8.500000 4.700000 12.598062 8.500000 4.800000 13.186979 8.500000 4.900000 13.795897 8.500000 5.000000 14.424815 8.500000 5.100000 15.073733 8.500000 5.200000 15.742651 8.500000 5.300000 16.431569 8.500000 5.400000 17.140487 8.500000 5.500000 17.869405 8.500000 5.600000 18.618322 8.500000 5.700000 19.387240 8.500000 5.800000 20.176158 8.500000 5.900000 20.985076 8.500000 6.000000 21.813994 8.500000 6.100000 22.662912 8.500000 6.200000 23.531830 8.500000 6.300000 24.420748 8.500000 6.400000 25.329665 8.500000 6.500000 26.258583 8.500000 6.600000 27.207501 8.500000 6.700000 28.176419 8.500000 6.800000 29.165337 8.500000 6.900000 30.174255 8.500000 7.000000 31.203173 8.500000 7.100000 32.252091 8.500000 7.200000 33.321008 8.500000 7.300000 34.409926 8.500000 7.400000 35.518844 8.500000 7.500000 36.647762 8.500000 7.600000 37.796680 8.500000 7.700000 38.965598 8.500000 7.800000 40.154516 8.500000 7.900000 41.363434 8.500000 8.000000 42.592351 8.500000 8.100000 43.841269 8.500000 8.200000 45.110187 8.500000 8.300000 46.399105 8.500000 8.400000 47.708023 8.500000 8.500000 49.036941 8.500000 8.600000 50.385859 8.500000 8.700000 51.754777 8.500000 8.800000 53.143694 8.500000 8.900000 54.552612 8.500000 9.000000 55.981530 8.500000 9.100000 57.430448 8.500000 9.200000 58.899366 8.500000 9.300000 60.388284 8.500000 9.400000 61.897202 8.500000 9.500000 63.426120 8.500000 9.600000 64.975037 8.500000 9.700000 66.543955 8.500000 9.800000 68.132873 8.500000 9.900000 69.741791 8.500000 10.000000 71.370709 8.500000 10.100000 73.019627 8.500000 10.200000 74.688545 8.500000 10.300000 76.377463 8.500000 10.400000 78.086380 8.500000 10.500000 79.815298 8.500000 10.600000 81.564216 8.500000 10.700000 83.333134 8.500000 10.800000 85.122052 8.500000 10.900000 86.930970 8.500000 11.000000 88.759888 8.500000 11.100000 90.608806 8.500000 11.200000 92.477723 8.500000 11.300000 94.366641 8.500000 11.400000 96.275559 8.500000 11.500000 98.204477 8.500000 11.600000 100.153395 8.500000 11.700000 102.122313 8.500000 11.800000 104.111231 8.500000 11.900000 106.120149 8.500000 12.000000 108.149066 8.500000 12.100000 110.197984 8.500000 12.200000 112.266902 8.500000 12.300000 114.355820 8.500000 12.400000 116.464738 8.500000 12.500000 118.593656 8.500000 12.600000 120.742574 8.500000 12.700000 122.911492 8.500000 12.800000 125.100409 8.500000 12.900000 127.309327 8.500000 13.000000 129.538245 8.500000 13.100000 131.787163 8.500000 13.200000 134.056081 8.500000 13.300000 136.344999 8.500000 13.400000 138.653917 8.500000 13.500000 140.982835 8.500000 13.600000 143.331752 8.500000 13.700000 145.700670 8.500000 13.800000 148.089588 8.500000 13.900000 150.498506 8.500000 14.000000 152.927424 8.500000 14.100000 155.376342 8.500000 14.200000 157.845260 8.500000 14.300000 160.334178 8.500000 14.400000 162.843095 8.500000 14.500000 165.372013 8.500000 14.600000 167.920931 8.500000 14.700000 170.489849 8.500000 14.800000 173.078767 8.500000 14.900000 175.687685 8.500000 15.000000 178.316603 8.600000 -5.000000 50.640756 8.600000 -4.900000 49.277324 8.600000 -4.800000 47.933892 8.600000 -4.700000 46.610460 8.600000 -4.600000 45.307028 8.600000 -4.500000 44.023595 8.600000 -4.400000 42.760163 8.600000 -4.300000 41.516731 8.600000 -4.200000 40.293299 8.600000 -4.100000 39.089866 8.600000 -4.000000 37.906434 8.600000 -3.900000 36.743002 8.600000 -3.800000 35.599570 8.600000 -3.700000 34.476137 8.600000 -3.600000 33.372705 8.600000 -3.500000 32.289273 8.600000 -3.400000 31.225841 8.600000 -3.300000 30.182408 8.600000 -3.200000 29.158976 8.600000 -3.100000 28.155544 8.600000 -3.000000 27.172112 8.600000 -2.900000 26.208679 8.600000 -2.800000 25.265247 8.600000 -2.700000 24.341815 8.600000 -2.600000 23.438383 8.600000 -2.500000 22.554951 8.600000 -2.400000 21.691518 8.600000 -2.300000 20.848086 8.600000 -2.200000 20.024654 8.600000 -2.100000 19.221222 8.600000 -2.000000 18.437789 8.600000 -1.900000 17.674357 8.600000 -1.800000 16.930925 8.600000 -1.700000 16.207493 8.600000 -1.600000 15.504060 8.600000 -1.500000 14.820628 8.600000 -1.400000 14.157196 8.600000 -1.300000 13.513764 8.600000 -1.200000 12.890331 8.600000 -1.100000 12.286899 8.600000 -1.000000 11.703467 8.600000 -0.900000 11.140035 8.600000 -0.800000 10.596602 8.600000 -0.700000 10.073170 8.600000 -0.600000 9.569738 8.600000 -0.500000 9.086306 8.600000 -0.400000 8.622874 8.600000 -0.300000 8.179441 8.600000 -0.200000 7.756009 8.600000 -0.100000 7.352577 8.600000 -0.000000 6.969145 8.600000 0.100000 6.605712 8.600000 0.200000 6.262280 8.600000 0.300000 5.938848 8.600000 0.400000 5.635416 8.600000 0.500000 5.351983 8.600000 0.600000 5.088551 8.600000 0.700000 4.845119 8.600000 0.800000 4.621687 8.600000 0.900000 4.418254 8.600000 1.000000 4.234822 8.600000 1.100000 4.071390 8.600000 1.200000 3.927958 8.600000 1.300000 3.804525 8.600000 1.400000 3.701093 8.600000 1.500000 3.617661 8.600000 1.600000 3.554229 8.600000 1.700000 3.510797 8.600000 1.800000 3.487364 8.600000 1.900000 3.483932 8.600000 2.000000 3.500500 8.600000 2.100000 3.537068 8.600000 2.200000 3.593635 8.600000 2.300000 3.670203 8.600000 2.400000 3.766771 8.600000 2.500000 3.883339 8.600000 2.600000 4.019906 8.600000 2.700000 4.176474 8.600000 2.800000 4.353042 8.600000 2.900000 4.549610 8.600000 3.000000 4.766177 8.600000 3.100000 5.002745 8.600000 3.200000 5.259313 8.600000 3.300000 5.535881 8.600000 3.400000 5.832448 8.600000 3.500000 6.149016 8.600000 3.600000 6.485584 8.600000 3.700000 6.842152 8.600000 3.800000 7.218720 8.600000 3.900000 7.615287 8.600000 4.000000 8.031855 8.600000 4.100000 8.468423 8.600000 4.200000 8.924991 8.600000 4.300000 9.401558 8.600000 4.400000 9.898126 8.600000 4.500000 10.414694 8.600000 4.600000 10.951262 8.600000 4.700000 11.507829 8.600000 4.800000 12.084397 8.600000 4.900000 12.680965 8.600000 5.000000 13.297533 8.600000 5.100000 13.934100 8.600000 5.200000 14.590668 8.600000 5.300000 15.267236 8.600000 5.400000 15.963804 8.600000 5.500000 16.680371 8.600000 5.600000 17.416939 8.600000 5.700000 18.173507 8.600000 5.800000 18.950075 8.600000 5.900000 19.746643 8.600000 6.000000 20.563210 8.600000 6.100000 21.399778 8.600000 6.200000 22.256346 8.600000 6.300000 23.132914 8.600000 6.400000 24.029481 8.600000 6.500000 24.946049 8.600000 6.600000 25.882617 8.600000 6.700000 26.839185 8.600000 6.800000 27.815752 8.600000 6.900000 28.812320 8.600000 7.000000 29.828888 8.600000 7.100000 30.865456 8.600000 7.200000 31.922023 8.600000 7.300000 32.998591 8.600000 7.400000 34.095159 8.600000 7.500000 35.211727 8.600000 7.600000 36.348294 8.600000 7.700000 37.504862 8.600000 7.800000 38.681430 8.600000 7.900000 39.877998 8.600000 8.000000 41.094566 8.600000 8.100000 42.331133 8.600000 8.200000 43.587701 8.600000 8.300000 44.864269 8.600000 8.400000 46.160837 8.600000 8.500000 47.477404 8.600000 8.600000 48.813972 8.600000 8.700000 50.170540 8.600000 8.800000 51.547108 8.600000 8.900000 52.943675 8.600000 9.000000 54.360243 8.600000 9.100000 55.796811 8.600000 9.200000 57.253379 8.600000 9.300000 58.729946 8.600000 9.400000 60.226514 8.600000 9.500000 61.743082 8.600000 9.600000 63.279650 8.600000 9.700000 64.836217 8.600000 9.800000 66.412785 8.600000 9.900000 68.009353 8.600000 10.000000 69.625921 8.600000 10.100000 71.262489 8.600000 10.200000 72.919056 8.600000 10.300000 74.595624 8.600000 10.400000 76.292192 8.600000 10.500000 78.008760 8.600000 10.600000 79.745327 8.600000 10.700000 81.501895 8.600000 10.800000 83.278463 8.600000 10.900000 85.075031 8.600000 11.000000 86.891598 8.600000 11.100000 88.728166 8.600000 11.200000 90.584734 8.600000 11.300000 92.461302 8.600000 11.400000 94.357869 8.600000 11.500000 96.274437 8.600000 11.600000 98.211005 8.600000 11.700000 100.167573 8.600000 11.800000 102.144140 8.600000 11.900000 104.140708 8.600000 12.000000 106.157276 8.600000 12.100000 108.193844 8.600000 12.200000 110.250412 8.600000 12.300000 112.326979 8.600000 12.400000 114.423547 8.600000 12.500000 116.540115 8.600000 12.600000 118.676683 8.600000 12.700000 120.833250 8.600000 12.800000 123.009818 8.600000 12.900000 125.206386 8.600000 13.000000 127.422954 8.600000 13.100000 129.659521 8.600000 13.200000 131.916089 8.600000 13.300000 134.192657 8.600000 13.400000 136.489225 8.600000 13.500000 138.805792 8.600000 13.600000 141.142360 8.600000 13.700000 143.498928 8.600000 13.800000 145.875496 8.600000 13.900000 148.272063 8.600000 14.000000 150.688631 8.600000 14.100000 153.125199 8.600000 14.200000 155.581767 8.600000 14.300000 158.058335 8.600000 14.400000 160.554902 8.600000 14.500000 163.071470 8.600000 14.600000 165.608038 8.600000 14.700000 168.164606 8.600000 14.800000 170.741173 8.600000 14.900000 173.337741 8.600000 15.000000 175.954309 8.700000 -5.000000 50.857040 8.700000 -4.900000 49.480741 8.700000 -4.800000 48.124442 8.700000 -4.700000 46.788142 8.700000 -4.600000 45.471843 8.700000 -4.500000 44.175544 8.700000 -4.400000 42.899245 8.700000 -4.300000 41.642946 8.700000 -4.200000 40.406647 8.700000 -4.100000 39.190348 8.700000 -4.000000 37.994049 8.700000 -3.900000 36.817750 8.700000 -3.800000 35.661451 8.700000 -3.700000 34.525152 8.700000 -3.600000 33.408852 8.700000 -3.500000 32.312553 8.700000 -3.400000 31.236254 8.700000 -3.300000 30.179955 8.700000 -3.200000 29.143656 8.700000 -3.100000 28.127357 8.700000 -3.000000 27.131058 8.700000 -2.900000 26.154759 8.700000 -2.800000 25.198460 8.700000 -2.700000 24.262161 8.700000 -2.600000 23.345862 8.700000 -2.500000 22.449562 8.700000 -2.400000 21.573263 8.700000 -2.300000 20.716964 8.700000 -2.200000 19.880665 8.700000 -2.100000 19.064366 8.700000 -2.000000 18.268067 8.700000 -1.900000 17.491768 8.700000 -1.800000 16.735469 8.700000 -1.700000 15.999170 8.700000 -1.600000 15.282871 8.700000 -1.500000 14.586572 8.700000 -1.400000 13.910273 8.700000 -1.300000 13.253973 8.700000 -1.200000 12.617674 8.700000 -1.100000 12.001375 8.700000 -1.000000 11.405076 8.700000 -0.900000 10.828777 8.700000 -0.800000 10.272478 8.700000 -0.700000 9.736179 8.700000 -0.600000 9.219880 8.700000 -0.500000 8.723581 8.700000 -0.400000 8.247282 8.700000 -0.300000 7.790983 8.700000 -0.200000 7.354683 8.700000 -0.100000 6.938384 8.700000 -0.000000 6.542085 8.700000 0.100000 6.165786 8.700000 0.200000 5.809487 8.700000 0.300000 5.473188 8.700000 0.400000 5.156889 8.700000 0.500000 4.860590 8.700000 0.600000 4.584291 8.700000 0.700000 4.327992 8.700000 0.800000 4.091693 8.700000 0.900000 3.875393 8.700000 1.000000 3.679094 8.700000 1.100000 3.502795 8.700000 1.200000 3.346496 8.700000 1.300000 3.210197 8.700000 1.400000 3.093898 8.700000 1.500000 2.997599 8.700000 1.600000 2.921300 8.700000 1.700000 2.865001 8.700000 1.800000 2.828702 8.700000 1.900000 2.812403 8.700000 2.000000 2.816103 8.700000 2.100000 2.839804 8.700000 2.200000 2.883505 8.700000 2.300000 2.947206 8.700000 2.400000 3.030907 8.700000 2.500000 3.134608 8.700000 2.600000 3.258309 8.700000 2.700000 3.402010 8.700000 2.800000 3.565711 8.700000 2.900000 3.749412 8.700000 3.000000 3.953113 8.700000 3.100000 4.176813 8.700000 3.200000 4.420514 8.700000 3.300000 4.684215 8.700000 3.400000 4.967916 8.700000 3.500000 5.271617 8.700000 3.600000 5.595318 8.700000 3.700000 5.939019 8.700000 3.800000 6.302720 8.700000 3.900000 6.686421 8.700000 4.000000 7.090122 8.700000 4.100000 7.513823 8.700000 4.200000 7.957523 8.700000 4.300000 8.421224 8.700000 4.400000 8.904925 8.700000 4.500000 9.408626 8.700000 4.600000 9.932327 8.700000 4.700000 10.476028 8.700000 4.800000 11.039729 8.700000 4.900000 11.623430 8.700000 5.000000 12.227131 8.700000 5.100000 12.850832 8.700000 5.200000 13.494533 8.700000 5.300000 14.158233 8.700000 5.400000 14.841934 8.700000 5.500000 15.545635 8.700000 5.600000 16.269336 8.700000 5.700000 17.013037 8.700000 5.800000 17.776738 8.700000 5.900000 18.560439 8.700000 6.000000 19.364140 8.700000 6.100000 20.187841 8.700000 6.200000 21.031542 8.700000 6.300000 21.895243 8.700000 6.400000 22.778944 8.700000 6.500000 23.682644 8.700000 6.600000 24.606345 8.700000 6.700000 25.550046 8.700000 6.800000 26.513747 8.700000 6.900000 27.497448 8.700000 7.000000 28.501149 8.700000 7.100000 29.524850 8.700000 7.200000 30.568551 8.700000 7.300000 31.632252 8.700000 7.400000 32.715953 8.700000 7.500000 33.819654 8.700000 7.600000 34.943354 8.700000 7.700000 36.087055 8.700000 7.800000 37.250756 8.700000 7.900000 38.434457 8.700000 8.000000 39.638158 8.700000 8.100000 40.861859 8.700000 8.200000 42.105560 8.700000 8.300000 43.369261 8.700000 8.400000 44.652962 8.700000 8.500000 45.956663 8.700000 8.600000 47.280364 8.700000 8.700000 48.624064 8.700000 8.800000 49.987765 8.700000 8.900000 51.371466 8.700000 9.000000 52.775167 8.700000 9.100000 54.198868 8.700000 9.200000 55.642569 8.700000 9.300000 57.106270 8.700000 9.400000 58.589971 8.700000 9.500000 60.093672 8.700000 9.600000 61.617373 8.700000 9.700000 63.161074 8.700000 9.800000 64.724774 8.700000 9.900000 66.308475 8.700000 10.000000 67.912176 8.700000 10.100000 69.535877 8.700000 10.200000 71.179578 8.700000 10.300000 72.843279 8.700000 10.400000 74.526980 8.700000 10.500000 76.230681 8.700000 10.600000 77.954382 8.700000 10.700000 79.698083 8.700000 10.800000 81.461784 8.700000 10.900000 83.245484 8.700000 11.000000 85.049185 8.700000 11.100000 86.872886 8.700000 11.200000 88.716587 8.700000 11.300000 90.580288 8.700000 11.400000 92.463989 8.700000 11.500000 94.367690 8.700000 11.600000 96.291391 8.700000 11.700000 98.235092 8.700000 11.800000 100.198793 8.700000 11.900000 102.182494 8.700000 12.000000 104.186194 8.700000 12.100000 106.209895 8.700000 12.200000 108.253596 8.700000 12.300000 110.317297 8.700000 12.400000 112.400998 8.700000 12.500000 114.504699 8.700000 12.600000 116.628400 8.700000 12.700000 118.772101 8.700000 12.800000 120.935802 8.700000 12.900000 123.119503 8.700000 13.000000 125.323204 8.700000 13.100000 127.546905 8.700000 13.200000 129.790605 8.700000 13.300000 132.054306 8.700000 13.400000 134.338007 8.700000 13.500000 136.641708 8.700000 13.600000 138.965409 8.700000 13.700000 141.309110 8.700000 13.800000 143.672811 8.700000 13.900000 146.056512 8.700000 14.000000 148.460213 8.700000 14.100000 150.883914 8.700000 14.200000 153.327615 8.700000 14.300000 155.791315 8.700000 14.400000 158.275016 8.700000 14.500000 160.778717 8.700000 14.600000 163.302418 8.700000 14.700000 165.846119 8.700000 14.800000 168.409820 8.700000 14.900000 170.993521 8.700000 15.000000 173.597222 8.800000 -5.000000 51.189584 8.800000 -4.900000 49.799901 8.800000 -4.800000 48.430218 8.800000 -4.700000 47.080536 8.800000 -4.600000 45.750853 8.800000 -4.500000 44.441170 8.800000 -4.400000 43.151488 8.800000 -4.300000 41.881805 8.800000 -4.200000 40.632122 8.800000 -4.100000 39.402439 8.800000 -4.000000 38.192757 8.800000 -3.900000 37.003074 8.800000 -3.800000 35.833391 8.800000 -3.700000 34.683709 8.800000 -3.600000 33.554026 8.800000 -3.500000 32.444343 8.800000 -3.400000 31.354661 8.800000 -3.300000 30.284978 8.800000 -3.200000 29.235295 8.800000 -3.100000 28.205613 8.800000 -3.000000 27.195930 8.800000 -2.900000 26.206247 8.800000 -2.800000 25.236565 8.800000 -2.700000 24.286882 8.800000 -2.600000 23.357199 8.800000 -2.500000 22.447517 8.800000 -2.400000 21.557834 8.800000 -2.300000 20.688151 8.800000 -2.200000 19.838469 8.800000 -2.100000 19.008786 8.800000 -2.000000 18.199103 8.800000 -1.900000 17.409421 8.800000 -1.800000 16.639738 8.800000 -1.700000 15.890055 8.800000 -1.600000 15.160372 8.800000 -1.500000 14.450690 8.800000 -1.400000 13.761007 8.800000 -1.300000 13.091324 8.800000 -1.200000 12.441642 8.800000 -1.100000 11.811959 8.800000 -1.000000 11.202276 8.800000 -0.900000 10.612594 8.800000 -0.800000 10.042911 8.800000 -0.700000 9.493228 8.800000 -0.600000 8.963546 8.800000 -0.500000 8.453863 8.800000 -0.400000 7.964180 8.800000 -0.300000 7.494498 8.800000 -0.200000 7.044815 8.800000 -0.100000 6.615132 8.800000 -0.000000 6.205450 8.800000 0.100000 5.815767 8.800000 0.200000 5.446084 8.800000 0.300000 5.096402 8.800000 0.400000 4.766719 8.800000 0.500000 4.457036 8.800000 0.600000 4.167354 8.800000 0.700000 3.897671 8.800000 0.800000 3.647988 8.800000 0.900000 3.418306 8.800000 1.000000 3.208623 8.800000 1.100000 3.018940 8.800000 1.200000 2.849257 8.800000 1.300000 2.699575 8.800000 1.400000 2.569892 8.800000 1.500000 2.460209 8.800000 1.600000 2.370527 8.800000 1.700000 2.300844 8.800000 1.800000 2.251161 8.800000 1.900000 2.221479 8.800000 2.000000 2.211796 8.800000 2.100000 2.222113 8.800000 2.200000 2.252431 8.800000 2.300000 2.302748 8.800000 2.400000 2.373065 8.800000 2.500000 2.463383 8.800000 2.600000 2.573700 8.800000 2.700000 2.704017 8.800000 2.800000 2.854335 8.800000 2.900000 3.024652 8.800000 3.000000 3.214969 8.800000 3.100000 3.425287 8.800000 3.200000 3.655604 8.800000 3.300000 3.905921 8.800000 3.400000 4.176239 8.800000 3.500000 4.466556 8.800000 3.600000 4.776873 8.800000 3.700000 5.107190 8.800000 3.800000 5.457508 8.800000 3.900000 5.827825 8.800000 4.000000 6.218142 8.800000 4.100000 6.628460 8.800000 4.200000 7.058777 8.800000 4.300000 7.509094 8.800000 4.400000 7.979412 8.800000 4.500000 8.469729 8.800000 4.600000 8.980046 8.800000 4.700000 9.510364 8.800000 4.800000 10.060681 8.800000 4.900000 10.630998 8.800000 5.000000 11.221316 8.800000 5.100000 11.831633 8.800000 5.200000 12.461950 8.800000 5.300000 13.112268 8.800000 5.400000 13.782585 8.800000 5.500000 14.472902 8.800000 5.600000 15.183220 8.800000 5.700000 15.913537 8.800000 5.800000 16.663854 8.800000 5.900000 17.434172 8.800000 6.000000 18.224489 8.800000 6.100000 19.034806 8.800000 6.200000 19.865124 8.800000 6.300000 20.715441 8.800000 6.400000 21.585758 8.800000 6.500000 22.476075 8.800000 6.600000 23.386393 8.800000 6.700000 24.316710 8.800000 6.800000 25.267027 8.800000 6.900000 26.237345 8.800000 7.000000 27.227662 8.800000 7.100000 28.237979 8.800000 7.200000 29.268297 8.800000 7.300000 30.318614 8.800000 7.400000 31.388931 8.800000 7.500000 32.479249 8.800000 7.600000 33.589566 8.800000 7.700000 34.719883 8.800000 7.800000 35.870201 8.800000 7.900000 37.040518 8.800000 8.000000 38.230835 8.800000 8.100000 39.441153 8.800000 8.200000 40.671470 8.800000 8.300000 41.921787 8.800000 8.400000 43.192105 8.800000 8.500000 44.482422 8.800000 8.600000 45.792739 8.800000 8.700000 47.123057 8.800000 8.800000 48.473374 8.800000 8.900000 49.843691 8.800000 9.000000 51.234008 8.800000 9.100000 52.644326 8.800000 9.200000 54.074643 8.800000 9.300000 55.524960 8.800000 9.400000 56.995278 8.800000 9.500000 58.485595 8.800000 9.600000 59.995912 8.800000 9.700000 61.526230 8.800000 9.800000 63.076547 8.800000 9.900000 64.646864 8.800000 10.000000 66.237182 8.800000 10.100000 67.847499 8.800000 10.200000 69.477816 8.800000 10.300000 71.128134 8.800000 10.400000 72.798451 8.800000 10.500000 74.488768 8.800000 10.600000 76.199086 8.800000 10.700000 77.929403 8.800000 10.800000 79.679720 8.800000 10.900000 81.450038 8.800000 11.000000 83.240355 8.800000 11.100000 85.050672 8.800000 11.200000 86.880990 8.800000 11.300000 88.731307 8.800000 11.400000 90.601624 8.800000 11.500000 92.491942 8.800000 11.600000 94.402259 8.800000 11.700000 96.332576 8.800000 11.800000 98.282893 8.800000 11.900000 100.253211 8.800000 12.000000 102.243528 8.800000 12.100000 104.253845 8.800000 12.200000 106.284163 8.800000 12.300000 108.334480 8.800000 12.400000 110.404797 8.800000 12.500000 112.495115 8.800000 12.600000 114.605432 8.800000 12.700000 116.735749 8.800000 12.800000 118.886067 8.800000 12.900000 121.056384 8.800000 13.000000 123.246701 8.800000 13.100000 125.457019 8.800000 13.200000 127.687336 8.800000 13.300000 129.937653 8.800000 13.400000 132.207971 8.800000 13.500000 134.498288 8.800000 13.600000 136.808605 8.800000 13.700000 139.138923 8.800000 13.800000 141.489240 8.800000 13.900000 143.859557 8.800000 14.000000 146.249875 8.800000 14.100000 148.660192 8.800000 14.200000 151.090509 8.800000 14.300000 153.540826 8.800000 14.400000 156.011144 8.800000 14.500000 158.501461 8.800000 14.600000 161.011778 8.800000 14.700000 163.542096 8.800000 14.800000 166.092413 8.800000 14.900000 168.662730 8.800000 15.000000 171.253048 8.900000 -5.000000 51.645417 8.900000 -4.900000 50.241834 8.900000 -4.800000 48.858251 8.900000 -4.700000 47.494668 8.900000 -4.600000 46.151085 8.900000 -4.500000 44.827502 8.900000 -4.400000 43.523919 8.900000 -4.300000 42.240336 8.900000 -4.200000 40.976753 8.900000 -4.100000 39.733170 8.900000 -4.000000 38.509586 8.900000 -3.900000 37.306003 8.900000 -3.800000 36.122420 8.900000 -3.700000 34.958837 8.900000 -3.600000 33.815254 8.900000 -3.500000 32.691671 8.900000 -3.400000 31.588088 8.900000 -3.300000 30.504505 8.900000 -3.200000 29.440922 8.900000 -3.100000 28.397339 8.900000 -3.000000 27.373756 8.900000 -2.900000 26.370173 8.900000 -2.800000 25.386590 8.900000 -2.700000 24.423007 8.900000 -2.600000 23.479424 8.900000 -2.500000 22.555841 8.900000 -2.400000 21.652258 8.900000 -2.300000 20.768675 8.900000 -2.200000 19.905092 8.900000 -2.100000 19.061509 8.900000 -2.000000 18.237926 8.900000 -1.900000 17.434343 8.900000 -1.800000 16.650760 8.900000 -1.700000 15.887177 8.900000 -1.600000 15.143594 8.900000 -1.500000 14.420011 8.900000 -1.400000 13.716428 8.900000 -1.300000 13.032845 8.900000 -1.200000 12.369262 8.900000 -1.100000 11.725679 8.900000 -1.000000 11.102096 8.900000 -0.900000 10.498513 8.900000 -0.800000 9.914930 8.900000 -0.700000 9.351347 8.900000 -0.600000 8.807764 8.900000 -0.500000 8.284181 8.900000 -0.400000 7.780598 8.900000 -0.300000 7.297015 8.900000 -0.200000 6.833432 8.900000 -0.100000 6.389849 8.900000 -0.000000 5.966266 8.900000 0.100000 5.562683 8.900000 0.200000 5.179100 8.900000 0.300000 4.815517 8.900000 0.400000 4.471934 8.900000 0.500000 4.148351 8.900000 0.600000 3.844768 8.900000 0.700000 3.561185 8.900000 0.800000 3.297602 8.900000 0.900000 3.054019 8.900000 1.000000 2.830436 8.900000 1.100000 2.626853 8.900000 1.200000 2.443270 8.900000 1.300000 2.279687 8.900000 1.400000 2.136104 8.900000 1.500000 2.012521 8.900000 1.600000 1.908938 8.900000 1.700000 1.825355 8.900000 1.800000 1.761772 8.900000 1.900000 1.718189 8.900000 2.000000 1.694606 8.900000 2.100000 1.691023 8.900000 2.200000 1.707440 8.900000 2.300000 1.743857 8.900000 2.400000 1.800274 8.900000 2.500000 1.876691 8.900000 2.600000 1.973108 8.900000 2.700000 2.089525 8.900000 2.800000 2.225942 8.900000 2.900000 2.382359 8.900000 3.000000 2.558776 8.900000 3.100000 2.755193 8.900000 3.200000 2.971610 8.900000 3.300000 3.208027 8.900000 3.400000 3.464444 8.900000 3.500000 3.740861 8.900000 3.600000 4.037278 8.900000 3.700000 4.353695 8.900000 3.800000 4.690112 8.900000 3.900000 5.046529 8.900000 4.000000 5.422946 8.900000 4.100000 5.819363 8.900000 4.200000 6.235780 8.900000 4.300000 6.672197 8.900000 4.400000 7.128614 8.900000 4.500000 7.605031 8.900000 4.600000 8.101448 8.900000 4.700000 8.617865 8.900000 4.800000 9.154282 8.900000 4.900000 9.710699 8.900000 5.000000 10.287116 8.900000 5.100000 10.883533 8.900000 5.200000 11.499950 8.900000 5.300000 12.136367 8.900000 5.400000 12.792784 8.900000 5.500000 13.469201 8.900000 5.600000 14.165618 8.900000 5.700000 14.882035 8.900000 5.800000 15.618452 8.900000 5.900000 16.374869 8.900000 6.000000 17.151286 8.900000 6.100000 17.947703 8.900000 6.200000 18.764120 8.900000 6.300000 19.600537 8.900000 6.400000 20.456954 8.900000 6.500000 21.333371 8.900000 6.600000 22.229788 8.900000 6.700000 23.146205 8.900000 6.800000 24.082622 8.900000 6.900000 25.039039 8.900000 7.000000 26.015456 8.900000 7.100000 27.011873 8.900000 7.200000 28.028290 8.900000 7.300000 29.064707 8.900000 7.400000 30.121124 8.900000 7.500000 31.197541 8.900000 7.600000 32.293958 8.900000 7.700000 33.410375 8.900000 7.800000 34.546792 8.900000 7.900000 35.703209 8.900000 8.000000 36.879626 8.900000 8.100000 38.076043 8.900000 8.200000 39.292460 8.900000 8.300000 40.528877 8.900000 8.400000 41.785294 8.900000 8.500000 43.061711 8.900000 8.600000 44.358128 8.900000 8.700000 45.674545 8.900000 8.800000 47.010962 8.900000 8.900000 48.367379 8.900000 9.000000 49.743796 8.900000 9.100000 51.140213 8.900000 9.200000 52.556630 8.900000 9.300000 53.993047 8.900000 9.400000 55.449464 8.900000 9.500000 56.925881 8.900000 9.600000 58.422298 8.900000 9.700000 59.938715 8.900000 9.800000 61.475132 8.900000 9.900000 63.031549 8.900000 10.000000 64.607966 8.900000 10.100000 66.204383 8.900000 10.200000 67.820800 8.900000 10.300000 69.457217 8.900000 10.400000 71.113634 8.900000 10.500000 72.790051 8.900000 10.600000 74.486468 8.900000 10.700000 76.202884 8.900000 10.800000 77.939301 8.900000 10.900000 79.695718 8.900000 11.000000 81.472135 8.900000 11.100000 83.268552 8.900000 11.200000 85.084969 8.900000 11.300000 86.921386 8.900000 11.400000 88.777803 8.900000 11.500000 90.654220 8.900000 11.600000 92.550637 8.900000 11.700000 94.467054 8.900000 11.800000 96.403471 8.900000 11.900000 98.359888 8.900000 12.000000 100.336305 8.900000 12.100000 102.332722 8.900000 12.200000 104.349139 8.900000 12.300000 106.385556 8.900000 12.400000 108.441973 8.900000 12.500000 110.518390 8.900000 12.600000 112.614807 8.900000 12.700000 114.731224 8.900000 12.800000 116.867641 8.900000 12.900000 119.024058 8.900000 13.000000 121.200475 8.900000 13.100000 123.396892 8.900000 13.200000 125.613309 8.900000 13.300000 127.849726 8.900000 13.400000 130.106143 8.900000 13.500000 132.382560 8.900000 13.600000 134.678977 8.900000 13.700000 136.995394 8.900000 13.800000 139.331811 8.900000 13.900000 141.688228 8.900000 14.000000 144.064645 8.900000 14.100000 146.461062 8.900000 14.200000 148.877479 8.900000 14.300000 151.313896 8.900000 14.400000 153.770313 8.900000 14.500000 156.246730 8.900000 14.600000 158.743147 8.900000 14.700000 161.259564 8.900000 14.800000 163.795981 8.900000 14.900000 166.352398 8.900000 15.000000 168.928815 9.000000 -5.000000 52.230830 9.000000 -4.900000 50.812830 9.000000 -4.800000 49.414830 9.000000 -4.700000 48.036830 9.000000 -4.600000 46.678829 9.000000 -4.500000 45.340829 9.000000 -4.400000 44.022829 9.000000 -4.300000 42.724829 9.000000 -4.200000 41.446829 9.000000 -4.100000 40.188829 9.000000 -4.000000 38.950829 9.000000 -3.900000 37.732829 9.000000 -3.800000 36.534829 9.000000 -3.700000 35.356829 9.000000 -3.600000 34.198829 9.000000 -3.500000 33.060829 9.000000 -3.400000 31.942829 9.000000 -3.300000 30.844829 9.000000 -3.200000 29.766828 9.000000 -3.100000 28.708828 9.000000 -3.000000 27.670828 9.000000 -2.900000 26.652828 9.000000 -2.800000 25.654828 9.000000 -2.700000 24.676828 9.000000 -2.600000 23.718828 9.000000 -2.500000 22.780828 9.000000 -2.400000 21.862828 9.000000 -2.300000 20.964828 9.000000 -2.200000 20.086828 9.000000 -2.100000 19.228828 9.000000 -2.000000 18.390828 9.000000 -1.900000 17.572828 9.000000 -1.800000 16.774827 9.000000 -1.700000 15.996827 9.000000 -1.600000 15.238827 9.000000 -1.500000 14.500827 9.000000 -1.400000 13.782827 9.000000 -1.300000 13.084827 9.000000 -1.200000 12.406827 9.000000 -1.100000 11.748827 9.000000 -1.000000 11.110827 9.000000 -0.900000 10.492827 9.000000 -0.800000 9.894827 9.000000 -0.700000 9.316827 9.000000 -0.600000 8.758827 9.000000 -0.500000 8.220827 9.000000 -0.400000 7.702826 9.000000 -0.300000 7.204826 9.000000 -0.200000 6.726826 9.000000 -0.100000 6.268826 9.000000 -0.000000 5.830826 9.000000 0.100000 5.412826 9.000000 0.200000 5.014826 9.000000 0.300000 4.636826 9.000000 0.400000 4.278826 9.000000 0.500000 3.940826 9.000000 0.600000 3.622826 9.000000 0.700000 3.324826 9.000000 0.800000 3.046826 9.000000 0.900000 2.788825 9.000000 1.000000 2.550825 9.000000 1.100000 2.332825 9.000000 1.200000 2.134825 9.000000 1.300000 1.956825 9.000000 1.400000 1.798825 9.000000 1.500000 1.660825 9.000000 1.600000 1.542825 9.000000 1.700000 1.444825 9.000000 1.800000 1.366825 9.000000 1.900000 1.308825 9.000000 2.000000 1.270825 9.000000 2.100000 1.252825 9.000000 2.200000 1.254825 9.000000 2.300000 1.276824 9.000000 2.400000 1.318824 9.000000 2.500000 1.380824 9.000000 2.600000 1.462824 9.000000 2.700000 1.564824 9.000000 2.800000 1.686824 9.000000 2.900000 1.828824 9.000000 3.000000 1.990824 9.000000 3.100000 2.172824 9.000000 3.200000 2.374824 9.000000 3.300000 2.596824 9.000000 3.400000 2.838824 9.000000 3.500000 3.100824 9.000000 3.600000 3.382824 9.000000 3.700000 3.684823 9.000000 3.800000 4.006823 9.000000 3.900000 4.348823 9.000000 4.000000 4.710823 9.000000 4.100000 5.092823 9.000000 4.200000 5.494823 9.000000 4.300000 5.916823 9.000000 4.400000 6.358823 9.000000 4.500000 6.820823 9.000000 4.600000 7.302823 9.000000 4.700000 7.804823 9.000000 4.800000 8.326823 9.000000 4.900000 8.868823 9.000000 5.000000 9.430823 9.000000 5.100000 10.012822 9.000000 5.200000 10.614822 9.000000 5.300000 11.236822 9.000000 5.400000 11.878822 9.000000 5.500000 12.540822 9.000000 5.600000 13.222822 9.000000 5.700000 13.924822 9.000000 5.800000 14.646822 9.000000 5.900000 15.388822 9.000000 6.000000 16.150822 9.000000 6.100000 16.932822 9.000000 6.200000 17.734822 9.000000 6.300000 18.556822 9.000000 6.400000 19.398822 9.000000 6.500000 20.260821 9.000000 6.600000 21.142821 9.000000 6.700000 22.044821 9.000000 6.800000 22.966821 9.000000 6.900000 23.908821 9.000000 7.000000 24.870821 9.000000 7.100000 25.852821 9.000000 7.200000 26.854821 9.000000 7.300000 27.876821 9.000000 7.400000 28.918821 9.000000 7.500000 29.980821 9.000000 7.600000 31.062821 9.000000 7.700000 32.164821 9.000000 7.800000 33.286820 9.000000 7.900000 34.428820 9.000000 8.000000 35.590820 9.000000 8.100000 36.772820 9.000000 8.200000 37.974820 9.000000 8.300000 39.196820 9.000000 8.400000 40.438820 9.000000 8.500000 41.700820 9.000000 8.600000 42.982820 9.000000 8.700000 44.284820 9.000000 8.800000 45.606820 9.000000 8.900000 46.948820 9.000000 9.000000 48.310820 9.000000 9.100000 49.692820 9.000000 9.200000 51.094819 9.000000 9.300000 52.516819 9.000000 9.400000 53.958819 9.000000 9.500000 55.420819 9.000000 9.600000 56.902819 9.000000 9.700000 58.404819 9.000000 9.800000 59.926819 9.000000 9.900000 61.468819 9.000000 10.000000 63.030819 9.000000 10.100000 64.612819 9.000000 10.200000 66.214819 9.000000 10.300000 67.836819 9.000000 10.400000 69.478819 9.000000 10.500000 71.140819 9.000000 10.600000 72.822818 9.000000 10.700000 74.524818 9.000000 10.800000 76.246818 9.000000 10.900000 77.988818 9.000000 11.000000 79.750818 9.000000 11.100000 81.532818 9.000000 11.200000 83.334818 9.000000 11.300000 85.156818 9.000000 11.400000 86.998818 9.000000 11.500000 88.860818 9.000000 11.600000 90.742818 9.000000 11.700000 92.644818 9.000000 11.800000 94.566818 9.000000 11.900000 96.508818 9.000000 12.000000 98.470817 9.000000 12.100000 100.452817 9.000000 12.200000 102.454817 9.000000 12.300000 104.476817 9.000000 12.400000 106.518817 9.000000 12.500000 108.580817 9.000000 12.600000 110.662817 9.000000 12.700000 112.764817 9.000000 12.800000 114.886817 9.000000 12.900000 117.028817 9.000000 13.000000 119.190817 9.000000 13.100000 121.372817 9.000000 13.200000 123.574817 9.000000 13.300000 125.796817 9.000000 13.400000 128.038816 9.000000 13.500000 130.300816 9.000000 13.600000 132.582816 9.000000 13.700000 134.884816 9.000000 13.800000 137.206816 9.000000 13.900000 139.548816 9.000000 14.000000 141.910816 9.000000 14.100000 144.292816 9.000000 14.200000 146.694816 9.000000 14.300000 149.116816 9.000000 14.400000 151.558816 9.000000 14.500000 154.020816 9.000000 14.600000 156.502816 9.000000 14.700000 159.004815 9.000000 14.800000 161.526815 9.000000 14.900000 164.068815 9.000000 15.000000 166.630815 9.100000 -5.000000 52.951325 9.100000 -4.900000 51.518391 9.100000 -4.800000 50.105457 9.100000 -4.700000 48.712523 9.100000 -4.600000 47.339589 9.100000 -4.500000 45.986655 9.100000 -4.400000 44.653721 9.100000 -4.300000 43.340788 9.100000 -4.200000 42.047854 9.100000 -4.100000 40.774920 9.100000 -4.000000 39.521986 9.100000 -3.900000 38.289052 9.100000 -3.800000 37.076118 9.100000 -3.700000 35.883184 9.100000 -3.600000 34.710250 9.100000 -3.500000 33.557317 9.100000 -3.400000 32.424383 9.100000 -3.300000 31.311449 9.100000 -3.200000 30.218515 9.100000 -3.100000 29.145581 9.100000 -3.000000 28.092647 9.100000 -2.900000 27.059713 9.100000 -2.800000 26.046779 9.100000 -2.700000 25.053846 9.100000 -2.600000 24.080912 9.100000 -2.500000 23.127978 9.100000 -2.400000 22.195044 9.100000 -2.300000 21.282110 9.100000 -2.200000 20.389176 9.100000 -2.100000 19.516242 9.100000 -2.000000 18.663308 9.100000 -1.900000 17.830375 9.100000 -1.800000 17.017441 9.100000 -1.700000 16.224507 9.100000 -1.600000 15.451573 9.100000 -1.500000 14.698639 9.100000 -1.400000 13.965705 9.100000 -1.300000 13.252771 9.100000 -1.200000 12.559837 9.100000 -1.100000 11.886904 9.100000 -1.000000 11.233970 9.100000 -0.900000 10.601036 9.100000 -0.800000 9.988102 9.100000 -0.700000 9.395168 9.100000 -0.600000 8.822234 9.100000 -0.500000 8.269300 9.100000 -0.400000 7.736366 9.100000 -0.300000 7.223433 9.100000 -0.200000 6.730499 9.100000 -0.100000 6.257565 9.100000 -0.000000 5.804631 9.100000 0.100000 5.371697 9.100000 0.200000 4.958763 9.100000 0.300000 4.565829 9.100000 0.400000 4.192895 9.100000 0.500000 3.839962 9.100000 0.600000 3.507028 9.100000 0.700000 3.194094 9.100000 0.800000 2.901160 9.100000 0.900000 2.628226 9.100000 1.000000 2.375292 9.100000 1.100000 2.142358 9.100000 1.200000 1.929424 9.100000 1.300000 1.736490 9.100000 1.400000 1.563557 9.100000 1.500000 1.410623 9.100000 1.600000 1.277689 9.100000 1.700000 1.164755 9.100000 1.800000 1.071821 9.100000 1.900000 0.998887 9.100000 2.000000 0.945953 9.100000 2.100000 0.913019 9.100000 2.200000 0.900086 9.100000 2.300000 0.907152 9.100000 2.400000 0.934218 9.100000 2.500000 0.981284 9.100000 2.600000 1.048350 9.100000 2.700000 1.135416 9.100000 2.800000 1.242482 9.100000 2.900000 1.369548 9.100000 3.000000 1.516615 9.100000 3.100000 1.683681 9.100000 3.200000 1.870747 9.100000 3.300000 2.077813 9.100000 3.400000 2.304879 9.100000 3.500000 2.551945 9.100000 3.600000 2.819011 9.100000 3.700000 3.106077 9.100000 3.800000 3.413144 9.100000 3.900000 3.740210 9.100000 4.000000 4.087276 9.100000 4.100000 4.454342 9.100000 4.200000 4.841408 9.100000 4.300000 5.248474 9.100000 4.400000 5.675540 9.100000 4.500000 6.122606 9.100000 4.600000 6.589673 9.100000 4.700000 7.076739 9.100000 4.800000 7.583805 9.100000 4.900000 8.110871 9.100000 5.000000 8.657937 9.100000 5.100000 9.225003 9.100000 5.200000 9.812069 9.100000 5.300000 10.419135 9.100000 5.400000 11.046202 9.100000 5.500000 11.693268 9.100000 5.600000 12.360334 9.100000 5.700000 13.047400 9.100000 5.800000 13.754466 9.100000 5.900000 14.481532 9.100000 6.000000 15.228598 9.100000 6.100000 15.995664 9.100000 6.200000 16.782731 9.100000 6.300000 17.589797 9.100000 6.400000 18.416863 9.100000 6.500000 19.263929 9.100000 6.600000 20.130995 9.100000 6.700000 21.018061 9.100000 6.800000 21.925127 9.100000 6.900000 22.852193 9.100000 7.000000 23.799260 9.100000 7.100000 24.766326 9.100000 7.200000 25.753392 9.100000 7.300000 26.760458 9.100000 7.400000 27.787524 9.100000 7.500000 28.834590 9.100000 7.600000 29.901656 9.100000 7.700000 30.988722 9.100000 7.800000 32.095789 9.100000 7.900000 33.222855 9.100000 8.000000 34.369921 9.100000 8.100000 35.536987 9.100000 8.200000 36.724053 9.100000 8.300000 37.931119 9.100000 8.400000 39.158185 9.100000 8.500000 40.405251 9.100000 8.600000 41.672318 9.100000 8.700000 42.959384 9.100000 8.800000 44.266450 9.100000 8.900000 45.593516 9.100000 9.000000 46.940582 9.100000 9.100000 48.307648 9.100000 9.200000 49.694714 9.100000 9.300000 51.101780 9.100000 9.400000 52.528847 9.100000 9.500000 53.975913 9.100000 9.600000 55.442979 9.100000 9.700000 56.930045 9.100000 9.800000 58.437111 9.100000 9.900000 59.964177 9.100000 10.000000 61.511243 9.100000 10.100000 63.078309 9.100000 10.200000 64.665376 9.100000 10.300000 66.272442 9.100000 10.400000 67.899508 9.100000 10.500000 69.546574 9.100000 10.600000 71.213640 9.100000 10.700000 72.900706 9.100000 10.800000 74.607772 9.100000 10.900000 76.334838 9.100000 11.000000 78.081905 9.100000 11.100000 79.848971 9.100000 11.200000 81.636037 9.100000 11.300000 83.443103 9.100000 11.400000 85.270169 9.100000 11.500000 87.117235 9.100000 11.600000 88.984301 9.100000 11.700000 90.871367 9.100000 11.800000 92.778434 9.100000 11.900000 94.705500 9.100000 12.000000 96.652566 9.100000 12.100000 98.619632 9.100000 12.200000 100.606698 9.100000 12.300000 102.613764 9.100000 12.400000 104.640830 9.100000 12.500000 106.687896 9.100000 12.600000 108.754962 9.100000 12.700000 110.842029 9.100000 12.800000 112.949095 9.100000 12.900000 115.076161 9.100000 13.000000 117.223227 9.100000 13.100000 119.390293 9.100000 13.200000 121.577359 9.100000 13.300000 123.784425 9.100000 13.400000 126.011491 9.100000 13.500000 128.258558 9.100000 13.600000 130.525624 9.100000 13.700000 132.812690 9.100000 13.800000 135.119756 9.100000 13.900000 137.446822 9.100000 14.000000 139.793888 9.100000 14.100000 142.160954 9.100000 14.200000 144.548020 9.100000 14.300000 146.955087 9.100000 14.400000 149.382153 9.100000 14.500000 151.829219 9.100000 14.600000 154.296285 9.100000 14.700000 156.783351 9.100000 14.800000 159.290417 9.100000 14.900000 161.817483 9.100000 15.000000 164.364549 9.200000 -5.000000 53.811569 9.200000 -4.900000 52.363185 9.200000 -4.800000 50.934801 9.200000 -4.700000 49.526416 9.200000 -4.600000 48.138032 9.200000 -4.500000 46.769647 9.200000 -4.400000 45.421263 9.200000 -4.300000 44.092879 9.200000 -4.200000 42.784494 9.200000 -4.100000 41.496110 9.200000 -4.000000 40.227725 9.200000 -3.900000 38.979341 9.200000 -3.800000 37.750956 9.200000 -3.700000 36.542572 9.200000 -3.600000 35.354188 9.200000 -3.500000 34.185803 9.200000 -3.400000 33.037419 9.200000 -3.300000 31.909034 9.200000 -3.200000 30.800650 9.200000 -3.100000 29.712266 9.200000 -3.000000 28.643881 9.200000 -2.900000 27.595497 9.200000 -2.800000 26.567112 9.200000 -2.700000 25.558728 9.200000 -2.600000 24.570343 9.200000 -2.500000 23.601959 9.200000 -2.400000 22.653575 9.200000 -2.300000 21.725190 9.200000 -2.200000 20.816806 9.200000 -2.100000 19.928421 9.200000 -2.000000 19.060037 9.200000 -1.900000 18.211653 9.200000 -1.800000 17.383268 9.200000 -1.700000 16.574884 9.200000 -1.600000 15.786499 9.200000 -1.500000 15.018115 9.200000 -1.400000 14.269730 9.200000 -1.300000 13.541346 9.200000 -1.200000 12.832962 9.200000 -1.100000 12.144577 9.200000 -1.000000 11.476193 9.200000 -0.900000 10.827808 9.200000 -0.800000 10.199424 9.200000 -0.700000 9.591040 9.200000 -0.600000 9.002655 9.200000 -0.500000 8.434271 9.200000 -0.400000 7.885886 9.200000 -0.300000 7.357502 9.200000 -0.200000 6.849117 9.200000 -0.100000 6.360733 9.200000 -0.000000 5.892349 9.200000 0.100000 5.443964 9.200000 0.200000 5.015580 9.200000 0.300000 4.607195 9.200000 0.400000 4.218811 9.200000 0.500000 3.850427 9.200000 0.600000 3.502042 9.200000 0.700000 3.173658 9.200000 0.800000 2.865273 9.200000 0.900000 2.576889 9.200000 1.000000 2.308504 9.200000 1.100000 2.060120 9.200000 1.200000 1.831736 9.200000 1.300000 1.623351 9.200000 1.400000 1.434967 9.200000 1.500000 1.266582 9.200000 1.600000 1.118198 9.200000 1.700000 0.989813 9.200000 1.800000 0.881429 9.200000 1.900000 0.793045 9.200000 2.000000 0.724660 9.200000 2.100000 0.676276 9.200000 2.200000 0.647891 9.200000 2.300000 0.639507 9.200000 2.400000 0.651123 9.200000 2.500000 0.682738 9.200000 2.600000 0.734354 9.200000 2.700000 0.805969 9.200000 2.800000 0.897585 9.200000 2.900000 1.009200 9.200000 3.000000 1.140816 9.200000 3.100000 1.292432 9.200000 3.200000 1.464047 9.200000 3.300000 1.655663 9.200000 3.400000 1.867278 9.200000 3.500000 2.098894 9.200000 3.600000 2.350510 9.200000 3.700000 2.622125 9.200000 3.800000 2.913741 9.200000 3.900000 3.225356 9.200000 4.000000 3.556972 9.200000 4.100000 3.908587 9.200000 4.200000 4.280203 9.200000 4.300000 4.671819 9.200000 4.400000 5.083434 9.200000 4.500000 5.515050 9.200000 4.600000 5.966665 9.200000 4.700000 6.438281 9.200000 4.800000 6.929897 9.200000 4.900000 7.441512 9.200000 5.000000 7.973128 9.200000 5.100000 8.524743 9.200000 5.200000 9.096359 9.200000 5.300000 9.687974 9.200000 5.400000 10.299590 9.200000 5.500000 10.931206 9.200000 5.600000 11.582821 9.200000 5.700000 12.254437 9.200000 5.800000 12.946052 9.200000 5.900000 13.657668 9.200000 6.000000 14.389284 9.200000 6.100000 15.140899 9.200000 6.200000 15.912515 9.200000 6.300000 16.704130 9.200000 6.400000 17.515746 9.200000 6.500000 18.347361 9.200000 6.600000 19.198977 9.200000 6.700000 20.070593 9.200000 6.800000 20.962208 9.200000 6.900000 21.873824 9.200000 7.000000 22.805439 9.200000 7.100000 23.757055 9.200000 7.200000 24.728671 9.200000 7.300000 25.720286 9.200000 7.400000 26.731902 9.200000 7.500000 27.763517 9.200000 7.600000 28.815133 9.200000 7.700000 29.886748 9.200000 7.800000 30.978364 9.200000 7.900000 32.089980 9.200000 8.000000 33.221595 9.200000 8.100000 34.373211 9.200000 8.200000 35.544826 9.200000 8.300000 36.736442 9.200000 8.400000 37.948057 9.200000 8.500000 39.179673 9.200000 8.600000 40.431289 9.200000 8.700000 41.702904 9.200000 8.800000 42.994520 9.200000 8.900000 44.306135 9.200000 9.000000 45.637751 9.200000 9.100000 46.989367 9.200000 9.200000 48.360982 9.200000 9.300000 49.752598 9.200000 9.400000 51.164213 9.200000 9.500000 52.595829 9.200000 9.600000 54.047444 9.200000 9.700000 55.519060 9.200000 9.800000 57.010676 9.200000 9.900000 58.522291 9.200000 10.000000 60.053907 9.200000 10.100000 61.605522 9.200000 10.200000 63.177138 9.200000 10.300000 64.768754 9.200000 10.400000 66.380369 9.200000 10.500000 68.011985 9.200000 10.600000 69.663600 9.200000 10.700000 71.335216 9.200000 10.800000 73.026831 9.200000 10.900000 74.738447 9.200000 11.000000 76.470063 9.200000 11.100000 78.221678 9.200000 11.200000 79.993294 9.200000 11.300000 81.784909 9.200000 11.400000 83.596525 9.200000 11.500000 85.428141 9.200000 11.600000 87.279756 9.200000 11.700000 89.151372 9.200000 11.800000 91.042987 9.200000 11.900000 92.954603 9.200000 12.000000 94.886218 9.200000 12.100000 96.837834 9.200000 12.200000 98.809450 9.200000 12.300000 100.801065 9.200000 12.400000 102.812681 9.200000 12.500000 104.844296 9.200000 12.600000 106.895912 9.200000 12.700000 108.967528 9.200000 12.800000 111.059143 9.200000 12.900000 113.170759 9.200000 13.000000 115.302374 9.200000 13.100000 117.453990 9.200000 13.200000 119.625605 9.200000 13.300000 121.817221 9.200000 13.400000 124.028837 9.200000 13.500000 126.260452 9.200000 13.600000 128.512068 9.200000 13.700000 130.783683 9.200000 13.800000 133.075299 9.200000 13.900000 135.386915 9.200000 14.000000 137.718530 9.200000 14.100000 140.070146 9.200000 14.200000 142.441761 9.200000 14.300000 144.833377 9.200000 14.400000 147.244992 9.200000 14.500000 149.676608 9.200000 14.600000 152.128224 9.200000 14.700000 154.599839 9.200000 14.800000 157.091455 9.200000 14.900000 159.603070 9.200000 15.000000 162.134686 9.300000 -5.000000 54.815364 9.300000 -4.900000 53.351012 9.300000 -4.800000 51.906660 9.300000 -4.700000 50.482309 9.300000 -4.600000 49.077957 9.300000 -4.500000 47.693605 9.300000 -4.400000 46.329254 9.300000 -4.300000 44.984902 9.300000 -4.200000 43.660550 9.300000 -4.100000 42.356199 9.300000 -4.000000 41.071847 9.300000 -3.900000 39.807495 9.300000 -3.800000 38.563143 9.300000 -3.700000 37.338792 9.300000 -3.600000 36.134440 9.300000 -3.500000 34.950088 9.300000 -3.400000 33.785737 9.300000 -3.300000 32.641385 9.300000 -3.200000 31.517033 9.300000 -3.100000 30.412682 9.300000 -3.000000 29.328330 9.300000 -2.900000 28.263978 9.300000 -2.800000 27.219627 9.300000 -2.700000 26.195275 9.300000 -2.600000 25.190923 9.300000 -2.500000 24.206571 9.300000 -2.400000 23.242220 9.300000 -2.300000 22.297868 9.300000 -2.200000 21.373516 9.300000 -2.100000 20.469165 9.300000 -2.000000 19.584813 9.300000 -1.900000 18.720461 9.300000 -1.800000 17.876110 9.300000 -1.700000 17.051758 9.300000 -1.600000 16.247406 9.300000 -1.500000 15.463054 9.300000 -1.400000 14.698703 9.300000 -1.300000 13.954351 9.300000 -1.200000 13.229999 9.300000 -1.100000 12.525648 9.300000 -1.000000 11.841296 9.300000 -0.900000 11.176944 9.300000 -0.800000 10.532593 9.300000 -0.700000 9.908241 9.300000 -0.600000 9.303889 9.300000 -0.500000 8.719537 9.300000 -0.400000 8.155186 9.300000 -0.300000 7.610834 9.300000 -0.200000 7.086482 9.300000 -0.100000 6.582131 9.300000 -0.000000 6.097779 9.300000 0.100000 5.633427 9.300000 0.200000 5.189076 9.300000 0.300000 4.764724 9.300000 0.400000 4.360372 9.300000 0.500000 3.976020 9.300000 0.600000 3.611669 9.300000 0.700000 3.267317 9.300000 0.800000 2.942965 9.300000 0.900000 2.638614 9.300000 1.000000 2.354262 9.300000 1.100000 2.089910 9.300000 1.200000 1.845559 9.300000 1.300000 1.621207 9.300000 1.400000 1.416855 9.300000 1.500000 1.232504 9.300000 1.600000 1.068152 9.300000 1.700000 0.923800 9.300000 1.800000 0.799448 9.300000 1.900000 0.695097 9.300000 2.000000 0.610745 9.300000 2.100000 0.546393 9.300000 2.200000 0.502042 9.300000 2.300000 0.477690 9.300000 2.400000 0.473338 9.300000 2.500000 0.488987 9.300000 2.600000 0.524635 9.300000 2.700000 0.580283 9.300000 2.800000 0.655931 9.300000 2.900000 0.751580 9.300000 3.000000 0.867228 9.300000 3.100000 1.002876 9.300000 3.200000 1.158525 9.300000 3.300000 1.334173 9.300000 3.400000 1.529821 9.300000 3.500000 1.745470 9.300000 3.600000 1.981118 9.300000 3.700000 2.236766 9.300000 3.800000 2.512414 9.300000 3.900000 2.808063 9.300000 4.000000 3.123711 9.300000 4.100000 3.459359 9.300000 4.200000 3.815008 9.300000 4.300000 4.190656 9.300000 4.400000 4.586304 9.300000 4.500000 5.001953 9.300000 4.600000 5.437601 9.300000 4.700000 5.893249 9.300000 4.800000 6.368897 9.300000 4.900000 6.864546 9.300000 5.000000 7.380194 9.300000 5.100000 7.915842 9.300000 5.200000 8.471491 9.300000 5.300000 9.047139 9.300000 5.400000 9.642787 9.300000 5.500000 10.258436 9.300000 5.600000 10.894084 9.300000 5.700000 11.549732 9.300000 5.800000 12.225381 9.300000 5.900000 12.921029 9.300000 6.000000 13.636677 9.300000 6.100000 14.372325 9.300000 6.200000 15.127974 9.300000 6.300000 15.903622 9.300000 6.400000 16.699270 9.300000 6.500000 17.514919 9.300000 6.600000 18.350567 9.300000 6.700000 19.206215 9.300000 6.800000 20.081864 9.300000 6.900000 20.977512 9.300000 7.000000 21.893160 9.300000 7.100000 22.828808 9.300000 7.200000 23.784457 9.300000 7.300000 24.760105 9.300000 7.400000 25.755753 9.300000 7.500000 26.771402 9.300000 7.600000 27.807050 9.300000 7.700000 28.862698 9.300000 7.800000 29.938347 9.300000 7.900000 31.033995 9.300000 8.000000 32.149643 9.300000 8.100000 33.285291 9.300000 8.200000 34.440940 9.300000 8.300000 35.616588 9.300000 8.400000 36.812236 9.300000 8.500000 38.027885 9.300000 8.600000 39.263533 9.300000 8.700000 40.519181 9.300000 8.800000 41.794830 9.300000 8.900000 43.090478 9.300000 9.000000 44.406126 9.300000 9.100000 45.741774 9.300000 9.200000 47.097423 9.300000 9.300000 48.473071 9.300000 9.400000 49.868719 9.300000 9.500000 51.284368 9.300000 9.600000 52.720016 9.300000 9.700000 54.175664 9.300000 9.800000 55.651313 9.300000 9.900000 57.146961 9.300000 10.000000 58.662609 9.300000 10.100000 60.198258 9.300000 10.200000 61.753906 9.300000 10.300000 63.329554 9.300000 10.400000 64.925202 9.300000 10.500000 66.540851 9.300000 10.600000 68.176499 9.300000 10.700000 69.832147 9.300000 10.800000 71.507796 9.300000 10.900000 73.203444 9.300000 11.000000 74.919092 9.300000 11.100000 76.654741 9.300000 11.200000 78.410389 9.300000 11.300000 80.186037 9.300000 11.400000 81.981685 9.300000 11.500000 83.797334 9.300000 11.600000 85.632982 9.300000 11.700000 87.488630 9.300000 11.800000 89.364279 9.300000 11.900000 91.259927 9.300000 12.000000 93.175575 9.300000 12.100000 95.111224 9.300000 12.200000 97.066872 9.300000 12.300000 99.042520 9.300000 12.400000 101.038168 9.300000 12.500000 103.053817 9.300000 12.600000 105.089465 9.300000 12.700000 107.145113 9.300000 12.800000 109.220762 9.300000 12.900000 111.316410 9.300000 13.000000 113.432058 9.300000 13.100000 115.567707 9.300000 13.200000 117.723355 9.300000 13.300000 119.899003 9.300000 13.400000 122.094651 9.300000 13.500000 124.310300 9.300000 13.600000 126.545948 9.300000 13.700000 128.801596 9.300000 13.800000 131.077245 9.300000 13.900000 133.372893 9.300000 14.000000 135.688541 9.300000 14.100000 138.024190 9.300000 14.200000 140.379838 9.300000 14.300000 142.755486 9.300000 14.400000 145.151135 9.300000 14.500000 147.566783 9.300000 14.600000 150.002431 9.300000 14.700000 152.458079 9.300000 14.800000 154.933728 9.300000 14.900000 157.429376 9.300000 15.000000 159.945024 9.400000 -5.000000 55.965613 9.400000 -4.900000 54.484777 9.400000 -4.800000 53.023942 9.400000 -4.700000 51.583106 9.400000 -4.600000 50.162270 9.400000 -4.500000 48.761434 9.400000 -4.400000 47.380599 9.400000 -4.300000 46.019763 9.400000 -4.200000 44.678927 9.400000 -4.100000 43.358092 9.400000 -4.000000 42.057256 9.400000 -3.900000 40.776420 9.400000 -3.800000 39.515584 9.400000 -3.700000 38.274749 9.400000 -3.600000 37.053913 9.400000 -3.500000 35.853077 9.400000 -3.400000 34.672242 9.400000 -3.300000 33.511406 9.400000 -3.200000 32.370570 9.400000 -3.100000 31.249734 9.400000 -3.000000 30.148899 9.400000 -2.900000 29.068063 9.400000 -2.800000 28.007227 9.400000 -2.700000 26.966392 9.400000 -2.600000 25.945556 9.400000 -2.500000 24.944720 9.400000 -2.400000 23.963884 9.400000 -2.300000 23.003049 9.400000 -2.200000 22.062213 9.400000 -2.100000 21.141377 9.400000 -2.000000 20.240542 9.400000 -1.900000 19.359706 9.400000 -1.800000 18.498870 9.400000 -1.700000 17.658034 9.400000 -1.600000 16.837199 9.400000 -1.500000 16.036363 9.400000 -1.400000 15.255527 9.400000 -1.300000 14.494692 9.400000 -1.200000 13.753856 9.400000 -1.100000 13.033020 9.400000 -1.000000 12.332184 9.400000 -0.900000 11.651349 9.400000 -0.800000 10.990513 9.400000 -0.700000 10.349677 9.400000 -0.600000 9.728842 9.400000 -0.500000 9.128006 9.400000 -0.400000 8.547170 9.400000 -0.300000 7.986334 9.400000 -0.200000 7.445499 9.400000 -0.100000 6.924663 9.400000 -0.000000 6.423827 9.400000 0.100000 5.942992 9.400000 0.200000 5.482156 9.400000 0.300000 5.041320 9.400000 0.400000 4.620484 9.400000 0.500000 4.219649 9.400000 0.600000 3.838813 9.400000 0.700000 3.477977 9.400000 0.800000 3.137142 9.400000 0.900000 2.816306 9.400000 1.000000 2.515470 9.400000 1.100000 2.234634 9.400000 1.200000 1.973799 9.400000 1.300000 1.732963 9.400000 1.400000 1.512127 9.400000 1.500000 1.311292 9.400000 1.600000 1.130456 9.400000 1.700000 0.969620 9.400000 1.800000 0.828784 9.400000 1.900000 0.707949 9.400000 2.000000 0.607113 9.400000 2.100000 0.526277 9.400000 2.200000 0.465442 9.400000 2.300000 0.424606 9.400000 2.400000 0.403770 9.400000 2.500000 0.402934 9.400000 2.600000 0.422099 9.400000 2.700000 0.461263 9.400000 2.800000 0.520427 9.400000 2.900000 0.599592 9.400000 3.000000 0.698756 9.400000 3.100000 0.817920 9.400000 3.200000 0.957084 9.400000 3.300000 1.116249 9.400000 3.400000 1.295413 9.400000 3.500000 1.494577 9.400000 3.600000 1.713742 9.400000 3.700000 1.952906 9.400000 3.800000 2.212070 9.400000 3.900000 2.491234 9.400000 4.000000 2.790399 9.400000 4.100000 3.109563 9.400000 4.200000 3.448727 9.400000 4.300000 3.807892 9.400000 4.400000 4.187056 9.400000 4.500000 4.586220 9.400000 4.600000 5.005384 9.400000 4.700000 5.444549 9.400000 4.800000 5.903713 9.400000 4.900000 6.382877 9.400000 5.000000 6.882042 9.400000 5.100000 7.401206 9.400000 5.200000 7.940370 9.400000 5.300000 8.499534 9.400000 5.400000 9.078699 9.400000 5.500000 9.677863 9.400000 5.600000 10.297027 9.400000 5.700000 10.936192 9.400000 5.800000 11.595356 9.400000 5.900000 12.274520 9.400000 6.000000 12.973684 9.400000 6.100000 13.692849 9.400000 6.200000 14.432013 9.400000 6.300000 15.191177 9.400000 6.400000 15.970342 9.400000 6.500000 16.769506 9.400000 6.600000 17.588670 9.400000 6.700000 18.427834 9.400000 6.800000 19.286999 9.400000 6.900000 20.166163 9.400000 7.000000 21.065327 9.400000 7.100000 21.984491 9.400000 7.200000 22.923656 9.400000 7.300000 23.882820 9.400000 7.400000 24.861984 9.400000 7.500000 25.861149 9.400000 7.600000 26.880313 9.400000 7.700000 27.919477 9.400000 7.800000 28.978641 9.400000 7.900000 30.057806 9.400000 8.000000 31.156970 9.400000 8.100000 32.276134 9.400000 8.200000 33.415299 9.400000 8.300000 34.574463 9.400000 8.400000 35.753627 9.400000 8.500000 36.952791 9.400000 8.600000 38.171956 9.400000 8.700000 39.411120 9.400000 8.800000 40.670284 9.400000 8.900000 41.949449 9.400000 9.000000 43.248613 9.400000 9.100000 44.567777 9.400000 9.200000 45.906941 9.400000 9.300000 47.266106 9.400000 9.400000 48.645270 9.400000 9.500000 50.044434 9.400000 9.600000 51.463599 9.400000 9.700000 52.902763 9.400000 9.800000 54.361927 9.400000 9.900000 55.841091 9.400000 10.000000 57.340256 9.400000 10.100000 58.859420 9.400000 10.200000 60.398584 9.400000 10.300000 61.957749 9.400000 10.400000 63.536913 9.400000 10.500000 65.136077 9.400000 10.600000 66.755241 9.400000 10.700000 68.394406 9.400000 10.800000 70.053570 9.400000 10.900000 71.732734 9.400000 11.000000 73.431899 9.400000 11.100000 75.151063 9.400000 11.200000 76.890227 9.400000 11.300000 78.649391 9.400000 11.400000 80.428556 9.400000 11.500000 82.227720 9.400000 11.600000 84.046884 9.400000 11.700000 85.886049 9.400000 11.800000 87.745213 9.400000 11.900000 89.624377 9.400000 12.000000 91.523541 9.400000 12.100000 93.442706 9.400000 12.200000 95.381870 9.400000 12.300000 97.341034 9.400000 12.400000 99.320199 9.400000 12.500000 101.319363 9.400000 12.600000 103.338527 9.400000 12.700000 105.377691 9.400000 12.800000 107.436856 9.400000 12.900000 109.516020 9.400000 13.000000 111.615184 9.400000 13.100000 113.734349 9.400000 13.200000 115.873513 9.400000 13.300000 118.032677 9.400000 13.400000 120.211841 9.400000 13.500000 122.411006 9.400000 13.600000 124.630170 9.400000 13.700000 126.869334 9.400000 13.800000 129.128499 9.400000 13.900000 131.407663 9.400000 14.000000 133.706827 9.400000 14.100000 136.025991 9.400000 14.200000 138.365156 9.400000 14.300000 140.724320 9.400000 14.400000 143.103484 9.400000 14.500000 145.502649 9.400000 14.600000 147.921813 9.400000 14.700000 150.360977 9.400000 14.800000 152.820141 9.400000 14.900000 155.299306 9.400000 15.000000 157.798470 9.500000 -5.000000 57.264311 9.500000 -4.900000 55.766475 9.500000 -4.800000 54.288638 9.500000 -4.700000 52.830802 9.500000 -4.600000 51.392965 9.500000 -4.500000 49.975129 9.500000 -4.400000 48.577292 9.500000 -4.300000 47.199456 9.500000 -4.200000 45.841619 9.500000 -4.100000 44.503783 9.500000 -4.000000 43.185947 9.500000 -3.900000 41.888110 9.500000 -3.800000 40.610274 9.500000 -3.700000 39.352437 9.500000 -3.600000 38.114601 9.500000 -3.500000 36.896764 9.500000 -3.400000 35.698928 9.500000 -3.300000 34.521091 9.500000 -3.200000 33.363255 9.500000 -3.100000 32.225418 9.500000 -3.000000 31.107582 9.500000 -2.900000 30.009745 9.500000 -2.800000 28.931909 9.500000 -2.700000 27.874072 9.500000 -2.600000 26.836236 9.500000 -2.500000 25.818399 9.500000 -2.400000 24.820563 9.500000 -2.300000 23.842727 9.500000 -2.200000 22.884890 9.500000 -2.100000 21.947054 9.500000 -2.000000 21.029217 9.500000 -1.900000 20.131381 9.500000 -1.800000 19.253544 9.500000 -1.700000 18.395708 9.500000 -1.600000 17.557871 9.500000 -1.500000 16.740035 9.500000 -1.400000 15.942198 9.500000 -1.300000 15.164362 9.500000 -1.200000 14.406525 9.500000 -1.100000 13.668689 9.500000 -1.000000 12.950852 9.500000 -0.900000 12.253016 9.500000 -0.800000 11.575179 9.500000 -0.700000 10.917343 9.500000 -0.600000 10.279506 9.500000 -0.500000 9.661670 9.500000 -0.400000 9.063834 9.500000 -0.300000 8.485997 9.500000 -0.200000 7.928161 9.500000 -0.100000 7.390324 9.500000 -0.000000 6.872488 9.500000 0.100000 6.374651 9.500000 0.200000 5.896815 9.500000 0.300000 5.438978 9.500000 0.400000 5.001142 9.500000 0.500000 4.583305 9.500000 0.600000 4.185469 9.500000 0.700000 3.807632 9.500000 0.800000 3.449796 9.500000 0.900000 3.111959 9.500000 1.000000 2.794123 9.500000 1.100000 2.496286 9.500000 1.200000 2.218450 9.500000 1.300000 1.960614 9.500000 1.400000 1.722777 9.500000 1.500000 1.504941 9.500000 1.600000 1.307104 9.500000 1.700000 1.129268 9.500000 1.800000 0.971431 9.500000 1.900000 0.833595 9.500000 2.000000 0.715758 9.500000 2.100000 0.617922 9.500000 2.200000 0.540085 9.500000 2.300000 0.482249 9.500000 2.400000 0.444412 9.500000 2.500000 0.426576 9.500000 2.600000 0.428739 9.500000 2.700000 0.450903 9.500000 2.800000 0.493066 9.500000 2.900000 0.555230 9.500000 3.000000 0.637394 9.500000 3.100000 0.739557 9.500000 3.200000 0.861721 9.500000 3.300000 1.003884 9.500000 3.400000 1.166048 9.500000 3.500000 1.348211 9.500000 3.600000 1.550375 9.500000 3.700000 1.772538 9.500000 3.800000 2.014702 9.500000 3.900000 2.276865 9.500000 4.000000 2.559029 9.500000 4.100000 2.861192 9.500000 4.200000 3.183356 9.500000 4.300000 3.525519 9.500000 4.400000 3.887683 9.500000 4.500000 4.269846 9.500000 4.600000 4.672010 9.500000 4.700000 5.094174 9.500000 4.800000 5.536337 9.500000 4.900000 5.998501 9.500000 5.000000 6.480664 9.500000 5.100000 6.982828 9.500000 5.200000 7.504991 9.500000 5.300000 8.047155 9.500000 5.400000 8.609318 9.500000 5.500000 9.191482 9.500000 5.600000 9.793645 9.500000 5.700000 10.415809 9.500000 5.800000 11.057972 9.500000 5.900000 11.720136 9.500000 6.000000 12.402299 9.500000 6.100000 13.104463 9.500000 6.200000 13.826626 9.500000 6.300000 14.568790 9.500000 6.400000 15.330954 9.500000 6.500000 16.113117 9.500000 6.600000 16.915281 9.500000 6.700000 17.737444 9.500000 6.800000 18.579608 9.500000 6.900000 19.441771 9.500000 7.000000 20.323935 9.500000 7.100000 21.226098 9.500000 7.200000 22.148262 9.500000 7.300000 23.090425 9.500000 7.400000 24.052589 9.500000 7.500000 25.034752 9.500000 7.600000 26.036916 9.500000 7.700000 27.059079 9.500000 7.800000 28.101243 9.500000 7.900000 29.163406 9.500000 8.000000 30.245570 9.500000 8.100000 31.347733 9.500000 8.200000 32.469897 9.500000 8.300000 33.612061 9.500000 8.400000 34.774224 9.500000 8.500000 35.956388 9.500000 8.600000 37.158551 9.500000 8.700000 38.380715 9.500000 8.800000 39.622878 9.500000 8.900000 40.885042 9.500000 9.000000 42.167205 9.500000 9.100000 43.469369 9.500000 9.200000 44.791532 9.500000 9.300000 46.133696 9.500000 9.400000 47.495859 9.500000 9.500000 48.878023 9.500000 9.600000 50.280186 9.500000 9.700000 51.702350 9.500000 9.800000 53.144513 9.500000 9.900000 54.606677 9.500000 10.000000 56.088841 9.500000 10.100000 57.591004 9.500000 10.200000 59.113168 9.500000 10.300000 60.655331 9.500000 10.400000 62.217495 9.500000 10.500000 63.799658 9.500000 10.600000 65.401822 9.500000 10.700000 67.023985 9.500000 10.800000 68.666149 9.500000 10.900000 70.328312 9.500000 11.000000 72.010476 9.500000 11.100000 73.712639 9.500000 11.200000 75.434803 9.500000 11.300000 77.176966 9.500000 11.400000 78.939130 9.500000 11.500000 80.721293 9.500000 11.600000 82.523457 9.500000 11.700000 84.345621 9.500000 11.800000 86.187784 9.500000 11.900000 88.049948 9.500000 12.000000 89.932111 9.500000 12.100000 91.834275 9.500000 12.200000 93.756438 9.500000 12.300000 95.698602 9.500000 12.400000 97.660765 9.500000 12.500000 99.642929 9.500000 12.600000 101.645092 9.500000 12.700000 103.667256 9.500000 12.800000 105.709419 9.500000 12.900000 107.771583 9.500000 13.000000 109.853746 9.500000 13.100000 111.955910 9.500000 13.200000 114.078073 9.500000 13.300000 116.220237 9.500000 13.400000 118.382401 9.500000 13.500000 120.564564 9.500000 13.600000 122.766728 9.500000 13.700000 124.988891 9.500000 13.800000 127.231055 9.500000 13.900000 129.493218 9.500000 14.000000 131.775382 9.500000 14.100000 134.077545 9.500000 14.200000 136.399709 9.500000 14.300000 138.741872 9.500000 14.400000 141.104036 9.500000 14.500000 143.486199 9.500000 14.600000 145.888363 9.500000 14.700000 148.310526 9.500000 14.800000 150.752690 9.500000 14.900000 153.214853 9.500000 15.000000 155.697017 9.600000 -5.000000 58.712534 9.600000 -4.900000 57.197180 9.600000 -4.800000 55.701826 9.600000 -4.700000 54.226472 9.600000 -4.600000 52.771118 9.600000 -4.500000 51.335764 9.600000 -4.400000 49.920410 9.600000 -4.300000 48.525057 9.600000 -4.200000 47.149703 9.600000 -4.100000 45.794349 9.600000 -4.000000 44.458995 9.600000 -3.900000 43.143641 9.600000 -3.800000 41.848287 9.600000 -3.700000 40.572933 9.600000 -3.600000 39.317579 9.600000 -3.500000 38.082225 9.600000 -3.400000 36.866871 9.600000 -3.300000 35.671517 9.600000 -3.200000 34.496163 9.600000 -3.100000 33.340809 9.600000 -3.000000 32.205455 9.600000 -2.900000 31.090101 9.600000 -2.800000 29.994747 9.600000 -2.700000 28.919393 9.600000 -2.600000 27.864039 9.600000 -2.500000 26.828685 9.600000 -2.400000 25.813331 9.600000 -2.300000 24.817977 9.600000 -2.200000 23.842623 9.600000 -2.100000 22.887269 9.600000 -2.000000 21.951915 9.600000 -1.900000 21.036561 9.600000 -1.800000 20.141207 9.600000 -1.700000 19.265853 9.600000 -1.600000 18.410499 9.600000 -1.500000 17.575145 9.600000 -1.400000 16.759792 9.600000 -1.300000 15.964438 9.600000 -1.200000 15.189084 9.600000 -1.100000 14.433730 9.600000 -1.000000 13.698376 9.600000 -0.900000 12.983022 9.600000 -0.800000 12.287668 9.600000 -0.700000 11.612314 9.600000 -0.600000 10.956960 9.600000 -0.500000 10.321606 9.600000 -0.400000 9.706252 9.600000 -0.300000 9.110898 9.600000 -0.200000 8.535544 9.600000 -0.100000 7.980190 9.600000 -0.000000 7.444836 9.600000 0.100000 6.929482 9.600000 0.200000 6.434128 9.600000 0.300000 5.958774 9.600000 0.400000 5.503420 9.600000 0.500000 5.068066 9.600000 0.600000 4.652712 9.600000 0.700000 4.257358 9.600000 0.800000 3.882004 9.600000 0.900000 3.526650 9.600000 1.000000 3.191296 9.600000 1.100000 2.875942 9.600000 1.200000 2.580588 9.600000 1.300000 2.305234 9.600000 1.400000 2.049880 9.600000 1.500000 1.814527 9.600000 1.600000 1.599173 9.600000 1.700000 1.403819 9.600000 1.800000 1.228465 9.600000 1.900000 1.073111 9.600000 2.000000 0.937757 9.600000 2.100000 0.822403 9.600000 2.200000 0.727049 9.600000 2.300000 0.651695 9.600000 2.400000 0.596341 9.600000 2.500000 0.560987 9.600000 2.600000 0.545633 9.600000 2.700000 0.550279 9.600000 2.800000 0.574925 9.600000 2.900000 0.619571 9.600000 3.000000 0.684217 9.600000 3.100000 0.768863 9.600000 3.200000 0.873509 9.600000 3.300000 0.998155 9.600000 3.400000 1.142801 9.600000 3.500000 1.307447 9.600000 3.600000 1.492093 9.600000 3.700000 1.696739 9.600000 3.800000 1.921385 9.600000 3.900000 2.166031 9.600000 4.000000 2.430677 9.600000 4.100000 2.715323 9.600000 4.200000 3.019969 9.600000 4.300000 3.344616 9.600000 4.400000 3.689262 9.600000 4.500000 4.053908 9.600000 4.600000 4.438554 9.600000 4.700000 4.843200 9.600000 4.800000 5.267846 9.600000 4.900000 5.712492 9.600000 5.000000 6.177138 9.600000 5.100000 6.661784 9.600000 5.200000 7.166430 9.600000 5.300000 7.691076 9.600000 5.400000 8.235722 9.600000 5.500000 8.800368 9.600000 5.600000 9.385014 9.600000 5.700000 9.989660 9.600000 5.800000 10.614306 9.600000 5.900000 11.258952 9.600000 6.000000 11.923598 9.600000 6.100000 12.608244 9.600000 6.200000 13.312890 9.600000 6.300000 14.037536 9.600000 6.400000 14.782182 9.600000 6.500000 15.546828 9.600000 6.600000 16.331474 9.600000 6.700000 17.136120 9.600000 6.800000 17.960766 9.600000 6.900000 18.805412 9.600000 7.000000 19.670058 9.600000 7.100000 20.554704 9.600000 7.200000 21.459351 9.600000 7.300000 22.383997 9.600000 7.400000 23.328643 9.600000 7.500000 24.293289 9.600000 7.600000 25.277935 9.600000 7.700000 26.282581 9.600000 7.800000 27.307227 9.600000 7.900000 28.351873 9.600000 8.000000 29.416519 9.600000 8.100000 30.501165 9.600000 8.200000 31.605811 9.600000 8.300000 32.730457 9.600000 8.400000 33.875103 9.600000 8.500000 35.039749 9.600000 8.600000 36.224395 9.600000 8.700000 37.429041 9.600000 8.800000 38.653687 9.600000 8.900000 39.898333 9.600000 9.000000 41.162979 9.600000 9.100000 42.447625 9.600000 9.200000 43.752271 9.600000 9.300000 45.076917 9.600000 9.400000 46.421563 9.600000 9.500000 47.786209 9.600000 9.600000 49.170855 9.600000 9.700000 50.575501 9.600000 9.800000 52.000147 9.600000 9.900000 53.444793 9.600000 10.000000 54.909439 9.600000 10.100000 56.394086 9.600000 10.200000 57.898732 9.600000 10.300000 59.423378 9.600000 10.400000 60.968024 9.600000 10.500000 62.532670 9.600000 10.600000 64.117316 9.600000 10.700000 65.721962 9.600000 10.800000 67.346608 9.600000 10.900000 68.991254 9.600000 11.000000 70.655900 9.600000 11.100000 72.340546 9.600000 11.200000 74.045192 9.600000 11.300000 75.769838 9.600000 11.400000 77.514484 9.600000 11.500000 79.279130 9.600000 11.600000 81.063776 9.600000 11.700000 82.868422 9.600000 11.800000 84.693068 9.600000 11.900000 86.537714 9.600000 12.000000 88.402360 9.600000 12.100000 90.287006 9.600000 12.200000 92.191652 9.600000 12.300000 94.116298 9.600000 12.400000 96.060944 9.600000 12.500000 98.025590 9.600000 12.600000 100.010236 9.600000 12.700000 102.014882 9.600000 12.800000 104.039528 9.600000 12.900000 106.084175 9.600000 13.000000 108.148821 9.600000 13.100000 110.233467 9.600000 13.200000 112.338113 9.600000 13.300000 114.462759 9.600000 13.400000 116.607405 9.600000 13.500000 118.772051 9.600000 13.600000 120.956697 9.600000 13.700000 123.161343 9.600000 13.800000 125.385989 9.600000 13.900000 127.630635 9.600000 14.000000 129.895281 9.600000 14.100000 132.179927 9.600000 14.200000 134.484573 9.600000 14.300000 136.809219 9.600000 14.400000 139.153865 9.600000 14.500000 141.518511 9.600000 14.600000 143.903157 9.600000 14.700000 146.307803 9.600000 14.800000 148.732449 9.600000 14.900000 151.177095 9.600000 15.000000 153.641741 9.700000 -5.000000 60.310442 9.700000 -4.900000 58.777054 9.700000 -4.800000 57.263666 9.700000 -4.700000 55.770278 9.700000 -4.600000 54.296889 9.700000 -4.500000 52.843501 9.700000 -4.400000 51.410113 9.700000 -4.300000 49.996725 9.700000 -4.200000 48.603337 9.700000 -4.100000 47.229948 9.700000 -4.000000 45.876560 9.700000 -3.900000 44.543172 9.700000 -3.800000 43.229784 9.700000 -3.700000 41.936396 9.700000 -3.600000 40.663007 9.700000 -3.500000 39.409619 9.700000 -3.400000 38.176231 9.700000 -3.300000 36.962843 9.700000 -3.200000 35.769455 9.700000 -3.100000 34.596066 9.700000 -3.000000 33.442678 9.700000 -2.900000 32.309290 9.700000 -2.800000 31.195902 9.700000 -2.700000 30.102514 9.700000 -2.600000 29.029125 9.700000 -2.500000 27.975737 9.700000 -2.400000 26.942349 9.700000 -2.300000 25.928961 9.700000 -2.200000 24.935573 9.700000 -2.100000 23.962184 9.700000 -2.000000 23.008796 9.700000 -1.900000 22.075408 9.700000 -1.800000 21.162020 9.700000 -1.700000 20.268632 9.700000 -1.600000 19.395243 9.700000 -1.500000 18.541855 9.700000 -1.400000 17.708467 9.700000 -1.300000 16.895079 9.700000 -1.200000 16.101691 9.700000 -1.100000 15.328303 9.700000 -1.000000 14.574914 9.700000 -0.900000 13.841526 9.700000 -0.800000 13.128138 9.700000 -0.700000 12.434750 9.700000 -0.600000 11.761362 9.700000 -0.500000 11.107973 9.700000 -0.400000 10.474585 9.700000 -0.300000 9.861197 9.700000 -0.200000 9.267809 9.700000 -0.100000 8.694421 9.700000 -0.000000 8.141032 9.700000 0.100000 7.607644 9.700000 0.200000 7.094256 9.700000 0.300000 6.600868 9.700000 0.400000 6.127480 9.700000 0.500000 5.674091 9.700000 0.600000 5.240703 9.700000 0.700000 4.827315 9.700000 0.800000 4.433927 9.700000 0.900000 4.060539 9.700000 1.000000 3.707150 9.700000 1.100000 3.373762 9.700000 1.200000 3.060374 9.700000 1.300000 2.766986 9.700000 1.400000 2.493598 9.700000 1.500000 2.240209 9.700000 1.600000 2.006821 9.700000 1.700000 1.793433 9.700000 1.800000 1.600045 9.700000 1.900000 1.426657 9.700000 2.000000 1.273268 9.700000 2.100000 1.139880 9.700000 2.200000 1.026492 9.700000 2.300000 0.933104 9.700000 2.400000 0.859716 9.700000 2.500000 0.806327 9.700000 2.600000 0.772939 9.700000 2.700000 0.759551 9.700000 2.800000 0.766163 9.700000 2.900000 0.792775 9.700000 3.000000 0.839386 9.700000 3.100000 0.905998 9.700000 3.200000 0.992610 9.700000 3.300000 1.099222 9.700000 3.400000 1.225834 9.700000 3.500000 1.372445 9.700000 3.600000 1.539057 9.700000 3.700000 1.725669 9.700000 3.800000 1.932281 9.700000 3.900000 2.158893 9.700000 4.000000 2.405504 9.700000 4.100000 2.672116 9.700000 4.200000 2.958728 9.700000 4.300000 3.265340 9.700000 4.400000 3.591952 9.700000 4.500000 3.938563 9.700000 4.600000 4.305175 9.700000 4.700000 4.691787 9.700000 4.800000 5.098399 9.700000 4.900000 5.525011 9.700000 5.000000 5.971622 9.700000 5.100000 6.438234 9.700000 5.200000 6.924846 9.700000 5.300000 7.431458 9.700000 5.400000 7.958070 9.700000 5.500000 8.504681 9.700000 5.600000 9.071293 9.700000 5.700000 9.657905 9.700000 5.800000 10.264517 9.700000 5.900000 10.891129 9.700000 6.000000 11.537741 9.700000 6.100000 12.204352 9.700000 6.200000 12.890964 9.700000 6.300000 13.597576 9.700000 6.400000 14.324188 9.700000 6.500000 15.070800 9.700000 6.600000 15.837411 9.700000 6.700000 16.624023 9.700000 6.800000 17.430635 9.700000 6.900000 18.257247 9.700000 7.000000 19.103859 9.700000 7.100000 19.970470 9.700000 7.200000 20.857082 9.700000 7.300000 21.763694 9.700000 7.400000 22.690306 9.700000 7.500000 23.636918 9.700000 7.600000 24.603529 9.700000 7.700000 25.590141 9.700000 7.800000 26.596753 9.700000 7.900000 27.623365 9.700000 8.000000 28.669977 9.700000 8.100000 29.736588 9.700000 8.200000 30.823200 9.700000 8.300000 31.929812 9.700000 8.400000 33.056424 9.700000 8.500000 34.203036 9.700000 8.600000 35.369647 9.700000 8.700000 36.556259 9.700000 8.800000 37.762871 9.700000 8.900000 38.989483 9.700000 9.000000 40.236095 9.700000 9.100000 41.502706 9.700000 9.200000 42.789318 9.700000 9.300000 44.095930 9.700000 9.400000 45.422542 9.700000 9.500000 46.769154 9.700000 9.600000 48.135765 9.700000 9.700000 49.522377 9.700000 9.800000 50.928989 9.700000 9.900000 52.355601 9.700000 10.000000 53.802213 9.700000 10.100000 55.268824 9.700000 10.200000 56.755436 9.700000 10.300000 58.262048 9.700000 10.400000 59.788660 9.700000 10.500000 61.335272 9.700000 10.600000 62.901883 9.700000 10.700000 64.488495 9.700000 10.800000 66.095107 9.700000 10.900000 67.721719 9.700000 11.000000 69.368331 9.700000 11.100000 71.034942 9.700000 11.200000 72.721554 9.700000 11.300000 74.428166 9.700000 11.400000 76.154778 9.700000 11.500000 77.901390 9.700000 11.600000 79.668001 9.700000 11.700000 81.454613 9.700000 11.800000 83.261225 9.700000 11.900000 85.087837 9.700000 12.000000 86.934449 9.700000 12.100000 88.801060 9.700000 12.200000 90.687672 9.700000 12.300000 92.594284 9.700000 12.400000 94.520896 9.700000 12.500000 96.467508 9.700000 12.600000 98.434120 9.700000 12.700000 100.420731 9.700000 12.800000 102.427343 9.700000 12.900000 104.453955 9.700000 13.000000 106.500567 9.700000 13.100000 108.567179 9.700000 13.200000 110.653790 9.700000 13.300000 112.760402 9.700000 13.400000 114.887014 9.700000 13.500000 117.033626 9.700000 13.600000 119.200238 9.700000 13.700000 121.386849 9.700000 13.800000 123.593461 9.700000 13.900000 125.820073 9.700000 14.000000 128.066685 9.700000 14.100000 130.333297 9.700000 14.200000 132.619908 9.700000 14.300000 134.926520 9.700000 14.400000 137.253132 9.700000 14.500000 139.599744 9.700000 14.600000 141.966356 9.700000 14.700000 144.352967 9.700000 14.800000 146.759579 9.700000 14.900000 149.186191 9.700000 15.000000 151.632803 9.800000 -5.000000 62.057291 9.800000 -4.900000 60.505352 9.800000 -4.800000 58.973413 9.800000 -4.700000 57.461474 9.800000 -4.600000 55.969534 9.800000 -4.500000 54.497595 9.800000 -4.400000 53.045656 9.800000 -4.300000 51.613717 9.800000 -4.200000 50.201778 9.800000 -4.100000 48.809839 9.800000 -4.000000 47.437899 9.800000 -3.900000 46.085960 9.800000 -3.800000 44.754021 9.800000 -3.700000 43.442082 9.800000 -3.600000 42.150143 9.800000 -3.500000 40.878204 9.800000 -3.400000 39.626264 9.800000 -3.300000 38.394325 9.800000 -3.200000 37.182386 9.800000 -3.100000 35.990447 9.800000 -3.000000 34.818508 9.800000 -2.900000 33.666569 9.800000 -2.800000 32.534629 9.800000 -2.700000 31.422690 9.800000 -2.600000 30.330751 9.800000 -2.500000 29.258812 9.800000 -2.400000 28.206873 9.800000 -2.300000 27.174934 9.800000 -2.200000 26.162994 9.800000 -2.100000 25.171055 9.800000 -2.000000 24.199116 9.800000 -1.900000 23.247177 9.800000 -1.800000 22.315238 9.800000 -1.700000 21.403299 9.800000 -1.600000 20.511359 9.800000 -1.500000 19.639420 9.800000 -1.400000 18.787481 9.800000 -1.300000 17.955542 9.800000 -1.200000 17.143603 9.800000 -1.100000 16.351664 9.800000 -1.000000 15.579724 9.800000 -0.900000 14.827785 9.800000 -0.800000 14.095846 9.800000 -0.700000 13.383907 9.800000 -0.600000 12.691968 9.800000 -0.500000 12.020029 9.800000 -0.400000 11.368089 9.800000 -0.300000 10.736150 9.800000 -0.200000 10.124211 9.800000 -0.100000 9.532272 9.800000 -0.000000 8.960333 9.800000 0.100000 8.408394 9.800000 0.200000 7.876454 9.800000 0.300000 7.364515 9.800000 0.400000 6.872576 9.800000 0.500000 6.400637 9.800000 0.600000 5.948698 9.800000 0.700000 5.516759 9.800000 0.800000 5.104819 9.800000 0.900000 4.712880 9.800000 1.000000 4.340941 9.800000 1.100000 3.989002 9.800000 1.200000 3.657063 9.800000 1.300000 3.345124 9.800000 1.400000 3.053184 9.800000 1.500000 2.781245 9.800000 1.600000 2.529306 9.800000 1.700000 2.297367 9.800000 1.800000 2.085428 9.800000 1.900000 1.893489 9.800000 2.000000 1.721549 9.800000 2.100000 1.569610 9.800000 2.200000 1.437671 9.800000 2.300000 1.325732 9.800000 2.400000 1.233793 9.800000 2.500000 1.161854 9.800000 2.600000 1.109914 9.800000 2.700000 1.077975 9.800000 2.800000 1.066036 9.800000 2.900000 1.074097 9.800000 3.000000 1.102158 9.800000 3.100000 1.150219 9.800000 3.200000 1.218279 9.800000 3.300000 1.306340 9.800000 3.400000 1.414401 9.800000 3.500000 1.542462 9.800000 3.600000 1.690523 9.800000 3.700000 1.858584 9.800000 3.800000 2.046644 9.800000 3.900000 2.254705 9.800000 4.000000 2.482766 9.800000 4.100000 2.730827 9.800000 4.200000 2.998888 9.800000 4.300000 3.286949 9.800000 4.400000 3.595009 9.800000 4.500000 3.923070 9.800000 4.600000 4.271131 9.800000 4.700000 4.639192 9.800000 4.800000 5.027253 9.800000 4.900000 5.435314 9.800000 5.000000 5.863374 9.800000 5.100000 6.311435 9.800000 5.200000 6.779496 9.800000 5.300000 7.267557 9.800000 5.400000 7.775618 9.800000 5.500000 8.303679 9.800000 5.600000 8.851739 9.800000 5.700000 9.419800 9.800000 5.800000 10.007861 9.800000 5.900000 10.615922 9.800000 6.000000 11.243983 9.800000 6.100000 11.892044 9.800000 6.200000 12.560104 9.800000 6.300000 13.248165 9.800000 6.400000 13.956226 9.800000 6.500000 14.684287 9.800000 6.600000 15.432348 9.800000 6.700000 16.200409 9.800000 6.800000 16.988469 9.800000 6.900000 17.796530 9.800000 7.000000 18.624591 9.800000 7.100000 19.472652 9.800000 7.200000 20.340713 9.800000 7.300000 21.228774 9.800000 7.400000 22.136834 9.800000 7.500000 23.064895 9.800000 7.600000 24.012956 9.800000 7.700000 24.981017 9.800000 7.800000 25.969078 9.800000 7.900000 26.977139 9.800000 8.000000 28.005199 9.800000 8.100000 29.053260 9.800000 8.200000 30.121321 9.800000 8.300000 31.209382 9.800000 8.400000 32.317443 9.800000 8.500000 33.445504 9.800000 8.600000 34.593564 9.800000 8.700000 35.761625 9.800000 8.800000 36.949686 9.800000 8.900000 38.157747 9.800000 9.000000 39.385808 9.800000 9.100000 40.633869 9.800000 9.200000 41.901929 9.800000 9.300000 43.189990 9.800000 9.400000 44.498051 9.800000 9.500000 45.826112 9.800000 9.600000 47.174173 9.800000 9.700000 48.542234 9.800000 9.800000 49.930294 9.800000 9.900000 51.338355 9.800000 10.000000 52.766416 9.800000 10.100000 54.214477 9.800000 10.200000 55.682538 9.800000 10.300000 57.170599 9.800000 10.400000 58.678659 9.800000 10.500000 60.206720 9.800000 10.600000 61.754781 9.800000 10.700000 63.322842 9.800000 10.800000 64.910903 9.800000 10.900000 66.518964 9.800000 11.000000 68.147024 9.800000 11.100000 69.795085 9.800000 11.200000 71.463146 9.800000 11.300000 73.151207 9.800000 11.400000 74.859268 9.800000 11.500000 76.587329 9.800000 11.600000 78.335389 9.800000 11.700000 80.103450 9.800000 11.800000 81.891511 9.800000 11.900000 83.699572 9.800000 12.000000 85.527633 9.800000 12.100000 87.375694 9.800000 12.200000 89.243754 9.800000 12.300000 91.131815 9.800000 12.400000 93.039876 9.800000 12.500000 94.967937 9.800000 12.600000 96.915998 9.800000 12.700000 98.884059 9.800000 12.800000 100.872119 9.800000 12.900000 102.880180 9.800000 13.000000 104.908241 9.800000 13.100000 106.956302 9.800000 13.200000 109.024363 9.800000 13.300000 111.112424 9.800000 13.400000 113.220484 9.800000 13.500000 115.348545 9.800000 13.600000 117.496606 9.800000 13.700000 119.664667 9.800000 13.800000 121.852728 9.800000 13.900000 124.060789 9.800000 14.000000 126.288849 9.800000 14.100000 128.536910 9.800000 14.200000 130.804971 9.800000 14.300000 133.093032 9.800000 14.400000 135.401093 9.800000 14.500000 137.729154 9.800000 14.600000 140.077214 9.800000 14.700000 142.445275 9.800000 14.800000 144.833336 9.800000 14.900000 147.241397 9.800000 15.000000 149.669458 9.900000 -5.000000 63.951455 9.900000 -4.900000 62.380448 9.900000 -4.800000 60.829441 9.900000 -4.700000 59.298434 9.900000 -4.600000 57.787427 9.900000 -4.500000 56.296420 9.900000 -4.400000 54.825414 9.900000 -4.300000 53.374407 9.900000 -4.200000 51.943400 9.900000 -4.100000 50.532393 9.900000 -4.000000 49.141386 9.900000 -3.900000 47.770379 9.900000 -3.800000 46.419372 9.900000 -3.700000 45.088365 9.900000 -3.600000 43.777359 9.900000 -3.500000 42.486352 9.900000 -3.400000 41.215345 9.900000 -3.300000 39.964338 9.900000 -3.200000 38.733331 9.900000 -3.100000 37.522324 9.900000 -3.000000 36.331317 9.900000 -2.900000 35.160310 9.900000 -2.800000 34.009304 9.900000 -2.700000 32.878297 9.900000 -2.600000 31.767290 9.900000 -2.500000 30.676283 9.900000 -2.400000 29.605276 9.900000 -2.300000 28.554269 9.900000 -2.200000 27.523262 9.900000 -2.100000 26.512255 9.900000 -2.000000 25.521249 9.900000 -1.900000 24.550242 9.900000 -1.800000 23.599235 9.900000 -1.700000 22.668228 9.900000 -1.600000 21.757221 9.900000 -1.500000 20.866214 9.900000 -1.400000 19.995207 9.900000 -1.300000 19.144200 9.900000 -1.200000 18.313194 9.900000 -1.100000 17.502187 9.900000 -1.000000 16.711180 9.900000 -0.900000 15.940173 9.900000 -0.800000 15.189166 9.900000 -0.700000 14.458159 9.900000 -0.600000 13.747152 9.900000 -0.500000 13.056145 9.900000 -0.400000 12.385139 9.900000 -0.300000 11.734132 9.900000 -0.200000 11.103125 9.900000 -0.100000 10.492118 9.900000 -0.000000 9.901111 9.900000 0.100000 9.330104 9.900000 0.200000 8.779097 9.900000 0.300000 8.248090 9.900000 0.400000 7.737084 9.900000 0.500000 7.246077 9.900000 0.600000 6.775070 9.900000 0.700000 6.324063 9.900000 0.800000 5.893056 9.900000 0.900000 5.482049 9.900000 1.000000 5.091042 9.900000 1.100000 4.720035 9.900000 1.200000 4.369029 9.900000 1.300000 4.038022 9.900000 1.400000 3.727015 9.900000 1.500000 3.436008 9.900000 1.600000 3.165001 9.900000 1.700000 2.913994 9.900000 1.800000 2.682987 9.900000 1.900000 2.471980 9.900000 2.000000 2.280974 9.900000 2.100000 2.109967 9.900000 2.200000 1.958960 9.900000 2.300000 1.827953 9.900000 2.400000 1.716946 9.900000 2.500000 1.625939 9.900000 2.600000 1.554932 9.900000 2.700000 1.503925 9.900000 2.800000 1.472919 9.900000 2.900000 1.461912 9.900000 3.000000 1.470905 9.900000 3.100000 1.499898 9.900000 3.200000 1.548891 9.900000 3.300000 1.617884 9.900000 3.400000 1.706877 9.900000 3.500000 1.815870 9.900000 3.600000 1.944864 9.900000 3.700000 2.093857 9.900000 3.800000 2.262850 9.900000 3.900000 2.451843 9.900000 4.000000 2.660836 9.900000 4.100000 2.889829 9.900000 4.200000 3.138822 9.900000 4.300000 3.407815 9.900000 4.400000 3.696809 9.900000 4.500000 4.005802 9.900000 4.600000 4.334795 9.900000 4.700000 4.683788 9.900000 4.800000 5.052781 9.900000 4.900000 5.441774 9.900000 5.000000 5.850767 9.900000 5.100000 6.279760 9.900000 5.200000 6.728754 9.900000 5.300000 7.197747 9.900000 5.400000 7.686740 9.900000 5.500000 8.195733 9.900000 5.600000 8.724726 9.900000 5.700000 9.273719 9.900000 5.800000 9.842712 9.900000 5.900000 10.431705 9.900000 6.000000 11.040699 9.900000 6.100000 11.669692 9.900000 6.200000 12.318685 9.900000 6.300000 12.987678 9.900000 6.400000 13.676671 9.900000 6.500000 14.385664 9.900000 6.600000 15.114657 9.900000 6.700000 15.863650 9.900000 6.800000 16.632644 9.900000 6.900000 17.421637 9.900000 7.000000 18.230630 9.900000 7.100000 19.059623 9.900000 7.200000 19.908616 9.900000 7.300000 20.777609 9.900000 7.400000 21.666602 9.900000 7.500000 22.575595 9.900000 7.600000 23.504589 9.900000 7.700000 24.453582 9.900000 7.800000 25.422575 9.900000 7.900000 26.411568 9.900000 8.000000 27.420561 9.900000 8.100000 28.449554 9.900000 8.200000 29.498547 9.900000 8.300000 30.567540 9.900000 8.400000 31.656534 9.900000 8.500000 32.765527 9.900000 8.600000 33.894520 9.900000 8.700000 35.043513 9.900000 8.800000 36.212506 9.900000 8.900000 37.401499 9.900000 9.000000 38.610492 9.900000 9.100000 39.839485 9.900000 9.200000 41.088479 9.900000 9.300000 42.357472 9.900000 9.400000 43.646465 9.900000 9.500000 44.955458 9.900000 9.600000 46.284451 9.900000 9.700000 47.633444 9.900000 9.800000 49.002437 9.900000 9.900000 50.391430 9.900000 10.000000 51.800424 9.900000 10.100000 53.229417 9.900000 10.200000 54.678410 9.900000 10.300000 56.147403 9.900000 10.400000 57.636396 9.900000 10.500000 59.145389 9.900000 10.600000 60.674382 9.900000 10.700000 62.223375 9.900000 10.800000 63.792369 9.900000 10.900000 65.381362 9.900000 11.000000 66.990355 9.900000 11.100000 68.619348 9.900000 11.200000 70.268341 9.900000 11.300000 71.937334 9.900000 11.400000 73.626327 9.900000 11.500000 75.335320 9.900000 11.600000 77.064314 9.900000 11.700000 78.813307 9.900000 11.800000 80.582300 9.900000 11.900000 82.371293 9.900000 12.000000 84.180286 9.900000 12.100000 86.009279 9.900000 12.200000 87.858272 9.900000 12.300000 89.727265 9.900000 12.400000 91.616259 9.900000 12.500000 93.525252 9.900000 12.600000 95.454245 9.900000 12.700000 97.403238 9.900000 12.800000 99.372231 9.900000 12.900000 101.361224 9.900000 13.000000 103.370217 9.900000 13.100000 105.399210 9.900000 13.200000 107.448204 9.900000 13.300000 109.517197 9.900000 13.400000 111.606190 9.900000 13.500000 113.715183 9.900000 13.600000 115.844176 9.900000 13.700000 117.993169 9.900000 13.800000 120.162162 9.900000 13.900000 122.351155 9.900000 14.000000 124.560149 9.900000 14.100000 126.789142 9.900000 14.200000 129.038135 9.900000 14.300000 131.307128 9.900000 14.400000 133.596121 9.900000 14.500000 135.905114 9.900000 14.600000 138.234107 9.900000 14.700000 140.583100 9.900000 14.800000 142.952094 9.900000 14.900000 145.341087 9.900000 15.000000 147.750080 10.000000 -5.000000 65.990455 10.000000 -4.900000 64.399864 10.000000 -4.800000 62.829272 10.000000 -4.700000 61.278681 10.000000 -4.600000 59.748090 10.000000 -4.500000 58.237498 10.000000 -4.400000 56.746907 10.000000 -4.300000 55.276316 10.000000 -4.200000 53.825725 10.000000 -4.100000 52.395133 10.000000 -4.000000 50.984542 10.000000 -3.900000 49.593951 10.000000 -3.800000 48.223359 10.000000 -3.700000 46.872768 10.000000 -3.600000 45.542177 10.000000 -3.500000 44.231585 10.000000 -3.400000 42.940994 10.000000 -3.300000 41.670403 10.000000 -3.200000 40.419811 10.000000 -3.100000 39.189220 10.000000 -3.000000 37.978629 10.000000 -2.900000 36.788037 10.000000 -2.800000 35.617446 10.000000 -2.700000 34.466855 10.000000 -2.600000 33.336263 10.000000 -2.500000 32.225672 10.000000 -2.400000 31.135081 10.000000 -2.300000 30.064489 10.000000 -2.200000 29.013898 10.000000 -2.100000 27.983307 10.000000 -2.000000 26.972715 10.000000 -1.900000 25.982124 10.000000 -1.800000 25.011533 10.000000 -1.700000 24.060941 10.000000 -1.600000 23.130350 10.000000 -1.500000 22.219759 10.000000 -1.400000 21.329168 10.000000 -1.300000 20.458576 10.000000 -1.200000 19.607985 10.000000 -1.100000 18.777394 10.000000 -1.000000 17.966802 10.000000 -0.900000 17.176211 10.000000 -0.800000 16.405620 10.000000 -0.700000 15.655028 10.000000 -0.600000 14.924437 10.000000 -0.500000 14.213846 10.000000 -0.400000 13.523254 10.000000 -0.300000 12.852663 10.000000 -0.200000 12.202072 10.000000 -0.100000 11.571480 10.000000 -0.000000 10.960889 10.000000 0.100000 10.370298 10.000000 0.200000 9.799706 10.000000 0.300000 9.249115 10.000000 0.400000 8.718524 10.000000 0.500000 8.207932 10.000000 0.600000 7.717341 10.000000 0.700000 7.246750 10.000000 0.800000 6.796158 10.000000 0.900000 6.365567 10.000000 1.000000 5.954976 10.000000 1.100000 5.564385 10.000000 1.200000 5.193793 10.000000 1.300000 4.843202 10.000000 1.400000 4.512611 10.000000 1.500000 4.202019 10.000000 1.600000 3.911428 10.000000 1.700000 3.640837 10.000000 1.800000 3.390245 10.000000 1.900000 3.159654 10.000000 2.000000 2.949063 10.000000 2.100000 2.758471 10.000000 2.200000 2.587880 10.000000 2.300000 2.437289 10.000000 2.400000 2.306697 10.000000 2.500000 2.196106 10.000000 2.600000 2.105515 10.000000 2.700000 2.034923 10.000000 2.800000 1.984332 10.000000 2.900000 1.953741 10.000000 3.000000 1.943149 10.000000 3.100000 1.952558 10.000000 3.200000 1.981967 10.000000 3.300000 2.031375 10.000000 3.400000 2.100784 10.000000 3.500000 2.190193 10.000000 3.600000 2.299601 10.000000 3.700000 2.429010 10.000000 3.800000 2.578419 10.000000 3.900000 2.747828 10.000000 4.000000 2.937236 10.000000 4.100000 3.146645 10.000000 4.200000 3.376054 10.000000 4.300000 3.625462 10.000000 4.400000 3.894871 10.000000 4.500000 4.184280 10.000000 4.600000 4.493688 10.000000 4.700000 4.823097 10.000000 4.800000 5.172506 10.000000 4.900000 5.541914 10.000000 5.000000 5.931323 10.000000 5.100000 6.340732 10.000000 5.200000 6.770140 10.000000 5.300000 7.219549 10.000000 5.400000 7.688958 10.000000 5.500000 8.178366 10.000000 5.600000 8.687775 10.000000 5.700000 9.217184 10.000000 5.800000 9.766592 10.000000 5.900000 10.336001 10.000000 6.000000 10.925410 10.000000 6.100000 11.534818 10.000000 6.200000 12.164227 10.000000 6.300000 12.813636 10.000000 6.400000 13.483044 10.000000 6.500000 14.172453 10.000000 6.600000 14.881862 10.000000 6.700000 15.611271 10.000000 6.800000 16.360679 10.000000 6.900000 17.130088 10.000000 7.000000 17.919497 10.000000 7.100000 18.728905 10.000000 7.200000 19.558314 10.000000 7.300000 20.407723 10.000000 7.400000 21.277131 10.000000 7.500000 22.166540 10.000000 7.600000 23.075949 10.000000 7.700000 24.005357 10.000000 7.800000 24.954766 10.000000 7.900000 25.924175 10.000000 8.000000 26.913583 10.000000 8.100000 27.922992 10.000000 8.200000 28.952401 10.000000 8.300000 30.001809 10.000000 8.400000 31.071218 10.000000 8.500000 32.160627 10.000000 8.600000 33.270035 10.000000 8.700000 34.399444 10.000000 8.800000 35.548853 10.000000 8.900000 36.718261 10.000000 9.000000 37.907670 10.000000 9.100000 39.117079 10.000000 9.200000 40.346487 10.000000 9.300000 41.595896 10.000000 9.400000 42.865305 10.000000 9.500000 44.154714 10.000000 9.600000 45.464122 10.000000 9.700000 46.793531 10.000000 9.800000 48.142940 10.000000 9.900000 49.512348 10.000000 10.000000 50.901757 10.000000 10.100000 52.311166 10.000000 10.200000 53.740574 10.000000 10.300000 55.189983 10.000000 10.400000 56.659392 10.000000 10.500000 58.148800 10.000000 10.600000 59.658209 10.000000 10.700000 61.187618 10.000000 10.800000 62.737026 10.000000 10.900000 64.306435 10.000000 11.000000 65.895844 10.000000 11.100000 67.505252 10.000000 11.200000 69.134661 10.000000 11.300000 70.784070 10.000000 11.400000 72.453478 10.000000 11.500000 74.142887 10.000000 11.600000 75.852296 10.000000 11.700000 77.581704 10.000000 11.800000 79.331113 10.000000 11.900000 81.100522 10.000000 12.000000 82.889931 10.000000 12.100000 84.699339 10.000000 12.200000 86.528748 10.000000 12.300000 88.378157 10.000000 12.400000 90.247565 10.000000 12.500000 92.136974 10.000000 12.600000 94.046383 10.000000 12.700000 95.975791 10.000000 12.800000 97.925200 10.000000 12.900000 99.894609 10.000000 13.000000 101.884017 10.000000 13.100000 103.893426 10.000000 13.200000 105.922835 10.000000 13.300000 107.972243 10.000000 13.400000 110.041652 10.000000 13.500000 112.131061 10.000000 13.600000 114.240469 10.000000 13.700000 116.369878 10.000000 13.800000 118.519287 10.000000 13.900000 120.688695 10.000000 14.000000 122.878104 10.000000 14.100000 125.087513 10.000000 14.200000 127.316921 10.000000 14.300000 129.566330 10.000000 14.400000 131.835739 10.000000 14.500000 134.125147 10.000000 14.600000 136.434556 10.000000 14.700000 138.763965 10.000000 14.800000 141.113374 10.000000 14.900000 143.482782 10.000000 15.000000 145.872191 10.100000 -5.000000 68.171001 10.100000 -4.900000 66.560309 10.100000 -4.800000 64.969616 10.100000 -4.700000 63.398924 10.100000 -4.600000 61.848231 10.100000 -4.500000 60.317539 10.100000 -4.400000 58.806846 10.100000 -4.300000 57.316154 10.100000 -4.200000 55.845461 10.100000 -4.100000 54.394769 10.100000 -4.000000 52.964076 10.100000 -3.900000 51.553384 10.100000 -3.800000 50.162691 10.100000 -3.700000 48.791999 10.100000 -3.600000 47.441306 10.100000 -3.500000 46.110614 10.100000 -3.400000 44.799921 10.100000 -3.300000 43.509229 10.100000 -3.200000 42.238536 10.100000 -3.100000 40.987844 10.100000 -3.000000 39.757151 10.100000 -2.900000 38.546459 10.100000 -2.800000 37.355766 10.100000 -2.700000 36.185074 10.100000 -2.600000 35.034381 10.100000 -2.500000 33.903689 10.100000 -2.400000 32.792996 10.100000 -2.300000 31.702304 10.100000 -2.200000 30.631611 10.100000 -2.100000 29.580919 10.100000 -2.000000 28.550226 10.100000 -1.900000 27.539534 10.100000 -1.800000 26.548841 10.100000 -1.700000 25.578149 10.100000 -1.600000 24.627456 10.100000 -1.500000 23.696764 10.100000 -1.400000 22.786071 10.100000 -1.300000 21.895379 10.100000 -1.200000 21.024686 10.100000 -1.100000 20.173994 10.100000 -1.000000 19.343301 10.100000 -0.900000 18.532609 10.100000 -0.800000 17.741916 10.100000 -0.700000 16.971224 10.100000 -0.600000 16.220531 10.100000 -0.500000 15.489839 10.100000 -0.400000 14.779146 10.100000 -0.300000 14.088454 10.100000 -0.200000 13.417761 10.100000 -0.100000 12.767069 10.100000 -0.000000 12.136376 10.100000 0.100000 11.525684 10.100000 0.200000 10.934991 10.100000 0.300000 10.364299 10.100000 0.400000 9.813606 10.100000 0.500000 9.282914 10.100000 0.600000 8.772221 10.100000 0.700000 8.281529 10.100000 0.800000 7.810836 10.100000 0.900000 7.360144 10.100000 1.000000 6.929451 10.100000 1.100000 6.518759 10.100000 1.200000 6.128066 10.100000 1.300000 5.757373 10.100000 1.400000 5.406681 10.100000 1.500000 5.075988 10.100000 1.600000 4.765296 10.100000 1.700000 4.474603 10.100000 1.800000 4.203911 10.100000 1.900000 3.953218 10.100000 2.000000 3.722526 10.100000 2.100000 3.511833 10.100000 2.200000 3.321141 10.100000 2.300000 3.150448 10.100000 2.400000 2.999756 10.100000 2.500000 2.869063 10.100000 2.600000 2.758371 10.100000 2.700000 2.667678 10.100000 2.800000 2.596986 10.100000 2.900000 2.546293 10.100000 3.000000 2.515601 10.100000 3.100000 2.504908 10.100000 3.200000 2.514216 10.100000 3.300000 2.543523 10.100000 3.400000 2.592831 10.100000 3.500000 2.662138 10.100000 3.600000 2.751446 10.100000 3.700000 2.860753 10.100000 3.800000 2.990061 10.100000 3.900000 3.139368 10.100000 4.000000 3.308676 10.100000 4.100000 3.497983 10.100000 4.200000 3.707291 10.100000 4.300000 3.936598 10.100000 4.400000 4.185906 10.100000 4.500000 4.455213 10.100000 4.600000 4.744521 10.100000 4.700000 5.053828 10.100000 4.800000 5.383136 10.100000 4.900000 5.732443 10.100000 5.000000 6.101751 10.100000 5.100000 6.491058 10.100000 5.200000 6.900366 10.100000 5.300000 7.329673 10.100000 5.400000 7.778981 10.100000 5.500000 8.248288 10.100000 5.600000 8.737596 10.100000 5.700000 9.246903 10.100000 5.800000 9.776211 10.100000 5.900000 10.325518 10.100000 6.000000 10.894826 10.100000 6.100000 11.484133 10.100000 6.200000 12.093441 10.100000 6.300000 12.722748 10.100000 6.400000 13.372056 10.100000 6.500000 14.041363 10.100000 6.600000 14.730671 10.100000 6.700000 15.439978 10.100000 6.800000 16.169286 10.100000 6.900000 16.918593 10.100000 7.000000 17.687901 10.100000 7.100000 18.477208 10.100000 7.200000 19.286516 10.100000 7.300000 20.115823 10.100000 7.400000 20.965131 10.100000 7.500000 21.834438 10.100000 7.600000 22.723746 10.100000 7.700000 23.633053 10.100000 7.800000 24.562361 10.100000 7.900000 25.511668 10.100000 8.000000 26.480976 10.100000 8.100000 27.470283 10.100000 8.200000 28.479591 10.100000 8.300000 29.508898 10.100000 8.400000 30.558206 10.100000 8.500000 31.627513 10.100000 8.600000 32.716821 10.100000 8.700000 33.826128 10.100000 8.800000 34.955436 10.100000 8.900000 36.104743 10.100000 9.000000 37.274051 10.100000 9.100000 38.463358 10.100000 9.200000 39.672666 10.100000 9.300000 40.901973 10.100000 9.400000 42.151281 10.100000 9.500000 43.420588 10.100000 9.600000 44.709896 10.100000 9.700000 46.019203 10.100000 9.800000 47.348511 10.100000 9.900000 48.697818 10.100000 10.000000 50.067126 10.100000 10.100000 51.456433 10.100000 10.200000 52.865741 10.100000 10.300000 54.295048 10.100000 10.400000 55.744356 10.100000 10.500000 57.213663 10.100000 10.600000 58.702971 10.100000 10.700000 60.212278 10.100000 10.800000 61.741586 10.100000 10.900000 63.290893 10.100000 11.000000 64.860200 10.100000 11.100000 66.449508 10.100000 11.200000 68.058815 10.100000 11.300000 69.688123 10.100000 11.400000 71.337430 10.100000 11.500000 73.006738 10.100000 11.600000 74.696045 10.100000 11.700000 76.405353 10.100000 11.800000 78.134660 10.100000 11.900000 79.883968 10.100000 12.000000 81.653275 10.100000 12.100000 83.442583 10.100000 12.200000 85.251890 10.100000 12.300000 87.081198 10.100000 12.400000 88.930505 10.100000 12.500000 90.799813 10.100000 12.600000 92.689120 10.100000 12.700000 94.598428 10.100000 12.800000 96.527735 10.100000 12.900000 98.477043 10.100000 13.000000 100.446350 10.100000 13.100000 102.435658 10.100000 13.200000 104.444965 10.100000 13.300000 106.474273 10.100000 13.400000 108.523580 10.100000 13.500000 110.592888 10.100000 13.600000 112.682195 10.100000 13.700000 114.791503 10.100000 13.800000 116.920810 10.100000 13.900000 119.070118 10.100000 14.000000 121.239425 10.100000 14.100000 123.428733 10.100000 14.200000 125.638040 10.100000 14.300000 127.867348 10.100000 14.400000 130.116655 10.100000 14.500000 132.385963 10.100000 14.600000 134.675270 10.100000 14.700000 136.984578 10.100000 14.800000 139.313885 10.100000 14.900000 141.663193 10.100000 15.000000 144.032500 10.200000 -5.000000 70.489039 10.200000 -4.900000 68.857728 10.200000 -4.800000 67.246418 10.200000 -4.700000 65.655107 10.200000 -4.600000 64.083797 10.200000 -4.500000 62.532487 10.200000 -4.400000 61.001176 10.200000 -4.300000 59.489866 10.200000 -4.200000 57.998555 10.200000 -4.100000 56.527245 10.200000 -4.000000 55.075934 10.200000 -3.900000 53.644624 10.200000 -3.800000 52.233314 10.200000 -3.700000 50.842003 10.200000 -3.600000 49.470693 10.200000 -3.500000 48.119382 10.200000 -3.400000 46.788072 10.200000 -3.300000 45.476761 10.200000 -3.200000 44.185451 10.200000 -3.100000 42.914141 10.200000 -3.000000 41.662830 10.200000 -2.900000 40.431520 10.200000 -2.800000 39.220209 10.200000 -2.700000 38.028899 10.200000 -2.600000 36.857588 10.200000 -2.500000 35.706278 10.200000 -2.400000 34.574968 10.200000 -2.300000 33.463657 10.200000 -2.200000 32.372347 10.200000 -2.100000 31.301036 10.200000 -2.000000 30.249726 10.200000 -1.900000 29.218415 10.200000 -1.800000 28.207105 10.200000 -1.700000 27.215795 10.200000 -1.600000 26.244484 10.200000 -1.500000 25.293174 10.200000 -1.400000 24.361863 10.200000 -1.300000 23.450553 10.200000 -1.200000 22.559242 10.200000 -1.100000 21.687932 10.200000 -1.000000 20.836622 10.200000 -0.900000 20.005311 10.200000 -0.800000 19.194001 10.200000 -0.700000 18.402690 10.200000 -0.600000 17.631380 10.200000 -0.500000 16.880069 10.200000 -0.400000 16.148759 10.200000 -0.300000 15.437449 10.200000 -0.200000 14.746138 10.200000 -0.100000 14.074828 10.200000 -0.000000 13.423517 10.200000 0.100000 12.792207 10.200000 0.200000 12.180896 10.200000 0.300000 11.589586 10.200000 0.400000 11.018276 10.200000 0.500000 10.466965 10.200000 0.600000 9.935655 10.200000 0.700000 9.424344 10.200000 0.800000 8.933034 10.200000 0.900000 8.461724 10.200000 1.000000 8.010413 10.200000 1.100000 7.579103 10.200000 1.200000 7.167792 10.200000 1.300000 6.776482 10.200000 1.400000 6.405171 10.200000 1.500000 6.053861 10.200000 1.600000 5.722551 10.200000 1.700000 5.411240 10.200000 1.800000 5.119930 10.200000 1.900000 4.848619 10.200000 2.000000 4.597309 10.200000 2.100000 4.365998 10.200000 2.200000 4.154688 10.200000 2.300000 3.963378 10.200000 2.400000 3.792067 10.200000 2.500000 3.640757 10.200000 2.600000 3.509446 10.200000 2.700000 3.398136 10.200000 2.800000 3.306825 10.200000 2.900000 3.235515 10.200000 3.000000 3.184205 10.200000 3.100000 3.152894 10.200000 3.200000 3.141584 10.200000 3.300000 3.150273 10.200000 3.400000 3.178963 10.200000 3.500000 3.227652 10.200000 3.600000 3.296342 10.200000 3.700000 3.385032 10.200000 3.800000 3.493721 10.200000 3.900000 3.622411 10.200000 4.000000 3.771100 10.200000 4.100000 3.939790 10.200000 4.200000 4.128479 10.200000 4.300000 4.337169 10.200000 4.400000 4.565859 10.200000 4.500000 4.814548 10.200000 4.600000 5.083238 10.200000 4.700000 5.371927 10.200000 4.800000 5.680617 10.200000 4.900000 6.009306 10.200000 5.000000 6.357996 10.200000 5.100000 6.726686 10.200000 5.200000 7.115375 10.200000 5.300000 7.524065 10.200000 5.400000 7.952754 10.200000 5.500000 8.401444 10.200000 5.600000 8.870133 10.200000 5.700000 9.358823 10.200000 5.800000 9.867513 10.200000 5.900000 10.396202 10.200000 6.000000 10.944892 10.200000 6.100000 11.513581 10.200000 6.200000 12.102271 10.200000 6.300000 12.710960 10.200000 6.400000 13.339650 10.200000 6.500000 13.988340 10.200000 6.600000 14.657029 10.200000 6.700000 15.345719 10.200000 6.800000 16.054408 10.200000 6.900000 16.783098 10.200000 7.000000 17.531787 10.200000 7.100000 18.300477 10.200000 7.200000 19.089167 10.200000 7.300000 19.897856 10.200000 7.400000 20.726546 10.200000 7.500000 21.575235 10.200000 7.600000 22.443925 10.200000 7.700000 23.332614 10.200000 7.800000 24.241304 10.200000 7.900000 25.169994 10.200000 8.000000 26.118683 10.200000 8.100000 27.087373 10.200000 8.200000 28.076062 10.200000 8.300000 29.084752 10.200000 8.400000 30.113441 10.200000 8.500000 31.162131 10.200000 8.600000 32.230821 10.200000 8.700000 33.319510 10.200000 8.800000 34.428200 10.200000 8.900000 35.556889 10.200000 9.000000 36.705579 10.200000 9.100000 37.874268 10.200000 9.200000 39.062958 10.200000 9.300000 40.271648 10.200000 9.400000 41.500337 10.200000 9.500000 42.749027 10.200000 9.600000 44.017716 10.200000 9.700000 45.306406 10.200000 9.800000 46.615095 10.200000 9.900000 47.943785 10.200000 10.000000 49.292475 10.200000 10.100000 50.661164 10.200000 10.200000 52.049854 10.200000 10.300000 53.458543 10.200000 10.400000 54.887233 10.200000 10.500000 56.335922 10.200000 10.600000 57.804612 10.200000 10.700000 59.293302 10.200000 10.800000 60.801991 10.200000 10.900000 62.330681 10.200000 11.000000 63.879370 10.200000 11.100000 65.448060 10.200000 11.200000 67.036750 10.200000 11.300000 68.645439 10.200000 11.400000 70.274129 10.200000 11.500000 71.922818 10.200000 11.600000 73.591508 10.200000 11.700000 75.280197 10.200000 11.800000 76.988887 10.200000 11.900000 78.717577 10.200000 12.000000 80.466266 10.200000 12.100000 82.234956 10.200000 12.200000 84.023645 10.200000 12.300000 85.832335 10.200000 12.400000 87.661024 10.200000 12.500000 89.509714 10.200000 12.600000 91.378404 10.200000 12.700000 93.267093 10.200000 12.800000 95.175783 10.200000 12.900000 97.104472 10.200000 13.000000 99.053162 10.200000 13.100000 101.021851 10.200000 13.200000 103.010541 10.200000 13.300000 105.019231 10.200000 13.400000 107.047920 10.200000 13.500000 109.096610 10.200000 13.600000 111.165299 10.200000 13.700000 113.253989 10.200000 13.800000 115.362678 10.200000 13.900000 117.491368 10.200000 14.000000 119.640058 10.200000 14.100000 121.808747 10.200000 14.200000 123.997437 10.200000 14.300000 126.206126 10.200000 14.400000 128.434816 10.200000 14.500000 130.683505 10.200000 14.600000 132.952195 10.200000 14.700000 135.240885 10.200000 14.800000 137.549574 10.200000 14.900000 139.878264 10.200000 15.000000 142.226953 10.300000 -5.000000 72.939804 10.300000 -4.900000 71.287359 10.300000 -4.800000 69.654914 10.300000 -4.700000 68.042469 10.300000 -4.600000 66.450024 10.300000 -4.500000 64.877579 10.300000 -4.400000 63.325134 10.300000 -4.300000 61.792689 10.300000 -4.200000 60.280244 10.300000 -4.100000 58.787798 10.300000 -4.000000 57.315353 10.300000 -3.900000 55.862908 10.300000 -3.800000 54.430463 10.300000 -3.700000 53.018018 10.300000 -3.600000 51.625573 10.300000 -3.500000 50.253128 10.300000 -3.400000 48.900683 10.300000 -3.300000 47.568238 10.300000 -3.200000 46.255793 10.300000 -3.100000 44.963348 10.300000 -3.000000 43.690903 10.300000 -2.900000 42.438457 10.300000 -2.800000 41.206012 10.300000 -2.700000 39.993567 10.300000 -2.600000 38.801122 10.300000 -2.500000 37.628677 10.300000 -2.400000 36.476232 10.300000 -2.300000 35.343787 10.300000 -2.200000 34.231342 10.300000 -2.100000 33.138897 10.300000 -2.000000 32.066452 10.300000 -1.900000 31.014007 10.300000 -1.800000 29.981561 10.300000 -1.700000 28.969116 10.300000 -1.600000 27.976671 10.300000 -1.500000 27.004226 10.300000 -1.400000 26.051781 10.300000 -1.300000 25.119336 10.300000 -1.200000 24.206891 10.300000 -1.100000 23.314446 10.300000 -1.000000 22.442001 10.300000 -0.900000 21.589556 10.300000 -0.800000 20.757111 10.300000 -0.700000 19.944666 10.300000 -0.600000 19.152220 10.300000 -0.500000 18.379775 10.300000 -0.400000 17.627330 10.300000 -0.300000 16.894885 10.300000 -0.200000 16.182440 10.300000 -0.100000 15.489995 10.300000 -0.000000 14.817550 10.300000 0.100000 14.165105 10.300000 0.200000 13.532660 10.300000 0.300000 12.920215 10.300000 0.400000 12.327770 10.300000 0.500000 11.755324 10.300000 0.600000 11.202879 10.300000 0.700000 10.670434 10.300000 0.800000 10.157989 10.300000 0.900000 9.665544 10.300000 1.000000 9.193099 10.300000 1.100000 8.740654 10.300000 1.200000 8.308209 10.300000 1.300000 7.895764 10.300000 1.400000 7.503319 10.300000 1.500000 7.130874 10.300000 1.600000 6.778428 10.300000 1.700000 6.445983 10.300000 1.800000 6.133538 10.300000 1.900000 5.841093 10.300000 2.000000 5.568648 10.300000 2.100000 5.316203 10.300000 2.200000 5.083758 10.300000 2.300000 4.871313 10.300000 2.400000 4.678868 10.300000 2.500000 4.506423 10.300000 2.600000 4.353978 10.300000 2.700000 4.221533 10.300000 2.800000 4.109087 10.300000 2.900000 4.016642 10.300000 3.000000 3.944197 10.300000 3.100000 3.891752 10.300000 3.200000 3.859307 10.300000 3.300000 3.846862 10.300000 3.400000 3.854417 10.300000 3.500000 3.881972 10.300000 3.600000 3.929527 10.300000 3.700000 3.997082 10.300000 3.800000 4.084637 10.300000 3.900000 4.192191 10.300000 4.000000 4.319746 10.300000 4.100000 4.467301 10.300000 4.200000 4.634856 10.300000 4.300000 4.822411 10.300000 4.400000 5.029966 10.300000 4.500000 5.257521 10.300000 4.600000 5.505076 10.300000 4.700000 5.772631 10.300000 4.800000 6.060186 10.300000 4.900000 6.367741 10.300000 5.000000 6.695296 10.300000 5.100000 7.042850 10.300000 5.200000 7.410405 10.300000 5.300000 7.797960 10.300000 5.400000 8.205515 10.300000 5.500000 8.633070 10.300000 5.600000 9.080625 10.300000 5.700000 9.548180 10.300000 5.800000 10.035735 10.300000 5.900000 10.543290 10.300000 6.000000 11.070845 10.300000 6.100000 11.618400 10.300000 6.200000 12.185954 10.300000 6.300000 12.773509 10.300000 6.400000 13.381064 10.300000 6.500000 14.008619 10.300000 6.600000 14.656174 10.300000 6.700000 15.323729 10.300000 6.800000 16.011284 10.300000 6.900000 16.718839 10.300000 7.000000 17.446394 10.300000 7.100000 18.193949 10.300000 7.200000 18.961504 10.300000 7.300000 19.749059 10.300000 7.400000 20.556613 10.300000 7.500000 21.384168 10.300000 7.600000 22.231723 10.300000 7.700000 23.099278 10.300000 7.800000 23.986833 10.300000 7.900000 24.894388 10.300000 8.000000 25.821943 10.300000 8.100000 26.769498 10.300000 8.200000 27.737053 10.300000 8.300000 28.724608 10.300000 8.400000 29.732163 10.300000 8.500000 30.759717 10.300000 8.600000 31.807272 10.300000 8.700000 32.874827 10.300000 8.800000 33.962382 10.300000 8.900000 35.069937 10.300000 9.000000 36.197492 10.300000 9.100000 37.345047 10.300000 9.200000 38.512602 10.300000 9.300000 39.700157 10.300000 9.400000 40.907712 10.300000 9.500000 42.135267 10.300000 9.600000 43.382822 10.300000 9.700000 44.650376 10.300000 9.800000 45.937931 10.300000 9.900000 47.245486 10.300000 10.000000 48.573041 10.300000 10.100000 49.920596 10.300000 10.200000 51.288151 10.300000 10.300000 52.675706 10.300000 10.400000 54.083261 10.300000 10.500000 55.510816 10.300000 10.600000 56.958371 10.300000 10.700000 58.425926 10.300000 10.800000 59.913480 10.300000 10.900000 61.421035 10.300000 11.000000 62.948590 10.300000 11.100000 64.496145 10.300000 11.200000 66.063700 10.300000 11.300000 67.651255 10.300000 11.400000 69.258810 10.300000 11.500000 70.886365 10.300000 11.600000 72.533920 10.300000 11.700000 74.201475 10.300000 11.800000 75.889030 10.300000 11.900000 77.596585 10.300000 12.000000 79.324139 10.300000 12.100000 81.071694 10.300000 12.200000 82.839249 10.300000 12.300000 84.626804 10.300000 12.400000 86.434359 10.300000 12.500000 88.261914 10.300000 12.600000 90.109469 10.300000 12.700000 91.977024 10.300000 12.800000 93.864579 10.300000 12.900000 95.772134 10.300000 13.000000 97.699689 10.300000 13.100000 99.647243 10.300000 13.200000 101.614798 10.300000 13.300000 103.602353 10.300000 13.400000 105.609908 10.300000 13.500000 107.637463 10.300000 13.600000 109.685018 10.300000 13.700000 111.752573 10.300000 13.800000 113.840128 10.300000 13.900000 115.947683 10.300000 14.000000 118.075238 10.300000 14.100000 120.222793 10.300000 14.200000 122.390347 10.300000 14.300000 124.577902 10.300000 14.400000 126.785457 10.300000 14.500000 129.013012 10.300000 14.600000 131.260567 10.300000 14.700000 133.528122 10.300000 14.800000 135.815677 10.300000 14.900000 138.123232 10.300000 15.000000 140.450787 10.400000 -5.000000 75.517890 10.400000 -4.900000 73.843794 10.400000 -4.800000 72.189697 10.400000 -4.700000 70.555601 10.400000 -4.600000 68.941504 10.400000 -4.500000 67.347408 10.400000 -4.400000 65.773311 10.400000 -4.300000 64.219215 10.400000 -4.200000 62.685118 10.400000 -4.100000 61.171022 10.400000 -4.000000 59.676925 10.400000 -3.900000 58.202829 10.400000 -3.800000 56.748732 10.400000 -3.700000 55.314636 10.400000 -3.600000 53.900539 10.400000 -3.500000 52.506443 10.400000 -3.400000 51.132347 10.400000 -3.300000 49.778250 10.400000 -3.200000 48.444154 10.400000 -3.100000 47.130057 10.400000 -3.000000 45.835961 10.400000 -2.900000 44.561864 10.400000 -2.800000 43.307768 10.400000 -2.700000 42.073671 10.400000 -2.600000 40.859575 10.400000 -2.500000 39.665478 10.400000 -2.400000 38.491382 10.400000 -2.300000 37.337285 10.400000 -2.200000 36.203189 10.400000 -2.100000 35.089092 10.400000 -2.000000 33.994996 10.400000 -1.900000 32.920899 10.400000 -1.800000 31.866803 10.400000 -1.700000 30.832706 10.400000 -1.600000 29.818610 10.400000 -1.500000 28.824513 10.400000 -1.400000 27.850417 10.400000 -1.300000 26.896320 10.400000 -1.200000 25.962224 10.400000 -1.100000 25.048127 10.400000 -1.000000 24.154031 10.400000 -0.900000 23.279934 10.400000 -0.800000 22.425838 10.400000 -0.700000 21.591741 10.400000 -0.600000 20.777645 10.400000 -0.500000 19.983548 10.400000 -0.400000 19.209452 10.400000 -0.300000 18.455355 10.400000 -0.200000 17.721259 10.400000 -0.100000 17.007162 10.400000 -0.000000 16.313066 10.400000 0.100000 15.638970 10.400000 0.200000 14.984873 10.400000 0.300000 14.350777 10.400000 0.400000 13.736680 10.400000 0.500000 13.142584 10.400000 0.600000 12.568487 10.400000 0.700000 12.014391 10.400000 0.800000 11.480294 10.400000 0.900000 10.966198 10.400000 1.000000 10.472101 10.400000 1.100000 9.998005 10.400000 1.200000 9.543908 10.400000 1.300000 9.109812 10.400000 1.400000 8.695715 10.400000 1.500000 8.301619 10.400000 1.600000 7.927522 10.400000 1.700000 7.573426 10.400000 1.800000 7.239329 10.400000 1.900000 6.925233 10.400000 2.000000 6.631136 10.400000 2.100000 6.357040 10.400000 2.200000 6.102943 10.400000 2.300000 5.868847 10.400000 2.400000 5.654750 10.400000 2.500000 5.460654 10.400000 2.600000 5.286557 10.400000 2.700000 5.132461 10.400000 2.800000 4.998364 10.400000 2.900000 4.884268 10.400000 3.000000 4.790171 10.400000 3.100000 4.716075 10.400000 3.200000 4.661978 10.400000 3.300000 4.627882 10.400000 3.400000 4.613785 10.400000 3.500000 4.619689 10.400000 3.600000 4.645593 10.400000 3.700000 4.691496 10.400000 3.800000 4.757400 10.400000 3.900000 4.843303 10.400000 4.000000 4.949207 10.400000 4.100000 5.075110 10.400000 4.200000 5.221014 10.400000 4.300000 5.386917 10.400000 4.400000 5.572821 10.400000 4.500000 5.778724 10.400000 4.600000 6.004628 10.400000 4.700000 6.250531 10.400000 4.800000 6.516435 10.400000 4.900000 6.802338 10.400000 5.000000 7.108242 10.400000 5.100000 7.434145 10.400000 5.200000 7.780049 10.400000 5.300000 8.145952 10.400000 5.400000 8.531856 10.400000 5.500000 8.937759 10.400000 5.600000 9.363663 10.400000 5.700000 9.809566 10.400000 5.800000 10.275470 10.400000 5.900000 10.761373 10.400000 6.000000 11.267277 10.400000 6.100000 11.793180 10.400000 6.200000 12.339084 10.400000 6.300000 12.904987 10.400000 6.400000 13.490891 10.400000 6.500000 14.096794 10.400000 6.600000 14.722698 10.400000 6.700000 15.368601 10.400000 6.800000 16.034505 10.400000 6.900000 16.720409 10.400000 7.000000 17.426312 10.400000 7.100000 18.152216 10.400000 7.200000 18.898119 10.400000 7.300000 19.664023 10.400000 7.400000 20.449926 10.400000 7.500000 21.255830 10.400000 7.600000 22.081733 10.400000 7.700000 22.927637 10.400000 7.800000 23.793540 10.400000 7.900000 24.679444 10.400000 8.000000 25.585347 10.400000 8.100000 26.511251 10.400000 8.200000 27.457154 10.400000 8.300000 28.423058 10.400000 8.400000 29.408961 10.400000 8.500000 30.414865 10.400000 8.600000 31.440768 10.400000 8.700000 32.486672 10.400000 8.800000 33.552575 10.400000 8.900000 34.638479 10.400000 9.000000 35.744382 10.400000 9.100000 36.870286 10.400000 9.200000 38.016189 10.400000 9.300000 39.182093 10.400000 9.400000 40.367996 10.400000 9.500000 41.573900 10.400000 9.600000 42.799803 10.400000 9.700000 44.045707 10.400000 9.800000 45.311610 10.400000 9.900000 46.597514 10.400000 10.000000 47.903417 10.400000 10.100000 49.229321 10.400000 10.200000 50.575224 10.400000 10.300000 51.941128 10.400000 10.400000 53.327032 10.400000 10.500000 54.732935 10.400000 10.600000 56.158839 10.400000 10.700000 57.604742 10.400000 10.800000 59.070646 10.400000 10.900000 60.556549 10.400000 11.000000 62.062453 10.400000 11.100000 63.588356 10.400000 11.200000 65.134260 10.400000 11.300000 66.700163 10.400000 11.400000 68.286067 10.400000 11.500000 69.891970 10.400000 11.600000 71.517874 10.400000 11.700000 73.163777 10.400000 11.800000 74.829681 10.400000 11.900000 76.515584 10.400000 12.000000 78.221488 10.400000 12.100000 79.947391 10.400000 12.200000 81.693295 10.400000 12.300000 83.459198 10.400000 12.400000 85.245102 10.400000 12.500000 87.051005 10.400000 12.600000 88.876909 10.400000 12.700000 90.722812 10.400000 12.800000 92.588716 10.400000 12.900000 94.474619 10.400000 13.000000 96.380523 10.400000 13.100000 98.306426 10.400000 13.200000 100.252330 10.400000 13.300000 102.218233 10.400000 13.400000 104.204137 10.400000 13.500000 106.210040 10.400000 13.600000 108.235944 10.400000 13.700000 110.281847 10.400000 13.800000 112.347751 10.400000 13.900000 114.433655 10.400000 14.000000 116.539558 10.400000 14.100000 118.665462 10.400000 14.200000 120.811365 10.400000 14.300000 122.977269 10.400000 14.400000 125.163172 10.400000 14.500000 127.369076 10.400000 14.600000 129.594979 10.400000 14.700000 131.840883 10.400000 14.800000 134.106786 10.400000 14.900000 136.392690 10.400000 15.000000 138.698593 10.500000 -5.000000 78.217315 10.500000 -4.900000 76.521050 10.500000 -4.800000 74.844786 10.500000 -4.700000 73.188521 10.500000 -4.600000 71.552256 10.500000 -4.500000 69.935992 10.500000 -4.400000 68.339727 10.500000 -4.300000 66.763462 10.500000 -4.200000 65.207198 10.500000 -4.100000 63.670933 10.500000 -4.000000 62.154669 10.500000 -3.900000 60.658404 10.500000 -3.800000 59.182139 10.500000 -3.700000 57.725875 10.500000 -3.600000 56.289610 10.500000 -3.500000 54.873346 10.500000 -3.400000 53.477081 10.500000 -3.300000 52.100816 10.500000 -3.200000 50.744552 10.500000 -3.100000 49.408287 10.500000 -3.000000 48.092022 10.500000 -2.900000 46.795758 10.500000 -2.800000 45.519493 10.500000 -2.700000 44.263229 10.500000 -2.600000 43.026964 10.500000 -2.500000 41.810699 10.500000 -2.400000 40.614435 10.500000 -2.300000 39.438170 10.500000 -2.200000 38.281905 10.500000 -2.100000 37.145641 10.500000 -2.000000 36.029376 10.500000 -1.900000 34.933112 10.500000 -1.800000 33.856847 10.500000 -1.700000 32.800582 10.500000 -1.600000 31.764318 10.500000 -1.500000 30.748053 10.500000 -1.400000 29.751788 10.500000 -1.300000 28.775524 10.500000 -1.200000 27.819259 10.500000 -1.100000 26.882995 10.500000 -1.000000 25.966730 10.500000 -0.900000 25.070465 10.500000 -0.800000 24.194201 10.500000 -0.700000 23.337936 10.500000 -0.600000 22.501671 10.500000 -0.500000 21.685407 10.500000 -0.400000 20.889142 10.500000 -0.300000 20.112878 10.500000 -0.200000 19.356613 10.500000 -0.100000 18.620348 10.500000 -0.000000 17.904084 10.500000 0.100000 17.207819 10.500000 0.200000 16.531555 10.500000 0.300000 15.875290 10.500000 0.400000 15.239025 10.500000 0.500000 14.622761 10.500000 0.600000 14.026496 10.500000 0.700000 13.450231 10.500000 0.800000 12.893967 10.500000 0.900000 12.357702 10.500000 1.000000 11.841438 10.500000 1.100000 11.345173 10.500000 1.200000 10.868908 10.500000 1.300000 10.412644 10.500000 1.400000 9.976379 10.500000 1.500000 9.560114 10.500000 1.600000 9.163850 10.500000 1.700000 8.787585 10.500000 1.800000 8.431321 10.500000 1.900000 8.095056 10.500000 2.000000 7.778791 10.500000 2.100000 7.482527 10.500000 2.200000 7.206262 10.500000 2.300000 6.949997 10.500000 2.400000 6.713733 10.500000 2.500000 6.497468 10.500000 2.600000 6.301204 10.500000 2.700000 6.124939 10.500000 2.800000 5.968674 10.500000 2.900000 5.832410 10.500000 3.000000 5.716145 10.500000 3.100000 5.619880 10.500000 3.200000 5.543616 10.500000 3.300000 5.487351 10.500000 3.400000 5.451087 10.500000 3.500000 5.434822 10.500000 3.600000 5.438557 10.500000 3.700000 5.462293 10.500000 3.800000 5.506028 10.500000 3.900000 5.569764 10.500000 4.000000 5.653499 10.500000 4.100000 5.757234 10.500000 4.200000 5.880970 10.500000 4.300000 6.024705 10.500000 4.400000 6.188440 10.500000 4.500000 6.372176 10.500000 4.600000 6.575911 10.500000 4.700000 6.799647 10.500000 4.800000 7.043382 10.500000 4.900000 7.307117 10.500000 5.000000 7.590853 10.500000 5.100000 7.894588 10.500000 5.200000 8.218323 10.500000 5.300000 8.562059 10.500000 5.400000 8.925794 10.500000 5.500000 9.309530 10.500000 5.600000 9.713265 10.500000 5.700000 10.137000 10.500000 5.800000 10.580736 10.500000 5.900000 11.044471 10.500000 6.000000 11.528206 10.500000 6.100000 12.031942 10.500000 6.200000 12.555677 10.500000 6.300000 13.099413 10.500000 6.400000 13.663148 10.500000 6.500000 14.246883 10.500000 6.600000 14.850619 10.500000 6.700000 15.474354 10.500000 6.800000 16.118089 10.500000 6.900000 16.781825 10.500000 7.000000 17.465560 10.500000 7.100000 18.169296 10.500000 7.200000 18.893031 10.500000 7.300000 19.636766 10.500000 7.400000 20.400502 10.500000 7.500000 21.184237 10.500000 7.600000 21.987972 10.500000 7.700000 22.811708 10.500000 7.800000 23.655443 10.500000 7.900000 24.519179 10.500000 8.000000 25.402914 10.500000 8.100000 26.306649 10.500000 8.200000 27.230385 10.500000 8.300000 28.174120 10.500000 8.400000 29.137856 10.500000 8.500000 30.121591 10.500000 8.600000 31.125326 10.500000 8.700000 32.149062 10.500000 8.800000 33.192797 10.500000 8.900000 34.256532 10.500000 9.000000 35.340268 10.500000 9.100000 36.444003 10.500000 9.200000 37.567739 10.500000 9.300000 38.711474 10.500000 9.400000 39.875209 10.500000 9.500000 41.058945 10.500000 9.600000 42.262680 10.500000 9.700000 43.486415 10.500000 9.800000 44.730151 10.500000 9.900000 45.993886 10.500000 10.000000 47.277622 10.500000 10.100000 48.581357 10.500000 10.200000 49.905092 10.500000 10.300000 51.248828 10.500000 10.400000 52.612563 10.500000 10.500000 53.996298 10.500000 10.600000 55.400034 10.500000 10.700000 56.823769 10.500000 10.800000 58.267505 10.500000 10.900000 59.731240 10.500000 11.000000 61.214975 10.500000 11.100000 62.718711 10.500000 11.200000 64.242446 10.500000 11.300000 65.786181 10.500000 11.400000 67.349917 10.500000 11.500000 68.933652 10.500000 11.600000 70.537388 10.500000 11.700000 72.161123 10.500000 11.800000 73.804858 10.500000 11.900000 75.468594 10.500000 12.000000 77.152329 10.500000 12.100000 78.856065 10.500000 12.200000 80.579800 10.500000 12.300000 82.323535 10.500000 12.400000 84.087271 10.500000 12.500000 85.871006 10.500000 12.600000 87.674741 10.500000 12.700000 89.498477 10.500000 12.800000 91.342212 10.500000 12.900000 93.205948 10.500000 13.000000 95.089683 10.500000 13.100000 96.993418 10.500000 13.200000 98.917154 10.500000 13.300000 100.860889 10.500000 13.400000 102.824624 10.500000 13.500000 104.808360 10.500000 13.600000 106.812095 10.500000 13.700000 108.835831 10.500000 13.800000 110.879566 10.500000 13.900000 112.943301 10.500000 14.000000 115.027037 10.500000 14.100000 117.130772 10.500000 14.200000 119.254507 10.500000 14.300000 121.398243 10.500000 14.400000 123.561978 10.500000 14.500000 125.745714 10.500000 14.600000 127.949449 10.500000 14.700000 130.173184 10.500000 14.800000 132.416920 10.500000 14.900000 134.680655 10.500000 15.000000 136.964390 10.600000 -5.000000 81.031598 10.600000 -4.900000 79.312649 10.600000 -4.800000 77.613699 10.600000 -4.700000 75.934750 10.600000 -4.600000 74.275800 10.600000 -4.500000 72.636851 10.600000 -4.400000 71.017901 10.600000 -4.300000 69.418952 10.600000 -4.200000 67.840002 10.600000 -4.100000 66.281053 10.600000 -4.000000 64.742103 10.600000 -3.900000 63.223154 10.600000 -3.800000 61.724204 10.600000 -3.700000 60.245255 10.600000 -3.600000 58.786305 10.600000 -3.500000 57.347356 10.600000 -3.400000 55.928406 10.600000 -3.300000 54.529457 10.600000 -3.200000 53.150507 10.600000 -3.100000 51.791558 10.600000 -3.000000 50.452608 10.600000 -2.900000 49.133659 10.600000 -2.800000 47.834709 10.600000 -2.700000 46.555760 10.600000 -2.600000 45.296810 10.600000 -2.500000 44.057861 10.600000 -2.400000 42.838911 10.600000 -2.300000 41.639962 10.600000 -2.200000 40.461012 10.600000 -2.100000 39.302063 10.600000 -2.000000 38.163113 10.600000 -1.900000 37.044164 10.600000 -1.800000 35.945214 10.600000 -1.700000 34.866265 10.600000 -1.600000 33.807315 10.600000 -1.500000 32.768366 10.600000 -1.400000 31.749416 10.600000 -1.300000 30.750467 10.600000 -1.200000 29.771517 10.600000 -1.100000 28.812568 10.600000 -1.000000 27.873618 10.600000 -0.900000 26.954669 10.600000 -0.800000 26.055719 10.600000 -0.700000 25.176770 10.600000 -0.600000 24.317820 10.600000 -0.500000 23.478871 10.600000 -0.400000 22.659921 10.600000 -0.300000 21.860972 10.600000 -0.200000 21.082022 10.600000 -0.100000 20.323073 10.600000 -0.000000 19.584123 10.600000 0.100000 18.865174 10.600000 0.200000 18.166224 10.600000 0.300000 17.487275 10.600000 0.400000 16.828325 10.600000 0.500000 16.189376 10.600000 0.600000 15.570427 10.600000 0.700000 14.971477 10.600000 0.800000 14.392528 10.600000 0.900000 13.833578 10.600000 1.000000 13.294629 10.600000 1.100000 12.775679 10.600000 1.200000 12.276730 10.600000 1.300000 11.797780 10.600000 1.400000 11.338831 10.600000 1.500000 10.899881 10.600000 1.600000 10.480932 10.600000 1.700000 10.081982 10.600000 1.800000 9.703033 10.600000 1.900000 9.344083 10.600000 2.000000 9.005134 10.600000 2.100000 8.686184 10.600000 2.200000 8.387235 10.600000 2.300000 8.108285 10.600000 2.400000 7.849336 10.600000 2.500000 7.610386 10.600000 2.600000 7.391437 10.600000 2.700000 7.192487 10.600000 2.800000 7.013538 10.600000 2.900000 6.854588 10.600000 3.000000 6.715639 10.600000 3.100000 6.596689 10.600000 3.200000 6.497740 10.600000 3.300000 6.418790 10.600000 3.400000 6.359841 10.600000 3.500000 6.320891 10.600000 3.600000 6.301942 10.600000 3.700000 6.302992 10.600000 3.800000 6.324043 10.600000 3.900000 6.365093 10.600000 4.000000 6.426144 10.600000 4.100000 6.507194 10.600000 4.200000 6.608245 10.600000 4.300000 6.729295 10.600000 4.400000 6.870346 10.600000 4.500000 7.031396 10.600000 4.600000 7.212447 10.600000 4.700000 7.413497 10.600000 4.800000 7.634548 10.600000 4.900000 7.875598 10.600000 5.000000 8.136649 10.600000 5.100000 8.417699 10.600000 5.200000 8.718750 10.600000 5.300000 9.039800 10.600000 5.400000 9.380851 10.600000 5.500000 9.741901 10.600000 5.600000 10.122952 10.600000 5.700000 10.524002 10.600000 5.800000 10.945053 10.600000 5.900000 11.386103 10.600000 6.000000 11.847154 10.600000 6.100000 12.328204 10.600000 6.200000 12.829255 10.600000 6.300000 13.350305 10.600000 6.400000 13.891356 10.600000 6.500000 14.452406 10.600000 6.600000 15.033457 10.600000 6.700000 15.634507 10.600000 6.800000 16.255558 10.600000 6.900000 16.896608 10.600000 7.000000 17.557659 10.600000 7.100000 18.238709 10.600000 7.200000 18.939760 10.600000 7.300000 19.660810 10.600000 7.400000 20.401861 10.600000 7.500000 21.162911 10.600000 7.600000 21.943962 10.600000 7.700000 22.745012 10.600000 7.800000 23.566063 10.600000 7.900000 24.407113 10.600000 8.000000 25.268164 10.600000 8.100000 26.149214 10.600000 8.200000 27.050265 10.600000 8.300000 27.971315 10.600000 8.400000 28.912366 10.600000 8.500000 29.873416 10.600000 8.600000 30.854467 10.600000 8.700000 31.855517 10.600000 8.800000 32.876568 10.600000 8.900000 33.917618 10.600000 9.000000 34.978669 10.600000 9.100000 36.059719 10.600000 9.200000 37.160770 10.600000 9.300000 38.281820 10.600000 9.400000 39.422871 10.600000 9.500000 40.583921 10.600000 9.600000 41.764972 10.600000 9.700000 42.966022 10.600000 9.800000 44.187073 10.600000 9.900000 45.428123 10.600000 10.000000 46.689174 10.600000 10.100000 47.970224 10.600000 10.200000 49.271275 10.600000 10.300000 50.592325 10.600000 10.400000 51.933376 10.600000 10.500000 53.294426 10.600000 10.600000 54.675477 10.600000 10.700000 56.076527 10.600000 10.800000 57.497578 10.600000 10.900000 58.938628 10.600000 11.000000 60.399679 10.600000 11.100000 61.880729 10.600000 11.200000 63.381780 10.600000 11.300000 64.902830 10.600000 11.400000 66.443881 10.600000 11.500000 68.004931 10.600000 11.600000 69.585982 10.600000 11.700000 71.187032 10.600000 11.800000 72.808083 10.600000 11.900000 74.449133 10.600000 12.000000 76.110184 10.600000 12.100000 77.791234 10.600000 12.200000 79.492285 10.600000 12.300000 81.213335 10.600000 12.400000 82.954386 10.600000 12.500000 84.715436 10.600000 12.600000 86.496487 10.600000 12.700000 88.297537 10.600000 12.800000 90.118588 10.600000 12.900000 91.959639 10.600000 13.000000 93.820689 10.600000 13.100000 95.701740 10.600000 13.200000 97.602790 10.600000 13.300000 99.523841 10.600000 13.400000 101.464891 10.600000 13.500000 103.425942 10.600000 13.600000 105.406992 10.600000 13.700000 107.408043 10.600000 13.800000 109.429093 10.600000 13.900000 111.470144 10.600000 14.000000 113.531194 10.600000 14.100000 115.612245 10.600000 14.200000 117.713295 10.600000 14.300000 119.834346 10.600000 14.400000 121.975396 10.600000 14.500000 124.136447 10.600000 14.600000 126.317497 10.600000 14.700000 128.518548 10.600000 14.800000 130.739598 10.600000 14.900000 132.980649 10.600000 15.000000 135.241699 10.700000 -5.000000 83.953845 10.700000 -4.900000 82.211694 10.700000 -4.800000 80.489543 10.700000 -4.700000 78.787392 10.700000 -4.600000 77.105241 10.700000 -4.500000 75.443090 10.700000 -4.400000 73.800939 10.700000 -4.300000 72.178787 10.700000 -4.200000 70.576636 10.700000 -4.100000 68.994485 10.700000 -4.000000 67.432334 10.700000 -3.900000 65.890183 10.700000 -3.800000 64.368032 10.700000 -3.700000 62.865881 10.700000 -3.600000 61.383730 10.700000 -3.500000 59.921579 10.700000 -3.400000 58.479427 10.700000 -3.300000 57.057276 10.700000 -3.200000 55.655125 10.700000 -3.100000 54.272974 10.700000 -3.000000 52.910823 10.700000 -2.900000 51.568672 10.700000 -2.800000 50.246521 10.700000 -2.700000 48.944370 10.700000 -2.600000 47.662219 10.700000 -2.500000 46.400067 10.700000 -2.400000 45.157916 10.700000 -2.300000 43.935765 10.700000 -2.200000 42.733614 10.700000 -2.100000 41.551463 10.700000 -2.000000 40.389312 10.700000 -1.900000 39.247161 10.700000 -1.800000 38.125010 10.700000 -1.700000 37.022859 10.700000 -1.600000 35.940707 10.700000 -1.500000 34.878556 10.700000 -1.400000 33.836405 10.700000 -1.300000 32.814254 10.700000 -1.200000 31.812103 10.700000 -1.100000 30.829952 10.700000 -1.000000 29.867801 10.700000 -0.900000 28.925650 10.700000 -0.800000 28.003499 10.700000 -0.700000 27.101348 10.700000 -0.600000 26.219196 10.700000 -0.500000 25.357045 10.700000 -0.400000 24.514894 10.700000 -0.300000 23.692743 10.700000 -0.200000 22.890592 10.700000 -0.100000 22.108441 10.700000 -0.000000 21.346290 10.700000 0.100000 20.604139 10.700000 0.200000 19.881988 10.700000 0.300000 19.179836 10.700000 0.400000 18.497685 10.700000 0.500000 17.835534 10.700000 0.600000 17.193383 10.700000 0.700000 16.571232 10.700000 0.800000 15.969081 10.700000 0.900000 15.386930 10.700000 1.000000 14.824779 10.700000 1.100000 14.282628 10.700000 1.200000 13.760476 10.700000 1.300000 13.258325 10.700000 1.400000 12.776174 10.700000 1.500000 12.314023 10.700000 1.600000 11.871872 10.700000 1.700000 11.449721 10.700000 1.800000 11.047570 10.700000 1.900000 10.665419 10.700000 2.000000 10.303268 10.700000 2.100000 9.961116 10.700000 2.200000 9.638965 10.700000 2.300000 9.336814 10.700000 2.400000 9.054663 10.700000 2.500000 8.792512 10.700000 2.600000 8.550361 10.700000 2.700000 8.328210 10.700000 2.800000 8.126059 10.700000 2.900000 7.943908 10.700000 3.000000 7.781756 10.700000 3.100000 7.639605 10.700000 3.200000 7.517454 10.700000 3.300000 7.415303 10.700000 3.400000 7.333152 10.700000 3.500000 7.271001 10.700000 3.600000 7.228850 10.700000 3.700000 7.206699 10.700000 3.800000 7.204548 10.700000 3.900000 7.222397 10.700000 4.000000 7.260245 10.700000 4.100000 7.318094 10.700000 4.200000 7.395943 10.700000 4.300000 7.493792 10.700000 4.400000 7.611641 10.700000 4.500000 7.749490 10.700000 4.600000 7.907339 10.700000 4.700000 8.085188 10.700000 4.800000 8.283037 10.700000 4.900000 8.500885 10.700000 5.000000 8.738734 10.700000 5.100000 8.996583 10.700000 5.200000 9.274432 10.700000 5.300000 9.572281 10.700000 5.400000 9.890130 10.700000 5.500000 10.227979 10.700000 5.600000 10.585828 10.700000 5.700000 10.963677 10.700000 5.800000 11.361525 10.700000 5.900000 11.779374 10.700000 6.000000 12.217223 10.700000 6.100000 12.675072 10.700000 6.200000 13.152921 10.700000 6.300000 13.650770 10.700000 6.400000 14.168619 10.700000 6.500000 14.706468 10.700000 6.600000 15.264317 10.700000 6.700000 15.842165 10.700000 6.800000 16.440014 10.700000 6.900000 17.057863 10.700000 7.000000 17.695712 10.700000 7.100000 18.353561 10.700000 7.200000 19.031410 10.700000 7.300000 19.729259 10.700000 7.400000 20.447108 10.700000 7.500000 21.184957 10.700000 7.600000 21.942806 10.700000 7.700000 22.720654 10.700000 7.800000 23.518503 10.700000 7.900000 24.336352 10.700000 8.000000 25.174201 10.700000 8.100000 26.032050 10.700000 8.200000 26.909899 10.700000 8.300000 27.807748 10.700000 8.400000 28.725597 10.700000 8.500000 29.663446 10.700000 8.600000 30.621294 10.700000 8.700000 31.599143 10.700000 8.800000 32.596992 10.700000 8.900000 33.614841 10.700000 9.000000 34.652690 10.700000 9.100000 35.710539 10.700000 9.200000 36.788388 10.700000 9.300000 37.886237 10.700000 9.400000 39.004086 10.700000 9.500000 40.141934 10.700000 9.600000 41.299783 10.700000 9.700000 42.477632 10.700000 9.800000 43.675481 10.700000 9.900000 44.893330 10.700000 10.000000 46.131179 10.700000 10.100000 47.389028 10.700000 10.200000 48.666877 10.700000 10.300000 49.964726 10.700000 10.400000 51.282574 10.700000 10.500000 52.620423 10.700000 10.600000 53.978272 10.700000 10.700000 55.356121 10.700000 10.800000 56.753970 10.700000 10.900000 58.171819 10.700000 11.000000 59.609668 10.700000 11.100000 61.067517 10.700000 11.200000 62.545366 10.700000 11.300000 64.043215 10.700000 11.400000 65.561063 10.700000 11.500000 67.098912 10.700000 11.600000 68.656761 10.700000 11.700000 70.234610 10.700000 11.800000 71.832459 10.700000 11.900000 73.450308 10.700000 12.000000 75.088157 10.700000 12.100000 76.746006 10.700000 12.200000 78.423855 10.700000 12.300000 80.121703 10.700000 12.400000 81.839552 10.700000 12.500000 83.577401 10.700000 12.600000 85.335250 10.700000 12.700000 87.113099 10.700000 12.800000 88.910948 10.700000 12.900000 90.728797 10.700000 13.000000 92.566646 10.700000 13.100000 94.424495 10.700000 13.200000 96.302343 10.700000 13.300000 98.200192 10.700000 13.400000 100.118041 10.700000 13.500000 102.055890 10.700000 13.600000 104.013739 10.700000 13.700000 105.991588 10.700000 13.800000 107.989437 10.700000 13.900000 110.007286 10.700000 14.000000 112.045135 10.700000 14.100000 114.102983 10.700000 14.200000 116.180832 10.700000 14.300000 118.278681 10.700000 14.400000 120.396530 10.700000 14.500000 122.534379 10.700000 14.600000 124.692228 10.700000 14.700000 126.870077 10.700000 14.800000 129.067926 10.700000 14.900000 131.285775 10.700000 15.000000 133.523624 10.800000 -5.000000 86.976831 10.800000 -4.900000 85.210961 10.800000 -4.800000 83.465092 10.800000 -4.700000 81.739222 10.800000 -4.600000 80.033353 10.800000 -4.500000 78.347483 10.800000 -4.400000 76.681614 10.800000 -4.300000 75.035744 10.800000 -4.200000 73.409875 10.800000 -4.100000 71.804006 10.800000 -4.000000 70.218136 10.800000 -3.900000 68.652267 10.800000 -3.800000 67.106397 10.800000 -3.700000 65.580528 10.800000 -3.600000 64.074658 10.800000 -3.500000 62.588789 10.800000 -3.400000 61.122919 10.800000 -3.300000 59.677050 10.800000 -3.200000 58.251180 10.800000 -3.100000 56.845311 10.800000 -3.000000 55.459442 10.800000 -2.900000 54.093572 10.800000 -2.800000 52.747703 10.800000 -2.700000 51.421833 10.800000 -2.600000 50.115964 10.800000 -2.500000 48.830094 10.800000 -2.400000 47.564225 10.800000 -2.300000 46.318355 10.800000 -2.200000 45.092486 10.800000 -2.100000 43.886616 10.800000 -2.000000 42.700747 10.800000 -1.900000 41.534877 10.800000 -1.800000 40.389008 10.800000 -1.700000 39.263139 10.800000 -1.600000 38.157269 10.800000 -1.500000 37.071400 10.800000 -1.400000 36.005530 10.800000 -1.300000 34.959661 10.800000 -1.200000 33.933791 10.800000 -1.100000 32.927922 10.800000 -1.000000 31.942052 10.800000 -0.900000 30.976183 10.800000 -0.800000 30.030313 10.800000 -0.700000 29.104444 10.800000 -0.600000 28.198575 10.800000 -0.500000 27.312705 10.800000 -0.400000 26.446836 10.800000 -0.300000 25.600966 10.800000 -0.200000 24.775097 10.800000 -0.100000 23.969227 10.800000 -0.000000 23.183358 10.800000 0.100000 22.417488 10.800000 0.200000 21.671619 10.800000 0.300000 20.945749 10.800000 0.400000 20.239880 10.800000 0.500000 19.554010 10.800000 0.600000 18.888141 10.800000 0.700000 18.242272 10.800000 0.800000 17.616402 10.800000 0.900000 17.010533 10.800000 1.000000 16.424663 10.800000 1.100000 15.858794 10.800000 1.200000 15.312924 10.800000 1.300000 14.787055 10.800000 1.400000 14.281185 10.800000 1.500000 13.795316 10.800000 1.600000 13.329446 10.800000 1.700000 12.883577 10.800000 1.800000 12.457708 10.800000 1.900000 12.051838 10.800000 2.000000 11.665969 10.800000 2.100000 11.300099 10.800000 2.200000 10.954230 10.800000 2.300000 10.628360 10.800000 2.400000 10.322491 10.800000 2.500000 10.036621 10.800000 2.600000 9.770752 10.800000 2.700000 9.524882 10.800000 2.800000 9.299013 10.800000 2.900000 9.093143 10.800000 3.000000 8.907274 10.800000 3.100000 8.741405 10.800000 3.200000 8.595535 10.800000 3.300000 8.469666 10.800000 3.400000 8.363796 10.800000 3.500000 8.277927 10.800000 3.600000 8.212057 10.800000 3.700000 8.166188 10.800000 3.800000 8.140318 10.800000 3.900000 8.134449 10.800000 4.000000 8.148579 10.800000 4.100000 8.182710 10.800000 4.200000 8.236841 10.800000 4.300000 8.310971 10.800000 4.400000 8.405102 10.800000 4.500000 8.519232 10.800000 4.600000 8.653363 10.800000 4.700000 8.807493 10.800000 4.800000 8.981624 10.800000 4.900000 9.175754 10.800000 5.000000 9.389885 10.800000 5.100000 9.624015 10.800000 5.200000 9.878146 10.800000 5.300000 10.152276 10.800000 5.400000 10.446407 10.800000 5.500000 10.760538 10.800000 5.600000 11.094668 10.800000 5.700000 11.448799 10.800000 5.800000 11.822929 10.800000 5.900000 12.217060 10.800000 6.000000 12.631190 10.800000 6.100000 13.065321 10.800000 6.200000 13.519451 10.800000 6.300000 13.993582 10.800000 6.400000 14.487712 10.800000 6.500000 15.001843 10.800000 6.600000 15.535974 10.800000 6.700000 16.090104 10.800000 6.800000 16.664235 10.800000 6.900000 17.258365 10.800000 7.000000 17.872496 10.800000 7.100000 18.506626 10.800000 7.200000 19.160757 10.800000 7.300000 19.834887 10.800000 7.400000 20.529018 10.800000 7.500000 21.243148 10.800000 7.600000 21.977279 10.800000 7.700000 22.731409 10.800000 7.800000 23.505540 10.800000 7.900000 24.299671 10.800000 8.000000 25.113801 10.800000 8.100000 25.947932 10.800000 8.200000 26.802062 10.800000 8.300000 27.676193 10.800000 8.400000 28.570323 10.800000 8.500000 29.484454 10.800000 8.600000 30.418584 10.800000 8.700000 31.372715 10.800000 8.800000 32.346845 10.800000 8.900000 33.340976 10.800000 9.000000 34.355106 10.800000 9.100000 35.389237 10.800000 9.200000 36.443368 10.800000 9.300000 37.517498 10.800000 9.400000 38.611629 10.800000 9.500000 39.725759 10.800000 9.600000 40.859890 10.800000 9.700000 42.014020 10.800000 9.800000 43.188151 10.800000 9.900000 44.382281 10.800000 10.000000 45.596412 10.800000 10.100000 46.830542 10.800000 10.200000 48.084673 10.800000 10.300000 49.358804 10.800000 10.400000 50.652934 10.800000 10.500000 51.967065 10.800000 10.600000 53.301195 10.800000 10.700000 54.655326 10.800000 10.800000 56.029456 10.800000 10.900000 57.423587 10.800000 11.000000 58.837717 10.800000 11.100000 60.271848 10.800000 11.200000 61.725978 10.800000 11.300000 63.200109 10.800000 11.400000 64.694239 10.800000 11.500000 66.208370 10.800000 11.600000 67.742501 10.800000 11.700000 69.296631 10.800000 11.800000 70.870762 10.800000 11.900000 72.464892 10.800000 12.000000 74.079023 10.800000 12.100000 75.713153 10.800000 12.200000 77.367284 10.800000 12.300000 79.041414 10.800000 12.400000 80.735545 10.800000 12.500000 82.449675 10.800000 12.600000 84.183806 10.800000 12.700000 85.937937 10.800000 12.800000 87.712067 10.800000 12.900000 89.506198 10.800000 13.000000 91.320328 10.800000 13.100000 93.154459 10.800000 13.200000 95.008589 10.800000 13.300000 96.882720 10.800000 13.400000 98.776850 10.800000 13.500000 100.690981 10.800000 13.600000 102.625111 10.800000 13.700000 104.579242 10.800000 13.800000 106.553372 10.800000 13.900000 108.547503 10.800000 14.000000 110.561634 10.800000 14.100000 112.595764 10.800000 14.200000 114.649895 10.800000 14.300000 116.724025 10.800000 14.400000 118.818156 10.800000 14.500000 120.932286 10.800000 14.600000 123.066417 10.800000 14.700000 125.220547 10.800000 14.800000 127.394678 10.800000 14.900000 129.588808 10.800000 15.000000 131.802939 10.900000 -5.000000 90.093091 10.900000 -4.900000 88.302986 10.900000 -4.800000 86.532882 10.900000 -4.700000 84.782777 10.900000 -4.600000 83.052673 10.900000 -4.500000 81.342568 10.900000 -4.400000 79.652464 10.900000 -4.300000 77.982359 10.900000 -4.200000 76.332255 10.900000 -4.100000 74.702150 10.900000 -4.000000 73.092045 10.900000 -3.900000 71.501941 10.900000 -3.800000 69.931836 10.900000 -3.700000 68.381732 10.900000 -3.600000 66.851627 10.900000 -3.500000 65.341523 10.900000 -3.400000 63.851418 10.900000 -3.300000 62.381314 10.900000 -3.200000 60.931209 10.900000 -3.100000 59.501105 10.900000 -3.000000 58.091000 10.900000 -2.900000 56.700895 10.900000 -2.800000 55.330791 10.900000 -2.700000 53.980686 10.900000 -2.600000 52.650582 10.900000 -2.500000 51.340477 10.900000 -2.400000 50.050373 10.900000 -2.300000 48.780268 10.900000 -2.200000 47.530164 10.900000 -2.100000 46.300059 10.900000 -2.000000 45.089955 10.900000 -1.900000 43.899850 10.900000 -1.800000 42.729745 10.900000 -1.700000 41.579641 10.900000 -1.600000 40.449536 10.900000 -1.500000 39.339432 10.900000 -1.400000 38.249327 10.900000 -1.300000 37.179223 10.900000 -1.200000 36.129118 10.900000 -1.100000 35.099014 10.900000 -1.000000 34.088909 10.900000 -0.900000 33.098804 10.900000 -0.800000 32.128700 10.900000 -0.700000 31.178595 10.900000 -0.600000 30.248491 10.900000 -0.500000 29.338386 10.900000 -0.400000 28.448282 10.900000 -0.300000 27.578177 10.900000 -0.200000 26.728073 10.900000 -0.100000 25.897968 10.900000 -0.000000 25.087864 10.900000 0.100000 24.297759 10.900000 0.200000 23.527654 10.900000 0.300000 22.777550 10.900000 0.400000 22.047445 10.900000 0.500000 21.337341 10.900000 0.600000 20.647236 10.900000 0.700000 19.977132 10.900000 0.800000 19.327027 10.900000 0.900000 18.696923 10.900000 1.000000 18.086818 10.900000 1.100000 17.496714 10.900000 1.200000 16.926609 10.900000 1.300000 16.376504 10.900000 1.400000 15.846400 10.900000 1.500000 15.336295 10.900000 1.600000 14.846191 10.900000 1.700000 14.376086 10.900000 1.800000 13.925982 10.900000 1.900000 13.495877 10.900000 2.000000 13.085773 10.900000 2.100000 12.695668 10.900000 2.200000 12.325564 10.900000 2.300000 11.975459 10.900000 2.400000 11.645354 10.900000 2.500000 11.335250 10.900000 2.600000 11.045145 10.900000 2.700000 10.775041 10.900000 2.800000 10.524936 10.900000 2.900000 10.294832 10.900000 3.000000 10.084727 10.900000 3.100000 9.894623 10.900000 3.200000 9.724518 10.900000 3.300000 9.574414 10.900000 3.400000 9.444309 10.900000 3.500000 9.334204 10.900000 3.600000 9.244100 10.900000 3.700000 9.173995 10.900000 3.800000 9.123891 10.900000 3.900000 9.093786 10.900000 4.000000 9.083682 10.900000 4.100000 9.093577 10.900000 4.200000 9.123473 10.900000 4.300000 9.173368 10.900000 4.400000 9.243264 10.900000 4.500000 9.333159 10.900000 4.600000 9.443054 10.900000 4.700000 9.572950 10.900000 4.800000 9.722845 10.900000 4.900000 9.892741 10.900000 5.000000 10.082636 10.900000 5.100000 10.292532 10.900000 5.200000 10.522427 10.900000 5.300000 10.772323 10.900000 5.400000 11.042218 10.900000 5.500000 11.332113 10.900000 5.600000 11.642009 10.900000 5.700000 11.971904 10.900000 5.800000 12.321800 10.900000 5.900000 12.691695 10.900000 6.000000 13.081591 10.900000 6.100000 13.491486 10.900000 6.200000 13.921382 10.900000 6.300000 14.371277 10.900000 6.400000 14.841173 10.900000 6.500000 15.331068 10.900000 6.600000 15.840963 10.900000 6.700000 16.370859 10.900000 6.800000 16.920754 10.900000 6.900000 17.490650 10.900000 7.000000 18.080545 10.900000 7.100000 18.690441 10.900000 7.200000 19.320336 10.900000 7.300000 19.970232 10.900000 7.400000 20.640127 10.900000 7.500000 21.330023 10.900000 7.600000 22.039918 10.900000 7.700000 22.769813 10.900000 7.800000 23.519709 10.900000 7.900000 24.289604 10.900000 8.000000 25.079500 10.900000 8.100000 25.889395 10.900000 8.200000 26.719291 10.900000 8.300000 27.569186 10.900000 8.400000 28.439082 10.900000 8.500000 29.328977 10.900000 8.600000 30.238873 10.900000 8.700000 31.168768 10.900000 8.800000 32.118663 10.900000 8.900000 33.088559 10.900000 9.000000 34.078454 10.900000 9.100000 35.088350 10.900000 9.200000 36.118245 10.900000 9.300000 37.168141 10.900000 9.400000 38.238036 10.900000 9.500000 39.327932 10.900000 9.600000 40.437827 10.900000 9.700000 41.567723 10.900000 9.800000 42.717618 10.900000 9.900000 43.887513 10.900000 10.000000 45.077409 10.900000 10.100000 46.287304 10.900000 10.200000 47.517200 10.900000 10.300000 48.767095 10.900000 10.400000 50.036991 10.900000 10.500000 51.326886 10.900000 10.600000 52.636782 10.900000 10.700000 53.966677 10.900000 10.800000 55.316573 10.900000 10.900000 56.686468 10.900000 11.000000 58.076363 10.900000 11.100000 59.486259 10.900000 11.200000 60.916154 10.900000 11.300000 62.366050 10.900000 11.400000 63.835945 10.900000 11.500000 65.325841 10.900000 11.600000 66.835736 10.900000 11.700000 68.365632 10.900000 11.800000 69.915527 10.900000 11.900000 71.485422 10.900000 12.000000 73.075318 10.900000 12.100000 74.685213 10.900000 12.200000 76.315109 10.900000 12.300000 77.965004 10.900000 12.400000 79.634900 10.900000 12.500000 81.324795 10.900000 12.600000 83.034691 10.900000 12.700000 84.764586 10.900000 12.800000 86.514482 10.900000 12.900000 88.284377 10.900000 13.000000 90.074272 10.900000 13.100000 91.884168 10.900000 13.200000 93.714063 10.900000 13.300000 95.563959 10.900000 13.400000 97.433854 10.900000 13.500000 99.323750 10.900000 13.600000 101.233645 10.900000 13.700000 103.163541 10.900000 13.800000 105.113436 10.900000 13.900000 107.083332 10.900000 14.000000 109.073227 10.900000 14.100000 111.083122 10.900000 14.200000 113.113018 10.900000 14.300000 115.162913 10.900000 14.400000 117.232809 10.900000 14.500000 119.322704 10.900000 14.600000 121.432600 10.900000 14.700000 123.562495 10.900000 14.800000 125.712391 10.900000 14.900000 127.882286 10.900000 15.000000 130.072182 11.000000 -5.000000 93.295016 11.000000 -4.900000 91.480159 11.000000 -4.800000 89.685303 11.000000 -4.700000 87.910447 11.000000 -4.600000 86.155590 11.000000 -4.500000 84.420734 11.000000 -4.400000 82.705877 11.000000 -4.300000 81.011021 11.000000 -4.200000 79.336165 11.000000 -4.100000 77.681308 11.000000 -4.000000 76.046452 11.000000 -3.900000 74.431596 11.000000 -3.800000 72.836739 11.000000 -3.700000 71.261883 11.000000 -3.600000 69.707026 11.000000 -3.500000 68.172170 11.000000 -3.400000 66.657314 11.000000 -3.300000 65.162457 11.000000 -3.200000 63.687601 11.000000 -3.100000 62.232745 11.000000 -3.000000 60.797888 11.000000 -2.900000 59.383032 11.000000 -2.800000 57.988175 11.000000 -2.700000 56.613319 11.000000 -2.600000 55.258463 11.000000 -2.500000 53.923606 11.000000 -2.400000 52.608750 11.000000 -2.300000 51.313894 11.000000 -2.200000 50.039037 11.000000 -2.100000 48.784181 11.000000 -2.000000 47.549324 11.000000 -1.900000 46.334468 11.000000 -1.800000 45.139612 11.000000 -1.700000 43.964755 11.000000 -1.600000 42.809899 11.000000 -1.500000 41.675043 11.000000 -1.400000 40.560186 11.000000 -1.300000 39.465330 11.000000 -1.200000 38.390473 11.000000 -1.100000 37.335617 11.000000 -1.000000 36.300761 11.000000 -0.900000 35.285904 11.000000 -0.800000 34.291048 11.000000 -0.700000 33.316192 11.000000 -0.600000 32.361335 11.000000 -0.500000 31.426479 11.000000 -0.400000 30.511622 11.000000 -0.300000 29.616766 11.000000 -0.200000 28.741910 11.000000 -0.100000 27.887053 11.000000 -0.000000 27.052197 11.000000 0.100000 26.237341 11.000000 0.200000 25.442484 11.000000 0.300000 24.667628 11.000000 0.400000 23.912771 11.000000 0.500000 23.177915 11.000000 0.600000 22.463059 11.000000 0.700000 21.768202 11.000000 0.800000 21.093346 11.000000 0.900000 20.438490 11.000000 1.000000 19.803633 11.000000 1.100000 19.188777 11.000000 1.200000 18.593920 11.000000 1.300000 18.019064 11.000000 1.400000 17.464208 11.000000 1.500000 16.929351 11.000000 1.600000 16.414495 11.000000 1.700000 15.919639 11.000000 1.800000 15.444782 11.000000 1.900000 14.989926 11.000000 2.000000 14.555069 11.000000 2.100000 14.140213 11.000000 2.200000 13.745357 11.000000 2.300000 13.370500 11.000000 2.400000 13.015644 11.000000 2.500000 12.680788 11.000000 2.600000 12.365931 11.000000 2.700000 12.071075 11.000000 2.800000 11.796219 11.000000 2.900000 11.541362 11.000000 3.000000 11.306506 11.000000 3.100000 11.091649 11.000000 3.200000 10.896793 11.000000 3.300000 10.721937 11.000000 3.400000 10.567080 11.000000 3.500000 10.432224 11.000000 3.600000 10.317368 11.000000 3.700000 10.222511 11.000000 3.800000 10.147655 11.000000 3.900000 10.092798 11.000000 4.000000 10.057942 11.000000 4.100000 10.043086 11.000000 4.200000 10.048229 11.000000 4.300000 10.073373 11.000000 4.400000 10.118517 11.000000 4.500000 10.183660 11.000000 4.600000 10.268804 11.000000 4.700000 10.373947 11.000000 4.800000 10.499091 11.000000 4.900000 10.644235 11.000000 5.000000 10.809378 11.000000 5.100000 10.994522 11.000000 5.200000 11.199666 11.000000 5.300000 11.424809 11.000000 5.400000 11.669953 11.000000 5.500000 11.935096 11.000000 5.600000 12.220240 11.000000 5.700000 12.525384 11.000000 5.800000 12.850527 11.000000 5.900000 13.195671 11.000000 6.000000 13.560815 11.000000 6.100000 13.945958 11.000000 6.200000 14.351102 11.000000 6.300000 14.776245 11.000000 6.400000 15.221389 11.000000 6.500000 15.686533 11.000000 6.600000 16.171676 11.000000 6.700000 16.676820 11.000000 6.800000 17.201964 11.000000 6.900000 17.747107 11.000000 7.000000 18.312251 11.000000 7.100000 18.897394 11.000000 7.200000 19.502538 11.000000 7.300000 20.127682 11.000000 7.400000 20.772825 11.000000 7.500000 21.437969 11.000000 7.600000 22.123113 11.000000 7.700000 22.828256 11.000000 7.800000 23.553400 11.000000 7.900000 24.298543 11.000000 8.000000 25.063687 11.000000 8.100000 25.848831 11.000000 8.200000 26.653974 11.000000 8.300000 27.479118 11.000000 8.400000 28.324262 11.000000 8.500000 29.189405 11.000000 8.600000 30.074549 11.000000 8.700000 30.979692 11.000000 8.800000 31.904836 11.000000 8.900000 32.849980 11.000000 9.000000 33.815123 11.000000 9.100000 34.800267 11.000000 9.200000 35.805411 11.000000 9.300000 36.830554 11.000000 9.400000 37.875698 11.000000 9.500000 38.940842 11.000000 9.600000 40.025985 11.000000 9.700000 41.131129 11.000000 9.800000 42.256272 11.000000 9.900000 43.401416 11.000000 10.000000 44.566560 11.000000 10.100000 45.751703 11.000000 10.200000 46.956847 11.000000 10.300000 48.181991 11.000000 10.400000 49.427134 11.000000 10.500000 50.692278 11.000000 10.600000 51.977421 11.000000 10.700000 53.282565 11.000000 10.800000 54.607709 11.000000 10.900000 55.952852 11.000000 11.000000 57.317996 11.000000 11.100000 58.703140 11.000000 11.200000 60.108283 11.000000 11.300000 61.533427 11.000000 11.400000 62.978570 11.000000 11.500000 64.443714 11.000000 11.600000 65.928858 11.000000 11.700000 67.434001 11.000000 11.800000 68.959145 11.000000 11.900000 70.504289 11.000000 12.000000 72.069432 11.000000 12.100000 73.654576 11.000000 12.200000 75.259719 11.000000 12.300000 76.884863 11.000000 12.400000 78.530007 11.000000 12.500000 80.195150 11.000000 12.600000 81.880294 11.000000 12.700000 83.585438 11.000000 12.800000 85.310581 11.000000 12.900000 87.055725 11.000000 13.000000 88.820868 11.000000 13.100000 90.606012 11.000000 13.200000 92.411156 11.000000 13.300000 94.236299 11.000000 13.400000 96.081443 11.000000 13.500000 97.946587 11.000000 13.600000 99.831730 11.000000 13.700000 101.736874 11.000000 13.800000 103.662017 11.000000 13.900000 105.607161 11.000000 14.000000 107.572305 11.000000 14.100000 109.557448 11.000000 14.200000 111.562592 11.000000 14.300000 113.587736 11.000000 14.400000 115.632879 11.000000 14.500000 117.698023 11.000000 14.600000 119.783166 11.000000 14.700000 121.888310 11.000000 14.800000 124.013454 11.000000 14.900000 126.158597 11.000000 15.000000 128.323741 11.100000 -5.000000 96.574943 11.100000 -4.900000 94.734818 11.100000 -4.800000 92.914693 11.100000 -4.700000 91.114568 11.100000 -4.600000 89.334443 11.100000 -4.500000 87.574319 11.100000 -4.400000 85.834194 11.100000 -4.300000 84.114069 11.100000 -4.200000 82.413944 11.100000 -4.100000 80.733819 11.100000 -4.000000 79.073694 11.100000 -3.900000 77.433569 11.100000 -3.800000 75.813444 11.100000 -3.700000 74.213319 11.100000 -3.600000 72.633194 11.100000 -3.500000 71.073069 11.100000 -3.400000 69.532944 11.100000 -3.300000 68.012819 11.100000 -3.200000 66.512694 11.100000 -3.100000 65.032569 11.100000 -3.000000 63.572444 11.100000 -2.900000 62.132320 11.100000 -2.800000 60.712195 11.100000 -2.700000 59.312070 11.100000 -2.600000 57.931945 11.100000 -2.500000 56.571820 11.100000 -2.400000 55.231695 11.100000 -2.300000 53.911570 11.100000 -2.200000 52.611445 11.100000 -2.100000 51.331320 11.100000 -2.000000 50.071195 11.100000 -1.900000 48.831070 11.100000 -1.800000 47.610945 11.100000 -1.700000 46.410820 11.100000 -1.600000 45.230695 11.100000 -1.500000 44.070570 11.100000 -1.400000 42.930445 11.100000 -1.300000 41.810321 11.100000 -1.200000 40.710196 11.100000 -1.100000 39.630071 11.100000 -1.000000 38.569946 11.100000 -0.900000 37.529821 11.100000 -0.800000 36.509696 11.100000 -0.700000 35.509571 11.100000 -0.600000 34.529446 11.100000 -0.500000 33.569321 11.100000 -0.400000 32.629196 11.100000 -0.300000 31.709071 11.100000 -0.200000 30.808946 11.100000 -0.100000 29.928821 11.100000 -0.000000 29.068696 11.100000 0.100000 28.228571 11.100000 0.200000 27.408446 11.100000 0.300000 26.608322 11.100000 0.400000 25.828197 11.100000 0.500000 25.068072 11.100000 0.600000 24.327947 11.100000 0.700000 23.607822 11.100000 0.800000 22.907697 11.100000 0.900000 22.227572 11.100000 1.000000 21.567447 11.100000 1.100000 20.927322 11.100000 1.200000 20.307197 11.100000 1.300000 19.707072 11.100000 1.400000 19.126947 11.100000 1.500000 18.566822 11.100000 1.600000 18.026697 11.100000 1.700000 17.506572 11.100000 1.800000 17.006447 11.100000 1.900000 16.526322 11.100000 2.000000 16.066198 11.100000 2.100000 15.626073 11.100000 2.200000 15.205948 11.100000 2.300000 14.805823 11.100000 2.400000 14.425698 11.100000 2.500000 14.065573 11.100000 2.600000 13.725448 11.100000 2.700000 13.405323 11.100000 2.800000 13.105198 11.100000 2.900000 12.825073 11.100000 3.000000 12.564948 11.100000 3.100000 12.324823 11.100000 3.200000 12.104698 11.100000 3.300000 11.904573 11.100000 3.400000 11.724448 11.100000 3.500000 11.564323 11.100000 3.600000 11.424199 11.100000 3.700000 11.304074 11.100000 3.800000 11.203949 11.100000 3.900000 11.123824 11.100000 4.000000 11.063699 11.100000 4.100000 11.023574 11.100000 4.200000 11.003449 11.100000 4.300000 11.003324 11.100000 4.400000 11.023199 11.100000 4.500000 11.063074 11.100000 4.600000 11.122949 11.100000 4.700000 11.202824 11.100000 4.800000 11.302699 11.100000 4.900000 11.422574 11.100000 5.000000 11.562449 11.100000 5.100000 11.722324 11.100000 5.200000 11.902200 11.100000 5.300000 12.102075 11.100000 5.400000 12.321950 11.100000 5.500000 12.561825 11.100000 5.600000 12.821700 11.100000 5.700000 13.101575 11.100000 5.800000 13.401450 11.100000 5.900000 13.721325 11.100000 6.000000 14.061200 11.100000 6.100000 14.421075 11.100000 6.200000 14.800950 11.100000 6.300000 15.200825 11.100000 6.400000 15.620700 11.100000 6.500000 16.060575 11.100000 6.600000 16.520450 11.100000 6.700000 17.000325 11.100000 6.800000 17.500201 11.100000 6.900000 18.020076 11.100000 7.000000 18.559951 11.100000 7.100000 19.119826 11.100000 7.200000 19.699701 11.100000 7.300000 20.299576 11.100000 7.400000 20.919451 11.100000 7.500000 21.559326 11.100000 7.600000 22.219201 11.100000 7.700000 22.899076 11.100000 7.800000 23.598951 11.100000 7.900000 24.318826 11.100000 8.000000 25.058701 11.100000 8.100000 25.818576 11.100000 8.200000 26.598451 11.100000 8.300000 27.398326 11.100000 8.400000 28.218202 11.100000 8.500000 29.058077 11.100000 8.600000 29.917952 11.100000 8.700000 30.797827 11.100000 8.800000 31.697702 11.100000 8.900000 32.617577 11.100000 9.000000 33.557452 11.100000 9.100000 34.517327 11.100000 9.200000 35.497202 11.100000 9.300000 36.497077 11.100000 9.400000 37.516952 11.100000 9.500000 38.556827 11.100000 9.600000 39.616702 11.100000 9.700000 40.696577 11.100000 9.800000 41.796452 11.100000 9.900000 42.916327 11.100000 10.000000 44.056203 11.100000 10.100000 45.216078 11.100000 10.200000 46.395953 11.100000 10.300000 47.595828 11.100000 10.400000 48.815703 11.100000 10.500000 50.055578 11.100000 10.600000 51.315453 11.100000 10.700000 52.595328 11.100000 10.800000 53.895203 11.100000 10.900000 55.215078 11.100000 11.000000 56.554953 11.100000 11.100000 57.914828 11.100000 11.200000 59.294703 11.100000 11.300000 60.694578 11.100000 11.400000 62.114453 11.100000 11.500000 63.554328 11.100000 11.600000 65.014204 11.100000 11.700000 66.494079 11.100000 11.800000 67.993954 11.100000 11.900000 69.513829 11.100000 12.000000 71.053704 11.100000 12.100000 72.613579 11.100000 12.200000 74.193454 11.100000 12.300000 75.793329 11.100000 12.400000 77.413204 11.100000 12.500000 79.053079 11.100000 12.600000 80.712954 11.100000 12.700000 82.392829 11.100000 12.800000 84.092704 11.100000 12.900000 85.812579 11.100000 13.000000 87.552454 11.100000 13.100000 89.312329 11.100000 13.200000 91.092205 11.100000 13.300000 92.892080 11.100000 13.400000 94.711955 11.100000 13.500000 96.551830 11.100000 13.600000 98.411705 11.100000 13.700000 100.291580 11.100000 13.800000 102.191455 11.100000 13.900000 104.111330 11.100000 14.000000 106.051205 11.100000 14.100000 108.011080 11.100000 14.200000 109.990955 11.100000 14.300000 111.990830 11.100000 14.400000 114.010705 11.100000 14.500000 116.050580 11.100000 14.600000 118.110455 11.100000 14.700000 120.190330 11.100000 14.800000 122.290206 11.100000 14.900000 124.410081 11.100000 15.000000 126.549956 11.200000 -5.000000 99.925256 11.200000 -4.900000 98.059346 11.200000 -4.800000 96.213436 11.200000 -4.700000 94.387526 11.200000 -4.600000 92.581615 11.200000 -4.500000 90.795705 11.200000 -4.400000 89.029795 11.200000 -4.300000 87.283885 11.200000 -4.200000 85.557974 11.200000 -4.100000 83.852064 11.200000 -4.000000 82.166154 11.200000 -3.900000 80.500244 11.200000 -3.800000 78.854333 11.200000 -3.700000 77.228423 11.200000 -3.600000 75.622513 11.200000 -3.500000 74.036603 11.200000 -3.400000 72.470692 11.200000 -3.300000 70.924782 11.200000 -3.200000 69.398872 11.200000 -3.100000 67.892962 11.200000 -3.000000 66.407051 11.200000 -2.900000 64.941141 11.200000 -2.800000 63.495231 11.200000 -2.700000 62.069321 11.200000 -2.600000 60.663411 11.200000 -2.500000 59.277500 11.200000 -2.400000 57.911590 11.200000 -2.300000 56.565680 11.200000 -2.200000 55.239770 11.200000 -2.100000 53.933859 11.200000 -2.000000 52.647949 11.200000 -1.900000 51.382039 11.200000 -1.800000 50.136129 11.200000 -1.700000 48.910218 11.200000 -1.600000 47.704308 11.200000 -1.500000 46.518398 11.200000 -1.400000 45.352488 11.200000 -1.300000 44.206577 11.200000 -1.200000 43.080667 11.200000 -1.100000 41.974757 11.200000 -1.000000 40.888847 11.200000 -0.900000 39.822936 11.200000 -0.800000 38.777026 11.200000 -0.700000 37.751116 11.200000 -0.600000 36.745206 11.200000 -0.500000 35.759295 11.200000 -0.400000 34.793385 11.200000 -0.300000 33.847475 11.200000 -0.200000 32.921565 11.200000 -0.100000 32.015655 11.200000 -0.000000 31.129744 11.200000 0.100000 30.263834 11.200000 0.200000 29.417924 11.200000 0.300000 28.592014 11.200000 0.400000 27.786103 11.200000 0.500000 27.000193 11.200000 0.600000 26.234283 11.200000 0.700000 25.488373 11.200000 0.800000 24.762462 11.200000 0.900000 24.056552 11.200000 1.000000 23.370642 11.200000 1.100000 22.704732 11.200000 1.200000 22.058821 11.200000 1.300000 21.432911 11.200000 1.400000 20.827001 11.200000 1.500000 20.241091 11.200000 1.600000 19.675180 11.200000 1.700000 19.129270 11.200000 1.800000 18.603360 11.200000 1.900000 18.097450 11.200000 2.000000 17.611539 11.200000 2.100000 17.145629 11.200000 2.200000 16.699719 11.200000 2.300000 16.273809 11.200000 2.400000 15.867899 11.200000 2.500000 15.481988 11.200000 2.600000 15.116078 11.200000 2.700000 14.770168 11.200000 2.800000 14.444258 11.200000 2.900000 14.138347 11.200000 3.000000 13.852437 11.200000 3.100000 13.586527 11.200000 3.200000 13.340617 11.200000 3.300000 13.114706 11.200000 3.400000 12.908796 11.200000 3.500000 12.722886 11.200000 3.600000 12.556976 11.200000 3.700000 12.411065 11.200000 3.800000 12.285155 11.200000 3.900000 12.179245 11.200000 4.000000 12.093335 11.200000 4.100000 12.027424 11.200000 4.200000 11.981514 11.200000 4.300000 11.955604 11.200000 4.400000 11.949694 11.200000 4.500000 11.963783 11.200000 4.600000 11.997873 11.200000 4.700000 12.051963 11.200000 4.800000 12.126053 11.200000 4.900000 12.220143 11.200000 5.000000 12.334232 11.200000 5.100000 12.468322 11.200000 5.200000 12.622412 11.200000 5.300000 12.796502 11.200000 5.400000 12.990591 11.200000 5.500000 13.204681 11.200000 5.600000 13.438771 11.200000 5.700000 13.692861 11.200000 5.800000 13.966950 11.200000 5.900000 14.261040 11.200000 6.000000 14.575130 11.200000 6.100000 14.909220 11.200000 6.200000 15.263309 11.200000 6.300000 15.637399 11.200000 6.400000 16.031489 11.200000 6.500000 16.445579 11.200000 6.600000 16.879668 11.200000 6.700000 17.333758 11.200000 6.800000 17.807848 11.200000 6.900000 18.301938 11.200000 7.000000 18.816027 11.200000 7.100000 19.350117 11.200000 7.200000 19.904207 11.200000 7.300000 20.478297 11.200000 7.400000 21.072387 11.200000 7.500000 21.686476 11.200000 7.600000 22.320566 11.200000 7.700000 22.974656 11.200000 7.800000 23.648746 11.200000 7.900000 24.342835 11.200000 8.000000 25.056925 11.200000 8.100000 25.791015 11.200000 8.200000 26.545105 11.200000 8.300000 27.319194 11.200000 8.400000 28.113284 11.200000 8.500000 28.927374 11.200000 8.600000 29.761464 11.200000 8.700000 30.615553 11.200000 8.800000 31.489643 11.200000 8.900000 32.383733 11.200000 9.000000 33.297823 11.200000 9.100000 34.231912 11.200000 9.200000 35.186002 11.200000 9.300000 36.160092 11.200000 9.400000 37.154182 11.200000 9.500000 38.168271 11.200000 9.600000 39.202361 11.200000 9.700000 40.256451 11.200000 9.800000 41.330541 11.200000 9.900000 42.424631 11.200000 10.000000 43.538720 11.200000 10.100000 44.672810 11.200000 10.200000 45.826900 11.200000 10.300000 47.000990 11.200000 10.400000 48.195079 11.200000 10.500000 49.409169 11.200000 10.600000 50.643259 11.200000 10.700000 51.897349 11.200000 10.800000 53.171438 11.200000 10.900000 54.465528 11.200000 11.000000 55.779618 11.200000 11.100000 57.113708 11.200000 11.200000 58.467797 11.200000 11.300000 59.841887 11.200000 11.400000 61.235977 11.200000 11.500000 62.650067 11.200000 11.600000 64.084156 11.200000 11.700000 65.538246 11.200000 11.800000 67.012336 11.200000 11.900000 68.506426 11.200000 12.000000 70.020515 11.200000 12.100000 71.554605 11.200000 12.200000 73.108695 11.200000 12.300000 74.682785 11.200000 12.400000 76.276875 11.200000 12.500000 77.890964 11.200000 12.600000 79.525054 11.200000 12.700000 81.179144 11.200000 12.800000 82.853234 11.200000 12.900000 84.547323 11.200000 13.000000 86.261413 11.200000 13.100000 87.995503 11.200000 13.200000 89.749593 11.200000 13.300000 91.523682 11.200000 13.400000 93.317772 11.200000 13.500000 95.131862 11.200000 13.600000 96.965952 11.200000 13.700000 98.820041 11.200000 13.800000 100.694131 11.200000 13.900000 102.588221 11.200000 14.000000 104.502311 11.200000 14.100000 106.436400 11.200000 14.200000 108.390490 11.200000 14.300000 110.364580 11.200000 14.400000 112.358670 11.200000 14.500000 114.372759 11.200000 14.600000 116.406849 11.200000 14.700000 118.460939 11.200000 14.800000 120.535029 11.200000 14.900000 122.629119 11.200000 15.000000 124.743208 11.300000 -5.000000 103.338478 11.300000 -4.900000 101.446265 11.300000 -4.800000 99.574053 11.300000 -4.700000 97.721841 11.300000 -4.600000 95.889628 11.300000 -4.500000 94.077416 11.300000 -4.400000 92.285204 11.300000 -4.300000 90.512992 11.300000 -4.200000 88.760779 11.300000 -4.100000 87.028567 11.300000 -4.000000 85.316355 11.300000 -3.900000 83.624142 11.300000 -3.800000 81.951930 11.300000 -3.700000 80.299718 11.300000 -3.600000 78.667506 11.300000 -3.500000 77.055293 11.300000 -3.400000 75.463081 11.300000 -3.300000 73.890869 11.300000 -3.200000 72.338657 11.300000 -3.100000 70.806444 11.300000 -3.000000 69.294232 11.300000 -2.900000 67.802020 11.300000 -2.800000 66.329807 11.300000 -2.700000 64.877595 11.300000 -2.600000 63.445383 11.300000 -2.500000 62.033171 11.300000 -2.400000 60.640958 11.300000 -2.300000 59.268746 11.300000 -2.200000 57.916534 11.300000 -2.100000 56.584321 11.300000 -2.000000 55.272109 11.300000 -1.900000 53.979897 11.300000 -1.800000 52.707685 11.300000 -1.700000 51.455472 11.300000 -1.600000 50.223260 11.300000 -1.500000 49.011048 11.300000 -1.400000 47.818835 11.300000 -1.300000 46.646623 11.300000 -1.200000 45.494411 11.300000 -1.100000 44.362199 11.300000 -1.000000 43.249986 11.300000 -0.900000 42.157774 11.300000 -0.800000 41.085562 11.300000 -0.700000 40.033349 11.300000 -0.600000 39.001137 11.300000 -0.500000 37.988925 11.300000 -0.400000 36.996713 11.300000 -0.300000 36.024500 11.300000 -0.200000 35.072288 11.300000 -0.100000 34.140076 11.300000 -0.000000 33.227864 11.300000 0.100000 32.335651 11.300000 0.200000 31.463439 11.300000 0.300000 30.611227 11.300000 0.400000 29.779014 11.300000 0.500000 28.966802 11.300000 0.600000 28.174590 11.300000 0.700000 27.402378 11.300000 0.800000 26.650165 11.300000 0.900000 25.917953 11.300000 1.000000 25.205741 11.300000 1.100000 24.513528 11.300000 1.200000 23.841316 11.300000 1.300000 23.189104 11.300000 1.400000 22.556892 11.300000 1.500000 21.944679 11.300000 1.600000 21.352467 11.300000 1.700000 20.780255 11.300000 1.800000 20.228042 11.300000 1.900000 19.695830 11.300000 2.000000 19.183618 11.300000 2.100000 18.691406 11.300000 2.200000 18.219193 11.300000 2.300000 17.766981 11.300000 2.400000 17.334769 11.300000 2.500000 16.922557 11.300000 2.600000 16.530344 11.300000 2.700000 16.158132 11.300000 2.800000 15.805920 11.300000 2.900000 15.473707 11.300000 3.000000 15.161495 11.300000 3.100000 14.869283 11.300000 3.200000 14.597071 11.300000 3.300000 14.344858 11.300000 3.400000 14.112646 11.300000 3.500000 13.900434 11.300000 3.600000 13.708221 11.300000 3.700000 13.536009 11.300000 3.800000 13.383797 11.300000 3.900000 13.251585 11.300000 4.000000 13.139372 11.300000 4.100000 13.047160 11.300000 4.200000 12.974948 11.300000 4.300000 12.922735 11.300000 4.400000 12.890523 11.300000 4.500000 12.878311 11.300000 4.600000 12.886099 11.300000 4.700000 12.913886 11.300000 4.800000 12.961674 11.300000 4.900000 13.029462 11.300000 5.000000 13.117250 11.300000 5.100000 13.225037 11.300000 5.200000 13.352825 11.300000 5.300000 13.500613 11.300000 5.400000 13.668400 11.300000 5.500000 13.856188 11.300000 5.600000 14.063976 11.300000 5.700000 14.291764 11.300000 5.800000 14.539551 11.300000 5.900000 14.807339 11.300000 6.000000 15.095127 11.300000 6.100000 15.402914 11.300000 6.200000 15.730702 11.300000 6.300000 16.078490 11.300000 6.400000 16.446278 11.300000 6.500000 16.834065 11.300000 6.600000 17.241853 11.300000 6.700000 17.669641 11.300000 6.800000 18.117428 11.300000 6.900000 18.585216 11.300000 7.000000 19.073004 11.300000 7.100000 19.580792 11.300000 7.200000 20.108579 11.300000 7.300000 20.656367 11.300000 7.400000 21.224155 11.300000 7.500000 21.811942 11.300000 7.600000 22.419730 11.300000 7.700000 23.047518 11.300000 7.800000 23.695306 11.300000 7.900000 24.363093 11.300000 8.000000 25.050881 11.300000 8.100000 25.758669 11.300000 8.200000 26.486457 11.300000 8.300000 27.234244 11.300000 8.400000 28.002032 11.300000 8.500000 28.789820 11.300000 8.600000 29.597607 11.300000 8.700000 30.425395 11.300000 8.800000 31.273183 11.300000 8.900000 32.140971 11.300000 9.000000 33.028758 11.300000 9.100000 33.936546 11.300000 9.200000 34.864334 11.300000 9.300000 35.812121 11.300000 9.400000 36.779909 11.300000 9.500000 37.767697 11.300000 9.600000 38.775485 11.300000 9.700000 39.803272 11.300000 9.800000 40.851060 11.300000 9.900000 41.918848 11.300000 10.000000 43.006635 11.300000 10.100000 44.114423 11.300000 10.200000 45.242211 11.300000 10.300000 46.389999 11.300000 10.400000 47.557786 11.300000 10.500000 48.745574 11.300000 10.600000 49.953362 11.300000 10.700000 51.181150 11.300000 10.800000 52.428937 11.300000 10.900000 53.696725 11.300000 11.000000 54.984513 11.300000 11.100000 56.292300 11.300000 11.200000 57.620088 11.300000 11.300000 58.967876 11.300000 11.400000 60.335664 11.300000 11.500000 61.723451 11.300000 11.600000 63.131239 11.300000 11.700000 64.559027 11.300000 11.800000 66.006814 11.300000 11.900000 67.474602 11.300000 12.000000 68.962390 11.300000 12.100000 70.470178 11.300000 12.200000 71.997965 11.300000 12.300000 73.545753 11.300000 12.400000 75.113541 11.300000 12.500000 76.701328 11.300000 12.600000 78.309116 11.300000 12.700000 79.936904 11.300000 12.800000 81.584692 11.300000 12.900000 83.252479 11.300000 13.000000 84.940267 11.300000 13.100000 86.648055 11.300000 13.200000 88.375842 11.300000 13.300000 90.123630 11.300000 13.400000 91.891418 11.300000 13.500000 93.679206 11.300000 13.600000 95.486993 11.300000 13.700000 97.314781 11.300000 13.800000 99.162569 11.300000 13.900000 101.030357 11.300000 14.000000 102.918144 11.300000 14.100000 104.825932 11.300000 14.200000 106.753720 11.300000 14.300000 108.701507 11.300000 14.400000 110.669295 11.300000 14.500000 112.657083 11.300000 14.600000 114.664871 11.300000 14.700000 116.692658 11.300000 14.800000 118.740446 11.300000 14.900000 120.808234 11.300000 15.000000 122.896021 11.400000 -5.000000 106.807364 11.400000 -4.900000 104.888333 11.400000 -4.800000 102.989302 11.400000 -4.700000 101.110271 11.400000 -4.600000 99.251240 11.400000 -4.500000 97.412209 11.400000 -4.400000 95.593178 11.400000 -4.300000 93.794147 11.400000 -4.200000 92.015116 11.400000 -4.100000 90.256085 11.400000 -4.000000 88.517054 11.400000 -3.900000 86.798023 11.400000 -3.800000 85.098992 11.400000 -3.700000 83.419961 11.400000 -3.600000 81.760929 11.400000 -3.500000 80.121898 11.400000 -3.400000 78.502867 11.400000 -3.300000 76.903836 11.400000 -3.200000 75.324805 11.400000 -3.100000 73.765774 11.400000 -3.000000 72.226743 11.400000 -2.900000 70.707712 11.400000 -2.800000 69.208681 11.400000 -2.700000 67.729650 11.400000 -2.600000 66.270619 11.400000 -2.500000 64.831588 11.400000 -2.400000 63.412557 11.400000 -2.300000 62.013526 11.400000 -2.200000 60.634495 11.400000 -2.100000 59.275464 11.400000 -2.000000 57.936433 11.400000 -1.900000 56.617401 11.400000 -1.800000 55.318370 11.400000 -1.700000 54.039339 11.400000 -1.600000 52.780308 11.400000 -1.500000 51.541277 11.400000 -1.400000 50.322246 11.400000 -1.300000 49.123215 11.400000 -1.200000 47.944184 11.400000 -1.100000 46.785153 11.400000 -1.000000 45.646122 11.400000 -0.900000 44.527091 11.400000 -0.800000 43.428060 11.400000 -0.700000 42.349029 11.400000 -0.600000 41.289998 11.400000 -0.500000 40.250967 11.400000 -0.400000 39.231936 11.400000 -0.300000 38.232905 11.400000 -0.200000 37.253873 11.400000 -0.100000 36.294842 11.400000 -0.000000 35.355811 11.400000 0.100000 34.436780 11.400000 0.200000 33.537749 11.400000 0.300000 32.658718 11.400000 0.400000 31.799687 11.400000 0.500000 30.960656 11.400000 0.600000 30.141625 11.400000 0.700000 29.342594 11.400000 0.800000 28.563563 11.400000 0.900000 27.804532 11.400000 1.000000 27.065501 11.400000 1.100000 26.346470 11.400000 1.200000 25.647439 11.400000 1.300000 24.968408 11.400000 1.400000 24.309377 11.400000 1.500000 23.670345 11.400000 1.600000 23.051314 11.400000 1.700000 22.452283 11.400000 1.800000 21.873252 11.400000 1.900000 21.314221 11.400000 2.000000 20.775190 11.400000 2.100000 20.256159 11.400000 2.200000 19.757128 11.400000 2.300000 19.278097 11.400000 2.400000 18.819066 11.400000 2.500000 18.380035 11.400000 2.600000 17.961004 11.400000 2.700000 17.561973 11.400000 2.800000 17.182942 11.400000 2.900000 16.823911 11.400000 3.000000 16.484880 11.400000 3.100000 16.165849 11.400000 3.200000 15.866817 11.400000 3.300000 15.587786 11.400000 3.400000 15.328755 11.400000 3.500000 15.089724 11.400000 3.600000 14.870693 11.400000 3.700000 14.671662 11.400000 3.800000 14.492631 11.400000 3.900000 14.333600 11.400000 4.000000 14.194569 11.400000 4.100000 14.075538 11.400000 4.200000 13.976507 11.400000 4.300000 13.897476 11.400000 4.400000 13.838445 11.400000 4.500000 13.799414 11.400000 4.600000 13.780383 11.400000 4.700000 13.781352 11.400000 4.800000 13.802321 11.400000 4.900000 13.843289 11.400000 5.000000 13.904258 11.400000 5.100000 13.985227 11.400000 5.200000 14.086196 11.400000 5.300000 14.207165 11.400000 5.400000 14.348134 11.400000 5.500000 14.509103 11.400000 5.600000 14.690072 11.400000 5.700000 14.891041 11.400000 5.800000 15.112010 11.400000 5.900000 15.352979 11.400000 6.000000 15.613948 11.400000 6.100000 15.894917 11.400000 6.200000 16.195886 11.400000 6.300000 16.516855 11.400000 6.400000 16.857824 11.400000 6.500000 17.218792 11.400000 6.600000 17.599761 11.400000 6.700000 18.000730 11.400000 6.800000 18.421699 11.400000 6.900000 18.862668 11.400000 7.000000 19.323637 11.400000 7.100000 19.804606 11.400000 7.200000 20.305575 11.400000 7.300000 20.826544 11.400000 7.400000 21.367513 11.400000 7.500000 21.928482 11.400000 7.600000 22.509451 11.400000 7.700000 23.110420 11.400000 7.800000 23.731389 11.400000 7.900000 24.372358 11.400000 8.000000 25.033327 11.400000 8.100000 25.714296 11.400000 8.200000 26.415264 11.400000 8.300000 27.136233 11.400000 8.400000 27.877202 11.400000 8.500000 28.638171 11.400000 8.600000 29.419140 11.400000 8.700000 30.220109 11.400000 8.800000 31.041078 11.400000 8.900000 31.882047 11.400000 9.000000 32.743016 11.400000 9.100000 33.623985 11.400000 9.200000 34.524954 11.400000 9.300000 35.445923 11.400000 9.400000 36.386892 11.400000 9.500000 37.347861 11.400000 9.600000 38.328830 11.400000 9.700000 39.329799 11.400000 9.800000 40.350768 11.400000 9.900000 41.391736 11.400000 10.000000 42.452705 11.400000 10.100000 43.533674 11.400000 10.200000 44.634643 11.400000 10.300000 45.755612 11.400000 10.400000 46.896581 11.400000 10.500000 48.057550 11.400000 10.600000 49.238519 11.400000 10.700000 50.439488 11.400000 10.800000 51.660457 11.400000 10.900000 52.901426 11.400000 11.000000 54.162395 11.400000 11.100000 55.443364 11.400000 11.200000 56.744333 11.400000 11.300000 58.065302 11.400000 11.400000 59.406271 11.400000 11.500000 60.767240 11.400000 11.600000 62.148208 11.400000 11.700000 63.549177 11.400000 11.800000 64.970146 11.400000 11.900000 66.411115 11.400000 12.000000 67.872084 11.400000 12.100000 69.353053 11.400000 12.200000 70.854022 11.400000 12.300000 72.374991 11.400000 12.400000 73.915960 11.400000 12.500000 75.476929 11.400000 12.600000 77.057898 11.400000 12.700000 78.658867 11.400000 12.800000 80.279836 11.400000 12.900000 81.920805 11.400000 13.000000 83.581774 11.400000 13.100000 85.262743 11.400000 13.200000 86.963712 11.400000 13.300000 88.684680 11.400000 13.400000 90.425649 11.400000 13.500000 92.186618 11.400000 13.600000 93.967587 11.400000 13.700000 95.768556 11.400000 13.800000 97.589525 11.400000 13.900000 99.430494 11.400000 14.000000 101.291463 11.400000 14.100000 103.172432 11.400000 14.200000 105.073401 11.400000 14.300000 106.994370 11.400000 14.400000 108.935339 11.400000 14.500000 110.896308 11.400000 14.600000 112.877277 11.400000 14.700000 114.878246 11.400000 14.800000 116.899215 11.400000 14.900000 118.940184 11.400000 15.000000 121.001152 11.500000 -5.000000 110.325001 11.500000 -4.900000 108.378635 11.500000 -4.800000 106.452268 11.500000 -4.700000 104.545901 11.500000 -4.600000 102.659535 11.500000 -4.500000 100.793168 11.500000 -4.400000 98.946802 11.500000 -4.300000 97.120435 11.500000 -4.200000 95.314069 11.500000 -4.100000 93.527702 11.500000 -4.000000 91.761335 11.500000 -3.900000 90.014969 11.500000 -3.800000 88.288602 11.500000 -3.700000 86.582236 11.500000 -3.600000 84.895869 11.500000 -3.500000 83.229503 11.500000 -3.400000 81.583136 11.500000 -3.300000 79.956769 11.500000 -3.200000 78.350403 11.500000 -3.100000 76.764036 11.500000 -3.000000 75.197670 11.500000 -2.900000 73.651303 11.500000 -2.800000 72.124937 11.500000 -2.700000 70.618570 11.500000 -2.600000 69.132203 11.500000 -2.500000 67.665837 11.500000 -2.400000 66.219470 11.500000 -2.300000 64.793104 11.500000 -2.200000 63.386737 11.500000 -2.100000 62.000371 11.500000 -2.000000 60.634004 11.500000 -1.900000 59.287637 11.500000 -1.800000 57.961271 11.500000 -1.700000 56.654904 11.500000 -1.600000 55.368538 11.500000 -1.500000 54.102171 11.500000 -1.400000 52.855804 11.500000 -1.300000 51.629438 11.500000 -1.200000 50.423071 11.500000 -1.100000 49.236705 11.500000 -1.000000 48.070338 11.500000 -0.900000 46.923972 11.500000 -0.800000 45.797605 11.500000 -0.700000 44.691238 11.500000 -0.600000 43.604872 11.500000 -0.500000 42.538505 11.500000 -0.400000 41.492139 11.500000 -0.300000 40.465772 11.500000 -0.200000 39.459406 11.500000 -0.100000 38.473039 11.500000 -0.000000 37.506672 11.500000 0.100000 36.560306 11.500000 0.200000 35.633939 11.500000 0.300000 34.727573 11.500000 0.400000 33.841206 11.500000 0.500000 32.974840 11.500000 0.600000 32.128473 11.500000 0.700000 31.302106 11.500000 0.800000 30.495740 11.500000 0.900000 29.709373 11.500000 1.000000 28.943007 11.500000 1.100000 28.196640 11.500000 1.200000 27.470274 11.500000 1.300000 26.763907 11.500000 1.400000 26.077540 11.500000 1.500000 25.411174 11.500000 1.600000 24.764807 11.500000 1.700000 24.138441 11.500000 1.800000 23.532074 11.500000 1.900000 22.945707 11.500000 2.000000 22.379341 11.500000 2.100000 21.832974 11.500000 2.200000 21.306608 11.500000 2.300000 20.800241 11.500000 2.400000 20.313875 11.500000 2.500000 19.847508 11.500000 2.600000 19.401141 11.500000 2.700000 18.974775 11.500000 2.800000 18.568408 11.500000 2.900000 18.182042 11.500000 3.000000 17.815675 11.500000 3.100000 17.469309 11.500000 3.200000 17.142942 11.500000 3.300000 16.836575 11.500000 3.400000 16.550209 11.500000 3.500000 16.283842 11.500000 3.600000 16.037476 11.500000 3.700000 15.811109 11.500000 3.800000 15.604743 11.500000 3.900000 15.418376 11.500000 4.000000 15.252009 11.500000 4.100000 15.105643 11.500000 4.200000 14.979276 11.500000 4.300000 14.872910 11.500000 4.400000 14.786543 11.500000 4.500000 14.720177 11.500000 4.600000 14.673810 11.500000 4.700000 14.647443 11.500000 4.800000 14.641077 11.500000 4.900000 14.654710 11.500000 5.000000 14.688344 11.500000 5.100000 14.741977 11.500000 5.200000 14.815610 11.500000 5.300000 14.909244 11.500000 5.400000 15.022877 11.500000 5.500000 15.156511 11.500000 5.600000 15.310144 11.500000 5.700000 15.483778 11.500000 5.800000 15.677411 11.500000 5.900000 15.891044 11.500000 6.000000 16.124678 11.500000 6.100000 16.378311 11.500000 6.200000 16.651945 11.500000 6.300000 16.945578 11.500000 6.400000 17.259212 11.500000 6.500000 17.592845 11.500000 6.600000 17.946478 11.500000 6.700000 18.320112 11.500000 6.800000 18.713745 11.500000 6.900000 19.127379 11.500000 7.000000 19.561012 11.500000 7.100000 20.014646 11.500000 7.200000 20.488279 11.500000 7.300000 20.981912 11.500000 7.400000 21.495546 11.500000 7.500000 22.029179 11.500000 7.600000 22.582813 11.500000 7.700000 23.156446 11.500000 7.800000 23.750080 11.500000 7.900000 24.363713 11.500000 8.000000 24.997346 11.500000 8.100000 25.650980 11.500000 8.200000 26.324613 11.500000 8.300000 27.018247 11.500000 8.400000 27.731880 11.500000 8.500000 28.465513 11.500000 8.600000 29.219147 11.500000 8.700000 29.992780 11.500000 8.800000 30.786414 11.500000 8.900000 31.600047 11.500000 9.000000 32.433681 11.500000 9.100000 33.287314 11.500000 9.200000 34.160947 11.500000 9.300000 35.054581 11.500000 9.400000 35.968214 11.500000 9.500000 36.901848 11.500000 9.600000 37.855481 11.500000 9.700000 38.829115 11.500000 9.800000 39.822748 11.500000 9.900000 40.836381 11.500000 10.000000 41.870015 11.500000 10.100000 42.923648 11.500000 10.200000 43.997282 11.500000 10.300000 45.090915 11.500000 10.400000 46.204549 11.500000 10.500000 47.338182 11.500000 10.600000 48.491815 11.500000 10.700000 49.665449 11.500000 10.800000 50.859082 11.500000 10.900000 52.072716 11.500000 11.000000 53.306349 11.500000 11.100000 54.559983 11.500000 11.200000 55.833616 11.500000 11.300000 57.127249 11.500000 11.400000 58.440883 11.500000 11.500000 59.774516 11.500000 11.600000 61.128150 11.500000 11.700000 62.501783 11.500000 11.800000 63.895416 11.500000 11.900000 65.309050 11.500000 12.000000 66.742683 11.500000 12.100000 68.196317 11.500000 12.200000 69.669950 11.500000 12.300000 71.163584 11.500000 12.400000 72.677217 11.500000 12.500000 74.210850 11.500000 12.600000 75.764484 11.500000 12.700000 77.338117 11.500000 12.800000 78.931751 11.500000 12.900000 80.545384 11.500000 13.000000 82.179018 11.500000 13.100000 83.832651 11.500000 13.200000 85.506284 11.500000 13.300000 87.199918 11.500000 13.400000 88.913551 11.500000 13.500000 90.647185 11.500000 13.600000 92.400818 11.500000 13.700000 94.174452 11.500000 13.800000 95.968085 11.500000 13.900000 97.781718 11.500000 14.000000 99.615352 11.500000 14.100000 101.468985 11.500000 14.200000 103.342619 11.500000 14.300000 105.236252 11.500000 14.400000 107.149886 11.500000 14.500000 109.083519 11.500000 14.600000 111.037152 11.500000 14.700000 113.010786 11.500000 14.800000 115.004419 11.500000 14.900000 117.018053 11.500000 15.000000 119.051686 11.600000 -5.000000 113.884890 11.600000 -4.900000 111.910671 11.600000 -4.800000 109.956453 11.600000 -4.700000 108.022234 11.600000 -4.600000 106.108015 11.600000 -4.500000 104.213796 11.600000 -4.400000 102.339577 11.600000 -4.300000 100.485358 11.600000 -4.200000 98.651140 11.600000 -4.100000 96.836921 11.600000 -4.000000 95.042702 11.600000 -3.900000 93.268483 11.600000 -3.800000 91.514264 11.600000 -3.700000 89.780045 11.600000 -3.600000 88.065827 11.600000 -3.500000 86.371608 11.600000 -3.400000 84.697389 11.600000 -3.300000 83.043170 11.600000 -3.200000 81.408951 11.600000 -3.100000 79.794732 11.600000 -3.000000 78.200514 11.600000 -2.900000 76.626295 11.600000 -2.800000 75.072076 11.600000 -2.700000 73.537857 11.600000 -2.600000 72.023638 11.600000 -2.500000 70.529419 11.600000 -2.400000 69.055201 11.600000 -2.300000 67.600982 11.600000 -2.200000 66.166763 11.600000 -2.100000 64.752544 11.600000 -2.000000 63.358325 11.600000 -1.900000 61.984106 11.600000 -1.800000 60.629888 11.600000 -1.700000 59.295669 11.600000 -1.600000 57.981450 11.600000 -1.500000 56.687231 11.600000 -1.400000 55.413012 11.600000 -1.300000 54.158793 11.600000 -1.200000 52.924575 11.600000 -1.100000 51.710356 11.600000 -1.000000 50.516137 11.600000 -0.900000 49.341918 11.600000 -0.800000 48.187699 11.600000 -0.700000 47.053481 11.600000 -0.600000 45.939262 11.600000 -0.500000 44.845043 11.600000 -0.400000 43.770824 11.600000 -0.300000 42.716605 11.600000 -0.200000 41.682386 11.600000 -0.100000 40.668168 11.600000 -0.000000 39.673949 11.600000 0.100000 38.699730 11.600000 0.200000 37.745511 11.600000 0.300000 36.811292 11.600000 0.400000 35.897073 11.600000 0.500000 35.002855 11.600000 0.600000 34.128636 11.600000 0.700000 33.274417 11.600000 0.800000 32.440198 11.600000 0.900000 31.625979 11.600000 1.000000 30.831760 11.600000 1.100000 30.057542 11.600000 1.200000 29.303323 11.600000 1.300000 28.569104 11.600000 1.400000 27.854885 11.600000 1.500000 27.160666 11.600000 1.600000 26.486447 11.600000 1.700000 25.832229 11.600000 1.800000 25.198010 11.600000 1.900000 24.583791 11.600000 2.000000 23.989572 11.600000 2.100000 23.415353 11.600000 2.200000 22.861134 11.600000 2.300000 22.326916 11.600000 2.400000 21.812697 11.600000 2.500000 21.318478 11.600000 2.600000 20.844259 11.600000 2.700000 20.390040 11.600000 2.800000 19.955821 11.600000 2.900000 19.541603 11.600000 3.000000 19.147384 11.600000 3.100000 18.773165 11.600000 3.200000 18.418946 11.600000 3.300000 18.084727 11.600000 3.400000 17.770508 11.600000 3.500000 17.476290 11.600000 3.600000 17.202071 11.600000 3.700000 16.947852 11.600000 3.800000 16.713633 11.600000 3.900000 16.499414 11.600000 4.000000 16.305195 11.600000 4.100000 16.130977 11.600000 4.200000 15.976758 11.600000 4.300000 15.842539 11.600000 4.400000 15.728320 11.600000 4.500000 15.634101 11.600000 4.600000 15.559882 11.600000 4.700000 15.505664 11.600000 4.800000 15.471445 11.600000 4.900000 15.457226 11.600000 5.000000 15.463007 11.600000 5.100000 15.488788 11.600000 5.200000 15.534570 11.600000 5.300000 15.600351 11.600000 5.400000 15.686132 11.600000 5.500000 15.791913 11.600000 5.600000 15.917694 11.600000 5.700000 16.063475 11.600000 5.800000 16.229257 11.600000 5.900000 16.415038 11.600000 6.000000 16.620819 11.600000 6.100000 16.846600 11.600000 6.200000 17.092381 11.600000 6.300000 17.358162 11.600000 6.400000 17.643944 11.600000 6.500000 17.949725 11.600000 6.600000 18.275506 11.600000 6.700000 18.621287 11.600000 6.800000 18.987068 11.600000 6.900000 19.372849 11.600000 7.000000 19.778631 11.600000 7.100000 20.204412 11.600000 7.200000 20.650193 11.600000 7.300000 21.115974 11.600000 7.400000 21.601755 11.600000 7.500000 22.107536 11.600000 7.600000 22.633318 11.600000 7.700000 23.179099 11.600000 7.800000 23.744880 11.600000 7.900000 24.330661 11.600000 8.000000 24.936442 11.600000 8.100000 25.562223 11.600000 8.200000 26.208005 11.600000 8.300000 26.873786 11.600000 8.400000 27.559567 11.600000 8.500000 28.265348 11.600000 8.600000 28.991129 11.600000 8.700000 29.736910 11.600000 8.800000 30.502692 11.600000 8.900000 31.288473 11.600000 9.000000 32.094254 11.600000 9.100000 32.920035 11.600000 9.200000 33.765816 11.600000 9.300000 34.631597 11.600000 9.400000 35.517379 11.600000 9.500000 36.423160 11.600000 9.600000 37.348941 11.600000 9.700000 38.294722 11.600000 9.800000 39.260503 11.600000 9.900000 40.246284 11.600000 10.000000 41.252066 11.600000 10.100000 42.277847 11.600000 10.200000 43.323628 11.600000 10.300000 44.389409 11.600000 10.400000 45.475190 11.600000 10.500000 46.580972 11.600000 10.600000 47.706753 11.600000 10.700000 48.852534 11.600000 10.800000 50.018315 11.600000 10.900000 51.204096 11.600000 11.000000 52.409877 11.600000 11.100000 53.635659 11.600000 11.200000 54.881440 11.600000 11.300000 56.147221 11.600000 11.400000 57.433002 11.600000 11.500000 58.738783 11.600000 11.600000 60.064564 11.600000 11.700000 61.410346 11.600000 11.800000 62.776127 11.600000 11.900000 64.161908 11.600000 12.000000 65.567689 11.600000 12.100000 66.993470 11.600000 12.200000 68.439251 11.600000 12.300000 69.905033 11.600000 12.400000 71.390814 11.600000 12.500000 72.896595 11.600000 12.600000 74.422376 11.600000 12.700000 75.968157 11.600000 12.800000 77.533938 11.600000 12.900000 79.119720 11.600000 13.000000 80.725501 11.600000 13.100000 82.351282 11.600000 13.200000 83.997063 11.600000 13.300000 85.662844 11.600000 13.400000 87.348625 11.600000 13.500000 89.054407 11.600000 13.600000 90.780188 11.600000 13.700000 92.525969 11.600000 13.800000 94.291750 11.600000 13.900000 96.077531 11.600000 14.000000 97.883312 11.600000 14.100000 99.709094 11.600000 14.200000 101.554875 11.600000 14.300000 103.420656 11.600000 14.400000 105.306437 11.600000 14.500000 107.212218 11.600000 14.600000 109.137999 11.600000 14.700000 111.083781 11.600000 14.800000 113.049562 11.600000 14.900000 115.035343 11.600000 15.000000 117.041124 11.700000 -5.000000 117.481037 11.700000 -4.900000 115.478449 11.700000 -4.800000 113.495861 11.700000 -4.700000 111.533273 11.700000 -4.600000 109.590685 11.700000 -4.500000 107.668098 11.700000 -4.400000 105.765510 11.700000 -4.300000 103.882922 11.700000 -4.200000 102.020334 11.700000 -4.100000 100.177746 11.700000 -4.000000 98.355158 11.700000 -3.900000 96.552571 11.700000 -3.800000 94.769983 11.700000 -3.700000 93.007395 11.700000 -3.600000 91.264807 11.700000 -3.500000 89.542219 11.700000 -3.400000 87.839631 11.700000 -3.300000 86.157044 11.700000 -3.200000 84.494456 11.700000 -3.100000 82.851868 11.700000 -3.000000 81.229280 11.700000 -2.900000 79.626692 11.700000 -2.800000 78.044105 11.700000 -2.700000 76.481517 11.700000 -2.600000 74.938929 11.700000 -2.500000 73.416341 11.700000 -2.400000 71.913753 11.700000 -2.300000 70.431165 11.700000 -2.200000 68.968578 11.700000 -2.100000 67.525990 11.700000 -2.000000 66.103402 11.700000 -1.900000 64.700814 11.700000 -1.800000 63.318226 11.700000 -1.700000 61.955638 11.700000 -1.600000 60.613051 11.700000 -1.500000 59.290463 11.700000 -1.400000 57.987875 11.700000 -1.300000 56.705287 11.700000 -1.200000 55.442699 11.700000 -1.100000 54.200112 11.700000 -1.000000 52.977524 11.700000 -0.900000 51.774936 11.700000 -0.800000 50.592348 11.700000 -0.700000 49.429760 11.700000 -0.600000 48.287172 11.700000 -0.500000 47.164585 11.700000 -0.400000 46.061997 11.700000 -0.300000 44.979409 11.700000 -0.200000 43.916821 11.700000 -0.100000 42.874233 11.700000 -0.000000 41.851645 11.700000 0.100000 40.849058 11.700000 0.200000 39.866470 11.700000 0.300000 38.903882 11.700000 0.400000 37.961294 11.700000 0.500000 37.038706 11.700000 0.600000 36.136119 11.700000 0.700000 35.253531 11.700000 0.800000 34.390943 11.700000 0.900000 33.548355 11.700000 1.000000 32.725767 11.700000 1.100000 31.923179 11.700000 1.200000 31.140592 11.700000 1.300000 30.378004 11.700000 1.400000 29.635416 11.700000 1.500000 28.912828 11.700000 1.600000 28.210240 11.700000 1.700000 27.527652 11.700000 1.800000 26.865065 11.700000 1.900000 26.222477 11.700000 2.000000 25.599889 11.700000 2.100000 24.997301 11.700000 2.200000 24.414713 11.700000 2.300000 23.852126 11.700000 2.400000 23.309538 11.700000 2.500000 22.786950 11.700000 2.600000 22.284362 11.700000 2.700000 21.801774 11.700000 2.800000 21.339186 11.700000 2.900000 20.896599 11.700000 3.000000 20.474011 11.700000 3.100000 20.071423 11.700000 3.200000 19.688835 11.700000 3.300000 19.326247 11.700000 3.400000 18.983659 11.700000 3.500000 18.661072 11.700000 3.600000 18.358484 11.700000 3.700000 18.075896 11.700000 3.800000 17.813308 11.700000 3.900000 17.570720 11.700000 4.000000 17.348133 11.700000 4.100000 17.145545 11.700000 4.200000 16.962957 11.700000 4.300000 16.800369 11.700000 4.400000 16.657781 11.700000 4.500000 16.535193 11.700000 4.600000 16.432606 11.700000 4.700000 16.350018 11.700000 4.800000 16.287430 11.700000 4.900000 16.244842 11.700000 5.000000 16.222254 11.700000 5.100000 16.219666 11.700000 5.200000 16.237079 11.700000 5.300000 16.274491 11.700000 5.400000 16.331903 11.700000 5.500000 16.409315 11.700000 5.600000 16.506727 11.700000 5.700000 16.624140 11.700000 5.800000 16.761552 11.700000 5.900000 16.918964 11.700000 6.000000 17.096376 11.700000 6.100000 17.293788 11.700000 6.200000 17.511200 11.700000 6.300000 17.748613 11.700000 6.400000 18.006025 11.700000 6.500000 18.283437 11.700000 6.600000 18.580849 11.700000 6.700000 18.898261 11.700000 6.800000 19.235674 11.700000 6.900000 19.593086 11.700000 7.000000 19.970498 11.700000 7.100000 20.367910 11.700000 7.200000 20.785322 11.700000 7.300000 21.222734 11.700000 7.400000 21.680147 11.700000 7.500000 22.157559 11.700000 7.600000 22.654971 11.700000 7.700000 23.172383 11.700000 7.800000 23.709795 11.700000 7.900000 24.267207 11.700000 8.000000 24.844620 11.700000 8.100000 25.442032 11.700000 8.200000 26.059444 11.700000 8.300000 26.696856 11.700000 8.400000 27.354268 11.700000 8.500000 28.031681 11.700000 8.600000 28.729093 11.700000 8.700000 29.446505 11.700000 8.800000 30.183917 11.700000 8.900000 30.941329 11.700000 9.000000 31.718741 11.700000 9.100000 32.516154 11.700000 9.200000 33.333566 11.700000 9.300000 34.170978 11.700000 9.400000 35.028390 11.700000 9.500000 35.905802 11.700000 9.600000 36.803214 11.700000 9.700000 37.720627 11.700000 9.800000 38.658039 11.700000 9.900000 39.615451 11.700000 10.000000 40.592863 11.700000 10.100000 41.590275 11.700000 10.200000 42.607688 11.700000 10.300000 43.645100 11.700000 10.400000 44.702512 11.700000 10.500000 45.779924 11.700000 10.600000 46.877336 11.700000 10.700000 47.994748 11.700000 10.800000 49.132161 11.700000 10.900000 50.289573 11.700000 11.000000 51.466985 11.700000 11.100000 52.664397 11.700000 11.200000 53.881809 11.700000 11.300000 55.119221 11.700000 11.400000 56.376634 11.700000 11.500000 57.654046 11.700000 11.600000 58.951458 11.700000 11.700000 60.268870 11.700000 11.800000 61.606282 11.700000 11.900000 62.963695 11.700000 12.000000 64.341107 11.700000 12.100000 65.738519 11.700000 12.200000 67.155931 11.700000 12.300000 68.593343 11.700000 12.400000 70.050755 11.700000 12.500000 71.528168 11.700000 12.600000 73.025580 11.700000 12.700000 74.542992 11.700000 12.800000 76.080404 11.700000 12.900000 77.637816 11.700000 13.000000 79.215228 11.700000 13.100000 80.812641 11.700000 13.200000 82.430053 11.700000 13.300000 84.067465 11.700000 13.400000 85.724877 11.700000 13.500000 87.402289 11.700000 13.600000 89.099702 11.700000 13.700000 90.817114 11.700000 13.800000 92.554526 11.700000 13.900000 94.311938 11.700000 14.000000 96.089350 11.700000 14.100000 97.886762 11.700000 14.200000 99.704175 11.700000 14.300000 101.541587 11.700000 14.400000 103.398999 11.700000 14.500000 105.276411 11.700000 14.600000 107.173823 11.700000 14.700000 109.091235 11.700000 14.800000 111.028648 11.700000 14.900000 112.986060 11.700000 15.000000 114.963472 11.800000 -5.000000 121.108031 11.800000 -4.900000 119.076557 11.800000 -4.800000 117.065083 11.800000 -4.700000 115.073610 11.800000 -4.600000 113.102136 11.800000 -4.500000 111.150663 11.800000 -4.400000 109.219189 11.800000 -4.300000 107.307716 11.800000 -4.200000 105.416242 11.800000 -4.100000 103.544769 11.800000 -4.000000 101.693295 11.800000 -3.900000 99.861821 11.800000 -3.800000 98.050348 11.800000 -3.700000 96.258874 11.800000 -3.600000 94.487401 11.800000 -3.500000 92.735927 11.800000 -3.400000 91.004454 11.800000 -3.300000 89.292980 11.800000 -3.200000 87.601507 11.800000 -3.100000 85.930033 11.800000 -3.000000 84.278559 11.800000 -2.900000 82.647086 11.800000 -2.800000 81.035612 11.800000 -2.700000 79.444139 11.800000 -2.600000 77.872665 11.800000 -2.500000 76.321192 11.800000 -2.400000 74.789718 11.800000 -2.300000 73.278245 11.800000 -2.200000 71.786771 11.800000 -2.100000 70.315298 11.800000 -2.000000 68.863824 11.800000 -1.900000 67.432350 11.800000 -1.800000 66.020877 11.800000 -1.700000 64.629403 11.800000 -1.600000 63.257930 11.800000 -1.500000 61.906456 11.800000 -1.400000 60.574983 11.800000 -1.300000 59.263509 11.800000 -1.200000 57.972036 11.800000 -1.100000 56.700562 11.800000 -1.000000 55.449088 11.800000 -0.900000 54.217615 11.800000 -0.800000 53.006141 11.800000 -0.700000 51.814668 11.800000 -0.600000 50.643194 11.800000 -0.500000 49.491721 11.800000 -0.400000 48.360247 11.800000 -0.300000 47.248774 11.800000 -0.200000 46.157300 11.800000 -0.100000 45.085826 11.800000 -0.000000 44.034353 11.800000 0.100000 43.002879 11.800000 0.200000 41.991406 11.800000 0.300000 40.999932 11.800000 0.400000 40.028459 11.800000 0.500000 39.076985 11.800000 0.600000 38.145512 11.800000 0.700000 37.234038 11.800000 0.800000 36.342564 11.800000 0.900000 35.471091 11.800000 1.000000 34.619617 11.800000 1.100000 33.788144 11.800000 1.200000 32.976670 11.800000 1.300000 32.185197 11.800000 1.400000 31.413723 11.800000 1.500000 30.662250 11.800000 1.600000 29.930776 11.800000 1.700000 29.219302 11.800000 1.800000 28.527829 11.800000 1.900000 27.856355 11.800000 2.000000 27.204882 11.800000 2.100000 26.573408 11.800000 2.200000 25.961935 11.800000 2.300000 25.370461 11.800000 2.400000 24.798988 11.800000 2.500000 24.247514 11.800000 2.600000 23.716040 11.800000 2.700000 23.204567 11.800000 2.800000 22.713093 11.800000 2.900000 22.241620 11.800000 3.000000 21.790146 11.800000 3.100000 21.358673 11.800000 3.200000 20.947199 11.800000 3.300000 20.555726 11.800000 3.400000 20.184252 11.800000 3.500000 19.832779 11.800000 3.600000 19.501305 11.800000 3.700000 19.189831 11.800000 3.800000 18.898358 11.800000 3.900000 18.626884 11.800000 4.000000 18.375411 11.800000 4.100000 18.143937 11.800000 4.200000 17.932464 11.800000 4.300000 17.740990 11.800000 4.400000 17.569517 11.800000 4.500000 17.418043 11.800000 4.600000 17.286569 11.800000 4.700000 17.175096 11.800000 4.800000 17.083622 11.800000 4.900000 17.012149 11.800000 5.000000 16.960675 11.800000 5.100000 16.929202 11.800000 5.200000 16.917728 11.800000 5.300000 16.926255 11.800000 5.400000 16.954781 11.800000 5.500000 17.003307 11.800000 5.600000 17.071834 11.800000 5.700000 17.160360 11.800000 5.800000 17.268887 11.800000 5.900000 17.397413 11.800000 6.000000 17.545940 11.800000 6.100000 17.714466 11.800000 6.200000 17.902993 11.800000 6.300000 18.111519 11.800000 6.400000 18.340045 11.800000 6.500000 18.588572 11.800000 6.600000 18.857098 11.800000 6.700000 19.145625 11.800000 6.800000 19.454151 11.800000 6.900000 19.782678 11.800000 7.000000 20.131204 11.800000 7.100000 20.499731 11.800000 7.200000 20.888257 11.800000 7.300000 21.296783 11.800000 7.400000 21.725310 11.800000 7.500000 22.173836 11.800000 7.600000 22.642363 11.800000 7.700000 23.130889 11.800000 7.800000 23.639416 11.800000 7.900000 24.167942 11.800000 8.000000 24.716469 11.800000 8.100000 25.284995 11.800000 8.200000 25.873521 11.800000 8.300000 26.482048 11.800000 8.400000 27.110574 11.800000 8.500000 27.759101 11.800000 8.600000 28.427627 11.800000 8.700000 29.116154 11.800000 8.800000 29.824680 11.800000 8.900000 30.553207 11.800000 9.000000 31.301733 11.800000 9.100000 32.070260 11.800000 9.200000 32.858786 11.800000 9.300000 33.667312 11.800000 9.400000 34.495839 11.800000 9.500000 35.344365 11.800000 9.600000 36.212892 11.800000 9.700000 37.101418 11.800000 9.800000 38.009945 11.800000 9.900000 38.938471 11.800000 10.000000 39.886998 11.800000 10.100000 40.855524 11.800000 10.200000 41.844050 11.800000 10.300000 42.852577 11.800000 10.400000 43.881103 11.800000 10.500000 44.929630 11.800000 10.600000 45.998156 11.800000 10.700000 47.086683 11.800000 10.800000 48.195209 11.800000 10.900000 49.323736 11.800000 11.000000 50.472262 11.800000 11.100000 51.640788 11.800000 11.200000 52.829315 11.800000 11.300000 54.037841 11.800000 11.400000 55.266368 11.800000 11.500000 56.514894 11.800000 11.600000 57.783421 11.800000 11.700000 59.071947 11.800000 11.800000 60.380474 11.800000 11.900000 61.709000 11.800000 12.000000 63.057526 11.800000 12.100000 64.426053 11.800000 12.200000 65.814579 11.800000 12.300000 67.223106 11.800000 12.400000 68.651632 11.800000 12.500000 70.100159 11.800000 12.600000 71.568685 11.800000 12.700000 73.057212 11.800000 12.800000 74.565738 11.800000 12.900000 76.094264 11.800000 13.000000 77.642791 11.800000 13.100000 79.211317 11.800000 13.200000 80.799844 11.800000 13.300000 82.408370 11.800000 13.400000 84.036897 11.800000 13.500000 85.685423 11.800000 13.600000 87.353950 11.800000 13.700000 89.042476 11.800000 13.800000 90.751002 11.800000 13.900000 92.479529 11.800000 14.000000 94.228055 11.800000 14.100000 95.996582 11.800000 14.200000 97.785108 11.800000 14.300000 99.593635 11.800000 14.400000 101.422161 11.800000 14.500000 103.270688 11.800000 14.600000 105.139214 11.800000 14.700000 107.027740 11.800000 14.800000 108.936267 11.800000 14.900000 110.864793 11.800000 15.000000 112.813320 11.900000 -5.000000 124.761123 11.900000 -4.900000 122.700247 11.900000 -4.800000 120.659371 11.900000 -4.700000 118.638495 11.900000 -4.600000 116.637619 11.900000 -4.500000 114.656743 11.900000 -4.400000 112.695867 11.900000 -4.300000 110.754991 11.900000 -4.200000 108.834115 11.900000 -4.100000 106.933239 11.900000 -4.000000 105.052363 11.900000 -3.900000 103.191487 11.900000 -3.800000 101.350611 11.900000 -3.700000 99.529735 11.900000 -3.600000 97.728859 11.900000 -3.500000 95.947983 11.900000 -3.400000 94.187107 11.900000 -3.300000 92.446231 11.900000 -3.200000 90.725355 11.900000 -3.100000 89.024479 11.900000 -3.000000 87.343603 11.900000 -2.900000 85.682727 11.900000 -2.800000 84.041851 11.900000 -2.700000 82.420975 11.900000 -2.600000 80.820098 11.900000 -2.500000 79.239222 11.900000 -2.400000 77.678346 11.900000 -2.300000 76.137470 11.900000 -2.200000 74.616594 11.900000 -2.100000 73.115718 11.900000 -2.000000 71.634842 11.900000 -1.900000 70.173966 11.900000 -1.800000 68.733090 11.900000 -1.700000 67.312214 11.900000 -1.600000 65.911338 11.900000 -1.500000 64.530462 11.900000 -1.400000 63.169586 11.900000 -1.300000 61.828710 11.900000 -1.200000 60.507834 11.900000 -1.100000 59.206958 11.900000 -1.000000 57.926082 11.900000 -0.900000 56.665206 11.900000 -0.800000 55.424330 11.900000 -0.700000 54.203454 11.900000 -0.600000 53.002578 11.900000 -0.500000 51.821702 11.900000 -0.400000 50.660826 11.900000 -0.300000 49.519950 11.900000 -0.200000 48.399074 11.900000 -0.100000 47.298198 11.900000 -0.000000 46.217322 11.900000 0.100000 45.156446 11.900000 0.200000 44.115570 11.900000 0.300000 43.094694 11.900000 0.400000 42.093818 11.900000 0.500000 41.112942 11.900000 0.600000 40.152066 11.900000 0.700000 39.211190 11.900000 0.800000 38.290314 11.900000 0.900000 37.389438 11.900000 1.000000 36.508562 11.900000 1.100000 35.647686 11.900000 1.200000 34.806810 11.900000 1.300000 33.985934 11.900000 1.400000 33.185058 11.900000 1.500000 32.404182 11.900000 1.600000 31.643306 11.900000 1.700000 30.902430 11.900000 1.800000 30.181554 11.900000 1.900000 29.480677 11.900000 2.000000 28.799801 11.900000 2.100000 28.138925 11.900000 2.200000 27.498049 11.900000 2.300000 26.877173 11.900000 2.400000 26.276297 11.900000 2.500000 25.695421 11.900000 2.600000 25.134545 11.900000 2.700000 24.593669 11.900000 2.800000 24.072793 11.900000 2.900000 23.571917 11.900000 3.000000 23.091041 11.900000 3.100000 22.630165 11.900000 3.200000 22.189289 11.900000 3.300000 21.768413 11.900000 3.400000 21.367537 11.900000 3.500000 20.986661 11.900000 3.600000 20.625785 11.900000 3.700000 20.284909 11.900000 3.800000 19.964033 11.900000 3.900000 19.663157 11.900000 4.000000 19.382281 11.900000 4.100000 19.121405 11.900000 4.200000 18.880529 11.900000 4.300000 18.659653 11.900000 4.400000 18.458777 11.900000 4.500000 18.277901 11.900000 4.600000 18.117025 11.900000 4.700000 17.976149 11.900000 4.800000 17.855273 11.900000 4.900000 17.754397 11.900000 5.000000 17.673521 11.900000 5.100000 17.612645 11.900000 5.200000 17.571769 11.900000 5.300000 17.550893 11.900000 5.400000 17.550017 11.900000 5.500000 17.569141 11.900000 5.600000 17.608265 11.900000 5.700000 17.667389 11.900000 5.800000 17.746513 11.900000 5.900000 17.845637 11.900000 6.000000 17.964761 11.900000 6.100000 18.103885 11.900000 6.200000 18.263009 11.900000 6.300000 18.442133 11.900000 6.400000 18.641256 11.900000 6.500000 18.860380 11.900000 6.600000 19.099504 11.900000 6.700000 19.358628 11.900000 6.800000 19.637752 11.900000 6.900000 19.936876 11.900000 7.000000 20.256000 11.900000 7.100000 20.595124 11.900000 7.200000 20.954248 11.900000 7.300000 21.333372 11.900000 7.400000 21.732496 11.900000 7.500000 22.151620 11.900000 7.600000 22.590744 11.900000 7.700000 23.049868 11.900000 7.800000 23.528992 11.900000 7.900000 24.028116 11.900000 8.000000 24.547240 11.900000 8.100000 25.086364 11.900000 8.200000 25.645488 11.900000 8.300000 26.224612 11.900000 8.400000 26.823736 11.900000 8.500000 27.442860 11.900000 8.600000 28.081984 11.900000 8.700000 28.741108 11.900000 8.800000 29.420232 11.900000 8.900000 30.119356 11.900000 9.000000 30.838480 11.900000 9.100000 31.577604 11.900000 9.200000 32.336728 11.900000 9.300000 33.115852 11.900000 9.400000 33.914976 11.900000 9.500000 34.734100 11.900000 9.600000 35.573224 11.900000 9.700000 36.432348 11.900000 9.800000 37.311472 11.900000 9.900000 38.210596 11.900000 10.000000 39.129720 11.900000 10.100000 40.068844 11.900000 10.200000 41.027968 11.900000 10.300000 42.007092 11.900000 10.400000 43.006216 11.900000 10.500000 44.025340 11.900000 10.600000 45.064464 11.900000 10.700000 46.123588 11.900000 10.800000 47.202711 11.900000 10.900000 48.301835 11.900000 11.000000 49.420959 11.900000 11.100000 50.560083 11.900000 11.200000 51.719207 11.900000 11.300000 52.898331 11.900000 11.400000 54.097455 11.900000 11.500000 55.316579 11.900000 11.600000 56.555703 11.900000 11.700000 57.814827 11.900000 11.800000 59.093951 11.900000 11.900000 60.393075 11.900000 12.000000 61.712199 11.900000 12.100000 63.051323 11.900000 12.200000 64.410447 11.900000 12.300000 65.789571 11.900000 12.400000 67.188695 11.900000 12.500000 68.607819 11.900000 12.600000 70.046943 11.900000 12.700000 71.506067 11.900000 12.800000 72.985191 11.900000 12.900000 74.484315 11.900000 13.000000 76.003439 11.900000 13.100000 77.542563 11.900000 13.200000 79.101687 11.900000 13.300000 80.680811 11.900000 13.400000 82.279935 11.900000 13.500000 83.899059 11.900000 13.600000 85.538183 11.900000 13.700000 87.197307 11.900000 13.800000 88.876431 11.900000 13.900000 90.575555 11.900000 14.000000 92.294679 11.900000 14.100000 94.033803 11.900000 14.200000 95.792927 11.900000 14.300000 97.572051 11.900000 14.400000 99.371175 11.900000 14.500000 101.190299 11.900000 14.600000 103.029423 11.900000 14.700000 104.888547 11.900000 14.800000 106.767671 11.900000 14.900000 108.666795 11.900000 15.000000 110.585919 12.000000 -5.000000 128.436296 12.000000 -4.900000 126.345500 12.000000 -4.800000 124.274705 12.000000 -4.700000 122.223910 12.000000 -4.600000 120.193115 12.000000 -4.500000 118.182319 12.000000 -4.400000 116.191524 12.000000 -4.300000 114.220729 12.000000 -4.200000 112.269934 12.000000 -4.100000 110.339139 12.000000 -4.000000 108.428343 12.000000 -3.900000 106.537548 12.000000 -3.800000 104.666753 12.000000 -3.700000 102.815958 12.000000 -3.600000 100.985162 12.000000 -3.500000 99.174367 12.000000 -3.400000 97.383572 12.000000 -3.300000 95.612777 12.000000 -3.200000 93.861982 12.000000 -3.100000 92.131186 12.000000 -3.000000 90.420391 12.000000 -2.900000 88.729596 12.000000 -2.800000 87.058801 12.000000 -2.700000 85.408005 12.000000 -2.600000 83.777210 12.000000 -2.500000 82.166415 12.000000 -2.400000 80.575620 12.000000 -2.300000 79.004824 12.000000 -2.200000 77.454029 12.000000 -2.100000 75.923234 12.000000 -2.000000 74.412439 12.000000 -1.900000 72.921644 12.000000 -1.800000 71.450848 12.000000 -1.700000 70.000053 12.000000 -1.600000 68.569258 12.000000 -1.500000 67.158463 12.000000 -1.400000 65.767667 12.000000 -1.300000 64.396872 12.000000 -1.200000 63.046077 12.000000 -1.100000 61.715282 12.000000 -1.000000 60.404486 12.000000 -0.900000 59.113691 12.000000 -0.800000 57.842896 12.000000 -0.700000 56.592101 12.000000 -0.600000 55.361306 12.000000 -0.500000 54.150510 12.000000 -0.400000 52.959715 12.000000 -0.300000 51.788920 12.000000 -0.200000 50.638125 12.000000 -0.100000 49.507329 12.000000 -0.000000 48.396534 12.000000 0.100000 47.305739 12.000000 0.200000 46.234944 12.000000 0.300000 45.184148 12.000000 0.400000 44.153353 12.000000 0.500000 43.142558 12.000000 0.600000 42.151763 12.000000 0.700000 41.180968 12.000000 0.800000 40.230172 12.000000 0.900000 39.299377 12.000000 1.000000 38.388582 12.000000 1.100000 37.497787 12.000000 1.200000 36.626991 12.000000 1.300000 35.776196 12.000000 1.400000 34.945401 12.000000 1.500000 34.134606 12.000000 1.600000 33.343811 12.000000 1.700000 32.573015 12.000000 1.800000 31.822220 12.000000 1.900000 31.091425 12.000000 2.000000 30.380630 12.000000 2.100000 29.689834 12.000000 2.200000 29.019039 12.000000 2.300000 28.368244 12.000000 2.400000 27.737449 12.000000 2.500000 27.126653 12.000000 2.600000 26.535858 12.000000 2.700000 25.965063 12.000000 2.800000 25.414268 12.000000 2.900000 24.883473 12.000000 3.000000 24.372677 12.000000 3.100000 23.881882 12.000000 3.200000 23.411087 12.000000 3.300000 22.960292 12.000000 3.400000 22.529496 12.000000 3.500000 22.118701 12.000000 3.600000 21.727906 12.000000 3.700000 21.357111 12.000000 3.800000 21.006315 12.000000 3.900000 20.675520 12.000000 4.000000 20.364725 12.000000 4.100000 20.073930 12.000000 4.200000 19.803135 12.000000 4.300000 19.552339 12.000000 4.400000 19.321544 12.000000 4.500000 19.110749 12.000000 4.600000 18.919954 12.000000 4.700000 18.749158 12.000000 4.800000 18.598363 12.000000 4.900000 18.467568 12.000000 5.000000 18.356773 12.000000 5.100000 18.265977 12.000000 5.200000 18.195182 12.000000 5.300000 18.144387 12.000000 5.400000 18.113592 12.000000 5.500000 18.102797 12.000000 5.600000 18.112001 12.000000 5.700000 18.141206 12.000000 5.800000 18.190411 12.000000 5.900000 18.259616 12.000000 6.000000 18.348820 12.000000 6.100000 18.458025 12.000000 6.200000 18.587230 12.000000 6.300000 18.736435 12.000000 6.400000 18.905640 12.000000 6.500000 19.094844 12.000000 6.600000 19.304049 12.000000 6.700000 19.533254 12.000000 6.800000 19.782459 12.000000 6.900000 20.051663 12.000000 7.000000 20.340868 12.000000 7.100000 20.650073 12.000000 7.200000 20.979278 12.000000 7.300000 21.328482 12.000000 7.400000 21.697687 12.000000 7.500000 22.086892 12.000000 7.600000 22.496097 12.000000 7.700000 22.925302 12.000000 7.800000 23.374506 12.000000 7.900000 23.843711 12.000000 8.000000 24.332916 12.000000 8.100000 24.842121 12.000000 8.200000 25.371325 12.000000 8.300000 25.920530 12.000000 8.400000 26.489735 12.000000 8.500000 27.078940 12.000000 8.600000 27.688144 12.000000 8.700000 28.317349 12.000000 8.800000 28.966554 12.000000 8.900000 29.635759 12.000000 9.000000 30.324964 12.000000 9.100000 31.034168 12.000000 9.200000 31.763373 12.000000 9.300000 32.512578 12.000000 9.400000 33.281783 12.000000 9.500000 34.070987 12.000000 9.600000 34.880192 12.000000 9.700000 35.709397 12.000000 9.800000 36.558602 12.000000 9.900000 37.427806 12.000000 10.000000 38.317011 12.000000 10.100000 39.226216 12.000000 10.200000 40.155421 12.000000 10.300000 41.104626 12.000000 10.400000 42.073830 12.000000 10.500000 43.063035 12.000000 10.600000 44.072240 12.000000 10.700000 45.101445 12.000000 10.800000 46.150649 12.000000 10.900000 47.219854 12.000000 11.000000 48.309059 12.000000 11.100000 49.418264 12.000000 11.200000 50.547469 12.000000 11.300000 51.696673 12.000000 11.400000 52.865878 12.000000 11.500000 54.055083 12.000000 11.600000 55.264288 12.000000 11.700000 56.493492 12.000000 11.800000 57.742697 12.000000 11.900000 59.011902 12.000000 12.000000 60.301107 12.000000 12.100000 61.610311 12.000000 12.200000 62.939516 12.000000 12.300000 64.288721 12.000000 12.400000 65.657926 12.000000 12.500000 67.047131 12.000000 12.600000 68.456335 12.000000 12.700000 69.885540 12.000000 12.800000 71.334745 12.000000 12.900000 72.803950 12.000000 13.000000 74.293154 12.000000 13.100000 75.802359 12.000000 13.200000 77.331564 12.000000 13.300000 78.880769 12.000000 13.400000 80.449973 12.000000 13.500000 82.039178 12.000000 13.600000 83.648383 12.000000 13.700000 85.277588 12.000000 13.800000 86.926793 12.000000 13.900000 88.595997 12.000000 14.000000 90.285202 12.000000 14.100000 91.994407 12.000000 14.200000 93.723612 12.000000 14.300000 95.472816 12.000000 14.400000 97.242021 12.000000 14.500000 99.031226 12.000000 14.600000 100.840431 12.000000 14.700000 102.669635 12.000000 14.800000 104.518840 12.000000 14.900000 106.388045 12.000000 15.000000 108.277250 12.100000 -5.000000 132.130324 12.100000 -4.900000 130.009092 12.100000 -4.800000 127.907861 12.100000 -4.700000 125.826630 12.100000 -4.600000 123.765399 12.100000 -4.500000 121.724168 12.100000 -4.400000 119.702937 12.100000 -4.300000 117.701705 12.100000 -4.200000 115.720474 12.100000 -4.100000 113.759243 12.100000 -4.000000 111.818012 12.100000 -3.900000 109.896781 12.100000 -3.800000 107.995550 12.100000 -3.700000 106.114318 12.100000 -3.600000 104.253087 12.100000 -3.500000 102.411856 12.100000 -3.400000 100.590625 12.100000 -3.300000 98.789394 12.100000 -3.200000 97.008162 12.100000 -3.100000 95.246931 12.100000 -3.000000 93.505700 12.100000 -2.900000 91.784469 12.100000 -2.800000 90.083238 12.100000 -2.700000 88.402007 12.100000 -2.600000 86.740775 12.100000 -2.500000 85.099544 12.100000 -2.400000 83.478313 12.100000 -2.300000 81.877082 12.100000 -2.200000 80.295851 12.100000 -2.100000 78.734620 12.100000 -2.000000 77.193388 12.100000 -1.900000 75.672157 12.100000 -1.800000 74.170926 12.100000 -1.700000 72.689695 12.100000 -1.600000 71.228464 12.100000 -1.500000 69.787233 12.100000 -1.400000 68.366001 12.100000 -1.300000 66.964770 12.100000 -1.200000 65.583539 12.100000 -1.100000 64.222308 12.100000 -1.000000 62.881077 12.100000 -0.900000 61.559845 12.100000 -0.800000 60.258614 12.100000 -0.700000 58.977383 12.100000 -0.600000 57.716152 12.100000 -0.500000 56.474921 12.100000 -0.400000 55.253690 12.100000 -0.300000 54.052458 12.100000 -0.200000 52.871227 12.100000 -0.100000 51.709996 12.100000 -0.000000 50.568765 12.100000 0.100000 49.447534 12.100000 0.200000 48.346303 12.100000 0.300000 47.265071 12.100000 0.400000 46.203840 12.100000 0.500000 45.162609 12.100000 0.600000 44.141378 12.100000 0.700000 43.140147 12.100000 0.800000 42.158916 12.100000 0.900000 41.197684 12.100000 1.000000 40.256453 12.100000 1.100000 39.335222 12.100000 1.200000 38.433991 12.100000 1.300000 37.552760 12.100000 1.400000 36.691528 12.100000 1.500000 35.850297 12.100000 1.600000 35.029066 12.100000 1.700000 34.227835 12.100000 1.800000 33.446604 12.100000 1.900000 32.685373 12.100000 2.000000 31.944141 12.100000 2.100000 31.222910 12.100000 2.200000 30.521679 12.100000 2.300000 29.840448 12.100000 2.400000 29.179217 12.100000 2.500000 28.537986 12.100000 2.600000 27.916754 12.100000 2.700000 27.315523 12.100000 2.800000 26.734292 12.100000 2.900000 26.173061 12.100000 3.000000 25.631830 12.100000 3.100000 25.110599 12.100000 3.200000 24.609367 12.100000 3.300000 24.128136 12.100000 3.400000 23.666905 12.100000 3.500000 23.225674 12.100000 3.600000 22.804443 12.100000 3.700000 22.403211 12.100000 3.800000 22.021980 12.100000 3.900000 21.660749 12.100000 4.000000 21.319518 12.100000 4.100000 20.998287 12.100000 4.200000 20.697056 12.100000 4.300000 20.415824 12.100000 4.400000 20.154593 12.100000 4.500000 19.913362 12.100000 4.600000 19.692131 12.100000 4.700000 19.490900 12.100000 4.800000 19.309669 12.100000 4.900000 19.148437 12.100000 5.000000 19.007206 12.100000 5.100000 18.885975 12.100000 5.200000 18.784744 12.100000 5.300000 18.703513 12.100000 5.400000 18.642282 12.100000 5.500000 18.601050 12.100000 5.600000 18.579819 12.100000 5.700000 18.578588 12.100000 5.800000 18.597357 12.100000 5.900000 18.636126 12.100000 6.000000 18.694894 12.100000 6.100000 18.773663 12.100000 6.200000 18.872432 12.100000 6.300000 18.991201 12.100000 6.400000 19.129970 12.100000 6.500000 19.288739 12.100000 6.600000 19.467507 12.100000 6.700000 19.666276 12.100000 6.800000 19.885045 12.100000 6.900000 20.123814 12.100000 7.000000 20.382583 12.100000 7.100000 20.661352 12.100000 7.200000 20.960120 12.100000 7.300000 21.278889 12.100000 7.400000 21.617658 12.100000 7.500000 21.976427 12.100000 7.600000 22.355196 12.100000 7.700000 22.753965 12.100000 7.800000 23.172733 12.100000 7.900000 23.611502 12.100000 8.000000 24.070271 12.100000 8.100000 24.549040 12.100000 8.200000 25.047809 12.100000 8.300000 25.566577 12.100000 8.400000 26.105346 12.100000 8.500000 26.664115 12.100000 8.600000 27.242884 12.100000 8.700000 27.841653 12.100000 8.800000 28.460422 12.100000 8.900000 29.099190 12.100000 9.000000 29.757959 12.100000 9.100000 30.436728 12.100000 9.200000 31.135497 12.100000 9.300000 31.854266 12.100000 9.400000 32.593035 12.100000 9.500000 33.351803 12.100000 9.600000 34.130572 12.100000 9.700000 34.929341 12.100000 9.800000 35.748110 12.100000 9.900000 36.586879 12.100000 10.000000 37.445648 12.100000 10.100000 38.324416 12.100000 10.200000 39.223185 12.100000 10.300000 40.141954 12.100000 10.400000 41.080723 12.100000 10.500000 42.039492 12.100000 10.600000 43.018260 12.100000 10.700000 44.017029 12.100000 10.800000 45.035798 12.100000 10.900000 46.074567 12.100000 11.000000 47.133336 12.100000 11.100000 48.212105 12.100000 11.200000 49.310873 12.100000 11.300000 50.429642 12.100000 11.400000 51.568411 12.100000 11.500000 52.727180 12.100000 11.600000 53.905949 12.100000 11.700000 55.104718 12.100000 11.800000 56.323486 12.100000 11.900000 57.562255 12.100000 12.000000 58.821024 12.100000 12.100000 60.099793 12.100000 12.200000 61.398562 12.100000 12.300000 62.717331 12.100000 12.400000 64.056099 12.100000 12.500000 65.414868 12.100000 12.600000 66.793637 12.100000 12.700000 68.192406 12.100000 12.800000 69.611175 12.100000 12.900000 71.049943 12.100000 13.000000 72.508712 12.100000 13.100000 73.987481 12.100000 13.200000 75.486250 12.100000 13.300000 77.005019 12.100000 13.400000 78.543788 12.100000 13.500000 80.102556 12.100000 13.600000 81.681325 12.100000 13.700000 83.280094 12.100000 13.800000 84.898863 12.100000 13.900000 86.537632 12.100000 14.000000 88.196401 12.100000 14.100000 89.875169 12.100000 14.200000 91.573938 12.100000 14.300000 93.292707 12.100000 14.400000 95.031476 12.100000 14.500000 96.790245 12.100000 14.600000 98.569014 12.100000 14.700000 100.367782 12.100000 14.800000 102.186551 12.100000 14.900000 104.025320 12.100000 15.000000 105.884089 12.200000 -5.000000 135.840831 12.200000 -4.900000 133.688647 12.200000 -4.800000 131.556463 12.200000 -4.700000 129.444280 12.200000 -4.600000 127.352096 12.200000 -4.500000 125.279912 12.200000 -4.400000 123.227728 12.200000 -4.300000 121.195544 12.200000 -4.200000 119.183360 12.200000 -4.100000 117.191176 12.200000 -4.000000 115.218993 12.200000 -3.900000 113.266809 12.200000 -3.800000 111.334625 12.200000 -3.700000 109.422441 12.200000 -3.600000 107.530257 12.200000 -3.500000 105.658073 12.200000 -3.400000 103.805889 12.200000 -3.300000 101.973706 12.200000 -3.200000 100.161522 12.200000 -3.100000 98.369338 12.200000 -3.000000 96.597154 12.200000 -2.900000 94.844970 12.200000 -2.800000 93.112786 12.200000 -2.700000 91.400602 12.200000 -2.600000 89.708419 12.200000 -2.500000 88.036235 12.200000 -2.400000 86.384051 12.200000 -2.300000 84.751867 12.200000 -2.200000 83.139683 12.200000 -2.100000 81.547499 12.200000 -2.000000 79.975315 12.200000 -1.900000 78.423132 12.200000 -1.800000 76.890948 12.200000 -1.700000 75.378764 12.200000 -1.600000 73.886580 12.200000 -1.500000 72.414396 12.200000 -1.400000 70.962212 12.200000 -1.300000 69.530028 12.200000 -1.200000 68.117845 12.200000 -1.100000 66.725661 12.200000 -1.000000 65.353477 12.200000 -0.900000 64.001293 12.200000 -0.800000 62.669109 12.200000 -0.700000 61.356925 12.200000 -0.600000 60.064741 12.200000 -0.500000 58.792558 12.200000 -0.400000 57.540374 12.200000 -0.300000 56.308190 12.200000 -0.200000 55.096006 12.200000 -0.100000 53.903822 12.200000 -0.000000 52.731638 12.200000 0.100000 51.579454 12.200000 0.200000 50.447271 12.200000 0.300000 49.335087 12.200000 0.400000 48.242903 12.200000 0.500000 47.170719 12.200000 0.600000 46.118535 12.200000 0.700000 45.086351 12.200000 0.800000 44.074167 12.200000 0.900000 43.081984 12.200000 1.000000 42.109800 12.200000 1.100000 41.157616 12.200000 1.200000 40.225432 12.200000 1.300000 39.313248 12.200000 1.400000 38.421064 12.200000 1.500000 37.548880 12.200000 1.600000 36.696697 12.200000 1.700000 35.864513 12.200000 1.800000 35.052329 12.200000 1.900000 34.260145 12.200000 2.000000 33.487961 12.200000 2.100000 32.735777 12.200000 2.200000 32.003593 12.200000 2.300000 31.291410 12.200000 2.400000 30.599226 12.200000 2.500000 29.927042 12.200000 2.600000 29.274858 12.200000 2.700000 28.642674 12.200000 2.800000 28.030490 12.200000 2.900000 27.438306 12.200000 3.000000 26.866123 12.200000 3.100000 26.313939 12.200000 3.200000 25.781755 12.200000 3.300000 25.269571 12.200000 3.400000 24.777387 12.200000 3.500000 24.305203 12.200000 3.600000 23.853019 12.200000 3.700000 23.420836 12.200000 3.800000 23.008652 12.200000 3.900000 22.616468 12.200000 4.000000 22.244284 12.200000 4.100000 21.892100 12.200000 4.200000 21.559916 12.200000 4.300000 21.247732 12.200000 4.400000 20.955549 12.200000 4.500000 20.683365 12.200000 4.600000 20.431181 12.200000 4.700000 20.198997 12.200000 4.800000 19.986813 12.200000 4.900000 19.794629 12.200000 5.000000 19.622446 12.200000 5.100000 19.470262 12.200000 5.200000 19.338078 12.200000 5.300000 19.225894 12.200000 5.400000 19.133710 12.200000 5.500000 19.061526 12.200000 5.600000 19.009342 12.200000 5.700000 18.977159 12.200000 5.800000 18.964975 12.200000 5.900000 18.972791 12.200000 6.000000 19.000607 12.200000 6.100000 19.048423 12.200000 6.200000 19.116239 12.200000 6.300000 19.204055 12.200000 6.400000 19.311872 12.200000 6.500000 19.439688 12.200000 6.600000 19.587504 12.200000 6.700000 19.755320 12.200000 6.800000 19.943136 12.200000 6.900000 20.150952 12.200000 7.000000 20.378768 12.200000 7.100000 20.626585 12.200000 7.200000 20.894401 12.200000 7.300000 21.182217 12.200000 7.400000 21.490033 12.200000 7.500000 21.817849 12.200000 7.600000 22.165665 12.200000 7.700000 22.533481 12.200000 7.800000 22.921298 12.200000 7.900000 23.329114 12.200000 8.000000 23.756930 12.200000 8.100000 24.204746 12.200000 8.200000 24.672562 12.200000 8.300000 25.160378 12.200000 8.400000 25.668194 12.200000 8.500000 26.196011 12.200000 8.600000 26.743827 12.200000 8.700000 27.311643 12.200000 8.800000 27.899459 12.200000 8.900000 28.507275 12.200000 9.000000 29.135091 12.200000 9.100000 29.782907 12.200000 9.200000 30.450724 12.200000 9.300000 31.138540 12.200000 9.400000 31.846356 12.200000 9.500000 32.574172 12.200000 9.600000 33.321988 12.200000 9.700000 34.089804 12.200000 9.800000 34.877620 12.200000 9.900000 35.685437 12.200000 10.000000 36.513253 12.200000 10.100000 37.361069 12.200000 10.200000 38.228885 12.200000 10.300000 39.116701 12.200000 10.400000 40.024517 12.200000 10.500000 40.952333 12.200000 10.600000 41.900150 12.200000 10.700000 42.867966 12.200000 10.800000 43.855782 12.200000 10.900000 44.863598 12.200000 11.000000 45.891414 12.200000 11.100000 46.939230 12.200000 11.200000 48.007046 12.200000 11.300000 49.094863 12.200000 11.400000 50.202679 12.200000 11.500000 51.330495 12.200000 11.600000 52.478311 12.200000 11.700000 53.646127 12.200000 11.800000 54.833943 12.200000 11.900000 56.041759 12.200000 12.000000 57.269576 12.200000 12.100000 58.517392 12.200000 12.200000 59.785208 12.200000 12.300000 61.073024 12.200000 12.400000 62.380840 12.200000 12.500000 63.708656 12.200000 12.600000 65.056472 12.200000 12.700000 66.424289 12.200000 12.800000 67.812105 12.200000 12.900000 69.219921 12.200000 13.000000 70.647737 12.200000 13.100000 72.095553 12.200000 13.200000 73.563369 12.200000 13.300000 75.051185 12.200000 13.400000 76.559002 12.200000 13.500000 78.086818 12.200000 13.600000 79.634634 12.200000 13.700000 81.202450 12.200000 13.800000 82.790266 12.200000 13.900000 84.398082 12.200000 14.000000 86.025898 12.200000 14.100000 87.673715 12.200000 14.200000 89.341531 12.200000 14.300000 91.029347 12.200000 14.400000 92.737163 12.200000 14.500000 94.464979 12.200000 14.600000 96.212795 12.200000 14.700000 97.980611 12.200000 14.800000 99.768428 12.200000 14.900000 101.576244 12.200000 15.000000 103.404060 12.300000 -5.000000 139.566339 12.300000 -4.900000 137.382686 12.300000 -4.800000 135.219032 12.300000 -4.700000 133.075379 12.300000 -4.600000 130.951726 12.300000 -4.500000 128.848072 12.300000 -4.400000 126.764419 12.300000 -4.300000 124.700766 12.300000 -4.200000 122.657113 12.300000 -4.100000 120.633459 12.300000 -4.000000 118.629806 12.300000 -3.900000 116.646153 12.300000 -3.800000 114.682499 12.300000 -3.700000 112.738846 12.300000 -3.600000 110.815193 12.300000 -3.500000 108.911540 12.300000 -3.400000 107.027886 12.300000 -3.300000 105.164233 12.300000 -3.200000 103.320580 12.300000 -3.100000 101.496927 12.300000 -3.000000 99.693273 12.300000 -2.900000 97.909620 12.300000 -2.800000 96.145967 12.300000 -2.700000 94.402313 12.300000 -2.600000 92.678660 12.300000 -2.500000 90.975007 12.300000 -2.400000 89.291354 12.300000 -2.300000 87.627700 12.300000 -2.200000 85.984047 12.300000 -2.100000 84.360394 12.300000 -2.000000 82.756740 12.300000 -1.900000 81.173087 12.300000 -1.800000 79.609434 12.300000 -1.700000 78.065781 12.300000 -1.600000 76.542127 12.300000 -1.500000 75.038474 12.300000 -1.400000 73.554821 12.300000 -1.300000 72.091168 12.300000 -1.200000 70.647514 12.300000 -1.100000 69.223861 12.300000 -1.000000 67.820208 12.300000 -0.900000 66.436554 12.300000 -0.800000 65.072901 12.300000 -0.700000 63.729248 12.300000 -0.600000 62.405595 12.300000 -0.500000 61.101941 12.300000 -0.400000 59.818288 12.300000 -0.300000 58.554635 12.300000 -0.200000 57.310982 12.300000 -0.100000 56.087328 12.300000 -0.000000 54.883675 12.300000 0.100000 53.700022 12.300000 0.200000 52.536368 12.300000 0.300000 51.392715 12.300000 0.400000 50.269062 12.300000 0.500000 49.165409 12.300000 0.600000 48.081755 12.300000 0.700000 47.018102 12.300000 0.800000 45.974449 12.300000 0.900000 44.950795 12.300000 1.000000 43.947142 12.300000 1.100000 42.963489 12.300000 1.200000 41.999836 12.300000 1.300000 41.056182 12.300000 1.400000 40.132529 12.300000 1.500000 39.228876 12.300000 1.600000 38.345223 12.300000 1.700000 37.481569 12.300000 1.800000 36.637916 12.300000 1.900000 35.814263 12.300000 2.000000 35.010609 12.300000 2.100000 34.226956 12.300000 2.200000 33.463303 12.300000 2.300000 32.719650 12.300000 2.400000 31.995996 12.300000 2.500000 31.292343 12.300000 2.600000 30.608690 12.300000 2.700000 29.945036 12.300000 2.800000 29.301383 12.300000 2.900000 28.677730 12.300000 3.000000 28.074077 12.300000 3.100000 27.490423 12.300000 3.200000 26.926770 12.300000 3.300000 26.383117 12.300000 3.400000 25.859464 12.300000 3.500000 25.355810 12.300000 3.600000 24.872157 12.300000 3.700000 24.408504 12.300000 3.800000 23.964850 12.300000 3.900000 23.541197 12.300000 4.000000 23.137544 12.300000 4.100000 22.753891 12.300000 4.200000 22.390237 12.300000 4.300000 22.046584 12.300000 4.400000 21.722931 12.300000 4.500000 21.419277 12.300000 4.600000 21.135624 12.300000 4.700000 20.871971 12.300000 4.800000 20.628318 12.300000 4.900000 20.404664 12.300000 5.000000 20.201011 12.300000 5.100000 20.017358 12.300000 5.200000 19.853705 12.300000 5.300000 19.710051 12.300000 5.400000 19.586398 12.300000 5.500000 19.482745 12.300000 5.600000 19.399091 12.300000 5.700000 19.335438 12.300000 5.800000 19.291785 12.300000 5.900000 19.268132 12.300000 6.000000 19.264478 12.300000 6.100000 19.280825 12.300000 6.200000 19.317172 12.300000 6.300000 19.373518 12.300000 6.400000 19.449865 12.300000 6.500000 19.546212 12.300000 6.600000 19.662559 12.300000 6.700000 19.798905 12.300000 6.800000 19.955252 12.300000 6.900000 20.131599 12.300000 7.000000 20.327946 12.300000 7.100000 20.544292 12.300000 7.200000 20.780639 12.300000 7.300000 21.036986 12.300000 7.400000 21.313332 12.300000 7.500000 21.609679 12.300000 7.600000 21.926026 12.300000 7.700000 22.262373 12.300000 7.800000 22.618719 12.300000 7.900000 22.995066 12.300000 8.000000 23.391413 12.300000 8.100000 23.807759 12.300000 8.200000 24.244106 12.300000 8.300000 24.700453 12.300000 8.400000 25.176800 12.300000 8.500000 25.673146 12.300000 8.600000 26.189493 12.300000 8.700000 26.725840 12.300000 8.800000 27.282187 12.300000 8.900000 27.858533 12.300000 9.000000 28.454880 12.300000 9.100000 29.071227 12.300000 9.200000 29.707573 12.300000 9.300000 30.363920 12.300000 9.400000 31.040267 12.300000 9.500000 31.736614 12.300000 9.600000 32.452960 12.300000 9.700000 33.189307 12.300000 9.800000 33.945654 12.300000 9.900000 34.722000 12.300000 10.000000 35.518347 12.300000 10.100000 36.334694 12.300000 10.200000 37.171041 12.300000 10.300000 38.027387 12.300000 10.400000 38.903734 12.300000 10.500000 39.800081 12.300000 10.600000 40.716428 12.300000 10.700000 41.652774 12.300000 10.800000 42.609121 12.300000 10.900000 43.585468 12.300000 11.000000 44.581814 12.300000 11.100000 45.598161 12.300000 11.200000 46.634508 12.300000 11.300000 47.690855 12.300000 11.400000 48.767201 12.300000 11.500000 49.863548 12.300000 11.600000 50.979895 12.300000 11.700000 52.116241 12.300000 11.800000 53.272588 12.300000 11.900000 54.448935 12.300000 12.000000 55.645282 12.300000 12.100000 56.861628 12.300000 12.200000 58.097975 12.300000 12.300000 59.354322 12.300000 12.400000 60.630669 12.300000 12.500000 61.927015 12.300000 12.600000 63.243362 12.300000 12.700000 64.579709 12.300000 12.800000 65.936055 12.300000 12.900000 67.312402 12.300000 13.000000 68.708749 12.300000 13.100000 70.125096 12.300000 13.200000 71.561442 12.300000 13.300000 73.017789 12.300000 13.400000 74.494136 12.300000 13.500000 75.990482 12.300000 13.600000 77.506829 12.300000 13.700000 79.043176 12.300000 13.800000 80.599523 12.300000 13.900000 82.175869 12.300000 14.000000 83.772216 12.300000 14.100000 85.388563 12.300000 14.200000 87.024910 12.300000 14.300000 88.681256 12.300000 14.400000 90.357603 12.300000 14.500000 92.053950 12.300000 14.600000 93.770296 12.300000 14.700000 95.506643 12.300000 14.800000 97.262990 12.300000 14.900000 99.039337 12.300000 15.000000 100.835683 12.400000 -5.000000 143.306302 12.400000 -4.900000 141.090663 12.400000 -4.800000 138.895023 12.400000 -4.700000 136.719384 12.400000 -4.600000 134.563744 12.400000 -4.500000 132.428105 12.400000 -4.400000 130.312465 12.400000 -4.300000 128.216826 12.400000 -4.200000 126.141187 12.400000 -4.100000 124.085547 12.400000 -4.000000 122.049908 12.400000 -3.900000 120.034268 12.400000 -3.800000 118.038629 12.400000 -3.700000 116.062989 12.400000 -3.600000 114.107350 12.400000 -3.500000 112.171711 12.400000 -3.400000 110.256071 12.400000 -3.300000 108.360432 12.400000 -3.200000 106.484792 12.400000 -3.100000 104.629153 12.400000 -3.000000 102.793513 12.400000 -2.900000 100.977874 12.400000 -2.800000 99.182235 12.400000 -2.700000 97.406595 12.400000 -2.600000 95.650956 12.400000 -2.500000 93.915316 12.400000 -2.400000 92.199677 12.400000 -2.300000 90.504037 12.400000 -2.200000 88.828398 12.400000 -2.100000 87.172758 12.400000 -2.000000 85.537119 12.400000 -1.900000 83.921480 12.400000 -1.800000 82.325840 12.400000 -1.700000 80.750201 12.400000 -1.600000 79.194561 12.400000 -1.500000 77.658922 12.400000 -1.400000 76.143282 12.400000 -1.300000 74.647643 12.400000 -1.200000 73.172004 12.400000 -1.100000 71.716364 12.400000 -1.000000 70.280725 12.400000 -0.900000 68.865085 12.400000 -0.800000 67.469446 12.400000 -0.700000 66.093806 12.400000 -0.600000 64.738167 12.400000 -0.500000 63.402527 12.400000 -0.400000 62.086888 12.400000 -0.300000 60.791249 12.400000 -0.200000 59.515609 12.400000 -0.100000 58.259970 12.400000 -0.000000 57.024330 12.400000 0.100000 55.808691 12.400000 0.200000 54.613051 12.400000 0.300000 53.437412 12.400000 0.400000 52.281773 12.400000 0.500000 51.146133 12.400000 0.600000 50.030494 12.400000 0.700000 48.934854 12.400000 0.800000 47.859215 12.400000 0.900000 46.803575 12.400000 1.000000 45.767936 12.400000 1.100000 44.752296 12.400000 1.200000 43.756657 12.400000 1.300000 42.781018 12.400000 1.400000 41.825378 12.400000 1.500000 40.889739 12.400000 1.600000 39.974099 12.400000 1.700000 39.078460 12.400000 1.800000 38.202820 12.400000 1.900000 37.347181 12.400000 2.000000 36.511542 12.400000 2.100000 35.695902 12.400000 2.200000 34.900263 12.400000 2.300000 34.124623 12.400000 2.400000 33.368984 12.400000 2.500000 32.633344 12.400000 2.600000 31.917705 12.400000 2.700000 31.222065 12.400000 2.800000 30.546426 12.400000 2.900000 29.890787 12.400000 3.000000 29.255147 12.400000 3.100000 28.639508 12.400000 3.200000 28.043868 12.400000 3.300000 27.468229 12.400000 3.400000 26.912589 12.400000 3.500000 26.376950 12.400000 3.600000 25.861311 12.400000 3.700000 25.365671 12.400000 3.800000 24.890032 12.400000 3.900000 24.434392 12.400000 4.000000 23.998753 12.400000 4.100000 23.583113 12.400000 4.200000 23.187474 12.400000 4.300000 22.811835 12.400000 4.400000 22.456195 12.400000 4.500000 22.120556 12.400000 4.600000 21.804916 12.400000 4.700000 21.509277 12.400000 4.800000 21.233637 12.400000 4.900000 20.977998 12.400000 5.000000 20.742358 12.400000 5.100000 20.526719 12.400000 5.200000 20.331080 12.400000 5.300000 20.155440 12.400000 5.400000 19.999801 12.400000 5.500000 19.864161 12.400000 5.600000 19.748522 12.400000 5.700000 19.652882 12.400000 5.800000 19.577243 12.400000 5.900000 19.521604 12.400000 6.000000 19.485964 12.400000 6.100000 19.470325 12.400000 6.200000 19.474685 12.400000 6.300000 19.499046 12.400000 6.400000 19.543406 12.400000 6.500000 19.607767 12.400000 6.600000 19.692127 12.400000 6.700000 19.796488 12.400000 6.800000 19.920849 12.400000 6.900000 20.065209 12.400000 7.000000 20.229570 12.400000 7.100000 20.413930 12.400000 7.200000 20.618291 12.400000 7.300000 20.842651 12.400000 7.400000 21.087012 12.400000 7.500000 21.351373 12.400000 7.600000 21.635733 12.400000 7.700000 21.940094 12.400000 7.800000 22.264454 12.400000 7.900000 22.608815 12.400000 8.000000 22.973175 12.400000 8.100000 23.357536 12.400000 8.200000 23.761896 12.400000 8.300000 24.186257 12.400000 8.400000 24.630618 12.400000 8.500000 25.094978 12.400000 8.600000 25.579339 12.400000 8.700000 26.083699 12.400000 8.800000 26.608060 12.400000 8.900000 27.152420 12.400000 9.000000 27.716781 12.400000 9.100000 28.301142 12.400000 9.200000 28.905502 12.400000 9.300000 29.529863 12.400000 9.400000 30.174223 12.400000 9.500000 30.838584 12.400000 9.600000 31.522944 12.400000 9.700000 32.227305 12.400000 9.800000 32.951666 12.400000 9.900000 33.696026 12.400000 10.000000 34.460387 12.400000 10.100000 35.244747 12.400000 10.200000 36.049108 12.400000 10.300000 36.873468 12.400000 10.400000 37.717829 12.400000 10.500000 38.582189 12.400000 10.600000 39.466550 12.400000 10.700000 40.370911 12.400000 10.800000 41.295271 12.400000 10.900000 42.239632 12.400000 11.000000 43.203992 12.400000 11.100000 44.188353 12.400000 11.200000 45.192713 12.400000 11.300000 46.217074 12.400000 11.400000 47.261435 12.400000 11.500000 48.325795 12.400000 11.600000 49.410156 12.400000 11.700000 50.514516 12.400000 11.800000 51.638877 12.400000 11.900000 52.783237 12.400000 12.000000 53.947598 12.400000 12.100000 55.131958 12.400000 12.200000 56.336319 12.400000 12.300000 57.560680 12.400000 12.400000 58.805040 12.400000 12.500000 60.069401 12.400000 12.600000 61.353761 12.400000 12.700000 62.658122 12.400000 12.800000 63.982482 12.400000 12.900000 65.326843 12.400000 13.000000 66.691204 12.400000 13.100000 68.075564 12.400000 13.200000 69.479925 12.400000 13.300000 70.904285 12.400000 13.400000 72.348646 12.400000 13.500000 73.813006 12.400000 13.600000 75.297367 12.400000 13.700000 76.801727 12.400000 13.800000 78.326088 12.400000 13.900000 79.870449 12.400000 14.000000 81.434809 12.400000 14.100000 83.019170 12.400000 14.200000 84.623530 12.400000 14.300000 86.247891 12.400000 14.400000 87.892251 12.400000 14.500000 89.556612 12.400000 14.600000 91.240973 12.400000 14.700000 92.945333 12.400000 14.800000 94.669694 12.400000 14.900000 96.414054 12.400000 15.000000 98.178415 12.500000 -5.000000 147.061141 12.500000 -4.900000 144.812999 12.500000 -4.800000 142.584857 12.500000 -4.700000 140.376714 12.500000 -4.600000 138.188572 12.500000 -4.500000 136.020430 12.500000 -4.400000 133.872287 12.500000 -4.300000 131.744145 12.500000 -4.200000 129.636003 12.500000 -4.100000 127.547860 12.500000 -4.000000 125.479718 12.500000 -3.900000 123.431576 12.500000 -3.800000 121.403433 12.500000 -3.700000 119.395291 12.500000 -3.600000 117.407149 12.500000 -3.500000 115.439006 12.500000 -3.400000 113.490864 12.500000 -3.300000 111.562722 12.500000 -3.200000 109.654579 12.500000 -3.100000 107.766437 12.500000 -3.000000 105.898295 12.500000 -2.900000 104.050152 12.500000 -2.800000 102.222010 12.500000 -2.700000 100.413868 12.500000 -2.600000 98.625725 12.500000 -2.500000 96.857583 12.500000 -2.400000 95.109441 12.500000 -2.300000 93.381298 12.500000 -2.200000 91.673156 12.500000 -2.100000 89.985014 12.500000 -2.000000 88.316871 12.500000 -1.900000 86.668729 12.500000 -1.800000 85.040587 12.500000 -1.700000 83.432444 12.500000 -1.600000 81.844302 12.500000 -1.500000 80.276160 12.500000 -1.400000 78.728017 12.500000 -1.300000 77.199875 12.500000 -1.200000 75.691733 12.500000 -1.100000 74.203590 12.500000 -1.000000 72.735448 12.500000 -0.900000 71.287306 12.500000 -0.800000 69.859163 12.500000 -0.700000 68.451021 12.500000 -0.600000 67.062879 12.500000 -0.500000 65.694736 12.500000 -0.400000 64.346594 12.500000 -0.300000 63.018452 12.500000 -0.200000 61.710309 12.500000 -0.100000 60.422167 12.500000 -0.000000 59.154025 12.500000 0.100000 57.905882 12.500000 0.200000 56.677740 12.500000 0.300000 55.469598 12.500000 0.400000 54.281455 12.500000 0.500000 53.113313 12.500000 0.600000 51.965171 12.500000 0.700000 50.837028 12.500000 0.800000 49.728886 12.500000 0.900000 48.640744 12.500000 1.000000 47.572601 12.500000 1.100000 46.524459 12.500000 1.200000 45.496317 12.500000 1.300000 44.488174 12.500000 1.400000 43.500032 12.500000 1.500000 42.531890 12.500000 1.600000 41.583747 12.500000 1.700000 40.655605 12.500000 1.800000 39.747463 12.500000 1.900000 38.859320 12.500000 2.000000 37.991178 12.500000 2.100000 37.143036 12.500000 2.200000 36.314893 12.500000 2.300000 35.506751 12.500000 2.400000 34.718609 12.500000 2.500000 33.950466 12.500000 2.600000 33.202324 12.500000 2.700000 32.474182 12.500000 2.800000 31.766039 12.500000 2.900000 31.077897 12.500000 3.000000 30.409755 12.500000 3.100000 29.761612 12.500000 3.200000 29.133470 12.500000 3.300000 28.525328 12.500000 3.400000 27.937185 12.500000 3.500000 27.369043 12.500000 3.600000 26.820901 12.500000 3.700000 26.292758 12.500000 3.800000 25.784616 12.500000 3.900000 25.296474 12.500000 4.000000 24.828331 12.500000 4.100000 24.380189 12.500000 4.200000 23.952047 12.500000 4.300000 23.543904 12.500000 4.400000 23.155762 12.500000 4.500000 22.787620 12.500000 4.600000 22.439477 12.500000 4.700000 22.111335 12.500000 4.800000 21.803193 12.500000 4.900000 21.515050 12.500000 5.000000 21.246908 12.500000 5.100000 20.998766 12.500000 5.200000 20.770623 12.500000 5.300000 20.562481 12.500000 5.400000 20.374339 12.500000 5.500000 20.206196 12.500000 5.600000 20.058054 12.500000 5.700000 19.929912 12.500000 5.800000 19.821769 12.500000 5.900000 19.733627 12.500000 6.000000 19.665485 12.500000 6.100000 19.617342 12.500000 6.200000 19.589200 12.500000 6.300000 19.581058 12.500000 6.400000 19.592915 12.500000 6.500000 19.624773 12.500000 6.600000 19.676631 12.500000 6.700000 19.748488 12.500000 6.800000 19.840346 12.500000 6.900000 19.952204 12.500000 7.000000 20.084061 12.500000 7.100000 20.235919 12.500000 7.200000 20.407777 12.500000 7.300000 20.599634 12.500000 7.400000 20.811492 12.500000 7.500000 21.043350 12.500000 7.600000 21.295207 12.500000 7.700000 21.567065 12.500000 7.800000 21.858923 12.500000 7.900000 22.170780 12.500000 8.000000 22.502638 12.500000 8.100000 22.854496 12.500000 8.200000 23.226353 12.500000 8.300000 23.618211 12.500000 8.400000 24.030069 12.500000 8.500000 24.461926 12.500000 8.600000 24.913784 12.500000 8.700000 25.385642 12.500000 8.800000 25.877499 12.500000 8.900000 26.389357 12.500000 9.000000 26.921215 12.500000 9.100000 27.473072 12.500000 9.200000 28.044930 12.500000 9.300000 28.636788 12.500000 9.400000 29.248645 12.500000 9.500000 29.880503 12.500000 9.600000 30.532361 12.500000 9.700000 31.204218 12.500000 9.800000 31.896076 12.500000 9.900000 32.607934 12.500000 10.000000 33.339791 12.500000 10.100000 34.091649 12.500000 10.200000 34.863507 12.500000 10.300000 35.655364 12.500000 10.400000 36.467222 12.500000 10.500000 37.299080 12.500000 10.600000 38.150937 12.500000 10.700000 39.022795 12.500000 10.800000 39.914653 12.500000 10.900000 40.826510 12.500000 11.000000 41.758368 12.500000 11.100000 42.710226 12.500000 11.200000 43.682083 12.500000 11.300000 44.673941 12.500000 11.400000 45.685799 12.500000 11.500000 46.717656 12.500000 11.600000 47.769514 12.500000 11.700000 48.841372 12.500000 11.800000 49.933229 12.500000 11.900000 51.045087 12.500000 12.000000 52.176945 12.500000 12.100000 53.328802 12.500000 12.200000 54.500660 12.500000 12.300000 55.692518 12.500000 12.400000 56.904375 12.500000 12.500000 58.136233 12.500000 12.600000 59.388091 12.500000 12.700000 60.659948 12.500000 12.800000 61.951806 12.500000 12.900000 63.263664 12.500000 13.000000 64.595521 12.500000 13.100000 65.947379 12.500000 13.200000 67.319237 12.500000 13.300000 68.711094 12.500000 13.400000 70.122952 12.500000 13.500000 71.554810 12.500000 13.600000 73.006667 12.500000 13.700000 74.478525 12.500000 13.800000 75.970383 12.500000 13.900000 77.482240 12.500000 14.000000 79.014098 12.500000 14.100000 80.565956 12.500000 14.200000 82.137813 12.500000 14.300000 83.729671 12.500000 14.400000 85.341529 12.500000 14.500000 86.973386 12.500000 14.600000 88.625244 12.500000 14.700000 90.297102 12.500000 14.800000 91.988959 12.500000 14.900000 93.700817 12.500000 15.000000 95.432675 12.600000 -5.000000 150.832263 12.600000 -4.900000 148.551101 12.600000 -4.800000 146.289939 12.600000 -4.700000 144.048777 12.600000 -4.600000 141.827615 12.600000 -4.500000 139.626453 12.600000 -4.400000 137.445291 12.600000 -4.300000 135.284129 12.600000 -4.200000 133.142967 12.600000 -4.100000 131.021805 12.600000 -4.000000 128.920643 12.600000 -3.900000 126.839481 12.600000 -3.800000 124.778319 12.600000 -3.700000 122.737157 12.600000 -3.600000 120.715995 12.600000 -3.500000 118.714833 12.600000 -3.400000 116.733671 12.600000 -3.300000 114.772509 12.600000 -3.200000 112.831347 12.600000 -3.100000 110.910185 12.600000 -3.000000 109.009023 12.600000 -2.900000 107.127861 12.600000 -2.800000 105.266699 12.600000 -2.700000 103.425537 12.600000 -2.600000 101.604375 12.600000 -2.500000 99.803213 12.600000 -2.400000 98.022051 12.600000 -2.300000 96.260889 12.600000 -2.200000 94.519727 12.600000 -2.100000 92.798566 12.600000 -2.000000 91.097404 12.600000 -1.900000 89.416242 12.600000 -1.800000 87.755080 12.600000 -1.700000 86.113918 12.600000 -1.600000 84.492756 12.600000 -1.500000 82.891594 12.600000 -1.400000 81.310432 12.600000 -1.300000 79.749270 12.600000 -1.200000 78.208108 12.600000 -1.100000 76.686946 12.600000 -1.000000 75.185784 12.600000 -0.900000 73.704622 12.600000 -0.800000 72.243460 12.600000 -0.700000 70.802298 12.600000 -0.600000 69.381136 12.600000 -0.500000 67.979974 12.600000 -0.400000 66.598812 12.600000 -0.300000 65.237650 12.600000 -0.200000 63.896488 12.600000 -0.100000 62.575326 12.600000 -0.000000 61.274164 12.600000 0.100000 59.993002 12.600000 0.200000 58.731840 12.600000 0.300000 57.490678 12.600000 0.400000 56.269516 12.600000 0.500000 55.068354 12.600000 0.600000 53.887192 12.600000 0.700000 52.726030 12.600000 0.800000 51.584868 12.600000 0.900000 50.463706 12.600000 1.000000 49.362545 12.600000 1.100000 48.281383 12.600000 1.200000 47.220221 12.600000 1.300000 46.179059 12.600000 1.400000 45.157897 12.600000 1.500000 44.156735 12.600000 1.600000 43.175573 12.600000 1.700000 42.214411 12.600000 1.800000 41.273249 12.600000 1.900000 40.352087 12.600000 2.000000 39.450925 12.600000 2.100000 38.569763 12.600000 2.200000 37.708601 12.600000 2.300000 36.867439 12.600000 2.400000 36.046277 12.600000 2.500000 35.245115 12.600000 2.600000 34.463953 12.600000 2.700000 33.702791 12.600000 2.800000 32.961629 12.600000 2.900000 32.240467 12.600000 3.000000 31.539305 12.600000 3.100000 30.858143 12.600000 3.200000 30.196981 12.600000 3.300000 29.555819 12.600000 3.400000 28.934657 12.600000 3.500000 28.333495 12.600000 3.600000 27.752333 12.600000 3.700000 27.191171 12.600000 3.800000 26.650009 12.600000 3.900000 26.128847 12.600000 4.000000 25.627685 12.600000 4.100000 25.146523 12.600000 4.200000 24.685362 12.600000 4.300000 24.244200 12.600000 4.400000 23.823038 12.600000 4.500000 23.421876 12.600000 4.600000 23.040714 12.600000 4.700000 22.679552 12.600000 4.800000 22.338390 12.600000 4.900000 22.017228 12.600000 5.000000 21.716066 12.600000 5.100000 21.434904 12.600000 5.200000 21.173742 12.600000 5.300000 20.932580 12.600000 5.400000 20.711418 12.600000 5.500000 20.510256 12.600000 5.600000 20.329094 12.600000 5.700000 20.167932 12.600000 5.800000 20.026770 12.600000 5.900000 19.905608 12.600000 6.000000 19.804446 12.600000 6.100000 19.723284 12.600000 6.200000 19.662122 12.600000 6.300000 19.620960 12.600000 6.400000 19.599798 12.600000 6.500000 19.598636 12.600000 6.600000 19.617474 12.600000 6.700000 19.656312 12.600000 6.800000 19.715150 12.600000 6.900000 19.793988 12.600000 7.000000 19.892826 12.600000 7.100000 20.011664 12.600000 7.200000 20.150502 12.600000 7.300000 20.309340 12.600000 7.400000 20.488179 12.600000 7.500000 20.687017 12.600000 7.600000 20.905855 12.600000 7.700000 21.144693 12.600000 7.800000 21.403531 12.600000 7.900000 21.682369 12.600000 8.000000 21.981207 12.600000 8.100000 22.300045 12.600000 8.200000 22.638883 12.600000 8.300000 22.997721 12.600000 8.400000 23.376559 12.600000 8.500000 23.775397 12.600000 8.600000 24.194235 12.600000 8.700000 24.633073 12.600000 8.800000 25.091911 12.600000 8.900000 25.570749 12.600000 9.000000 26.069587 12.600000 9.100000 26.588425 12.600000 9.200000 27.127263 12.600000 9.300000 27.686101 12.600000 9.400000 28.264939 12.600000 9.500000 28.863777 12.600000 9.600000 29.482615 12.600000 9.700000 30.121453 12.600000 9.800000 30.780291 12.600000 9.900000 31.459129 12.600000 10.000000 32.157967 12.600000 10.100000 32.876805 12.600000 10.200000 33.615643 12.600000 10.300000 34.374481 12.600000 10.400000 35.153319 12.600000 10.500000 35.952158 12.600000 10.600000 36.770996 12.600000 10.700000 37.609834 12.600000 10.800000 38.468672 12.600000 10.900000 39.347510 12.600000 11.000000 40.246348 12.600000 11.100000 41.165186 12.600000 11.200000 42.104024 12.600000 11.300000 43.062862 12.600000 11.400000 44.041700 12.600000 11.500000 45.040538 12.600000 11.600000 46.059376 12.600000 11.700000 47.098214 12.600000 11.800000 48.157052 12.600000 11.900000 49.235890 12.600000 12.000000 50.334728 12.600000 12.100000 51.453566 12.600000 12.200000 52.592404 12.600000 12.300000 53.751242 12.600000 12.400000 54.930080 12.600000 12.500000 56.128918 12.600000 12.600000 57.347756 12.600000 12.700000 58.586594 12.600000 12.800000 59.845432 12.600000 12.900000 61.124270 12.600000 13.000000 62.423108 12.600000 13.100000 63.741946 12.600000 13.200000 65.080784 12.600000 13.300000 66.439622 12.600000 13.400000 67.818460 12.600000 13.500000 69.217298 12.600000 13.600000 70.636136 12.600000 13.700000 72.074975 12.600000 13.800000 73.533813 12.600000 13.900000 75.012651 12.600000 14.000000 76.511489 12.600000 14.100000 78.030327 12.600000 14.200000 79.569165 12.600000 14.300000 81.128003 12.600000 14.400000 82.706841 12.600000 14.500000 84.305679 12.600000 14.600000 85.924517 12.600000 14.700000 87.563355 12.600000 14.800000 89.222193 12.600000 14.900000 90.901031 12.600000 15.000000 92.599869 12.700000 -5.000000 154.622068 12.700000 -4.900000 152.307370 12.700000 -4.800000 150.012671 12.700000 -4.700000 147.737973 12.700000 -4.600000 145.483275 12.700000 -4.500000 143.248576 12.700000 -4.400000 141.033878 12.700000 -4.300000 138.839180 12.700000 -4.200000 136.664481 12.700000 -4.100000 134.509783 12.700000 -4.000000 132.375085 12.700000 -3.900000 130.260386 12.700000 -3.800000 128.165688 12.700000 -3.700000 126.090990 12.700000 -3.600000 124.036291 12.700000 -3.500000 122.001593 12.700000 -3.400000 119.986895 12.700000 -3.300000 117.992196 12.700000 -3.200000 116.017498 12.700000 -3.100000 114.062800 12.700000 -3.000000 112.128101 12.700000 -2.900000 110.213403 12.700000 -2.800000 108.318705 12.700000 -2.700000 106.444006 12.700000 -2.600000 104.589308 12.700000 -2.500000 102.754610 12.700000 -2.400000 100.939911 12.700000 -2.300000 99.145213 12.700000 -2.200000 97.370514 12.700000 -2.100000 95.615816 12.700000 -2.000000 93.881118 12.700000 -1.900000 92.166419 12.700000 -1.800000 90.471721 12.700000 -1.700000 88.797023 12.700000 -1.600000 87.142324 12.700000 -1.500000 85.507626 12.700000 -1.400000 83.892928 12.700000 -1.300000 82.298229 12.700000 -1.200000 80.723531 12.700000 -1.100000 79.168833 12.700000 -1.000000 77.634134 12.700000 -0.900000 76.119436 12.700000 -0.800000 74.624738 12.700000 -0.700000 73.150039 12.700000 -0.600000 71.695341 12.700000 -0.500000 70.260643 12.700000 -0.400000 68.845944 12.700000 -0.300000 67.451246 12.700000 -0.200000 66.076548 12.700000 -0.100000 64.721849 12.700000 -0.000000 63.387151 12.700000 0.100000 62.072453 12.700000 0.200000 60.777754 12.700000 0.300000 59.503056 12.700000 0.400000 58.248358 12.700000 0.500000 57.013659 12.700000 0.600000 55.798961 12.700000 0.700000 54.604263 12.700000 0.800000 53.429564 12.700000 0.900000 52.274866 12.700000 1.000000 51.140168 12.700000 1.100000 50.025469 12.700000 1.200000 48.930771 12.700000 1.300000 47.856073 12.700000 1.400000 46.801374 12.700000 1.500000 45.766676 12.700000 1.600000 44.751978 12.700000 1.700000 43.757279 12.700000 1.800000 42.782581 12.700000 1.900000 41.827882 12.700000 2.000000 40.893184 12.700000 2.100000 39.978486 12.700000 2.200000 39.083787 12.700000 2.300000 38.209089 12.700000 2.400000 37.354391 12.700000 2.500000 36.519692 12.700000 2.600000 35.704994 12.700000 2.700000 34.910296 12.700000 2.800000 34.135597 12.700000 2.900000 33.380899 12.700000 3.000000 32.646201 12.700000 3.100000 31.931502 12.700000 3.200000 31.236804 12.700000 3.300000 30.562106 12.700000 3.400000 29.907407 12.700000 3.500000 29.272709 12.700000 3.600000 28.658011 12.700000 3.700000 28.063312 12.700000 3.800000 27.488614 12.700000 3.900000 26.933916 12.700000 4.000000 26.399217 12.700000 4.100000 25.884519 12.700000 4.200000 25.389821 12.700000 4.300000 24.915122 12.700000 4.400000 24.460424 12.700000 4.500000 24.025726 12.700000 4.600000 23.611027 12.700000 4.700000 23.216329 12.700000 4.800000 22.841631 12.700000 4.900000 22.486932 12.700000 5.000000 22.152234 12.700000 5.100000 21.837536 12.700000 5.200000 21.542837 12.700000 5.300000 21.268139 12.700000 5.400000 21.013441 12.700000 5.500000 20.778742 12.700000 5.600000 20.564044 12.700000 5.700000 20.369346 12.700000 5.800000 20.194647 12.700000 5.900000 20.039949 12.700000 6.000000 19.905250 12.700000 6.100000 19.790552 12.700000 6.200000 19.695854 12.700000 6.300000 19.621155 12.700000 6.400000 19.566457 12.700000 6.500000 19.531759 12.700000 6.600000 19.517060 12.700000 6.700000 19.522362 12.700000 6.800000 19.547664 12.700000 6.900000 19.592965 12.700000 7.000000 19.658267 12.700000 7.100000 19.743569 12.700000 7.200000 19.848870 12.700000 7.300000 19.974172 12.700000 7.400000 20.119474 12.700000 7.500000 20.284775 12.700000 7.600000 20.470077 12.700000 7.700000 20.675379 12.700000 7.800000 20.900680 12.700000 7.900000 21.145982 12.700000 8.000000 21.411284 12.700000 8.100000 21.696585 12.700000 8.200000 22.001887 12.700000 8.300000 22.327189 12.700000 8.400000 22.672490 12.700000 8.500000 23.037792 12.700000 8.600000 23.423094 12.700000 8.700000 23.828395 12.700000 8.800000 24.253697 12.700000 8.900000 24.698999 12.700000 9.000000 25.164300 12.700000 9.100000 25.649602 12.700000 9.200000 26.154904 12.700000 9.300000 26.680205 12.700000 9.400000 27.225507 12.700000 9.500000 27.790809 12.700000 9.600000 28.376110 12.700000 9.700000 28.981412 12.700000 9.800000 29.606714 12.700000 9.900000 30.252015 12.700000 10.000000 30.917317 12.700000 10.100000 31.602618 12.700000 10.200000 32.307920 12.700000 10.300000 33.033222 12.700000 10.400000 33.778523 12.700000 10.500000 34.543825 12.700000 10.600000 35.329127 12.700000 10.700000 36.134428 12.700000 10.800000 36.959730 12.700000 10.900000 37.805032 12.700000 11.000000 38.670333 12.700000 11.100000 39.555635 12.700000 11.200000 40.460937 12.700000 11.300000 41.386238 12.700000 11.400000 42.331540 12.700000 11.500000 43.296842 12.700000 11.600000 44.282143 12.700000 11.700000 45.287445 12.700000 11.800000 46.312747 12.700000 11.900000 47.358048 12.700000 12.000000 48.423350 12.700000 12.100000 49.508652 12.700000 12.200000 50.613953 12.700000 12.300000 51.739255 12.700000 12.400000 52.884557 12.700000 12.500000 54.049858 12.700000 12.600000 55.235160 12.700000 12.700000 56.440462 12.700000 12.800000 57.665763 12.700000 12.900000 58.911065 12.700000 13.000000 60.176367 12.700000 13.100000 61.461668 12.700000 13.200000 62.766970 12.700000 13.300000 64.092272 12.700000 13.400000 65.437573 12.700000 13.500000 66.802875 12.700000 13.600000 68.188177 12.700000 13.700000 69.593478 12.700000 13.800000 71.018780 12.700000 13.900000 72.464082 12.700000 14.000000 73.929383 12.700000 14.100000 75.414685 12.700000 14.200000 76.919986 12.700000 14.300000 78.445288 12.700000 14.400000 79.990590 12.700000 14.500000 81.555891 12.700000 14.600000 83.141193 12.700000 14.700000 84.746495 12.700000 14.800000 86.371796 12.700000 14.900000 88.017098 12.700000 15.000000 89.682400 12.800000 -5.000000 158.433958 12.800000 -4.900000 156.085207 12.800000 -4.800000 153.756455 12.800000 -4.700000 151.447704 12.800000 -4.600000 149.158952 12.800000 -4.500000 146.890201 12.800000 -4.400000 144.641450 12.800000 -4.300000 142.412698 12.800000 -4.200000 140.203947 12.800000 -4.100000 138.015195 12.800000 -4.000000 135.846444 12.800000 -3.900000 133.697692 12.800000 -3.800000 131.568941 12.800000 -3.700000 129.460189 12.800000 -3.600000 127.371438 12.800000 -3.500000 125.302686 12.800000 -3.400000 123.253935 12.800000 -3.300000 121.225184 12.800000 -3.200000 119.216432 12.800000 -3.100000 117.227681 12.800000 -3.000000 115.258929 12.800000 -2.900000 113.310178 12.800000 -2.800000 111.381426 12.800000 -2.700000 109.472675 12.800000 -2.600000 107.583923 12.800000 -2.500000 105.715172 12.800000 -2.400000 103.866420 12.800000 -2.300000 102.037669 12.800000 -2.200000 100.228918 12.800000 -2.100000 98.440166 12.800000 -2.000000 96.671415 12.800000 -1.900000 94.922663 12.800000 -1.800000 93.193912 12.800000 -1.700000 91.485160 12.800000 -1.600000 89.796409 12.800000 -1.500000 88.127657 12.800000 -1.400000 86.478906 12.800000 -1.300000 84.850155 12.800000 -1.200000 83.241403 12.800000 -1.100000 81.652652 12.800000 -1.000000 80.083900 12.800000 -0.900000 78.535149 12.800000 -0.800000 77.006397 12.800000 -0.700000 75.497646 12.800000 -0.600000 74.008894 12.800000 -0.500000 72.540143 12.800000 -0.400000 71.091391 12.800000 -0.300000 69.662640 12.800000 -0.200000 68.253889 12.800000 -0.100000 66.865137 12.800000 -0.000000 65.496386 12.800000 0.100000 64.147634 12.800000 0.200000 62.818883 12.800000 0.300000 61.510131 12.800000 0.400000 60.221380 12.800000 0.500000 58.952628 12.800000 0.600000 57.703877 12.800000 0.700000 56.475125 12.800000 0.800000 55.266374 12.800000 0.900000 54.077623 12.800000 1.000000 52.908871 12.800000 1.100000 51.760120 12.800000 1.200000 50.631368 12.800000 1.300000 49.522617 12.800000 1.400000 48.433865 12.800000 1.500000 47.365114 12.800000 1.600000 46.316362 12.800000 1.700000 45.287611 12.800000 1.800000 44.278859 12.800000 1.900000 43.290108 12.800000 2.000000 42.321357 12.800000 2.100000 41.372605 12.800000 2.200000 40.443854 12.800000 2.300000 39.535102 12.800000 2.400000 38.646351 12.800000 2.500000 37.777599 12.800000 2.600000 36.928848 12.800000 2.700000 36.100096 12.800000 2.800000 35.291345 12.800000 2.900000 34.502593 12.800000 3.000000 33.733842 12.800000 3.100000 32.985091 12.800000 3.200000 32.256339 12.800000 3.300000 31.547588 12.800000 3.400000 30.858836 12.800000 3.500000 30.190085 12.800000 3.600000 29.541333 12.800000 3.700000 28.912582 12.800000 3.800000 28.303830 12.800000 3.900000 27.715079 12.800000 4.000000 27.146328 12.800000 4.100000 26.597576 12.800000 4.200000 26.068825 12.800000 4.300000 25.560073 12.800000 4.400000 25.071322 12.800000 4.500000 24.602570 12.800000 4.600000 24.153819 12.800000 4.700000 23.725067 12.800000 4.800000 23.316316 12.800000 4.900000 22.927564 12.800000 5.000000 22.558813 12.800000 5.100000 22.210062 12.800000 5.200000 21.881310 12.800000 5.300000 21.572559 12.800000 5.400000 21.283807 12.800000 5.500000 21.015056 12.800000 5.600000 20.766304 12.800000 5.700000 20.537553 12.800000 5.800000 20.328801 12.800000 5.900000 20.140050 12.800000 6.000000 19.971298 12.800000 6.100000 19.822547 12.800000 6.200000 19.693796 12.800000 6.300000 19.585044 12.800000 6.400000 19.496293 12.800000 6.500000 19.427541 12.800000 6.600000 19.378790 12.800000 6.700000 19.350038 12.800000 6.800000 19.341287 12.800000 6.900000 19.352535 12.800000 7.000000 19.383784 12.800000 7.100000 19.435032 12.800000 7.200000 19.506281 12.800000 7.300000 19.597530 12.800000 7.400000 19.708778 12.800000 7.500000 19.840027 12.800000 7.600000 19.991275 12.800000 7.700000 20.162524 12.800000 7.800000 20.353772 12.800000 7.900000 20.565021 12.800000 8.000000 20.796269 12.800000 8.100000 21.047518 12.800000 8.200000 21.318767 12.800000 8.300000 21.610015 12.800000 8.400000 21.921264 12.800000 8.500000 22.252512 12.800000 8.600000 22.603761 12.800000 8.700000 22.975009 12.800000 8.800000 23.366258 12.800000 8.900000 23.777506 12.800000 9.000000 24.208755 12.800000 9.100000 24.660003 12.800000 9.200000 25.131252 12.800000 9.300000 25.622501 12.800000 9.400000 26.133749 12.800000 9.500000 26.664998 12.800000 9.600000 27.216246 12.800000 9.700000 27.787495 12.800000 9.800000 28.378743 12.800000 9.900000 28.989992 12.800000 10.000000 29.621240 12.800000 10.100000 30.272489 12.800000 10.200000 30.943737 12.800000 10.300000 31.634986 12.800000 10.400000 32.346235 12.800000 10.500000 33.077483 12.800000 10.600000 33.828732 12.800000 10.700000 34.599980 12.800000 10.800000 35.391229 12.800000 10.900000 36.202477 12.800000 11.000000 37.033726 12.800000 11.100000 37.884974 12.800000 11.200000 38.756223 12.800000 11.300000 39.647471 12.800000 11.400000 40.558720 12.800000 11.500000 41.489969 12.800000 11.600000 42.441217 12.800000 11.700000 43.412466 12.800000 11.800000 44.403714 12.800000 11.900000 45.414963 12.800000 12.000000 46.446211 12.800000 12.100000 47.497460 12.800000 12.200000 48.568708 12.800000 12.300000 49.659957 12.800000 12.400000 50.771206 12.800000 12.500000 51.902454 12.800000 12.600000 53.053703 12.800000 12.700000 54.224951 12.800000 12.800000 55.416200 12.800000 12.900000 56.627448 12.800000 13.000000 57.858697 12.800000 13.100000 59.109945 12.800000 13.200000 60.381194 12.800000 13.300000 61.672442 12.800000 13.400000 62.983691 12.800000 13.500000 64.314940 12.800000 13.600000 65.666188 12.800000 13.700000 67.037437 12.800000 13.800000 68.428685 12.800000 13.900000 69.839934 12.800000 14.000000 71.271182 12.800000 14.100000 72.722431 12.800000 14.200000 74.193679 12.800000 14.300000 75.684928 12.800000 14.400000 77.196176 12.800000 14.500000 78.727425 12.800000 14.600000 80.278674 12.800000 14.700000 81.849922 12.800000 14.800000 83.441171 12.800000 14.900000 85.052419 12.800000 15.000000 86.683668 12.900000 -5.000000 162.272324 12.900000 -4.900000 159.889003 12.900000 -4.800000 157.525681 12.900000 -4.700000 155.182360 12.900000 -4.600000 152.859039 12.900000 -4.500000 150.555717 12.900000 -4.400000 148.272396 12.900000 -4.300000 146.009075 12.900000 -4.200000 143.765753 12.900000 -4.100000 141.542432 12.900000 -4.000000 139.339111 12.900000 -3.900000 137.155790 12.900000 -3.800000 134.992468 12.900000 -3.700000 132.849147 12.900000 -3.600000 130.725826 12.900000 -3.500000 128.622504 12.900000 -3.400000 126.539183 12.900000 -3.300000 124.475862 12.900000 -3.200000 122.432540 12.900000 -3.100000 120.409219 12.900000 -3.000000 118.405898 12.900000 -2.900000 116.422576 12.900000 -2.800000 114.459255 12.900000 -2.700000 112.515934 12.900000 -2.600000 110.592613 12.900000 -2.500000 108.689291 12.900000 -2.400000 106.805970 12.900000 -2.300000 104.942649 12.900000 -2.200000 103.099327 12.900000 -2.100000 101.276006 12.900000 -2.000000 99.472685 12.900000 -1.900000 97.689363 12.900000 -1.800000 95.926042 12.900000 -1.700000 94.182721 12.900000 -1.600000 92.459400 12.900000 -1.500000 90.756078 12.900000 -1.400000 89.072757 12.900000 -1.300000 87.409436 12.900000 -1.200000 85.766114 12.900000 -1.100000 84.142793 12.900000 -1.000000 82.539472 12.900000 -0.900000 80.956150 12.900000 -0.800000 79.392829 12.900000 -0.700000 77.849508 12.900000 -0.600000 76.326187 12.900000 -0.500000 74.822865 12.900000 -0.400000 73.339544 12.900000 -0.300000 71.876223 12.900000 -0.200000 70.432901 12.900000 -0.100000 69.009580 12.900000 -0.000000 67.606259 12.900000 0.100000 66.222937 12.900000 0.200000 64.859616 12.900000 0.300000 63.516295 12.900000 0.400000 62.192974 12.900000 0.500000 60.889652 12.900000 0.600000 59.606331 12.900000 0.700000 58.343010 12.900000 0.800000 57.099688 12.900000 0.900000 55.876367 12.900000 1.000000 54.673046 12.900000 1.100000 53.489724 12.900000 1.200000 52.326403 12.900000 1.300000 51.183082 12.900000 1.400000 50.059761 12.900000 1.500000 48.956439 12.900000 1.600000 47.873118 12.900000 1.700000 46.809797 12.900000 1.800000 45.766475 12.900000 1.900000 44.743154 12.900000 2.000000 43.739833 12.900000 2.100000 42.756511 12.900000 2.200000 41.793190 12.900000 2.300000 40.849869 12.900000 2.400000 39.926548 12.900000 2.500000 39.023226 12.900000 2.600000 38.139905 12.900000 2.700000 37.276584 12.900000 2.800000 36.433262 12.900000 2.900000 35.609941 12.900000 3.000000 34.806620 12.900000 3.100000 34.023298 12.900000 3.200000 33.259977 12.900000 3.300000 32.516656 12.900000 3.400000 31.793334 12.900000 3.500000 31.090013 12.900000 3.600000 30.406692 12.900000 3.700000 29.743371 12.900000 3.800000 29.100049 12.900000 3.900000 28.476728 12.900000 4.000000 27.873407 12.900000 4.100000 27.290085 12.900000 4.200000 26.726764 12.900000 4.300000 26.183443 12.900000 4.400000 25.660121 12.900000 4.500000 25.156800 12.900000 4.600000 24.673479 12.900000 4.700000 24.210158 12.900000 4.800000 23.766836 12.900000 4.900000 23.343515 12.900000 5.000000 22.940194 12.900000 5.100000 22.556872 12.900000 5.200000 22.193551 12.900000 5.300000 21.850230 12.900000 5.400000 21.526908 12.900000 5.500000 21.223587 12.900000 5.600000 20.940266 12.900000 5.700000 20.676945 12.900000 5.800000 20.433623 12.900000 5.900000 20.210302 12.900000 6.000000 20.006981 12.900000 6.100000 19.823659 12.900000 6.200000 19.660338 12.900000 6.300000 19.517017 12.900000 6.400000 19.393695 12.900000 6.500000 19.290374 12.900000 6.600000 19.207053 12.900000 6.700000 19.143732 12.900000 6.800000 19.100410 12.900000 6.900000 19.077089 12.900000 7.000000 19.073768 12.900000 7.100000 19.090446 12.900000 7.200000 19.127125 12.900000 7.300000 19.183804 12.900000 7.400000 19.260482 12.900000 7.500000 19.357161 12.900000 7.600000 19.473840 12.900000 7.700000 19.610519 12.900000 7.800000 19.767197 12.900000 7.900000 19.943876 12.900000 8.000000 20.140555 12.900000 8.100000 20.357233 12.900000 8.200000 20.593912 12.900000 8.300000 20.850591 12.900000 8.400000 21.127269 12.900000 8.500000 21.423948 12.900000 8.600000 21.740627 12.900000 8.700000 22.077306 12.900000 8.800000 22.433984 12.900000 8.900000 22.810663 12.900000 9.000000 23.207342 12.900000 9.100000 23.624020 12.900000 9.200000 24.060699 12.900000 9.300000 24.517378 12.900000 9.400000 24.994056 12.900000 9.500000 25.490735 12.900000 9.600000 26.007414 12.900000 9.700000 26.544093 12.900000 9.800000 27.100771 12.900000 9.900000 27.677450 12.900000 10.000000 28.274129 12.900000 10.100000 28.890807 12.900000 10.200000 29.527486 12.900000 10.300000 30.184165 12.900000 10.400000 30.860843 12.900000 10.500000 31.557522 12.900000 10.600000 32.274201 12.900000 10.700000 33.010879 12.900000 10.800000 33.767558 12.900000 10.900000 34.544237 12.900000 11.000000 35.340916 12.900000 11.100000 36.157594 12.900000 11.200000 36.994273 12.900000 11.300000 37.850952 12.900000 11.400000 38.727630 12.900000 11.500000 39.624309 12.900000 11.600000 40.540988 12.900000 11.700000 41.477666 12.900000 11.800000 42.434345 12.900000 11.900000 43.411024 12.900000 12.000000 44.407703 12.900000 12.100000 45.424381 12.900000 12.200000 46.461060 12.900000 12.300000 47.517739 12.900000 12.400000 48.594417 12.900000 12.500000 49.691096 12.900000 12.600000 50.807775 12.900000 12.700000 51.944453 12.900000 12.800000 53.101132 12.900000 12.900000 54.277811 12.900000 13.000000 55.474490 12.900000 13.100000 56.691168 12.900000 13.200000 57.927847 12.900000 13.300000 59.184526 12.900000 13.400000 60.461204 12.900000 13.500000 61.757883 12.900000 13.600000 63.074562 12.900000 13.700000 64.411240 12.900000 13.800000 65.767919 12.900000 13.900000 67.144598 12.900000 14.000000 68.541277 12.900000 14.100000 69.957955 12.900000 14.200000 71.394634 12.900000 14.300000 72.851313 12.900000 14.400000 74.327991 12.900000 14.500000 75.824670 12.900000 14.600000 77.341349 12.900000 14.700000 78.878027 12.900000 14.800000 80.434706 12.900000 14.900000 82.011385 12.900000 15.000000 83.608064 13.000000 -5.000000 166.142528 13.000000 -4.900000 163.724120 13.000000 -4.800000 161.325712 13.000000 -4.700000 158.947304 13.000000 -4.600000 156.588897 13.000000 -4.500000 154.250489 13.000000 -4.400000 151.932081 13.000000 -4.300000 149.633673 13.000000 -4.200000 147.355265 13.000000 -4.100000 145.096857 13.000000 -4.000000 142.858449 13.000000 -3.900000 140.640041 13.000000 -3.800000 138.441633 13.000000 -3.700000 136.263226 13.000000 -3.600000 134.104818 13.000000 -3.500000 131.966410 13.000000 -3.400000 129.848002 13.000000 -3.300000 127.749594 13.000000 -3.200000 125.671186 13.000000 -3.100000 123.612778 13.000000 -3.000000 121.574370 13.000000 -2.900000 119.555962 13.000000 -2.800000 117.557555 13.000000 -2.700000 115.579147 13.000000 -2.600000 113.620739 13.000000 -2.500000 111.682331 13.000000 -2.400000 109.763923 13.000000 -2.300000 107.865515 13.000000 -2.200000 105.987107 13.000000 -2.100000 104.128699 13.000000 -2.000000 102.290291 13.000000 -1.900000 100.471884 13.000000 -1.800000 98.673476 13.000000 -1.700000 96.895068 13.000000 -1.600000 95.136660 13.000000 -1.500000 93.398252 13.000000 -1.400000 91.679844 13.000000 -1.300000 89.981436 13.000000 -1.200000 88.303028 13.000000 -1.100000 86.644620 13.000000 -1.000000 85.006213 13.000000 -0.900000 83.387805 13.000000 -0.800000 81.789397 13.000000 -0.700000 80.210989 13.000000 -0.600000 78.652581 13.000000 -0.500000 77.114173 13.000000 -0.400000 75.595765 13.000000 -0.300000 74.097357 13.000000 -0.200000 72.618949 13.000000 -0.100000 71.160542 13.000000 -0.000000 69.722134 13.000000 0.100000 68.303726 13.000000 0.200000 66.905318 13.000000 0.300000 65.526910 13.000000 0.400000 64.168502 13.000000 0.500000 62.830094 13.000000 0.600000 61.511686 13.000000 0.700000 60.213278 13.000000 0.800000 58.934871 13.000000 0.900000 57.676463 13.000000 1.000000 56.438055 13.000000 1.100000 55.219647 13.000000 1.200000 54.021239 13.000000 1.300000 52.842831 13.000000 1.400000 51.684423 13.000000 1.500000 50.546015 13.000000 1.600000 49.427607 13.000000 1.700000 48.329200 13.000000 1.800000 47.250792 13.000000 1.900000 46.192384 13.000000 2.000000 45.153976 13.000000 2.100000 44.135568 13.000000 2.200000 43.137160 13.000000 2.300000 42.158752 13.000000 2.400000 41.200344 13.000000 2.500000 40.261936 13.000000 2.600000 39.343529 13.000000 2.700000 38.445121 13.000000 2.800000 37.566713 13.000000 2.900000 36.708305 13.000000 3.000000 35.869897 13.000000 3.100000 35.051489 13.000000 3.200000 34.253081 13.000000 3.300000 33.474673 13.000000 3.400000 32.716265 13.000000 3.500000 31.977858 13.000000 3.600000 31.259450 13.000000 3.700000 30.561042 13.000000 3.800000 29.882634 13.000000 3.900000 29.224226 13.000000 4.000000 28.585818 13.000000 4.100000 27.967410 13.000000 4.200000 27.369002 13.000000 4.300000 26.790594 13.000000 4.400000 26.232187 13.000000 4.500000 25.693779 13.000000 4.600000 25.175371 13.000000 4.700000 24.676963 13.000000 4.800000 24.198555 13.000000 4.900000 23.740147 13.000000 5.000000 23.301739 13.000000 5.100000 22.883331 13.000000 5.200000 22.484923 13.000000 5.300000 22.106516 13.000000 5.400000 21.748108 13.000000 5.500000 21.409700 13.000000 5.600000 21.091292 13.000000 5.700000 20.792884 13.000000 5.800000 20.514476 13.000000 5.900000 20.256068 13.000000 6.000000 20.017660 13.000000 6.100000 19.799252 13.000000 6.200000 19.600845 13.000000 6.300000 19.422437 13.000000 6.400000 19.264029 13.000000 6.500000 19.125621 13.000000 6.600000 19.007213 13.000000 6.700000 18.908805 13.000000 6.800000 18.830397 13.000000 6.900000 18.771989 13.000000 7.000000 18.733581 13.000000 7.100000 18.715174 13.000000 7.200000 18.716766 13.000000 7.300000 18.738358 13.000000 7.400000 18.779950 13.000000 7.500000 18.841542 13.000000 7.600000 18.923134 13.000000 7.700000 19.024726 13.000000 7.800000 19.146318 13.000000 7.900000 19.287910 13.000000 8.000000 19.449503 13.000000 8.100000 19.631095 13.000000 8.200000 19.832687 13.000000 8.300000 20.054279 13.000000 8.400000 20.295871 13.000000 8.500000 20.557463 13.000000 8.600000 20.839055 13.000000 8.700000 21.140647 13.000000 8.800000 21.462239 13.000000 8.900000 21.803832 13.000000 9.000000 22.165424 13.000000 9.100000 22.547016 13.000000 9.200000 22.948608 13.000000 9.300000 23.370200 13.000000 9.400000 23.811792 13.000000 9.500000 24.273384 13.000000 9.600000 24.754976 13.000000 9.700000 25.256568 13.000000 9.800000 25.778161 13.000000 9.900000 26.319753 13.000000 10.000000 26.881345 13.000000 10.100000 27.462937 13.000000 10.200000 28.064529 13.000000 10.300000 28.686121 13.000000 10.400000 29.327713 13.000000 10.500000 29.989305 13.000000 10.600000 30.670897 13.000000 10.700000 31.372490 13.000000 10.800000 32.094082 13.000000 10.900000 32.835674 13.000000 11.000000 33.597266 13.000000 11.100000 34.378858 13.000000 11.200000 35.180450 13.000000 11.300000 36.002042 13.000000 11.400000 36.843634 13.000000 11.500000 37.705226 13.000000 11.600000 38.586819 13.000000 11.700000 39.488411 13.000000 11.800000 40.410003 13.000000 11.900000 41.351595 13.000000 12.000000 42.313187 13.000000 12.100000 43.294779 13.000000 12.200000 44.296371 13.000000 12.300000 45.317963 13.000000 12.400000 46.359555 13.000000 12.500000 47.421148 13.000000 12.600000 48.502740 13.000000 12.700000 49.604332 13.000000 12.800000 50.725924 13.000000 12.900000 51.867516 13.000000 13.000000 53.029108 13.000000 13.100000 54.210700 13.000000 13.200000 55.412292 13.000000 13.300000 56.633884 13.000000 13.400000 57.875477 13.000000 13.500000 59.137069 13.000000 13.600000 60.418661 13.000000 13.700000 61.720253 13.000000 13.800000 63.041845 13.000000 13.900000 64.383437 13.000000 14.000000 65.745029 13.000000 14.100000 67.126621 13.000000 14.200000 68.528213 13.000000 14.300000 69.949806 13.000000 14.400000 71.391398 13.000000 14.500000 72.852990 13.000000 14.600000 74.334582 13.000000 14.700000 75.836174 13.000000 14.800000 77.357766 13.000000 14.900000 78.899358 13.000000 15.000000 80.460950 13.100000 -5.000000 170.050880 13.100000 -4.900000 167.596869 13.100000 -4.800000 165.162858 13.100000 -4.700000 162.748846 13.100000 -4.600000 160.354835 13.100000 -4.500000 157.980824 13.100000 -4.400000 155.626813 13.100000 -4.300000 153.292801 13.100000 -4.200000 150.978790 13.100000 -4.100000 148.684779 13.100000 -4.000000 146.410768 13.100000 -3.900000 144.156757 13.100000 -3.800000 141.922745 13.100000 -3.700000 139.708734 13.100000 -3.600000 137.514723 13.100000 -3.500000 135.340712 13.100000 -3.400000 133.186701 13.100000 -3.300000 131.052689 13.100000 -3.200000 128.938678 13.100000 -3.100000 126.844667 13.100000 -3.000000 124.770656 13.100000 -2.900000 122.716644 13.100000 -2.800000 120.682633 13.100000 -2.700000 118.668622 13.100000 -2.600000 116.674611 13.100000 -2.500000 114.700600 13.100000 -2.400000 112.746588 13.100000 -2.300000 110.812577 13.100000 -2.200000 108.898566 13.100000 -2.100000 107.004555 13.100000 -2.000000 105.130544 13.100000 -1.900000 103.276532 13.100000 -1.800000 101.442521 13.100000 -1.700000 99.628510 13.100000 -1.600000 97.834499 13.100000 -1.500000 96.060487 13.100000 -1.400000 94.306476 13.100000 -1.300000 92.572465 13.100000 -1.200000 90.858454 13.100000 -1.100000 89.164443 13.100000 -1.000000 87.490431 13.100000 -0.900000 85.836420 13.100000 -0.800000 84.202409 13.100000 -0.700000 82.588398 13.100000 -0.600000 80.994387 13.100000 -0.500000 79.420375 13.100000 -0.400000 77.866364 13.100000 -0.300000 76.332353 13.100000 -0.200000 74.818342 13.100000 -0.100000 73.324331 13.100000 -0.000000 71.850319 13.100000 0.100000 70.396308 13.100000 0.200000 68.962297 13.100000 0.300000 67.548286 13.100000 0.400000 66.154274 13.100000 0.500000 64.780263 13.100000 0.600000 63.426252 13.100000 0.700000 62.092241 13.100000 0.800000 60.778230 13.100000 0.900000 59.484218 13.100000 1.000000 58.210207 13.100000 1.100000 56.956196 13.100000 1.200000 55.722185 13.100000 1.300000 54.508174 13.100000 1.400000 53.314162 13.100000 1.500000 52.140151 13.100000 1.600000 50.986140 13.100000 1.700000 49.852129 13.100000 1.800000 48.738117 13.100000 1.900000 47.644106 13.100000 2.000000 46.570095 13.100000 2.100000 45.516084 13.100000 2.200000 44.482073 13.100000 2.300000 43.468061 13.100000 2.400000 42.474050 13.100000 2.500000 41.500039 13.100000 2.600000 40.546028 13.100000 2.700000 39.612017 13.100000 2.800000 38.698005 13.100000 2.900000 37.803994 13.100000 3.000000 36.929983 13.100000 3.100000 36.075972 13.100000 3.200000 35.241960 13.100000 3.300000 34.427949 13.100000 3.400000 33.633938 13.100000 3.500000 32.859927 13.100000 3.600000 32.105916 13.100000 3.700000 31.371904 13.100000 3.800000 30.657893 13.100000 3.900000 29.963882 13.100000 4.000000 29.289871 13.100000 4.100000 28.635860 13.100000 4.200000 28.001848 13.100000 4.300000 27.387837 13.100000 4.400000 26.793826 13.100000 4.500000 26.219815 13.100000 4.600000 25.665803 13.100000 4.700000 25.131792 13.100000 4.800000 24.617781 13.100000 4.900000 24.123770 13.100000 5.000000 23.649759 13.100000 5.100000 23.195747 13.100000 5.200000 22.761736 13.100000 5.300000 22.347725 13.100000 5.400000 21.953714 13.100000 5.500000 21.579703 13.100000 5.600000 21.225691 13.100000 5.700000 20.891680 13.100000 5.800000 20.577669 13.100000 5.900000 20.283658 13.100000 6.000000 20.009646 13.100000 6.100000 19.755635 13.100000 6.200000 19.521624 13.100000 6.300000 19.307613 13.100000 6.400000 19.113602 13.100000 6.500000 18.939590 13.100000 6.600000 18.785579 13.100000 6.700000 18.651568 13.100000 6.800000 18.537557 13.100000 6.900000 18.443546 13.100000 7.000000 18.369534 13.100000 7.100000 18.315523 13.100000 7.200000 18.281512 13.100000 7.300000 18.267501 13.100000 7.400000 18.273489 13.100000 7.500000 18.299478 13.100000 7.600000 18.345467 13.100000 7.700000 18.411456 13.100000 7.800000 18.497445 13.100000 7.900000 18.603433 13.100000 8.000000 18.729422 13.100000 8.100000 18.875411 13.100000 8.200000 19.041400 13.100000 8.300000 19.227389 13.100000 8.400000 19.433377 13.100000 8.500000 19.659366 13.100000 8.600000 19.905355 13.100000 8.700000 20.171344 13.100000 8.800000 20.457332 13.100000 8.900000 20.763321 13.100000 9.000000 21.089310 13.100000 9.100000 21.435299 13.100000 9.200000 21.801288 13.100000 9.300000 22.187276 13.100000 9.400000 22.593265 13.100000 9.500000 23.019254 13.100000 9.600000 23.465243 13.100000 9.700000 23.931232 13.100000 9.800000 24.417220 13.100000 9.900000 24.923209 13.100000 10.000000 25.449198 13.100000 10.100000 25.995187 13.100000 10.200000 26.561175 13.100000 10.300000 27.147164 13.100000 10.400000 27.753153 13.100000 10.500000 28.379142 13.100000 10.600000 29.025131 13.100000 10.700000 29.691119 13.100000 10.800000 30.377108 13.100000 10.900000 31.083097 13.100000 11.000000 31.809086 13.100000 11.100000 32.555075 13.100000 11.200000 33.321063 13.100000 11.300000 34.107052 13.100000 11.400000 34.913041 13.100000 11.500000 35.739030 13.100000 11.600000 36.585018 13.100000 11.700000 37.451007 13.100000 11.800000 38.336996 13.100000 11.900000 39.242985 13.100000 12.000000 40.168974 13.100000 12.100000 41.114962 13.100000 12.200000 42.080951 13.100000 12.300000 43.066940 13.100000 12.400000 44.072929 13.100000 12.500000 45.098918 13.100000 12.600000 46.144906 13.100000 12.700000 47.210895 13.100000 12.800000 48.296884 13.100000 12.900000 49.402873 13.100000 13.000000 50.528861 13.100000 13.100000 51.674850 13.100000 13.200000 52.840839 13.100000 13.300000 54.026828 13.100000 13.400000 55.232817 13.100000 13.500000 56.458805 13.100000 13.600000 57.704794 13.100000 13.700000 58.970783 13.100000 13.800000 60.256772 13.100000 13.900000 61.562761 13.100000 14.000000 62.888749 13.100000 14.100000 64.234738 13.100000 14.200000 65.600727 13.100000 14.300000 66.986716 13.100000 14.400000 68.392704 13.100000 14.500000 69.818693 13.100000 14.600000 71.264682 13.100000 14.700000 72.730671 13.100000 14.800000 74.216660 13.100000 14.900000 75.722648 13.100000 15.000000 77.248637 13.200000 -5.000000 174.004599 13.200000 -4.900000 171.514467 13.200000 -4.800000 169.044336 13.200000 -4.700000 166.594205 13.200000 -4.600000 164.164073 13.200000 -4.500000 161.753942 13.200000 -4.400000 159.363811 13.200000 -4.300000 156.993680 13.200000 -4.200000 154.643548 13.200000 -4.100000 152.313417 13.200000 -4.000000 150.003286 13.200000 -3.900000 147.713155 13.200000 -3.800000 145.443023 13.200000 -3.700000 143.192892 13.200000 -3.600000 140.962761 13.200000 -3.500000 138.752629 13.200000 -3.400000 136.562498 13.200000 -3.300000 134.392367 13.200000 -3.200000 132.242236 13.200000 -3.100000 130.112104 13.200000 -3.000000 128.001973 13.200000 -2.900000 125.911842 13.200000 -2.800000 123.841711 13.200000 -2.700000 121.791579 13.200000 -2.600000 119.761448 13.200000 -2.500000 117.751317 13.200000 -2.400000 115.761185 13.200000 -2.300000 113.791054 13.200000 -2.200000 111.840923 13.200000 -2.100000 109.910792 13.200000 -2.000000 108.000660 13.200000 -1.900000 106.110529 13.200000 -1.800000 104.240398 13.200000 -1.700000 102.390266 13.200000 -1.600000 100.560135 13.200000 -1.500000 98.750004 13.200000 -1.400000 96.959873 13.200000 -1.300000 95.189741 13.200000 -1.200000 93.439610 13.200000 -1.100000 91.709479 13.200000 -1.000000 89.999348 13.200000 -0.900000 88.309216 13.200000 -0.800000 86.639085 13.200000 -0.700000 84.988954 13.200000 -0.600000 83.358822 13.200000 -0.500000 81.748691 13.200000 -0.400000 80.158560 13.200000 -0.300000 78.588429 13.200000 -0.200000 77.038297 13.200000 -0.100000 75.508166 13.200000 -0.000000 73.998035 13.200000 0.100000 72.507903 13.200000 0.200000 71.037772 13.200000 0.300000 69.587641 13.200000 0.400000 68.157510 13.200000 0.500000 66.747378 13.200000 0.600000 65.357247 13.200000 0.700000 63.987116 13.200000 0.800000 62.636985 13.200000 0.900000 61.306853 13.200000 1.000000 59.996722 13.200000 1.100000 58.706591 13.200000 1.200000 57.436459 13.200000 1.300000 56.186328 13.200000 1.400000 54.956197 13.200000 1.500000 53.746066 13.200000 1.600000 52.555934 13.200000 1.700000 51.385803 13.200000 1.800000 50.235672 13.200000 1.900000 49.105540 13.200000 2.000000 47.995409 13.200000 2.100000 46.905278 13.200000 2.200000 45.835147 13.200000 2.300000 44.785015 13.200000 2.400000 43.754884 13.200000 2.500000 42.744753 13.200000 2.600000 41.754622 13.200000 2.700000 40.784490 13.200000 2.800000 39.834359 13.200000 2.900000 38.904228 13.200000 3.000000 37.994096 13.200000 3.100000 37.103965 13.200000 3.200000 36.233834 13.200000 3.300000 35.383703 13.200000 3.400000 34.553571 13.200000 3.500000 33.743440 13.200000 3.600000 32.953309 13.200000 3.700000 32.183177 13.200000 3.800000 31.433046 13.200000 3.900000 30.702915 13.200000 4.000000 29.992784 13.200000 4.100000 29.302652 13.200000 4.200000 28.632521 13.200000 4.300000 27.982390 13.200000 4.400000 27.352259 13.200000 4.500000 26.742127 13.200000 4.600000 26.151996 13.200000 4.700000 25.581865 13.200000 4.800000 25.031733 13.200000 4.900000 24.501602 13.200000 5.000000 23.991471 13.200000 5.100000 23.501340 13.200000 5.200000 23.031208 13.200000 5.300000 22.581077 13.200000 5.400000 22.150946 13.200000 5.500000 21.740815 13.200000 5.600000 21.350683 13.200000 5.700000 20.980552 13.200000 5.800000 20.630421 13.200000 5.900000 20.300289 13.200000 6.000000 19.990158 13.200000 6.100000 19.700027 13.200000 6.200000 19.429896 13.200000 6.300000 19.179764 13.200000 6.400000 18.949633 13.200000 6.500000 18.739502 13.200000 6.600000 18.549370 13.200000 6.700000 18.379239 13.200000 6.800000 18.229108 13.200000 6.900000 18.098977 13.200000 7.000000 17.988845 13.200000 7.100000 17.898714 13.200000 7.200000 17.828583 13.200000 7.300000 17.778452 13.200000 7.400000 17.748320 13.200000 7.500000 17.738189 13.200000 7.600000 17.748058 13.200000 7.700000 17.777926 13.200000 7.800000 17.827795 13.200000 7.900000 17.897664 13.200000 8.000000 17.987533 13.200000 8.100000 18.097401 13.200000 8.200000 18.227270 13.200000 8.300000 18.377139 13.200000 8.400000 18.547007 13.200000 8.500000 18.736876 13.200000 8.600000 18.946745 13.200000 8.700000 19.176614 13.200000 8.800000 19.426482 13.200000 8.900000 19.696351 13.200000 9.000000 19.986220 13.200000 9.100000 20.296089 13.200000 9.200000 20.625957 13.200000 9.300000 20.975826 13.200000 9.400000 21.345695 13.200000 9.500000 21.735563 13.200000 9.600000 22.145432 13.200000 9.700000 22.575301 13.200000 9.800000 23.025170 13.200000 9.900000 23.495038 13.200000 10.000000 23.984907 13.200000 10.100000 24.494776 13.200000 10.200000 25.024644 13.200000 10.300000 25.574513 13.200000 10.400000 26.144382 13.200000 10.500000 26.734251 13.200000 10.600000 27.344119 13.200000 10.700000 27.973988 13.200000 10.800000 28.623857 13.200000 10.900000 29.293726 13.200000 11.000000 29.983594 13.200000 11.100000 30.693463 13.200000 11.200000 31.423332 13.200000 11.300000 32.173200 13.200000 11.400000 32.943069 13.200000 11.500000 33.732938 13.200000 11.600000 34.542807 13.200000 11.700000 35.372675 13.200000 11.800000 36.222544 13.200000 11.900000 37.092413 13.200000 12.000000 37.982282 13.200000 12.100000 38.892150 13.200000 12.200000 39.822019 13.200000 12.300000 40.771888 13.200000 12.400000 41.741756 13.200000 12.500000 42.731625 13.200000 12.600000 43.741494 13.200000 12.700000 44.771363 13.200000 12.800000 45.821231 13.200000 12.900000 46.891100 13.200000 13.000000 47.980969 13.200000 13.100000 49.090837 13.200000 13.200000 50.220706 13.200000 13.300000 51.370575 13.200000 13.400000 52.540444 13.200000 13.500000 53.730312 13.200000 13.600000 54.940181 13.200000 13.700000 56.170050 13.200000 13.800000 57.419919 13.200000 13.900000 58.689787 13.200000 14.000000 59.979656 13.200000 14.100000 61.289525 13.200000 14.200000 62.619393 13.200000 14.300000 63.969262 13.200000 14.400000 65.339131 13.200000 14.500000 66.729000 13.200000 14.600000 68.138868 13.200000 14.700000 69.568737 13.200000 14.800000 71.018606 13.200000 14.900000 72.488474 13.200000 15.000000 73.978343 13.300000 -5.000000 178.011768 13.300000 -4.900000 175.485000 13.300000 -4.800000 172.978232 13.300000 -4.700000 170.491464 13.300000 -4.600000 168.024696 13.300000 -4.500000 165.577928 13.300000 -4.400000 163.151160 13.300000 -4.300000 160.744392 13.300000 -4.200000 158.357624 13.300000 -4.100000 155.990856 13.300000 -4.000000 153.644088 13.300000 -3.900000 151.317319 13.300000 -3.800000 149.010551 13.300000 -3.700000 146.723783 13.300000 -3.600000 144.457015 13.300000 -3.500000 142.210247 13.300000 -3.400000 139.983479 13.300000 -3.300000 137.776711 13.300000 -3.200000 135.589943 13.300000 -3.100000 133.423175 13.300000 -3.000000 131.276407 13.300000 -2.900000 129.149639 13.300000 -2.800000 127.042871 13.300000 -2.700000 124.956102 13.300000 -2.600000 122.889334 13.300000 -2.500000 120.842566 13.300000 -2.400000 118.815798 13.300000 -2.300000 116.809030 13.300000 -2.200000 114.822262 13.300000 -2.100000 112.855494 13.300000 -2.000000 110.908726 13.300000 -1.900000 108.981958 13.300000 -1.800000 107.075190 13.300000 -1.700000 105.188422 13.300000 -1.600000 103.321654 13.300000 -1.500000 101.474886 13.300000 -1.400000 99.648117 13.300000 -1.300000 97.841349 13.300000 -1.200000 96.054581 13.300000 -1.100000 94.287813 13.300000 -1.000000 92.541045 13.300000 -0.900000 90.814277 13.300000 -0.800000 89.107509 13.300000 -0.700000 87.420741 13.300000 -0.600000 85.753973 13.300000 -0.500000 84.107205 13.300000 -0.400000 82.480437 13.300000 -0.300000 80.873669 13.300000 -0.200000 79.286901 13.300000 -0.100000 77.720132 13.300000 -0.000000 76.173364 13.300000 0.100000 74.646596 13.300000 0.200000 73.139828 13.300000 0.300000 71.653060 13.300000 0.400000 70.186292 13.300000 0.500000 68.739524 13.300000 0.600000 67.312756 13.300000 0.700000 65.905988 13.300000 0.800000 64.519220 13.300000 0.900000 63.152452 13.300000 1.000000 61.805684 13.300000 1.100000 60.478916 13.300000 1.200000 59.172147 13.300000 1.300000 57.885379 13.300000 1.400000 56.618611 13.300000 1.500000 55.371843 13.300000 1.600000 54.145075 13.300000 1.700000 52.938307 13.300000 1.800000 51.751539 13.300000 1.900000 50.584771 13.300000 2.000000 49.438003 13.300000 2.100000 48.311235 13.300000 2.200000 47.204467 13.300000 2.300000 46.117699 13.300000 2.400000 45.050931 13.300000 2.500000 44.004162 13.300000 2.600000 42.977394 13.300000 2.700000 41.970626 13.300000 2.800000 40.983858 13.300000 2.900000 40.017090 13.300000 3.000000 39.070322 13.300000 3.100000 38.143554 13.300000 3.200000 37.236786 13.300000 3.300000 36.350018 13.300000 3.400000 35.483250 13.300000 3.500000 34.636482 13.300000 3.600000 33.809714 13.300000 3.700000 33.002945 13.300000 3.800000 32.216177 13.300000 3.900000 31.449409 13.300000 4.000000 30.702641 13.300000 4.100000 29.975873 13.300000 4.200000 29.269105 13.300000 4.300000 28.582337 13.300000 4.400000 27.915569 13.300000 4.500000 27.268801 13.300000 4.600000 26.642033 13.300000 4.700000 26.035265 13.300000 4.800000 25.448497 13.300000 4.900000 24.881729 13.300000 5.000000 24.334960 13.300000 5.100000 23.808192 13.300000 5.200000 23.301424 13.300000 5.300000 22.814656 13.300000 5.400000 22.347888 13.300000 5.500000 21.901120 13.300000 5.600000 21.474352 13.300000 5.700000 21.067584 13.300000 5.800000 20.680816 13.300000 5.900000 20.314048 13.300000 6.000000 19.967280 13.300000 6.100000 19.640512 13.300000 6.200000 19.333744 13.300000 6.300000 19.046975 13.300000 6.400000 18.780207 13.300000 6.500000 18.533439 13.300000 6.600000 18.306671 13.300000 6.700000 18.099903 13.300000 6.800000 17.913135 13.300000 6.900000 17.746367 13.300000 7.000000 17.599599 13.300000 7.100000 17.472831 13.300000 7.200000 17.366063 13.300000 7.300000 17.279295 13.300000 7.400000 17.212527 13.300000 7.500000 17.165759 13.300000 7.600000 17.138990 13.300000 7.700000 17.132222 13.300000 7.800000 17.145454 13.300000 7.900000 17.178686 13.300000 8.000000 17.231918 13.300000 8.100000 17.305150 13.300000 8.200000 17.398382 13.300000 8.300000 17.511614 13.300000 8.400000 17.644846 13.300000 8.500000 17.798078 13.300000 8.600000 17.971310 13.300000 8.700000 18.164542 13.300000 8.800000 18.377773 13.300000 8.900000 18.611005 13.300000 9.000000 18.864237 13.300000 9.100000 19.137469 13.300000 9.200000 19.430701 13.300000 9.300000 19.743933 13.300000 9.400000 20.077165 13.300000 9.500000 20.430397 13.300000 9.600000 20.803629 13.300000 9.700000 21.196861 13.300000 9.800000 21.610093 13.300000 9.900000 22.043325 13.300000 10.000000 22.496557 13.300000 10.100000 22.969788 13.300000 10.200000 23.463020 13.300000 10.300000 23.976252 13.300000 10.400000 24.509484 13.300000 10.500000 25.062716 13.300000 10.600000 25.635948 13.300000 10.700000 26.229180 13.300000 10.800000 26.842412 13.300000 10.900000 27.475644 13.300000 11.000000 28.128876 13.300000 11.100000 28.802108 13.300000 11.200000 29.495340 13.300000 11.300000 30.208572 13.300000 11.400000 30.941803 13.300000 11.500000 31.695035 13.300000 11.600000 32.468267 13.300000 11.700000 33.261499 13.300000 11.800000 34.074731 13.300000 11.900000 34.907963 13.300000 12.000000 35.761195 13.300000 12.100000 36.634427 13.300000 12.200000 37.527659 13.300000 12.300000 38.440891 13.300000 12.400000 39.374123 13.300000 12.500000 40.327355 13.300000 12.600000 41.300587 13.300000 12.700000 42.293818 13.300000 12.800000 43.307050 13.300000 12.900000 44.340282 13.300000 13.000000 45.393514 13.300000 13.100000 46.466746 13.300000 13.200000 47.559978 13.300000 13.300000 48.673210 13.300000 13.400000 49.806442 13.300000 13.500000 50.959674 13.300000 13.600000 52.132906 13.300000 13.700000 53.326138 13.300000 13.800000 54.539370 13.300000 13.900000 55.772602 13.300000 14.000000 57.025833 13.300000 14.100000 58.299065 13.300000 14.200000 59.592297 13.300000 14.300000 60.905529 13.300000 14.400000 62.238761 13.300000 14.500000 63.591993 13.300000 14.600000 64.965225 13.300000 14.700000 66.358457 13.300000 14.800000 67.771689 13.300000 14.900000 69.204921 13.300000 15.000000 70.658153 13.400000 -5.000000 182.081286 13.400000 -4.900000 179.517364 13.400000 -4.800000 176.973443 13.400000 -4.700000 174.449521 13.400000 -4.600000 171.945600 13.400000 -4.500000 169.461678 13.400000 -4.400000 166.997756 13.400000 -4.300000 164.553835 13.400000 -4.200000 162.129913 13.400000 -4.100000 159.725991 13.400000 -4.000000 157.342070 13.400000 -3.900000 154.978148 13.400000 -3.800000 152.634227 13.400000 -3.700000 150.310305 13.400000 -3.600000 148.006383 13.400000 -3.500000 145.722462 13.400000 -3.400000 143.458540 13.400000 -3.300000 141.214619 13.400000 -3.200000 138.990697 13.400000 -3.100000 136.786775 13.400000 -3.000000 134.602854 13.400000 -2.900000 132.438932 13.400000 -2.800000 130.295010 13.400000 -2.700000 128.171089 13.400000 -2.600000 126.067167 13.400000 -2.500000 123.983246 13.400000 -2.400000 121.919324 13.400000 -2.300000 119.875402 13.400000 -2.200000 117.851481 13.400000 -2.100000 115.847559 13.400000 -2.000000 113.863638 13.400000 -1.900000 111.899716 13.400000 -1.800000 109.955794 13.400000 -1.700000 108.031873 13.400000 -1.600000 106.127951 13.400000 -1.500000 104.244029 13.400000 -1.400000 102.380108 13.400000 -1.300000 100.536186 13.400000 -1.200000 98.712265 13.400000 -1.100000 96.908343 13.400000 -1.000000 95.124421 13.400000 -0.900000 93.360500 13.400000 -0.800000 91.616578 13.400000 -0.700000 89.892656 13.400000 -0.600000 88.188735 13.400000 -0.500000 86.504813 13.400000 -0.400000 84.840892 13.400000 -0.300000 83.196970 13.400000 -0.200000 81.573048 13.400000 -0.100000 79.969127 13.400000 -0.000000 78.385205 13.400000 0.100000 76.821284 13.400000 0.200000 75.277362 13.400000 0.300000 73.753440 13.400000 0.400000 72.249519 13.400000 0.500000 70.765597 13.400000 0.600000 69.301675 13.400000 0.700000 67.857754 13.400000 0.800000 66.433832 13.400000 0.900000 65.029911 13.400000 1.000000 63.645989 13.400000 1.100000 62.282067 13.400000 1.200000 60.938146 13.400000 1.300000 59.614224 13.400000 1.400000 58.310303 13.400000 1.500000 57.026381 13.400000 1.600000 55.762459 13.400000 1.700000 54.518538 13.400000 1.800000 53.294616 13.400000 1.900000 52.090694 13.400000 2.000000 50.906773 13.400000 2.100000 49.742851 13.400000 2.200000 48.598930 13.400000 2.300000 47.475008 13.400000 2.400000 46.371086 13.400000 2.500000 45.287165 13.400000 2.600000 44.223243 13.400000 2.700000 43.179321 13.400000 2.800000 42.155400 13.400000 2.900000 41.151478 13.400000 3.000000 40.167557 13.400000 3.100000 39.203635 13.400000 3.200000 38.259713 13.400000 3.300000 37.335792 13.400000 3.400000 36.431870 13.400000 3.500000 35.547949 13.400000 3.600000 34.684027 13.400000 3.700000 33.840105 13.400000 3.800000 33.016184 13.400000 3.900000 32.212262 13.400000 4.000000 31.428340 13.400000 4.100000 30.664419 13.400000 4.200000 29.920497 13.400000 4.300000 29.196576 13.400000 4.400000 28.492654 13.400000 4.500000 27.808732 13.400000 4.600000 27.144811 13.400000 4.700000 26.500889 13.400000 4.800000 25.876968 13.400000 4.900000 25.273046 13.400000 5.000000 24.689124 13.400000 5.100000 24.125203 13.400000 5.200000 23.581281 13.400000 5.300000 23.057359 13.400000 5.400000 22.553438 13.400000 5.500000 22.069516 13.400000 5.600000 21.605595 13.400000 5.700000 21.161673 13.400000 5.800000 20.737751 13.400000 5.900000 20.333830 13.400000 6.000000 19.949908 13.400000 6.100000 19.585986 13.400000 6.200000 19.242065 13.400000 6.300000 18.918143 13.400000 6.400000 18.614222 13.400000 6.500000 18.330300 13.400000 6.600000 18.066378 13.400000 6.700000 17.822457 13.400000 6.800000 17.598535 13.400000 6.900000 17.394614 13.400000 7.000000 17.210692 13.400000 7.100000 17.046770 13.400000 7.200000 16.902849 13.400000 7.300000 16.778927 13.400000 7.400000 16.675005 13.400000 7.500000 16.591084 13.400000 7.600000 16.527162 13.400000 7.700000 16.483241 13.400000 7.800000 16.459319 13.400000 7.900000 16.455397 13.400000 8.000000 16.471476 13.400000 8.100000 16.507554 13.400000 8.200000 16.563633 13.400000 8.300000 16.639711 13.400000 8.400000 16.735789 13.400000 8.500000 16.851868 13.400000 8.600000 16.987946 13.400000 8.700000 17.144024 13.400000 8.800000 17.320103 13.400000 8.900000 17.516181 13.400000 9.000000 17.732260 13.400000 9.100000 17.968338 13.400000 9.200000 18.224416 13.400000 9.300000 18.500495 13.400000 9.400000 18.796573 13.400000 9.500000 19.112651 13.400000 9.600000 19.448730 13.400000 9.700000 19.804808 13.400000 9.800000 20.180887 13.400000 9.900000 20.576965 13.400000 10.000000 20.993043 13.400000 10.100000 21.429122 13.400000 10.200000 21.885200 13.400000 10.300000 22.361279 13.400000 10.400000 22.857357 13.400000 10.500000 23.373435 13.400000 10.600000 23.909514 13.400000 10.700000 24.465592 13.400000 10.800000 25.041670 13.400000 10.900000 25.637749 13.400000 11.000000 26.253827 13.400000 11.100000 26.889906 13.400000 11.200000 27.545984 13.400000 11.300000 28.222062 13.400000 11.400000 28.918141 13.400000 11.500000 29.634219 13.400000 11.600000 30.370298 13.400000 11.700000 31.126376 13.400000 11.800000 31.902454 13.400000 11.900000 32.698533 13.400000 12.000000 33.514611 13.400000 12.100000 34.350689 13.400000 12.200000 35.206768 13.400000 12.300000 36.082846 13.400000 12.400000 36.978925 13.400000 12.500000 37.895003 13.400000 12.600000 38.831081 13.400000 12.700000 39.787160 13.400000 12.800000 40.763238 13.400000 12.900000 41.759316 13.400000 13.000000 42.775395 13.400000 13.100000 43.811473 13.400000 13.200000 44.867552 13.400000 13.300000 45.943630 13.400000 13.400000 47.039708 13.400000 13.500000 48.155787 13.400000 13.600000 49.291865 13.400000 13.700000 50.447944 13.400000 13.800000 51.624022 13.400000 13.900000 52.820100 13.400000 14.000000 54.036179 13.400000 14.100000 55.272257 13.400000 14.200000 56.528335 13.400000 14.300000 57.804414 13.400000 14.400000 59.100492 13.400000 14.500000 60.416571 13.400000 14.600000 61.752649 13.400000 14.700000 63.108727 13.400000 14.800000 64.484806 13.400000 14.900000 65.880884 13.400000 15.000000 67.296963 13.500000 -5.000000 186.222801 13.500000 -4.900000 183.621209 13.500000 -4.800000 181.039617 13.500000 -4.700000 178.478025 13.500000 -4.600000 175.936433 13.500000 -4.500000 173.414841 13.500000 -4.400000 170.913249 13.500000 -4.300000 168.431658 13.500000 -4.200000 165.970066 13.500000 -4.100000 163.528474 13.500000 -4.000000 161.106882 13.500000 -3.900000 158.705290 13.500000 -3.800000 156.323698 13.500000 -3.700000 153.962106 13.500000 -3.600000 151.620514 13.500000 -3.500000 149.298922 13.500000 -3.400000 146.997331 13.500000 -3.300000 144.715739 13.500000 -3.200000 142.454147 13.500000 -3.100000 140.212555 13.500000 -3.000000 137.990963 13.500000 -2.900000 135.789371 13.500000 -2.800000 133.607779 13.500000 -2.700000 131.446187 13.500000 -2.600000 129.304595 13.500000 -2.500000 127.183003 13.500000 -2.400000 125.081412 13.500000 -2.300000 122.999820 13.500000 -2.200000 120.938228 13.500000 -2.100000 118.896636 13.500000 -2.000000 116.875044 13.500000 -1.900000 114.873452 13.500000 -1.800000 112.891860 13.500000 -1.700000 110.930268 13.500000 -1.600000 108.988676 13.500000 -1.500000 107.067085 13.500000 -1.400000 105.165493 13.500000 -1.300000 103.283901 13.500000 -1.200000 101.422309 13.500000 -1.100000 99.580717 13.500000 -1.000000 97.759125 13.500000 -0.900000 95.957533 13.500000 -0.800000 94.175941 13.500000 -0.700000 92.414349 13.500000 -0.600000 90.672757 13.500000 -0.500000 88.951166 13.500000 -0.400000 87.249574 13.500000 -0.300000 85.567982 13.500000 -0.200000 83.906390 13.500000 -0.100000 82.264798 13.500000 -0.000000 80.643206 13.500000 0.100000 79.041614 13.500000 0.200000 77.460022 13.500000 0.300000 75.898430 13.500000 0.400000 74.356839 13.500000 0.500000 72.835247 13.500000 0.600000 71.333655 13.500000 0.700000 69.852063 13.500000 0.800000 68.390471 13.500000 0.900000 66.948879 13.500000 1.000000 65.527287 13.500000 1.100000 64.125695 13.500000 1.200000 62.744103 13.500000 1.300000 61.382511 13.500000 1.400000 60.040920 13.500000 1.500000 58.719328 13.500000 1.600000 57.417736 13.500000 1.700000 56.136144 13.500000 1.800000 54.874552 13.500000 1.900000 53.632960 13.500000 2.000000 52.411368 13.500000 2.100000 51.209776 13.500000 2.200000 50.028184 13.500000 2.300000 48.866593 13.500000 2.400000 47.725001 13.500000 2.500000 46.603409 13.500000 2.600000 45.501817 13.500000 2.700000 44.420225 13.500000 2.800000 43.358633 13.500000 2.900000 42.317041 13.500000 3.000000 41.295449 13.500000 3.100000 40.293857 13.500000 3.200000 39.312265 13.500000 3.300000 38.350674 13.500000 3.400000 37.409082 13.500000 3.500000 36.487490 13.500000 3.600000 35.585898 13.500000 3.700000 34.704306 13.500000 3.800000 33.842714 13.500000 3.900000 33.001122 13.500000 4.000000 32.179530 13.500000 4.100000 31.377938 13.500000 4.200000 30.596347 13.500000 4.300000 29.834755 13.500000 4.400000 29.093163 13.500000 4.500000 28.371571 13.500000 4.600000 27.669979 13.500000 4.700000 26.988387 13.500000 4.800000 26.326795 13.500000 4.900000 25.685203 13.500000 5.000000 25.063611 13.500000 5.100000 24.462019 13.500000 5.200000 23.880428 13.500000 5.300000 23.318836 13.500000 5.400000 22.777244 13.500000 5.500000 22.255652 13.500000 5.600000 21.754060 13.500000 5.700000 21.272468 13.500000 5.800000 20.810876 13.500000 5.900000 20.369284 13.500000 6.000000 19.947692 13.500000 6.100000 19.546101 13.500000 6.200000 19.164509 13.500000 6.300000 18.802917 13.500000 6.400000 18.461325 13.500000 6.500000 18.139733 13.500000 6.600000 17.838141 13.500000 6.700000 17.556549 13.500000 6.800000 17.294957 13.500000 6.900000 17.053365 13.500000 7.000000 16.831773 13.500000 7.100000 16.630182 13.500000 7.200000 16.448590 13.500000 7.300000 16.286998 13.500000 7.400000 16.145406 13.500000 7.500000 16.023814 13.500000 7.600000 15.922222 13.500000 7.700000 15.840630 13.500000 7.800000 15.779038 13.500000 7.900000 15.737446 13.500000 8.000000 15.715855 13.500000 8.100000 15.714263 13.500000 8.200000 15.732671 13.500000 8.300000 15.771079 13.500000 8.400000 15.829487 13.500000 8.500000 15.907895 13.500000 8.600000 16.006303 13.500000 8.700000 16.124711 13.500000 8.800000 16.263119 13.500000 8.900000 16.421527 13.500000 9.000000 16.599936 13.500000 9.100000 16.798344 13.500000 9.200000 17.016752 13.500000 9.300000 17.255160 13.500000 9.400000 17.513568 13.500000 9.500000 17.791976 13.500000 9.600000 18.090384 13.500000 9.700000 18.408792 13.500000 9.800000 18.747200 13.500000 9.900000 19.105609 13.500000 10.000000 19.484017 13.500000 10.100000 19.882425 13.500000 10.200000 20.300833 13.500000 10.300000 20.739241 13.500000 10.400000 21.197649 13.500000 10.500000 21.676057 13.500000 10.600000 22.174465 13.500000 10.700000 22.692873 13.500000 10.800000 23.231281 13.500000 10.900000 23.789690 13.500000 11.000000 24.368098 13.500000 11.100000 24.966506 13.500000 11.200000 25.584914 13.500000 11.300000 26.223322 13.500000 11.400000 26.881730 13.500000 11.500000 27.560138 13.500000 11.600000 28.258546 13.500000 11.700000 28.976954 13.500000 11.800000 29.715363 13.500000 11.900000 30.473771 13.500000 12.000000 31.252179 13.500000 12.100000 32.050587 13.500000 12.200000 32.868995 13.500000 12.300000 33.707403 13.500000 12.400000 34.565811 13.500000 12.500000 35.444219 13.500000 12.600000 36.342627 13.500000 12.700000 37.261035 13.500000 12.800000 38.199444 13.500000 12.900000 39.157852 13.500000 13.000000 40.136260 13.500000 13.100000 41.134668 13.500000 13.200000 42.153076 13.500000 13.300000 43.191484 13.500000 13.400000 44.249892 13.500000 13.500000 45.328300 13.500000 13.600000 46.426708 13.500000 13.700000 47.545117 13.500000 13.800000 48.683525 13.500000 13.900000 49.841933 13.500000 14.000000 51.020341 13.500000 14.100000 52.218749 13.500000 14.200000 53.437157 13.500000 14.300000 54.675565 13.500000 14.400000 55.933973 13.500000 14.500000 57.212381 13.500000 14.600000 58.510789 13.500000 14.700000 59.829198 13.500000 14.800000 61.167606 13.500000 14.900000 62.526014 13.500000 15.000000 63.904422 13.600000 -5.000000 190.446646 13.600000 -4.900000 187.806867 13.600000 -4.800000 185.187088 13.600000 -4.700000 182.587309 13.600000 -4.600000 180.007531 13.600000 -4.500000 177.447752 13.600000 -4.400000 174.907973 13.600000 -4.300000 172.388194 13.600000 -4.200000 169.888415 13.600000 -4.100000 167.408636 13.600000 -4.000000 164.948857 13.600000 -3.900000 162.509078 13.600000 -3.800000 160.089299 13.600000 -3.700000 157.689520 13.600000 -3.600000 155.309741 13.600000 -3.500000 152.949963 13.600000 -3.400000 150.610184 13.600000 -3.300000 148.290405 13.600000 -3.200000 145.990626 13.600000 -3.100000 143.710847 13.600000 -3.000000 141.451068 13.600000 -2.900000 139.211289 13.600000 -2.800000 136.991510 13.600000 -2.700000 134.791731 13.600000 -2.600000 132.611952 13.600000 -2.500000 130.452173 13.600000 -2.400000 128.312395 13.600000 -2.300000 126.192616 13.600000 -2.200000 124.092837 13.600000 -2.100000 122.013058 13.600000 -2.000000 119.953279 13.600000 -1.900000 117.913500 13.600000 -1.800000 115.893721 13.600000 -1.700000 113.893942 13.600000 -1.600000 111.914163 13.600000 -1.500000 109.954384 13.600000 -1.400000 108.014605 13.600000 -1.300000 106.094827 13.600000 -1.200000 104.195048 13.600000 -1.100000 102.315269 13.600000 -1.000000 100.455490 13.600000 -0.900000 98.615711 13.600000 -0.800000 96.795932 13.600000 -0.700000 94.996153 13.600000 -0.600000 93.216374 13.600000 -0.500000 91.456595 13.600000 -0.400000 89.716816 13.600000 -0.300000 87.997037 13.600000 -0.200000 86.297259 13.600000 -0.100000 84.617480 13.600000 -0.000000 82.957701 13.600000 0.100000 81.317922 13.600000 0.200000 79.698143 13.600000 0.300000 78.098364 13.600000 0.400000 76.518585 13.600000 0.500000 74.958806 13.600000 0.600000 73.419027 13.600000 0.700000 71.899248 13.600000 0.800000 70.399469 13.600000 0.900000 68.919690 13.600000 1.000000 67.459912 13.600000 1.100000 66.020133 13.600000 1.200000 64.600354 13.600000 1.300000 63.200575 13.600000 1.400000 61.820796 13.600000 1.500000 60.461017 13.600000 1.600000 59.121238 13.600000 1.700000 57.801459 13.600000 1.800000 56.501680 13.600000 1.900000 55.221901 13.600000 2.000000 53.962122 13.600000 2.100000 52.722344 13.600000 2.200000 51.502565 13.600000 2.300000 50.302786 13.600000 2.400000 49.123007 13.600000 2.500000 47.963228 13.600000 2.600000 46.823449 13.600000 2.700000 45.703670 13.600000 2.800000 44.603891 13.600000 2.900000 43.524112 13.600000 3.000000 42.464333 13.600000 3.100000 41.424554 13.600000 3.200000 40.404776 13.600000 3.300000 39.404997 13.600000 3.400000 38.425218 13.600000 3.500000 37.465439 13.600000 3.600000 36.525660 13.600000 3.700000 35.605881 13.600000 3.800000 34.706102 13.600000 3.900000 33.826323 13.600000 4.000000 32.966544 13.600000 4.100000 32.126765 13.600000 4.200000 31.306986 13.600000 4.300000 30.507208 13.600000 4.400000 29.727429 13.600000 4.500000 28.967650 13.600000 4.600000 28.227871 13.600000 4.700000 27.508092 13.600000 4.800000 26.808313 13.600000 4.900000 26.128534 13.600000 5.000000 25.468755 13.600000 5.100000 24.828976 13.600000 5.200000 24.209197 13.600000 5.300000 23.609418 13.600000 5.400000 23.029640 13.600000 5.500000 22.469861 13.600000 5.600000 21.930082 13.600000 5.700000 21.410303 13.600000 5.800000 20.910524 13.600000 5.900000 20.430745 13.600000 6.000000 19.970966 13.600000 6.100000 19.531187 13.600000 6.200000 19.111408 13.600000 6.300000 18.711629 13.600000 6.400000 18.331850 13.600000 6.500000 17.972072 13.600000 6.600000 17.632293 13.600000 6.700000 17.312514 13.600000 6.800000 17.012735 13.600000 6.900000 16.732956 13.600000 7.000000 16.473177 13.600000 7.100000 16.233398 13.600000 7.200000 16.013619 13.600000 7.300000 15.813840 13.600000 7.400000 15.634061 13.600000 7.500000 15.474282 13.600000 7.600000 15.334504 13.600000 7.700000 15.214725 13.600000 7.800000 15.114946 13.600000 7.900000 15.035167 13.600000 8.000000 14.975388 13.600000 8.100000 14.935609 13.600000 8.200000 14.915830 13.600000 8.300000 14.916051 13.600000 8.400000 14.936272 13.600000 8.500000 14.976493 13.600000 8.600000 15.036714 13.600000 8.700000 15.116936 13.600000 8.800000 15.217157 13.600000 8.900000 15.337378 13.600000 9.000000 15.477599 13.600000 9.100000 15.637820 13.600000 9.200000 15.818041 13.600000 9.300000 16.018262 13.600000 9.400000 16.238483 13.600000 9.500000 16.478704 13.600000 9.600000 16.738925 13.600000 9.700000 17.019146 13.600000 9.800000 17.319367 13.600000 9.900000 17.639589 13.600000 10.000000 17.979810 13.600000 10.100000 18.340031 13.600000 10.200000 18.720252 13.600000 10.300000 19.120473 13.600000 10.400000 19.540694 13.600000 10.500000 19.980915 13.600000 10.600000 20.441136 13.600000 10.700000 20.921357 13.600000 10.800000 21.421578 13.600000 10.900000 21.941799 13.600000 11.000000 22.482021 13.600000 11.100000 23.042242 13.600000 11.200000 23.622463 13.600000 11.300000 24.222684 13.600000 11.400000 24.842905 13.600000 11.500000 25.483126 13.600000 11.600000 26.143347 13.600000 11.700000 26.823568 13.600000 11.800000 27.523789 13.600000 11.900000 28.244010 13.600000 12.000000 28.984231 13.600000 12.100000 29.744453 13.600000 12.200000 30.524674 13.600000 12.300000 31.324895 13.600000 12.400000 32.145116 13.600000 12.500000 32.985337 13.600000 12.600000 33.845558 13.600000 12.700000 34.725779 13.600000 12.800000 35.626000 13.600000 12.900000 36.546221 13.600000 13.000000 37.486442 13.600000 13.100000 38.446663 13.600000 13.200000 39.426885 13.600000 13.300000 40.427106 13.600000 13.400000 41.447327 13.600000 13.500000 42.487548 13.600000 13.600000 43.547769 13.600000 13.700000 44.627990 13.600000 13.800000 45.728211 13.600000 13.900000 46.848432 13.600000 14.000000 47.988653 13.600000 14.100000 49.148874 13.600000 14.200000 50.329095 13.600000 14.300000 51.529317 13.600000 14.400000 52.749538 13.600000 14.500000 53.989759 13.600000 14.600000 55.249980 13.600000 14.700000 56.530201 13.600000 14.800000 57.830422 13.600000 14.900000 59.150643 13.600000 15.000000 60.490864 13.700000 -5.000000 194.763766 13.700000 -4.900000 192.085283 13.700000 -4.800000 189.426801 13.700000 -4.700000 186.788318 13.700000 -4.600000 184.169835 13.700000 -4.500000 181.571353 13.700000 -4.400000 178.992870 13.700000 -4.300000 176.434387 13.700000 -4.200000 173.895905 13.700000 -4.100000 171.377422 13.700000 -4.000000 168.878939 13.700000 -3.900000 166.400457 13.700000 -3.800000 163.941974 13.700000 -3.700000 161.503491 13.700000 -3.600000 159.085009 13.700000 -3.500000 156.686526 13.700000 -3.400000 154.308043 13.700000 -3.300000 151.949561 13.700000 -3.200000 149.611078 13.700000 -3.100000 147.292595 13.700000 -3.000000 144.994113 13.700000 -2.900000 142.715630 13.700000 -2.800000 140.457147 13.700000 -2.700000 138.218665 13.700000 -2.600000 136.000182 13.700000 -2.500000 133.801699 13.700000 -2.400000 131.623217 13.700000 -2.300000 129.464734 13.700000 -2.200000 127.326251 13.700000 -2.100000 125.207769 13.700000 -2.000000 123.109286 13.700000 -1.900000 121.030803 13.700000 -1.800000 118.972321 13.700000 -1.700000 116.933838 13.700000 -1.600000 114.915355 13.700000 -1.500000 112.916873 13.700000 -1.400000 110.938390 13.700000 -1.300000 108.979907 13.700000 -1.200000 107.041425 13.700000 -1.100000 105.122942 13.700000 -1.000000 103.224459 13.700000 -0.900000 101.345977 13.700000 -0.800000 99.487494 13.700000 -0.700000 97.649011 13.700000 -0.600000 95.830529 13.700000 -0.500000 94.032046 13.700000 -0.400000 92.253563 13.700000 -0.300000 90.495081 13.700000 -0.200000 88.756598 13.700000 -0.100000 87.038115 13.700000 -0.000000 85.339633 13.700000 0.100000 83.661150 13.700000 0.200000 82.002667 13.700000 0.300000 80.364185 13.700000 0.400000 78.745702 13.700000 0.500000 77.147219 13.700000 0.600000 75.568737 13.700000 0.700000 74.010254 13.700000 0.800000 72.471771 13.700000 0.900000 70.953289 13.700000 1.000000 69.454806 13.700000 1.100000 67.976323 13.700000 1.200000 66.517841 13.700000 1.300000 65.079358 13.700000 1.400000 63.660875 13.700000 1.500000 62.262393 13.700000 1.600000 60.883910 13.700000 1.700000 59.525427 13.700000 1.800000 58.186945 13.700000 1.900000 56.868462 13.700000 2.000000 55.569979 13.700000 2.100000 54.291497 13.700000 2.200000 53.033014 13.700000 2.300000 51.794531 13.700000 2.400000 50.576049 13.700000 2.500000 49.377566 13.700000 2.600000 48.199083 13.700000 2.700000 47.040601 13.700000 2.800000 45.902118 13.700000 2.900000 44.783635 13.700000 3.000000 43.685153 13.700000 3.100000 42.606670 13.700000 3.200000 41.548187 13.700000 3.300000 40.509705 13.700000 3.400000 39.491222 13.700000 3.500000 38.492739 13.700000 3.600000 37.514257 13.700000 3.700000 36.555774 13.700000 3.800000 35.617291 13.700000 3.900000 34.698809 13.700000 4.000000 33.800326 13.700000 4.100000 32.921843 13.700000 4.200000 32.063361 13.700000 4.300000 31.224878 13.700000 4.400000 30.406395 13.700000 4.500000 29.607913 13.700000 4.600000 28.829430 13.700000 4.700000 28.070948 13.700000 4.800000 27.332465 13.700000 4.900000 26.613982 13.700000 5.000000 25.915500 13.700000 5.100000 25.237017 13.700000 5.200000 24.578534 13.700000 5.300000 23.940052 13.700000 5.400000 23.321569 13.700000 5.500000 22.723086 13.700000 5.600000 22.144604 13.700000 5.700000 21.586121 13.700000 5.800000 21.047638 13.700000 5.900000 20.529156 13.700000 6.000000 20.030673 13.700000 6.100000 19.552190 13.700000 6.200000 19.093708 13.700000 6.300000 18.655225 13.700000 6.400000 18.236742 13.700000 6.500000 17.838260 13.700000 6.600000 17.459777 13.700000 6.700000 17.101294 13.700000 6.800000 16.762812 13.700000 6.900000 16.444329 13.700000 7.000000 16.145846 13.700000 7.100000 15.867364 13.700000 7.200000 15.608881 13.700000 7.300000 15.370398 13.700000 7.400000 15.151916 13.700000 7.500000 14.953433 13.700000 7.600000 14.774950 13.700000 7.700000 14.616468 13.700000 7.800000 14.477985 13.700000 7.900000 14.359502 13.700000 8.000000 14.261020 13.700000 8.100000 14.182537 13.700000 8.200000 14.124054 13.700000 8.300000 14.085572 13.700000 8.400000 14.067089 13.700000 8.500000 14.068606 13.700000 8.600000 14.090124 13.700000 8.700000 14.131641 13.700000 8.800000 14.193158 13.700000 8.900000 14.274676 13.700000 9.000000 14.376193 13.700000 9.100000 14.497710 13.700000 9.200000 14.639228 13.700000 9.300000 14.800745 13.700000 9.400000 14.982262 13.700000 9.500000 15.183780 13.700000 9.600000 15.405297 13.700000 9.700000 15.646814 13.700000 9.800000 15.908332 13.700000 9.900000 16.189849 13.700000 10.000000 16.491366 13.700000 10.100000 16.812884 13.700000 10.200000 17.154401 13.700000 10.300000 17.515918 13.700000 10.400000 17.897436 13.700000 10.500000 18.298953 13.700000 10.600000 18.720470 13.700000 10.700000 19.161988 13.700000 10.800000 19.623505 13.700000 10.900000 20.105022 13.700000 11.000000 20.606540 13.700000 11.100000 21.128057 13.700000 11.200000 21.669574 13.700000 11.300000 22.231092 13.700000 11.400000 22.812609 13.700000 11.500000 23.414126 13.700000 11.600000 24.035644 13.700000 11.700000 24.677161 13.700000 11.800000 25.338678 13.700000 11.900000 26.020196 13.700000 12.000000 26.721713 13.700000 12.100000 27.443230 13.700000 12.200000 28.184748 13.700000 12.300000 28.946265 13.700000 12.400000 29.727782 13.700000 12.500000 30.529300 13.700000 12.600000 31.350817 13.700000 12.700000 32.192334 13.700000 12.800000 33.053852 13.700000 12.900000 33.935369 13.700000 13.000000 34.836886 13.700000 13.100000 35.758404 13.700000 13.200000 36.699921 13.700000 13.300000 37.661438 13.700000 13.400000 38.642956 13.700000 13.500000 39.644473 13.700000 13.600000 40.665990 13.700000 13.700000 41.707508 13.700000 13.800000 42.769025 13.700000 13.900000 43.850542 13.700000 14.000000 44.952060 13.700000 14.100000 46.073577 13.700000 14.200000 47.215094 13.700000 14.300000 48.376612 13.700000 14.400000 49.558129 13.700000 14.500000 50.759646 13.700000 14.600000 51.981164 13.700000 14.700000 53.222681 13.700000 14.800000 54.484198 13.700000 14.900000 55.765716 13.700000 15.000000 57.067233 13.800000 -5.000000 199.185634 13.800000 -4.900000 196.467931 13.800000 -4.800000 193.770228 13.800000 -4.700000 191.092525 13.800000 -4.600000 188.434822 13.800000 -4.500000 185.797118 13.800000 -4.400000 183.179415 13.800000 -4.300000 180.581712 13.800000 -4.200000 178.004009 13.800000 -4.100000 175.446306 13.800000 -4.000000 172.908603 13.800000 -3.900000 170.390900 13.800000 -3.800000 167.893196 13.800000 -3.700000 165.415493 13.800000 -3.600000 162.957790 13.800000 -3.500000 160.520087 13.800000 -3.400000 158.102384 13.800000 -3.300000 155.704681 13.800000 -3.200000 153.326977 13.800000 -3.100000 150.969274 13.800000 -3.000000 148.631571 13.800000 -2.900000 146.313868 13.800000 -2.800000 144.016165 13.800000 -2.700000 141.738462 13.800000 -2.600000 139.480759 13.800000 -2.500000 137.243055 13.800000 -2.400000 135.025352 13.800000 -2.300000 132.827649 13.800000 -2.200000 130.649946 13.800000 -2.100000 128.492243 13.800000 -2.000000 126.354540 13.800000 -1.900000 124.236836 13.800000 -1.800000 122.139133 13.800000 -1.700000 120.061430 13.800000 -1.600000 118.003727 13.800000 -1.500000 115.966024 13.800000 -1.400000 113.948321 13.800000 -1.300000 111.950618 13.800000 -1.200000 109.972914 13.800000 -1.100000 108.015211 13.800000 -1.000000 106.077508 13.800000 -0.900000 104.159805 13.800000 -0.800000 102.262102 13.800000 -0.700000 100.384399 13.800000 -0.600000 98.526695 13.800000 -0.500000 96.688992 13.800000 -0.400000 94.871289 13.800000 -0.300000 93.073586 13.800000 -0.200000 91.295883 13.800000 -0.100000 89.538180 13.800000 -0.000000 87.800477 13.800000 0.100000 86.082773 13.800000 0.200000 84.385070 13.800000 0.300000 82.707367 13.800000 0.400000 81.049664 13.800000 0.500000 79.411961 13.800000 0.600000 77.794258 13.800000 0.700000 76.196554 13.800000 0.800000 74.618851 13.800000 0.900000 73.061148 13.800000 1.000000 71.523445 13.800000 1.100000 70.005742 13.800000 1.200000 68.508039 13.800000 1.300000 67.030335 13.800000 1.400000 65.572632 13.800000 1.500000 64.134929 13.800000 1.600000 62.717226 13.800000 1.700000 61.319523 13.800000 1.800000 59.941820 13.800000 1.900000 58.584117 13.800000 2.000000 57.246413 13.800000 2.100000 55.928710 13.800000 2.200000 54.631007 13.800000 2.300000 53.353304 13.800000 2.400000 52.095601 13.800000 2.500000 50.857898 13.800000 2.600000 49.640194 13.800000 2.700000 48.442491 13.800000 2.800000 47.264788 13.800000 2.900000 46.107085 13.800000 3.000000 44.969382 13.800000 3.100000 43.851679 13.800000 3.200000 42.753976 13.800000 3.300000 41.676272 13.800000 3.400000 40.618569 13.800000 3.500000 39.580866 13.800000 3.600000 38.563163 13.800000 3.700000 37.565460 13.800000 3.800000 36.587757 13.800000 3.900000 35.630053 13.800000 4.000000 34.692350 13.800000 4.100000 33.774647 13.800000 4.200000 32.876944 13.800000 4.300000 31.999241 13.800000 4.400000 31.141538 13.800000 4.500000 30.303835 13.800000 4.600000 29.486131 13.800000 4.700000 28.688428 13.800000 4.800000 27.910725 13.800000 4.900000 27.153022 13.800000 5.000000 26.415319 13.800000 5.100000 25.697616 13.800000 5.200000 24.999912 13.800000 5.300000 24.322209 13.800000 5.400000 23.664506 13.800000 5.500000 23.026803 13.800000 5.600000 22.409100 13.800000 5.700000 21.811397 13.800000 5.800000 21.233694 13.800000 5.900000 20.675990 13.800000 6.000000 20.138287 13.800000 6.100000 19.620584 13.800000 6.200000 19.122881 13.800000 6.300000 18.645178 13.800000 6.400000 18.187475 13.800000 6.500000 17.749771 13.800000 6.600000 17.332068 13.800000 6.700000 16.934365 13.800000 6.800000 16.556662 13.800000 6.900000 16.198959 13.800000 7.000000 15.861256 13.800000 7.100000 15.543553 13.800000 7.200000 15.245849 13.800000 7.300000 14.968146 13.800000 7.400000 14.710443 13.800000 7.500000 14.472740 13.800000 7.600000 14.255037 13.800000 7.700000 14.057334 13.800000 7.800000 13.879630 13.800000 7.900000 13.721927 13.800000 8.000000 13.584224 13.800000 8.100000 13.466521 13.800000 8.200000 13.368818 13.800000 8.300000 13.291115 13.800000 8.400000 13.233411 13.800000 8.500000 13.195708 13.800000 8.600000 13.178005 13.800000 8.700000 13.180302 13.800000 8.800000 13.202599 13.800000 8.900000 13.244896 13.800000 9.000000 13.307193 13.800000 9.100000 13.389489 13.800000 9.200000 13.491786 13.800000 9.300000 13.614083 13.800000 9.400000 13.756380 13.800000 9.500000 13.918677 13.800000 9.600000 14.100974 13.800000 9.700000 14.303270 13.800000 9.800000 14.525567 13.800000 9.900000 14.767864 13.800000 10.000000 15.030161 13.800000 10.100000 15.312458 13.800000 10.200000 15.614755 13.800000 10.300000 15.937052 13.800000 10.400000 16.279348 13.800000 10.500000 16.641645 13.800000 10.600000 17.023942 13.800000 10.700000 17.426239 13.800000 10.800000 17.848536 13.800000 10.900000 18.290833 13.800000 11.000000 18.753129 13.800000 11.100000 19.235426 13.800000 11.200000 19.737723 13.800000 11.300000 20.260020 13.800000 11.400000 20.802317 13.800000 11.500000 21.364614 13.800000 11.600000 21.946911 13.800000 11.700000 22.549207 13.800000 11.800000 23.171504 13.800000 11.900000 23.813801 13.800000 12.000000 24.476098 13.800000 12.100000 25.158395 13.800000 12.200000 25.860692 13.800000 12.300000 26.582988 13.800000 12.400000 27.325285 13.800000 12.500000 28.087582 13.800000 12.600000 28.869879 13.800000 12.700000 29.672176 13.800000 12.800000 30.494473 13.800000 12.900000 31.336770 13.800000 13.000000 32.199066 13.800000 13.100000 33.081363 13.800000 13.200000 33.983660 13.800000 13.300000 34.905957 13.800000 13.400000 35.848254 13.800000 13.500000 36.810551 13.800000 13.600000 37.792847 13.800000 13.700000 38.795144 13.800000 13.800000 39.817441 13.800000 13.900000 40.859738 13.800000 14.000000 41.922035 13.800000 14.100000 43.004332 13.800000 14.200000 44.106629 13.800000 14.300000 45.228925 13.800000 14.400000 46.371222 13.800000 14.500000 47.533519 13.800000 14.600000 48.715816 13.800000 14.700000 49.918113 13.800000 14.800000 51.140410 13.800000 14.900000 52.382706 13.800000 15.000000 53.645003 13.900000 -5.000000 203.724172 13.900000 -4.900000 200.966731 13.900000 -4.800000 198.229291 13.900000 -4.700000 195.511850 13.900000 -4.600000 192.814410 13.900000 -4.500000 190.136970 13.900000 -4.400000 187.479529 13.900000 -4.300000 184.842089 13.900000 -4.200000 182.224649 13.900000 -4.100000 179.627208 13.900000 -4.000000 177.049768 13.900000 -3.900000 174.492327 13.900000 -3.800000 171.954887 13.900000 -3.700000 169.437447 13.900000 -3.600000 166.940006 13.900000 -3.500000 164.462566 13.900000 -3.400000 162.005126 13.900000 -3.300000 159.567685 13.900000 -3.200000 157.150245 13.900000 -3.100000 154.752804 13.900000 -3.000000 152.375364 13.900000 -2.900000 150.017924 13.900000 -2.800000 147.680483 13.900000 -2.700000 145.363043 13.900000 -2.600000 143.065602 13.900000 -2.500000 140.788162 13.900000 -2.400000 138.530722 13.900000 -2.300000 136.293281 13.900000 -2.200000 134.075841 13.900000 -2.100000 131.878401 13.900000 -2.000000 129.700960 13.900000 -1.900000 127.543520 13.900000 -1.800000 125.406079 13.900000 -1.700000 123.288639 13.900000 -1.600000 121.191199 13.900000 -1.500000 119.113758 13.900000 -1.400000 117.056318 13.900000 -1.300000 115.018877 13.900000 -1.200000 113.001437 13.900000 -1.100000 111.003997 13.900000 -1.000000 109.026556 13.900000 -0.900000 107.069116 13.900000 -0.800000 105.131676 13.900000 -0.700000 103.214235 13.900000 -0.600000 101.316795 13.900000 -0.500000 99.439354 13.900000 -0.400000 97.581914 13.900000 -0.300000 95.744474 13.900000 -0.200000 93.927033 13.900000 -0.100000 92.129593 13.900000 -0.000000 90.352152 13.900000 0.100000 88.594712 13.900000 0.200000 86.857272 13.900000 0.300000 85.139831 13.900000 0.400000 83.442391 13.900000 0.500000 81.764951 13.900000 0.600000 80.107510 13.900000 0.700000 78.470070 13.900000 0.800000 76.852629 13.900000 0.900000 75.255189 13.900000 1.000000 73.677749 13.900000 1.100000 72.120308 13.900000 1.200000 70.582868 13.900000 1.300000 69.065427 13.900000 1.400000 67.567987 13.900000 1.500000 66.090547 13.900000 1.600000 64.633106 13.900000 1.700000 63.195666 13.900000 1.800000 61.778226 13.900000 1.900000 60.380785 13.900000 2.000000 59.003345 13.900000 2.100000 57.645904 13.900000 2.200000 56.308464 13.900000 2.300000 54.991024 13.900000 2.400000 53.693583 13.900000 2.500000 52.416143 13.900000 2.600000 51.158702 13.900000 2.700000 49.921262 13.900000 2.800000 48.703822 13.900000 2.900000 47.506381 13.900000 3.000000 46.328941 13.900000 3.100000 45.171501 13.900000 3.200000 44.034060 13.900000 3.300000 42.916620 13.900000 3.400000 41.819179 13.900000 3.500000 40.741739 13.900000 3.600000 39.684299 13.900000 3.700000 38.646858 13.900000 3.800000 37.629418 13.900000 3.900000 36.631977 13.900000 4.000000 35.654537 13.900000 4.100000 34.697097 13.900000 4.200000 33.759656 13.900000 4.300000 32.842216 13.900000 4.400000 31.944776 13.900000 4.500000 31.067335 13.900000 4.600000 30.209895 13.900000 4.700000 29.372454 13.900000 4.800000 28.555014 13.900000 4.900000 27.757574 13.900000 5.000000 26.980133 13.900000 5.100000 26.222693 13.900000 5.200000 25.485252 13.900000 5.300000 24.767812 13.900000 5.400000 24.070372 13.900000 5.500000 23.392931 13.900000 5.600000 22.735491 13.900000 5.700000 22.098051 13.900000 5.800000 21.480610 13.900000 5.900000 20.883170 13.900000 6.000000 20.305729 13.900000 6.100000 19.748289 13.900000 6.200000 19.210849 13.900000 6.300000 18.693408 13.900000 6.400000 18.195968 13.900000 6.500000 17.718527 13.900000 6.600000 17.261087 13.900000 6.700000 16.823647 13.900000 6.800000 16.406206 13.900000 6.900000 16.008766 13.900000 7.000000 15.631326 13.900000 7.100000 15.273885 13.900000 7.200000 14.936445 13.900000 7.300000 14.619004 13.900000 7.400000 14.321564 13.900000 7.500000 14.044124 13.900000 7.600000 13.786683 13.900000 7.700000 13.549243 13.900000 7.800000 13.331802 13.900000 7.900000 13.134362 13.900000 8.000000 12.956922 13.900000 8.100000 12.799481 13.900000 8.200000 12.662041 13.900000 8.300000 12.544601 13.900000 8.400000 12.447160 13.900000 8.500000 12.369720 13.900000 8.600000 12.312279 13.900000 8.700000 12.274839 13.900000 8.800000 12.257399 13.900000 8.900000 12.259958 13.900000 9.000000 12.282518 13.900000 9.100000 12.325077 13.900000 9.200000 12.387637 13.900000 9.300000 12.470197 13.900000 9.400000 12.572756 13.900000 9.500000 12.695316 13.900000 9.600000 12.837876 13.900000 9.700000 13.000435 13.900000 9.800000 13.182995 13.900000 9.900000 13.385554 13.900000 10.000000 13.608114 13.900000 10.100000 13.850674 13.900000 10.200000 14.113233 13.900000 10.300000 14.395793 13.900000 10.400000 14.698352 13.900000 10.500000 15.020912 13.900000 10.600000 15.363472 13.900000 10.700000 15.726031 13.900000 10.800000 16.108591 13.900000 10.900000 16.511151 13.900000 11.000000 16.933710 13.900000 11.100000 17.376270 13.900000 11.200000 17.838829 13.900000 11.300000 18.321389 13.900000 11.400000 18.823949 13.900000 11.500000 19.346508 13.900000 11.600000 19.889068 13.900000 11.700000 20.451627 13.900000 11.800000 21.034187 13.900000 11.900000 21.636747 13.900000 12.000000 22.259306 13.900000 12.100000 22.901866 13.900000 12.200000 23.564426 13.900000 12.300000 24.246985 13.900000 12.400000 24.949545 13.900000 12.500000 25.672104 13.900000 12.600000 26.414664 13.900000 12.700000 27.177224 13.900000 12.800000 27.959783 13.900000 12.900000 28.762343 13.900000 13.000000 29.584902 13.900000 13.100000 30.427462 13.900000 13.200000 31.290022 13.900000 13.300000 32.172581 13.900000 13.400000 33.075141 13.900000 13.500000 33.997701 13.900000 13.600000 34.940260 13.900000 13.700000 35.902820 13.900000 13.800000 36.885379 13.900000 13.900000 37.887939 13.900000 14.000000 38.910499 13.900000 14.100000 39.953058 13.900000 14.200000 41.015618 13.900000 14.300000 42.098177 13.900000 14.400000 43.200737 13.900000 14.500000 44.323297 13.900000 14.600000 45.465856 13.900000 14.700000 46.628416 13.900000 14.800000 47.810976 13.900000 14.900000 49.013535 13.900000 15.000000 50.236095 14.000000 -5.000000 208.391656 14.000000 -4.900000 205.593961 14.000000 -4.800000 202.816267 14.000000 -4.700000 200.058572 14.000000 -4.600000 197.320878 14.000000 -4.500000 194.603184 14.000000 -4.400000 191.905489 14.000000 -4.300000 189.227795 14.000000 -4.200000 186.570101 14.000000 -4.100000 183.932406 14.000000 -4.000000 181.314712 14.000000 -3.900000 178.717018 14.000000 -3.800000 176.139323 14.000000 -3.700000 173.581629 14.000000 -3.600000 171.043935 14.000000 -3.500000 168.526240 14.000000 -3.400000 166.028546 14.000000 -3.300000 163.550852 14.000000 -3.200000 161.093157 14.000000 -3.100000 158.655463 14.000000 -3.000000 156.237768 14.000000 -2.900000 153.840074 14.000000 -2.800000 151.462380 14.000000 -2.700000 149.104685 14.000000 -2.600000 146.766991 14.000000 -2.500000 144.449297 14.000000 -2.400000 142.151602 14.000000 -2.300000 139.873908 14.000000 -2.200000 137.616214 14.000000 -2.100000 135.378519 14.000000 -2.000000 133.160825 14.000000 -1.900000 130.963131 14.000000 -1.800000 128.785436 14.000000 -1.700000 126.627742 14.000000 -1.600000 124.490048 14.000000 -1.500000 122.372353 14.000000 -1.400000 120.274659 14.000000 -1.300000 118.196964 14.000000 -1.200000 116.139270 14.000000 -1.100000 114.101576 14.000000 -1.000000 112.083881 14.000000 -0.900000 110.086187 14.000000 -0.800000 108.108493 14.000000 -0.700000 106.150798 14.000000 -0.600000 104.213104 14.000000 -0.500000 102.295410 14.000000 -0.400000 100.397715 14.000000 -0.300000 98.520021 14.000000 -0.200000 96.662327 14.000000 -0.100000 94.824632 14.000000 -0.000000 93.006938 14.000000 0.100000 91.209244 14.000000 0.200000 89.431549 14.000000 0.300000 87.673855 14.000000 0.400000 85.936161 14.000000 0.500000 84.218466 14.000000 0.600000 82.520772 14.000000 0.700000 80.843077 14.000000 0.800000 79.185383 14.000000 0.900000 77.547689 14.000000 1.000000 75.929994 14.000000 1.100000 74.332300 14.000000 1.200000 72.754606 14.000000 1.300000 71.196911 14.000000 1.400000 69.659217 14.000000 1.500000 68.141523 14.000000 1.600000 66.643828 14.000000 1.700000 65.166134 14.000000 1.800000 63.708440 14.000000 1.900000 62.270745 14.000000 2.000000 60.853051 14.000000 2.100000 59.455357 14.000000 2.200000 58.077662 14.000000 2.300000 56.719968 14.000000 2.400000 55.382273 14.000000 2.500000 54.064579 14.000000 2.600000 52.766885 14.000000 2.700000 51.489190 14.000000 2.800000 50.231496 14.000000 2.900000 48.993802 14.000000 3.000000 47.776107 14.000000 3.100000 46.578413 14.000000 3.200000 45.400719 14.000000 3.300000 44.243024 14.000000 3.400000 43.105330 14.000000 3.500000 41.987636 14.000000 3.600000 40.889941 14.000000 3.700000 39.812247 14.000000 3.800000 38.754553 14.000000 3.900000 37.716858 14.000000 4.000000 36.699164 14.000000 4.100000 35.701469 14.000000 4.200000 34.723775 14.000000 4.300000 33.766081 14.000000 4.400000 32.828386 14.000000 4.500000 31.910692 14.000000 4.600000 31.012998 14.000000 4.700000 30.135303 14.000000 4.800000 29.277609 14.000000 4.900000 28.439915 14.000000 5.000000 27.622220 14.000000 5.100000 26.824526 14.000000 5.200000 26.046832 14.000000 5.300000 25.289137 14.000000 5.400000 24.551443 14.000000 5.500000 23.833749 14.000000 5.600000 23.136054 14.000000 5.700000 22.458360 14.000000 5.800000 21.800666 14.000000 5.900000 21.162971 14.000000 6.000000 20.545277 14.000000 6.100000 19.947582 14.000000 6.200000 19.369888 14.000000 6.300000 18.812194 14.000000 6.400000 18.274499 14.000000 6.500000 17.756805 14.000000 6.600000 17.259111 14.000000 6.700000 16.781416 14.000000 6.800000 16.323722 14.000000 6.900000 15.886028 14.000000 7.000000 15.468333 14.000000 7.100000 15.070639 14.000000 7.200000 14.692945 14.000000 7.300000 14.335250 14.000000 7.400000 13.997556 14.000000 7.500000 13.679862 14.000000 7.600000 13.382167 14.000000 7.700000 13.104473 14.000000 7.800000 12.846778 14.000000 7.900000 12.609084 14.000000 8.000000 12.391390 14.000000 8.100000 12.193695 14.000000 8.200000 12.016001 14.000000 8.300000 11.858307 14.000000 8.400000 11.720612 14.000000 8.500000 11.602918 14.000000 8.600000 11.505224 14.000000 8.700000 11.427529 14.000000 8.800000 11.369835 14.000000 8.900000 11.332141 14.000000 9.000000 11.314446 14.000000 9.100000 11.316752 14.000000 9.200000 11.339058 14.000000 9.300000 11.381363 14.000000 9.400000 11.443669 14.000000 9.500000 11.525974 14.000000 9.600000 11.628280 14.000000 9.700000 11.750586 14.000000 9.800000 11.892891 14.000000 9.900000 12.055197 14.000000 10.000000 12.237503 14.000000 10.100000 12.439808 14.000000 10.200000 12.662114 14.000000 10.300000 12.904420 14.000000 10.400000 13.166725 14.000000 10.500000 13.449031 14.000000 10.600000 13.751337 14.000000 10.700000 14.073642 14.000000 10.800000 14.415948 14.000000 10.900000 14.778254 14.000000 11.000000 15.160559 14.000000 11.100000 15.562865 14.000000 11.200000 15.985171 14.000000 11.300000 16.427476 14.000000 11.400000 16.889782 14.000000 11.500000 17.372087 14.000000 11.600000 17.874393 14.000000 11.700000 18.396699 14.000000 11.800000 18.939004 14.000000 11.900000 19.501310 14.000000 12.000000 20.083616 14.000000 12.100000 20.685921 14.000000 12.200000 21.308227 14.000000 12.300000 21.950533 14.000000 12.400000 22.612838 14.000000 12.500000 23.295144 14.000000 12.600000 23.997450 14.000000 12.700000 24.719755 14.000000 12.800000 25.462061 14.000000 12.900000 26.224367 14.000000 13.000000 27.006672 14.000000 13.100000 27.808978 14.000000 13.200000 28.631283 14.000000 13.300000 29.473589 14.000000 13.400000 30.335895 14.000000 13.500000 31.218200 14.000000 13.600000 32.120506 14.000000 13.700000 33.042812 14.000000 13.800000 33.985117 14.000000 13.900000 34.947423 14.000000 14.000000 35.929729 14.000000 14.100000 36.932034 14.000000 14.200000 37.954340 14.000000 14.300000 38.996646 14.000000 14.400000 40.058951 14.000000 14.500000 41.141257 14.000000 14.600000 42.243563 14.000000 14.700000 43.365868 14.000000 14.800000 44.508174 14.000000 14.900000 45.670479 14.000000 15.000000 46.852785 14.100000 -5.000000 213.200629 14.100000 -4.900000 210.362164 14.100000 -4.800000 207.543698 14.100000 -4.700000 204.745233 14.100000 -4.600000 201.966768 14.100000 -4.500000 199.208303 14.100000 -4.400000 196.469838 14.100000 -4.300000 193.751373 14.100000 -4.200000 191.052908 14.100000 -4.100000 188.374443 14.100000 -4.000000 185.715978 14.100000 -3.900000 183.077513 14.100000 -3.800000 180.459048 14.100000 -3.700000 177.860583 14.100000 -3.600000 175.282118 14.100000 -3.500000 172.723653 14.100000 -3.400000 170.185188 14.100000 -3.300000 167.666723 14.100000 -3.200000 165.168258 14.100000 -3.100000 162.689792 14.100000 -3.000000 160.231327 14.100000 -2.900000 157.792862 14.100000 -2.800000 155.374397 14.100000 -2.700000 152.975932 14.100000 -2.600000 150.597467 14.100000 -2.500000 148.239002 14.100000 -2.400000 145.900537 14.100000 -2.300000 143.582072 14.100000 -2.200000 141.283607 14.100000 -2.100000 139.005142 14.100000 -2.000000 136.746677 14.100000 -1.900000 134.508212 14.100000 -1.800000 132.289747 14.100000 -1.700000 130.091282 14.100000 -1.600000 127.912817 14.100000 -1.500000 125.754352 14.100000 -1.400000 123.615887 14.100000 -1.300000 121.497421 14.100000 -1.200000 119.398956 14.100000 -1.100000 117.320491 14.100000 -1.000000 115.262026 14.100000 -0.900000 113.223561 14.100000 -0.800000 111.205096 14.100000 -0.700000 109.206631 14.100000 -0.600000 107.228166 14.100000 -0.500000 105.269701 14.100000 -0.400000 103.331236 14.100000 -0.300000 101.412771 14.100000 -0.200000 99.514306 14.100000 -0.100000 97.635841 14.100000 -0.000000 95.777376 14.100000 0.100000 93.938911 14.100000 0.200000 92.120446 14.100000 0.300000 90.321981 14.100000 0.400000 88.543515 14.100000 0.500000 86.785050 14.100000 0.600000 85.046585 14.100000 0.700000 83.328120 14.100000 0.800000 81.629655 14.100000 0.900000 79.951190 14.100000 1.000000 78.292725 14.100000 1.100000 76.654260 14.100000 1.200000 75.035795 14.100000 1.300000 73.437330 14.100000 1.400000 71.858865 14.100000 1.500000 70.300400 14.100000 1.600000 68.761935 14.100000 1.700000 67.243470 14.100000 1.800000 65.745005 14.100000 1.900000 64.266540 14.100000 2.000000 62.808075 14.100000 2.100000 61.369610 14.100000 2.200000 59.951144 14.100000 2.300000 58.552679 14.100000 2.400000 57.174214 14.100000 2.500000 55.815749 14.100000 2.600000 54.477284 14.100000 2.700000 53.158819 14.100000 2.800000 51.860354 14.100000 2.900000 50.581889 14.100000 3.000000 49.323424 14.100000 3.100000 48.084959 14.100000 3.200000 46.866494 14.100000 3.300000 45.668029 14.100000 3.400000 44.489564 14.100000 3.500000 43.331099 14.100000 3.600000 42.192634 14.100000 3.700000 41.074169 14.100000 3.800000 39.975704 14.100000 3.900000 38.897238 14.100000 4.000000 37.838773 14.100000 4.100000 36.800308 14.100000 4.200000 35.781843 14.100000 4.300000 34.783378 14.100000 4.400000 33.804913 14.100000 4.500000 32.846448 14.100000 4.600000 31.907983 14.100000 4.700000 30.989518 14.100000 4.800000 30.091053 14.100000 4.900000 29.212588 14.100000 5.000000 28.354123 14.100000 5.100000 27.515658 14.100000 5.200000 26.697193 14.100000 5.300000 25.898728 14.100000 5.400000 25.120263 14.100000 5.500000 24.361798 14.100000 5.600000 23.623332 14.100000 5.700000 22.904867 14.100000 5.800000 22.206402 14.100000 5.900000 21.527937 14.100000 6.000000 20.869472 14.100000 6.100000 20.231007 14.100000 6.200000 19.612542 14.100000 6.300000 19.014077 14.100000 6.400000 18.435612 14.100000 6.500000 17.877147 14.100000 6.600000 17.338682 14.100000 6.700000 16.820217 14.100000 6.800000 16.321752 14.100000 6.900000 15.843287 14.100000 7.000000 15.384822 14.100000 7.100000 14.946357 14.100000 7.200000 14.527892 14.100000 7.300000 14.129427 14.100000 7.400000 13.750961 14.100000 7.500000 13.392496 14.100000 7.600000 13.054031 14.100000 7.700000 12.735566 14.100000 7.800000 12.437101 14.100000 7.900000 12.158636 14.100000 8.000000 11.900171 14.100000 8.100000 11.661706 14.100000 8.200000 11.443241 14.100000 8.300000 11.244776 14.100000 8.400000 11.066311 14.100000 8.500000 10.907846 14.100000 8.600000 10.769381 14.100000 8.700000 10.650916 14.100000 8.800000 10.552451 14.100000 8.900000 10.473986 14.100000 9.000000 10.415521 14.100000 9.100000 10.377055 14.100000 9.200000 10.358590 14.100000 9.300000 10.360125 14.100000 9.400000 10.381660 14.100000 9.500000 10.423195 14.100000 9.600000 10.484730 14.100000 9.700000 10.566265 14.100000 9.800000 10.667800 14.100000 9.900000 10.789335 14.100000 10.000000 10.930870 14.100000 10.100000 11.092405 14.100000 10.200000 11.273940 14.100000 10.300000 11.475475 14.100000 10.400000 11.697010 14.100000 10.500000 11.938545 14.100000 10.600000 12.200080 14.100000 10.700000 12.481615 14.100000 10.800000 12.783150 14.100000 10.900000 13.104684 14.100000 11.000000 13.446219 14.100000 11.100000 13.807754 14.100000 11.200000 14.189289 14.100000 11.300000 14.590824 14.100000 11.400000 15.012359 14.100000 11.500000 15.453894 14.100000 11.600000 15.915429 14.100000 11.700000 16.396964 14.100000 11.800000 16.898499 14.100000 11.900000 17.420034 14.100000 12.000000 17.961569 14.100000 12.100000 18.523104 14.100000 12.200000 19.104639 14.100000 12.300000 19.706174 14.100000 12.400000 20.327709 14.100000 12.500000 20.969244 14.100000 12.600000 21.630778 14.100000 12.700000 22.312313 14.100000 12.800000 23.013848 14.100000 12.900000 23.735383 14.100000 13.000000 24.476918 14.100000 13.100000 25.238453 14.100000 13.200000 26.019988 14.100000 13.300000 26.821523 14.100000 13.400000 27.643058 14.100000 13.500000 28.484593 14.100000 13.600000 29.346128 14.100000 13.700000 30.227663 14.100000 13.800000 31.129198 14.100000 13.900000 32.050733 14.100000 14.000000 32.992268 14.100000 14.100000 33.953803 14.100000 14.200000 34.935338 14.100000 14.300000 35.936872 14.100000 14.400000 36.958407 14.100000 14.500000 37.999942 14.100000 14.600000 39.061477 14.100000 14.700000 40.143012 14.100000 14.800000 41.244547 14.100000 14.900000 42.366082 14.100000 15.000000 43.507617 14.200000 -5.000000 218.163805 14.200000 -4.900000 215.284052 14.200000 -4.800000 212.424300 14.200000 -4.700000 209.584547 14.200000 -4.600000 206.764795 14.200000 -4.500000 203.965042 14.200000 -4.400000 201.185290 14.200000 -4.300000 198.425537 14.200000 -4.200000 195.685785 14.200000 -4.100000 192.966032 14.200000 -4.000000 190.266280 14.200000 -3.900000 187.586527 14.200000 -3.800000 184.926775 14.200000 -3.700000 182.287022 14.200000 -3.600000 179.667270 14.200000 -3.500000 177.067517 14.200000 -3.400000 174.487765 14.200000 -3.300000 171.928012 14.200000 -3.200000 169.388260 14.200000 -3.100000 166.868507 14.200000 -3.000000 164.368755 14.200000 -2.900000 161.889002 14.200000 -2.800000 159.429250 14.200000 -2.700000 156.989497 14.200000 -2.600000 154.569745 14.200000 -2.500000 152.169992 14.200000 -2.400000 149.790240 14.200000 -2.300000 147.430487 14.200000 -2.200000 145.090735 14.200000 -2.100000 142.770982 14.200000 -2.000000 140.471230 14.200000 -1.900000 138.191477 14.200000 -1.800000 135.931725 14.200000 -1.700000 133.691972 14.200000 -1.600000 131.472220 14.200000 -1.500000 129.272467 14.200000 -1.400000 127.092715 14.200000 -1.300000 124.932962 14.200000 -1.200000 122.793210 14.200000 -1.100000 120.673457 14.200000 -1.000000 118.573705 14.200000 -0.900000 116.493952 14.200000 -0.800000 114.434200 14.200000 -0.700000 112.394447 14.200000 -0.600000 110.374695 14.200000 -0.500000 108.374942 14.200000 -0.400000 106.395190 14.200000 -0.300000 104.435437 14.200000 -0.200000 102.495685 14.200000 -0.100000 100.575932 14.200000 -0.000000 98.676180 14.200000 0.100000 96.796427 14.200000 0.200000 94.936675 14.200000 0.300000 93.096922 14.200000 0.400000 91.277170 14.200000 0.500000 89.477417 14.200000 0.600000 87.697665 14.200000 0.700000 85.937912 14.200000 0.800000 84.198160 14.200000 0.900000 82.478407 14.200000 1.000000 80.778655 14.200000 1.100000 79.098902 14.200000 1.200000 77.439150 14.200000 1.300000 75.799397 14.200000 1.400000 74.179645 14.200000 1.500000 72.579892 14.200000 1.600000 71.000140 14.200000 1.700000 69.440387 14.200000 1.800000 67.900635 14.200000 1.900000 66.380882 14.200000 2.000000 64.881130 14.200000 2.100000 63.401377 14.200000 2.200000 61.941625 14.200000 2.300000 60.501872 14.200000 2.400000 59.082120 14.200000 2.500000 57.682367 14.200000 2.600000 56.302615 14.200000 2.700000 54.942862 14.200000 2.800000 53.603110 14.200000 2.900000 52.283357 14.200000 3.000000 50.983605 14.200000 3.100000 49.703852 14.200000 3.200000 48.444100 14.200000 3.300000 47.204347 14.200000 3.400000 45.984595 14.200000 3.500000 44.784842 14.200000 3.600000 43.605090 14.200000 3.700000 42.445337 14.200000 3.800000 41.305585 14.200000 3.900000 40.185832 14.200000 4.000000 39.086080 14.200000 4.100000 38.006327 14.200000 4.200000 36.946575 14.200000 4.300000 35.906822 14.200000 4.400000 34.887070 14.200000 4.500000 33.887317 14.200000 4.600000 32.907565 14.200000 4.700000 31.947812 14.200000 4.800000 31.008060 14.200000 4.900000 30.088307 14.200000 5.000000 29.188555 14.200000 5.100000 28.308802 14.200000 5.200000 27.449050 14.200000 5.300000 26.609297 14.200000 5.400000 25.789545 14.200000 5.500000 24.989792 14.200000 5.600000 24.210040 14.200000 5.700000 23.450287 14.200000 5.800000 22.710535 14.200000 5.900000 21.990782 14.200000 6.000000 21.291030 14.200000 6.100000 20.611277 14.200000 6.200000 19.951525 14.200000 6.300000 19.311772 14.200000 6.400000 18.692020 14.200000 6.500000 18.092267 14.200000 6.600000 17.512515 14.200000 6.700000 16.952762 14.200000 6.800000 16.413010 14.200000 6.900000 15.893257 14.200000 7.000000 15.393505 14.200000 7.100000 14.913752 14.200000 7.200000 14.454000 14.200000 7.300000 14.014247 14.200000 7.400000 13.594495 14.200000 7.500000 13.194742 14.200000 7.600000 12.814990 14.200000 7.700000 12.455237 14.200000 7.800000 12.115485 14.200000 7.900000 11.795732 14.200000 8.000000 11.495980 14.200000 8.100000 11.216227 14.200000 8.200000 10.956475 14.200000 8.300000 10.716722 14.200000 8.400000 10.496970 14.200000 8.500000 10.297217 14.200000 8.600000 10.117465 14.200000 8.700000 9.957712 14.200000 8.800000 9.817960 14.200000 8.900000 9.698207 14.200000 9.000000 9.598455 14.200000 9.100000 9.518702 14.200000 9.200000 9.458950 14.200000 9.300000 9.419197 14.200000 9.400000 9.399445 14.200000 9.500000 9.399692 14.200000 9.600000 9.419940 14.200000 9.700000 9.460187 14.200000 9.800000 9.520435 14.200000 9.900000 9.600682 14.200000 10.000000 9.700930 14.200000 10.100000 9.821177 14.200000 10.200000 9.961425 14.200000 10.300000 10.121672 14.200000 10.400000 10.301920 14.200000 10.500000 10.502167 14.200000 10.600000 10.722415 14.200000 10.700000 10.962662 14.200000 10.800000 11.222910 14.200000 10.900000 11.503157 14.200000 11.000000 11.803405 14.200000 11.100000 12.123652 14.200000 11.200000 12.463900 14.200000 11.300000 12.824147 14.200000 11.400000 13.204395 14.200000 11.500000 13.604642 14.200000 11.600000 14.024890 14.200000 11.700000 14.465137 14.200000 11.800000 14.925385 14.200000 11.900000 15.405632 14.200000 12.000000 15.905880 14.200000 12.100000 16.426127 14.200000 12.200000 16.966375 14.200000 12.300000 17.526622 14.200000 12.400000 18.106870 14.200000 12.500000 18.707117 14.200000 12.600000 19.327365 14.200000 12.700000 19.967612 14.200000 12.800000 20.627860 14.200000 12.900000 21.308107 14.200000 13.000000 22.008355 14.200000 13.100000 22.728602 14.200000 13.200000 23.468850 14.200000 13.300000 24.229097 14.200000 13.400000 25.009345 14.200000 13.500000 25.809592 14.200000 13.600000 26.629840 14.200000 13.700000 27.470087 14.200000 13.800000 28.330335 14.200000 13.900000 29.210582 14.200000 14.000000 30.110830 14.200000 14.100000 31.031077 14.200000 14.200000 31.971325 14.200000 14.300000 32.931572 14.200000 14.400000 33.911820 14.200000 14.500000 34.912067 14.200000 14.600000 35.932315 14.200000 14.700000 36.972562 14.200000 14.800000 38.032810 14.200000 14.900000 39.113057 14.200000 15.000000 40.213305 14.300000 -5.000000 223.293973 14.300000 -4.900000 220.372417 14.300000 -4.800000 217.470860 14.300000 -4.700000 214.589303 14.300000 -4.600000 211.727747 14.300000 -4.500000 208.886190 14.300000 -4.400000 206.064633 14.300000 -4.300000 203.263077 14.300000 -4.200000 200.481520 14.300000 -4.100000 197.719963 14.300000 -4.000000 194.978407 14.300000 -3.900000 192.256850 14.300000 -3.800000 189.555293 14.300000 -3.700000 186.873737 14.300000 -3.600000 184.212180 14.300000 -3.500000 181.570623 14.300000 -3.400000 178.949067 14.300000 -3.300000 176.347510 14.300000 -3.200000 173.765953 14.300000 -3.100000 171.204397 14.300000 -3.000000 168.662840 14.300000 -2.900000 166.141283 14.300000 -2.800000 163.639726 14.300000 -2.700000 161.158170 14.300000 -2.600000 158.696613 14.300000 -2.500000 156.255056 14.300000 -2.400000 153.833500 14.300000 -2.300000 151.431943 14.300000 -2.200000 149.050386 14.300000 -2.100000 146.688830 14.300000 -2.000000 144.347273 14.300000 -1.900000 142.025716 14.300000 -1.800000 139.724160 14.300000 -1.700000 137.442603 14.300000 -1.600000 135.181046 14.300000 -1.500000 132.939490 14.300000 -1.400000 130.717933 14.300000 -1.300000 128.516376 14.300000 -1.200000 126.334820 14.300000 -1.100000 124.173263 14.300000 -1.000000 122.031706 14.300000 -0.900000 119.910150 14.300000 -0.800000 117.808593 14.300000 -0.700000 115.727036 14.300000 -0.600000 113.665479 14.300000 -0.500000 111.623923 14.300000 -0.400000 109.602366 14.300000 -0.300000 107.600809 14.300000 -0.200000 105.619253 14.300000 -0.100000 103.657696 14.300000 -0.000000 101.716139 14.300000 0.100000 99.794583 14.300000 0.200000 97.893026 14.300000 0.300000 96.011469 14.300000 0.400000 94.149913 14.300000 0.500000 92.308356 14.300000 0.600000 90.486799 14.300000 0.700000 88.685243 14.300000 0.800000 86.903686 14.300000 0.900000 85.142129 14.300000 1.000000 83.400573 14.300000 1.100000 81.679016 14.300000 1.200000 79.977459 14.300000 1.300000 78.295902 14.300000 1.400000 76.634346 14.300000 1.500000 74.992789 14.300000 1.600000 73.371232 14.300000 1.700000 71.769676 14.300000 1.800000 70.188119 14.300000 1.900000 68.626562 14.300000 2.000000 67.085006 14.300000 2.100000 65.563449 14.300000 2.200000 64.061892 14.300000 2.300000 62.580336 14.300000 2.400000 61.118779 14.300000 2.500000 59.677222 14.300000 2.600000 58.255666 14.300000 2.700000 56.854109 14.300000 2.800000 55.472552 14.300000 2.900000 54.110996 14.300000 3.000000 52.769439 14.300000 3.100000 51.447882 14.300000 3.200000 50.146326 14.300000 3.300000 48.864769 14.300000 3.400000 47.603212 14.300000 3.500000 46.361655 14.300000 3.600000 45.140099 14.300000 3.700000 43.938542 14.300000 3.800000 42.756985 14.300000 3.900000 41.595429 14.300000 4.000000 40.453872 14.300000 4.100000 39.332315 14.300000 4.200000 38.230759 14.300000 4.300000 37.149202 14.300000 4.400000 36.087645 14.300000 4.500000 35.046089 14.300000 4.600000 34.024532 14.300000 4.700000 33.022975 14.300000 4.800000 32.041419 14.300000 4.900000 31.079862 14.300000 5.000000 30.138305 14.300000 5.100000 29.216749 14.300000 5.200000 28.315192 14.300000 5.300000 27.433635 14.300000 5.400000 26.572079 14.300000 5.500000 25.730522 14.300000 5.600000 24.908965 14.300000 5.700000 24.107408 14.300000 5.800000 23.325852 14.300000 5.900000 22.564295 14.300000 6.000000 21.822738 14.300000 6.100000 21.101182 14.300000 6.200000 20.399625 14.300000 6.300000 19.718068 14.300000 6.400000 19.056512 14.300000 6.500000 18.414955 14.300000 6.600000 17.793398 14.300000 6.700000 17.191842 14.300000 6.800000 16.610285 14.300000 6.900000 16.048728 14.300000 7.000000 15.507172 14.300000 7.100000 14.985615 14.300000 7.200000 14.484058 14.300000 7.300000 14.002502 14.300000 7.400000 13.540945 14.300000 7.500000 13.099388 14.300000 7.600000 12.677831 14.300000 7.700000 12.276275 14.300000 7.800000 11.894718 14.300000 7.900000 11.533161 14.300000 8.000000 11.191605 14.300000 8.100000 10.870048 14.300000 8.200000 10.568491 14.300000 8.300000 10.286935 14.300000 8.400000 10.025378 14.300000 8.500000 9.783821 14.300000 8.600000 9.562265 14.300000 8.700000 9.360708 14.300000 8.800000 9.179151 14.300000 8.900000 9.017595 14.300000 9.000000 8.876038 14.300000 9.100000 8.754481 14.300000 9.200000 8.652925 14.300000 9.300000 8.571368 14.300000 9.400000 8.509811 14.300000 9.500000 8.468255 14.300000 9.600000 8.446698 14.300000 9.700000 8.445141 14.300000 9.800000 8.463584 14.300000 9.900000 8.502028 14.300000 10.000000 8.560471 14.300000 10.100000 8.638914 14.300000 10.200000 8.737358 14.300000 10.300000 8.855801 14.300000 10.400000 8.994244 14.300000 10.500000 9.152688 14.300000 10.600000 9.331131 14.300000 10.700000 9.529574 14.300000 10.800000 9.748018 14.300000 10.900000 9.986461 14.300000 11.000000 10.244904 14.300000 11.100000 10.523348 14.300000 11.200000 10.821791 14.300000 11.300000 11.140234 14.300000 11.400000 11.478678 14.300000 11.500000 11.837121 14.300000 11.600000 12.215564 14.300000 11.700000 12.614008 14.300000 11.800000 13.032451 14.300000 11.900000 13.470894 14.300000 12.000000 13.929337 14.300000 12.100000 14.407781 14.300000 12.200000 14.906224 14.300000 12.300000 15.424667 14.300000 12.400000 15.963111 14.300000 12.500000 16.521554 14.300000 12.600000 17.099997 14.300000 12.700000 17.698441 14.300000 12.800000 18.316884 14.300000 12.900000 18.955327 14.300000 13.000000 19.613771 14.300000 13.100000 20.292214 14.300000 13.200000 20.990657 14.300000 13.300000 21.709101 14.300000 13.400000 22.447544 14.300000 13.500000 23.205987 14.300000 13.600000 23.984431 14.300000 13.700000 24.782874 14.300000 13.800000 25.601317 14.300000 13.900000 26.439760 14.300000 14.000000 27.298204 14.300000 14.100000 28.176647 14.300000 14.200000 29.075090 14.300000 14.300000 29.993534 14.300000 14.400000 30.931977 14.300000 14.500000 31.890420 14.300000 14.600000 32.868864 14.300000 14.700000 33.867307 14.300000 14.800000 34.885750 14.300000 14.900000 35.924194 14.300000 15.000000 36.982637 14.400000 -5.000000 228.603904 14.400000 -4.900000 225.640027 14.400000 -4.800000 222.696149 14.400000 -4.700000 219.772271 14.400000 -4.600000 216.868394 14.400000 -4.500000 213.984516 14.400000 -4.400000 211.120639 14.400000 -4.300000 208.276761 14.400000 -4.200000 205.452883 14.400000 -4.100000 202.649006 14.400000 -4.000000 199.865128 14.400000 -3.900000 197.101251 14.400000 -3.800000 194.357373 14.400000 -3.700000 191.633495 14.400000 -3.600000 188.929618 14.400000 -3.500000 186.245740 14.400000 -3.400000 183.581863 14.400000 -3.300000 180.937985 14.400000 -3.200000 178.314107 14.400000 -3.100000 175.710230 14.400000 -3.000000 173.126352 14.400000 -2.900000 170.562475 14.400000 -2.800000 168.018597 14.400000 -2.700000 165.494719 14.400000 -2.600000 162.990842 14.400000 -2.500000 160.506964 14.400000 -2.400000 158.043087 14.400000 -2.300000 155.599209 14.400000 -2.200000 153.175331 14.400000 -2.100000 150.771454 14.400000 -2.000000 148.387576 14.400000 -1.900000 146.023699 14.400000 -1.800000 143.679821 14.400000 -1.700000 141.355943 14.400000 -1.600000 139.052066 14.400000 -1.500000 136.768188 14.400000 -1.400000 134.504311 14.400000 -1.300000 132.260433 14.400000 -1.200000 130.036555 14.400000 -1.100000 127.832678 14.400000 -1.000000 125.648800 14.400000 -0.900000 123.484923 14.400000 -0.800000 121.341045 14.400000 -0.700000 119.217167 14.400000 -0.600000 117.113290 14.400000 -0.500000 115.029412 14.400000 -0.400000 112.965535 14.400000 -0.300000 110.921657 14.400000 -0.200000 108.897779 14.400000 -0.100000 106.893902 14.400000 -0.000000 104.910024 14.400000 0.100000 102.946147 14.400000 0.200000 101.002269 14.400000 0.300000 99.078391 14.400000 0.400000 97.174514 14.400000 0.500000 95.290636 14.400000 0.600000 93.426759 14.400000 0.700000 91.582881 14.400000 0.800000 89.759003 14.400000 0.900000 87.955126 14.400000 1.000000 86.171248 14.400000 1.100000 84.407371 14.400000 1.200000 82.663493 14.400000 1.300000 80.939615 14.400000 1.400000 79.235738 14.400000 1.500000 77.551860 14.400000 1.600000 75.887983 14.400000 1.700000 74.244105 14.400000 1.800000 72.620227 14.400000 1.900000 71.016350 14.400000 2.000000 69.432472 14.400000 2.100000 67.868595 14.400000 2.200000 66.324717 14.400000 2.300000 64.800839 14.400000 2.400000 63.296962 14.400000 2.500000 61.813084 14.400000 2.600000 60.349207 14.400000 2.700000 58.905329 14.400000 2.800000 57.481451 14.400000 2.900000 56.077574 14.400000 3.000000 54.693696 14.400000 3.100000 53.329819 14.400000 3.200000 51.985941 14.400000 3.300000 50.662063 14.400000 3.400000 49.358186 14.400000 3.500000 48.074308 14.400000 3.600000 46.810431 14.400000 3.700000 45.566553 14.400000 3.800000 44.342675 14.400000 3.900000 43.138798 14.400000 4.000000 41.954920 14.400000 4.100000 40.791042 14.400000 4.200000 39.647165 14.400000 4.300000 38.523287 14.400000 4.400000 37.419410 14.400000 4.500000 36.335532 14.400000 4.600000 35.271654 14.400000 4.700000 34.227777 14.400000 4.800000 33.203899 14.400000 4.900000 32.200022 14.400000 5.000000 31.216144 14.400000 5.100000 30.252266 14.400000 5.200000 29.308389 14.400000 5.300000 28.384511 14.400000 5.400000 27.480634 14.400000 5.500000 26.596756 14.400000 5.600000 25.732878 14.400000 5.700000 24.889001 14.400000 5.800000 24.065123 14.400000 5.900000 23.261246 14.400000 6.000000 22.477368 14.400000 6.100000 21.713490 14.400000 6.200000 20.969613 14.400000 6.300000 20.245735 14.400000 6.400000 19.541858 14.400000 6.500000 18.857980 14.400000 6.600000 18.194102 14.400000 6.700000 17.550225 14.400000 6.800000 16.926347 14.400000 6.900000 16.322470 14.400000 7.000000 15.738592 14.400000 7.100000 15.174714 14.400000 7.200000 14.630837 14.400000 7.300000 14.106959 14.400000 7.400000 13.603082 14.400000 7.500000 13.119204 14.400000 7.600000 12.655326 14.400000 7.700000 12.211449 14.400000 7.800000 11.787571 14.400000 7.900000 11.383694 14.400000 8.000000 10.999816 14.400000 8.100000 10.635938 14.400000 8.200000 10.292061 14.400000 8.300000 9.968183 14.400000 8.400000 9.664306 14.400000 8.500000 9.380428 14.400000 8.600000 9.116550 14.400000 8.700000 8.872673 14.400000 8.800000 8.648795 14.400000 8.900000 8.444918 14.400000 9.000000 8.261040 14.400000 9.100000 8.097162 14.400000 9.200000 7.953285 14.400000 9.300000 7.829407 14.400000 9.400000 7.725530 14.400000 9.500000 7.641652 14.400000 9.600000 7.577774 14.400000 9.700000 7.533897 14.400000 9.800000 7.510019 14.400000 9.900000 7.506142 14.400000 10.000000 7.522264 14.400000 10.100000 7.558386 14.400000 10.200000 7.614509 14.400000 10.300000 7.690631 14.400000 10.400000 7.786754 14.400000 10.500000 7.902876 14.400000 10.600000 8.038998 14.400000 10.700000 8.195121 14.400000 10.800000 8.371243 14.400000 10.900000 8.567366 14.400000 11.000000 8.783488 14.400000 11.100000 9.019610 14.400000 11.200000 9.275733 14.400000 11.300000 9.551855 14.400000 11.400000 9.847978 14.400000 11.500000 10.164100 14.400000 11.600000 10.500222 14.400000 11.700000 10.856345 14.400000 11.800000 11.232467 14.400000 11.900000 11.628590 14.400000 12.000000 12.044712 14.400000 12.100000 12.480834 14.400000 12.200000 12.936957 14.400000 12.300000 13.413079 14.400000 12.400000 13.909202 14.400000 12.500000 14.425324 14.400000 12.600000 14.961446 14.400000 12.700000 15.517569 14.400000 12.800000 16.093691 14.400000 12.900000 16.689814 14.400000 13.000000 17.305936 14.400000 13.100000 17.942058 14.400000 13.200000 18.598181 14.400000 13.300000 19.274303 14.400000 13.400000 19.970425 14.400000 13.500000 20.686548 14.400000 13.600000 21.422670 14.400000 13.700000 22.178793 14.400000 13.800000 22.954915 14.400000 13.900000 23.751037 14.400000 14.000000 24.567160 14.400000 14.100000 25.403282 14.400000 14.200000 26.259405 14.400000 14.300000 27.135527 14.400000 14.400000 28.031649 14.400000 14.500000 28.947772 14.400000 14.600000 29.883894 14.400000 14.700000 30.840017 14.400000 14.800000 31.816139 14.400000 14.900000 32.812261 14.400000 15.000000 33.828384 14.500000 -5.000000 234.106251 14.500000 -4.900000 231.099536 14.500000 -4.800000 228.112821 14.500000 -4.700000 225.146105 14.500000 -4.600000 222.199390 14.500000 -4.500000 219.272675 14.500000 -4.400000 216.365960 14.500000 -4.300000 213.479244 14.500000 -4.200000 210.612529 14.500000 -4.100000 207.765814 14.500000 -4.000000 204.939099 14.500000 -3.900000 202.132383 14.500000 -3.800000 199.345668 14.500000 -3.700000 196.578953 14.500000 -3.600000 193.832238 14.500000 -3.500000 191.105522 14.500000 -3.400000 188.398807 14.500000 -3.300000 185.712092 14.500000 -3.200000 183.045377 14.500000 -3.100000 180.398661 14.500000 -3.000000 177.771946 14.500000 -2.900000 175.165231 14.500000 -2.800000 172.578515 14.500000 -2.700000 170.011800 14.500000 -2.600000 167.465085 14.500000 -2.500000 164.938370 14.500000 -2.400000 162.431654 14.500000 -2.300000 159.944939 14.500000 -2.200000 157.478224 14.500000 -2.100000 155.031509 14.500000 -2.000000 152.604793 14.500000 -1.900000 150.198078 14.500000 -1.800000 147.811363 14.500000 -1.700000 145.444648 14.500000 -1.600000 143.097932 14.500000 -1.500000 140.771217 14.500000 -1.400000 138.464502 14.500000 -1.300000 136.177787 14.500000 -1.200000 133.911071 14.500000 -1.100000 131.664356 14.500000 -1.000000 129.437641 14.500000 -0.900000 127.230926 14.500000 -0.800000 125.044210 14.500000 -0.700000 122.877495 14.500000 -0.600000 120.730780 14.500000 -0.500000 118.604064 14.500000 -0.400000 116.497349 14.500000 -0.300000 114.410634 14.500000 -0.200000 112.343919 14.500000 -0.100000 110.297203 14.500000 -0.000000 108.270488 14.500000 0.100000 106.263773 14.500000 0.200000 104.277058 14.500000 0.300000 102.310342 14.500000 0.400000 100.363627 14.500000 0.500000 98.436912 14.500000 0.600000 96.530197 14.500000 0.700000 94.643481 14.500000 0.800000 92.776766 14.500000 0.900000 90.930051 14.500000 1.000000 89.103336 14.500000 1.100000 87.296620 14.500000 1.200000 85.509905 14.500000 1.300000 83.743190 14.500000 1.400000 81.996475 14.500000 1.500000 80.269759 14.500000 1.600000 78.563044 14.500000 1.700000 76.876329 14.500000 1.800000 75.209614 14.500000 1.900000 73.562898 14.500000 2.000000 71.936183 14.500000 2.100000 70.329468 14.500000 2.200000 68.742752 14.500000 2.300000 67.176037 14.500000 2.400000 65.629322 14.500000 2.500000 64.102607 14.500000 2.600000 62.595891 14.500000 2.700000 61.109176 14.500000 2.800000 59.642461 14.500000 2.900000 58.195746 14.500000 3.000000 56.769030 14.500000 3.100000 55.362315 14.500000 3.200000 53.975600 14.500000 3.300000 52.608885 14.500000 3.400000 51.262169 14.500000 3.500000 49.935454 14.500000 3.600000 48.628739 14.500000 3.700000 47.342024 14.500000 3.800000 46.075308 14.500000 3.900000 44.828593 14.500000 4.000000 43.601878 14.500000 4.100000 42.395163 14.500000 4.200000 41.208447 14.500000 4.300000 40.041732 14.500000 4.400000 38.895017 14.500000 4.500000 37.768301 14.500000 4.600000 36.661586 14.500000 4.700000 35.574871 14.500000 4.800000 34.508156 14.500000 4.900000 33.461440 14.500000 5.000000 32.434725 14.500000 5.100000 31.428010 14.500000 5.200000 30.441295 14.500000 5.300000 29.474579 14.500000 5.400000 28.527864 14.500000 5.500000 27.601149 14.500000 5.600000 26.694434 14.500000 5.700000 25.807718 14.500000 5.800000 24.941003 14.500000 5.900000 24.094288 14.500000 6.000000 23.267573 14.500000 6.100000 22.460857 14.500000 6.200000 21.674142 14.500000 6.300000 20.907427 14.500000 6.400000 20.160712 14.500000 6.500000 19.433996 14.500000 6.600000 18.727281 14.500000 6.700000 18.040566 14.500000 6.800000 17.373851 14.500000 6.900000 16.727135 14.500000 7.000000 16.100420 14.500000 7.100000 15.493705 14.500000 7.200000 14.906989 14.500000 7.300000 14.340274 14.500000 7.400000 13.793559 14.500000 7.500000 13.266844 14.500000 7.600000 12.760128 14.500000 7.700000 12.273413 14.500000 7.800000 11.806698 14.500000 7.900000 11.359983 14.500000 8.000000 10.933267 14.500000 8.100000 10.526552 14.500000 8.200000 10.139837 14.500000 8.300000 9.773122 14.500000 8.400000 9.426406 14.500000 8.500000 9.099691 14.500000 8.600000 8.792976 14.500000 8.700000 8.506261 14.500000 8.800000 8.239545 14.500000 8.900000 7.992830 14.500000 9.000000 7.766115 14.500000 9.100000 7.559400 14.500000 9.200000 7.372684 14.500000 9.300000 7.205969 14.500000 9.400000 7.059254 14.500000 9.500000 6.932539 14.500000 9.600000 6.825823 14.500000 9.700000 6.739108 14.500000 9.800000 6.672393 14.500000 9.900000 6.625677 14.500000 10.000000 6.598962 14.500000 10.100000 6.592247 14.500000 10.200000 6.605532 14.500000 10.300000 6.638816 14.500000 10.400000 6.692101 14.500000 10.500000 6.765386 14.500000 10.600000 6.858671 14.500000 10.700000 6.971955 14.500000 10.800000 7.105240 14.500000 10.900000 7.258525 14.500000 11.000000 7.431810 14.500000 11.100000 7.625094 14.500000 11.200000 7.838379 14.500000 11.300000 8.071664 14.500000 11.400000 8.324949 14.500000 11.500000 8.598233 14.500000 11.600000 8.891518 14.500000 11.700000 9.204803 14.500000 11.800000 9.538088 14.500000 11.900000 9.891372 14.500000 12.000000 10.264657 14.500000 12.100000 10.657942 14.500000 12.200000 11.071226 14.500000 12.300000 11.504511 14.500000 12.400000 11.957796 14.500000 12.500000 12.431081 14.500000 12.600000 12.924365 14.500000 12.700000 13.437650 14.500000 12.800000 13.970935 14.500000 12.900000 14.524220 14.500000 13.000000 15.097504 14.500000 13.100000 15.690789 14.500000 13.200000 16.304074 14.500000 13.300000 16.937359 14.500000 13.400000 17.590643 14.500000 13.500000 18.263928 14.500000 13.600000 18.957213 14.500000 13.700000 19.670498 14.500000 13.800000 20.403782 14.500000 13.900000 21.157067 14.500000 14.000000 21.930352 14.500000 14.100000 22.723637 14.500000 14.200000 23.536921 14.500000 14.300000 24.370206 14.500000 14.400000 25.223491 14.500000 14.500000 26.096776 14.500000 14.600000 26.990060 14.500000 14.700000 27.903345 14.500000 14.800000 28.836630 14.500000 14.900000 29.789914 14.500000 15.000000 30.763199 14.600000 -5.000000 239.813459 14.600000 -4.900000 236.763390 14.600000 -4.800000 233.733320 14.600000 -4.700000 230.723250 14.600000 -4.600000 227.733181 14.600000 -4.500000 224.763111 14.600000 -4.400000 221.813041 14.600000 -4.300000 218.882972 14.600000 -4.200000 215.972902 14.600000 -4.100000 213.082832 14.600000 -4.000000 210.212763 14.600000 -3.900000 207.362693 14.600000 -3.800000 204.532623 14.600000 -3.700000 201.722554 14.600000 -3.600000 198.932484 14.600000 -3.500000 196.162414 14.600000 -3.400000 193.412345 14.600000 -3.300000 190.682275 14.600000 -3.200000 187.972205 14.600000 -3.100000 185.282136 14.600000 -3.000000 182.612066 14.600000 -2.900000 179.961996 14.600000 -2.800000 177.331927 14.600000 -2.700000 174.721857 14.600000 -2.600000 172.131787 14.600000 -2.500000 169.561718 14.600000 -2.400000 167.011648 14.600000 -2.300000 164.481578 14.600000 -2.200000 161.971509 14.600000 -2.100000 159.481439 14.600000 -2.000000 157.011370 14.600000 -1.900000 154.561300 14.600000 -1.800000 152.131230 14.600000 -1.700000 149.721161 14.600000 -1.600000 147.331091 14.600000 -1.500000 144.961021 14.600000 -1.400000 142.610952 14.600000 -1.300000 140.280882 14.600000 -1.200000 137.970812 14.600000 -1.100000 135.680743 14.600000 -1.000000 133.410673 14.600000 -0.900000 131.160603 14.600000 -0.800000 128.930534 14.600000 -0.700000 126.720464 14.600000 -0.600000 124.530394 14.600000 -0.500000 122.360325 14.600000 -0.400000 120.210255 14.600000 -0.300000 118.080185 14.600000 -0.200000 115.970116 14.600000 -0.100000 113.880046 14.600000 -0.000000 111.809976 14.600000 0.100000 109.759907 14.600000 0.200000 107.729837 14.600000 0.300000 105.719767 14.600000 0.400000 103.729698 14.600000 0.500000 101.759628 14.600000 0.600000 99.809558 14.600000 0.700000 97.879489 14.600000 0.800000 95.969419 14.600000 0.900000 94.079350 14.600000 1.000000 92.209280 14.600000 1.100000 90.359210 14.600000 1.200000 88.529141 14.600000 1.300000 86.719071 14.600000 1.400000 84.929001 14.600000 1.500000 83.158932 14.600000 1.600000 81.408862 14.600000 1.700000 79.678792 14.600000 1.800000 77.968723 14.600000 1.900000 76.278653 14.600000 2.000000 74.608583 14.600000 2.100000 72.958514 14.600000 2.200000 71.328444 14.600000 2.300000 69.718374 14.600000 2.400000 68.128305 14.600000 2.500000 66.558235 14.600000 2.600000 65.008165 14.600000 2.700000 63.478096 14.600000 2.800000 61.968026 14.600000 2.900000 60.477956 14.600000 3.000000 59.007887 14.600000 3.100000 57.557817 14.600000 3.200000 56.127747 14.600000 3.300000 54.717678 14.600000 3.400000 53.327608 14.600000 3.500000 51.957538 14.600000 3.600000 50.607469 14.600000 3.700000 49.277399 14.600000 3.800000 47.967330 14.600000 3.900000 46.677260 14.600000 4.000000 45.407190 14.600000 4.100000 44.157121 14.600000 4.200000 42.927051 14.600000 4.300000 41.716981 14.600000 4.400000 40.526912 14.600000 4.500000 39.356842 14.600000 4.600000 38.206772 14.600000 4.700000 37.076703 14.600000 4.800000 35.966633 14.600000 4.900000 34.876563 14.600000 5.000000 33.806494 14.600000 5.100000 32.756424 14.600000 5.200000 31.726354 14.600000 5.300000 30.716285 14.600000 5.400000 29.726215 14.600000 5.500000 28.756145 14.600000 5.600000 27.806076 14.600000 5.700000 26.876006 14.600000 5.800000 25.965936 14.600000 5.900000 25.075867 14.600000 6.000000 24.205797 14.600000 6.100000 23.355727 14.600000 6.200000 22.525658 14.600000 6.300000 21.715588 14.600000 6.400000 20.925518 14.600000 6.500000 20.155449 14.600000 6.600000 19.405379 14.600000 6.700000 18.675310 14.600000 6.800000 17.965240 14.600000 6.900000 17.275170 14.600000 7.000000 16.605101 14.600000 7.100000 15.955031 14.600000 7.200000 15.324961 14.600000 7.300000 14.714892 14.600000 7.400000 14.124822 14.600000 7.500000 13.554752 14.600000 7.600000 13.004683 14.600000 7.700000 12.474613 14.600000 7.800000 11.964543 14.600000 7.900000 11.474474 14.600000 8.000000 11.004404 14.600000 8.100000 10.554334 14.600000 8.200000 10.124265 14.600000 8.300000 9.714195 14.600000 8.400000 9.324125 14.600000 8.500000 8.954056 14.600000 8.600000 8.603986 14.600000 8.700000 8.273916 14.600000 8.800000 7.963847 14.600000 8.900000 7.673777 14.600000 9.000000 7.403707 14.600000 9.100000 7.153638 14.600000 9.200000 6.923568 14.600000 9.300000 6.713498 14.600000 9.400000 6.523429 14.600000 9.500000 6.353359 14.600000 9.600000 6.203289 14.600000 9.700000 6.073220 14.600000 9.800000 5.963150 14.600000 9.900000 5.873081 14.600000 10.000000 5.803011 14.600000 10.100000 5.752941 14.600000 10.200000 5.722872 14.600000 10.300000 5.712802 14.600000 10.400000 5.722732 14.600000 10.500000 5.752663 14.600000 10.600000 5.802593 14.600000 10.700000 5.872523 14.600000 10.800000 5.962454 14.600000 10.900000 6.072384 14.600000 11.000000 6.202314 14.600000 11.100000 6.352245 14.600000 11.200000 6.522175 14.600000 11.300000 6.712105 14.600000 11.400000 6.922036 14.600000 11.500000 7.151966 14.600000 11.600000 7.401896 14.600000 11.700000 7.671827 14.600000 11.800000 7.961757 14.600000 11.900000 8.271687 14.600000 12.000000 8.601618 14.600000 12.100000 8.951548 14.600000 12.200000 9.321478 14.600000 12.300000 9.711409 14.600000 12.400000 10.121339 14.600000 12.500000 10.551269 14.600000 12.600000 11.001200 14.600000 12.700000 11.471130 14.600000 12.800000 11.961061 14.600000 12.900000 12.470991 14.600000 13.000000 13.000921 14.600000 13.100000 13.550852 14.600000 13.200000 14.120782 14.600000 13.300000 14.710712 14.600000 13.400000 15.320643 14.600000 13.500000 15.950573 14.600000 13.600000 16.600503 14.600000 13.700000 17.270434 14.600000 13.800000 17.960364 14.600000 13.900000 18.670294 14.600000 14.000000 19.400225 14.600000 14.100000 20.150155 14.600000 14.200000 20.920085 14.600000 14.300000 21.710016 14.600000 14.400000 22.519946 14.600000 14.500000 23.349876 14.600000 14.600000 24.199807 14.600000 14.700000 25.069737 14.600000 14.800000 25.959667 14.600000 14.900000 26.869598 14.600000 15.000000 27.799528 14.700000 -5.000000 245.737673 14.700000 -4.900000 242.643732 14.700000 -4.800000 239.569792 14.700000 -4.700000 236.515851 14.700000 -4.600000 233.481910 14.700000 -4.500000 230.467969 14.700000 -4.400000 227.474028 14.700000 -4.300000 224.500088 14.700000 -4.200000 221.546147 14.700000 -4.100000 218.612206 14.700000 -4.000000 215.698265 14.700000 -3.900000 212.804325 14.700000 -3.800000 209.930384 14.700000 -3.700000 207.076443 14.700000 -3.600000 204.242502 14.700000 -3.500000 201.428561 14.700000 -3.400000 198.634621 14.700000 -3.300000 195.860680 14.700000 -3.200000 193.106739 14.700000 -3.100000 190.372798 14.700000 -3.000000 187.658857 14.700000 -2.900000 184.964917 14.700000 -2.800000 182.290976 14.700000 -2.700000 179.637035 14.700000 -2.600000 177.003094 14.700000 -2.500000 174.389153 14.700000 -2.400000 171.795213 14.700000 -2.300000 169.221272 14.700000 -2.200000 166.667331 14.700000 -2.100000 164.133390 14.700000 -2.000000 161.619450 14.700000 -1.900000 159.125509 14.700000 -1.800000 156.651568 14.700000 -1.700000 154.197627 14.700000 -1.600000 151.763686 14.700000 -1.500000 149.349746 14.700000 -1.400000 146.955805 14.700000 -1.300000 144.581864 14.700000 -1.200000 142.227923 14.700000 -1.100000 139.893982 14.700000 -1.000000 137.580042 14.700000 -0.900000 135.286101 14.700000 -0.800000 133.012160 14.700000 -0.700000 130.758219 14.700000 -0.600000 128.524278 14.700000 -0.500000 126.310338 14.700000 -0.400000 124.116397 14.700000 -0.300000 121.942456 14.700000 -0.200000 119.788515 14.700000 -0.100000 117.654575 14.700000 -0.000000 115.540634 14.700000 0.100000 113.446693 14.700000 0.200000 111.372752 14.700000 0.300000 109.318811 14.700000 0.400000 107.284871 14.700000 0.500000 105.270930 14.700000 0.600000 103.276989 14.700000 0.700000 101.303048 14.700000 0.800000 99.349107 14.700000 0.900000 97.415167 14.700000 1.000000 95.501226 14.700000 1.100000 93.607285 14.700000 1.200000 91.733344 14.700000 1.300000 89.879403 14.700000 1.400000 88.045463 14.700000 1.500000 86.231522 14.700000 1.600000 84.437581 14.700000 1.700000 82.663640 14.700000 1.800000 80.909700 14.700000 1.900000 79.175759 14.700000 2.000000 77.461818 14.700000 2.100000 75.767877 14.700000 2.200000 74.093936 14.700000 2.300000 72.439996 14.700000 2.400000 70.806055 14.700000 2.500000 69.192114 14.700000 2.600000 67.598173 14.700000 2.700000 66.024232 14.700000 2.800000 64.470292 14.700000 2.900000 62.936351 14.700000 3.000000 61.422410 14.700000 3.100000 59.928469 14.700000 3.200000 58.454528 14.700000 3.300000 57.000588 14.700000 3.400000 55.566647 14.700000 3.500000 54.152706 14.700000 3.600000 52.758765 14.700000 3.700000 51.384825 14.700000 3.800000 50.030884 14.700000 3.900000 48.696943 14.700000 4.000000 47.383002 14.700000 4.100000 46.089061 14.700000 4.200000 44.815121 14.700000 4.300000 43.561180 14.700000 4.400000 42.327239 14.700000 4.500000 41.113298 14.700000 4.600000 39.919357 14.700000 4.700000 38.745417 14.700000 4.800000 37.591476 14.700000 4.900000 36.457535 14.700000 5.000000 35.343594 14.700000 5.100000 34.249653 14.700000 5.200000 33.175713 14.700000 5.300000 32.121772 14.700000 5.400000 31.087831 14.700000 5.500000 30.073890 14.700000 5.600000 29.079950 14.700000 5.700000 28.106009 14.700000 5.800000 27.152068 14.700000 5.900000 26.218127 14.700000 6.000000 25.304186 14.700000 6.100000 24.410246 14.700000 6.200000 23.536305 14.700000 6.300000 22.682364 14.700000 6.400000 21.848423 14.700000 6.500000 21.034482 14.700000 6.600000 20.240542 14.700000 6.700000 19.466601 14.700000 6.800000 18.712660 14.700000 6.900000 17.978719 14.700000 7.000000 17.264778 14.700000 7.100000 16.570838 14.700000 7.200000 15.896897 14.700000 7.300000 15.242956 14.700000 7.400000 14.609015 14.700000 7.500000 13.995075 14.700000 7.600000 13.401134 14.700000 7.700000 12.827193 14.700000 7.800000 12.273252 14.700000 7.900000 11.739311 14.700000 8.000000 11.225371 14.700000 8.100000 10.731430 14.700000 8.200000 10.257489 14.700000 8.300000 9.803548 14.700000 8.400000 9.369607 14.700000 8.500000 8.955667 14.700000 8.600000 8.561726 14.700000 8.700000 8.187785 14.700000 8.800000 7.833844 14.700000 8.900000 7.499903 14.700000 9.000000 7.185963 14.700000 9.100000 6.892022 14.700000 9.200000 6.618081 14.700000 9.300000 6.364140 14.700000 9.400000 6.130200 14.700000 9.500000 5.916259 14.700000 9.600000 5.722318 14.700000 9.700000 5.548377 14.700000 9.800000 5.394436 14.700000 9.900000 5.260496 14.700000 10.000000 5.146555 14.700000 10.100000 5.052614 14.700000 10.200000 4.978673 14.700000 10.300000 4.924732 14.700000 10.400000 4.890792 14.700000 10.500000 4.876851 14.700000 10.600000 4.882910 14.700000 10.700000 4.908969 14.700000 10.800000 4.955028 14.700000 10.900000 5.021088 14.700000 11.000000 5.107147 14.700000 11.100000 5.213206 14.700000 11.200000 5.339265 14.700000 11.300000 5.485325 14.700000 11.400000 5.651384 14.700000 11.500000 5.837443 14.700000 11.600000 6.043502 14.700000 11.700000 6.269561 14.700000 11.800000 6.515621 14.700000 11.900000 6.781680 14.700000 12.000000 7.067739 14.700000 12.100000 7.373798 14.700000 12.200000 7.699857 14.700000 12.300000 8.045917 14.700000 12.400000 8.411976 14.700000 12.500000 8.798035 14.700000 12.600000 9.204094 14.700000 12.700000 9.630153 14.700000 12.800000 10.076213 14.700000 12.900000 10.542272 14.700000 13.000000 11.028331 14.700000 13.100000 11.534390 14.700000 13.200000 12.060450 14.700000 13.300000 12.606509 14.700000 13.400000 13.172568 14.700000 13.500000 13.758627 14.700000 13.600000 14.364686 14.700000 13.700000 14.990746 14.700000 13.800000 15.636805 14.700000 13.900000 16.302864 14.700000 14.000000 16.988923 14.700000 14.100000 17.694982 14.700000 14.200000 18.421042 14.700000 14.300000 19.167101 14.700000 14.400000 19.933160 14.700000 14.500000 20.719219 14.700000 14.600000 21.525279 14.700000 14.700000 22.351338 14.700000 14.800000 23.197397 14.700000 14.900000 24.063456 14.700000 15.000000 24.949515 14.800000 -5.000000 251.890650 14.800000 -4.900000 248.752321 14.800000 -4.800000 245.633993 14.800000 -4.700000 242.535664 14.800000 -4.600000 239.457335 14.800000 -4.500000 236.399007 14.800000 -4.400000 233.360678 14.800000 -4.300000 230.342349 14.800000 -4.200000 227.344021 14.800000 -4.100000 224.365692 14.800000 -4.000000 221.407363 14.800000 -3.900000 218.469035 14.800000 -3.800000 215.550706 14.800000 -3.700000 212.652378 14.800000 -3.600000 209.774049 14.800000 -3.500000 206.915720 14.800000 -3.400000 204.077392 14.800000 -3.300000 201.259063 14.800000 -3.200000 198.460734 14.800000 -3.100000 195.682406 14.800000 -3.000000 192.924077 14.800000 -2.900000 190.185748 14.800000 -2.800000 187.467420 14.800000 -2.700000 184.769091 14.800000 -2.600000 182.090762 14.800000 -2.500000 179.432434 14.800000 -2.400000 176.794105 14.800000 -2.300000 174.175776 14.800000 -2.200000 171.577448 14.800000 -2.100000 168.999119 14.800000 -2.000000 166.440790 14.800000 -1.900000 163.902462 14.800000 -1.800000 161.384133 14.800000 -1.700000 158.885804 14.800000 -1.600000 156.407476 14.800000 -1.500000 153.949147 14.800000 -1.400000 151.510818 14.800000 -1.300000 149.092490 14.800000 -1.200000 146.694161 14.800000 -1.100000 144.315832 14.800000 -1.000000 141.957504 14.800000 -0.900000 139.619175 14.800000 -0.800000 137.300846 14.800000 -0.700000 135.002518 14.800000 -0.600000 132.724189 14.800000 -0.500000 130.465860 14.800000 -0.400000 128.227532 14.800000 -0.300000 126.009203 14.800000 -0.200000 123.810874 14.800000 -0.100000 121.632546 14.800000 -0.000000 119.474217 14.800000 0.100000 117.335888 14.800000 0.200000 115.217560 14.800000 0.300000 113.119231 14.800000 0.400000 111.040902 14.800000 0.500000 108.982574 14.800000 0.600000 106.944245 14.800000 0.700000 104.925916 14.800000 0.800000 102.927588 14.800000 0.900000 100.949259 14.800000 1.000000 98.990930 14.800000 1.100000 97.052602 14.800000 1.200000 95.134273 14.800000 1.300000 93.235944 14.800000 1.400000 91.357616 14.800000 1.500000 89.499287 14.800000 1.600000 87.660958 14.800000 1.700000 85.842630 14.800000 1.800000 84.044301 14.800000 1.900000 82.265972 14.800000 2.000000 80.507644 14.800000 2.100000 78.769315 14.800000 2.200000 77.050986 14.800000 2.300000 75.352658 14.800000 2.400000 73.674329 14.800000 2.500000 72.016001 14.800000 2.600000 70.377672 14.800000 2.700000 68.759343 14.800000 2.800000 67.161015 14.800000 2.900000 65.582686 14.800000 3.000000 64.024357 14.800000 3.100000 62.486029 14.800000 3.200000 60.967700 14.800000 3.300000 59.469371 14.800000 3.400000 57.991043 14.800000 3.500000 56.532714 14.800000 3.600000 55.094385 14.800000 3.700000 53.676057 14.800000 3.800000 52.277728 14.800000 3.900000 50.899399 14.800000 4.000000 49.541071 14.800000 4.100000 48.202742 14.800000 4.200000 46.884413 14.800000 4.300000 45.586085 14.800000 4.400000 44.307756 14.800000 4.500000 43.049427 14.800000 4.600000 41.811099 14.800000 4.700000 40.592770 14.800000 4.800000 39.394441 14.800000 4.900000 38.216113 14.800000 5.000000 37.057784 14.800000 5.100000 35.919455 14.800000 5.200000 34.801127 14.800000 5.300000 33.702798 14.800000 5.400000 32.624469 14.800000 5.500000 31.566141 14.800000 5.600000 30.527812 14.800000 5.700000 29.509483 14.800000 5.800000 28.511155 14.800000 5.900000 27.532826 14.800000 6.000000 26.574497 14.800000 6.100000 25.636169 14.800000 6.200000 24.717840 14.800000 6.300000 23.819511 14.800000 6.400000 22.941183 14.800000 6.500000 22.082854 14.800000 6.600000 21.244525 14.800000 6.700000 20.426197 14.800000 6.800000 19.627868 14.800000 6.900000 18.849539 14.800000 7.000000 18.091211 14.800000 7.100000 17.352882 14.800000 7.200000 16.634553 14.800000 7.300000 15.936225 14.800000 7.400000 15.257896 14.800000 7.500000 14.599567 14.800000 7.600000 13.961239 14.800000 7.700000 13.342910 14.800000 7.800000 12.744581 14.800000 7.900000 12.166253 14.800000 8.000000 11.607924 14.800000 8.100000 11.069595 14.800000 8.200000 10.551267 14.800000 8.300000 10.052938 14.800000 8.400000 9.574610 14.800000 8.500000 9.116281 14.800000 8.600000 8.677952 14.800000 8.700000 8.259624 14.800000 8.800000 7.861295 14.800000 8.900000 7.482966 14.800000 9.000000 7.124638 14.800000 9.100000 6.786309 14.800000 9.200000 6.467980 14.800000 9.300000 6.169652 14.800000 9.400000 5.891323 14.800000 9.500000 5.632994 14.800000 9.600000 5.394666 14.800000 9.700000 5.176337 14.800000 9.800000 4.978008 14.800000 9.900000 4.799680 14.800000 10.000000 4.641351 14.800000 10.100000 4.503022 14.800000 10.200000 4.384694 14.800000 10.300000 4.286365 14.800000 10.400000 4.208036 14.800000 10.500000 4.149708 14.800000 10.600000 4.111379 14.800000 10.700000 4.093050 14.800000 10.800000 4.094722 14.800000 10.900000 4.116393 14.800000 11.000000 4.158064 14.800000 11.100000 4.219736 14.800000 11.200000 4.301407 14.800000 11.300000 4.403078 14.800000 11.400000 4.524750 14.800000 11.500000 4.666421 14.800000 11.600000 4.828092 14.800000 11.700000 5.009764 14.800000 11.800000 5.211435 14.800000 11.900000 5.433106 14.800000 12.000000 5.674778 14.800000 12.100000 5.936449 14.800000 12.200000 6.218120 14.800000 12.300000 6.519792 14.800000 12.400000 6.841463 14.800000 12.500000 7.183134 14.800000 12.600000 7.544806 14.800000 12.700000 7.926477 14.800000 12.800000 8.328148 14.800000 12.900000 8.749820 14.800000 13.000000 9.191491 14.800000 13.100000 9.653162 14.800000 13.200000 10.134834 14.800000 13.300000 10.636505 14.800000 13.400000 11.158176 14.800000 13.500000 11.699848 14.800000 13.600000 12.261519 14.800000 13.700000 12.843190 14.800000 13.800000 13.444862 14.800000 13.900000 14.066533 14.800000 14.000000 14.708204 14.800000 14.100000 15.369876 14.800000 14.200000 16.051547 14.800000 14.300000 16.753219 14.800000 14.400000 17.474890 14.800000 14.500000 18.216561 14.800000 14.600000 18.978233 14.800000 14.700000 19.759904 14.800000 14.800000 20.561575 14.800000 14.900000 21.383247 14.800000 15.000000 22.224918 14.900000 -5.000000 258.283675 14.900000 -4.900000 255.100442 14.900000 -4.800000 251.937209 14.900000 -4.700000 248.793976 14.900000 -4.600000 245.670742 14.900000 -4.500000 242.567509 14.900000 -4.400000 239.484276 14.900000 -4.300000 236.421042 14.900000 -4.200000 233.377809 14.900000 -4.100000 230.354576 14.900000 -4.000000 227.351343 14.900000 -3.900000 224.368109 14.900000 -3.800000 221.404876 14.900000 -3.700000 218.461643 14.900000 -3.600000 215.538410 14.900000 -3.500000 212.635176 14.900000 -3.400000 209.751943 14.900000 -3.300000 206.888710 14.900000 -3.200000 204.045476 14.900000 -3.100000 201.222243 14.900000 -3.000000 198.419010 14.900000 -2.900000 195.635777 14.900000 -2.800000 192.872543 14.900000 -2.700000 190.129310 14.900000 -2.600000 187.406077 14.900000 -2.500000 184.702844 14.900000 -2.400000 182.019610 14.900000 -2.300000 179.356377 14.900000 -2.200000 176.713144 14.900000 -2.100000 174.089910 14.900000 -2.000000 171.486677 14.900000 -1.900000 168.903444 14.900000 -1.800000 166.340211 14.900000 -1.700000 163.796977 14.900000 -1.600000 161.273744 14.900000 -1.500000 158.770511 14.900000 -1.400000 156.287278 14.900000 -1.300000 153.824044 14.900000 -1.200000 151.380811 14.900000 -1.100000 148.957578 14.900000 -1.000000 146.554345 14.900000 -0.900000 144.171111 14.900000 -0.800000 141.807878 14.900000 -0.700000 139.464645 14.900000 -0.600000 137.141411 14.900000 -0.500000 134.838178 14.900000 -0.400000 132.554945 14.900000 -0.300000 130.291712 14.900000 -0.200000 128.048478 14.900000 -0.100000 125.825245 14.900000 -0.000000 123.622012 14.900000 0.100000 121.438779 14.900000 0.200000 119.275545 14.900000 0.300000 117.132312 14.900000 0.400000 115.009079 14.900000 0.500000 112.905845 14.900000 0.600000 110.822612 14.900000 0.700000 108.759379 14.900000 0.800000 106.716146 14.900000 0.900000 104.692912 14.900000 1.000000 102.689679 14.900000 1.100000 100.706446 14.900000 1.200000 98.743213 14.900000 1.300000 96.799979 14.900000 1.400000 94.876746 14.900000 1.500000 92.973513 14.900000 1.600000 91.090279 14.900000 1.700000 89.227046 14.900000 1.800000 87.383813 14.900000 1.900000 85.560580 14.900000 2.000000 83.757346 14.900000 2.100000 81.974113 14.900000 2.200000 80.210880 14.900000 2.300000 78.467647 14.900000 2.400000 76.744413 14.900000 2.500000 75.041180 14.900000 2.600000 73.357947 14.900000 2.700000 71.694713 14.900000 2.800000 70.051480 14.900000 2.900000 68.428247 14.900000 3.000000 66.825014 14.900000 3.100000 65.241780 14.900000 3.200000 63.678547 14.900000 3.300000 62.135314 14.900000 3.400000 60.612081 14.900000 3.500000 59.108847 14.900000 3.600000 57.625614 14.900000 3.700000 56.162381 14.900000 3.800000 54.719148 14.900000 3.900000 53.295914 14.900000 4.000000 51.892681 14.900000 4.100000 50.509448 14.900000 4.200000 49.146214 14.900000 4.300000 47.802981 14.900000 4.400000 46.479748 14.900000 4.500000 45.176515 14.900000 4.600000 43.893281 14.900000 4.700000 42.630048 14.900000 4.800000 41.386815 14.900000 4.900000 40.163582 14.900000 5.000000 38.960348 14.900000 5.100000 37.777115 14.900000 5.200000 36.613882 14.900000 5.300000 35.470648 14.900000 5.400000 34.347415 14.900000 5.500000 33.244182 14.900000 5.600000 32.160949 14.900000 5.700000 31.097715 14.900000 5.800000 30.054482 14.900000 5.900000 29.031249 14.900000 6.000000 28.028016 14.900000 6.100000 27.044782 14.900000 6.200000 26.081549 14.900000 6.300000 25.138316 14.900000 6.400000 24.215082 14.900000 6.500000 23.311849 14.900000 6.600000 22.428616 14.900000 6.700000 21.565383 14.900000 6.800000 20.722149 14.900000 6.900000 19.898916 14.900000 7.000000 19.095683 14.900000 7.100000 18.312450 14.900000 7.200000 17.549216 14.900000 7.300000 16.805983 14.900000 7.400000 16.082750 14.900000 7.500000 15.379516 14.900000 7.600000 14.696283 14.900000 7.700000 14.033050 14.900000 7.800000 13.389817 14.900000 7.900000 12.766583 14.900000 8.000000 12.163350 14.900000 8.100000 11.580117 14.900000 8.200000 11.016884 14.900000 8.300000 10.473650 14.900000 8.400000 9.950417 14.900000 8.500000 9.447184 14.900000 8.600000 8.963951 14.900000 8.700000 8.500717 14.900000 8.800000 8.057484 14.900000 8.900000 7.634251 14.900000 9.000000 7.231017 14.900000 9.100000 6.847784 14.900000 9.200000 6.484551 14.900000 9.300000 6.141318 14.900000 9.400000 5.818084 14.900000 9.500000 5.514851 14.900000 9.600000 5.231618 14.900000 9.700000 4.968385 14.900000 9.800000 4.725151 14.900000 9.900000 4.501918 14.900000 10.000000 4.298685 14.900000 10.100000 4.115451 14.900000 10.200000 3.952218 14.900000 10.300000 3.808985 14.900000 10.400000 3.685752 14.900000 10.500000 3.582518 14.900000 10.600000 3.499285 14.900000 10.700000 3.436052 14.900000 10.800000 3.392819 14.900000 10.900000 3.369585 14.900000 11.000000 3.366352 14.900000 11.100000 3.383119 14.900000 11.200000 3.419885 14.900000 11.300000 3.476652 14.900000 11.400000 3.553419 14.900000 11.500000 3.650186 14.900000 11.600000 3.766952 14.900000 11.700000 3.903719 14.900000 11.800000 4.060486 14.900000 11.900000 4.237253 14.900000 12.000000 4.434019 14.900000 12.100000 4.650786 14.900000 12.200000 4.887553 14.900000 12.300000 5.144319 14.900000 12.400000 5.421086 14.900000 12.500000 5.717853 14.900000 12.600000 6.034620 14.900000 12.700000 6.371386 14.900000 12.800000 6.728153 14.900000 12.900000 7.104920 14.900000 13.000000 7.501687 14.900000 13.100000 7.918453 14.900000 13.200000 8.355220 14.900000 13.300000 8.811987 14.900000 13.400000 9.288754 14.900000 13.500000 9.785520 14.900000 13.600000 10.302287 14.900000 13.700000 10.839054 14.900000 13.800000 11.395820 14.900000 13.900000 11.972587 14.900000 14.000000 12.569354 14.900000 14.100000 13.186121 14.900000 14.200000 13.822887 14.900000 14.300000 14.479654 14.900000 14.400000 15.156421 14.900000 14.500000 15.853188 14.900000 14.600000 16.569954 14.900000 14.700000 17.306721 14.900000 14.800000 18.063488 14.900000 14.900000 18.840254 14.900000 15.000000 19.637021 15.000000 -5.000000 264.927485 15.000000 -4.900000 261.698830 15.000000 -4.800000 258.490175 15.000000 -4.700000 255.301521 15.000000 -4.600000 252.132866 15.000000 -4.500000 248.984211 15.000000 -4.400000 245.855557 15.000000 -4.300000 242.746902 15.000000 -4.200000 239.658248 15.000000 -4.100000 236.589593 15.000000 -4.000000 233.540938 15.000000 -3.900000 230.512284 15.000000 -3.800000 227.503629 15.000000 -3.700000 224.514975 15.000000 -3.600000 221.546320 15.000000 -3.500000 218.597665 15.000000 -3.400000 215.669011 15.000000 -3.300000 212.760356 15.000000 -3.200000 209.871701 15.000000 -3.100000 207.003047 15.000000 -3.000000 204.154392 15.000000 -2.900000 201.325738 15.000000 -2.800000 198.517083 15.000000 -2.700000 195.728428 15.000000 -2.600000 192.959774 15.000000 -2.500000 190.211119 15.000000 -2.400000 187.482464 15.000000 -2.300000 184.773810 15.000000 -2.200000 182.085155 15.000000 -2.100000 179.416501 15.000000 -2.000000 176.767846 15.000000 -1.900000 174.139191 15.000000 -1.800000 171.530537 15.000000 -1.700000 168.941882 15.000000 -1.600000 166.373228 15.000000 -1.500000 163.824573 15.000000 -1.400000 161.295918 15.000000 -1.300000 158.787264 15.000000 -1.200000 156.298609 15.000000 -1.100000 153.829954 15.000000 -1.000000 151.381300 15.000000 -0.900000 148.952645 15.000000 -0.800000 146.543991 15.000000 -0.700000 144.155336 15.000000 -0.600000 141.786681 15.000000 -0.500000 139.438027 15.000000 -0.400000 137.109372 15.000000 -0.300000 134.800717 15.000000 -0.200000 132.512063 15.000000 -0.100000 130.243408 15.000000 -0.000000 127.994754 15.000000 0.100000 125.766099 15.000000 0.200000 123.557444 15.000000 0.300000 121.368790 15.000000 0.400000 119.200135 15.000000 0.500000 117.051481 15.000000 0.600000 114.922826 15.000000 0.700000 112.814171 15.000000 0.800000 110.725517 15.000000 0.900000 108.656862 15.000000 1.000000 106.608207 15.000000 1.100000 104.579553 15.000000 1.200000 102.570898 15.000000 1.300000 100.582244 15.000000 1.400000 98.613589 15.000000 1.500000 96.664934 15.000000 1.600000 94.736280 15.000000 1.700000 92.827625 15.000000 1.800000 90.938970 15.000000 1.900000 89.070316 15.000000 2.000000 87.221661 15.000000 2.100000 85.393007 15.000000 2.200000 83.584352 15.000000 2.300000 81.795697 15.000000 2.400000 80.027043 15.000000 2.500000 78.278388 15.000000 2.600000 76.549734 15.000000 2.700000 74.841079 15.000000 2.800000 73.152424 15.000000 2.900000 71.483770 15.000000 3.000000 69.835115 15.000000 3.100000 68.206460 15.000000 3.200000 66.597806 15.000000 3.300000 65.009151 15.000000 3.400000 63.440497 15.000000 3.500000 61.891842 15.000000 3.600000 60.363187 15.000000 3.700000 58.854533 15.000000 3.800000 57.365878 15.000000 3.900000 55.897224 15.000000 4.000000 54.448569 15.000000 4.100000 53.019914 15.000000 4.200000 51.611260 15.000000 4.300000 50.222605 15.000000 4.400000 48.853950 15.000000 4.500000 47.505296 15.000000 4.600000 46.176641 15.000000 4.700000 44.867987 15.000000 4.800000 43.579332 15.000000 4.900000 42.310677 15.000000 5.000000 41.062023 15.000000 5.100000 39.833368 15.000000 5.200000 38.624713 15.000000 5.300000 37.436059 15.000000 5.400000 36.267404 15.000000 5.500000 35.118750 15.000000 5.600000 33.990095 15.000000 5.700000 32.881440 15.000000 5.800000 31.792786 15.000000 5.900000 30.724131 15.000000 6.000000 29.675477 15.000000 6.100000 28.646822 15.000000 6.200000 27.638167 15.000000 6.300000 26.649513 15.000000 6.400000 25.680858 15.000000 6.500000 24.732203 15.000000 6.600000 23.803549 15.000000 6.700000 22.894894 15.000000 6.800000 22.006240 15.000000 6.900000 21.137585 15.000000 7.000000 20.288930 15.000000 7.100000 19.460276 15.000000 7.200000 18.651621 15.000000 7.300000 17.862966 15.000000 7.400000 17.094312 15.000000 7.500000 16.345657 15.000000 7.600000 15.617003 15.000000 7.700000 14.908348 15.000000 7.800000 14.219693 15.000000 7.900000 13.551039 15.000000 8.000000 12.902384 15.000000 8.100000 12.273730 15.000000 8.200000 11.665075 15.000000 8.300000 11.076420 15.000000 8.400000 10.507766 15.000000 8.500000 9.959111 15.000000 8.600000 9.430456 15.000000 8.700000 8.921802 15.000000 8.800000 8.433147 15.000000 8.900000 7.964493 15.000000 9.000000 7.515838 15.000000 9.100000 7.087183 15.000000 9.200000 6.678529 15.000000 9.300000 6.289874 15.000000 9.400000 5.921219 15.000000 9.500000 5.572565 15.000000 9.600000 5.243910 15.000000 9.700000 4.935256 15.000000 9.800000 4.646601 15.000000 9.900000 4.377946 15.000000 10.000000 4.129292 15.000000 10.100000 3.900637 15.000000 10.200000 3.691983 15.000000 10.300000 3.503328 15.000000 10.400000 3.334673 15.000000 10.500000 3.186019 15.000000 10.600000 3.057364 15.000000 10.700000 2.948709 15.000000 10.800000 2.860055 15.000000 10.900000 2.791400 15.000000 11.000000 2.742746 15.000000 11.100000 2.714091 15.000000 11.200000 2.705436 15.000000 11.300000 2.716782 15.000000 11.400000 2.748127 15.000000 11.500000 2.799472 15.000000 11.600000 2.870818 15.000000 11.700000 2.962163 15.000000 11.800000 3.073509 15.000000 11.900000 3.204854 15.000000 12.000000 3.356199 15.000000 12.100000 3.527545 15.000000 12.200000 3.718890 15.000000 12.300000 3.930236 15.000000 12.400000 4.161581 15.000000 12.500000 4.412926 15.000000 12.600000 4.684272 15.000000 12.700000 4.975617 15.000000 12.800000 5.286962 15.000000 12.900000 5.618308 15.000000 13.000000 5.969653 15.000000 13.100000 6.340999 15.000000 13.200000 6.732344 15.000000 13.300000 7.143689 15.000000 13.400000 7.575035 15.000000 13.500000 8.026380 15.000000 13.600000 8.497725 15.000000 13.700000 8.989071 15.000000 13.800000 9.500416 15.000000 13.900000 10.031762 15.000000 14.000000 10.583107 15.000000 14.100000 11.154452 15.000000 14.200000 11.745798 15.000000 14.300000 12.357143 15.000000 14.400000 12.988489 15.000000 14.500000 13.639834 15.000000 14.600000 14.311179 15.000000 14.700000 15.002525 15.000000 14.800000 15.713870 15.000000 14.900000 16.445215 15.000000 15.000000 17.196561 # trust-region/levenberg-marquardt 6.000000 14.500000 -2.440721 8.052493 -2.649759 10.338367 -3.079780 11.922784 -3.207953 12.376764 -3.113030 12.240580 -3.156168 12.295063 -3.135422 12.267922 -3.144145 12.278083 -3.140628 12.273947 -3.141954 12.275411 -3.141465 12.274866 -3.141638 12.275049 -3.141577 12.274984 -3.141598 12.275006 -3.141591 12.274998 -3.141593 12.275001 -3.141592 12.275000 -3.141593 12.275000 -3.141593 12.275000 -3.141593 12.275000 # trust-region/levenberg-marquardt+accel 6.000000 14.500000 5.434266 14.105210 4.860709 13.032737 4.081924 10.582719 3.243692 6.790283 2.058201 4.197091 2.873516 2.930922 3.372929 2.246210 3.036675 2.318015 3.239950 2.237589 3.128135 2.263146 3.145861 2.267710 3.141215 2.271767 3.141969 2.273339 3.141552 2.274340 3.141685 2.274699 3.141514 2.274945 3.141678 2.274938 3.141578 2.274977 3.141598 2.274987 3.141593 2.274994 3.141593 2.274997 3.141592 2.275000 3.141593 2.275000 3.141592 2.275000 3.141593 2.275000 3.141593 2.275000 3.141593 2.275000 # trust-region/dogleg 6.000000 14.500000 0.084715 10.513103 4.386135 -0.771406 2.863958 2.202150 3.445763 2.006013 2.862516 2.458756 3.367235 2.256024 3.115028 2.153453 3.159338 2.237666 3.131967 2.268437 3.146763 2.280079 3.139564 2.273509 3.143245 2.276490 3.141432 2.274895 3.141664 2.275075 3.141552 2.274970 3.141610 2.275017 3.141581 2.274991 3.141596 2.275003 3.141592 2.275000 3.141593 2.275000 3.141593 2.275000 3.141593 2.275000 3.141593 2.275000 # trust-region/double-dogleg 6.000000 14.500000 0.084715 10.513103 4.525217 -0.637424 2.784094 2.178685 3.382281 2.048555 3.138220 2.084792 3.163691 2.189933 3.107123 2.326539 3.150882 2.300348 3.133654 2.271698 3.144331 2.279648 3.139620 2.273460 3.142196 2.275844 3.140984 2.274394 3.141615 2.275040 3.141578 2.274991 3.141599 2.275008 3.141589 2.274997 3.141594 2.275002 3.141592 2.274999 3.141593 2.275000 3.141593 2.275000 3.141593 2.275000 3.141593 2.275000 3.141593 2.275000 # trust-region/2D-subspace 6.000000 14.500000 0.443880 10.464140 4.859341 -0.766174 2.457734 2.123629 3.300727 2.062365 3.096528 2.222788 3.149836 2.246128 3.139418 2.264724 3.145814 2.269650 3.139332 2.274037 3.142734 2.274079 3.141074 2.274870 3.141924 2.274792 3.141505 2.274946 3.141610 2.274967 3.141586 2.274990 3.141599 2.274993 3.141593 2.274996 3.141592 2.275000 3.141593 2.275000 3.141593 2.275000 3.141593 2.275000 3.141593 2.275000 3.141593 2.275000 gsl/doc/examples/fitting2.txt0000644000175000017500000000126313536674414014606 0ustar eddedd0.1 0.97935 +/- 0.110517 0.2 1.3359 +/- 0.12214 0.3 1.52573 +/- 0.134986 0.4 1.60318 +/- 0.149182 0.5 1.81731 +/- 0.164872 0.6 1.92475 +/- 0.182212 0.7 1.93249 +/- 0.201375 0.8 2.5107 +/- 0.222554 0.9 2.45078 +/- 0.24596 1 2.24949 +/- 0.271828 1.1 3.08955 +/- 0.300417 1.2 3.82315 +/- 0.332012 1.3 4.26766 +/- 0.36693 1.4 3.2597 +/- 0.40552 1.5 4.98914 +/- 0.448169 1.6 4.14527 +/- 0.495303 1.7 5.22382 +/- 0.547395 1.8 6.3838 +/- 0.604965 1.9 6.00277 +/- 0.668589 # best fit: Y = 1.02318 + 0.956201 X + 0.876796 X^2 # covariance matrix: [ +1.25612e-02, -3.64387e-02, +1.94389e-02 -3.64387e-02, +1.42339e-01, -8.48761e-02 +1.94389e-02, -8.48761e-02, +5.60243e-02 ] # chisq = 23.0987 gsl/doc/examples/bspline.txt0000644000175000017500000001471513536674414014522 0ustar eddedd0.000000 1.013392 0.075377 0.980953 0.150754 1.136930 0.226131 1.022649 0.301508 1.018952 0.376884 0.781034 0.452261 0.653645 0.527638 0.763919 0.603015 0.772400 0.678392 0.792524 0.753769 0.674983 0.829146 0.541142 0.904523 0.526895 0.979899 0.514283 1.055276 0.480481 1.130653 0.359657 1.206030 0.296027 1.281407 0.251224 1.356784 0.173015 1.432161 0.109840 1.507538 0.057700 1.582915 -0.009964 1.658291 -0.071887 1.733668 -0.123842 1.809045 -0.185449 1.884422 -0.257174 1.959799 -0.313225 2.035176 -0.337965 2.110553 -0.410140 2.185930 -0.532190 2.261307 -0.497535 2.336683 -0.534430 2.412060 -0.577618 2.487437 -0.461417 2.562814 -0.685286 2.638191 -0.670396 2.713568 -0.677885 2.788945 -0.760828 2.864322 -0.836176 2.939698 -0.701519 3.015075 -0.820581 3.090452 -0.864657 3.165829 -0.675148 3.241206 -0.674258 3.316583 -0.853122 3.391960 -0.627814 3.467337 -0.786064 3.542714 -0.735333 3.618090 -0.595610 3.693467 -0.570664 3.768844 -0.625037 3.844221 -0.505355 3.919598 -0.479103 3.994975 -0.476144 4.070352 -0.420115 4.145729 -0.357678 4.221106 -0.351235 4.296482 -0.263275 4.371859 -0.231913 4.447236 -0.141524 4.522613 -0.117161 4.597990 -0.074501 4.673367 -0.024253 4.748744 0.021384 4.824121 0.059326 4.899497 0.133528 4.974874 0.164376 5.050251 0.230545 5.125628 0.257040 5.201005 0.262619 5.276382 0.356921 5.351759 0.320297 5.427136 0.410395 5.502513 0.376859 5.577889 0.432169 5.653266 0.527822 5.728643 0.498471 5.804020 0.662444 5.879397 0.602791 5.954774 0.613485 6.030151 0.565095 6.105528 0.478371 6.180905 0.553815 6.256281 0.559066 6.331658 0.405827 6.407035 0.490786 6.482412 0.401802 6.557789 0.449565 6.633166 0.461542 6.708543 0.427638 6.783920 0.453343 6.859296 0.405652 6.934673 0.331105 7.010050 0.335669 7.085427 0.342361 7.160804 0.348337 7.236181 0.333673 7.311558 0.251268 7.386935 0.219000 7.462312 0.204136 7.537688 0.154734 7.613065 0.106188 7.688442 0.079925 7.763819 0.049781 7.839196 0.008202 7.914573 -0.026424 7.989950 -0.056430 8.065327 -0.081651 8.140704 -0.107899 8.216080 -0.149809 8.291457 -0.212280 8.366834 -0.184227 8.442211 -0.213536 8.517588 -0.259030 8.592965 -0.290374 8.668342 -0.377034 8.743719 -0.335464 8.819095 -0.352989 8.894472 -0.328890 8.969849 -0.429577 9.045226 -0.362269 9.120603 -0.456158 9.195980 -0.404115 9.271357 -0.351878 9.346734 -0.402716 9.422111 -0.376668 9.497487 -0.420820 9.572864 -0.429693 9.648241 -0.401090 9.723618 -0.347126 9.798995 -0.369382 9.874372 -0.314223 9.949749 -0.302814 10.025126 -0.325928 10.100503 -0.289654 10.175879 -0.252184 10.251256 -0.254930 10.326633 -0.210489 10.402010 -0.198464 10.477387 -0.182488 10.552764 -0.191308 10.628141 -0.115893 10.703518 -0.092357 10.778894 -0.086082 10.854271 -0.054768 10.929648 -0.022839 11.005025 0.003120 11.080402 0.027484 11.155779 0.039650 11.231156 0.068622 11.306533 0.098587 11.381910 0.120223 11.457286 0.139761 11.532663 0.163363 11.608040 0.192581 11.683417 0.184073 11.758794 0.212051 11.834171 0.224144 11.909548 0.241003 11.984925 0.286442 12.060302 0.226233 12.135678 0.296165 12.211055 0.247044 12.286432 0.298468 12.361809 0.293579 12.437186 0.294012 12.512563 0.306141 12.587940 0.277510 12.663317 0.285759 12.738693 0.302944 12.814070 0.257310 12.889447 0.243150 12.964824 0.218764 13.040201 0.264436 13.115578 0.221957 13.190955 0.196140 13.266332 0.228542 13.341709 0.156622 13.417085 0.192438 13.492462 0.156691 13.567839 0.144335 13.643216 0.148104 13.718593 0.117823 13.793970 0.082832 13.869347 0.062686 13.944724 0.040703 14.020101 0.026491 14.095477 0.010098 14.170854 -0.007478 14.246231 -0.029452 14.321608 -0.042866 14.396985 -0.057775 14.472362 -0.071364 14.547739 -0.098028 14.623116 -0.130422 14.698492 -0.133196 14.773869 -0.131368 14.849246 -0.152986 14.924623 -0.156311 15.000000 -0.163284 0.000000 1.020318 0.100000 1.001004 0.200000 0.971769 0.300000 0.933425 0.400000 0.886787 0.500000 0.832667 0.600000 0.771879 0.700000 0.705235 0.800000 0.633550 0.900000 0.557635 1.000000 0.478304 1.100000 0.396370 1.200000 0.312647 1.300000 0.227948 1.400000 0.143085 1.500000 0.058872 1.600000 -0.023878 1.700000 -0.104354 1.800000 -0.181913 1.900000 -0.256170 2.000000 -0.326761 2.100000 -0.393322 2.200000 -0.455491 2.300000 -0.512905 2.400000 -0.565199 2.500000 -0.612011 2.600000 -0.652978 2.700000 -0.687736 2.800000 -0.715922 2.900000 -0.737172 3.000000 -0.751124 3.100000 -0.757414 3.200000 -0.755680 3.300000 -0.745556 3.400000 -0.726738 3.500000 -0.699577 3.600000 -0.664851 3.700000 -0.623345 3.800000 -0.575842 3.900000 -0.523128 4.000000 -0.465986 4.100000 -0.405202 4.200000 -0.341560 4.300000 -0.275845 4.400000 -0.208840 4.500000 -0.141331 4.600000 -0.074102 4.700000 -0.007938 4.800000 0.056378 4.900000 0.118059 5.000000 0.176323 5.100000 0.230505 5.200000 0.280423 5.300000 0.326019 5.400000 0.367230 5.500000 0.403998 5.600000 0.436261 5.700000 0.463960 5.800000 0.487034 5.900000 0.505422 6.000000 0.519064 6.100000 0.527901 6.200000 0.531871 6.300000 0.530914 6.400000 0.524970 6.500000 0.513979 6.600000 0.497880 6.700000 0.476616 6.800000 0.450349 6.900000 0.419577 7.000000 0.384827 7.100000 0.346626 7.200000 0.305503 7.300000 0.261983 7.400000 0.216596 7.500000 0.169867 7.600000 0.122325 7.700000 0.074497 7.800000 0.026910 7.900000 -0.019908 8.000000 -0.065431 8.100000 -0.109130 8.200000 -0.150478 8.300000 -0.188949 8.400000 -0.224041 8.500000 -0.255567 8.600000 -0.283542 8.700000 -0.307985 8.800000 -0.328913 8.900000 -0.346344 9.000000 -0.360298 9.100000 -0.370791 9.200000 -0.377843 9.300000 -0.381471 9.400000 -0.381694 9.500000 -0.378529 9.600000 -0.371996 9.700000 -0.362111 9.800000 -0.348894 9.900000 -0.332363 10.000000 -0.312535 10.100000 -0.289491 10.200000 -0.263558 10.300000 -0.235124 10.400000 -0.204580 10.500000 -0.172313 10.600000 -0.138713 10.700000 -0.104170 10.800000 -0.069070 10.900000 -0.033805 11.000000 0.001238 11.100000 0.035668 11.200000 0.069098 11.300000 0.101139 11.400000 0.131400 11.500000 0.159494 11.600000 0.185031 11.700000 0.207625 11.800000 0.227067 11.900000 0.243418 12.000000 0.256764 12.100000 0.267192 12.200000 0.274787 12.300000 0.279636 12.400000 0.281823 12.500000 0.281436 12.600000 0.278560 12.700000 0.273281 12.800000 0.265685 12.900000 0.255858 13.000000 0.243886 13.100000 0.229854 13.200000 0.213850 13.300000 0.195957 13.400000 0.176273 13.500000 0.155000 13.600000 0.132411 13.700000 0.108780 13.800000 0.084383 13.900000 0.059492 14.000000 0.034382 14.100000 0.009328 14.200000 -0.015397 14.300000 -0.039517 14.400000 -0.062760 14.500000 -0.084850 14.600000 -0.105514 14.700000 -0.124477 14.800000 -0.141465 14.900000 -0.156204 15.000000 -0.168419 gsl/doc/examples/bspline.c0000644000175000017500000000537513536674414014127 0ustar eddedd#include #include #include #include #include #include #include #include /* number of data points to fit */ #define N 200 /* number of fit coefficients */ #define NCOEFFS 12 /* nbreak = ncoeffs + 2 - k = ncoeffs - 2 since k = 4 */ #define NBREAK (NCOEFFS - 2) int main (void) { const size_t n = N; const size_t ncoeffs = NCOEFFS; const size_t nbreak = NBREAK; size_t i, j; gsl_bspline_workspace *bw; gsl_vector *B; double dy; gsl_rng *r; gsl_vector *c, *w; gsl_vector *x, *y; gsl_matrix *X, *cov; gsl_multifit_linear_workspace *mw; double chisq, Rsq, dof, tss; gsl_rng_env_setup(); r = gsl_rng_alloc(gsl_rng_default); /* allocate a cubic bspline workspace (k = 4) */ bw = gsl_bspline_alloc(4, nbreak); B = gsl_vector_alloc(ncoeffs); x = gsl_vector_alloc(n); y = gsl_vector_alloc(n); X = gsl_matrix_alloc(n, ncoeffs); c = gsl_vector_alloc(ncoeffs); w = gsl_vector_alloc(n); cov = gsl_matrix_alloc(ncoeffs, ncoeffs); mw = gsl_multifit_linear_alloc(n, ncoeffs); /* this is the data to be fitted */ for (i = 0; i < n; ++i) { double sigma; double xi = (15.0 / (N - 1)) * i; double yi = cos(xi) * exp(-0.1 * xi); sigma = 0.1 * yi; dy = gsl_ran_gaussian(r, sigma); yi += dy; gsl_vector_set(x, i, xi); gsl_vector_set(y, i, yi); gsl_vector_set(w, i, 1.0 / (sigma * sigma)); printf("%f %f\n", xi, yi); } /* use uniform breakpoints on [0, 15] */ gsl_bspline_knots_uniform(0.0, 15.0, bw); /* construct the fit matrix X */ for (i = 0; i < n; ++i) { double xi = gsl_vector_get(x, i); /* compute B_j(xi) for all j */ gsl_bspline_eval(xi, B, bw); /* fill in row i of X */ for (j = 0; j < ncoeffs; ++j) { double Bj = gsl_vector_get(B, j); gsl_matrix_set(X, i, j, Bj); } } /* do the fit */ gsl_multifit_wlinear(X, w, y, c, cov, &chisq, mw); dof = n - ncoeffs; tss = gsl_stats_wtss(w->data, 1, y->data, 1, y->size); Rsq = 1.0 - chisq / tss; fprintf(stderr, "chisq/dof = %e, Rsq = %f\n", chisq / dof, Rsq); printf("\n\n"); /* output the smoothed curve */ { double xi, yi, yerr; for (xi = 0.0; xi < 15.0; xi += 0.1) { gsl_bspline_eval(xi, B, bw); gsl_multifit_linear_est(B, c, cov, &yi, &yerr); printf("%f %f\n", xi, yi); } } gsl_rng_free(r); gsl_bspline_free(bw); gsl_vector_free(B); gsl_vector_free(x); gsl_vector_free(y); gsl_matrix_free(X); gsl_vector_free(c); gsl_vector_free(w); gsl_matrix_free(cov); gsl_multifit_linear_free(mw); return 0; } /* main() */ gsl/doc/examples/permshuffle.txt0000644000175000017500000000017313536674414015377 0ustar eddeddinitial permutation: 0 1 2 3 4 5 6 7 8 9 random permutation: 0 5 4 3 7 8 6 2 1 9 inverse permutation: 0 8 7 3 2 1 6 4 5 9 gsl/doc/examples/rngunif.txt0000644000175000017500000000012013536674414014517 0ustar eddedd0.99974 0.16291 0.28262 0.94720 0.23166 0.48497 0.95748 0.74431 0.54004 0.73995 gsl/doc/examples/movstat1.txt0000644000175000017500000005062113536675317014643 0ustar eddedd0 1.013392 1.024272 0.864364 1.166178 1 0.990874 1.000235 0.748980 1.166178 2 1.166178 0.991439 0.748980 1.166178 3 1.070523 0.988035 0.748980 1.166178 4 1.094703 0.992625 0.748980 1.166178 5 0.864364 0.988391 0.748980 1.166178 6 0.748980 0.971934 0.748980 1.166178 7 0.916636 0.962588 0.748980 1.166178 8 0.975946 0.944324 0.748980 1.094703 9 1.063882 0.939898 0.748980 1.094703 10 0.966818 0.919921 0.748980 1.063882 11 0.832372 0.919199 0.748980 1.063882 12 0.888066 0.933911 0.832372 1.063882 13 0.965269 0.926255 0.832372 1.063882 14 1.021839 0.910748 0.805360 1.063882 15 0.874952 0.899263 0.805360 1.021839 16 0.856429 0.886568 0.805360 1.021839 17 0.910815 0.885629 0.805360 1.021839 18 0.832420 0.872699 0.745841 1.021839 19 0.805360 0.854507 0.745841 1.021839 20 0.937557 0.835747 0.745841 0.937557 21 0.827165 0.828811 0.745841 0.937557 22 0.822045 0.814899 0.703390 0.937557 23 0.745841 0.800099 0.703390 0.937557 24 0.765152 0.805652 0.703390 0.937557 25 0.815479 0.796830 0.703390 0.937557 26 0.798665 0.773913 0.685466 0.893497 27 0.703390 0.760519 0.679832 0.893497 28 0.748019 0.724059 0.420993 0.893497 29 0.893497 0.721195 0.420993 0.893497 30 0.708321 0.709255 0.420993 0.893497 31 0.685466 0.689233 0.420993 0.893497 32 0.679832 0.677482 0.420993 0.893497 33 0.420993 0.680383 0.420993 0.893497 34 0.714328 0.659440 0.420993 0.893497 35 0.633813 0.637677 0.420993 0.735299 36 0.595242 0.636353 0.420993 0.735299 37 0.669405 0.612183 0.419593 0.735299 38 0.735299 0.587445 0.407722 0.735299 39 0.517648 0.608760 0.407722 0.735299 40 0.654104 0.574319 0.335479 0.735299 41 0.693751 0.569105 0.335479 0.735299 42 0.419593 0.562091 0.335479 0.735299 43 0.407722 0.530225 0.318875 0.735299 44 0.655453 0.490869 0.302389 0.693751 45 0.335479 0.483299 0.302389 0.693751 46 0.576461 0.447256 0.257635 0.693751 47 0.518088 0.407480 0.256209 0.655453 48 0.318875 0.398098 0.256209 0.655453 49 0.302389 0.385215 0.256209 0.655453 50 0.434374 0.343443 0.195966 0.576461 51 0.257635 0.340051 0.195966 0.576461 52 0.256209 0.300298 0.139175 0.518088 53 0.316397 0.270289 0.139175 0.434374 54 0.266003 0.234970 -0.069640 0.434374 55 0.195966 0.211030 -0.069640 0.434374 56 0.298166 0.178027 -0.069640 0.316397 57 0.139175 0.155024 -0.069640 0.316397 58 0.187993 0.125673 -0.069640 0.316397 59 -0.069640 0.080934 -0.175734 0.298166 60 0.039053 0.066649 -0.175734 0.298166 61 0.071339 0.044648 -0.175734 0.298166 62 0.004606 0.021146 -0.175734 0.187993 63 -0.066653 0.002208 -0.175734 0.187993 64 -0.175734 -0.035018 -0.221493 0.108865 65 0.108865 -0.033752 -0.221493 0.108865 66 -0.046040 -0.064148 -0.295306 0.108865 67 0.039639 -0.085097 -0.295306 0.108865 68 -0.069143 -0.116533 -0.341193 0.108865 69 -0.221493 -0.137161 -0.341193 0.108865 70 -0.055707 -0.135676 -0.341193 0.108865 71 -0.295306 -0.172213 -0.341193 0.039639 72 -0.159103 -0.170080 -0.341193 0.039639 73 -0.341193 -0.191836 -0.341193 -0.022569 74 -0.293562 -0.206212 -0.341193 -0.022569 75 -0.159397 -0.218716 -0.359032 -0.022569 76 -0.293043 -0.263961 -0.553400 -0.022569 77 -0.022569 -0.276912 -0.553400 -0.022569 78 -0.199686 -0.303104 -0.553400 -0.022569 79 -0.227279 -0.340190 -0.749140 -0.022569 80 -0.359032 -0.367795 -0.749140 -0.022569 81 -0.553400 -0.423582 -0.773056 -0.022569 82 -0.437767 -0.458552 -0.773056 -0.022569 83 -0.447219 -0.515058 -0.773056 -0.199686 84 -0.749140 -0.560506 -0.773056 -0.227279 85 -0.597217 -0.596115 -0.773056 -0.359032 86 -0.773056 -0.626756 -0.773056 -0.437767 87 -0.677707 -0.653019 -0.842289 -0.437767 88 -0.644132 -0.684873 -0.842289 -0.447219 89 -0.699616 -0.708870 -0.842289 -0.597217 90 -0.618985 -0.696529 -0.842289 -0.597217 91 -0.696077 -0.692982 -0.842289 -0.558198 92 -0.842289 -0.690997 -0.842289 -0.558198 93 -0.788168 -0.698509 -0.842289 -0.558198 94 -0.711179 -0.700512 -0.842289 -0.558198 95 -0.613395 -0.705266 -0.842289 -0.558198 96 -0.558198 -0.728142 -0.870623 -0.558198 97 -0.751223 -0.736789 -0.870623 -0.558198 98 -0.760341 -0.719241 -0.870623 -0.558198 99 -0.666160 -0.706585 -0.870623 -0.558198 100 -0.751911 -0.724970 -0.913415 -0.558198 101 -0.870623 -0.756713 -0.962566 -0.558198 102 -0.791192 -0.799375 -1.027478 -0.648953 103 -0.649262 -0.826443 -1.048972 -0.648953 104 -0.648953 -0.844456 -1.048972 -0.648953 105 -0.913415 -0.854954 -1.048972 -0.648953 106 -0.962566 -0.884044 -1.071901 -0.648953 107 -1.027478 -0.900526 -1.071901 -0.648953 108 -1.048972 -0.916713 -1.071901 -0.648953 109 -0.958479 -0.943502 -1.071901 -0.648953 110 -0.781644 -0.951332 -1.071901 -0.735091 111 -1.071901 -0.953691 -1.071901 -0.735091 112 -1.051927 -0.951886 -1.071901 -0.735091 113 -0.969242 -0.954540 -1.071901 -0.735091 114 -0.943942 -0.933359 -1.071901 -0.735091 115 -0.735091 -0.939720 -1.071901 -0.735091 116 -0.939357 -0.941819 -1.071901 -0.735091 117 -0.942714 -0.931319 -1.056675 -0.735091 118 -1.056675 -0.935588 -1.098881 -0.735091 119 -0.815974 -0.935755 -1.098881 -0.735091 120 -1.028455 -0.943906 -1.098881 -0.735091 121 -0.804734 -0.959712 -1.098881 -0.804734 122 -0.956401 -0.953149 -1.098881 -0.804734 123 -1.098881 -0.950878 -1.098881 -0.804734 124 -0.971086 -0.948864 -1.098881 -0.804734 125 -1.033599 -0.959670 -1.098881 -0.804734 126 -0.908956 -0.961819 -1.098881 -0.804734 127 -0.867166 -0.983035 -1.098881 -0.867166 128 -0.917729 -0.978220 -1.098881 -0.867166 129 -1.034520 -0.965160 -1.052096 -0.867166 130 -0.934842 -0.969070 -1.052096 -0.867166 131 -1.052096 -0.958118 -1.052096 -0.867166 132 -1.038106 -0.966541 -1.052096 -0.867166 133 -0.903440 -0.973435 -1.052096 -0.903440 134 -0.955223 -0.970755 -1.052096 -0.888253 135 -1.014095 -0.935539 -1.052096 -0.647140 136 -0.913121 -0.940226 -1.052096 -0.647140 137 -1.001610 -0.933181 -1.038106 -0.647140 138 -0.943000 -0.904520 -1.014095 -0.647140 139 -0.888253 -0.889368 -1.014095 -0.647140 140 -0.647140 -0.879086 -1.014095 -0.647140 141 -0.986400 -0.866144 -1.001610 -0.647140 142 -0.974606 -0.862098 -1.001610 -0.647140 143 -0.722838 -0.869143 -1.079101 -0.647140 144 -0.736768 -0.867020 -1.079101 -0.647140 145 -0.842115 -0.859989 -1.079101 -0.647140 146 -0.871737 -0.873717 -1.079101 -0.722838 147 -0.868612 -0.856032 -1.079101 -0.722838 148 -1.079101 -0.835681 -1.079101 -0.722838 149 -0.919652 -0.831468 -1.079101 -0.676490 150 -0.810915 -0.836883 -1.079101 -0.676490 151 -0.798144 -0.825538 -1.079101 -0.676490 152 -0.791863 -0.810786 -1.079101 -0.676490 153 -0.750748 -0.793099 -1.079101 -0.674050 154 -0.676490 -0.742295 -0.919652 -0.520265 155 -0.796341 -0.729006 -0.810915 -0.520265 156 -0.717316 -0.702646 -0.798144 -0.520265 157 -0.709466 -0.694122 -0.796341 -0.520265 158 -0.674050 -0.669091 -0.796341 -0.516526 159 -0.520265 -0.648544 -0.796341 -0.516526 160 -0.773469 -0.633180 -0.796341 -0.507482 161 -0.520952 -0.601059 -0.773469 -0.443010 162 -0.704384 -0.582697 -0.773469 -0.443010 163 -0.516526 -0.559300 -0.773469 -0.443010 164 -0.524725 -0.529767 -0.773469 -0.349182 165 -0.507482 -0.525184 -0.773469 -0.349182 166 -0.443010 -0.497812 -0.704384 -0.349182 167 -0.515339 -0.496989 -0.704384 -0.349182 168 -0.452103 -0.456735 -0.524725 -0.261589 169 -0.349182 -0.443130 -0.524725 -0.261589 170 -0.469849 -0.432221 -0.515339 -0.261589 171 -0.472383 -0.400544 -0.515339 -0.159041 172 -0.511899 -0.399197 -0.515339 -0.159041 173 -0.261589 -0.363269 -0.511899 -0.120131 174 -0.366875 -0.340987 -0.511899 -0.120131 175 -0.404719 -0.322655 -0.511899 -0.120131 176 -0.159041 -0.274510 -0.511899 0.059747 177 -0.428188 -0.231102 -0.511899 0.059747 178 -0.120131 -0.196838 -0.428188 0.059747 179 -0.207004 -0.185758 -0.428188 0.059747 180 -0.147527 -0.171000 -0.428188 0.059747 181 0.059747 -0.144760 -0.428188 0.059747 182 0.005106 -0.132175 -0.428188 0.059747 183 -0.134995 -0.099759 -0.207004 0.059747 184 -0.139717 -0.074083 -0.207004 0.162310 185 -0.204527 -0.051482 -0.204527 0.162310 186 -0.116086 -0.034729 -0.204527 0.162310 187 -0.020609 -0.036964 -0.204527 0.162310 188 -0.071607 -0.020171 -0.204527 0.189828 189 0.162310 0.025542 -0.204527 0.367850 190 0.041607 0.063289 -0.204527 0.367850 191 0.036755 0.098256 -0.116086 0.367850 192 0.035159 0.133366 -0.071607 0.367850 193 0.189828 0.157248 -0.071607 0.367850 194 0.367850 0.186330 0.035159 0.367850 195 0.275498 0.200267 0.035159 0.367850 196 0.180114 0.231703 0.035159 0.387399 197 0.270119 0.261449 0.035159 0.387399 198 0.242095 0.291531 0.180114 0.387399 199 0.248292 0.306794 0.180114 0.387399 200 0.315624 0.298689 0.180114 0.387399 201 0.387399 0.320345 0.180114 0.513716 202 0.363962 0.353006 0.242095 0.539386 203 0.366055 0.357843 0.242095 0.539386 204 0.357730 0.376195 0.248292 0.539386 205 0.278687 0.395651 0.278687 0.539386 206 0.513716 0.424425 0.278687 0.632134 207 0.539386 0.453535 0.278687 0.707613 208 0.323332 0.481813 0.278687 0.707613 209 0.443967 0.514114 0.278687 0.721367 210 0.462306 0.533516 0.278687 0.721367 211 0.632134 0.573739 0.323332 0.721367 212 0.707613 0.596049 0.323332 0.759125 213 0.675022 0.617114 0.323332 0.771108 214 0.721367 0.649758 0.443967 0.771108 215 0.571145 0.678378 0.462306 0.771108 216 0.721139 0.713188 0.571145 0.845212 217 0.759125 0.711488 0.571145 0.845212 218 0.771108 0.733121 0.571145 0.945573 219 0.682416 0.730656 0.571145 0.945573 220 0.758786 0.727163 0.571145 0.945573 221 0.845212 0.748134 0.613436 0.945573 222 0.613436 0.741339 0.613436 0.945573 223 0.945573 0.748576 0.613436 0.945573 224 0.647910 0.734228 0.613277 0.945573 225 0.682938 0.754849 0.613277 0.945573 226 0.801830 0.764490 0.613277 0.945573 227 0.646398 0.772368 0.613277 0.945573 228 0.838734 0.798360 0.613277 0.945573 229 0.613277 0.797414 0.613277 0.935164 230 0.909241 0.817152 0.613277 0.935164 231 0.864839 0.839219 0.613277 0.935164 232 0.931877 0.857931 0.613277 1.007667 233 0.899347 0.887260 0.613277 1.007667 234 0.935164 0.902627 0.613277 1.007779 235 0.865021 0.928897 0.864839 1.007779 236 0.925676 0.934663 0.864839 1.007779 237 1.007667 0.956194 0.865021 1.101676 238 0.969012 0.936562 0.715928 1.101676 239 1.007779 0.933446 0.715928 1.101676 240 0.902247 0.923789 0.715928 1.101676 241 0.972666 0.945317 0.715928 1.101822 242 1.101676 0.946161 0.715928 1.101822 243 0.715928 0.942102 0.715928 1.101822 244 0.865071 0.938873 0.715928 1.101822 245 0.828941 0.962509 0.715928 1.267770 246 1.101822 0.953818 0.715928 1.267770 247 0.934959 0.959714 0.715928 1.267770 248 0.963017 0.946466 0.715928 1.267770 249 0.933500 0.980648 0.806646 1.267770 250 1.267770 1.007618 0.806646 1.267770 251 0.806646 1.010894 0.806646 1.267770 252 1.037528 0.992435 0.806646 1.267770 253 0.955949 1.007116 0.806646 1.267770 254 1.091928 1.006985 0.806646 1.267770 255 1.161737 0.999238 0.806646 1.267770 256 0.864980 0.981474 0.806646 1.161737 257 0.898773 0.991442 0.848274 1.161737 258 1.096453 0.979808 0.848274 1.161737 259 0.961575 0.975371 0.848274 1.161737 260 0.848274 0.958731 0.848274 1.161737 261 1.072375 0.939710 0.848274 1.096453 262 0.916285 0.945392 0.848274 1.096453 263 0.909561 0.940478 0.844724 1.096453 264 0.907136 0.916473 0.832398 1.072375 265 0.908890 0.921275 0.832398 1.072375 266 0.952510 0.912365 0.750267 1.072375 267 0.927478 0.895883 0.750267 1.014394 268 0.844724 0.888522 0.750267 1.014394 269 0.832398 0.891731 0.750267 1.014394 270 1.014394 0.880446 0.750267 1.014394 271 0.750267 0.868923 0.750267 1.014394 272 0.891072 0.845685 0.696892 1.014394 273 0.835315 0.835831 0.696892 1.014394 274 0.944852 0.820807 0.679469 1.014394 275 0.783006 0.816298 0.679469 1.014394 276 0.782137 0.793767 0.679469 0.944852 277 0.696892 0.780231 0.601368 0.944852 278 0.819079 0.778350 0.601368 0.944852 279 0.679469 0.765091 0.601368 0.944852 280 0.782798 0.746689 0.601368 0.870389 281 0.766547 0.736723 0.601368 0.870389 282 0.601368 0.720645 0.601368 0.870389 283 0.870389 0.720393 0.601368 0.870389 284 0.689462 0.711527 0.601368 0.870389 285 0.742437 0.701909 0.573667 0.870389 286 0.673377 0.676400 0.502200 0.870389 287 0.605278 0.652406 0.502200 0.870389 288 0.694116 0.635048 0.410432 0.870389 289 0.721558 0.604112 0.410432 0.742437 290 0.573667 0.575926 0.379406 0.742437 291 0.502200 0.552812 0.379406 0.721558 292 0.502611 0.520371 0.316523 0.721558 293 0.410432 0.488446 0.254111 0.721558 294 0.530100 0.447061 0.238874 0.721558 295 0.379406 0.410000 0.238874 0.573667 296 0.488186 0.391352 0.238874 0.530100 297 0.316523 0.368205 0.238874 0.530100 298 0.254111 0.330299 0.085646 0.530100 299 0.238874 0.318404 0.085646 0.530100 300 0.313892 0.287170 0.085646 0.488186 301 0.368533 0.269703 0.085646 0.488186 302 0.247584 0.248245 0.085646 0.368533 303 0.085646 0.242399 0.085646 0.368533 304 0.279591 0.222265 0.032643 0.368533 305 0.186523 0.193351 -0.079186 0.368533 306 0.187273 0.162923 -0.079186 0.368533 307 0.252140 0.140118 -0.079186 0.279591 308 0.252220 0.117508 -0.079186 0.279591 309 0.032643 0.108259 -0.079186 0.279591 310 -0.079186 0.069642 -0.145195 0.252220 311 -0.020813 0.055206 -0.145195 0.252220 312 0.117677 0.053721 -0.145195 0.252220 313 -0.001131 0.019909 -0.145195 0.252220 314 -0.016094 -0.011514 -0.145195 0.170943 315 -0.145195 -0.034277 -0.217750 0.170943 316 0.027728 -0.070461 -0.477213 0.170943 317 0.170943 -0.080932 -0.477213 0.170943 318 -0.119790 -0.123578 -0.477213 0.170943 319 -0.093437 -0.158532 -0.477213 0.170943 320 -0.217750 -0.197118 -0.477213 0.170943 321 -0.477213 -0.209227 -0.477213 0.170943 322 -0.135988 -0.252698 -0.477213 0.170943 323 -0.351430 -0.297661 -0.477213 -0.093437 324 -0.385630 -0.323034 -0.477213 -0.093437 325 -0.440532 -0.366458 -0.571107 -0.135988 326 -0.278397 -0.393075 -0.571107 -0.135988 327 -0.450457 -0.394789 -0.571107 -0.135988 328 -0.323643 -0.424039 -0.571107 -0.278397 329 -0.398898 -0.435333 -0.571107 -0.278397 330 -0.571107 -0.456661 -0.620240 -0.278397 331 -0.510529 -0.463128 -0.620240 -0.278397 332 -0.496067 -0.491401 -0.620240 -0.323643 333 -0.457746 -0.503819 -0.620240 -0.323643 334 -0.475660 -0.529421 -0.620240 -0.398898 335 -0.620240 -0.537760 -0.620240 -0.457746 336 -0.511661 -0.559643 -0.811817 -0.457746 337 -0.589406 -0.574328 -0.811817 -0.457746 338 -0.587058 -0.592800 -0.811817 -0.457746 339 -0.605258 -0.636429 -0.937665 -0.475660 340 -0.490627 -0.668612 -0.937665 -0.490627 341 -0.811817 -0.678122 -0.937665 -0.490627 342 -0.672071 -0.710680 -0.937665 -0.490627 343 -0.699257 -0.727197 -0.937665 -0.490627 344 -0.937665 -0.744275 -0.937665 -0.490627 345 -0.829673 -0.768076 -0.937665 -0.490627 346 -0.724851 -0.777550 -0.937665 -0.594838 347 -0.869791 -0.773723 -0.937665 -0.594838 348 -0.771097 -0.797469 -0.937665 -0.594838 349 -0.774921 -0.822728 -0.977113 -0.594838 350 -0.867069 -0.828612 -1.002381 -0.594838 351 -0.594838 -0.824314 -1.002381 -0.594838 352 -0.769716 -0.819744 -1.002381 -0.594838 353 -0.933279 -0.824578 -1.002381 -0.594838 354 -0.977113 -0.828239 -1.002381 -0.594838 355 -1.002381 -0.837270 -1.002381 -0.594838 356 -0.782394 -0.831285 -1.002381 -0.594838 357 -0.674586 -0.850519 -1.002381 -0.674586 358 -0.922968 -0.869453 -1.002381 -0.674586 359 -0.811365 -0.865860 -1.002381 -0.674586 360 -0.874264 -0.864908 -1.002381 -0.674586 361 -0.801236 -0.864866 -1.001921 -0.674586 362 -0.806411 -0.870668 -1.001921 -0.674586 363 -0.977990 -0.898964 -1.001921 -0.801236 364 -0.893753 -0.902158 -1.001921 -0.801236 365 -0.966642 -0.923810 -1.049536 -0.801236 366 -1.001921 -0.923323 -1.049536 -0.801236 367 -0.846215 -0.942505 -1.049536 -0.806411 368 -0.985833 -0.957789 -1.049536 -0.846215 369 -0.958104 -0.953922 -1.049536 -0.846215 370 -1.049536 -0.976802 -1.145432 -0.846215 371 -0.868909 -0.970001 -1.145432 -0.846215 372 -1.012245 -0.976689 -1.145432 -0.846215 373 -0.974529 -0.991109 -1.145432 -0.868909 374 -0.935453 -0.984061 -1.145432 -0.868909 375 -1.145432 -0.994865 -1.145432 -0.868909 376 -0.891831 -0.993178 -1.145432 -0.868909 377 -1.075497 -1.011856 -1.145432 -0.891831 378 -1.004828 -1.008257 -1.145432 -0.891831 379 -0.908314 -1.006019 -1.145432 -0.891831 380 -1.076939 -1.007077 -1.145432 -0.891831 381 -1.030982 -0.975457 -1.076939 -0.797605 382 -1.074372 -0.978778 -1.076939 -0.797605 383 -0.972656 -0.967254 -1.076939 -0.797605 384 -0.949909 -0.954515 -1.076939 -0.797605 385 -0.947092 -0.951256 -1.076939 -0.797605 386 -0.797605 -0.921101 -1.074372 -0.745227 387 -0.928365 -0.930848 -1.138201 -0.745227 388 -0.948731 -0.904622 -1.138201 -0.745227 389 -0.864698 -0.899472 -1.138201 -0.745227 390 -0.872472 -0.872673 -1.138201 -0.655121 391 -0.745227 -0.869863 -1.138201 -0.655121 392 -1.138201 -0.867221 -1.138201 -0.655121 393 -0.785884 -0.878786 -1.138201 -0.655121 394 -0.916013 -0.888686 -1.138201 -0.655121 395 -0.655121 -0.880563 -1.138201 -0.655121 396 -0.916174 -0.881125 -1.138201 -0.655121 397 -0.768549 -0.876905 -1.138201 -0.655121 398 -1.055577 -0.841239 -1.057631 -0.655121 399 -1.057631 -0.838050 -1.057631 -0.655121 400 -0.775347 -0.836206 -1.057631 -0.655121 401 -0.878656 -0.857004 -1.057631 -0.698800 402 -0.698800 -0.838572 -1.057631 -0.698800 403 -0.745876 -0.832455 -1.057631 -0.698800 404 -0.750801 -0.792869 -1.057631 -0.620124 405 -0.895729 -0.753427 -0.895729 -0.620124 406 -0.883903 -0.742066 -0.895729 -0.620124 407 -0.713417 -0.715424 -0.895729 -0.585595 408 -0.701271 -0.694025 -0.895729 -0.463411 409 -0.620124 -0.669128 -0.895729 -0.463411 410 -0.623769 -0.636570 -0.895729 -0.392658 411 -0.650380 -0.608382 -0.883903 -0.392658 412 -0.585595 -0.558942 -0.713417 -0.340060 413 -0.463411 -0.537748 -0.701271 -0.340060 414 -0.472005 -0.515630 -0.650380 -0.340060 415 -0.392658 -0.506983 -0.650380 -0.340060 416 -0.585671 -0.487392 -0.650380 -0.340060 417 -0.340060 -0.455369 -0.585671 -0.298121 418 -0.480281 -0.436086 -0.585671 -0.298121 419 -0.457978 -0.426975 -0.585671 -0.298121 420 -0.525001 -0.408641 -0.585671 -0.270333 421 -0.408272 -0.403158 -0.585671 -0.270333 422 -0.298121 -0.369789 -0.525001 -0.218609 423 -0.373487 -0.360490 -0.525001 -0.218609 424 -0.363190 -0.329976 -0.525001 -0.144624 425 -0.270333 -0.300544 -0.525001 -0.134227 426 -0.332346 -0.257710 -0.408272 -0.053830 427 -0.218609 -0.228991 -0.373487 -0.053830 428 -0.237778 -0.210818 -0.373487 -0.053830 429 -0.144624 -0.186200 -0.363190 -0.053830 430 -0.134227 -0.148308 -0.332346 0.053623 431 -0.053830 -0.124752 -0.332346 0.053623 432 -0.092358 -0.104870 -0.237778 0.053623 433 -0.098211 -0.085341 -0.237778 0.053623 434 -0.102690 -0.062807 -0.144624 0.053623 435 0.053623 -0.049578 -0.134227 0.053623 436 -0.011220 -0.037749 -0.113651 0.053623 437 -0.113651 -0.024921 -0.113651 0.087275 438 -0.003786 -0.003162 -0.113651 0.146990 439 0.010097 0.027991 -0.113651 0.244478 440 0.000896 0.063847 -0.113651 0.291725 441 -0.004108 0.061618 -0.113651 0.291725 442 0.087275 0.079196 -0.113651 0.291725 443 0.146990 0.108193 -0.004108 0.291725 444 0.244478 0.136703 -0.004108 0.309829 445 0.291725 0.171889 -0.004108 0.397139 446 0.029098 0.195776 -0.004108 0.397139 447 0.182140 0.245901 0.029098 0.547277 448 0.205317 0.283361 0.029098 0.547277 449 0.309829 0.322357 0.029098 0.575949 450 0.397139 0.330334 0.029098 0.575949 451 0.263650 0.348011 0.029098 0.575949 452 0.547277 0.386883 0.182140 0.575949 453 0.499330 0.407088 0.205317 0.575949 454 0.575949 0.449449 0.263650 0.671283 455 0.332219 0.462616 0.263650 0.671283 456 0.486178 0.499718 0.263650 0.805262 457 0.456688 0.517379 0.332219 0.805262 458 0.404395 0.528374 0.332219 0.805262 459 0.671283 0.530016 0.332219 0.805262 460 0.454674 0.518924 0.332219 0.805262 461 0.805262 0.541853 0.404395 0.805262 462 0.457916 0.554069 0.404395 0.805262 463 0.668220 0.564970 0.404395 0.805262 464 0.517396 0.615041 0.453935 0.955168 465 0.453935 0.613109 0.453935 0.955168 466 0.584441 0.649172 0.453935 0.955168 467 0.620557 0.648524 0.453935 0.955168 468 0.576597 0.688049 0.453935 0.955168 469 0.955168 0.706141 0.453935 0.955168 470 0.650037 0.727648 0.453935 0.955168 471 0.851368 0.746400 0.576597 0.955168 472 0.798128 0.760016 0.576597 0.955168 473 0.892693 0.788064 0.576597 0.955168 474 0.867234 0.803200 0.650037 0.955168 475 0.753970 0.801661 0.650037 0.938241 476 0.660205 0.820658 0.660205 0.938241 477 0.734215 0.826015 0.660205 0.938241 478 0.929089 0.844879 0.660205 1.005632 479 0.743089 0.846964 0.660205 1.005632 480 0.938241 0.847495 0.660205 1.005632 481 0.859004 0.860005 0.660205 1.005632 482 0.910294 0.887648 0.734215 1.005632 483 1.005632 0.903376 0.743089 1.005632 484 0.915635 0.899294 0.743089 1.005632 485 0.873076 0.912957 0.859004 1.005632 486 0.891579 0.907360 0.859004 1.005632 487 0.964277 0.928955 0.873076 1.096554 488 0.907221 0.925414 0.871345 1.096554 489 0.884185 0.928975 0.871345 1.096554 490 0.893379 0.938878 0.871345 1.096554 491 0.876675 0.961613 0.871345 1.123156 492 1.096554 0.972379 0.871345 1.123156 493 0.871345 0.983963 0.871345 1.123156 494 1.044798 0.995781 0.871345 1.123156 495 1.024569 1.009694 0.871345 1.123156 496 1.123156 1.022770 0.871345 1.123156 497 1.010005 1.037365 0.871345 1.123156 498 1.091709 1.031971 0.871345 1.123156 499 1.037220 1.047051 1.010005 1.123156 gsl/doc/examples/multiset.txt0000644000175000017500000000137413536674414014731 0ustar eddeddAll multisets of {0,1,2,3} by size: { } { 0 } { 1 } { 2 } { 3 } { 0 0 } { 0 1 } { 0 2 } { 0 3 } { 1 1 } { 1 2 } { 1 3 } { 2 2 } { 2 3 } { 3 3 } { 0 0 0 } { 0 0 1 } { 0 0 2 } { 0 0 3 } { 0 1 1 } { 0 1 2 } { 0 1 3 } { 0 2 2 } { 0 2 3 } { 0 3 3 } { 1 1 1 } { 1 1 2 } { 1 1 3 } { 1 2 2 } { 1 2 3 } { 1 3 3 } { 2 2 2 } { 2 2 3 } { 2 3 3 } { 3 3 3 } { 0 0 0 0 } { 0 0 0 1 } { 0 0 0 2 } { 0 0 0 3 } { 0 0 1 1 } { 0 0 1 2 } { 0 0 1 3 } { 0 0 2 2 } { 0 0 2 3 } { 0 0 3 3 } { 0 1 1 1 } { 0 1 1 2 } { 0 1 1 3 } { 0 1 2 2 } { 0 1 2 3 } { 0 1 3 3 } { 0 2 2 2 } { 0 2 2 3 } { 0 2 3 3 } { 0 3 3 3 } { 1 1 1 1 } { 1 1 1 2 } { 1 1 1 3 } { 1 1 2 2 } { 1 1 2 3 } { 1 1 3 3 } { 1 2 2 2 } { 1 2 2 3 } { 1 2 3 3 } { 1 3 3 3 } { 2 2 2 2 } { 2 2 2 3 } { 2 2 3 3 } { 2 3 3 3 } { 3 3 3 3 } gsl/doc/examples/largefit2.txt0000644000175000017500000010737613536675317014756 0ustar eddedd0.000000 1.013392 0.002000 1.057114 0.004000 1.006672 0.006000 1.005092 0.008000 1.034198 0.010000 0.999146 0.012000 0.972324 0.014000 1.091945 0.016000 1.027780 0.018000 0.997921 0.020000 0.911458 0.022000 1.176001 0.024000 1.249657 0.026001 0.873918 0.028001 0.996930 0.030001 1.168647 0.032001 1.042424 0.034001 0.956186 0.036001 1.032493 0.038001 1.016478 0.040001 0.916054 0.042001 1.160628 0.044001 1.129574 0.046001 1.134291 0.048001 1.103102 0.050001 1.067503 0.052001 1.242134 0.054001 1.210027 0.056001 1.286558 0.058001 1.167437 0.060001 1.270989 0.062001 1.238484 0.064001 1.247879 0.066001 1.318323 0.068001 1.290329 0.070001 1.076233 0.072001 1.364227 0.074001 1.331892 0.076002 1.644310 0.078002 1.272358 0.080002 1.444683 0.082002 1.379124 0.084002 1.681307 0.086002 1.662120 0.088002 1.616803 0.090002 1.563115 0.092002 1.980689 0.094002 1.605972 0.096002 1.714268 0.098002 1.721501 0.100002 1.835777 0.102002 1.843517 0.104002 1.874658 0.106002 1.839987 0.108002 2.096691 0.110002 1.874711 0.112002 2.227526 0.114002 2.198516 0.116002 2.531939 0.118002 2.440293 0.120002 2.474498 0.122002 1.886756 0.124002 2.395872 0.126003 2.424067 0.128003 2.533481 0.130003 2.920822 0.132003 2.639199 0.134003 2.178261 0.136003 2.563181 0.138003 2.330377 0.140003 2.482197 0.142003 2.944214 0.144003 2.375046 0.146003 2.706059 0.148003 2.644492 0.150003 2.344976 0.152003 2.700872 0.154003 3.176028 0.156003 2.982176 0.158003 2.663030 0.160003 2.816813 0.162003 2.245545 0.164003 2.257987 0.166003 2.447319 0.168003 2.955995 0.170003 2.754546 0.172003 3.082176 0.174003 2.488766 0.176004 2.452559 0.178004 2.407845 0.180004 2.795500 0.182004 2.230950 0.184004 2.287802 0.186004 2.460347 0.188004 2.083690 0.190004 2.204919 0.192004 2.696174 0.194004 2.395705 0.196004 2.178485 0.198004 2.307372 0.200004 2.255902 0.202004 1.987918 0.204004 1.887785 0.206004 2.075691 0.208004 1.686572 0.210004 1.982841 0.212004 2.020780 0.214004 1.649430 0.216004 1.963334 0.218004 1.816612 0.220004 2.047502 0.222004 1.570563 0.224004 1.573427 0.226005 1.335974 0.228005 1.378628 0.230005 1.628469 0.232005 1.620938 0.234005 1.216537 0.236005 1.638633 0.238005 1.554498 0.240005 1.391226 0.242005 1.431787 0.244005 1.263934 0.246005 1.425465 0.248005 1.105883 0.250005 1.265657 0.252005 1.168639 0.254005 1.242218 0.256005 1.245104 0.258005 1.108120 0.260005 1.211894 0.262005 1.078647 0.264005 1.057431 0.266005 1.108110 0.268005 1.266898 0.270005 1.100118 0.272005 0.990081 0.274005 1.023601 0.276006 1.238272 0.278006 1.145608 0.280006 1.064366 0.282006 1.025441 0.284006 1.121463 0.286006 0.977097 0.288006 1.032786 0.290006 1.166776 0.292006 1.089725 0.294006 1.048237 0.296006 0.994855 0.298006 0.981623 0.300006 0.964743 0.302006 1.170996 0.304006 0.909883 0.306006 1.060783 0.308006 1.066695 0.310006 1.235120 0.312006 0.983080 0.314006 0.818831 0.316006 1.173228 0.318006 1.052397 0.320006 0.958336 0.322006 1.063317 0.324006 1.045760 0.326007 0.918851 0.328007 0.828151 0.330007 0.922930 0.332007 0.960096 0.334007 0.837558 0.336007 1.093800 0.338007 0.822421 0.340007 0.982303 0.342007 0.857034 0.344007 0.929809 0.346007 1.098484 0.348007 0.912742 0.350007 0.877250 0.352007 0.875453 0.354007 0.842108 0.356007 0.885992 0.358007 0.906674 0.360007 0.948593 0.362007 0.826321 0.364007 0.794805 0.366007 0.799018 0.368007 0.762520 0.370007 0.854828 0.372007 0.913891 0.374007 0.900230 0.376008 0.764344 0.378008 0.893758 0.380008 0.843119 0.382008 0.637597 0.384008 0.732940 0.386008 0.632072 0.388008 0.820424 0.390008 0.653834 0.392008 0.723423 0.394008 0.668586 0.396008 0.587775 0.398008 0.638778 0.400008 0.675101 0.402008 0.679205 0.404008 0.558361 0.406008 0.669089 0.408008 0.659724 0.410008 0.599887 0.412008 0.691995 0.414008 0.577313 0.416008 0.483322 0.418008 0.536498 0.420008 0.504125 0.422008 0.548830 0.424008 0.493233 0.426009 0.477806 0.428009 0.407442 0.430009 0.503880 0.432009 0.460940 0.434009 0.469029 0.436009 0.501596 0.438009 0.405411 0.440009 0.418834 0.442009 0.478496 0.444009 0.420672 0.446009 0.447649 0.448009 0.375458 0.450009 0.400451 0.452009 0.373357 0.454009 0.434920 0.456009 0.422812 0.458009 0.340769 0.460009 0.414966 0.462009 0.369741 0.464009 0.385961 0.466009 0.366010 0.468009 0.353909 0.470009 0.320795 0.472009 0.422465 0.474009 0.402222 0.476010 0.335765 0.478010 0.409413 0.480010 0.384967 0.482010 0.381460 0.484010 0.357884 0.486010 0.423619 0.488010 0.450770 0.490010 0.421563 0.492010 0.386944 0.494010 0.434098 0.496010 0.414335 0.498010 0.373130 0.500010 0.494584 0.502010 0.399168 0.504010 0.327445 0.506010 0.414090 0.508010 0.548788 0.510010 0.413589 0.512010 0.415560 0.514010 0.402811 0.516010 0.467932 0.518010 0.447742 0.520010 0.514848 0.522010 0.545292 0.524010 0.585226 0.526011 0.481420 0.528011 0.542183 0.530011 0.566527 0.532011 0.639324 0.534011 0.665601 0.536011 0.728721 0.538011 0.628460 0.540011 0.745176 0.542011 0.629362 0.544011 0.755605 0.546011 0.730199 0.548011 0.538527 0.550011 0.716283 0.552011 0.653197 0.554011 0.750977 0.556011 0.751317 0.558011 0.669732 0.560011 0.890732 0.562011 0.801524 0.564011 0.896916 0.566011 0.728432 0.568011 0.873384 0.570011 0.915557 0.572011 0.801362 0.574011 0.939248 0.576012 0.841058 0.578012 0.982556 0.580012 0.801244 0.582012 0.944939 0.584012 0.849316 0.586012 1.044572 0.588012 0.991711 0.590012 0.775179 0.592012 0.900808 0.594012 1.054818 0.596012 0.949419 0.598012 1.055190 0.600012 0.960703 0.602012 0.994899 0.604012 0.942069 0.606012 0.782694 0.608012 0.862081 0.610012 0.972296 0.612012 1.084091 0.614012 0.859938 0.616012 0.945606 0.618012 0.991509 0.620012 1.135856 0.622012 1.113732 0.624012 1.075624 0.626013 1.136413 0.628013 0.989279 0.630013 0.986572 0.632013 0.963125 0.634013 0.976137 0.636013 1.133298 0.638013 0.942319 0.640013 1.061070 0.642013 1.010832 0.644013 1.017137 0.646013 1.033211 0.648013 1.023089 0.650013 1.207996 0.652013 1.029256 0.654013 0.894798 0.656013 1.034056 0.658013 1.023175 0.660013 0.972134 0.662013 1.000921 0.664013 1.059754 0.666013 1.205824 0.668013 1.291515 0.670013 1.253979 0.672013 1.021328 0.674013 1.099351 0.676014 1.250217 0.678014 1.053546 0.680014 1.240934 0.682014 1.132546 0.684014 1.207390 0.686014 1.143019 0.688014 1.187569 0.690014 1.117158 0.692014 1.017676 0.694014 1.148909 0.696014 1.307952 0.698014 1.134271 0.700014 1.339668 0.702014 1.360803 0.704014 1.209263 0.706014 1.643307 0.708014 1.482189 0.710014 1.620002 0.712014 1.531291 0.714014 1.508616 0.716014 1.551789 0.718014 1.820704 0.720014 1.190510 0.722014 1.871826 0.724014 1.808171 0.726015 1.639588 0.728015 1.896243 0.730015 1.814870 0.732015 2.268629 0.734015 1.860003 0.736015 1.909307 0.738015 2.091058 0.740015 2.307699 0.742015 1.724754 0.744015 2.136682 0.746015 2.482358 0.748015 2.739133 0.750015 2.183903 0.752015 2.505655 0.754015 2.256298 0.756015 2.232645 0.758015 2.418358 0.760015 2.743980 0.762015 2.490451 0.764015 2.591839 0.766015 2.890467 0.768015 2.441939 0.770015 2.795238 0.772015 2.882743 0.774015 2.704971 0.776016 2.864923 0.778016 2.931144 0.780016 2.595133 0.782016 2.778879 0.784016 2.588524 0.786016 2.424629 0.788016 3.490356 0.790016 2.725991 0.792016 2.819722 0.794016 2.795897 0.796016 2.278287 0.798016 2.709274 0.800016 2.864658 0.802016 2.495316 0.804016 2.481585 0.806016 2.761135 0.808016 2.443268 0.810016 2.565330 0.812016 2.160156 0.814016 2.817464 0.816016 2.687451 0.818016 2.225290 0.820016 2.234668 0.822016 2.366997 0.824016 1.801739 0.826017 1.999203 0.828017 2.121902 0.830017 1.658141 0.832017 2.048377 0.834017 1.987455 0.836017 2.056994 0.838017 1.748644 0.840017 2.035117 0.842017 1.991255 0.844017 1.933487 0.846017 1.927148 0.848017 1.526116 0.850017 1.825349 0.852017 1.448218 0.854017 1.266984 0.856017 1.574851 0.858017 1.569314 0.860017 1.461266 0.862017 1.241627 0.864017 1.385409 0.866017 1.438944 0.868017 1.458593 0.870017 1.045023 0.872017 1.156637 0.874017 1.231397 0.876018 1.060101 0.878018 1.208137 0.880018 1.297885 0.882018 1.261846 0.884018 1.073377 0.886018 1.146843 0.888018 1.110004 0.890018 1.142169 0.892018 1.091117 0.894018 1.018172 0.896018 1.325115 0.898018 1.055748 0.900018 0.984488 0.902018 0.967879 0.904018 0.961651 0.906018 1.085517 0.908018 0.924754 0.910018 1.080906 0.912018 0.949908 0.914018 1.084287 0.916018 1.115371 0.918018 1.150677 0.920018 1.197850 0.922018 0.909476 0.924018 0.920649 0.926019 1.061322 0.928019 0.867733 0.930019 1.122616 0.932019 0.730512 0.934019 1.068192 0.936019 1.051183 0.938019 0.939787 0.940019 0.793864 0.942019 0.954387 0.944019 0.949134 0.946019 0.950377 0.948019 0.837390 0.950019 0.920521 0.952019 1.038896 0.954019 1.054405 0.956019 0.800492 0.958019 1.108765 0.960019 1.029235 0.962019 0.886213 0.964019 1.086449 0.966019 0.845174 0.968019 0.825587 0.970019 0.979444 0.972019 0.801748 0.974019 1.027216 0.976020 1.065852 0.978020 0.918422 0.980020 1.073070 0.982020 0.794571 0.984020 1.009434 0.986020 0.789657 0.988020 1.017966 0.990020 0.877302 0.992020 1.009978 0.994020 0.872902 0.996020 0.866302 0.998020 0.851322 3.049679424205e+02 2.259835726033e+02 4.582825874915e-01 2.680463872353e+02 2.141625853653e+02 5.231740344075e-01 2.355948141292e+02 2.030649037295e+02 5.890884776982e-01 2.070720557626e+02 1.929847719797e+02 6.548268540695e-01 1.820024623048e+02 1.841071982023e+02 7.193816095680e-01 1.599679694250e+02 1.765119078743e+02 7.819323547760e-01 1.406011265886e+02 1.701896559003e+02 8.418164329920e-01 1.235789693965e+02 1.650602801823e+02 8.985337456939e-01 1.086176337817e+02 1.609890629028e+02 9.518224933892e-01 9.546762224962e+01 1.578034008239e+02 1.001803669977e+00 8.390964321973e+01 1.553114332041e+02 1.049166815092e+00 7.375095408631e+01 1.533208841935e+02 1.095369599339e+00 6.482214701353e+01 1.516545498708e+02 1.142835320650e+00 5.697432386469e+01 1.501600777143e+02 1.195128929827e+00 5.007661315447e+01 1.487142570824e+02 1.257055202434e+00 4.401398761620e+01 1.472238699840e+02 1.334559838311e+00 3.868534598983e+01 1.456254533319e+02 1.434275606090e+00 3.400182704195e+01 1.438854216430e+02 1.562624192539e+00 2.988532770251e+01 1.420005472786e+02 1.724597716200e+00 2.626720060614e+01 1.399973932808e+02 1.922590427409e+00 2.308710931837e+01 1.379285203982e+02 2.155727436629e+00 2.029202215610e+01 1.358637251011e+02 2.419980289486e+00 1.783532782322e+01 1.338764558197e+02 2.709112123017e+00 1.567605811361e+01 1.320282500419e+02 3.016299195617e+00 1.377820471914e+01 1.303559093072e+02 3.336148879600e+00 1.211011874966e+01 1.288656095431e+02 3.666763770801e+00 1.064398295137e+01 1.275352199420e+02 4.011508248042e+00 9.355347822018e+00 1.263226144169e+02 4.380228764200e+00 8.222723887366e+00 1.251758487077e+02 4.789835871491e+00 7.227223339438e+00 1.240414506579e+02 5.264343723688e+00 6.352245060591e+00 1.228688717559e+02 5.834654184759e+00 5.583197780759e+00 1.216111137835e+02 6.538472436688e+00 4.907256751234e+00 1.202229385257e+02 7.420558509837e+00 4.313149877211e+00 1.186587175264e+02 8.532960587025e+00 3.790969742639e+00 1.168719379270e+02 9.934219924074e+00 3.332008392645e+00 1.148177823395e+02 1.168633847574e+01 2.928612118367e+00 1.124592677172e+02 1.384884250160e+01 2.574053822548e+00 1.097763883030e+02 1.647024317418e+01 2.262420837439e+00 1.067766418728e+02 1.957807528503e+01 1.988516324268e+00 1.035042077114e+02 2.316935060446e+01 1.747772609960e+00 1.000440930064e+02 2.720383880835e+01 1.536175015939e+00 9.651748136730e+01 3.160294630043e+01 1.350194908735e+00 9.306629085685e+01 3.625651584899e+01 1.186730855963e+00 8.982891542035e+01 4.103813255675e+01 1.043056906365e+00 8.691388337114e+01 4.582681024607e+01 9.167771314351e-01 8.438067558766e+01 5.053043899741e+01 8.057856705552e-01 8.223468267428e+01 5.510535691100e+01 7.082316133428e-01 8.043700500142e+01 5.956716578954e+01 6.224881335909e-01 7.892356351996e+01 6.398963467744e+01 5.471253600676e-01 7.762558672375e+01 6.849033381418e+01 4.808865317678e-01 7.648530608569e+01 7.320368200710e+01 4.226670399761e-01 7.546417256280e+01 7.824541364617e+01 3.714960076454e-01 7.454377148874e+01 8.367712359559e+01 3.265200989040e-01 7.372121887768e+01 8.948288666964e+01 2.869892886980e-01 7.300159062338e+01 9.556806330652e+01 2.522443552596e-01 7.239018247590e+01 1.017824376816e+02 2.217058868260e-01 7.188698436434e+01 1.079601014690e+02 1.948646192805e-01 7.148458327893e+01 1.139629629420e+02 1.712729435873e-01 7.116921805899e+01 1.197158468470e+02 1.505374413958e-01 7.092365038045e+01 1.252265216700e+02 1.323123243366e-01 7.073032274734e+01 1.305894966813e+02 1.162936676020e-01 7.057376310858e+01 1.359755192765e+02 1.022143416507e-01 7.044186308552e+01 1.416097761877e+02 8.983955751429e-02 7.032612681170e+01 1.477432927100e+02 7.896295142170e-02 7.022118124324e+01 1.546259786009e+02 6.940314344529e-02 7.012386310913e+01 1.624951913686e+02 6.100071278192e-02 7.003217039665e+01 1.715959043726e+02 5.361553922749e-02 6.994432878077e+01 1.822425671211e+02 4.712446651126e-02 6.985815727234e+01 1.949181851600e+02 4.141924852323e-02 6.977080947993e+01 2.103881673438e+02 3.640474418569e-02 6.967884811449e+01 2.297917342820e+02 3.199733086616e-02 6.957853248782e+01 2.546688827200e+02 2.812350987377e-02 6.946618479519e+01 2.868957469282e+02 2.471868078399e-02 6.933852785878e+01 3.285424944922e+02 2.172606415213e-02 6.919291344387e+01 3.817205441187e+02 1.909575465080e-02 6.902736499974e+01 4.485132210340e+02 1.678388884108e-02 6.884035630317e+01 5.310675633949e+02 1.475191369921e-02 6.863027538446e+01 6.318855763701e+02 1.296594370049e-02 6.839460884722e+01 7.543117523171e+02 1.139619573923e-02 6.812900888296e+01 9.031615850636e+02 1.001649246108e-02 6.782650841753e+01 1.085363754514e+03 8.803825725593e-03 6.747715935584e+01 1.310423758147e+03 7.737972918940e-03 6.706827726943e+01 1.590512859046e+03 6.801159718574e-03 6.658535294760e+01 1.940067526847e+03 5.977763685930e-03 6.601361942674e+01 2.374898865018e+03 5.254053744281e-03 6.534025480379e+01 2.910867555554e+03 4.617961197223e-03 6.455718022478e+01 3.562152917030e+03 4.058878469271e-03 6.366426983735e+01 4.339120040535e+03 3.567482212328e-03 6.267246675446e+01 5.245879972185e+03 3.135577828119e-03 6.160586603077e+01 6.277876537643e+03 2.755962813834e-03 6.050152878588e+01 7.420129432771e+03 2.422306652102e-03 5.940600544608e+01 8.646931410865e+03 2.129045242325e-03 5.836853473873e+01 9.923641204006e+03 1.871288112896e-03 5.743242713839e+01 1.121066534369e+04 1.644736866954e-03 5.662738001373e+01 1.246896420997e+04 1.445613501671e-03 5.596541146964e+01 1.366584108870e+04 1.270597405701e-03 5.544154120061e+01 1.477972133305e+04 1.116769984168e-03 5.503826029298e+01 1.580312198272e+04 9.815659877337e-04 5.473156067468e+01 1.674371614963e+04 8.627307341121e-04 5.449639557682e+01 1.762387065864e+04 7.582825086473e-04 5.431042588540e+01 1.847902667293e+04 6.664795169402e-04 5.415593097959e+01 1.935486665317e+04 5.857908384214e-04 5.402033020861e+01 2.030272757827e+04 5.148708964889e-04 5.389585571844e+01 2.137272939197e+04 4.525370194686e-04 5.377876175685e+01 2.260505111453e+04 3.977497182033e-04 5.366827369467e+01 2.402154467835e+04 3.495953513739e-04 5.356539430801e+01 2.562129178542e+04 3.072708894787e-04 5.347170544468e+01 2.738334955837e+04 2.700705233922e-04 5.338835705332e+01 2.927757252543e+04 2.373738941853e-04 5.331542911668e+01 3.128152881945e+04 2.086357479260e-04 5.325174824334e+01 3.339993406541e+04 1.833768429424e-04 5.319509150475e+01 3.568312199170e+04 1.611759579161e-04 5.314260751159e+01 3.824173467584e+04 1.416628675319e-04 5.309127888846e+01 4.125456058062e+04 1.245121685445e-04 5.303831822342e+01 4.496496103020e+04 1.094378533045e-04 5.298147100660e+01 4.966054745530e+04 9.618854025191e-05 5.291924721409e+01 5.563401938189e+04 8.454328183916e-05 5.285110492743e+01 6.313094817125e+04 7.430787997631e-05 5.277757730083e+01 7.229745409848e+04 6.531164755442e-05 5.270029342860e+01 8.314101305380e+04 5.740456204151e-05 5.262182417067e+01 9.551247341902e+04 5.045476368410e-05 5.254531164829e+01 1.091129967699e+05 4.434635659406e-05 5.247392006841e+01 1.235275455201e+05 3.897747605122e-05 5.241024129901e+01 1.382832346593e+05 3.425858979196e-05 5.235583788157e+01 1.529249751721e+05 3.011100495556e-05 5.231106317263e+01 1.670958254815e+05 2.646555579024e-05 5.227518098782e+01 1.806098846275e+05 2.326145023455e-05 5.224668896173e+01 1.935123615479e+05 2.044525613984e-05 5.222369845386e+01 2.061308984463e+05 1.797001022759e-05 5.220425027281e+01 2.191284356976e+05 1.579443492276e-05 5.218651101326e+01 2.335660368913e+05 1.388225000263e-05 5.216885358583e+01 2.509722971636e+05 1.220156758238e-05 5.214985520678e+01 2.733981376512e+05 1.072436034786e-05 5.212824866716e+01 3.034266277081e+05 9.425994167906e-06 5.210285039413e+01 3.441301201637e+05 8.284817291795e-06 5.207247299144e+01 3.990262617420e+05 7.281799281409e-06 5.203581767290e+01 4.721363480416e+05 6.400213656763e-06 5.199133706856e+01 5.682352479972e+05 5.625358962694e-06 5.193706254792e+01 6.933072114664e+05 4.944313605175e-06 5.187040030184e+01 8.551500491813e+05 4.345720368858e-06 5.178791093781e+01 1.064042950091e+06 3.819597022435e-06 5.168509149442e+01 1.333407680239e+06 3.357169853436e-06 5.155617488361e+01 1.680431438951e+06 2.950727356477e-06 5.139395622140e+01 2.126657842772e+06 2.593491635031e-06 5.118965877463e+01 2.698558351860e+06 2.279505372196e-06 5.093287136406e+01 3.428048537624e+06 2.003532485582e-06 5.061162375266e+01 4.352816652907e+06 1.760970809609e-06 5.021271052892e+01 5.516208459941e+06 1.547775349094e-06 4.972241637330e+01 6.966287219399e+06 1.360390824307e-06 4.912781796753e+01 8.753591118568e+06 1.195692382581e-06 4.841880840383e+01 1.092709555886e+07 1.050933487801e-06 4.759086219226e+01 1.352804492018e+07 9.237001187534e-07 4.664828637236e+01 1.658175847359e+07 8.118705125383e-07 4.560728345680e+01 2.008830002734e+07 7.135797817356e-07 4.449769791026e+01 2.401392005723e+07 6.271888152581e-07 4.336211016106e+01 2.828603412660e+07 5.512569442873e-07 4.225135798008e+01 3.279455146982e+07 4.845179174632e-07 4.121679351182e+01 3.740107906645e+07 4.258587846840e-07 4.030124195326e+01 4.195502308072e+07 3.743013373831e-07 3.953170701875e+01 4.631294074984e+07 3.289857957744e-07 3.891640305825e+01 5.035613735668e+07 2.891564710349e-07 3.844674820167e+01 5.400229251024e+07 2.541491633233e-07 3.810279052248e+01 5.720935693906e+07 2.233800854838e-07 3.785953510544e+01 5.997268292048e+07 1.963361277222e-07 3.769210406865e+01 6.231807672454e+07 1.725663009102e-07 3.757885197305e+01 6.429379284239e+07 1.516742158222e-07 3.750258577471e+01 6.596381139578e+07 1.333114728886e-07 3.745051526259e+01 6.740367846874e+07 1.171718522321e-07 3.741357883370e+01 6.869916905747e+07 1.029862070984e-07 3.738560011943e+01 6.994715615352e+07 9.051797552454e-08 3.736252019673e+01 7.125724628095e+07 7.955923539581e-08 3.734179601391e+01 7.275194110193e+07 6.992723710496e-08 3.732196619532e+01 7.456262946587e+07 6.146135599226e-08 3.730234328488e+01 7.681944204890e+07 5.402041374432e-08 3.728277951991e+01 7.963588797480e+07 4.748032408323e-08 3.726346143674e+01 8.309413917424e+07 4.173202348503e-08 3.724471093212e+01 8.724143912631e+07 3.667965241985e-08 3.722679812395e+01 9.210863082156e+07 3.223895678396e-08 3.720979103905e+01 9.775667164273e+07 2.833588286556e-08 3.719346730105e+01 1.043491226146e+08 2.490534241387e-08 3.717729401082e+01 1.122423279802e+08 2.189012721767e-08 3.716045763856e+01 1.220810806830e+08 1.923995509249e-08 3.714191206702e+01 1.348829859011e+08 1.691063136728e-08 3.712041594974e+01 1.520897163217e+08 1.486331188744e-08 3.709454450409e+01 1.755681653921e+08 1.306385524380e-08 3.706267615412e+01 2.075702236628e+08 1.148225342530e-08 3.702296535692e+01 2.506922662840e+08 1.009213140091e-08 3.697331925736e+01 3.078765184126e+08 8.870307285572e-09 3.691140006655e+01 3.824564034331e+08 7.796405755613e-09 3.683467942291e+01 4.782037589937e+08 6.852518266760e-09 3.674057542311e+01 5.993180800575e+08 6.022904408544e-09 3.662670435331e+01 7.503008114813e+08 5.293729414838e-09 3.649127077540e+01 9.356660661811e+08 4.652833453203e-09 3.633359218657e+01 1.159452801912e+09 4.089528845688e-09 3.615469987038e+01 1.424534382531e+09 3.594421839492e-09 3.595787824143e+01 1.731781275581e+09 3.159255955327e-09 3.574892710720e+01 2.079220110391e+09 2.776774301114e-09 3.553591074377e+01 2.461421359731e+09 2.440598554963e-09 3.532825899053e+01 2.869385364166e+09 2.145122599305e-09 3.513532377102e+01 3.291124080668e+09 3.049679424205e+02 2.259835726033e+02 4.582825874915e-01 2.580143967012e+02 2.107917110746e+02 5.426082927241e-01 2.182899237760e+02 1.969684354706e+02 6.280418497061e-01 1.846815194475e+02 1.850487061133e+02 7.121585522137e-01 1.562475401313e+02 1.752656274770e+02 7.930682981603e-01 1.321913197927e+02 1.675964837258e+02 8.693421204564e-01 1.118388488795e+02 1.618268821054e+02 9.400558583882e-01 9.461988985585e+01 1.576110875095e+02 1.005149540682e+00 8.005200023099e+01 1.545371696057e+02 1.066046743531e+00 6.772701543772e+01 1.521942914640e+02 1.126373406299e+00 5.729961283748e+01 1.502241872559e+02 1.192658486550e+00 4.847763643658e+01 1.483466628748e+02 1.274825221439e+00 4.101391123083e+01 1.463656702668e+02 1.385929772224e+00 3.469931783187e+01 1.441690985792e+02 1.540301316776e+00 2.935693333953e+01 1.417297421472e+02 1.749806092407e+00 2.483707429862e+01 1.391041033590e+02 2.019585643005e+00 2.101310285311e+01 1.364177628998e+02 2.345735002147e+00 1.777787859417e+01 1.338283415434e+02 2.716599205799e+00 1.504075668969e+01 1.314720392843e+02 3.117640207549e+00 1.272504818840e+01 1.294169569152e+02 3.538511961844e+00 1.076587134131e+01 1.276471559312e+02 3.980317715907e+00 9.108333738442e+00 1.260812049620e+02 4.461112370318e+00 7.705994327879e+00 1.246070234525e+02 5.018597491481e+00 6.519562225819e+00 1.231104890422e+02 5.710329194895e+00 5.515795860705e+00 1.214867211134e+02 6.613138593918e+00 4.666571607597e+00 1.196368388221e+02 7.823580755521e+00 3.948095817681e+00 1.174610443004e+02 9.458350960490e+00 3.340238165469e+00 1.148598056939e+02 1.164917560198e+01 2.825967635357e+00 1.117502412693e+02 1.452604760013e+01 2.390875344951e+00 1.080972264270e+02 1.818796364880e+01 2.022770835581e+00 1.039503446808e+02 2.266732295247e+01 1.711340518826e+00 9.946934383100e+01 2.789962785978e+01 1.447858709380e+00 9.491587394605e+01 3.371400985488e+01 1.224943147940e+00 9.059756018015e+01 3.985883912725e+01 1.036348164336e+00 8.677789061808e+01 4.606460668162e+01 8.767896857335e-01 8.359646347454e+01 5.212653786164e+01 7.417971869529e-01 8.104571911452e+01 5.797568302674e+01 6.275884348605e-01 7.901219010388e+01 6.370905876257e+01 5.309635173847e-01 7.734832525029e+01 6.956172344973e+01 4.492151880655e-01 7.593296422152e+01 7.581897226353e+01 3.800530141556e-01 7.469915091789e+01 8.268988116770e+01 3.215392030504e-01 7.362996788668e+01 9.019565601115e+01 2.720343090240e-01 7.273474094263e+01 9.813916665311e+01 2.301512990768e-01 7.202192463260e+01 1.061832261120e+02 1.947166909085e-01 7.148248866518e+01 1.139975843326e+02 1.647376741754e-01 7.108865833151e+01 1.213999943426e+02 1.393742938322e-01 7.080299585597e+01 1.284368824993e+02 1.179159161890e-01 7.058920502242e+01 1.353897398738e+02 9.976131830610e-02 7.041904289966e+01 1.427184814664e+02 8.440184287099e-02 7.027423887441e+01 1.509648598648e+02 7.140714658724e-02 7.014478571723e+01 1.606625767586e+02 6.041314277373e-02 7.002547201598e+01 1.723360934443e+02 5.111180034816e-02 6.991233631341e+01 1.866698902619e+02 4.324251338182e-02 6.980030144280e+01 2.048512607129e+02 3.658479941695e-02 6.968249354301e+01 2.289602472653e+02 3.095212196757e-02 6.955090952715e+01 2.621794592342e+02 2.618666412181e-02 6.939767543508e+01 3.086242095967e+02 2.215490681210e-02 6.921620850220e+01 3.728421070941e+02 1.874388786482e-02 6.900177043127e+01 4.593858158015e+02 1.585803701495e-02 6.875094124298e+01 5.729767286329e+02 1.341649820897e-02 6.845968368672e+01 7.195640312202e+02 1.135086417200e-02 6.812026175196e+01 9.082478527657e+02 9.603259766031e-03 6.771817255890e+01 1.153588957260e+03 8.124720438586e-03 6.723070460554e+01 1.477311919966e+03 6.873820329080e-03 6.662828151041e+01 1.908279929703e+03 5.815511594968e-03 6.587892358726e+01 2.480184995003e+03 4.920142437842e-03 6.495574739348e+01 3.227080971755e+03 4.162626316419e-03 6.384720902352e+01 4.176967888995e+03 3.521739069356e-03 6.256865189533e+01 5.343610023949e+03 2.979524254605e-03 6.117107241963e+01 6.717761698214e+03 2.520790044052e-03 5.974038342171e+01 8.260990809897e+03 2.132683577376e-03 5.838168041421e+01 9.906594096892e+03 1.804330849347e-03 5.719097362515e+01 1.157044737306e+04 1.526532040872e-03 5.622731680193e+01 1.316986773805e+04 1.291503757557e-03 5.550067935030e+01 1.464383942896e+04 1.092660953800e-03 5.498030595282e+01 1.596756846729e+04 9.244324323271e-04 5.461483795556e+01 1.715834848082e+04 7.821047498462e-04 5.435156838532e+01 1.827395522176e+04 6.616901553228e-04 5.414797155027e+01 1.940535150537e+04 5.598148607808e-04 5.397562129996e+01 2.066230476892e+04 4.736245141778e-04 5.381940615164e+01 2.214935417579e+04 4.007042258887e-04 5.367450862450e+01 2.393455809231e+04 3.390109080900e-04 5.354230197229e+01 2.602635673295e+04 2.868160313236e-04 5.342604913697e+01 2.837816866245e+04 2.426571943885e-04 5.332736618017e+01 3.092957487782e+04 2.052971506396e-04 5.324459235746e+01 3.367036378178e+04 1.736891426893e-04 5.317300055828e+01 3.671054477273e+04 1.469475742560e-04 5.310630487674e+01 4.032996033573e+04 1.243231974398e-04 5.303818409190e+01 4.499692361949e+04 1.051821202216e-04 5.296361285806e+01 5.132240559186e+04 8.898804601339e-05 5.287978227703e+01 5.991137866923e+04 7.528724764817e-05 5.278643768255e+01 7.121912977097e+04 6.369585480710e-05 5.268658740482e+01 8.532273347144e+04 5.388909870323e-05 5.258584605341e+01 1.018952249999e+05 4.559221267760e-05 5.249126310399e+01 1.201572005034e+05 3.857273375988e-05 5.240853675985e+01 1.391645456226e+05 3.263398949798e-05 5.234168831540e+01 1.578539545145e+05 2.760958756991e-05 5.229073728917e+01 1.755608246764e+05 2.335875378730e-05 5.225326028593e+01 1.920132730862e+05 1.976238787030e-05 5.222547545635e+01 2.076665675001e+05 1.671972648424e-05 5.220316796146e+01 2.239842148093e+05 1.414552004253e-05 5.218318334750e+01 2.429731803338e+05 1.196764417542e-05 5.216233315603e+01 2.682791077346e+05 1.012507894223e-05 5.213805927806e+01 3.045456738731e+05 8.566199168660e-06 5.210961785238e+01 3.567579887800e+05 7.247328007599e-06 5.207565432776e+01 4.300648742505e+05 6.131513196879e-06 5.203029201061e+01 5.380080813171e+05 5.187491727169e-06 5.184349112308e+01 9.817432934456e+05 4.388813911898e-06 0.000000000000e+00 0.000000000000e+00 3.713102317328e-06 0.000000000000e+00 0.000000000000e+00 3.141424789410e-06 0.000000000000e+00 0.000000000000e+00 2.657764010829e-06 0.000000000000e+00 0.000000000000e+00 2.248568726226e-06 0.000000000000e+00 0.000000000000e+00 1.902374061791e-06 0.000000000000e+00 0.000000000000e+00 1.609480301297e-06 0.000000000000e+00 0.000000000000e+00 1.361681118499e-06 0.000000000000e+00 0.000000000000e+00 1.152033651473e-06 0.000000000000e+00 0.000000000000e+00 9.746639768273e-07 0.000000000000e+00 0.000000000000e+00 8.246025335369e-07 0.000000000000e+00 0.000000000000e+00 6.976448852957e-07 0.000000000000e+00 0.000000000000e+00 5.902339202035e-07 0.000000000000e+00 0.000000000000e+00 4.993601872550e-07 0.000000000000e+00 0.000000000000e+00 4.224775772450e-07 0.000000000000e+00 0.000000000000e+00 3.574319856293e-07 0.000000000000e+00 0.000000000000e+00 3.024009586119e-07 0.000000000000e+00 0.000000000000e+00 2.558426314545e-07 0.000000000000e+00 0.000000000000e+00 2.164525283584e-07 0.000000000000e+00 0.000000000000e+00 1.831270135332e-07 0.000000000000e+00 0.000000000000e+00 1.549323694204e-07 0.000000000000e+00 0.000000000000e+00 1.310786357025e-07 0.000000000000e+00 0.000000000000e+00 1.108974761176e-07 0.000000000000e+00 0.000000000000e+00 9.382345294742e-08 0.000000000000e+00 0.000000000000e+00 7.937818452824e-08 0.000000000000e+00 0.000000000000e+00 6.715694190588e-08 0.000000000000e+00 0.000000000000e+00 5.681730910015e-08 0.000000000000e+00 0.000000000000e+00 4.806958926013e-08 0.000000000000e+00 0.000000000000e+00 4.066868790926e-08 0.000000000000e+00 0.000000000000e+00 3.440724586412e-08 0.000000000000e+00 0.000000000000e+00 2.910982942443e-08 0.000000000000e+00 0.000000000000e+00 2.462801505433e-08 0.000000000000e+00 0.000000000000e+00 2.083623083710e-08 0.000000000000e+00 0.000000000000e+00 1.762823818888e-08 0.000000000000e+00 0.000000000000e+00 1.491415525550e-08 0.000000000000e+00 0.000000000000e+00 1.261793859385e-08 0.000000000000e+00 0.000000000000e+00 1.067525257923e-08 0.000000000000e+00 0.000000000000e+00 9.031666843409e-09 0.000000000000e+00 0.000000000000e+00 7.641131239281e-09 0.000000000000e+00 0.000000000000e+00 6.464685603247e-09 0.000000000000e+00 0.000000000000e+00 5.469368165539e-09 0.000000000000e+00 0.000000000000e+00 4.627292024099e-09 0.000000000000e+00 0.000000000000e+00 3.914863806610e-09 0.000000000000e+00 0.000000000000e+00 3.312122629063e-09 0.000000000000e+00 0.000000000000e+00 2.802180829747e-09 0.000000000000e+00 0.000000000000e+00 2.370750809073e-09 0.000000000000e+00 0.000000000000e+00 2.005744718205e-09 0.000000000000e+00 0.000000000000e+00 1.696935780518e-09 0.000000000000e+00 0.000000000000e+00 1.435671756763e-09 0.000000000000e+00 0.000000000000e+00 1.214632525773e-09 0.000000000000e+00 0.000000000000e+00 1.027624988593e-09 0.000000000000e+00 0.000000000000e+00 8.694095496150e-10 0.000000000000e+00 0.000000000000e+00 7.355533130786e-10 0.000000000000e+00 0.000000000000e+00 6.223058817568e-10 0.000000000000e+00 0.000000000000e+00 5.264942779582e-10 0.000000000000e+00 0.000000000000e+00 4.454340427254e-10 0.000000000000e+00 0.000000000000e+00 3.768540223992e-10 0.000000000000e+00 0.000000000000e+00 3.188327352115e-10 0.000000000000e+00 0.000000000000e+00 2.697445350199e-10 0.000000000000e+00 0.000000000000e+00 2.282140637938e-10 0.000000000000e+00 0.000000000000e+00 1.930777166975e-10 0.000000000000e+00 0.000000000000e+00 1.633510400954e-10 0.000000000000e+00 0.000000000000e+00 1.382011490329e-10 0.000000000000e+00 0.000000000000e+00 1.169233913838e-10 0.000000000000e+00 0.000000000000e+00 9.892160483726e-11 0.000000000000e+00 0.000000000000e+00 8.369141356375e-11 0.000000000000e+00 0.000000000000e+00 7.080609656325e-11 0.000000000000e+00 0.000000000000e+00 5.990463175419e-11 0.000000000000e+00 0.000000000000e+00 5.068158082121e-11 0.000000000000e+00 0.000000000000e+00 4.287853141435e-11 0.000000000000e+00 0.000000000000e+00 3.627685692634e-11 0.000000000000e+00 0.000000000000e+00 3.069159099076e-11 0.000000000000e+00 0.000000000000e+00 2.596624507622e-11 0.000000000000e+00 0.000000000000e+00 2.196842397520e-11 0.000000000000e+00 0.000000000000e+00 1.858611634209e-11 0.000000000000e+00 0.000000000000e+00 1.572455634832e-11 0.000000000000e+00 0.000000000000e+00 1.330356852397e-11 0.000000000000e+00 0.000000000000e+00 1.125532139360e-11 0.000000000000e+00 0.000000000000e+00 9.522426967234e-12 0.000000000000e+00 0.000000000000e+00 8.056332838073e-12 0.000000000000e+00 0.000000000000e+00 6.815961836321e-12 0.000000000000e+00 0.000000000000e+00 5.766561125012e-12 0.000000000000e+00 0.000000000000e+00 4.878728491596e-12 0.000000000000e+00 0.000000000000e+00 4.127588553857e-12 0.000000000000e+00 0.000000000000e+00 3.492095798993e-12 0.000000000000e+00 0.000000000000e+00 2.954444928371e-12 0.000000000000e+00 0.000000000000e+00 2.499571986912e-12 0.000000000000e+00 0.000000000000e+00 2.114732299715e-12 0.000000000000e+00 0.000000000000e+00 1.789143390499e-12 0.000000000000e+00 0.000000000000e+00 1.513682877117e-12 0.000000000000e+00 0.000000000000e+00 1.280632879759e-12 0.000000000000e+00 0.000000000000e+00 1.083463780633e-12 0.000000000000e+00 0.000000000000e+00 0.000000 1.000000e+00 1.434566e+00 1.432668e+00 0.010000 1.000996e+00 1.034368e+00 1.033987e+00 0.020000 1.007872e+00 8.482933e-01 8.487163e-01 0.030000 1.026144e+00 8.193693e-01 8.201050e-01 0.040000 1.060833e+00 9.005929e-01 9.013257e-01 0.050000 1.116496e+00 1.053724e+00 1.054272e+00 0.060000 1.197241e+00 1.248166e+00 1.248448e+00 0.070000 1.306512e+00 1.459942e+00 1.459946e+00 0.080000 1.446506e+00 1.670752e+00 1.670514e+00 0.090000 1.617126e+00 1.867122e+00 1.866702e+00 0.100000 1.814524e+00 2.039626e+00 2.039098e+00 0.110000 2.029607e+00 2.182198e+00 2.181636e+00 0.120000 2.247143e+00 2.291510e+00 2.290978e+00 0.130000 2.446382e+00 2.366423e+00 2.365976e+00 0.140000 2.603824e+00 2.407510e+00 2.407187e+00 0.150000 2.697981e+00 2.416636e+00 2.416460e+00 0.160000 2.714808e+00 2.396601e+00 2.396577e+00 0.170000 2.651704e+00 2.350832e+00 2.350953e+00 0.180000 2.518282e+00 2.283127e+00 2.283376e+00 0.190000 2.333563e+00 2.197448e+00 2.197796e+00 0.200000 2.120871e+00 2.097746e+00 2.098162e+00 0.210000 1.902566e+00 1.987832e+00 1.988280e+00 0.220000 1.696364e+00 1.871271e+00 1.871717e+00 0.230000 1.513870e+00 1.751311e+00 1.751722e+00 0.240000 1.360947e+00 1.630835e+00 1.631184e+00 0.250000 1.239061e+00 1.512329e+00 1.512595e+00 0.260000 1.146817e+00 1.397875e+00 1.398042e+00 0.270000 1.081190e+00 1.289151e+00 1.289213e+00 0.280000 1.038307e+00 1.187449e+00 1.187407e+00 0.290000 1.013789e+00 1.093698e+00 1.093557e+00 0.300000 1.002814e+00 1.008492e+00 1.008266e+00 0.310000 1.000072e+00 9.321263e-01 9.318322e-01 0.320000 9.998011e-01 8.646369e-01 8.642957e-01 0.330000 9.960824e-01 8.058369e-01 8.054715e-01 0.340000 9.834513e-01 7.553569e-01 7.549906e-01 0.350000 9.577548e-01 7.126827e-01 7.123379e-01 0.360000 9.169922e-01 6.771917e-01 6.768884e-01 0.370000 8.617940e-01 6.481869e-01 6.479422e-01 0.380000 7.952798e-01 6.249286e-01 6.247550e-01 0.390000 7.222899e-01 6.066621e-01 6.065678e-01 0.400000 6.482631e-01 5.926436e-01 5.926317e-01 0.410000 5.781627e-01 5.821624e-01 5.822310e-01 0.420000 5.157735e-01 5.745598e-01 5.747023e-01 0.430000 4.634795e-01 5.692455e-01 5.694512e-01 0.440000 4.224349e-01 5.657119e-01 5.659666e-01 0.450000 3.929418e-01 5.635443e-01 5.638315e-01 0.460000 3.748639e-01 5.624304e-01 5.627321e-01 0.470000 3.679641e-01 5.621668e-01 5.624645e-01 0.480000 3.721204e-01 5.626632e-01 5.629392e-01 0.490000 3.874083e-01 5.639455e-01 5.641838e-01 0.500000 4.140514e-01 5.661555e-01 5.663428e-01 0.510000 4.522382e-01 5.695497e-01 5.696760e-01 0.520000 5.018122e-01 5.744954e-01 5.745547e-01 0.530000 5.618693e-01 5.814639e-01 5.814544e-01 0.540000 6.303577e-01 5.910219e-01 5.909460e-01 0.550000 7.038367e-01 6.038193e-01 6.036834e-01 0.560000 7.775882e-01 6.205735e-01 6.203879e-01 0.570000 8.462014e-01 6.420513e-01 6.418290e-01 0.580000 9.045780e-01 6.690456e-01 6.688020e-01 0.590000 9.490803e-01 7.023494e-01 7.021009e-01 0.600000 9.784214e-01 7.427250e-01 7.424881e-01 0.610000 9.939735e-01 7.908698e-01 7.906600e-01 0.620000 9.994265e-01 8.473779e-01 8.472089e-01 0.630000 1.000005e+00 9.126996e-01 9.125820e-01 0.640000 1.001584e+00 9.870975e-01 9.870384e-01 0.650000 1.010005e+00 1.070602e+00 1.070604e+00 0.660000 1.030699e+00 1.162967e+00 1.163029e+00 0.670000 1.068607e+00 1.263626e+00 1.263741e+00 0.680000 1.128215e+00 1.371655e+00 1.371814e+00 0.690000 1.213540e+00 1.485739e+00 1.485929e+00 0.700000 1.327870e+00 1.604150e+00 1.604355e+00 0.710000 1.473103e+00 1.724734e+00 1.724938e+00 0.720000 1.648620e+00 1.844918e+00 1.845103e+00 0.730000 1.849790e+00 1.961732e+00 1.961883e+00 0.740000 2.066518e+00 2.071856e+00 2.071960e+00 0.750000 2.282551e+00 2.171690e+00 2.171739e+00 0.760000 2.476419e+00 2.257457e+00 2.257448e+00 0.770000 2.624586e+00 2.325331e+00 2.325266e+00 0.780000 2.706446e+00 2.371603e+00 2.371489e+00 0.790000 2.709671e+00 2.392872e+00 2.392722e+00 0.800000 2.633762e+00 2.386271e+00 2.386101e+00 0.810000 2.490197e+00 2.349715e+00 2.349545e+00 0.820000 2.299110e+00 2.282168e+00 2.282017e+00 0.830000 2.084002e+00 2.183914e+00 2.183802e+00 0.840000 1.866653e+00 2.056821e+00 2.056761e+00 0.850000 1.663794e+00 1.904566e+00 1.904565e+00 0.860000 1.486002e+00 1.732801e+00 1.732859e+00 0.870000 1.338291e+00 1.549223e+00 1.549331e+00 0.880000 1.221545e+00 1.363493e+00 1.363632e+00 0.890000 1.134018e+00 1.186945e+00 1.187090e+00 0.900000 1.072503e+00 1.032027e+00 1.032150e+00 0.910000 1.033025e+00 9.113666e-01 9.114416e-01 0.920000 1.011135e+00 8.363691e-01 8.363771e-01 0.930000 1.001930e+00 8.152130e-01 8.151510e-01 0.940000 1.000015e+00 8.500998e-01 8.499851e-01 0.950000 9.995757e-01 9.335749e-01 9.334471e-01 0.960000 9.947162e-01 1.043715e+00 1.043630e+00 0.970000 9.801295e-01 1.137942e+00 1.137951e+00 0.980000 9.519710e-01 1.145174e+00 1.145283e+00 0.990000 9.086638e-01 9.560024e-01 9.560996e-01 gsl/doc/examples/ieeeround.txt0000644000175000017500000000162213536674414015036 0ustar eddeddi= 1 sum=1.000000000000000000 error=-1.71828 i= 2 sum=2.000000000000000000 error=-0.718282 i= 3 sum=2.500000000000000000 error=-0.218282 i= 4 sum=2.666666666666666519 error=-0.0516152 i= 5 sum=2.708333333333333037 error=-0.0099485 i= 6 sum=2.716666666666666341 error=-0.00161516 i= 7 sum=2.718055555555555447 error=-0.000226273 i= 8 sum=2.718253968253968367 error=-2.78602e-05 i= 9 sum=2.718278769841270037 error=-3.05862e-06 i=10 sum=2.718281525573192248 error=-3.02886e-07 i=11 sum=2.718281801146384513 error=-2.73127e-08 i=12 sum=2.718281826198492901 error=-2.26055e-09 i=13 sum=2.718281828286168711 error=-1.72876e-10 i=14 sum=2.718281828446759363 error=-1.22857e-11 i=15 sum=2.718281828458230187 error=-8.14904e-13 i=16 sum=2.718281828458994909 error=-5.01821e-14 i=17 sum=2.718281828459042870 error=-2.22045e-15 i=18 sum=2.718281828459045535 error=4.44089e-16 i=19 sum=2.718281828459045535 error=4.44089e-16 gsl/doc/examples/monte.c0000644000175000017500000000527013536674414013607 0ustar eddedd#include #include #include #include #include #include /* Computation of the integral, I = int (dx dy dz)/(2pi)^3 1/(1-cos(x)cos(y)cos(z)) over (-pi,-pi,-pi) to (+pi, +pi, +pi). The exact answer is Gamma(1/4)^4/(4 pi^3). This example is taken from C.Itzykson, J.M.Drouffe, "Statistical Field Theory - Volume 1", Section 1.1, p21, which cites the original paper M.L.Glasser, I.J.Zucker, Proc.Natl.Acad.Sci.USA 74 1800 (1977) */ /* For simplicity we compute the integral over the region (0,0,0) -> (pi,pi,pi) and multiply by 8 */ double exact = 1.3932039296856768591842462603255; double g (double *k, size_t dim, void *params) { (void)(dim); /* avoid unused parameter warnings */ (void)(params); double A = 1.0 / (M_PI * M_PI * M_PI); return A / (1.0 - cos (k[0]) * cos (k[1]) * cos (k[2])); } void display_results (char *title, double result, double error) { printf ("%s ==================\n", title); printf ("result = % .6f\n", result); printf ("sigma = % .6f\n", error); printf ("exact = % .6f\n", exact); printf ("error = % .6f = %.2g sigma\n", result - exact, fabs (result - exact) / error); } int main (void) { double res, err; double xl[3] = { 0, 0, 0 }; double xu[3] = { M_PI, M_PI, M_PI }; const gsl_rng_type *T; gsl_rng *r; gsl_monte_function G = { &g, 3, 0 }; size_t calls = 500000; gsl_rng_env_setup (); T = gsl_rng_default; r = gsl_rng_alloc (T); { gsl_monte_plain_state *s = gsl_monte_plain_alloc (3); gsl_monte_plain_integrate (&G, xl, xu, 3, calls, r, s, &res, &err); gsl_monte_plain_free (s); display_results ("plain", res, err); } { gsl_monte_miser_state *s = gsl_monte_miser_alloc (3); gsl_monte_miser_integrate (&G, xl, xu, 3, calls, r, s, &res, &err); gsl_monte_miser_free (s); display_results ("miser", res, err); } { gsl_monte_vegas_state *s = gsl_monte_vegas_alloc (3); gsl_monte_vegas_integrate (&G, xl, xu, 3, 10000, r, s, &res, &err); display_results ("vegas warm-up", res, err); printf ("converging...\n"); do { gsl_monte_vegas_integrate (&G, xl, xu, 3, calls/5, r, s, &res, &err); printf ("result = % .6f sigma = % .6f " "chisq/dof = %.1f\n", res, err, gsl_monte_vegas_chisq (s)); } while (fabs (gsl_monte_vegas_chisq (s) - 1.0) > 0.5); display_results ("vegas final", res, err); gsl_monte_vegas_free (s); } gsl_rng_free (r); return 0; } gsl/doc/examples/odefixed.c0000644000175000017500000000114513536674414014251 0ustar eddeddint main (void) { double mu = 10; gsl_odeiv2_system sys = { func, jac, 2, &mu }; gsl_odeiv2_driver *d = gsl_odeiv2_driver_alloc_y_new (&sys, gsl_odeiv2_step_rk4, 1e-3, 1e-8, 1e-8); double t = 0.0; double y[2] = { 1.0, 0.0 }; int i, s; for (i = 0; i < 100; i++) { s = gsl_odeiv2_driver_apply_fixed_step (d, &t, 1e-3, 1000, y); if (s != GSL_SUCCESS) { printf ("error: driver returned %d\n", s); break; } printf ("%.5e %.5e %.5e\n", t, y[0], y[1]); } gsl_odeiv2_driver_free (d); return s; } gsl/doc/examples/eigen.txt0000644000175000017500000000046113536674414014146 0ustar eddeddeigenvalue = 9.67023e-05 eigenvector = -0.0291933 0.328712 -0.791411 0.514553 eigenvalue = 0.00673827 eigenvector = -0.179186 0.741918 -0.100228 -0.638283 eigenvalue = 0.169141 eigenvector = 0.582076 -0.370502 -0.509579 -0.514048 eigenvalue = 1.50021 eigenvector = 0.792608 0.451923 0.322416 0.252161 gsl/doc/examples/permseq.c0000644000175000017500000000051613536674414014137 0ustar eddedd#include #include int main (void) { gsl_permutation * p = gsl_permutation_alloc (3); gsl_permutation_init (p); do { gsl_permutation_fprintf (stdout, p, " %u"); printf ("\n"); } while (gsl_permutation_next(p) == GSL_SUCCESS); gsl_permutation_free (p); return 0; } gsl/doc/examples/integration2b.txt0000644000175000017500000000024313536674414015624 0ustar eddeddm = 10 intervals = 6 result = 54.115231635459096537 exact result = 54.115231635459025483 actual error = 0.000000000000071054 gsl/doc/examples/fitting.c0000644000175000017500000000216013536674414014124 0ustar eddedd#include #include int main (void) { int i, n = 4; double x[4] = { 1970, 1980, 1990, 2000 }; double y[4] = { 12, 11, 14, 13 }; double w[4] = { 0.1, 0.2, 0.3, 0.4 }; double c0, c1, cov00, cov01, cov11, chisq; gsl_fit_wlinear (x, 1, w, 1, y, 1, n, &c0, &c1, &cov00, &cov01, &cov11, &chisq); printf ("# best fit: Y = %g + %g X\n", c0, c1); printf ("# covariance matrix:\n"); printf ("# [ %g, %g\n# %g, %g]\n", cov00, cov01, cov01, cov11); printf ("# chisq = %g\n", chisq); for (i = 0; i < n; i++) printf ("data: %g %g %g\n", x[i], y[i], 1/sqrt(w[i])); printf ("\n"); for (i = -30; i < 130; i++) { double xf = x[0] + (i/100.0) * (x[n-1] - x[0]); double yf, yf_err; gsl_fit_linear_est (xf, c0, c1, cov00, cov01, cov11, &yf, &yf_err); printf ("fit: %g %g\n", xf, yf); printf ("hi : %g %g\n", xf, yf + yf_err); printf ("lo : %g %g\n", xf, yf - yf_err); } return 0; } gsl/doc/examples/poisson.c0000644000175000017500000000540413536674414014156 0ustar eddedd#include #include #include #include #include #include #include int main() { const size_t N = 100; /* number of grid points */ const size_t n = N - 2; /* subtract 2 to exclude boundaries */ const double h = 1.0 / (N - 1.0); /* grid spacing */ gsl_spmatrix *A = gsl_spmatrix_alloc(n ,n); /* triplet format */ gsl_spmatrix *C; /* compressed format */ gsl_vector *f = gsl_vector_alloc(n); /* right hand side vector */ gsl_vector *u = gsl_vector_alloc(n); /* solution vector */ size_t i; /* construct the sparse matrix for the finite difference equation */ /* construct first row */ gsl_spmatrix_set(A, 0, 0, -2.0); gsl_spmatrix_set(A, 0, 1, 1.0); /* construct rows [1:n-2] */ for (i = 1; i < n - 1; ++i) { gsl_spmatrix_set(A, i, i + 1, 1.0); gsl_spmatrix_set(A, i, i, -2.0); gsl_spmatrix_set(A, i, i - 1, 1.0); } /* construct last row */ gsl_spmatrix_set(A, n - 1, n - 1, -2.0); gsl_spmatrix_set(A, n - 1, n - 2, 1.0); /* scale by h^2 */ gsl_spmatrix_scale(A, 1.0 / (h * h)); /* construct right hand side vector */ for (i = 0; i < n; ++i) { double xi = (i + 1) * h; double fi = -M_PI * M_PI * sin(M_PI * xi); gsl_vector_set(f, i, fi); } /* convert to compressed column format */ C = gsl_spmatrix_ccs(A); /* now solve the system with the GMRES iterative solver */ { const double tol = 1.0e-6; /* solution relative tolerance */ const size_t max_iter = 10; /* maximum iterations */ const gsl_splinalg_itersolve_type *T = gsl_splinalg_itersolve_gmres; gsl_splinalg_itersolve *work = gsl_splinalg_itersolve_alloc(T, n, 0); size_t iter = 0; double residual; int status; /* initial guess u = 0 */ gsl_vector_set_zero(u); /* solve the system A u = f */ do { status = gsl_splinalg_itersolve_iterate(C, f, tol, u, work); /* print out residual norm ||A*u - f|| */ residual = gsl_splinalg_itersolve_normr(work); fprintf(stderr, "iter %zu residual = %.12e\n", iter, residual); if (status == GSL_SUCCESS) fprintf(stderr, "Converged\n"); } while (status == GSL_CONTINUE && ++iter < max_iter); /* output solution */ for (i = 0; i < n; ++i) { double xi = (i + 1) * h; double u_exact = sin(M_PI * xi); double u_gsl = gsl_vector_get(u, i); printf("%f %.12e %.12e\n", xi, u_gsl, u_exact); } gsl_splinalg_itersolve_free(work); } gsl_spmatrix_free(A); gsl_spmatrix_free(C); gsl_vector_free(f); gsl_vector_free(u); return 0; } /* main() */ gsl/doc/examples/fitting3.c0000644000175000017500000000070213536674414014207 0ustar eddedd#include #include #include int main (void) { double x; const gsl_rng_type * T; gsl_rng * r; gsl_rng_env_setup (); T = gsl_rng_default; r = gsl_rng_alloc (T); for (x = 0.1; x < 2; x+= 0.1) { double y0 = exp (x); double sigma = 0.1 * y0; double dy = gsl_ran_gaussian (r, sigma); printf ("%g %g %g\n", x, y0 + dy, sigma); } gsl_rng_free(r); return 0; } gsl/doc/examples/integration.c0000644000175000017500000000150213536674414015002 0ustar eddedd#include #include #include double f (double x, void * params) { double alpha = *(double *) params; double f = log(alpha*x) / sqrt(x); return f; } int main (void) { gsl_integration_workspace * w = gsl_integration_workspace_alloc (1000); double result, error; double expected = -4.0; double alpha = 1.0; gsl_function F; F.function = &f; F.params = α gsl_integration_qags (&F, 0, 1, 0, 1e-7, 1000, w, &result, &error); printf ("result = % .18f\n", result); printf ("exact result = % .18f\n", expected); printf ("estimated error = % .18f\n", error); printf ("actual error = % .18f\n", result - expected); printf ("intervals = %zu\n", w->size); gsl_integration_workspace_free (w); return 0; } gsl/doc/examples/linalglu.txt0000644000175000017500000000004713536674414014666 0ustar eddeddx = -4.05205 -12.6056 1.66091 8.69377 gsl/doc/examples/gaussfilt.c0000644000175000017500000000472013536674414014465 0ustar eddedd#include #include #include #include #include #include #include int main(void) { const size_t N = 500; /* length of time series */ const size_t K = 51; /* window size */ const double alpha[3] = { 0.5, 3.0, 10.0 }; /* alpha values */ gsl_vector *x = gsl_vector_alloc(N); /* input vector */ gsl_vector *y1 = gsl_vector_alloc(N); /* filtered output vector for alpha1 */ gsl_vector *y2 = gsl_vector_alloc(N); /* filtered output vector for alpha2 */ gsl_vector *y3 = gsl_vector_alloc(N); /* filtered output vector for alpha3 */ gsl_vector *k1 = gsl_vector_alloc(K); /* Gaussian kernel for alpha1 */ gsl_vector *k2 = gsl_vector_alloc(K); /* Gaussian kernel for alpha2 */ gsl_vector *k3 = gsl_vector_alloc(K); /* Gaussian kernel for alpha3 */ gsl_rng *r = gsl_rng_alloc(gsl_rng_default); gsl_filter_gaussian_workspace *gauss_p = gsl_filter_gaussian_alloc(K); size_t i; double sum = 0.0; /* generate input signal */ for (i = 0; i < N; ++i) { double ui = gsl_ran_gaussian(r, 1.0); sum += ui; gsl_vector_set(x, i, sum); } /* compute kernels without normalization */ gsl_filter_gaussian_kernel(alpha[0], 0, 0, k1); gsl_filter_gaussian_kernel(alpha[1], 0, 0, k2); gsl_filter_gaussian_kernel(alpha[2], 0, 0, k3); /* apply filters */ gsl_filter_gaussian(GSL_FILTER_END_PADVALUE, alpha[0], 0, x, y1, gauss_p); gsl_filter_gaussian(GSL_FILTER_END_PADVALUE, alpha[1], 0, x, y2, gauss_p); gsl_filter_gaussian(GSL_FILTER_END_PADVALUE, alpha[2], 0, x, y3, gauss_p); /* print kernels */ for (i = 0; i < K; ++i) { double k1i = gsl_vector_get(k1, i); double k2i = gsl_vector_get(k2, i); double k3i = gsl_vector_get(k3, i); printf("%e %e %e\n", k1i, k2i, k3i); } printf("\n\n"); /* print filter results */ for (i = 0; i < N; ++i) { double xi = gsl_vector_get(x, i); double y1i = gsl_vector_get(y1, i); double y2i = gsl_vector_get(y2, i); double y3i = gsl_vector_get(y3, i); printf("%.12e %.12e %.12e %.12e\n", xi, y1i, y2i, y3i); } gsl_vector_free(x); gsl_vector_free(y1); gsl_vector_free(y2); gsl_vector_free(y3); gsl_vector_free(k1); gsl_vector_free(k2); gsl_vector_free(k3); gsl_rng_free(r); gsl_filter_gaussian_free(gauss_p); return 0; } gsl/doc/examples/block.c0000644000175000017500000000036213536674414013554 0ustar eddedd#include #include int main (void) { gsl_block * b = gsl_block_alloc (100); printf ("length of block = %zu\n", b->size); printf ("block data address = %p\n", b->data); gsl_block_free (b); return 0; } gsl/doc/images/0000755000175000017500000000000014057135461011735 5ustar eddeddgsl/doc/images/multilarge.png0000644000175000017500000027334513536675317014640 0ustar eddedd‰PNG  IHDRè åçbKGDÿÿÿ ½§“ IDATxœìÝg@×Âà³ì.¤I‘bCÀ†+`×Äãµ_C4öÄ|¹j4*˜“赡1÷*M¢¹–ØbŒF ŠØ@,¬Ò‹Òvw¾kÆavY–e;ïók÷Ì™™3«»/gæÌEQf¤íè:tžÎ3@#Ðyh:Ï@ç è<4g€F ó ÐtžÎ3@#Ðyh:Ï@ç è<4g€F ó ÐtžÎ3@#Ðyh:Ï@ç è<B‡Ãqtt|øð¡ÌEšoO3)Ýfu¬œmfee™™™Íš5KòÖÈÈÈÖÖvòäÉ¥¥¥*o†Dffæ„ ¬­­­­­'L˜••E/úç?ÿiff–­¦]€r8 VVVÁÁÁ{öìÑÌ~5¼¢rÛÔ|˜Þ¾}{þüù666Í?RŽzrt:Ïo¬[·nΜ9E)·º>ö±µnÍš5^^^;vì¼ …§OŸ~øðáêÕ«Õ±»ŠŠŠöìÙ3#####£gÏžƒ ªªª’,ýþûï===£¢¢Ô±khêo`ÅŠëÖ­Ûºu«¶¥+4¦„éÓ§;::^»vM%[£ê£Ë‘Ë ƒ8Jw ‡Ã¡(jàÀ“'Ož={¶ô"· ¶6^4æÅ‹nnn§N:t(³<77×ßßÿùóçVVVªmÉæÍ›“’’~þùgºdÚ´iAAA‹/–¼=sæÌ¸qãrssíììT»kPštŽ\»vmÆŒéééÞ¯éN˜*Ò*Um¹ ºWžÞÚµkWTTTAAACN:baaaaarúôiI¹ä²³ôˆ#&‡S]]½hÑ"'''fK—.™ššzxxÄÄÄ0W¹{÷îСC-,,æÎ[UUE¯(s/2 srr.\heeåéé¹téÒšš9ía¾3’JN›³$//ÏÙÙ™Y²mÛ¶ñãÇ«|× 4é¹té’‡‡ýa*]®¾0e’n•œãjh NNN<ÏÙÙyÊ”)>dU@.ƒNA瀢¿þ"‘(88øÏ?ÿ”^4vìXV>EGGÓ?èŠtž7mÚÄ*œ>}úÆé·Ç9r¤äõ”)SÖ¯_Ϭüå—_*‘÷LÅÅÅ^^^rÚ#sÅýû÷{zzæää4ÚæiÓ¦­]»–¹®ä†+™qwwOMMeŠD¢N:]¸pÁßßÿüùó2W¤›ÚÔÓ‚|>¿¶¶–YR[[kllÌ,IIIaþAZÇüUñâÅo¿ýæááñŸÿü‡.D˜² Õ¦¬ÕY%rŽK¦Ñ£G_¾|¹ºº:++kóæÍŽŽŽÉÉÉÌ ÈeÐ)è<PTý_ÿû÷ïwêÔ©²²’µÈÝÝ=33“¹VFFF»ví¤·ÐÐ.ž={Æ*ôöö~üø1ý¶¸¸¸M›6’×NNN€YYrs—œÝI/­®®ŽŠŠêÔ©“™™™$¹\®œöHoöÌ™3...=R°ÍéééÌÕŸ>}ÚÐ'cffVVVÆ*üõ×_{÷îMQÔ?ü0vìX™+*M‘Îsii©¹¹¹j÷ Í!Ý© fV@˜² Õ¦LÒ­’s\Šøþûï‡ Æ,A.ƒNA瀢¤~ý׬Y³téRÖ"“ššfµšš™[¹ VÏ¢(cccÖFFF’E\.·ººšYYrËSC»‰DÒK?þøãaÆݾ}»¢¢‚¢¨êêjféö°6{ãÆ '''zhz3ÛÌ"÷b±¸k×®§OŸ¦(ª¢¢ÂÞÞ>##CæºÊQdØ6B@×Ð9"‹_¾|ù믿ÚÙÙýüóÏt„)³DÝaÊ$Ý*9ÇÅ,lhƒùùùÌä2èL Ê+Î;wÿþ}f¡““Saa!³¤°°ÐÙÙYñÍòù|V‰µµunn.ó;)‰mBˆƒƒC^^³2ó­Í«W¯˜KŸ={&½ÇÇïÞ½»G„@ ¿=L=7nÜþýûosnn.³2ë-“££#ëá'Ožäñx#GŽ$„XXXLŸ>ý‡~hhu™³°ÈŸ³Í××÷îݻ̒{÷îuéÒ…Y’íèèØÐN@‹8ŽÝ¤I“vîÜ)Ø,)G˜2KÔ¦òÉ9.faC«K/B.ƒNAç@ccã~øaîܹb±˜.ìÙ³ç©S§˜ÕNž<Ù³gOÉkSSÓÚÚÚ¦î(<<œ9Û3Ó Aƒ:Ä,aÎ6Ù±cÇëׯ3—îÙ³Gz#ÕÕÕ¦¦¦ôÛ½{÷*ذÜÜÜáÇoܸQzO9m2dȘ%ÌçB±ôèÑ#66–Y²nݺ•+WÒo,X°gϞׯ_Ë\]þyA™«¼ûî»û÷ïg–ìß¿ôèÑÌ’ .ôèÑ£¡6€.˜8q¢……’Sf‰ºÃT>9Ç¥ˆC‡õíÛ—Y‚\Ý"ÿ;ÐBÈü.,Y²dûöíô¢k×®ÙÚÚJfÛ.,,üå—_ììì$K}}};& ›´‹¸¸¸üøãEEEçÏŸ§çÕxôè‘““Ó÷ß_PPPPP°cÇŽ©S§Ò9xð`ûöí/_¾\YYùôéÓåË—Ï™3‡H4›2eÊÔ©Sóòò 6lØðÞ{ïIבÙHÿÍ›7Ë<9m~ò䉓“Ó¶mÛ$“šnݺ•9©)Kttô€è·þù§¯¯¯X,fÖ>|ø¾}ûd®®„²²2OOÏuëÖõÕWÞÞÞ’1x´>}úDGG«jÐ|2säĉ;w‰DÂT³aÊ$Ý*9Ç%màÀ‡ÎËË«­­ëÖ­sppHJJbÖA.ƒNA瀢¿ÊÊJÉÉNºäرcffffff'Nœ 9s¦C‡\.·¡xk¨<99yĈVVVfffáááÌY1“““lfffgg7gΜÂÂBúkŠ¢¢££;tèÀçóÛ¶m% ¥³üåË—S§Nµ³³³±±™5kVyy¹‚y/ÿ\›œ6K§innngg7{öìÊÊʆ¼¨¨ÈØØ˜^·ÿþ¿üò «ÎéÓ§e®®œgÏž;ÖÊÊÊÊÊjìØ±ÏŸ?g.ýóÏ?MLLŠŠŠT¸Gh¦†r$ €î"L%o5¦JË… ÆgooÏãñÚ´i3}úô´´4fä2è¥Ô м¿þúë_ÿú×;w´Ý•‰ˆˆHHH¸yó&=©UUU†„„ÄÄÄh»- .S}\„{žtר±c¯\¹RVVVTTôÛo¿EDD,Y²DÛR¥ÈÈÈôôô h»!„²`Á@©í†€*!Lõrt®<讣GnÚ´éþýû"‘ÈÏÏoÑ¢EÓ¦MÓv£ô ÂTg€F`Ø6@#Ðyh:Ï@ç è<4g€F ó ÐtžÎ3@#Ðyh:Ï@ç ú×yÎÏÏïС‡ÃÑvCà ¤3<=ë4R÷[HÔÙH=8xBˆœçFÊo ÿ×UÝo!чFê~ ©"ºßB¢Ôý=i¤ú µK÷[Hô¡‘ºßB‚Fªˆî·èC#u¿…DÔaÛÒ¯ÿl é -ŠÞL -è<4B_;Ï kÎ`ÀôµólHÖ¬Y£í&4B÷[Hô¡‘ºßB‚Fªˆî·èC#u¿…`Øtÿ î·èC#u¿…TÝo!чFê~ ÕÊÀ'öÀÌ% >HåàsõQ_ÊàÊ3@#Ðyh:ϪÁù›‰‰‰““ShhhTTTvv¶¶Û*€Î³ÊPEQTUUÕÇ¿þúëòòò=z>|X‘u9Žº›J3ð;46%‰ÌݹsgÈ!qqq¾¾¾J¬:¿ÞÊÁçêƒ ÃôR÷îÝ—,Y²iÓ&º$''gáÂ…VVVžžžK—.­©©!_v¦~˯ š‡Î³z7îÒ¥KôÛ¾}ûäååÅÆÆfddDEEB$çE¨¿É¯¬n <<ÜÂÂ"<<\ h`ºÏÀÇMiwØ6!¤¦¦ÆÎήªªJzQIII¯^½ÒÓÓå¬.³²Z…‡‡ÇÅÅI^‡……ÅÆÆª{ú ÕƒÏ Ôöõ•X,¦Gb×ÔÔ¬]»¶sçÎæææÇÎÎ.##£¡›TY…’’’d¾hÉÐyV¯çÏŸ»ººJ^/_¾<>>þàÁƒ/^¼ (ªººZ$5´b“*«P@@€Ì×-OÛ 0pÇ “¼>|øpBB‚›››ä­ü;Š›TY…bbb"""ƒ‚‚bbb4³S‡Î³ݽ{wË–-ô„aÕÕÕ¦¦¦ôÒ½{÷Ò¯MMMkkké9•ÕÊËË ÷9°`Ø¶Š‰D¢’’’k×®ýë_ÿ2dÈÎ;}||$‹FŒñÉ'ŸäççnܸñùóçôZÞÞÞüñs`¶œÊ aè<«Œä)Íæææ:uúüóÏ---“““'L˜@WˆŽŽ&„øúúvêÔ)55•y1yãÆK—.511¡g“S4ÌÀŸ‡a€ú e”ƒÏ ÔªÐtžÎ3@#Ðyh:Ï@ç ‡‰'®]»ÖÔÔT²(##cõêÕçÎ+..îܹóŠ+&Mš$%NoôtZÞí‡yIª?0eù¸tvé©íV4— Vù˜gù|ùòe÷îÝO:Õ½{wBHrròðáÃïÝ»çää$©àáá±fÍš‰'-[¶ÌËËkýúõ„ÌÌÌÞ½{ôÑGÓ§Owuu½}ûöwß}wìØ±¦±ۻŽ'ïnîAªÎØŽë9[Û­PÜY£|n >êKO/utže–Ó{9uêÔÚµkoܸA þä“O¦M›&s•’’’^½z¥§§BfÍšåêêºnÝ:™{Dç@7¡¨|n >êK Ûn2ùÿ£Fúí·ß¶lÙBQ”³³3³ç\SSóÝwß8p 33³ººšÂår%‹Îž={éÒ%µ6”†Î³ê}óÍ7ƒ *--½xñ"³|ùòåiiiìØ±£……EMM™™™dÑ‹/ÜÜÜ´ÑXh:Ϫ·nݺ/¿ü²¨¨(::zÛ¶mtùáÇèN²@  988dggwèÐAÓm ó¬bçÏŸOOOß¶mEQ¡¡¡çÏŸ.Ík¾ŠéZ{”cà3vhx¶í’’’ÀÀÀ³gÏz{{BRSSß}÷ݤ¤$[[[BÈÔ©S9ÎÆŒŒöïߟpäÈÉÖèÙ¶g̘áââ’œœüí·ßJfÛöóóûꫯFEß :_)Ÿ¨úRÆH5lY$‹æÏŸ?uêTIϙҥK—)S¦ÌŸ?_ò6::šâëëÛ©S§ÔÔTæ•gww÷k×®=~ü8((ÈÊÊjÞ¼y“'O–,Ú¸qãÒ¥KMLLšèÔMk§~oܸ±{÷î .äää888téÒeÞ¼y&Lh¨¾t×Q‘–ãÜ6¨á¥ Òô>ç9((hæÌ™ƒöôô¬¨¨¸uëÖ²eËF%³¾râÔÇðRé úÎ;ÏÒÒÓÓ{õêURR"s)âtMKH¤3è—qÏ3ŸÏÇœX:é ¡çÒÒÒË—/Oš4iÞ¼yrª9;;óù|—©S§¦¥¥i¬y-Ò€IËgÉTÕ666¡¡¡VVV‘‘‘ Õ=zôáÇËËËoÞ¼zçÎ ¶@ÿ‚ððp ‹ððp@ íæ€Þ@:¨ÒYi¹óLQEQHIIY·n]C5Oœ8Ñ¿SSS77·O>ù$22rùòåŠìBæ“¥äü`0"""ââ⪪ªâââ"""´Ý=)ç9…†é  >HgUÑ|:ëÐŒ±±±3gÎÌÌÌT¤rAA··wEE…üj*¿Y\Î?†dG?þøcttôãÇù|þ€-Z4hÐ fµ{÷î}óÍ7qqqEEE¡¡¡Ë—/ïÖ­›Ì]XZZvéÒå£>úàƒTxÐBX[[———K^[YY•••i·=†§%L|¥é  GÎêÖ"& ëÕ«Waa¡‚•µºƒôÛ¯¿þú‡~عsgAAÁ•+Wx<ÞàÁƒ™«:thÈ!ÁÁÁ •••‰‰‰½{÷6lØ¡C‡dîE ¬X±bݺu[·nÕäa€aù@qz‘Îz鬿t¨óß¹sg+:t¨oß¾jmvìØ±ÿþ   sss__ß#GެY³†^úôéÓ… ^¸páã?nÛ¶-ŸÏwss[¼xñùóç.\˜žž.½ÁÖ­[3fÿþýÛ¶mÓàq€ˆ‰‰ 377 ‹‰‰Ñvs@/@:褳þÒÚ¸©aÆ͟?¿wïÞ¶¶¶………çÎ[µjÕ®]»FŒñ¦eŒ«íƒ š7o^¿~ýìíí³³³<¸yóæ³gÏöìÙSþ^Ô:0Lzã–––2ë/X°ÀÑё٦EEEEGGËÜlEE…]mmm£MŠK{—VÔ„cP³°Îa[k»êbxà  …S_ÊðÔ±QE,_¾|ûöí¥¥¥­[·îÓ§ÏÑ£GƒƒƒeV^¹råöíÛçÎ[ZZêää4pàÀ«W¯vêÔIÃmnT```LLÌÇ,séùóçûí7™‹&L˜0qâĆ6{ûöí6mÚ(Ò€¸´¢¨©©)>è<èƒLg•0ðS¿¾òœšš:~üxssó¡C‡úúú0 ]»vôR33³’’SSSéMUWW;88TVV²6[TTtåÊ•O?ýôóÏ?Ÿ3gN£MŠ<þP§:ÏkÆøDŽõÑv+ÔWP•ƒÏ Ô§ELfºtéòàÁƒ 6˜˜˜œ8q¢gϞÆ ËÏÏWd]æ$Ûô4ë­[·?~¼“““"=gPtžUŒÇã 4(**êÈ‘#999sçΕ,rww—9+!$==ÝÅÅ…~+™j[,¿|ùò×_}òäÉ/¿ü¢‰Ö€,Z»ç¹%055ýæ›oè‘ÛC‡=zô¨¯¯¯tÍ£GöïߟUÈápììì&MšÄápV­Z5eʵ>òbà7iøžçÅ‹oÞ¼™ËåÒ%)))C‡ÍÉÉ!„¤§§÷éÓçÂ… ~~~̵>~÷îÝ/^ÌÉÉ133óóó›={ö¬Y³˜uRRR¾ýöÛ‹/æçç‹D"BÈŠ+Ö­[×h›{õêµxñâ3f¨çh ÉÐ T>7Ptž•¤ûñ¼sçÎM›6]½zÕÉÉIÛm€¦Ñý”ÑMøÜ@}Ô—2˜0LËæÍ›W\\7Põ¥ fŸh:Ï@ç è<4ç·8Ž££ãÇe.Ò|{t° -:Ïõ¬[·nΜ9˜˜Ðy®göìÙ|>÷îÝÚnètžÙvíÚUPPÐP…S§N…„„XXXXXX„„„œ>}š^Äápª««-ZäääD²æp8UUUsæÌ±³³sppX¶lEQÕÕÕóæÍ³···±±Y´h‘P(¤7’““³páB+++OOÏ¥K—ÖÔÔ¨ï`@êz~´ŽhÒ²éÊ›6mºuëÖ¤ݸqãwÞ‰ŽŽ2dEQçÎ[¼xñÙ³g%ÕfÍš5dÈwÞyÇÚÚš^÷Ÿÿüghhè˜1c^¾|9}úô &¤¤¤ 0`̘1ÅÅÅÓ§OŸ>~èС_ý5]ríÚµ… &''K7©¤¤¤W¯^ééé Ë룑µG£<^ 0ž°ÆdB¤¶[ .è*Ÿ¨úRöe022Ú½{÷Ç\UUÅZtûöíQ£F1KF””D¿7nœôÇO¿öó󫬬d–øûû Éëšššµk×vîÜÙÜÜœÃáØÙÙedd4ÿˆ 9Ðy–ÍÏÏïÿøGTû*nAA££#³ÄÉÉ)??Ÿ~Û¦Mé­1 %ùY%eee’×Ë—/?xðà‹/$·F‹D¢f 4 OÛ Ð]+V¬ž6mš¿¿?]èääTXXضm[º¤°°ÐÙÙ™~Ëçó¥7%ýˆæ†Ú|øðá„„777É[úŠ´‚x>adB“ÖP/žO˜¶› è<7ÈØØø‡~˜;wî•+Wèž={ž:uŠyÏóÉ“'{ö쩪VWW›ššÒo÷îÝÛ¤Õ¹]¸]ÂADDDbbbPPPLLŒ———ªšÊA:è;Ÿ±C¹ Ø>ýôSooï… JÅÇÇ¿ûî»Û·o2d!䯿þZ´hÑ™3g‚‚‚Ú‚t¡œ’©S§r8œ7íß¿?!!áÈ‘#’EŠKxxx\\œäuXXXll¬‚Ÿ4 &¾RNËüÜΚٶ•ÔüÎsUUU¿~ý’““éEÇÿúë¯c¦$‘†Ge¨ RF9øÜ¤!TÏyVâYšµµuyy¹äµ••UYY™vÛ ¿2ÊÁç& é  *˜mT& @ækФ3€îÓÎó7>üðCOOOcccWW×Áƒ=zTÛÒW111aaaæææaaa111Únè+¤³ !tŸ~Œ› š9sæàÁƒ===+**nݺµlٲѣGGEEÉ_Ã@}ZxÊ @ážg¶ôôô^½z•””ȯ†xõAʰ @ëpÏ3ŸÏçr¹Ún¼…t¦çÒÒÒË—/Oš4iÞ¼yÚn ‚t€@Ÿ:χÃáØØØ„††ZYYEFF*¾‹‚ëê/@naa.´Ýý)3M´Ý.€tVÒ@…4ŸÎúwÓQaaá… >ûì³>úhõêÕò+·Ø»ªÂÃÃãââ$¯ÃÂÂbccµÚÃÔbSFÒYHg À„al±±±3gÎÌÌÌ”_­ÅƳµµuyy¹äµ••UYY™vÛ`ZlÊ4é,Ò@0a[¯^½ µÝ Ý ý£Å@­Îò!ôš¾vžããã;wî¬íV虡fnn#)Œˆˆˆ‹‹«ªªŠ‹‹‹ˆˆÐ^“À0!iHgã㦆 6þüÞ½{ÛÚÚž;wnÕªU»ví1b„ü[ÂÀ0Åo Âh1ƒ'"""ƒ‚‚bbb¼¼¼´Ý"×RF¤³Hg !5¬¥Û^¾|ùþýû»tébnnxúôé£G6šÍ†Gæi줤$ºóµ4™£ÅÀàhÒYé ò! †Ÿú5°sÛ2Oc+~n'½ .ai˜¥ŒÆØç†tùΆٶ•d`ñ,ó‹‡Ð„£a–2c`ŸÒäC:kXK¶ 2GvyyyÅÆÆVVVÆÆÆ"›Zŧ#µB: élØ êÔ¯4;·ÓØ@cžÆ¶±±©­­Å/ƒæXÊhŒ}nHg !u†m+ÉÀâ€Æ)JS$§ñ‡¾ !e”ƒÏ ÒY ó¬$Ä3*æ¹mirn©ÂW*„”Q>70THg]€Î³’Ï`¨èSÔÆÆÆ¯^½b-•3™'æüT!¤Œr𹀡B:ëLõÐÓ%%%I¦!±±±¡—ÊyZ,*  &HgÆÎ3€~“Îiù“ybÎOuC:$tž ™Ì¹òÀP5ôhÖOÌjø¹Ð|ÝZ¤³!1ð›ŽZø]U˜xˆb?ø¹PN O¥µðÏ _7 HguÂ=Ï Œ¤¤$™¯i8› ïù3¿þ—.]’Y³ÑŸ P¤3€ÁC:*tž Y£DDDÄÅÅUUUÅÅÅEDDh°i Š|‹™_Š¢dÖÄ<%ƒt0xHgC…γ!ktâœÍÐw2¿Å¬Þ’Ÿ‡#s- ÌS 1Hgƒ‡t6Tè<²†æ' ál€¾“ù-fð–ü„††²j2Sœ"ÿçTé `ð΋2h€M•žžNŸ¾JOOg½Õvë Éd~‹­¬¬èy++«†j†……ÑÕ´v ú )£|n,HgƒtÖ.õ¥Œ§â™ßF="3zù«ZÁoºÌ‡&AÊ(Ÿ Ò@ uŸúRÆÀŸÑ†AŠëxF|Bˆµµuyy¹¤ÐÊʪ¬¬L«íyd> B‘§V‚ˆˆˆÄÄÄ   ˜˜˜†zá͇”Q>7 ¤3€>B:ë><ª ”‘_šùçƒßžY8wÿÀ›Ï.ÜF WdN7¢ÈLBô•ç/üU-¬2*´M'ûáÿp/í6³¦!Ð ¤3€^C:·d~ê·žÛŠjÓòïÜͺz7ëZAY6]Îç6|«q•"g¼@(wnûÏ.>²¶¶öçÐa@ëFkÖV‹N¯}Pþâµô_ÿ¦j9)£Z-çs“¤³¥ƒI£5‘Î é¬è<+©åÄó¸%ý¬ýên<ö8¿»Ì ¦üÊá]X›B¼ý–ØaÌ“} s~裑Ó´{Ýx=B!¯²ªË¯ØíÞµ‡uö_ÿ¦j9)£Z-çs“¤³‚•‘Άé¬˜mäÉ+ͰíJÒòz6Ôs&„ÔÔYüõ`REM+BHzჱ+Eb‘Ìš˜ó@ï”V¿l7DÆ¥-ÇÈÂÄÊ”oÆ*·ik6ë«w¤Ç}áë B’t–"ey¯‰ÔßuHgƒt6<è<‚Ÿ¯oÌ)v¹%$¿Zåkëó)“ªk- !w2¯î¿þÌj˜@¿P„Úuù˪:öyè~ÞùñƒëßO;ÿùÈx\cÖÒó©GŸ]`âë B?_ß(³/;—ÜæYzçøª»IG²¤WA: ¤³A2ðqS†70Lz€Á_ßÙðÇÝ5uæŠlÁÚ¬xxצüJᬟ𫋇š› êõWꡟ¯ÿ›UØÚÊõËq?›ñ-$oϧþéúFVS¾Yä˜}.­Úi¢•ÊðRF3 ïs“™ÎßÇ~ÁªV•É=»ù=ü²Ï´öíÃìXuΆé¬E¶ oDDDÄÅÅUUUÅÅÅEDDÔÔUí‹ÿþbê{΄²j»ó)k…¦¡Î?<¢ÖÖ€ºå”%ngqŒ> ¤³™2¸ËÄ Oöà”šºêâVSÒƒG ‰¤Óù`ÂVVákñ•1‡\g·éí=ŒU é `Ά g=“””Ä|}ìöîß“C^U±gðã‰_ð¶r¬|Ì;)½‘â § ©ï Åü«ONW×V¨·Å N»®|Y+bÏD2ªû¬NÝX…ô_édíÆ*|^”ö0÷–ÛÐ2°Òùxòî’ª¬:÷~ÏññêZøåž¬òu bÕD:è;¤³¡BçYÏ0ÏX‡ êñíÙYÅì§Gr(ñ¾™¾—¾Rph¹ð¯õŸ¿ÓIz;/ÊÚ\z8¶¦®êò“ßÕÛbP›g/RŸ½HezµöÓýfIrÆ«/O¦­;•1«ßW|©Û«âPo+ZV:ŸKù•U¡¼àµÃ뎒ݱ±±•••±±±^^^<#þìÐÕ\#³2Ò@¯)˜Îf|‹¿F:ë tžõ óŒu«AýïfK׉žÞsÊÀ·ó{~ýžïâ!ÞÒÕrJ¼òKÛžO=LQb5¶ÔæòãS¬žÙ;Þ4ÄÂÚ¦ÛÈ™Ów\vÿ¿3=#/®>–ºîTÚðg´±YÀZ%éy\yM‰¦š `˜˜éÜgº·ôŒÙëfÅÄ^ˆ“žD—bkÞº—G8«é  ¿ä¥³…Exx¸@ `.mgßiBÀ\Ö*Hg݄γž¡ÏXï;òãï÷:ŠÃªðQ˜ç‚AìlÞ2¹Û‡<¤·v/³aYö¬kjj-¨‰@ 8$üìö‘cz|0ûÿvÄq«FÏiÌÏ·Š²Š«é¥™/«Öž0¾”ö~åkkºP(®»úä µÀ@Ñé|ðø¾g%)¬¥½½‡ù¸È{ºÌ.ï³JÎúHN:ÿkáJzf„Ž;²ºÐáDZž\…tÖMè<ë«^ª©³`öéÐ*zûV B‡CþóÏSBÚ²ÊóKÛ”¶ý+åºZ ê‘QqŸoZï7œkÄkev·õ»¤]á›6´nF‘牤d‡ˆ©7«Ç=:މIT">ýOV‰ßâA‹å¯ÕÁ©«§ƒ«é  wJçþF1gF‰D’ÉéS¾y°×PÖÖÎ:g½”.Hÿ%ž=•ˆ£µèø¢~|®ìS#ç¿ÿìáhÍ~Pû½¬¾©¹7sJ2×Ý”””Ô¾{¦@ûA“v> x쯹4¡˜ûyèïɳŠ+œ!ù¥™žÝœ¤’@“¤ Ò^ÙË*â;ÉÆÜ¡Ñu‡øNb• ôŽÌtîÞ¶Ÿµ™-sfº2ómX§1¬ Hg„γ^šòÅÅUά “:¶¶’÷G³… ïÿ†±gË{Õ® ¬Í_©8½  O‚C{:u²f–Ô ŽÈ}U£øF^U9Ä¥Šù„÷`kÖYphªŸÀ³dߨܧýpEÖ öÜÊÌžYB é  _¤Ó™2 ã(ò÷Ì\.—.gu§½Zû¶³gÏò‹tÖ5è<ë%)û«egQ9­wW™•™æòr°dÏæw7³ïµ§g*^—ª¬} f“>ÎaÌx ¦Œ®=yÿI{Ž" #Gú‹/QQÓêö³0BH»;S+ë,84I•e«Ä»µ¯K«vЬË3â‡wÇ*D:èV:BZ™Ùû»õ&ÏŒðøñcÆÃêbX«è8šU‚tÖ5Zë<_¾|yÒ¤I­[·nÕªUHHÈñãÇå×çHÑL;µB „‡‡³¦ã£ û õ’òc­2)ÈÜHÏÄÒ„÷Ã¥/>{äÛ_ztR%u£(qêËëÌ’„§C3_¶aU3âpƸî‰ÈÛ22kӈȱ>¦|.‘ò(¯Ga™›ãâ =¨ Z¤³òÓ9|P˜{O[Ö*}ÚT|ûƒ|ÞãÕ\M­°é  /¤Ó™Ò¿ã»\£·áËzX«rßöÃMxõ¦ C:ë­užCCC_¼xqüøñ¼¼¼èèèÈÈÈÝ»wË_…ªO3íÔŠˆˆz:>zœ]˜Âw¦êÿÃñ¹µ_Œ Upã yÛK]ƒº—ÕçÂÃ#ÒÖô 'áeE>ýö~vÈ“3®Ï÷·…!³úµs´61ås׌ñ¹÷å !¾Ž¬jáÄ?)ñºðØÓÈï0<¤³òÓYðê·þ<}\#^°×`Å·omfä9ˆUˆtЬt–è×”3hfÆ–A^줳NÑZçù³Ï>»páBß¾}ÍÍÍ÷ïßÿÍ7ßh«1º†96ƒ~ýæϤډÝOiÿÒÕ¶ñÉH$¬LyK†¶gæ”x=Êã$g^V®Á I—ÿN¿~^䓜1@ºÎœ0Ï¥#;² ;8Yžû¬ßô>î¬ò²jÛ;™ýùÖb¡y¹Ê[ úé,‡¼t&Ä+„Ä]Ýz[™Ú4iÃü&³J^Vä#ô3%:9ww±ñhÒFÂ:e• uŠÖ:Ï6l`îjß¾}VV–¶£k˜c3è×’<Ÿ°:ʼ^mµh0»3,ߢÁÞvÒŸû^yÂþ΀.`My|ïößI׊LÒ‡H?ï}¸¿ÓŽéÝÚZô´nmlÍX…©9…enq£ é,‡œt6±àµéÊî'+8U“‡}§öŽþ¬B¤3€nj(iý;Œjê6Û;ú»Ùz³ ‘κCW& ;s挟û>^ggg>Ÿïââ2uêÔ´´4Í4L+$Óñ±æˆ‰‰ çue Ýí2ÇöoÒö‹ò²Zå\af{Ç¥e¾V+ÝlPæ`ÑÏ7ÍŠj%å©Ù¯ëØÝànm[šÌ3jðÖÓVfü/³§ë§çÆÓa7q•¯ËTÛxÐkHg¦†Ó9¬C_g.¯Þ—ÎÌØ²‡»ŒQ!rHþÿeÃVyJN"Ò@5”Φ|sé1ØòI~~ß}•U~óÙ¤³ŽÐ‰ÎsqqñÊ•+·lÙ"§ÎèÑ£>\^^~óæÍÀÀÀÐÐÐ;wî(²qé¹L8Ndd¤jš®2çðòòúbǯ5|VåV%ç‡Ö¤ç¿EDD<ûc;©­d•ßÏêv?ûFsZªÂ<Ÿ}óæMºÜÈõÍØ­š:󇹬µÚØšý¾¤•)OþÆÿ·áSòì«ðU•CÒ³Àø§ì?Ü)3M´Ý.õB:³4”α±±“`U~x)K‰tŽ‹‹{r=¯¶ªÞMÎu¢Z¤3€Žh4iÁžƒY³5Jò#v)WT[ï¡wu¢Z¤³LšOgíwž Æ·sçÎþýûË©vâĉþýû›ššº¹¹}òÉ'‘‘‘Ë—/Wdû”,:ÏÒ³znü3…U§•ùË×®5õùoIII¤¶Š¤²‡ew¸žÎ>×ZÁ<ŸÍçó%…ví,Zµy3%ÑýìÞu¢z÷_p8äÐü 7©!ÙÒ’’’HÂnRÃ>’|òî-U4ßÐDFFÊLm·KÎ ‘Nçå9O =¾Z L:"R9^±ÝÎÀmÏ:¡Ñt¦õïØä1Û’Ú*Ñó[ŬE7ŸÇ*Õ^§ùtÖrç9''gذa«W¯oÚÀãñãÇ_½jàÝ<Ö¬ž‚•g”°êxµJ(x\JêÏbÒ¨7wj¥žæˆë /Šø®¦‡ oÒ™rPæ—º®®N2X4ô½7w2W¾¶~œË¾«yL×>ííÙx@@©)# ì'LŠ)£ßïØal åžsûÚÓ?)RïoµÊâÚ‚ÇeD¹t&$+™÷±wO!tüt~»¨”ÓÁ©kS7Nÿ<¹ò‚µèiá=¤³.Ðfç977wĈ›6m4¨i÷B û|¿kVÏ}×2YmÌ«?Š•6úü7æ™òÈÈÈàà`®¨Æ(û&«ZV©ßÃܤ&)u`~©%ƒE;ö~ó0ç»™ýDT½±Ù\#ÎWã»(¸ñ˜˜òì*ÉLd-ÊxÑáüÃøf4ôÒY>é9·¥‡S n)ŸÎ\nþà ªþÓ©Œ-¸Hg] ?i#¦(±ñ7éLHáÓòêÒ:æ"‘Xt/›ýiÐ<­už ‡þÍ7ß 8P‰Õ:Ô·o_•·Jw.÷íÕ%²Ï7wpº×ZäÆš¹¤!Ì3å‘‘‘fff"‘Hô8ŽU-·Äù‡{“Δ€:HOMTX–÷ê9!¤´Ú>½=‡Óh?ß6Ö nÜËË+))),,ÌôÎO\Ro EŒ~ˆ}¦‚ý„t–O:Ó_¤”±'$·y5'k*jóÒJY5Ûv·E:hœtfÚ·á7æÍ ¢ÓÙÌÔìEZké,×£™TF}†¾bÅŠ‘#|n8‡Ã¡O`4hÞ¼yýúõ³··ÏÎÎ>xðàæÍ›Ïž=«©ÆjADDÄ«Wony²±±‰ü÷ΰèTVÐÎå;¾º¤àe>’äÞåŠ*D\KzEŒ(÷¾­•n9¨„d"fÉݬ7S|ÝyÞŸb=žJ,Ìûc YÒ„¶’퇇‡ß*ºVáPoÅKiÖUµuæÆ|%›ú é,+cbbŸ±'ñpè¼ïø>VaÞ«šgE•=ÛÙ˜ò¹ÌrÙéLHÖWßVÌšm»ÛZx5ÿ 9ä¤3­î•ÑùÓ—!’›;XõÙ~xxxú­»îÁõ~îg_‰E\#nCë‚híÊsrròäÉ“Y£ÑIJråÊøùù™››÷ïß?--íêÕ«={öÔp›5‰™ "‘èìCö'ÓÊüåèò&qaa=òÍ[±ˆ“ÁŸ™[í¿~[dÛ jw'ë!äe…sFqGö²G¥$°³YzZ#iIIIÕ7NN½¡¶ÕµfÑç1µo …t–•΄SW²êôi?âUUݹ›Ï=óãí~__²[xªý’cÓ¿úŸóÇDì¹}ñá ñß' d§3!Yw^Õ¿šXµ6A:è ;RgÁ­Búµô€Ó9/µL$¬?™Âëò§…ì¹ Aôvå¹ÑÛ¢˜¨Üø1ýG¿ÞùÇ-bìʬàn÷$ ÝÅ7‘˜˜$d2eÊ”[·n‰]"^C™5‹Ê]“‹ž‡Ðæ¨NM]uZ~2!$9#”°.; _“{G‚Ù·VJ†ƒ¹g¾%?5vÜôba{fùbs—5xé ÒY>V:ÏY4«Íx1«NeMwÿ•缋ou¤r:QÙïR¹¨œ6ÔK¡uÎGâú-¸Ü¿Ì¶ý{m&º5”ίËD5/‰©C½-Šé  Kètfj%lCÈ›^±ôÄЧs~ZY¿zŸïd^íäÜCU%p {næè2ý"è4ýxÙêqÿ{É&0³ßù#¾oÎ.ÂÃÃãââáOÿ¡–[/ŸûvxÈÿë<åôÓ,@[’2â¶_VPÚöì}ö$ü‡'ûšeHU­­­ËËßo+(pï„4zIMòÖ¢ò‡ 7¬ÃÜžZGê^öõêZ‹¬â¬EKGt”Ùs&²fmˆ£µKW&«ðDòËüÒšæ4À°Ý¹{Û¹“•äõãüîïL^Yzò@Ýw2{ÎB·Vê^9%Z'Ü·2÷«_ž=”˜-)¤Ó¹$»JXQÿ iÛíM_é  u’tfÎxgžÌÊçS {×{ù±a–/.™lH¨ýd‘è¤;UèCe '}(:)ü9F¸å\íÊ“eÿ·gÿ‘ë/–Y¸Ùz³¶#=?h:Ϻ®âµPäìÏ*ôvÊèèÜ~Ë|Ð…â|û‡uÏŽíìØ³áS$/}F%¨[FÑ£’ªO ýÅT½mk3ÞÂÁìX¥If쬬¬Œmtxç´>Ž<£z”Šˆûàˆ¦>f åÞgÂ¥çò£Ñ¥Oºœ«Y5[ô'‡1Í×5N—(îÔiüouåÿÔÙbßGüEõrêM–ûžèêñŠeËvþ¾ìð‘˜bžöêÛyk§m{ØJ^ ´N’ÎÌ#ŽÑÀž£¤kþûÏ'“7žý0mÍãº7 w÷§ËÙlWêÙ…ºÏG=ÜØoõéô‚ábq½_Œ˜c[•x¨ :Ϻî̽1©÷1æ¾âÛ†gôöZSCºù‡õ”>ìg»¿w³vh¥È3*@Ýîd]#çi~7VùÔwKÕÌûد}OÇV¡°ýÀ¸ËW?%ТŒšN¹ŸÕÛ¡€W»Ô—Ê ÕÞ*ÞŒw„ÿû^ÍɸKiǾá›÷xËÄð>Ýê·¹“qÌg¼K8oŸÙ•z÷zéÍߌÜoãäF§sx×ѬºúØXÛY"tô<ÛœºZšÔ»ªºV4ý¿·öþúû…×Kß_6¡êˆ¸D<_ôûÕêE¯n<úýÎÌ¢ò·w>; …Ôë&]0BçY׿Ë*q³ÚÃ=„YÂ<ýÌår•8µxpˆ§Þ|¡5ufQ~U䂨Ûݬk¹¥å56¬òÙ¡ªÚE{Gÿ@Ï'¬gVQ¦¶¤]F‡Èô¼,%ï•GVf·ýÂf¤–.pœ‡ð¿Î žß»è7rï(ÉL$ey\#Ž›£ÍÈY{ßw»µq¢É°…aüoS8íèµìHùou_zßÝ3bÓµêZ‘¤°“s+Óú_|#ê¯[Çκ@zu·¶}™o³Š«û¯¿Tuí× µŸ{RùÌEb¹hÔíÞ’þü SøË–ñ>ØÁuÁ¨;³ŽUt¸îë-¥ûãïQöæB——ãÒ¥Á½Z‚γN«‰OßewžÛÚ¥weÜŠça¹ IDATðL°mll^½zÕÔñÛ„çVf>®•¬Â×Ù»Í+¯)yVôðI~wVy—mvìî´Ò8£ÐN¬³Ø |Fbt(€´å9ÏŠ^]{ôîk£Ý¨"ºü QØP«- "&^¼×÷2ÓÙÝÞ|ÛÔnëæeùíoFoKÄß÷z?=6s÷-ÉL7F£®n½Y»¾qY#‡òHÒ™UÈì<_}ò2$êüè§Û÷Öm2'¯éòtŽËZÞ_ãÿ|ë³eЬE»£"æ,ùØïŸ+ËǬ_ßiÓ8þª âÈÜæxqüî×[/?KÏë)™§é¬è<ë´¸´¢Òj³„Ë{[óÖÌIÂ!’!^"ÑÛÊM=õ~«$9Ó²¬ÓhÙݬøª×fY/Û³Êç„zªvGÝÝûvv‘úÝpì´jC³žŠ`n=¿z)mÌ‚š?‡ˆoÓ…;x£¶¶]ê‘þë⾦óäà¶ç¿¾ÖuÕjÞtÑßq]·37ñ¯UÇR%%=ܰv}7+^$ªïÐ@w³â)ªÞ°M{Kgz~¯Ã7sÞûöÌŽ—«—ˆŽ1§Bˆá{×n§Ù¸•±ßNŽ_67ܳ—‡í¨î.óz­›à{ý‹°±3f´Þ¾7†99ÂPñíUÕ‡/¦N¨Bܺل……âÞ ­@çY§IÙv¶ÉìåD˜$Œy ª©§£æìËãÖ c¡ˆ÷Óu в»YñO º²¦ keÆÿG°ŠŸTáß&ÄÃñ¹… ûqÐ7ò‘l_ÿ^ÐåUñ á¯tÉ Nçïí>´¹¹#ñüqÓ¹[ÛV‰«¦tóe5yó¨gc"ü¥ö»ÿŠý)>“âïÖ›Ï}ûhBHUmùÓBy‘ ¸›Ï*¡/;'Šçïºr¼ú‹Aâ;ôÒ×þ"Þ¼Ÿ¼—ÆGY;®K'K"ňÃY8ÈûÖºwâ{,eÝÙ1_ôûØò;—¦(މ%o÷ÿ¶ãÞ ­ÀŸDº‹¢ÈñdvçÙÝþIW·>¤IÂ24K+¿6%¬Â ÿ»ˆ ý4‰õä9‘Xx?'áIÔTa½ÛZ¨hª0š™±¥sWoGöåGnå¨vGúîÀõgéÌc„[¸äÍu§"Žõ‡&ŸîŸÛû~âÛ1ÕŠ¤³½¥ñ™Oû:ö5¿ˆ"oLeGÊ×®[º÷ÒÕ'/Mùf>.½X XþÍB¤3€&I§óƒœVîmûB2_VMØ¿³j#sÁ<ŽÝHþÚº¾³®®u·7—¿/w{óÓKú,ùð½ &k²9tù¿…»¼_Vß|6ˆr'ëªÊŽ šgÝ•ø¬8·¤Þ¨i¡:ºäµwô' œÆnÒ“i¤ ÷·e•ä =ªª«1¡€Æ°•<.¸û´ 5}›íÃêØ{÷¶ýÚ9¤± “3^=)¨PÇîôÑãüŠù?&í©ÛìH½’”ˆ '‚÷ɼ ýÃ:·V"¹Fœ==ó;ŽúŠ7™.ô¦òöV}óþÖ+O +üÚ±Vym^¢Äü& 4ét®ª­÷Dwc®‰K@Åkáè­×¼üï0ñÛ«\ Fšl˜ðþøŸçšs¥¶-Û?ûµûìýÿÁ_^É1•”ð‰è§º u9®òzÞÉDçY;ÐyÖ]'nç±JZ[çyvåqIó.2³ÐçÒìb͹]+¶à·éH0¡€¦°•Üͺ&}Ù9ØËN…S…1uwïgkñ¢•ÙKV9.>Ðfî¾µ¤ê@_*•.ù–ûþËvËFv&ʦ³)Ÿ{lQÈç¸ata_*5òÕÖÎó÷~»z«¾ƒ§…±— 4E:Y|\{ñ¸&Óþs³ûó£ E§ÞVæt˜bñU̧ï,Ù‘ÃiÚN— mß;|à‡¼ÅK±¥*Õ}ý8=ä†@X\Y¨äÁ@3 ó¬»N$³;ÏmíŸÐ³n6ó"3}.-öøyGKö\»fþ} &ôP'æ`°.]ºÐåמÜΖž*,Ì£ù;’9ÚÓɺ­K«vîYåGn¢ó @!'“ó Ÿ¦.¤K.uûÞrð·%+ÎŽÖ&§>î½ÊjñU#_ºp²8n®ÙíØÂN¢êztsŒ8N¬ Ò@䤳¬‡TõY~8¥8éü&áéÂŽýTãå1óúócÏËÛÐŽXé=­Ûk¿w£xSé’T-ñGÜ|žØ¬Ã¥ ó¬£²Š«SsÙÓö´sxê/õÈŠæ{{."–5)¬¥B§žÍ¿¸ r0ƒBèËV›v|{í‰ kª0kSÞ¤ %§ “9Ñ ‹Ÿ[ˆ‡ÔÈíÛ¯Ò ÙO³hiĵúXêJѯ|òföìŽýGÆ‹øœêÝ^éìÛÆú§ù}f/{Êq¥ W‹thßùþ}ö_Þm»Ú!ÔJN:ç¾zΪœšÛñè—ªÛ@ÿ>T“IüÏ—Lê?ª»‹â;b¥3ŸktxAð·zÃR‰ïŒ¬¾»éÏìæ!4:Ï:êB*{$F+ó—þnέÌì”ØšüËMÌóÖn¢ÖÒ*â’"ˆˆˆÀ¬$j –ššJ_¶*ç>-èʪlõâvANfówÔÐhO_×@[‹Bk³bVùá›ihéßÌfÞ› z{«á*Þ wÛ==ìT•ÎÃüœÖLí;‘¿¢„óf&^3Rû½pûÓÚñµBSæºÝ['&&"Ô§¡t®à±ÿJḬ̈[ósò¡º¯íÈ›¡Å„3›ÿq¯០ïФI§³9ÿ÷Oú¬±šwÝȇ.üJ´ïFŠå£ürš…Î³Žºøð«ÄÕæy7·>MÝŽ$˜;vì(çró­-ŸE¶2gßî(rïŠYIÔ§¡ÇØœ¾—R^þ·9çâJyšK׈×Îá«ü0FnCË&SkŽ=üBø«ÑßlMá´;kæßÑõŽjÓyÁ ¯a½?ã~HW?ú@wS0ˆ¹žµ˜c*D:¨OC¡™’[o¼´XÌMÌ|ç[áÞŽÔÛ ŒâM-óygçŒîÍÙÍÛÑbÏÜÞsy k_RâJRw|þ~öŒß nè<ëú$ô¡+©¬EέžwmÛäx–Œ‰Dt ë„–@ ˆˆˆHLL Љ‰éæàãZÄÚÏ+XzEP™3 Q„:û –UÓ¸J@J2®\¹¢Üµ&E¦22å›»ZyKwž1rZ2@à7v¡eÞí‘â›táZÞ÷k\ŽPåé¼ir׃O½d{•ð§À.»¤Þ .>­Ò@mJçÔÜ[Ìj÷²û  rÿ!ºD—4 ;é2íèÂcžB]-EÒyd×¶f®¢íÜÑtÉ"ñÉç©OßÍoòA3 ó¬[ÞÜóÀ·{Í­÷ät·w*÷rðihņHg*ë„–ô]C|ÙÅ©¶èDøf˜•@MdÎ0”Uœþ$¿«¦(í2!D$)w­I‘©ŒÁùÃñvÒ#·1ç6´X³"f§™ø¯äü}Ùù&§ã5 /o§+S[•§³¥ Ïþᯟðæ0oï~Ÿød(sð¶KÌ F2C3§DPZývfq¥Sv–ÿVáè’{ÏUV‹N}ÜÇÞÒ¸9;b&‚}[ù£r8ö’ªîáÞ%ïÕ Å2Wu@çY·¼ISWV¹ƒU~÷®N“ÿ½˜™Êår¥OhIße1¶{W^³E¸¾C§`VM:˜p»ª–u=}3½§ú®5EDD®VªÝoDDDÎíÇžîwWqgÐ…ÃÅ·<ó.o9÷Tµû9ÐyÖ-oÒÔ…Ýyv¶Éèâ¨Ä™ã@?~,}B‹u—…@ ø×œUmlÙ#B}FLmæ± INÜfÏ>àÀË"UoâY}ך’’’^¤WÔU‹ÚI͹ô#·¡%ª©Q~cW Ð%qFþw-ÛµN#„¨1oýô¿ÊާŒ‚éÂ5¢œ»Ì¢Ž’·&–¼}Gþ‹tФTFçù^fŸ^e9“ÅqtÉî×n}göek>I:w´»ö§…?óvß c6œ¼ŸûªFå{™ÐyÖ-1116¶vÄÙ—UîÒê¹rñÜè8Ö]ÿг®}ÀªöWJ‰HL)ÑPÂk¡09ÚU8½¿W£÷D5_@@%¦ —ÛYX›•°–ÅÈmhyv\„=êK½‹äKÞ”W$C¸Õ˜Îýz›$Åüï÷ƒ·©×;„;n>,½™4(%zБXô(/Yòº¤Ò13Û«ðzéN»]ïÿ÷Ÿ=Ô±kI:=}ÕË3v÷Ñß8/*zÕñϰÿt5AçY·xyyÕZµ!ÆõÆjrD]D­­Þ<õQþs§”Ø#3¿%cA…Ïo‰˜ÕJ«I‚àÿÙ;ïÀ6Ê»?w'Y–§¼-ÉS^ñŽí8Î$NBöN€@)-Ж.xÛ¾”BKÃKË(…2(MÙ½¶3œ8ñŒ÷Š·ã½·¥»{ÿr:=rœÄ±öïó¾ß=gýbt÷½çy~O€À@ü÷bΘRÌ·ó`Bè-s¢îõ‚ZwÍ(B(Ðjn¶Îà˜êµ£R}ÉYŽ‘Éu.Nþn5!O'_ƒªóX}Þ}÷&ÿžzœ³/`Ê×”4ÏSò#H04µ¥£Êa„Ã’YÕkÿ:ñ_Ù€m%¢~&üÕßž#wOù;¦ §Î•]îècj%wêú»3Y…ð¢n`òlvø&¬Ä,Þ.Mñs¸Ã)©ß=êXÐö’v—&ìÔÁxi#ñEvfq£ªŸùõ/ŒðÑêWö£_œEéGnçÖ÷Bä6`S|r¾aÞÀ…8¶N}È â/‚‡Ï#‚EE˵1ÕRçWïΑ®=Aj_^¤ÿ[w=~xÜ!TÙV ¢ñ²ün¹ª¤y^Ò@ËétîÔ›ÔVyü¼ÇÍ|À¶¾:ÏUœù+µ½iÒªÙ±ÿU}÷Ê|½00y6;äsVc,áyêFêw‰zYk¤•:Wc§öåáoó‚1%}©8Ûw_1\‘0ý3¹$ØÝÑÛÝ©ÝÙÜÞ—ëh€ ñáÙºôIîpµ°SBH%õêC#¨³£HðÁž<ÎïïúëñÃyõ©¡ ÕXuGñL}S£Nxw¹Ö˜À¯°]J~èüЇ&ÎìÇÝL]º}äÕ/ âFþ€Î¸XPUÕ64³úÀäÙ¼W1¹Mø÷^æÚ)ÕÞ·l¤~7¨—µ†‡|™zìTM»²¶vœÀà)lS øФG Ï®Hؤ;fêY~Ãgh) ØYÕÝ#ÍU©LgyƒÚ:;@Sôž@„qÔyy”÷줄÷¨õœå×ôAU§gç AÚ3‹ ÕØµÎR„P~ý’_ªŽú±]j»Š žþâ•üf:`{ uޏð¥pqá¥6ŠÑÄãô (»m`òl^\ªéÐéÕfGÇù;¸Š=8Ëí4R¿{Y¹QâЉ¶èãàøè\)f‘ºÔÄÆî~ŸtÇ,Z–Œ ðÄV]¬éUÈ0+><[÷(}†ëí|™ŒhqtôqmTÊÝFSç׷Ǽc;!QŠÑÄÿ)?Ë©]†XÒžÀ8T´å«è‰Î¹²Óëiú gßM®÷‰]ðøâ ÿÄ)ÔÙN0,+y\Ç x‚>ñuVu×äq˜<›éåø|Õǵ1F>‡o¹FêwÏ’¸5þî×0ãáB×Ã2<®Ê¬ÅŒ+ãì222 w¿Oºc-O!ááÔf/Ô 9QÒÌ™2üIÖG߈òPNÃÃLgù˜Zî[ÈFëÖÙ6¨:‡z;=~oÌ‹ÔÜå>æBxmgT}WùðøÀÌ~ú”]ÏE,‘WŸúªÏÄì¸Ú؉\ß=ðÎÃñ1óŸ8…:#„"¥9ÿ.ëGŽj»7Û·~,ó_w[­˜˜<›ßë½’úJ§×ã.‘J‚"exÕ¾óU=£ô¤ã˜¶Ž«tX@)˜bÐtÇÌUì.wSˆ•¹ÕcãOCä6`ýü'«aÙØ%o¶O}Ø ’ÞÚÀ#«ó ›"ÓÝ×䡜å5UZaÃ’ UÞj¨‚p”^Ï©íŒ êÞFgqÆ…?º"6Ü×iŠ §ÍêŒr yx6üGp/7þ)ÕÝgjÆ”ð®n@`òlF Ž©®ÔáóU?÷Æ©AúÅÝ’åÑ"NËõ {¶²Ë$΀ðÙ¥:Ìâï^à?gÒÁ3ÅÍvÌ¢åsBr7|ûxQ»Aýsàßgë¥Oq‡_R©>žuv7d‘")#«³³½à…ÍQ¿<Î"ÍúZ<[·i4·´%ÒžÀÐ ŽõÕwÖ6,~Mù —ÊQDŸr]ýü†YúЩÕ!ãwù}rQêÃ0özl_öÙxÇ`ɳ¹P[[»pë*šåí…óý}ÅBG“¸+ŸëëŠWØ>Y/Í`( ˪O\Åo±y«·‹ŸIü‰‘ÏEÉÜj BçÑÔÜ;ZÚa¢€5s¡º{¤¹ê¦„³|JÞ.ÕÆl{F_wÞ48w?9Ÿ³¼¨ú¬±96»¶ÌÈž€MQ[[ûàÏ67ÏÝ8RÄjûÑ<+xìÏ[b$B#ûscòìæØAKFRÚgÂ/éÃož¬aÙ›\ Ü5·5yîééÙ½{÷¶mÛ‚ƒƒƒƒƒ·mÛ¶{÷îžèÇ=3ìØ±£XoOW*iˆ–vljV?Z6WîŽo‚½ iÏ`(úý?˜ëÇjìcüMåO„oE E‚1O'¼Xà±"ˆÜ6= Î†ãÃ̺ÇèÓäý¥lbV‹“£—³V³Í©ó½Ë—ý>ÕëO‚";õ)o¶ïçÇΔw Á- †bÇŽíìP}sÜŸéÏ9ãj~ßüK‚ŒïZÕ?Gù]y‡ÚÈZÊ‘ME°×e8n1ynnn~â‰'d2Ù_|‘ššzôèÑÖÖÖÖÖÖ£G.Y²äóÏ?—Éd;wîlnn6Ž»VL^^’ÆbF©¤>ÚˆòŒÄw»%2ؘêöÑóFs lŠ¥'f p¯Žó3T‡ª["ˆÃ¼cB2½ÈíȘ̌ÔÙ ô OÊmx˜Ö– ûD°"·€?ÆTêüï—žJHŒ{W }Wþ}¤¿5àþ§~¢n ÀŒ“——×!Ùü+å)«Y—CÂ? ~ôöÃqÒ…Ân§Î!?ɵ:É2š;ûKúð'ªor)p·Übò–••uàÀ¬¬¬_ýêWQQQ......QQQ¿þõ¯/^¼¸ÿþ‹/†……Ç]+&nî"äˆ<ÛB½cŒæƒ~Aüy!Q|C|ç ÿ4šK`; «_|-È«"Rj¼ð}¢åÉ!¹„r¡º{pLe „@ Ì/6.»ä…úÕ‡}Èé°p.¿T˜ÀÞ„êü÷í±ï¶tÜh[å„FŸ¦–¢Ù\Xf–ÈåkЀϯT‡8Ë?©Q±Q÷Fy›Ê%µ:#„ÁFÊsÞåm>oc.”–V\mê7gÖÎ-&ÏÛ·oÏÍÍ]½zõͬY³&77wûöí3í˜Í±ý©—ÒY»r¶ïM PvFóA¿ ~”,Y¦÷Ò\;áj4—Àv8^Ôκ1ÛÔxr°ÐEìf*—BѲ¹!çV‘`„oŸP1ú­õ£êlP>̬L§TØZ;^ÍpŸ8ªs˜ÓÊ9’7¨­œq'}BHûçÔtÍ%°)Æc¶=§üFŒ4-”ÛÛ[ÂÍoý Ñ„.©ÕYMˆWéYQd5!SÚ!ÕOécož„Ígƒp‹Éó§Ÿ~êàà0õ‡O?ýtÆ<²UÊzñÿR£7©Ò/ˆ?KšèïŽ× CÒX%­ çÆÒ¤é-Xûó®c¹ûµXÓÅl« òŒÛ9AÃ*sÔÙpœ¯êo©ä— û„ZÉ/†ŒÞ¤J__½?eݲfB“è!F¿£÷:,yŒ»ÔfŠs•]#M2g9ˋ‡ÅÒjOu›¨ÕYý3E©Â¤…»© ÜÙÇéÓ‡²k{†'Lä5cÕ¶Ï;·}ûv///WW×yóæ8pÀÔÍ<™•zž]Œ,ÏúñÅBǹ G©äSvÙ×4)Xš´1½kb\Å-‹rxTjã²LER³|Brwüýûƒ#9ð^nãX¥:˜Yÿ(}škEs‰Œlw²ç— CFŸ<ë«sˆ—G¼¢íoÔ}ܘÑß; .ׂ:À óüÞÒ?¨¾¦fߨ‚ðÛg—ò‡õ¡S_eh8uV!ÍÿF¸¸‹pQJÐнÙ_fCÙ‹™çv'Ï1y6üÍì3Ë’%K:;;8ÐÚÚúî»ïîÚµë£>2ÂçŽñÊÖ!ÌèÙèaøÄû'ùH1ã#Ͼ©^ÏÎÉÉáŒü¤,îˆ3¥£:)Ä¥ ôh ÷1M›w>êy‚LRÇM'Ô°Žž™5ð^nZ@g–Ñ úp~óC¼-¦OÈaº¥ÂìœÍAwÞãüµpq-á«>´CªgU_¯yn¨3Ì 'ŠÛûªò·2YœåeêÁ(¿‚9A¦ŒÙVÃ_ųŽøxÕ|I¦r–‡™ŒÿdéEwÍ]í<Ó4-fÊ•)øÝï~÷ý÷ß/\¸ÐÁÁ!99yÏž=¯¾úª>×hœ­ì²¹ˆ{æÍ" Ó‡DÉ’e<í¹Aé¦^Ï µ­íøIYÜûóñ˜m™¤.Ba/›Ä>êªÂöÂw'½ Û~ ð^n†€:O›ãÅíñcEÞlŸú°9ÍWxétQŽ”&™ƒ:Ï I “ç¿,Цµo§ÏyÛ“#.Á Î0#°,úã¾ÒçU_q]ë®Á'íãÖ'Œš:s„zA¥r‡©LQKíµ²ëÆvËÚ™þÓbbâðáÃêð!Cóúë¯óÑCCC›ššŒð¹Fã¬^̶k£ÉÃ5Õ„zÇzèõvöP {W„R©Ä±¸Sh†=T ³í^eäÐP}Ôi“áþ±ª„’»]ÃGÈà½ÜÜu¾¾ÍiÞL_äsý}ºø¥Â¿È­I õŽXxØ.¹„дê óÕ×(ñÔf‚ýù×麼µŒ6Žã¯‚cü²gû›xÛSg5>.Íb—«¤æáO!f;sö?Yxô(p—ÜzòL„Z ]\]]ÿøÇ?¾ýöÛ†wçøñã11Æka2Êñ ™>.Íü2z&¤©¡™ìét²×­wOHJNNƱ¸SÎWuuŽó-$ÁøyÔ³‘ì¤hÒ&‡GšŠ»Brw<ùD « íÙ$€:Ï8cJúDQëzú g9@Í÷tÉņ™:µŽÌ’ç¼*x€3na.Åy‰<Ôî†e_zÞ>"Ü·ÐÜÔYÁ*¼Ë>'S9Ã#túgi†ÕûÀô¹õä™eY–e¹8FGGKJJ¦è“a zzzžþù·Þzë6Ç“±k×.CúxS&­~Ù3€òtº.ŽêŒ „¹M£¶ö¼k×®IÕÄ„.:Ï ju–D/)öE½jãám'“ÔðGº9x™•:GÊrO‹b ȵ‘@ìŸT_:.ÞñÑG ÎpW|‘ÝäÔ½œÑVÚQðplÀEG{¡¹©3Gˆwñ·Ôâ ¤IÛ e¯ËzŠO•Xs;ã«óí†m³¬Y,Z´··oÙ²åý÷ß_¼xñm^ÂN†©äyÒê—g+º°%!gûÞùaæ²xŸ——×ZÞ¯?yfe³íÅbXÏ€»„eÑ|½˜mϪßDŠ4FÚêp!Ù­eý!‚`¥®õø ÛH{Þµkפjbj¿@gµ:K·ðb¶‘ÉáþJ§ßDŒ_ŠÑ½›µ: (eŒöKÔCœ}“a7T1t‹NfL’f^.Í&áHJJênñÕ£sÂÞå|i3ô€»$¯¡·±[ç1K Öß½Ú\wÙä¸ÊAMÖ° É!íÙø€:Ï,yyyˆ’þI˜Ëœñ9_*)ÂFšÃ©F­Î#ªpßÂKâKd$wêú»Úê ÓæÓ þmY‹˜RÎò’àqþY$Á˜ÃC@_9B}JøeÃN4ô(ñ_L—[Lž¿úê«äää3gÎÜlÀéÓ§“““¿úê«™v çúõëkÖ¬yóÍ7—/_nèÏ2üWLîçôr|ÓÉWÒ)c<·¦$--mÉ=Kúëû¼\ð²aŒ4zHÀ]²?Ùöt¹î`7dòjaH·»lJÄR„LR‡,TÆçÏß4þÙ0 Î3KRR’ŧPRVÓ'y‰/Ú':‰/ñ‡ˆ07uîº6B‘t¬_ö«®ˆÆ IDATÔýÜ©5LnŒ;•YÕ ê Ó@I3=\ñG•öùy†L(wôRx—"£·yŸ}uæð¬L§âø Ÿ—Ž_þú 4|ž1n1y®ªªJIIY·nÝ’%KÞÿýŠŠŠÁÁÁÁÁÁòòò÷Þ{oñâÅ6l˜7o^UU•A½ìèèX½zõ«¯¾ºlÙ2ƒ~¡áŠ¸ê—½ÃÊÒ–alX¼?!qð4…ƒ“ ¾?ŸùÉ‹27ý§ÙêÿÚBÐ&ý„ç÷*±›Ÿ{ˆIü¹óg-G‰í†Ýñ쩟¾¸6¸Œ ¨óÌ’––æ;oËfF;U>A͉  Hí¹›Â Õ!â[|Ù^‘C„«Oˆý½Åßê Ó`OVchçÅdVóüdñõÐìÀóÁš­:s©‰ ߦoImÍèLëŽÜ62·˜<ûûûüñÇÍÍÍ[·n=yòäªU«||||||Ö¬YsæÌ™|°¥¥%--Íßßß ^®^½ú¹çž[»v­A?ÅðŠÔÙªñ„gGÑÀ‚Ð(Óøws¢dÉr½´gä„b=$`º”_,¿>ˆ<«¢¤sdÊbTúDÉ’ ‚DI%õØ©ªAû¤¤$˜?Pç™Å/ hÜ+f#“ÍYóC}ê±a殉¡Þ£UŒßå×ÚÍçtv¤·SȦs ,þr´òYúÎrŒLnpq t¯B™³:sø{æ}Ni·£—³…u5×*Ûð— `zÜVÁ0//¯§žzêÀ ######õõõûöíûÅ/~áááahB=ôVE­¯¯Ïmhôž}%æ‚!—‡x±öBÝMr’%CI˜6úÛÎnŽÎö}føp¹ú»‡"„dz“g$éëï‡Qãê¿ÔÐv)…©ä,¯SÛâ²Ô)KføàÔ™Ã×¥±œv)&ƒÔ‡–~@un4|ž!n1y6mŽI«¨I$Sû5œ.ʼn¥®ÍÒ“835³d‰ú/Í>ÿô€i£ŸðàQ…rRù˜Â[ Þvóvn¦HZç„ȹ+ @Ô˜€:Ï,ßå´l¦µ1ÛÇÉ9)‘îÃ:·'ERfªÎÒ$„EÒ‘òœ¿SÛ8ûV:«³¶òBu÷Í/@ša_9RõŒê[Îr‚œSë$ñs×´¬3guÖB°RQá—d*gx˜ÉøO4|žn·U•™è´•10ª,iÆË¥&+ÄBG“ø35Ѳd™¹}²¤Ý$΀UX™[߃<ª;Ç÷Ë?˜Ä¥©‰’ÍAQ”ÊÛE¯ôˆ,Ò7L¨óÝ3¡b¶`1Ûñø½©ðŠ1[uVÿá[pFSBª)Äü–Þûò‘ Ó¹Æ×Wš}Z/-dË8Ëk‚ûâ/ˆE™¹:ó‰¨üšZ¬D”ú0’mòê)ɨè4ºkVÈ-&Ïr¹üÒ¥KfÒFÒú¸PÝ­9ˆ†‡é$<×ÖÖ.]ºÔ´¡Ô>l]öC™[úñÁQß5I0=ûóûH7uÊÙ¾×ͱ£­|À¦¶ÌòÍ?n—PIø©,ýzÿK‡`ónÍî#ù’æË÷°%œåUÁý±¹}#óWg>®õæGno¢/ÌoQÒŒ1³Jn1yÞ¶m[mm-MÓè&©M°ì}7œ*iÂ,žÍå]|%æ/q™j¹‹ûÜÖ²ˆÜ€»DóÎMS¬Wv*À³ ±(Ä#ÖlwqÕMn=œZE‚1¾}LI_¬ÔJãê6Ó—¾ÍÁ wÊíNž'«º Û ÷W]SÿÌ)bZZZjjªƒƒƒ ;Bq>„yÅûJÚí¨qþÙÑ ŠyÀí£¹»R0{€gØšœëæÜó)Ä+Ú^(F“¥=Ÿ)ƒ Àò8zµm “Ëž"D4tã1Û­åšÙ©Ùª3EÔF;ÁX¨¬¿ùüýýùœÒª¶!“8 æË¢—W<Ë+²}–Œ-q{—sKQgŽ1åÈ=ìrgÙÌ\:ߢ‚šÛwLžMFzYfñqil- (Š¯Ä …"##cxxØ„¡8¾?•áãëÖ€ €Èm¸}ÒÒÒ/[dñ˜=À½ !ÔZÞožõHÔP¤@ÝGêZÊ«ïëš0Op+j[Íj︣äÜõ³½ªÛ‹°aæ¯Îa>qœ=Jž»×nA3¡©ª F?S~õ(l>Àä+j#ësîe 8Ëߨûcý/H»Íe)êÌÇWR’!HA"õ¡Û!ä"îu ðí ˦>ø S•€iPÕ64ØÞÇhÒ‘D|O%„û´Ó¬Š?llPiêÌý,Œû¿Emæ,;éG.–7vãÝ1@ýyïÕߪöq‡YDTƒŸÂ»”³X:ó©hÎ _çGno¡/~— ‘ÛwLžMÃ𸪸y·¶—!Öd©S·IŒtF£+þýDµ)\³æle×HcÅ:F›¬ñ7Áý1~—HB»ílYêÌÑ6X?T~Ü΃Èí»&ϦáBu·ŠÖé#b/­m4aêÔmäáëJ¹Šñ$ç/¼kÀ‚ÐD|‘䇿…xV!„ì†ÜÍgkëfml}\ü½]üB2½Èm$7ç¨6À8VÔ¶ŠÑ~cO’Ikã|K[®`ú¯Y„:;Û»q‡¢!™Oõ{ÔzÎò¤êè™­}x¥R°q^9Rù?ô~í"zIâSÊcYꬅ@r—ª“(޹8P5·ï˜<›†cExÚ°¯kÃÙWÌçμAÆÈçÊôvœ®â;i`hv®¤qÈÎo§(•\R‹Ê;mFíX§hcç7!ä+i@„î굋otÊRc: Ófx\u©²=•Õ¦7Ÿ$‡Û7õÔ`#Ïȱuæ[¢ý²?"Wô!:»£Á‡ÆO¼sæš)¼3¥°±¿¬¤t}³¼!ØK:¹–¥Î|ü¢£mÕ'ù‘ÛÌÅosšá¨•“gÓpªÏ7÷ôt’šÄ™;%Fž¢ß° Éâ!¦F]W²³Ë\ë”r¸g"LcÇ&eŠ6¶1òy!{ማ¾z½ñg4‚op÷œ)ëLš(qa5iÀ턤Ñ)ÂNXÂ"-óqñ· uæ:Û÷¹ºÔ~@­á,OÑ>N/ïVÝ50Sþr¸âiÕ~!Ò´\­"äÇÙ¨pi!ŒÅ©3ŸÀxOQkîj>gÙÂ\„Èí»&Ï& TYÕÆ`Æ•1r“83 býæI])JgMNEŠ®Ôö˜Ê%° Å÷ééž k0»:f›ív0«¸Ð)ÚØFÉæ(;„T¯aUQ'è1`+j[ÉhÓ›O“‰«b¤%ͱañþøj—Ùë7@:a‰aW>®&ìÕ‡>lßú¡3»ÓaóB¨¢u0+·ì‡t:gyC°5Ü­X@ê,0Y¢:s"6ûÈßÒ…ÉüÈí€Á²Ì ˆÜž&0y6éåí «#o¢¡•ÑɦòçNq{xø¸à!'K ö=Ü‚‹5=mý:9‡Áú¹×"„žò³Š ¢­H ÷‰CI]±«Î”v0,ÌŸ àDq;?áù‘¸:γ¬5çg1“gW±‡ÜMçâêÐ=+Ìùrgyš>ðÏ“•Cã*½«ÀæxõhÕ“ªÃb¤i²ØLxžrH]˜ˆ×Õ³DuæÓÐs9%Òï•ÈY¶0—¾ÍšÛÓ&Ï&`^9f‘»5Í’&N:Ø<‰õ›§ß°ê$4¬€[±?ï:fñqi F¤0J6Ç$.ÝŒ›µ±U—*ùêý#!I#–Ö54QÔ4€ÿ.03Ššú‰îúpVóú¨DÔYA¼Â³ctbˆ?L$[œ:c–ù¡%ï6!Mo¼ ¶=u ãßgëí˜M=£G.W>NŸâ,oQ›·ÍsWµñ‡Y¨:ó)n¹|²œ_s{+µ?·"·§LžMÀÙJ<¼yNP¨eaæÄÈçÉÝðÉsN]o×ЄIüKá@>>yð¨F…ûÆÛ &»ÂìP—*i(èB H¥§ þ/:SA(€¹s¼¸}­ÝvÎ&g…û5÷]ƆEÉæXœ:c–Á±³1Qa_PÚJ~¿¡÷½y¢j\…§€Mñ·cUuEÃêÃNäú­håüP<©ÁBՙϵŽâU1ÎgI£„NäöYˆÜž0y66ƒã≠1!Ô$ÎL›ßÙ^.ÃŽ"ý%†eÏ”ÂK3Ü”«MýµÃ:&‚õ÷¨Fº¡¡7ëBa&¨Ë“ô6 ÷L „¤¼wÀixf–ð|ŠLZçsµ) g9 Ïj"|gÛ ìù–‘‰ÁGÛ½EmV”ÚÉ6Íî>·' Ϲۡ}`ü‹s•OªŽr–÷¨õ.kìÖ{X¬:s0,ÓÚ_8/*à$©£ÙLCäö4ɳ±9TPtží{ï²0yRv¾ ú5·^m›t<¡½¹¸Py:¶©¡øïèSt¡0¸ò$­eý!©+>y>_Õ5¦¤íÜ6}#Ê‚êÖÅL g9E&Σ®÷Õc#-(áYZ1£ƒ]‘,,j±³ü†Þ÷·cU4m¶Ê[§jî;å…úÕ‡„Ã'Â5?_æS×…gVZ®:ó)iξoŽü ¡­¹½™¾´?ÿ:Ô(™0y66 *1‹·¸ÑÓÉ×$ÎÜ ±ò™^äöñâ6c¸{sñgÏ*„»£\̧èBap¥J$¬!äéÒj'Ð)6:A_¨î6‘wpkN•´/PqU‚ ï^Iâ5|V£ì#-T1KIËå?¬x“ÚÂÞ¨Å=‡©–·]úNo9lþQåGéÕ¿¦q–ÈUëæG Ž1¬N:ƒE«3Ÿ¢æK›“¤gs¸Èí@ÔáÛ_q±åÜ10y66—kÇ0 ÙYjOî’¿yr÷:¬VP÷ÐÄÅxi€I(m(»ŽWÒR'Å-x“ªº|‹LŒÑ«VÛYšá Œ=Njëý†Þ÷êÑJØvl÷ÒkW¥û³š|ÙýK°áÙuáEÍ—°‘­ÎüS½#ãÊæ9‘þéD!$Õ+PØØß98n àäÖõ¹÷×°šõQdwE‰Tù*¸0f½û—LáàtÐWgl@Aãù’ý|ΓÚWê§Tÿr¸Â¸ž€‰ùø|CrßùHV0¥"¨w¨Ï¬ ¯ë*ëå´uæSÜœ½5Iv\ÌÕŒgë&Úkõc
ɳÁáKÚÎä`gãèÐ0“86 °d¿yêBÁ|ʯV·!xT·5á<=+‘EµÁÐGÝTÖEÜëd¯ó¯cX6£Ü"C^««³}žŒé¨}ó£g±as×Z´:c ›. ÄüvuØ”vóys¹¯ú*T(lÃþýDÕSªƒœå;rQhTôüPwý˜m+Pg>UíW=œP`€ÿ"œ3®¡s`óùNɳÁáKÚ oIµ2Zf\wî ,Ù#Îo¾«Ã˜ÄE†šÛ€¡ßÂEÜãê0I̶2EsŽ`ÏHg{ BHêZ]‘Û€yr¢¸}­³šó½Âí±añþ ‘å ¯ÎÝöÔÃã•mù. ¬pO) CÔF±O«¼|6Ÿ[áËì¦ÀŽËsYMí^o‘›Ÿ]ÒŸ<[‡:s¨è‰òÖÜM Ò#¤62e“s0&ÏwLžgì«ÌIšSpàˆRç{L ö¡ysMáã4á’=RRRFGG=$^CM´Ÿ;ÞPÒž{è'<yjúaÄùÍ×»Ú¼˜¢9AÑò¹!©t{ÌÚÚÚEËW—\kžÇj§‹'©$§±RgoÉ3ó¿1ùLªÎؘ¼†³"ù?«ÂÞ¤¶rÆû˜ó¥E%…x\ X,‹^;Võz?g9NÎqPįˆöë«ë,ÃÆ›ÿCàvÔ™Oaã…M‰2~ÚóB¶¬ª®ñz^̘˜<Ï<ØW9--M"‘ „œãç`#}]û^RSø8M¸d±X|ùòå‘‘‘‚Ó5þxÚó¹Ê®¾¥™·’ƒÂ<üÓÿ)hìÃzV!„Fz•?ܺÃÌo©›s¨×楮õÒ©ÛÛÐ=€Y±cÇŽ¬ÚÁÅl™Òô‰¨!d Ôð 62À#\âàit§Ï¤êŒÉo8Ë"öÉ¥ÁçT~j£Ñ¿V|õ(ÞD¬C…­TóÕTFÛ”îÔ–?¬×l;cMª¬Fùä7žõsFÞ!ed€Ú"`镪üC¹}'ÀäyæÁ¾Ê …"///55ùÄ`#“vÈ2áþMWû<[ì…#ü³Jšñˆ]jέäÀ ðŸW:(¬Œ‹¸×ͱ!Ô\Ôkþ7ÈÔÍ9fû/¤HH8êæ„o5Ãæ3`Väåå!YÜ2Þ«s:/e;âݱ‘X ‚¯Î,£óÜéîX¶a¾«£}Oö×ïP›8ûè3çsJa© °z^=ZùŒê;n÷<}yÐé‘%áK—.=Wzl5êÌ· ŒöV·_Ý8[z”Ðn>¯c¯,€†UwLžgý¯²B¡xÿÃÝ},^—oÃì£z6spÿƱ¥²‹”»ã+sŒ<‘åM̰•<þs€ñÇ+ßzhöyš‹úÙß S7çp¹ÌòMDÉôjnÃä0+’’’,~)s•³¤“ñ¿ûárïpgl¤ù‡kÞ ¾:OtQØÙ~a MÓ¨üØ×ì¼fB³µn”?Q~íX•Qã’YÑÙSS¼ž¹ÌYÞ¤¶¢’#ÃÃ./oËÅÆ[“:óÉ­ÏØœ(=Jj#ºW0—ʯŒ* “ç™gÒ¯òO^znt‰?Œ@L²—‡)œøÿÆ ~à§×° ù%"Bûí2ÃVò`P¸{„rñA^x¥ÀÏJ„rŒn-@fƒÜ²9Çœ T„T¯ÛsFy§Jwï LÈóÛíçHF°ÍêC%¢²¨˜c{ÿL:ßRf‚ †Máà €©3v6 Ñ !„Æ”Uéoó6ŸŸ OºPÖÐ=‚ÀJyåhÕÓôòƶóURñý¨?ºv!$u%t6h­Mùä5œ]îÑäyÐDÜ8²có& O·Ú[«&Ï3Ϥ_å6{|žìL6=ýóŸÝ»™ÿo\™¸UæZG’ºµIDÎÈ;!DQ”™·’CÀÝ#Á©"DðO9Ù÷{8¶#„&ÚìDB{+¸A—éíÒ, u–®ûG•9µ½7» ŒLÅ€h)/f;‡  ”²Îذ†Â®'v>a\×f L±³®R±‹¯=B•ÜÃÞÓ‰\Õvg4ú¸òè›'ñÞ“`äÕ÷•—>@Ÿã,oR[BÇK£B&á‰V¦Î|K÷P[SOåšxÍçu 4¬º`òl ”ôÄ Ox&:JÍ<ä6ñr–+¼|\š0;á?'%%¥ªªÊü[É€áįÁ,•ˆ`B¿ü/S,[ÏPïФ½]š±S§Ka10N—v,c ¹Ã 2þÞ(OY¬ 6¬©°ÏjÔÙß{ Jò (*%6lÓÜÀÝ‚ œýIÕÑ/3+:Æë#ƒ—Tüš>įxÑåžý¯ý"55ÕÙÕ)0Ÿ<[™:cÆÜúŒM 2þäy “s¢¨UI3¸ `òl .^ËêôÇŒÃYf r›ÔÖÖœ®ÑoX¹òGÙÙÙ–þÜ€»¡­,¿„ ô¬DÙ ìãü-5¯RŸ¤ÀT„Ô­³Ÿ)ÃûÀ€IPÒÌÙòŽT¦˜³|OÌVx·“Ba´’i)ê³&uÆŒÛ~²R¥ReggÿeûœO„«û‘&@Ý >8vü§ô’°ÀÂ)»>p1¯üÇôiÎòjË/V„ÇÌ ËÈÈȼz‹Ù¶Juæ³ï܇óìãµÅ‡í .ͬè2¶s– LžÁž¬†ÕùSÛà Ã|-=DÍŽ;²”xàµFÊ®Ôt@õNÀ¦ù.·…Ñ-´í`7èåÔŠŠó›/ˆMä×Ì“¼Œ@„L/íùRM7”!ÌK5=!#•ì€ú°9U‰#Æé ذ¶²¡…ó[“:cÆÚβžá„Pˆ·ãÚ”ðÚИ_Ó?ù¾¼wnXÀªxåHÕÏU‡ÄhB}ØLxs\öËåš’½¹õéØx«Tg¾ÅÎýæÙ÷DÉNÚrbë訹}›ÀäÙà(é‰ó•x”7Û˜iùÑ jòòòzšF˜N‰¾dµ'½Z=¶ÌÞ\\Š=51ÛÉAËLá‘¡ðt’x„»9tÚ ‡ùvÞ­„ÅlÀôœ.íXÎjëlgq‹#fKOSIH³¶:öÔä7ôÝ;ËÔ“çGyÄÛÛ;++ë6dzºÔ·ä«+ÙãJð©½7oq¤¥¥¥¤¤´\í×O{îÉHÓ Ë:ê¯Àíóev“^Ìö—K B¨½bP,´Ô^8ê-,GGÇÝ/îAéGnC·g‹ÃúÔ¹gx¢¢®m.SÉYÒÉxG®JÍE}ñ1 ÆuÍ€pêŒÙË[ó‹ÊnN+Úû.µq i2¿ýØ®¥édà=ÛÀiéýîBÅÏècœårãÃKÂ}\DêÃôâCØ%V¬Î|ìÜ‚èŠ õ;Ojˉ­c®ȇÈí[cÊÉsiié®]»¢££M胡QÒéexÞ¯;jùôßï›ÄC P(²³³[ÊzB½ÇDÝÚH$…4Õü¬£þ Ü>Ÿ]ÂKÐy•ˆE ûñÚž–‹z kddäôÁsÊR¿fXùõÁºÎáÉ.ÌëSçïË:ÐÅüZ»ŒG@ûÀ÷Ø0Ç+©E¢†SgW±N³LšQÍ_wã¹ëÚøØÐç”6Nõ·ªL–ë¸ IDAT}ÿ8Y5¦Ôm? È'ª?îÆjÞÃ{óEk~·Z³ḭ́Ln]v‰«3v6·>sS‚nÃ*H{¾= çÙ°5_¬ë ÄŒxpµuäSñ!2!`¿'¹íž¸ÁÁÁÁ zåÀQÜζ$wg~rϿˢkhbÏÙªŸ«Žp–÷ë¶,ðД˜®l+ Eº‘2V­ÎøÙ†³›dGÉdöF9±9lUgsC-,vß Kš<ûúú …B©TúðÃWTT˜ÚÛâXQVÿˆfÜ’ˆ§@[‰K‚<Ê1ã€c`}[ÕÔ_€ÛäóK˜ÅÕ¡ÛÝ©!4ÖFÅDÄ›Â)ƒÀ*‘(ýBr½ Ž£Waòl͘¿:Ÿ)ë\Æh;<§“ñ^.•ؘxÿ…öBãúe$õ2¯õ;uDÝÉv{j\pĬïÈÅÜÙßÒ{_;Z9¡‚¦¯€óÖ©šûFNø"MÎÿ $XûûµÚÒY¹õø¶³Õ«3ŸšŽbo—1WY`¡)l –E__iÆŒšmg„*²ZŒî‘IKKã¶°vÿíc'_?7|òœQÞ %ˆ¬óWçʶAeGC8«¹ï”ˆº@Å*é3ذäàåFwÍHDËçÚ uj¯L¨Æ®Ôi£ÖŸ[ñ¦` sc*ž­‹î<÷)l>Kÿ¨òßßW>Eä,ÿ¦V¯˜î«)ÄòŒþäÙêÕ™–e™ü†³›eG)^ä6“sÒžo…ÅLž<¸xñb{{{??¿§Ÿ~z×®]Ï>ûìí\¨_” ˆ]»vØ_„*j¾T×á·Í 6ÂG›!e—¸(À£³›ƒÏ"Àº9[ÙYߥ›ÿO°Á^e!–E^„U= EFF†z +D’¸ÄÛ¥Y$ãW1ée¦òpFصkפjbj¿Lù«óéÒŽe¼&U9d¸ŸÔ !¥m;J4ÛÑŒ´™ ¤ìîÁŒYÕG¹ŸWÇú8Ç çs–gUß¾r¤BIÃæ3`‘üó̵5ƒ§ýXMÑ(!zO¸á¹õ³¸ç OõèdÙ‚:c4iÏ„¶aÕ¦¨ ª¥kh¸žÞÆWg‹™¶&…­ ôÄcöÒË;;ðN×`Å|®W*ÌÛ¹Åɾ!4ÑI~øÏMᔑ˜´” X©^­×ÒÓžwíÚ5©š˜Ú/³Ã ÕùTIÇ2š³MÌðÀ÷—âü`{³VÆ¢°u˜¥ªíjÇ€viûO#_<Àm>Ïf¯Evžÿôž~æÏà˜êŸ§*~Kïã,Ÿ’÷Λ=+ÖÏ…³¼ýù_°«lA1Kykn¨²×=¼ŽÐlJÛ#åRºàèUKŠ5¾:[êäÙü_Y”ôÄÑ«- Cñb®ÂÍT.(Yr¤t‹Ü¦v?6ÄŠÙ—‡á^eêßø´uçÿ‡ùÄ»ˆÝô×ýûDÁÒ¥ËjkkMâ`4ÌM•4s¾²#•)æ,ßSñBÞ…ËŠc¶ÕDɒݼø±Y5Ú>gKƒãò7Ÿéoþz¸2Ÿ‹ãÓ5+N±íêÃqBø6µ™Ÿḭ́Œ@:‚]e#êÌ·0,³ó¹mùÇ’ÚÍçuÌH{žK<óÍ7 šuóIc¶7Ì–S¤5‡ù‘¹(|M€'^ˆåÛ«J#€)8rµ­gX'ä‰$uDý¸)ë€ë'¹|Ùò(yr·k¡3‰bí%™Eõ;vì0•‡€q07u¾TÓ£®tGƒêÃ^©Jê*ÖYıî˜m5$A. [‹/Tc‘æ>%ôü†ˆ×¨û¹ÍçæÚ¬Î {.Âæ3`I¨·§ÚËYöË£cf-Õ–ï½Ú”%–ùWÙŽ:cgIÙªî"?íy“—^Ü::ÍênŠùNžùÑêË—/ÿî»ïÚÚÚ”Je]]ÝË/¿üÒK/½òÊ+&tï–d_;ÓÒ‹çNlJ›Äc²(tm‡^ävY»ƒ‡léÒ¥°ïX=úu¶ån×DÂQ„P¸ïl¬b‡ÕÀõ“ÌÌÌ<ðA¦H0æé¤oâŸÄïœX(–¥Î§K;–òšTeqÞ$©ó^hõ1Ûj…â“管ֵ¦:::ªÕyS‚Ì.(ö¥}½þƒê›—TBæ3`A¼{æ¶íüjˮ͑ü1g+bWÙŽ:cg½D>Î Ùª nBÓîÆÅŸ)Ã[[¦œ<óSº§Nï~þùç¿øâ‹˜˜‡Å‹WTT\¸p!11ѸþÞƒc½Ç‹«ÇU:M/„Zãc*—Œ†T´ ÌYl7Ä7²ˆõŽËÌÌ ‡)4`Åô(õÛ2)¼51ÛK"6Ý##ÁŸ_:“?ÞMêGn#¿$~ç Àl±&u>]Ú±ŒÕiRåh_€±ú˜m5RIPˆW4ftlV¿U‡‡‡/[¶ô§)î¯PÛ¹ÍçD¶&¬ýüž,Ø|,ƒÁ1Õ»'˱mçȘ(þ¶sßHWQóEìB›Rgl@Ø Ýrõ¡Uçu4DnO…)'ÏS§wó^¶lÙ¾}ûººº”Jessóž={"""Láòír®êpCÞÌùžOg{Iü12‹Ã×xTaFB±!DÓtff&„nÖÊw¹-ãº)‚BÁ¸Ÿ[ BÈQ䜼ÌD~þ¬8))iÛ‚Ç'™<{†½þîFu ˜UçqSÖÒúòÓÏþüÞ¾½¹LêéQ–Õ·Îeµz”AÆùºÔðǰ*Âêc¶9…¯Ç,In…n¨óׯÿÖ. æ0™Â €ÍgÀ‚¸mçsU‡iF'öÄÖÔ˜èf×™5¬:\ØÊ˜Y óÁ|ö-–eÒ+ö×wEbv[ˆÙV3_±2Ôß[f½g!±Dý3„nÖÊgzùîU¥B-YcG‰Lá”1à÷“LKK[?÷!—AGрΠ‚(ë·7‘ƒ€Y°ûûÚ_>þsÏÿõF­?õˆ8ûSƒ¦—wÎS•ŠX¥úð!í;¹:è4©š°Ìb¶ÕÌW¬ÄžB˜¤­!”——û¦È×°76Ÿ“ØêöóŸéusãv¶YÄž¯>‚]hkêl'ÐbÊŽ\ºÿIõÕˇËU lCf ¶í<oQ›±mçÒ–~‡656§Îz=«–{&Ï’gñœe›‘Û7&Ï3Ï÷å{«Zã1ãüP÷`/G“øc‡­ Ô«¹-ŠZÂ-}™Ä+0(«ÇœDC¾’F„PˆWt€GøM®³Nî ßèç†OTN·Bü§-âíXCHµ‡lkMÇÐãï’Ó¥©´vòœAÆK%õºþÄyÎ2œfˆ~Ãgßyˆ§Îþ´qÖkÔý,¯ç³¢í§Œî,Ü.CãªÝºE¶ÿCÝÃßvF­<€]h›êŒY®ÖÞ!:Wƒ=ËÄ"«.Fr3"¤ žT£:dc`”ΪÆ7çÛ!ÔÛ±Ž7yD-ÝÃã†é$\×9<ÜÑÅj2)TuŽŒÆ&Ï_½yÂjXbê,qðÔ9M Ùl'nc !´5I†âŽðÞ¤ÿ¤ú⥃ecJè^˜)voÿ),ÛùÏ›t–ÆÇúòÏcÚ¦:«ñ®WNPIô‰aS7Ö^_~}ÐèÞY0yžIjkkw¾p_U{4Ãêþa'F*N|lõU²øÕðŸØùÄÖÄx¶¥@|‘ E;ëdÞõÖ¾1Á†ù^EÙ Å)ЦqËtˆ¨ÍjñuÁoùÃ…ÐõÝvq %îH“Ö$b•2¶³¶Ã ‘ÛgÊ:Sé"âFã|J9Žˆí´Ÿ51¢ª¾Øf 5,1už² ¶Ø›køŒ" â…M‘¯´e·ãÙº9]éï¥[ù*`¡ô*o™íŒ:˜½GEOð-6«ÎUçñbÕíGdþþWȈcصLÎÁØ|ž˜<Ï$;Ÿx\0ZÓ†Çl£Ú³H5nõU²øÿÀ¼¼¼{Â×zà‘Û»¿¯„ê}€Uò¯Ì:Ì"umt÷ „æ)VÙ &»ÈÊq »Õ`Æ}ùõ¦ð0Â|œ®ñ6ŸŒ¡"·O—¶/c¯r‡édœT¢s“Ö\èRM0ÈjXbê¼8 ¯¹-pb«Ú ù–mIrQpü>j!gy^õåë‡ËÇTÌŒ×W¯ë?>u‘m±Ç ¾Ä.´eufu« ÷'+ÆÉœe «&&Ï3I]ÓG‡ŽIðUg TɪáËÝ‹Âðý„ú.eFE§qýƒS~}0Sï‹.Õ´“]çÙ¾û±·ª3Öw2× ³ÓX¡>Nµ¤¶|f(ÛZÝ>ó“g†e3ÊõžyY»,ªÌÔì½Ø :{â AŽÎ?$ô×mÑ¥T”ÚÆ^_1púÕ†öþ±N–>CÇY&ÝvÎÌ?.tÁ3DlYÇÛðî¹Nöù «1¥U×[zGëš“ç™$n•UëlÌè2Þî0ÖaõU²jkkGGG)Š¢(*%%Eý}`îBw§vlä[§JLá eÖb!vCþîÕ¡÷0…W´iÜ25 …âÏý^â€/+|v Il‡PoÇZÄÛyFm†(¸ßÐç=pÍõª‡¸€Rø¸jû-…xÄ%Eͳ…–“ª³~Ù°ÂÆ -½:QÙ«b|ü#ã>#µýoÿ@½ûDY×гá¥C?=$e5}•Fèï‚û^Ú… Û½÷¯˜ÅÆÕùÁÿ ½ÃAed€úPˆèÕtîþ|ˆÜÆÉó  .Å! ó`ÝÄM½¡ØÙ<¹†_‡ÃZÙ±cÇåË—iš¦iZ,«ÿ± ÃÖÆÈ˱‘Ç‹{ÚÆMá#„áqÕž,<³7Ì÷*I0È&‹‘ð™°Há'9rþ¦“g~e#«/ãd›`;Ï Û>]Ú±”ÑÆlŸ#c$.mRÉYÖ%þß¾eÆ0n¦ÎvÎüa,bý»öµûc^<Àuõc»î9öÊXüÌ…ºÎáoÏ•>Ekkh¿G­ŸŸ¢pç´÷Ã}@íÝøÑÑòŽC„¶MÝF&{ßšÛ Î0yžÔ¥8æ¹Ô´Ç2 Å?ål/x`®Ÿ©3&XJ•ú±Ðñ‰%QBÎTYEï¥Ãæ3`=|‘ÝÜ7¢ä[ĨK…ÙQ¢ù!«Mä—Y …Û’¤˜±¡[téÚämoø•¬¾Œ“mêí¤×­jæwžO—v`ženõÜáH¯r¶ÿ¢ÿPóäfê¼ôd;üÒ!<¦ ŒÏÕ¦þó—‹Êç,o¶n^%sá{âÉÇíCǰkABË"·’„ÎLÐͱ¾ZàUCÈÔ‡"V¹\™¨°:ó€ÉótÀB’’’¢Vøv+Fݰ‘;ï 2…ƒ& ---55U?ÌUìþðüÏÒ1 8\`Ó!€Ep;AJ—k{òêû0c„´!D bEôvƒ{iöø¸øß3 ¯ÐÛÂÌb*ý웽èVƒ£Hà誨´C*)ÓYß53›Ïê{Ö=rQ‚²Ì‘Õ¼.·vn\–A/>ùöŒ|œE0…:/߀ >[yhpLçëç²b^ÔnJ[ û)úÀþs¥­Ð0ê;=é§o?£üZÌjÂ[ ÷ÿˆÖ¿° /†7èÒh'ÖY,uVããâ?O·qXÏJ~÷ Lö¾¼êÌ&ÏÓ ]øçoG¯”V·ãª’ƒÝõ*o[) …âfùc?]r¿—3^ìþÕc9Fô¦Ãí)½ŸŽw¨r¶ïõ•4 „âê—´µM^ظ :Á&Ãã.kç#½웽èÖD˜ÿ0„m­ž¡šaê{vÜ#‚_g;Œ÷umà>Ï ]iCo~S¨óÚØb;ðãªÑ3eßb¿áÿ¶DýK´¹i¶é\Ø‘_)÷ÿq_±cÇŽÌŠ® o2éœñUÁ;îôwóGŽN E,óÂ.uæØœ°Û|ò®>Ä‹Ü^Åæg•]ïU‚:sÀäy:ðßöΞ=ûÇž'$ÝaذÜ}Xòr–­ŽÃë4\¾&8WP„¡`VÜ2H©gx⛜fÌ!-T¿¦ožm[IASÜ¿I!!^#ØxÚ±½³[ÀžâE°B½u&Ï3Ø­JsŸÊâ—ñª…eñ2^“ªÉb5^βä e˜q_vZEµÎÄ8ÄÛqÍl¿¶p–'é#99ç«ðt 0yyù(釤¿"Zm©!d‡W=».y²ôkÒ¿Ô™ÃÇÅ®â^‹kc±_ ¡iôåÈŽ-šÈ?RØêÌ“çéÀÛ³w8„NäÖ.ÃJ…QÌDå‰ ±^Í£‰³í: ',"úþlT#ÌŠ[)}r¾at‚æ[(Jâ]ŒŠ÷_셷ʰn¦¾w.™…Yšz#6†^¾|æ0¶F¨#ÿPÚjfhòœ””„Ä7‰{<«ùF1ˆÈ$ã¤M„HBÀâ?ÿæUŽxåH· )bŸùÇO±aµþö!»ì:¡‰··GÊ]ªÏóe1”/LBÀâûã=¨­ôEÎòÁCÿ³6ÒÃIg¢<ª>Uú%v-¨3vvÓìoó™$?š#¤¶æö&:{oÞ5Ö±õÉóô¶:Õ¡ A „â6È;† ÝøZÙp)5ÓEO¬G½ôÛÿó& 1c#ŠI]®óLJj€Y‘–––’’¢îÚ××7oÞ<þ×uLI¿y²»$ȳ\$EmJØiMÊÔ÷ïÎ{â)Rç={\e/ŒLdJ˜ÃØxØ63IÁíi«sä²íK˜ i*AãbÆÉ¾!D bkâO@hø<ÿÔÿµ”öcFûá¥ËSùü’+çFËN½$ø7f“EÖe~© €q™P1ƒ›_¢÷p¹…DȉÈoþ{Vœ,ùjxOÎuÆÎÊ$AÉAKù–@ªƒ¼Èí5Lnzñõáq¼v‰Íbë“ç;Úêä´|ÇŽiiiK–,qò)J¯Ô®ÀFÚ È¡VQl<±!”——7–s3Ž(]ªÿmôMïå b¿™B¡PˆÅbuÔÂÂÂË—/«¿®áááK—.}yoîõ>¼€g„oB(Öo~ˆW´)\6%Sß¿žNvK#]±Kzc"ïõE0‡±1°°mÛª¿óû*© ×$ûŠòÓŸ¼ŸQZYs›Ÿê Ìïž¹Ý}1•)æ,»3ßžÏ8£Vgõ·kT9|ªô+ìZPçIß®7Î~œ@7F*©Ë†t"dKÐPÒØÕÅíFvÛl±õÉó­@cZž–––|_pEÛÜQwläoW…}ùÁXÏ‘””ÔUPæf׈ٙðÕ‰nüñ±jÓ‹â†Øo`™ô±@Ótæù‹¯«Âì^.-žÎ­¡-¶·°nãþÝ8 T6÷††, °sÀ3Ÿë ÛbÛ›»‡&t»UMWÏ)h^Áp§2HMÂ3ER[‚ (.IIIm•]µøâÅìr\¦J÷ýz”“ÌV­'®®ÿý‡·ùY ÎÀÝÓ54ñÚáÒ¿¨þÃY2Èøô!oT}©ÕùÆ·ëté×ÃãØå Î“ª³²nÔN )’öu«;Jiknod²÷æ^7ëf‰­OžïhÓr{wÒ-Ú¯¸i>6,ÀÃáù 6žX-k©ï[QC6¬}(T±yºñÇÇþhÓ ®ƒ<`¹éc!bååˆÙâý/ „býæ…xÇÚ13ä–÷ïwoþž uöêi†º>¹ö')0‡±)œD„P¡éF¡îVU§Û­jšêì©#;ýXM!«$Ê&#|]B C×úº ›/J7©:Wgô`Ã=DqäHWG®\p˜— ù"ýY‡KŒ~ Τ€:wÏ®eÛ‡±š‰Èç?F¹{£­?’——7ª>Q‚g;ƒ:ßLwìØ‘þéU~ùƒ@OÈíõÌ•E-ãºKœ6‹­Ožïhš¯ßEí9÷FnÃr#Ćýã¡8G‘`æ}µ(°e-õ}[{è;±Ý86²ßg‹G€Ó¤Eƒ¦\!yÀí3E¡úÔåË—%‰X,NIIQç?#„e‡b7c¿Ê˹EæVÚœ°¢ÑdwbAîe¶.VÛíOˆÜ Øu„÷³‚i­ÑíV5Muö›³ŠÉçì™dœ‹k»`Œ"…6˜è8)“ªseV‹L„ŒZá‹©3Eo=÷¼àÇã„æÍÇŸíü9:ùüÞÒÛùhPgàö™TF+Z¿É(yV¥í¦öêÞ¦Q2EJhÔ!„ÐÈÈÈžY¥¿í ê¬FÿNÌËËëiiºÚËÙåî×. fõ!MŠ7Û5Rr¦´ÃÈ®š'¶>y¾£è´´4‰D³RN¹*¿¯ìhì ÇÆ¬ˆöÞš$3ˆ¯Ť Ìb;ác‹<°‘íÁ[—ŽŽêÇqM/¸Bò€ÛgŠ0Bõ©ÑÑѾ¾¾”””ììììì쪪ªÔÔT2j »a¿jvà„PŒ<%Ô;¢ÑdwbRRª=‡ kï¥ÿ ÃÞÁ’6¼Y×)÷s(ÛZÓ¡9Ç^ßû¦h{7á¢>tdÇžU}õ¿_—Üò£AÛG_FO•´W\½ºƒ>ÉÙ_lëi,I ’ ß.R@,|\ARx4¨3ǤꜚšÚÓ0ÒT¨èÿgï¼ã¢8Ú8>{{…;ÚÑE¥ ¢ ½Ø°`ÃÞ[Ô &FMŒ½Ä¨11–5y-Q±E1ÆÞ 6&M8:Ò9ÚWööýcÉrìGP`¾þàfg÷övwæ·ÏÌóTWPç.m<Ë·“Ù³g7¥ >sxžñ×¹eÔAS3=µþT³°Ë¢b€yÕH{]F©_è3vE“’)]¥]^Wî!MDÅ{¤ÒM1¶G!É61í,b mhô°]AWTshd F IDATõLJI¹P/«ÄF,­9ùl'Õ&€Á“€TyãÏ“wÛn™:wëï7—óÙF\{褱™cúÍm¯ßÔP¡Î\޾ùTJ}–Ý…¥Û:¡ÏU-ÿ¤ñ²}ÒãßžòêÕÒ*PdôÄÓ Ýœceád…­è\ãê„sÇ~“ßëǃ[ú¡ÆNBun"îãoÖ.IŤ×hsó .d…²§¾ ®›C¡+¨s—6žåÛFDDDSúw†67ÖpzaEOÅ£œãÌa¢Šå j Ô ›÷X.Ð+Ô´³ùî®Tt•vy°„4ŠŠ÷H¥›Ž<áTP“Þ9š>TD±¹ýFÛtE)¤µ³ÿ»åÖj”­qÙŽ$¾ NºÖ”C …BEQõô„™º;*Å饢«´Ëë²ý`—E~¨%$$D~Ø¥UBìV^ˆ-ª¤N;;™=“‰þkµ°°0âAµ±±Qñ-]6e޼µ“û종5´2.gaà;/­:ó6œ¶êXªó@Ýä³%žOzn7O«ªüæö_ê'—gûÍYO# O¦fҨÆÕÕµ8½:%˜º M.?¢Î_,^Týè×õô…B¤ö½H¯ØŠ_¿Õ"χ¨s¯ôNÈ›ï¥u/ÿмdî³û›ÈWK/N¼s†²/T禠(©FZ&“\—˜ôC½ôiu“ϳdÁ¾Ènú¡>œ=wRD7.d}žU=#Y¼øxó ÉÁï°¿>“=ö–ÅEÝŠÎo•/j:]Úx–o'.\PÚ¿s¹\Àæ‚AËðÑ;k%®_Ýdï^l¶›E`` ·)-§NÄfŒÈˆ:ûrY"ßöBCCÕÕÕ…B¡§§'åN)íòºl?Øe‘j™8q¢ü°Ë‡‡ØÝŽÉ?÷’úÄigwÓÎŒº”þ¬niY Ã` Ÿ"õ†½œÖ¡®óWTÑ#¿Ü ÀîŽy¾[Eð³Ò4˜‚¨Ãam¤Qµª<2ávSÕG‡¡ç)Í-µ”_áù>ÍE‡Ÿ}üðÉöú5¬MºWŒ ©ÉŠcs^PÕ¹ 1›—¸‡V&½{袋ô»ª3Dž«³“->µSrRÔÎ.V œïóÍs¢!uh™ èГ͊£®P›‚RIe?»,»`eÿêCV-‹x“˜žU"hú¡>DÓ‹ªÞŽÙ'=nƒçª‰b…Ѳˆ›Ñï›u̧KÏò(íÊMÌÌ…–ÃÁ¤ßõP€P…àm[™sj]ok«ö=Ù¥¥epPÐÕïgPÊ…bõç)c‚¯Ÿ ÚO”È·C ÃAXX›Í†¢ QD~¨…ÏçË—àhh¹P²ä4u/à.f!ÙÑeyÑÕUHàŒ(Ê\Ó‚Áf=tØ”:±Yˆ‚“¯]Ž8¢ô8 …T5k|ZÚŸ½ Õy4¹Õªð|ù„Ûuå X_ÄÊ‘LÝg™µˆ¦¯!ýð b+hhÎw~Ý5¢¹W›_\9Íu™âÖà¤kTuŽ8û»l™9Œðýر2óQÚ†JRÃ@º,-Vçý÷S»eO’ÕŵnGçŒóqîo¥K–” KwßYVTIõ%†êÜD”z‚К(VG&Å»ëdijz¤"µiØX¸d’ôÙ¹—J&ŸÛB¿¹»BðwO¼¸¡úñèg‰ï«Ãn  ñÜ A‰E[‹f&5å=‡UòýÕ3Qš£¢J“çd¬%¢e—Z'¼w{œvÑáG6ibá{‚¶ëøà+u‡¦¡Ø9WW× ±[t,8Ouضí©EËL¸^Êçó‰÷xDnˆ òQ ˜@,:mõ(kJür³¢ŠÚ·ð[1gîÆWüþ{hÊ-J…†d¸Yã#0júS —‘Fš\̳ž•ÒôŽýà‘_'~ï¢kÂä–ZúauΙ'êr5(j_ddä«?3Þ'”S«"€ªÎ†ÂàRοr)y¿—^¸ýïÓ–ÛÏP;-Sççb– ÿ2ÇkóËJôÆ{g:ê¨3ˆ¸rç/™:Jb| :8–––I‹ R*­ ã/Ò†È@íísÇS˜%ùß ÔoeuF™o5úÿ"=N®ì‹è9°/·<öñÖë´þä.cd¯o¶oØs§5ž3Šß]ILùß«ûñ§Ù#íc²ËÝ·í*ÕGܱè‚AÖ··Ot0׫·ª3mÅvåaªÞR_Že2ôiòx °u½ñ¹aD¡|÷ hUúº ôl!Ÿ,òíäííMnõöö&FR[bWRU1÷Øs€×w0AðÖw§º}6aÀH9ˆ~ž†õ€^u‹JBun¥êìãã#ƒÇSebJ}•Wçˆ{' sÛI¯Ëc2]öÔMýþj"YÕ¹«ñ!ê\Y#ýæ|ô~Éò³Ž¿°çþ̉øX\•¿÷Þ×i…J¼Æô› ÕùÃ!lXX‡¥ùè@rΛ¿è>äÖ™ØÓŒ"›¿Þüpu¦@Ü5¶‘•†½ßOÒºôéOhŽqÆÃ7ŒµØj Ÿ"ödž¼È <åuzYkþ~•tNã¹ow-»š”Âc!é áþ÷=¿fèîÐõÿÄ‹¤Ê—HéÆÍòw>íaù(óEö­}ˆÂ*ìpX´Q;2KKËà'9¯15Ô-«Ø&ñ½+ŽËnÆœž³{°~.ÙÞº‰<ÏÕÕUéK’RÙnèuvµŸ ½x)¶;KKK6›MDÝ„……5ú(ÿ®¡¾ýF˜Ìøßª°T3ÊV³rÍ(+ˆ0ml³ Ü‚•_-‘ÆQ×|Î*±É-“»’4ÜeŠÉÈu}4 êùxcF\pùcΞ=›ì,^z?¾`ûõÄÑ¿>×[q³ïæ‡ #¿¿š`»éÁç—rí<[¯ ÂáÈg‰8  ´¸Ú¢õ©««×ePž¦1hØ:Âþ"õî¶ë *rÈÂÜR«úy¶]GÚÑåÒ‘@un¥êÄápeâÇ¿¥H„Ô9dŠ:/qÕ¸ÂG3'+þqú~ÔËÔRÕ¹SÓê¼æï¸¡Å·áu3%ëéŸ/ëˆVêüí¹ ©…us’$#úN‡êÜ2(·€û …|>_¦ž~áÚ ši¯šâ…î¢ô¾eËÔY…¤wÍkí™Møc¼”(!Œ5ôE¿ÍqÌËÎôõõusè#(H BȽFË"ÚÓsÁÛqš»=ùßã´çbÀé)`Á¿D‰ÍùutyaN@@@xx¸‡‡G`` qwóø5Cw‡&ç+pæ0«Ü-›é'’ƒ Â.djjhVTPg§}}}ƒƒƒ‰ÿ}||‚‚‚Úè§u>|}}ƒy0tõœcQD:Äö†‰Þ;€¨Jú,g­çÄãñfÏžpss»páqåo@SS³¢¢‚èBCCÉ·d.—iiiIl¢< O Å;(ß¾”¶;--­ÊÊÚæL<**+2|¬7Ò»€aÚçaüL)Æ lµ£6H¯ <˜f@¶5&“I¦Zõññ‰ŒŒ¬0õ(`¨É×gÒkÆ8žÕb×H–аˆKÙ)O ‰< 䔿­(Šbh(è38NLêjÒòh³Qͨœ'g@YfC$Š( H§•Ѷ£î ^qÄ,~ެ¶%®¡/:[v‚/Ò» »¶ÒóIY†òz@unªÔù¿;¥®®îîîþRËçæ“é²§Dá9tèÏF~¾}®€f©óÿ§¤¤Pny&¾³~ßPÉZ:^[}j¼ûê«+ú×ÐnÜ|—ž¿KkW删Y¯´<óÃ0ù¶:w˜™ç¨¨¨¯¾úŠËå"Ê–ŒRdîS«çhT#ÁúÏÝ  Då– }w?mÈr6ÓOçHXÎ òÃ.d\ù 8m1hn$H¸C)ÇpzPÒ¤ØìAGXôa_Û¨yEe>µ°0W:xI™R n1x&?¿Äçó‰]à¨ä'‹âh¥ÒBÐ@»kÈ7AÅñÚºšã¾ð2#P·°|’0UÑr6D¢NÝ ‚S‘̓ôߣ,Râêê D• 奾Xª”8E‚1å é,´ÿ<óQkìÌ ||¼ÉÛMKìá&ìî T[΀r!–£é&üJ÷Yé-÷ü(NNB7Q4Wü®|OY­ê‹µÛ;ä¤w‰“VÚðÏLªå @q•±™ˆOZÎ5€Š:Œê×M¾TçH,u‘÷¶üÕÙ \¦äM”Tç^F¼Þƒ~¡O!7MÃB{å>Þr5ªs§¡ÍÕ™©ñVkÐañÿH˹Q[Cÿ<çÊ–©Ë¼Æ²œy¯Jž|Õ¹¹¨Rçÿ "ÆÏl¸ —s{"ö²´´‡HÊMWçÿÀ0L1NªÖ9EŒ%pÜ÷I“–s&0<Ìšv`¶C½f¿¾ºâÿM¹¹ÈR ²23X}ºÕé0Æó¼yó Ÿ?ÞÄú\ÃH@¤M¥Y,’où/b’½~š’¯dy &*lsËÛö:‹^l6A£Ð’ÃnP}a_ßb,--½¼¼@ÄY ü p$:spHòx)Æ0´Q?øhíÔ=®Åj)LvíâUd[’oêdÄ…Ò¦ =÷>qäc¥yäo´Òv×л²üŽdÎöþýûØßwŠ;f“íÿ“­®‡X„pÆÏI¨¡ÎL¤ªèâïÄ8&|„š…ÒËåêêZÝ”zŸ‰Qø-è=7–šª ÃÞêC–Y¸|É-R\•äo«vwÍI»ÀˆÍ@»G³NOjîe»àW ‹Z73ù…ñP…—jš«Î@þ–U¼—wÛ¶Âߟ¿ù˜ô¬‘ÃÓ Þ²óñB­¾R¥Óži…v3±òc(­Ÿƒ•±¾F½a¨Î-¦V¤>/*|¬Æåè+©÷Ÿ: ø« £b rËég¼é5p,YÕ¹CÓæêÜÑbæË!x]0óft¾Íš¸R¦ë!¦«)7[r£+žŸäAunªÕYþNMp6~lòÚ¶5€p,‘^dKî¥JpssS±èl@@@­õn;z;e ¬.]Â:FÀš‰Žfzœzê\‘Ÿ_^…Ôæ¥|$y«½<·;ŒñüöíÛmÛ¶ÙÙÙ5±>ÇÓ+¡QíáYU‹–¼IÓ±bf3òGzžVD}iigs9iiø€d’Ë’ÅÃ7Aõm;}† f‡¦fYl{/vNµH‹ø¨¡Ït™ÚsÚ>çÑûzÎ1÷žá˜Qœ$•Iä›:áú˜2‚óHŸ8 ‰_-™†Þ•É'¤ÿÜ2^ZyŒÅm´o¡Ù ‰Ïò^zt&M$å<ŒŸ!S“&Ѐ„õì0.¬õ1£ÛÃÌRª¡ l‘zLÜ)AéûàïDzèT=Ê*¶‰•[¹Jžâª÷W£Ž¯¹4éçÛKglôõ[4Bsô2dâA¾F ;ç?‚Ó×]Šò—ËMII!ÝÏà-VJ Ô™HÊŠ¢(­ªP~µ*<—héX1ói‰þœ»ü¼ß¡'›^¥=@Ê]ïd8=¿Ìq¦¬Îx¾Dóšâ©jMä…õðÎÓ?N:×Kϱ¡ÊzFR» ¥ôåPûŽkˆów‹óíçñÕ¹Цê̲ñîeaµ;O–?¦9]âxõxFg*7Xp³ êBéÕ¹Y¨VgòNñx¼Ñ~ñŒW—hCÈúó°'Éï]ðú—uö_4ØÄN¨Ÿ÷… 䥴ôÚçŠÁFûß$½H–ߥ¹¥÷ð]=Ò(¨ó’Ñ.÷кƒŒÆ".½l§[Üñ‚µšèÂ^çÿ_Ì3¹n¾7Õ"­q³*k¸ŠûöíîjŒP–#'èÞû;D±¤-¸“?íp˜P¬d} 5† O÷ˆ^Fql¦O€:K“²˜t5SƒEW£Ó˜¡P˜PQQ¡ÆÔÖ¨çåK9Úfýœ†" ].GÛ\¿»®:[‹M×T£ëª3ûtפ5ÙóÒvÈÇÉxzz²Ù솂ߤ˜¸ 2·²¦Œ_]\QSV.,)”ˆ¤B&“ÖHþóûWÄÒA ¸¤åàJï³DÊ|?³¸Ê˜ºA†à_@V8—ˋŔ3•Ò”Æã!KNSG<Œ°¿ÑM;Q±>†Ó“ò\Ⲉ¥j Õ!` 2mÆû ‘–§ŽŒü0©ïÞ¹ò!yÑÑÑŠa™òÏŒy&i®:Xe‹0Ù/Þ¯Î/ sê:1õu¹§«^ÐèqÊrÙÉúŒîW$?%U€mËLþuR7íFȇàëëSÂyç4±BS.—O“ÆÏÊÛˆýM–Ìe¬Í¶Ðf£TÙLu™äéÏœ6ÇÄØÜ@³»¹¾-¥®ùè´:Wà^Œ»)øÑO!6ñFÖ¯vö¹™JOF\B»÷[ ?Wzfų…ꬔ&樽’F}úŒú"L¼’,÷fìáÚÅɉT£ÍÖCp´¸°¸²¼Z]]ÝÆÒV£AnŒŒ,|_œZå;g•þNJÔqðÈÚi#ì BÀüñÏvž~øL¼†(–ý8¸¾ÒÓÅ¡­Õ¹ã©~¯EÝ%®o<£ˆtŠÇ‘œR«¨ Ÿ GqGûž¯\ÌC!}#7éq†ºFC©b mAdâo/sÊ„J·"@ÖS/ÍÚ(¦‡A|Ä«¼ZŸ/Ô/èñ«õË…z±&®àJÁH‹5Æ¡ÛÇn~v†Zlj¼+¤ÝPÑ››3¢=FÙ{Œì›UžLˆñ‡SXÑóyʘÊ…-8x~¼{HÕPHsaz¯XúR Ytš}Ož‰ÞC-vi½ 8’Ql•é]U£<ŽÀH;ÛL/Y_+OW½€†Èp@Ë)µz÷Þ!—o¥´CèUšzãñ?¹ª¼Ò#¯bÐx&i®:vÂp7v@r•æÍôù¡:¦/TTgtÄwÇôƒ¦Êžå¢Cï¸î¸µrà‡þˆJˆ;hh­9d‰G‡©XA$å܉\p§z»#žN”í¬}ýú>î¡›ÖÄoAitS=›^öV†ö½ ûhB‡‚O‚¶Sç „ÉÓ ã¶ÊM;/¦ÓSÃÃê¡be¡Ot ˜çómEy­àBunSþ»’˜tðûéWÖÿ[ݹcÏ~øWˆ$ì[‹^ ט㵃§giÃvpý÷ÏCú»ö6vãç/?‚ä©ñgo‘µ=ñb¢pcÓý' óU[«sÇSýæŽmÓ.R²þ°™ÕB±òD2ýz¾r6äFW¾<—&à‹¬jwx<Þ¼%+^ªyá6*ª±è«Z!P£ Ô˜Õ"«« $šB±º@¤II5Ô\(ÍËFoœ“ñ"os ýCi"I(*ô»‚Ø –"ºuݺ¿0œ“9èm®§Rkʲô9ïÆ¯ÄÿJ{8¶ÝZxû{Ê m7!0ÑM·îÉeÕ¥Õ†¥UFd(‡R4ÔÊ]-‚Ìô’•n­i%L.­6Rø&Ü‘þ(ýŸs.NnNNNä»âU Ï$ÍUgÂxŽÏéï–&øEz‚Øúé;WwÙX§3 í^§ÎjÚÜ“ÅKØ 69èhæŽo–-œæÞ¼ˆwHÓ¡dWf©Ó‡}æ¢ÓAÙÔûžUÒ»8Á9X¼Žô)¢9Ìd¯ër†ÃTÞ T#.¥Í¼Ôßs6JƒŠÜÞ´ƒ:§Ú—'ÛË?07hý¿ÒZäï|ŠN“P*—f D±º®†4*¾P[‹º+i=tè€Á×$?å2€x0Z;…éi6>ù¬š¨ oÏÌòýÒcÄG1 ;3ÿgïxß@+€ÒPc ‹¸'Y!£ëÔÙiá>³”ÅØ=b—“¨ßÊŒÞàÙïm­ÎOõ›x-È5Êz­ß–ZЯ)GîgòÒÁ8¸0¥úÀÚ³j5ºp™„EmE ÿ`=ô㞌1WmǤ¾ ›¡ ø§AZ ŠÈ¹?Ÿ“ÿ¾y,6GÕ|TË(«6x–2®¬Ú@éÖÕ£¬¿rWWÝÀUUZ‹Ú3ýÉ8[qþ¿ÐQ‰}ÏWvÝÃQTª¢Z„s?vv¹PRŽ ¸ŸýƒåÃë;U~¨»!:œŒ¶ÍUgÂx.èEFN|+þ’•­+ÐÇý¼:«Þ&–QÔ¹ûˆ/¼´…%G‰ ˆ‘α¼þŠÁóÖ‚²ðŒ——W`` ©¹É­W.>;ÊÒ“ÉWM?µ a‹ôYò}æ)#þB@½šMGWÝh„ÝtßÞÙLÆkCZ‰¶Vç ¡î“è™÷„[íñZ÷ì" ÝŸ¹ßÕñ–¡VÝŠîR‘,ëMYzXIÞÛrÂ'´Qñ…êÜZÔ­h¥ÆæÛù”±Ç ¯õ"9‡½â¸uó¸Ò§)7Ó ãU§!j$œ;¯^׬ì—%ÇÐÑ |†ÚýK©©ÎÔã0·V3ÄÇ %#wòÝ>²_𿼶‡Æs-ÍH@dÌþ wb>k´¦)ú‰þ;7ž?xÀ84õq‘w³a9OÁœçH•-Ñž8˜hï›Ùox_Ã{Š{€ø¨Ó“ã6Ŭ{?-´æc€¤díÖž IDAT°Ü$­ÀžWÜW&C•ÖéV•”wiŒ‚ogÂx¥ý·=hKâ&€[&¸˜sXÊ3#Pˆ5ïÅÎQtüf â±NgŒ¹7ãç÷Þ}úº¡)8óLÒ\u&ŒgÀÕˆ/îTüHºø~I_‘Ö[ܻۀL‚dFgE•)ª³Ó÷÷¥-óÀk= vÒg–_ø3§Vû=T/Òk`¥Ñg˜‘©³>DRµ»o柯:à-‹#ªa€6ޱ­Ü¬ÂÙì釜†ƒãm3ÞßqÖ‡²AšH›ª³TƸ=ÿ§ò¿?“=& ç0Ö¥›âD% ¡Ùõð þ;òþ…—R‘’¥!퉖–V¥‰÷$·Þg$ûˆ1 ;1]Û6ÝÕœ›ËOM¹ù<õN…°¬Y‡}Í替KzŠø(LGÖ!7§ºÊó_¨³4ÝŒGœùåq˜Áü l‘:^C”aîAò£.þ©MÕ¹óÐêk¾×Q/TQAÀ7ÞF–i‰E‰5®NîB¡æåû¸È§à ]roõ OKÝx>€Øìò{ŸÝÿ"1¯%þf¦@YþÑÕÕ•£ÃòE/ÿ­öÆý4[Ñr®êFgz]‹øê~ܬÔÂ~ YÎHê“§»fB˹ýñ´Ôí]šÇ»igq:;ØæV-g‡Y9Âþ"G!¡c†$M,Ö„d\é5\ ?Id…‹µ&zïî îäÇ1²×ïxæqŒ¹Ž¾q}g¢¨Îq9ÕY‰¤åŒä/Ô{þ`Óô º ªé-J«zz,íúú„½Óþf·òÝÃôÞÌ¿–0¾.Dj3³¢@(=PÝ'o>€‰àþÛ‹ß]—óòCŽi"mªÎ¯RGúWÅÊ[ÎÑ|¸ö+†ëÎðXñõð=fÝ^3òÀÓË1¤åŒ¢(\>ðcáêê R^Û¥"µi˜@º»¹ëv2 ×b¦Ç×fÞÚ>áÌÞÛü绘 1ÒêICTÙ›±Fn¾íjé²ä8}4K¿°!ËP-ª ɸb;Klg©ö©3-‹¹è»¶VçŽ7dÞܱíøÜ°#Ä[¯*·ŸÍ¸‡ç9õ·ªµÍ`tħ€R7›Øìò1+÷çªY¦òxõ¦€bÕFeͲ¢w@V¢¦Í([$eI¤,1Æ*©ì†76œÄD‘Ÿ»Î_ÑZ⾇……±X,‘HÔ¤C÷á8ªN¯jWÔèVu*…º") €ãˆcp ` “à¢*\*Ö`²†xºjhhTWW‡†<+,,4T‚p15}SOÆÖÇÍàZS^õ±äÀàcÁãñ¬=†ËúøËÁ  !Ž¶Æš{¦Ûî§W&(cb‰TôÅ_Ä%EËWsttü~ÇæÊ>‘÷µ¢¦4·,½¸ê}¹@ï^ìl‘”šBÒÊ0~Ímâw‹¡^ß±ÔþÎ<“´@Yt6Ƙ¾l‡XÍ9T²–ØT¨ÙrÎfÿ>IS­îÖSÔÙyÉAÍ;?¬Áj=úBiv«M÷'îÑj?¢Œ†œ`•¾;Õö›äëìpUòí?ë1Íi:òÍ`Ù¥M«¾Ø·o_LL “MgrÐ>ýzöùœ —þ,é[h°µ÷=AR‘„>:ëêìrÛꬉãç ¥¼²¤FT%5Ôé¾lÉ×FFFE…EûöìOJJëiæõD²‘×.SšŒô­þËã-£Lê9Á÷óOgccƒÙOþÌÑà’ÃD¡°ì˜G«ïíèßÇTiK”bbê\n±`©N ™+® °Y‡Ç ÂAR£ç“˜çf“J;"ùñ1œf{qØùã ]@[ªsÇSýæÊ3ŽãBI÷oïV‹ê¿q9Œ“û.õµ”e…yù>ex<ÞÂE_¼Ê§±Ç•«5’x“I§™êrúöÐìÛ]ëÀ¶Õ5ù© <HEÄm%o´†>ËÄNÓ®U1ÙÏsJ‹óÊÌsùV¹¥–J3± Ø8¶÷“íàœd«@y  ¶iì4Éô}…UzaŸ¢ÊÕ"­F3¥·ú^õÃ}žŽ¶ðUìãRûªÄѶ£Ao?ÀR∠ÀÚHc¥_¯ÅÞt¹žœx¨BBB(b¡´W/ªÌK|y/>aÏmKLÁ a€õ=k£ÚDÐFZ&ˇýlªk]ÿ:žŒ¶-Pgâÿwi<û^FKWÊ'M Xþ•|ê¯zê¬ÍUŸÿç“â…dý¥ŒåvÓ—oÛ»u~ ¤™(5ªy<ž««+Ÿ_FlÚl”²û‡¬¿iÿÅ£µƒu¸Ú”—.¥ê\X‘£ô{ Êr¡ÇÒœl<¡AÕº4¤Î.“{6´J—á%™‚¼·å™XÁ» A®ÍK1z]GÎL1õÛÜ Ï#J€åËܽnÑăÍTŸ T爯¯oðËæÔC1ø*2Dy:mgº!x~HõІuÖì¦=éç8É .¨uÛCŸšéµþìb7BßGÆe¿ª)÷¯¬á†¾ž*Y“b0@£ÿ—‘“¹:µ™D¡ñ e–J£'O^¸E§¢ŸfüWæ0Ý;£Ÿ‘u Žlu„b¬¸J\X!*¬%𲞾™óÞÒXgÝŠ%n},Œ´Õäo.嶺ººRzs—ù/ð‘u/1ì¥$Ÿo•á]RÕ­¡˜êÖãÌb7S¹Ç/¤éPîNLB´é$¡ŽgfIo‘„Ýžg¢Ífœã0U³!ù¹Ž)ŽØ Z j\ÀÏ¥j‚üÇ—5¥e_/]¬zL¥ ’œxš±øu¡i•Žv8G.;ÌDYs®ñ¶OV€Æóª3ÁgÇ#Ÿ~¿»K|*Èy%,-ä“wèf•NJa2|ÜÁ¦oNí•Ö….ŸDýVVø ©¼òäQÛý4Hk‘[&tX{=J°DÔªífúüß“õŒf¨³õ0‡£ƒÄë ö±ù>»|èêc \”~黂˜‹/§–F+Ý ÚK;¹êË_¸!??àlüõ+JM˜d†³Ð‹¦Ü/Å/Å|¡ÄÿÝzk °T×eJeŒ„\÷øìþR™²ø«êbðøg®ŒOj<¤éÔ»fýÑó1µöÎg>°—Þ¼¦3¶”μ´Zl¹ìbŠd $éÏܾ䋅s˜´ÛÉCšEm{t˜2̩ᅭÉàç¤ÇHµ]ç¿1ÒÞ¨ê¬ô»†õ™zê»;ÁAµ•å-pHÓ¡ÜCkM¿U}hÊD—á¼PþÛ{ïìÜ”®G tbcŹ˜È‡·nJ¶‘«:ÇÐ,ýÀw×/üñ+¼_…ŧ¢ ‚vo”^">æ!ºnôÿ.sýyý²¦¨³V÷^bßï‚Á÷}eYDIÂuB$˜®ÂÈ××76ýõ€yæzæÔ$í¦Î?Û6Ið¯Õ£¬ Ëü—Rñ¥…J+@>)šr¿ËåsHúøø.ˆùÉ7·ÅçÆTÐi“cœÎj¨•+9¢º>¹4mll`†öFáñx¾¾¾GGG‡Ãᄆ†€®9µø®m7ËYÚõÐú~BŸw»ýžoöþÒ×¢¬ Û×צÙÿd‘o§ÞÞÞD¦kJsVlËÇÇÇ'22’HŽíîî®´²<&zyYùT禠\öjÐr®©”>ÚŸüüÏwNvn ­G X²÷nÊýG¡Iv“–s9PŸÏX}aÕÈW¯Q,gâÄ :š¬ms ]ÔæŽëŽ—îÅN}{=/"¦ÞjÏJÕÙÛǧÏâC›‘«¤å ø†þ¥~U²êœÈÈÈÒÌê{»’ƒ¨¹¸ÛM;ù¹ŠQ8óÜÉhîÌ3Š¢^^^Š>]òu<==ËXn3zÒYh„œ8©°¢§’;›AU!|NTC[`j·¹ÀzP¹†A-B>Z•¿pÊ(k# S=JChÐæÔêyD&ceÕbJ°r„²·‘¶š©.ÛTcªÇÉ:Jç.(ÓËÎ/)¤¡XKá93Ž„+=ˆ‰žðÒÒÑä Î<·Åëv4(ýñ©ßOJ÷h¦ýkÖû”ü#ßc²ËÇn¿öTð éý»öÞwCàçÊ}ü ŸuM•©®>íÀ~äÜL,„Üzõ;h¼ª{ÔÁçk#Þ›«ÎŠß˜ö¢øÅét\V÷€ÁŽ]5 å‰Ð·PµÎžX¸›BY¦ðÉ¡äêR1hN†Ý‹a9ß}øP´Á Ô.‚ƒdc]Ÿ±s÷L·W}bð&~‚ŒÝûdPìÁØ ²d9ã«ûB“‚6RçýRÿ9ÿ÷]ÉÒå:tlzĶὭ­TDbÊ?cxõôEk$€—ÿ"¯-ò_ݶ[ˆŠ G‰ƒ‹‹£Ü!˜Ù¯cÑ”ûÕÄ:³gÏŽˆˆÉdÄãe¤æ»ÜZÛ˜áô—)£xEvJ¾¾"ÜݬIÇ`†vÔ‹uáöC7-cõQàVg”D\Ù@,h;á„iö;"ž¢BÅkÙ‚#OÏ„+ß Ç­s¯ç¾ø—ø.++«Î-£m„¢:ç– íW_N«YH¿92i¦ßI".uw3÷íA[26Ž–E$ueþ~fã´!½õÛû@šŒ|SÝúË‘9§Oñ7%’6¢ ^YÌT¶7"ìeËÔY±rFxIè i?ÃŽ]5JóDXhú­é£tmÇ¡}¦œÙr'èIí HÕ9$¹xòÞGWk¾s–¥‘…;è³#ì¿|°f0]Yo¨ÎŸ8 yÞÛïÞ©Zc‹×¦ÄæpÆÏ"~FΣÀ†Ô91¯Òkë Á7æxíìq6bàÍ9ðd«¿žZ@¥:SÞäÙzè¯wWçääÜùémŸÞv@Πk;uîºÆ3 Ö‚€ú­Q(†……ÉoUÓbø­¶åö`‰Í5(®œTš>¸êAèãûíwÒº¶fê¼¾Œ=s µòæ 4Û8vdyaNóÀ)޵äÄ`'Ð1iÙTñZ&–ʼw=}•Vªd·ª"pí ¸\.ŸÏïÜ2ÚF(Ug÷íAß¿ûÆGG|܈.8[ bÿøøø8-9È¿{ä7éQ²þúìW}¾Ù0.ØM)ž±çÎ}á:ò½´YŒõþZê¡hA5UÈŠ, 9úŽxÊ`Ǯřg]Έ5¶,uj J£>xÓ`ë±MÏÒJ¨óÆÝ‡æžI9\þãHY‹þ)Úˆcæëžmòær”§êüésêYæž׃$ëÕñ¢$ 1ÁùåÞæ1®æ\Å;(Ád ™›ºësìQ.Èxæ¶±Óg®cC”4kÐdèpŸð7/ '’6Ugh<Ãa- ÝdºH’¡~>^ËÌÓ‹©…ý^¼­h?»›j„lƆëW5Ç Xô¼º»ÄnÊßv5Õøî–Áj Á—"UÃJÝÌZ&®Ðͤ£Ó²n\õk™PŒýx3é—{ïÄÒú fïÙ¯å ÒÒÒà3Ó\”ªóŽI¹—!ð†ÒìÆV.w·‰mÕ¿»×¼gâÕäûÙ+Äv†öÏQ?ø™ëÃ$ùŒ3Ï3w¿þH²‘Ì'DXSè›Í:³È ­o?7K)T&2îy;öF‘_Ïçëôäø­±eiP-gB+ e´D9ºj“ÝŸ_({H–ݧ¹®Öߺe˜Šu. :wNFUÿ(­[cì:`«ñÖÈ­CÍŒõäÕ9§ ä› ±¹O¯^–ìDþsØ>Œúßì³&dòí7kÐD©ßA©sJÖòì e‘t>(Y(Tä„CÄÓÓóø‘Àµ#³0è èeça©d)…×YU~»ŸP_µ!ÿaØÃTwÊN‰Ýd¥–3&q4}>Ñí¤ÚÛô;§CAppp@@@CGk4Ï_ÓQÌhéX4Ú+Í:Cd.a³Ù\.7,,Œ’†ÍDšbÿãðvr©ì²Â)–3@ÅS iãïÐêòº À“i§°¦þ§Ñ~qL|´œ«{ ãës\ åÜ™?Èl’ÿ°Ïèk¤HíX3ý#Ý™öâáâSQ©ii-Vg š}$C纄‡‡ÀtS* DP ”•• ã=l¥rËù)½%êÌÑ£¶ îÊ[ÎohVË4×]_5Dõ ‘P;ÿ›ë˜lîI–LÄ^ŽÊ¿4á·—ƒ'‘ymL¼fôÝô ”$-çd¤ç´éQ6´‰êLA…íÖFê gžá°Vׂ¼ÝL&S~ :€|&@xx8ùð‹ÊDÅDŽZc§f$¼É—=@ñ+– ³üß\§6ÿ%üòš{ŸÅç*ŸìÕ-ÖÅ,„…V—¾d=½Ó”YÄVœy†ttíÆU c7šx ÇÁŸ/²VýͯªaÞYë`iœ˜˜(ÿXB—¥Ð:›¯¹w!i?YY’ƒèÿŠNîJ×I/“…Ë_ÕôŸÿ÷Rv8UH[ Ãñé‡ÃµÃNþAVöxæÖ¸Œ\qÈÿ¨]Ñ4_åÁexðáÔìè2¨MAŒ‰¶]ù<·"•RŽË𪳺¹}½ú³ÍÒ‹d…L`8нûä·£ýìZý'@> ï ªm»ÿoÅz'¼6 ] ègÐáPŸxYwYj°¦i¿îjø~éž²dr/)‚§ïŒ {’ïƒæ«3|˜@û¨34ž!“†^¦•Z\‚xxx€úq³GPWWWbG: µÖN×\ ð*udJ¾;¹oÑýŒ sp8†¤¨Rä»;ô­2Ë¥aý­îYÅã8xqŠW'"/5Pi ·bÌ3¤Ó£Â¯›âñÕÐ#WV-y^J¼êñx©Á>ô¸®ìÏYY#õûå™Òõ~¬»E{Z>¢Ñ0ïeñ³@%¶ ºÂB>QЊCSR! (êåå¥èê U¦e4zÝž¿+Ù~=16>å[ìêBìˆ'Q¿@󵯷eÑáÐGE±–UK†îy:‘whv•¬VØskŸä# hÏ Ï–©3¥¦0½¼í%\¼J‘Ì’ä-—ç#tj“l™:Çf—ûxñyщÕÒ+da™Hÿ~ø8ÿŸ§ÚµîÉC>)rÊ„›.¿½™5H> ò“E1”Üš…®¡„bVØó#ýÍ5;¨:wrÕ‡¯5]–&ækVº8Jô…¦¦æ£˜«‡ƒ¾ÃqYYµÁØÏ0Œšr§¿ÉÆ)î K"cc~}’\¬¸©O÷wËÇÄÿEiU~IÂ$2MMM€|$›Šø4˜ç¢šÿLy • @•i)M¼n/SKwÞJz²»á'‹ËÞ´u´ƒ‰v;œ!¤PÚ{W‰}w=–yø[9ûYŠ «é‹/I]î­ñìl«â˜*Ô™R“Íxt.^U¾ xÛõe‚"JyËÔùÌÃè¯ÎÅïÃNΑÕu•„å<Ôìîiömÿƒ ¡»“,8=2‘7{9K슿 DGíaÏÓ(z“qóW€I@‡UçN®úðµÒŠP’q¹Ük×®í»´YÇEx—ïô2u$e6}ùc×{Õ“Êpÿý/îÇ(nêÝí§ÕC€àLˆ\ÝòFÀ…¡DÕCÝÍZÒQ¡ÁM̼My• @•i)ͺn/RK¶_OzŸÿËL‡U#­ÛôÄ ‹‚ ‘ï®99‡¿–^' q€üLŸqNÿ³;«õëÙ #¨ju–Ah«ýö÷ëÙ¿µO¿£‚ɰÝw¿JΦ–·H”öùÐ?%{áuËnóÆÆ÷þÇþ0IÉrbÎ ¯¨úìó¬³/²Š‹Š¼-Ÿëä`Ù­£«3t|‚@šJ`` §§'&Íçó'Nœxóðó”B€u·h+£xÊ.B16íPX•HJ=Vç…DaùJ©åÜ«[,i93QÖW^;=œ’¡k”H¶†×AÃ1íŠ a*rÞP6QmèPöa`/½û«El¶Ò¯×Ç>H[a¤Å Úà}Íê›uôÏeÿ%B¾IzqCá>ߟžÜxó¾¡}U«³<8.û#dkIU~ýŠO¥a¢¿þ]Ñrn:c2üëó1ÿ;wç±d£¼å\ 4Ç3¿?ÉZÎ]Kõmû¤í¾sÂÍ•Íõ9@;ù9œ€´:ò3ZÄFC¿5¶†ÖšRŒq'æ3¾@Ÿ²Ëboóc \ÚýLÛÂ/44³ú/V¬`iøvÍmà _ ýÑÃb¸Š6} Ϋ-çîÜt/Û[¤ål­ç|`ÕŸJׇ\o@qU › ]kW@ ކï<~Úd?æOˆYn„ó¯I~ðNþÃmÛã[1Jü®U«3…'IWÆ-Òé;Š:u®“M×ð(W´œ›¥Î%ü ç%7Ÿ?R´q‡ô¬¼å|Š6âK½W7Œ–3t:uîäC¿plÒž¸N°°oxñnLjA?ÊÖQýŒî|;A”íÙÁ©Õfi€±»€u‚]›]2Úñ“^»jV¼¿£öä~­–C§kHkñQœù¡Ê´ xÝ rîeÖúÀ ?jöyËâä˃h‹™+g sùqr_-6ÕÏK)¤:˃Id…9þ¥– Å9g‚AŸ[Z ¤†˜5Kãs+f ï•uï ä.¨ª; m¡öÄdέ•, Ô[á7@:>LáÌ3ÒjhUšgF–Ü-iªñ)[ïÅIÿçÕæDFF |×)ZÎ,º`¨Ý¿¤åŒc`©÷O¯_DÕÛi `9¤31w€é¿Ç}Ým×Ïôé2¹À\_YìsѪ÷÷ÏôÝüèJd^SEª³<(ƒ¦åQ!W)Ý¥s ß"B$Xêík¤h97]bl۵ġÛn/ËøéŒdŸ¼å\ 4g26$õ x¾ÙZÎ’N¦ÎÐx†@ZÀ´ÔU…b*Ü»ÎK™dÕŸ”üZ™éLN,®®®ÀuèfG)§!2oÛëšjedÉçÞ9S‘ki1ð¹‚@:ý­t#¶sùf"ck!Â%ËpþIéþÃ…Öÿ~eüÁ—™%ÕÇ!Õ™R®®Ï<öt;ê‰ugSçÿðöööòò2°ÔpŸaªX³)êŒãàbXŽíÆqWC_ÏÆ‚å·Ñ±ö÷3óΪ\N“< ]„N¦ÎÜo :†AÚŸÜ2Þ7?¯‘ßd‰Ë@Ùª%ÊØ1ÊÚʲ3å‹>zçÍÒxP]ÒZßéeTçnçeí¿hÈÓ}AÚ†ò\A•iðºAšŽƒ_î¥üöϳ£¢ýCðzKBŠÆ~ÚÄ?Ô§¯ï°|˜¥:‹®â8¤:SÊùoN½!ûΤΔ^±Z\±ûá—(‡Úôš¢Î‘ü•bÊR¢öH½doåw¯ŒíèœÓN/vÚÇ ~¤cÑÉÔ¹“«”gÈG!Œ÷ðpÐw2œv7f^IU7ÊVµÄk´¸E"¹h„âÚÂj×mOÊ…J¹]pW‹ºw# ÓˆãEa/_CƒÒ™€*Ó2àuƒ4—©%s޼š^x~ vY ÔSÒm+}^wÈÚ1½¿ôµä0©y°Hu¦â2üÑ”÷ å\.W,wu¦€ã²_î¯ŒÏ £”7ªÎñ¹»n'ß}•´Iò×ç²ò‰Á 4ÓúʾÎwÖUï*«A>}`Ì3Ò‘ð´1Ân ‘ î}‹N£Z•5½Ç ÔŒHmÙ‰¥F‚ßÿTÑrî©“êbL~ä05ßœ+ z"‚ƒƒY@ yöÒ‹Ø>"ß{Õ@Öþ š£ü&K<ÿOÉÞŠ¿~xá”Õºû¤ Ř҃êL)Dhˆ×"K—ÉçóAçPg à~9ò¨¢å¬Z_¥•Nøí¥×–ë=B÷GÕ,[‚Ý•·œÅ€¾4^kßÚÅ“/}å -gH¡“ý±mÈGÇã-ZÀr/0´ÖLzïž6‚ZƒŸn®˜EQ//¯Ž;»øTÔ‰§”BuV…¿Óiã?×8‡²Bþª®®& :ÓX>¤‹U¦eÀëi1A‰E_ž}ãwo§ät7PFÙA³ÞÎJÒõ\ìm±ØÛ¼§[~«¼:Sv,âUÝß“(“Ö>–]AýÇ£çzúˆ)ÑÝ ©³ ÇïÇî½—’ðnv3»¯ ¨¾îhÎëéŸ÷qq=0Ëæƒ|‚@·íåÒnÈGt…°°0ŽÓÿ{;5 棷ÓòøÔbÿQ:´¹ïZÄšëY”B‘Žr<¯§Q·gÜí¼7Ws¸\.Ÿ_›¼£G‘A $PeZ¼nA‚É~½ŸúëÕȵ5çd÷)ŽÄ€HÄú$êw•>¨“ }8—÷­yFUgMjR«ä ‚°ó™ÄÿZ‰’¢•i©ÝbÏP£z›*ª³Çð‰£—í<û"‹Q˜²»={Bñ¤#Ý6Ðòºûþ:«ßj`ò‰çåÒn(]M±›­ÖˆU½…RÍ›Q"©Z½m2 ÜÝìc×£ƒš‘os+7ßÃjv–þVlŒßß'”?:‚Ëpuuuwww˜$ ÒÉ€*Ó2àuƒ|8Éù•ËþŒÉz½û{2öœ¨OTÂù›6ä4mD\µH{ ²Â@i±‰Pg„FÍsùòLú»Ð"ÐÁyå_Hè,Úè}uzr(uäÕÙÑsHD!Ýo4ÎÔž‚?Ÿ# òÀ“[p ÏkNÝ8ÉaéPKºÂÕƒ@> ñÜB }¿ßGO†7C>u ñÜB h<·(Ïvƒ1 %us­<oñ—ZÞeL=Q5’z®SÀÏf=Ë×ácœr 9ñ4cñ©(J!•Œq<Ëå“%¥¯˜7‡¶ï©A í T™–¯¤-x_ðóí”ô¤·ó¥æbOÓ‰‘ä"zÏhvÏ»g4»†¶¡v®®z®z¡Žz¡†Z9?§¦2Tçı“tÌ—x!É“$»Ï·¨ê” õùÕúÅUÝ‹+»™KJæf9Mzoò4ye¶´¼ðÄ< 5xøÓäÎË·ãþx+Sud}ÛÊ(žüXFß³èÏúÚ4¨2-^7HÛ‘˜Wy4˜÷×óôU/b}e1 MD¼Gt_!¶ 4ÓÄô-b–Gçj©#Uùìéë–[¨[èsºsÙȧ᛼lÝÖøô|[çÁ£&çVׄ§g –x­,Ûä8ËR=eɺ@I|™<ˆÑÔ÷êcfÓg¡—Ù,ÏžjŒ×͆@>Y ñÜB .õŠ˜íe4LœèŸQ܇R͸òí³=s>}S³²FÚmñYK)ïÕ-v`¯»äG#ÇõcÑip”Òù*Ó2àuƒ´51ö׫ì£Aéyéiþ²°ñØ«Ax dî(DXIHÏ4`œŽ¥#ÝÒiÝÒA·BT×@KÍ@“Õ«f¨Å2Ðdéi0u8L.‡Áå0tÔê,:‡‰r˜(‹Žj²é˜L«J$•Hñj±T,•U¥˜ /ˆ+…ÒÊiE¤²FÊH +D…¢üòš‚ Qa…H[Êb¼ˆøëçXáï@ù’ײƒ‡4çË´ÁÙnóšÍlÚËPãC~òqÆs ò ù¸ÈgÓÔÔ¼øüðÙç'n¼ Š©‹"ÚÞ‰¿}¢ÝO°y( uærŠÆ8ýI†:ëktÛ:þ´[§ÝÏù@•iðºAÚäüÊ+‘yW"ò222ÇÈ^Ç^yáoÙ¸¨Y‘"h1®Uˆp "D«Ñ.Ã5øˆz9¢Îê| !D˜Õ@MB„)jb@è¨×"³è(‡©jþ¶F‚ %˜LÊ…T4ð:À´€Åe\P­ \P­Wsñ*m Еx¹>^¡‡Wè#Šëu5Ša¼ø?{wßTïü¤mº¥ûÊÞ²He+»ˆH°êŒ²¨ÄÁ™Aß\QÇ‹w\ÐgØEFÄ](‹"Èj+ˆ ´”] {›¶I“üþÂIš­99'ÉëùòÍr>9Iúîç,ߣºr[ÈÐ/C²›SúÞ4¨Sîð.®L QøNvÀ4Ï"ž!/ë=Ï×]wÝŠ+Y9«:.sÇñ\Ñ=CÛêËÞ¸35V¹Sqü}GñüµGDƒêPݯ†¬‰‹ª6ÿ7Rý×›ÿÕ-±·Ï«äAÊx†õß+©Òn:tnóás‡NV^¥ÿyœñØ5Æc£Œ?F î5ҮРaçUñåBR¥*¾B•X.$4«.Ë÷(SkšP—nªMêÒLu‰¦Æ(Uk„I|Qe¯«WE«êÿ­ªß¾Ðþ‡CúíÓåWƒ;Ý4¨ÓÀnqR/ð%šgÏ—èè9sæ|µg÷ \ùsÛí'*Ä“l§µlü O S‹ÊîիסSµ×<³«E/Þ°=®ÿ‡=SŽ›V©B¼þ…¡=Æù¼^@6¤ŒgXo‘VgØôõ±'^ç´.VÒë*¡ä*cÉÓé+M§³Œ§S…:¹ ô¦³ªäŸTÝŽ‡ôøQèv@Õ·4ªçð^Ic¯H¾úŠä«û$Å3 T`6ϧOŸ~øá‡¿üòKA&Mš´lÙ²îÝ»·wg•Í1$®TN÷8Ah2Ÿ‡%´F ºh¡5ÜÔ+h]™™ÌzU´Ñ¢U…ëuƒ*Ê` ­UE7 Qu‚¦6$¦NÐÔšUÌ!þ¼_¥Š«bÛSŒ¦!&¢NÑQQY}!§éŒ €ÍóÒ¥K:´~ýzËÈÌ™3G޹`Á»÷'ž¬÷Çþíå??´ùëÂÒ¢û$GžtjKþ§JÙóœ9ýÑSñâ"Õa­S‡¬Ž¬5ÿ÷ª®£žôRXh¸å¢™ÒäÝH'ðR†tF¥ó¿ ŸÓtÖw0C+Ï„Öéú·§–VÔ·^hh­Õêk´úš&]­V_Ó¤oÖšu­ÎÐÚfhhnSZ: 5éBmª©®³©:ÅT!´Y?a«vA_)$Tª.¨âÎ ñ-ªðfábŒF…‡FªC4áaáa!qQa¡!ªÄèð¨ðÐý{vVœ9%è´‚®©oÏn/ä=–®¯?ÿزÛúŒOD*ÎbØ<çää<ú裓'O¶Œ|ñÅÏ?ÿüöíÛíÞŸxFàÙW´óWK~¬nJêõÝò[§üùïß¿àÀ‚ |ÿý÷¾<ÂÊògDïñ·ëôk£èK¤2ï·9#ågóÿZ+C×þo~xX¤õ]ض x)C:‡Jv½¾ýQ£I¼÷81*}ÖàÇ\Lg£ÉT§½Ø07ë ¶“†XS‡†ÄD„ ‚­v0×µÝS¢¦=tMü@;3‘ÎfØ<§§§¦§§[FÊˡZVVf÷þ*•*==½ªª*%%%''ç¯ýkÿþý.…x†Â­Ú³ù¾zƒé²+X¨ÓøÞïþsKõi­õ¸¤9gÉÅ盆-ʯiGrV×ýÃz^,Cw!äÉ[Wôï3Àé³IT6 ¯ÀKÒaçO›WýœIJÛ´Âg/•7-7Œ†u{_Üñã&ÛG‘ÎrØ<‡‡‡755©Õ—fùÓëõ111­­ö/ðë_ÿúÏþóˆ#.\¸ðÞ{ï=û쳟þù!C/…x†ÂÝòÂ+ÇZÇ‹ÆÃÃZ&÷_uð_û˼tH•¤GX‰¶FúŶkžÙuèT­ènâK' Ü Œ‚ èkBþró[YýÄÓ†Á#ðR†tA(**úÓ²ÙñƒíìÑÕ7v,ÿE®t¶té-úæ7v<^Pú Ig=éR&DŠ'•–-[ÆÙ­[·‡z(//ïÑGuå*{òòò$®pÉœ9s޽õZœñѸ®-rOñmã\•1,É2ªÑh&L˜PTTäõJ:dõóṫÛvÎÑ×ößbîœëÊš7=u迳$`òòò즉ÜuÉtF@š3gΖ×öß.ž,SuTèćúɔήÕ^xöãûívΤ3‚ŠïÓÙoÛ©¨¨èÝ»wcc£ã»±m wqꎨxõíKô!â+WõL9~Mß-ßm9ûÃçšheöGˆYoÛΘþXIüpÑBTÆÉßI‹;#BÃùÖÏ_8®­Ñ1Ý‚\ॠé –tV C§uø«.¶w0M¾OgóóŸ©9¹ä‹?U5–ÛÞ™tÌpÏsVVVAAõHaaá€âs3ÚCè"0 6L¡¹Nÿéó!‚x6‘â WþX>bèôn×?ÜWˆ¸tð˜õvhM˜0A´™|ÅŠ×]w]ttt¿›oÛ9 ‚0¼g¾¹sÖ׆˜³ùRýé –t3 G6©øF°ý\«BT>Nçë®»nÅŠ{O~¶ø£yv;gÒðÙšç©S§®]»ÖzdíÚµ·Ür‹‹߸qãØ±c%¨ ð©K¡˜Õ%ï¦ Û;*žPYß-½_ìM½2cøÅƒÄ´ZmG›3gÎÎ;µZíÎ;çÌ™cìի׎;>ø¶èdêDÛ‡ôLý¡—C‚ ”ýPovÞÈÁW[‚ܳ(é —·¬oüår F;‚ú,›šš6òþGEÿûÎ'›uvŽì ßí¸©†††ÁƒÏ;wþüù‚ ¼ñÆ«V­*((Ðh.^§ÎzoûĉçÏŸÍ5×$''Ÿ9sæwÞYºté矞íx)ÿrÏ¿­ÙS"ŒP7ß0ð„èó‚ œÜsáÛ·KÚZ ‚ ˜Óуi3­/ó¨ÑhFŒa~†??óú«ÒêÄ÷O‰=7yà†°ý‰¯Ïï[wêÚq㹸`x)C:vm;´eÍgBÔöo•4W¬XQ)œ\÷Í‹­uvH:"8Û¶ §Nzøá‡Í—Žœ8qâ²eË22.íy³~Íùùù¯¿þúîÝ»ëêêÒÓÓsrrþò—¿ôë×Ïé"ˆgø—faì3»Ž”ˆgêŠ o¼qÐÛ±‘5‚ 4×é~rîçÝç£#5Æ ³œ •pèÐ!ë„¶{EŠ¢¢¢aÆÕÖ^\„å;Ý­³é†çš 1¢EÇDÖÝ4x]dXÓw[Î~tNxZQÀ¿dÊ΀]ÅŽ/ùâáúæ»·J”Κäˆ)¿ÏŽîÑÎe¢Mé Ø ÌæÙˆgøS´Cÿ¶­¶¹M4YwãÀõÑÖÒÖèZOÆ|õnamÍ¥¤ 7nœ%‰­gIHHÐét#GŽlnnþöÛo­Ÿ96-²ï}NÆü¡V›"ZhDX˃×Ǫ/|·±üh~©yPÒ Zþ…”ñ ë þ¨¨¨è¾ßÿOXÖùNWŠ74[x7³nìtÅØÔPûSÛL¤3`ͳ‡ˆgø£Á7Ý]˜v³ OI]uã ·#´–‘Æ ­?|Q~úp¶öÒÁÖ–ø´>Ì"44Ô`¸¸;µwÌÀ›º$ôÍøòØoZÅ÷Tµ]ÕÆˆ¦Ÿ÷¬,ª:Õ¦V«Gåúh@À#e<Ãzƒ?27½*•ucç¡Ó»Û¤ô%^Içnƒ„ö/¸S{®™tÚCóì!âþ(..®¡Óaì‚Ml&Ç”O¸!<´ÕzÐd.5ž>\súpuÃùV•J5~üxó W–mÛQ±©}¢;ˆï|e\\zd­6uÛÑ;´:›è*Ó¸>6ÚQ°åŒ¡íâ—ˆ­Ú€)ãÖü‘uÓÛc@êØ¹½ÔqŽ>ÆIgGOk4û¼œt yöñ tñ€®S…‘÷ÚÞš{v€"ÕZÛ›Ah8ßÚTÝÚT¥Kí<ãö{þù1u”*B¡ ׄÅwŽJΈV…\ìÉÏ7tÉ?v{k›´­rÓÚ ÅMÖƒœOˆ2ža½Á‰.¹üÝ÷GÜœtÅ5©®<Ö­tv î\óžUE¤3àͳ‡ˆgø#ËT"i“ÿx*a¤í¢#Ç÷ßœ{¶#K9W“¹óÇ[Û vfMÕï®{ÿèHMKKK[[[[ÛŰٶ ˆ2ža½Á‰&ú2ï@îÔ?nèôn©½Û= Ú[LFÓ±/Ê~TN:NI—2²]ç@{,u,ÞôÜC“¯°½ƒ¶5æóÂ»ŽŸæÙóŒ¡GJ®Íÿáv»sdÑ–¬³ÇýXSSÓÜÜüÓO?Y®uÉu#AË’Î;vìèÕ«—ùZÐõ§Ûš÷¦ÍòxÏÔ-רf*Ú{á£E?Ä]èM:ò ðM¿lÛ†¿3™„û×þç®SvoížüËØ¾‹Nv¬²¾ÛÞ_n¬kN¶»4áàºØ’|Žþ\DÊx†õ†ÀcLýÇvë79)±[´·žS×løygå_–·Ôë96p{ž ¥R oÎzûˆ®vo-­êóÑÁ».Üf´³Y¤Uµç—›>ûþ.û³Ñ |ýºpt˰aîÐ h©U—ð¾-:úù Ço+oªÖ9LûOÕ=éŠ;Fü¡âØÃï—¶ÔëA %ðM¿lÛF`0My›?óÑOÆv>Ï¡&mÏÄï÷)ÐDˆ7K·Õçjz©ê]ZÝÇîÜ`‚ D„…ô9·µhç† ‚ðý÷ß›Oè⢀c¤ŒgXoHæ“¢¿ýöÛˆˆˆÖÖÖ”±IýÔ™#’â;G¹òðæ:}å/ ±mÖ,{?I“&XeM:naÂ0Ï$Ÿ–Ïzë`uSû³Mƈ†¢±£²~ùépkëù¨È¶SZc/£æàiã£Ô›Œ¾®ª`3•(Ž‘2ža½!X.mšÖ=iëüõéÇÎU—Ä$…«BU­Mm­mº&CkS›ª-,#­Ï7۶ד΀[hž=D<#Àœº ½mù¾C§j½õ„Ó²»¼>sp×ċŭ/bÉéU€S¤ŒgXo¶oQQѰaÃjkÅ!î´&·pÎ3A„Ì”è=¹nÁ¤ÞªÎ ‘kæßôÇÑ–ÎY¸ü”*N¯Àcæé¸­'ÄîÕ«—Á`°Ü!44ÔÅé²Ig@!|Ó/Û¶¨6|{æÿ>üñ‡sžl{Q©~7¡ç³·eÅE‰§]Ä’³ªÇHϰÞ´<;›tÜÂaÛ"žÀL&aûñÊW¿<ùqAy{‰‰„…¨®í—²øÖ¬1W$I] HϰÞ´hƒ yöñŒ`Pt¾é­ÅÿÜuª½¹Ä5êë¤MÜùæ!5Î/jÀE¤ŒgXoéÐ<{ˆxFðhjmû©¼±¦IW«Õ×hõµZ}M“N¥R]? õš¾)a!*¹ )ãÖ@:4Ï"žÒ!e<ÃzH‡Ù¶ Í3NÐ<àÍ3NÐ<àÍ3NÐ<àÍ3NÐ<àÍ3NÐ<àÍ3NÐ<àÍ3NÐ<àÍ3NÐ<àͳüòòòä.Á åW(øC‘ʯP H/Q~…‚?©ü Ø”ÿ T~…‚?©ü ŠôåW(øC‘ʯPR*“É$w R©üà*¿HåW(øC‘ʯP H/Q~…‚?©ü ?)Rüb½)¿HåW(øC‘ʯP H/Q~…‚?©ü )‹ô›=ϧOŸÎÍÍ‹‹‹‹‹ËÍÍ---•»"‚é þÑ<766æäädgg—”””””dggOœ8Q«ÕÊ]j-"# IDATÁ‹t?Øí.ÂÒ¥K:´~ýzËÈÌ™3G޹`ÁÇ òã ¼Eù þP¤ò+(ÒK”_¡àE*¿BÁOŠ”é,/åW(øC‘ʯP H/Q~…‚?©ü )‹ “âI½nëÖ­>ú¨õÈìÙ³Ÿþyñl¬8Ù¶ÿ=At[Ÿ—¼¾Žyx€Ò‹T~…‚?©ü ŠôåW(øC‘ ¬0´ïØÐ~×È]…‚xÎø/?Ør Bzzzaaazzºe¤¼¼|èСeeeí=D¿ã_-ÿ¼/î¡þNŸ”tá¹OFäæYøÅxéxÎf~±Þ”_¤ò+ü¡HåW(P¤—(¿BÁŠT~…‚”EúÁ‹!<<¼©©I­V[Fôz}LLLkkk{iÛ·Q÷é2ÍS{}R HùEŒJăt6S©T—jA}ضÂFß6úŽ–Ayº÷É] Øîy†g‚y‹ÀùG󜘘X]]m}`XUUURR’Ó†õ»F¸y¡”¥‚E'<_ÎãtÀùG󜕕UPP0yòdËHaaလ>0ôªëC¯º^ÊÒR§3þÈ?®óù¤r*´0™Lwß}÷SO=%im)Òt9ùÀ~øá‡õõõkÖ¬Y³f¢*4ÙXºtéí·ß®¨"zè¡uëÖ-]º´´´´´´téÒ¥«W¯~衇”SáöíÛûÛßÞwß}§OŸþé§Ÿ&L˜0}úôÖÖVI+tÀ÷¿¨é,i…¤³W*´ ;^$éÜñ"IgwùâµíGÇß-Y²dÆŒÖ#3fÌxå•Wü®Ÿ½;nUøç?ÿÙh4Zþ[PPлwoië3™L~[Oœ8‘ A]—xVáË/¿óI]—täÓ¸eË–1cÆHS×eÜ*255Õ6žÓÒÒ¤+Ïäf…QQQçÏŸ·©¬¬¼þúë%¬Ï54Ï®#ÝE:{éì-¤³WξAó솴´´òòr둲²²N:ù]=>ûÍØ‘5öÞ{ïeggKS×e<.²¶¶v×®]£G~â‰'$«Îdr¿B­V;pàÀ½{÷šÿë›·ÛÝ"AHOO ëÔ©Ó]wÝuüøqékt¯ÈŒŒŒ÷Þ{ïÚk¯ŠŠŠ‰‰™8qâ×_­¨ E&L˜°aÃi꺌[Eæåå5j÷îÝõõõõõõ»ví1bÄÿýßÿ)§B»ñ,ã/v šgבÎî"½‚töÒÙ+Hgß yvƒZ­ÖétÖ#:Î7Û_½[ÏâÙã «ªªúõë·{÷nÉJ»Äƒ"­OO˜4iR[[›¢*üÝï~÷ÔSOYþë›·ÛÝ"o¹å–Ý»w777›Ï´IKK;räˆ¢ŠŒˆˆHNN^¹reeeeeeåŠ+’““¿úê+åTh­°°°{÷îz½^²Ò.q«H£Ñ8mÚ4ë¯Ì´iÓ¬•½ÂqãÆ­Y³ÆzdåÊ•2þb· yvéì.ÒY– Ig¯I:·‡tö šg7Ïîò¬Âòòòk¯½6??_ÊÒ.ñx5VTT¼ýöÛ]ºtY´h‘dÕ™LnV¸yóæqãÆYÿÅ Ìxyã7n¸á 꺌[EªÕjÛ“m®»î:éÊ3u`5Ι3çÙgŸ•¬®Ë¸UäóÏ?ߣGM›6UWWWWWoÚ´©G/½ô’r*ܾ}{JJÊš5kΟ?þüùU«V%''GFFJZ¡+hž]G:»‹tö ÒÙ[Hg¯ }ƒæÙ æ.*uê”õˆ2 )//×h4Ôu·ŠìÔ©“íñBÑÑÑÖçéj<þ|RRRUU•”¥]âV‘™™™;vì°Ù±cGÏž=¥+Ïäþjܹsç„ 4MTTÔØ±cß}÷]©+tͳëHgw‘Î^A:{ é줳oH÷Í ÀKUeeeX0€zÚãn…çΛ2eÊ’%K&Nœ(}uup5>¼²²R‚º.q«Â“'OfffŠ®ÐèƒK5vp5š|r1 ·ŠÌÊÊòAI¶ õ`5þãÿ¸í¶Û’’’¤,í·Š<{öìðáíG†~öìY ës5Ž?>??¿±±Q«Õ~ýõ×ñññcÆŒ‘´Bx—ÒÒPiõØ"½‚töÒÙ+Hg€ÍóÔ©S×®]k=²víÚ[n¹…zÚãV…•••7ÞxãsÏ=—““ã“ê.êàjüæ›oú÷ï/A]—¸U¡ƒ-dÊ)ÒÖÆÇŽ+A]—q«ÈéÓ§òÉ'Ö#}ôш#$¬Ï£Õ¨×ëß|óÍ|PÒ¬¹Ud=:d=²ÿþîÝ»KX_‡?o¼ñÆ}÷Ý'A]ŠÒÒPiõØ"½‚töÒÙ+Hg¿'ÑmÕ××÷ìÙóé§Ÿ6Ÿ°xñâÞ½{766*¶žöÞŸ½;nU8tèÐwÞyÇ7…y\ääÉ“7oÞ\QQ¡ÓéΜ9³råÊ®]»~òÉ'ʩЖoÞn·ŠÌÉÉùÏþSVV¦ÓéŠŠŠž~úé”””C‡)ªÈæææ«¯¾Zt²Ô'ûyð^¿ýöÛ“&M’´ªŽùÚk¯edd|øá‡555泪ºuëöúë¯+§B“Éô«_ýêðáÃ:îäÉ“óæÍûÝï~'iy. È•é,i…¤³W*´E:{V$éì•"IgI÷Í ÌÔ/..ž6mZlllllì´iÓD§¯(­Ñ»+Ë6×+´[^MMÔºUd~~þ­·ÞšœœÖ¹sçÜÜÜ}ûö)ªB[>ûkÌõ"·oß>}útójìÚµë¬Y³~üñG¥i2™Î;7cÆŒÄÄĈˆˆ1cÆøæd?wßëQ£F}ôÑG>(Ìš[EnܸqôèÑ £Fz÷Ýw•Vᆠ Þ¿ÿeË– TØž Ùíu¤³t’Î^©ÐéìY‘&Ò¹}¤³t|ð‹ZÕÞb€Yžó €wÑ<àÍ3NÐ<àÍ3NÐ<àÍ3NÐ<àÍ3NÐ<àÍ3NÐ<àÍ3NÐ<àÍ3NÐ<àÍ3A•J%w à2¤3 (4Ï8¡2™Lr×@f¢ ÛüZ@v¤3 44ÏAT*~ ,¤3 (¶ €4Ï8Aó €4Ï8Aó @!22R§ÓÉ]¸„t…æ€ BïÞ½?ùäƒÁ w!à"ÒP¦¿ ‚ðÙgŸ-X° ¨¨È`0ðk% E¡yÀ ÛÀ šgœ yÀ šgœ yÀ šgœ yÀ šgœ yÀ šgœ yÀ šgœ yÀ šgœ yÀ šgœ yÀ šgœ yÀ šgœ yÀ šgœ yÀ šgœ yÀ šgœ yÀ šgœ yÀ šgxŸJ¥’»8áà=Ú¼ys÷îÝU*•ïßGUûÌwX½zõ°aÃbcc“’’¦M›¶}ûvÑ3Þu×]]ºt ïÒ¥ËwÞYPPÐÞ"bccGµråJ½¼Ëy}õò½”‰ï¦ò)3•LÉkCɵ¹…¿”‰æð?’þúûÿïÿ½ûî»&“Éd2I·»LVlÿûÌ3ÏüýïóÍ7+**¾úê«°°°ë¯¿Þúá7nœ4iÒ¨Q£¾ýöÛ¦¦¦ýû÷3æ†nظq£Ý¥=þøãO?ýô+¯¼"õK#±@"š‰pEÀÄkÀ¼€§âw¼N¥âs%­Ž¯aÏÚÖÖ&û/qÛ »víºcÇŽ¾}ûZFòòòòòòÌ?Ÿ8qâꫯÎÏϿꪫ¬uôèÑœœœ½{÷öîÝÛîÓîÙ³göìÙ'Ož”è…˜Ù.×ë_¾w€2ñÝ”Z0d¢Ò(çS­œJ:ˆ¿ü{ž!¿’’’»ï¾»sç΃~÷ÝwÍãv³Ê2¨R©š››ÿøÇ?¦§§«TªŸþyРAF£Qt£ÑxÕUWåçç ‚°k×®‘#GFFFfff®X±Âƒ’AغuëèÑ£5F£=zôÇl]›V«7o^RRRJJÊÂ… M&Sssóüùó“““þøÇ?¶µµYßùþûïOIIÑh4S¦L9vì˜íË´}í–EG‘9xuG2eŠF£III™?¾V«mï…«T*£ÑÒÞzöúzp]mmm—.]¬G,³ K—.ýýï/êœA¸êª«~ÿûß/[¶¬½§úè#»¯—¿‚Ž ð6·>W%%%]ºtY´hQQQQKKË7ß|3mÚ4ÏcáÞ{ï}ûí·ëêêÌ#¹¹¹«W¯ÝÕªUcÆŒ1™L?þøcJJŠùþß~ûmÏž=wìØánI{÷îMJJú÷¿ÿ]YYYQQ±nݺÄÄÄýû÷[Jºçž{V­ZU]]ýË/¿Œ=úÅ_¼çž{V®\YUUeyå•W,w¾óÎ;—-[VVVVVV¶lÙ²ôôô“'OºøÚE79xu'NœHOO·,hÉ’%wÞy§ƒ÷H°9^Z´ž½»\,Ãd2?~Ù²eíÝ¿oß¾Gµ{Ó÷ßß¿ÿöžv×®]™™™Êpýµ8xl—+¼yóüñ_~ù¥±±qçνzõÚ°aƒùVÇkØÝ÷€ŒÈD2ÑãLìHRØ-ÕÝb222V®\ÙÐÐP\\|Çw<úè£Þ‘ެyÇo±[•XFœ®ëvúôé?üð©S§t:]UUÕÖ­['OžÜÞ{Äß A…•ïsëËyÏ=÷<þøã®?õïÙ%K–XßtàÀÌÌÌÖÖVËHKKKFFÆÇl2™fÍšõÒK/YnÚ¼yóM7ÝänIÓ¦M[¾|¹õÈk¯½vë­·ZJ²Žœ={öh4둯¿þzÈ!–;?õÔSÖOµhÑ¢Y³f‰^¦5ãàÕÍœ9S´ ¿ýíoný¡ ZÏ&¯®Ë0™LÇŽëׯßСC.\¸víÚS§NYßÙÜÜl÷©´Zmtt´íÓž?þƒ>ÈÌÌüÇ?þá  ×_‹ƒwÁn(þõ¯µùøãGeþÙñv÷= #2ÑŒL4s+;’vKíH1ÕÕÕ½zõ²<Ýûx¼æ6Ï®Wbqº~¬Û˜˜ëðwB°a%ÂûÜúrvîÜùçŸvýy¬Ï‹n8q¢õÎÉ¥K—:ÔüsïÞ½­T]]ݵkWwKêÑ£ÇéÓ§­GJJJ222,%•––Znª««³‰‹‹³ÜÙ²MÝìĉ;w½Lk2ÆÁ«³ÞxoY[(Ø®g/®Ë0ÓëõÛ¶mûÛßþ–›››””4yòä²²2óMŽ›gFcyZKµW†ë¯ÅÁ»`7EïKuuubb¢ùgÇkØÝ÷€ŒÈD32ÑÌ­LìHRØ-Õ­bš››-ZÔ¯_¿¨¨(sb†††ZžÇnÁ¯yÇo±[•XFœ®ëväÈ‘÷Ýwß™3gì¾LÑâø;!¨°á}ŽCÈÂ<¦Õj]|ƒÁ`ý{V§Ó‰îðå—_¦¦¦644˜L¦úúúÔÔÔ÷Þ{Ï|Sxx¸¨k ±»\%EDD´´´X´´´DDDXJ2¢—`;bùAÔìiµÚ°°0_»èV¯.44ÔvAný¡`»ž½¸\,ÃVssó¼yó~ýë_›ÿëø°í+®¸Bô´F£±ªªjÆ IIIëׯwP†ë¯ÅÁ»`7 ƒí ùÇkØÝ÷€ŒÈDë—@&¶7ÒÞÒ=N »¥ºŨ>xà 7>|¸±±Ñd2577;Xçf¯yÇo±[•¸¾~¬Û¢¢¢iÓ¦EFFöïßÿž{îÙ¼y³h-Y?„¿‚ †Á§¬?|æ‘”””3gÎØ½sBBBmm­õHqq±õÕjµè!×_}FFÆË/¿,ÂË/¿œ’’rë­·šoŠ‹‹;wîœuæß˶””žž^YYi=RYYÙ©S'Ëmg¼p0Eç¹sçDÿMMM5ÿìôµ‹8xu)))¶ rðT¶l׳w׃g"##Ÿ{î9ó´7‚ Lž<ùý÷ß·{Ï÷ßܸq¶õ$%%ýæ7¿yóÍ7͇6µ· ×_‹ëŸ1³v;^ÃO(™hL´Ë㤰[ª[Åüç?ÿù׿þ5tèPF#BQQ‘Ój=^óŽßb*\X?ÖmÏž=7mÚT[[»aÆ1cÆ<ýôÓsçÎmïÎüThž!³o¼qõêÕvoêÛ·ïÞ½{­GV®\éô .\øòË/?~|É’%?þ¸å÷ׄ ¶lÙÒÁ’²³³·nÝj=òá‡fgg»ò´¶Þ~ûmÑ-.vüÚ###u:õ­^ݤI“D Z¿~½g[xw=¸hÁ‚¢Œ9wî\ll¬ùç‡zhùòåG=êèÑ£/½ôÒ½÷ÞÛÞÓÞ~ûíFt-hÏ8xlß2ǯa)ÞSJ@&Zÿ—L”w¹ÍÍÍ‘‘‘–ÿ®ZµÊéC<^óŽßb•8ˆ×ޝóôòóæÍûôÓO­'™÷'÷P®sëse™Æ³¸¸¸¥¥eïÞ½–i<ßyç+®¸b÷îÝMMM'NœxôÑGçÍ›'8;dÈ`0ôíÛ7%%¥W¯^mmm–ñ£GvîÜyõêÕ.\hllܶm[{“£8(iÏž=‰‰‰æ¹ +++ÿýï'%%}ûí·í•ä`D„»îºëÕW_-/////õÕWÓÓÓùåW^{VVÖ¦M›\|u¿üòKzzºeA¯¼òÊ]wÝåà=lv†ØÞÇ‹ëÁÅ2Ì#C‡5o ®««Û¾}û Aƒž}öYËÞ{ï½N:½òÊ+¥¥¥:îÌ™3¯¾újbbâƒ>èx¹[¶léß¿¿íÁQî¾ï‚í[f·Ë ã5ìî{ @Fd¢ƒUA&:xÚöÆ]L Çueä®»îš1cFYYYEEÅ‹/¾xÛm·9ý¼y¼æ¿Å*q¯Y?ãÆ[·n]ii©^¯/++{üñǧL™b÷%ówB°a%ÂûÜÝLS\\}BCC­ŸßÁ«+((˜,Âm·ÝÖ»wï¹sçÊSÁ‡t3…îy¶kÍš5‹/îÙ³gÏž=/^¼zõj¹+ ؑ΀ !aó|øðáx !!A´‰ÚìôéÓ¹¹¹qqqqqq¹¹¹¥¥¥NŸðرc#FŒ0ÿ<|øðcÇŽy¹bé €g$lžgÍš•––¶gÏÛ›srr²³³KJJJJJ²³³'Nœ¨Õj?accc||¼ùç„„„††ï @@#ðŒÊ{¨Tâ¥,]ºôСCëׯ·ŒÌœ9säÈ‘ ,pðÀøøø“'O¦¤¤‚pþüù¾}ûÖÔÔH\;‰tÀ-òœó¼uëÖÙ³g[Ìž={Ë–-Ž•••uàÀóÏÌÊÊ’ª>‚é €ò̶}ìØ±Áƒ[ 4è‡~pü¨Ù³g?ñÄýû÷á‰'ž˜?¾„%dHg§y®©©IJJ²INN®®®¶ü×2‹‰ùóáa÷ßQQQvv¶ùç9sæø®bé €òœóÞÔÔ¤V«-#z½>&&¦µµÕ»‹V«ÕmmmÞ}N,|£!J¢t–gÏsbbbuuuzzºe¤ªªJ´µÛ+ÚÚÚü÷ÏÙþ=$/ßÔãõ¥tð =~¸[týÎ.ÞSißPÚ«æ+#é½û]°{µ'ÿE:KŠ_5JxBÒÙ(íUó•‘ôþ’ÎòL–••UPP`=RXX8`À)–¥ú¯¼¼<)žTòòò,É"w-^F:ü”oÒYž-(K–,9|ø°èb#FŒxðÁ¥^t0PÚ«fCtdÛ¶W(íUó•‘ô^ß¶­¨[HgSÚ«æWt$½Bi¯š¯Œ¤ô—t–gÏó}÷Ý÷Í7ß<óÌ3555555O?ýô¾}ûæÎ+Ų‚pÛö“O>)w —ñM=^_JŸÐㇻõ@×הּO…¢(måð•‘ô.ÞßÁÝxÏ3é,)~Õ(á Ig?¢´•ÃWFÒúK:K¸ÅnÝ–Å:uêá‡Þ¾}» 'N\¶lYFF†5(j“ p|e·øãW†tü_À-Ò}eü«hý'“O><›·ÏÏ€Syyy‹-²ü—¯ŒHgÀ-¤3à”oÒ9À¿Šü®Ü’——Ç_±€ëHϰ޷΀[Øóì!â RÆ3¬7€tmÂ0_ Â)IÒ à Ã|‰tx‘ßO¦lÛH‡”ñ ë ö< ›Àož90 àE¶í¤3À‹8lÛ 80 RÆ3¬7€t8lÙÐ<àDà7ÏœUå×Î^Ð~ á詹 €‹8çÙ+Hg€qγpV•?2™„³ôÇJZ¾;ÑRYÛ&•="æÞ”$w] FÊx†õŽt)&Å“qâ\ëß·V[ürVת7E¨ÙÉ@Ø6üN¯ÎQ—}2Û ¦ŸJ[åªhž¡8¡!€ŒÑà1N{ šg(QVF¤hä§3­œu'* IDAT@.ß<3Ÿ§?ê×="ôòÏfƒÖxî‚^¦ràfÛö ÒàE̶íÌçé¿^ß\U\®³¹yLÜuƒ5rÕ¶HϰÞÒ‘.eÏ3üT¿îâÓžOžcÎ0ò y†B]Ñ5\4RT¦3²£€hž¡P=ÒÔáa—±Ð¢3•UqÚ3Ðí¹¼š=Ï|æŠÖÉæ°mšg¾Gó EKO µPÛd09Ø€OÑDó ? ‰°ÝóÌIÏ|‡æ~ ʦyæœg¾Dó ?.šo[hÖÑ<ðšgøH›=Ï-:Ûà;4Ïð‘6{ž[õ4Ï|‡æ~ Óºç˜V–b³@ÝóL:üWàïyö¶mŒ6ƒiÑÚJÑyÎ*A˜04fÊÈØ€ú €ß e<ÃzH' ö< Uº2J4h„ü#o~XUÛÈùÏ$øÍ3†Œë³c“ãBmÇ‹Êt/ýçÂw'›}_€ ¨‡mûé ð"Ûö 0•µmË·T56Û¿HÕ ^‘ÓÇÆÅiì4Ø RÆ3¬7€t¤K™O/â9ðTÖ¶ýóãêêv®S®š::nô€höðRÆ3¬7€t8çÙs`ÒÂÊMéÛ-Âî­-:Ó{»ëþ¾µª½î:ˆÃ¶½‚tx‡m{Û¶•É$ìø®ñ³ ûGp áaª©£ã®¾Š]Ð$DÊx†õ‡m{ˆxleÕmÿÞVSVÝÖÞzv ¿3'Áî4cÐq¤ŒgXoéÐ<{ˆxxú6Ó‡w4¶· :2\•;.>»ø2WÐq¤ŒgXoéÐ<{ˆxeUú»êNWêÛ»Ãð¾Q·Ž‹Ps7o"e<ÃzH‡ Ã<Ç”$Á s²úÓS¦ŽŽ µßü¹yÉ{Î^h·»1a˜WÎ/bÂ0/`Ûv°©¬m{'¿¶½]Ðê0Õã9„€×2ža½¤ÃaÛ"žƒÑ$ìü®ñóƒmûoýèÑ·^øG])ãÖ@:4Ï"žƒÖ¹*ýúmµ5ö'âîß#âîɉáar  CHϰÞÒ¡yöñÌÚ ¦ö5|õ}“Ý[{¤©çÞ”¤‰d4Ï‘2ža½¤Cóì!âßlÙ¸³¶UoçcÐ%Y=ojRlý3‘2ža½¤ÃlÛžc>Ï 7¤wäC¹)i a¶7«Ò/ß\ÕÐÜ΢ÀfÛö ÒàE̶ílÛ†Ys«qݶڟJ[moꞦžs2—€àRÆ3¬7€tØó tHTDÈœ)IC¯°s‘ªÒJýÊϪۛššgÐaÆÄ„«³¢mo:qV÷îÎ:ß—À_Ð<#ˆ¨TBî¸økilo:üKó7Ç´¾/ €_ yFйåê¸ý쿽å›úÒJ½ïë |4Ï:*A¸c|ÂÀž‘¢ñ6ƒií—5v/j ÈÑ<#…„3&&tIV‹Æ« Ÿîo¥$JFóŒ ¥SÝ=9!2\|…ª=G›8x€Hà7Ï–‹eçååÉ] ”%%>ìÎ ¢A£IøÏî:£Q–Šø¼¼]Á„Û@P£yÄzu”Wëum\ï^4Ï€X\tHœæ²Óž&áìv>Á‹æ°£GªøjÏ4Ï@0£yìèfÓ<—W·ÉR % yìè”&¡y‚™¸C°¦R©Üz.“‰• :%Š¿54Ï”‚€À÷5Ïd-‚Vr|XX¨ªÍpé+ m566c¢8X€üh|N°#D%$Ç…Š/Ô³óR4Ï€})qâã2ªê ²T@v4Ï€}Éñìyp†öÙ¶]×d”¥! ð=& ì‹×ˆ›çz-‡mPßó³Ã¶ n¸á†˜˜˜®]»®\¹RîrÈâ¢ÅÍs{žÀÒ ü©yþùçŸo¾ùæÙ³g—––îÝ»wÛ¶mrW„@-þvÔ7Ó<€é .5Ï6l˜>}ºhpúôé7n” ¤vååå-\¸pÆŒ‰‰‰=zôxûí·}¹t›X›K:768P€¢(! Ig@p©y~öÙg.\(|ä‘Gž{î9yøðáx !!Áî|'§OŸÎÍÍ‹‹‹‹‹ËÍÍ---µÜ”ŸŸ_QQÑ¥K—äää»ï¾»¶¶Öƒ¥.R‡©"Ô—}DF¡¹•ÏÄ‹M:à˜KÍóñãLJ*ÌÎÎ>v옋œ5kVZZÚž={lojllÌÉÉÉÎÎ.)))))ÉÎΞ8q¢V«5ßzáÂ…âââï¾ûîøñã:îá‡ö`é€ëbìì|¦y  ^ hÒÇT®ÌØÙ©S§}ûöeffZ=º¢¢Âóe«ÄK_ºté¡C‡Ö¯_o™9sæÈ‘#,X B||ü‰'RSSA¨¬¬ÌÊÊ:þ¼»‹\÷ê¦ %zë‘?LKîÙ)\®z(ì)#E@“ο&]ʸ´çyòäÉk×® ®[·nòäÉÞ­fëÖ­³g϶™={ö–-[Ì?4Ȳ]ø@t¤ø ÒÔžg ⛀&_çÙâ©§ž;vlkkë=÷ÜÓ­[·3gά^½zõêÕvîêˆcÇŽ <ØzdРA?üðƒùç{ï½÷OúÓ’%KAx衇n¾ùfï.ÑDˆ›g-Í3%ñM@“Î.îyÎÌÌüæ›oΞ={íµ×ÆÅÅ]{íµçÎÛ»w¯è8±Ž«©©IJJ²INN®®®6ÿü?ÿó?½{÷ÎÊÊêß¿¿Z­6ç4 Û=ÏÚVvªPß4é €àâ9ÏR-Ûæ`ôððð¦¦&µZmÑëõ111­­­/Âîø“O>™——çÙs"x|~ á‹CÖ#7 <•Õ<§§§¦§§[FÊˡZVVæ­E®Ûñ]ãGû¬G& ÑL'W=”& S†t†Âí9ªýàë:ë‘«³¢sÇÅËU¥‘yÂ0ŸÉÊÊ*((°),,0`@GžSõ_l̆»ÂÕâ/H«Ž¿ö€`———gI¹kñÒŠ.þêµêIg Øù&5Ï*7u¼š©S§Šf ]»ví-·ÜÒ‘ç4ýñ wEªÅŸêfšg èåååY’E®|Ф3%Â&Ù´ À7éì¨y6¹©ãÕÜwß}ß|óÍ3ÏàÒ9Ïaaa‰‰‰R—(ílÛ\I€rÐNa63’p\p©y¾ýöÛ?üðC©KˆKUP2ÁImsè$Ç…ð—šç¥K—îܹóÕW_=sæŒßÍðÁ|žèˆµ¸ynÕùÙW€w)j¶mÿ hÒaï¸0Y   šmÛh4.Y²$//¯©©It“£šù<ÑAÿÙ]·ï­õHî¸ø«³¢åª€¢Èž2~в¯7ø»¾ªÛsì²t¾õšø±W‘ÎAÊ”qiÏó#<²iÓ¦/¾ø¢®®Ît9)j”#ÒvϳÞ(K%`‹€Fp ·Ig]é @r.Ͷ½jÕªýû÷3™'‚Pd¸xS+à4‚S¸ZœÎ-œT@z.íy6IIIR—(í9ÏÍ­Ä3¥  œ¢#Äé¬maÏ3ɹÔ<ßvÛm[¶l‘º@4‘âïHc3ñ @)h§(›ãšÙó @z.5ϯ¼òÊ®]»üq2O ƒ4Qâ•æ€RÐNQ¤3¸4™ƒù¾ÕÌç‰*­Ô/ûà‚õH·Tõù)rÕ@QdO? hÙ×ü]I…þÕM—§sŠúáÛHg‚ eʸ4a ‡ ÅYUŒ€Fpб9.¬‘t =—Û‚VLT¨h¤sž•móÜ 5²% €Ô\jž¦|ªÿÊËË“»øŸÈpUXèeŸ}›‰«UÁ,//Ï’,r×âÇM:£#"Ôªð°Ë>ü£©…Óž æ›tvépð´´´'NÄÅÅIW‡D8« ÷Ժʺ&ƒõÈ_f¤%ÅŠ÷HB²§ŒŸ´ìë `ñ¿+k.KçÇîLM‰wé„DMº”qõRUü±‹”Ïöذz­Áî=ÀÇh­ÛkIrÚ3‰¹Ô<¿ôÒK_~ùåÒ¥KO:¥×륮 P”8«d©Dh-Mó¬mápÒréàFcþáOú“è&»BÀ‹µ™3¬‰9Ã( mÓ<7±ç€Ä¸TàD´ÍÕªš˜’€2ÐZ¶{žižHKUNØÆs#{ž•½tfFÒr£yÞ¿ÿ­·Þš™™™™™™››{àÀé*"6ÚæRÏœó @1Hg§Øhf$àk®6Ï~øá”)S&NœøÕW_ÕÕÕ}õÕW9997Þx#“|"àÅÚ̶Ía‚tFвmž9. €Ô\½ÞâÅ‹_{íµ»îºëÿ·wçñQ•wÿÿÏL’Y²g’ «l²‰¥ ojloe¯"[Pz÷¡– ­öÖŸ×âVÁ"Z¹ñ«B@dQDd7ìBXBȾg&Ël™ß©q83É,™™3Ëëù×äší“aNÞ|ιÎuÚìÝ»÷oûÛ„„„¿þõ¯wÞy§×ʤÇYUüéŒE:ð=g<Ÿ|ÇŽ¢Á;v\ýõž. ð/J…,<ìš«UM½‘ËÃ錥VÊEél0Y &Ò€9{ÎóòåËï¿ÿþúúú3f$''WVVæçç¯X±âÝwßõfy€ôd‚¥’74]sŒ¦Ö6e„xnð1Ò¡Ì6u-mšÒ€·8{äyæÌ™[¶lÙ±cÇÍ7ßwóÍ7ïØ±cëÖ­3fÌðj}€?ˆ¶Yp»™™ÛüéŒPf»( é À«œ=ò,Âøñã?ùäï•ø-µR&Ñrbÿ@:#dE©Ä鬣yàM,8%žÖ 3Û}$ðµ8µÍ4ϼȅæyÆ ãÆÓh4²ky¯8ÀOÄÚ4Ïyà'Hg„¬˜Hñÿc›Øµ À‹œmž_}õÕ?ÿùÏO=õÔ… ,×òj}€?ˆ±9ç¹xàHg„²8Ûya¤3oröœçW^yeÍš5&Lðj5€ŠÇsUƒI’JÀéŒP-Þµ]ËIU¼ÉÙ#ÏEEEcÆŒñj)€ßê'nž«ˆgÒ#ÊcÄ*jÙµ À‹œmžÓÒÒÊÊʼZ à·’âÂEç6èÌ­fEéŒP–œ.:¹¿Nknѳ( oq¶y~àÖ¬YãÕR¿.ÓÄ\sðÙ"%ÕF©ê€v¤3B™2B–wÍÁg‹ ”Öpð€·8ÛÊ…wh¤ª€?ð^Ê8»Ú6!‡×'Y!9_¢7™-áa\L€dHg„¸¾©âyaJ “E!><ÀÙiÛ@ˆËL%q«ÁRp¡Uªz@ïd…2âšt6˜,§.“μ‚æpJx˜lP/¥hð«ãMmõ@"araHq:ïþžtà4Ï€³²‡¨E#%ÕÆ¯ š$)‚0z€tÞ}L'I1‚[à5ÏÕÕÕ}úôéb‰ÀK†ôQ%\{Á*A¶l¼PÊžBé © ÉP%D‹ÓùóÃÚsWõ’Ô ˆ^óüÔSO-^¼Xê*Šä2aò˜hÑ ¹MXûE×|âHgH%L.L¹AœÎmmºõ¤3Ï °kEœ9sfÆŒ'OžT«ÕÎTÎÅ0àYAx}sí¡æhµü73{jœ]¾@p eڑΖEÞȯ),§s”J¾ø.Ò9ÞKŽqâÄ„ :f£±¤'$4fúžŸÇÙ~[ômon©¹TÎúÛ|t¬e Tÿê;éÜj°¼µ¥ö| ëoèg›ç´´´²²2¯–"©S§FŽi=2bĈӧO·ßÍFc§5¤5nHä=·ÄÙþ/±=¡¹~ ‘ìÁ‘¿¼ÕN:L–w¶Õqý*ÝálóüÀ¬Y³Æ«¥‚PWW§Ñh¬Gkkk½ý¾€{Æ ‰œ5)^n³L–~VKBð6Ò°uãàÈû&ÆÛœþ,M–µŸ×Ù.Ê Nr¶y^¾|yuuõ“O>yñâŶ¶6¯Öä çwlËìÉËËófu!YÕ÷M´ß?¯ù¼ŽãÏ@pÈË˳›&R×E:ö¤ž}[‚íêž“åmµËHg ø>=—º‹"Üž e{&wJJÊñãÇSRR:FÊËËGíöœ4벟zê)R^rübëú/ëÌ6ÿqUFÈÏHìÍúa@ÉËË[¹reÇÒÎR&.œ)Ò¿Î[æ IDAT»½Îdo *…lñŒÄ^=Hg xø&=òl霫6lXAAõÈñãLJÚ×쨓l†÷Œè§š7ÅÎ2ôFËÛŸÕVÖ›$© €7äååy#ÝC:]’¡¼jBx˜8[ –·?«­n àá›tv¶yöéÓ§¯[·ÎzdݺuwÝuWw^“É`ðᙪû§ÙIè¦Ö¶··ÖêZ¤ŸN À#¬'‰I]‹Î\×õ¶ß?ëZÚ^ϯ­Ó™%© €Çù&]¸ÖÁƒŸ}öÙ£G–——§¦¦Ž3æ‰'ž;v¬ûïm31L«ÕŽ9ráÂ…‹/aõêÕk×®-((ˆŠŠòÔ[^uöŠ~Íçuæ6ñ·®šâ¡éÛCÓš?¤ é 8tª¨õ__ÔÛ¦s¯Kf&Ú¶Öšô×yÞ¼yó´iÓrrröîÝÛÐаwïÞI“&M:uëÖ­®¾¥õ.Ñ˜]»v:t(#####ãðáÃ;wît;›ßÜG9;ÇÎ ŸJ Ÿ~Ó(EE‚é 8cX†jîd;é|µÊ¸y?é ÀYÎ6åÙÙÙ>úè¬Y³¬?øàƒW^yå»ï¾óNmÀ’$Äw§›7~Ý`;>;'>k Ú÷õð ¿Z0Œtœ÷íéæÿg/gMŠ3ˆt›oÒÙÙæ922²¨¨¨GÖƒUUU™™™MMMÞ¨Ì#˜©äïoÜS Þ4”²Gs“’ãÃ%) €ÇIž2¤3à’í‡u_ÖŠ•²e¹I=Hg XH?m;p±$ $1}\ì°L•hPo´¼¿³Þ.Å À}!¸`˜7ÎÄ”¢m§€é–ï®·9!@ ñM:;Û<>|ÇŽ¢Á;v\ýõž.Éø$!“ ³&Å'ʼnwc_­2î)ÐIRð«KU‘΀«r'ÄÙ¦sQ…ñÛSþ;Y€Cþu©ªåË—ÿîw¿[½zuqq±^¯/..^½zõ’%Kþô§?y¯8  ©²·'(ÂÅ{¿¾8¬«¨ãÚ’<€t\ÕžÎ6é¼õ;mM#W®Ð¦ƒûí·Ï?ÿüÑ£G+**RRR²²²üñqãÆyµ¾nâ¬*Hnÿéæl–'Ü[ùàIêàAþ2¤3à†oN6}bs ÒÞK™ O/Öó„ä,‚ðF~Ma‰A4þÐtÍ ^JIJÐ~µÚv€"!9‹EøÇ¦šKå¤3$ükµížmøƒZ­ù…ÿ«Ò¯ù*¦%Füþž$Ö)ã>7øƒÊzÓß7V›Ì×|{'G¹Õ`),5HU€ÀE:ž2¼¯J´þH‹¾íé ÀŠ;Ë Èåòþýû?óÌ3æÙgŸõxM@pS)dƒûˆç†½¢—¤Aƒtº#J%h3s›t`­[k>ðÀo¿ý¶§JBÇР‷΀{†õU‰FΓÎ~Ò­æ¹gÏžeeež*ƒ{+EgPU5˜êtfiª\HgÀ=Cmæ…Uԙ괤3€ÿèVó|øðáÌÌLU„¸¨°TøBq—Ê8± €΀{â£ÃRÄé|¾„ƒÏþÃÍæ¹¾¾~Û¶m÷ßÿÒ¥K=["ú§‰wo_¤yÐ=¤3ÐMƒ{‹Óùr¹Q’Jø!ñ޵Έ.†?hРgžyæÞ{ïõBU@ðë×SñÍÉ&ë‘Kå4Ï\C:žÕ¯§â«ãפóå ÒÀ8Û:kÖ,ëÁ>øà•W^ùî»ï¼S›°$ üÜùµçKôÖ#sn‹=@-U=\"yÊ΀7ئóÜÉñ£ú“Î@`lÁ°'Ožœ ¸ÅF…)Âe« `èm“Y´Î'ØE:Þ)W)d­†ŸÒÙh²46›ãHg ´ùr—¬ç ÿ·ê£ê’j£õÈoÿ+±_O…Tõp)ã>7ø¿6V—Õ\“ÎKf&f¦’Î@~µm^’-Þ]¯cIO¤”-þOré „zôèÃ?/“Élï½råJnnnllllllnnnqq±ÝÙµkר±c½\)à;ýÓ¢‘’j#Ÿø é Ø`“ÎW«Œ—ËIg DIÐ<Ï;799yß¾}¶wétºI“&eeeeeeåää477‹vìØ±eË–½ùæ›>©ð…TMx8ñܰÿ··Ádæà _ [É á‰±âEI>ÚÛH:¡IÊyS¶ÇÓ_|ñÅ#Gެ_¿¾cdΜ9ÙÙÙK—.íÙ³gÏüùó7nܘíÆ[~kOASþþFÑà˜Aêû&ÅÛ9 ÀeÊ΀µ]Çt[hEƒ£ú«çÜoo–éÕ´í.äççÏ›7ÏzdÞ¼y›6mêøqÆ ³gÏþøãÉf °Œ­o’Gε|ôUÿÉ !Ò¡lü°(ÛtþþBËG_“Î@Èñ¯æùÔ©S#GŽ´1bÄéÓ§Ûo¯Zµê±ÇÛ¹sç˜1c¤¨ð.•Bö_ãcmÇ¿;Ó¼nGÑDDéŒP¦RÈîú™ýt^ÿe=ó·â_Ís]]F£±ILL¬­­m¿ý?ÿó?W®\2dˆìG×óAfO^^ž7êº)k zT•íøñ‹­¯~ZSÓhö}IAÈË˳›&R×å#¤3BܘAêQýÕ¶ãß_hyõÓšZ-é HÃ÷éì_ç<+Ц¦¦ˆˆŸ.xk4£££õz½§Þðs“eõæšâJ£í]ÊÙ]ãco*ÿaü^P¦ é Ø2š,ol©µ»Î¶J!»k|lö`Òð¡rÎsBBBÇžìv555¢½Ý®b6‹"\öàšô¤Û»ôFËÆ¯ÞÚRËNn@BÖû¹¥®ÅGHg "\¶pZ‚Ýtn5XþoOÃ[[j+êL¾/ @;ߤ³5ÏÆ +((°9~üøÐ¡C»óš–ÏQ*ùâš~=Å×–lwîªþ¹«>; mÑ·ù¸0‚ äååu$‹Ôµøé ‚ VÊ3CÓ7µÓtþûƪÍß66“΀|“ÎþÕ}ݺuÖ#ëÖ­»ë®»ºóšìÛF R+åM׌dç +ALfËÎcºg>¨úâ0-4àk!xä™tÚE*åMר=ÿYs›ðÕñ¦¿}Pµë˜No •k€ŸðM:û×9ÏZ­väÈ‘ .\¼x± «W¯^»vmAAATT”§Þ,ûN5oþ¶±‹Å~hä„ë£b"IgÀׂêœgë]¢Ý111»ví:tèPFFFFFÆáÇwîÜév6‹ÞŽ}ÛD7 ‹üý=I½ìdÕ®Õ`ÙyT÷ôúÊ {Êjì,3À³‚õÈ3é 8ïæáQ˺Lç}ÛÎcº§ß¯üpw})é x_ðyööm#8´µ »¿×m?¢sx=ÉéÊ[FD î£ ®ÿÕ~Š”qŸ‚C[›ðÕqÝŽ#Ž'iHWL¸>jX†Št|À{)äéE<#˜ÔjÍùû_luøÈäøðñÃ"o¤V+™-x)ã>7“†&ó–ï´Çη8üNkbÂnuã`Òð® š¶ícL CÐÐĄ͟’ðèÝIC2”]?²²Þô龯¿¼W¹ñ«†’jf‹ž¬Ó¶}ŒtFЈ‹ ›ÿè=I×õvÎí;Áÿò^åG_7”Õr]+À“˜¶íìÛF°ºZeÜqTwêR«3ßïÌTÅMÃ"GöW…Éù¿>àI¤Œ{øÜ¬.–v¯;S¤wæûÝ?MqÓ°¨á}UaÁ0 ð)¦m»‰xFp+¯5}}¼éÈù‡çB ‚£–5~Xd4ërBʸ‡Ï Á­¢Î´§ é¨séö³¡‘?J:ôm÷11 A,Uþ«[ãVÌIžrC´ÃÐÕ¶´}qXûôû•}ÝPUÏl1ÀMLÛöÒA,%!ü¿o[1'ùö±1/UÕÐdþüöé÷+?ÞÛPÓhöM…@ðaÚ¶°o¡Ãd¶=ßòÍÉfgNr–É„a™ªÛFG÷Nîô2"eÜÃç†Ðan³|_ØúÍɦ+•ŽÓY.FöWO•ÞùE°8Ä´m7ÏAW«ŒûÏ49×b49þò÷MUL5,CåƒÂ€àCʸ‡Ï !èJ¥q‚ ­æ6Ç_þëz+o¿!&#…pͳ›ˆg„,]KÛ3ÍûO7×éÏËLUÜycL¿ž RÆ=|nYÚæ¶ýgš÷ŸnnlrœÎC3”SÇÆppç<»³ªš¢Õòœ¬è峓}{ ^Ê®Oþ¸\nøÇ¦šw¶Õ–så ÀÎyöÒ¡)&R>eLôŠ9É÷OsœÎ§‹ô«>ª~sK-Wâœg`ß6Ю¬Æ¸§ éX¡ƒÙbr™pÃu‘ÓÆFÇF…ù¬6 p‘2îásÚ•þ'[ÚÚºz˜L&Ü0H}ç¸ØVäœÀ´m7Ï€µ†&óÞÍûO7µºÚ.”²Écb~>"’ëB]#eÜÃçX«Óš¿:ÞtàL³¡ËÅJT ÙÔ±17 ‹’ÓA]¢yvñ ØÒ-Ï6ï:¦klîjGwR\øÌ›b‡ôQú¬0 à2îásl5µ¶í;Ù¼÷DS³¾«tNKŒ¸{BlßT–):Eóì&âèŒÁdùîtó®ïuÚ.[è¬ê»oŽU+ÙË ØAʸ‡Ï èL«ÁòÕqÝ×Ç»š#&„®Sϼ)N¥`‚`ͳ›ˆg k“å›M;éºé˜Hù½·Ææ4`ƒ”qŸеf}ÛÞM]·Ð Ña÷MŠïŸÆ!h@ŒÕ¶ÝÇzž@á²I££ÿx_òÍãÂ:ù{ mnûç¶ÚÍß6šÌüg`µmÏ .D*å·ßÓžÎá\§3¿‘_óÙA­¹ËÅÆ€ÁjÛÀ¾mÀyUõ¦O÷5ž-Öwö€^="LIHˆa!nà?H÷ð¹Î+­1~¼·ñR¹¡³ôNŽ˜“Ÿî˪Æ´m7Ï€«Nµ~úMc­Öl÷Þ(•|îäøéLá”qŸà‹ 9ײe£¶ÅþQfe„lÞ”„Á½Ig@hžÝF<n0˜,[¿Óî;Ùdwã‘Ë…ÿ{óð(_—øRÆ=|n€Z –­÷Ÿj¶»ñ„Ée¿º5î†Aj_—øšg7Ï€ÛÎ]Õ¸»¡¡Éþ!èI££ï¼1ÆÇ%þ†”qŸà¶3Wôv×Û=-„)cc¦Œ‰ö}U€_¡yvñ tGSkÛÆ¯N\jµ{ïMÃ#qSK&!”‘2îásºC×Òöážú3Eö×(ÉùË[âä¤3Bͳ›ˆg ›,‚°û˜nÛAm›½-é†Aê{'ÆÓ?#d‘2îásºÉ"ßžlÞôm£Ù^<½Nýß·’Î]4Ïn"ž8wU¿þËú¦V;“IJGþêŽ?#D‘2îás<¢°Äðîöº½t¾qpä/o#œšhžÝD<žRÓh~sKMM£S 642÷ç$4B)ã>7ÀS*êLÿü¬Öî52nùKön#$y/e:¹ì:\+16lÉ̤´ÄÛ»öŸnþâÖ÷%âR—ü"©W;é|àló‡IgÀ“‚¿y–ý(//OêZ€À)_|—¦O²„ÞqDwè‡ß—ø^^^^G²H]K#O‰”/ž‘h7¿<¢;rŽtFHðM:ù¼)&†×¢o{sKmq•Q4&—ýf†¦_O…$U’ eÜÃçx\‹¾íüÚ«Õât“-ž¡ÉL%B˜¶ À_¨•òEÓ5éIâ=Üæ6˺íu]xO{:Ûž]e2[Ö~A:žAó Àe‘Jù¢;5š˜0Ѹ¶¥mÝöz»—Í^¥’?4ÝN:ëZÚÖYßfgMn®¡yàŽhµ|áµRü7är…aëw,O€¢Õò¦iT ñ9ŸË ÛXÚè6šgnJIŸ79^n³(Ã×Ç›N饨€P—ª Ÿ{[‚m:ï>¦;{…tº…æ€ûõRNËŽ ZáÃÝõÍÌ@ƒûØOçï®×’Î@7Ð<è–‰££‡gªDƒM­mî®çÔg$1qtô>JÑ ®¥íß»ëYêpÍ3€n‘ ½ã¢ÅË“üP¬ßw²I’’q2A¸oR|¼½tþúé ¸‰æ@w©•ò9·ÅËmþœlùN[Yo’¢"B]”J>;ÇÎÒ$ŸЖՈ/ À4Ï< 3Uq[V´hÐh²¬Û^g41? ôëi'MfËúõÒpÍ3Ϙœ“™¢ –Õš6ïo”¤0yLLfª8ËkMŸ|C:.£yàr¹pߤ8E¸x~Ø·§š¶HR!N.fçÄÛ^ùùàÙæƒg›%) \4Ï<&).ü¿ÆÇÚŽÿßž†’jN¯@š˜°_Üg;þñ7¤3àšgž4nhä¨þjÑ ÁdYóyW~@7 R½NœÎF“åŸÛêšÌ’”"šgöË[â’âÂEƒõ:ó;ÛjõF–'@wOˆKI§sc“ùmu¤3à$šg¦RÈæMŽ·=ùùj•ñ_ÛëÌm$4¾¦—ÍŸ’ Œ§sIu{:KR`hžx^zRÄOŒ·¹´¤ðC±~ÝŽzßKI¿·“t^ÿ%ý3àÍ3¯Õ_uûØÛñ“—ZIh$1¢ŸjZ¶t>~±õ½¤3àÍ3o¹mLtöàHÛñšùÛøZNVôöÒù{·Ghžx‹LîùyÜ ¥í]'.µ¾ûEÉLÿ €¯Ýóó¸!}ì¤óñ‹ôÏ@WhžxQ˜\˜?9a@ºÂö®ÓEú5Ÿ×MôÏø”\.Ì›’Ð?ÍN:3; èÍ3=0Mc7¡(Öÿs[­þßR„ËÞ¡±»wûÄ¥Ö5Ÿ3; °ƒæ€×µ'´Ýþ¹°ÄðÖ–ÚV €O):ß»}öŠ~ÍçuìÝDdK0o2Yÿ‚@1˜,ï~Q÷C±Þö®>ÉMOT)l/Ÿø5RÆ=|n€ÿ0˜,ïl«-,1ØÞÕ¯§âiÒÇ{)Ñg>¢—Ý?5a¨½õîTßÜRÃñg|¬ýø³ÝùÛË on©iѳ€ðA¾ë—}Û€¿1·YÞÛQâR«í]}’#Ý©Q+Ù©‡€Aʸ‡Ï ð7&³å_ÛëNÙ™–žñÐtM”ŠtFÀàÈ3€ &—Í›œ0ª¿Úö®+•Æ×ók›ZÙà €O…‡ÉæOI°{uÉ’jãùµºÒàÈ3)´Y„w×9×b{Wª&ü7Óc"Ùµ‡@ʸ‡Ï ðOæ6aý—uÇ/Ú™–¾x†&6*Ì÷U®âȳ ‚ÅbyüñÇ4ÍÿøGr\r™pßÄøÙ9þ\^kZ½¹¦Ngö}UÜ@:A#L.Ìœ0Æ^:WÖ›^ϯ%â©y~ë­·¾üòË£G9rdûöíï¼óŽÔpŸL&Ü;1~ìuöúµOkÊjŒ¾¯ €«Hg ˜´ïݾqp¤í]•õ¦W>©)%ÂiÞÔøñãW¬X1mÚ4A¶mÛöÌ3Ï|óÍ7]?…‰a€Ÿ³X„ö6|wºÙö.E¸ì—·Äe ´Ó]~‚”Hg Yá㯾µ—ÎÊÙ/o‰=€t†ÿ ªiÛG}øá‡ãããe2;W»råJnnnllllllnnnqqqÇ]§N;vlûín¸áÔ©S>ª€×ÈdÂ=?»yx”í]“åýõö4èü'ð:Ò@™ Üýó¸ ×ÛIg½Ñ²þËúw×s +„ šç¹sç&''ïÛ·Ïö.N7iÒ¤¬¬¬¢¢¢¢¢¢¬¬¬œœœæææŽ{ãââÚoÇÇÇkµZß Àkd‚ð‹›c'޶{ïÁ³ÍÏþ»rÿéfs-4àE¤3k2A˜ySìÄQvúgAýÐòì‡)DÎ IDATUûO7›Ì¤3Bˆ”ó¦l§¿øâ‹GŽY¿~}ÇÈœ9s²³³—.]*B\\Ü… ’’’A¨ªª4hP]]«oÀoí:¦û쀶³-66*ìgC"ÇV'D³Ô'üEP¦ é ÀÚž‚¦-û;Ûbc"åã†DfŽÔÄÎðA5m» ùùùóæÍ³™7oÞ¦M›Úo6ìСCí·>ó~åêÍ5ßœlªgÁOÀWHg ”Ý:2jÎäNÓYÛܶãˆîo?¦sCéŒ`æ_GžSRRŽ?ž’’Ò1R^^>zôè²²2AÞxã·ß~û£>áž{îY¼xñÂ… ]} ~®´ÆøÞŽúÊzSד Bzˆa™ªaÊ´¤û‘xYP¦ é ÀViñÝ/êjôÆ2Aè1$C5¤²WR„½%¯ó^ÊøWó¬P(ššš""":FŒFctt´^¯~¼’äÛo¿-ÂC=ô¿ÿû¿v5éú-ø?½Ñ²éÛÆgì,òiW´Z> M90]1°—21–icð LÒ€]z£eËwûO5;¹õƨåƒz+¦+û§)˜Ô _¢yÖ»ývÇŸzꩼ¼<÷^€o\(5äïo,®ríz’š˜°A½”{)¦+¢Tþuf W^^ÞÊ•+íÞ|M é   —Ë Ÿîs'¤+û§)¦+â¢h¤á¾Ogÿjž»žæÞ[tÜ&’€c„ÓE­_4](5¸ú\™L詉蟦¦è—¦ˆTÒHÃ3DQ Í3é ÀšÅ"œ¹¢ÿ긮°Äåt!).|`ºb@ºr@š"ZM:Ã3|“ÎþÕÉ 9á Õ‘g»Ë„t”qùòåeË–µÏËÉÉy饗222ºó^Ä3Ü &Ë¥2Ãùù«úÒ£Û[¼"\Ö·§bHåàÞÊñá­A+˜R†tàA­Ë…R}a©áB©¡;é¬Vʤ)®ë­¼®·’%»á¤ jž}‰‰a@Hѵ´–êÏ]5–èÝž×-BblØà>Ê!½UýÓŠpöxãA?mÛHg ¤4ëÛ.” K …¥úŠZ“Û4“â¯ë¥–©êŸ¦`²D‚Ú¶°oYÍm—Ê çJô—Ê u&÷^$üñ{IgüGžÝD<èBe½éÜUýùCa‰¾ÕàÔߊ‰£¢¦‹õva¤Œ{øÜt¡¬ÖôC±þÜUýÅ2ƒÑ¹S¤'޾óÆo†@Aóì&â€3Ú,BiµñÜUýé"ýåò®Úè%¿HÌLQø®2ø7RÆ=|nœa2[.þxA’*c5–þ")#%Âw•Á¿y/e‚ÿ {Ù8¥ @gä2¡WˆI££73ñ©y)ÿ}kܨþ*•B¼’gL¤<#™Î9Ôåååu$‹Ôµ0Ò€Cáa²A½”wÞ³,7©=‡gª"l®‚)ï“Lçê|“ÎA¾ë—}ÛÜÖfŠ* Z .¶66™A?42÷çqR×?Bʸ‡Ï €ÛŒ&Ë¥rÃé"}Á…–Ææ6AÆ ‰üå-¤3~´m7ϺÏbŠ* '/·ËTõMåÈ3~Bʸ‡Ï @÷µïã>y©uh†ª錟Ð<»‰xx)ã>7€÷pγû8« àAœóì¤3Àƒ8çÙØ· ðRÆ=|nïáÈ3’¡yÀšg yÀàožYÏàA¬¶í¤3ÀƒXmÛXÏà=¤Œ{øÜÞÃjÛH†æhžp€æÀOX¹C:~"ÈWì`IÀ%l2€KØdÜÃ縄Mp † šg yBþvbŒoêñø»tóÝ~ºKOtþÁþö­ð+þöá°Éxõ‰N>Þß¾þö¥âO÷žH:{„¿}8l2^}b ¤sŸA!“É:n?õÔS’ܾáo'Æø¦¿K7_Ðí§»ôDçìä#ýíËãþö[³Éxõ‰ÝßòòòV®\Ùñ£_}yéìøSã½'’Îáo¿5›ŒWŸ(éì__Jó·­Î7üí·æo÷žH<{„¿ýÖl2^}¢g·ûòŠÐüÜüí·æO÷žH:{„¿ýÖl2^}b ¤³})=Îzß6Ü1ê%¤3À«hž †àÍ3Ð<àÍ3Ð<àÍ3Ð<àÍ3Ð<à@ˆ6ϲI]>ÿü󜜵Z––¶pášš©+üÚgŸ}vË-·¨Tª´´´ TTTH]QÀ ç‘΀K<’Î!Ú<[,‹Å"u@`XµjÕþð‡ªªªï¿ÿ><<|þüùRWøµ^xáÑG-//ÿá‡úõë7kÖ,©+ ¤3à<Òp‰GÒYÊ)%“…ô¯¸A«ÕöìÙS§ÓI]t:]JJJSS“Ô…Òpé ¸Äítà#ÏG}øá‡ãããíÎïºråJnnnllllllnnnqq±ï+üŠG6™]»v;ÖË•~¡û›LSSÓk¯½6qâDïëGHgÀ%¤3àiÓ9€›ç¹sç&''ïÛ·Ïö.N7iÒ¤¬¬¬¢¢¢¢¢¢¬¬¬œœœææfß øîo2ÇŽ[¶lÙ›o¾é“z‰us“‘ÉdÑÑÑ/¾øâK/½ä«’ýé ¸„t\"m:ÃÌ(Ûù]/¾øâ‘#GÖ¯_ß12gΜììì¥K—výD ¸·ÉìÙ³gþüù7nÌÎÎö]­€p;eW­Zµk×®¯¿þÚGµúÒp é ¸D’tà#Ï]ÈÏÏŸ7ožõȼyó6mÚ$U=€Ÿs¸ÉlذaöìÙü1Ù N§Lllìïÿû£Gú°4¿F:.!—ø ƒ³y>uêÔÈ‘#­GFŒqúôi©êü\כ̪U«{ì±;wŽ3FŠê¿Óõ&3oÞ¼3gÎÆâââ?ýéO·Þz«%ú%Òp é ¸Äé 3£lÙ+Ц¦¦ˆˆˆŽ£Ñ­×ë;žbýø øç¹ºÉخǠÕj£££}P*à\Ýd6nÜøôÓOŸ={6%%åŽ;îøÛßþ¦Ñh|]´ —΀K$IçmžPÆ&¸„MÆ=|n€KØd—H²Éç´í„„„ÚÚZ둚ššÐÜñ8ƒMp ›Œ{øÜ—°É.ñÁ&œÍó°aà ¬GŽ?>tèP©êü› à6÷ð¹.a“\âƒM&8›çéÓ§¯[·ÎzdݺuwÝu—Tõ~ŽMp ›Œ{øÜ—°É.ñÁ&œçöØcŒŒŒŒ‹‹›@:“΀?²¡M„_ÿú×|ðACCCÇàÙ³g“’’Ú8зoßÝ»w·ßõ‹_übÙ²e—/_6 555ùùùS¦Léx©ö………)))/½ôRYYYYYÙªU«î»ï¾Ž{ínwÖƒkÖ¬Ñjµ—.]úÕ¯~õÄOtñÄöñE‹-_¾üüùó:nÏž=ýúõûðÃÛïÝ¿¿F£yÿý÷++++**Þ{d„„ƒvñë ‚°`Á‚µk×ÖÖÖž?~ܸqÏ?ÿü‚ Ö¬YSSSÓ>òòË/wñ‘Úýñƒ>¸í¶ÛD~àþú׿vöR]¾|¹G[¶lINN¾råJ,**JKK[¹råÅ‹[[[¿ýöÛ™3g:¬ Ò™tî¢f@*|êAXµj•hpîܹ/¼ðBÇŸ~úéwÜÑ~;::Ú:ÉD/Õ~cΜ9ùË_¬ïzòÉ'gkµµµýúõëú1‚ ¬X±ÂzdëÖ­7Þxcûí™3gþãÿ°¾÷ÕW_½ûî»;žkûë ‚`¾ûöí‹ŠŠ²ùæ›oFe·Û:;~4 ééé'Ožì¸«ºº:>>¾¢¢¢³—rÆk¯½&“É^ýõ®¶`Á‚åË—wv/ñ ~…t&-¤3ü_A„:A.]º$ìß¿ÿ¹sç:~¬­­MOOo¿ýàƒ^½zÕîKµßHII¹pá‚õ]………NÆsKKËÊ•+¯»î:µZÝ>=$,,¬‹'¶‹Þ®¶¶6!!¡ývŸ>}D;}‹ŠŠ222:žkûë ‚P\\ÜñcCCƒíHll¬Ýblë´þñ™gžY¸paÇÏ>ûìܹs;{'½öÚkr¹ü•W^éúa={ö´þ7!žÀ¯Î¤³…t†ÿá+ˆP'‚Á` * Ñ r¹¼ý®‹/Μ9S¥R ù¤¾¾þÃ?üÙÏ~Ö¾³Vôô¤¤¤ÒÒRëëãããëëë­ï½téRÇí7þóŸÿ=ztTT” /^tæWË;Ý–SRR*++­G*++SSS;~´ýõ{ë¦xäâŠIIIwß}÷›o¾)¦M›RSS³³³í>ÒúÃïâzè¡Ç|êÔ©=öØ¢E‹º~ë«W¯v§x€/‘ζÏ"iÑ<vLœ8qÓ¦M]< }AÈE‹mÛ¶ÍvYÈÉ“'ðÁÖ#ëׯï¸=hРýû÷[ß»fÍšŽÛ---*•ªãǵk׺Q¿µ¬¬¬üü|ë‘Í›7geeuóeÝöÈ#¼þúëF£ñÕW_]²dIw^ê_ÿúWCCã>*²eËêêêÞ}÷ÝÎ;v¬Z­V«ÕcÇŽÝ´i“óÏu~¤³»l¹yófAþüç?wö θû~úiÑ`^^^nnngO¹téÒìÙ³{ôè1jÔ¨ 68_3À—Hgg^t|LféòŒp•LvÍÑ‚ ´´´h4šÂÂÂôôtŸWgŸÃšh¤3Ð}áR ´Ô×׿ôÒKóæÍóŸl đ΀3hžøŽL&‹ŒŒ¼ýöÛY?A:N¢yà;̶Àß΀“8s¸Î3Ð<àÀÿ#×KW‰¥IEND®B`‚gsl/doc/images/siman-final-route.png0000644000175000017500000005213113536674414016006 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìÝw\÷ã?ð‹l"2d‰ÈT°`µ,ÁIQX±¸°¢•¶*« mÜAA\µ¥ŽÏlEQÀEG (.Т­[”âb‘ B~äóÈ7?F€ä}^Ï?|„»äîäxq#ïcñx< d«éÝ €0(`PÀ €@€  @ €0(`PÀ €@€  @ €0(`PÀ €$€Õ6þöíÛçàà ¡¡¡££ãååuñâÅV_«¡¡1lذ¸¸¸®„¹y󦽽½ŠŠ í‚ bëúÈ.€žPÀÀÒòË7þ÷¿ÿýÏþSTTtõêUEEEww÷V_ž““³téÒ•+WîܹSì0~~~ÕÕÕüµ=±°‰H‹Õ|³êÛ·oZZš•••` ‡Ãáp8m=ÿÒ¥K .ÌÉÉ/€¢¢bCCƒw+[&”,i/€ž° uïÞ½322ž"hßV999½~ýZ¼u±X¬ÆÆÆ=z´< Οnff¦¢¢beeÕl?;//oñâÅæææË—/¯­­mwu§Nrqqa³Ùl6ÛÅÅåÌ™3ÂIjjj–,Yb`` ü×Àƒ<<<Øl¶®®n@@@uuµð¯\¹2tèPUUU33³ßÿ½Ý¥0 @ꜜœ„»¤]ýõW¿~ýÄ[W«ÇÀ-ZTSS“ššZZZºgÏžŸþùðá¹#FŒppp(((HKK{ùòeXX˜èuedd|õÕW/^¼ÈÍÍ]¼xñ—_~yûömÁ¾ûî»áÇ?{öL#''ÇÝÝ}âĉ999<°²²Z°`àùOŸ>1cFpp0—Ë=räHDDÄåË—E, €Ùx Q-7«‡Z[[ÛÙÙ…„„ÄÅŽxñ¢­çó‹ÇØØø—_~‘TÁ—E­Y³FxÖ™3gœ[]Hii©……E« ðòòÚµk—ð”;vL›6MðªíÛ·7{Éܹsׯ_/yéÒ¥Ož<‰ŒŒ´²²b³Ùµµµjjj‚¶º.UUÕòòrÁ”ºº:MMMþÉc‹U__¯¤¤$üEEÅÊÊJUUUÁ”ššuuuþòUTTêë녟ߣGÆÆÆ¶–ÀhФt;ªªª›6m255ãµ]ü‹¹Yû ;zôhff¦±±1ÿËÿý·Ý¥p¹\áÓÕ\.×ÐÐPðe˾ÔÕÕÍÏÏ·°°LÉÏÏ<îÕ«×½{÷úôéÓêêо gp€Ôòwãòóó544HåiUMMðŽilll»/±··?uê”ð”“'OÚÛÛ‹xɸqã„§}öíÛ÷öíÛÊÊÊÔÔTá‹°:õM ?üLHX˪¸~ýú×_mjjª¨¨ÈlRø2+špIIÉœ9sttt´´´¾þú늊Šv ˜Çã?~ÜÉÉIMMMMMÍÉÉ)99¹­ÿüóÏøñãÕÕÕutt.\XUU%üÌ»wïzxxhhh¨©©¹¹¹¥¦¦¶›€¡p8 @ €0(`PÀ €@€  @ €0(`PÀ €@€ €.œ‘‘±`Ássseee###ww÷¤¤$ÁÜÆÆÆ]»v988hiiijjÚÛÛïÚµ«±±‘``€®`ñx<Ò(Š¢†êëëëîînnn^YYù×_…„„L™2%,,Œ¢¨%K–ܾ}{Ë–-vvv<ïîÝ»?þø£‹‹ËŽ;H] ¸¥œœGGDz²2Š¢zõêuïÞ=333ÁÜ/^ <øýû÷Äòt]A·¤¤¤¤  À¬ªªÚò jjj²M 1t,àòòòôôôY³fð§|÷Ýw_|ñÅÕ«W+*****ÒÓÓ½½½—,YB6'€ØèušÅb 7îìÙ³ü`7mÚ´'NæzyyýñÇÂÏ`ý%$$………ñ§lÞ¼ÙÄÄäøñ㥥¥¥¥¥Ç711Ù¶m[»‹RTT$ý f“RÙÑkXXZZš¯¯ï«W¯(Š277ýôÓOs/_¾üÍ7ßüûï¿¢ÂbÑ÷ ¶…q™˜b`fƦ˜™q)ff\`Jš™éû½¨¨¨ÐÓÓ«­­¥(JYY¹´´´gÏž‚¹•••½{÷®««½ügËãS Ì̸À33.0ÅÀÌŒ LI33/Ââ»qãÆÀùMLL²²²„çÞºu«_¿~$rH] x„ ÉÉÉ\.·¡¡!///66vþüù‘‘‘ü¹K—.õõõ=uêÔ»wïÊÊÊNœ8áëëL63€Øèr4 --mçÎW®\)//×ÓÓ>|ø²eËœO8zôèöíÛŸ|˜••õèÑ£Giii988ØÚÚÚØØØÚÚ4è?þÀ)dèœ XŽÅÇǯ^½úåË—†††[·n3gN«OkhhÈÎÎ~øðáýû÷ùÿæåå555ÕÕÕ ? § U(`1¡€åÞ'Ÿ|²oß¾O>ù¤ã/©®®ÖÖÖ®¯¯ž¨¢¢ÒÖÁjèÎp@ë*++{öìÙ©—¨««›˜˜4›hll,¹PíC³UUU±Ùìξ*,,LøUl6{Æ ÍÐ00›xìããmff¦   ¥¥Í¿€ @fäü)ÎË=EEÅÚÚZEEEñ^YQQ±qãFɦ¹sÀ­àW¯ØíKQT=ššš$  ƒPÀÀ`âÖ£G#"PÀÀ`]/`‹…=`  &‘=`0Cs¡€ÁPÀÀ\t)àŒŒŒ ðïNcddäîîž””$˜Ëj²²2ÁÀ@¸ ˜‹.hggwîܹÊÊÊ,_¾<<<|ݺuü¹¼~þùç™3g’Í Äá",`.ñ?@)Y·nÝ<ÖÑÑ?~¼¥¥¥££cXXXË'755íØ±ãСC2 t„CÐÀ\tÙnIIIIAA¡ÕY§OŸ600prr’q$ 00 ¸¼¼<==}Ö¬Y­>á—_~ ’q* !œæ¢Ë!h>‹%x}Âp˜‹.‡ ÝÜÜÜÜÜD?'##C6a€)PÀÀ\tÙÎs¡€Áp˜  †CÐÀ\(``000 ˜ª¡¡Çã)++we!(`  LÕõÝ_ a9(``*‰0.ÂRPÀÀT’ÚF(``*00 ˜ 瀀ÑPÀÀT8 Œ†¦Â!h`400   L…FCSá",`400.ÂFCSUWWã40 ˜ 瀀ÑPÀÀT(``400•¤Îã",  L…=``400   L…FCSa `400âFCSá40 ˜  Œ†Fjjjª¯¯WUUíârPÀ@ ©ººZMMÅbuq9¸ HA#Iäø3…‹°€00’¤ ‡ €00 ˜ Œ$ÁÆ9`  Œ„sÀÀt(``$‚¦C#¡€€éPÀÀH(``:00.¦C#á",`:00AÓ¡€‘PÀÀt(``$œ¦C#á00  ‡ €éPÀÀH(``:00 ˜ Œ„‹°€éPÀÀH¸ ˜Ž.œ‘‘±`Ássseee###ww÷¤¤$á'455íØ±ÃÖÖVUUuРA‡&è{ÀÀtt)àÀÀ@;;»sçÎUVV>xð`ùòåáááëÖ­>>Ÿþùµk׈†bPÀ èUÀ<Çã%$$<|ø0""‚?½©©iÛ¶m_ýµžžžžžÞ7ß|³eË–5kÖtd™¬Öª˜H⌠€Ãá´ÚÒ[#}¯QJKKóõõ}õêEQ}úô¹ÿ¾®®®`nqq±™™YUU•è…à",¹tûöíï¾ûîÖ­[Yš††FAAAÏž=%²43Ýñ",GGG.—ËlkkK6 Ð A€ o߸qcàÀüÇS§NýóÏ?…çž>}ÚÉɉD. O. 8>>ž?¹¹y||<é8 uФüÏ„ -Z4lØ0mmm.—{áÂ…5kÖìÙ³‡?wþüùcÇŽ¥(jÒ¤IE>}zÙ²eG%™È‘¿NLLô÷÷çŸRyñâ…¿¿?‹Åòññ!› ¤Š.{À¡¡¡qqq666êêêNNNgΜIJJòððàÏUUU=vìØ… ¬¬¬Œcbb>ìææF63"٦ÅkÖ¬¾ ¡ªªJx8KtÙvss]¨}úô9xð ÌòUUU©««Kji ’ZšxÞ¼yÓlÊëׯ‰$™¡Ë0@ÇÉßÇúõë×lб±1‘$ 3(``žªª* ~jˆw$ þ“‚Åb™ššVVVŒÒ†æ‘¿=`Ÿèèh555EEE33³˜˜˜þýû2äÊ•+dƒ€ô €y$~ñ=`Š¢fÏž­¬¬\PP››»`Á‚èèè;vÌ;×ßß¿ººšt:<00ü} ‰¢¨Çëëë ÷6iÒ¤{÷îUWW;99ݾ}3t¹  ãä²€322\\\šMÔÖÖ>pàÀÑ£GÇ_UUÕÐÐ@áƒÂò{ÀÀ<ÕÕÕüM 833sèС­Îš9s¦––¿}ùðAa9€æ‘Ë=àÌÌÌ–{ÀͦàƒÂL‡橬¬”ìLj_]QQñï¿ÿ2¤­'àƒÂò Ì#{À·nݲ³³SRRjë æææÂ_²Ùì 6H?H ˜Gþ ¸Õ+°–,Y’’’"|Ôb@JPÀÀ éééçÎÛºu«™™™’’’™™Ytt´DnÉGðtW.n•––Ö… Þ¾};}úôÚÚZ .$ ››ûÅ_$$$|ÿý÷¹¹¹õõõ¹¹¹’™Ô!èÆÆÆ;wî899Iv±êêêÉÉÉ***“&Mª¨¨ìÂ@‚:TÀ—.]úì³ÏŒøS>ûì³´´4iøŸ÷ïß{zz®]»ÖÍÍMË'uúÞ½{&&&ZZZ_²²²rbb¢¥¥¥»»{II‰Ä—Ñ~ïÙ³gÁ‚~~~÷ïßüž ŽŒŒ”r6ª±±ÑÇÇÇÝÝýÛo¿•Ò*H°Ä? SPPˆ‰‰5j”««k~~¾”Ö]ÑþÇÂÃÃ=Úìná...ׯ_—Z*€ÿùá‡êëë·mÛ&½U*àÌÌL©ãÌb±¶mÛ¦§§7jÔ¨”” é­ ÄÐ~8°Ùĺº:þÍѤgß¾}çλyó¦TØX,‘‹°233¿ÿþ{i¯%$$¤gÏžcÆŒ9þ¼µµµ´W×þ!è!C†œ={¶ÙÄS§N5J:‘(Š¢®]»¶bÅŠ“'OjkkKuEDö€ß½{—ŸŸokk+ƒu}÷Ýwááá¸}!Ý´¿c±eËooï¼¼<þˆµÉÉÉ6lhÙÊ’òâÅ‹™3gîÝ»×ÊÊJÚë"RÀŽŽŽ‚«¥mîÜ¹ššš¸}!­´¿üé§Ÿ^½zõï¿ÿöððPVVÂÝÇ«W¯f̘±wïÞAƒÉxÕ²/`ÉÞI<}úô¹råJZZn_@Jûœ””4kÖ¬fgÏž-˳t ßjjj¦OŸ¾lٲɓ'Ë~í²ˆƒLQ”ŽŽÎ… þùçܾ€ˆö ¸­›šÕÔÔH: tG<﫯¾²µµ &@Æ{ÀÕÕÕÙÙÙŸ|ò‰ÌÖ(‚¦¦æùóçqûB"Ú/à‘#G9r¤ÙÄÇ=Z:‘ {Y³fM^^^tt´ìWonn~ðàÁ~ø!>>^6+½}ûöàÁƒUTTd³ºvño_¨ªªŠÛÈXûCÚºuëøñãËËË}||øaÅÇÇïÚµ+55Uù@¾=z4>>>33Sö…”˜˜èïï_UUEQÔÛ·oýýýY,–´×Kü ¬–”••ÆŽ{öìÙÞ½{“NÐ=ð:àÙ³gsçÎ500PPP000˜;wîóçÏ;òBâ:øˆ¬¬,}}ýþù‡ÈÚ---›m ýû÷—êHðPøÍ›7çÏŸoff¦¤¤Ô§OŸ±cÇ;vLø â%ïìàp8ÕÕÕ¤ƒü郎’’’™™™´OÊöï߿ٰ¥¥¥TרE'Ož444¼zõ*é „I¯GÄ\nhhhxx¸s899íܹóÉ“'uuu%%%çÏŸÿä“OÖ®]+x‚xß0Ý$%%¿yó†tY‹g³Ù‚öe³Ù ¤Cµ#--ÍÀÀàìÙ³¤ƒD»~ö왩©©D“4÷üùs---Á—(`9p÷î]]]Ý[·n‘B†,w¸%åÖ­[}úô9|ø0é ÄH¯GÄ<´]UU¥££Óì"RÉzõꕽ½ýÛ·où_Šwç€é£°°ÐÙÙyË–--G6:{ôèÑĉ׬Y³páBÒY^´?V«þúë/333‰&ù?åååééé³fÍjvÇrCCCþâ9sæ|ø0â t Ç =}úô… úöíK:@G‘¼KCC£°°Íf«©©•””¨««Sõþý{33³ÒÒRid’ °dUTT >< `Ñ¢E¤³#áö…À8$/š7oÞ‘#G(Š255}úô)bUU>WÐÝ455Í™3ÇÕÕí b Y¾|¹««ëýû÷Ig ¬ýbÏËË1bÄ‹/ÂÂÂnÞ¼ùÛo¿©ªª.Y²DII)..N6)ņ=` úñÇoß¾’’¢¬¬L: 0[bbâÒ¥KOž<‰Ûý‘ÜîÛ·ï‹/(Š 8p ³³³•••‚‚BTT”4=ÅÅÅ?~<)) í ]7{öìßÿÝÓÓ355•tbä|{ÀqãÆ //¯´´4[[[ÒY@~\¹reæÌ™¸}!ÐnGļ|ùrÆŒ±±±h_,WW×?ÿüÓÓÓ³¼¼Ü××—tYk³€;2Îv.å^eeå”)SBBB>ûì3ÒY@9::^ºtiâĉuuu~~~¤ãÈ”œ¡Å!è®àñx_|ñ…ººzll,é, Ï^¼x1~üø ,_¾œt€æpXµjU~~>.“i333KOO?~|ii)n_Ý>Ë ­;zôè¡C‡’’’TTTHgùghhxåÊ•+W®455‘Ž r~„‡ Å“••5iÒ¤ÔÔÔ?þ˜tèFø·/ÔÓÓÛ¿?n_4AòsÀÐÝäççO:uÏž=h_1þí kkkqûBèPÀðÿ©©©ñòòZ²dÉ”)SHgîHpûBß~ûÍÜÜ\YYÙÜÜ<>>žt4 “ó#´8Ý)<ÏÇLJƒŒ‚|ãñx“&Mºpá‚à|0›Íމ‰ñññ! º!’wCb4p§p8œ”””K—.áÂ+ ®ÿþ999ͦ<{öŒTè¶ð1$º£GîÛ·/33í tðæÍ›fS^¿~M$ €”à0PEݽ{wÑ¢EÇŽ300 €¢(ª_¿~ͦ¨©©½{÷ŽHi@UXXèååµk×.GGGÒYþ',,ŒÍf ¾TWW····¶¶æp8åååƒH ¸»«­­:uªŸŸŸ··7é,ÿÇÇÇ'::ÚÌÌLIIÉÌÌ,&&æâÅ‹™™™ÖÖÖ›7o®®®& Käü%\„%ÇûòË/ëêêŽ9Ò‘ÛoÐÁãÇ###/\¸¨¦¦F:È3 ÄR±qãÆÇïß¿í òÑGÅÅÅ]¼x1++ËÚÚ:**ª¶¶–t(€NCw_'NœøÏþ“œœ¬®®N: @§ÙÚÚ9räôéÓׯ_·¶¶Ž‰‰ùðáéP çGhqº-=3fÌÉ“'‡J: @WeddDDD` ƒCÐ Ioß¾2eÊÏ?ÿŒöùàâârêÔ©øøøÃ‡üñÇqqq¤C´CÎw±ÜRCCøqã\]]ÃÂÂHg¼k×®­^½º¸¸˜Ãá̘1×7@a(J1¡€[òóó+))9zôh8þr+55uåÊ•µµµkÖ¬A CW €Å„nfëÖ­ ×®]â@^¥¦¦†„„())­ZµÊÓÓ“t`$°˜PÀÂΟ??þü›7o¶ä@^ñx¼Ó§O¯]»VMMmýúõîîî¤à€Å„xüø±››Û‰'\\\Hgµ¦¦¦¤¤¤5kÖèêênذÁÍÍt"` °˜PÀ|¥¥¥ÎÎΡ¡¡óçÏ'€~ ¯\¹ÒÌÌ,""Ÿ€Ž@‹ LQTCCÄ œ###Ig ¯¡¡!111,,ÌÂÂ"22÷ ÑPÀbBSðòåËS§N)((Î@õõõûöíÛ°aÃ'Ÿ|²~ýz;;;Ò‰€¦0ˆ)***===11í LYYÙÏÏ/''ÇÓÓsòäÉÞÞÞOž}:wîÜC‡YZZ’Î@kl6;(((;;ÛÁÁaäÈ‘óæÍËÉÉ! ä}O‘æää8::–•• Oܾ}ûßÿ×ÁƒòÝöpYY™‹‹Ë?üàççG: “TTTìÞ½û§Ÿ~š:uêš5kŒI'ºã9`%%¥f§-ÿþûï={öìÚµ‹T$¦hllœ3gÎäɓѾ¥¡¡òøñã>}úØÙÙùûûççç“ò‰Ž\^^žžž>kÖ¬€€ÁÄšššyóæÅÆÆjhhÌÆAAAMMM[¶l!€©z÷îÍáp?~¬­­=xðà   ÂÂBÒ¡@ÞЫ€Y,‹ÅÒÒÒruuÕÐÐàp8‚YßÿýÌ™31ŠS»öîÝ{ñâÅC‡á²g€.ÒÕÕÝ´iÓ£GÔÔÔ ZZZJ:Èz0ÇãñxEEE >ŒˆˆàOONN~øðáÊ•+ÉÆ£¿«W¯®ZµêäÉ“ZZZ¤³È }}ýM›6ݽ{·¦¦ÆÊÊ*44ôÝ»w¤C< WóéëëÏž=ûàÁƒ¿ýöÊ?üpàÀñvéX­Þ·–¹¹¹³fÍŠ0`é,ò¦_¿~QQQYYYeeeÖÖÖ§¼¼œt($‡Ój_Hoô½H¸¢¢BOO¯¶¶–¢(ßÑù»ÏUÐÇ_´h‘ð‰s†/^DFF&''/Y²D]]t"¢îxô7ÈÌkA0‘hFºhjjòññùôÓOѾ2`ff––öðáC ‹Í›7×ÔÔÌC—ž0aBrr2—ËmhhÈËË‹?>nÐA?þøcmmíÏ?ÿL:@7òÑGÅÅÅ]¼x1++ËÚÚ:**ŠÄ ƒèRÀ¡¡¡qqq666êêêNNNgΜIJJòðð ‹öïߟœœœ˜˜¨¨¨H: @·ckk{äÈ‘3gÎ\¿~ÝÚÚ:&&æÃ‡¤C3Èù)R¹?|ýúõ©S§¦¥¥ÙÚÚ’ÎÐÝeddDDD‘Ït(`1ÉqWVVŽ1bþüù¤³@s×®][½zuqq1‡Ã™1cnàÆ\(`1Ék755M›6MGGgïÞ½¤³@›RSSW®\YSS³víZÔ0C¡€Å$¯zýúõ‹/*++“ÎíHMM QTT\½zµ§§'é8Ð9(`1Ée8p`ݺu™™™zzz¤³@‡ðx¼Ó§O¯]»VMMmýúõîîî¤AG¡€Å$œ••5iÒ¤ÔÔÔ?þ˜t蜦¦¦¤¤¤5kÖèêênذÁÍÍt"h XLrVÀùùù...»víÂQ,æâ×ðªU«LMM#""†J:ˆ‚“<pMM«««··÷?þH: tUCCCbbbXX˜……Edd¤££#éDÐ:°˜ä¦€y<ÞìÙ³UTTöïßO: HL}}ý¾}û6lØðÉ'Ÿ¬_¿ÞÎÎŽt"h®;ÞŒ„­[·îõë×111¤ƒ€$)++ûùùåääxzzNž<ÙÛÛûÉ“'¤CŒ € ))éÀüñ‡ŠŠ é, yüÎÎÎ1bĘ1c¼½½³³³I‡©CÓÝÝ»w-ZtâÄ ÒY@ŠØlvPPPvv¶ƒƒÃÈ‘#çÍ›—““C:H ˜Ö >ÿüó;v 2„t…ž={†„„äääØÚÚ6lÞ¼y¹¹¹¤CT €é«¶¶vêÔ©ß~û­··7é, S!!!Ož<±°°:t¨¿¿~~>éP a(`šâñxóçÏ711Y±bé,@†ŽŽ‡Ãyüø±¶¶¶­­­¿¿aa!éP 1(`š úôé¾}û0z;@7§««»iÓ¦ììlmmíAƒq¹\Ò¡@PÀttüøñèèèääduuuÒY€ôôô6mÚt÷î]Š¢lllBCCß½{G:t ˜vþþûo??¿?þø£oß¾¤³½ôë×/***++«¬¬ÌÂÂ"44´¼¼œt( ˜¼øøxssseeessóÝ»wó/{Æð°ÐSSÓèèè;w•Y[[s8œŠŠ Ò¡ Óäd¤Æ¶Ð(ÊÄÄÄ… VUUñ¿TPPøüóÏ“’’Ȧ¦xüøqddä… ‚ƒƒÕÔÔH'’7ŠRn­Y³FоE566Þ»w``–>ú(..îâÅ‹YYYæææ›7o®­­% :LØ›7ošMyýú5‘$À\¶¶¶GŽ9}útzzúG}ôûï¿øðt(h ˜°~ýú5›Âf³‹‹‹‰„Fsttúè£466’mBÆf³_ª««;99Y[[Ï›77E1 6,%%eÿþýû÷ï0`@LL j˜žPÀ„ùøøDGG›™™)))™™™ÅÄÄœ;wîéÓ§£Göôô¼yó&éŒÀ<ÇOMM‹‹KHH°Âb±<==³²²‚ƒƒ—-[6räÈ´´4Ò¡º/0Ã|üñÇÑÑÑ÷ïß×ÖÖvttœ7oÞƒH‡&éÑ£ÇÌ™3=zäïï?räÈôôtÒ¡º#ù9BÛ*y:ÝREEÅÞ½{·mÛfjj‚£IÐY ‰‰‰aaa‘‘‘ŽŽŽ¤Ñ΋I¾ ˜¯¾¾þСC[¶lQRR öññQTT$ ˜¤¾¾~ß¾}ëׯÿ裶lÙbggG: €ÅÔ ˜Çã]¼x1**êáÇAAA ,ß ]‚¶³³‹ˆˆ|¸··wNNéPò ,Ÿ,,,¢¢¢0¤%ˆ§gÏž!!!¹¹¹Æ ›7o^nn.éPò,Ïôôô8ÎëׯgΜùÕW_ñ?IÜMNŠ@×ihh„„„ KOO RUU%H0%Ȇ´±ÙÚÚ9r$%%%++‹ÿ‰Çºº:Ò¡è  ­ãiyýúuÁ–OŸ>% àã?>räÈáÇSSSóáÃÒ¡è ¢i9jÔ( i äâârêÔ©øøø#GŽXYYÅÄÄ466’E/r~Šç€%¨®®îðáÃzzz!!!“'Of±X¤C\»vmÍš5\.7$$dîܹ=z0ißOþÏgdd,X°ÀÜÜ\YYÙÈÈÈÝÝ=))©ƒsA6„‡´ŒˆˆÀ–ÐA#GŽLKK‹ŠŠÚ¹sç!CŽ=Š]#Š¢(=899íܹóÉ“'uuu%%%çÏŸÿä“OÖ®]Û‘¹"Ðç ÊŸ«W¯Nž<ÙÐÐpݺu¥¥¥¤ã3¤¤¤888 2äÈ‘#¤³tˆôz„¾GhsrrÛ¬Xô\‚–¶û÷ïïܹó?þðññùñÇûõëG:ÐÇ;}úôÚµkÕÔÔV¬XáééI:‘(òº%%%%ñæ‚Ì`HKè,‹åé陕•¼lÙ2þjÒ¡ c———§§§Ïš5+  ³s i Õ£G™3g>zô(((ÈßßäÈ‘ééé¤CɽŽÐ _U;nܸ³gÏ ïæŠžÛÖiõ» i ÕÐИ˜faaéèèH:Ñÿé.‡ ùç¥‹ŠŠ>|Ññ¹maµ†ÃáHå E)++Ï›7ïþýûaaa°²²ŠŠŠª®®& èKII‰ÿ!‹™3gzyy7ŽÇCYâp8­ö…ôÖHßÄ´´4__ßW¯^‰1W{ÀÄݹsç—_~IIIñõõ êÓ§éD@kõõõûöí[¿~½]xxø!CÈæé.{À¹\®xs>0¤%tв²²ŸŸ_vv¶»»»‡‡‡··wvv6éPRAß¾qãÆÀÅ› tÓrHËŒŒ Ò¡€¾ÔÕÕƒ‚‚²³³†îíí““C:”„Ñ¥€'L˜œœÌåròòòbccçÏŸÙ‘¹Àzzz'77×ÓÓÓ××—±4Î@[zöì’››ëàà0lذyóæåææ’%9Rࣳ.]º4mÚ´Þ½{+**öéÓgúôéœ+}Þ 4ÓØØxòäIggçüòË/555¤­•””¬[·NWW×ÏÏ///Ofë•^Èù5J¸‹þ®]»¶yóæ¿þúËßß?((H[[›t" ¯·oßnÛ¶-::ÚÛÛ;,,ÌÐÐPÚkìŽaA7Á?}þüùÿý·ÿþAAA¯_¿& hJWWwÓ¦MÙÙÙÚÚÚƒ bî¹(` …ÁƒÇÅÅ=|øP[[ÛÁÁCZ€zzz›6mâVØÆÆ&44ôÝ»w¤Cu hCZ@Çõë×/**êÎ;eee¡¡¡ååå¤Cu h§W¯^AAA999~~~¡¡¡üOøðt. #“èèh~ [[[s8œŠŠŠøøxþ-äÍÍÍãããIglœ_£„‹°˜ŽÇã>}ú×_ÍÉÉ Z¸p¡ºº:éP@S?ŽŒŒÚÚÚÍÛÚÚ>þ\x™–––ͦt XL(`9VUUÿÓO?ééé…„„Lž,ÐY(`1¡€CZ#ð¯cjël[ý*x`hhØ£Fø—0°˜PÀÐLVVVTTTJJŠ¿¿ÿâÅ‹1¤%È¿_Û:Ëår{õêÕÖ‘aô+)(`1¡€¡U999¿þúë&Ož¼jÕ*kkkÒ‰@t°_Û:k``   @úM@s(`1¡€A i Ò¬_›mqq±††F[£_™ ,&0´‹?¤å¶mÛôõõ1¤ew&‚¸ÕS°¯^½ݯúúú¸¾O.¡€Å„†âi^SS³xñâyóæaHK9Órˆá/_¿~­   âÃ9&&&è×î ,&0tHˬ¬,??¿¥K—Êß°>òªãýÚê)Ø~ýú)))‘~@G(`1¡€A<Ò’nĸEú$,&0tEAAAtt4†´”®Ü¢Ž XeeeÒoä XL(`è: iÙu4¹E€PÀbBƒ¤†´TUU –ÂD÷k^^^]]ˆñûõë׫W/Òo u(`1¡€A²øKÿúë¯ÿþûo```7ÒRô-êäò°(`1¡€AJäiHË.Þ¢N.o € ¤JxHËÕ«W[YY‘NÔŠf·¨k«_q‹:€V¡€Å„àŽã4ÕöIDATr¹»wï&5¤e×o‹[Ôˆ€ d¦²²2!!¡Ù–ñññ«W¯ÎËËëÛ·oxxøœ9sÄX²x·¨C¿H XL(`1á!-«ªªø³ØlvLLŒO³—ˆ¾…NQQ‘¦¦&nQ@ XL(` %%%ÅËË«ººZxbïÞ½çÍ›Çår ŠŠŠ¸\î»wïôôô ø£ùêéééëëôîÝ›Ô[ ,60¤ªªZWW'?7==}×®]—.]ª¯¯ÿè£BCC½¼¼:²X&Ž„Å¸ÌŒ L103ãS Ì̸À33.0ÕF ´³³;wî\ee僖/_¾nÝ:þ\WW×âââ'NìØ±ƒÃáüöÛodt}ÿÉÉÉqtt,++£(jÙ²e[¶la±XüY÷îÝ›6mZGn놿¶d€q)ff\`Š™˜b`fƦºçý€_½zeooÿöíÛ–³ª««µµµ›Ýê¼UøÏ–Ʀ˜™q)ff\`Š™˜ê‡ …•——§§§Ïš5+  Õ'œ={vРA2N AôúcDp™¢¨qãÆ={VAA¡ÙsJKK‡¾gÏžQ£Fud´zƒÁ¸ÌŒ L103ãS Ì̸À33.0%ÕÌ<ú)**JHH022 k6«°°pôèÑ—.]êࢤò-€îDÒ-÷?ôýc$--Í××÷Õ«W‚)yyyŸ}öÙO?ý4vìX‚ÁºŽ¾\QQ¡§§W[[Ëÿ2??âĉ¿üò˘1cÈè::^„ÅwãÆòs¹Ü‰'nÚ´ í ò.Zm}¢3“ÚúÄLjÓkæâÅ‹_|ñÅÂ… _½zõôéS77·©S§ÖÕÕñçÜÜÄ LIv[“Ò]–dOô{1÷§Ÿ~úòË/Û]‚4t6ó?þØÔÔ$øòŸþ±´´”J²¶u6óöíÛçÌ™#v옽½½Dµ¯³™õõõ …§J>™„"q8ggçôôô÷ïß¿ÿþÊ•+NNN6lQ\×ù̦¦¦ÇŽ=z´ššZÏž=ÇŽ{íÚ5eåñxbý¿ÓpëëÔϪ췾Î&¾éñµÚg´ÚÜšX²ÛZ·.ào¿ývýúõ\‚4t¥€KJJ¬­­ÓÓÓ%ªͬ¤¤T__/<¥¾¾^–»ÔÔÔäåå%|šÆËËKøØ£ t6³ŠŠJïÞ½÷îÝËår¹\îï¿ÿÞ»wï«W¯Ê(®Xÿï4Üú:þ³Jdëël`â›ߨQ£öïß/†ðÅ‹uuu÷ïß_\\\\\Û»woUUUþ\:ln ,ÙmI,úڱ΃¥¥å‹/:¾ñH63ß›7o† ’šš*™ˆ­­W‚™ep¬³EG233KKKž›––fnn.ÁÀÉf¶µµ•l¼–$˜ž[_»?«ÒÞú$þS!íM¯¥Vß‚««ë¥K—*++«««¯]»¦©©9lØ0þ,Ùln ,ÙmI,Y-ÿL$­M\.wâĉ›6m3f é,5yò丸8á)qqqS¦L!•‡j/’‰‰IVV–ðÜ[·nõë×OvùZ#:óÔ©SÿüóOá¹§OŸvrr’]¾D¦çÖ':3 ·>Ñi¸éñíÞ½{áÂ…üÇôÜÜš,ám­å–ÀP¢ßKGÞ©ì¿Ílgg—˜˜(ÍDíëlæ÷ïß›››GDDðÏñ„‡‡[ZZVVVJ3c—"íØ±ÃÔÔôäÉ“eeeü“RÆÆÆ;wî”Y`12×ÔÔ >¼ÙY+Yž¤ìúÿ;¶>Ñ™‰o} L|Óøì³ÏîܹS__Ÿ““ãçç÷í·ß fÑaskID`ÉnkŒ/`ÑUtêo™ý ;s«³ÊÊÊ蜙Çãåææzyyihhhhhxyy5;ùG$°èHGŽqqqÑÒÒÒÒÒrvv>|ø° w1s~~þœ9s´µµUTT† &½K$¸å¢¤Ÿ÷+/s«/”ÁÖוo2‘M¯¥C‡ÙØØ(++8ð—_~illžKjsAt` nk,¸È«î{€ 0(`PÀ €@€  @ €0(`PÀ €@€  @ ä‹ÅbÖ*Ä[ÚëׯÕÔÔ¾þúk &éž¾úê+55µ7oÞrŽÅãñHg.Kê?ç‚UHd]â-ä›o¾ÉÌ̼}û¶ººzt+-¿ÛÕÕÕŽŽŽ#FŒØ³g©TР€AþÉ €%».1R\\lll|êÔ©ñãÇwqíÝM«ßí³gÏN:5??_GG‡H*èpº—S§N¹¸¸°Ùl6›íââræÌÁ,‹ÕØØnff¦¢¢beeµsçNá×þóÏ?ãÇg³Ùºººß~ûmuuµàX1ÿà_>áYÍO|ðà‡‡±ÕÕÕÂϼråÊСCUUUÍÌÌ~ÿý÷¶ÞWBBÂСC;Õ¾,«ººÚÏÏOGGGWW7$$„ÇãÕÔÔôîÝ[KKkÉ’%>|èH’¼¼¼Å‹khh˜››/_¾¼¶¶V° ßÒŠŠŠåË—0@]]]SSsܸq§OŸnòŸþ±¶¶žRRRbbbÒÐÐ <ÑÚÚúÁƒ"B¶µ®VÿË(Šòðð°³³KLLìø÷ ÓxòNðs~óæMøøx.—[TTtàÀmmí[·n žæçç·råÊgÏžUVV^¾|ÙÂÂâСCü¹OŸ>Õ××ß¹sgaaaaaáŽ;|||Knù åÚ[øüùsƒ_~ù¥     `ûöí³gÏÌ}ò䉮®nBBByyyff¦¹¹yZZZ«ïñóÏ?ßµkWg¿-_}õUllliié³gÏ\\\¶nÝúÕW_íÝ»·¤¤„?%**ª#ILMM÷îÝ[QQ‘››ëííÚ‘oéÔ©Sƒƒƒ_¼xQ___RRÂß}o™ÓÁÁáòåË‚/ýõמ={&%% ¦¤¥¥ 6LtHëjë×௿þ:mÚ´N}K:åÿµs¾!M}a¿:r»¦áVp™’JþIX–f‰†Ø«A½Ú5ÐĽQƒ(eæ‹@E¬‘ÐÿP)ù/ SðÑ›KÁ?èL™lÚœóuž^ÜçwØîîæäÇÈßóyuîóœsŸï9wÜgçžs/$`àøƒï°Z­Ö+KF|“¥(ª¦¦†ô~üøñòåË|Y§Ó=}ú”ôÖ××==yò„tÕÖÖbïÝ»w›šš°«¯¯ïÖ­[‚}LLLœtùƒ¢(œ_B'Ož$-ãããYYY‡U²±±qîÜ9BdHcbbG@­­­,ËâCµZÝÙÙYXXˆ-:®½½]\¤H, xff&999 <HÀÀñßa———I×ÒÒRRR®f2™HïÆÆ†\.çË Ã˜ÍfÒk2™Žž€†ñ º¸¸ˆ½)))óó󤞄„Á>Ò4½µµ%èòEQ‹:_Ë©S§*á8®®®îüùó4MóÏÕ$ !2¤999eee+++â:777år¹ÝnGMOO_¼x!”••Å_J»ÝÎ0ÌÎÎŽ¸H‘Xþ°ÃሎŽ×G0püÁwX©Têv»I—Ûí–J¥¸šÇãñ×V"‘pGºøÅZ¯jÁ$`Çäi£¢¢¼ÖŒ"##û蛀®4QuppÐPIUUUAAÁ÷ïß···BÇ‘£!2¤f³Y«ÕÊd²ŒŒŒâââ¾¾>¯è–e[ZZB÷ïßollD544 „PKKKEEE@‘"± á0pü™///“3`‘¶!Ï€ãââ677I 9ÇŸŸ9sfuu5PÿB()))„GÐÁ[D”ÄÇÇ“óæ™™‘Ñð5ºÝî©©©—/_j4š{÷î †V©T{{{J¥òׯ_¡•••äädÇsáÂ…ééé€"EbÁ#h \À.hà„Z­þðáiP«ÕÁ´ÍËË{÷îiÜ"+“ÉvwwIKzzúׯ_IK[[.ß¼y³««‹ô¾~ý—sssûûûƒ‘—=22LÍÐQÂqœL&Çííí‡:³T*½té’^¯|ûö­`7npWSS£R©âãã)ŠJHHHII1 111™™™EŠÄò½d<_¾|ÉÎÎ>T_àp„ûüçàßùÄÄ„\.çwA¯¯¯¿yóF¡P|ûöÍ«š`Û¹¹9†aZ[[­V«Õj}ñâ˲”ÏTO¥Rõööîïïã3tww§¦¦ŽŽŽº\®ÅÅÅGéõz\aaa˜çÏŸó›«Ÿ={Fn®þùó§R©ìèè°ÙlÛÛÛCCCþ¶>Æëׯ‡6,ÁXD”èt:–e×ÖÖ¬Vkccã;w|‡Eðœ×®]{õê•ÅbÙÛÛ[[[{üø1¹µÊ‹úúúˆˆˆÎÎNléè興ˆhkkÑ"±|/ÏÕ«WF£?=pt Ç2 ôööj4š¦išÖh4ýýý‚Õ“““ùùù4M+ ½^¿¾¾N®ó…ÁÁÁ´´4‰DB64iii'Nœ8{öl]]ÿr-öò¯GGG+в²2—Ëå´°°066–¦éÜÜÜ¡¡!Á>Úl¶¨¨(ހÌş»Ýβ¬B¡ˆ‹‹+))q:A&à‘‘‘Û·oŸ>}Z&“¥¦¦>|øð÷ïßþÔZ,–ØØX§Ó‰-N§S©Tº\.²š?‘"±/Ù§OŸ¤R©Ífó§Ž| BäóçÏ<˜šš ·(--å?E‰w#¡±³³£Ñh®\¹"òå8:° Á¢ÕjÇÆÆ¶¶¶l6[OOOiiiuuu¸Eý‹Á`0™Låååáò×S^^n6› C¸…ǘ@°¼ÿ¾¹¹ùÇüæÛÊÊÊ¢¢¢p‹ào0„x a0„HÀþH¸?E?’áIEND®B`‚gsl/doc/images/rand-lognormal.png0000644000175000017500000005027013536674414015372 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìÝy\Ìùãð™îÝ%E%Ò©R(!¹B6ÂRäf­3–]¬•u´»¬+Ç"W‡{]!Ö‘¨¨$eº‹Ò}×üþ˜ï¯o_;M×Ìç=ÇëùÇ>øÌÌçóê£×¼?Ÿ÷ç3t‹EjI ŽPÀ €@€  @ €0(`PÀ €@€  @ €0(`PÀ €@€  ÀN'R­ý¼ôÿ'++«¥¥5lذ-[¶dgg·çµ]‰ÁÛý/nÿš ,PÀÀ ‹Åb±XUUUÉÉÉ;vì(//·±±¹xñb‡VBe¢nAXÐY,é ‡N¯ÿ5Zûy9.ýúõ¨Q£=zdnnÞÅõóêù¼z-•0è°°°°Aƒ1 ƒ1hР›7o¶|4>>~ôèÑ CCCã»ï¾«ªªjydµ±±qÛ¶m½{÷–••5119pà@;×L§Ó«««—/_®¥¥Õr…UUU‹-RSSÓÐÐøñÇY,Vuuõ’%KÔÕÕUTT–/_ÞÐÐм’œœœeË–)**¬[·®¦¦¦?~ÿþý}}}wïÞÝœý‡òòòuëÖ+(((++5êÆÍOh>šÍýÇiÞJUUÕâÅ‹544 †››[RRRË]ñïTÍ[ḭvîaîÿ:<Æ€áò¿FTT”ššZhhhaaaAAApp°ªªê‹/ئ¤¤tïÞýÀùùùùùù^^^Ík£Ñh‹-Ú°aCZZZEEÅ£Gúôésîܹö¬™F£Í;÷Ì™3¥¥¥-sΙ3çäÉ“ÅÅÅiiiƒ Ú¹sçœ9sNœ8QTTÄ^²oß¾æçëëëŸ8q¢¼¼<##cÚ´i?ýô÷Ÿ·µåoß¾544üê9“&Mòõõýøñc]]]QQQXXØèÑ£[[Ok?Nóf̘±wïÞ¼¼¼¼¼¼½{÷jii}øðKª–¯mí¡6÷0—žCpÀ¥€=<<<ØrI@@ÀäÉ“Ùöòòò÷÷oùèÖ­[[væM›Z>zóæÍ¶gÍ4m÷îÝÿÎÙ²_Ÿ>}Ê`0Z.‰ŒŒìß¿?Ǥ¸¸¸OŸ>ÜÞÖ–WWWËËËõœnݺµlSîëiíÇiþï¿þÚò¡-[¶Ìš5‹Kªöp›{˜Ë¿Ï¡€8àRÀzzz™™™-—0™L}}}öŸµ´´ÒÓÓ[>úáÇ–ÝÐ<Œc+..VUUmÏši4ZFFÆ¿sfee5ÿµ´´ôßK”””Ø®®®Þ²eKß¾}åååÙÀ$%%¹ÿ¼­-¯¬¬TPPøê9 .ÌÎÎnÏzZûqšÿðÕŽzÿþ½¶¶6—Tí)à6÷0—žÃl¸Lä‘““+--•••m^R[[«¬¬Ì>Ÿ*%%UQQ!''×ühuu5»«hÿ–QBâæ^4o‹ûšétz]]´´ôW¯mjjjyŽ“ãöúW­ZõîÝ;ƒQSSÃÅrùy[[þöíÛo¾ù&--­ås222V¯^}ûöíÞ½{4ÈÃÃcâĉÍ'e¿ZOk?Nsžêêê¯v£’’R}}=ǵ555±?L´¶­vîa.ÿ:<‡IX£¥¥UXXØrIaaa=ØÖÐÐÈËËkùèWýêý½ýk¦Ñh_ÕÛ¿g$µvÎÅ‹mll FKOOo-I›®^½:|øð¯\¹r¥¤¤äܹsƒÞ¾}û‚ ¸¬„ãÓ,77÷«¿jjj²ÿ¬¢¢RRRÒòÑŒŒŒöÄnssù×à9ü¶tŒ­­mXXXË%ׯ_·µµeÿÙÕÕõÂ… -={ö,OÖÜu_)Ož<Ù¹õÄÇÇïÝ»wõêÕ•••µ¶¶^´hQxxøùóçÙ åääêêê:´•3gÎ|õב#G²ÿlbbÕòÑ'N4ÿ™Ë¶ø½‡:†ú£Þ‚ËÿOŸ>UUUeϤ-,, USS‹ŽŽf?š’’¢¥¥uèС‚‚‚‚‚‚ƒz{{ÓZ?=Ùr!÷5sm{–xyyy{{çååìܹsÊ”)܃µ\ÞÐÐP\\ùÃ?hjj^ºtéßÏqvvÎÊʪ¯¯ÏËËÛ°aƒ››û!ssó+W®444pÉÉúßó¸^^^û÷ïgO&ß¿¿––VZZûѳgÏ=~ü¸²²òýû÷?ýôÓ¢E‹š_Ëe[<Ùü‚ß-¸Z½r劽½½¼¼¼¼¼¼½½ýµk×Z¾öÕ«W#GŽ”——WSS[´hQaa¡¬¬lój9n«=kîzy{{«©©©¨¨Ì;·¼¼¼=Ì&##£©©éìììçç÷Õ4«æ×>|øÐÓÓS]]]NNÎÈÈèÇ,))a?nll,))ÙÎÏ"4­¢¢bþüùªªª cÆŒIHHhùÌ€€ccciii]]Ý-[¶°¯un϶º¾‡xó øëîÝ»k×®}ýú5é Xp€Ç<<<žxð`ƒÑÚÏTB´õ¿vîÜiiiÉ~(%%eÊ”)¾¾¾……….\ؾ}û£GhÿÿvÍ/i^•“““]^^ÞÇ™Læ–-[:”$))ÉÚÚºå++«·oß¶çµÓ§O÷ööNOOÏÏÏ?x𠜜\PP8Œb“X@è(19®¼yóæÈÈHæããcmm½fÍö£×®];zôèÍ›7iíx'ùòåË€>|øÀþ+÷‘({U222•••ÒÒÒÍËëëë»uëV[[ÛfòqãÆ9::þüóÏÍK¶lÙrïÞ½'Ož´?@KbòV‰CÐäݾ}ûǼ}û6»}i4Ú³gÏ&NœØü„¡C‡ÆÇÇ·öòššš_ýÕÔÔTAAN§«©©1™ÌæGY\u=üóçϽ¼¼Z.™9sæ»wï¨ àççÇñH>5üüüº˜ŸÄâóKG‰ÉÇ:èèèèo¾ù&,,ÌÞÞ¾y¡¬¬l]]]˧IHH466Ò8½“¬ZµêÝ»wþþþ&&& £¦¦F^^¾Cï6ZZZ ZZZÍKòóómllòòòÚ|­´´tyy¹œœ\ó’êêj•öŒž9“·JŒ€HJII™4iRPPPËö¥ÑhJJJ¹¹¹-GŠìöåèâÅ‹666 ƒF£¥§§·|”ûŽýssó¯FØ fffíù455³³³[.ÉÊÊêÙ³g‡¡€Ú››;vìØ]»v=ú«‡\\\Z›„,''÷ÕฺººåôäÉ“-mÏà &µ|UPPPËcà\¸¸¸·\rúôé–?¿ÃW¤HhhhˆŒŒŒ‰‰IOO¯ªª’’’ÒÕÕµ´´trrjy¨ :gìØ±+W®üê*ÛæÍ›G%//?aÂ99¹çÏŸïÞ½›= ËÐÐðÖ­[îîî’’’ì'»¹¹­Zµj×®]AAA?~ìh’… Z[[ïØ±cÉ’%4íСCÏŸ??räHó¸/Ý´i““““ŠŠÊŒ3h4Ú™3g_¼xÑÑ À3Ü?òˆ'!Ú-999Ë—/WWWwppX¹råÁƒO:uìØ±M›6?^UUuøðá§OŸ®­­%@ˆqó|õê•›››¢¢¢¼¼¼‹‹Ë½{÷ØËÃÃÃÙíË^RTTäíí­¦¦¦¢¢2wîÜòòòN¼Ûdddxxx(*****zxx|üø±ù¡¢¢"555.¯5jƒÁ`0cÇŽMLLìèÖYmí ÑÿŸN,N¡w”PÌ,`±X»víúý÷ßçÍ›·råÊ–'ršÕÕÕݼyóèÑ£‰‰‰kÖ¬Yºt©ŒŒ õQ€©©©¤ƒˆþ5‚4 õ¿€ËÊʦOŸ^VVvæÌ==½6ŸŸ˜˜¸aÆ”””ƒŽ5Š‚„@=›'NØØØ"RPÀ”ð.((`_P¿gÏ)©œÅ¿}ûöâŋǿk×.þ%¸ þãóçÏÇ÷ððèPûÒh´±cÇ&$$”——8°÷®>A “ªª*ww÷I“&mÚ´©skPVV^½zõðáÃ/^¼ÈÛxÐ~}¬•=ííí-%%uêÔ©®_ÿúõëÉ“'Ïœ9sË–-¸Ä 5ük\,4BCC_¿~Ó¾ìß¿ttôøñãóóó>Ü|"P‡ …CVVÖêÕ«CCCåååyµNMMÍ|üøqÆŒ_ݯV\\Ü÷߯¢¢BêØñ",|}}—.]Ú¿Þ®¶[·naaaÕÕÕ¼]9€˜ãS?Íš5«{÷îOŸ>åÇÊ…"€ÈГd Ú9à;wî,[¶,11±å]dy¨¡¡aöìÙŸ>}ºvíGØbŽßï$Äß©ˆ .C_õõõ+V¬Ø¿?ŸÚ—F£IIIijjNš4 Ç¢þû·EDD888ÈÉÉõîÝûøñãÍ/iùÂæ'çää,[¶LQQÑÀÀ`ݺu555Tþ aaaƒf0ø¦#A€t'Nœ000pssãëV$%%ƒ‚‚fÏžÝÔÔÄ×m¯ná»sçNKKKöC)))S¦Lñõõ-,,¼páÂöíÛ=zÄ~IË6¯ÊÉÉÉÎÎ.//ïáÇL&sË–-”ýÓ§O÷ööNOOÏÏÏ?x𠜜\PP8ŒbŸî1-Ôg·TWW÷êÕëåË—”mÎÅÅeÙ²eÔl@äää°ÿ:kÖ¬]»v5?zõêÕqãÆ±ÿÜæ;IqqqŸ>}šÿÚÑ÷ꎾS¹¹¹mݺµå??¿!C†P@HñïÇ‹Ý×Q‚ó[õçŸNž<™Ê-–––²¿ìŒÊ‹ððpmmí”””æ%†††©©©Í-..îÙ³'ûÏÿ~'©®®Þ²eKß¾}›'[HJJv:LGß©TUU?|øÐrÉû÷ï544¨ °yóæ–u¾yóf*ŸÖÚÚƒ §Ð;J@fÔÕÕõéÓ'<<¼ù`5òòòœœœ¶lÙ2kÖ,*· ࢣ£¿ùæ›°°0{{ûæ…²²²_Íœhll¤qz'YµjÕ»wïüýýMLL FMM¼¼|§ßm:úN%--]^^Þr6IuuµŠŠJmm-5„nÄ!ŽÎŸ?onnNqûÒh4mmí[·n >¼Gøê$¶”””I“&µl_¦¤¤” ­­Ýž•\¼x1::ºW¯^쿦§§·|”ûd¨®w€¦¦fvv¶‘‘Q󒬬¬–ßdÊïðLÂ\{÷î]¹r%‘M›šš^¸paÖ¬Y)))D”ÜÜܱcÇîÚµkôèÑ_=äââríÚ5ޝ’““ûjp\]]ÝrzòäÉ–¶y ´‹\\\‚ƒƒ[.9}útËŸˆßàk]>ˆ-‚a·DDD˜šš655ÌpüøqSSÓ’’‚¥¥åž={8>ôæÍmmíS§N}þü¹¢¢âÞ½{Í“°ÌÍͯ\¹ÒÐÐÐüd///ooï¼¼¼‚‚‚;wN™2¥+ï6_Ëe…ÉÉÉjjj»wïÎËËËËËûóÏ?»wïþñãGÞ=üû1Åb÷u” üV͘1# €t Ö²eËÆßò@ q½¼zõÊÍÍMQQQ^^ÞÅÅåÞ½{ìåáááÆÆÆì­³—y{{«©©©¨¨Ì;·¼¼¼ï6\©©©qymllì¨Q£ ƒÁ;vlbbbG·Î=€HâßO'§Ð;ŠøÌ‚¢¢"ccã>¨ªªŒA£ÑÜÜÜú÷ï¿sçN²I M©©©¤ƒˆÜ K¼O˜0xûÒh4))© .\¿~ýÔ©S¤³@Nœ81oÞ<Ò) ½0æ€øØÂÂâðáÃÎÎÎ3´”šš:tèÐëׯ;88Î@)Œ€ÅÈ‹/êëë‡ B:È™˜˜üõ×_Ó¦Mûôéé,",pΞ=ëåå%h·G÷ðððööž5kî À8ÍÁCÐMMMººº<èÛ·/‘\466ºººŽ9òçŸ&€"8-."""´´´°}i4š¤¤äÙ³g>üàÁÒY„ X°°?“NÑ*mmíÐÐÐY³fåææ’Î ÜpšR‡ {ô裯¯OýÖÛoëÖ­÷ïß¿wïž”î%"‡ Å³gÏtuu¼}i4ÚÆåååùåÒA„ X€Üºukܸq¤S´MBB"88844ôÖ­[¤³+°¹yóæ„ H§h ÐÐÐ äåå‘Î ”PÀ‚‚ÉdÑ­¦† ²hÑ¢Ù³gãÊ`€N@ Š›7oº¹¹IHӿȦM›jjjþüóOÒA„0½Ý‹¶ðððñãÇ“NÑ1’’’¡¡¡þùçË—/Ig2¸ ‰ê/Cª««ëÞ½{zzºšš•Ûå‰7n¬Zµ*..NII‰tÃeH"îÙ³g¦¦¦Âؾ4m„ £G^¸p!é Â,îÝ»7jÔ(Ò):o÷îÝÉÉɧOŸ&@h €Â?ÿü3zôhÒ):ONNîÌ™3k×®ÍÈÈ @8à0Ÿ.**244üôé“´´4eå‡Ý»w_¾|9""BRR’tÞÀ9`QvÿþýaÆ {ûÒh´U«VÉÈÈìܹ“t!€&/""bøðá¤Sðû•{÷&@С€É{òäÉСCI§àž={8pÀÇǧ²²’t†sÀPy¸¨¨ÈÈÈèóçÏ¢tÞtÞ¼yÒÒÒGŽ! «pXd=yòÄÑÑQ”Ú—F£<|ø0,,ŒtÁ…&ìÉ“'ÎÎΤSðƒÁ8yòäâÅ‹ IgP(`Â"""DæpKNNNsæÌÁí±ZƒsÀPv¸¬¬¬W¯^Ÿ?–‘‘¡`s«««4hвeËæÍ›G: @'á°hzùòeÿþýE²}i4šŒŒLppðO?ý”žžN: €ÀA“=pà@Ò)øÈÜÜ|ãÆ³fÍjll$@° €Izñâ…ƒƒéüµbÅ eeeÒA Îs@Ù9àž={FEEéééQ°-‚rssmmm¯]»&ÚÃ}I8,‚²³³E¾}i4šŽŽÎþýûçÌ™S]]M: € @#ÇŸ›M›6ÍÖÖvýúõ¤ƒ 01ÑÑÑâSÀ4- àï¿ÿ~ôèé LŒX€i4šššÚÑ£GçÎ[ZZJ: y˜„Å“°X,–ªªê‡ÔÕÕùº!A³téÒòòò   ÒAÚ“°DMjjªššš¸µ/FÛ¹sçË—/ÏŸ?O:a(`2âââlmmI§ @AA!44tÅŠYYY¤³„BÖÎÎŽt 2lmm—/_>oÞ<œþq†&ClGÀl6l¨««Û¿?é Ä`üž„Åb±ÔÔÔRSS555ù·—‘‘1pàÀû÷ï[ZZ’ÎÐ*LÂ)éé銊Šâܾ4ÍÀÀÀßßöìÙuuu¤³€& ..NlO·4þ|]]Ý­[·’@ ˜1?ÜÒ‘#G_¼xA:ÕPÀÄÇÇ[[[“N!zôèàããSUUE: ¥0 ‹~OÂêÕ«×Ó§Oõõõù· á2{ölƒqèÐ!ÒA¾†IX¢£¸¸¸¢¢B¾…°ýnß¾}ãÆ ÒA¨ƒ¦Z||¼••N'D€())/Z´¨  €tŠ €©–˜˜haaA:…Àqrròññùî»ïH  ˜j‰‰‰VVV¤S¢_ý•Édž8q‚t* €©†)Э‘‘‘ ýñÇß¿O: ßa4ü›óÖÔÔ¤¬¬œ››«¨¨Èõ‹€Ý»w_½zõáÇ’’’¤³ˆå,èÌÌLOOO%%%%%%OOOîß^GÿÊrvHZZš––Ú—‹U«VIKKïܹ“tþЮ¨¨1b„­­-“Éd2™¶¶¶®®®ÜïÕÀú_”Eí¤¤$ÌÀâNBBâÔ©S{ö쉋‹#€´€;6hР7ªªªªªªnܸÑÁÁ!00t®®z÷î]¿~ýH§tºººûöí›9s&n"L@ 8,,ÌÇǧåŸk×®‘ÊÃ+ÉÉÉ(àö˜>}ú€Ö¬YC:¿h'%%}5UØÊÊêíÛ·\^Ò£GiiimmmooïwïÞñ9`'½{÷ÎÔÔ”t ápðàÁ»wï^¿~t¾Ðþò勚šZË%êêêÅÅÅ­=âĉ/^,//ùò¥½½ý°aÃ^¿~Íÿ˜Ãb±RRRúöíK:ˆpPTT ^¼x1n"I@/C’‘‘©¬¬”––n^R__ß­[·ÚÚÚö¼üðáÃ×®]»}û6÷§ùùùmÙ²…ãCüØ-ÙÙÙÌÉÉáùšE؆ Þ¾}{õêUÒA@L‰ÝeHªªª_w‹ŠŠ¾s1yòäÈÈÈ6ŸæççÇâ¤3‰Û'€;ÁÏÏ/;;û¯¿þ"€Ç´€ÍÍÍããã[.IHH033kçËsXŸœœŒÀ%##sþüù_~ùå«ßa' >>VVVëÖ­#€g´€}úìÝ»wÆŒ•••¤³t ˜"8ÍC3fÌpttüþûïIè<0X,VZZ ˜‡bccO:E:@'¡€©››Ë`0”••I çÏŸ_·n]JJ é,¦¾…ÌÍÍýõW//¯v~G€@ASÇŸùä»ï¾Ó××ÿé§ŸHè00Øwá B48qâÚµkøÂ`:(`*` 4ÿ¨¨¨œ9sæ»ï¾ËÌÌ$ PÀTøðბ‘é"kРA?üðÃôéÓëëëIgh/|¼½õvSSS·nÝŠŠŠäååyµNø ‹Årww777ÿý÷ßIg‘‚/cbÙÙÙjjjh_¾¢Óé§OŸ>wî\xx8é,í‚æ»>’N!úÔÕÕCBBæÏŸŸ““C: @ÛPÀ|‡¦Œ³³óÒ¥K½½½Hgh ˜ïPÀTZ¿~½¼¼ü/¿üB:@PÀ|—žžŽ¦Œ„„Dppphhè7HgàÌwSLCCãܹs ,HOO' U(`¾ûðáCŸ>}H§/ƒþùçŸ===«««Igà ×sÀë¾ŠŠŠŒŒŒ¾|ù“µA‡x{{3Œ£G’B × ž9# IDAT+&èÈ‘#Ož< !€0¡€ êÖ­ÛÅ‹W¯^ýæÍÒY¾†æ/L&ËÂÂb÷îÝžžžeee¤³ü0}üø±wïÞ¤Sˆµ™3gŽ9röìÙ˜îÌ_(`A°wïÞâââíÛ·“ð_(`þÊÌÌÔÓÓ#BÜIKKŸ;wîÈ‘#øª¸ ‰^M:g±X ãóçÏ ]_tÑóçÏ=<<¢¢¢ Hg¡Ë„R~~¾’’ÚW@ 4è§Ÿ~š6mZMM é,(`~b2™úúú¤SÀ­ZµÊÐÐpéÒ¥¤ƒ €ù ,€Ž?þòåËÇ“âNŠtQ†@ ãÊ•+NNNÎÎÎ¤ã€øÂ˜PÀ‚ÉÐÐ088øÛo¿ÍÌÌ$Ä ˜p°À5jÔÚµk=<<ªªªHg1…æ#Œ€™¯¯¯­­­®Ä"PÀ|„pÈÌÌܹs'é Ž0 ‹_ŠŠŠ¤¥¥•””HVÉÉÉ]»vmàÀfff&L Ä FÀü‚á¯PÐÖÖ>þüüùóß¾}K: ˆ0¿0™LÌÀ ƒ˜0aBAAé, FPÀü’••¥««K:´Ë´iÓ|||&Mš„»TePÀü‚ïA.›7o600À×ePÀü‚°p¡Óé?~ô÷÷'ÄfAó &a yyù«W¯8ÐÈÈhÚ´i¤ã€ˆÃ˜_0FÚÚÚ—/_^¶lY||<é, âPÀ|QWWWTT¤­­M:tØ€>|¸¡¡aùò夃€hBó XHII]¸páÙ³g{öì!DÎóEVV– éÐUŠŠŠaaaŽŽŽ¤ã€HÁ˜/0ººº×®][¼xñÓ§OIg‘‚æ Ü…C”ØÚÚž;wnòäÉ ¤³€è@óîÂ!b\\\vïÞ=qâD\ ¼‚sÀ¼WZZ*!!¡¤¤D:ð’··w^^ž››[dd¤²²2é8 ô0æ= EÕ?ü0bÄÚÚZÒY@èµQÀÅÅÅôôô400`0 ÃÀÀÀÓÓóàÁƒÅÅÅÔD:999={ö$øb÷îÝÊÊÊ .Ä·@µZÀÙÙÙ .ÔÑÑ9sæÌðáÃoÞ¼™—————wóæÍaÆ…††êèè,X°§Äþ #`&))yöìY&“‰t@Ñ[û ///o``°{÷î±cÇr|Bxxøš5k222ª««ù™:½ÕÝÒ~~~Íÿ‘TVV6|øpOOÏ7’ÎüÕÅFà¢Õð·ß~ÓZûÒh477·˜˜˜o¿ý–±„A‹<%%¥;wîïß¿ŸtV­Î‚>uêT›/VPPhÏÓÄ XhjjÞºukèСÚÚÚS§N%„.Câ=°˜èÓ§Ï­[·F­ªª:räHÒq@È´}ÒÔ©S ¿ZøåË—3fð'’ÐËÎÎîÕ«é@++«K—.y{{?þœt2m°••UHHHó’»wïÚÙÙò3˜°ªªªª®®VWW'(2dÈÓ§O{xxÄÇǓΤ]“»^½zµ`Ámmí={öÄÇÇÿõ×_ýúõ£ ]™ó–––6nܸ´´4ÞF÷÷߯X±âÁƒ}ûö%x‰À,è–lll^¼x1|øð#FXZZ>zôH„Û·‹püY|àw2!…gK—.7oÞèÑ£?þL: º¶ øÇœ8q¢ŸŸß‰'´´´öïßïëë;f̘͛7SOèà$1·~ýúo¾ùfôèÑ_¾|!ZÛüñãÇׯ_O˜0¡yÉÈ‘#_¾|™ššÊÏ` #`ضmÛˆ#ÆŽ[ZZJ: .~Mîj]™ófooèÐ!{{{ÞF¡³víÚ§OŸÞ¹sGQQ‘tè<³ ¡ýòòò0h4Úüaiiéîî^UUE: ¢V xîܹm¾qTUUÍ;—ב„Xccã§OŸzôèA:G§Ó>Ü»woššÒq@à´ZÀçγ··¿wï^kO¸{÷®½½ý¹sçøL(ª©©IIáÛ@£ÑhÇïÞ½û„ 0€¯´ZÀ©©©?~ü°aÃ>üîÝ»òòòòòòäääC‡9;;»»»4S±ZÊÍÍÕÑÑ!ˆ¤¤äéÓ§õôôÜÜÜ***HÇÒÆ¹åOŸ>9sæáǯ^½úôéFëÞ½»­­­««ëôéÓEõŽÇ>åvôèѰ°0žG¡ÖÔÔ´xñâ”””[·nuëÖtèþMÂÂ,h:½»9wäÈžGa‡R˜-rssqàHBBâèÑ£¦¦¦ãÆÃ±h µ³€ß¿ïã㣣£#--­££ãã㓞žÎïdÂç€ :~äÈ33³Q£Fá>YÐv'&&2ÄØØøÉ“'eeeOž<122rttLJJ¢ ŸpAwìk“œœœ\\\ HÇ’Ú>´=vìØñãÇ/_¾¼åÂ}ûöݾ};<<œŸÙˆéô›“'Oöïߟç‘@Älݺ5$$äîÝ»zzz¤³7$'a1Œôôt--­– óóó +++ù‘‰¸Nïn--­ÄÄÄîÝ»ó<ˆž}ûöíÝ»÷Þ½{†††¤³@«øWÀmß2BVV–ãryyy^‡nuuu¥¥¥¤ƒ€pX¹r¥‚‚‚‹‹ËÝ»wûöíK:P­ísÀ“'O¾páÂW ÏŸ?ïééÉŸHÂ*??_KKKBË¡½.\Èþê¤øøxÒY€jm€÷íÛ·hÑ¢ÒÒR///ÜÜÜÐÐÐäääÀÀ@ ò ÌÀ‚Nðñña0cÆŒ¹|ù²££#é8@¶mÓéô6×"bwóèÜÿË—/‡††þý÷ßüˆ¢íŸþ™5kÖ‰'ÆO: ü’7â`µ?’ Œ€¡ÓF¶`Á‚“'O’ÎÁ÷öðL~~>¾ˆ:ÍÁÁ!""ÂÍÍ-;;{Ó¦M¤ãßaÆÏ €¡‹LLLž={vùòåÕ«WãÀ€ÈCó ºNKKëáÇÑÑÑóæÍ«¯¯'øÌ3(`à •þù§¨¨ÈÝݽ¼¼œtà0Ï €W Æ•+WúôéãììœM:ð ˜7ššš>}ú„›P¯HJJ:tÈÇÇÇÑÑ1!!tà=Ì‚æââb%%%iiiÒA@¤¬^½ZWWwôèÑ/^tvv&x #`ÞÀñgà“©S§†††N™2åܹs¤³/aÌ(`àWW×û÷ï»»»§¤¤üòË/í¹9>Œ€y |eaauçÎéÓ§WWW“Ž<€æ öW!‘N¢¬G<‘‘quuýüù3é8ÐU(`Þ(((ÀøMNN.((ÈÅÅÅÑÑ155•tè0oà4PƒN§oß¾}ýúõC‡ýçŸHÇ€ÎCó ¨4wîÜK—.Í;wçθk4€Bó (6dÈèèè‹/úøøÔÖ֒ކæ LÂêõêÕ+""¢®®näÈ‘………¤ã@Ç €y ¾¾¾¬¬L]]t;òòòçÎ1b„½½}LL é8Ð(`(,,ÔÔÔ”ÀÎètú–-[öíÛ7~üøÀÀ@Òq ½Ð<€À@œ‡‡Ç“'Oöïß?þ|œ (`(((À ` ÎÄÄ$**ª¬¬ÌÕÕµ  €th ˜0 ƒÁ¸páÂèÑ£ I:pƒæÜ Nÿå—_§Nº{÷n\% °PÀ<€0š1cÆDGGŸ?~êÔ©eee¤ã(`ÀžžÞãǵ´´ O:| ̘„‚IVVöàÁƒ[¶l=zôáÇIÇ€ÿæ\†‚lÆŒ‘‘‘ÇŽ›6mZii)é8ð(`Àœ±±qTT”–––]\\é8@£¡€»®¶¶¶ººZEE…tndeeüýýÇŽû×_‘Ž(à.+((èÞ½;N' mS§NeŽž”¤S­ªªêýû÷ééé™™™999¿ÿþ;ǧ½xñBYYYII©wïޭݾ[YY¹=ÿ³IHHØÙÙ}ùò¥²²2##ƒÉdr,àÏŸ?{xxhjjöèÑ£{÷îzzzóçÏïÐF‚‚ž={¦N:gΜ¿ÿþ{ß¾} ð ¸KpX@èééiiiõîÝ[WW·¡¡AJêëßm))©cÇŽñj‹òòò‹-jóiŠŠŠþþþŸ>}ÊÏÏÿôéSkù|þüùرcºººúúúººº={ö”––æUÔ.rtt|ýúõ† ,--&OžL:€ˆÀ!hÚÀáÆGŽ ãw$1WRRòâÅ‹gÏž-[¶LCCƒtÞËÏÏß·o_VV“ÉÌÊÊÒÒÒŠŽŽ&êkÏž=[°`Aß¾}zõêE:EpZ@aÌo¿þúkHHH~~¾““SSSéD|Ñ£Gÿ6Ÿ1{ölCCCccccccggg â±±‡Â¿ýö›­­íÖ­[-Z„/è Œ€9hÿç;vTVVn߾ߑÄÖ£G444ÌÌÌ$$pÉ­¾¾>++ëÇ©©©ïß¿×ÑÑY»v-ǧñõöÛ·o.\())ù×_™™™ñoC‚³ )ÕþݽjÕ*ƒ•+Wò;’hKKK«®®¶²²"DD®ZµÊØØØÌÌÌÂÂÂÕÕÕÁÁ·›hjj:r䈟ŸßâÅ‹7lØ ''ÇÛõþ0F]‚CÐ]ñþýûßÿÝÚÚÚÅÅ%**Štѱ`Á‚ÜÜÜÀÀÀ1cÆ”””0™LžoBBBbÉ’%¯_¿~÷îµµõ½{÷x¾ ‘‡0íÿ¼3bĈM›6¹¸¸ð;’艋‹swwŸ8qâŒ3† ‚#ÌÔóõõ½}û¶¥¥¥¥¥¥¹¹¹³³³¦¦f'ÖsóæÍåË—4hçÎ={öäyN²pšRíßÝæææ/^Äi°N`±X, ½KP}}}JJÊ›7o’’’¾ÿþû1cÆtnUUUUþþþýõ×?þ¸råJÁ¹†  ëPÀ”jÿîÖÔÔLNNÉ cØÖ¬YSUUeeeefffiiÉå^ïß¿_±b“ÉÜ¿¿««+•!øç€Q}}}YYî ÄÅ“'O<==ÏŸ?O:tÞ´iÓÌÍÍ_¿~½qãÆ>}ú$''·öL##£[·níØ±cÑ¢ES§NÍÌ̤2'€ÐÁ˜ƒv~ÞÉÍ͵··ÏÉÉ¡ ’pa±X·nÝò÷÷/,,\½zõÌ™3»uëF:ðûÿ Ž—ÿ†„„˜™™™››ËÊÊÖÔÔüñÇ«V­Z½zµ¼¼<åIx#`ATXXˆ)ÐÅÆÆnܸqÅŠïÞ½ûî»ïо"ƒN§slßÆÆÆ‡Λ7OUUÕÔÔtñâÅ›6mzñâÅëׯÍÌÌ.]ºD}TÁ‡0íü¼sçÎ={öܾ}›‚HB‡Åbá6Ibˆ=±+55µù–Ñ?^±b…ººúž={,,,h4fÞpÁ­(.æí+ž¤¥¥-,,ØEË6tèÐØØØ£GŽ=ÚÉÉéöíÛÖÖÖööövvvìÛ·/Á´dá£hç¡€i4Z}}=é è$%%—,YòîÝ;###999SSS;wîpü>fñî¼ÂÂBqþ2à’’__ß±cÇ’ÂAEEå÷ßýúueeå_ý5nܸ½{÷r|æÓ§OwïÞQVVFqH*¡€;OlGÀ,ëôéÓfffÕÕÕ¸Ä:DWW÷üùóAAA°··çxK&“¹qãÆž={š˜˜SŸ€8Üy»uŸ°[¹rettôõë× @: %ggçgÏž]¾|yéÒ¥½{÷Þ±c‡]ó£öööööö4­±±1%%…Á`p\IYY™’’E‰ø³ 9hçœ7[[ÛÀÀ@[[[ " ”ÂÂB Ìe…®«¯¯?qâÄÖ­[œœ¶oßnddÔþ×Ξ=;,,lÀ€vvvööö®®®ÊÊÊü‹ b × ¢ÂÂBñwïÞí }úÁƒÛ<Š$EèÇDˆð%E„Ž€KJJ ´%ÅÅÅA+/[¶LM_!Ä!CBÌW Lz7 ¸}ûö5J[’››»ÿþölûÎ;ïŒ92<퀞§Éá;\éÔÏ’`3!jNy>ÿ¦åŠ‹ã2z™”w¿:ä8^ëîlLŠ7^r‘Uqà¨SqÉEVe“öìV¥ìèæï¹Õ£´óØ¡s°‹¥©©Él6«%n·;11Ñét†Þ°®®îª«®zñů¾úê6Â4€¨goð>µ¾Æá’méþ™§½Ï×*ù~ýó^²ORïöœýKh1KB.,„0ÅÂé½-&iûÞæŒÓeƒm 6ÃÑj×;_4ZÍÒwN§[6›¥û¦¦_~úÏuY•KÝ¿âÚË3z™ü²ÜÞà]¶¾Æé’­é™©‰ÆnéŒÎ_RDhu.€Oœ81sæÌÂÂÂk®¹¦=GÑN\k=òÈ#………i/D¨Ý[ÖnþQy=åªäoŽ:¾ûÁÕþÍá“…F“¸qlrɧõ~uLF1õ§½rÚ„{ÿÇåAþP«AÛäð8êüîçÎïZ”·¦ý4ù§#:þɺXaaá£>ô­Ø àÌÌÌÒÒÒÌÌLµ¤ªªjôèÑ•••­mrìØ±›nºéé§ŸÎÏÏoçQˆzöFï²u5Nw×ü­3„Ïü-«YB„8Я'ôrºå·?¯÷xÏ)Ÿ|EÒ5£»¤yás‹°rrröìÙ£-)--1bDkõ?>iÒ¤åË—·?} ¤&§\•ÜU{k-}…N·"}-&ÆO½ù‰ú !Þý²ÁÞP"4€'Ož\TT¤-)**š2eJÐÊÕÕÕ7Üpßÿüç‰'vKë '>Àª OÛ¥Ý•ÊÆÖcÄhB“I6Àâòú<­„·Û+ʪ:0+5"4€çÍ›÷É'Ÿ,]ºÔn·Ûíö'žxâ³Ï>›;w®ZA{úö†nX²dÉ7Þ¨GK Ò…C `Û¿·Ù¯älèÊÂÛú˜Ø I&£ðxäï*\»U™MÒÀ¾–Vߎ^ÀIII[·nýâ‹/²²²²²²¾üòË-[¶$$?K¿{÷îÛn»M:×?þØÍm€ˆ5 Ùl¡±ïÜ\ º2õøI·_Éà Ú•—n8áhÒI)¼ :|bz‹°Ä‚CÇ/lªk3 3SM'ìžöìpâè„í{›Û^Ø%3ž–$ô/®Ù$ºµOÄ^‰s‹°]¢¬Êõ?%m§¯¢é+„ØöuóMã“´%§'¥ýÐçÆ–, Édˆíöˆ][ÚyèhB@4û¨´Éoüf2IA§£ÛÏå‘7l;{5°AFƒ$DóÇ~doðÿþ"BÀÍä€1çÃlÚÉf³Ál`ÚÆn5Iê;sç¬NóÄäBh¢Ù„\ÿå«u^íPÕíöy½²B:ÿ“°ÎñÓ¬C .„&€ šegZFdYµ%ŽkÊ^a4I×I4vâ1=Jô¶> 6„Ìf·Çƒ b `ˆföï·?´ñ•×#—ŸpË­_ÚÛª¶ò3tÀú|LA¢KÙ —·#Ë›¾«p†¸ßd‡˜ŒR诊)h@´ÉîkéÀ}(;(È´4d!·sfyÊ•±x/¢Yj¢qñ¯z`m³¦¡•'´†z¬ÜΑ·Å$]ÔÇÿn—±€€hfoð®üÿO~[ÑŽÓÀRÃU³)xBw<¸ÏáòÈÏ×r0 ª”p9\íš=œýùe ¿ü©½ç£F§Kf ª˜:r“çt?.mÊèe:ÏÁ®Ñ ›m¶Åä"¬N\íè1oï5H’$Œ’äÓ\QdÎ^>äõ‰OöùßÕ²£¼>QQíÿl¥Ë‡Ù¦þ¤W¼5æ„1÷ ¦Œמjô6ß0.É}ýÖ0÷Cgf‰C¯”BôJ0Åæsé`ˆjrÛ‹¤$I;éÞ²³QÒ#¶în\úF5‹°Qe÷¡–6Ç—J—GîÌ=°Za8sYo{nëá` Ê´9mèø£ÚÃ×Ö€V:w`ÞÚ5NQŒ€hÖ+ÞâNXF£4wRŠÕr¶‚‹V‹á<ŸÜƒ$òó§_Ü+þœÚ{Ä–ãE0VA@4+;árºƒÏA›MÒ=7¥ž°ŸótBYF£˜ß«Å);ݾ߶”¬[J2ˆ6g°•k¢¶ìj”$ÿ«‡{'ÇÜ­( `ˆf©IA‚Í`¿¼29=Ùø—·ê<sÅ^¯xù»Âf‘F Žkg«ék2Jf˜Ž×z\Áï9³ÊÚ/}Í&iÌðøö%šÀÍì ANÆ^?6Éí‘×üËz}–Ã%»<[—e4 ƒ$ʪڕÙ*ÉÐæó £ç€ še÷µhOñ*þýEÃÛŸ7´çêÛ=‡:rjVCú[]ž û })”‹UЀh#‹ÀÑ¥·ÝÃZíED’$. ýØ"Y´öÔ‡À°ï›~öÆ–’$Ò‚M•G7¢YˆEXBSeYüоóÁ­IÒ¬|ÎH6© ­eYÔ›*n0D³ì¾[ÀtkŒÉÿ´–Ú~ðCCóÙõ×GnÏé×f“ÄÃQ%5ѸdVŸÃ•®~é¦Û딇z6CàŠèŒ†sëËg9_’e=XárûÚ=ò2Mý@”K°.hëlºx€õléyßxÊã&Sð](w¶'}Õ1´ËÃ",@”jrøªìšk— 9}bôP[N¶µíšÁ¨+³LLA¢’½ÁûÔú‡+TêöM3VÕul%”Ç'vß·¼t 5%‘UЀ¨SvÂ:}Í&iÒ¸dm‰ÅÒ±€˜›ðfeÜxEÒé¯[™â¶˜¤‰£µ%’$ýldB‡Ž$96Ÿƒ,„B’búãˆöFïS¯q¸d«Å0 ÔÕ×¼íëfç™H¶˜¤…ÓÓû¥™kNy>?Ð2jˆõÇßàþ–&‡ïó-ƒú›‹ÞýÑí•-&)ÿò„”Sv_óÞ2ç;;>>))éÚk¯ ËTaÑ¡®»÷Þ{o½õÖ?þ¸¡¡¡¡¡á£>š9sæ}÷Ý×--…"†ÿË6›Í.—K[âr¹byÄT§{©¶¶vøðá}ôQØšé:Úu¿ýío{ì1õK~7µ%!ºÎjµ¦§§¿üòËÕÕÕÕÕÕýë_ÓÓÓ?þøãniiÄéP×ù|¾©S§jã`êÔ©Ú³HðÓå¿•±;Føœ8qbÚ´iÿó?ÿsõÕWëÝ–ž¡¸¸xß¾}K–,Ñ»!=Ïç{ê©§îºë®ŒŒŒŒŒŒ»ï¾ûÉ'Ÿ|øá‡õnW°lÙ²]»vmذ¡®®®®®nÆ »víZ¾|¹ÞíŠ%]›ç=HŸ>}ªªª´%•••}ûöÕ«=‘©½ôÃ?Œ5jóæÍanZ¤ëP× <¸¬¬L[Â禮$D×õíÛ·¦¦F[R]]ÆöE°u]vvöû￯-yÿý÷¾æõt]þ[»#àœœœ={öhKJKKGŒ¡W{"SG{éøñã“&MZ¾|y~~~ø[Ñ:Ôu‡ÊÎΖ4„ê‹XÓ¡®ËÉÉé–Fõ êºcÇŽ3F[2f̘cÇŽ…±}8WìðäÉ“‹ŠŠ´%EEES¦LÑ«=‘©C½T]]}à 7üùÏž8qb·´.¢u¨ëBü¯Ým0êºiÓ¦½ýöÛÚ’·ÞzkìØ±al_ëP×]tÑE;wîÔ–ìØ±cÀ€alüt퀺©¯¯8pàO<¡œÿxüñÇÜØØ¨w»"K›½¤ý=zôßþö7=š‰:ÔuøÝlg×µ´´\uÕU¯¾újMMMMMÍš5kÒÓÓ·nݪGÃõס®[µjUVVÖ›o¾i·Û•sÀ^xásÏ=§GÃ{†.ÿ­ŒÝ_rY–92uêÔ¤¤¤¤¤¤©S§ú„ƒ"t/i"ƒþ‡g·Û»½É‘¢ý](–Xî`×?~|öìÙ©©©V«õÊ+¯Œñõ꺿ÿýïãÇOIIIII¹âŠ+Ö­[×½íÂ7v•ZÛ;ŸØ= €Ž`t@ Àè€@0: €Ð €`t@ Àè€@0: €Ð €`t@ ˆu·ÜrËC=¤-yðÁõ«_éÕ FH²,ëÝzª­­½ì²ËJJJ.»ì2!ÄîÝ»o¸á†ÒÒÒÌÌL½›D3FÀ@¬KOOþùççÍ›çõz½^ï¼yóž~úiÒ7FÀ„â®»î9r¤,Ë|ðÁ[o½¥ws€èGBˆ'NäççŸ:ujëÖ­C‡Õ»9@ô#€!ÄÂ… ¯¹æš“'O~ýõ×Ï>û¬Þ͢瀈͛7:thÚ´isçÎýꫯ6oÞ¬w‹€èLjuv»}ìØ±ï¾ûîàÁƒ…û÷ïŸyòDôk Râðóû®^½:))Iô  ^RïüìÙ³¦M›~ýõ×...’^‘| xïÞ½õë×'}(Nò^½zõÌ™3¥¾ *£—ÒÙ³gòóóËüÍjÕÄ ò$ŠHic/((hÚ´i†„kAA^âÑhTž……ä“ î”*˜ámÒh4Z­¶èG???F#_9yá£=âœYºÛçÎfÍš¥¥¥½òÊ+e×a~ÿÕˆÛ¤Ü)Uà6©‚t·IÂ1àààà÷ßßôÀÜHÀùùù7ndúàyÊïy6©ZÖÛ¶m;pà€¡uУÜ&µàN©‚9ß&ýÙÕ×D󀿢”ï *ú6dθMjÁRs¾M*ú³«¯ “äçç'w 0wJ¸MfN)ßATômPIF-󰤋'¥Ä P º 0)02 € € `d@ `ljyXRJyú–ç€À|¨è3Ÿç€0)0@Å4E1*êÜVJ'€Šº#•$Ñg¾§¥ `:Ø J €Æ'QG±ºr])¿tAˆ.hL  € `d@ ÀcSÑzUÒ!€ƦÕj¥8­ºr])Oßò0˜–¢hðW$mÀãÑétNNN‚ 899ét:¹Ë)ͳgÏ>üðCéÎ_MºSP\DD„¯¯oNNŽ ¾¾¾^^^r×õOŸ>4iÒÅ‹¥»-`€‘,^¼¸0} åä䈻}‚Xg{òäɨQ£þøãýû÷‹rÂRÊÔ'&a€É³±±ÉËË+~ÄÚÚ:77W®z^èÑ£GÆ ³²²Ú¹s§µµ5“°ªçààP∽½½,•ü•ìììAƒÕ©Sg÷îÝÖÖÖ’^‹‰V«µµµ-úÑÖÖÖßß_ÆzJ¸{÷nïÞ½[´hV­šäs¤`€‘xyy;::ZZZ:::{zzÊ]Ôܺu«OŸ>}ûö]·n………®¨”‘WÆ€r¹zõª››ÛСC—/_^â1 €$~ÿý÷=zL›6íùô• 06å,Ú|þüùwÞyÇÏÏoÖ¬YF¾4 06…lÆpâĉ>}ú¬\¹rüøñRÔS:¥Œ¼2 æC ›1>|ØÓÓóŸÿü§‡‡‡Xç,ZÀ³³wïÞQ£F…‡‡—ž¾’"€æ%""b„ ÑÑÑ}ûö•± 6c›¸K@—˦M›<ئM¹j(DŒM¢YÐeæúŠ+‚ƒƒ9Ò¤I) (¥L}b@:z½~îܹû÷ï?pà@ƒ ¡tñD `âž>}:eÊ”³gÏÆÆÆÖ­[Wîrþƒ˜²¼¼¼Ñ£Gß¿ÿàÁƒvvvr—ó_Ì‚˜¬Âí---÷íÛ§¨ô`€©ºwïž››[Ó¦MwìØaii)w9%IÀÏž=[»vm«V­lllZ·nýÍ7ßHqþJFFF×®]ÝÝÝׯ__¥Š[›’Ô4mÚ´³gÏ~ÿý÷<ؾ}ûöíÛ¥¸ @¥¤ÞŒá·ß~ëÕ«—¯¯¯rv}xžø³«cccW®\]¾:x ̆èŸù:nÑ¢E™™™ãÇß°aòeËÆŽ[ù3KOâŸ×ÓÓsìØ±ýúõ+_0˜ q?ó#""&M𔓓Stò9sæ¬X±B”“«i3†cÇŽegg÷êÕ«Fvvvnnnñññ¢_€B‹/.J_Aôzý·ß~+c=?€ÿøã__ß±cÇ^¹råÒ¥K^^^ï¾ûn\\\™/´x%wß”àÚµk%Ždff–÷$æ…1$R/ ~ËÚÊÊ*$$¤xÏûÖ­[ÃÂÂbccK«ƒ.h0FÄöUÓ¦MÓÓÓ‹iÒ¤I‰#¦¦1à œ;w®øZ_þù§££cñþÔAÊO¯×0 &&æÙ³g…Glmm7oÞìéé)ÊùÕ4ܪU+ÑÏ Àóž>>EGöîÝëââ"ú…æ,;;ûý÷߯^½ú¾}ûlll&Nœ(wEå#~O˜0¡oß¾‚ ôïß_„½{÷Ι3'22Rô ÌÖíÛ·û÷ïïââ²nݺªU«Ê]NEˆßmcc³k×®¼ñÆööö!!!ß|óMïÞ½E¿À<]ºt©{÷îܸq£JÓWbVÅ0 `ˆ_ýuÀ€óçÏŸ:uª.']<±0@5~þùç‘#G®]»vĈr×RYJÜ `Ú*öðwß}çééié+ÀãÓjµå}Éúõëÿïÿþoß¾}={öü«ßQ×â‰Jye ÌG¹>óõz½V«Ý±cÇþýûÅ:­˜£§OŸN›6íÔ©SÇŽ«W¯žÜ刉(T^^ž··wVVÖ¡C‡ìììä.GdŒJ*±5Xc«E§¡ÌÓÞ¿ßÍÍ­zõê?þø£é¥¯À0 tâî\d 7nxxx¼ýöÛ«V­ªRÅж¢¥ªi7¤Š!€…RSSû÷ïÿÑGÍš5KîZ˜„0Ç6lØ—_~©Š*ƒ1`€RìÙ³gðàÁÛ¶m3ùôhbýúõË–-‹‰‰iß¾½Üµ YáR:îÈ‘#Mš4‘»#!€rzòäɤI“ÒÓÓ?^§N¹Ë1 ›ìììáÃ‡ÛØØüôÓO5jÔ»£b 4Ò=|ãÆ=z¼ñÆ»wï%}ÙŒ¡"x”I¢Ïç_ýuÀ€ãÆ15ÙŒ€Ò:tÈËË+((hÔ¨Qr×"º FõÏþsôèÑß~û­9§¯@ `L+V¬ ‰mÞ¼¹ÜµÈŒ”ÆÏÏO”óLŸ>=%%%!!¡~ýú¢œ³±J5¥L}b˜°ììì‘#GZZZ†‡‡«ëq#éâ‰1`€´nÞ¼Ù«W¯† îÚµK]é+) ¡³gÏvéÒeÔ¨Q›7o®VqÏÿâï •Ÿ~úiôèÑ«V­òòò’»Å¡ Ä–-[ÆŒ³k×.Ò÷…`0FcQŒº–N4œ^¯×h4+V¬8zôh=ä.G¡”2÷˜YÐÌ©~îåææŽ7.33sÏž=uëÖ•»œÊb4@åj¦ß¾}ûí·ß¶´´<|ø°ñÓW]= Jùþeªßà¯h4U†áŸÏéééýû÷÷ððX½zµ………Ô…=O]›1(%ö`P&?Ÿ† ¦Õj'Ožl„ª^H]ÌcH€ÊŠŒŒüðÃCCCÝÝÝå®E5`@¥8pàÍ7ß”»5a 4¥ìpðäÉ“ &„……8qB®ô-þd— ªyXJye Ôåþýûï¿ÿþË/¿fkk+w9Rá1$€‚\ºtÉÕÕµuëÖ»ví2áô• x1Nçäädeeåää¤Ó銎'$$tïÞ}úôéAAAUª#Ä_ÈCᣕ¾¾¾ùùù¾¾¾ááá‚ „…… :444tÚ´irרnJye €¹Qøçž³³óÅ‹K9rä×_Ý¢E ¹ 32âS£ðÏ=›¼¼¼âGªT©Ò¥K—ï¾ûîÕW_•«*ã#€ÀÔ(üs¯iÓ¦éééżôÒKþù§\%É‚YУÒjµÅ§7[YY…„„˜[úJŠy”²À…xyyö6¿úê«[·nõôô”»(“ÂR” …Ï‚áúõëÖÖÖ‚ ܺuKîZL (éÉ“'¾¾¾§NŠ‹‹kܸ±Üå˜&ð?îÝ»7lذW^y%!!¡Fr—c²üWZZZ·nÝÚ¶mY˜¾ «V/IfWnIQ\™WQøt|0ðññùüóÏ}||ä®E)¤‹'©º ISP—uëÖ-]ºt×®]Ý»w—»³À0˜»‚‚‚?þ8666>>ÞÉÉIîrÌcÀ …<†tÿþ}ww÷´´´¸¸8Òט¤ à×^{ÍÒÒ²AƒÞÞÞ.\è* F…ÛüiµÚÛü_zzz·nÝZµjµwïÞ—_~YÆJÌ$|øðºuëŽ=š••U¿~ý>}ú,\¸°Y³feÔÁ0HãéÓ§ .ܽ{wTTTË–-Ëûr3ÿ|VÓR”}úôéÓ§è§TÀ½{÷FU¥J•ÄÄÄÚµkWà lÆ ¥|¯1óoX …ýë_ï¾ûnÏž=ׯ__­kW„ºgAŒïûï¿ïÑ£ÇÂ… ƒƒƒI_â–€©Ñëõþþþ›7oŽŽŽîÔ©“ÜåàÅh€<$ZÝ";;{øðáû÷ïOLL$}•L)#¯Œ07R|î]¼xqÈ!o¾ùfHHHõêÕÅ=¹yb P†#GŽôèÑcôèÑaaa¤¯ò1 ¦ 000000""¢W¯^r׃ÐuËÍÍ;v¬N§KHH"}Íy'IÀ Q¸ÈÌÌìÑ£GAAA\\œ££cåOø<6cˆR¦>1 ÊëÈ‘#^^^3f̘7ožtW1óÏg5-E š^¯ÿòË/W¯^ѳgO¹ËAEÀ 2ÙÙÙ&LÈÈÈ8~üøó» C-5IOOïÖ­›µµõÏ?ÿ,]új4‹ÿO`–4”Ò³oæc `ˆ~øa„ Ÿ}öÙäÉ“å®Å\0 fM¯×þùç6lسgO—.]ä."  €êï/µ°°0½þÒû÷ï80&&&))éùô5ù?¾©RJÇ/]ÐD¡¢FcHXž={vèС}ûö]·n¥¥¥ôuáH÷/J)ÿRUôž d*ú01¤Ô¯¿þzæÌ™kÖ¬9r¤qªB lÆæ¥  `þüù‹/>xð áéKÿ³Š(嫢о´P2}˜”Rê­[·FŽiggV«V-QÎ‰Š¡ eeyÅÅŽõÖ[½{÷ŽŠŠ*WúB]`&Eá}°e.p2bĈ͛7ûùùU©ÂG´)SJgÝ&ÌÜÇ'Nœ˜žž¾k×.''§Š„ÏRÑÑ ¦ìÂ… ]ºt±¶¶Ž‹‹«pú &Ño>”ò]‰omÌVxxøÌ™3W¬X1~üx¹kAI,E &(//oîܹû÷ï?|øp›6mä.FE€<®]»6|øðúõëŸ8q‚ÙÎfˆ1`Alllç· òÝwß‘¾æ‰`Rþ’ Ïž=Óh4>>>ß|óͼyó ŸG‚RÊÔ'&a…Â?LþüóOooï‚‚‚ˆˆˆúõëË]ÊÆcH zIII;wnÑ¢ELL é $§×냂‚ú÷ï$Ý®‚ÊïG¥ôÕ(¼×€Z(ðÃ$++kܸqׯ_ß¹sgãÆ%½–ÿøjG4DiKA}úÄÄÄ(0}…bA ‚`üÇ Q1¶;õz½»»ûرc½¼¼Ê¼ -` ôøñãY³fÅÆÆFDDtìØQîrÊfäÇ Í*[À«V­ª_¿>ߨԹsç\\\rss“““U‘¾‚4ÃêˆT“°NŸ>½yóæÄÄD‰Î’ ;wî_|1f̹ki’$€?~ìãã³mÛ6;;;)ÎÒÉÊÊòõõMOOÿå—_š6m*w90Y’tAüñÇÇïÒ¥K¹^eñ"t§&Loð_~ù¥mÛ¶ ¤¯Y)±DLé®(þØrTTT```lllÕªUÿs F°™„˜!)Þøž…Tø˜ï–-[¶nÝêîî.nUP/éâIüó:;;:t¨qãÆÿ½ àE¤xãWìœW®\=z´ÍöíÛ6l(nIP55Í‚¾xñ¢££c‰ö»Ô y¨°ÈÈH—¾}ûÆÄľ0ñ'a=ÿMÖ-ezøðáìÙ³=Ó¾}{¹ËÏ«»!¼;ö?~¼0t“““M#}ãn‡ŒJ"€ÈF¬¶Zñù«†œöéÓ§+V¬6lX```ppp5D)(¥tÓM À8®\¹âããcii¹}ûöFÉ]ŽÈø,š&a@™t:“““•••“““N§3Úu###»téÒ¿ÿ˜^úB]Ø€±EDDøúúî—‘‘áëëkaaáåå%éEïß¿?uêÔÔÔÔ˜˜˜¶mÛJz-É;¬ŽrQJgÝ&€ùpvv¾xñb‰#iiiÒ]ñðáÃãÆsww_µj#¾(5-ÄQ10`>lllòòòб¶¶ÎÍÍ•âZyyy~~~¡¡¡›7o0`€—€ic €éppp(qÄÞÞ^Š ¥¦¦véÒ%--íܹs¤/”†`lZ­ÖÖÖ¶èG[[[q/ñìÙ³/¿ü²wïÞ3gÎܽ{w:uÄ=?PyLÂ`l^^^z½~Ñ¢EŽŽŽžžž"ž?##cܸqOž™={vÑžl@…IO´€˜ˆ[·nMž<9##ã§Ÿ~j×®Üåe` €)عsg»víÞ|óÍ“'Ošsú²ƒŠ(¥ã—.hÀ ‰²uOVVÖܹs:´}ûvWWW1êR1>KEÇcHLPåÓ÷ÀmÚ´áÌ™3¤/Ô…1`ª”={ö옘˜íÛ·÷îÝ[îr€r£ @}Ž9Ò®]»üüü3gÎH—¾Åw9´°°`xâRÊhã ñøñc­V¶aÆwß}WîrA£ÑhµÚ¢ýüüø® "Ö‚áøñãcÇŽmÛ¶íÆYÜ ÆÁsÀÌZnn®ŸŸ_XXØúõëß{ï=¹ËD@Pº“'O~ðÁ-[¶¨_¿þæÍ›5jdÌÂJàÊœ±3RPPзoß3füøãò¦/ Æ€(˹sçÆW¯^½ääd{{{¹Ë¤B €RŽøöíÛwòäÉ?þø#é ÓF0ªâËK Åæ7¥¦¦víÚ566699yòäÉ…ÿW!üüüä.&H)3 ˜ã˜­üüü+V¬Y³fÙ²eãÇWTô,ÄÀ4>}züøñ 4HII¡Ïf….hò(løöë×oÊ”)?üðé sC € ¾ 6LIIá)#˜'ZÀŒêñãÇsçÎõðð˜;wîÞ½{I_˜-À_}Cܸ¸¸:dddœ={vÔ¨QbÔ¨•Ræ3 0mýÒ¥Kááá®®®r—#2­V;yò䜜œÂmmmýýýå- ¦„0ƒ”Ø”¾   ((è­·ÞêСCrr²é¥¯ ^^^ÁÁÁŽŽŽ–––ŽŽŽÁÁÁžžžrÓ¡”‘WÆ€III™2eJ56mÚÔ¼ys¹Ë$Ä0EÈÊÊš>}úÀgÍšõóÏ?“¾@…À µsçÎV­Zåç秦¦zyyÉ] n0€2èt:‡ªU«Ž3fâĉÁÁÁµk×–»(£b3HA)#¯ŒÊ´cÇŽ &3fÌó=™™™²”˜ñxÆŒíÛ·ß¿vvö¯¿þ:wîÜ€€€OP¬gÏžn#X«V­sçÎ5nܸÄ/° cô«\¼xñ­·Þºÿ~iuÐÃ(À‰'¦M›V«V­uëÖµhÑB„ððð«AmÞ¼ÙÜÖ£Ðh4ÌÃ2[jê‚~ž¥¥eÕªUp!v÷îÝI“& :ô“O>9tèPaú ÅVƒÁlWƒ"}!i8++ëèÑ£#GŽœ:uª¤Paz½>44´U«VUªT9þüó3œ½½½/_¾,ÂåË—½½½å¨0A’Í®¶°(úïwÞygß¾}¥7‚é‚dqúôéiÓ¦åççoذÁÅÅ¥”ßäM ó¤¾.h½^¯×ëoݺžššºdÉ’2_bñ"ôü¹wïÞ‡~èáá1iÒ¤ÄÄÄÒÓWxn3ÀÄh4šÆtW4ÆWÚØØØ>øàêÕ«¥ÕÁ—kÀXôz}XXؼyóÞyç•+WÖ­[WîŠå’.žŒ±ð[o½uûöm#\@™RRR¦OŸ^PPÕ©S'¹ËÌ—1fA'$$°e »;wîLž>>’Žl™&£@ âwmÇÆÆ®[·îÈ‘#YYYõêÕëÖ­Ûœ9s:wî\FŒÒ8rä9 _«MIDATÈŒ3êÔ©³fÍšÖ­[Ë]Ž*ñeÎØŒ@¹effΙ3çĉC‡•»ãÊœ©ï1$2zôè‘F£éСC‹-Ο?Oú D¦&::ºU«VÉÉÉIII~~~Õ«Wå´Œƒâ"€Ó‘œœÜ£GF]¸€³X´Z­ˆgS…¢•A`] ˆN) ±•qãÆ F#KÿòË/üqÕªU]]]_`Îè‚ä'búذ¾zõª··÷¤I“H_À”(¥ÝI æé¯þåß¿ßßß?,,ìã?þè£lllŒ_0`>òòò›7oþèÑ£ÔÔÔüã¤/`’˜B (…^¯ßµk×üùó_ýõƒ¶iÓFîŠHˆääççWø111óçÏ·µµ ëÖ­›¼U0¥Œ¼2 ³•’’2oÞ¼k×®-[¶lÈ!r—à0 ˜ ÌÌL__ßþýû8ðܹs¤/`V`ÀP">†tïÞ½ùóç·oß¾víÚiii3gÎdM+ÀÜÀ@Ùt:“““V«urrÒét•9UNNÎÒ¥K›7ož}þüùåË—ÛÙÙ‰U'áK7P†ˆˆ__ßœœA222|}}-,,¼¼¼Ê{žüüümÛ¶}öÙgݺu‹oÚ´©ÅP ¥L}bËÙÙùâÅ‹%ޤ¥¥~†Âç‹.\ظqãåË—wìØQìH…IX€l®]»VâHff¦á/‰‰qqqùâ‹/6mÚôÓO?I—¾ Ù7€`  %ŽØÛÛòÂ'NôíÛwÖ¬YóæÍ;qâDŸ>}ŠÿßÂqåjÕªU~\¹F£ÑC GeÐjµ¶¶¶E?ÚÚÚúûû—þ’óçÏ1bĈ#GŽ|¸bÅŠ-Z\»v-11qõêÕ¯¾úªá/÷òò vtt´´´ttt öôô±¼¢M–(–Rв‚Zdgg¯_¿>00ÐÝÝýÓO?uvv–»"’.žXŠ0Ô‚ lmm׬YãááqìØ±&MšÈ]#€²eggõÕWË–->|øÑ£G›5k&wET1` 4|øÉ“'-Z´˜?þ!CÊ®ƒ0**==}ÕªU_ýõûï¿ÿÉ'Ÿ¨}1 Š¢¦p¯^½þüóÏ={öܼysíÚµfË–-¢_!%%ÅÇǧsçÎÕªU;wî\pp0é @-ÄàÙ³g:tÈÕÕµF...¡¡¡Ë—/ý*0gÏž=ûþûï{öì9|øðÎ;gff5lØP‡€哼ã÷Ñ£Gµk×ÎËË+£º ÍU¹–ŒÈËË ´³³›3gÎСC«V­ZùÓšÞP€XT¼ÇîÝ»—.]šœœ\F|^˜+oý½{÷6mÚ´nݺŽ;Ξ=»W¯^¢œÖT™ù‘𯀋»wïÞÂ… W¯^mÈ/[¼ˆ97bP(==}úôéM›6½xñâÁƒ£££ËL_(¯f‘îŠð­[·Þ{ï½7öèÑÃß׿,;ÑŸ2\rrr᫪U«ž9s櫯¾jÙ²e™¯ÒétNNN‚ 899ét:éË` 4Í cHÂK¾ðz•wíÚµvíÚ>>·oß¶´´,:(VRzyy;::ZZZ:::{zzVþ´ :vC‚A Ÿí©Zµj…ŸíÉËË íÔ©“§§gÛ¶m¯^½ºmÛ6)’ÒÛÛûòåËOž<¹|ù²···(çÑ)eê“°”,""bÒ¤I999…?ÚÚÚ†„„xyyøò«W¯nÚ´iëÖ­íÛ·Ÿ>}º‡‡G•*|ó *^ŠÒ@°’=?cÙÙÙ9--­ôW={öìÀ7nŒ÷ññ™:ujÓ¦M¥,ħ֥(ažŸ±œ™™YÊïÿûßÿ jÚ´é¢E‹ påÊ••+WþUúJ´´k¨P8¥´;i+YÓ¦MK<ÛÓ¤I“G %$$lܸñ‡~2dÈÔ©S]\\Ê<¹D·žQDA r*óÙž‡†„„´oß~ìØ±­[·NKKÛºu«!é fKü…8`z¼¼¼ôzý¢E‹®_¿Þ¨Q£€€€¢Ë'OžÜ²eKdd¤››ÛÊ•+ß~ûmI7“¡”n:: E¡Ñh´ZmÑ~~~ …feeétº-[¶deeM˜0aüøñ¯½öZÅNE4%£ )¾– ÁD$F?nÜ8''§£G~þùçiii ,¨@úír(‚X»ß9Q`eSJ+öŠèÄý+½{÷nXXØG}Ô¼yó‰'~ðÁuëÖëä XjÚŒ¦D¯×ÇÆÆnÙ²eß¾}ƒ á·ß~“»(0JiwÒ]%ÿJ/_¾º}ûöš5kNœ8qôèѵjÕâ607´€Qn~~~xUnnntttHHHJJÊûï¿Ú½{wÑk0 K6Åg ‰5 ©PáÆ K—.5|ã½^7a„† †††N™2åæÍ›ÁÁÁÝ»wgfHA)=ŠfÞ·)⿼'ܸq#,,쫯¾ªZµêÈ‘#Çÿ·¿ýM”JÀ°ƒ‰ñoàÆ =úöÛoCCCSRRFŒ1vìØN:‰R˜Æ€M\ÅÆk_¨ôž={väÈ‘ÐÐШ¨(WW׉'<ØÆÆF¬« ¤”v§™·€EôW'œ?^§ÓíØ±£N:>>>žžžõë×—«HP VÂ2Y…¦¬¬¬ Ÿ0Uº'Ô¨Q£k×®;vtwwúôé?ü’’2kÖ,ÒäE´œ"""|}} 'LeddøúúZXX”2aÊ…',X°àúõëVVVUªT±²² ìÙ³g•*|ߥPJǯyvA8aÊp?ŽŽŽŽˆˆˆmР¿¿ÿÀ†c´i²±±ÉËË+~ÄÚÚ:77·¼çÉÏÏÿé§Ÿ"""öîÝÛ¹sgOOÏ!C†ÔªUË ÿJ@\Ì‚6M%&LÙÛÛþr½^¾k×®¦M›zyy¾úê«b— ,'­V;yòäâ‹føûûò¤¤¤ÈÈÈo¾ùæå—_öôôLLLttt”°P€Ø`9N˜Z´hQff¦ƒƒC@@€§§g)¿_˜»‘‘‘Õ«W>|ø?üкuk£U Ób "ݺÍÞÞÞ—/_~úôéåË—½½½Ÿÿ½^Ÿ˜˜8gÎ''§>ø zõêÑÑÑçÏŸ×jµÏ§/ë6€Z(e꓊&aIQê ÏYÔÞµ±±>|øˆ#h1 KAD\6òyÏž=;~üøîÝ»¿ýöÛÂÜýþûïÛ´i#ݲPJ»SE-`)XXX:tèÛo¿ýî»ïêÔ©3lذaÆÑÞÙ±¥"ˆ»ld‰ñÚ1cÆØÛÛÿüóÏgÏžõóó#}À´Ñm(—¼qãFtttbbbÍš5»víúî»ï4¨\OÔN)¿Êï‚®ü²‘çÎûþû¢.]ºäáá1xð`www;;;±+ˆ†¥(åW±e#Ÿ>}zìØ±½{÷îÙ³'//ïïÿûÀÝÝÝ---¥, fA˯\ËF>zôèСC{÷ªS§ÎðáÃu:]‡ ‡{PJ»Sù-àðððËFnÞ¼¹ÄÂU¿ÿþû?þ¸oß¾'NtïÞ}ðàÁƒ jذ¡õD@´"ètºâËF.\õèÑ£Ÿþ¹0wóóó=<<<<<ÜÜÜ^zé%¹ëT¬ …¥¦¦¦ÆÄÄìß¿ÿøñã;v,Ì]VÌð"dee&&ÆÍÍíäÉ“çÏŸ·³³ëׯ_õêÕÙæ ¥4æäjVfggÇÅÅÅÆÆÆÆÆ^¸p¡sçÎ}úôyçw:tèP¥ ßNÀÜ1 ZL?NNNŽ?xðà±cÇš7oîæææææÖ½{wãÔP¸² Μ9sðàÁ¡ëêêZ½zué® P5¸"ž>>ÅøøøDEE‰~!ÔKüNMMm×®]ñ#mÛ¶=þ¼è@½ÄoY[YYåääXZZÉÏÏ饗òòòJ«ÃÂBÜ2…D]ÐÕ¤8i00+âwA×®]ûÞ½{Åܽ{÷•W^ýB¨—øܪU«3gÎ?röìÙ–-[Š~!ÔKü8p`hhhñ#¡¡¡ƒýB¨—ø“°>|Ø®]»‰'N:U„ 6lÛ¶íÌ™3¶¶¶â^õ¿lggwøðᤤ¤Æ7nÜøäÉ“‡"}(ŽuXÛ ÀÈ€@02 €RøêիÆ «Y³fÍš5‡ –™™)wEæ®\wÄâ9F«/”’’2mÚ´Zµjq/” \·ƒw“¢=ztäÈ‘õêÕ{ùå—»té²gÏO®ˆÎÎÎîÓ§O‡®\¹råÊ•:ôíÛ÷Ñ£Gr×e¾*pGôÿËh¥â…ÆŒóꫯÆÇÇË]¡ü·ƒw“rôêÕëÏ?ÿܳgÏÍ›7×®]«Ñh¶lÙ"ÖɱǪU«’““wìØQtdôèÑ:uš1c†ŒU™³òÞ EüCÂó¸5ŠbÈíà–)Êœ9s>ÿüó¢~ˆ³gÏ:4==]”“+¢íããSüˆOTT”\õ€;‚ |ñÅÅGœE!UD§¦¦¶k×®ø‘¶mÛž?^®zP;òÚk¯YZZ6hÐÀÛÛûÂ… ˜2ÞMеoß¾Ö­[‹u6Eðýû÷_yå•âGêÔ©sïÞ=¹êAyïÈàÁƒ###>|˜””äââÒ«W¯Ó§OK_&`‚x7)Ö½{÷.\¸zõj±N¨ˆÁ++«œœKKË¢#ùùù/½ôR^^žŒU™³JÞ‘7FEEíß¿_²a(¥·ƒw“BܺukĈ¦wïÞbS-àÚµk—h]ݽ{·D ÆTÉ;2tèи¸8 êÌï&%¸~ýz¿~ý>ýôSÓWPH·jÕêÌ™3Åœ={¶eË–rÕƒJÞš\€Xx7ÉîÆ+W®ìÛ·¯¸gVD8044´ø‘ÐÐÐÁƒËU*yGvîÜéêê*A]€ÙáÝ$¯Û·o»»»/_¾¼OŸ>âŸ]¯}ú$%%¥§§;88ØÙÙ½ÿ¾É`?:Ï“'O~ùå—¥K—~üøñÇ‹/ž={öóçÏùOððð`±X………ÇŽÛ³gÏùóç›ûC &.´BƒÿYõíÛ·¸¸˜÷„Ù³gïÚµ‹ÿü±cÇò_ÛøÎ uuutÜg±XJJJõžÓ¶m[~ž&÷Ã`0|}}ô4ƒáããS÷[7nœ={v#©ê¾öGßšmN$ …ß`€V©÷޶}ûöæææÿþûoÝçÄÅÅ9::ªªª*))92""‚÷ø­[· xŸæ=RPP0sæL uuõ¹sç–––6RÀõÛ²„­éo€¤¤¤1cÆdee‰¨M¨²üýØœÿ éh 6lذfÍÑíŸ*,")))¤#€ä)..ÎÉÉY¸p¡èAÝyÚVÎ!3™Ì²²²±cdž……)** 1HÑ-hR·€[ kÀÐz¢kšOAP €©(à%K–ÄÅÅ‘Nðh»PZwÖ>>>ÞÐÐPYY™l$8Xn•¢}€~bbbœµ´´ÚµkgnnÒÈ“¹Þ‘ˆŽ(‰ÒÒÒÄv,©(`Z²¶¶þúõkHHHvv¶¿¿¿··÷ñãÇivDq urrÛá¤b š'33³¨¨ÈØØ˜T$áZ½zõŽ;øCÛW¯^M™2åGc8¡L¥ tDÉÂårÍÌ̼½½'NœX÷qLA ÁóçÏ=zD:ÀÿÉÌÌ\¼x±ªªªŽŽÎš5k*++zùÎ;ëN,ëëëgdd4òüŠŠŠ… jjjª¨¨8::&'' XÐ#J .ÈÉÉM˜0AlG”¢žÉçîîÞ§OŸ¤¤¤ôôt;;»÷ïß‹ôˆ’¢¶¶vãÆÛ¶mÊJy3IÑ4• 4(==·Ùx|ÿ÷­°°ÐÒÒòرcVVV ¾„Édúøø¬_¿žÿˆOZZZ`` ˆŽ(Aª««¯\¹âììüý·DØ&"¸Ç0%4òOãp8âLÐ ‹µqãÆ^½z)))ñþ ËÊʶlW999#FŒˆŒŒlä9 #==½î#iii;wÝëòòòI‡5——WËþ™ÜFÛ¤•h;LüÑ{–ÌÌL''§‡Šsžà{žžžoÞ¼Ùºu«¡¡¡ŠŠJee¥’’R þ&gffŽ7n÷îÝvvv<Éd²X¬º7§a±Xjjj555":"=ˆn,'ŠRY×®]/\¸€ö₃ƒŸ>}Ú­[7Þf½åØfNgee9::îÝ»×ÖÖ¶É#feeéêêÖÝÔÒÒé¡Rtÿ×€ zãÑ€€€ºßmr^”Á`äåå988lÛ¶­™]TosÔ¨Q"="4B € ===srròòòvíÚõñãGA÷ààà°nݺ±cÇþè õµ¯_¿ö÷÷ÏÍÍÍÍÍõ÷÷?pàÀ† „{Dh>©[æ;yòä´iÓÔÔÔÄ  ®ÂÂÂ¥K—Þºu‹ÃáüüóÏ~~~ªªªýMnpÒ¸¨¨H]]·ƒ‚‚þ“ËÊÊ–-[vùò媪*++«;wöë×O Ì‘–D·,½¼gÏž©S§öèÑCl‘ÄÉßß?55ÕßߟtŠÊÎÎÞºu«ŸŸ_ãOC Ÿ)gbbròäIÒA(jñâÅJJJ;wîlüi(`¡€àG>~ü8hР”””:4þL\ ZT¸\nYYé VÿùÏ<==›l_‘’ö>pàÀîÝ»I§ñ)..Ž÷ôô$ƒ¶ó´Íœ4¨®®–——Çu9¤ —Ëmæ_~¬ kÀÐzX€Æäää42ªÖT_ll¬‡‡‡ºº:æ[ Ì`0ùùù+V¬  …¸\®›››Ž5{öì:<|øP Ç¢7©»Cƒ444ÌápddðŽ$Ïž={:vìèâââêê*êc%''‹úR}Ã`0222...h_³ÌÌÌÅ‹«ªªêèè¬Y³¦²²²;‰?vìØš|fEEÅÂ… 555UTTQ¥d¡rˆ6l˜™™YvvvTTÔ§OŸ6nÜ(èX,Öœ9sTUU›|²»»{Ÿ>}’’’ÒÓÓìììêÝ‘ÆX,ÖçÏŸI§ø´=U¸eç­½}û¶GJJJ¢ˆЈ¢¢¢Aƒ¥§§ó6›ywÞß~û­K—.ëׯç¿êGú˜L¦ÿ™ ÃÇÇ'---00P #ÖÝ¡5ÈÖ­[“’’Ξ=+è q´˜ìÙ³'11‘t •••>>>FFFÊÊÊL&SCCãÓ§Oüï6çî¼W¯^MNN^·n]38sæÌz›±Å¼½½™ux{{‹óikÖ¬ñõõmÁƒHIÒûHÖ[3BžžžoÞ¼Ùºu«¡¡¡ŠŠJee¥’’’@¸ôõõïÞ½Û³gOþ#€Y,–¢¢"ÿ‹¥¦¦VSSÓ²üôgÖÓÓ“ËåîÛ·¯¯Ý?gAüôéÓnݺñ6ë-Ç6gB8==][[»Þ·x/l°3²²²tuuënjii tDIôþýû³gϦ¤¤R¦ Ȩ7 ¨ûÝæL7øx#3ÆAAAõ6G%Ð%‘¦¦æÅ‹ë¾Õ p¢¢¢-ZD:М£££§§gNNN^^Þ®]»>~ü(ôCÔÔ¾~ýÚßß?77777×ßßÿÀ6lúA©FMMÍÚÚštŠ €0tèPiø¥²üýý Fß¾}{õê•’’RoÜz………u9zôhBBBïÞ½uuuCCCÃÃÃõõõÝ-ÿÔ§z_ƒ $f ]Ptv€(øûû§¦¦òjZ CÁœ}’’’ÒÓÓìììêݱ9X,Öœ9sTUUERzÐvê@“÷îݳ±±î>xŠŠŠ ”žžÎÛôî¼Í™‚öññY¿~=ÿŸ´´´ÀÀ@ŽøÛo¿uéÒ…¿LA·|ÏtýÁÑþw$]eeåŽ;‚‚‚>þÌb± †¬¬l‹/ÛœNOO×ÕÕå?’žžnee•••Õü£\½zu÷îÝQQQüSS›ùÇÖÛÛ›ÿ¿7[,00Pœ§§ç›7o¶nÝjhh¨¢¢RYY©¤¤Ôâ?\Í)`‹¥¨¨È„Åb©©© ´²¦¯¯÷îÝž={6ÿ¸’'aQÈ‹/RSSI§‰|üøqƒQo9–Ù¨–±Þ`7++KKKK #¦§§kkk×{œø-9RVVF0@Ë €–œœüéÓ'Ò)@âÕÔý.·Q-;bPPP½ÍQ£F tÄoM¤Ö‹ŒŒÜ¹s§¼¼<©-FÛ©ÚÏŠ€¤›9s&“Éܵk—ŒŒL``àÓ§O/^¼(Ü)èº2™LWWWsssÞ- .\¸°eË–èëë·æ_Aömmm­‰‰É¦M›&Mš$¢C` €nüýý Fß¾}{õê•’’RoÜLßOógƒ 544ê>ùèÑ£ ½{÷ÖÕÕ oeûwôèQ---ѵ¯HÑv˜(†7e¥¥¥øP–¿¿jj*¯æi©¶¶ÖÈÈèÒ¥Kýû÷ÝQp´ÀD]Àyyy£FŠ—‘Á,P‘‰‰ÉÉ“'MLLH¡²²²¶mÛŠô(`‰a\UU¥   ÒCY(`á$,h=œ„@+(àÖò÷÷¿víé aäHx666:t $ mJ± @?µµµâö` €±víÚ={öN!˜‚‹uëÖ­)S¦@[/_¾¼yóæ›7oHŒ€…ƒÃáܽ{·¶¶–tzâr¹Ë—/ß¼y³ššé,ÂAÛ…R¬ÐɹsçvïÞýìÙ31_â €NòóóóóóŒŒÄ|\°ÀHpUUUuu5nÒ@8 ZblÛ¶íÌ™3¤SÕa,dl6[Nç–ÐFÀí Í ,,kôèÑeee¤ƒH°ŠŠ ÒD,JJJÛ·ooÛ¶-é ’*--­oß¾UUU¤ƒˆ NÂ*7nÜÈ‘#W­ZE6NÂ)råÊ•?.[¶Œt¢J?yòÄÝÝ]GG§M›6]ºt5jÔ¥K—H‡‚¸¸¸›7o’N IX,ÖÊ•+ýýýåååIg!ªðÒ¥KMLLnß¾]VV–””´f͚͛7{yy‘ÎÕZ§ººšt IÂf³½¼¼lmmI-ê.”¦§§4¨¨¨¨e/Ç0´ž4®ËËËËÊÊ’N T,àââ☘ggçß~ût¡IJJâp8¤SUP«€™L&“ÉTWW·¶¶VUUõöö&Hh|||ÒÒÒH§ª Vs¹\.—›››”œœ¼eË–&_âííÍlˆÒ äÂ… †††¤SUP÷L¥¨¨(77·ÏŸ?·ìå8 @‚p8j y¤ñ$¬Aƒååå‘N!|øT@=µµµ#FŒHLL$D¬¨[À=222"BÈÞ¼ycooO:µ:tHFFÆØØ˜t±¢Ê<í˜1c<<<,,,Ú·oŸ——wçÎõë×;vÌÑѱe;¤ìtqqq»víH§ Šœœœþýûß»w¯OŸ>¤³4@tmB•–ŠŠŠÚ¿tttqq±–––¥¥åêÕ«‡ÚâR¶€ .ggg}}ýæœuKý XèPÀÔÇápvìØáé驨¨H:KÃPÀ£xŸ8qB^^~Μ9¤ƒ@cD×&r¢Ø)4ÉÚÚZEE…t †ÒÃÄÖ ø$‚4~€ÆPÀ$q¹ÜÝ»wWTTâ†&‰Éd*(( €@ªàÖp<´](Å05?~íÚµVVV¤ƒ4 Ö€€Μ9“‘‘annN:y(`J¨©©yöìé¢UXX¸zõê#GŽÈËË“ÎB ˜>þ|ðàAÒ)DkÅŠ...þòÐv¡kÀTãëë»páBɺ .E)00´NÂ’l6»¤¤„t 90µìÝ»÷ðáäS€ÈÑvžVB§ kjjpr u` X`ZÀ@)X–:x÷4P]]M:u¡€)jêÔ©/_¾$ åjkkmll?~L:EÉ‘ óóóëÚµ+é-·gÏeee\vãGh»PŠ5`‚RSS‡ öäÉ===ÒYZkÀ 18Îüùóׯ_/éí+R(`J+//wuu­¬¬$@0 ,X¼x1é”FÛyZÚLAGDDØÙÙ1™LÒA¤>,0Ú0„5`ZAK†?:tˆt °dPUUUPP „†¶ ¥X§ÌÌLZ^>kÀ@]ïÞ½355ÍÏÏ'D’ €%ÌÛ·oŸ?N:Àÿáp8¿þúëúõë555Ig‘$(` “žžþîÝ;Ò)þÏÎ;åååÿýwÒA$ mJ± éééÏž=ÓÖÖ&E$p!¡€Ä€Ëå¾yó¦wïÞ¤ƒˆ X`´/àÔÔÔ:¨««“@g8 ê;uêÔ‹/H§€¢í0‘ö#`Œ€h,ñ2220Ö8(`‰·hÑ¢””Ò)@Z]¿~t : íB©ô¬s¹\&“I:H WW×:ìÝ»—t1]›È‰b§ Nh_›K—.ÅÇÇ¿|ù’t: í0QzFÀ|%%%jjj¤Sm}ùòeРA¡¡¡fff¤³ˆ΂†&ÔÔÔ 6¬°°t ­€€€%K–HUûŠm‡‰R8®ªªRPP èŒÃáÈÈH×È —¢˜0¦ A555¤#@PÀtSXXhff† 8ÚÎÓJótaa¡††ét€5`Is€°` Z‚Ã᎒ŠË庸¸$&&’B[(`Úúô铵µ5¦ eöìÙ“žžnddD:mÑvžSÐ #++«K—.¤S€äILL´··üø±ŽŽé,„a Zí -PQQ1}út___´¯H¡€à°ÙìeË–¹ºº’Bs(`úKLLœ2e é 1ÔÔÔ-ZD:ýÑv¡kÀ|çÇzzz¤ƒH|X`(`h=œ„@+(`)òòåK777Ò)€ÁÀ´Ta³Ùïß¿744$¨%;;›Åbéêê’BE˜‚!““Cû@=µµµ®®®.\ Dê €¤š···¼¼üš5kH‘:(`iôòåË_~ù…t /**êäÉ“22¨q£íB)Ö€Å`à±²²Ú´i“ é Ô…Ï  Ð$6›-''G:¥á$,>´/A(`©öâÅ‹9sæN šYž;w.222666//Á`tèÐÁÔÔÔÖÖÖÅÅECCC\9†)èæ`³Ùééé½zõ"€¢LAùòeþüù]ºt ²±± ÍÎÎÎÎÎ µ¶¶>{öl—.]ÜÝÝ¿|ù"ŠX rrrh_"~XìJJJ:::¾¾¾ >áÖ­[+W®üðá‹ÅeÂÂà{µµµ²²²¤SH#`ggç/^ü¨} †££ã‹/œE Ä ÷ ÁÁÁ...¤SÀÑv˜ˆ°@pÏ`Ú{ûö­••ÕíÛ·MMMIg‘$ø°ÀPÀ|,ËÒÒÒÃÃcþüù¤³H’Ÿvrrâÿ\WQQæ1è o\ègñâÅýû÷GûRJÓ¬££Ó¿ÿ3gÎð 733Ãt%-¥§§5Št ²%K–:tˆt øÍYÇÅŹ»»wîÜyÏž=þþþ ‡îÝ»·sÄÄÄ8p 22²ºººwïÞüñÇäÉ“[³CLA·XFFF÷îÝI§ —¢411yöì™­­m¿~ýîÝ»'Üöe0ÖÖÖ_¿~ ÉÎÎö÷÷÷öö>~ü¸pÍ„ö.EÉd2Ûµk§©©Éd2…žcÕªUwïÞ6l˜²²òàÁƒ·mÛ&ô£€@ª««IG ­fp\\ÜСC“““ïÞ½5nܸôôtáæØ¹sgÝ^×××ÏÈÈî!@ ………ƒFˆHÓ÷ÁX»vmPPСC‡ÆÏ`0üüü"""ÆŒ3sæÌ7Š(Ö­[·ŒE´sh èèè6mÚ@OM€?~üÏk_žQ£F=þ<55UDºÞÞß IDAT™ ÿú믽{÷ŠhÿÐLêêê¤#@KÄÆÆþõ×_¤S@š.àóçÏÿôÓOõlß¾ý¹sçD(77÷çŸ>tè••UsžïííÍlˆ(²I­’’Ò ¹ œœœ @:4ZŸÕÉÌÌ7nÜîÝ»íììZ¹+| IXªªª tÿþ} ˆ¨¯¦¦f̘1[¶l!…&| iîܹ¿¸¢¢bîܹŠ’••åèèèëëÛúö!RPPxþü9Ú@"xzz*((øøøMûaÿûᅢŽˆˆøÑÂÃÃüï¿ÿ %G^^žƒƒÃ¶mÛlmm…²C"EEEÒ Y† rþüyÜpP"ü°€SSS‡:nÜ8kkëC‡½yó¦´´´´´ôõë×´²²š0a‚¹¹¹°NÅrppX·nÝØ±c…²7‘>`b€ÊÜÜÜÔÔÔH§€fibjûëׯAAAQQQqqq_¿~e0:t055µ³³›1cÆ÷'gµéÒ…Ë庺º®_¿žth•¦GÖååå ,èÝ»·««k—.]²²²Îž=ûúõëãÇ+++‹'e ` ZäpsníGÁªC@ë‘\æ6ƒ(’dùðáÚ5kH§¸GçÎGŒA:€Ä í<-¦  õp-h$xë D•••sçÎåÝè BÆf³‡ž——G:p¹Ü_~ù¥ªªJSS“t2ÚÎÓb š OŸ>õìÙ“t :X·n݃ÂÃÃtM$5ѵ‰œ(v Rí §NºxñâãÇѾ´DÛa"FÀTPXX¨¦¦&'‡÷y-‘’’"//o``@:ˆT#y! …¦‚Å‹ÛÙÙýüóϤƒ´ X`(`*¨­­•••% åð1$Hh_€Aƒ8ÅÄÄN@!(`‡>DGG“N@il6 gR…¶ ¥X Â»à†©©é²eËHgÿ5`:ûóÏ?ß½{7þ|ÒA@|PÀ VUUU .,..&€B|}}¯]»výúueeeÒY@|p…+…±cǪªª’@IIIþþþ÷ïßÿé§ŸHg±¢íB)Ö€@R”––â])eáBCS_uuµœœœŒ ÖA€ºpÐω'H§ ƒ¶ÃDŒ€©¯¼¼\QQWË*ôÀPÀÐz˜‚:c³Ù÷ïß'@òóó£¢¢H§J@y_¾|  @䊋‹îÝ»G:Pmçi1 ”R^^îàà`bbâççG: kÀCu°X¬ñãÇëèè;vŒÉd’ŽÀ0H‹?ÿüóùóç¤S›Í=zôÑ£GѾÀGÛa"FÀêéÓ§}ûömÛ¶-é ¦ [ ðíÛ·’’6›­  Ð©S§æ|äšÃáäçç—••1 555UUUÑ' .ѵ nÆÔ•——סCÒ)¨…Åbåççùò%;;;??¿¤¤$//¯¨¨¨¸¸¸°°0//¯¼¼¼¦¦¦¤¤¤¸¸¸]»vjjjòòò•••¹¹¹µµµMîŸÉdjjjò®K\RRRRRÂd2yM,++«¥¥¥©©©¦¦Ö¾}{MMÍŸ~úIUUµsçÎݺuã}Kô?ú í0#`I÷òåK//¯7nB@yyùçÏŸ?~ü˜–––‘‘‘™™ùùóçÌÌ̼¼¼ÚÚZMMÍ®]»véÒEKKKUU•W„êêêíÚµëÔ©SÛ¶måääÔÔÔÔÕÕ…¦²²²¤¤¤¬¬¬¦¦&??ÿëׯ¥¥¥EEE_¿~-,,,--ÍÊÊÊÌÌÌÍÍ-))ÑÒÒêØ±c÷îÝ»wïÞµkW]]]]]Ý=ztêÔ kŸ ¡0-00 °Ùl99šOÒ¿~ý:555===---=====½¢¢¢G=zôÐ××ïÙ³g×®]{ôèѹsçŽ;Rùž9¼†ÎÍÍÍÈÈà½cHOOÿþý—/_ŠŠŠ´µµõôôôÿ?###mmmº¶2—Ë---USS#„,00PзoßâââRRRÞ¼y“––VZZÚ»wo}}}^?éééuìØ‘tR!«¬¬|ÿþ=ïïß¼yóõëW===ƒ>}úôë×oàÀúúú4¸;—Ëýý÷ß9ÎáÇIg!@ L'‡rppÐÑÑ!D0\.÷ýû÷±±±±±±qqq)))ß¾}0`À€úõë׫W/==½nݺÑuؤ²²²´´´wïÞ¥¤¤¼zõ*...//¯wïÞýû÷755555íß¿¿ŠŠ é˜[¾|ù“'OîܹCåé h>°ÀPÀtröìÙ‘#GvéÒ…t¦¥¥¥=yò$..ŽWºíÚµ311áÕ‰±±qÏž=¥¶n›£´´4%%%..Ž÷LIIéÙ³§©©©‰‰É!CÌÌÌ”••IglŠ+îß¿.¬5x ,00ˆGyyù‹/=zôøñã'Ož(**ZXXð×ÄÄ'·FMMMJJ ï­ÌóçÏ_½zÕ§O sssKKKmmmÒëKKKsww¿råJûöíIg¡A LWeeeÄ/Ó‘››ûèÑ£èè蘘˜ÔÔÔ˜››[XXXXXtíÚ•l6«¬¬|ùòåÓ§Oyow8Ž¥¥¥••U¿~ýpci°ÀPÀ´ôîÝ»¹sç>xð@ü‡þúõë;w"##cbb ,,,¬­­­¬¬ÌÌÌÚ´i#þ<ðùóçDGG?xð ##ÃÂÂÂÆÆÆÞÞÞÔÔ”gru €†¦+‹¥¤¤$žc•——ß»w/<<üÞ½{Ÿ?9r¤MïÞ½±”K)EEE<ˆŠŠºsçNnnîˆ#lmmÇŒ£¯¯O:H<°ÀPÀÐ2\.÷Õ«WaaaaaaÏŸ?yòdÈ!“&M¼%ýTTTܹs'444,,¬M›6'Nüù矇 ÖâÕ⊊ŠI“&yxxüüóÏ Tƒ ‘––rõêÕׯ_?~Ò¤I£GÆ`WJ¼zõêÚµk—/_ÎÉÉ™4iÒĉíìì:“®¤¤d„ zzzÇŽÃÙ×´‡ Xªäææ6çòiiiÁÁÁÁÁÁ999“'Ož4iÒÈ‘#q³ÔJOOç½KII™0a‚““Ó¨Q£šü}(((ptt|øŠ+†.”Ýæçç£}AÌ >|ðàAccãåË—3†Éd’C ,qâââ|}}oÞ¼9kÖ¬¥K—âÓ@ÕÕÕÿþûïž={ª««—/_>kÖ,\F²` h‹Ë円†ÚÚÚNš4©ÿþéééûöí]û~ùòå?þÑξצM›9sæÄÅÅùûû_½zU[[ÛÛÛ;??Ÿt.  ÄÔÖÖž;wnàÀÿùÏæÏŸŸžž¾zõjuuu‘´}ûöæææ"=H–ðððÊÊJ1ÈÖÖöúõëÑÑÑYYY½zõZ¾|yFF†Ž ”…*++>lhhxèС­[·ÆÆÆº¸¸ˆçc***“'OÃ@"ìÚµkÞ¼yâ,Â^½z=z411QVVvàÀóæÍ{ûö­ØŽ”‚±*--ݱc‡®®nhhh```LLÌØ±cI™’™™ùêÕ+"‡âjjj-ZtæÌ™Çˆùè]ºtÙµkWZZšŽŽÎˆ#¦M›öâÅ 1gâPÀ &%%%[¶lÑ××OHH¸}ûöõëׇ F6Rbbâ½{÷ÈfR&Ožœ™™yÿþýnݺ‘Êо}ûõë׿ÿÞÊÊjêÔ©ãÇǵۤ mOÆYÐÔQRRâççççççàà°~ýzñ6¾÷òåKê\R­ººúäÉ“[·n566öòò2déDð_8 $oÔk``ššúàÁƒÀÀ@ʶoAA›Í&ÄÇÌÌŒ:íË`0Ú´i³hÑ¢wïÞ?ÞÉÉ £ai@¡ß? “²²2Þ„óÛ·oyÕkhhH:TcvìØqþüyÒ)@ÚµiÓæ·ß~ãÕðÔ©SÇ÷òåKÒ¡@Th;O‹)hRª««>¼uëV;;» 6P¼wù8¥ÆCÕÕÕ'NœØ²e‹……ŦM›ŒŒŒH'’R˜‚ P[[{êÔ)CCȈˆ°°°3gÎHJû2Œºí[÷þ¯@âù˜¯ÐñGÃC† ±¶¶vwwÇç†i†Bëáá¡®®ŽË¥J.—{åÊ•þýû]»v­ÿþ¤CµÜ´iÓž={F:Gjjª©©é£GHi!%%¥Õ«W§¦¦vêÔÉÄÄdÅŠ¸ŠmP¨€gϞݡC‡‡’‚‰‰‰177ß´iÓ®]»¢££---I'j­#GŽ <˜t ‚ððð#F¬\¹RÒ-Ûµk·yóæäääšš##£M›6•——“­EÅ…R¡L¸c X ’““ÿúë¯W¯^ýý÷ßÎÎΘºJÙ·oßöíÛ/\¸ ¬{jQÄÇ×­[wÿþý 6Ì;WNNŽt"šÃ0PË—/_æÎkgggmmýúõë3fв}¹\îÔ©S?þL:´Dyyù£GhÖ¾ C[[;((èòåË.\èÛ·ïåË—I'‚¢â0#`*«¨¨Ø¶mÛÁƒ-Z´víZUUUÒ‰D+..nàÀ´|{4±zõê¶mÛîÛ·ÏÔÔ”tzÂÈãr¹AAAFFFïÞ½‹ß¼y3íÛ—Á`˜˜˜ }²FõòåK77·qãÆÍŸ??''‡t"€Ä°··7³!¤sÑÍLJ âççtîÜ9‚—Ï%¥¦¦ÆÝݽ°°t€ÿ!##ãîîþæÍ›öíÛoÞ¼™Åb‘ÍBÅyZLASJffæÚµk£££·oßîââ"Íonnܸ1nÜ8iþ P®£ÂóñãÇU«VÅÆÆîÚµkÊ”)¤ãЦ €ÊÊÊ­[·8P[[ûÍ›7®®®RÞ=ãÇ—òŸ5ÅÆÆ0³¯ C[[ûâÅ‹Ç÷öö5jTrr2éDÐ04ìêÕ«}ûö}öìÙÓ§O7oÞ¬¢¢B:…TUU­\¹Ĥ‚ãÇ;88xyyuêÔ‰tª°µµ2eŠ­­íÒ¥K‹ŠŠH'‚†¡€¡¾·oߎ=zݺu‡¾r劮®.éD”#''7pà@eeeÒA¤ZyyùìÙ³ýüübbb¦M›F:µÈÉÉyxx¤¤¤°ÙìÞ½{=z”ÃáõQ¨€ëž?…s©ˆ`±Xëׯ·²²;vl||¼½½=éD%++;{ölü~§««ûôéSÜ¥àG~ú駃†……>}ÚÒÒ2..Žt"ø*`nCH‡’"¡¡¡ÆÆÆiiiñññžžžòòò¤I†êêêuëÖá¼SñSQQÙ¸q£’’é T7`À€˜˜˜… Ž;vÙ²eÅÅŤÁQ¨€”ŒŒŒ)S¦¬X±âÈ‘#çÎëÒ¥ éD’„Ëåêéé)**’ðCL&sîܹÉÉÉ•••}ûö=wîéDÀ`PócHB!5‡ÃÙ¿ÿ¦M›–.]ºfÍÒ‰@´ž\¿~=Ú·õjjj<==ËÊÊH¡!܃OXÌÍÍ_¼xamm=xðà;vÔÔÔN$½PÀÒ¨¬¬ÌÓÓsüøñ¿ÿþ{TT”¡¡!éD4!##3dÈ|dK¸ &Ož¼lÙ2ÒAèCNNî?þxúôitt´©©éãÇI'’R(`©sóæMccãâââääd777œÊ+D²²²¸\‰pEFF8ÐÐÐ0 €tºÑÕÕ ]¿~ý´iÓ–.]ZZZJ:‘ÔAK‘‚‚‚Y³f-]ºôĉ¤Ñ›ÍvssÃÄikCaAÓMnnîĉ}}}ü¼¼pIg š={vtt4éTqãÆ~ýúq8ü9¢–!C†¼|ùRGGgÀ€—/_&‡†h;O+SÐ!!!¿þúë† P½”UVV¦¢¢‚é袢"OOÏG}|8}útÒq€r ¤¯¯Ïûº¶¶6++‹HŒ‡åææ&&&®^½ºM›6DbeuêÔ),,lĈƒ ŠŒŒ$‡ŠPÀÔ’””4xð` GñÿÈüH\\Ü’%KˆZOOïòå˧NêÔ©‘@}²²²^^^³gÏþûï¿ip^ŽpÑáL¥IâIXgΜY±bÅîÝ»gÏžM: H .—K§|-eff:;;khhœ:uJCCƒtÁà$,šc±Xîîîÿýwdd$ÚÂo_.—ëææFjF ]»vŠŠ244433{úô)é8T&ïýû÷–––•••Ïž=ÃÙÎÐbL&ÓÍÍ­sçÎÂÝmEEÅ£G„»OB¼³£÷íÛ7qâÄŽC (`Ânܸaiiù믿ž9s¦mÛ¶¤ã€d³µµåˆÓÒÒ>þÜš½ÕÖÖ:uJጉ'>zôèøñã³gÏ®¨¨ ‡001ÇËËËÃÃãÊ•+‹/&èæéÓ§wïÞmñËCBBúõë÷Ï?ÿ\¸páèÑ£B RNOOïÑ£G²²²ééé¤ã$yg*5ÅOÂ*))™5kVqqqppp‡HÇú«©©‘——oþówïÞmll: X`b.àÊÊÊ_~ùåË—/W®\ÑÒÒÛqHILL466æßý@Ô:´iÓ¦K—.µfa¥°LiyyyvvvL&3""í bÀår###oܸA*@mm­§§ç·oßH)ôÛo¿8qbòäÉçÏŸ'E8PÀ­õêÕ«¡C‡ÚÛÛá”+µ’’’ýû÷÷íÛwùòå,‹T YYÙ»wï¶oßž·YPPG* HGGLjˆˆ?ÿü“WËB·ÊíÛ·yW¹òööÆ\ˆZQQ‘®®îÇ9’àääD:Ñ¥¦¦†„„NR¡_¿~Ož<‰ˆˆ˜9sfUUé8­‚5à–;zô¨···ø$@šñÇ”jhhh``@:Ðï´›ÌÌÌ«W¯Šú&†X¦Þ Ï»víºÿ>ÚĉúíË`0rss%}h§¨¨xîÜ9 ‹áÇúô‰tœÂX`ÕÕÕîîî©©©×¯_Ç)W tŸ?þçŸZy+ꨭ­õðððóóÅ'£üüüvìØ"º+þbLß¾}3fLyyydd$Ú„¨´´ôĉ666fffyyyC† !H8jkkíííùíK×wü@ÊÒ¥K80nܸk×®‘Î"09Ò$IFFÆØ±cGµ{÷nÜX„+//ïöíÛË—/wttlÓ¦ é8BÓ¦M›iÓ¦ñ7oÞ¼yéÒ¥“'OŒ43iÒ¤®]»Nš4);;{áÂ…¤ãSÐÍ•˜˜8nÜ8OOÏ+Vq·R…ËåþôÓO¼Í7oÞüôÓO˜L‚ÖKOOwtttvvöññîgR0Mؽ{÷Fµ}ûv´/´ÒóçÏ¿~ýJ:1L&“ß¾ ãæÍ›="˜hCOOïÉ“'QQQ¿üòKMM é8Í‚pÓ.]ºôÛo¿9sfôèÑBÙ!H.—ûüùóààà‹/*))yò¤´´týúõ¤ã€˜ÄÇǯ\¹òîÝ»¤ƒ,ËÉÉINNîüùóͼE&Ö€Eåܹs , EûJ‚‚‚aÆihhxxx¼{÷ÎÈȈt"ŸÖmßààà Ìb¦¤¤tåÊEEÅñãÇ———“ #Õ#àcÇŽùøøÜ¾}»oß¾âITÀårcbb ¤¢¢B: WRR¿hð¡C‡X,î¹B{µµµ‹-JNN¾yóf“{À´Àšü‘íÞ½ûÀááázzzbK¢V\\Ñ©S'Ò¡@b”––VTTtìØ‘·¹yóf}}ý3fM¢ÀårW®\Ö¡C‡Fž‰Xã?2//¯ .„‡‡×½¶ÐÀˆ#jkkMMMMLLLMMûõë'++K:HªÜÜ\þíŠûí· &Œ;–l*"ooïóçÏ7Þ(`ýèGÆårW¬X}ûöíÆßõ•––¾~ý:))iĈúúú¤ã€t),,”——WUUåmŽ3ÆËËËÒÒ’·YPPP÷VÇ )|}}÷ïßßÈl(NÂŽÚÚÚùóç?{ö,22í+Y¶oß®­­Ý¹sgèèè’’Ò‰@êhhhðÛ—Á`\¿~}ðàÁüÍ©S§&''ó7>|Èb±ÄšZdÅŠþù§µµuÝÿûÄCŠFÀ555³gÏ.(( ÁÙ7TSUUõáÇôôônݺ 0àû'¤§§3™Lmmméz×ÊÉÉéÈ‘#¼ÍÝ»wÿþûŠdSÁüûï¿Ë—/¿~ýú÷·N¸µªªª¦NZYYyãÆ ´/¥œ>}Z[[»]»v'NÜ¿ÿ»wï|šžžž®®.Ú$Epp0¿} FYYY›6mx_s8KKK6›Íÿî§OŸÄþ׌3Ž=:nܸ‡Ší þüyùòåááá ÃÞÞ~ï޽ݻwoñÞê¾ga±XS¦LQSS;sæ î‹.6¥¥¥ïÞ½ûüùszzúÇ.\øýÓrssËËË{ôè[ ”àp8 &&&¼Íòòò¡C‡&%%ñ6Y,Ö®]»pq"ÂÃÃgÍšuáÂkkkþƒô—••ÙÚÚššš~úôéÓ§O¦¦¦vvv­ßsyyù„ 455ƒ‚‚оÂUUUõþýûÔÔÔ¿ãîî™™ihh8pàÀŸÖ±cG]]]´/H~û2 ~û2ŒÚÚÚvíÚñ7322LMMù›%%%AAAâÉ)…ìííÏŸ??}útÞPPä¸Ôàëë;sæÌºÌœ9sß¾}-Þ!ïŸVZZ:bĈyóæÕÖÖ¶6¢ô©®®nðñ‡öîÝ[SS³M›6:::+V¬s0©’ŸŸÏÿ:''gÆ üÍׯ_ÛÙÙñ7¿~ýzîÜ9þ&›Íæp8â I'<èСÃÍ›7y›¢+JªðÈ‘#ÃÂÂê>fkkÛâ2ŒÒÒR+++www´o]_¿~ÍÌÌlð[‰‰‰VVV½{÷ÖÒÒRPPøÑÏ¿´´499977W”1 i555ÙÙÙüÍOŸ>mß¾¿ùâÅ‹!C†ð7ß½{çååÅßÌÏÏðàXbJž'OžtìØ‘×Á¢+`ª¬wìØñÕ«Wü Ð0Œœœ“ììì–íÉdZYYõêÕëÈ‘#4>s§¢¢âñãÇ%%%l6»¬¬¬mÛ¶NNNß?-11q„ %%%ß¾}SWW·¶¶¾råÊ÷O+..Ž×ÔÔÔÒÒRSSÛt’———`ooÏÛLII ܶmoóÞ½{[·n ãm&$$\¼xqÓ¦M¼ÍÏŸ??|øÐÅÅ…·YTTôåË—~ýúñ6y'”Ñl!ééÓ§'N|ø0kÖ¬ªªªÒÒÒÒÒR]]Ý|ÿ´´´´… ª©©ÉËË«¨¨èÿ¿öî.¤©?ŽãøÆ?½Ê§VYt!¥ÝLIFAæ$2¡i …BƒvQ7Q‘P»H$³%ª]äEš£P Y7©å&‰EO&)+Ý(-h²ö¿Èrÿ¿¹‡³ßñœ÷ëîü<¿ç÷Ýñs¶•“ÓÐоšÏ盜œLKKKOO×jµñß%+ŸÏç[x«öÌÌÌëׯ¾fäÍ›7‡ãÈ‘#ÁÅÁÁÁöööæææàâ“'OšššÿZ­699y‰²*õâÅ ‹Å’žž.Ý<+*€çææŒFcaaáøøøøøxaaaIIÉÏŸ?E×¥LÍvQQÑׯ_;;;§¦¦®]»fµZoܸ±hÀŸ¤ßå‹âˆ  ñQ a._¾|àÀ%ÖIÈN¨TMMÍúõëŸ={&áïoùÊÕÜÜl6›CGÌfó•+WDÕ£lÍöÉ“'ÿþ½°èt:³³³CWPØKQ&"="èBÜÅòGÉï÷oÙ²åùóç #4Hé¦]QWÀÝÝݵµµ¡#µµµ]]]¢êQ¶ˆf»©©)ô6NNNO€#B¸XZ`·Û333 ƒ4¥A|˜——·hpÆ III7n4›Ícccq+TÅ¢è]ˆ¯X“–––'N,¤AJ¢¨öz½kÖ¬ ÑétGT=Êõl{<ž†††–––ÐA“ÉÔÑÑ1;;;00`0ŠŠŠ†‡‡ã\±úDÚ#ºwQ&###oß¾­¬¬ ¤A £ (è1~rrò?’’’FæççW¯^ýë×/U)Ut³ív»:rêÔ©ªª*Qõª¥ ¢k8333ÝÝÝæåË—¥¥¥.—+33Sti€ºp ¨‹N§kmm­¯¯÷ûý~¿¿¾¾þÒ¥K¤/x\jtøðá¼¼¼@ ðôéS»Ý.º@`@ÜnwIIÉ·oßúúú¶nÝ*º@`@Ž?^\\<===22rõêUÑåjÄ3`@uzzzÞ½{WQQQWW7<<ÜÓÓ#º"@¸ÔÅëõ †Çgggk4šÑÑѲ²²¡¡¡ŒŒ Ñ¥êÂ0 .‹Ål6ÓW£ÑèõúC‡Y,±U*Ä0p €0À@  €0ü ÜUh>‰ÍçIEND®B`‚gsl/doc/images/interp2d.png0000644000175000017500000013536013536674414014211 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœì½{¸eEu/:jε»l„Ö "ø‚$ ˆr¯æ$|`i‰ŒD“`L4ɧ~J¸†œëÑø É{‚r¿˜ä‹ Æk”\0Äã —£Ä‹ÁäD®Ï4B|ƃIƒÚ†æ!„îÞ{κlz­ñXõ«ªµ÷îµ÷Zã÷í?Víª5ªæ\«æüG…#9‡Ãá8¸h¦­€Ãáp8ó߀‡Ãá˜|v8‡c ð Øáp8Ž)À7`‡Ãáp8¦ß€‡Ãá˜|v8‡c ð Øáp8Ž)À7`‡Ãáp8¦ß€‡Ãá˜|v8‡c ð Øáp8Ž)À7`‡Ãáp8¦ß€‡Ãá˜|v8‡c ð Øáp8Ž)À7`‡Ãáp8¦ß€‡Ãá˜|v8‡c ð Øáp8Ž)À7`‡Ãáp8¦ß€‡Ãá˜|v8‡c ð Øáp8Ž)À7`‡Ãáp8¦ß€‡Ãá˜|v8‡c ð Øáp8Ž)À7`‡Ãáp8¦ß€‡Ãá˜|v8‡c ð Øáp8Ž)À7`‡Ãáp8¦ß€‡Ãá˜|v8‡c ð Øáp8Ž)À7`‡Ãáp8¦ß€‡Ãá˜|v8‡c ð Øáp8Ž)À7`‡Ãáp8¦ß€‡Ãá˜|v8‡c ð Øáp8Ž)À7`‡Ãáp8¦ß€‡Ãá˜|v8‡c ð Øáp8Ž)À7`‡Ãáp8¦ß€‡Ãá˜|v8‡c ð Øáp8Ž)À7`‡Ãáp8¦ß€‡Ãá˜|v8‡c ð Øáp8Ž)À7`‡Ãáp8¦ß€‡Ãá˜|v8‡c ð Øáp8Ž)`ãmÀwß}÷…^xê©§rÈ!!„;ï¼sÚ9‡cf±v›ÎÆÛ€¿õ­o]{íµ}ìcO=õÔiëâp8ŽÇÚm:o>í´Ó¾÷½ï}ô£=çœs¦­‹Ãáp8fk·él¼ ¸i6žÎ‡ÃáØ X»MÇ73‡Ãáp8¦€Á´˜½uëzhÚZ8‡ƒˆè°Ã{à¾p›Âj c\-Q+ÁœnÀ?xè¡ÿŠ ²vÑðâ¹F,¶’C…D1mbUVl›–£ÔãÅ ‹JVOÉêóx¢Ý+ÓðºÎs2ýlqb9ørªâQ¸žâ9F¬šWùåÄú¬Ör­äö*_®åõy1ÅVê³Z·Á Xko&g‘ÉDKLPO¡c‚:jTñèð½»â–‹K4ˆLîbZŽ)6[¾ŽÚž©ËÅVª7¡¥šWù4ßþw*ÀÉ7Éã-«!dUà´Ãáp8SÀœ¾“|8!ÆH„hX ¡IU-—Óµ”£Zòb#õiŒœ¸êúÀÀÚâåbô)FQ"J7ÆrY$S ± ŠˆäêE8¨P\Í w4ƒk#ÖG:áriÞÎ4Žl¹RªŽ-ªÕ ‰åŠ•Ë•ªæ6RlLËáêa}4D­º·‚Öœb ~¤,5ÄÚ7{Ù˜K1bÕ× JÃÆqÌ…çcH‹-WÏûÈ^ˆ¹>}FŸ"l®í°¾1¿ð!ìó‚´ˆbŒ‚kŒQg1 Ò+Æ*J9!FDz¥ÅÆ9•U/©"á¤>›k¦þs%I!÷%gÈ1¢Ò‰måOÍ‚ø•Arš(©cYH±ö!3͘™&W·Ì.Wùr5²JåíÕ@9ª wTƒ†Ã¥‡0Eõ+¬vñ“U½T€rµqìg¢F{êV­v†ú^ïLª#5¶äžú†Õ7$ö»ÈŠñaãÑPäõ.n·EµD:> o)0±È åmJQÌ…ÿ_L£§ÐÕoÀ«f^ØxpŒñ#ùíܹ“ˆn¸á†#<òè£þÉŸüÉi«æp8Ž5ÄTŒ¦k·él¼ ¸ëº—½ìeÃâë_ÿz"úÙŸýÙ~ô£ÓSÊáp8kŽMù&«µÛt6Þ< VŃœSÐi]`ÅÂ@šQÛtq £ Òv» í¦\l+-»J/ö!lJ˱ú¤æEŠ‚–7I}ZeôH£”(A±6Útq mxi_ãr‚ìØj`1%‹µúði¶üœWô!j¥Íµ‘ê5i9‘C 9!''i‚•CX´“Œ"´òF©^4k’²cã1°÷ÒZÜgÀÈt)I7‚Ômyñ€NýQš–¹µ8DÑQ¬ªZâ–·­6Ôr¸×Ô1—Ó*“p/)è8úL--qõ䌹}LˉBÕ ƒÕÚtÆH^ ¡Ò¶%Œš-[ì ÍŸªØ˜"ÉÆÜ 䨢ðÉâ{aMG\T¥-RÏKš^&5F6ØTÉŠQ;ÚÚ0îóØ¢2ª¢4â±ÆŠYbÓ8§ÖÖȉ`š°#6ÖRÚŒ;f‹1Q¥sÅ”œr#ôò¦ÊSi¹ž}RFOQ­jy;kôU·¡j,Í#µ+¿þÊÍJÉAê5rçöt"ã½5´IGÞ±§Ðèk”ÇB¾ÉFÂünÀ‡ÃáØXhóM6æwü†:îÉñ*ª6KŸ£”C†‚i®XÉiÓú`J\Å+¯—âú’ä'Ñ@†!2V5ÇËŠŠÔ ¦X*r¼v^AŠ+û€¹Ù€åH†ËQÊ')ß«ôQÁ<©0¤ªi⨭òè&)hÀSº1æ®-Í”çq5‘gq#­Øàå®ÃöA:[Ë ¾gßÎF’ÃzN&7Ô÷ZÎpá\$1Ò gCDD=5P>•ZA­7œ…Ž’Ünä;pC=4¦}¼¿4€{Aϸ1߆ 0|¨É…!=2ÖžpÌ›ß|ØýØ!§œÒlÙòå§>uÿwN §VŸL”ûLLÎ;ˆŠŠT4¶ÈÊÄçêÇç¨x! ¢²œ¬X±DDŸ¼À‘ ¢wTÔ¦Ö1Ÿbþí:ã( n³#YUÎlS¤@¿bìo$k`ÀØ‹Ó2¦‹òKTÚr¬Ø¡¦2”6PÄRö$ŠñM"ã€Å>:üÜS0E¾ÍGS;…oxqŒX~[D¾S¶ÔõBNÇäD¾S.P\¢°™ýÊãéÙ ¾O_û"ýÅt‘ ‹:šNÚN¿ÍÆ¥½ôÐUtQ?†MÏÃã€ÕØ|Üqý…_ø÷Ï}î¡Ï|æ°3Θ¶:옶ë;Nž¶ë;~yÚ¬c¼iÇ¡ÓVauÐPû(Ñ8P0‰A$É$bEéÌŸD§NOù4íø>ÝÞSø>}ãÅô'Ћÿ‘þ¯†úNY·(Ñwèö=tÏ)ÝPœ ÇŒíX36 laŸ·sÌOý뿪÷Üxã¶oWo€)¢’™§ú>-páÛLÔ*9&Öx9D¦¾Âê $·Ö*úNÊ­ |9UkI]uJA2õ•¤ -•Ħ3jÅ\F- v=”;¹œRÇ`¹Ê)hÅñZ9JNp"?ð•"³ÞÝé¢"‡m±”X–ÆG› K©ÇÖDì…AŒÑ¶šˆ¨o$AÍùj°7&5%8g:/´@GD#»Ðýtë?ÑE|Dµ­šð!þ-ZâUO çì¥{öÐΖ(P³Ÿvï¦Û¥çÜNè–W…‰]¶·ÔBáaê˜}ÌØŽ5cÓ™û¾ûÝOŸp°ø˜Ÿø‰g¼ÿý|éK¶e [·‹jã ‹‹ÑO9t8SÅýÛWéçâSŒ¶Ò3žJoˆ¾f[j[:„hÙ;Q?ÆFZêh¯íõhzâ$ÞXî§y<=«¥…΄>/c;½m]¢ýwÑퟥÿ€vO>½‚oÀDDqiéÁ¯~uùó–'>ñGï÷îùä'¿ùö·Û–Ù¾ýäÿößRrî¿ñÆolß¾VZ:G"u{éÎå xu,]ð}v]i[n£Fúˆ¿£/|Þjÿ¿@‡-ÒÿàÿY¤‰ÂmÝoÌÀ‹ôð×è¦ïÑ×—hï6úágÐYÿ ½å:ÚñPÚ` °%ßd#a~7`~!‡ñ9í£õìë¯ïî¿ÿk/ùæ¥%"R¬¾õÖ¯2/*eÊ÷ÞËôD"ª°Ù›‰Z>ÔÂLX éŽ Î`¥Â‡Û Ã~pj§iDT©¦Årª2a%;ÂÌ\T“Á*• kYŸ&-dž3)±<ì§•êð*œQkÂ8(Y´ÆQµ…-²5qGö¤©ƒF}ž "PU±£ ˆw(‡i)„ÀOMàéLX¡“A8Ò¡šÑÑ‘–ï#èÃÒˆ4ï=êÛŠÌSa@›~„®èèߢÿÔТ|ÇDñ!Úy;]@D´”ôÔF¢EúAKK‘¨Õç4Ä@q@KDÔQÔ†Gx楖–dìS¼—¾þúúr×]´s7Ýþ3ôÖgÐ ?OÿuRzv0¿°´ÙÅ@D!œxÕU[žò”?þãý}÷=rÇ©dR÷ß¿ïöÛG•qmÿþd©‡_£0.…È<¥2aá”U¬°µ¯<<gÂ*[žQËf°Jék¬˜ØT rf5Æ j£œ&¥[Z#+%jñ4µu6-6›BK–‹‡YÍõ}hFIè ·IÒ&W<똜¦ñ£Jw\;êyïF焊Üðd|Nrµ´U;EÆã1>cC<•~w3=ákô+‘¤Õ™QO=Lß"³/=BA/øÉ‹°H.У–ÿÙPˆD›è0¢¸D7€Ñ/Òò”wÓ×¢{~ˆŽkÌyU%˜±kƦ³"<õw÷‡Î=÷¶½èá¯=ÕæðŸù™MSÐÞxã·‚v8ë§7N/øgº`};Õæúñè©Ú{èóÿHo¶ÿÿýËô#ü?¦'=Dßëh?ì©Íò{ûD˜±kƦS• ëÈ_ø…'¿ímߺðÂoº‰'¢Š2ûèÞÏ|柭8Þ¸go<`O£Ër–_^,u¬¼ ¥ØMÌ1SeÔ &¡•xXòyX3·¬JSµ†qT­V—q˜&Yœ“îH¦£b嫉¾îA¿`}”͸Jõ’~©ãRh goFiÆÜˆXljˆŒæé %}R}®£’z§ÓBIc´Õô5ƒþ7¦ “}£Sµ ²È†l^Qq/?©åi¤ïµÌ˜Aæx`îö{Ae«Ⲋ‡Ó‹G¯¹‹.>´”Îß=Ñà!ºíŸè DÔÉQ–)è%z ¡.J2¡§f7Ýúx:õ‡è¤=ôe¢~ =öH:ùNúXK]”k‰"-8["4ÔCÿÓ!´íŸé––ú˜ðØšÌïÌ3am}úÓäýï¿ÿoþæÁ›n:ìéO_^”îÁwíR;\sÏ=ûþöo‡E>$wëÑâ†pèyç5D›Ÿõ,":ôE/Šßÿ>}ç;‹ÿý¿?"†!µL‡¨Â¢ô¶µBBPâ„ùåŽ@® ³Qbò·^íp@¬ŽnRÚ¦Àá:BNDû:ê8N=JõN“d˜RÄlÃŽ`ÖK8 HrÎj#ÄïHѬI †;Öƒ¦TRj‹¹âh|¹Ëñý8 VKlì2î(ð½9ÈÚH½Ì)N8h©‹6ÓqÇÒ~þþAúÌ!ôäåª%zxýëØ4Ô÷tïƒôy"ê¨åùÒïmC¤¼uߥÿ÷©ôs§Ð›¾A\¤}ÇÓ/.Ñ¿‹þï†ú–èHúŸ‚ÞñEz÷.útKá'éMÓ½÷Ó‹ôðáô#ÇÓÿN÷|ƒnh¨ká“ÏXx&¬Ä–§=­9ä÷o&#¸ñÆo®ŸÜ¶ýð‡‡¥Ãßó"Úÿ±Ýÿ⯎|‡Ãá8€MôÔ@[¶ÒéO£Ó‡ÿüýÃ7è7WE~¤¥ÏÓ[žN¯y:½&ÐÂú§/Ñ»öÑžõM fø8ò=ºí‰tú1ô´åaºïÐ-_¦ÿº˜lèê{}#¬Ñ1‡ë!„ϰ¢= a¸,ö´åf¬cPçïöL8Ô{A·Ò›ZÉѧ&(‡[å7Ë‹,͹À·ð<ŒŸÍPîM În ôœ×®_.qt®FçËå²êa/hpæX.ìCΗ=J}^M4/¹\1ç –#QHÛMb  x𤨨S`êÅ ÄŽ‘“X®EËHM'X܆¿Sv1DÖº£÷éæÙ£ºH‘)ÔQÃÏfÈŒÂV¤§À;ö²c¤F j¼ Gf/ û±ˆ:©Ï’ä®{ÒTöÏd䌊¿®ÎnF!„ÏâeøDëdã›ß7`†$/†:üd²‡HjvMä ”L™ãÊ)h˜j ¢=¥g°Z}Ä4#šfÕr©e/Ÿ—-r9Šn-‹3aáZIï嚃Ë3aY/qà#mX¨ÄJƒtÐÕÉLXc¬ùòqEtT¾º£C ìtõ9Eâô¡ RH &™oZm ž£QeÂ'<D¦_:*¼WËnމÎ%J9ª[OqÀþ×QlÄÁèr6’¥Ï˜Þ˜±ó€«½À‡Ãáp¬óûìp8Ž…{žß XeÂR¶[~¶Ý‚ïår”‡¤NYŊؼWqR= CÊfzÆQiÔDÆHIäj›t:–5FâQ<µSù¼-Ù,WùUP–x“cSM5r¹PÔÌ„¥ä·gp–â…Èt¤tG %ï ÕQå¨*Ë`5¦e/—KrÛ¢¶áQdbc‰±Hq¯×(içFœxx|N FRµÑ¬3Ói³Ãhçê@m/3X MÔf0AöG Ü´h äp›´tçVÑVEhóM6æwV£x•8ÂOZg³™§Rr–£¿ÅV:l´k i°Jú.«cTÒƒ5'6Fòb6¶M¦ŒTX»ì$kSCØ¥RõðqC„FÁw—“«Uƒ¦4¸cz.öÜ$0k«^L´KV%õQ‘E¦£¸ &*I7eRôc hØdéDxrÇÕFóT1袢ÜGƒT@ú4Z“–zXmž1£éünÀ‡ÃáØXØ”o²‘0¿0¿­¤ 7±ð!ö£Š–‚¦2 š‚È¡£”/¤!(2Oe™mL±–ÇÃÆçTu´Œ4'NjâÔU™¹Èèá&MãSÔM¢QÀÓÄÄrHèƒÕ³ )h+0Ҽ؛³+t®‹Bf[v ʶgEôi}ä¼8ÅǼ½Ëc&B#Š:g– ¹)ð¾-+F™Š‹äYÁ0äJV²*é\MÒ¿:Jš¢•L;y&¬i+05pc~+91qà B)«L‘w”L 8Á+œÔñ0Ù®C*ó!¹SæiTÇ$?l¸â*±#1p¹p¸È…Õ[É4qQý,§ª0U«ç•æf³öÐÕc¬ŠP,WËáPáCâ;;F¿ÄÕëå²3¨­ˆ³¯4îñ$MA+±}£oD¾Ãõ*ìg˜ JúZ‰bÏA&Ø#Ež²ª—½ÞÈcHܵ‘HŽl&ƒUUЍ”zfšúra}Úå›ÒGw.V²#ôÊÆçgøjØR‘µ‹£}³ÆíÙ2Òüî²l1±Z m”´.¯êdÇЇÀw¸Ž?ö·ÔÉ0$ÁG±UÇÀn ºÓ‹û@Þ$~€Ô·ÞGSöÁ¤?M4BC½Ì…©(qž´Rȉp›OaK¾ÉFÂŒ9u;‡Ã±10¿oÀ‡ÃáØX˜±kƦSCØgMe¼P !0Ê.àÀ•A(«!“"*¤å(£/×Qúð¢ ?aƨŒœtæ©NÓ®·ö•gøAJ±&£– ¯âl$ÿ®ÄÊ(©B‹¾*ªãŠA+{W€´VNÊ8š5uS®`iy²0$ ÔÈb„£ k{(Gw Äö2, D£ÉoM @ÒÊc{dÊ—#L¹5¤ŽCÂ’ªþ)Az‹³’–´{Óh•Áª‘¶Ûžî>ÝPËçøá&VWOAÏØŽ5cÓ©€4u S®Ê`Å›mIɇ7|Ò²¬‰rr@K¸¢~”œBËš´4™ mж ­^zPÜQ©‡〜ªZ ˆË@W3ww•j[3‘ÌÚ¦T­Œ&WS?dÀ¢pgÃú¨~&×hCA÷ú鈃ĿjåT;þÕ2Žùߨ¥©HÞÐÛâ{ª²ŠG%E-Œ6i>¾Ös‡ùÝ€‡Ã±±à™°fþ¬ª-'Àx*)6­-¿Ô2»¤8´ ¡È“;Ù1Êý¯G'õÒè+6¼(â5ÜvÛ°iGŠü È XeŠú»!¿H¶œ$åªìÀë&üx~7`‡Ãápl0¬J.Ê}«!d50Ç0vÇ\¨¢ËÚôƒ¿h å(7} @:í>)ÉùIrP®7`;mN(5(wÇ-ïh™ÿÂÄaU§ÿ[p ”…ôÕTÚª¾*%SyG;ha2«@’¹…Ëe9^µì1±\Ñh^È]/7îÙÕDs£ðå$sù¬5w-aO/²‚’UîÁA¼)ªLXÂK[åÁh©OÆ cE9¨ÊËÁ߀ç¬äêøûºòÊÌÁ[yS«YÏ'æxæ)U×WÅaª}4Í…j šŠ¹G%‡4ZA³Ïëašr&ͨE&¡U9å[¾\öÀ£ÓäréG½4•­-Æã½ôfµsW…ÀŽ”.*!éÃÆœš :†TÊQõÚX^>a~¥¤5ÖèB/Q47«TçÐ\¶ R݉½Þòc¯/§¢¨ì¡º ÅN°ÓŠ0çç&Q/½©¹>-Ewå¹I¥ð7`‡Ãáp8¦€Ù:Á7`‡ÃáplTûM¯kÌñÌSaµÒZÃm¥:e•I¥T˜óä`ã¨JíT•" ˜„•‹MéC&J èCfš)õp+*šŠ¦£[ݤLæåú ´bFŽÊ„,Ö XÛ’AXTsTa“¹6 ³e+ÅÁNØæ NC"3JÊÐkà,o«(h(G¤Ð‚&j5è€$?,s¥Ÿ³¸óZ й5ôy8 3J£¯NhÅ9ñŽî2ÍïËH!Ðâh–Ú”8³75³I+Sw3ÉiH›«{¬gÌñ¬ŒR)«˜ÍaWPµŠ¶…Ü5ÎV¦F-³™°øY˜s>Ò –¾àµVt›Ö{A[Þ;9bc<¶FÅF¾J"ÁlKÍ%³dŠi•`kôn(quà`/YlÔ!ý¨%qgïv’Lг†9Þ€ 3aÅ\J&ÅRN('Ý‘0Ç[Nê.§¾”¯¶XC¦}µ(è*Ê7µìT3k›Ð*Õ1Ãü›‹›êˆo'Ìü#Æž z€WÀœs1ñ^&]›’SU,ϨE”¦fUZ*“ K0Ç0B!½åŠüÜ¢(©C”IXª«Øiq©EÒ¥»c»lC±g·{¤ØÖÙñÚ@}#´åE!§¼{1fkËš­Ù8‡c†1[[Ö¼ÛÀ‡Ãᘠfëq¢ ‡²Ï8FE”§ˆRÇòàÜI dÔ²rÊ5©&޶ÆÚìêq9@l¢nŠ—«nš¬_•MZƒ ¤QSølçîŠ ÐWhKÆZ\¨‰_²¦S®žŠóA‡¥‹*á—=d)Ž"Tú6†Œ‰:e6 ˃”j¢ˆjŒn»råq¼û9÷ò‹ÑPËÈu}ŒR#©ì^ŠR,ÑR¢¥à®Ká™°f¥ñ¹H ”ø©Þ? %ŠSE-¹Rk¨õ⸚\r†  ^4Å”ªÉxÜqrˆGë¢,m{¥žl™.9ÍFŽ¢v¹‘U%ØŠx_Äó[ ^9ÊA£®ÒBÜ3*›xp¯ç¹~±v;Ժ؀¯¹æš;wÞ|óÍgœqvÚiÇü»Þõ®+®¸Â6þЇ>´ÿþ}ìc{ÜãˆèœsÎ9î¸ãþâ/þ¢zv8ÇÆÂ¦|“UÇÚíPë‚‚¾þúë9æ˜å¹ѱÇû¾ðºë®ÛxÿþýmÛ~øáËÅÁ`pøá‡÷}ý¹’€Ãä\ŸªjŠÉOͺհ‹–´,'?ËÅ*þp¼–ŠLŠ-o9nPÀ…’ºš tkn^ºq1ûjÕãàI¶¤tK; ¦ŽrrF !ɬÄÚ¢è+(/Ú¹ Zi‹)hÞë(ñ å(²Z©ÄM,Ð9€3“‘6 õÿ@Q±ÐË/ÿñ– õ k¼¬:û#Ie«¾V—©F1Òz&)4«ñW‰µÛ¡ÖÅðwÜqÒI'ñÿœ|òÉ7ÞxãÞ½{·lÑ©?_ýêW¿÷½ï½à‚ ÞñŽwlÞ¼ùÏÿüÏ¿úÕ¯^~ùåÕ£rwvÀ=V‘–˜l¬ê8!•£j9°œ ©Ú•è³zLûÄQ-—ºz† Õç#wWiKB>ÀYojP‹)hJ±×q”꩎Šòårz#6Žýœ“£U™°TG‘+êŒZJy!6-.W_¢F;Y”÷eÅÞWÈû‰{AkÚ]fÔ"î§ÝËç/.65ZúÍP?Û ¬Ýµ.6à={öœrÊ)ü?Û¶m‹1Þ{ï½G}´jü¬g=ëæ›o>ï¼óÞ÷¾÷Ñ¡‡ú¡}èì³Ï>xê:‡c*˜FðÚíPëb¶é±¯}ík/{ÙËN<ñÄ÷¼ç=›7o¾öÚk_ñŠW ƒ—¼ä%uC|Õ^ü4Úñ´*y‡Ãáwíxè]—üûÊå„ÿgÌ?/~íxú˜ÿïø*]òµ•9NUÚ¡ÖżmÛ¶ûî»ÿgÏž=!„#Ž8Â6~Ó›ÞBøèG?ºyóf"Ú¾}û®]»Þð†7ÔnÀñ.ü@ünç°ã´ãcþ>R!„Ör‡ª§à×'tÒwÜÁÿsûí·wÜq‡rˆm¼sçÎg<ãËs[Æsžóœ»ï¾[-PÜ&¿lgysH°À8{ÌðOɵfˆdKS«ô)…-…ÏBN½ÍÇ.fárá«`3¥†¨]vQ,ž%Àå·“º(j¹ÀúT‹5·×z¥ªª–,W6*)5èjMs9®gø¨(«-ƒ>˲ü[#Ô;à05üCÅH¤j‡YÙè¶$‹z^¬]”Ý‚‘S€ÁjüUbív¨u±ŸsÎ9»víºå–[–‹wÝu×Í7ß|î¹çŽmüøÇ?þ¶ÛnÛ»wïð?·Þzëa‡vØa‡ ]‡Ã1OX»*D„~P°¸¸øìg?ûž{î¹ôÒK—Üï¾ûî;w.Û·?ñ‰Oœ}öÙW]uÕrÕÕW_ýË¿üËÏ}îs_÷º×mÞ¼ùÃþðµ×^ûÖ·¾õÒK/-1„_!ʈò-'gˆ% ùˆ9^E¢–ŸvФ)hÌRf™[@«ç÷ÒA!ÕOðÐuâ}¹3íâ½’:.dÚõÅ-¾+ð4cͲs9úÀùòCŒcâ/QË4€‡gØ‹R¾\jÙ¹òèK”cþ+ì8LL\‰])9Íh§Én¯(_^{}Ê·¸œŠ¬-ym¯kéýØpov3 !Ä_ÅMŠ>HUßÚíPë¼°°pÓM7]tÑE]tÑþýûO?ýôk®¹fè]Ö÷}×uÃ8ªW¼â~ô£ßùÎw^xá…û÷ïÿáþá?û³?ûµ_ûµêQùÔAœFE(”3æÎ”úà8–TÇÉõaH¸¨åOSí(årêæ%IÂòx**^®¬XJù(6ìG-££HCÙQÀ4£YI°ìؾZZm)]Œéå²§DYLŠÅúÈz²*½\@sÛX¡5Í46)´Ò4x`¬ˆb/g"s]u2º©—×~Tlœ ×}bív¨uñ|𡟤ôÆ«ªŠ`ÇUÅr9G;èÄ'ÓgâyE“½ˆU¢€>Y±©ª©È±ÅÔ4«–ëàßNm¹ÀͶr²Å‰;룞A¤§U”çF¬Â‹Õ‹uLʃî/zþuܤáÿ¬{^;¬‹7àé@±L)S>’`ö„T@e¶ªœ›Ål&÷Ê9Uëuœ$ÁrrÔ4“‹PÃæoêhZªÕ«à0YC+¶ª˜2(Ø"¾I†Ó´d,¥‹v1ùåɸ+«ï‚zKhõ‰…µPŸr§h|4oæœãIõ±«'´¥d˘»iSžØÖ+9Ws(0õ"™b:ȼ!b”FN¦§føæÝSà¯úGÒÔUb¶¶¬ÙšMxäv˜ãfKà®X5œªíÔÙ°ÊÕ«¢ Žœ¤Ø\>`¤¯¥²WE={—6‰–ø®”8VËÑ„°ì¨4k4/—Cê$‚–†‚V™°TÊ*e§—¯K/W0by×Î蓜KMF-yQB“Ì ©^y£^Yâ“i˜~ìØýæs¼;‡cca™°Ö¾;‡cƒ ä›l Ìñ|(û \Tm¬ñâN+wŒÆïcUÄRÿ¨]­õ©m©¼T¢,N&vU‹fä=é4«ÄN¼JŸòõ±HÕÖþø¦ØëÉìhJ­sÂä=‚úæN¼Î`aUÇï eºè. D"ÁVr-Í GÚ|“ „9Þ€‡Ã±±°0mVë"–Ãáp8ó†9~æÆ|”ÓŠd’A98%8Ô„¸à¤üŠÌR¹Š@`OöT€X¦žÍk_žÁ \Wƒ3já«¢¶ªâ… ƒÜ,Ûˆc±RËŽ¯>‡EUIT•‡ësósõ"T uj™øÐÒ)ñQz^4-ûô¼ÌKÇ’ùʇô4)ÝG[E¸ì}Z=)'â¿]8®X©W†MÕ=Ö3æxV™°(UÌ®¨Ž©Zœ;)ï12²ÖtÄÚN´PNiŽH&ž!e»8b!—`+¥OÖ8 r©¨­r#+ö0AeYƒr0¾i'Ë„•1usÀ»'¢*÷0Àb£ô à­I/f‹Z˜KßlLL„&j{·—‡,bGŠ^‡UøPŸKÔÅGiåoiLÏ«³µeÍÖlª ‹(uÔy•EÜî•©ÆÖލ2;áb©ØÊ¨­”‘ f^nªÌÚ¤9¬œ” 8TZÅ¢,ÊÉÞ]ü®X9x"婦ÈÜ]êjF8Jy&,k MŠ5Sh¹q”EÐR”ÀDlã²ÉÌ Â#Ì„¥fݧåàõ‰°¶“—OÙ¶'ÀlmYNA;‡Ã1ÌÖãDD.h@ÎÔ„€xKZ‚¬4(b’–8ð@+OÉ*L^Yg(qÀT6Ð'Ä#(&;J§ñª[gÀõÁy©AÓž ¤1×8ÊÃl¼P’Q4\1 |ñÍÔôâTÑ—~5"¼KAÑRë$åC(õ€eD-B›NøÕÃiFsqSw¶›Øµ?Pгå„5ǰ¸€Ë‚üX9å‹IB‚”]…+±> U&U´h©Fk8ÞªåJµÌ‹] }–‹m¢¥}&+¼ÙÚÜÝ…õáTvªÊ3k ôÉQšà®ˆ©*SŒé¢|å1«ŒõéÓËa’ Óⵌ¶Šé– `Mì…îXÉÞNlÌ?—ë“Ô³¾Ë:ÆoÀ‡ÃáØX˜-«©oÀDÙ!LîéC=Ó$X6%"?Y-f;³^µÀ ºÜP¾îÜ‚ÆägU®¢rV0cn`5àÖ±rR‹Pu½ÀUȦšó¢â» ßüZ[Žª‰­¡Ä[ãÖ›rÇÅ! àfÃûÜ·&é…´²[!±\U ¿(}wáÞ@»ôÝeýx³.6¸(ö9ýÖPµÀ™-¦Q'üw©êXº>•f¸ùÃoÀ‡ÃáØXð7`‡Ãáp8¦·Ï„4´ÒMhÈ!mÿ@v‰ò€“¨¸¾òc‹r©}È šRO/,I^ gÂ*Ô<[|]•‰Z5µK阺mìGù¬Õ™]€IÎŒR†Te ò®Prb¹>ò®£¹Ö15(\.<ŠâbÈMVÁ˜1ÖJ¨{¯wô‡À(œ© ¾Ï@&,eŒTUÈj¨Æ(—c:¦¬kÚŽmÀj¨rÖ>Ý>U‹s'™AU$ ú åË5ÏšNeU…])ˆàâ‚øœ&·ì¥Y%G6Ä£ƒìåSª*“p¡ Ø^¾ÔÍŸI饗 µ-NY…G´Ú¢g-¾ùý B¥mÒ Å±aöòÕï¿3FAÏÖã„Ãáp8sü¬2aÊÐ8Ó/–$ä°‰Ñ3Y…B6ÙM!ãjé2Ì.‚€ñ^µDÔ1 `æ\N‡—½üKdwW2¹UÖp3ñÝž@›o²0ǰÃáp86Ð{ËÆÃoÀÀXÑ&妥_†µòS!Í©bÏÆ¬wnjÐlZœBª6³>zÔ4yµ®˜Ë±g—V¤¾‚t9ù‰9Lì½,Æ,–31ó3aá"´"s¡µÅGêf 1!G·ÔÚ'åØÛ'zC>ÛrÄr9˜±rð  $Ain~Ê™,–Æ0#8„&¦MrtP,k©‘¦ƒb ç\ÎùÔq×kæ_ZTeF)_ö•0Ò@¬Þª‘rå¾ñ5rÇ;ùí5·“¨,ÔÞü4Q1sùäøønWC(îz-î®òbfõ¨¢Ô•ß]å?‰Uwû\`Ž7`‡Ãápl,ÌÖ–5[³q8Ç c¶¶¬ÙšM¸-Ø-ªâŽ€¹hb+΄•=DhUΫÚN¼>ºˆí‹¹8dî$­AƦ˜ê›Í EékTn2ï¡§¿ÖUÑ_@ÛŠÌn¦`9=4j–Çèe/¿½£›úq e^˜ø§ZyuT›n~pÚAé»ß–@NUf®ùÀoÀÉÈÑØæjÍ*Ê\4¡ý£8PD÷[Ù µTësð§ ‹Ö$Ü$ZZ°>)´Pœˆ*¦§©~Tš,—1ó»–^L=£¹R ¦kSªŽQ/½‡i±5GÙÆ£©ò.åPaHU³55Q[J P¯7 ’w‡~rÈeÂâ?}ªª[껬cx&,‡Ãáp8¦€9~S‡ñ0U\hŠ­ã£Êé .” IXÎ.VåR«‡È´r*»˜lÌ®Š I“„µÓLf2ªŠTI¯^ùáê¸héVP$ÂQuÓÊ_¯òüh¸# úÉÜ¥«²ìæ\„.–S¾8^¨ÂìW|©3¿¥eðD3‘Ô»œ”Ã<(§,[ŒÅ-“m-¯É1í¥ƒBºÌvlµ“¯³ì«[ÉuD³N·Ì.»â‡SW³6Þƒ3íß]|Ðver’U–ŒƒÆ´=ˆ0žVÏÆ UéSØrµî.ì$6\ ƒ¤|±{ø]Z¾ÎàP‡Ì—º ³•ŠÒ)h‡Ãáp8¦€9~Ï€™¬Ê×oŠ…Ùd4Ò¹²ä§b™’tq%Ó”¯òÙVƒ&ÅVÒn)Ž7›«(IÃÓy³\1NÊŸ2(Ô:!Oæ|Ò·e¼²aR~pÀm–Ê”&È`UuqÕÝô™ø.­³hÔŸ ÄV1䈥H‹¹eÇÓœì.Ma¶Ž#œã XxÓ¥é—Z.4Éa^‹J)ß*}2¤Ü*É ¹õªÅr&qrê³Xb)³\ÅræãàT•öÊ6‘×1Ð'''ÕØ:{ƒu.?à/;à½1WlÕ+4{Ó®Îo…5¹˜+ù Ë>=[¤íoÀ‡ÃáØXð Øáp8Ž)À)è§ Ñ#Å—寅®üY£&ˆÏ)·Ÿe¬G”®ª gB¹rV±¤ÑnR»—jŒÍW}Îú˜2j®dšåêeš©»Òeï™Tî¤*‡`Ò«2áƒ[:kz/\®*lm*,ªê[S†„Êm·(„!•O³‡s‰3f§ÙD!îce°9»Iiûì2×4A¯‰§Y;Pªjb!åCનlí«4ÊÄk—}UnƒòUëƒkWeaÕå³}ò-„ï®± †fjèVU»’ïøªè¿}Ṕ݌Bq 7)BäÇ:8˜ã7`‡Ãápl,x"ŽÙ@lØÃ˜dcQ’Æ)ÈY.‚,0å”oLÓ8˜ÿÁT­x¬‘ƒ§YJB98&3¯4 —¥Ë {+SµÉpHîYŽ7IPç(h ›#u+“¡Š±ÇGt”GE |nA §™ýã/ø2‚/QÕ—±J½Ô5*ÿºa}ªÎÀ˜Ì/½GR’/"ð¡êŽ)çÊ™´lËÕ¢¤VK¥*^+Õ8Û²p”Z&­PŸª«°Zë³*C¬¢> ov"À.p.–<ñí]ÕxâY—2±æk4eY^XDAï›q›l ûÖÉÆ7[>݇Ãápl¬— x÷îݯ|å+ó˜Çlݺuûöí_ùÊWpûüãÏ{Þó¶nÝzøá‡Ÿzê©·ÜrKíˆ=5ÿHÿñrUkÿF|aøg¼5$šðˆüÉ—pUÅ‹Uµ ûËÊ›¬ÒEÒS êCR°\ëS³zÉ+’Û¤gÔ“êžiCR-¶XùhDµ”etÓ‚õ!³>‘Fv¹À:}Ð\༢ü3“}ìárõF5¨%=;/P$y5ÕD’#šÚ^.¬O0rFEY¥Õ+µ+ÿ+Œav¨ua^\\<묳vïÞ}ÅWlݺõ²Ë.{Á ^pÛm·uÔQcÛ_y啯{ÝëÎ<óÌK/½ôÐC½í¶Û¾ûÝïÖº—Å!)b9ˆd3è~·E1ô£›5H9AónPìèìHÔHz(09†!‡E!Æ´Œé"j¬†0_, –`2ÕRÒÊbɶˆ"˜pAˆ(º¨©Y.;Jê0†Ÿ´Z¬OÝí$‹©!ÆÊá{ ¶ò¬ˆäêÉ*=¢ƒ¦‰¸…g!hõ G̉-¿ùõ/PZ";ŠÅH©‡òdÁë…ׇÒ'_áïñ(øD÷ ‹5Bàjâ»´*ìGÿ6Èè'RÏ^÷*m'þ& Ó#¢îw~U°v;Ժ؀÷ìÙsÊ)§ðÿlÛ¶-Æxï½÷}ôѪñÝwß}÷ÝwïØ±ã²Ë.{ÊSžò—ù—¿ýÛ¿½oß¾·¼å-UƒöÂlØs3Td”o È[†G<FÅÃÅr“f’e·tmRŽ:q)ˆ–Ú_Bü#¤«d1ÇlËÅ5fAÄw3mÒ³ÆÈXSLÉ©; A#6 IDATÌzbcz¹ðqC±æðüœ¾XŽ]u %ÌL3u½2ƒÂ–Þ]êh2Ð1»˜£ ¥üLûÜw¡¼cyßÏXy`KÆb'¶I—¡›F&ŽµÛ¡ÖÅl^gû¾ÿÁ~pÕUW½ä%/!¢³Î:ëÎ;ï|ç;ßù¦7½©m+®ÍÑùmýÇ‹õ¿íxT¹4‡Ãáp¤°ãjºäêUsL¸ÛþóþÆGØÿ¿{Ç}ï¾äþUÕ`µv¨u±oÛ¶í¾ûîãÿÙ³gOáˆ#ƬécûØo|ã?ýÓ?=üÏ™gžù©O}êÛßþöqÇW>è¿Ä'?7ùÃXK1-çÚË©W\1†k„×ê˜÷r¯ìíx WbI½gÇQKj哼bÈ¥ÂÑÈ—&Y+˜vûÔ/•µ ûz–nhD¡ ¤ÌeI€ªUˆ¬­J¡¥Õ1„– (hÓKyÔ©¹ˆW1N¦«l­¦jÓ h®Oµ–ê5¬Î\¦ú±€T𣋛» |¹2IâRò “¬ÅÂõûÿœ» Vê2 p¯Çÿsûí·wÜq‡rÈØÆ·Þz+÷a[þÜ4ue‹Ì½‘4\—6²RStC-÷¦nô—,Žýœ+FùƒË¢±ØF…z}¢Šˆ¢X=©€~P4«öc°ãÙ0›TQSй^€"#ê*E~¦Å‚*«pLSv­‘j‘ÿ§Y.Õì¸j£Âì4°ÛèÚ(þto0sKÉ¢¦|ÓCèZ|ÂZ ž½Ðøò¡¨¤IÅÞùcŦžäW# iÿ4Î#\»j]xAŸsÎ9»ví†*ßu×]7ß|ó¹çŽ"ú¹Ÿû9"ºá††ÿùøÇ?þ¸Ç=îIOzÒAPÕáp8ÓO 4ñ_í k·C­‹8àÅÅÅg?ûÙ÷ÜsÏ¥—^ºæ|÷ÝwïܹsÙ¾ý‰O|âì³Ï¾êª«Î?ÿ|"Š1þÔOýÔ¿øÅ‹/¾øÉO~òµ×^ûWõWò'òº×½®|ÄÂ7ãñ£búÕ0j®8J¯câÏx­|SlØ+UÔ;šsær$L0XhËG'V»'²Rlҳν螱z$©l£±åRÎçb"þœµžŸ‚ÜKSˆU~¡`”*‡RäÛ\éïšj¬æe‹å‹©náòõAk‚G,wf6 ”;EGyùÊo'MOêcÏBP7L_Íì]š:ö¯Þ¤ËÎ+Šþ§xnS‚ÃWª6¾µÛ¡Ö½°°pÓM7]tÑE]tÑþýûO?ýôk®¹fè]Ö÷}×uÀªÂu×]÷;¿ó;—_~ù½÷Þû£?ú£üàåW~¥vЇiÄ( Úì`+êáÎÔ§)è •"¨íÖXÎl×Ì+† ÅâyU-WÚi\¦ A+ÏêÔ¸+kJSV•‹µ£Ä ZšZNœ*ͱ?°æ™Y­ÊÖÀ¢¥&ÍóÔH=à†mõáèå5׫âZ׬³u/lsrøšàŒZâá¯X[;/@V—' ›x¹6,½v;Ôºx>ø!|9>cXô x]nÀhÖ…Ë¥Çìã?ÛÆå-Ç6(‹[‚Æ+QÀÖNÐÒ6ž¬¥ýOŸ®ÊNy-¦Y¥–“Ü€§qùÖBJÛƒÍÂˋހÿ1> ·)Á)aç:ÙøÖŰÃáp8YìŸF.èµÃünÀ2–`CZê{ö*ÖÊ<ø.(ä4Ò›Z†)[²’#2¥>*õUTÑD!m:U6WžQ«—EÒ¯¼ZŽ)¦æ%:êÀÑê•·¥Ž¡X!§eêE^%ƒd1gifÝúJ£¦*¦lÀ:E”z·€™°>B$ÊK¥Ì¨*îˆL-2Q³~1–#y߉s9-צŒš8^È^£rÓ;¸(Àà*ƒ¸3ËU>hÑמœ1/ÅôÓHıv˜ß ˜ç“êe0dMB¯ë“„K”¼‚´QE‡>ð]¤—™°‹£†"Q—Š ŒR±õZ½Q1«"–e6.e¿[ùÅÕ´—<9Ex­);HøÕ³t`QéôD¨¼(vh÷‰±(y ÇÃè½9U‘\[Ki9z`mƒÂœYvPµ¶!Q…gm¯&¿¹p”T¡«ºÐ@=Ý8ݱâv2wè¨GO¯ž5úŠRy:0x¡Ë#á6æwv8ÇÆÂ¾ú£Ö3æwæ¶„ _Ôäa š+†^E:ó+õêÍ”S£Æ‘Jˆ2q>–ÊŽ¼£,ê”9R[‹$³ÝH¿° q¨åJ®^/f[ù^©>«3'dð•h¨²‘B”œ< xJ/²D7÷|FA$C8ÆQµÃb†Å-æfíˆ}Z¬e’{¦CR-Ç›|£ÉuÔñh©¹@9¶˜;q É¥†(µ%¨Z*m™%¨ r«^ª1V­ÔGçó»/2wömE(óö¿56`Åc9#b¹¥n¸Ã9:G•ä®UQ0äjšŠ0ï#Ý]äÇ'm³>€Ô1”–Ç\¾vØOÙf%¹\b}‚J,*É=¡Ñ=yÒ‡jœ ðÃHª]r¡je^Àb“hiÙ8Tà ¦ •ªV飊!QeÅõ"äB“-Ç铪²ú`9êq1%6/ä¨ð¡UQ·,ÃÒlíY35‡ÃápÌ0|žð‡ð^s³âÉL¾ÈŠÊq+Ìù”Ç‘z?ÉwS¡^4ÎSŠ:–ƒˆWE±_ áh-™ÛFq¼|È–=/^åÂÖ_3®ºÐMŽ(ÄFí2ÝÈ+6jÜSh˜7uO9’¿ãRj} j܃í9¾œÜSr0åå(ÃZ}æDºåò I'äI°µ–ZËeµåÔ1èXQ[Ce[n@eÎ9Ó˜’-«˜ö˜¾»ª~©»bÂŽPŽSÐó¼óLXjãÄÔ±Üq ¨l#'cKN«äX;nªVmiåú<»"7¯X¸zQÛÅ#PÏ<¯9Ê»3ÿ©Û€Æ<÷ðßúØpWërJÓ’{Ê,PHî)®;iÛ„VœãUUj"åÄ2v{ê!gæ\K –ÒËŽ‹ŠÊÜ,¾šÅ–Ë)§ ­år0ÅÊ™ˆ‚ÞëNX‡ÃápL†äp8ÇAGç‰8f2–àMÔñLXŠ m…q”¤IXP£-ã_u)òû(P¨Z)G¤I]HÕŠi*/h3MÅ'g ¦IzÖ½< ÉFmÅ”IÇ€†µ†ZW9®Å4ƒ+ÎÑņ µ>šÊæu a»UÆQìDxóg”¢¬-‡!•G±1R g2¦ÓûÁb­4µ¥mœRª ×éØ%Ë•‡LK2×[vSÓÄ™°PT¸ñjŠx^eXôT”³™ K…ë #e„‡ kQ†/íÅ?É[OüÖê¤zRªtž’c(o)e@Cg¦+˜ß'a1/b^J£(k…·T”NX|6FŽ1¬ÊQd±jËOr´íÌUˆ$ ƽiþ)É´”묗™™9_ˆtm2zÇôÆ.lÀ8µ™Ø'` è_a3—0î³ÕR!GÙ×áˆÙÕK>®¤5·Úâ¨-`‰×ß'è©ZâE˜ü. Ìïìp8Ž…}Ó8Žpí0¿0Ï„ÕJ‡<žø‚d IJ³‘Ô1äTCÇäp𔯸ß6ª8ü59Œ˜ä`Øà(Š|^vš*õkªr¾\ÑäQ ¿xGñ¨ßÈ÷cC‰‹7N©OW‹ òzÅQÙ|ÏDˆbìƒIÔÅAÍKı„ £È@"*{R§ŽAî-+GñÞ ÕTa ­1}I´ì+ŠóQ}s/˜èN1ö½é8U‚ú(±@NÕa I’™žÑÔ&…#f2|ëS†éÉ ‡ùÝ€—ØÜi zdŸDm:þ$P W”±VñA`ãìQ˜öåo$k*øu¸@пP¼Vñ\"zL3×Qz¡âw¥>¹S'FbõŽ ôá{a'×¹£ØPr_7‘ÛrqDîÌOÈè$ Îøje´P¿G‰ÞO´›Ž6îHìòéð¡`BJ“¬j5žîØÀÀ¤Io•ÔÇdÖæ(ÈŒ’ ‚-AGEàwršUaH…Ë…RŒõ@,T  Ø>¸á0¿°Ãáp86ö;=àî슊ä^zsl'QõcdÊ³ÉøiÎK±”ò¹‘Ÿ= ^ •«p#ߤ[>¯¨ß¡”:â³úDs¤AÃjUVbñŽkòˆë¨ÿ£òdqõ ©Ë3Ö‡C ‹‘‚Jj­®–ÔG½î5!­<Éå qµ$߀32ë*XS¥ŸÉÅÉ=jJ‰²Ô1'SgúRÎ]Y{/j ÎV}É´Ê7šõ)¤ QR*;/y>1pŸ® ÄMGÀ´[æ6Õ7ã/­^»Óƒf§YèìáÒçó»ïaH}šbE§/ÀŽZN‹Ä¢TSr|Úè˜Q¯IÏKÍZ¦¾‚)¢&U/Ž9s¨§¢¿€MZ§¢yƒê‚|Γ‡UDé`vnîâ®ÙW¾” çœtj•ºëLXê™  Y-·Ül9 Üq5±l´ (9JÛs›MɤÄò¢âxÁ:Ǫ¼féŽê¢èÌ\Ró.=M›{«P=-Ǭ£.ߊ)èý†äp8ÇÁGï‰8‡Ãá8ø€G¤l<Ìï¬2aqVE†ëhn¹*·‹ úØ¢hcűiL -@£Q­$°Ï6(*õÔ2Aš±—”oßBõF¤—œµÉð¥3sñY÷,›T$TD‰ÕkåW‡iõTØX–xkKŽC92Q‰ŽÚbƒ¤8³¤ÚÓ”)WÔ&f‰[éB¢ŠŒñ¸I[ûÚ€± ;Á±I˜ œ «0>GÉé`°“nL¢ ‡ý“p'¯&Ê`e¦©´åÓ쀜âp&¬OöÍÖa +ré~Îsžó¾÷½ï¡‡Z-m&"5ì/¨"ø‹Ô(Š–JN/Qº£(1úòO©4p¡Bv”òÚœäärõ¨£@ËeÕ~6Rôª«äÈ*RrŒ®ã—]­|ÈÉ‘m}JNL®‘Ñ‚ùC֘ߵäJçä¨UWß!ULi œP,–Œæ¸£(ÅÒ‰èŃú€– œ&Ú{*—=ÒèO<»`9JŒ”£¢¿€ùÈpËyÄŠ6à#Ž8â5¯yÍžð„ .¸àË_þòjéäp8‡Å Vþ7íIŒ°"U>ùÉO~ó›ß|ï{ßû|àÿøO;í´×¾öµ/ùË·lÙ’ïÒʇUN³•ËÕ ‡iù¢¤ò¨õ52º‰dÔÖ€-ÇÅr5†òUî§©R ZbžV¬™°¸¨H$噪fÍåˆCô)ŠIVRe-g’m’,\T\qê­‡–ÃkËsTÁÚÌÑôêµÍh›ŠóÁ dŠL N¡UÎlg¨lsW$™dCcJ|29eXWÛçÊb= o±ÿþ|ä#W^yå-·Ü²mÛ¶_ýÕ_}ík_ûô§?}å’×!„Kâ;†Ee •9ÑÆiw&Ù’‡£Xã(°q긮j Šp^è ÀÚ\‹ƒ¯´>£žJäÉ3Fe¢¶ÀAùsOîð¨.u¢¶£Ç2µìUWè#:FµgÀ¬b½)‚Ž*Ê¥—ŸSrH5'ÕGÕâŽx±ê5³^ÉêáŽ3),;”.¦ìfBØ/ÆmJ°#\²*ßʱ:i½6mÚôK¿ôK—_~ùóž÷¼{ï½÷Ýï~÷‰'žxÎ9çìÚµkUä;‡Ã±—6¯üoÚ“a^çx૯¾úÊ+¯Ü¹sçÉ'Ÿüž÷¼ç¼óÎûØÇ>öö·¿ýüóÏÿô§?½ò!ÖKŒbUþ®‘»”D¹d*c”‘3b‡¢tÇ%Ý®‰‚ÃT$瘌E/’I¡%œuПÕ°âTEcŲvJ½ _oZ©^«hAEáH,Xoíß2ªU-UFn•ë*ȤÀ*¿•Iˆ&4¹$xAË_Myœe”„¹ZZÓYp³ŠÅUNѪ6IùBrØf° )9 F,ðµ¶NÚC±™ãŠò,k ¡œÏÝjmI´ê‘)†ežZc_NAWèSð[½ñ°¢ ø _øÂ•W^yÍ5×,..¾ô¥/ý£?ú£ç>÷¹ËU¯~õ«<òÈ—¾ô¥«¡äš`?{”¯âB—Òä§ey«Ž­v ¾IÙØIn¶—ÖY~¼‰B´ÚQ@B+@Æ’Ù{€iSÇÒ¶m³æŽWSW!‘¾šjù®dB+eê#’ÓËS™¨{yÌðOÔ%ŸÄóŠLAJ‘ºäa9HiØT=±§®Ê³ß˜„Mæ!n|ÁÃ@;ÜêÌJðT{:… XÓ£d’[åN;HR¾U‹3O•w$“Q |5uf.˜8L|'É„Õy"Ž!žóœç<éIOzË[Þò¿ñGu”ª=þøãŸ÷¼ç­D¾Ãáp8C,z*Ê!®»îº¿øÅm;þ‘ä„Nøä'?¹ù‡ÃápÌ*V´Ÿ{¥ÇÁÇCô¨ágÈ$#÷`{*@ª6ÂÔNÆWû»r*[Qâ5b+¼—¡×1`¤±zš!WËž:D!P슧ىCšÉL2ˆ 'ü’úà»BÏ«Ìv—6[)*[Ù€û&MÒÉÆ¢Y1h2Ù ›*ª*y#jeU–숋Vl9€æJ¦j Џ1ð¦&ä嫽…Wâ• |Ñ•Xå„\®ö^ÆÎð…ÓìͲ`ŸGèp8ÇÁ‡|žÞðð Øáp8½oÀ³™ K°!æÉ—;–q¼*ƒ•Ìu¥sfÉŽ"V9mFQ\±˜¦âT%7«8^tJ †ãíõ4…×1…³¯=ô^~«½ô:¬®*e¼—õ‰»Ò!Y9üj*ÍD7q>”Ð*ÊSTάi\yæDr‚`ȃrTOç·²‡:€3TK¢JrÑM¼ˆ3a9ÁÄ/õ‰Qpª)Í©¦GÉȬì |^}Z.r±™Žf𩯱FÐË)Ã~§ g<(HœðŸ~ñ‹½ÞB”µ/iHé)Êh™ ¶"iü?¯AŸœ"Œˆ½ˆsUrÒq"ZŽø±ˆ2¤ê+­:ú2-‡äƒŽX½ —Nè#£­zi%¹˜ 3K«8¨ -Ö¤BgdÔÖ(ÄY…Eelk*ê†AÕ²X1,¢0iÕÒŒB©"4eãp&>Ju$‚¬{¼‰3ÚÊ*µ  Ö)¥:ê"D[a}pXšæQ¹ÂÃ5RœVêCê™\ÁÕÓlô™ ŠòoöüÅZu ÔF!Gð­RóF!M|†äx&¬ä°ÃPâ*O—£¨ÙR½ ¦)_Ue9^Å9wéÆrH-är¬ÊÕ † I¥dÒ¤‰šGqj'K¾àÚÂ劰hc „zUL;X®>w6CŸPs×eè=Çl€ì\†Ã~½”¶Ý9Ê´\çƒõé¨êEqž ØN°$Géuʪ6èßÁ‘$É©êx¡^ë3ú:Eêør)±JŸF^¯ öÇ$󯬼=õìÈwk—ñÈ‚1±`þc/J–ˆC=–‰”^‘ÚÞlLñ°"ŸÄ4cb›F³aU*á&  {Ã$K]…’-1#ÍÁÍ1ulóvÉêÒŽ¦1¿DåÔq™[Y2XÙ¼T€òE™°Õâ V¼ˆlŒZ}Ôß^ó»;‡ccaßz:Jaå˜)—n‡Ãáp86 æ÷ ˜gÂjù)(ß Ý•saH]:C¢Ž±œr š2aHäB‰ª™À)«Tæ©´zQžT¢¶šËÞ§¯BGMjšVN“^½^©¢¡M“ÓŒ&Í„ÕK‹~‡3aq9ÊZúÄÕl$ñ§¨Y5`“®Õ‡<¥4% ¦¶ŠGŸïkŠYg4k[Äù­@˪R¼%HD¥©c)§K·Ä ti9v"jÀl—O¤ K³µgÍÔd‡Ã1ر Ø)h‡Ãáp8¦€™zš¨΄5$G,‡ iÅͤ à1ÉŠªðø•™K*@èØqçØFº+d¢¥VÀ@¦½SÎÕR=žÚI-WßéÔW|¹Tþ“â#“É‘q5]#Äê .ÉDXqõ7ÚÉ[’Û+õd­C’«Ç—] ÑJÎN‘¼š!gË®¢¿‚lIRÛF(ÌC"L}¥j;Y«£›˜â6„3© V ì'{â}ùÉð…¹œtmM|®ÞÝP®<1TÀv¬ºây©„_½\. § {gË k~7àNÌ]5‰qQþ¸ £]£3=%sE™jJ쪌Q‘:ÇÒ±ŸiYJ&wì)(»Šüé?÷2÷–بPG¥¬êH *Úš\J"I¤²™eÔ¶×É"Û¨ŒZÌ”zXçFÎ:ÊY‡¨¯õ­ Å2º)È]_èðSŒTÔ/ƒl”–]~¢¼q –•Õª§¾ù•'¥2A0O0F œ ?ƒª*åá¼pQlÆfA&“£a:‚yÙôR©*‚qP8œ©¼#¨$SUo®tXï˜ß Øáp8 Kžˆc6Љd^YF”¯ì'ÚöDœ mU Ö=uì©§¦‘\è@0Ò*͇¢mÕËa¯NJàï òTz/‹gÑhæ%éçÈ)9ÞÙ¼ð‰q{v…º"Šªm¨1œ¯”?u W]™ DðD­Lh%{õ‚.ù û.& tÄödÊŽ–gGQl‡9qA¼æÊÔ` êÕY ( ZÝ]€dVµê0@Aã|[dfµ¢ˆÉj @tÛQ€iÏ4æC®,ÁÈ`U~CT_ë«<Ž!§T-$á˰ä©(g< ÛÄÕ+¦ û§u’×q5}Ëö¿FŠ5áCK¬¨òШㆺ^L¤‘úX#âHWÓs q'M½>ÇCsªrõ4Õñ|œ½Ì„%‰.ÖØ’;µsŽWÊQdYŒt¯8Þôc‡ û ’ã 2JJ<³› V|‘ ´‘Ûªz QrqeUF-anò¬- ìvjÔeUO/9.4ÅZnv2êØÊÁú¨bLW)1XŸ§šÍQ…ˆÜ´œ&´êÒ£`9±8–þÉ‘r:¸\ŽÈ$ôLa~7`‡Ãápl,ìóãg8m‚J[&ÝÂøºGˆ­ñd£ñãÕ/ æ,7þÊä[€pŸVêÙ—¼Ä¼꣦i 2°zq̧qÿQxÁ\~ùåo|ã'Tá#= –†Ü@ ¾K[éHþD9‘ɉ2Ç µ~§'iU¿Ñ¨)ý˜:i‚Uá¡âW§;Švÿ‘nY"^ª'‡©TŠDQÊ¡ ÕÖF¹I(3j”Ûa4rF-ÉågYé·:ÌÃ%õ ƒ•R^¹HµØ ƒ+6ò~LìS`-Cª£*Æ1¡YaØT ‘ö<›ÐJÕr`[r¹…8é8hÔ³y©”I85„~n€Eœ «O´´úàLXض҇¤©»7dÂÂÖëòh«L ­"Lżv;Ôº  ¯¿þúcŽ9fynDtì±Ç¾ð…/¼îºë@—·½ímO|âý×ý (èp8Žé£§°ò¿ÚA×n‡ZoÀwÜqÇI÷ƒý° IDAT'ÄÿsòÉ'ßxã{÷îݲe‹mÿùÏþOÿôO?ûÙφP½”Cðc­$i) 2T4ÔGÁñ6ÆoV…‘ÄŸÕ;J?¤n«ß‰Å³býW¼–™ãé‚ ¨EF©ªN_ÌÅFéQäYKì 2aEýÔݨyIïå–7–¹#ȼŒŠëeŽVëx9ˤ*o)óméì`\•™K‘ºœ±WÚª¤Tò8D½ìBÔy”÷¡¢”Ë3ŠP†¦( Ëš*îˆÖ–XNÕfZªõJ‡!UÕãj5h¡«<8»džÒ·—i\˜Á yb,Å]kÍ‹°‡1¬Ýµ.6à={öœrÊ)ü?Û¶m‹1Þ{ï½G}´jÜuÝk^óš×¿þõÏ|æ3W2èá© vÛÅnÛñ¿Q\H‡ë(Û­É<Å;ê¸#Ó#9üç^üh3²rÒRœÓ¬ i©;‚šW“äN"ÿé [¡€ ¯Ò'%°¾Ê¨©Í¨fƒI¢|râòùLŽ9ô‰?Œ$z¤m:E­:GmI±’ÏsŠgfÁi!j±üîR|~ ⢈Ã!Äø˜+nLž¬,w­jcº¨cDV“~öÃrl8^þUœjÝ¡²%΄UžÁJ‘â£Ô†!êÓ©·ãºäxùÊðÝ w"ÚzñooÝñíÿÜqŃ—üŒ¢°v;Ժ؀-ÀƒÃïÿþïïÞ½û’K.YáOˆw ?›c—Æõp8Ç$Øqí8‰Ä/k‡0†ë‹äüPüþØÿýÉÞ²ãÍ[v¼Ùþÿß‘Eƒ¥±Z;Ժ؀·mÛvß}÷ñÿìÙ³'„pÄG¨–ßùÎw.¾øâ?üÃ?ìºnØeÿþý÷ÝwßÖ­[ƒŠé˜”UýØ*E«4¿Qž `Nñþ¥êq$÷æ´»á(Áh.ßM„Á£M;´Dù´¶âeG©g(V>ÉdË#"׼퉢Ê`e}s‡CÙ•›18ܼ߮©Qºê1õ»ÏÈyÊ´ AŽ-˜ŠKS¨ –Ò™¹ôÒÆ\B«m’•QÕxSÌ„…äHØó‰9§ ÄŽRš*'ðð*ƒU!é=V=Neƒ‰TLséEXšÆžµv;TˆõK°êxéK_ú¹Ï}î_ÿõ_‡ÿ9û쳿þõ¯ó›ßT-o½õÖSO=u¬n¸aûöí…#†Žˆ÷‹à Xks)«–T‘s¡JN¹Ø‹’ŠD if»ÑáC‚!7QRÉiâÓZêÒbÑ4±ØrHç#Ó™ÂÒb+–Ýè³È78¬¡&TPÙ-¦æUuwe7·–£æ•¼»¢|èåcF'xU‘k§:*òSs¡¦8º˜FkõêŽåúı@<Íì²õÀrM¬Où4¡>áÊnFêw{bܶUm|k·C­‹7àsÎ9ç¯ÿú¯o¹å–ç?ÿùDt×]wÝ|óÍoxÃlËO<ñSŸúÿÏ‹^ô¢ç?ÿùo~ó›Whv8Ç:ÇÞi8a­Ýµ.Þ€ŸýìgßsÏ=—^zér˜óÝwß½sçÎeûö'>ñ‰³Ï>ûª«®:ÿüómß­[·þüÏÿü>ðªý OÓ߀É߀ý ¸V^>…oÀ[âøM ö†Cª6¾µÛ¡ÖÅðÂÂÂM7ÝtÑE]tÑEû÷ï?ýôÓ¯¹æš¡wYß÷]×õ}}Þn™ K¤¾ÐÒ°ˆ–Ò¿¼ê7±¡ÿå]ñ9=OýÑPÇfKú(k±Œ?éd ‘ÚQÔÁ´R¬‹’~³j iåú$3+™TÊÙ»“nÆ"hJqé¨-¶Ë^ÙÉè¯È¬žæK¦2a©ßeX”¼ª—µÆ‚.²GP«,frD5÷‚nä 8X»j]¼|„6Å}Ã"x«zã†è]„EM,¶ò•½ÃåRb+^ôñ›ôdoäö øÍu ËÀ›=-Ð"sÂêá‹>^®EJÈÉÝ¥Òg4¼^vqWT¼ªÉÕZ›W(¬€z¥So®àU5«žzqLu´Ú–¿‘—+PõÆ f߀Á 1& Šå„O½Oà·5VÐ:ÙøÖE&,‡Ãáp8æ ë‚‚ž ºÈLEg‰‹ÿy¦es €l>¢²E¥9]@¼²¨œG$¹Y‘Ò@FH´–DÜQ§ò®™Ä£yÉfAŠm䬣¤¯O»$˜v.§ÖY1äÃ7`‘Á£¡ _ ‚ šŠr1#g’ÄNf¨P'ãòÚv å;S¦hä±Ç"/U/AfJie¾‘^.,)»€$¹öªÓÈ|,* · ?Ówi-;޽‚‰±4#͇¬9Ô¡<ŽÅ꓊Ò}!•­(qÁ §â²ÅTÊ*‚¤wÕ¡[L”ÜÊ0Ò(¡U®% º{¹ìªªž‚¦ýÕ=Ö3æxîF¿áÝ@ØTæ)s„;/¶½ø©UQ¹!%'P?ÐbG[L¯3O24E"™`+òb/IËÞdÊ”ù“?ËêöH}#š•å’Uª©^‰mE­HÔ¥ôádU žß©üy_’&ažO*ÊŒ’=NÕF™ªsIn‡Kú  ñ©,ú<ͧ‰¥µäQeÊ4)«ÔF΃¡Í8£*í7DQlóÒ–¬¢ÞEwдÊ?–þ1U6q{øA”E5JQÕ8±©Úìñ ¶—rútKœ KZPÞÒ¤šJ Ú›Ã!TGUL ¡œ.Wä%®V¯ ë‚9^5Ìïìp8Ž †UvÆ2|&CHs“!• K’„(Ë­ÒL;ÿ¬Â¢D±5Ãò«¹(äó°2uG¢V.‚ ââUòÁ‹zR'_ÐQÎÍŠïÕUê6¹}§Ÿ'—‹…Ä2&‡1#ÍûÚ£y܃ZxC9å«ÌŸ˜îÒE|ˆê(lIÊY,–ƒÏfX”++~*¢Œ3˜GÌñìp8Žv8‡c pðŒ`ïècè¤i¢“dÕ&Þ-,1—é¾i#ãÓ’ÖÙÄø—†º%™’b);p ýfX|Ð$¡ˆ« ÔwLì€:™ÁJ×3z¨1‰±@”” šâê t^8Ë3hô¤MZx/ŒšÜ—ØØ_}flíʵXxAKÚY‘ð:ŒM.G+Wä¹twWîÊÒ`Î⎌>QŠ*D½dQ†$3a‰è¦–Ùn`ÒƒÆÚ¬é”Ûn‘Q¶ÃúâHw”*â³èm@:¸žD• ìE›ÁŠ«§2j©Ž}º䨖X,—£2añb!ê{¬gÌñÌ~¾b'~ê"¯R-å^ÓGâV¼^ž×±„…FÄ ‘ 4â÷• gâ6×Hd M(ŽEDŸÈ¢:ÂzQF¯ê퇟ènLËÜÈå öÃÀtã[¾(Zß.ŸÃÃdX”%½¯“lœ*ª„ \=uâ}OrÓ•bņ#rô6ŸM•0ÝFœ‡ÍU´º*ÆuG•¬ÅÊ:«,²!mèÕÏK¹b2J Ú¤±-Y›‹kôAbkä“9R¦ª\m¥®H”-‘A]ú¡‚–…Ø—o²à™°‡Ãá˜æø ˜ùã…(òK‰À’U ‘ˆ×ejg-»À—Wñ™ŽmµOd™•ˆQÐÊ…•ø“lKŠ&’*d°Rêqm 2)q#kù |/sk(²š$Ã¥“ö€„¶J=1ki4Hr¼D±•/_A?tª•¦J¼v3}t¦  ¥bÌTôW#_.@¸—}Aw›d;8c/¨c’ù4Ô›t”Iªx¯žTæ{e1HÇ )T\ARŽÊq><&äÈêTG¥|6õUE‘J[f3X W亂Ä{mê«B*{²0¤Ùrœö ˜h™}á4ÿLD±¿IQ‹Ô Ä]/lEñ9mV̆Çô´$· â´" %wÝÉTSÆÕðÿ«”Uu¼$Õñ9Ãb †oÝj_Ô)å•=› eÒ.M¢*}x±Ó†€dDÚQTøl/ŸfT²-•ÔS<°PlØÕì´!@\ ¹Ú$,oÅ^ø"( B¯žBäY]•#ÉÆpR :C´ƒôR9n6Å]“áTœ,s›Z’r2vL1-u8“œ&ŽnÂù­@G¥êSE3¢üÚa¶6`§ ‡Ãá˜æø ˜=‹i/öväqo%cji|QQÙ*uQ§¹ÇF¾²4ìSû'KÎÙÒ’üK%ê¯bÆÍX¨FŸñRê@Y’‰ÃH:O}FbMj'¬£—NX\õJ×è\Ç —UOµäUJ·&Èu5hRª.Õ1•9ËþäØ Ë ú¨ˆä$é2Ô±ñcRŠýœm‘‚Øéœ>Ar¡H%Æ0ÀCúÜDʇ Ú¦¾‡:p±ÖFÑ ˜vÊQëIõðú”ao¾ÉÂoÀ>FÁ°RŒŠ‘D„@ bÍâ@lp¼#‘H°),-°rˆM3ÔP2au"*)nbìyЧˆ8•ÚÉžÍ0ÒG¦¥Q‰±ê"|H1¥‹aÔQ°ùtn$iä¨ VqA>Hçê aR¬Q'ªri‰'ÈØ7âË"Ôk4ÓN‘5V:´bÐØ‰½°‘³P”x+#W•Ýéß×:éì-þl&,ÁlË´bê™$ýˆ2«ýÿí}°\U•îÚçô½É ’(D áa@EBQQ°˜ ÀeAÔQÏA§¨©‰OFæÍˆc¤¤Šj¦,3êÐAKŒ ‰” TOgB‘„$J?B’Ûçìýþè¤{}kõÞÝ}ɽçÞÛë«Tªwï}Ö^çÜîÞç|k¯oµ¹ L`åã&¤¯:Ú·Z Š5AAkÊ7aGö&íé«.¶:Ø¡”Ù´¢V#»T ¦„%ÑÇ °Á`0&¦Öšm °Á`0& lž"àJXæ ´šŽ`‡«sØ5s5ØáêjhÇc::;ò5ÞËj%KNÉ]΃¬%µš:,*Ìçì:@%¡ ™ä–?Ê,¯©PÃMÚ5%ÄÁšc·‚+줲…²§ c ]£dïäRI¨2Å<²Ê÷¢‹­ÎÀE å)´CN$ìÈ 1/´Jkxd’Tð5ˆègâSÁ/æw‰?.žàöi ,‰K)a9üÀß½ƒ0‡(ÔSQ#ÞLÇnÓ:Y"¯&¶ì˜>”¨TŸÈJHV‘(ÆLìRSž5K§5ªŠd³ÄØmBÁJÌRàyq;âÀ¾D/À\ß Eûá bd†_y‘}"ì$µà§¬ñå+Jà?è\JÉS–ÃâGII&ŸÉ• kûzïðœ’v‚_pTŒjír˜Dâ䦰L³i- "úèp›WÙDx.-ƤÅHÝ‹ü#ÉMHÂ,Ü89À.—2+“ÞzÜk¦·žÅìHoÕÖ«–?¼ËÉ‘`'¸àÄ!6¡ŽÎ&"ĉp:–¬ó—b[åt’)¼5]ÚNºSâÀt (Yy+DGöAW?OÝ6u\¼Ë‘]bj)aõñl0 †É…©õÌÜÇ 0WÂÔU"‡Ÿ€]-¹‘>þ"§Å5¸·/²ZsVG¡ˆs³9Þ@.Ã\w$NE*Q ¸S·ñœ MAÕ:ÉÜ6_‹Gy ,ÊÈgŒ EWƒ0%¨n¥¸·K nü;ç,ž€Eý]<ÉP6ŸIðØ\*`·ì”Rëʉg\Å×»}®¢èe©~ñDŽb Ü ¿¦Ä³ª“ñGIAËÓÀÁúÛØÝ®f¤å³ZìÈîGª…š• S É f“JXôñ^¡eÁ)耽šôN›å.E˜—ݘ.Ñ%¬ÒAZ +Æ æøb} FSL!ØßÒ™<Ê)úÌEÌ4ÖcÞÜᨋ/ÀÊ#§¾ÙÐDéGˆ\ +±à‰ T´ãuLÈ´û .4üyqŠJX!—ëq ¢p½Ãä"A¼‹b ²¿DTàÎ’j"Œ+Oy¼’ªä÷ ?yx G÷¤àe²&G”ZdÁ©;Õ(q84¾r‹Áj*Ä;;®¾Ñ›´$‰ªIføsÆ•°´HVO½­)T—¸1ì6-*Ù”ŠZjp뻘L êS«°)a ƒÁPúø 8¡„Åî#¥ô–ôs÷6 ;®Õ+EiBŠWs¤ó.Çjî^Ï:‚í5þb{Tä†Û %‹…üôP*8„E J¥„XÌŽ`§å.'Q$ÀGývRPò[¤žÿÚ[T­¸«‰èCê‰ÓKSÒN2ú‘xLËPX¡eIIz9 (ˆ§-tA 6qÇÕþäî7E'¬¨—@ù¦@$ê w¬Oœ8/ÑL°Ób¤`’ua üµˆžˆ|tÖßÝÈi޾æDZë;L­'à>^€JXBúÊc3¡„U*;ûš”¢ÓÅ¢k<E­AˆØÕ[G: ¹ã’U¾dÓÔ¨À@o]¤1;%«| vA—9†–ciHj[¯çZ9þô‹Zèk`•.ùîòõäxíŠ:[~«ì('Ð˸·¹ÜÂ-Š:å[™‰e“y@'K0ÿbO;®Öy g ,a‰áµ´–ƒ0”jŒ…Ùh¢I’“—gM1H!QAù98Dk’96’ÚQà3ŠÃÝS¾üè¢NÅ”oÇy³P“ò×BÁ*­„Åíx¹x KcÊŸ˜{iE­.a1`ƒÁ`0*@ïÏ̶ ƒa’Àò€§-•°„‚Õ ërPbÁe(Œ•¶#µÄ~\n'§ÀøNˆcÔ™2*XÕa—e…ã•h…ô•¨b4)JV˜9´Ê–!Üé\±PÂÊütB^Šûíg²)*2ÎÇ&"]n fQ@;ñ”*è"XA¥W%¬J؆MÇ ÉNž2~š(ˆV"u Ñäœ\ ñ…¼ùù ”£2— ®{øãÊy4×HT ê¬Fv“vtè4ÚLFUåæá¤¢V—µèI)aé\£˜ÓuD¯Lb§¦•°@² '-»¶£5³½uüóÕñDL «jªÆ8 GÄnã_yÙ+ìˆàq⧃’f=úâA!/]d5‡Á? M†#Ìw–™"˜ŽÂš"X:H"Ï•åçhÀ[,m#ìè4—®üQMXS{1Kš­÷;ÑxŸgƒ…?¾C³Aå†%íÐLÏɱ۬“dUÔ¬ê‚ãâß(Ñ›)‘œ´£ƒÙ±`m3êˆu\y*#—s&âëñ2«ÚĤûE «ÞyÈ$B/ÀƒÁ`˜\(;™Dèã˜+a ÍßDâJV¹2ÉA æ¤7™)ÑVn–äæÝnº¨Á]sr(˼ÌYâÉE°­Õ¬DizÇK>älCg@³eꉩ‘4Å'õ|t)»¸86Å÷'Sɪê¹[%NP£Ê!U›”ÄU PL 8ùŒ2îeBˆƒ(j`؄̟z=Tl WéLâS>L³®œú&šŽâáB ‹Ú| K~›”oü(RTv‡ä¢Èº7õœ<Ð'‚!´—-j F³LôjA+~¹DW‰ ,¨Í@ñ‘JßJHh³w`tJXS ¶5¾<í'Á&Šb ¤@SìXì’JXh'èIyW]Ü,q µmÈQàËO‰ßNž¸â(ËàG¹äGÿäÔQy CÛNܰbþià³`šX€£¬é¾7ø¤5îj] É*¸×òhØ«õ/fG(a‰ @k7ñ¤7çñ¯ ²±ÅYã¢Ûú,Ê1ÃC¼¢$†Ãø0gþEŒ@'ŽG{S«Lêi%¬ØHRoÂ…ÜîØ7+—Ø­¸?=c¶u4;MJ‘¦0[Š,©1VÂÚÝyÈ$‚)a ƒÁPúø ˜S¾^í^n¾&ÜL(}•%•°ØM¹óI;N lQû¦ó¸ïÚ«‘øÀ€û@’Cü‘.Í…>O@a¬Àž·¬DëÐPÇAҤ‚òfsɸf™|nkª¶hÁŒ‚'Ä;kÉ¢}"|H–Ø|’ôV6›f%k›$¨ÅðôS%‡kÛyóžPÂòIå©,®Á$šé­Œi;ëøv+&¥š„» #Ó›½ÛìÃŒx.CɦKhT¥íp÷¼º°°i<9 ô&7w‰QhwL`ôñ̨ŒPD­¤V¦”°8u,ê§wS³t¦£NV‰þ «Ä 9º‡b†Å@MFæš/‘}ͰRIY V\'x˜òLYR)µ„ÿX¹Ö;\1ü€$?á‹(ÊÚ³å9`q¥Ò4§ì‹¤V†JXXŸXPâ@e «îär(Ê1!uìØ‡/ä ñxÖXÅ–Nψ倽:&Á_ST›Žó‰BûR\ø{’ùê’¸AR$ªd€Cû×m›>ÞL(aéæþRÂJP¾B *Þwr@(a%NÓãÈ2Þ¬'µÊ\]bj-ÀFA ƒÁPúø Ø`0 “ SkV/À\ kcÀe«é¬2 åÖ°Y$íˆà1§_:–þ°5W×"RÊ\9z[FíQ1ÈbÀÎ×2”Q ƒ¬%'N=RÐŽ‘}NRÓPí ”ÁcP À¸ý›!Wå)ã!á63Ü Š®ŠmÏ:VZ°Á„iH<(`Þ‘€°ãù¤5¦`åPÁÊK¾tÀgÐÇv/“L%ÊÛiQåY [í8ܦžñ=Ûœ»¦½ì}$¤§£.ٌŀuœ2Q5hÔ Vb—¯L bv´ôUl¤î-ÑÛDºŽïÔŒù2ÒJ ˜d‘†„—KØ)ðDŠÈÒ,*aÉf?¢`:õ*æÊ·Yð‘„A_ü® âñ¸¯ŒëïÕþ4_§·}¤ý‘“²ŸÚð¼D­Gnù ®³SmBîºBu'±w *ö`> ì²w\aæX¢˜žªý„øŒ$¥¦ô,-`Ú%ýI둯b„D†c…f¤ÚxÕ|#•‚'ÎEö&2}õf2á]·Í¤f–h&J0é®èŸKõŠB¡bF‘"&-GWŸäyu `»H%flÀN8©ÃI¼«{X5$ƒÁ`0*€Õž"`H‡wþœ¦”A¸ÛÕy¤|µÀ^G¦ØkG(ae8¸IA´£ýá7èÂ&L‹ò5ö Ô£~P#$`[*ZŽ\M’S‰yGÄo3ªyÆ‚e@Õú¤¯\<³ˆˆç‡sòÍ­Å(LJõ´ ÿ>””s>6‡'iØ/-(_¢œ›-‘ÈÅä+/¾K”/<{ª5«üzÊ=’˜.ì•÷mžþÚSÙY*‹ÒÙM€äœ;(XÅ)hÍ9'(h>Ø«®Ñ¥ëôÓnp·JXɺ—Ÿ¦°“¨Í ©ln'Ák;eÌÛäȾD/Àl;{pHùÆ•§„‚•P ü¢óðp 57Ô/‰ðaŸÙ@˜°$Ÿjثϋÿ`Âp¸j¸ÒÁzƒ V“”JÆ$gb•MüÁæWˆJ¶;”ˆ J8«Jd˜ßÜò' ‚U¦*Ì£ U&Ò gá]ܽ\öz uç!:u¨¹}§Y*Z¾•m•Hü ˜M”K}+°“ˆ5Yi—äNCÒ g”gî…‚N4ÓxE­xq=°—b R£ªëb zÆÄ:I‰L%P©$¥è¤É<¨.aå ƒÁ`¨S뙹`¡„°Ù|MJë*Ñü Ä^± ZL‘PÔúVìXQXuþÕ 8¿9nåîå\ì†m=ÐáCJ‰€]’qåLi ,Èg(x2óH,ã(n‡’†úÑ,Ê©ŠMXâY!r1iô!Nt¬ð˜râ“?«MW);çŠÅqÝïsn×l«©ãîíˆÝË]’Õm›œSM˜–¬[¯»÷'ÁHsѱ´VÇYºTÔ’¥,âŠZ‚-O|`°xŠ€+a%”§ÄWU(OHA(;œ:NÛ‰+XI; =)a‰MÑ`G¸—»ÀBÂõÜ9ödR`Աǟv_gSzIiºbÀœÐ× Và@æ6p³–½ vE„ CÔD”Ãy,*Õ'bÉâo$”°ÎCÝPôÉD&J8P4ƒÒ·U•x2XžÉû§¬é¹PÂJ×\B†<±z v:É'Êè&66‹‘m{S¤ía,þZºiª–7U›fƒ…òTšXöí^k³ZÐ*Æ$§¬ ÕB]Ü7 a4û §mJXƒÁ`0T€>~6 ÃäB½óI„>^€¹V]Ån®8¯Š IDAT›¯RÂbŸ7 ú‘+Z½2–ì”O ˆG’1`á^M)aq;ñŠŒ£¢ o¹§"¯Ái2¦T3º"“dz½×AѪ̎äŠÑ¬@.2~¸ulÀmØ9ç\‘¦œ>˰RBŽu˜EZ”‹^ZIt—”óbe†Ñ,äá>ðÆîîVì6IPKÍ,Kq%Û4즊^{ÉHsÂ!e2 HOÊ»F­„UàåJ(XÕñ4 ´SïÚN¡²’"ÂXÓJçŠQDtG±qz£`±CÝtQ§ «Ø ¶}D#@:$%¤x3$½Ç*ÛØáMˆ!6¢}‘ev=&ҵȉ]W"´ÜlŠ”)Ñ”i6"y†m ӎͦÔö(¼;½ ¤®,œ¦K­Ö­‘6t°Xh9$FŠÓ}žù£¾ô^³„ÙÄi2v›Ö¥âƒ³Nr$rŸ´‚Uâ´´ŒÿÌ:…ºf»?PþX$"èi÷ÔŸ:6Xû“ˆ ‹}–qE-×F°ïÐÇ °Á`0&¬ÃÛM'òs@ K<­ˆ´ŸZR ‹0 ‰w ò¬†iQk)ÎLåTkÚqJܽ\â–VßuœËâœö%l3&nÖQÍ1¾Ú“‚¾u¹êRÉ" BÐ uB¤°6Ÿ­$±,½šÇTÂLqú¹L À9ðIi]¥{Ó^€…¾•Hæi¾vH2çH2S/JX¼™!¿)`üÉä VPë*Ã&š’v œThfA†žµÐÛ‚´*¡N|šˆ¸¢A]Ê &/þÊ”o@m)ˆqòÂõA*a•˜Ÿ“ é+>¸¤2VÇÞa”—Ê\Ó”y°”°žfP4¥—½PňÂ;Á]gHŠu=#pØL“ÅA®ëIÊ76’’\¨æx\¨n†¶¯µ*Úsï5*jEMV;Мs÷YRp_×ÉòjŠÄq;µ|€f·˜Z1à‰’†´mÛ¶‹/¾xΜ93gÎ~üñÇc#×­[wÉ%—¼ùÍož1cÆQGµlÙ²mÛ¶§«ƒÁ`¨õýñ¯wŒÑ å êõú‰'ž¸mÛ¶/~ñ‹3gμöÚk·lÙòè£Î;W>í´Ó^zé¥óÏ?ÿˆ#ŽøÍo~sóÍ7Ï;wýúõx`÷3:çèµNÜ "¯;9¯i¬+Ãú»5Ô–ÀÍ̃HAs;XÇW(vAO‹úCDÄÍæPO@–+ÆÓ¤é¬‹( vkGx›ÕZŸ¡Ì…œ}ÀsòÐ,jìv€ê|Óï4iÞ-gäÙ•Œ²vjhg:´X/¢é,Øà( ²*Ül .Ä1Huîq;¥poíd`g„? O§=›ÌޝÅOsFšel¿Ÿþ;u´SðMãÓØåò{¯^ûÓ¬©ËžÇO3+ÙãÇʯbßl!öÍ"5º9Un§ìd–?tîANu²¦ut€?fÕÕö`ñÇã»àfvõ%¼£‘8å+N³®.?Ma'± º.Ìbß‘øi©Ó |´su¶ÜxlLÔq1rÎÑûcÁúNo ߨ­P‚‚¾í¶ÛÖ¯_¿víÚ¥K—Ñ{Þ󞣎:êú믿á†ôà[o½õ-oyK³¹xñâ‹.ºèŽ;îøøÇ?ÞÛ¬ì/w/³Q”°JTmÌ-µMЦR)X úÚµyM$wõ†Ý )‚ZnØ’Ï:àwùjˆ; yëÎéhY9˜(ð_p^ ©”JX&¼G;uHa %Dyu‘%~Zð9À"„vxªrøÁîܹsÍš5y.ëçuÆûÙghCŠmM¡ù_ ²‰„†²†ÈëÎfõ,޽NŒÔ³p÷|”òhs`$(Þ~ÒæWU%p`ØRÄ€aš@®9XEy…‚U,–Ýl¶ìàȔʟà:γ÷•œÇɑ⚵b® ÷TÌVk¾¡H¸§·÷ŒöÞ%úeoÔ× D J;)–”Nûióé‹ÛIø£ó b¹W²šO§ÓL5“3rt¼z±‘úÂÆ”Í^Ní4å®®&ú,p±ý~Do î0Ü ƒ|ôòö óO:¯/iì¯jB,À³gÏÞ±cgûöíιY³fÅÙ³gÏùçŸÿÈ#¬[·îè£{ ƒÁP5ªØ„5v+Ô„X€.\øŸÿùŸüÇ{lÁ‚CCCmÇŒŒ|øÃ~ðÁï¹çž%K–ŒrV®„%²ž”°8±LqE­x‘Ü?Ùf°‹t ɪR•ÊŽË]¥”°J4ïÍϺhõ ÷(‡=Òä2þ‘Ëp{%WÂÒÛ•tÀ<àß„r¤j‘ã-UÑÎ$çü¶ÖSMÈ}ðN/9^xbpÀ9gø4ÁL²¶ƒtvÉ(RÔq³ ÀëñéFÕTÈ”Œ‰Ð Ùçzîå#•؇·JcÐÞñkÔêÑ•áD·Pf$³ ²ð).ªo•–¾Jq×Ú6¡¥J7»dÚ%•-¶^+ ºù7ì´0‹iQ·†—ÎùÖ¯H_yçŠQ$Áö~ÄkÇØ­Pbֹ瞻qãÆûï¿¿ÑÜ´iÓÚµkÏ;ï¼¶ƒ‹¢¸à‚ î»ï¾»îºëä“Oý¬eë_¨c³ Ú÷/ØU¶ºzê•]%H^,”øzù®y`èÅl‰vÀ¬ !ãÿ<µþ•MOŽuåø/ ì_I¹gÿD¯§ŒõŠ®ÿ9u`{Ä¿ šbõûJÖ ³ŽØ?áaoÀ^1ßqìŸv€7Å`ÑKÂöøŒNºJèÚf8UÑŒÙqfidï4ÿi;Ýtiz~l¸Yé­ðÞIˆMÚ¿Ö# '-ÕÕkmYRSð¯9š !`g`3D»zXU«Ø„5v+Ô„X€/ºè¢E‹]xá…ÿú¯ÿzÇwœsÎ9tÐW\Ñè½çž{jµÚm·ÝÖhþå_þå~ðƒ‹/¾ø÷¿ÿý÷öá‘G©Î}ƒÁ`0Œ FöÇ¿1v+Ô„  î½÷ÞË/¿üòË/9å”Sn»í¶æî2ï}Y–Þï½oy衇ˆèÖ[o½õÖ[›–-[vóÍ7÷6«Ø<Ì©,Q˜oWΣäðÞy“ï^&Ü®°)ˆî›ÜNÀ}Ι*·À›eÔÜ º€ÛžI1ÒóË%6iÇý¡Œc¤=9¾[Öu¬·ãr)æ€"É¢JCïøö`Q_/C;©m½J¡Âá°»;Ãã»_àDÔã8à‰Ô¦0þ¹ˆîÿè§D/~0¡S”O²l¨âœáO”¤Ž-ìDÉjÕL#½êMuñ‘érźDâÀô,>ršýñq³é²Çq‚‘)Þ]ž³Óc·BM)Êñ‡sŽNb'>ˆ\À4¤¡¸ôcFÄ$©†ù ;¤¥ï…âf…‡î ;Âí^—þÔ’f¹´?h§æ¢’Žü4ÐDeÊœÊH¬+ÉÆ¦€’ÂŽ”¢ä VJB’çü…i i©%£v¦Ñ.ÔÕ½¥Ü9J;BB²{;âr%ý!.ùI; (…¢¤± h§šˆccgI˶À ;Ú,?ͺ2Ëzù‡+m§Pf¹{ca'¨«Ç.—÷p“]WW«uOܽ€º“¢|ÇþX°þïDYø&İÁ`0 aÕ ƒÁ`0¼Fôñð«­—\²ŠD 8ë¤`•ã]*Xåv ŒÈ ùwn'Sfù>¥`Ű6[BQK°cJX"z–a‘%´SæEÆ+´¶C*ɪ’7½Œq!æ±d,oà…È ®üبJžÝ”ñ,)G5n§†Aߡюwp^ÌYIacÀ%˜aZÅ­à ”¨„åÐlM†¨3Lãg©\ü×Ц£ªCžÝ+a¥Ó‡|ÄŽOjTuLÐ%2‚ÕÒ V¢«@;¢ŠQˆ9#QË;W°¿B¹FuèMWCêÅ'úxfº¹ïg§ÖUdd›ÞÀì讄±]ƒÛqÉuSü²q$fìh–7Åî–ôHp^lM"¦„%¤¯ ©j¿‹YçäÊڂ계냦˜Q쇊6<–wìôj¤pÀa·‹ØÉ„7êbBþn×îÁeW—KËf5û:)O%zaåîZëªé Ÿ¥Kô3f'=cG-q`—„ÔÕƒ~½\§j75{uñ(lºx/„Z#"Yý [€ ƒÁ0I0š†}¼s%¬ ’‹{Ír¹ÊÀÉ<‚›um^I+*ˆÚ¸w0·“ÇGÖÐ=1X<¤$”°<šÕ5ïeISÎáŒ9¾¿T~á`Ÿ·j8òªJA볚Õåí:±^NœBÁÝŒœ Ž±¦BÆó¶<åüýñ¢¬o†½œ/¥ž^ÏDré@ùæøÄÉ•°œ¢Ó±ˆ‚Øë¡…±ÚÓò¹*äËÈ µÉnÂãԱ딤”PžvŒ´CN5‘DB«!Álw*ÛMìQŒ4éQ +6iG%,(ë«øsÎk±ƒÒºâœs‰úVõúý¢„e ð¯TE­CÔ1û6†?f’ÓÉÐN‰Ô1Ÿ1¨í||–ÒÀŽðÜá%üH^ðè97«gaŸ”PâEàv„Y’eqàú`İ„gæñyåŠBñNÔgÓèD[~äMŠ’ž\† ëM‘^ì|Ê=¾ŽÊE¶1rÅšiì@PÊÄó?/"Rüy[W›ït>P¡ÇÛåàì5p¼‚ Þ¿é[‰¸ÙŽ3"›š4q`OvJ¤Ž»œ±í¤ñ.Øï€Mù=$#}?A2*E/ÀƒÁ`˜\°MXSBߊ“Ub´ÐÌ*ñ@ÞôI‰¨„V¦¨la¶ùš’þ2ÉA cÁcR|¤´òªÉÌðÙò@Rнߏ3†S{PÅ©ÚLJVåpNW–À‡Ñ „±Ô~à”ÀúÓjfØ+ªÊyÍ õ Kìµ$‡q²”ñjÎ"ž=;=`ʧX¸ðx`’d–âHV_è¡Ùõ~étoO¦wS –»'«„VÂ4•.{ÜýÞoŠ2í‚‚¦¸ôU£Ù^€ ƒÁ0¹0µ¶mÙl0 †I[€§¸)%,Ç^³ƒdñƒReï)þšOv—åBTÁ*-n%vw:RY‚æþDÄ­öšå5„ÜUO“çw¡¢–øòH;%Kg"˜‘2Wä@¦ã®cØlSÙ¤FVMJXD”1Â,îœrä£yPDy)u²øi¹Ï™öÂN†[Y\±à÷[YR–¨HŠXn~ø‚TÔ^¢†ÞÍÌ“U vÆŠõêRðéô!a'DìèŒ 8íxºN:“§£d•ÇI»´#ª/è^žm•*ê (q5)+¢Àâ„ÖU™Ô·â©G^if•£HC2 zŠ@(aqý¦¦!ñD#Œ‡H}«“pX3ˆE\E$)‰, Zîà€ÈÉN:´ÌýÂX¼éÕ`qõbB]8‹ˆXËI…©¨Å3^r+SÎ ÏÖ-OµÀBTJÁJ(F QFž/$äéCcÒ΀QŒ¹’Pæ‚0¸ü’Ë!fx ;¬¯ÃLÍIùk"™hDÉÞ@„50ðÆ0‘>¤ÃÇifÉ‘ú~›¢#;,é8sÂN²™HCJçéIc½ÚŸ„Gñt&—T°Í2Þ I ­þD/ÀƒÁ`˜d˜RbÐ}¼ó[¼ÒË•°§š©ZÌdE­}÷xi%,Â'WQª¸Y!’å: uq;¨`Eâ@Ί“õ’…Þ§ŽãŠZb—xJQ‹”¢–`ïPJÂÉ]¾Í=–7¨`åÐT´ ²W<›Š'ò‚¨6ï¥H3H…/Ù"z|8VHÞ!e)îÉÎt»ù¾¬RÙ‰sŽÉfu<0AAs™ªt]a±?Y(Xyô'M‰'¬¤0V|ÆŽåŠî¥FŠ””»J*Xñ§Üt/o é+ïܨԠG£Þ1aÑÇ pÉD…Fà:¤¬„´“×L)Úát\ÁJ„$ËKJ\pÎÚ÷•§]!OÖœpxl»ØýŠ,ÿ@xõĤu΄߯hr>ü]3·¥¯T­E¨õ¢3¡“•·Òþ$'¤¯49œè…%6©„%àÌBX7©`å;)a±[Zyà”z˜úx6 Ã$ÔªÆ`JXƒÁ`0T€~~fRXåtàFw ¶^ %¬L)a¥¬¸¢'Žr4«µbJXI]aV(a•J ‹ßq 5+áÞ€RØáî9å·Ã‘VÂ6sƹëZV²Ë^w5$N[L²¬Ê(ãœs.£íB «ä½J «ÕìI «Ä5oÙ ±Ó³­ ¨^T²pòÈ9Ã_WQÙ½Û—;e7orRÒWz«u ®Xï©¥±+´á¤£½^õò× Ž·T_"1862m'¡„¥G é«{=´ZŸ-8j%,¯”°x³kL)ÞºŸ`ƒÁ`0L.L©Ø(hƒÁ`0*@??·$Uœ£Àk\p¬Â¼ »÷(jÈ{•-‘»ê 5¥íÄ”°®á•£Yî‘J ŠP¾RQ«¦Ò;¸Y‘³ÄÎÅe°)Úy•°ÄÍ %¬~ºX×>¢$´œ1¦uEDrªBÁ*ÊN·k ‚ºeGÊ*èl‚¯Nuè©t„  xº™PÂ’e`R¾P°Š‰[‘´ÂX„Å•=ªgàÑž°èç¸J øX¼1 ;ÊœXLå)v¨ìBrXüä`–~ppÈ`/¿$‡ÅW^(aÕ¢]Ò¥ì¡ÌŬBjŸŸd’v<ÎHH­Cl”Š<ãÒN%ä •"ϳ’J¬b”e…4$n5s*Q "% åU+ITUòp ÔúàÅ‘œ¤ÖE‘‰R%±ßA å&(ñ4wiG;iö{=6E´nÍ&«ˆu<1XŠx&›AIVáM$¸*š)A«h…NšY"ÐL«:i]%šEÜŽ)aQ/ÀƒÁ`˜\°'à)çœ «Ø.èë"ÍyéÞéŠlÓ Èñ&ÐRt0Å»d3KöRô‘@VSN7…×¾kï‰^ö†&^ÕÔ.§Äv2UlR¸×¬¿+tñ3ÙÛr/´™ÞHPЮûÌfØ5оC Zl{NôÅ]'¨ìTo§\±°“™®‘øteÉ‘ÚlŒèNo ×—=RŒ!¨¯èÏ%‘KüÒ¥»…Å€§^m¾ ¼â.Áî¼€_ªjœ õª3†SlHA3„\•Ôå¬Ç&a=``_‹+ös"—æ¤.þB†šû³×΋}àÂN¢v…`ïÙ®$½5óÏÌÖ³_ds(ÆåøæUi+¡„U`UAóÚåœe.(o2äŠÊ†Yˆ:vJؤ EJ¤ÄyT‚:ǺÉO$2—Å!ø‰ˆÉ’º†¡Éà2ðýpΉ^Í'àD¯Ù=W\&‹1ˆ&’¼²)Ì&f„ßx´(IRÇÍ΀\qx¦!Ø[WMžRJXØì¶ ƒÁP¦mJXƒÁ`0T€~~n)ª8çx‹sy“8q.î–`ó + IÉaì–' %¬’“éÉ<,¹Èv (´ORBÙ,©„•¬¡å u© üâJX9šE®[æ> °ØšC;bF¢æîPd|2Õ‘ã-ªådlI5ÎÙ¡Ö•C«/ἘÔE ɽʡjÚ .d| ƒºG%¬ cœ°›)ÈŽèQú*ãÁ7%!ÙR‚ èÉõ/ËãIA;H€=«Wÿ~xxŸ)’Óº¢vÂX-)ʈ¨Ü÷Ívúý¼·°eKýmo[ßlžtÒœ+æ?üð.=²Vs3gF—”zvîlcáBÚ°Þùõ:ë}4}íÞÓf¼Á`0Œ–-»ßö¶ú¾{þÚI'°bEýá‡õHW«¹™3 ö‡´Öt_¯û¶?ûSjÕ¶˜ˆ¨,ÃOìÕå˜?ðºë[³æåÏ}n QcŸsë6òì³§¯ZuXÌÎêÕåðpëÁºIžÍ™C<7¹;vs4{=·•ˆˆ<²nz2¯R F 26´?P›Ml m³›ZLéMtµ™4¾×ºÃ>gU”@N"¥ ¥¨cñ\íR‡ÒÜlëxyÁöîÅUÒTÐj×|BÕþà¾*ññf¦6A%fìAÁJc¥ô6;lÃÖîǾ*Š’Þê;&Ϩ©ìñžfÈÛžfQ„'žhìIÎæÏºîºúš5/þýß7û›œóŒááy?úQ DD´cõêLJ‡Åi_íñÏâ(‹1Ø.è)¡„•Ñä«V-zñÅâ#y¢( ÚË*·ðóŸ—K—ò[°œ_ÃíÛAAŠ}º¦yÚÍxÈÆ§hϾˆ†P°J(aÒ¶PO¶Ý6ãxÅØç,ìÔ°«áÐ=}·*öH'jNp%,A2S’±¯¡–ßå+r^›2¹À´šXŒß÷g(Y%”°Ê •°ÐpÅüÀ µ8Cž(êàd&ÊÑŽ ÖaË»§ÖŸÁ¡ôIJ\Ì"Š:d„º&@’:¦ø¶Þ^‹D{Ó‰;Â>Òz‘¾’ƒãöÔä³ÎÙË \²ªÁpÀÁ«V…_Üñ‘õ:3³7ÊôÊ/~ñÌÒ¥×ÀbŸbûö‚¨P5·ÃÇ[1êïXÂ9úÖ·Ž=òÈéï~÷¯wìhÿÙxé%ÿØcœ5à_Ö‘×vcù /ЬYð4g6…@;^Ü/Ž Ãkƒs}ë[ù‘Gn÷»ÃŽm‡ø—^ÚýØcŨêÍud|4ª¦TÐÎஹfÁyç½þì³×ÿö·Ñvg5óG?ú±ÞÕ«G†‡_ÑïoØàO<æãŽ£§~G»ÚD™ ƒa¼1ãšk¦wÞŽ³Ï.ûÛØ˜™g5?NA¿°zõcûöm%FÁZO\ôóÌ•°è£=üê«üÔ§~sï½›ba H4zè¡íœ‚v®Æ“”¶o‡(sYãØU«ÂùçÏ8õÔúý÷"š7ϾtàË·0€ƒ’Y@Œ'u4¡Ä¾b™ØC*)(RX*ai;¼-²‰0}ˆKVœÉ=—#¿XGá0îžïE «`v<¶¿3dTBEŸTÂÊ9wZHrÈXTªqf[QÈ[Q0d¤‰o渷YQÇ5¶»Ø)E-`€EÓ!µÞ¤Ž=ž2©S«t²x“b]Nö«h¨ˆ¡óp"ü™NCQéŒ µÇ¥¦¤ ¨gIè[ñëQ&GŠ^¬wBÆ€Qúª„ÏOëKµëÞ{÷MÒ Ð†}âV/ÿâO-]*¸ëÒ¹zƒ[nPШ„ÅU´Jçˆï‚¥–c˜"hý!9fÆŠ‹~ò“m÷Þ»õ˜c†ˆ†ˆè•WŠ÷ 0þáõŸþôefdbŒ4 µö¸råîË/ŸvÛmµ«¯.^y…>ûÙÚK/Ñ 7°o nÂ’RS\Ú‰ð˜©:Y"¸Õ½d•–ÐY@ܽ¸Ò½"ÒÌý!ì1ò€½¢9/ b ‘JXJˆJ¬|¤Hü…<ŸÄî*¥<ŠZ$<±· V8Þ'µ(~ ðG!z “d˜_â;Ñ:¥!‰ùEì¶ë#“E–¤ÙíJ?T%¶äŒê@ôMe[±×©*q/Üîr5ùKbËSóuþ¶· ­X1ò“Ÿì¾÷Þü˜coÖ^yedãÆ}î=°xþùW~úS©¸†„…¾UBpîð}ˆˆf<½ñì³wÿþ÷»ž{n˃Žj-RÅúyná­o94”:<|hóÍÕ«Ÿ~d¿Ø¯×éŒ3^¹ñÆ™7ÞXt<à/¼°|zñµœN\^µX~óë—²j/&.®_¾óÊåTíÅÅòÇiùÛªvB!{ë[ÝÐÐàðð¡Œ@Þµzõ¦ýÄ'»„Z?%RÁ*ˆ®:k"Ý#¹¢íðÚ¡¬‘gé(‚.0 IHDñ"ÛN%)q÷d¸G8R(aq®8WîÅü!L4vêØË•°\'%,Q+‚O*.ïÂLÚ9ï@yJ®GF:o¾˜>$²w„–¨†ä)k†`Å…¨Ñ-õ&›fu2ÒZ3ðÁÍ>/ƒµ æ‘Z×Y¿I÷ýA_Á;‡ÇQwÍ4ÉœNgv¤®Î;Šõ¦2T³1Kó™•„3"Û!-J v‘.”¬úVZЪK(­¼²Ã’¶äÈQijX Ø`0 † 0!ž\÷l&")Éâ\hÖV]^äMŠÛI(ýÁ›rÞì YT3^Ò€"S´±÷‡ðq"-¡%wA'N3=cºéÐáH¨G±É¨ý=ºÚNTƒkÓ롟ÊNêÁP¡e'±¥ª¹É¸‡Cãv¹cß0èR›ºp´ÙýHjS¹¡Ù Jl+q¦¢7ÄýITMR[¯ùÈÄÏJÇêÅ <Ũ´#wå‰^¡`…›y3S¿z¼É' ñ®^`yÀS\ aþiǯMBëªàTižs£¡ñCԲç4.DYÃÈã)ãT‹‹âV‚dN+X¥Êà‡\nB“rå)‡fqŸ³Üø™!“<Âì²ÃgÔvøà:Ú©ãH6£¯ežU ÎÝJXMé«‚jù„V<ß,Š1”HA'•°j‹ît`²—µ°7U¡ ¥ÌðÓvtSË»Ø5„Íò‡_ii'DG¶w¯‹®vÈ]Eú_ãýF†RóŸß+µ÷_ "ÊšÿQCñª©{Å^»ä?q OÍ׎½¦½ë4÷GšåMw@˜U½í}nËß’×Gœ¥übŠ¿Ã¾‘žŠüùN6CèvF„Žy«ó—Ò¤£ø{Ѓß:Ö©Ÿ•Äk ;Ô?^bpâg.òk”Æîýñ¯7ì¿EGbò-À6lX¸p!gÑ¢EO=õÔîÝ=_VƒÁ`0Ò»EgòQÐÛ·o?á„ø;³gÏ!¼ð ‡vX—FfÌ8ðÕW¯ïÆ¢4¢(bøÂÌø×yÌ”C ¢r«F³BÛf7oœšœ8Ìm©Ú…‰ wwÕLT8cFÇ1sçÎÛºuùØû"±_¶˜| °†s=¯;w¾4ž ƒaŒ°eËÆª]Ø‹Q,:m1ù(èÙ³gïÀzÑÛ·owÎÍš5«*— ƒÁ0U1v‹Îä[€.\¸aÃþÎc=¶`Á‚¡¡¡Ø!ƒÁ`0Œc·èL¾øÜsÏݸqãý÷ßßhnÚ´iíÚµçw^ú(ƒÁ`0F±[t&_9Âz½þŽw¼ãùçŸÿâ¿8sæÌk¯½vóæÍëׯÁpƒÁ`04ÆnÑ™| 0mݺõòË/¿ûî»GFFN9å”›nºéØc­Ú)ƒÁ`0LMŒÑ¢3)`ƒÁ`0&;&_ Ø`0 †)[€ ƒÁ`¨¶ ƒÁPl6 ƒ¡Øl0 C°Ø`0 † ` °Á`0 À`ƒÁ`0*€-ÀƒÁ`0T[€ ƒÁ`¨¶ ƒÁPl6 ƒ¡Øl0 C°Ø`0 † Ч ð¶mÛ.¾øâ9sæÌœ9sxxøñǯڣjÐýuX·nÝ%—\òæ7¿yÆŒGuÔ²e˶mÛ6ž®Ž?F÷!ùЇ>äœûó?ÿó1ö®bôzqî¾ûî?þã?ž9sæÁ|òÉ'ßÿýããg%èéâüìg?;ãŒ39äƒ:èÄO¼ýöÛÇÍωƒÍ›7êSŸ:ù䓇††œsO?ýtÕBÿadddñâŇvØ×¿þõï~÷»Çü¡‡ºeË–ªýoôtN=õÔ%K–\sÍ5ßøÆ7®ºêª3f¼éMoz饗ÆÙçqÃè>$?üáçÌ™388ø±}l\ܬ½^œ¯~õ«DtÆgÜtÓMÿò/ÿ²lÙ²ï|ç;ãéðx¢§‹ó«_ýjÚ´iï|ç;W®\ùýïÿýï?­\¹rœ}®?ûÙÏ=ôÐsÎ9géÒ¥Dô»ßý®jÆ ý¸ãß ¢µk×6šÏ>ûìàààg>ó™j½ôtž|òIÞ\¹r%}ýë_s/+Â(>$/¿üòüùó¿öµ¯pÀS{îéâüîw¿›>}úe—]6ŽV‰ž.ΕW^éœÛºuk£Y¯×çÏŸ?<<1.V‰ž.Ί+¼÷Ë—/'"ïý¸9Yzº8###yž|ðÁf­V;øàƒûá* dY?®DÔŸ1à 6,\¸¿³hÑ¢§žzj÷îÝU¹T ^ËuxðÁãÇʹªÑëÅùå/ùÕ¯~õ+_ùŠsn\¬=]œxàøã_¹råüùóóùü$.ΓO>ùgögÇ{ì-·Ü2mÚ´ï~÷»]tQ­Vk\+ÔG?.À³gÏÞ±cgûöíιY³fUåR%ÅuسgÏùçŸÿÈ#¬[·îè£{+C÷ç¹çžûüç?ÿÏÿüÏeY6Ù±cÇÌ™3kµ)øëé“óº×½î¿þë¿Þ÷¾÷5ß9ãŒ3Ö­[÷Ì3Ï,X°`Ì}wôtq®ºê*çÜ]wÝ5mÚ4"Þ¸qã²eËlîô#½pá 6ðw{ì±  UåR%èõ:ŒŒŒ|øÃ~ðÁüã/Y²d\|¬ Ý_œgžyæÕW_ý‹¿ø‹Ùû°sçÎÛo¿}öìÙkÖ¬G—Ç=}rQôm¼žªûnzº8ëׯ?î¸ã«oï|ç;7oÞ,–pÃTÅÔü¤qî¹çnܸ±)°iÓ¦µkמwÞyÕz5þèé:EqÁÜwß}wÝu×É'Ÿ<ŽnVƒî/αÇ»1}úô³Î:kݺuïz×»Æ×ëqBOŸœóÏ?Ÿˆ~üã7ß¹ûî»=ôÐ#Ž8b\ôtqÞð†7<úè£|ÖC=tàxàãá«¡rT—UFFF-ZôÆ7¾qÅŠÿþïÿ¾xñâC9dóæÍUû5ÞH_‡Õ«WçyÞÔhd×\zé¥w0<üðÃÕ¹?¶èéâLù<àž.Ž÷~éÒ¥|ð7Þøýïÿ#ù}å+_©Îý±EOçÛßþ6ýÑýÑÊ•+¿÷½ï}ô£%¢Ï~ö³Õ¹_ ¼÷Ÿ”†„Ü-·ÜrÇw<ðÀUû5æèÇ8„°eË– /¼pÖ¬Y3fÌ8óÌ37lØPµGÕ q,ÿöoÿÖhŠÌŠ–-[V‘ããî/ŽÀ”_€CçÅ_\¶lÙܹs;î¸o~ó›U¸<~èéâ¬Zµê”SNyÝë^wà.Y²äk_ûZS•¢P¯×õÏË9çœSµ_c¦nBžÁ`0 ý6 ƒ¡rØl0 C°Ø`0 † ` °Á`0 À`ƒÁ`0*€-ÀƒÁ`0T[€ ƒÁ`¨¶ ƒÁPl6 ƒ¡Øl0 C°Ø`0 † ` °Á`0 À`ƒÁ`0*€-ÀƒÁ`0T[€ ƒÁ`¨¶ ƒÁPl6 ƒ¡Øl0 C°Ø`˜dعsç1Çó®w½«^¯7Þ¹çž{²,ûò—¿\­cƒ¡'¸BÕ> †ÞððßtÒIŸþô§¯»îº­[·.^¼øÝï~÷øÃªý2 =À`ƒaR⦛nºâŠ+V¯^}à 7üú׿^¿~ýë_ÿúª2 =À`ƒaR"„pÎ9ç¬]»vddäÞ{ï}ï{ß[µGƒ¡7X Ø`˜”pÎ]|ñÅ{öìY¼x±­¾Ãd„-ÀäĖ-[.»ì²·¿ýíëׯÿ§ú§ªÝ1 =Ã`ƒaò!„ð±}lÚ´ikÖ¬ùë¿þë¿ù›¿yôÑG«vÊ`0ô‹ “_úÒ—®ºêªµkמzê©###'tÒž={~ùË_ UíšÁ`èöl0L2üêW¿ú»¿û»¿ýÛ¿=õÔS‰hppðöÛoúé§/¿üòª]3 =Àž€ ƒÁ`¨öl0 C°Ø`0 † ` °Á`0 À`ƒÁ`0*€-ÀƒÁ`0T[€ ƒÁ`¨¶ ƒÁPl6 ƒ¡Øl0 C°Ø`0 † ` °Á`0 À`ƒÁ`0*€-ÀƒÁ`0T[€ ƒÁ`¨¶ ƒÁPl6 ƒ¡Øl0 C°Ø`0 † ` °Á`0 À`ƒÁ`0*€-ÀƒÁ`0T[€ ƒÁ`¨ÿÞ{–,oƒú)IEND®B`‚gsl/doc/images/ode-vdp.png0000644000175000017500000004422713536674414014021 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœíÝy@TÕÿ>ð3ì « Òbˆ’š¨ˆˆh©âBŠŠš©™ke–fe®fXæšš{.¹a‰hî ¢&B‚û’¥âЏ°/3¿?î÷ÇgÄaæÎœ÷ž×_8è½ïNwîsιçÞ«P©T Ë„wU€0`À €8@p€à À€0`À €8@p€à À€0f¼ ø?ÖÖÖyyy¼«(M¥Réc³ =m·² *•¼”(¥¢NÙ¡TÙ¡NÙ‰Rª(u2}–Š)hÀ €8@p€à À¸Ò¦OŸÎ» NÙ¡TÙ¡NÙ‰Rª(uê•;±º' ªÜ `TÀ €8@p€à À€0`À €8@p€à À€0`À €8@p€à À€0`Àè1€ÓÓÓß|óM…B¡¿]J_¬R©† ¡§íM_6zúôé+V$%%écãF@þpnnîàÁƒ×¬Ycgg'ûÆŒƒü<~üø¾}û¶jÕJö- ™xÇŽ.\˜4i’ÿVQžððpy+(+<<¼ÜÒß*•JÆÍyxxÄÅŹ¹¹ýo v¡á_0$ýÅ“ÌÛ­ ³PñŽÀ@þâIæUÐe«D²”…GQp€à@ïŒùg€²0à À€0`À €8@p€à À€0`À €8@p€à À€0`À €8@p€à À€0`À €8@p€à À€0`À €8@p€à À€0`À €8@p€à À€0`À €8@p€à À€0`À €8@p€à À€0`À €8@p s'$$ôëׯF­ZµŠ‰‰‘wûÆÁLÞÍùûûÄÄÄx{{_¸paĈ=>|¸¼{B¥Rɸ¹/¿üòûï¿W(ÒÏž=Û»wïþùçåu(d®@wú‹'ýÆ^NNŽ““S~~þËë@=ú‹'ý.ÂÚ³gOãÆõº à+77—w BÒcgddLž>>»víâ]‹²³³sss{÷îݽ{÷””Þåh)<<¼ÜÒßõÀwîÜéܹó´iÓ4ÿWªòÐàçϟ׫W/ àƒ>¸qãïrÄ“••õñÇçää4lØpêÔ©™™™¼+LVV–··÷Î;<èáá±xñbÄpeegg=ztúôé“'OnÕªÕþýûyW$˜¬¬¬ÐÐЫW¯vêÔ©G={ö<}ú4ï¢*-<<¼ÜÒßåà»wïÏ;·C‡²oœ ¬¬¬o¾ùæï¿ÿvww÷õõ3f̽{÷x%’ìììúõëÿôÓO)))ééé 4ˆŒŒÌÊÊâ]—0²³³mmm½½½wìØ³wïÞúõë¯X±¢¸¸˜wiÂÈÊʲµµíÑ£Gjjêøñã?ÿüsÿ'Nð®KÙÙÙÕªU³´´3fÌÕ«W»víÚ¯_?Mn©ÊdàtéÒ%***00PÞ-Ó¤R©rrrlmmííí§OŸ~ùòe›&MšL:õùó缫CVVVµjÕco¼ñÆŠ+Nœ8ñ÷ßׯ_Ù²eEEE¼«@I2Æ|||vîܹmÛ¶M›6yyyíÙ³‡omB(***..¶²²bŒ™˜˜„……;wnèСýû÷ïÝ»÷åË—y()€¥Ÿ­¬¬ÆŽ{õêU//¯Ö­[3æþýû|Ë#KæîҥˤI“Þ}÷]y7KVvv¶•••‰Éÿ5£³³ó÷ßæÌ™xxxÌž=“/% >JþX¯^½õë×8p`çÎ7ŽŽŽÆÒ˜Š•j@Ƙ¯¯o||üüùó¿þúë   ÔÔT^µ A½#155ýàƒ®^½Ú¥K—öíÛ‡……a­eÅÊ„666“&Mºr劭­­§§çĉŸ>}Ê«<²dàÔÔÔ”º‚ýäÉy÷B‡z¿¯Äk¯½¶lÙ²ýû÷ÇÇÇ{yymß¾Km¢fPK}èéé¹k×®ùóçGFFúûû'%%q©M儌±   ”””>}útíÚõƒ>¸sçŽák‹ÐÂÂbäÈ‘—.]rww÷ññ™6mZvv¶áËBNNŽMÙÏ«W¯õ×_ݹsç­·ÞZµj•R©4|ydÉÀå^Ávtt”w/t”í÷•ðòòÚ·oßÂ… g̘áïï/â’Ã(;þ(Ñ¥K—Ó§O:´wïÞC† ÁÅõr•Ûƒ‘˜™™=úÊ•+¯¾úª——WTT¦dʪ cNNN³gÏNMM½víZÆ 7lØ€)™²*ø3ÆêÔ©³~ýú;wþòË/¾¾¾G5dm”ámH:yþü¹]¡S§N)))Æ }z—.]®\¹b€Ú„ É·Xâëë{ìØ±O?ý´_¿~ƒÆÚ¢š·aHHÈ… |}}[¶lQPP ïÚ(C뤂)èRœœœ.\Ó¼yóÄÄD}×& MúÎ’7ß|sçÎ ,øâ‹/zöìy÷î]}×&Mz0%:uêtæÌ™Î;·mÛvÆŒUüô'ÑüdŒ)ŠÁƒ_¾|ùÕW_mÚ´éš5k0#Í*ÀŒ1kkëiÓ¦¥¤¤¤¦¦6kÖ¬*ÏH#€u¢yK7n|ðàÁ)S¦ôîÝû‹/¾ÈÉÉÑ_m¢¨T~0Æ‚ƒƒÏž=Û¬Y³fÍš­X±§¿JåcÌÜÜ|ܸqÒéÏÛÛ³©• ‰­­mTTÔþýû—.]„»]µhÃÚµkoß¾}Ö¬Y1bDÕ|X'• `‰t£áƒ¼¼¼Ž9¢ÂDQXXXr ¦æ,,,ÂÃÃãããW­ZXÅO•íÁH^ýõ˜˜˜ˆˆˆ~ýú}òÉ'Ïž=ÓGmBЮc^^^'Nœ iݺuTTTaa¡ìµ ¡°°P¥RYXXhño{öìyáÂOOÏ7Ê^q`hÀŒ1ggçõë×Ï›7oРAüq•}jGeGoê7n|üøñ=z´nÝú‡~¨²~Ò¥ CCCÏŸ?_TTäéé¹{÷ny …. hjjúùçŸ'''9rÄÏÏïÂ… òÖ&­{0;;» ìØ±ãûï¿ ­RÏ„GëDë–tëÖíܹsEEEM›6­š3:~u¥Ó_RRÒ¾}ûnÞ¼)cm¢Ð± —-[¶aÆO>ùd̘1Uð½rZLŸ–R§N={ö|òÉ' ,¨j—Eto@Ƙ¯¯ïÉ“'=<<š5kVužà†Ö‰ŽÌsppX¾|ù²eËú÷ï?qâĪ6‹Uñ=Hrww?pà@hhh‹-~ýõWY ˆî!cÌßßÿÌ™3………>>>â¾ÍF;²4 clذaIII¿ÿþ{ÇŽoß¾­ûE¡Ë‚:KKËÙ³gGGG;vÔ¨QUá±'`ÈõÕíÔ©Srrrjjjûöí«Ô+•dé;3Æ ÅgŸ}¶gÏžˆˆˆ?ü°J½ËA®6´··_¶lÙÔ©SƒƒƒçÌ™SužX$W2ÆêÔ©ТE‹­[·Ê²Múdl@ÆXëÖ­ÿúë¯ÜÜ\£Á0X'r0cÌÕÕuïÞ½¡¡¡~~~Ug1‚ŽÓ§¥H£7“æÍ›ýW·„\ãÉ€’’’vîÜÙ±cÇ*rŸ«¼ùajj:yòä]»vMŸ>}äÈ‘Uá¹1ò6 cÌÁÁaݺu‘‘‘]»v]±b…Œ[¦¬˜1¦P(Æ¿wïÞÈÈÈ>ú¨*LGËÛ€Œ±jÕª­\¹rÖ¬Y]»v]·nŒ[&KÞN cÌÍÍ->>¾M›6-[¶¬ ÓѲ7 c¬E‹ÉÉÉFÿUÙXÒ·oߣGΟ?ôèÑÆzÃ:X'²çcÌÛÛ;99ùÞ½{:t0ú²\.«OŸ>ÇŽûî»ïFeôÏ“w,1551cÆâÅ‹ƒƒƒ¾£dŒÙÚÚFGG÷èÑ£eË–Æýà}œ%õë×?yòäãÇß~ûm£\b‰Ö‰žòÃÖÖvûöí­[·6îבêcð!yóÍ7ÿüóÏk×®uëÖ͈ßÇ•ŸŸobbbnn®wëÖíàÁƒ3fÌøì³ÏŒø./ý„ …â믿^¾|yÏž=W®\©]P §°ÄÖÖvëÖ­}ûöõóó;tèžö X'zýꆇ‡Oœ81 Àø»zýê:99íÙ³§~ýúo¿ýöÕ«Wõ´¾ôÚ€Œ±&Mš$%%;w®GÆú>W}·appð‘#G~üñÇ1cÆe?Fß (õcV¯^=`À#›AëDs/’aÆmÚ´é½÷Þ3Öî³¾ÐÌÌláÂ…ãÆkÛ¶mBB‚þvÄ‹þº€%œ÷ïßïîîÞ®]»‡êu_\èi Z]ƒ Nž<ù÷ß4Èø2Xß,‘ú1S¦LY¶l™¾÷e0`è;?cíÛ·?zôèìÙ³.\¨×qa€sclĈ7nìÛ·¯ñ=íÄ0 hff¶hÑ¢îÝ»wìØÑøÖ%&?ìííccc333hdë Ó€Œ± >|xöìÙóçÏ7Àî ¬“—¾X‡š?¾ñ­È7@Føë¯¿öîÝ;))É»3ƒ5 c,222$$$((èñãdž٣a¬ ­¬¬vìØ‘››;`ÀcºÇÁaݺu9²dÉ’ˆˆÃìQ¯À:1X×ïõ×_ß¿DDÄæÍ› °;ƒ1À j‰   õë×wïÞݘn6d2Æ"##»uëfdlÈ6´°°ˆŽŽ.,,4¦ 6ØiPR»ví£GnÛ¶mâĉÛ©ž €µ———gjjª§¨eyxxìÞ½{ܸq»ví2Ì À}gÆX§N–-[röìYƒíT¯ |îcŒÍœ9³S§N;w6Ž÷Ç©TªÜÜ\ƒíÑÂÂbëÖ­ýû÷7Ž ÎÎÎ6d2ÆjÕª·oß¾¯¾úÊû•X{ÆX“&Mbcc‡ oÈýêa.aªëѣǢE‹ºtérñâECîWO ߀Œ±Ù³gtêÔÉîïÊÍ͵°°0555äN-,,¶mÛV\\}úÌ™3§S§NFð¨E. Èûá‡|}}Geø]ËËðS ‹-[¶\ºtÉnpàÕ†NNNÑÑÑ“'O>wîœá÷. °ö¸0c¬mÛ¶kÖ¬ 3‚·ójÃ÷Þ{oÈ!Ÿ|ò‰áw-/.ƒÉܹs/^¼(úsË96 ¥¥åÆ'Mš$úÃvx0c¬AƒsçÎíׯŸ ¯NBkÏ0K Ëõî»ïvîÜyÊ”)\ö.#^Ì›6mÚåË—£££¹ì].ÏŸ?çÕ€VVVëׯ7nœÐÏä5… yë­·"##ÃÂÂòòòxÕ ;ŽßbÆØûï¿ßªU«1cÆð*@`íñ=ìæÌ™óû￟8q‚W²à؆–––«V­úôÓOdÈŸ°Há[Ìk×®ÝСCÌÏÉÉ1ð}Àå>|xÓ¦MÅšÌGkû˜1æîî>aÂAWór½IÚµk×£G/¾ø‚w!Ú ’}ô‘££cTTïB*BF~ÿþ}á&còóóMMMÍÌÌxÂc3fÌkY%X{˜16nܸ۷ooÙ²…w!•F¤cQQQñññû÷ïç]H¥iC…B±jÕªï¾û.??Ÿw-•C¤Ã377ïÝ»·pË*‰t£%Œ±þù‡w!šBkȹÏÜÜ|ùòåãÇn•ÎàÃÖÖvÖ¬Y"¾b…Îéïµ×^{õÕWÓÒÒxR9t1æí횚ʻŠÊ¡Óƒ‘´oßþÈ‘#¼«ÐX{D˜1æççççç'Ü3¢IûêÕ«'âËnétbcîîîׯ_ç]Eåj@ooïÓ§Oó®¢rH5 c¬}ûö‡æ]…¦ÀÚ£ÀŒ1WWWጕ••ÅëI&e¹¸¸ˆø¦[R¡ˆLªèêêjnn.ÖƒM¨€ýýýÀU©sŸ­­mVVï**‡TŠÀtN"0µœp³Ð¤Ž@Ƙ‡‡‡‰‰É¿ÿþË» €µG*?lmmEÓùêÚÛÛ ÷D@Rùáîî~íÚ5ÞUTµœpLê”´k×N”A0X{¤ØÎÎ#`9;;‹5.,,T©T¼ ù?uëÖnLªÈ¼ L­Ãó÷÷eX{¤òÃÎÎN¸0µ¾³p³ÐÔÂCÐ0©ƒPÄ0©ƒ1Ö¾}ûC‡ñ®B#`í‘ `\ÖpL-<\\\Š‹‹ÅºŽZ'¦nݺOŸ>è8¤Ö€L¨ËÀ`í‘ÊAGÀ¤¾ºÂ0ÁsŸpë°¨„ …ÂËËëÌ™3¼ ѵ”ˆr¬=RŒEXº1€é’ºuëŠ5 Mm‰6 M3€E¹ ŒÖRaaaqq±••ïBþaéÎÙÙùñãǼ«¨‚á!ܘZ/ ÀÔB&Îe`°–H=D‚ ;Mê«+\ á˜ÚAÈ `j!ç20XKÔFoX„¥;ᦠ †‡XSÐEEEEEE–––¼ ùFݼy3;;›w!¡ÀLËÀ`-Q GÀÔpÂ0µd¢Ý‰D°Ã333kРÁ¹sçx¢‚¡DˆËÀ`-Q àjÕªåææ*•JÞ…Tµ6.€ 懻»ûÍ›7E9ÉŽÞš…&xJ„¸ ŒÖµðP(ÖÖÖ¢L[I¨}u… `‚ƒ++«êÕ«ß½{—w!!Ø€±˜f q¬%jÌ\M­ ]\\Äz#!ÍsŸ@³ÐÔº€%À² ¬%jáÁ¼ LmüQ­Z5…B!Ð,Íüè‰ÐÔŽÀ^^^/^,,,ä]ÈË‘mC&Âe`°–°X ¡U*UNNµ¯®X³Ð4Ï}݉DvôV­ZµÚµk_¾|™w!/G¶ ™—ÀZzþü9µkœ››kiiijjÊ»ÿ.€©„ SÐ2ešrÒ¿ ŒÖÁ~ŸXLsôæââ"г8„L¨[i6 DˆV©T¹¹¹ÖÖÖ¼ y!??¿äädÞU¼XKbMAl@&Ú:,šm(Ð4Í”ñbàÜÜ\ jóXêªW¯þôéSÞU¼XK¿ºÂ€©5 m šæìßk¯½–‘‘‘››Ë»—£<nÞ¼yjjªJ¥â]HE(7 „øY¬%‚ù!Ö˜fxˆõ8hšÓø&&&o¼ñFZZïB^Žr~8;;ÛÙÙݸqƒw!¡ù-V‡6N˜ø¡V Íðî0µƒP"Ê:,ša ú—)÷`$ÄÏŠ`- `±FÀ‰6M6?D¹˜lFB?€É%ÀƉ`~?ÔJ!Ø€Œ1ggg˜l~ˆ²‹øŽ~o@Fþ¬ˆÖÁükL3<K¯Ò³²²â]H90-‹fÍšÑ`‚ßbu¶¶¶`#Dðȳ³³{öìï*4E³ï,PgggÛØØð®¢|¢Ü Ló ,áææöðá‚Þ…¼åƒPboo6BŸ„%Ö˜`2ÆjÔ¨ñèÑ#â÷~HÎÁ”%€)·!cL¡PØÛÛSîU‡”‚°q"øÕëmH4–––”¿±%(ŸûMMMé¯'§yª#>­E|Ÿ‘?+"€µ¡T*óóó©Í½_nP ÁŒD”Yhâç>!BSîÄHè€)„ŒüY¬¬¬,…BÁ»ÿk šì¹O”&Û€!ÖaïÄ0ò—0À:Bkƒæèø¡V ÙsŸ(L¶%¢Œ€)·!aLðL¨ÎÆÆ¦   ¨¨ˆw!åCkƒf‹5¦Ù†Lœ&~î£+0Í7R—B?€‰7 c¬ZµjÙÙÙ¼«(X4ÃÃÌÌÌÌÌLˆ‡à3ªmÈÄ `â#`úSÐyyyÄßäÃÈ0ñƒPByj¬ ²áA|ÉŸ:²8QÞÇ@¶%ô§ …½`!Úll(0ÙC­²m(ИfJÜÜÜnݺU\\Ì»ÂèMwÄ{ÊmˆÖÙsŸ@—ÉžþDy!ñÁ‡¥¥e5n߾ͻ"<0ÖØØdeeÙÙÙñ®¢”µRÈvb?÷Ÿ…¦ß€ ,ÊgE°6Ȇñ箕 ù$‰(/D¢?€#¾Kˆð ÀBtbÀƆl‹²+;;ÛÚÚšÚ“L$Ë…øHô{0Œ| щ©Z|óæÍÐÐP{{{{{ûÐÐÐ[·nɾ îÈv”5u”Ï}...ôßÇ@ö ,áîî~ãÆ ÞU¼ýdä˜þÔŒöYQæÎÊÊ lÞ¼yZZZZZZóæÍ;tè““#ï^¸#;eÙdŒ™››ÛØØ+ÊÀ;wî K”Œ¥¥¥J¥*((à]H9Ìdßb:u¶oß.ûfé ¢LAÏú,JxP`âa ²Ã%€ÙÿB‘†Ë ‰ÐmH¢ ÀVVVJ¥²°°w!/A¹ cÕ«WòäIqq1ïB^H”ð | X”ü ;-J2ÂSƒàJ#B<’øÎÔÔÔÞÞžlr0òa GGǧOŸò®¢|ÄÂdÃC”d„§À•FüÜGöPSG¼ ùYhQÎ}d§ ‹‹‹ ­¬¬xòrëŽl'\iÄÃCˆ…ÐôgP‰0ý” `Q`Úl<è0ÍCMñ6däX 0Í™|FodX 6${VDWñðb š~~Ð`!Î}d練 À¢´!ÙyAp¥`²‡š:âmÈȰ(³˜‚Öå¥ 16ÄÃþ¸¨¨¨¨¨ˆøúâïceðA6€ ²,P'l<ˆu选7 #`Y` ZwdXˆ/²l<ˆ€Éj%ˆ7 „øûDÉ SSÓœœÞ…”&J†!€å@ö¬ˆ®4âùAÿABœû0– Í…Ð…‡………‰‰I^^ïBJ¥ÈÀÆ$++ËÎÎŽw/Dÿ0ñŒ„~ÓoC ÍYhƒ‘ ô$†6&ÄÏ}B\¦Ü€â,DJh®Ãh ‘ àììlÞUh l<è0ÍC­ñ”899eee‘}­…@ùA3€š‚fTX ${VDWñüb šþWW¡P8::fddð.¤|ëH dTX ${VDWñ¦?M¼KPž…¢#¡¹K d$X¬ÄØxϲ}½Ä°ÙV©Tyyy¢\#»K ü Àb5 Øxïú‘=ÔJäääPnÀdoÎÉɱ´´41ãËëàà€ÖXGdçÅø“Bü6$²‡Z QFÀµjÕºÿ>ï*Ê!JJh^« i°@ hnnNó^jpåäç盘˜˜››ó.ä…„˜‚¢ïüÊ+¯¤§§ó®¢b…ÍnGíK-V2’mÈÀ•EÿÜW­Zµ¼¼<¥RÉ»¢ß†WW×{÷îñ®¢bûÈ^â ”‹Ò.Asj\9ôÃC¡PØØØdggó.ä…è·¡#`YЋ•öööÔFobõFÀÆAˆsñYhQ”GÀB4 „f‹•vvvÔFÀb5 C!˜ædK !ÚÑ tî£y°X‚SÐ`Y €+Gˆð y¨•%?jÕªõðáC‚WÓÅ GGÇgÏž©T*Þ…ü‡X2¦À„ŒêY\9B0ñ)h!Ú1fnnnooOðV`Qz0333+++Rdnn®¹¹¹™™ïB4E0€Å:Ø8ħ ê;Ó¼ ,PJ¨-„nú”` ׆`c Dc,š—…|P[‡%\¬;°1xþü9ý¯.ñ°@ùñÊ+¯Ð‹Ò€j,Ð(©V­Z~~~QQïBþG¸ƒæ°\9=rppà]ÅKÐìëI c¼ ш««+Á°p8j,\x( jù!\¼—š!€+kçÎ;wæ]ÅKPû®ª#þ$íRh^nçääDêN$áz0ŒÞ,´@’$4ÏŠàJHIIÉÏÏ÷õõå]ÈKØÚÚ’‚+úÈÊÊŠw!•fooŸ]\\Ì»ñõ×_ ô"Âtxâĉ"¶!Á¯ O õÏ333 ‹ÜÜ\kkkÞµ0öÿ—_ýöÛo¼ ц««ëßÿÍ» –‘‘}ñâEÞ…hÃÄÄÄÖÖöÙ³gNNNËHMM=þüöíÛ9Ö 5"›••Æ»m `Œ€_"33óÈ‘#Ý»wç]Håš…Þ¿¿‹‹KóæÍy¢ "#à%K–ôêÕ«V­Z¼ Ñ…ËÀ‘‘‘_~ù¥¥¥%ß2´CáQ”J¥rúôé³fÍî º„ÔYQ"d;Ò¶mÛ:uêDÿ H¥Z‡µ|ùr—_I(<º°°pÙ²ecÇŽå[†.¸ß‰tñâÅÄÄÄáÇs¬AFÀ›7o¶°°èÚµ+ß2´†°x„›–Ðé륧§>|X”[¨Ë¢°kÓ¦M5jÚ´)ß2tÁ}9nÜ8"e´À=€‹‹‹#""¢¢¢„[„_,˜Ë—/Ÿ9s&88˜w!•FaÂJ²zõê¾}ûЏüJR£F'Ožð}úüùó?ÿüsŽèŽoÿý÷ßñññ}ô¯tÇýe «W¯vss àXƒŽèœK`Ö =þ<444**JÄu§DFÀ7oÞüé§ŸvïÞÍ»환˜¸¸¸Ü¿Ÿ×ã—ãââòóó»téÂeïrá{'Òwß}7fÌžZ–tQI¥Rq€æååEFF ºŽ²Á0¸|*•êƒ>hӦ͈#x×¢ ×€srrzöì9a„fÍšñ­DGÒ:,.|ïÞ½?üpÁ‚âÎûI8Ž€SSSwíÚuõêU.{—‹™™™¥¥eNN—g@.]ºÔ××—þ«Ð+†Æwß}w÷îÝ7ò.DKÜGÀ*•jèСM›6?~<Ç2dÁë2pnnn=FŒѳgOÃï]^¼øÖ­[Ý»w_ºt©£££á÷./é2°á8%%%**êСCÞ¯ìlmm)ÜÑ ×€ËqàÀ%K–lÛ¶MÐ;gqÌœ9óÖ­[Ë–-ãXƒ\¸Ü‰¤R©† æîî>yòdïZ¸ðóçÏCBB>ÿüscW;;;ïú~ýzHHÈÒ¥K5jdà]ˎ¼`)—vãÆÁƒoÙ²E¬W®–Âw²eÇŽË–-;yò¤¸=u\FÀS§NMKK‹}òYbø.,,ìÓ§ŸŸß_|aÈýêáB?~ü888xâĉ½{÷6ä~õSÐÔåææ†††N›6­]»v¼kщôà!.»¾téÒ¨Q£bcc…îÁ¨{å•W.\¸`È=nÙ²eãÆ‰‰‰ÆÑƒa<xìØ±fff‹/6äNõÊÀœ››Û½{÷>}ú÷Þ…!À˜‚þŸ¢¢¢Aƒyyy }»‚„סöøñãü±eË–†ß»žx|üøñ±cÇîܹS Ç¿”“““!Ä1sæÌäää­[·ŠøÈâ1d÷ïßßÃÃ#22Ò0{4.sø3ž£SGyyyýúõ+..Þ°aïZdÀ%€ÓÓÓƒƒƒû÷ï?pà@ïZ¯ y øÜ¹s}ûö]»v­§§§aöh†¯_¿~ÕªU'Nœî¥ñ3äm¬Ÿ|òI~~þÊ•+ã ˆ„à5`º#`C¾;%++«k×®666Û·oñ®ß² ¨]»v­mÛ¶½{÷ž9s¦!÷k'$$tìØqÞ¼y¢ßõ[–ÁøçŸž8qâüáêêj€Ý’aFÀ*•êË/¿LNNŽŽŽ677×÷î SК:uê”Á®Âfddyxxüúë¯FsÀø6¤sçÎùûûñÅS§N5ØN ÆÕÕÕ#àíÛ·÷íÛ÷×_ñ­É/e€V©T“'Ož7oÞÑ£G`ÉnYàüüü&&&8p@ܧ׽XSMš49þ|FF†¾wtÿþýÀÀ@??¿ŸþYÐW|”Ë·!%%%uîÜyΜ9£G6Ì ÌÚÚÚÊÊJ¯—0׬Yóé§ŸîÙ³§C‡úÛ G¶¶¶yyyzÚ~QQÑÈ‘#|øÎ;;vì¨ï}ñ¥§ËÀùùù#FŒØµk×ñãÇuÜVBO³ÐwîÜñ÷÷÷ððøí·ßllldß>ú›‚NIIiÓ¦ÍG}ôÃ?ÓD`) …ÂÆÆ†Ô:,ºm­¿V*•3fÌ9rä¶mÛF¥]p§ïÉ–çÏŸ‡……mذ!11јî8z}¼øúõëmÚ´yúôé¡C‡ŒéŽ£ÑGÇÅÅùúúöïßÉ’%¦¦¦ònœ=ðÆƒƒƒúé§1cÆÈ¾qj¨]¦{R“&M²²²nܸQ§N7›‘‘ñþûïggg'''ß:Éz_¸p!444 `ýúõF󤈊ɾ+66väÈ‘“&M;v¬Œ›¥LÞ")•Êo¿ývéÒ¥6l ”k³”ÉÀ999cÇŽ=~üø„~Û´æ¨0ݰB¡èСÃdÜfJJJ‹-5jgÄé˳´´|ýõ×SRRdßò¯¿þ8eÊ”¥K—V‘ôe²Ž€‹ŠŠ¾üòËÏ>û,66¶ê¤/“uüèÑ£wß}÷àÁƒýõWI_&÷}À/^ôóó+((HNN®"éËèÝ L7€™¬³ÐJ¥Rº½röìÙsæÌ1¦çã¼È AƒÖ®]+ã³³³G÷þûï˸eúäZ„uûö퀀€K—.:uª*LÝ«“+€ÿüóOŸfÍšÅÅŽú꫺oP2ހ׬YÓ¾}ûñãǯ[·Nè×$WFÀ•¯û¢µëׯnß¾=11±oß¾²ÔFß Aƒ6oÞ\XX(ËÖŽ?Þ¬Y³¼¼¼äääÆ˲MȲë—_~ñññéÖ­ÛÎ;ò6ŠéÀÓ§OïÝ»÷âÅ‹£¢¢ªB7Z,ORÌÌÌ8pàܹs>pàÀ_|aÄËë_dРAëׯ×e gÏžmÕªÕõë×Ïž=Û£G¹ Ž.#àèèhoooOOÏÄÄÄ&MšÈ[˜@µ»µ°°pöìÙÁÁÁŸ|òIlll•švVgmm­T*µ{˜É“'OF5nܸ 6,X°À¸ïת÷¥—B=“:vì¨E+•Ê%K–4mÚ´E‹§NòòòÒGmô………}ú½÷ÞÓGmbQ(µjÕÒ|º¨¨hîܹ͚5óòòJNNöööÖkyB¨ì5à§OŸŽ;6$$dâĉ111¯¼òŠþjEeBߺu«OŸ>'Nܺuë¼yóªìÀ·„SЉ‰‰z*†Ñ`{{û¦M›;vL“¿œ••5~üø.]ºŒ=úðáÃUó"G)ƒ^·næ?--­gÏž&LX±bÅÆqÖ+¡ùeàãÇûøøìÛ·ïÏ?ÿ ¯âß• à76jÔ¨  àÂ… è–Ðü2pAAATTTóæÍ›4iræÌ™wÞyGßµ ¡RüèÑ£áÇ÷éÓGõP`¦Ù,´J¥ŠŽŽöôô|òäÉùóç‡Z5×¹”Õ±cÇ›7o^¹rå¥SúƶhÑÂ××÷ìÙ³ÆúV­irøÑ£GÆ ëß¿ÿäÉ“÷íÛ÷æ›o¦6!hÀW®\éСÜ9s~ÿý÷Ÿþ¹ .¯€†|ðàÁ¦M›þùçŸ'Ožœ>}ºq¼bUÞ¬T*þùgOOO{{û‹/ê¯8((¨âÇq$''·k×.**jÆ «W¯®âW+K155}ï½÷^:þý÷ß5j”˜˜˜””4yòd Úʪx\XX8þ|OOO‡‹/†……²6!¼4€Ÿ>}úõ×_·mÛ¶gÏžÉÉÉ~~~«M/½„yãÆ°°°Q£Fýðñ±±Uê¾Mh2>yò¤ŸŸß¦M›<8wî\½Þ÷!s'$$ôëׯF­ZµŠ‰‰Ñ}›-[¶¼víÚÇËþêöíÛƒîիׇ~˜œœÜ¶m[Ýwg|¼aÆÝNššÚ¾}ûˆˆˆåË—ÇÄĸ»»¸òìÙ³AAA“'O^´hÑüñÖ[oq©M666J¥²ìJòØØØ&MšìÚµëÀË—/7îgÄê¨Ü.,,\¼xqƒ 222Î;7uêTc}Ÿ î^ÀOŸ>8q¢Oýúõ¯\¹2hÐ ]ÄTÉj„ J¥²ägΜ©W¯ž&ÿ°âJ.\8lØ0éç‚‚‚Å‹¿òÊ+¼yó¦.ÕVóçÏ2dHÉ333¿ùæggç‰'>{öŒ_]"‰íÖ­[ÉÓÒÒ†êêêºtéÒÂÂBŽ… ¤V­Z÷îÝ+ùcbbbûöí7n¼wï^ŽU d„ ßÿ½ú'111 6ìÔ©Ó™3gxU%”””fÍš©"Š««ë°aÃîܹSî¿’=(ÿ·e=mW’maa¡Qþ^¼xÑÍÍM©TnÙ²ÅÃãsçΩ©©2ÕX%Ü¿ßÉÉ)+++''göìÙ5kÖ>|ø­[·x×%’ääd•JõðáÃqãÆ9;;O™2åéÓ§¼ëIƒ .]º¤R©Îž=Û½{w77·U«Vñ®KS§N•~Ž‹‹kÕª•——מ={øV%«W¯–Œ ‹ŠŠÖ­[çááñÒî‹þX¿÷ÈîÙ³G–ç¿õÖ[ÅÅÅ^^^–––?ÿü3èVVÍš5Û´i#ÝÕªU«„„„ ð.J0®®®·oߎˆˆX´hÑ€.\¸P«V-ÞE ÆÑÑ199922òСCÒÍ©Uç…Z²°··¿~ýzbbâ”)Snß¾=cÆŒ¾}ûâê›æ¤)h¥R¹mÛ¶ððp—U«Vµk׎[Az v•Jõøñã $$$hò—_ZÉŒ36oÞ¬>¿ •”œœÌ»Q˜™™ 4èÚµk¼kUçΜœfÍš•••Å»!­^½ÚÁÁAš9À…-H“²M›6õóóÛ¿¿†ÿJA©¶.»û÷……‡‡køä3…B_•€D¥RáÞh]¹r3ºØ½{÷Ûo¿íèèÈ»QÅÇÇŸ?~Ô¨Q˜9ÐZË–-§M›V©÷yè/žtÚ®ú ]};wîÜéÚµë?þ¨ù\ñ‹²aúôéáááZW ‰ððð3f”û+Š\®»wïvéÒeþüù•º­#` Hñ$óÕûtéÒ%** 7•T@æ`oÞ¼ùW_}Õ¿ÿJ×0ÐCôp9›+ïRnffæK—] €€ ýÅ“Ì÷#D4;¸8@p€à À€0`À €8@p€à À€0`À €8@p€à À€0`À €8@p€à À€0`À €8@p€à À€0`À €8@p€à À€0`À €8@p€à À€0`À €8@p€à À€0`À €8@p€à À€0`Àè1€ÓÓÓß|óM…B¡¿]J_¬R©† ¡§íM_6zúôé+V$%%écãF@þpnnîàÁƒ×¬Ycgg'ûÆŒƒü<~üø¾}û¶jÕJö- ™xÇŽ.\˜4i’ÿVQžððpy+(+<<¼ÜÒß*•Jû¬V™´¸¸8777õ¿£É.4ük†¤¿x’y»t*ÞÒ_<ɼ ºl•HV€²ð(JÀè=€1ÿ PFÀ €8@p€à À€0`À €8@p€à À€0`À €8@p€à À€0`À €8@p€à\iááá¼KÐê”J•ê”(¥ŠR§^)T*ïcL¡ RÉK‰R*ê”J•ê”(¥ŠR'Óg©p€à À€0TÖ¡) Þ%”COAI%€ªLAp€à À€0`À €8@p€à À•¾yófhh¨½½½½½}hhè­[9#í4IDAT·xWôRRR>þøcGGÇr_A§ì„„„~ýúÕ¨QÃÁÁ¡U«V111¥þ‘R‡îîînaañꫯýöÛoë,%==ýÍ7ß,u Ð)UQÍ:cJ¥rÑ¢EžžžVVV7Þ²e‹úo‰”Z¶= ………µ:cÅÅÅ‹/öññqtttpphÞ¼ùâÅ‹‹‹‹ –zàÀ·ß~ÛÚÚºzõêƒ ºÿ¾úoùÖ©Ëy^—ÊIpVVV```óæÍÓÒÒÒÒÒš7oÞ¡C‡œœÞu1ÆØ AƒjÖ¬yüøñ²¿"U¶¿¿ÿÇcbbîÝ»·hÑ¢ððð•+W,uìØ±ÞÞÞ{÷îÍÊÊ:þüW_}5sæÌéÓ§S«SJ¥2dHDD„ú‡ÔJUýÙ:?þøã³gÏÆÆÆ>{ölíÚµk×®%XªªŒyóæõíÛ—ZŒ±Ï?ÿ|ýúõóæÍ»uëÖ­[·æÍ›÷Ë/¿|þùçÔJ‹‹ëß¿ÿˆ#nÞ¼yåÊ•€€€^½zåçç©Së󼮕—=Ô oîܹTÿdàÀ ,àUO¹Ê¶©²'L˜ T*KþxæÌ™zõê•ü‘T©¥üóÏ?ŽŽŽÒÏ4ëüñÇ ¤úï1@ªÔ ¾È¤êŒïÖ­Û‹~KªTuÅÅÅuëÖMJJ’þHªN;;»ëׯ«rýúu;;;ég:¥¶k×nÍš5꟬ZµjñâÅÒÏtê¬ìy^ÇÊIp@@À¾}ûÔ?Ù·o_`` ¯zÊUö å²³³³-,,JþH¹Ô´´4gggég‚u¦¦¦6lØðÙ³gªÿ¤J­ €IÕÙ¿ÿ½{÷¾è·¤JU·cÇŽÖ­[—ü‘T5jÔ(À5kÖ”~¦SªµµõÇÕ?yðàAPPô3:+{ž×±r\³fÍôôtõOîÝ»çêêÊ«žr•ýC¹ìmÛ¶5oÞ¼ä4K}òäÉ‘#GZµj5eÊéjuæää4iÒäĉÒÕR¥2ÆjÕªeffæêêúÞ{ï]ºt©äW¤êtssÛ¶m[»ví¬­­mmm;tèpìØ±’ß’*U]@@ÀæÍ›KþHªÎððp??¿„„„gÏž={öìÈ‘#¾¾¾‘‘‘Òoé”Zn—TB§ÎÊžçu¬œD›››¨RPP >€£ ìÿ²e?~ü¸Aƒ %ŸP+Uý"HÇŽ‹ŠŠ¤Ï©Õ9zô興ˆ’?ª¤JíÞ½{BBBnn®t°fÍš©©©Ò¯HÕiiiéìì¼zõêP­Z5kkëwÞygË–-ë4ð4‰Û<==Ïœ9£þÉÙ³g5jÄ« Q+ûîÝ»ÁÁÁsçÎíСC©_Q+U]‹-}ªW¯®þ!©:ïܹӢE õOZ´hqçÎégR¥úûûÇÇÇgeeåää;vÌÁÁ¡uëÖÒ¯HÕYJŵéX9‰îÖ­ÛºuëÔ?Y·n]÷îÝyÕ£!Re?xð K—.QQQeKªÔRþüóφ J?“ª³‚Þ1µRKÙºuë;ï¼#ýLªÎ^½zíÞ½[ý“]»vùúúJ?“*•1VXX¸téÒÏ>û¬Ôç¤ê|ã7N:¥þIRRRíÚµ¥ŸI•ZÊ’%KFŒ!ýL¹ÎŠkÓµr GÊzõìÙ3ww÷o¿ýVºŒ1sæÌzõêeeeñ®ë?ʶ©²½½½7mÚô¢ßÒ)µS§N111÷ïß/((¸}ûöêÕ«_{íµÝ»wS«³\êÇR£££ïÝ»WPPpíÚµo¿ýÖÅÅåÔ©SÔêT©T¹¹¹o¿ýv© %ëH•ªR©6nÜØ±cDzŸ“ªsÑ¢Ennn±±±™™™Ò5à×_ý§Ÿ~"Xj×®]SRR þý÷ß‘#GŽ=ºäWtê¬ìy^ÇÊI°J¥º~ýzÏž=íìììììzöìYêÚG÷Zè”]n™™™ÔJïÝ»·³³³™™Ù+¯¼š˜˜¨þˆÔY®R_N"¥ÆÅÅõêÕKjÒ×^{mРA—/_&X§äîÝ»trr²´´lݺu©õ ¤JõóóÛµkW¹¿"UçÖ­[[µjåèèèèèèçç·eËõßÒ)uóæÍ5²°°hذáüùó‹‹‹éÔ©Ëy^—Ê/Ú7è‰kÀU €0`À €8@p€à À€0`þéžÓH‚IEND®B`‚gsl/doc/images/rand-nbinomial.png0000644000175000017500000002761513536674414015357 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœíÝ{\”eÂÿñ{†“ 'EqI-ð%Âã¹5 <ÄùRg_Y(×CÙ¦®ÏSÖ«žVè‘j×M(Ôj--¶0-W\4Û—ÇÐÔͬ Q×<*RÎÃüþ˜~³Ó030Èp]Ã|ÞÁ5÷Üóå/×uß3¨ôz½ºVÑpE0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0º•JÕ§OŸ³gÏZ¼©‹“tîÞŒzôèѧOŸñãÇoÚ´©¥¥Å×ÎHÞÆø³xzz†††Nš4)%%åêÕ«ö»êô'¥÷WF£›HMM]²d‰^¯ïÊí‚×býÿ×ÜÜ|æÌ™äääwß}÷÷¿ÿ½£×A ?K]]ÝÙ³g_}õÕêêꘘ˜O?ýÔ®teR·pU¿`Ž R©ôz}\\Üc=¶xñâÖ79ôq´skû¿|ùrttôíÛ·÷¸wÈÚa±8þý÷ßO™2åðáÃQQQw¸ÿÎÚ¾³î ØÆ ÝǦM›RRRÊÊʬmðå—_Ž3ÆËËkРAï¿ÿ¾éMyyyS§Nõõõ yê©§êêêL§>×®]{æ™güüü"""V­ZÕÐРüÿ¹‘qYÕ°¥J¥:þüˆ#Œ«ÄF---Ç?xð í$mR©TnnnƯ_ètº5kÖ 4ÈÓÓóî»ï^¿~½é½rrrÆçëëëëë;nܸ={ö˜î°®®nÉ’%AAA!!!Ï?ÿ¼^¯¯¯¯_ºtippp@@À²eËš››ÍÑÚa±×È‘#W®\¹nÝ:³ýWWW¯ZµjèС>>>½zõš2eÊîÝ»뇽¾¾~Ù²e¡¡¡Wžëêêž|òÉ__ß„„„‚‚Ó¿u*ã£X|¬vUÛÏðï.Àyÿ%¿ñÆ=ö˜Å›Î;’••uëÖ­þóŸ‡2Üô¯ý«OŸ>ëׯ/-----ÍÈȘ3gŽéÿŽðððÍ›7WWW_¾|ù‘Gyá…Ìvnöpæƒ>0»iË–-ãÇ·ÄÚÏ¥×ëu:ÝÍ›7÷íÛ7f̘ßþö·f(вdÉ’_|ñǬ©©9|øð]wÝõÉ'Ÿn=~üxPPÐÇ\^^^VVö׿þ500ð믿6Þ÷‰'žØ²eKeeå?þ8nܸµk×>ñÄ›7o®¨¨0Œ¼ùæ›­#µÿ°Ø?sæÌàÁƒÍ¶™9sæÊ•+¯\¹¢Õj+**rrr¦Njm?Š¢,X°ÀpH[?œ¢(=öXzzzIIIIIIzzzhhèÅ‹m¤2½¯µ›Ú<ª6ž@¯×SÀ茯‰:nìØ±_|ñEë›æÏŸÿç?ÿÙ8žý_ÿõ_†¯çÌ™óÚk¯™îðÿþïÿ¬µEeeå]wÝe¶s³‡;yòä Aƒã ááá{ö챤õÞZ‹ŠŠ2ÖŒiO¼üò˦÷ݳgÏØ±c _Ϙ1cÆ ¦·fddÌš5Ëx_c¿êõú¯¾úÊ×××täèÑ£#GŽ´ö#·ç°Ø¯¯¯÷öö6Û¦gÏž¦mj{?Š¢¬[·ÎÚfŠ¢¼òÊ+¦7¥¤¤ÌŸ?ßFªöp›GÕÆ3è)`t¦¯’?üðÃ=÷ÜS[[kvÓàÁƒÏŸ?oܬ²²²ÿþ†¯CCC/]ºdºÃ‹/ïX__Ÿ’’rÏ=÷x{{*ÐÍÍ­õãšÄÇǧ§§ÇÓÒÒbbbÚLbãçÒëõ7oÞüüóÏï¹çžÿýßÿ5Û@Qã”θÛÀÀ@Ã×,**2½µ°°0<<ÜxßââbãM·nÝj=âïïoöˆvÛãµµµ>>>fÛŒ3fñâÅW¯^mÏ~E¹|ù²µÍZœ .ôë×ÏFªöp›GÕÆ3è)`tf¯’«W¯^µj•ÙMjµÚl*Ù£GÃMnnnõõõ¦{¨««3ÞqÅŠÓ¦MûöÛokjjôz}}}}{^÷íÛ×»wïêêj½^ûöíÞ½{öÙgm&±ýs?~<""ÂlEQt:µ»{zz644˜ÞÔÐÐàééiܬ¥¥Å쎭G̾°ë°Ø/((2dˆÙ6—.]š1c†——×°aÞxâ‰ììlc$‹‡]«ÕZ{8EQZ?¿îîîÖö¦ÓéÚó·yTm<#€žF÷`öºÖØØ8räÈüü|Ó›BBB®_¿nñî¶gÀaaa¦ÓAÃõ;×ldÔ¨QÉÉÉz½~õêÕÿñÿaìIlÿ\555jµÚlÛÓ¸Ösµ¢¢"Ó¹Z›Ûúì:,¶ÇSSS-Zdq›†††ï¿ÿþÝwß=ztë3ß¶÷ÜÎp@@@UU•Ù­›Û>ªÖᲸ ÝZ­~çwžzê)ÓK‘xà]»vYÜ>>>~ûöí¦#[·n5~]__ïååeüvË–-Ư½¼¼´Z­µÏ?ÿüo¼qöìÙuëÖ½øâ‹Æ«gm$i~ø¡_¿~vÝ%666''Çtäïÿ{lll‡3(6‹]òòòÒÓÓÿû¿ÿÛâ­žžžÑÑÑK–,Ù»wï¶mÛ ƒ¶»EYYYfßNž<ÙðõÝwß}üøqÓ[7oÞlüÚÆc9â¨Âµˆþ èÿ%¯\¹ÒðÆ÷§OŸîׯß|póæÍšššýû÷/}ú׿þºqãÆ²²²²²² 6Ì;×xÇ9sæÌ;·¤¤¤¬¬líÚµ¿ùÍoŒ7EEEíܹ³¹¹ÙbNw÷Ýw‡„„Üu×]¦ÛØHbû窨¨0œ6^p¤´oüÕW_®×-//ÿøãƒ‚‚þùÏZ»¯‘ök/,ÆñæææÊÊÊ£G>û쳦‹ó¦ÛLœ8ñ¯ýkqqqSSSIIÉ‹/¾˜`¸Éöa·˜yΜ9o½õ–á*÷·Þz+44ôÇ4ܺuëÖ!C†äææÖÖÖ^¸pá…^X²dI{žb{ª#×Ä¿t_×jkkcbbLoúî»ïüüü¼½½xàýû÷›Þ4yòdooï   %K–”——OæUTTÌ;7((( `Á‚ÕÕÕÆ}îÝ»wèС†wåZL²iÓ&EQþò—¿˜e³‘Äìç28nÜ8Ó·²´³€õzýÎ;Gíííííí=zôè]»vÙ8zí)`‡ÅF¨ÕêÞ½{Oœ8199Ùì2+ã}:¤Ñh‚ƒƒ½¼¼† òüóÏÿôÓO†›Ú<ì­3×ÔÔ,\¸000ÐÇÇgÚ´i†ÓFC‡õðð0`@JJŠáMÏíy,»Žª#×ć¼ìÛ·ï¹çžûþûïEÐmqPE™1cÆ‘#Gnß¾}óæÍ¿ýío .\¹r¥èPº3fÀ€¢(ÊŽ;Ö­[÷Ã?ètºáÇ/[¶lÞ¼y¢CèÎ(`` (` €€@ (` €€@ (` €€@ ä-ࢢ"Fãïïïïï¯ÑhŠ‹‹­myâĉE‹EDD¨Õê°°°É“'ïØ±£+£`/I ¸¦¦&...66¶°°°°°0666>>¾®®ÎâÆË—/‰‰ùâ‹/jjjNŸ>½jÕª5kÖ¬^½º‹3Ð~’þ=à´´´S§N}ôÑGÆ‘yóæ3fùòåí¹ûÅ‹GUUUå°€ÜIgÀ999III¦#III»víjçÝ=<<ÜÜÜ €Î!iDGG›ŽŒ1âÌ™3mÞñÖ­[¹¹¹³gÏ^ºt©ÃÒp§$]‚V«ÕµµµÆ‘¦¦¦ž={666Z»‹J¥2~=eÊ”½{÷2 ÈK/%­Vk:¢ÕjÕju›w,++ËÊÊ KIIisckjyyyuñ³VÇËÌ&IgÀ¡¡¡ùùù¡¡¡Æ‘ÒÒÒ˜˜˜’’’öÜýСC?þxQQQÇ]¥’ô°º˜ãAÒsÀQQQyyy¦#ùùù‘‘‘í¼û¨Q£ÊËË €Î!i'&&fffšŽdffNŸ>½w?vìØ°aà €Î!i/^¼øØ±c¯¾újUUUUUUjjªá㮌˜^r5mÚ´]»v•——755]»vmË–- .|íµ×D ]$-`??¿ƒž½jÕª5kÖXû¨ü®×ñ~ x€N”––vêÔ©>úÈ82oÞ¼1cÆ,_¾ÜâöÂ_‚.^¼8jÔ¨ªª*‹· ×Åx R©êêêž|òÉ__ß„„„‚‚{w’“““””d:’””´k×®N‰§ÓéÖ¬Y3hÐ OOÏ»ï¾{ýúõw¾[þœk €À–E‹EFFž>}úâÅ‹>ø`||ü¥K—ìÚCAAAtt´éȈ#Μ9cã.}ûöõððèׯßܹsÏ;gc˧Ÿ~º¾¾~ÿþý•••›6mJKKÛ¶m›]ñLݺu+77wöìÙK—.í”x°ÅAæÐ©qX(ŠòÊ+¯˜Ž¤¤¤ÌŸ?ßtƒ6_`íýçÓ§OÏÍÍ­¯¯/..NKKëÓ§Ïwß}g-ÞË/¿l:²gÏž±cÇÚ¯õ–S¦Linn¾óx݃㦱€` (ÊÅ‹MG.\¸Ð¯_?»vbo›Ù¸qã´iÓÚ¯²²200Юx¦ÊÊʲ²²ÂÂÂRRRî<ž)ÛWu9ÚêÕ«;|L×®u.½\íÖ¨Tªúúz///ãH}}½¿¿SSSûwšŸŸj)--‰‰)))iÏÝËÊÊ\SSc1žN§ëÑ£‡Ùྂ:tèñÇ/**ºÃxÝa€ׯ_7û¶wïÞÆo[¿)¶õd£¢¢òòòLw’ŸŸÙζ_ýÍÚ×L{âµ6jÔ¨òòòN‰(`°%++ËìÛÉ“'¿msõRQ”ÄÄÄÌÌLÓdffNŸ>½¶oß~ï½÷v,|{âµvìØ±aÆuA##CtÂEXeóæÍ¿ýíoE§@çë—;IÈö;/Qx53`€ö…ãPÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ oi4FS\\lmËÜÜÜÙ³g÷îÝ»W¯^ãÆËÎÎîÊœt€¤\SSXXXX_WWgqãI“&ݸq#;;»¤¤$###99ù½÷ÞëâÀØE¥×ëEg° --íÔ©S}ô‘qdÞ¼ycÆŒY¾|yëŸ{î¹?ýéO*•Êðm~~þ¬Y³.\¸ÐáGW©$=,€.æ¸Ftœ“““””d:’””´k×.‹¯]»ÖØ¾Š¢ 2ÄÆz52´€ ¢££MGFŒqæÌ™öÜwï޽ÇwL.:‡¤k­jµº¶¶ÖÃÃÃ8ÒÔÔÔ³gÏÆÆFÛw¬¬¬œ0a¦M›&NœØáGg `àrKÐSVV6sæÌ·ß~»í›œœ¬²ÄÑ9tªšŸŸj)--‰‰)))±v—k×®=ôÐCo¼ñF||ü>:3`€ËÍ€£¢¢òòòLGòóó###­mýúõ„„„uëÖÝyûÐ$-àÄÄÄÌÌLÓ‘ÌÌÌéÓ§[ܸ¼¼üÁ|ýõ×ãââº$wJÒµÖêêêèèèE‹-]ºTQ”7nÙ²%//Ï×××°éš@llìªU«}ôÑÎzt– Žky›æÊ•++W®}D§PE8p`QQ‘èÐq0ìP^^*:…¢PÀœ ;”——3€NAÃòð€Š‹‹E§€Ž£€ay ˜0gGÃ0t v§€ÃÃà E§€Ž£€ayÞ† (Ê­[·D€¢€ayÞ†¤(ÊÀ™p^0ì Ï´Âi`NŽF{UWW«T*___ÑA~Fpj0ÚKªõg…·prmpeeå† 4MDD„¯¯¯¯¯oDD„F£Ù°aCeee×D„$ä¹Ë€0§fµ€¯^½ºxñâ°°°¬¬¬ûï¿Ïž=%%%%%%{öì™4iÒǶhÑ¢«W¯ve\$Û ˜àÔ¬þ9Õ¡C‡FDDdgg?øàƒ¦ã‘‘‘‘‘‘Ë—/ß»wïÿüÏÿ :´¾¾Þñ9!žTW`)0'gµ€gÏž½qãFk$$$Lš4éé§ŸvL0HçÆ½{÷âß~õ«_]»vM¥R‰¢¨T*N'CNÄjðÁmÞÙÇǧ=›¡{(++}úÄÆÆ>úè£ÙÙÙ|,Cà",ù±  ÚxSoïÞ½W¬X±bÅŠ®IƒÖ¸K~,A讂–3`ù±  ÚUÀ.\HJJ óðð KJJºté’£“Á€°ü˜耶 ø‡~øõ¯=tèÐ#GŽÜ¾}ûÈ‘#C† ™0aBAAAä3`ùq@´ýÁÎÏ=÷ÜK/½´lÙ2÷ƒþÃþЫW¯gŸ}–? ܘË0€h{|äÈ‘GyÄlpöìÙ¹¹¹Ž‰„_àmHòã0€h»€­½ú{{{wvXÀqÈ%hÐvÏš5kûöífƒÛ¶mÓh4މ„_`,?– t@Ûç€ß|óÍ%K–ܺukΜ9aaaׯ_ÿøãÏž=ûÞ{ïuA>p–üX‚ÐmpÏž= _¼üò˦ã[·n5~Íß.t.Â’KÐ: í¦\Å¢€åÇ4€à“°dÇ´üX‚аì˜Ë%h@ËŽ« åÇ4€ €eÇ´üX‚аìX‚–KÐ:€–3`ù±  (`Ù1–KÐ:€–3`ù±  Úþ ˆÅcŸZ­Öjµ*•JtEQ•J¥Óé$ À Xv^^^¢SÀ•JÕÒÒ":ÅÏ<==›ššø¥ Kвc »¨ÕjNHN–Ä»xzzjµZÑ)´–aÁ.Ì€gAËŽ·!Á.Ì€gAËŽ0ì p°ì˜Ã.Ì€gAËŽ0ìÂçb΂–3`Ø…%hÀYPÀRÓëõÍÍÍ¢ƒÀi° 8 XjZ­ÖÃÃDû1œ,5NÃ^Ì€gAKÀ°3`ÀYPÀRc {1œ,5fÀ°oCœ,5fÀ°—á‹N m°Ô˜Ã^Ì€gAK¿E{qà,(`©iµZ– a.œ,5fÀ°ç€gAK‹°`/– gAK‹°`/– gAK0ìÅUЀ³ €¥Æ öâ0à,(`©1†½˜΂–3`Ø‹‹°gAK·!Á^\„8 Xj,AÃ^Ì€g!oi4FS\\lcão¿ýöé§ŸP©T]–° ° {1œ…¤\SSXXXX_WWgmûùóç÷éÓ端¾êÊ]€¢„½˜ÎÂ]tË6mÚ4nܸ—^zÉðíK/½töìÙ÷Þ{oùòå·/((èÂt]§±±ÑÏÏOt 8fÀ€³tœ“““””d:’””´k×.QyDa öâmH€³´€ ¢££MGFŒqæÌQyDá*hØ‹%hÀYHZÀUUUAAA¦#ÁÁÁ•••¢òˆÂ9`Ø‹%hÀYHZÀ0` {1œ…¤h6ß­¨¨0›ß¹ääd•%û(w‚÷Ã^Ì€g!iGEEåå噎äççGFFvî£$''ë-éÜG¹\„{1œ…¤œ˜˜˜™™i:’™™9}útQyDa {1œ…¤¼xñâcÇŽ½úê«UUUUUU©©©'NœX´h‘q©Š‡‹°`/ß#´xnEˆ=z´´´ˆ>*€Œ$-`??¿ƒžúÈ82oÞ¼1cÆ,_¾¼c;ä0À€sÀ¶äää$%%™Ž$%%íÚµKTÚÔ ¸   ::ÚtdĈgΜ•€6u‡µVµZ][[ëááaijjêÙ³g‡?Λ%h€ãÁ¥ÿRrrrJJŠÅ›T*U‡¸”î0Õ ÍÏÏ 5Ž”––ÆÄÄ”””tl‡òûNgýÒD× ÓYû!ŒS„é¬ýÆ)ÂXÔÎGEEåå噎äççGFFŠÊ@›ºC'&&fffšŽdffNŸ>]TÚÔ xñâÅÇŽ{õÕW«ªªªªªRSSOœ8±hÑ¢ïpõêÕïÆÂXCk¤ £H–‡0Ö8.Lw8¬(Ê•+WV®\yàÀEQâããÓÓÓÃÃÃÅF’êRjÂX#UE²<„±†0ÖÆ.²çs^R=÷„±Fª0Šdyc a¬!Œ]Ü’““Egè¶î¿ÿ~Ñþ0ÖHF‘,a¬!Œ5„i?ÙA [êaàt(` €€@ (` €€@ (` €€î|EEEÆßßßßß_£Ñ óí·ß>ýôÓ*•J` EQrssgϞݻwï^½z7.;;[`Ã_ŒŽˆˆP«Õaaa“'OÞ±c‡À|xÔ¨QÏ<óŒ0û÷ï Ú¼ysyyyyyùûï¿?~üø†††. `ã…N¶×dSýOëÖ­[7wî\Ó‘¹sç¾ù曢ò U}öÙg[ZZŒßæåå |¸èŠ¢(·nÝ2œŸ^ºt©¨ õõõIII[¶lñóó•ÁTß¾}=<<úõë7wîÜsçΉŠqüøñšššI“&ùøøøùùMž<ù«¯¾ÆLzzúŠ+øÝï~÷è£9r¤ººººº:77÷‘GY¶l™ÀHf ÂÂIýš,z ÞÝxxxhµZÓ­V«V«Eå1’ê¹®¨¨¸çž{rssÅÆ0ý0eÊ”ææfQIžzê©W^yÅ4˜¨$z½~úôé¹¹¹õõõÅÅÅiii}úôùî»ï„$ñôô 6=³|äÈ!aLåçç0 ©©I`†–––3f˜þž1c†éYž®4qâÄ?üÐtdóæÍB^÷Zÿß‘ö5YÏ9àN'í“-O—––Þwß}ägeeeYYYaaa)))BdggOœ8Ñ´þåy²ôzýƧM›&ä¡=<|øðõõõöö¾÷Þ{·mÛ&$Lëÿ;Ò¾&빫ÓEEEåå噎äççGFFŠÊ#•ëׯ'$$¬[·.>>^ts£F*//òÐ/^4hÙûn…¿×Hÿ˵ú®%ê¡mx÷Ýwó›ß‰qíÚµQ£F™ŽŒ5êÚµk¢òLš4éàÁƒ555uuuGíÕ«×øñãE…1%ók2ÜÉ333MG233§OŸ.*<ÊËË|ðÁ×_=..Nt Ž;6lØ0!Ýú÷bã üðÃŒŒŒÜÜÜððpÑY€nˆ`ÁÚµkOž<ùå—_úúúŠÎtO*½^/:‰¨T*­V–ŸŸß¯_?Ñq€n‹‹°˜óððøÓŸþtß}÷;wNt Ûb àTªŸ_vïÞ½téÒ­[·þú׿ 膘°,11qÛ¶m³gÏþì³ÏDgº!.Â`Õ„ öíÛ—põêÕßÿþ÷¢ãÝ KÐÀ4PÀ@  €0PÀðÿ$ñì]ë!aIEND®B`‚gsl/doc/images/fit-wlinear.png0000644000175000017500000000347713536674414014706 0ustar eddedd‰PNG  IHDR::3ßmtEXtTitlePNG plotË¥°H(tEXtCreation Time16 Apr 2017 14:17:46 +0000.Ñ‘_(tEXtSoftwareGNU libplot drawing library 4.4e¾†I„IDATxœíÝMkÜFà5†úÐR{i»?¡”ŒÁX?¥ >6`¨(8žø”£Ïàý¥!Þ`Š/Eè¡=kÃRˇÐÝ"Âh‘VSÍHÚ•Æú˜½µåËʳš‡w>5»Š²=“†=„B!„B!„B!„B!„B!„B!„B!„Z¤×^„ ´k» Š<šAA>äxΰ§œ SÏqc² #sFÙ)?vùñ„S~Ìß<åo&'ÖC–íÂ@ŸïÜìpžçå‹r9£zX0P¡ÜÃÚB}Lй2ÜQD!„B!\ØB¡•ƒpaC!„VR^Ø(ÔÂF¥?©1$•#PyÕÊå(D  ÛfmÂi_ "-?%jPEF SµªÑ6èO "m³¨ÚÓͨ*£ ­š3)ÊÙíÐÄU"bδB4}yÚ )DD"òT ê Rh#ªù ½F a°Gµ•3ª ¶œýµ‘3L¡¨G@ j|_D‚DÍïÔ”!ñ¾j# ˆh@vDµ"²I-D4 dÇFí*hÚÏ–ØRÙ±%AUD”M× Š”›ÚOnC¤Å늽öÁ–¡<#…ŽÔ»ß.S?å)ïØx)»4 G}ÍigVòR„‚ÄÑÙ¶j(\€¹¶VÎ0†zR†)4”3 ¡é70P´i¸ùûi¹hæîz¼t›þˆÁ@É ÓYØj!>ÃX6•¿c«€át¯Zœ}„ì åUê -Îë ;_iÓŒ©E›Ý¯ý<#™a Ÿa ÐQ©œ9$f”ΰîÐ_}©œ!”ϰå·5†ÐšË¤dõºP¾°,ñ.+C4¹|ÿ˜ë,lS«Q±½ôìt—©Qµh“!*ÊóªQ¾­P‡ø +@iyÙD3l™±øä˜56U†ŽJY½˜~÷H)cáèBÙ [ì——gèAÁWåŒe@zP¼Q^j éAkÒš]HëSvOZ³)«H ß%– Â*R;ÄgX ª ¨3¬UÔ éÌ(@ÕµBÙŠzk¡ É;¶dê’jH{ÇVS3ýëZM@Æ­ÎПPÐw@uYMÒ„¤øM¹BDP1ƒÂhÑ$)D #òCKŠÈJJœQ· ÈI"’ jÑÛê/Æõ¡Kr "FÛ”!jчnÝ…¨…jïB¼ 刈YDÎLê5ÚQý8J PŒÈ Ù°ô1„ÊÌóëbwHÊ0‡D¥ óˆ  }‹ z"gB~Ñ"@[?ª‘ÒÖÀõÚâ^v'ˆÊ¦YþHïëAJIªÛYkC RKíZÍî2")Öì«F€ ÕšÝYÕΉ*„ÿÒ!„úH |„!„Z96„Vjx„A"@PÃ=¨á=èªjËG:BËG:BËGÚSí̓ŠÈƒ Úȇêµj=¼e!„„;6„Bhå \ØB¡•ƒpaC!„VÂ… !„ ù†‚¼(§ô´XÃ# züÃýCP¿0 Áüxƒú9‡†§Œî ò@P`AÒÿ¹ãÈ:N^çqÿkqœüYÏŸý±ø–gÓ¸Æx#‡±U ÞÌܽäu9Ÿø¼œó~æ>bü?—Ù{ž&Û×ÎsÆ»eËŸê ¸ÿÊ? “ƒ¿gÞc—Û¼Ú¿ø9yFþ ñ³íí$ÞE8'uìÚWš‡ôP@Îà‘€¢Y(~ ¥…гš;m_Í3hÏŸ™û+=ä§^ÎBßk€¾ßÐÌ 3hgW@ŸB~½h†^í]fM¡«o/”´‘€¼ Šwš¡áÞïоðRh´u- øÓ¡€Ž3(ˆš¡8ƒ˜ç ˆm]‹Æf~, ’56mN’ÞH«6I{ͱS(ïþü×þiîµ—ôj_@“‰g‰6JÇQy/ùÒ™Aï.öÙSýZ|dÏçƒI:²/ó‘í<ç#;~ì÷ý­°adoœE„ϵѡ5sm}œÎµ©Õ?ãs-gsmÒ?NNª¨CB!„ô™](œ£ý½ƒ‚|(,¢(è G* !„B!„B!„B!„B!„B¨ú@”FgÄÜLIEND®B`‚gsl/doc/images/siman-test.png0000644000175000017500000010247313536674414014545 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìy|MÇÿÿçæf—ÈBÒˆÒUT¢Õi4¨OK•¢|JÕúE«j«V[±ÓÚ•ú¨­A-iKc« {$¨%$DÙD–{ïùýñþ™Ç˜³Üs—,âýüÃãÜsç̼ÏÜ8¯ó~Ï{f4‚ AA*›Ê6AAžGP€A¤@FAJAA*`A©P€A¤@FAJAA*`A©P€A¤@FAJAA*`A©žU>wîÜèÑ£ÝÝÝ5ú«2227nlÒ%‚ R<«›`¶öööö@ùõ@õAß¼yÓÏÏOÃ@¡–sãÆ;vX¥*Aäù¡ú ° ‚ž´JýW®\Y·nUªBAžª§WäZWÏypA1g5 ‹•XzŒZˆ ‚<+<«¬¬µ–|kFI~AÄTªgAAª8(Àˆ,Ó¦M«l*ììììòãyŸà¥€F£iÓ¦ÍÙ³g•‹EEE…‡‡GGGWŒU‚ HE‚ó€A¤Zl0Š€ ‚˜ °¨¬‚ H9lP§ASAFAJØR¬¸¬4‚ òü€Œ ‚ • 0‚ ‚T(ÀVCЂ ˆ© +ÊŠ ‚”(ÀVuA1`KAõEAÌØ  #‚ ¦‚Œ ‚ • °@A1`%PYArØ  N#‚ ¦‚Œ ‚ • °¥ û‹ ‚˜ °@ FALAA*`%Tº¶è#‚ ¦‚Œ ‚ • °@A1`KAõEAÌØ  #‚ ¦‚Œ ‚ • °˜ ‚”(À‚ R  #‚ H%€l)‚ `A1`A©P€­zÀ‚ ˆ© +ÊŠ ‚”(ÀVuA1`A©P€-³ A3@FAJØ  Œ ‚˜ °¨¬‚ H9Œ ‚ • °@GA1`KAõEAÌØ  #‚ ¦‚Œ ‚ • °*][ô€ASAFAJØ  Œ ‚˜ °i\»v­I“&ìT_AÄ P€M·^@A¬BÕàsçÎ=ÚÝÝ]£Ñ(—þøãáǧ¦¦þûï¿!!!~øaII‰Ù†¡Ü"‚ –c[ÙÈ’””¤²d||<=öôôìÒ¥‹¿¿``àôéÓ !3fÌX¸páàÁƒ¡À!C!ÿûßÿFm´fI­EA±œªë[‚V«…ãÓ§O¿ÿþûì·Ý»wŒŒ4¯fFA¬Bu༼¼cÇŽõë×oÔ¨Q ÅÍn‚`”dAÄ ªk4Fãîîìêêç÷îÝ˖ܳgONNŽÙ ¡Ü"‚ –S}<ÑÌÌ̈ˆˆ¤¤¤Ù³gÃù°°° &lذáÁƒ|øpaaaQQÑñãÇÝÜÜÞ|óM5õ4mÚTxšË—/»ººrÅÐFyÖ ¤(¿«§ŸAVB9 Ú`0(3µZA乨4$ç#‚ ˆ© › +ÀpŒ’Œ ‚˜ °ÉP¹5[}Q°A`“±Ê<`Ô`Aç`Ó`Ç€q<A1`%p-hA¤œ@6±Œ’Œ ‚˜ °ÉX.·(Ø‚  °ipcÀG‚A³@¶”^AÄüáÇå¤pV¬5A¤R¨º²~ýú„„???(¼mÛ¶–-[._¾\MårÆÆÆ–––²'éW.\ÐëõÅÅÅU_Ûª¾…‚ Õ•ªë[‚V«…cGGGq''' ›û¾\fVIIIùÉ›=WÔ`AJ¡º p^^Þ±cÇúõë7jÔ(83f̘?þ866¶     àرc}ûöýâ‹/TV(ç+'[•«úZ‘gÂHAjIõ`F£ÑhÜÝ݃ƒƒ]]]ÃÂÂàü?üP§NŽ;Ö¬Y³fÍšÁÁÁuëÖ:uª%mÉù¾ô¢ÓƒARá”ý×ÈÈHN§Æ“l.ïzA“¨> ª–™™‘””4{öl8ÿÓO?;w.222''''''22òܹs‹-RYíÂ… 5 AAAâFé±ø¤|úé§?6Z “°A¬HXX˜FŠòk±ú0àííÝ¿ÿM›6­Y³άZµjýúõ={öôðððððèÙ³çúõëW¬X¡²ÂñãÇ °w«[0 ©¤¤dåÊ•Ä; £eÐýE±.aaa‚å×bu` 000++ ŽÓÒÒ¹oÓÒÒTVÅÎë=|ø°œ¿[ZZºqãF"`Kï¤üy&ŒD©~TO>yòdÓ¦Má¸~ýúÜ–DñññõêÕ3µÎŒŒŒGÁ1' \¾|™-l¡½ÐZïe‚F©,žUfãò]»vŠŠÊÊÊ*++KKKûí·ß†:wî\øvܸqŸ~úéîÝ»sss>|øçŸ~úé§_}õ•ʆäô‰“.Vã%3¥ÕÔ©¾!$;;;33Óh1A¤jRuâ`%–K*Ó”)S~þùç¡C‡æååyyyíØ±ã7Þ€o?ÿüó^xaΜ9W¯^%„¼üòË .ìÛ·¯©öp©Îì(¯ eeeâÂæ9—*¯Ú¿ÿ¦M›&L˜`Fl[è#‚T UW€•…ý6$$$$$D¡pŸ>}úôéc3ä¦INR7•²wáÂ…«W¯~üñÇj › 0‚ H¥ð¬† +q4`Ë“°ØÊ“’’víÚ%YÆŒšË¯AÄTP€Àe;³çÙ$uI&f)œ lȽ\g¡aA¤²@6q\š¦ªÆÎè]±bEaa¡äå õË $ª&‚ ȳ °A˜2e û‘; Osçéñœ9sòóóU¶¨Þ6•%j@-G©P€3þ|qü™='aï{òäIKbѤüÕA¤²@6‚8˜Ìž§HfAÓÕ¸ØK’““Å—sÅ,ŸI¬Ô`AJX Àâ¡Y.‹û–•mšNåïﯾÝòVG A#‚TUwpAMV³œ†q¼qãÆ† cÛ-¨™yl-P}A* ô€UÁíìËy½âáaÖ?†óææÍ›)))´dóæÍ322$›S‚¶Š|¢#‚T (ÀFP+%wþСCÇ'R#»yyy´Ú£Gʵ^~`A¤²@V(åöíÛá£r”˜UµGÑ-X¾páBff¦‚-® A©Nà°X–ÝsÓN¹a]¹b%%%D~“‰ Ë‚FG©,ÐV椱°°P¼¼m‹5Oá[LÂB©– ¬ ñ4$88tèÐÁƒÅ_-sgä|®D F©Ð6¹sçˆT¨ÎÐ2‚V)ÀnÂR…eAcA¤²@6B\\Q\ˆƒžQ®‡›¹$Y`CñyBˆ^¯‡ˆw¹n‘„ ‚T(Àª ,—ðÌi³Xª‰¢H«Ì‚¾yófÛ¶m zÀ‚ Ï>(Àª\ˆƒ0¡c£iÌ&IfBB‚\µV×K`AJXbù” AÃADDýg °¬ ÓôØ`0ˆ§Ó|¦uZå¾AŠX’YЄŹÂ@dd$[’˜è¼*D­Ufu©o5A¤R@V…Ü<`qZRi%rõ«ñŒÅ­ ‚ Ï.(Àª›,§ˆ¬0«K•®-|®H8<<|äÈ‘6‡ ‚PP€U! {Æp¬×ëé1K™7ÌU+—«¥œÛe•1`3ÞAËAV…ä<`V½ŒzÀ& ˜Ê‘ãŠEp|q´Aĺ «<]±IŽs0-¬,¥¬N+\e]4*«‚ „‡‡KÞ;‚ b (Àª‡Ž’°4ä°¦f…KKPY·8‚ b9(ÀªsLÅJLDcÀô@M0Y9^mu6Zw›‚ ˆµ@V AÃG£’r%>)Âwß}·ÿ~î[…$j6ýÊ*¢•|ýõ×/^T(ƒŒ b]P€U¡0ß—S\ˆÖÊyÀâ©ÀÉÉÉ<è5ê K’™™y÷î]5÷Ee5...''G®!T_A«ƒ¬ Ne¹œ)qIV€Æx¹ðµd…rßJ²iӦŋ«)©¾rÔ`A났 n3ö<È… Õ(ßæ.7 ìd_•cÀê•’mW9lŽê‹ b]T ðÖ­[Ûµkçéé©yšò6®ê ž,·6–BúÖ­[’.-Ìž”<”Ä<±T`tA¬Žq^¾|ùwß}7mÚ´›7o OSöUäö{Æ\š%;;[²°\%âé6…\11&9Ájj{Þ~qAòÆÖh‰eË–­]»¶C‡`M•…“úQn?`¹•°~ýõWqå¬3-7´ ̘1C¥ ª/¦&ê‹ buŒ{À)))`JU† 8‘2q~¤ÜJX÷îÝãj˜= ¹Ê‰¼ŽZ8\TTTRR•Tج‰ #‚Xãìë뛞ž^¦Te$ׂ&2°À$6˓ŕ³åå®2#°,ÉW_}µ~ýz®EK<à%K–DGG«´ A!jxèСk×®­Sª2rû‹]UáÉöGô£ðdé ±‹ ßr«|HV+þJò[åób«Ô«»ò·W®\IKKSnAa1.Àß~ûíƒ~øá‡äädå(e5FnhV}‡˜äË}äk¹Dt5Ìn’¨p‰Ñ`¸ÊAãlkk>sæL­Vû|NCzøðaaa!•ƒÁZ(‚¦ÇrYZla…1`… ÍþŠ+@NŸ>È–éÞ½ûîÝ»‰º,èçöå AÄ<Œ ° OØWE8tèÐÙ³géÇ£GþøãD…É¢ì ‚0þ|®¤ršræÌz%77רà V­ZÅš!לú{DAT‚+a©¢¬¬ŒÈç<³ß~û-{!û¦"ç#Ò1à)S¦ˆëW¾sçNll,·øóÊ•+UÞ{G’ê«>òŒ bª8>>¾W¯^~~~ŽŽŽ~~~½{÷>}úty[V¥ÐétpÀmC$ö“““å*‘S8…•°ŒªšN§aÓ¦M‹-âªU¸JRY%#á¬<£Ä"‚Xã¼k×®nݺ½óÎ;±±±yyy±±±:uz÷ÝwŸ«i'œL1ª”âôi¹2’Á^9E¤õz½8‰Z¹93¾5Z!Ê3‚ ˆI_ kÖ¬YË—/0`|¬W¯Þ˜1c<<ŠU vnX´hÑÕ«WÕxÀbôz½¤‡m’"R W~{Ø»woll,ývÀ€qqqf´˜‘‘¤Þ<Aj &a©BÎæ\I¢¨Cr0 éŠcÎ\%:„Sý, ‘#GJ†¬%-g-ÉÎÎÎÍÍU¾#5àp2‚ Q#À-Z´ˆ‰‰áNÆÄļúê«åcRU<`…ô‰'$/dÅF¬:gΜ—WóÑhZNáAçêQð€Ù5gò›f prrò”)S̸A¤ ¢j%¬Ï?ÿ|åÊ•wîÜ)))¹sçÎÊ•+¿øâ‹©S§V€}U‚æ Zrÿþ}z†+ yˆŠŠ’, 2-„ M•4I#åVÊ”³Äl5ÛýÍÉÉ¿ "‚<£àž={îÙ³'&&¦}ûönnníÛ·‰‰‰ŽŽîÞ½{ØWEà<`ªUêÇ€å¢Ä’ΨzGBÐDÑNHHX±b׊I!h9XÎNe, AcìAjƒñ,hBHPPPdddy›R•1`bz’È·ËOMµp ‚æ¸}ûö¾}ûÆŒ#¾\‚.((8~üx·nÝÈÓJ)iRÏž=  (o*¨¾‚T'0 KFÇ€) ƒ¯Ê U%$$H6$W¹\Z„øøø;w’§oI>B™ôôô±cÇr6ËyÀFïZKb×åªÁo¾ùffffùÕ Â"+Àt»<hg%#'ÀFZVùb¼r'%•’3L2M9þüþýû%¯’k +s‰%vãÆ<³»ñÛ·o‹[‘´G=j.ܽ{÷å˗ͨüöíÛrƒý‚ VGV€9ïG’ ´³’M¢w­ «¦v‹¤–­„þ4Ôæ|qA–-[Fë‘ó€áßÿý7''‡–a—ÆäâØ¹sgvv¶œÙÙÙyyyp\XX(—'_®êKÙ¼yóùóçÍ«ÿ¹ú«F¤rÁ´*è0@ÓgÏžU~d³Ït“6_N¤ˆ[ˆãË/¿LOO‡ã‡Ò¯ÄòÌ~ܵk×7è’–wïÞݺu+1öNÀÚÇsæÌY³fÑ›•Üv©´´tñâÅr—ˆ[,$ C)'Œ °\¨¹¼CÐçÎ=z´»»»Ñ†N:5lذ ØÛÛûúú†††îرƒµSŒ½½½IÆÈ… ÅKÉ'øÙ³g6ûäâP®_x²0\¾oß>ÈŠbU™SJ"£ë¬Z²Å,X 6 ¾åâ½ô[úf Fò|qqñ?ü Yž½P@š­Óè#R‘˜éëõz[[UÔf3pà@ooo¹.XÆŽûÚk¯íß¿¿°°011qòäɳfÍš6m|+ˆX¼xqŸ>}L2†Û°HÁ½ãžàP2<<œ¦++—7êOËÌÌÌ]\Ø`0,_¾|Ë–-&C=`ÖY”DAZÌó€9WU€‰‰‰Ó¦MãRð€ ! „`Z˜µœ«!77—U\®XJJʦM›Ôw{ûm۶ݼys£FÄeŽ;†0‚ Õ%¦Ïzî¡ïèèèïï¿téÒr´Ë2ììì´Z­äW{öìyá…Ú¶mkR…\¨Y½›!ØÊå¹j&-ÖBz,ö€Y±¡™V´'ÀD$êõëׯ[·®¤&;LÎx…×”¼¼<q åÞóP€©6( 0<Œ$W¨²äåå]¼xñ믿5j”d%K–|ùå—¦VËIç•*\haI±œKJ‘ÚT˜0r(΂V® AïÙ³çÝwßå.¡åÙæØÍ`ÚhDDDãÆYVÿwhÞ_,† ©HŒ?+$È®rwwvuu —¹téÒ7z÷îmjårKQŠ‘Ô6ɯˆ”‰ÔhÿS?˜}K{Ã\ýbÃ$=`øxýúuçûÍl*=`ñIVüÄ»,+_KINNþú믩ü14~ðàA…k‰ºÞF±Õg!xzfffFDD$%%Íž=[\féÒ¥£G6#},%%…òàÁƒÿüç?Äz!hÓUã+‹=cêÝ*ïee`’’Ø*¶8yíڵ͛7³‚ÄnýKž–XVz©*sik’†±üùçŸô˜“v£ÝBÉÉÉ9pà-ù÷ßÃW§OŸNNNV¾ÕAžgÂÂÂ*XéªÛBÞÞÞýû÷ß´iJyðàAddäˆ#̨ÖÇLJR«V­èèhbJ`™0*+é7Kz{¬¾rçåœBð€%úqß¾}°P†¸g^RR¤1+¬µ©‚Vð€%ûá÷ßç^$/Wîm®]IÛÀ4‚<Ï„……U°ÒUÏ…8ÅSVV¯^ýÑGyzzšQ¡Ü<`1 ²aT<ØãmÛ¶Ýz}C¢âqõêUú-+iÉÉÉééé’ÚÆ 0§¤¤ÈYËÖ)V8~÷ÝwaÓF¹¿iVÚÅ}¢paddä/¿üBÛeïÈèR jêG)Œ ðž={ºví Ç‚ <ØÅÅå½÷Þ£ÛàTANž<Ù´iSöLYYÙªU«ÌH¿ÌžLe[ì†Ò3'OžLHHTJîB*œ ˆp[› ÷îÝÛ¼ysaaaQQ‘Ø’+W®§ý?˜ø«,H’7+À\ù‹/–––E?ž»#•rxóæÍÿý—0ÂϾšˆëW¾#5-"‚XŽq^²dÉ_|ÇþùçåË—SRR^}õÕy󿕳mJ°qù®]»FEEeee•••¥¥¥ýB ç¯ IDATöÛoC‡;w.[~ûöíÍ›7oÞ¼¹yÍqkA›ê›Š •cL¤4‰–{œ¬µwïÞݾ};!&q5Ãø«8Ó[A)ÑØ3[Þ¨=’wm0®\¹"0!hÉvïÞÝ£GñµÄ˜ýiÔK>‚ ˆåàÓ§OÁqTTÔðáÃkÕª5vìØmÛ¶•«eì¸ò`ø”)S6lØÐ¼ysggç¶mÛFGGïØ±v´¥,]ºÔl÷—0 9Q4z¹ d_ÎÕÉzcz½²À$¹ÿþñãÇKJJ8 ¤ÿ¦¦¦r6HÚÌùr%Y«ˆŒÈ †‚‚±|rŸou:Ý'Ÿ|"×'lÏ”––Ò‰Räi‡› A ‚0gΜ£G¢#RÕ0ž\ZZêêê Çqqq_}õ!ÄËËëîÝ»åj™ò£ý6$$$$$D¹¶S§NYbŒ%!h8õ"„üüóÏD4š™™Ù®];ºË×JVVÖ_ýEDC§´ ¸IJb;æ:KZÎåNs¯Óélll¸K”=`BHRR;ŸJRÂA8pàÀºuëFŽÉ“™™)ö€/\¸ðÒK/I6±gÏžˆˆÚ(À‚TÆ=à_|ñÞ½{„´´´””[ÍÌÌtvv.wëª œlÞ°2P,77—ˆBРg’µq~³¤Ì–¤7’““Ã-ï%¹Z–r4yZ´”%Ö`0lß¾ýÆr0!¤¤¤¤¬¬La ˜žd_‰¨ÇŽ'aÁºZʵI~D)WŒ pÏž=—.]šŸŸöî»ï:88BŽ=jÔé¬NHîQ/wFŒ\AèJœpKC³iØ™™™0—.9tèx‰ "ò€çÎ A³—³ ¤Þ¦g$åïÞ½4°¼nÝ:åU®\9 ¾•`î.軋Ük 0‚ •ˆqþá‡nß¾]·nÝ„„„… ÂÉððð1cÆ”³mUî nÅôéÓ§Å^½z5##ƒ•4V€§NºvíZÉÚA ; rÿ²z)9¾ËäôX|ƒâ1`Év=zÄN>–9ö¤r´¤LaÏÃ-€ËUžp #R‘vuuݹs'wòرcåcO…`SÓ °äù?ÿü³AƒíÚµƒ¿þúkqqqll,\{ŠkòŠ¥QrÏ% °°PìÊ ° 5̺ž´piiiBBL,æö£ÿþ eŠŠŠòóóa-Ú÷D?ŠÇ€¹¬¸{á~Óòàýû÷ûøø´nݺœêG䙣z.ÄQN˜'À …ÅIa…äÞ½{:îòåËÊïr¢Ë*–‚ /UêIy-VRR’ššš••%Þ¯ ¼Å÷’žžþÕW_=~üØ`0ôíÛ÷СCÆ ãš A RÓÊÊÊä^&ØvòÃ9Œ®)-ÉÎ;¹å<yÎQ%Àñññ½zõòóósttôóóëÝ»7 œ>Wй­ ~¤I(0ë·©tÎ8yƒ“ï¼ó¬‡,®Dλ¥Çr^#yÀì·[¶l9þ<ý‹o9r$??Ÿu— êׯ/w/‡*--ÕëõÛ¶m3 l¾˜ò°x’rZ²÷€øøxqìG„Î;›ñ£ËÙ€ Ès‹qÞµkW·nÝÞyçØØØ¼¼¼ØØØN:½ûî»°*òs…Â.=ÊÈ•gÏs1UnMc"3†ÊÕÀ~ ÇtQI£0Wa~~~^^žQ˜š´yóæƒ ‚°k×®ÄÄDZ0›ÅÆÞŽB Ot ;Þ¬ìëtº}ûö±o T€%›à:™åüùóûöí{ðàÁ‚ 8;Í`…ÔAžCŒ ð¬Y³–/_>f̘zõê988Ô«Wo̘1Ë—/Ÿ9sfØW¥0 ›7o&&zÀ³å‘ø+zÌ•¡¡TA~e(ÉÚ¸Ùô`Îre=¸yóæµk×<`ªŽp>11199™{˜~5î u|©Ãµe&™„ÍAÌ™6$ž:uêþýû¹“ÜKInnîï¿ÿn0ëòÒólܦç²èõzðÊY%>#ùÀzÀñññ„¤¤$"z“0Úä0|[\\,Bzzúµk×t:]qqñŸþ »JP¨ÌuŽäÀ0÷‚B[¤Kc²v>+|ùòeXA*ˆñyÀß~ûí!Crss»wïîíí••µ{÷îï¿ÿ~ݺuåo^•CüüUóT•+£ìÓcº‹ŸrmœI¤Æ€ÙkÁd¹}ûöðáÃÞ[dúŸþ¡g®_¿Î}KUP¹YݯÄYRRBk(++‹ŽŽvqqá¢=@?.Z´(--5À¨lE®ø´Ñ)ׂT"ª–¢Ü³gOLLLûöíÝÜÜÚ·oݽ{÷ °¯ªa†L,`•Ž#§ PX2 KýJ^â’‡ºqã[@lC~~>k÷-§|W®\Y¿~½¤%\ZYr¢ÜœLÒ;eK¦¦¦Ò=-ÄÝEDÌzÀ{öìm’•;PõZ¸|ùò´´43šào ‰ HÕAÕpPPPdddJJJqqqJJJdd$]¤éyãÁƒDÅ“T.í™C¡Éy;ʵ‰=àcÇŽåää°mU£­¬^½úäÉ“\yNõåj!&&ÊPOôúõëüñ‡‚ÌeA³µÁíPf¿‚’ï¿ÿ>äf³1›víÚ5Ÿfo$22&O³ðˆ#rrr*Æ^·närߦb¡Ï]RRb•÷A$Á$,Ó€ L`Öedá³ìW’®­¤Ó&.F çææÒàmVVy2«Þß©^¯§ó|ˆ±H2§Çƒ!<<҂Μ9CËHŽ‘ ŠcÀìGð€Ù´|ú•8 ÜðôÒ]ÿþû/ØÃ†èXPP@ž`…”u1111܆٬ñiiiì~Æ’÷n•x5½Ù9sæ>|8;;[<ð¯@BBB=,7AIT ð7 äëëkggçëë;hРäääò¶¬j"él‰‹q ƒ¸bRRRŒ¶HÜëׯg•Oܺ8eW\’˱’+&÷‘<`®Q±µ’5ÀññãÇ…''B+nH`BÐ’»1²cÀ„k×®±×r®h[‰‰‰àÕѓӧOÿý÷߹׺‰!ç1KzÀYYYlÇþóÏ?cƌٰaCxx¸Ø$BH÷îÝåÒËåºÑÒbÂÓ+Q˜Ñ®²œ••õðáCÎ$ú‘Æu9oR2YרÌ©,w-×bádå–X1 tk ƒÁPPPKjË °¸O!eee’yaP^üÒÀÙoÆ/8mÚ4nyV€|XÙ ±4ª÷€%3­$aµ9-- ÂÎ4=›»œó€Aøé§Ÿèy½^øðañFË }BáÆ 8ب³w:{ölv´"33óóÏ?_E£åìÚEEEwîÜQn—AÊãìàà yÞÉÉÉÚÆ<¨|ÙØ˜œÝ¦à4sr^{^¥l‰6ët:vmd.-nHR€9XòAÏ 0•7î…Cá­…Ž‹‹;wî!„M-–ô†9—škBΖàÛ·o˽.èt:“<à;v¤¤¤lÚ´ >æææþòË/âÄq0Ÿ½/ø CÐRu0®½zõúã?¸“[·níÝ»wù˜ô `T†ÍA«ÏL–;ÏJ¯Ùl´¤^¯g333.—\ƒS¬vrYÐÔñ---…µ½ä|Jñµà°Òh°¸LVV¨2a\½•+Wæ·à<ÑóçÏ¿ýöÛDJ€¿øâ‹£GÒ«¸ƒ lݺ•P罹¦ÆÅÅ †œœœaÆ]¼x‘|HU¯×Ãòœ´’ââbº™`SÇ€•CГ'Oï—esçÎ5šÒˆ Õã,¨  ­"¨¼Y38::Z®E•\RRRTTDŸÑåä‹O._¾üàÁƒê‚g: ÿ*xÀì¬ë™3gnÛ¶-&™;M¯e‡H 0«¬Üù[·n‰‹±í–••A¸;??¿¬¬Œ.WI)--…éI ~7nÜØ¸q#aXr0øÞ½{P  ØãöíÛqqqT€Aèׯßþýûõz}ii)g|ii)}±{ÀF×å ¿K«V­`­þýûÃVÊÀ¦M›ŒÎ,WÆh4Aª1¸–i¨ñ/‰YÌ%‹”TYëzÀ ªÄlРAƒáñãÇâ•¡8XÜ´ò« ûXW#Àr0ÝâröìYq÷Þºu |¸øøø<~ü˜ÖPXX8pà@"r…©ê°sÃÂÂ`ný/¿ürëÖ-jÒñãÇSRR R}äÈ‘%K–L–u^^^qqñÙ³gËÊÊJKKõz}FFxÿðÂ…Xž5kÖ¯¿þ*Ù„Å‹GEEÁåÅÅņ';h±¿Û]¥¥¥!7 £ùhRA6ò`å%?*»§æ+ é¤Raç΂ \¿~]¼m­ðt&³¸iA¾ýö[¹»0*À¬±!hÎÉfëY´h$ ét::/ˆ 8³0dE-]ºôï¿ÿf ÓæXù9rä,Ê͹ºÿþ£G`í9v(ð€iâÈ­Á`X¼xñ’%K¶oß¾|ùr:J2­Óé6nÜxèÐ!nùàòåËð@žlþÈöOQQQII 5²   [·ntqž/¿ü’[‰Snm 6ìÞ½[Í…R @¶I5²¢›š-ùŠP·n]£ýJIjjceU!Œ,9àÊ 0æ`EWR€Ù¥Üä<`.C[ðÿ–-[öæ›or&AIêt’'[AŸ:uŠ.ÝJ˜ú£´~ƒÁ°{÷îØØXvá-ÎfXÖfw›†oóóó!r~õêU$˜$¬ãÇÿøã`^BBÂÈ‘#ÅSBNœ8K˜Z>nܸ•+WRÎËË;|ø0 û§§§§¦¦®[·nܸq»víúòË/ÅõÓNcß Îž={õêU¹ÂRÍ@6J÷€ÉÓ>®œÉ}åææ¦\§ÜWréQÆí6f¡‚ÌÐkÅ®œ:ÂÒZ’ײuɵ¸Y·O!- ‘£eàØ;u¼pá7™f’³,Â_ý'¹êPRRB%zÀts*Aççç'%%ÑWN€ËÊÊRRRæÏŸ¿zõjh(//Oò%%%… 0»£Á`¸yóæ–-[4‚”(Àæ`Ô µ¢s™¥³r²¤)i•Ù°…,"fX¯×¯ZµJòZƒÁpùòeò´èª´Gx²Ÿ `T€ $=rÉ'8{¬It%±s!h:‰VXVVVPP/“&MâÖº"„Ñúccc 8óÄ/4T€7oÞL¡s© ÌŸ¼råÊòåËÙ a±-A {éÒ¥!!!YYY‚ Ì™3‡H 0 uÃt,B,!BoY²õz}jjê½{÷hŽ˜áÉ¢%ÊFQ"##¿øâ 8Öétyyy4ÿKòç+++{øð¡Ü¡R‘ØV¶Ï #²,Và;wî¨7†H ƒØ“bÈ*KJ"éàreXbB²iñ4$•ö;v VmŒ>mÏ;çááA)++cÕº¸¸XnÓ98))é›o¾aϰ=:~ü¸áÉ„Q&PD:17;;›õÅóçÏ_¾|ÙÎÎŽ"O‹Snn®··wiiiçÎ{öì ºn0²²²^xáx¸|ù2}‚=—V¯^ ù† Ο?½×«W/6tL_hXþ¿ÿû¿3fx{{&vÍ%y•••©ବ,:Z ë¤öíÛwÆ -Z´œd Õ–––Zw5û¸¸¸:uêÔ¯_ߊu—.]š9s¦x=`¤€°ÉØØØ˜7kuµf{Àðø³Ö³Éè°òµf ð?ÿüc’©0w6==o !ÉÉÉrI¹?¾yó&yÀ„ŒŒ 8{À‰‰‰:t L˜N—––²+cÈE¿a…m(É•)))áE02û–@ÿB¸<µ‡zôˆF¤§§ƒ¾uëÖ .À;ÍÉ“'Y“¸ájBÈõëוÛ2ÊÂ… éd3ë’™™yèÐ!¹Åæg`ÓA˜™±’yÆÐñ`γ˜+oT&•‘¼ÜVi%ë+±f…§^iié‚ bccÅL¡ÖÒ:©{•³pii)»°”\Øn ‘»Í¢¢"ÎŒôôô &$$$ÐkiÿKN•†(w\\|,((ïD—rëÖ-6©íÔ©SyyyT¹d«ÔÔTˆp̘1ãÚµko¿ý6„¯-ZÄÞcYY™^¯?räHzzº8””DçŒ%$$LŸ>^>–,YrãÆ¢¢¢#GŽÜ¼yóý÷ߎŽ­}ôè䈥¦¦öéÓgçÎôE ªeo¡¤¤„ÝÄZ’ôôô( ï&ñàÁƒI“&)¯GVPP““Ã.@féééð¾ˆT)P€MF£ÑTØ`0ˆ°¤ö(„ –„ÇŸµBè’Qx”«‘RØiÀŒ—k °rÓ;wî}¤HÍÐ5DU#À4YLR€·mÛÆ-ÍmtÉÒÒR5í‚ÊÞ¾}ZÅ¥é½dggß¾}»¸¸xÇŽÉÉÉééé`çÉ“'ËÊÊòóó###A¢¢¢F•šš:xðà-[¶h4šÌÌLP¦7nBΟ?O!„ܹsçÒ¥K°ž6TûÇœ9sfß¾}‘‘‘ À·nÝúçŸ>\XX8räÈ’’’Â}Ý»wï‡~€ß.<<üáDZ±±}ûö]¶lÔ¿nݺ¸¸8½^_PP°{÷î‘#Gݽ{wõêÕÊ~§Ø?pàÀÂ… ÇŽKõäY§Ó\½zV€ùóÏ?¡ÜÜ\åÿV°•VZZ=Ó£G…°yTTÔÅ‹;wî Cþ„˜˜P „äçç'''›šË–‘‘ÎþE­Y³FrŽÜÜ\Å©N ›Œšp®%fk«63Nn#"|U‡g–µBÐ yÚ&UR§N +Q8’,7"^ZZóÝwß©¯œ" ÎîôéÓ#""`”¸~ÉJhØVü•²ÚÚÚj4p­®\¹B·2$OɹE3Nœ8¡P'!äìٳܔ0WWWHjc KHH %éjØì½”––^¹r%..®´´ ̘1c×®][¶lÙ·oŸN§ƒ—Î5kÖ¬[·ŽrïÞ½û÷ﻹ¹Ñ{¡û_?žz–ÅÅÅûöí6lXIIÉܹsÉÿ¯ÿþÑÑÑwïÞ-...((ؼyóƒàö?~¼mÛ¶ÇÇÆÆž|¸lÙ²¯¿þzÚ´ióçÏïÓ§¿¿?'ŠýõL¼¾{÷nrr²øàüùó#GŽìÙ³'äI´lÙò«¯¾‡X Ø3‹/NHH€··j…€È Ù]îîî5jÔ`õÀÅÅE\ì…^0ûi×®Ù×’'jáààÀŠnPPÊËávÜÝÝáã믿n‰1„ñƒØT†Þ±cG +1©9——Õ[éСôŒF£‘[©QòO‹R³fMBˆ³³³ø«Ï>ûL¡ÑÀÀ@¹:ÙWÆ÷Þ{O¡ñÉÚµk³}||äòéåGŽYµjÜpŸþ9!dòäÉ‚ Ð?ÝI“&Õ¨QC²¯7nüâ‹/*Ølgggggçææ&~gmÑ¢÷GÓ±à¿À½{÷Þ|óM___øêÎ;ð«ÁÒrC† ˜ oÆ ƒ »ZµjÁ¤¯úõëïÝ»÷öíÛYYYüñ‡­­íÀ !Î1jÔ¨;wB ðî»ïÊÅ¥4V«¥S­ìììÚ´iC¿]¸páÛo¿íèèØ®]»û÷ïúé§„9s悘˜xæÌ™¡C‡BjÔ¨qùòe—¸¸8[îÙ IDAT???(yëÖ-A’““ïß¿¿oß>ÿþ÷¿`̸qã´ZmÆ ííí»wï-Âoݯ_¿úõë5*""RçAøä“OêÔ©#B£Fj×®íëë{ðàAö¡:a„àà`??¿‹/ ‚±¥3f€7oÞO×ÛÛ{Ê”)÷ïß¿té\èïïß©S'Øë³â!å&”(À²Hþgpsssuuõññ¡g$ŸhlS¡‹ ›‡££#!ÄÞÞž}¤¶oß^åå5jÔ Œj¶mÛV¡0xTÊ‚ZXBPPP§NÄçécѺtîÜ™;óÒK/Y½•7ß|SRAYäúV¡Ï•C¯¿þ:}µR@Ü„‰Ã‡„„(| Ô­[žï ôèÑÃßß޹?PÄ€€€sçÎÑÎÿüóÏmll`òÇ[o½E©U«–\[nnn½zõrpp Î=üÃÛ€øËÞÞŽ9ÂÚ¶bÅ øÿÝ©S§O>ùD˜ìnggGÿJµZ-Ü‚‡‡Çøñã]]]ûöíK+¹qãø|}úôÙºu+µpÖ¬Y¬ ìŸ÷‹/¾øÊ+¯Àñ‡~بQ#ooïš5k¶hÑ⥗^Z¾|¹V«¥?îǼ`Á‚mÛ¶5nÜØÃÃÃÙÙ9 ž pko¿ý6”tttÔh4ÆÇÇÎשS^‰>ýôÓV­Z ‚Ю];›¯¿þÚÖÖþŽ?Þµk×&MšÔ¨Q#55µ¤¤$<<¼eË–æèÑ£¾¾¾°ófÇŽÿxš5küýý7lØtâÄ :[¯N:666¶¶¶5kÖœ?>œŸ6mš——— yyyð{ÁO¥hA9ÕŒ!h“Qε$ma5]çÈ<{¸$,A1€üú믰da›¢Óé$Ga9·Iå©™l¬ÂÉÉÉÕՕݤ0ª”fššjty¹Î—<ïXlTYŒF£1:À¡Õj%Cß;v¹’ì ½^Ïú‘jÞÌvíÚEÇG¹6ÜÅÅ‹{÷îMw‚ôlšMÆÒËÆZ8E···¯W¯^IIÉ7@¨jÕªeoo6‹¹çÍ›QQQôvrrÒjµtYo777ggçÒÒÒuëÖMž<™âååE—iÕªSPP°hÑ¢‚‚vï¿ÿþ[TTctúVÍš5¹¡PêÓ7oÞ¼[·n—/_®Q£Æwß}îîîîèèèêêúÚk¯%&&¦¦¦vêÔiРA°Ø!dçÎ'NÜ¿ÿõëלœBBBΞ=ëìì\£FöíÛûøøÐÐ1,2úðáÚ5kfddÀÔóôôônݺM˜0açÎðBïîîîáá1oÞ<—ÆB\\\œœœüüürss÷íÛ÷ã?¶k×®k×®“&Mzôè¼Ö¤¦¦n{BXXØÍ›7;wîìââ²hÑ¢… ÒŸû“O>ñòòzùå— ¶oßÞ©S';;»éÓ§çääܼyóÒ¥K®®®gΜáÞQª(À¦!‚šE-,`  $W6UÔiyeÖjµr Jœ=– Óé$eÖ£0 u³$aí5j×®8µ Þ¾­ $[±B.+x€`¦r=öööÿþû¯ø¼ü r¯\ìŽ[¶¶¶*ÿäÀ O"„èt:v’Æ%ñôô$„¸ººÒ3\ÊÞÞ¾}óÍ7}||Nž<¹`Á{{{ˆ$³?ÄW?þøcóÒ¤t/////¯;wöööIII0MËÅÅ… pýúõˆ(E.44ÔÁÁ¡_¿~=rssËËË£¹ÙmÛ¶%„P¿wïÞ¯¼òʰaÃ’’’<==]]]?üðÃ:uêÔ®]ÛÑÑÑÎÎÎÉÉ©AƒÎÎÎ 4ð÷÷gýø5jŒ7îøñã½zõ:{öìž={œ :Ô¬Y3xDz³³£ŽuPP¤ž5jÔˆÒ·o_‚‚V€ !Ë—/ïÒ¥K@@€§§§““S5ÜÝ݇ 6eÊ”ž={®^½zÍš57nÜxôèQíÚµœœÆO=àˆˆˆÕ«W{{{·iÓfÇŽÓ¦MÛµk×âÅ‹ !Ÿ~úéÎ;×­[÷ÓO?uéÒeõêÕžžžýõ×{ï½÷ÑG-^¼ø­·Þ ¨È\ŠWÂ2. Z’J`NöÔ °Ñ[cQ#À–ËŒ^¯W#À¶¶¶’yÈâþ´µµ}ýõ×! Ïn‚`Ü­¦M›V…ÿö 45jÚ´éÕ«W}}}µZ-»J„ëÔ©êåååŽIhµZ¸Aå†ìííéB",~~~09XN€Ùàö¨Q£`s ŽÏ?ÿüçŸfϰýOÑét¾¾¾÷îݳ³³óôô„\š‹ ØÙÙQÙm`ƒúôé³mÛ¶k×®M˜0aáÂ…öööþþþðbkkÛ¬Y³fÍšuîÜùرc ö—””,Z´hРA <°ª—««ëÉ“'áïØÇÇÇÃúÅÕÕ•ö›½½}ïÞ½ÿ÷¿ÿqYH|ðA—.]¾ýöÛ„„//¯ÜÜ\ðï[´h±bÅŠqãÆíß¿èСÑÑÑ £F ‚¨ƒ­­-ŒCw9::ÚÛÛÿñǵjÕúè£ÜÝÝØW.??¿Å‹7jÔ¨¨¨ÞE\]]éb##GŽŒŠŠòòòêÑ£¼µiÓfæÌ™“'Oöööž5kVëÖ­}||:tèþî²eË Uû“O>!„ôîÝ›.õ²eË`dJúøøŒ1B£Ñ¼òÊ+ñññ-Z´ VuèÐÆÈgÍš5yòd;;»•+WÚÛÛ{xxÀ`?5ÒÙÙÙËËkãÆ#GŽôðð3fŒøï¤€°Ép!ͪæ[X'ÜŽÊ,è ó€%[¦GxbŠ¿|8::Ž=ŽÙš5 «µ U:tPHðQÓVf9Bš6múꫯ²@€iŠŤ888¨ AsÒŒ„W^yEÙf·¼ìÒ¥‹ä;ßÈ‘#¹3l@û‡~èׯ?žòòË/¯ZµÊÛÛ{À€tê0waçÎ_~ùeBˆ««k¯^½!õêÕ=z4Ø CÈNNNƒ†>¤=àîîîîîÞ©S§Q£FBjÖ¬éîîÃÉöööð生Ÿÿâ‹/ÿý÷_~ù%}§´gÏžcÆŒ“... ·]ºtiß¾}›6mj×®ÍÅNZµj5iÒ$—«W¯¾õÖ[vvv/^|¸F£iذ¡‹‹Ë¼yóÜÜÜ^~ùåŽ;Âÿ///ñÿ‚Ñ£G2¤M›6¡¡¡¡¡¡ÐÕZ­vÞ¼ysçÎuttdÕ—E«ÕzxxÀÿß–-[Bÿs$''·nݺfÍš›7o^¹r%õÔ«(À¦!«¯¾*D[‘òXEËTXåÝÙÚÚV€¬,À4Ø('-â{Ñjµ-[¶¤ÇlIxÀðìS–X777¹µ¸]¹W5л´±±á~S^*Ÿßÿ=W°š4=vqqÙ¾}û_ýÕ¸qcê=«ñ€ÅæBfÏžÍíKMžŽ1F²'NœbiooïäääââR¯^=N€©5Ö©S§÷ߟâìììëë Ž)t ¼¥Qo’VÒ±cÇC‡ï8yòä?þøþ¨ìíí—,YaäàààÇ¿ÿþûÿùÏàªÚµkûûûÄOOOFãåååêê "±zõjÈXvtt„Dª:ÄÄÄ8::‚®®®¿ÿþ»ŸŸŸ‡‡Ç™3gZ¶l ÅÁ6h—µóË/¿tèÐ>ø€<éLø4"·p,îjh«E‹íÛ··³³Óh4vvvÞÞÞãÇŸ2eJ³fÍèMÙÙÙùøøÌš5ËÆÆfÙ²eŸ}öYãÆ·lÙââââââÒ¢E‹˜˜:~æÌ™‰'öïßæÌ™¡¡¡«V­‚t„¶mÛ6jÔhàÀÜ.'''è±®]»¾þúëì_‡‡ûÇó /Ð?`ŠF£ %RÁ‚ƒƒGŽ©<‰ )?P€M|’2ií,VŸÇ˽[(d¾Š Àêt:ÉN€Å$€ëÏÀh(|dkæT ž€rã¦ðî/)ÀkÖ¬iذ!w•ƒƒC½zõäzLnz.…xSæÚµ··g+·âèèhcc£w”¥K—Ò~svvnÒ¤ «£´7ÀuGÓÉɉ› ôᇒ§CÐÐÃàÝ‚ðƒ°Q«¨î²lgggccÅà6ÝÝÝk×®éââÒ°aà &üúë¯Øìææ²Ú»wo mÛ¶-+À~–;88¸ººŠMØ ÊÃŒa¸ñÌ;—}eqtt„QIzÆÁÁ¡oß¾£GnÛ¶m«V­BCCÙÔ„#FDDDÀ¨ÁàÁƒ![»C‡~~~â7$OOO¸ÖÉÉ)..Ό瀻»»IŒT.(À¦!”ÿR”å!Àêw7â<`eª”³Y¸,ܵ6g…ªyóæpÌ 0}ŽK ðàÁƒ‰Œƒ'Ê]U·nÝ>øà…^`׬ Í±! Éù¬\š`P;z_§OŸ ¤Z¶l©Õj;tèÁZ)¬^^^0têââĶN̓2•´þýû³¶ñ;wnÙ²%ü( ¥pÞÁÁÁÁÁÎÓn§÷ëáááééÙ°aÆ ‚ò…¶¶¶¡¡¡ûöí{å•WÖ¯_OX«ÕøàƒüQM rh4šK—.Y¸’R‘ ›Œšt%ΖÄÅÅEå{1äLIÚ/^]DÍ0…®¤c*jBÐ ù½Ü½ØÙÙq0,ZDäXüžakk ï4’= ÕjüñGîI½råÊÆsÂIV€é" „H.¥~¸•\=õêÕëׯÕH.HsôèÑï¿ÿÞÅÅÅ××—í¥-ZtëÖ-<<”ä½Úx¥ðÕ AƒØJZ¶lÙºukBÌKX ÄÃÁ7…Œb¸S˜MK ‚®kݺuvvöÍ›7oÞ¼ V@寿þú´iÓØïÛ·ï AƒØ;;»   n²~ýútµ,­Vëàà@­uppèÕ«]ç»M0ÌÙÙV$33Óòƒƒƒé²V,>>>–kç‹/¾hIªRÁ › ÷tcŘ Ù™]¿dtÔBêÕ«Çy-ÊHÚ/–p­V ˜jÖ¯fÓmÔ7JÔyÀ Ì] B¹Ô9˜¯¿þ:xŠrphh(çȰ(×€(%-Iëtvv†X%½;È'¢YN0¬H=TV€i%®®®ÎÎÎðÛKðòò €òíÚµkРV«íÚµ+÷GNë·±±©S§iFÓ«W¯W^yÅÓÓBܬ;::†„„x{{S¶··ñÅG޹|ùr:±˜ÅÙÙö¨ðõõe—o«Q£†¯¯¯‡‡múï¿ÿfWd¤øøø@pz²nݺԣ]»ví€` ”~/5k„Y…ÆÚÌ‚lj’°j×®Íî\f*ìSÏìJÄuš´®!{’ §Ø­VNÔå}À𞲑p’CÃtz½Þ¨+L°Qö€YW’³žõ ížžžìÂ[tI?I¦²'aq(Îs¥CìÀ¡‹‹ -Ö’§'ÏP³mllÀû„T€iŸÐž¡ýï„///Z'œY½zõÔ©SçÌ™³lÙ2¨Š¶µµ¥wM;aÚ´i5ÊÎΨoÚ´©U«VýúõëС ABÜÜܼ¼¼<<<ÂÃÃÅ?™ƒƒÃŒ3ˆˆ/¾øbñâÅlo׬YÓhôE«Õ6hЀâ6iÒDî-0&&" R‘ › pù%a•‡¬ ÀÊ6Å%—©’©Œo+ßýüú¬T‚–{CúJ‘OIVð€]\\ØE+9æ¶"`õ­Íæ ô¤¤ÏŸ?_,ÀP ~ýúàXSÅ…‘oN€YÿD®OŸ>t¶%”Y°`}ÅaK¶jÕªI“&¶¶¶nnnôBCCaÕß½{÷ÒêÖ­Ëý T€íììš5k6iÒ¤Î;kµZê&×Wr8V“†<!»wï.UÌÄZ ›Œš,h«„ ­›ßd¶ OùzõêIºz¬+Ï2úÀõ­¤¬¬LrÕI¶QÉ4|ƒv´ò¦M›^¿~Ýä,„¤$V€9Ë5M5œa×)È9zíµ×h·ÐÖi*µdÚÏÏ–ž`oŠô7ß|óÆoÀ@&¤ÅÆÆúøø899A»´68æÆ€Y^zé%:&ͽ‚Ð’ìß[£F¼½½i™¡C‡ÂÄXˆðàÁ 6üî»ï¸nöðð€Ÿ&  aÆ6664é×ÉÉ nÖÖÖÖ 6é­4$$ÄÔ&¤"A6 •KpX"ÀU- k6 I¡Dº|œ—LºÖˆfÎpp®¿§§'ì¨SZZ*¹œT`° V¿c—0¢ÑhhÒ œ|ã7 ý‡êhÍš5¹Ôh4;v\³fM«V­@/`Ç7Ö$òdš èB'Ð} êׯ»²ÆÐá|ðA·nÝjÖ¬ N¶F£ñôôüꫯ¦L™Â 0ü4õšºàööö³gÏæºE«Õ–pìíhž^£ãÒ¥Kµk×–û›iذaÍš5_zé%®ÀÚµk?û쳜œ.“+44ôàÁƒð‘ °\z¹¦zÀRÅ©º|îܹѣG»»»³S§N 6¬Aƒööö¾¾¾¡¡¡°)4Å`0,_¾ü•W^ÕÑè`æa#? É Ýo©TPa¨S§ÎÆ-™Þg¡‹]7žûgΜ¡ƒ‚Ü-¨iKü-¼üòËÿýï !‚ HÞ»¤ÌJ5L/‘ ³ç9vrr‚)­Ôqâ„Ñ’cÇŽ}íµ×öïß_XX˜˜˜8yòäY³f±sF°k×®üüüõëׯ_¿Þl«h–Âô_“döWB˜• lll>ùäKö6U€¹ø$<åÅ%i¤‘»qI7E½Lõƒž‘ô€%˜ª©££#,àÎ¥Dqo b¦}Eøå—_îÝ»·\6hЀÜݼy35©ÿþÿå—_š4iB+wvv†É ôZ¶Ç´Zí;w`i±³Ý¥ÑhZ´h1yòä©S§ÚÙÙÁ|_ÂürëE0‡=#)À'N„%®$Ç%=`qÍÊÝ"¦U`v[˜FB{’ª;"+Ùýkqqqaï”OåŒgiz3Œª²okk»téÒµkײܯ_?êÔµ†f}³’ÆØÚÚÖªU+$$„ÎÖ­[‹ûsÉ’%õêÕƒó®®®’o<’\~c«°»‚ ÕM€óòòŽ;Ö¯_?:éâŸþ),, vvvvuu UÖ–ƒ.E©¹5U€¹g.P•×&·ì"P»vmqÌÖÔ4«¦rÎ+çsÎ%§šê=`*œ´[”CÐ fœäÜY¢è¿÷Þ{°q,é°téR¸ÊÑѱÿþ¾ÄM–sol;;»FÑ¡Úð5 .÷ôô„Y%=àV­Z-X°€­àÀâß®Q£F[¶låííí-ñ€)oªÃ£ÓÝÝ=88ØÕÕ5,, ÎgddŒ9rðàÁ)))ÉÉÉ øàƒŽ?nICVÜŽ Þ²Çb»JV>4h \^·jÅò)–X8`§®m‹5[®Eå´ÍÓùÀ´-Ö÷•ô€çÏŸØmß¾0£ÝµjÕŠˆˆ€)¤F˜.­%~ áTuÊëÕ«±Yj¿ÝQ•mˆÎîåptt”ÌH ¢«aHv¸x ØF~5‚ åGõ`HŒÊÌÌŒˆˆHJJ¢³/  >ûì3/////¯!C†üøãâÝRURRR¢º)VJ£(°Øi—1 Œš‚¦M°ógØ2žžžt3î.´ÿ¯½sŽª¸ãø½»Ù$»› y¿M „(%‰ÊÃ< 1 =€ˆ**GªPНPPìi ZŠÒƒ[•ˆXµø¢Bë«âÛ*‹(´@jÐô9ÌfæÎ½ww“}äûù#çî<~ó»“›|÷73wæÜ®ýF6ÕžPk´<€Ù –¹!h·ј˜H7–FÀìÀ3Lé©´ÌêÕ«ÅNWQÑt1Ð$xã7Þyç´[HVUU×Eº®±gÁRâââÈ*#È~bz7A)455é2º®Åè`BFFƤI“Ö¯_¿fÍ’’ššJ¢ÊÕW_ͮ۲Ellìe—]ÄÓDÍ6`ë°v¾Ìh2ÎÎÎ62õ³ŸýŒ_4àÑ£Gßpà RCÐ$kkk¹3ø¸g˜šbWÑ855õÉ'Ÿ0`·MqIIIvv6íòv2ë¤s+Xc6ã"`¯×ÛØØhSã#GŽœ8q"ëér^![¥´´´oß¾F'-ªéÛ·ozzº˜ÞÐÐ@6”fÃ4MMM2º®Åèü«ÝÌÁqn“,¢…999‡ƒÆÇÎóÏÔ4íµ×^cÏ âœTGÀfweMÓrrrRSSIÐÏEÀÒßûÃ?<}útJ³Î<$Bˆ€©u:s$ѨQ£æÌ™s饗&''·µµ½úê«÷Þ{ï“O>Irg̘A6÷¿òÊ+5M{ñÅçÏŸ¿qãFÿÚUǾ ÉTWá"*îÂî´hMüׯpN‡Œ† E¸9`® ò»“Nš²þsìp8~øá’âñx¾ûî;2ÒM*`^¯—¹à‚ Ž=*:£Ó7ޏŽ÷+æT\c¾IHõ•EÓ ÉAuééé ,èþvèá„oÌÊ'  .\·n]YY™Ç㩬¬Ü¶mÛæÍ›ÇŒCrããã7mÚôꫯ–””äåå=ñÄ¿ÿýïÉžòþá8ÿ5¤g¬óúúz+fYûF,Ê*'·~ AS•ƒf¤²°iu.ÊdŸiܯ_¿^xAê?àÒŠšì1Xü}¥¤¤í̬°ØÛìà³Çã¡nw')))  ðð€ÕÂÆæVWW«5;;{ýúõÁrLæ€i8”˜Ó!MÓ¸ÅJš¦ >ÜŠYÍ‚Kc2¶|Ÿ>}V¯^=vìXëCÐYYY`´oß¾óæÍ{饗œNgrrò‰'X)r8ì¡¿F°vþ×¢[ìxNŒŒ IDATš^ZÅív<˜óàO?ý”ÛûBŒnÅCãÅß×ðáÃɯÃô—®ˆ€Åï7€¨óöA+BCSÖhÖ’%K4‘6µi*ÀFÕi¸¸8²¹’õøÁ?~<[¥W¯^ýû÷'z9kÖ¬’’òQZ]Œ¹iL´V×õ/¿üÒçó‘&ĘÓiM}öêÕ‹¦ÐÃ$ĘÛDi¶L/Ò_·8ô è „o¶H#`£ +Ö¸òFsÀb-ÒåElú"ŠÑ4W^W.”å4›!UèÆæX\öœN5¹˜U“ 0Ù([×õ„„²ï„ÆŒ*‹ý)A³Ð˜»ñüü|z-盢ŒpëÎ4F€ÐÓÀß¼mÂV”üëT°(.—ËHDñãŒpU ¥éš«ç€¥mQ¾ð ©B³KºÄòäE[iL®©ÓFëêêžzê)®˜4V|0Š€ß{ï=ºœžµ&]*eú­¨¼¼\œâÕ™EXêê€(ó¶Qˆ_P"`n$–M!'ÃKí©#µ_SSC7Á0ò;M–³ ž&Á(—ÂÅßħ¾£¸dâ–:`s­°vÄ0—³f+ÉËËóz½Ü ¾RgDâââÄM¼ Šº€èóþÀí„%ªfYƒLN–—ŽK?RչꪫèñJ¬Ö™L¥2ɤ1(»$Íõù|+V¬ànŠ]]¬Yˆ€¯ºê*ö£iÌi»íw§ƒ "ï¡ý^È^¦":kÖ¬úúz©XšÖ•B»Âº€ˆléiHFÿŽ­‹Ñ@“nÅ–´³ÿͽ^oFFýx饗’Y1¼&§îhçÆº¹4D‹-//ׄ/ l£ô£¸3પªÄÄDMÓ\.—Ûí¦0qÀívWWWß}÷Ýâ®ô+‚´¥ šˆñ!C†L˜0AÚuôö- ¡Q´êŸ‚ÆÄÄ$''ë‚ ç¿yÛˆÿg¥Cз4RDÀâ…h"¢\pÁСCi+µµµdT´ÀÇ 0wGT¢DoŠ‚^¹reqq±ÇãY½zuII‰®ëEEEÇç¦iÇ÷ë_ÿ:55ÕX·Á5447ÕQ£2þE±ÅÅÅï¾û.€VAÛÆŠøI‹)¬©˜~T¨M'ѹ®ë………d×b©0ˆCÐW\q=£‚¯ jJ®³²²¤îq®r›-=zôèÑâéç‚lçå呅͵µµ·ÞzëªU«¬Ï³'r7“––¦ðâ‹/’ý³‰€ý ‚5ƒÒ€è_ºm£3»`ÒñÂb@# ªzI—Ñ¿in…‘ÃáƒUKxss3‹K®ØP’ yEí°‹›ŒnŸµÌ5š••Õ¯_¿ŠŠŠ‹.ºÈï˜Þ¯Çã7nœtý”¦iÕÕÕ4–à|V—±‹Ûí¦g;zˆ€íAâKn+J.ÎÓ‚!ÀFÿåi°È¥ÓiÔ~ø#ÌEÀ¬B‹>K‡ i‹l ·J‹kÅÊ›?ì½s0‡Û펋‹c#`£o$T}¹®£)t‡p…KV8èpUUUUU•u "`Û˜®@6*&E¬kd_ýÏf¢t(6êÕu=%%E“ A³ÕMç€GŒ1uêT6—B’¢Ž€W®\É*wii)Ù^ƒk—½5—Ëåñx.¿üri»×^{mIIIaa!Ý œõGÑ{F7"eÖ¬Yìzr¶®•&€¶. AK£I¿#`..ä ›FÀ7Þx#)™››ËJ/-Ifa¥Æ©ÄŠsÀo¾ùfMM Méß¿ÿ°aÃ8ÇÄXì–ÌÌL¶ØO<Á¾L+²£ë.—+77wíÚµ\‡¦M›6`À€Þzë­\çXTÇììlv‹.)555äôŽ@"`@lQÒ¤‹°`£2FÿâisóæÍ#Jpíµ×ê Ú9…(++Ód_4F8oºé¦{î¹GÚ§µFΰ°¢0)¦ugïÛ·oQQÑo~óš›@}BZZZá¹M¾8Sjjj-Zd¥¤` ÌËQœÅ¤ {A7æÞöQÔRØát—-F‹CЬ^öêÕ‹.fm*Z—FÀê{a¿Ý)-³jÕª¢¢¢¢¢"šõÜsÏq…¹…ÖFwP_€-ÛƒnÄÁ&¾‡)–Q®ômWñ£Ú~||<Í2å–FÀ\Š+nGŒ€¹Þ ¹d§*шºç%DÀ[@€å¨#` £­(mmÄÁ¢^„¥`Zžîš\\ýõ½{÷æL;Öb 5á5$…2‰®J hçÎKð;3;U°+€l¶ŠB$¤CÐ~GÀN§S±#„iL?êçÃyuñŧ§§K}æ"`Ö¦&H¦ô~‡×ëç¼’Þ‹è¼Ôr ðâÅ‹»A€}>߉'ºº@Ô¶Šô½£ýüµ» DAÍÎÎ~ì±Ç¸aXi-©©âJ­±Y{öì!çÛs霬j‚ÖRSlºÃáX±bÅ´iÓü‹€9o‚€0,G‚ævÛ%ÍãñÐĺºº›o¾Y³0mÑŠ‰ÒГÂé=[øá‡nllÔŒµ3??Ÿ;Id7Ü`cbõwZÒétfff(nÐôË €¥¹¡@€­¢x¥•¨,«µ}úô¹øâ‹ÙÄÒÒR©Yõ¸«X†\»\® .¸@á gddP}åÂM¯×³páÂþýûkç %É®¢eé]ˆRít:HOƒÞ¦®|]˜6‡e@€­"î7Iᔉ-@k]tÑER³ÒxZ³‰ç®»î2Êu,?õÔSÅÅÅÒ`‡Ãár¹fÍšEsËËËGŽ©É4X×õ¥K—Ò¬›ª¦èç3‚VÛ€ÈlnXq•*©li­­h¯¡¡;(——b[ꦵóUœÍýÑ~4vìX£¸wïÞbLwfF `9FsÀÜÅØ¬"næêr‰Ò(Ö(8~ì±ÇÈöl]# VXã"`©érÅX-À¦e4MÛ¶mÛСCÅ¡`XÏ*Š(îÃÌ ùéÇ",#W¤X—j…âŠeŒÔ×Ô%z×ä|@iyÅF4×çó),@ĶŠ"–å˜%!hµvÙ¡ñ«‘Yö#Ðs°¦i¹¹¹b+¦ç5q°‘Ïñññyyyd˜:77WÚWŠêÑ@€åˆCÐâ2cZÒt éÀ5kMZKš(»¢WúùHËpÅHÊ€8#³gÏ–ú þr@ûŠk(½Íòòò–––É“'ëºÞÐÐàv»O:e¥+ À°UêëëÉ…Ql$¥¥W$Š"jŠT&¥ÕÙòj s ÷ïß_ŒŒÙÂT€ÉÊ)µˆÖÖÖ–””p_ X˵€È°UèYñ¢H(æ€5Ms:gÏžUGÀ¢Û*Ϧ³‚'FÀ\.[—3et€®ëóæÍãKKK}>_GGÛ!š¦±ç 1cÆŒ¯¿þúàÁƒF¢Ä¶ã]#QÔ˜غ ªuQa„»ð#6M7*üøã“Gì´¢sDËR÷ À€¨,Gœ6ÒEM¹KÓ´ /¼PÑ‘ÎI²:ÖéKÖÔÔ\rÉ%\+l[l•„„„?þØ¢Ã\›Š¨Ñýj‚D/‚¶E¦×Ü¡CRkv‡ ¥UÄ\ÎÎUW]¥iÚîÝ»n„Mw8½{÷6j]}õHcvÏ@ ˆ-lc:M.H m*^¯7++K1Íê:{ÁÆèRÝU/ ãšoÐÓØívÓ:lsç[÷"ük“cwúÆoìÕ«—¢¼hPWW÷ÄOˆ’#çêç¿Îd³šjEJ9íOII)..VWQà prrrff¦ÅðWjÈ!3gÎ4m"°U¨‚Šºåp8&NœèóùŒv¨Ð”Òeô§©t¾vëÖ­^¯×¨¡¢¢¢wß}W1ð+Unz››ËÎye”«iÝSÓ´±cÇ>üðÃV†‘ ×ÔÔ¨ë@$¶Št¥ÅápŸ¦fE}âÔË"»GYs:‰‰‰¬lÝ‹tž8ð ×[o½•KIJJRDÕÚù_2l",²täÖh Ó4–F‡¬*+´VÓ4—ËuæÌQÀ¨…²²2iE#—L'kM#à’’.}ذaÆ S˜Õ„ïê –cΊ1«:”´>ÍÙ÷÷`s ÍÍŸ?¿®®N}¬AÓ±â.’Ƭ¬,² ôû‰TðŒbYM©èŠM5a´âøîÂápÌš5Kí¼4š7òÓ´€:dWpýõ×[l¢DÀ¶1‚VÔ’¦‹¡3›( µÌšŽxKo$X8^@Ï,Gñ’#É´¢gœÒ— (i¢ô `îu[ÅEø›’’2räHµ·êÜ´´4õz+5º®³[Z@C† IIIÑŒ—_åççU×9³’,nÄ!.øâTYj–kBú±OŸ>=ôQ-M—E²³³û÷ï¯(`Ê_ÿú×@ª@¤V1gΣ,VÞ~ñ‹_ 8PZŒÈU^^^vv¶‘©òòò¦¦&iEÍx‡Kî£8ìGð ÁµÑ X (-Z$fI§f-q8éééW\q—¨1ñ.»«¥BqµóeÛȶ ·¤ËS‰…€E À*LWür)FÚl+4•Uœ6rÆV¬1oÑ7Sk`°Ø*Fc¿êDÿBFnKNèììäÒsssÙ=™¥-úÊ#€`÷€U"'¶ÖB‹usÀ¢pŠpss³©oägUUU~~¾uǹñññØO,–£Ø7C8*‡ÕÖ¤ö¹ ®iÅİut]Ÿ;w®Ý*FYååå---¶¬@CÐ*ìΛֲ7ž¬>ŽŠqbb¢Eûø‰f`?±5ì‡ÓZÜ[¿œ5ZøÙgŸ:t¨Ý ]ë…YìÖ –Ãð¬¬] –8)急^麞˜˜èv»-:€ BØOL§{EÁöz½â„«‘;N.–N÷ŠóÁÖ=‡ú@«ðcM“f¡’éÛ¸¸8Ó&HJ||<ù(nEø",¿58&& Aì'Ráôz½Flé–Ãá ãÉ\|å•Wú|>Í@쭴ª¯é±Çì °?æ€;;;kkk¥l-Â"Ðm4¸9àGyDÜV:×l•·>Í @Mø ðûï¿?gΜ¤¤$Óÿø»wïž9sfaaalllNNN]]ÝæÍ›Ùº€þ˜F´âúäÞ½{oß¾&Z7 ¦OŸnex¹›ç€=Ý*¤„¯O:5##cçΦ%çÎ;hР—_~¹½½}ïÞ½ ,Xºtéý÷ßÏ–é<S›111šr7+éþÉœdº\.²3;,­ÂѧOŸ›nº‰\OŸ>=++K,̶EÚÒÔ… Ú=|×h{Kv ß°>ùä‹%÷ìÙC¯SRRêë닊мxñb¿[•ÆJàhª¦k§Å†æÎër¹ŒŒû7ÓLŠ]~ùåV ³,Y²Än-"á‚Ëår:ÛaõÌ#ƒÔš=`À[F¸£ƒ²¥]’’’®»îº.mzÑ&ÀÇß±cÇu×]wË-·°éYYY.—+;;{Ê”)ûöíóòÅ9༼¼íÛ·kÌ€³t–®ëFvüvÀâ`!„œè`¢+III#FŒðù|MMM4«±±qãÆ'Ož|÷Ýw+++GŒñá‡ÚµÏEÀF±±±ôD 1`¥sÀ¶Þ2-Óm0€`=LVWµ¶¶677òÉ'<ðÍjii6lX|||^^ÞwÜÑÔÔ´páB+6ÓÒÒè55¸iÓ&ͦÔÑ “UJ]×o¾ùfÓePê†y¥©©I|e¦KÿaF222&Mš´~ýú5kÖ•?~üÛo¿mÅÚÑ£Géõ}÷ÝG.&Nœ¨Œ‹û6S¸˜ÄÓ•••999F­‹cÎ~;PÓÔÔÔ)£ëZŒ6& <¸­­Í(×z‡*^C²¾&™Π,¥–6¡YŽ€í6 +ˆNÞµkW¿~ýŒr7lØàÇ8v_ø±2t,-c4OÌ}lhh¸í¶Ûtf#Ž™3gb"…H`VEFÕÒÒÒÖÖvæÌ™C‡­]»vƌ˖-#¹µµµ›6m:räÈ™3göïßÿàƒ.Y²„æZo… ^"`¿×0Û-™››[ZZÊ:“ q€H!|˜WO†/\¸pݺueee§²²rÛ¶m›7o3f ɽûî»›››ËËË=ϰaÃöíÛ÷öÛoWTTØõÇô=`#I:7îMf‹í꥕Ya?ìè~Âw',õL-›[]]]]]mT²¦¦¦¦¦Æ?ìÎûg™eÖ¬Y[äØú*è.]VÀ á‡ܱ€š¦ÅÇÇ_qÅlQ¹ £’”äää„„®¤‘K¶ÖvY´  {€«PGÀN§333“Md‡©Õñ+ C­,Ôb?å5$¨/„`«psÀâ+¿—_ÑÄÀ…#·e !¬ÂtØâª(nÚU×u"ç¶"`iàÎLè6 ÀV1gÕ 6‚f¥Út/hÅ ³‘´««[i@÷VÁj•ô0NÌ ÉQH\u]8É(VæeM©ÙÜ0xYYÙ3ÏÆÆÆ&$$ÐòÉÉÉC‡5² @,ïóù233m&@€U°š7vìØ+Vhš–••«.Oû=ztss3Íu»Ýùùùby?hll$.!¢€ˆl•„„„ŒŒ MÓjjj>|õÕW«Ë[Åì­µ€p¬"¬ö¥ âÜ-4B8˜˜.ÔR—÷»Eì„XEpµŠ;. B=pÐð#Þ ð8B¿ö@È«P•xú¯•ºþÕ .P_ ÀÑ4"°Š…MÜH‹K |ñ¤"°Ÿ(vfîÎFý3Ù€î*8‘#³¿,„¶õR2€0^`ô Àþ¬m4ºh0„pÐP¿æøÖ•Ò¹[œ  ¸[áD4$ µ€pÜUHaÑ €ˆ&&ÔD0œ¦nݺ5p›j•ÅV”5 öŸpØF§!@„îBD©cƒf?aÁ'ḫ°2ŒEXÐcw+ˆß¢E‹Œª#˜€ˆÜMˆš7tèМœÓb¢¬‚öÿ^+bkýô§?µe6X˸<OCCƒÝZ‚ "`?±¢|~¨£°­ZÉÉÉ?þ¸­"஢+6âÀ5D ànÚ € „pÄ`´kÆ Ýï €û‰éœnWLÙJ Nœ81¸­è Àf‘ š€û‰rh7Ïž=Û/wº„¦¦¦P»bÐèôz ë_~ÿý÷çÌ™“””d*u»wïž9sfaaalllNNN]]ÝæÍ›¥%9Ò·oßp%ޱ(ÝÿÒâÅ‹»³¹0=€@ ºŽðà©S§fddìܹӴäܹs ôòË/···ïÝ»wÁ‚K—.½ÿþû¹bÓ¦MûùÏÞ5þZ"œµ@w¾[Q~òÉ'KîÙ³‡^§¤¤Ô×× <˜ûâ¶bÅŠÌÌÌI“&Mž<9p÷ì.‚ô` _—Ëåt:Ù”?üðÉ'Ÿd¥º›!‚È~XEEE=ôPð<JÂwÚ?Ž?¾cÇŽë®»î–[n¡‰7ÜpÃÚµk}>_} ää人ºP{ 8DOÌŽñŽ9’]¹÷“ŸüdâĉUUU!p ÒöØr²µµµ¹¹9''gñâÅ$eË–-Æ ;{ö¬]ƒ¡þÍ li–uôðW]·íäo¼1mÚ´ƒjšV\\üÚk¯b. E~èåÉ“'ÓÓÓO:¥)—‡ÿ½ˆV¢g˜e×®]ýúõ#×¢Ê"r"u4׎5ª¥¥¥­­íÌ™3‡Z»víŒ3–-[B÷5á J‡Ž©·lûÆo<úè£o½õÖñãÇÓÓÓ/»ì²ùóç2Da9lï@R„€H‚"0 À@€! „0 À†|xåÊ•MMMkÖ¬¡¹=áP÷!ºŸ¹sç4èå—_nooß»wï‚ –.]zÿý÷“Ün}‚{¸RÔ°|ùò)S¦°)S¦Lyä‘GBåO¡xÔ=ý#Þ{ ·‰"ýíGý#q×]wýðÃôãG}TTTD?ö„g@Ý=àùç?ÿ™””D®»ó€Ë©®®~å•WØ”W^y¥¦¦&TþtŠ¿4uDAÿˆ÷È-Gb‡ØàèëÎÎÎÿýï±±±ôcO{:…èìyÏ@ggçRSSÉuw>`9GŽaS>œ••*ºMÓ233cbb²²²&Ožüé§ŸÒ,uDAÿˆÿe¹åHì#îQĦM›***èÇžö t =ÐÙÞÿþ÷¿o½õVUUÕ=÷ÜCRºó€Ëq¹\§OŸfSNŸ>Í}OŒwìØÑÑÑñå—_®X±"##ãƒ> Yꈂþå'[ŽÄ‘ pz$Ž=ZZZºcÇšÒÓž±:{Ì3ÀNÅŽ9òìÙ³$½;Ÿ°œÈz’‚ÅêÕ«GE®£é/M ØÊ(~$Ž92|øð×_MìQÏ€´D¢øèììlmmmnnÎÉÉY¼x1IéÎg« å$'';vŒM9zôhJJJ¨üéÆÿöÛo“kuDeÿrËQÙ!Zô>‡5jÔ}÷ÝW]]ͦ÷œgÀ¨D¢õ dddLš4iýúõt)xw>`9 øè£Ø”¿ýíoeee¡ò§{èd†eÔ=•ýÈ-Ge‡hQúH|õÕWcÆŒY¾|ymm-—ÕCžEˆDå3À1xðà¶¶6rÝÏXNCCúuëØ”uëÖ566†ÊŸîaÆ —_~9¹V÷@TöO ·•¢Eã#ÑÖÖ6zôè‡z¨¦¦FÌí Ï€ºD¢ïÙµkW¿~ýÈu·> G+'Nœ(,,|àŽ;vìØ±¥K—µ··‡Ú¯`RSS³qãÆÃ‡Ÿ>}ú‹/¾xàÒÒÒÞ{ï=’«î(èñáä–#±CÄè Ä Aƒž{î9£Üžð ¨{ '<õõõ[¶limm=}úô¿ÿýï§Ÿ~:77÷¥—^"¹Ýù @€ Ù¿ÿ¸qã|>ŸÏç7nÜ¿þõ¯P{d^{íµk®¹&555&&&77wêÔ©ûöíc ¨{ BûGý54[Ž”Qô@Ox$¤·ÿŸÿü‡ˆúg@Ý=áxýõ×ÇOî1;;{„ »wïf tÛ3 wü>Ðu`` @€€B`Ü_ #ÀIDAT @€€B` @€€B` @€€BÐ%èºjk À€ ¹À.`@—ÐÙÙjk ÀD}ôQ}}½×ëMKK»ù替ýö[6è|ë­·.¹ä’øøøÞ½{?õÔS4]×õï¿ÿ~éÒ¥½{÷Ž‹‹+))yôÑGY³ŠŠ·ß~{ff&ÛСC‡n»í6ŸÏWXX¸`Á‚S§NiçÂ_ýÔ­µuëÖªª*¯×ëõz«ªª¶mÛfÝC¢–N@ØóÙgŸedd<úè£GŽ9räÈÊ•+'OžLÿ~÷íÛ—––ÖÜÜ|üøñwÞy§°°ð7Þ Yš¦Íž={Ñ¢EÿøÇ?ÚÛÛß|óÍ>}úüîw¿³Rqúôé$‹õ¤  àé§Ÿ>yòäþýû¯½öÚ… ÒòœÏ4å/ùKJJʳÏ>ÛÖÖÖÚÚúÌ3Ï$''ïٳNJ‡D1`"€É“'/[¶ŒMY²d U¸©S§þêW¿¢Y[¶l¹òÊ+ɵ¦i÷Þ{/[qÛ¶mC† ±Rqùòåj¯Ž;Ö§OZžË¥)ãÆ[µj›µråÊñãÇ[ñ€( @™™ùÅ_°)Ÿþ9U¸¢¢¢¿ÿýï4ëØ±c¹¹¹äZÓ´Ï?ÿœ­xìØ±ääd+÷ïßϹÑÑѱxñâÒÒR·ÛM†ÐœN'-Ϧ)ùùùd³8PPP`ÅC¢½ %{bbbÚÛÛãããiJGG‡Çã!¿qqq§OŸfË;Žï¿ÿ^;7Ãêpœ·ÚC×u+OŸ>ír¹ØÜ;î¸cß¾}Ë–-+))ñz½§Nr»Ýĵ)¶üøñ¸¸8šõÝwßõêÕ‹Î+< ŠÁ","€´´´Ã‡³)ìÇÄÄį¾úŠýfMD”Ài‹º"§¾š¦mܸqÍš5ƒ òz½š¦}ñÅVœÏÌÌlkkcSÚÚÚ²²²¬x@ƒç€ ¶¶vÆ lÊsÏ=G¯«««[ZZü0k·bGG…¯]»–^ÇÇÇsÁ4¥¢¢bëÖ­lÊ /¼PQQaÓY¢ŽnêÀgŸ}–™™¹zõêÖÖÖÖÖÖU«VM™2…þýîÝ»7;;û·¿ýí7ß|ÓÞÞ¾}ûvv-•hÍ'Ož2eÊáÇ[[[ùË_þøÇ?¦Å ðüóÏŸ={VleçÎÉÉÉdt[[Û³Ï>›’’òÎ;ïXñ€(O9‘Á|PWWçv»SRRfÏžÝÖÖÇæŽ3Æçó¹ÝîêêêíÛ·“tSy³UñèÑ£S¦LIIIIJJš>}úÉ“'i±?þñ}ûöu:4…µðüóÏWVVºÝn·Û]YYÙÒÒ"uF@”•D$úÓŸæÏŸÿᇆڀŸ`€È`ܸqþóŸOœ8ñÍ7ßüá˜1cƼyóBíÀlÞ¼yùòåüñ÷ß_^^~ûí·_ýõ¡v à?` `` @€€ð€Ç·]fC.™IEND®B`‚gsl/doc/images/movstat1.png0000644000175000017500000047233013536675317014244 0ustar eddedd‰PNG  IHDR@ ô¢9 bKGDÿÿÿ ½§“ IDATxœìÝy|w?þ÷Œnù’|ljØI“4‰s¶4mŽÞ¥-´ÚRJ)…î²Pöb/-Ç~ËòÛ/ ûÝÝ~aZ¶Àr-Ýí= ÷™¸GÚ$Mâ4wlÇ÷­‘eÝš™ß£ŒÆ3Òhä#ÖŒ_ÏHãÑèc¿#ôé{ÞŸ÷‡E‘Š;ßЃ5$° ¨!E ,(jH`@QC ŠXPÔÀ€¢†5$° ¨!E ,(jç"µÿþ/ùË>Ÿa˜¼'3ç`„P´ÎEëÎ;שּׂ­}óÍ7 ž/N5§c€"ÇœË Ãä;#çÀÂXPÔŠ1U__ïp8-ZtÇw;vl¾‡óJ<‡Œ¼Ý7Þ¸k×®h4ÚÓÓóÀÔÖÖ¾ÿþûú/±ÙlóýW€¹J4],•|ð©§žzþùçg÷²PlD³CÍ´ÑD³CÍ´ÑìA ˜» {khhhùòå“““³{Y(6¢Ù!‚f‡Z‚h¢Ù!‚f‡Z‚hvˆ Ì]‹±–þí,pÅžÀzôÑG·mÛ6ߣ€ycŸïL©.»òÊ+ï¹çžíÛ·WUUõöö>òÈ#<ðÀ /¼0¿#€yt.*°˜³Tµ¾ñoüæ7¿Y·n×ëݱcDZcÇÚÚÚ6oÞ| ÅÉ ÒÐæÍD³CÍ´ÑD³CÍ´ÑìA X¸MÜa¸ÿþûç{0#ˆ Ù!‚€ Z‚hvˆ Ù!‚€ šÝ=÷Ü3ßC€âe…ì&r´óX°@!E¡½½}¾‡3‚š"h¢ ˆf‡š"h"€…!E¡©©i¾‡3‚š"h¢ ˆf‡š"h¢ÙµµµÍ÷ xY¡{z`Ì;ôÀ€ ,(jH`AQÀRg³CÍ´ÑD³CÍ´ÑìІtX¡{z`˜]0¬¨¨˜ïQÀŒÌ]ŠÆ ©$°æš¸À…,V7;DÐìA @-A4;DÐìA @,Ì ‹ï°„ÀìÚÚÚ¶oß>ߣ€A,=H`Ì;ôÀ€ ,( Á`p¾‡3‚š"h¢ ˆf‡š"h"€…!E¡»»{¾‡3‚š"h¢ ˆf‡š"h¢Ù¡ ?è°B÷(ôÀ˜wè XPÔÀ‚¢€¥Îf‡š"h¢ ˆf‡š"h¢Ù¡ ?è°B÷(ôÀ0»öööÖÖÖùÌÈÜ¥h¬úA `Þ¡‰;,PH`AQhooŸï!ÀŒ ‚f‡Z‚h¢Ù!‚f‡Z‚`aH`AQhjjšï!ÀŒ ‚f‡Z‚h¢Ù!‚f‡Z‚hvhÃ:¬Ð= =°æz`À…5$° (`©³Ù!‚f‡Z‚h¢Ù!‚f‡Z‚hvhÃ:¬Ð= =°Ì. VTTÌ÷(`Fæ.Ec…ÔXóMÜ`B Š«›"hvˆ  ˆ€ š"hvˆ  ˆf…ÅwXB`vmmmÛ·oŸïQÀŒ –$°æz`À……`08ßC€AÍ´ÑD³CÍ´ÀÂÀ‚¢ÐÝÝ=ßC€AÍ´ÑD³CÍ´ÑìІtX¡{z`Ì;ôÀ€ ,(jH`AQÀRg³CÍ´ÑD³CÍ´ÑìІtX¡{z`˜]{{{kkë|fdîR4VHý ¦Æq\ ûý~ŸÏ7¿ã˜ž¹KÑØç⢠™ÐÓž:ð¬Á“£Ñ(Ä¢Qé)çñ0~¿ÇãÉûBûÅ·³ÕMÓ%€y E•¢f‡š"hbQI}ðjü‘û žÌUiÆ ¼ñ5°;î,h`0§ð14;DÐD Cw( MM¸lnˆ Ù!‚€ qrü¼‹Ðô¼ ‡¡Ù!‚€ šÚðƒ$° (TTTÌ÷`FA³C-A,*bhô¼‹Ð‡VqÁÇÐìA @Ínûöíó=(^XB0Ë”Xö-7± «uNŽF£###òS—Ëåóù\.Wö+‡F“¯ÿTzŒ,H`Ì2e–ãê{ìë?¬wr,ÖûöÛòÓÖÖÖòêêÜ'O&ßø‰" ç)'GöT€•` !,u6;DÐìA @‹Š2Å”j[´OÁó¼òiYY™ÎÉŒ»”ñ/>ûÊ”0|zšC„9€¡Ù!‚€ š]{{û|Š#Šâ|a¦Æ ¿XÆäŸ7‰c=Òã’ïw²5ËtN…B{÷nݺÕãñèœýÇkRí/I=_yÜþ¡›g:\€â ÑÈÌìæ.Eƒ ,€Ù69&?dÊ «ÀAÿ|vñù™“Ñ ,Ù+ÐÀ¬JDÅx$ýØæ`\¥ú§«2VùX ŠV?X° E‹ÕÍ4;DÐÄâ!ªÊ¯Fÿü™T`ñ¨À*&øš"h"€…Y¡{z`@ñÎ m£ô˜m\Wò½<ýh‡††Ž9"?Ý´i“ÏçÓ9_œžüRô˜qyK"·$À ÚÚÚ¶oß>ߣ€A,s˜R•o B*¼‹)¯•/+Æ#Âhwác(FÈ^$°fS¡ ¬B{`Û°:s>VÀ€…`08ßC€AÍ´±xˆ¡QùqÞ-ISe¤ê~ÊF„ýÇ Ì!| Í´ÀÂÀ‚¢ÐÝ忆š"hbñCs_µ#| Í´ÑìІt E¡µµu¾‡3‚š"hbñÀ C³C-A4;ôÀH`̦) ¬òê¼çÚÄTXH`À€Àl:K«—2.oúí&Çĉ‘Ç`2H`AQÀRg³CÍ´±xº„pM܉a™ú•ò3´Á*øš"h¢Ù¡ ?è@ Š–:›"hvˆ  ˆÅ£Ð]§QED6¬",>øš"h¢Ù¡ ?è@ `6MYBX6'=°m°ÀŠÐ†t 0{ø”=»üa¯/ï+¦WÅ6(XXBVgµÇqgq7ßãÚÛÛç{0#ˆ Ù!‚€  1 ³M¬˜±¶¼/™N¬©X<*°Š>†f‡Z‚`aöùÀŒðÇÛøoQâ™ïQ4åX4*ý”óx¿ßãñ¹”cûŒ¿aî† úšššæ{0#ˆ Ù!‚€ ‰B;¸SXÇ"bxG•ÍN|ŠˆÄñ^1bÜeÓ1Ì| Í´ÑìÚÚÚÐÈ r1w+uøåÄODñGî#"–H;OŒ»SÙèØöéY ¢¢b¾‡3‚š"hb‘˜FËx,©Ò\®1/¯Xâï""ÅÄã÷3uúoäØñYÆ·ÈÈ`zð14;DÐD³Cö t˜;e[²Ö~Ñ­ôÈc3¿”Ð{xæ€nj÷Y®À Ê áò%>)E”xö¼oÄT59.¹ÝÈŠ¹{`Ù/ºÕó—ÎÊ¥„îC³rXÈæz ¡RÔWØJáÌÁ‚Î(æ®À’9o¸—ˆâñøÈȈ<íc¦¶¶Öåråz• &_~Hz,ô Ûß|ÂRg³CÍ´±HL£kzM܉(Vpë@AçC¡ð14;DÐD³kooommïQ@‘bŒO’ŠÃd~‹ýû÷ƒé½«Nç¶mÛô^™J„î.£TBºJéÃãFöºÈ%þÈ}ÒÞ2Däúä?8?ö ýóyžßµk—òˆßï߸qcÖ“9Ž;~üx$‘ž:CkG÷èïW#ÆBÉ—~$=f*êJ4ò[Ì‹`0ˆFff§LÑÌ.‹T`É”¦D"!Ëæ^&iw²‹V¥k¯DQè9l[…l=LŸ•3eÕyÏ×.ÔYBèóùÊËËåV¢l‘ûšï¹ÜnÝ7àS»~.Æ#D$‡Dn}Ü h!{:ÌÝK+™L*ŸÆb1ýómM™êD¬"€šÒË@Kµ~ò-!TMuò7Ìbmlcf¶Ãwa!˜’ÕX©TJù4êŸ?eJ×Ö¼ikk›ï!ÀŒ ‚f‡Z‚X$ mâ^PMNN*Ÿjó_ZìÒÌ‚D´ÁšSøš"h"€…Y*%ŠâLX¨ÀšGhµhvˆ Ù!‚€ ‰B›¸”ÀJ¥Rñx\yÄH˶tCæünlD8‡ð14;DÐD³C tXªV*•RUÝç]B¨N`‰"1Ìœ €)=° T`i3P: ,UùUÖ—kM©ÀÂB(bHA-Žã€ôØï÷û|ó°žÕXª#ù+°ª¯OŒpD$F‚ÂX[]ØŽÔi¢(†ò3¦´2ï+ ªÀšf«i=1,‰ ƒ'Åx˜q•ä}X^ò•Kù}Ñh” bg,œÇÃøýª}m+·Íõ¶x–J`©Úš’1 Û¸Ž?ž.SzÚ‘ÀšØ-ÕìA³C-A,bt‚øôl„q—’Cw@"*°‰{8VÉßĈq•°õç ljˆDAè>d;ï⼯‚iÀÇÐìA @ŒãO¼ûé—ŒœÉi«ÊãSŸ:o¾®X–ꥭÀÊ»„Ы8twwÏ÷`FA³C-A,S;¸ç/¿¢+°´ ,#XDÄ.SöqG¬¹‚¡Ù!‚€ šz`KñÇïŸï!ÆR ,mÏó‰DBÿU¶&$°æ_kkkþ“ ˆ!‚f‡Z‚X ¦vp¯6òã=°DQœÞB"²)Ú`ñ؈pÎàchvˆ  ˆf‡Xç ¼?üò|¢0_BHDÑhÔétê¼JYÅw#†h»™N­ÀªÊzŽê"Út•(Š¢(2š]eb±˜6]e´«)³¡€À‚â[òcvéûúkõNŽÇ‡††2ç³lMMËåRžcŸãõƒd±–v !K³NÙÆuÄ0$ŠD$ §T‚ìz /°*a¸#µç1#gfífê9™9£´Šã¸ÎÎNŽK÷Få8®¹¹Y5ɚʚÀÒ–_i_ž+_fS.!ìi''Ö–ÿ—+â·ñ‡_‘Ÿ¦nùîpå*éqÖ´‰-•êݽ[~êõz—_tÑ9§Š¥XY+°åNXY'ŽŒ×ÇV5 £ÝDD©Dü±¿cJ+‰µ;¯ÿ+b,µÄ²˜µµµ¡XÔÔA³C-Aœü‘×ãÜgä̬ÝL•¦¬*ÈÙ+:›]RÍC².eÕ“±±±¬g*¯Ÿ+_Æø1ubpˆˆÄx$þè7™’Ì0¯Ïqåsý¦`>†f‡Z‚hvhÃ?[ôïÉ¥ö<.?W_ÚÁÖq]]ÒÓ¬iU{q©x(o™ù¬³T+k–òuâHDlck:E”x柤¶e›lk¯˜›‘‚¾fÌ4;DÐÄY! wÌÖ¥¤%„ye­ÀÒfµ8ŽÕ¹~¾Ì¶tcêÐ ÒãÄÓßU]‡]²v®wZð14;DÐD³ëîîF#³YaüžÜÄÎ?Í{¿M•ÀJ&“ãããgΜÑ/3Ÿu–ª0ÊZeÛ´>ËÕvý|F£³†NÏÖ¥²&° î9¨=²Îs öÀ""VÑÇ]+þÄß¼ÀÜAöj¶¼'g[wUréyO‹ží™ EqllL›ö*t…²~–ì’uY®öîoÅÏÿq—ÍlP`¢"åØñYÆ·(×™ñx|llL9÷¨««Sv3µ­Úæ÷ûÇÆÆB¡|°´´Tu\=°òѾ<×9véŸò‡_æ·¡ À Þ“sÝ|¿‘ÓTX4ƒôËLX*•H$ôOp8~¿_{ܾz‡ó†{¥Çɶ_‰~"ãáÔ;9.»{ÖÇ Zíííȵ›"hvˆ  ˆ³By»ÒuÛÿa*—ä:ÓE4xâD__Ÿ|dÅe—©:¯ûˆŽ?.ñx<êw4V•õ4ÕñòòråJKK•ÓålG–:ô¼pæ ô8þÄ·¼_7ÙvÚÅC³C-A¹'Ç”UÛVm÷s\OO|KÌívkÓ&Ú–ñðYd©–2Ȳ¬vªçõz³®Édª]·Ÿmaw&~÷ÿI“»~Ö¹ÑÔÔ4ßC€AÍ´qæÄ'Nžm”îp3þýóm¶)ù ‚ :BD^¯WùT» Ð`«¤¤$딓Õ{UWW+§=A¶4°5Ý©]î´jßrcä[Û¤ƒüáWøc»l«wf}#0C³C-A4;´áŸ-Âp&åºí;Låâ\gú|>§Ó)/ôù|Ú´‰j !9NeÖ…a4q/€(ŠÊ9œvóé\U;ïJ<ù$ŠDÄß- fë–Ïâ8!+ì4avˆ Ù!‚€ Μ²Øž­mÉ»±ªô;kKU`¯­·7ØÄÝétÊm6›ü*噪‹Ûí™i^® m+/±­»RÞH;þ뿱_t‹ê­—ÞÍ”×h Zøš"h¢Ù!{5+Ä'NާŸ8=yïÉ)§ÚÉ e«ÀAÙ»@Eå\eŽX'Åó¼üçc&ët0o‘Çq[±ôBG×»DD¢˜Üõ ×­ßžíÁ@ÑQÛ¹}¥M`iÏQœv–ò…eeer*J9·Q%°”ÃÓÙ Ðuó·"gX|Ç^¾c¯ê­ÙÚûE·j ÅiÊ=¹šfÊWÊ£3 ¢d2©Í¥UóÍ`0˜«`|¶X'¥œØÙl¶¬ÅôÛŒÉ7'«›.]&%°ˆ’oü'ãÎçµIwC€"¢®ÀÊ'Oyy¶T”j§M`lâ®ÌF¹Ý™)‡Á–Ûªí¶uWñ‡sv¿âO¿‹€‰zON9§R)›Í&-bÓ–_e= ò”zÍ5X,›½æ_¿K¾99ÞriÓ[ÿƦbD$Ž÷ƹ/ﻳëí¯+lÄ €¥Îf‡š"hâÌ);¸3³T¥J*L`i/¥L–);Á+ÏT]Ü`‹ˆ\7ßÑI`Úcð:€¡Ù!‚€ šÚðÏŠ‚îÉ¥R)å3iꇃÁ ÔTNÛ+«`08±Â: ,åÑår9ÎÉÉIsto yGÕÉ— x÷÷ÖLàkÆìA³C-Aœ9¡Û•‚ ¨Fçl ¡ÛífFškJ(¤¤ª\˜2¥j SRR¢Ü`ȶj»ëÓÿW fÎHÅÏý¿ô`:÷Ÿ"›u&sC³C-A4;´áŸÝ“Sͤ´I*•êêꪭ­u»ÝY+°´¢Ñh"‘˜ÓNXÖ™‹('v§®®®½½ˆjkkGFFäIž ¹ê³”ÆV^[P‹ÿ÷ôù>j(âp ,m}Óô–f}•v ¡²KÚ÷G¾2ÏóR¿v%„¥¥¥Ê©6($"çGÿVõŽÉ·ÿGäˆHŒG„ÞÃìÒÚqÌ.´áŸÝ“Sͤ F0äyþÀuuuápØàûƒÁšš9ÜøÅ: ,åÝápTWWÛl6¯×»víÚ¶¶6y¾Èó|®–ßïïíí•®jØ8°ù³õÕ•.—KçM“/þ»‘0Ú-œ9È.Ý0k¿œKɸ0Ö›~̰lõ2ýÓg+ep ¡ò…N§S¹a®V2™ÌUœåp8´oªb[þ¡Ô¾§ÒoqjXfQÐ=9íŽÉÇ Q4íêêRîk¬ ,£”;éïëv»›››‰Èf³)X¹&m>ŸOÎm‰ÄômùÜò;³n!)ާö>)=NíƉÖta±ºÙ!‚f‡Z‚8CÂH'‰é´[µ„zw°([ËÈÈÚn¹–JJOý~¿òí¤–ö-TÙ1Q“ɤTÉŸ·—–mÅEÊ–ãÊ/æ} àchvˆ  ˆ…Þ“ÓÎU€²ï•r‘uEáþñ’b⢪WWWÏ`èyä_Lgª ,"ª¯¯¯ªª¢³ù,íi*Úfy—zÚ7ß¹òû¿/pȯ³CÍ´q†¦t‹¨-¸ƒ;M«Kê`¥}U8îììì:«££C~!Ã0‡C™À’ßW;É‘9 m+.Êü§ßÍ{>>†æ‡Z‚hvmmmó=Ó+ôžœj’ ŠbÖɉDZãy|â}ãχSõÄ´s¯ ¾ùÊÐ/'£¹^;sV®Àjll”ž*'y: ¬h4ªŠS,+))ÑySûæÃJÿ8øÓï‰Ü 㫟Öð`>Ô-‚¦6¥J_Á@‹çye;ά/!¢H$"íŒ,Qnëãp8†ÉZ¥“ÀÊ»’Q‹]~!±6x"úŽŠÑ ÆSž÷U3äÌzOÎ`y8ÙíöÒÒÒ½¯¿3ú”Hâaî%ÞÕÑS"‰DÔ>úšðëkØ?šÁØó°N–r*&U`IMhjVÖò~‰voȼ»E2嵶妟ˆBêÀ³ŒІX`kzX4uÆ’kZ¢sçSZXhkKwÛ°ú쀡coÞ—À¼+ôžœvþPVV–µï•Ãá÷í~DÊX‰$öDަÄô¤ÂÆØ7ù¯žþ¸ °NKùGWý­W`©Žè/!ä8®³³3´l[æâûŸ18ZPQÞ[3BÍ´q† íÍJ+×NûmRK¹#Í%°ˆÈ¶üC™w9µÇÈK8| Í´ Ð{rÚY‡×ë•æ*ÁØØÏöü}RÈÞˆà’š›kÜM…Œ´`ÖYBMDäǪ6íÓ®ÀÒI`IÙ+Žã¼å篑/ÞþRâ™ïåªýâO±ÕKóž¶ tww·¶¶Î÷(`úA³C-Aœ¡©õö-yÏŸÓ–êVœÝn—3P³Re¤ÙV\”|ã?Óï‚–øš"h¢Ù¡ ÿÌ)§4¬)vþJ¥²lˆ,ÄŸï8”d½ÈºŠËK7‘Ïç+l¸…0wKÞ çþ'>ïJ.©¾Y:®J`¬ÀŠD"ª#:K€Ôœ"RµJ¤§¢×ß5 HI™\iš¹ë%ˆ©®ÀÑ ª#b´§iXÒûf½E—«KFÖÕJì’uŒË+Æ#D$rñ'¾Å8=Ò¢Ñ(ÄÎÎ8‡ñû=þ%ŽŸe|‹Œœ …)üž\Ö¹Šræ ÿÚЯ£™Â®&ïÚ «®'b®nºkek‹Çáõ8Kg<ôüŠ.uçwÞzë­o¾ùæºuëôÏ ±ÉT$5!=I<À½tYí6›MÙ‚ŒU` ‚ ½•*å³v/S šÀD àÇz’oýFÿa¬G~ñÖvuuÇq555###ò†€Ç577û|¾d2©½Íf05eFxö%"‰øÀ@ìtôä`´““ªºaMEºÏædj<ó&IÙ*°æ"E6;Û¼…?¶;}µ'þ^þ KT¥9]=‘Ê©jr\rt¯€ IDAT»±s@M§ZyOŽ)­b¼ù룵“e)Hâ냿é‹—Ô¸›.­û”t›-•J±I§§ä\d¯¨X|ðñ“b6U^Cô{éé™ÉÃc¾þÅåêEžF*°b±XÖ‚¯h4ZVV¦=î÷ûÏœ9#½$Ô°qhã§kkk].W®¡ŠÃr ¡ÿx®Ó,,u6;DÐìA @sI}ÃÈY¼b±ô@Ê[ÉÙ+:;_ôù|Y{HiX‚ hgY{`½5òÄÉДmþö?¿Ä»ªÜQ}ˆ{mÿø òñßõÚ¯k½cSåUòin“µ/{®%„¹Îײ­¸HN`ÍáÌA²h C³C-A4»`0XQQ1ߣ˜"7ÜýK#gêA+ïÉi€EÙ& ÊÖ»§»#™,M}Ù²Ë+ï²1é®MÉdRšy£™+ºV¡šJÖÊE÷½°´òÏUç(X¹*°´ °$±X,kËãñÈSRÁæ¸øK+vìЧ89žI` "Q Æ:[@ξfÌ4;DÐÄ\„ÞîQ¼¼!ÿ9šªmÊ6ÿËzÛL»„0œâNO¾¯~­˜Ü=ü蚊mï¿8å¸úýÁ_¼éynKÅõK¼«Iw ¡T)Æ0ŒNw}Êg‹pæÀ¬_³Hàchvˆ  ˆf·`Û𧎼nð~›ñ"h# °H·ë@ॣ·åã ¾eŸiýúp߸êü/ÿòÀ#{zê+Ü5e®¯}d•‘7'°ü~?ÇqÊû¢DÔ=þÖÀ“›ø v[¦*>ëN=*¹úµç:>11¡|š·*SZÉ”U‹¡Q"¢DTëÁF„ç€Ðw¤ óãe™öL¹¦ +°ò&°¤—îÄ,gŽÄ»w ÷ˆ”¥B<~9úóVße[*¯ÕYB( Õåre]B˜õ|ÛêÎîÕÅbÃÃÃòS‡ÃQYY©WŠ %_ú‘ô˜·n fhaf¯H*OžmF`Q¶)„”9>±ç@àù`…«æ«×ý;74I¤N` NĸH’‹$ „þü*Co:=&.òù|ÍÍÍDTçn–ïyùŽÞ^»¢ìþoÝßÖÖI„öt¿ðÚЯÛÂ)NŽM[[›ü’¶¶6e¢JÙB«³3Óÿ¬½½= JU ,RLƒÁ`{{»òâéË.Z)”ú¸«Æ ?ÎuÕp\WÀp\WÈ{…TwæGcknpÞp¯ô¿áMwÈÅk¾Üz·xÍWF·Ü9YŸ™:«ö5&¢ÞÞ^ÊQ¥¼©&!kk|<3í;uêTŒŸ<1‘ÙàomÅŽ%ÞÌ­K9{Å2¶R{¥Ë6¥Kúaî¾èqžçEQxöÈ/^ú%/f¯´ÒîK#Ï[ôÿ’LEëöïºnÿî‰uwÄ®ÿšôØuûw­¸¹÷C_ÿÇÜüíòÏ=àºý»±ë¿vbÝòiï5~Tzà¾ë¢Ãþ¥‚C"7`ÞQ¸®€+à ¸®0ëW˜‹òäþ„ÓÈ´÷´‰ÄéÉ÷ß}R>Ræöõº|°ÿ¸ªåÖ>ñ‰Oüî¹×ä#Ÿ¼ášYüTýþæÃÃ0<û³çúLSoQ–{üþóN HòéÛ¤ 1uÞe×l¼åÊóoQ]äàÁƒò„²¾¾~ppPz\UUµ~ýzí›îß¿_ùOˆ.¼ðÂÒR½Öe±ß-¯"t}îßœ×ü™‘ßnhoo_°¹vk@Í´1»D4ôùR""†-ûÏIrêí”wøðá‘‘ù©ÃáPÍê.¸à‚²²²“'OJ™,¥ÊÊÊ 6(LLLìÛ·OušÇãÙºu«ôøÌ™3ï}è÷ªô´Ä^qsÓWã|äÉžâ”æÛkn]Q¶…uPŸýÀËGã…tjÌc+ýÔš{÷sÏìy‹ˆêÝ-WÖßå`3•Pëׯ¯ªªÚ½{·êþê’%KÎ;ï†f‡Z‚&5yO½’;®þ2ãÎÒÈH¢*‚fY¶¦¦&k´ã²»•e4Y‰¢øú믫xëÝÑgä»h.»ç¾ëØR“nߤm!Þ½/žžL¿ö;WŸßP>G‰&û\\ôÜ«s/»vÑv<Nen~NDDßUž&’8éüå[ÿ—ˆT9,e,¿ß/'°².!! ©æ-Ågë3ÓDqð¤þÉ MSSÓ|f4;DÐĬø¾£éì•ÔÊT7{Eš*zí—»Ôs¶–Fáã¡Lk‰µ¾,Ù<¶²‹ªoÚ5üˆ||ïÒe[ˆ¨Ä]öé þjóÒKÿéù?“rXQ~ò‡ïÎþŽƒ±Ž¾ªþón[‰tDê´›¸ç¢zy®ŒJìÒrK8s€¬˜ÀÂÇÐìA @Í®mA¶áýröŠqyÝwý€X[®“ùH¤Wq©´´tù…Nû­µß௼$?eöO¯øŽœ½""ŸÏ§êÚ>4‘)ô®+wO{0y™x ¡J½§åcK¾²¼l³‘“³çû£Gå§ãããri=Ã0•••ò´%÷D499©¤æm†:e !6"œjaî4a%ˆ Ù!‚€ f¥ìàÎ.Y“÷ü\›ºÈ¤‰ÁLX<ÏË·%ßë{)Χo•ye+ËÒÐ–Ò ËJÓMÞµT^+=v:D´zÑækÏÿLæ}Å)ï;ï}aà?Fãé±D"¡|G™Á&滹š…)Ù–fÊÓøîÙïôQ ð14;DÐD³[€Ù+šÚ’m\¯“½"M‘ͬ~¡‹{FŸžš½²ß¾ño74^¢7žŠ¥/â°±>¯ºýÂ,²HKúÿ)ëÞQóÉk›þxÃâí^g¦â®¶|Éšòm5®&†ÒMÖS|⇯~=ÇqÊ«E"yãBA´ÿ ´ °ÈHÖ¢LK ©Ì)ewvÉZ3‰ˆçù¬Í­”âñ8Çq“““YÞËXKÅT*•L&cñØ;=ÏÊÇ/\üa;“Ù‚fkÕMn[I•³agÝmtv#%°ˆèºuwÖ¹—åd 1ôû¾²ç_Û¹×¹ðX® s½ÜÕË$°Ø¥åÇBú¸¤)`±Ë6êœIÙXFê s‘¿Á‘ß5ü?G'Þ’ä`WÕßµqÉý+ ‡2s§ÚrWîífE–¶´´ Hëþ.YyÍÒ¥_à¾cäð‰¡ƒ+ë6¬¨[¿{×nžç»Â‡^úô’‘PÿOvû/®ü^ P®E18ùÁÈÈÈâÅ‹å8Žëïï׎!VýyÄÚHà‰H=CÉ9æ°¸¦T`-ÎS•·üŠˆB¡P(Ê:S4˜À"¢d29<<|jüàd"ÝúÀÁº.nºn°7Ó~Ëm+ÝQs›ßU¯ÌjÉ ,‡Ý±³öSOõ~?!¤g±­Õ;ÆÂƒýÑL.9¼oüùÃ'¿Öø`Ö1äýeuL£‹mZO +­èOбIÆ­×<`à[Úš6èœIÙV‰Åb1ý~Ü:¤/ô”˜xmð¿ú¢™…bNÖsõ¢»k\rqO.CÁL«®<ç~ij¢è*°˜³Tõù|¾óÏ?¿ªªŠÎVcÙXÛyu>²þ³çÕm`ˆ‘þèËJÖŸ_±M~Õþ3»þù…¿ 'ÔåT±XL9-ëíí•÷â8®³³3kÇ¿rÏáb«ÓEA:÷÷Z8”› €!‚f‡Z‚˜UAXFX‘HD¹Ûà”÷Ò$°†C}YÏÕi‹½+½¶rå9Ųl‰ÝwIÍÇ‰ÈÆØ?·í¾Ë—Ü~Uý]KKÖ©.Ò:ý?ïþ»v yXúÅhÓ¨Àb\%™~ ¢ ô´ëžnJøš"h¢Ù)7õ[8fR•õÍ]HrM]ˆ(•JERÏõÿX™½òÚʯoøR«‘²íȬ2¥VÅK`‰Ù|íòåˆÉú÷µÙÒ‹H/¬º~YÕùòñÃ}ï>ôÞ½ƒÑ)Kc±˜rZ‰Däû@ WìÜÉœÒkm°2æRg+AÍ´QKŒG„áÎô†U®åÏJN`õE'…ì÷¥tªôUIœSÃíßó/^Rõ¨J‰‰ÁÁÁX2Ü=™©[^¶9ïNR$°¤‰Í²’õ­¾Ë®mø“ËW<™L²Œý²º;.«½cUõ–É´Ïx³ë™žÈQÕ¥AÐ_qpúôé¬+%Ó¿EáX4uR>û…Ï;| Í´Ñì`~1O¥Ÿ0,»D}/JE›®ÒÞ“²W]géä°ú¹Îgû4ÏÜr+wT_¿øŸ3½¹pÞÖð„b aÙÜ.2+ºÖL”””444dýûÊ“B–lŸßúÍ O¦M{(xaàáhú_LYY™Û=?º±Ú`œ#Bÿ1儌˫¾4ÿK ‰¶áÇ÷^PþH®×–YeÞnê}(¼òlÿƒÉQ"ꋜx¾ÿ?~ÛóÏɱÎp{JLÏJ핵î¥%°X6=…ÛRym«Iê«ED 1ËJ[o9ÿ+·4Þ[jO—t‰$î~t2¥ž¹êL]ÀÈÈÈ|kÊ; ,šº,B¹\@b–6ü뛌ÎÌLW­Ì»¾^»„P›ÒRUÞp'å(uÿ÷7¿ªœ!T¹_ßpO©Ý/É¿„P‘Àšë ,‹ôÀ’-[¶,ëßW®À"¢rgå·?ö«_ÿ»cû¥#"‰m#ß´ä/]6ïòå˧÷ïÏHófJXsH¹~Y|¾Î™)uˆ{5ʇŽßj)Ý(Ï»ÝnQå%uv»]®?r¹\òqeë`Ï[Çß—Æ{žîýA™£2”޼8ð°ËV"Ÿ¼¢lCÙKÈUä÷bÆf³e¯N-§²Ûí^{ù¥µŸ~nàÇ‚ÈQBˆî~了/ÉÚQ2™ôx<Úwá8îÔ©S‚ D"‘®®.Žãš››UfO³k©Å+°À¼„ÞRïÿÞÈ™Ñh” bgÓFœÇÃøýY¿RUغöݬ~ßîC™–æi€%m.¬:¨Miôë·ÿ%žÊTo5–œ¿³æv›i¾É0LÞÖÔ ,$° !ß™TQþÑyž¯ôÖÜ{Ý·ÿágþ\" §¸wFŸ¾qåý~?Ã0£££rÙ¼ÍfóûÓ H¿ßß××'ßut»Ýò¿CXõH`e×ÖÖ†r_SCÍ´ËQy“Ðï÷«ò&QvpW4å©¿"ŠF£¡äØÁ6"IÜ3þäõõ_f›´WLÖDUCCCWW—Ôî@ê{À0Œ( íý¡òÊ)1!g¯ˆh2ÅÉw;bZJ7ÓÔ›m¹LNNÖÕ¥KúY–•§°‰DBn¹`³Ù¤z±wÓfÿ‡÷ާ;m ÇÎ ¶­­Èì%”kꔋ¥ˆL/¥Šf…b !ß}ˆ^§pÓ±ÌÇpÁB-A„iK}ðjü‘ûŒœÉUiæÙÆX°žûž··^­<Æw½/?¶--¸e[Bh¤ÓÞ®×Neª¡W—_|QõÊ]d`ý ÛXVK`墜Js,–aoÞòE^HýáÐ/¥ã“ï÷Æl¢M>Ÿ¯©©éÈ‘#òkåI›Ïçs8ò„¯±±ñÔ©SÒ?ŽT*%‚\ÒŸÛ \BˆXøš1;DÐìA (æ C§Rï>aäÌéßÒ\ºÑ¾þÃê÷UT`9kjt¯‹Åxžwì÷‚˜NÍŒFûÚ¹7¶5ÞXWW7>>ž¹¬ ÄøðX¼/.DãÁÁ“Áãr7•¬ñØÊA°ÙloŸ~¡güTŽ÷Q«v5–;ªˆÈf³±,«³D‘+¥óå ‰²áºÝn÷ûý===<ϯõíŠwö„Ó °ö¿°Ø³Ê笉wÇùȪDž¦`:Tɯ¬í´¤åÊpš››íubpˆˆ(?úM¦${‚Òqɧyëó(æ!Z‚hvó˜‚C£sÿBìÁÏ–|ç}ÆW/º3Y$¶ð-‰(‘H¨r%%%ÊX–•‹r$¼zlïä§%ço­¾I{e#ý †P5ë”wåë[þäÝ“¯ŽD{¥§8ñ³”3¼µåšÚêÆ¬ç+WQ]]]ww·|$‘Hè÷Ïb«E‡›IƈH r}¾ÅÍ3úÅŠäõ9¿¥i³{¾ükûÅ·) ½™Vл( êtÖˆD"}‘ªf燸W·¯¾ŽˆTßï»Gí‹'"Ny{ôÉZwSèP׺%úíþÿϬv5ÃI1ND 1Î.1¬¼ÔŠò-Ò–eó&°¦üÆŠ›sª–Ïç+// 1—Tßüdô_ãB„ˆx1µkø;ëŽ!¢w_yzçêv®¼¡®|JªÈÈz@#XYpÔ/ݘ:”î/–xú»¹®Ïø;¶&ï0Àbæ1)NŒœ‹wá£?¼ÃûµÓ5ȯܖצ(UÎZ“žµKÅX,æõfjÍUeÝ‚ (JD¯{r0Ø-=fvKåuYGk¤kxJ¬¹mâ¾PXÊø)§\6ƾ£ö¶'»¿/Ýn&'Ÿ|ÿ§O¾ÿÓeÕ«/)¿ÍI"!™LJ‘› OÈS4ÇYò¬1™Lê'°¸àDªb‰k4}Wvò¿¿É4žgäÆ29®þÓ¼íÜŠ0zfÎ߃OEôQ&‡•ˆ Ãgwfؘ¯éĉçwžÏçË:#œ ‡ÞWw¾àÅÔó§~¾eÍÅÊï÷žðÑtöj q8væ‰ý=±ÿ!ù±_Z{;½5úD}ES³ã‚R»ïµ¡_Ëi2–±7—¬OŸl³i븕®|>Ÿòö©N‹ˆJKK¥ßÑc+½¨ú¦]ÃH?O ÈgNÄÇð8øËËÏÿÄ]—|U>.w¬—©f½4Ý&î$µÁ:ôBÞÓ”Ë?Îq"s‡É~áÇ•ýTâñøÐÐüÔápTVVº\zÅGÊjtþƒWc}Žm\GDb˜ãé€LEã[$=ÎZÅìóù²&°ˆ(‰(¿¬Ãá°ê„`0Xs¶=š ?uà'òV”]àsÔJ¿ˆêûÝРb a9*°fƒª–ü8—Ûj6û¯‘;DHºF9’¿ßVu«ô4‘H8Ž7O=÷ß{~°©üÃÍ¥èlUž²ëVÞ>î@ÀV¾XN`Uìû í3vc™ˆ]¼Æ¾ùcçšþ]q(~ˆ Ù!‚PÌAGºÎÅÛð©è>ãìzŸ)õ“tõìž>ñ²zÁîšœœìè設­QÍ+*Ê_:þßrmCŒHéæ'GÞ÷ø'[*×9Ãþ¥¥ëDÞÿƒÁ­­Ú^æ¨$¢/ú‚×ë•ZT\VwÇ+ƒ¿èž$¢Fïj'›¾511¡½‚Çã©®®–«:‚)Xʈ4çQN£[J7œ ·Ÿ Î:H‘Ä׎ýîŠÕŸh¬\!ÑNŽÏœ9‰Däð<¯j®QH+Ïâ‰rù§‰óÇŒ@-A„iSV`9?üç¶5—ç:ÓEt`×.ù»oÅŠåù–½ |ä¯á?xUz–lûµö”DíªÎÎN"òûýY«˜}>Ÿr ¡²%·ê»[›Àš˜˜X#¡þ{徉húNžÓæÚè»J¾ *•w !/ˆãáôK†ª±„pVäªÀ’&‹ë|;¸äPgø/d¢u2¸¯Ù»±Ás%‰ÞЉŸµ}'Å'Þˆ=r"ôîÖª›—,¦©)I#}ÜcåK¦÷+ðí/Y8ÕÝÝÝÚÚ:ߣ€éCÍ´€b¢ H`9¶ÝÁTæü*ŒÇãcccò75Ã0µµµú·4)N¼òñ)"">•xæ{ÚS¢þeÒƒ`0È0ŒrF8=Ù·§ï¹áP¯|𢥎ð‡zß’ž»¥2û%“«ýÎú‰dºG†µm?ï£Á±PoèäX¼WÎyIÜïæª«éìÔ@n°jcìWÔßùòÐÏ#ËK7ËçƒAm')—ËÕÜœ½Û€²\K[¥ú£]\ýñ¡XWŒO·fgˆa;/¦'ŠÂûúÊÕÿLD¢(jwÚ‡ÃápX¾ý«ðˆ¢¨íªêûîõzý~¿½b‡ó†{³þFbx<ùêÃÒc“V`óÇŒ@-A4»yí•I`1eú3§ì袿 +µyþô¿Â_ß$rƒ¹Nó.îíê""Žãr]S™¨òûýéÂjUo¬ÉÉI‘Äýã/T8j{WzleÁ`P…÷»wÿt÷?„ã™{f«¯ôÚË¥Ç.—+ )¯“·k$ÎÞÓª*qÚYu÷ìZ( ¬\Xgïv2Ûknýä–?æ;ž9øó¡‰é§o>yÓ’¯ØGßxçÞ¾7ŧooDO?ÕûýqçMËWüMAXD«˜f+uèŹMfÎ+|͘"hvˆ s• ,ç-ßbëVä:ÓE4|êToOú‹Øãñ¬Øº5ïõm«¶Gô™t+›¨oiÖã"‰Ïö?4ïUt²žkV~º¢²ü¿½=–œr?³7r¬7rL~zñ²ëîÞþõ½{÷†B¡p*Ø9qž9I„ˆèºÖ;œO‚²Ì ìŒóã+þìéS-)™ÒFÝãñ¨n™êÜùÔ_B¨J`¹m%[«oz}è¿l¬£¥dÃÚŠ%vÿ™ä¶¾ßJ'¼ß½ûôðáåµë8ŽËÚ‘·³žÀó¼*¥j’PUUåóùˆ|®Ûs´¾JD“¯ýTª›†;)%§¡6 Å£˜?†`"h¢ÙI,¦\/%‚²Ù`2ã«÷üéEþñ²Ÿ©Z.=à8.ë.Ì‚ È9†a” ,åF„¢(F£Ñ®ÉCíÜëDÄãw-ª®ùÙÑ3¡§¼àb_s«ÿ2>‘NÆioæM` ÃX´pXY+°8ŽÍl4P[¹h•Í’Êåß~únAˆ(”;xiEéϼûÿ”IJ"ˆ£ã··mgíòÁ¼X~¿|éƒn—ÔÕÕéßXN<û¯Ä'‰H8.Œv³ÕMyY€"’Jˆþôc†e«ò|‘å©·ÊÆ~ñm"–\ESg™½‘cªì³¥êZ&å¨.]t÷öo¼täÑŽ‘#¼å².Ö{Ë÷ÐÙJ¨{Ūò­›6m*¯(ï=z´ïUkn}ï}¹Æì²{¯®ÿÖu"ý+¯.¹¤¯êXçXz±ÞãûüÒeß~æÀ¯ºFŽ_PyÇVf·Û³æª²NxxžWMs•£"#;9=lm‹0tŠˆHø¾£¶æÍy^0+ø”8yvÇa†eJµ›Êd¨v\)`–µW¸¿ôs¡G½¨? ƒÁÉúLúÕív3 #§ÉœN§ßïÅbò—Ë¥ÜjpbbBN{E"‘$ß;þœô#‘Äñxÿx¼Ÿ¦º`Ùå_Øù¿÷îÙÏ“ ¿©êœ¼ßÝç²-œ–¶‹ã¸ŽŽå Lúg×\}þ•kn}éƒÿ‘ævævåºìËGóÙëKi±ôTΆfíKD>ŸÏµdu¯ë òZvîÔ™›òmþXz|û‹ìålä÷(ÂX·Ü‹Šñ7Ý©¾2Ád¼³’ýâÛ<îþX›êx<UΕ·L^•³dk)Û¸®âRŸ³Vêb~QËÕµ\OEOúÝþ‡O ·+¯|AÍuþ²jššueØå5k—׬U¿¢¢" J}>ŸÔ‡B^Ì(5h×®Ý3X¥íåt:•_ÉyexleòÓT*µ¥òZ9u¤ïWù¨t¯/rb[ÍÍ›—îɲ%S® ,ÕÕr#Ø%kÒ ,"¡ïXpnˆ“c™éJi%ÙôR%ªŒ•ñé eÝc7ÜÙ)-”¹Ýn–eå+;NŸÏ766¦_8nç^§¦[)ÙXÛ-|ùºÖ;b”ßéÓ¨ÀenVÕÎ}K}£Ïª”ó?)B@@žGJäæ©·lùReImÖë¬(ÛrYݧ•“¿ß~h$žÞ~Rš™Iût¥Ü;@Kus2ËÈ[¯ÎŒ¼ý%ý“Í«­MýŸ`.ˆ Ù!‚P´ATvpgk–å=_9),hFhßôQ×íß^w_ÿÖ/Jÿ‹^w_ùçà®ø«DY½|ÚädºTôäH<½V‘!æúÅ÷l¯¹ÕçTO\vϺÅ}ý#}¨áZælÁ”ßYÁâtÇSUKùXα,ÛÒÒ²ì¬æææ%K–477+ø|>Uã 2\¥|_i®É0Œ²ËLµD±”¯]Z~~æ:gçî1~ò•Á_´ =ÎØ3)0Ç#mƒ˜5¥Íj©&9†X‹×dcÂ>îEû1ƒA @ÍNõéçŒr B¦<{6@f<•kU¾ŠßïWN'¼^¯ÏçS^VúJ—Øl6åßJ$ñ¹S?ûIÛßwŽíëÊU…ãu–]¼üÚû®ðúÖÏ0Ä(weaYV›®Ê¿„0¨XBXŽ%„³D9ÉË;v;¼Ÿ¹øo~ð²ºÃèy5..ýËØÊ5Ïõ?”âDÄ É׆~}}Ã=¥v¿”͵_€ôTÕ'+‹i·¦ž2òõ×Ðc—yûK$ðÄêUl™Ô<.u†Yš"hEDa ,ã5ù’¬{N«ê€d‡¯É›J×T»ÒM*Ýn·”¦Q²±öxR½- IDATkW~¶L¨ky4ÎG/ª¾±¼,Ýñ4W"I9ß°Ùl>ŸOÕÏ"ëåÜ”t+°´ë U/q¹\ªÃ0ÚWµ–]Ñ=qLÕ^òv×s]eǯ®¾›eìDTVV& x+°” ,öq/Ú!„Z‚hvóÕ†ßx,2¼„P„3gÎ,_¾<ï»û|>©ú[â÷ûKKK•'$“ÉÑÑQeYt8Vf—ö=w"ô…¨ý©·¼Ž²ÔÙ}ZJ¾kë¿4ïæË<ËWÖolin‘§Ê/t»Ý®½m† ¬ù¡­ÀÒ·eée;WÜTåZ\î¨öÚÊ]6oƒoÙ'×ý5ËØˆ¨Ò¹è£+ÿX¾ IM<Û÷ —223SM%óV`Ùš·ÈëoÅp€ïÜŸ÷-Ї0zF~ÌH`)ó ÒÞvÆßK{ill,ëWíP¬k0Ö!?½°öZùñ’%KruNmôžÃâ¿Øè¿ªÞÝ"7žÈU¥J`ÿ´{`)Éi#íB€¬/©v56•dÒFÎZi¶#u¼;öé±üÛåê¥:2 ¬%kåÇB¯ù*°`†æ« ÿÔ ¬ÂX¹Jd¢Ñh__Ÿ‘¯?Q•ÉÚƒrddDùÅzlìÝ£C{â‰èƒàîÃÁLÉU$™)è¾lé­¥vß²’õýWÕ¹›ƒ\PÙ¯@õ¦ÚÛfz`)+°Ðk–h+°ü~¿\%WÅË>³õoÞÒûg;ÎmÛ¶;–ÙxhKÓå)Wø™ƒ?—žFø‰gûº†î&ºX$ª ¬¼ ,bm¶µW¤ö<–|û‹¶åæy @ј²„°:ûn€JÚIa®R##r}Ïâ2ݯ{W–1µR =Ã0‹-Òž/w·,µû7ú¯"E/­9M`ì¥444$•JemÅê÷ûÇÇÇå¶ ’þ«¢Í%ëW–_XåZ2ïÛ5ò?ÁDz*lâíZ÷²–Ò òGsXÕ°šöìF„b<¸ô Õf…0¥+ÏBÕW^®V,ãy¾§§§¥¥Eÿ‚ª/ÖT*¥ýÒTéž|cèqHtÙ¼µ®¥Ê-’•j\›—\Þ}¦ÛÈûfM`Ø…0ó] ¬Yò¬<)AŸÏ§\»W__¯ºÝª U2™EQ¹3eIIÉÍ[¾xñòËGBôù¾‡÷¾ë÷û•—¶·”§R)Õ¼<׺%ý6XÒr ‰N³­"×ÞÞžÿ$(bˆ Ù!‚P´A,t ¡ÁI¡ArÇ+¥ã¡=}‘òÓõ¾+äl”ÇãÉš3 ªîQò7ø,&°´?¦Q …¤\›¶Ën·û|¾åË—/[¶¬¬,ÓÐÓï¬ÿÔÒo^\óñ*×"ªr-þHÃ=eŽÌLoþ6˜‰F£Ò*W–jN2 ,Æåek›ÓODA8ž÷%E¥h?†`"h"LÏ\,!”ÚtwwŸ>}Zÿ?Õµ ,í½"9JŽ¿1ôˆ´ö?ÎGz"Gå>v›²ý%³}ÑÍ,£Îù‚ }_:t¨§§G>n³ÙTS –eóN`†'ÐknØl6ù–t;W¹Ê´¢¢Bu¾ÔÃLšl‰¢866¦l­ZRRÂ0ì/ýV‰«üå#éò¨”˜øþ+ÿ믯ùWå¦?¢(Ê« TåWd¤‹È¶>“&ãO¼•xú»tväÑh” bѨô”óx¿ßãñä½&Ù7~„m\gäÌs ©)Ï®êPäA³C- hƒ¨L`YB8í­©‰Èï÷ŒŒ(3MÊ›O’¡Xמѧå§uîæ:wfTÊ´Ž>y1‹ ¬ÒÒRÕÄ`=°dYXt¶÷–ßïWÞúR.$"'ë¹aÅ—=þO)!IDI!þ|ÿ·T^waôBžI|0òNרÑõ¾ËݶÌÞápxxxX¾` Pe¬xž!ï°Ù%k…¡ÓÒc¡÷Û²Múç•¢ý‚Aˆ  ˆf×ÖÖ6/ÌÄШü˜)«Ö?ÙÈBŽã¤–U¢(vwwOLLH¶d½ *]•L&µ ,éÎYJL¼:ô˸ žÞËØo[ó7ɨ°oðÅÎÉCËË6U»‡rd"šœœ ƒÚ{fR,åÆy×Ñ2U%„³Çn·Ë©T*%'§$YKãœN§|NGG‡üÏ”a˜h4êr¹†½óâ¿ G÷ þ^úQ"{àÅ¿ÞY}{­»ÙÁ¦ÓŸápXú—ªM`©Àb«›ØE«Ò7!ùdü¿¿–ùQ•æüü)±ô¯çuMK›@sAÍ´€" b*!úÓ–­lÌûŠ™T`ù|¾ÚÚÚÎÎNùˆò–…SÜkC¿Äô5¬ëâê)O(//7þv’YL`iýM£K¦ßËçó577KµZÒlÄívˈÈï÷;+ùŸ¿ù]éü(?Ù6òء߽Ф;½}Ñ×Ôß]bOÏÅÃá°òörÖm¤’ɤvT*ìâ5´/a4ÝF„Eú1ÃA @Ín¾Úð‹Á!ù1[à.„Yo¶åM)ÕÞn*ª[>Y+°DQIl~<Ô^!fgÍme|]Lˆí¨½mKÕu,Ù’Éd2™liiQÞ²Rm#“ÒU6›M~ë¼ëE‘F”MÜËÀš=Ú6XÊ%Y“‹N§S¾‹«¼+Š¢òßöÆ›Äóîè3ÒÓx*öÒà‘±ûœõWÕ.‰äJ`©À""ûúk³]E¯Ì1Ìa¬[êgDDŒ¿ùg6Æ·¦ÎJ'?R^QþÌ‘‹ñé/t†a·×|Òç¬Sž“«Ëï÷s'Oþ¤ &éq±õÀ’Ç–«Kyf®™´ärßÇxûôóò‘‰XfÖL ?ÛÿàÕ‹þÈç¨%cµr†XSú¸›o#B0£)X³ÔÄÝ8#K‰èøÄ;]áCòÓ­-W_ºêcïœzqOÇË›üW/+m•ëc¼¶Ì 9ŸÏ·~ýú·ß~[-¿4¯PöÏ›Àâ"ÉD*ý§(sÛ=NC³™X@ ,íF„F*°Œ\YÅ5åÛß;þ¬ò8/¦Æâ½/ <¼¸¡¡¡¡²¥«xžO¥Rykól­WÓ ÿfd0Æ!sM,°if-!Ô¾\æñx¢ž‘±xŸ|äúµŸ­‰¬VžÃ0Œj×j™²^‰ˆü~¿œúQf”ï>/»644ÔÕÕIcs¹\Ê…dl-€Êíø†‡*vuüVÞ[)œ >×÷ÐU‹>_ãj4˜ÀÊ{»8³%"6"€scê.„…U`L`é|QYB(0Ù‚¦©jåíø¦Óî^ÓpÁZבHTç­m6[yyùØØ˜Î9Ò;*gù· Ttp? °hA%°”‘H¥RR#éi®ædFXÇIÅYë|;Eö?¯>!1ô«ƒßiiùi™Û§­À"¢X,–kºœüšË7Ü«=ÇÇÆÆ”ÿ¸ëêêtîm ÇS{Ÿ”Uk¾–:ÃlAÍ´€â b¡ÜiÆw5sÍKKKŸíú/ù馦·|è‹»wíVž_RR¢“0ÊU¯4‹XÊ^ªy_¨ýQIIɪU«ä§ Ã8NåÍ3ƒÃPrØœm½ËŸXúîØ3=‘£DÄ0l‰­|2•.F‹ ‘ú¾¬îŽVÿÖ¼W3’À²->_¹!%¢äÌ4÷”·ƒ¤©iÄ"QœC0´ÑìÚÛÛ[[[ÏýûÎz,íãg-ªÊú£¬»v„DùtWn·Ãó—Wý“ÓžÎUW×twgÙjÐ[V!Œ—––ê'°‚Á ÇqÊFáª> ZÊîç` BZP ,eúçù¼åW”;UVV&ÿ;P.mmõ]ÆÛnò¡æÏÞ«‰ôþÓó~ßu?ÌšÀŠÇãyXŒ»ÔuûwµÇ]DýÇŽ ÈG–_z©N{TþðËÅ™ÀÂ׌Ù!‚f‡Z@qQ=#?6ÒÁf¼ a®ó£LðHÿ{òÓOlþ–a½^¯r›BãÜ•”Y¡X,&wàšFæhÙ²eÊW)ç‘*Ú¯ûúúzÕ—Ë¥Æ4*°ˆÈëõ–9*¯¬¿«/z\d„vÜöþ{ß}úØÄÛÒ RCYÖ%4ØÎ׿”‘9=lmsº»(Äû;y)ÇŒö®Ù|#»8Ïðf®8?†`"h¢ÙÍO~>%Nž]#ϰL©¶ÑôFz`i“ ƒƒƒ‡£²²R{÷E•ÀEQµxK$ñƒànù鎕7V—.’ŸjKXœN'SZ}ãOOÆS}+êJVÔ–V9“ÉÈ”ܪ2m¢XÙ±ÃápXþuìö¡Ú“u¾gôOÈ‘ÀšeÊm(’w¤X Ã,_¾<׿u¾ë|;‰HS¯ ýª/’n\Õ=vâ§»ÿáÒš;´/1Ø+Õü5•JéŽ)sÉE•ÀK𲄰z©‘—̰+×ùï½*o2½ª~cSÕJÒ|ÑO/¥ü"…BroTålrzKõóMªk2 SWW§:G5£F¹Ýn–eAXìYED¬à b¶Vßä¶•¼,#ˆüKg~yAÕõk+vè\ÊP‹ˆ]¼FÞˆ0ñ‡ÉŸÁÞ5Œ§ü$°`†æ¥ ¿Í´ì,­$[ž<‰‘›mÚíÚA8sæL0ÔnG¨ý~ŒF§, 윔{·³ ûᵟRþT[(SQYýG÷‡D´¯‹Û×Å‘!Úuˆ!c/¤ú¹ß‚N‹ã¸P(ó§QNé J`)û¶ê`ûuw¾2øóþè)éȾ3oø„ÆF‡zã?#êPý[O&“FX#3y_€¼f¾„pVz`%…ØÞÞ—å§W­¹•ˆ8Ž;Ð|³+ó-\34P^žÙ³å£ê×.ο)¡2ë¤üRžF–*¥ÿ*åÄF:YÚ"YyPõtzX Ãx<y7›‰‰ôíÖþ«<ö²wFž”2ƒ"‰ï=Ûà9ÏïT‚ÉŒ&°–¬¥ýÏLc¨:„À@þ“`A*¨ƒ;›«¨2P²¬ÛjWª²wÉ·,½¼¦¬AùSm½öß=7ðnG ûèçFÍÜoAHVJ`%R‚ÓžséœjËX,¦ÜÝ9×|.k&HµÁ¶j["%·ÓsEý]Ï÷ÿÇh<ÝÒbwÿ7.^RjŸòu†Xªl«ÎÂZÒV`‰"å^›p.a±ºÙ!‚f‡Z@qQ™À2²„PʍÀ:ÚO¥'‚~oÍ–¥—Q xçLøáýÊùå”þ%.[¡ ¬\ &°NŸ>­|ªŸoRÍ=R©”vB<+ ,"òz½Úm¨¹ÔÍ–ìþo^”¦âÞ±ç®^ôù\×1^5½qê¹s‘À*Î!‡Z‚ÓPPwÊ–ÀEQ•EÊ•ÀÊ*KËvÅ[ƒÑÌ aGóÚ+ôLðmÝé/Ùþð‡“3J2Lš¸ç÷Ì^uÏå-ÿò©š½)ÿAT¥ªi”¶%ïïïWMË|>_r$¹£ö“O÷þ@ꇕà£mÃ^Ûð¢Ì?î&°´Xzg;ÜŒ»TŒMñI1:Áxç¡DS _3f‡š"hÅÄTB ô§3,[•¿«…öæÌ›¸ ¢ wk"¢+Îÿ„MÏ¢z7}h$”¥s¥Ö,&°V®\yôèÑB_¥c¶XÊþÊ–Ûí^Z²ngíí¯ ýJ:Ò=>í¨÷´d½ŽÁ–mõŽ\{× Ë ;ìv{UU•ÞÞ5çS{—‹Ü ‘·ž¡büB!A @Ín^RÊÅIy;¸SŽéÊää¤r›‘‚Z锡$„hÛÈcr„:÷²rFÝ1Àï÷:Þ?¡y5­i(ÿá:G##áDJ=ìx<‹ÅÂáp*•ªªª²ÛíÇÉ —Ëåóùt¾g•¶—§qج0w‹‹$_;:BDÑß( ÁIS'ĹX‡CÓØL]Eg·%J¥R}}}¤Qᨹ°êúwFŸ’žÆ:ŽßZS±M>a†K ªÀ""¦¬:À"C£E’Àëƺ3%ü dÏr[Hµ©œ×ëU_dÆK?îšH¦—ØmÎËV}\þQ$©·½Îð„¡/èYL`ÔË·{ÊíÐH$2½mû”qQÞR–&µKKÖÖ{Z£éöó{ÇŸûÈâ/3”¥ÄÛhVͲ\{×yçy‹-*_½Zç:ü©w ,,!0yIA Ê ¬ uz(ËùšÉ Çq===rq4Çq‘HDþ©Ýn—ÿ;Ýãñh[åú~LÑ~2ÏäÖVìÔžæóù’Ž2"õ&ƒþÇ“±õ¼ºÒËtd2¹wïÞÍ›7º\®ÿŸ½7s£ºòþOUiߺ¤VïíîV·íö¾m¼›Í0H€! Y&3™dæ?™ ³d&ÉlÌ3™¾¶®vWÇÏø¤=X ì}×~=ʲ,¥5¡ö:ŸÝÔú…Úß9;v,|µ”2°Ä¹øñß¹àÿáÞN€ ™ñÈbéúå­®G?¹\ŸÛK4W¶¸V«e†ã8§~N³yIO09Ñ:èÞÉj«Y] X,–°ðø*>ÍÖE €èoÂs@O·*Sžâ¹ …A"X  ÷À¢ó÷ÀÊza0X–EVV‰Ä@øÜ®¡ÿ•Sgl»©ö3,kÏÚSnÀ›ºSß¿¦±ÅiZÙÌÞ²D9›L¤T®å)W1ƒg` z#¼ WPYY‰lÕ‰ž÷$#`Ifœ™õƒI~Ífs8H–21¶-÷¡Gû'/œ@»'aeöËT•5EñX½½½ÊƒE ‰`©C"XOùÓ™Õ8¸Cz~ˆŒ€%&põL!&sá3ȳ½þ‹h÷ÁõƒÒ¯D¢|ªÌ­Æa€j[ÊèatòJ Xããi÷eųD Ëår‘›)ò“wº7ÿÇ»½îP®¹>c,Cor•ãšJnÞƒ?º< àÓ9ŽË·&Tþ}Pœó€VO™§"Î%®À´§x.CBa–$ˆ¥Îž={®ü‹æë•99ÉœÀ n#•ùÛŸã¸(Ú;ú{™WtÙ~Í?µ¹æ¹\®¬R¸¥Ò÷·?rï’û×4Ê`E»¥=¥‰õ¢‚ °,ÛÝÝ¿ Ïóë÷¼ù~” @‚½5ò«ZCëêÊÛ=žF§SYèÍdºX©Í@ ÓÏÀÒÞðEÊì¦=Ë|Ôn· ¡™Ã0‹Ô©¡`¬ƒîWã\ò.i5Ø\÷·™ƒÓ,-8ÌZ M%x|áx,ÁërÖ¡·­ø®€ÃáP–—âxŸ%O™õš¯Þ˜êFsµâèŸï¹0Þ75åľõB*vµúÏlHÊŽv»}bbï?( q„ÕŽÛ9ž;?™Ì1@8êÙeÒT,®\ÆLGÀ’|Ô$Rö:˜úBòÞaZ•ŽJ „ÙÅô=°dŒF£$K´üÇz÷\œ<ŒvŒíõ¦¹Ú*šb´”ÞÎ:¶¬Ù¦cänhÂNÞõÚi)ð>[ü”¾€å0ŸÚve)Eäš0É”"úýYV€¸ë".`‰PÕØ˜=[ÏÈXW;¶ï{Žt½2ð˜?1ß"ö#$†B!­V›ë–M !@ Ê!âG»“;mxðQÐå4Å$¯hµZä/Ž(LÀw‰õk"¬ýº¤xP$MÝ4-hŠrZõþŒMF ÎÕd`y½Þ,•X¯KÙjܼ¸ú‘{—H^Z¦7ÿÌϽ|4‹1ÇùáÚfY¶­­mlllppP2kǧà4¥Y_uO¥¾aÿøË<$·oìE§¹ÎN'íù3U'õ $_5X4[‡Î! Á7‚¶©ŠB<°dLŒF#MÓZ­V¼ ‚Ç‘àå ?}ð¿Ñ`»®öƺiH­`ÕTÔÈ«W^?Ø`7RYú— ¥íù4"„EQj&ˆY¬?º”Û0"+s­×,¬XGQøÿ¼ðþÈsG{ööôôtvvJª!Ο?äȼINÙ”^•Rg B"Xê–ED~ð,É;&]Ý*£^‰HR•3å*Ën·ã‚MÓ‚ &v ãmU‹×Ͻ5ë3df`ÄKE!EQ”ÒTQq€^?ª¬ÇRõƒw¬¨•<Š|²²ºf°&íK±îß>¶˜¡¥ï°Äç™7o^}}½dX¦~·È¾þ–ú/2Tòÿ“îþÿŒ'“¾%•¬Ff¹>i!XlÚ¾V‘\†„‚!,HKŸÏw¥_’ç„àÔ­‡¢)K¥òùXbý ®EˆeaFNüh÷?üÍs÷ø#ÉRwšb6V߇«W n2^?¨0õ*iJ_ÀrLWÀÒh4¹¦•ø2`Ÿ?5gm2€ã…'vwåz¹\«ˆk+ïúÓ•ÿRoœ‡ŽðÀ½=ò¤;:à÷ûÑ"¤8¥óx<¡P(×”®l2°®J©3a!,uHË€" "n€E7.RÌóx{»¬ß2X,ËâiM4M‹½VÎûND“) >qÝ_QýF?–z`@•õ²ø¸«aõêÕø®šÂa_ä`wræ@SÔmˤ–"¿½ýolüæmó?·1Ubwnx2spUUÞЦ¢¢"sr¥ÓéÚkWl®¾ý·‡û¾ÿöÈ“½¡S‘hÚÊ_V#³\oU"` ‚ ˜ G±©ÿÁsÙ¬"¹ C"X –:WÞ†_ð¡µ7ÊâPÓ¯6ß ,H×"¢Ñèë§~û¯;¾x ûMŽOÝÈ–±[+uÒ…"5Ö€'5›*c,( ÏÀš(DÀ’©-[ZZšš›©¶ÿpÇ´ýÓw»ƒÑìš‘xzmm–©d½Íµ­îO7UÝSs»8}sø—“ñTl5SºÌµÇ°PàXtãbùÁ‘HïÚÃq\æ]L^¡ÀguÇqåÂG=o ƒ×µm›[ÝЗ„`,ùr4E™õÉ kMžX $`±,›µãµâ󨙳î<>Œº0¯iµ×V8m½aaÕ#÷.ùÞŸ¤þ¯.Ž3û;‹µ„sæÌÑjµEµ¶¶fV}F—˵eñö­®£ƒí ,5Šæ…‘” ÄüZ«QÇ|as˾z^<ò_<ïd\àó›šNçä¤4ßåry<žÚHmTs¿%ôÆFæQ—ëºßÚyôI£P±¾êüŒCCC4M㕉Y‰„Ì”—²8€¢Å$I!èžS“$y¹éèè -oKÁR‡D° (’ ¦e`) X¡ÔG2saF,ïk™nß’û੃üÑîíË>í0çl†`Y ©ÉÀŒ”êt:—Ë%VÏxèÙ©5°p8<<<Œ voŸ•iË-òæéÔ´{ûŠ:™‘*i¯µ~p1éWu~8Ð\™}!W§Ó‰ß·¬–¸Aõ§›þ±ÑÞöîÙWÆ©OúûÃ?^ãºÉ 5€Ýn¿téJÄ3™L2Ùje`a%„—ß«H.CBÁ–$ˆ³~äbâÀïÕŒ ‡Ã^'2µ~æ5)»]ïN™©iAùd`!Ýj(Øå‰ [µŽ‹“‡/ùΠŸ^÷7MÚeý¹^K] aJ ©gËÙ«ô,,kÀ±IÕétE éùðjMÜ¢½ÖÝÐú½×.p¼ç‡?w2×¹­Uæk*Ó¾ß<Ï{<´[[÷7íò\ô'}[/ŽŸøêÓ·&¦:F.m¬¾¯Þ8âñxOO×ëEçf½NTÓ e¶ 7€À •2óe¥©©éj¿´ ,uHË€b¢¤!]¿@vx– ¬¬÷5žç†—LQq½x7L$œ (Š&!ÄŸ=ò#’wùJCÝöeʼúd$¥}X1 ÏÀ+4K¦6â³c2óè–}4¦JÓò9êÇ碽ւ¬sÓ7/ÎYL!JW2èýË?»aλöÿᡟ'„8xCã;Oüúc×|**ÒÞ³˜Õ•ë ÈÀJ+!¼üV1\†„é@"X –:{öìÉ×ÈŒ;ýNô™‡ÕŒ¤2Úñ•ª"çºB!£Ä>W¸h·}¨çíïû»©)JJ°XÖ¸þ¦E?}útÖsEˆNÉ—Zô©pFü˜ìJ©Ø½RrP€…7â™_k€æJÓ]+U­sèšï=dgíw/z¨ÆÐ‚Ž õ Bœ×Ðϸ_á„ä ­?‹f™O˜§ VQ4"”Ì_ %‰`©C"XCÓ[º(½‚ ƒš ,˜’-²ZC&‰]ÿøu×?<ÕýOÏ÷>â!“#êæ–5ŒœŠ”Þ‚°òÏÀÊqÔÌ.ðüîé3ýúAqž#"iD˜5Ÿ]«ÕVZ³›Ð‘×:žžŽ@4ňR Çq™¿  ° ,SEê{ ¡ËÛܪ.CÂt ,HKløùñK3õêj2°äÍ $øýþS—ŽüôÝï 6˜Ú0ê,ŸÛøw ôû]•€åM­6’.„%D6Xê2°ÒJÅ¿¸©MÍ[Úß•³™Âfeo¨}ЦÍ~µ œöí=ìþ£äx®Iñq'ÂU!½¡‚ƒ;¨ÎÀ’ñvì÷Ÿw@BˆE¸”‰äÛus*æË¿zz ÂÔd ­„ðrf`ͬ€u§ºu5EæÕLWÀÊüìâ\kIÅV“&ÙÁ0ÆEwðqȈ¸¸ë÷û»º²ty.  ¨ ¬Šø¸BÙ!ŒõÌÔSÑ*LÜó°&&Gºç[ÑD™â5_s˜«!ý^–©N( XqŽñ%§+4EÕ±åœUò%„ú'«šå|Rõz½ÄŽ*ß5R´2¹uAÕwï^”µa4Áÿà‹âöáµb)˲hÝ8³‘ÙlÖÓ¦›j?»sàñ(³ÞÚÂ.>=²)µgý.b7X4©~á¹êl•W#‰€E „Ë@^X<Ïg:žæ+`}=ó YÃ^ã¸U¾3 °;¸EŸRafÄÄ]ÍìââhJqûìÆfV^¯ýŸèõz–eå<ÒÙҮʶC‘öºTç™ó*$6õ––Ö­°ßüÁXÒ¦d_çk¶¹kçÜŠ¿§··7‰ˆ–X¨¨°€ ,«G“r˜à‚ºvÅSPB𘀥ÝðIÊјkd$E»:În·ã·Zzþzå—S-`ñÀ½=ò”7’úÅMS /p°°öÚÍíwŠqËh4JnmŠÖ7‚º×TèµL¹e)ᔀu2°¢ ¾×¬q )jnuÊNõ[wæt÷øÝþAoB1®?@‹–íâCøTLD´hµi7Ô>xÀýÊök?µaîGξÐ̬|gôéPÂ<<‰$](Š Rî¾ÀÙÌñëœÕÒzÅ~é%„©É@š€5 wų.bòÐ#÷.©±éßÿýÆÆVñHæláÊ0¯ÆÂДèòyi<‰s­Üÿ¤ ­η^{Ö¿o":(î>ìñD* õK#‹y½Þ‘‘càÖŸf`ÙÓl°.kçšb¸ ÓD° A,u °áÇ,ÝÇ¿M×ÌÍ5’I$úßí.\¸ÐV›w¾zëÈÄ#‘Ô{[V¹eeÅ­Á„w2>±ùÚ›¨)3,ü^f0$-‰,\)ïúA(?k Kñ qa$ Nã Ùi’ŸÆ!V»ì8šô Ýß5±b«\ mƒÁÀ0 Çq5†–;þbCë-£õù|Õ†æk·½7ú[qXOàÄâŠMN}£Éd‚òÊÀ"·™R‡D°Ô!,Š!ˆiXÙ¬H$¢ÑhÄ;ofý`.DÙ‚eY³ÙŒ,Av_|å)Wš7W?@i¸P4X¥o‚lŠ„4˘š X “Ž Å8ǸÉHwÈÊJXþzVƒ¦Æ¦€M›6Éžt%Ðkè9cÏxxAè .n°ÉŒ—Ì£(ŠÊüìh €Úà¼çƒ?M1þå³?^Ân±ëjmZ'««ŽÇãE¦ÌÎr Xj2°èŠ+׈°.CÂt ,HK¼mø1Á“\ЦsdÆJ´'ÅV¿Y‘I ±X,@ Ê…Ïù÷¡ƒKÖÜX÷ τǢ±[4v*ØÇïeFcš¥Ñhä µ "5¡j(w«Ü²Ëú&f>ëÜPªäp>f !ÏÚ¶T­ßþÎ ÅñøÅ €(ĶZ–;õ âq„Ä©I?þEǧÎÊX–Tï…"°PòÄ©%PЦ±B-±àùóç8 &×@6÷\ ™"žŸåé}í.co°hX+]%ªW¯€•.QåkƒU€€…×ÎS=»¸2 »OH·ÍŠäÿYqª]©o¼¾æS4$Ïâ„ÄqÏ[ïŒ<ýrÿ£»†~‰eÉËCL?Kð,@(jòµáçݽ¨ e¯­\é½ä>¢(EeE¥ ¬¦¦¦–––1Íù8ŸÌ8aMÎ?»þ߆”º„–jxžGOHÓ´D¯PçàžZõ!X%Æå(!Ä ÚëT X­)ë@·²»ÉdB¹‚ãããÁ š×R7¶>ðì™ï‰;CáÎÞàé…‘…že2™äû,ÅB@ ”‰¯ó—Ž¡]Á?|r"ˆ· Õ+dÙßßo6›Y–UŸ…&v¸gÖ ïÛÂÔ„µRßÐ`šésJE+[Àª¶é/M¹Œú£mÕ +´”âöšs‹LÀj¯µ¼q2©3žž”,ùVS;Ù`š¿©ú¾wG ¦U …;ßýMÓœ¿“ŒEO»Ý^¸Ö—;‹@ WÜÁ®j‘,Ñžò²cW–Ãᨬrúp:ró¢ûÌz+®E ) þã]£ÑHÔ U–ÏÀ*gw(¿ ¬þË…·à™_c•‰³Úegèä ä™ÁIXa‚…g`ŽŽbÉö0¿zåÒÆuh÷ý±g/Žt@†€…¶K±„pÏž=Wû-¦‰`©C"X\á &ö?þ¯íÑgFÿb;ÿ=Š×z<¤^@(ïqù–ÂÔ/˜Ø5ô¿]£hÀÒŠ­ÈH"õ”LÜñ ,‹^*`¡m56X…d`aÊÀ*’+õ«ÕXv»Ÿ¨€Ë²|ó®Ì‘½ÁÓ¯vþ\"l…ÃážžžîîîL×UXlš–âøéP$$ ‰`@‚8Ûàó°$ !—IÀÒh4û:_÷†’?´ Zãõ ît-"—€%Q¬ÔX¤„°„É7‹aÅ nš€U«vÔjÐ,˜êãà ¡¯üx\À’˜[ñ<ÿê¯RTò}ÆùèSÇé÷tâB>/TÎÀÂ,ÿ˜üà+)V/uHKÁ2àJ1±ïÙðcŸ.çíFlA(æ^gY)ñz½RÄé&Ïó±xì”ïý—úþï@øz´BWÝbY’y–ŠÂÔmTš5íÂü2°¦2¼ŠäJÄ JþŸ³*w,˶···´´´´´ ÚvÛu÷·ÿ͆š-ªØhÓ¦Ì Ž¼³ü•Ì'ñz½™îŸª<°XÌËC<°r–$ˆ¥N¾$?~ mSEÅ0 PðZÇoБÍóï4ë­CÀÂod… XéXDÀ*м3ãÜìÖæ" Ãà_5]®ÏaÉóê,Xã²£íý] 6X2rZ­vŽcî]K¾€Ž„ÿzíkc“èH©g`¡THì{6üø§dÔ+ ‹êUOOªpGD"‘®®.õÆâH_ÀóÎÈÓÝ;f Ì*û6ÈH¿‚i˜¸CzÖXþXj,WKÆkH¹„ÿ°¹”;–e].—ËåjmmE+µsæ™W¯©Ü~kÝ—q ëŒÿƒž@Gæ“dÚcq'ã™%’VBè#XPÔä+A¦•:›åK´§Ëá¥ÑhNöïï÷tŠ» ÍܲäqÛ`HÕ÷1?}ú%„¤ aéÑè0žLN°ú=áJ‹Ü²§V«EßÅùåD0†1£Ž™ãÈã ±¶Íñ¿{’z°¢;jD˜kÀ­K?ÑÓßuÌó¦¸ë ï|qKÕ'’ï ëV_° þÒ±4õŠÑènü è¥k0LûFIå B¼óú|¾<^”ç½=ÿ÷oŒûðãuƶµ•w±ºê¬gåiâž6_ÄMÜ °Ôø@],b¬¦J£QÇ„cŒbÁ˜Ã,÷‰hšFÅÕl|É ù›4¶mu_xuà‰—ÌËûÐýRÑedÒþg²>y<—ÿ§lUÀhÄ/­ô@<*oñK „"¯Â+‡ðÓþí^Ó|½Ó’\GÁ{ì&‰îîn—Ë…ÿx×jµÅJ1áF`3q¯/w¬2°Ø”€õØ›2Áp8<<ìÃ|þc¯ —ôªÄÁ¿ s«Í´’à…“¯»Á`À¼Û“X­V»Ýz½~¥ãæ>íÛ+>Ô8wFµ”ò-!4Ú@£ƒD „HâÐ^å/ºÏçË·ß¡¨ ,uHË€+Äøž§põÊøgOiÖÝŸ}h ;ëaA$rÃdÜ=ío±,Ã}¬†Ã]4EWZÀö|Çߢ)ÍKG×Tno³®Ê´¾B(ZÒ<°ÒÔ.<kħ,`©)£ÃñG‘|f5hj¦^®H®Dš¢æV›;ú“ZÒwÿp¶ŽÍ9O‡ÃCC!”u/3QSãeY6×xN—uÅ΢±ß\÷ùWã…D¸à¾ñn¨y 0™%„H$CЦlÕÉ&ë‚À{‡áL‘DP0$‚e âl°Kg¤ ¡ÌYq>úæ¥_Œ„RU·-ý$Ú–¬Þy½^ǃß (!D£‰¤¸QaÔJ<=Ë2ùxXbÔÏÞëÉóìN•ãÚkÕ:¸‹,i´™tL(ÆÀ7òí—ÎuÙWƒ¿~s[$8™Yúg·Û[ZZÄY ØSsuåö¾ÐÙɸ8!Ñ<ÕfYEQT @ÓAA‰„Üw¢(K%jÄ#LŽSŽÆ¼>ÚŒÓÛÛ»téÒ«ûÓD°Ô!,®D!±ÿ9´gxðÑœê•,’ûÝ~÷+ý¡³§|{VWÞVcpÞCî=Ám¼½þ¡ ]õ›]¿ÁÕ«J]ýõµŸ¶hìOœ†rÂhÎ ¬iš¸Ü‚°x®ÄöZ+°ÝuQý‰6f&“ir2Ke¢]W»Ò~óá‰?Š»½ÁÓÝ¡c.Ó q·¢¢BlG(Áãñ ãv»=ëKÓl' Xbáe°Š'‚„ ,HK={öäQE˜ˆ SÞ¢éÊ&ùá—5‹o ÿj$’R¯ÖµÝêªZ$ÿl,Š¢ðeEw O*á¦1Ÿr±¥\¬+Rê™—hhêšûûç“5zßùÙ\#—5V,°†$ëŠ:nùòåx‘£Á`ˆD"­–åÇ=»Å#]ãm–U‚ x<Fƒ¾è e«**‹ÜfJÁR‡D° ¸Aä.ìãÇ{ÅmJoÖlþŒÌ`I×9Fƒ„u:V«çd}Á3ý¡³0íûãàOj ­ãÑ>Ñå*Ƈßùå5Ž[O}€ž§Í²j}Õ= ¥<É«„ÐbHÏÀš^ aa-¡˜®Ä|ç<ˆ“£ÊmFcV –°›ûB§G§fÿ{FžO8ó¬×€ Yí®P»×ëu¹\™nƒó'Ü™w)¶N»éA˜iŠ'‚„ ,HK¼<°xw/I9‰²×ƒFaé² XûÆ_Žt¡Ý¥×}aó?*>›ÄËëõâ7»‰‰ ¯7{^óÞ î=Üø’XÙ;¸CùXWDk,`2·¶5%`ɰãøÐ‚ÒLW§Ó)±è2^¯·Å¼ XCá .``, Õj³6ãÌŠŒ –˜Ê(nçZÉ$Â,$±ï·h›Yu•a}…ƒ= <}†¢(FÇ9!q`b~>ó€ÉøÄ;#©>>v]톪Ӕª4ÓñÀJËÀÊ¿ aa-‹Š‚¬ScÊ–DÜÄ¡€ÚXußËý&„pBbïØóãÑþµÎ;Ð$Gn¿ Îa² X©F„ñ÷~ @Q´³™Y¸EñÝ¡hò1À‚Œê¿°úCç.NF»s«—þÅhè´Ù…ÝnB·3ƒÁ`·Û{{{Ñ€x<îñxðç…B™÷µOøowò™ý}’e†ÜõþeC™XçU~ó¶ùjFF£Q¯×‹¾4z½žeY¼Ÿ¥ì«8•¥³³Á’aÇñáodX™Ó_±m]Wk×ÕzbÃÀ ü¥àÉvÛu^›W#Âø»¿äº“[8öz<‘p²‘×h¤ìv°´7|ëׯº—@ .ßÿ<ÚÓ^wŸüð±±1´ÝÔÔtnüðYßI§¾Á®¯ …Bâø”ï=±(^ E¯sÞ­R½5V°ÒfDUV=E8/ŸŒò‚ o‚™wV· Ù8Ï©~fåöxŸ<’¬ñ¼0Á- î3òó ›¶ruåíûÆ_DGÎù?ôƆïÔUÍûÉ ž•D"¿úšùßS&“a@˜…äåà—­ aŒ0ö{´[϶üÛ¾¯×Hov,Ë:Îq×b±€ßïGÜn·Õ*g[‰sßýâ¿ï8ŒfY."%„%ÃâÛ#÷.Q9øJfmn—›ÿ=öV—øÍëu‡ÂZ–eQÃ¦ŠŠ Ñ»Mø\–垉dè®Àñkn¶ÛíxŸò¼2°â{Ÿ†¤/<Еƒ•—žÅsç,Ó¬øˆº±Rò+u&$‚¥‰`p¹ƒÈyÕžSF›üüH$‚jÄ(Š2ÙôÏïþÁ˜hŠfkªôÍÕ†æãž·Ñ)Æá’²Ž‘±Z4ìX4­çà‚ŠµÕ…öØ8ò&î¼ c¨%1˜ÓMÜuºÂ¨õ†âà…‰`Ü)Ûà8_+—Vñ\‰mÕæ¼fVïuï½ä‰@œÎOðµUrãe2°DÚmkµ´þƒñ|Ò]a$ÒóÞÀsëœw«|Kh{†€À÷žˆíz\wë× {άO …A"X –:yÙðóã)Ã)Ew¸l%„Ý;Q]†f¾¼å;f½-빇 XÇy<<õ$ ÊO!þüÉã¿x¿'×£¤„°÷£Z@ \y'^ç/K;‚Õj¦ê½^oww7šfy½Þªªª±±1t”÷í³/È¿ÜúÚêhc³yI³9¹êcÐnªýìÎǃ /ÜwíŸsƒyT©Ë§_Ģe:TmÕŸNÊL£þè¢z¹g …Bø®üòéˆ?Š^ÝjÐÔØTù9ëç:RÖ…²P­V‹\üz½^ârÕÀ¶þóš_üýsŸôÇ“fŽ¿$€ £ JWcpii©PHQTæúŸ×ë펙¼íÉ/må’¹ú?a?!_äñO3KnÌõV5+·Ó‹å?@ f¼lø§YB8ý ,¸ýî? ]»®ö–Ÿ9¥¤@$ÉlNb0êêêrUŒ¡™ üèÓ+¾r½KÞâ ü ÖÕä¶eµ4Eñ‚»=þˆÃᨬ̩›êt:ÔSÓe]j+Fü}#þ>h³¬ÚX}/T® ,´NΘ[Øm™iþFÇÆÆðk²ºº¿Ì2‰¿ñ˜ ?ÞË_:N7/WñÑ P¼$ö=~üSÀe¿•Pf»fé6qÛãñàZ•¸€]]Oq|r­’¦4‚À‰Ĉ¶ê%KªÖû|~ü V«51¶›j?ûêÀNCãʆ­‡jT8¸§Ô‰–îãþ‹÷/íïòäzªp8ìv»qñåíñ fsNköOmÏ-J¬ÀW}÷]œŸQ›L&Ÿ/µŒÌ0ŒÉd’XƒÁjdoªÿÌ˽ÿyº#“›Ö¹¹úOœú´6Êñx<‹I2à$ßRwœ©ºá/-;¿+î&:v%:vå|£:“ŽXP¬àÖU)!<3¹w2>!nÓ½±ê^½N.˘aN‹Å@Éz›˜o•«blÄE¹áVƒæ¡ë[g™x@¬«Km…aµË¾¿kxAxõÄðç7µÈŸb0Än;.ó²ã; ý7@gà'$6WßwäA¤¯“[Øåf¶šÖœ=p?½yÃùR~è\âÐKâvâÈ+º‚¬ŽŽÒò¶¤!,uHË€™ ¢¼zá7õ @ÖZ-‘ýî?ð‚`Õ88!Ñå9‰Žo©~ ÎØ:히\ðÅF)Šþôºo†¤/'&1Ùuµ××~Ú¢ecÑX^Ÿ"Ï„ Ö“ôf¥[å8‰ƒ{é^‰‹êm³n"€‰`ìÌQ}vû£Ñˆ X:.3mM\?«25®¯ºç½ÑßJõÇÇ_|b¥ýæ¥ì1ý\$8i-t2×·£×}ÚÖñß{BñsI:5+Rº$ˆ–$ˆ³ˆDLð$뙀¢éÊ&Å3f¶ a˜›<æ~_`]W©oÀ[«eÅh4Ф·l6™?ÏqÎ M¢íùµ–Y¨^°®:ÛWÔŠ¼rLYÀB׃‘±.e· FÏOD†!uáõO𣉛µŸñz½’oæ:yfKNAÂá0~$‘HÈ XšUw¤¬£;twÿ£üGÈJS“òŸB1C"Xê–‘ïMì{Fܞثÿ-£^@oõjOx½Þ¬)º“q÷Y߇’4+pÙ—4›@ƒ±½ÁØ„wÎüj—sáéÑÓ’ÁHΨ7Î…ôžK˜€eÑg°®D_ݹÕi‰Z¥{%R¬›ëØy‡Õί‘kVXÆë*sÇŠºo½œµï:5úŸ¯žÏ:Ìå4Ý·¦Ñëõâ3øk·ÞQÿù¦ÖÆÎÑ“ÿóοx#É9Voðôžáæ46àU …$Wµ¢¼fÅm@Ñâß®ó à¦ØÚ|_W}§ BqB"Xê–‘;óNô™‡³<Àht7~ô)…ÅçóyýþÉú•â®×ë­­MûƒÏ0LUUÕž¾?dªW4Eß¹ø ¾Á4ªÒ\³¢y=d›í1 ƒªæ!›!Ïô3°ª¬Êóàé#ÉÀ*é+qüJ$`}pqâK[]2ƒ%å,Xí¼¸(€¸ ]@ß±¡ðÅ?ôÿ`kÍ'k -€7e‘¤¥ëõz»Ýΰ.Ãç~Ä]‚ øáó‰ƒ/ŠÛÂd~VIG$‚e b©£Þ†_ÈÓ f´„p<Ú×8Š®tlÓÑFP!`áK8( dÌDΧ2°ÚëÊÄ‚ _ˆ€u•Y>§¢©ÒÔë@0šxø¹“Y‡ÑUmÓ7ë{0jÍKÖ~nÕ?ÿüà·‘Ëé9ÿKž³.—ÜܲIΨë¹Ì [Ë´­æ.îøÄ±Wµ[?/ @ Š~àL–£ŒÆøgOiÖÝ vw`í!£8K£Ñ466v¾{$óù®_p«zÁ±Á4cx4WËÔ›hš¦i:«€e0²ò°²x®oœçüæmóåŸD$z½^tƒÖëõ,ËfºLfeãüòi´anê³(ú¸K,Aä,˜uUw£‡"æñ—N?á’ÊT˜›|}è§×8>²¸b.`y½Þ¡¡!‰€e±XÄ>íMe}oÜ©Ý)+Ï ,@ \1òup‡™ËÀâû`üE´”b×Õη®·ó°p,<«½–d`®Û—×>¾»K~ /ŸùÙá—ÿt®ä8šíUœ·Ö}鵡Ÿøãâ”QxùÌO7­¸™¡S!¶ÛíãããøÄ.³ô#sÝÏÀÊì•.nkVnO X‰#¯‹@ Jˆ,;òK‰z•‰4Àq\ר)Od$ù4”f~Õ _t, ܽê‹ZÞtŠ‘+ 5ªÃÛüY,–é X¥.„+š*V4©]ÆÏuœU¬vÙu:–ààâhà__9«eè¹Õæ]Û9_s€ÉÉI«5m.NQ”8ÉÉÚÒqqíZ*`|{èéáHrÅ üA÷ÎjC E5ñFMù˜º#ƒ/ù%>†eÙššüHæÕ•™…,q"Ø3>)Ô¬ºç:vÅ^ùÏôÿGÞNöìÙ#?€Pä–:$‚e@ÁAäÏ¢míõ_ÐÝñMã_¿¤ÝðÉÌ‘v»]¢4I¬D"±÷ÂÑîÓ‚‡6ýÛ#ÿÝ?ñªÕÀêõzÉ}G> ?ˆ+V‹tÒFe™æ••Õ+/X–uM1õª¤¯D£ŽYÕœúìßzáôÃϼÿ‰»ÏdÑ€pw‡Ã¸F z½^ kV‹a«Þ~Ký—±×S˜ƒû±‰7AŸJbý‰@ªh.(«mçkâ^Ò$‰`Y@‚Xêttt¨™VBèlVsÊŒ”:OzßE»­–µ†Vq[1ý rd` yå+ÎñÝcÉ%EÁ¼Ù*`‘ ¬«Ïõ åŠÎ M¾|tHÜ~å¤gmCÕúšäœ[첉¶].WEEEWðèyßAñàŽ¿\V·¡­a!z6‰Ü+™,‚l–Œ<ݼœv6ñã½ Dƒ™^*tó Ͳm¹>#äSêL(NHKÁ2 À &bühgr›¢ôŸþ>eÈ™”β¬dv%)!ä~÷.´Ûf]‰×…‰95¸…¬\X©gƦ˜™–N§“”Ø+®*z`]JýJ\?·òÃÎ üÇ ŸüÉÁ£ß¹¡¶BÁ_¢9¢KV+‹qGµÊq ««}o4Ù…` |n,Ú,Ìü’àçÊ¿ÊêŠýÝ…€(µ+¾¥A‰`@‚X꨷áŸ~ aV$~{ðiTù“ƒo|c#CËuü–„ E?«€ …Ðü¤Õ²üœßH¤GÜ=6ñæªÀz™RÌÀFK™X!èà9!0çdá²¢Þ†° +!A¬:Wûæ~ø _,™œKuÿÊ¿Œ¦ÖêÔXE É/qåúÁ!Ì«n–`°Š†~êK«¯ýÎîPŒ$ñ¥g»æ×ZþjÛ¼Ï4dùâš´ÖÕ•·½?ú;q×ÿõñ¹®ò£qmÈ×Üçop>hÕ&mV%—Mfú¨èB(¢Y¹=.#`|>ÿ80Yæ @¸ŠàX –±›•̼] ”}{³y)Ckñ™œÇã‘ÜSü~ee%¨ÈÀÂɼ[á©Ñéòo5%Ö̳¹=•T~q4øûCâöî3cŸýÙá%642{<ÔúZ®ÚL˲:Ž¢(”Ó …¼^/˲Y,Éö›_úq{ |îÂHÇܹsív{ooo¦ÜÉqÇqòßÊV•°ÿ°¡èHÄÏ” EÓ•ªò¶2o y XŸØ{ñU´» âºÅõkަÔ¨°Àh4æ-`, VI°°Þú_÷/ýó'SÆùáÀC¿>úZÇðK_[—9¾Õ²òRàTo蔸LøÞùzô€{ǵŸ·#‘ºb½^o__-ôcƒeY|f)AÛšÅ×ëîø¦äÜøîŸŠó?!àNœz[& kÏž=$Ý·¤!,uHˀ‚Ȧ,º^AÀ’8^IˆóÑÞài´ÛfY¥Õj3Ý©²¢è%yH’{Ÿé‡ªœÆ<°ŠFÀ*õ+ÑiÑ¡¤r޶}o2Àzj_oæø¦»š×´8Àn·{<|މDD§‚¬–ä{Uglkªhïõw÷ô¾´nñõ6› BFƒ¦4ñx\AÀ²VÁÐyq[˜P¸4¥A‰`@‚8Kàݽ $g”½4ÒV¶"’.+YW5TªNpfèp0š’ ŒåZÇm’›”zKr$¯„ó‰€E(rº¾õƒ‹î§÷¥ LÞPöx ¨­5ŸØ3ö\WàXæ£}¡3ý¡³¦ B86›Í¢A»dùZO³”x¤5 Òô<"9W¸ãoÿLÜ–¯"$·™R‡D°Ô!, "žE+e`É X]Ácœ¼1Y4öjCsVé!+™>ù>>Z­¯Ôëõ™§Ë¿âd$u-ž ¬rºšzúË«Wþóîa_Ζ‘î„Áår‰Û膄¬ß"–eÃá0²ædYö&Ç¿8ômq·?tvï‰7¯mß„æ-ƒA«Õ¢N5±X,k(Dš{>Ë)‚³Á2€±ÔQ” …‰øÞ§Ô`IÚÑJVJDxžWßJøPÏÛh»É´HËè%Ë!*g>’{EQ¨/s.ÎcV{íì-!$]KŠ‚§¾´úØwo¼wuªu0šÅJ¼ähŠÙ\}ÿ[–ü,8à~…’‹òzËÀ—6âQ4½Ó¬½7õ<_NÉu‚@ WnÆ,á´7Õø©Õ²’ wp‡ŒI!ÞŠ$3&W ¡Åb±Ûí’ b!XÄëòS[axúË«e¬¯Î I{g’u5[ì]Ó2…Ëåj²-¨1´ {ú_r»Ýh×h4âßåF„¶*´o#B@ LE 2qæè3Çßü1:’KÀ’üÈÍš®áóùº»»{¦À/ ¼À¹”j>Øl^œ¹ØVX–ÑhT\x#%„"dÆVJ,ŸSñ.zî`ÒQ"ËâN%Né<O$Ù¢¿OGNxß61¶*CSø Çsà»;¼ï-·ß* M€56&]Tôw×,¾ž²T 7¨¨"$•Fà…áóh®_ ?\æ–Ñ<ë‹'o40 +ÖAÆ:$ºC‰»¸ž•5+S„Òh4óæÍË,++@ÀÂ=°Š§„°ü¸aaÕ/¿pÍÉ~?:2ˆýü½qû,&`Ùív¯×‹'U‰ú¦F£ÉìÖÄ0ŒØ»ñx<+Û^ü©¸;¾Ð=qÊÉD*£Ñˆ?C~V>X@¸Üðý§$GT:¸g¿õÀTÉaÖ$¬ #'|ád§]m¬3ÍÍœ«(N?D$–dÁ/O0>êO&ž´L³S!]«Œ!3¶Ÿd"ÙíÕÑ”nbb".¬Xod¬ Ãôjî:4w?á}{®u•Yê°¼^ïÈȈ¤Á¤ XÙ/­fõÝjª}>Ÿú~„"„D°Ô!, "?~Iˆ&’²UË æ8.IÖ‚Qe³ÙÐJ¦Á`8=”J¿rY–+d›IDÃ0›Å¬XsæÌO—X™©K4«,¯ÄO­K3Öõ‡ã¿x¿G uçh0ÎñZ&éã.£oJÚ_fo­¡µÎ8w(|QÜ}¿ÿÅ[j¾(nFüä›i‚è5…0™‡€U–œU–$ˆeßÛ!9B;› ~¶Ì¢Â\êÙ¶ç˜ÐÀ0 SX–øËºc4qr4Z­»ªëx¦1bÈ›*ÆŸ[m¦ÕŒ–%Å2c#¨Ä¬OÍØ²–âˆK—⯎ãî^ûŽþŠO'ĺwn­ù¤(`Ùíö‘‘‘p8,žˆ&‰\‰”HÀ’T{½^—Ë%Î;5kïM X_ˆÕΕ<‰vËç)[UooïÒ¥KUÿ7ŠÁR‡D° ( ˆy`…B!ÜQ¨µµõÒ¥K ÃhYn(܉F.ªH&ÿ«÷À†að…Y=°jjjÄ ‰4¦Ñh$‡¢€åÇLÜm†bi’;®D›Q[WaôF Îñ£ÁSíÀsé›Z­.EQ™ß »Ý>>>¾Ê¾m甀5ìŸk0¶CÆZ÷åËÀš ,oHËÄRGÑ‹ï?‰¶µ7~™2±L{öñ)Ód2efo¨°cõƒMæ%05WÁWàï/"#ãžÿ9þíÉÈÔk‡ü²g¤h¯›½X@¬’ìO…,Íž… (Ša$34æ ÷¼Ñ“ìHØìŽti4ó€eY“É„,§Ó9<<,nÇãñ\eÀè™%ÕÅxâezáDô™‡%OBW·jÖÞKn3¥‰`©C"XÄ‚ÜÍf3˲f³ùƒ>¨®®~{ð7è¡ZCk¥>i×8‹aIšLEE’!ð`1{K¢X)zIàYÌÅSB8K®Ä…õ¶Á©Åä3ƒ“ ”æâ’/RVu’eÙ¶¶¶@ 0Ǽ°/˜üb™x£¾a>”Éd¿]ÊX˜€Åç#`Í’–1$‚e b©£ààöóã—’;ŒÖð࣠•6rAX,i^Q‡#SÀ’¬p˜ÍfdÐ ¾ðĨ¿_¯5z‚£î@ò²†Ò5˜æMÓ’_Ê£££Ycú&¿ù0Ù„¿u¡×£p'ÊÅl6À"`•z ­eè8Ç@4Á£Äû\àV"‘XÀ®9¢ß=M^<Ü;j Fõz=>±«®®…dMZÑ @ZE˜åI:â^ï@¸b¤ Xõù X ÕjN'c]J%Õ/f7¡mEOFƒ×ªONNâ&Ü`³ÙÄ ‰]…Ø?H’´/ŸÅ B(–¼…QTZv3á ° ÎòÖéQqûì°²» ‡Ñh\ÉÞÜ<+€îèÀ9ÿ‡ lë *€5X…–á²Â÷Ÿ‚©ß§tÝ|õ 2~®f½}HæN§—Ÿvÿå§ž•œÒhn×PZ iZÒÙ0 fµÐzçìØÃÏ„™`6· "`•"f=ã %m>‚QŽ5)Xh›ã8A€µ•w¼:ø„8±›ˆ^ð\Z©×ëñ_&‹E²žUVza–'é< æI0ãðƒ˜€Õ¸H~0¾h) XP__ÿN×ï|R°isL)'ø|3°ð]¿ß/Y&¥¦<JA<O^.ªÁ(ÇOM7Í:Ílö’¸*,¬³¡í³*ª°Àb±8ÂõÍæ%=Á¤CÊA÷Î9¶v†að'QÌÀ¢‰‰;@ %|_Ê‹ž£m'ù¹šõ¿Äè׳x?ÐýVæ)M¦%É7 ”î8=˜ýfWo¥·4ëôz=˲z½œ‡Ø0¯Rå‹–%DÀ*=Ìz7”ü©Šq¬Iîç~rÇq\•¡©Õº²sòˆxðˆçõ– óÚ[–Dãa†ÒЧèõzÜËh4â?ð'7ìv»ÛížœL]–x½±fñ º»þðþAñHìµGÅM¾û0ðÜžö)6L%3ŠÅê„"‡D° ( ˆüàY´-ß‚P’ô„,ÖÎîëú#:¾¨b@J Ê7 ߥ2D%ùib^XiîÆ"š Í’+±½.Uþ0ãÖØØØµ•· „/ÄùpBb÷ÐSÛ¸íø·QE–m “ã  Nåœ%,cHËÄRGÞ†oAÈ4.–*5–ä ~ƒ8;tÄ—Œghísrʤ^À:5 µ¸¢(ø“UÎØÖ`ÒÒxß‚ŸÏápÀûçw ƒMæÅz&u/ (Je3i|0MÓ23¬IrjäEÓ2°ŠIÀš%4Ø6£Flé'†|‘zÖ 3>_ Z-ˇÂ.LwwŸ}aã¼Û‘1(ÏóÇÉ«œ”µ*)`“c*,@ Ly~<ër”¢éD‚ìIY|>´õ»ÆHÕààà¼yóΞM&°Ó4Ͳ¬Ëåòx<⑬¹T¡×=–tE )êÑO,7êˆùf¨Íy#LÀ ä)`ñSu|‹+6[4Rm8ðœ÷3°ð¸ žÿEüuàñ‚Á¬olîšÔ¹Ä‹@ ®8ü`*mV¾~0áxð`wjn7ϺT«Õf–ʀ߰Ќ°e —Ë…f„Y’è_ò/H°òH#̸í™A…Þáê,ƒÁ€¾ k*ï´iS‹Û»Ï¾— El°¡È¼Ãè2¥7ÓU-òã§SBx²0š¼=Y ö:ã¼ÁÁAŽãúúúÐ`qµLœ–ˆd­<;4‰œ7[«ÌD½šDÀ*=ðÂ`TÁFŸäÅãq¤+1”fKõËØëÛ,+Ym5sܳ[gL:a¡ƒ¡pÊßÏ´Âÿ"Hß,º-%`ñ];::dŠÁR‡D° È7ˆüh'Ú.LÀ:Ðõf4‘,0g Îzcþh^õƒ~ßo^23Â̇òª@Ä3°,ÅÔ‚pö\‰ ëñ*€ü༠ÎP––Ö­uÞŽèz“§SqW¶Á*HÀš=,WHËÄ2†ïO5ò£¥ fH,¼] Bò3éYv¥Ê•–ÕoèîêŸ o}¦Ò 7ÀZÔ0«{N"`•y•âs>\]¦(ªÊдÊq˦êûo©ÿ¢hßanò`ÿø‰„÷ðÄkèÄ\–䯃bƒB¦u5*Wáz;šëªåÇŠœ¦¦œî9„’€D° È7ˆüHJÀ¢jÚdFÚív¼3ŽÁ`«ùÞ¿ª\Y¿·o‡<Ü!]PÈ:ÅTºbæ×d±f`Íž+ÏÀRôq—|—T XÐ`œoÕ:Äí½à?„RÎÀJóqW+`Íž–+$‚e b©³gÏž\q½y´ ¿I%„¹Iox b‰ÈÑÞ÷Ðñùì5@–µ•Þ‚pq½Mf$AâûPz\BˆÏÕ4Ãá#c]X±þ¤÷]ñ¡×Nýæ¦Å÷¢¹wGºV9n¡™°(‹ƒ®nãG.pqóD'8käO!32½B%‰`oq‹–°X–µZ­È$¢ªªŠeÙ~Oç…‘¤‘*Ôšæm#—&ð³Tf`EâÜ£»:ÃáðØØ¡h:öÚÀq‰»¢ ápx||Ýæ(*ºkXîôƒÝ´m1QÖì¹q÷3JVaX@-d×Û)îtŒ½×\—ì3_Ö¤´ U.fOËÁ2€±Ô‘±áOËÀš³Dñ©ò°ŽyÞ:çÿðÅ_}¿ÂT‰'sÌæê9¶ù½Þ¾Ìñª,’5c«ô(¸„P"`-\¸Ðív‹9“KÙ-ç|Æ…(LF3þðs'³=Ò™í zÔžn3QÖìaA]X†¢(”—'/`‰Vžˆ%U»_çøŒ‡G"=5†P•E<°¡¸à± ,æ2X#á.ˆ&£S–`mëÍÑhö[F%„$kšÂÒÂõKÂmh³’KÀb†¢(§3™¯§M‹ÙMèÑ×N>€¨Â~÷Ëâ‘ÎÉ#@Q”Áê$ã¥æÝš²ûå»*Ž'ÂL!øG…HR5 Œ6¼Z*+øyFsøÒ;ý¢#7-º73ßJeÖŽãCªÞñeÏk&\1æÖ˜µLr:è ûÃrùPEåšÏd"™hxÃÒúuh÷œ¿¸q™<°p¹x~à4Ú›ñÂ0ðųüµ_Ûzs®[†+œÞ‚_¿!™´•f¬mA0V`–x¼ªªjxxX<²¸bãißÞ€`trï¥AÄK>Ú:ç#fƒ OãŸnæã<ùž\mBѳgÏ™t_BñC"XäDõX"i’#üæÃ ½Eõ«¯iÞ‰D$§¨ÌÀÚq|XͰˇÕPDs¡Ùs%jº­Ú,æ^ üóKgj+rNÂáðÐPe`éÎ÷:O„PJ¸QË|íæÔwØçóáçÆb±eU›õ¿/î^ vDù;ô´)¿.„ª=°fOËÁ2€±ÔéèèXº4‹8Åv Ѥ:euRÊþ3y X#‘n¤œ5¶9Möù{OïÍzŠbÓ8ƒµ tU™H ÂiRD“6‚JfÄÄ]T‹qÍXK–²[_ûÞîWLƒâ„Dw°c¥u+~•NÇ ×*`´ÀÅ@çnÊR©x¡8!…R‡D° È+ˆiXJõƒžÕòÖ¹gÇÉ´)†Ö|jÝ_C¶|+5XÇû|½î䲤QK´=©yéõz–eqçxy¢Ñ¨×ëE.]y¾a^ÝzfÕ•¸ ÎŠŠðÆÅ|N ¤©TË›*¶´çÌ"tÙ—ÔØGüýÀ ‰óþKÙ­ÊX•Ϊ–%$‚e b©“ˆŸïËÏÁò°†Ã]h{ýÜ,ª»vØß[ϺÜnw®çQ“…`-n õƒÓ…X¥GÁ%„xV”x\²J¹À¶þlàƒ`Ì‘DHòT]£×éoÉ%`I2öÕd`ÖÀ4-åº×yP³üVå³0m„ÑÔ,MÞÁ]ýÚŸŒO¼~út|ÛâûX0 Ã0 ~_P#`½r,U?xÂÊ»»QܶÛí,Ë*žŽãõz=OÁ§®< ë¬/ÍÐS=ºë¢Œ€Euý‚{kÛißÞÅì¦ü2°H !@ \)rÙðó})ÇL¦é2X‘ÔÔèºÖmËç$ šOžÌêÔ  NÀ:5òy\D °¦ ñÀ*= 6qW<®¥ušîÌõTÃáî0ïŸÁ , ±*B¾ó€šS0}x\ÀRÊÀâ8-Kñ¼ç’¿üY\=ä5 IDAT“ó®•ІI+5%„;Ž¥êïY=Ç5Eò˲Ó9på™A—õŒ'Þ$ò%˲v»}Kûm²ä0ÌMvNäÙ…Xp•áð„Êî€ႾØhòÉ)z~írqÛívçlD›1Àš.$«ô0ë°ÂXXjޝnÜv`ð5o(ëU*œ÷ºŽÞ„:ñ%„b®ŠÂÁ‰hz×RÙ¾¾-­îW¬(ŠÂM³²óø0²5]Ój—ñðž=̪+±µÊüȽª–Ð!G‰h{õó??,üù{=ßþèB±§$˲™³Žm‹ïëÌó¼À€;:0¼èv/©¬”s@£¬Na"ÙI]˜£ôÍŠïsVE°,!,HKìd"Æ_HnST_Â,twƒ’i€ú ¬‘hj^Ô`ž+nx<žP(å«Ãó¼Ñh ‡ÃèH(r82OŽqÝãIãyÒ‚pF VéQ°Væñ¬«”[­wí<ñäDpLíœû]è?x€Ñ`û\VKò×!www#iÌëõf­é Q‹ €à>ÿϔޤ½ñ+”){å3@ f€XXðN™O1º2»[*B°.NŽF.¡ƒ²öë•sáQ£Ñˆù¹2àýo_NÒ¯rdÕ¤XÛøðs'GýQð†â¿ÞÛûg7äL'¬¶5.©[wb0ÙIê”ïýy݈‘ùåCÙªR– œÊ@  öÚ£bÆ+¬ˆ½"íú'LºÅÞ_°ÕuŒC"ê¬áp7Ú®7ÍÍ5L«ÕâÖÐÐÅbA¯~vhòG‡ðñc“QŽOµ 4‘„Ó†X¥GÁ]q°•9#Ô0º»V|þ÷þM1k·Kƒq~_(™„õäÿµÐ´±’n K¡”üuˆF£Á`íŠ §Yþ²Ð íº†;ó®¸{á»@×/Ô\“ÓŠ‹@ Ó„í”ïlFa2Çyà{^CGV6mZX—Våõz€¸Ýïç÷ôÞ9n4ežvשQ´}ÇŠº¼>-óå­®yù¬¸ûÃ]]ß*#œ^[· X}¡³}îÎÊÊJ‹¶U¡BâãN — îôÛÑ_ÿ¥úñŠÔrBΟ™â3«°"\À·) ªtÉ…=T<ˆ ø«¿svüáçr:¾“„3°JKš€¥pMREÓt¦#U®Ì,‘Mó·ï8ñë:í¼ ]5´YW"ëâhÇEè°i+ì7¹,ËÅ? ‚ H^"ós¹b1mk€%Â~›X%‡ÏçËÕ1„P–ꃘ—ƒ;Äãñž@ÇdÜ-î24sÿê¯JÆx<dQtl8þÓÃ!€NPGS¥iùòõ Wbþ–ààÜðäÞ‹îórV6U´WêÝQ1©J8âym¬É5(+æãî’‰ ,uHËÄ’#öúcy;\j†‰~ÍjFŽDzCB¥¾¸ä/e«5­âeYƒÁ099)=ŠAo8×C@ °fÒ…°ôÀ=°JXC«’°ZóÉëþjMÍGÄÝFÓB-fMâ¿7úÛ: Ùìñ2ÿXäêWÛ`‰$N¿-óÞÅIooïÕ~ „iA"X¨".`):¸@"‘è žB»[æßUǶȌ ©êãØNê§ Wb¾Ô±†;±ô½Ã=ùñËØ­h»7xú’÷¬Ì`ª:õ‰;µ[Íû!,uHËÄÒ‚¿”8ü‡¼N ÛU XòéW¸ÑÁP8µäVklEÍ—õz=:®Óé\.—Á ç×9à‰È¤˜!œ=>6=XjKrc-à·‹o)›‘ã/éozx¡/Aä BžOÜ©Ûü^¶¨VikØðƒAU±ûÄWNB*ë‰ç/¸‘M‹Ž¿­ü¡|}¡Édòx¢1¼‰XtE¤Ðî•8ÿÉ(`å$–<*…0˜&…p=°TÇ6åo%ÖE÷±« nc™™UÊ–ö7r-×G,€ X‚ sEì:xòÓi»±¥ ‰Ë›N§3NÀê{“´kÌ-IÿM¡¤L1¹<¬¯ŠE`Je±XÀ®/.1ÖŽz@ù­®>pUtñ_e¹bÞx X‚ EÒ<ÃmŸÏäØÄ×ÉÙF`9C£ç܇ɦU縵ü¡|}ÐÖ"°†…XhXoÔîŒÌ°rkÞ|SDÀªµ¬5é¬þˆ‚’¯Ï{ºÞÚJú'–t»Ý²,3ÉÂ)ÛÛÛ×­[Ç­Ù /ü‹²GD¬œBÁž dîà.èA þî29„)®×î0$ô ½J›®ÖÖ’6#°æÞ‰s#¾aúB¥Ñ˜¿E° íüKwoþ4˰‰1‰+®%éÅ3o„^øvª3nûB{çyÁœïÁe⇎ÀÒmy?[ÖÄ-Üêë{:ŽÉÉIÚ…Æï÷«úhXãî¡aÿoDðF„€èÝà¸ÑÈYNþfjZuŽÛ*>mÕEíh?ø9¥Æ®­‚ÇùO¶@+'‰K!\$,àÝÚâkŽŒüYÙìrÖ°DQôz½dâHSSS\Óàô †@î”…†/O{ÈR@A$wÁ\A;^ÏìËä¶´Áçó¥úTùéw¾O6ËLõfC~ÚsÆE`¡€5KðNœÍåùy:6‘`ÈéŸð„Ь)ß4L&˲’$ÕZÖ½3ù?a)NßxûàÛ­Õ;’X®ÔÕ•ÕJ} }Á§Muf¶z}Mý5 ùÃËÞƒËÄ%-`ný]ÈK¡­­M12ãy¾¢¢âܹs±cãó!E ¡ òŽ=ñüñŸËë?ìïZË_7äm[Ñûˆzf³™´C¡P8–$IÙä8.müG\–#°² X9ɬRo6–e“†A©P9ä% X°¦h'°FüÝ~Ñcâ¢úT¢€cccI,»ÝŒÑÊ5l»*;#§÷êw|8íu"Ke‘ÜGp@1øû$;Ùººu·¤:„kÚáˆsm×ëõ‡Ci·u½Ô>xˆ|Ô¿I¯×§½ z= f Þ‰sCÇ2«+òOôGc¯N ¸v¯Ní¹É0‹ÅívëYC½e}—ûˆ²× ­ÕÉ‹lrï^ýqÚˈѾá=³¿|d ÷à2q‰#»c“ŸäYMÛðÓ¢RR#°"Røço}ãÀ…?ªöO‡'Ž?K6ëø–*ó*ºåóù&''ÉfÚð+vÆÞ+1+k €•“Xç•Iþ  £££ô¿ß¯ØFЇ; ¥uEͽ øÎ²>I¬ÑÑÑÂÂBÚ]E}m-7K<»,AY9ñGòã_>Î5lMÚS„‹ÃêrÔF£QyD ¾‰_ÓáWÆ+¬3°b8ôÀB.­Õ|†(¬Ì¿ŠX'úÛÜ$u@·ñŽp–xüEøÄ¿ÏîºA®0è,Ʀõ¬Í Á¤|!÷_{äìÈ»ÚG1ÀÜÔðáHü#ŸæŠD"±¢7iÜ`ˆ2qǬì‘>lþô÷÷ßsÏ=6›Íf³ÝsÏ=ô_…D˜.Ãæ–ùy`e"`9Nbb§@<óèÃEQÜ\{=Ùìóœ&í¤V("ƨIѵÄÎ&žF,AÙ Ë!*üJ·éN õª§§gll,Õ™~qà1_(ê:¡c ;K>À“‰€5…8ä217¬cm‘¹BiG¤pÛù—m³——çp8t-7î|$Õ&/ZšSšè—úN.ä¯BYfˆÙ3m3,c-ÔîN’øRA«N’,ýß?‰V¯òXó ëFU¤¬.ÚZe_IïaY–6Ûú]#°–Y°<ÏîÝ»7mÚÔ×××××·iÓ¦o¼QÃqäx²}…¹È<«fb€•ÕVÝõdsÄ!,ÈG™Ÿ¼­­-zm×}A’.]”ƒZU¥A$GÁ\´µµEŽ¿(vn3Œáÿ'Ug•ÑA™ž8x¼ÿ-²sSÁ­V]¤(k«MÜçÞ‰sf}•´3,D¨°Ê~5iï=ûÏóôê©Ùlæy ¦¼ûKõ‡[w3éñ¹[€ƒ,x.p—2²gä¨&ÅX €K2¯hoo'íYE`½xò?»Æb«c镟½¶ä¾Ë>ÞêØMö³ÀÝPÿAUH‡ö 'kÄ…X—ƒ¬ XO<ñĶmÛ¾üå/;‡Ãñå/yëÖ­O>ùd¶¿wys"°2<¡(Š•|½#¯TÙ”@ôKq\”¤¢$IufòÌlau¬ëDß|.¹lÐÉêH.‚#¸ عs§x>fY¥Ûr7W·q¶'Q¬}çž#{ªí«ZìQ_ê´X¾8å†ßê9¶Ä–>ä¡Á;qÎl¨‰¹œš‹Z‹ö´gµa- щ͘{àèù·fµºMw’våT»FOdéƒ÷à2q)“Iþ mß¹€Õ3~æÇc"ÃÊ’uj~Ħ/˜Ž[¶½ŸšíÛ Ìeªíä´–Ó&oå–<Ý”>b™Y°^xá…|Þóàƒ>ÿüóÙþÞåÍeðÀr8´SÏóÄÖW%`À {¬ø`Ÿ·CûÌ6›M»S\GÚÒxoÚKEAdç0iëZo›ÃDQtù'O {n¬¿ ’VÀН!mdѹ\Z |tÅ;‘¾òì™o¿Üõí—»ºÇ½‰}> ³2r–jËjòÑ›çâæ¨IýTè6ÜLtF-^<" £ÚýA®XÒ:¸C¼ ZKYx Fü¿ùO¢}/¶› ¾pÓw L, \¯×¯²]½»ìA—¿žßͲ¬êX)b“Êë*­Öˆ+nþ£Ý™Y°NŸ>ÝÚÚJïY¿~ý™3g4)++Óëõååå<ð@ggg–/0'™gÂL,žçëëëëf¨¯¯'zV¢€UcYCö ùω²ZS£I[K‚-ª%mŒÀBÉYˆ XŒ£B£gªYš$Iou½$JÑYª %ÆØBhZk€Ê¬FwäòBÛ`}ûå®GŸéxô™Ž7ÏM$öt:t3þ1C€p8œö{¾Œk˜9ƒ,EN¼<ûkG¹"]1óMÆ^’¶†X¿y燣®þèiùË]ÿ`39h{,%„ªÚ¼úîê/9 Çq‰X<ÏWT$Ÿ;¥À¢ý°sVɺ€åt: è=………SSS©úßu×]Ï<óŒÛí>räÈ–-[®»îº'N¤ý–Dëw†a¾úÕ¯Ò)Ðííí.WÌþˆn»\.:ívižÁj¤"°í3$ÊUôƒ@ãêgèèˆÅU>}š¬[J’ÔÖÖVh¨´è¢³Æ°öŸW}#-Z…ÃáÄÿä«ÛÚÚhkììQº›êÿC&¿béæò8=‚¹û+®ä3(ÿÍõ_q…Ÿ¡­­Í=x|tq«qžçé,*‚ ò[]/Í«ko¥çÄ!"Õ5 Ç•à1åèÿÉE<ÃoûÛE¿†Ü=Ãúª˜€E¸xÉ«q…Js“U]¥‹H¡nOlæ‡eY~ë­·zf8vìXâ5è6î!{"Ç^XÜÿx†ùœ!é|&ç~Å~zb“»¿b¹žá‰wH;läÓž!­€ …¼A÷~jêrÍŠ;Z«w´··Ó+ă[Ï€eY•€¥ÌpR•›3 Úÿâ °f"°–øX,ȾúÕ¯&•b k0ÙvI7 ^¯—^³ ‡ÃV«5 frøO~ò“çŸþ•W^ÑèÃ0YÿKOŽÞùýh•ô=­e/üÍ5EQÜ¿?½§¬¬lõêÕ©úgÂ[o½E^ivíÚuàÀ·ÇŸ;ëz[ÙSi^u}ɇõltmŸã8»ÝNTËõë×jÕ›ïÿÏÀãWÚºí÷™>÷›ù\*‚ È•ƒçÓŲ;obýñ×itîèèWí ôþqøq¥­ã ?¸ÿÅÎöó¤.ÏæÍ›µÓÀ¿õÒ¹¿ÿ}´í—nküî}ëæð+dn<ýÎÀ‡?¢Úù¡««ž~X]‹³§§§··—ÞsÂùÚ çkJ»0¯òÎÊϑ֭[700@Š(!ê´ÍH}'½·Ai3yÃÝ_QÚºÍïe+šçó£A–ÁßÿSèÙ¯)mÃÝÿ˜—¬ÚL[[12ëêêÒ8!Ã0AþÒ¯ßýž²™¯/øØš¯66¬âyþÀ$ ¼¼¼|dd„ÕÔÔd4O:Eö”——777Cü{.aÇŽÚAXßx¡óž&™ýïiú—®Õè|%=‰&ëX‡Co599©ŠÉÒàî»ï¦E>DÁJ§†Ò§ªDÐyš¸«Î‡%Iª1SY„¾sÏ|·ÛsBYéL—uH|"¨`),ySA2#’=“Ñ6§KåJHºªyÁ‹{ÝTs­5ÏN/`ÎÊ Cè‘ËÌÎÆ¢Gnozäö¦wÄò^/^Jâåp8hhÌ¿Š™ñz› McïKSSStÉNAœN§ê„lm+[ýR9è >ý¨òG<³o^? Ady‘‰‰;mßt®Âó<‰Ÿ’eùž×ÈG ÖMžiŸò”¦UÙ&p—ª a~~¾êë†I;ÿ¡#°ÊÑ+›d]ÀZ³fÍÉ“'é=§NjiiÉðð+-´*CfU…«…°a»Ô¸ÂÀÆÞUü¢{ÿ¥ß¼=þètºY Xq&î½ó¼TA+I…™4[ °iõôÄN™†å`'¶yݪ» Þ(íŽö€¨B ¹¼T˜»wíc÷®ýÆ=±Eµ¤&î<ϯX±Bqù¬ªª‹Ž¯47‘}ÞÓ¤aQBŽÊ"$HT]ADž¾DÚl wú \RRBÜ™ÉÛhPòõ8c^7uÖõÑ/’er,Ã0ªø©T)„_¦VÁ`0¤Í‰rÆ,œÿd•¬ X{öìyê©§è=O=õÔ]wÝ•áá¿ûÝïvìØ‘…ëÊmhwO ý¼ê2X,Ã^[rŸUç »u{އ¥`&Xtb-ë¨.Ú_vAÈŸØYj$ZŠ ¹Žà2À=pŽ´YGeÚþôÓXY™¼è>‘£ÁöEÖ²5[$I¢çôÃ<)ƒN°æÞ‰ B%o2¢•IOHð%1bW2ëëë”7“Ö äÓAßYÒ–$)“/Õmº3q§ìÔÊ|A– x.p—2´€ÅØKÓö§¬òòrå¹Íó<™ôy:$9Ú‡7”òú’ÄUo£X…P#+­ƒ;¨<@1+›d]Àz衇<øÍo~Óét:Îo|ã‡úä'?I:Ðræ7Þøûßÿ~tt4÷ôô|ó›ßüú׿þ­o}+Û™sÌ3K¥7ÏD ªÌÍï«þb«ãFމ^^D÷{Oët:zÑ>©€ÕßßO]ÇTEÛ²,Mö'öG–q#ˆä 8‚Ë€‰‹±˜m÷+zng4ä³®ƒdÏ®¦;†Mêà®A\V!œ=x'. uE±ê1Iƒ°,Ë*n•¹™e¢¤©Ðˆ'MÌËË£§=ƒÁáp$žG×r½áÎG\ÛþB·íƒd§ŒX¹ÞƒËÄ¥ qê&¿(iÚA(1Z\<–{½±Èñ:Ëz¥›Ãáа«ÎSÀ¢#°PÀÊ*Y°òóóßxã#GŽÔÖÖÖÖÖ=zôõ×_·X,I;ùË_þõ¯½víZ³Ù¼k×®ÎÎζ¶¶M›6eû"sëRJ!¤ýøuŒ~£ãæ{,o¹Ç{2“¬uëâŒ~ª¡„6X¹€j‘œGpPm‹=i™‚YG` úιÂQg «¿~Õû€v±LûoG("»£KË ÄÀ;q¡h(ŽM5“Ú`јL&0°¦â¼ØôcÀ ÂÒétôj«ÙlV9¸GÑóî¬êó?3Üù¿É>i #°r ¼—8ˆKÙ5FÚŒ½$iŸTXô¥2' ˆžÑ@7ÙYoY3a³*+1ž#•€e2™TUþY‰H²<6çÑJ IDATãÅ0è•]Ò¯¦ÎŸºººçž{.Õ§´ËÕîÝ»wïÞ}.)׉K! ¦O!L”œçyô O"°+¬Ú…}J{Ø!(ùtºX€hZ,`‹ëijo*mm°A2@vÆÊë°|yÚþ*sÓÓ®·È涆[xs‘ t=ép8,BòWwrú¥™ÓËìF›Å"Ê¢MCIÌÄäâ%vg“ɤ8þÖXZÆ=ÊÎAÿÙÕöí2™ºè^ŒÀB‰!‰²w¦&Ã2V­Âô ÚX}¾Ó’Íò.0”Û QElpp°¶¶–îœ6+ “ŸŸO×îH5æ F¤èü§Ðb0êçû®hõ,$õy1„EQJcu<°èýCI?–dñ‚pœ~dÐ~À©À,AÙ" 1‹I'`‰¢H8Ž› ø/’OoYs8NÇC’X|fXÀøyd©ÐP2ë,¨27“#þî°·ÛMwN;aì%1+Oï„ÚýA®äéq˜Ñ›kAÚj3HEÚ:N’Å Ó±Òɵ–XäÝøøøÄÄ} JÀòz½ªgûèè(­T>îiKyÐó ¿Ê6—# É–<ËBy‚»I«2Ô‚{`ÑZÀÒëõʾ"ñ©?+;ÏLº]÷aÒ'é2f[[,ÊRF`åªDrÁeÀT÷ibÛÀ8*´;«f„o¼H6kì͵…«æp?Ù ãG¬¹wâB'`iz`AÔÀ®/¶é‹¦Ã É‘aÿùZËZ¯7îpíh,e{™<5 Ë’s˜-Y1§,x.p—,²{œ´[òüAp¹\v»]iÓe4èWZ†eÚÆ7ŒÅ‰×ÏÔT CÈ9ŽS=ÉÍf3½Çív;N&ÏòøÞž©©)'åieèê+:é%K‰tÆVû*±‚M–A+W±äqDÀòÅY XÙóÀ2 Jøe¥•Xý®sžp,3éÌOõÏ [\GÚ•àD!×Á\Ø™™å¥À¢ÅAÙwb8–?¸¹ôf¥A‡_¥åw‡õvl²¸¥>‰Ë5’¼йE`@¥¥Cد´|gk-ki³ H¥Œ [P)*–’EˆVî€÷à2qÉ"OÓVqªnýýýÄÈ,i– òŸºÑí9I>*1ÖÚôq–ðªUµ)§§§“†tì=;þè3 »ý™–¶¬àQÀÊ.˜B˜«Ìªá‚ Xô OÏäH†°M_X˜­$(ËÒ‰Áý¤O&F -`a‚ HÐn;ìl"°:]o‹RôInÓÖå¯áüùó“““ô!v»=iñ5ŸyêÙÜPcÿÒ­³½~Y@êŠ,ìŒóúà”?‘4:ÓE8è;'ƒÚ¥A’¤´é$t$Ú`!‚(ÈÓ—H[CÀ"ê•$Id eYROã·‡tbôMÒߦ/º¾äïå8ޮšÁ›ç&ÒwÒ¤Ò)„Ù¬\…öq÷¦óq_pwú ôÊ$mq·ÂÚJÚGúÞ íŒLÜ «IR´ìpP»?‚ È•N$${fô&–Ó˜F»Ï<Š%;&cõªWÛ® …ÂÝÝ݃ƒƒäñÎ0LUUÕŠ+’:¸Ë2<ôǦ¼Ñtò<ûÔC[ :œ` ‹IžŽ%o’,÷Nhaét:½>É^’W—ÇEõ¬€è$ O;“¡,,Dˆ ¢ Mg”BHH~Œø_;ó ÙoÑñ·–Ò¬³iœ'é˯Ñh¤g5<Ï;Ž}ã‰=g¦fL!ÌU¬T–ç²G`©1-`Õ[[L¾ @Ïø™­V‘±€,Ë¢(’kÁét^ºt©¤¤ÄápDŸ#œžqTÈ“²$M °¥+çyÍHViooÇ¢Å9 Ž`®# £@ô&{iZcT2)ìõœò†£ñz6o¥íªP(¤²Š(((hlLQõâÉ‘—O’Íoܳf]•Ö<ÑïÄde©u`ʯ´/^ò®*Ë×èl2™”ˆr–a+M«º=шÂ^O{‰±NÕ9§ªª®Œ ) •Kà=¸ ÀA\²d˜BHHZ‚ðÌðѰ]33r–[Ë?iÑ¥¬¬ÀqœÃáØ´ó<_^^¤:ÃáôæSÓѯc˜®ÉS¢¶òòòxžOõØWqÍÊô¥‘ù€V®2ŸÂù›¸§:YÀ3g+1Ö^ ô€ ò€ïl£e‹òQ$Q.I„žžåQÒÛÛ+B}}½¢a±ÅuâdÔN%ôÒ÷hW,ÝUïcËçb3ŒdƒšššÅ¾d^àæ:t B6P“³®ƒdçJëf=“G¦*äçk½ùÓÞ¥»šŠþ×­¸Þ0wðN\@Š-{ÏF_–ÒÚ`Æééè{K­e-°ú|[a@\ –2‚Œ£’ìÁÂÜïÁeâ’EvÇô˜ü¢T݈ Ò¬“ÈÎzë•õUQQ]Ëó|}}=-W)¯œtÖŽ K3kk*,ß¼»QÕY  €•«X´€•&…0«&î4tÔZÖ(ô{O‹,]:N"„ÃL4VTÀ*ª!j*~íñÄïbÌ< XKR+ÉQpsú%9m B˜É > 0Íöí_ñ'†œ~Ò¾£µŒÍÌfI Þ‰ ÈŠ¹ú¸W™›õL^X€7â ô•ÆaiXÊb aî‚÷à2qÉ"»ÆH›MBHlø,dZÀª6¯V»jÕ*§Ó©r*TŽåy^[‡¢ °n\SV__¯ÑY,Т"W1h¬4XJe@†aæå÷û“î×ëõôÉkÌ-¤=ä=’¢GóUe&!äJÎA²+–ÄÇðeiû+s;:üªÒÜd×€,Ëtž¸ÅbIåÝ®0H XÕhý€,ŠcV÷ø,,ŽÑU[c/E½ÞvUç´XlF`!‚¨‰‹Àše ¡"BõOvMy£NðzÖP¿ºÀ0ŒÁ`°ÙÔ>FoÐX×­J †,.•«ÐXÏ©zúýþÉÉÉ`0êƒÎ0̾ɓôDM¡8ßÐPb]Ql©tµ×ÏAMúÇq,Ë’Õû|}¡ÃPæ €$‹¾ÎëF f~u|Ø¢Zky¦@5‚ Bkú,•¾”ŠH$â‹L÷zN‘=k»bg –"ªªª´W,G¨€ÊíX|Y*4”XI{VX°Ò¾©ÛMl°Nm-ÜÃPY„X ñUq½ A@]…0½‰;®ˆPtøU¹±‘eâÔ Å͆çy’*H«Í”7D`]‹ÖR¬\…®BøÜ»ÃϽ;«õ½‹ŸYótÏ~nÛÍkR>SœN§ÇãIúÇqÇÑ+“ÕæEÀ€~ïi•€e±XèÃóóóÉ:?·j§áÎGTç—&z#oÿViãŒpIA’Õ‘G0ב…YG`u¹K]E(³×ÔÚ×Ñ¥ŽP(Dz¦±#¢,,¾3OðN\@¨ž ¯,ƒÆòœJÀj,Üðæˆ)(úÀ/º/zK±\ KAÆÌ3y9è9è“}cFÿ”ÜïÁeâ’%C,bßujðm²§Ê¬6“!–j&ÖþsÄk}µ­ÀbÐî,(`å*´ÖÂâ FîúÁÛÏ|öê=­é_Tèt:U~b­eÍ)á ¥=äëŠÈa£'–Ê3«¼¼œá #Ñ9"oÖgõß&™-+(¬Ç^:÷í—»~ðê…¤=].½é÷ûWm%›½žvb®i=°}ÜAâ‘§ÇAŽNk°)E%bïŠÀ:5xPš9CMa“‰S—HV"°X–UUOöù|i/ °rœhæ*;V>r{S&=ƒÁ  Ä+//çy¥ A’apÊß=î=Ü3¥ÄN†"Ò7_OGuòiÚé °•äÅ }ÜAdwL!ÊÄ ¬þXå™ 5;™iFUL°Àd2ÑËÃÃÃf³™$ú _ìû"IF¬\¬\eûÊ‚í+ 2ì,±²s8v¼Oîïýô/ŽK ÅO¹I›çùúúz§Ó9>>îõƹ¢2 £ŠÀÒét›k¯#V¿ïôŸGž¼§às+!AÀJ¿¤É0,_.÷([²s˜)W'?#‹Ú ä:8‚¹ŽùJ°\Ä\ ×ì~nôĘ/:uc€¹aÕÝ"À^;†âòQÀš/x'.,´;ᇯ^ÈduÝ 7ÖXZ.¸ßU6Mþ¡ÌTo䬠{΂÷à2qi"OÓVò=ÕK+-`¹ÃÎãýmd³µzÇpç”êå‘LZT–Ûív:äx_çø£Ït¤ºN4ÀZâ €uEÀó¼v )Â'¯­3êÙO<ùnDŠ»íÏ O'=¡JÀ‚øÚUÀq\SékžÝŒªà#þ‹??ù•ü’i.ß4Û,` «€X“ƒ€ÖÒ' ¹Ž`N#»ÆHX~ÄÄ÷ ®\¹R£ÿŸOÿ†´«-«KíÕ0×,JÀâÑk¾à¸°¬(6'î|þøHߤ¯¶0ÉG4ǵØwv»O(µ¢÷àøs»Ë> šëm1,žJ!ĬÜïÁeâ’B»9üß ž&;“` ‚ÐÓÓC²|A WÑ^îúY0rØM…+ŠVq‡TOc¥íKÓ18­ñ)`-qÐ Qó‘í5øüöGnozèº:²óôP’û\ÌŲ¬ÃáHŒÀâXî37üs~^¬§/ìþÞŸÿ×¹Ñãs°(, —4Aâ_C¦‚ÁÁÁóçÏ'Mô€q÷ð±¾7Éf‹}§òÜž£€…%‘%ÌÎÆ¢GnoRþ¢„¢$ÿänUOÕ”†çù‚‚‚Cy«ãF²³ßwú¢ç8dœBHÚ˜Bˆ È‹xzoðéGƒO?~ë—d'c/Mìét:é©‹ ~T±êõž:7~Œ|tÏU3 ›9N,mûÎSƒ.OÑk‰ƒXHîh-»£µÌ¶¿OI'ì÷ùC¢É÷˜ ¹„¡PhllÌ`0ðôÑ÷Ÿ'÷÷þÓ{WÓ³2¥Q6=‹ã¸uüõƒ¾³ãÁeÿ;ÿSnj0s¶H$’Tó%ħ¢€… ÈŠ4ÙŸ¸S£aܱ’!ÉxòE²³¹lÓµMwB²…7"`©,›yžw8¤[;õð õvSœïF`-qPÀBRb2põÅæ‹—¼ Érçˆ{c­úEˆäÖÖÖöôô@Â+Ù,°–ÜRþ'œoœp¾ªì „}/ö=~kù' ó¢šTFXU¤XK—ËE*† ¹Žà’Eì:xüã`M˜Š¹Pi(F*ëÀ…?žˆy ®áwÁ̃znXƒTÚê‚49YHZðNÌl«~ô™ŽIO&=¡_øäµut‡D¿N'Šâ®’ûžü(‡ $ùOL½zMñ=áp8é-CF«æ(x.p—ò¥žÄìlLÜßzʼnJN:Îðñ0À@²…7²ê–tMBi ¾ðÀT´(¡žcðáVƒ“Òr -D‹5•6Ò>=¬•-l4W­ZÉ<°”†N§`68nÜ\ðòiHòï»ô+²9ë¬ÉÁ´ý‘ËC’Õ$‡À\¢ˆ‘ÀÏÿ*sõ Â3V".ÿä¯ý+Ù,3®h°nä8N‰´Ÿ›€5,Ĭr;F`ͼ³‡ÉÀÑŠÕwþØõí—£F¨LX‚ ʴĦ/ºªà6²ÿ¼û¨º”jÆBFuTÀL‹ì%.uÈïÁeâ’Bšè#mýŽ w>b¸ó¶éšÄž‡ÃlŽ[ “$)(ùλ={Ö?XÎ×)mB˜Ñ°èʼnޡi2«j.·¢z•s`¢EK…íŽGóVèB„IQ¤«D,¥¡¼#ɲ¼Ž¿N”#$Ëžr†F†2˜½–õY:¬[·n±/™8‚K“Ы?–úOÍê%`ƒAú£§~ÇŒ.EpŒþšâ{ò”ž«€E{`¡€5_ðNÌ*ŸÙ½â»¯œ%ºF=¤ UM¡éþ««UN')€µÊ¶ýœû!t dMýéºðÍI¿"6‚z#c)=“bDv1|ù‚ÿ"dÁÁ{p€ƒ¸¤Æ{IÛ𯲥)‹ÌðÙ …ú½gˆïA‰­êÎÖ‘O5R5h§ °ÖUa¤^î¢ÅšÊ|Ò>£EHÅ0 ÇqÊŠådz»cèòÑ ¯sBˆ1ù‚,/â HsaÝïÿ‘|Ä­¾Ž[¹MãØ`0xéÒ%wé²ÇãñvŒ<Ú»—|´Ñq³M_ê8Ù8X–Õvùñ‡D%! ô[bK£v!ÈâR[h~ïÆògßU;Rèw% X4,Ãn*¸õѨñ€ïÌÅK×&íLn:ÞR¤S,É9Ì¡€… È•F$3dX¶°F»»bzEÓïÕ.¼¦áV³æT…Mèõzmïv…öØ+íº*›FOdi‚¢EKEì®>“.K!U–Ò&!÷*w«ß{f=ˆ¢(˲ö£‡u”Ã*¡ø²k Ä0péµvAÅBhœx9“ž~¿_p:35wB—Ú9_t1ÛMŸÿmÒª=½$Û¿_¦ò ÝnwGGG8öE¦_|’ì¯+hVܯ >NVu JRÍ`∠‹ËçnjH°Ž÷%/ÙISmn)³Ôz{@ù¥3¿ØÒœDÀ¢ËÀ7ìd~õÇby“öWè¶ÝÇ×¥½A\Ašì' ÔŒ£ti*ÃÐáW–‚¤l®»þ4QÀÊä’è„ë«1+÷@ Ñbuy>Ë0J!Âîqob!ÂDR™¸C¼˜Õ\zŒ 2L¢ÇÈYeYŽD"iž>œž±—F rÉ’äa‹ÒhùÈe ­­mç΋}ÈÜÁÌ‘Ó{ƒO?šIO ••á_ÓV¯àÀr‚[–ÙúöäsA):)Ô±ú»V?<=MýÓˆÀJŸ?èŒåb ÂïÄls}sñ×Þßâ F<ÁÈ¿¿Þ­ì<ÑŸ¤¤ºªˆ•ƒwì6ß÷ëŽÇ”Íçé3ÃGZ*¶¨Ž:yò$‰ Qù¼á}?O{mŒ½”-þøì~²Ðà=¸ ÀA\:ÈTþ`&½ßï§7}¢~(ί¬)h¤?UÍ[2°dNÅ"°ÖVbVî¦eˆJ!B¥­"L{ˆ*…~²Ð«ž/³Ö*mäA_´ü¬}ܧÐÇ}I€…\G0{È39Ds†­Yo¸ù¯ÒvkllLºÿ¼ûè€÷,ÙÜè¸EœŽ--hX¤šO*±‰f•Ôö ‘´àxøÊ]ÍÝ»ö‡´Zó¢çÇÝAú/³‚b\7C}}}KÅU•¦U¤ÃÁ‹¯$ž¼¦&¶¨2gT'ž œOß É2x.p—Òl¬P(Dœú¨üÁ͵שúÏ!«Ê'ø¢–5¼YÕ“s°4ÐY„Ú…2ŒÀŠD" ŽV²9èïTè㎠È2CvOÌëx†1~ì‡À¥˜öz½ª=ÁÁƒãϾ3ñ<ÙSj¬[cßI÷œW !õÎ_‰’S° C'$ ÂR±ÒëõkùXÚà±¾ý¢¤µê±ÌRÀ»0«þ‚ KZÀbŠëµ;«òE92ä?G6¯ŠÏ„„yKÚU7h¤ °ìè|‹` !’†5•¶ND fbƒ•ÊĬZëš6ˆ¾V y»$Yà2° ÑÇAœAöL‘¶nó{ÙŠæT=ƒÁàøø8É?bY¶¸¸ØTÕÄ­V¯:&Åãñ¶/2ýúè/&Cq^?zÖ°³ø^€¸ùy23 C;BF]‚,$ÇØPc?x! y¼OØÓZ¦Ý_¯×—™V9k@ô€78}føèºª¸Ò ùù±ê7îÒ5—6>P\\¬q+É®±ðþ_(mi#°YVħÖjwVåûχ¥h1e³Î¶²d­ªÿRãKbþ`N‚’†–ŠØTlX*w҇ü¾Ü¬³ù"Ó–ƒ£þî ScF)„µôhooÇ¢Å9 Ž`ö #°ô7=¬k½-UÏ<€3‡‘ œÑhlؾ=ó/"f=0êP©WpUáùzµËýÐ&µb£×3»,ôÀZðN¼œl¬åIûxzwNÇSciéš>¬ì9Òû†JÀêëë#mÁŠK-Úw±,ŒKŬÅïÁeâÒ!.…°¨N»³JÀ¢ëÖç¯cuêØRãK¢ƒ{N‚)„HÖTήaæXáP¸Šò’ètr…Ç3ŠÀ¢<°¤IôÀZЮH.‚#˜=h,ƚʥ= ]@: %š²§"‰c–¹ày—þ”7m+»³)k⩞ÒA4>]…°’ǬïÄËÉÆJÀÊ ¡òvTgYOöë{S”â[ŒÆ8%7í¬†áËct¥P¸e×XÚË@² ÞƒËÄ¥ƒ4ÑKÚL:,ZÀòF\½Þ²¹Â¶!±ÿœR1+çA ICsy>©Œ®"Ôî¯Ê^Nõj‡Ãáp¥9–JÓï;ýÜÀ÷¾½ïS¯tüZû+0k b·ã"Fnƒ#˜Eh+?€E¿îJ’ 3ý*Ð%Ž{¢ÏFgø››¿ûïáÞ«f ‰ÙCª8YHxOS¼/'k«lz.:î›ô9½iÄ&EÀ*3®0re; tŽÆ‰Å@€ÞE1mh9S¶’´ÑkÑÁ{p€ƒ¸Tˆ„dgÔˆ–-¬ÖîN½EÊmãÏ„¥èã45Wå7%öWEl¥À E¤®±èd‰aâ¢4S‘4˜ \}±ùâ%/H²ü•çÎçÇ’JÖWÙß³>VÙ]„ÁÁ¸(ÇSPP ´éW#ŸÏ'Ër¥¹‘ct¤<*L'_>õË[×|(1L”@{`É… ÈÒFvg%Š"~¿?­Š¤@û²ŸŸ>BÚ›j®ÝX³ ŠŠŠTW ªBú#íÅLI–G]±wõrS‘#OÇ®®È?5àY†ý «‹5úët:†aX`kÌ-]îè]v¸çõ5ÑØFQÝnu¬z(J,ñIÖ®”z+miô<×´cn?AdI!Mô<^P º4RDêÞñÇÔüVÇn½N-N ‚04ÇÎyž}WíŸ@˜ò†B‘èõT˜ysú”Cd ‚’ž– ›"`À÷^‰såXæ×ŸÞòÁ­QEÉétNOÇùd¹\®TèC…©qÀw6îÿÔùKíM¥­¦€2q†A–kH ²4 åàŒ´Äé“Ör_¢ºä÷ûG&ßC¬°<7u”ì¿¶éNÒ¶X,.—ºÔZª,½^¯J W1îŽM ,³A]ÄA–>j슀'\ÚÃ0ŠO\­e°Žõ½ù±ka¦§§Ó~ƒÁ Ù¬U©-k$m m°Y.Ä`¥Ë …B¢(ÀThä˜óÏd…©qµ}Gb¡äÄ·NŸÏ·w0øè3ë10gÁB$=–¢$ô‰£êÈȲì …BJcwÙƒï­ú–Â;x} ùôXß›çaò,Œy&68œo‰zd!hkk[ìK@æŽ`–ˆ3À²h«í‰v9ªðx H açdHŒFZËÖVÆ|¯’¾EÓ“B:þK;f†)÷ ¿Z ðN¼ÌÌÍ«ÜÔ``£9³Ó~ç«g~§´bH›ÌÒ)„Xˆp±Á{p€ƒ¸Dg#`ù|>¹súí?=.Ídç䱿%÷2À$ X‰°,;èÌtÖ„î¹ F`!éYS™¯ñi("Ýý£C¯|iÇ®¦"íó$}b€Þ o^ IDAT©°¯pÊ­:ÇÞ±ÿRv¾Û÷æmM:NeÓápð<wTA•ì‹NeçcÓZ2E.;wî\ìK@æŽ`–gc€•4+“o$.wǯv6ÞA§c[,–Äcɤ> „ÃaAȳ7ðêEúÀóc1×-4ÀZ(ðN¼ÌÐ…OdPˆP Kd®ÆÒrÁu¿zúÐ÷#bøŽõ«€‹À’Ñk±Á{p€ƒ¸D&bUY™t%{/{yøñK>zç5Åw›9$T K Ã0ý“™ Xk1+gA IÏÎÆ¢GnW;ç¹üáŸîë•d|!qÏ÷¾ñ¿¯mp8A ¥Üyž§“_Tþî³Ùì÷û+ÍM:F‘ÃpizðèÙ\ , B}}=­a±•Ò`´´jèOÿÆ–Ç& _®ßõà<2‚ È‚ {¦H›±hwž[– /^T‚§„ð¥ñ`ôë€ÙÕ¸‡î™4‹,-8NúM;‰8NòàÝ{vB#,,$Gi­¶3 (ig‡Ý°hÔ§\çÜ#Mù[{¼§D) 2È¿;òo.³2œÄý€„œ§".…p#°Y&ÄG`Õjõùg‡¿:œ¢w6æ_UkY«´#°ÉÞ:û§bæÈÞV]]rr’6ðY² €…¤§®Èüؽk÷¯­´ÿõPÚÓþÈ}?yçô7n®¯¯O9•èlª`±X&''uŒ¡Ü´’øauŒ¼Ýê¸Qi ‚@¿GC" ïûYÜé†-ªåV_7Ë_‰ ²ðÄG`¥™-Í-‹¶81õÙ¿ºbsq~Ý3iVÚTA…OŽh|ZéÀB$'áÍúú"K÷¸"’Ü>8½¥>¥ëœÓé$7i‰±vwÉGöÿ:,F%­?ýÕ¥ºjËjÕQi#°{)cÌ—nnÙ5ÆØKµAYúÄy`iF`ì~‡V¯ ¬qSÁ­Í¶mdO¢€Åó|â[gßD,Zâîl^]¡•E„ä(è…ÌÏÞ¸â[XC6/^ò~ï•óÊÓDA÷—Âü…¼SÕXbgë÷ž¦û¨\Qiw5²øÏσ˜¦j5²° Ý@®ƒ#˜%â"°¬³ŽÀEQ;|cÂ3rqê”Ò ôôzO‘®_õ>Uç¼¼¼Ä)`&¾ðâÉQO+xŒÀZðN¼üÐY„™Ø`*Í«>Òú¨IÓ…»<‡»¥°€A¬%ÞƒËÄ%B\ aê,AöŸy‰lçUjócͶí±7ǤsÕ[§$Ë´VM!ÎL–'…Ì‹GïXÕ3áûé¾eó[/žûØŽšÙæ’(ïT¢(V››`d`*4â‰V]tZ©šÿ±•IN4ƒÔ*ôê ·}~V—Ì´Èup³Ä<=°Àï÷ É+OÂþï¿ú·Sê­­[ ÷ž|‘|T_ܲµþFU†aL&±{‡™ªjJ;i4¾Ò>9àꟌ®jZòt}ã Õ™w6¥ùiH†àxùÙXcÿï£ÑZìÇf#`@-¿ú 7ç±—ÿJÙôvz#‚E·z—6…زF©÷¸Ò–Æ.p«ð¯Á¢÷à2q) OÈÎáèò…5©z:ÎóSÇÈæjûNŸSýØÌd±mÔ$Å‘ ­K ËWd¾|ëkž=:4á €'yð‰£·¬-à‹·5êØ˜vîp8œNg¢Åi(Òëõ¢(9k‰±n,Ð2ÈýÞÓ-öI¿ÔW¾>xíÃJÛh4æåå€xáx6Z¾0ôûÔo¿ƒðY\d7%`YÓ¨<‰Xìö$µrdŸØÿ¦.@çdŸ÷4©ÚÃó‘m_¤íÛ ‹…°èaÒh|¥ý‰XþàÍkJ’&•#H޲¹.–3øn¯–€åp8&&&ÈIJ¬ÃáàùúºÂU½“ç@ù¼ûèÇMôQÁ`P–åTAèÑS•RXhƒ… H®òûÿõý Gå$ÆQºäKq0æéŸGkʳŒ®ÚÒ\UUÕßßO÷ÉDÀ"+mP[˜ÄôY €…Ì—‹áëw¯ùÌSÑ•Ã7ÎŽ¿qv\io¨±+b–Ïó+V¬èîîViX‡˜°ÔZ×*ôûbm#BOÐ(¬ú 9­8*»Æ¼_Z¥T'”}®À?Ê­U è®z?[®6¤GÉqXs°RÙ`ýáØG{÷’M¢^À¶†[W–¬Kz”ÊÇ]5#äy^•ú­ðâ‰XþàÊ’žAr”Íu±¿ó탮PD2è’;lð<ßÐÐpòäIeS–e«Õ ×7¿ÿSvžwiuÜh·Ù}>ŸS)Ër8NG©@×¢‘°!‚ 9Nà‰‡ÄžwɦwãÆ{z Yey8;K¾®47ê™<†a†¡ df+`Õ €µ|A Yº®î§oö$:GКÿܱáˆ$';B qˆÈ×TóD`’;]‡”–$IDöRºÓnþ+¶f½ÆI“™\2[T¾HÎ#˜%6k``†œÝOìÿšbƒMÏÆÞïXÿÑKIª¯ÐŽÀJÊ˧F¥™§î–zG™ f¼:K;‹òóce­”òÊF½ycåõdçEß»<Ï+æ i}ÜÙ²X–<ŠX‹ ÞƒËÄl#žÙ|úÑThm+RÒxnÇ—`æ-Q ; O56=8ìŠ&ß° [enæy¾££C%ú+«wÚ LÅ"°ª 0kÙ‚²0ìl,üѹ½é‘Û›½²sÒzãÌ%UOUì(Çq‡£°0ö^·µúÒ>ï>‘£ot$êJÅ”×Á錟øwHí4!Oà?iYaݺäùJH®€#˜%ÄÄ´ÇÆÆAxéÔS¡H@Ù£ã Xý7ï«úb­e ðÆ¢÷¬ÿˆÆW˜L&m/žD^ ò÷`þ`–Á;qQØ\K XNžLÀ€ eד}Ó§'<£I,Azf cÉ{)cŒžV¸eרÜ~2ð\à f±ë`&Ý‹ÃýÑŸJz--‰6C(5Ö9‹ÍfÛ¹s§JÀÊ,…ŠÀ*À¬e ¦" ÆggêRMxB?Ûß«´“f*>Á’$ [,žç§¦b•æW]mÖÿ§/쀠äëñœlÌ¿ (ËhŒ[ÿ·Z­¤Tp«v?ñïÒx¬n«<Ù>ø´ÒÆ,A.'²'öp›Uq…BSSSºzμÓó:éöàö¿Í÷–3:× ¥í÷žiXÑ`àòÏL˜žž`ž9ãW õp\ø…Þ“&“Ö<ïÕÓ±uˆ;7”kÿÉE2÷q‡Ï•*&Cà ÉÒÏßúÆ=M_ ÝKQ¯ÈdF•JÔ­”g †þ𠆮¶¬7n‹ Adq»¤ïÄrÆÏýF̯…é^^ïRVy-̼èÍIÀB¬+°…çÞ-•DÀzîØðO>¶‘®E”Opiiéèè(Äû°0»¦èš##R6;§)Öôô´bƒ¥2m)..V¥Rëoú ½) ž&–<‰X‚\.d9sK’$^ª²/íîîfY6‹¢x¨÷õˆ͹.µUíjÜÓÖGÖXZ¶®L^¹•àt:„~r”6†÷¤ìOM¡¹µ]EeHæ>î`µZÉí©8µët:ŸÏ·Ê¶íàijJŸÓÇ«ó_)ƒ5ʦâ“ÊÁSÙdË%"`ýéGª/åj7p«¯›çÏDYB~qæa†;¾lI«Û¨[‹C†††èõ9:ì`Ê;Ö=~ff‹©µ®yX}(`]` !²ðì^]\h>t’f¬Vk]]ôöö’áp¸Éº ªyM'ƒƒ Ëò¹sçAôI´Q€)¬&mijR[h!s¦­­m±/™8‚Ù@öOƒ´1F+èµb£èüA†a$I"›n·{dd¤··WùÜô;dÿ ÍwAZöJû<€—Χ±ãIÅžVÌÌ:x'. Š»ÒV|Ü5:sG{Éy<ðz½M¶-妲ÿÕóOO£Aßi=° ÞÇ=‘Ð+?L{dAÀ{p€ƒ˜UÄî#‰.¤±¥ y|7ïþÇÿè¶ßv»]e^l³ÙHûHÏÄгÄXcæl——çr¹f+`yƒ‘IOôª :¶Ì®5ãBr°…GϱïÛTA6Ÿ92¤ÑY §jii!{ü~¿^´T™cµÏN¿­4ÆÆÆzzz¦§ãf–Imi“1Ï,®†ƒh-‘ vîܹؗ€Ì Ál0+wZÀJœ¨Ç3èëôD¢=zÖpmÓÊ˳½ª™ §/òVšgf*ö´bþ`ÖÁ;q±˜{0ŒD"̵%2rÑBŸ¢yóÒoÂR2°Ê5>¼û¼4ѧÑY(ð\à fñ\,kJ÷íõzUþž´—ñaʡβX–5 ýýýª£Ò X´V•ÃÄÎÒîÉ!0…É i³UÐAUŠ>ÕlÛ>è;§ìéõœººè.=“‚ ¨<°Ò XÀV˾è|TšàxŒ#@$ëÈÖíÎô£,UµÎ5Ö–^cɳy&bß`µ¦½¤?]„Ä™ÕN {{s¾ª\š7¬.ʤ‚ä"›kùçÞVÚïö:º®N£s~~¾b€n·Ûb‰ŠV&.ÿ¦š¾Ôóÿ+1îðä çk[ ïP,‡Ã1<¢ú¢ÈáßKc$1üêOòîl¾¿Ad~ÐXܪôÆêÃEQ¯×À”wìâ¥e'L­e-äåå1 S]]}þüyú(·Û­˜*¸üáÇ÷öкǽ¤][„ùƒË°¬ d*‘œJ¡ÊÊF2%дʼʪs(±9ÜëiWœ° ¡PW&[T# ´GÏ?Ù [fý“Af Åæ§QèG™ÑhÔét^ot6¦ÓéŒFãtxrÈ›Ïm©¼(iÈLÀúÕ‘XêÇ·•ýÝžf•‡ ‚\™ÌÙÇ}jjжæ\W±=hšzõÌï”ͳÓ›l[íP,IÏó&“‰X,ËÒw[º2QŸbËVžxHi‡ßø©áî¯0y–Yÿ6A…B–Åó±µ4nUš`7ºN—‰À¢ó‹òª-:f °œN'`.—‹°öuN<úLGª/­)@k9ƒ’”,B„õðS'îÚP^Î{~ÓI¿ƒÍÀ¬°n<%¼¡lt{NÌGÀгÁÂB„Y ½½‹ç48‚Ù€°`6)„F£Ñáptvv*›Ç•——¿xæç03Õ+Ϋ.ϯ‡ÿ…‘‘‘ÒÒ”KpðÂäés=Ç~ñ®¼ M"–x'.³òq§S`Âáð¥K1¯ÏééénýëãýoMxF@’ÅÓ/Þ\ö‰P(d4*«E)Ë@òbOw˜‰IWÞâ ÖîᬅʓDö:#ŸÖßðÉúÅHrð\à fiè ©NÃXlE³VgIr¹\ªd¶CçÖ[×+ CÂ÷uŽk|ZS¨U[ÉuPÀB²EØ3îýÁ«’v[[ik±%ý¬ˆ€5ê¿è§ÍœÍh4ªLÜ3ŠÀ¢,¬,PSS³Ø—€Ì Ál_‚p)„z½¾¤¤„XápØdÉ;ï>B:4Û¯™˜˜°Ùlt:’RCƒ'Þì%í»6–—¢zµôÀ;q±P|Ü•*ìÁˆtrÀµ¥>¥©œê•Œ¾yËËË \Þ‡¶~þßÞø;eÏïÜ€÷lÓdSee¥jÆâ÷û•ÀIA.^¼¨²ø€Éüü¦k>ÊüùûÊfèÅïÄÉâñè¶ßÏáߟù‚÷à21{ˆ]I›kÜLJ¡_„‘‘ZîžA`Ò3š˜?3Ú}šªñÚV5F`-kPÀB²E¨ÁÛG[v$¯Ën7”åUM(%Aîñœ\cß•h CÞß4` cÿ’I“iž‰È°Û“"’+àfƒ9›¸ëõzŽãôz½òº+IÒ›g_ŠQƒR#g­·¬óz½gΜI~®dœpýîð Ùüäµu™‹\6ðN\D6×ñý3UØÿú¿N¼ùèµF}úÂí*Š‹‹`KýîÆâÖóã'•G¦^,é®´X,ªò@  XN§3Q½·Ûíl½§àµ$€4Ò|úÑT_Íðåì®g{Áˆ ¼—8ˆÙ#C,Azzz!I:¶"`íÝKò+ò”üA˜°Z[[éÃyž§'=¡SÑ&Ë0ûžF•ÑòÎÆ43.$§A ÉzŽýç»×<¹¿çD¿K”äTÝþxjìŸ÷Ô ‚ô·"£"`ÀEÏñ5ö]>ŸOÕ#°Y¢P&îL~šéý(S,uL&ÙùFç³äÓÆü«XFñyL¢(:Nb©36üE[¬fÙ[]/Ÿ%•¬k Í·¬-™Ë/BåË ÍÅÄÇýp·óS¿8þÔCWÍê Ç‘:37¯øÈ…ñSÊÚtxò7]ß::ùÇ&ÓöbClEÍï÷'?…ÄWê6¿7räÙô=‡;guµ‚ ³%>ëšTÝœNgÒ7;˜™ºÐùƒ+íI[y„ò<___O àí¸ÿÜ„43¡ÙPcÿö½kçðCÜ,$‹<|CýÃ7Ô ¾ðþs‡{œQ"ýàÕ‹°ÝãÞKyH·ÛM¬‹7Tì::ù’$K0v†FuAQ%IJU´K)¢#°PÀBär0«,U !F%(ãR wÄ­¶ÃÓlÛ–ö«÷uŽkø›þåµuXaAT|öÆê{éd´ªÌ/öç騕¥Ij#øý~§“ÙP©ãÕ!Z‚ (/Z%–êU¶m¤r¨ òùÉãàÄmŸ.5Ö‘ódra†Û>Ÿ‘€5t6“³!‚Ì yz\)&ÃéÙ†­s8‰(Šî€“ά6µÀÌzYày>U‘™}çbùƒ×7Ïáœ,$ëðfý]ËïÚXNï<ÑïúSG´ÖÛG7›Fw± >¦àp8ÖLmm<¤lv{Nl.¸-ñ+Âá°¶ç먆YY…Ht†ùý,$޶¶62‚H.‚#˜ â¬4Xtn‰ÀR6;§‘j,-$Ò^E}}½ÒÖ(£ÖRaû‹]µi.Y$ðN\DX†ùÕ§·lûú¾Î‘ha™'g¬<“òO·U6pAU äÉ“'¯»î:escÁÍ£n!+ý)ƒ|hâwV~Že8 ,‡ÃÑ××'ËêpuƒÁàp88¾>ïÞ¯É/$ »'Âû~¦´1kAÀ{p€ƒ˜%¤Ñ.Òf«Ö0ys±šE±sä8ɬ+jÖKf²©¼ÐiÛðïëœ íë›Ó”xF–(`!‹Ã{֗ƬSc_øR쟕â~MÃm´€µÑq³2í£I+`ÎÀØKea@–$ç[\¿?™' ¹Ž`6ݱ9“Ÿf‘På3ë~ÑÝëi'­J~¥ÄÛ“Íw{‰}®YYøÈíM{6”aøÕ’ïÄÅÅnÒ?ÿùíW}¯àKïN çÙ**ôqaÝÄ=Úáp俯êo|í¾KhJ¯34zÚõÖ:þz˜)8F£1Q½³Ù¬Ìˆ ïÿJòkðO‡ßü9È2HcA §Ïì·"ÉÁ{p€ƒ˜%¤K=¤Í–6hôt8ããã$¥†Fų#ï’ÍÆâV9}ú %¥FÆÂjŒ–ÑàXfW XWZYW’=Þ³.– øæ¹ _H]¢‚°©öú<]4 ÁºÜ‡ûddƒEeÊè㎠H֑ݳˆÀJê]ÓG¤™Øz»¡¤Ü´Òb±žF£±¬¬¬®®®¾¾žHÿ² ÇúbXŸ»©áÑ;Víÿ»k|ùº»6–£z… 4•YŸ~x+Ǧ¿MƧƒ—Òåçùòòr¦Ú¼úöŠÏ´l'p¾î‰DmÝÊãñOêeÒÝ­ŒÉÆð3îbX»˜ö²Aæ†aà¢O4_dúŒë€ªC(Jûul!5‰X L[[Ûb_2/pžHHÌDUp:ƤUÕ[–eò¦Ê0Œe4‡ý”H Ð1ú†üM,Ë744Ô××ÓQW@ âў؋÷æ:ªW9Þ‰K„]]õؽkÿ|v÷ ÒgÜRRwëêêl6Ã0 ±â Š­ÀI†ÛWœlú:}0“EH X´Fg§‚V¬ÐÇ}þà=¸ ÀAÌt !£TŠ4Бã=S1¬Âf9§s¥½†½1÷V£ƒû• XÈ¢Ag×zÁ²› onù Ùìp½’â ÷d5"\pÐn ×Á\pâ¯,Д‘"‘qÀá8NY·dæ‚÷(éSg]o`MF£1UVDÚksÝÿcïÍãÛ8¯»ß33Ø ’Š)nZ¨}µeÙ²ä}·å-Íb·Í›´MÛ´Y{ok·IÞ¦{ÜÞ¶iÞÔI®ó¦©oÞ8‰Û‰Û±cK²eI¶vQÔJq—¸Ä`_3sÿ˜áƒ` ) Ëù~üñç™Áƒèã<ó›s~'·ã;Ršà™Xâ4Ö¦ 7§B ˜µŸÛ²eKGG‡Ëå¢#¨(Ñ ‚ ll¾©Ù–Ö¿NÞ†Ywº„V¥‹°ÆÎù!Zð¬0ˆWˆŒB#7aºËªÓ™nç:ÈŸ&ãÕ-×Ò:q4Î'AN…§/« ª&–ٱ ·©HPÀB®·­n´[ÔJ¾©Èùñ°Îä6}ÜÊ©NX 1Öx‡~µ %`É(`!r…‘Ã3dÌ8‹®€@lz0”Îæè®Ý TkBŽPX×t €… F¶€¥À0 ÝEAeY¢aɲœˆ'¶zî'¯ŽÇúg’c±X,™L& ò–ºº:2§å ‡X‚|ˆ)ifT3 ã5hgœ/k4”neØV»’´ž*+Ÿ¹ç¬`métÕÙÑ«A ¹jØ-Ý9âÕžqÉKíÖæ{ÈæéÀ»À¥ûõRBÈP%„š¸#r…ÉÈÀ2°èÛTrÇûÎù_J²ZWè2/Zdë„,Y†c”€um—[g2‚ Eá­µ ÈépRÊÕ:†®"ŒÅbkk³=„u&ðn,£Ó¯jjjL&“âp’$I’¤ÿlËj2–.Ÿ£¯„ 2¤™Õµ SßÄX:“A ÆÇe*&†fâêÇšØp ¨eXR³‡ª¼eÖV)(`!W“û(¬WONèOÞ¹ìA;W«Œ)1šH' Ý…3°š@ pµ¿2/0‚ NF ÂâÜe÷žÿÙÙ]·MèXJ5î]Þš|ó‘ÏÄÇ̱õ³ÏüEIöG´ËM5¬®»‘ìé÷‡§4î@774LÂbZ»š´%Ç‚2?Vð_ƒäÏÁ ƒx%'çX?h³ÙÈ“¹±XºSjKí²H0Ã&ê}Þóöß=5ë-¬ª[éXJiëšN¬,3ðL,}¼µ2ž i 4¤,EŠb€YS¿ììõ¿;1•¶PP2°h« —ÏÖÌ*Bdà9X`¯åàÎx;õ'Ó–ÍfK XTV§K+`²=°’)é¯~ÚK6ÚÒRk3R• €…\eò™a™Íæ:³w‘Mµ ”Aî UÆ‚ Î’Oâm°’¯ýGòå§’/?…~X‚\ 2LÜktfò<ïóùÈæ°¯ï_ýŸ@òê™Uu׫#†1l2-䊒áãÔf`i ,ŠÚkͬz˜$/)rUÑåã.^Æ ,A™ÎÀjìÔŸœSÀ÷g“8Ö\#eÔÖÕÕ¹ÝyŸº=ýVÿTD›9ö?´¶¨/T(`!WºŠP!Ÿ–Ò9~Yí5dÏÅÐ$I¢+žçé–º¡ðÖ3‰çžL<÷¤xfÏÜ¿=‚ Hdÿe2ÖÏÀòûýd©C¿úV8‘ö︡ñ!"Ü›Íf’`ŸûCe8J· D AšÌBƒ29,3k[îL/fÎ’±âÝS”d X˜… È•@¢=°ŒJi,»ÝÎ0 ˲Gf^#;Û–ÆÂi‘«¾¾~Ù²e.WîE þþåô•íoéìnvûý‘ŠSï«Ì­«Ÿ¸¯{ttôggqA€þ©Èùñpö…Éívó<ß%oxß÷rJN@8ÅÅ..¶//ð³ÊÇ€K½aß¾}ùZÞ"eFpa‘£|êðKd“q·øÆãþ7é´uתǗ¤6‘6dŠX)ÂþòDŽLÕÁÁAOóÚÁ}Y#®ðÊ <K¯“.!Ôf`i"˜SÀ€Uõ7œ A€ÉøàLr¬Á²˜¼Š%„W<+ â• £„ÐÈÄ]“£±³Sqµê…f“û2eÙõë×ÓWË@ P__O6ÿéWç¦gŸÔÙMýPúЇT!(`!W‡…ûڇ׬óý뻿>¥æ^½Ú3Þݬ•¥\.WWW—ËåZÛvbüeç…БÂ,:‹€K½ åFpaÞüŽW™w‹iý]…¼+)Åúg+£à–UooypppìI¥R~¿w¿ôäó§ò#}AC÷rÏÄÒ'£„0KÀÒD0Ÿ€Uon\l_~9vAÙ<<°Ýû(yµh÷¦eÀ™A@ž¹$Ç‚¤/!d¦¥»Ýî|9ˆžƒqáâ2?ûäŒåØ\9Y–5–,K‡}¯’=mŽ5^kú¦¬¾¾^s©&FfÉ”ô7ÒÎYOÜ·’¾#U XH©p´€urâówæ¥\.—Ëåº×ö؉WTk(ÒIÝ]cÊXÕÖÖæ,¢æºo´ìzäOØó¿•دAF’¿þ&Ù²ÜýY0Yt¦»Ýî‘‘QûBGI}Æèv4~ü†?ÊÑn"Û7:'èàŽ W‚ŒB£“1§€Å²¬Ýn_U=°ÂÇ·6Ü×Pߨ¬^ŠÍÀÎÌ6-#ä’?ýkÆ¥ú3Äb1ÞïÏ–óðv;ãvëô‚È8êº;¹®-…ÌD¤²‘|C «ÉàlC+p¹¥y…d2I2ÇÍf³ÉdÚß÷êLbLÙó¥!ã©^]]æ´ ÿDP­Ñ—Ãü…» M\@*°Rážõi7÷½ç|Ѥè°p9g®jÞÜXÛ:ºJ jÿ;?LOhiiÉù€‘]²ÖúØ×@Ž…½ßYiâ"ˆ‚þ…A¤p„ƒ?‘gF•1cuD¯ùÈ¥5ñ>gúƒËåâ8NSg‚ÈÎÛVˆcsÿFOâ9÷k¸ °ä Ù…p.&îf³¹»»Ûãõö¿LL€ %g,ƒ×-¿A¹>ël˪´€õê×Óû²ø ¾ô,ÖÇ9°L¬bëeYzñØwÉžeµ[×w“,–eôÝŒñé£u5Öä»=Dª°’ §§gýúõKk”qAÜ}fêþZw†aÚô{ß}çï”;Ðѵõ;Ý–ôd‡Ã¡ÿqŒ½Žq·È3—DAš¸H "s@‰àÕþÈÜÁ…4Ñ—zÿgù^Þ~–ŒÅë˜ .<Ï+¥Ðš·ˆ¢8=šíÎcæ,·¬|f½ÿÈÛ].—Ûíž ¥;]<óêÍŸ$¯dѲJT,éÒ°æ‰A¤|Á…xzOâ¹'ç1làšÇ³{¤jÖj¢(Š¢x&ð.Ù³méuv7Ìzÿiük&‚é{æÏݹü敪P¥1=EÊ<K}KÁ|–2¸yåC??ö½”$Àe~ðÌåÃkZ¶BñXÙˆpÁHDþ˜%žƒqÁ¡ÜÙÆNýÉš„{.¦µõ.ç§ÉM • ÙG møé ¬Åõ¶â¾7R‰ €…”ÊM׽뛉€õ«“ãÿ 6æ›Ï2ìG¶~æß^ÿ¢²y)zn,ÖGÜÜ °N½©ŒÑÇ}þàms¹ƒ, É7TÈ4Ó–]¢§BƒúÓAà““c±´Gék>BÆJ¦=’°Q÷ÒÄ ƒXú4f”j=°4dÆd2i²¨ˆ>Uo÷\ÓyË{ýo(›?;òÕ-×2ÀÌ!‹[¹CqùÔH$|>Y±,ÛØØhµæÍb†O¤N¨­îI'ŠªÏÁ ƒ¸àd”.*"Ëdá î&›K›5,–&¡´ ÿ8e›ÐŒ‚RRܶºÑnábI¦"çÇÃÝÍy{ÀolÛ¾¢qã…©Êæ‘™×hýŒ2.¨ç4õ¬R;7¯ï H•!&`Yîÿ³B¦ ‚p*°WYÙ\Ñ´±Ó«—L‘!`a:=‚|°ÔXMd­ÄH"UcÕ[N›Íæ|ܹæ#DÀê›ì9<°{k×msñÀZ´TqùÔ`z2” —«Æ:+KÝšb+ bY cƒ•ÁìÛ3ZŸ€\û§«¦\MGwŸyaa¬d2]çh¼@²Öau XxVÄ…EއäOÝ0Y˜†Ö|3ý~?íû™”bg&“Í¥ÎMÙoÉYBØÓÓCÆXBˆh@ ) H©ó}ÒÆí{ÏùžzåüS¯œï½Ìù®X,¶º~;ÙŽôFR<&`1îÆ^§ŒåXPö_žó—G ³X)G0‚E ‰Òl `Ö“#ýŠF¦ôq9K+ðé?H6oíúËèý4OQõƒô]4`+ bY #`eGÐPÀZìê¼yåÃdóÅcÏ$Ä(Ù,ÐÄ]‡¢,:«:Kñ¬0ˆ ]ªÂ6v‚î*…f0Ü#Jj²•ÇÑì±.Éž“3‹¶áŸ J›0 A )5º›KÕ§qA|òùSO>j÷Ù©œ“ƒÁ`³m©Û¢j^’, ¾®ö†]¼’l¡;‚ "û/ƒ¨.ȘÚF°äh CC_‘ mϲç=MÒ¯<Ö%ë_¯´ÉP^ AúÔóeù¸k0°à‘ÍŸ²›ÕÅO$z­÷‡¤îOÅlá»(èjºùWN:+Q‚ ľ÷ȘíÜ\øû#ÇÉxsë-Jý †œX´ ?f`!PÀBJŽ{74iöä[*Ë;: ë|è(§ uC6/Ç.¼?ýK D€¥iTÏó¼ßïÏ÷éÅf`ú¸#B!öZ?Á`dÏ÷“·¯þ-kÎyÝ3Ì:ÏtpÇ5 WtŠ @€î7ÚÇ›-~`}ë &O(ã¡àé‚>•3³MˈûUê…¿ ÀÛíŒÛm·tS0ïø]ÆÝb<¯ÒÉŽ R^` G¢JçœÅG}gÇŽKk6Bf ›…A¬0ˆeA#mâÌX¢dGP#`1 “3AaÃ’íkZ¶ž¾¬Þ1ž워6µÙëõÎí«fg`àã^ Ñ€:އÁášÛG—)xVÄDìOWê;¸@(€áHoH˜QöX8ë­«€¢2°´ïgSf`!(`!%Âðððúõëé=µV†¥sôt8)Ë«D:ÍÆ¶í/û¶2¾¹“&Î@Ô¶e°šNýŒ~Éà‰ê,LC›ùÆÇ ›[ÉdG)/0‚…³ Xû_—fsò=ÖÖzË"ÈoA3Ê+`a+ bY镱^ÈŽ æÍd2éŸæ»î³ó‹OŠ’zéð%F¿ñÎÿ²þ[]ÞÕ:ïÊÇÜ2°äÙ±\’*<+ â"ö½GÆì²ëô'+X§iÏ–ßSksA+_Ö¾}û”*ÂÌ ,°,!DJ„쟋‰­µ©« J˜ö¢†vï W§ŒSròÜÄñB>—mËrF=5Ï#T¸P(w0‚"‡§å¸ÚÞž±9gƒþü|XšúAe`˜~™õJ ƒX`Ë·ÃbbUa'’©´«Tv5™•†§y‡gå_Þ÷m—-r•coŸ9ýéT£z`YÖívç;Ú\,{Ú㦠}Üñ¬0ˆ …ÌË3£ê†ÙƵ­Ó™œJ¥b±ØtòòD|PÙÃs×Ú*ã¹y`¡’ XHéâuá1Á2l[MÚ”ýÄð~Ééw-^9·ïF†OÎó‚”Òåàn”~y2°ÆøÁAŸšûÉ2,° Í ‚1!–Tè°pN+¦Q#ÈU€a aÖè@–a:O¯d}“VˆN½¢iß\ÿÿtÔ¤ïí% é].írÀ0ŒË•·Ê¯hw <° ú,AâÅ÷ɘëÜ &½UJ(’eùl } ¶¦e+iLÁ0 Ëj•ÃBôÀB²Áµ/Rº4ÖZû§"ÊØJ®h2˜ß^»æ\P½ÎöŒøýj4u8š·p«vZv=‘H$&&Ò ÍfsCCƒÕš÷*)ÇÂoÔrEi¤ ÃxA*ƒ w¯äÉÀ:Ðÿ:Ù\êYoçÔ|c÷üéW‚|4ÖZ‰!ÝT(¡Ÿ`6›c±˜2.DÀ§­îæE{nèï)|Ôwa²§»icöLQEQÌç«5— ,ªËš¸#H5“i€u­ÎLžç‡††âb¸?œ.‚¹síGè9Çiô",ÌÀBPÀBJRêLã­-¢M5´9W² «ØÊ\ N‡Ç=Îfòjÿš5k4Ú?»h©õ±¯YŽîÙ#˪çC{{{ݲezŸ$ žïA* Òôˆå™*³8Í&g‘2#X ’o¾XI!I×nlÞ Qul˜¥ãàÄŠƒX.Ð6Xô%giÓ+²ØÐÇd2±Œ©Í±ŠÜ ÜM,,•L&óuž™ƒ€¶ªÎÀÂs°À .ÒÅ‚ °xžWÚ¸Ÿeõ¹]cm릶éiÇirBó-{~Q’}³ù­ ƒ—°’ çÏŒŽIjNÖÚFk;©»î=x˪‡•q2™ôù|ÑhÔétf¿Q’$zAiüt”3³‹Wª¹W²,œâVVûÏ$.ÊŒ`d8¸µ „\XSñáÉ ê(aæ,Ý [Æ¢“ê¦Ñ£HÕ’µ1k%‡A¬0ˆå݈ðûû†ò³[‹Þ}å<=3‹MNN“KÁ£k#<Ïëý)(K‘ŽšuDÀ:2¸ç±mŸg€,Y*‘Hä°dYξ—U}žƒqae±?Ý.™[–·¡ßïçy^’¥sÁƒdçk~‹a2ò²Eó XŠ ÿT(!Jê ZCÅbBï#,¤”ñ:é ,ƒ à8n‰c°NŽî'ÖØØ˜,Ëáp8§€¥YÌeFäø¬öõ¤xPéA Aª„ùg` DÒÙõ›Ûoâ }¡+*—ûI#ÈU„¶éüÁa™Ú긕]þ¬%Ž•ce|á±!ß¹Nï*¥fž¬´†ÈF„섯¬ôJ© ,AÄ‹ïÉáieÌ8êÙænýùÃÑS‘T@[8ÛMÝ»4²Sò-{þ w¬DfA!)]22° (!ä8®Å¾‚lžºôþ%~xž€K—.ñ<ŸýÆ9Xl[º¿‰8Œ6XR-dd`ï%Éâ@8}ÅØ¾ü:“Â8‹òЦ‹¬ù€iœ« ݉ ã5ÌÞéqŒy‰#ÝmæðànÈU¨#`eï, „zÔ‡‚T+Âkß cnõ-@•Bg#ƒÜËï#››w:,µš9š ,M‡Öl&(Û„&°YPÀBJ‚žž}{æ3jñÇ5X[¦:e3‘ŠýÛ¯¿821páÂå2 *Úš7j ‹°ÐÇòD)#0‚"ùɘmì4œ¯¹W¼»ÕB§µ~ý’ëé Ž±‰;½˜ËºÆ VÄr¡q® rϤ¶¦/'ä¾®£f-Ùyxh#`eÏ„º2–tÇ91þ®•žƒqþÈþËÂ{?%›–»?£3Ùív÷ÇL%Ô'| 0wdÚ·+h,³ÙÌèŠb—ù·è6Ê@ª ,!DJ‚öö‰ t~~!&îÇ1À¬«¿éýé_*{|á±§÷þÕmÞO˜u¡Éó¼ß¯MÝ×Üaæ\ðiÐ X²¬ÿ\¢âÉA¤ŒÀD2&‡|ê˜33®Å†ïÐ\^.†‘ñu]·›X3}Á)ÊÄ=Û ƒX`Ë…—{ž¸/GAM"‘Ðt1N$~>ðìQ^)æë›9»61!r§×æXÍ1&ÅyŒ¼äï·¤´o/JÀ ,}ð¬0ˆó'ùú‚¨>`c[×pko×™”¦ŒÿœlvºÖ®jÛ=-[ÀÊw@ņ_¿q Rµ €…”õõõÙ;3KE%åqåšúÁGL/‡úß‘~rkÓïè¼q.%„ž6Æá’£<ÈÑ€4=RH1Q“3‚HÌFÑ»•±Ûív¹\Òô0Ìʰ K€ÍÝ·ž†.!¤Äpä4Ù¼aù=yÁ1ÎÀ ée`a+ b¹°¹Ãµ¹£ÐÄ<ÏïÞa*’ ½“b{³Á[L&Ã0²,›Y[³mÙ¥Ø9eÿ³ûÿåw6>©™œïÁÛܬ*÷ÀÂs°À Î!!ìþ.Ù²Üó¹ìçô?8ð¯£þ‹m ËÛV¼Ú󃔤.f,¬ýÛ>›ó¨… XŠ ÿX=° €…”.™%„e`)ƒë½É–äyßQes(rj4zŽv‘Ð0 †m['žS‹½¥‘ž*°¤,†O¦N¼ZÈÌX,Æûýñ˜š¾ÎÛíŒÛm “ La§<}yŽö*fÌàu.^Ñ´2®JÓ‹¹Eh⎠e‚Ëåºc]Ë…ÝýÊæÛç}÷nh2|ÇqÊõ¡Ã¹ŽXgÇþHþúµ5»Ò÷“ ë•Ñ…0Qu‚T'ôC»†³¯°Aµ?2Sã6íÐæbr_ß+±døÌØÍKÛiiÈÝâF#`fÒW¶f°YPÀBJ:«ÀBeÀó¡5Ÿûaï? M« ¾Ã3¿j±¯`Öf³¹ÝnÍ5‹9Q%IbY‡8¶m=-`Áæû ¿!‚ W—Ôé݉ç´É 9a31æ- w¿3ùceóbøøÅ‰Þ%K–Ðo̰Œì€mßÇ~¥}ïÀ‘*°p¡PîTI刟Œ™mCÒŒ™²¬¹ƒÁb,ò0s0’¶ÉërnÈ99‘Høýþ=#̓ϟ2{¿×I™¸‡‹ÈÀ¢±Ùl·­~ðý±×Æ¢jÄsÿã«ÿ3›Ÿ}Sªy QWW—m€Œ§ÍúØ×dYx÷ÿ(ö:r”—&ûÙ¦eúß¶ÂÈA¤\¨†ÊÑH³Ž0¶Zàô̲oð$I ‡ÃuuÏ0³2=CöìXußêÕ«[½x<î÷û·>¨««s»ÝC¾ôŠóñëÛÚr§âïX‘£˜±‚Xñ`ËýÒgôÈL,ß4p»ÝSSS‘ˆÚµÐd2)ÒèõÉÆ–&^’@|üâTï²ÆµùH× àã^CÄɉpU¹'ã9X`!Ó‹õvÎ×X©T*ÛlÊÑÞs?—gÈu5®iªk€X,F,ö¬V+ËäÇDùáý%t@ ¡)9kxxø‹_üâo¼wÞyç׿þõ¶¶¶«ý¥+Îðððúõë³÷ÓYSFX,ËÒ6¥—Ëår¹níüÈOÿ“²gpæìoN?çZÕ©Êp%gØ †íØ$ö¾¥lIý‡«MÀÊA¤\¨†f:¸7èOÎÙ½+%`¥R) ÄñX?Ù³¥ý&˜½(Álƒå%Å¡yh:”ñ?Zµ²¹ ¦‚Xñ`Ëýf XzX.—«½½ýÌUþæ8N¹hЖ·¾©Ý¹f0¬Zì½}î:}WY€;U3XeXxVDÐd`yŒï¦³—=¡Pˆ°DIÜ}æ%²¹uÉÊ úAp»ÝJ‡÷½CÉxJ½±jqÙ~w{ŽÞˆ£££´añª­‘ ¦´¬p8|Ûm·}ò“Ÿüîw¿ O?ýôí·ß~üøq“© òýÌÐX†%„Àq\várñínÞØ1´n(¢º#ÿäÐÓ›Úw4Ö¶BI‘Ðûè®kˆ€U…>î¸P(wª!‚E X9ð._¾\[[›33'¢(NƇR²zÃÙP³¨Õ½”ž@”,u¾$_ò«mwÚŠûí«† V<ÄrG?‚mÔI­ŸDÀ"÷–´€eµZW¹·ë½þ7Ûö›Ùn·{llŒ¬^l6›Éd"ï- +-`ÉU&`á9X`@žI Xl–¦úÂápcc#ÙÜöõ@\55³VØÅó¼Ëå*°¡Ëåêêêòûý{ö\ ;ÿàæ®¿yxu®ézn¡H•SZXÏ<óÌõ×_ÿ¥/}Éív»Ýî/}éK×]w"f!ÕIc1&îÕACA)Æff›çA+§^X“büÛ»¿*ƒ ¬äâñ¸þຮ!côqGDޤ,¨™‹€Fxž/ðEQ¼=O6×¶^§?ÿ2D53¢±Öj·ä.‹F¤Li®·ZLêÚ{:œŒ&õ–Ç‘U$IІEßdZ,–¥® vNÍÓŒ ‘÷ÞPÆ.—ËéL‹P‹-¢­÷Œ,[õ XRH¾tÆ›#ËICö²Gcƒµç|:ýj©sS,œ8þüÀÀÝâFGÀ—ËÎE‡GÔK ÃÀÇs¥_!ˆ>¥%`½üòËÿøÇé=ÿøÇþóŸ_­ïƒ\u¼N 1m˜' +ùrÚ`)– SÝÖ†Èþ¾©“»Ï¾¬ä’ɤa!»ôZ2–Ž ;‚”Ee`å»,ÐE†¤R©Ë±ô“Æu-Ût&]?ØáÁÔc©4X†YL™¹Œ%aÑvÈʳ4ºÌ'‘HI¡»n+ÙóVïÏȘ6½ª««£KMÜ«¸„A*yºˆ ¬T*•]YLAð<üÌ¡‹Ó'ÈKÝuÛ ‰ NO§û;ë Xð_û†ÈÒÎnï²E5úó$›Ò°z{{7nÜHïÙ°aÃéÓ§¯Ö÷A>0öíÛ—s¿ÅÄÖÚÔÇ‚(bž9,¥„PyŒ¹¼öšVÇJòÒOÞÿf2/Ä˰Š]´”ÜËÑ€4Ù¯?¿ÂÈA¤\¨Šλ„°XBq~:qYýD†]ÛºUþ0%`µ/`UE+ b¹cÁÂm° SÀRÖ!tV,aEíVU«œ9;<£ŠæôEÌd2Ñ ¤â2°Õ%`á9X`@š¦2°<‰N9}?‰D2™äy~``à­3/(e+à±.ñXZÒD)_©Têüxø©WÎçûç¿ÞI[Ëÿó~+:« A4”–€å÷û2n*<ÏÌÌL¾ù&_ýêWéëWOO}2Ð/Ñã@ ÐÓÓ“ó%<•;ÂŽ;ò!³Š0¡ÿt2°Û½˜uOLˆÙgìf:»pÔû+Þ}—íØD6¥þÃô_‘ýUuþ (ÃhæŒ`ÙýÕ|%‚åþWè.!djÜúG Í¿t0üýþS0»àk­ëªµ¹õÿнGÒljäh±ÿvìØQ.±À#ä;Ý9«|ÿŠj>ù5ÌwÚkÔÓÿô…Hy K XÊšÇir·:VÏíþ–2 ïHÍf³FÀ2øï@ X—úÏçœVú±˜ÛtV¤eôWTù” –û_1¯#LOÉIu›aYw‹þr X011á÷û}þ©óÁCdçÊÚ¼~ÑhtÏÙ©'Ÿ?•ïå¢5VÓ‡·.É÷W —ÊI<‚ѾúÕ¯æ”bàŠ‘£eÛUÄb±D"³9ÝÚ\§Ó©Ÿü’³ñR1\ÿw{ÞëWo;÷é––ëåMœ:ujjjŠÞc2™vîÜ <Ï÷öö*+¿CÓ¿ê ¼£L¸¦ã–õÜ=†_cÍš5MMMús?ü‹ä/ÿE[øsëãÿlxXA>0?ø³ä+ÿ®Œ­ÿ³å?×™|öìÙ±±1eLÿÊØl¶Õ«WèãþÏ/}±wz¿2¾sÕÇ~çÆ/êÏÿô³Ç¾½{@ýñ Ÿ¿sy!Ÿ‚ Hñ?9õ/¯ª’Ðß=ºæË»VéLP¯ {÷îU6†ioo€¡È©Ý?Pö[MŽxàGž¦wß}—¨]Û·oQKŠ–/_®ßã;ñܓɗŸRø±²<øäþRA®Òdä j?tÆÝâüÏKúó§§§Ož<™½ßf³¹\®_Ÿùá1ÿëÊ3c}léWXÙ”ó8ß;ûû—Ï~ÃßÝÞþì§®5œ†”/WN¢)­ ,·Û­É·šžžÖäd!Õ†·6m;:eÔˆ0;‹¤_¹\.¢@u97 =£ɸÉ`É}ܤÔÃi甆JkjÒ †]•d{…¡`:£jÍbƒúAÈôÀêô¢1‚T ™%„Åy`ù|>²i6›””½6ÇjbåžHE_;ö<ÏóôE,;Kÿs[úú#'ŒÓQ))dÊÁ5ª„üXñx|:4q*°‡ìYY¿­¥i‰ÎBˆ^Éèð‰…LClr«§W‹µkמ8qâ®»î"{Nž<¹fÍš«ø•†žžž|-oéB_¸hK1ÀRðz½ÊãGuIÅLN@RLŒDO/unÖ?r!V÷\ù“´ ´Ûí.0•£Äщ RTC3K‹°jkk‰•©>Šz¥´)ä…ɰ ö+41–î¦ ºožNßͶ78¡fS A¬x0ˆåŽaçì‰DèŠBE„ZºtéÌÌÌÈÈÈòÚkzø=ÊK/ýòúÎ;‰=Çq,Ëgân­^w<+ ¢D9¸3FîY›¬áàÄË‚¤¾jãj¶xïZ¼x1øýþx<î÷ûÉ-’Åbq»Ý£þQòÞǶµµ{r,f,&ö–UÞÂþÑRZÖ<ðì³ÏÒÖ³Ï>ûàƒ^ů„|0´·ç}8àuÒXy/¯ :X@ZJ3ÀtÖl8™Ü­l„O XJ÷}ØEK‡KŽò G‰ç¿ÂØk5sb±ï÷Çcêm*o·3n·aÏÓÆ{Ùvã{à«‚N‘² "(G¨ ¬·þdZÀr8Òž5ùžR*øý~E½€‘Ȳ¿ÉÖe³›²Ó&îÞ¢MÜ«!ˆ±Ü1Œ`†–Qý.Ó×%Qý~WW—ËåEqeòúÞÀ>IN@8å?8òÚP J›â2°¨Õ‹\ežƒQž)¢!ä_Ûø£§¦ö“ÍMî;7¶*Þ•“§ò©Tª¦¦Æår ùÒ+™/?¸rMKݾ?íF‡ JKÀúÔ§>µqãÆüÇüô§? O?ýôÁƒ¿óï\íï…\qhÛZ ^:k%„`2™¬V«ò  Ã±î¤_°.Å.$¥˜…ÕS‘ °€aØ®-bï[ÊVò¥ÈžÂx²v'w)˜¬–R°t"ˆ”ÕA9”îôÌÔfŸˆÐ7дĬó”’&(øNòo‘ÍÖšîœ-&h¦ÃÉP\ýP§ÕÔPcÑŸŸM5±âÁ –;†\2×BÕÉd29M®Õu7Ï}Ã?¤u…•³€â-[”€Vª„°Ê,<+ ¢D•2ÞâJG4Qú~.Ëj.§ÛÒÜ]»­®.Cr¹\t)‰,Ã%ú²FëõEê¢Ciy`ÕÖÖ¾õÖ[‡êèèèèè8|øð›o¾I› UH#åå Ü:*iè§—@yÙx¬­ÎVe,É©ÈÉ à›ˆòÂ$™L7P(¤„2m°%· A¹± X:VLˆ(M¦E9µwò9b®gbÌÎu† Y†æ—~… HY°¨Öj5©Ëo>*Ù:'Ç‘…Ž®Ûív:Ü·’GqñT¤‡WŸÒe X†Í—3òÇ«LÀB @žI×ñ± K çÓVss³Ùleá7ãß÷%Ò™\[=° «¹±Ò0Œ'R³‚W¹ÖVZ¹2HePrÿWuvv¾øâ‹Wû[ %„×™~ü8w§ÓI¬i¼~oøgÊøÀ”ú]£µýþÖ?!“Ãá°²dAEÊ+*`AxÆx‚ yÈðÀrd`Ñ 6›ôRI¥R’$Ñn2 Á˜ÿ+/ýN,©7-b€™N¤;þ\çÝå²5~½ŒúA XR™0 ´ºíýSª›ÕèLlu‹Öm€ÆjµÒz:ÁétºÝªïr¹:::½áõ®[ŽÌ¼ªì<Ü¿º~{É5‡ ,†ÎÀJ €… e†ä"cÆkl—N X.—kÚ?õËÓOÅ.’mŽÕ-öåuc¥¶òœsú‚èSrRè”:g˜¸ï•/ –:7î…ŸiæO%†g—¬-`6›­V+)L$t"Fî/°ú&Ë®'t&$‰ÉÉIòÕd2y<éÒéÔÑ—•q)g`a±z¹Sñ”Qfp³,z%â(’ –e9Ž3›Í$÷JÍ9+ËÒwöþ5õÀdjˆ~i©scwíu†Ú7df`å4=5¤âƒX `ËB"ØÖ°Ff¢ú–Íf£½Û Ë–-£+w¼^/¬®ß~6x ’â@”S½ü;×yw)Vq&î¶êÍÀÂs°À ÊÓÅe`ÑÙå"¤^êû&­^y¬­;}Dëg` S)æÐ‹†€6üˆ(`!%ÎÏŒ·–6q_€ ,2¶Iõ­î¥—üýš·œ Ün}¢Ñ(]“Xˆ€Å¸[ûšÎ+ÀÉ}ûȃŽÅ‹×­Z¥3?uäi«„3°ª|¡PT~Ô–Qúï \, YÞ%“IÍ…ååß?ué½ìãÔ™=74> ¹ª›³¡Ÿ[Î-«òƒX`ËB"H'&eƒEp: ­TY–5™L‚Íî;÷M=¯ìŒöl…²MÜK«Ø ÏÁ  Êƒ(ÇCégÞf+Sßdørc’”bßÜûCª MMÇíŸPÊ“Y–Uñ|дùd`¡ ?¢Ciy`!H6Xáâ,‹Å¢©ôq8ĉ&‹mí¸M³Lúáã‚€x“}–1ݼèq3c…ÎtÐf`aâ=‚T,msõq'h|”é™]ÎfVM‘ˆ¦‚c±¾ìœ5‰4Œ-ý´¯Ú,)wä©t&8ÛÐ ÃóüÀ,¤Wrz¾,+ׄ¸þõØw/N"/y¬­÷·ý11×Ó¯€j%Ó6§\r´áGtÀ ,¤Ô©·›Í+ˆc©DJ"î§ÙhÒ²Ó\Y–µÛíJs ¸¡ãþV۪鱀…µÿlä©H*‚”¼>¶ªî͉;i n·›Îá/ZÀ2^DfX¥[Bˆ %ΜÜõ¬`Ìÿ­Ý_‘f{ô8­õ×Ö?Lùfc-öåk+}}èÎÓè…  ݈pÔ¿`–Åb‰D"cê¨YÛ:¢ìì¿Ýü ™h⎠¥45˜:øãÜ/M¤«ÿO›¢^ÝŠçù®®.úæEI¿JHÑׯžá“d¿ÇºäîÅ¿/%Ó-hôë`˜RäÛÑ ¹2 €…”:Åê §e< f?ùB‰Vw^E_“æ/ñžXR¼öÖ—€µ[û£ì?<˜-`)X†?úˆ¢HguѦ‰9ɰJ·„íÊŠ <ïB²‡°~ôþ7ë+`ö¡•Ÿ6‡s\ ŠÍÀš[Šb5€A,w ôÀ"cà ¬œwŒù,e°Ô¹™XC‘^`e(ÚÄÊÀª2w<+€j¢xzwâ¹' §±Þv¿ßOg])á5– %^û­^5ÙºîXü %‹œ`œEy`µÍà AtÀB¤$Ðÿ™i¤l°|a=÷B,ÚÇ}llŒˆY+ë¶±ÌlgëäÄD|ÀårÑ)¬JVΟ¯¤A³j4ÌÀ‚2ÉÀªø…BÅSñ¤{ 0Å™>1•« mú@tçAßÙý_#ûwmüÄbÛòœ4ÌÀŠ%ER"mæØÅõ9sRñA¬0ˆåNñXQ™k%c2™r:r’™‹íË&Uá¤øyßQ(ÖÄ3yö*$¦@X …²ÏÁ  ‚(÷2ñ´ΉÄÃoNü÷t"íû¾~Éõ÷´þF½‚B2°(7Ïù˜!ìÛ·oÎïE*°2ÀKÙ`éû¸k,:׉@<°  elçj×4m#/Š=]]]O:S# e׋fÕhœeu€yöÏâ4xT‹ HN䌙څÉÀzî½ÿg‹Û–?²åS±Xî3ÔPªž‰’ËÕ’;Ç2ºÓ)c22°¦‹.!¬««£W2r™b€ét¤xÝÇ‘wI’”sDSÍ>îRúHã ™Æzr¸¡kÖ$ß?øã±tK«u­×}Ꭹ±ç莪Ÿ•LI“Aõ6e˜×\Å)Tƒ‰Ì,!DÊÚÇý¿÷ Ì«"Åb±Ë—ã7u˜[k9˜Í–ÒÔ÷i ˜éÍí÷? ŒÏLJ°¡T<½Êa``Àðáƒ>Å XÀÔ¸e~\Ë?cÁŒ\):qA<°Ž½}vü(Ùù±ë>Ç2l¾V@ ûZ‘Dê›oöÀÀT„ìœOçiAJÓâ°pѤáDŠ .GÞÆ^Ç™L&ú¢”³~2/SKk7¾«ŒO]>K†í'˲d"IÇq²,çÔ€±×’Êk9fj½Eü…‚\ahË|Ó'òµ亷»î±±1âä ™øîîO·Q^R·âswü³‰³Ð–Á}ë’?&͹¹ÞjÉïYŒ ó,¤$:ý&¼Îôšì† Vge+jʼA׌¦»ióâúޱÀ¤$áþíÑîÏÑxžonn¦÷ÔÔÔ¸Ý7Ã4E—0W†€ån)üã>0ô#ˆ”>Á¢º X¢”úñ¡ÿEölX²}]ë¶d2INp†a4=L³¯EðÖ™©'Ÿ?¥Ù97,¨‚ VÄr§À.i°ŸWÓšFfb:˜ÍæB,úÞÒkm«3{‚Â4bò•žÿó¡kþˆã8rE‘ã¸ñññæææÜ•UU>îxVÕD™rj·>þS·(ßL€Õj¥¬`0¨ R’ð“CÿIö7XÿöÆ'­&;ä©ÔŠÍ”‘°’`xxxýúõù^¥3° a"¬×^'ßÃF0q¦‡7ÿÁ·ö|EÙ<9ºmÃVȨ6¢ïcÀëõÕ…P#`)kõýq2}Ü‹ðÛú Ñ RúT|éL€EŸ§9¬Ýg_¨b:Çr»î³0ÛçAÁl6k’=sòú©ÉìsnÜSñA¬0ˆåN\âN Xßx£oy“3ßÌX,6>¸£Óäq¨é ùªÿ4ë“¥ÎMÇýo*ã_ÿ^0>ÓÍì$¯*-e†††<æ Œ­J}Üñ¬*>ˆ2?&ÇCʘ±×é¨W šI(ŠÇã6›í­3/LG”,Ã޴豺Y“МZ•~ÝSuIþŽ[…P 6üÈœA ) ôf¼µ9–V:LFõ,·Û=::š3õ‰eÙmËîÜ}öERôÚ…gïoþŒ‰I?Õ4ŸÎ¹ìÓ!Û9µ2¬Ê^(TA: Œ2°èÚ^åô4›Í$©*)Äyâ¿É„›»ju/…LËd2"`½Ö3‘½sÎXÄjƒXîAÚÇý»oÎotÔÜÖ©®7B¡×›£ O³ érn:Éï‘duÕ±çìKgwz?jaí Šâääd,K&“¹W2”€UUXxVDº~m^a0Y’èô+…ÉÉIo³ûçÇþ7ٳ¹ÕeYDZÖd X&“Iÿ†e¡Ü=°]PÀBÊ€—{ž¸¯[ÎÈLì‡Õg$Ëåre×÷);§¦¦²ÂqÌïnÿ¿ÿçK¿+J"øcgBûÖ×ݪLp8tC(¤•O&ÙóAÐÏÈ-  AJœ¢J³3°†1™Lаu>xÈU/ V“ýá-ŸRÆ´ƒ»Óé´X,¤íCÎkÑÅÉHßdxö8ìîR;Þ¸ÜÀcAr§ØógÄÛ: æ˜L&ºH°ÞÜxGó'öN>—Õºž‘ðÙ“Üîk=÷€(ŠCC-‡ IDATCH$œÎù_Œ•ÊÀª& AJZÀbŒ¬h4š¶9::º{èÇá„ÚÉÊÌZ75Ü TÏåì{ýô+Èì©Zì%A ,¤ ØÜáÚÜaP¦wn –¸—ݾú·^ïý±²óÄô[ÝÎmVÖGsù.ÄÄŠ&§€¥ÿ°dˆÌË ,‹ ’,öð{È«·­~´Þ®°êëëN§ß¯ž°9¯EtúÕŽnï×>¼®à?Aò¦Ø»»¾™‚ž–Y,úBÔb_ñØê'5ô©Ð%eÏhô¬"`õõõE"àyžn¸LÈ(!D AJ i¬ˆ ¬l/v˜ ì½üs²¹®þf;ç*‘sÖf`!ˆ(`!%ÁüKÛ Ê†ñ ÐÞѩӇ>_Æñwt˾×ÿF 6)Y¸>¶¦îFe‚Foš–±V«—;A9œ>w‡ žOÀŠD"}á£á”šWeá¬÷¬{œÌ¤Kív»ËåÒ7È{½7-`ݽÎÀÀ¢*>ˆÕ±Ü)0‚7®0N-ÅSO¿¥ö¶ï›Q/J9Ó9  šjÛ¾²ë™/þèAQJ/L†S~§ÉM\œ'''=OŽ‹•½– S‡^”ý—ÀrÏçÁ<¯^Ì¥žƒ@ÅQšè#c¶y¹þä\–¼ß÷‚(©w4N³k­K5È#X‹…eYÚ8Űûf`Uƒ ?2gPÀBJ‚ùÿÌØ-œ×i %@¥±@\Ç>0ß3"`Ù-λ×=Fsœ¼§X‚ hÊ¿?à ,(U«² Õ@…GPˆÝ)°ÜÜ,³Ù,É~uóʇ\Ž´ }ßh¸ÎK¦¤ÝgÒy ÷¬oÖ™\ ÄêƒXîÁµ­u†I—¢$ßP4)€?.;<­‹jÍùR˲ݬÌfs½ÝÓÝ´ñÌØeÏHäìêúÈ„|=Rª aêÐ ©C/۾Ѵñã?¯œÁs°¨ø å•-` ¾?$›[Ü÷·_"`€Íf£ß[TVÇü2°*Þ†™ìÕþ²`Ð×Ê!_ŽtYB¾{K–MŸ;V<À±ê+/L*úd2ùÁg`1Î2ÈÀBR†>q‡ ò·"UÈ—59¦Õý¬ù¾ ¿“þY¦MR ¬w/L‡âê§,vÙÖµÖÿ‚Tˬ_’ÎA˜ú®®.ý¼Îì;LåvtcÛdÏ¥ØÙ‚>Þ–Ã+uôå‚Þ‹ È•C–剋d‹m2ÈÀRŠ… 11txæU²¹Ä±r©s#Ù$¹™µ’Ñ_Ø„â©@L½E²šØb;Èk@õ Ñ,¤r [w Më XV«•ɺƒå8ŽÞYooØÜžn8}>ø>‚ Ñ›ÄÄ]ÿ-Xa°¤hŠrp—e™>OIb¦Åb9ØOöï辿¡¦‰l& b’j±XÈ»òñëSéúÁ{Ö5Ij‚T#›ÚÓÖñÞp~Î ,ȰÆcý¢l°ð€Lw‚xì—†oDäŠ"û/Ë U“b.¦®Q>^WWw`ê%AR̬åï#ôdâÝ ™ÏõÁ(‹¾ójkpહr` !RôôôÌ_kÏÈÀÒ°†±X,šž²Ù7œ·®zäðànõ€‘žëÄ]ɤC³:Dw…‰ r©ìÛ‚HQ&“‰èÚ3‰1_BíÁ0ì>N¿‹î ‘»'}&´€u÷ú&™…SÙA¬0ˆåÎÂFpS{:ßêÄpÀp~>«ÅÕÙXÛªX¹§dár´¯­fµ2a˜œ¦ZÜÊ-»žPÆÂëßTn˜%ß°4t‚íØ˜=¿bÀs°¨ì U?ÇÉ­‡ÙlÛÆ†£½äÕ-î»kL9’:¿½{`|&855Eߤ¼55àtæh¥pq2Ýê¡Íƒ-‘+ XHIÐÞÞ¾¡.—úØl6€¥yÎk[¯[T·d28 )YèÛ`»ù*”–ƒ€µ D®"•A9,XѰé70+`EÓ6X², ‚ Ÿ7jÚ²+-`û¥å‘/ùw”xV•Dº!cd€E/NöOüÜUS¨L¬ù#›>WÇ5ò €…T´€E7ÂÈI¶aNÏš›ºw½tìQÀŸ¿<¼’¹Žžðd`A9XR:¤zßL<÷D¾Wé ,¿ßOÔ+˜ÍÆ¢«iˆ€u|x_8¡Î´rööšµóù†û.øÈøžªD¤ò¨±šV49χ@’å“#Á–ëAç+!©cÌŠûU$Åû“ãn‹Úü4‘H XÂ,€xñÌ3®hœŠ Ș[ Âñxÿɉ·Éþ6~|Ûº› 3Ýårö‰¿9=9Ïo8 At@ ©Ú îB…e`€ËáÝÒqó¡·”Í#3¯¶×¬±²éRìr²-áó1— ,k ˜,Jqâ`6hp† ÕL꽟ê½\“Ãí%ãí¹Z¾}þdgWÍ&Qæþýú&Ó-¶v|Aª™MíõŠ€'Fú–Ùlf†¸ø%`™Xs‹}ùHôŒ²9=K,Mjy6LÝ"nÙV±ï=YJÅ|ËïÍåAdÞ.`ñœHÍD’ 5yŸ(˜ÝúÙcCûRRâbäÈÌkÛ½ÒDQ¤kŽô™KSã–ªå³ñ3®Å~Ü«—;•AQHzQçuC÷lËê=Hv®¨½V–eŸÏçõz•=n·{hhˆÜ4ÖÕÕå4E&ôM¤½N—7ÕèŸÂ©œ V1ÄrgÁ#¸±½þÇï*ããÃ5=jX–¥×6KjVk rr½ëeL[‚fÛ*cÓæT uôå °ð¬*9ˆ²$M\$[lsÞBÅ$A)<|/(¨©ß ÃþÞŽ¿2q9n‘^œ¡;ÌüûÇÖ­iP6ôÕà ²mø‘y‚R,ÔÏL»ÇÑ{)¨Œ‡|Ѱk[nh}à‘”Í ÁC&Æœc‘¯3y·7>:OK’$Qó}ºBé X»P¨*&‚©ÞÝIJ©q›oûCÍ®;ÝNÞívK’šNeµZÝnw8œV—L&“ ò‹Gþ_IVçx¬­k+œ={ÖãñØl6·Û]SSCÔ+†a–-[¦³Î‹ â%¿ê7Á±L§wÁ¬Š b5ƒA,w<‚›ÚÒ“}܉ E/NÜn÷úÅ7œzIɘI\æ“.KPX9m•«™iË®Äó_Qö‹=o$_~Jó¹¦-»ØÖ5súK <+€ ¢4= IÕ&…q6húÒГAJœäß"ûo]õÈŠ¦}R’ü•N“Í›Wz₩s¡¾v±T¶ ?2OPÀB*Šv=-`MG7w佇ÌN‚ÍîBH¸±cWÏÄ>>9 2ȧjzí$3|­çÞ¢l°rNÁPÀ"c´ÁBRï=OƦë>d}ìk:“].—Éd"7o6›Íåré[DÎÄýàÀ¿î¥êWÔ^« A¿ßßÜœ¶ƒ©©©ÑJ90•fÕ®%n»Õ”÷ʃ ²©=mGÝ3%™cõ\ èÅ ½´p¹\kWl\viCßô eÏÅð±kî*+§- rAc;6²ÞvÉ7 r"’xîIÍç2VgeXR²ÈüXü?>L6óÕ*g.I¥ì ¼Uã›Ùñè–OåxKTøØ·Þ§Ý¯þú¡ÕÙÓ>0*Û†™'(`!EáÍf3Çq´œ¤#!Ù,öë½ÿúò32Õ× $959JúœG–e’ëAcXEˆ‚Dfý iÛ‡uæf£ÒE"ê:Où•sÿuøòd‚s.unÒ¼+ÐþÇv»wéÅ©´Öò&gQßAjc±ËÖTg& š¿üÂi—Üor,›œœ¾­ƒóØçy"©»\®ÛÖ=Ò·W°úÃǯi¸€1ôÀRà6? ½ñt¾W¥ÀD¾—™?âÀÑØ¿>$ÏŒ’=9,Me\ŒôòïWïY÷x­MkqÐ7ÞõõgÇBdÏÎnï­«òÛ#ÈÂR,T±z{1­V+Ý\VGÀ2›ÍͶ¥Ëj·ô…Žh^ˆœ(<+ßLcwZÀ —¢€UÉvÕAeD0£~Ðé1­½Õð-ôYÇ釖gïžN«WNKýM¿oasèSô)l(`ÑXË-Xý TJ« b¹s%"¸©ÝEŒi¾ö«s†ó¬5·wY •J‘*…k:n±šì‰T ")~<>Ðl[J{`é`Úü€_À’ƒóí\V"à9XT^¥©Øßî”éÛvÉZˇÿ6{¦&ò$¿[ÕÜiuÝ»þ·µó#¶¿Ý3I«ØÇ·>®}V‡ ¥ XHI°P?3…g`€Íf+PÀRÒ+®m¸7&†l¬ÓÆÕôÔ§c±¾@tša˜œ¦§ò XUa …*¤2"˜Q?¸õà´y ÙþÄtR¤$I>ŸOIFåT¿—¼Tooø“OÅ|"½.$%`]¤Z._P«2‚Xå`Ë+ÁMíõ´³²!ý~ñö®Ü/ÙÌö-7¸øš:3|¼Ù¶”d`¹ÝîÉÉI²4bY–îGaZ{«e×ôѤñ ©CªC¨\)XxV•D©ï}Z½2m¾ßö™2ö:ýwÅÄй`º̓›?i3;4sÎŒiõjûrÏ Ÿ½¾©® nƒWŽÊ“ ‘,¤¢ÈÌÀ2°46XúX`ãœw6«mwÆb}3É1déý·VÔlÍiz ™7̇ögCÁ0 ( JRÀB«…4Ñ—zÿgʘÜJA®úÁl⎎ºßÏ>znÕÜ®îÑ™î¾õ½ç|/ÀL ‰ófCÎøB3°hZl»Þ›Nòt öE<3—EœJ»a™s $JW+‚ÈzQ¼f‡3Of­Ìò،۳h4 ƒ¡ÓÁ¤üFÓ±úì¸'mZyy¹Á`‹ ©Ò`–e3õn^im½µb5¬â "BÀ ;kÁz·ù»v(ÏIðÂO^Ž'˜ žê‡‰ËêiÀ±Ü¾Ö^8÷sép0xºÉº#‹IŸ]ô§"ÏóRfV®'eœUd,úK$ ߃%@éQIIQ\ã.…™.—Ël6Çb±œŠ ’ó{›³»‚öL¦îMÚ«1+)PdE4ÁÈÈȪ\‡c™:·œW%Špq^ÉÇ=-+É9Y¯×§-àl:O™±~ñ‰„s¾×‚'OÌ?;é_ÆËVÏÀ²yÈX›ÖjEY/Š7‚bVëÀïäõØ¥õƒ ˆÞ£äÌáŽÛæ²ÌÇfM¨4›Í 7{0<–î0 Úi²›Vs©xƒˆ0ˆÅÎzEPϱÔÍçç¢Ý Ò8´é&2 ÷$űÁ¢,Q•ÛÔ0èå½@1 =zŠ|–%D1f‡äNÇÖnUž/í‹„Ï‘æéÍå[*ìuY'ÓXÚ°Ž;¶Þ/Ñ.˜…h‚;w®Ö¥šÊ,C³òê›ÏõµäNpƒSSÑ;¶Í:¦§§NgÖÕÃ0:.Mfjµíž]”ÆgýrµÑPèÌÇ;þ:3c?ë5Éͳz–Eë%„«Ad](Þ ³©uªþª1ž`Yݶ,;n·{dd„ÜžY­V›-ËZm0xÆ—S 8–»y×'²>¯ÝnŸ››K;Yƒûª×o±ØYÇîjpvŽ.HãÎÑ…kÚËsÍl©ØVf«ž N@RŒ…{·Çä ¯4Å*™Lêt¹o†±Wˆó£Ò‘¸0ÍT4¯èwÐø,J,ˆÂH',Þ2°ÕíD5Î…”K>L%mím¾>û•E±ŸZ–´We·:¹ô ¢ XH©Aû¸ÿà•A…™Í.î`½‚Á`Z·i½^Ÿ&`5Yw¾3÷k€%Ä|oø­ƒ®CÒaÚÕX–%7ÏF£Qú‚’ÈÀBõ‚ÎÀ2|äoØšœN1.—K§Ó‘DƒòòòL¿*o|ò™”üÖËm5Y¯–5KÝk:µÕن;ëò¾Zç¨_a&ÌM‡Ÿ_¬" Å>$Ó «•3°€uVòDÀòOAñ X¢5h,V±~‰D2™ŒòÁ©è9¹·åHÖÉóáhB~W:Œn«º÷‚¬;XBˆ”´{>¼;®Ö²ù¸[uÎ*SsæÌ×Gžô…gå9Ö%t½]À˜‡‰»Ö=°d}xa~L3 [Ö 2º73i·jáä‹“ÿ™eGv–a?´û÷s]*köÖúf`!²‘ÙYŸêJAR±rq%eˆs1ÜY¬þËÌÀR¾Î,lDˆ k‘6ÀRI.“QFB]‚(¯pËÚ«õY'÷MQõƒU¸©†(`!š`K °NL¨,Î$2}ܠŶ †µëËôŒœÐKF=þ]iLr=$h‹¶W] ‚æ,,V/vŠ4‚¢wxYÿeì`PÑè{3žçéäyêáP2Õuážý*5ÌŠÉdÊüX(HÀj«Ze«HƒˆÐ`‹uŒà®†”kõ™‹þ ‹¿%l®Úm7ÊIâq!Ò?#§x¤Éúê–ƒöq/…F„ø,J,ˆ%`©f`Éõƒ¡TÒV®úAèYb€¥•úAðû•rH‘ –"š`K¯Þ\¦Úm¾ù\¿Ô¬pÄÏO‡„J+›µÛ4!kg±MöË+LMN}…ŽÑ÷Þ~sæ éüý¿9²í£›*¶§ X4…e`­ 3@2@" z“òC.1X¬^ìié„ly“ÊdA EdžçÉ­Z”¾4ùÓÙØ(ùéÞºoÜ~·òívûüü<}&+µXÜT±Ê»ED„ƒXì¬cëÝf·Uï % MÏ…›Ësné± »³îÐÏH‡Ý³Çoƒ{ ðBÆYIÆ¥‘…ïÁ Ä‚H· dÔ3°¢|hrIý`NkI–fÜ`dd¤ÄŒÌU,¤ÔØZkWí6 o^˜ÿm\è7wîÛ^–µÛ4!-ÕB²`×3Æ2C­t¦Ý¾¯ÇÿÖ||DÿëÍoüÕ-?T° ±Äa~~Þãñäš ŒÅE–†bÈǸªUG)yh‹©P°ÒR HÖBbîÅÉŸ,$RŽìõ–-½ì‹ªÏž&`±,KgVf"Š00“êÒµêX‚lpvÖ;ÉÚ¦sÔ¯ `À¾–#DÀX8-ˆ˰iŠ•ú›ƒ°ü¥ `!ˆ¦ç.Ša97œ±8Ù²Fåù‘H¤Ó÷ ©¬woªqæ\-ÉÀÒR !ªWˆXBˆlPnØžZrœºMK¤ X™·© 0ûÊo%‡ƒ3]ýöïbñX® Æb1:dppÐçóåš hƒ… Ù©„ªXi7f’€5füû´zUn¬?\ù1—SéA"ÍËh42 £0 ÅdÍeÑ{¬Yò:A–MA6X;ö99i4’ öLœ„åd`¥J…’(!DMÁÓîõ;@q™s©î…·Èáµ·+Lî qG†,Q3°MÐÙÙy‰µö›vTýõ/»¤ñK]Ó‚(²Š_ i%„&“‰ô$T›Z›¬;†Cg¥Ã7/<ÇÄ íú«²^0‰ÐÖ‚BDH°æsM[/.}‘Õ¥H#(Ì¥,FÍÁ=SÀá½¹ç¢|j²ÖÜv]õï™õºÈ7¢(ò"œœHôÍóÀq‰gÇN+TŽÎGÈx-Zi b±³¾ÜYŸ²ÁRnD:NßhÝÞ·ð®tø“c_¿ïæï®ÈĽ$,|–¥Daô,³9Ü£Ñ(Y´¼5úk^”']æòk·|8ו£ ~dN^–p,³ ;##E Xˆ&hlTIˆ]u®hv•Ù sÁ8Ìã'†|{[r`AFV®›ÛCñ'¦}q9‹þ‹OñeìVçÁÌ™,[Xþ#cK½<~à]®=».¶^\ú"«K‘FP,Ä+³„ЙŸˆö‘3mö+•„e8ðù|™‚ò©ÿsgSwh'û'~Óå[ˆÑVÉAȵhAX¤ADh0ˆÅÎúF°  ,h÷\A¬éÀèßÿús7Õ|Æ©ûXU‹u”š¾K€R "m€Åå0ÀêëëÛ¼y³ÉdšNwyß çoÝó)=—3×»:$,n¥7–YŒ: f;v¬ÄŒÌUDC©ÈFÆétªOZUX†9²-µêzþ¬Ê¶aZ–Á`à8.sš‘µÜT÷NsÊÍêí¹_õÞÍœ©\j”åoÚGƉßü+ðy5O¼d\ú"«K‘FP J™ÂK;§^'>CÍU•Ô«d2éõf)Ô}ùüô}%ÿ~~rn©zUmk`6Q¤ADh0ˆÅÎúFpGƒ,.z&±¤ 86—ïi°l%‡sÁÉÿoðß|ñÔŠhš¸ã{°(¥ òÕÜÃápOOÇ讫úD‹m79N.œö½LÕK•ÀÈwb`Vk»kRÜð a¼[3LÖBŸÏ‰Dæçç_}çù×úŸ&çÔ|H—;ý z(,Mµ De°„Ù¸ÜH XoöÏ?ðë)+êc<é.6¡Pˆ>ôz½¹R¨DQlpoþãëÿá__ørR¶AÄ×g€Íö+É4—Ëe±Xz{{É•çææržG…þ}ŸJ¼ø}é0ñëoèÝ“çoŠ %‰œ£òò‹1Ù›ROȰfB£“!¹‘¦Õ¶Gõý‘, ¹FæP½ÞmfF£ËåRnDH¸zsY>ÓA bg½cpF^WtŽú÷4æLEñù|¡Pˆe¸÷Uþ®ŽÑ“¶ñpŸ¢$è« XÀrŒ½L\˜E10øjVã÷@‹ö'^úwƒó”š3žzÆ’îlàóùDQDáéÞòò}Øõž+ê¯W~–Þ%-í«öêdA ÑëRêÜXf騶Kû ^øÊ/ÎIçëܦOL’ÒZ†Ãá´¢BšD"±³þà¯ÿú·_¼OéžY|}æñjS«]/ßcsçr¹¶mÛvüøqòÝÝÝÕÕÕ¹¬Ü ·|)ñòAà€|?û·ãHÁ¿öÚ€ÅêÅN1FP˜I`©ÖBÆX·÷2®µl®pÖ5Ùår¹ÝYLñè ¬›wUïit^QgÚUÉr €ÛíV­Òúr IDATnfºÖc‘40ˆÅκGpg½óW''¤±² –×ë•ÚÑ0Àª¸s$Ô³±‹ÆFÈGÀ`•²€ ú§‹]ÀZ÷"+§ØƒÈw=r_ÚI®qwæL¯×ë÷ûà¬ÿ•ÙØErþ2÷MV‹JRÕKcX¥dì:(`!š`½¾fnÜQI'ÐJœSI¹—PpaO$f³y{õþëª?qtò¿‰†5íëÐï—æHƒ6›Íáp,,ÈK̉‰‰H$ÒÒÒ’õ6˜­lÕíýpòí_H‡ñ§ÿɬ«¨ gÅ9º~Pݱui–ØëKö¶Z÷ÔÔÔ[µ\Rõ©«›îÚ[Wð‹^KŠ1ˆHÄbgÝ#H—'Ïby>ЦÎÒ><%ކ{ °ä-@aaºØÝIÖ=‚ÈÊ)ö òç_Í<É6ìÈ5.6vÊû9l¶ílµíVè‰,Ñ«áÂR²áGVbÿ–AAÛ`ºÆÕ÷€¢€%-øâñxƒeëOJc õ’1q¼²X,ôc}>_V÷h Ǿ”z–ÎçÊÙA6ÂlaX´€5%å´J=kh²í°Ûí-‹äJ¤ò‡S–ÓŒ;@‚h›1õÑŠàHUgn'ãѰl»£jâŒ³ŠŒE¿JKATIv½’y2—ƒ» òÇfDù­jælÊî€Ü Ó%æCñÙ \œh6p™Þ)ëK)Ùð#«®¿‘ Íu[+î½¹æCñ½:$<7–EÀr»Ý>Ÿº\.–eÃápÖË êÌïÁóÒù‰èAX†eY–Xh)Á¤Áµíç¶\Ãw¿ ŠüÀ»¹¾Ï¤äYâà^¦¾YG§ O’q£e‡ŽÉÞW4@4u‡Y¯0Ad]°›Rk{ú#+·Û=;; ÊeDö­Ì,+ŠÌÅÆ#|ÐÌÙòÉÀbK®!‚¬#bp^9#0¬á–/0 ÛrMæd·Û=ÖÝíO’3‡*î4qVX¼ IãÂtèïŽÀ„/JNn®²±öFGu3°MpìØ±uy^›Q÷À];¸kÇ·>¶›cåÏîÁ™p8ž¾åèr¹ZZZšiiiQHÍM$°øÍá1ÖJ_$¢3±Pk8¨ ×¶ŸŒEߤÂÌKÉzEY-Š1‚+ÈÀI~l²_ù½+}K2°4'`c‘40ˆÅκGÐjL}”…bJùS.—«¾¾ž:Ìž&OÇâ‘8îQU“°J,kÝ#ˆ¬œ¢"ßý[iÌ6î2Þó ñžŒ÷<À”5dNv¹\çü©_v“í²ËVidqD9Ú=sßcgï{ìì·^è''Û«´U?ˆ Ê €…h‚u/V7¸–ÅÎÓ‚(vOdùЗ4,Ra¤p»Kg`1ÀÔRiù‘>Xz«ìv»é$,£Ñ˜Õ=šÀ8«ÉXôkEÀZ÷"+¤#(R[Q€€5‹ðrÒž1V›Z@±(˜ˆ¦,‡öJ‹1ˆHÄbgÝ#h7¥´õ Z aZ¹ô¶ê½d<‘MT“°•å/ú ¬u ²rŠ:ˆ´–n۵ʓ{§NO†¥1Ì.·JçÁ¡Ù,µ#Z3À‚"— ‘µ,‘ÙZ›ê › –‚€Eg`@e3ùÑX†€år¹*+S‹?›Í¦ÜÈŒq¥,A3Xré¡3°ØBº^¤Ò¯ê,í,ÃÁ22°,šËÀB¡3°‚Š%„ Ó¥„ød2¹¥êJr8éDò°ÁZ’µPôX²¾ÐXÜÖÃÊ“Ÿ;û×[¶8õÊó¦C™'5(`µ‰¬5šÛ@Fõb{ã©Srçé|Ò˾4¤ûäXLîþSkÞÌ#‚³Ñ‹q!âàôü‚¬ YªAµè›ÈÿRRÄ#b`Vsú|·“Û0©4F¢Þ²E¾†š€•DR\̱ŒÕ€_ ‚hÚÄ]5‹þÜãy¾Á¹ÕÄY£|b|d66Rij.0 ,Y>iX\6ß+Âlpâ½áTºÖvgjr®zŽÁÙ”€õ{‡k]&¸zsùÊ^5‚\R0 Ñ~¿½_l[í ,é¿`æìnƒœ6%‚8éO{¬Á` 㬞‹4t–v<°´Ad%]…¹EiÌzêM½§|>ßà"¤ñ, XQ>8•Î0ÀÔš7Ã0ª%„ ‘Tú•ݤӠáiÑɃXì¬{m¦ºÒ-eA±ÎBl°`4Üù”RXBñ—®{‘•S¼AL3Àble “Ÿ?÷saq²ÇX[gÛÜÔÔ¤×ë ªª*k=ÇÀLJÀúÛo“Œ€7UZWí@µ,DŒŒŒ¨OZc¶×¥²¢ºòÈÀRõÀ"XÐìÜNÆãáÞ XN- XZˆ ²4Aaf(þÔƒKþ=ó/ä§Lyª¡¤^ -BkXÒs,Ü +_CEç€ü °üÚvpÍÉ b±³î´9"¯£ü¢ÎŸzAÇë(×NÉ«° ¬…iP}Jm³îDVNñ1¬H"ôÛž_‘ÃmŽ«L&Skkë®]»†Éš~Š%gò½‰Žeê=9»Q­;è…(€ˆ&عsçz¿ØRcgFE˜ …ã¼Å TR¤PB˜æí•—½7ó¢4‹ô) X¢(2¹³;«ô&HD@ŒÄh1­íº"ˆ¬Gï:{ä¾\?¥ °¼^/uåóù¼^¯´)e`FRõƒuy×Àå&£AwÐ|‘|À ;ëA–aÌzNªwD1’PYÌpG$ªx<^kÞ ÀH*ÿ\l<ʇÔ=°ŒÆd£€d\ û«R/³îDVNñQÕKZÕ@çÔ±HBN§²è­¶ÝF£G]]]ÖV郳a"/7•[t¬ö2ÉA,DÌÀB‹k©°HcA{²5"¤QÎÀâyž¬ùX–m¯ÚÃ1rÊF(é{wòyz>˲RÆ/ˆ¢Hj³Ã0ì’–ÕZIÂBµC˜ìWø)• ©¼âx¸œ¬_,–) ,AXZE¨êãN/f‰„‰³–ëOˆã‘^Õ ,`œhƒ… Ë'þì·âO=òëK °Þ—6Î1?9œÊQÚd»œet’€­­­ts U?Hz¯#HÑ‚¤ØV›ª"<§fƒ•–EgQ%“I:ýÊ`0XͶjS+9óòàÏ^ìz,×ËÔ AÖa²Oá§ù´ ”å™èHL{HYK…IV¾ ÏÀB AR;½˜‘–KªÃY¬LŸÁ¥‹Þ A.%|×ÑØÃ{侨Ïï_j€åI›IrÌEG©v4 –­@D+Žã²VrÐXdÏAŠ-A cÇŽi!Y”nD¨jƒ•vÇk6›‰„(ŠÀó|4%?2 ƒaçÈôÄ`Bˆ€â¿ùÏ:NmÇdN($¯£ –F"ˆ,GP˜Je`éß÷)úf ¸ö«ÈØív‹‹Yòf³Yr‚ë©_­e3ò /Ÿ ,ÚÄ]›X"’ÄbG \IÔYÚÏø^–ÎŒGúÉ%Yá’zE*µ}>_KK‹‘²ÁJý1ß÷fÖçÒßðE-˜(£…"+¤¸‚î;™'• °¦£Ãq!"MœUÚ#X¹œ “qK…¦3°ü~A-Ú‘  Xˆ&ÐÈ× ÝˆP5+ÓÇJ¯×퉨Q°(`UT}ê…Éÿàň þôõ·Ö\Qåh€d` Ú(!ÔH‘e£ñŠT ¡ñžÒ,—ËŲ,)àµÙl´–äI,QoN5ÛÊ'ËO XÚôÀÒx‘|À ;Zˆ`AXi&îPalÔ³¦„€÷´C*'+«Ï` õ™œxíá\ÏÅÖmÓ]~k¿Éz …"+¤ˆ‚(Ì'O<™y>«a,L»yvH»qêÖlêÞ¤UÛÖÈÈHñ™!k –"HŠ‚f–ÒgÂá0ý#IŸª6·©þ$ÇÈÓQøõ™ÿ"sÈ|º}aVXW ‹Þ åÉRìˆþ)Ù€1ÙÔ+Xôº¢¥Ïóq!2“¯L­%uK–W a$uè´h1 A–f`…b*ì™X,ÃÖšÛÈÉo§ê3Òà;_Èg‚l/|„EÏܪM†[ï•þqÙ2°Ün·¤R†»ÉI²—GVÑx`¡z…(€‚¤Jã™P$®´ìc†.;±ÀÂÂBÚ¤rôZóæåw½Þ÷Ì|hV⥠,Y;h,¶f³ÊdA ‰œL&'#ƒ"Èz–ËPeæR•,…–:LZÌÀB«1¥I©–Ò{o¤‡ mƒ•€Å*î+’(`!M<’8ú92Üþã=Hÿ‹+sºËå2™L¡¤ß—ÿ,ÃÖ-îÆXBˆXH±‚KpDtvvjAk—^˜€ ŠýDW…Ý_<ÒJ'äKø|>’Ü!Ò"T0$c¿ß?66FÛìWœõ¿êÏ@RH<{öÿýØþ?¥¿uŠÑÄ]#D––#H`1Um 3 Ío˜¸ÑñÍçX¢Í~…Ã(7Ç'£/t=V` aÊKÐF–v"ˆ,-GÎÀR-!L°`±ŠÐšõÅå72L•©™žSp ¡&MܵD$O0ˆÅŽ"¸ì.„4u–T›‹÷†_ÍõA2?uÓÐíº‘Œµ_E¨…"+DƒALž;{ä¾´ÂÄbc–Óßði˜µO‚4ŽÇã >>AíÆå/`ÑõƒÍåZ¯Dõ Q,Y݈ð¹é|›Ï=°<¸ƒ·Ã»˜ÔúOUÀbU°èÕ%.Lƒ((ÏG¢f‰VX°XExaö I¹÷뤔{B~X”‰»&3°A`©VA&î4´ Öëž•ü:%ˆUVÖÃ,O±3%`ñg_ÂE ²Iž|Z᧺+ngË›T/‰DFÃÝIQ¾M°ê\nƒ\“QX–¶["ˆ2(`!È®i/¿÷æv韞“ß Ý‘¹pÚÌ´¢t—Ëe³Ù .—«¢¢"mòû·ßi7ÉgB±@çøëDÿJ&“*û™z#cuËc>).Ìäýû!Hñ!NRXÕ*XiX@¬ù”q­9]+< ,A4ŠÊÀ ,7«ÖÜf×Ë©âI>þë3“¥)V™ŸºéOÑzc+“ÆbpŽ8¡<AJ^QÀ2|àOò¹H$9¿ð9l°l%c“ɤüء٢iAˆ Ê €…h‚cÇŽ­÷Ki.·óð'ü9d°š¦ÉϲãýÉ·•ÆÉÎ wÜŸï/sÉÑB‘¢µ &ßûs»n4Þó€Âd—Ëe6›¥½7ù!‹K”7†~MNV›ZIý äåEg`iÝK‹6üˆfÀ ,ÉÉÛS¹/œ›âQa2d[ I½ÊJ½{S»UóBr8˜ÊQ·Á¢|ܵ… kíàΨ`AŽ®ñwÉa¥©IÇÒæäUBHUâ8-Z°A`©‰û²=°ôz=Ëp;œ©ÄWºŸð†g CÀZXXZ„n –z–]7‘1ßûFüWÄŸz0þÔƒ¢w<¿ß AŠ˜äÉ”ð¤»ì…™i[qápÂñÀ¹™7ÉÉ­ÎCôå¤ ^œC훸kІÑ(`!HN®hv•Ùä]o(ñÞpú‚, ºPÂívgIØßò~2îõ¦\!òhDH—N(OFâE˜ 2°Ô ° GÖ[©Š•jskæ£T3°¢ >ž”‡:Ö¨ÃoOA4 mâ¾ì.„RsäÍŽ+­:9*ÁÇŸ?÷ó̶ƒÁ`0WÓ4[ÞÈÖ,¶5䱟}Eê–<ÿ* HI#.LóŽË «Ûs³êCèô+…BðZ߯‚|Þªs6Z·Ós”3°.Î…¼¼†©ré*c):p Žh­«Kp,sd[%9|þì”òüÌ ,Ç“u&aë d<ìïŠðAiŒXÈ%F³¤3°Øjõ ¬L«sæµ³co“Ú wÈCÀZ ZjÖÁ]³ADòƒXìh!‚«bâ. X,p»Üב“ï ¿šéx¥ÒvfÝ®3O çóyì¥D DVˆ¦‚˜|ïiÒy“Û´—ÞΊ iw¡PH…Ï=FÎt8èu©¥Ã0@ Ë¥DñÏö=øLï?ý&µØ‚-‘",Dh­Xð~JÀz!ÃÇ=ed`U;›Ëä=IA†‚²gaÚÞK&ô÷Ÿà_K³DòD³\âUxV09ÿÎÜSä°ÒÔ”i€y”.qpת€¥Ù "ùƒA,v´ÁU1q—,hµ^Ʊò‡Þ¤d|~(m¦ ù¼*nç ™'…Í XZˆ ²B4Ä䉔V åê¬5¶4RëdšP(tvìíéÀ¨tÈ2ºmîC´a‚(Š™ipôüÌ—Þyßcg¿4eýÞZ –¦$HDk`!‚(qÓŽ”€õFÿü¿îa&×äH$2>žúÖaæÕùî¶Z÷'*9îk½ah®G…NouôÀBEÄI*+,ZÀAüíô£ A~7éYÃ5¿ÃÃq\šÎU`~u"¢]VžÅ²,Ù“Ó³†÷¶þ9Yi:3ö¦–lpg2™è»î¬îŸÜ¶ë ·Þ bd!ñâ÷¥“¼ö2°$OÄà|âèT§ñg_$ã!û–ðÐÏçkiiÉìu ‘¹‡H$^ìz‚¶ØvÙM®H$jüôõ‘Ì“E‘¥) Ѹ G%Ë,ÕöžÉ$xá+¿8Wà.0 4—[¯Þ\–kÆþÖ÷?vü»"ˆ0%}V«@,°ÒDôO‰Q9+ž1Ùg•j¯+zOòœÿµéè9Ü[v‹]_ƒ!må§*`ÑXš-!D3°&‹¦Ï²,튰ɳ‹XçÆß9hOÏcµÛí´€•õ•1Ùäæk|2ñê@" ¢oB\˜f•™óDãðç_‰=r_þóã¶ÊpÙ&Xô‰Ë%`eÉÀJúÎŒ¾A;ìûõz½ª€Œ%y"K“í· DePÀB4ßï×l¿‰wTJÖòEøÜž<ùµë 9\ŸËm5›*wôOKŃb—ÿõ½e*:w-GɇuŒ 0u!ùÎ/²þHœ#c¦ºÍçóѹ÷Y÷0ÉmX„žö¾DÎ7X·¶Û÷Ic£Ñ˜¶òS-!\XRB¨Ñ¯N|–ÄbG ´Ñ&îj] «€E{]Õ[¶ñÀ\ç^Û:&¥ã'‰4éP(TV–sß8W¿”×#g¸ïÏ9ù’£…"+äÒ‘ïy½ ù¾ÆƒùLËÌÀêYxGXtÑòj*MMv»eY²r¹\™¦%¿8>Fôë—铇är«Ûs¿7¤Ðè*ÙhŒŒŒìܹs½_EvnØ^ùí/¬ä ]ã ÿô›ÞûoÝ’kÂûÚo]° 7p|çý¯×«`¡ÅX= 7B"bdAŒ…ãzî¨h9‚H>¬cù®£ùìa²Õ›½^of¯«\ÖIïó¤_Yg;TþiÌ0L¦]]id`áÛ°À ;Zˆ IÏéX&)ˆMðIAÔ±9Ý Û Ã0óóó© 1s™µz.4 !>¨3wŸ&“ɬMÓ`w‹>­)K DVÈ¥ "ßS˜O“¯éP>ÓÒ2°‘ï '‡Îàñx*++•ÒéúÁÿuMóÿýȶ‚^íúrìØ1¬"Dr¢ ´¼V¸nkŽ7·ç33‹ù|>²Œ»àgÞ¹(gyüýÓ=wï¯o«´e}àUm|üÄü‘9HÑÞ…w¶;¯d&W‚10 ã¨ç.JG¢’©l-ä×Ze´A$Ö1‚ÂÌP>Óò1À‚EË—˜î¼KNÙÌÙ¥1Çq™wkyd`¥Êp4kâŽoÃXìh$‚6“Ζe÷`4é²(}je~$ ‚@kRñx¼ÅµS°`4ÔC X‰D"í ápXùå±M»SÏ¥1wDY —"ˆñ?|Š>ôÀæ¼­ŽÅb³³³ÁùÏžeY…-ê49x$|.ÂË… zÖØjÝf³Ùjµæ¼Gš ¿Ú3#HúU±€ê¢ X¢‚ͨ{à®yN¦ zÀh;ðà;Ó 1ˆÄùÏþÇÉ—ÿŸk²ZÀë8Ãû·}ôñ?»ü¯ouòûý òÀºjx"`ù&a],Y6âô€ú$¶f³(ŠªÓ$¬wfŸ"ùö}y‹ñ2X|¨N§K»×b¦°.„Š·‚‚ ëŽÕ˜°B1‹¶»’ÈüHÜìÙóîØ Òx4Ò³Ÿú‘(Ši9#ªX\cJÀBw¤á/¼IÙj3~ü “cçÏ “²¬´?‘Õ틌7Ù.׳FˆÅbY[%~}˜¬˜n*k¯Î¾ƒŽ Å X²š¸\.ú;雿»ë?”ó~_éžywÈ»·%û–Ëõ[ï|êÔOã|BIß`ðô&ûåÊϵIJŦAŠazŒõ×üãªÍ:ë¸ÚÎÚé3‹%s“çù±HÏx¤œ¹Òs3ˆ)å83Kµ~–f`ѾA4ý1TóqÏZB˜v¦ÊÔ¢ç >ÄÜBbÖ¡/'?MÛ]ày>šL¦\ÏÈ6î"ca¼’qД_$‚h ¾7åªÎu\¥:Ÿ–‰yž!×ÎÉÀJЉãsOOFS›|Y:öûý'×s…bɇßHÕ~òª"K¿BeTöœäÒpìXaeäÅÂÇ6ЊÕÔBº/#Áftî©9LÏù_S½8[žj$Lô,÷5®¥ÁÃ:FP˜I X†þ­ñž²þc«Ú †%w8iz1ˆ¢(ÂïQr¦ÚÔÚh]âû)`©¦_ÁRw‡VMÜñmX`‹DÐJû¸GU|Ü3,ƒÁþéšd:ª/#‡£a•U‡rcó0e òA2.ŒW¾Ú¥D#DVÂ%"ß›rpçÚÕÍ­Òú$ÐMÒÎK3ý‰™gƿ׳ð6ùQ•©Ùm¨Îú(š™Ð¡¿õ´ü4é¹»÷Õ«>Jkøýþõ~ ˆvA Ñ%\êLgíΕz ~`Ç= È{žóñ‰˜R¨¶.u[.Œž[ÙË\)%Á ÂzEPŒ…Ä…iù€Ó±¥eVš1D¦ð$B0áŽK‡ 0{ËoI›“YB˜OÖ’B­z`áÛ°À ;‰ Í¸¢ ,£ÑØÒÒR[›Ê‡]XXØQ{€öÞA©¦[ÕkI¡–l°4Ad%¬yE‘ï{“qר>Bò7 äê6.­s¢|ðé±ïÌÇRMÆ9F·Ëu}ö+ â?>Óûà3½>Óûw¿êÞûµ£g.¦ÔŸÛ/«Q® Ö&###꓊F·‘¤dðXS9#Þ°’€µ©nëfÏå½ór_¯0®P!lýv2æ×[ÀBå!NÂbí [ޜҷRš1Df«ižçCgÈmU¹±¡Ì^¸òBÍv!D‘°'L¢ IDATÑ%„Ñ‚,–e¥W¿ß/åR‰¢Xgê`V²œOŒ…{ê-9Û+«7"lÚ 'Ÿ–ÆÂðiPWD+c]bPnÓÉXÝlm‡ò|ÈÈÀÊ%`IëœÐiÒFúòk«>î1Ôȇ½Ãýr×ô½Ízµ] Îüm|5öR@À ,Y[Ü”€5Êž0Lh¯ÜCÆãÁ~åÉlCê;I˜è^e…Š „®d*Z”'« XÉdr0˜ÚÉßR¶/ó"+/!tjµ„ADb…XäS±º:U²˜‰î©KéLg|G!7ê>îMÍÀBUøžT‰"×~0꫈<,iaÓ·pœœi²î¸µîKê•^¯ojjÚ´i½Ãýèñ±¬—º{_ý÷n.·¨¾6).PÀB4Aggçz¿„µÂcM%k(—@³g+úûfcu3.y71aJEðZSJ8‚„õŠ @µ d+W*`{çbòJŽæ†=wfZ¯¼„P³Xø6,0ˆÅŽF"¸Â ,rÆl6““ñx¼Ý|ˆxLG‡i{é4TKYª„PÐR#BDY kÄ%Xy8¸CÞ%„Ñht66êËý Y†=P~»Ôyjkk[[[iõ*žž8‘Þljc™ïÚñÈç÷Y¸ß†” øgh‚ÆÆ’máY’¥"`5x6ëYCBˆ@(±0«°×)Ìçv$}r…¼0zŽ­Í™Ì¿Ö”p7ëA‘jAȘÇEQ¤%ªw†_"ãFÇÖ¦šÖÀ\xff†~ÔÊK5ë…oÃXìh$‚e`ÑýÑ$HV0¤Ï›xg½uËÅì¹Þé{¥ºº5ë5“Éd,3¹ž”­ncL6110+zÇwö´—DY kD¾‡vpÏ"`ù|>¯×+Ýn·ËåÊÓÄ=‹õNÃçN3'÷_v¹\™_ìš&7e6ÃgÞ× 7l¯<²­²_Hs;v Ýè\ €…h§Ó¹Þ/a­pçí½¡ÜØ0¹ öMQ°ØúíÐù‚4.ž…}w®ìÅ.ŸŽàa½"H—š%Šb<§oNŒ¤JZ¶xö@ee¥ª€•O ¡/\&îø6,0ˆÅŽF"Hw! Å îB¨ð©¸Óy-°ÆÂ½/MþÔ¡/·é<›ì{ ¬™aqÑÖpzzº¡¡!×u€aÙúí|¿Üd>­Ó†€¥‘"+a-‚(ú&¯= L¤’Çu®õÊ´™>ŸoppÐçó‘Ö––îH±#PXLeö| Ò[šF°â|l.890sn6$'ÒsŒnkå^(++ã8Ž~`</4KS) vôÀBDÛÐ¥C¡Â=°>+MMÕæÖɈ|1,‹Y1!´Çý~–eÉçíØØ˜ÝnWhGÃ6î&–0rö(-xd}Iž;{ä¾´“\óå`0§ôz½D½‚Ål¬î(`!Eˆ8“o aZú•D,{oâèO^ûû´óuæ‹ÁÇ9’Éóóói{³ªV0–ä9§ÀbÐéØìKIA°Z&în·ÛçóÑwã°Ëu°½wv¹®j—!‰x½^‹kÚM¶õ„‘3Ê/AÖ—¬¢\û¡|+Š"ÉL”È*`y½Þ®¹Tqâ¡¶r¬Ò­úoÎLƒÎj§éšöò|^ ‚;hâŽh‚cÇŽ©O*N °LÄ!uÔÛMDæ³uÛ`q[F˜ìƒ¤Êõ׎Žàa]"(.ÌH(À˜lŒ£Bar.ëh÷™ç[í{È-™^¿¤â/úŒj ¡¿HZâÛ°À ;‰ Í”Ò¤‚Ñ‚KÉ—ËÕÒÒb³ÙèŸÖš7WÓkÃÉ…áÐÙ‚^$Û¸‹ŒùáS 3/%‰ ²Ö"ˆB¶?Ñ<ÜÓÔ+ÈðÀA|«ç¥o¾ðg¤.«¹Vù²?gIý WB»kØKQ@» qdCQ¥Λa@úæò…‚(²92@§ÓY‹C_îOÌ/ðƒ³][k®È5Ÿ1;زav€O=lÃÎUÿò¡„#¸AX—Ò-™Ü%†g{gºÒNêYc½eKÖ.Zòs-}ªf`-C BÀ·aI€A,v4ÁÕ2q—ËUWW×ÓÓCOøPÝ+ëÊÎ]8Ùµðú`Pî!Øx³Å¶ò†mÚ ¢ÂD¯ 1Fkþ_#4Ad%¬EiUÃ1&;p[Þ—9Óív_¼x‘ÔÒr—&@"‘ ]h’|üß|±ojI†W…±ÁÈ;^O8Î?}j’–Xý öR@@ AÖËØM:©…/ˆ ‘¤Ë’ó˜eYŽã*MM’€ýÓ °uÛd @íZ/ A–Á’úAE,ˆÅb™'ß{‘Œ=ÖªZk×W˜tŒžÈR™æ ÃÐNêXEÑ‚A„`7¥>©‚Ñå—JdµÄ®pUW˜/ã,CÁ3"ˆ0Šê|¦¤\3È0ŒÛíVx^Ædg«Û„‰^FÎp›*¿TYDï¸èŸ’ÆŒÑbúý6çÖ—Óé¤S® ƒÕš®ÌŠ¢˜H$ ÐhÙTNAZã—Ëåv»é6Õ ,ÿ’ ,ÜøADëÐ]—á•vÆjµ¦Õb€Á`Ðét}y­e399=AÆ Ã(`I°Í—‘±0tRy2‚¬túÛ°KA½€h4*9!ÍÁ]B²ÁêŸî|æÌÑç+MÍ×V}¼Ý±Où% Î†Éøúm åRb €…h‚ÒvðØ ¶Á"‡ýSÒÆf.èF„Âhaö«HiGp#°.\Ò‚°ð¡à™hR^À9Íe{®¦» ¦y¸4/ÒÒÒâr¹èü‚¬¹]4Å’…oÃXìh$‚6UB¸â ,p8Ò«™ôz½¤jmu¤|¬O޽åeA2[Ǧ?5%`ñÚ°4Ad%¬zi,¶yòäp8Lfí¡ ñx<žŒþðÕ¯ ¢¬vYu®[ê¾xsíç›­;Í&³rãÈ\êYšË׿öA.¸“Œh‚ÒvXâãT°Ü†*=kJQÆü“þ‘gS®ùl-`­[ViGp#°>Xt a•J a¦€Õ8NÆWoþÇêèMNú–Ìårщ>ŸÌœ ¿0X^È´Ê"œJ51D,dMÁ ;‰`AX,˲,KçŒdJZ‡cnnŽ># X‘H¤ÞÒáЗ-$æ ÁÇßó>Às;‰DB9Å•m¢3°ÞSù­. ‰ ²V=ˆüði2æUŒÞÒ,AÒ,Û%‰Ä#ïüÛÔÂEéæ­Ÿ²'«¥ÃêêjåÆQoªËS½;ç¦H9v쾑\ €… kŽÇšºãeù£ÑétL…±a<Ò'ùÍ;]×v'dTBI°õÛR¨S C©}!¥ŠHe`±ŠX<Ï“õŸ”0œŠIg`wÜ.M#Q¸kòz½äVíäDâ»o…üy¾f-w!D‘ KC1•4(à8ް23°2-iôzýb¥6³Åqð¹§¥óݾ·bÉÈ5w±Œ.kåÔ’çmM¹|òÏB2:ƒÂ|YV’Ùvàb|ä§Ç¿~nê-ræÈ¶;ë~¿¼Q-¿¦JËJmåꢖ"Èšã¦2°¼aõ ,h°n%g:' ú|¾´ùŒÑÊV4Ë{ì¯ãO=ÈŸ}i5^8‚¬%|R˜“7aògœ zñg4Y¼;ÿ 9³µöŠ*G=,°2ûjee, ¨O¢Ðr‚ ˆ„*! DUvÎ CñÏZBH7Äà8ŽabŒÕf¿ÂÈ¥n¡ƒ§_˜ü„ËšxBÃØÊ˜²ù ÆÒ»Ê"Ⱥ#ÆBÂd¿|À°ªí’B¡PÚ™4§‚ÉÈÀ¯Æ¾E«WUކßÙûÇô4£Ñ¨ü,¥…  €…h²áP’”QÖœZ ¡´l±îfùí9ŸðÆ'Àçóy½Þ̇°uÛÈ8þëŽ=r_ø›/ÿhå¯<J;‚KAaþ"ðò½ 㨤»§û|¾ÁE$Ñ–°]ü©‘əÃí·Kƒ<3°h..*`i7 ߆%±ØÑH­T ažX ‡hUKEŸÏG,kþ@Íçœæ22a"ráíÙ_© X =,DY «Daø4,ÚT±5íôr%+ÊXÞøäó?%SÒ&½ùÿQg–lÝ%”,A/Χ¬Æ2‹Ú/ ¥ƒvâȆbdddçN• âÅM•zó*!g­1m‹ôH'‚§®ð|fff £–mØ'Ÿ^rþøsbpÎpÛ}«ó;¨QÚܬuÅà\âèCôaf˜ŒéúAI½"Ɇ>Ÿ¯¥¥…,þ|ñé—»ºKY±8MeW6_+ó°Ün·Ï瓞bt!õO_ÝTéPÙó¼js™ò„u߆%±ØÑH9–1¸Hœ^#qÞlPÒôU3°¼^/ý+‚×ë¥+݆ê¯|ðÿöò—Æ}CÒ™ ÷.Ìœ­¬¼^ù¥²Í—Á‰_É—: ‡?­<­ÑH‘•°ºAFÎ1Û¤b€•H$2u[’Z%‚øÆÌã¤ÞJ-å[ïØòGm•;ãñ8)ãÕétÊ›pÓ ±xRžì²èéŒËÒ=°JíÏ)RJ{­°¤„0.„Ò`“}ÏRë&& …B!¯×ÛÚÚJ4,ºa QŒýì+¢wÜøÉfÍs-K;‚µŽ îh쑜r*íàîõzéRY)ñ0‰@(é{aòÇ¡djgÕm¨þƒ½£ãä·X.÷4¤¾„^¯WÅñ`jaúßÝI·\(:ðmX`‹íDÐfÔIcÉ X™D£Ñ´<Øî¿å‡_ýå§gÂc ‚øT×C¶]Ëd,BA˜­¬¬„´ ¬Áõ÷q×N‘e³ºA¤¹¦‚ °€ÊÀ:ï}&v‘œ¿y×ï]×|WßÈ?ý FæRéWM¥˜~…ꢖ"Èš³¤ aÞV£u»ž•¿ÀBIñ«¿ßO×r[®1Üz¯üïƒJ›¸ÇŸûvòTÊ*AÖ ¾ÿ-…Ÿ2T–(Ši?F£óóóQ>ôüäOhõªÎÜqsíLŒœQî¢E#iXœ£:šRn3µz… Bc£’2‚Q3uÚ4a˜<,ikàóùlFç­Û>KÎŒ-\ømïSiôù|ÝÝÝçÏŸïëëóù|KޤjµD##©„l-%¤ìÅ@bþ½ùçÉÉVÇî½e7÷öôÅb±ÙÙÙ4¯Oåg™O=Kƒ °f`!ÈšSxBchs_v~N¾í¿::Z[[uör10 b4{ô¯KzÇC`«7ëö~Dù·@ÕGà…‹äˆËÖ‚p~~~ffÆ`0@ DßœýeR”·±œy¯û–áaÙKa``Àãñɪ`!°MPÚ¥Îe`KThµí&Öp¨ó@Ùm,£þžå¶\£?ò‡ñ§þQ:¦•ç¯ ¥ÁÀÚF0ã‡R…!†›ÿ¸%½ü¸ŽÔSÓo0 &“éí¹'g©¬û-eû8? Àe-± ÷Þ© ·WÙòyˆ–Á·a €A,v´AÚÇ]5‹þÌÌúùI*¯¥C·Ûµ« èõú+=¼:/Ý«¢Þ/?öÑì¸ç¦í¿k6ØÒŠÄ¥ŒòêæË’/HgâOþCö—Èr–ûžãvQþEVŽv"ˆ,›•QïNžxÄOŒÉšã¬b\5i3}>ßÀÀ@ ï‡åê€<îô“Ã+=2s©m³P(D/~Ô¬¹ÏÀòûýNg!A,D#”öZÁc[N !”sÍ&ÎåCã#‘:K;˜Íf·Û­pÆYEÆ¢jy/» J;‚5 ?x²ÌÄV´?ñÏJ“ù%™ƒaÅáÐYr¦ÆÜöá­_˜—ÿ°C¡Ïçs¹\y`ÑôNRVuÑ Xø6,0ˆÅŽv"h£¬XV®úA—ËE7€´œ,ie¢Óé¬:×.÷µ¤Z*>ñÞž?÷³ÏþšjÓ.ÇÙæË`QÀʉÀG¾ûqë×ßcÜéWX]´AdÙ¬<ˆ|WãάX^¯—¨W-‹\¢7pœŒkÍ›ÛìW¤M ˜G a*«ÁS‚XØKQ=°dÍY’,@Àb€i´¦ Úgb#ò=ž´EdŒ£’Œÿ¥ÈÀBø¾7ɘk?¤<9 Ò‡Ñht$ГdýË¢s|¸ý­–Ô¾%Ïó]]]çÏŸ¿x1•¢•k 4ž%–"R:ä•€•†”“Õ¼HKK‹´2‘I¶;ßçЗÓóC±Àã'~yÉÉÉ9K]>Ï(ú§"ß¾x•ßAVŽàÈ<ɪ9¸ç"Â.†Ï“ÃË<70îr@ïÞåQB˜ÊÀj,+Á ,T¯0 AÖ‹3é¹h‚€XRÇyKîf@i7ޕƦ^xGK*³W€°.M !‚(@`q›*O¦w2 ™LžLé_›\{:Ú¶¦•®Äb±ÉÉ%^oyg`QXÅŸ… B((‹î€–?™9Y°(`qŒîÖº?é ¾u>ðz0&7ßžë™MŒ0 C7ëa«iØ÷)—Ë•õ¾]˜H¾ý˜4æ»{ô¯hßOY D_VKÅÁ=ý‚(ëSe¦Ú cc朂,º aIf`!ˆ(`!š ³³³´µv·U?á“¿™æCq‹!çn‰N§£×v¦Ô—ÜLô"€À¤ÕXeÂ:/µ€Uò,yÖ4‚t«˜‰D2Òïž¹Tëý›Ž¸\®\Þ+„|¬h‚'K@–a6UZU¢qðmX`‹íDÐfJ} >qb|ÌÍ53‰ÌÎÎ ‹eã¿=m6gY¨Üµ·®µB壒ìÃéYÃçáÏÜüåo¿tßÙ±·¥“¯ôÿòJói‰[Ë/ìþ¤”ƕ劢ùÇ@òô³òä§ÿ‘ë¸Jwù­Ê/cÙh'‚ȲYyEï8ëößÅV¶€nË5™3Ýn÷ÄıãÌr)éúÁ]Y.KEde+ž¦m¦Ö•½‚”*(`!š ±1Ë^D)á±&|òÚq>¯w+¥ûêtºDBnVèЗ¬¸ñ%f\úJAPi2½$ë’”–|Kžµ‹ 03Hv2“kPZS¦ÕÀLìb8¹ õ¬iw³J—D>VÿtHXTŠ›Ê-&}^I[Z߆%±ØÑNé ¬_žÿå‰q…É\Èz¶ÒaT°X–å8NÚiEQÇn¿ìˆ€unâíÍ W9õ¼†5ýÑ…þòrqî"€(FÿýÓÖ8É”5p‘¼ÑN‘e³ò T–áCÁµíÏ5ÓårY,k2r!˜“Æ£k¶ì’³,›ÖÍ&Qo„¬^j\&ƒ®°—¢À¥ø‹¹óÎ;‡Ãá¸óÎ;i›’L˜ .Á+DÖ’ï4QP#Â4¬rc=9œ‰Ž@†Ëu&Œ£ß;bp•ù+§ä#Xò¬]ùž×ɘmÛœÒÆIZý Œ„ºÈ¸ÑºÅnu€Ûí¶Û•,«òñÀZâà^ü-߆%±ØÑNi¬ÕâÂt(Ÿiôíw"‘h¯ÚÝZ!zŠ ž÷¿‘ãq9aìåæ?ýè䥔œóþóCú醆«…v"ˆ,›•‘ÎÀb=*mÊûÊtúU³m—˜P¹ûÎÃ+U?¨¼#^¼ z…(°æXÁ`ðúë¯ÿô§?ýÐCÀ÷¾÷½#GŽœ:uÊbÉY¯KÆ#Hi౦só!Å—Œ{ï cãh¸GÏDG6Û¯T°€Ó1V·œx18Gçd!È¥„U °23°FÂ)«½ì iWÃårµµµy½Þh4:??ŸéÞ’OVm€US ‚ Áj\ +ý#:+z½>•³Î‰„Ùl¾qûÝÿþÊÿ‘/8:GNv8÷©>yX)÷¦r4ÀB6k.`ýèG?:pàÀý÷ß/ÞÿýçÏŸ衇þäOþd­ŸA´ƒ›ÊÀò’¦&2–|ÜUK€qTÊ€èŸF Y/VâàîOÌøãr , ÜκäGÄ<Øçó={–TÝÊO”‡€ÕGe`m.‰ ,AÂUme÷ÞÜžÏÌX,æóùH ”Ñh¤ýÔ'üч_—{Èä™E/c$[Ãv÷6½+˜ð@BˆŸõ½vdÓÝÍÍͧN’ö­EQt8Ê—5ÜüçãOz_‘=ý/AÿK³vk)Œ­ ,$DÿˆòJ›±—“Ô¿\ÐõƒMMM Ã$“IÇÓÕÕubæYA”=úŠZk[2¡ÒQ3°D™5°žzê©ûî»>óÉO~òÁD ¡)ùRgº„p.X €e¬gVðƧbL=Kª"ï–Æ—Àǽä#Xò¬QÅhP¸Ø)0 ×v@ar,“¶1g¢#§}/ÇÅH(‘*©6·–»«2år¹jkk‡‡‡é“ùe`¥¬Žj¥‚Äb߆%±ØÑN¶y¶yòœìóùHs ·ÛM÷õFˆ€50³œBXð:ìNÌËFì¾£•sÕ{öì1 äæ?›LŠvÔ üè7lÿz“!<—çïE#Ì«OÒR‘e³Â ÒXŒ«Fyr"‘ ûÊ:®µµ•üh:>Ô8A;û£Ål!‰‡.—+ ¦õ®)(«±¬4,쥀(°æXçÎÛ½{IÏÑ]»vuuuåšÕÕÕz½¾¦¦æãÿxww÷¿@D”üZÁM•zÃ…•êY“ÇX½x$ÎDGò°.m#Â’`ɳFúß^^™±µ[›ÒÝÔÔÔ”48í{i4Ü=%ýä§Öm¹|¯**Òý€óñÀ¢KÛ«K! ߆%±Ø)Òº\®–Ehõ ê\f³AÞ˜ Æ}jkÈ&`@‡c¿ž]4±ñ¥¡G^8÷ó¬3¬žÁëÿJd–sÿ"ÎŽä3­H#ˆÐ¬0ˆ`ÑõƒCj»:ÎÇ^ÿ¹²1ŽK_¹ÅyÐ`0H­6Y–mllliiÉ\Ø”Õè)ÍB쥀(°æ–×ëõx–ܱ”••ÍÏÏçšÛm·=öØc@àøñã{÷î=|øð©S§TŸ%Óúa˜¯~õ«ÇŽ#s:;;ýþÔ½ý#zì÷û;;;³þ¯€WXö<ÙJs]!³ùH…)õ9N X ¯a2”¹B“Ãùÿ€WØhWxñgd<ëHmKf^Áçó€7>9î…¥0À4Ûw¾÷Þ{Y¯`·ÛÓ:~¨þó¡8É…4¸Yãÿ'ñ x¼^a]®pölg3å³C’°”V ““dßààààà૯¾J ÚéßÂívk÷ ¾wr÷=ҿصd¸õ^éßôeOë¯ú¹>ÉÀ*ÞXà.ÍDê˜qV+_®4ä5û¬Â†YóßAVÈÏÞ½çßåUÚG¯¬{ì‹9ÛñÀðððÀÀ}fšë{¦ïÇÒ¸ÞÒqkË8 TŠñÇ¿{ü«ÒØpÇýÆßù¿Ë{å²lDßdøn$%„¦?ü±þÚÿE~záÂQ¥Z?·Ûíõz‡††àØÌctʽD…±áîŽ{÷îÝ›ë¹Îž=;3#¯yÎ{¹9p*8ûNø¢ßz¡_ï¬wœù»÷/ãDÙÜö­7Ÿ:%Uýü û~g_½òü‹/ö÷˰F£‘^óODú_šüiR”“­lׇë¾Ä1:hjjòûýD·’’ÂÒY›Ñy IDATÒÁ »»{bB~1,Ë>|Xá•=¡¿Ø"O®h¶~kPíwEˆ=þÕøã_“ƆÛÿÒx÷ß+Lž˜˜ CUUUÛ¶mKòñÇßûá³ÿ#,imuÜ_v;TWWoݺõÔ©S»víbY&''ÏŸ?O_ðòË/Wî¢èþâS$râ_o®v*Þ"È:±vnu/G‹mÒ+v»ÝóóóUU)ã’¹¹¹´œ,>ò‘|ùË_^݉hc¥î8àYA !4{¶’ñLôb’W1€„K^BXò,yV'‚|2yîeaød$‰†‚¦·fdû&Ì üà H­¦ÆÇljïƒÏ瓾>ÂüÂ@ •u{UÅGëÌíάcô‰DÂçóÑ73Çúæ^ï“P¦§}@ÆÂk#ñ…˜0›ç«. ,À·aI€A,vJ2‚­V2¾‡ ½o¶c]kÙ|÷Ž¿xôÜ7B‚q__àøÇAXXX ê,Úre Xô½† ¢(*lõ³eÀ0 Š ÌÀ«âX’Üh¬0ˆ¢—òÀr«x`Ñ%„F£qx®ç‡¯~mÔ{œ´êœ—{> ¥~GG‡¤^@f–²ÜB$AÔ+£Ž­r z…l8VYÀʔٶoß~úôéo¼‘œ9sæÌ¶mÛ–}A¤$)ùµ‚Ç–*!œ/° !Ô»[,{8€˜öF¦TŸ‘n;(úÑ QA9‚ÂÈ™äéß(_A˜ìOB Î æÊtT_q04>ŸÏd2Ñ®¥ä¦¥ËwL¹úÕmªÚl¿@¾3‰Åbäf&Kþåãç¾ó‰ß¥a€ø6, 0ˆÅNIFpSeJÀÈ£a¦¡²²rÛ¶kçáâo:ÿG:Óé{µÝ±.OÈPÄAPêÚa03ö yOˆÞq¦¬Aùú%ÁÆJ=°(wÖ]«<™þƒ $ç¾ýÔ_$ùÔ:Ÿæ@ùzF¶µ’þVéôp«Õʲ,±g†6ÒÊdI By-ë´ÖÔ‘VYÀÊä–[nyøá‡iëᇾí¶Ûò|ø£>zÕUW­ÍKCKí5_`B0™Ì­ÛÎŽ½-އûUŸq‰€µöXHi“<÷rì‘ûÔçå ܸ·ïš{aq•–HEHˆ±ž@ÊeÝA”2àåßK¸Ç¦<ç‚(þø·Cyvsχ’°AÖZÀÊ'K¡†tëþÁ©ëq>¡¤¯áD»c¹‡'dÝÆN°xžWn;Ë–7ñ‹« av˜S°D,¤ !ýù|ÿÓê•ÓT~À}G¹œÉü[õûý™&ž1ÖüŸÇ²7ͼ0j ÜXVšî€:2¢Èš XŸýìgwïÞýõ¯ý _ø|ï{ß{ë­·~ðƒ tyä‘#G¾ð…/\}õÕeee£££<òÈ¿üË¿<÷Üský"d­Y"`že4·Õ^I¬±p $ý8+—¸„)mÄw™d؉Ë/rÝÿNø¦%„ØpèloàxBˆJgì&ו GFGƤÓ“‰½ˆŒç¾L §‰½eWU}y^µWo.Ïg‚ ÈÆd‰€µ‚ ,‹Å"•;Íe‡·Üñ¹ŸKç;ý¯¶Ù¯dYÖb±„Ã)ƒê¬>†™–ò‹aÊaà¸4fG¸Õ—ltª ¡ª€EJ'#ç&ß&ç¯j»ùHÓ=#ƒcôä̾×ë¥ÿ†EQôz½ïÌï{ì¬êëlðä4úDfÍ,»ÝþòË/ÿÙŸýÙ<GŽy饗¬VkÖÉ÷ßÿw¾óÏþó~¿¿ªªêúë¯?vìXG~Õ”>~¿_Ù°°Øq˜uËð‚ÁX2Á z.§ü”¹ò3;ë†,Ç­¿Ã´ñîˆ×7r.½rèv»«««ik^—ËU]]­ôY—déŒð–J½²šì÷¬ÿ˜Óênkkóù| ÷Dè1 ¿}GÛ7~}³Ëz#¾ÈVø6,pW;E9ƒVÛÀÛóI–gBÚ½/²–rG÷tªpÖìëúÐ[¦ìžö½>ëÿðºÏѧÐb–BfsCXóH³CÚƒ¡Hg°ÔXÌ$Êi˜ï•Ä8+Àœ3\Y–• ¬«s'g㩼-˜'vÿL¦’kPÀ:>hhÕ°ˆKÑ Ñã~dEP ±B…Ó2;ï~å Å XV«`šËÖ_ô¥’“{Fß×°€awìQö$ÿ$[ÝZøÝëQ 3XÜhÏ bÍ®`¾çwLÛ?¤1XUôQ___WWwåÊr¤¶¶ÖáHE]Ãá ¡ä‚•Æ&¾ëC[?í´ºÀãñ(Ëõ"—n)øÈöúõõeÜR·¯Kÿ€oÃ"'qµS¬3ØYë"îÑ}S:Ã0&“‰îÔeee*¯Ÿ‡¶~úË¿¥Ô°ñpßwÎü÷;ªŸlp¤j/B!u¹b¦€•g–¾€U¬3XR,fÔê9¸' Y–E9qÒ›v¼¹¹ýÞŽšMMÉÍ<Âó¼ d‘Ïãñx<ü©kéUÀß¿·ÃaÉ.{ÝÖY¡óŸYµ z…h€‚Ü ŒÛ`±,Kw$Q,h)Û@¬ cG³ŸL_§¼Fœ°äÀ\O )nä`z1qê”æ©ê;‡j…Üjµ’6½þCäxWå¶Çwþ^wS–¸“~ËüÎmm­3|ï‚ Èbi¯v¾Ý;­l÷ðq7›Í*Ëív«ÆT¹ê?»÷«ÿñî׈ûa\ŒžùÅ£Mdb̰TX•T–B¤Ä‘…´€Åò†êÏ o‡Å”ѧ™³<¾ë Êv¦\•™åñxH²9ðî…f`¥m°¤éAÝñH)#ÓX­ ¬co ÑT}˰ÛöÔ².]EÈq£çhÕ7¤Ü;ª]Úã¤Á ,dEÐÓÓSôZûžµ•O}p-}äühàÅ3©¯I_8ý›?³¥.Ïó t'dØz[ç`¨GyèèÀ›mÕr=cVw,$ïÁ¼Ü![ a¦‰ûéé·ƒÉÔe9Ö|g÷£\ðîp`ý`NJჴèÁI\íñ vÔ8½©Oã¿}éRS…#×ÈH$2==ý`;ë4§~®“v4™P¹ZÌîªG^ûd&…7'¾ÿ¸ûÈHY–Uß/`0‹jD(Ï i.â,3‰’a¬ ãÇÉvWÙîÖêîÌ1*K÷ÙO ¦Ó¯¶7{ÐÁA2A Y477ëZåÜÔÊßÔºàÇÿ/NŽ‹ÎÀÊl©«t'Q¾ùZœ›ˆ€õ~ÿë¿¶ë ¹ªi,)0Òµ3Ò|èÆXæûOㆣÑèÔTÚú㸪ª*«Õšup,³D¼‰w¿¯ìÊ(`­64Þƒ ,MëUVf a$zoø—d÷¶ÖÝv-] ° R ¤ENâj§ˆg°½Úyl õuð­7ûµ@ݹ§9õ‰)<HÔÚZ»Ý·\ VvgbÿøÎÍ»nQâœX,&˲êt#Ö‚ ,½F„E<ƒ¥Cá“(Kt«Ù…°wìÙnsmÉ!ÓVÖ„*ŽPXmúK†ÅÊÁƒÑÉ XÈŠ ¼¼|¹oaà)[wU ¡ª¥®‚"`59×›Y‹bä M^ž<Ó]—ÝÍÍèB˜<™V ¸-÷[ŸøšÆíEýþ‘“'ÉnEEEûÖ­¹[dï°¤)ýÐYQh¼éžMº-Á€‰û‰É×"É9eÛÌZ?°þIí úBT–¬œ”æi‘“¸Ú)âì¬Í¯šéÌd’XÆ2°vW><—ðŽF.)»ƒÁžŸûçÇwÿ.ÄbY|8”²Uyd`ñ –O¢<7â¼ç¦“KöÎE0=76LåjqŒ©ÆÖ¢úKV b Bã z…h€N"²lÐ^ÔôOô\(ñŸ‰±496’ƒï÷½–k<ã®!&«òÜ4ÈRòdº~дãaí§ ™Ï®Ã7oz98+‡íñÈjAÑ–Îz ,˪‚A•€ƒg½ûÉîÆò}¼«4™ a‚ È2Ó^³f0+g&“úƒf`˰wÖ>YiK—n½|îé÷μ100@2ÓiŒ Xyd`!¥Œì#ÛŒfú]?Xck±YìYý­è ÁÌüAõ³Ë ¬]%œ… `‚,´€eÐÄ]ÙhwmížR¶¼ùÉ[¿Ä±ÙÞËf+cwËa?€˜”Æ.‰ýó_· kÚú öÓùý~zW¥JdaØêVi´WÙ“&û¹¶:§ «9H—ê„SÉdR¢©JO{_'Ííœkcù^ݤú¶Ø‚Ad9ØÓU¥²òÌDøú¯®H² }^q..—Yb噕€Îöѵ_üÁ…¿ ' ÉÒÎ|óáÆ/:íYRÀ •òk€3+™5òÜ4Ä#™5H)#ùŒ`ŸÔ½žOüó±@ÐàìlåKÙÁ{)  €…¬Š5ÚÓ¦ÌfæXF”dÆ’II6±Z_VDÀbn-¿óÌô;ÊîgÞêÞ”5ÀbÜ50qEÙNø>9nÚþ!í{‹F£™VÜã•dkÚÉlD¸ºÐxÒ&î gâ®ú³ª„0!Åß›ù @êWŠÛ\¹Ö½›a˜¼2°x'f`å¤4?H‹ œÄÕÎàëª . ÜçÚÚ´Ç3 c6›éï†a¢Ñhƒ½»Ë½ër µæqÁ°Å¹©ÆÖ¢:Ý€¥ø¸+@üåÿÅÖ伫͑ˆïü£‘ˆ²+Øí ÏkdÍИïø-Æ­SÜ ~&{Ò¾ ßkظ08K…FfÖRemÒ½ò¯¡?TB)`öR@4A A– †r»ÙŠ€,ƒNTiúûÐ.TîíDÀº8}ôrßŵë25,º¡H·Ô5ÀR¥_‘B¦¶ƒl£{ñ@w!ÔóÀÊš¥üÀ8>ûÒ\‚Øi1·WŒÎHS/åUX‚ +˜;º«þ÷kW•íý§œ¢°L&“’·²«ò¡±ðå`RäÞ_=¸æóªs”[ÕBôƒÄ›ÿ¢5 2ã`÷ø¬çÖ´›n~ÜØXdÅ!‡…äñçÉ®i{–Œ?…ÞñtÿÁ[Ë軳_š5d G¸©µ¤,쥀h€‚,'‡™ü8Âqm‹n_Renrš<¡¤ )~vì½êŠÚ,ÕˆÀV5³-9û *d X¢(ʲœÕ¢2}eZÀ ¬baa¼,Åk,rõ2U<¸Á}[­­ Œu•öbBAU¾î*–a¬³Ão(®»ð`±XB¡Ù%ß fÆz{õÇ^ÿ¶RH8½—"vA2”á ¬‘Ð!öCkõ’<ü$¢Ê6[ÛÁuçL㢬:[;¸\®L£7žçAA–á*•õû÷v8,:š×ÞµUùÞ?‚”(`!+‚"öŒÐ†wša~yR׋°dÚ]Ûz„ýÊîEÿû÷ÀG3OÉ*`qzõƒ‚ LOgY5M$™f« óXiKžBk5¡å•OVf ¡$IÉdòØì‹ò|ñ`¹¹zGåÊvÖ¶Ó*¼AìBhˆ’ý -&pW;8ƒNË–&·RE(ÉòK3îÐ2Æ w·ÛÍ0Œ PoאּÖÏÆÆ@y$|¹Ýµ`ÎxV^ÿ‹ÂûŽêB®?…½ ¾G¶Í{? 9–le{ÇO’Ýz{tttd®"{<ž¶¶6ŸÏwÍ Æç]Õœæo>¹µ”ý­d‘ €…¬J6Úó8ÒA›/”—€%w•í:'¼£ˆÓ±¡‰àµ6P{:Ð%„m,Aúûû3eH&“¹¬”VU+0¬b/ÍŽ@"f«ö Y!ôÀ* K–åÿ_|"u`öÔ¢^ÁüjÒÒ XdÙÚñÂÛÊAôq_EäzÊ‘ˆ©ygl.àtô¦ÌâÓàé„”:èàÜ Žš¦nV(–Œ%S ì63§ë{ZÊ”ìi1“¸ÚÁ„ ¬?ûéyãçZ8æž@ ²2Ý c¹uµ;ÎŒTvG#—êËÚ’É$ɽE‘^á[$~¿_%Šé®Þq»iË|ço-ÕÍ …¡ý6{÷ÇžùJ®G«Ó´û1eÛçóõ ¢ÑèÙ©áDꈅµ·;·€v–,/°vµé,"¢ «?A®?CCCË} ËC^X èB4–aé|–·zJ?zíÚ5#9S*xž§5Z5ÓX„$3ÈÖ´“ƒ2 X«‡\ïAº~ôÒ¯ ÛÉ•àq²ÝåÞÅÀ‚ux]ËG½/x¬Ô¤d?H‹ œÄÕΠÂëª ;q..gÜÙ~Ù _ª¬¬¤Ã!ƒU„R XºXlÇîôÍô[›A Cûm(]ÔxÔ´û£Œ-» %ƒ|Áì®uï6³†a´3°ú¦ƒ$Â÷8ÌmUZ娈ÂÁƒõ!¥ XÈŠ`óæÍË} Ëmâ®+`A† t•íf™ÔÁaïÕK©Z-I’&''é…#£·äñÐÏâv»É¶†FfnD(MõçûìÈr‘ë=(½d[× 2}!>9%q$ÓéÚ©¯[B8K· ÄúAMJöƒ´˜ÀI\íà *ÜÑ]U؉Áx5jkãmdñc&6lqp™9éKÅæÍ›ó°¸ö]¤c8ÔñÈÞRÚoCi´WãQó¾Ïäzh,|YHL)Û,íwß v»];ðø@:ýjg+:¸=° °„A–:£Äˆ€Åqœ*ršÊ›믅Rùù/ý^wÝ6˜M$~¿¿¢¢‚çùÁÁAú"<Ÿ3•F’$ò Ãð”#ÚÒx+Ù>9t@fÒÓÒf`™×ÑÐ]g`½;õ£¹Ä,9¾«òCkì]YOÉ«„°»"‚ ìrÄBËíéz襳ßWvÏͼWW}]¬Ì °Z·gVR{¤©>9è5Òö¤d‘¦ú“G~ldä¢ðîûcS÷,LÀ ÷FŲmãœÍÎ dL ¨¬LÅhû/NåÇçr] ܃ê¢ X²œ,U̽kí»GþFÙ½:wr+¯ÓT®ìfÆ^¡P(×SÐ%„… X´ Ö"‘Ư,Õ¥V r,xžE9¿˜Óó°”¿´k¡s#át€¸¶l÷zwv7†aôMÜ©÷Ez`!‚Úì[ûðËgŸVʸFç®<3J²ùõ6q7üXì\ófqà$€,‹ýÇL[>°´wULˆö߀<¶aƒiÇꃴ€Å­Y¯}"`]™;N¶»¶±=?tÕ›õ¸:¸#È’€XÈŠ §§g¹oay°[8«)õ6Œ%¥H\g1«–ÂÆÚ[ëÊ›•m Ä+sÇÈ)™±ùJÎD••ËKeÉDÏ [Ó®ý¿0±D-N¢7DÀ½`dX®÷`¾VBŠ}©±µÜRõá\ãuÕ+ð.ÈÀBK‹’ý -&pW;8ƒಚÌ\*¼ ÇÅX2» UWÞ¼¶n›²-ƒ|y>ÎYÚ ¬žžž2°@eƒÕ‡U„ZHSý7àYÄž,. d`…’þ±ðer0kG…ƒWf4®†î²$`²"hnn^î[X6x§eŸҌ„pÂnɾª£+ ĤøMO|ï½ÿ©ì^™;¾•¿‡F’¤LËv ,ZÀ²ÛíY3°õŠX‰ ‚PSS“¾Éî=–‡ŸŠÅbÓÓÓ™Ú˲ÕÕÕV«5× ÈþÉÄï*ÛÒDQg`Q–iëlóÖ\#c±˜×ë¥cèÚÚZ­×0äM¼õoʶÁ ¬\ïAº !(!<#¼J¦¬7Yàn«~ŒerþѰè ,=°4)åÒ¢'qµƒ3X‡yz.•X#„µîì_pwtøÒDÊŠ¨oîäþ~–á–6«¹¹y``€>"I’(Š˜×±;ñæ¿(Ûhƒ¥ Ýðú‘<ûšúÏH– °®Î öíM|W[õ:b1ît:‰#G$.žJ[é.» bpïÚªBþ%ÉÁƒÑOÉ XÈŠ ¼¼|¹oaÙð8ÌDÀò…ãõ›Æ`ø)™LÞÚñgÞÿf\Œ@()ŒE.7Ø»³ŽÇã‰D"³Ý a«ÕÊ0 ÇqÊj¤,ËÉdÒd2ù|>ºž ´§&[¿ÖúÄ׬—Ž ÕIFååå;vhüiKž(ê ¬XZF4Ýþ §*+€xx€²•í¸ãt<ˆGod ¤©ˆGÀ¢c‘ó=¸ KÇÑcÄ×wÁŸný³Ñ³×c®ÑoDÀš ¦k*]95;Jûƒ´hÀI\íà -`ùBñ\Ö®Ö»þóð7Âñ9ˆˆs#‘‹ÍŽ¡PˆHNM¾5(//ÏLéJ&“F,²¿ò~lah„ÐÈ”€eÞûiÆSŸk¤j5”㸪ª*<ˆ¿ü÷)3²ñKÒÌ[•Ö”eߘ (ÛŒÝÍðk´nR–#‘ˆ r_ð9xçºGÛ×´_»vÍëõ@{{;™å£¾ø|ò`gëëG§ÂAõ Ñ,Yfò²ÁÒˆŸ‰D,”hwo½è;¢¹8–KÀ€p8œgÓéWŠz&“‰sŠ€¥}“„¬‹¢Z² 0嵌­LŽÎ€“ý“Ly­Ág\]ÐXŒU§1Ͷ@Ù”$Ië•´ØÙšöT¦,‰£½\›–h¨u“”€5*„Ä\?Axsð‡’œšô23¿¿G5Æl6Óyd™j&^ª§:š¸#‚%´ –/”3²˜l·tÜÿVïO•ÝCÓ?3ÕXl^‰^Ahkk[¤r”)`% mÑÎzÖâ`âa`ƒ3Þÿ|Š©©7ÚsyÇ#lƒŽS1A—Z?þ×LEc®‘V€+'N)Õ©®®Î½^ç…¯/Hm÷¼ÆÞõ_ÒÏ«J¿ÒôTD"²,OFóMiÌœåÖŽ8­eeee‡VÔ42þ½+éÞ5·we:w!²4 €… ËL^–†f‡Ah·ï Öp¸7"휺 ¯-`‘¨Ëd2Åb©uQƒ>î ™¥‹`Ì«‚©ë”S5ÒÄ®,Èh”£BõÊëVL°ˆƒ˜4z!»€%Kñ—þäì3"{G“=¯ÓQæµi20˜ëçÁÉþƒã‘ôšêîÊG8F­7Y­VZÀÊÛ MÜAŠº)³v,tG÷‡‰€C¯g[ôÅ3Aðù|×CÀÒ=ËçX+»ÊÆÏ(»‡þŒ÷ ¶»KGÀ’œ×z,v†oÐÏP2“‘°Á´å~"`%{^7kXš(õƒg|o‘#;[îpZˀ㸆†U‘Á¡«ië¶NìA‰ × 4qGVÔT¤ÐA›Æª£‚FV8öûý5¶R´%ÉâÕ¹ô:‹'« –ÊÁ]ÙÈôqçyž¾ŽãFFFT—’$)«ÚeDÀbëºÒ×)bwª„0³Ó³ Õë¦û2² éϹl°ÄóoÇ~øåØ3_Éú/þê?С0ŒhqÁüσ̫íïÿ Ùnp¬mrd‰ÅUydº‘hB”‚±Ô_Ç2nf`iQʤENâjg°0èÅ<_8Ë꡵²{{ó^ê€|Ú÷Æû3¿ ût3å8xð`a„ªu4‘\H¾ñÂN\ÐXlu›v, xŒÄÜæûÓãϽ rzÁOëM?µk2:0IG¡÷nxœl766Ò:©,Ãaª!f`-ì†h€²"(åRç¥*!$_êkÝi†+sLjñ$TWW“mãV¦»ÇãQå‚íÝKG“ Ó¯èÕ3CVm'Ù–Æ‹ÖÇ}A áÒg`mLÎш0qði[¤Í™IMº,˪G/ŽŸ¼æOÇ…Û<÷f½ˆJÀÒ-!¤ëy‡Y/Ê-uJùƒ´hÀI\íà †ÁB…?¸÷ïî[û¤’r¥puîdBJ0Ä`»0öìÙ“ÕK÷DI’Â5 X²PBm€ÅÖvèŽÏ[ÀjßɸRú‘œûÓK¹ùf`ò¦ûnjØÝU›n¶c6›Ò¹c½ão(÷zæõkÊtïÑ»a ` !‚,3tÐ&h®:‚¦€Ev×öãÞW$9 ÄÌXøJƒc­òPUUÕðð°²=å;qu."û·4Þæ¶Ï·P¡Ö-éBrPY„E‘^TvUb=Àb±"DCV}id`Ñ%„zXKž%ÇÂÉ£?Ó½Gà̉¦íÓU›„ÆtƒðÌPþ§þl¯±wUÛšËËË3E¨“q ×y3·á.4é»x1«¸©piâTïxz…socccuuõÙ³gU·%`9QÀB)N–ê«EÇÕÛ;Ö—ß~Ú—Ê‘¹8¦XÐÛÛÛÝÝ]˜VÖ(ň€e6›v~dwJæX·n»>gs=¯¾O X%”E{k22°è53C€ió}DÀŠž|ytë“ÀÄ‚•¾±Ôά›üõÞÈód{ãšÝ]µ[´£ƒ;‚Ü(PÀBV,Ù¬{ÞiÔ¸ôº’®ÍüƒÁ³JñàLläZð\µ­éÑïú.gYâ Ççž>üõw.ÿò®îG§½~'Ã;Mа2 &Μ9³oß>ú-`Ùl6E\I’t:è-ôÀ’'Š7‹òÀë—‚ÅÎÖ´¥Ö9³5"LRõƒæ}¿q¬éC¹Þƒ¸\.zÒiá©gäð¿¿ûWdw½««vKWWp§-`Y3(`åE) 8‰«œÁÂÈ+‚ùõ¼Î²§}oÈ0ñÅ'xK„Ãá¾¾¾ŽŽŽ4¬Ã‡g4"`©Öötû2åud[*)+ŸBUBœAëd”Og¡÷=ÿ·2€9ì…ù8™­íNk í½ ¯Ó}i>ºãw´Ÿ,¹a €…¬J9ÚËkÕQCÀ¢m‰Ë;v™î9:ð†²{Ò÷ª Ò\›ãT€¡ÙËß;ôw©[²Ô¬uïÞ.n±‚²™¸-£7p¨Í¹ÕÆ9Õ-éhÏl6sG$QuRÉÊk[™’$Gçdÿ$S|%QŽ…SÛ ËXt"Ý|K€mØ@ÂDU#BÙ?™<÷Ù5ïù䞦Í—RÅîŠðMDž9ú¿ß¹ø<í³¶•¿§¦&ÕFÀd2©:Qª«ééiÇ“ùcLˆ>}hN ä ýNA²RʤENâjg°0z`é”Â|8ä2yÖØ;Ç"©Lí+c»«V¶@aíwîÜyäÈÕA#Xª/8ýJO=0Œ"©È)D`sÆxÅm ¡+`©^Fƒ½°o~ð±ÐÝÒø%`¤dÃÑS ЮœõÎþäÔ·Ènƒ£»ÊÚ¤1~*ë›NåÔ›9vWoä& p%ÑMÜd™Y*w»ÝþØÎϱó–ÛÄL¦zef-•–5V.‹n"ħŽÎ¼øGÏ=òßúSQJfz`)ËŒ=Âþ#3¿TZÿdædÑÊ…Åb¡ï܈øÂÔy¡L· ´:óêÂF2°T>î m°ïýÄTȶng5Õ+ȰüW&÷ßþ³ýA«WŽî:{°T® ÃÌÍÍÑG‚Á`ö††§¿òãs_ùñ¹g¤»[b‚ H±R@ ¡²ÑUv9Ø:-¡  .!Te`é‡:f+ãœW:Ĥ<7cðW7‰˜ìMm3,[Õª=¼€Õ;Ó–û5Íåà.ÂÀÀÀ/}×%9qÌþþ¬±ŠBR’ÿèÙ³dy[s¹ÃRBäuÕ+D°d™ÉkÕQ;q‰`·ÛëÊ›·×ß•ùP£mwåÃiü£O´þåÇ:¾üÕ¾skÇt+‚(% ¼õöÅŸg-!<+¼}Âû †z‚gÂá°êôE X l°ŠÒÇvp·ëw«Q­:ª^ÃÌ×T>î &Þý>Ù6ïù”öSÇãñÌ ¬¡ÙËg‡¥Ÿ‹a·òwß]ûiŽãÈͨ,Žãc¶¦çF™ÑÄA¤XYhân´„š-lj).*††‚Ù»î§`+ß ,XXEX"6XÒô€âÎ le#˜sšÜ+,`q›ïÓx4«€¥¨WûÎì*ÛYimȬ¥'þéè“#·ubý ‚\_°„Yøýþ’í7±È ¬L›!˜wzdÛo?”Ó×ÜÙt÷ƒí¿52œÊjq:Íuퟯû‹{Ö?vèÂëצ®3³±1zóùÓßÞtÿídW‘Q=Òû*9xdö—kœi×*•€E«`†,ÊK/ ,=´3°zzz6mÚät.¸Î ¬tL/ Ÿ“®Níp&ómO€æ{P•~±XìgÇ¿Or¯\¦Š;kŸPì“É$©ÚP54˜?gG²4A¯pb ¡¥üAZ4à$®vp £°BàS‡k{o µ rÞÿn³s£’^˜‰{ eÅHåš*ËÈ) _óËK’0Á¶»ÅÕÌ÷}÷ÒÏÀï÷»7Üeyø©X,6==MŸUUUåp8¸î, >>ŸO„S¾×bbªªÀÌÚvT<ëYbIéñoyátZylª°ÿÞ½ú}Y (`!+‚¡¡¡Í›uŠ˜ŠO>«Ž™€Ýnƒ™ µ¾s_ׇߺœêq³»å¾ÿzÏ_ú¼>"`ºj·˜Âeƒ0Q1Ø<}Ê÷ZBŠ@ âÛõgµ’B’Éäó§¾sdòEúô¨zoê'wÅî¥ÛEgz`‘]cV‘g`ɪ˜N¯!hš¸ ‚‰DNœ8Q___]]MBvvÍ:ªa?iD˜ ìÛM›îeîñ2ʲ,Š¢îz˜ò6´>ñ5+À•'hQ²lýz¾®.׉¾øÄåÀQ²»¿ÇιrÅ*?::B«WmÕÎ7¿¼§­ZIÑ=° PÀBV¥íyæyOðG²¬å†Ä²,iç§àp82,Òëí±Ý¿sxð•HTck±ÙlÛøûŽ{S¼òÒc;?DZ&Uý ê¶ L]§<˜Êô‰ÿâ¯™Šœ]`"‘ˆàóE#ó¯¡ÝÎð¼êuÈ…yï§éò†!Ǩ ,kÞ–†©(Š×®]¡½½ÝIe`eB÷ÌõŒÅbtð×#ì§í!6yî`€q8ÝÝÝ™q^Ö ,]z(÷Í(`åA‰8‰«œÁ‚QÛ`UëŒWõe®µµÞÞðè»#?Sv§¢×~uáé'oûbÖsUå~4ƒƒƒY_‹¥KK!K–¥é²g$+3‘ÍÈ KÞ†Jí§êQ¯×ëp¨WAÉCW_!»›=wzÊušÐX•Ø(yIÁnˆ(`!+‚öxgúkO·ù±eÍÀ"õƒ¹0›Íäë?‘H(½¥4³ãXîñ›¾ðÍ7¾œy…FǺµî› ¢¢b}äÖ3Â[ ) þÈì©¡woj½kI,¶®K"Ö«ÿ 5 Sô3¸ðÊT6+møn0t !Øt<°4,žçgff2}Ðü~¿Ïçswï±<üTö‹šÌÜÆ»È^®÷ ­löð¦Ã;§ÉÓQ¶hçxšB¬´ÙêæF·ÆHDE‰8‰«œÁ‚Y …óhDH¸½å‘±P_ŸïŒ²ûúÅgv´ïYW·ƒçùééiú묬¬ r°fÍš‘u¯Ð°Tî`4‹*!,,Ù7 ñÔZ#ãªd]sýÂ2°ÈÛ. ŒŽŽº\.Õs½Ü󃤔šârsu‹s“†å™Â X× ì†h€‚,?y•ÒȲœ)`éfY,²TÇ•ñt`G¦v´ìû½»ÿö»ï}-K'ÅØM®=Õ+5‰•••ccc®í‡•Gß¹ôË›ZïR`AaVm§þ E#];Ë!`A4 ,HÇSWWwõjv›0¶ºÕúÄ×q—é?Œ+sÇμ@Ž›YÛ]µŸdƒyÅ3“Lwݧ“e8?J X¸þ† RðyÆBª ,°Z¬u~ößNþYDœI–þeÿŸÿÕGþÓãñTVVÒqŽF¤D‡(,Ë’å¢|3°Œy`QXÅRB(½‰·ÿ-ëCÒì0ÙfkÚ˜ëgFŒF^XíÁáp¸¿¿¿½½<×lpâKÏ“›=w2ÀdØ*fƒt ! XK ªWˆ(`!ÈòC XϹ4ô8ÌŸ»³-s¤ ô*_0ÌŒ™t3°²ú¸«JÉö®¶»»j·|ãÅ?šë˜Û*³q©eee&“imÙ."`õŒ¾?œˆÇÓÃ"2°nŒ€uúþêø·dð†&Ÿ>üõÏßù—ÌÂÏtž¸ ú ×jµFæÝ ´u“3°åŒÕ!Ç ÇÂrØÏ8Vý²xáíØ3_ÑÆÔvd5××°òòÀÊ%;úýþ«W¯VVVò<áë¯þA<™ §&O»k,4Í ýWJç"r]A Yôôô”²ÖÎSAÛsGGž;:ëëËöuW©Fú|>:„ŠÅb*ƒm0•ÕÇ=—€7Ý¿æ³=³NÌþª£lg“s½r˜eÙp8,Ër…uM¥µq66²,¸üË­ž{ÉÙ Xܺ½9Ëß‹ÅfffÈe†©©©±ZsjÊѹÄëÿ˜º™e°`A á¢LÜs½ž¹t¥¬d} ‚ —ÞØX\Jñ,cº»îSµ¶VÝ'* „ðì‚úÁrF«‹:¢¦Ä?H+­B` IDAT‹œÄÕÎ`ÁÐ&îºv í;Åb±Äãñz{çfÏ=Â~åàû}¯=¸ùÑè‚/J ‹–Tl6°®‡0åuò|c>Y/ëò!#ÃŒ`A¡yjÈŽssssss熎½<ô¯áø9¾É³e8†aò*!¬.C An(`!+‚æææå¾…å„ÎÀ"ü¿¿¼øú—õ­42Sè ÈÀJ&“$˜cYV%ù|¾d"¹Þ}Û[§ËÌÓׄT›êî²Ý‡b)ψ—_ìÞº‡…–,³ Ÿ??55•ÚµZ;o»MëILønjÍÓ?) ã7ÞÇöÀÒÍÀÊŒÀèìª\ñ™îâ!MÖ÷ ×ëU&k26H69Ö­±w‘]«ÕšK™*@À:G9¸oj@¬ü(ñÒâ'qµƒ3X0‹/!$m¶ó÷F.{cc ƒüÓÿ|Wõ§é‘j”¢‚)ÛôJ˜Æ)Éd²0¯qPªÓÖ¬Yg䬕Œxé ‘a×UÀ"oCmÙq6>öòè?‰rzL‹sSwÙn0™LŒæZ8.F©;±šX§S/%Ø ÑßlÈŠ Ä;Md°Þ¸0uðÊìž.Í–„ Ã0 C,*†1bâN¶•¯v•1D®ïìrK ½›L&É’c›kë1ï‹ )ÞÐä•™Ón¨§Ÿ®+/èëktJÁrlÓfñê‘Ôý ž6m[N ¬…›¸g}T!sAXƒ¬ïAR1é'ël Š[s`AAÖ÷&°ò£Ä?H‹œÄÕÎ`Á,(!,ÈÄÝb±(Y†ÛÉàõ‰ÿPŽŸ>ÔÊÝijkÈH ,Z£*\žÌúA0.`ñéðCÆ õ:YÉÄ#tb»å¡/›ýÇ&·övÞÎ ‘xÆn·ó<¯V˜€EÞ†*KV•žÕ7w‚V¯öu>Ò&ݪx¼0ÀJÿ U ÖRƒê¢ X²üÜÞUùÔ×*Û¯ôLžN%¡üù/zßX˜„Åó<©êÇSQQ166F¾’­V«ö’dËÀÒªÌ -`™Yk›kÛåÀQe÷Ò̱]žGè§»ÞY1ød[¶Kºv¶=¸ä·¤Ãâ2°r•ÒŽ³YC꼘ïM)ODÒ}¯kííôBEUú½÷* ÜAJ‡…%„‹ÊÀ€Gw³{ÝPࢲûþÄ/\óy22çêGáÒkEkBY’eYEÝ•¶¼¨Š}G!9ŸÑ_ÛiýÄ×5{èµ¢¢Â`BÝÞ…z6+++m6›Ïçóûý ƒ<:O}xëgîí|âÔ©Tó뼬J4ÀB X²üìjãwµ¥Ù^û_¿£l¿yaêÀ¥Ú Ëãñ´µµ©¾¶éÎHÕXfÖ¼NMÀR©f46›Íét*úW›s °çnò<¬¬b)-^äÕAÆ tˆ#I’nÔȵl%ѱ8tfÉïG—%4q§u8Á`JË+++оé‹OƤÔ_ˆ•³WXêè1–j ˆ“HΧKJ—&R7Ï0XBˆ RBÐ~ FJU_1Ši}pOã£?¼2"˜Œ‡{›)ÏH$B÷¿›˜˜ðx<6›çyú+uvv–lG"A²j%¹¾mXt–,¬úF„âå÷È6×}»Î`QTYægŽÉŒUs§ê]¨Ò¶è”+—ËÕÔÔÄóüåË—C¡7>L¦.b1ÙÙö›!½²hÀ‹jAX–ÓtA%,dE€¥Î„Û:+ïÙPóæ…”Ó—žíùØ®†Üç"‘ksDÎøÐ:S®‹oQÍ2e,%Úëíí€Z{›…µÅ¥(„“o|¼Ò²†<­²] ,UZ¸nÔȶl#ÛÒàrø¸/(!\”€E‡wN§“Xye`e¾Ãá°”OFÓéW ®.€)~){sssôî·÷÷ÉöY&ÞP<žLý¿š*YKk ðƒ´ÀI\íà  ý™_@ ¡Ùlf†>XkoÛÖ¼çôPÊ’iÿänªxh}ù­ÄÌÅÑCƒsçn©ü°ÇR Ñhtbb2z=ÓÑ‘$I™=òr}ÛjD衬՟u‰°ÖêXªBά­“3_Ãh4JÏ Ý»P•¶•¹Äëñx/]ºD§_mn¸Åb²%>Õ` ¼t ¡Õ%»a  €…¬0Ú£ùóG×ëø ïø O{è™JþÅ[s²<›k°ŠÍ˜~•7øAZà$®vp †.!,ÀÄ=3Ý[ÅÇv~þÌð!Y–@”“GfŸ?+¼Sß¿'½¯Ý]÷)ú"‚ о¢*²|]ª0’oN XÒj°dY¼ú>ÙãºuÞ … XY‡)(K­dWzÍŒümTTT-`íl½2 ³´o~–j”Y‰XK vÃ@4PW#²ìì骼wCþ¸lôyõµ!U áÌÌ Y<ÌlAH£¤bµ¶¶¶´´¸ÝîöövÇCgì7Ø»Éà‘È% Ä²|=°±lpZ8ËŠ*LÔ«“­›o¥'KÒpî---òâ2°dY&‘´JÀ"Žñx\#ÎÓE‰Èe'(÷öÊMô“ɤ-¦îP†o ëzëÓlA,AR‚§Œ„Œx`©2°2 7“ÉdsE׃›ž¤‡õ †ÃfbêËÒ]qr=DPbz>ËH´Ãz(,ßê°¤Ñ rЫl3Nž]Ó­=^•¹¦D,ÊKª@Z]g3zKÔ`ýZ,–@bÆOlr¬i[ÓÈWÀ¢=°\XB¸Ä`7 D°d%ò?]_؉W X Ã/fY–ûûûéGoË\(V{{ûÎ;•%, l ÝÌ|}Ùtt8*I(ɲ,‰ê$IÒm˜¹ŒF§ód’¯€l+UExí†W.΋>H?J+J²,æã.B__Ÿò—àOGÅÔ­ÚÍΖÊñ¨FúÍócý¾üêF7a‚ H)A—.U||÷ï?Úý»f&‹Ä ƒ|ÒûšÆõU©ß$圠ŠU²Þ€6 Jý«ÛK¼tlskoFçg¦*Kqg§/ûûû3å*–eéÙjµfö.$Ч“³X–‰^$Ç»k·;­e°( 3°äÆ%„ÈŠ=#Tìéªüÿ>¾yfN_}ˆÅbcÓ¾ (»ý‚¤ñEN { ´xÐÀb±(6ðv®l»}4Ðòhä²Ëê!ž\Ç]IE#=é "I’*Ä1"`qÍ[“‡ŸKÝϵ37ØÀ@^\B Â2úQŽãl6Ñ­¢Ñ¨FJ yª E'ci¬µu[í¶WÓŽðûÿ ßœNÛ·ßÑ]uKG…îýì][¥;Q¤ENâjg°`¬&ÖaáÂq¢Œ%]V­8A7‹èGíeÛiüâþ©gfc#À'AꡱȕñÈÕz{gæõM&S[[Û… ÈWªÍfÓý_Ðñ•¡Bw5p&“ ‡|ˆ‚YÿYV&y9¸C¶B• ˜kIÕd2‘×¶¬¬ŒD­<ϑ˚Ífz¹”ŽX®Ï‘í- ·)(`!Ȫ,dE€Ñ^&ü@—þ ˜õú^øÊ;‘„³a16]ý‰HNKÝ8¦¥lã¼€#áK®D»~VfŒh(«eù2°’qÒg83˜tBŸ¬«¸DÀRe`Ùl6óÏÀʪ^À$U?Ø]·Ce– …AMŽƒWf/Ž/°lWˆDØ7/ˆ¡D*‚,·›ŸûÝ›kݘl]ÀÒ"'qµƒ3¸<³"`€/”аTXŠâUÀŠF£eæÊ‡þk¯ÿËᱝ}{òûc‘«Ê£'¼¯>ÔÐÁ€º`ã8Çãr¹È7©ê0+ù&Ã2îÙ7 Ë’’­jÑ?kEB;¸O•µ'´ L³–ê?‹(Ò²ý‚{<§ÓI,U¬KÂN!<3R¶`6ÔÞ¬lÓ¡£nŒº@Àr¢€µÄàJ¢ X²ê©¬à·4yŽô§|Nùë=:Ëwº+KyA XÍ®õ‡à—Êöhø²$§Ã‘¼¢:žçÇÇÇIpc6›52Ë °8ª„P:+xg=•ºg- r>õƒã¿“µ„ã8z:òòqW*@út18¾Bv×ÕmÒ± 7"ýà¨÷Â/]™ŽIÆ ®þò#P½BA²Â;-cBêkK'š*´2ˆ³f`)•¯EY–•–ÄÊW! ÜÆò½ÊàŒ~KfbãÑK¶uY¯¯² Uß0Ï{½^ò½É0ŒÝn'x³†:ƒƒƒápØf³1 £è;¬§^T,¥áʰ¤©þä‘ë J&¤©ÔŠ—Äšú’nipP„¶¶¶\–÷,Ï“LÒ–ê,ZÖŒF£d$Çqä¡“Cäùè´ÊÚèàR–˜µr@õ Ñ,)¶5—ḛ̈ðà–Zíñ¹Œ·Ýn·‘ D´bRem´s.Å$5.E¦bƒíЮ<”—€¥,£Ñyû‹x… X~°ƒ³’ ÍÄ#§¿ÌÔ7,¸3ïû S®ó"k±ÀÁ]§!ä“¥”¦Ÿ'kff†V¯à½éŸÆ¤”be3Û[«Ö] ¦-…¨ôǯ…<œ­¶4•ÿî=íÆÇ#‚ %OÙ`ùBq‘CÀRŽ“¯Åd2)Šb¦2Rimlvn¼JÕ‘ö½ÞXß “°ŒX§¡¡|uZ­VÚ23axx˜çy¾ÆRNb²Äÿ"ö¾“ùŸe[¶™6Þ Ü v;H!^Ø{æ+ÆÇGªÖJ&+̘æŠß23°xž%¯3=•ô°÷¶p@®Íô<ž¼–~…›‰Ž†‚¬ PÀBV~¿ûM,†mÍéààô– »BÖ/f“ÉÔÑÑ‘¯,°8ÎÔä\9pLÙŒœ~lþ¡üòêée´Ìf@4… X>ŸÏ·» €?ò`°âŽ­j5Ýúqcc³—hš¸++Ì©K1ŒJÀ2RB¨Ä—ápXÕüràèp¸—ì>¸ùSkR&b.&ÿÉù©W ßúÔ6«5È"ÁÒ"'qµƒ3¸hwŸž»Ê X&“‰H¢(抶WÜ?:ŸJŠŒϵº6ÓŒX@¯{Y,•‰;Ý‚†çyŸÏGßO,›˜˜°1vbú˜8ðÝ\ÿ_ÆÉ›v|ȼ÷7¸M÷äs ©U Ön42,3Ëãñ8ínB*4,2/‘x°wì9ÞìÜH¦5?+”ޝPÀB XÈŠ`hhhóæÍúãlmJ‡ËF¬¬XUUU¨W°PÀE±Å¹‰XWü'ES* (_‹Ž$´Çg>š5`UÅ‘®ìtÓ½“,Ï8pbQVž-³6mT!UéW°ÐeV7+ÓôJ!˜9:û"ÙíªÝòðÖÏÏó£SÞ?yi„îwɱ̖¦òÛ;+VrÐRåØÓuƒ*4Kü -pW;8ƒ‹§¼„žyXe­øáíõëêË”mAÆÇÇéG£Ñ¨Ò%Pläúô˜kÚ˶÷ÍTvÏo¶¸6ÑNX,• %ýì‘H„þ†Ž—q»~cC¾Ä»O'O¼àú§ñlô.Möå5>X·Iÿš’¤z=•¨†^°4+°È<ž~/)¥ž×c©)7W+:]™H×f%)ɤQ&Ë0èµÔ ¢ XÈŠ£½E²¥ÉÍ2ŒâCte2Š%šÖ§Y¬‚é€, 5Ø×–[jüñ)¥ä«çŸ}òæ?„ü,Z„ÒvF0’¥RjA°ÙlñÊÝÛÈŠ8pBt ¡+ëñ\=ºX™-À !Å÷Oý0)§–FífççîøsŽåÀãñüýÁK³é'½Sí³ŸßÍ;—§®¡ÁÒ"'qµƒ3¸è ¬çŽŽª1è„EÈ7ëĵýä`³c#¹“¼Ò¯|¡8YX,w˜8Ì._jP½B4@ AЧÕÔUëº41’,ŸÜÚ©µ —õ»¹`Ëb±0 £¬\ɲ Àl,ß{hú§Ê£ï\úŇ·}Öi-»~XF,•R#B]]ض{bëʆajjj²®Ž¦ˆ‡ã¯þƒ²) œYÍÂF äUBh-PÀRŽg X&“‰t˜E1‘HäåÙÏqìáÀóÞØ9òÉ[¿T]Öºsõ¥_Æ;×Uÿü÷oqXr&^!‚ ˆAxÍL–1!¢ñ(ÉÜQôBNYY™×ë%»åæê6×Öþ`ª ñß›ÍÎ$ K¹Nb—çŽ@›k«nÇqô³gj1*ß.…`í¦‰­O”——ç Ãä¹™äÉäÀ”²›x÷é,`Ñ%„Öÿ5Sјk¤àÔ;ïÿ¸Óé4èà… XÚ–X%Jˆñž‘Ãä`‹s#ÌG›ôäæÙ‚[Ó È ,)¶5—+œök X™X&“‰vÍ †aÌf3‹tº¶Ÿò¾ç šˆ¼Ùû“G¶ý&·ñ¨¢Ç,^ÀÊÄf³qMÝ#ìo+»f³¹S{ÁG–ï>-‡Â4ÕÇÖvê>Kvd`阸çú¿äÊÀ›Í ¦ž"æ%`õÆ\šIç—ÝÜ~ßž®‡Èîô\,šH=c™ÍôÂÞŠê‚ ²$Ð& †Ú’ÐÁÆÜÜ­X¹Ýnz¶xîUzÒyããýÁÓ®í ÉÉ+¾S¯¼ùíÓÃï%Å8™y¡³|»½^î®ÛÎ2éú2U–ÊKuoY ÂíìÝ[ª»º¬¹mÄ“á?Û™zÆ3¯È)Æ]£ñ",!rXƒ)·P°Ø¾Acp2™4¨@å°Œ,pÒ¨Æçzv%:7z$šHÉ N“§ÂÚ@GtpG•ŒV}/‚Ü0<¸Ü·°êÙÖLÛ`©‹ÂTd~7———k¥k£Z–dÓ†ò´ôÆ…%Äx^Xª¶A‹/!Ì ý:¨3gaضé[ê/¼Šp¡‰{™ö`í ,úJ^a:LÛ‹çyº¢áÒÜ‘CCië«ÖªuÿeïWéñCÞ´inK¥Ã¥Y©ŠÜ`ðƒ´ÀI\íà .†Û»*ŸúàZú߯íN'ûŒQÏótjÇã!¥j´„499I{½gy,5›jn!»ïN=÷êø¿šþé³×þú¹žo|[Q¯@”—„£_{ùwÿüë;~là-I–€úŽˆsªBU(B;Tªn¦ººZÛ„”kÛÁ6ÍW§Š‰Ä¡g5/-´[ݦ{®Š5| 2Z| ¡,˹NWþ*ôtlP²í23°PÀZvò2òGJ üí¬°ÔyñlmÊ£¡Ùl&E ‹ìšTYY©êa·Î}óùÀ;ÑdüïËgŸÞVq/yT7@QÅ@JP’ËSÓˆ€Åóüääd$’Zyã8ŽçyúžeYN&“ÚQ ×¶S<ÿ–²½÷¼ºÏÀ"Q»wI–.ŽŸ86ø¶à÷5±[xKÝiß›§}¯“¼£ú¿Ý÷ ‹iAÀ}m†°ª LÙC®øAZà$®vpî6~WÛˤc¾Í;aûÓ_g§­­nÌB • }µD"¡ ~à¾î'ÎM½¯$aÀx¤o´<˃1ÿ{WõÞÕ_uÕnýü‘L&gãcg}o ‡/üví_ÕÔ¤£T¡ŽÍf£Õ4·ÛMœ Œ$J›÷|"öÌW”íäÁ§-|Q÷”%6ÀbkuœCUyU™iV&`Ññ¡Æâ¨Ùl–déÔлäH‹+åw–H$dYÎKÀš ¦Õ·ª2°–ì†h€‚ tÖÙ¿(ÉÚ¦’&“‰þ¶^¤€•iefmûºy­7µHøüéïÔíNÇ=ºR™DQ4.`)ûèœ2ÇSQQ1::ªìrçñx&&&è³tí¢¸¶é§XŒ;]BhÕ)!Ì×Ä]E Pñõ½~þG'®íŸ‹¦Bç“ðñÝOÝ”Éþ‡÷Ãã¨R;äMÿh®@ A¹ŽÔ{Ò‹(c¾j”ÇãÉšµ¤a`Äqœ*ø€–êµ{»:pù…\g¹ÍU’,“>Õñ+“g¾úóOÖØ›¯ù/(G~~á·vìÎuP(DžšeYZÀ2’6nÞó©Øs’bÿqiøÛ¤ßìoñHùXª×6‘HäZ}\ª , âCØ; $fý‰i;ç¢Kf"£?}ûÿ°Çe-o,[›L¤^öx<^x¶ ¼ z…h€‚ õ[­Û:ˆ@$.~õg<¹½$"‘ÈÄDˆŽöÏfz`ÙÌìÜgÈæ)ÓT‹eÙ‡·ÿÆ‘Á×ü/ˆRòÇ=ÿçšÏsŒ ”fZ¥Š¢˜+¤Èùe¦SѻʬêÄx<®mƶßD¶¥û¸Ë±t["¦P+—‰» dQæÝëI”Ÿãÿ÷Í?÷_S]V¯,œõ wÿMkew擎PVc…]ûÎAd1Ô•ÛH“åé¹xR’Mzß²®åTÀn·vïW·­¹ãÇGþyºH!‘Hø|>"`½ÜóŸ™êÓêþo÷}£«vKÖG¯Í.ðÀÒ¾s䃤ENâjgpi1±Lu™EYœ“dyÂmäuÖNh‹.4™L<Ï ‚ rÅRVà¶4ßJNG‡züû­¬£ÍµõþÝ©®ªaøD$ÂÔÛ;ëíÛ¶o›Ž ½töû§‡²›ýêÜ>Ôð{æzí›t:Æ,AA¨lÜÛF¬ßcœZ¶YÀ8<æ{>§=Fº![Ó®=8ó?‹Å X ™‰fµZ3ˆô¿2þ¯0ôÿ³wæñmTçÞ?3£]–-Ùò¾;¶'1ÙHBVI(!P ¸”¥¥ e¹Ð[ ·½Êe齥иíméÞ¾ÐÐR a ÎFö؉c'qï»F–µ/óþ1ÊÑñl’¼Ä’x¾þÎŒŽô`éÉï<ç÷HŒç·wàÝ« ï;4ôá9gƒàÙ¥—Ñ6ÓéÄ“‰o ¡ƒØB˜]à‚”””LõR¹%XÀš(^þèL,V^^ÞéÓ§É3F£!4§xÙª×|r ²yxŸQ•Qk¾llXrƒ%ŸR6Æâ8. Š+°”gÅû¸c,׉]¦1 Xqy`‘ïN­Vãª{¹ ,‰—;Ÿ¾÷;:ÿqäø¼Q›>¯dÅÙ®æNç)þŒÅóýu/˜Ëä&ÓN˜¸CV‚_¤)1ÙN8=/`!„ºÙè¹…Pàõi6›ãZ­–wP«Õ*•*[Wr¹îþ)µ*¬brF0¬ÎSµö…'ÞúÛ›|ÁðÄhÄ„P! wõm^_p?M)‚Å%`ñ•Ô![ùŠÒ]?§ýn„ÇvcK,è¢YÌôqù²q}cßBˆä3+IwK£‰èM˜ç…Éô{Ûö¼Ó4üy²8³òš9ߘW²üÄH#9mA7I…Û"„†œ‘7•iŒ£Ñ3#uuuà'È]„`œLÏœ’‰ÿß=ÜMÝÈ‘™™)8ƒ÷âýËâ‡ò2 =‡¸CC~Þ÷†/ Û˜†'.K®Kù@ Þ ,4ÚËÓ¼7êxIÆ,`‘™·‚‰»œóýyÏ 8ÛN×[~zã–»Wþh]á·¯-z¸Ú´Ðª-þÁU¿RP¯Bmƒ„T`%ðEš@“ˆà„“ŸAØ`±J}uyäÖrL&×èõzÉcò>b¥‰BÔš™ŸºöÅ™•ÅiÓ¯,¸çò¼Ûñ˜Ao×1öSåIFò';ÆÖÉ!•ÎV¶"–‘ï[?Žk¼¿746ÑGM[Ë”‡‹å*IK`šy5ù4LlUBÁÖ‘zòŒŠVgj 24ý¦á}èüÎÁLcîÃk_øÏëÿ²¸b-EÑä Çå['P¯  R‡ÕÖÇ®ªŽe¤×ëeY/iµZ³ÙLÖx¿y  ¤a IDATóLŸ! q¿ü¸å'7F1 ׇcK«Òß{éŸyïž@(œ´ŒÞÜü³šÙ¿NÓÊ&úâdNÁ×3FKp&ÎÄ+`qçG/ ¹…0š9Ie‹Ï¶ù-,ˆ¸3ÀšÔ™|¦­ŸmßÿË¢‡ŒZÿ!X4yK³o i:'£@iÖPïpø MZt ƒ`ü>îÝã°øþ¼„lÚ«×ë‡ø>r¥R…–Šÿ¼îÏ»wïá5šiióÎŒ„³‚c¶K³,š<¹IF2«‰%ýà¬Z›uj[ŒƒBÁ†‚Muc. ´¢óýé¬"¤Ž²]Nr ¡x˜Ïçô‚äQ®Àœét5ûBáE5“ÎüÀêç3¨¼“'šFìÛí? r£fBQô·/}jFþ|ÉŽOÀ‚-„pA R‡"‹>ªÒ„!­¾ÉþÓ<•¹iwÿþüëÏÎ>ñÕF­Ò×…J¥b†SH7ôòì™^¹iÓG9}áŽx½®ÖþzÃYk†Ø+°ø†ƒâó±T`Ž…!º""`iºO؆†,¢ê³¨Œg !y> œ<:ìqäé*Ðùl›o.¾·iÇÍt‡¯Ìÿ6ByÝÞó¾vFÞü¥•ëÐèÌRÒ¥‚¤mÐ…?é³NÍ@ /0¹{»íÑ,¹bdþ7N M– Y^T !DQ4þ^lýê@°ÍîD…P°®ÿÍõß¡)‰J†at:y+eËb±´¶¶òÇŽÂù‹îÌ2g(ÿdŽm ;Ê{ßzÊðƒ+0ÊÁ='ÊþA­«³³³··×l6˽߸*°ZF"û•¯™‘7Ÿo-¦2_d^uØ6Jæ»bæM¤z…DaÏ‹°²MP°€„¶:_xäúOóÜzIñã›ø%&›Óÿú¾Ž»V–)Ü­®®N­VË X¡ùóxÕ¯ÿûŸ±þp·»O›Þ¾vî*Fú‡?vw¹õºX*°Æ°…pX“EiM´×b|#ƒ~”Î/ì;†¢5W}Ñ By#ÒÆ½…0Ä…ºÝ§Ø›~]ßÀ·C*6Ô,ÌZÏgÛ]lëëûþçXG¸Øj{÷ï®*üÎow>˺ø3*Z}DzïSˆBy<‘ y¼$mÄfRØ?˜€Ài ALv ‚Ψ-„6·ÂHå ,Á=þácYvxx˜|jddD¬y .çý4ùc-c¸cé£/ïûR z;ŽÛwÎH_Úå>å :ýœ7Äñ‹:ê[§eGÌþÇq”L_cÞT4üŠˆ ]óÃôiZ¹0™Y}ý³uüq°aǘ‹°H+ªRôÀbY¶££ÃårÙívÑuaÝ!.@Sÿ>vþ¯Ý1±ºdڈȗjÍ+ÏŒö‡Ó‹6wãÂïnH*b_KQTœX `M<Ð P, !€l/ÑÐk˜»V–ý×ûÍüß~ÐLÖK xpÍ´Ù³g××Gœhšv8,Ï\²®à¾·Úÿ›/ùvÛö¶l_^µ^òž±W`Å.` î .k¥ËƲš¬Êô®ð6¬}¿CE1ô:S6™½ +°âÛBBÁOúþBæm¡vWc§»ù˜{Û»wÈ9ÊÈß~¯óeO0²i±Ö|©Yøã¸*°Ú‡"ÿr÷¾HSb²œpòÍñy`)T`±,+hšŒa |Bv»=++ ) Xçï‹Ë–/*_óÅÙp¹ÓaÛööBœT–Ò…B†ª9æÕ¹º2^“›¹àE%‡áN…á‡æÜi3.¥N~Æ?ôþùÕâ’7§ÌùêwH>…âH+Z BñT‘Y‰?a„?äðvô{Û¼íýžvw‹£@_yyÞ*J¨ *°Ú]Ç\øÎ}6ß:§y4¥ZœuÍöžß#„hо²ü›F˜áa%'µüÊá øám•z £×(¹õcºa €€€4÷]^ñÂÖSÁ‡jîy|³° 1fvaúÌt7™Æ…B!›Í&°†Ñ© •¦'ìá&ÐÛO¼‘PVŒ&.k5°âÂ_÷—°€Ex`QñT`1*æ³Þ×êOˆ ž8&yR½²j‹k3VáèT`‰Æ(¬¶JV`©Õj†al6ÛÈÈyž÷ˆ”×C‘І¸”[ðºw,ý^CÇ.ÿ0B—\ÉÑå:Õå:UiZ°<ûF¿ß£€%¹Ø†;ò°,;¼òþŒóV°å@°å€ô$(ŠÎ©«Ï õµàã¨X@@lW*éå : mí÷¶³¾^rèrŸþ°ë7kòîÔ2‘u2Š¢ºRËÈQ|<;w_TNæK…†é%†Ym®ã™/Ï5”Šç@*bä$£–_2À‚ò«Éºa €ƒ Ò”f®—ËÈ­õ½Ñ!„¢iº&} Bᤰuàä©^iÍ%v÷1o!$wÏñÄ.`Å2LbJ_lá¼.„"*°P4,“™™™–¦$Bùwþ³÷"„8#pð]õÒ[Fm!TìBȲ,Ÿ¹À®þÍä’£Y“s÷åÿÁ¶úNÙü`$v¾`hU±eÚ5sï4‡Š~»÷©.÷i|É"ëÕéj+ÿNÅB &X |‘¦Äd"8áäeèhŠ qB¨ßá „8-í…t•A1”ã¾üC³Ùl±„b¬À•;sò—nÿ¬Íuœ˜®¶–dLçü4¹z4B œµ…—£8Ä®»4°Vnna(F !¤½áIWCtûöPÛ1ßö_h®|HøÇ…úÏâGQ+°$58>³Òh4¸*?Àùí{”oeóõü³ó——çÝž©É÷GnýÇ{ÿð†4´Þ`±¹BȬÉÍÖñÇ‚ §©Ì_)¸›FŒÏç“Ü@&¾O·‚KìàH$q .< ` d{‰É¥Ó­O_?Óé•^—ûŸíg<þ BèLŸ3­ –é•ÌüHø´šŒeXÀ:Ðú‰ÍÕo1d“ÃB¡8¥ˆEÀÒjµx;€B–É#®ÀBE°ôz½GkîXt7>£«¬Ì*.V¸qAß{်¿¨/¾…οµ1²ßü¥E(r‡wôüiÐÛŸ2©³Ö}{váâgv–/*6Ì<3rxî¬ùÅY•¹éE ­B={vUîív¿:àí@•gU›ñ—§§§‹?„è[‡ˆ-„P•xÀi ALv ‚ŽŠ¦²MšÞa/B(Äq=vO‘%ʸ®ŠÿSP©ø¾’Ý™É=e XøE†Y’}]°/¯ŸVbœ™®¶æææööŽªU/++kó×ÿîógù‡-ŽÃ¬s S¦©±àE%u"àb0, c.×~í§œc@<ÞëõNíQŸÝÇ?ô½ù#õ’›©Œ\r gëD¾pNE¥eQYMGab!ŸÏ§ÑhpŽÑ<¼ßÂéeÖädk‹­Úb«¶ð°}[ÇHØ}u$0ôÏÎ_ÌÌXvÊqÀ‘º1B•çàüPœ(ÒH©ÂN£ÑHã‹Õ.’A'T`M:°(J<ñÕrOn³ok'd»ZÝw,”ÎüHøô._?ͬÉa}}¡`(ðçÝ/<¸æ'Š,¨Jæ@ry^§ÓÉ XâË%}¢î"œaY¶XQÀR/»-"`Õo#%(Åýƒ¼¥E¿·ý“Þ?»‘îHF•ù+ùwëi:¿³’¡TÕ¦…‹*.#{Y,–ìÌÜ5Ü7Þïú¿ç[š}Cäç[¹ <°€ CEÏ X¡n6º€%¶1âàT*$ß™¦i•JÅ'Ç|ñB„Ã0zÆ´6ÿNüTff&_׃_Èb±”¤¯ë‹_Ù½¡çßÕòÏLSŽäÜbÙB(¨ÏÌÌä/×\ý=ñ`~yÌ™³bvçŒÏ‰â\vÏ/ngf¯&‡…Û#B îr¥aüyÞ(=ÄÛ?ÇOͱ\¾0{NØÖ—ÞûþÙWñgó׳Ÿ*¼"C©+Òæ*XÊIJTÀ‰®áÿxë~Ö$ê XŒ‘uµ¹XÀÚÚÐóÐÚi V<|zG!ª&}éžwø“Ï}º­á¯_™Ù”'ikKYCUÀ’4ÕŠZ™?0 \É´Ûí ݯBt麸6Ô^BÁ€çOã§”,„аࣞßyƒåȬÉY“÷4•9 ñ·ùó ÃæÀgêf³9¯ðI›»Ïè·â>;ü‡ãóùð‡ R©”KG|¸ϨUAÒ\ò3t¸sJ,å*°¼J¥ °B¤ÛºäBñ«[­VN'§–”\µõÔŸø“{Î}P“¶Ì1nºÂ²,ÿ ŽD™‰ßïg‚œGYš ;¾ë- î,ÙóJøõÛõÛå.‰j€…+°Ðy¿ü³ÎcÎ@XÈS3ÚK+¯ÕÒFÜ’ ¢U¹·ïü{Óð^…¢)U‘¡ºÜ8§ØX£¢48“!ó:£Ñèt†?LÉm,ËžìuÕµJüïdéìÍl”x/^ðÅOÛÝ‘§¬iQVþ˜p@À»Ýý&’Ž+ksy=|üIc¿Ë4Dë%Œ3ª*ÓÅãíl؃óoû_™–3»2§–(™Åbâ® `Éy½ P®À ƒ8%/q:Ê6Xêå·y_,|ÒÂ(±Ñãö;?êù©^U[ç/θžá›ɤV2[=Ÿ©—#„Ž9"°âj»sŽhAX åW |‘¦Äd"8ŒjDƒ€%W ’$÷šùý~½>\&)` ^_’Ζ¬Ýqúo~΋rúí:?žnZÌ?Ų,ÞÈ&ÎL|>ŸàÍè½æµÖ¦÷ C-QGF5À¼(i/Å'.—‹C\ûséôk\´¸¥%òê@€¦è%Öë²µÅ{Þ pá7¥¢Õ×Ï¿;4¨ñØC(˜­-ÑБ*<É ¬ÂÂB<Ém6›í‹v÷«‡$Û¸Šî»¼*롵Ñ?&èB$mmmS= nfä›Ê³Ã;Ñ<þÐÎ& “Xd¡)Õm 3jMüÃ`(ð¿ÿÐá /Êŵ…PNÀŒ±°\AÀbYöäÉ“’:š¸»wí5%ú¾Uit·¿$wI0|§éI§Ò9™«¾³òY*"‘³Z Oà?4ÒúANÄ´A ÂD¾HSb²œ F5"d£7"T¨ÀŠŠdål°ÈÔ‚ôÀ"¯UÐÎÒtéUé ñÃ=ýo¿Ùö“Ýýoõ{ÛÉa’–àŒ`•.F‹£™¶å#ùrL,9Oƒ!’«ø|>Ž èÞ¿£ç6_’¡™+gߊFwýéH¥iÁº‚{MêL„P®®ìýøê9_Ï5–æë+ õÓIõ ÉXåç‘«¹sÄê†/Á=—•üØŠlT`M uuuS= q , !¨­­ê)cáÊÙ¹¿ü$¼t¶µ¾÷ÊÚ\åñdV—¡µÞµâG›>ú>ßDyÈÙû«Ïžü·+^¢(zÌ[U*î=$0ªˆ±K.çã #H¡ŠlrIJlQQ‘Âm‡8&Nz×aò¤îîW™šKÑù…Vþ$^'|mß‹M}‡ðà*ÓÅ×͹ÇbÉdçˆäl£–P‘ÄXV«UùòsD–*°ø"M ˆÉDp2(0G‹1T`Q¥Ñĺí]2‚dwR¦‰e ¡‚€¥V«gf,k´ïâ!„ÐH€mvìïtŸº¾øß$_1Æ3Êåä‹¥­­W‹Frg÷¬z4W.é⽺pz ÕjÍf³V«eª—)܇ÌIÒÒÒFFÂÎë]öÖWß|¼w¸ƒ¼°|u¶©°H²´…×>Øîlœfš—“VˆF°d&)`Åâoe÷DYº“„¡©go˜õØUÕc¸ˆðÀ €±³î¢ˆ€õA}ÏÏÑEÊãÉToddd~ÕÊ+k¿öAýÿãÏÔwì}÷Èï®›wט+°øB}<<Ì¿„ßïïééÉËËSo+_Y²ëè€!d/^ì]ýŸþ¤1¾kg×x=Ö¤Î\•{›NkàM7ÈT/®-„¤€ÅO¯Ž¢>ðÀ¦„QXö±Xãœ@,~QAý—ÂúÛ…YWgi‹ºÝ§ú<ç°ëÓ‘Á·ªïCƒAñ±>¯yOò݇HyxÈAþÁfÛrX¶®èúÅß*É W0)X˜ááᎎrÕMr#g\–Ùlv…"‘zèŠêëGï´À”X@B[“£Vµ¢:"6m­ïUl³ÙÈ=kÇf³1´ê;«žÍÐgò'9.ôŸþÈæê_‹‰» •žœQ…1ÚF „¼^/¹€ÙÚÚªP‡e±X´V¶t)BÈ•5íÌê©4²ù´ÛïÜuúüpAæ•:& {Ê’9Ùx*°zb[[›rYûPDÀ¬Ä¾HSb²œ FU`Ù¢{`Å.!‰‘Œ œ€E¦rX é‰Q•Qk¾ôŠü»n*ýž ë>ïýÿ‹dÖÕ¢V`ñ}Šå^7 ‘ÕL1®ðEåü¬¸÷:ÿwgëÛü:\½ý3¼ —¡Î^_ð;jŸ\Vy¾*Ëãñô÷÷“ó$%»ÆrÛâ£-ÍËŒ:¸`Øíö©ž¸€€$°Õ9y!}¯>nìÃÌë}«ž¡Ï{œ;<ìÎÖ-âar)  }o”S¾\€\–ÅbÁ]‡B¼›y·Û-nPˆáÛ V®ñë-§¯x6¤Ö+”zìÚá „t£Ê\b˜ÂÖDm!´ÙlägÂqœÂüBmƒ‘3”@VB_¤)1ÙNy:úüŠQ¿ÃqÊãÇS%Á¸¶’ÕÍ¡ÁÁA¹õ!•JE®„ihý¼Ì¯à‡{ÏlûËÞ_Û÷R]ÿæ^O+yaÔ ,É3AFDŽø ‹E©]2&ð¢X§»yØ?ðöá_Üû'Ö×{ÚqóœkY“­+!³)›Ò¤ ÿv‚Á V冉eÓè3>kZ¬.iÀºa €€À¸¸¼&Ö4⢤•$8Õ¨É_pÂ{ñù†Ýî CŸ »â!³a­Vk2™***Ž;†s&Ç#î'('`!„‡ú÷ŸýØåsìí|¡÷-š<Ö׋3? Q3Ó—ñÇdÁ—ÜÂx=°Èi­V[ZZª°M`ˆ(³Ï„2ûD¾HSb²œ$ÈF„¿¯;çÕQÆÏ+5¯™Öt$#()²È™.Y,–eq>`6›Ö‡$;^œ¹NCë3Œ–ÒÂòí ›YßÙ†ÛÕÿæW ¢)•ßïç8Ž¢(¾œÊjµ*x`‰› JÒÈkjZì–ßïqSŽý’ÏÎ2¯ )BˆaÁŽN9+###??Ÿ<ÃÛ‰â‡dÚ …H+–M£ŽHb“>Þ=`b©««?A@Ø$r²€¤àòšÈRÞΦ ¢»*™ÆÙívR“R1šuµ·â‡'ì»ýœ‡·Kçl<ÛÕüÑ©¿‘göèà'Ÿ÷½!P¯Ä z;ßë|åÐжdFΟ•DP…2›ÍF£ŸT¶Ù XGÚw¹|«/›¯‡\·Ì×O3kÂù¤ö$—êÅëE¾M“ÉTXX¨p-T`%ðEš@“ˆà$A6"œp^ßÛ%#(é.·g¯7/;Y‹-FRÀ2ªÌK¬×Í·|åê9_¿ªò›xG!ëë;lû!Äqÿ#ÞÞÞÎKN XbÇÁ™ñT`á͉]]]­ÎO0\ªfФ­)¹]EiBZÚPmZÌŸ'“:¹¬&ªù™ *°Ä¯"fp$²* X‰¨W€ `0^f¦g›Â‹W¬Ë¸MºÛN§Ã+c¡PHàuzÙôëÓ´áÜÑrÿ½ci¦ °þvàå@HÖ£”GCëóôb; „Pˆ c?þbð=•J%°l®þ†Î/¶ÿÛçÍï!"YDQ…s#rSÁfKÒZ«¡o·Üø}Õ%ÖëSâ‘«´Š·‹¼§dMB X°€ Ky›‡l9Øéñ+eZ,RÑjµ‹Eaÿ ¯añ(› +,>y<ž@ P`¨ª2-Ä'ØÏ:\M!¿ßÏo–t»ÝÁ`P\¢Ž,&…Dõì¤-f\X¼zÕÚÚÚÚÚêp8NïÅO-*Y{ÍÂÛ¾1çÉ MNMÆ25­Á¯%¨¾Ÿ +¬pp€¤¶0^( ]:ÝúæNþá'ý—)5]¶X,ÝÝÝü1˲dM–N­_Rº~{óküC‡èÓ¯äé+¬Úb‹&×ÖÜâ ²ƒÎžì´ƒÖÔØÿ¾°Ä0«Û}ÚÏyÉÊPg¯ÎûzºÚêŽô{ÏùƒÞ èöœ!­%Nï)rT-ÈXå :Û\Çm¾îu¿ðt¹}‘6Ø­ƒç=€Ó;µZcIK£Ñèt:2SLOOçÄåW¾›Ôæ(DñåWêìEÖ« õ¢˅ IDATÓÉÁd'—ÒEM×hš¦išO[C¡¹#2êZ¥ÍIX°P \X–Ue=vUu,#½^/˲ø7N«ÕšÍfI÷ß}~®ßáE±.ÿÇz¯_P wOÞ¡¥¥…HQ”ÙlŽt­›ж€ät:}>߬«:ÝM΀!Ä!î³Þ×ÖÞ?44ÔÔÖÐÈ~áD³%·(ÊÙ/Fñ»@ ÀÏ$® ,~sbˆ ú:»\Í}žVþ<…¨ZëJ³Ù¼bÁ& qF*¿ßOº+ ñe5øx ée5AbIX@B[“M$ûôäÀ£ë”²L³ÙŒ¬žž²;!˲eê¹iªF‘žÓ=î–w BõIß0[[²*ï6È3¢îíqœëu´Ù|=&µueö¿h=BHϤ•fñƒ«ÓU¤ÍÝݿŠoßû´ãõgk»ÏòJÞÿ£oö°s4WñKˆ÷(|LQ”Á`Àɇ¸OÎl^Â|¥Ð\.°Î9Ï÷–NW[׿}óÌÈ!-­Ÿž~ M)%^cNõB*• Ï„\eU«Õʃ¤T`%,ðEš@“ˆà$Q[”þ“gÇ8˜÷ äÅ1npÓö3üñëûÚyK.‚EEE­­­¼äñxøò(ül,?Á’ˆ,£Ñˆ=ãN§ßïWÓºåÙ7mïùmˆ !„üœ÷£žßíì}ÈÛêt5妕ŠïÌÿÜócÈóYYYb¹Íï÷«ÕêP($HW”½8Žôumïþ-Þ9È“¯¯Ì2„í«r­ù^W›ÔÕa&ª‹ÔéúúúfΜ©|9YeM¬Äºa €€$í%;w­¿äÅÝáöyŸ7øƒ!5#›y9‡Çãiii©¨¨àóK›Íæw‡®+~äÐжFû.É^6(D]b½–BTNfþâò¥üM<Íf#‹ŒHŠ 5kóîüg×/ƒœ!àü C;•_¥¡ko»úLž~šY[¢®ä¸ùE£ÑF¡^¯çOþogÿëíÎÆNü¿ëçݵ0ÿJÁ [Fp?%T‘6פΜkYySDïE½^O.®Êeɱ,ÿ’× ,å¿A)`AV¢_¤)1Ù&·o9nY\Œ¬é±»ýzÙ_C†a222°.688H/OTEQV« XÝÝݼ¢”¯Ÿ¶0ëê}çÏXoÄëvŸ9Ùw@P¸ÎO  4)F#®«â…*Ç#°ÇâÍÑå³ý'·uýÆr ÎÏȸGÕ¡$P%é;F¢`â®lëÉ3àˆ¤ˆP•h@7 @ðÀ`¨)0áAOàÐ9%¬‘‘ò¡ÝnÇ!ŠÒ,ʺúê²4²õü˜éé—di srrx§ Þx¢¦¦¦¦¦FáªLmÁRëõ t*CQzeº632OÓðÞ}ƒïnnúÙgÍá$ç¯6_ÏæÆ÷wmsXwбµëÿÚ¡@зùÀ/6íü7Ö©s‡»Ý-øaEÚ\Á«“¤ ?à8+°ð±@ÀR¾ÐFz`¡ Hz.™–Y™“Æ{üÁwu+ÏÌŒ¤CCC X±#¸P«Õ’¿òÃÃÃX—™™±lAájÉ›ü@¼àB¡P¿ø¼Ø²“—´ÄnYH~aÛà©7_«WêìÙùKð› .##C°áQ2«‰%¥!ÇÞx`%;Ð P*°˜.žýú¾vþø³“‹+2•ÇG%K[xuу«cèô¯{ØßŸmɯȟ®A†æö†Îá–Ao'…ÐüÌ+ôzý¬Y³—[,#•€i¦ùÞŽÆáˆ“ºžI«N_lÕUÖj¹4–e]á½ôv ®}óÀÿ-,[mÔšø ,»¯o[÷oÜÁ‘Öáã¢T´Ú?Ú]¾Ã~ªkxÓÌŒ¥µ«´Œ¾ÅqÏ5sô¥éj«Ü$†ÉËËœ‘)w ™(Ùĺ©ÁÍ‹‹žýGØòõ}íw,SªûÈÊÊ:s&\±e³ÙÈcOÔBƒÁ öÀ#7Tß×1ØÒë9+xÊæë9ã8TiZÐå>åðV¥/¤ƒÀŽ ˜@ ÞÈŸ8¸óøý~±gVcÛ‘MŸ~Ü98Í2§Ò2§2{N¶±­øež¾¾®®.Š¢pÅ=†¢(lЉ‰Z·…+°âõÀ‚.„D€€$à‘ìÔÕÕ-¯.ÀÖAÅ ,,Kgg'ÖVŒczz¾Úg,GsB|;ê³gϪ Y3 —"„ü!¯šÖšL&É»iµZ±€EîÎ[˜µ~È×ÕëiÕ2†Ù+k2–ª( EQZkOOBÈ J_WðíÏz_ow5’7qxlo~õ¶K¾«ÑhþÁ»ã†ËÊ8Äù¥z#†¸@»ó”c–®°×uŸ/7\¤ð˜L&A½\Vçp8$m\Iä–ˆ£z`îBy^‚_¤)1Ù&·ÖGÇûú†½ÍÇöËEÐh4j4^` ƒ½½½ø©‰ÚBÈ0ŒÂ/µN£_•{ëÖ®_§«³KÓfuºšZÎ7¥9lÛvfäP·û B¨žýl®eÍ4Óü––I­*Þ ¬`(p´}÷Œüy !t¤eï/vþ»7©½Z˜ÿ•®zZî=òÕñ*•ŠeYÉ­ã°&îçÎ+-•ð#!·‚$ ` d{ÉÎòåËUg†ðÃÊ–Åbt8ÂêEaåÅl6“î ………dN#î­¦µ!ƒÁ ùB’]‡4 öÆ¢)æ²Ü[TgÖ̼±éø)<†\lTQšÕywøW£­u¤þÌÈ!þüÇo^6ýZ­J¿­ç7®à0’bšyN¦%kÿÙñoÐÝå<Rˆ*K›#y-îcˆ‘Ëêý%QH‹•ÿ‡ˆ…ÊLX¨LTà‹4€ &;ÁäbVaúEÅÇÚí¡@ˆÛ¼¿óþÕòk9ì¨Ü†ôC³€…í®ð=媇4F£Ñ1i×—?“§«À aœ;ߦ!4°Õõon`?[d½¦@_%¸¿µP|ÉT`ÃmŸ¿¼ãqš¢Ë¬5•9³?=ùŽ/Qf¦/[7ýëQßiiiiì~í±”P)t!¬ª¾k1ýÒÄ›ÄVÀ €‰á¢â †× és»e[/›ÍæiÓ¦áÂ"ŽãHŠ,žÏÎά°Å5%IKpRϘ.¯¼± §gŸljr;ÊÈXŠ 5K³7˜ÔYáÉ„‚?ÝúÐãoÞäðG ¼ÒÕV„Âï«&}éºÒ»¸üùû/.M---ªôLšÂ[ X’ùeŒHfØ4MGÍ¼É ¬ ¬|)Â-‹‹ðñk{ÛFÚl6¹ý}cÞB8<¯V«].¡cúEæË4ô¨t…¦ˆº$.ðqý­Îco·ÿlkׯÛ¶ù~±€…»Š_·ßÑÕÐù…äTçZÖ,²^C¡XÿÉ&÷» /`9½·/<^¯aŒZX™€¤!á¬Ûo¿=''g×®]S=à‚b·+‰@âÃGp^iÄÐôð¹(1%,\‡O–ñ’ D!d6›É“‚&}$’–Z­d6|ÞI.ljµZA\“UbœY[´D|Ûò´9K³o@ˆÒ3iÕ鋪M‹B~¿Ÿ¿0äçjÍ—ÝPüè‚Ì+ïYñÔ 7mùÖÌç×ä}#O_ï Ó骙F£¼›Í†Å>’ôôô¨û‘L†Í X ƒ‡ì`âž Ài ALv ‚IGi–aÕŒlüðç[Ë1BÈjµfee Nj4ñÿ]Z?Çr9œ¥-úJþ]ߪ}®Êt1•ŸÜ:¡Z­¾õ’GTtDÄÉ1]œyÕŠì›Å‹Çù|>¼0¨cŒs2/_V½.ÛT(Þ(°ÄcÄ0 SRR2mÚ49DAÀRøöø¡°í}šV¥Q%ÜÀ_¤)1Ù&#÷]YLúëÝv²¹ž€1o!ÜÓl6óbPnn®`¤\¹tMú’}Õe9·^]x¾¾2×\´,{ãË<€7Éœ²|çìË{ÞÙÞó»-í?m`w"„€dù‡¸#ݟ⇗×ÜpéôksLE˲7ò»iš7Œ— ©À"Íúúú”¯ °²ÓÁÁ=ᨫ«›ê)‰ L AmmíTO|ç•V´F„¤€¥P%XaãÇà6‚:N!Ë7~Fç[ü6¼¬C¦†~¿_ÎçB«Õæg”^1ëæON¾½¸bíÊêkŒ!kc£ì‚­×ëųE„Lf2™Í­u:àEc° §M›u‚€¥ð7hs-P~•¸Ài ALv ‚ÉÈuó Š,ú›!äò‡þ¼»íÕ?¬f³¹¼¼Üf³õõõ vó¹ÝnAávŒà{ò±žeµZ†!«Š$Ë£B4¥º"ÿ[ø!o*:ײz$0tÚqPò’^wk¯»•?>dÛVd˜nðñܯ¹ÃuÒá ÏM§6ܼðAZo·Û 7´IKK§z…Æ*`)˜¸OŸ>]ùÚ²!`%à(ÆÜ’ ŠB¼\s¢Ëá „´òÕ:iii8Cr»Ý@@¥RÅREfrýy4 ~ Œ¸Gµx ¡Ïçà ðU]×Ï¿ûúùwkT:„Î;%X¸(L,Nq'Ø(Nà,‹Ífû¨qàôP!¤Óé2‡FôMÍ_»¤¸8SÂóU€¤€%0…ÃÂþA uQÑÔ]—–=õNx-êçÛN;½JMc|>cG‡üq×nÌÌì•4_“>„úB÷¯®HOO'Œþþþüü|³ÙŒ›!ªÕj±ªe4ùƒ¥Ö ®Àp—;Üa¹Ä8sØ?Àú„¥I!.ðyÿ×þ•\T£išÏ¸š‡#îW—T\¡SëÑh«,É•Âx¹ðX¤ƒ;ôV€ä"Ev‚PR<õÔSdýa}}=¹uœ|Š<¶Ûíõõõ’OÁàpå;d5¹Æð·Š?úË{;î@Ó4)?ñEX¤€e0êêêÈ,„—®Ä–ܻܨR©:Ã0õõõdêÓÖÖ&WÅÏS£ÒiT:þ…$7*b¼^/ùÆùÙ"„ÒÒÒùÙÀÀ€ÀµÏ¿#³Ù¼¯Oõƒ#¯r¿zÈýònÛß;óøæ†ÏšúQ Ñ”°ÈœUò6"ϳ5(©þŸ„;Ààp¸Ü!êî¾´\Í„”Ïô9ßÜ ðßÞmþõAÿC,ø9ž¨ÿ>iììéìì,///+++++£i:33†¢(,¢Ñ³*÷V‹&/ÏTúغW®,¾k]þ}¤ó&fÐÛy°›Ûíö…Ü]îS'ì»>ïÝüIï_vlét7áa—M¿–ÿ$I §@㉅¤VÔ;D°îp¬©?ôDJÏêÿI¸Ü!)îðÔSOIJ1hÒÖ&$⺉ñ–ºº:(Mjp7¼²÷íƒá6y¯Þ9ÿ®•e W566öôôðÇ•••ÅÅÅ»víª͒%Kt:ÇãÙ³gF«Õ.]º”¼ªººº°°Pá%<(èQ=kÖ¬þþ~ÒaåÊ• Ãô÷÷744ðg²²²†††$¿XøÜ‘< wîÜ)ÉS\\¬×ë›››ù‡¸²}ÿþýxï$ÿ” Ã`YYYyy9yæo_tÜö«ýØ‘ óøúéÏoŒnèv»÷îÝ+8Ɇ ƒoìÚðJøªkçå¿ó„‡=Ài ALv ‚ÉËM¿Ø·yçTÏ"̃k¦=¼ÄtîÜ9ò¤ +èêêjjj"¨TªÙ³g9rŸñÝóç\œ“³oß>—ËBÁCCBþtuV·çL»3\tFSŒU[Üï9Ç!éR•dU?´ìEÞu´©© §+UUUEEEã|³Ç¸VK¶b$ñz½»wïæ5M À6XjµZùÏðÉwŸ~7üÞtmͯ«ãÔÉÁn·mO.8LžD#±Á •9P ¾ä@¶—ìàÎ+1c+^¬`0ˆÕ+š¦ùe½ñl!DRåQ‚ ,Š¢ø— —:N§Ü—’xÃÃ0‚2~š¦qåõzÉ·€/gYVPùÏ7±Æü½Ù«éìÍlŒŒ±9}?ÛzJ¬^!„NtÅÔö[ÁKáoÐæŠT`™ PiŸ¸Ài ALv ‚ÉËw.¯Hk[Cß#K£ø`Šw,ªÕj¼ÁGËè#N”NhÄ\œyÿÔ4ÓüwÞ~¼Où%(Š$9jµZ sáº-9mkQÖÕéjk¾jQÖ57–<~mÑÃ×ÖÜ»aÑ]3²ÍH_2ײæëµs²VñÙWKKËÀÀÖŒÄ]qÆÆØ,¹a4MG â¹…Ð4Þº9.$ WEcácØl˜ò”””Lõ€qAFp^‰ùÆ^þøÀYvf¬‰ƒÍf#—ÎÈÂ(RÀb‡“…N±Xb½I°W1 Úl6>ÛS«Õ‚m}bœN§X„|GF•JÅWŠ…B!rÎøZ‹Å²¬äÖ€gß;‰ÇÏ.L_?'¼ùòjëÕçÏÌ,4î ßüD×ðüÒè ´J¥4Xä,…¿AÖ[“ø"M ˆÉD0Ù™Ú^1;÷?¶œàwœè q­ØÌK¯×“)J¥â5/qÝ–œÒ¤¦uŠ¿Gž1htYz{{دÀn·Ÿ={ŸŸò+4Ö-„ü0(2ja a‚Ý0NÀ­êË tšHvÈÎ+Xÿõ~ó-—áÖÔ±#°ðq¼XbK¡±«F£‰*`±,+0¡`Y–l.‹r»ÝZ­'UäךÛíæßš\Šy¼søÝCÝxüÏþ¥öŠÙ¹r“™Yþ÷ÃáÁÇ;ÇR¥R©øDáoLÜ“ø"M ˆÉD0Ù™Ú.(3g¥iø nƒ#¾ƒ­ìÂr‹Âx ÿo6›ÅåZ1JBè¼½)`‘ë‹äšÜä X1V`I¾)†a¢qÐ [P¯` !Ì àÃ]Ã/¤dç$)NÉ XbûR1†T¬xG-¹Á1Ú` °Ùl¤¯î{NýäŸM •㇣¯Ïsi©¦ÀD#„³²²$—%,N'мp{èXÜÙ§ÜKRçbF9ˆd Bd5‰H}}}mmíTÏHP@ÀÈö’A³MÚÿ¼~Ö9Â?üèDßG'„«ˆ³ Ó—WeñN N§spp? …°±:’IP(Šr8Qûþ<üÚÑ· ¯.6‘韤=’Zo¤(ª¢¢[­K–ŒY,–®þ¡?î ¿A½^oì°Ûí¤gV«ÍÖ76‹_zÀá}ñÃÓXõJÓª~õõùŠÎ­!¤×0åÙ†3}Nt¾aTw¹ ,…¿AÒÄÝ [ø"M ˆÉD0Ù™ò–d¦ç™ø&Îþ`èßß<õ’ -U`Ò"„œN'™>‘È Xx‰Ž‡wpG¶K,WÅXE®}b‚Á r‘Zþ¬4hA˜ˆ@7 @°˜î]Uþ›g´ÙåüøÆí†3Œ´´4RÀ ¹Çqœ\–†ùÓ®¶ÿûä,Bè,¬°0!¿ßϲ¬ÜUâ ,¾#µrÕ•Ùln÷g¼zèÜùn„†dƺbnÅ£S3ïþë’%•™QG"„f¦óŠ­a¼[Þ€/‹ZáÀx¸bv/`ÅH3zÑ·¤€%¶;˜kl[Y–=ÛçØÚ,4©P©ºsš‚ 6©õ‘ÔÜè†(“CS/ß6wåóŸÉí¥ûèD_Ý©ÁåUYH±3 ЧuÉÑvû}:ÌïïòóV P½ÄVŒ®X»[c˜¡ôTô›÷/¾¼&;Æññ6"ŒWÀ²¹À .kgåÄÕ§k8uŒ\–à ÞB5=`fl­oÄŒm ¡ÍfÛßî~õ[êÉXå?ØBIX@B0åŽÀ8‘Œàòª¬ÿ½}î¹Qú¶Ö÷m¯}=õNãG.GY,–eñN=£ÑH=AÀb]þ¯ìsï2³¯Óó¬èë„b¹*F/öm QlVcDES¯}{áú9y±_o#B9Kîopt BÈóø"M ˆÉD0ÙI„®ªÉ~ìªjå1]¬çÏ»Ûøãg¸PZÁ©S2•€5QåWh&îmöèÊ2°…’°€„`Ês`œÈEð¾U‚3WÏÍ_ñÜgüñŽóEX¼±úÀÀ@GGÇq%%%d‘”ØL )fi‡¾þ›§ûF𙆾€ËÏÔQ<¥ÄéZ,Xmƒ.\ê¯fèï~¥Òëõ²,‹&jµZ³Ù‹¶¤2ëÚyQŒÛOŒ£KÖÁÝI8¸CVb_¤)1Ù&;‰Á4­ê'7ÎVÓ:àÂVŸ •••!ùæÎH~ !EQ¸íŒF£ÁÃÄㆠ#‚Q,.ï12vkXÂ+.` ab’:2°€€ÀeyUÖê™9;Î{º?òÚ± ñ³6›Þf³•»ì.&r»Ýýýý¤†EQTFF†aˆÖw÷!$Qút²ÛwÕñBèpO`Y±Z¹ XÀŠEu"»\/©Ìä“N–eëëëµZ­ÕjÍÌÌŒj6?fÈF„-ýΨÝîQÅöQ:pp€D£(S¯fh0„trkZC2 IDAT ŠZ¥ÖQ%P B.רùP(„}B†¡ištIÏÎÎîééÁÝn·œ©hsÏÈõ=‡Î±¼ëâXÞËØ,‹ÅÒሸT\U¥ÍÐR!•J•••cý²ª¬X†P¯@ÀàBóÔu5XÀ:Ðj;ÐjŽ8µçŽ+Ú!ú[ËŠ'B4M«ÕjR,‹¥k;!`áî×f³¹¨¨¨´´4ÆUÄ1#hDøÄÛ'²M²I›ÛíÄ¥a¡ûOãý’>q‡-„¨hª8SßÒïDqjpÍ*Lr‰J%°G8•’>¡,Ëâ§]¡Z†Ö‘Ò1Ýc9{23sTÙö!×ÇzùY!„þû¦ÚÜôèB’ S¢(*–ÜÉhJï}Z­VÄkˆ~åì<,`m­ïýîW¢¼(iAQTÔ ,ÒÁ}íy¬ Ìò*kÔ~Ûî±T`u±îawxccº^U`U,ŸDA$~@°HtÔjµ 늋+kó&p2r\1ûBÈd<åñ4"›€u¸ÍŽç–Äd;°¸"â¿/~÷X¬ÆÑåWSÑA˜DÀ†P¶⬚q!<Î/›aûâ¤<ÛXß1Ì·ô;UHôÄŒ±‹°æÇTµ¨"“¢ß§¡sxÄÀ•br¢U,kêÁÇ‚ýƒ¤6 ` A}}=híIM"GШUÇyT9‚@Œ@Sb²Lv’+‚d#³Q|Ü%MÜ•qz§zÃRMQµÅ15û3ÔÓóL¼GU0Äle/e‘/þ ¬a|,°’+ˆÄl!‚’’’©ž0.R&‚|Ûž/z…R(‚_f ˆ)1Ù&;ÉÁ¸Ž¡ëh»=ÄWR!T—µ 3Ê+†]„ñ X'‰ ¬‘€•\AÄÔÕÕMõ€Ä, !€NÉD0٦Ă˜ì@“äŠ`\Ç `e€Ç'³xaƒÕŸ€ËÄ»”*°’+ˆ€°á É(ÏûÂ+°ðqŒX<—X{b¨À …BøØï÷+vû»íþXÍÐÓrŒÊãH%À É(·°]zÛ ;âT´lC>b“€5ÊÁ=_…Úâ ƒ†qù‚¡nÖóãwujÙ—s»Ý½½ƒÁ`¨nêÌ>áÓëõrã{ìžóûÑ´£š‚ øÔÕÕA±hRLv ‚)1€ &;Ád'¹"hÔª²MÚ¾a/BÈ u ¹Ë¬¹Á*•Š¢(î¼öãóù”o qõk^iX*šZPfù¼y€øÔ;±_‹¡áè£BÕH´ L® bÀ†P ò-–¼ßÅ_–<óéÞó{ôî[UQ*/`¹Ýîîînü&FcµZ X—ÿ'ÿlâsÓµ=ÿ³>®‰=ú·ú¶žŠë’1ðïë§?·qÖd¿ p±Ûí`d–ìLžDXÉG¹Õˆ¬_~ÒÏ¥n„ìÑG!„šWw_æÅÓ2£7bw õ P,€ä£â‚X˜Çåàγ²ÚúØUÕ±Œôz½,Ëz½^þ¡V«5›ÍZ­6–k—WgÅ;1’°€„6«';Ád"˜@Sb²Lv’.‚ ¦WÈÜ’¸+°rÒµ?¹qvŒƒY–µÙlü±Åb1›ã~9’¤ "±“ îQàÀ—¦Çï??ËÈñ:=°fZ‘EÖ- & S€É“hRAú @‰-t,%@À˜r&O¢¡'ã¦/v{¬mP€Ä"˜ì@Sb ALv ‚ÉD0€ @ ´µµMõ€qLv ‚)1€ &;Ád"˜@/ ÇŽûÚ×¾VPP Ñh n¹å–£GF½Š¢¨Xnã°‰½Ãø_tjïÿ%!6ßÁB¸¼ñÆ>øà~ðƒ 6äååõöönÙ²å¹çžÛ´iÓM7ݤpaŒÿrÿ?ðÇp‡ÉV¾Tªx`)ñ¥ú_¦„Ó§O/]ºôã?ž={6y¾¡¡aÕªU{ö쩬¬œª¹aP"HÀ)MàÀTòÒK/Ýÿýõ !4{öìxॗ^âRåv»|ðÁÜÜ\¼{ŽÜFwôèÑ+®¸Âh4Z­Ö{ï½×år‰‡Q Ÿy晲²2­V[]]ýÊ+¯/ÚÙÙùÀ˜L¦òòòïÿûGyò‡ãûßÿ~UU•Á`ÈÈÈX»ví{ï½ïÜ&vJ˲gÏòì{Ý I*¨€_*-3U©««[¾|ùTÏ;Ád"˜@Sb²Lv ‚)q²™>}ú–-[fÍš%~ª¡¡á†nhjjBQuçw®]»výúõéééüü/÷æææ+VüèG?Ú¸q#BhóæÍ{öìyíµ×øgñ0Š¢î¹ç«Õzçwæçç8pà›ßüæsÏ=wóÍ7ó7,++{òÉ'o¼ñÆÇ{¬¢¢âùçŸGòÁ† ÊÊÊþõ_ÿµ  ÀápìÞ½ûå—_þðÃãšÛÄN ò¬Íf‹? a<˲X/Óétf³Y§Óù†‹Ål6íZØB¨X0Ùèõz›Í&©Œ¸Ý,—Ë…¢(êÅ_|ä‘GÈø_î·Þzkmmíã?ŽŸzæ™gžxâ ±€õÄO<ýôÓxØûï¿ÿôÓOïÝ»Wüê6›íâ‹/>sæ ’—L&Sgg'ÔÆ6·‰æìÙ³­­­ .0eeeåååc»¶\ýõrOíØ±—,ñ|ík_“ùo|ƒ|¸dÉ’ææfþØãñ<ýôÓ3fÌ0 Eeffž;wNyJ3gÎüÞ÷¾×ÙÙ©0&êÜ&vJ@\€€@tJJJø’"1gΜ)..Æ ån200ŸŸOž<Ä”••‘- Þg÷øãïÞ½ûõ×_ïïïç8ÎívƒAåÉÿõ¯íïﯬ¬¬©©¹óÎ;ß}÷]q¡PÔ¹M씀¸PMõ!„êëëkkk§zÀØ&;Á‚˜@“ˆ`²L ˆ“ÍêÕ«ßzë-I¬·ÞzkÍš5ø¡Z­–»‰Õjíîî&w¨uwwKޤiÙš›Í›7ïÛ·¯¨¨ˆØÒÒuòåååo¿ý¶×ë=yòä¾}ûž}öÙ¿ÿýï¿ýíoãšÛÄN c±Xb,f2<°Æ3ŸI, !())™ê)ã"˜ì@Sb ALv ‚ÉD0€ N6?üð²eË6lØ hDØÐÐðÊ+¯ìÞ½;–›¬^½ú7Þxì±Çð™×_=Þ™¸ÝnR ùýïã…Z­vΜ9sæÌ¹á†JKKÖxæ6æ)!„Ìfó˜MÓyHøñX°'2 ` AFFÆTOÁd"˜@Sb²Lv ‚)q²©®®Þ´iÓêÕ«øÃnذ!77·¯¯oË–-Ï<ó̦M›ªªªb¹É“O>¹råÊôôôn¸!ôæ›o666Æ;“uëÖ=üðÃ/¼ðMÓúÓŸbq@_¹rå=÷ÜsÙe—ååå ¼üòË+W®œÀ¹aJÈø%°Ä<°ˆ‰[n¹åÃ?ܽ{÷Â… Fã‚ víÚµuëÖ[n¹%Æ;TWWoݺuË–-eee555G}饗´Zm\Óxùå—B³fÍš>}ú‰'b)wzúé§ßyç¹sçšL¦+VƒAquÕxæ6†)q1YÝ /$“×£€Ieûöí>úè‘#G¦z"$òܓɓh  Hêêê¦z À¸€&;Á‚˜@“ˆ`²L ˆÉÂu×]÷ùçŸ lÙ²å[ßúÖ#<2Õ“ “Èsû’“ µKPÉÂ[o½õâ‹/Ö×׃ÁÙ³g?øàƒ·ÝvÛTO*L"Ï-)˜<‰&¤°¦ØB|I H`³z²Lv ‚)1€ &;Ád"˜@ …I…Íw°…`Ê-„$ EÝ|óÍ’OÝtÓMEÿþã¼b€€@Üìß¿¿µµUp²µµµ½½}*¦¤8 ` ÝnŸê)ã"˜ì@Sb ALv ‚ÉD0€ ^`î½÷ÞŸÿüç‚“/½ôÒ}÷Ý7þ›ƒS Ü£À+¨¯¯¯­­êYc"˜ì@Sb ALv ‚ÉD0€ ^H(Šª©©9yò¤ÙlæO²,»`Á‚'Nèt:üïôüãÏ>ûl}}=B¨¶¶ö‰'žX¿~}ssóÆ9BÓ£ kB¡ÐE]´iÓ¦Õ«Wów (*<ÿüó¿ùÍoº»»KKKzè¡x_rôèÑG}t×®]z½~ãÆ/¾ø¢Ñh”T (Šr:?üð›o¾IÓô·¾õ­Ÿüä'ç»ßýîÿoïþ£ª¨óøÏ *j *$ R!¡ Åí‡bJX«‚?ÀL覥y’ô¦¶(k!.G ;ñK=pÖ¯«e›¸ˆ~5OŠù£R@<‹‚šˆìJšiˆB"hÂýþ1gç;qåŠáÎŒÏÇ_s?Ÿ™ÏýàË1ï>wnvvvcc£Á`HMMµ··—ÎÿöÛo£££Ož<éââ;{öly¨Ÿ~ú)))éÓO?uvvž6mZ||¼ƒƒCkf{Ge•ÇÏT»ÇÚ‘ë0oWë®m¿J?°èHÒø¼yó<==—,Y"5®Zµª¶¶6!!A¾O/,,œ0aš5k‚ƒƒM&ÓW_}e4÷îÝ2sæLå°Ÿ|òɺuë äDQœ;w®³³óo¼áêêZTTôæ›o&&&JOà*//5jÔòåËÃÃÃAغuë‘#G6oÞÜRkÖ¬Y£Gž4iÒ•+W CXXØéÓ§'MšT]]m0f̘a4A8{öìÈ‘#W¯^=a„²²²W_}uÆ /¼ð‚4”‡‡G\\Ü´iÓªªª–.]úØc%%%Ýu¶-ù¿ÇÿÏŽâõmäþ™üôœ)þoYw-,K(`Б¤;ñ²²²àààŠŠŠÎ;ÿþûïÌËËsss“ïÓ§L™%_¸víÚ¯¿þzÛ¶mEEEÓ¦M;{öl—.]¤®›7o<8##cüøñÊVlll||¼<ÂîÝ»ããã AˆŒŒôó󋉉‘{W®\ÛR+==]ªO ‚PPP0nܸÄÄD¹%??þüùÅÅÅ‚ ¼þúëO=õÔ{ï½'uíܹsݺu_~ù¥ù°W¯^>|ø¹sçî:Û–PÀj ž¬áíííëë»eËA²²²ÜÜÜ”'?~<$$DÙzìØ1A†îåå•™™)wefföîÝ{üøñÍÞeÖ¬YÊ—Ï>ûlyy¹t|àÀf››""",LxêÔ©ò±¯¯o]]²ÅÏϯ¢¢B:.(( •»Oœ8!744ÄÇÇ{{{wïÞ]ÅÞ½{_¸p¡5³E[èaï;°t //oäÈ‘¶ž¬G‚ZG‚:@ˆ:@ˆZG‚ZG‚:@ˆI¾ÏÍ͉‰))):thzzúèÑ£•½555]»v•/¼y󦣣cCCƒ û÷¨¨¨x衇~ûí7©ž¦AÅÆÆÆfÊ’{ííí¯_¿.=JR__ß½{÷–v`555‰¢h¹Eº¶k×®·nÝR^nggרØ(ÂÂ… ËÊÊ’’’ Ô£G†††nݺµf¶-áX­Y¥ Xt$ùNÜd2 2$$$dÏž='OžlÖëîîž——7`Àù‹/Ž5êüùóÒË€€€‰'ÆÅÅ­X±";;ûôéÓR9IYÀ2¿å—]\\Ž9âéé)wUTTxyyµTÀjÖn¡¥oß¾'Ožtuu5§ÿþG•÷š•––2¤5³}ðB :¢(Æ>úèŽßµçïï¿k×.eË_|áïÿÿw÷,]º499ùÌ™3)))Ë–-Sn†j   ììleKVVÖ=Ð’1cÆìܹóŽ]õõõÊ=_7n¼/ïËôP| j™Øœå;q¹·  `âĉk×® aß¾} ,سgψ#¤3›šš|||ª««{öìY^^Þ©S§f#XÞÓT^^'}ð0''§  àóÏ?oû¬Ó§O'%%Mœ8ÑÁÁ¡°°0%%Ezˆ{dd¤(Šü±Ý¦M›Ž=š““Ã, ;° s§N²õÐ&$¨u$¨„¨„¨u$¨u$¨„¨BÏ=÷܆ ÒÒÒÜÝÝÝÝÝÓÒÒ6nÜ(W¯A°³³‹ŽŽ®ªªŠ‰‰‘«W­7hРÜÜÜíÛ·{xxøøøœ8q"55UùÈ-« 2d÷îÝÿú׿<==ûöí›°xñb©kÍš5Ò ƒ.--eVÇÐCðªeêUMM£££­gë‘ Ö‘ ¢¢Ö‘ Ö‘ "AØ·o_tttII‰­'ò€btŽÿÌh j ê!ê!j j ê!>˜&Ož|øðáÚÚÚªªªíÛ·Ïž={Ñ¢E¶žî?=ì]b¦mÛ¶¥¤¤œ:uª±±Ñ××wÁ‚¯½öš­'õàj¿J?°lŽBçòòòl=´ j ê!ê!j j ê!:¦‡½KìÀ°9v`àE =Eqúôéwìzå•WDQlûøm¡c&`óy¢-(`Aø°ºÖ‘ Ö‘ ¢¢Ö‘ Ö‘ ¢ÿþ÷¿ÏŸ?߬ñüùó/^´Åt€{¦‡§Gñ ,Z"ŠâªU«~þùç´´4eû»ï¾;lذ™3grOû¥ýJ4z(ýPÀ %¢(VWWûøø”••999I×®]6lXii©ƒƒƒ|O½k×®„„„S§N ‚àçç;a„òòòððð’’;»?|Š«©©éÉ'Ÿ\½zuPP4‚(Š·oßNJJZ¿~}ee¥»»»Ñhœ?¾|ɉ'¢££óóó»uëž’’Ò£G;ÞÑ‹¢XWW·p᜜;;»Ù³gøá‡ ‹/ÎÎÎnll4 ©©©ööö‚¢,`yÊÓ¬¼Ùô¬ª%ß”ýúMYUkãl/x;¿àÝ׺kÛ¯DcéOè@¯^½¦L™²nݺ%K–H-ÿûß_}õÕ®]»ÊçΚ5kÍš5ÁÁÁ&“髯¾2 {÷î 4hÐgŸ}6sæL嘛6mêÙ³çØ±c•QQQÎÎÎû÷ïwuu-**zóÍ7ûöí+=«¼¼|ܸqË—/ÿì³ÏAغuë[o½eaÎï¼óÎèÑ£W­ZuåʃÁœœ|úôéÀÀÀ„„„êêjƒÁ‘‘a4›]eamü>ÎS雲ª¿í<Óš÷ê(>V°Úö.±Kjjjm= XµŽu€u€µŽµŽu€["Ý5—••WTTtîÜù÷ß8p`^^ž›››|O=eÊ”ààਨ(ùµk×~ýõ×Û¶m+**š6mÚÙ³g»té"uݼysðàÁãÇWnGŠ—Gؽ{w|||aa¡ ‘‘‘~~~111rïÊ•+ccc[Ú•žž.×} Æ—˜˜(·äççÏŸ?¿¸¸Xøã~( PžfÅàæ¤÷:TKVì8£ªVÜ$Ÿ“}¬»¶ýJ4<ĪðÃ?Øz hÔ:ÔBÔBÔ:Ô:ÔB´ÌÛÛÛ××wË–-‚ dee¸¹¹)O8~üxHHˆ²%44ôرc‚ >ÜËË+33SîÊÌÌìÝ»÷øñ㛽ˬY³”/Ÿ}öÙòòréøÀÍvBEDDX˜ðÔ©Såc__ߺº:e‹ŸŸ_EE…ùU&ÐöÁïãsJmø!QFãG}¤üf@™¿¿ÿ®]»”-_|ñ…¿¿¿üréÒ¥ÉÉÉgΜIIIY¶lÙ½–i‚‚‚²³³•-YYY÷4‚M 4èÈ‘#Ê– 6Øj22 XP…¼¼<[OmB‚ZG‚:@ˆ:@ˆZG‚ZG‚:@ˆ­ñöÛo›L¦¹sçšwEGGðÁ›7oþõ×_ýõ×Í›7/_¾\ùÌõ©S§ºººöíÛwÆŒ÷úÖqqq©©©™™™—/_¾|ùrFFÆ™3*zryK-Zd4>|ãÆsçÎýõ¯­ªRÑÇýzxzÏÀ %–ïš•½;vìHLLüî»ïAðõõýàƒBCC•'¯_¿þ­·ÞZ·nÝ[o½e>‚å/졤¤$:::??¿[·nááá+W®0`€ôŒ­»ÎÙBK+'`á4Ë-k×®]½zõùóç]\\æÌ™óþûïÛÛÛ[7”îµß«‡?Äê¯ú°oß¾èèè’’[O÷Mû•hø!è“'O>|øpmmmUUÕöíÛgÏž½hÑ"[O Ú@ ªpêÔ)[OmB‚ZG‚:@ˆ:@ˆZG‚ZG‚:@ˆêg0bbbÜÜÜÜÝÝW­Z•˜˜8sæL[O Ú ‡fîtš©IDATßñB¨©©qtt´õ,`=Ô:ÔBÔBÔ:Ô:ÔBlŽg`YB ÀæxP° j°  yyy¶žÚ„µŽu€u€µŽµŽu€%¢(NŸ>ýŽ]¯¼òŠ(Šm¿#ØŠvgg` '¢(zzzY·n]AA²v3wî\ggç7ÞxÃÕÕµ¨¨èÍ7ßLLL”žÀU^^>jÔ¨åË—‡‡‡ ‚°uëÖ#GŽlÞ¼¹¥Ö¬Y³F=iÒ¤+W® †°°°Ó§ONš4©ººÚ`0̘1Ãh4Jç{xxÄÅÅM›6­ªªjéÒ¥=öXRR’ W®\:tè®]»†*BqqñË/¿|òäÉGyDøcÕ©õow×Ö=ÍüŽnn[qkÛßî5èöÓ%,®kØ ë®¥€e ,$Ò=rYYYpppEEEçÎÿý÷æåå¹¹¹ÉwÐS¦L ŽŠŠ’/\»ví×_½mÛ¶¢¢¢iÓ¦={¶K—.R×Í›7œ‘‘1~üxeí&666>>^a÷îÝñññ………‚ DFFúùùÅÄÄȽ+W®Œm©€•žž.Wy Æ—˜˜(·äççÏŸ?¿¸¸ØüÚ«W¯>üܹsÒË]»vÉsøÓŸþ´páÂ×^{Mù's¯ow×–Õ3—QÀj ž€Þx{{ûúúnÙ²E„¬¬¬€€777å Ç Q¶„††;vL„áÇ{yyeffÊ]™™™½{÷?~|³w™5k–òå³Ï>[^^.8p Ù—!FDDX˜ðÔ©Såc__ߺº:e‹ŸŸ_EE…tÜÐÐïííݽ{wQ{÷î}áÂùÌ__ß´´´ÔÔT¹zeõÛÝÕ} èaï;°È÷ȹ¹¹111%%%C‡MOO=z´²×ÁÁ¡¦¦¦k×®ò…7oÞtttlhhaÿþý=ôÐo¿ý&ճ„?n>jlllö¨,¹×ÞÞþúõëÒ£©$õõõÝ»woiVSS“(Š–[¤k.\XVV–””4hР=z444tëÖM9ì¥K—‚‚‚jjj<8pà@óîéíÌkMMM:u²b¨–ð ¬V¬ƒÒ,¨©©qtt´õ,`=Ô:ÔBÔBÔ:Ô:ÔB”È÷È&“iÈ!!!!{öì9yòd³^ww÷¼¼¼È^¼xqÔ¨QçÏŸ—^Lœ81..nÅŠÙÙÙ§OŸ–Š2*;ÊF—#GŽxzzÊ]^^^-°šµ[héß¿ÿÑ£Gå e¥¥¥C† Qžl4ÇŒSUUuêÔ©Õ«W›pOo׫W¯ï¿ÿ^~¾ çÎ{üñÇ­êAÀG¡s?üðƒ­§€6!A­#A D D­#A­#A ÄfDQ4}ô‘ò›eþþþ»víR¶|ñÅþþþòË¥K—&''Ÿ9s&%%eÙ²eÊ-E­”­lÉÊʺ§ZR__¯ÜصqãFeïþýûÏ;7eÊ”9sæ”””ìß¿¿o7hР#GŽ([6lØÐÆ1a=T¨Z&X¾G–{ &Nœ¸víÚàà`AöíÛ·`Á‚={öŒ1B:³©©ÉÇǧºººgÏžååå:uj6‚åXåååqqqÒsrr >ÿüó¶ïÀŠŒŒEñã?¶³³Û´iÓÑ£Gsrr¤®«W¯ìÝ»×ËËK„ÒÒÒ‰';v¬W¯^–gn¡eË–-±±±6l6lXeeåúõë«««×­[Ǭ;b¸ož{î¹ 6¤¥¥¹»»»»»§¥¥mܸQ®^ ‚`gg]UU#W¯ZoРA¹¹¹Û·o÷ðððññ9qâDjjªò‘[V[³f C† \[[[UUµ}ûöÙ³g/Z´ÈÖ“‚Véaï;°P›mÛ¶¥¤¤œ:uª±±Ñ××wÁ‚¯½öš­'…öÅ,èÜŠ+l=´ j ê!ê!j j ê!ªMXXX~~~mmm]]ÝÑ£GïZ½"AX ‡½KìÀÒBÔ:Ô:ÔBÔBÔ:Ô:ÔBÔ:ÔmïÀ:~üxTT”“““(Šw=Y4Ó3€juDË`0ôë×/??¿•ç›þ¨]ç•ëÐíy­ÙHfÅf36ê!j j ê!ê!j j ê!j ꀶ?BXM,—Î;»ººFFF–••Ùz:°)SjÍÛ…††:t¨¾¾þâÅ‹©©©ýúõ+..¾ë°°¹ûTCjNuÏÀj&33sçι¹¹í4%¨Ü}.`‰¢(›lEëÒ¥K^^^ׯ_¿“€Ùßßáîû~.>!ð€SãCÜ•²³³Ÿþy[Ï6sŸw`YAù¹Â   yóæ9²OŸ>?þøcVVVjjêÞ½{m;CØPGìÀÿ§Ù±¹÷ßóæÍ¾¾¾Ý»w5jTYYY^^ž¿¿LêÔ¡ßBÜ+µ? 8 XP5 XP5 XP5 XP5 XP5=°~øá‡°°°ž={öìÙ3,,ìâÅ‹¶žîN4£ì%S:~üxTT”““S³°$–##P•°"«Rå:4}úô¾}û:::>óÌ3;vìhvËPýî"ËPå çÌ™ãééÙ¥K—G}ôÅ_ܶm›ò–¡ÊÝ5AÖ ¶üòË/¼§˜QUî˜ ËPÚS[BÔ|ëúõëcÇŽõ÷÷¿páÂ… üýýƒ‚‚nܸaëyáîL$·“©: †~ýúåçç›wYŽŒ@ÕÃBˆV¥š=ú×_ݱcGeeåš5kV¬X±~ýz¹—e¨ –C”° ÕÌh4>ýôÓ¹¹¹×¯_ÿî»ï–,Y²råʸ¸8©—e¨~–”°µÂd2Íœ93>>^ÙÈ2Ô;&(w± ÕϺ˜Ú¢IãRRR"##•-‘‘‘ééé¶šZÉÂß=2U9óì,GF *tÇȪT¹¿üå/MMMòË'NxyyÉ/Y†š`9DËPƒþûßÿ:99IÇ,C-R&hb jJrr²Á`0ý15–¡†Ü1Aó—J$¨VÇÔÆ5_À3fÌÞ½{•-{÷î;v¬­æƒV²ð7žLUÎ<;Ë‘¨ Ýk‹U¨®®®K—.òK–¡5 ÑÄ2Ô  .ôéÓG:fj‘2AkP;Š‹‹½½½kkkMLe¨-%hþR‰ÕÃê˜Ú¢æ Xýúõûå—_”-•••...¶šZI„GyÄÞÞÞÅÅ%""âÌ™3r™ªœù¿V–##Pj©€ÅªÔœœù%ËP‹š…hbjʵk×¾ýöÛgžyæƒ>ZX†Úbž ‰5¨7nÜðóó;räˆôRù[ ËP,$hbj„Õ1µ1DͰ:wî|ëÖ-eË­[·šýÿL¨Phhè¡C‡êëë/^¼˜ššÚ¯_¿ââb©‹LUμöa92U¡;°X•råÊ•Áƒ:tHnajŽyˆ&–¡F(ŸÅ|ûöm©e¨-%hb jÄÛo¿/¿TþVÃ2Ô šX†auLm ‘T!##㥗^’ŽÉTå(`é@k€ÈªT­_~ù%00ðàÁƒÊF–¡¶Ü1Ds,C5»téÒæÍ›}ôÑ¿ýíoR ËP[Ì4ÇT¡;vŒ5JYv¤€¥-–4Ç2Ô„ÖÇÔÆ5ÿ-„½zõª®®V¶\¹r¥wïÞ¶š¬3uêÔ¼¼<é˜L5ÇrdªQ¬Juúé§Ÿ^zé¥åË—3FÙÎ2Ô–B4Ç2T³~ýú͘1ãŸÿü§üU’,Cm1OÐkP…Þ{ï½Ï>û¬S§NwìeªŸåͱ 5¡õ1µ1DͰ† râÄ eËÉ“'Ÿxâ [ÍÖ1)¶s“©æXŽŒ@5ŠU©B?ÿüóŸÿüç”””   f],C­°¢9–¡ú >üòåËÒ1ËP‹” šc ªÐ¹sç<<þ¼­g„»8pàÀ”)Súôécooß¿ƒÁPVV¦þ™TZ§h*”6Ú”"{– EÖN–¤,‰8êd—ƒì»$BDZ„!ËÉi"IIiվЂ­ZôûÌ·7Ó4ÍvÏr=ÿ8ºç^®§®^¯ûž{Èmmm$à.¢#0PÀ@ @0PÀ@ @0PÀ@ @0PÀ@ @0PÀ@ @0m—/_>|¸ŒŒŒœœÜœ9s"""Ø»2™ÌÞrhŸôÄÆ#rbŸlß¡€h8pàÀ¹sçΞ=[ZZ%**jaaA}”G~§³%ž 7_.ù§`¹­­è <§ÿþ‘‘‘ƒ¦.ñôôôôôlÿšLfÃë;ùuL쓹ÝÚª»‡`å•aË? w` @Cee¥²²rÇ%Û·ý¿í:.üIÇ…ÉÉÉVVVÒÒÒ}ûöuqq©««ë¸æóçÏGŽ)!!1hРþù§ãZZZöíÛ7hРž={<øôéÓtbPUWWoÞ¼YKKKJJªwïÞS¦LyôèQg ;Û #á©[uvÄÎ^®úúúuëÖQ(š¯a]]ݪU«úöí+--mee•’’BóUýõ‰Ð<uµ‡Ž=ZZZZZZzôèÑ?fä¥à0 &&&‹°£öVÛÿadoÙÙÙ–––ÙÙÙÉÉɃvrr¢>š‘‘ñûï¿»»»—••îß¿ÿÙ³gÔG׬YS__^^^þ÷ß{yyݺu«³Ô/›››ÃÃ몪rssÝÜÜ|||˜{.ôÃSuvÄαvíÚ±cÇfffÒ<®“““®®nrrrvv¶¥¥¥¹¹yNN½—˜§³téRWW×¼¼¼ÜÜÜ?þøcÉ’%oß¾¥®ÐÙK À)mð‹”””!C†mÙ²Åßß?//¯ã£¿þàÐüQ¢.´··ß³gOLJvîÜI}tÉ’%ÇŽ£>tÿþýéÓ§S÷°cÇŽŽ>~üxÔ¨QtÚ®W¯^UUU?¿.’wD?<õ :G¤ùr8q¢³ÕH$ÒOGܽ{÷’%Kèþ5ϯÍ™3çÌ™3òññ™7ou5:/5' €hkjj ß¹s§œœÜÔ©S‹‹‹ÛênS(”ìììŽeeeQÕÐÐøøñ#õ¡òòòþýûS÷ðÓ†ååå¿ýöƒ¶9räÊ•+‹ŠŠºz–]0ýðÔ/è‘æË•››ÛÙj¿>묬,%%%:)`•‚‚‚Žåç竪ªvvÐŽ/5'à‚€®544¸¹¹•––Þ¿ŸÄØÕO­­­=zôh_(**ZSS#!!A}´¾¾^JJªýÑž={666vÜVDD¤¥¥…ô'&EDþçTõXt.8ÊÍÍ]¿~ý“'O 4zôè9sæÌš5«³³§ô ÐOÝœÎi¾\bbb=¯úúúŸŽ(++ÛÔÔDso_j:ÿ4UUU={ö¤>ôãÇÞ½{744ºz©8瀺&!!qèС§OŸv¶BŸ>}*++;.ÉÍÍ¥~Ý·oßÏŸ?w|´ã·²²²Ÿ?îøwq{û¶û©¤¦¦vïÞ½ÊÊÊ›7oŽ3fÿþý4OÜ2‚~x¦øSûþä×#öëׯýkú/5 ¥¬¬¬ã’²²2EEEê·Ì½ÔLÃÿp4¸ººvlA‰ôùóg™ö¯%$$~³<øõë×—\¼x‘úõ”)S:>zíÚ5êד'Of"ä¯1~Ò³gOCCCggçή'êr'ôÃ3rÄ.ñ«ŸŽ@}6ý—šÎ±Œ>|ØqɃŒ» €¸4Õ ÀWH$’‘‘Qû®ªª*""ÂÀÀààÁƒíêééÝ»w¯¹¹™ºþ7455_¼xQ[[›••µuëVgggêÏWff&…B9uêTIIIII‰···õÑääd%%¥Ë—/ýúµ¦¦&<<¼ãEX4³uƒÊÔÔôêÕ«………MMMÅÅÅVVV4Ÿ)0žú#þzúÏ‹D"ÙÙÙQxêÔ) …Ò~½t[W/5c½zõê·ß~»~ýzYYYYYÙõë×åääÞ¼yÃH$NÀÿ^4¼zõjÙ²eªªª¢¢¢222cÆŒ¹xñ"õÑ--­=ztüíã㣥¥%&&6pàÀÝ»w777w|411qêÔ©RRRrrr+W®¬­­íøhBB‚•••ŒŒŒ¤¤ääÉ“ÃÃÃÛ—Óoš1ÚEFFÚØØÈËËKHHhjjnÙ²¥²²’æ3¥³FÂS¿ sÄ_Ñe×ÔÔ¬X±â·ß~“’’š6mZRRRÇ5é¼ÔôuïÞ=IIIIII“ààà_N3'àà0PÀ@ @0PÀ@ @0PÀ@ @0PÀ@ @Þ-à‚‚YYYYYY›ÂÂB:+“ÁµœLàÑ®©©133366ÎÏÏÏÏÏ766677¯««£³IÛÿâZT&y³«¼¼¼âãã¯]»F]boo?räHWWWšë“É<úDhâÑðÇ:.qpp&*{ñh§¤¤v\b``ššJgEEE111%%¥Å‹§§§s8 Kx´€+**äää:.‘——///ïlýY³fݾ}»ººúíÛ·&&&'N|ÿþ=çc0«'‰‰‰566v\ÒØØ(..Îàæ¾¾¾Ó¦Mërµ]»vÑ|M$$$¸ü¯<‹™c^»D¡P’’’( uIII‰‘‘Qqq1#›—––jhhÔÔÔ0wt\Òí8×<:­§§—˜˜ØqIRR’®®.ƒ›£>€Çñh[[[ûûûw\âïï?kÖ,7 7nr°εVWW:99¹¸¸H$__ßK—.%&&JKK·¯ÐqNÀÜÜÜÅÅeüøñòòòEEE7nÜðòòúï¿ÿŒ™;:¦  ÐMAËÈÈ<}úôíÛ·ªªªªªªqqqÔöýÉöíÛôõõ¥¤¤LMMÓÓÓ_¾|Étûp†z4` í„n ØPÀ@ @0tûwïÖ¬YÓ§O2™Ltþ†€nX²d‰‚‚«W¯ˆÂ÷ð~ð6$€. ɯJ¼ ¢§§Mý¶¾¾^[[û§›û/@[[ÛÛ·oS¿•””ܵk×­[·Œ4 ÅBw ɼ ¤””KKË‚‚êERåååƒþúõ+ý é_TõëoE!ùU‰)h`ˆžžž¬¬ìëׯ©K;~>:ùÿü´!ýOg1•§§'™8žžž,æç¡øû¥»ÈÂñg*OOϪª*//¯öo8ßqÖÑ É¯JÎ=MŒ€­­í;wÚk#>>~ÿþýëÖ­ër+úƒHΧ:¢D6£ÎB÷êÕkÖ¬YVVVŽŽŽ]n% ÃYž"Ý%$ó* À<==ÃÃÃß¿odd&!!ñÓ ˜‚f瞦P¼|Ý%$ÿW€KIIÑ××···÷óó“””üu¦ÑÑœŽàß™(`®B€ÀÃ/:á",‚‹°„ u¹ý Œƒ‰‚.h\)h €€ Î@7üú>`œTf ºË˜‚ @ èééEGGS¿­¯¯×ÖÖö÷÷'0Є(¶¶¶·oߦ~+))¹k×®[·n±ñŠŠŠbbbJJJ‹/NOOgãž… @ tü0àvÓ¦M{óæM—2øyÀ³fͺ}ûvuuõÛ·oMLL&Nœøþý{Ž<A‡(Ô¦.ill¬©©¡~ûk§¶k£‹ºZpp°©©©„„Ä€þüóOOOÏ­[·v™ÊÓÓ³c{zzrsµÎV > ƒ|Hð5OOϪª*//¯öo8ßqvý¢+--ÕÐÐèX🆌ê8 ¿ÿþuëÖu¹ƒSÐ?Áp…ix0€ ¡ÎB÷êÕkÖ¬YVVVŽŽŽ]nÅ\•Ž7މ  €lmm7oÞüþý{##£k×®ÑÂv‹¹¹¹‹‹Ëøñãåå勊Šnܸáååõßÿ±eçÂSÐÈÖÖöÕ«WsçÎ •`×n·oß ¯¯/%%ejjšžžþòåKcccví_¨àj#p<ü¢c.Â(8 \¨çƒÛ¿À8˜((`á‚Æå˜‚ €(` €€ €(` €€ €(` €€ €(` €€ €(`ðnØØØÈÊÊÊÊÊÚØØ2²UII‰––™Læt<Vðh×ÔÔ˜™™çççççç›››×ÕÕÑߪ­­ÍÑÑqÏž=Ü À4r[[ÑhðòòŠ¿víu‰½½ýÈ‘#]]]éluâĉ÷ïßûûû“É,=/7Á¹FàÑðÇ:.qpp¦³Éû÷ïÿþûï3gÎp8ðh§¤¤v\b``ššÚÙúõõõ—.]’‘‘á|:Vñè\«¸¸xmm­˜˜uISSS¯^½~üøAs}eeå;v´‹)h` ¡›‚î–ààà””înèééI¦…!:âÑ¡…BIJJ¢P(Ô%%%%FFFÅÅÅ¿®¬©©¡ªªJ]‚0°…Ѐõôô;.IJJÒÕÕ¥¹rvvö Aƒ~Âb, ¼ŒG ØÚÚÚßß¿ãÿY³fÑ\¹íÔ…ÜÈ Ð}<:×Z]]mhhèäääââB"‘|}}/]º”˜˜(--ݾý9LA[Ý´ŒŒÌÓ§Oß¾}«ªªªªªAm_~‡¡ @;¡60PÀ@ @0PÀ@myyyRRR®®®ïÞ½kmm%:€ Amƒ ÊÍÍ•‘‘±··WTT<}ú4щ nùDî„£¥¥ÅÏÏoÒ¤I:::tVËÍÍýúõ«‰‰ ׂðÜ Ø/##cܸqwîÜéâWššÚ€½PÀB* `„ ŽŽŽáááC† !:€Ð%: ±±1000<<|èСDgR#qqñû÷ï³Ø¾­­­–––¯^½bW*¡‚&‰ˆˆ¬_¿~Þ¼y111Dgà?¸Ü—\ À¸'Ož,]º444ÔÀÀ€è,ìǹF@ÓЀè–Û·o{zz&%%õèуè,l†æ*0@w}ûöM^^žèì‡÷óž>}jccÃÑC }º oCpùùùöööׯ_':ü̵Ҁ)hÍÍͦ¦¦¶¶¶ëׯ': _Â9`®BƒÀøë¯¿=zD&“‰ÎÀ—PÀ\…£®®®  @t~…æ*0‹<==ÕÕÕˆÀ*0W¡€Xôáà ‹·oߪ¨¨€%(`®B°îàÁƒQQQÿþû/ÑAX‚÷ŸÙ´iSIIÉ7ˆÀ£PÀÀ¢¢¢~~~bbbDàQ˜k¥SÐÀ¿ÊÊÊúôé#..Nt)h`ˆ££ã•+WˆN]Cއ,]º”è Ð5̵Ҁ)hàGúúú>>>Ó¦M#: €àÀ4táÔ©SÚÚÚh_~¡ ?úðჴ´´ºº:ÑA FÀÐ…¡C‡òrû¶µµ988|ùò…è ¼ Ü@&“åääöíÛGt^¹V0 À _¿~ÕÕÕŽŽÖÔÔ$: £0 |¯oß¾nnn»wï&:O@÷¸ºº~üø±®®Žè ÄÃ\+ ˜‚€v˜‚Ö¬Y“‘‘At ` €_ÅÇÇ?~üXMMè À 0¿Ú¹s§‡‡>ø€O‰˜›’’rïÞ=¢ƒ“0àKÿý÷ß–-[0üà_¸Ü—\ ÀÅÅÅJJJD§ WA€ ihh6lXvv6ÑAˆbHHH¬^½úèÑ£D æZiÀ4w”——<899YQQ‘è,´a œœÜÂ… Ïœ9Ct €€HëׯǽD@8a®•LAojlláÔßÍuuuwîܹyófZZZQQQss³˜˜˜¶¶¶••Õ²eË´µµ9t\^†)h ùøølܸ‘{nnn>w¦f``à²eËÂÃÃëêêÚÚÚjjj.^¼H&“ÍÌÌ-Z”““É£' õhÀxPSS“¦¦æýû÷ŒŒØ»çìììÅ‹÷êÕëØ±cÆ £¹N]]———··÷Þ½{W­ZÅÞ¼ #`a0dȶ·ïÿý7vìØÅ‹‡……uÖ¾$IJJjûöí/_¾üûï¿íììÙ@a¨GFÀÀkÚÚÚ† vôèÑ©S§²q·7nÜX¿~ýÝ»wÇŒÃà&?~ü°³³ûþýû½{÷zõêÅÆ0¼ #`¡VYY9vìØ)S¦°qŸ·oßÞ¸qcxx8ãíK"‘zö쨢¢2gΜ††6æ6êÑ€0¼'Ož,]º444ÔÀÀ€‰Í[[[íííkkkïÞ½Û£Gv¥úøñ£¸¸ø AƒØµCÖ ã¸  ÀÆÆFVVVVVÖÆÆ¦°°°³5cbbœœœÔÔÔÄÅÅ•••-,,‚‚‚¸€¿¤¥¥9::Þ»w¹ö%‘H"""W®\ihhؼy3ƒÝ¹sgÏž=lÜ!/ãÑ®©©133366ÎÏÏÏÏÏ766677¯««£¹²«««‘‘Ñ“'Ojjj’““7oÞ¼oß¾]»vq93_¨¬¬œ3gΑ#Gº5óü+11±›7o>|øðêÕ«ìʶjÕªû÷ï—••±k‡¼ŒGçZ½¼¼âãã¯]»F]boo?räHWWWF6ÏÎÎ1bDEEsGÇ40[[[%%¥S§N±eo©©©“&Mzþü¹ŽŽ[v¸råJUUÕ¿þú‹-{`ÐMA?|øÐÁÁ¡ã‡àà`7cãy)ñ÷ß§§§9r„];ÔÕÕ=pàÀüùóëëëÙ²C77·³gÏ655±eo¼ŒG 8%%ÅÐаãƒÔÔÔ.7¬ªªzñâÅ‚ \\\8–€/eeemß¾=00PBB‚»urrÒÖÖÞ±c[ö¦¯¯ïååÕÚÚÊ–½ð2k¯­­£.ijjêÕ«×?:Û„L&S¿ž2eJHHÓƒ`LA(--íׯ[nþÜÚÚ:yòd[[Û?þøƒõ½ý¤²²ÒÀÀàÚµk&L`ûΈ%tSÐLhkkkkk+-- HIIÙ¿—›xzz’iáBZFÌŸ?ÿÑ£GlÙÕÉ“'EDDÖ¬YÖ½ý¤OŸ>§OŸvrrêìJIøõ(JRR…B¡.)))122*..fdóÈÈHGGÇ‚‚掎0ð‚„„„¹sçfee‰ŠŠ²¸«ÜÜÜ‘#G¾yóF]]-ÙhZ¼xqÿþýÙx‚€ÝXOO/11±ã’¤¤$]]]71bÞÉüÎÇÇÇÅÅ…õö%‘H®®®7nähû’H$ooï«W¯&$$pô(ƒG ØÚÚÚßß¿ãÿY³f1¸ytt4>»øÚׯ_ïß¿ïääÄú®óóóׯ_Ïú®èëÛ·ïÞ½{׬Yƒ $Fðh¯\¹2::úÀû÷ïo¿Ýu…Žgj§M›\VVÖÔÔôéÓ§K—.­X±âàÁƒD`ÊÊÊ]»vÉË˳¸Ÿ†††-[¶œ9s¦ã%œ³bÅŠ¶¶¶€€. €ßñîÉμ¼ýüù󪪪~ýú;vÓ¦M£FbúÐ8 ãСCqqqwîÜáÚcbbæÏŸŸžž.%%Å⮲³³+++‡Ζ`Ìá\# ih@ƒ`øúõ«®®î«W¯´´´¸yÜßÿ}Ĉ[·neq?AAAÞÞÞ/^¼`K*æ €¹  ‚aݺu"""ÞÞÞ\>nVVÖ˜1cRSSûõëÇÊ~š››ÕÔÔBBBôõõÙ•  »PÀ\…‘‘ajjš––Æú‰d&¸»»755>}šÅýìÞ½ûË—/¬ï€i(`®Bƒ˜;wî¸qã6nÜHÈÑ¿}û¦££5dÈVöS\\¬¯¯Ÿ——'##îlÝ"tïVÄÄÄ$$$¬[·Ž¨òòò›6mbýC”””®\¹‚ÏV„¡ QJJJX¿ù³¹¹¹½½ý²eËØ’Š9 ƒ¾ÿ¾±±11X„0€P˜;wnhh(‹; /**Z²d ["1MBBbÛ¶mìú”$Áƒà ÅÅÅS¦Laq?;wîÜ»w/[îaÉ"''§ôôôèèh¢ƒð"0¯ðññY³f ‹ç;ÃÃÃ+++ÿýwv¥b…˜˜Ø–-[öíÛGt^„“4à0p_yy¹¦¦æÇûöíËÊ~&MšääädooÏ®`,jjjÒÒÒº}û¶‰‰ ÑY˜sÀ®¢¢bÇŽ,¶ïË—/‹ŠŠ.\È®T¬Û¸q##ŸÏ l0Ô£#`àS–––¶¶¶+V¬ :ÈÿhhhÐÐÐ 100`e?YYYµµµ†††ì ÀŒ€  ïÞ½KMM%üâç_IHH¸»»8p€ÅýÄÆÆnÚ´‰-‘x†z4` ühöìÙÓ¦M[³f ÑAh¨­­ÕÐЈˆˆÐÓÓcz'ªªªÏž=cñîZÝ‚0Г””·|ùr¢ƒÐ&--íêêzäÈVv"..¾lÙ2???v¥ VÅ^^^~ãÆ§OŸ¾{÷®¬¬ŒD")((›™™-Z´HNNŽ[9¹ #`à;‹->|8Qw~fÄ÷ïß544Þ¾};hÐ ¦wRPP`ll\PPÀú‡ 0ˆ€pQQÑÊ•+•••&MšôøñãââââââÇOœ8ñúõëÊÊÊNNNEEEœˆŒËÉɉˆˆXµjÑAè‘••]±bÅñãÇYÙ‰ŠŠÊ… Èd2»R¨Ób—””TSS;qâ„¥¥%ÍBBB6lØ››[__ÏÉ„À¸¦¬¬¬oß¾,ÞüyÕªU eÏž=ìJÅ!¥¥¥:::©©©ŠŠŠDg`#à ÄÅÅuÖ¾$ÉÊÊ*..nÁ‚œˆ $ìííïÞ½ËÊJJJnß¾íêêÊ®HœC¡P.\xæÌ¢ƒð õhÀ¸#''gôèÑLïdûöíUUUüò‘õíO9''§W¯^Dg`®‚@ÿý·££#+í[WWwáÂ…?ÿü“©8J]]ÝÔÔôòåËD ^×lkkÛ~ýsG‹-âL$¡ÐÔÔtùòe'''VvrñâESSSMMMv¥â‚ 6œ>>QQQDé¶{÷îÓãט˜;;»ÌÌÌ=z°7o:}úô‹/~ý£€(Dž&“É]îEÀê  ìòøñã½{÷ÆÄÄ0½‡E‹3ÆÕÕ•©xY]]Ý AƒÞ¼y£¦¦Ft‰ØsÀm àD2àççÇÊÍŸ Ö.]ʾD¼NJJÊÁÁáìÙ³Dà8Ü €SZ[[%%%,XÀôN:µtéRYYY6¦â}þùçÅ‹«ªªˆÀY˜k¥SÐÀ ª««ÕÕÕãããUTTˆÎÂm‹-5jÔŸþÉôÒÒÒÔÕÕ;{ãp/h¡sá !l_‰´aÃooïææf¦÷ðçŸÞ¾}›‘Ø À‹š››O:µ~ýz¢ƒcĈdå ×®]{æÌ6F`;0/ TUU511!:a6nÜxôèQ¦7·¶¶.--}ûö-#° €?~|ãÆD§ ÒÌ™3ëêêž={ÆÜæ"""«W¯öõõek(vBðœÈÈÈúúú3f„Hd2ÙÝÝýرcLïaÅŠcÆŒac$öÂå¾4à*h`Ecc£¨¨¨ˆóÝΜ9söìÙNNNlLÅÔÔÔ"##µµµ‰Î WAð ___VnÝœ™™ùöíÛÅ‹³1Ÿ’Xµj•··7ÑA8C=0¦µµµ 2äÊ•+LO~®Y³¦_¿~»wïfo0>UVV¦££óñãGyyy¢³€Â€?„††ÊÈÈ0ݾååå·nÝrqqao*þ¥  0{öl???¢ƒ° €|}}׬YÃÊæ³gÏVTTdc$~·~ýúÓ§O744€ÍPÀlÓÒÒ"))¹hÑ"æ6ohhðõõòwýJ__ßØØØßߟè lÆ»\PP`cc#+++++kccSXXØÙš/^¼X°`A¿~ýz÷î=zôèû÷ïs3'U=nÞ¼Éôçd_¸paôèѺººìM%¶lÙrøðá––¦÷––VWWÇÆH¬ãÑ®©©133366ÎÏÏÏÏÏ766677ïìçgâĉ_¾|¹ÿ~qq±§§ç… ¸€EÍÍÍ'NœØ¼y3ÑAxÑøñã•””îÞ½Ëô¶nÝÀÆHlÀÈÇýr߉'/^ÜqÉâÅ‹½½½i®¼qãÆÖÖVê·‰‰‰¬g_`W¯^4iÑ)x׃ ;þ¤wKXX˜¾¾>Ó›ƒ0ã\#ðèøáÇ—888Ó\ùèÑ£d2™ú­¦¦&ùjÔÖÖvøðámÛ¶„wY[[·¶¶†††2·¹……‰Dzñâ[C°„G 8%%ÅÐаãƒÔÔTF¶ Ñ××çL.Žxøð¡¨¨è”)Sˆ»Èdò–-[<Èô\\\|||Ø €E|˜è lÀ£lmmýÓoüýýgÍšEså²²2KKËC‡™™™q%ÀÿsõêÕ±cÇjhh0·ùÁƒ7nÜ(&&ÆÞTÌÙÙùÙ³gD`εVWW:99µß•Þ××÷Ò¥K‰‰‰ÒÒÒí+tœ066Þ¼yóÂ… ÙutLAã ¼½½'OžÌĶiiifff999’’’l&ÀvïÞ]XXˆûíwÝ´ŒŒÌÓ§Oß¾}«ªªªªªAmߟ$$$,Z´è§ ©*++¹œ„Peeå¸qã&MšÄÜæpssCûv׺uëîÝ»WPP@t–`¨GFÀÀ¹¹¹&&&ÙÙÙ½{÷&: ÿÙ¸qcss3Óo8ÌÈÈ––0`{S@â\# ih@8;;S(”½{÷„/•””èêê&''+++3±ùŽ;***NŸ>Íö` xPÀ\…N+,,6lXFFFß¾}‰Î¯ÜÜÜÄÅÅ=ÊĶeee:::?~”——g{00(`®B§­Y³¦OŸ> :+..:thjjª‚‚›/_¾\SSÓÃÃíÁ@À €¹  UXXhdd”––Ö¯_?¢³ð·?þøCZZš¹·'''O›6-''§gÏžl‚ÌU(`à(—ß~û Ã_Ö$''w¼kã‚‚‚f̘!!!Áö` HPÀ\…ú   "ÂÌ»ø ŒŒŒÒÓÓ1üe 77711±cÇŽ ˜«PÀ@Gkk«®®î?ÿü3nÜ8&6_¹r¥¢¢".~f—ö3Á>|PRR": &¡»Ï îÓ§sí›——ìîîÎöTBKIIÉÑÑw‡~„¡ ãÆswwÿý÷ß™ØvÙ²eƒ ÚµkÛS ³¯_¿êèè$$$àÆÀ ˜‚æ*0tæÕ«WK–,ÉÌÌìÑ£Gw·ÍÌÌ7n\ff&n}Åv[¶l©­­Å5€PÀ\…†Î¼{÷îÓ§O3gÎdbÛE‹lÛ¶í© }«¦¦Ft4(`®BÛ%%%MŸ>½ýÄDgL»wïÎÎÎþécLT\\üìÙ3|*3Єæ*0°••Õ¬Y³Ú?^8¡¦¦FKKëÉ“'†††Ýݶ¬¬L[[;%%—Rïp4{öìYff¦““ÑAY¯^½¶nÝú×_1±­‚‚‚Ý©S§Øž € õhÀب­­mäÈ‘›6mš?>ÑY\cc£žžÞùóçÍÌ̺»mûýA³²²úôéÉlÀ¿0àW7oÞ±µµ%:ˆàß·oßÖ­[™øu9pàÀ3føùùq"MêÑ€0°Kcc£ŽŽÎ¥K—&L˜@t¡ÐÖÖ6jÔ¨ 6,X° »Û–––JIIÉÈÈp"ð/Œ€S]]ýèÑ#æ¶õõõÕÕÕEûr ™L>zôè¶mÛ»»-…BAû7¡€ºpöìÙ›7o2±auuõáÇqÛg.›8qâ!C0™ ¼s­4` ¨êëë544ÂÂÂôôôº»í_ýUTTtùòeäz---322dee‰Î|ïæ*0P>}úéÓ§wïÞíî†íWÕ¾{÷NEE…Á€¾åË—÷ë×Ò¬Cs Ú555 <800ÐÄĤ»ÛΟ?èС;vìàD0èRii©¾¾~tt´––ÑY€¿¡€¹  ToÞ¼5jTw·ŠŠŠZ²dIZZš¤¤$'R#:ôæÍ›{÷îø®‚ íÛÒÒâêêzôèQ´/±Ö¯_ŸššÂͧN b{$€ŽPÀlvöìY999Üyƒpâââ>>>nnn?~üèî¶ÚÚÚ---œÐ ÀN_¿~Ý»w¯ÑA€D"‘¦Nª­­ÍÄMž§Nª  ÀÜÛÏ„“4à00mÕªU½zõ:~ü8ÑAàÿ—““3jÔ¨ÄÄDeeånm¹jÕªÔÔTQQQe¾€sÀ| !!ááǸò™§¨««;;;oÛ¶­»Nž>>½zõïÖV¥¥¥;wî<þ¼ˆ~¦x‘­­­ººú±cLjðÿ`®•LA ­šš--­ÈÈHmmínm¸páBuuõp(°.??Ĉ¯_¿ÖÔÔ$: ðLApƒ——×”)SºÛ¾!!!ñññ¸öŠÇ©ªªzxx¬\¹^@ü?ÏŸ?ßµkW·6©©©qqq9þ<î{Åû\]]kjjðùTÀ#0×J¦ qnnnÕÕÕ/^$:0äýû÷–––‰‰‰ ¥[–””HHHôéÓ‡CÁ€gáø  Š5kVrrrß¾}‰ÎŒÚ¶m[^^Þ7ºµ•«««¸¸8.ãB(`®B#~üø1bĈ¿þúkÁ‚Dgn¨¯¯744<~üøÌ™3ߪ¤¤dèСqqqªªªœË<ÌU(``„‡‡GZZ>펽xñÂÎÎ.))INNŽñ­vïÞíïïϹ`ÀƒPÀ\…†.½{÷nÆŒïß¿ïî©Dàîîîeeeׯ_g|“ššš!C†ñWÿñÇNNNøƒ¡  ‰oß¾éèèDEE 2„ÁM¾|ù2lذ€€€‰'r4pGssóĉçÏŸïææFtàQ¸‹«PÀBÂÕÕ•D":uŠñMfÏž­««{ðàAŽ…nËÍÍ5jTxx¸ÑY€q®D9±SÞ—““sóæÍÔÔTÆ79sæÌ§OŸn߾͹TÀ}jjjÇ·³³‹•’’": õhÀX´µµ¥§§ëèè0¸~RR’……E·æ«,]º´GÿüóÑA€çà",6#“ÉŒ·oUU•ÍéӧѾ‚êÌ™3¯_¿îÖ•íñññݺ—ÀOPÀ]srrš6mÚüùó‰œ"--}ûöí7¦¤¤0¸É°aÃŠŠŠpJ˜†è‚··w~~þñãljœ¥§§wìØ1[[ÛššFÖïÑ£‡Ï† \à'8ÙIÎUttô¼yóbbb DtàggçêêjÆ?+iÙ²eòòòø”$†sÀ(++[¸páÅ‹ѾÂãÔ©S™™™Œ¿9íÈ‘#ÒÒÒ‚ C=0Teee ®ÜÔÔdnnnffæééÉÉPÀsòòòÆŒsãÆI“&ˆ‡0«jjjLLL’““\ݺurrr;wîäh*àAƒ \´hQNNÑY@¡€AXìÙ³gòäÉúúúŒ¬|æÌ™W¯^]½zUD?#ÂÈÔÔtÛ¶msçÎÅVÀ9˜k¥SЂ'>>ÞÚÚ:))©_¿~]®¶dÉ’—/_jjjr!ð,—üüü‡öèуè,@LA0¯¹¹ÙÉÉéèÑ£Œ´oZZš½½ýí۷ѾpêÔ©†††­[·†z4`,xž>}jffÖåjß¾}=zôæÍ›W®\É…TÀûÊËËÇŒãîî¾zõj¢³1ðiH\…Nõõõ“'OÞ·oÑY€‡dffN˜0áòåËÓ¦MëråGýû￾¾¾\Ü!ŒSÐ666²²²²²²666………tV~÷îÝš5kúôéC&“¹–IKK‹½½½ššÚÞ½{‰Î¼EKKëÁƒK–,yýúu—+Oœ81$$äÉ“'\üŽG ¸¦¦ÆÌÌÌØØ8?????ßØØØÜܼ®®®³õ—,Y¢  ðêÕ+n†ÑÖÖæìì\WWwéÒ%ü ¿211ùçŸlll>~üHM™þùgÕªUß¿çN6à_<:×êååíÚ5ê{{û‘#G¶‚:l™+À´°Ù¼yóË—/ÃÂÂpK# ãòåË»wŠ0`ý5ÛOŸ;wŽ+¹€³„n úáÇ—888•ØÞ½{ŸgÎKK˪ª*¢³ãÑæOOO2-Dç–TUU988œ?þ·ß~£³Ú•+W:¦¬¬Ìµl öíÛ7~üxkkëêêj¢³ãѹVLAÓìììúõëçííMg .ìÙ³',,lÈ!\ ‚¤­­mÍš5‰‰‰!!!½{÷&:pÐMAëéé%&&v\’””¤««KTà¯^½JNN>|ø0uΟ?¿oß¾§OŸ¢}id2Ù××wÔ¨Qfffß¾}#:ð%-`kkkÿŽKüýýgÍšETàãÆ{õê•„„Dg+œ8qâèѣϟ?ÇEªÀ"2™ìååennnaañåËú+ã“ áWpà@EEEEEÅþýûcbbœœœ¨+àL-tFFF¦³‡öìÙãçç÷ìÙ3UUUnFväÈ‘™3gNœ8ñÓ§O­ÓÔÔ4mÚ´p3ð>-`™§OŸ¾}ûVUUUUU5...""‚ÎÛ4;^?…k©àW­­­îîîwïÞ}þüy—wQè–={ö,_¾|„ ™™™4W»víš³³s^^w£OÃÕF4à",óãÇGGÇâââû÷ïÓ¿4€iÿüóÏŽ;îÞ½;zôhš+œqâÚ¸cĈQQQ>>>ëׯoiiùéQ)))´/Pá·ð±M›6ýøñcøðá¿>tëÖ-kkësçÎuù Z쥮®ýáÇ9sæàVY@ ø•¿¿ÿ£GnݺգGŽË[[[wìØ±uëÖ°°0kkk¢â0ëÓ§OHHÈÀÇŽÛÙ¥Ñ8ÙIÎó¾øøø3fDFFêèèt\þõëW;;»–––›7oâÃj€p~~~;vì8wîÜܹs‰ÎLÂ9`€ÿ¡§§òSûÆÇÇ1bĈ¡¡¡h_àÎÎÎÿþûïúõë=<<~=%L"‘0G-ÌPÀÀ—$$$ŒŒŒ:.9þüôéÓ½¼¼8ðÓ¤4†þöíÛØØXKKËÒÒÒŸµ²²ºzõ*!Á€p(`à{••• ,8wî\TT&ú€õíÛ÷¿ÿþ;vìðáÃÃÃÃ;>táÂ…Í›7GDD• „þöòåK###EEÅׯ_<˜è8´õèÑc÷îÝW¯^]¾|ù¦M›Û—kkkß¿ßÞÞ>!!Ø„À}¸Úˆ\„ÅZZZ8pöìÙ .LŸ>è8 )//wrr*,,¼qãõ#¹îÝ»wäÈ‘èèhÜÄžq®Ð44 €yPmmmÇOãHKK[±b…”””¿¿¿²²2Á˜pæÌ™Ý»wïØ±cíÚµíw‰©¯¯—””$:Ѐ« A¨8qbþüùí_777>|xüøñ³gÏ Eû?Z»vmLL̽{÷LMMÓÓÓI$ÚW¡€×9sÆ××÷üùó$éýû÷£FzöìYBB–-[pƒIà_êêêááá .œ0aÂÑ£G›››‰N܆ß_ÀÓ.\¸pôèшˆyyyKKKWW×¢£°JDDdݺu±±±ááá£GÆuX ¼«ªªÊ××7"""--ÍÀÀ 77711ÑÑÑ‘è\ì4hР'Ož¬[·núôé6løþý;щ€KPÀÀ»z÷î´qãFWWWŸ7nP(¢C°™LvttüðáCee¥®®îõë×›››÷îÝ[UUEt4à \îK®‚æµµµGŽñõõuwwß°aCÏž=‰NÀ 111®®®={öìß¿NNNHHˆ¼¼<Ñ¡„®‚!ÒÚÚêïﯭ­•••àááöá1zô蘘˜¥K—¾xñ¢±±q̘1………D‡ŽÀPŒ€ ºyóf™£GŽ=šè8„ùþýûáǽ½½EEEÓÒÒ”””ˆN$¤p#®BâÍ›7»víÊÍÍ=|øðœ9sˆŽÀ>}úäêêíáááììŒÙ îÃ4²>Ìœ9sâĉ ÉÉÉh_ªþýû=yò$<<\KKËÏϯ©©‰èPÀêÑ€0פ¤¤ìÝ»÷éÓ§"""¿ÿþû©S§po €ÎÄÆÆîر#++kûöíK–,#:‘PÀÍû÷ïmmm-,,äååÛ?(æôéÓh_:FŽùßÿ]¹råÆC† ñóóûñãÑ¡€yø}\ÕÖÖfii9sæÌ±cÇfggkkk_¾|yÕªUDGàãÇ »råʃÔÕÕ:ôíÛ7¢C30×J¦ 9áÇþþþ^^^âââþù§¸¸8Ñ¡øRFFƬY³îܹC&“Oœ8qÿþýßÿ}ãÆøHlNÀ4ð±ÒÒÒ½{÷ª««Ÿ={öýû÷K—.Eû0mÈ!»ví277OLL¼xñbFFFÿþýMMMçÍ›It:`†z4`ÌmmmÏž=;þ|hh¨­­íºuëôõõ‰ 8’’’,X0nܸ3gÎôìÙ³¶¶öêÕ«§OŸnmmuvv^ºtiŸ>}ˆÎ(ð>`®B³¨¼¼ÜßßßÏϯG«W¯¶··ïÝ»7‰Djkk#“ÉD§555gϞݰaCÇ £¢¢ÎŸ?ÿï¿ÿΙ3ÇÙÙ7´a ˜«PÀÌiiii¿D344ÔÚÚzÕªUãǧ>šŸŸ¿xñâãÇ5ŠÀBâË—/—/_þûï¿{öìéàà°dÉEEE¢Cñ%0W¡€»+==Ýßßßßß_EEÅÑÑqÁ‚?Í}]¹reóæÍ›7o^¿~=Á\ÓÖÖöêÕ«+W®Ü½{wܸqK—.1cn§Õ-(`®B3¨°°ŒvÛbIDAT°ðæÍ›7oÞ,--]¼x±£££®®îOëTWWÏŸ?¿¬¬ìâÅ‹†††„ä€ÚÚÚ   +W®$&&Ξ={Ñ¢E“'OîÑ£ѹø ˜«PÀôåååÝ¿?==}Þ¼y‹-š0aBg÷Ðhkk»víÚ¢E‹DEE¹œ@hEGG«ªªöïßÿׇ>}úxãÆÂÂÂ9sæÌ;×ÌÌ ?žt €¹ LSnnîÝ»wïܹ“=wîÜöŸ[¼›€ùøøìÝ»wïÞ½ÎÎÎôÉÎξwï^PPPvvö¼yólll&Mš„Û[þ ÌU(`ª–––ׯ_?~ü¸¼¼|Ö¬Y666æææø{€Ç¥¤¤8;;‹ˆˆœ={–þ;óòòîܹs÷îÝ´´433³™3gZ[[÷íÛ—kQy ˜«PÀß¾} ý÷ߟÒÚÚêçç{ñâEFÖÿúõë“'O‚ƒƒÃÂÂôõõ§OŸnee5lØ0!ÿÁGs•ppssó›7oÂÂÂþûï¿´´´É“'[ZZNŸ>}àÀŒlž””äîî¾iÓ&KKKNGŽúñãÇóçÏCBBBBBªªª,--§L™baa¡  @t4 €¹J¨ 8==ýÙ³gjjjS§N555eüänAAÁÎ;ŸuêT …ÒݽeddŒ7ÎÅÅeÓ¦M²²²œ ¼ ¹¹9:::<<<222!!AOOoòäÉ'N3fŒ`ßóÌU‚WÀMMMïß¿ŽŽŽŒŒ|öì™’’Ò¸qã&Ož}ú4:::&&FVVÖÄÄdìØ±£F222’””dclB €¹ŠO øÛ·oqqqñññoÞ¼yýúµ„„„‰‰É˜1cÆŒcdd$%%Åâþ›ššðAAÒÔÔtóæÍcÇŽ]ºtÉØØ˜-ûÌÎÎŽ‰‰yýúulllJJŠ®®î˜1cFŒ1bÄmmíÎîØÃËPÀ\Å/\XXøîÝ»”””„„„øøøòòòáÇ1¢ýÏOeeev(::ÚËË«¡¡ááÇìÚ'¼?~ÄÅŽyó&>>>..®¤¤ÄÐÐÐØØxèС†††|q'0Wñf×ÔÔ$''øð!%%%%%åÇd2yøðáúúúÇŒ¡UYYß>lHLLüøñã!CtuuõÿÏ AƒˆÎH ˜«x¡€üø‘‘‘Ñ^´ÉÉÉÉÉÉeee:::C‡ÕÓÓkÿ/ë×Oué?þ˜>}º¥¥%?N+BCC+++gϞ͡OOª¯¯OMMMNN¦þ¢ûþý»žžž~¼pÁ ˜«¸_ÀEEEYYY™™™™™™ÉÉÉ©©©¥¥¥êêêúúúÔÆUSSÃ[l€k"""<˜˜˜¸`Á‚eË– >œÓG¬¨¨èØÇ)))ÍÍ̓:tè!C´´´´´´455%$$8¤#0Wq´€?þœ•••ŸŸ_PP’’’ššš™™)++«õôôôôôôTUU¹V·õõõ%%%jjjÜ9ð‘‚‚ÿË—/qÿE+**ÒÓÓ“““322>~ü˜™™™——ׯ_?mmm555 Î}È1 ˜«Øòr×ÖÖææææååfgg·p¥¤¤455544¨­­­§§§¥¥%##ÖäÝRWW÷äÉ“   ÿý×ÙÙùðáÃÜÏ|¡­­GîÝÒÒRXX˜žžž”””ŸŸŸŸŸŸ™™YPP ¨¨Ø>>4hÐÀUTTÔÔÔØr-* ˜«ºõr—””äççåçç———khh¨ªªª¨¨ 0@]]½}€Û»woކgP^^Þ°aÃLLLlllæÍ›Ç 'Z€ï|ÿþ=33“ ³Óô577çååeeeµÏ/¶ÿBÎÎή®®VSS8pàÀ @ý…}úôéÓÍÍÍ ™ÏëLuu5uhTXXXPPPPPÐþuŸ>}Ú‹YEE¥½••••øÓÍCPÀÜÓÒÒ"**ºvíÚöqmiié—/_äåå•””û÷ïßÞ¯ÔÒåòåÝ’••õôéSyyy¢³€ÀÊÌÌ|üøqHHȰaÃøådVIIIAAAûïùö†....---,,”””¤P(JJJTTT|ø€ˆNÔ ˜‚æ*/àÆÆÆÔÔÔ>ôïßßÌÌŒè8]¨©©yýúõË—/ãâââââþý÷_¯Ûb ˜«x¶€ÃÃÃ7oÞœ‘‘Ñ~ŽÅ‹[[[  {:{SÓÇ 4dÈž:ë‡æ*b ¸°°°²²rèС¿>ôùóçOŸ>pî-ç„hkk³³³KLLÌËËkc\¿~nÿ‡æ*îp^^ž‡‡õNóæÍ;}ú47ðˆÆÆÆ´´´¬¬,›_mhhxò䉪ªª––V¯^½¸ÌUì}¹›šš>þ\XX˜ŸŸßÐаbÅŠ_×)//üø±––ÖàÁƒåääØuhóõë×+Väåå}üøQVVÖÄÄäÑ£G=" ¸ îîîaaa$iÊ”)'Ož8p Ó{ëîËÝÐÐP^^Nóžg¥¥¥*** ¥ý½Þ:::;vì`:P•––VVV2äׇÒÓÓW®\ÙþëWQQQOOoÆŒÌLOMMͰaÖ-[¶f͉äëë{åÊ•÷ïß3ýáµÔ—»¥¥åÛ·o4oÓX__?eÊ”²²²’’’ÆÆFUUÕŒŒŒ_Wkkkkmmå…Ó£¦¦&!!!??¿´´´¸¸XNNÎÃÃã×Õ222¼½½ûöíÛ·o_--­_/ÏFÓãååíÚ5ê{{û‘#Gººº2±·ö¾TQQ©ªªª®®¦P(Ÿ>}¢yÁÞ«W¯úöí«¨¨È#·w€n)**zðàÁׯ_¿|ùRZZª©©yàÀŸÖAÓcff¶uëÖ©S§R—„††>|8""‚¹’Éä¼¼¼Þ½{÷éÓ‡M€/¡€é¡P(III …º¤¤¤ÄÈȨ¸¸˜¹òìû€€ËPÀôˆ‹‹×ÖÖŠ‰‰Q—455õêÕëÇÌí í8×¢œØ)¿ðôôܽ{7͇xü“€ß ÂPSÐ?á÷ü$<Þ€§@8~ÏOÂS K„;å2==½ÄÄÄŽK’’’tuu‰ÊÐ%A(`kkkÿŽKüýýgÍšET€.ñýä‰Dª®®644trrrqq!‘H¾¾¾—.]JLL”––fn‡ü>gÂïùIx ¼OpüžŸ„§@— Œ€eddž>}úöí[UUUUUÕ¸¸¸ˆˆ¦Û€ øþoNà÷?Ùø=? O7à)Žßó“ðèêáééɉýò»I“&%üžŸ„§ÀðÇïùIx ãû¿Mø‘ œà;(` €€ €(` €€ €(` €€¦§¤¤DKK‹L&¤{bbbœœœÔÔÔÄÅÅ•••-,,‚‚‚ˆõÿµw?!MÿqÇ¿uJ„EX|bI›’‚  Ä@jyp‡@P ¡º(äA©; ôj‰±ìÑA¨ÔštH“j¢“•S,ts¿©?ömo?ß='ýâáµÏÞ~^ûøjÌëׯ«««srr²²²NŸ>Ýßß/Ȱ÷ïß»Ýn‹Å¢ÜüLMMUUUefffffVUU}ýúU:‘aê.~˜ æß»PD‹ „M¬®®:ÎÞÞ^åV©¨¨¨££ãóçÏËËËsssƒƒƒv»ýÖ­[Ò¹ Ð4­´´ôÍ›7Á`pxxØf³uuuI‡2ÆjµÞ¾}ûÓ§OjÍϯ_¿t]onnöûý~¿¿¹¹9/// Jç2FÑÅ0Áü›` Kj(9©ÑÖÖvéÒ¥P(¤è÷p´/_¾X,éÔ×ׯ®®F>Õu]0ÏV¨5?ííí.—+úŠËåºwïžTž-Rkñ#Ì4ÿÊíBaI-þáÆFFF.\¸0<<œ‘‘a‚(=55UXX8;;+$A‹‹‹ÙÙÙËËËÒA¡Öü”••ݸqÃétF®<{ö¬µµõùóç‚©¦ÖâoFéùPqJvpxKKK—/_îîîÎÈÈβU@ |?©¶¶V:Kâòóó¥S¤¯×k³Ù¢¯œ8qb||\*4õç_Ñ](E`†—‡ÿ\mmíÁƒoÞ¼þTÑÑÑo8sæÌÀÀÀÎ;ó$Ìï÷wuu•””HgI„Zó³{÷î`0¸k׮ȕ?þìÙ³GÑã—Z‹¿!¥ç_é](EÀ 8Ö£G¼^oSS“t­ ßcðù|½½½^¯·¥¥E:Q"|>_eeåƒTÜ}€-R}þÕÝ…RTÿü®²ZÖ/…®ë“““1_#-^ñ<›CCC‡Ne*C6{ÓÓÓ6›ÍãñH‹Óÿ?Û|~bìÛ·ïÇÑW¾ÿ~àÀ©<[¤ÖâÇPeþã´Íw¡©)‚t?Ǭ¯¦iGŽÙEÓ´ÈÛÐú‡°ÞÉ“'gffR™Ê ·oßΞ=ÛÞÞîp8³Å#ž§@Ǿ266fµZ¥ò¤-…æ?NÛ|Š‘š"H÷^oý‹”ÈEéh‰{ûöí±cǤS033S^^~çβ²2é,饢¢¢§§'úJOOϹsç¤ò¤'SοZ»PŠŠÀø¡9í(·JN§³¿¿ßçóýþý{zzúáLJzúô©t. úúú¤SüjÍÏÏŸ?=ÚÒÒùCº®/,,HçJZ‹a‚ù7Á.#³¤ü[S@¹7R¾xñ¢££ãÕ«W@ ''§¸¸¸¡¡áÔ©SÒ¹ Øðç<óóó‹%õa³áCPb&''ëêê¿øëp8îÞ½›››+Êu?Ìóo‚](F2Š@±jÀ¸ € 0(`PÀ €@ €@ € 0(`PÀ €@ €@ € 0(`kª««¯_¿}¥±±ñüùóRyÛ …¤3Ø.æææìvûãÇív»¦i>|(//Û¿¿t4Àl8X³wïÞÎÎÎššš••••••ššš¶¶6ÚHNÀb]¹r%??? ½|ùòÉ“'Òqs¢€Äòù|‡# åååIÇ̉ëÚµk¥¥¥³³³?~¼ÿ¾tÀœ¸ à?<ÏÄÄDeeåÕ«WGFF<t"Àœ8X3??_TT488¨ëº¦iãããïÞ½ËÎΖŽ˜ '`kÜn·Ëå ·¯¦iV«õâÅ‹n·[6`Jœ€À 0(`PÀ €@ à/@ý^¼€ýIEND®B`‚gsl/doc/images/fft-real-mixedradix.png0000644000175000017500000005410713536674414016315 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìÝy@Tõþ?þsfc€X]Á\rÁM…Ы©©eš–R–~,óš¶ØUJ±55éúѬ›dyËÛuëf.,#bÀLš**J.`²Ïúûã|î|çÇ2ë9sΜy>þrŽgy1æ9ï÷yŸ÷! Î%`»w„`€` €X€`€` €X€`€` €XÀxŸ;wnùòåþþþ$Iš_óôéÓO=õT=üüüÆŽ{èÐ!¦k` ã¼hÑ¢ž={æçç[\S.—ß¹sçСC·nÝÚ¹sgjjêž={˜.€¤ÓžL’ŽõÆo|ðÁƆrqqñOTH I TH îÉý ‚°x­Ý¸À7oÞ|ôÑGÓÓÓÙ®€A„uûöí©S§nÞ¼é ¼Çr›6í§NºnݺiÓ¦±X€s0ÞÿÞiï¹ñ ¦:]³¾¾Þßßßâ!\â*Ç‹D…´@‘´@…´à~‘ܯ`²HƯ›¯Ûô¹ÿk  ‡®¸°“lذí,@…´@‘´@…´à~‘ܯQ.Ðÿn‘K\EWÄ\Ä  À0 À,@° À0 À,@° À0 À,@° À0 À,@0E©Tnß¾½¨¨ˆíBX†÷ S"¶ à'•J• V«%Inn®L&c»"và}è ZÀ´1mê>|¸µµU£Ñ´¶¶æää°]krssïÿÿýo b€ÿ" Û58Š$ùðS€«S©T'Nlmm%I2((¨©©éÁƒÔ™~àÀÈÈH¶kt¶²²²yóæýöÛoA$éçç'•Joß¾­×ë¥R)Äà˜‹´€è¡P(ÚÚÚt:Á`˜;wîÝ»wóóó·lÙröìÙ×^{-11qÓ¦M¼oüQ Ü‚‚‚ôôô &,]ºÔø>ܽ{wÁ‚z½^§Óµ¶¶* ¶‹`ÚŽh>|øñÇ …Ûv·nÝzê©§òóóA§+ðÕ ÐÖÖf0¢¢¢¾ûî»ðððNWÐét_ýõ‚ Ø*ÀJÌE aÐ@­V¿ÿþû¯¾újPPP|||Çp š9sæÙ³gµZ-I’ …‚—¬P(ÔjµV« … .l—¾AÈd²ììì¼¼¼¤¥¥Íš5ËËË‹•RX‡ ÁÚµk{öì¹uëV’$»ZgâĉR©´µµU§Ó7Ιå9M\\œ^¯R©tâĉ®KÄõë×W¯^ýé§Ÿ:µDÎÀ5`G;vìÀ{÷î5“¾Ä›7ož0aÂáÇVž3?~|Ĉ›7oÎÉɱØÄß½{·B¡øæ›oœS×ðáê)®[”JåÑ£GwïÞ}èС &X¹ÕÝ»wGõücÒ¤IŒ–çdJ¥rÆŒJ¥²ÿþVnR\\ö 8 -`{Ü¿ÿÇ\´h‘Ý{ iiiÁÁÁ÷ïß§±6gÒëõï¿ÿ¾}ÝFO=õT^^^MM µpÆc48_zzú¹sç233ßÕwß}—––vîÜ9Àõ¾'&&.\¸ðùçŸw|WË—/~ë­·ß0 €[öìÙ³téRZv5wî\//¯o¿ý––½9ÓÑ£Goݺ•œœLËÞ^|ñÅŒŒ NGËÞ¸ `³üü|­VkýÌæ‘$¹yóæ”””¶¶6Zvè:nݺu[·n‰èJ2|øðž={ž:uŠ–½pÀfÿó?ÿc~âI›ÄÇÇ:ÔµfEÞ»wo@@ÀŒ3hÜçÒ¥K322hÜ!—ñáê)®ƒ3ýùçŸ (--íÑ£»½xñâäÉ“KKKýüühÜ-CZ[[#""öïßOïS%CBB.^¼Lãn©(ÍAƒ3íܹ³  à믿¦}Ï‹/&I2222..޳#+•ÊÓ§O_»víöíÛ }ÿË–- ]»v-í{°Ø085ãqWÏÚsıcǦOŸ. =<<¸975ýu[[›N§ûöÛoçÎËÄ!æÍ›W^^îŠc—0 €}J¥råÊ•uuu Í›qéÒ%@ Õj9;75ï•V«%I²ªªŠ‰CÈd2—^zÉէȰ3aX…šô¸¥¥E$ýòË/L4Oår¹‡‡õx%nÎ%—ËÅb±F£‘J¥ U¨R©®_¿^ZZúõ×_s³€.hX…jüéõz;ž}d%™L–““3iҤɓ's3xd2Ù¬Y³ââ☋F…BA½Éœí  ZÀV‘ËåB¡P«ÕÚ=é±5bcc8~ýúõ0t»ýñÇÇ/..îÓ§C‡ ¦ÈÖjµB¡›ÝtáÃð% Âçxá…ªªªÒÒÒbbb=Ð[o½uçÎÞüÚk¯étºôôtFRTT´qãF??¿o¾ù†ÑX£ ÍAƒsŒ3fëÖ­ñññL¨®®.<<\©Trª|÷îÝ!C†\¸p¹æ¯Ñ¹sç-ZTRRÂô,r—QÐçÎ[¾|¹¿¿?s Т¾¾þÊ•+cÆŒq±—-[¶eË'Ëz›7o~æ™gœ¾AŒ9òîÝ»ÕÕÕN8[¸À‹-êÙ³g~~>Û…´wêÔ)j”²s÷ꫯþë_ÿºqã†sgÑÝ»w÷îÝ»fÍçN $%%a^hà7npIIIjjjdd$Û…´wòäÉÉ“';ípݺu[ºt)wÁ[¶l™?¾sš¿”É“'ŸŽ^=µ©Ï×€Á xìØ±ˆˆ§ñÞ½{\±bŬY³Xœ™R©T;vlÇŽ/^ìÛ·¯ÓŽ[SS3räÈ?þøSb»˜‹ajj*ûuÐÆ­/̦•Á}(•ÊþóŸ"‘ˆj·µ{iÓ _~ùåìÙ³mÚƒ#GìÓ§Ï¥K—>ùä“Ó§OïÛ·oÊ”)Ôó è=„Å—*•J.—Ÿ:uJ«ÕΟ??88˜é#—œ:ujܸq¿ÿþ;½G° ƒcà$› ãìO,R*•ÞÞÞb±ØÛÛ[©T¶{ië o¼ñƬY³lÚƒƒGT*•¯¼òŠñïô•W^¡ý‡²¦æv58ሦK,XðòË/Ó{D6NFpmÌE G£ËÖîÔ† +¸nÛ¶mb±˜‘/­àšÄbñ¶mÛØ>1»6lØÐÕÉÃÐyrq¥ÓŸ ýÒP‰ Z‹>>>'Ožtr X©Tzzz ’$}Úî „0𖃬P(ÚÚÚ‚P«Õ …‚¾ºì———'t:C%) µZ­Õj…BáÙ³giß¿¨’ ƒƒ?28 ¼¥V« `¹\N’¤P(äÎ JÔp0êî&J¢~d’$=<<¸ó#K$¡Pèà,‹Õj5…8 ¼å` X&“…„„¬\¹2''‡ ýÏAÈd²ììì·ß~ÛÛÛ›‰ ´Ý»w÷öö~óÍ7¹ö#¿ñÆ={öt¤$´€ƒp xËÁnllüã?¶lÙ©‡:ÄÆÆÆÆÆöîÝû…^ÈÏÏ …4î|Ù²eëÖ­{ýõ×iܧãbcccbb222n߾ݳgOûv‚B xËñAX#GŽäTú-[¶L"‘|üñÇ4îóË/¿üã?XŸy£S$IÊd2¥Ri÷ÀÀA`à-¸¨¨(66–Æzh$öìÙ“ššzýúuZvx÷îݵk×~ñÅÜüÂADll¬#7_!€ƒÀÀ[°R©4>]‡ƒÂÃÃW­ZµpáBo ¦nü}úé§/^Mc…ôЉ‰AÏà0ð–ƒ\XX¸eËë¡ÝäÉ“7lØPXXh÷mÁÔ¿­­­³O#ç‚1cÆ<÷ÜsƒÁ¾ùáÀÀAho92emmmssó€è-‰^gΜqð¶`ê.[N'œjŠi={öôññ©¨¨°osLE „Þr¤¬T*ccc9þ0.ê¶`*ƒ£¢¢ìØÃ¨Q£¨ôåοf8r-`à tAo9À………œeDÝ#›——WUUõÊ+¯äææÚ4mõŸþù·¿ýí©§ž=zt||ýôÓvl‹Bo9ÀEEE«V­¢·&P·±qãÆ„„„ÜÜÜ^½zY³aSSÓc=öÈ#|ôÑG ×H›1cƬ]»Ö¾mÀÀA`à-»Ø`0¨T*î·MmذA§Óýå/Ù¾}û… âââºjÁ+•ʬ¬¬Œ5*==ÝÉu:B&“Û÷kE!€·ìž º¬¬, ÀîI—ØòÎ;ïüþûïS¦L¡®év:.šöÜÜÜ, ?þøcŽ_änÇËËkàÀ/^´ãv)Ì „AXÀ[v·€9~°‘‘‘$IjµÚ–––½{÷ ê6_jìÒ¯¿þúúë¯755Q7óäåå±]¯Íì¾-`à ´€·ì`.Ïež\.—J¥mmmà?ÿùÏÁƒoß¾m0Aß¾} CBBBQQ‘V«åÎ#žlPðâ‹/Úº!8-`à-GZÀ.ÀÔ¸èÍ›7Ÿ9sæÚµkóæÍÓétZ­V«ÕN›6­¢¢âóÏ?ÏÍÍÝ´iwžwd»ïDB¡ ¼e_«Õê‹/Ž5Љ’œÀ8.š ˆ§Ÿ~ú³Ï>S«Õ‰äÙgŸ¥®øš®àr~øáªªªøúúÚ´¡X,nhh`¨*û  ¼e__¸p!,,ÌÛÛ›‰’œŒj»n{·#¡P8bĈ_~ùÅÖ ÑB x˾.**3f õ°Â¥Û»¢z¡lÚ  „0ð–Ýì¢C Ý5–­[!€ƒÀÀ[ö=ŒÁu‡@»‰1cÆÚºÆ„Þ²£üçŸþþûïC‡e¨$pÜ€ÔjõÍ›7mÚ -`à 0ð–¬T*G-al§Ù18 ¼ek+•Ê?ü°_¿~Ì•´þßÿý_›2 „oúÀ[6°q’d‰DòÊ+¯ðã¦^R©T_}õU[[[bbb§ó]w  „0ð–McP(jµÚ`0èõz…BÁhaà…B¡Óé ƒZ­¶þ7…‡1!€·ljËårje$Ù}Èårjp»X,¶þ7…0px˦–Éd;vì áͤQ|EMïž––fýo  „Þ²u–F£™:u*fáà¾ØØØÇ{¬µµÕúMÀÀA`à-[øâÅ‹?ü0sõ~øá‹/Z¿>8 ¼ek>œ¹z€FÇ/..¶~}0px˦6 %%%QQQŒ–t6lXEE…õ›ÀÀA`à-›æ‚¾~ýº¿¿@@£%]<<|øp§+K¥ÒŽ ===© øÎ¦.hŒÀr]è‚×Ål—””´»º6|øðK—.uºòË/¿<þü¼¼¼††††††Ó§OÏ›7ï¯ý+£_Y9¥V«---6l˜J&„‡‡ß¼y³©©É⚘¸†Ù®¯¯ 4]Ò­[·ºººNW^¿~}PPP||<5bK.—÷éÓ'%%…Ñ ¯¬l—••õíÛ×ÛÛÛ %„BaDDDII‰Å5Ñ®áÐmH[·n=wîÜÁƒëêêêêêÀ࢘ à3fdffš.ÉÌÌœ9sf§+÷ïßÿ—_~1]RTTÔ¯_?ëþ²&€•Jå™3gÐ}âê CaaaQQ‘ùÕÀÀ5ÌðÒ¥KÏž=›––V_____ÿþûï,Y²Ä¸‚iÓ~ÕªUÏ>ûìÑ£Gïß¿___èСgŸ}võêÕŒV|e1€U*UBBB}}}rr²J¥rZa@/•JõÄO477'$$˜ÿ="€k˜ `Ÿììl¥R¢R©²²²ºqºbÅŠ­[·¦¥¥ 0`àÀ›7oÞ¾}ûË/¿Ìh…ÀWç‚V(mmmA¨Õj…Bᬺ€f …‚º¹ÈâïsA×0;‹ ˆÐÐЃvõ¿ízÿæÎ;wî\¦Kw`±,—Ë…B¡^¯—H$r¹Üi…½är¹D"ÑétÀüï-`àÆ€X&“Í™3çÁƒëׯo7ú\ˆL&ËÎÎþàƒôz½ùß#¸†C÷ÐÈšAXõõõË–-‹‰‰qNIÀØØØ+Vܽ{×üj`à0ð“5|ùòå¡C‡:§`ÔСC»šãÖ \ƒ~²8tssóíÛ·CCCU0ˆšíÇ|#sA× €Ÿ,¶€KKK, V0*""âòåËfV@ ¸ üd1€ÑÿÌ3C‡EƒkA?Y à+W® €ùdèСW®\1³¸ ü„°»A \ø ìnÀàrÀÀOæX«Õ^¿~=,,Ì™%£BBBîÞ½ÛØØØÕ `à0ð“ù¾víZpp°T*ufIÀ(@VVVÖÕ `à0ð“ù‡1 ÿ™—Ì÷Bãa À5`à'ó-àË—/2Ä™õ€ 2ÄL£ \ƒ~²Àhóù0¸ ü„vC`p-`à'ósA—––FDD8³p‚ððð7nt•²˜ ¸ üd¦\SSãííàä’€i‰¤oß¾þ/ZÀÀ5`à'3Œþg33!%¸ ü„vOf.#€kÀÀO`÷„‚~B»'0¸0ðØ= 2äÊ•+ƒ¡ã!€kÀÀO]MEyÿþý–––   ç—Nàëëëçç÷ûï¿wü/LE \ƒ~êª|éÒ%4ù­« )Ñ®A?uÀèæ½®.#€kÀÀO`·…W~ê*€¯\¹‚æ·®æâ@× €Ÿºš -`Þ3ÓÆ\ÐÀ)`à§N[À­­­·nÝ e£"p’Þ½{k4š{÷îµ[Ž0p ø©Ó.--~üx»ßµH$ÒjµlÐx¨Ó!ÐAAA½zõBó×<òÈ#ƒ ò÷÷o·½ÐÀ)`à¡®îA g¥p¾ðððÒÒÒv ÀÀ)`à¡®8""‚•zÀù"""ÀÀq`à¡Nç¡,++C Ø}„‡‡—••µ[ˆÙ(SÀÀChZÀÀ}`à¡N-`·‚kÀÀ}`ࡎÜÒÒòÇ„„„°U8Y¯^½ôz}»G2 €SÀÀCøêÕ«ÄcÜJÇF08 <Ô1€ËÊÊpØÝDDD´‡…NAu `Üì†ÐŽCi4‰Dbº-`7Ô±,‘HÀÀ`à!´€@ 8ñ®ªªš3gޝ¯¯¯¯ïœ9sª««Í¬¬×ëwîÜ)•J£¢¢¾ýö[¦Ë^êtZÀî&<<üÚµk:θ œÂl766&&&FGGWVVVVVFGG'%%577wµþòåË‹‹‹9òàÁƒ½{÷îÝ»—Ñò€¯ÚðíÛ· ‚èÞ½;{ <=={ôèQYYi\‚Na6€322ÆŽ›’’’’»gÏžNWÎÉÉ©©©ÉÈÈ4hD"=zô?þÈhyÀWí€ÝV»ËÀ`àføèÑ£ÉÉɦKŽæ¶ IDAT’““>ÜéÊŸ}öÙŠ+­ÜD»¹ qØmµ» Œ¹ S˜ à’’’#F˜.>|ø¥K—:]ùçŸnll”Ëå^^^>>>“&MÊÏÏg´<૎-`°{j÷H´€S˜ àúúúÀÀ@Ó%ݺu«««ëtåÚÚÚeË–=÷Üs•••×®]{úé§gÍšuæÌF+^jÀx ƒÛj÷H0p ‡nCÒëõÛ¶m[¼xq=zôèñüóÏðÁo¿ý¶5Û’IMMe¸dà(\ ®ƒõRSS;æŽÈl´kïÞ»w¯]›Ø¨[·n3fÌ0]òØcYs CgÀnË4€u:Ý7ÌnIÀŠþýûß»w¯±±‘z‰3RSS;æŽÈlGFF^¸pÁtIqqñ°aúZ™ÑbÀ}˜ðõë×{õê%•JÙ- X!X^^N½D§0À3fÌÈÌÌ4]’™™9sæÌNW~üñÇÛÝwôÃ?ÄÄÄ0Xð”iã°›3½ ŒNaöélK—.1bDZZÚK/½DÄîÝ» >ýôSã $Iø/¼ðBRRAÓ¦M#â‡~xã78Àh…ÀK¦sAã°›3½ Œ¹ S˜mûøødgg+•Ê•J•••åííÝéÊR©ô_ÿú׉'ÂÃÃûöíûÙgŸ}ûí· ŒV¼Ô®Œ{Ü™é­Àh§0þ|òÐÐЃvõ¿í®oíÛ·é’€÷4ñ¢oYYÙ“O>Én=À¢ˆˆˆ]»vQÿ‹ÅMMMìÖ`Ä¡Ûè‚0á0pxÈÀ ÷ïßïÛ·/Ûk$Imm-ŽA¸¬¬,,,L ÀyîÖŒ`0p >˜€‡ŒcÀh LBãa À)`à!c €00p xÈ´  Æg"!€SÀÀCT+•ÊÓ§OkµZ¶Ë–i4š‚‚‚¢¢"0p xH£ÑTUU%$$ÔÔÔ¬X±B¥R±]°F¥R=ÿüówîÜILL¬ªªBw €‡4ÍåË—©á6F¡P°]°F¡PPg‚Z­¾rå ¸ <¤ÑhFŽ) I’”H$r¹œíŠ€5r¹\"‘$) Gމî@i4š¨¨¨U«VÅÆÆæääÈd2¶+ÖÈd²ììì &,[¶,22 Ü¢a©Õê9sæà‰–;þü–– ÂNAQŒ›€Áˆš  œ‚¢7ƒu+08 <¤ÑhH’¬®®8p Ûµ'ôíÛ·¡¡A­V#€;ÀÀCjµº¶¶¶oß¾lל@’äàÁƒkjj04pxH£ÑTWW£ÿL…‡‡WWW£ Ü¢fÂÂsÀTxx8fÂNAi4š7n„……±]pHxxø7ÀÀ`à!FsíÚ5´€ÁTDDÄõë×ÀÀ"¶  À¸ ¦"""***„B!Û…ü0ðF£Ñét}úôa»à???OOÏÆÆF¶ ø?è‚R«Õaaa$I²]pKxx8º ;ÀÀ7ƒA¯×ã0t4dÈNg0Ø.€ ÀÀ?Z­–$I\†Ž¨~NÇv!þQ«Õ`èTDDI’˜ 8 |C]äC4tn0p8 |£V«õz=fဎl0š››Ù.€ ÀÀ?¿ÿþ;I’þþþlœ#‘HÁµkר.€ ÀÀ?Ôc_Ù®8J,—––²]A €®^½Š§BW<<<ÊËËÙ®€ ÀÀ?×®]“J¥lW%•J+**Ø®€ ÀÀ?^^^lWåååuýúu¶« 0ðOee¥··7ÛUGy{{#€#ÀÀ+¦¶¶ö¡‡b»à(oo簾¦°]ø¥¢¢¢G‰„íB€£ÄbqŸ>}®^½Êv!`à—²²²¾}ûâ6$èŠX,îÛ·oYYÛ…àyÀÀ/eeeÁÁÁ˜êº"‹»uë†[ Ð^)++ëÝ»7ZÀбX„.hà0ðJiii¯^½ÀбXܳgO´€ ÀÀ+eee={öDCW¨.++3 l×î üÑÐÐÐÐÐðÐC!€¡+b±X"‘H¥ÒÚÚZ¶kw‡þ(-- ×jµ`èŠX,Öh4è…Ö!€'”JåŽ;ºwï®ÑhÀÐ*€wíÚUTTÄv9àÖpðJ¥JHHhii …£FÂDЉDRQQñÓO?iµÚcÇŽåææÊd2¶‹7…0ðB¡P«Õz½Þ`0”––¢ ]‹ÅW®\Ñëõz½^­V+ ¶+÷…>Ë剄$I±X‚†®ˆÅâÐÐPê ‘H$r¹œíŠÀ}1ÀUUUsæÌñõõõõõ3gNuuµ5[ÕÖÖ†……‘$ÉtyÀ2™,++K"‘;v ÷ƒb±¸W¯^§N‹ÅÇGÿ3°ˆÙnllLLLŒŽŽ®¬¬¬¬¬ŒŽŽNJJ²8M Á`xöÙgßyçFkžéÝ»wÏž=år9aÔ ¬qãÆ 4( €írÀ­1ÀcÇŽMII HII‰Ý³gù­vìØÑ«W¯ 0ZðÌ•+W"""‚@ƒT1dÈ+W®°]¸5føèÑ£ÉÉɦK’““>lf“_ý5##c×®]ŒüSZZ:dÈ‚ Ôj5º"‹Õj5A``³\RR2bÄÓ%Ç¿téRWë·´´$''ÿãÿðñña´0àŸÒÒR´€Á"c sqë˜ àúúúÀÀ@Ó%ݺu«««ëjýW_}uîܹcÇŽe´*à¥+W®P-`0˜aÚvqè6¤Ã‡—””¬[·ÎŽmÉΤ¦¦Ò]#p¬a à¡C‡^¾|™ír€CRSS;æŽÈl´kïÞ»w¯]›Øèµ×^ûꫯ„B¡2tì>}ú`0ËÀþþþžžž·nÝb»"àŠÔÔÔN£„¹#2À‘‘‘.\0]R\\€1!%8 \ „0p\‰F£¹~ýzxx¸™À`žù ­¯¯ÿóÏ?Y¸'0¸’+W®„††zxxtµæ‚‹ºš šB’ä!C.]ºäÌ’À=!€Á•˜™„’‚0Xd¾L`>,p0¸ó€ 0XÁbã208ã\UU5gÎ_____ß9sæTWWwµæéÓ§Ÿzê©=zøùù;öСCL×.ÇÌs(`°ÈšÆ@hpf¸±±1111::º²²²²²2:::))©¹¹¹Ó•årù;w:tëÖ­;w¦¦¦îÙ³‡ÑòÀå  ‡.hàf8##cìØ±))))))±±±]Åê믿ž••5~üx//¯˜˜˜ÌÌÌÍ›73Z¸–ÖÖÖšššÁƒ›Yc‹Ì<ŒÒ·oß–––{÷î9­$pOÌðÑ£G“““M—$''>|¸Ó•·nÝJ’¤ñåàÁƒÍôWƒ»Q*•ëÖ­ ‰DfVC ,²Ø&¢ÿþ6l(**rNIàžÌ}–9®¤¤dĈ¦K†nåøþcÇŽ™ïl÷¡R©Z[[I’T©T2™¬«5À`‘ÅV©T—/_.))ùòË/sssÍœoŽ`¶\__hº¤[·nuuu7¬««KIIIOOg¬4p% …B­Vët:ƒÁ P(̬‰‹,°B¡Ðëõ:N­V›?ßÁÅÛþøãÇüã?Ž‹‹c»à¹\.‘HH’‹År¹ÜÌš`°ÈbËår±XL’¤D"1¾8‚Ùh×Þ½wï^»6q;555S¦LY¿~}BB‚õ";“ššj_ÙÀ52™,++ËÓÓóàÁƒæûÀ`‘Å–Éd?ýô“H$:yò$úŸÝGjjj§QÂÜ™ àÈÈÈ .˜.)..6lXWëß¼yóÑGýðÓ’’l:¡3`>éÕ«W@@ÀÔ©Sͯ†‹¬„%—Ëèãã㜒€ RSS;æŽÈlϘ1#33ÓtIffæÌ™3;]ùöíÛS§Nݼysbb"£U+:wî\tt´ÅÕ04Xd~.h£èèèsçÎ9¡p[ÌðÒ¥KÏž=›––V_____ÿþûï,Y²Ä¸‚ië~êÔ©ëÖ­›6m£%‹:þ¼•Œ0˜gM ˜ ˆQ£F?Þ õ€Ûb6€}||²³³•JeHHHHHˆJ¥ÊÊÊòööîtåóçÏ/X° ]çûýû÷­\ŹsçFeq50Xde£ Lcö>`‚ BCC<ØÕÿšv¯3ÚÕ®Îú.h0˜g}ÿúë¯z½^ àâÝ"À8±ÀܼyS£Ñôë×Ïâš`°ÈÊ ,//wBIàžÀàΟ??zôhkÖÄ\Ð`‘Ź ¢££q˜ƒ`eÿ30XÁÊ0qXÀ00¸€óçÏ[3‹@ƒ¬`ŒÃF!€ÁXÙÖëõƒA(:¡$p]"‘H¯×ëõz‹kŽ= ÌA×ÕÕÕÕ××8Ðâšhþ‚•D"‘V«µ¸Z¯^½$Iee¥J7„®£î¶æV0Xɦ^h\† €ël…y(ÁVÎFI €I`à:ŒÀÚÙ4—!`à:܃´Ã@hà0pZcccMMMDD„5+#€ÁJÖpHHˆZ­®­­eº$pC`à´sçÎ=üðÃ"‘U“–#€ÁJÖ0A#GŽD#˜€N³ò)„ÌC V²~6Jã°€1`à4ëG`hƒÕljcBJ`8ÍúX¬fSc0 ÜÕÚÚZQQiåú`°’MVWWWWWÇhIà†ÀÀ].\ˆˆˆððð°r}0Xɦ&Irøðáè…Ú!€»lê&À`5›˜@/40 ¥T*÷îÝhý&`°’­ìïï¿ÿþ¢¢"æJ7„.R©T EEE;wîT©TVn…¹ ÁJÖÏM„J¥úàƒ~ýõ×ÄÄDëÏF‹ÀÀE …B­V N§P(¬Ü -`°’M-`…B¡Õj ƒZ­¶þl° \$—Ë…B!I’‰D.—[¹¬dSËår‰DB’¤P(´þl° \$“É/^Ÿ““#“É¬Ü  V²)€e2Yvvö¤I“æÏŸoýÙ`8êúõë«V­Š‰‰±~0XÉÖAX±±±kÖ¬)//g®$pC`à"NWPP0nÜ8›¶Â\Ð`%›æ‚¦<òÈ#¿þúkkk+C%BõìÙÓ¦­Ð+ÙÚ&ÂÛÛ{èСJ¥’¡’À !€‹òòò&L˜`ëV`°’LÄ„ òòò˜¨Ü¸(///..ÎÖ­À`%û8.. 4Båçç#€9vðÏ?ÿ¬Óé˜( Ü8çêÕ« 44ÔÖ À`%û¸{÷îAAAÅÅÅL”n œsæÌ™øøx;6Dƒ•ì `‚ âââΜ9C{=àžÀÀ9ö]&À`5G—.`àGckØô0S` ¸¥¶¶¶®®nذavl‹0XÉîphh¨X,Æ”X@ 0pK^^Þøñã{ÎL0XÉî&p70Ð Übwÿ3«9Àè…º €[Àà`à0pȃÊËË£££íÛc+Ùñ0£ÈÈÈúúú›7oÒ[¸!°KR*•Û·o/**êô¥ëÊÏω‰±{$3ZÀ`%GZÀ$IŽ7.??ŸÞ’œ¯#.DÄv`3•J• V«%É÷ßóæÍ—^z‰ºç§Ÿ~’ËåA(•ÊÓ§OÇÅÅÅÆÆ²]¯ Μ9cÇ3ŒÀ`%G˜øo/ôܹsi,‰ií>NŸ>=eʪÓh×®]ÁÁÁsçÎ¥>Ursse2Ûõº°ëùá‡Z[[u:F£yòÉ'5^¯okk›2eÊèÑ£‡ öõ×_kµZ—û[ÊËË{ûí·íÞ Vr<€_zé%ëašñ[»P(LNN¾|ùrQQ‘Z­6 æÝwß­««kjj"B¯×9rÄ…>4\Ø¿ºz{{ïØ±ãÀ€$Iœœ‚ &NœH}u=qâDKKKZZZkk«Á`0 …ÂUþ–òóó‹ŠŠIP0XÉÁÖëõ—/_ÎÎÎNLL¤±*æ(ж¶6­V«ÕjËÊÊRRR¼½½§NJ}nüë_ÿ"B.—«Õj’$?úè£7n¼úê«Æ;Ò\ˆË0õ|좢"¾ž"ÔW×¶¶6ƒÁ°jÕªk×®UTTäååÅÇÇSášM½Œ‰‰!ÂÏÏoâĉT+9??éÒ¥¾¾¾lÿ¨TªÉ“'«Õê3fØÝjGƒ• `•Jõ—¿üE­VOŸ>=//û_p›ššT*•N§ …R©tëÖ­í>7¨—999ÔËðððO?ýtÊ”)÷îÝ#B*•ºVGšMÚõÌ;ùâk0NA$&&òõÉÊÊjiiÑëõB¡ðõ×_óÍ7 ‚èÖ­›éùkúR&“QZ£Gþæ›o~øá×_]­Vsù›¬B¡ :ÄÔjµÝ­v0XÉ‘¦å\u*K¼½½·nÝ:~üø'N\¸pÁ·D‡Ï Ó—kÖ¬!"%%E«Õ¶´´œ:uг?¦#LÇÓäææêõzꥇ‡‡sŵ˜úK ¢­­z¿\tðQ;¦}Οþ9I’"‘ÈÃÃ#))ÉÊ=ÿ–&Nœ¸{÷î+V$)•J9ûy!—Ë ƒH$’H$Ô82;`.h°’ÝsA!—Ë%‰Á`ÐétvŸ«L£¢¥¥¥Å`0lß¾}õêÕALš4Éú=$&&zxxPÿþì³Ï¦L™¢Õjùôé›››kì™ôÑGïß¿¯Õj ‚ IÒ9•®ÀÔ_5iëÖ­¿ýöÛwß}犃L¿”‘$I}{}øá‡M{ŠlÕÒÒ"‰4MKKKVV7ß–ÀÀÀ€€€¿ýíor¹Üî Ñ+9Ò6ö0¥§§sö _vv6Õs&‹õz½{0þ˜ñññW¯^MJJjjj2 üøt‰DO?ýô?þ¨×ëD"ùä“O‚‚‚¨‹ Ž4lâÚL"cÆŒ)((ðööþë_ÿÚÒÒB„Á`pÝS„jÖk4’$—-[ö /áÈWNêk AƒáÈ‘#«V­2~±åŽC‡Í™3çõ×_wd'`°’ƒƒ°¨¦[·nãO¡T*½½½…B¡@ ˆŒŒÌÏÏg·0û|÷Ýw@ x{{+•JZöYXX¸mÛ¶ŸþyÞ¼yÓ§O7Ž‘æŽ¸¸¸üÑÁ 4¨¼¼œ–z€ß®^½:xð`w’——7räHZê¡‘F£™;wîŒ3Μ9³mÛ¶¢¢"ZvK}ºR÷_|ýõ×´ìÓÉ”Jå¨Q£P(´éÓ•¹ $©½sDUUÕêÕ«Ož¼víÚ1cÆäççÛôéj14c(ØíÐÐÐ0hР÷Þ{¯®®®®®î½÷Þ £®:˜×ÕOÑÔÔ´lÙ2’$émMÒ®¨¨hÛ¶m………éééÁÁÁgÏžeôpjµ:11Q$‰Åb޼-óçÏw|?½{÷¾yó¦ãûÞ«©© r|?K—.ݱc‡ãûqÕB%IR(2Ýù÷Ë/¿ôë×/--êZ+,,dôpv3mµ/^¼¸¡¡Á¾ý0”š :##cìØ±))))))±±±{öì±{‡^^^aaa"‘H¯×777ïß¿ŸÆjéB X»víøñãwíÚõóÏ??òÈ#ŒQ,O™2E¯×k4ê> FgC‡Íž=Ûñýà0XÉÁkÀF³gÏ>xð ãûqœB¡ Æ< ‚Ÿþ™ÑcEGG~ýõ×ãÇ_»vmbb¢J¥bôˆöùî»ïš››õz½H$ŠŒŒ|衇خ¨=ðÑ£G“““M—$''>|Ø‘}R㨑_~ùå¦M› 95á¸qÈ•^¯î¹çœÓ}š˜˜(•JI’$I’õû(òòò¦M›æø®À`%º8))©¸¸øÎ;ŽïÊAuuuA88êÊzAAA .äÔ÷x õH‰‚‚‚ôôô={öˆÅb§½'v¦¦¦²]ÃÿY³fÍÆM¿¤x{{¿÷Þ{æGÆ*•ÊŒŒŒiÓ¦õéÓ‡zùÏþS$Q/ƒƒƒƒƒƒ5Ío¼ñ êšMäIDATᇦ¥¥¥¦¦žMMMwïÞ:ujXX‹o‚R©¼ÿþâÅ‹ÍïÁšRÓ÷„„„ØpÚ[***úüóϧL™bßùl|rþüy­V«ÓéXüùùçŸß|óÍ·ÞzËÃÃãµ×^£¾Î2ýG-•J¿úê+N§×ë—,Yi÷ÛHWI*•J.—ÿôÓO_|ñEMMÍÉ“'GŒ¡ÑhŒï‰%±qãF¦‚’¡®m;POè4]BÝefª‹Ÿ êZ&õÒôÒf»%¯¼òŠñå•W:®`qô®‘‘Ñ­[7‰D" ===pÄv+H¥Ònݺ>|˜Å7aÊ”)Ÿ}ö™ù=X¹Cã™@ÿÙ }>úè#Çÿ‚l]ÁÓÓS(J$’ÀÀÀ]»v9ò6ÒR’é'üÊ•+üÍOæ‚ÒµxÛ¶mèrSb±øÉ'Ÿ4ž!555GŽ1¾üôÓOÿ>räHMMM§ÿeúoì{ÀçØÊÀ pÏž=kkkM—ܺu«wïÞf6±ã›,õ•ÍÓÓó¹çž NOO7.qÎW×ÌÌLã/uÓ¦MN8¢Åf̘! ù&_J¥RêNJ[¿™ZùÕ #Ï®Žë?òÈ#NnS\B¡0))I¯×Óþdë [·n5~²effÚñ6Úý&xzzîÞ½»_¿~óçÏ—J¥v”uõ1âœpüøqÓ%ÇOLL4¿Uaa!Aƛͩañ¦÷ž·[bú2777((H$ c°M{°c…wÞy‡$I‚ D"ѶmÛœpD‹+äççS#õö&_>ñÄÛ·o·fv +ž]í^Rƒœù7Keu¥B¡°£fÚWضm›H$"‚$É 68¡$êM"‘¨G?ýô“ã‡èôcÄ-xûöíÏ<óŒé’gžy&==Ý↎¼;ï¾û®@ 0CF={6((ˆ˜Ç¶š±GÎ9o‚‘N§ëÝ»wEE…ÓŽÀ„[·nRÏ uã߬X,væß¬Ææ£D"éÑ£5£Œo‚@ ظq#sb.€94ôÒ¥KGŒ‘––öÒK/±{÷î‚‚‚O?ý”уN:uóæÍL?:W©T*Š[·níß¿?##£GNnÔêf-½^¯ÓéFŒᜃ*•ÊÌÌLŽÌ"`·Þ½{÷íÛ÷¯ýë /¼àœ©åbbb¨çûrçÓ‡7455-\¸páÂ…?þø™3g˜˜q¯¥¥åâÅ‹Z­–zÈ1-÷1:·¦¢¼qãÆêÕ«³²²‚HJJJOO·æ–ç £æW5jÔ7ß|sòäÉU«VéõzÏjd|KK I’‡ž1c-»¥õ&\¸p¡¾¾þÈ‘#T'9sT*Õĉ[ZZ„BáÙ³g9òEÀ>*•jüøñZ­ÖÓÓÓ9Y°`F£yä‘G˜˜°–·nÝš9sæùóçI’¤ññºJ¥òôéÓ;vìxä‘G’““/^¼Èô›àSQÚÆŸâã?¦®†zyyÑÒ?¬V«gÍšE½ÕÜé,êŠZ­3fŒ¦Öã`€Ýœ|>ïÙ³gøðáÔ¼W\öÁ…B‚ „BáæÍ›ß¡R©ôòò¢>¢?úè#Çwh%æ‚’C]Ð\ÐÔÔ$ 5MssóŠ+¾ùæ›*MàlÍNŒëß¼ysÍš5Ý»w÷ôô¤žȒ΢®ˆÅâýû÷;6..nôèÑÌH.—SEÜO,¢.âhµZ@Àôù|éÒ¥µk×* ÚŸµ@»„„©TÚÖÖFÄG}:`Àêa9¶~–ÆÆÆVUU­Zµª¹¹™ o"3ö1ìÎDãOaGàååµdÉ’îÝ»OŸ>ÝËËËü˜)ãÓŒ{‰DB¡pðàÁÔ¸n× {àÀ~ýú½÷Þ{Ìͱ®×ëÖ,Yâ*ï €y………/¿ür¿~ý´Z-C‡(**Ú´iÓ Aƒ¾øâ †A;ãG_nnîСC©ËÆÏRÓOÎŽŒŸÆžžž³gÏîÖ­Û³Ï>kñÓ˜ Ì%¸=Ó°¼ÿþÔ©S©o*B¡ðµ×^ÓëõíNÓ[Ç>ùä¹\N]@ …|ð…9R©‹Å$I2w–ÿç?ÿ1b„^¯gbçl?~ü·ß~ËÄž•ÿ}°5{+‡`ÚÖ­[÷)M˜0¡ãÌY†ÿ$¿ñÆT6A“'O¾wïž¥Æ ØFÛñÔU¡P(‹ûõëHµn=<<Ö­[·sçÎéÓ§Ï’~ýú-[¶ÌÓÓ“SwÙÊxAK(2tA+>>þ›o¾abÏ,:zôè¨Q£˜Ø³ñ.[×6aÚ¢]¾|¹ñÁ3B¡púôéÿûß×­[çáá! E"Q·nÝ‚ƒƒ©[Ö?K™‹= ‰›d2YNNΖ-[òó󫪪–/_N„N§Óh4ÙÙÙeeeÝ»wB¡ÐËËëßÿþ÷'Ÿ|’››»iÓ¦œœÜK]ТãØ³gOÚ÷ŸŸŸ_SS3oÞ<Ú÷ À®éÓ§kµÚãÇÓ¾ç~ýúét:‘HäºÃ&¨û”6mÚ¤P(víÚõý÷ßSm@н{÷òòòììlF£Óé òeËjjjòóó·lÙ⺟¥që6$û08F¼êþj’jãÀzêÎÞ`ê'"bçÎJ¥²G4îü±Ç›>}ú‹/¾Hã>8bß¾}_|ñEvv6ûlhh3fÌ“O>éççÇ¿ÏãOÔé§+01`›ñ/nÍX»vmQQщ'ŒÝìº|ùrRRREE…§§'-;àN‘™™9nÜ8Zvh0æÎ´sçNZvÈeÜütE›ãäv+z½~Ú´iÑÑÑiii´ìpÑ¢EQQQo¾ù&-{à ]»v:uêàÁƒ´ìíý÷ßÿᇠ…D"¡e‡`+°9`FÕÕÕÅÄÄ,]ºT,;8AXuuõ¨Q£ÊËËýýýi¬€SZ[[ tâĉÈÈH»wBÝ+•JÓÒÒŠŠŠLŸNÆ\Ä`"° 00ðÝwß]¸p!5öÛîk3J¥rõêÕ3fÌ@ú¿I¥ÒY³f=÷Üs»ví²ï «J¥JHHhkkÓétŸ|ò Ò—¯0 ,»uë–@ ÐjµjµZ¡PرjxE~~þT*íp‡J¥ÊÌ̤BÔ¾³]¡P¨Õjjj­††Ú+Ž@ƒer¹\*• NeDz²²ZZZ‚Ðh4öE8€« â“ ˆ–––“'OÚ±‡‘#Gêt:@ •J]ô¦#°®žâ°P£+++?žmSŸ˜^¯Ÿ2eJnn.5ù3§n0 ñv‚ bbb 5‡†•îܹ3iÒ¤áÇ9’kãÝa™ƒv¦mÛ¶íÞ½;;;;44ÔÊMV¯^ý믿¾ûî»………ø@w@}a0a–-[¼½½333­|ÄçíÛ·'Mš4mÚ´Í›73]$X lØÉ>þøãwß}÷¹çž›={¶Å1&[¶lÙ·o_^^Æ^jii™4iRRRÒ;ï¼c~M¥RùŸÿügß¾}‹-Ú°aƒsÊk €ÍA;õøqµZíééyúôéNû“©›(¿üòËüüüàà`ç× ÀwïÞ?~üO<ѽ{÷®näS©Tñññ­­­b±8??×h8·!‡( êtliiyæ™gvïÞ””dúäNjügkk«^¯ÿöÛo‘¾àκwï¾uëÖÙ³gSƒª¨1¦/yyyË–-£F) …Bv`°õ´‚ $É‚ V®\IĵkרÉâ—.]zòäɦ¦&‚ D"QUUËå°íêÕ«"‘H£Ñ455-Z´())é‹/¾ÐjµB¡0""¢©©iÞ¼yUUUÔ4Èöì>pØÌøT“œœœÔÔÔ‹/Ž3¦­­M£Ñ´¶¶ž;wnñâÅÔs³=<<ði@}g‹Å^^^K–,)..nmmÕh4mmmÇ/--}ÿý÷Shþº>\=Å5`ÖQ÷]´µµ§Êâæ¤êl1ý‹èø÷Âvu`a™ƒæ$.€õð÷âBÀæ €€!ÌE ®° À0 À,@° À0 À,@° À0 À,@° À0 À,@° À0 À,@° À0 À,@;Ijj*Û%X€ i"i iÁý"¹_!£HƒÁÀ說ªV¯^}òäI‚ &OžœžžÞ¯_¿N×<}úô®]»²³³ÕjõСCÿö·¿Íž=ÛšC$ã?…ã¸_$*¤Ф*¤÷‹ä~…“E2ÛnllLLLŒŽŽ®¬¬¬¬¬ŒŽŽNJJjnnîte¹\~çÎC‡ݺukçΩ©©{öìa´<¶0ûícÇŽ¿üò˾}ûŒK.\»råÊŽ+¿ñÆ|ðI’ÔËâââ'žx¢¼¼ÜâQÜü;]P!-P$-P!-¸_$÷+$\·|ôèÑäädÓ%ÉÉɇîtå­[·Ó— ˆÁƒWWW3Z[˜ à’’’#F˜.>|ø¥K—¬ÙöرcQQQÌÔÀ2f›ÿ‰¤©©I,—h4š‡z¨­­Íü†uuuãÆËÈȈ‹‹³x7ïÄ  *¤Ф*¤÷‹ä~…£E˜$‹ÕjµéµZ-‘HÌoU[[ŸmåQy_‚`,(E4–hz—ÊÅ€€€ººº^½z—ß»w/00ÐÌNjjj¦OŸ¾}ûö„„+‹ —Cç5àŽ­ÒÈÈÈ .˜®S\\À?x À,@° À0 À,àCWUUÍ™3Ç×××××wΜ9\xŠð¹sç–/_îïïßéÍÍ\(øôéÓO=õT=üüüÆŽ{èÐ!®YPP°dÉ’H$’àààI“&}ÿý÷œª°ÚÚÚ°°°v¿q.IvÀµ ‚Ðëõ;wŒ”J¥QQQß~û-§Šìø’$)‘H¸S!A:n×®]£Gö÷÷÷óó‹ŽŽÞµk—N§ãT‘'Ož7nœ§§g``à¢E‹þøãÓÿe«BG>±©Ù帱±1111::º²²²²²2:::))©¹¹™Ýª-ZÔ³gÏüüüŽÿÅ‘‚årù;w:tëÖ­;w¦¦¦îÙ³‡SE®\¹rÔ¨Q?ýôSccão¿ý¶fÍš÷Þ{oÆ ܩДÁ`xöÙgßyçÓ…Ü)²«ˆq§ÂåË—9räÁƒ{÷îýÿÚ;¿¦Þ0Žïš--­•mj»h(Åd.qµ™ý!‘­? ¯Âð./ºì¢RA¹¢2ºp6S´IhG]’"˜èMÙ*ÿÍ3Ô¦pLOïÃÛ™®Ÿ¿Qç<Ÿ«çý¾‚ÎËÞg;ïÆñz½ $#Ÿcãv»OŸ> ÇP¡PTTTqMòÛ·oÝÝݹ¹¹/^$ ÃùùùÝ»w÷öö’!½â@$ ÅÖ­[´Zí™3gÞ½{Í0==½¹¹Ùjµ*•Ê7ôôô@“¤±Ùl âˆá¥K—Ìf³ßï‡Ãáp¸»»;''çêÕ«p$WlÀ¢õîØ1:Ç}NLLäyžNxž§?ÌÉKäržžžÞµk—ßï8’ôqIaaá? –——_¹rEÒ+D²¸¸Øï÷/,,sAF388Ê0))‰aÇÃqÇq555 ü~ý”¤Èðð°N§[\\ †Ëˡƒ~É8ñ¤ ‚d~~¾×ë¥Ç#:@0\뎣36à? ü ­V+˲tMrjjª¾¾~ûöí—/_& ÃÖÖÖüü|ñm²K¨®®>rä©&&&F Ÿ/55Õëõ†B¡P(T[[Ë0Ìúõëáb^îZDø-è±±±={ö¼zõJ’ƒ’aYV§Ó‘ˆ¡Á`øüù3¼-! &''“ˆ¡V«¼3¹aÃR‘$„B¡”””ééi:b˜‘‘ÑÙÙI'™™™¤"ÙÕÕe³Ù’““•Je^^^cc#(ÿ| :=44D'ÃÃÃYYYrùü8ÂÇŽ«ªª*((LÁ‘¤1™LÇ‘ˆáÈÈHFF†ä'¶bDR‚@ÝØb˜}‚$áÑ£G§NJII¡C †ããã&“‰NL&Óøø8©H8p€eÙ¹¹¹ùùùžžžM›6Y,P†¢[Åè÷ ¸¨¨¨®®ŽNêêꊋ‹åòù-@„9Ž;zôè7ìv{ä,I oÞ¼1¤bå4I MMMyyy¤bèt:ÛÛÛ餭­-''‡Ô@$ ÅâââÇÏŸ?/Éêõú:éïï×ét¤")¡ººº¬¬ŒÔ0 £[Åêü?)ƒ%gffVVV’ck×® †¹¹9¹½þ%ò Þ»wïÓ§OW›… yøðáÖÖÖ©©)žçÇÆÆ<OZZZ{{;áW‚¤ÝnöìÙää$ÏóŸ>}ª¬¬LMM€c(ÂÂÂÂþýû%Gƒâ÷€H ‚P___XX™1¼wï^zzú‹/fggÉðŽ;îß¿Jòøñãoß¾åy~ddäܹsåååâõîØ1:Ç}!8•J¥R©‡äLN¢¿× ¼¢áìì,I–eOœ8Á0LBB¶mÛNž<Ù××Gÿì†+"yË.éóùœN'¹Œiii¥¥¥ïß¿eH˜˜˜p¹\›7oNJJ²X,’ï%‘4›Ímmm+N1ljjÊÍÍU«ÕjµÚl6766B“lhhÈÊÊZ·nÑh¼sçÎÒÒÃXvìXœÿYí#‚ òçˆû3`A‰G°#‚ ˆ `FAÀŒ ‚ 2€ AAd0‚ ‚È6`A‘lÀ‚ "Ø€AD°#‚ ˆ `FAÀŒ ‚ 2ðòóî>ì®kˆIEND®B`‚gsl/doc/images/rand-weibull.png0000644000175000017500000005065513536674414015052 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìÝy\Myü?ð{µ—H)ÊVTÒbi£M”¥eP2# ƾ Æc›±„ìû„4²ÄPŒ$‰­ÒžR**•öÛýýqßû½ß$-÷žÏ]^Ï?æq?çž{>ïîÌôêó9ŸsÉdÒ€ZÝH ŠÀ €@€  @€0`À €@€  @€0`À €@€  Ðyššš œ³²²ètzjj*çÆúúz•’’’¶H§Ó[¼è„ï„þ?¤¤¤úôécmm½cÇŽ‚‚‚VÒu\ù¡Ú8,€€Btž„„„­­mPPçÆ§OŸÊÊÊFDDpn¼wïž©©©ŠŠ µ~“Éd2™555oÞ¼Ù³gOUUÕ¨Q£:t*#q ‡Îd2I× Àž­ÎvìXW¾(nAt NŸ6mÚÍ›7YÍ¢¢¢îÝ»«©©õîÝ;77—µñúõëS¦L‘‘‘a5ß¾};cƌիW—””\¿~}÷îÝ?þúÈžžžºººÉÉÉYYYvvv¶¶¶ÙÙÙ<ýYœŸþœ““³råJÆ2ÿ{ÿ¥K—š››gdd´:`íÜõ­¾X^¼xñóÏ?¯X±"777''gÙ²eîîî¯^½bï°dÉ’ÚÚÚ²²²³gÏz{{ÿóÏ?íýRx‡ ]gkkËzíïï¿råJ&“ùÛo¿ùúú²6ZXX„††²÷www?pà»èààÀzÍþ_’F£íܹ“³—;v¸»»·ØçgÛØ­íµµµ222-öéÞ½ûçÏŸÛyvèС6 ëúõõ[NNNÇç|ËÇÇgúôéìݶnÝÊùîýû÷GÝêO@%0èéé½ÿžÉd.]ºôÖ­[L&óÎ;žžžL&3;;{À€ ƒ½ó!CÒÓÓÙͲ²²~ýú±^sæMVVg™™™ªªª-vãÔõþò勬¬l‹}LMMùå—‚‚‚ö‡F£åää´QXר¯ß8pà»wï8ßÊËË4hз:-++ëÕ«××}P SÐ\àêêêïïO£Ñž={feeE£Ñ,--###i4ÚÕ«WgϞݭÛÿþ¿–ŸŸ¯­­Í>£©¨¨XTTôõ1ÕÔÔZ4KKK¿U@sss׊ÜÜÜÒh4ÿÒÒRMMÍaÆ͟?ÿÎ;Ì6CõëׯwyñC·X^Þ§OŸ>°›êêêœïöêÕ«¼¼¼=Gà)0Ìž=ÛÏϯ¼¼œÁ`ôîÝ›F£)**Š‹‹—””\½zuΜ9œ;÷èÑ£°°óaƒñõ1 [4•••Y¯***8ßÍÉÉéúO8nܸ544nß¾]QQáïïoff¶{÷nOOÏ6"!!ÑÆ»¼ø¡úôéÓâë’’’¾}û²›œýðüw ÀC† ?w¥%{£¥¥å¡C‡¤¥¥õõõ9w?~ü;w¾{L??¿Í &°^kkkGEEq¾{áÂ…ÎWO£Ñh´„„„ǯY³¦Õw¥¤¤FŒ±páÂàà`ö &iié7!ù®NÿPmôehhøï¿ÿrn¹{÷®¡¡a‡  €ÐÔ7€°9|øp÷îÝýüüØ[®]»&))yðàÁ{&''«ªª^ºtéãÇÕÕÕ!!!­.š={öÑ£G?|øðáÇ£GöéÓ‡µ´˜udMMͧOŸ~ùò%33ó÷ß_¸p!­ã瀛ššÊÊÊž={öÛo¿)++߸qãë}¬¬¬._¾œŸŸßØØXTT´iÓ&{{{Ö[zzz·oßnjjúúS­vוª¾"##{õêuõêÕ’’Ö”ƒ¢¢bttt{J ÿpGQQ‘˜˜çb¥‚‚11±³Í,ñññöööòòò222ãÇ amç̪êêê ôêÕKVVvòäɉ‰‰œGðññÑÒÒ’0`ÀŽ;ššš:À,’’’ÊÊÊVVV^^^-–Y±?îâ⢤¤$--­©©¹aÃ†ŠŠ Ö[ÁÁÁZZZbbbm÷È•ªí¾nß¾mbb"#####cbbÂ:QÝž’ÂÍeÀ9`À €@€  @€0`À €@€  @€0üÀqqqK–,QPP ÓéßÝ™þ *è4þ `www•ÈÈÈvîÏü¿xZ@Ñù?«èôïÙž}øÿŽ€„˜ðpß¾}%$$TUUÝÜÜÒÒÒH—Ð! à©S§TUU½zõÊÄÄÄÚÚúõëפ‹ø6&ßëD‘'Nœ˜sæLBB°aÃ|ÿþýGijjr±Gè‘8…ÞQ"²²„›Ozz:+æ¡Óx—§ .xxx®¾ C½V` ,0`À €X\\Ü’%K¾{1.W®Ö}úô©«««²²rÏž=ÇŒØõcŠ,0€swwWQQ‰ŒŒ¤¦;kkëÒÒÒÀÀÀ¢¢"//¯sçÎQÓµðÁõ6­ÀeH pÚó4¤®ÿf[·nÝ_ýÅL'&&NŸ>=33³‹‡åg¸ @½ÿ~Ù²eòòòëׯ¯««ãiw555‹-êÝ»·œœœ½½}JJJG°ÿ~ΩlMMÍüü|®Ö(BÀÄXXX…‡‡çååíØ±ƒ§Ýyzzêêê&''geeÙÙÙÙÚÚ¶xbGëëës«>>ÅÅÅÅÅÅ>>>Çß¶m[‡hgg·iÓ&®–)¢ÀdøøøÐh4==½¡C‡¦¦¦¶·{!R‹×4­¬¬LQQ‘sç3gÎ$$$ 6lðàÁ÷ïßô葦¦f‡º‹Ÿ5kýÿª¨¨èDå€ÕF­À",>>>éé鬘‡NÃeHÐ1.\ððð ]|†z­ÀX0*`À €@ª§OŸººº*++÷ìÙs̘1mìÜö&ÛéÅ‹žžž’’’jjj&L¸yóf×+šÀ‚ÊÚÚº´´400°¨¨ÈÇÇÇËËëܹs<íqÅŠ£FzðàAuuurròúõëwíÚµ}ûvžv*¬p½M+p„uëÖýõ×_ì¡mbbâôéÓ333[Ý™G¿Ù²²²ŒËË˹~d>Ë„Ðû÷ï—-[&//¯¡¡±~ýúººº}|ÿþýœËšššùùùmì_SS³hÑ¢Þ½{ËÉÉÙÛÛ§¤¤t²nbbb]?ŽBcaaaddTTTž——·cÇŽ®-88X__¿<==uuu“““³²²ìììlmm[<±C>þÌ: ý믿vú ¢ s­­À4P¯¼¼ÜØØ8++‹Õìèó€ËÊÊÌÍÍÏž=keeÕêGètúÎ;·nÝÊÞ²sçÎÌÌL__ߎöȹçĉƒƒƒ…xŒ)haSWW·sçNYYY:®¨¨˜——Ç~·CÏ...vvv>yòä·Ò—ÅÍÍ­E3$$¤=²¶ûùù¥¤¤ìÞ½û»?¬—————ñ&_ÁP¯V­Z•––¶wï^mmm99¹ºº:™Nüòyÿþ½££ãÁƒmmmÛØN§×ÖÖJKK³·ÔÖÖöèÑ£±±±3Õÿðððyóæ½{÷®+ág¼Kq^¾+ ::ºÿþ¬f‹Ó±íœ.,,´··?|ø°Íw{,,,|øPRRràÀÜÜÜŽÁÎÎnÓ¦MßÚ¡Å öÍ›7>>>ÅÅÅÅÅÅ>>>Çß¶m[‡zœ}rrrêׯߥK—¤¥¥). (†qð %%¥111[[ÛOŸ>‘.¸Ã¤¤¤®\¹bmmmnnžMºHàΠÓé{öìY³f¥¥eTTér@ð €;oÑ¢Eÿý·““ÓÕ«WI׋°ZÑ¡SîIIIS¦LY¸pá¦M›xZP« )Õѯ»¨¨hÚ´izzz§OŸ–””ä]a@1¬‚ækªªª?®¬¬œ8qâÇI—̲²²7nÜ?~¼¡¡a\\ér€ßa º]™p`=¹áôéÓNNNÜ­ ¨‡{A WWW —ôôôõëד.øFÀ­èúß;ïß¿wrrÒÓÓ;sæ –e.,Â0ýúõ{òäÉ—/_&Nœˆ;VÀ×À¼"++{ýúussóÑ£G§¦¦’.ø ˜‡ètúÞ½{·mÛ6~üø{÷î‘.øÎ·‚ë3þ/^¼øé§Ÿ~ùå—-[¶àAÂw¢/¾î>¸¸¸¨©©]ºtINNŽ»Á",×·oß°°0yyyKKËÜÜ\Òåa`êHII]¸paþüùfff¡¡¡¤Ë’0Ý ÞM8°ÝÔÔDºœNRRRBúˆ0¿SVVžé€bß `“oíðèÑ#Þ<¤­­áäädffvîÜ9*»NHH077¯¬¬¤²SèggçÄÄDccãׯ_“®@¨1¿áÝ»wóçÏ—””;vì‰'Þ¼ySYYYYY™ššzüøqKKK)))wïÞ}ë‚«¯EȤ¤¤Œ5ÊÑѱ  €‚îBCCUTT(è ºèÊ•+***»wï&]a¼K„ïœ[.--õóó /--¥Ñh***†††¶¶¶3gÎl±4Zhë"¬V566îÛ·ïØ±c{öìñððàÝ]V&Ož|ýúõ±cÇò¨ ஂ‚‚‡.X°€t!$a4¥D*€Y’““=<<Î;7pà@^tÁd2óòòÔÕÕyqpÁ*hà-}}ý¨¨¨ñãÇ_¸pÏåiË IDATÿµÑét¤/[»833sîܹjjjjjjsçÎÍÎÎæue@111±7†††ž}ºÍÚµk±F 0tؤI“Ž9òÝÝÄÄÄ–.]šœœ\YY©££söìÙææf Ê~öåËÖmMDxKYYùìÙ³AAA¾¾¾¯_¿&]$''·`Á[[Ûk×®‘®€0œìlÎó“ɼxñâæÍ›§L™òÇ´xÂ4ˆ”ÄÄÄ3fLž<ùСC¤Ëh ΃À£Óéjjjzzz^^^uuu¤‹2†S]]]RRBºb0ÔkFÀ¼–‘‘±nݺäääýû÷;;;“.à›x—HšV €9ÕÔÔ<|ø1ºzõê>}ú>|—*Â4Ád2çÏŸçÎ^ÜÖÖ6..nÚ´i666žžž………¼è€?!€¡-»wï~ÿþýéÓ§yt|qqñeË–½}ûVYYyøðá»víª­­åQ_| ß|úôé7n°·À; {÷ILL:tèåË—qŰÈòôôŒŠŠ"]ÀðM!!!ׯ_ïÛ·/5Ý©««_¿~ýÚµk'Ož422úï¿ÿ¨éøŠ³³³““Ó™3gHÀsXmÔ ,Â"‹ÉdÞ¾}{Ó¦M øë¯¿FEº" TFF†³³³………¤¤$ér@Ôaˆ:>}úôäädGGÇùóçççç“. ¨£¥¥U^^þâÅ Òµð†z­À˜TUUýù矧Nòôôüý÷ßHW¢#`Qòòò»víJLL,++ÓÑÑñöönhh ]ü555õõõíܹ´´´²²’§õ 055µ3g΄‡‡‡……ééé]»v ˤxêãÇeeeìæ­[·ÂÃÃÙM///___vsÇŽ—/_f7—,YrâÄ vséÒ¥œÍcÇŽÝ¿ŸÝ\³fÍ¥K—ØÍ³gÏrv”™™YZZÚõ‡?a®µ¢9ÝÔÔ”““£¥¥Eºïß²eKeeåŽ;œét:éŠRsssCCƒ´´4«éçç'++ëääÄjîÛ·OEEÅÃÃՌˆˆèÙ³çðáÃYÍOŸ>‰‹‹÷ìÙ³ëeÔÔÔˆ‹‹³WÛ½zõJAAý‹h×®]£Frttd7ÇŒ3aÂV3//OQQQ^^¾ëe´·¢¤”hðúõë³²²nÞ¼Iºv Ú¶mN?pà€µµ5ér€"'Ož4339r$éBRzzzuuµ¡¡!«¹wï^&“¹iÓ&V399¹[·nºººä ü¾´´4EEEVsÍš5ööö'Nd5¯]»fjj:dÈîvÊÃD`ÂWDðk¹y󦺺úÇIÒÍÍÍþþþ?üðC\\ér€ ׯ_WVV¾yó&éBCtt´ŸŸ»téÒ%‚õðÚ… 233ÙÍ5kÖ¤¥¥uý°¼K‘KšöµÎÈÈPQQyõêéB:£¾¾ÞÇǧ_¿~...ÉÉɤËž‹8pàÎ;›››I×ÂwâââXãZ–”””¬‡¬ˆˆˆÊÊJvÓÆÆ&//¯Çá]"`жmÛ¶}ûvcccÒ…t†¤¤ä²eË222ÌÌÌlmmçÍ›—““Cº(à!CCÃèèèøùù‘®…¼ÌÌÌÕ«W³›ªªªæææì¦®®îäÉ“IÔÅ,--9OŸ;w®_¿~¬×L&SSS³ººšPiÿŸ(žìü.Q;\WWÇ^ˆ!Ъªª:tìØ1GGÇÍ›7óÿ‚2è´úúzqqq111Ò…P­¢¢bÇŽÞÞÞ¬fUUU||üرcÉV%ˆJKK•••Y¯«ªªÌÍÍ[]ԉ뀇„#}i4š¼¼üöíÛ333‡ baa±`Á‚ÜÜ\ÒEOHII‰Hú677ïÞ½›}ݼ¼<çÍYåå呾ÃN_&''ÄNßÌÌÌŸþ™‚À lzöì¹uëÖôôôþýû›˜˜,\¸ðÝ»w¤‹è€Çùò…õº[·nâââìÇtЉ‰Í;—\i©[·n `7UUUW¬XAE¿ô@=…;v¤§§÷éÓÇÐÐpÉ’%yyy¤‹h“Éljjb7‹ŠŠØÍ 6ÈÉÉ‘¨KDÉÉɱ/Öâ)0³^½zýñÇiii FFFžžžX¢%Ä^½zU\\LºŠÎX´hÑ7ØÍÇkjj¬¨á×»wï={öddd¨©©™ššzxxddd. ¸/""ÂÄÄäåË—¤ ù¾\¹r…Ýôññ™9s&Áz€°È)//wpp`ŸR½zõÚ¹sgFF††††¥¥¥››[JJ 颀›Ö¬YsìØ±)S¦üý÷ߤki©¶¶–ó¿7uuuÎ{NIII‘( C‹œE‹éèèÈÈÈ.„ …­[·fffŽ1b„ ³fÍJNN&]pÍÔ©SŸ=::štQÀ:::/^¼˜>}:Ù2jkk «9räÈsçΑ- ø Ÿpuuµ¡¡a^^^^^ž¡¡¡­­mMMMùúæaÐBAAÁ† ._¾Œù.99¹ß~û-++ËÖÖvöìÙÖÖÖÿý÷颀 9¯ò¤L^^^]]뵌ŒÌ–-[0€6ðé-Ÿ¼½½ccc9)Ì™3ÇÔÔô[×fq÷N%Âz'¬·oß¾|ùÒÝÝt!üˆÁ`üóÏ?{öì‘‘‘Ù¸q£““S·n|úç)ð­Ù³gÿöÛo˜[2"÷8B›ßÿ}Ò¤Iì-ÿý÷ߟþÚêþ`àŠæææ»wïîÛ·¯ªªjãÆ3gÎ']刻 &“É~Z-%‘»eJJʈ#8· ><55µôíÛWBBBUUÕÍÍ---Ç‚pêÖ­›““Ó‹/>|ñâEMMÍ#GްïIíãÇmŸÆêeeeö³i:ŠO¸¼¼\QQ‘s‹’’RYYÙ·öŸ:uj@@@UUÕ«W¯LLL¬­­_¿~Íû2AhMœ8144ôæÍ›‘‘‘ƒöòò*--%]tÉùóç-,,ºx{ðÄÄDöãßi4š‰‰‰‰‰IW+Qŧs­’’’_¾|‘`oillìÞ½{}}}{>~òäÉ;wîµ·aúôéÏž=ûîn^^^__¿„U‹Ð‚––Ö©S§Þ¼y£¤¤dnnîììüôéSÒEAg¬X±ÂßßßÝÝýüùóíü“É\»v-{þCLL é ܧ¬§§—À¹%11‘óÆ1mkç_+^^^ÌÖt¸\~UQQÁõ“^"KEEeçι¹¹vvv .3fŒ¿¿cc#麠c¬­­###õõõÛØ'22’½â„N§ÿ÷ßD.j¡Ç§üÃ?øúúrnñõõ:uj;?~ýúu Ô%`/^Ìyóè:YYÙE‹¥¦¦nܸñìÙ³êêêû÷ﯪª"]t€††ÆèÑ£ÛØáÝ»w%%%”Õ¢«Õ! q•••»wï.+++++Ûµk×!Cª««Ù;pVnccPTTÔÐн{÷îÞ½{ÇÆÆvºw¾ýZ:äæÍ›:::µµµ¤ f¯_¿ž5k–’’ÒªU«233I—ôæÍ›}ûö‘®øïOGÀòòòaaa¯^½4hРAƒbbbBCC¿õDÌÍ›7ûùùéëëËÊÊZYY¥¥¥={öLį…/++[¾|ùÙ³g¥¥¥I×"ÌFŒáçç/--mff6eʔǓ. :¬OŸ>:::¤«‘ƒå¾­‚UÐ ,èÑ£柩T[[{õêÕ(((¬ZµÊÅÅ…s?ð›3fœsæL<ŠŠJÍÍÍì‡j”””tïÞ½í?L=z4wîÜ-[¶,]º”’A` äåå—/_ž––öÇøûû8pÆ 999¤ë ………&&&ì_***ßš8qâóçÏ»wïÎûê0n FÀÀ#™™™§OŸ¾té’……ÅâÅ‹'Mš„‡rƒÁ Ó霣^<,º‹°(…žª©©¹zõêéÓ§ËÊÊ-Zäáá-qËŒ3–-[6nÜ8Ò…€ð@SJ8!!A]]½gÏž¤ ˆ‰‰9uêÔ­[·&Mš´páÂñãÇãVäÀ`0ÄÄÄX¯«ªªäååÉÖB瀡-UUUÓ¦M‹%]tŒ±±ñ¹sçrrr¬¬¬Ö¬Y3tèÐýû÷㹇òøñcWWWv“wéÛÔÔÄ£#ƒÈ¼¡n¼|ùòÚÚÚsçΑ.º$::úÌ™3·oß¶··ÿõ×_---IWħ8×6766Ö××ózÙTRRÒ¬Y³nݺ¥­­ÍÓŽ€a ßôìÙ³Û·os^àjôèÑçÏŸÏÎÎ655]¸p¡žžÞáÇ[<—h4š™™Y^^뵄„‹– V­ZeeeåïïÏë¾@tØP‚5655ݸq£³³3éB€Ë"""Μ9sïÞ=;;;[[[,™f)--%²líõë×®®®ãÇ?zô(nZ):°‹R‚À¤~5ÊËËýüüΟ?_YYéáááîî>`ÀÒEQíêÕ«ÉÉÉ{÷î%]­ªªêÔ©Sk×®ÅC¢L)Á `/_¾¼téÒõë×Gåáá1}útѹ©VEE…¸¸8îD €)…¾UWWxáÂ…„„„9sæüüóϤ‹â¾††GGÇÛ·o#t80¥ÀÀÿ²²².]ºtùòeEEÅùóçÏž=[II‰tQÜ?räH\ Ä!€)…AÑÜÜvéÒ¥û÷ïÛØØÌ›7ÏÞÞ^@ŸCìïïÏd2gÍšEºÎøò勜œé*€'À”BƒÀ©¬¬ øûï¿ÓÒÒf̘áîînffFº¨ŽIMM•””ÔÔÔ$]H‡1Œ#F,X°`ÕªU² 0¥ø<€cbbÔÕÕ{÷îMºàG¹¹¹~~~W®\a0sçÎuww8p é¢ZWSSsàÀmÛ¶‘.„ òòò~üñÇAƒ?¾G¤ËnÂ8àÿ«®®vqqIJJ"]ð)uuõM›6¥¦¦úúú¾ÿÞÈÈÈÚÚúÌ™3Ÿ?&]ZK222½zõjhh ] 4(""BEEÅÄÄ$--t9 øz¨G ?€W¯^]QQqñâEÒ…€`hhhxøð¡¯¯oHHÈ„ fΜéàà ##Cªž—/_ÊÈÈåÊm–7nŒ7TÂSДâÛŽuttLNNÆÿÞÐQååå·oßö÷÷‰‰qrrš7oÞØ±c©?aгgÏI“&QÜ/@§!€)Å·lgg7kÖ¬yóæ‘.XQQ‘¿¿ÿßÿ]VVöÓO?Íž=ÛÐÐwÝ577ÇÄĘššò® žBSŠoøÓ§OŠŠŠXf \‘’’òÏ?ÿøùù‰‹‹Ïœ9sæÌ™:::\ïåóçϳgϾs玸¸8×@0¥ø6€xáåË—þþþׯ_ïÝ»÷?þ8}úôaÆu倵µµX ÌVXX())‰3G « €WLMM:ôîÝ»£GOš4iøðá{öìÉÊÊêܽ¼¼nß¾ÍÝ"Zppð¨Q£?~Lºà/êµ#`eÍÍÍÏŸ?÷÷÷¿qãÆ€œœœ\\\¾;;Íd2Ù'Gš››ñ° =z4þü¹sçîØ±C@oU&²0M)0Fc0}ûö1c†³³s«I\QQamm‹½m(--]°`¸¸ø­[·H×€¦€ƒÁxúôéíÛ·oß¾­¨¨øÓO?}=&.**RUU%U¡ `2™………ýúõ#]t˜RüÀïÞ½Ãÿ®À'X³Ó·nÝjjj3f̦M›Œ±2„˜RüÀööö“&MZ½z5éBþ&“yãÆgÏž=zô¨ªªjúôéÎÎÎVVVbbb¤Kà20¥ø$€ïÞ½ûûï¿'$$`ÉðƒªªªcÇŽmܸ±Åö´´´›7oæææþðÃNNN“&M"x·KîÂeH"§¾¾~Íš5GEúŸ“““’’jjjj±]GGgóæÍ¯^½Š‹‹322:zô¨ªªª«««¿¿EE‘R ƒÁX¸pajj*éB€j|1Ôã7ü0Þ¿ÿ‹/nÞ¼I¶ qoß¾ëè3z?~üx÷îÝÀÀÀ'OžŒ1bÚ´iÓ§O×ÐÐàQ‘Bàܹs›6mÚ±cÇâÅ‹qBß` šRüÀuuu}ûö%[ˆ¸óçÏ+))999uîãuuu?¾}ûö;w§M›fff†SÅ_ËÈÈpssSQQ9s挚šérà!€)Å @J~~þ€¸{L&“wïÞ½ÀÀÀ‚‚{{ûiÓ¦ÙÙÙÉÉÉq·#ÖØØ¸gÏž‰'š››“®þ˜R`YUUUcÇŽŽŽ–””äQùùù÷ïß ŒŠŠ=z´ƒƒƒ£££––ºè"0¥À j õÓÂÕÕÕ!!!AAAAAA²²²vvvÖÖÖXA |L)0ˆ”?ÿüSBBbÍš5kHHHxðàAppp||¼•••£££Öm?@S  "åóçÏÝ»wç“…Qÿý÷_pppppp¯^½¬¬¬x7%Îÿ#""lllH"¢À”"À¥¥¥ÊÊÊÔ÷ ¢¦¦¦ÆÍÍíŸþáçTc2™ñññAAA÷ïßOMM533›8q¢½½½®®.éÒ¨–••5iÒ$kkëC‡)((.GäàFÂïÉ“'ÖÖÖø{( ++»fÍ>rN744ܲeKTTTnnîâÅ‹333ÕÕÕ/^|óæÍòòrÒ5RdÈ! Ý»w××׿{÷.ér€k0nõ#`ƒadd´eË–3fPÙ/ˆŽ°°0&“ikkKº®zóæÍƒBBBž={f``0qâD›Ñ£Góóhž["""/^|ÿþ}uuuÒµˆLASŠú>vìX```HH•‚H‰ˆˆ ÑhVVV¤ ášúúú§OŸ††††……½}ûÖ‚õð’¡C‡’.‡š››»uÃÌ%¥À”¢8€?}ú¤§§÷èÑ#Ê:¡Ç`0=zdggGº*”——‡……?zôˆÁ`ØØØL˜0ÁÆÆ¦ÿþ¤K‡¦Å\]]ýäÉGGGÊzQÐØØøóÏ?Ÿ={VVV–t-”ÊÌÌ }üøq¯^½lllÆoccÓ»woÒ¥@BS —!€jhh¨ªªRRR"]_`2™IIIaaa¡¡¡¬$;vl=HWÇM555ÉÉɦ¦¦¤ N`J!€A@y{{777¯]»–t!|§©©éÕ«Wáááaaa/_¾400°¶¶677·²²êÙ³'éêºêõë×ŽŽŽ3fÌØ½{w÷îÝI—#lÀ”Bƒá¼‹$“ÉÄÃ쾫®®.222"""222::ZGGÇÖÖvܸqfff‚;2.//_³fMhhèÁƒüñGÒå0¥À (êëëGŒ‹Ç uNCCË/BBBžp+x:>}ú´¿¿xx8ŽÂ!**ŠF£™™™‘.Ú«©©)>>þÅ‹±±±ÑÑÑEEEæææfff&&&ÆÆÆüp®ˆˆˆÕ«WKII?^GG‡t9#`áQWWçííMº àwUUU¦qqqV³´´ôùóçÏŸ?ß¿ll¬ªªª………………©©©ŽŽûÒm*YYY½|ùòï¿ÿÆôŸÀ¸X Ôkll ›|pvvfÝM‰t- xSRRØyœšš:dÈ###ƒáÇ+((t±‹ššooïÒÒÒÇs¥f!€¦w¿î/_¾ìÞ½{÷îÝø+šêëëi4–V×544$%%ÅÅÅ%'''&&ÆÅÅ)++1B__ߨØÏñPÒJIDATà 0¥¸ûuoÙ²åÝ»w¾¾¾Ü: – L:uÚ´i¤ !×ÜÜüöíÛ¸¸¸¤¤¤ÄÄÄØØØnݺéëë1ÂÐÐpäÈ‘ÚÚÚ¸™Z' €)Åů;//ÏØØ8>>Ë EJmm-ûä\cc£„„Ùz@4¤¤¤ÄÅÅÅÅÅ%&&¾ÿ^__äÈ‘úúúzzzÇWRRjÿÑêëë)[•Í?À”ââ×=kÖ¬aÆmÛ¶+Gðúõë5kÖ„……‘.àÿøòåËëׯ’““““““’’ddd Xë« ´´´Ú"?xð`Þ¼yË—/_¶lY×O6 0¥¸õu—””Œ?þÕ«Wx‰Ðkhh””d7ëêꤥ¥ ÖÐùùùIII±±± ‰‰‰ÚÚÚzzzúúúƒ âÜ?==}ïÞ½÷îÝ[²dɪU«zõêEªr*!€)Åů»¹¹™žˆ¼ckk{àÀQ£F‘. ójkkSSSSRRX«º’““«ªªtuuYa¬¯¯o`` ¬¬œ››»gÏž•+Wêéé‘.™ `Já2$h¦¦&ö|Ý—/_xw‡RÊËËSRRRRRXyœœœ,..ÎÎc--­¡C‡öíÛ—t™¼…¦¾ëÎ;wïÞ=þ<éB(UXXÈÊãÔÔÔôôô´´4&“i`` §§7tèPmmm]]]!»Õ ˜R`hU}}=ûrÞºº::Ž«{JJJ’’’’““ÓÓÓ£¢¢Þ½{Ç`0ôôôttt´µµõõõ‡ 6pà@"O`ä 0¥À𵦦&ØØØž={’®€OùûûoÙ²EIIÉÎήOŸ>ÙÙÙIIIiii%%%šššúúúC‡ÕÒÒÒÔÔÔÖÖ”5\`J!€¥¹¹¹¾¾ž}EoMM ´´Á`ܽ{×ÇÇ''''!!õtźºº´´´”””´´´ÌÌÌÌÌÌôôôž={êèèhjjjýÁƒóáEó`JuåëÎËË“––îÓ§wK"6oÞܯ_¿%K–.@𤧧kkkë]&“™››ûöí[V³þYXX¨©©9tèPV*kkkkiiÿuЦTW¾n{{ûåË—s·$ Laa!ûº-®îžª¯¯g­íbå1ëE}}=ç(™EYY™²ªÀ”êô×ýðáÕ+W&%%ñá, ´GFFÆ/¿üòøñcÒ…­øøøÁƒ·-EEEEfffFFFzzzFFë5ƒÁ`%1ëtòàÁƒÕÕÕûöíË‹û. €)Õ¹¯»©©iäÈ‘{÷î2e /ªyõêÕÈ‘#Ù31™L<· €w6mÚtúôiWW×%K–èëëwî eeeìrfffNNλwïÊÊÊÌJeÖ?û÷ﯮ®ÞÅ«À”êÜ×}úô退€^”¼3þü7¶q² ¸«¨¨èìÙ³gÏžUWWôè·îÛZ[[˳‚9'''?????¿OŸ>ššššššƒ ÒÐÐÐÔÔTWWïÝ»w;‹¦Tç¾î?VUUihhð¢$à¢7oÞTWW›˜˜.@¤555EEEYYYñ´ƒ‘———™™™•••———™™ùîÝ»ššV*8pРAZZZ”——oq0¥p’p{øðá§OŸfÏžMº ¦ºº:###;;»   ++++++777//ONNnÈ!0`ÀÀ‡ âè舦XÈ”––?~ÜËË‹t!Ð.wîÜa2™ŽŽŽÔ/h-**ÊÎÎfÍ]çææfee=|øG‰ðÍG? ö•EÀÿºuëö×_-^¼xöìÙîîîT>gLUUUUU•s ïVeâIy œ,X””Äz-!!±páB²õ@ûM™2%""âÙ³gòòò?þøcNNéŠxs­­À´ jnn®®®fÝ÷ŽF£%''kjjrku%ˆ,,¢Tû¿n\3Ê?:T__¿qãFÒ…>þ\__¯¢¢ÂëŽxÀ˜‚î<ƒaaa‘žžNºõùóç°›«V­BúˆŽ¨¨¨¡C‡Nš4éÔ©SEEE¤Ëé pç]ºtIBB7p ¥¾¾>((ˆÝäÅ-è€oÙÙÙ.^¼822R__ÿìÙ³¤+ê0LA·¢=555C‡½y󦩩)5UFsuu=}ú´‚‚éB€444Ô××} ®À4ß9r䈙™Ò—×jkk¿|ùÂn.]º몠IIÉo¥ï³gÏjjj(®§ÀT__¿{÷nÒU¿µk×rÎ3; íÄ`0þøãUUÕÉ“'>|8##ƒtEÿ¦ [ËJLLÌÊÊrvvf5±Îº¨ªª*444(((--íéÓ§ý8.C¢˜bìÎ%''§¥¥Í˜1ƒlI,`J!€©TPP`gg—œœLºQ×®]»víš­­í„ tuu[̺a•½{÷Ö×׳^÷ïßÿÕ«WdëQ6iÒ¤9s椤¤L›6­wïÞ¾¾¾Ôô‹‡1jkkét:{ý”œœ\MM””«)##C®4uJJJ?ýôÓO?ýD£Ñ>|ø@ÙM0×Ú LAsÝÌ™3=<<&MšDº€ŽÁ9`Jµúu744x{{¯[·w\j€€€††777V‹™@@á0y'NœˆŒŒDú~K^^^XX»9|øpcccvé ÐηKUUÕŸþÉyë Ñh?~ìÝ»7ëuYYYJJŠ «9tèPruLA·âë ‡­[·æçç_ºt‰PEü(++köìÙÑÑѤ à!œ¦T‹¯»¦¦F[[;**jÀ€«"®¡¡aäÈ‘ñññìÕËBç€I’••}ûö­h¦¯››[II 뵤¤äÇ‘¾\n999Ò%PdÿþýéééìæÒ¥K»wïÎnŠæ_!¼€u7n܈e7õôô8ÿÚ077—••%Q€Ã*h‘óðáCIIÉñãÇ³š²²²’’’ìwÕ ZÀÂïÑ£G¥¥¥³gÏf5eddØ¢!q’)èwïÞ¹¸¸ôèÑ£G...ùùù¤+")44t÷îÝìf¿~ý455ÙͱcÇš™™‘¨ þ—0puuµ¡¡a^^^^^ž¡¡¡­­mMMMWŽY___YYÉ­ ¹®¶¶6''‡Ý sqqa7õôôØ´§Ñhººº¦¦¦”Öß# ×{{{ÇÆÆ^¹r…½eΜ9¦¦¦+V¬èÜétúÁƒ_¿~MÙC©¾«°°ðÞ½{ .d5ãââ{öŒÝìÕ«çg9ï5-..®ªªÚ¹SðIHH444pnihh””üî·oßNúë~Ç£ð†EX}úôILLäk~øðaÔ¨QEEE; ïN¹C;á_?À¿âð¯€`V[ôôô8·$&&rå .CÿðÃ-®òõõ:u*©z¾Kæ7ªªªFŒáééù믿Òh´'N\¼x1!!¡Ó0´qøWÀðo8ü+à˜‚n‹¼¼|XXØ«W¯ 4hР˜˜˜ÐÐPÑy€ ü¿öî%”Ò?Žãø3ý±·9®YÉÌÆÈ­HYÈ9 ”ä2Qn5Åæ,ì°P² &r‰bc%¥Ø…BÓÄj:ƒ£‘…Ë ¹“k!=³øŸ8ã?ÿùÿqžó=ï×òYœçÓ÷ççs~œ§ˆ·W¿Á»Nq,'`ıž@»Uøëßþàõ™sþ/TÁxVAKà 4ZÞ^ @Ï€xr(`PÀ €@ €@ € 0(`PÀ €ommmøùùùùùlooK'Ò³{MûÅ?¸-ç3ôå˳ÙÀœÝà^Óf#¸Í§OŸŠŠŠ‚ƒƒýýýSRR†‡‡µ¸ ìpzzj4777777M&Óùù¹t.}zÀ´Õ_¹-ê3TVV277'äY¸ï´Ùî‘––¶¿¿?<<¼³³ÓÕÕÕÐÐÐÛÛëò»ðiHííí‹¥¿¿ÿæJiiirrrUU•`*½ºï´ùTTŒÝþÏ´Y·©®®nnn¾ùƒÕjÍÏÏ_]]uí]8;ŒŽŽ–——;_)//‘Ê£oL€'kiiqþ ÿëׯµx(I;|ýú5..ÎùJllìòò²T}{À´Ã¼½½ÃÃÃKJJVVV4x(6‚ˆñññ˜˜—¿,ì`·Û_½zå|Å`0Øl6©<úvßiçää œœ|þü9)))--maaAû˜€ga#ˆ°Ùluuu.ež(8øøøœy{{ß\¹ººzùòåÅÅ…`*½zä´{zzFFF&&&4 Eባ{=`Úl7ØÝÝ-,,lhhHOOwù‹sv ¼s;<<¼sJƒ«QÀªJOO?88XZZêì씎èÏ€übjjjmm-//¯¢¢baaajjJ: Oœ€ܲÛíIII“““QQQŠ¢,//ggg[,–ÀÀ@éh€ÞppËl6—””üÝ¾Š¢DGG›ÍfÙT€.q@'`PÀ €@ €@ €€Ÿåâ< ^”IEND®B`‚gsl/doc/images/fft-complex-radix2.png0000644000175000017500000003510213536674414016066 0ustar eddedd‰PNG  IHDRX p‹“bKGDÿÿÿ ½§“ IDATxœíÝmlS÷ÝÿqûNn m®ÜTKˆ­­"´^iY!0M£ŠXyБö`puáAŤMšF/á4TꦵiEËºŽ’áD…JåfÚmM5š´F"QE¢„  Rî¡Íù?pÿ¾NmçÄqü;wß÷ëQr|÷ý:ö÷ãs㯦i¤ú/« ÀJ!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆf£ <}úôÓO?ŸŸ¿dÉ’Õ«W?~ÜêŠî·ÀêþÏúõë7lØpüøñ•+W^¼xqçΟ~úéŽ;¬® àf^ûü?Â_üâ¿ùÍo¼^oôמžž§žzê“O>±¶*€»Ù(ãLNNÞÿýwïÞµº€›Ùhaœ¿üå/+V¬°º €ËÙtpddä‰'žxóÍ7«ªª¬®àjšý ¯[·®³³3Åë/X`£C~Š( ÛEȵk×~ðƒ¼üòË6lHñ&Ÿþ¹fËõÚyòzmº¾>Oôå8nm¾œ%v(eÆÙ+¯_¿þä“O¾úê«ÕÕÕV×ÁFËܼysãÆ/½ô)0‚pãÆ¿úÕ¯¾ÿýï[]@mJNºý÷öíÛ¹¹¹³ÞÐ>]d}9‹[ûò¸·5úru}Ùh¡+ÿr›³Ñ¦QÌGÚ×Þ½{­.A úr·¶F_ˆræd·nĨõ¬D#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€hʃðüùó»víÊÍÍõz½³^Ù›@uyá”á¶mÛ Îž=›âõµ¯RZ^ÓÂÆëý±R¹N¦npu£ž}„Ñl„EEE>ŸïÁ¬¯¯ïííµº€ËÙ+kkk;666ÖÕÕµjÕªõë×_¸pÁê¢nf¯}„q~÷»ß8qâý÷ߟõž“.ß»wo8žÓ#¬‡“^¤(°l„7nÜ(++Ïø=œEèÁ2Ä@5[áÑ£G׬Ycu7[`íÃëWukjjÖ®]›——788ØÞÞÞÜÜÜÑÑam…wS¾F¨?Yšñ‰ÓöìÙÓÖÖ¶bÅŠE‹UUUõööž9s& ©® ™3á`p=¡Ë A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4{áùóçwíÚ•››ëõz­® ‚½‚pÛ¶mgÏžµº€^MÓ¬®! ¯w…ÍéÊ'R7êíµF8W‘H$ z<ž`0¸k×®`0˜••UPPPPP••5ë´o‰D¬n€hÑéÇÄË›®K¥’üííí;w˜0§$=¿ßðàÁºº:óLž~6™xêÖ„ååå}}}æÔ“ôÑ/]ºdÕ£Ìüég‡‰Ç¦Ñ$-|ô €dæO?3'^8ö&£î„%%%>zqq±…@2ó§Ÿ™/kɨ{Dacc£ßï·ä¡ý~SS“% &O?×O<a]]]KKK ðx<@ ¡¡!ø|¾üüüüü|ŸÏ7ë´oÕÒÒ²uëV«ŸBŦ/#|°LzW8‘ºQ¿@ŦM¿;4ö3!PÇ^AHæLæà}„ÌA ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€hʃðêÕ«[¶lY¼xñâÅ‹·lÙ200`peoÕå„S„ãããÕÕÕ¡P¨¿¿¿¿¿? ÕÔÔLNNÜDû*¥åàU6ÍÍÍçÎ;räHlÉ3Ï<óØc=÷ÜsÉ«ñ¦SOz·8ˆºQ¯vðÔ©SÛ·o×/Ù¾}û‰'”>(©S„/^¬¬¬Ô/yä‘G>þøcƒ›ù|¾|°¾¾¾··Wiy¨ ÂÛ·o?ðÀú%yyy###3]¿¶¶öرcccc]]]«V­Z¿~ý… ”VÎ^_Ÿ8qâDUUÕÂ… ‹‹‹wïÞ‡ùË_¦rÃÄÃM½^o8V\/ ÃÂápÒ‘®îÕfRXXØÓÓSXX[2<<¼råÊ¡¡¡Tn~ãÆ²²²ññqã«q° ¸žS–©¨¨èîîÖ/éééY¾|yŠ7'Þª© ÂM›6µ¶¶ê—´¶¶ÖÖÖ¦xó£G®Y³FA]|IíFű±±ÊÊÊ;v444x<ž:t¨»»Ûï÷ùðºUÝššš†††µk׿åå ¶··777wtt„B¡Yz`Ó(¸S7æäätvvvuu•–––––~ôÑG|ðA,ãìÙ³§­­mÅŠ‹-ªªªêíí=sæÌ¬)À|¸a]Š5Bp=§®`s!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„Ñì„W¯^ݲeËâÅ‹/^¼eË–«+¸œ‚p||¼ºº: õ÷÷÷÷÷‡B¡šššÉÉI«ë¸™WÓ4«køRssó¹sçŽ9[òÌ3Ï<öØcÏ=÷œñ ½^uPAá¨×lcÆ ú%ÕÕÕ³ÞÐü.Ž9|>_~~~~~¾Ïç  Ñ…úŸ“^[Yu+[#¶·ÞÊäbŽ9bòܳœºQo£ ,((Ö/***šõ†&a[[›ßïWò©Rã÷û#‘ˆ™£Ïre£ÞF³²²&&&|>_lɽ{÷î»ï¾»wïßÐäM£ååå}}}¦=$U^^~éÒ%««0ºQo£ƒeæÃ›L8>xð`ì:§Nº~ýzìWýEúŸ¯_¿~êÔ©¤EïappPU²èqõ*¦œµ÷PWW—t¤'<c£5žžžÂÂÂØ’ááá•+W ßÐä5ÂeË–}òÉ'¦=$UVV&j‰X#¬¨¨èîîÖ/éééY¾|¹Uõ̤±±‘}„¬å÷û›šš¬®Â%¾‡­®áKŸ}öÙûï¿ÿÔSOÅ–ìÝ»·ººzõêÕÆ7lll4³‹‡~¸´´ôüùóyyy~¿ÿÞ½{K—.ݺuë§Ÿ~:11¡ÿ9鸕U·²U1b[pë­L.¦¹¹¹®®Î´¹gêF½6ŽUVVîØ±£¡¡Áãñ8pàСCÝÝݳ®~ñ=Bp=›Fsrr:;;»ººJKKKKK?úè£>ø€¥Ü°.Å!¸žˆ5BÌGD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚оÂá°Õ%(A_ŽãÖÖè Q^MÓ”>ÀÕ«Wö³Ÿýõ¯õx<ßýîw_}õÕ’’’«ñzã–¤Rž×«¼ KЗ³¸µ/{[£/gQ×—Ú5ÂñññêêêP(Ôßßßßß …jjj&'' n¢}•ÒòPûÁ¡¹¹ùܹsGމ-yæ™g{ì±çž{.y5i>œ…¾Ç­­Ñ—³8uðÔ©SÛ·o×/Ù¾}û‰'”>(©S„/^¬¬¬Ô/yä‘G>þøcƒ›ù|¾|°¾¾¾··Wiy¨ ÂÛ·o?ðÀú%yyy###3]¿¶¶öرcccc]]]«V­Z¿~ý… ”VNSÉçóMMMé—LMMeee¥xó|ï{ß›õjV?…3¤“C)Èä¾Gý—¢w[XXØÓÓSXX[><<¼råÊ¡¡¡TîðÆeeeãã㙪€8™Ü4š¸–VQQÑÝÝ­¿NOOÏòåËS¿Ã –@"µû7mÚÔÚÚª_ÒÚÚZ[[›âÍ=ºfÍuð%µ_7«¬¬Ü±cGCCƒÇã9pàÀ¡C‡º»»ý~ÿ—¯û^HMMMCCÃÚµkóòòÛÛÛ›››;::B¡º ©]#ÌÉÉéìììêê*-----ýè£>øàƒX ÆÙ³gO[[ÛŠ+-ZTUUÕÛÛ{æÌR ”;O@@ŠøïÑB€h!@4‚ A ˆæ† ¼zõê–-[/^¼xñâ-[¶ X]Q:NŸ>ýôÓOççç/Y²dõêÕÇ»‚ Ú^¶l™þœ´'÷5==½ÿþŠŠŠ… ®X±âwÞÑ_êܾ¾øâ‹7Þxã[ßúVnnî’%KB¡Ðo¼ñÅ_Ä®à ÖΟ?¿k×®ÜÜܸW]”q#vnÓ /GOã¿WLÆ'‰ãƒp||¼ºº: õ÷÷÷÷÷‡B¡šššÉÉI«ëš³õë×ߺuëøñãCCCû÷ï‡Ã¿ÿýïc—º MMÓ~üã¿ð ú…Žîk×®]==='Ož=|øðáÇc9º¯Ý»wÿñlnnhnn~ûí·wïÞ½ÔY­mÛ¶­  àìÙ³‰7bó6 úrô$1è+FÉ$Qô_-LóÊ+¯Ô××ë—Ô×׿öÚkVÕ“¶ŸÿüçÓÓÓ±_»»»ËÊÊb¿º Í—_~yÛ¶mš¦é_uÎí«³³sÓ¦M3]êܾ4MËÉɹ|ù²~ÉåË—srr¢?;´µÄYg܈SÚLìË“Ä ›TLÇᆠ:::ôK:::ª««­ª'S&&&ôÿ¸Ñémþûßÿ~衇FGGµ¯¾|Û×~ô£÷ߦKÛ—¦iùùù‰AXPPýÙ¡­%VãFœÒæ¬+3$3õ¥h’8> †‡‡õK†††ŠŠŠ¬ª'SÞ}÷ÝP(ûÕÑmNNN>üðÃÿüç?£¿ê_¾Îí«´´ôÝwß]·nÝ׿þõû¦¦æÌ™3±KÛ—¦iápøñÇ?}úôèèèèèèßÿþ÷U«V555E/uhk‰ƒÕ¸§´9k:t’$íKÝ$q|ú|¾©©)ý’©©)ý' 'úì³Ï¾ùÍož>}:¶ÄÑmþô§?}á…b¿ê_¾Îí+;;;//ïøÃÍ›7oÞ¼ùÖ[oåååýãÿˆ^êܾ4M›žžÞ¼y³~ÊæÍ›c[ÛÚZâ`5nÄ)m¡s'IÒ¾ÔM‚Ðv†‡‡×­[×ÙÙ©_èÜ6?^UUõùçŸÇ–¸#}>ß¡C‡ôKÞzë­ï|ç;±KÚ—¦i¿þõ¯—.]úÞ{ŒŒŒ¼÷Þ{K—.ýío½Ô¡­ BGO’ľ”NÇ¡SÖôS488XYYù·¿ý-n¹sÛ,++»råŠ~‰;6ݺuK¿äæÍ›‹-Šþìܾ4M ~ø¡~ɇ~ £?;´5i›F>IûR:Iÿõ‰ŠŠŠîîný’žžžåË—[UÏ|\¿~ýÉ'Ÿ|å•Wjjjâ.rn›}}}@À«ãñxb?8·¯ŠŠ ãKÚ—Çã¹víÚ£>ª_òè£^»v-ú³£[Ó3nÄÑm2IëyœÜ×øÃ?ÿùÏú%úÓŸV­ZýÙ¹}y<ž¥K—ž;wN¿ä_ÿúWIIIôgG·¦g܈sÛd’DÍ­¯×mktt4 ¾øâ‹Ñýûöí+++·º®9[¹re{{ûL—º¦Mí«4œÛ×þóŸ'žxâðá÷nݺuëÖ¡C‡òòòbûcœÛ—¦iû÷ï/--=yòäíÛ·£û‹‹‹_ýõè¥m-qÖ7â”6ûrÇ$I%›28I„š¦]¾|yóæÍ999999›7oŽÛŽìI?¦Ü¾};vw´©%¼ÄÛ×õë×ëëëï¿ÿþìììoûÛqûcœÛ—¦iG]½zunnnnnîã?þÎ;ïè/uPkÆŸþ±s›}9z’Ìim-ƒ“Ä;Óc ã÷0!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4áéÓ§Ÿ~úéüüü%K–¬^½úøñãVWp¿VðÖ¯_¿aÆãǯ\¹òâÅ‹;wîüôÓOwìØau]7ójšfu _úÅ/~ñ›ßüÆëõFíééyê©§>ùäk«¸›‚0Îäääý÷ß÷î]« ¸™öÆùË_þ²bÅ ««¸œM×GFFžxâ‰7ß|³ªªÊêZ®¦ÙÏðððºuë:;;S¼þ‚6:ä ˆ¢Ð±]„\»ví?øÁË/¿¼aÆoòùçŸk¶\¯'¯×¦ëëóD_ŽãÖÖèËYb‡Rfœ½‚ðúõëO>ù䫯¾Z]]mu-lt°ÌÍ›77nÜøÒK/‘‚ÓØ(7nÜø«_ýêûßÿ¾Õ…±Ñ¦ä¤Ûoß¾››;ë íÓEÑ—³¸µ/{[£/gQ×—öºò/°9mÀ|¡}íÝ»×ê” /Çqkkô…(7lJvëq@ŒºQÏ!@4‚ A ˆFD#¢„Ñœ„‘H$ z<ž`0‰D¬.à<þ*z{{ûÎ;'&&¢¿úýþƒÖÕÕY[@u_¨wp–——÷õõÅ-¹té’UõÔ!“X¸páÝ»wõK²³³ïܹcU=u8ÅZ%%%qKŠ‹‹-©à\ÂÆÆF¿ßûÕï÷755YXÀ‰„uuu---@Àãñ–––­[·Z]Àa¼0†Ã®Ç>B” ¢„ÑÜ„ÑÓ­eeeqº5˜'QÕ ‡™x½Þ¶¶6N·aÏXrf#^¯·¬¬ŒÓ­@FØó–¡¯×›ÍéÖ #ìyK¾>1 N·™"m¢º$9ÝdŠ´‰ê’ ŒnÍçóqº5˜iÕ%û]ÐÀûP‚ ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4a$ ƒYYYÁ`0‰X]8ƒØáéÕ4ÍêæËëý¿.ÚÛÛwîÜ911ýÕï÷Ã÷ì² ,//ïëëÓ_Z^^~éÒ%+êǰÿðT„Ê7ž?~×®]¹¹¹^¯wÖ+{Ìõáã– ÌõN@ÉÃSynÛ¶­  àìÙ³)^_ûª¹>\IIIÜ’âââ¹Þ H#yx*‹/†Ãኊ ÕÕØØè÷ûc¿úýþ¦¦&sœKòðtÛQ£uuu---@Àçó–––­[·Z]ØäáiÞÁ2©ìçôz½………Ÿ}öÙÿ÷WWWÿïÿþïC=”‘{8šƒ–™“ÚÚÚcÇŽuuu­Zµjýúõ.\°º(€›Ùk0Îï~÷»'N¼ÿþû³ÞsÒå{÷î ‡ÃszD€µÂápcccÒ‹ÿ=Â4‚ðÆeeeããã¿g€³HÙ4‡x¨fë qÚž={ÚÚÚV¬X±hÑ¢ªªªÞÞÞ3g΄B!Õ$sÃa&,®'ô`T#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ AÍåA‰D‚Á`VVV0ŒD"V—¶Ãœôjšfu óåõ&½}çÎÑ_ý~ÿÁƒëêêÌ­ìËAsr¦QŸ{vq–——÷õõÅ-¹té’Yu€Ý9hN„Ffzv.\x÷î]ý’ììì;wî˜U؃椺 tó>Â’’’¸%ÅÅÅ–TöÄœô¸;ý~ìW¿ßßÔÔda=`7ÌI»ƒ°®®®¥¥%ø|¾@ ÐÒÒ²uëV«‹aNzܽàì#@ ‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4{áùóçwíÚ•››ëõz­® ‚½‚pÛ¶mgÏžµº€^MÓ¬®! ¯w…ÍéÊ'R7êíµF€ÉB€h!@4—¡7™p8lu]€¹ ‡ÃIGººG´éa&,Ðã`” ¢„ÑX]ÀWèw‡Æ~fÿ@{!™0›F¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„Ѥa$ ƒYYYÁ`0‰X]X‰‘¨çÕ4ÍêæË륋ööö;wNLLDõûý¬««3¥:°‡ŽÄYG}ú÷,!ËËËûúúâ–\ºtIq]`G‰¡‘YŸ… Þ½{W¿$;;ûÎ;Šë;rèHT„"ö–””Ä-)..¶¤°#1Žˆ lllôûý±_ý~SS“…õ€…‰qDa]]]KKK ðù|@ ¥¥eëÖ­VÖ`$Ʊàtì#@ ‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑB€h!@4‚ A Ó ëIDATˆFDS„W¯^ݲeËâÅ‹/^¼eË–ƒ+{¨. œÚ ¯®®…Býýýýýý¡P¨¦¦frrÒà&ÚW)-¯Ò°inn>wîÜ‘#GbKžyæ™Ç{ì¹çžK^7zÒ»ÀAÔzµk„§NÚ¾}»~ÉöíÛOœ8¡ôAHÚ ¼xñbee¥~É#<òñÇܤ¨¨Èçó=øàƒõõõ½½½JË@mÞ¾}ûÐ/ÉËË™éúµµµÇŽëêêZµjÕúõë/\¸ ´B€pöúúĉ'ªªª.\X\\¼{÷îp8üË_þ2•&nêõzÃá°âz‡“Žtu¨ö0“žžžÂÂÂØ’ááá•+W ¥ró7n”••_ƒeÀõœz°LEEEww·~IOOÏòåËS¼9ñPMmnÚ´©µµU¿¤µµµ¶¶6Å›=ztÍš5 êàKj7*ŽUVVîØ±£¡¡Áãñ8pàСCÝÝÝ~¿ÿˇ׭êÖÔÔ444¬]»6//opp°½½½¹¹¹££# ÍÒ›FÀ휺i4''§³³³«««´´´´´ô£>úàƒb)gÏž=mmm+V¬X´hQUUUooï™3gfMAæÃ ëR¬€ë9u›#¢„ÑB€h!@4‚ šÄ ŒD"Á`0+++ F"«Ë“0ý’rÃ7ðæôå’ööö;wNLLDõûý¬««SV؂ӧŸºïŠ Âòòò¾¾¾¸%—.]RP؈ӧAhdNÏÎÂ… ïÞ½«_’}çÎu€8}úqf™Œ)))‰[R\\lI%`&¦ßLÄacc£þ¬ß~¿¿©©ÉÂzÀL¿™ˆ ººº–––@ àóù@KKËÖ­[­. ”cúÍDÜ>B€±%B€h!@4‚ A ˆFD#¢„ÑB€h!@4‚P­H$ ³²²‚Á`$±º¶Ã”°œNWmÛ“n···ïܹsbb"ú«ßï?xð`]]µU°¦DêøõFl„ååå}}}qK.]ºdU=ì†)‘:‚ЈmƒpáÂ…wïÞÕ/ÉÎξsçŽUõ°¦Dêø7LŽTRR·dzzš=bû§§§ã.*..¶¤$ÉB%¢¯òË—/{½^ýò{÷îÝ»wïÊ•+Ï>ûl[[›Uå°P{{û³Ï>{åÊ•è@Ð_äõzûûûù¬l2›nTœ»mÛûíõz¿öµ¯y½Þ¸W<{™÷ ú|¾ééééééØ(㨙Dì#4b· Lº÷{``€=<3ì,..æ¨cì#t’ÁÁÁ¸%‰û ÙÈ”t$fU$A˜yI_å~¿?¶Äï÷755™[[H: ø¬l!‚0ó’¾ÊëêêZZZ€Ïç ---[·nµ°HVI: ø¬l!{í]KÝöz<žH$òüóÏ_»víßøÆ¾}ûêëë­®€Ý17Œq°Œ! ³8X%B—ãÄö€Þ ð„–0í½§?Å•+W~ò“Ÿðž¢ïÁ lÛ¶-öQ}¾'B×¾4çsVmmmqdžE"EUVV6Óß]éãv÷Ô+//7çAy¦AݨwÃa&Î:XÆÌÿº’x s°³Ä÷`Œºó=ñï–æƒe Åífž?"ñ+ºæ<.`g‰ïÁußaŸëŸí¨f"3#noœÁÎsÎ1Ó¿¿Pý¸ÆxoÃcƒ—ÁL³³³GGG6§7~êó™¡h“«™ìÐEâÞ¸™v6D"‘¸]mmm™-&no„×ë]°`A~~~vv¶ÒÇÉ‘#G@ô_pè `‰@q/Îìììüüüè VŽ9bN qïÁ™Þ ™}}ÎéŸú<Eݨ·>BæÏA¨ ÅÞá3]9 êÞü3½‹ôÛÐР´†KL0 úÉ·?kŸ à2~ý›=©?ósš'r„Fì„åååq/ܲ²2«Š™õ]d“#WM{oÇêOýs*Æ’²|…,ñÅ©4{bf}ÍÛ*{l5OìCݨ·>BæOݳ“:6x¦nÖw‘™^ ŸÏç³v•Ôãñx½^2`¦$Žn”3'„¢5ì36g…Ì Êì™õ5o«ì±Õ<±Ah@ݳ3'öÙæ6ë»È„¿±gÃçó >F°Á*©9'± ¤XƒÇIJ™¨ûl4ëkÞnÙcŸyb‚ЀºgǹŒßEª?üL½è:Pb:Z²JjN©$±ÒR¯ÁÌ2¯×·~¬—ñO©¼æÉ›ó„Ô=;n¥úÃoâÔ‹û¤o·UR¥b+Ý#•b ê6Ïô7ø3eö“ÝVøAh@ݳã,sú<«ôÃï¬9gá*iôðÄ=U*v¥²W,FéÓÄ'Ü`…LÅvÚYÿâf~6šõIfÕО<¡uÏŽƒØêL†³N=ËWIã PqðäLa}¬¸oU*Ê!ƒÃe£OøLQñí´³þÅís¬Š­ÞJÐó„Ô=;’ö *>ü¦’súñJeõBõw*’îÓ÷¨z«`êß”P·6–úWW}6JãåÍ—Ùm‹ 42ŸgÇòm ™* ½Y–Ù¿i|a_ѧï9­^(|©ÿEåPê})Z›ë7ãŸÒ{ueüÏáš!c9 ìïïê©§rrrrrržzê©«W¯¦r«´ŸË·d°€ôfY3 ½^…МV/åPêE9”z_ŠÖÆÒûãfðM‘^™ýs¸iÈXÎ#!ÇÆÆÊÊÊöíÛ722222²oß¾eË–MLLÌzôŸË·d°€ôfY3 ½^Ô}úN}­BQ¥þQ”CsêKÅé÷ÒûãfðM‘^™ýs¸iÈXÎ#!_yå•úúzý’úúú×^{mÖ¦ýìX~R¥ÌÆ f@z½ØáÓwf_z‰¢"‡ÒëËò­|S¤ýêÊà¶D— ky$ᆠ:::ôK:::ª««g½aÚÏŽåªY^@3 ½^lòé;Sƒoþ)¢n¯­ù‡Š¤÷ÇÍà›Âß´ü=nyä‘„ÃÃÃú%CCCEEE³Þ0ígÇò÷‰åh™Ë€´{±Õ§ïy3ÿ™ÿ=̳Ë·R¨[A·ä8Ëßã–A"‚ÐçóMMMé—LMMeeeÍzÃù<;–¿O,/ ƒæßË<ïaž~ç¿66ÿ™ç=Ì¿…Œ¬@Ìóïè¦7…fƒv,/ SB#žìÝ»·¥¥%vµ“'O^»v-ö«þ"ýÏ×®];yòdÒ‹¸¥÷8Ä_ýõ9ÝCâ‡ß7Þx#õ{Hº66§.’¦ˆ™÷ŸŸŸØ‚6—¿ÅO~ò“¤+©ßÃŽ;’†±_“܃%÷°uëÖ™¦º¦†‚ÐüM£óg‡Z¬!½»ÊTÙ;5Ÿbæ¿>7ÿÍP󼇌lØ´|ûðü‹±üM‘A–`"‚ÐüƒeæÉ_ÐÉ` éÝU H{ˆgjRdä Ãùó9Ÿï•güȈ4žÛ îe´ü5iù{ÜòlED¾üòˉ_ŸxõÕWg½¡UAh‡/èd°†ôî*ƒ¤7Ä38),ÿ¾Áüï6³GF¤WCÃØòפåïqË °„  ƒ/¾øbì õeeeããã³ÞPݳcÌ_ÐÉ` éÝU Hoˆ«Û—⺢Q5×»UqîÖôZË`[þš´ü=ny¶â‘„š¦]¾|yóæÍÑS¬mÞ¼ùÊ•+©ÜJݳcÌ_ÐÉ` éÝUfŸ„4rHѤH}eHQsº[Ek¥sªAÅ9,MZþ·¼[ñ Âô¨{vŒeü :Ö~é*½»Rô-¥Ô'»¢Iaù«ípÞðÔkP”Ä–¿&-ÿv¬›¾8‚ЀºggV< +íQbùr*Žj›u²ÏúŸöæ)õä÷Ÿ3UÀœþc¢¢µÒ¸¼^ï‚ ’ nW–å¯É4îÊòÓ¹AhÄÂ Ì gíWýæ4žì©ÿ§½´%® Åýk߸ B"ma¬±+$þGÃLm@›)ìã&»­þ¿¼åœõ^v‚Ј;‚ÐV{Å‡Ž ‡t'æþ¿Úš0hâV†â*Y°`¢ÿ¦›Tb¿>ŸÏøÜgvÚLO¸ I•ÊKÎ>Ii«÷²›xBêž3Ùg¯ø¬CÇŠ®ü%]žÙ4Ã)Ÿ”ºa—8X“Š[gUZ€×ëµCÇØêûvöy/»Œ‡ 4 îÙ1ÓœöŠ+ýð;ëÐ1ço´Ç™F­™ƒ&ÅRWCâ`MJ]§X€™I׬9[#S|ßq„‹"‚ЀºgÇd)¾ÍTøuè˜ù7•R=hR‰¥5l§5ç¯bf&q\³&|8›ÓûÎ>ÛiÝÄCP÷ìØ“ê¿ljD¿¦è8É‹‰c 1ˆuë@qfÝN«úÓ@¬ƒutÓ’XxTô5™XUÆ‹áËyBêž{Rýá7Åÿ*Ž“œk1¦ízQúM‰9Iý+ ŠÌôÑÄ´$Ž;†Ö´b8Ær‚ЀºgÇžLØ2™âq"æ|"Vý•ÁôŠqÇÿIƒåIœ¸f¦§?º8³8Ær¡iAhæ®xãÞæ"¶CÁÚ¿‚U¯I±AhÄ}A8ë 1mï¢ã1ÌgákÒ>oL™B#. B[}#Ê`Ÿˆa Û¾&mõÎu%‚Ј˂pÖ³x˜üaSÅæÃò×dÒ7#‡•ª¦nÔ{£÷îh^¯ºˆY¸páÝ»wõK²³³:´sçΉ‰‰è¿ßðàÁºº:+ DkooOúfLúνsçŽ5º“ºQï†qY.[¶ì“O>Ñ/ñù|Ÿþy\ååå—.]2·4žòòò¾¾>ý’ØÁÕ÷îÝÓ//++‹{/c>ÔúÿRq§˜ÆÆÆ¸] ÷îÝKüó ˜X€/ Æ-¹÷ÿéúýþ¦¦&ëBúÂtD"‘`0˜•• #‘Hfï¼®®®¥¥eÖ¯ñgöq¤¢¤¤Äà񯃠ZZZ¶nÝšÙ‡V:yDS´ïÑL&waæ±a3}eŠ#6«ŸíHÝ9*UݨwÃÞ5“÷&î!P·».q¡×ë---Ý·o_}}½ŠG0«H$òüóÏ_»vÍcâ~A3'=±ÐF÷¨Û]·¿0úðòåˤ `¡úúúË—/OMM½ýöÛqïPuûÍœ<Ò„s–¸‡@Ýî:ýþBE{¤ÍÌw¨™“G6ÎY[[ÛÿüÏÿè¿Eôæ›o’O”bò°iT¹ÔÇb- €ùæ4y8¾tNX#ôxf>UD&ªS¹u qf#óv8 €k¸u „Fæÿìp’@®áÖÆ>Bµ8 €k0ÐæŠ ôx’}]“p(Ú\„‚pÚ\±àì#@ ‚ A ˆFD#SÅIlØ)ƒÜðž>áÖ“Øp"™‰s1!Ýz[N$s"„FLB·žÄ€ÉœH|¡ÞbœÄ€}0‘2‹ L '±`L¤Ì"“H<‹“ذ™&‡’¦‡}„ñdŽÀé\?»8XÆHfŸ™‡cp:×Ï.‚ÐHfŸ™‡cp:×Ï.Ž5OâáXSSSlp`O±ý‚ÓÓÓqq(iŠÂxq‡cy<MÓ®\¹òì³Ï¶µµYU$jooöÙg¯\¹rïÞ½{÷îé/âPÒÔ±i4‰H$òüóÏ÷÷÷ÇÝ­Ë6¸pºÄý‚>ŸÏãñ|ãߨ·o_}}½Eu)Á>B#Šž×opàt¢Æû-À¹Øc*#Âqî6ǘÊ‚pFœM€Í1¦2‚}„`!J„ö‡­.A úr·¶F_ˆR¾QñêÕ«?ûÙÏþú׿z<žï~÷»¯¾újâaNÿW×·$•òܺi”¾œÅ­}yÜÛ}9‹S7ŽWWW‡B¡þþþþþþP(TSS399ipí«”–€ÚÍÍÍçÎ;räHlÉ3Ï<óØc=÷ÜsÉ«I+ðùøã,ôå8nm¾œÅ©k„§NÚ¾}»~ÉöíÛOœ8¡ôAHÚ ¼xñbee¥~É#<òñÇܤ¨¨Èçó=øàƒõõõ½½½JË@mÞ¾}ûÐ/ÉËË™éúµµµÇŽëêêZµjÕúõë/\¸ ´B€tšJ>ŸojjJ¿djj*+++Å›8pà{ßûÞ¬W³ú)˜!JA&÷=ê¿ü½ÛžžžÂÂÂØòááá•+W ¥r‡7nÜ(++ÏT…ÄÉä¦Ñĵ´ŠŠŠîînýuzzz–/_žúf°<©ÝG¸iÓ¦ÖÖVý’ÖÖÖÚÚÚo~ôèÑ5kÖ(¨ €/©ýºÉØØXeeåŽ;<Ï:ÔÝÝû¿!úï…ÔÔÔ444¬]»6//opp°½½½¹¹¹££# ©« œÚ5œœœÎÎή®®ÒÒÒÒÒÒ>úèƒ>Ðÿ÷,½={ö´µµ­X±bÑ¢EUUU½½½gΜ!J¹ó¤ˆÿ> ˆFD#¢„ÑB€hn«W¯nÙ²eñâÅ‹/Þ²eËÀÀ€Õ¥ãôéÓO?ýt~~þ’%KV¯^}üøñ¸+¸ ÍáááeË–éÏIëqr_ÓÓÓû÷ﯨ¨X¸páŠ+Þyçý¥Îíë‹/¾xã7¾õ­oåææ.Y²$ ½ñÆ_|ñEì jíüùó»víÊÍÍ{ÕE7bç6 úrô$1þ{Åd|’8>ÇÇÇ«««C¡P(ª©©™œœ´º®9[¿~ý­[·Ž?>44´ÿþp8üûßÿ>v© ÚÔ4íÇ?þñ /¼ _èè¾víÚÕÓÓsòäÉÑÑÑÇ>|8v‘£ûÚ½{÷ÿøÇææææææ·ß~{÷îÝÑKÕÚ¶mÛ Îž=›x‘q#6oÓ /GOƒ¾b”LEÿÕÂ4¯¼òJ}}½~I}}ýk¯½fU=iûùÏ>==ûµ»»»¬¬,ö« Ú|ùå—·mÛ¦išþUçܾ:;;7mÚ4Ó¥ÎíKÓ´œœœË—/ë—\¾|9'''ú³C[KœuÆ8¥ÍľÜ1I ²IÅ$q|nذ¡££C¿¤£££ººÚªz2ebbBÿÞæ¿ÿýï‡zhttTûêË×¹}ýèG?zÿý÷gºÔ¹}iš–ŸŸŸ„ÑŸÚZâ`5nÄ)mκ2ãÐI2S_Š&‰ãƒ°  `xxX¿dhh¨¨¨Èªz2åÝwß …B±_ÝæäääÃ?üÏþ3ú«þåëܾJKKß}÷ÝuëÖ}ýë_¿ï¾ûjjjΜ9»Ô¹}iš‡üñÓ§OŽŽŽŽŽþýï_µjUSSSôR‡¶–8XqJ›³¡C'IÒ¾ÔMÇ¡Ï盚šÒ/™ššÒr¢Ï>ûì›ßüæéÓ§cKÝæOúÓ^x!ö«þåëܾ²³³óòòþð‡?ܼyóæÍ›o½õV^^Þ?þñè¥ÎíKÓ´éééÍ›7ëw lÞ¼9¶µÍ¡­%VãFœÒ¦q:w’$íKÝ$!mgxxxݺuú…ÎmóøñãUUUŸþyl‰;‚Ðçó:tH¿ä­·ÞúÎw¾»Ô¡}išöë_ÿzéÒ¥ï½÷ÞÈÈÈÈÈÈ{ï½·téÒßþö·ÑKÚšÀ tô$IìKé$q|:eM?Eƒƒƒ•••ûÛßâ–;·Í²²²+W®è—¸cÓhQQÑ­[·ôKnÞ¼¹hÑ¢èÏÎíKÓ´@ ðá‡ê—|øá‡Á`0ú³C[“¶iÔé“$±/¥“Äñ_Ÿ¨¨¨èîîÖ/éééY¾|¹UõÌÇõëן|òÉW^y¥¦¦&î"ç¶Ù××¼:'öƒsûª¨¨0¾Ô¡}y<žk×®=úè£ú%>úèµk×¢?;º5=ãFÝ&“Ä3Ǿ„›6mjmmÕ/imm­­­µªž´Ý¼ysãÆ/½ôRuuuâ¥ÎmÓೞÇÉ}ýð‡?üóŸÿ¬_ò§?ýiÕªUÑŸÛ—ÇãYºté¹sçôKþõ¯•””DvtkzÆ8·M&IÔÜúJqÍѶFGGƒÁà‹/¾ÝŸ±oß¾²²²ññq«ëš³•+W¶··Ït©kÚÔ¾ºAù}ýç?ÿyâ‰'>|ëÖ­[·n:t(///¶?ƹ}iš¶ÿþÒÒÒ“'OÞ¾};º°¸¸øõ×_^êÐÖgq#Ni3±/wL’T²)ƒ“ÄñA¨iÚåË—7oÞœ“““““³yóæ¸íÈN‘ôcÊíÛ·cWpG›ZÂKܹ}]¿~½¾¾þþûïÏÎÎþö·¿·?ƹ}išvôèÑÕ«Wçæææææ>þøãï¼óŽþRµfüé߸;·iЗ£'ÉœÖÖ28I¼3=68~!óAD#¢„ÑB€h!@4‚ A ˆFD#¢„ÑþÍê²£Î[Ó IEND®B`‚gsl/doc/images/rand-pareto.png0000644000175000017500000004132013536674414014666 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœíÝy\õãÇñY¹äR/TÐÀQ<"5ERóHRóÊoå×,Sûj*j¦š…æ÷û5Ï’4ûj¦}=0Ê+<AMAD@äSà÷Ç~¿|ùáÊ9»ŸÝåõü£ÌÎμw’}ïgfvFQ^^.Í2€Æˆ@ (` €€@ (` €€@ (` €€@ (` €€@ (` €€d ¨ÄÒÒ²_¿~»wïJ…Š&&&ŽŽŽ\¹reRRR•yd\ìË”}i€(0 òÿŠ‹‹›?þ’%K6mÚ$ûZÞ=Êùùùׯ_ÿè£rss{öì¹ÿ~ ÇÐÎuš¤(//Ðy EÕ?¥S§NÍž=;..NÝ+jøÓ#""† vúôi5ÅhHì¾d@k1Ô¢wïÞ‰‰‰¿&''Ï;×ÒÒÒÙÙyÑ¢E………Êé …¢  à¯ý«££cå¡Þ¯¿þÚ§OSSÓöíÛoÛ¶­bf©Òn䊙>Ü·o_ ‹¾}û9r¤NQ{ôèñÎ;ïlذ¡òZ$IÊÍÍ]´h‘«««¹¹¹µµõ°aÃ~úé§§ÅPùB*‡ÌÏÏŸ3gŽ………ŸŸ_LLLÅC*ǸkQ¹®Ú¼v…BQZZúᇶoßÞÄÄÄÍÍMû$€ú+Ð`Oþ):uªC‡¿¶k×nûöí¹¹¹ñññ&Lxÿý÷+ž8}úôàààìì슙oܸagg§œxáÂggçÐÐЧ­èܹsÍš5Û³gOzzzZZÚ7ß|ckkûÇÔ2§Òµk×:vìXež1cƼóÎ;wîÜ)..ÎÈÈ8|øðóÏ?ÿ´å¨|!³I’ôÊ+¯lܸ1%%%%%eãÆŽŽŽqqqÕ¤ªüܧ=Týk—$éõ×__²dÉ­[·òòòNŸ>Ý¡C‡½{÷ªÜ€æQÀ€ *—Dzzú÷ßߦM›7ªœ933³¢›%IÚ°aC•¦L™òÙgŸUü2räÈ'W¤ôÒK/mÞ¼¹ò”   ±cÇÖ˜³²‚‚33³*ó4mÚ´r›V¿•/¤r‰®ZµªòC+W®œ2eJ5©jSÀÕ¿vI’–-[VùÑ#GŽx{{«|E€æQÀ€ *ïU²°°èÓ§ÏöíÛ+-((X¹re§NÌÌÌ”óV<1>>¾ÊÒ:vìxóæÍŠ_333[·n]1•™Û¶m{÷îÝÊSÚµk÷´œ*§?zôÈÜܼÊ<}úô™={vRRRm–£ò…T.ÑŠñ®RlllË–-«IU›®þµ?¹ÒÌÌL[[Û'×ÁÙ € ª?Qhþüù7nÜX»v­›››……Eaa¡r¸©|bqq±±±qåùMLLŠ‹‹+O100(--U¹"SSÓììl“Š)EEEÖÖÖ‡™k“óÚµk/¾øâ­[·*Ïÿî»ï;v¬}ûö}ûö}饗üýý+ÊVYŽÊR1›ò±©©iÅCVVV%%%*—VVV¦üŒò´u)§TÿÚ•Ç€ T>Ž“°µÛ¿ÿ×_ݳgO I’nß¾]ùÑ*¥%I’••Õ½{÷*RV¶¯JŽŽŽééé•§¤§§·hÑ¢N CBB Te¢³³ó?þøðáý{÷öë×oÍš5³fͪf!O¾ÊîÝ»WåW{{{åÏ666>¬üh|||mb×øÚ«´/ Uø× ¨]•Áߎ;ªŸðàÁTù©©i•Á±§§çáÇ+O9tè§§gíãEFFnܸñÝwßUù¨‰‰I÷îÝ_ýõ£GîÛ·ïi1j\åסC‡*vss;wî\åG·oß^ñs5ëjøkDÒàîn@oUÿ§4yò䀀€”””´´´O?ýôå—_–ž~€³¼¼<::ºeË–;wî|ðàA^^Þ‰'*NÂòððøñÇ?~\1ó™3glmm•g§§§ïÙ³§Y³f.\¨>çãÇ333ÿý÷÷Þ{ÏÞÞþ‡~xrŸo¾ù&11±¤¤$%%eÉ’%~~~O‹¡ò…T~™“'OþòË/SSSSSS¿üòKGGÇ[·n)ýî»ï\\\ÂÂÂ=zûþûï¿þúëÏ­f]Õ¿öê#ÂñoAõoëÍš5³±±™>}znnnõ\^^~åÊ???KKK33³ÁƒŸ8qB9ýèÑ£®®®†††•Ÿøã?öîÝÛÌÌÌÌ̬wïÞ¬&§R“&Mìíí}||«œfU±äÐÐÐqãÆ5oÞÜÔÔÔÅÅeñâÅ>|ZŒ 8//oæÌ™¶¶¶æææÃ‡ŠŠªpXXØÄ‰ííí­­­ûöí":50@cÆ Ñ)P[ õT` Pb €^¡€€@ (` €€@ (` €€@ (` €€@ (` €€@ (` €€@ (` €€@ (` €€@ (` €€@ (` €@{ øòåËo¾ù¦B¡¨qfÅ4€zÓÞž2eŠƒƒÃ™3gj9ùÿ§Öl4Bû»J¡¨9dmæ‘w€Æ@} ½#`ô˜þp‹-Œ[¶lpãÆ Ñq¨Žž°¿¿ÿþýûsssÃÃÃ{÷î=pàÀˆˆÑ¡x*8ØYýï[¶l9xðà±cǪŸ-00påÊ•*ÒþÍÐõÖÏNKKëØ±c^^žÆÖÐKœ„U7Ô'@Ëégÿý÷ ¨YttôéÓ§E§ €‘èõTyŸÀ!CÞxãgŸ}¶yóæIIIß}÷ÝçŸþË/¿ˆMÔÆ±cÇ~ùå—Aƒ‰@Ó´÷`§ÊËIV¤­\À§NÚ´iSXXXvv¶£££¯¯ïÒ¥K;uêÔUkífžyðà››[FF×O´S£> Kó(`hRûöíOœ8áââ":(`¢€¡I111:t033€ °FQÀ%¾†€^¡€€@ (`@¤+V¬ZµJt PÀ€Heee’$•––ŠÎ@£(`@¤òòr…BQ\\ìèèXTT$:Í¡€‘”#à&Mš´mÛ622RtšC"Uì‚îÓ§Ï… DÇ 9ºz7$@?¬[·NùCŸ>}BCCņ IŒ€­àíí/:Íá¢Ç*p-h€ׂ@¯PÀ@  €0PÀ€Ho½õÖW_}%:(`@¤²²2…BQñkvvöü!0¡€‘ÊËË•—¢Tº{÷îÔ©Sæ 10 Rŵ •<<üçŸVG$šQó_¾³³s·nݾýöÛŠ)ÇïÕ«WÇŽÕ hêt7¤Ê^xá…C‡Éž€ÆÔj×ö•+WfÍšÕ²eËÏ?ÿ<(((22òïÿû3Ï<£|µtùò寿þ:888;;»á;ë9 qtt¼zõªƒƒC]Ÿ˜““3`À€+W®Õðm~ !øpÏž=ÿøãAƒùúúvíÚõôéÓZÕ¾’$M™2ÅÁÁáÌ™3¢ƒu“––Vö•$ÉÊÊêêÕ«´/ »êð׫P(¬­­íììê·ÇL­bbbDG j5¾r劷·wLLÌÉ“'CCCG§îd豚wm/^¼888xË–-£GVN9qâÄ_þò—€€€•+Wª?aÝȲ³žcÀ%‘Ç€ïܹQѾ’$ :4<<üæÍ›ê@c oC½:}T |Ú ^Ï6  ~Ô7nÔ¬Ö…4BEEE&&&¢S€œ삞>}z~~~õOÎÏÏŸ>}ºÜ‘ “6lØ0nÜ8Ñ)£èèè]»v‰N ÎžZÀ{÷îíÝ»÷‰'ž6ÃñãÇ{÷î½wï^õƒŽ)))9uêTÚP…™™YaaaC–```ðÁ°ÏÐ9O-à›7oz{{5jàÀ[¶l¹qãFnnnnnîõë׿úê+Ÿ^x¡oß¾œŠ¥²²²‚‚‚S§N‰¢cê})Ê îîî–––üñ‡\‘hÆS ØÉÉiûöíIIIcÇŽýå—_†îèèèèèèççwâĉI“&%''oÛ¶ÍÉÉI“qŸFñ_U~†Æ”——[ZZ9rDtSZZjhhØÀ…L˜0áûï¿—%ál#8 «V¯^}õêÕóçÏ'$$ðé§öŒŒŒŠŠŠØÁþùçСCêqc%Õã~ÀÐveeeîîî&&&QQQ¢³è’†ï‚–$©S§Nûöíãs [jUÀ±±±S§NmÕª•±±q«V­¦Nzûömu'ƒnQÞ×öÅ_üñÇEgÑ%¥¥¥² [û÷ïOº¥æ¿ü«W¯>ûì³®®®¿ýö[NNÎo¿ýæââÒ¿î€Ê”ÿüs 䃮¨¸ „‘‘ј1cöïß/:QcTRRrþüyÑ)ÔJÍß/®Íwôì²\ˆ£Þ~ûíŽ;Λ7O’¤ãÇ/[¶Œ&мœœœ¶mÛÞ¾}»Y³f¢³zBä…8ÊkAÉ [*vAK’äëë{çÎ;wîM¤òòò,--e\ ••Õ°aÃ8 ã2¨ W‚<*°¡¡áK/½Ä^èÉr¬*&Ož¼gÏy— @(`È£rKÜ vªl4YŒ5*:::))IÞÅ yT¹«Ï AƒîÝ»wëÖ-‘´Ÿ:FÀMš4ùøã‹ŠŠä],ÙQÀG•ÁœÁ¸qãöíÛ'0’öSGK’4cÆŒŽ;ʾXò¢€!'÷¦Nœ8188XT`kk›™™):1(`ÈãÉË÷ïß¿  €›v€J0äñäX¡PŒ?žA0¨DC*Oè6mÚž={ÊÊÊ„DmFC* ØÃÃÃÖÖö×_ ´ yÑ믿¾mÛ6Nʼn†\j<,I’»»{çÎÿõ¯i&ª(..æÒЀö €!Z~£æ­·ÞÚ¼y³òàIëׯ_ºt©èþƒ†)--U_$íG yÔuoê³Ï>Û¢E‹õEÒ~}ûö=wîœèÄ €!zÎT‚Õ”´ yÔ£€ýýýsrrN:¥¦H Í(`È£®Ç€%I200X¼xñÚµkÕ Õ{üøñ‰'D§/ ò¨ß7jnݺuþüyuDBõ?~¼dÉ’ÈÈHvÌÐêkÞæ Yg¾ð ¸¦š IDATÍ›7ß³g,‘@›QÀ‡\ç­^½zùòå……… _ê*77wĈl|@3(`È£'aUðññéÕ«×úõë¾(Ô•¥¥¥¹¹yPPè @£ÀÁN8\2n´øøø>}úDFF¶jÕJ–¢öþüóOŸëׯ7oÞ\t@+¨¯h(àº*++366.--•kK–,INNÞµk—\ DíÍ›7¯¬¬lÓ¦M¢ƒZ“° Õd¿ Ä|ð믿†……ɸLÔR```jjªŒ§¨ÄPOFÀuUTTdmm-ïÉ;{÷îýä“OÂÃÃe9´ õÃZ­¬¬Lö JLš4ÉÚÚúÿø‡¼‹Õ*ÁÁÁ¢Sƒ† ÊÊÊÔ1NÝ´iÓÊ•+ïß¿/û’µׂ3þø!5‰‡‡ÇäÉ“—.]*û’µ—¢3 2PßH.00ðçŸ>{ö¬:.#` 1ã2ë*O²¶¶þüóÏgΜYTT¤Žå‹ÅhÌ8ÝW΂®«<óÌ3ê;Xûâ‹/öêÕkùòåjZ>ªš‘‘ñòË/‹ˆÁYÐÐjêÞ•ºyóæM›6EEE©oxšæÍ›Ï;7==]t@ßPÀúvA+µiÓæã?ž:ujqq±úÖ•ºuë6eÊ”÷Þ{Ot@ßPÀŽeNŸ>ÝÉÉé£>RëZ ÒÊ•+ÿý÷£GŠè 2P÷XéŸÿüç–-[.]º¤î¡ ssó­[·8p@t@¯p¶‘ œ„UW ¼s玺W´{÷î 6„‡‡«{] q´œÆ¾Ï:uêÔöíÛ/[¶Lëµ¢€!Íì‚VÚ±cǾ}ûŽ?®™Õ€šPÀ&¯èdkk»cÇŽéÓ§§¥¥ifêóå—_¾ýöÛ¢Sƒ† 4|IÅAƒÍœ9ó•W^Ñõ{Ör%, 1ÓÞ¾{÷î¸q㬬¬¬¬¬Æ—˜˜XÍÌŠ'h,'$×4^¾|yyy¹®+‰kA™–þñçååùúúzzz&$$$$$xzz2$??¿š§”ÿ‹ ID‘ÿýï Õäz¡tíڵɓ'—••‰è0--à­[·öíÛwéÒ¥¶¶¶¶¶¶K—.íÓ§Ï×_-:TÓäIXZ¶l¹k×®)S¦¤¦¦jxÕrÑÝpçÎSSSׯ_/: Ã´ôÿðáÃS§N­ûì3Ñ)êÃÀÀ`×®]ëׯ?wîœè,€®ÒÒމ‰éÞ½{å)ݺu»víZ5OiÑ¢…±±qË–-nܸ¡æ€ø„Œ€•–-[fgg·`Á!koÌœœœ¶oß>iÒ¤ˆÎè$--ବ¬fÍšUžÒ¼yóÌÌ̧Íïïï¿ÿþÜÜÜðððÞ½{80""Bý1ñÏæU(Û·oÿ÷¿ÿ½}ûv!³‘#G®Y³FG÷¢Â‰ нÓmÚ´™?¾‰‰Éûï¿ìرꟸråJõ§ÓGÀ’$Y[[û¬½½ýk¯½&:ÎSiÛvk¸–-[8p`äÈ‘ÎÎÎU®¥  ­Øm]WZZª%» +´nÝú—_~Y²dÉ¡C‡Dgy*íÙu/#//¯M›6ùûûW3Œ€!ƒ²²2íÙ]ÁÍÍíðáÃ#GŽ4229r¤è8*èeK’4aÂåé“NNN¢³ÚKÁÉ¢OR(Ø,usèСmÛ¶içÝ2.\¸àïï¿cÇíì`ZN} ‡Ÿ¾¡yÚ<’óöö>tèÐŒ3´óó€F‹]Ð6°$IÞÞÞ?ÿüó¨Q£Š‹‹Ç/:H YhÕ×Tòôôüå—_FŒQ\\ :PÀƒ–€•ºuëvòäÉçŸ>;;ûÍ7ß@cGC:QÀ’$=óÌ3aaaÇOOO §qY½zµ‰‰É¢E‹D´ èJK’äììüûï¿5*))éïÿ»‘2cÆŒÁƒK’DJºñ¦ -§ýÇ€+spp8}útJJʘ1còóóEÇi,Z·n¶sçÎ5kÖˆÎh 2С°’……ÅÁƒ›5köüóÏgddˆŠ1wîÜÍ›7‹Z»æµhÑâøñã»ví:þ¼è,€xºô¦ ­¥s,I’‘‘ÑÎ;}||¼½½¯]»&$ƒ.n·jݺõåË—ûöí+: ^ãú㇚èh‘(еk×._¾|ðàÁB.­£Û­š6m*: 82ЭcÀUL:µsçÎ/¿üòåË——/_®ÉFÔ¿»!¨½F÷éê ë#¹>}ú„‡‡‡……5J“‡„u}»hþø!=(GGÇÿûßÝ»wïÝ»÷•+W4³Ò­[·Îš5K3ëÒrÜþn¿iBKèAK’ddd´nݺO>ùdøðáÛ¶m§‰‹‹ëׯ_RR’è €Féü›&´Aii©°ÒË/¿öÅ_ää䈎Ó(tìØq„ ýúõ Ð=yÓ„Xeeeº{Ö“:wî|á›=zœ={VtœFáÝwßݼyóèÑ£÷íÛ':  !0d » +333Û¼yó_|1nܸåË—?~üXt"ýçïïâĉ”––ŠÎh‚^½iBý+`¥^xáÊ•+/^ìß¿ÿõë×EÇÑ]»vÝ·oŸ>íMª¡‡ošÐ<}:\E‹-Ž92sæÌ®]»¶¤¤Dt"zB?ß4¡azv ¸ …B1gΜððð³gÏöêÕëòåË¢Ð0d ¯» +k×®ÝáÇßÿ}??¿>ø@–Û(Mš4‰sŽ€FKÏß4¡¡€•&OžçááÒÀ¥q)ÊÚxøðá”)SEdÖ(Þ4¡n§€%IjÙ²åwß}·}ûö¥K—Ž92..®Þ‹jTÛ­Þ¬­­½¼¼zõê,: 'þø!¾Cý <8""Â××·oß¾«W¯.((¨ÇB׆B¡xûí·=ºråÊ™3gæææŠNȃ† çHÎØØø½÷Þ»téÒÕ«WŸyæ™ï¾û®®4nœÛ­~”§¿YXXdee‰ÎÈCÁ5П¤P°Yêæý÷ß·µµ]¼x±è ÂüöÛoï½÷^iié'Ÿ|âëë+:Ù¨¯øô 0’óññ9þü¢E‹fÏžíïïõêUщh»Fý¦ ¹4ÂcÀOR(&L¸v횯¯ïðáÃ_yå•7nˆ@{QÀ#à &&&óçÏ¿uëV=8mÚ´[·n‰¥ç;eÊ”k×®‰¥·RSS/^<~üxî( Ý›&d@«dii¹téÒØØX__ßñãÇGDDˆ¥‡ºtéáîîÞ³gÏuëÖ‰NÔ ošÇ€«aiiùþûïß¾}{À€/¼ð‚ŸŸß‰'8Í^^¦¦¦+W®<þ|tttNNŽè8@­PÀ#à™››ÏŸ??..nüøñ ,èҥ˶mÛ«É«cÇŽß~û­½½½è @­ð¦ PÀµÔ¤I“3fDFFnÚ´éÀÖÖÖ¯½öZzzºè\àM2 €ëjðàÁGŽéѣǃ:wî>>ï¾ûn§N>ýôSIJËÏÏwuu ÌÎÎø 2`\?ÊífmmýÖ[oEDD|óÍ77nÜèܹóË/¿|ôèѲ²2Ñõ„¹¹yhhè;w\]]W­ZÅÕ¤¡%xÓ„ (àú©r7$ooïmÛ¶%$$Œ1"00°C‡K—.媖²pvvÞ¹sçÙ³g6lØ : IÜŒA%nÆPW£FšþøãøøøuëÖ]¼xÑÝÝ}èС[·nÍÌÌ € xÓ„ ÊÊÊ8 KM † ¶k×®{÷î½õÖ['OžìСƒ¿¿ÿÎ;322D§Ó¿þú«èh\(`È€cÀ`jj:f̘½{÷&&&Nœ8ñÈ‘#...#GŽÜºukrr²èt:/!!á7ÞèѣǶmÛ DÇA£À›&d@k’¥¥e@@Àþýû“““_{íµÐÐÐîÝ»÷éÓgíڵׯ_NWyzzÆÄÄ|ú駇rrr:räˆèDМm¤'aÕÕ‹/¾8cÆŒ_|QtFêñãÇ¿ýö[HHHHHˆ‰‰É¨Q£FŽùÜsÏ™˜˜ˆŽ¦“îÞ½kbbâèè(:´‚ú¦Q®«^xaΜ9£G¤±+//ˆˆøùçŸþùçèèè~ýú 2däÈ‘¢£ºŠ³ ¡ÕØ­% EÏž=—.]zæÌåAÍ„„„Ñ£G;99M›6-88øÁƒ¢3ê°ôôôõë×sÄráM2 €ë§gÏžê»C°Í‹/¾¸iÓ¦øøøS§Nõïßÿ‡~pqqéÕ«×{ï½B×Uaaá7ºwï>|øðÝ»wçææŠNÝÆ›&dÀ÷€ë§Ê•°ÔÇÕÕuΜ9xðàÁ_|acc³uëV—îÝ»ÿõ¯Ý·o ®¶mÛnݺ5))iæÌ™?üðÃçŸ.:t›‘èÐ|¸~4¿çÀÈÈèÙgŸ}öÙg%Izüøñ¥K—~ÿý÷ààà¿üå/­[·îß¿ÿ€ àââ¢ÉTºÅÔÔt„ &L:† Ø]?«dddäííííí½`Á‚ÒÒÒÈÈȳgÏ;vlÙ²e=òòòêׯ_ß¾}½¼¼ìììD…ÔEÇŽc£¡6(`È€®Ÿ²²2\™¡¡¡§§§§§çܹs%IJOOÿã?Î;÷ÙgŸ]ºt©yóæ èÓ§O¯^½ºwïnff&:¯ö*//ÿæ›o&Mšäáááïïÿâ‹/vîÜYt(h)¾o£_Cª+Ÿ>úÈÇÇGtȯ¼¼üÚµkçλxñâ¥K—®]»æêêêååÕ½{÷.]ºxzzZ[[‹Î¨uŠŠŠÂÂÂ:tùòå3gÎˆŽƒá{ÀE×Õ€>ýôÓþýû‹µ+..ŽŠŠºtéRdddtttdd¤£££——W=ºtéâááÑ®];Ñ9©¯Ø ° ºñhÒ¤‰——————òײ²²?ÿüóâÅ‹‘‘‘_|ñELLLnnn—.]ºvíÚ¥Kww÷®]»ÚÛۋͬ…8ðÃ? <ø¹çžëÔ©“è8ƒ¡ž Œ€ëÊÛÛ;((¨OŸ>¢ƒ@¼¬¬¬¨¨¨˜˜˜èè蘘˜«W¯6iÒ¤k×®]»víܹ³«««»»;WyLII9vìXhhhXXX~~þúõë§L™":Tc´FQÀuÕ»wï-[¶TŒŠ€Ê’““££££¢¢þüóÏ[·nÅÄĸ¹¹uêÔé™gžqwwwuumß¾½±±±è¤b$''+ŠV­Z‰ÕØ ­VZZÊ÷€ñ4­[·nݺõðáÃ+¦¤¦¦Þ¼yóæÍ›111'Nœ¸uëÖ½{÷Ú´iãâââêêêæææêêêââÒ®];##ýjݺõÓš?¾B¡èׯŸ——W‡4™ ÀPOFÀuÕ£G]»vuïÞ]tèªâââøøø[•ÄÆÆ¦¦¦¶mÛ¶]»víÛ·wqqqvvvrrêØ±cã9¨|áÂ…Ó§O_¸p!<<¼¸¸8<<¼mÛ¶¢C5:ì‚Ö( ¸®ºuë¶gÏž®]»Š½RTTŸ{çÎÄÄÄØØØÇ·mÛÖÙÙÙÅÅ¥}ûöíÚµkÓ¦MÛ¶mõ»˜“’’Zµj¥òlÇäääj†Ñh vAC«qtý899;w®M›6¢ƒh)“Î;?y!‹¬¬¬ÄÄÄÛ·oÇÆÆÆÆÆž}úuïÞ½[·nÞÞÞ“&MÒp6Ô p3†ú{)JÝekkkkkÛ­[·*Óóóó’’’ïÞ½{æÌ™¤¤¤¤¤¤;w›;:::88´mÛ¶mÛ¶NNN-[¶tppprrjÑ¢…Nÿëµ°°HNNNKK‹ŠŠºråJxx8¬+Ø×ª» ëªS§N‡vssDÇ´jÕêÒ¥K-[¶DÿÝ¿?------999!!!111%%%---))éþýûvvv-[¶¬he{{{‡-Z´hÑ¢mÛ¶úqéÍ?þøcÚ´iÊ/ƒ¹¹¹uëÖíÉO0P‰]ÐÐjì‚®FÀcoooooߥK—'züøñýû÷SRR“““ïß¿ÿ矆……) ûîÝ»ÆÆÆ-[¶T.A9ŒVþàèèhÿ_šEuÕ³gÏýû÷ÇÄÄ\»ví矾zõ*,C=×UÇŽ?Î×$êªE‹ÊK9Š‚ê<|ø055õþýû÷ï߯üCzzúƒÒÓÓ³³³•5ܬY3+++;;»V­ZÙÛÛÛÙÙ988(w˜;884mÚTôK©ÙîÝ»ÿö·¿)O;wssLJJRþ\ÑÙeeeÙÙÙYYYV•(ëÙÐа¢¹ÍÍÍÍÍÍ-,,”ZXXXXX˜™™YYY5mÚT¹çÙÀÀ š«X¿õÖ[Ç¿wï^ZZZjjj^^žÊÙvîÜyõêÕV­ZÙÙÙÙÛÛ{yy©¬sýCC|KyªW]ŸUQÕÊrss?~œ››[q0»   //Oùh~~~^^^AAAnnn^^^II‰rØmhh¨a7iÒDÙÖfffM›6577oÚ´©µµµ¹¹y—.]òóóÏ;פIeÙ›˜˜˜››·mÛ6###%%%22òþýûï¾ûî°aÞLœÐ¢E ;;;;;»Î;×ã%köµªÀ.躲··¿~ýºè 4¤¼¼\¹3¼¬¬LÙÐ%%%yyy¹¹¹ÊÚ~ôèÑ£G>|X^^^PPŸŸŸ­lî‡æææ–””4mÚÔÊÊÊÔÔÔÈÈÈÒÒR’¤Šñ·$IÊ÷íÛ·-o°Êô¤€ïÞ½ûÎ;ï?~\’¤aÆmܸ‘¯Äh÷®ssóŒŒ ý¸Ò! ULMMMMM%Ijø¡1õ]®NF-yyy¾¾¾žžž žžžC† ÉÏÏ«a\?l7 1Ó‡ƒŸþù¥K—¾ýöÛŠ)¯¾újŸ>}æÍ›W¿r ¸®ÌÌ̲²²”Ÿ7Q{Mš4yôè‘Þ_HÐiêk}øô}øðá©S§Vž2uêÔƒŠÊÓ1’«nÆ4fúð¦Ó½{÷ÊSºuëvíÚ5Qy! ¸~Øn@c¦ûZŸÜWRRÒ´iÓ¢¢¢ú-]ÐuehhXRRB—Ð?jl„rÝgll\\\\yJqqq“&Mj|âŠ+Ô²MzDMå¥C=GGǨ¨¨Ê7UMMMíÙ³gJJJýȸØhõÃv«¶[=°Ñꇓ°ªãááYyJTT”»»»¨<ÔH xôèÑ»wï® €>@çPÀ@  €0PÀ@  €0PÀ@ ü?wïÞ7nœ•••••Õ¸qãE'Ò —/_~óÍ7mll …è,º!,,lâĉöööÖÖÖ}ûö H7œ?~Ö¬YÎÎÎMš4iÕªÕСCÿõ¯‰¥cRSS]]]ùS­ Åd_üyyy¾¾¾žžž žžžC† ÉÏÏKL™2ÅÁÁáÌ™3¢ƒèŒÞ¿?$$$%%%(((00ð믿JÌ›7¯gϞǎËËË‹ŽŽ^´hч~¸bŠѹtFyyù´iÓV­Z%:ˆÎ(ÿÿd_>wCúÏ?ÿüÒ¥Kß~ûmÅ”W_}µOŸ>óæÍ˜J·p·ÑZZ¸pá'Ÿ|Rñ:**jìØ±±±±bS颸¸8//¯¬¬,ÑAtÆ """vïÞÍŸjmh`+1þÇO:µò”©S§j‚§Q¹#‹WÕP¹Å²²²lll4F‡„††nÚ´é×_ÍÎζ··ïß¿ÿÂ… ½½½EçÒ=®Ñ©S§6mÚ–íèèèëë»téÒN:É»þ7 Ç€€@ (` €€@ (` €€@ (` €€@ (` €€@ (`ÿ3qâÄÅ‹Wž²hÑ¢—_~YT@)ÊËËEg -222zôèqøðá=zH’tåÊ•#FDEE9::ŠŽèFÀþ§yóæ_}õÕìÙ³KKKKKKgÏž½~ýzÚPFÀªš>}z—.]ÊËËOŸ>ýÓO?‰Žè' @UiiiC† ÉÎÎ>uꔫ««è8€~¢€T5oÞ¼Áƒ?xðàêÕ«_~ù¥è8€~â0€ÿçĉqqqcÆŒ™5kVDDĉ'D'ô#`ÿ“••Õ»wï_~ù¥cÇŽ’$]»vmôèÑ—.]²µµ Ð7Œ€üÏ›o¾ l_I’ÜÝÝ'Ožüæ›oŠMè%FÀÀ(` €€@ (`ø?á„å?3ϼÅIEND®B`‚gsl/doc/images/rand-gaussian.png0000644000175000017500000005003313536674414015207 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìÝy@Ìùã?ð)&JJJŽ$W‡RHIE‘Õ*r”Z6÷:×Z»D,Ö^²$kÙ$GR ‘b9J*ÊUèÐ}èÖ9¿?úüúÎ2ÕT3ï×{fž¿ôž÷¼ßÏF3Ïy¿Þ—‹ÅbµÄIE(`PÀ €@€  @ €0(`PÀ €@€  @ €0(`PÀ €@€è‚W¯^­\¹räÈ‘RRRRRRcÆŒYºtéÝ»w‰„ãù[õéÓGYYÙÜÜ|×®]¹¹¹|ZiÛ¢xû‹ðüeà0·.]ºdkk«¯¯SQQ‘••µ{÷îäädSSSÒÑx†Åb±X¬ÚÚÚçÏŸïÛ·¯ªªJ__?88¸K ¡²Q· ¸ÄX,é  ##ÃÊÊ*..nðàÁìÓ[ZZ6oÞ|àÀRÁxHLŒÃBrròÌ™3ÿý÷_mmíž,‡‡óóê¹da €+ذaÃ'íË`0ÄÅÅÙÛ÷ýû÷_ýµ¬¬¬ººú–-[>~üØ:ã†ZÛĪªª-[¶Œ5JZZº_¿~3gμråJ§±/³ƒõ677ïÙ³gøðá}úô=z´¯¯o—~ññãÇoܸ±íwì4së m£ÙmϪ««[»v­²²2Ç‘çÚÚÚ+V 0@FFÆÆÆ&--íóWéó—®½uµÍadd$#####cddtõêUö%ôð•è!0W¢££mll:ÍÄÄd„ ùùù·oßÎÊÊÚµk7 ÷ððhjjŠŽŽ®¨¨xûöíúõë>ÜéC\®wõêÕuuuÑÑÑeeeÇ÷ññ9þ¥í]Ô6eëÖ­ñññgÏž-..f±XuuuÍÍÍí-°¥¥¥íßçÎ+..9r¤¦¦æ’%KÂÃÃÛÛÁC\®wøðáì3÷ïß¿¼¼¼K¿û»wïTUU?™ÈM0vŸï>g÷ÉòUUU‹‹‹Û›™ý¥ë@aaáÀÙ§(++´ýØóW GÈô>€ Y¶lÙ¯¿þÊñ¡¶÷‘ªªjNNNÛôÖ#‰Zÿ-//_^^Îþ¬ŒŒŒOÞ€?~LNN>vìØ¤I“–.]ÚéCܬ—ã{¼½7~{Ó÷îÝëééÉqžŽƒu¼dw[À¿t¬ëó-àììlö-à"Pm\IKK4hÐ'=ѪíS»ÿþ­Û ­6oÞÌ`°½víû³~øá‡ö>îKJJddd:}ˆ›õö¼€“““•””ÒÓÓ;~.{0IIÉúúúN—ÌòÇdh÷îÝmû€;~é:X×çû€}}}çÌ™ÃM$ `€+ZZZ?ýô“‰‰‰Ïëׯëë뫪ª^¼xñË/¿´Íccc³aÆ‚‚‚¢¢¢ß~ûíÝ»wmmܸqݺuqqqµµµ™™™ßÿ}IIIÛ£fff¹¹¹MMM033ëô!nÖÛ=ÍÍÍååå÷îÝûöÛogΜyôèQMMÍOæé ˜††Æµk×:~ÿÜóçÏ>\XXXXXxøðá#GŽìر£õ¡Ž_ºÖõí·ßnß¾=((¨¸¸¸¸¸8((hÇŽ[·níÚkÀ?¤¿’'Ož¸¹¹ 2„ÉdJKKkjj®_¿>55µõÑÒÒRWWWyyù%K–TUU±¿Å>|èô¡¶§w°^ŽïñöÞøm JJJ¦¦¦ÞÞÞŸfÅMæÈÈÈQ£FõêÕ‹Ë £ººú«¯¾êß¿¿´´ô¬Y³Ú^ÒN_ºŽ×:iÒ¤Öë†Nš4©uGu7^~ÀEdÀ4(`PÀ €@€  @ €0(`PÀ €@€  @ €úpvv¶³³³œœœœœœ³³sNNN3‹}†²œÝ@Ó®®®¶°°000ÈÊÊÊÊÊ200°´´¬­­íà)¬ÿ¢,*@7ˆÑ³«|||?~Ø6ÅÍÍÍÐÐpݺuç£é/ÀM·€#""ÜÝÝÙ§¸»»‡‡‡“ÊÀ[4-à´´4===ö)ºººéééÝÏÏoÖ¬YζsçNޝ‰¤¤$Åÿ @[Ý©1.ÐôØ%eeåÔÔTeeå¶)úúúùùùÜ<½°°PCC£ººº{kÇ!]Њ@Ó!hmmí””ö)©©©ZZZ\>õ 4GÓž={v@@û”€€.Ÿ~áÂ>äà šŽµVUUéééyzz®ZµŠÁ`øùùùûû§¤¤ÈÈÈ´ÎÀ>&`ii¹jÕª©S§***æææž={ÖÇÇçÆÝ[;†  •È AËÊÊÞºu+!!AMMMMM-111&&¦­}?±mÛ¶   iiiSSÓ/^ܽ{·Ûí @lêq€-`h%r[À  @ €0(`肤¤¤Õ«WËËË‹‰‰‘Î"ØPÀЋ/8pà½{÷Hx8߆œ†Ð)ù¨ÄiHÐSÆÆÆ222bÿE:—ˆBˆ„;wî,X°ÀÕÕõÍ›7GŽ‘”” …­Xz‰„®‘q)¶¶¶S¦LÙ¾}{Û”]»vEGGÇÅŵþØñ¦ð矊"òQ‰!hè‘,Z´ˆ}Š››Û‹/Ú~ìøîñ=\»···9ÞÞÞ=ÌÏ"ñý¥«Däkˆ&“YUU%))Ù6¥®®N^^¾¾¾¾{ ‘Jl@())åææ²OÉÉÉÍ>åÔ©SVVVm?òu>×›t ‚———‰‰‰¼¼üÂ…  FPPЉ'=zD:—èÂ0€H;vìÍ›7###GŽ9räÈ›7oÆÄĨ©©uu9ìƒÒ î ‘Ø…ÞU"rdt a0(`PÀ €@€nÅÆÆÎŸ?_II©_¿~FFFaaa¤ 0\ ¸enn>}úô°°0}}ý´´´eË–•””xzz’Î%pÅ p!޾ýöÛ_~ù¥íÒW©©©NNNdSñÿMà „RDDľ}ûRSSkkkÙ§wû¯¶¶¶ÿþݾ¡¡@À•° Gîܹ³`ÁWW×7oÞ9rDRR2  'í©££ÃÃ"›z` „­­í”)S¶oßÞ6e×®]ÑÑÑqqq­?v|O…Ï?ËÊʦL™rüøqSSSž§¥l@>žÁ`˜ššþúë¯]=‰ˆã‘Òåååòòò¼‰H?¸¥PÀÐ a0(`PÀ €@€  @ €0(`PÀ €@€  @ €0(`PÀ €@@ßÎÎÎvvv–“““““svvÎÉÉáæY£Fãw<€ž iWWW[XXdeeeeeXZZÖÖÖvü,‹åáá±{÷njBt›‹Å"ŸÇ¶Mqss344\·n]Ï:pà@rrr@@€˜X~¯>„ÿ¦[ÀîîîìSÜÝÝÃÃÃ;xJrròñãÇ9Âçh<@ÓNKKÓÓÓcŸ¢««›žžÞÞüuuuîîîþþþ²²²üOÐS4k•¨©©a2™mSûöí[__ÏqþU«V©ªªzyyµþˆ!hà ‘‚î’ððð´´´~ø¡«Oôööã„!ØÑ´€û÷ï_VVÆ>¥´´TAAãÌß|óÍéÓ§{õêÕÕµx{{³8éfh—˜˜¸téRYYÙO¾’Nž<ùرc?~$@¨Ð´€µµµSRRا¤¦¦jiiqœ933søðáŸlÂb[€{ŽŽŽNNNššš¯_¿fÿ>ÚÔÔäíí}íÚµQ£Fýý÷ߤ“šðìÙ³ا888pœ™ã&,¶e¸tîÜ933³W¯^}ûí·***ìöêÕËÆÆ&<<<44ôÏ?ÿtvvþðᩨ„¦GUUUéééyzz®ZµŠÁ`øùùùûû§¤¤ÈÈÈ´ÎÐñ^q„À¥;w?¾Ó™6oÞ}ýúõaÆQ€8‘;KVVöÖ­[ jjjjjj‰‰‰111mí =Çb±Ö¬YsíÚµøøxnÚ—Á`HHH:thÅŠ¦¦¦¯^½âwBá†M=° ¢`Ó¦M>¼~ýz7Ξ÷÷÷ßµk×;wÔÔÔø‘ €>ø×½ù±P ¹½{÷Þ¾}ûöíÛÝ»vÍ’%Kª««gΜyÿþ}EEEžÇØÔã[À ÜÂÂÂÖ¯_ÿðáÃOŽ·êª­[·&&&^¿~½wo|•¡Å¿F@Óp€!öüùóiÓ¦]½zuâĉ=\TKK‹½½ýèÑ£}||x’ €†PÀ”Bƒ°jll422Zµj•§§'OøáÇñãÇ;vlÖ¬YÕÔÔtîÜ9WWWÒAºfÀ€æææ—.]"€00€ ŠŠŠ1bÄèÑ£Ié²Å‹Ÿ>}št ÂPÀ‚êôéÓ‹/&¢;ìííSSSsrrH  *++¯_¿>oÞ<ÒAºCBBÂÉÉ)((ˆt’PÀéâŋӧOWTT$¤›0 €Hnnn¤Stß”)Sjkk“““I  xòòò’““mllHé>11±E‹9s†tbPÀ‚çÌ™3ÎÎÎRRR¤ƒôˆ››[PP.K "  xΜ9#p§ÿ~nìØ±***wîÜ!€ 0€€yþüyYY™™™é <àêêŠc¡Ad¡€Ìùóç]\\ÄÅ…áÍëââÚÐÐ@:Âð)ÁÁÁzúïç† ¢©©C:(`AòôéÓªª*CCCÒAxfÞ¼yÁÁÁ¤S€$ÁÁÁ ,#„g\\\._¾ŒQhA(`A"LãÏ­ ¤¥¥uóæMÒA¨†)))õõõ'N$„Ç\\\0 " 0.\¸0þ|an5wîÜË—/üø‘tJ¡€†ð?·RQQÑÓÓ‹ŠŠ"€R(`Á””ÔÜÜl``@:_àXhAô-àììlggg999999ggçîÝýàÁOOOuuu UUÕ3f„„„P€ÁÁÁóçÏ'‚_œ¯^½ŠQh)4-àêêj ƒ¬¬¬¬¬,KKËÚÚZŽ3¯[·N__ÿúõëÕÕÕÏž=Û²eËž={vîÜIqf¾ºxñâܹsI§àeeeŒBƒ¨c±X¤3pàããóøñãÀÀÀ¶)nnn†††ëÖ­ãæé™™™'N,//ïÞÚÅÄhú²€ÈJNNvrrÊÌ̾#°Úøúú&$$œ:uŠt€ÿà_#Ðt 8""ÂÝÝ}Š»»{xx8—Og2™½zõâC.2BBBæÎ+ÄíË`0æÎ{åÊ\‘DM 8--MOO}Š®®nzzz§O¬¨¨ˆ?þªU«ø–€j!!!ÎÎΤSð—ŠŠ ® "…¦\^^®  À>EQQ±¬¬¬ƒ§ˆ‰‰‰‰‰ÉËË›››ËÊÊz{{ó7"UÒÓÓ«««…éúÏí™;w.Ž ÑAÓî‹Åb± ƒ‚‚ÒÒÒöîÝÛéS¼½½Å8¡ -÷BCCœœDá/ÓÉÉ)""¢¹¹™t*д€û÷ïÿÉöniié'ÛÄ 8páÂ…'Nœètfooo'ÝÏ À¡¡¡sæÌ!‚ Æ :tèÝ»wI M X[[;%%…}Jjjª––—OŸ8qbQQrP-777++ËÄÄ„tŠ|ñÅaaa¤SP¦<{ö쀀ö)\>=>>~ìØ±|È@µK—.988ôîÝ›tŠ|ñÅ¡¡¡ˆQ@Ó^¶lY||ü¾}ûÊËËËËË÷îÝÛz¹«¶Ø÷‡Íš5+<<¼¨¨¨±±ñýû÷þþþ_}õÕO?ýD"8………}ñŤSPGGG§OŸ>Ÿ €%𰬬ì­[·ÔÔÔÔÔÔcbbddd8μuëÖ€€---iiéI“&]½z5$$ÄÆÆ†âÌ|ø@:¿ €h‡ÅbEDDˆxKKK›™™EFF’À/(`ÚyôèQ¿~ýFM:a…ᆠ˗/‹ìáWììííoܸQ__O:_ €h'<<Ì`0¨©©yçÎÒAø @/YYYÅÅņ††¤ƒÐ‚½½}DDé| —ððp;;;qq¼7 ÃÞÞþòåˤSðÞäôaooO:]èèè0™Ì§OŸ’À{pYYÙ‘#GœÕÕÕedddddÔÕÕ9RVVFMDÑQ]]ýèÑ#Q»pÇlmm1 B©ÝÎÍÍ]¶l™ªªjPPдiÓ®^½šŸŸŸŸŸõêUssó3gΨªªzzzæææR@¸]¿~ÝÄÄDVV–tqpp@ƒPj÷>ÃRRRêêê°¶¶æ8Cddä7ß|óöíÛºº:~&$€·_蘛››™™ÙòåËI¡‘ÆÆÆAƒ=}útРA¤³€(â_#´»<þüÄÄÄöÚ—Á`ØØØ$&&Ο?Ÿ±DPcccdd¤é ôÂd2gÍš…`>íðÉ“'¥¥¥;~²´´ôÉ“'yœ@TÅÆÆŽ=zðàÁ¤ƒÐ.‰B GAÐnÀÐ[[Û{÷îUUU‘ÀKð¼yóŠŠŠ>™X^^¾páBþDQ¸e{úöíkllE:/u^Àêê꺺ºmSnÞ¼9a ~-ÉÉɽ{÷ÖÒÒ"„¦pE2\ÜõäÉOOÏAƒùøø>|8%%åÏ?ÿÔÔÔ¤ 8 ¨·{÷îÊÊÊß~ûtšÊËËÓÕÕ-((èÝ»7é, ZÍN__ÿÑ£GÓ¦M³°°7nÜ¿ÿþ+Äí @.€Õ1UUÕáÇÇÇÇ“À3]8KLL¬_¿~ ã_ ”——÷öí[ÒAh 7f!ÃU?yòdòäÉiii111·oß¶³³ËÌÌäw2Ñakk‹ÁÕŽ988„……‘NÀ3ðwß}çàààííýÏ?ÿ(++:thãÆ³fÍÚ¹s'ùDÆŸ¹¡¯¯ßÔÔôòåKÒAx£ó~÷î]rròìٳۦ̘1#!!áÕ«Wü  *jjjââ⬬¬Hvvv8„Fç|þüyEEÅO&öïßÿìÙ³ü‰ Z¢¢¢ŒûõëG:ˆÀn`&¸aæÞôéÓŸ>}ZRRB:´[ÀK–,©­­íøÉµµµK–,áu$ÒÒÒríÚ5Ü€K3f̸zõ*é <ÐnŸ;wnÒ¤IÑÑÑí'7ÃR IDATÍpóæÍI“&;wŽ?ÁDÂýû÷ 4|øpÒAF¡Ah´[À¯^½šqâÅ:îèèH:…0ÓÓÓkiiIKK#€[4½ó¼ÏãÇÛ¦¸¹¹®[·îó™¿ýöÛ_~ù¥íæn©©©NNNÝ^;ÿn¿ ¢©²²rèСïß¿ïÛ·/é,ÂlÆ üá‡H¡Â¿F épDD„»»;ûww÷öÆ—~ýõWö[«Ž9²ƒñjê]½zÕÜÜíËoŽŽŽØ„¦œ––¦§§Ç>EWW7==›çFFFêèèð'@w`ü™fffïÞ½Ã÷o4-àòòrö)ŠŠŠeee>±¬¬lÛ¶mä[4€®©¯¯¿qã†é ¯W¯^¶¶¶¸;! šp÷Ι3çèÑ£¦¦¦ÜÌïíí-Æ ¿s‚H¹uëÖ¸qãTTTHùTssó»wïbccOŸ>Ëq__ßÉ“'»¸¸,Z´hýúõô¿Ü#Ž…BÓ£”••SSSÙoSPP ¯¯ŸŸŸßÞSÞ¿ogg÷ûï¿[ZZöpí8 xhåÊ•£Fúæ›oHùóçÏùå—JJJÇWSS³±±Y´hÑç³ÕÕÕ=~ü8??¿±±±¸¸xüøñæææŸÏ–””TUU¥¯¯/''Çÿì©­­UUU}ûömÿþýÉ&¡Á¿F éY‰ÚÚÚ)))VVVmSRSS;¸ˆn^^žÍÁƒ-,,( À‹qçÎ"kojjÊÍÍ>|øçÍž=»¼¼\RR²ã%HIIM:µÓ¥¥¥;v,55uذa&&&k×®%u†´´ô´iÓ"##9~Ÿ šAÏž=; €}J@@@{×Ñ-**²¶¶Þ¿?ÚèæÑ£G #Gޤr¥ïÞ½óóóspp0`Àúõë9Î###ÓiûroñâÅwïÞ-++ ÐÖÖ&»£Ð (h:ÖZUU¥§§çéé¹jÕ*ƒáçççï’"##Ó:û˜€Á–-[,XÀ«µcxå‡~ß³gek¬¬¬ÔÒÒ²²²²¶¶¶°°0`e«îTcc#“Éä÷ZJKKGŽ™ŸŸÏÃo Êø×ômšwïÞmܸ1&&†Á`XZZ-DŠÈ] @„‡‡ÛÛÛó¼}‹‹‹÷ìÙ£®®Î~­V0hР͛7§¥¥>}zРAü[‘££cDD¾FÍ¡€ø%44”·7ÎËË[¶lÙ˜1c²³³###ù·Éo“'Ož3gÿ–?jÔ(yyù‡òo=GÓÓ]AAÁóçÏy{d~Ÿ>}ÔÕÕ_½zE«C«xëãÇ<9xÊÉÉ)44ÔÈȨç‹àlðÅ¥K—ììì$$$x¸LEEÅ~øAˆÛ·¦¦FCCcëÖ­%%%=\Ôœ9s‚ƒƒy’ €OPÀ|Ê×QV¡$##óðáÃêêê±cÇzyy•——w{Qúúúbbb©©©<ŒÀ[(`Þ+--}ôèû¥Üº$66ö¯¿þâm$A1dÈ__ߤ¤¤‚‚‚#GŽôdQsæÌ¹t鯂ð €÷"""f̘ÑvÝî½|ùÒÉÉÉÃãÛg± ‡aÆ?~|ûöí=Yˆ““ è  À{!!!sçÎíê³6mÚdjjjllüüùs~)ÆÆÆååå/_¾$€3\q‚\ˆz¢ªªjèСÙÙÙ]½JFddääÉ“?¹6ôÄ×_=dÈ­[·’ âW®\155íÆ5ªlllоòòòÚ°aCEE73;;;‡„„ð;@÷ €x,$$ÄÙÙ™t ¡µ~ýúºº:mmí .t:³™™YvvöÛ·o)ÐUkåCÐÐm­7„ÏÌÌTTTlož–––úúz)))*ƒ ™û÷ï¯\¹rôèÑžì»lÙ2--­7R „† Ãõë× ;hß””ccãcÇŽQ™Jø'&&nÞ¼¹Ó91 ´…à¥ÆŸ?~ü¸mÛ6++«•+W®_¿žâ`‡ÉdNž<¹ÓÙ,--_¼x‘——GA$€.AðL}}}dd¤ƒƒÃçµ´´˜™™½zõ*55uÉ’%4¼_¯°b2™¶¶¶aaa¤ƒ|  À3ÑÑÑãÆãx£=qqñóçÏ+++SLÄaè  À3—.]êàúÏêêêT†Yß|óÍöíÛÛ¦XYY%%%õü¼…àÆÆÆË—/ã$â¶lÙ’œœlbbòâÅ‹Ö)RRR³fÍÂ(4Ð €7¢££ÇŒ3tèPÒAD²²rDDÄÒ¥KÍÌÌÚŽ6wqqáæ¼a*¡€x#88¸õÎýõr&KLLlåÊ•÷ïßWUUmbkk›˜˜XTTD6;\q‚\ˆºª±±QUU566vÇŽ™™™gÏž3f éPð®®®fff+V¬  .Ä@kQQQC† ±³³SUU½ÿ>Ú—†æÍ›‡Qh lêq€-`è*www&“éäädggG: pöñãGUUÕôôtÒY@ð¯Ð4 €¡K>~ü8xðàôôtœãKs&L˜4i’±±1é, 00 @_W®\™0aÚ—þ.\èáá±fÍšúúzÒq@Ô¡€zêìÙ³ .$:7cÆŒìììÂÂB“ÌÌLÒ‰@¤¡€º¬²²²íßUUU111ŽŽŽó—z÷îíäätõêÕ‹/.Y²dÊ”)YYY¤CèBtÍýû÷utt?~ÜúcXX˜¹¹¹‚‚ÙTÀ¥ œ;wŽÁ`¬Y³æÑ£Gjjj¤èBtÁ±cÇæÌ™óçŸN˜0¡uʹsç,X@6poêÔ©%%%ééé í dáp_p4|®¹¹ÙÓÓóñãÇ—.]9rdëÄòòò#FäääôíÛ—l<àÞ¦M›äää¼½½IÁ€£ ëÕ«×´iÓºaƳgÏ~ùå—‘‚øTHHˆ––VUUU󤧧—••™ššR– xËÍÍ-00°½GÍÍÍf̘Ae$58߆œ†$²X,Ö®]»NžqâÄuëÖ‘=RWW7tèЧOŸ4ˆË§äää(++KHHð5Ð † 袦¦&""×ßRRRŽŽŽAAAÜ?åÀüK¢ Ð5!!!fffSƒ@ðððèÒ(ôfÍšehh˜˜˜È¿T "PÀ]sêÔ)Ò)€7LMM«««Û»,åçÄÄļ¼¼|}}íìì®]»Æ×l ôPÀ ŠÒÓÓmmm?~üØÕ'æææ¦¦¦ÚÙÙñ#POLLÌÍÍ­«‡b988\¿~ý¶Ý€‘såÊ•éÓ§/X° W‘}ø ˆøòË/ƒ‚‚»ô,}}ýÑ£Gó)ˆ0ˆ‹õã?®^½:<<ÜÝݽK Äø³QWW5jÔ7H‘ƒ’››ûàÁƒGuãéñññ ÃÐÐ×¹€0Ò)@äà„Wp0p´téR--­Í›7“}º‡ËÙ°aÃöíÛ[ZZx’ „ €+gΜ±´´8p é ÀžžžýõW7t¼¼¼îÞ½ëèèXQQÁ«` ÄPÀ\9qâÄW_}E:ð‹‘‘‘´´ô;wz²%%¥›7oª««effò*+0§ÚÚÚÇójÏMbbbYYÙÌ™3y²4 §eË–;v¬‡ a2™‡Ú°aÓ'Ox’ „Ž6âa º÷ïßñÅZZZ'Nœ`2™=_ §§çÈ‘#·nÝÚóEmUTT¨««?þ×v8 €[÷îÝ›÷sww'•h%77×ÔÔ´±±ñöíÛ|j_ƒ:dÈ´¯hZ·nÝ¡C‡ø´p111´/0h[ÀiiizzzìStuuÓÓÓIåúxýúµ‘‘Ѽyó‚‚‚¤¥¥ù·¢C‡­_¿žË:spp(((xôèé Ìh:Ö*!!QSSÃ~£ÆÆÆ¾}ûÖ××wüD A ½ÆÆÆ˜ššòu-IIIsæÌÉÌÌÄ–ŠÈ:pà@RRûŽ0M"7M ooo1NH炎0™L~·/ƒÁøý÷ßׯ_öeË–-»qãFvv65«{üøqrr25ëš i÷ïß¿¬¬Œ}Jii)ÏFõööfqÂÛµ€Àyÿþý7póA'++ëîîîëëKÍêÞ¿oee…+žŠš°¶¶ö'g˜¤¦¦jii‘Ê"åàÁƒýúõ#Û¸qã?ÿüSQQAÁºbbb¼¼¼6oÞÜÔÔDÁ8šðìÙ³ا888ʤS¼Æªªª“'Ovzˆ‚!C†Ì˜1ƒ²û#7.!!áÙ³g›7o¦f@M6ªªªÒÓÓóôô\µjƒÁðóóó÷÷OII‘‘‘i¡½½â8Kh444¬]»öÝ»w7nÜ r½|øð!F¡Ubbâ¼yó^¿~MÙÍÍÍ>|PTT¤fuÐ)‘;KVVöÖ­[ jjjjjj‰‰‰111míû9öã§p,•ÈËË›6mZIIÉÅ‹©\oë%Š6lØ@åJÎ&Nœ8dÈÐÐPÊÖØ«W/´¯ˆÀ¦Ø&ëÑ£GNNN«W¯þþûï)þ"uñâÅ?þø#..ŽÊ•Í…††þòË/÷ïß'Èà_# i8@“•““óêÕ+KKKêWmhh¸mÛ6GGGêW ´ÕÒÒ¢©©yüøq333ÒY€‘‚Q6tèP"íUSScooOýªÎÄÅÅ¿ûî»}ûöÌP^^~óæM‚€PÀÿ³wïÞíÛ·‹‹ãMŸZ¼xñË—/HÈÉÉùꫯvìØÑÜÜL*ð>k ãîÝ»yyy...¤ƒ1™Ìo¾ù†àF°®®nbbb||üÌ™3óóóIÅÞBI555>| ‚Á`0vîܹmÛ6þÝ[ §§gbb"ÁàFEEMŸ>}æÌ™Ø(` æåË—ÆÆÆŸ\q…ˆ»wïfgg»¹¹‘ô%))¹eË–={öÌ ..îååuïÞ=|S(` ãôéÓ¦¦¦k×®¥Ã5§¶oß¾cÇÜz:¶bÅŠÔÔTâ÷(ÄER…>q€€uëÖݺu+&&fܸq¤³0nÞ¼YXX¸hÑ"ÒA€î$$$¶nݺsçÎÈÈHÒY@à„Wp0¿%''3FJJŠtƒÁ066þæ›oæÎK:€ÆÆFMMÍ'NL›6t Î¡2~üxš´ohhhmm­““é ˜LæÎ;·oßN:ȰX¬;väää]ƒÑÕÜܼcÇŽýû÷ãÜ_àž««kEEŵk×Hù™I“&QyÍjè9Œµr€!hqòäÉ¿ÿþW~†® Û±cGrr2­¾º=xðÀÝÝÝØØøÐ¡C8P‹‡0 ©¦¦æàÁƒôü6ÓÐÐðã?îß¿Ÿt<_|ñ…¬¬ì¹sçHù##£'OžÈÈÈÄÇÇ“Î\Á¦Ø扄„77·©S§úùùõéÓ‡tœOýñÇ111—/_&Ò¿ÿþëé陞ž.!!A: ðî†D)p555ýôÓOGŽñõõ¥çÑÅåååššš111ÚÚÚ¤³€ rpp˜6mÚ¦M›HþBS ÜCqqqûöí;qâÄàÁƒIgálÆ MMM¾¾¾¤ƒ€{ùò¥©©izzú€Hg>BS ,Ü^½z5uêÔ´´4%%%ÒY@°­[·ŽÅb>|˜tN´´´¨ªª’"pÏlذaëÖ­h_è9ooïàààÔÔTÒA:ñäÉ“ñãÇÿý÷ߨ´ 0ˆ–ðð𬬬µk×’Â@AAÁÛÛ{Íš54/¶ &ܺuëÏ?ÿ´±±ÉÎÎ&þ =òæÍº3Z]]ݦM›>Ìd2Ig!±|ùòººº³gÏ’Ò û÷ïO›6mÒ¤I………¤ãƒ}Àa07ššš8ðÛo¿EEE?žt®ìܹóåË—t;}ÝÇÓÓÓåääHgé\QQÑÀI§$8‹R(àN=~üxùòåJJJþùçðáÃIÇáJFFÆ”)Sžxð í t0uêT//¯9sæTUU‘ÎÂ3ÚÚÚ¢Ó¾|%ü›zÝ Ü[À_}õ•ŽŽNëÍ[Hgá±›7o.^¼øÞ½{¤³üŸU«V½{÷îÊ•+½zõ"º 7c ”p°°JOO·°°¸xñâÔ©SIgøÆÆÆY³fîÕ9¸qñâÅ÷ïß{zz Ù—{ At$77×ÖÖö÷ßGû 1™Ì‹/FFF ÷ ƒG}ïÞ=uuu//¯ÂÂBÒq X8544577“B…’’kk믿þÚÕÕ•tή_¿~ðàÁÓ§O“ÎÂ/ººº.\¸ÿ~yy¹––VNNéDt‡±Vzº  àرcÇŽÓÓÓ PRR"ˆ¿***f̘ann.܃{ ^½zeaañ믿.\¸tþª¬¬”““#‚70 \9xð ––VAAÁÍ›7###E¡}gΜ9mÚ4´/„Ñ£GGFFnÚ´),,Œtþšöå+ÞÔãÁÝ~ûömÿþýåååI¡Buuõ¬Y³&L˜pèÐ!ÒYºàÉ“'666ÿý·é,T{ðࢢ¢`Å„-`àŠºººˆ´oII‰¥¥¥žžÞüA: @×èëë_¾|ÙÓÓóüùó¤³P-))ÉÔÔÔÒÒòÂ… ¤ã†<µµµgÏž‘¬8z÷–hÀ¸IDATî©©©•••ŸŸ.¸‚ÈÐÐðæÍ›ß~ûíáÇIg¡ÔêÕ«³³³—/_þ矪©©•––’ND’ Žµò=‡ Y,V\\ÜÉ“'ÃÂÂLLLþþûoѼÓÀ“'Oìíí·nÝúõ×_“ÎÐ#YYYÖÖÖööö?ÿü³~•|óæÍˆ#H§è.ÄA)zðÊ•+ïÞ½»téÒE‹©¨¨ŽCÆÕ«W—.]zôèQ'''ÒYx ¬¬ÌÑÑqðàÁ'Ož”””$8@SŠž\]]Ý·o_Ò)ˆa±X¿ÿþûÁƒ/]ºdhhH:ÏÔ××õÕW™™™.\:t(é8ä>}úþýû...¦¦¦t¸x'Â!555§‹rû–””888\ºt)>>í B¦OŸ>§OŸvrrš4inóÇ`0,,,† ¶yóæÁƒ¯Y³&33“t"~¡ã¦qD¶€_¼xvéÒ¥¦¦¦¤¤$Š×NgÑÑÑK–,quuýñÇ™L&é8ürÿþ}WWW›ß~ûMJJŠtòÞ¾}{þüy---‚10M)Š ¸©©IGG§®®ÎÞÞÞÉÉÉÜÜœ£.tðñãÇ~øáâÅ‹'Ož´°° €ï***Ö¬Y“””tæÌ}}}Òq€Á@SŒú-ବ,555*×HñññË—/×ÔÔ}úŽCGåååfffVVVÖÖÖfff|}•°Xà•••…††¾zõŠã£h_vžžžóçÏ÷ööFû‚¨Y´hÑ“'Ož={¦««{åÊÒqè¨_¿~þþþ »ví8pàš5kH'êlsÀÃï;ñññgÏž½{÷î›7oLLL¶oß>eÊž,Y(ÕÕÕùøøøøø,]ºtÛ¶m¸œ,ˆ¸ëׯoÚ´iÈ!¿ýö›®®.é84UVV–••Å¿{ ASЇ/÷õë×ÓÓÓ'Nœˆˆ:ÐØØxòäÉ={öLš4éçŸÖÐÐ €šššŽ;öã?Z[[ïØ±C ®\A×®]KNN611100••íÞBPÀ”êÒË]XXøøñ㦦&¾¦V §NÚ¿¿††ÆîÝ»ŒŒH' ÊÊJ___{{ûï¿ÿ^°nf@PBB¹sçîß¿Ÿšš:lذ_~ùeöìÙ]] ˜Rܼܙ™™›6mJJJª­­500pppX»v-5ñ„F~~þ‰'Ž=ª¯¯¿mÛ6 ÎtìLJòõõ511Y»víôéÓEð–ÝÓÔÔôìÙ3EEEŽ—:innîàÜ0¥Ø_î>p¼¿PEEELLŒÁðáÃ) 'ø###Ož{öì÷ßgß²Bw";;{ãÆ7oÞd03gÎ|øðáÇÊÊÊÊÊÊ’’’¢¢¢¢¢¢ÂÂÂüüüìì좢¢¾}ûŽ1BCCcÈ!#FŒ=z´¶¶6ýõõõééé/_¾ÌÈÈÈÎÎÎÊÊzýúunnn¿~ý 4lØ0%%%eee•()))**ÊÉÉõë×ONNN4ïÑ„„DMM û×·ÆÆÆ¾}ûÖ××woBPÀ?~LJJJJJª©©©®®nlllhhh½Ópyy9ƒÁ¨®®®¨¨¨¯¯¯¨¨¨«««¬¬¬ªªêß¿ëÛ¬_¿~ ***ÊÊÊJJJJJJƒ6l˜²²2.  ”JJJòòò²³³‹‹‹ ‹‹‹‹‹‹KKK++++***++[ZZdeeûõë'###!!Ñ¿99¹^½zIIIIJJöêÕ«õìÖ‰ãÆ377—‘‘!ý›õ%ø˜LfCCû”†† ‰NŸ¸sçN¾¼¦ DøT^¿©Ç¥!hÚc [w![÷Ð6mƒ1­»p;ÂŽhkk§¤¤°OIMMÅÅ•€Î„¡€gÏžÀ>% ·F:£ïV?÷ªªªôôô<==W­ZÅ`0üüüüýýSRRº½óŸ¶ƒ!´ Æ@¶îB¶î¡m6Úc [waº#²²²·nÝJHHPSSSSSKLLŒ‰‰‚Cï@ˆÑ÷KA´ý.FÛ` dë.dëÚf£m0²uÿ²õòööæÇrÝ´iÓHGàŒ¶ÁÈÖ]ÈÖ=´ÍFÛ` dë.>e£ï—!& û€ €0(`PÀ €@€  @ €0(`Ä>C:£F¢O¶xzzª««KHH¨ªªÎ˜1#$$„t¨ÿ‰?¾’’R¿~ýŒŒŒÂÂÂH'ú?III«W¯–——§Ïevv¶³³³œœœœœœ³³sNNéDÿ‡†/W+:ÿÑù½ÉŽnŸiT >Cÿ—¥¥¥ÅÊÊ*((ˆ>Q'MšäëëûâÅ‹úúúÒÒÒ7nŒ?~ÇŽ¤s±X,ƒÁ˜>}úÝ»wkjj=z¤§§wüøqÒ¡þGKKkçÎÏž=£ÉeUU•††Æž={ÊÊÊÊÊÊöìÙ3jÔ¨ššÒ¹þ‡n/W:ÿÑù½Ù††Ÿi$¡Ë¯J+ôù hÏï¿ÿ¾xñb½£fddÈËË“NÁb±X›7oniiiû1%%ECCƒ`Žhò_yàÀWWWö)®®®üñ©<í¡ÉËÕF þÆÚÐç½Ù††Ÿi$Áí9 ó­¡ FrròÂ… =z$++Kç¨ÙÙÙ%%%¤ƒ|ª¶¶¶ÿþõõõ¤ƒüMþ+-,,¶nÝjeeÕ6%**êçŸމ‰!˜ês4y¹ÚCÏ¿±6t{oÒó3‚$ØÌ™ŠŠ “É4h««ë‹/HÇù?uuuîîîþþþ²²²¤³´«¢¢¢u—تU«Hgá 22RGG‡t šJKKÓÓÓcŸ¢««›žžN*€¢íß ß›tþLã{ð{[988ÄÆÆÖÕÕåääøøø 8ðÉ“'¤CýÏÊ•+wïÞÝö#ÝþÙÿ´fΜÙÔÔD:ѧJKKÇŒK:ȧhò_Éd2ا444HHHÊÓš¼\ÑóoŒ¶ïMÚ~¦QPtùUéÌÏÏoÖ¬Y¤S°X,VXX˜©©)û;‡>¬ì ƒ‚‚TUUwíÚE:˘™™Ýºu‹thò_‰î!:ÿ±è÷Þ”Ï4Š€¦¿*e¸ (((‘‘¡2U«Ï³ihh¼{÷î“y¨Æâîu»uëÖСC©LÕª½l¹¹¹zzzÑÑÑÔGê8XÛ£ÔGúÜÀ اäç竨¨ÊÓš¼\Ÿ þ7Æ%RïÍÏÑç3­Sü(QßÌþZt0•‘Ø×ûI¶ÌÌÌáÇr^‘3•¹yÝ&NœXTTDeªV³åååÙØØ8pÀÒÒ’úH£mmí””ö)©©©ZZZ¤ò:üq‰Ô{ósôùLë?Þ¶¢^Àܸpႉ‰ é F‡›M¤£q?vìXÒ) £¨¨ÈÚÚzÿþý¤³ÐÝìÙ³ا888Ê#(ëoŒ>ïMúLãKp·¡,B,,,‚ƒƒóóóÞ¼y³wïÞ<~ü˜t.Îèó?heeVXXØÐЛ›ûÏ?ÿ <øÚµk¤s±X,–¾¾þÙ³gI§èMþ++++ÕÕÕ÷îÝÛv! êêjÒ¹>E“—« ÿÆèüÞüMþg©)Züªÿ¯};fI-Žã8|.´:„Cˆc¸Hƒ‹/@Z4!itqpÌWÑÒЩ%0il‰¢ ZÂ9(¤ ç^ð^ïm¼÷w8÷yF§/Ç#Ÿóç`¦\__·Ûíb±¸±±Q.—ŽŽ^^^¢G})#7kš¦ÓétyÝJ¥R§Ó¹½½õÃ=çóyô®4ýb[ì¤ÙlÖjµ …B¡PhµZk¯èbeðr-eùËòoówùBÿM²ò—gø¯x 0` À@€ €@€ 0` À@€ €@€ 0``¥ÛíŽÇãŸ?999988ˆÚ9ö-MÓè @V|||Ôjµ‹‹‹Z­–$ÉýýýÞÞÞãããÖÖVô4È'``¥X,žŸŸƒÅb±X,ƒÁéé©úÂßà ¬;>>ÞÙÙIÓôæææòò2zä“ëÞÞÞvww???§Ói¥R‰žù$ÀÀºÑhÔh4ÞßߟžžÎÎ΢ç@>y üb2™¼¾¾¶Ûí~¿ÿðð0™L¢A>9+óù¼^¯_]]moo'IòüüÜl6ïîî677£§AÞ8+Ãá°×ë-ë›$IµZ=<<‡±« —œ€ €0` À@€ €@€ßCg#7ÖBšƒIEND®B`‚gsl/doc/images/dwt.png0000644000175000017500000006346413536674414013265 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìÝiXgß6ðAELHA!Á4n¨ÅlÝ(.Ô­UÔëZëRî¶Òjê«Ö¥‚­¢Uh­Ô»ÖZD¬Ú\EAˆ‚+bˆì’°SÈû!Ï‘'„ ³Îß'¼æš™ÿ@œ3׬&J¥’ju¡»€Î @0 À4@Ð @0 À4@Ð @0 À4@ЀôNMM]µj‡Ã111Ñ®‚‚WW×VÍÐÀ‹-²±±ILLÔ¥R¹xñâ­[·’W½L({°‰‰¾ë KKK‹ŽŽÖ€Ž¥Ý4–––™œœLw!$bÖEX555AAAGe±Xt×@"fð† æÌ™ãííMw!$SR¥Åu9sÆÇǧ®®NÿYTºucÜt0í ¿æ1è",—øøx@ ÿ,­êÖ!`[˜É˜¶…0®ÍÁ¶0¶E¯%3'€uÜõÛâŒøK3¶…±Œis°-Ì„mуÞ6ÝBcúh¢ù",<ë :'ÒGÀš«þãZèäH`ÝYÛž©³îè$À̲e˺K0l cÓæ`[˜É˜¶…<Æp™1.–’1Ð @0 ÀÀ™™™t—@)Ò855uÕªU§Å‡^]½zuÞ¼y|>ßÒÒÒÛÛûÌ™3d×Ì1wîÜ´´4º« é¼hÑ"›ÄÄÄ{Ž?¾¸¸øÌ™3ùùùû÷ï‹ÅQQQd—LpÿþýǯY³W³@çÁ ·!…„„ìÞ½[=P–H$³gÏ~úôiû— '‹ËËË“’’V¬X±xñbºËø?âu„TWWs¹ÜW¯^|ÉÀ4ƒ>r䈩©i@@Àƒ,--é®àuÆû€/\¸àááAw@º‡–––z{{>ÜËËëòåËtW@½X“\. ŒŒ¤» Ý©S§U§¨ÏI#ÀÄpaaá¬Y³:äãã£ç,&ÚˆÅb2ËÃ8}út`` êg0ÐB,kòÖȸsÀ¹¹¹Ó§Oß»w¯ŸŸŸa— TQQaggW^^Þ¥K‚ þúë¯Ý»wÿóÏ?t×ð¿È‹f‚ÎËË›:uê¾}û|}}鮨••åìì¬J_‚ úõë—••EoIÔ`Ð!袢¢)S¦ìܹéÛy<{ö¬_¿~ê …‚‚}.}èèh`ÍÃëS¦LÙ´iÓ´iÓh¬(öìÙ3gggõ?»víêààMcIÔ =€5Ïcë>§}÷îÝ 4:û]ZZJv…@£gÏž999i¶¸ºº>yò„®z(Cz+µÑœª»'‡Ã!»B Q£CÐ.„€NƒA瀡jtšÀuXÐi €6õõõ2™L(j6b h#“Éø|~=4q: 0Цéñg‚ œœœòòòjkki) €2` MÓ+°‚èÖ­[Ÿ>}ž?NGEÔAmšÞƒ¤‚ÓÀÐ €6ZAáää„0=fpjjêªU«8©/ †Ðzš >Ÿ_\\L}=TbV/Z´ÈÆÆ&11‘îB€ ª714mçñx%%%Ô×@%f½ )##ƒî€"eee¯_¿æóùM'ñùü[·nQ_•˜5†Î#77×ÁÁAë$kkë—/_R\ÅÀ@‚‚‚Þ½{k„€Î ô(((°µµÕ:  ‘°‰6b±˜îº Y………Í€q4PO,kòÖh¢ùB@æ01iEa­ê ñÙgŸq¹ÜO?ýTëT ‹¢¢" Š«h„¼ˆ1’0t8:ÎammA070ÐCÇ9`§ @=tœ&ÀÐ 0ëAš§»Õ?ãü®Qjñ4Œ³YÛI444Èårkkëæ: €Àèá4Р¸¸˜ËåvëÖì÷?<ŒhPXX¨ã ,#`èÀ@Ý'€ 0t` A‹ÌçóÀ`ÜÀ@‚@ À` >ç€KJJp[10РÅ655577/++£¬$Š‘À999l6›ÍfÊd²æzÖ××GDD 6ŒÃáXZZŠD¢ˆˆˆúúz²+êµxšÀQh0väpee¥¯¯¯H$’J¥R©T$ùùùUWWkí¼nݺŸþ9<<\&“Éd²ðððŸ~úiݺu¤V´hqL €ÀØ‘û&Ýððð”””ãÇ«[.\8räȵk×6íÌf³%‰P(T·<þÜÓÓ³¼¼\÷Zð>àŽ¥®®Î¢¦¦¦K]ßÿüýý—/_þöÛoSV@Sõ}ÀqqqAAAš-AAA±±±Z;›™™5mìÙ³')•} ù|¾îô%0cGngddxyyi¶xzzfffjí¼zõêùóç_»v­¢¢¢¢¢âêÕ«sçÎýè£H­¨§ûMÀj`0nä¾ I¡PXYYi¶ðx<¹\®µóæÍ›ÓÒÒÆ§n™9sfhh(©õŠŠŠø|~‹Ýt|TŒƒnCÚ³gOjjjLLŒ\.—Ëå111©©©aaaúÌk¢X,&¹dh‹¢¢"}FÀ§´´”‚z‚‹ÅZ£„¼5’;ær¹r¹\so[RRÒhL¬vèСcÇŽM˜0AõÏ™3gr8œ÷ßãÆ-®au zŽ€¹\®B¡  ‚ Äb±ÖayLîØÝÝ===]³E"‘¸¹¹i휛›;|øpÍ–áÃ‡çææ’XС¸¸ @nûûûGGGk¶DGGhíìè蘒’¢Ù’œœìàà@b}@=˜Ãá €Àˆ‘ÀË–-»qãÆŽ; …B¡Ø¾}ûÍ›7ƒƒƒÕ4‡öëÖ­[¼xq\\\ii©B¡8sæÌâŋׯ_Oj…@½ââb›»q¹\œ#Fî9`‹•°~ýú;wáççoaa¡µóš5klmmwìØñðáC‚  °wïÞ¹sç’Z!P瀲Ÿ„E < «cqrrŠwvvÖÝíõëׯ^½"õ*DÝ:ê“°šÒó°©©i=*++)( €z` Tuuu}}=‹ÅÒ§3®Ã#†Jé9üUÁuX`ÄÀ@©¢¢"}.VÁuX`ÄÀ@©ÖŽ€À`¬À@©V0 F  ”Â!hÒ8'''00Íf³ÙìÀÀ@™L¦£sCCÃþýûÝÝÝÍÌÌ<<Š222ÒÛÛ;44TõÏÐÐÐDEE­]»¶içK—.åææÆÅÅ©þ9lذóçÏ“ZP#`rGÀqqqAAAš-AAA±±±Z;9rdÍš5¤Ö´Ã9`r8##ÃËËK³ÅÓÓ333Sk礤¤ÊÊÊñãÇ›››³X¬I“&%&&’ZP#`rX¡PXYYi¶ðx<¹\®µsAAÁòåË—,Y"•JŸ={öî»ïΘ1ãúõë¤VÃ9`݆ÔÐÐðÍ7ß,]º”Ïçóùü÷ß÷îÝ_~ù¥>óšh#‹I.Z§U‚&0 ‰Åb­QBÞÉ}‘Ÿ­­­D"±µµU· :4??¿ig;;»{÷îY[[«[Š‹‹…BaUU•îµàu„…T*õññÉÉÉѳMM••UMM ©UèÐQ_Gèîîžžž®Ù"‘HÜÜÜšëLj1@»ââbý¯À"¢gÏžAüû¦U@rØßß?::Z³%::: @kçY³f5ºïèܹs#FŒ ±> VQQ‘þ'€UðFB0VäÞ¼lÙ2//¯;v¬\¹’ ˆƒÞ¼yóðáÃêšCû>øÀÏÏ ˆiÓ¦qîܹS§N‘Z!PéåË—š§ô¡: lggGRIt!wÌb±nß¾-Á;wâãã-,,´v633ûý÷ßÿúë¯þýû÷íÛ÷È‘#'Ožœ8q"©•ŠŠŠ4/Ð.„cEî˜ ¡PÓÜÔFg¶íììŽ?NvI@—V݃¤‚ ¡ÀX1è6$0zm8Œc…ê´aŒCÐ`¬À@‚PCuZõ&0+0P§ ·!á4+0P¤ººº®®ŽÍf·j.++«’’’J (Ò†ÀAX[[¿|ù’ŒzèEzçää²Ùl6›(“Éô™«  ÀÕÕ•Ô×PÅÚÀ€Q"7€+++}}}E"‘T*•J¥"‘ÈÏϯººZ÷\J¥rñâÅ[·n%µ6 XkßÄ ‚0+r822ÒÛÛ;44”Ëår¹ÜÐÐБ#GFEEéž+<<ÜÖÖvÁ‚¤ÖkÃS8‚àr¹eeeõõõd”@#r8...((H³%(((66VÇ,iii‘‘‘¤ÔkÛ!è®]»ZZZâN$0>äpFF†———f‹§§gfffsýkjj‚‚‚Ž=Êb±H- ¨×¶&pŒ¹¬P(¬¬¬4[x<ž\.o®ÿ† æÌ™ãííMjU@‹60ÇC€ñaÐmH±±±›6mjü&ÚˆÅbC×m׆Ç`©` ‹ÅZ£„¼5’û:B.—+—Ë5_[RRÒhL¬¶qãÆøøø®]»¶aE^k „CÐÀdb±Xë°¼ &wìîîžžž®Ù"‘HÜÜÜ´vÎÊÊ …¾wý(ӞƭÀ`|È `ÿèèhÍ–èè耀­•M¨I-¨ÑæCÐ< ƇÜ^¶lÙ7vìØ¡P( ÅöíÛoÞ¼¬î€Ñm'QSSSWW×¶‹ÛqŒ¹Ìb±nß¾-Á;wâãã-,,H])0P۞¡‚« À(‘{AB¡0&&¦¹©º/ãà³ÑhÛs(U0£Ä ÛÀˆµù , F  Thgã",0>` B›/&‚Ëå–——×ÕÕ¶$z!€ yyyvvvm›·K—.GÇL:"0PáñãÇ®®®mžG¡Àø € ?îß¿›gÇuX`|À@ººº:™LæääÔæ%àV`0>¤pNNN`` ›Íf³Ù2™¬¹žW¯^7oŸÏ·´´ôöö>sæ Ùµ5²³³íììÌÌÌÚ¼Œ€ÀøÀ•••¾¾¾"‘H*•J¥R‘HäççW]]­µóøñã‹‹‹Ïœ9“ŸŸ¿ÿ~±XEjy@'Ož´ç0cDnGFFz{{‡††r¹\.—:räÈæbõ“O>‰;v¬¹¹ùˆ#¢££wîÜIjy@vž&ð>0Fäp\\\PPfKPPPll¬ÖÎ{öìÑ|7ƒ‹‹‹ŽãÕÐdŒ#Cngddxyyi¶xzzfffê3ï… <<<È© (…CÐM‘û2…Baee¥ÙÂãñôy¢‚\. ŒŒ$­4  )&Þ†TXX8kÖ¬C‡ùøøè9‹‰6b±˜Ì2A/¯^½*(( …íYHß¾}q>H%‹µF yk4!õ•¶¶¶‰ÄÖÖVÝRPP0tèÐüüüæfÉÍÍ>}úÞ½{ýüüô\‹‰ ¹[í‘‘‘øðáÃö,¤¡¡ÁÂÂB¡P´ç^&€6 /bÈ»»»§§§k¶H$77·æúçååM:5,,Lÿô†kÿñg‚ ºtéâàà •J RÀþþþÑÑÑš-ÑÑÑZ;M™2eçξ¾¾¤VTzòäI;ïARqrrÊÎÎnÿr‚Ü^¶lÙ7vìØ¡P( ÅöíÛoÞ¼¬î yx}Ê”)›6mš6m©%Å 2&ÂÙÙùÙ³gí_CÀ,+!!áöíÛ@ ܹs'>>ÞÂÂBkç»wï.X° ÑÙïÒÒRR+²µó=HjB¡ðùóçí_C{AB¡0&&¦¹©šg¶q!•Qjÿc°Tœoß¾Ýþå0oC£QQQQ^^Þ·oßö/ ç€ÀÈ>f¦üüü+W®Ü¾}ÛÙÙù7Þðôô4ìÍ^%%%<Ï€ ì ž.ªT*/^¼¸mÛ¶ýû÷GGG;99ýöÛo÷ïß?~üo¼ann®Ïòׯ__YY¹víÚ­[·FEEmݺõðáÃdnS`¨+°TTƒ`.—k¨Ш³Œ€80yòä[·n­Y³æ¯¿þÒ<+ibb2uêÔëׯ/X°`̘1 8xð AÛ¶mãr¹êë±»wï>xðà÷Þ{oÿþýiii ªÙ_½zµiÓ¦¹s熄„ܿŊ...Ÿ~úiLLÌãÇéÙZÆ0à˜ ggg…£a qlñ9a=òññ¹qㆋ‹‹îE=xðàåË—ZŸA][[›‘‘‘žž~ãÆëׯŽ7îÕ«W‰‰‰“&M:tèfÿ;wÞ½{÷äÉ“mØ"£1räÈo¿ývôèÑYÚÆíìì>ùäƒ, @ä=ŠÒøÑ£GÆ «ªª"ÂÜÜ<$$äÂ… K—.]±b…WZPPpéÒ¥=zL˜0¡ÑŸTª««]]]ÏŸ?ßè…Œ ‡ÃÉÊÊ2ÔõhxðàADD„A– Žú,hêÕÖÖ¾ûî»aaaJ¥R©T>|øðÑ£G<oùòå†]QïÞ½,X0{öl­éK„¹¹ùºuëvïÞmØõv ………ݺu3àÕฌ ³8'''00Íf³ÙìÀÀÀV½®ºº:!!aÉ’%àÃ?T5:88œ8qâìÙ³¤¾Rª9+V¬øë¯¿:mfê)Ðj`0& àÊÊJ___‘H$•J¥R©H$òóó«®®Ög^.—»yóf''§ÈÈÈFS»u£çbo‹µ|ùò½{÷Ò²vÚö ,‚ úõë'•Jkkk ¸Lº0èpxxxJJÊñãÇÕ- .9räÚµkuÏÈä÷ …ššssóÏ?ÿ<$$¤GtE‘Ï>ûŒÍfoÚ´É€Ëtww?qâ„§§§— `^¿~mjjJöZþý÷ß;wîܺukÞ¼yyÈóuŠsÀqqqAAAš-AAA±±±tÕc666ÕÕÕJ¥2333%%eðàÁÿó?ÿ£¾…ɸö&`OOÏ{÷îv™]AAÁ† ìííSRR4ÛÛ³«Ñ9?ÿüsŸ>}6lØ––6|øðßÿ½¹z"""êêêÚ¼öN‚Aœ‘‘Ñè‚aOOÏÌÌLºê1,@óÝwßíܹsðàÁ/^¤»"Òedd¸¹¹v™`0zR©ô‹/¾xã7zôèabbbaaqùòåF}nß¾½téÒž={š˜˜ôë× ˆÝ»wÏœ93''GÕáõëד'Ovrr :th÷îÝMLLzõêõ믿ª—SWW÷í·ßNŸ>ËåN™2åÊ•+¿ÿþûˆ# °wïÞ’’‚ ª««ÿúë¯yóæíÞ½ûÒ¥KÉÉÉ?ÿüó¹sç6mÚ4`À€¥K—ž?^Ø111C‡ýé§ŸÆŽÛܳ{Ì’jJÆ055­­­Õl©­­íÞ½{‹32j+ôqáÂ…Þ½{Ÿ;wN³±  à³Ï>ãr¹"‘hÕªU3fÌàóùcÇŽ=wî\CCC;ט}àÀv.¤U*++-,,^¿~mØÅž={vÚ´i†]&•ªªªöïßïäääââ²dÉ’K—.iN-..^²d ÇÛ¸qcBBBUU•R©¼téŸÏWõ”Ëå‰DÎÎλwï~ùò¥æìûöí>þÞ½{£Gž¿Àúúú6ÿò«««¿ùæ›’’’VÍE^Ä0(ºÚÀZmÙ²åðáÃêngÏžÍÍÍUÿSs’æÏ¹¹¹gÏžÕ:É€KHNN¶±±Y¿~½R©ÌÏÏ_¿~½……ÅêÕ«?~œ˜˜(‹CBB¤R鯿þêåå5`À™L¦ ÷îÝûî»ï~øá‡²²²‹/÷êÕËÅÅeûöí–ÐÐÐðÑG}ðÁNNNvvv£Fúã? ò{HJJòòò2øo2;;»oß¾íYBûkÀ°„6/!>>ÞÞÞ~ôèÑIII÷ïß?pà€µµõœ9s¤R©R©üöÛo7nܨP(-aãÆª0333›9sæÿûÿOCj‹Å666ãÇ÷òòúî»ï´ÖóàÁƒwÞygìØ±l6{ß¾}ßÿ½zRlll~ßÿý¹sç<(‘Hš[ÂÓ§Oû÷ï?räH[[Û={ö\¿~}ݺuû÷ï¿{÷îÝ»wGŒÁçó¿úê+…BÑè7q÷îÝcÇŽ­X±ÂÖÖvøðáªmÃß"88ØÞÞžÇã…„„\¹r%++Ks þþþTÀ666š-ùùù½{÷nqÆ7V¹víš………ê‹áúõëóóóµv«¯¯ß¾}»­­íÁƒU_lu{ñâ…ƒƒÃ´iÓlmmÍÍÍÇ¿cǹ\ž››ëààðûï¿«{ž>}zðàÁC‡ýî»ï233³²²¢¢¢4ÿ7¶Ù÷ßÿÁ´9444°Ùl¹\nð%ª¡¡!44´OŸ>ÿý·f{MMÍÖ­[UájaaqòäÉö¯«¼¼ü믿V…z‹Uµuúkhh8tèЭ[·´N}òäÉÒ¥K9Î[o½õé§ŸNš4Iuɪ©©©‡‡Ç‚ öíÛ—žž2dÈââbõŒ¥¥¥;wî …êkÐÌÌÌf̘qüøñ²²2u·cÇŽ 4¨¢¢B*•~úé§£F2773fÌþóŸììl¥RYWW·lÙ2KKKÍQœ²“Œ€'NœøçŸj¶üù矾¾¾-ÎØA¸UnÞ¼©zÏ‹ÅR8TÇ…>ûì³yóæ988¼óÎ;×®]:tè®]»Ts5:¢’’bmm½nݺû÷ï/Z´hРA/^l´¢¬¬,gg篿þºÿ3W®\©ùíۀƌsåÊ2– @žíÛ·1¢¨¨ˆîB˜®¤¤$66vË–-111Zû„††òùüÀÀÀÏ?ÿü­·Þâp8 .¼{÷®zWVVvüøñ3f¨¡«XXXÜ¿_s9UUU Ÿ~ú)ŸÏÿñÇçÏŸïççWXXØhuäE ƒnà KMMmtÒˆ#>þøcÝ32ù6$ƒ+++SA«®®¾~ýúÍ›7…BáÈ‘#/^¼¸wïÞ©S§9r¤¹Ùsss÷íÛwäÈ‘wß}wïÞ½ZßõôâÅ‹wÞy‡Ëå9r¤  àîÝ»‹-êÙ³g«ê;vì×_=nܸVÍ¥•+Wzxx¬^½ÚàK0 ŠŠŠ¤¤¤çÏŸ5êÑ£G!!!7oÞ´³³£».#!•J¯_¿þäÉ‘H4vìØv>qïÞ½{ .¿ýö›ff«tŠgAWTTxyy¯\¹’ ˆƒ=z4==]uœV‡NÀºÕÖÖvéҥżzõJ÷íÈuuuÛ·oß±cÇ€8N÷îÝÏž=«ç› ‚hhhàp8999GßÒõqïÞ½ï¿ÿÞàKh¿gÏžEFF^ºt)##cèСB¡ðöíÛ/^¼¸víÚ!C讚õêÕ«.]ºh½‘ºSÜÌb±nß¾-Á;wâãã[L_ÐÔ½{w}ûÕâÃ@ºuë¶eË–ŠŠ ‰DréÒ%GGÇiÓ¦éùT2‚ ž={ÆãñÈH_‚’[_¾|ùõ×_4èï¿ÿnÃìJ¥òܹs>>>»ví2xmTÊËË›2eÊš5kjjj讥c())™zô¨Q©Tzøða‘H4zôèÒÒÒ#Fœ={V.—7·F…B±ÿþ!C†8pÀ[Ò¡ÔÖÖΙ3gïÞ½ãÇ×üšÛyž­CÒ¹e*ÇV0\JJJß¾}_½z¥Oç/¿üróæÍäãææ–””ÔÜT‰D¢:pÒ³gÏ+Vܼyóرc6løí·ß4o4,..Þ¹s§@ àóù›7oÖzuLZZš½½ý‰'4Ÿ?¾yóf___‹5xðàÁƒûûûgggGDD8;;?^}-aJJŠú޹¹ùîÝ»Ý}éÒ%õý^½zñx¼wÞyçöíÛê …âôéÓúßN]PPÂår8lذ7ÞxãÙ³gªIçÎÓ,F}áýáLJ ¦úËVUU}ûí·ÎÎν{÷ LNNVÍûË/¿Lš4‰Íf¿ùæ›999J¥òåË—aaaêëTÍÌÌÞ}÷ÝÓ§O»¸¸|ýõת*--ݵk—¿¿¿»»{xxxsWÖth………Ó¦M›={v{îRf"/bŒ!ºÀÔ˜=NŸ>M^%_}õÕǬuRii©««ëñãÇõ\T]]êY͹wïž­­í… Tÿ¼}ûvŸ>}Ö¯_ÿǨnÖ¬­­ýâ‹/LMMgΜyãÆæ–óìÙ³)S¦ 0`ß¾}ª»5Ÿ® T*+** ¿ýö[@0iÒ¤k×®]»vM(zzz …ÂÐÐйs纺ºìÞ½;99¹®®®´´ôìÙ³Ÿ|òÉèÑ£UGÏzöì¹víZÕý'õõõaaa<ÏßßíÚµvvvÍÝþ1sæÌY³fÍš5ËÚÚzÖ¬YÍu{ýúõ®]»lmm—.]jeeµtéÒØØØÊÊJÍ>yyynnno¾ùæO?ýTZZªT*%‰««ë{ï½÷Ûo¿]½zuîܹêÛ=-_"‘œ={V5WÇòçŸÚÛÛþùçî;ã€ÖLË—/÷ïß¿®®®ÅžªC¸äUòèÑ#;;»¦•444Ìœ9sõêÕ†]Ý7ÔcG Í;÷Õ4o7ÔáêÕ« .T]finnÞè)H*µµµ?üðƒ³³³­­m\\œR©¼uëÖÆ;&‘HNž<¹víZKKK‹5iÒ¤­[·^¾|¹¹¯§NÚ°aÓ'Oš«ª¸¸øã?þïÿ«~Þ‹wîÜùâ‹/òòòšëPUUõ믿Μ9Sµ™¾=~üxéÒ¥<ïóÏ?WÝú/“É–.]jkk«:®0a„?þø£¡¡áÑ£GçÏŸ×zG\zzúÇ[¬–Ož<áóù¸5Έ!€uASf̘1»wïÖÝG&“ñù|²oð6lX|||£Æo¾ùfôèÑz'g¸ÚÚZÝÌ+..îÐ[š½zõjÕímæææ›6mR}‰yõêÕ/¿üâééÙ«W/77··ÞzKó©F2™lÉ’%½{÷¶µµ5k–D"¡o#”¯_¿5jI·¼C €uASæùóçZOòiR~È®ä›o¾ ÖlIKK³±±yþü9Ù« 444¨NQ¿~ýzëÖ­\.×ÚÚÚÄÄD3­«ªª¾ûî;›Ë—/7šýÎ;cƌٶm›ÁšöàÁƒ¨¨¨%K– :táÂ… ,˜2e ÅÏ“Š‘1Æp-î¦R~~þ›o¾ùÁ¬_¿^k‡µk×:88„„„Z†L&:thnn®ê" ÿýwäÈ‘!!!‹-"u½@‹ÂÂBkkë.]߸qéÒ¥ùóçïÙ³ÇßßßÊÊêÙ³g¿üò˾úê«[·nÅÆÆúøøøøø¼ñÆ"‘Hë}&ÙÙÙ÷îÝóððpvvÖºv™LvêÔ©ëׯ'&&öìÙÓÇÇgìØ±žžžŸÒÒÒüqÑ¢E}úô±³³›}]ñž““óá‡òx¼+Vü÷¿ÿU/:ò"†ôè’J¥³gÏf±X,köìÙ:>ÁW®\™;w®µµ5›Í5jTLLŒž«@SïçŸvsskôn2¥RYQQÑ«W¯ÿý—‚ÊË˽¼¼víÚµ`Á??¿F—ãBgóúõk—†)•J¹\¾páB 6¨îø:räˆæµiÉÉÉýû÷V5þúë¯666¡¡¡­}{™ŽÀýúõS‰‘ËåÛ¶msuumîrM‚ &Nœxýúõªªªääd//¯ÈÈH}Ö‚¦Å‚ 6lØÐ¨ñŸþyã7(«A*•öîÝÛßß_õ¢S€=zôã?nîMA«W¯îÛ·¯••ÕÀSSS).ˆ¼ˆ!÷ìixxxJJJ£÷+Œ9ríÚµM;‡„„ìÞ½[uA‰döìÙOŸ>mq-8L‹’’77·øøxuãÖ­[«««wîÜIY=rvv¦þr`ܤR)ŸÏ×ÿùç`Ä:ê³ ãââ‚‚‚4[‚‚‚bccµvÞ³g:} ‚pqq‘Éd¤–íÁãñ¶lÙ²jÕ*Íæõë×ßxã *Ë0`Ò N  }läpFFF£g{zzfffê3ï… 4‡VÀ@Ë—/¯¨¨8uê”êŸeeeÉÉÉ£G¦·*€܃·Ý»w¯ªªÒ ¼~ýºW¯^¯^½Ò=£\.3fLdd¤O‹kÁ!h%%%Íž=ûÊ•+ýû÷_°`µµõþýûé. À`:ê!è¶),,œ5kÖ¡C‡ôI_mÄb1™eAÄèÑ£·mÛ6}úôðððû÷ïïÞ½›îŠÚB,kòÖhÈ`×,TµX[[[‰Dbkk«n/((:th~~~s ÉÍÍ>}úÞ½{ýüüô_/FÀôÚ´iSxxxrròàÁƒé®À:ƸÑuÛA¸»»§§§kö‘H$nnnÍ-!//oêÔ©aaaú§/0ÁöíÛÿúë/¤/€þÈ=íïï­Ù µsQQÑ”)SvîÜéëëKjU`p&&&úŸ/‚ì‹°***¼¼¼‚ƒƒW®\IÄÁƒ=šžž®~¹›æÐ^$ýç?ÿ™?~kׂCÐ@ò"†ôèzþüùúõëããã ‚ðóóÛ·oŸ@ ø¿Õkl˜ÖsÝ …‚Ãáè^HÒ˜` IǸ ô„ €` €h€ ˜YŒéØÆ2¦ÍÁ¶0“1m yH¿ƒ6''gýúõÿý7Ao¾ùæ¾}ûZœ«  ÀÇÇçéÓ§ú”gL÷c[˜É˜¶…0®ÍÁ¶0¶E䎀+++}}}E"‘T*•J¥"‘ÈÏϯººZ÷\J¥rñâÅ[·n%µ6‘û%%<<<%%åøñãê–… Ž9ríÚµ:æ KKK‹ŽŽÖó{¾j1¶…±Œis°-Ì„mѹ#ุ¸   Í–   ØØX³¤¥¥EFFFDDZ½È àŒŒ ///ÍOOÏÌÌÌæú×ÔÔ=z”Åb‘Z½È=Jн{÷ªª*SSSuËëׯ{õêõêÕ+­ýW®\iooÿå—_þoq8Ý‘a[˘6ÛÂLØ}t#c¡m›‘‘qàÀ6Ì«õU†¶…™Œi[ãÚl 3ӶĬùëV}_àr¹r¹ÜÖÖVÝ^RRbee¥uö7ÆÇÇwíÚµµë5šïYÐyò°RƒªÅÝÝ===]³D"qssÓ:{VV–P(4Ñ@„úcBîEXþþþÑÑÑš-ÑÑÑZ;+›P7’Z$õÈ=O^QQáåå¼råJ‚  o½õÖ/¿üÂäÏÞ?ÿüceeõã?ýðãGþ÷ßÕôÙR¹¹¹mÙ²åþýûMɺ?TkÖ¬5jÔ•+WÊËËËÊÊ._¾<|øð5kÖP[~c:6G©óoÁÀƒŽmÑý©cÚÞ@w=zV˽A‹Õê.¯={æîõöÞ{ïi¶¼÷Þ{ß~û-]õ´ÓÓ§O9ŽêçO>ù¤¡¡A=)==½_¿~4ÕÕ²„„ÿ»íÝ»wÑ¢EÊ–>Óô7nÜÑ£G5[~øá‡ˆˆÕÏzn)4ý%ëþP±X¬ììlÍþÙÙÙ,‹Ì[¡éæèþ[0yçÐt[t꘶7Ð]žÕ2doÐbµ:ÊkçÞ€¹;A=Mœ8ñÏ?ÿÔlùóÏ?}}}骧¤R)ÇÓ:©ªªª{÷î×£¿ùóç_¼xQwŸ»wï8°¼¼\I÷9ÝzöìY\\¬ÙRTT4iÒ$ÕÏúl)C´øKnô¡âóùMØÆÆ†ŒÚÚ éæèþ[0yçÐt[têaÚÞ@w=Z§2voдZåµsoÐáÏgddxyyi¶xzzfffÒUO›•••©NE¨^\ÑÔ… <<<(®JIII•••ãÇ777g±X“&MJLLÔìPSStôèQ‹EW‘í¡:lHè±¥H£ÕêÕ«çÏŸíÚµŠŠŠŠŠŠ«W¯Î;÷£>¢±BÝtÿ-Œ`ç þÔ5´½îzšNeòÞ@ë¶ôîÝÛÔÔÔÎÎî½÷Þ{øð¡º½½{ƒ6G7C˜ššÖÖÖj¶ÔÖÖ2ê»a‹4ÿo¾ùf]]]Ó>%%% ¸zõ*õåé©G<Oó Ç»v횺Ê+¶nݪþ'“?{>>>ÇŽÓlùñÇÕª·”9tÿ’›~¨fΜ©ùœ9s¦æÑ9z5ÝÝ &ïšn‹îO&¦í t×£u*c÷Z« ¸zõjMML& ·±±¹{÷®jR;÷LÙì6còÿ±V),,üå—_ìíí¿úê«F“ Æ—@Kaz255mzk„ ªŸÏœ9ããã£ùÝ‚9ÿ嚊·¶¶>vìXqqqqqñÑ£Gy<ž™™™jªî-e¿d­ª]»v9::ÆÄĨ®ZЉ‰qttüæ›oȯT/M7G÷ß‚É;‡¦Û¢ûS§Æ´½îz´NeìÞ@ÏßíÁƒ'Ož¬ú¹{Flv{ØØØh¶äçç÷îÝ›®zÚ)!!ÁÁÁA³åÅ‹^^^ÿüó]%é©wïÞMÏ`™››«~îׯßóçÏ5§2ä¿\s._¾}Ο?¯š:tèÐ'NÐ[¡þjjjÆŒÓè –Ž³) ÿìMŸ>=55µ¶¶6++ëÃ?\±b…zRk·”FMɺ?Tû÷ïgÏžU(ªsÀ}ûö=pàÉeê«éæèþ[0yç õó¯ãSÇ´½îzZ[-½{ÝÕúúúž:u*??¿¶¶öÙ³gÛ·o·¶¶NIIQMmçÞ€Ñ;A=eggÏœ9“Åb±X¬™3g6:»Àd ³gÏæñxݺu³³³ ¼yó¦zªÖ/L …‚Æ‚uËËË{ï½÷¸\n=F­ûl Ãø×_ussëÞ½ûÀ÷íÛW__¯9µU[J=_µ[üPýöÛoÞÞÞ‡ÃáŒ5êäÉ“4mÄÿÑ=rÐý·`ÚÎA÷¶èøÔ1mo »žÖVKк7Ð]m||ü¬Y³T{é>}ú,Z´èáÇš³·go`ÒÜê€<þ0@G„ €` €h€ €` €h€ €` €h€ €` €h€ €` €h€ €` €h€ éœššºjÕ*‡cbb¢ÿ\®®®­š !=€-Zdcc“˜˜¨ÿ,J¥rñâÅ[·n%¯*z™(•JŠÖd¢ïºÂÂÂÒÒÒ¢££õŸ céFw¥¥¥EFF&''Ó]‰˜uVMMMPPÐÑ£GY,ݵˆY¼aÆ9sæx{{Ó]É”Tiq]gΜñññ©««Ó•nÝw ŒF»Â¯y ºËÅÅ%>>^ è?K«ºuØf2¦m!Œks°-Ì„mÑkÉÌ `wý¶8#þÒ „ma,cÚl 3a[ôÁ ƒ·M·Ð˜þ„šh¾ Ϻ€Î‰ô°fĪƸ:9ÒXwÖ¶g*@ÇŬû€: 0³lÙ²…î ÛÂXÆ´9Øf2¦m!1\fŒ‹¥€$äE FÀÀ÷ïßÿ÷ß鮀:` ŸR©3fLRRÝ…P ôËËË«¨¨ÈÌ̤»ê €~?&âÁƒt@Ò855uÕªU§Å‡^]½zuÞ¼y|>ßÒÒÒÛÛûÌ™3d× ñäÉ@€€N…ô^´h‘Mbbb‹=Ç_\\|æÌ™üüüýû÷‹Å⨨(²Ë&xüøñŒ3ÀЩ0èmH!!!»wïV”%ÉìÙ³Ÿ>}Úþ%üÿþûK–,ÉÎÎær¹t—ð:ÅmH{öìÑ}ïÞ½~~~†]20SXX˜T*ýöÛo³²²&Mš”MwEÿ§S\„ED^^ÞÔ©SÃÂÂôO_èèž}ú”••uéÒ… ˆLš4I*•vëÆÐëó ³éÀ瀕ÚhNÕݳÅô…-%%eÈ!ªô%bРAŽŽŽþù'½UP€A瀡JII>|¸fËÒ¥K=JW=”ARRR† ¦Ù2þüøøøââbºJ 蔚š*‰4[Ølö[o½õÇÐU5À@›²²²üüü6jwttÄŒh“’’2tèPõXj–––eee´”@0Цé `0t`  :3fpjjêªU«8©/ †¸sçN£{T,--KKK©¯€JÌ àE‹ÙØØ$&&Ò]®¬¬¬¸¸Xõ†F,--ËËË©/ €JÌzà_FFÝ%Ed2Yß¾}›^E‡ÃÁŒ³FÀÐyÙØØh„sÀÐ €`èäÀ@ââb>Ÿ¯u›Í®¨¨À®À¸I›h#‹é® š¥#€»uëÖ£Gªª*ŠK€ÎL,kòÖh$¬õU†`&ÓqšÀQh œX,Öýþ\ƒ3’† è€N ôÐq˜@@'À¬qhžîVÿŒ«a’î0žÅFYŒ¬í$jkk«ªª¸\ns0£‡CÐ@ƒââbkkk×÷#€Àè!€º?`èÀ@0hP\\Œ€N 4(**Òq€N 4Ð}0€N 4À9`0Ð @zçää²Ùl6›(“ÉšëY__1lØ0‡cii)‰"""êëëÉ®¨‡‹°È àÊÊJ___‘H$•J¥R©H$òóó«®®ÖÚyݺu?ÿüsxx¸L&“Édááá?ýôÓºuëH­h¡ÏEXx21R÷qááá)))ÇW·,\¸päÈ‘k×®mÚ™ÍfK$¡P¨nyþü¹§§gyy¹îµ˜˜»`p½zõÊÏÏg±X:ú°X¬¼¼<Ý}ÈF^Ä;Ž‹‹ Òl ŠÕÚÙÌ̬icÏž=I© èS]]]__ßb²â(47r8##ÃËËK³ÅÓÓ333SkçÕ«WÏŸ?ÿÚµkW¯^;wîG}Dj…@½¯ÀRA€q#÷mH …ÂÊÊJ³…ÇãÉår­7oÞœ––6nÜ8uËÌ™3CCCI­¨‡ uÒž={RSScbbär¹\.‰‰IMM Óg^mÄb1É%C[”””X[[·Ø  T‹ÅZ£„¼5’;ær¹r¹ÜÖÖVÝRRRÒhL¬vèСcÇŽM˜0AõÏ™3gr8œ÷ßãÆ-®au -^­‚*‰Åb­Ã6ò2˜Ü°»»{zzºf‹D"qssÓÚ977wøðáš-ÇÏÍÍ%±> ÃË—/1 7€ýýý£££5[¢££´vvttLIIÑlINNvpp ±> CII Çk±Œ¹¼lÙ²7nìØ±C¡P(ŠíÛ·ß¼y388XÝAsh¿nݺŋÇÅÅ•––*Š3gÎ,^¼xýúõ¤VÔÓ3€¹\®B¡  Z{˜Åb%$$¬_¿~çÎAøùùÅÇÇ[XXhí¼fÍ[[Û;v<|ø ˆìÝ»wîܹ¤VÔkñUH*<ïÙ³gÔ@ r˜ ¡PÓÜÔFOÍ™3gΜ9d—ôÒó°µµõË—/)¨€ º : 0êéy0Œ(¥T*›>M+kkë’’ J (¥P(zõêejjÚbO§P((¨ €z` ”ž'€ ‚èÚµ+›ÍÆH`¬À@)ý˜Ài`0j` @…ôÎÉÉ d³Ùl6;00P&“éèÜÐаÿ~www333“'O’]P¬UÌãñÀ`¬È àÊÊJ___‘H$•J¥R©H$òóó«®®n®ÿªU«$ÉÙ³gËËË;vìØ1RËêa  Bî“°"##½½½CCCUÿ }ðàATTÔÚµk›v¾téRnnn\\œêŸÃ† ;þ<©åõô|´ Œ¹#ุ¸   Í–  ÒQx  IDAT ØØX­9²fÍRëÚµö4ncEngddxyyi¶xzzfffj휔”TYY9~üxsss‹5iÒ¤ÄÄDRËêá4€ ¹Üô™G<O.—kí\PP°|ùò%K–H¥ÒgÏž½ûî»3f̸~ý:©ÅÀ* º ©¡¡á›o¾Yºt)ŸÏçóùï¿ÿþîÝ»¿üòK}æ5ÑF,“\2´ÚË—/qH,kòÖhÒè…€†ekk+‘HlmmÕ-C‡ÍÏÏoÚÙÎÎîÞ½{šÃ£ââb¡PXUU¥{-&&änÇ{ô葞ƒàG½ýöÛ?&»*€æ1䎀ÝÝÝÓÓÓ5[$‰››[sI-hW___^^Îårõì÷1€#7€ýýý£££5[¢££´vž5kV£ûŽÎ;7bÄëj•””p8œ®]»êÙŸËåVTTÔÕÕ‘Z-ȽxÙ²e^^^;vìX¹r%A¼yóæáÇÕ4‡ö|ðŸŸAÓ¦M#âܹs!!!§N"µB R«®À"¢K—.G.—ÛØØW-ȳX¬„„„Û·o @pçÎøøx ­ÍÌÌ~ÿý÷¿þú«ÿþ}ûö=räÈÉ“''NœHj…@¥Ö0ë°Àx‘;&B(ÆÄÄ47µÑ™m;;»ãÇ“]Ð  Æ ÛÀè•””´6€ñ>0V` NnnnŸ>}Z5 FÀ`¬À@/^ôíÛ·U³ €ÀX!€:2™¬µŒ÷1€±Burss[À|>#`0J` ŽL&spphÕ,|>¿¨¨ˆ¤zh„ŠTTT(•JKKËVÍekk[XXHRI4"=€srrÙl6›Í ”ÉdúÌUPPàêêJêk(€bm8L €Àx‘À•••¾¾¾"‘H*•J¥R‘HäççW]]­{.¥R¹xñâ­[·’ZP¬mlccS\\Œ·]€ñ!7€###½½½CCC¹\.—Ë 9rdTT”î¹ÂÃÃmmm,X@jm@±/^´ö0AÝ»w·°°P(d”@#r8...((H³%(((66VÇ,iii‘‘‘¤ÔkÃMÀ*8 F‰ÜÎÈÈðòòÒlñôôÌÌÌl®MMMPPÐÑ£GY,©…õ^¼xÑÚÇ`© €À(‘À …ÂÊÊJ³…ÇãÉåòæúoذaΜ9ÞÞÞ¤V´hÛ!h‚ lllp'݆›‘‘±iÓ¦6Ìk¢X,6tÐv8 L&‹µF yk$÷u„\.W.—ÛÚÚª[JJJ‰Õ6nÜßµk×6¬WÉ2_›#` €X,Ö:l#/ƒÉ»»»§§§k¶H$777­³²²„Ba£ïdjTUU½~ýšËå¶a^Œ€À(‘ÀþþþÑÑÑš-ÑÑÑZ;+›P7’Z$P m7« €À(‘ÀË–-»qãÆŽ; …B¡Ø¾}ûÍ›7ƒƒƒÕ0ºí$Úðh5‚£Dn³X¬„„„Û·o @pçÎøøx RW ÔæÀFÀ`¤È½‹ ¡PÓÜT݇—qðÙhäææ¶í&`#`0R º ŒXÞ¬Æb±”Jeee¥aK ¨››kooßæÙ1ãƒ*äååµù4ÓÀ`ŒÀ@…vŽ€À`|À@ººº:…BaccÓæ%ØÚÚâ40.??ŸÏç·í!£*666€‘AéòòòÚsü™ÀŒéœ““Èf³Ùlv`` L&k®çÕ«WçÍ›Ççó---½½½Ïœ9Cvm@öܬ‚0r¸²²Ò××W$I¥R©T*‰üüüª««µv?~|qqñ™3gòóó÷ïß/‹£¢¢H-¨ÑÎK  \„ƈ܎ŒŒôöö år¹\.744täÈ‘ÍÅê'Ÿ|?vìXssó#FDGGïܹ“Ôò€yyyvvvíYîãCnÇÅÅi¶ÅÆÆjí¼gÏÍw3¸¸¸è8^ HûAóùüââbCÕÀäpFF†———f‹§§gff¦>ó^¸pÁÃܺ€Rí?ÍãñÊËËëêê UíÈ `…Baee¥ÙÂãñäry‹3ÊåòÐÐÐ}ûö‘VP§Oá ¢K—.§¤¤ÄP%ÐŽ‰·!Κ5ëСC>>>zÎb¢X,&³LÐWûA8 $‹ÅZ£„¼5’À\.·Ñx·¤¤¤Ñ˜¸‘ÜÜÜÉ“'oÞ¼yâĉú¯H© ˜ ªªªêêê,--Û¹\‡¤‹ÅZ£„¼5’Àîîîéééš-‰ÄÍÍ­¹þyyyS§N óóó#µ0 ŒA†¿FÀ`tÈ `ÿèèhÍ–èè耀­‹ŠŠ¦L™²sçN___R«*!€´"7€—-[vãÆ;v( …B±}ûö›7o«;h^Ÿ2eʦM›¦M›FjI@±ö_­‚#Cn³X¬„„„Û·o @pçÎøøx ­ïÞ½»`Á‚Fg¿KKKI­ÈÖþK UpŒL7²W  cbbš›ªy~›ÔsÝ@—¼¼<¡PØþå` F†‰·!1‘Éd8 ÐX—ººº¤¤¤£GâLmöäÉ—ö/ FÆÄüš˜r+”Jezzú?ÿüséÒ¥ÄÄD''§^½zÕ×ן8qB j-DCC‹Å*,,ìÕ«W;U\\}ú|òÉ'YÚ„ ¶lÙÒª‡„´yl̇  /^¼?}úôˆˆ2^mѽ{÷!C† 2DÝxóæÍ¾}û|uÈ“'O ˜—xf]„•““Èf³Ùlv`` L&kÃBJKK¿úê+OOÏAƒ;wnÆŒYYYÇ7n©/–ÒôöÛoôÑG3gά¨¨ fÌdÀsÀîD`¼W¯^UUUÑ]E‡Á ®¬¬ôõõ‰DR©T*•ŠD"??¿êêjý—PRR²uëÖþýûçääDEEŸ:ujÑ¢Eº_€H’O?ýÔÛÛÛ××·ÓÞ9óúõ뜜gggC- Àÿþûï£GþþûïLJ„„Ì™3gÔ¨Qöööl6[(†……©®Ýt:22ÒÛÛ;44TõÏÐÐÐDEE­]»¶Åy«ªªBCC£££gÏž}ãÆ ƒ<ù¡ý8ðÅ_Œ7îôéÓƒ ¢»ªeggÛÛÛ÷èÑÃP äóù†ZèVQQñüùs¹\þòåK™Löüùs™L–““#“ÉJKKœœ\\\FŒáèè(z÷îýèÑ£ÿüç?ß}÷ÝòåË—.]Ú»woº·ƒ¹ÀqqqŸ}ö™fKPPЮ]»ô àaÆ=:33“iìmÛ¶999M˜0aùòå¡¡¡L#æ3ìñg‚ lll.]ºdÀ€Jee¥T*ÍÊÊzòäÉÓ§O³²²?~üòåK¡Pheeemm­ÊWGGG{Úž={6%%åûï¿8p ½½ýˆ#T7›8::ä©FƒAWAÛÚÚJ$Í»< †šŸŸ¯{F“'NÌŸ?ŸäÛ.??ÿ£>zôèÑñãǽ¼¼ôŸ±¡¡áêÕ«¶¶¶eeeUUUYYYÏŸ?ÏËË«¬¬|ë­·fÏžmiiI^ñm¶oß¾gÏž}÷Ýw†ZàåË—·lÙråÊC-€vUUUçÏŸïÒ¥K`` e+­¯¯øðaffæýû÷oß¾}çÎêêj@  û÷ïïââÒ¯_¿…Âv^7S__Ÿ™™yëÖ­k׮ݸq#??ÿõë×öööŽŽŽ®®®0`€‹‹KïÞ½9e×è´V§¸ ©{÷îUUU¦¦¦ê–ׯ_÷êÕëÕ«Wºg$ï·cXÇ߸qã’%KV¯^íè訣§T*½råJrrrll,Ç0`€L&+..¶´´433ëׯŸ³³³½½½©©éÙ³gãããÝÜÜFŒÑ¿@ Šj›®]»R¶iZ­ZµjРA}ô‘¡˜‘‘1gΜÌÌLC-€.•ÿ¿½{jâN…"@ä4\á@åæza=aÕb¥ v¡•®nn×µ»ÕjOíÁŠˆËe·µÂÂö´U¶EÀR¨"ŠÅ" —EHH„„Å„Ûïyß¼ó#q—ax> sÉ<ÏäË÷ÉÜåò+W®äçç—––®[·N(:::fffâzß„@ (,,,))©ªª²´´ôððpuuõõõõóóc2™ø­M¡Ptwwwvv>zôˆÏçóùüÖÖÖÞÞÞ¾¾>Õ>>îîîªãŽJ¥²±±±­­M__Ù²eFFFH¹QÕ~SSS …¢££cllŒŽÇ3NT*U©T¢Ç(•J==½I|Ujüñ_|¡š­¨¨H(ªþDOB …¢¢"“fþ ÙÙÙ #::úáÇêŸ022ròäIƒœššÚØØ8i r¹¼¢¢âôéÓëׯŒŒôòòb2™K—.EÚ¹¹¹››‡Ã‰‰‰9pàÀñãÇOœ8ÑÞÞ>Û!88øØ±c³¸%Ïž=kllÜßß?íO [{€OXlŸ T*³³³ƒ‚‚LLL¶lÙò¯ýëÌ™3ããã …âøñãFFFyyyUUUb±X›ärùG}TPPpþüù”””¨¨¨íÛ·ïØ±#***<<ÜÅÅÅÏÏÍf›ššêêêZYY%$$444yK677‹ÅâÇß¾}ûí·ßNMMýè£ýüüÂÃÃÝÝÝýýý×®]ëââ‚ÔQ]]Ý€€€C‡%''ÇÆÆîرÃÓÓ½GG¥R=<<¼½½###ÃÃÃ×®]ëéé‰ìî;:::::¢gž›BI¢}Ç™‚&OÚËå_|ñÅéÓ§Nž<Éf³‘ñƒƒƒ›7oÖÕÕ=þü¬¼Cwll¬··÷Ù³gb±ùµ(‘HÊÊÊø|þk¯½æïïܬÅápôôôf¾º \\\~øá‡Ù½úŒÇãñx¼={öÌâg€7¹\~ëÖ­ëׯ_¼xù5¼}ûvõ»3øá‡Ë—/····µµ-Y²ÄÕÕU$µµµŒŒèèèX[[³X,&“É`0d2Ùýû÷Ÿ>}êäääàà€ì2™LKKK]]]F¡PŒ‘I†††Dd?_)Š¥K—R©ÔEq:44ôðáÃ6lP¹qãÆÉ“'ËÊʰœw144ô÷¿ÿ=%%eïÞ½ýë_ŒŒx<“ÉüòË/ñ>Ò××wïÞ½û÷ï766677·µµ­ZµÊÕÕ¹ÎÂÉÉiÕªUvvv3 ÃØØ¸««kÂÁœÊÏÏ?wîÜ7fñ3ÀÃË—/îܹsùòåêêjd×-::Zûó„B!ŸÏ·¶¶vrr¢R©###B¡°££ù1mhhèççÇápÃ]?‹¢§¦¦>xðà믿Vyë­·üüüÞÿ}ìçiFH$’#GŽq¹\¢¢"]ݹ¾4ýåË—|>¹Óyšf__r}„““Ó‘#G¦zýv¿]ÿì†:44dccÓÔÔ4g§¬Ð^WWWrròÍ›7¥Ré‹/V¯^½f͚͛7GDD˜¦EQ€e2—ËOLL¤P(YYY999õõõ“¾qh^`DcccffæçŸŽ5"ƒ–––ǧ§§ïÞ½{ß¾}SZ¼¹¹yûöíx\0µwï^OOϤ¤¤Yÿd¦­»»û³Ï>ûî»ïvíÚÅ`0V¬XÇ™0÷ÅEXããã€ÇãÑh4ÆãñÐ× a [ LUU‹ÅR(SZêÆáááxÄSZZêëë;GGGKJJk¸˜----`0þóŸ{{{‰Ì>üJ ‰ÄA¡Pìíí ˆŽüüýýW¯^››› ýR]]]8ÝP"D"‘öG¡»»»ÿóŸÿ¤§§ëêêÊd²S§N½ùæ›xÄÇ_¾|¹¸¸ø×_ýýïߨØH¶§ò#WätôèÑØØØ={ö`\¦?P(´±±Á#ooﺺ:t~ñâ…ŽŽŽúüæææøøøGmÞ¼9777  ªªjÿþýGݱc‡··7N§Óévvv|>¿ººúÊ•+7oÞT(ºººŽŽŽ...ööööööL&“ÉdÒét###cccx¦Ïâ422rüøñ/¿ü’Çã½ÿþû›6m‚CÍ`z ƒÉr8œÔÔÔ¿üå/Z." ===qŠÇËË«¾¾~Ó¦MÈŸR©tÆ ÎÎÎß~û-z¶’’’Ý»wöÙgqqqªKÛÖ­[WSSSWW—ŸŸŸŸŸÿâÅ ©TÚÙÙ944Äáp¸\nBBB~~>Fnmmåóùííí÷î݉D}}}ƒƒƒýýý …B.—#Ÿ©ºs___ßÐÐN§K$±X<::ª1~&“)‘HºººFFFf¾M ß}÷ÝC‡Á~®ø|þÛo¿mbb2ážI¦§CÛsiadArȃA´‰¾Ë~výûßÿŽŽŽF†{zz¼¼¼<èíížž®š§¤¤„ÉdÞ¹s§ÐFFF¤R©T*‰DOž<©©©éìì~ÕüÃÃÃàîÝ»Ož<™ðð™i‰DIII‹çR[ƒ½{÷ÖÔÔÌÊÖÓ†R©àiƒ|¸²²¿222jkk à±”@È»I¤ÿK"‘ ¯Ö …ÝÝÝÝÝÝŽŽŽ,ËÁÁyCŽ™™ÙúõëÏœ9óÛßþ–èðað+1øÞ†$—ËCCC÷îÝûÕW_Q(”¬¬¬°°°ºº:×j¾þúë!!!—.]òöönjjJHHxöìY||<®‚i011¹zõj@@ÀÈÈÈÎ;ÕßmŒßS8T¼¼¼>ìîîÕhiéÒ¥–––¯º.A¡Püðÿýío­­­È$üƒ¥bll|ðàÁíÛ·ãºÀ¾¸©©‰Ëå¢Çxzzjù†œk×®¹»»ã˜5K—.åñxµµµo¾ùf@@@^^…B …x‚¦P()))«V­Â{-€|/_ÒÓÓD?@xxxØÈÈH¡P`/(•JÎ;4éZà",’hhhصk—‹‹KKKKVVV`` ÑÀLáWbðÝž‰DõüC›ê‹X¢É±cÇð Läááqÿþ}‹ÕØØˆ÷!h˜]ÇŽÓXJð[ãlvt ÈǪ?I,{{{‹D¢W}ˆP(ܲeËéӧô_/ì“JEE…¿¿?<3°Ì=à —Q(77·úúzô<>tuu}Õ'twwoÚ´)55Uûê H(88ª/`Ã÷tdd$rUŽJ^^ÞÖ­[5ÎÜÓÓ³qãÆäääÐÐP\£‡ïÁ[™LÆårããã)JVVVNNN}}½ê‰¬è]{ŸC‡íܹsªkCÐp2EÙÞÞž””TVVF¡PÂÂÂÒÒÒX,Öÿ­•˜ÆsÝ}}}t:{P€àdà9NæÇEXÐ`€P€@ `€P€Ée!½@r!­…”äBN )üà~mgggRRRii)…B‰ˆˆHKK³µµt)±XÔÚÚªMx é>`È…œR.”…•äBN‹6ðÝ–Ëå¡¡¡>>>>>>aaaÿýï±—ß½{÷'Ÿ|‚klðý‘ræÌ™ššš¯¿þZ5æ­·ÞZ³fÍÿøGŒ¥RSSëêêòòò´üÝ?µÈ r!­…”äBN‹6ðÝ...Ž‹‹C‰‹‹+,,ÄX¤®®îܹs™™™¸ ßÜÔÔÄårÑc<==›››_5ÿÐÐP\\\NNFÃ50€Xø%ÐÓÓ¤R©ª1ÃÃÃFFF …Bãü‰‰‰ÖÖÖGŽùŸààô|¹ÖBJr!'ÈEºx|èô655eddLcY¯2œ§ rZH¹PV: 9-¤\p2›½¹‘ß ¦¦¦R©ÔÒÒR5þùóçfffÿÓŸþTVV¦££3Õõ.˜ßYÙ<<Ž‚Œqss«¯¯GÏóðáCWWW‹?yòÄÞÞ~ …BQ ¾aEFFæåå¡ÇäååmݺUãÌãjT#q ˜{øž'—Éd\.7>>>11‘B¡deeåääÔ××/_¾üVyr{!ÆÐðݦÑhååå÷ïßg±X,ë—_~)++SU_`Ñ‚]L€ð6$€P€@ `€P€,„ÜÙÙ¹mÛ6cccccãmÛ¶=}ú”舴uïÞ½øøx===kkëðððï¿ÿ^5µ¢¢"::ÚÜÜÜÄÄÄßßÿÒ¥K†ª±±±ôôt777ww÷ .hœM,;;;“ü £¥¥¥Ë–-333‹•H$è©ZfJ”¼÷Þ{t:]}#c7ªÑÑÑÌÌÌ×^{N§›˜˜øøødffŽŽŽÎaì`¤C™ì» [ç€ F«#[o€öÑ’¡7˜4Ú%jÐSgÔ¨?r~‘Édl6ûÓO?•J¥R©ôÓO?uvv$:.­øùùeddðù|…Bñüùó’’//¯£G"S)JHHHeeåàà`uu5—Ë=wî±c{÷Ýwããã[[[ Å/¿ü²iÓ&õyÆÆÆ6lØðÍ7ß¹íýøãfffÙÙÙ======çÏŸ_ 1•PÅIDAT·nÝË—/U3h“)\]]?þøãÆÆFõŒÝ¨öïß¿víÚ[·n ô÷÷ß¼yÓ××wÿþýsþDéŒc~$ì0rÁnudë °ãÑ2Z’ô“F‹ÞLzòv‚ZJMM‰‰A‰‰‰9{ö,QñÌPkk+NG†?øàƒ±±1Õ¤úúz6›MP\“+//ŒŒœt¶Ó§OÇÆÆŽOÖ¦‰œ““ƒsþüùÌÌLdXËLÉ@}#c7*&Ðó †gŒS žöwAæÎA=ìVG¶Þ;-£%Io0i´áͰ7 o'¨¥’’ô˜’’’ÐÐP¢â™¡ŽŽƒ¡qÒàà žžÞÇ£½;w^¿~{žÚÚZ‡3000Nô¿¶eË–õöö¢Çôôô„‡‡#ÃÚdJ“nä ÊÜÜ\½[XXàÛ4¨§ƒý]¹sPÏ»ÕM@¶Þ;SIÛ¨G‹Þ {ƒy¸©©‰Ëå¢Çxzz677Ï´õ÷÷#§"W¨»víš»»ûG¥½ªª*¹\þúë¯Òh´ððð;wî gŠ‹‹ËÉÉ¡ÑhD9ÈaCŠ™Î#Õþð‡;wÞ¾}[&“Éd²ŠŠŠ7ÞxãÀFˆ û»XƒªÕM@¶Þ;õ©dî 4æbeeE¥R™LfLL ŸÏWŸio0íÒMT*U©T¢Ç(•JRý6œú눈ˆQŸçùóç«W¯®¨¨˜û𴤯¯Ï`0Ðg° ÆíÛ·U3ìÛ·ï“O>QýIæ¶”››‹“­jT“fJØY½QñxäðÊ•+322pS[êé`dî4¶ŒVG¶Þ;ž©FKlo€mhhh~~¾H$R*•mmm'NœX±bEMM 2u†½©;A- G£Ñh4Ç›pvÌÊËË÷»ß1 ]]]&“¹mÛ¶{÷jüÁÔ××G`Àغ»»cbbLMMõõõ×­[‡}6…äø»ï¾suuÕÓÓãp8iii£££è©SÊtîaüÔž´Q]¼xÑßߟN§Óéôµk×^¸p $þöžöwA¶Î;ŒVG¶Þ;ž©FK!´7À޶¬¬,** é¥mllbccù|>zñ™ôK^µzàgÞŸæ#(À €  0@(À €  0@(À € àÿø½ú±þ|§IEND®B`‚gsl/doc/images/bspline.png0000644000175000017500000005747413536674414014127 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìÝ{|ÕùÇñÏ’p‹‚]´¨E.­¥JPPÔŠÄB@Tb­Š·¢UT*hQ”ÔÊϪÕz xË‚U@T¼â-­x•ÒzIŠ&@Ù 0¿?¦;d“ÈîÎìî÷ýò™Ý$g6“yæœó<çx Ã@DDDb«Ó IF À"""Pq€°ˆˆˆ€EDD ,""â`(‹ˆˆ8@XDDÄ À"""Pq€°ˆˆˆ€EDDàÞ¼fÍšË.»,##ÃãñìõÍž01h¡ˆˆÈ~sož2eJ÷îÝßyç¾ß¨/ªmi%ûc•dz÷F¶ä="""îáÞ°ˆˆHKœÜ£G¶mÛ|ðÁçœsÎúõënŽˆˆHs$;Öï÷ÿðÃï¿ÿþ1Ç3|øð>úÈéF‰ˆˆ4)¦N÷c~÷¾ûî{î¹ç^|ñÅæßÖ¶mÛ]»vµ¢i""’ø¢(3÷Ýw}úôÙ¾}{Ä¿³ËéŒÜOgï¤tF.üA 2Ý@‚]g""’x3:ÔéVˆˆˆ4)Õéì'û˜À¨Q£.½ôÒaÆuíÚuãÆO>ùä]wÝõÒK/9ÛB‘f¸·l_T²ù&gÍšõÄO 0 --íøã_¿~ýÛo¿=hРضWDDd$Ú´ü>QV‚ûéŒÜ/ñΈD<)‘ {{À""" L8¡Ìž=Ûé&D˜ÎÈýïŒHēҹP¢ Jì“Ä“‘ÈÒ´ˆˆHBQq€°ˆˆˆ€EDD ,""â`(‹ˆˆ8@XDDÄ À"""Pq€°ˆˆˆ€EDD ,""â`(‹ˆˆ8@XDDÄ À"""Pq€°ˆˆˆ€EDD ,""â`(‹ˆˆ8@XDDÄ À"""Pq€°ˆˆˆ€EDD ,""â`(‹ˆˆ8@XDDÄ À"""Pq€°ˆˆˆ€EDD ,""â`(‹ˆˆ8@XDDÄ À"""Pq€°ˆˆˆ€EDDêt\¡¦¦fåÊ•%%%½{÷>í´ÓÒÒÒœn‘ˆˆ$8`À¤I“JKKÍz½^¿ßŸ““ãl«DD$±y Ãpº Žñx‰ˆdÀGqÄ>‰ÍW 8ÐÊÀ2y½ÞuëÖiXDD4-ééé………^¯×:âóù }ED$ª’½lž¾ê€ED¤QÑë+'ï鋈È^iZDD$¡(‹ˆˆ8@XDDÄ À"""Pq€°ˆˆˆ€EDD ,""â€T§à.ZKDDbCøÀ¤I“¬222®»îº+¯¼RaXDD".A† ×¬YsÙe—eddx<ž–¼¿¦¦fÉ’%À’%Kjjj€êêê‰'Ú·Eª¬¬œ9sæGQ\\¥f‹ˆHÒJÅû÷››››;`À€½žQƒž®×ëõûýßÿýرc}¿Ïç[»v­öGIBÚŒ¡¥öúIUWW0 ¬¬ÌüçIð ø|¾©S§Þpà M}Õ²eËÆŒá¶Šˆˆëi3†ˆY½zµ}`%üJKKüñÇf¾jÆ ±hœˆˆ$¤K²Bi máa8R;tðù|ö9`»#Ž8"Fí‘ät=`+”š ¿‡=0N|時‚‚^½z…‰×ë>|x Û(""‰/éððáÃ}>ŸõÏ{aì€ãÖ¬ylĈM›6:t°Þàóù •%"’Ønºé&Oc¢÷“. (..ÎÍ͵ò°€³àIøÆ|páúõ©©©ZŽCDDPt˵𓪩©™3gÎüùó­#ÀoáS(ñûO›0!ŠM‘ø¡,èKKKëÖ­›ýÈïá3è¾;îpªU""’<’4–Ø„‰PÞ{%Kœj•ˆˆ$‰‚ntž|¯+rtÐA ^ß¹ó¼mÛðùX¿žŽ#ÙD‰C‚Þ £1͉™Øìõz­#>ŸoìŠ}4¥¥äçG·Å""’ܤ¼<O0l˜ðüî» F‡¬_­`IDD’² £¢ÉuâDü~Î=—E‹bÞ(qà¨hòc-+£o_vìà­·:4æí·Ðply½\u†Áµ×:ÝILê7qúÛ·sØa|÷«Vqòɱm—ˆˆ¸…zÀ1wàüá·ÝætSDD$©ÜôéWWsÈ!lÛÆÛok&XD$9©ì„ôt.¿À¶d´ˆˆHD¨ÜìéoÙÂ!‡ òÁüâ±j—ˆˆ¸…zÀéÚ• /Ä0Ð ""Qêïíô7n¤OvïæóÏ9üð˜´KDDÜB=`çdg“—ÇîÝÜsÓM‘Ä¡p Nÿ³ÏèߟƒbÓ&8 úí·PØQýú1t(UU<ý´ÓM‘¡Ü2_ ðÀN·CDD„† [vú;wâõR^Î0hP”Û%""n¡!h§µoϹçüíoN7EDDzÀ->ýý‹#䀨´‰ôôh¶KDDÜB=`øéO1‚íÛyâ §›"""qOx_˜©X÷ßït;DD$îiz_N¿¶–ìlÊËY³FKC‹ˆ$ A»C»vLšðøãN7EDDâ›zÀûxúÇËÁSVFJJMMÍÊ•+KJJz÷î}Úi§¥¥¥E§¥""âŒèõ€€÷ýôûöå_ÿbÕª@§N“&M*--5{½^¿ßŸ““áVŠˆˆs€£b¯kãÜ›o榛ê&OîóöÛeeeö÷û|¾µkצ«HID$Q(GEók h¼ƒûÅ~xmjj׺ºía_µlÙ²1cÆD­É""SJеêêê‰'ZÑ(++›8qbuuu ¼|M»víêêÆ6ö…6lˆY#ED$~)7nõêÕ †—ÒÒÒÙ³g=úï;wç6ö…GqDô['""qO¸qMudï¾ûîÊÊʧ N†õ_õz½Ã‡AóDD$Þ)7®ùŽìVxRa¢í Ïç+,,T–ˆˆ´„pã†îóùšyÓä†þ9cÆŒÏ?ÿ|È!Ñn˜ˆˆ$eA7yúÅÅŹ¹¹á3Á¦4(‡à…¯wݺuêûŠˆ$•!EEËë€ËËËçÏŸßàÕgàLøSçΧ­\©¾¯ˆHBRŽŠ–¬ÕÕÕ´W%¦¥=XS³ûøãSÞ|3: ‡©Øaééé………^¯×:âóù¦._N‡)ï¼Ã·ß:Ø6‰GêïÃé7²2åg°lý+—^½vŠˆˆS4øX 8ïý­[éÑà»ïèܹõ­÷д‹ué²û¸ã¨«[9mÚ’%KjjjœnˆˆÄàÖ ·~ò ðÃãçææöíÛ·¸¸ØéF‰ˆˆÛiºU§_]]=`À€6ee_C5tƒZðù|k×®ÕÒÐI®‘ªq‰CÑ‚NÆ7MT@æ¦MÛ׬9pÐ gÛ&1°×ÕÂͤè¦Æ §*a‘„§!èÈh°ìÑx€×þøG%µ&¼@ pä‘Gæææ^sÍ5¹¹¹öôfKxRt·nÝšú†ªI À‘>`øm^~¹ÑÛ±$Œð5ŸËÊÊ&NœX]]Ýà999ëׯ÷ûýùùù~¿íÚµ ggg*K$á¹7—––Ž?>=====}üøñÍ/«ë ³všÂ W#໲²ÓO?ý»ï¾‹q“$6]ó¹©,ª´´´ &LŸ>}„ Yݺ=ë­Ó»t¹^‡wáõÔÔõýú}5bÄõëÙ´)&ÍǸ4oß¾}äÈ‘ƒ *)))))4hШQ£šË5ê‹YSMáË}ká@  P?8!5•-Õ\Õ7ßpë­ôé3 //ëÖ+a #víúégŸ¥.^Ìùç“M¿~ÌžÍÖ­Qj¹ˆ8Ë¥øÁ2dȬY³:wîܹsçY³f <ø¡‡rº]M ŸáVð+***–”x×T¶Tyyy#Œ_}En.½{sã|ý5½{3i·ÝÆ /ðÎ;¼ü2K–pÏ=ŒKz:ŸΜ9z(7Þ¨0,’€ W:ñÄ_zé%û‘—^ziäÈ‘M½ÿN$â§ g̘a}¶'klŸö²eË"ûÅqUUUM­ùìõzÀß·s§1w®Ñ±£F»vÆ„ ƪUÆîÝM}Û`UÕ³gÕ·¯ééÆÃÇè”DÄ&zÒ¥¸{÷î›7o¶ùöÛo{ôèÑÔû¬¬¬ÔÔÔ=zœ}öÙŸþyK~J4>Vûí¸ad…îÈùùùÿ‰â¸@ Ð`ðÃâóùªªªŒ@À0C©Çcœ{®ñÍ7Íâ¢"ë*otèðß0|î¹Æ?Äæ¤DĽìÒ!èmÛ¶uéÒÅ~¤k×®[›…;v¬ßïÿá‡ÞÿýcŽ9føðá}ôQô›Ùs,:33øVƒN½Úø°¤Ä93½Ù>øa)--ýÏ-·0bë×Ó·/¯¾Ê¢E|p3»/4H«Àˆ¼¦kW#-Å‹9úh>þ8g%"Ñ¥ÀÞJmÛ¶­­­µ©­­m×®] ¿ü¯ýë¯~õ«½¾­©ÏdöìÙûÑf»Í›7›1ø`À"Û7¯7,) $??¿Á…ä›Ì^/—]fìÜi¾ÓÞÁ ¿$–-[ÖèeùÚ½÷þw8ú­·:K‘„5{öìJ—à}‚n`óæÍpÀ^ßÕçsXòH0`3Øë¢þ;,)‰¥Aàl O€{Ú´1î¹Çz[UUUøxµý’ä¦üü|£¦Æ8ë,Œ0^{Í¡I.Ñ‹.‚îß¿ÿÇõÇÙ>ùä“~ýúµðË lñdKŽ1£²à(ÛKZj?!ÙKÑR &Ãö6mvøýL›f½m¯uÃM¥UqÄtìXó·¿}}≃»O=uçòåQ8‰—àÓO?½  À~¤   ÑÝÜUXX8tèÐ(´kߤ¥¥uëÖÍ,F:¥þKZj?ñX¥h¸΂Ú´ùêïOûÍoìoÛkÝpxM9¡Å)À‘ôyýõ ¥¶–3Îøø®»ššK·‹RϺ•ª««=ôйsçnݺuëÖ­·ÞzkŸ>}¶oßn½ÁÞò‘#Gúýþo¿ý¶¶¶öË/¿œ;wnffæ|°×ŸƒÓ_¶lY.ðrý]õH‰* nøõ¯ ØÕ¾ýŽ—_CSS¼öK¢AZµÏç{ýõ× 222Ì#Xl…Ÿ†Þ¦ô‘hˆ^¤pi6 㫯¾7n\§N:uê4nܸ¯¿þÚþªýyõÕWÏ<óÌ®]»¦¦¦öêÕkÊ”)ëׯoɈA®ªªúyvönØm7JÍ'¬¹s 0Ú·7ê²[­¿$‚Á µjô믿þ%mà0àßÐÕªui‰DVô"…ÇpÁt©S<žXœ~qqqÚ ' ¬­=^ŸÏ÷ôÓO2$Ú?W°|9ãÆáñà÷sæ™M½«¸¸877ך nþ’¨®®0`@£k¡o X §@-Ë–-3fLëOEDLÑ‹Ú8êrrrê~ÿ{î¼sÞ‰'^|Ùen+ñËÚ x@jê)7ÞèÙ³‡Ûoo&úJÐk~ÿ`K£I[¦ Œ…b÷ÂE€Ò Dâ‡p,´=š;ï<¦ªê˜ œn‹DR ˜4iRiiéAP ØròÉ]¯»n¯_hn‹Ô’Ñ|@ÝgÀ›p!¼ …M'Q‹ˆÛ¸4 :Ñ FÇŽ|ôN7E"ÆZ²ª <?…`èúõÕ?üÁŸ²×€úLà~ܳçðáÃ#øÓE$z€c¢C† cÏ^{Íé¦H«Ø—\µj•98< ~ p&ü«¬,²EÞV%5ð,‡ÎðrÏžéÁŸ."Ñ£!èX9é$^~™W^aâD§›"ûÉp6ÿió8¾Z7 kÍ([sÃfy±=i+œwÜÈO>Iÿç?ën¿½íÌ™û݉eAÇêô׬ᗿäÐCùòËýD‰¨F³‘SàM8…óC÷;¹A€÷z½‹-*///))éÑ£°yóæòòòùóç7úå§Á Øåñ¬/(xî¹ûÑ ½H¡«Óß³‡¬,**øÏèÓ'F?T"gùòåák±]wÀF•x½ÞuëÖ¥§§ïë÷o4À§¦¦îÚµ‹ÐwöûýGyäÀ­ ÝÀÿÁåðq»v‡nޜ޹ó¾¶ADÂE/Rh8VÚ´aäH€W^qº)²?–ûÂ0`j(úú|¾ÂÂÂýˆ¾4QndE_ ¬¬lâĉ€¹àe£ßd| ?¯­-kloDqà:é$€—_ÞÛûÄd#{à!èÅž³x±¹dÕ矾ßK¬´dæØÜ³Á,#6×ÉÊË˳¿!WpxAMÏ‹ˆ(Ç€_Ý»nŠì³ÙÈy0¾…_­]{ýõ×6l„ ­Yb¥…õ»fœ6ˈ§OŸ^L¼–B»;¹üòýnŒˆÄ€p z(}ú°u+~ètSdŸY›`æA] Õ¡ÁáêêêÖ|ÿ–”§ýªÛ{ö4ÒÓY¾œ¥K[Ó$‰*à˜Ú5bðÖìÙÚ<.™c¿3f̸²àMx"ôRë÷x¶xSjjÃ*AsSÂæ¿Êçó-\ºÔsûíW^I0ØšV‰Hô¨8vÀcÏ=wÔ®\™»r¥™Ôš““ãt»¤9á…¹ýví:vÁïÁžÙúE˜¬Ý­[·)S¦4س!<ëñ•¥æÑGyï=æÏgΜV6LD¢AeH1:}³È¤¦¬ì{¨….°|>ßÚµk÷/iVb ¼0×_XxØEu]·în¸ªþ›£± Qxøß‡/8î8:tà³Ïjºwßÿï#’ÜT± ÀVéûp4œf2´6s­F s/É̼¯¢¢<%åðÝ»«lÇ÷»ü7ªvMš”ZX¸æðõm[Ehr ½ˆìÕÇ=k|Ò¬v\Ü&¼07®¨¨¶_{mzýi×ý.ÿ’šššyóæýìŃ0èßÿ>Ò¶ HYYÙ©§žºhÑ"e!ˆ8K8F¬äÕW8)츸Mø³ÑïàHØ–™yèœ9V%n+Ë#ËÜ+âŠ+®ðù|³fÍú¼ºúþRÿO½²²2//¯oß¾ÅÅÅÎ4TD4Ë9`sÁ°ÚCwHs帥˜¬=Ùþ ÙðÄØ±ãž|Ò…Ó¨ f¬Mi°¼ð[x,ìK”… ²W‚Ž{V¹È𴉙™n·»%¶—C6|ç.[æÂ¾£µ9qƒã5`n4:„}Uë«§Dd¿)ÇŽµ‚`ûÓNî9ã —Œ[J£ì%¶Áõ\F„VÞˆ¬F—’6=kÀÓ{UY"NQŽ)sÁãçÌR_ÝéæÈ^X+oL‡®ð¼zÉm}ÇfâèÛÓCøIÊBF™ù ,h°jPSÇe?h!Ôüô§©:µûòËî½wøùç»p6Q,iiiÙ8€Yõ_rUß±ù8º V·m;¼®îz¸Îv<|i-Ix ŠËðñF*àýþœœœ¦Ž;u.qÏHbŽœ~QQ‘Ïç+ mcçõz@ì›!-÷ù9ç¡ú1»eË–9Ý´ÿ©ªªjj)錌Œ¹sçîxçÃãùÑã±Ê§|>_QQ‘Ó —˜2ï?Öµ‘•••••e¿Tn¾ùæ|0##£ÁUäóù6nܾ¦Ï竪ªrú´¢+z‘BYÐ1=}km‡‹á~(„IÊDu¹íÛCñlÙ2ìs.\y£¸¸877ך ÎÌÌœ›'ŸüzĈ¥§Ÿ®%±’„½¿{üñÇsÌ1Må ìÕøñã—6¶½G¯&¤•°¢"öتl96À÷ÐŒ$¸‚ãØ‚\sÍö¯¬l°,³ sèö²tå—_rä‘ìÞͺuôíëP%vŒgffVØ–d‰”üüüéÓ§GüÛºGô"…æ€cÊš5ü7l„lk]6›(ÿ³s'wÞ tš?ýðáî_NÙÌòkòåŸü„óÏç¸å<†í˜•iöþn4¢/Êãkà˜²_©¯AŒ„µº‚]롇øæŽ:ŠSOMóxš‹mñbÖ,}”§žâúë0ÀéÖH5S™A òøZµ}HòQŽ)smsDÈ ÀÏ(Õ}jjj^\¾ü¤oL‡×^ÛÞãqºEâõrÁüõ¯Üz+O=åtk$ŠZ8®Ö ~ ƒÁ ½ ²`'ì ¾‚¯à?ð.l®ÿµ ¶ÈTŽô>ÛkšV]]]”À×’Ó¸@ `fzÁ€ê6mï¼ûfHS‚Áàܹs322Î>…Þ –©^Vf´oo´ic¬[çtS$Š–-[Öè=?33ø9ÜŸ¥¦î£Åÿ­‡¿Á™ÐÆwÛm·ùýþ`0hFUUU¢æHG/Rì}n9;;û’K.™:uj÷îÝ[ï]%öIX&k”fj~~§Í›¿âŠöǯá7¹¹¹7n$´qäEðPÂeªïºä’ÔØðóŸrà ºð•µþ¼ýà€^½Š~÷»==–:¾'5õÛ¬¬•ëvîü¾…ï -tà`8…þph}sxž„UÐËëõûýßÿ½}ítKd˜F1Rì5DôÑG\pAFFÆ”)SŠ‹‹£ô àˆ–œ~ô->ð@þ¨ ØìðCÁ€òÐm—Uý¶FQQÑà^½vÀn¨ /qƒÁyóæY½=áoéé»ÒÒ̾lE›6 áxh^¯÷7Þ0w÷Z¼xñâÅ‹óóó ôhS!fÀ?={Ÿø"ÈÊȘø ©¹áF¯`0hí{mÎõæçç[_’ “aM( —Àyõ7ðz½f\ÿ>qÄ-ØT[[{ýõ×:t˜:ujü>;;€­‹ø0à„ÄêfÅëóÝ,nì>ïìwÏÀ€Gtá%–`0hvR®$‰Ž IDAT{ ¡Ðø.üf̘‘ŸŸo=h6ÐÂk Ñø}*|úYÁ±@¨Çì÷û_ýuûßWÜÍz¸%———ßzë­½zõ5jÔòåËkjjfÏž}æ™gF©qÑæ`¶.â»Á€›š}•¨j½y lŽÉÎÎN˜5“íwÏŸ@ÔÂ!0cÆŒ¸ë—H8ëQr4|l‹Z¶í] o>M­:ÞÎ JïñxìØÑÊØJIIiðæøšõp>¯]»ö /ìҥ˅^¸ÎV½°uëÖ´´´è´-ê ÀÖE< x3ô`GeÂhðD9ð6ÚÆ ‘"Sƒ»gð×Ðå_ý± ƒ©0ö„òK²h‘}ºù4˜¶ë·@mhDúWMÿÄ8êl8€W¬XqÒI'eggÏ;·¢¢¢‘o·[*9Ûró">vÁNèëõ&L7+¾ØGeOÁ€ ———H¡×b¿{ »aGh¶;##£   !Ï:±Yß xÝÌ´‚™-Þï}?öŲâ}£ßp ›]a¸Ë–ãbG³Nàœœœ'žx"!—ãpüÑÁLLøÖç3àÇçžs¶1IËÞ> Ø©qõ„¾¯¬iBBùÞ lwFu…ã‹5‡â…µ¡ xX ân^^^+³¢šé §ÀŒPWø#èö†8úûr2'0Çðýñ×]çt;’”}Töq0`NLXýþ£`l‡®¶›c|MÑ%'+¯Ø|–e¡µÛÌÐŽ?¾Ñ‘h/w4l‚pŽíxvvvAAA¼$E+G…[ðªUGít;’—ù ŸªÌÒ³gÂOØûýσ³ã¶ƒ’„äíç@%°:×ÿ=z½Þ7†§ME𳩺&ÓðH(Az>¤@VVVVV–½%.qQŽ ·à`ÐhßÞHI1¶msº)É+ ~h¼ Ì-Úeí$lÏvO6Lô"…zÀ>|¸9Sò:ê»ç6õîÝÛüŸÁоƒ8âˆ#l•SÌñ€aÚÍFS!î.ºè"à2¸vÀð5×_½½—9dÈG[Ú$û˜“iÜ©°̵<öìÙc½ZVV6qâÄÄžRv˜5S²*á0Ò³gaa¡ý©V".\uÕUæÿŸÀãP—Ä>æ”ÇöÐÆ ×Õ?.Î2Ÿ+++…»øB¯öïß„ Ó§OŸ0aBZZZ“ßÅi^K‚YÃÙa¯&ü# °óÌ™’§üþŠþýÕ³g»ö61˜·³7BÃ_BvvvÒ>úXýþ{`Œ…¾õ‹SjjjæÍ›WVVÖüÐî„§B¯ÆÑ#cS×Ò<˜ )ðL{5±€]!--m„ ‡M ´{ûm§›“àìCac¡3|ká®»îJÚGk*ä{x ÚÀ5qusOTVÚs[xzÁ0#ôjFFF=2Z×X¸ÛàfH…'àŒú/•——'p6–°‹üxÜqÀöeË’%Ð!ögêßð(%%%´ÆìE#ù°¦x<Ïþõ¯ñrsOHöJ¹ùpl„³`Wè >ø`=2†&õèÑÃZú&¸Ì猓m_5þüDNÈRrW\pÕéõöùÌÊú¾nÊL~ogÑPTTôë= ¨‚ƒô,èk›¿ðpmý€äÚr£ý`-%í‡Á€Š°-„|>Ž^¤Ð´+X³’¯0 H‚ @§XCafåÃc¡5z4ÜJhØóùÍ›_ƒt¸89ªAÜÆœú-((hAwx„^1c†›ËöƒµdÇùùoM™òt…— ·í= ™¥ì Öµõ*#B¿˜„¼æÜ ''gÃSOõƒšüíSO%Øí¬5¬gÁ;¸ÚéY0¶ìS¿WÃ)PçY!ëõzgΜéær£ýc&¢NŸ>ýÌÜܳà Ȇ— 3ô†„ÌÆRv+Aÿ+ø ºÀQõKÄuX²H;ÿüñ“&%Þíl¿YÏ|/ÁZèªÎTb`ÌXÏ@¿€¹`Àïà[ 9†j†ÞÝç;>„ŸÂòÐ6Õ ™¥ì ö}³̵:¯$ÞíÏÌg öPíà^X@^^^2 Õ˜3Dy½§ÁW0ĶÕqâ͆(»‚=Aß\“ò´þQ×I¯¼Â·ßrøá ìtSÜÅþ,ø$”B $âíÏÌERo…°Þ¶*™ËºŠ sJø¼3N†ïàtx<@Â͆(»…•†püìÙx<à #ðæ›÷‹¸ššš%K–|>kPwÖYN7ÇuìÏ‚u°°åß&ØíÏ…ÌER‡«aœ;€äKKKëÖ­Û0‚p.Ì ½ôé§Ÿ:ٲȊRvu\pçé­oÛÖíV­"***òù|À°†|°>ÛFY50éP ºc$çnQ±a–#_€a 9ÙÙÙ‰TtÔBVôiP \ @fffŒÿl£)ÜbÆ…Øü ü 0;ôç§‚àˆ°Š­ÏÞÖgÛ,ëögîWºý~¿ÓMKXæg~?ð´MîÏܪ×~ {`üƉ?ÛèE A»‹™i¯Fã~b%—žÀb@ŸmÓ¬Éà¿@-üúð‡?üA©XÑ`NŽŒ„©°ò .ôRr.’jΆdff†6MzN€ÒÒÒyóæ%Àôœ°»˜ «a7äÀõKk˜Ÿa8 jm]:}¶2o½zõúC L`Ó¦MJÅŠ8s奂æ€}ž3iËsrr¦O7¯;nƒÿƒð,ôK”ª$`w1ÿÒ*áŸÐ.4 LÿFùN€Tx¶Ö?.árrrî¾ûn  ø-t4lQ555‹-=ztiié\ø |¶½!ÙÒ¯èß¿¿õÿWÂ3ÐVÂÁPVVvê©§.Z´(~»Â Àîbû½„F¡“ü/0"jjj*++322̼ç'CÇõÙ6Ïüü–CGø}踆 "ÂìøæååUVVßÃ.¸Ð¶ßQ2¬¼Ñ<{]Ü8Þ…Þ°„ÊÊʼ¼¼8î Gin9.¸óôÍuÉO>L¸U×a&?Ù°‚¡±}}¶{e¥b -‘o~tÚ9ªõ¬¬@ |Üb»9çååi+*öUƒ©ü x>´@QNËŠ^¤HpiiéøñãÓÓÓÓÓÓÇom·Ì‚àß?ñD]Û¶Gy<ëßz+á×¾‰*ûʺ¹Ðž‡¶ɰ®P+Yý·¡ºÂ‘‘QYY¿ã~.ae7@_ønµ½!yVÞhžyKœ1c†ùÏr pÜzOiiéªU«œjá~K„¼}ûö‘#G4¨¤¤¤¤¤dРA£FŠë»CZZÚo&On;r$†ÑñÝwnN|³ßæ&ð4˜ÃѺ»í•}]sbò*Øïã~î`-(1®ƒ=pì ½ªÉ»´´´™3gZcÑÿ±°¦Âõ¡÷\tÑEqwA&B~ðÁ‡ 2kÖ¬Î;wîÜyÖ¬Yƒ~衇œnW«ðê«N·#¾Y³•‡À`øVÖ?.Í3ûofd¬‡CÀœG×Ê”­î¼óN  ü ÚÂ}PzUS¿áìÏ‚@œ {`nh¿ÊÊʸ» !/_¾Ü\µÇ’——÷ÜsÏ9ÕžHùqèP zéR-HÙV’ó$ðÀ²ÐÚ~J~n¹´´´ŒŒŒ­••ó˜ºq(zÿ˜Ó"åååÀå0¾Ydhr¤iÖ³`FFðLh§Gm{¨ÇY}p”æ–c©{÷î›7o¶ùöÛo{ôè±×/tóéâó•ƒ}´ e+Xëé|ŒÀëõj¬}’ŸŸ´…0àŒÐ D+Sî+µÍ ն˲[·nÊ l‰@ `Æ`àn0`XåJ¿[F/R$BxÛ¶m]ºt±éÚµëÖ­[›z¿û™È_—–šKb¤á¾V0G®N8øàAP /i|o¿˜u¡= ÿXÿ¸´œ¹â•ùÿ÷B'Xf@¾úê«Õñm‰œœœ|Ðüÿ«áÈ€ WwËDÀ­áiÌM7Ýäl«¬¼!³ø$@Ã}û«¦¦¦¬¬ì–²AƒûýßÛV:ôß¡†À‰J‡ÞwfáoAA0Æ@%\zÕ¾è„4ï”SN1/H³8øðÂJ8Øß±è›nº©Ñˆ…æ‡D©gK‰7m÷? _šJîÛWVðÇ`@^·nÉßoV9æ,0ÀªùÐüH Ù Óa£m‡4-²ïìõÁ]B…Ô¯@»H_™Ñ‹‰Ðîß¿ÿÇl?òÉ'Ÿôë×Ï©ö´ž5¬÷%| ]áõKKXÀ?…ŸÁ6xª¼<^Ʀ\ÈJY|ÐAÕp2 ÄÕˆŸ³ìq·B/(‚M‹ì{}ðV ßÂ(x$Ôc)++;ýôÓ¿ûî;gÛÙŒDÀ§Ÿ~º9¤c)((;v¬Síi=ûêkÖ(´ê÷•u¿Ëà9¨ÕH~ë˜éÐ%UU÷03t\ŸjKX•oÇÀeP—ÀÈËËÓ´Èþ±× ¿†j8î ½¡¢¢bÀ€®­N„|ÑE½ûî»óæÍÛ¶mÛ¶mÛæÎ.¼ðB§Ûµÿìofð˜ô€¼¯¬ûÝüaÇe?˜ŸÞ]°ÆÁ€úÇ¥½{÷RáH;á@+^µŽýnù!Œƒp¥mŽŠŠ ×ŽÐ$BîÔ©Ók¯½öþûï÷îÝ»wïÞÿüç?_}õÕ8`ï_ébæèŠßï>gŽáñ …!?û™ÓŠ3æˆýðs¨ % ‘üÖ1?½ÍðwðØnsft‘¦«®º ¸~_Á@#[‘`‹~ÎÝ0.½Á½õÁQš[Ž qsúÇc€ñâ‹N·#ΘÀ3Á€GC¼R]Zɪ«öÂN؇ЫW/¥b5ÅJ¿ê ÛÁ€Ñdgg«ð7R¬+¸ ØãmÁn¿s²¢)¡œðêFŒþyÛmZkŸ˜cSg·m ˜u—Jui=óSíÕ«W@J¨&xÓ¦M®èsœ•Žp/OÁ Üu×]šúóÊÌÌÌî‡?A <§„Þàœ,`· ç>öÐnõêÜÜ\­€ßBærŸ>ûlÿººÚ´´Q·ßîWp„äääÜ}÷ÝÀí° ¦€9ú¬T¬¦˜äá×PÓCÇÍí–%RrrrÖ­[gÆà[ ÚÁ?àøÐÜ–“¥ìjf!ͳß„ÐC%-c.w››ûŸÛoVx<ÇŽ¡T—2#Çð4´…kCÇ5H®¦¦¦¼¼<îà:ø&ô’Ò".++kÅŠæ€ÿuð¤ÁspTè îÊÉŠÒÐv\pÿé[kÆ>L ýÖ´z3ìˬÆDy¿î$d]™ýa7쀞¡‹Sër˜‚Á ßïŸ6mšÙ!» x <¶J×d”ƒA3'+–†–3²bð¾ÞB£)Ôv5«´Ã\uèä°ãΚoë¿€*X¥ÑÑH³JÕ?…¥Ð® ½¤Alc0 .¬¨¨8¦B-\  t„(³êƒwÃdX]á[ vÉP°«Y#T/pRèñY#WͰžNÌÈå¡MÎõÔAöâË9°¦Ú:ÁIþ¸c-Áfþ³-ÜmàÏð3fÌP:B´Y9Yµƒ ÜO£ìjV?ã3ØÃîõtbà%aÇ%"Ìâ˼¼¼u°:Ú:ÁÀ§Ÿ~êXËœf_r˜á?07t¤[·nJGˆ+'˃_…ÀC5 À®fïg˜à‰;käªyƒÎÌÌôÁ1°=4z¯§–hHKK›0au‚,Xàx÷Â)ö‡ŸÀ\ ?†êY0f¬œ,3ÿºÀËp"à‚¡`·³–Äê~Î9Àï¼ÞwÞyÇ%.\QQ1<°vh¾-šÌAšðN°»rMc(Üy§µ14Xl[ˆMÏ‚1f Õ˜1øè/À™€ã3SQJîŠ ñuúÿ\¹r¡ \ÓÆØóŸßr!33³Án•Y@ 33sì†['˜äK×·_ÀY`Àè:âóù´ô•#¬¼ý6p/P çÁŒ3‚Á`ó_½H¡p|¨®®>óâ‹?„48pdžÛXsoÃq°^€ŠŠŠ÷Þ{Ïé¦%²œœœéÓ§[àëm/%[â›}ö·‹­ð÷ÇôôiÓ¦i)Yù4{àr¸ Ú£pàüùÙ½zÍ™3çñÇ_°`AŒScö“¤5Ì?ìaœš×4'0ÆŒãpãÜÁ\úÊüÿ3¡ ¼Ûä ±×¿àfø L…»àK ù&;íWÚoÀÃ0ïúëÿøÇ?:×.ùo>Mnn®ù„4JàÿàèSYyþìÙ;Cïôz½~¿?'''­R8>˜Øæú±§†³ìÒÚÚÌ^z5ÙÂ@ì™Ý‹Oa´ƒ›¤œì´®´á|ø1Tøk> ˆ³ì›&ÀéP “á5èz[,€ãƒù‡€J8©<É5(»ì'ÀNX$eˆ=+]ÿ&Ø gÃñãÆ[µjURe š"áðÀ-°AW ›¤¥¥uëÖÍúçK0 Já8X#CÇc·}a”æ–ãB¾µÓ– ¸ÐRv!Vz…éB0BÑW9/±d.¾øúÏn€õ+I¶lÁ@ ðéé|muºOƒÛ «BÛ^o[+4##cÞ¼yÁ`0z‘"n"P4ÄQ6 #x½Þ À€gõ‡m“ŸŸoÿsz 8òòòöšß(‘UUUuT¯^Õ`ÀÐÐo$¹âþðC#5uÇóøWøý~]ncß6Ø’s`7ðªmˆèÒ¥ ¥_e” Gòd æç³f ‡Êܹ{³8$''gÆ óæÍËÈȰÀÓÐ î‡Wëo ä,àøS7jðþ-·h=,“}ÁNóŽÿz—.ZúÊfVà0€?C{ÊËËc_dfýÛ‚ ^Z¸›oÆãáo〜n—4'--íúë¯ß´i“ßïÏÏÏ_¼xñÕW_ TÀY0ÊáDø±}Uä—®Œl‡:¾ÄãéMêÞÝLñ ù2\š ÿQPP—šº§M›š¯¾rº9IÊš`K…u`Àu’’bÝpìŠ-**2Ï· ¼ úõÓÔo}Òá–úoHŒ+6 8pË–-Àáp;—Á6@+ÅÆ§ð¹á/`¢í /éVŽ'V&‹¹$ÖiaÇ“ZM /¼€ÇÃo~ãtS’¹MáôéӋƯƒ àgõß×WlMMÍ¢E‹F]^^¤À£‹àYÛÛã9#ÙØç†¯¸â k„ƒèlª¦O¬u¯žNe¸h=,€_$dÈ+0Gt:æ˜û î­_ÔQ^^§ÙX梧yyy•••æ‘épl‚+ÂÞ×ÏÉÌ|‚üË_þRZZê÷ûhm¤Ááì¸w§oOø ø•ÖòLžl€±`Óíÿ***ÊÎÎN‡`ÀEõï<ñ8KÚ`·A ì€=0º±»k²T?'ºèE õ€ã‰½ÞÆ\jqr§Nª·ع“çŸ×ø³{˜ toܸ±®`>dÙÞ³¤öÝö°:ÀßB³BvZZöJ8ÎX.}®¼ÈëÒ%É·5«0Ÿ½ì2ª«÷u‡ât‹êǪBX áÎúYÒCÊ·Á/à ¸€6mþw;Æ|¡$íÌù ÆÇï÷””°n8Ý(gI“&•––>ÀŸ¿üòÄââØlä)Ík«.ƒup6<Ï7ý6—³'[ü þ»` lŸÏ÷ØcUTT”””ôîÝû´ÓNKKKs°©€ã–ÇÃèÑüýï,_žœØä,++kcx¤ªê¾‰×®]«ž‡ã$–À-0î7 ØÄÛ\Î\ô´´´4 ÜŸgdÜsÏøñãqe_i:ž~:ÀŠN·ÃÖ çHè ŸÀ†8ÕLTöºMw‡ðX:/³¤æ4Çí·ß>gΜÓO?=³k×G! ^ƒ§|¾^xaÊ”)о²ÔŽc5C‡¶oÛ¶M °â‘GFMš”l·kôrKÃŽ‹ƒÌ„ÁÜÜ\k&8³G«êê^ܲe*,‡âÌÌqãÆ­ZµÊ壵Ö4‡uäZ8‚;î¸ûîOÏ=×Í·‹Rvu\ˆëÓ7¡5÷¾Í‹Ï¢ŽV2ëóR¡ 躤UûáÁ`Ð\ìÞ\9 ~|Þy|צMfè÷åæK7¼î訃=p~·n*ÿKÑ‹qZ/~°u_¸ŒÐj¥ ³ÄnK˜5¦ÀÉ`ÀzÛÝ„xTµmÛ;íÛð[Tsí¥kßjÈ‚M`À\=ê%“èE ÍÇ%kúÓœþ=Ú%Óô§Uc ˜e¿æ#Hvv¶j?\nõ[o½sgŒƒß…ºöÒµOg¤ÂÓÐ^ƒ?…½*²€ã’õ—_ŸÀA0¼þñÄf=¤À™@hø®»îJòªh÷Û°aC Là^d;îX›šfOÒžÃá8v‡½*²€ã’ý/ÿ9Î;žÀ¬›õ0È‚ÃÇ”””8Ø*i ó]÷CX æj÷½{÷v¶aájjj*++Íq~×BL‚ï€øIá7SŽKös–3À—4wë9ÃÜwpiØqq-ëÒ½p<)ð‡?ü¡¸¸ØéÖý}Ó…‘p?—ÃÛ€º’ñ˜3ÌÉÉã‰ãÓ/..6k<<ð5ø`íÃ<ÿ|§Û ÕÕÕÜXZZ=áø'x½ÞuëÖéžè~ÅÅÅãÇß´iS/ø²à6˜ >ŸÏÙETjjjV®\YRRÒ½{÷™3gšI}á]è ÷´oÿŸ©S{öìyØa‡¹¼tJ"+Š‘"JÉ]q!ÞOߪñø÷©§`ÜpƒÓ-Š@ 0¾{w¾ø|¾¢¢"§%-e–áζW’ƒyÅf]_ƒÛcwø X m”öœ¬¢)4ǬmϽӦ=´dÉ’8Ýfu_åää<5~ÉÏÏ·nJ¸ ö€@Ûý*ü’nP¿Ûü%¾½ ’’r)ü¼Ó¶mFc÷ÉDúS’}½H¡!踗““3}útà{xÚƒ5÷›0íf­HnnîÂ… ZQѾ‚Bó‚ÕÕÕN7PZË^ácÀõp6á·ð& @vvveeå‚ ¬zws_,{6uó—DxÖU'X¼{÷_¡=|qꩇ}ñEzØrZöY¢D8ôïßßüŸ%LOŒ²Å7ÙÉ< fY@R¤|'ûò榧`(|ÇÀ:¸¹S'£®.//ÏžÝhs3—DƒGÒ±ð1œ;Ú¶ÝYPÐç…º{½ Ò³•ÿ,Ñ£œ¬›×3°~è±Ý~“M =^iôš9Vá ÃY¤}`<‡Â8ª®îðY³Ì¼E3=Û\äÕ¯EÖ$ª¢4´éô€ùؾ ø}ff¬lŸ |ZÿÖü\\ktæ<Ù\“y¬€cCÇo¸á†æ¿°Á”pUUÕˆž=ï‡`À6˜)¡7û|¾ªª*? q§èE õ€„õؾ{Ü8àîaÃæ±Ý>~OÚ^M˜Ž~r ŸÄ çõz7öï?æA~ ïÂ+0‚æƒ÷ÿ¦„ëêxå•ôßþöõÍ›/†vðô……`U;i:Cb-J=.$æéoÜh´ic¤¥Û·;ݔȨªª2o²¡ 8,tõj¤x·lÙ²æoPæ¯Øz[W¸¶ìNM­2äæŒŒ“ |™Œƒàh86 ftù%FûöuçŸ?cܸF\~~¾Ó‰¸Nô"…ê€N¯^ »ï²reb,e.[˜›››SV–ïAefæ´É“O8ámËïšš¿ÏËËûÙÏ~fÕõVWW›õî[àFȇ<8«}ûcëê þúªÚ·/ß¹ÓüÿNÐÍúvo¿ ìéß}¿~«ûõë6`ÀÑÀ³Ï†ÿÜÄÈ[”¸¥ÀõôwÞ~»ë:Êï÷ƒA§›Á`pcNŽw^œ”4՟׷²LYYYYYY]á<¸ÞkßþÇ´4#Ô36ÿû>?|rñÅkþñû`u¯^½Â—–ôz½š–pÑ‹q¿Pk$ÀnHáÀUãÇ¿ûÍ7Aè™^¯ßïÏÉÉÙûWº\u5YYÔÖRVFÏžN·F"#|[$šÞwÈZñª{÷î3gÎܸq£ýÕ”””î»ww ýs|únEEEÇ{lƒ‚¥=z¤¤¤lÚ´Éü§Ïç{úé§&sB"(z‘"#PË%^¶¶W+‚!0 ãwBó¶{àÒ¥§>õÔîNHQšLb)..ÎÍ͵¢cKáòåËÇŽÛ’ožžž~Þy祥¥ÍŸ??üU¿ßDo»CI Ñ‹šN(VÉì0ΆÂPngœnŽd­Üû"³Ö­;³¸8:ô¾-Rƒ@¾ÔsË+¿«««.\ØÔ«%%%æ*r"ŽPN(Ö©î„ÑжÆíRfJYYY8 jáÁ­[ŸLÐM&’™¹-R£/5Ø;ÁëõúýþH¥J)åJœ¥:à„bÝP¾ƒW¡Œ¯<¾Xú³!ž‡­*ÖL&M-õj/ÆqøálÜÈÿ·wïQQ]÷À¿DyèêrXk£Qš\BÄÜ+|a”6­&­ñFÓÅJʵÒê­h51×­ðV«V¥1_-Æ B¢y4†Ä‰΀0 âæþ1arÂ<@˜aÏ™óýü%{ÎÌüN2³³ÏÙû·±´Ù›Û"vv±õ¢ÏI€(ŽVU}¿«+)›{~t‰:ÇMð¦M›bcc333233ÇŒ³yófÑqÉ—×ÝÙ³|ñê«»wï6ÿˆ‘.¶>»ØzÑç¯ï`ý à®]¢ÎqÓ¼ÿþôôtiKzzúßþö7QñÈWIIÉlÞÜ „Ÿ??ÆŒ¡C‡ž>}Ú¼\¸Máu .\¸ ýsPkùÉ¿´¶¿BN¹çG—¨sÜtÒ€ÊËË¥vVUU5ª²²Òæñ^^^ ¨©© JHHxíµ×†Úî»xü$,ËlçC@"°Ø ™2êV3SJJJ&Ož¬×ë--¯Ë¿³Z[Üa޹·úè’ÇSÜ,è^½zݸqÃÛÛÛÒr÷îݾ}ûÞ¾}ÛæñÏ<óÌÒ¥Kcbb ÃîÝ»ÿøÇ?9Òñ»x|¶ÌvNòR`4÷ËdÖË¢¼€ÀSÀûìïKDäRJœ}_,W§ ´xñbŸW_}õðáÃb£ÎrÍv/`Feîw-×úîï8 ÐÅZ×n2û‘'q‹{À^æ–€€€ÚÚZé1555ýû÷ïà N:õäÉ“÷ûÖYYY÷¾û²L µÜIýÅÛÝ„õ‚_Î ¾jõêÂÂÂÏ>ûŒ•ˆÈ¥²²²lf×½£[$`ëåC‘‘‘eeeÒcÊˡ ÖñìÄ[[xL3fLPPùß¹€T D­®««s¼¦«›µùA ¦-@¿_\²dÉôéÓy“ˆ\-++ËfFpÝ;ºE¶–”””——'mÉË˳Y¼É¦‚‚‚Ç{ÌqÉIIIɘ1c ƒùϳÀy x²®.==Ý<Zl„mÖ–Ìzÿôõ±UóˆˆÈCt²†´‹ÆðððìììÚÚÚÚÚÚ+VDDD466ZFžPXXXYYyçί¿þ:;;;((¨´´´ÝwqÛÓïºúúzëÂaópªõO­Vë>%饥óKðïåËEEDäÂLá¦#`•JU\\|æÌ™ÐÐÐÐÐÐ?þøƒ>èӧ̓333wîÜåçç÷ù矟>øå/»-""˜€•żî¨ØXöãönPRR²fÍëö¯–¤¤ 8¸{"!"‹ XY,ëŽÖMÀTà¡·»”ÑhLII‘núkÖ˜k®xþÒKÝ‘;`VKÕå*`;Ðx Ðt×z$›õ¹¼Ò§O“ & ½-œ‰ˆ<°²øûû˜«.¯š_xyí]·®{f`Ù¼Ðí ,ìÑX{’ˆ”„…8Ç\uÙ¼<©ò¯ôÏFŸ8gžqúY—Ú°y¡û9 OCCµFs¢¦æç7orçA"RŭÑRà2¤¶ÎCt4T*|ý5Zwv ›¥6zè¡áÇKës=| f"%9ÆeHä£FaâD44àp⫚'[I­N§KII`¹n6­GÁÀ×ÀÿI3N †ˆÈ=)zÈ0”•!:ÞÞøâ „†:å%í•ÚØ·oߤI“,—¦ zýôU«o[æ”Hˆˆºˆ#`r™#0kn߯ï~笗´·ªØÜnÞvpÉ’%VV>\r;öt""OÂLÀŠðñÁöí(+sÊëÙ[Uü£öææqGøoàVÇžNDäI˜€  üyhiÁë¯;åõ,«¥Ú®6Þºµ¯NWѳg®ãȈ<”¢o‚òðª«1x0ÿ²paÏÎîQ(]wœ––f)»¡Õjóóóccc¿?´© C†@§ûjÅŠ„wßµ{‘hÜ É%˜€-JJJN'&¾X_ô LMM‹‹ëH&6çÝãÇïÚµË`0˜5ÍöíÛõz½tðÏÉÉÁÒ¥5 ¥¥7oÝj³\Øu§IDt¿˜€]‚ جºº:22²©¦æS XüOëCí.Ìm³ÞWÊî.‡õõˆˆ@M Bb¢“N‚ˆÈ%8 š\¥¤¤døðá5557€ù€ß­:^˜k½ÞWÊî.‡™™¨©A|<³/)°¢µÙž¨Øø›¯Öcìlos  Š>ú7¢gO¼ñF×b'"’7Ö‚V4ë ºx x˜¼×ÚhΣֵÛ]°ÛvAѽ{xá47ã·¿åÆGD¤pLÀŠfAk€%Àv 8|2dˆÍÚÎŽìÚXPô§?áüyDDàµ×œwDD²ÄKЊf3ƒîþô ^€F£‰ŽŽ¶YÛ9::Úz½¯™V«-((øÑ ¬¯¾Âï7¢woçž‘ì(z0gAÆ6ÛèÑ£G@KK) ä©TCþñ½^o¯¶sHHÈŒ3,×±ƒ‚‚fÍšõøã·]Ptïž|ÇŽ!- yy®<'""gr]¦à%hEó÷÷/((fP­V»mÛ6ƒÁpâäÉAo¿ÞЀ¯¾Ê©®¶ùô/¿ürÒ¤I–Ý…-ä]ºÇŽá'?ANŽëN‡ˆHF=äØÌzvÕ÷lڄ矇Ÿß±•+ŸX´Èú‰ݶ(/sæÀǧøõ×Ïùø°àÉ q¸pû~õ+lÝj yúÞ¯¬”>¢Ñh>ýôSu6ÚøøcÄÅ¡©é•þýÿT[ky®ãúDDn‚ Ø%˜€Û×Ô„ädÝS«'ùøn½ÝѢ͈‡N—×·ïœÆFé#vëd¹&`—`îÛ·1cöï7©ÕG—-;çíÝÑkȧNaÊèõµ‘‘/\¸kõxG¯`‰ÃR”$ÀÍ›7wïÞ³~ý_gÏnNNöª«KÈÎ^âë;}êÔö³ïŽ?z=ÿ}0`&OÆâÅ •>ëæÍ›:.##Ã`0 <˜ë€‰ˆ˜€É{wgh<‹aÑ"ܺ½ÁÁöÊ;ÛÜÅÙ—ˆHÑ7AyØgݵµw/™+€‰H.x˜º•³îÚÚ»—|ìØ1'DID$g¼M¶;¶C»,8äè^2‘²1“]~~~Ó§OïÊ+´/™ˆH©}”÷€;ÇîîIV¸˜ˆäŽû“»°9«ÙÞ¾F6÷ÎÏÏgö%"Rô#àŽŽwãââbbbîwVsÇGÌDD!¹p»ÚŒwƒ‚‚ ƒõaÜ׈ˆ</A“F£1%%E:Þµ™}ÁYÍDD÷ ˜ì²¹Š×&é¬f^p&"ê&`²«ƒãZFoþ÷}MÑ""R2VÂ"»ì­Ö ²ü[­VÏŸ?¿gÏžh½d-]t¤ÓéRRRŒF£«C%"’&`²+>>^«Õ¶i4¯âÍÎÎV«Õêêê233‡zúôiž$"ê8&`²Ë^EèÞ½{oܸ±®®ÎÒné–——Û|NÑ""²Æ{ÀäˆÍŠÐû÷ï·9Òmjj²ù",`ÀÑ¡y2Ž€‰”.00ðí·ßž7o^sssssó¼yórrr˜}‰\#`"€çž{.**Êd2}øá‡‘çc&"¨®®?~|}}}qqñƒ>(:"ÏÇLD°hÑ¢qãÆ †O>ùä­·Þ‘çã=`"‘#G.]º4eÊ”¹sçž?þÈ‘#¢#"ò|)Ýõë×cbbŠŠŠ"""\¼x1))©´´4 @thDžŒ#`"¥ËÈÈHMM5g_Æ ›={vFF†Ø¨ˆ<GÀDDDpLDD$0‘LÀDDD0 ÀLDD$0‘ÿÚ6¿ª®¸×IEND®B`‚gsl/doc/images/multimin.png0000644000175000017500000005123113536674414014312 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœíÝ}|Õ½?ðÙ’µˆ`0<øã ˆñáåCAJlÐZ)ÅKh¸ÞJ½>ôÒ{±Ú¾ƒ-ÜŠ-¨Eì …p n‚żDŠH½ *¶,„$›DÚ‹ L„ŸPjÈîÎþþ˜vgöavvΜó=óyÿ%kv÷{ÎÌîwç|Ï9ã‹Åb ¸+‡w^„ À0HÀ p€ À0HÀ p€ À0HÀ pàpŽF£+W®œ8qbaaá¹çž;a„•+WF£Qg߀º\g_îG?úÑîÝ»Ÿ|òÉñãÇÇb±P(ôÀìÝ»wÅŠξi>gïûì3߀:‡‡ û÷ïo~ðœsÎqö]¨s8ßwß}wÜqÇ;ï¼sêÔ©S§Nmß¾ý»ßýîøCg߀:‡ð£>:dÈ믿~àÀ¼á††úðÃ;û.©ªºk×.UUy"¯u,õöR‰_è8cŽZºtéðáÃ_yå•ãÇ?~ü•W^>|ø¯~õ«´OÌÍux:€#œM”q¿nIIÉ›o¾©äÍ7ß1bDú8˜µ#ù%_‹b™7*j?¨µ¶µµ <8 éÿ`çÎÑhÔÉ(3DñHé;ÖܫТpïUgië3“µW|ñã¥^ÀO^Ùûl’IÀyyy§NÒ?rêÔ©¾}û¦C¼Ã–=ù%_‹bY7Êc¦/SógÞ… MýH™{UQr)*­øa2·W„ŸqéƒWEäÈíýÐ!“€KKKßzë-ý#MMM¥¥¥éã þ}‘|’¯E1J{‰lÎÐ;vìØ±c‡ƒßYò)EQô½ª}ˇÃaa¿ë­Hq˜â'‰ÈùÌLQýé-Zðæ:ápxÍš5áp8ųÈ$à+V\tÑE›6m:qâ„V¾ð Ÿyæ™ôqH÷}“±Qòµ(ƾQ /n º¨¨¨¨¨ÈÁqlùŽ”¡EÚ·|CCƒ°ßõV¤8L†ÞÖÖV­Ó®€ ¥‘ƒ¯¯¯ÏÉÉY¿~}Š¿!“€c±ØoûÛ«®ºª°°°°°°¼¼ü¥—^²‡tß1%_‹b4*ƒÁ;wf4Ž÷F9ÎÐ"í[>‰¤(‹ÏÊaÒZÚÚÚJ¢u “ÈÁ‡ÃáÚÚÚø'+áݧÉá°lóùD‰ÄAò5J¾)¢6JUÕ–––I“&ù|>EQB¡Ð´iÓÞxãË/¿<þ»wïž4iRNN‚Å„b6*i[dè1%]‰Àúa¢Òº„-2/,óMaùièÈ@\NNΕW^ÿÂòûý›7oöûýñ?èèè¸å–[:;;ã½Þ‘=C)ru‘•Ö Ë¼°ÂüAc ˜¡ššÞ!8L¾)Deþ 3S„B¡ŠŠŠööv…H£2b£E©»HÙ&CëTU ƒÁ`oV³Ø¢ø¯Ñ2±áƒ¦õªöLÞÑÐv¦Ä‰€¨–––¢¢¢¶¶6íŸ'%±&q%œÊ',ób1…Ö«Š¢0êUQÒž˜ ØÊ δ8ò€´HìÂWÚ.¢+áT>ñxÂÝ<Ä¡õªòÏýR'JÚË>³H„iWpZyÄ‘§°hÈ-í!1ÏŸ¤·¿°B̬–áXu Ø] š€ ½o^+m><,aÚœVqä),ZgèÆ„ÛAõ1€,¥=¯¬lJ 7ó&¤÷ú0qBÇW¨Ä’'àh4ª(JŠlj^+0—8žÅÁ¨uúnLXCJ{Í„ëlÒ §„ùƒæµ£iÞDB¿×uV6„y1ÇSQòÜÖÖf¨r›¸é×J›ÿìÑwc²Rêk¦L¯³Íÿq˜?h„Æ0gÞë#FüìMøE*rsÌ¿‡¸œŠ’'à¨î® 8WÞÙW¸髤™’ì ¡æp¼è’<ÇD ŽÈ¾Â#U¾’[ÂßOŽßLBX ‘Ðm¾ù³I¨-®}' ƒÌ¬\FÊWæë0dhw$üý¤Ÿ=àµKdZ pS£Õ×JÚHÀàu†ò•ù: ˆx1Ì 4ªéóä º'­¶X¹‚#€¾Ä|–v*Íî@ÙX¦õÖ„~N±   c†L`qÂ6¡^ëçd³YÕšB?§Ìõl§âDÈ–Å Û†˜°_7„ llXÕJº½---………­­­¼ICûÑSWW—}?#¸Á\K;Ž 6x³lÿ!Bº½†Z+ÖÕÕ9ÒÏìÒ“(wí–ïþá ýÄÍ÷ëó¾è´P¹Û¼SH·—PðN…Ê0=1Jì™'€¬,bÆUrö¼Ö«¤¯‰ o/TvéI”´‡ D¥MÉæ GrçG$ëUGJz2l Kë&†àEž^ß^4£¾E Ã<ûÚ0±‹Ðƒ8 %=‰ľ ‰­<Ì÷¼J}"!P•ps*K;„"ÈÖü¬‘¾ „ùl‰|¦'»ô$ÊÔ'LÂ/ÃÜ®Lš äóBˆÈÁ›O$3véI”´‡ ^fþ0|giÙeâĉ­­­²æ˜,™{l×®]Š¢”——KÐ]†3„VëôÁ þ;)aÇb4€·$ÜÆK_mX»´¥w™Ðmà›‚%ìXvéI”ëN\¤ ]Cį€}>F­SSUµ¹¹Ùçó]yå•ò SÓmv&çææVTT8(mîXUUûôéF™ô*£Äž)q" ÁÊò'1/28’xêVŒTëÍClkkS…Q¯Šr݉+`€,¥Þ´‹VÕs%U¦Ê:¡R«™vº.[¶¬ªªJ¨˜µ+`UUSÌÒ²EV·K$iïOgåv,^ÄÞûèyª&jÄ•uÁK­fnÝì8vé‰jv$«¥½?•رxOqä·HŒÄM—™WÜÅMÍpÿ%ÞáXbÞL3SòFEq6wšI¸»lêûÓY¹‹±ñG~+ C{ ÊÆ„j“V˜¿X¨´E¨_B’'`s•;ûÜi~Äü2qä·‚Å[Ög:ZÂJ{DÅÞÚ×ñ>‘àÄÎt FŽÌ_VápxÍš5ápØý`$OÀÚ°gs§8¬äl£åis6"ááöxå8Þ'䪪fúãK®9õõõ999ëׯwÿ­%OÀ1,C¢ÃÆh¹•ñ *ß^c®{ö`Q¬ª¦@®9áp¸¶¶–ˉ‡ „¥ÍÙVR²g¿÷EãñßOr‰c¤šãZ¨HÀ 3+)Ó…‘ö`yíÐ5]({„šãZ¨HÀà-6æ‹™§ y-ð’ðÐÔÕÕy¤çÍ<¤§­Å›#þÇǵP‘€¾ÄÊt!_™ñ5í¨à©ž—fÚ¡YZ¬Ce—žDÙ[QB–bkF…Èæõ¥íy‰Ñ½M‚àwMÐc*nG-+•fŽk %Fz¦#V ;v¡²KO¢¤=$`pŸùk^k¨}†Ãá°˜_:D’ô¿{ géö’šÎ~:™œð";//ÏÊÀóZCÃ~ýXåCBâ¸Ç¤ÛKh±y:‚=d°Ù“O>9{öìôq ƒ¢_Þ¯ßÊÎ_)óï¹ÖHÐ^ýO(‘ƒ7ÏQ·*ÕF/¾øâæææôq wØÆÖ›YòÚv¤Æ Þ^¨T𫯾zõÕW[Š d‘bëM¹³ˆƒô?k^|ñÅ’’’ÜÜÜ>}ú,Y²DÊ>$½˜˜Pðö.Ü©&à¯ýëëHÀ [ošÀ"ˆûî»/¾˜GQ”üüü%K–H߇¤S Þú‡‘]zb¸úöÝwß­¬¬üë_ÿš›››ö±¼ Ù‚EŠëD]ÐÐÐ0gÎUUõŽ92XŸj[ÂÅÄTP Þúêa’뀿ÿýïÿâ¿°øÇÉ«©©a!önGáA矾ù;¡_¿~1RëSAºu"¯?‘jjj\N”¬^÷رcçwÞ§Ÿ~j5 Aƒ‡Y¼Ã§–#×××'ü*,--Mø÷rï™ÑëHÜEŠ…Ö‰Ì¼°Ç¢££CQV½ÊèÊ:SâD@TÂ2¡¾`Le—¹ú›——÷â‹/fÿʤ+©i™w™ rÄc‹h4ª(Š~DÚA¢¤=. 8íÆúVvÞgñ"öÞ@Ï<óE?‡Kdæê¯¶ôÈqæJª4+ZG<&vU›]z¢š€Éji7Ö·²ó>‹±ñG~+€¬Ìs¸â xŒ9Ò€“-=Ê^ŠaÒ’q‘ÙÛ'ÒžKÀÙçNó# ÷:H½±~Ú?`ô"6žâÈodh¯sui ÈÏÏgßüüüdK'÷þ„Ú"Ô/!ɰ6Èž"¿ÚÈæGÌ G~+XÉÙñÏ0¹"˜ [6ÖnÀ——WRRâHõ×6ak“6įø™ØüíÍ1`Ép[[›¢()ò«Ü¹SVrvü3œ¬È„Ëhºè–Ù1Ô&IŸÌñãK(køþ ’<3fΊ†“™0Ð-÷ËÆñ«ÞÂÂÂ{î¹Çñ×·Íü»„ú/s&æQ|§hIž€cX†$gº] ,bô•]__¯¯û0 8ûŽl4ŽPs8†Š òÈh [ÿ7¨=‹ Ù4¥,ˆyíïÈ‘# ™-ÉNÈp8¼fÍšp8Ì;ô¢‰nœÀ0x‹#µgp‡áˆØ;®­ýuœdÅòúúúœœœõë×ó$½„7N` ¼ÎFí)Ù†#boŒÚ͵¿Î2Ÿ¤O¼p8\[[K"øh¢'°€ FÚqlÒ_‹„Ø[JËqí¯ã¨Ìl²‚Ч†]¨HÀK;ùKÿ‰%ôECŽÅÁ qÖþf)áOwª•Ž#ô+Ö¼ŠÝ©8‘€²•úYðû„“fe’Ü\«V:.á¯X1·%a·ZŒ]zå.¼¸0¸OSRí¿sss+**ÞxãË/¿<þ7Tî±Jˆáv°Òw²ªªÍÍÍ>ŸO»Ýöªª,X ÿŒH;Á&Nœ¨fYö3ÃôÄ(±gJœHÀËPHæÂƒÄtÛKhé°SýÌ.=‰r݉+`“áZ- M›6 —ÈÎ2t²"{¯šÛKš°Ë©~f—žÄê/ÑääähÆÚ?ý~ÿæÍ›ý~ü:::n¹å–ÎÎNퟪªƒÁ`0¨ª*‡p zûí·=ªïd埽ÚÞÞ®]lq ÃI¥(J$©­­D"£²M;X@@´#E Ÿ]YgJœH2bž¥b˜nƒQëNŸ>=dÈÖÖVÃãZ¯¶¶¶Êq„´maÆw£æŒØëgvéI”´‡ r0o€BRxì±ÇfÏžìÿÊw„dÌÛ_Ð:IôGJäÈím3‚ @UF;]ó›cÇŽ 4hß¾}VþX¨ĺ€îZ‘[9‘Ø¥'Q¦>ax‡ynˆ6·këÖ­ápXÀÉ,Œ<øàƒŸþùŠ+l|øªU«ì½ˆytZâMTèîã{µ6»ô$JÚCHQò”&îû›ŸŸŸý}Í?_$ãÚ]XŠVÚ6»ô$ÊÀ/† ôd]lxäСC޼²yѧ~‰6­^²‚Ð `>4Â.—×ÐÜèXFWÖ™'âãfñÁjÃÔnÞ÷Wî:±ùàQHTµãË.=‰’ö€ìIöE,f>æuß_‰ëÄñ@Ì#ž‰ª¶Ö±Ú¶YŒzU”´‡ ¥´÷?A4åxß_¹‹yÄ-öX´µµ)ŠÂ¨WE™ú„IXÎpRR4½öÚk×­[7jÔ(.$œqC—€GÜ:a…ªª}úôQU•Å 2ÑŠƒÌõ´ØxŠ#/bï}ôRLJŠŸ<.ŸEëÖ­ëÛ·¯ ÙWI4ã&‰ÐýX™x(ª¨¨hooç•Eñc!Ú7›öÛ…Õüm—Õ6d‰y¼"í#æñ™´ØxŠ#/bã)6:¼Æ\-vsÐòìÙ³_|ñŸþô'ÞË­+èŽâšµ´´µµµñ$N—c—(MÀ†TaÎöR”aKÞ´ØxŠ#/bã)ö~+¤ígäl)é§í¸V]¶lÙm·ÝÆâ•ŸqCånóVP¬y 8]NòF•/O3K{Eh/5JÌ^‡Ø¸òN›³.¦Ä‹/Þ³g‹WfJ¦3œÐ,-¡¾½%OÀæifi¯Á6®¼Sçìh4ºcÇŽ;vÈñ…å5 OPZˬS£rÓÀ„Âáðš5kÂá°ûo-yÖ®€‘_IH³®¯ÇE3]æêµÃg(œ U›Ì¹æÔ××çää¬_¿Þý·–<ǰX ××[)(Pùðó%4Œé,k“٠לp8\[[Ëå[‚]zeõ-ÖKÌ|ЄwÕàN^@z±iö$k>¡Û$˜¹Öó¸fXžh^­˜âNñGô«…ÝÉÝ ’-/noojù&#’5ßÜœH$R[[«í¿(8­ç¹nÿ£+ëL‰ ˆ õä/+•fpa0Ók‚ÜXnjK­™Šºu§avéÉù×F£¿þõ¯ÇŽÛ¯_¿qãÆY-Ã'B䃥ÕJ?/Z´(ab¢³ù|Ê”)ÇŽÓ?rôèѤ}¢ã‘°`þMmž_ƒ«ä,%ÜhEVÔg¥Q9XÙô3»ôäð—+W®,((¨®®Ž?²víÚ^xá­·ÞJýDì DE"‘uëÖÍ;7¾!­akkÒ{s¡ªjss³Ïç3\iIÙÚn̹¹¹úíЩHx°”M?3LOÎæóÏ?ÿüšk®yá…Ž;vìØ±µk×oÛ¶-퀗´ëÁ¹»1ᘉ^‹¹½ª0»ôä|bïêêúñ¼eË–¿ÿýï&LøùÏ>eÊ”´ÏÂ0È*áýsvíÚ¥(Jyy¹L×s½½½}ûöeôâún”µõ´q”eË–UUUÑj£ùÖ­[Ãá°à#O$2WÀ¶‰ kRnòÞ{ï]rÉ%‘HÄ…÷¢Rw̆kwp¡¥ÞO$véI”ëN\ƒw˜Ëfæ;"Syä‘#GŽôíÛwúôéëׯwáM©Ô³d¸è§U'¼Å‰]z%í!ƒ—½Í{CCüyóΜ9£ý3??ÿ¹çž›={6—`Hô˜mt¢)ăWX¦' ÏTr’Ýæ=¾àXÌÕÆ .Œg_EQΜ9SSSÃ+}‘[\›é¥ÃñàÅÜí£¡íL‰ € Ó5ÅÜÍ¿_¿~†ï“~ýúñ Æ;·| Û:ñ§²'ü ±KO¢ üb ójcF\Gµoß>ý#¥¥¥†G¸ ¾¸65º­‹—Zb±÷³7!óMÁ,h0áÆM@ ???þe’ŸŸ___ïÚ»§%ÓâZ3B{2›‰)¬Ç.=‰’ö€2’âÆMn¦™_|±¤¤$//¯¤¤äÅ_tá³AwðÖŠp8¼fÍšp8Ì;ôôg¯à¿Š¢Ñ¨¢(ŒÂeàCÐYŠïµ··SÙ Áeto­hhh˜3gN}}ý¬Y³xÇ’Á7î…B&L…B,ÎQÒ0€SäN3Ù¿iOÂú¥ø?]UUíÓ§ªª,Vœ‹’ö€œEtm±›¨¯OM‹Ð7Ÿ®âÀ:`&Ì‹Ò ¤ýF/bå)©¥][œÿ÷ÿþߊ+²¾ ÷!–ƒGœ5óéê , Ë6d‰¹’ox$îØ±cÇŽñGÌ3ñ ¤ýF/bå)ñÖiÿ‡S7?á#à)æy[¶§íüçþçý÷ßïhtB 4É íˆG"r|¡»DI#[É%V²šy|ó*ý#iÿ€Ñ‹XyJ¼uÚ444Øø­`þBîƒ Ù°·¿ÇÁƒ‹‹‹»ººEÅ‘˜žd‰ÖšPBòlžçmÈsIÚ¬ wîÜItåœA¼uñ¹6~+¤½òFJ–[8®­­ÍôXuuõ£>Ê>: “â# ÿ® ÒóàHòÜÖÖ¦(JŠüj%—€ i¯¼qÑì)V.•>þøã¡C‡ž(^>&cþÁM¨E«Â’'àv¢ÃÊEsê»ÍÓúØ{œÅ;–{|»hi-ª««#ÑŽUa$` Ã\kG¥™.óÑôìÁÒ~k¶¶¶J3ŠFëêê¨4‡cU˜]zeû lÄ!1Ã{óŠ{ó~„6ðé7¯HMäý"l¬9Œ°KO¢¤=$`/³˜’wíÚ¥(Jyy9²2G 7Øòò¡‘¬ù„~ûF"‘ºººêêêÜÜ\¦o„Û‚·¤--{v T@¯KÖ|B3¥]« ³KO¢\wâ RSUµ¹¹ÙçóiûÕaÔÚM½½½ªªöïß?áÿ5¯Cóy‡“-BƒÒ®Ý|CÐ_‚B²›–/_þ—¿üeõêÕVþØãEb'žtp3€/1oÝnÞXß°½ªªÁ`0 âž9yòäÒ¥Kÿë¿þËâß›„×z>~âIp­ ñöx‡“ ÉÓŒÑÐv¦Ä‰¤a($KV«sÍOúÓ»îº+›WðZÏÇOgÎg_Ökub™ÚëÁÏ0€ó0“‹BSm!S{ ý˜pêËIXγ>“«½½]üI(„z>‰ÔÖÖF"¾Q±choooï#<ÒÛÛË7*{´ÏHYY™øŸíÄ à ÉR²¢(ÒÌkІ æÍ›×ØØÈ;—,[¶lÉ’%O>ù$ï@ìÐ>#ú%bòûýË–-[°`¸q2šÜ•)q"0K1¯{reϼϾܽzöìÙ… F"ÞØ§_b òÁräζìÒ“(•WÔ€+ecÈž×z•ôTBË^?c€ psô½J:9Y¤å°­[·†Ãar-/UÒ™ÈÁký¼lÙ²ªª*ëqb€ Ìe㎎ŽÊÊÊÊÊJ­òD®l¼yóf­ìÍ‘¾Wµ©4mmmOÔ2L5àNfP¶M”ëN\ƒ4ÒÞ7BdápxìØ±«V­š-Kä³×çó¹v¥ÎdÚÆkb 5Ã8õºSñÍ[[[IŒ|fʰ٠ïp¬ŠŸÃíííbž½ GˉՀÏ?ÿüO?ýtРA“'O^¸pá%—\båYHÀÖ9µ¿GWW×àÁƒsssÙ„)”ÒA¨*¬Ðªßzë­6l8uê”v¢ßpà ®§xG²ý=2­ç;ßyõÕW("—+|nBU˜­Wµÿ`òŒ–7Å=ûì³Ó¦MKûgÉ«©©a!€ ë‰Ãáðš5kR¯ë}å•W.»ì21h²ÐÒÒRTTÔÖÖÆ;çµµµéW“‹Ï|ƒmŽjjj’e"F2OÀÝÝÝùùùéãÀFYÓß~¼¾¾>''gýúõÉþ8‰Œ7îõ×_w1@Î ·gyƒˆLE£Ñ`0¸sçÎ,o>ï2Á7ëÐzUQF½Ê¼òÚÝÝ=räÈÓ§O§þ3Ô€œ•öîkÖ¬©««{ûí·]L˜È&‘¥IX¿þõ¯_{íµßÿþ÷iâ@`L«·)ŠR^^ž““ÓÒÒÒ·oßË.»Œw\ÜP¹ƒž=†ÃÍ;œ4â×µ#"TÀ Ó“³Ô“'OÞ°aCWWWooï_ÿú×%K– 4¨µµ5íÄÃ0ˆyTÄÆ#Œž)¢eBU‰t ÅÃ-æ`—ž~ݦ¦¦oûÛÅÅŹ¹¹C‡ýÞ÷¾·wï^Kq0h¡¬f8üæ³ÁÆ#Œž‚œ ™2— q’h¯DÚC±*,æ “€mË´…Œ²©yކþŸöaô”ìs6€˜¡C!ÔðnÖrF8N\>b#«’}ÎŽ%¹Œ6÷6ÈÊp’XY¹$7}‡È÷ƒ•ÐñêRXòFEIx9«åŒ†††ÔÉ5á#``ñ2ZßÛ"œýàš´+—hq^¤GßE‚àx*Jž€cÂ,C‚´ÒÖž‘’…ÕÜÜÚ©ØÙÙ)Óé'ÊØŠRzúmÿ ·5o‹û¶:î¾ûî›2eÊí·ßnû¤¿Ë½iwئ…Ö}yNÞ Ú"$`/3¨DÞ™ <þkÉãÍçȵžg—žpÆÉF­ý~üZ÷÷mh:xóÐHÖüH$R[[‰Dx’^(ª¨¨hooçˆ}HÀ "sJîè訬¬¬¬¬ÔÊ?(§FŒÑ·oß#Fvoä÷û—-[¶`Ái*s‘¬ù´ŠÜT ØI1šÜ•)q"1v–Çb§Ôêëëóóóãóüüü@ ÀîíäÞÁ1-™Ö ڬõng—žD©¼¢ AÙ8µ‘#Gîß¿ßðÈ|àÂ[ã@ *,Ô€¾eãÔ>lxäСCî¼µþ@x³R SU˜Ð$j0H"mÙ˜Ðì’ì 6ÌðÈ…^èÎ[›—···“ûf̆LUaB…‡ Òòûý[¶lyýõ×µ«1Z³K²ôØc 0 þÏüüüŸÿüçî‡a؃Åý¸ÈÉÉ©ªª2ŒÇÐEh¢¡P5¢T^QÖÌ[(È]«»îºëöìÙsæÌ™¡C‡.^¼¸ªªŠW$äv{pÝ3бc*jÀÙÊÍͽóÎ;õ߀†M1)Ö’y÷Ýw?øàƒ>ú¨··÷À³¯’¨:à©r€B¹*l8v"Fô¡Š§0x—aÞÝoI³Ÿüä'<òHAAï@óT9@‘¨*Lå3bÞp^PŒ–7eJœHÀ³¢Ñh]]Ë‹ÿ÷ÿ÷ìÙ³¼£HŠÐbS§È±V8ágD@ÎÞ:‰]z¥òŠ0ˆË‹¹ ["µ‡t{ U…úðâf |¾nHu Ëk¿r¼Ö^^œú­€IX|&¡P©Ñ/ÆS™;“%­½eeeÔ+øñŠx…  æÙ4Â~¶ ‰Q’™;“iî-Oåx §(¿‚* ãZNtP¼oc±˜ôCý„Š©ÉhM˜8q¢ÖaV–]0€ ÌŸmÔ‰³çµŸ5¤ÏBË^?£ ¨„{P»_'þÛßþ6}úti¶¶ðÚHÏ- TÒ­Ÿ‘€Æe×…¥K—^pÁ¹¹¹®½#S^»£é:•´EëgQ~1 2ÑK»0ºØÕÕUVV …Ì7A’€Ö™¹¹¹$Æ9í¡^¦¿8Q Ê… ÙÝwß]TTôøã3z}Pù~w ݪ0ÝÈ“A €*ÃŽÓŠ¢¨ª ƒÁ #ªápøàÁƒ=ôPö/%2Š[ígC´j¥u„JÜO$$`¶ÎÒª¬¬¬¬¬t¤•——÷ûßÿ¾¨¨(û—¢‚nr²N´j¥u„nÍýDeàCÐપ677û|>ý%d£vL©ª,X qIX!>êN"x‹'jÀ2#´’R$¾ßA|VN$Ô€dæµe¯Ù#t£xG8;oÀe"íDŠÅb\"DàÏkË^ǽ˜Çš³ó\ …***ÚÛÛy’¯Í¢‘€ÄBh‹8èNY²Èï÷oÙ²åõ×_×O§'Äçó‰\,0/Up‡(•WÔ€ôR—¦ÂáðÎ;¯»î:÷ªÂ¢~h0 ÀÓ Ó¤W®\ùÚk¯mÙ²…w\RI¸“°uêÔ’%K–,YÂ;(¡‘žµ”ÝÖ‰Ÿo„ Š÷v¢ÈžÄ]D®iZI¥¬¬Lä°]èUçðçŸ^]]½víÚ‚‚Ç_’~'ŠìIÜE‚VÍ´Ÿ"‡íB¯:e}Ï=÷\pÁ .üÇ`€=ÜŸ w‘ø…Õ„/£Ä{57772éÕ˜£6nÜxÝu×E"‘ø#ß"Yx555ÎF «h4ª˜ñD\rwQ[[ÛàÁƒC¡ï@¨ª©©I–‰õªÃ×#GŽljjºè¢‹âà € ­‚¥(Jyy9•K"7Éw H¢×ÁŠØçªªª}úôQU•ÅeºÃMÝ¿II‰OG~P)Ñ]*êùJÂ$ « ‰|®j?¥0æ×¸ÈÒ¦M›šššž~ú錞Ew©¨;d- ^XMHðs•Þ:à/Þ  ÑhÔï÷?ñÄßüæ7³|)ù]³D1Wûˆ­§ÔÕÕwÞyÙg_w6ѯ¥&·”ÖŠH$R[[‰Dx’)D2Ì0éëZó©`ãGžÞÔÓÓ³hÑ¢ÇÜ‘WÆS ·”ÖŠ 6Ì›7¯±±‘w ò@$Åbjµ \"‰F£;wîŒF£É1Oë·ñˆ#OI*HéÿþïÿæÏŸïìkʽÇ6­["‘ˆL«p8\[[K«9žŸìÒ“Ì Ø¢Ì+m"4Ÿ 6qä)VB•é‹ÜÓÆKiÁ 8½´ù5áeeÚÔ(ˆ´¡â¢l@¾1öÀk„ú²B6ÒO8ޤ´ùUî–õ‹æÖÖÖx§ u–ƒûâ§ Îù:„V‹´/«ºº:özNvuÛÐÐÏ1rçW’]4·¶¶Æ; ãØ Á¥°|"TJK+ÖÕÕ r<—€ÓN†ŠÏ˜@ÒÍ”>1ÛÇ)I9)òý *¥Y!Î!`—€…ØþBÛlS» Ãíš±^Þæ~¦ußlÈ·™L»—à‹ÔÉ7âèèèPE¿ðK[°è÷ûµî=Œ˜ûÙp ”®QŽ=ðSrùË_´O„ûô‡‹Ñ52m­}Àc±­#+ó©ÈèÊ:#ÑhTQ† -CõcÔŽ»é¦›V­ZÅ; ‹ ö¹M‹Ü‘å0»D)DŽqÚˆl0TßQ6vÖo¼1zôèÞÞ^Þ *üqŠ‘Ž ×î§"»ô$D XÁÍÈBÙØA±Xìꫯ~à¾óïðŽåp4AOEÉkÀ@—Ųq0 ƒrVqœóꫯªª:cÆ Þ|UaÉ:ÐÝü~ÿ¦M›zzz¤é| gNÉ"ßm[(•••BM6ÔMoí’ŸD(ª¨¨hooçˆ3Ý­!''§_¿~·Þz«Lg`.ï@~~¿Ë–->Ÿ/~!%ͺgååå 6ŒwIiWÃeee»víòòáóù|BýHÊÆÌ™3{zzfΜÉ;KÌ£kÔ‰RyE Ø;̵¤dB<^ÆRZB äaþÛ”¬À&¥øáóæÁÒÉËÔ´ÚB+Ú€Ám)æm!‹/~øP–©hµ…V´)ˆ2ð‹!hPtã{ííí^ç$ƒ±2õ­¶¸-»ô$JÚC=Z_ÙPU•zåÛã%|7Ÿ#×z5`ðó0µ¬ƒÒóæÍ{饗xG‘iÆ푬ù„>hô<0Ð eyxïÞ½[¶l¹ùæ›y’ýò$9ŽKF$k>¡…ÎlÍ 4&jµ··Kð}÷àƒ>ôÐCäHV´áŠÎÎNê—#öÈ×|* %ØšC”Ê+jÀ`‘VÎÍÍ­¨¨ =Kk×®]³fÍzï½÷úõëÇ;x§lŸ4ͧÕw¢Å$,€/1ðÈÍ…Ù´iS8jçgG;©aÀ—$ÜqšÖÓo½õVù²¯Bð@8Kš9 „B(T$`„ßï_¶lÙ‚ è„äàñ!ÍïBsŒ …j ÊÀ/† !{†qéH$RWWW]]›‹›Ž¸ŠVÑYªª ž  :ˆ¬CE  c sæÌ©¯¯Ÿ5kïXÀC¥.°5`€ŒÍœ9sõêÕÚ­ÖèV‰$àµÎ×&(Äb1 Z­ªj0 ƒâ7„P¨qHÀ ­ÜÜÜ;ï¼S›‹+MeŽ"B{;8ˆnaR¯£££²²²²²Rü† 5µ1ð„øÌ ²²2Ž•¹—_~¹¼¼|ذa¼à…ÊÞ’ãîñ~¿Ë–->ŸOü† 5N”Ê+jÀÀ÷ÊÜÑ£G/½ôÒ–––áÇs €î= L ïÞ{ï0`À¯~õ+Þ@0 Ày‘H¤¶¶6‰¸ð^xùå—úÓŸºð^"óÚ„,…æä 3BŽP¨HÀà]6l˜7o^cc£ ïµtéÒùóç»ð^"“cjRF(N2#tà…*ÊÀ/† Á}‘HdݺusçÎua×â3gÎäääœsÎ9¬ßHpZ=xâĉZUØ ûE«ªÚÜÜìóù ›§ÒB¨ïx¨¨¸7pG(š6mõ½¢À#Pp– »C‚[©Û@¨6™•Vˆ à ¿‘€k$¸•º „j“)PÙV…Do‹2ð‹!h¡Ziìg9šÜÚÚ:uêÔ¦¦¦ñãÇóŽ%{›L xçΫW¯njj:räÈ AƒÆŽ{Ï=÷X¹é)0ˆ Ua=B?#œúð’©ÿÇüÇøñã·nÝzúôé={ö<øàƒ‹/®©©qö]\“MU¸§§‡EH’!Q«sé&ºÕ)1ÆöíÛWXX˜öÏ\ˆÀ†h4ZWW7xðàP(”ÑÏœ9SRRrèÐ!FI£­­mðàÁuuuÑh”w,.iii),,lmmåˆ}ÚQËôCá2Û^vé‰ùÍòòòúôéÃú]ÉÉÉ©ªª3fL¦;¼?ýôÓååå^x!£À¤!È}2\Fýî$n5aûÃ놕ד'Ovtt<ôÐC7ÝtÓÏþó4q  9qâÄ%—\òÇ?þqÔ¨Q¼c!€PYÑ^k/udjÀíÇ]aaá 7ÜPPP°hÑ"ïà>‹ûúþ÷ÿ÷Œ3}-ÒÊŠ>ŸtqÔ:BeÔÔ¨/aãd’€µÑíO>ù¤¾¾þÏþó’%K¬<Ë—’7Åâ¾¾C† Y¸p¡kQIƒÄÚM§HÐX*M°ç¢E‹¦!v1ø}óÍ7çÎûÑG¥‰CÐ@ûú ËSc³4–J²Œ“Ì:`³S§N <8íz $`±°ÞŽ;.¹äÖï@‹Ã xÚ´i¯¾úêÑ£GÃáð‘#GÖ®]ûýïÿ¿ø…³ï ŽH$R[[‰Dx"a§Ì°@½±§%r'f?;œ€ò“ŸÔÕÕ;vÀ€“&Mzíµ×o¾ùfgß@6l˜7o^cc#ï@äA`#çP™Ç”ŒÅi‰Ü‰ÙÏ¢T^Q¢"‘ȺuëæÎ‹Í¢¢ªj X°`nLeS2T¦%fÓÏ„'aY„ ¤©ªºdÉ’ÿøÇýû÷ç‹ ¨§% áIX^^{íµ¼¼<ëLI³U…EÔgˆYa5-N$`€lõöö.Z´èñÇïìì°ÎD—˜u;¨Ï$ r¤B¡PEEE{{;ï@þùͤ÷›ßüfܸq7Þx£ªª›7o.++Ûµkn!œ=;þ;bæÌ™===3gÎäˆM„Ž”P·Á¥òŠ0¥ªêرc7lØPVV¦= …¦M›æ… D´Ø›[€0€ rrrB¡P<û*ÿ¼ЮƒÅ©6Ñ%ZÝŽê-?þœœœ+®¸¢¹¹Y ‘€²uÎ9çèÿ©M B=Ø)Tê‹Ù£ÞRñ ¤(¿‚É`!S¼Ó“Ô[J"~Ab0¨P%~aŒê+e-¢~¶ˆ_œ ‘€Ømé!QÔWÊZ$T…Òñ‹$ÖØqüøñóÎ;Ïâ µô(ê+e-"´ 6!ñ‹¤(•WÔ€·ÞzkþüùVþ˜ÄÌH“°rÍ5×ÌŸ?Ö¬Y¼æ0 @ÿûßmŒ…Š3õƒ.ô!éf’^ ‘€2F.\øË_þÒÆ>ÏâLý Ë#}Hº™$f ÒÃHÀèééùá8uêTÏgê]éCêÍÖ¡ =,Jå5`€8UUwïÞMñžZòÍ:D @‚ÔŸˆòHï‘ÈMH´$#‰„ à6ºß­"¤zçñr“!qŒDR”_ Aƒw´¶¶N:µ©©iüøñ¼c¡G¾΄H7“DðÖƒÄ:`yøz jÀòÐn‹Å¸— è¡€Çé6’ž{HÀiìÝ»÷‰'žpüeE(AÑå…Þ#ÝFÁsR”_ Aƒ°n¿ýök¯½vÁ‚ξ,¢³á…Þ#ÝFÁ[ 5`>š››g̘ñþûïŸsÎ9¼cPàã§?ýéÏ~ö3FÙ—{ Š.UUƒÁ`0”»÷HŸ!$‚D"µµµ‘H„Ë»#$õþûïÿío«®®fôúÜKPtuttTVVVVVÊÝ{¤ÏÁoذaÞ¼y\Þ]”_ Aƒ˜TUe· ‰:™˜TUmnnöù|W^y¥Ä½Gú !|$Y·nÝܹsS|ÌQpI xä‘GŽ92tèÐÅ‹WUUñŽxBpCCCüyóΜ9£ý3??ÿ¹çž›={6ߨ€#LÂpÃÂ… ãÙWQ”3gÎÔÔÔ°~SsUÄä…®£ÛF‘ó  à ‡6.¿5i$ªŒY"ÝFñƒG XQ€Aï¾ûîÔ©SßÿýºüÖ¡PhÚ´io¼ñÆå—_îò[@jdjÀÛ·oŸ5kÖàÁƒÏ=÷Ü«®ºjãÆÎ¾>;ÅÅÅ@Àýì«(JYYÙÒ¥KËÊÊÜkêį2f‰tIÏ1H‡ð 7ÜpìØ±7vuu­X±bÑ¢E«W¯vö-¹à‚ ¦L™Âå­ß}÷݇zèÝwßåò_eÌé’žg1G=ðÀªªÆÿÙÑÑQZZj剎GÂÚ‹/¾XRR¢Í•}ñÅy‡´E£Qí78ï@葾ëH7Dðiƒd—žØV^ÿþ÷¿={6í_ÒªcÇ` S6xýõ×/½ôR¦oÁEÚƒÀˆ#úöí;bĈ@ àz€ :† øøñã?üðSO=Åî-x1ïüá‡655iû744Ü}÷Ý ‡Ã¼ûî»ëëëy„ d˜«"&/tÝ6’ˆœgŒ†¶»»»¯¿þúmÛ¶Yü{v‘°0räHC7ßxãC† 0`@¿~ý ÿwäÈ‘¼C¡µµµ <8 ñ„/tÝ6’ˆüðÃÿùŸÿሢªêîÝ»'Mš”“ƒíÙ3#}בn ‰àÓÉ0=9{A=~üø††Ot<¾²Y%|öìÙŋϙ3çÊ+¯,,,>|8£ =®»»»¸¸øàÁƒ¼‰Åˆ”ÊÄ$}בn ‰à9Ö€Nì ÷³>qâDaaaÚ':‰4Nœ8QTTd~ü“O>yì±Ç´«äÑ£G—””`ÿŒÔ×ׇB¡_þò—¼Q {Ö Kú®#Ý@Á§ ’Ì´mHÀ™:~üx xï½÷Þÿý>ø`È!;vìà€l€!h4šð ¸¥¥å©§žÒ.”G5zôè¯|å+‘(• È ýFº$‚çX·S #ÉÆŸ/¼ð©S§öôô¼üòËwÞyç~ô#—+B¡PEEE{{;ï@ˆ!±×–H·‘DðƒåºWÀ|­_¿¾¾¾~ô?•••óÊCZ[[§NÚÔÔ4~üxÞ±PB¢Ä˜%Òm$Q|½ÿþû===¼£0"Q'“ºŽtÅžo„¢\wâ Xýû÷7Üþ9//¯««K„Šr4½ì²Ë–/_>mÚ4Þ±| ÆŸmóBבn£øÁ[‰CÐ@ƒyì¯|å+­­­£G6ÿq²¥SŒÔÖÖ®[·îÍ7ßtí@HÀ@ƒ•}°ãÆŒFG5f̘1cÆTWWëï1嬞žž1cƼôÒKW]u£·)¡ 4Ìž={ÕªUñ}°W­Z•,û*вgÏž-[¶Ü{ï½Ã† kooO6 âäɓٶråʉ' ˜}Iܱ\L^è:Òm$<ç í1)q"¡œ={öÜsÏlø›C‡q‰-2ayd÷lº' ‰ÈUUíééÙ´i“ßïç0È£  `„ wÜqÇœ9s† fø¿^x!—¨’Áù|>‘Ç6A÷$!yGGÇ·¾õ­þýûó:‘DøÅ48+£Q\¨ Ë#½G·™$"·$jÀÃm! {¨d¬ªªêÀ½½½-û’¨ Ë#½Gº™$‚ç$0€ÛTU Zêä6IDATâWÈ„E¢¾˜=ÒÍ$<÷ EøÅ4x‡¶òaùòåUUU"WÈ„E¢¾˜=ÒÍ$ŸâH •)ÖO$Ô€€ù~!!p€IX´‰0ãƒ:ô!õf’ˆ_ ‘€ØÒ>ê¡PˆûŒêD˜5ãêÍ$¿ AŠ2ð‹!h•6'eëÖ­‘HD¦Â˜Ë´ß1>Ÿ¯¼¼\î>¤^C%FA¢ @‰ï#ñY¹q: ¨¤ªêîÝ»¯¸â dßlp¿qºk©MÚC%xqâD`HRuÜoœîÒ' •àʼnS”_ Aƒ”0þìït#é–R >Ó8Qà5`2Ä©0IÀ;I½¥$â-H$`‡…B¡ŠŠŠöövÞÈ@œrkÔ[J"~Ñ‚DpžÏç¼ F…ßïß¼y³&?SŸæMâH•••-]º´¬¬Œw ÿ Jå5`•©( ¬rv‡½~F @húÚRNNŻȉF´r;Ô/©)û À¢Õ–¨£rSwGP_åLåä°Ÿ¿²nkk[½zu}}ýÉ“'­¿8† (m¯«‰'¶µµaØÙ)Tnêîê5‹H$²nݺêêê>}úðŽ%ÛýLið¸qãfΜ9sæÌK/½ ¤‡ê Ôs’§Hÿ ”€¿xéL‚F¢*Àã¤ÿ`€p´¹'Š¢`Ê•ƒ¨Ìèq„%q»aû À&*sOhñT¯JÐXM6H AØ$ýÈžêU K¢ Yé‰!h_"‹-âÀ°Þ—5Oõª%Ñ‹A.Z´(ab»—ÎT,$`‡§§ºLØ*#´—J¬Ç¹hÑ¢„iˆ]l%`Áutt,X°`ùòåâì¤#¯ý²‘£½ÂV DŽ5`«H”»(òÔ¶Š,í¥òqÈ>N¬àC[e1iÒ¤œ ±Bå«Ü)^k/u”&aé ×.±ÑJG¡PHØñ+ xm-µí¥RýD"µµµ‘H„w I9Ÿ€].b0¢•Ž|>Ÿøw9¥Käú ´—P{Æ óæÍklläHR¢ übDƒqBx­“%h/¡¶v—ˆ¹sçfY?"YÎ0ˆ_€Ô$ø ‘)J5`ŠPñuªªÁ`0 Š_Dt•ºi „ ØTz @QPñuQGGGeeeee¥§~èHPý%Ô*¡Š2ð‹!hà˃k¼¨ªÚÜÜìóùÄ¿rŠvAæóùÊËËé6™ÐgÄÙPQp*¾àéoY/7Ô€œGeœ ¨óûý(m€0xN|‚¾ÝDe^Œ³M\Jб#ª‚ ÞÿdÆ/|IÜIM^ža.Ç( ¡V UA ¼#^‡»ì²Ë¨Ì%‘ƒÖó[·nD"^ëvB—ÒæILœ8±­­MðV° “°²Eý«.ô<]„¦± “°2fØŠÎî“£j­Jd2ªªöôôlÚ´Iüy„BÕCi‰¿»ôhäœBèv©utt|ë[ßêß¿¿ø?ž…ª'ÊÀ/† ÁqNmŶysð™Ðí R#tø˜†Š0@ØUC8„òX0@bæÅE¼#ò4iF_mˆŸŠÌ6 TÃ&ª0dλØUC ,X¾|¹„L? µ…P¨f¢ üb2‚E½bòòè«Lm'ÔBE àK}A‚¾jÀàQñ¡fC¥G‚2›TU ƒÁ`h.{†åæ¤Ñ*áKÐóHÀ ´x‡t¥Gb••••••ž=42-7§U— çEøÅ4èÅÇÁEцšc±Æœ¤ªjss³Ïçó쀄LËÍiUv\ëyÔ€Á[í@ rC™™ç}Ðú%Ã$,PŠ=40ÇJXÌ|ÉéÍ ȵ…\À) ƒÛ°‡iÌ|ÉžLSɵ…\À)ˆ2ð‹!h‰F˜±‡i2Í9²Ð ê­Ð~ û|¾òòr*mq¿>…0f˜Q…ú.Ð%Ùô@ÉšÃ0п{yy9fTÉ[#iä»ö¥ÕœH$RWWW]]››ëò[cÊ0!"á¶ ˜QE­­‘˜ÒJ{öì‘ãd&×)'ˆr݉+`¢ÌÃËß–A2ÒÜ[>{’ äkÇÉ’A«ªÚ§OŸh4êñ1. ’ä>Æ_ŒÀƒäCЊ¢èǸ°Ã;wÚØr$1,¹3¬Àð²dpÓ =ùFàÉ-¢%pfbˆF£Š¢¨ª¤­­­¨¨¨¨¨( i°sçÎh4Ê/FOÐ÷s[[ÛàÁƒ¬…øßhŸ~a+Ñh´®®ÎpĽLû¬[·NŽžâñÕ߀Ù%J!pÌÔÂh4 wîÜ©÷æc€”ìC7êûYK´ñ+`®a‚K$Ë7Ù“ìç&Åã+Â!`—€…¨+éÙÍ…(óò5”jÒ2wVè‚N¹áøÚ#y 8-s!ʼy¡y2Cñ@îZ‚¹uæGÌ]dèFü'€Ü_¹¿®ãh$`3)Yûg{{{ü¸ZIZ‚Hj|ˆØœ\Ó¦[…ÔXÀ ¤ìa¿ÖR…Bííí¼aŒÑÐv¦XDb(hÿlmm—9Í¥eÃ#æJ³GyJ²P㓤̕j' ¸úúúœœœõë×óDRvˆó˜2ÕÒÒRTTÔÖÖÆ;X̃“°ØÑ§¥´I+m†NýHMM½I8é,a¨.O’ÒZ$/7*×ÖÖ’˜ÌèÎar¹CX7Jû)‡]û–pªEB]?PJÀ~øáí·ß^PPPPPpûí·ôÑG–âæZ\ÏÊeeŠG´FÙx¡N>=1S–¼Ó(Òk¼s˜äþµ/SFžÜuúôéË/¿üÎ;ï¼÷Þ{EyöÙg_xá…ööö¤~¢”[QÊ×(ùZ¤x¦QÚž , zëF‡‰ïê vç¯{-dÓ"aW²™ýüóÏ_uÕU?ü°¶ÆÃ?|å•W®^½ÚÙw€Lutt,X°`ùòåúYx'ßFWqäîµ $š7*=‡ðï~÷»êêjý#ÕÕÕ¯¾úª³ïiæ¾jsàqO=‰”˜—<NUÕžžžM›6Š9{_YŸþùçŸ~ü‘îîîñãÇwuu¥‰ÃÀÔÉ×"EÞFµµµÉt¯u‡‰ûÆò{¶[dÞ[Id† Oœ8qÞyçé)..>~ü¸³ïÉh¾ Ák wè$[Oq½¯òϰËÊÊÄ<]ã›F°xñ\/j4=ù%_‹IÕ§OÞ!8LÊÃ$_£äk‘¢(,.ÍNÀEEEÇ×Aú駆kâ„$‡à…û°ªà$î¢M½®®NÿH]]Ý­·Þêì»Pçðä®S§Nùýþ»îºëž{îQåÙgŸ]»vmGGG~~¾ƒï@ÃWÀÛ¶mÛ½{÷E]tÑEµ´´455!ûȶ €±¶Üð$`€8@à €$`DIÀ}ôÑŒ38pàÀ3f:tˆwDhkk»÷Þ{ …Ýe-#Û·oŸ5kÖàÁƒÏ=÷Ü«®ºjãÆ¼#rÀÎ;ïºë®#FôíÛ÷‚ .¸é¦›yå˜îîîQ£FÉqúùLxGäUUW¬X1nܸþýû_zé¥/½ôb>F>Ÿ¯oß¾¼ãÊJ4]¹råĉ Ï=÷Ü &¬\¹2:óê1œ:uª´´tñâÅÇ?~üøâÅ‹GuæÌÞqekìØ±555{ö줟³¤(Ê׿þõ?þñgΜinnöûýÏ?ÿ<ï ²5iÒ¤gžyfïÞ½gÏžýôÓOÿûß_~ùå>ú(︠ªê7¾ñúúziN?Þ!8ïî»ï¾ë®»öíÛwöìÙ–––›o¾™wD{òÉ'gÏžÍ;ЬÜÿýåååo¿ýögŸ}vòäÉ·ÞzëŠ+®¸ÿþûyq!ÎéåË—WUU驪ªzúé§yÅã89¾;xàUUãÿìèè(--å#ûöí+,,ä…–-[ö½ï}/&Ëé'G+ô¶mÛ6}útÞQ0F/¾øâææfÞd¥  àÀúG8PPPàÈ‹ 1ý»ßý®ººZÿHuuõ«¯¾Ê+Hè—¿ü¥~ÜoäÈ‘rT òòò$¸“n{{ûóÏ?¿råJÞ@RÏ=÷Üý÷ßÏ; †6oÞ|þùçOš4‰w Yéß¿¿ùÁsÎ9Ç‘"ÿùÏ6Ümñ²Ë.ûË_þÂ+°âõ×_¿ôÒKyGᤓ'OjuníV"t}þùçÕÕÕk×®-((à‹“¾öµ¯ååå 2¤ªªjïÞ½¼ÃÉV0<}úô 7Ü0`À€‚‚‚›nºéOúï œôÔSOÍŸ?ŸwÙºï¾ûî¸ãŽwÞyçÔ©S§NÚ¾}ûw¿ûÝþð‡Î¼º#×ÑYÊËËëííÕ?ÒÛÛÛ·o_^ñ8N~vЧŸ~:f̘íÛ·óÄúOÄÔ©S#‘òïÿþï?ûÙÏâÿ”ãô»õÖ[·oßþùçŸ:tèÉ'ŸüêW¿ …x••~ýú×ÖÖ=zôèÑ£kÖ¬)..~çwxÇåŒÎÎÎaÆ…ÃaÞdKUÕÛn»MÿqÛm·é‹qÙⓉLKww÷õ×_¿mÛ6Þ8ì“O>©¯¯¿à‚ {ì1ޱطqãÆë®»NÿB²ÓOóì³ÏN›6wYÉËË[»v­þ‘5kÖÜxãœÂqØ÷¿ÿý_üâ¼£pÀÒ¥K‡þÊ+¯hs„_yå•áÇÿêW¿räÅ…ød~õ«_íîîÖ?ÒÕÕõµ¯}W<Ž“éððáÃ~¿ÿøï@XÙ¶mÛ°aÃxGa_iiéÁƒõÈtúÅuwwçççóŽ"+_ûÚ׎;¦äèÑ£ àƒŽ;vÞyç}úé§¼q@IIÉ›o¾©äÍ7ß1b„#/.D xܸqúG:;;ÇŽË+Hæã?¾ùæ›—/_>eÊÞ±°rÅW=z”wöíß¿¿¤¤Ä°^Vš…³q1ú÷Q7nïXYµjÕw¾óóÎ;w 8räÈW\¡äŠ+®8räˆ#/.Dž>}z]]þ‘ººº[o½•W<ÐÑ£G+**üñÉ“'óŽ…¡;v\rÉ%¼£°Ïü+;þ ïМôÛßþöÚk¯åEV¾ýíooÙ²EÿÈæÍ›©ÏV%ÿæ7¿‘`ú•føðá­­­úG𛛇 æÌ«;r¥Ï>ûlĈK–,‰oÄQZZzúôiÞq9F~ÎÒøñãxGá°o|ã7nüä“Oz{{>\[[;tèÐ-[¶ðŽËIœ~“'OÞ°aCWWWooï_ÿú×%K– 4¨µµ•w\Yùüóϯ¹æš^xáØ±cÇŽ[»vmqq±S+êëë§NÊ; ǬX±â¢‹.Ú´iÓ‰'´ð…^øÌ3Ï8òâ¢|28pÛm·ÜvÛm†"QÂþâ±'asNœ8Á;®¬lÛ¶íöÛo/..ÎÍÍ2dÈŒ3vîÜÉ;(‡‘>ë4MMMßþö·µÃ4tèÐï}ï{{÷îå”>þøãªªª¢¢¢~ýú]}õÕrL­(//ß¼y3ï(œôÛßþöª«®*,,,,,,//饗œze_L®)„¨x 0HÀ p€ À0HÀ p€ À0HÀ pðÿY"aPsu{IIEND®B`‚gsl/doc/images/regularized2.png0000644000175000017500000006621713536675317015070 0ustar eddedd‰PNG  IHDRè๠Ð÷bKGDÿÿÿ ½§“ IDATxœìÝ{\Wú?ð r3\ DA.]¨7P+[ѵåk j…‚ÛŠÔ;ZW·+­ –oQ±[ÁzD[Zk«V­+¥­«¢VAVÖŠâ+b½/¼ Q @òû#ßæ—Í0If&“Ïû¾Â™aÎÉiûäáÉ™3™LF³YÑ=èw3€ÄÀ q0HÜÌw3€ÄÀ q0HÜÌw3€ÄÀ q0HÜÌw3€ÄÀ q0HÜÌw3€ÄÀ q0HÜÌw3€ÄX‹ÃáÐ=è±[·nýãÿð÷÷·³³³³³ŸommÝ¿ÿ¨¨¨Â§OŸº¹¹Õ××k¼l}}½››ÛÓ§O)y&Ę⧟~ 5jÔÉ“'E"ÑÇü믿†„„(Îùꫯ,X0kÖ¬ëׯK$’tvvNš4ÉÕÕuÚ´i_ýµÆ+oß¾}Ú´i®®®T½ããÈd2ºÇ`þó0'•••“'O>}ú´§§§r{WWWbbbff&A‘‘‘.\àñxÊç|üñÇ)))×®]‹ˆˆ¨¬¬ìÕ«—òÑÎÎN??¿#GŽPðFLw€ÿ#‰æÏŸ?`À€>}úŒ9277WÞ®qÉ¢‘Ãá´¶¶.]º”Ïçs8œ[·n1¢««Kåü®®®ÀÀÀ¢¢"‚ Š‹‹ƒƒƒmmm}}}¿ùæS¾'s’™™¹lÙ2•¬ +++yÖNDvvvbb¢JÖNDJJ AþþþT9ú¯ýëÅ_Ô–µ#þƒ¹@â@QUU5nÜ8??¿’’‰Dòå—_îß¿_Ïß}ï½÷Æ÷ûï¿Ëd²Aƒ 4hÏž=*çìÞ½›Ëå ‚›7oNŸ>=!!áñãÇßÿ}ZZÚ©S§ŒüfÌSaaaXX˜îsþýï¿þúë:NˆÏÎÎViÌÎÎŽ×x>â?˜Kõè?ï ¬ZµJÿë( ‚ÈÌÌT>táÂ__ßöövEK[[›Ï‘#Gd2Ù¼yó6mÚ¤8ô¯ý+<<\ÿq°˜­­m[[›çtvvúûûÿú믊–Ë—/ûûûwvvj<ñÌ*îAÇ_°`¹ß}ë­·”|ùå—ýüü¾øâ EË_|áêêNDIIÉÔ©S‡þçþçÊ•+äú`Ùß›ÄQ¢ç¬¬¬–.]ª\tÏÎÎ^ºt©••æœñÌîÞÖÒqsªò€ükkk‰Dbgg§Ïuºººzõê%oäp8Ïž=³¶¶V>¡°°pöìÙwîÜqttljj’Çñ¨¨(‚ úôéóìÙ3å“­¬¬:;;I¾IyñÅóóó¬~HŠýýýþùg×ijjò÷÷¿víÇ««« ¬¬¬ìÛ·¯Æ“ÿÁŒ â–Hù['y Ç«©©Ñx²³³sCCƒrËÝ»w•T‰ÚALœ8ÑÇÇ'##ƒ ˆŒŒ 7mÚ4ù!.—ûàÁå jÈM˜0áðáÃÝžsâÄ ÝçôíÛwÖ¬YÛ¶m#bÛ¶m³fÍÒ–µˆÿ`V¸AL™2e×®] 4èìÙ³Ê-;vìèö‚IIIׯ_ÏÌÌ\µj•¢Æ?aÂõí€ ˆeË–effÞ¹sGÇ9qqq›6mzòä‰Jû'Ÿ|¢üãÒ¥K·mÛ&•J·mÛ¶téRDüsbÂõó´êÑÞ"‘ÈÃÃcÍš5wïÞmkk;{öì›o¾)?ôÏþÓßßÿ?ÿùOKKKeeåŠ+þþ÷¿J7'i¼`ggç Aƒx<ÞŸþô§çÏŸ+Ú+** °k×.±XÜÜÜ\XXˆ›“víÚÕ¿ÿÌÌÌ[·nµµµI$’ëׯ¯_¿^9Ø~ùå—C† ÉËË{úô©T*={öì_ÿúWõhùÖ[oEFFêîñÌw`­žþ¥z÷îÝ9s渹¹Y[[¿ôÒK¹¹¹ŠC[·n}ñÅ­­­½¼¼Ö¬Yóüùón·L&Û¾};A_}õ•JûåË—ÃÂÂúöíkgg7a„ÂÂBÞ%Û\¾|yîܹ´¶¶¶··:th|||yy¹ò9gΜyóÍ7ÝÜÜz÷îÍçó§M›¦K ‚Ð'Æ"þƒ¹ÀÍ©fkÜÌw3€ÄÀ q0HÜÌw3€ÄÀ q0HÜÌw3€ÄÀ q0 MÜ9Pn”ÉdIII...®®®+W®”Édt Œ±@O½é€fòÀ­’¸õÕW………eeeALŸ>ÝÏÏoÑ¢EôŒŒ±@O ­¸kôí·ß®]»ö…^xá…Ö®]»k×.ºG†BlГ ÷²²²ØØXggg•¹\UUUTT—Ëår¹QQQÕÕÕÝ^ðÚµk£G–¿~ùå—¯]»fäY¤c>b;€žL˜¸Ï›7ÏÝÝýÌ™3ꇚ››APPH$‰DAAA¡¡¡R©T÷›››œœä¯›ššŒ?h …tÌGlЇ‚Û€8Õ^²²².]º´wï^EËܹsƒƒƒãââtü¢““ÓíÛ·y<Auuuƒ ª¯¯7ñØ gzóÛôDÏ÷ÇÇÄÄ(·ÄÄÄÅoœšÿØðÆûÆÕûÆ5îŠkôÜœpåÊå–òòòaÆ™¢/Ùµ…BE\¢{,¡2æ°=‰{DDÄîÝ»•[vïÞ=uêTSôÅùw`¡P¨ˆKt…"TÆ|ëEA:»fÍ•^“““[ZZÛÚÚ233óóó·oßncccô®¯_{íµ×^{͸×è©S§N+~d_MÁ¤1_*•€É£z¤´´4::ZÇJws$€ÝLÛéy•ð&` |“±Œ3æÆòMÜgÏžÍåréIòå:+W®ŒŽŽöôô\·nT*¥{P`X^ìA5 ˜ 1Šù¼I¥Òììì 6444Ð="C999%%%iÜÌ–Ê„E`2Ä(r”¿¬XµjÕ¨Q£*++¯^½zäÈ‘ÆÆFf ¤ï拚gt°ü3ŠÀdˆQäh›7©TzôèÑÊÊJ±X¬²iã7Ì%­Gú`îPq' ON¦Á“S GîCQGZoÈ?Mô'Òwó…Ä$T³€É£ÈaÚ¼™®ÒôÀ!q'‰iÁ@b9æ5oŠ´žô*|¤ïæ‰;IæÜÀÒ F‘c¾ó¦œÄçççK$ýé;€¹@âN’î˜D"‘~t1ß”^ì¸I¾åúõë{Tƒ÷ôôüñÇÇŒcº ØUÆ4~(ž;wnÆŒŠçf{yyååå!õ¸“æy#‘¾óx¼ŠŠ >ŸoÒi¨¸“ÄápnÞ¼éååegg'o‘H$*OÌööö¾zõªÆ‡ð¡6¦Ã¦”Jì›·ž¦ïÉÉÉX6ÀLHÜIR|êêêêáááííÝÑÑQPP ~æ¡C‡"##UQ›“b_J ¶Î[OÓw¬z`&$î$)¯ƒÔÍÏÏoܸqžžž>>>\.wâĉ¨Í€qawñ5q—Cú`¤˜¸ÚÚÚ‡ÖÔÔ=zô‹/¾0äš[·n‰‰QÉÝõ¯Í#¿v' ¦c ó†ôÀ|!q'I}â$Éðáö\ÿþý¿üòˆ††ªªªÔÔÔTWWß¾}»¹¹YÛ•]\\|||¼½½}}}ù|~ffæ“'O”OÐX›ÇÚPf ¨)XμÉÓ÷´´´––}η··íµ×fÏžýÖ[o!ƒ  w’4N\iiitt´b Œ··wnnîØ±cUN;|øðÔ©SÕ¯éååõäÉ©TÚmïK–,yóÍ7ýýý½½½{÷îÝ£ûbQ˜°–“€;¶ƒÔ_mmm`` X,ÖÿW§N:|øp|ˆPÛA!û¸k¬Í{yyUTTp¹Üºº:‘HTUU%‰8púôið¶¶öõõíÛ·oYY™úQõûbQ˜°HÜɱÀy+--ŠŠºÿ>‰ßurrzã7ÄPw’ œ8kó“&Mêèè¸}ûvMMŽaŒ?~öìÙƒ:t¨»»»ž…y”äXÀP£°Ìy#÷À&ò$~È!NNNŠòx<¤õÆ‚Ä$Ã'ÎðÚùäý÷®z10F™Ì›2yú¾nݺ¦¦&ºÇòă…CâN’™wÝ…ù¯¿þzñâÅÚ~×ÙÙ¹¡¡A½]^ÇF1ÓE;Ì›:©TzàÀ}ûöë¹é;5œ?üðC< , w’Ì7¸ëȰ5–䜜Ǝ[VVVWW§ñ‚Ÿ|òÉĉ±„€QÌ7FÑ ó¦ƒü㣲²òêÕ«GŽaÂ*‚ ¸\nDDjð`!¸“ÄÖண$¯­Ïáp¬­­Ÿ={¦Ü¨XBƒJ<-Ø£LÍÒÀD3“xÔà•ð&#`ñ‡¢¶T[c=¾OŸ>]]]ê×9tè››*ñ´`qŒ2)Ì Š$^,«lõxãÆ êÓzÔàÅPq'É2ƒ»Æzü©S§V®\©~²““Sgggss³r£··÷ùóçOŸ><€IYfŒ2æÍèt¤õ$÷¸™X‰;IÜÕëñÚ瀞››b¹ bãÆÅÅÅò­!{ÔHÿe3yyyÓ§O§`Hæ 1ŠÌÈtËr°„ËIÜmllZZZ¬­­-ŽŽŽíííAüþûïqqqgÏž%bܸq[·nõóóëi`8y¼»yóææÍ›Åb±¶Óœþùg,˜Ð1ŠÌqo“E ÞÂ!qo'Ý…ÆvÜÌdÝVßy<^EE…òW(–Iå¦%eH@I@â&e܇Fáù¬ÈRwÝKeÈu¡xdݤRé?þ§íi</??uwjv`7$î@S<4 ©<ëYJâ®ûæT£t¦PZZ:eÊmA 7ªhƒEæ (fܼ:åT^ùVZ¤õfÊR÷ÌÌ̲²2•í GOº ÅkTÜMê‡~ˆŽŽÖv7ª( ân8$î@#y ~ýúõ”mC‰ ½Ù±”Ľ©©iäÈ‘‹-Z²d A999;wî¼r劃ƒé.¯‘¸›”î"q£*€wÃ!qÚ™b þÊ3«w7Œ*†qïÞ½„„ùÚ˜ÐÐÐÍ›7ûøøÒ‚;eJKK#""´í3ãååUQQ3Ê£ÈÁ¼C˜z þä©<ö±aV%îTBÅbµµµÚr÷M›6É·á°d¨¸‰;0½5xeHâi‡Ä$wêé¸QÕÙÙY$¡è €Eæ ˸ûÁI<-¸“„àN 7ª¢è  1ŠÌ˜Ó=Ÿ•¬Œ§ w’°T†‰ÄÇÇEw°TÆpHÜÁL1-•wppxõÕW<`ÀäñF„Ä$wºddd$&&jLZÿl Ó4'Ûïê[ÿ÷Dýhzzz||¼òšøÆ”åÒŸöÙEF;¯ÛJºS–Ç>wæ˜9sfnn®ÆCxX,Ä(eHÜÀÔŒU·µâ\ìÖÇŠ|Kü Cs]ÒÓÓóÇ3fŒüÇ·÷O~™ckÇÿå:§OrýZ‘û5€žÊÈÈP~–²ÖÖÖcÇŽQ<0PYYYll¬³³³Æÿµ«ªª¢¢¢¸\.—ËŠŠª®®¦~„*ìíí§OŸ¾bÅŠï¾ûîÁƒyyyëÖ­›={¶““S®3ÖÞÚΊs¹µC[ÖNÄýû÷ß~ûm‰äÿêñ½xZ¾$k•>+;GzüHÜ"žžžï¾û®¶£»wï¦r0`¸yóæ¹»»Ÿ9sFýPss³@  ‰D"‘((((44T*•R?Hm I⽬{ñ[ÛsݧUUU+~´@DgMé1÷&ý›=µ~ýúo¿ý¶µµUýбcÇŽ=Ný¨€œk×®i;´}ûö±cÇ*î]INN¾~ýú×_GôüVTS“'ñò×ú¬ŒwîeEDCgW·W¾uë–ⵕ‹+A] õ¤Ç‰Ä¨Ãår“““W¯^­~H&“EFFêÆuøðá+V(·ÄÄĬ_¿^ž¸#_&SNâåÔWÆ×wváÒ«û¥+ƒ R¼îzú„ +×~¤ÇÆòû{pÓH$OOÏææfGy<ÞíÛ·q—*XvÄ(õwÁçóËËËù|¾¢åÑ£G£Fzøða®cø™Æ%O⥧ON:yà1¯ÿÏ7¹zyyUTT(ñ¬°Ž«—]·çöùËxr½³<ö!¸3PFFFbb¢¶£›6múàƒ¨Ø£Ôß…MKK‹µµµ¢¥££ÃÑѱ½½]Û”ìvNØ1o`¾dímµ¯“µ·¹Ÿ¸ØÎuÖ¸S··wnnîØ±cå?v>¨yüúhŽ=ÿôo¤w•ayìCpg ‰Dâçç'‹5uvv‰D(ºƒ…`GŒ2ps çö±³ú¯„†ckg;ñ¾ï%ø `¦AŒ"óLf)kÜ]\\õu¹'Ož¨Ôà{ Uvæãr¹!!!±<‡b^”³m+Î¥ÖŽ½õ­Ÿ‹[ŠyÖ#‚dÏÚ[ó¨›Ò²+‡îÁŠšX±…šØÞÛt—&! àÊ•+“'OV´”——6ŒÆ!5–q¤#øŽ]±·¾us]˃ŽNy»}Ó݇'J\¤ÍÍ_fJÚ'Ùôñó*‘Q f w`¡P¨¨#˜.wgÖR™ÌÌ̲²2•í Go¬.€ZvæH2>–vÉbkO4©.‹Ú¿ÿŒ3‚hû÷ñ†—ÈZ¥ÜÄT‡Kè)€‘!F‘ƒy&³”¥2‹/.))IOO¯¯¯¯¯¯OKK;wîÜ¢E‹ ¹&¾Ne¸ÎQÓ–u2ç=MY;A»ví’¿°ðºóúÂʪ);½³ú•ƒ0",•rhHÜ•?±T>½úöí[TTt់/ž+;GåPŒw£@Q…š¢ ûww&ë¼_M„õà‚ Þxã g¶¶¶îÛ·oåÊ•ÑÑÑûÏ—Ñz§’šA*îF¢ 0 5E]ÛAöôC…™Õ#fŽ äº‚°rr&",,LÏ»°µ¶ëV®h;_noooò± 5[†ûèJÜ‘ò‚©Y9»ÑÕPO—Ë=zôùóç»ý­~½¬‚¨inÙ·eË–-[kccãããƒ$ØŠY`KÓËÓ‹ ˆŽ[¿ÉüöÛo‡Úío µíMDÍiª©©Yµj•üµ——מ={êêêD"òx`–?ÃBùkèÔÔT,…dY{[í«Ãdímî'.öêïAÄêÕ«ÓÒÒtüÊ@ë^¥ƒxÒ.YàºvMÿõöîÝûùóçò×Èã„Báš5k?²;›ÀLfºÅò؇àÎ| +ÞoÍÿÁ>jŽÓšÿÛš½ºº:<<üÚµkÿÝezpgºØå5´ÅßoÔçú*y|^^ÞðáÃ=ŠT˜1ŠÌ0=‰; nNEpg¾ÎûUu‘¯Êž?wÙ¼ÃV0EÑ.‹?ùä“‚‚‚;wî´ÿ±eûë}û|ãíÜ)“¯|rïY'‰îø|¾µµuMMüGy*?fÌÃß ˆQäàÛT`j¾Meùg>ÍBË®ɦ9vöÎës”sw9©TzôèÑÊÊJÙ/E3î–Ûqˆ5š¶=‘«wooï«W¯öîÝex b9˜7`2ÓÅ(ìãôsXkÿö|Y«´~ÙÂÆ”åï+µ··kÜØ%-µ DWí8Ä£—CúÌYÔ¯_?cõ^UUõÕW_ :4:::111::zÈ!¥¥¥AH¥Ò~ø!##ã‡~P<ºÀ@ØÇÈayÑU3Òòí—M›Ód‡cø’õà+'箆úŽ›×:®]!d2޵ußeÉóÿAüQ†‰DÏž=ËÉÉQ,}Q^Ñ®?kk뎎åooï;v,\¸°ªªJÞ‚E5` ˆQä`Þ€Éh¾9uÿþý¹¹¹Pn|ë­·fÍšõöÛo›bXÆ‚àn^:kDM9mù²Öÿ*osììm'Eô}/±—§·úo)’x77·yóæUWWË‘Ëãå\]]Ÿ>}ªÜâíí}þüùÓ§OcE  b9˜7`2š÷‘#GnÛ¶mìØ±ÊgÏž}ï½÷ÊÊÊL1,cAp7G²öögeç:ïWw56X99÷òô² ËéÓGÏ_בÇ8°£££¶¶Vù|.—+‘Hô¼¸››[]]üµ¢¯Ü#²yèÄ(r0oÀd4'î666MMM}þ;sjooçr¹Ší>˜ ÁT²ê«W¯FGG+Ryooï¥K—þïÿþ/¹‹cE 1ŠÌ0͉{ÿþýÏ;çëë«Üx÷îݱcǪ/™ÁÔ©¤òÏŸ?>|¸"ó–ãñxb±XŸ«©Ÿ‰5 ?Ä(r0oÀd4'î111þþþ)))Êüñï¿ÿ¾gÏS ËXÜA¥¥¥*ex•:zOi\Qcœ±» F‘ƒy&£9q¿wïÞ+¯¼²`Á‚  8°¦¦f×®]»ví:sæŒJžiðГú:u•l^9ï)ÔàA5é`7Äv`f=€I$¥¦¦?~\,óx¼)S¦¬Y³ÆÛ[ÃŒ‚ª B9› &½¢5xÐ1ŠÌ0Íwó…àFdÄ5^^^iii?FÞÂ!F‘ƒy&CâN‚;—)VÔ oÉ£ÈÁ¼“!q' Á(Ð튚ny{{_½z•Ëåšh„ÀXˆQä`Þ€ÉèIÜ•ïþÑÃ(‚;P\ ~áÂ…aaaX6ci£ÈÁ¼“¡âN‚;Ђt Ëf, b9˜7`2$î$!¸¨ÔàuãñxË–-ŸOå¨Àè£ÈÁ¼“ѳ« Ðe̘1<OÛ b±800°´´”ÊQ¸0ŸÏÏÏÏ÷òòÒv‚X,ŽŽŽ–H$TŽ è¢WâþüùóìììQ£F999qþ›©Ç`ÉÆŒsãÆ¤¤$m'TWWoß¾Ê!]ôZ‚óÞ{ï]¾|yãÆÃ‡§}:±XT]]­ÏȱX@"‘ >¼ªªJãQggg‘HDûÿ˜@b9˜7`2š×¸ïÝ»wÏž=¯¼ò ’ƒÔÔÔ%K–Ð= êp¹Üï¿ÿ^Ûz÷††Ý,^ôë×ï÷ßwuu¥`@º]¿~=22²¢¢ÂÎÎw°(µµµ~~~---ê‡Pt7_ˆQä`Þ€Éh®¸GGG:tÈX]–••ÅÆÆ:;;k\"_UUÅår¹\nTT”ÊÃh?þøc[[[c À\ðùü5kÖh<„¢;€%Ð+qÏÊÊ:uêÔ–-[jjj ÿbÞ¼yîîîgΜQ?ÔÜÜ,‚‚‚D"‘H$ •J¥ò£b±xÖ¬YÀL-^¼ØÉÉI㡵k×b{vÓ«’ßÕÕ•™™) Õ¿¦7$Wÿ!++ëÒ¥K{÷îU´Ì;7888..Ž ˆ#Fäää¼úê«WÏ.ÌZFFFbb¢ÆC›6múàƒ(1ŠÌ0ÍONMLL<{öìÆ¸ŽVý] ‚+VLžýàÁƒ¦èž4ý§C¦ ²v0_(º›#¡P¨1Ñ=.0'z%îÙÙÙÅÅÅÆÚUF—§OŸ*·pà€ž…¢yóæ¹»»Ÿ9sFýPss³@  ‰D"‘((((44T*•ê¾àåË—¶mÛFæ-X€Tòsss³²²nݺU__¯ÜÎäï+ñu*X&‰D2pàÀ¦¦&õC111ß~û-õCèŠQVVVÏŸ?WùfF&“:t(--­µµuÕªU³fÍÒójêï"++ëÒ¥K{÷îU´Ì;7888..N~¾¢GÅ §Nš?~^^^pp0‰˜ƒþ¥2[·n]½zujjêíÛ·eÿÍÃ2"l ˆËåΙ3G㡽{÷âUz1a;È®®.õõTç¯ýëùóç7mÚôÅ_rýÇÇÄÄ(·ÄÄÄY;€ÅÒ÷‚_|qÇŽ!!!¦q¡*ëðáÃS§NÕx·¨2;b”ú»àóùååå|>_ÑòèÑ£Q£F=|øPý×333³³³?>dÈÒ=0ýw‘Hôç?ÿÙ#S?~¼³³³ÆC¸EÞyçnWœK¥ÒwÞy‡Üõëëë]]]•[úõë÷ôéS'ðÁUUUC‡U|Ñí®2„Ò·©ÊðÍ*PIùTe¦ëQßÄÝÃÃCc¥˜‰Ëå®^½ZÛÑ£GR9`šýû÷=º°°PÛ £GÞ¿?ƒ‘©qtt$ñ[xÐPLùzÔ,#×7qÿÛßþ¶cÇÓŒnñâÅ}ûöÕxh÷î݉„âñsܺuk̘1o¼ñÆøñã¿øâ‹7n455555]¿~='''$$$22rìØ±·nÝ"w}•úú“'OTjðÐS=xrªX,NII¹sçNWW—IÇF¡ãU©TºuëVŠÇÌáååµcÇŽšššiÓ¦?~üõ×_çóù|>?,,¬°°pæÌ™÷ïßÿæ›o¼¼¼È]? àÊ•+Ê-åååÆ 3ÆØ,—¾kçu¬×aòB¸ ,œŽ[Tmmmkkkq‹*½Ø£ÔßEfffYY™Êv£GŽ7VŠ×©©©X!´ …kÖ¬Qüh¢ØÎ†Ï Øñ¡@šD"ñððhiiÑxtêÔ©Šú€ìˆQê©iäÈ‘‹-Z²d A999;wî¼r劃ƒƒ‰z`úw•sÄårW®\©íè¡C‡öìÙCåx€!~ù凳|ùrE‹Ê–¥¥¥Ý^Dyÿ•½úöí[TTt់/ž¡¡¡?ÿü³¶£‡Ö±è¢ï[·nݲeË–-[ÆŽëââbêa ª2ʾüòËØØØžþO1pàÀØØX¬Ÿ1.ºbÔ7"""NŸ>=`À•C•••!!!Ç1bõÓb;0ýKe^|ñÅ;v„„„˜b¦ƒà B,¿ÿþû?þøãóçÏIüz¿~ýæÌ™‚ Þ(hŒQyyyIIIË–- ÷òò’Éd"‘èðáÙ™™7nœ3g-£Òžœ Lì'§ÚØØ444˜Ýç4w¤Ré¦M›Ö¯_Oz VÀ½1ê÷ßÏÊÊ*,,¬®®&bàÀ`Ù²eC‡¥kHzBl&£¿âîëë{òäI???S ÂtÜtJ¥ÙÙÙëׯoll$ñë<oÙ²eƒFõ4Ä(r0oÀdô'îŸ|òI[[[ZZš)a:îÝ’§ï6lhhh w,‚' 1ŠÌ0ý‰{gggll,ŸÏ_°`¯¯¯¶çí™ÔÏ?ÿ¼qãÆ’’—ðððõë×÷ë×O÷¯ ¸èI*•=z´²²òÁƒ»wï&Wƒ'°„¦‡£ÈÁ¼“ÑŸ¸ëØö‘²è9yòä„„„©Tš’’RSS“ŸŸ¯ûWÜH(--ŽŽ–¯{&Khô‡Eæ ˜ŒþÄiššš ÐÜܬû4wräx‘HôìÙ³œœœššAõ½[ˆQä`W`fí*cDeee_ýõ¾}ûÕ{¯ªªJHH((( bÒ¤I›7oÖøl¿ƒnÞ¼ùßÿþ·î¾ð¡`8yúôéï¾ûîÉ“'=ú]ggç-[¶DEE¡ô®b9˜7`2F<9õüùóÓ¦MóõõµµµõõõŠŠºpá‰.çÍ›çîî~æÌõCÍÍÍ ((H$‰D¢   ÐÐPõíê._¾œ°mÛ6½@OÙÛÛOŸ>=;;»ªª*//oíÚµ<OÏßmhhˆ‰‰2dHii©I ÀzúþApèСwÞyçã?ž:uª»»ûãÇ:”’’²{÷î7ÞxƒdßjŽdee]ºtiïÞ½Š–¹sçÇÅÅ)ZN:5þü¼¼¼àà`]€áH,‚ÇÂw£ÈÁ¼“Ñ¿Æ=88xÙ²e³gÏVnÜ·oß–-[Î;G²oµw%V¬X1yòdEˉ'Ö¯_òäIù¹¹¹Ë—/?tèПÿügr]€Q^…ïÊ£ÈÁ¼“ÑŸ¸ÛÛÛ‹D"777åÆºº:__ß––’}«½+O²çÓ IDAT>Ÿ_^^Îçó-=5jÔÇ ‚ÈÌÌÌÎÎ>~üø!CHwF'OâoÞ¼¹yóf±XÜíùXø®€Eæ ˜ÌRw›––kkkEKGG‡££c{{;¡iKʦ¦&GGGÝ]hlÇ.¦Ð£%4UzWÙm@P¸“Ñsj`` |§eÇ7ö´’©Ñµ«HMMUü"²vS3fÌ7vïÞíììÜíÉÕÕÕµµµ ŒvB¡PRSSépþ€xL  qÉt½èûÁ¿þõ¯… ®]»622R~sêáÇ?úè£]»vEFF’컇KeŒÒP@ÿÒ;ÇËÏÏ·º»:Ä(r0oÀdôWÜß|óÍüüü‚‚‚W_}ÕÉÉéÕW_-((8räé¬]£€€€+W®(·”——6Ìk¢*@=yé]Ÿ½#Åbñ”)SöìÙ£¾ñ+[QS•ö¡³h¡þçHfffYY™Êv£GŽ7V@1=«ïµä]1ŠÌ0ýwj,^¼¸¤¤$==½¾¾¾¾¾>--íܹs‹-2䚨¸ÐKÏ…ï–³äw §›?äŸ+2™LÇLOÿ¤Ðx)ÅEîÝ»— ߸=44tóæÍ>>>=º¾J_¨Ê0DiiiDD„îý"-mÉ;b9˜7`2ú·ƒ4SÊ$` HÚÕÖÖêÎݽ¼¼***¸\.e£¢˜ÊÖìÂ&‚Ę ‰;IîL£Ï’÷M›6}ðÁ” ‰FˆQä`Þ€Éè_ã®m© ó×hb;£è³ä=55•ŋݱÆÈ1èæÔÎÎÎÞ½{k(&‚‡.0½½ý¼yó~þùgm;E¶´´–––R<0j(?Œ‰î±˜1e€Q˜õ&õšÿ³gÏŽ=š””tóæMÓŒÍðu*“ÕÖÖúùùµ´´h<ÊúÅîbY˜7`2:—Ê(þtàü7''§Õ«Wggg›bXF„ª cñù|åÛ4UTWWþùçTއX*䯸›36€åH$ÚîUµ²²*((Š2ˆQä`Þ€Éè¿9!LËåæååi[ìÞÕÕ5cÆ ‰DBñ¨¨»ÊhcÒñë3¦¢¢ÂÁÁAãQ±XÌÊ3=ÕƒŠ»BgggeeåªU«þþ÷¿?þܤãK {±ûêÕ«‹ŠŠ¨‘ÙÒÊÊÊÏÏ/--ÍÕÕõÓO?5ú˜Œ 7§˜…Å‹ëX03mÚ4Ö,˜ÁÍ©@ŽAkç+++'NœxïÞ=ãÇÈp€)**š4iRWW—Æ£))):ªòf 1ŠÌ0™éb”A×miiquumoo7‌ ÁÀ¼|úé§+W®ÔxˆÃá²l‡Ä(r0oÀdôï*£ÑÅ‹}}}4"66VÛ]ª2™ŒM fzŠdâÞÐÐpìØ±… ÆÅÅw@`ɸ\®¶Š;ATŽ€9zð&å ”0sæLÓ Ì8ðu*€Ù‘H$ÞÞÞ²lÁ b9ÊI©©©Ø{h' •oÄbâwæÃ‡"€9***š8q¢¶ÿyœœªªª¸\.Å£2Ä(r0oÀd ]ãn°$€Ù)))ÚŽ666nݺ•Êñ¶ƒrºùƒ@ŸÏ&—=P•0SºÌ888}º±±ñôéÓ`Ê”)GŽ1éøÀ’ÉÌXYiŽT]]]3fÌÀ#™ÀBè»v>88xÙ²e³gÏVnÜ·oß–-[Î;gš±n``O?ýTÇS™ÒÓÓue8Ä(r0oÀd¦‹Qú^×ÞÞ^$¹¹¹)7ÖÕÕùúú¶´´˜bdFàÀ‰ÄÏÏO,k?((())iìØ±&Ÿ°€Mt/vçp8ùùùáááʈQä`Þ€Éè¿9ÕL!¸°LQQѤI“ººº45»U£ÈÁ¼“áæT‚ @––¦íhWW×´iÓp£*°’¾‰{~~þ믿.-“É,XàèèøÆo455™llÄÆÆòx}‚8uêÔ„ L9¼ÿ"“É’’’\\\\]]W®\‰ŽŽËåê~œT*x0°ƒ¾‰{JJʽ{÷<==ËËË322ä_}õÕ{ï½g²±©úꫯ ËÊÊ.]ºtâĉo¾ù†²®€™–.]êää¤ã„®®®ˆˆäîÀætcþ¸qã>ú裰°0‚ Ž;–––öË/¿èþì<Àzºw˜‘ãp8)))~ø!ÓV÷!F‘ƒy&£W#*++‹uvvÖ¸#DUUUTT—Ëår¹QQQÕÕÕŠC×®]=z´üõË/¿|íÚ5ŠF ¦{‡9™L¶fÍuëÖI¥RÊÆ`D4$îóæÍsww?sæŒú¡ææf@$‰D"QPPPhh¨âS¶¹¹Yñ¸³³3žýraaaGޱ²ê& 566®ZµjРAØ)Ìß6ª••uéÒ¥½{÷*ZæÎG„““ÓíÛ·åOL¬««4hP}}}O»¶*..ž:uªD"éöLWQQÁ„'4!F‘ƒy&cÕR>£ÜsðàAù뀀€ .È__¼x1 €êñƒ?þáÇ«V­êöqÓb±ØÏÏËfÀ¼0«âÎçóËËË•Ë`=5jÔÇ ‚øòË/·oßþÃ?1}úô%K–,Z´¨§]ë;v,""B÷íªr®®®sçÎ §å¾UÄ(r0oÀd¦‹QÌJÜmllZZZ¬­­-ŽŽŽíííÄû¸oß¾ ˆwß}wݺuÝÖÕÜ,Sqqñ´iÓž>}ªçù^^^yyycÆŒ1é¨Ô!F‘ƒy&³”¥2ºq8œ 6Ô×××××úé§ÝfíŠßR' M>>FìÚ|ç X`" Á TTT4iÒ¤®®®ÿ×ÞEqæ ï1€Ü ‡ ¸ŠG¢–.l ¨Éë ÀËw7‚ˆ©2ºâÉ.ÑhTÐ’M¶D”`bÜx£ëµ»ñX·ñÆRQ jÿüóæžÿ(—Ë …ÞÝ™£ôÃy`Îxª ˜LLLŒ››[“»JKKÏœ9#r>€Ž‰ÂZàèè¸{÷îNšž0ïÝ»'r>xb3#ÎÃÚù·| ÀPš[0sàÀ°°0ýúdŽÒç €9c©Œþ¸*À bbb4ÿ*S÷îÝGŽÙª~:ÂsÜÆÐÎ/ZpU€]¾|ùøCNNŽòe=vïÞ w‡ÌQúá¼0gÝ€!X×À¬ˆóÈ0@û#ÆE‹&?œTq?~{òäIA‚‚‚Ö­[çíímÀÐ\•`¶˜£ôÃy`ÎÚÉã ŧþ;C||<ݘ\BBŠ+T/Û÷$l$îÌ…»ž˜Ü˜3æ(ýpÞ˜³v»Æ=pÿ³"ÎýKíü¢Ke˜–Ê´Wܘ3–Êè‰É€9cŽÒç €9c© СµÿÂuÌ Ïqè§ÛÈשÌs”~8oÌKe€Â€ö_¸³Æ€Ya;@?í|™ ë ˜3æ(ýpÞ˜3Ö¸…; î€P¸@áH@û/Üy$³Âã úiçOÔâ‘aÌs”~Ôç‰çº “KHHX±b…ꥑæövþ™Á‡"sÆ¥ÎsÆs܀ w@(Ü  p$€Â w@(Ü  p$€Â w@(Ü  p$€Â w@(Ü  p$@z…{aaa=d2™© s;´Hz…{||ü¬Y³LÀŒ1·'$$¶CI„6mtÞÑ¢3p‘ÉLX?wîÜ ËÊʲ±±Ñ%s™LbС0G)in7áé5í¿,ïP¡Më±·-ĸ➑‘#—Ë›üôÉ“'áááŽŽŽŽŽŽááá999ZºŠ‹‹[¹r¥µµµÑ’脹D&Fáåîî~áÂÍ]¾¾¾ …B¡PøúúUUU5ÙÏñãÇ 'Ožlä|-cn±5ˆH3\rrrdd¤zKdddJJŠêxõ$}||Î;×\W:FóÑ>æ(“ÌíñññÊíFêÿÕ±7UZÕ_j­Ü0Rè£ë>ð&CknÂkn7™ƒI.Î[7èÀ5 ;pãÍí¢® Ò\ñøÉ'ŸŒ;VÕrìØ±¿ÿýï'OžlòíZZLžõ£ÌYû˜£L2·«SEWnhþWü5Õ_6ŠØ(t£ô ºÅ躼¹cÌsàšÛZ†/òÀÅùacà†¸f£an¼¹ÝÂêîÖ­[ƒVo4hÐíÛ·›}Ö¬Y‚ |õÕW[·nÍÌÌ´³³-+@[0·€8ĸâ.û?¶Appp8uêÔ•+W¼½½½½½¯^½zòäIfv0Ìí 2ž˜ H€‰×¸Ð…; î€P¸:¢ÒÒÒèèhWW×.]º$$$ˆýÑ£GaaaÎÎÎÎÎÎaaa=-´ìÿsrr-´ ™™™ãƳ··ïÖ­Û–-[Ä Ýhàb†V*,,ìÑ£‡ø¡>eÊ”ÁƒggggggûøøL™2E´Ð j’““g̘!Zè{÷î………M:5''çÒ¥K'Nœ-´’úØE-B||¼ò©"KJJZ°`A^^ÞÝ»w{÷î!Zèää丸¸çϟ߸qÃÂÂ"::Z´ÐJâÿ[ÿãÿ8qâDFFƵk׎;¶yófÃöÏSe‘››ÛíÛ·ÝÝÝAÈÏÏŸ4iÒ¹sçD‹ngg———çàà ‹/<==+++E‹®T[[Û¿ÿsçÎuëÖMœˆ#FŒ˜={¶8áÑüƒbºsçNXXXVV– Ó¨¨¨ðððÿ‡M„òòrOOÏŠŠ ñC‹ùO?|øðeË–…„„‚ðÃ?$&&ž?Þ€ýKûŠûÙ³gÿô§?uéÒÅÉÉ) `ß¾}ZNOOŸ>}z¯^½¬¬¬¼¼¼Fýïÿ[´Tt@­švZ5¡ud111r¹¼É¯¿Ÿ~üxaaáäÉ“[ŒhŒèJ2™ÌÞÞ~íÚµëÖ­9´ ׯ_ݸqc‹¡]zçPQQ¡ºoD.————8³)‹‹‹«¯¯W½ÌÌÌìÓ§îoðà\.7B^Ð4-ÓN'´Hó#,99922R½%222%%Eu¼ú_QQQDD„³³³‡‡Gbbb×®]ÅŒ>zôèÅ‹—”””””,^¼xôèÑ¢…VÚµkWXX˜îA ÚÑѱ  @¹ŸŸïææ&ftu …¢U@Cûøøœ;w®¹®Œ]¥¬¬,>>þ½÷Þ9ôéÓ§{ôèqùòeÝã0z“ý/GGÇçÏŸ+· ^gJ»po¤²²ÒÊÊJ÷ã …«««ñò€FtŸvZ;¡u@š¨£F:zô¨zËÑ£G[ìêË/¿Œˆˆ3ºÍ‹/”Ûeee¶¶¶¢…V2dÈùóçujÐï¾ûn~~¾r;//¯í…»Þÿâ999¢…nãeS¼¬¬ÌÎÎNÌлvíòòòºzõªîA ½¹~Œ—ðaÃ>¬Ü>|øðˆ#ôÝt>†íδþõ¯ùúúêrdiié™3g–.]j쬠¡õÓŽîZ‡¥ùêîîž——§Þ’››ÛÜ¥ôÈÈÈœœœ’’’;wvïÞýçŸ3ú°aÖ.]ª¼â¾dÉ’V}º·1tCCáC‡†®{DC…Þ¼ysddd~~~~~þ|ðᇊýƒ>øé§Ÿjjjnß¾=zôè¹sçŠZ{WÆŽuûöíÚÚÚ'OžÌ™3çw¿ûh¡×¬YÓ£G;wîèрѵôc¼6lØàëëûèÑ£Gùúú~óÍ7z‡n:ÃvgBEEEýúõ;{ö¬öÃÔß3fÌëׯÅI@‡¥Ç´£ã„ÖÁi~ ZZZÖÖÖª·ÔÖÖ6÷ÅÅæÍ›½¼¼lmmÇŒ“‘‘!rô{÷î;99999…„„}ú|úé§ÕÕÕ¢…ÖÞ•±£+neeÕ½{÷™3g‰Zó«†òòrÑ¢k& {h½s¨¯¯ÿøãår¹\._´h‘úHƒh'ƒÌÏÏÿãÿ˜ Ë½Ò‚ œ9¨“öSe”ž>}:nܸåË—ëþ!çîî>yòäíÛ·óÐâÐqÚÑcBƒŠ³³sqq±zKQQ‘‹‹K»Þ1C›6:?´É£›C’/ÜŸ={’œœÔÚ÷¾ýöÛÆÈ š¤}ÚiË„A˜™™©ÞróæÍ´ûè3´i£3pñC›<º9ä í½   88øóÏ? Ôãí/^ìß¿¿Á³€æh™vÚ8¡A„÷ßÛ¶mê-Û¶m?~|»Þ1C›6:?´É£›E†]2/²¡C‡îܹSËê;vì¾}ûòóókkkùå—-[¶tëÖMõÈ0¸§õ9ªÅ h~„½xñ¢W¯^‰‰‰ÅÅÅÅÅÅ«V­êÓ§OEEE;‹Þ1C›6:?´É£›Oÿ/qÂI“¿Š¨ß¥®~ºO:5qâDWWW OOÏðððôôtSd  £hqÚQŸ£ZœÐ ¤ý"Tvvö„ &L˜ðøñãv½c†6mtÞÑnV94©3gŽƒƒC¯^½.\øòåˇPWW·jÕªž={vîܹoß¾ëׯW?ààÁƒvvvvvv‡Ò>|™LVUU5cÆ 77·E‹544TWWÏš5ËÕÕU.—Ï;÷õë×Ú³ÒÔ(´Rffæ¯~õ+=z!::ÚÕÕuÍš5‚ $%%¹»»k¯Ú Ett´§§gçμ{÷n=‚€´¸»»[[[§¥¥™: eîhÙìÙ³‡~ÿþ}ÕEÖ»wïNš4)66¶  `Ïž=‰‰‰?þø£rWttôëׯOœ8QVV–=þüÔÔÔF>|øpôèÑÁÁÁ>ÌÊÊêÛ·ïôéÓuÏgĈ¿ùÍorssOŸ>­P(V¬XÑâ[bbbª««Oœ8Q\\üÍ7߬]»VU•¦§§O›6mÞ¼y?ÎÎΞ3gNTTÔ•+W´ _ÕøðáÃôôô³gÏ®Y³&&&ÆßßÿþýûW¯^½zõêW_}¥ûˆ”æÏŸ¿nݺF©©©þóŸ-,,ZÛ›ÒÆ“’’:”œœ¼qãF-G>yòdøðá}úô¹xñâ‹/¾þúë]»vé$dÇŽzLÚ€ 4Z ‚œœÜ¨1***))Iõrß¾}¡¡¡Êm{{û²²²æºRnL™2eåʕ껖/_®ÚÛäes?«ÅÅŽ{÷Ö~Œ Ë–-So9tèÐ;Cܞ0a—_~©¾755uâĉª÷j_„””ÕË .ØÙÙ©·œ?~È!M&£™§êemmm·nݲ²²T» åry~~~s]ébýúõ2™lÆ Ú›6mÚ’%KšÛÛ\Î iuuuýúõ;yò¤Ï‰'LЮ¸£e¿ÿýïµ\¼xqüøñª—ÿó?ÿ“™™©Ü0`@\\ÜÓ§OµtxüøñÈÈHõ–©S§ê˜ÌË—/W®\Ù¿[[[™Læââ¢P(Z|×´iÓÔ_6ìÞ½{Ê파Œ°°0õ½ãÇ¿víšê¥æðA˜8q¢jû׿þuee¥z‹Ï£GtKK˘˜õ‹î›6m swwomWÈd²W¯^i?æèѣδ{{÷îuqq œ={v£U”€â3´@&“ÕÖÖZZZª7vîܹ¶¶V½¥S§Nuuu‚ dggÿå/9räHÏž=&L˜0~üxåêpÕÖÖÖª·WWWÛÚÚ*÷jÞøX__ÿÆo(,XðóÏ?öÙg}ûöµ³³{ùò¥MsoT ¡®®®S§N•[[[—••uîÜYµ«¦¦ÆÉÉI¹t¾ÉáËd²úúzõe÷M¶4÷?—–= ûõëw÷î]77·ºººÞ½{ïÝ»×ßß¿ÉNTÛZþ/V(þþþiiiS§N½r劷·wsGZZZ¾xñÂÆÆ¦µ9€D544 2ä³Ï> ­¬¬ôööÎÈÈèÑ£‡©óšÅw´¬QÙ*‚££ã³gÏÔ¿»QVí‚ ôêÕëûï¿/--ݵk×°aÃ5ׯ»¹¹={öL½Eý¥\./--Uß›­ÚÞ»wï¦M›†jgg'‚޶Uíê<<< Ô[ ºvíªz©9|¡©;h òhs77·‰'*£ïß¿¿k×®MVí‚ÆÂ•æÌœ9sÑ¢EÁÁÁ .œ1c†öпüòK[’i9pà€……Ehh¨ vvvQQQ_ýµ©“´¡p‡>Fµÿ~-(K2cÆŒ~øAóá$cÆŒùç?ÿ©Þ²}ûvÕvß¾}/]º¤¾wË–-ªíêêjõKõ[·nÕ#u¾¾¾To9pà€¯¯o»ÕÛüùó7lØðêÕ«ÔÔÔ¹sç¶¥«´´´²²² ‚Ròí·ß6wppp°–½Ðþ$&&~ú駪—³gÏÞ²eKMM SZ`ä5ô¼&H²²²<==¿ýöÛÂÂÂŠŠŠ'N¨nN}ï½÷¾ûœœW¯^åææ.Y²$$$¤QW÷ïß÷ððøâ‹/òòòòòòRRR"""T{wîÜùæ›ož={¶²²òÁƒŸ|ò‰òR±roDDDdddnnn~~þêÕ«•TKªÍµ«/\¸àìì¼cÇŽ‚‚‚‚‚‚;v¸¸¸\¾|Y—÷¶ª¥¹]šG-^¼ØÃ㦦¦¹NZ”››Ûµk×[·n©Z~úé'¼¼¼&W(^^^+V¬ÈÎÎ~ùòå¥K—&L˜ {Î -GŽ8p`}}½zcpppZZš©RZħ/ZÐ\‰výúõ›Q£F©nÆ?}útxx¸«««µµõ›o¾¹hÑ¢ÒÒRÍ®233ÇŽkkkëââòÑGUVVªïMMM}ë­·,--»wï¾bÅ åSÌ•»ŠŠŠ"##]\\ärù‡~X^^ÞÆÂ½¡¡áûï¿÷óó³±±±±±ñóóÛ¿¿îïÕ½¥¹]šG8p@„¥K—6׃.&Nœ¸jÕªF áááͽ%;;;22²K—.–––C† Ù½{·î9€´¼÷Þ{;vìhÔxèÐ!???“äè‚;̱µx£guuµ‹‹Ëƒºuë&zvMãæTLNÏ¿êÀHJKK×­[7uêTó©Ú€9 p̈L&³µµ7n÷‰€F(Ü3ÂúЪÀsÜ  p$à´´°Íuéx<IEND®B`‚gsl/doc/images/ntuple.png0000644000175000017500000002147113536674414013766 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœíÝoP\ÕÇñ»mÀ„Ш-:u€²Í6‰Ñˆ»‚ÿ2R&ºª%Ù7¥­X›Ú™ê8“™ºíèÔj éÄà´Qw2IM¦#G'£ ÄØ:1»S^ÄZ 2!*bB_ÐÁËBv!Ü»ÏÝs¾ŸWáÞÍîsva÷œ{î¹®ññq$Ö7¤ @G0`À €@ €@ €0`À €`q8pà¸âŠ+/^¼víÚººº¨¸¦1ïíééñûý~¿¿··×Úòp‹Øëõž8q¢®®®¯¯oûöíÁ`ðå—_ŽzÌøT“ÛGFFJJJ<Owwwww·Çã)--µ¶BœÀeíý€üñçž{n²_‰Dî¿ÿþ#GŽ|ýz® ¾buuu{{û®]»&·lܸqÍš5›7o¶°BœÀâðóÏ?oU¾þúëg?ŒÜÐÐÌ[@}}½•õà öNÂzûí· £6.[¶,%%eùòå]]]“Û;::Ün·ù‘EEE¶V€xhhhË–-Û¶m3o,//ß·oßððpkkëêÕ«½^ïáÇ'v:u*++Ëüàììì¡¡!û*@̸=úûûo»í¶¦¦¦Ø«©©¹ûî»'þ’’266fÞ;66–šš÷µ,X ý.”uÑQ›Å“°&;vìÞ{ï}á…JKKc?r`` //oddÄ0ŒœœœH$’““3¹·¿¿åÊ•}}}±Ÿ$ÆÄ.çp~‘Th Š´ZÂùE:¿BÃÎ"­‚>~üøúõë·nÝ7} Ã0·ª   ›÷F"‘üü|Ë+@œÅ<88xÏ=÷<ûì³%%%³yüÞ½{×­[7ñï²²²P(dÞ …ÊËË­­'°¸gíñxžxâ‰|pƽ¥¥¥UUU·ÞzkvvöÑ£G÷ìÙS]]½ÿ~ÇcÆðð°Ûí®¬¬¬ªª2 £¦¦¦¶¶6§¥¥ÅiƒÞƒV¡BKP¤%¨ÐÎ/ÒùI4ýñÇ?ôÐCQ‹M~öÙg{·lÙ²{÷îÂÂÂE‹wuuŸËÄçóIWøš ÷ânH3Šz[x—à"p7$”B €@ €0`À €@ €@ €0`À €@ €@ €0`À €@+Âçó¹¦òz½ÒE.È5>>.]Ã|¹\*´bžâ¾ ¼Kpìûò¤ €0`À €@ €@ €0f6}qiŸÏ']¨C…õY娰a-èéç} !Ö‚@)0þ/jÌ™»€­TTdhÔ°bšÀt A p²â”-$5Îêéynrþ—YþPç€P ¬/±@ ƒŠz&~e+=ßgš³ï«oO òz½.—+j‹T1ú4zöÌßj=ßgšcJ!€@ Àâ>pàÀ~ãÆkÖ¬Ù¼ysܽ±Ú åì\ñYÐó¿°œ/ifA?ÿüóæ‹M¯¿þzó0rCCC 0?>Ô××Ïf/*±wÖÛo¿]XX8ùcGG‡Ûí6? ¨¨¨³³s6{P‰c†CCC·ÜrËÎ;‹‹‹'¶¤¦¦ž>}:%%eò1gÏž½ì²ËΜ9wo zŽ|2 4CГî»ï¾—^zi2}måšI0LÀK gŒû^Ñ–`?vìØ½÷Þû /”––š·çääD"‘œœœÉ-ýýý+W®ìëë‹»7=;^ô€ ’©|üøñõë×oݺ5*} Ã(((‡Ãæ-‘H$??6{P‰Å<88xÏ=÷<ûì³%%%Ó÷–••…B!ó–P(T^^>›½¨ÄâžµÇãyâ‰'|ðÁ÷»ÝîÊÊʪª*Ã0jjjjkkÃápZZZܽ±Ú åÈ'CÐI3ýñÇ?ôÐCQg°?û쳉½éééMMM­­­¹¹¹¹¹¹mmm“ù{/*Q¡Ë¢gÇ‹0$@Òô€ÀlÀ €@ €†]|>_Ô|xŸÏ']8… ÓVõœ|ëüYÐL“ fA 0`À €@ €@ €0`À €@ €@ €0`À €@ €@ € ¤ @Òðz½.—Ëü£`1ì\ãããÒ5Ì—Ë¥B+æÊ­Ž*iz…¬b³ï‹‹!hÀ €@ÃA|>ŸËÄçóIWvQaRŒžS{ØêùOŠû `LÂ@)0Xˆ–a¥˜=αéy¦0[Í9`I‡sÀ(…@ €0`ÀHœ‰ …Yê ®N^ ´:îbÑ ´@²³ï‹ˆ•° &jå,ƒÅ³èD…†žý$Z­C8+a 0`À €@ €@ €0’†ÏçsMÅý”$/ÖÚÕsÅ`Z÷æH:¼ d±4Jáv„p®¨ûr³B*QaOÏqH=[…7€Ý‚@)0`À°>€:ôÈ#dffšç¯NrMcÞÛÓÓã÷û322222ü~oo¯ååàÖð¦M›–.]úÁ\èãSMn)))ñx<ÝÝÝÝÝݧ´´tttÔò gãU3NÝŽ1Ÿ»ººº½½}×®]“[6nܸf͚͛7_Ä )OÏVGáM`7-.Cjhhæ-@ ¾¾^ªì#ÀË–-KIIY¾|yEEEWW×äöŽŽ·Ûm~dQQQggg Àv‰àòòò}ûö ·¶¶®^½Úëõ>|xbשS§²²²ÌÎÎÎJp…$@¢¸¾¾¾¸¸xáÂ…W_}õc= Ÿ|òÉù?íôÉÕ.—+ Îÿ™:ƒ3F‰}¯˜èIXQòòòFFF ÃÈÉɉD"999“{ûûûW®\Ù××7ÿRž­ŽÂ›ÀnÊNÂ2·ª   ›÷F"‘üüü„€í„xïÞ½ëÖ­›øwYYY(2ï …Båååu`¯„A—––VUUÝzë­ÙÙÙGݳgOuuõþýû=aÃÃÃn·»²²²ªªÊ0ŒšššÚÚÚp8œ––6×Òž­ŽÂ›ÀnÉ4m>qu{Ë–-»wï.,,\´hQqqqWW×Áƒ'Ò×0Œôôô¦¦¦ÖÖÖÜÜÜÜÜܶ¶¶ÆÆÆ¸é @2R¡¡g7HÏVGáM`·dêR|>_Ôõ>ŸOº(˜™ =»Az¶:JÔ›0ý=á]0Oô€P  €0`À €@ €@ €0`À €@ €†Ê¼^¯ËÄçóIWÿç—®a¾\.Z1Wz¶:JÔ›÷=áM0Wö}oÐ@ €0`À €@ €†F¢Æbm,‚TXHÏåôlu”¹®„÷ +a 0H\¼‰IUæ‹€9QaŠžóhôlµåxÄÆ$,”B €†Ö¢–æ`] £Â 0=OãéÙj»ñ®ˆÂ9`”B €@ €00>Ÿ; °„ ]èy鈞­¶[Üwuúø µqJ!€@ €@ €0`À €@ €@ €0ð5¯×Ëí~$† ·2Õó†¬z¶:ñ¢Þgî èÆ¾¿ñv<) Œ‰>±ùGÁb¨D…ƒw=» z¶Úø µÙ÷7Î9`À€|>³ºÌH…Ñ3=ÇõlµÅþ ˜´$;† P  €0¬àC‡=òÈ#™™™æå &õôôøýþŒŒŒŒŒ ¿ßßÛÛ;û½€óEM{ž¾pGÔj—LŠ´e}oÚ´iéÒ¥|ðÁô]###%%%§»»»»»Ûãñ”––ŽŽŽÎf/àLQjƸIsssÔã›››Íhii(€ØxEÄô©ÛÕÕÕííí»víšÜ²qãÆ5kÖlÞ¼9îÞ9½ôlµzø‡Sä2¤†††@ `Þêëëg³•$4€;::Ün·yKQQQggçlö ’„A§¦¦ž>}:%%erËÙ³g/»ì²3gÎÄÝ;§Òž­VŸ#àpŠ AÛÇ5“`0(] 9ƒÁ£Ä¾WLh8'''‰äääLnéïï_¹re___ܽsz!èÙjõð9§H¸   ›·D"‘üüüÙì@% ಲ²P(dÞ …ÊËËg³•$tzxxØívWVVVUU†QSSS[[‡ÓÒÒâîÓ é@ÏV«‡Ïp¸d‚6Ÿ¸Ž:‰žžÞÔÔÔÚÚš›››››ÛÖÖÖØØ8™¯±÷zŠZÛ’Õ+e¨pô­gBÏV«'îç8ý|ô@"%SÄE €@ HŠº›!s¬}¨0›CÏ9)z¶ZQŸ,“°YLÂ@)0`À €@ €@ € ¤ 0ÅÄâ”æ‹`Ö´Óse>=[ ƒH,–¢@)0`À €@ €@ €H2KeMòù|Ò¸0dš››ÇM ÃpME$IA…5íô\™OÏVc6øÝ,ÄR”(…@ €0`@w>Ÿ«˜€ÄSár=/ºÐ³Õ˜¹þnD=ž_-ÀŒËP  €0 ¸¨9VL³B…ÙzÎѳ՘¸“ªb?€_-ÀŒIX(…@ €0`ÀX ]‹y½^—ËeþQ°¢Â÷z® g«a âf…8P CЀv£œ@…±&=GÌôl5€_-ÀŒ!h 2Ñ?Žq÷$n¯XB…C]=Øõl5DÌõöJ€Jè 0`À,Æ4i`6T˜»¨ç L=[ sÍ4i¨Ä¾ß^VÂ+gvPá°Tσk=[ g¢ …q0J!€@ €@ €.C0_\§\® Ðó =[$ů+’—! 0`¶›˜¥ÅÍ‘³D°kóÞžž¿ßŸ‘‘‘‘‘á÷û{{{\;477›´´´HWÈèO5¹}dd¤¤¤Äãñtwwwww{<žÒÒÒÑÑÑÄW€Ý4½sçεk×nÙ²eÉ’%K–,Ù²eËš5k^~ùeéºXŒiÀpT744ó–@ P__/U›0" "¼lÙ²”””åË—WTTtuuMnïèèp»ÝæGuvv&¼@l—è.//ß·oßððpkkëêÕ«½^ïáÇ'v:u*++Ëüàììì¡¡¡W@$:€ëëë‹‹‹.\xõÕW?öØcÁ`ðÉ'ŸœÿÓNŸ\ír¹‚ÁàüŸ ƒ`08c”Ø÷ŠÂ ´ äå匌†‘““‰Drrr&÷ö÷÷¯\¹²¯¯/ö“è¹Ì¬ž­†’øe†“)»´¹Uápؼ7‰äçç'¼(l'À{÷î]·nÝÄ¿ËÊÊB¡yo(*//—¨ {%tä§´´´ªªêÖ[oÍÎÎ>zôèž={ª««÷ïßïñx Ãv»Ý•••UUU†aÔÔÔÔÖÖ†Ãá´´´ØO«çø•ž­†’øe†“)2½eË–Ý»w.Z´¨¸¸¸««ëàÁƒékFzzzSSSkkknnnnnn[[[cccÜô ©pà©ç᳞­†’.â—Ùçó™—ïðz½ÍÍÍ—†aç—­ _âzF‘ž­†’.â—9ê¿ðçû(2 &À €‹º9Òôû#ù|¾¨x½^¡b˨pâDÏÓ?z¶š˜ë)^þ`û~»Øñ¤0}bó‚Å6Qá°Qσ_=[ ̈?؇YÐ(…@ €0`À0ƒ¨å·â.Îõ ..žÓó@=[ ÌÈŽ?‡Ø«qMEþ$UÅuÀ0±û¯³y@”¨«Yœ ó§Â!›žžz¶˜QÜþèüp5@ ô€P 7cô¢nÞ`pÿ$ÆLôùѳÕÀÅa!h”B€õ¸Pq©0f¢çÈž­.N⇠¹PXö}pL >fiÁT8"Óó¸RÏV6¡Œ aJ!€@ €@ €\ \( *\—¦çÕuz¶p,®V×âˆZ€šÕ§N…#2=+õl5àXNèÇ­0(…Û%A…ã#=òôl5àXsíÛÑE¦lzÀàhó¨'MŸD=×Ð!Vž ÇGzåéÙj@ÓÿÆ}>_KKËä^¯·¹¹9Æá[Âö½*|/ª Ft™NÏV°cÔ à:`”B €ÆLKÌuù?ƒV˜„0Œ™&mM,}5ùcÜyÔÓŸ!êJe˜©pÂ\ÉÓþqéÙjÉEo*&a_Ô‚ÕqÇÀçúx %ý±‰¡ÄÖEгՒKâ¿©æ¹þW"Wû¢ q·Wšk‡ÕÉóÂTèEéÙÔ³Õ’Kìoª‹ènοÃ:×{F±4pÎÙ0À¡|>_KK‹yËüóÒ9«U«0Œ©ç`¬ž­\æ9ø;$2  ‚¨9P–O€š>Ç*‰îº¨B/JϾ ž­Ôæ:ãIü*&[kà0 Aœ3êBžzê©„½– ½(=û‚z¶€Ú¢f]y½^ñ9Sö}Ùªð%®géÙjH0&a 0à ƒÒ%ÄA…– HKP¡%œ_¤ó+´•³&òôôôüêW¿zçw øóÎ;·mÛ¶bÅŠ¸ÿ+)¦#Y^¤óŸÐrίРH‹P¡%œ_¤ó+44™„522RRRâñxº»»»»»=Oiiéèè¨t]XÏAGÕÕÕííí»víšÜ²qãÆ5kÖlÞ¼9öÔóÊùOh9çWhP¤E¨ÐÎ/Òùšô€€yK ¨¯¯—ªû8(€;::Ün·yKQQQgg§T=ØÇAÝÿÔÔÔÓ§O§¤¤Ln9{öìe—]væÌ™ØÿQÏA ç?¡åœ_¡A‘¡BK8¿HçWhp3†¸Ì«{;–åE:ÿ -çü Š´ZÂùE:¿Bû8(€—,Y244”““3¹åäÉ“YYYqÿcÔ±ÉW_}µ`A¬v;wî›ßüfÔ3˜ Ο?ÿoLœŸ¾%JÜ={ö¬¹s?×ÿ·@rqÐwzAAA86o‰D"ùùùs}žØIfFTúÓÁ¦G]Üð‹û¢1Òw6ÿôÅ8èk½¬¬, ™·„B¡òòr©z°ƒN€»ÝîÊÊʪª*Ã0jjjjkkÃápZZštiXÌA=àôôô¦¦¦ÖÖÖÜÜÜÜÜܶ¶¶ÆÆFÒ $õ€ЇƒzÀèƒ@ €0`¨À===~¿?#####Ãï÷÷ööJWíСC<òHff¦c—?pàÀ}Zº®)òóóŸzê©ýë_Ž}à øýöÛúÈívïܹSº¨)V¯^ýâ‹/vuu9sæäÉ“û÷ïÿîw¿û›ßüFº®™?þ®»îÚ½{·?q–4ÝÏ~ö³ÊÊÊ#GŽœ9s¦­­mýúõÒÅQ]]ý£ýHºŠ)}ôÑ›nº©¥¥å‹/¾øüóÏ›››W­Zõè£J×õµwß}7++ëÕW_|å•Wn¾ùæÿþ÷¿ÒuÅúƶ6q’àO1¶­[·VTT˜·TTTüéO’ª'6Ç~÷ýú׿>þüäáp8//O°žÙ8räHff¦t3{á…6mÚ4îÈOÜ%Eijj*++“®bÎ;÷­o}ë£>’.dŠôôôO?ýÔ¼åÓO?MOO*g·Ýv[mm­yË+¯¼²cÇ¡rf0ýÅÚÄIú!膆†@ `Þêëë¥êIRÏ?ÿ¼y°åúë¯wàH~””””é7¶r‚ÇïܹsÇŽÒ…$«¿üå/>ú¨tsðæ›oæää¬^½Zº).\8}㥗^šøJ.¤µµµ¬¬Ì¼åûßÿþo¼!UÏlX›8IÀn·Û¼¥¨¨¨³³Sª5¼ýöÛ………ÒU\ÐçŸ>qÒz⾎òå—_ÚÚÚôôtéZ.hÙ²e)))Ë—/¯¨¨èêê’.'Ú?ÿùÏ‘‘¯×»hÑ¢ôôô;î¸ãƒ>.*–mÛ¶ýò—¿”®"ÚÏþó|ðý÷ß>pàÀøÃ_üâÒuÅ11ðëX'ÎEöÌ#%%ell̼ell,55UªžØ’â ?yòä·¿ýíH2ó¯îwÞùÕW_IWíá‡þÝï~7ù£?ñòòò|ùå—½½½ÕÕÕK—.ýøã¥‹šâ’K.ÉÎÎ6ŸÌÎÎ~ÿý÷¥ëšY$Y±bÅÙ³g¥ ‰vþüù 6˜ÿd6lØ`>Ó$®¸¸øµ×^3oyõÕWõí=ýï×ÚÄqÜ·Ã\ÀÖêïï¿í¶Ûššš¤ ‰e```÷îÝW^yåoû[éZ¦¨««+..68ÿ¯©©¹û«˜"%%eú©AŸÏ'TN?þñÿûßKW1ƒ?üá×\sÍo¼11]è7Þ¸æškþøÇ?J×õµÆÆÆË/¿üµ×^;qâĉ'jkk³³³.\(]××à8–.]ÚßßoÞÒ××·lÙ2©zbsø×ñÑ£GÝn÷»ï¾+]Ȭ455­X±BºŠ)òòòþóŸÿ˜·8üïïïOKK“®bŠeË–8q¼epppÑ¢ERõÄpâĉ¬¬¬“'OJ2ƒk¯½ö½÷Þ3oyï½÷®»î:¡rfÖÜÜ|“<£âIDATûí·§¥¥]zé¥ëÖ­{ýõ×Uáô¿_k'éÏ„Ãaó–H$’ŸŸ/UOò:~üøúõë·nÝZZZ*]ˬ¬ZµjppPºŠ)>ùä“k¯½6ê[Ç^k;aÜy7$-((.a¶þüç?ÿà?ÈÊÊ’.dÇŽ[µj•y˪U«Ž;&UÏŒ¼^oSSÓÈÈÈèèèÁƒ/^|óÍ7K‹µ‰“ô\VV …Ì[B¡Pyy¹T=Ijppðž{îyöÙgKJJ¤k™­üã7Þx£tSÄ8‚–.í‚öîÝ»nÝ:é*¦¸ï¾ûÞzë-ó–7ß|ÓisŒ Ã8{öìK/½äÀéW®¹æšöövó–>úhÅŠRõÌFMMÍO~òé*b±8q.®ãì_|ñÅu×]÷Ì3ÏL^——722"]×Ìû†¯\¹rÏž=ÒUÄr×]wÕÕÕ Œ=zôÕW_½êª«Þzë-éºâpÚ'^RR²oß¾¾¾¾±±±ÿûßÏ<óÌå—_ÞÞÞ.]×_~ùå-·ÜujÐóvïÞ}çwJWqAÛ·oÏÍÍýûßÿ~êÔ©‰sÀW_}õ‹/¾(]×÷Þ{ï¡C‡ÆÆÆ>ù䓟þô§?ü°tESLÿûµ6qœõípq>ýôÓ 6¤§§§§§oذ!ê$œ8ÿÐgÆ O:%]×ךššî¿ÿþììì ,_¾Üï÷øá‡ÒEÅç´º±±ñ¾ûî›x¯ºêªM›6uuuI5ƒãÇWTT,Y²ä’K.¹ùæ›9/ᦛnzóÍ7¥«ˆeïÞ½k×®ÍÌÌÌÌ̼馛^ýu銢ýõ¯ÍÏÏOMM½ñÆ·mÛvîÜ9éŠÆÇã}c[˜8® ½°OÒŸ À €@ €@ €0`À €@ à^… áëhGIEND®B`‚gsl/doc/images/interpp.png0000644000175000017500000000412013536674414014130 0ustar eddedd‰PNG  IHDR::3ßmtEXtTitlePNG plotË¥°H(tEXtCreation Time16 Apr 2017 14:17:46 +0000.Ñ‘_(tEXtSoftwareGNU libplot drawing library 4.4e¾†I•IDATxœíÝÏnÜDð =æ º¯€„B„øÈ#pê¹Grè¡íˆ#‡<@KüHH™Hr@Í¡‚v¨*ÕBªê ±]{=Œíýã?3ãYÏ·^}£6ÞõÚ¿Œgæû´™Ì:¦\ „B!„B!„B!„B!„B!„B!„B!„ЪD$r@ À \ÈsC6.Èg@—æ³ù»4ovq`\Ôçz³e•ür–›¤¶Y”›lè,d Ðüh>ò2ZÈ  „B!„ÐmƒÎa ìà ôŠÿк¬É VÛGGQɾýB¤¶OžG: KcÈdŽ­ñÍäyÄäÒÀ F˜ÊóÈ>!y1UÔè&yBÚ'$OH&P3&À Úb»‚šÏ¡f À iB2È® iB2€Z# ’&¤!¡VÚƒ¤ ÉjU ’&¤!¡Ö°Ùš;œJ!ifÓ@žË (+ vŒ‚At;Èg‹böPN>ÇÖ>­Mw̱…EÌ mcÿu˜ŸBì¡rµ!YÒÖAg@Ðü(0idÉ’vwЂA’4&˵û…d¹¶’|{0H–"„$} ÉRd7$‹0ˆöØè ÉI2ü6BDIzrÏPwØ´!é›!0¨;#ì’¾…•ì¼…ÉÏ ·’Ï_‘m¡Kc¨s²¨FL1YHÿ“Bí½ÃAT µ/x8ˆìjÓ.Hšiǵ“K¤ø•ÔÞ=döû½@íq:¤Z&ѽAª59loPë„Pþ¡S%Ôª©Ê?tÊ(T¬ˆƒˆêšœ¬ODq0ÈUB]ó®u(s^*œ-¡ˆ¯ĵJ+Ej&ë<7äʵ }¯ù/TP+Ej¡W0PpôvEÓwj¨•";¢ÿÝCtOÐo»‡Øž Ùî¡fŠÔCÙ¯ÆÐ ÓÖèK%ÔL‘ï©:5†R¢…˜j¦ÈŽÆVר uÔè+%ÔL‘ÕA™:ÖšÐ?L[£ú«:(­?5‡š)òýÞ¡fŠtÓ¢c‡Þõ†/j¤ÈÆ A—\YÐï½kÔȵçû‡¹ šö†) Ê:'¢”¥~æ zf[ŒJ, ::¨öZ8¨–À ߪ%¤Q@µ„Ôœ‹Ý TKH`µ€j§‚Ad P-!é ¹9¦P¦Ÿ \-D¡Í§» Eçdª¼¨…ªŸÌ Jº ‹{/ÔåÙæáóš9¶ÎURdhÕkaõáPåC§òRÉl¾~Žmý¡S;(/Z¨’ÙÀ Ö"Œ­ Ê¹vP%Б@ Ú¼JF­£63Y4´ŽÚÅX ¤ò`Ð:jCKh}òh êÍCì 1[ˆm¶0µ…*7¡ˆ-T¹¿Ž´ ¶—PÐ[n -£ößnH3ÇÆ7gç3¿±›´ÓuA´øú šk¨|Ý·¯ÑæÆa–P Q{hs—6Khsß8K(«ký¡Í½õl!Ê—-n 1(È_þ·†ÂÕA¶PÌ—‘k e$ÿq·¨ä-ïõh EÓ Ä¿ã@GhLP± ®|hwC÷bA4¾ûùëØ`  ¢±£Ÿ¥ä'øÊµ°¥15yêû“n½R¯Úš½€@VeGÐkþ:_Äsͯ£Ãü½}Æ'Ųžé‡b:é$ÿ¹`’æÓ´§üεzΟÅ4ÿ™åMäp~CÒìk1 l*Ø…Ïžo–zß‹Cïg'oÔÐ9?ËÿÄ#³‡â™Oç 1²BMųļǠã@|¯,I“ÚúRtR@i eêÓ “ãûb(¹Žû‘hœ™›Æ^³ìÑ‘ö<þN€bOøh¸˜®c}<«AA]•wT@—FЧ~zœÐÝ:nQ#Ç«B$ΡtZ@™#Þ (ÑBwKèôó4- $+ ?Ï¡,Ö@•^ój½½–½–“¼×bM¯= Ÿæ<çêáÕCÑFÞi*¼à,›Š6ŠgßxŸ‰Æñ~:9Ýò2¹RCσrdÇobQ±›GåÈ>žNä#û“Ãbd?¹ó£8ôþ•nd¿ËXK®SqýÑbîLD¦Ñä0µ§E¬ý|ù‹Øœ2]¬Y„B!„B!„B!„B!„B!„B!„‚‡þ^s–ZÈ™\+IEND®B`‚gsl/doc/images/robust.png0000644000175000017500000006065013536675317014002 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìÝyxSǹ8þ9s´Û’åE2›Ylv ^ÀØX6`;4m’›4·m’ö&é·M›õ›íÞüZL{oŸ¤ISnh’.ir“›_Ú $1Ø,o`¼°/6‹ÁÆ’WmÖvf¾È!É6X’%¿Ÿ§à3GçŒxR^ÏÌ;ï0”R€ÐÂáî0AÂ0€€0€ „` aÀ@@Â0€€0€ „APð‘#G{ì1¥RÉ0ŒWÓ¾ÿýï«Tª¸¸¸¼¼¼;v£À8”üÀ¨Õj­VëÛ´jÕ*½^¿cÇŽÎÎέ[·–––¾óÎ;Áè0ž1A=˜a¼ŸÿÜsÏýþ÷¿wŒ[ZZî¾ûîsçίÀ8êìÅb±ÄÇÇÛl¶àõ‡Âœ„µgÏžôôôðöLŸßÓÓ3oÞ¼ û@î¿'ÔØEÅC[¸¾OWW×}÷Ý÷öÛo{³Óé¤Áœ*ÃηÐÏ1CÑψè$Š~FD'B¾ÛyÆJxð•+W6lØð‡?ü¡¨¨(,Â+ ¸££cýúõ[¶l)..ýÛ€ñ ÔIX:nݺu/¿ü2D_Y¨ðºuëþã?þãŽ;îñ{€q%(kà¼KÖ®ñ6õõõ)•ÊÀÿkõÑIýSÐÉ1ýŒˆN¢égDt³ŸAYÐ׈øë‚ NC3›6m wFú9† “c("úDÒψèdPMô €à aÀÞ˜kÄbqrròªU«6oÞ|ùòåp÷ëfô¹pw?À<\e²-ËÉ“'÷»ßƬ¬¬O>ùd$Ÿ ^ÕÐÑ0s[>ï† ãSd$7…2 ‹÷]MMMkÖ¬Ù¿ÿ¢E‹nâãañþ·}-mÖ%©’‡ÖƇ»/© +Ì233Ÿ~úé×_Ý}åÊ•+¿üå/årù¬Y³žþy«ÕŠ® Ý“Øoª3—m-mV„PK›õT»-د0Z€Gꮻ¬tÿ¨Ñh–.]ÚÙÙYQQqñâÅÍ›7£keFÜg=¾9x8B·WÜ?îÔ82.å6Ws _o w?®/ó¥…} !dµZ,‹oS__ß²eËZ[[|œ÷æ )o4}UwÃdråÅY±Á{#Œ_N'i¬çÊ÷PÃÀ!eΟý ^ÎŽüÓ0~„÷¬²ÕjýÍo~3þ|™LÆ0LBBÂÅ‹ý}pT7ߺ~WÖ`òºXÖ`ê7A6`‚q88m…ãµRçŽRÃBhiCå¾sáîÖÀ#uáÂ…)S¦¸þüâ‹/VWWÿãÿÐëõ”ÒÁÁAŽóÞFuó­ÛYm°;½Y³;éÎjïý…vN[áøÃfn÷vj¼þ¯FdÖ±oÇIfLPcˆJ;vìX½zµëÏŸ|òI]]Ý´iÓ\?¶µµøà¨n¾EIŠø›m¶ØˆL ¿r"CŸ‘Õ\ñÐG¤Ô=áìÕÊ1¸A¶do\¡Tk˜s_‹Ã¼kðˆ477oٲń588(‘HÜ­ï½÷žûωÄn·‹D"÷•79™oÈ•ïù®JOÝ4òlè¬ùŸoK,õŒÙ;ÓŠ°Âif¥"ÏÈÆ"„ŒýÎÊfsØ3c`<äÇq}}}Z­ö¹çž[³fÍÛo¿½`ÁWÓúõëŸzê©«W¯êtº×^{íÂ… îO¥¥¥íÞ½Ûs’9ÀÍxíÐLƒä‹š‘­Ùí\U9³å··é÷yE_X2 ÿ0õç_Æß抾.ã!3² yÞåúƒH$Š‹‹›?~IIÉ#<2uêT÷=½½½O<ñÄž={!wÝu×o¼!—Ë]=üú믟x≶¶6Žã\WÜ Àי˶¿|Ùëúó£槈ýÞj·qµIUõõ"¡ètòÒOÉ2V¡0ߎ°NQð`ãGèkÛºuýN×j¥àYÞõZ›•«9Ài+ÅìÕâÀBñŠÂ s ßÞgw]ÉH“&*x¦²‹2c†ÍŒ ^‚5`ãHe³Ù}B:ßõZ›•«®ä´hл0ƒÕɳÈ—¯š”|¸ázÍÁÎÇKâžuå%2F–0€‰ ßĽòO½×^J‘€yá~•2– z­Œ¸V¾´J¾ÜŒ¥!FÎgoºŒ€D?• vÔ_ÒÄi÷û†^»@R%[¦•çXðõý&NŸ5ß²Sö©2vtûš‚*2F–0€¨×Ñãh<ç}VÀi›Þ¦ÞZ-t z5Q±”æ­< Ëq¥ž×ž·ê=&±Ýnît8ˆ*^u6ÌÜ_¾ì½aã¯ÿ g$‘:sV¾Ñ‘þVL[{ãFa‹'áÙ³uüÔ#ŠŒ‘%Œ€ š ˜¹×?½¡ÎÆ G˜û½T,hV³šÕï°†æÈs8Œatr¹<77÷ÝwßÕǃ×7˜€úŒ7T½ðª³á>ÂüLëÀÕ_Ù_-åö~å}íÉÞ¸‚Ï—=Å–¬?Ó£àÈó¨‚vÿ¢×ë«««Ÿyæ£Ñøä“O†±K0ŽLL^u%ÝáÖ>çLm¯2H¨-ßxXc¬—]ö^FRYºæ¿;Ò­X‚.¡ŒKÖ]Õ×Ënì…oBPFÀGŽyì±Ç”J%ïPòÒ¥K÷ÜsB¡P(÷ÜsO{{{0úà¦R©¾ûÝï~ðÁo¼ñFP_€—çx—#t{Õõ“;µ†ƒ‡{Ò/U>×ñÖš2rcô•ÊØ’;Øg~ýž5Ïz-Éùãòß¡øc-(#àxàÞ{ïÕjµééé^M&“©¸¸ø'?ùÉ;#zë­·JJJšššd2Y0zâ–‘‘áéwíÚõ_ÿõ_GE-^¼øW¿úÕ† Ü­‹åé§Ÿþì³ÏW®\ùÚk¯-Z´ÈÕÄ;u_4¿ýío·oß~åÊ¡P¸|ùò'Ÿ|rãÆ®ßEÜ¿‘ “ógiÛx9±!Ä¤ÎÆ³æ„»€ˆä5Þíèv¸Ã§˜Ú´×f¯ñŽ»Q‘XWÈ®Zƒ$ÒòF“gÄ5Y½Ó¬Æá£‘J>~ü¸¿¦¿ýíoyyy/½ô’ëÇ—^zéäÉ“ï¼óÎO<Œž¸9rij˜smmíüã­[·®Y³†Rúí·ß>ðÀß|óMNNŽë†Gy$77wóæÍ¡?þ¸¤¤¤ºº:55uØ=ôÐC3gÎÜ»wï”)SŒFcuuõÖ­[7nÜH)ù4m;Ǖ﹩/,Z FÏk¼»ýà€ÁBBbjÏ3Yià ½VF\›Õ½¤è_oŸŒê7qe ¦Àoqyìl¬1ê5à]»v½øâ‹žW|ðÁW^y%x¸»»ûàÁƒÏ<óÌ¿ÿû¿»/¾òÊ+¿ýíoðƒ¸~üÑ~ÔßßÿòË/öÙg®+ ,p/?ùä“¥¥¥|ðÁ°¯+++»råŠB¡@%$$lܸqãÆcü• BxÕ•ì6pb-1Ö˜I}B¯C(½˜¦iOÍw ÄŠk[†xKs „ÔJAú,‰ç•qµÅh$‚›ä;æKNNniiINNv_¹zõjVVVgg稞3ì{½®äææÖÖÖºœ1cFUUUJJŠûÊ¥K—V®\é:+a˜ÖÖVÏñnkkkaaaGG‡¿Î¸/æææfddlÚ´ÉsÀ=ÚoÁíÛ3¾FÀÅëÙ’õáî ÂxÕ•”R[¾±^c<$%ÞyË¡”ÕIV®Fbï˜ZÑäw}w$G)ܺH= É·ß"‘Èl6 …B÷‡Ãk³Ê#÷·/hÓ¦M¥¥¥ÞK)íëë+++{ì±ÇÞxãþð‡®$ÉÀÀ€X|ýˆ+›ÍgµZ]”H®ÿw088¨P(ï—"„°,ëºxþüùgžyæë¯¿ž9sf^^Þ÷¾÷½;ï¼Ó½<¿mXD×Ö^„”Ú4†CùÆz)õù§^*c5Elþ*¯Ðz¥¥¥®eG_=vìuÿ¶mÛ~õ«_:uÊ }GÀííí………#ÇÇÇŸ?^©Tz¶Îž=Ûó6›íÔ©Suuuï¼óÎâÅ‹ÿþ÷¿ßÄ·€ñÉ«ˆ/×àUè°No«NiÓ <›‹ÆIè ,z qÄÇÇ÷ööz^éééIHHö{ï½÷Þ˜˜˜mÛ¶¹~ÌÎÎÞµk—ç _|ñEvv¶ûÇ>úȳõ£>ºí¶Û\ž;wnMMg«o•±Xœ‘‘ñÓŸþtÏž=ü±ë¢D"±Ûícñm l\›z½ kø’ë:ÓÁÕ¯¥žÞç}¥2ö¶ ¢çJÙ¢ÛÇyô ªP'a-Z´¨¹¹yíÚµî+--- . ö{†)--}á…î½÷^ŒñsÏ=·qãF¥R¹fÍ„PYYÙ¯ýë={®/»ž€l‘ºÖëO„­»Bðú3BH.————:tÈ5ô<|øð¾}ûG_¡áo€ë⵩w¨¤ÅÜöáöÇZÿ$Ô~ë}a­7 ÈY‚ǵèëo€ëúÑkS/B(† ®4Ò˜³žÍEöe«b‹Š¢ î/EíiHFÂ}TQã¹AßnqV,B¨ÏÈ}Qs½"U ,0Ö¯0ŸR«)2güá ÓSva¼Ø»¸EÆÈFÀ$®EßÓÅ­v¯¢"óÂý*†Aø´;#U*1"»ezkUÊùÓ;ôZ°D+_./*Z™“`!9âÀÀØs/úž¼ÄS ÉuÈBÈ„8ïoÁ¦|‡¼fä‚$¬ðØ»wïçŸÎÛtÏ=÷ÜsÏ=Ã>!''çïÿû“O>9ª÷ÃYjOÇÊgcGÀ¸ãÞAäƒ9B·WÜ?îÔæx¬ÅZl$)NàÚbä&t No­ž^§åœÞ Y&,;(Ï­“gÛQÏ!ëCky0ï3=[Cpv/¢émætUþþ e„ Äy›BFÀH¥Ò¾¾>σÝ- ؽ'NÜ}÷Ý2™líÚµ‹-Z¹råŒ3†}/weweϰ·… ;u=;u}¸{ð`†¹¼ÑôUÑóʆ\¹¿è8t|Bõ~ßB’vQÌÅ´‚Ë©yNöú´mQfL(¢éhP«žèµœ¾9M|í VÌÆê¿1£› ‡p¤Z¸pá±cÇ*++8°sçΧžzjÙ²eï¿ÿþ¤I“ÂÝ5@dó*é9ÃÜoâʼãPYƒ){ŽÔ{-vÐÂi+¸êJžÎ1±lAql^á"‘xQ0¾À˜ „ô#º*2p!¾0ÉJÙ¤åX]ÀH“CÞ¹a@dúôé­­­‹ñü·×ÚÚš’’2’‡‚’’×Ö#«Õúä“Oþìg?Û±cÇ÷0‘žaÞYmðÊ„B×6õ^+zÙ¼B$¿[x©Ã@ôÕDWMíý¼70±©¬:'d!<^朽@¤¤¤ä³Ï>ã ÀŸ}öÙMl(’H$/¿üò°³ÐŒ|ö¸šòeä³ÃÝÀ xÏEpÍ0¿K¬þ&œd8”Ζôµ Ê·½jhÈ›ÏH'‡¼o£kÀœ9sF£ÑTTTðnCª®®ž3gNàî=ñÄüãYöúœÏñãÇ×®]{åÊ• öÅn~·ÅÌUï÷;ê-,as Çoèå9}Ñi©µ‹·‰™Îª58qé¨v Ö€Ãcîܹo¼ñFIIÉK/½t÷Ýw'''ëtºÏ?ÿü?ÿó?ßxã Wô lëÖ­UUU¿þõ¯‹ŠŠ†9|øðÓO?ýøã‡ ó€h5¢f/fWUÎÕD6Ÿ’“ã>ôRs;§×’îÃÈ÷ì„be:;i›ò®Ý¯©©éå—_®¬¬ìééIHHX½zõ /¼••åÙ=ßO¹:\]]ýÎ;ï”——_¹rE*•¦§§?úè£?ùÉOB×{@t±ØHE“ßÚR¾ùÉÔh ÷q‡´Èî½Æyèõ)£á…‘&cu›´±üû’Ç∌~@عKsP£ØËÒ"‡Ãë*‹¬¿¡7@ „bXŸÕ¬˜PЫLÃ4LD¾…®”¾B×Js<½V$?RÁz­¢˜ri®yqþ ÕAéñ­¶Œ†8«ò±**Bܵ`€ ã”o¡«¥¯\¾®èXݱ_üv#Ç9½šE\ÏâU[.Îs0t‘[:ž ¤¶^¢×}-uùÚ¬\€Õ8n!bÆW[Æ©Zƒi|Qs=µÊ÷Š5zv³ñhú„Þ¸x¼ò6”ûþçf¨ÕkëpxPBN]é?É_FC˪ò°ZÈCÞ¹ ƒ ã‘o¡+¥¯Ük½ Ÿ g&.ž]µ/[X¶¼ÑäoëpèQ‡èk‰¾šÚzyo`䩬º'dŽöøÞµ_ "—o¡«ÔIä)}5hæªÊ¹šÈáá<À*zÒ çß]ŒB4ªâ”ÁE‰áÑUù/£!Ɖ9¬º€‘M a¯Â0Œ;¾…®Þÿ¦ßóÊ`OûûåS.Öû¦Y °ŠýЇc2°Að‚+cº¹­ÃcËiáºë•ÑMaÕ81±ãee:Ø ÀøÂ;Z=Õ>T@#–X u+L "ÊzÈ—×Çf9]Ó¶×âkx ¤¦ œ®Šô6"âÝa„b8!‹M.`bg¯ã`_xG«!9gZe¨]nnôM³²J•欼2}© VÞØäŠ¯råAë¯ÄNzs]UÔr™·‘¨°j«Z1!îÚ8. `‚ð-tåà¨îJæÕšt]€x‡^¤ˆg ‹Øå×Zïx0\ Œ•‹±Zƒãæ… ŒÆ­‹žJXÇýùÏ~÷Ýw[[[)¥iii?üðÏ~ö3Ïã |AL¾E6è@?9°—;\ƒœ~2œ—æ!Áø˜Ë¶Œ†H‰UùXµ‚Å…¸k·"z*a=õÔS‡úãÿ˜••E)mll|öÙgO:µuëÖ÷Ư"t «,# µÈɳ¯w\…ÞáËhÄÍÇj V¦GS[ê‘¥B¡hii™9s¦ûÊ… –,Yb0üFÀ€èä9ä}ÿÛ¾–6ë’TɃ¹ÈoèUƳ+ÇO襤ÿ8ÑiIÿ‰€e4òqRÈû6f¢g,‘H|/J¥A<ÈÆ'Ï!¯«ÈFg˜Õ𽪅ñ-$ŸÀ®Z‹³sQÀ»ÐA4V­‰î2·.Ô5¿øÅ/î¿ÿþW_}533!äš‚†óq»®änSî­hÿn_Õ2s³À§<“È®Z‹³–ƒÐK‰á,ÑU‘¾£~ÊhHؤ¬.`¤“CÞ·Èê©]JéÝwß½cÇ÷•ï}ï{Ÿþ9n0 ˆ2g.Ûþòe/B(Ž3܇M¿ÒÀzWߎ3sÂz¹AN_GtUÔªãmgbRXµ',¾2Á @¡^õÕW9²}ûöÞÞÞÞÞÞíÛ·9räõ×_öƒ ŸÒÒÒàwÆFŸq(ĺ*MÆq†;û¾}¶óÏ©—ë½¢oŸPißp¿ð©ÿ/Í oô¥æKÎóÙÅ]úœ'úb!NÊ.ú¿ÂEÏaU~DGßÒÒRÞ@¼7†zd9kÖ¬÷Þ{oõêÕî+û÷ïÿ·û·¶¶¶Ÿ‚0 Ò ˜¹×?ZñÕV_vVîË17ùŽz{Ê …¦Q¶hQZLˆŠDò"vÒs„ÓUQó%ÞvF’ŒÕ6i9ÈBܵ‹ž}À"‘¨··76özE4“É”˜˜h³Ù| 0 Ò¹’œó¦Úî°×35¾¡×"‹¿0·¨cZ&ÅCCޢ̘ ‰äE­]D§åôu~Êh°8~ V`Åìˆ(£që¢' zúôé «V­r_©¯¯OII q7 ”Î\¶]<«»ÓP›sÙï¨×¹héë’2ÃÒ?„u’ÞfN§¥ÆVÞ=EŒ(«5X•Ç¡ï]T C!އzhëÖ­………”ÒÊÊÊÇüÅ_ q7 dœ}½ùl_£oè”ÅŸŸ[Ô1-SYüsxQ«Žè«9}ršùÚ·'ฅPFcl…aj÷“O>yýõ×O:…š7oÞ3ÏÍ!„X1NÌaÕŒlJÈ»1` 82ú ˆžE3ÜyC²ëÐ@îp­ïñ T™¸[œ·úÁ¢xeÈ×z‰ô溪¨å2o;#›Âª58qyD×® X€Ðq“à®EåuX/ºñ¼^¯‚®Îÿ¿~vÓ‡¡>¤k½tð*ÑUq݇ü”Ñà„LV]ÀÈSCÖ%à`@Èc€ë:!ÔÒf=Õn›Ÿ"F7†dÏÐëõWII«ó¦&Kšõz=$ˆ(GúZˆ®šÎø)£‡UùX]ÀåÁí 1Àp}€«ˆÁÛ« îë;µ†9÷%µvØ]!ùâY¾û›¸ÓõþB¯+ÃYÔ8¨Ù½Ââ n¤¶^¢×}-uyšŒãâä·`‚TŽŒ €àú7E%Ôõ_®º~çþ&Óá3Ö8ΰÊP›cntø=>c†f§íNÚm¸á!•Íæâ¬X4–(1œ!ºjÒ×Ì»§ˆÊqR.V0â„1}/3‘‘ÜIX€àqÍ‹°Œ“»á_›$2P0P³ÌÜÌúƹøÄ3VyŸ€²ÙIíI wã½"óÂý*eì$BS‡‘t×]5µõðÞÀÈg³É8>1á>E8*@Œ%÷Нëh^÷uÏè›àì+2TgY޳>›‹¸¸„¯¥ù«X©yŸðþ·}œO¤¶;éÎjí/H©±•ÓU“Þ&D½'ÀrUŽÌÁêF:éÞB0`ÂñLi®l6{Î9#„Ò¦ˆÄfÝ?ùj3ã3êuM8·ª¡! IDAT÷Yß g‹$Å üÍ6ßdå nô4rºÔÒÁÛÎĤ°* N\ {Š" `À„ã^ñýn¾¢¬ÁäÙ¤rô,?¦]2xïÐ;~NQÇ´L§™öóN“v‘‰ñ†Ü±J3¦ÄpŽèµ¤·…È‹…8!‹U2±3Æè ¤ &Ï]FF ±;‡æœÕŽîbƒv‰å$㳇IR³«ÖÆe.ËÄx1¡¯mëv7%Ù³’ž#†¼V­`U+ f,ß B 0`ñZñíêweÆÊM]³NïOî:ÊøäÚ0ªd¶èv¼8á¡©c¯)ë±Íp¦ævNWEz±ó43,Ž_‚Õ¬˜{Š¢`Àâ>妮¬ÆzÕ•£È7ô&Oa‹nÇ陈¹êúMœ×”5B¨¬Á”=GzKÎÔIúŽ]51œæmw yqR.”ш&€ÑÏ•óì>“úâíbË)ž çISØâuxa†gèuÙYmpOY»ÝJ†3µêˆNËu×!§…§yhÈ[€³aÈ} ¢œ;çù‹ƒÝI…ÞÉSÙâõxÁbßЋÆ6ÙÒ”tUù¯ÕùXµ‚*FúLi"£ÀâÜ´÷¿íki³.š)NôÎ:½?¹“g­—Nž&,Yç§ó†Þ1DíD_MôÕÔ>À×Îà¸ùX]€•‹’£‚Áp \7òÃz]9ÏÉNý’í’ÁSï~f¥3¦¡œ47øÖp6É'µÍ[Ý59}øΠºÉCü¡NÒÛÄ骩ño;#NÄj «ÊC‚±=D¶ÈX[…5`@¿‰{åŸz¯:"³TÙ?ótEXÒ¬¨UGtÕ\wršyšŒãbuV.€2‘ Ö€—k†Ù· •Úѽº·&ã 쳱çªPÝ:guÑ4A ½”#}ÍD§%†süe4„r¬ZUùŒ8aìߢE0!äÍ7ßüóŸÿÜÚÚ:{öì_ýêWßÿþ÷Cß @Dpm:ú?<«PÅýŸ`WMý˜®8)™MÌäËvÞ,­›Fí}D§%úZê0ðµ3Œ9ÂÍE©hâÛ „B¨(3fØ¿Ôr™ÓU‘žÄÙxš±'d²ê&vVàç€UZZºyófÞ¦ ÊP`‘Hô׿þõÇ?þ±ûÊ»ï¾û¿ÿû¿>kÀD«3÷ú§7œ¬àªfÅmò ½¢äss‹o»?o,7éiàtZj¾ÈÛÎHTX¥aU¹H3f/‘#x(ÔmòäÉGMJº~Þ–^¯Ÿ9s¦Ùì÷WW€èåy²B€B’î gÄ0#ÎŽµêˆNËu×!§…§™ÁX™ŽÕ8n”јȢ' kÑ¢E!~#`ÜrŸ¬Ðu¦½ïòç1m-þÎëMœŸž8V£^JH_ ÑUÃYþ2"åP QÜØ¼>¡ÀwÝu×îÝ»|ðA÷•/¿ü2'''ÄÝ„+ÉÙ•ášB’Ô>@ôÕD_Mí|í Ž›ÕX¹1cW)?B€~øá’’„ÐwÜúòË/Ÿ{î¹O>ù$ÄÝ„Ýჭ·+Kä ½}òɪïn»ÐKÉÀi¢«"ýÇü”шaU+°:Ÿ'ñ´aX[íìì|î¹çvïÞm±X²³³ûÛߺBr° @Ôè3rJÓUkÙ×øt oš•k_ï#Ç Š¤ÓBz›¸®J:ØÉÛe4À°¢' ëæ@ :ÛÚ/|üÅ<ó™Õ¬\%5ÔJÁ³7_E’Ã9¢Ó’¾fD9žvVŒsXµ†‘M½©çƒ pdôàí¼Â•ï!'ú†^CÜ”¶yŇQjk§ÃóúÍT‘tZ¸î:¢ÓR«Ž·‘MaÕœ˜ƒXÉèž &ªèÉ‚D7ߪB/3u:[¼.iÞ"™lÿ§Þ«uTU$©ù"×UEz âàif8!“UkyÚ(¾ Á0 ¼U«Ü\Gº«jЮN®ükrœg_¯^šœüÝõ‚ô,Wš•ïY¿h„U$‰ô4pº*jnçmg$j¬Ö°IË¡Œo FÊ+¾úrøEáÁÅ£Þvñ”}ò‚ÓÒ´ Ny1à „,6âyÖ¯‹ð–Ý ƒ]DWÅu×#nçc ‹2°Jƒ³¡ŒŸ"cmÖ€<«Vù¶ºŽLvèK´‹­§|Co§H]¡È?&™ïJ³ ˜îWúœ"Ê]+£qŽ¿Œ†8«58)ÊG÷døÀ0 ÌÜU«ZÚ¬§Úm^{„8B«ËN?Ð}`õ,ãó¯UbêbÍÉ ë¯£=§ˆÚHÏ!ÒuÚûøÚ¬˜‹Õù8>Êh€ˆ0<÷Ѽ.;µ†9{„hç•®»ÿõÊ1ßÐK’§ÐµGl³§1Ì4¾'û›aö@ÉÀ)¢«"ýÇyËh0B9Våa•†'ŒêK^€ël6ë<ŽÚÕõ;+›ÍÅY±ôbWñ 9{Ò·‚Ôeñ”˜uw¼u2ù©ÙIüçmâ4qúZ¢ÓR[o;#OcÕ8!17õ|Â*2ÖVa €0ê7q¯üSï•¥<‡»òcQ-¾pÆ÷þvñ”½Š‚3’´¸<`&þÖŒ ¦6®«Šô6!êäif%lRV0ÒÉ£z,7Ö€aãµGh¦íòm†iVžÓsûã§·Í+îQÏ™†Ìèl:çw͘g#=‡8]µtð¶3²i¬º'.Eì-W© Ü"cd #`ÂÅb#MCÇuÇ÷\H=Sž oõ½™™Æ¯Çis]?r„¾¶­Û=k=l]IjéàtU¤çâl<ÍXˆ²Xu;ó–¾ £¥(#£ŸDwÙ z±Û·›´òL8w)S§ýËFfÖlϋ妯ꌞWøëJék溪¨©·ŒD…UV• e4@¸À4`ÔW­–«ìÆÿ]n”Õ|Íz[%3ö*V^O{T0ßãz¿‰+k0yÝìUW’ZuD_Ëék‘ÓûN„ì)`¢Ó°U«†¥Ý}ìþK{%g.únýaRç~Ìä7Ú‡r ¼v%ª+y[,émâôÕÔÈ3b„ ¬ÊÇê|F¤¼¹n)"cj¦ ­ÀU«£ÛŒ»¿”\>çÛ„Óæ±%ë+zÕþf˜=׌=ÉPÏTtx† áxZ‘ëhÞäU8q)ì)ã LAF!pÕªÜk½¾gõá´¹lÉÌŒÔ~WVæ÷ä"™oÈõ¨I é?FtUdà4BùÎ+ˆa“–cµ†‘¨Güýˆ€ˆ6«Vyò\$¦—Îs•eäÔ1ßÛ.ˆ§ón_º6cè#;¹ˆ: ¤»žèª¨­—·ŸLL «Òà¤e‹Fóýˆ€ˆ6þªVyÝæ^$Vö^ô—áìN³]bÒLœ2–ÁÉE 1œ!:-éká­‰1¬*«òaÈ &¸ÈX[…5`Fˆ·jï¹CïÛ7pªõNgÝ”žÓ¾Ï¹ žVWØ&žé¾2ür²ÓÂu×–Zu¼íLì,V­Á Y Gü…3XŒÈç‡/>½¼îKÞjV½ª´¶y%} 3f"4óÆ&¿GóšÛ9½–tFÄÎÓ',Ä ™ì¤"FÆ{`¢ÇHN¶§—Î;÷—M:Í¿ÖÛ6¿dÝ}K'ð}ÄNz8]5·ó¶3ÒÉX]À&å Ö7© €‰.2¦va €[G/¶qûöVž g}BêçÍñ4„У†Íš¾VF£9-<Í ‹ã—`u>VÌEÈoùI"”¢ŒŒ~0>Ñ ­\ùžiV%ÓÜÿ T·™r¤¯…誈á,ï‹qVkpR#”óÞ@Äý`¼!çÏ’}_“ó<ñÒáìÛä[·™ÚûˆNKôµÔað½!+aµ+ÂDÀ‘ÑOÆÒz†+ßC/ðT|t§Y!„lvR{ÒÂݸ]È#kš’SDWEúóî)b„r¬ÊÃ* #NÎ÷ Ì¢3_½zµ°°ðܹsÃö0#GZÏpûvÓ‹<ç µJfÈnß0cùõ£\+}ïÌIsÞ›~šè´ÔÖÃûFžÆª qBTŽÑ- 0¥tݺu?þñðƒ@`L½g%³ÊÄÓ<—xùê6ÓxÔ6 V3Ç1OÝH„X ›”ƒÕŒtr0¾ãMà×_½©©éƒ>Éwƒ @à³Ië[Ùn¶'ôöMšû1É»(žê¾Â4¯ÓÌé눾Úo ÙTV]ˆ—"v¤•¥ˆÑVˆ£©©éoû[}}}XÞ@Ä p¶ {­×78ãy -+nßR)õ*Íá}4oà2ŒÇ/Æê|¬˜7F߀PXðàààƒ>øÞ{ïÉå°Q€Ù¡5˜É57T³ f…ç-d‹×3Óflÿ¶Ïîô^â*ŒU"#=‡9]µ\á})#Qcµ†MZŽ1cø].aÀÏ<ó̽÷Þ›——úW‰|Ï z-3æÇݱ™6ù/Œ%CÝS‘ÖÖ|˜2„O¨ðÎ;?þ§?ýi´dž6mÚTZZ:Ý`¼ò:[ðÈ·Í©¤ñ…ÞÓÒ´}Š›bú³S’\“Ë>Gó:Io3§«¢ÆV„rz?'aµ†UåÁL@¥¥¥›7oåCÜ4{öì}ûö͘1ãz ÿÊM_ÕB©¶ · TͲñT]v…ÞvÑט·ö5­ä©¸¤Æf³®ß'2,OlÎIj’ M”§v$ƒs°Z#Š_2—açùë‚$2 \@!AÞÿ¶¯¥Íº$UòÐÚø¡—"Æ’ºXyÇzfòT×GÎÙleÓ"åiÌð—ÑÀ‰Ylò*F:™§Pˆ€ÈàÞ¤{´uðÒÁó“[öò†Þ£²ùåq3ùÙä¤Ö˶ÖK}+“›sc›ûxËÈSYuNÈD ü€(#KƒˆÀúÚ¶n}Ÿcõ\‰áà{—× ”aŽJç—Çiº*וûr lÍü˜£"ìð} ‰®¢ŒË4wYæl™Ø{áÑ\ z$ ƒ0âϨâS~Äx¾òH‰¡Š'ô"†,Èü³qÙe& !$ÆöÌ„ãË“ŽL‘éxÅȦ²j NÌA¬øû¸0 @xðdTñ¢ÔØ|4õË/ lW½[sZ:»LQ(ŽM¹l²'Kõ¹IY Ç$,O 'a,˜Ÿ]"W¥á·ŒC€d‡Ö`$_Ô®{àÅURcßqGû¯–k¡·C”,À\6mº7»9]à}L¯-¾®;³¡'Ãì”.a$­Ûïw à—×±óSnœ ¦”kâ*¾¦]ÞÕ˜)Ãè&§W%îSÆ‹ú×%í_–Ô#0û¾‚"ÜæµÓÜ^ÑlÁ&÷Z ·Ø,úÝ ÀÏ}ìËN­aÎ}I,fBˆRr¼‰+ç ½ˆaðâ,¶èv¹LeÝ]óãÙßΕ·1 Ï#T`U>V¯˜*ŠŸÄï§"#¹ ’°@ðøË±*o4}UwCŒ ¹òâÌ¿¡c¼8›-º)eD_k¸t0÷ó½ÁŠÙX]€ã— fD¹]€0‚$,‚Â_ŽU¿‰+k0y^aí8pÈZYƒõÞiV„ÁdQ¶tÍíTÔÏuK.6!âˆñ™?v"ñU´¤æåÌJƒée`0¡ù˱ÚYm°;‡~çe]l9UlÐ&;ôÞŸÇø¼jñ×¢%ùS;3¯ü…ÚºyßÂĤ°êQâÒT,J ·D"À`âò—ce±‘¤8AqV,C©ºóXêéŠX£÷¾^„1^’­›—f¾ÚüÓ¸X†£¾»Š°'.eÕLÌô`@ĉŒµUXcÎUµJ×ïtý¨V žuçX¡kÎå_SÏZ/—ž!\¦¢æ&jõSFC’ŒÕùlR.È‚õ!kÀŒ wÊUe³Ù}Bº~ge³¹8+6pèÅ9ó©b:Fzx*G$$f²êŒ|v0¿ @QÎ3ÉÙrÅ0È+Ç !´·Á˜ã<-©þ–'ô 1ÎA§ØˆíkA¬O•ΚT§Ïqɺ«úzUÎÇ‹̉fžB’R„f2Lš€²Š ^Ϥ”9kH­íÎ>=JÞ0Y¾!+6ø_…"cd #`0Bî_¯$çX 6Y‰ëÏ ¥ó­­wsÚØ¾ŽëŸdR!4 ÑI Ã7ä¥l¬¶sqµ.³Ï®t_ ˜îWÁ¢/Q FÀ ÏsÅ×+ÉÙ}]¡÷6ÃÎë!4¡™Å „oôe䩬ºà£#3/;½šìN ‹¾€›ê|àÀ7ß|³¼¼Ün·/X°àÅ_üÞ÷¾â>€håαún¾Â·$O5«„f"4!Þ[V‚sXµ†‘M±ØH¼Â\œÅÿ^8¹pB€W­ZUTT´cÇŽ¬¬¬ãÇ?úè£ÝÝÝ<òHˆ»¢çНÑB< I¦ž*ð½,B)ÍDÈ;}jHç ú„yÙÚ5«Y¡ÄuE&ÆråAþ€‰%Ôk«Ï=÷Üïÿ{†ª7ÔÒÒr÷ÝwŸ;w.ð§` æµâ+“àÜù2Œ¨ºóXꙊXõ gB3JáÿÍÓIØ£} êz²/š¦"×ÙG`À„¼æÀf±Xâããm6ß*º7€ ó::AôÁ©œß?”áÌ"”ŒÐL„’bx>N…I{Û×ë—˜×+GB‚EqÖž={ÒÓÓÃÛé<¼¾ÖÛ®§!ùµ!¯ï“ ÆÊEX]ða}rs‡÷o`ªpàÞÞÞ—^zéoûÛHnvÏZ{Ú´iSiiéw D×ÑîjVÉN=ÂM 4äe„rœ”‹ÕŒ8Áb#‰ sqoˆ†+&ŠÒÒÒÍ›7‡òa›Úíêêºï¾ûJKK‹ŠŠ†½¦ ?Ùßhº^ÍJ†ÐL„¦#$æ½ÁŠ9X­ÁñKsË€áEÛð•+W6lØð‡?ü¡¤¤d$÷CüÜ'é;QB3šÌ?äENÈd“W1ÒÉ!î# ¢EUîèèX·nÝ–-[Š‹‹GøÀÀ¥äX#Wþ íïD3šŸƒw±bVipB y7!z°N§»í¶Û^~ùå;î¸c䟂 ®£”=ÂU|C¹«hB“â ¬¬”MÊÁêBFšê¢HôàìììçŸþþûïÕ§ „"„=ÂøšŠu(!ÿ]LL «ÒàÄ¥ˆå_€‘‹žÌ›ÌÜ××§T*}¯{~ ð„Fi:Ì5|E•}hªŸä},Ä Ù¬º€‰êî¢Wôà›xââ8ÒRÏûŠ&P"ÿ-ŒD…U+XÕ $ˆ mçÑpdôŒ%§Ó\ûH_IÕVþ2ˆ=eœ3sQ‘bÒ|?©Ïp«¢¶˜ÈÜg÷zsÚ¹†Ï¸CÂ8'ÊÓÎâð¤‚OO,¬?'XÂIšÑy ƒðð<»×}‘vs-ŸQû *¦È7+€¢‹¦É ×(&¥Ÿ¹â¨?׋ji³žj·ÍO|+@„ Ɔßá¬î³{Z%}'¸³_Rt1|E¬ˆMÊÝ~aYÍ9éNò£df{•ÁݸSk˜s_‹a ˆ$PäŒ×p¶ÏÈð~÷Ù½çÛ»»N|å¨ÿwçÙ¿PtÅ÷NÃ@lyç:6çåVÉwkÎIB-mÖO ¸ODéú•Íæ±ø:0càÆáì¯1±ûGŽÐíUsçs“ÄÅ&â›Þ@èêUõWý·µÚg „„ÍÖÃg¬îÖC§½î/k0eÏ‘ÂÑ€ÙÅ=ž¹lûË—½®??º!Áµ;`æ^ÿôúïõeöMµ óAµ¤›ÿq&æ’nêgýëu(É}M€‘“ Ó%©8:0æ ŒS¡¼Ë±^câZCn×5%“ŸMHâû D;™c]ó÷KÖvؼË:ûF_3y dbÑ ë¾pt ‚@#â/Ǫ²Ùì»;M%t-ñ¶´YO_2É­-«DSæu!„ï@Ö„¸v|Ö’ý9Yadc‘ e¤I×ßuô¼Uïñ ŽPã ww! y‘ 0ï–!„P¿‰+k0yÝ\Ö`RÈX„ZÒ§:2¥ã¸[yŽ*âêDä’à²|y[ZaÕÙ:œ;{?,‰se5[l¦žaÈ ˆ\€Áðxs¬B;« v§÷ÒÇqSØwÍ9’*¿Äÿ8 Bê²K4‡o›-W\j4™­Fw»k]œ‹’‰ñ†\ùØ~ ƒa¸· y•¼°ØHRœÀ&]$¨2©ŸLÇø6Q„ºº€z³T#½g #W ÿÃhÈjD7À 9V!›^›RÒ‚è´¤ÿ8bùrm]DèrXõ1Y•“òfÉ’’&È;Œ¶;éÎjï7DÀ Þ«â¬Ø¡Uá;Å ë!¢ÓR[/ÿç»]³Íˆ£ì•”¬ óKlEBèÚò­ï0Ú,ñ¢Xd쯅}ÀaÑoâ^ù§Þkx*0/ܯª©?šä¨]¬<¾êW„Ú: !¡ÍÑà•·1׆¼A`0ßÉa kËŠ?fmn*‰Õñ¦¡ ]AȉËâœ\¶x=£ˆ Ao ²DÆÈFÀ¡ÂÖOa IDATg±‘Цë¹TrÔ9©Ÿ„šÈÎs7‡Ð„. Ô‡‚Q/ z/EF`ƒ6ÄNz9]55ç¿Á„Є.!ä@AèD˜‚¡F-D¯åº#Îûä„¢u"t¡n„\ÿeBè€Ñ€ nD¤§Ók©é"ÿ Ö¡=EèÚéDFÐ6%'ý z`ä ƒ!Ôª#:-×]‡œþ;ôC{ŠÐµÉŽ^™‘s~öJ»Dž&Šñ-7 ÀŸÈX[…5à ¢é;JtUÄpözhõÀØz‘¢‹y–·‚ gÀÄkÀ`ìQ‡tד®ƒÔÞÇ×Î0½,muÒ«ô†#Œ ôÀX€<Q2pšèªHÿ1Dù΢"æCÏÚ¨ùÆC!ôÀØ<‘pƒ¤§‘몤ƒü7P%sÚFÏ R¯òVB›“¡ÆPð¥K—ž~úé²²2„К5k¶lÙ’’’únL(ÔtÓU‘ÞFD<ͬ˜³N4êig¿÷B‡HÄ./À…%L,œ c)ÔØd2ÿä'?yçwBo½õVIIISS“L)´AÀÙHO§«¢–˼íŒt2cN&ûÛØó^¡— Å‚¼\XÌÄ@耱êìâ?þñ ~ø¡ûÊ~ô£åË—?ñÄ>YУE;‰®Šë>„8+O3#ÀÊ%L·œT6R£Á«ÑÉŠ´²ìÞÅ+¿¿aZ(ú ãXôdAïÚµëÅ_ô¼òàƒ¾òÊ+0)Ê‘ÞfNw[yÛq"NÌCíˆ|vø„^"Óóÿ¤[bÂ2ÔŽ2ÚmóSÄÁï4LD¡ÀÇÏÈÈð¼²dÉ’'N„¸чÚz‰^KôµÔaäif0V. ¹ôtÙ³ÏwÔkcDµ±Ù§¦å[œ1&<”ü¼Sk˜s_‹™`w& POíŠD"³Ù, ÝWGll¬Íf ð)˜‚ö’þ“DWEúó—Ñ*°*'ä’¦ãäÀ^ÞÐ['Ï>(Ï5ažeø ¹òâ¬Ø t"AôLAß4†á‡mÚ´©´´4ä}†Êhè´ÔÖÃ{“ª48.“k¨w~øß¾¡— ÅÕ1Ùûc–ó†^—²Sö©2–Ë®ÀøSZZºyóæP¾1Ô#Ëäää–––ääd÷•«W¯feeuvúÙ™Š‚ð \e4´¤ÿòÞ®‹Bˆ•²I9X]Ȱñ\}©*÷ ½H$fó ?uf×·Y—¤JZ?=€È=#àE‹577¯]»Ö}¥¥¥eáÂ…!îFDrš8}í0C^µ'.CÊÕà´Èlò¾I$fó Ù‚b‹@Ûd.Nºìà襮ë[„§' …ìõ)‹ÈÄxl¿ Lp¡À7nüàƒ<ð|pçw†¸‘…šÚ¸®*ÒÛ„¨“§ qB6«.`bg ›•«¬à´hÐûD#* V²Å(&¶ÏÈÅ‹ñ†\Øà aê©]£Ñ˜‘‘ñÈ#üüç?G½õÖ[ï½÷^sssLLL€OMÐ)hÎFzqº*jéàmg¤“±Zc”d+ãb‘ÍÊUWò†^'+ªŽÉîIÚ×;`æ^ÿ´û©»“âå°² Èž)h¹\^^^þôÓO¿üòË¡’’’}ûö޾µtpº*Òsq<Éá Ù„,VÏĦ˜¹·¶]ybòAÑáJßЋĒEš­]‹ÍXêÞ×»Ck0 ’/j °² a#ˉ2¦NÒÛÄuUQSo;#QÙ•+þt`öO¿›/g‘Ízøƒ¯g_ª–ïrWT"hV¡Ü•¯í²èú‡&®ÕJÁw5ò¿}5tøà£ Î¼-ŠpŸ‘‹—³ÔÖMtÕœ¾9}Ò¦BˆÁйXã3Þ/hi³.Á|_Òl?XÁÚ¼G½6ô@LÎÀ€ŸTÞhúªî†º±Rl:‚P­< u6  è™‚žLŽ={«ïš{Œ5Ÿá/£!ŠÃªX•ψ”¡3—mgZЇ4Õ‡8bõ^•ÊúüwGº•£‹tÞ™Á²ïp!]¿³²Ù u6 ,"cd}#`jï'újÓe­”᫉¬˜ƒÕ8~1b†â,78xðo»3õu¾Î,ÑÊsbWÕ¶Q÷„³XÈØÃü¥‰Ì ÷« ÎøSБÑÏp•Ѩ"ýÇ%<í™C±\6­€‘¨¯_´Y¹êýÖBû ×í®Ð[-ϱ2bFΙ6E4#YäúóÑóV}?Ï.&¨³Àtäsš¹î:¢ÓR«žÿ†ØYµÆ(^òúçOÝ/A!ÏÍEÂo·`‰V¾¼Z¾ÌÊ %R9}z»Îñƒb¥2–µØø‚½ûQPgB.2F–=¦¦ œ®Šô6"âðmµQcOz}wVö’´â¬Ø÷¿íki³.I•<´Jêo_¯gèU+é³$¸0Ž@œô6p]UÔr™·ýªU]§ÏjìI·B¨¬Á¤Œe[Ú¬jKjÒÖöÍpv¥Ó4í©ùH οv±(s˜]Ô0À€q(2F–‘5¦ƒ]¤»ŽÓW#§Oe „Ã^²Ï/»¸¤Õ0ƒ¢¶)Xû²¾Cc½oš’ÊXM›¿ ‰%Aë8o„ ý$vÒs„Ói©ù"o;#NÄj=nyùQï­·‡UqôàÂŽZ©OèÄVS[T¡Bð¸î'µêˆ¾Öï×£Œb|¦‚­ƒœv¿S»Ÿ±ñd8Ÿ™–¿“dÎM‹ƒu\ X—(Gúš‰NK gùÛ…qÚÎÅÙyEÊOó …Óîçj*‘uÐkD|=ÍŠŠƒZÚ¬§ÚmP6¢ à›Aí}D§%úZêð9ë!„7«5šÚ|ÉÞ.<´öÆvÐëõIwšeEì©AdÚ>´Sk˜e# Š@JN–ôç-£arÆ\â²3–3âÄ3—mÍm½Ý8~õz‘,†Õ‰V¬Z(/D¨¼Ñd¶BÙHˆZ€GÆiæô5D§¥¶Þv«hÖŽÓÇúçqKfÆÎ™J·W]ïÔæ|G†j*Õ•¾k½(&–-(fó ‘hh’¹ßÄù–q.k0eÏ‘BÙHˆã:¹É-ŒIXÔÔÆuU‘Þ&DyÊ\P,¨rP’æµ]BÏSÿ–Ε쩊 2bÕ­´8}÷õ ½.®r¾¯ƒªb„rœôâtUÔÒÁÛÞÇMÚ%Ë©Èþá²äòF“®ÿú™ º~ç·‡Mh(ôÖçKèHC/BÈb#Iq³ÍPU¢Œ€½QkÑ(£!Àñ‹;˜œÿ.Kt]øA±òÓvç Ý zMXfÏY=i]‘oè0ÞÀ8ø¨ÓØÑ ¨¦¦ó¼íŒD…UV•ËaÙ?¶u#44áüÙÁ¢oàÐ{Pž[»Ti‘>+ÁZ.Ld€µõÖ©«sfž_rŒ•éX]€ãæ!Ä „*M:clê:õOèœÞZ=½Më»ÖëÇì•.¯YjÇB)Í&t¦„ô'º*2p !ê»Á– ãêX¥aDqùÉ=W Ž W"›wæ#·å®~µu¾‰ÜðW )Í0ÁMÄLí¤»–誩½¯ÁŠ9Ö¸ü×Ë&=~Wr¼ÇTqŸ‘û¢Æà3á|(ßxHx‘/ͪ°„Í-üh¿ÙäSáÙî¤;« Ò ÖDJ¢„ œ"z¿e49É‘ž%gm˾kÞ‡{û‡Îå½#ÌÜ>íÎH•JD B(À„³;ô"‘Èb#Mf=*ÊŒ”fÏ ë–PûÑ×}Ÿ!/ºlž\×ÝÜ·ÐA¡Ï ¸¶áz±Ú¡5˜‰i»g™˜Óîçª÷ûN8{†^×™oȕ훈TQ>¦ÿ¯½ûn²>ô8þMÒvPš6¥¥ \Öqa”KiEE~¬ü«íÓ1ZŽâÙds9pæq÷¸èôu×âŽÃ{¯œ#¶Ã¦Li…álµlm±=–õz± ePjé4ý‘Ð<¹ÔÓ$M’çû<éûõ_Ÿ&y>Ižä“ç×÷éiv]>®t6·+À¿±®„Œÿ>=÷l÷ä᳞¹¥Yb¶¯Oýì¢ó¿wŒUõÔ,íÿÈx5tõ¢—#¼Æœƒ}®ö•¶*÷@[àŒŸdœp§)uÁÞ²€cNy[}[Â'ïœyáÔöÆøíÍ¥z ŠQÀáæt÷¶¸¾¬RÚ?Š3À¿±FËcÚÆÄ™Bÿ´§rêï}.¯Äc•Åöš…=T/ŒFÑSÀ»ví*//w:ßýîwüñ¼¼¼÷ ýü§r¥ÖÕVéîm üc'šnZdL™/Lcƒ<Œ÷ ÌCœ®õöšâcç$,^Jõ@t‹žƒ°–,Y²lÙ²’’’¬¬¬ÆÆÆ‡~¸½½}óæÍ×ý€îþËJ[¥«½Z¸ü®2$„0˜Œãç™ÒÌé!Ê3sœ³ï–æS>?ã·¯×3šÕ,Å\Dû®—ÚkÀ;vìxá… †¯Æ½hhhÈÏÏ?{ölð{øâv) J[¥b;+D€§ÐéL:¯,˜Ç2C쵄ÜkwU–»>ü@8|O.rÆ;—¾è·š¾ê]N"€¨=› }ôõõ%'';üÚ·÷ów;;•¶*åËSî«¶€·í3ëõÆ9ŸÚÒÝnÃÃkÆD䯳Ǖlþz wMù ÌUS%œ~;G¾r ºEÏ&hï¼óΜ9s»­[éþ»r¹Ré>p C¬Ù8a¡;åÎÿ,UÚº¿«¹´Ê6c}ªÉè;Ðdw¯ë¥·Ú·æ§&›Mî›Rñž«¦J\½êû T/ 2dpGGǯ~õ«Ý»w‡¸Ë!„øŸƒ›¦ON øƒ9Ý”v·q|¦0˜ü/Íð²%U6{¿rôøÅ5Ô¬^C‚Ù¸h¹éöEf£Õj}ê©§Ôœ£´MЗ/_^¿~½Õj]¶lYˆ›º†˜1ŽõnkJ]`L»Ë0vâЄ.»ëù?ésiÞ¸Ã/ïŸà}ÙƒO/8ö—ž_b;u[ïéX÷ Θd¼{¹iÁ]"6öºž zèu´ç`+!„÷øÇ?þ±fÍš_|1tû !L¾› ñÿdJ[dL/ŒÃVOKOØ|ÚWø]ö`°««ëÃ;:êToR²qñ Óü…"†êDVd 8ெ‹/®Zµê¥—^ÊÉÉ çAº{‡F‘4ƒÉ˜ü/ža4|xN" ø }eì€M©xo°úä<ÅoƒsR²iÉ=Æ[Š˜Q186@:µû¦­­måÊ•Ï=÷\˜í+„(©² !Nöå/Y4_ÄŒéfA.{àîît½ûæÕÚ“bpÐç´¡nSb¥åÎe­°$±¯ µ xåÊ•O<ñÄêիüý§CCS½ÝôÏ7¥ÇÌšrm³swwºŽSjO‰Aß Î]1‰ÇÍwÔŒ›ç2möåRÀõ¨}–÷^aÎÎN‹Åâ?Ý¥¸ÿýö¶®ÁâG&mû‹C&ò?§( ww§ëø{JíIÿꈷ|>céÅ)ÙŠñë#³UàO¯aù»¦§q¼¾·­ëëúéœ"ßYŒ\½†äÓÒÜĬÛ2M¦Ìðsp£i÷˜£.»ëX­Ýgâ±Z{öŒ±Þçy R½1–³éKmX"Lï €š´[ÀáœSä¤zÇ—ÆÜq:>ÃÕgJ½88k  O£ìsNQ±Þ[žûŠgm° ÎãS KrwýïôÖ|¤‘)P™ä‹1„)à>ðûz—Ýkœ· ¼¡ÿ¯öxÿkÍíæ{‘=aÝáT¯0™®c/2êÐY©ÞÞ1ÉI«W UïДkÚ‹ €štSÀAª·3ÆRžx×éøŒÓ&Ìúÿö 92%gý$ÒÁ>`·½ÇhNt<ùXÀ ÎGãï8n˜í2˜„×4R!î}ÀŠ"„ði_wRJlNîqÃìòš>ÏÄ0Gê@:l†5$& ûÓ2þê=y/¤=ÜòO·=Ýïsãcµö.»KÅt\ðWbc –ñ¦5ù±ýÛ_œY]†½Ç:G:ÆJJ@§‡MÐB!bzÔ0iŠ0™<×GêîU2ÓǦ$8¡ˆc¬§›6L™&„p)_¯à^ºruÃò$ŽºèŽÎV^Ib®ž x¤‘­8ê  ;z*à #[IÉÀuÓÍ>`F¶DŒ„%"9 AD®€Xk@  (`$ €€@  (`$YÀ­­­3fÌ0¸”`Ô‘VÀn·»¨¨èé§Ÿ–‰¤ðÎ;oºé¦x@V$’3ôǼ{÷îêêj)s@: kÀýýý………{öì1›ÍêÏ-PÀÛ¶mûÁ~°páBõg €F¨]À¥¥¥O<ñĵÞшÕj@FÀ¨cµZMäæÙËüyGšÑw¾ó²²²©S§zß&d.G"r¤v±ù5$  "r¤öQÐþOƒrŒB E €0È/`¶?F!ù À(D  €0PÀH@  €0PÀH@  €0PÀH@  €0PÀH@  €0PÀH@  €0PÀH@ „Våå—_ÎÈÈ3fÌœ9s^ýuõ3´¦³Ç%;‚ª$ð–-[Þ~ûm›Í¶wïÞ½{÷ªŸ )ݽ®—ÞjUlp»ÝjÎïý÷ß/..>tèÐ5ÝË`P;'@M{v64Ìýö˜¢ÜdÙY†‰\©½üꫯþüç?Wy¦-ûô‚£¡y@ÑÐ<ÐÔâG%jðÉ“'ívû’%KâããÍfóŠ+ªªªTÎЗâ>XióüYZes)£b“§ÚÜÚÚú“ŸüdÓ¦MçÎknnþÑ~ôý￲²2ä X­ÖÈGDÐñúÞ¶®AÏŸm]ƒÇë{ÕaµZM俍ö¾Õ¸¸¸W_}uÓ¦Mž)¯½öÚþð‡÷ß?ȽØ Q©ËîzþÏ_:‡}ÃÇÅ~yÿK‚IV*ozÝìÿ#"%%eíÚµÞ·ùÞ÷¾W]]Ñm*=aói_!„sÐ]zÂðöÑ$&¢îÿ«!###¢sèEŸCIMŠÉÉJé¿ñߊæÑ¢"[Àþî»ï¾#GŽz¦>|xÁ‚*ÇHÿ-ãšÛͲSH£v?ôÐCË—/B¬^½Zqøðá;v8p@åÈ%áà¦K—.íØ±ãÈ‘#}}}ÙÙÙ¿ùÍo†*9ÂH¹ÒG±QÀ)ôz4ˆ„6ª.“  Â(¼T‘ (`@%U6{¿òöÉèCM0 ˜Ñy©"PÀ€ÚK©€ŒH#—*ŠJ0 °.»ëX­Ýgâ±Z{—£±n Øh¾T‘ Ô   £üRE*ÐÇ E ‚¡(ˆ*0PÀH@  €0PÀH@  €0PÀH@  €0¨]À.—k×®]·Þz«ÅbIJJÊÎÎÞµk—ËåR9rŨ<¿­[·ÖÔÔìܹ3++ËívŸ>}zûöíMMM/¿ü²ÊIHí Ý'&&644L›6Í3å‹/¾˜;w®Íf r¯È]€ "W@jo‚3fŒÿıcǪ¹Ô.àŸýìg÷ßÿ|ÐÓÓÓÓÓSQQ±~ýúG}TåÈ¥ö¦]·ÛŸŸ_RRâ™’——÷Ö[o † ÷b4@ŠèÙýÛßþ¶®®îàÁƒ¬««+..yGC V«5ò‘Q¢³gÄ“n¬VkÀ¢‰\˜È®YzGšÑôéÓ÷ìÙ³téRÏô¿ýío>ø`sssðÇa ðMt÷ºŠÿÒ¾5?5Ùl ÿ^‘+ µ‹-..®££#!!Á3Ån·§¤¤8Ž ÷¢€ßÐÞ£ Ís¿=¦(79ü{EÏ&è[n¹¥¶¶Ö{Juuõ”)STŽU>½àhhB444µ[åSÚ¼uëÖ¢¢¢C‡uuuuvv–””=öØc*ÇŒ.Å}°òëÑ&J«l.EþVU ›v8P\\ÜÔÔ$„˜9sæ¶mÛÖ¯_ü.l‚\·òÓö¿~Øã=eÍíæœ¬„‘nï-zö_ p}ºì®çÿü¥spX‰ÄÅ~yÿKB裱¢g0j*=aói_!„sÐ]z"ØÈ*Pûb ¨¦Ï¡¤&ÅŒ´µ¹Ï¡ÄKÚŠ¨>6í²  › ˆ*0PÀH@  €0PÀH@  €0PÀH@  €0PÀH@  €0PÀH@  €ð cµZeG 9o BÞ@ºÈ©‹B'9u2¢ n·[v†Ð äÔEHAΊ7.rê"¤ÐIN]„‘Ì‘5຺º-[¶X,ƒÁàÿßóçÏ$&&&&&´´´D"Z‘Þ¸qcZZZUU•ÿ¿ìv{NNNvvö¹sçÎ;—½|ùò¾¾¾HÄ@³"»ÀÍ}çεµµüã=S~üãßvÛm¿øÅ/®éq4H!9o(BÞ@ºÈ©‹B'9uRènt‡*,,ôžRXXXZZªr äR»€333½§Ì;÷Ì™3*Ç@.µ7AÇÅÅõööÆÆÆz¦\½z5!!ÁápœHE ¨eL$ô†ÓÅ~Â÷M7A¼„sûää䎎ï)W®\?~ü7Œ€¾|Óv{ çöõõõÞSfÏžý c /j„µvíÚ}ûöyOÙ·oߺuëTŽ€\j„ÕÓÓ“™™¹yóæGyDñÊ+¯ìÙ³§¾¾~ܸq‘‹€ÖDd Ø{¯°Ïb³Ù\^^^SS3uêÔ©S§~ôÑGeee´/`´ÑÇ@$D.G€0PÀH@  €0覀 ~d' ¦µµuÆŒÚ yêÔ©Í›7OŸ>=..nÒ¤I+V¬xóÍ7e‡òUQQñÃþp„ III .,))‘hDuuu[¶l±X,|»ÏŸ?_PP˜˜˜˜˜XPPÐÒÒ";QZ~=t±@êâ£íCË_•j”Ž['tUQ”ÜÜÜýû÷k3ó‚ ~ÿûß7559Ž+W®¼ûî»óæÍ{òÉ'eçF±lÙ²ÊÊÊÞÞÞêêêÌÌÌÝ»wËØìÙ³ýë_òÉ'Z{»{zzÒÓÓŸyæ™ŽŽŽŽŽŽgžyfÆŒ½½½²sùÒì èM ¤.>ÚÞ4þU©B*->퀴ùôâ‹/nܸѭŸÌgÏžµX,²S ³}ûvEQ<Ö××§§§KÌ­½ÝÅÅÅ6lðž²aÆßýîw²ò„¤µЛH·&?ÚÞ4þU©B*ÝŒ„å?¬´6}üñÇ<ð@uuµÙlÖKæóçÏggg···Ë2¢¾¾¾ääd‡Ã!;H0Z{»srrüñÜÜ\Ï”£G>ÿüóeeeS¡µ0],BÛmíUªJ7û€…7ß|sllìĉ7lØÐÔÔ$;Nýýý………{öì1›Í²³„¥»»{hçÖе14ëwÞ™3gŽì:ÓØØ˜™™é=eîܹgΜ‘•'šhÔøG[/_•/H¯bß(ëÖ­«¨¨èïïoiiÙ¹sgZZÚéÓ§e‡òõÓŸþôé§Ÿöü©å—×{¸çž{e'Ñ•+WfΜYQQ!;HZ{»cccN§÷§Ó'+OHZ{G¢ñRm]|UªP:Z|Úáxå•Wî½÷^Ù)†)))¹ûwm.UÞ._¾¼ÿþI“&=õÔS²³ÖÚÚºxñâòòrÙABÓÚÛMG‚^H-´õøUéŽLéhñi‡³‚ÞÚÚ:nÜ85Sù𙞞þÅ_øÜFF´aÂy1ËË˧L™¢f*#…¼páBffæ{ï½'+˜à/¦Þnoiii­­­ÞS.]ºtóÍ7ËÊ’Ö^@Z[ C’þÑH›_•!E¢t´¸Ø;_Û¨)`ŸŸ}öÙ´iÓ|N“~Êr8/æüùóÛÚÚÔLå#`È‹/®Zµª¸¸xùòå³y çÅÔŽŒŒŒúúzï) ³gÏ–•Gï4¸@†$ý£6¿*CŠÄ§^‹Ž7Þxã®»î’bÿ_7ž‰²£…pâĉY³fÉN1L[[ÛÊ•+Ÿ{œÙYôjíÚµûöíóž²oß¾uëÖÉÊ£k:Œ=íÛ9IDAT] 5øÑºýªŒHé„·¢,YNNÎ.]ºät:›››Ÿ}öÙÔÔÔÚÚZÙ¹BÐæË›››[RRrùòe§ÓyáÂ…×^{mòäÉGŽ‘k˜¬¬¬?ýéO²S\­½Ý6›múôéÏ>û¬g Žôôt»Ý.;׈´özÓÅ©‹v@|ëÕ)Í=í€ÊÊÊî»ï¾”””˜˜˜É“'oܸ±©©Iv¨Ð4¸T¹Ýîòòòüüü¡sâĉ§N’ÊWÀ‹²s åßµŸþy^^žÙl6›Íyyy>;Þ4BË/ ‡.H]|´Òà;®Néhñôg¢ž^÷ k0PÀH@  €0PÀH@  €0PÀHðLQeÒê~’IEND®B`‚gsl/doc/images/rand-hypergeometric.png0000644000175000017500000003164313536674414016431 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœíÝ{\Ôu¢ÿñD.£€Šb…®R=ÀäAª5´´ˆ£ÎîZ^&[ѲM<íV»'O…%Ö®­è⥲4'ÃK¶BhvN‚…Jnj ±å¥“‹Á¤Œ  Ìï9¿9³Ã0Ìàwø|gx=ÿÂÏ|/yóùÎw¾£4™L гúˆ@oD  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@Ã;)•Ênܺñ¸)ÿ¿~ýú…‡‡Oœ8qùòåçÏŸ¿ÁÍv™PÚ§˜ÿ0p èíÜZ0&“Éd2555}ûí·+W®lll;vì|àÒFz²©[ô¥ÉdžRÙéÿm7õNî{@ìnùÔ©SS¦Lùì³Ïbbbnd;./Õº€K˜£—JLLÜ·oŸÍ`IIÉM7Ýtýúu¥RÙÔÔôøã4(00pÚ´ieeeÖK~þùç þþþ#FŒxçw,ãJ¥²¹¹yÉ’%áááÖs©’’’ûî»/00pРAO<ñDSS“õ­mM¡Päçç'&&Úd6‡\´hQhhè AƒþøÇ?šL¦æææÅ‹‡…… 8pÉ’%ׯ_w¼s ˱b÷Â:°^¯ôÑG‡ Ö¯_¿¸¸¸;w:ÿÈßqÇO?ýôêÕ«m6ÛØØøÜsÏEEE 0`Ê”){÷îívBOŸÝ9®e/v÷eYÌñÓÑÖÖ¶bÅŠ#Fôë×ïÖ[o]·nó z#àüß6ß”““3yòd››,XðÊ+¯˜—yä‘GÖ¬YS]]]]]½fÍšððð3gΘ«¨¨4hPNNÎ¥K—þñŒ9òàÁƒ–?öØcæ›,›ýç?ÿ9dÈuëÖÕÔÔÔÔÔdggÏž=Û’ÐÁÖ¾øâ‹ÐÐÐ÷ß¿®®®¶¶ö½÷Þ ùòË/-ûš?þ–-[¾ÿþûÄÄÄU«VÍŸ?óæÍõõõ摵k×:“¹ãCÔñ^XÓëõË—/?{öìÕ«W‹‹‹§OŸîÒ³P^^>jÔ(›ef̘ñôÓOÿðÃ---õõõùùù÷Ýw_÷:~ú즲^·³›º|:-ZôüóÏÿý÷F£ñ³Ï>ûÅ/~±cÇ»`2™(`x§.ÿîlii>|ø7ß|cYå§Ÿ~8p`mm­yõ—_~ÙzƒË—/Ÿ7ožùçyóæ½þúë–›rssxàË~W¯^mföìÙ¯¾úªõÈ+¯¼byYw°µéÓ§¯_¿ÞzÅììì™3gZöeéW“ÉtäÈ‘ÀÀ@ë‘ÇßqÇÎdîøèu¼–ÅæÏŸÿüóÏ›œÐY777÷ïßßf™   ë6u¼Ç ?}Ý.à.ŸŽ^xÁúÖ}ûö?Þî=L0¼U—3`“É”™™™––fíµ×¬_£-&³Ó§O6Ìüó¨Q£¾ûî;ËM Ç·¬xîÜ9›=†‡‡Ÿ={ÖzäÌ™3–¶vË-·TVVZ¯¨×ë###-ûªªª²ÜtéÒ¥Ž#*•Ê™Ì6íÞ ËbÆ ³Þ”= W®\ °Y&!!aáÂ…çÏŸwf;Ž:~úº]À]>6;mhh é¸/ÀŒ†wr¦€/^¼zñâE“Étýúõ[n¹åÿø‡e™ææf뵚ššúöíkþÙÏÏÏfJݧOËŠ---6{ôññé¸5K [ëׯßÕ«W­W¼zõj¿~ý,ûjoo·¹kGœÉÜñ!êx/,‹õíÛ·©©Éä„Ξ…²²²Ñ£GÛ,söìÙéÓ§ûûûß~ûíóçÏÏÍ͵ÜW:~ú:n­­­Í™îòéhkkël] #NÂBï5hР™3g¾ùæ› …"//oèС –[/\¸`½ð… lþY¥R]¸pÁúÉü næëëÛqGÕÕÕÖ#Öÿt°µðððºº:ëëêê†jùgÇó‰:ûãÌu¼ÖwÇæ³¼®ÊÍͽ÷Þ{mG޹gÏžŸþyÇŽwÞy§ùøD÷*>}üù短o=wîœ3±»|:úôá.à¿ zµ¥K—nܸ±µµ5;;{É’%Ö7åääØüsòäÉæŸ'Mš”——çü^’““wíÚe=²}ûvË϶¦V«óóó­G>úè#µZíü®Ù‹¿¿KK‹ó›š:uê»ï¾Û f%%%kÖ¬ùýïo÷VóiÕ‹-Ú¿¿åäjW*>}·Þzë_|a}ëæÍ›-?;Ø—„O Ppx^ÊÁÿm››’““ÿó?ÿ3<<üÚµkÖËÌž=ûoû›ù¼å¿ýíoáááßÿ½ùÖo¾ùfذaï¾ûîO?ýd48àà„&“ÉôÏþ3<<|Æ µµµµµµëׯŸ3gŽeI[;räHHHˆù´Ûººº÷ß?44Ôú8y—÷Ú™½ÄÄÄìÙ³çúõëŽ=Ë å,èsçÎ]½zõ‹/¾èò,èëׯ744>|ø™gžzô袢¢+W®œ>}úOúÓ¢E‹,ë:Ø—«OGgƒ€ÿ9àœ/à>úH¡Pü×ý—Í2F£qÁ‚!!!÷ßii©õ'Ožœ6mZpppÿþý'MštàÀÇû=yòääÉ“û÷ïºhÑ¢ºº:Ë{‡¶f2™öìÙß¿ÿþýûÇÇÇçåå9¸ŽG:ÛËþýû£¢¢|||¿j3xîܹ9sæ <Ø××÷Ž;îØ¹s§Ý{mùCßÏÏoðàÁ&LÈÈȰ9Íʲكj4š°°0ÿÑ£Gÿñüù矻—°Ë§/;;;**Ê××÷æ›o^¾|¹ùÓÒÎìË¥§£³AÀŒk¾ ·knn =}úôðáÃ-ƒî¾Ò§Ÿ~úì³Ïž:uÊ}» s¼Œ^íçŸþóŸÿ¬Õj­ÛצOŸ~èС˗/ÿôÓOÿûß,XðôÓO»udŽ0z/¥Ri>>ùî»ïªT*››¤ýÕøðÃW¯^ýõ×_·µµ3fÉ’%sçΕpû< €‚@ (` €€@ (` €€@ (` €€@ùpee¥F£Q©T*•J£ÑTUUu¶¤Ò??¿žL €KdZÀF£1))I­Vëõz½^¯V«“““›ššì.lê ++ë׿þugÀy2ý>ବ¬'NlÛ¶Í22wîÜ„„„ôôô.×mooŠŠÚ±cG||¼;3Ð}2çççkµZë­V›——ç̺{÷î §}r&Ó.++‹‹‹³‰-//wfÝ5kÖ,]ºÔ=¹†LAûùù]¹rÅ×××2ÒÚÚtíÚ5Ç+~ýõ×>øàÙ³gûöíëæŒÜ€Žg0ɯ¯oKK‹õHKK‹ŸŸ_—+.X°àÕW_ur//½ô’ÝÇÄßß¿‡Ÿ€lu§Æœ Ópxxxiiixx¸e¤¦¦fìØ±ÕÕÕÖúé§Ÿn»í¶ï¿ÿ>44ôFö®TÊôaô0÷5‚Lßމ‰)))±)--ŽŽv¼Ö›o¾ù«_ýêÛ€ ÓNIIÑétÖ#:.55ÕÁ*­­­7näô+€Gi/\¸°¸¸xåÊ•ƒÁ`0dff=z4--Ͳ€R©´Ye÷îÝÑÑÑ]Î’™ppppaaá±cÇ"#####?^PPè`•µk×2ýx Î6²ƒ“°f½î$,¼ €0PÀ@ðT_}õÕ“O>9pàÀŽŸKtž²I²Íš5kðàÁ HLLÌÍÍuÇF*++5J¥R©T¦ªªJŠìŽ˜?:räH??¿ˆˆˆÉ“'øá‡îÞ©·¢€xªyóæ 2äÈ‘#7¸›+ôJ’mâĉ/^ÌÍÍ­®®ÎÎÎÎÈÈxûí·¥ÝˆÑhLJJR«Õz½^¯×«Õêää䦦&g¶Üí¿3ÒÓÓÇŽûÉ'ŸÆo¾ùæ¹çž[±bEg×Õ‡c|ÞÆ>†x–ùuÓïû³Ï>û—¿üÅÒs¥¥¥3gÎ<}ú´„ÉÊÊ:qâĶmÛ,ËÏ;7!!!==½Ë-Kx¯Ïœ93nÜ8ƒÁ ÉÖdˆ!èu”Je[[ÛŠ+FŒѯ_¿[o½uݺu¢CýÇñV­Ze=Ë=zt7Ž;ÞH~~¾V«µ^^«Õæåå9“\auìÝÕT6|}}}||np#½ @¾ž|òÉæææ444lÚ´)++kçÎ’ïeèС¾¾¾Ã† ›3gNEE…;âíß¿̘17˜Óf#eeeqqqÖ ÄÆÆ–——w¹ó|îÆ¹_ºtÉü.õâÅ‹»½‘^ÍM_sèÑxX9P(/¼ð‚õȾ}ûÆowI»ƒÎ¼ô¥¦¦577WUUeee 2ääÉ“ÒÆ«¯¯¿í¶ÛŠŠŠºÏÁFºý½é¦{Äl–œ2eÊõë×Ù©‡r_#Ð4vPÀ€(Š3gÎX444„„„Ø]RªnذáþûïwfI'ãÕÔÔÜsÏ=………7’ÊîF$/`WÕÖÖæääDDD,_¾¼Ë…Åž¨õÒK/uûnº¯8ÛÈNÂäÀü&kŸ>}l;þzJø;[[[;jÔ(£Ñ(I¼üñÁüë_ÿšœœÜíHm$<<¼´´4<<Ü2RSS3vìØêêjgÂKõˆ¨®®nii9{ölffæ AƒNœ8áÌ–';vìöíÛ»—ÊÂñF._¾©(((˜1cFXXXß¾}‡>oÞ¼ŠŠ Ë­õõõ¡¡¡Ý‹g7›Á`p)^—9wîÜôéÓƒƒƒƒƒƒ§OŸþÃ?8~ÿþýQQQæÏﺩ°°pæÌ™æGlذaæèÑ£.mÁ㸯8ÛÈN P(²³³¿ûî»ììlÑAºÃ£ÃË 'a@OÛ¼yóoû[Ñ)ºÉ£Ã÷Lõì` 0c €W¡€€@ (` €€@ (` €€@ (` €€@ (` €@¾\YY©ÑhT*•J¥Òh4UUUnooÏÎÎŽ‰‰ñ÷÷3fÌÎ;{,'Ý Ó6IIIjµZ¯×ëõzµZœœÜÔÔÔÙòO>ùdiiéG}tùòå­[·nݺµ'Óà*¥ÉdÁެ¬¬'NlÛ¶Í22wîÜ„„„ôôôŽ þøc둽{÷ÆÇÇ»17F¦xmllŒ‹‹KKK[¼x±B¡Ø°aÖ-[JJJÍ X0ëêÕ«ÉÉÉ?þø< P(öîÝûÌ3Ï|ðÁ“&MêÞÞù0À¬×}888¸°°ðرc‘‘‘‘‘‘Ç/((°´¯ ÿÝ»wÿÏÿüÏ­·ÞzÓM7½õÖ[;wîìvûИêÙÁ `ÖëfÀx7 (` €€@ (` €€@ (` €€@ (` €€@ (` €€@ (` €€@ (` €€@ (` €€@ (` €€@ ä[À•••F¥R©T*FSUUå`ae=–€niƤ¤$µZ­×ëõz½Z­NNNnjjr°Šé_õXTºA)Ï®ÊÊÊ:qâĶmÛ,#sçÎMHHHOO·»¼R)å‘vkÏå¾Fé 8??_«ÕZhµÚ¼¼>~âĉ§NrLºI¦ovúùù]¹rÅ×××2ÒÚÚtíÚ5gV߸qc^^Þ'Ÿ|âx±ŒŒŒåË—Û½Iž  ‡¹ï=`™pxxxiiixx¸e¤¦¦fìØ±ÕÕÕά^[[;jÔ(£Ñؽ½sÀ¬×„SRRb=RZZíäê7ò`ýðà {,ÂÇǧ½½½Û÷ [2-à””Ng=¢ÓéRSS\}×®]wß}w÷v=bÄE‡O‹àøÓÏ%Ó^¸paqqñÊ•+ ƒÁ`ÈÌÌü©¸¯xY—µ>}úøûû755‰,wœ ^‰–;ÎïDË ^‰–;N„¯DË3`ðJ°Üqx% XW¢€åޝDË'a€W¢€å.((èÊ•+¢S$Fˇ À+QÀrG€W¢€åŽ÷€À+QÀrÇ ¼,w\ˆ¼,wÌ€À+QÀrG€W¢€åޝDËgA€WRšL&ÑdG©”ÑÃÒÞÞîëëÛÞÞ.:ˆB©TÊ!ô$÷5‚|gÀ•••F¥R©T*FSUUåÌZ555QQQJ¥ÒÝñzLŸ>}ÚÚÚL2@€„dZÀF£1))I­Vëõz½^¯V«“““›šš¯e2™}ôÑ—_~¹gBö6>>>mmm¢S€—ѱVkYYY'NœØ¶m›edîܹ éééÖZ½zõ©S§t:Ý 1Õ!hùèß¿¿Á`ð÷÷zN¯;ŸŸ¯Õj­G´Zm^^žƒUN:µiÓ¦õë×»9ZïÅ $$Ó.++‹‹‹³‰-//ïlùææf­V»eË–àà`÷§ë¥(`L Ø`0„††Z„……544t¶üïÿû_ÿú׉‰‰îÖ{õíÛ—©È´€]’——WVVöüóÏ»ºbFF†Òw„ôÌ€@B2-à›ùn}}½ÍœØâøÃ{ï½çãããê^222ì~Þ¦›¡½ ’iÇÄÄ”””X”––FGGÛ]øÌ™3#FŒ°™Â2—• ’i§¤¤èt:ëN—ššjwa»SXæ²’£€@B2-à… ¯\¹Ò`0 †ÌÌÌ£G¦¥¥Y`vÛó|||®_¿.:x ™ppppaaá±cÇ"#####?^PP(:W¯Æ $ÔWt€N1bÏž=Ýêøð2ŸÝ Ét ¢€@B0œE€„(`8‹ QÀp—¢ uqVCCÃöíÛ ¿ú꫺º:…B1dȵZ””ôÈ#tvi*x%fÀ ¡NgÀçÏŸ_¸paDDDNNν÷Þ»oß¾êêêêêê}ûöMœ8ñý÷߈ˆHKK;þ|OÆ…@0H¨ÓpTTÔÈ‘#sss§Nj=žž¾ÿþ?üáQQQÍÍÍîÏ ñ(`P§3àY³f?~ܦ}­M›6íøñã³fÍrO0È êtüî»ïv¹r@@€3‹Á;p)JP×gA¿ñÆvdz²²¤Yc 꺀322ŠŠŠlwïÞ½fÍ÷D‚LQÀ ¡® øïÿ»V«Õëõ–‘Ç/]ºtÿþýî Ù¡€@B]ð]wݵnÝ:FsåÊ…BQQQñðÃïÞ½;::Úýñ #0HÈ©oCJII©¯¯ì±ÇÖ®]ûÐC½ñÆwÞy§»“An(`³_Gøè£ÖÕÕÅÆÆ®Zµ*%%Å­™ O0HÈ…ï~öÙgŸ~úé¾}åûÂp+® ê´M•Je—+ó½÷½ 3`P§L¹Â âëá, $Ôi?öØcMMMŽWnjjzì±Ç¤Ž™¢€@BðŽ;âãã8ÐÙŸ~úi||üŽ;Ü ²Ãµ @Bðwß}7~üø|pâĉ7n¬¨¨hlllllüöÛo7lØ0a„‡z(11ñ»ï¾ëɸˆ0HHéød«‹/æääÈ 꺀ƒ‚‚Ì?¼ð ÖãÛ·o·üÌu£z® 꺀)W˜1 q%,8‹ QÀp ¢€á, $DÃY0HH¾\YY©ÑhT*•J¥Òh4UUU-yôèÑ´´´‘#GúùùEDDLž<ùÃ?ìɨ½ ’iƤ¤$µZ­×ëõz½Z­NNNnjj²»pzzúرc?ùä£ÑøÍ7ß<÷Üs+V¬x饗z8³×ãË@BJy~Ê(++ëĉÛ¶m³ŒÌ;7!!!==Ý™ÕÏœ93nÜ8ƒÁн½+•2}XÄÚ¾}ûÞ½{ßÿ}ÑA ç¸¯d:ÎÏÏ×jµÖ#Z­6//ÏÉÕ}}}}||Ü«Wã4HH¦\VVg=[^^Þ劗.]***š5kÖâŋݖ®—¢€@B]_ KƒÁj=ÖÐÐà`¥RiùyÊ”)nÊÖkQÀ !™Î€»Ád2™L¦ÚÚÚœœœ²²²ÌÌÌ.WÉÈÈPÚÓi=ׂ É´€CBBlæ»õõõ6sb»† òÈ#lÛ¶Í™/kÊÈÈ0ÙÓýÜ^0HH¦SRRb=RZZíäêãÆ«««sC®^ É´€SRRt:õˆN§KMMurõâââÛo¿Ý ¹z5 $$Ó^¸paqqñÊ•+ ƒÁ`ÈÌÌ4_îʲ€õ;µ÷ß^^^]]]kkë?þ¸eË– ¼úê«"‚{3 $$Ó.,,ÙÁ•°ì*..~î¹ç>,:ôœ^w%,È3` gQÀ ! ΢€@B0œE€„(`8‹KQ€„(`8‹0Hˆ†³(` gQÀ ! ΢€@B0œE€„(`8‹ QÀpVß¾})`  g1 QÀp ¢€á, $DÃY0Hˆ†³¸4Hˆ†³˜€„(`8ËÇǧ½½]t ð0\ T*é` p¤BÃ\ ¤BÃÌ€@*0\@€T(`¸€©PÀp R¡€á.†R¡€áfÀ  . €@*0\@€T(`¸€©PÀp R¡€á ¤BÃ\ ¤BÃÌ€@*0\@€T(`¸€©È·€+++5J¥R©T¦ªªª³%‹ŠŠfÍš5xðà$&&æææödÎ^…©È´€FcRR’Z­Öëõz½^­V'''755Ù]xâĉ/^ÌÍÍ­®®ÎÎÎÎÈÈxûí·{8p/Áµ @*2-àM›6%&&.[¶,$$$$$dÙ²e Õê3ÏòÈ#6'RýüóÏ=œ¹7 €@*2ý’B¡1bÄž={:»ÕúT)N›ê1\Ф"Ó0ä‰0H…† (`  PÀ  . €@*0\@€T(`¸€©PÀpׂ©PÀp3`  PÀ  . €@*0\@€T(`¸€©PÀp_ÆR¡€áfÀ  . €@*0\@€T(`¸€©PÀp R¡€á® R¡€áfÀ  . €@*0\@€T(`¸€©PÀp—¢©PÀp3`  PÀ  . €@*0\@€T(`¸€©PÀp R¡€á® R¡€áfÀ  . €@*0\@€T(`¸€©PÀpׂ©PÀp3`  PÀ ùpee¥F£Q©T*•J£ÑTUU9Xø«¯¾zòÉ'¨T*{,a/D€TdZÀF£1))I­Vëõz½^¯V«“““›šš:[~Þ¼yC† 9räHO†ì…(`ŠÒd2‰Î`GVVÖ‰'¶mÛf™;wnBBBzzºã•J î‘$ñJgÏž2eÊ™3gD€â¾Fé 8??_«ÕZhµÚ¼¼\XXxìØ±ÈÈÈÈÈÈãÇXÚ·#ëó§8—Ê}˜€T˜êÙÁ ¸3mmmýúõãm`½‡û¡¯;6 oåããÓÞÞ.‡£ }úôimmíÓG¦‡p K0\ÓÞÞ.:‚B¡P555‰ÝÄ)88Øh4ŠNÝGÃ#QÀ< Dðt0< ÀÓQÀðHAAA¢S@÷QÀðHÌ€x: ‰³ x: ‰0OGÃ#QÀ< Hðh0<ïðt0<‡ x: ‰àé(`x$.ÄÀÓQÀðHÌ€x: ‰“°x: ‰0OGÃ#QÀ< ÄIX<Òd2‰Î ;J%‹Üµ··ûùùµ´´ôéÑÜÈ}À‹}üýý›ššD€n¢€á©8€G£€á©8 €G£€á©(`†§âDh†§b À£QÀðTœ„À£QÀðTÌ€x4 žŠàÑ(`x*NÂàÑ(`xª   +W®ˆNÝDÃSq€G£€á©(`†§â=`†§b À£QÀðT\ˆ€G󒮬¬Ôh4*•J¥Ri4šªª*щàvÌ€x4o(`£Ñ˜””¤V«õz½^¯W«ÕÉÉÉ|U»×£€x4o(àM›6%&&.[¶,$$$$$dÙ²e o¿ý¶è\p/ €Gó†ÎÏÏ×jµÖ#Z­6//OTô ΂àѼ¡€ËÊÊâââ¬GbccËËËEåAÏ ljjRÊ@FF†è€çQšL&Ñn”ŸŸß•+W|}}-#­­­AAA×®]ëÞ•JoxX7Î}Ð×õË—/·{“R©ìá0€^Ŧzááᥥ¥ááá–‘ššš±cÇVWWwoƒ’ü½#ÕM„é=a¤Úa<"ŒTÛ!ŒG„±ËÞމ‰)))±)--ŽŽ•€.yC§¤¤èt:ëN—šš**]ò†^¸paqqñÊ•+ ƒÁ`ÈÌÌ|øÊ•+_~ùe\\ܦM›D…‰_·n]EEŵk×êëëÿû¿ÿûŽ;îxñÅEå1koo¿ï¾ûrrrÄ>YÂÿ«X{üñÇÓÒÒNŸ>}íÚµãÇO›6Mt¢ÿ“••5{ölQ{ê©§ÆÿùçŸ_¾|ùÒ¥KŸ}öÙ¸qãžzê)!a8ºyóæººººººwÞyçÎ;ï¼zõjpðB'·×dk2úMó«W¯ž3gŽõÈœ9sÖ®]+*…ðWÕgžy¦½½ÝòÏ’’’Q£F ÌcãôéÓ›á¯ýë¼yóL¢Ÿ,áÿU, SRRD§°¯­­í¿øÅ—_~)*@ppð¹sç¬GÎ;,$Ì=÷ܳeËë‘wÞygýúõ=Ÿ¤ãÿ^Ù¾&›L&AK,??_«ÕZhµÚ¼¼ÝúÿðôéÓ­ßåéI&Lغu«õÈæÍ›…¼îuüÝ‘ík²‰÷€%'Û'[>\SSsÏ=÷Šò¿jkksrr"""–/_.$@nnî„ ¬ë_>O–ÉdÚ°aÃý÷ß/d×¾¾¾ßY¼÷Þ{…„±¶`Á‚W_}Ul†?ÿùÏ·ÜrËž={ÌçíÙ³ç–[nyýõ×…„)((4hÐÖ­[/^¼xñâÅ-[¶„……ùûû÷| ¸W2dHMMõHuuõСCEå±Ékúùóçãââ8 :ˆ­Â›o¾YÈ®GõÃ?XÈäÉ2«©© ²ë¡C‡^¼xÑz¤®®. @H‹‹/†††Ö×׋1bĈƒZûì³I“&öïßÿî»ïÞ¹s§0wdûšlâ$,ÉÅÄÄ”””X”––FGG‹Ê#+.\˜6mÚêÕ«“““Eg±5nܸºº:!»>sæÌˆ#l>w+ü¸¦=Vß“bbbDíÚ7ß|óW¿úUhh¨Ø?þøã¸qã¬GÆ÷ã?ŠÊ3qâÄÂÂB£ÑØÔÔtøðáÜyç¢ÂX“ók2,±””Ng=¢ÓéRSSE呺ºº©S§¾öÚkIII¢³ØQ\\|ûí· ÙuÇ¿‹-ƒBòØØµk×Ýwß-d×3fÌøøã­GöîÝ+ðÄc…BÑÚÚºqãF±§_™ÝrË-'Nœ°ùòË/o¾ùfQyllذaáÂ…¢S(2MîÑùv/pùòå‘#GfffZ>ô=jÔ(£Ñ(:—ø£šcǎݾ}»Ø ÷Ýw_nnnmmmKKËùóç7oÞ<|øð?þXt®ÿ%ðÉJJJúàƒª««[ZZΞ=›™™9hР'N ÓÜÜ|×]wÙ¼³(ö윜œ)S¦ `‘ùÑG ó{À7ÝtÓºuëDåyðÁ¿úê«–––3gÎ,Z´è‰'ž£ãïŽl_“M¼ìçΛ>}zpppppðôéÓmÞÞëaòù«ËnƒÁ $LaaáÌ™3ÃÂÂúöí;lØ0FsôèQ!IìXÀ3fÌ0?2ÇŸ7o^EE…¨0&“éÂ… sæÌ éׯßwÞ)üìñãÇïÝ»Wl‹]»v%&&8pàÀãÇß¹s§À0;v숎Žöóó»ýöÛ׬YÓÖÖÖ“{wüB'«×dkJ“<sЫð0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0€¡T*EGz (` €8R\\ýôÓiÓ¦?þ?þã?DǼ ‡ €CÐ@  €0PÀ@ ÀÿŽN­[æÛCšIEND®B`‚gsl/doc/images/filt_edge.png0000644000175000017500000032570713536674414014412 0ustar eddedd‰PNG  IHDR@ ô¢9 bKGDÿÿÿ ½§“ IDATxœìÝyœu?þOUß×\™;!™d’IHá$BXͺˆð\Õ îêW¹\ìÊ7š‡ˆî"*¸²êz¬ëƒ€ì÷±²?D¼A&,!YÌÍä˜ÉÜgO÷ô]]]Çïê©®©««»g¦{z^Ï¿zº«ª?ÝÓŸ:Þõþ¼?”(Š RÑån€° ¢!€ ,¨h`@EC *XPÑÀ€Š†T4° ¢!€ ,¨h`@E[ðÖÛo¿ýéOº®®Ž¢¨¼ S Ý<¨p ÀºãŽ;š››÷ïßoqyq®mT>jÑ‚D•ÿ½¬,Ë j`@E«¸Vkk«ÃáhkkûØÇ>ÖÓÓSîæ@™UV릛nzá…b±ØÁƒ/¿üòk¯½öðáÃån”SeÕÀRyæ™g^|ñÅW^yÅ|1»ÝÎó| M€y°@¦Š`MLLtvvÆãñyß2Ì/tC€²C7(;tC€²C7(»…놕5„P»¨èÖÏ~ö³«¯¾ºÜ­€r²—÷í•©eï}ï{wíÚµ}ûö+V ïÛ·ïßøÆ¯~õ«ò¶ÊkÁ3°¨YªÇZÿøÿøì³ÏnݺÕëõ¾ç=ïééééîî¾ä’Kº…Pɪ¡Ä õ”º!@Ù¡”º!@Ù¡”Ý2-â€̃={ö”» ˺!@Ù¡”ÝÝwß]î&ÀB©†K¤‰”†@E;vìX¹›°Ü¡”º!ÀÂA æÁêÕ«ËÝ€åÝ ìÐ –"j–Ëåjii¹öÚk¿ô¥/ —»] †̃ÚÚÚr7`¹C7(;tC€%JEQ“Éä;ï¼ó•¯|%‹]|ñÅ/¼ð‚•u)ŠZèæ¤ªG¡A7¤pøðá;w¾úê«[¶l)bõå 5°ÃE]ôÀ<ùä“ò3###ŸùÌgÀÚµkwïÞÍ0 ™M¿’!š/ %ª†H!âe×Ýݽ}ûör·`YC7(;tC€¥È(¤ðÎ;ïÜxãgÏž•þìèèØ³gÏ­·Þ zè¡uëÖ=þøãF«-ldff&ÏÓšõõõuuuÅ­»p!šjý €E0 )0 ÓÐÐL&µ/…ÃáË.»¬··×duÝ…œ;w®¿¿¿°v/¤ŽŽŽµk×·.†,AäQ ÃìÝ»wÓ¦M^¯—¢¨†††£ Z¬C `ŽþþþöövéñÃ?üÆoìÛ·ojjJÅT*Åó¼ÑŠ- ÖÙËݨ¨úPvè†e‡nPM~þóŸïرCzü /8p`ÕªUÒŸ}}}&+´°¤¾¾¾¤¶Î·Jk,˜8_(;tC€²C7¨GŽùæ7¿ùÚk¯I¦R)·Û-¿ú£ýH~ìv»Y–u:ò3& ©««+ºhúò!„°Üñ<‡÷ïßÿùÏ~çÎÏ<óÌùçŸ/½týõ×ßÿýããã“““O<ñ„²àzggçË/¿¬$h²0”,X¾(Š¢(Êëõnܸñ‘GñûýúÓŸ>üáË <ýôÓ„-[¶lܸñäɓʤª'žxb÷îÝ.—K®øn²0”b¡f7\L 7G#X‰DjkkËÝ €e Ý ìÐ .Dƒ ,˜ƒƒƒånÀr‡nPvè† §r—PvÈÀ€e ,¨h`À<èîî.w–;tC€²C7X8ÕP= 5°Ê5°–¶ÿøÇ—^zi hhhøÐ‡>ô»ßýnÑÞš¢¨EØEQùÈGt_ºí¶ÛŠnƒ¼âü~ iƒZ ý¦P°ÜW¾ò•ý×}æ™g&&&^ýu»Ýþ¾÷½O~µj¢$ìïïW=Ùßß?44TŽæä'j-Y5ÿ£% ,˜ÇŽ+w–;tC€²C7sÿò/ÿò“ŸüäŠ+®ðz½[¶lùÏÿüÏ={ö”»Qóïž{îùæ7¿©zòßøÆ®]»Jßøb–B©¢Jƒ̃իW—» ˺!@Ù¡€¹™™™öövå3_üâ¥Rjj!dddä3ŸùL X»víîÝ»†‘—çyþË_þrGG‡Ëåêêêúö·¿­Üòñãǯ¿þzŸÏ×ØØ¸k×®d2©|Õd³©T곟ýlKK‹²æ[Sùä'?ùÜsÏÍÌÌ(?øK/½¤ZøÚk¯]qÅn·»££ã?øÅÆÏË—c‘*ßÊèdôAŒ¾L(Z5”?Gw¨p;vì¸ùæ›ï»ï>ÝWu/l;::öìÙsë­·ƒÁ‡zhݺu?þ¸´ð§>õ©ÆÆÆ»ï¾»­­íСCŸøÄ'¾ò•¯HA¢ÞÞÞ«¯¾ú‘G‘þÜ·oßÁƒ÷íÛ'oßd³wß}÷Î;o¸á†ššiá¼[Ó~Š]»vIA%éɯ}íkÑhô±Ç“?ã©S§¶oßþÔSOÝpà ===·ß~ûøÃ;vä};å·TÜ—cåkW½¤} 3ù º_¦‘Ó™Ó™óeS—cM—cMqë.\ˆ¦B?`@…;yòä-·ÜâõzÿüÏÿ|Ë–-×\sÍš5¹AÞ Ûp8|Ùe—õööJ ?úè£{÷î•_}ùå—÷îÝûæ›oBî¸ãŽ®®®G}T~uÏž={÷îÕݾj³O>ùä< \  ­IŸ¢§§gçÎ}}}‡#“Élذ¡»»{ÕªUòg¼óÎ;·mÛö¹Ï}NZëÅ_üÞ÷¾÷‹_ü"ïÛ}KÖ¿mƒUÏÈÛ·À2ù º_¦‘—’|)ùº•%ǽïù ÷šâÖÅ,„KØæÍ›?þÏÿüÏ.—ëÅ_¼ä’KÞÿþ÷-Ï0ÌÞ½{7mÚäõz)ŠjhhÈ%é|üãW.|ÕUW>}Zzü›ßüæcû˜òÕ;ï¼Óâfo¾ùfU3Ì·¦kÓ¦M[·n}î¹ç!ûöí»üòËW­Z¥\à7޸馛ä?¯¹æš#GŽôvE9Z+¸ë2ù DïË„RTCî2°Ê®»»{ûöíånÀ²†nPvè†P†aî»ï¾‰‰‰ŸÿüçDïÂöþûïïééyüñÇ»ºº|>Ã0GNâyž¦ç¤¤È[°ÛíñxÜívË/¥R)¯×+½j¾Y–e‡r³æ[S‘ÛðÊ+¯<üðǾ袋¾õ­o]{íµÊW].˲Êišæy>ïÛÉ[(úË1j°ÉK&X&D÷Ë4‚ ,K[®‚ÐX°ä„Ãá5kÖD£Q¢wa»råÊȹK'OžÜ²e‹ÉH:ùÉÖÖÖ7ÞxcݺuòK½½½ëׯ—^-t³æ[3jƒ(Š[¶l¹ñÆùË_=zTõjSSÓÑ£GÛÚÚ´[0;y E9Ÿ'ÖX&¤ Hj`Ya_ˆ€Ò½÷Þûo|Ãf³ÉÏŒŽŽé±ÛífYÖétʯ¦R)e"Ò~ô#‹o´sçÎgŸ}ö _ø‚üÌOúÓ¢7k¾5#EÝ{ï½»víúîw¿«}õºë®{ñÅï¹çž¢ß®è/§Úÿ‘É)H)£å,Ð799955%=njjjnn.o{–´§Ÿ~º»»ûÿüŸÿsÝu×QuèСx೟ý¬ôjggçË/¿|ã7ʮ믿þþûïâ‰'hšþÉO~ÒßßoñöìÙ³}ûöÚÚÚÛn»òüóÏ++@ºY󭙸çž{Œ";{öìÙ¹s§Çãùà?èv»ß|óÍ'Ÿ|Rª}nñíŠþrJ¡ý™|˜w(âúâñøä¬X,Vîæ@¥ëîî.w–;tC€²C7sû÷ï¿è¢‹î¿ÿþÆÆÆU«V}á _¸ÿþû~øaéÕ'žxb÷îÝ.—Kžïé§Ÿ&„lÙ²eãÆ'Ož´žd´~ýú_ÿú×/½ôÒºuë¤Êñßÿþ÷åW ݬùÖŠ³eË–—_~ùùçŸ_»vmSSÓc=öàƒôvE9¥ÐþL>Ì»j¨…X ¡··wppPz¼råÊ®®®ò¶*ÜÂ…húAKs(”X O1U³X XPH$Rî&,wè†e‡n°pÀ}Ê ,° /¹b” º!@Ù¡,œj(Ž"î áĉ“““ÒãšššK/½´¼í€ ‡"î°Ø,Ї@)(…@ ð®w½ë‡?üa¹¥FQÔüní#ùˆîK·Ýv[Ñï%¯8¿­%sÿG²…~S(X OYijB^ÝÝÝånÀr‡nPv膠%Îêëëû‡ø‡Ç{ì[ßúV¹µ°<Øß߯z²¿¿hh¨ÍÉOÔ0Z‘¬òª†êQ¨µ>‡¥Ç6›íšk®)o{–íµêþýûï¼óÎÞÞÞr5i¡Qõµ¯}mttô›ßü¦òùûî»ïÒK/½ë®»Š»x_¸«~+[–—AðÁ ÔÀ‚ŦüÁ!  tÛ¶mS%"½öÚkW\q…ÛíîèèøÁ~ |i``à®»îjkks¹\Û¶m{þùç¥çuó€”ãÝR©Ôg?ûÙ––ùÉX,¶{÷î 6x½ÞÚÚÚ;w¾ôÒKòò§OŸ¾ð µ×}‚ lݺõ÷¿ÿ½y;U>ùÉO>÷Üs333ò3333/½ô’jh¡É?~ýõ×û|¾ÆÆÆ]»v%“IíÇ$„ŒŒŒ|æ3Ÿ k׮ݽ{7Ã0ò2<ÏùË_îèèp¹\]]]ßþö·MlDõ=Kª†š|Ý”Â^î@…Rî¼DQ¦î(ÞÛo¿½råJùÏS§Nýå_þåSO=uà 7ôôôÜ~ûí;vì „ ¾ûÝïþÛ¿ýÛ7Þx£½½ýí·ßþ§ú'£òR*÷w·sçÎÇ{¬¦¦Fzæ®»îêèèøíoÛÞÞ‹ÅÞxã§Ÿ~úƒü ôjWWWWW×üÇÜu×]Êíüä'?©©©ù³?û3“vjÕ××ß|óÍßûÞ÷vïÞ-=óÝï~÷öÛow¹\V>xooïûÞ÷¾GyäG?ú!dß¾}ó7£ûFW_}õž={¾úÕ¯ƒÁ‡zèK_úÒã?.½ôéOº±±ñ·¿ým[[Û¡C‡>ñ‰O455YüöŒˆ¢¨Í-2ÿf´ÿ#¹3bßÙRš7¿¨uëéµÊÝ µjÈCßB8tèP,“ÿܾ}»Ãá(c{ Â;vì‚ .(w+–5tC€²C7åµj0|ýõ×|ðÁGyäSŸú”ôäwÞ¹mÛ¶Ï}îsÒŸ/¾øâ÷¾÷½_ü℻ᄏ½½ý±Ç3߬öIŠ¢ž|òÉx@ùj Ñ £H+:tèÖ[o=uê”Ó锞O§Ó7nüÎw¾ó|À¤º[ëééÙ¹sg__ŸÃáÈd26lèîî^µj•ÜH“ ÞqÇ]]]>ú¨¼Í={öìÝ»×|_8¾ì²Ë¤±™E=úè£{÷î•_}ùå—÷îÝûæ›oê6XõŒ¼}íÈAí»›|Ý„þw¿äÿK+K.ÛŸ]o{ïõÅ­‹!„°ØT飘ˆÌ­^½ºÜMXîÐ ÊÝ´ägMMM·ÜrKKK‹½"„¼ñÆ7Ýt“üç5×\säÈéñ¯~õ«üãŽéÍ7߬zfóæÍÿ÷?22b´Êe—]ÖÙÙùÌ3ÏÈÏ<óÌ3 øÀÌÛ©kÓ¦M[·n}î¹ç!ûöí»üòËW­Z¥\Àdƒ¿ùÍo>ö±)¾óÎ;µoÁ0ÌÞ½{7mÚäõz)Šjhh_U}uW]uÕéÓ§Zk±‚».óoFû€RTCî2°Â”#ßõ®wy½Þ2¶ ŒŽ9’Éd¤Ç^x¡|W À„|­*Šb8þÍo~óéOú©§ž’4.—‹eYå*4MKÙ‡#z<“ÍÊA°Ùlr–˲ª4çÎ{ðÁ_yå•ŽŽŽ+¯¼òCúÐM7Ý$u’VüíoûÑ~´¯¯Ïï÷Çb1)žõáؼFm{å•W~øáÇ_tÑEßúÖ·®½öZå«&´ÛíñxÜívË/¥R)¯×«Êºÿþû{zzüñ®®.ŸÏÇ0ŒÇã‘—áy^UÇ(n`O°’eòAtÿFej`>ÕX°œÅb19€…9  PRŠÐG>òitÛG?úQ)xTSSsôèѶ¶6í*ÃÃÃ6èÔ!ª««›™™©««“Ÿ9wîœrmÐdíÚµÿõ_ÿ•N§{zz8ðØcý÷ÿ·ªtúûÞ÷¾5kÖ|ýë_ß³gÏ׿þõÆÆÆ[n¹EzɤFÞÿþ÷?øàƒ=ô RôJÉüƒŽŽ®[·N~fttT»Ø /¼pàÀ9±«¯¯Oùê¢Up6ÿf¬×á¡Ö­·‘"F Z·¾ÜMÐèÃBr<`^Üzë­_ýêWö³ŸIů»îº_|ñž{îÑ.ùñ?þñuk`uuuýÏÿüÏõ×çâ?üá­¼»4›á¶mÛ>üá¯Y³F;™àC=ô‰O|â¶Ûn{òÉ'¿óïÈõ¡LÚi„¢¨{ï½w×®]ßýîwµ¯šlpçÎÏ>ûì¾ðù™Ÿþô§ÚÅR©”2KKªø¾ÐÜn7˲ÊE|3ºèµHåM¯4¨ú´)©åj , ÝÝÝånÂRMÊYÆ–˜¨în°$ @^E}ñ‹_üâ¿(aJåÉÿýßÿ}zz:‘Hüîw¿»á†¤%¿ô¥/ýøÇ?Þ»wo:~óÍ7å‚J<ðÀ½÷Þûúë¯'“ÉÞÞÞGy$ š¿ï5×\óÓŸþtxx˜ã¸ñññ'Ÿ|òšk®Ñ.vË-·´µµ]sÍ5MMMõW%?oÒN÷Üs(ŠÊš_V6¸gÏžoûÛO?ýôÄÄÄÄÄÄSO=¥[¾êú믿ÿþûÇÇÇ'''Ÿxâ‰þþþ¼í)]ggçË/¿¬Lï(î›â €ú0„ ²}ûör7a)»XP±ª»!¥Pî¶ÀrnVÜtÓM>ŸOÊ*Ú²eËË/¿üüóϯ]»¶©©é±Ç{ðÁ¥ÅV¯^½ÿþÓ§O_qÅ@`×®]rDéöÛo¿ï¾ûþú¯ÿº®®îºë®óx<ßùÎwÌßtïÞ½?ÿùÏ/ºè¢@ ðž÷¼‡çù}ûöi£iúóŸÿ|0|øá‡m6›ü¼I;‹c²Áõë×ÿú׿~饗֭[·yóæãÇÿûß×náé§Ÿ–¶³qãÆ“'O.NÖO<±{÷n—Ë%ç¦Íû7&ª¡ü9Џ/„?þñÊ ÕæÍ›[ZZÊØ€2úÃþ ?¾âŠ+|>_Vˆ¢øê«¯ÊîØ±C;I6!„ã8ù±ÝŽº ¥BwXlÈÀ¨úÂåK‚¶çê°Þxã ù÷ž÷¼1,€Š…!„ ,(HWý@ –Š*î†E°ØsQáæº!ÀÂA tˆ¢ˆ"îP*®ú¡úñã*VwÃ"X침pó Ý`á €:´'ñÈÀ‚e XK‘•ž‹[5KX C{,[`,EE°Ð»*X C{ûÒ`.‰”» ×´°TTq7,XPè†e‡nPÅÀÈÀ‚B –» —¸°TTq7,‚•XèÝ0ïÐ ÊÝ Š!€:P uÁ”» EÜa©¨ânX+Á)ôn˜wè†e‡nPÅìånŽãb±˜ôØf³ÕÔÔ”·=C£°Y)ÐŽ"îKXå—L&>,=öûý—_~yyÛC0„@,€¥Cª †–Ÿò$»BΞ1„ ÕÝÝ]î&,\âÂRQÅݰ(âenPvè†U Xå§88¨û’IÖ¼¼µòËa&‰‚àñxLÒ»ú©Ñ£­Êgœ‚½ô†B)”?˜Å¼Î4:Wþžÿº×$ ,(ÇqRôGEš¦•9•À<‹ã8©*–Ñ&Oâ¨H„×^{MþsÇŽ•Ç1I`)¥™(ž´s (Jšü’K.)ekP•JÌÀ*onþRqôèÑH$BEqË–-+V¬(w‹`‰©ÂVef`™´Ê$k^ÞZyÆ055555EéèèX»v­váP(‡Çé ™[:eO“ù.âŽ=;¤\å0¬d`•}¡r7¢L<a ݺ‡ ‡¥éD! Û¶m+o{Tt»›2Kw- !„%J{ó¯ˆ";ét: ¥R©d2éóùtÏçÅÂe`•~œ•Có„A×Ò `I×eªx+_*•’¯(-VgPZb¿x#eBøÖ[oÉ‘¦K/½Ô¨—I^˜Ñþ1™LÎË•§î¹Ñ·‡ƒ«fTÏ3Ž )9›Cõ% 7¤š,BÕre`½Wy3°LfXS ð<3õe¢ÄnÈó¼ EUø<âæ¡(£k°`qÌûÑP{îTD+ ž>}Zz<33ÓÑѱ@i\XF;–ãÇOMMI‡`¼` IDATIR F[.ŽòÔ÷P«[qÝPÅ"ê®(-ÎBQ_}õUùÏk¯½viæ)÷iétºŒ-%ªJXeBhñDߤUŠxþ´ÛÅ;”Ï‹¢˜L&K»¡{6jôRõÞ$ig 2°Àj`-Z{$&5°´Uöä ¡º•Ø ƒÁàÉ“'UOV`R32° ’i»¡ ¡PHŠ:9ŽBÏëT}°¸s'ÕyòÌÌL}}}ÛÉËäúßJ–´Š(ŠÇÍËWÒnpi]öƒu¥Wp×þ™—t¨èÕ­Sª8Žs: ô^ AÙ‘E¨ÂÖ"Ÿm[ÜU™°Fj¦ß<ï !ÄÎÛZuWl”_bÆèDGE¹ÏÓ4ír¹Œ¶¯{FnÔé#$¬êy)«ÄáH`A)ÊÀÒ½‡,¼ÜËUÎ8¾aßÏgqE£±‚ `¶(ŽîÐ üýÌcЏÃ"H¥RÇŽ“;ŽB/­ç¥~¨j­ÉÉÉ `Y<+6`i›oÍ"Õúû2Ä0L(’»Ýnó,?“ßôãQ¥1.Z©ß%Àâ8NÙ~d`Aª0€%ŠbqùÕÅQîÝLvU&aµáÚìž”³ñWRù’É“Éä[o½%=v»ÝW]u•Ñ’ºGh–ec±˜ô˜¢(9LÆó¼HHR“%ÕÀ"%ì%AP *ðº*YEÕÀR¦}¬šq¼è–Ü›†ÑžÙ×6Xnto„VàŽÚ<Ëhç`^úÝ|]€R”Xg^®ŠU?õ`0ØÕÕµ£K¬…,¨H$rêÔ)éq]]*€eýˆ‰Dþô§?Ic]ÀE]D±RŠªaKë4Oõ-! ŠP%,Õ>"“É,Z«Ä!„%Nøs§xÊjˆÇú(kÝýo*•’çi¢iúÚk¯•NÛYRÔ[F DZ¤ŠÞ«²B!Éd2 QEQ”Ûí6™*_$©­­µ¾|<?xð ôØår½ûÝïλJ…ÔÀ’þœ¯tB‹p-£Dwí©@ `Ú U–aV‡š'ÀÒ¥í†%Îø¡º:-®KªÞ—eY–eM’÷‹£*!TDËääv!†–¸A¨XFGCåå˜6îc=KêÔÒXW¹ƒ—1kÞh!¨¾¥t:-Šb%Ϭ ¨JXå E‹¢XâÂqÿL†V\ÁÚÄwšGÂîì"GÚ:‘;Áíìì”—4¹I¥m¤öI£Ëfžç“u¤‰B(ÂØYoÆUôw« `…Ãáp8,=niiÙ¼ysq[†J088xÁX_^gaYÖÊÑ«¢j`ÍWVÑQ9£ ,U,R‘X …vCÝ– •vrY5°”‰õõõ`U m7TÍøQh‡Zˆ ,²0‡óëÿB3°J,Hd¾q‚ ¬ªft4Tö&m°ÀR.åҼĚ­XÒ,m"äBÓ¡ºUIKµX´žl}O§:ÿˆ;ŠPÁ6\;­|ž£„q_xÒŸR49ÊLf§8ôz½F,ó +Gh¹²• I§þhdÆ‘)%€e^\§K]¡—ͪc:Λ‚·@C8@Ó´Ô}.¾øbmòæ‚f`i#àʪX@ ïŠÊ?‘µœ•½"Æ¥(xž¯œYºU)Ê祥d`-fF†y",]Ún¨=^4J`!j`‘E `UøBd`U1££¡ò7PhÖØØX2™­ô"O@O?ìJÎÀbF¾Áér¹¼^ï‚´Ìíõ`:F R)§¤%Rí#m"BëWÕÎåõ5ïDÝêD BOñÛ#°„¸tßKû§Ñ†•¨Àây>éÒ¿†I•6¡6 –3Uœ…a˜‚Xóñ”æú”ÿÔ½®0ª"§Z¦¿¿_¾þ_»v­ÅRqÚV8–XétÚ(€e”¥AàÚÌ ‚N§¥!Eº ”ÀJ§ÓÃÃÄŽã\.WGGGÑ›2êûó˜Å0ŒT´Q„šššyÉ>‹Çã###ÒcŸÏ·jÕ*óë(¨&ÚËÚRXVOCCCýýýv»¢¨ÖÖÖŽŽí©àÉ“'¥f\xá…óUºÄ–4Sü'j`Á¼+h¡êÏñññ™™lÕå|V‹À*bàÑÄÄD__ŸôxåÊ•]]]ªúúúV®\¹$íE:Ã0555 ý¾PMª3€UiXªyUEŠÄ]ú%ëDŠdl¹Æ§…Üå„y–™É†Å ,y;)Í„i"¢oÙá”Tq+E¢–•º'4Ú!„£££ò‡jkk“On¤ŸF Ð~(‹£ƒN³´ X`nbb¢§§ÇdÒB©TjppPzìv»K `åM°*½Ö›o¾)?å•Wz<ž¢[+K&“£££ÒㆆU ´º•˜±k=ohjjjddDº1Ãqœ´¢”v¡]K¾y3—Ù%°ÌÈÈÀ‚Ò©Æóʳ~:tˆaÕ4ëÚ ËòcÝ2‹VĽˆ ¬¼%›ƒÁàÈÈÈúõëÛÚÚJo¡ mk1! ¬’X¼;¤Ú£%Œ¶Jº,­ `‰†…?­ÏèWPK„„b BÆwd# %f`ὺuww45x¬…B¨{º<33#¿Wmm­• ,9‡Q299944$=nhhضm›Q´ç@˺e`!€µœÚ %y÷ê…þ„b±Ø‰'¤ÇgÛ¶mÊ-ä};颢Ð[2yg!´žE1“É(—L&“óÀÒöt°ª•¶–˜—a}õd2)—•I¿.“SÁ… `Z«ˆ)‰TzzzÆÆÆ¤Ç]]]+W®T¾Š ¬åÃèh¨ú pg³ÙDQL$ژūËyÉÀEQξWÎoþŽæ 3jŒnG㸞žžÉÉÉM›6šŠuòäI9&~þùç›Ì©­›UÐ{TIK¥Ò†ªö,Q—ÎàA«`eHÐÕü°äeTEÜ’þxmv·Â8J `!«ºzÙ¬:\3 ãõzW¯^­]8!¦ìĶCuOgOœ8!ǧ®ºê*‹EÜ•Ýß¼J¨r-í }qXÿ×óǧƒ?·‰´m%}1µ¶c¦ÉÊF Ê½" ÀJ¥Rr­ i㪖ykizr»Ýîv»kjj6nܨ|Õè8;/C§¦¦¦¦¦”Ï$“É+V5Õ:mKµ—¨´JùP4m7,1ËzZ‡î\êƒÖo‡”ÂmÏîG(BꓹV©Öe`á4bYaYÖd8ÏñãÇÛÚÚäAø}ÁC+NÙ…U™Ü¡tAXª“lÝ ,óëj£B *Úr!E¦Ž\È@êª2$?‚¹y`©ÂÓ,Ëj+‰˜k¦§s“óªzß7ù'¶g°)[ ¢(Q×Ì4z3®¼Cn°›} ¬³gÏÊŸnݺuFŸ+o‹eYŠ¢ÌKæÁÒÂqܹsçX–-¨ôÇq§N’SÕÜÜl^XJÉ$kq†m×¾´@XæWé`-sÚ ”•–´W79PÎKËúäò¤¨VÞü%Vã±€Ó­…d(Hu°$ʾÄ0ŒÜÛÝn÷|u’â2° `i2°r/YÎSµÀây>egÅÙïÆÅ9}™Üè”=­}_ëRÝŽ;f4i±–Q¶°  ÃD"‘h4J‘bXoºOò” š÷`¾N¸uOgU‡aÝ–ùï¹è ¬âÓ¬Ëй%ûœ{YèzËGAÝP&õ‚˜‹®™V½Ô¯«OùJ `¥ÓióIH”X–U^K¨úÈ©ÌÀKìë¤uÎ*žŒ³c¦Iî¥ !ÔÊÀ‘¹jÕ*+,Ý ø[o½E©««»øâ‹Íß*œÜ 3™Œ4ù¦JÞ–üXEmnB¡÷‹9„Ð$Ö¦=’J¦Ö¯__WW'=9¿¬¼XBXÅt†ÒvÕ3Ä4€eT ]iÞ3°¤?Mnf,t–Åm­ný YÂ0ÌÔÔTsssAïËY5°”Ý[9©ÐÕW_½8ËT{ë,ž6ܾŠ]U‘#Ò–APNAèeÎIJ$"!„±eDJD ,Ð¥[»Êˆ6€ÅSBÆÆñ´xnrP¤D"é´½ÙÝã"„ÄsVY¸ ,m]ªE `I4Mšg´®2ýŠÌη`²eTަiÕ´;°tÔ eÒ¯nÒ9Ú: z‰§J`éf`­«*A­ì}gÏž=%œ! êU¢®$™§"îZRúŒQEyÕc+·èå7Õ]¥@ª€Ü J”©:‹ö'Qh(ªŒEÜÍÃI±XŒÌ=Th+ É¡‡††¿ßo2ŽI{‹XUL÷h¨ÝëZÉÀ2ZW&_±Z{OT˜;à 혋X›·MÙ£÷"zW‹…÷M.QÏž=+ú'`uÕÀ’û’*âÎqœÀ …BÒd%v»½¶¶¶µµUw;&ŠBÈÚ8ÆnµÆ¨é2º–T Ì`Oöq#×Rmâœp•êGȲìÉ“'¥Çv»}ëÖ­©TJ®yg²¢ŠöVë©S§|³t …°TËD£Q)çƒâõzÏ;ï<“…þL:Ù?ðÿl B¦äœ;C`EË1€%ÿi=o9ï[èþ©|Ç)ôOmý…nŸ§çì¡Lv²‰DÂãñ¬[·Î¨I"%žjÕ®WEWôöf£ Ók²ƒºÕ‘ðŠdf›Ò“õ©c¼x:ºiMMMKÁŸÅôÆiD›žž>{ö¬TJ&.$_‰dú ®Ó3Í6QD–v-+«²@C34ÏÑ‚] UÑÝR#«O8–H ÃX `©Fžf_š›¥ü}Ík§hÐ!4¯¥üSê’Rü—eYÖ¦³bÜÁð” _6ò̹òÅ¥–´ï …BgÎdê­­­çŸ>)!‹ã¸‘šÐ„?"P"-Ήn§Ói°ªCA,ŽãäÄX¥Ò3°ˆÞ+k;vLE»Ýn·Û;::¤Ÿåäää‰'¤êëëY–M$F[V¡2:Í›¯–<’@ùîÊ…‘ºCå'“ÎôÀìÄë’5‘ƼXš?Ô~–2%„O´ ]8¾Fùª6€¥Ì2–îXèn¶Ð¾0::*?v¹\ï~÷»MVÑŽmÌ›Få·¨««S°ÌƒÅòŸ“¾Èû¹ŠeK¼¶%ž½…ãlë§I(jhД Ш¶–Ýn—»œQQ=ùÏÒXÖ3°zÔ‰–¶O[=¸&“Éd2év»U,åñ{Â9¢)qBqòö@ÚM ™öeÏà7 e.=:@é8«\6N\ûVÍ%7ð1!ÈÀªvÝÝÝÛ·oW=)ÝR–Oʇj§ÿ›úß“¾=QjЄž§Ÿ“6€¥= k‡.P«è!„I—ú 'mÏØÙlØBîz`U=©*ÿ§Vf§––Oè!Ì]JyC¹— ¦1ŠD"ª'µ!-ëXÒûR%%v¥í¹7¥gEÝ©ú”O:#7º(M¥Rƒƒƒdnm”9,ïœëð 7¦l­nf‡õ¡‘ªÕ3™ÌhMˆ£ùI_¤5>' ‹a)½ –(ùhXÐBÕ“¾È´7îäía:M»ùZÆk¾ºÄ$Ëä6¡ê¥ãÇÇãqUܹ¹¹Y `);¯jÀ ®¼¬R†”e>w0TÝ“Rí¡'Åç„'4… ÝœC~U¹nÚ–ékÈŽà z£rþrOãèy‘õ©Üîª~­:À±,k2©‘ágË÷ÓÕ=îkOnÍX&·´Û·ÀŠ:çLŠ2áLøs' uŒo``,°¢šX•“’ÃõìNVpTaWéÚ(÷qõúmKŸÄ\É´-»ƒ^9m¸ëÌŒô“K j—NªŒöD²¬ò–òh ”"iBHm2÷ëéjvÓî”ÛqJräˆ:ýÊÎ¥ÓiU1Z“–ö%éX:^³Š ’Æug³’#®d}Ê'½µÑ±&™LJ¹Æ«V­’OÜs S$äžSÇ7ìI´H ”É…qqX„Iv:ìNBÆ3ªÊ`-uòÑÐÊžŸçù³gÏÍoéìŠñ¡Ùs¶ \Û%£kuW7Ù²RAC•)œ2ù„YyæœN§ áÉäû7 ¥ÛOåÊ;‡XËŠîI©öøòJà­r.=VÍv-=366‹ÅV­Z¥üýèÎyB)ñàªÞ÷½PΫUýÆ´„‹ËÀ2¿¤Ò-¯1)klév.åFæTsÎ75ªQdë:Ñ<Ôx.033£[@© Xòã¼5°”§‰ª¾Ç0ŒTR—ËU__¯ûvX§|CÂì`@/ëZiLÙÙþú)Ý…•x›Á‰øÜ4׎™&OÆ©Ûù‡ ‚hò­ƒ)onÅêIã{t"oËUå±<©Ü¶ìÏ F‘ÕxÅM‘475›SòÅ~¿î˜îϳ? °h¾à!„ Ã$ é§èõzý~?)¶VXºÏÀIMHK§Óét:åO‰¾ì÷wªÏºú&‚¾ØÆ`;%f·c·Û‘µ˜ßïÕâ8.ä‰õ×Mqz ¿ª–jEÕÂétZuV=Xüßö¾ë‡.iäçœzt/³¥mJÇë4[±)Q#Ÿ ËÚl¶¼¥Ê;Ïrƒ£®g›Ûû(!쎯H¤¯üb“Éä¹sçAÎò~.¢éìÇù>b#„±@øâ±åK`U +,Žã”cd!o.œšwbY™I–“Ű—ÑNޓȧК?»b„¢(Ý7]]!¥öç-NWJK¹¼¶V=˲‡’Ó4½qãFÕêÊ&I\ºbÏ•ƒ%Jµ‹yãçÜãÇÙ>7!„˜&€s13ã3333µµµÊuC>ÃY ÃîÄX ¼2šM#2¯ÿ(ÎénÇü@–÷0g%€•wƒò¤gDS@À|¢rãÊÛÀÒ‘ÚȸfÚ@ òª¶}´nK÷©(Š&Xáp¸§§Gz¼bÅ £–ÑÕf*•ššš’z¸Ûíöæ‚M]ÓmƒíwÒJKºxÐRÕšõf\kf‰iÖ¤?ÂÎ&¶8y{k¼np6&ŸMûs¬æPîK¼¸#Â$.x'Ûà†‰¸QQj#¸H^žÔ¬Ù‹Ï€"‹®©¥§sKG:³™iOlÒŸ½DŒ¹s¿"[Ῠ±±±þþ~éqKKËæÍ›Ébe`Y `©†hÉ+Æãqi'öÇà[¯Õ%.B\„èÏŠ–u®~’RÏøZbµ¬åD[qÃ|yŽãÆü3ƒuAÝW¥™p¥IÞl#Õ{ Öß<ïŒH‰h?vÃðåæëJt3³¤OIJ¬@‹rŒ‰Icª¦—dï¦('"´rf¯}òè\L{s,åZÉdRÞ™Xù\ÚV²¬˜+w2~Ö-¿deX, VöüºË¤íe^mÊ1§g-èB£%µ¬)¿~ŠÄÉÛéV²À,Õº&cµ‡Wåê}}}ÙÏrÞyç­_¿Þ¤°t©1çê& !ûmÇÞKm!¢z€Q ySÍ¥ôƈ±¤¢ó ‚033ò¬Ýn§iZUËx2°ˆ^åŠ"XÊe´¡7»Ýg›ò특D Z”g¢yϹó§üQBÈh qg¿çžÆ‘þD"áóùÌ? ,sË"€¥›¥:H›$>˜œ’êÎã@Ót<—Ë¢{½ÞäêÜîIšrÈ&˜MªšÛ%(ê|íýÒżj–±wb i$z{4ùåøÁó¢+6Ûä–|ž$HÌî)jýÿóÙýo½•êû™'-B‡¨¨–6KZ ··W‰9Õ¢Sâ×Ä@í”ÀÒ¾yÛ`)êîî¾ôÒK•ÏXB8˜QGwóÆ–K² XÚ`“89^7z,áLBJð1Ñ÷NH}'‘N¿Ö1ÓDD"ÒôèyFCuOåå ,–έåʪ@ʉóMTù&Òƒi·ÎIÐí"m&ÝGÅb‹µq#öܬ±@xÃtî0Š ¬¥N.¾£ü§+3•TXÚ-¨Â©º,Žã´‰Bª_©\©'HØàŠàÚé&¯3oÞö½!„Êâ5ZÉÙ6ˇ˜E¨e2\K;½£²IÊA®yk`ñ” ݹ Ú"#5¡öHƒ6™=îdDB¨¹,Þ\ÁÄÁvZ¤‚ÞØ”/{²Ê(†º ‚044$nW¦/:+{X´gúê'•Ï7%j“ÝÕµ¬P($O,¨Û=Mª^²,FåUT©‘Òƒ˜3%RÙwñd\mñúu|{*•j‰×½º6;/Ä´'F‰F£`¹j`ɽQwàƒj—Q\K7Ÿ™¦é9õ•Sɤ=÷^ÞŒ›¢šfÕˆHGñv1»¿›ôG”;MYÄ“ ]+'l’Ÿ±sOðäúäôÚÙ|®uá„'3ÈÍd7E‹Éæà;aOü]ÌŒôL ·“!Tý âpØl¶‰žŽÑì¹^ûcv[§m>X°Ô¹Ýn9*$MÚE X~F°ñ³}Óݪ³–t[Ì ¬¼ÃµT«ËMR®ˆVuЭ¥ÜEÔ†ä;7'š†ëS~íÄY<-¤ioÆ¥ `…ÝqžÊ.éeuBή—Xi‡"LÆóÊ_”ê'Zb–j8!„"dM¸iÛø+¬T*59™=.+ëaé¶Ázõ.bÀR&¸Õ0BH H¥RM‰Z¤¤cbÊÁ²vN•Ï ÷“¤ IDATUm,ÝŠtº§ÝªŽ'×9–þ,%‹Ì=N§ì¬|ªêäìÒÜö3°!<-Ø…lK{s@våμ¥" Ê?ùTÿ…Çû.œ³FœÒyZùLa š[ !6›m¦ÞOFÕéµÉकْåQÝDQT¡åÇê|~OæŽ̸ÜNšVÝ’Rò¥s#k"Š ,›ÀÀRî2™ÌÁƒ‡êTUÀRe`Å\LoíT?šjš"„¬Œ5H‡asÖ3°tÇ8È«'¬53MÞL6 @jEÒïàíc0!ä\ä”AÃÚ¸±šðªÈ mŸ¼mƒ%J{~l¾üYaH¤ç\XÖ¤½ÁÙéh•5°ŒXÿzëÉîKs•´ ÷ŸihÖ}É|aFQ£ÊÅÛm"]+øfè8!„Päxë`е;‰ÓaãÌ÷ Ú ,g<‰Öink_š"ÇÅIØãùýØqÛŒ¸2šçNL¬SPÐ}Ó‘š9©”“þè;M# Œ_Ê—”J‰´sƒÊ¤ìŒ‡Cþyë^Ý)©bÊ%26ÖÍewøÒ ¤‰‰‰õë×›Œòù|!_¿òÕ/ž7€¥<)çôTe`1v6:;ꇩÁvŠ„3­MíŸß˲Gå8N{¬Ôf`©¶¦½*–—W.‰rSþlúêrõ|ÞøéRt„˜‹ñd\™LFî¿ÓŠøòŠTöÈÃåîʤìsX&¿¨¢XÒOWºÅ¢$Ò_?5á\Í_¥»Šòϼ—º&X'NœÈÛ<‰¢‚{î|»†õÒ4í÷û'''i‘ªM{¥YM!3®„ê>€Vµ°¬!ÔCA^½” ,Õór‰tBˆË^ËIUye(ÞE„´-“±éïÎËØ2nÞA4¬a’KÝ·„ni#„Ð4Íx›å[è2v&¬·’2°ª›ªx³œß¤.ÇCs„š˜"€åtÛl6“ ,7ï°ó6)ò•t)*g™VôÐ¥êòºwx´CUX“¾È¡†^Bi%„šP³ 6rq:÷¯äè>¯ï ýPÊ»Êʪ(Wž­_9¦¼ f!B­‚³é$5LOkt…È„SOû¹Am˜•kŒš K‘öG¥-æªtFV=S“ÎÅd­q?î{ÿ-!$´ ]15v.Ãê€2BÈØr¯:9;!d_› `ÒÓ8Ú“%²Ýµe%©5i€6+âJð”°a(sS·v·PÀ­àÞ€ai:éÿq'GáñÀÌœöPÂÑÖJ¤®^ß1Ó$èt¹\[‚%C•¥û¼•!„„”#£ `MOO ‚099ÙÞÞ®\Ly©«« ÎkT¸GÙe9œâ¤Ä»ÝJq”H\†2áÈïÔòo_C‰¸“¹âªÎb2°ò!ä8NžXPżP=Ñ;èëf`±,k¾Ï„¥Kþ%¬j ìéÆ1ÝU¦½±£-;"Û¼\¶ ½¹ªÉì>ß='€5g¦N“Ÿe<·˜¡¯"ýtÃ^ýÃã`ÏžëuÙ„M›6Ùl6Ý“[U‘8ívL2°Ìég`¹”XnÇ#ïkR¹VÄŒG‘y,Ç–n1`IW°º·C­d`%ì¹³—Íîàh’&Íñ6dÑ›ÞU)âIºãµdî.O ¹—v”t7‰šÍÀÝç½±m$éd›ÃÜ…g³Û¤­åZ#Ë£º©ÊRê°xJ~ð5Š«\Öå¢(ÊüL1q‡m BHÚ‘ëƒ6žSÅjóÊ;–Šd`)ŸI9æô¦Ã­ý‡[û !­ñºkÏm6Ú¬ö÷/íRTÏëŽ\X-æ#‹¤u*ÒqVÿXÇœ¿â„L’ÓïhžÏ2ÌKQ$ÑþØX–u»s™Œñx|ll,“ɰ,ë÷û{kÕ¬@Ú#WâiPúX‰Dâø!d¸fš¬!„EreßêúHÀéÍ8#îdÔÅB.ëIÕÅB-ðcƒº,ó ,Ö‘;”K¥|š„Ú^2¢Z~&3`i3°Bž™›ZOØ0MzS£É× !"%XuÆ&PçE3™ XKW$©­UŸÍX¯ê°)ÛÛ0‘¶«;™cÙÈ2EˆcÚIW°”[¦6Uщ°'!Ð"-¨Ïf2°†ëCô¿#W”x;ÑK¹Î·¥9^;È]ü·$²ÝÍ›Éýh“Ž´T<¨ Xy³NL®êµCU´ È•—ž»Y†a¼^/¥Lî†JòÏ»¿n’Ìí¢âŠÌÁÛäŒÍC%¾ä>°9¿) sóžV$ýÒ7›ëàÊ:ÅæÉD&¿Ø¼?f‘ʹ$]Óíçê'¤²•"!ã±Iizú 6èNΛ·¿Å×¥-¦aN¿–;w¥P“ö*XuißÉÖ…œq'3Ó™t:ƒ ˜¨æ–ÜÙTçÄÒŸÚ”N“S Žãt‡e`Í©¥ÈÀRÝm-dTÍÙàìì¸iù›ˆ;ѯ%„œ9s&K%êë:!¾2˜Ý‰9weW}Ô›L$ÉÜy”êRÞ¦DMs}“ßï'„Pk: !4Mg\îàšK×ylS?«`™M‰*C÷ꦊ¼ÈC`æÜYýµŠ'Ý^¢©j©âcÝÒ™Œ#ç¢õަ}}}RR´|m,ŠâÆ¥–X‰¢æ-âžtèGÁÌãËò÷000‰D’É$Ã0^x¡•ª:òIFÒž–Ï·¼œËi!g=OÛ²;uêÔôô´öP¥ `…ÃááálÐj$=©SŸ^{Y§M 9Z rFÁ&‚Ñ Xyd«2d[5çöYv¨vúÕ§!)'uãþìmÕÖ‘L&£l•ÜTíöåX¬'wqòvBHÑ™ ˜¡óü¤çÜæ2{ÃÜb™ _$Ìó¼îMz#e/9Û8~^´Ä%mppð‚ . sÏ$-f`Mú¢'š‡´Û<7·Ts]¿¯•ÔE"†a”ýHùË™vFåJ=žÂîøŠ¤ºðƒÜž)>ü:u$Ô"„dl\TÔÜgí¯›ªKù†jr±Ú–xvÎ{os¶ìÌ”¶eܼÃz–vÊí’æ¬BK:êf`°ª‚Ü eÊ_ÈhÀløHk¼nhvæ+éÎ+Ks¯uœØ4ÕN‰”|Ygézf6€¥ÈÁOÛ3rÑ:¹&l¡òf`E]Iyªzç¸x´cÂ7#_Ö1öŒÀ’¶Sb« ô+¢{AM‘¨+ågÄ+% !›'Gk÷pßÊñqBHÍXªi({*®Ÿ&¤3‘H €&ª-€e³Ùä©^äŠæÚ:Í<Ïëf`ɵ£0òÖ·S®8g¡CYÁ=×í¢-CòŸ.sTv™¸3e²ØÌì>+ʱ¹‘ôdç+Ÿ~¤k6}ð3§OŸ!„k<Ù¬¾÷NDò—'®éšÍ›k[r“ÁI92É€'ãLxs;2:]p–r.¨ª ,©$–Çã™30aö@[›T°y;ŰäŠèYòÐ%i#QgЧ„õCìì8ýw¤%;fW‘ÿ[èßÐïìlhh(èMaY©¬ÖÛo¿ýoÿöoÏ>ûl$)îަiš¦å.' 2Òvè‹Jy¦"E†:qXЬ !T^Ê“J›­ ‰£ë(‘š˜˜P°”G«ÛуÞhQÏ-­uüøñãîwHzJ¤:§[FêBÒýŽæO6æ.㻦ۤkx§ÓÉ0Œ—sEÉlË‘®Où¬!´’ªo~É]hžˆIVAÛJ“Éd¢Ñ(Ã0,Ë:Îpó_‰ßBtƒ³[&W ”ÈÑBÈ {"-®Œ5tÛO5ê—u—5λ9‡|‹‚±³rabå2¾£Qä„MSíÛÆ;¤Çy3°”#’>Bˆ²«|#§,XDQ–Gz—ã­C„ޱüÛ¡qÝ©#!·‹¬þ }SX>*+€uÇwÜzë­û÷ïߺukA+:‚‡¤#OÛãqZj3uÁ¶õÒŧö¨Éqܼ°´_o¡â²“Ëez[¬ãžBh^Ë•)‘ç\…©ève«¥Ì `éÔ¾©™½WÝC–C Îõ(Fré°†‘o…ùý~¹ÖOóhï”;È1ѹPQ™&¯`X?*Ÿ*‹ÌžÿÍ `eÏ `ùˆÞB·Û-×[õ(~¨¬ƒv³³«ÏM2:92áC©ÓÉLr¬)›ãàm‚(ðŠ™×6Ûi‘"z5°TXFC !1WÊ<€¥º©+Šâd,˜ð¤†&t{T?Œ+ï©”{/ërdrÒWl§7lŠ9# ›D^íPWÈò²®Om!„¬˜•Xv.£,ÿÕGu°“þL8Òã™ITNé—xE÷ʉÓ;â1©ŠGÊEóbÀJBܬèà²=E°ÙˆËÝÜìŽÅbápxãTûpÍ4!d¢Á¶¹?»–¨7ˆª©½ ã„‘ˆ!!P­ñ\ÀWšòIºeEqq¹pžazúX™»k"þ€Ý”§&„d¨ìfãf¨nNæÚ–šÚºP¶v5½ÿsN ìv›2€eË´Os›ûÒ„uamíÿ® …8Žû@ðgSoé3´s€lž3ø–"+CU§‘ÊI¥×O·:fÒOýT͈t…ÌØ2“¾hK¼6™LF£Ñššln òh5$N í´er{¢ÑèŒ[ý*%RWmXitŠö“M³q«Ù3M‡`[ʦêK³úúwF¥›.y‡õÉ XÉ{2r©öQawB5a‚lõL£/ã2ª… ¬¥. Žã<±‰ 'nÐÿ”±¾mNBþÜèK€ §Í‘`GÇÓ‘Óö>·›H?K–ΞY*ÓD¿Ÿèe`)ÇÖy¹Ü㌃rÏv\anðÔè,ùXüôo]"DÿΛ¤.åm‹×½ ¬9³Ûxθn]Ì8Ä,µMõ-¯wd“¨‚íÆw.s:Am£–]¿£|>Bˆ²Jc*@Jœ{ÿ=éL¿Ó<²ir%gÏåØ2l¡uC`iQMÚ%]›½ÝÞ7Z&„(Rú%qB‚gswoŸ&n¯áBŠ$œ ™Û¯OöH!É@{´~´&®Éý©˜ú<^5ˆ±e†uvDJŒ(æ0rϰ¤äA—ªþˆ)m–P~ʰÙlÊDi9€5åªn¡oot×dMe¢›âY;wáù Ò+}SsVŠ3®Ó`-]ÝÝÝÛ·o'…qglfö -R—Œ­•ïJz½^š¦éx´i<Eò³G¬‡Òóû#WºV¤CÓÒÛˆD¼ì`6vCŠ"d Wôá»éñÈšÝloŽ×Mù"ªu›s’èÝewýÃДß,€ÅÚ¹þÚ©Îp Ñ;§ ƒ‘HDš¹;–ˆEVdˆ!+˜Q×áb{ÆÍ9JÉÀ’CÃþȽ>%'ø+× …BÇE£QiŒ¼'çMæú/ýî"MË·]'}‘°;~ÝÛIJ !îX„gR6·‡è©¬V¡zÞ|Á~ø°Ñ««ûzDñƒºG»L&£}ÞJkbb" Bü~]&ÓZ“ÅÑ<;§ÊÃ)‡Z³#e`q4Ÿ¶³ëFÙ¿úɾO=íh‡âq,\n¢¸ ¨Œ ÈjÒúX¹!„¼’ðPu±ìg“qÊ™Ûm©r¼Óé´Ïçãy¾eÐ,:´« °T¨*Ê ×Nï_}ŠBb„¸Èƺö‹Æ;!œ^ÖÿÏÞ›ÅH’eWb×vó} _bȈ̌ŒÜ++³öÊêf» ’]á2’ ø!a$J‚ H# J‚>ô%} 4æg0P"G²G6›Åª®ìêÚ³*÷52–ŒÕ#Â÷Õ6}<÷gÏ77÷ðˆ ÷´ƒÒÜÜ–gö¶óÎ=Wm£Àâ J”T`Õ9:„ã®XÏU›UhÖÃû˜À²*°ðv…uZ•u°T@1‰É `‰V–c;§ö ‘;ÁB¼Ä¿m™Ôrš<°üfK¤„q6¹.|àVze¤ ôQ«È^’ÐáF.—#³Â£7 Gw”ôŸ~øôñ¥)Y–m;Ó [oe5++ CÎoOm„³Ù ^Ó颹͗$ƒ÷Ój,cJÔKfDAÍÎa*(,hMaH–¬zd¶© ÓX‘a¶®X_L²PÕ+£Ì™6«ÅJ©HÞ±ÎÈZg¾¸ªÕlܶ< {î<°ÈjEÆFêòF§_zW¿Æ#=›Lóó® hs¢00e>l‹ü¼`)C˜Õ¬ñÛ{—¦ÔV„c_,çP&Ó· N%±^á˼X&ûD¥m"æ&ú£òÕô­ [3´Fm&}†KS¼µÈ¶LU£¥èV0·ï+éK ÎìN°M«ô®¿€Ö“àar=(‰éRÄ:0ÛÙÙÙÞnhK| ÷‚Ä#SH’AÛf9™=›™ìoáóˆ}¦Ý`ÁD`©ªúèÑ#ŸQ©ÀäŽÌ)Í27|þàoýަiË}Ô,p8ûÉÌý‹O뉜 ”¦U–ž„¼…m0Ø–¼·3·f#‡Fˆìï(+KRÊí¿(~(…Ò¬Ìä“Xå†ÀºâR©„CœH˜<° n™'õ]…®Eö4€>qåîi‹R4…Vª1YÀ+,ÛJ5…iC` ,J"¢TÊÕ›-SÈÕNcïËêÃzåþol:STžgí Â4Ô3%KÚ ç.oH´ œ¬ùê­õXšÖÚx`‘ ¬fÅ¡j¼þžhF‘;Ѿ¯s­Ùgµ  ìXwÞiè\:X¦¨„²`øø(±‰+£OâÇK±_M=šÊŒ5š¤V°!Xþ øý~Q)ŠbYV„ŸøßûzívµZÝ æ·‚zÅRl{zGo©áXà EQ²ÙìÈÈÚ–e¹ÎJØÍ­£¤?•ÉnçöPjQÓW[ÁÜzxάԯ> Þç@+1“("?»X-(È\.D¬¾ZX¦Hdò¥5Ck.5c¥Q‚Ê5ݯ(¨32¹m‚5aKƒ‘C%¢ €aRÙÀ!„?Ê['àüêi´‰DëkñVˆ®Z©I`±R Ö¹³ó<܇݆æ ÷hÕ ¨gYVUÕtvÀÔ²±½Z'¬"SýÙŸ²*]Õª••Í·:Óñb¬ T§ò#øà®BtۃтžÛ›Êæ…:È?(æ†@P8“I¢Ð¾§ iú ÌrË*Ý~9„„¸ÔFh£åfHiÔ\6½Û&szÆêK[3h»Â'7C_£o‹BíãÙ{¯®Ï]lÐÛŽ›r©˜\1 5š‹—Èu ¡ V×Ãûg3“}4qW)m-dO`mÌý5Vm+”ŠB‘f·O›‘T€¢(†aÐ]•ÔjšE4VŸyJdí0ØVàä¹o y¸y. û¾Òâr}"ÓhþìO7NŽq¥"„ê¢Ä(;‰¶Ÿ=þåôf³;Ö¼q(Э‰;N' Ñš™ÀRÅWî}ó… ¶¿³Þ)„p=¼wSYëg’oý»ÂV0—¨¼Š…Ø])°$B5^Œ ÷,Ú\`+ u\$ÛtLí’{8¬i1fr‰G­”¯Öž‚Q•ÑÕ§ Òr´XœÎd\ÞÈ¿]N®µ«¡%SD…/èÂÝßÉhy<÷V½´ºt÷&EQssshWtmÍßš„Š¿Û<>^¥&ò Î5ø y‘²¿¾®ªgÀî%/kÕnX;Á<*âvn?ý0±ŽÈ½‚X©1É a«,ÔÑ ô‰ ½z6ÒãhµlÀËlR‹®¦ÊW¶zØ «;M¸âPŽ-N,|/pñ'P{«2öVuô­ÿû,ýg¿¦Kï#[ÙÅ÷^ûvíµo×ï?¾xgéýÏ÷>¸QÂÿ^¹½<ûä.úúüÊ_ÿ%ú7óøÞÙÏ ª{ë֭މEÉçó™L¶B¹[£Ëø+¿ÑsÊ¥k+”»5ºRä«ÜеfÔä sý}æúû«'O=zmîÖ¥ñ_ þüZýûðÕàòÜÜý…I¼ç³‹#…x­T¯¬èÑËc"Bœ‚ÊåòíÛ·ñWËËÍiXD"‡7¿ÆÛ7nÜ0X5 ÆEþ›ï-<Ÿ¿¸sñZõÔŒþD”~¼3ŸÏ“e ¿º}ûv>Ÿ·ýÊ»Â_áÉÝ/çYtǺRµÊBk(.éýeƒÑôuiiÉt I`E(qú‹·ôð!ùØèg×_¼Ÿ\Gÿâ¤0¼Â^Þ2 !Ȥfˆw³5¶Ã¨¶wp€:#5Ú¸G ¨uòŠj»þ"ûN¦Õ [Ǿ¹~YàëzIdNoXLM¤6O”Ë™ œuT¡Ô§#:ÇÁÊÒ­ï¾kw…}'_Ú+ì ·FWÈ_M,eü…½½=EQnܸ”9s~8¹#³-I¿ä0¿ù÷×}ùpí ¬ IDATä¹O_'{Ò`!ùòîÑ¿Ëwž}p£øÁÒû_–B^Ø« ­-]U¼,ù(™i¾Ç¬,ýꣿ#Ÿ‚ì›òB×\+p0þƒË­ûƆô¤išD+*¥…ÊfÖî®ÁÄð£´h-)¸=ºŠ~ð_îÜÛÕ¿ªéB+@p±T_yùÑ¿ Ä™}ðl’$,š”þFyWèá ø,¾yLŽ !¬€2¾ñUõÙéÓ‰G¯ÍÝ»2}ó\ÚúïÛó£Oß<õÝù±›çÒ+'æWNÌß<—¾ñJ o\ŽÞZCÿî]œ^ysñ«óIüí§—c'˜ëï«o¾·>{ÿ[›=õñ•ðϯ–ÎÏ“û×gOçÏ_YŸ=½vâÔϯp5+%&ŸE¿d»¾•äÜeFÉ,ÞF(«RÚ“ø–Fi’ë÷“ë_ˆpÿŽþ‘fC¦5f‰ÖÛÙýäÅM}ÌY"X¶ö»èRÇäò®Ðójlcß×Z Ñ`v? FBx?ƒú8õgøÕG¦ŽÏáß+·—É ¦ó¿·¾Ù Ï}ïËmÓ¯û|öÉÝ™ÇwðÌtüÞM|ü«ß­à#ßùz í\¼ÿØt‘K_}éûå‡Ê/~žý鿞X~„ÿÅ7îÀò/Ç–;ÉáÜXLÜÉøÁ©ÂÈ¥­™X-ØúiÍö^FUy,›ÝÒ«ê6Û”t ã¬6¶–Ö?r™ícøFyW°½ÂŸüÉŸPv€Cå0[{ (·ÛÚÚûðÃÑÇ;W¶ïJOÿÑŸgV{+™°=1[xïGçΫ×ëŸ~úi» >‰Ÿ*ŒD¦â±©ÄóÕµÒVágóߑڳ;“ˆT_/=Ù²\Æ'×ü5W¿5ŠâÿøS)Ý’úÁƒ²Oÿvþ6î­' ñX-p'Õd¯ÏìŽ_ÚœžžžŸŸ/•J_~ù%ÚÿÅÔ¼ã…ø»+gÐöõë×ɵñÍÍÍÀr4óùÔãßÿ»Â»ß6›$æ·yó:>2›Í~K“}ujy•[ÿ_ÿ÷ ²åSêþñ‡G¥+W®¬ýí¿œºqöå•ôÛ¿ûß»ü5<+<¹ûÑÖ½æµç+J–ig¨á;±ŸZìïùŠé¬üúÝ&q“MŽû÷Ožÿüsò”·ÞzëóÏ?Ç#û_Οïêë×þéÒ¿:¿Ú’>Qðgç>S(Wñ “…AbŸŽ4½’•ðßN^ú¼9ù¯EãáÿúOlOÜÞÞÆ‰xî%Ÿß]ÅûOþÙ2Óúy‹ÿé;26î¦$Ž3nܸq3¾t7e^´-Eß{vöâÅ‹›››‰DâþýûŸÎú¨Â7þjá«w¿­þþß5Çßê+¯‰¿÷=}útéù³??×lšX•þÝ»oÔéßœýÒùñÇvåü/š%i„£ÁÿæBÝnÖWþÙÉïþ«µ7³ÕšüÁâ?½ˆ¶ÿæ/þÇ÷¾lžµ÷æµ±ßþÎwñpl‘Ïç#‘üâ¿À½Øõë×?ùä<²ýÞ÷¾‡÷øÒþìÜgØ×æ'÷®‘r†©©©F£qâOÿO¦5¥ÌüÁ?š8½7nܰ®­r÷Î;ï|þù畊Îeü…çï¸y„Ù\òúÎù·ÞzK–åO>ù„üj5²»7WÿÉÞ›«««äþ©©©b±˜ËåþŸÅ/þðßdpÓ±uå­éßý÷ÁØ„Êz+°ënz͹+îÚóùOfì„7WOOçh›¦iRiòщ»ÛÁf“ò½åsébä_Ÿû“rÿZÒ¿zõªu—/_ŽÅìS{8þØÚÚºÿ>¬GöoL7ßœ‘Jèמÿ³s¿"‡ˆ—·f2†ñÏüÃïF×Ì«ª/!6Òáõ±H<>…BA’¥Œ¿ ´ªÏ\6¬‹›¡,Ϋ8R ‘6XñxyFg‚…Í`–Uà7ÕdUšÙûÃÿrbzŒý>\ðÿeýgÿË?ÝEF¦èÿîæ|*ßÃ`Á=ŸÓ-;„âñ8p'Š¢(г,}WzúïÞ .¬¶É ÔÃ-v6²†$IHâ±,ئ` ¾Òž*” y Ã”ÏÇ›äY$ÿæBMÏLlÅ+uíFiz~$eH¨FÓt¤æ¿´5ûÕøS´g#´Ÿ%"§Bu˜<°À" Ã)ɸŒfi ç,0*° bô0)°öéB¸¤R­§® Ü¢ÿ$uÙàÒ ày~ 0ªËwíÒ€’(df-{¼€Þ+«‰;Ã0XW „«Á•ĸ֪hÊ'3÷÷íÂŽæ7¤ïoQ»;û˜ü†ôeÓ k yeXÁóÝ5Šztþjajî£ÚW÷Â+'¸’=VØ:²s*sr¯Y£÷|¥`Þt2K<»ÂÛdc@ mÝOäRwÒ«H—K2ÇbK%f8uÚF#¼Ìeü…F£‘Éd9»/6I+RÒ¯ŒOA«›à4ºêIU 6Nœ˜™œzfïÇ>îñZȆL`%VîýucüƒßEÉÂý S¨V`Ñ4»*Ò¿v9júàe–$°LiÑÐfLAÔ i Nô«Ð*PP‰(È6±ï¢¤u|G”1PÕO¢‰XK‡€‡Áb¯À¨®Bï*Þ£ª*Ã08h½ÆJ˜½%žd¯€eY­TÄ앲Át³×`ÆJ`¡zaÈ%+ad&Ýñü )#X–Å&5SùÄCW 9ó2MÓ¨+÷ËÂýXVÚDƒ;ª%•§jŒôåx[B!ë+aË'E†"ÿÖ`×mPßK=P¹½ªÔÏ“ë »ã¤k~GÃ2â;^ Ò*Å),)ïµz`EwÝj †ãÛ…ñí@»á} ,I ᙨï7P Es…éÊ•+xN-þéþÏ3Q&••€Rµåg_ž:û½ÞÊïa¸1ðâApέñªðtœû‹wCÉ"ëçÄ=pJYJi°°;a;nL¯/#›dNjðkw‚Á ¬Dìá5<#U)mj³0Ùò‰Ö¼Â&û¼TÀý+»—Ÿ èctFeÚ>™Ñè«õ®T;Ùüs{é§ñmÔ7k`^Z£ÆŠ1°#°|ÆBœ‚eY“ðÏäUòŒCÅ0Ó ,  ÈUg2úsi|ȧOª½û0 ç¿bƒ9†;,D`a#U<_­³ú‘ìÓ ¨ªª¢ˆÝUvçŠh_7/?~a†¬”¦¾óÕóJîNq÷š*;VŠeŠVÞ/6+Ž_Nî5K¨ÐÌ£d]¢œ Re6E¤DP„¶i†}>_"‘h4…BÁ'ñc¥ 瀪@cÏ.­æXCrÕ„ÑhÜ%};¾¬¿—Ü€HÝ_ie´$%ýÌô´*#Ò¢ž4è˜5åW€|$Þ˜=9÷Úk¦X–õûý•J…—Ù`]̆ô¾cbmÖV+§ÏøÏœ«Õj¸ï`YvK°WA"ˆ-F›Ô¨ J[Ú oh£«´ÄʪèýjX ÓJu¢È”RäôøÁd)2R BK÷Qæë«‘]¨Šz£h °üu{K34¥ÞŠÎÀƒ$SP¶+…íÃ3Âýä:>>V€P­$¶›ìO¸´¯åõJQó#¡¾¸õîÖñÂÙíI—v€âyžL°À±lœ‰”óÐXÁ†øh†‡–lË·ßì—I«ÆvGÕÚÇï;äi±!°ê&°lÀWåÇ£­F‰4s5ÐÀ/ñ–1xGËW)‰ÕÖˆˆå˜·ÞËd2äûïóù’Éfb.—CëœÆÎåR´ÜËèXx<²©Ð®äù »ctËþe)¶"èI{ûV¥›ËJÑ‘„(Z÷GéÐü<õ/¥'àXì0ð– ³ì„ëþzr„é|è/©¿v>å·Γk³¬ÔH¯/£íÀÊ“ÇQ®æSã”%]B8³RŸÜ±™júë&S[Ô_®“Ç̺y dŽ^zÕ´ _(€¹ýÔ×ãf ÈL.‰3Žƒq@“¨„3ºs²Ü\*7Ë£ âÓÊm ¬*W—)%Bdw’I-(M4îÞpýåƒ$‚Ý*1ë“ñ¶ ,öÉåÉ@k¯ €+pAiÚÔÓÇSMqd `cÖ|H @×XÍ?2m¡Ž«vãžç/\¸ ªêÇ ébXÂCuÍS` 4M# ¬Ó™±û©f§³ï+=ÜûâìZ“ÇùÁ«@¬ÐšNÓ 7= ­Ê˜¨„Q×°}‚Þ4Šöü¥@“?eUæ·^©µ&Ö~DqêÔ)EQ8Ž{ ídC»¦o¥ŸþùææÝÚ>J·,Ë^-9ùæN2ñJ8¹ªT&ö÷@Ì”ÆBöSÙXm}"×äk·¦ç1³Ð´¦¢e0æ— ‚MwôŒ8=¨L«eÁ°žqkFGG·¶¶rBX –’ ™‹Ñª R£e/Ñ*‘†€ñ뢷ž3d0ɯÀØÓ5}ý[ã%ݦ"U?D²™Ù'-{¦'ä÷ ‡£øj–õ«d%|½rÑ7¨×ëÈ$ÑÉJ˜ 5«³ äuÍVj XášïA‚m°/kÀÖªZ>GE¢$EGzôGçv~?-Óêã–wÎWnÀ@f!äB¶ë=Ï#{5| XÁº‚Ä–ˆ)ŽHx`qGʯè'™} mn.?ÐÃW'&&FO7sÎæ—–HëFøÙ™j•mü‡Òs›´‰Ûrï&Ä¥xÛºi‚ s¾ûzª¾æ4Ówo†ŸßX…–™f§­ú+\½Á*@ipf·9Ü æÈ¨émétÿ|x¬(„c‚}èÀ›âÅob4c%èÌŽía</‹Týàí®‚'Ctà7ò×Âk,R *vVé>¹™Ô BÕ–ÀÚMM`+¾³ûy¦ såðõošc÷P•zï›"}´ÌK~|z,`ŽÆc”é\âÛ±eÒM€½…¢[Yq$c¤æ¿ØJãJÂJ`™BK¢+ÊË%|»¿Ì<ÌXó•ÇÓµj-Q 牄hÁ†(Ó 6[=±Ÿ®‰Ø)°šóF{ë@Å+‡"ÕñéX*¾]ÈhyžÄ·ð"íü^:îjšV6r²{¾R¼Ð%mÌïPñü¯R°*½°]F~l¬"´%°hšfYV–å(á \&9èZ[;yƒray¢Ï*›&eyjµñÁ¶yýJ¡H,ØÀH98R@(ÂéjŒôÿ¾‰˜²…Ý12…S»¤](Ò®”—}÷ õË—Ýõýüƈñ”NdtëAžÜ q æµÃñÍiI%–#Íij“Wj*°½L8Ðl¸dZ!§C8y9Ê´è—õyU¤CåVòRIU5¨³²¿8‘ºÂñ<ù‹+:ÇӜԃKܸqãwÞÉÈY,ªâXömP­&¹rFÑ›'®V¶2¤e» t"…·­\ã=ëW¯5ONÕâW[_Ù^Üçó¿xMBTÍm ,ÔkGj~•†ç)'ÎÖÖWMV™ÖE‘'wc¯Ý)îú‹ª SÈ‘jh"_€»éšB5=¶ü­Ñ´‰r˜<øz-zÎm/Qåß.GìUF]Ï(¨znMÍyÖp€Ì–ƒæz‚bxŸIÏóñ=1¡N/Jà‹A:3X=ª}Šp*?v:6½çÛë™ÀšÊ¸'°BÆ ,Ù#ßîÎYy"‚ýJ”yø|ê±)î~~C:·Ô¬¤“LªV¬âª…OñÓªÒT>-­®ò;8ü™Òàäþ(«2H˜¬RÚ£–m4¥ÁÂÞ8¥QåDÚ!Å'ŸžÂV`Ïl©áÁÂñ"°ú2h[hLmiÍ¡ªÌD B²^6׋BŠ6NùXBâx®E(ýè34 p²p>È ç¬;Éø¾ÉüÈ Ñ ãaÂÙ m0 crª2ÁQÅ@ÙO µX¤CQ¨@”P`)Ë‚¯t(‡ã 2ãûÞhòìÿèË/¿,äÅÊ¿;Õ´óeŽViÈóÛ‘£Ø ,‹°ca«ÎèMYZ¸$ž^?wN{ö %Öüż–ñ7ï=›y%´¨iÚÖ–¾§ÒÚŸŸý,U¦/nNÿì”ýpäÒæì™Ýq‚Kø²¿µ2‘Ú¦¾÷é}ÈsQ‡B ŽãdYŽÖu«è#¦ ^á°€T`ñ2{9;·hf‰ 8FVâÉ„›lí D…»²7ÿYú¡¨pxum£ÀÂx…?õWîŸ~¸É..×'2NÝÐ!!¾·½9Ý´èj £d—ÍVSiB¸U*´jœ5«žßïEQ*J¬Ê d…°L.dŸÝÈ_Õ—sd–;Ô=^©Å#i…´yz[Zn§ÀÒöE}u¾4{:>}‹Þ+mçØü)¼Ý• ìä`&°,‹3L@GV¤î€µ4KXpö¢‘ÀÒëÑ…×n¶ÍØ`AÓggö‰i§ ŒÇÜ€Y€Wœ.Þœ-WƒáF2åt ‡A€JiØM´f‹-(†~ X‰u¡Röù|ᬮ¦OŸžçÑBÃ0<Ï“UÃÚ€¿!žÿíÉïÓ@U lOU"‹;x^$ÑŠCʯ`ÝD`ÙO{mQáèxkÎß§ãÜÓq( þ·‘ÿì—ßÀõ÷µV ÿò²¶öèïæî \Ú9Ó îÉø Î7GÎÁ†(><‹ƒDbò@33[bÿ…€x8æ8^V_@öÊLƒËäŽS™x5h °,x:²Ý åøtäÌS§@ghµ5q"1>Ž ûÍÍMÌï”|õµ`³ ¼Ì0S%‚üy™I—£¨M‰WƒÑh”eYYQb¯\³ÞˆlJæ²)’À:C$×8…+´F1*]2˜¸–³ A`ñU C!Ld–·à<À0üíb£Âu?žÎÕX‰"ŽBÑ@¼WÈ „Ü™J¥DQÔ4MQj¿¹õl’ÿùµŒ”ƒ©J´ŒÓóÑ*•ª„cÕ 6)$is³h qB!:E fÚ†i%+«pul©‹Qä«*¥ms¹9ý=÷7ÒU‡( "U?v‘ÿtæÌÀãDd~ÃÆW•B’(䑇÷‡B!”ü¨\.ïííÙžKB5¦t°21áeÖßà+|*‚^…©º7D&î‚Ê%”øå­Ù:#ÀL~Ã$}"ÑH¡ Ó´V´ P}?úÆãÊÆt>Á*†I¬Ãš*Ã0•@¸¸öéüí»sûÿùŸö-׊{Dw·Ö& µ !äTý댔õß0"û“ɤ,Ë@@Åb±è—„‚P€²@4¹ª'ùûâÔYÉ_ÑÛAÙØÏû@¯CTììì‹EY–ŸË@,Ø}S¿†N㤫ÌÕ0õÌ)ÌõâŦišT`)®ð1=ÃEäIp`©lXh(è@žš.(ƒ}Xhg¨á£Uj5­wjÚú*—¨Ë”>ðÝ9v"‹èÞöNãä‹.…‡ƒ¢Ä×ð<Ã/ñ´FQ£Ä* £Ñ‘ìîé[_˜êC#ä[:ÇË—/“ C0¬{Þ¦.Ñ@€Ï×ye±h•º¸­Çh”ö,¾Ó.Sg°á›ššB³6UUw2y•RË\=ï«T;9ÍU¸z¼; #$ûÆ•—ôDðù|¢ÌÜOß[F{žŒl±#Sªéº®û/_¾ŒìÿJ•;Yâ)¡¡€¿®f2ËÉä¬óƒxx 1äÔ4+%JÊʇ`%°vE”ίqQ>ó´ÃíK•œ˜(0m_ªÕj€Ü^i¥Jf“cáË—­\¼[_}…Ã1r£µ¿N~ƒ¶cµ  ³¤³ædaäí•…f )*ñê«¡–a§ó#'K‘s;SH‰Í©l’TãÜÛpT`§°áËNXYµð”]C³{@!„$¥õ§04‚5° ÷ Î-  JƒX5€£ñÉ£¸Ö¼×ÖűKÉd;eVnV8…‘eiŒ[ãàÔÞØ•õ•~v²ùÆjÁ>¾˜H§Ó£gÏ€Òh,ÿò—diE#åoèCó2_×4ͤÍ Íe´£SñZ°ÊëVÌX‚­LiÛH¸æ³é«ÏçÀ´N7==˜Ÿ5—[¾yÓö\c‰tÇcpŽÖˆÀª Äߣî…4J“[ñ°”¼Âr‡„§ ú8òÞœO¤GgSx•8r±©Kè¨À€€?ðãý·Ê{fAbG`¿¸9óá|‘tˆ§4ˆVhèEAi¼\Šïm58³;NÕjåê¶‚ þµ¯k´ª€X­ðÅæ„¹™…‘ņÆÉÍ ­2 "`)¨¢ÿ Û¡<öÃòIü=þ<úˆ_ƒ+UbçóÊW~¸2 ¾#Çkzó¢òrÐ0'ðúÃÅîî.ò–Ú™2¼–7ëÏ0úbI`‘ñƒ±ZcY išT`i?øM¦&¨+wp¡Àrn:*°h• 5|«i½ÇT××€ì[)(S„—ÜÞ ²ÝÏ<÷Bèe3:¸7ç}ÓŒµ¿£ Zúßd%üÊæ‰Í}Š˜(‡ÄbS`òÊÛoïíí=xð*.|›çõj(Êœï~sj1ùÎ;Õ½½åû÷mïE_XÒ;Íyrh»éLÔÊB¨ò+¹e*Gx`5±ÒgÚ£¥(ù[¡†Û`UëÜÃBuïöÄvôZ)Ïo ¶5oEg(€iš²1÷eY«núöƒ¹fgA†’îñj½x‚,1-¥¼Â²l$ mÐmœ`3íOûŽÃô•{,¼3R÷¯Å*5ž@¥üè¯ÿYY‘¹J4JûÁWÍGæ:PÔW¹ž\›§ºZ­ª e'P˜Í&QbŽã(Š"}©$ZÁSú‚P‘Z6Õ©VnÐ*ÛXŽ5ÃD‰;‘kÒáp˜4'Ò@{<²©Ð|ÿ› £hà+©b^Ó4/Èw Qô:ˆ½¢ÈBŸÄº÷ o·†ÇŸ»ÔñúÖ×ïéH`Y;VDÖX1©ù¾œ| Á†ˆoJÖ÷tɇȩl°.f}%2 –h9)°*Â_|?Z›ô¤¼ÌNæGpl“Érx²–èø¤ÅxZV}{ÕåY^* !E6(µZWX%J\@iBTq•ŒŒ¹¤Œ¿°lÖm•†¿z[—€£¬ä´J}ÿÙùõ˜AI„:x‡±ÂÅ‹ñöóçÏ‚ÿtúa³x2÷[»¯+r³Ùžžžœœt~dë}@£Ñ0iIÜXÖyy ¯²PöQÑbóúZ¥Lñ<Üm<]2`² T9ó@¥4JÓÂe"O»A˜7\XP†?˜oW‚ÖãYbô@†Zwb «(Ô´Œ$Å«>¾YŠBþåø³K2*°jmXÑZàÌîxšŽñŸ$I¹\'6ŠV ý¢ÄÏæ’Tk;˜û#~Ð4mmu-]Š€t¿9w–ÃB:®ÑØÇT`QÞRóP Îâ)Š"[rº¡ÑǧæêIûÈSÓˆœ¦iŽãLãl–eEQL§Ó¤[tC`Àéݱvà8Ž|«y‰%Ý,}„W:²Ïkw/2@xu<Œ ¬h¦Y즋–„LXj™ÊY ,’ÎN—#V+ÐjOª7uåa ®¬y@åíµ™`Ô«zP +žù·ÐòX¡üîû+MÖt>n*[«ãOâkþ`»ŸÐ½ÖC;*° RD²ó IDATó¯FàyŠ;ù¼Ù¹Ì~r:¡ŒÌýð|>߃f—¾]ö-/¢¯B¡Ã0¹\ÎöÄ'‰ïZáKA‰›Û‹@‰¯-Å›sàt)B=kÈž8qbùÙ3òô[“¾§±m8±!ͯ7 ÝÛi4B›\iEN_0˜ÝR&–@â¹|vÉ …r¹\2[Œet»tõôYn´©Y¦çNA'8(°xžw ¨Pƃ.¬ªéR¬˜Í%7ùçá½`C´ e 5C"ÂT~äYlG'°xL`Ù;]@¸nX—µV|ŽãÐ0{>;ê@`]Øšî8÷ÄP)€¦›>»ß»“‡!ÆXdF–îá>™§4Õ}x0z7µ†}ïžGÚ˜ÎhpýÙÙOfî_ÞšMT z(´4míF ¦ýh”̪ô»Ë‹ñ`8H¥Róóó¶§“°ŽQ8Ž¡fL.Ö·B™€’HG‹­A¥ÑØ­»·ï¦žJœ\æë™`A¢Ô4¶ÕDËψú¢„™öð0˜ÐÉŠëÁ&—(ºÞŽɱíw­ï'EQ±z`´ÃTÈÓ È<Ù >^ßÉqV ß‚Ì@Z¶óÀ*Xc¥Ø›+§9•9 'N§Oçr¹›õ(¿X=à“ùPM ×ý‘†2;¤|±X,„Sa2—Í'{ŸÈšý’.˲¤·};t«ÀBU‚À¢žÖ0 NÜMž‘^ƒgflòÏ‚%£"°L] šÁÎÌÌ P)üƺ$°œàyÞä²!(†ËŠÁÊÑ´ÃûO?™ \k¦”€pvWþøo(Š¢êõ‰çÏ_/íE ú¹„Px¦Z…š?kOÔv›…ð€!„ ,œˆ0&`eT'°Ü M[á“áºÌ‘MQ”CÓq"›¼Ý _*q5Ò;¿Yfã²™©cÌ ëá §Xû;’$yÖ@£,êc›ÙõÊì“g"ñàïýÆÑ_ÜgW,ŸÏW*Ù§`Æ=›ÄÈ !^ Àµõù"_åe–T`á,óíà#\Þ+\ZÅ9i•ZØŸžžÞÝÝEIcfOÛvÃçó‹Åd)|~gj-¼G®ôˆ2w"›d.Y 3A·ì¸ƒ¶Ù¶¹,<¼ÌrKQ^1?£(ñëQb³ãeãÕ`ªþá“‹Xm¡_°esë°Øå\N UŠÒ¨7WâÕ a ...v,˜í-†ñù|¦Y>¬£S‰•ÀB3 Ô,¢Ÿ´âÓ˯•˲$Ý­<‘(¶‚Ù2Ûì6t’  !ˆä­=¬áŠ‚ÁóØ`CôK‚‰A&ŸÝ+°.lÏàh [ù³%–!li% ò žÇüÇ5'¥X% Ø ÂÖePȾ_¡ô¤cÀÜþè«'Pü£m«0Ü¿JâçÎÙd5Ñj$ jGž7Õb+Ü(°p5Ä`C,ñµ*aâîXÃK(°–D+,‡ëo5"°Lߢêã÷û‰D¥Ryíµ×ÜÒåò Y’±?1þvV`‘Öf‚ªùübµ´ª¨?û+`fÍ©Ê@6X6Õ|>‰'ŸÅ¤ÀrC`©‚Ñ Ÿ"NÑ:ÐÖŽ9Š\ N>o|pÃ4û²×9£ ;|Û[B÷ ,¤ˆÄŒƒ+¿ûî»Q²¿ÈÞ#}ÜÝ KLã\¨Dˆ|LÙBP8çð%2ƒ•õFÁVOãÛ¦…ßü´)…‹ìgjµ™rÎà äÊœ>|ò7œÚd‰^xíõ.ùJ‡B‡ÃXcU«Õȱ¥©wîˆx#4YKH´"©2¥h¡†x™}wy,]¶³°‹ ;@ƒs2~W¹W2sׯ¯ì®,mÙøXÙXÀ¹í©X%øÉ¬Ô?“Mb&Úý#‹~=@ñ:Cvr xÙüŒˆ~[x(ëad‡±R {eZ½Á“ÃŽ!„û¹º17^ŒÇq@àÂ… n¦¦¶·`Æš=ê X@„~ @-2¡zó yei,ÿðýÝ2DêK”+eHæô–´!øxrBŒ×)oñy€¡÷¨‡&šéräYt‡<š³#°:*°h•b5}?!lÐXx¯¦âÒ*å—[Åõ¢X©óõD9DµÙñ<I¼ºnNüÔQýÔ® “´šÃ)n¬®X ÁÂÞø×cKUC¡G` H'³Hh€>RšÆH­”ö :uäØJ`‘µ{fffiÉfŒë—½ÑuÑ^EµÐîRc€p.1:ºÖ¹´ŠèÇ×g†Ól Ž,FGk-¿¤Ïïª\C3ýJ ‹!ÐF‰ÖN…·ÇбHÍ"³¹$\¸pA„n™üa½é¡¼–j!°$ÈD„¶xcõÔ/§bŸæ±¢nÞä÷ûI](ž$„ðÔîhPjRN,Ë^ºt©£N ÖÀr¶F"Y–išÎf³V¯wÙîtBXöëǨß}ż¥k/ø¬ b€˜ yî˜Ã ²—J-–¦¿Ø.CÑ·,{ˆíd »kµ#°0«KÞ"@hÄ>Œ} m®Z ‡õmkÉ­pð·"Ëf“erõêJ§ŠÆ7«¼~…šVìxÇuVÿ›šX¬,á*¡p<ãëgÈ b4Ò# …ÒéÎI0Iô ÀŒ«PØ«c$”)@xdÂåÓu ÃØ*°Ò%3¢(Ê%ùíÕ(\ÒþrìW†o®ÖzöX-À>>—1Î=òP ™þL¨ÀäŽ+K¥©å ¿˜š èœf&“Á‹Õ6Žu ¬¾„ÀÂÂêtX–Å¢$¼¨i=‹êÕ+ë™uH €G™¾þW _“W¾´5{¦•)÷S¶–óø$;}½~)“Ý€ÍP.'–Éoɉ@»¸ãé|âéÈöãiþÒãfy©ÕgÐJÏêaaHò£è lmb:0zuµé^†óñ$Ë0ÝÎJœX$Ì’G q=µZ K%pÕp¨Ñ¶7²‚UVaÐÈY¡T‰• N² ãL`µS`ám `13ùÙÔ#ˆÔüÑZ€¢¨‘‘‘žg|”×3z°ÃK@`É–”Ÿ2Érx13áóùâñøææ¦ÉhFP¸T92YYŠm€¨p#UÝ÷*ÚX !Äìúª«À{[Ë¡a€Û·o[ ¬vSk|Qá ì"D„†à3†ê_y ÔƒŒv¡›K»˜dI—"”q¯…’ãÈŽ!„Àf4 ccâN^YßÙ†À«Ǥӳ"Æ ƒT`ÍÌÌ„ÃáJ¥R.—Ëå2¹bf !´žk ?t3,EEv  ˜¯¨¿>Áßú* Ð4/+è ƒôaåŽ\Æ`%]M,³œ3‹d ›,ÓÇn ,—ì5G9¼˜™@ïy4 • BK',c€pn$±<7·Ù«32E¥R3¹Äf(Wãš¿[²NTC2!ŒbY6Q /f&LWN•Ã`G`¡ÁÄÄÄ{ñSßn>Üäô¬…5ò¯#ÛaRÖväa@Pâª0±«ÿÑ—¯ÌUA©µò ¼ ˆB¥^+aÕ?ES¾³gÏ2DmÚ¿wyÌ@,ê”{¾·BtŒ­]Žõ¬x¤‹!R*ïüÎŒce®(Š&•nƒQ¦áïÈÈÈúú:¹ÇªÀ"OEñ7Þ ÷8?  üÙô#Ó|”ôþH—"ÈÝÖ=q`U`ÀÂÂ:k:8~ýáÙ;é5œ³Cíò¸L?¼™ó`£$Ô¦6ô·KŽ'#Œ$ä0u/™4íì¨ÀrA+œ ¬vu'(ùH‹Ì‰¦{SÚ)°:VFžçÏž= ÷îÝ[Øw8²ÝƒT‚@UÏ«† MÓL©´ª¯âP¼¹©‡žº6«çýÖ9ÚÜÜœIÎL6x»ãÌÎ¥ o£ü›úZ+å|}üíì~2ã/ø$z”¶ñÈ^5ô`‡—€ÀR8Z¥"õÀùØ)af6 –˜{:uêT.—«V«$‘DkÔyfþ+åÞhIŸZs'Âøø¸$IˆlöûõØ"÷|¼)W ÛGèÛ,„Ö&ÃeSÛQ%Ê<¯°k)XKun•å»t®Í• 厗ti`¡Ù­R¬Räшγv ,g4=°7e™RPlPG÷Ž˜g'·š!BsÒx¼h4¡Â×ÿƒs?øfñµòuô4ˆ.Xnê²Ã¼Å¤À"ÁzÏ:Ž|zZ–¶¶\.—>|øÖ[o9ŸåáØ").²Ý&ª!Õó¶˜ü%H-ô‡À꣖õõž›››ššB7ž«vŒ­q3®&}ÜMàV"‘ØÝ5$÷ìX Ñ$šÑèkëÍ×^½<w0üÖx1ö»÷ßà(öúÔõ§ÛOWk«ä·d£°¸¸xóæÍÑÑQRŠu…;“,™ÊXÎÍ͹¹;¸hÎ(ŠZXXxüøqÇSÚÁv±Ú:Íp!eYUUI>®ÝÁáºo×ïÊø™ôörŠ=ñžÄ Oku;äß:UŽ&2‰J3tÎ=óÒ4»Ñ€Ñ覩*­2*-ó§Ç»DšŽã,¿@ ®ÖET€¡õ®Úv™ë0XíBÛ-È÷l©O4Cc{wîÜqN^ãá˜cj³øý/±9c à)ÌZëèe‚iá¡¿ ,Q€ÕS²Ë +‹„“=Ñ4”;dkA˜ßOŸUNL,ŒƒÑ¼¶+â  ’2Rš¦@¬j~ˆléoÌ>ÀÈó•Òæ7tKMŽ‚å À …B©TJÓ4Y–q¼¹-zöÀr©iS7är" R+Ð*Å£kg,÷•ѹOlç±Jô~ÇN&‹R¿6Aw®mÎpïe­ ,Žã¬ó¸¾(°|R[“e’ÀJ&“Ç™,7«¶¨Yîµ=ý°duîöl/†À27* 4go@Í#‘Èôôt*•ÚÛÛã8.qßD–.’iõºIt"LMMƒÁnMøœoá’ÀJ&“ØÖ:"!˜›»„ë~—–¿¡7”¦"iDy<èp€ôÀÂ;Y…Á F:&ý_¡GB)´Â¶‚)…º£‰{ç2i¤„üÊT}ÚH›lqݰK ¬P(ôúë¯7-ÀX›¾Ë[Ø">yNan0ŠÑ|=~÷f9Ñ!·‡c•r¥c•ù!„&8{`u S/Ìq\(" ¬v ¬v÷5éóù05;;ˤ#wJ«vçé˜Î'®nÌR~d–çæ¦¦ŸÑ$ €p8œÜ±ñ€OTÂ`ù)¼0úဦi{"£hóÏõ%îäièR•J¥R©”›;öìÕG–õ”vu'D,jŠ2G–à€X…1ÙîNe|šøKPñzÄÁ…auS嵃ëà&î/^ ,[tôÀrSy“U›^ !Q Ñ-ƒcŸÏçÒËt€i)´«3x³CvB˶ö¢úc­E¦d'NœÐ4íí·ß&w¾ç¿zƒùWHœBØ݆ú|¾ÙÙYèfùÈŠvX¦¹´õ°X,f5ÌnüºæjYŒ–YåòŽ;(ëfÇYîÉ“'Ýð«Ëª4ž¨Œ Ši‘­­ƒ†L9£p¨•íBEQĹÏ]–ÄaüÁ0Œ­"Òý`Ýãáéõ7½ÝüEgžÞ{î-u 2lƒy­P±«.ÆT—Bh½Z8ƪg<¬w¯À2=K,SUé5ÀI.xµrº\nê*ÖÃÙ‚ ûñã¥Øëk§@³ïv{0Ï&FOÑsÓõ‰LÆ&M„CÍõFì]qv[Í?£Ä ÙyheãB£2Y–5MsP`¹GÏ ¬XÎÝP»º«ÎíLŽ'ÇyžÏ<ß²=ÅVÕGË´4¥iË6³^e½Ã­P5» x ÞäœÂÐd®gч ÀrŸ›ËJÈöL`¹T>Æb1Ôw3 #ìÚNâè€S}¾½XÞPÔC'¼,VÓCÇÂf‹[UÐ@5::Z«ÕPβ®X›³Ó§O£º}æÌ<”içBÕ¶v!h/Þ½=+5È#Dê†Iõx!©7[CžçGGG`kk«Ñh$+úÏeî¨ç50Èèàe‹®ëâ#Yh.2­Ò$«£u—;_ºQ`µ ! ‡ÃÝX&õ¥›Â' LlYu.ðû7SL`xÕpÀAhx”™Y~椢(&‹t(Ç]]•¦iœTúªÀBƒøp8ìóùТ V·óÀjW<ÄÐ4“¼S¹°¹Õ"È4úNJ'°ÎìNœßž¢5{5¥ÃMñ­¾€t:N§wwwm ,ÓÅ ðjâ c7P|÷Þ®–G'­þÊ4M“$ÉAåƒ^g¬†’M{Ë/ ç·§Ï%Î¥"©ÏjŸUAï.qimW‚M4¹ÝõìŲì;#?~õÓ/ñ¶ž7ë BÓ4Ãê¦Ê0d]}Ð,÷ê§~)°z!\\\ÄŠ¯¿þÚ”›¥Ý¬¥êXξXÕ¹Û“=¼x¹,S-âyÞåD÷ôéÓ½Ýݹ9Çã¸0.oÑñ¦ÐzÒÃ#°ÂFÖbf%“Éóóð]é»ýý}ò0Ç¥{¯TI{p´zÇЛ®V›õBU?K¦2‰¯éwì™ÀrXoG`™tŽ‘Hd{{Ût˜3œ‡ ¶0MÑ{MÓÅD ‹÷äIJÃñŽ9h"†:ŠùÁ5Y^þäÓa˜$rŽãƒÀB=B0ĉ1ÜX,˾ûî»w$/5R6¬?¥KÌzÛVÕ̳­ˆF£¦V¢«Ó= ªt½Ä×Vôù¡:3·ÉÖ&ëXÖwÏ'rÞo‚s¡›¾llllii tP`Y+ÇáI¸UTåpSÓÁåôXä†)Ã%ë³!Ö׫gVC]*° ¶®ûµ¾(°zhÙ(Ú[ÎñÐ/ eBhŠ<Œ»;4g Ü8wÝÈB¼S¦r… '7„._uò=$§΃`ÒFÄD`Ù–Ü=XýÂXìÕgã«'6šÓ€­@ÖùxÇF&¹m²Þ±ùùy<ëv¢ïžç‘ŠYUU‡.¸?a`¬ÈñjjýP@œpXï!„нPåܹs È¢øí·ß’³n7§{,ÔrO~}¥<»MÌ–Îâm“ Öá…’2+Ó]x¢®JÒ›ªncccÏž=ÃhWYAhW•ºòÀrˆ  ¼d ƒ Ù ÀbbçLÜ_ˆËte”üòù*5Yºƒ”Íà eÈBØD ,=„РÀRmSB—¯z;ËË´ŸeY“e•›’$Ãަ+áIØxÚÚáצ÷(Š2Ú@O£Éd2yÀ²a«W¯v<̽‰{GuŠWØ¿û-—wìxS÷µÿ€/­öp4¶×~üµž” …Æu¿drTÖh40wƒªjowtvj7y*“ðCõÀBÑv™mÑ­yžŸ˜˜h4~¿?`KVÛ«!â ·f<ϳ,‹¼Üu‘üÊÔk;?¦‡¹ÀÉË ûAŠ¢x,¯ÙÁMÜ{öÀr_ý;*°pò‡»wïîìì ¦—Üýø¼/ ,¯Šy8 á[å^u¨=—w? gÔÕ}ñ@?f ,2'Îýû÷·¶¶lÃwïL`‘ÞßžFt€aP~ ÿœ{¬n º‹ˆThµ¡$âÖãÝÀäe»ßúÑv};˜ÙÇ\å÷ûe™¨•^5dØþñ¬Ö@IÕíaÎ7í¡HNs~Ïk( Q†ìºÊô¹VJö}¤ ÍAjeG¹¿–³:À™À€S§N9|kÚÃ0 nÍü~ÿ… ö˨…0N–»4, ,±A㿦JÓ`§P~Xî»Ä|‘ÕÊM-î*ËXý !4ô†Ýžíá¥ÀËB`½(Ö‘Ml‡Å¦Fª…q¸”ƒË©ÑôZ¨¡\wîäzV`1Š^¿dJZo8µ ,=(°°,Ûh4l/b žçÑʳ,ËŒÏê@ p”÷óp˜ —¨ö>̓"ü±‹ïí:=Ö/ÆÈÈj%àpF Ž £™ØÕ×Éä(¨VӓܤV:x`Y¯L¾u‡Bh½µmñ\X8–Ù¡ÎÞà8·÷0Ð4­Aëa¼>‰Ú3ö!´Gì%ÂåË—;žhÏónÌaÈÚgz´X,&I’,ËŠ¢”ËeòjЉÀêØ8ô%„¤Ž½ð¶†ÛÀ2ÕáëÕ_ØzRZ³.ÆíLp¯À¢â·òVº† Võ9=€–þRmD²¤<©Àê åREîGñƒ$å¦$Á`cŽ~¿ßhEç ®4DƒB`™¼{ƒÀbfdd„aš¦£Ñ¨õ€¾Xóóóм%Áñ§+L¤' £CR`YÚ@å÷ûÇÇÇÑv8¶àP}\ZLšŠÔQóÕñâè,ËèééUÆD!„ ÂéâÐ,÷ ,$ÕÇ1³]A’rêAFq·¶¶öäÉò[ò`« Áe!$/âÕBvBËêh/G!Þ¶ !PÚ ÷ IDATìoIÜ(°¬ƒË›9ð¼Ëô×gg1³~Ûø}#³>ï‘ÇpŠ«¡­T`‘‡!mÅÜÜZ%¦i«-Ž'X–M&Sðø^k‡7R`X”ýôÕvÏñ„ËäJ1>>žH$ ^¯ß¾}›üJ„sçÎ9œkm©H/È~!*Ù›90ô¿]nf,a\(m§À:`­4±½Ð^ÕG+ .,,8páÂEQžÝê.ßU²ÔÁ}{, !¹Ø­ºÀð†⦊*õ·$=(°h"÷ ¾ ñÁ¯¬]àA,ü¾qZÛŽWT…?^¼x±ÑhȲ,IZ…î£ãõÀOPl”W ”ݧV`‘{.¶ ¨¯÷ù|¦¯:6D&K;ˆÅbÓÓÓ½•ÄÆÊç͆V”2»Ú)°X+,V»aa¿Ö;ѽlW.»U`¡=ýR`% Ô&(ŠbVÁxÃÒaA% ¬Ö yðHÒƒ„öp;ÓÔÕM °ÃÓuô\'ãvᨲzš1œ–‰0bÕ%Nkš†jã0…CVg½›æ­t  d±>h&&Y–%ë}Q`™Ð³ ì(oëEÚqÓ~¿ß”yp°@>•§û\hšfë1¸V¿X(aY·±Ì¦áÄÑWi v>Èñe¡@LYñöÁXíö8x`PåÎIm!Š¢(ŠV…Z À?šCMt(?*L,k½EžëuˆŒ£Ó.‚AÕ¬ƒ.5J8ˆ‰{·C0›±´©Jét:«ªª(ŠÃÕ‹üxD ,2Ç—W =Øah ,’0¢þœ={öPoý’X=(°¬«p”—íe8`௠Ê|’À"Ïè™ÀJ”Ë™ Ûc•QŠîÞv[Ë¥ÖÀƒ&ê©W †EË6ú Ë”™¤/5Žã8’5póS°,K'“ÀòÖq†¥'jg¤pp–¹.XGC`9{Ì·;evvöÁƒ¦ã]ZȹÂX¡‘ :¯CXÈš¢¶þ”´F±²¾$@qÍ*0 ¬v7E,pÇ«u!8ìá‚n@iÃ2ÀöphNËÚ½P¾£¼¯­‰» È­ƒaç´©Ý¢/ ,Ê`ùá݇äR‰ƒ]EÏ!„‰Jˆ$ªÚ¡VWö L³f¯2ì<°zÈ"tL`Û©&ËMCt¹_šðb—†*)„tK`™ËMá '°`tttee¥Z­r‰DºÊÏ{ ¾›‹zÕp`Q§ôv^žÕMk«’Yz¶+%—?]¾xȽ·ÛkË%¬§[CɃ;Þ®?kf49=ìúl/<«ÏpÏÇ÷íXε=ÃËôW°·ì!¼&j@.X’ñ~)°\¢VÇäÇA¡Ü€¢ôá'ÕhØÚF ®ë,òã±"°<òxHàø‡´Æ±"ð ·žn«À¢(j Xè€ .PÕC„þAX†È¯CXÔ€ °4ΖÀꘅÀ ÈêìòÅ;`ýréå])°Ü4S¦czcë(ž1¶‡CÂpX/ÐõãX…Ò^¸É}Óº )Õîcé<-4ûçP(„½cLöÉ=+°Ðv<¯T*FCÓ4“Ûõøn¯áP—¬^9†õ¹^ØÔÄÁõÀ:ŒNÍD`u;7Íÿû Í“`  µÐÆŒÜ$D8ÇqWbú¾<ÓÅtUãÉm?x Ô)"î[ãYÃâj?Ûp2ˇKÖ»3—X.a]©u °Ü4} –lÉë =Øa8 ¬ãB8¬V»ßÓª·÷+Þx}èpêÔ)¼½¿¿¿²²‚?vÐʲìÕ«WÑ6EQ(š@Ó´O?ýÔ:€>)¶^)„ôLÜDakcpX‡Ñ©õ %áyþðútòÂ^E\tlEm ¬£ñÀr3õ=>Vïˆàâw&c—¼\ ƒ akãýÝ2ÚŽªtt§ˆ¿¢ûºári“eÙP¨iq@Gš¦9ŽÃÎŒ¬Jù¦nX}!°Œé[½îЃ ^ëȆì/Êéù0¢-\ÞŽùË»P`iAúV4G'ËSEèA…û~rg¿²€w«À&‹"ã½z8°Ð4Íà$ØÞkP,²Æõæ°k…©ê–À:š„†”MOa;}=–«ïÔRYÓÅY–•em»P`yª«a@àùó¾*µ>•ȯ(¡³µ¹{¸Š¢ˆWaA0uÀ¦£c¶ßnXÝš¾·+WOgyx‰0œÖ ´­}Q ¬™™™ÑÑQ´Ýƒe@·p©À"ƒÃ­ƒ6Ú ýèw='ÀryY76“ÖS:îV ("BÊc°†„ è?‡™í1Ça¬Ê8ØÓº9å ,/„p(@(°l“Ó …«Ïç‹ÅbˆÁ1­½ÀÂC…éŽÇuA`‘ðjáÀBmÿÇãý=†¦Úâ…Œ Ý8Ù¹DÇÁù Q`ÑwÌò`ƒá$°^ÂB¿ß¼†0 ƒÇ Î ,¯}`8Z~ ˜¢úU/úµ´k:…çùH$‹ÅÚ3(€nëîa``'…\Öx`¹aÒ@,SUUUÕp8Ü—bxbBŠìZT[ëðB‰D"‘°=kXCMç8®Z­:ÆtöáÊã-E½ˆÂþ‚\Jé¯ÖÁX}òÀ"[QHö`ƒá$°Ž‰û0MtI¸Q`ÀÔÔrÚÛµkÃz³×B ¬É•#ú·€lêÂãñøââ¢Ã1ÃU¯ YÃ5M^‹ú—T{Ö XG…ÐÍeS©T*•êËÝ;À` Úd5Á8 –5ó—›w{X ,Ó“Éd4EÛx£-8¤û¯÷‘ Óét:îË¥Û«·öÄ‹ðÐÃ9z{&î/*„ðˆáRÕ¤òÖ[éXh.B)Šòù|}¿õ!)°:òbêÀ¢4Ð<.y`aPÚ·C¡Ð•+WnݺU¯×ÑžAy{@u¼,­íêE(°L§»œÜë…›¸wÕzhž7ëPÀP óFƒ>2ì(˜J¥R8ÙMµíS!oHêÁÇiôÖ?¼@÷•…ðˆáRÕé"äŸÉ) Ž˜°í×Ò®›ÈßA¦´…ÁKÂLhšáGþ ƒÁ૯¾zëÖ­R©ž‹À±ú)ÈFó:ÄÁ…aæü,š¦“ɤ›³ÆÆÆ‰„ªª«««})‰sÙ0Ž2„°«jn äõªáàB%¶ˆ-DÉ‚5e§éš¦»júdâN$òj¡; 'õš¸1Ú=Ww¢YΟéåÀ tn9ÊÂá%°ˆgñìƒ é‡ ¯¼òÊÝ»w³Ùì ¼½ñx¥9 Í˲ãããh›¦écE`yæ;ÃR©¹V`ðU ‡Ãñx¼R©Ôëõ‘‘—K‰4M£Øº>zBÛÞźó° ,¬øî:+1y°Úþ0„Ü` úȰï‚)Óz» 7%ôÐÕg¼$V»ß³+–¤T{8¨—$éqÄë/*„pXë5 iªÒò0,`YöâÅ‹OŸ>}Ñq‹P( …ú{MŠ¢ú{Í~Á㬆šFö6†+Çãq@é2»=Ý$à:HIœ/Žq¨}(Ã0}ñÜÎnþ%Ášõˆä~ƒ82ì¨ÀêýaÄ<‡0œ–ÕCîÈš•—œÀêRåe]äãÿÇÇÇ‘4ãÑ£G’$5Ës8 ,žçñtÚï÷w]Öc c¶¯. J{;’¢¨“'OYyé›NVIˆ=7©~Ü `ZYˆ…_nÑ’j\çãì’,{g–äXÍVÞƒŽÔ¿Ž“Y`+ndv<•®:Ý8ËC ”íÂTX[$€Uûw9rdçÎÅG9äŒILXGs‹$NaâÈE¤'ÊŠî¶éL‡žŒ±ç¼uÔX½24©f„&ÆþÑ ³Ð៷.¸ýöÛûe¼¶oß>ù7|ðÁ'ý46²%XóÜüÙ"+áÚ?ó–[nÙ½{÷¦¿‰Ýœdž€ 5>b‚Ž(*iWÒèzypïÐ0xX `e?â°ª‚“ØZn¿ýöÔPWys}ÙþˆØ Áœk`¹âs§'Qû¿tÜÿ‡Ã€OÓ¼Џ¯^,“9»¤*Vez"ÆFÉ–LŒpüó¦›nºé¦›úM®;}B¬î>6Ã׃¤UÕ–‡ØÀ–ÈÀšóäÀ^ ÚåqzBöZ®™@ZFk'3î¶íBŒÅwDÕoÜ¢?ÃÂìk‡n(+ŒY~ã7ÞÿýUU?~iiéÊ•+sy´djSÄN°6õƒn(˨Ou¹ÆFÌÚ¬9çSØVÆkû÷ïï°bŒ[+cÝ3Å ¬-÷ÃlÍÚ‚ä]nÆÇ”]M–›Ù:•e¹ÿþýû÷Ïü‘RÛ±c‡ý²Ë¬?6ÙԨñù ´È6€•êa1q2ˆŠûî»oÒoQ_9CSF—)ÖÀÚz,ó9}KbL±v¯TmtE]æBîu-Š¢(j5R»<1ެœ ó² `9räÈ‘#Iþê ×Ò[GàÄD~ôk`m¹–/EG?Ôˆ`å‚3õº\Њ^XEQìÙ³Ç~Ùå‰qwŸ ›á B–´ª˜@~6’í·„jõt>IçQ¥Ó1ÅX[.€å3°"!,MU¬X9k£Éò`–ÎíG·¡V¤6kÜ ©†“ØH¶X ‘5"û LâÆo¼õÖ[{Ÿ÷íÛ·Ù?¾¥X¦#–±ˆäBjŠEí5ÊУ&ý¶cÇŽÅÅÅÕÕÕÞ—]žs2 ¾ˆ;qd9d`a°¦ïöÛo_^^î}Þ¹sgÚ‡é²`ßPÌdù¶K3ÖÜ|óÍ7ß|óØ|KgMú@2X²¢_1ëcMÐ uqýÙ@{öì9wî\ïs—XnDìòc¢›9ÒXجé;xð`êGá"¼¢T¹œÍàÏ–ÎÀ Ä‘si>u¶ýhÊ,p|ßîÝ»5X!Ì—‰¿,’ærY°…¹¬G—+­ÙŽ[:€åq„P–ï{]^"b ŽæÜAl¬N°º¡,šNY¶ô<£  ɸÍI¶ºÎ¶mÛvìØ±¶¶VÅöíÛS?Î|ù 犖¦XÔVÎ*KD¼Ï7£Êò=nø¾ýû÷ä#Ù¶mÛöíÛ;][ƒ ¬ü0Êá!6B é0QÈ„|͈[o½µ_~+Ól=EïÂÔÏ€éaDTek`é¤ÍÜ 7ÜpÇw¤~ŠQGÎÛrjEܱŽ"!n{É #GfÁ%Œ ,idîäÁå¥Õ¸UóÒ<Ð Õ”¤`a°Lp+g]vtá•¢Œ;eÅ"ªï(£Áòàº!qd=¤~dÁ&B–´¤˜Ò^.DGÄ ¬6‘Ž{C±pR¨wCz¢¤‚Ký`ʧÇÌÇHIÖ `Iã2ЄÀv3XH¦´»"d`ébž ÍejSŒNUŒd`儎(‹ž§,¸eÝP•m9¶äø:´ €…„ÌЉ†ë†U¬> &A %qTýÈ‚MÀ*™c«q«éb7G•±W$µ²À‰ iö؉²ªÕ£•Å0ì (¡å¤ÙE©@d`aC°Ð ¼¡€4leÜuE÷¥l­,¾ö­ª&¸V²ÇÀ„l÷ÀRWL b#ôj$¸f" ´œ6—÷AôJU¬÷Dú¥2ŠÑeN('2 f!¶|)d`a XHÆ•‡à ¥Ëît%| Œ‡“¼™ˆ\»$Ž6Ë‚;SÏ[sÑÜ!ÕÐd؃+’ îìo«,0êÈq5°ŠŠP²¦F³ÑŸw'½P–/DG7ÂÂúgFCaqàGy €…d\ˆ‰B"óu=µ&£'JªbEží†”¢SFHhGEÑ´Zd…ˆXHÈ^3‘ð1€-Ìç}0OÐåãWLÙå°£“JÑicc5lçÈ[o«„Ïn"€…tÂÀPc+~ÐjÜIÞ¹…PT,bÉ”H-ð UØXÍqHEd`¡,$JSk ás[™‹#& Â",e´XÌ=vœ]’©E— FÜÐQG ÉpÈ%Á%úÒ¦j‚» ” ,Q±öFeå¬ÇÞjB7”eãÈÔÀRããW4Ÿ,nÇ–Ç ˆ6°Ž¿þ ¢Ü>ËfeÄ”•ùfôD5¶÷1êòÁGæØrÖ›Œ8r&Jº¡Ž¢½ ¹­.R?Dù»ÏhD5¾f-ÝPTUEÂÇÒ\¶GE7”åŽ&|Œƒ¤+  ì\´¢ˆ;`!àŠe2a‡~1ŒºbXÊךd!Šï³ ÈûÈP“i7vtÐÀ‚ÉÀ"ø!*P,Sš¯ùQ1eFOR‹"……ÀåBY03æ4Š¢ûLê`!ÀbŒÉ3>9.ŽÌ)4a•3Þú\¦ŒÌ±Õp aÜÈ´F= ®HÇß)8D¨Ê-›™(È©•¢ƒ¤XD_€Žž¨ÆW£K÷˜Œ½þŒ[Õ?/…(²‘åÑlhE éÔn!d® ŠëŠ•¹nH*¤0w˜—®¨ŒÖÓZ¾BçEw2€ÑP–«ÉRWí{U\Köè*z5’q5k¹þ,Ì×å¸ù:PT,"¹âh²øî´©ŸEóå€V”DF2ZÀB:v§+„È+ ˜?ŸÉuÅ¢"×)¨ã,/Ð%d`éâ$¨:ßjÌKQG é2°rசfÃY½<ø7(=QM–72ÇVC“eÁÍeØPG¢75:!ø¼{sâ/…¨Hó`»aX S >d¹¶+Yê â݉Vôj¤S¿t‰¹0w6€ NòÊŠß‘FƒåÁŸ;cŽ-&ðæÌ-ªÈ¾F#¥-ÐÀàŠNEàa˜üÉq•w’=&TÕaÓåÔwt ‰»@¥™#„œ Ðå›ŽŽ¨ÇÞÊÆ*š`!—ú+ÞPªX7K³w)PÄ]U¬ß˜EO J£Áò˜–f„ü4ÀBBþìo(MiþBÚOWúð"Í'y¥‘teøÑŽÒan—6ºÄ¹DHV΢bŒþ>Pw 1 *I Œ†Â˜™9cŽ‹tê©Ì$±lÖæ–Xl9Kcš®ÌÕÀ¢)Uñ•FÌ1®Ò¦Ú(m&V›H( ø`žX9ˆE-‹wª4ºaè†j\9Ýc`zAeAn‡#„h €…tjX¼¡ôÑ„â˜è©ªbdµ,ŽæË=wF: »±Êx(‹“ယèÕHÈع…0ÌÖõÔ3° Š ,m~G¢lÛE†D9nZJóiØÎG~š`!»r.é;ªÜ²9Ýc`b”¢SÝOwæÁ°Ê’9¶2°€®¡ê\‘ŽOý`¦^)j\™.Y!%ÍfëP´%tC5e¹ÐÿL/ÆLFrhÇjHýÈCŽ_³–n(*ÆŠ{—¤Ñ`y„‘³Á`¨ËžÈ¦– hÞ¤D#ÑD¯F:õ ,^Qò˜® â2ÐÔK¸³t–ÃÂLP=ZYøÀ\E··Êˆˆ:Wt·êriöÌøäøù:PT¬¦')ø‘~(Ægë0êbbšú!š`!?·#K…"´ùnH9LÙÕØ•3Ý0 ”qÑã.¥ùdE[R0ás`L¶óUÕZºAGÀBJäˆæ€ gin¾ `‰Š®dñ+=´X\ ,n!T̲ˆ]Ue´3W¤|‚–Íâl)º„ÉÑ¥Q+ ô)ˆÎ‡V°’ÏÀªÒ=¦ƒi‚žZÒM¨©Š‘â;ùàì’, !í(Æ6;:Âl7L÷Ÿ‹A²:`ýUU¼¢ä1QÐc7œC`Ê.*Æè*¶°rVccŽœåæR’Éýc«–‘©Ë7£¡6è i¶ƒë7¾ñOúÓÇß¿ÿþýû?þ©O}ê›ßüæLÿRñ÷fñ†’dwº¸…P«+¶ 4EÒ=ĹƣÊâ$¯8›’Lû© T„ç:EÜÑ0ÛÖ÷¿ÿýÇ{ÌþÊc=öä“OÎô/…„0Ýs`JXBKãÜ™²È”]M–Wœ[åŽæ€0rNb ¿u³\_~ùåûï¿ßþÊ}÷Ý÷Ê+¯´ü‘ƒnÛ¶íСC_øÂ^}õÕ™>’‹v³‹ ,Q6 IνŸÅ\OT,ØPg_¤ôCYöBÚQŽ›ÎÐ|ªüíÊ´#›Ù°–––nºé&û+8{öì°ßÿÈ#|ç;ß¹xñâsÏ=÷àƒ~îsŸûéO:Ó'DwPò H«¤ ‹H>芪|7L÷ EÜóC/TäÂŽtD4t+½ùÉ'Ÿ|衇vîÜyøðá/ùË'NœøÊW¾2Êl^_B8qâÄÓO?Ýÿ=/½ôÒùóçû_Úÿd?Ÿ?þ¥—^øŸøSÿ¾VýWlñïÝ!¥è¿bë~éxûôÛ’ÿŠ-ÿªAEÜåþ[ù;Øãfýrÿ ¾ƒÍÀºxé²è¿bË~›4býWð&Bêý+¶üwèéßj"ú¯Ø ßáĉC1ÅÌÌöÚô[n¹åÅ_¼å–[ú¿rúôéxàí·ßåÿò—¿üèG?zéÒ¥öß—¿«:ÿï†ëk½Ï§ÿÁïÞ¾ÿ£iŸcxíŸýÃÿârïó«¿ýwî{ðßIû<ØœåëËô_ö>^ß^ùûÿÉß>pûŸ@=·ôÒ¯ýßܹüþP¸ýþ¤Ø±#í#aSžùÉÿùo|÷_õ>¿}pï‘¿ÿµ¤ƒ1yü÷ö^~VSþW´¸oÚçÁ¦œ¼ðÆ¡?þ“Þçµ2ÜðÕšöy0žW¿ñþÖÏß_lÿåoÿÛ÷>øï¥}lÖÛò_8·ÒûüÎßýÒáÛïMû<ÏìB4³ÍÀºçž{^xáû+/¾øâÝwß=â',•={Yx¬¨¥É¥}¬-Çß~F®¶,®?“æ‹'{ Lʦ~”1ÿ ½ IDAT ãàhv˜Õ(âN´›mëóŸÿüO¦Ú| ~ZST£éx¡)ÔòB‹;B˜ð90GîXµlé,hšm¯þÒ—¾ôÌ3Ï<þøãKKKKKK_ûÚמ}öÙ/~ñ‹ýß`ó5~øáï~÷»§OŸ^YYùÙÏ~öøãõ«_ýú׿>Ó'DbæÀ—R‚$.!ü'šPS$K¿š+geei›Œ×¨*ZNMˆV³\÷îÝûƒüà¹çž;räÈ‘#Gžþù§žzj÷îÝóñãÇ¿õ­o}âŸØµk×C=ôꫯ>ýôÓGé"µõWTÅÊY“/î902°²‹èÃÇtE5%M–Wœ,9 ¬<Ø®G;ê‰-_E±8ë¿àŽ;îøÞ÷¾7ì¿Ú´ÀcÇŽ;vlÖσn ¶o(`þ˜çå ŠÑ­•Y8I4.…À«3¦–DHAö€ËC4Ы‘RtÇ—xCÉ LäØ ç"Ã’}õz¢WÄ^¨©Š‘ˆº8Ì›•Hr« è>SauÌq‘Rtó& ÀÜùtBQ‘ÜuvÃ9ác`"‘ ,iõ]†DU¶ÝP½ °–9BÈ+J·Ýæƒ ,a•³¶õùùȺX-K !DHŽnˆV°”KÕN÷À–å3°*6œUEf|Òh¼ DâÈâB8B˜_’n¨'º¿B )¹[yG)Ðõ2à"D¯Qü;‘ ,me¨uDÇ ÐÅGF,$e†•À J“q¶Ž; XúˆHJb4Ô‹èÛŽÁQOú„ØXtC=‘}8´"€…”ìÜ ¢ˆ»*3Q`Ädã!TÅùAu,•³†~¡‘ ¬¼0jâL=ÚÀBRßÑççë¼R1¿ÓgïÃ`¶') ü!±ˆ®+2 Š,œõ¹ ¢ˆ`)âŽ/´bpEJѯº ‰–ÓFµÓ ø ZTO`Ù¬/ÆÈy%iæ£+j²aätO±¹;¾è†h €…¤lñ™Њzba' $BÊc®$Áe êB-a‡ÔQ6Ÿ•n(.VtCÔÀBJö™(h²#˜'H"õ#ì8k æ¸Y ªŠt?qÁŸ  'j2 ÇBI4ZÀBgPK“›í1QG7”d7"S?E4š>2°r@«å…S½ŠbËW,¤]÷„‚ñ÷™‰‚žÈ }6g‡¢fŠlÓuYd`i õ"îtEI¶8=R’›—Ò QG ]Á-„@"v¦î)0ª2ïOæë@ UŒd`I ¡dµœÁbcU‘@Ò%QG )Ù.ÞPª\»1QÐã' Ä‘3@7TD«Éã¶,uq:ÁtÊnˆXH‰³K@r¶ºDè°ïÏx™êqá+†CQ”Žü•uD$U¹ÆÆ$HÎ¥ÎQK¦ÏWB ö!ɽ>+QoVyìè º‚÷“,ªeŠãÄD^ˆ_iZo¶@ê£ •¡d“ZTw) ,¤äÞI¼¡DùJfãNIpúLSàý©Ž—§¾hŽ`s„PTÅÊ9Ñq‡8š °Vð ²hDIv¡E ,MwŸ©‹v>ƲY’»ÀŽØ‡ n¬ËO`@]…Þ¥¨#€…”|Ž=KgI#„âü] tCI±°© c*i5}‘"îú8»”z¢:楨#€…¤Üõgépá+¦ì‚ìž3—.‰²U“hBEîEJj²w)ІŠBÿÞG3);F+XH)º#„D°$Î.‰ó+gZP’K£ ±hÎ@¤"¤¸ÊHWÌ€ßYMö›=BH7D,$e6šyCip„PŸK# )Èmç‚¥Š ,mõW'S ÉhC I¹ê;¬œ5±»%ŽË@s@%:q®z4½PS¤Ê«銒촔Ò’LG¬˜—¢Rr×L0QÐÌý L$ÑjúÜõg´§ °`æc †š"XâB½ˆ{²'ÁD"óRuôC´!€…”¸í%7L¹A‰hG I¹y¯¨ 0Uäº!-¨É®œiCA!Ø#„Œ†’\+ÝPiÈ@Ø=9º$ê`!%ŸnÏJ’k8ÚPPtŸÉÀ’8¼$Ž6Ë'yÅ…"D2°ôW’¥®×ñ*楨£W#)3Q¨xCéc ¦Ž.Qö¼R¤âÏ ×t°T­7\É™zE„‘ÑŠR L÷2@æ‡8W«…n¨É¥Îq†P­¦Ï¬´è…ŠÊPÒpÙ¡EÅÁB,¤dSµ©;@ª¶"·Óµ–î90¾@Y?ô±ÎRü¼”l’Q͆6¬6‘T |’¼ÐòøùzºçÀì%\¦‰V“Ý] 4¨¢Zô˜Q[:âX¢,¤ä¯~§=Q®ˆ; <‚èz¨L‹U ßr¼Js@_ÔãÊzr¹`!)»EÉ J”»í…‰‚ —€Å„]R¬lê#»žÒÎÇ8¸$ŠXòÜýuôÄ Ð%q­˜æ"%?5 ‚$àR홯«"m@Ñÿ ¸íœtqÕ2°"·cë ¼Zù+¾˜Ò Ž:ƒýJM¶Ù˜(H2­VÀeÎ. QäâÈ4 >Þ¤¢˜Šf€6òF IÙ[#;]ò˜4(r×õÀÒÝ9Pè ¼>õEÞŸúÜ»”ÍЏ ­`!¥È5p%°x¥Šœ>“ç#Ì×Ñ õU¶]ÂçÀ"]1Œ‡!ŽŒ&V›H‹‰Z`®'«ßÕqþ:¡°w)Рšl»U¼Kå•l¬ rqdXh W#)rDõòíűáœwý+g=ö!í'Š<È P=:Á4§³5ÑõІRb¢Ûn%¯AnÙRtšX:éq„PŸÛÐa@Ô亢6¶ÆÑÄj]˜ïécš ÉÞ¥@ª²X ã Ôá—Ýéžp«ôÄ ’¬ˆVC+XH)º[>ÆÇ £ÎßBȆ³&VÎ☮g º ,ZT’?À€(Éõ=âx“¢‰º‚ , búlä‘Xˆ$[‹ÑP’¿ƒF”äjr¦^“«lÁ€(Èç7Ð QG I¹y³=Mßɉ ž "Wi˜S ¢LÐ*Òˆªâ€OÌT&p ¡8Þ¤h¢W#-;e'Ä.늹9:ÝPqdqd d Ú„T·cç€î'ŽûÍÑŠÕ&RbÉ•ª~Hr5°Ò=&x›j‹f>Æ Є¢üŽÍ(TH ?°ãJ^H"Ðdk 0_×d`Ó ÙF£ŠrïO†CQ¶´E\K÷ŸÝŒˆ’˜—¢ ,¤9B¨Ïg~0QÐãï¯c¢ )üæüu`¾®É!¤#jªˆ%ç%0/s´!€…¤(5$ØéÊ©@r¦þ7ÝPS0[:\ˆ¡ŠvSgºa ¶`!-2°²ÂuÅ@ÔpW¨ ©ÏnPyG•»J2ás`6ü‘ð10¦H"$ZÀBR ,@j‘K—ô…b}€&TT2Ó8Ê«ÏßEÃÆª$¿À«U[¤¢^”|ˆéž$n?Óg]tCI‘RtêL«QŠN•}•Ò 5E—EOÔDÃÉãŠ6°Ð 7@dû pìE›¯4L?”T¹J4¢(J[d%”,u¹ƒÌiPG¯FRb™ U[[ô׆§{L gAt¼,PK^t·š$|Œ/ØXŒˆâh?4±ÚDWpË„¨À<]œ+øAcj ¬´Ä…°>£5Eq >~FCORàvl´"€…”ü;‰Tm}LÙ™Vcå,Ë4AZMoÏP›5¦áxµª#¿M°ãJØtÖæŽ2QåªGÓ õ;I§ŠŠ!”gcV‘XšüBèáý‰v°9¢y¡Ö€$W<šn(©21:¡&ÚMž¿îÕD ÷Ø”d–ºŠ(‘Œ6ôj¤dƒVÌõD¹è©Šl«QÄ]ÅwÔ•4›¾X‘•"Xú˜—Jr'y“=:‹’*Mˆ•³>2°$¹ gº¡${Ô%Ò %ÑjúâÏÐáŽ`Ó)ôx™¢Žº‚êÑ@6ÞÁV¥(;¦Ù¾Çh¨)d`É‹nG‡ ,I¡å+H`@D+XHËÝ–î1€-ŒTm}ßQç«Ó‚’*Ž]`K`¥{ 3B )E"ìú|ñ¦ Џ¯G‰@rÔ¢Óçoqeb*¯,Yêê¡ã¡½iÙ•3ï+yËTÇ­á¢;Îê81‘ûþd4EïÓÇ‚B·¢ ,¤ÄŒ=ÔPé‡úl»EV΂86˜_Ãw©$ûþdG' ,u™ãØ Žh W#¥IÕ:„:QXâl×£ýD¹»hx—f€kyEÙÅQQ0 âÈh €…”|©& šLÃþHÕ–™¯‹#+.‹)(;R\P•™—òj²C )¹¼Pf{@zLõDñþÔf÷›iLUÔÀÒWq0 /e`©«‡#ØhG¯FRLð2`R?Ê^)‚\™Iƒ${v‰Xšh5yÑÕm¦8ô ¨p×òjUDmV´bµ‰¤xC©ùé:ÝPSôŒTe_Ÿ4¢&J³f†×©&ú!ÚÀ0!j ˆ3 ö%Ml8«£€`l+£¡,n!”çûK]qLKÑ@¯FRd`é³+g&ì긮X -}®v44Ù“¼´¢&WŽF”D*¤ºØò@ ÂD!$(☬z¡ ›°˜¯kŠ•ÝÏ¡J²SQŠB*ŠîR^:"!XH‰Z™¹a¦ (²[™ŠëÏÔÑj°EÜiPI‘û@õÑ÷Ôq>í`!©’™œIý¨è†’|ÌŠÙ»W‹^¨‰Ô¹,P+3 ˆŠ(âŽ6°Ð¼ 4¹XWŠ 7»£j"‹N\éb4¡$wt‰6ÔÄ-„9°I;ÌK¹nH?D½)ù5o( …@"dˆ`©£VÖv8B˜ƒ@–>:¢$“™ð)ÐU°µZ2À–3ñ+y4›ê˜å€Xa3Môj$Åžs^däÑ E¹†£#êñg^ )r”7#„ò¸C?ÀBÔÀBZD°2Àô@œÛp¦Š¢á´›7Gcj²ùÈ´¡¨HÓå†9ª"6І’"~•†A6Áž gQ¶œ ½P5¿õûȇêµÅè:bàL½"!ÑŠÒâЄ{„7+`!)¶(õÙÅ2IŠüm/LDÙ£.Œìzxyf T¦ˆ;í)ІW›Äðj•d祰ÐÀ4IÎ.å…y‚:z¡¦`—ËtCA>’&”]™F”ä" ˆ‚b¬¨Í*®‡V°L$´| öBf š\±aæë’h5}\šЏkc“Nò¢‰Ò²XéžSÂõg’J»êJ÷˜]O'yõùZ-tIMnZJOÔ‹È\T-ˆV°ÐrVÅŒ]]$K^ K\éZ”ä¯Oà]*P²*N ´#€…¤ìÙ%Æ› 0Î fÕE/TEÐJ-(Ï&ìDT '®^ÅÕJÓjSÔÀBJ¤gg€XúÖÚOUdÃR[à¡>wß½PSåž*VÜ<¨ÎÕ½¢1Ñ@ )…’ ¬¬0iäνР%ꘉãå™X­¥~L/S è ,¤Ä;)v›¤d &ÈLHýµÞpÔ¯U¨•º¡(ÚM\,¢ yÐìÀBJþÐDÂÁt0MPDÏË'Õ‘•Ó#ËfM®á8B(ˆ)MvhRÔÀBJî3©š¨%ÏÍ×Ó=&ávÙQ+î$/¨‰#õò"ûòlÒ ÑÀ4IÙCμ¢rÀ¤Ao3º¡&—E# âÝ™2!õ™P2QHEUŒìè#‚…6°/¨Pk@›=180‘º¡Rr@üJŸ ZÑä[y©:z!`!)[=šW”¾’‰‚ 2°2¨Y+® Áß¡' D°ôq¤^\£Õ艂h4´"€…”J3ÐTÌ4ùÄÆ=±äºb 9^žúlÍoâÈ¢lÃUä$ëáàg8¡ƒ6Ý `:uêÑGÝ·oß¾}û}ôÑ7Þx#õa¶¢yC1×’p]E—(2°Ä…¢`š./R>I^d6ªTHyįЪC¬K—.;vìèÑ£'Ož™êy0~”aŒ‘G–$W+Ýc`"!ÔV†@÷SÇ] Ù¡Kê‰1r„PïO´êPëå—_¾ÿþûí¯Üwß}¯¼òJªçÁ\pvI[dʮϵÝPTdÂ$æz!ïRU¦· I¸…SÔu(€µ´´tÓM7Ù_9pàÀÙ³gS=æÀza¶¤Ãú@À4A¼ Ø#„‘QPÔÀ’ý–NªÇÀØb}&COTGF›°&9qâÄÓO?Ýÿ=/½ôÒùóçû_Úÿd?Ÿ?þ¥—^øŸøSÿͰºâ¿bk‡úTAó_±¥¿ÃÅ‹úŸ«µ5ÑÅVÿ.+¨þ+¶üw0¢î¿bë~{ aªÿŠ­ý*;>·´$ú¯ØÊßÁNi,­ÅÿSÊåþ[ç;œ8qb`(¦˜™Ð]¾[n¹åÅ_¼å–[ú¿rúôéxàí·ßnÿƒ!tè_Myáÿ{â×ÿÕó½Ïñë7ßÿýAÚçÁfÅ".ÿþ—ûÙs割¸m[ÚGÂfýìûÿÛmϾÐûü¯<ø¹ßþ¯Ó>Æðçÿ÷×?û¯ß+ßüä=ù¿›öy°Y1Æ«ø»‹kï¹øÿûra1éaÓ^ü—ÿûÇÿü§½Ï/ßsËÿáñ´Ïƒ1üËÿë¿ù·~øNïó;ûÃüÇiŸ›õîÕ³»¾þGÛÖÞŸ—nÿ£R,2/ó“ÿç¾ç™¿ì}~åÛãßÿiŸã™]ˆ¦CX÷ÜsÏ /¼`åÅ_¼ûî»S=æ ûHRO­V(;ôJÁˆ(ž”ƒAXÒØ«d@ÔCAÈ ¸Ë@Ù—é|@Þ:´Úüüç?ÿÄOØ_yâ‰'yä‘Tσ¹0±„Oñ1½“\ç£A%QC0 ÔÀRÇv@âÏÐÐh3z¢8  `}éK_zæ™güñ¥¥¥¥¥¥¯}íkÏ>ûì¿øÅÔÏ…™bå $Æ] ¹ Ù1žXTÿ&t ñ« ;'.±v‰]ºgÁ˜"—Ô£U‡¦¹{÷îýÁ~ðÜsÏ9räÈ‘#Ï?ÿüSO=µ{÷îÔÏ…Y2ãJ`º.Ȧ Df ªìD!ÝS`îðRºÇÀè|êüá3ú¡$× Y9 "}5Zu«DèwÜñ½ï}/õS`Ž˜àÉÑ sC‹j²íÆŽŽ¢hš^¨‰Ôu±ˆ¡ìH#þvÊÀ–d~™(оZÄLïLŌػ8B(*˜v‹F”WE"Xzèx9`£™LVhM4À@½ƒ‘]Rlù *ÎÔë³ WÑ õÔÛŒž(ˆíp´cš‹”ÜŠy‚"æëàÖð P=:/‘QyÙ¡AEFA}ÌiІR²!f~@~šÀDA³=}D’ÅEza¸[\EÞœ¾Hi ´"€…”|Êo(=µXÉžd`és‘Gr!s@OÔ)É ‚¥-Ñ…<艂]­`!)—Å#ÈÇ;8µ.©4Ý0ác`n¾ÎÄO“Û  ˆ» È²Y_dG'ô>m6‹nˆ&XH*²Ó•6œe1_Ï =1tDAä”g–€N#€…¤ØégRuHƾ?KXšˆ¨#K_t+#º¡ŽfÀ·Ýu°Ðœ>“Ç#ŠË@ðéŠz"å“ô¹Bf´!óR´"€…¤¸fB%?2¸ 4ë #»<ú¡¢`+—1 j²QHDEDÿ³ÀfÚ0ÍEJþÀo(y¤ÑI¢ÕôŸ½E¶Œ`¬(â®È´`§À…ÄÙUj³Š¢À ÚÀBRnha˜Q´¾Êbˆå6œ>¦…)»>VÎ’HIÖÇõgúhµ¬ð&E,$ÅÙ% [膒‚ÛsNø ÀVfߟôC ØòdðþDXH*rÈY[dº®¯´—è…¢\æ]Q½OËÀ¢95qxI\¬ÖR?&Æ,­`!©0ð#€yâ¡<×p°4Ù j`éc‚-‰•:W’ÑPù hÃøŠ¤ìÐÂt]PŒë;]Œ0ªl™VEÃå¥"õCPðkçdÏI¸…3¨ˆn¨DH´"€…”Ê’;œ膢8Í›z¢žh÷álQÔf:$0¥Aã+Rr“=ÞP‚¨•.®'Ò¢ò"+gA6‹»TÙÌâÈ‚beº!ó G°’ Z1_Äô.¥*T’YQÄ]”yй"îtCIn/€^(ÈEÿé…¢lk¤Ä ê`!-Î.isÎ Ÿ°<Ö\¢ˆÿɹŠÑtIM!0/ÍC£¦@U´"€…”Õ£ÅqÎ%T¢Ógkµp;$·* ¤~è‹v2J/M·ª"ŽŒV°’Ýé"€%Ézaž *Úšµ ŸSBOÔ¹þ,+ôCQ”¶ÐF›e†7)š`!%[«…!GQ,8š®ÏtÃ@GÔäS?ÙÈÀÒ‡~þ‚(¨#ŽŒ¦¹HÉ’à %ŽÛ^Tq„è{ö³"R3UÜ¥ Ž6Ëg?ÑŠÒ >Aˆ™¤sk¸(W³–FÔÈÀÒGyAIÜB˜*ñ˳óRšPïO´aš‹”Xh©c••2°€ˆÔÞ`e r»:.°ÓǼ­ %û‚ LØÀÊ»K•ÄÊ97ôDE,œõ¿RÇ®D°ÐŠ’*íO Ó==Œ*™a¾.*°rÎÅwäÑå±rVM wŽŠ"ŽŒv°”½þŒ gE¶VÂÇÀüI^šQXòlßc<”d¯¥¡Šrñ+ú¡2°€ìÀBZìt©£Õô¹82«.In‹’FÔmD:Î@´­X1ÃQD"¤¼( ‰6°Ð¬œQ+îĹÚ`^­‚¢‰w„’ ¶>Þ¥‚xwf€6D;ÆW¤TÚŸ@^W‚h´ ¸|{ZT'óÂ)EÁ´«hU¤~ˆ³«ìŒ‹òXéž]E )¹*}¼¢1QÈAð Rü-„Œì’åqtIm¨ŽÕDBAmV´aš‹”±ë£Ùä…îRÐGÚ·ê³óRŠ$ÉQÙM°ÖúO ë/ HYžÏÀâeªÉ4\UQÄ]½HÎÞ€‰#‹¢ÝЊ’¢Ö€8Ú,œ8Ë€[9Ó ò¨¥˜¤è®å%ެˆ®'/F.B¦¹H) ù v§‹&ÔÜ|=áƒ`|¶êQTlù h´ Ä!Ÿ!"Ò„pñ+&5¨#€…¤ìÊ™.A‘€G8ë’3Ë4¨(Ûn¼Y%QK_Iõhmîü5£¡&W"™nˆXHŠ7TFóuM>‹n(Ég`1²g€ž¨Ç×pg@eZ‘ÔI¼<åqÇÚ1ÍEJQu.ï#ás`:hà )Ê6[EñE‘³Kò|¨ö²D )…°`¾b ÑC¥á™“E,HÁ½IÉÀEÃÉc#&D;XHŠêÑ⢫5î90wi±M¶†`X`d׆~ &+ÑäÏ.‘©'ÚDHz¡&;/¥´š˜æ"%n!:ÀÄ‘Ù÷€‰ñ&#Åw´Ñh ÑŽ’b‹’W IDAT2#Œ7ª(E§ÏçîЈ¢LIAR?$‘¥/ üIÌKEùDHšu°ןi£Í²@ ,yÁÎ-*(ú àPT’%ÎFÿ‰#9"€…î`˜DØ1.+Ýc`jx—J²×GF^­Š"Ù;òü~ÝHŽ—)ê`!%{ !XŠ8ç’WÄùº&ûþ %#»õƒ®¨É4\¤ˆ»"—ú‘î10HäQ‡@õ1E+^ÓHÊß2Áû ˜?—ÉdO_ÜB(ÑP‘ßàeª‰êÑêÈÀÊtЊÒªßá-%Ǥ $| L ”&ÞÁ|]“]9Â9 '*¢z´¼mõhº¡Ûf‘ÑP ‡V°” ±,9qm-õ#`R®ä‹®Ј’õ‘ͪÏU§Ñ÷2ÃÆ*`!)—#Ê+J“Q¶ä½P“/âNOeZ鉂\"$lM±å+(ˆ­&¯dƒVŒ¯è2°´Ñ| K•í|%¨É´k0y̯5qý™<.ҹ㠭`‘”ÏÀ"$˜¯Ëó»•Ì÷DÙhôDAöýI/Ô䊗q„HÁ%’3¢ºƒ ,=Ñít1Õ“TšKëX5‹òGÓ=¦…ž(Ž#„¢ülú¡žHè#d`¡ ã+’"õC–úüû“•Ç›U‘톴 *æ¥âhµ Ø“¼¼LÑD )…ì·.ÈØÑÜ|=áƒ`L±(üÕY°$¹Ûß FCEö(Ý04¢7‹¡9"€…䨱Rr…Û™ìIŠnÏ™);„»…n(ʦ~0-U~„@EH´"€…Ä¢+ÔÇž³{b‚éº&éRÂÁ˜jX¤~¨rµwèŠz(ž”Šïh£ëåÀ­ 鈨#€…äÈÀÒ¢ä‡:2°rC?”d3°è†¢CŠ l¬æ€~ˆ6°XÒÜÅ‘ÌD…õ€&T9¯” ¦ì9a‚­É½Jé†zì¼”qQw) ã+R !ØËŠ–Æy.S€ö‹X¤æŽ`s[Sivt8É«(ºƒŒ† QG ‰U=ge$`å…6”Ýb™5—¨èZ1Ýs`l>‚•ì10ßóhDAôB}´ÚÀBjî¾æìÀ¼…Òn8³pÖkÑc¦~ªÖ[.ä#ëññ+ú¡¤ÀÙ% µ`K[Ð Ñ@ ‰Å–¯Ðy±²—Ò=&aŽS/¢lçsIsã"ÉŒˆ’8t¦»¡ôq8­˜æ"5û’ªØsC¾N‚Oƒd² §Ñ Y€i µž1ÁVL°%vtÄÙÃ\o"Êe`цh`|EJ!¸éA¤Š0öÄD`Æ®'R{';.¹*lر¤Jjìè@ w)d€ ,´"€…Ä¢ ­“¥ÆLï?ªªç}0Y©[›×ñhCA®Ñˆ}hŠnG'áƒ`\t= w°Eܤ\ÍZö+5Q=:3œÎ–D7Ì©âÜÁº¡¦`4!š`!1³b² &F›4Ç(£)Ô¢ÈtC1µ#„)»(j`©#€•»2¢ ¢çé %£!ÚÀBb‘ ,e,•3\b¨ðçwé•¢ÅÙ‚TV劸ӈ‚"ÕH2|~…Rª…?"£Ž³àb¦§Ê!$KP,HýÈ P’)⮩´×ŸSVÇh¨É-é…h €…Ä\o)54Xl+ác`L±ˆÜB$¸KAQu´=XHÌ¥í°Ù¥'ü!¡d ç×ͬœ%¹zÃä#+2sÎ׫ 럙”J2·c3j²=&Dë$f×Zl|éaÉ€+ùA7ԋ莺°rRp‰¼GEÙ(dÂÇÀظJŸÛX¥ Ñ@ ‰‘%Ͷ5°d¹b™tBE6ÝƒÔ Ð 5Ùݺ¡¤P.lü›ÐaÜ•ÉÑŽR Á½£bŨÌ "¬åÄ 2°2`®â¡žàŽ2Á–Ç›T‘iCMv/€I)_‘˜Ë¸gÛD)X°X±¢ª‰TßÏQHqœÅ8 Ž¥=XHŒqFsôØÓg"”}1AHò©4£Û‚d`ÉâZÞŒ° )DÞŸhÃÏR³G¹wI›Þ1×eXì] ŠþìÉ; jò×BïOu‘n¨¯$ŽŒ6°XlàÂÙ ¤~ª5SvI\i"φ‘Kº¡¤P„ÜÎjºgÁ8˜Ãd  @+~>R­ˆ;9v¢Y6‹òX ã©ÕÀbå,ʆôD=¾x4ÝPS(ØLÕF–>{› ,4ÀBb¾ˆ;GÕ°ÊÊ ‡õ46œ™³Kb@ž#§{ L‚ ,u4X8ƒ6°š'ð’’Æ†³¨z ,º¡žÀž³>×n,›…–¯ "…¿^™ž(&¸“2D ‰Å¡_@ ]l8«cåœ:ž<š0 ‘Ý8mìçÈ+]wu3`:uêÑGÝ·oß¾}û}ôÑ7Þx£å7‡†Y?Ò Áå D“åÁìXÀR‹HVn(û!(P2¾ï1 ªqsz¡*Àb¡†Ù°.]ºtìØ±£GžùäLÿRˆ¡ˆ»6–%.r!Ô\܃DHMd`ɳÑFCMÁ].”ðAÐQ³__~ùåûï¿ßþÊ}÷Ý÷Ê+¯´ü‘ƒnÛ¶íСC_øÂ^}õÕ™>º€ ,q4Yl×£ª‰± ”œHÞ‡ºhOòÒ%%•¡¤'iQ ífûó±´´tÓM7Ù_9pàÀÙ³g‡ýþGyä;ßùÎÅ‹Ÿ{î¹|ðsŸûÜOúÓ™>!’‹C>CƒÙéâž]•Ýì*8»$&’t€»-‹´<°££†Ë“´[LýNÿtááÇ¿üå/ïØ±ã+_ùÊŸþ韦}*ÌNÁqgÜCƒeÂôŠø•¤ÆÁè1'yiMA¶ÕÂì¯ùÆLÄÚn=QYJD¶sD¹#„ôAÔMs| FïWöïß_Ë·:sæL-'«ÅïüÎï<ýôÓ›ý«ûNœ8aÿøK/½tþüùþ—ö?ÙÏçÏŸ饗þ'¾Ã,¾ƒ-U¢ÿŠ-üìÑ3ÝÅVÿ¶^¼|Aô_±e¿Ã«ùªá…_]¦õ¯à;81êþ+¶ìwpIW!ˆþ+¶øwxë­·â U­ÅVþk««ý/íg­ÅÿÁ%³ÑÅÖù'NœŠ)f&Ì´^ï±cǾò•¯üÖoýVÿWþìÏþìÿøŸzê©QþøéÓ§ï¼óÎK—.µÿ¶fû¯Àì\¾|yéùÃ]î}ùÞßûOo½õþö?‚Nyù…?½ëÛÿoïó‡v}ô?ÿoÓ>ÆséÄïn_yÿ-zñþþ=Jû<Ø”wWÏÞø‡'ú_†ÿdÛ¶méczýýƒÃ§Îõ>ÿèßý7?ó©ÿ íó`³Î}õ÷v][ë}~ý?ûâÇ?|_ÚçÁþüÝ>ðϾµëúûâöôÇÅÎÒ>6å_<ÿÏþÞOzŸß½uÿmïÒ>ư´ôÖîÿîýťʛ~ÿHû<ÏìB4³Ípþüç?ÿÄOØ_yâ‰'yä‘ÿø·¿ýíÏ~ö³3x.tˆ/âN®¯¿áœì10™hÏ.EÎб—x‰*£ñ´QŠ.¡((m!-ý@&fÀúÒ—¾ôÌ3Ï<þøãKKKKKK_ûÚמ}öÙ/~ñ‹ýß`³Ë~øáï~÷»§OŸ^YYùÙÏ~öøãõ«_ýú׿>Ó'Dr6U›•3†;úÂŒOL¤äGv¨¥ÉÔm¡#j E ÷i³­WÒ%W+რ£fÀÚ»wï~ðƒçž{îÈ‘#GŽyþùçŸzê©Ý»wüÍÇÿÖ·¾õ‰O|b×®]=ôЫ¯¾úôÓO=zt¦Oˆ´B ð°¶ÊÝXÇDA•#Ó%åÌ‚™§3eWDVXÚ¢}‘&|L Ðthµ8ë¿àŽ;îøÞ÷¾7ì¿Ú•Ò±cÇŽ;6ëçA×%UV"9÷ÒlÓ>aÜB¨Íö½¸…PR¨U&€%Cõ¢ÈÀB+ÆWt o)5®Í'ËÎñ˜¯k‹3½ùÀp&õƒn¨+JVƼT_ÉZñóÄÜî2R?t‘€¥X™`8Ô섆ž¨)øf¤# ¢Í²Â›M°œÙéªuÄØXŒ1ÂlÅ&j([–‡è ïЦŠ\îG²§ÀBAJ²:º¡>6ЊR Áït±r–c+E0ÜÈr5À+Jщ‰&ŽL7ÔŪYÏÀJ÷˜ OZdÔGw´#€…ÔÅ2ÔÌf—¿Y ˆ#gÁ¥ ÐŽ’l ¬…„Ï ÔŽ2/•c/M÷˜@pEÜ部#€…Ä"Å´Ñd9 Jó÷·ªGç€)» @5A}eíýIOÔÃByöWšM°š½í…‰‚6FY.€E–—Å[T—½û ÚBd‚-ŠÒ@j쪢ã+s£Y9ˉ¤jçÀ6#SAæÍÉÂ<°#Èu!RS¨ÝåJG”C7rG )…ಘ'iØé:EÜÕØÜUâWy`4”dë¶°¥£©:¦/Ša+< !DXHÍít1QPCõè,øÊ-tC þ ê±X¡dD”TJ™e„^¨)p„­`¡SxK Ø‘n¨Æg`1aR C>CF¨Õâg@”ÖS°"ÝPSinq¥ ÑD ‰EЏ+ó%ÌÒ=&d&ÜX¬'Úùzä Р¹ÈÝPT¨¦/ŠáônÈÀB+XHÌÏxK©¡XflÇ«( ¡ÆU¤f‚ÑP;BHO”Å™zi‘Ë…òB¢‰R ëŠÅ¹,šO•è¤Ù˜#ëfY‘¼œ&Ø’BØÈ-)* @+~>X$MH-ÁRÆIÞ<º¡4_ŠŽ•³¨Bär!e~3•ލ©dqˆ6°š‰`Å‚³Kbb`¢wˆ0ÙS`<ôÂ,¸I:m„°dÅ‚³4j`e 4¬4(š`!5M( ´XØp–Æ-„™°½°¢ª©g`Ñ%ÄŒÐx¢ì7 ¡‰£ê‡4—ªÍt]/#¤~ÉñNÕ|uOšRLŒkë_0ª C>EA i…(-Ž&Ë‚™äEn!”CV&¨ú¡¬Ö i@Mõ ,RŽMÞIøf†‹C>˜#ª( ó1GÞ£y …Å‚‹ìT…Pr¹6»ÎŽŽ&Ž¢,$ÆBm¤~dÁ—ü KÝ0 n4¤Õ¸ Là$¯.?e^*†Ž—l€‚&E,t  !ެ†&ËmªÆnç‹.Q¡à,¯6W›•æÓDÚÀBj®ø/)1´X¢ ¨%-’ú¡Ëd]EnxÕã®4¡Š Eàd€63…‰%È,$fƒVDÙ$Üj™^(Ç•ü ýr8B(Çô¼ªžÆ!ðUg– Ÿ“‰ä7`8XH)„à2°X:Ë¡Xf&l7$KŒ}sFfìº\Ó1ÊqMF?TkGÅðê²G ‰¹mfæ @ \º¤Í.±X7 c;G™Mc EY2ÁVå¶èˆj8Ì‘ [›•õ!ÆWt £ŽVY™0Óu&zêÕ£Ì/!ÔÎïÒ¬b¢ûÌ–Ž*Ž¢,$Æ HÎv¼ªb§KïPaö6£¡G2î¢E!ÅQÍ"qÈg€º…7”˜àM@”#S\Ž‹92yÏ,eä&ë !ÔŠ`%{` #¿-`!¥úuï¼¡ÔØi:ÎÊØpέ— ^§jü•&õé t%-r¹Pìú¢¢<XHÌËd¦ Œ=geìt)£ˆ;Ð%±ˆìèˆ …ÏÀb嬌Nd‰Rã²eüηfƒÖX6+«e`¥{L(ÒzÚÈÀʃi»Š© XH,ºÚ;¼¡”1QÈ+g5þÄDºçÀô0J‹1ÒE•¡t½y©î̃/áμ,¤æJ 0ÔˆñMÆ|]·†k3›“Ü.ŒDHeÑ„þ#X²sÑœÐu1 b8XH)„`SµÉÀ’p'&è†z؜̗ʩçA²t De¾Á膪l;Vq-Ùs “`¡CØõÒC]vhE9v…™® >A…釱¤eÅk§— †&2G ©ÙŸA W<št5ÜžÒ>rß¿ÌzB(mJ2×òê±S–¹º1=‰E^QÊ|aEæëª|Ï£ #HÃf`1*£&¤8Ú,¾ÙX…C ÉÅÌO Z¦2{q$XÂè†ù KTàV“œKÖÅxˆá`!¥‚ÍÀâžT=\B˜n —V™¤ñ€4ÈÀÊB(Bdå,yi\!ºÈò,¤Æm/ʘäÁÞùN'”Ãý­™ {N›[7‡’ÖT[¾BçÑ`ù¡j`!5cOöO°©Ì×UEÛŽtC5¾Éè†9`ÃY¿ ”#„¢Ê²dcUZ + ‘ G ‰‘i/ÍÝ~–î10)ŽLhãìR~hH9îÍIûé²;:Œ‡@rÜNƒXH.i~Ï¢lÛqMÝ0;tC=õ ]QR(‚{ÒÕ¸`Y<²¨ÍаRóJÒìDi‚2S‹.©‡&Ëk-i¶ˆ;¢¬PËÀâíª&´|Mgêá-¦~ly.‹7”ðŒ‰‚ªh÷2ªIçë×®]ëEÁʲܱcÇ„ß Š•}sÒ $j'ê鉒B(9RŸ@ûÉòÝv„C ÉÙVº§ØŒŸÿüçï½÷^ïó‘#G>øÁ¦}ž”Dš ±·NÚ¨?üá«_…Tzè¡ÅEš£`Kv(ù¡Çf`…P’O'+D°”¹žÈI# C¬+˜¯Ø¢1Q¸råÊÅ‹{Ÿ———Ó>LZ±0©L×uM¯fmŒ±2 AUEZå̹ë膺LÈ#h †Œø£®zò©ÊóÀ5D¦‘œÙ*yAÙ"A[~}†|†¿á<Ñt­GPQ óu9Ñg`%|L"Ò÷ĹIQ–¿JN ‡R !ø³KÁ »Dç­jð…¬éݹ´¶¶f¿ÜòÞ¹p+ç„Ï)¢!¥1ª"Ku¯ò¦·±Šüp„© – €ÕØs΂۰œì.2°àÿä ѦjÌ›“ÑPWJ×÷æøv½zõê»ï¾[–eY–;wî¼é¦›æöWçÄ7=Q•½ ”9j`!¹éå~Ì‹;) òÌ3bsí™&èšâáµXsà/}§#Ê C¯4Y[[»råJïó®]»æøX‰o±ˆaÉJ•ÇzáÂ…×^{­÷ùÀ°Æã2wè…yØÚK-4ÀBb~£Rã EÖ:àì’°á+çÍâáüÙ—ÝP˜Ï„´ÿåÂ… ?ýéO{Ÿo¼ñÆ£GÎñ±¶¨_üâ—/_î}¾í¶ÛöìÙ³Á + ¡1ÑÂÕÕUó×ní¹åì­&tD]¼EÑ‚ºDdÀ&€µŽ®ìLX?‚#„)•‡¡Û9 :ó÷Þ{ï---õ>ïß¿ã–m2šHZL³±º²²²þ·ÒÍÇåöãØÒÉ5qG‡¨Œ×¬%ЬœeÙ® ¤kXty°ÿ'Ó u¹U³kH;èÕ8›½n˜DÈ<„Ü¡ì9Ž`vôdèÿ×eÁ¾E«jmøoÄVD ‰Ù•³ÊÕ!°Œ-þÏÏPœjwÛs0ÅfHÈg}Ô Io.˜‚Émz ÷¿‡X¢Bb¢Û…ÈÀš>º¡.z†#€…ÄlÐJe¼f-±Ž£Ky˜ÞQPŽ&`7'™¯ë¾CÖüÙÿŸk‰¥Eð¢Ê ¡K¦–œ0àä¸nȨ‡XHÌît…±ÞP1Æþä2„°°°0'Ž ,dÆvÃé!d±=¼„rÇÕ·ó7QÐ8²0Gõ°³ dŽR›xžwîܹ9_ÏD«/„'²3Ù4X P<: Á•¢sÿ‰ ¬ùÛlÐо®X5Ë õ:2°Ô¸¢tEU~c•Q,$f' ã ØóŸÙ³>UÑž&Ÿì'ºËX/¿üòÙ³g{Ÿï½÷Þ|àiŸgZ\™ùº°¡‘HXó·ùÿÏ™ ä „ý=vsû« `MÿÇåÁÞ¥@o@ ,t‰HKw-ñÎ;ïôfH«««‡Ú¶mۤߑA%Ó»5¼ËEܯ]»Ö_!Ø¥BQ/¼ðB/¶µ¸¸x÷Ýw8p Áófuuueeeqq1„P–eY–Áä{Ä@ŸÔ54LáÅùÛì@MÂ5°t…"¤šÙt6€µººúÚk¯õ>/..~ô£Mû<íè|¹Hs—$ÀBjn§«(ŠbiiiÇŽ»víñÌ9œcÔÍÀzíµ×®]»Öûü|` ,äÁE=²=BØè'Ž­®®ŽR°9¡·Þz«¿–8|øð]w݃ý·0{WÕ2[¯[1fpÉÝ[o½uêÔ©ÞçƒÞqÇI§¸páÂ~ô£Þç={öl~jA7ÌX5+++o½õVïó¶mÛ:ÀBÜvmàÀBbnŒŽñúõë/¾øbUU‹‹‹{÷î½ûî»·oßÞþæÀêòú|Cöáí…Ícc’žwkx¾G[®³+‡N=sÓ€|6¤®ר²ZÒvjM¬ååå«W¯ö?§}˜¢QB{ÓYoîh ´uÙyÍñÖÖÖ:[_Uw×–3õy Þ.j`!53ºì<õÆ›ÿâÿ8´t½ÿ+«»vnÿØÇÛ¿Áü3°Z¾ì8;AŸJ+’Ö›‡éÕ¬ír„×>L-€%týÓëên?±Â¯æÿ:†C K°\ëø2B1X#ª‰ØTëÂ… /¼ðBïó¾}û>ùÉONùáÐþHw¹ƒ´,Pí—Ÿ zã™óÐ‰Ä IDATsLKGîòÝ-Μ9óÞ{ï}ìc˜/ÖµU±} ŒÀ"+ÁǯæôN­MÉ:;tvêÁëüb¶´GQ#Ÿ‚uíM\[mýïEÑ8œ?ëÁµËëóvµ'ßTÍ;›÷‰î2ÿ|´šÚrK1«ªª®fj1 ‰í…d`åH4€uþüù·ß~û…^¸_ÒµÂ:f`ùRtÓ{,ÌWª¦S9BØü²slþ#"#2°Øµ}·<{ÿµKÛu5ÞÕÝw½YݸôÞûÿyuãVsd]XX˜öc®‹­ã]V›‘o*«ekðÎýHw9Â;,ã£Ë+‡¦®å­`j첫ö_æ~„ð7Þøå/Ùû|ë­·Þzë­c|“sçÎõþ÷G?úѽ÷Þ»{÷nû_»ö“Ü2´ñxqc‘$«ËÃP—‡õ 5r°©z»kkko¾ùfïsY–‡žÍC!%XHla÷ßzíà®~ø¯{_ÞqîƒVÊ~+nòaáXW¯^}ýõ×{ŸwîÜ9•«uòÚ“o*€5tµOêG~&û‰îòVí°"î]Îkjžæˆ•©@O7ÌÑü»Õµk×zu‹¢¸~ýzûohmmíÒ¥K½ÏW¯^ýñ|ï½÷®×OìÞ¹¤–ÿWGËÀ2ÿœ©<R(Cšf°¦&ß €¦MýÈ-//¿öÚk½Ï °²Dd‰…«õŸÃÕ²ªì±ç±XýÏËËËïüÊ{ï½×ø£ãÈIXµÕ¾ùWÛ¾Ìÿ¨›Þ$¯ËÁ a¬ÚÊ¡SÏÜÔ<í(ôB›0´tôü3[ÎÓèâÅ‹µÚ(ܵs»°è†9!d`yj—HµÊ¸ݰ6xuapÁÔ‘…ô«õ«åZQîXÿoÕD¬É§àþuÈ×M+€Õûrq±ùö`Ò *Ú4û­QĽååЩgnjæ­¤¸ós5ÿ ¬aÑ^ëµ×^;uêTo,8räÈí·ßnÿkïü Õò¯èB§›ða´X †ÊjÑš±¿Ïµk×ú?Ø;wîl?UÚåV—«±·ÒU}À£ö&_]]ݾ}ûtž A ém3¬•r­²/ªЏÏ9€U›U¬®®žó™Ïìܹ³å77{Ј3´‹/öLíÙ³çÎ;ïëaÛty_ Ùr·òn®–ý’V–`!½ZV4÷mÇÕMg`­­­]»víwÞ)ŠâòåËÃ~ÛØšwùõËlEqéÒ¥={öLå/šºæduuuÛ¶m£üÙfÖ4Ÿ É•v¦g÷–Ås—þüç??yòdïówÜñ‘|¤¹ì~«r®Ï‡ñýfþGGÉÀ²i¼ÍŽáÂ…Úïoy9táE1i–Ëû ˆ»ªP„h«`Mðƒ¹©ñX×®][ZZê}ÞTfýè:;¬ĆNbËW­&9n°ÞâšËÀ²§™Â³ÆæºôÊ•+ýý(ûë£'þ×ÕòsçΩ°Š¢XYY/€efZöŸOM=UîÇx²¥qgψf`ÙUMAÞ v]fxª]º”öá°¿Î. jýëòåËÍyÞXGu…¦u,{SUÞ°Fù[ìœÑæbg‡õUáÇ m*d:|Á2e×®]»zõjïóŽ;víÚ5£¿M°Xa[tX“!6ê©Ü´9í#÷ÒÒRg/¼h>ùòòòˆ/ÜÚŸÝx€4l§ ãÏMcŒÝª=+Õ3Ÿ:uªÿ¹_NÈNÅšßÿÜíåFeºa¨\dþE”GÉÀê*ý«Y«ù{ºVkâ–ý=D°T…"Á¾cÇÿV›Ê1 `u¡·¶ðGO”ÜÂÑÿÜÜ,ï¼óN?[â¶ÛnûØÇ>6£¿M°žÍÀZ]pGG)âÞ<[1ÓVûÈ}îܹ©äyÍÂÀ ¬ÿìÐ#„îèR§ç4háJ~L<ÐüëÎL·ãXkkk6oô¶ÛnëÕ½%+Ú›[»øîÁH|ÖGâ ¬Ñk`õÔú×ÀÁ¥ãX-‹ÿQÞc¾VWÞ{جÐÿŸž †°Mý„=z¶ŒeÓ"v áØÕ¿Ñ%þŽóM sËÀjÙ²²²Òß=ݶm[í2ëµ×^{ë­·zŸï¼óÎC‡Íãù† €…ôÊʪ‹¢¨B\³åxÖÆ9B8lpʹý›¬®®^ºtiïÞ½“ÿESלٌÀj›Î3¡‹Æï&ÍŒ.¬K{Zªu$€Uû²Àjf` ¸…Ð^Ɔ³.›åÿKo!¬ªÊNÙGyÂ1j`­®®®¬¬,,,”eB°·L]Ëÿ«½ÜÒ²l;&ï–X’……X[;e³uëÆ`Õ2°f±‡*v„A0ãä[ ¬a£äµkתªZ[[[[[Û·o_ûÀ‘Üõë×û¬;v´°–——ûo›ä•Å`¡«…å…÷{ÅꢙÔNv aÍTÂ.ŽÜçÏŸïfkŠXk`±rÖå3µ§™Õ™nK¶ýaŒñwÞ9{öì¯ÿú¯ÏÿñF9B蚌^˜…ZV‹¸×†Qr4Z"ÅÃþEo¿ýößüÍßô>:tèãÿøÏ=ö†,Ûb1PÄ]UB÷ì’µÙcwÍß0F«÷÷N=Ϋu„ÐnÂÑ u¹œÖÍ\.4vVïwVUUUUÿÎÐ7ß|óí·ßî}>tèÐm·ÝÖÿýÃöAŸ{î¹þ_zçw^¹r¥÷ùÆoà°Äv„þßRËM>}út¦zþüùË—/E±{÷îîD²F?ƒÜ©Sÿ°Xo¹¸V¿º oÅþTúXo½õV¯óEqóÍ7' `m8r'K3‹ ,÷ÿU?t¹‰Âøí8Ï#„KKK/¿ürïóî»ï¾öß?0;¬Ygªÿ;/]ºô×ý×ýZÔ³î×úØ(G]‹Ñ e¹´ÿŸÒf` üëjÃÇÊÊJ¯äÎ;¾xúÅÓgöœ+Šâà¥õË2xŒ‹§®ýÿÕÿ?ç$oB1q³AŸ©!,f3TMr„ðìÙ³KKK‹‹‹!„o¼ñÆoœöÓµ"+ q3¬ñ2°j3«~Êíˆ'åûií¯ë/Z{Ÿ{_~èCêNkØ?¼‰ , n±²uÜ×{H-«¹–+63²Î¡VÑá ¬æëfô5°òæÎ  ™4Ÿa’‰# K’Õ¡®]»Öÿ¼cÇŽa«ÊÚœs³SÐQjfM’õÞ{ï½ù曽Ϸß~ûœXœ Ð5öIÞñj`5ó¶¶oß^Œ|áOÿ?ÕFÆ¥SëÄæúŽ0ªþ·(Š•EÓ—†¿,ZXÃãŽ!üñÜ[Q‡î½÷ÞY'›ù?d´ & ²Fhº÷Þ{ïÂ… ½Ï XóÌÀÎn1ðçÛ¶mÅXµIýë–——û_nß¾}*]uà)Ý^à ö`ƒ¢våL7TÕ’ö1ÿ[Àš?fµŸóa«‚ËkWÝo[X]¬¶ûžöË i¡ ,FžÊ!…PøXÕtЏ‘õ /ôÿÔ'?ùÉaÇØÇËÀZ^^~çwNŸ>}çwÍ[žmS=Ñ®ççµn§ÿå!ø4‚ñ2°šªÀj雪nÞñVobÜþ; `EQ‹Õúâ²™$‡áóÝþçÑXöw^¸pá•W^éE‹n¸á†{î¹gÄGÝp;^¯Ž1ž?Þþ-s`\šeç1,œu¹®?kkký*ÅðòTX£]r? «ù­ú¿^›…ØÚ_ýÕ_½ûÏÿøÇ§r—ðÀVí›XïIVbXßÈéÔ-„Å IíÐVU `­Ýð«ßØL¹²¿sàÉ…îÔÀáoçaBÅ4n!ÜlŸm/âÞòÇ7ÀŠ1¾ûî»§OŸ>{ölïû_¿~ý­·Þ*ŠbaaaqqñÀ>Û¦z¢ `õžíâÅ‹ýéÄÞ½{§ë‘;SOOTåãÈ›ø‘¯Ö°R¿-¬Z@§·3J+ù~Öè'lFÉÀ:sæLÿìÂÀ—É´ÀB'l3X#°úi”Ipío—/_¾zõýyvÿÃ(fÀjILÃòòrÿÜõöíÛwïÞ=ð{Žø¨½CÑöW×À‚¬ gë½ê6ý/‡ý|¦ÊÀïáÀ J1$€5ì¯ëýú•+Wú÷KìÚµ«WžoSÎ!šÖ\öÇéˆyCÚq’½‡±5Xµß0l ~µºn¿\.G F¼smnX½ÎÕþ6úæ—\¦*!–S¸…pSAŸæ‹½fôê®íóºëׯ÷kGö\¾|ùäÉ“½Ï;wîüÌg>³áß>vVïÙÞ}÷Ýþßxûí·O=€EÏËŘ×+O^«R‡tàž¢ý sÎÀ:uêT ûáx×®]›ý£¿@F)â~æÌ™þ‘á îí ,$ö~wSË!4EÜka”Þ绸Ãþ.Û-ûךE±ººº²²2,g²fÑ{¼Sûkq³Îž=ûñ½ÏúЇzùe#~ò“Ÿô¯Ìøßø½{÷¶Ï \¼”3ãX¼ÅVƒ*†÷².g`µpG9Bhkô4'4'Ož<}útïWîºë®Ã‡üï¨?Œý²ù`c®ã1y6øÖ¥–äÁÙÙpW¶Vé£ïjt¬•…z¶7©1*7· ¬ ·s6Π±Ÿ )ëHÞ¤M}ÆÈÏêÿú¦XͿȎt#Žì°6»ù4ÐË/¿Üò{î¹§7¿víÚÅ‹é}9¿Öêêê…Þ°ÚÓ*WWWìüµÅ•Ÿí§ÿåá 7í½~C1ÕÖéÓ§ûù û÷ï#€5Ý ¬¹3$€…NÀîXfà¯ô `EqýúõXXµHßµx½*âÕâúòÂêöj±? |Ôåååþ»µ÷¡ù0d`å&ý¢gÄ–VVïO53/~¹óÜŸ^yægûOÆ?²ô¡«Ûúãââb1h„ž|ÌñáÀ¼•®_jŽQ ¾†pžqáaÅ&2°â5÷ÛêW| ` üÙž[kÃo¾ñßîÔGVŠ[ÊÑlSXcÿø5WÂíkãæ÷±ëíX£÷ĵµ5ûêhN)Ç^â.--õ_A«««½ ü/ùË×~öúrX5-Ö¹²‚ÝÅÙÄŸkþPõBFÿS3ôÛS zÿÕŽŒïì>ÿâÁ“ý/·W‹½ÖÀ{Qì÷)˲q;wîÜ믿Þë2{÷îýµ_ûµÚo¶ݰ]¥v£÷îͰfZꋎN°¬åÅÁ·NÀ²ÿ©Àºzõêž={FyÔ Gî.d`Ù‡"üËŽØ?’m­ÖV8´rHI£98Ã3ä$q_Ð÷QÕÕuæ}ùÇ—õå—GeW7ÝÌ'dVVæ—™Õù]Ï÷¼ÏkûwI5< pž·+pQUU Ã`ô"°Tð¡Ã ¬Èò!ê¡ÐÊyà–$IªÕj@Ót&“)•Jý=Ðx }%}OðBái5 ûR-Àâ!<à|¡Xu¸»u«Ï„ÀJ @`1ÞÛC`aõD (»,„Žã|¯ÈtÅñسç~*Ó×§H`9Ž£±DÇî± ÝåµJÉdùHÀ‰ùšFÂ~,è/K÷ð´Lܽ@BÆúáܶàkê©&°ð‘ñ ¬ƒÈûQ`µÛí€} „<°’yóÑYe^¬{÷îÀÜÜÜôô4ÚÓk¬¬R¾ýzHØèuE Ñ)FãáÇhÏÐÐÐÓ"°ž<„Зþ"YÎ9´ (:à2¨ë:ÊG¶/'²Ø^*°’:yxÑc¼þ\Bã{‡@p |chƒê—ÀŠ×†@÷©ŸQPáÓU`<Ö>Ágí­-sk ó¶ý#*ÛF¿‡ÑØþ“(°Íb¸¿>Xa£ÑˆÌ…BžÞh4>þøc˜œœB Ã0¯½öZ@‰JÞ¤ÊúZ´ŸæÚ« ‘ ˲8ŽK¤G¾éVèïØKoÎ8x{{{aaí=sæÌÞ󓇢ð~‰‹htÆ”x5«‹€ÚptÇèÓ+BÃk÷ZýóöP¶EÛ¼ìµm¿ }2q>zxF!„ÙV«uõêU´Í0ÌR¹:Ò) Éyòü¦Å Lõà’‰É²lØ÷ ,Û¶Ûí6þÿâ(°666Z•­ãø³“ÔÃà Št÷_}X_¸ ³³û-e_¤Ïs ! ö–>Xa»Ý&õ#Ðkì©ýJ>ž‰Òg7DÉŸ;©‰Ÿ;LBO`Ňîú °@å¼éX w žÊ²üæß0æÉýÙk §BNï~^–eÉé³mÛdX Ž>ü–eS”÷Ù²ÕgaŒúé³T`õYF ž/--¡·ß~;Ì…9Ž£ª*¶ Ë]¿~õë–e‘†ôãgèÙè€ü1L`õ½\– -ÈA^ÈĽ—‹|Ð11 ¬~‚ç÷…ý†öš0ãýR” vSD`Y–õ±v§LåÉg‰I«®\1Öž ¬õü®Á˜s»£“„G¾g¼ù,BEYYY!S‘™F-ËÚÌ×MÚ XøNbÊ´ƒ㳪 !ÜSeš&Š6 —öäxB«V«µ›uL`%}ááMQ¤Ž•rœâ?lXí\f0p$U,Ñç_ëUξXÏÑĽŸ@`iš`¯ðí=‰kww·×ŠZ§ÓQY]eýMSB`Z «ý›¸Û¡¼ÒпCè”°r‚È…O!…Tõ¥1†M;´MAc8x­¹¹À¯ ó™q(âûæ@!ÏBEîŒlÓÕœ¼‡„ÀJpôÁZ޼Π-‡¢º­†eðУŒ­èÕ¹Fòʦiš¦É²{׈~zîTÚ~:å‡i&Òÿdilp=<æºý´àø"o8Áá„7PH·ƒôn¯!2ù¶Ä(°>ëIXøf:œ× g Aê~Ä>î–mý½|é·…·Ã…„5Y°Ï ÌžXK¥ŠÎXakÓÞÙµ=ê!™:b{±ÑOXƒLÓ¼qã†(ŠäN’ÀRX½žê´ùêÖläucÚÿp!Ù±ÆX{*°ÂxqB-˲Éü3ðô]ÿ|füBWÚvÒ—~ñ~P”ΰٳ¯Dò¼LÜãÇf¸PÀpªŸB ÕjEîGv9áý²,?~üX×õ|>?66ÖÿíA`5Äàè%ÁAßk6½BFö{b¤ ü+‘zAe@ÈÁ•ÕÓºQË3ƒoè ï<Îlïô$°Â!ºau EY]]å8. éÀãp´~¤â,Fÿñ,¼0+Á €Ë!¬@ÛB#ù>X1!„¸%ŠìàUU%…K½ðŒXû"°"mÈ–Å—·Â¿dõ#ˆé’Éòñ‡œ¼³¢-ÜN¾„÷ôR`õI`…{¾„À )°¼nx²Y¾?¸¶ñ(ä–óhÓÚÙµZ¤$²ÿ‡bcÎÙÙÙÑQ¯ÀRYc+Ût(g3[/jÑä¨nŒÒC{­m׉çL*åá…÷·›Ü”­÷ßEÛŒ,Oln’ÇñKüýã X–eÙ@XIú³CŒAçì•—TFzë†LÇüÙ‡þ›¿„g ÊÒñIBkéöÍኢlÊÉ«©×6ŽW«UI’,Ëš››#]fÂó§®À:˜´ešfä=ȲŒ"$IŠ!°"/C·$Qƒd\zTàËôM`íKß÷àÁƒZ­&‚ (&F/ ÅÍE^˲,<ù ;¸#(œI`…»Ôn 6³u“¶q¢³øBÐu}Ï|‹Fc}}=¼?I!F -?$V‚¬EXŒåÐD»eE/Ø>‰Vd[ö ¬g­ÀÚÓ“¼56„°V/ì/³m‚¬ãõ”ê_ü{á¿úïñ ¼¬˜ÂgA`……–ñz‘ tÉ2¡À" ,äã?¥>€¦Ý.PH?!„’$áÕ³ðšU¼k¥Xu(Þ?v(Áä~sáo±«»%âÄÄ=ú0ÃûÛÍ®v¬Õï¢m`6t¨uÇõ«¢Æ&é§û¿Æýû÷ëõ:øßÏV«E¾›yWµžßÍW'ðþƒ)°ú !<ì ,‹öJ œDuˆÑ. ¯çwþ¯±[ÿìõ‹m7ÍÿðgÔÔ,ÞC¿ú*_€' !l ÊvÎe¨QLœ,Ëhî*IR¼MòÓ"°ÖÖÖvvvPtBüÝF"Fív»WoÞ+À¯E¡ñ-• L?Ǽÿµt»,çz½rµZMQ”€¬‰,'R…·Ã„Ž;¦œÛ#«x…Ѳ°—Ë`¬ ¾mofw§Znü²¦i¤ÆêI,äzä@ ªz • ‡®‰»×W™´í]—åÖêþ ¬=C#;xܘ¦Y©TPkBQÔÔÔTøºñøìX–…< ÀX…MÜc.·§ËoâžÌœ+Ê–ÏéFT$ã/þ=} }ÌT*þµ)Š¢,Ð66RÝŽŸ¦iË”Kbh(À˜²%™z}bwôTZËçáÉ~'÷¬˜ñ ,1ñÄ›±éA%Ç[,茹XÞL›B…ª@ÃnÂY²Eß[ 6‘ÝüžËæÈL!–J;¾gPYÃd,ÞbeG-ù°,Ë¢| ¬‡EòhL• IDAT hÀæþø[Î܆³õ¡›n4ÖÆjqglß¹wnxçŠÔ+¯Ã“)°ÈqšìÏ.˜X>;«Õj!¦û…8ŽCêYlʹ>¶Ä›\ZçSÖҞєN'5HèõâE2 µɸôh ï?£`øxâÑ7ÏK’ôÞ{ï˲<Ï¿ñÆ ªj$u…B¹ ²­¶MIgÌJ¶ygh-²X¥ëã¯ÀÚÈÕq‡²Vô,tÛ8a¸‹ìßÇ=žÀŠœfFÙ¿…ôÓEB`%x!2q÷,Û0Ðw‘TËÁBãc¤UU½ÿ>Úf&@`=/V§Ó‘e™¢(–eq >7&0Bhìe⾫¬d¥ëhÀšùè••B³sf©«¾{Óº{m—Ê¡S¬·F{nŽ„X¼mäЀÔxT,EØ?@`õR`¡ýd ÂŒ!‚E%Sɺíêøã”áúÊ5ì–ã8á\i‘·D¶§üIJ¬>øm7E¹.F 5tÊLƒ ±9´K[bøÈ‡,Õ—uEÔ½[8Ø~ù"UY­V=z„?’¯9­dšfWL´“j«¬!š®äpÏ,„å˜~½ŠIÛ㽡1!„áJ¯"sÚrÑãpgšƒ( £W­WUϽûTi=!eÛ¶M% ¬#‚W_}Õ²¬F£!ØÜíãÂíã|yiöL½þúåñW?ú±¨D„i+K©W^‡Þƒ«jµzïÞ=´=88ˆò; bœfÒ¶Æ‚åÖÁÏŒÀŠ)gÏÞV–eòôJ¶¹Pvƒ /;‹¿Ký KH4›ÍH+~lï8NÀò5Á¡†ÏÄ=”\¨Èo7ÓiˆR-ÕÉênx Y_zñ³d9ñõ˗χ¶ÿxè{åÀK3€¶)›vTØh+ðq=_ÃÛ›¹ºEÙL·O!ŒT`Å<yç½,wM7Jyd¢ÀJð¹ãДC¡‹²I,°ã‘÷E`áü‘ƒo¼3àÇ0wïg4?€XYYÙÚÚ¢iš¦éññqd…³'µµµµººÚër1w!Ôh(/ö/^ÕëGîqà ›uX¡ŽM®ä_¾2v÷¿þ÷µÁæ¾õƒû0ùÉ/àë߈ô éñËb‘ô¾:k>Ö;ª³Cךù]ò«ŒÎÀA`9D€á®é£¡ÇREQ1´ràþQòÐ^w¾T¬Fî74Æ ˆ’³V_êñ/ ¨ñãï~á6Ú¦êlc:f-dd}‰5t 5ÕúÁw}ådsTéð)ÕªïEŠÌ<ë9¢:P°‘Û=^w©é=X¬ð΃…V3­£Ëx¿hrÇôáÈSÈßMÓ´~2´<…BßzNB`b‹E4¹åMïµÑXÃPÜHy‹aÏ^<ûñaF[yŒšà^ ,]×=sÃ.qT`Ѿú%óº ¸V`ºÙÆÔ÷O`Ź'ˆ\+ÔÈ£æ!-Qñµ6“­rN›Íf`å8þ–¼¨ ­‡¾×¬ßhqò%YÉW`3_«ùÑÆîî.ô•Å 5/»é¶ÓcIHÊãˆ`¬À ô¡¾””½™ó4Ñmmå-÷ÂÞ$ú$°TUí5º@ûåDN3QÈäBŽž +Á‹Îfpßc“ü•î*°ú !„Ø‘¨mÛhb©pz`Z¸ÉJ÷•M8a“û5MÃcßp p$âë³$I’ä.ÜáU¦x˶í€u_à˜˜»Ò9_#åP Ó&oE{î;„$­¨dÈ~ˆ1Ö*SôŸÿƒüþ‡ú³Ö r'à‚AŸêCŸõä ¬&/ÿ¤| :ŸÙqñÄŽë[jY_¹Úšh-d¶äÉbÄ;ã(Û ¾Kë‰ rÏæ_nÐ4mYÖ„QÐ"i¼7“¶”=ÓîåR4…buÖ$ÍNûi ¼˜`¦OþÝT §Aëù×d }d})ò+iu9w1‚ÀŠY® ¿Ú*4ÈÃÖóõ0Õkì0À ïRà\~?&î¶mkšÖáÔÕbpÍŒ”t<#$V‚ç ,,š­aJHæ ·ãØ,„û—Áý\£7U…F/ ßCXÖ´Z¨aë)*°úA ¥qwB&¸‰W`ÕÙöÿÝùÞN~Gõ¬.ž&ÒQ¹&îÄÁIäÒaGÚkÝõO…Õ⬰ٜišä™÷I‹›´l1ƒν~îÊÏbº5k{+r¿$Iªª–Ë®›ü“‡¬¦ë)·A©#`Zõ)J³_"a2–IÛe'Ö‘o¤ËÆ-¥:µ<FGGóùüŸÅÓŒ&@#£!BVDTÅÃò6Þ¾"-i \äÕôœô Ñh/Oõï…óC™´%ùEam^qº½yV­V[\\d&°,¼/«ši^[Âû‹jvXÊGÞ0†K`.-‰ë°Õ ¿– =,˲¤lXÎÖ:Ìì'„Ðq¤¯ß3„oo‰õ_Hyß  ÁH§0Ò)Àx»TPÓO…À ùp`ûXmX´¸øB¤v´t_°w}…Ä_Fœîà–ì©¡” ^|m¨ÝÇ CÓ´«W¯¢m‡‚µ¢·³™­“ªw{©ÀŠDCÌÐâ åPãG;î@MgL¤hF*0<Æ÷£³¦ÄEÄåÉœ °"¹ª>o8>@Øqœ=MÜ v°^Ü G •ôXçI“5Å#!°¸Ã(Ð* <KQ”H®ª ÿ8¶Éý‹ƒ[ˆÀŠA€•d!ä ,¨€pkleHÎEšG’ïa@…M¦¶'f`ú+_i®®.=~ ¬i`‹—Z`ÛÐ]5­T*‹‹‹H´¸²²²²²årSÉûõ`Žœж3Ôðjû[ÿÈPÔ•k×6 c¿˜¾÷Ÿß?SñÈÜáááJ¥u(Ôw<KëI`m˜!)ÿúî Üh,—ª>‹±Ýg²¬Du˜!ž;JHµ“iJ´âzÔtÖ búé _¤OŸ£†GÉ#Ãç’•lgûÎè‚ÊØQ~Oì¦:»Qìܦ“}î¤1>ÎDÌ5Xw„¶ † ¬^öŠ¢DZe‘@¿€ÆŒik¹šÌiiCˆq«uXÄo•˜¸vt=°"Bã&¤ÀÂ{œ­ èÏĘJ¥ÈƒÊ ¨9$N«eÚý¤ØCÁÏ"„ТìZ¦-Z\<µ`,gU‚à›¸xæ›ßÙÙÙyôà—ß?q íÌi©ßZ8 {úr¡k°ab‹"–²" ¤÷l)}¦É¸ôÐÂÙgˆùÆ®vȯ4ƨ¥Úˆ6?v4Æ+”‘!„‘hò^'5[– 6åÌe§Ü×{@Éb«–vï„$‹ñö®Ht£Ž÷þJ]ªw_ ,UU———ÑD[„ÉÉI|Å˜Ç „…ë`/¢ a=_mãÙÖ½„ÀJðœAz“ç57¼åÙacFXV5ÝúxâQ¯«äÕtIÍ^ž\tB­`AKÓÅ[¬`rk€EÙVÍb¸6I ­ækˆÀŠiò¡ ‘r“¶”ƒTe9×”{Ãësµ‘“µqdæ‡æÂˆÑÑ DNñ–AèØ Ú ÈD¯H ¿NMX2s>´ÀXxO¯7§%Ê*c, n½bi%I"{¸€‹´¡ÿKk²œÁ œ®mÛzu›€»wïnmEDjšv–éø§ TD%hÛ¬ÕÍÁ”Jƒ˜¢5¦šåáN˜…>M ÎûyY-økàíͬG`vJÇafp¢YæÆ]í˜A›ZH•d!<¼ (J4â¬k£K¯¯/ªr§®ëHa¤¤2˜À²>|€˜X+0YÝ"Þ½‰v¹-(¤›hð3ÍÁûƒðdXª®î¤f÷T`á†I`)#øëN/ŽÉ¶mUUS©TÌ]¡_àq©êȇr–·_ÞšFKY‘ÙTºaâžx`rDd!Œ !˲LÓÔHVe Â7½XàùuÆ 4â:kTÒqåó;£mQÙ&sTF‡'H þI5¹¿–éX”½•m8”oÁÕ¶íÇ£m†a ­_P¼o©LX–õ.Üzªúû¯FŽu(7ê´Á²€aú¼gÇq½a‚Ïjë7¹Ñö ¥uÌ?ÆéÜC]€­2º>±µb¦cæ|‹#­D0 Ýv;ÓG¢=½U™}ìvX³L^u TZ«×Ýôk•özÞ.´¥‰zœ™)8>þ1$©bRò8¹!^ŽI„¡æE–ånŽìL&ƒ ¬ø¢¦iáw0@§·¨œ^Owä(uÖSBB`%xÎ ‡ƒxìnÑ„«P`ÝY‹¹Êµñ%RÀI¢ ¸¡@y=UíömA‰$°p×¢¬"7óu؈U`FØ‘V¥ëŸÒì·nxJ"À›P“¬S­ŒæÞ¡¸%²›Ë››áË1µF~3º•)ªk¼8Bб'8ÚH‘“çR-+-=¨¶¨ ,5 Ú⺹Ý¡œÉt÷x}c X­Vt4Ó,Ý2~XüäÍú<Þc…’ÀÈ.a70]+_˜ÛéE`õ™öÅà=Cn† °dYÞÞî&g¤Ò¿s´UàÓ<ÒkÓ“Í2ÖŠŒ¶üHxäC _¡ÿ5ëðênºýx raã¹۪ݘZ¦ª ú¢ßÀ¨ï‹Aã]Ü¡Œtpm2OXsõ‘sÛS«ùZ jï;ònM®õ¯ÀjE*°ºa¶ý(°@’¤xË4Mà‘?~áaiûìöíPªªf³#rw9 !LX‡.E("Q†»H˲,ƒtAäQÃnšÖþ¶Ðj3Dª¯Öè$>ž<Í]}¯qHiåT3ÁÞ·Ø‹›Ç)€åÍOÇ] Ùž>9\T2 toµt'çx:PMÓ2¡:P'XN* ÃðËÚ4²ž4i[gL¨€ÀÓd ™¥‹mÀqœÆ.U‚>¢¢P|“—‚¤“þðƒü;î½2'=¾ùÅk«½¿ït牋·E€YˆM… ‹‘áq˜< @ðšï€m0¦§EÎIeÓDkÀ#°ØƒX$5F~ß„s "Ç.rO=ŠÀ”r;ÝhÊõünB`%8ÊÀóC-…îYÄØ¯W!©Àª¦[äÒq1Ñ …îjvNKá–¢-(ñốK=2¯™´ÍÚ4Êÿ™Æ¸ ?ˉUãÛ—zå: ZÍF¹³‹ÎÂÙkbŠÜï$°º-Áá‚?„PŒÉ]Ë×À¢í©{cà)A•¶IVצ#Äɼ†­£–’Îê®äÛª¸ª«^z Ã0Â3Õøþøo*ï-g+'S£ÈB&îd B»T†î4zËÓV¿ŸÝ´ÓÑW?±;Êv¥&Çc=8g8Rrss³vÿGœe˜´% ÊW?qÛÎfÏTÖ³ÙfV–ñÓýÚ¦²TrÇ YÍ*hì–4¿N6GÉ€ýCìíµT¬:K…ê+›³”CáLy-A^-Ôàá¨þæu_iz½†×a"#ÍÉHátçË8ô°TÈ"ÀÚC«À ’[!, àÜÖtØ¿Ö{"QÌçó‹åõnjp•3,Õ ôõòÀŠT`uº‰É¡L”©­®®š¦ÉqÇq¥R‰ç½_Û4ÍzºÓ<û9Öf• ±F%Óí{X]¬Dut@Ó4EQŒC36âÍmÚ1«r®ÀwW&¬÷ß"Àã®wo‹¨M᪨¤Ñ¾‚æuÄOK> ë¼6²»3O×è‹+Ön†ð¬£39èŽóS†€ë—ÂédF-Ǹ€ué=ª4ŽaL†Êê-Q‡¦¶ow*ïìH0·‘H±ŽY<ÉOwïÞm6›,˲,;;;[,À¶Ûß½ÛÇašÉ`,©«´ j¬Uº6º„>†=°"WmõŒ»W²ôÅ);Ndö@„Š¥Ö†je%7Üñ„¥eFXÅÚÌüî¨G`åv_ÞšŽ,ÿ©àÅ"°>ýôÓ?ù“?ùó?ÿóf³™ÄA|N@*°h›âLVgMR=XFùòaYÜYΊò;»nÝM‡"¶%œÈ‰·8Šˆ<^ßÉjàwZdzn…,Ë+-9ª¥Ûí* ä,PðeµA¨wK®ÝIüÆÌ Y– Ï£k»K`ͯõ¥ì80ÒR»¯ÀŠHM¶Ê¹®økXÚÆ« …~×*¼ H›žDHæ´˜˜\ø„[ø-úU4ÝI·¯L>ܳ|‰S1°„T2ÞŠ®S݆½ì3îÌ1]FÇ> ¯ÀÃòöÀ&°" &XNy†üqH«ši]~ÜëÒ¬MÊ9 ª¨fLŽç ݽ]Y¢²9ÇqÖÿòÍOzýÔ¼üyâÉ ¼x˜Lœ3ÈBL`ÝZ{igr¥X5×ó»‚É’™òŽsï~!óÊJahÛ  $¯‹œ¸¢¨¢µ …rAI3×RC@±ÀCR!£ P–r¤½ˆ`r/U'cž¨\.Ï Ì|×À–ƶm‡ ¬€– ݕΚj”´Ý%°_{í5TOc,þ¿¼¼Œ§ çÏŸÇYMÑòòFÎóžh—Y‹ÆjÇ–¨ +²p˲,ÊöÛ 'õðЃ¦i˲‹“énÈmèºBR¶P܉Pð!p˜ÛÚ‹Àò”D±(uc3çø$êIþx x³Ð°š–¢( ÃÐ4¨m­Áu# -†¡EºÝh† ° n’mÆnÅô“}ùÚ ÷X‹uq2zwR-ˆ?]`|×l6qŒùðð0"°óÙΘž>ºÙ¨17T;øA z:§‹”ã’×kX”Í8t¼ zxÃŽ·m»Úõ‰Â2ŒåÀÅ­ãó;£›™ÓÂú†¬.޵K8ßbS”#Þž^,ë÷ÿ÷ï÷~ïç?ÿù¹sçž÷½$øŒp”H™¼Îš&éÕ#OߦXÿ@ºýj]ûkqÚ«>àöʳÁ^Džÿ+€Ù½J{R®¨(J?"ËÉG“9 çj9ñŒ ,QnÕ÷0qH¬Ž É.+?ÚV\g÷"Ý….06Í[¬¿°×¨O¢••üÎlc®‡æÒѧÂ@%í±Ÿt½QÑ@Õt ¯í”µÖ0äÉoI˶m\Ñhšþ«Ú»*oÀr¡úÊæ o±`2{(°¨Áa X¢ÁáÔ*«ã<ñN–8²ø;o˜¼àX(O\½^½#¦„ý#¯bˆ¬:cØ´SÛ7GWÚ¢‚)›GÛ¤·4ÆN‘ýîÛÙôå À"ÒEÒÁä J‡÷ÂÕ³º»D1Ú.=Ø‚®ü _;ŸÖˆMÓ4M“sl5-Ë¢CéíÉ*Œ&'·GV<¼¬.J¼ŠêpêÝáup€·˜ÔÔ¹sçâ3£Ë²¬(J¯x ´½‘÷Æã­’J8]¢N9†À2‹:lËÿ âáX]Ï&5à ,œ~—LD«¹™5õtè寋­\3Þ\c@u;M2óziŸ„Àr Ýü‡UÓ-lñÖ¤]«ùÑG¡‚àµ*k°²WG,ŽG#|ô_2>úa)šéÛÍ'±· 0¢,äiˆ?â åÞ qe2gLJ©Æ·¬nf’ùÚ(r±QUµÙlÀr±*û×H2º š\-Ý+ü%9Mœl¹ë"###Õj­Ö8ŽSI7k™ÎXÍ<û¨;Ö‚Ö.qÑ’’¡*e ¨ýqNÏê^ê­^«¶ýXŽã`s/8|2öHau$¤"»×È6*«‹¼ÅIy¬Ö$S=u¼XÖíÛ·Ÿ÷-$ø¬ °D“kØQV C­³m˜Ý|ÇŒƒ•õ^y»ÃKÄ<¸ægTg|§Û^PTû‹_¨¶j¼Â,+xe¾ ¦ÆÛ4M‹ÅÝÝ]Á>3xÚ¦NÕÆ`+³õÚm7R2ÝiF:‹aQ ,r’àh«!RßOª#„»Ãë §«œ¾“ŽH!†Ìù¬^ ,®^<œ IDAT± þšbÒöÍÑå…M<ž¡êôÎ8g±8Çh»Ýt#6ÆõëÝ`ª,óË™»hÓ¢í¥bådmzd!%Xôð( ,Æ¡‘>lÊQE{õ9Ù š)YçxlÃcwÚ4Àû?{e#º­8 þêЂ¢(ÊÁâ‘pØPYãöÈ*,«ø°­L#&B­NaiÙ GX¤‹\,ÍyVááÀg3“Í2pºvnyƒÚ•ínxGA…‰ÆBÌCåj›ìÖÊÉõ³áÖÖQKÍk4M D/YŸ!4?Y.ì6ÏrÖ¦w4O97FÜÕãüÃtúQz||<æ6dYn·}ÍT€À’9­ÑMÿD90Ö*Öˆf­½eЖ/÷YbEwøºEÁŸˆ0L`᮪Y,¯Ïúd@¢,•+î ¯k‘š¢2·ã4.ÎmO·‹ë†ð‡Yoƒ5&ëLUÉú¸6suÔí‚¿§îð*i€et ,ÄV§õžCGÚ¦PþÓzžéuÌ‘TÄà Ò÷ŠØ”e9°`éb¡cóçã_^½zõ'C?mvƒÐãÁ< (¼òJ­V[[[€¿?y-`³XR3œÉVRr¦2anÏ íÁ×_ŸÉå Õj}òÉ'ë…ÝKÓ÷Î/j¥ ¬áuƒ ¤ÒGÎ2¯eu±Wš ²ò,]hÛv›W"Na5_‹ °R£VšSVrx‹LZ÷L|0¼XV‚Ï!Bñ®;fWN쯫(µö‹I` T6–¥èim$E¶ ˜±ž[Óqë­ÊßþgÍG–——·s?›½ƒöÔôo<8KQÔüüüÒO†b›NPv[Ã’’ÏÀµ¹ÔÅ;×QÉ)EqB©R}w¥À"mM1¤L¾ ¾ž©¨fÆÚE±¶90Ú.˹a)V ²ëã%Á{Ù–&¦mš¦mUU!kÊåÉ«þÜöåÜrËÏ«é!9¿¼¼\.—óù<øûïOó‹d´àÂà&ZŽkñÁ8­99¹;2 iºë…VÏ «E(œ+R…Ö÷€ûƒëa†aWl›¼—býÊßJK—†nÝÃ{¶…æÀHÚàiÇ[…¬×ëžhœ²ïºâPÚ¡RumSÍrVõòHð R&#ß–¶Èc.(°{;Úîæ¼jŨÞuo–èÕ¸¬îÎG¥"íPÓí!Ö¦ P¯{pû˜O€ìúÑÆc`ÞGs}8@K¥1ÒuÝ¡@â|„QAM›Œ%sÁ>ôÚøÒN³¯æåryÛ•”Ìh§HcšæÎÎN`¹½™«ãß´¬ä‹Ëki|@–Iu>±À8@´ O$"\.UÛ†6båq,<ba]L/ÍŸ%KÈ7j˜Àât i1‚¹ž‰,„VÈKnPÊaÁ;ÂÜî°è_D¤li¯• RlµZ åŽÌGˆôÀªø[¡\X$:¼š‘½wßìXE ‚2zª5ÇÛ9]”9ýáøæ»_È@ÚàgCP*•8Ž#SÄlfëáùsVqÊHš¢‡é-C:ÎÍÎC‚£…€>¿ÒáŲnìª`úDÖ@q1dàKØÑXe 2‰ö‰ÚêþÂ0(ëayÛ!ºã¼îµ XeŒÖAój jA'GrÕ¤,!KpwJ¬F>oŒ oTɶmS Må8¹du¬>,šëZ”½Ðg*œöáÔÂV®AQW¨3ÔÅcSÍ26ŒF÷YÔ2™L¦ÜNgy´I›è"-¡Ÿ •à9#BÈ€Åî…°ÁK¬SÛ^Ó³öÆiv'¸º1Œ ´2xü±PÞÀZÓP…¬œ&JùÇøÒM%­ÚÀ:½ò^~4Mc=¦¢(Ö¤%*ÿKëϾi¿Õ-Ú(XÚèd5r‡2µEŠ­f‚ëx8$d@(×òÌ`Óʾå3ƒº3„‚œ9‡á\²¸uÄ@Z•#\\?6$çmÚy\ÚŽ™6åÀ׿‘]±X<>4ó}åäb: °ŠRSÙ´ävŠÖÿž5­ $*¤à%eíÕsÝ8m^ãÔ4kÓµï>JMNÒ4͵Û• Œ5«®Ï<"o[Ø€áP²š¼D@RÙt·ÇE$6Ìî=(oæ´”EÙxôÃÚôÅÍãèªdš»!ýy=%é„iôØ­e_%µ~ëÛ5²¶¹Iþ2¥ 6îÝÃvÀwϵQÅ£ Z¦!¸ Ú7O—”Ldär‚C„Œ.Ô»R ;ÃqÙu#±›1m†¡- (ÓMA„¾XDa×嵘 kp¾9æîo=«ˆ€l«Ñ$^{Ã0dV³»Ý1g3綦§›ƒ'kã7G—”·Èœ!^’–îÜr¨7WOL7ImXš¦Õëu4«We“vo@ư‡ÂêcņÚ~Ú*é=\‹P`-w–aç¢q,’À C'2ÏòºÎä…OG51œùdª5xrglÏ[ G¼ê¬-¯®®ÖëÁ´?½€Ûƶøëˆ¾¨úN§y¼BQ¡U6Û$Isƒ¸îÿ‹_ü¢ý˜‘ª*DMû‡¥ü‰ÚX‡WÿîTõ»o»óöoÝ; êèèÐÐÐÒÍ›øà_Ì,¬æ}u¾²tf¬íf^*•J3¯¾Úçó&xaá¹$à½Ò’_€ßvÊôªG`ù”øT*b^åtüjò{aãXLk>Ö)bk ’<ºXh#«‹´C)‚Ç…Q]«Y_âv>vÀy«k‰C;Ô¹Ê8ðV­q2ã>ïHgy¤ÓP&f@/:åCãúëÂK¶m“®—ç·¦E“Û®l£b TÐÒ¯IÛ;™¶™ACGPmÊ!“¢¾±~2§‰'Ož\€³½Ü`lt •ࢇËÛCu9f²®Z”Ýá”ém“³ÜoÍtöø·ÿõåË—¥Ò§Hœyåìöê&¾ûÉ £•ð(óµÑW7gÿæìGiÅþÒ-·óή¸žÖÕjuñÑâêt#›Ë™¦Yr#AJJ†µ™fîê”ù§ì÷¾”>9(çꢄG!'×¼vG›„îoÅ[lºk¬kSNK”KJ6ÐHuÄà8;×]Qá·YD`€àŸøt¹Q‰äRvoÇ“$hâЂã8A,Ëʘ¾¿ïh§ˆ–i›*;…*7}%ó'Ð4ýÌ×víæeÍ —zX dë?̓çqÕÛr¡€ôYËÎÝk@šð­;q?þÜh(™l®<ˆ ,’ÝÃîÎ%ä#R!’À2ùžÕge*7êË £Gž§;Çq¤úšàlÆ`,pü?)Z~RíŸ%NVÇP®ÏƒAâTƒÅíÈœN›êM`a–ã7qÇ!„pQ?™Wy4xÆVƒè}t]Ç~ÏPPÓ'kî4þÂÆ±W¹S7µ›¹F¯^‡r>šzÐHIœÕs”k5¨ÕUÆ®ŸöŠ:¶%L¬,Ào¶5ÌPóòÇ`3Ë™ñ™ Á¢,Ë -2Q\R д“Tp hþ…½˜Ô¦àÕ#¤À Cš¸“#®±v±¨f¥¾¬E2“€4#Æ. ¬Àr¤å‹7bâï„wÍú?š<ŸêŽðY–=UÍiïÔU ÛqŸÎ0Ƨ «À€¢œ‘ nƒ²+J%% „S?dUñK_ú’ã8ktõ~™=÷°›´±í{"òG6¢¼2¶èßá5 • +ffffff`é¾oaó¥m/¿Ø$7RµÜék^Keõ™´ ºì3MÓÀ?Ï~k¹¾^I7Ð[¢³¦ÁXH`0q¿ Ös‡’ÉyîW ƒ:àTTÖ$Œ’êY& KáˆÑMèi« ¿ñ«h# ¡ây>ÀIq6ktG䄇Ob{†äüH§96Ž!ÑT16”‡`¯,„«ãH[ÖbÈAÿikf›ÞpœLÛ#°¤³¯æËƒõzô–Â1¹\®X,®®®’^¹³­á¼¶TelÕåj3í†ívKD/–Ѽ~‡¢¨){„ÚÒÇZ¥ŸÌÝêõãQÆ‘H­ñ³0„¶uÖÄctÚ¦¦*Òìâm˜]$ÏèÀBéÓ0eÛ¶ÉXl¢À:Z@]@8aBÀ&2Fe2,–CÒ–e«ŠÍ5Φi:Žƒj í>Óži Bð'I0"m¶À¡àþà†ášÕÅ©fˆ6ïìáÆµ'°O#§ý´M¥»–Õ@ÌjY]”$)0¾ÕB‘àÿ3%«8GŽoÛûÔ‹Àb‹çÓÀ0ŒE`áŒj(~0€%ÞÉq\?¤ ~ñ`² ¥wbi³«À¢:-èŒîvUP`Y¶ýÐX]67.ò3x'^¯¢iZ„.%´„“,…Õ·³ ÈÉö·•…šh.@ÚR&77MÓ̉JvËýå5'|O ÏmÂIxº¥aüÑýÑ¥K—ð17oÞDȯÈíf³y“ª&%<ëHþºéTLšx+ÎÓñÙRF`MÍÀþ ,†a|V(~ £¨dÎmO…÷‹ÝØæSœ”rë” ›'~zsî'×Nx÷Üí‡ß¾Ô ýkóRüæ¥öW׿~yÇýøóVsȹÂv«M>9Un¤$5mló™êÄœç8NÅãüDµè5謲Ûhxs’ZÍ[ù×¢¬tÀ ⹿QI ORÂ@;s¦:þ½º5;$ç)Šš˜˜--ñ¯[§çvG¦›ƒg+SÇv‡À1P@+N,żµ|*KL>qa§ÓÁaqd"Âç5“ÿ$^F‹i ¤z!)OÛÁ®Í¡œõáôúìÉó³ï~!ƒþýäõìÕ³#—_žº—.]Êår¹\®T* ‚088ȲlÀ²"ln‡F6 ä ð"¼QI ý—J¥Êå2Ã0gC} zÇ7f;µa[.sÚnÖë+7ÿ÷ßµÞ—¿òó‰¥üopí6·óqýÎ÷îþøÿ¨\ûk±òé;W$ôï7/«ä‘æÏ~4úðîÄÒÂÌ£»lw=Éd¹ÎÛï|˜h~áí¥ù³øßÆKÈKóg[_üò‡™¥ù³—^ûîÛY÷ß—2ï½1ôèäy“u Ö4ôm/󯪪½aÐíï†äü«[³gªlTؤ Çá@^O§{ë¸UÐ_sggÇ -*$xîoTR“”€Þ!9w¦:3‹AÈ4'F¡ºmomÞ¿”£¹4š““¹qI¯Œ^Ú"rõ¨Å+¶m“ˆ»ÚJ¶y}téÆèrøß/¦îW2MèΊ—œÍÙµ¾r³ÄÀàøà¼ÀÒåöõåøÛwv^~màŸþ ˲Þÿ}|Ê­‘ÕÛëÿÝÿ¾Sn¹•ÓüçÿYúÔK·oß&½÷Ä›o¾¹¶¶†RQÀ­‘•Û=s9<úù'ï¶Þºù”»¡š¥!ã?ùƒñññÇ/--áý¹\.ìovvöرc?ûÙÏ®Œ..–}‰ ¾þðÜ×>¸Q¨»ujéõ·Oþ£Œ¶?úè£ ]]ïÖÖ7WO Ggà8nrròñãǸœ§VŠžtôtuâþà†kØSÍò—VN¡í…òÆÕq÷)fêCÿâïëƒÛÑê­û¦_þÝÿ"°óêÕ«±wŠÛwþ£÷Ügßž91õŸþaü $xÁqýúuì/±•kàä9#ÂW{fíñsóW~–kº…˜¿ÿ¯ôщ«W¯’|2þ(;’o6›–iÕSN öµGg‡¥ ¡¡ ‘|Ù­áU”®x‹ýƒÚo¾òÒyüíûï¿æ±—'ÃÁïiCø^HÕ—™kËü«?s}0L†^þâìvêMѽ½”ÁÏ6|‹X&m-–·ÐA9pjg¢62ñêo~óV†a´E$~9õ`ÉßÉR¤,Af5Öb¾¼|zX*ü幬€'¦ÿøö—¼þ‘‘—^z)þB ^|Üûãs|É,|çëç¾ø@Q”>úˆ†[c Ì^±6–æHÇØèY‡úuö9I³5 XöÆe ‰ 2zJ•àED¸‘K¾ävØ\F )°PM€.±ƒXa,5•^š?û‹éû«bÉÈ Ü“ jZ|à ÊÏœ9“–åêòòNºI„ñæê\Æ~|<ÈÉ’8V¶×æ “ñäTžü[MŸßš!ÿêé¯þèòOîåÖ—*¢VÀÅÍã^elj½PTÚî>¾;D¢™±–ë;ÓvXNÄ‘Bo¯Ÿ‡ ¢(B·¯Á°)g+ל©5_DCVÛB0`¼~Ú©èCèä‹i†ðËY ¦àÕW_Ý6ÕEÇG`Ý]ùB¾ˆ ¬TÝÓÿ†!ù²"zSš¦:”ÉVXcíâ+[3CRÑÇ™LFQÜÔ¨œñ¸èNà;‚W>™Ô¬¨fRŠ7p_>7é´[³ËÝ#"^̲,S°Èˆ—dMõ€|ÍH‡îWmį “ ,êêe¦TžØô”†@Á®ºâŽªP©tFòn#óö75µ¶åõ•ß{I>½$c‹5t˲hšÆýÚv¦áOÛµ<§NŸ4§‹I°¨¯„Cïr„ Çùöʪt±éí~uU‰V‚# ’BâL–Æ&B;‚Àª‰íã„ǹR8BHžC`e‰Ê,B ƒ’ò;óCCCpÒ¾öòǶ , )ªi”'¥Ã«(Î?­ YCìpªÌ{ƒiÖfÙjk`h„aȧK‚h¹IgLÚ~0°ùRË£·;Ä|&£‹è§$oøtú$™ˆpùÝÿs¦xbpiÿÈ:c5RÒHC§ä×OZbÕûëä¤Ùpâ;pè®A>o vðÈ”ß ˜1"BÃB-à}N¼S¨î0 sþüy]×K¥¢\Q$Ñv¦¹™‹K´”2¹Èà;'†½>ú:ø¥@˜3’[ ûòöô¹Ê4@#öA×õ’’))0X X¯9”³›ŠÈY³+ê)°HbÿqØÁó<96E êËKgÒz°‡º°qLå ÖfË›•nb vú™Ïß:ùb–¦!4W Xè…, Ãjü•»ši­ NtÞé†;»¶mÛ0MÄö"aÈak´]Dé)€s•i v&''MÁ¡ñ*KXDÖņHXiQöntò×ÿå›ß‡ewÞNkcqdâžT¼#_G¬Dº+ô™ˆ¹u• 9÷NQ²Gî_!¯ÿìwîü6ÚÆËÃ[ù^Ú-îd{ Ãh ÊF—ØZ)î 㛳‰‰ýäIôÿ¬%2ø#•1tÖ$§H Èx·³Ü1–aE`‘°(Å:ÀûG#I'x4`ñÞŸÕÖÜæ:œ‘QQŠ£ráÉ˹®äd~L=c,%–À"ÜY–EÖW–eåóù=©Ø€E"°rºH;”,P%ü…¢@ ò’÷PùÒ„^óõ”YSTD¯·b gZ@{´PÂÏ–?jméoxh­‡ ¬BWAÓ41ÍŒsÌ g¢â]´uúåÒðHµZUŤ­-qã;D6ÒÏå˵ÔÝNÂ<È!/¥ÒCÔޫë2¯Moy^A½¦š‘ (Цé>XiÍëVEQ tCøRçì¹Ùs°û‹×¯_€°0ä«ËgµV …‚Ül€ €#H%ZÀÐ ¤†Á›‚œVsn¤ÕÕñÇ%5;h¸Ø>ënV8ò†ËLáÆ€0Øt‡ì3—úÖwF¤žIpd®Aý+° ɲlFöª•,xö“)ºÎš6Ét'L¶Ëèq¨¾Ê©êxJçã ,Ñä÷$°†„œô’'Ÿšµ ý¨ùÂË¿gÏžÍçód\9"—9½!Êf7KÊä±åÇ>¬uQ©²^ˆ¢(ËÁt"aö Æ:îH¸™–+™íPÃRáñ„ùî2ÀZô‰Ý1@ˆäzìj¡†s}äµ®¢ Š š' eSŒŒ]1šÅÁ‰(éÓŒ€«Ï;ùr}Æ4Ííls7åvñ÷¦Ì7\jRÍ]p (Ã0TNÇÕDtxòõXœÍŒvйúX«D†ñ˲¹\X¢Éq6ƒR´¥²†hrå´k¸É2ÝŽØbY¶PdEO\Éä…eYcù=Ü“)ô¡ùšñQVÐ1н´¿‡mè³ÀW¾¹Óþ«Û4'–—À,î¼³í.IÊùcš‘J¥ŽCÑ÷uBq߀¹5obo̸Î4Eçô6Œ»=¼6ÜÉS ¸Âíœû?Þ*AT§¶'5$çÏT'жƚxí'£}ô‡»yóæË/¿ÜÏé ^LXDoât; 0‚,ÙÑʤ‹wXddNònY–mÛ妢É4¤ƒûÀÀÀÙ³žäa˜øäžNêí·ßF—ªdÁ£zUQå:ߥÞtŽÊå‡M_o›ÖyY ÆÞ¦›¥EÃÕl„+¼Äiäû­JJ³Ó†0_Ûp/$7†AÑ2«ó!†¨;iͽºÉræ;ßdÆÆj·oW*‹²0×" ,óó@`%\Õç9sÎZßÍów ‹R¾h ¢})°ÐÁä)i³çâ©" X@ŒãK%wF„!&ßͶæÀ¯ _xÔzÄ0L©T"-«FFFÖ×£}7pS811¡ëºmÛc0¸ n À'¾ñà<åPàOA˜%²Kª…"ôÈ·˜àóŒxË'–´Ê!dz¢ –e³ƒ÷©~ IDATQ ,”z‰¼P%ݼ5² =2ù²œ ÜY #-oIˆðÀFàMv®>‚J›+E$jÀã8Nµê¶NèN’:$K!]i%^«ÆXe9‡¤+Ò²ZHR!DXñ˜¢G¸]vºRMîÿ=ûË﹯Ówîœ-Ž¢¨áááímo6øÃùõ.‹ôÎ×ñ«8}ú4ö¹soæôéjµJæ÷@`¢,–eò1\¦ØÑ7š§ÛíöV¶ñ³cîBȃÅd9ä Ïš†õîß ZºžiÞx§íŽžs[ ¸@AÒÕõ ¿Uß7¶•µ‚t¢–O äþ|»ÆqœA„cüFGSXwŸ’?emƦì¯}ìÖJÎfçWâƒÕt¶È²œHwÇâ²,߸qLÓ4 £.JOßä#ÁsÙŒ³6ÅGe›´’fD¢!HÛ¹&ʱ@*°>3Loð£÷Р™êj¾f}‡t6­ë-öRSi»äØS•Ó<k¡¼ñ``À7 €´!Õ,D Èyž—zgH€¼–"ãôS‡ŒxJJ¶!J½ŒíHwè6JÏÂv'Ág ›#êŽî ƒ‡Ù6(ŽÊšÞëÁtCy‹ÇÕòëŒéPåPˆ[Í×dÞ¥S›žß½5ì‚’î±ñ~ ,ŒS0­ Dv[UiÔVq†ˆV†Íq|i]¨ŠD[ÔU¤;Ck´Có6ƒ£C «Ï܆ñO~ŒH®@·sG¹w»ÇœŽy<R®X(¡û1-‰Œ,P˜árZ{§T>^,+Áçd'GÓtÉúVSB ,”ÂsŠ °¬Ñ‰pQ{­lD«Ä›ݵÈ%Á›,9=Ž$°pk…„£¨e9U'Gó“§&IQU5ò>ÇÆÆzXø&çççц¢Q×ÚÞ8»!HÊ›'wÆ@"¬à:yq _ž&’%çÃþXàg³d> ~B%^Cc‰pß_ Yž“o C/+>ãМÅRá ž14bfYvüt0µ"LLLLL¸-L«ÕªÕjÇ ‚€|²u9L`¥ žr(4tÐX};íõåeÉe â®`å¢êøÄë¢î „Ó•J¥ct ¯¦pÆ®FJíÇ ,™¡"!=K¨T9|ET_¡RdA¾½è”!9OÛ”M;еv¾PÚu…ÈÖO,À¯ø.Õ 1fC/DD]-ž]$¿&C/-¯šÎRÅ‹Þ4†3ܵ4]×±k¤ÂêõTÇçÌ“(°?ï¶`rX¿ ³Û;Øíay÷Œíby}ö$¬v$Â)b¾6ÊÙL-Õ©d#fwÀ鮉D6›EE°h{¡¼yfI›¨î#¼±4GÙnŸKÓtNó5MNÔk>Þ*¡Ý‘ ¬}]ýüÎ1™ÓV{ùôZa÷£©…ÈÃ"X…BÐ?Á!ƒàU1ZwëN@e0ÖBq©¥Àйy‚x÷‘‹¦iÊÑvW€1D“WLõîÐúRÑ[9Vo X”-Šb&“A 6ØáB­Ážá>½¬3ÔlóÿoïÞ£ã8ëÃÿ?3³³÷»´’,ù"Û²Çq|Á †ÄÉ7 åR(ß=-iKh(?z½¥M{ÚÓÂá8ÉéIóãRà@=%ihý5¤H‚s…H‚ï¶|“-K»+io¿?FšÍÌÎήvµ»£÷ë/yvwö‘<ÏÌ3Ÿù<Ÿ'Xí6'žþ¯)_Q`MGlŠá„ |Âp-ÌßÛ¬b$‰ç‡Ž,ÚRY´~ýëj{íkF>Õ— …„áoâ+)gR¾uãó­R&æF4!/:ÏØW}>_\ŽNj`ÍNû߇ÿ¥P( žšäµ-|{±ËÏwÝ¢â}ë®ê²°$!ÂÅ€ž$¢3¦!‚Á õÜdºÏ×SÆôSŒ$IŠ¢lÚ´éìÙ³¦•MUUÅbƺÑ;×lR×¾rvëÁâ måc!ÄóG×\èý¶«›îû×¾âémG'BÕ'Z'õ{àƒ©Óú 11ö•åØl(Tôg2EQΟ?¯…ç*•ŠñZ’æyWÏk €%„q+P£ˆ»¿èSKJA) !JryV)Kª5€u&d“ó¬[=™¶¶pÑ”FÇ ¬@AÕ:€¿¤šÊv*åjèÙašx<~íµ×·˜FäÖ»z©"… ~­È]Eˆ“ñêµ<“¯_ËÚ°€°™J(r5÷ŽZ,ã4s“d2©'I%g"zë¥ô¸þ³ˆ !Ɖ@YÕ§AI‹—_°-båÀ2œÚeθŚ©”åT>¢¯¤yª?˜r*-ÝI…XBW§ûç†ÿˆ“±ó!$J·{‹9€Uòé¬Y¥ö¬‚\:œ:£_ ³±D6–Büç%OM:×5‡Ö®šJ>½êàoúKÖøÊJð—Û¬Û×®]{äÈëv!‰ï]–ýå†ÙÝÛâ¾4Ñ78dx:«W¥p •Ÿ52°úöp(tÅñeQQ*òêÉ´´Ú>dfz~C ,oÕƒM^x(bºžŠ\x:óÛ§³¿•*âfý‚$ÉþùXBÁ§OœQ Á¢ÿ<þ\ÆPõ¼"6Ÿ]› ¥ò‘­[·ú}þgÇŸ55Æt6¨{³Yë ‘ÏùüBÌߦ ¼pdÀðj.–«p¤˜óIEEò•*B¹\®ÌÍ c–ê4-w¡ABϹÞx¢°åˆ‹¸Sš_pFÿ›¨åLRÑX*,x•)€•#“†EÿÄLÿŸ1¾ñT‘‹§| ½Ý4t…BÚÀää¤1‡kpppÍš5Ú9Ât üÖVÄÀr˜B(jœ¹´/ReppÐ8•Ckç¶mÛVN±†’rìºÂîUG£n~Z "•Òk^˜NËyèµoM;O­}ñÄ«_ÿÂxtþió®™ÍçæOCßÝ6­U Büßÿ½"XTµ=¦víŠ&“ú%¥R©üä'?Ѷû|¾Ô†MµÚ^ÑPK-*bá:«VcI§öC¨à/(óÙ ³j!XRMÑÊRå|¸:³`ËÙaya  gò3¹„µ…î3°ôì0Ég `éln颺XBˆH! ¯Ò ¯ ¤9•‹ØîÄÄt>œM¾6¸W[>Yןsµ,zB­V ° `)ŠÇõ£.9S}r<1q<±èž6:Èäú£ µè3N­ÕVæ5>bÑ+°~©í¡n¬k|›ÞNí‡\B`R.±Ï«è<-€ WS9ü…ùþk<ƒŒ_bÑÒƒn¡{Ÿùá!C¬Ã©3¹Tô—Œ5ÎËR%ë[\E.˜]5•ÌÕ¸ó¬õ<¦Ö•BRD ½<\¾o_,:3ˆª%%•”R5„-Dt.¸z²O" e2™ÙÙÙJ¥¢(ÊKgéKy !Öï×Jj\LgFº­$IýÙ˜V£*ç›;œªÖúØp~Pˆ20]óÁL£X¡PhzzZ’B©ÈÑ9›EW…e^XÞ  ÅVÏ0 Ï,,]â+U¤…€NI–ü 7\Bˆ`I½(æÇŸsjQÌŠÃþE·`›J«7¥×çr¹ÙÙÙL&c;˵UXŠ,ûDÈRèx^!–n¢ÕQÍ¥XváÌf…c–VߪVÛv¾XMÍ'RÑÆ Äñãǵ€)iÔ$3Ì%+•Šoã–ù_máo¢–}gR†z#SL!„G™ÖÙËη¢fSñdt¡·›®—###kÖ¬B<þøãÆ’"¡P(›¦†‡‡…Ùlvrrrp*¡edL„¦õì’ð좧FÁ`ÐZ‡Òá>ßÚ6Ó¹Ïï÷k¯ÖZØ¢Öð@QÝ~zíU¿Õ¶ŒG/è)!„¿ä /Ôß1]ÑÃá°¢(«.&õ÷ŸŒ_ÐX3¾‚½RË‹* šþ¼’$mݺU‰Dž|òI½´6z—õª\kB±¸Ž{¤²èÁ¬¢,Š …‹}‘Sç3aÓ}øDhZŸÙ-wžÕ_Z¿~ýÁSõšfWã˜e`™ßæ+/)€U·–ÐÆ–ôʾ™˜¤sÖ›:of&±7²÷ÆÿÇ͛ыâñøÚµk}>ß‘#GŒ=EUUS…© 6D"‘J¥bL}2°¬&"Óѹjo Í)„Æ bÑ`–5€e{Édãÿ›™Ÿ/ÿìúÊö#›õ÷'U©%9#R#ÊÀô™êp? ÅãqÓC ZLÑÀƒ'Ÿó×LöLå#þŠZ}²=°J W/mÖ ¬²TÑ.£t<±d`U{Ê¡ä™óÁù»Ü‚\œ Ì•’T¾²2Ì !*Bœe§æCŸÓSêö¶\ûC_ÉþbT+€¥(JLO•²?Ü^üJY[IûG°èÝ‹—Îø…ƒƒƒC—^ª¿ûÜ£þ¶ÿö|%PRCg†­I’¢sA½F•"d­Èú¥§Wo?e“€o½®™¶\vÙeBˆ_üâÂŽ,ËÀ¢4·øLØ6€e;…pÿþýzålô"Ù¥ÎÕ`-T+÷F”%YÒW¾BJÕ;8-ëhøŒq'ÿ·ïú±¡jýSÛ !Æw½jËï¼Þ¸åìSOižXóÒÁäéŸÿOìÆµ­Æ-†)„òéTõïÌN‹Å†&H¹A gÊÀÚ蜾ò…±£Ç.„gl’«M¦©T–>t¶–ßÓöûý[¶lBœÆ2Ì’$ëBuXÆS’©=úEÚtçPëýÆÏ ½œ:u!hóÄ 9Sʘš$IR,[5~ZÒ¶œ‰\Ôî(ò†G‚ÆûÛf¤Óó¹â ¼¡±)„‹X‹îC^!D°`XÆ7',yàgÃ†ÒæÙê„UUC¡šá¢"î§Ë™Þk­(} aûXƈ.=]24”eZžÞ …6nÜ(„8qℱ§(Š¢(Š1€‹Åô“°!Ët»ÈÙðÔÀT5¥ÈXºNÿ 㮡XÖål3°2¹¸¾ĉô샯”â?¿í›Vçï·wœ½4ý|áð¡gªYØá5k8Pëôûýú|üÁÍ›•ð¢¿ÆÄOäj—‘Î fgçà ýÉ´"ŽÏI’öxß_ÅbÁç«æ^e‹rI–"Õþµ¾½ÂZKÿÙ¸xY-ç‚SzkÊŸ7½ªÅ¿²5VÝõÙ-5+œX’S¯BøÊò¾Ã—èk­˜3JdyÛ)›5L„åq”î'6\ôçbs¡Ëì¢W¶­5…b±˜y]µÚ³|>Ÿi‰Ùðqa3GÒv !ƒÒ^ç TÇHêìü‘ñ‚8ç+ž_XR@)TÏ¿ŧÚñcNòS}žR‘¯˜Þ2Ö¿èÈ·íe­ÊÀ’e¹yz›}ÉW93*¬¬b@r6 1ÿGÐXóÕë•ê-[¨è¿||ÝeO=æÜ6Ýdz ×?hÚF …‚¢())vPTXýÙXf!Ó¿¯¯o“jîõÕ ¬’r&Yýû„òÙB¡@ ”J¥´’" ¦}éÕÃoúÉ–ô3ëfJùƒùâKrE!ä²´åÜðÙДqïËE²‰ÉDßú…ŽQ«ú†C«ÖÆWݲjl$“É!±@~2W*•´ݶ7‰*‡ ,=€Uë¾Ôv‡Ú]ªˆÝÇ×?²ñÖÄ­„á9¼uÏñx”5æ}-,ë¬@Ûš¶‡ºs–±Èkr&ª•ä¨K¹YmWiýùŒÈoý çXs¿>¢°r¾ŠI’¤ªªÀZÈŒ–ç|" U®T²Ó“‰d¿þ¿pÞîé<Àá¡j™dkÞД?_TJs5¦"ª5–8¬uô*ŠògÑÿ¿äÔÙó¡ì ™c¦7Hñª#›Ó†k«µ›×ø=Ì£ªÛËÒ¾#[}%EÛšN§+•J¹\ÖBÞ>Ÿ/7Ol·>ï1/Qâ÷ë=KUUs«FhÞ6 ½Î4œÝ/§Ã“zâk&ox†*-cRÕp8œÊWG§á¬jHÃÏd㯜Y”F$„ðù|ÖÙ0­ª%Ër.žñWÛ¾:œ ϪƒäŠH)ñ|кɋ… ,ãüÁ`Á¿p.1Q3mÊäȆKK;7ožOˆÎÏ(OMW× [~`Ãùùh×¶¾mqÙœè­ÿM|åE¬@nznvÖô(zé`¡óB¡õÈŽD"³³³RxÃm=;ç›ïÆ¿û› ¿MŸúUÿümÛŽñuÚB-j ¬Z,ÛSù=e¹_IúçW‡ˆ D¯:qw¨eû]úS)‡˜½uc,Ónb3¹øî.²/÷-ÊMækf`iB O¥_ì;iû¥BˆX½ ,xLÓXqáÀ2Ü$kkØ›Æ%û X‘HÄ!úl-*¯—ê4ÑïÒUËMˆZiÙÂZOª3¹øVË’R™éêྉÖððp¹\>{ö¬u:3<ÃÀª["]“œ‰˜X¾²¢% •¤ò‰Xu¦¹ñé´v?iú Û65ïiÝÕÀBd²ñó!§…VOöJª6kÒ´Cç®ê¯uZŽç ÁáÕ/Ž‹Çív°èbôo×Ç7nÜW¾xé¡_ýʸ=gøÙ¡S+™·Å^ó£ñ¹ü-ŒÖBˆÓIE ` !ÊgN‹ cµ¾¨9°Ð¥ôé|tQK®žS´§.¦á¬ÏçÓïèLi :7S3™ŒCUò¦W!´ý.c ,ë­×x]2™ÔXB¹"ÅgÃÕ§Á•EéÖÖ=kíÌ&lÇdŠ¢ôõõEsuæEê(xƒsK,¾®§óÑt>*Ëò5¡Ýù‰gíXóX¥êµ×ºâ¯¾™"‹J†j·î§ !Ô²OˆêܨMçV­?ŸB¨%_J‰¿òê+%I*ÍøenÑú}¾¥ÕÀ ƒûöí3mltW °ê&{Â3šÏÀÊ/JUˆÌúsq=€U2<‚ŽÏ†„ÃÃÃ7nÔŽCkLÊ!€ÕtÖ@6±ṏ¢(~¿_©WßY‘3Ù„BUUSˆ¶å¬h4:55¥Ö>€åW„˜?ïÍå¦ÅB«"‰ÉÐüí€ñ¶ºVf zˆé0Kå#ƹH&á¹€)€%„8Ά.úËRe¢Á(§ÏnMÛ#? iˉÚETm¹`ÕêìFÖâw¶|>ßÚµkµ¯Ó³OXrYºîàeRE(%Y­øÔ²âWýccc/­cJ ,oðBERK!„RªÌÍe%ɯ=l(È¥ûNê°DEô窗¼Šá°I&“²ÒùÈé…t-}€™ ÄfƒnîE'2°ŒßÕ§,ÊÀrc²oàâšôëÃWMM;-èÜY–ý~¿õ)©s–V]äLÊ·ê\QqqíF5³¾‰`¡K… ¯¦gªs÷·³ÃÈP{êbÊI¶}"ípl»ÑçóéÓ€m9g`ÙžÜL!t>)X™Bl‰|5€› )e§]í璉eÛÜp8¼gãž~¬ÿÁ™?¸˜r¬„µî•¡ÆªFÏ?2íÇøCÈ0M)ç3_ /fõç]çB¡éЭµ ¡°<µNäéüüÙ#õkü˜XóºÊ«ôu‚…ýÙù¼èƒj E±½ÁhhBçX9!-/©›UëºcZˆ0:4––Ó… ¡é¤"è{¶ÆÈ®wÖh—Ë–¿ä»||]"‘ˆÇãGÇÅ”õ“Œ¹È—À²¾šÉdŒ,Û)„EµÚòÙÙ)!D±8ç?óó’\þ?æ?»ùXµ’DžžW÷9D:ž˜˜/L3”OÆgBƒ‹B±¡©á‹©‰ÐtQqWÒØ.ªk{ä›Îí`¹ÉÀr9>”$I[žÂèÚk¯Õž™™éë›/ܬ¿Ž±Â€"èóÇÕ¨)`Üܳ(tY–g’š[X6QõÏßòœ‰N+'¦f#~ã°tñÝ\,K墧#æÅgµIµ¶× ëFë£\çÆ74ŸÆº[S+%'Ž5À:½uç‡âW‡¥`V¶/ïÜN]0´°Üd`}û†Ø7_ýþ¡Úí,t)CVõru>8m¬8«Í2GL5•µÜÄγ]HÕºg]Ý–ñ|$ËòÎ;…Åb±R©§@Z?èp¾‹ÇãÆ‡WÉÙÈa1¿8Ž©Ú¥µÁÎç_íù˜ñÑ4¬BQã£5€ez¿¶Å9€,ú¥…¬„Yß\EZ”­0ªÖ 1=âVUÕT-Ë!Ë¿¸nHÀ0[PoÞ¨oxÔ7üøùÇs9cµÍoºµv ³v+ ÕíŒÆÖ]/žQ7ËøOãϱBHŸ4!„ˆÌS3Q¥"s¯„'µ„G‡¸ð3°œ×`0h­€¹}ûöH$255•Íf­¸Z›å÷ûGFFÒ鴶䙢(/¿ür¡PÐÖlÑ“£‹þê>‹39!ÄÌ…ß\õ좸›Q…¬ÞW÷ì:88˜Ífggg%IÊd2cCO 4¾A«ãnœ±›ÉÆûs±9_ñåTµbi°¤šª7Ú°Ló[5M_š`¹ÉÒZ¢`0h¬ÝaÍÍ´¶ÍÚ*žâxƒ¢(S~%º0 mnfJ,,t*º(•™ŽË†™æߢaê† & …_‹¦ýM%ý~ÿà y>Ñæ ,k…x]­Ö˜ºzjhÛÓÛÚ~J‹Æ¦³Ó±|(XR…5P^½®_I:´Ä¹º`0xñ¢9öWkš‘v5)õ—/ˆU«V !þ_ç½/,t)ŸÏ§­fžóŠê¬¯ „(Ê嬿ZJ `—5::ªE‹µø‹¶±¡U“ɤÖñè 0Åãñt:J¥Œë­ÔÍÀB¤R©Z»5qX„B!ý–ø’3ל®õNë–Zù úû‰„ËÖääd"‘pxz…C¸DØÝ:°æ—Ì+K…1zE3¾9½*VÅPY‘2ä‰èS LEjj¶mñ ?h)îS럦6/]­]{«Q5°l_‚Ç4%*"9>»°¸gt6 —¥T>rְܧ\‘6L h?;”h´½E¬UËýBM0Ô³­u~¿ßçó¥R)í*iý çÃÞ9ŸÑÔ†x<®=¢×·hÕåLJ†}–frår9qʼhïbtÌžW÷Š (ÊðððÁƒS©T8=2ðÜÐᢡzºVÇ}öùZûÜ}õÕ7|·-æê.¼ëðªÂvõÀZ¬½{÷:ï­…`¡{…Ãam5ëÔLD£Öþ²*,£Õþ~›Â°.o_µ3ŽÃ ÜÆ=lß¾=•JÙîªn ¬ZœÓ2mÛ[b—MªÀ:vì˜V¦Äº"²Ñ‘#G¶oß^·è~EvD³XBõó¬Z IDATˆ`Á¯?dÎXYÿŒ¾6Š¿è ªÕ²ŒsšŒ ²ÔlÛâA¿m–íïh»·¥0íÊï÷ !B¡ÐYÂ8µšgB ¬Ë9Ëtóf:ªwžÍ©sBٗȇ„ý¹˜1€5r1]]³v«¡ ,÷S5ÑhÔ:>6¥?[­I¦â¦CWÊêß'rø·Ï>ô… G.8¼Ÿø•Ô½"Ȳ<<<|èС‘‘‘\.§–”µ2çÃÓSêŒ6gpF)¤rÅÔ–œoöhô쫎lžUŠz)Rmþl&gsX:Oæµ6Øï÷«ªjƒÁ™™Û7×úežu*€åÅ ´×ɲ\ðU¿¹ü”,!f|sƒzåAiËÙálB.îƒ,ÃÔ¸ý½À5?ÿ™qc Èd2¶_m=ðœï"­Ù­ ` C­d[¦åSTUÕï…—žÕħ–,t/½»&gÂÆGXµ¬Èeó܇Z\®¡(Êš5k¬„­dY¶”é¯Z7:?Ö4š%,cýF›¤…k½?“É\sÍ5n’Ã(xFs,Y–Ãáp¥RÑ®£ÖPA½°p|©o|ÝdF)Ég"§ ECÒ3QɲgQ;€e)ân `U›ÚÙV0Ô ÌÍÍýú׿¶¾¿é ¬nF }œXη }¹Xßâ½¥³Qa¸jÒvžBèpÛ\w~_­U5±X,£QÎ…êõ6À²f`9¼¹ÊpûíñÛê€$OîÞ(„H磹 ó7QÓ)ûû"ô7,¿ß¿fÍš¾¾>-04vnð|>z8yötd¾p²q©ÁølXBãWÕ½§6o<;.Â…@j|~nT<·NØÑ4:…PQ”x[ˆ„§¢õT†t>ºc|B6„„Œ«ê¬Ç‰ÃAëf9#ã?UUm(€Uë%ý¶wppPŸ¦£õAÛ@’qŸÆ&­ZµÊÍÌ_á®VŸZ°Ð½ônŸ±‰(ùK6êZLƒþZ}/‘Hh+¤,‘›)„î?X7ËM“le럮¿¿ppÐçóiq1ëšèð<ç»ÇZS…¯|å+­{«°ŠÕõ`êôÁäik’BÒRKûaË–-úàÀ˜¯ažBhÈÀ’*ÕS„õ—j÷%¹Ö=¼ÏçÛ¸qc©T𙙝®‚ÜÂ)„Ý0°@«8O!l´*G&›Øzf$‹ÅÙé™lu~MÓXÖè’CXÍú$IëÎÆ©µÖG2¶ˆÆ¦•%ÚÀ Ô¼y84šÞù¦!Ž;vèŵÎ7è nXBˆ 6èAÞÔL41™òçõ–ÑàtµÇùý~uF5Ö|”e9‰¤ÓéZ,‡l#Ûë9]___­ ÄØØX&“™žžžšš±}@;<<¬=J¥Ò… .\¨†qÛ7Pl"€ÅEÐdY.¨Õ“yùOŸNRó¹‘ɹ׌Ï_/²¾¡©ß!â“ú;%ŸÍ]¡õ8q¸y¬;…°nV„ÃAXëÄ¢Í×÷oÊMVUÕ¡ê‹$I;wîÌçóÙl6›Í {µ#«º,t/½Û$fíXÅùSO£,‡ í–-[ZÒ-›`-=Ëï÷ k@—MJ&“uÛ k.«ý6.D(„ýkwí}Y"sÛ Xþ’jœoìfÞPû2°ŒÂ´y¡PÈf³ÚuUUzDFÖÊÑt––"„Èårzá`I½||Ý%ÉK.Î\íg}q[cK …À‰Õ–éòäf ¡s–Þ ç_G_eÅ8›Éö*lìMúôví2W,}>ßôô|™¡º×ÙD"qÕUW !lŸôÔüÔØö—rÓù™¼)¤"DrðrÛß½®îh­hr&ÓkZ !B¡P&“9~üxfºz³°´Ñ—©¯%“É;v·˜n&Ýg`µ6Iªnjv«ÔMO®•†Ì ÔŠ.îïl¸ËÀr8´êÖÀ’/&Ø’VÝò5,‡O9w|—¥MÕfºaäI ÝKÏÀò••H!8­Î_õ—çÞFk`-Ü8‡çÕΖž%Ëò®]»„¹\î™gžqÞ³5@Ðt‚g´)€Õ7ÕÆô%¹òRêdY®!úr±9_qÊŸB¥@Ÿ”È‹jI¬FXj¹z*0À–³D$±ÖÐií%ÙzËÝ4X+–s–u®ŸÃ _ÀÖcXÎâÖùŽ+ XÕŠ#÷õõi¥y$I²} m=æk3VÜßH»yô¥½bdô !ÄøøøáÇs¹œþRŸoþ¢IËc\f`Yý—¯Óÿ988xiäÒ'.<‘5Ô™6NÒØ°l»žñÊå>«µ1&7+#µ„› ,Û¬4¥PV›º%±;f–À²~|Ïž=zÕ×#GŽ˜^mb ¡›VC;tóª›1d04°ºábG ݢ Ÿ ›XF¦Æb±ZÏ„ÛÁáyu£¬ûYSΔžpn¬ "jœnZÀ‚gXo_ÿ´^×Ý< ­T*ÉÙHr¡NíÐTòÙ¡C—ž^½f²¿,•OnËþTúÅZß oqéͺ]ÛtTg¦ã×¼t¾Ue§áµ$I±XlrrQ™’–g`µjÏ·4Ý0Œ@ûXïHõ4+ç A:-*¤ßÝiOS…7nœ˜˜Ð*O›:š›)„úHZ’$­TG¥R)‹ÎM2•dÖX‰DÂyÁ{Ù°l“ó}Hû2A4CCCápøÀúý¯Ggô˜†XG¾ö’©[ÕÊÀ‹s¬êxrxž¡(J$Y»v­vhíè®K2°ôYœµ²ÒÐÓJÉ‘§·Í?-˜O›2fûrQc%G=/ºfÔvo¦à¯û)„¶§=ƒØúþZq~ÉÍBÛíÎük`ißk-wC#€…î¥=>Ò1‰|èÄâI?z…f7We—3øZ¥é ,S]­ôO2™¬ý › ,í‡QŽ®…Sá­ÍÀ–Áe X5•\5µsþë*ò¤W_|ő⸢Ôù.ëžÿ –Tc‘í»´ö[ÏËÀZâÅž ¬ËÀjôZ¦½_ž¡Õ³Bø|¾-[¶<ûì³ÂÒѬ‡®õ0ÓKáH’´wï^÷íÙ·o_©T* ÅbÑT¤Öù·°mžÆxÊZ† },3†álXtL°œ2qù,AïqÆ.XÖ¡£ûç>Ÿ/h ග˥½—ÎvÏ~¿_»Ûׂ¦À½Ï3ÑÑìªùŠNOîxñDùŒñÕWÞœ»8¿ÚÀ¥—^j¬\n«îãØZ/54›¸îGZžU÷¹‘ÃyÌMg‰F£§NjôSíF ]M/Κ˜3wl­Æ¾ŒQWiI+‰lÙ²ÅÍGŒk0U+‰Ö®ï«³>xo:üùçŸgÑbohyË4¸ŒD"Ú2FÆ7¬÷¬÷<+?ÛОë^DwïÞ]ë’o-ƒÕÚV K­7Àê†ZÅxä¸L¹²2^ Œ—Ët:­M$tÈÀ2¨Ö¥\v›¸Ð8G ôÇ<ËP"@’$m½6¿ß¯ªª1–×î¯Æ2Ñ.^årÙ¸n¬ÆaE#íd:2kM!õ®C»e›ÖgmÆ2O!L§Ó[·n­ÕíŸ J=Àx\m†OˆE¬>Ãj nž¾3yE#«Ö=¼ëöÓº/iáfço©õ7ñµZKyº¶{´ÜXèjÁ`P+ÎšÉÆµ:z ¹?BÄãñ.5¶¤–û„¶¦’iMd`-%ýJ[[ àÀRE^\ž¼î£Wëà2‹0ÒßÐèCÝ&‹éôÛN÷{kHû¦¶04†.çpwêžq˜n Øñ ¬žÐ%Ãz´ƒ¶§ñÖÑeK–e­û¯ªªÚâeú÷,÷5°¼‘¥ªj£Ë¹pYôŒE±ž|%)G.æŸÖ¯‘«¯´ÈNC{Ž­6zÔû{Ý®d `9´ÇT´qddÄyç:I’@>Ÿ·nwþà3°„±XL¿õî’þE ]Í:Ú6Yº3€Õô*„ÍåV‡>µ2°ÜÔÀ¢‚;„» ,ýç&XÚBÛ7˜²–ÜŒ‰ºIÝN—N§c±Øììl|Aݯs)„Xº–°ê>™0 ¾ý~ÿž={Œ[EÙ¸qãÜÜÜììl¡P°N(€B–eý”µœ‹Æ`yÈŽK˜ÕºE"kwíºǵinÅbÑxMtžBØX=àM#ç.¹ÁÆÒÿgóùü®ÉÑ)ÿŒ"‹];º'¾/ìfõ[Û½‰z­¢(z¯;ÐÒÖ 2ž\&=5Úq®¸âŠJ¥ò‹_üâüùón¾«¡Æ8ˆÅbgÎÌ ë’þÅ%]-‹™¦o˜Ãá°›ûçå·ÌXáp8 iO ôuXÝ<’Òž±ëÞ¥d`íß¿ÿꫯnúãè¦cÕzä;ËY~¦†B!íˆUUU+„¬½dKÿ¹Kž›ÀBW …B###ÇŽÓ·¬Zµjlllnnnnn®koÞš`E"‘í‘‚>î©khhhhhÈ´ÑM ,±x:ØR2°(x†›)„úÏnYc©’$íÝ»×ù«—ÀrÓ¶ö »;•ÕµgE,E— áWCOZb+ Æb1m&¯óè®é"îÊÀ2M‡\~¶º¡3cõ˜ær:h]®1ªk.€Õ\'uS"ÆåÜg`ŒŒhϛݔëZ°ÐíFGGO:¥Â}>Ÿ6%Þ}|gù5]Ľ¿¿¿¿¿¿%mÐÂúCûZ 0ä¦Dƒ¬æj`¹ùj——…–ßò°WÀ2Xb«¯¯¯¯¯ÏÍõD ,ŸÏ§?…êøe¨…ùÎè*ÆcØ8A¯¹»•†"GÆ7¸ `ÿ鲈{KXuùh4Z,µŸ§§§ÙÜ.û‹ªª›7on°™íE ÝNUÕÑÑÑ_|QûgO”–hºVË›¡Ÿ§j¤vîÜY.—K¥R¥Rq³Œ+<¯nkõêÕÚÏn†ÚÂLÚ3êå™BØ>ªªê'«%¶„U ³œó›L§âþþ~m ’©à£­Z…°­W@mÎTûöß>.BW©õ¿Ù\ËØY `¹éJ¦îÐÖ ¬º£t“±±1ýçÿøÇz0ËÍg»VÄ€‘‘‘'NhÉ™=Àjz ak¹©¨ÕªÂí”ðŒº‰Ó@ ¡ÃÆ}kppppp°Ö«¶–8…°}6mÚ´iÓ¦–ìŠ"î@ájèI e`­Y³&™L6÷E M!ìTVW¡–Wµ6€ÕP䨉)„µ¾Ëdpp0N»l†­¥,»©(Š1€Õ»A{ H’466öì³Ïv|¦½K]À’e¹T*i?·û$Å@Á3|>ßÎ;[¸C7 b6­k§¶SÂÕГœX.‹6¸¡/\hýëžk=ÏÐVõiº ½Å6ŠG7ô€Z£¸žžB¨M5¨»CK `9쪇ÀBoH§Óýýý.\艶¦k`µ7ºh‚$I©Tª…;\ʵ¶®-[¶è¥=<˜Ëåô—Vf‹ž-çÀ‹‹6,eÈw饗:¼ê2Ë3—?7˜VïUí›BX·HE£¬`0¨ªª,ËŠ¢ø|¾å\´¡³M[äˉzÆØØØsÏ=×éV¸Ò%XL5B7hëõ2ÇãqíçãÇX=1ÝØ ¦@gÕ `ɲ¬×™nß™Ùe–g.nÀò*Û['ŸÏ×\ÿj¨ƒŒŽŽ®]»Vkƒ›ƒJ’¤eKú#KÑ«íÆ  …FGG;Ý Wº$€µœõÉÉɶî½kÙøxµˆÃ’É ÖnÃÕГœ‹¸‹ÚÉP­å¥ªj"‘ˆ-hSºí_žnè¶ýÈå ?Î{«À’eY›ë×…£,‡1a]¦qþv.­ =< ÑÏÒ%«nß¾]ØîõbŽ9²}ûö¶~z”CQky5€E , ‡p5ô$S”Äz|ÕUW-s3ÄâK@8Þ½{÷2´¡Ûذè†`;Šknþ 0ŸªT*=¢¸” ÔR‚_]¥‡ÿÿ€®Õ%X‘HdÙ¾‹jéTVOPŒ˜Bô®†žÔ%ôÚº(J²}¨C7ôÓáÉdR©TÓ·66lذaC+ÚÕad` X@;˜Ö£ 2°‚1…p‰ÈÀ€Î2MÖë†f.B¦Õ{—qç÷û·nÝê™qÝR´°Vïönª¶ðê½4Шe{blú"Ïd`™° !,³. `™ÎÿœðÅrUÃò3þonذ;)ÍR2°<3…°WÛ t¹•ÀÚ¿§›€.EÖ9 8zwðxWCOê’ÙFV¶º¡èÿ³ápxhh¨³éKÉ¢2~¶§Þ|@ tœé)YOŸ&ÜX¶åcÑs`-SÂÕГº°–ç–.Åb±µk×j?G£Qíº¡裸±±1F;ºVÕÀêé?), -Œ'ÏÜHMèÔ*„ž™BH :kpp0—J¥r¹‡;Õ 2°¬¢Ñ¨·‚—hG{:îëëët[ºH«V!ìé¸GÆ÷@·ñÌ9X"2°–ˆU ³‚Á`0ìt+8ÿc‘eY’$o,ØBd` j`m²Ò2°žþùN7]ª#,I’<ÓïªàSÄè6\ Ñ>d`¹D7ôI’†‡‡c±X§Ò]Zµ aOGÀ{¸é@7[i,½`Ò‘–—:SÂÕíC–KtCoX¿~}§›ÐuÈÀ°€61ž¼t/]K"‘ètÐ¥ˆÚ÷E^êtάž‚ÞÃÕíC–KtCoèàŠŸ]«U5°zúB h ¯&ƒ"k‰œ«à÷ôàXÀ gzr¹2§RÄh ЏšŽ°<³¡F’¤J¥¢ÿl|IQ”r¹Ü‰F–•g(4M–åR©¤ÿìþƒÑhtÏž=ÚÏ=ý —ûj -¼š RËþýû;Ýt)2°–ÎáiËK]…«!ÚGQ”ЂnX±kÑ áaM—²R%¶ ·¡iËÄSϨîáá{i[W_}u§›€.µl¬x<¾mÛ6íç@ ЦoéˆT*¥§Y™þž###ãããú?y&tWC´O"‘Ø»wo§[Ñè†ð0fùÀÚb¥°€Z–­fS hÓÎ;ëòË/¯õR<F£ÓÓÓËÙ,?¦ÀÚ‚ YÊŠ¿pcõêÕããã±X,&“ÉN7m‘L&µyŠ¢øýþN7§¸‘Úb¥­C¹Ô²lSW¬U«VíÚµkll쥗^¢* ÐY\ Ž£ÂölÙ²sçÎ;wnß¾= uº9P]بw—gºP¥Rá¦+ÖÜÜÜc=¦ÿsïÞ½+ór ¬í Ñx?1è8¢WXÉÈÀ°t°mD ÀÒÀГ““nºÔ²­Bº!ÐqtC ã膀‡ÀÐGŽétÐ¥$IZikt Ýè8º!ÐqtCÀüPþœ"îÐÍ^xáý,}É%—(ŠÒÙöh“ö…h¼ú!€Ðq¬B€Š€Ø¿§›¬ttC ãè†@ÇÑ óÂä;¦tS°BÀ@W#€ žþùN7Xéè†@ÇÑ Ž£F @ ¬]»¶ÓMV:º!ÐqtC ã膀‡y¡ü9EÜ:Ž"îX¡` «ÀÐû÷ïït€•ŽntÝè8º!àa^¨E ,€Ž£V(Xèj°´å€Ž£G7:Žnx˜ªGQ  ã¨€Šº,-099Ùé&+Ýè8º!ÐqtCÀÃ`h#GŽtº ÀJG7:ŽntÝð0/”?§ˆ;@ÇQÄ+,t5XZ`ÿþýn°ÒÑ Ž£G7<Ì Õ£¨ÐqÔÀÀ E ]€xþùç;Ý`¥£G7:Žnx,-°víÚN7Xéè†@ÇÑ Ž£æ…òçqè8Џ`…"€€®F @ ìß¿¿ÓMV:º!ÐqtC ã膀‡y¡z5°:ŽXX¡` «ÀД:ŽntÝè8º!àa^¨E ,€Ž£V(Xèj°´Àääd§›¬ttC ãè†@ÇÑ #€ Ž9Òé&+Ýè8º!ÐqtCÀüPþœ"îGw¬P°ÐÕ`hýû÷wº ÀJG7:ŽntÝð0/T¢@ÇQ @WûØÇ>Öé&+Ýè8º!ÐqtCÀÃÚž»ôÔSO}ùË_þæ7¿999Y÷»$I2mqÓ<2°€Ž£G7:ŽntÝè¸ÎÀzÇ;Þ100ðØc¹|e±¶¶ ÝoùâÓn‚pÍꈲG7:ŽntÝè8º!Ðq=œ,E×°†††TU]µjÕÿñÿêW¿êtsÐaÝÀzó›ßüï|gjjêÉ'Ÿ¼âŠ+®½öÚgžy¦Ó@'uW ,“/|á ÷ßÿ÷¿ÿýº{^B»Ðm 4µ2€e $YwÛDëÔ©S7nœžžnAãЛ|-ÜWËcl¬€îªeòíoûª«®êt+ÐI­ÌÀj‚q^á 7Üpë­·^}õÕ}}}ÇŽûÖ·¾uçwþà?èl ÐYmÏÀ’˜~¶úû¿ÿûo~ó›—]vY8Þ·o߯~õ«ýû÷ïÞ½»Ý-@7[¾U€&tu ,€º,t5Xèj°ÐÕ` «y!€uäÈ‘·½ímñx<¿ímo;zôh§[x–ûîöè£þáþa&“I${÷î½ï¾û–³€‡5wÕß´i“$Iín°4Ô Ëåò]wݵmÛ¶`0xÙe—Ý{ï½ËÖNÀÃÜwÃR©ô¹Ï}î¯xE2™L$»wïþÜç>W*•–³µÀŠòÔSO½’¼] àIDAT÷½ïM&“-yö|kzzúúë¯ß½{÷áÇ>¼{÷în¸!—Ëuº]€5ÔÝ®½öÚ3gÎÜwß}'Ož¼ë®»>ö±}ùË_^æÞÓÜU¯R©¼óïüøÇ?¾<¼­ÑnøÞ÷¾÷¹çžûÿø‹/Þ}÷Ýwß}÷r¶𤆺á‡?üá¯ýëwÞyçÑ£G=zçwþë¿þë‡?üáen3°r¼ãïxì±ÇZ¾g©R©´|§ËéÎ;ïòìù ¬xàæ›o6n¹ùæ›ï¿ÿþNµ𰆺Ûí·ßnLcz/°tM\õžyæ™/}éKŸûÜçÚÜ4`¥h¨~ñ‹_|ÿûß¿,íV†ºa0´n …Bmi€vêùÖ/ùË;v·\~ùå/¼ðB§ÚxØRºÛC=tÙe—µ§]À Òh7Ìçó7ß|óW¿úÕX,ÖþÖ+BCÝð§?ýéôôôµ×^‡c±Øk^óšvL©Vš†ºáûÞ÷¾·¿ýí?þñ§¦¦¦¦¦}ôÑ?øƒ?øÀ>°,-ÐJ=?•Àï÷g³YUUõ-…B!ÎÎÎv°U€'5ÝÝ&&&^ýêWéK_Ú·o_›Ûx\£ÝðÖ[oþ‡øíŸL!–®¡n £Ñèí·ßþ¦7½IñÀÜvÛm÷ÝwßÕW_½|-<§¡nX©TÞúÖ·ºñÆÿýßÿ…M€vc !€sêÔ©·¼å-_øÂˆ^Ëìþûïÿå/ùw÷wn°r•ËåÏ|æ3·ÜrK&“Éd2ïz×»>ýéOë1eËàöÛoê©§¾ûÝïNLLLLL|÷»ß}ê©§î¸ãŽN· @Ãz>€•J¥&&&Œ[Î;—N§;ÕÀÚènÇÝë^÷ÿø×]w]›[¬ uÃ|ä#_ÿú×EY–¦+ECݰ¯¯O˽ÒýÞïýÞO<ÑÆö+@CÝð _øÂÝwß}ã7¦R©T*uã7Þ}÷Ý”†zQϰ¶mÛöì³Ï·<÷Üs—^zi§ÚxX£ÝíĉoxÃî¸ãŽn¸¡ý­V„†ºáË/¿<::*!ô4§¡n¸mÛ¶ei°²4Ô ?¾gÏã–={ö?~¼íÐ=ÀzÓ›Þôµ¯}͸åk_ûÚ›ßüæNµ𰆺ÛéÓ§_ÿú×êSŸºþúë—¥uÀŠÐP7¬Xè—£­€G5Ô ßò–·<øàƒÆ-ßûÞ÷®¸âŠ6¶Xê†k×®=pà€qËO<±fÍš6¶@{ô|1ש©©;v¼ûÝï¾õÖ[…Ÿÿüç¿úÕ¯>û쳑H¤ÓM¼¦nw3VéÛ½{÷m·Ýöö·¿½cͼ¨¡nhEw`éê†3337ÜpßÿùŸÿîïþ®â{ßûÞ_ýÕ_}ç;ßaf=° uÃþçþÌg>s×]wíÛ·¯R©üèG?úÀ>ð·û·ï{ßû:ö +EÜÍb±ØøÃ'Ÿ|rݺuëÖ­ûùÏþðýڡ¡îöôÓOßtÓMÒb.\Xæ6ÃU踆ºa0ü·û·ÿú¯ÿÚ¼yóêÕ«¿øÅ/Þ{ï½D¯€%j¨¾ÿýï¿ýöÛ?ùÉO®_¿~Æ ŸúÔ§>ûÙϽÚÇZ¼¢Uõ+x €®ÖóXð6Xèj°ÐÕ` «À@W#€€®F ]º,t5Xèj°ÐÕ` «À@W#€€®F ]º,€¥’$©Ý_qôèÑP(tË-·Ô}çŸþ韆B¡cÇŽµ»IËFªT*n@/‘$óʺ¥åÞõ®w=þøãO>ùd8v~g.—Û³gÏUW]õ¥/}©­MX6°³ á*“3gά^½úxík_ëæý=ôÐ[Þò–'N¤Óév· `0… ÚlAiq£öC.—{Ï{Þ“N§ûûûÿæoþ¦R©äóù[o½µ¯¯/™L~à(‹úÞ~ô£]yå•Á`pttô+_ùJ­/ýæ7¿yå•W£WSSS·ÝvÛ¦M›Âáp"‘øßùï}ï{ú«oxÃvíÚõ­o}«µ¿;@§Àh€–{UY`}ÃûÞ÷¾W¿úÕ/¿üòÏ~ö³G}ô³Ÿýì{ßûÞ+¯¼òÅ_üùÏþóŸÿüóŸÿ¼öÎ_ÿú׿ÿû¿ÿñ§OŸþö·¿ý‰O|âþçl¿ô‘G¹é¦›Œ[ÞùÎw‹Åÿþïÿžœœô¡»îºËø†?ú£?úáØ’_ ã˜BЇX’$ýÓ?ýÓ?øAmûO~ò“×¾öµŸüä'õ-=öØûßÿþ§Ÿ~ZqóÍ7ïØ±ã#ùˆöÒý÷ßÿÅ/~ñ?ÿó?­ß¸nݺïÿû[·nÕ·Äb±ãÇÇãñZ|á…ÞøÆ7uêT,Ó·¼ò•¯Ü±cÇG?úÑ‘‘ÛF^¼xqÕªUÙlv©¿-@` !@+#JZ†”iËÅ‹µŸ=ºyóf½œV:>yò¤Ëo¹çž{Μ9366¶uëÖ[n¹åþûïç©$ð0X­¤twØ¢‰Çã'Nœ¨”J%Ûw ˜2³Ö¯_ÿÝï~÷Â… ÷ÜsÏ«^õªO|âï~÷»o8vìØÀÀÀ~€.B  1Á`pnnnéû¹îºëî¿ÿ~7ïܵk×#uÍ5×|ãß8vìX±X¿ãŽ;®¹æãî¹çžë¯¿~‰-è°ó™Ï|æ¶Ûn µæº´mÛ¶|ðÞ{ï]¿~}&“ùÄ'>ñ—ù—¶ï¼é¦›~ö³Ÿ=üðÃú–üã÷ÝwßÎ;c±Ø¾}ûJ¥Ò·¾õ-ýÕüà¸é¦›–Ò<€îÁ*„=àÏþìÏüñ'Ÿ|2 9¿3—Ë]qÅ{÷îýÊW¾²ÿüók¯½ÖýxGGÇÂ… —-[&j0w:R…½ÞóÁƒï¾ûîüãñññWr?xþ@ÝPWÀ€wË–-{öÙg;ÕW’¤k®¹Æ½¾Ÿ}öYJJJpppLLÌÿüÏÿ¸ŸYXX˜šššššºcÇùC:®¹¹yΜ9ÇÿÍo~ãt:[ZZæÍ›9lذgžyæ§Ÿ~êùQ\|òkÅòÁ–––gžy&**Êëëºv»}æÌ™£F4hPbbâÆûþœÜrË- ,ùòÝ666¾ð ±±±!!!C‡½ûî»·oßÞï ›››çÎ;|øðÐÐЩS§VVVº?o]§’ÅëcɧõüÛqéÒ¥W_}5&&fРA7Þxã›o¾Ù÷§è''obcc9Òó9‡>|øºuëÎ;÷å—_Ž3f÷îÝ®}ñÅ}ôQ}}ý™3g>üðÃððð¯¾úÊõQI’fÍšµfÍš†††£G¦¦¦.]ºtÖ¬Yï½÷ÞÙ³g]GÞxã^¥ë_aI’ž|òI×Éî]?°Ûí£G^¼xñ‰'.^¼XRRòàƒzý¥u·ªªªÆŽÛ震zhÁ‚ß}÷][[ÛÙ³g ï¹çžþM(IÒôéÓ—/_^[[[[[»|ùò¨¨¨ãÇ÷0•ûm»ûP¯¿sæÌY´hÑÑ£G›ššþñÜpà 6lðú …Þ_¼x±çsžxâ‰?þñòO·mÛvß}÷¹~üàƒ¾õÖ[î'¯X±âá‡výX’$¹¯N§sß¾}¡¡¡îGöîÝ{Ë-·ôú(^“³lÙ²®]?˜5kÖ¢E‹zþEuwÏ.---ƒîtÎ!CÜkÚóýô<¡$I¯¼òŠû‡/^üÄOô0U_ÜëoÇ‹/¾èþÑ;vÜvÛm^EÀ@!À€wÁÁÁ---îGº¾t4vìX÷«ä†††k¯½Öõãû·«®®v¿¹Ýn7ò]ÕÔÔÈ:wî\×#ƒ¡×Gñšœ“'Ov=èúÁ¨Q£z½¬ïîž].\¸Ò霔””Ù³gŸ:uª/÷Óó„’$É×».ÇŽ5jTSõ%À½þvtzІ††ððð® Þ³x»}ûö›nº©ë‡ä7û 4¨­­ÍýC×\sÍ¥K—$I >wîÜ Aƒäµ¶¶:ôâÅ‹®{èèèpÿ ¥×#½>J×·étº¶¶6½^ïu`½^þüùÁƒ÷úËïî MUUU¿øÅ/Ž=ê~ÎÉ“'Ÿ{î¹]»vÅÄĤ¦¦>øàƒYYYò'e/kB×gˆƒƒƒåµ´´ †ööv¯÷ÖÑÑ ß¶ëc¹ŽôúÛqéÒ¥k®¹Æëm…ð&,À»I“&ö|ŽÁ`8}ú´û?i]]”$)**ª¾¾Þýäúúúèèhù§]ßOÔÝWÑôð(^uj›»áÇwúZÞ˵mÛ¶»îº«ÓÁ1cÆlݺõÇܰaÃÏþó¼¼¼ìììþM(IÒéÓ§;ýtĈ®6ìÇtÿèÉ“'û2v¯¿ê ¨€?s€wÏ>ûì²eËNœ8ÑÃ9“&M*((ðú!“ÉÔ©ßýë_M&S?&éáQ‚ƒƒ;]÷lÊ”)ï¿ÿ~?fp)//_¾|ùsÏ=çõ£®·UÏ™3gçÎò›«/wBI’Ö­[×é§“'OvýøÆoüâ‹/Ü?úÞ{ïÉ?îá±ð·0J¿Æ \½ÞÿýèèèeË–9räâÅ‹çÏŸ?tèÐïÿ{ù/ηß~;jÔ¨÷ßÿ_ÿúWSSÓ§Ÿ~*¿=jß¾}ááá®·ÝÖ××ôÑG_~ù¥ë£]ÿêõp¤‡G‰ßºuëO?ýÔÃý¸”ß}òäÉ‹/~ñ޾ ú§Ÿ~jhhØ»wïÂ… GŒ±eË–®çLœ8ñÃ?¬©©ioo¯­­]´hÑÔ©Sû7¡$I=öØŸÿü纺ºººº?ÿùÏQQQGu}týúõãÆÛ³gÏ… Ž;öÛßþvΜ9òm{x¬Ëýíèî 0€øôä›o¾™1cÆu×]§×ëCBBn¾ùæùóçWTT¸Ÿ0uêÔ°°°ÁƒOš4éÓO?•?´uëÖääd×ÿa™œœ\PP è²Üãìܹ3666 @êþHž2cÆŒ”””œœœ^oÛÑÑ»aÆääd%g ÿ|ô ¸°°Ðb±¸±X,}¹íöíÛ£¢¢¨/À—ùh€+++Ý$$$TUUõå¶Ë—/Ÿ?¾2s00|ô%è    .èõzùH{{û!CZ[[{¾á?ÿùÏûï¿ÿĉ ÏÀèú&_ ×ëÛÚÚÜ´µµõzçžzêµ×^ë㣼üòË^Ÿ“àà`•>«?ë½ŽŠŠª¨¨ˆŠŠ’ÔÕÕ%%%ÕÖÖöp«ýë_7ÝtÓÑ£G#""®äÑu:}Z*S®>ú9àøøøòòr÷#qqq=ßê¿ÿû¿ÿýßÿý ë € |4À™™™6›ÍýˆÍfËÊÊêá&ííí+W®äíW€«‚xöìÙ%%%K–,q8‡#//oÿþýÙÙÙò :®ÓM¶lÙ×ëU2¾ÀGV\\\ZZj4FcYYYQQQhhh7yã7¸ü\-x·‘¼ ࢹ7aàß0` À@€@몫«Íf³Á`0 f³¹¦¦¦‡“u]¨6§Ÿ!À iMMMééé&“Én·Ûív“É”‘‘ÑÜÜÜÃM:ýŸÆªêgøz/ø2$Ú‘ŸŸàÀµk×ÊGf̘‘’’’““ãõ|­mH¾ ЙN§knnž;wîðáÃCCC§NZYYy¹wRXXh±XÜX,–‚‚‚Þ`¸ŠeggÇÅÅ}ûí·ÇŸ2eJFFƉ'.ë*++Ý$$$TUUõp“èèh½^?jÔ¨ÇüðáÃý™®j7ß|óüùó££££££çÏŸÿôÓO[­Vù£]ß0ÕõÍS‡£Ó7‘‹ŒŒlhhèî³²²6oÞÜØØXZZšœœœ––vðàAe~q~N[/å÷‘Ö>Ãà*¥ÓéŽ?~à 7ÈGŽ?>qâÄÓ§O÷ýN‚‚‚.\¸ ×ëå#íííC† immíËÍW®\YPP°k×®žO³Z­‹/îûTëå—_vÿwÉeQ®”Æ  ઠÓéZZZ‚ƒƒå#---ƒ¡½½½ïwUQQ%©««KJJª­­íËÍÏœ93vìØ¦¦¦¾?âÕ…7a¼èt±{úôé#FÈ?íËKÐñññåååîwRQQÑ÷oíÊåJ¿`¸Š­[·®ÓO'Ož,ÿÔÙ#×9™™™6›ÍýNl6[VVVØ´iÓ„ ®ì¡Q¼Öê/A¸*ètºÇ{,55õÑG•$iÓ¦Myyy{÷î7n\ß櫓±1111;;{Þ¼y’$½ýöÛkÖ¬)//—¿»ûJÌÈȘ7oÞwÜyêÔ©õë×çççÿýï7™Lý‹ó¼ ðâÝwß-//¿ùæ›o¸á†;v|òÉ'—U_I’Š‹‹KKKF£Ñh,+++**’ëÛInnîºuëÆ2qâÄÇïÝ»×ë«(.õ¼à ÀUe¥®€ð+0\­xýùªF€€ @ €0` À@€€ @ €0` À@€Àw\]]m6› ƒÁ`0›Í555=œÜÑѱbÅŠøøøàààñãÇoܸQµ9è pSSSzzºÉd²Ûív»Ýd2edd477wwþÓO?]QQñ׿þõüùó|ðÁ| æ´\.Óé=ƒùùùX»v­|dÆŒ)))999]OÞ½{÷²eË êÑu:}Z*S®>z\XXh±XÜX,–‚‚¯'¿ûî»ÿõ_ÿ¥Ê\  peeebb¢û‘„„„ªª*¯'ñÅMMMiii!!!aaa“'OÞ·oŸ*cÐO>`‡Ãá~$22²¡¡ÁëÉuuusçÎ5k–Ýn?qâÄc=ö‹_übïÞ½ªL @Š`tttüñœ5k–ë§¿úÕ¯$IzñÅwïÞ-r,ºç£WÀááá®wÏž=ÛéšX™™™é~äøê«¯z}«ÕªóæJ& /|4ÀñññåååîG***âââº;¹bµZÞôïÞè; pff¦Ífs?b³Ù²²²¼žüÐCýíos?²}ûöäädçàÊøè¼666&&&fggÏ›7O’¤·ß~{Íš5ååå¡¡¡®Ü¿0ëâÅ‹sçνï¾û$IÚ¾}ûÂ… 7oÞÒÞÞ>dÈÖÖÖ¾Ü|åÊ•»víêù4«Õºxñb¯òͧE5¹N§»té’ÆŸ.Ê}ØGUQQ%©««KJJª­­íËÍÏœ93vìØ¦¦¦þ=ºÆß„uéÒ¥   K—.‰D˜ÀÀÀ‹/Š€xš{V|||yy¹û‘ŠŠŠ¸¸¸>Þ\Ëù¼r¢§I¯×ÿôÓO¢§àç|4À™™™6›ÍýˆÍfËÊÊêãÍ7mÚ4aÂæÒ„ŽŽŽk®ñÑ?ê $À”æ£{vöìÙ%%%K–,q8‡#//oÿþýÙÙÙò ËÈÈØ²eK]]]{{ûÉ“'—,Yò»ßýîµ×^1¸? À€ |tφ……—––F£ÑXVVVTTêõäÜÜÜuëÖ?>$$dâĉ‡Þ»w¯ÉdRyf¿A€ 0húÝFÝÑø›°¯½öÚóçÏ‹D˜Q£F}óÍ7ÑÑÑ¢ žæÞ„¸æ € 4½gá&ÀT é= ¯0 MïYxE€ 0hzÏÂ+L€¨@Ó{^` @šÞ³ðŠ`*Ðôž…W˜P¦÷,¼"À€ 4½gá&ÀT é= ¯0 MïYxE€ 0hzÏÂ+L€¨@Ó{^` @šÞ³ðŠ`*Ðôž…W˜P¦÷,¼"À€ 4½gá&ÀT é= ¯0 MïYxE€ 0hzÏÂ+L€¨@Ó{^` @šÞ³ðŠ`*Ðôž…W˜P¦÷,¼"À€ 4½gá À”¦é= ¯°^¯'À”¦é= ¯0/AP¦÷,¼"À€ 4½gá&ÀT é= ¯0 MïYxE€ 0hzÏÂ+L€¨@Ó{^` @šÞ³ðŠ`*Ðôž…W˜P¦÷,¼"À€ 4½gá&ÀTà»{¶ººÚl6 ƒÁ`6›kjjúr«ºººØØXN§ôx~Œ`*ðÑ=ÛÔÔ”žžn2™ìv»Ýn7™LÍÍÍ=ßÊétΜ9ó•W^QgHE€ 0øèž]µjUjjjnnnxxxxxxnnnJJÊêÕ«{¾U~~~TTÔôéÓÕÒ_` @>ºg -‹û‹ÅRPPÐÃM<¸jÕª·ÞzKáÑü&ÀTà£{¶²²211ÑýHBBBUUUwç·´´X,–5kÖ„……)?Ÿ#À€ |tÏ:Žˆˆ÷#‘‘‘ ÝÿÜsÏ=òÈ#©©©Êæÿ0 س•••‹-ºÜZ­V7J y!À€ |tφ‡‡wºÞ={öl§kbÙ¯ýë?ü0 àrÅjµ:½éçÐþ‚`*ðÑ=_^^î~¤¢¢"..ÎëÉlj‰ét ˵l¿` @>ºg333m6›û›Í–••åõd¯—°\Ëö&ÀTà£{vöìÙ%%%K–,q8‡#//oÿþýÙÙÙò \Ý*‡`*ðÑ=V\\\ZZj4FcYYYQQQhh¨è¹4`*=@·bbb¶nÝÚÝG{~y™Ÿ¯&ÀT é= ¯0 MïYxE€ 0hzÏÂ+L€¨@Ó{^` @½¼ «¡¡aýúõÅÅÅ_ýu}}½$I#GŽ4™LéééÓ§OïÂU`*èvÏž:ujöìÙ£G^·nÝ]wݵcÇŽÚÚÚÚÚÚ;v¤¥¥}ôÑG£GÎÎÎ>uꔚãB800°½½]ôü\·WÀ±±±cƌٶmÛ”)SÜÇÅÅÅÅÅåääìܹó׿þulllKK‹òsB=ýøµý‰ë—Ï?D(ªÛý2mÚ´²²²Nõu7uêÔ²²²iÓ¦)3„!<¯BP^·WÀï¿ÿ~¯7 éËi¸º`éÿ8((Hô üVï{öwÞñz77÷™gžqýtìØ±/½ôÒСC.\È·öKX"À”×ûžýüóÏ}ôÑN§M›¶gÏeF‚`X"À”×ûž4h×ãƒèaà°D€(¯÷=ûðÃoÚ´©ÓÁ7šÍfeF‚`X"À”×ûç€ßxã9sæœ;wî±Ç=zôéÓ§?úè£C‡­^½Z…ù >,`Êë=ÀC† qýàÅ_t?¾~ýzùÇ|ïBB€% @y½˜¸j –0åi}Ï¢+,`ÊÓúžEWX"À”§õ=‹®°D€(Oë{]`I’ÛÛÛEOÀŸùîž­®®6›ÍƒÁ`0˜ÍæšššîÎÜ¿vvö˜1c‚‚‚F=yòä?þXÍQý –$)00ðÒ¥K¢§àÏ|tÏ655¥§§›L&»Ýn·ÛM&SFFFss³×“srr’’’víÚÕÔÔôí·ß¾ð ¯¾úêË/¿¬òÌ~ƒK¼ @y½’«V­JMMÍÍÍuý477×õ_ääät=ù«¯¾’qÏ=÷Œ;öÖ[o]¼x±Jãú,`ÊóÑ=[XXh±XÜX,–‚‚‚>Þ\¯×(0—&`‰PžîÙÊÊÊÄÄD÷# UUU½Þðܹs{öì™6mÚ¼yó›ÎÏ`‰Pž¾íp8"""ÜDFF644ôpN'ÿøî»ï¶Z­ Íæ÷°D€(Ïö¬Óét:gΜY·n]eee^^^¯7±Z­:oT˜Ö—`‰PžîÙðððN×»gÏžítMìÕÈ‘#§OŸ¾víÚ¾|³&«Õêô¦ÿsû,`ÊóÑ=_^^î~¤¢¢"..®7¿õÖ[ëëë˜K°D€(ÏG÷lff¦Ífs?b³Ù²²²úxó’’’Ÿýìg Ì¥ X"À”ç£{vöìÙ%%%K–,q8‡#//Ïõß]É'¸¦öÞ{ï-((¨¯¯oooÿþûï׬YóÔSO½öÚk"÷X"À”ç£{6,,¬¸¸¸´´Ôh4Ʋ²²¢¢¢ÐÐP¯'ÿö·¿µÙlqqq!!!ÉÉÉ;vìøøã§NªòÌ~ƒK€ò|ôË$IЉ‰Ùºukwu«Ô¤I“&Mš¤ÊPš@€% @yZß³èŠK€ò´¾gÑ–0åi}Ï¢+,`ÊÓúžEWX"À”§õ=‹®°D€(Oë{]`‰PžÖ÷,º"À <­ïYtE€% @yZß³èŠK€ò´¾gÑ–0åi}Ï¢+,`ÊÓúžEWX"À”§õ=‹®°D€(Oë{]`‰PžÖ÷,º"À <­ïYtE€% @yZß³èŠK€ò´¾gÑ–$)00°½½]ôüY èàsœN' ¼té’N§=ˆ0:NãÏ 4 ì\N×ÑÑ!z ‘‚ƒƒ[[[ƒƒƒEø-­_è “ŽŽŽ€€ÑS@¼Áƒ_¼xQô€?#ÀðÀ'€áL€E±jáÃ…JcÕ† ”ƪ…  (U .P«0\‚ƒƒ[ZZDOø3V-<`¸p (U .|0 4V-<`¸p (U .P«0\0 4V-<`¸`@i¬Zx Àp!À€ÒXµð@€‘¯8x IDATá2hÐ  (ŠU .| 4V-<`¸ð4 4ß]µÕÕÕf³Ù`0 ³Ù\SSÓÝ™{öì™6mÚˆ#†šššºmÛ65çô3.Pš®Ú¦¦¦ôôt“Éd·Ûív»ÉdÊÈÈhnnözrZZÚ?ü°mÛ¶ÚÚÚ+VX­ÖÕ«W«<°ß Àp!À€Ò|tÕ®Zµ*555777<<<<<<777%%¥»¬.\¸°¨¨h„ !!!ÉÉÉ6›íõ×_Wy`¿A€áB€¥ùèª-,,´X,îG,KAAד—.]ªÓé䟎7®‡×«Ñ3  (ÍGWmeeebb¢û‘„„„ªªª¾ÜvçÎãÇWf.ÿG€á·#”(zïGDD„û‘ÈÈȆ††^oØÐЛ›»jÕ*ÅFós.| 4¿ZµgΜy衇V®\9qâľœoµZuÞ(=§/#Àpá%h@i>ºjÃÃÃ;]ïž={¶Ó5q'ßÿý½÷ÞûÒK/Mš4©bµZÞô ”棫6>>¾¼¼ÜýHEEE\\\wçŸ>}zêÔ©Ë–-ËÈÈP~:F€áB€¥ùèªÍÌÌ´ÙlîGl6[VV–דëëë§L™òú믧§§«2?#Àp!À€Ò|tÕΞ=»¤¤dÉ’%‡Ãápäååíß¿?;;[>Áý3µS¦LY´hÑ}÷Ý'bRC€áB€¥ùèª +...--5F£±¬¬¬¨¨(44ÔëÉß|óÍôéÓ;½‘êÇTyfÿ@€áB€¥ùè—!I’³uëÖî>êþV)¿mj``¸ðuÀ€ÒXµð@€á¢×ë%Iúé§ŸDø-V-<`ÈxP«0dP«0dP«0dP«0dP«0dP«0dP«0dü_€¢Xµð@€!ºj›ššÒÓÓM&“Ýn·Ûí&“)##£¹¹¹»óŸx≑#GîÛ·OÍ!ýdŠòѯ^µjUjjjnn®ë§¹¹¹‡Z½zuNNŽ×ó+++UœÎŸ`@F€¡(]µ………‹ÅýˆÅb)((5v`@F€¡(]µ•••‰‰‰îGªªªDÍ£`(ÊGW­Ãለˆp?ÙÐÐ jí À€ŒCQš^µV«Uçè¹D"À€ŒCQ>ºjÃÃÃ;]ïž={¶Ó5ñ•³Z­NoöQ®.`(ÊGWm|||yy¹û‘ŠŠŠ¸¸8QóhdŠòÑU›™™i³ÙÜØl¶¬¬,QóhdŠòÑU;{öì’’’%K–8‡Ã‘——·ÿþììlù¦V9 4¨µµUôð[>ºjÊ‹‹KKKF£Ñh,+++** íî|÷÷Oñ^ª+A€WÀP”þOX’$ÅÄÄlݺµ»vz«”Æß95€0 #ÀP«0 #ÀP«0 #ÀP«0 #ÀP«0 #ÀP«0 #ÀP«0 #ÀP«0 #ÀP«0 #ÀP«0 #ÀP«0 #ÀP«0 #ÀP«0 #ÀP”ï~3A€Ypppkk«–¿µZ```ss³^¯=ˆ"Àð@€™N§ëèè=…H111§N3fŒèAü«0YLLÌwß}'z ¿Åª… @F€Ū… @c·ÛEOá·Xµð@€ÈŒF#WÀÊaÕ ã%hE±já`E±já]ýõuuuííí¢ñO¬Zx ÀdÑÑѧN=ˆbÕÂàŽW¡•ê… ÀV«0w|)°rXµð@€¸ãK•ê… À/A+‡U €;¬¾!<`î®»îºï¿ÿ^›ß9((Èáp(wÿ0wz½^³ÿÇwÜñå—_*wÿ¬Zx Ààrçw~öÙgÊÝ?«0¸¤¥¥`¨‡€Ë„ ÊÊÊ”»V-<`p2dH\\œr÷Ϫ… ²;ï¼S¹;gÕÂYZZšrwΪ… ²‰'*wç¬Zx À :t¨rwî'«¶ººÚl6 ƒÁ`6›kjjDOtµ"À XµMMMééé&“Én·Ûív“É”‘‘ÑÜÜ,z®«uèœN§è®T~~þÖ®]+™1cFJJJNNNÿîP§ó‡§¥ìp8‚ƒƒE>A¹"øÃµNaa¡Åbq?b±X DÍsUã Ôá«¶²²211ÑýHBBBUU•¨y®jÔ᯵]¸pA¯×ËGÚÛÛ‡ ÒÚÚÚ¿;ÔòKÐííí4\,‚óê§×ëÛÚÚÜ´µµõz×_~Y‘çàGŠ—?\êEEEUTTDEEÉGêêê’’’jkkûw‡Â¯€€|a`_˜Áð‡WãããËËËÝTTT(ú?hp…ü!À™™™6›ÍýˆÍfËÊÊ5½ò‡Ïž=»¤¤dÉ’%‡Ãápäååíß¿?;;»ßwÈç†yx$žžI’x”|Ä‚a@|÷Ýw ,(**’$)##cùòåF£QôPý'üsÂñ H< <<’$ùõ“à·¿°«šÿë#ž‰'g€g@’$¿~¬V«èàÅ]wÝ%zÁx$žžžI’ü÷IðÛYàËüáMX\u0` À@€€ @ €0` À>¤ººÚl6 ƒÁ`6›kjjDO$À×_ýôÓO6L§Ó‰žE€={öL›6mĈC‡MMMݶm›è‰ÔæúfÞcÆŒ =zôäÉ“?þøcÑC‰TWW«Á¿º.DO4ð°¯hjjJOO7™Lv»Ýn·›L¦ŒŒŒææfÑs©í‰'ž9rä¾}ûD"FZZÚ?ü°mÛ¶ÚÚÚ+VX­ÖÕ«W‹JU999III»víjjjúöÛo_xá…W_}U³ßÞétΜ9ó•W^=ˆNO¢Çx|7$_‘ŸŸàÀµk×ÊGf̘‘’’’““#p*üø›€öàùçŸÿÃþ ÿc¿¢¢âá‡>vì˜Ø©Ä:~üø­·Þêp8D"À²eË @ô,zœG€}…Ãለˆp?ÙÐÐ j×ÐЛ›»|ùrуàzÓͰaÃÒÒÒ¬V«è‰ÔöÜsÏ=òÈ#©©©¢&++kóæÍ¥¥¥ÉÉÉiii=ÔóÿÙ¯AAA.\Ðëõò‘ööö!C†´¶¶ œJ -|¨gΜyôÑG­Vë¤I“DÏ"L}}}QQÑÂ… çÎûÒK/‰G=úÓŸvïÞ-¿ö®ñ¿’$­\¹²  `×®]¢HZÿMõQQQQQQò‘ººº¤¤¤ÚÚZS ¤åóý÷ßßÿýúÓŸ222DÏ"ÞîÝ»gΜY]]-zõŒ7®¨¨Èh4ÊG´ü×ÁåÌ™3cÇŽmjj=È@â%h__^^î~¤¢¢"..NÔ<åôéÓS§N]¶lõu¹õÖ[ëëëEO¡ªãÇÇÄÄtúXýZØ>òË`_‘™™i³ÙÜØl¶¬¬,Qó@ˆúúú)S¦¼þúëééé¢gñ%%%?ûÙÏDO¡*gòAÑ£ ³iÓ¦ &ˆžb uý†çÏŸ3fL^^^CCCCC믾êz½Eô\ÂhógRRÒúõëEO!Ò=÷ܳmÛ¶3gδµµ:uê½÷Þ»öÚkÿö·¿‰žK0­ýuHOOß¼ysmmm[[Û‰'òòò†~àÀÑs 0­^Á§|÷Ýw ,(**’$)##cùòåîŸÒ¯/²içO©×_¾Ãá6l˜úñ{÷î7ß|ó³Ï>;wî܈#n¿ýöçŸþ¶Ûn=—`Zûpqqñ›o¾¹gÏžsçÎEEE¥§§çææÞtÓM¢ç`ÚúMÀGð9` À@€€ @ €0` À@€€ @ €0`t:èM À@€€èIIIIttô;ï¼#zÀߊ€ïÚ¾}ûþçnÚ´éÎ;ï= ào0ï>øàƒ+VìÙ³Çh4ŠžðC€K—.---ýì³ÏBCCEÏø'Óé=¢ÓéÚÚÚF]QQ1jÔ(Ñã~‹7aèL¯×ÿá¸óÎ;>,zÀoq ÀƒN÷kaûöíóæÍ[¿~ýwÜ!z(Àq À»ÌÌÌ7N›6mË–-¢güoÂЭÛo¿ý“O>™:uê©S§ž}öYÑã~…— €— € @ €0ü?r§«ã‡‚ IEND®B`‚gsl/doc/images/rand-laplace.png0000644000175000017500000005370313536674414015005 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìÝw@wã?ðDÙ‚µ2”!œ€ jÑ¢2WÕª¥Š~m«8ªV­‹ªT­•â,E+ÃÅDY 2dÏüþÈóË“b’Ü‘¼_ÉåîsoBäÍÝ}r¡2 ×¢ˆ#0PÀ@ @0PÀ@ @0PÀ@ @0PÀ@ @0PÀ@ @0pC¥RûŘ]íˆiРAêêê“&MÚµkWII‰€Â°†âï7( §«¸¸XFFÆÇLJÂöD}N»î÷ýö:UW’ê{^¾Ö:Ë–-“‘‘éôß ¢ŒÁ`0Œ†††ììì}ûöÕÖÖZXXܸq£Gƒów±ÐöµsçΑ#GžzôÈØØ¸/ãðq}~mË»òòòáÇ߻woÚ´i„è‹^'ìjCòË=Ò»o‡}«ˆˆˆùóç¿{÷NEE…ßéà_p ½÷öíÛõë×+((èèèøùù5551—S©Ô†††o¾ùFUUUNNÎÅÅ…N§÷h …RXX¸téR Aƒ™™™]»võÐãÇmmm¥¥¥µµµÿøãe677ÿî»ïŽ9ŠÊüGmm­ŸŸŸ¾¾¾¬¬¬’’ÒÔ©Sÿúë/Ö NKR©ÔÆÆÆ 6¨««s<óÌåÛçx€ÂÚ Ç}±V»wïžœœœœœœ]xx8ûííí{÷îÕÖÖ4hÁo¿ýÖÕ“lkkûyûvB£ÑFžäãÇ#FŒhmme_8jÔ¨ÌÌLîñ>×ÕÞé[ÎÌÌtqq‘““SUU]»vmCCû \^ Ü7ä»»ûÖ­[Ù—øùù-X°€•ûK½/?²®¾;.vûâò?ŽÅÅÅÅÂÂâÏ?ÿìù³=ÄñÜ ÷Wˆ––Öùóçkkkß¼yóõ×_oÛ¶µÕâÅ‹;VZZZZZzìØ1uuõ¼¼¼ÏÇìj„ÂÂBMMÍ]»våçç755ÅÅÅÍ›7ùÐË—/UUUƒƒƒkjjuttbbbz>++KWW·Ó:óçÏÿî»ï ZZZ>~üÈ<:ìj …âããÃÌðùîxÿö9nÛÕCñññ***W¯^ýðáÃû÷ï/_¾¬¬¬üüùsÖj«W¯Þ¾}ûëׯëêê=z4räÈŽÏÀܹsOž<Éñ¡N¬¬¬=zÄúòĉòòò·nÝb-‰‰‰±··ï6ÞçxyÂsssÕÕÕYÏä‘#G/^Ìz”Ë+û†Ü¿åN***†žššÊüòÅ‹C‡-++cmËågÝ——ïŽû†\^B ®ÿgÙ79qâÄW_}Ååi¾@7¼ÿ‰VYY9räHÖV»wïft×®]^^^ÜÇdaÙ²eÛ·o縚——×áÇY_Þ½{wæÌ™= ߨØ(##Óiyyyö6å>…B9räHW«õâÛ祀ç͛ש5X¿%)ÊO?ýÄþhxxøØ±c9~G#FŒÈÊÊâøP§§Nòðð`}iiiyéÒ%Ö’%K–\¸p¡ÛxŸãå ÷ôôìôLîØ±ƒõ(—W÷ ?ß÷ƒ“°°0kkë¶¶¶¶¶6++«Ë—/³oËågÝ——ïŽû†Ü ˜]§ÿ³ìÑétmmmŽ[¡€.ÜØØ¸k×®Q£FÉÈÈ0aIHH°¶b0åææjhht“˯^½â¸_]]]ö‡*++¿øâ‹…¯¯¯—••í´Ž­­íªU«JJJx‡B¡¼yó¦«Õxüö»Ú¶«‡FŒQTTÄþPaa¡––VW;­¬¬TVVþ|_ CFFæÓ§Oê ªªJYYùãÇ #==ÝÔÔ”Á`˜››3“|üøQ]]½¡¡¡ÛxŸãå g?šdÊÍÍe=Êå•À}Cîß2GË–-;|øð¡C‡fÍšÕi[.?ë¾üȸ|wÜ7äòâþ–}“ššÖÿ0pÃåwÓþóŸéÓ§¿xñ¢®®ŽÁ`466²·Hcc#ûÊ ì4&—Èüµþ9))©NG* èQx:®§§×iüüüyóæIKK=zÙ²ewïÞíèèèj …ÒÒÒÒÕîxüöYÚÛÛy)àAƒ555±?ÔÔÔ4hÐ Öjííí]mÛ ïÌ`0<<<Ž;Æ`0|}}:Ä`0<èïïÏ`0Ž;¶~ýzãu:²äå —øü™d=Êå•À}Ãn¿åÏ•••>¼Óß…ÜÖ}ù‘qùî¸oÈå%Äýÿ,û&(`á@7\~7ijj³¾dÎ=amÅË! —† ÖÕ°ªªê»wïúþçŸ^¹r%ÇušššÒÒÒ~ÿýw›åË—w5N·G±\¾ýÁƒWUUuz´wGÀEEEì‡S\"u¢¥¥Åã)hƒmllÜÚÚª¡¡ñöí[ƒQRR¢­­ÝÞÞnbb’žžÎK¼®p¹Èry%ðýxÆ ·oß>sæÌ† :mÛ£#`Þd\¾»^ŸDáþ–}œ‚Ì‚†^jll”––f}yáÂöGƒƒƒ;}9eÊÞG˜1cÆÅ‹9î×ÑÑ144´·©)4íØ±c¾¾¾eθ^½zuDDkÞµ´´tKKKöÂåÛ700ˆgôüùó¬sÙ—¥¥å½{÷Ø—„……YZZö(“……ELL +Ož<¹±±ñ§Ÿ~266ÖÔÔ¤P(_|ñ…®®®¿¿¿¼¼ü˜1cúãÎ2uêÔNÏä•+WXÿæòJà¾aOEFFæååÍŸ?åÊ•iii‘‘‘ìrùY÷åGÖë×9——÷ÿ³ì¢¢¢,,,z±wè¢ÿRãò Y²d‰‡‡Giiéû÷ï:Ä|ck«%K–œ8q¢¬¬¬¬¬ìĉêêê¯_¿î4&—X³ ß¼yÓÔÔÏš™™©¡¡qñâÅŠŠŠºººÈÈÈn'aµµµUVV>{ölóæÍjjj7oÞü| &\¾|¹¸¸¸µµµ´´tûöí¬©FÆÆÆwîÜikkãþ´ðøíÿùçŸzzzOž<©¯¯ÏÍÍݶmÛêÕ«YÛrÙWll¬²²2sJ퇮^½ª¢¢’˜˜ÈK¤N&NœÈýIc·gÏ*•zéÒ%Ö’‹/R©Ôóçϳ–p÷9.O8+ÃëׯÕÕÕYÏäñãÇ—,YÂz”Ë+û†<>KL•••ººº¹¹¹Ì/étºŽŽNee%k[.?ë¾üȸ|wÜ7äòâþ–}4‡€€.O ð ¸áòGÛÇ=<ƒÁÐ××—””üòË/wíÚÕÖÖÆÚ–û¾îܹccc######cccúùÞ9Fꤢ¢BJJŠãóÆq“ââb…ÚÚZÖ’ÚÚZ úúzöÕ¸Äû—'œ=F›6mš¬¬¬ŠŠÊªU«êëëÙåòJà¾a§o™Ëë|Ñ¢E;vì`_ÿ‡~X´hk[î?ë¾üȺúî¸oÈå%Äýÿ,k¨û÷ï4¨¢¢‚ãÓ|$R·€’±[ ‰¤+V$&&&%%±&ÄB/ˆÞK½¡¡ÁÆÆÆÎή§·¸^µWèýV=ÅÅÅ‹/f¿ =%z/uŸW¯^}ùå—Dg}¢öê2½ßJá¥}Wð6$ €€ €(` €€ €(` €€ €(` €€ €(` €€ À@¢‘²²ruu5Ñ)€ † †¥ hÜ~JÅÓŠ § € €(` €€ €(` €€€xñâźuëL¥R‰ÎÒ¿¡€ ¼¼¼†Kt~7=æ÷‚è–˜üªÄ½ €Þ¾}»~ýz??¿¦¦&¢‰/0€7nœ••UiiiLLLaaá®]»ˆN$¾ÄâBO‰ÉysUUUÖÖÖyyyÌ/¹Oªúü·¢˜üªÄ)h諦¦¦Ý»w=ZVV–J¥ª¨¨²epÕÇ]ûûûS‰ãïïßÇü‚ ¿ô”˜üYâfÓ¦M/_¾Ü¿¿œœ\SS“ŒŒL¯݉ɯJÁ}›1(Ð7‡Îü2??ŸýÑžž‚†>Bˆ‹ÆÆFiiiÖ—.\`+d¸ .\\\6mÚTVVöáÇÇH¬¡€ÄE@@…B1665jTVVV§#`±f6uú7ô”X\Bï)1™YÝ\#à€(`·€‹ŠŠÜÜÜÝÜÜŠ‹‹¹¬üùÛ®…– HZÀuuuNNN–––………………–––ÎÎÎ \6áïM[Ф³Ž=š’’råÊÖOOO[[Û7r\Ÿ¿É1 ˜ÄnÖ½{÷¼½½Ù—x{{‡††•€¿HZÀt:ÝÌÌŒ}‰©©iVV—M† &))©¡¡áááñòåKGOž87nœ••UiiiLLLaaaWgyabb¯l↤<{öì   ö%AAA®®®|øpøðá^üpg̘±}ûö™3g ØA@gìGÀ(`Q@¡PŒG•••Õ阩©©‹/î4AºººZaEæV@gcÆŒ¡P(ZZZ±±±DǾQQQaÿ”9JÏù1|„#`ø—ÚÚÚŠŠ  …¢¥¥…kÀ‚€ÉÌÌ4220`§   ÿ’™™É<ÿL¡PFŒñöíÛöövb#ˆ$0üKff¦±±1óßRRRªªªïÞ½#6€HBÀ¿°Sp@`PÀð/¬÷ 192??ŸÀ<¢  ÿSQQÑÚÚª¡¡ÁZbhh˜••E`$Q…€ÿétøK¡PŒét:QyD þ‡N§³f`1¡€ ÿóy9òÇõõõDEU(`øŸÏ xÀ€ÙÙÙDEU(`øŸ¬¬¬N×€)8 (`ø¯²²2 …¢¦¦Öi9 @PÀð_t:ýóÃ_ @0PÀð_Ÿ_fB þ««ÖÖÖþøñã§OŸ„ @„¡€à¿h4š©©éçË `dd”‘‘!üH"   …ÒÑÑÑÕ0…B155MOOr$ц …BÉËËSUUšÉÌÌ,--M‘Ä @Üåå婨¨(++w»&.ð @ÜÑh´nÏ?3™››£€ø îx/`æ[;:: @ €Ä/3°˜¬ªªšŸŸ/èHâ îh4Z·ïAbÁ<,~Aˆµªªªêêj×Ç<,~Aˆµ´´4SSS*•Êãú˜‡À/(`±Ö£óÏœ‚à0€Xã} 4“ŽŽÎ§OŸ*** @L €ÄïS ™¨Tª©©)>  ïPÀ⫵µõÕ«WÆÆÆ=Ú g¡ø ¾²³³µµµeee{´&Bð @|õôü3&Bð @|õt“‰‰É«W¯ZZZ @| €ÄWï XZZZGG';;[‘Ä @L1ŒÔÔÔ½ ˜ÅÜÜüÅ‹| VPÀbêÍ›7²²²Ã† ëŶVVV)))| VPÀb*%%ÅÊʪwÛ¢€ú ¦úRÀ–––™™™mmmü VÈ[ÀEEEnnnŠŠŠŠŠŠnnnÅÅżlUVV¦¯¯ÏûåÄV_ X^^þ‹/¾À<,€¾ i×ÕÕ999YZZZZZ:;;744pߊÁ`,]ºt÷îÝ Ð1g`YZZözœ…è#’ðÙ³gíìì~øáeeeeeå~øÁÖÖöܹsÜ·:zô¨ººúâÅ‹… ÿ*((––îÝ ,&+++L„è ’ð½{÷¼½½Ù—x{{‡††rÙ$--íìÙ³'Ožp4QðâÅ‹^Ÿf²´´Ä0@_´€étz§û˜ššfeeuµ~cc£··÷… Ÿ ß{ñâE_Î?S( ‹ôôôööv~E7$-પ*ö%C† ©¬¬ìj}__ß… ÚÙÙ >€(HNN¶±±éËJJJ˜‡Ð$-à ¥ÓéÛ·oïé†þþþTN€< FJJеµuDZ±±INNæK$1DÒVVVît¼ûñãÇNÇÄ,ßÿýåË—%$$zº'½ ÐOäççËÉÉ :´ãX[[£€z¤lllÜéóÎÒÓÓŒŒ8®œ——§­­ÝéDz]éûùg&kk뤤¤¾ žHZÀ³gÏ b_äêêÊqeއ°8–èJrrr§@3YXXdffâs z‡¤¼jÕª¸¸¸}ûöUUUUUUýüóÏ +W®d­€£[€^ã×°¬¬¬®®nfff߇C$-`…èè褤$-----­ää䨨(999¢sô{}¼;ÌÃèµDè’¶¶ö;wºz”ûéeœ|èJNNŽššZWS{Š9kõêÕ| @¬ô¤/ŸÁð9ÌÃè50€xyþü¹­­-¿F333{ýúucc#¿(`ñ¯XLRRR†††iiiü@| €ÄH[[[FF†¹¹9ÇÄ<,€ÞAˆ‘ÌÌL---þ~f .ô @Œ$%%ññü3“  PÀb„¿€™ŒŒŒÞ¾}[SSÃßaD @Œ$%%õýC:‘033KMMåï°" ._½zejjÊ÷‘­­­Ÿ?Î÷aD @\¤¤¤KKKó}ä±cÇ&&&ò}Xц vvv‚ÙÎÎ.>>^#ˆ00€¸HLL;v¬ Ff~ wQQ‘ U(`q!¸#` …bkk›  ÁD @,¼{÷®¥¥eäÈ‘—z  âââwøK¡Pìììp Ð#(`± ¸ ÀL6664­¹¹Yp»1(`± Ж““Ó××§Ñh‚Û€ˆAˆ¾ÖÖV&ЦP(öööqqqÝ€(Aˆ¾””===yyyîÅÞÞïà @ôÅÅÅ988z/Ïž=ô^D @ôÅÇÇÛÛÛ z/ºººÅÅłހh@ˆ¾„„!Sp 'PÀ"®°°°µµUGGGûÂe`Þ¡€D\\\ܸqㄳ/ð â„p˜ÉÚÚ:++«¡¡A8»è×PÀ"îÙ³gB;–––3fLRR’pvЯ¡€DY}}}NNŽ¥¥¥Ðö8nÜ¸ØØX¡í ÿBˆ²ÄÄDssóAƒ m˜‡À 0€(æ ,&æpGG‡0w С€DY\\œÐf`1©««+++çääs§ý @d1ŒÄÄD~ 0Gx3@·PÀ"+++KEEeذaBÞï¸qãPÀÝBˆ¬'OžLœ8Qøû?~üÓ§O…¿_€þ ²ž>}:aÂáï×ØØ¸ººúÝ»wÂß5@?‚YÏž=›4i’ð÷K¥RLJƒ`îPÀ¢)//Á`ç3>7qâD0w(`ÑôäÉB™&Nœøøñc¢öÐ/ €DÓ“'O¹ÌdnnþöíÛŠŠ ¢ @45šIBBÂÞÞþÙ³gD ?0€*..®««=z4&L˜€³Ð\ €DPLLÌäÉ“©T*&OžüèÑ# @=~ü˜ÀXLÖÖÖoÞ¼ùøñ#±1H  ‚=z4yòdb3 8ÐÞÞoFè @Ô0/„2iÒ$\è @Ôá0.p5d¸Ìļ \YYIt2BˆšG9::‚Bùÿ—ŸiÒ¤«W¯jjj®\¹²¤¤D±fÏžľ$((ÈÕÕ•ÇÍãââÈs3z!xðàÁôéÓ‰NÁÍ”)SžéèèüüóÏ••••••{÷îÕÕÕ­««c­Àž|Ú´iwïÞ}ÿþ}KKKIIÉùóç¿øâ‹¿ÿþ»×{çò´“……Ell,Ñ)ºaggMt €ž\#tyìîîžœœ}úôìÙ³™K"##׬Yãáá±k×.Á'$®C±~ýz--­-[¶¤444Š‹‹‰ÎÐ="¯¤¥¥±Ú—B¡L™2%))éÕ«W‚¼ Ÿ5kÑ)zFVVÖÁÁoFÀ¡8†~!##cîܹùùùDé±ß~ûíÅ‹çÏŸ':@÷p',è쯿þš3gÑ)zÃÕÕ5<<¼££ƒè Dê²€}||¸oÜÐÐàããÃïHÀ“þxþ™iĈC‡MJJ":‘º,à›ÈÈÈ®Vxøð¡MHHˆ`‚7•••™™™“&M":H/Íž=;<<œèDê²€_½z5vìØY³fMš4éôéÓ/_¾¬­­­­­ÍÎÎ>uêÔ„ æÌ™cgg‡©X„øûï¿ Dt^š5kÖ_ýEt "usm¹¼¼<888&&&55µ¼¼œB¡ :ÔÒÒÒÙÙyÑ¢EC† VN¡Â$, ¿… Κ5kÙ²eD饎ŽMMÍ„„mmm¢³p#¸F@Óp€’knn6lØ«W¯ÔÔÔˆÎÒ{>>>VVVëׯ':7˜ ÿ3f̘~ݾ ÅÕÕ5,,Œè„á©€sss½½½555%%%555½½½ûã[DFXX˜««+Ñ)újúôéÏŸ?¯®®&:1º/àŒŒŒñãÇëëë?}úôÓ§OOŸ>ÕÓÓspp ÓéBÈ0Œ{÷î‰@ËÊÊN˜0Ìb«ûSÛ3f̘5kÖ† Ø?~üþýû‚ÌF\2KIIñôôÌÎÎ&:œ;w.&&æêÕ«Dè‘“°äääòóóÕÕÕÙ–••éêêÖ×× "áPÀ@f;wîlnn>pàÑAøàýû÷†††ïß¿—””$: gDNÂêê†222üÝ óÏLêêê£Fzúô)ÑAÐ}õÕWׯ_ï´ðÚµknnn‚‰]****--;v,ÑAøs¡Alud]__¿zõjCCÃ%K–hjj¾{÷îêÕ«ÙÙÙçΓ••NJ!Ã)h ­€€vîÜ9¢ƒð NŸ5kVAAÑA8#ò0•Jív«+0ÖÔ©S¿ýöÛyóæ„Ÿôôônß¾mjjJtˆ¼Ìà ’@'?~|þüùÔ©S‰ÂgóæÍ»uëÑ)„ wÂè7îÞ½;}út999¢ƒð™››ÛÍ›7‰N l(`€~ãÖ­["9ùÑÎή®®N4ÞÙ À;0@ÿP]];sæLaî´µµ5&&FÐ{¡R©óçÏÇA0ˆ0@ÿêä䤠  ÌÖ××/Z´H÷ussÃe`7(`€þáÖ­[ ,ô^:::Ø¿q€;a©TTTèéé½}ûVpïþøñ£©©éõë×Ç' ]ðbóæÍrrr»ví"0@'DÞ ˆuçÎ3fôþT*õàÁƒÄ¶/…BqwwÇe`(`² Y´h‘@w¡¢¢âáá!Ð]ðÂÆÆ¦­­F£@PÀ¤V^^žšš:}út¢ƒÉ‚ 0 Ä €Ô®_¿>{öl¢ƒ s.4&a€8@Úµk×ÜÝ݉Nñ/ ãèÑ£‚ÜÜÜ|РA)))‚€TPÀäURR’M¶Ï¤R©)))~~~áÂ…!!!€FbñòòúóÏ?ÛÛÛ18y €ÈëêÕ«šœ¼mÛ¶;wözs%%¥Ë—/¯Zµª¬¬Œ©˜ôôô†Í÷‘H @R4íÓ§O‚xoîßÿ}÷îÝ#GŽôeqãÆ}ûí·=âS¨ñôô¼råŠ F Üò‰Ü È`Ë–-222»wïæï°¥¥¥VVV7nÜ ü¶\”——ËËËÄî„ ^ÚÚÚtþyÛ¶mk×®%sûR(55µñãÇß¹s‡è „C=p „ ß·o_ll,ßG®©©‘———àûÈüuóæÍÓ§OGEEÄŽ€ÄËÅ‹—.]*ˆ‘•””Èß¾ ÅÕÕ5###??Ÿè ‚‚ ÊÊÊÈÈȯ¿þšè D’’’rwwÇT,a(`Ò ž9sæàÁƒ‰Òc |mÙ²e—.]Âõ U(`Ò¹téÒ²eˈNÑcÙÙÙfffUUUüÐÊÊJ^^þéÓ§ü€TPÀäB§ÓKKKœœˆÒc†††sæÌñññáã1«——×¥K—ø5©·€‹ŠŠÜÜÜÝÜÜŠ‹‹»ZóÉ“'îîîjjjJJJvvvwïÞfNþbN¿â×<©ÒÒÒyóæµµµñe´nýòË/ïß¿ïã->Øyyyݾ}»®®Ž_I ¸®®ÎÉÉÉÒÒ²°°°°°ÐÒÒÒÙÙ¹«ËK“&M*//¿{÷niii@@€¿¿ÿ¹sç„€/˜oÿõòòâËhíííVVVäˀݒ””¼víÚ¡C‡222ø2 ººú¸qãð†`M R:r䈇‡ûãÇs\yóæÍ¬/i4š®®n_öNÚ§DÞ½{÷ìííù5šŸŸß´iÓÚÛÛù5 rrrø¸Ó7nLž<™_£ô”à¤GÀ÷îÝóööf_âííÊqåC‡Q©TÖ—zzz\ÎWY``àêÕ«ù2Ô;w®_¿~õêÕ„ýßÜÀÀ€;;wî«W¯²²²ø5 I´€étº™™ûSSSÿFDD˜˜˜&€'$$ðëí¿Ã‡¿{÷®ªª*_F#¤¤¤··÷üAt>#é=¥¤¤êëë%%%YKZ[[ååå›››¹oXYYéààpöìÙ &ôzï¸%bÇŽÕÕÕ'Nœ :é¼yófìØ±EEEÒÒÒDg±ƒ[Qòäýû÷óçÏ?}ú4íëïïOåDÐ9>×ÖÖvþüy~1:::–––·nÝ":?‘´€•••+++Ù—|üøQEE…Ë&oß¾>}úŽ;yÜ‹¿¿W—Ü„,,,LWWWOº²víÚÓ§O€ŸHZÀÆÆÆ4}Izzº‘‘QWë¿{÷ÎÅÅåÈ‘#ÎÎ΂OÀ§OŸ^»v-Ñ)"??îܹÝ^?ânöìÙ%%%©©©üJ@8’ðìÙ³ƒ‚‚Ø—¹ººr\ùÇ3fÌ8pà@¼y…BÉÍÍMOOŸ?>ÑABGGGJJjÍš5}DBBbÅŠgΜáW*‘t¶Qmm­™™ÙÊ•+™Ç§NºpáF“““c®À~UÜÒÒÒÏÏoÑ¢EüÚ;&aùúúJKKïÛ·¯×#”””üþûï{öìác*>jhh˜8q¢»»û–-[z=Hii©‰‰É›7où˜ €;±›„¥  ””¤¥¥¥¥¥•œœÅjßNRSS/^Üi"Uuuµ3ôN}}ýåË—¿ùæ›^PWW7gÎ2z’¬¬lhhh@@@xxx¯ÑÐИ:u*n "‡zà„)00ðáǽžâÛÞÞ>oÞFccã¾´/…B?~¼’’Ò?ÿüïHB)::šÁ`Lž<¹×#]¿~]h·@¸uëÖýöÛoD§àœkå§ AhæÍ›çââÒ— À⦩©IKKëÙ³gúúúDg± ¸F@Óp€á(((°±±)((èj‚!pôÃ?ÔÕÕ?~œè PÀB…áøþûïøË/¿„0ííí=ÝêÝ»wcÆŒÉÏÏWRRD*v˜„ jêëë/]º$ªw¿â‘‡‡G§[îðBSSsÊ”)x?ôw8ÔãGÀ ?¾yó&ÑAˆ”íèèÜÓÛØÅÇÇ{zz¾zõªÐ=‚#`‘ÒÞÞ~üøñï¿ÿ¾G[utt,_¾<..N@©„ÏÐÐðÚµk‹/ÎÈÈèцööö·oßP0!@àæÍ›šššööö=Úê?ÿùÏ›7o,--”Š“&M:qâ„››[kkk6ܼyóÁƒ” @p®•œ‚A³µµÝ¾}û¼yóxßdçÎýõWLLŒHÞ ùýû÷êêê=Ú¤££ÃÐÐðìÙ³'NP* NAˆ’èèèÚÚÚ®>Ý‹£àààëׯGDDˆdûR(”ž¶/…B0`ÀæÍ›8 ˆ<B€C=p 5eÊ//¯¥K—ò¾I}}ý§OŸ444—ª?jnnÖÕÕ ±Óò@*x°P¡€Ap’’’ÜÜÜrss¥¤¤ˆÎ" ~ýõפ¤¤¢ƒ€ÈB  ÇÍÍmòäÉ}ùô`WWW7räȸ¸8===¢³€hÂ5`Q¿bÅ ¢ƒôýõW{{{·«ÉËËûí·˜ ýõ8À0ˆ———‰‰ÉÖ­[‰Bvííí3gÎTUU êöV•••úúú©©©#FŒN<+8-T(`„üü|;;»ÜÜÜng2ÇÇÇôñ£sû»ÆÆÆ¹s窩©ñÒÁ~~~---ÇŽN6+8 ÐïýüóÏk×®í¶}cccçÍ›—““#œT¤%##Z^^¾råÊŽŽî+ûúú^¹r¥´´T8Ùø yyyaaa›6mâ¾ZbbâW_}uåÊá#3™»wïšššv»æ°aÖ-[†÷Cÿ‚s­à4ðÝÒ¥Kõôô~úé'.ë$&&ººº^¸paæÌ™B &2*** SSS‡Nt)¸,T(`௜œœ‰'¾~ýšûù縸¸šš¡1Û¶mûôéÓ©S§ˆ",T(`à¯E‹YZZúùùDÄUUU=:>>~äÈ‘DgÑ*0ðQFFÆŒ3^¿~-++KtÑ·{÷îüüü‹/D X¨PÀÀG³gÏvqqùöÛo‰":rss5559þAS[[k``edd$ü` ’ð6$€~)...++kÕªUD)3f̨©©ùü!…-[¶pŸì@(`úñÇwîÜÉñsbcc…ŸG4:tÈÂÂÂÉÉ©¼¼üóG×­[—”””˜˜(ü`=‚”þù§¬¬ÌÓÓóó‡vïÞ½|ùrŽÇpÐ-*•züøñ™3gNš4©¤¤¤Ó£ÒÒÒÌ¿{ÉÀ;0€@tttlÛ¶mïÞ½n£ØÞÞ¾víÚ»wï>yòDII‰¨x"`Ïž=ëׯçx“,ŸüüüÈÈHá§àfq€IXÐw/^{ö¬Ó§™…‡‡3ç¨?zôÈÈȈè8@v8 ‘ÈÈH+++##£ššš‹/¢}û—Y³f9::ºººŽ=šè, ÖPÀ=óéÓ§M›6]¾|9--íÇÔ××':ôØÉ“'#""ž>}Jtk(`€žQTTLOOONN–X¿~=Ñq 7TUUW¬XQWWGt_¸ØÉ®w4mÚ´iÏŸ?Çgök+W®¤R©gÏž%:®Ess³··÷‘#GоýÝñãÇ?~Ì~kލ¨¨Ç Ä €›Ïÿòݶm›¡¡¡‡‡!y€äää.]º´qãÆ²²2惱dÉ’ÿû¿ÿkii!6ˆ0g­­­?ýôÓ7ß|þðáÇ·nÝ:uêQ©€¿ìííW¯^½téRæ_ZÌ{ªdeeÙÛÛgeeDy ¸¨¨ÈÍÍMQQQQQÑÍÍ­¸¸˜ËÊ/^¼X·nÝàÁƒñ†à‹ôôt;;;¶{÷nÖÂòòòåË—_ºtIEE…ÀlÀ_?þøcmmí‰'˜_ª©©…††®]»öÀÄ‘GÒ®««srr²´´,,,,,,´´´tvvnhhèj}//¯¡C‡ÆÆÆ 3$ˆª£GN:uýúõaaaÆ c.ìèèðôôôöövtt$6ð×À¯^½ºÿþçÏŸ³®\¹2((ˆÀT H:Ý÷èÑ£)))W®\a-ñôô´µµÝ¸q#÷ ù2] ³ ÅÜ“'Oôôô455ÙîÞ½;&&&22RBB‚¨` 8¡¡¡›6mJIIÁé èDìfAß»wÏÛÛ›}‰··whh(Qy@¬Lœ8±SûþóÏ?gΜùóÏ?Ѿ¢jîܹ ,ðôôìèè : ˆ ’0N733c_bjjŠ9@ˆ¢¢¢eË–³NGƒHÚ¿CCÞ={¸¬C£Ñš››… DI ¸ªªªÓ‰ !C†TVV•ÄVSSÓ‚ 6oÞtèвeË|||***„D Ig©««§§§«««³–”••YXX”––rß“°€ùùùëÖ­+++ ´³³ëjµ“'Ož9s&..NNNN˜ñ€X§OŸ Œ•——ç¸B]]ÝÎ;ëêê~ÿýw!gá»IXÆÆÆ4}Izz:>¹øâÔ©ScÇŽ:ujrr2—ö}øðáž={nݺ…ö7k×®uppøúë¯ÛÛÛ9® //ÿ믿 9ˆ’ðìÙ³;½ /((ÈÕÕ•¨< J,,,RRR¾ÿþûvµNNNŽ——×7ôôô„™ HâĉMMMÛ·oç².WA‘ô\kmm­™™ÙÊ•+×®]K¡PN:uáÂÆ:éêœNACß}üøÑÞÞ~óæÍ«W¯&: ¦²²ÒÁÁaÓ¦MkÖ¬!: IìNA+((DGG'%%iiiiii%''GEEq9È> s© /šššæÍ›÷õ×_£}ÅœŠŠÊ½{÷víÚÉûV·nÝÂç)p¨ÇŽ€ECkkkee%ûT¾nutt,Y²dÀ€W¯^Åßp@¡Pž={¶`Á‚ÈÈH^Ö ûÏþciiùË/¿àú…h»#`€>ºsçΘ1cz´•ŸŸ_iié… оÀ4~üøãÇÏž=›ûçÁ°¸ººfggÛÚÚÚÛÛûúúâOyà‡zà¸_{ö왟Ÿ_SSÓ/¿ü2uêTÞ7üå—_®^½úøñceeeÁŃþèèÑ£gÏž}ò䉪ª*›TTTÜ¿ßÓÓS Á@×hPÀýW{{»‹‹‹··7óL2ïž={öÀOŸ>íth¦~øááÇQQQ Dg¡B  XÜܺukãÆÑÑÑ£F": —¯¯obbâ?ÿüƒ·†‹\”›7o®_¿þŸþAûw‡ÖÕÕ?~ccc¯inn~ðàSAÿ…†þª¦¦¦ïƒÜ¼ysÆ ÷ïß766îûh Ú páÂ55µ¹sçöºƒKJJ6oÞlggÇå#@L €¡ÿùðჟŸŸžž^·÷ç.44”Ù¾>û +AAAjjjnnn½û\B]]]öý÷ßoÙ²eüøñiii| ý ú“âââM›6644¤¥¥ihhôz¨ðððo¾ù&<<í ="!!qéÒ%99¹¯¿þº¥¥¥# 0`áÂ…ééék×®år?Ty˜mÄ&a‘VPPPzzú÷ßß—ê¥P(7nÜØ°aCXX˜­­-¿²Ximm]²dImmííÛ·eee‰Ž„YÐB…mçÎÛ¹sçýû÷ÇŒCtèÇÚÛÛW®\™››†÷Ž‹0Ì‚à}ûöíß¿ÿñãÇh_è# ‰óçÏÛÚÚNš4éÝ»w|ùúõëû÷ﯮ®æã˜@B(` –––+W®¼|ù’¿ÃvttlÚ´éúõëÏž=ÃMz/¨T꯿þêáá1~üøW¯^ñkXSSÓœœ===__ßüü|~ dƒùðáÃîÝ»µµµƒ‚‚úòVËÏ577{zz¦¦¦>~ü¸×:ÙºuëO?ý4yòäÄÄD¾ 8zôè‹/Òh4III;;;t°¨ÂÅNp ˜=úꫯ.\øŸÿüÇÈȈ#WTTÌŸ?ÿ‹/¾¸xñ¢´´4G`ùûï¿}||N:åææÆÇa››› ÄÇ¡§0 K¨PÀ„hlllhh2d‡¥Óé®®®‹-Ú»w/>ãŠF£Í™3gÕªU?þø#^l"}1Â`IDAT,T(`‘ñ×_-_¾üÈ‘#øPŽÒÒÒùóçkkk_¸pAFFFp;ºÿ~ssóìÙ³%$$· `4ˆŒÖÖÖ[·nñ}‚Õç ÆÁƒ×®]{ïÞ=´/††Æ£G¤¤¤&L˜PRR"¸1ŒC‡iiiíØ±£¨¨Hp;ÁAƒdggûùù1â·ß~ûôé“@÷õéÓ§ ܾ};!!aìØ±Ý@'ÒÒÒAAA‹-²µµŒŒÐ^\\\ž={öàÁƒššKKKLÔêp®•œ‚æ»ÐÐеk×z{{ûøøúC‡^¼xáîî>cÆŒ_ýUJJJ ûàâñãÇ+V¬Ø±c‡@Oc¢–@á°P¡€ù®¥¥eÀ€B¸ííÉ“'wïÞýÛo¿-\¸PÐûèÖû÷ï===ÛÚÚ‚ƒƒñþ·~ ×€¡“’’tûÖÔÔ,Z´è?þˆ‹‹CûI¨««?xðÀÑÑÑÚÚ:::ZÈ{?þ¼««ëµkׄ¼kà øãÝ»w‡266&äãÕ¢££ÍÌ̆ §««+ü]0`ÀŽ;.]º´téÒM›6ñ÷3ܹ»»/\¸ðâÅ‹_|ñÅÒ¥Ksrr„¶kà úêÞ½{NNNcÆŒyùòåï¿ÿ.äO÷kjjÚ¶m›——×o¿ývòäIÜgÈiÊ”)™™™cÆŒ‰ÎNåää¼¼¼"""rrrÌÍÍÛÚÚ„³_à.vr€kÀ=][[;cÆ áOIHHX¶l™µµu@@>Žú…ëׯoܸqÕªU;vì””$:t“°„ L~õõõ;wî àïÿ­¬¬lõêÕEEEgΜ!ü©«««üñÇ… Ž?÷ôà“°€H))){öìñðð :È…‡‡›˜˜TTT¤§§£}¡ß6lXXXØÖ­[çÏŸ¿aÃA¿-ž;*•:|øp___MMÍåË—ß¿ŸÀ0â ]êèèøî»ï´´´<<<>}ú´|ùr¢QŠ‹‹¿þúëï¾ûî?þ¸xñ¢ªª*щziñâÅ™™™ÍÍÍ&&&ׯ_'*†’’Ò¶mÛRRR­­­qS-a¹Vp šå?þ°··çïgõNccãáÇOœ8±~ýú­[·b²ˆŒgÏžmذaðàÁÇŽòFà® •¸p[[[KK‹¬¬,ÑA8c0×®]Ûºu«ÝÁƒµ´´ˆNÀgíííçÎó÷÷Ÿ3gΞ={ÔÕÕ‰NÔÙš5kfΜ9eÊq;ó„kÀÀ¿ÿþûܹsUUU¯]»FtÎÇøðá«W¯^»v í "IBBâ›o¾yùò¥¢¢¢‰‰É/¿üÒÔÔDt¨Ù¾}û¸qãBBBôôôÌÍÍ ‰N$ ÄëPGâp¸k×®)S¦Ìš5‹œÒ¾|ùrçÎqqq{÷îõòò0,‚XxýúõÖ­[SSSýýý===É63¹­­-99ÙÚÚZw–% œ‚*q(à––Ò~PAvvö¾}ûþùç__ß 6öÜ8€àÄÆÆþøãïÞ½Û¾}»‡‡G¿h»úúúóçÏ;99Q©T¢ãð NACÏ|üø1,,lË–-ÞÞÞW gûfee-^¼ØÑÑÑÈȈy€öñ4nܸ˜˜˜ÀÀÀ   Q£F]¸p¡µµ•èPݨ­­ÍÈȘ;w®††Æ¢E‹BBBˆNDv¢¨× ýú¸®®ÎÆÆæÝ»wöööãÆsvvvpp :T÷RSS÷íÛ÷ìÙ3__ßuëÖÉÉÉ€,bccýýýóòòüüü|||ÈÿɃEEE111mmm+V¬ : à´Põë¦P(t:}ôèÑd»tăÁxðàÁ‘#G^¾|éëë»zõjòp”°oß¾äääo¿ýö›o¾!á¼ %$$?^SS“è,<Á)hø¯‚‚‚àà`__ß &tõÙ&ÆÆÆäoßúúúÀÀ@ccãÿû¿ÿóòòÊËËÛ´iÚ +vvvaaa‘‘‘oÞ¼100X½zuFFÑ¡z£ªªêêÕ«fff#GŽôððHHH :aú÷¡ž€öxÁ‚ñññöööcÇŽµ¶¶¶··ï÷£HOO?sæLHHȤI“6lØ0yòd¢ô3>|8sæL``àÈ‘#W¯^½`Á‚~÷«€Á`¼|ù2))ÉÒÒÒÄÄ„è8Üà´P[ÀÅÅŃ :tèçÕÕÕÉËË ?_455]»v-00ðíÛ·+V¬X±bÅðáÉеµµÝ»wïÌ™3ÉÉÉ^^^kÖ¬100 :߬_¿žB¡X[[›™™xå,TÂ/àÄÄÄÛ·o¿xñ"%%EZZúÀ]Í^î¯\¹2vìØ5kÖ¸¸¸ÿ 9@?RPPpöìÙóçÏ=zÙ²eóçÏWTT$:T_%&&&$$¤¤¤¤¥¥åææÒétB’ €…Jø•””dfffmm­¦¦&Ì] N ‘””ôôôôöö1bÑ¡DVKKKxxø¥K—=zäìì¼dÉ’Y³fõ»SÓµ¶¶8ã{‹¯_¿n```hh(¸Cd°Pññ鮯¯OII¡Óét:ÝÐÐ000/#“V^^Þµk×BBBª««-Z´xñb ¢Cˆ‘êêê;w¤Ì™3ÇÝÝ}êÔ©’’’Dçâ¿ÖÖV///:ž——§­­meeuùòe¾ï,T||ºãââ¶lÙbbbbbbblllff6dȾŒL6YYYaaa·nÝ*))Y°`»»»ƒƒî @ ²²²›7o†„„ää为ºÎŸ?ßÉÉI$ßkÐÚÚš]TT4{öìÏmhh`ÿôn X¨xyº›ššâãã_¿~›››››+!!qãÆ áÄ#úúú¨¨¨ˆˆˆˆˆ*•:kÖ,77·‰'â/©ß¾};44499ÙÁÁÁÅÅeæÌ™úúúDç’ׯ_/Z´(;;[EEE__ßÑÑqÇŽ¼oŽ*ö§»­­ã]XËÊÊÜÝÝõõõõôôôõõGEò™ô|”••õðáȈˆøøx›™3gº¸¸ ºñéÓ§ÈÈÈû÷ïÿý÷ß²²²3gΜ1cÆ„ ÄáÞs £¸¸øõë×íííÓ¦Mû|…’’’””--­#F¨¨¨°–£€…§­­MRRrýúõ¯_¿~ýúuuuuEE…(ÝX¼w cbb"##£¢¢ddd¦L™2cÆŒ©S§*(( zŒÁ`Ðh´ˆˆˆ¤¤¤˜››O™2ÅÙÙyìØ±"yµ˜ÏŸ?ß³gOQQQaa¡„„ĪU«8@A •J=~ü¸®®®¶¶¶Ø¾óòò¢££?~ÛØØèèèèìììììLÔ›@ž={““cee5aÂ''';;;јDÝ åååMMM_~ù%,d¤½– UWW'%%%$$ÄÇÇ'''KII9::::::88Œ5 §D^MMM||üÓ§O£££ÓÓÓG5vìX[[[ñü%€*ñ)àOŸ>%''gddÐh´„„„·oßZXXŒ;vܸq666DÂ477Óh´øøø„„„¤¤¤?ÚÛÛ[ZZŽ3ÆÒÒROOOLú,T"\À™™™™™™4íÅ‹¥¥¥æææ¦¦¦¦¦¦vvvýâS€åååqqq©©©t:=99¹ººÚÒÒÒÂÂÂÄÄd̘1FFF222Dg°P‰F·µµÐéô¬¬¬×¯_¿|ù’N§+**2ÿ·˜˜˜XZZ¢q ÊËËSRRh4óoúœœœáÇ›˜˜èé阚šŽ5JII‰è˜|€ª~WÀ---oß¾ÍÍÍ}ͦ¨¨HCCÃÈÈÈØØ˜õF)eee¢Ã€jkk{ýú5NÏÍÍÍÉÉÉÈÈÈÉÉ‘••Õ××g½]S___[[»ßýB i ¸¾¾¾°°°¤¤¤¸¸¸¸¸¸°°°   77÷Ǻººì¯u]]]??àÝ»wÌÖáAaaaGG‡®®®®®îˆ#´´´†>|øð#F 6Œœ•QÀÝ(**úî»ï>|H¡P¦NzìØ1æôñÞ!°€ FEEŇŠŠŠJÿ¿¢¢"fã644hkk³^¯Ì—¯žžÞ—_~‰›>@¿PSS“›››ŸŸ_\\\TTTTTÄ<¨¨ªªúòË/™¿Ü¾üòË¡C‡6Œ¹DUU•À Ì(`nêêêÌÍÍ}||Ö­[G¡PN:uéÒ¥´´´^ßòTpOwUUUuuõû÷ïËËË+**Þ¿_VVÆüsayyùàÁƒÕÕÕGŒ¡¡¡¡®®®©©Éü#ñË/¿™J褩©©¸¸˜YÆ………>|(---))yûömyy¹¤¤¤†††ššššššººú°aÃXÿfþCIII@çüPÀÜ=z4%%åÊ•+¬%žžž¶¶¶7nìÝ€¼?Ý 555µµµ555555UUUŸþ?æ—Ì¢ýôéÓÇËËË™ýÊ|Åü¿öî/¤©÷ãøùb¾l;›Ìa5¤˜Ò, ‚(RË D2©Q”]EyUyaQ„7E‚E E¡#$"ìŸZŠYa‘Ûüל&.õü.sé,Ù÷·=ëýºÊ£œ>;ÏsÎgÏŽ›ééé©©©çVØO¾€¿™×ëu¹\UŠÛíöx<ýýý.—Ëãñ ô÷÷{½Þ%K–¤¤¤X,“É”ššj±X—\³Ù¬ªªÑh4™L&“IUU“Éd6›øŠ7ü;ùùù•••¡Ÿíùøñãêêêæææö6==pãÆ?~x½ÞÑÑÑ@¡Žùý~¯×;22òíÛ·@ã&&&šL¦À¸‡9Àd2%%%¥¤¤$''«ªj±X’““ù•cˆ’ÑÑÑþþþ¡¡!¯×ëv»‡††‚k¡àº(¸F\¨Õ ªª&%%©ªª×ëÿý÷_ƒÁàp8¢T”ñ°Øêìì´Ûí¡[Ö®]ÛÕÕÙÞ7SŸ={–˜˜h6›õzýªU«TU5 º O tu:Ýÿáþ3ƒÁ`0þY¹uTà%Ì‘‘ŸÏ799\by<žññqŸÏ½Àñ°Öétccc¡ŸØüãǃÁ011Ù¥ý-h@ŒE¯âa±ªªª³gφý–œ¿ ˆñ°ÔKKKëèèHKK nq¹\ëÖ­ëëë‹l‡Ò®€¥ ¦-Rd‹Œ´Ù¤ ¦-RÑËoÍÎÎnooÝÒÑÑa³ÙDåàâ¡€‹ŠŠêëëC·Ô×׋ÊÀÉ»ê_8ŸÏg·ÛËËË;¦(Jmmm]]]{{»^¯l‡Ò¾"m0…l‘"[d¤Í&m0…l‘â%èß1N§óÅ‹™™™™™™/_¾lnnޏ}ˆyŸt$ís1iƒ)d‹Ù"#m6iƒ)d‹Tô²%TUUEc¿‹Ý¶mÛDGOÚ` Ù"E¶ÈH›MÚ` Ù"¥lò>é ŽÅÃ=` (` €€@ (` €€@ (` €ÃøgщÂp¹\YYYòd{þüyyyùÊ•+u:]FFÆöíÛïÞ½+:ÔO---eee)))&“iÓ¦M¢ÍxýúuEE…Ùl–g({{{KKKUUUUµ´´ôóçÏ¢ÍðpÈ<Çd>7CÉvM‹Eh˜CþÃ2==]XXØÐÐ OÔ7^»v­»»{bbbppðÑ£G¹¹¹§OŸKÓ4MQ”¼¼¼§OŸŽµ¶¶Úíöëׯ‹õ“Íf;sæÌ»wï$JŸÏgµZÏŸ??44444tþüù¬¬¬±±1ѹ~’ípÉ<Çd>7ƒ$¼¦Å ‰,U*òÌ€ùÔÔÔ˜¶°ãæt:—/_ËTóeûòå‹ÝnojjŠ}¤ß ~7ö‘æJMMu¹\¡[úúúÒÓÓEå™$‡káslD›sÉsMû£hÁß~8ôXüægb)ôÿ•­§§gÅŠ³Þ—&äÊ 9n6lðx<±L6Ûׯ_wïÞ}éÒ¥‚‚‚ØGúM0Ùdgg···‡néèè°Ùl¢ò,"2̱unÎ%Ï5í¢qÚþí¼·oßÞ¼y³èŠòÛe“èha<{ölÍš5¢S(Š¢x<ž]»v]¼x1??_tÙÕ×ׇn©¯¯/..•g±X\sLžss]Ó¢R [(ÿEòóóïܹÓ××ç÷û?|øpáÂ…äääW¯^‰Îž<#XXXØØØèv»ý~ÿ—/_nÞ¼¹lÙ²ˆÎ¥iš¶nݺ[·n‰Nñ’ åÈÈÈÊ•+/\¸ü «Õ:::*:×l’® ™ç˜Ìçæ\’ŒllŠ@Ї*•æææ’’‹Å²dÉ’eË–þ\t¨ŸÂ>õKÓæÉ&6ÒÇ÷ìÙc4Fãž={fÝ¢KÂà ó“ùÜœK’MÈò–gþ*Ü@ (` €€@ (` €€@ (` €€@ (` €€@ (` €Ì(++;uêTè–“'OîÛ·OT Žý£išè d188˜››{ïÞ½ÜÜ\EQÞ¼y³k×®ŽŽŽ´´4ÑÑ€xà À ‹ÅR[[{äÈ‘©©©©©©#GŽÔÔÔо@4°0ÛáÇsrr4M{òäÉýû÷EÇâ `6·Û]PPàõzNgVV–è8@|¢€Ìvüøñ¼¼¼·oß^½zUt >qÀ/šššzzzJJJÊËËÛÚÚšššD'â+`3†‡‡7nÜøèÑ#«Õª(JWWWQQÑ«W¯’’’DGâ +`3***G }E±Ùl¨¨¨› ˆK¬€€0PÀ@  €0PÀð?2!ûO{[IEND®B`‚gsl/doc/images/rand-gumbel1.png0000644000175000017500000004473613536674414014746 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœíÝy@Lûã>ð™¨TJ¥L²$)J¡%%ÊÒEÖ‘¥¸á^ëÅ•írBd ¹¡ WEÂU!…’j´X²´hWRJëüþèûëÎ'íÍÌûÌ™çõWΜ™óœÓòx¿çÌ9L‡ÃÁ#@¡€@€  @ €0(`PÀ €@€  @ €0(`PÀ €@€  @ hŽÙ4exþü¹“““¼¼|+7úúõëÕ«WkjjJIIIII 8pÙ²e=ây°v„¦žXl%%%Y,ÖøñãwïÞ™™É“6ƒ·ßMAþl€(CÍq¸|ÿOÁX¼xq="##[³ò?ÿü3eʃÐÐÐâââ´´´={öÄÇÇ;–ß9y¢îØ–••¥¤¤üöÛo%%%W®\iÓ‹²Q·@ S†Èb2 ÿÀ· 55uÒ¤I½zõâ^^[[»qãÆÃ‡ 8O[ŸØèòøøx ‹û÷ïëêêò)XG¾³Ä*@da ¢käÈ‘ÁÁÁ &$$ôîÝ»ººšÉd–••­ZµJIIIFFÆÊÊ*))‰{ÍuéÒ¥_¿~çÎãI¤Ã‡¯_¿¾Aû2 11±úömtÄÆ=[VV¶råJEEE%%¥-[¶p8œòòrGGÇîÝ»ËËËÿøãÕÕÕõOÀ>:tÆ ßç/))Ù¼y³–––´´t·nÝ,,,nÞ¼Y¿Bƒw ˜Lfyyù?þÈb±ynfGš9bMm«~µ7nŒ9RFFFFF¦Á “ɬ©©Ù·o_¿~ý$%% püøñö"Q‘ÑàÞÛÛ{âĉ ÖY¾|ùÞ½{ëV^°`Á‘#G²³³³³³9Âb±Þ¾}[·ÚË—/•””¼½½‹‹‹Ÿ>}ª®®ÞÖßÓÒÒzýúu;^¤~!ƒÁXºt©§§gaaá›7oFŽùçŸ.]ºôüùóŸ>}ª[rôèÑú•Û·MíHSË“““544¬3sæÌ 6|øð¡²²òÓ§O7nܘ4iRS¯Ã`0ìííëÂ4º×ÍìH‹G¬©‡?~¬¨¨xùòå¼¼¼ÜÜÜ‹/*((DGGׯ¶råÊ_~ùåÍ›7¥¥¥÷ïßïß¿¿¯¯o£Gà{(`! þÔVVVöêÕ+11±~IAA¼¼|nnnÝÊ{öìá^÷îÝ‹/®ûzñâÅýõWýCS¦Lik€ïuéÒåÛ·oíxî:©ïW‡)##ýäÑ£GC‡­_¹}ûØÖ.//—’’j°N×®]¹Û´ù×a0‡njµæw¤Ý}Z¿rƒ.,++ëܹsÝ× ÞÍkG€455_¾|Ùüs¿‘ššîGkkk<ñû%õ_´oÛZÀIIIššš Öy÷îÝŒ3ºt颭­½téÒ€€€úœ–beeeS›k~GZüúõëoß¾}ùò%%%å÷߯®¦¦æÃ‡¿~ýšššºuëÖ•+W2Z1¡úý’vïcS;R¿¼ººº°°ðÑ£G7nTVV¾zõê÷ëŒ;öâÅ‹UUUÙÙÙ¿üò‹••UÝCººº×¯_¯®®nþеrGš?bÍl+22RAA¡î,è¼¼¼Ë—/+**r¿IÑL$€ágDHSƒ‚‚ ÆŽ;¬\ZZº|ùriiéÉ“'³Ùlîââ⬬¬dee¥¤¤&L˜pïÞ½f¶Û¦ÿûÆÅÅ-Z´¨wïÞâââÒÒÒƒ Z·n÷ÖÝÜÜ´´´ÄÅÅûôé³{÷îºÏõ6µÍpûö±™®#!!¡¬¬†@ €0(`PÀ €@€  @ €0(`PÀP·€ÓÓÓmlläääääälll222šY™ùåhŠpii©™™™¡¡aZZZZZš¡¡¡¹¹yYYY3Oáü/EhŠÞØÕÕ566öÒ¥KõK-ZdddäììÜèúL&Ew Q߸qÃÎÎŽ{‰]`` ©<¼EÑNJJÒ××ç^¢§§—œœÜÌSTTTÄÅÅ{öì¹pá—/_ò9 @‡P´€‹ŠŠ¹—tïÞ½°°°©õ­­­¯\¹RRR3bĈñãÇÇÇÇó?&@{q(I\\¼²²’{Iee¥„„D+Ÿîîî>yòäWÛµkW£Ç¤K—.þ.eµ§ÆZ¢ç.±X,6›Íb±ê—ääädgg·æé¹¹¹¥¥¥íÛ:Né€:ükŠNAëêê&$$p/a³Ù:::­|:ê(Ž¢77·nå={öp¯¿{÷îÅ‹×}½xñâ¿þú«þ¡€€€)S¦´5@[öïߟûÕÚô§»Å­7¿ËüØ"=ðo71zwrrâŸ={vúôé=zô¨ûçÂ… ¹×_¸pá½{÷ê¾ŽŠŠâ¾ýÚ¸qãÜ •'¾}û¶gÏmmmiii&“©¨¨˜––Vÿh‹­ÐÍì2Ÿ¶XÏÅÅ¥™SÖùÍÅÅ¥ƒùùA$ÞBo+9³€f¾ÿÍ-((8pà«W¯”””jjjú÷ïåÊ##£º•ËËË»téR¿ryy¹œœ\UUƒÁ””¬¬¬ä~)11±ššš¶hÞúõë_¾|yàÀÈÈÈ|ûöMJJªÝ|ZÜzó»Ì-Òÿv#` -%%¥Y³f>}šÁ`ª¨¨Ôµo¬¬,²²”••ë¾–““ËÊÊâÿµØ¾ípåÊ•³gÏÔÝê­ÁÛ±ÍéÚ·Åfv™O[„f €€ÎÖ­[wòäɪª*77·ü‘û!ooïÿœ8qbÝ×&L äw¶ãQOOOîGù1!ÜÌ.ói‹ÐŒÎ¤ðÑàÁƒµµµwíÚ•’’2wî\î‡RRRÜÜÜêúûûŸ8qâÑ£GuíÚµËÂÂBJJjÚ´i]ºtyòäÉáÇ¿ÿPSk43ieeµ~ýú¿þúKLLÌËËëÇíxý6m½™]šÿ/hÂaFMýæ1Œ;v4X¹´´tùòå ÒÒÒ“'Of³ÙÜ+ÄÅÅYYYÉÊÊJIIM˜0áÞ½{Íl·©?­Ÿ>}RTTlꉟ>}Z¸p¡¢¢¢¼¼¼½½}III;þø´~ë-îrÇ·HKüÛ;‘x ½­DäÌQ^^®¨¨˜ššÚ«W¯ú…‚ù5wss{ýúµ››¿7DÁ­Óÿ~T0 töùóç#GŽØÙÙq·¯Àœ?þüùó‚ß.¶-ÂP¯Ð“ɬ›k½pႜœ\ƒ‡ðk­0@›5ówí ÄácH €@€  @ €0(`PÀ €@€  @ €0(`PÀ €@€  @ €0(`PÀ €@€  @ €0(`PÀ €@€  @ €êpzzºœœœœœœMFFFkž•““£¥¥Åd2ù #(ZÀ¥¥¥fff†††iiiiii†††æææeeeÍ?‹Ãá,Y²dÏž=‚ ÐnL‡C:C#\]]ccc/]ºT¿dÑ¢EFFFÎÎÎÍ<ëðáÃñññ^^^Lf‡ö«ƒOÚà_#Pt|ãÆ ;;;î%vvvÍ<%>>ÞÃÃãĉ|ŽÀ-त$}}}î%zzzÉÉÉM­_^^nggçéé)++ËÿtEѹV ‰¯_¿Š‹‹×/©ªªêÚµkEEE£ë;::ªªªîܹ³îŸ˜‚ž¹)è6 LJJúå—_ÚúDfcø€E‡z,‹Íf³X¬ú%999ÙÙÙ߯¬©©ª¦¦V¿#`à ‘ëêê&$$p/a³Ù:::®üöíÛ~ýú5Âb, TFÑž6mš——÷///kkëFWæ|§~¡ ²´EçZKJJôõõ †»»»§§gBB‚ŒŒLÝ ÍÏ ` xB䦠eeeÃÂÂbbbÔÔÔÔÔÔž={Zß¾ÂC½F` uDn @o(`PÀ €@€  @ €0(`PÀ €@€  @ „^MMMFFF^^^mm-ƒÁ¨®®þøñcII é\ÍéL:@{ÔÖÖFEE„††¾|ùRII©¢¢¢  €ÃátêÔIEEåóçÏ=zô;vìäÉ“­¬¬HGøL‡C:å0™8,Ô•——wúôi›‰'6LRR²ÁjµµµoÞ¼ ¿sçNXX˜‰‰‰ÝÌ™3¿_ ük4M#PÀÔôùóçßÿÝÃÃÃÆÆfíÚµC† iåËÊÊ.\¸œœ¼aÃ''')))¾FÚà_#à=`ÇÓÓsРAŸ>}JHH8}útëÛ—Á`HKKÛÚÚÞ½{÷æÍ›?8p §§gÝƤ`¨×Œ€)%==}ùòå%%%îî†Á§OŸþüóÏåååÇ5jTÇ_h #`Q!!!#FŒ077ŒŒäIû2 cc㈈ˆM›6ÙØØlÞ¼¹¢¢‚'/ Ð&ê5#`Špuu=tè¿¿ÿèÑ£ùñúùùùŽŽŽ©©©ÞÞÞ:::üØ;Œ€A´ÔÖÖ®[·ÎÓÓóñãÇ|j_ƒ¡¬¬|õêUgggSSS///>m Qê5#`²jjjììì²²²ºuë&€-&''ÛØØ˜šš;vL\\\[a0ˆŠºöÍÏÏ¿uë–`Ú—Á`èèèDGGgeeYXXf£ âPÀ@!ÇÑÑ1///00PÀÕ•••½~ýúÈ‘#ÇŒ“––&ÈM€hÂ¥(BvìØ‘JäBbbbTUU;vìíÛ·qZð ¨ÂÓÓóêÕ«QQQ]»v%ÃÙÙ¹{÷î'N¼qãÆ°aÃ&zÃÙFÀIX‚1gΜ 8tƒÁ Z±bÅõë×ùw6œ„t–‘‘1oÞ¼‹/R¤} †µµõÅ‹gΜùðáCÒY€ž0ÔkFÀ‚ôíÛ·qãÆÍ;wãÆ¤³4>þüÀÀÀ‘#G’ÎdànH…¤µk׿ççûúú2™LÒYboo÷î]===ÒY€LA=ߺuëÌ™3Ôl_ƒaeeåææ6eÊ”wïޑδ‚³ ˜¼¼¼•+Wúùù ì‚í3gΜÂÂÂI“&=zôHEE…t  ̵6SЂ1sæÌAƒýöÛo¤ƒ´ÊÞ½{îß¿/++K: Þ(°üý÷ß®®®ÑÑѤ³´–££ãÛ·oƒƒƒq½hÑ(0¿eeeüûï¿ÂufSMMÍŒ3zöìyæÌÒY@@pЊ““““““pµ/ƒÁèÔ©“Ottô¡C‡Hg¡‡“°@ÐüüüÞ¾}ëïïO:H{tíÚõÆ£FÒÖÖž:u*é8 Ä0×ÚLAóÏ—/_ttt®^½*Ô—¶xúô©µµuXX˜®®.é,À_xX PÀü³aÆÒÒRÒA:êòåË»v튎ŽVTT$ø,P(`>a³ÙIIIJJJ¤³ðÀæÍ›ãâân߾ݩS'ÒY€_PÀ…æ ‹™3g:99‘Â555S¦L144>>AAA¤³€ðÁP¯ó\MM¾¾þÁƒ§M›F: EGGOŸ>=22RSS“tà=Œ€A¸;wŽÅbѯ} †‘‘‘‹‹‹MYYé, L0ÔkFÀ¼URR¢­­}ãÆ CCCÒYøÅÎÎNLLìÂ… ¤ƒa Bì?þ˜8q"Û—Á`œ:u*66öܹs¤ƒ€ÐÀP¯óPnn®®®n\\\Ÿ>}Hgᯗ/_Ž?^è.p ÍÄÕÁƒ.\Hûöe0ÚÚÚ‡Z°`Þ €ÖÀP¯óÊÇõõõEç>ö‹/–‘‘9uêé ÀƒP:pàÀ²eËD§} †»»{hhè?ÿüC:P†zÀ˜'rrrœœœÜ£GÒY*66vÊ”)ÑÑÑjjj¤³@GáR”…扟þ™Ãá>|˜tþú믠  ððp\&@Ø¡€ Üqùùùƒ b³Ùªªª¤³P[[kii9vìØ;w’΂(pÇíØ±£°°ÐÝÝtb²²²† výúu¡¾ó1 € ÜAÅÅÅššš111ýúõ#…¤€€€M›6ÅÇÇËÈÈÎí$ŠgA§§§ÛØØÈÉÉÉÉÉÙØØddd4µæ“'OÔÕÕ%$$TUU'NœxíÚ5AF…Nœ81uêTo_ƒ1cÆŒqãÆýüóϤƒQ´€KKKÍÌÌ ÓÒÒÒÒÒ ÍÍÍ›º¾³³³ÁíÛ·KKK7oÞ¼oß¾]»v 83Ô)++;vìØÖ­[I¡WW×»wï“”CѹVWW×ØØØK—.Õ/Y´h‘‘‘‘³³skžþöíÛáǵo똂îˆãLJ‡‡c¢^ddäìÙ³ãããY,é,Ðf"7}ãÆ ;;;î%vvv­|º¸¸8>þADMM««ë¦M›H¡{{û•+W’ÔBÑNJJÒ××ç^¢§§—œœÜâ‹‹‹>|8oÞ}øðáyyy|ÈMJOO¿ÿþ’%KH¡.111—÷ïß“ÎäQ´€§M›æååŽÄËËËÚÚº•OŠŠÒÖÖæC.hÒñãÇíììºvíJ:¥ 8pëÖ­Ë–-«­­%£h¯X±"**ê·ß~+*****Ú¿Ýå®êWà~§vòäÉyyyUUU?~ôôô\¾|ùHQeee.\Àäsk¬_¿¾¶¶öøñ㤃a-`YYÙ°°°˜˜55555µgÏž…††6uAÝ­[·zyyéèèHKK1"88øÚµkVVVÎ,Ê.^¼8zôèþýû“"ÄÄÄΞ=»oß¾7oÞÎ$ál£Fà$¬¶ÒÓÓ;zôè„ Hnnn>>>¸b ʼnÜIX DBCC Ú·MÖ¬Y#))yôèQÒA€ õp›ØØØLš4iÕªU¤ƒ™÷ïßGFFjii‘ÎMÂý€ ÜzYYYúúú>|À-oÛ¡n"úÑ£Gbb˜‹ (LAE:uÊÖÖíÛ>kÖ¬;yò$é @†zÀ¸•ªªªÔÔÔÂÂÂð©ëv{õêÕ˜1c¢££ÕÕÕIg€F` T4pà@´oG 8׈M(`h?+VN!ô6nÜXYYéááA:æZ)èÖÈÈÈ000ÈÈÈ’’"Eè½|ùrüøñ111}ûö%þ¦ r<<<-Z„öå mmíuëÖ­\¹’t õp‹jjjúõë2xð`ÒYh¢ººzäÈ‘kÖ¬±··'þƒ0PKHHHŸ>}о<Ô¹sç‹/nݺ533“t0´ÇÙ³g¹oN<1hÐ ''''''ÒA@0×ÚLA7/;;{ðàÁiii¸û/ÏUUUîÚµköìÙ¤³ƒ)h ”¿ÿþ{öìÙh_~?}úôúõë‹‹‹Igþj¡Ø }||ž?ž——Ç`0zôèahhhff¶`ÁEEEAå(Œ€›Ááp´µµ/^¼hddD: m999ÕÔÔœ>}št 1ÎÌÌ\±b…ªªª···©©ipppvvvvvvppðøñã/_¾¬ªªêàà€FDMDD„„„Ú—¯|ØÒÒ²ÑBBB~þùç÷ïß———ó3!7ÃÞÞ^OOoÆ ¤ƒÐÜíÛ·_¼x©~²ÜŽpéÒ¥îîîÒÒÒÍ<¹¬¬ÌÉÉéÂ… üHF ¸)%%%jjj¯^½RVV&…þ–-[Öµk×cÇŽ‘ Òp?`B7åüùóÁÁ‰(ÝÖ IDATÁ×®]#D$ 2ÄßßôèѤ³ˆ.œ ”àååeggG:…¨PPP8v옃ƒCEEé,À{-ðœ9sêÎæVTT´`ÁþDŠzÿþ}JJÊ”)SH!³fÍ4hÐþýûIÞk¹€ÕÕÕõôô.]ºT¿äßÿ6l˜††?ƒåxyyÍŸ?_\\œtÑrâĉS§NÅÇÇ“<Öª©í¸¸8‡ž={ºººº¹¹%$$œ:ujРAÈGÞþ‡ÃÑÒÒòóó6lé,"ÇÃÃãܹs‘‘‘:u"@ä~ØÀÀ ::ÚÔÔÔÌÌlÈ!÷ïß§qûB£"##%%%ѾD888ÈÉÉáthšiÃIXL&³[·nJJJL&“€š.^¼¸dÉÒ)D“É ‚ÀÀÀáÇ÷êÕ‹t‘¶aÆÊÊÊ3gμÑrøð!>>~Ú´iõK&Nœóúõk~ ¹xñââÅ‹I§ubbbgΜٹsgFFé,À8Ý·8 š[^^ž¶¶vFF†ŒŒ é,ÀØ¿ÿÓ§Oƒ‚‚H¸ãããcmmö¥ˆ-[¶¤§§ãj 4ÐdÛÛÛ—••5ÿä²²2{{{^GjÁü3¥tîÜùĉëÖ­+**":¤Éöõõ1bĽ{÷šZáßÿ1b„¯¯/‚%$''çææN˜0tø‰‰ÉÌ™3qGHa×d¿~ýÚØØxêÔ©ãÇ?yòäË—/KJJJJJRRRÜÝÝÇŽ;}úô‘#GâT,z»|ù²­­­˜Þª –DDDܺu‹th¿Þ[ÎÏÏ÷öö‹‹ËÏÏg0=zô044477Ÿ?~÷îÝ•S pV‡£©©yíÚµ¡C‡’Î ………ÙÛÛ³Ùìnݺ‘Î@g¸°@¡€ëDEE-_¾<%%…thœ££cMM > ÀW8 ðõõµµµ%šôÇܽ{·™5€ÊZUÀ©©©vvvªªªââ⪪ªvvv¸&-íUWW_¹rLe²²²§NZµjÕׯ_Ig€6k¹€_¼x1fÌ--­ˆˆˆ/_¾DDDhjjŽ=:))Iù€”ÐÐP555Üõ™â,--MLL~ýõWÒA ÍZžÚ¶´´œ:uê?þȽðèÑ£·oß ág6bð0ƒÁX²d‰¡¡áºuëHèéé]¿~ÝØØ˜t"y–ŒŒÌ»wïX,÷œœ ºN|¡€¿}ûÖ«W¯¤¤$ÒY eþþþ»v튋‹ëÒ¥ é,tCò$,IIÉF—KIIñ: PEPPÐðáÃѾÂbîܹ:::{öì!Ú åž5k–¿¿ƒ…~~~666ü‰äy{{ãô+áâîîîééùìÙ3ÒA µZYýúuåÊ•ƒ ²µµUUUÍÊʺ|ùrJJÊÙ³g¥¥¥“RÀD| º¨¨H]]===]NNŽth??¿½{÷ÆÆÆ65kí@ò=`&“Ùâ«Ð¬®D¼€Ïž={÷îÝï§=€úæÎÛ¿ÿƒ’@$ßæ´?’)˜^îîî^^^111¤ƒ@ËDz¨×Qgggëêêfeeá|Z!åíí}ðàÁgÏžIHHÎ@¸%ˆŸŸßŒ3оÂËÖÖ¶_¿~û÷ï'Z€†ÿáçç7þ|Ò) CNŸ>}úôéçÏŸ“ÍAÃÒÒÒÞ¾}kffF:tHÏž=>¼dÉ’ŠŠ ÒY I(`øÏÕ«WgΜٹsgÒA £lmm €KsP þãçç7wî\Ò)€7NŸ>}áÂ…èèhÒA q(`ø?ïß¿OOO755%xCIIéÈ‘#K—.ýöíé,Ð0üÿY³fuêÔ‰tà™9sæèêêîÚµ‹th þ¯¯ï¼yóH§;qâ„——×Ó§OI€†PÀÀ`0¯^½ÊÏÏ;v,é Àc=zôpss[²dIYYé,ð?PÀÀ`0>>>sçÎÃÏ Íž=ÛØØxãÆ¤ƒÀÿÀ\`0 œÿLcnnn·oß !þƒFBB·oߌI~‘““»páÂÊ•+ Ig€ÿCÝNOO·±±‘“““““³±±ÉÈÈhj͇Λ7OYY¹[·n#GŽ dNðóó›7o^kî; ÂkܸqóæÍsrr"þE ¸´´ÔÌÌÌÐÐ0-----ÍÐÐÐÜܼ©³HÆŸŸŸíæææââröìY^§®€I¾Û·oß‹/|}}Iƒ²·#tuu½téRý’E‹9;;¿ò¦M›þøãú›Íž5kVjjj»·.R·#|úôéÒ¥KSRRHAˆ‹‹›|¨­­M: åð¯èß4í@û®©©éÝ»wDD„¦¦&é,@ gÏž=qâÄ“'O$%%Ig ‘›‚¾ºÿ~ï޽ѾPÏÁÁaÀ€[¶l!@„ €E‘¿¿?®ÿ œ>}:((èæÍ›¤ƒˆ šÏµ¶½§ «ªªzõêõìÙ³¾}û’ÎÔecc«ªªJ: U` x&,,LKK í ß=zôš5k/^\[[K: ý¡€EŽŸŸnMÙ¶m‡ÃÙ»w/é ôGç¹Öv£ñtee¥ªª*›ÍÆ#4%''gøðá.\˜8q"é,äa xãÞ½{:::h_h†ŠŠÊ¥K—ìììš¹÷ t X´øûûcþZdjjºzõê ÔÔÔÎ@[´kíºNAcþZ¯¶¶vÒ¤I&&&»wï&€$LA`þZOLLìòåËçÏŸ !€žPÀ"Äßß÷„Öc±X¾¾¾ööö>| €†è9×ÚA´œ‚®¨¨PUUMLLìÙ³'é, LŽ=zùòåGIHHÎ@¦ ¡£nݺ5tèP´/´Õºuëúöí»iÓ&ÒAè,*pþ3´Û¹s炃ƒýüüH εvý¦ ËÊÊTUUß¼y£¬¬L: %6›maa¦««K: €@a :䯣FBûB»éééýñdzgÏþòå é,4 >>> , „Û’%KÌÍÍq«^¡Û\+OÐl úóçÏýúõKOO—““#„[UU•™™Ù¤I“vîÜI: €€` Úïúõëæææh_è8qqñ+W®œ9sWçè80ýùøøÌŸ?Ÿt   {{ûÔÔTÒY„­æZy…NSÐyyyÚÚÚ?~”’’"èãôéÓnnn?–••%€¿0 ítåÊ•©S§¢}·V­Z5vìXœÐ(`šÃùÏÀ'ÇŽûüùóŽ;HV(`:KOOõê•……é @CâââW¯^õ÷÷¿téé,B©3éÀG~~~³fÍ'èIII)((h„ 1bé8B#`:Ãü3ð›ŽŽŽ‡‡‡MNNé,BL[¯^½ÊÍÍ7né @sÖÖÖ+W®œ1cFyy9é,ÂL[>>>óæÍ÷ønûöí °³³ÃIÑ­‡¿Î´…û‚À0™L¼¼¼mÛ¶‘Î 4PÀôÿíÛ7cccÒA@THJJ^¿~=((èøñ㤳œMO~~~óæÍc2™¤ƒ€QTT¼uë–‰‰Iÿþý§L™B:ÕÑçš‹<$ì—¢äp8êêêAAAzzz¤³€ÈyüøñŒ3îÝ»7dÈÒYx—¢„6xô葜œÚˆ5jÔ±cǦM›–™™I: ¥a š†.]º´páBÒ)@tÍ›7¯  `òäÉŠŠŠ¤ãP”pϵò‰POAWVVöêÕ+&&¦_¿~¤³€HÛ¸qã£G¤¥¥Igh?LACk…„„èêê¢}¸?ÿüSCCcÑ¢E555¤³P ˜n.]º´xñbÒ)L&ÓÓÓ³´´ÔÙÙ™t*â¹VþÞ)èÏŸ?«««øð¡[·n¤³0 FII‰©©é¬Y³¶oßN: @{ð¯p­\½zÕÂÂí Ô!++|H: % €éãòå˸þP™±±±¯¯ïœ9sbbbHg Lñññeee&&&¤ƒ4g„ çγ¶¶f³Ù¤³†¦‰ºËOâöG@}Ó¦M;qâ„¥¥eRRé,$á,h:¨©©ñññ % UfÍšU^^nii¦¥¥E:(`:¸{÷nŸ>}´µµIh­… VVVNœ81<<¼ÿþ¤ã€¦ƒ .,]º”t €¶±··¯¨¨033 WWW'@Єò¯ü&\Ÿ.,,ÔÐÐxÿþ½¼¼<é,mæáá±ÿþÐÐP ÒYKQB“|}}---Ѿ ¤V¬XQUUennŽq0ˆ°Ðóôôüí·ßH§h?'''ƒ1a„{÷îijj’Ž (`áÆf³óóóÍÍÍIè''' SSÓÛ·o<˜tA@ ·óçÏ/]ºTL Ÿç¡çàà ++kaalhhH:ß ÓÙF#,'aUTTôéÓ'::º_¿~¤³ðF``àªU«FŽI: ƒ“° Qúúúh_ “~øABBâ‡~ðññ133#€0u)ÄΟ?oooO:YYY]¹reÁ‚AAA¤³ð‘p̵ ˜PLAgdd :433SJJŠtÞ{þüùôéÓ÷íÛ‡ÿeY¢x?àôôt999999›ŒŒŒfV~þü¹“““¼¼¼èÜÀËËkîܹh_ +CCÃû÷ïïÝ»÷àÁƒ¤³ðE ¸´´ÔÌÌÌÐÐ0-----ÍÐÐÐÜܼ¬¬¬©õ/^Ü£GÈÈHA†$ˆÃáxzz.[¶Œt>ÒÒÒzôè‘··÷† jkkIÇà1ŠÎµºººÆÆÆ^ºt©~É¢E‹ŒŒŒœ›"Oæ ¨?úÓO?%$$ÀwŸ?ž1c‹Åòòò’””$DŽÈMA߸qÃÎÎŽ{‰]`` ©}"€g(ZÀIIIúúúÜKôôô’““Iå¡”üüü»wïÚÚÚ’ ’’’uŸJ266~ùò%é8¼AÑÏ)**r/éÞ½{aa!©<”rîÜ9Ü}D “ÉtqqéׯŸ©©©¯¯¯©©)éDEѰ`¸¸¸0C:WsjkkÏž=‹ùgMK—.õööž?¾——é,EÑVPPh0ÞýôéSƒ1qǹ¸¸pÃÛ­ðÖÝ»wFŒA:fff÷ïßß³gÏöíÛqj45а®®nƒS|Ùl¶ŽŽ©<ÔqòäIGGGÒ)HÒÖÖ~òäIDD„Mii)é8íDÑž6mZƒ)&///kkkRy("===**jþüù¤ƒ¦¤¤tïÞ=%%¥Q£F¥¦¦’ŽÐ-à+VDEEýöÛoEEEEEEû÷ïò䉃ƒCý §–ONŸ>½hÑ"iiiÒAÈ“ðððX³f͘1cîÞ½K:@›Q´€eeeÃÂÂbbbÔÔÔÔÔÔž={*##ÓÔúÜçO ŹTíPQQqîÜ9Ì?p[½zõÕ«W—.]zôèQÒYÚ†ê—|"‚šWºtéÒÅ‹ïܹC:夥¥Íš5kÀ€]»v%hE䮄ß;qâÄš5kH§ "55µÈÈHYYY##£””ÒqZ,bccsrr¦NJ:EuéÒåÌ™3›7o655õññ! eTœk%Ž‚SÐvvvúúú?ÿü3é T—0{öìÉ“':t7o€Žã_#P®i¨€jœ=xðà·oßâò“­Q\\¼|ùò>øúújjj’Ž ï‹´“'OÚÚÚ¢}Z©[·nW¯^]¶l™‰‰ .Z ”E­¡EPj\^^®®®¡¥¥E: €ILL\°`Á!CN:%''G:%Œ€E×ßÿmllŒöh‡ÁƒGGGËËË6ìÉ“'¤ãü õ¨ƒ:#àÚÚZmmísçÎ;–t!výúu''§eË–íÚµKBB‚t&‹¨ÀÀ@EEE´/@Íœ93>>>))ÉØØøÅ‹¤ã0(`ŠûóÏ?7mÚD:°X¬€€€uëÖ™››8p ººšt"u(`ꊈˆ(((˜1cé ô±téÒØØØððp“ÄÄDÒq@¤¡€©ë÷ß߸qc§NH •>}úܹsgÅŠfffûöí«ªª"DUÎ6¢*œ„•˜˜8yòäwïÞáR>|’™™¹zõê?ž;wÎÐÐt (œ„%röïß¿nÝ:´/ÿôîÝûæÍ›?ÿüóÔ©S7oÞ\VVF:ˆ0½|ù2,,ÌÉɉtú[´h›Í®»àëÍ›7IÇB~®•‚ˆOA/^¼XGGgÛ¶m3ˆš{÷î­]»vÀ€ÇŽëׯé8@˜‚!¯_¿¾sçný `'Nd³Ù£F1bÄÁƒ+**H'šCSŽ‹‹Ë† pÝZÁ“ضm[ttô“'OtuuÿùçÒ‰€Î0Ý‚SЉ‰‰oÞ¼éÚµ+‘P'44ô§Ÿ~RTTxð7 ½ªªª+W®=zôÓ§O«V­Zºt©²²2éPÐZ8 K PÀoß¾5jÔ“'Oú÷ïÏ× uDGGŸ:u* ÀÒÒÒÑÑqìØ±¤AËPÀÅïæp8&L˜1cÆúõëù· ¦âââ¿ÿþûôéÓÇÁÁÁÖÖVEE…t(h΂¦ww÷êêjgggÒA€€nݺ9;;'%%9s&11QGGgúôéׯ_Ç=D FÀàëøÕ«WcÇŽŒŒÔÒÒâÓ&@ˆ|ýúõêÕ«žžžÉÉÉ ,°³³6léPðLA ÿwUUÕèÑ£V­ZÅ×áõþý{//¯‹/JJJÚÚÚΟ?W °@ñïpÿòË//^¼ ÂíS QçñãÇ>>>W¯^íӧϼyóæÎÛ§OÒ¹D X øt¸ÃÂÂìììâââð hQMMÍýû÷}}}¯_¿®««;wîÜ~ø¡wïÞ¤s‰°@ñãpçåå 6ìüùó¼}e ·ÊÊÊ;wîüóÏ?7oÞTWWŸ9sæ¬Y³H:—¨@ Ïwuuõ¤I“LLLöîÝËבR]]qýúõþùG^^~ƌӧO>|x§NHG£3°@ñüpoÞ¼9!!!$$÷ €Žãp8ÑÑÑ·nÝÊÊÊš4i’•••¥¥¥’’éh4„(Þî .ìß¿ÿÉ“'Ý»wçÕkÔÉÌ̼}ûvHHHhh¨ŽŽÎ”)S,-- ñß}^A ÷ýû÷çÏŸÿàÁ¼a|UYYRPP`nnnnn>aÂ\ﶃPÀūÜœlffæëëkjjÚñWh¥ôôô{÷î………………IJJN˜0ÁÜÜÜÌ̬gÏž¤£ °@ñäpgee3fïÞ½ .äI*€vHII ¿wïރƌcff6~üx555ÒÑ„ X :~¸sssMMM—-[¶iÓ&^¥è‡“’’òðáÃððð‡vîÜÙÄÄdôèÑ&&&úúú;w&¢PÀÕÁÓ“caa1wîÜ;wò0¥¦¦FEEEEEEFF~øðAOOÏØØØÄÄdĈ}ûö%ŽBPÀՑÖ–faa±dÉ’íÛ·ó6Ÿ”””<þ<**êÉ“'Ïž=«ªªþÿ 6¬W¯^¤’„¨vî/^L:uÓ¦M?þø#ÏSFVVÖ³gÏbcccccŸ={Æd2‡n``0dÈ}}}---‘ºš= X Úw¸CCCmmm;6oÞ<~¤ "33óÙ³gÏŸ?OJJŠ‹‹+,,2dÈàÁƒ‡ ¢££3dÈz_ä,Pí8Ü'NœØ·oŸŸŸß¸qãø” € ÙlvRRÒ‹/“’’¤¤¤† 2dÈAƒiii 4ˆN·œA T›wii©££cBBB`` ºº:_ƒPPFFFbbâ‹/RRR^¿~ýêÕ+&“YWÆZZZššššššZZZ222¤“¶ X Z¸Ÿ>}jgg7~üø£GJIIñ;€PÈÉÉyùòå›7oÞ¼y“šššššúæÍ›îÝ»s÷±–––†††´´4é°-@ Tk÷·oßöîÝ{þüùãÇÛØØ&€âp8Ü}üúõë>ÈÈȨ««kiiõíÛ·oß¾}úôéÛ·oïÞ½IGþ?(`jñp‡……­Y³FWW÷ĉ,K`Áh&//ïÝ»w©©©éééu_TUU©©©Õ•qŸ>}ÔÔÔúôéÓ§OŸÞ½{ xº,PÍî”””_~ù…Íf>|ø‡~p0QRR’žž^WÆ™™™iiiééé™™™™™™;wîÕ«Wß¾}Y,V=úöíÛ«W/Ì „ù {IDAT‹¥¬¬¬¬¬ÌóS²QÀÕèáNJJ:xðàÝ»w7nÜèìì,))I$€ˆ+))ÉÌÌLOOÏÍÍÍËËËÌÌüøñcÝ×¹¹¹_¿~­kâž={*)))++³X,‹¥¤¤¤¢¢R÷E›ÆÐ(ध§oذáßÿe0GŽéÓ§O»_ûpWWWŸ>}:..ÎÙÙyíÚµ²²²¼ ¼VYY™ŸŸŸ››››››ŸŸŸŸŸŸ“““ŸŸ_PP››[÷µ¸¸x=ê¾èÖ­[]mËËËËÉÉuëÖ­{÷îÊÊÊ(àæ”––:ÔÞÞÞÉɉÁ`¸»»ÿý÷ßñññí>¹®îp?þüòåËÞÞÞ+W®œ;wn—.]xøòåK^^^qqqAAAAAAQQQqqq][þüùË—/ÅÅÅŸ>}ÊÏÏ—””,--E7ÉÕÕ566öÒ¥KõK-ZdddäììÜŽW+//—––ÖÒÒª©©Y¸páâÅ‹µ´´x„FII‰œœ ¸Ifff[·n4iRý’»wïþþûï¡¡¡í{A&“ùüùó¡C‡ŠÔõNà{˜‚n‹Åb³ÙÜÊÉÉ100ÈÎÎnß òïp€pA7GBBâëׯâââõKªªªºvíZQQѾD@þ5Bg~¼¨°pqqÙ½{w£aòøŠC=LA· öNxaï„öNxñoïÄøñ¢¦««›À½„ÍfëèèÊÐ":ð´iÓ¼¼¼¸—xyyY[[“ÊÐ":Ì”””èëë;888::2 wwwOOÏ„„„vß{Ó) {'¼°w {×>tËÊʆ……ÅÄĨ©©©©©={ö,44THïü "‚Îÿmi7üoNxaï„öNxaïÚ§“‹‹ ?^WØ™šš’ŽÀGØ;á…½^Ø;áŧ½£ó[(‹ï0(`PÀ €@€  @ €0(`PÀ =|øpÞ¼yÊÊÊݺu9rd@@éD<öüùs'''yyy&“I: Ϥ§§ÛØØÈÉÉÉÉÉÙØØdddNÄK´ü–Õ¡÷¯Û“'OÔÕÕ%$$TUU'NœxíÚ5Ò¡ø"''GKK‹f?ŸÌïð|(à†ÆŸŸŸíæææââröìYÒ¡xiñâÅ=zôˆŒŒ$„gJKKÍÌÌ ÓÒÒÒÒÒ ÍÍÍËÊÊHçâú}ËêÑû×ÍÙÙÙÀÀàöíÛ¥¥¥‰‰‰›7oÞ·oß®]»Hçâ1‡³dÉ’={öÂ{œÿÅó×ÇÝÚ´iÓüQÿŸ6›=kÖ¬ÔÔT²©ø6·ðtuu½téRý’E‹9;;LÅ´ù–Õ_·:oß¾>|xQQé ¼tøðáøøx///šý| `whu¼ø¡¬¬LAA¡¢¢‚tÞ£Ío‹™™ÙÖ­['MšT¿äîÝ»¿ÿþ{hh(ÁTü@›oYShüëV'==ÝÐа  €tž‰_°`Att´¬¬,Í~>°;˜‚nAHHÈàÁƒI§€æ$%%éëës/ÑÓÓKNN&•ÚÆ¿nÅÅÅuox;::’ÎÂ3åååvvvžžž²²²¤³ð…ŠŠŠ¸¸xÏž=.\øòåKž¿> ¸9………Û·o?räé М¢¢"EEEî%Ý»w/,,$•Ú‡®¿nuçïÈËË?^VVÖÅÅ…t"žùé§ŸæÌ™3räHÒAøÂÚÚúÊ•+%%%111#FŒ?~|||<·Á&äääŒ7.,,Œt~¡Íw_\\¼²²’{Iee¥„„©<üC›oÙ÷hÿë–››ëíí­ªªº{÷nÒYx# `ìØ±ÕÕÕõKhüóÉápÜÝÝ'OžÌÛפՔ};pŸYÎ}(>~ü8uêÔC‡™››“ÈÅMí]ý£ôøî³X,6›Íb±ê—ääädggLÅ´ù–5@_·Ö_²dIzz:é < ©©ª¦¦V¿„®?Ÿurss544JKKyøš¢>ÍýŸ‘ú…YYYVVV‡ö?îýèêê&$$p/a³Ù:::¤ò@›Ðæ×­5†ž——G:o¼}û¶_¿~ >&˧ÏËR?þŠŠz///ÏÒÒòàÁƒfff¤³@«L›6ÍËË‹{‰———µµ5©<Ðz¢ö륭­M:o|?¡Z¿t4¾ð÷÷711áñ‹òvF› |||H§Ú|÷¿|ù¢®®¾ÿþÂÂÂÂÂÂ}ûöÕÍ‘ÎÅ{´ù–Õ£÷¯Û¤I“rss+++333ÏŸ?ß«W¯[·n‘ÎÅ/túù433»råJvvveeå»wïöï߯¤¤ËÛ­Ðyʾ}?)**’——|~ht…ýÇàÇ6l¨û௹¹ù‘#G¸ßšv´ü–Õ¡÷¯[xxøñãÇ,..f±XfffÛ·o8p o·BŸã Dð0(`PÀ €@€  @ €0(`PÀ €@€  @ €0(`PÀ €à?óæÍÛ²e ÷’Í›7Ïž=›Tcr8Ò€*>}ú4tèÐ7n :”Á`ÄÅÅYZZ²Ùl‹E:Ý` ÿéÞ½»»»ûŠ+jjjjjjV¬XqèÐ!´/?` ÙÛÛ<˜ÃáÜ¿ÿæÍ›¤ãÐ ÊÍÍ577/.. ÓÒÒ"€žPÀг³ó„  ^¼xqìØ1Òqè ïÀÿ¸wïÞÛ·ogΜéààïÞ=Ò‰è #`øOQQш#îܹ£¡¡Á`0’““§M›«  @:Ý` ÿqrrZ¸pa]û2 [[['''²©h #`0  @ €0(`PÀü?X 0‰(_¡IEND®B`‚gsl/doc/images/nlfit2.png0000664000175000017500000110707014057135461013651 0ustar eddedd‰PNG  IHDR X'bKGDÿÿÿ ½§“ IDATxœìg|TÕÖ‡Ÿ™ô¡„Pé D:¨`°,€•b#(bì‚‰ŠˆE5)‚D„PDz H ½‡LzoÓÿ!°]|ï½Þy~ó!ùïuÎÙsÎ>{¯½ö:g ’ðâÅ‹/^¼xñré0þ»+àÅ‹/^¼xñòOÃë`yñâÅ‹/^¼\b¼–/^¼xñâÅË%Æë`yñâÅ‹/^¼\b¼–/^¼xñâÅË%Æë`yñâÅ‹/^¼\b¼–/^¼xñâÅË%Æë`yñâÅ‹/^¼\b¼–/^¼xñâÅË%Æë`yñâÅ‹/^¼\b¼–/^¼xñâÅË%Æë`yñâÅ‹/^¼\b¼–/^¼xñâÅË%æŸà`­_¿þÞ{ï­U«VXXXçÎüñÇw¼xñâÅ‹/´´´&Mš †òâ™3gúõëWµjÕªU«öë×/99ùÿ§ô¯ñOp°®¿þúÌÌÌü155õ“O>‰‹‹›6mÚ¿»R^¼xñâÅ‹—¿‚¤!C†¼ùæ›åÅ¢¢¢^½zµoßþôéÓ§OŸnß¾ý7ÞXRRòw—þe ’þÅ]üÛyñÅß{ï½s~îÞ½{ï¾ûîcÇŽý{kåÅ‹/^¼xù |øá‡»wïž={¶ÁPæ¥|ôÑG;wîœ3gÎ9³vìØ166öo-ýËü"Xï¿ÿ~ù(bãÆ/IpÏ‹/^¼xñòÿÌîÝ»§N:yòäJzBBÂàÁƒË+ƒ^´hÑß]ú—ù'8X•X¾|ùÕW_ýï®ÅßÈù!Ç?„tþæ¿TTqÇÎóL.¤8*îÁ~žõ¼£˜Ï;réyU9Oq䟧£Ê‡Ãz¾™Ûyß’|±"E›6ÉfûmkffaRÒoÛTBDZ¯¿.1™þÔVkQÑÿÏlEEgW®,ø“1lkvvá¾}¿kV¼c‡³¸ø7 'NÈZ¹‘»))áìÙ‹nyâÈD§“œŒ èl™@þ…tËywÁù÷`?ÿf)¨Ü»È|^SùÆ9ÿŽvb9ÏæüžÁQñßßïmÎë *SIÑyUÿ#}éýÏ¥¥¥ƒž1cF•*U*%%%µmÛ¶¼Ò¦M›üÝ¥ý³ÈÎÎnÖ¬Ùúõëÿˆ±¿¿ÿ¿zú¼xñâÅ‹—ÿ<þø¸ùŸP‡s<þøão¾ùfùºûÛÏÏÏjµ–7¶Z­þþþwé_æÁJOO¿ë®»>ÿüó=züûJ'TÒ_ƒ©iÓ ›­‚>nœ@­Z©’>äi¡;.SœNuTDê•Éeâ/ûdè£à~:‘VfÖs‚ˆÑð¯ËÌ–qª2Ng ÜÊ”ƒ"^uf+ÛìVÆ j¸F…žš >)Õãžýܘ­ T=ãÙÉi)LBšê1˜£â™š*õ¤ì’œÒ0ŽTâqíä” îÖ²h%¬ÓY÷WPRŒâŸÒôdeIrÊ9S3ã7USm²I*PÖL=¯˜íúÑsÜå Š^¦»suDîݾ¨ÈÝêU¢ã.%WÃMŠHSk›Žzj×WBª/rúÊ„ÒëË~­œ¢D´3@9óÝJá!­¬¥´±³,YnqÛËŠGSŒÚÿ‰Ç,U¯Tú¤™rOâºu ÒõzsÅ §B´iFÙõX1Ewø*½ØM™gÜ¢Õ¢G»+uôÕ—ãäðœõÜlÝÚA(ÝÑ]{wª<±±2ªWO³gËéQ‡ÊÎ.+ÊÎÔKÃt™"PëÚÚ´¶¬hÛjÝTW‘¨wÝë©t‰>¦h& ,3NÞ­ÑÍÜmxÿ ¹†%»YßõS¨kÜ–i›5«¦âÑ¢rØ$Éi×ÞÇ•€–ø(å;·Yéím D”ÔJvWWbUv´L(½ž&—‘ÔKBj(w·`ÎÒ“"ÒÕÉ¡I•Òc‰ŠÜ¯»ì*–dSÉ/‘ èízÃu(“ŽLÕðxÅÕv—²Fkâ÷®ÞÍSž$‹lcµ Fñ“´Ü³Iñ=Z­„:íR¾Qz¤{ê×4Y$Ù¤¾ÊŠiˆr\{¥@ yº'iV‰e¨FšLž›øÕ‘¨¦ûUâQÞ-Ôu£ž[ö¦¥"^xN§Ã©.ÓDœ¸ùÃsWcù~£*±JÎ)gö‚ˆÖ³çzaió®UPW2•‰¾jÜEf‹Êó uíZ¾ó¤GÍÓäª"vô|çoøü-Z”””ôÊ+¯ü¥­ÿóÐ?…³g϶mÛvõêÕ| ¸ØQ^±ÛÕ¼y˜¦M+.¯[,jÒD É“+ì!-CaÍD„V¬-w”±ƒºèXr™øÀû"Zw¼U¦$™ä÷„ŒÃ´åx™È½ ˆÓ€yîÒKD¼òìßæT‡ "AÃ÷¹•<».Û+õQº[9iWë aÒ×%ne¾„"ôè åFÈt‹2­rJÊ–µ·öD*q–Ü>àrŽVB-O–{È™­u1ŠYs T*©D%“4)Nqó4Ï)§¤³:0UÇkعŽr¯>KPôO\ªLIN9Žë¥DEîÑ-f¹Æok¶™‘®vvw_Y"õ”H§$ÉY¢¬dBé d?í>1É/(%”6Áý•ŠëçÆJ@k©Èã®í›¨xƒâѦXÉ)I…©Šo¯8ôAÝöžöo-ÑW1ŠA1èËA2{FÙC[õhCE£{ôÁsUì6ÅQ£"Ñã½”ééNÍ›¥¶uêôÔ exjI‰‰êÖÍ=Ê^{­6m:WâHKË{ì1“Ñh‚¬= F¶'—k:®/—˜xrР~~®a~Ó¦©ãÇÛsrÊÛØ OÇǯkÛ6VÕ«—?Õ©“8`À‰‰ó+wÌœv{ÆŽ{ÞÿbÎÖÁ©SO/Y’¾uká©S¶ââ îäð¯ô6«µ8%%{Ïž³«Vš1cëÈ‘ç;U ;wÞ6jÔ™åË­ç9Iç°dd¤-^|`äÈõ‘‘KŒÆMݺ%ÀŠjÕöÇÆŸ8QÁÔáÈ_µêø€;}|\çü@ddf|¼£âpOŸžÝ·¯ LÙ¹³uÛ¶²â¬,ÅÆÊÇG ˆÅÇËnwÙlú*^­ÂøéµXå{|k‡]ñcÔÁG‘(æex<ݳ‡ôT[E£»´hbÙQ¶ÌÒˆ`Å 1-•âîBýÑìÞŠCã«éÔ:·åéMVà=íŠV‹Úh‘]’Möw´0Fñj‰CI™Ê|GïÄ)nƒ6¸ÏªÖÄ+fšžL×IINÙ¶è•E¯×Óv™%9e=¢‰ŠÜ§;¬n¯«4KýLŠHW»Û½+–ºKHM¤TIr)«»L(£©žÛ }¢ JDgGº'sªÖ·Wú©®òvyÎàlMõS<úyVI²hv”âHyü¡ìzl™¥§BƒF7Õ™_ÝbQžÞéïŽ|#«'–¸}'ÀP[[V–í¤¸HŒÑ•Š@BôÁY<›8š7O d0hÀ9sn;ëÎÙ7ޘѪ• LFcvTTéâÅ•¼"kjjêøñ{4p ù¿V©r*&¦dÏU${ýú#o½õSD„+6s.¬µó¾ûN}ñEáÁƒºN»=gÿþññ« ˜Y½ºËwù®yóò^×´ÀÀ¯""æµl¹$*êçAƒ6ÅÆ&Žs >þÔâÅ©6äìßoÉ­<™vñ½­9''gÿþÔ N-^| >>q̘M±±?´$*j^Ë–_EDLññ)_‡Yááñ0ÅÇgAd䦨Øãóæ]ì ’,¦ùó÷ñK«V ù²,$dßðáɳg;JKËÛÛssÓ'NÜwÕUî¨a@Àñ 7n¬´[ÛÑ£#G¦Õ¬éº^Y={–|õUÙõ²Z5q¢ÂÂòóSl¬òóË6Þ°F=¯vÇ;ï‰Ò¡ýeEÙéÞ[‘¨ƒQ“FÊṞ­þ¡ŠFÚ긧q–ækê}e‹ÇùË>ºl ŠCê+Ýý:<Ë}#¬}È»²æjÓuJ@+ª+Û“V‘ÿ“~­¢Dt´.?©¼¡2¡Ôª²î$9¤û%¤pi¿û´éq“"ÒÔÊæö·'ôr¢"wëÆR«tP3½B÷É$É*ó|½¯˜¥úØ)‡$“Loëí8Åm÷LÒVhwŒâcõeŠ'5[‡¢•ð¨ÖÉ*©XŽ»µ?R‰ïÊ}7m’å2™êË´ÁÝÛi„„ÔXîÉ¢Cº>K˜ÔÏ3C±8Õ:I$êyO7›gÓe«D‚>ô ™¥ª5KÄkÖa·’U¢ð÷Dœæ'•5ïWе~CVÏ¥Ë*Pø"ZóË5¢YKD¤êߪ¢’2ñÕñjq¢«·Ý&ÐС•õþýsÀôøã•ÃÞS¦dÓ¦eVÞà"üç8X¿ êÙ³çÊ•+ËÛ¯\¹²W¯^®¿ÿ¾Ò¿Ì?ÁÁJOOoݺõÒ¥KÿÔViiVÀhLùÙ­ïoqjýÊ+]Cxj@@΀–ó‚(¥‡Ÿ9rw.‡`O:gGŽ´œ>­ ñ¯8[展”§¤äìßvժófí›81q̘õ11Ë££uë6¯eËaat’F]ÜšøÍUW-êÖmytôσm9rßĉ‡gÍ:»jUÎþýÅ))N»ýw+öל*IN³9gÞ¼Cݺ¹Nc¢Ñx$**gÞ¼Ju¤¦ŽŸ~Å3`€¥ÜR¯$9¢èh÷emÚTåg}¿Ú”tp§†^§HôD”ž¸QYž±ôÌh­htw`Ù² Ó©Õ5Ü_1èíH¥{d[‰–Ç*űà^TêjºNmy^ñhŠ’>s[ÐêJ@¿´T‰§Áœ–SoÈdPj€Ì?yêú¢„$¹Wóõ¦I©ºÊâ™wÕ¤DEîR×B¹§˜ÙÚ·N#}JË\Ê6-ŒWÌL=›¯tI6Ù¦jjœâ¾Ô—vÙ%eªàYÍŠQ|‚g''UÐ_Ë¢•àéŽ)3R‰Ýµë¤J%9¤û”!ÓÝÊr]¼t©®„ô§ö¿ZåŸ*ƒIË<§ÿb‹ƒÁËtØÓy.;#â<]Ç<È §eˆSÀ[:œ%I€Ó©^Š=>§ìÂnH’¡îÒá³eâèÏE¤Ú?X¡·¸ûQ¡á/«<‹š5èü±¾wïl0YPIÿî»Hl¶ß¿]ý ŸKî`4lØðí·ßÎÉÉÉÉÉ;vl£FŠŠŠþîÒ¿^ùqûÿ.N̽ø’Aù }|vúùí¹k³I‡cÿ¤¦tG›´H‹â7Q‹T$©TEßè•xÅü¬/]ÚµVÃ}B‹]ŠUûÔ'Q‘Gô„SIef¨»IYŠvÊ8+5”ºÉµpi?£œ»dòSFkÙ==ÖRFœ:ð’P‚AÇÞw›å×·M¾¹JyGÜgÛ´S“š( Õž¯Ê®Ê®ôLuÅ Q tÌ3ˆçë½û=)ƃTê¹ý’vhPE¢H4¤“ön)ÛÏo¤ÚHúùgµiã{õªì¹;æU«r 0ùøT–T¼í¥¥Y³f%µm{Î?8¿jÕoxK—ÊÙºÖÂÂücÇÒ6o>µxñ¡éÓ7nó³ÏÞGŒHŒ‹Kš<ùÄ÷ߛ֭Ë=p 4#ã_9Ð_vª\˜;;räîðp÷’kµjgbcÍ•’±$kbbî A&??wX±I“Âñã•r 5fŒªVMãÇËâéUœN-ž§ÈË/œœ—‘¢¸‡Ü)}½ëhñŒ²²f–ú+=Þ\'=A¦ÂL}­4Ì oceó%ó€>kíNiß:Ñ=,9,Z}¯âÑ´÷$°çns?²¡“,žû%ùEORã9WĦ¼GdBÙ½Uz.5|Œ„ä/¹}Ç7)"U Ìrgh¤ëëDEîT§¤XŒ̲Æi~Œâ'k¥+ųPÖ¡ú9Z <¡¨Ó*í¡_#•¸ÄÓ5MRa„LW+-ÍóøÎíRo¹ùf§;?5Öã'ýÆâàGž†PdSïE¼>ôÜ 6‡Ú|.âô¦'½ ˜¹YĨΠÊñD3mvµ!¢õf¹@rº‚»Ép­6üZ&nÛ%C=…4RjºÊóh¡Jáéuë,` KÍήF,)2ò€ËÁÒæ¿ÅÁ’tòäÉ;ï¼³J•*UªT¹óÎ;+%lý}¥±òÿú.þ{ 8‰/¼P9§xëV«Á` MMK«Ð|sr.ÐÂ…ì×nªÖLÙåüº¹ËE¤êôV~¹ññÉ"Z×*ëEOg+ô)£UÊÓ#‹Dœz—‹u½´UÄ«õ|Y=5:¡pÈy …Có„I×dÊâ”$‡'üNÏn³ä¸Fé2MðDÔRN¤»h×a¹#r3u Z õS¦g1qŽÖÇ(þ%}•ë~2È6MÓÊÏ>³”<]OÅ+fÜëtgõóõIPŸ3rO…ÍJÞ£›yL/8e—dWJº:˜‘­{œîü‰ÓR é&É,Iöe¶‘ ¥_!›'èÜCOû[Ê♑Ÿ˜¨%F% ý±r:$©$M "f×QæN÷Ù¶hÁƒ®y¿~$‹g›uJã»(=î«ÅcÜ{P¹aï‰:ééqN­š§è+‰®5h䥜,»x¹Ùz-Öý°XËšš:±B²ó§ŸªF |}õÜs:ïÆ¶;V0rdZx¸;v–cÛ¿¿’™{…+00~­ZuOíÚG££SÇ/NL¬0S®HáÁƒ§¾øbç}÷Ÿ³µëþûO}ñEÞöíf“ÉYéÚ?Ï%ém-YYù{÷šæÍ»`NÕÖÞ½Œ›½qãù«¥ç°¦¥åÌ›w&6ö@ddR»v¿•ÀžŸ_ŸÑºµë´_,1N……úüsÕ®-† SùUÅÝ;Ô§«;Šyk%–s¾Í%š9^×UU$êä§÷cUèq¾K ôþpåOlÕËW*=¦óËe–ÞVú´¹ÒöÈu¶­…Zz“âÑŒj2yŒŸ´ú¨jyý³ÏxòI®ºŠ¤$Ëô›îcÕz^λ¯¹‰ë†²q7¯>ÂØán1·ˆæ“‘Ïœçyð·8~//¤Imº¤ ›õe<]JóOÉ*áÛþÜÛ  ÔN›ï9VÀؼÚÀ.ºnbGïdòÕùZ ÙÊ„Ëx®@±hŸÅ;/‡2® ÀYh 9ð ` Ö{È|KÍîøorz1YW8›…Þ`ÇN2šQíºúatàœÈÒ#¤6¢ÎsôñÅXDÑT¦Pp ×ÜÁÀ)~]EÅ£¯ìy]^ÒnF?ÍÖõW·ã­éäyŸHn.qq|ö;²u+½zÃ]wáë{®Éb±,^\2eŠeõjWó ¸ñÆà˜˜ÀŠf¶´´¬iÓÌä|óÍ9Ñ7<<´G*×_zýõÁmÚ`¼ðûYJNœÈÙ¸1gÓ¦Ì+JÏœq‰¡-Z<ýªW¬W/0"¯zu×'°^½€ˆˆê]ºøÕ¨a0¨øË¬å±X,+uãtJÂå8œûÛ5tºßyî×3 €Áó¹èn%98r8p–{ý¤Áh4øùU>!N§l6ìv×Ñ1ðó3øùUþvN'v;çÞk4P¶+ ›Õ]j0àPþ2á°c³º+ãã‹¿?cÙnmfä~øx¶rذ[ >øxì…Ý‚Ó`ôÅ7ÀuV,s€91ð rËŽÃ `ôÃàÞÜi0bðq‹*'âm¸ß~.EXà ‡°ü ¸ª-V!F\ï”›|'N;vÀ_#FÀŽÓ þø0¸;N0àãºVdGFÄ\§Ìü1Np½ö7wUP*€ ƒû+9¡ÄéQ vav€`#F€C”Ú‚}ÝŠD‰ A/>ž‹Vbq8ññ1äWvýK,‚üËÌNJÍ` $°¬5Ù˜Í Uhbf3v;¾¾ÀnÇlÖÉ“Ž+¯ô©R¥B›ìÕëÈÚµ…ãÇ×5*âîƒáÓ?húgáºsÿ‡ù_w°$ÝtÓÑU« ÆŽ­÷ê«åK÷í³_sM¦¯¯áСZ –õÝ‘‘ìÙøq¼ür™ýž´¿ ?o¤A}·¸ó ‡àïËÁï¹²ž[œµ†‡&R§‡¾ Z€ÝIäÛì=Ë›}}»ÛlÚ.†&P7”C# X—JÏü}Øu7-«,¢ýz,NVtâ¦Z« ¸ù(þvµ¤e À+=²ü\“ëý@„íЀ÷(œHQ]|V^£ç`žÀ|7á¯pPˆí96¤Qr#—=Ã5@¥ãø!—âhu?Ý€4Ò¾äK¶[¹µ#],I$ÁÀ;YzÀaæå;#þx£&WÅì;“NJjsÿå<Ø9˜M?'yAô¯ÆD0Âè90f€YÈ{óB¨>€ÛyëKÑ|ªÓx1¡Ý²Öx7ö£¸ö|«à´òËÃûšz´{–O¸ÏxÖ!¾¿ô=ø5žŽ±îÞno3¦8›ê—ñè\š\`-eæ(&tëÏSS ©æÞOÆY>}…ås¨]ŸÇ^çÎÇÊÆÝU Œ~š3'zGóö§\v…»èÈÞ{¹s1›®¸‚¡CyôQêÖ-ß2m;w–L™R:w®Š‹cDDðàÁÁO>ésùååÍ,'NmÜX´iSÁO?YO:§CCC;w®Ú­[HÇŽ†‹¼n·èСìuërÖ­³æäìÞmÍÊ’ÃqAK CBBèè‹•zñâå’“—§jÕ*xWÛ·wêt¨jUW¼À÷O9XŸÿ 5|Âë`ý/—ƒµfMaTÔ‘Úµ}OjTa";p`Þܹ¥<<}zXy}íZzõ"4”Ç©W¯L`8ßüÈ#÷1ýÃ2qÐëÌYƽ7ñí8·"qãk¬Ýˈh>æ×å† Ô¯Æºç¹ª–Û¬û 6'ót'&Þâ6ºži‡è\›Mw¸§Sc2ú0W³÷:ªø£ÀϳùüI쮼†>#è9¨lš´ ϰw @Ë<ÿm»¹‹Ì¥LŸÄıÌðyr$AîÒ¼<æÍcÒ$\?}ããCÏžÄÆ]~z«üüÒï¾+ž4Éî1 ¸õÖ§Ÿ¸ñÆóÃH6“©hÓ¦‚Õ«‹6n4—ûýcHHh—.!ݺ…vï^¥GÃoF˜¥¥¶Ü\KjªÙd²åæÚrsÍ©©“É–›Ûøå—«wíúÛzñò?ʼnŸ:°à»¬CòOŸ »¢ax³-ûßwU¯›.á!¤Ê7ú]wÿñǼ—_®;n\ýò¿‘ü»x¬¿ ¯ƒ% K—C[·úiƒ'Ÿ¬UÞàÔ)G³f™‡öî­Õ²¥où¢þýY°€Áƒ™5«LÀÇx¬&5íØø “Sõiq+±FŒ =|œÌªve|(—y¬=ÁH¡+x9œ»+s$,¡ÄVak Ìð*Œ@¾AÑ` ôuªÄÈAò2¿ÀàCƒÏ(9ɶ›)>JðUtZAH€“?°þ1,¹„6 ××Ôõ8@‡²èQ̹„5 ß×\Þ *.6ëÉ#s¨V å0?|ÀOÓZtcèG4éàÞÄšï™øig0¸±?O¿O„'^•–¸—Y0‰ˆËõ6ýUè27ndÒ$~üѽÌÔ¸1=Æ£^¾)Z7n,ž4Éì1ómÚ4è‘G‚‡5Ö¨Á…°¥¦mÜèv¶ÄÓƒƒƒÛµ íÞ½JTTh÷îÆJË^¼xùØÍ¥ËbcŽ,]|~QÓÛûÞ6iŠï¹©Ô%åÐ!s«VIþþÆ'®Žˆðó:Xÿ x, äöï¢aÀ#GZùúV˜<ùdþgŸ•ôëøý÷ÕËëÉÉ4oNi)ë×Ó½{™ûŸ|É7óãŒ2ñ)ÄM¡]3¿*[)9“÷pmc¶Np¯ÐgÓø{žÙwþ0ú{\±çâÃ-t¨ÇÖÇÜ!«„Óô]IUö÷çòP¸ÐBá†"n8ŒÑÀ¦ft 8d'2‹1¿:ývBW°Á¸ €ÕX†ã oð1g¿&ãJgÐ<#0•¤Åœ¬AÀGô¨A ð›fU‚_å®j„-`AI5©ùXDîBÆ04¢CúƒAØw0.ƒ„wãÝ jÙ$œâM0\ÅØêÜXø%—!ÂV…WBÀJ¸>qÿZyñ'<NBb©ú‘[L{—”Q` âuêÅXÒÙ~;ù; ¨KÇ¥„µß·o_ë†UYs?é[0úÒîUÚ¿îÎVÉ?ÂûIތї¯r½G?¼–é’ŸJ•Z<4‹«o“µs˜9’Ü4 ºõçá÷©íq¤Ì%Ì~Yïa)õ$f½Fp¨»ô×팎e×6€.×óÖÇ´¬ð›£¤¥1k_|k™/ €¾}‰‰!*ª¼•ãìÙ’©SK¦Nu¦¦ư°€¨(ÿž=ý¯»Î·U«‹%]ÙÒÒŠ6lp­$–ìÚuÎÙ2øùµiS5*ªJTTHçÎ>¡¡ÜÜ‹—;Ô^H¹ÐÏW{JÁ+7Ô¾ºë}³or÷ÚÛð/óã£[±äb¥MnísÇ´9—öˆ.zèÔ¬YÙÇך<¹åF·?‚Á`˜ö7Té1¯ƒõ¿üýÏ5A§“Ö­“0Ï™ÓðÁ+ÌûSSMšd””hóæðÎýÊÍØ±DF²}{Ùø•™M㮲ö{n𬙔ZhÑŸÓ©ÌÃC}Üb‰…VÃ9•ÁgOðÄmnñãŸJŸYÆÁ7 (´Òr2g ø"ša‘n³~«øá$·5`©géðü…ÂçÎòQ:ÍÙÕ×Êç'ÅÄnd_-êÆÁ«PöB×—¢`:ÅWâ³’ZU0”à|˜CÇ)íIµ÷hdÍÖ}d· ú8ºøbtâœÈ²Ã˜®¢öóôñÅÇŽ}3L˜®âªyЈ1ƒSk˜VHæ5ÜÜ‘»ÖmŒÉaõºònÕ€4f¤0Ù€o#> £+`fi.ƒ£*q!İ úîÙ`þ¼‘™ TûÒ„›õ%g†!;µž¤Á$0â(fç2–ãJäü|ÿ.aaa8íü:–]o!'õo¤çWG8í¬Ëú·“†½¸{¡…ÌBÒ z>Eÿðñ0óÃû,x«™€`ú<ޝèqM*%f=9ŽÛ<ñ*§“o¦3þU²3i߉* Œá–;ñ+×ÞœN~þ™)SX¸» yszˆ¡C)©r8ÌË–•Lš$«Õº~½»W©âß©“T”·n~Oº²gdoÛæZI,ùõ×sÉà-ZXOžô©^ݧzuÿzõü""\ûV¯îçù7°Q#ƒ7âååßÁt°:?ýb÷—ÜÏmú`Ü–Þuý}i¬ã«–/|è¾ß¶¹kæ·zßz  œ=kmÔh¿ÃÁ¡C­7àÏ;X3~ßêOó°×Áú_þþå›àôéY=vºuë ={ZVZØ~ùåÂñã‹¢¢V­ªà{•”ТgÎ0s&C†”éoL nÚ³%¡lÁgîrަN Ž,¤jˆ[\¸…»ÇÂÁψ¨àÝßcË žâÃn³ï0`>Õ94‚Ú!i%´œO®…onä¾Fp¡…B‹èp}¥ÄÖæãË·ç°ÜÂÍ,¯œÐ~†[a)ÀŠú½[_¿ :pË∥þ`êùXžaCæ>\ãNT·Œcaiú07ùäOej1Åé|37g9¸’OØ;r÷5Ü Ø)ÙÂ+ù¯JÃ.¼ãG¤4f lÂ'¡´Jù.ç€0>æ~¶B4dCOøªX&ç.T@ÀT_ˆ¡ @Þœ|g)Õî¢áב½ÃHþ£?mgPÿ÷YNYÍÚA”¤T›fq¹Çu=¹†R”FHmîœEã[$~žÄ‚qظ²#C¿%¼¡Û>+™Ù¯òË$jÖç¾×¹ù±²ÄöocÂ3ìÛ Ð²/L¤Ç /Èã“ñ,[ÀÉcuëóÀ£<ðõ*¤®“’œ9LžLr2@` ðÌ3´o_ÞÊ‘œlY±Âº~½uýz‡çy@Àêßµ«þ×_ïסÃż"{vvц …¿üR´~½Ól6o²dƒ{1ëY·²/…È·qНÐÎ3¶FÍÒ£ iËÌ;ÝÊ´C ]Ox î¡V \h¡pw aKsk€ÉA›,²Ä‡ m!>W½Na¿™¬Bô!a÷ l¡àiŽ&Ò¸+aÀ ò_d³ÇÓ´ârà,Ùï±È‚ý~ºß@K ™äYÌràˆ&:’Hà$¿®fŠPhÁu€•üÍŒ,"¥&­;gÄtšw²øÁ‡Ð¦ÄÓ (fz£Á§:“é @Üg!–AmÛNrnÙ_j,ÅX  pÇïÀ‘O•hô#>a ¾Äñº‚ËÓtŒûéôÒtÖæìO`àê§èüF?€â æøJ0Ðé)nòèG×3ýArÏR“?'Òㇷ1íYmh|-C?¢¥§—”Xö“F’æNÌzæê6p—ä³ø;f|ÊÁ}F#Ýz10†[ïªø¿ƒe˘4‰5kÜëz‘‘ÄÄðàƒ„„P‡Éd۴ɺq£uÓ&[¹u@|}ýÚ¶ ˆŠòëÖÍ¿Gcµj\gi©#7מ›kKMµ™Lçÿ}ùĉU{÷¾Øæ^¼ü}ü®ƒåãçUï›.Kxø—í5›4Ë;}rZ×kšEßytŧÝþÛÖæ ïlþpüßRï?F×çFu}þåß¶Éɱ_qž¢"ç®]-Úµ v‰^ë? gfüâçgˆ­ ¼ûnZ¥¢jÕŒ/¾¼üra¥ÖòÀtíJz:ãË݃¡!¼ö4ÀȱîÅÀ``³ |ð§LeÆŸ>NH _­eí^·Òº>OÞ€Ãɰ98=‡ûøV‚|™½‡µ§Üʣ͉ªO–™¶º•¡¼ÚÁ°}Ú® fL=CO“c¨çÔ0€ç 8b¨Sx\U¸ß÷ ^¦à 6  U# ¯q* pa#h |ξ£ä—Qó!z`›`.çò>ô–±ì§€†´»žAÀF¾>ÎÀŸ°NŒ ¢V6ûvò®p€á FUç&EGyÊÌi „GCyy>ôéêU>ÌÈ‘„‡³s'ÆQ¯Ʊo_ùVêS¯^à€U?þ8<1±NZZõÅ‹CGŽô‹ŒÄé´íÜYô}û¦‡‡g¶j•?l˜yþ|gV1ùÕ«ÔªUÕ¨¨šƒ×~úézqqWÄÇ7NHh¶qc«¤$¯wåå?‡ÍzUÏÞÀÑe‹£Ë€+o¸Ñy®wþ/çã3ŠŠœ·ßvλú øÿ /^«Œ'ž¨U³¦ïúõE›6U*zúéúõ}vì°ýø£¹¼n0ðñÇtëÆ7ßpút™3& 9|œYóËÄNWóÀ-˜­Œ*÷N·+j3ª?#¾ÀfgãÆÀ›}©_§˜¶ÑmÖ¨:£º#± ›ÀS®#Ä—ÙGXyÖm6ª1ªqª„Q‡„á–ËP+.§òJØ áô€Ý>WQs~íp'«¶ÝA­h¶‘Àf”îçPẇ>¹OOXìu¬¿†Œ¥®KÊÕOÓwU’±í81Ï}¥;=Í#¨Ö”íÄ·'i@HM†/æ®wðáðZÞŽdîãf¸7é>€Ï2d<!lœÏ-™5ŠÒB€ bâXx„Ûa)eÊÜÕ”¥³ËÂKm"y/žÝ&Þ‹§Y+ÒML~—N ¹·7 ó9÷Jª&M?žädfΤK ˜2…6m¸á>þ˜¤$*Î ŒµköéSeüøðÄĺyy5V­ 3& *Êàëk?p dÊ”Ü{îI¯U+£Q£üaÃJgÏv”oÖ^¼üwrUÔÍ G–.Ž._b0/yÔ¿‹âbçgŸe#GÖý]ãßÀø7|¼x—+|ýÑ£McǦöí[mÑ¢F•Œ?û¬äÉ'ó›5óÝ¿¿–o…760p sç2d3g–‰ß-æ¾Ç©W‡£› ö<–{î• ë§Ò£[´Ú¹&–ƒÉŒÂÈþnqþNî™Bõ`½Ií*Vm¿àPã£éyŸÀû{xiW„²¡~p¡…“Ú¤ÐÁ7 ¹¯@¾h›ÉioVat(@1DÂaxÆó%èV²ŽbLðx€qèæ[¨1–†€½Æ–$rÚþ&|0}ÊÊýœ¹œš/q‡?¾BßòíŽÔ¢Ö£<@°v³Ò¿[‰ )ÇÑ­¼j§ôJn¿šÇ'棌(bwW5eª/a |^,á»® áù\‹nÅÐVB5XרˆÜ~X~ÂXê‹ð¿ÀžÃñ>mÆ·—ÒÀšÅî!d, Ÿ¢Åûý¬ù¬ʉùMÑ#ß K>‹‡r`>@›AD_0@I.+ÞeÍDìBéý<·ŒÂÏ“á”u–Ù¯¸³jÔãþ1Üô¨ûMZÀ®uLx–ÿ\ÑCèo…'*Ø»“9S˜?‹ n}ú äá'+gh<ȬYL™Âe—¹ãXUªÐ©QQtëFÇŽ\$Ã]ÅÅÖÍ›­6Xׯ·mÛ&sÙD¿G™ÍÆðð²O:eתu±÷AxñòÿÀIr!%ÿë¾½M;·Z±~Îm7ÔïØå¾Ë~{C:kñ9Ç~/«QÓæw\²¬?Lþù³;‡lÙÒ¼¼þg—¿ù}«?ÍýÿóK„^«Â×Ïζ_qž’çÞ½-¯¾ºÂÛJl6Z´È8~Ü1cFµ‡ªPtêÍ›c³‘˜H;Û$ѵ/[w2þUF>Yf7…7Î{eúýô|… öO¦a·ý)K÷1¤ 3ò˜¦çL‚üØ?œ†Õ¢ÓBvfñLk>êâ6{”Ei8Äš.T÷˜šEÌiªù°·%—ûl°rC6FØNG?€]Ðl®—ÉÀv7Ù-ðBÈ'1áP Žç¸üj9˜ŸaC.–~4zˆ@1–wX˜Y.áÝ‚eÓ  ïG?|@˜{ þEó|8—YìÞΛNlÍØ„{‡‰)åX­šð¹Áà(dB ø…ñi®g2-0æA ÌÃ%ÊBÞƒ˜`¤Ú<û8‹91€üåCi´ª®7ˆãïqh4²Q­‘ßt…[ß÷1ÛGá°Þލï¨ÚÄ}i·ObÕHê¶ãžï¨ÞÄ}êÓ3ÿyö-ø?öÎ;*ª«ûûŸ¦Ð»(ET¤b±b=jÔ$jb7j,±×Xc&v‰=ö5ö‚Æ‚ETDQDšôSïûÇÌHÑóü’çÉ»Âw±\²Ï¾gιs¹wß]¾ÛÁÞk¨c(¢n²yÑw<¹ÏÆú!­–3»Y;ÊU‰ÁÞ‘OFÓ¥?NÕK^i¤¾æÀvölæås©”N=2†Æ-KhåæòÛo<ÈÕ«ú\xÌÍiÚ”N qãß3¶P«Uèr¶”AA¢J•4Ñå>3$ÛÓ§åQ ü/ðžVÈOk¯,œãØ*.øJÛùKý†zëÏ"æüé£C>+_§çö}5;t)_ç=¡R îîáqqÊ'Ü»v-•:\a`ýPa`•Ýþ”)ñwïÔ¨!Û¾½z™¡={ ×®Í72]¸`kfVªÔpòdBBprbÿþbáÅ`&ƒT‰TqÐ Šh:;kúwfèGÅÊý–ó,‰šUØ;U/‰I¥Ýj*[°ð#Ú{ÔŽð<[SN~fèã’AsØÈYÝŒU4-n`bD5S¶é™_ø8†×jÌŒ8]SßukrW”hᲞÞ}ì1œAýA ב'†õX×A \!k)qMÀE—ðEæîÚ`Ü·68Éd­ä„-~¸u .EÖ.vYa%GÞ›Þ"DÂ%¶f‘¤¤°cmp’¹ý5rìªÒÖž€šŒ' —b/ ö`½rYYÀ6¦ 4G×åQ€)°$ðµ!__CöXGAŠùLLGjâF’s­ çEØÕŸ ¬Bû"³#/šºq꣗§…r±/3r_øîýôò¤P÷EfFæ >Ü@C5"u‘C“H{ŽÔ§Úô^‹ák®fû4Ð’ùšúí¹¾˜1KYÄÑÍü²‘çñoÅýk4lK¯´íUìî´Z®_b÷&Îá I T«Éç_Ðo8Öo9“¹~à`®_G—áÞªW®`b‚Ÿ´kG‹ü‡»F£IHÐ&'kÓÒô?))ÚÔÔR¿feÙž8!¯¨"¬Àÿïi`e¿ŒÝÜLÏ0÷eH„…“óßa`ñßåÁúñÇÔ}û2%.^ô,Süþg ¬£ÕšJ g…õoÞÿ;/ÁÄD•‡Gxa¡öúõZM›–*È7N QÍœi¾x±EÉ¡´4ÜÝÉÎæÂ…R=†ðë9|ÂεŃèó5¶–DýB%}ib:µFQÕ&wÅ‹N¾«oÏ2ó(5+ñp.¦2€×ùÔþôB6wc˜¡0n ïãiEØÇ˜HžæÓà*ùú£¡*Å IDATó©#@ªšº$«XâÌ×UÐ$0ýLØm  ….p>€ó† ú4²vSX £3Ø[#¶ô‰–ýŒ·+rà¯Öó@†x ͼ°ÂxùçDˆÆÐÑWà5¯·³]ÂÿùP„H‹&ˆM±„™aÝ©Øñ\c%PñUùPô„/T¤XX“ïEHvd3 ´fŒ²d¶®Á-,}:æëÏNþrr¦€Å7˜ÏÓ}“$Í'q¾B[Eî2œ*†*BU&á_‘° ú|–#6Pårk2‘›j £ÙZ}¸P™Ë¹I„nhô-gcfp?jÕÜÞÍ¡)ä§#–ÐòKº/ÀÌ`ý( 8ó»ç (ÀØŒOfÐs2²nч78³‡_·¡,p©ÉÇ#ùh(–¥í§×Iœ:Ćå$¾05£W?.KUZ¬ÿšà`=âÈÂËӳÌÌhޜ֭iÝš€Ê„Àÿ*• Õ–ßf§ø›ð†éª t–SI+jGûæ©áUê5èú2d™ýÇø¯1¹kµ8;?LNV9R³gϲ%ÀÖ?Ö;¶ÿõ× K—&·li~åŠW™¡{÷T¥I$¢Gì==K=‡–,aÖ,êÕ#4´8ö—€wK ‹¸t¨˜wè:SÁ îÆöyÅÂç¹·*„ÿ€‰ @­¥Ñî¿bZG–¢öûÂùü,å<…«€RKÃ#<Ê`R]V4Ñ«ýø’Ѱ–ò°%UMÎçÐù)bW½Ð™ŽÏÔø¥‘+°Ý]Ø3êC,+Ÿ¡é÷Q"ß‹­˜Éó dVÃøgjY`üHøibm¯$Ðà$¡'¸kŒt:9a Ä¿“*T~À€ÕYÖ&mŽmw¦šc Är2œ"Ä ˜âD  ˆ¸h†©È°¦KEEœÊâ+… [³RO.Ê*›õÂÂd 5¦C°Ú€ÔHYOQ­¨±©¡AwÜ&ÂÇ¡U`Õ¿ú¦:@ôN‚G£ÎÇÚ›v°­c¸&6q˜çAHÍh6…_cd05ô‰Y«P+1µ¡ë<ÚŒAl¸lÒØñµ>1ËÞ…‹Kµ2r³8¹ƒýkIx “Ó²;½FШ‡; ç³ãG®ém¦€æ M‡î˜ý>{n.·oDP%¹ÌÌhÚ”æÍ ¤eËß #V ÿ ¼¿usõw׿_ÜbƼÆc'ñ·X:<¿t>âðþ´'‘ú^„µ||>îó×ö"LOWÛÛ?hÜØìæÍZou­0°þø÷X))ŠÊ•,ˆž3Ç£ÌPv¶ÆÝ=<-Mý6'ðÅÙÛ¶tì(?{¶”;¡°//^½bÏ>//ÒñŽÖöâþùbjî˜xêô¡HIÐÚ:ש5L"ì9sú²À‰ ‰¥é2Dpkþ†PÒ§‡8AÛžÈ÷Óh| Àånú@¡ÝC8ùšö•8×Xïá™Ïò×¸É õÆÊ`G!ƒ³0b·à7h\€¶¼FÛ‰´×hFc6K@vO")h‚åÜiæqûinX-£™1Flåb1öX|MOsŒç<ßË^ šv´kNs@â4k’‰±¢rw¦˜` D³?š="$Ìt (äi4_ªÉ±ãÃêÌÓù×”\Ï`¨@®œ@¶ŠÐ¹O@_(€n°LŠNÕ¡ã°Þ‡HG“…ýP% ±§úv¬ A®ìPBûÿ ‰u~ÄÙðedEÔ‡ŒGHLhô-¾ãõòŒgœ›HôI[:®ÀÓ@ؼ~ÂÁ‰„Ÿ¨ìEïUú;:DßaÓ8žÜðmň5Ô(íÒj¹{‰#›¸t­ÀÛŸž#èÒãÒUÙ±ÏØ³…½[ÈLÇÚ–¼|êÑ¢-ÛМrÞ›SR¸|YÿS’SÔ‚–-iÖ °·ÇÞž*UŠ9ß*P ü£pw¿vÍ+0°ì{Ô©S)]»V¾p!µ];ûw[Öß„¯õàANýúVgââ>°¶––]½:eâÄWÞÞÆú”éN˜’¢õòJÍÊÒžeŒ–ÂÊôsa‚.,¨&2ƒ~’¥Ôµe—]»î;ÐR¡œD'TÝ&£+Ú4¤M°=‰Ø@Fì`²O‡±¸|Hç<ÌåÑ—$ìp@12Prs‘›<¸©áîöâ"g'’ò F[:­ÆÁàåžààDRcêv¥÷j**U-ç¶°{6Ù©x5ÁÄœŽ#hÚ£Ò¡º”ŽmæÐ2SÌ­èЇÏ&Pû”ZaG÷ò0”Ýß´»A&Ç¿ ÍZÓ´5þMÿ~[›”®\)•³U«QQ¥tärlm±±ÁÆ''3OÏß™±ø÷BxÛ½ô—àéSÅ´iñG–-xZµºqõjó•+c&Nt{{ômˆD¢Óõò€.Ö¿yÿ"‘N,[æ=mZÙkT©||ÇÄ(¶m«>dˆ]™Ñ5kò'LÈ©YÓ(<¼’±qñ_V‹¿?aa¬XÁ¤IÅúç.Óés,-ˆ¼Š“!KG©¢þçD¾`ñhf2­³³³'ï°ÚzV¾ü¶Dÿ—Y ¤Î|ž§±¬Ó ÔðÓç0fRŒ¢¦ ”N®ËrC ð×dzÜÅXÌÔ±ˆQàIކíÕl/Ð0(5£LÙ` †6 ]à¤!¿i;³È6Ft »ºH‡ä$Z‰0‹j=±È›Ìõ|Týðì«ç_(ø–£Yä·¡v_ôôw¹{ŠS"Dóqmj…äž`yÉ•qëÂ)r±á%g%˜6a‘5@.!¯øNE–%M«3W„ЗA?51F¸Ú²O‚®YD t‚gP΂;€:’ŒNhâø`{6;ÏÒÊÊ RÖ? A‰©?nû‘»ëO_üNBS€y-üba0˜¢wr} ª<¬½hw[C»VÍým\šMA*b †Òv¦•ô£—7p|.E9Ii5Šblðågqx)דàPŽ#èðÖ†+FÝ(¸zœ#›¸ ëáÛ¼eåçz‹«AÜ &ì*•^.‘¼¯g+1‘Ë—yõŠèhRSIK#%…ׯÉ+KljT$¹W ¥¡„aÛB7ñ3ÿõFÖÓ§ •Jðñ)û²t÷nV@@0tËÊRYY½W>¥H$:ó—¯:WXÿæýë ,ggãçÏÛÊdeyÑöîÍè×ï…³³4:Ú×Ô´Ô¨FƒŸ_ÚǪŋ-fÎ,åž=}š?ÄÆ†gÏJ5áýh0ÇÏ—Ív¿J›/1–~7g€G9W¯Sk©Ùì›Jß–zÍKQ´[±„‡sq7$ö>Ä¡ÚTçâÀß C°ý ¬¸ÕÝ.w¦3(31÷¼ñ2x¤¦q…{­ùÌ êC:¬C¦½—ŒÎbo‹8Iú7ÄJmÀà à>©ó¹£E˜Š_ œ€ç¼^ÁIô¦yKôd-׸v‰KFõ¥¯;î@>™Çù>—tg¼;1Æ©€ÆŠ®È°hÊR \\Bž1YK%Íj²LŒ  %+“JdË.):‹'ºÀ}¨§¡€6‰ŒÎ¨`äô4m­‡ÏÇú½Üåy_1Yàú¶†(o^$÷z“ŽØï¥Ô0„³žÔ›Œ‡Óxiq¸(ÌàÊ|B6 UclCëy”H½ÊNâÄ7oAÐbåH·o,Ѭ0?›k8¾†WM>¢ãê}PöE8*”#9³‡Â|€JNôΧc°©ÄÛø¿[%¡PžNf&™™$%‘˜Hçά T  ¶\¾=tË¿/ZVÿË'OIQ98”½½{ß;t( ºý©¬ ëïÀ¿ÝÀª_ÿJXXÎÏ?×4ȥ̨ yï^ÁÒ¥Îo“ä+[¶L71EDTªVͨäP»v\¼È´i,[V,ŒKÀ§…e³ÝÌe÷i:6åìºbáÖ [K"ÄÚPÈ8p;»nÑÚ“K“ôÚ´|7ð:Ÿº0ÚÈõv 0_Cƒ«<Íg¦;‹ \t^°;?SnÖB&XŸÏجńÚSÃà8ô€@øt1%BÏÒ ïÀJ^í%ÅÉj9#Žñ|+2Œ–ÒÔkàÏÎñ Œ/h€Þ_x 7¸!EÚŸþ®¸9¤gyÙթ׎‘bÄÚP¾K⺫¦,3Ç( ò)ãÕd˜áãÎ 6€@A&_*¸(ÂÔ†Mr}þX| çÁ~ÚL2?By #g¬¶!7džjrˆIÆ>»¸þˆØ @SÈã Ämpü„z[è}…ÜGÔ¯¡øÍÁ¢zñ·˜ŹI<;`çEÇ•x” ¿yy㉹P­!}ÖP³Äe!<¸È¹MÜ:†ZàìE»!tŽEéB¼lÎ`ÿžGHe´úè‰ð%ñ×[¨@Þ…<…ÚsÆù¤¬¢Ê–òè¥,MÞa ý_ V eÒW€/ <=‰P©ºþ)ëì_»8:UXÿæý‹D¢;^ æëkñða«·#å—/ç¶immmô왯]Y_kß¾Yöéc²©Ù°0üý‘ÉxòW×bù‚•Ì[^6ÛýuÞŸ™Ãáïø¸­^(´™É•pÆucͽ0=Ÿy¤ä²u C Lî¿>¡Ç~̤„ÄÝ@¡¡áQg° !³ <72iy.5¡•@žÿH¢‹˜\™åÛ²W&G‹l§·º–Â×à÷@gc¾Ix…Ù,-Â$b‚ÉöÄd+µLëyxŽ8[ŒWh‹1p‘ðƒÜ0B<Šup„“œ %TŽ|0ƒ«PÈ á+ä{и5CDˆ´¨CX˜J¨ öÍXf‚  á)_)x%ÇŃõrt{Pg3£€½ ±â;Sú „A°d°P("k Úx”·0‹årC"¤ï$nÚŒ½qÛ‰!ü¿“ð1¨ó0óÄÿ–õõòg{yº›WgËðIÃ…ÈJä€GŸàìD2cÜÚÑy-ö†”)A ô0‡§‡H„ß'|²ÛW ‘Ä¥œÞ@j€Ì˜æŸÒc"n J©iµÜ¾À¡ ŸÒ'Â{5 íÇ4n‡·ÙÐaI¼±åפ¼jÄ üG(RiLFü Ûß—Ôûmˆ†ù?Îð·â¿°¼ò˜s$bÑ }òâœîµôôù/|èW_…ÿðCì!U·o¯ÿ§ ¬ßþ†Å´©0°þÍû‰DJ¥ÖÝýR\\áéÓ:wvx[§S§§çÎåLšTyÅŠ².®øx·wj^žpé’]›6¥ªÙ?ÿœ}ûÊ6Ïy“í¾ò&Ž(–ÿô £¾ÅÑžÈÃXdá/ñ›€VKÈ*ò÷ܦÿ6¬Lˆø'ƒQ÷Ù/ì§yU®A迗Ƙk„¤qñCZ;éÕfE±ä5L k‰¥ànÍ£P wGGœ¥¥A±¦™³Ì@ à7h — ý;ß$¼oÀZÇðžfOžSØëeÔƒa·ÂI¯…ÍšJG¸sŽ0)’ñtöÀ~á—Ç<6ÃlCì°Rˆ=Å*E>´ä3@ƒâ6s3ˆ0éËäX*ÒŸ1®€'RìÝYkŠ.D%ä²2 2g’“uB˜߃–¸²´ä-"whb½#CÛ™¢Hž÷¡ðbcœ—â`ÿå=!´9Ëñ^V.ÌO tQ[´Ûã7›Ú_é¹µ­Š ü6Eb)£h³¹¡:U‘ÇéÅ­B­ÀØ‚Î3i=º81K?ƒ†»§9±–õ| îþtA›þÈK¦&rzÖcSIß{ÇÄ ÏúÔ¤q;ê"ûýôöß3¶<¼‰{µ V6Tv¢²#V6e­^³¼Äùÿå?;u£@è7mTÓÿ1„Åe7˜§ëþ}è¾A…õŸaýر»¼™ó{2 =gœ/Pê{†šÈŒ¢–´wµûÏ›1¿22T®®AšGZùúZVXÿsüÛ ,A¾ÿ>fڴȶmí/^lò¶ÎÇ… DH$¢ÈÈÚnne©—,É›5+×ÇGVIZÂü¦yNH~~ÅòóWèøæD]+Îv×j ÆÍ‡Lüœ^‚õ§&oeå1<¸µ‚7)’ÝàÄCz7äÀp½$½ß $ç±¶3cé… B™w3~‚@-Ðì:!Y ­ÊVÀ²df$PIÂ¥wT¦¡†_mèf ðFƼðGÑ`¢rÐ ÇñKœ€\”“N¦  .“¨°‡k׈4F6™®®Ø4ûÙÿŒgVX e¨%–@"OΰNƒª4¥7 &ÿ&³²‰±¤zS¾•bh)ˆaZ·Œ°pg…9ús϶æ‚ÖŒ/,™oàL]“@ ã`ˆƒƒƒKÉì‹&‘Ö›1þÔð­’0ƒ”µ6Sm F:2Ö""§ób-@•ÔÛ†ÔÀ›z—›I°ñ¡É ªv*þî Ò¸º;? h0±£Õ•0Â2_ql·váÞœ—÷¨ÛÆS³9eø” [9·…Üt3kZô¦ûxª–~9V*»FÐ!î]áå“b¹±)ušà× ÿVø6.ÏØÊÉâö5®ÿÆ­«ð4òw5uØq‚öq’û{X³»ÕZØK¿ýyÇ"üª_ê?ð¡[‰õÇßaý´û>øbDÊ?ÿ¤ Øtw÷͸R’f®;‡7ü[?tÁ‚èyó¢?üÐáäÉF–«ÂÀú;Pa` 99jW× ìlõíÛ•åÌݵ+½Û]»j”R*…:uÒ¢£Õ«W[Ž_Šö}âDV¯¦cGΖn÷ʱ³ôëÅîõÅÂGÏðïVKÈ.ÈM øŒæe ?áKÓ:.ßùäqt= AªãOøh?¦RÂFâa  ÖÒâ8·RàÁÎ6zµÈ<ü¯QX‚Þ] žr!‡–œñЛ!ßæ13—JbÂìq2ƒæP[à ÚßNx¿MÎ8žiS£¶À+r§p½õ¼{Q¶pé.1O¡{½/Jµ›ÝqÄU¢Ò†˜`ÄqŽ4¨èр΀‚ì›LÏ#Á‘u­³±T/˜—Éy²,°AŸ{TÄé,Æ(ŒùКõ"tÆñn *èÛôaAm:ÙC(:`2«z–, ó0/‡£ÉBV ·ý˜Lðä#<øU&®øíÇÆÐxy‚ãÉ}àÚ•f«°t/M åìâ®8úÑi5®-ŠGŸ^ãü÷<:©wSUkHË/ ø y©K •‚ÛÇ9¾†Èë"õ>x7³‘Bøm\çNOî7Ið¬G£vÔkŽ_KÌßÍÖ¨GQ!Ù™de’’Dr"Ù™dgò:‰×‰de’ɂմü‹{þ¡ea,‹DN6Æ‹õ]wNP|f¡R-ä+Ôå<ƒÿðÁÿÓo/–~’”UTßÕú‡õ;®NÏSmî!—ˆC! KO=‰JÊu´6žÛÝ{`óâ¨nȋ̙‡ߊÉÐ BÃ6 {ú´ô*&"ÚtùÅ·§ž$g+T³ZÞ§NóÅWJ.ã÷¦ÍÈWÎ=q2,99»ÈÙÆdx«êÓ»xéòÊlääƒä¹G#"s]íLFµqßÞýí´‡¤¬¢¯?ŠHIËUT²÷ðsZòIm cÉÎPÎÐï­¼ÌòÞ©–¯P›<îjgúËWûm IÈ,Êû©ûï-òU­ƒ°½W™ø½ó_ Ô˜}ù««éí9­Çì »ð8E$õp^Ó¯ž©¬Tm\ŽJ½•VŽÂ;‘œU´éJ¬@ég«ˆá-k8Yÿ9GoëZö­k½«lå-(ÚêÕ/&'+._nÚª•ÝŸ5°®ü©e½ZUXÿæý¿¹§N\¾<¦o_§}ûüÞV‹Wzz>V(´wîxûû—õñž>­˜6-ÇÊJ|â„­mq±af&îîddpþ<%Ûàê²Ýó ¸tˆ6%<“W±r>Üü#Ã4‡¯óéRl̉ú ÃpÍE&ÄÑŠˆo°6,§ßö>¢YU®Ñ·|žCý_ÈU±ÿúh(ÖÅ2.{[á(HQS/‚dß»0¥2€:gp^A+íÐÝ~vÃ0†+ s“½3á})+x%G¼OÌ€[$/á0›†¨ hÐnà\8¯l0ŸJw;ÌŠŸù9™dgœ2P† xÁý‹lÒ¢m§ui’ö˜M¯¹cŽKcæ£cÐâYýš="ÄU™^ }a ’ë|!##ж˜†ô"ô‚øŽ€.'¿–Üé ¤~XïGb ŸUÆòü3òo!’PeNsõþ°Â—„ö%ó" ³ð˜[\ ¨.$|-aKPæ –â3Š†ó‘•°Ý£OpfY±ž]é¼ëêÅ£)O ÞÊmä¦[ЗV£¨ZŸ2xvs›¸¼‡¢|[GÚäÃ1ØW-«©C~ïp;èÝÆV½æÔ¤q{,ÞñšñßÇX2‰¸k½*Gî%F,nïíd“’ï>ýܧÎGï%ªµÂl`}ôºóÊëo~u²6~£Ðhí¶^"A)–¿¹kŠD\šÖB÷|ð*»é¢Ë…†¨ “ˆ¯}ݪ‘› p.üu§ÅÓV²§æ*Þ,£œi{¬½ùëý¤’+\ÐÓgN÷Ze6r-:­õÒkÚ÷óUŸÕÐÁÒhûݵkOÒÔÚbµ¡-ªoêWþ å •³ò’Ëû=5µV~qÔÎ\æbcòàU¶Nÿ÷Y¾UÎù×hÉG­M¥•ÍC^d¾Q˜ØÁ}åguù}|s,rþ¯ä¾ý;1ï#ïozxÿ±lÜøräÈG Z…„´àÏ3¹ßüÏ×ø»hú¯7°Êrü;1aB ™L|èPÒóçoº¸ÈF®¤Õ2ujüÛ£]ºÈœŒnÜP.]ZŠÈƆ©S¦N-~®ÎÌø `ììâ,`þ—xTÅÌ„-%(u?i·dæ1m{±pl[šÕ$)›Y¿ 肳7^±î¶^âfÉwF^ã•ai_U§³iJ‡é_¯$l¯Žf&p;@ »¬qsEÉ·†ûÃWP=@w³—!Ú†meŒ‚Q|KŽNí3zQIv21)¨€&Té—€°‚û/ÈŒI{ªd’·šS9räýéo‡] ûÙ¯F Ô AK‚臣L°÷e¤Usy̤\b¹0Ñ™±Bß& /È”ÑÜžcF8* N£‡†d>€KP.B[Ð}§"ÌÆcw‰;ªPÒü)44d•UÇë2ã4$Íçi'T¯LªÑô25Æ!hˆžOXò 7b‰ õ§Ó; ïZÂײ¯&ákЪõ žÝý˜vK‘™}’|šÒp®<èµ”¥¯qïv(r¹¶‰E XÒk›P–¸DÝý³‘Ÿ³‘j¾d$qx_Ô`A7‚xûÖffI£vŒ]Ê®»\ÎbÃM§^sD""ï±-3zó=²|ø4dz1’߯ÏÏáþ5B¯rÿ*wÑ A±žõôDk{¬í±­Œµ=VvXÛ#ý{Û¾OVâª.ΓN׫juþÍ_¹“‘´ºKåñ§Þy`ÿÇ”Ñt™t&!³ðé²îæ@trž××çߨÙ~u"3_URß­’YÌwSÏÆ¦<[Ö±¦ƒð<5¿æ´s5*™=ÿ®#à<ñtbVÑ›Ñg)yÓßkZÿo.…¾ÌªjkÒÃÏ©­w¥¾•ßDµJž"‡q§Rsñ+;;۔ǯ‘[¤ž~0üØýÄäì¢7÷þ?œ¡œ¡rV^ry¨ö`Áu«Zýá"Ë\%-ÿüë4ïÏÿ ¾«œ]ä8á´X$ÒlëYÎéúÿŃuôhr¯^wkÔ0Žn£ãn¨ð`ýð^4¯ÿLZs×®ø-[âæÌñ°³+ûä°±1š>½òôé S§Æ‡†úˆK;þêÕ“~ò‰ñÁƒE ämÞ\œËblÌüù ÂìÙ|ò Ɔà»LÊÚEtüŒoVÐç#œ [=ZÓ©©úìMÉ”ÕìZ ÖtäëO™·‡±¹¿©À׉éYxŠa; ›ƒ± «'ê²ë!ƒqm¨>P¸µus!ž SÀɘÍuéu—)´µÃË`© Wò¸_ÀØWì¨ÐZÆts–ä1#‡S¶T#…ЮÃ4X @Cdó±œIö ²k!©‹T‚è;ÜIÁbâP]¨7—ÛiÍáö2šÙ 7A6žÎßsâé?q~,¥Ù`3€?óóžçøG|$BäKù÷8ñÛ¤È]©#ż ‹î³<‰·™ãÏt]¿B;ºaõ‚¯Ó9®!»KÄȨjljL*¹›N7vÊð‡pK.ÿR¡+L‡ AdõnäÈMá.Tw°>€´€uwLïó¢y׈nK•Ù8ÎAdD•ضÀd±ˆÛDÒAÜgPcb9€½Ý®ðò7'ÅÙ®8·£é*l},œé¹ÿáœ@R(Çy„úƒñìZLLZÙ‹^Kéö Opm‘A\ÛĵMTó§Åš @jxæùâHF"ç·ð*Š«û9IÈI3k|šãÓ‚Ú-ð(kl™Yø!ʃëÜ",˜¨PŠ ˆ-Ý*Gciƒ¥ öNŒÿ¯·"˜?­›Ô´½ù,#ôeÖ­˜Œ@O;˲•(ºÈ«­>úîæP*.§P]F?9»H÷Ÿ„Ì"ÀÅVÿuèl‘„ÌBݯiyJ ªa´ªm©dƒr¦Ý:Ô¿ÿ¦Ç 9ë‚bÖÅT¶”Ó¸…gÙsY*à·?qßíWcuÿ‰Jy9Ë™¡œ¡rVþ§Ô¼-Þg‘å ü󯃯‹þõ¸Š•1 ý£©[ײ‡÷ŠÐépãYƅǯË×éPÛ¡©{Ùî å.à±|y 0i’ÛÛÌX`Öß K__‹*;—ºqcÜÌ™e€qã~ø!õÁƒÂ}û2úõ³-3ºh‘ÅÑ£EÛ·LœhæãS|VdíZîßgýz¦L)ÖïЊž9z†i ÙóC±ü§™’Ú½Ù}š!ÝŠ›@Ïø„}WxǪ_™f ŸÕ…_B‰HâÛ³Ì7t^×…ßb¹Ïê[Ln à`ÂÆô8Ï´Û´sÆË g¸°+ž~÷¹ˆT„\ÄA7ü"Ù™N{KúÛÌ· QÑ"údrÞ T†ÃÐ Ö@=À`LÃQí¥`™g°·Cl…d%îCˆ:Mº;&©,A<›€YÜ|Fön}K3 ¤˜L ËwBâf‚FÒ^ŒØ‡~ôÛÉÎ<#ïLgÀŸ®j”8ÄÆÎŒsÄSŒÔéø1޳!,ªÃW:Ö´ôä§gLÈâÊ3ÆÖd¥æb¬mÙŸÉHAô1ÐÚH$A°¦Â·pö£k³c2i#²ú zHz,–b6@VÏK$-"yIóÉ»B=HÙQ{ ÕF9•×'‰œAÜj-ÁÑP“X­U;ñ#wç‘Ä?¼†°ãJ®-~—‡»šNnzbîH½4Yœ›%5ÆÿSü?%)‚›;¹¶‰—÷xù%GfÐdmÇw6´u¢ï\€‹ˆ&ò:ƒyAÈ)BNÈMqk@í@¼›S»%f¥ÓÛM©Hý@MGQHømcIŠ%+ÌT2RÈJ#;¬4”E¤%‘–ÄóRâÿ'ÐËßù泌iõ‚ÐËß©Í÷¬í·5“%gÅgºU2bRJ…þ­M¥éyÊì ÝÞæ´1“¦ä(^¦xV1bÓòS½š¹,)«xÚ'I¹ï9m}W«ðEíÂr.E¤î¹wçyæà-÷t¾Ÿ’¨l)Ï,LÎV¼±áÞ‰C! À±qM;ש¬Pk-GŸÊ*gåJMW@ð‡‹,åŸ$²eMëZ•Þ3ÇÈÈW®{Wx´ î¼ÈÜ3²‘½ù_æ¾~=ãÆL[[éàÁe¹„Þ¯;úߊ ³µºèõš5/ŠŠ´o‹,pfÏNP(ʾ÷xxH¾øÂT£aΜR÷M±˜Å‹/&£tBËš…˜™²÷(—‚‹…Õ™9`Ô·(”z¡Lº/æï#6E/”KØ:±ˆ%§ 3äZXÉù©+À¬‹D¤ê…Ug°'j>¿„ʰ³u¾T3á^6‹žê%îrV»ŒzIt€¾µÄBÌoJ¦é“¬h › w Ë^‚¥Òx4£ÈÒ½¨ºa¼€êbXOüU²S$ói\‹—äÎçvjÀóqt6Ãø/抮îÆç¾ô5Âèw®qÍð¹=½i©FuŽR‰Dˆë2Ú“Ï´YÍ^¦u¼Ø,£r.¡Oª$ajËvSú d0¸€}ˆ`<C ¸ à~K’ZØÝÆlB9Èì…6@$Áé<. u"÷2õÉ6´I5¯EÀ š\À¢ùϸכëMɼe¸døŽ§o ¾ã´Dnâ€aËÐ*AW 8ñ/¨;{oò’¸¾ŒµîìëÎÓS%.HGz-åÛ—ôßHÕdri-s§‰ {?F÷Z˜§¢Á/<Ëaž?ßøëÕ‚3h}\kFCÆm¿ìÍ ¡)× -tn*i“B`»5ƒ ¯¯#a#¸Â]ÐÝÀÞ0¼Äl®¾4m$m Ñ£íxÕÄH§h:7^SPûy4’!bIYÉ)ªÖÔþÌÐ:ЍCÒ¢íHÇ&4„ߨúŒ»NxðQe}6±œzÌF¡:Ýj3\„P‘ú”±…<“áäÁ:ctéfï¤!²a`¬C4¤èÙÃÐfbäŠõ>d††6êTb‘}D8ŒÅå{D†/]PójOæ¢x "?Ág9&%®¨¬HnNæÕ+Oáö)%‘t{›x° u!€…u0«·.Ë—÷¸¶‰;{PäXV¡é ZÄ®zYÍ7(È!ú‚xÌÓÔ% UܨßïæÔiM¥wü ü7Q~ÊTI/Tý¹¼ÊnXÝ&d^þÈAõ‡ Gî%~¼þÖ›_mLta&þùð×KKºÖ«rhLcàYJ^Ý9K>øMeF·ç¶ÑYlÇB{®+žÖÅÆ$>³Ð'–3íôCáߎ.¹Â>\öjTf#ÁOÓ[~{¥äýìû>u¦tò 4º¬º~æ¡>†e"3òªb—mc&ÍXß­œÊ*gå%—÷žj¸È*ãO½ÎÑÛ—eªË?ÿoÊ_KÓõ$9·Îì‹*Í;^Î߆D, [ðAmç²é¼ÿ¢£ó½½/K¥¢ØØªT)ŽáþÙ¬ûÿ÷¥¼…ÿú¬ V)Lžì,_þ\û®B$±˜Å‹€… “22ʦ8:ŠÇ3fÌÈ-3´|9b1kÖðüy)ùÔÑxÕ$"šµ[õ’àà`™”Ÿ¾F$bñVž—¨qY=+3ŽÝâÄbáÒ^¸Øp'–.—Ð숅œC,Ö{0—òskŒD,¾Ï-ƒ,ЖIn¨úÝ'×°› ®Ôs·€¹‰zIS«-FesÏð¹Z@ôÝ¡•oÁZŠè'ò Ï{‚cGl ÐL&&5`‡ñBÛ HÚ Bµhê8Œ¢ƒ£Ë<>Å=ݱµ¨Õ•®Ày·ˆµfH]Ú'uŠUq<ÔiVçÃL#åD+T€”Jžl4£Ž’Ä' ËG÷Ê(²`²%‹@”ÇŠÈ„è‹)­à ¬l‚æ`põ÷Â>iš8Ò[“¿Zˆ¤î'q^‚Ȉ”õ<ëFžát‹$¸Ž u5§ –’tˆË><[†ÆbíMçÓt8†•ÙÑõæt'²K0‚:úÓu#_Òþ;l=ÈMÔ;´~ÌË+¥rRªùÓ#Kãé³Gr’9·ŒÙî¬ïÊí½¤Çò6L-©ßŽAKù.˜½i|s†Þ3ñ D*'ù9g7±jC«1²ë†sã0ñOP¼£ºöŸƒ:½–,‰wÖ ½A/§ïzûV±26–5÷°;:¶ÿpßÊûG5òq²”‰mÍdŸ7©úÓ }Û"wóËÓ[¶õ®d*32“KÚ×v¸úu+_ÃC´‡ŸÓ²O}+[Ê¥F-<íOMlf"3jMùÓ.þ¸öô.ž®v¦2‰ØÕÎtl»š—n”@ ‡Ýþ‘|œ,å±W‹UŸÕܱ¬u¬ëW¿…§½‰ÌÈ×Ùòøø¦Ë>õ­jkâbcRþ å •³ò÷ݼK—R—û€ÄÆâæÆŽ¥9w™Q3ptàÀF\J|àÀ¹<‹ÇŃK‹…k޳å<–¦œùKCŽìñŒ?€ƒû†ãfHˆ Žã“ƒ¸Ù°²#M qùé·9‡•œÓ°”(´4½Ž‰˜Úl2”(†äÓåÆÌs¤£á&0"››*¤çì¨$H†¨°Ê°Â¬"¯âï°j€P¢N´#^‹‡ð’ܯ¹é†•-ò‰ÔÓùœ»•KŽØ6Ä­=úÕÜæöe.[aÕ–¶žxÚëì!ij:tðF_Í—ÎÖXá&BÔ™Ì-EÏ™QÈ3¹òµzÿSg²-£1Ö¬ó&Žpú‚R`-|n«É]DÞBdM™b½±Á…™wƒÔÈ:†‘¦T]ƒÜÐÛ(ŒãÉlâwc׊ü§ÔZ‚Ë0$‚hU<ÙNÈ,¤–&á1€€%¿•ÌíµDC$FfЉ~Ãð†É[š:‡Ö­]ØVÅÌŽç7±rÄ=ïvx·ÃÞ­¬~IhÔ¼x@XÁD“ŸàîOQ>ñQÈŒ1·ÁÌ;'l1·ÁÜ['l1·¡F=L,Ê›üÿ[èŠÑLdF?ú_¯¥(…W¯ ûö½Ÿž®üõ׆^^¥†þYÖßQ*éý¯÷`UXe·¿eKÜðá=<Ì?n-•¾##òáÃB?¿H‘ˆû÷½}}˦|®^?qbŽ··äáÃJ’ñ„jÕ"/S§èÒ¥Ô!ŸdÿqzvæÈÖbaj&µ>&#‡=‹øÜ@ã®ÑÒj×#ÖÍc‹•mgç-ZyriRqS™ù6[îÄL  ÔÒüWî¦ò¹;{ ¥£òð¿F†Ý èg°—¿fj<•$„ùà$P´Ïàš’Ö2ÎÛé#߆V (Íð>‹œíä;btûʈT”ˆ 6¨ª[`4Ù³¸Y„º+Õ¿ÄWwìžmã0€VÍÑSÚ_åêoü&AÒ~Õ©®ÿ¸p‹Ã@Cºû¡'>È!ö6sdZQ³óäØêxV¥p@„¤:smÑŸ}%!YÂD蹎Öü(ÃÐfˆ˜«Áð-+Ï“ÙmF.XïEf a×’¾•„™hrã0 ǯ—¸ß¥_%r Y!¶-©½«¯ïEi„¯æþR Uqjƒ÷ÌÞÊWÍK&â7Vý@jFÏ M•·òŸòÒxò~%ü¬žÜAûx¶Â« ž­Ëv•.š˜P"‚‰ºAækžÝCYXžþô4ì"D"ý¿%ÿ£ÿ?‚ ÿá]ÿy/ˆ0’ !6B,.¶Vß ­Fÿ#”߈K3ÄÐký­«OÒ|ä9¤i•ÌÕ¸ýQ¿„¾nâfssv«2š†ùÕj}m±±¬´š€V‰V !–#*(#¨ú½‹¤ˆd%v$ .æ%GT2_[ºH™ŒKø …îòeLZ-ºO‹‘¿ù-*-À©HO*¬Û’ #6¢øCU¨"©A( (QFˆ%†ÃµJ4€±Ä°0 ‚ A rDF†OW ¨õÐs“h¡•H»V (A&¢â}jÑ€Œ "-jäF¼¹s«µiL%Å÷Æ"5j-F"J&Ü+Õ(5ˆE˜–ÈïPk(R!yñáZ‚"01.NÌTj D"LMJq­ÆÆHJù … R!‘`lüŽË¸ @«Õ"—‹Þù$Û±#¾_?çݻ˺+ ¬* ¬²Û×h„ºu¯FDä®_ï;fLõw8nÜ«uëRͯ^õ*CZ¤Ráë›­^¿Þj̘R•Ø+W2y2®®<~Œy‰‡or Þ-ÉÊáןéÞ¡X¾õW†-ÄÞšÈÃØÜáOh0ŽB%§¿¡³!›*«€: ˆÏduoÆ *44Þ̃×|é¯Ï|žåà÷ ¹*~nÍ O½pKÃb.án žµA ]žr.‡–æ\òÔ3>$k H#^ÃWf¬3x¶v Âyh­;ðé7PÖEz ;cD@ù3ybUÆ ·ã’6Ÿ;J´½ñ`0§~ãñ~®‹ ¥múʸsœ»Å-)ÒþôwEoDsã*»´h½hÞ‚þ:Ò¬Rî07S±À\ÿYB"›“Ø"G†;1Ð ÂÛ‚— Y©ß#s&X0ÞИí„QPÞpƒ ˆ&ž¬Ïÿ{çeÕôÿϦ÷ž@èMz“P¤ ¢TPA&BA°PT€  ¨t%éRBÝÐIh!Ȧ÷M6[ç÷GöÎî&õý½Ïõ¼×¥sí»sæ>{·sΜ™ïÌ`8ÎøÌÄw–mm3¦¡‰&û;°àZƒ³ mk ©ëIœ‚>•5GÐìsÜí|995™’4ò®¢r¢FoZާndEB,$"~%‰Û3@xQ´‰KUácÙ·I<@â®rP¶Ê-[ÍŸz`«œ :´yhóÈM#Wcýž—FŽò=7•₇õШ·ÎýÉ¿¸y¤XȪ4•TÃéaµMôÅÜ>Iânç®ÈÌÉ…ÚmhÚ‡f}hÔÕ–ÞžÒâ?ýqÏŒD‡ÚŽ*¿¾Ûy࣎&íük$|Ëõ5µ ¢î34CÝ62(Þµ™²¬9ÒšÎÃÍ.ê¾ä<÷Þ³z–½ÚQ{)>Ýl­¥±¼Ž%§¢6OŒÅ¥1V€už1—Ç;2œ`©;Ö]T1—o1ÑD¾7­±Ø…ÀŒ>ž…™œuÆ#‚©aXËäÝáüAV›1ÖçÑÞŒ*S°ôèײ6´0Â^ãµ²bV™|Nl!%m©7–>eð9s8mÀò,õGcÍ)¨¦h<·ÌÈjV¬Å )ZŠÖ§Ý×ÇȃÇà ‚-Ê{¿OOÿ\~Uª£sÓ˜¥!Ì…‹Í©î `zžàD‘ÕØÑÁzìíBÚm£ÀÀÊŒij=v["ƒ7áíÊy¥°pþ>Åláð$z(žÕœ"Z¾Mz_å»J›O½ÍþÓŒìϺmÌì\šõ ;—_V0Ìî-†eófú÷g×.~B‚©M›,•Š+WB7®ˆOÿè#Í'Ÿ¤µjåyî\³*“/\¾\Ô¶íQUBÂã V,1ò¯‚õþU°ª¸ü_Mþyuh¨Û­[½ýüªˆË(,47mz5-Íøãõ_~¹bʆíÛK Ê rºy3Ô¾xŽÙLÇŽœ;Ç”),\èpÈ×k?“:5ùîÓ“Oö±¶¡Ï8eÔ³|÷‘Mø‹í|°†A\YF ¢¨í¼Ä€ex¹q~&•U;!‹ö+Ñ™Øñují ^ûoÔƒhªèm/ŸgC*­ý8Ýͺ#Ì2ñh©F> çcÜrÎH·tÂJÆ(#z2| Áp«B”‡¥?Ùw1¿€çWXÿã4…¸eDÆSëª)ÌŒ¨MÈ«4}kvŒÝœÿ³Î8½É“­© Kìyλãþ¯UÇš:ì.²Ê„±mz3ÆWÀHÑææ‘èŠoG> TÒØd²é_€%ŒkóþwGSÆ|î»×Ûí±]Ëb°¸Ñ5oœ(Wz`\OXQ _qbÁ­7ëq²[zKâ¹÷Ú8¯öÔ^ŠO[«IËí/¸µ‹L¢ÑtkƬ2ÊŽ'q%7Öa.ðkDÓÑ4…G¥t8¹·8÷ç¾CWVø9Œ¶¯;dv¨Lÿ[ÊÖƒ¨TK^™fSEA&ù™fS˜E^F–{phqþ¡TÃ?¿ëw¿PÛÏÿ1•)U·Ž“ÇÍ£U(UºÒ¸'¾˜J¹º‰“‹È¸|SÔ?F?è¶>ÐÉÉ¥]½€)ý?ÓFÉVg1pç7W’zÀʩޕ–ïQïy[ê2 ûW'Pt ¤7-–àk—Ö”CÚÇd-C̸„>“P»Êßö/˜{$?àTî >ÃàøB ¼¤ðÍE,ѲÌnt `ÙÉã7ËÊÆçóG2ZÐг,3`¤è,ss­cdV Víã*‡O°Q–ôêÌ0%^ÄZ*4ˆ ×yÝ íçìÈAÛŒZïðt™ùê:ùqJ‡©?õÞRö$7(Ë"ÌCªìŽvR:–<'XKPoÜ3 €=ÐŽCYò±&:åoa®/3•¹î¸–^7°¿?ByÖçù"‰ÚžœïNYC£…ž±œÌà…l¶V(ESD«oÉÕ±rc”ºhzæs9•IOòÅ ¶§ôÒçür”^­9ø‰Í"µn¯Î&ØŸ„Í„ÙÍýO ÍÚ<´o/ölpx³~ÿ~ýðòâêUêÕshêÛ7wï^ý{ïy/YRñµ¼uKߪU‚^o‰‹kÚ¹³7UQ¿~§ÿ=kâÄ‹5¯Üúw¬›.õ·é‘¼‚…üƒé!—ß­[ÄΚuýA?ü êjÕ.æå™*·ö铚ɓ *ðÏžggqq‘sçøf³<)„Ësø×ïŠGgQµ—ƒgì„-Ò}ª)¯.v~í!J:/“ÙÆüò„-¡ŸIºÖÆ|ù#­6K‰ÑÊ)2J“ÃB¬Œ¿bû£P\ã¥çuÙoc®+4⪑£zå|D"Ei.R~ÁWÅÐPÒÂE³\l¼Gr:ˆº½¨·KV93N4eg¤Äþ*·Ë™Ûät”ÄŒ“UWä^Ç"–Ͳ9Z¢?“ϲìÏÛkåý‰Ú. tÊ™DwZæÄJäny!Cl÷.Ož“Î{6ý~\—€‘kym«ßÈußsíà¢ti«‘ðtiY*‡ìnj‰ÈÅ©5R¤ÈÖ¢?(éÕEƒ¤‡Ié^‡'!ÉÝ$—êˆQ«$y¤ÒÚµ7äL¤Ä"±È¡G$=V*PIºœ_ ?Õ“$ùÎ]ö‘´ãÅDĨ“«›ä»ÎD#sœd]¹¾C,–*„í)+IŽÆHÌ™$QØ>„KÌ9#Ùwþ¤‡ÿ:•j%a¿ì˜-‹ûÈ87Û%¼é"ó"dëT¹¸CtÇ`Eʹ!û§Ê ë ü¼šìŸ*ùw«,N•ó d}MëCùÞOŽFIî•Jb·D=Dy¸D³É¡ÕbŒ%rÞ_ÔH¼«¤Œ“ãšîJvgÑ )œ-b7˜%FÄ]‘v"7mGˆ&[ž×H¸FjÊ"¶)K~—Žj‰¸#s, ¿X2Ë›±yPÞ(’ûåg¦–1#cղîsÓzY-Ñ‹dQžä•1 ¥ä#Œh IDATÙ%1 å×R±N"ÉRø’ü)±_Êy‹X_¿»Rú¤\Œõ‡r»üJ.‰¡¤…‹fÝäðŽ"ÕERN¡EZd y>WÊßæ £¦m¢¤ÉGRb°1=%DŠ÷ rKccfçKØ“B„üà8d÷þ!„‹WIr4ÅÅÒ €|ù¥T Ý»KA˜žm®Ø&Ò¿ÿMPõÀ1øÇÙëï¿';[_¥ÀßZÜäÿÀç®`ˆÈ?úúòøOÊS©b½½wk4¥U X,Ò³çuPO˜R¹õüyƒ““ÆÍ-íÆ c…¦ñã¤C19*fñ—Ĺ–<ÒE.%:ðç¬"¤ñó¢³GIiâó‚)ÛNؘù%Rgš%ŸÙ-÷f‹ô^+DËÀŸmÌ"ƒ4Ù(ÄÈø8S/XÙf§ |)¨%ð¼Ü²» 艹.÷”K(i)‚Èsv ÂnÑÕMMÑìÛÁ›$3BÔ$~¿ä–3Hʉ ±ûl³«l’“Q󎬾)Ö2‰éGù1Z¢×Ëz{+W4dZŒDm’è"¥[‹˜/Ê×±¹SÞ•ß˘F]ÉÖ1Ï|^ïO×xmkÙ§OW?¯á÷ë˜!™º! ×H™)b7×ÊZoDšˆ\°±M©’ý¸h³E‹ÅN‡s±¤Î–s¢FÎyKêl±8¾KYûåÖ•ød)¬´T[Ìr¿ì"+­‹úÖIˆ£¶¢¤ˆÜ;![GÈ\w«¢ðuc90]’‰±¤ a‡ó4ÉÝxÙÿ¥|3@&8([3‘ÇȱUri§Ü>%ÙwD_ü'½ý‡Èd¼T¹wQöKÜ÷²uŠ,è,oºØNõ-WYØE¶Ï„}RZÕý±'‹YÒ/Ê©¥òËó­²Þ±5ÝåòÏbª¼\Y¬Oa•‹õ)ll&——TñLZ¹>[vyH,²Û[®Ï³ÎA `¿\m!jDÜè#º«ŽÇ›¥8FÒÃDƒdÔÃiû#E†Ù)ú¶gZ*GÓ¥µFÂÓ¥u©±?íT‰QK„ZÚ§JL9·Pîì—×b%òyG'ÙÊšÈ1µJÞL›oÃvÙ>Oæ}!_äˆUy)ý\Ù%1seK±XoWªhGʾH‰ýDΚu(Cô‘r)BÔä¦Qa¦‹¹d„‹f¢Øöm«Eñ9i»2 WÐHóL)P”!ƒEz^Ô2è–æ}„ìbeá-ÛÅïIUŒ¸¬’é6æÒSB´„|&iv¥ø»âú–8•c6•U² ¤ÚËB¤|»Ûá ½:[ˆžcô³<ÿ†. —Iš2E@Z·ƒÁo2IË–™ Y´¨ŠwuË–\PžÏ̬¸|”‘Å"íÛ…ØO?½Y¥€ü«`ýß ]„¼üAƒÔÛ·§[wÅŠJE߸rE×®]¢Å‚ZÝ´mÛŠ.ð×_ÏÿáÝ /xlÞìPÕµ¨ˆæÍ¹ŸeË7Îṋ™·”öm8ö«Í"m0òèn3k sì .ÝÁ„U„qå‚”ø­‰<µ7gÔÒRñë¥Ñú[ru¬ÀhÅ*ŸM—_1ZØþÏÖ³2—$3ñ*®œïN=/¡·Ù’G+ON6ÅÛ À ‘¹ü®§+ǃñT$CGȆáå$¡ý‚"T±„4Qð¶«H‹AãŠj:+³bI^ÉU'TЮáeý#Gã¸æ‰ÛûDÖ!0bÜÇ>5jO<‡3¼V$x ù{ø:‡û^ôg|½ºÁÏ7øTy±1Ã5âÖï; Üv[`t¶bY]-†)ǧ”æ>ÒoÀßu.b˜]iÈ·ÎÔV.å ƒKà à=…oAû9ú­Ô8‡ã3¯Qv@.0ÜCó!9?¸7¢æ|íR^‰‘;˹>S*Wê½E“qqL­&qm×VSš àæOÃa´O`¥º™¥ù\\Ë©%x… Q8¹P­ úP§+u{âþÐàp‹™ôk$ÅY=‰%yÕ›’nW*ÇÕ¯@¼ ¨xUßkâU1„þO¨$| %y”äQVÅ÷¢L+мŒ|BÐfãäLí¶4ìJ£n4 ÏJ÷­åÝæönàÎaJ²ê?Á½8š¡Ë$ªµ©(o( i#W–’—àäF½giEÍ>%Ò¶0 Ý=PQëeš}†{u[»þ&©’·À£1µáÿŒCÆSLÄx ·>8ùà¿§òyC /BøÁJ¦ðME,-ón»Ó=€¯SÎÆp/²Ø¦Â¹.cÅåpù,óLÓºƒikB€U)\vÁýI¢j+®=ºŸøé>÷Ðàiž# (Ű˜]wȪFÀ ðÅÈF7•™èÚ:‹®8y˜Æpý¥­ñ^FcOœ=2˜œs;ᶉ WTÀ1è† ±2EÌ×äÄ™*ãé½{|•I¸+êfÖà‹ðäieÓ7”]­8ô m·’^ÂÂNLQžêµlÚÅ 3±y/(.5½‰ˆy\Õ0­/ŸÚÕ$²€-q<цýsmSñ‘sô‹›+~¢i=›pô—Ìù’çú²y¥†ýÊÚµÃl&.ŽÇr}°bEÉ[o4hàœêî*)±´hqõÎÊuÆŽ­ÚiþóϩÇŸ¯QÃãæÍ^^^UCÿ®‹0ù/Šþªÿwþ«`=ðòoÜ(nÙò‹…K—z4o^uúĉ÷–,ÉìÚÕçØ±ŠhwÆÜ¸qVq±9Ü£‡CÞÑmÛ<??¨i—ê¡°ˆ&Ý,éYNkóú0ÿÔeºŽÂÅ™óh®Ú[„Þ38r…³~’MxìzVãÑÚœžŽ«2ô~ºÌˆmq_^bò)ݹ0˜:>Ï«ù-ŽïjÄÑZè”HB)ƒØÒЊ͵Ð1›$3#=Y§,¦GáI0Âz%½À8òCWçÝ„)ˆï%Ü_O†NËx¤ VlÅ®ÿÂMœfÒ>‚0À‚¬æš$_<&1 œ@ÀŒyÛHpÅõ^(ËÝè)ÙËòtnºãõ4oWW]åiH½ö×?÷ÚZàç–Qçjt¶"š/^Y<ÿÃ/µŸ Èçm3éN°ÄòÕ´¦ÂW ‚Õ(ð2ŒñŒÃxÀµ=~‹qëfß?E‡¹7Ý%ß'¨½Ï–¶V}&×?äÞÄBpw‚§Î4œ°ŒÜ½ñ ï>!ø„â†_˜NåîédA›MQ…éÖ/EYh°‘“ >!ø†âŠo5u%´!ºáîó°£ÄLúîáîî£4ÏÖä_—z=iò, žÀ½’fV†„»¹S1€wMšŽ¦ÅÛÖÒFöd.&õ2v± °3-–ÐÁ&`)&ýsÒ zœ¨>jm9ióm §PºÀ¹.~_àQŽø ¦€ÚÃ/ Ê3©ù¼e@ .>¼çËÄòpŠRR’™n´hqÒÕe–?ÖW1“çøÂ‚¡:]Ú1É 7@Oñï,Ë Éï§y§O×bw?«Êe²Ðu gRõ(ßÙ!Ð?ØÊûhι­]Ÿ2üsü¼¸ü u”®7Ðv8×î0o3ìò?'Ý¡e/ôv®-îßÇ6 ,ºwçÄ Þ}—¯¾rxeŠŠ¤qãÌôtËÖ­ƒyàHÓ¦¥.\˜áuútSgç*°íƒ¥yó?’’JV¯nóÆ•f …þ®‚uïÏ¥þ6ÕþWÁú'_ÿŸ¾‚o½uyÅŠ»Ï?_}Û¶öU ™›6½ªÑø¡Þ«¯VLJ4gŽ6:ºèÑG]Õê õ¡Ÿ{Žß~cèP6ntà/üêÞ´µƒ¹vŒ;åØù¬ÜÆc­ˆ[MyWÉ´y—"[¦3XR•Òúcîä°x(ž°õ0|+?_¡s-[hg÷{—ኴ2óŒSQ•Ç6–WPÁ»ðyyâ‚R~/`¢…gjð­6}.—Ý),0S¢2TkæöµçC«‘³‡¥ùdøÒŸñþJxGYëY_Ha(¡/ó²~<`$b˜ÎÉŠà7ŸÎÞÖCË»Ü<‡¶6îßÑDIêÂR´ )òAµƒ¦¸EЮ@?ˆU ¿—ŒtÉ¡XXêÇxeb¹¨£Ë5J,¬ªËheÐü‘CŸSìëÄ sÞyfž%Ì“‹ƒ©®øfbÞ1êpáMÊ+VŸ¼ÍSK(5rb*êY™Y´|›Ì¾Ϩ'mÏêÃåÌ_CˆįÇÍ.¹Cä+ì:ÀkÃxÿË­ZÙ|ß~˸q„‡“@€ãØš>½hÁmçÎnqqÁ¶å7oê[µºj4ʉM;uªzÿ³tiò„ W›5ó¹t©çCJ;ÿ]+í/Šþ ÿWÁú'_¿J¥²X*,µ”™©oÔèpQ‘éøñ.]»VŒ,£ rgÌHmÑÂcóæ†ÞÞj”N'M›f¥¤˜×­ 9Ò!&üÞ=š7G«eÇ pèð‰¡:ÎØ‘¬°‹4,ÐÒ|š,bfe—ƒzÙ.ÞYA¨?W–¦ìÃ]':–S·95vJ¶£üRÚ¬ ¥€¹½˜iÍÍIV)m¶VÂÇíùHñžÊ£Ç ̰§#O)¸ßòy> '»ñ”âeÚ^Êà<œ 6ˆ~Ê´õ¬€p8ƒÕ§ÁÜlªçðŒÆj ´ ÓH>D^(®«iRw@`—ö’â…Ë<:7»}s>00H±xÅw€@Oz>nÍQ–†ô玪pêÆðfXƒÛó¸¾öÑî¦LýòÓ“•ˆJ;ª[pëíÓó}ª½u¾,£º³ºˆ¹‚Ñ•6|묤à‚;ð"œwXãmkª”Pü5ÚyH*7¼ÞÄ÷cTvsšh²–#&\‚Ÿå>ñÜ]IêÖ´ï5©3šºãp«xÆVÖWä]P9S»­Þ£æL e,æÞIRŽs/Ž»G lõÁ#°êÃÿ:éµfP”©Ø«2ÐfáLaºÕ¦åW ßP|Bñ Á'„‡ ¿Be–ª”ãV½ÊÞRU®T5|’€úì¡ð6×VVt¶š@@³Š’¿qw%Ù­É«ü#¨EÍ—q¶Ã ŸåÞ{ŸðîHí¯ðîdß ºõNÅ’*<^Àï œí3“…a þðXmZ‚¡ˆ¹Å¬ñài;)fT úT¾Îä ÞuùÈÙ:Ö*:ÊËäsÑìai1ùAÔìÇxo¥ŸTRâ§JjQk8ÃË22TiK.ÁTV¾½.¾ŸÒÙ7¬ãúö!òÃpýަ5¥ðWt«(¾ˆñ{‚žÄ°À³°šÃ ($UšÆsMt¸Æm=o†ò­r“2õ´=JšžèÆÌVô™LºíÀ,üÞ'•Dr'ïÓ} ‡^¥g]+S«§í\,Æödª]áìÁŸ²íO¶eïǶ·òJ/c2st]í<ÉÛv3x4þ~$!ÜNsNO§ysòòز…Áƒ^Ÿû÷ÍMšdétrútH‡ë^¿újòíÛ†-ŸßЮgvãlgÝø>±Gú$?µ1ïfÒú] KØ8•¡ ò§<³Ë„'X<Ô&‰«¸¶Š’47j>IÇ ïIP‹?Iwn,æÞ îáΕ܈m¨Û¼BðÃ; ¯ë§²ïò?A¥ùgR’MI%Ùh3Ц‘ȽS‹mb!ͬزz=ñ©ºÈ•J4¤%í(¹—Hpñ¤á‹4Gh%0€í)(™]}›S'ŠÚ£pqD€‰¬oÑ|„¹'OÂÆ>Ó!¡¿9…¢™è~p®…ï<šxö€ >€y婨KÙYÀd …ÎÔä[WÅ-ä°+…O-”zP¿Ÿz*èÃ¥Mæü!k*Ñv½y£_fPÝu3j*Ÿù·øð¡n\èA ÅôÒA~I¢C(qÏâªø¢bYuŽG«sj4nJŸ{¯ÒïkÜœ9;ƒV V“K«wÈ-bíD^Q ]Ë7óöBª“¸…;,î´y,\FDkNïr˜¥÷î¥o_¼¼¸r…úŽ6ÓÓ§;g{x¨®] ­S§âðéÕëÆEGט=»êX£)}ä‘Ã:9.®kçÎ33?úèÖ ^X·îÆÈ‘UÔ£¬L*•*û¯ÈýM ùÇ[°þ¹  R© æ“O:|øáËŽË–Ýyç+Mšø\¹ò@Ÿ÷ÓOßÜ·¯pÚ´êŸ~Z±@ቆnÝr<=U×®…Ö®í0¨âãéÔ •Š3gxôQ€ãÇwëÖ­DG‹Ç¹soæñöë6ù”tZ E[Âo‹h·š¯ü±ËñãÊ2ª)võó÷xlF3»ß¥¯m¦7Óq—2x»ß({LzÆr"ƒÈ:ìèkïË-ðóš2Ã:c“g¦C"IzF³®ž•Y$tÎæª‰ç<Øh=<:ĊéÊyî¦t,yø ÿÊü›i ד)m…÷r%ÚÈ€9š3—É Çk]‚ð Ñ}ÁŽ ÚÓpÝÊu¬;Üù…_ôèëQïE^t·ñ/²¦!mۛѣߘ¿Vª-§ùuò÷ ÔoÀ|OlsS ë ™)\hÈ %ï<¤ÀK Åð4|†Í“@i,…0ßpïƒßR\ì²þé’líDCêÜY†î€“5†P¢C½k‡fRvså+,ÒŽZ™®¾„u¢fªw%¬Nd,!í÷⬰-S)ÁMȹ^…¤‹øÖÀ7@<ñ­O8žV¾_Mœm9TËÞm‡L:ŠÒ(ÒPš‡.Ò<‡ŸÚ4 ïÛ´={ò«Eá}Рµ»R¿~DûZ©DCz©H?N^¢Õ»W«…É4Su*W}÷×qg9º'ª  n!•£ÿL]-Ú/¸•7Þ“ñ™†Êàl€oa4ƒ$X‹RÓIÐñI1«žñçK'%öÖLq órÙÓ¿3œ°öyìÔ~çÇöçVJ·{…Ã'­©D{wf¨RÀÈæpïJ×>J`‡À.ÎíDíŒó;ômFMÀ‚|Îùãhüqû”.µ—} šU¤¹¢ZL£Ç”3LÄ8ˆÜ,¯àµÀêäô=ÄØeï]§ãÕ|\á`0Ý•½ß¶|^HÂEÅÁÆtW†Åé|ºÇavt RÙ.-Oàíã¸qn0õ5è÷[ô߀›3g£h¥øÓ²µ´šCz!_á}»'ùÌv«‰ì@ì,3-›æCÈ/bËg ¶ÓºnܦuoŒ&â~ã±P^oŽV­HJâóÏ™<™ Ô½{Îñ㆙3}æÎ­5µgOAÿþ·BB\’’ZúùU½u=úÒêÕ)C†„oÚQ¥@>¬éÝ{'Œ--5¹»ÿ¥]J¥Êûs©¿Mÿ*Xÿäë/S°jÔðJNîæöÀâßF£´hñÇÍ›Å11­£¢ª®à_Ò¡C¢‡‡ÓÍ›-kÖ¬¸€ œ·m[éë¯{­YS1^i–.¥CNžtØmßàQøùrí¨ƒwÑ&-¦Nu®nÂG|ˆðÌöÄ3°¿Í´ ÏÛÍÌߨÀ¥Y)ˆÉ«Y´_‰ÞDìpžQTˆ{ZÚn%WÏòn¼¥(û²èw†nAÌiÌã ‚ÿ’Ž.×(¶°¼o)­d3²É±0Ç—r;Ýï Û ¼Lî:J¦Qà ˨,™GsMƒ¡#~Khä† (Å<‹Ó‰äÖÄ{]pòÐnäÄ%RªðýKX&™ëY_DQa/󲯲QÎäöï|SJ±oqÓ·Þ¯[PÕbmO¾n²çË>Wp«É»a¶LÙ¹œÏXwTøø³À“A¶VÂd(/˜S•LÔeÇ@É·ÍB Á¯×ñ‡“Ýrn¸OêTrÁ·'~ýy—J 1“¹›ä¯*¡Fà\ «MáÞï¤%íÅ÷m|7?ªw£zÂ{ÚþO”-“ŽÔ3ä%“Ÿlµ•™‘Ê>JûUIn¾øTÃ+¯êP”f=¶8‹’ì¿T|ÐÝïj6³Y™-¼-¡-ñ~ ÅJù×I?f½ ÚßÕ—ê] ïA' mW±Â`eáwcê¼AíѸUª®-ò¶‘¿Íš‚Á«-µ—âcoË,ƒ[MÁ’*<_Æo¡Cê6Â4¸ ÀhˆF)'eâVcM$ªp÷åCoF—VLB23ôÜwÆ»3‚°!‰Š¸›Àš,ÎyQ­{S–²EâÙÏNP y}í IDATEðL”¿—ýì?ÉIªþôo¯º,XÖs,ŽëÍ©ù8-ÚP¯ì\¿æÒ~R¼q™G熊䉬ÏHqBõ)õŸÀj\¹ƒé9r2±ôÇ#†À²éí.t‚ ˜‹”>eäñôÂ*F+ÓZ•SM¦ž—/ Î'ª €ÜÕ<:lGgâ§Þ¼¤ì³Khõ-éZ?Í», CW²9žnøc’­’àšýŒúŠo®,£¦ÝC<…m‡èß•]K{•HY`út, U+âãqu[›6•–ætóf˜ŸŸÃF]„öíÏ+Y´¨ÖĉU›Ø¯]Ó¶juD¥âêÕÇyäañ¿î½ cÿúâþ¯‚õ¢º‚ÕºõæK—rׯï=bD£‡HnÞœ6th|X˜û­[½|}«(ž r{Ë–¼qãB—-«¨„ݾmnÞ<Ëh”3gB""†]yZ¬o¾áí·Žð*;÷óÊÖÚm³…N¯ŸÈû#ør¢ŸšC«wÈÓ²~#·2-B¯/9z“áÙ0Ê&üYSæÍå·S†ê–Û 9€‡3§ž£2Å,JbR"aQ[ñŒýœËðd\·•ûõôËÅ›yAÙ™/„iàq(}J0‘+ªï ì­X›î¡Åõ\Œ½ X@'T@1ÆœºMA}üæÓÙW Ÿ’¯Ù}ŸÜ¼ÆÓ¿&VgY>ùëYŸCN#¤ðóHÛÃÒï~¬vøPÕ¸Ñ ôNŸzSF* л3•í¸ -`ªŽíXÝ… T”ãšïà X5`68&IJd£Kñ20ã„Ï,¼ß¶«Å Ú8îOBŠ)¹‚Ê€g ‰Â¯*ÄzñMRVso5†lj £þ»ø¶¬(YFÆ›ßÅ‹G©Þš}¨ÖµêR†¡¿kªÓ”c=¸x8½þÌö—¨ð¶õJ++U63^GœÜª8Ö˜Çýu$EÉm'7ª=KÝ(Bªz ú$²W‘ý=¦LT.xw ø5‚G9xN ‡)œˆñ"€k'ü—àꘉ³ð> 9|6?²ŽÍLJ\h@Œ+åˆ{Éä—û|%½hÞ€yî¶„mÜå÷V9áL›V¼UVòÜ‚å8ë¯ç„Ëã¼ÚH)mnƼíW¹êŒóó<ßB©h¼šCçHvÃ%Š>­”7ß‘ð·Ýqþ˜NÍ•!¶›Üh’fR÷Y¬;‡tÌÏ’ssÜ×X¶kÒB7¸OÁ.åíO·Ð>›T3ã½YªÐTi,7 Ožâž¯Î¦ÊÜ ¥f:mçR.o6ç[; éÍlIà‰úìi«Ó¼î¯~Ÿ—fQW™åÊ'Ï “ÞÓÖÃî8žyoO®l¤^ ÿç_>ŽÊ±ÞW¯ò裘Í?Ng‡<0 Ò¢Eö­[¦U«üG®˜4qÓ¦¼aÃn׬ézófKOϪ·úžÍxçz_ý€aÀÍ›M›nruuÒëGÿ«`ý×韮`­\™u4""D­ôpá®]ãNœÈ›;·ÉÌ™U{µoÜ(mÑ"A¥"1±EÆW…É“ ¿ü²øñÇÝ®¸ Þ¾AƒªH‹u÷>Í{¢+åà&zuµñ/Þ ýHD8½–» §ïðÆR¼¹ü µûHr6mæRTÊÏ£yQ‰æ¶O¬ã;<×”ív ·¢Ž²êÍ9û<^.VÉgÙI[?âºRžÓîýû,®ŒøLËÔ"|Tœ ¡¥¢9Œ†ÕPÎ@¹Áá —Sì‰êg‚:*qF7ÑEq½ó`B§+zúiœ¼¶)s•,;%è—±÷é^¸¿ÃÓ •҄婽ñÁˆp¬v‚‹i©ífœ²<‡¤‹“êÂÇOÔ¨©¾Ë\3En„×gžM?,[ö¦ ºJËp&Bí`ôtèÝ”@á$ô¿¸4ÁïKÜNì!;†‚]VÛ‰GB¢~—J¶‹žŒÜ]I¶RÏ?‚úã©ùªÛ¥JÒI?FúqÒãÈ>g³!9¹Ô†Z}¨Ö•ðî¸ýÍL¡"}Ú «Õ ÁlÄ;ôÅ%fò¯Y5HÍak`y†Ú‘êݨՇàG+Zªì©bðf-ꌪ:xSŒäï ;†Âƒ`ðjKÈX‚GâdgW0Ý¢h¥›œkãûI%¸•½F3ár\Ð0MÇ6*©ò&òî]@¨ÂV‹÷Êsˆ˜(¹Ì²T޵èÕŠqÎx`M%º2…+.¸?ÉØÚŠeÀ°‰MI$yàñ"/Öź)_Þ¸¿m7¾Örm ·\púˆ픚ÍG)ø€$32Z/+‰r±>{ÒÓ«.ž#"o¼qÔ/¿|»rS^ž9$$4¿þª«Üúì³2dˆ\ºtÉž?çK!\Z<^±ÒÂû‹„ió’ÃMžûDˆ”È9̘£B”L[q¹W „hùþ¼©3IëÍBŒŒ± kË5H£CB¬¼lW?Ñh‘^×µtN½]ŒÔky‚FêgH–R1G'ò˜"]ÅV1Ç"2IòÃEÓDҮإ¹(EÝä\„¨—‹-¦1KJÞ‘;SN”JØe— ºí'(zÑ$Êëj‰ˆ—Ž©c_Î(72¥·FÂÓ¤žVV9Ün±ˆl©§6‰´ “*¿Ñ;$£¡5Ž,§/W0h$m\ªg4Œw—¤!Rð€(«re¼ìñ±F·í«. S¥8¹ ÉŠ§‘)wvÈ驲5BV:YÃèb•β5BâÆKÒ¦?FüËTáÝþÿ"³Q²Ôry‰ì"?ÚÎ<ù1\ö‘ËK$K]õí²'c¾Ü‘?ZYoÝN'9ÙG4›ÄREQ1Ü—´J‰I䜇òPÉR$…³%Í]4Hš·ÎK…!¯™-â)‚ˆ§ÈT»ž""¹œ)]4ž&Jd‹}S¡œ½(}ÕqAžÈ—cöMyrã Œ‰•È=2ô¾üQ~·u¢ýUÄHÔ:™œ%¶ÚvER´BVDKôòEš¤ÙõSü±lŽ’˜é²!MlÁnåF¤Ä>';ψ­úŒZ ;˹Qk7` ÅÒW²ÂEÓ[²òíFÍ D‚DnØö¨|A#u3$Ó®"ß´û‚ZÂ.HŠ]á¢Ÿî ±âºSŽÚ½’›’„ñøN.Ú1oç‰ï|!Z~²Xf‹ô^$DɳŽmVì"%d¸¤;öÿ\ˆ#J»ŠÈ„YB¸tè'fGþGÝ©^]ò*æä˜ƒ‚ÒA³wokǪUY nÜøŠÑøÀ×µK—ãûñÇ7$PFyyzŸ5sñbÎßZÜÝàóW0äßZ„"òá‡g fÈJe%ŠŒ<±ï¼Si9Tèþ}ƒ§ç9''õ… U€ûúk-h6Ì(-­8RRÄ×W@~ùÅ!>¼T/Mº áòùrùbÔ DÈ—ëøš zIˆ”8ð|#DIŸÅ%´Ö^¢Åg¾Ü´››®äŠçj!F~²+r•P$~{„Xù&ÙÆÌ6JýË‚ZÆÙÆÕY¤C– ‘'s¤\÷K©%RG$ÊNI1‰DIn¸hZIz’MVŽH~G‰õ:»y¼ÊJgf±ü(G£$æMYyTlMbÚ*[£%z®Ì½,—÷-^2ty¹v¥zu˸ƒÞ•K"’ŸŸ/"fÑ_‘˜X‰Œ•ȳ2Ï`WÑÙ"¦T‰QKµD\—· v-¢+™ ×Hx®Œ6K…¢Â%" D|Eq/v•×DDÄ Ú%’`-ë›%æL©Hf)Ø/IC$Þź¨_i"i Ę]IRĘ/É_ÛŠîö’ã]$q†dìc~ò¨4Wîì““e{G[ѽ2ekgÙÑSö¿ ÇÆÉÙäòR¹¹Aîí•ìó¢½'¦*6 URÙÝþKd1IIºä^͹½U®.—ø%î=98Bv=-›[Ë¥êç†òÇërý)¬boS‘L%’}X®GËÉ'äh;ëíÚ_S®ÏݽªøëOÁ,%k%½šh“äsZEY+R]•Èû, eT"›Ò¤¾FÂ3åq£\³Ý1§JL¼õUc»d-b¹-¿í’çb%ò¨LЊF”»](Y¿ÈG1õ“ÌÈ·;$Wr¿’¯¢%z©,ͱK2¢‘Ü©²!Jb¢eS®Ý@Ø)É‘;Pv±S¤®KÉãr>BÔŸÚíptb$Ùá¢é,™vÚÕw"]D\Dìg¦ÅZA#ži¢¶Û@nÏ•Z\âå°-£‹\,ïÝB¬,·+œT þß 1²Ò®~«Ù"=¿¢eðF‡»h¿%¡“$Ýn¤ÞÉß!B¤lrPVåÌUqî .åÜ5þåDq­#εäœã"ž.MŽ¥½Ëèí·óAÓ¿{Î\»ö%PoÚ”[¹µŒ6oÖ@lXؾ¦o(£Ï>»1O=µKþ~-Âÿ# ÖÉ“'GU¯^=WW×ððð'žxbˇ=ÆÃDwïÞ4h¯¯¯¯¯ï AƒRRRþ·ZÿgôOwŠˆFSR¿þOf³Ü¼ùbýúU—Ä)£¿3,+ž3p`Ào¿5¬Ðd2ѶmÖÕ«¦Å‹ý&L¨xø’%LœH½z\¹‚·]ãþ£<õ"^ž$¡n-Ï úÇ˃Ëi`çXüñ0¯,Âß›ËßP[±7gÑêc2 ùúEÞée~q ¯Òµ6G^§¼*÷ Œ;Ž¿çíâq¶§3X‹ŠýÑSñV/¡ëut¾«K¹m[c¦}6i&{󹂨¸ÏÃmx–+ž#òy‡Ñ×ÅùW‚«)þ‘=äήé¸CÑ NaìE­‰´)~ÚË…mœQÁ3D À\#Èœà„js⺠­“•œô0¦OnûgU8ugxS% )Ή‹|e¤Ø“°vL´süræÉq!¨>Ñ~t)oÒ±¹€‚Á•æ^ŒðbxyÅ’²›s`5˜!>GÜ•%튗ƒ §@¼§â=U%€1•œõd-Ç „³ù $ ¿ªÂÙrrw†²öY9*'|𨠮÷Äóϰh¦b²ÏÛ`[>u(¸ñ0ygÜ­¯x…[¿»â­üô¬fuštòÐç¡Ï£$õ»ýO]¦­¼O•Ø ³žj]©ÞZOá[ïÏ®HKþ)r“Gîq,¥V~ÈS¨TÔKµ¨*a+iä¬#k†;*w>g8Dáû Üê1üW‚[‚Ip€°ºÚ7¹\È3)fî{ñš³U BÑ@f2j9¯Â©:£Ã­R^3XœI<¨êÙŒ7œ”,—Ô=|UL~(uûò®§ù‘FÚ6S\ƒ#á¥8“Éü†ßµ”6 ìúz+1(‡¸¿„‹ oÓúiÅwŸ‚~4×s1>MÐ\ê—Æ’·›Òê8ÿFpmeDo…a`Ÿí*)ÔÓ73üÀ0þw­”N×(4³´6ã÷lž‘ÇH*ad-ÖµUn—…ž±œÌà…l¶óñá!júré-‚”nÓˆ˜‡ÎÈ–± V\ˆÐw6ûÎ3¬;¿L±õ`2ÓñÎ_gÊ+,oã‹Ð뎜dü(–Îux´¯½ÆÚµôïÏ®]T ë×M­ZeY,\¸Ú²eÅwlÑ¢ŒI“î·níyþ|s§ª<Ø&“´n}$1Q»bE«±c6rÍfyä‘_’“‹öìé×·oí¿›Éý/ÀúÛäù÷]„;v|õÕWûôéS¿~}­V«V«§N:pàÀ9s攟êƒúÔjµmÛ¶}ýõ×Ç,_¾|íÚµ.\ðòòúÿlýÓ¿ –#Fúé§[|Ðæ³Ï:=üQ£.®YsoèÐ7¶«R ;ÛÔ°á•ÂBs\\“.]*ÆÛïÜ©0 70ÐéæÍÐà`‡ñd63`™™ôèÁ¢EG ‰bËN^ˆdóJþ°élÚOß.ìq¬uõÜ'»Ê .¬|Ç–Œø·‹<·WÔ3h¡6óKiý-÷ ùô ¦ÙáC_<ÈÆ$:„rüYÊÃ+§$òyÕÜQw§–€ø1‡WîàáÄÑÆtPôÂzåbÖøóºò~þýAS <òF‡¼Dî MqÙFp€²ll&ka¥ ¤ëäÍät)¦ÔC‹rë0W7rB'h9„.åKßÎý‹>ùâîé6ÔK-|šÜGÍŽsìUGžkKßòÖbÒÎñY·œpiÆkõX¾ŽÉLæ£"âÁ)œ7£R·Š‰)aàJ?>¶/]@<¼eIZÂRèíÐnºBáûè÷¸÷ÁcžÃò¿—‘)ˆ%+†Â6ôOè»Á¹ÒÆÀTDîQr“{Œ|5½­É«!AÝéCàcx?,¶À\JÑJÒ)ÍD—…>‡ÒlJ³ÑeQšeýnÖÿI'€Ê™°NdŸÃ\ú„ðÁ#÷`|ͤ’PC( -ô^‡*¤ZR¤*EEŠ" ˆ j¤‰Š èÐQzU&ôPC ÀBHƒdÒÛL’ésý?$“9g2,ÏûÞÏs»~ó!Ù{Ÿ}êÞ{íµ®u-[ô¾ ÷Ïà#tÑq8f»Xuµ$$À ­Ðj"&ºØH°R¶à‚¦î𛉡.ÖÏû2ÒÀ 8 _A9­S6 3ŸCÔüÑöKà#@©¤GQ·UÏ»¼ è•ÀgÖËK1£w.r,XZ”3úÄᾯ{a·•AJ½ÖÕ¬°½EáXsM«#òUxY·$‘™è»F3N¼Ž—¬Ÿ¶É‚ç¾Á­Ìì­ÓmoeC06ž@A1b6Â[ð5}û+¯G3Ü;OAàÇÎxóC4¨‡¸PÔ´ÆÌ™hß;wÂÏv2jT~p°þÝw=6n´ÑÅÅ––-£³³M§Nµ~ñEÇßó¦M)sçÆ´iãó¼‹Ë“P¤$Nž|¾mÛÚ±±¤RÉŸU°LÏØôψó?ÁJLLìÙ³gAA9 ÿ ÷õã?Þ¾}{÷îÝ%S§NíÝ»÷¼yóþfí_–,¸u+gòäó~~5Ž^³¦£ð"«¤§ëz÷¾Ú¢…Ç×_·ó÷wœ<çË/Uǵjåvð`‹Ê)@FŒÈ/)aïÞ.?þh?¢""0bºtÁ÷ß—Ób•IZd/ m+,šƒQ#lå™yèöÚ6챘*à°Ì*ÄÐ%¨W “`Ž ü­]P¦Â§6Ž¿ 7ëVêL"^;Œvõ°öEô²*^zt?‚f5пV•ÇÁBŒ¼‰ =¼\ÜÛxŸógը-ËSÜø¥K4hí„õµÐÛZxxèŒLµjðUäIÀî‚Wu볪½Èn ·wÑè9kß]änƽº¨æ Ébôpµ.‘HÙ†óÍÑÀn31ÄNªÛ7n:ágËìÚÇÇåʲ‘®ÎRñ Ån_´wCõxÍÕºY'Ìpàö×AxtŇ®¨Ð]ÊB·ÖUGW t-ðµ+*"‹,:œPc…NðuFÛZXî»`Rð! ´|õ€8 ‹>ê ‘BRÆpŸÏpéŠÊbHCîVäü S6j<ÒÛ¨3õß% MPG•ÛorÏØu"ï ÜÂkê Cþ¨ÑÑñáO•g4Jù>ôóÏdîr¯ï ÷ß3]I1 тܨ#QK†Â[ qFÍ®ðê/xu@ÓZ&æ"@ÖZÀ]üSb9-…ÐîBÉZH½`¼ —vp{µ»U ð°ðŠ€…À'€­a,Å®b¬‘¢¾©˜^‹¤¶¨Us¶â‚)5 óÃ2ÔµVY`¿ ¡Zd×F»îXàŽŠ›b .¥ân’›¡Ë ÌZ‡I4¢Cª†º-ÚŽÆè *ÑëHÁÝl¨{¢å4 ¨(FJ×€k'xM²ÒÂÀ4t€$Äu‚ Ž†1ƃ¨ÛÕª·ÝÞS¬iÒ/æ¡hì„^åg&&BeB©×ÚÁú¯û,× pOƒ›þhnÝ­|„Õw•³/£ÕÐUbDÀ^d•`x ¬³í›°ô\y€ôÜù5¬ÏþNæoAìcìY„á‚A–ðo-ÃÃÇØ„‘€9y? ©±âLèÏ%%7àý÷ñ¡ ¬»ü:OêW¯Ö$&Z"#½ë×··P-_žqæŒÚÅErñ¢ƒä]òócÇÞJKÓ÷]ûqãÓ\WÈ„ !ÍžÝ~Μøó¹ÿ'ôÉ?¡`=zô¨G¹¹åÁ+O¸¯!C†|òÉ'#FØÖȳgÏ~óÍ7çÏŸÿ›µ]þ¾—ñ¯oèÐ`@¾reÄڗɪUEÇŽ—ôz³Ã©Aƒ(@yà€·z\œÑÕ5C*U……é+×N™ò`¿~öÊM»6êÎ1Ôg÷IBÆ:ƒEùsH»NÐs< pÔZ¶ýœä|1:áÓ"ˆ-Ö±PÁ Ï¢óJä @¬r l}Ppº¯·pDB9à]ˆ.û¨ˆP±QU‚{9F:‘ …HÓ š2ˇªW™«“72]FåFÜeqEa,ó¦ðL‹V,È'0ãî¤ü§Ý¿3³€dÆá è•×{»äš}AûǼ·S»@ÎÀ}\*ÿ’Ì¢ò §(Â7òxOX¥aÄ]XQÆW…U–ss[ªè“Áj®±ÐЧ#7‘5Inäb •÷¡=ÌüITIÊ!ð¹XºŸÇ8”·Õ3?Ž))%ŒÊ‚£ŽÚ¶£L,ŠdòzF¿Ï³õËHe¿fŒœÁÇ»Xšú¤þš˜×.¦Ñ6ñˆ™ Þ[À+2;Ùnçd5Þx™ñA̽@ÓÓÎ[Á”™Œð(˜ÑÍ™õ#YŽ믱àõr» ÌnËâµ´Ø!ÌÌäv+ÜJJ~F¦°L´ Îbï2_!?3Q„ùÐ3ý>§+)»Í¾9<"NŒ“ÆOÊà$óa’(KÎp“œ›9û/ cXƒ‚t…W„‡óölÊ)?G[‚…ÜÅûTŒ¢â„`tÑ4…÷dT¾Å8µ ÔJª}¨òcÆM[( £È:$È×a&_É'TìžÃ"átñ˜P²A”ؾ?ƒyYxK+¦÷.Bε⨉Lj Ê6‹òƒ‹¥t6ç0\€vÓØù="€nõ`2ó¹7 WÒN&Í&|8j:ír¦}ò öíËË—¯ÚR\liÖ, PýôS1+IJоZµ‰Dyó¦ƒÚ2™5+ P¼øâªµUÈ™3yƒ¿jµå/åO-îø?ðû› FaaáåË—ûöí»téRá¥6hÐÀÙÙ¹aƯ½öÚýû6ü]ýúõ33E£,##£aÆ¿ö/Ë¿ V¹„„¤òºuwi4Ž3èõæöí/ŠU«TÕ¦,0¤I“»%%”°%KÔ€ª]»ìÊhwµšà¶m¢r³™Ç>|s¾}oc2×~äOýž`¿…¢(˜[)t}—’ÙüCBÍ`fß­DÇ‹š«# 9ûcŠ [bà}M¢­0×ÈÑ„’Ó’ÝZ3‹É™ÅHî$%¤„Ü.8WM½˜åCÕ$æé­³±…\Æ•ƒ'Èböˆš7@Å;¼”#Hy–μÅÜ=7åëyýú»NÛW¡]Õœuèã̃´…[Jý2ó—˸…ïDò´x Ë ãÇekX<÷$# pž’2%{>âw±öcbfßWÑWEŸ,v/åÁJ±l¹ä<«žéCq|¢õ T/f¦WùžÙ€êÅ4U¡÷hãøh#ª—+Q>L[LCšãÆvR’ÈT9•xÆ[¤lõ¡rSå,Myz'ÿß‹©˜9çÿ%¯ã WÛe;󊌱‹™sŽæg@ß[ôÌ?È„a6%5aóÒâMlѲtsº—¿•”yè=î(Vñùœ5Œ´7nWmäƒ<¾V¦Zåp˜ž×íðÒVRv—#5ŒVåðÎYNS0à,§f3RX•Íä}üLÎÀœ÷·lNË9ž+Ó®® vfZö2´,Lä²`#a¦å'F•¡ÚÏŠìæ™Œ“Q9–ѹ‚Ï~5>T5¥ê¬@»z@ú ǧ¹¸RöR’»r %]ÄÀöÈ"zœ´­1˜9ã"%r¾tRôv¼*à IDATÜwDAô\É{‚X‘l5}\~Bôxn#Ør5âodõNBFß™/ÞÇþq†ð¡gK&ŠGCBÝÜ(•2Üþ “äGª®]sŒŽ¾¦‰« 9/“ðð©4ØÍíDl¬¦ª62`À€ü›olÓúÿjKh>|¸ÉdSå_yå•+W®hµÚÇÿøãõë׌,...q¼½Á`puuýûµYþU°lâïÿ _³&ªªöréR®D¢¨VíäÃ‡Ž’Â’f3e²X@¹b…ªr­Ngi×.P­Xá`äìÛG€uë2'GTž˜BÏ–„Oг–få±þpBÆÍGEå…Ålú&Àb{Õ·gˆ@zÄtA8ñÃ|Öúšâ϶i™rîUºm¥ìµ³È± Jƒ) æ Áÿž–5# %¿lrÍl™E¨h—Ût Ò‰<"(L¢±+3}¨z‹ù3’™–O˜(£rï$ t©ó×q]ƒ6pC¡  ÏDc÷Ë9[ÎÀÓܨ˜Ê,4ÅsO0G)pŸéD-YÜ{›}””Ýç4 ´ªL ŒÌa@Ù šËq±Œ$y›ô·®Á2Ò~ûKV¬è]+zuU5˜ ™µŽ1m­$žLx‘™ß±øæSlZåç2³è“ÖòÖhž®#R¶ÂüÚ›7F2rc2q ïdV0 n°4•&ÇCào‰Å@Šê»Ì aÚ&­cÜRFòÖ†õçÅÖ<á&Pª\ÖŸqK™sþé–ª2Ñ%1w;“§3¶wù㊬ÍÇRWÅ–Éø€êÅ̬kÕwëS½˜¦dGMUd )%Aú’ö™žÍ,,âR›¨è“ÉöÅÜb—ÜBc×+ÙSIÙC~hD§Š?È%: ä–h†lá»råÊ"A¸«‰¦Ã<\Tk»'š6ó\ åïrëmÚvKšWQ@Å«t!|øó.ÚÉ‹/àìÙöå$ïÜ18;«œU·o;ر‡…i$eµj©©ü$FK×®—EPP¼ÃB¹tIȽ¼vªÕ¶sýYË¡|éº>ÓïË*(ížý*KVVÖÞ½{}}}¿úꫪÚlÚ´é…^(ûû_ë?Kì^ÿÉ“yÆ¿•–>%–ä´i‘€â…í\H’W¯j$eõêé騥Kz‰Dåæ–qÿ¾ƒsU5n×üLøÐ·›½£pßBFO>‡™‡Ü¡dGó–€?¥ªyçà="ˆî+)-Ï×±Õ>BΩD=Å Ö<Å{‚ç±J•”*y\à-¹gdÍ BÅïĆðO­,@—…±4´g¦UóXPqiZÞç•/‰gv 3,€Š)<Ë|’zµzó‹C}_][¡]á#›/%[ÛÛˆ2ÅþšdFîä|9÷pq†˜¶J`0x=›"²†Qw9RIÙɧ˜ƒ$Í¥<˜É.*ú¨Ø¨€ï›)V™Ë³š ‚ö«°Q”,˜F•‹Õ'Õ†šÕ4W×­ eâ& ±ZeÀˆêLÆŒÕÔ„Òò-IZÌTÇ”[¶N×á…Ö"}«òï„;ÏúðR^ÆÈiŒ™Çø/™*gæqæ…RcÏaȧ:†y¡Ì<ÎT9ã¿ḋ¿ËÝÊ-U™ÇŸ‰„‚¤!ù™Èèæ¶'“0œ1혵–f‡n3uç˜`óØæÈX"§Å¡g ×Zý¿®ä¼Jþ߲Š>*6)ä"3íãöKÓ””Ýf¿,î{F“ª–šS\/g œ³Ã¸ß,0é©ÿ¿ÙÑ‘,¡þ;¤|>w&H°ŠiX̰*&ót¬àòŒ´Ìç•Õ"Øçfi#ª|©úM`Î!; û¤ÒÀj„Š? tò=DJ~(˜»  #|î*u‚9jÏBN—-²jìö ÄÉ¢pþò¤×‡L<æb-[Í"ø…˜àÆhb¯i„Œ³+9_{—ðáàñö.‚ÐËË~'LÒd¢L–¨-*²¯#ÍföêuP~õ•ƒíw™¬\ùP´n}A«u DÊðá'ù²e·……Ú‚åöÏÿþ Ò… š4iRUmff¦§§gÙßÿºÿ³¤òëïÕë( ÿ駘§››«÷ö>(°·^TÈ«¯&Ê7ÞHvX;cF 4(W8nCCCYµåÙl¦ÿh‡³Ú÷6ñBFÿ™öà­yr"€Þa©`§T•å ²&Î RIC+føPõ™ÀΤ¥ùmG¾ M_ñFãyò¦!íÀäÑG.jW=í‰@[´ÔîàŽ ­æêT¦–=í2Ñ0ïw~#gàÎQò¸×RÎÏ PpT,wZ=5‰üø."Ø/ž³Ki¿Ý4³HÍlª¢O&Ûi¸Áb¨*&?#ÝI5ȯiO©UÑW5«™Õ´|±Ï¨ÁÂ@«`ï4f3oSf1¦MŸP‚‘5ù`$3¿cÉ­g³l™XšÊ‚pf*øh~Ã{1r:o¼Ä+2†4á ÷§(Ce¿SÕ O÷°wDVõ vâÙ†¼Ô‰×3b £ßgÂ2¦üÌŒ£Ì»BÍý?m©ª`-ûÝñæÃqÌZOml:‹šÕÌò³>jwL£!ÒqcšÉÃdk«=r ¡2ÑóZ‡Z-šã´?¯‰Ei\›}ã8ó.Š)z­™¼Y šÇX•’¿nÙªJL¥Ô¦SÜs|¼‹Ikÿ%£y3€aýy©OÕ¤¼>Äfñ:ß‚aýy3€‘Ó»˜Ikùx3³PImú3i~UÞ¬#K•Œ¬Q~³%J 7ÛáJ2£šÕXØŠšÕ4WEgŸI®&›“ Hw² yÒþÙP%ÀäÉJiÏDi¡)‹û+¾Ÿ4®7‰©nnÁ¥: }í–HžÞÌ9rçwÅ¢ª*©D³Y´„û)ÿ’ò'z,Â5Úf$ ¹’)2*2òžÀLu…ºfÌð¡j “Rr ²)¤XÍ2³u6eqz¡mèZȉ‰„’mcX xák“«ä-Á åëØr!ç4ñÐ9ãÀî®Ñ±£hžÓ·)E·±ŒC©"ãéÚ—Ò^¼¨•±Qw‡?m§,ZD€={ÚohI¦¤˜ªWÏT …ÞvÆìë(÷î­2GÂÈ‘7ÅŒU)ô"5ê4 _²ä¦]ùÿëôéÓ]»v­ªvݺu#FŒ(ûûûï¿ýõ×…µ¯¿þúÚµkÿ~í_–,‘X,ìÒå —Ë«ØÚŠ?ÿü5@1wn•ÜîŸ|’(ûõ»ï0 ä×_KUݺ™YYöô¤„~~øóÏöG}³‘ða³^T‹\Ç/2zôg¼ØÑtû!]ÆP:ŠÅÆŽÅGˆ@6^Ì\úŸ[ŽfØ%Þù}x³áoL4N)e½3„‚Ÿ˜”µfö¹O(égË¢c! ke0B°”È‘$ÈFd²àtg¨mJ•U? ¦ï<Ç1FFå'LF0Y,–‹¦ï=J¨]õøâœFgÑ*Æ8ª[¹àÁLªÓä‹\ ÿÓÊVUbT³4úì§§¯ù ò7•*VÀݺ=€¤…¼HN"]­oªyÀNǵP«á† ¶D•Ú¯¸E¼q“””))‹çœRQ–2ç*9t –R}‚knA‘Jú€vqWƒ¶r«0ª#™Y ¸+ò¯yL#ðô%°àuž  bC‹ß­™ü‰i½¨ìψHÁHTR_ff^"Ø„T5–‹,ì‘C¨Ø%Gàø'—¤JÖ‰d‚ੜˡs0% î8̾|гÛa áòXók"ˆr±bôú6"]–Q+x!9El8à¿‹ëôì<‰ñƒ5´“éó>7Ê^‹ºw..”Jyã†ý!$òÕë¯WʘC’üì³4@Ù·¯ãä¾}é€ÂËëtVV•9Ù*äÎ\‰Dîé¹-;Û>¤ãO+X5ÿùß_P°FŒñûï¿gee †´´´íÛ·7jÔèäÉò}Ë!C:”‘‘a0’’’V®\éíí}ûv¹oT­V7oÞ|åÊ•ùùùùùù+V¬hÙ²eqqñ߯ýËò¯‚e/$ò¦M÷TÅ ”˜µ«ë ©4øÚ5Ç€µÚäã(÷ïwÜ`øð<@5mšƒÑxäÖ©Ãlq³™Ï"|8g±ý!Ó¿ dìû†}þ¬/÷ô{‹E¸ÑÌ~«‰@ŽëpÛ­ñ8±9¢ÆÏ+9ûýNრͣë JÜ#ˆZË0°ñ]BÉ7“—MNÌ'T¬—É8Á,YÕ®7˜ÚÆTùPõ‹À‘IýB>ìÃÛ“x/˺ž…®^6«s?éôƒÚ•ïÁiùåzÉFÏææ@Ê÷3L¸D…2t#71h7w !’ÅÌ?ÎïÊbÝoðˆÐ'¨ga8¿,sÆPnHQÇÔD..[/ïrd.ƒi/†bnÉ`}2Ø´ˆK-¬è@.&½­‹w-2¬B‰·¨Y"gv'«3Ë•ù¨{zÞ'òÿ?eë‘¿¯T•ÉŸ°“,"ådgë«‘’Ãȃv@u’Zž­ `Èãtí_-Sp~Ù§ͱù´e™ ?mã í÷Òyÿ7.²îDx3Így¶Ì@{’'…¼$±|<Û)ßÀÓzÁwÉœ <@ÅW¼©܈–O™$£ò]&\(R÷hhÇLª>`|a²Õ-¼ÖR æ*¶Êf¦àmʧDI§Û<)@Ð%•Ðû ¡àçbøùÒ[„œ^;™$@µéLì!'‚8ñ¨ñ¶«D =ßgœ˜cÂj"€Óldzð!c‹W¨;O„”;*Åù B€ï¾k_Nr÷îR@ååå`ÏLòÑ#½‡G„DâØ§A²¨Èèë{PlÛöLyZÆ?È,°Bå_P°jýó¿¿ `]¸paܸquëÖuvvöññyõÕWÃ@™óçÏ;¶¬¶Q£FÓ¦M‹‹}+ÉÉÉcÆŒ)Kw3f̘”””ªö¯É¿ –½˜Í–Nò;ž¾AòÓOﻸ¿ùæªv$[·æ”yÜR6$'›<=3ÕÙ³:VÊ×6r$¾õ–ýQ÷ÐÝ_ž½,*/Ô°éHBƯwˆÊ&öþˆàÌu¢òÔ^Èä7˜ðR˜ªu,½ûl23 ‘,^Ëüq"Oké^ZGu‘J2ô´¾ r1Ø idB'[)†ë+q4TÀ­””Eòù î´ˆšb¹SÁQ Üärƒeób+øC‰8Áe! ·q[ƒ–qÙiÝiávâ:ãßá–@Êwò¢Y0.0m ƒ¨ø‘F‘…Ìü>ÊXè„ÚU"]˜éCÕLæWŒ` 9ÛŠ§Ú’Lä¸ür2¼dÁx¿m~Lj#;]"}K¤O¡t36ó´XG{‚bËu,z²XcÈ_Å*Ç®óDkNdŠ˜Úìú]:õ¢´¯ˆò…El"#|øãfÚÉÞ½åQÞ¹â\”………yyå¨íÛ‡ÖN˜(§ ÉlIJjÕƒ–-ÏöTâ+’±±Réf7·­ééN÷¿TÁú?&ÿ2¹;¸ýÝ»L›v±U«š÷ïOtvv” J Z­ÙßÿZDDÑ¡C²ñã}*7°XЧÏ}¥²tùrߥK4øúëâÏ>Óøù9ÅÄÔKJŠéܹsEUb":u‚^K—0p è¨Uë±d5üšàîyÔ¤ä ¹‰sáê‚[¿¢³ J\z|­G>Å8[2=ŽÀ9Ü]þ ºZs–Ñs3ârñNOl²%í@d.ú‡Ö„íƒðf[[ùœhÈSáëŽ[þðµr%)À„$H%8Þ/[³D”#òf@'g\® /ëÓÍ÷¾À9 â†¶£d)ÔNÀFÔ~åy+Ô0„‡wPÜî÷Km¬û©çg¹åtÎR‰¤ßû®uº³ê-ÌÝš¯#ªŸqV C;ø¾ƒîpÝ¢s‹c8–ˆD}ÐgFHÉUˆ¿€m¥(rGÁx£ lTé…ˆÀ·¥ÈvE®ø°}zKN¥a ù€´.^l„*h¸ËĈ(5–p€ º×Â2AªDr`/P hÌæ~ÚZ2Pú+J7@ZÆHxÀ¥;\ýá: ®þbžñ*Ę…â+(¾Šâ0”FÀ½5tUç"”ºÃÅ.>pªç:þv®‰ €èèhÛ·mÑÂ\cŒ*˜ `.€Éúoùßé0UyR·Ö0e³j CÍaðè.NéPÌ0ÅÁ} `É·¡0„Á}ƤžØ?ËÖ8=ßCA1vÎÇŒ¡‚Wk€l*b“°xV¿/z•3?Âöýè'Cèïph4hßé騶 o½%:$::úÇ›îØQ:hëÅ‹u+çð¸v­Øß?ÞÝ]×±iSùB?Ö¶n}ÑbáÍ›ºu{Z&(`Ú´‹»w?˜;·ã† ý+×þi&÷J©¹þ¾HŠþ&÷ÿÕò¯‚åàöÍfvèp0!¡hïÞ!S¦<-YðË/©ï¼Ý¡CèèR©ƒtQaaÅÄW«&‹ëؤ‰ýÐ2™Ð«Wî;ÆO?­¾j•}R¹/¾ÀòåèÜpvõÜ+¸uiŸVŠ™³ !·Ð±9 Á!kÿÀ‡[Q¯¢7 Am[ù¬ß°õ*:øàÖgð°^]t6úlÖ„½¯bŠ ˯ ˜q îN}=­iÜŒÄðp\ÎC¿:¸ØnÖÅî –g ¦®·CëÊžgÁÀ<ÄšÐÇ!uQÝúÀÒ ¿Gñ÷иÛà5ÌZ¬ƒ%èêþ3léúaj-Û;Z÷Z×—†×ý 7‹`hƒÚ_¢wM”ß’ ùëpª%Íàý>^ªaU×^õó8O°ÇøÚ°=4±ã1î’NÜã+ ¾ƒµÙ¸HZb\+Œw(û¤šLìÌÂ> Eµ˜ÖoH!ü¨Åa5VZ H«a\M|.EåìxÔÀ~`#p †À8áníUC(t‡`¸Sœ­\â—Þp}®àÚÇ ËEbTA÷ÆÇ0å” cL9å›r`Êzœë¹ÜÛCÿ°ü@>Cê3©'œ½áÒÎÞÖ_}¸Ô‡³7Ü;À­…ƒô5öb‚á W`¸ÃUPm«qòƒë@¸¿·aÒ>@°Ø äj€OTŠý¬¶ pöÄŒX$hTãf¾×"@ ôn‚«Y“Ï” ay„³ Ø­G‘öÀǵ Ru »ô(ñD¡˜ÙPPe‚)!7p@Yœj¶oG~w¥LFÿAÖ‹'° û Þ@ûq°e¦WÁð<‚Înк©uÄeÁ<y©0÷‡ëoðr·>ü¯Ïà jüP Îyá9ë'¯³àùÜ(Á€êiWë ü,_?„— nø£•õ«,6¢ïï¸W€1~8:Âö²¡»ùZüôÞëm;ãûû±á"ZÕÇí%¨imH¼üN߯è>ø}©è-^ëÑÈ/ÂíÝp ÊóW1|\]qÄ9l.Ä÷ߣW/„‡Ã.7óåˆÁƒó\]%wîx·kgŸè©b›½l™ïçŸ;Øf˜3'Z.O2¥ÑÞ½Ý6JR’ºmÛƒ <˜Ü¬™}Ò[ü«þÓ›ýY‘dÿ«`ýßÿ>ÁíÛãgμܾ}혘 u&¡l×îbRRéž=Ý_{­‘Ã6&$>\0}zÝ]»ü*×Þ¼i|î¹\‰·nywë&ÚkµèÔ IIX·vy'ï?@÷á0špá Òf—¢Ï Ä&ãó·±lŽ­œÄKA8a?×èŒè³wÓ0k6Oµ•oº…¹'ѯ1vEkÁ6;ð ¶Ä¡iuÜï µÉ€^W‘\бÓj 0%  ÐÖ×Û¡ŽUH7Ã?)f sCp¸YðC` Œ³Ô h6¡Ø’Ýðz®2îÜ>0ñ•ßZ¼ác»ó·úmy³€ ”~‰ð ”6Aõ¯Ð§žu½ÉƒfNe¡Ð5>ÀËõa[YS‘zG4иÁí¼ÒA´Ž2ÂqÄs}ø Ŭð®¨J†"aù¸ï‚ê­0®9ÆH!š^õx”ŽMàŠ¾x·.^*„Fƒµ¥ØJ]ÐËÝ<0ÕY¼ú ä6°ø ÐoïUL–lnÀ}Œ‘åY¢À .ÝàÚ®þp iéùž*æT0;´B•¨rA#ÔxšKåGIÝáTa⪧:pªW«õË©\Á©vÕg}‚˜`Œ‚>†«0„‚3˜Ô®þp·apjQÅáà`3pÞJF-©°r„bA¡õ¸¨Çenx¾&¾²{w:¤¦áÇ"\à†¦ðn ³ë'wïa›IÞèæ ÷®ø BY·À¢Äïwp`3t„7Üá)80ï0g"Ó NÃ1¼7zW˜µL°ìÄÅ[Ht†Ó›Ü-¬r¢Ïá‘3¤óÑulSV"´ïãA6Œíá±­½¬_r>,ã—Sw¸@ÝŠ„¡¿ïR`0Yp;Ë‹ñ…®¯ƒ¬[%Ó’±'~®¸Ùõ¬£äH&܆“gú`ˆ·­ñäLBÛÚ¸9bõfÌüûc0ºŽL´ñD4Fm„³¡‹Ð§¹­|ÝqÌßâ`WyQ‰aïÂIŠ›»ÐM`ŒWkÐy¥cÍX ˜<ÄÆ¢[7˜ÍG/±ÁZ¯g·n¹qq¦+j,—kÎC IDATYâ@ÝÙ¾=wæÌÔÆ]ãã;zx8°¶¦¦jÛ´¹h63&fP»vz°“·ß¾²m[ÜÛo·Û²e ÃZÁjðŒmÿ„H²þÛ¬ÿjénß`0ûùíä‡W™Ê@(Û¶=*ã…3;ÏË(žoœ;·Põîcª¢~êÖ¬ÉôJ”[_}Oø°yjĽ†EÑ©{3\Œ~œÃ:“‰îÓÁǤ³Ú\"{ÅѾ ÎÐy;m¢F€1˜ÙÿBΡÁ6‚’‘Eô#íùqHL€ï½g_Nkö³N²õzP£1—…:íÛW%5ÛoÞÓ§?5ãGW×-NN›ªÄ5þ©Åüó¿ÿrƒÿ‚ÜŸP»iÓ=@ÞµëágÁšL–¶m/Š;«Œ“ÿôÓ'Q6YZ¶ÌîÞ=qófˆÅQ£pêTûr£‘²Îÿ¾jáZBƶãX*ŽöÝB°Ö${¼çÆ‹D k}À$Á «Ñ³ãF"ˆc÷‹ˆŒU%ôùóq ò‘Œòä¬ç¤êÙ Š>QüHül¢ ¬“I¨8GÆi©ï ¨€t4¬+[{ôÛ"Då´ÐÎðå\Ä 9åyb®m-‹Oqƒœr^áo&1~<‡‘—øNÙJyKÕâžI’æ\Gq¸’2%{%óssíZ™ æŠL¶+S³2Ù¶‹Œ•´±ŠÉsäÒÙª´%W³E¸±SwŽê/™7Ì–·¸B)) dé®*³þ%21þb)¡>ÔªT¹WqýÏŠUù¶#W³™Yùi©.áo¬¡*6ÊãD-Wâh0æðÈURv›½S¸ÒX饩瞫`ÀI¾Ï=&±ú•Äk‚O3Åä¥FT”mò NL‘Í¢¯ò÷Rþ1w§ Ϋ¡a‘5ùÁ}ñ ^dÁsŒQ¹õ-ª”–±Ìõ¡ª³3ågH7äjñMÑÒIE‰ŠvÓØÞ<ö‰£TI…`°W•çBzy¦y»í­\YÎz¥P ›-òÈ—Ö‹æ(£‰}|KÙCò BFÙT{ºÑó¡”øÒ­c* ¸Ý» °~}æWú.îß7öîÓ¸qjX˜ãÓÉzH>xPìììäÿL¼sç^äSíÒkˆå_ë?AþuVyûz½¹eËýéé% Å‹MŸÚÛîÝéÓ¦EúùyÄÇ?ïêêÀ\\liÓ&&#øwoó)SxdŽÕ½új——4>¾ž··¨‡GСJJpá‹^/ÁlÆ¥#ÐGpýôšŽè‡ø` Ö.2a5‡a@G\úBÿçä-8 D/?\]W«?!½· Ho†ác˜òZ+`´`ÿ0Lø[–ÄaU%8ÅÍLIF’K|°Â×ÖøºÃóQB|^Ëð³ Ð_ŸX MÀ;IÞã&h²!ïù±IZîKõ®îúíçÝ7×Ï2‚/Ãë ø9[]FX¾Gd2Üà´²^V?š–=Í@a² ýd<ç,@2e ã0ç#ß®#1² º^™»ð¨&o4†Y5¾9”‚“ ØkD‰NM0¼-¦ºAñ± 4»3±³j`½ÇK°Õˆè²WôòÄÛîx±2¶ðØl2ÕÉÀ8`CÇ–½°Æpè¯ÀpÆ ÖVåÜnƒOHëAZRoH½!­ i½¿îU|va ,¹°dÃ’kýåÁ¢‚)†Àhm'…K¸‚ë ¸€ÔûI}–‹ˆ‚-@*À¼<çð#î–b·G‰RRÔ÷ÀLs‚ýä ÆÍ4¬Ñ" åp«ªAå$˜Ž‹÷±CB@âƒþðV5öÎ ã Á~è>ÓÝï19‡q8ÙÎp†a}ÐGØy$’Åe)$MQozY]ùÐ}‰)ÐÔGµeèÓH€<޼•H5ƒQo!šVL=p ¯@_ÒßQ·‘uŒ\F%À§À*Á©Cô(€žø¦>¸¹N«ñÊC˜‰­Íð¦õå‰a×q%ÏÕÁpóq1dG‘£ÃÒXÞÓÖÉÍt ܽ;Fã A@B_£AMD}ŽØ[Ð^|µ~õõj Áñ+ýÜ]¡ÜŽ‚‰«¤]‡!1«—`ñ\á…Fƒví RaǼñìdĈüsçô³g{üò‹0_r²¾C‡X½ÞÞ®woǨǩS#÷ìIûí¦[¶tqØ@(™™¥-Zì×éLwïŽïÔ©Ê1ø§]„ÍžÞìÏŠ$õ¿ÝEø¯‚õ¤Û_·.fþük2™÷­[ã*G…؉ÙÌÎ/ß¿_¼ys—Y³+dOõÄ¿ürþ©SúY³<6o¶«+VàóÏѱ#"#á"^d¿øËD›¸‚j‚(±; è3FN­Ç V®ßCfÖίØÊ KÑ}RòðÉ‹øz¬­\‘€1ûàÄkxQ°R¬Æ‡×QÝácбNy¡0 (Ü5­ŠZpÆ%ÂH¬iŒ¿B‡q0kjb`þ9LÌÀZà€Q«=4e̽˜‡ëû|^ìZ>•º»8]øx@¿V^· YˆÄ˜{£æ´ð°.ðgDŸÆ#)$sÑy„u9$p1Gn‚¥)¼gaX}*ÙC0‚£   ºŒÄHW”ƒÔóØ¢FŽ Ü`j+q¡šìKÁIÂìÏVߣ¥bÅHÇ騸`–µ«²EýQ@Šz˜èpQ˜“Àzà<à$Î@W ?à ê8:ÊN&ãUX áܦxÇm%îúÂÉ’:–ýÄÿ:5®BP KÌ*X ÀX *ý«‚¥Ðñ±Ò¦°¤Ã¹m9¦êY1dfàp.yÀ h¼ ¼GáD±¿—âW#bÊîÙ þ˜êPÙÕ!% kËàVîhêën•‹¨XlU#@m´íˆYuÐVØ Yç±9iNp郱0TX…¨8a„ÑÞ0¡¾@¿7Â|7. @wøMÇ +Dý1Š¿À\h›¢ÆWèã Û4± ™?!À 4|_€Çʆåuä߃q \W¡V ++ x(æ? .ì†ÃòPLÌóÄ:¢s£ÃPlÁâ†X-@¨ÞÅ–GhZ ·üQߊÓÒ›1à8nå`X#œ~NÖ‘]Ùf¤©ñ~o¬ÉÖIè þ$ÎÎÇÐv¶òˆDô]³!+0X ´ä¢ÓDdåcÝB̢ƀw?Åϻнnœ°Ÿ`?ú?þˆçžÃÕ«°[ÖM˜àxW\&eèÛ3êîÜéW¹@BBI‡—¤RÄÇnÞüéÛ¡… ÿÿþîøñ-²ÿ´„ò¯‚õŸ ÿ*XOº}ÎܢžŒŒÒ3g^1¢ñZ–ÉÁƒªI“"š6­–0ØÍÍÁ`³XзoÜ­[%UÅ’<|hêÜ9×``X˜wß¾¢Qn0 KÄÇcÍ,[¤ŒFô‰È,|ß}.ªZ¾_ü‚Æõqw?êf=ÅM¼²n.PþˆN‚¡u#¾ƒÙ‚Ó`x{[ù——°ì2¼ªáÖ,´,Óo\®´©…›cQ˪hLx. 1Œnˆ£2›‘lO>¦'ƒÀÖfxK`eØ­ÅŒBØZ o f˜À[€Ø L2½9åþ•н–dÖ( ~›Õëõ~MÊþEé|<ȇ©<סUØü0wᾘŒ6¯Á”ŠÜ­ɆÚ.¯c@o±¥¡b1«‹ºã1¾!Ú^t¡Øˆ[Z£ï¼î,¶B#-Û³q €'|Ûašü! ”ñƒ <Ñ© x¢3* ¡ÑâRì4" uCLuÇK€}¼ vw³µÐ è €g1ó˜`Œ„9æT˜³A¡)»JíÇN$žzCÚÎ-`~lëᙎõ€ÔÛñÌ¥ œ;AbrëH´ÀMà2 \JU~ÀT`0Üa@b%í¶V5Œ÷ÄL'G&¨3°9‡³j6ÄŒxM"ÖÀJ‡Ý¸  ¼ÛbZc ¶;uÂð×}m4ŠYuѤ¢J}0‚c  º ÀEÐ& · $ ù.p‹>C”" (ü 7Õ0´E/Ñ«†õCµ€ßàñäH!ùMÇ >‰G0OA~2LÍà´^~ÖÏì0È^âWcL”‡| ¦WÃÎÚ¶[ŠÑbPòM˜^;ýlåë’1ÿª9áJ?ôF4_ÁÖ84«¥ €ÆdÁðßp)ýãÒpµžµ Ý–ãQ>–¾Œå£mè èù!î=‚±X#&S˜°‡ÏcH/„l©J—®aȸ8CyÛ‹¹wÝ»ÃbR‰nb*ÒRv옓’bþå—Z³g;О?^&“&E<¨z÷]¿;9l ”¼<Ÿß¾âb£R9N&{ÒþWÁúO¬§Üþ·ßF-^|£_¿×®~rK$ºw¿¥Þ°¡Óܹ~Û<™ %::úÀ¿•+‹{ôp¹yÓÛI€îFŒ@¸ÄÑŠwî¡÷Ë0›qù(ü¡Ë&3ügâF Þ|Û¿2s=¶ŸC–_#bsX~_Gýˆú ­:™…½Á èÚ×fÂÃ:±kMð?Žˆ\Œj†ßGØt©äRô¾Š\¾hƒ¯¡ÎsðÞ#8Ip°Æ &Ö¥x¯NÀÁ:'0­æ®ä†ß-8¼g÷y÷½m|85Æ4þntÇÙ‚ ªtèßÃÇÐûÁ}Z7(='"Ç=+ëO $eÌL:vãê-<Э_Ã7Ö’‹ÜÃ8œ…,‡î˜{¸ŽÃ˜¢uw¼Ø¸R .îÜÃV RÔE—Ž˜Y¢ø5Â’‹ßUø¥Œ1«ÆÕÇ$w4‡#±.ùG-)x`¼f8¡*í¿·Úl®:AU «eëà¯N®åv¦‚r³“9Cô¯¥æ´ r„cOO¥íاZ¿¤¾>‹É­²”ןv×ÃQÅC&ôzœ-Ån=BËJ\ÐÅS«a¼XÄLPçA‘­fh$pª‡ñ>˜í,æh0¢ø!Ž$ãw LNpo‰±­0ÞÎ/¬Fv8ç µ…­Ñׯ¹Ø¸J ‚ê0 À nèÑbŽ„½¸ª‡©jbhcÔ­`»…¬o¡‡¹|Œ®6’~‰äs(p…d9šX7ïÃôò³`î —ßàåmå{ R€¶«O2Ã?ŒvÇaÁ¶&Iÿxd1º6·€³urÉÅK7`&ööÀd`@~sBáî„«£!TœÅ×Ѱ:”hdUªIŒýD¡·®~ ÁT9 ÖGû&¸½ÕÏxW0ÞB­ê¸»Mm{%”jÑu(¦`Åb,ù@ôrI ‚K—0oÖ­ƒ,Y¢Yµª|®ŽRâÄÄhºv½âê*yð`HãÆOç¨[²äÖªU‘£F5;~ü…'·üÓ –ß3¶ý"IùWÁú/¾ÿgùKJLÍ›ïÍÉÑ]¼ðüó¾On àØ±Ìqã”>>nñð¨DP˜81éС‚iÓêþú«Ÿ]UQQ‘«kÍŽs’“Í›6Õzçû]Ñøñ8r“&aÿ~ûn—¬ÆªõhÛwBàn›™ŸŠî¯A«Çáoñê[y±Ýçáa¾œ‚ ×låbÄZœÃ qò}›Î¤1 ÏÜÏÅk±gœ­}j1zE®Ë{bi[yÅ4º¯& žÜç*¬È@5)N·Æ@Pc©+‹QM‚Ó^(˜?bƒ>¸eã±öÓ®5±Ý@ÏÞ UsšS‚¹¨¾6cFŒïãaJ½á²­ÛX9\GæD`y>@·’"u­Zå¬+¸×0ùÂk†ù ¨°L0ÆéÛ¸  =Ú¨j‚>sñ8! Ð ]úbb-±§‰0¥âT<ö¡‘@ÚÃÛaª+DeÀ¬,ìô@»bD×€¬&ÖÆ@‰#U5@)v›ðàäŽa˜á†OäÛ,nW€+@8P*¨j «R;þº°–X²‹‹5Õ=Ým†¨§³Xý)É®€ÐJv».V»•d#î—âW-ŽRÔ©†I˜ê Çœ¥¸Ÿƒ8++@OthìneJÁ©ÛÛQ–g€6'£qÁ“/Ú¶Aß6Áë¸~ç-°øÂw<Æ×(C:÷"ôè‡6Sà_¶=(**ªU«ÖE¤­G” Š&“õ™—²‰7 ®§Ъ»Ã[È×€þpÛŽ:Œ ÙÀ@ x8 Ûž&Û‚yH0a°+NzÁ½Â©g€x$è0¸N¶‚»õìØz}ÞË®ÑÙ¤€ÞŒÏã Á–l ¦‹çg`€À1¾þ>8€Úˆ\ ?ƒï…»¾R)®}‡^ºŒôltžŒ5vý?öÞ;®Êúÿÿ¿ŸÁaïᨀ€qâÞ¦–ZYiVf½ËѰL³,GeKmX®LSSsoMQATYŠÊR ‡q€³®ïÈáºà XïßíÓí÷öù·Ã¹^×<¯×ëz¼žÏÇóñü”©bÁ.˜ýßo¤›?QGê·laêTš4áúuœ¤²!u¢ Õ\Ü`ÆüW_MoÕJuýºyB0aÂå}û²çÎõüî;³ ĦVkÛ¶ÝV\¬=~\¿~‘Uxd€åóðfj²ÿëK±xñâÿëkø?³O?ýô¡·¯RɵZãíÛ%wî”OšÔNö0*VÇŽv‡åØÛ+õz¡OóëïÀ@Û ò­­å:Xµi#YÅZYYYXÈZ·V>\¥ÑC‡ZÚÙIÎØ·/ë×cmMÓ¦xI•’‚z±çVVäå3PÄFwsÂΆˆkä0¬/v5Ø@¥¤«'ÛÎbðjNëT “1ؗͱµ¤¤’~5/K!mÙr + J´ô©qš8©èâÂŽ ®–øÔLCíl°Wr¦€<-]hZƒùÙ“£'¶‚ä*:[Ó¼fFdIŽ‘X=7 tQÒ¼Ú®úJþý7çÚ ?Õn¬é¦žðr=3«_;…Å)* …nHÍnƒb.q”e¢M¢¼VÍjÛ­°óÅå"Ù„Käö·jcQƒHÚàÞÏ›ÜË¡ø69: íj^ÆräÞx7¥émn—Sž@BSš:Ö¼#mplM+lsH)æÞ]Ôä6¡½¢&|#Cî„O†ƒ¬˜är2ïpJÆ™Ž²w‚ {\£%³‚Ô*Òuäg±FO±mRýRV*l™nÅP@Ï =7 d•±ÂH¾/9fcgà `|ãÀìádA œ‚ïàgˆ„,°€fÿ$SU“±TÖíP´Fî†Ìæ¿„®J ÖÂ|xn¸ è“à]XsaøŠPÄ´U)áã öVq´t±ç]'VZ1D^¸& -&ô._ZB¸€`O@[5eº…T–=ŸØË,/㮆{ntéÉ‚Ö SJÜ`B2‘±¶˜{Z4^ô æ…¦"ˆ¦AS-s¥Fݛޙh#b»gQ´†¹”è0L!h=•5ýÙÊÊê©gÉÊF3‘ö3é$¯yæèæ‘r­%òŸðî$z,G¨\MY† X¯ÅÙºf—Bx¶{™RÌ=#>JŽºb[ó«ê™’Ê=>Ví€mÍXVëy9–œ*†¸³¦sm.KìóäW0×Ea¸˜l–‡q¯”oG0QäŽÎàûÓdªÙ<¾"ô[PÊ;(,eþ$žéC¼ñ9ùÅ àó·$¿æÙ ìØON‡¶Ð¼©dS^Ÿ|Ba!ß~Ko‰çà½÷J Œ&X¿ù¦Mõo-,ÔöYvA~ÕªVÝ»›gVEFíÛ—SR¢ß¾½‡ÙX¿Ä–.ÎË«ìÔÉeá‡+‘6æí&iÜÊÀ#Ú§ü/ {°sû¾{÷ÝÉÉê•+ûÍ™óð0ù¹s!!•ÉÉ=<,Ͷùê«ì÷ßÏìØÑêêU_++3‹›çž+úãÊ矷þý÷ºr‹ë×3cÍ›‡‹”Ú}>c19»‡'DÄk£‘ç²ó$Ãûrtµ„|ðù.l¦•WWã*z/ŸLdøj2μǵ:ÏJæÉíÈe~žá¢ïLä­pì-8?ŽÎ¢«z/‘oRheMTP-Æ2ÂÛwX‹›’3Þø[‹¾/au9®rθÒII®mGßþÏu×οvŸc”ÝPmÝl" ôp°B©œIqÂp¬Öàd˜Öb\ÉÝä©/ÅsÈctõ—D᜚ §¸‰ÜQUèpõWÞt˜B°•ˆæRLñIN&’(G>˜Á}é+®URAI<¡1lpd¼7ýdR$QFfÒ8ØÒŸW<êÖØÁ@y!‡‹ /!¡t"ÄIöôÄœÉ×°³’Ã:®2,¬iË*ú5Ç ÎA2ì¬.¯¶f0zƒ4wpw3ÚñÿŸ[äBäÃ¸ç ¡F °†)ÐúCŸFåN‚´r~¯à#…€G^°f’RÄÒ[wóØ]À=j@‰‹;ã\gY/D[NV"rˆ\éÔŽñM¨ûŠÎæv;òI¼éÓ‰ÁnÒÜ“ø­#Ž£í%Õ/ %áO.ê1t¦õ$ú4õpÆ $&]Žl6]‹./ÊYÜÌB€Ýb<›‰Â”ë)_L‰>Äþ­Ú ”À¸!𧈻W*0¤€(!*þtÆÄð.50ä&Q儨óg;ÜjƒA`LÇòàÊ@ìk¾¯ÐrKyLôdÛ`,jŽ“[N¯u¤«y§/ß «½ñb ËHÉgá(–Šˆ‚À“K8t‰'{±{JQ'ýüWüHû–\Ø„»hB-)¥Ë`ÒïòÍ'¼3³Îïs?\0q";wÖå¶oß^1eJq³fŠk×ÜÌrÛ§OOÛ´©`üx§={Ú›]• AAç#"Š–.õY¸°!UáZ»t)¯_¿ý@lìÓ~~?ö`ýì1ÀjÔí9’1zô1elìÄ^%jìØK‡åÌœÙæçŸÍp–­VèÑ#)!¡báÂfK—š‰ä|#8ü‰dy7_ W[½…»{UÞ,‰xÿ¿—/žfë-ÚØ5Тv‘38r®¦¨©NàéÛTã¡äœ>5Ë?L,â@%rvF¹òú‹÷¬šüÐka¥òþeÖÊ= ŒoQû+\E7•ÂŒ=°ØŒ‹KÍ"Þˆðwv‘'G6V“D‘»4Ÿé‚U¥oÓ-@9Š&e3ç*кb?ƒÁž¢­FŒç8wŽsB;ÚM`‚Ô½”OF;³¹ ¸ÑºÏ4•ÆŒ€|bXWMÌr£«?3ìͱ 4$å²½zÀŠÖ®ŒscB~éÒª8¯á÷JŽN†½ K}UªèeAçF;Rà/‡3p€Žp]ÚÆ šC3pgsŸ=`ß›µ (ªq¤™û|´Ò]Ü!l {M‚dæRõM LËU-çªôÄQ˲zJf™K¸œÏžbN |Ý™àÂ(y½“¨¼Íž[üiDWC·šT'‡TCq${o ‚-NLð¦·TÜ_ˆ"ê'ŒÍ•oÒn!ì2·>x=O°Jô´sѬ ºm9úYtíMm,)‘ò9Ü*BïíJQˆßRú e2X€ý›¢.]#á,´‡s`šª*FrFKka®´®×FFÝâL)í-9çSëŸæ&°*W‘A´¯y̼pšm·hkOäxѼadèfΦӷ%¡/aYs|Aà­?øé m ›‡¥¨—}½—yq¶#zmEúR"A¯ Ósð;FKóL¦Íaó.ºpá ùࠃ׮MzTN IDATÑF::ÕjÁÏ//+˰aƒãË/›é0§O—’le%õóò2¿ÆÞ¶-óùç¯6ib™œ<ÐÁá!ƒE«5öì¹'.®pÞ¼®+VÔs¦™³GX¾oö¨&Kz °þ‡ïÿ‘ºà /œÞºõÖ€ÍOŸóPɆ[·Ê;u:«Ó QQAæÓÔ##ËŸxâ†LFddÇ=îÒððð  ûsÀ—_–ÍŸ_Ú¡ƒ2.ÎÍÊJrÊ´4ºt¡´”;˜K®æb|ÂxtMÿŽ‹¿Ègp˜‚%¤ëF㺈6&R’ú+‰z/œÞ§GS‘Ca7‘¡Ä Е¶Ó±½K(ÙÍî 2dÈúÓ?„:Ñ@=ÚxB¯rXG•U'Ö•Ö(f0Z`ïͳm#3OT7–p9—íj«ñAeŒ¼a ½Š0-QZ" d™¾—ã¡¢·%Á*•ü½À@ÅNYõË9÷‹æŽfÕ°'¬úC 0ïx€ ”k‰®öTéˆ7BVtVÑKE½e <= Iyì-䈑JÀ’–nLpcœ’º!ûj+æfk‹¸8áåÏLçzÏ6kì(%hM—'xÖ^ »TR÷°§Œ2[l'0¡½?‰•ÛÚà>ƒÁîå6ã&’’ ô£élºÚšcpýH44¯Qtš*[dkq(zÎ90 ¢aüH-œ7ÀóÅì¨À]ÎWüDÀ)©ì,Â]ÉY|E®½ß3™ƒ °§'ãE“ÕžT&ý°ocE^¢U‘Ì=†µ’³Ó ù÷O&1r5‚À¡·)Z"—Óc©9ft^XÄÖ£ø±•ÈG•›O§èõ|ý /K±Ñ£9z”±c9p€:©ë×/_©”]½êæçgë)M59q§Ñô-Z˜®¬ãTŠ® uGþ;.E].†ÃMhÇ©Ey¼¦f½G§\ °¨ý~F:òqTpÚ›¢¸Ù¡žºŒNàk?Þ¹zš(N¦0j+#[Ÿæ9ŠJ/ çròËX6ž"­QAàéÏÙ{@/ÂWÔ– 6fÚ'ØZsåw|¤½{â vfp'wÔåWýôo¾‰›qqu×®z=={æÇÆê>þØîÓOͤ’˜KÔ±ÌÌJŸÐòrÃÙ³ýú÷ˆ@®^oìÓgß•+ù³gwZµÊ|³ö`ýì1Àz´ÛŸ8ñäîÝ©#G¶:rdäCÿøcÚ[oÅ·kg“˜8À¬î(¢hýµk~:˜™÷ßxCýóÏuÝÑÕ–•Eçβq#Ó§K6 œÈ¹‹LÄoRù–[wèñ<¥~_Âó¢›xëûPfÿ­%çÓI?ÎßaðoTX;–"††¦å3&Š*#+|™'òÉçë ¹Ab%Ýl8â’wd∢”[G¼&…zŽ2µҹɱ¹ýr Àûð5(à×¼×!ÌF½Ÿ ²Õ8>)Šw$R>—[Õ2¤+éà"¢­”£ÿØpîiù&-E¬²õœ¾M¶ù(º¡‡ØY•BÊ®$’(CÖnƒT‡•ä’ÁŽ\Rfx÷c²X@²ÚrˆJ`½6jn[`ÛŒ`Ož´¯×¬ÚŒh‹8™ËV É@5ðàYÇz¯öúV ¶ªÓr¾šÜ]m"°¢hà¼ÿBÐh¹òO@UµUq'Ÿ}ùì«&°+°we´S,1/΢G“Ź4Ž”*Ǧôõb²RÔå€*ʯp(3FKlíÏÀ:XÍ€!Ѝsœ«¤ÒOO<ƒ÷±d²6pºV/1 ³” š»kˆ«ÄлèÑVäÖ`5w·SŸ†˜a …)è۠؆‹§h8ÄÃÈ„žpD*oÿn ß–c#㘠ÁªÚ³¼™ÁšjèÐG† °E4“E>XÿÃ÷ÿ7°ysò´ig\\,'7ibýàÆ§NårÑÞ^™œ<°iSóóuAÞß?1'G·n]›W_5£FRìâ"OJr÷ð¨;nŸy†;4ˆ“'‘K7þ´‰7àæB|(M¤eÖ¦,dûqzúq~ƒ„šÐ«RGÐW\IgLöÿG2÷Í9ÆêHšØ5ƒÖ5¯uSRaä `M:ÿ‰C!c{&‰âZi%«'?Ý<î|ª³÷Ú€÷Lµœ=œ¬To ¼ko=Ø’CΈכáUÐÁtX+Í[3圿‚íg8˜v*D7‡[Ih\°XE_é ï6êDgQ®B1ÿRWÁu27Z‚Æëé ô—"5êÓœ¾Æ5À‡A êB—:Ä,-šŽÅqÊ€^…M7Ftf°¢^š[éÏ䌡æÞ’AmiÝ€N¦ŽÂöå±GK6 ÇÚ…Î ´# !”PÏŒ:µDh9¯%ÒH‰iƒŠ^Z9®r\ä¸Èq“ãVóÙE›Ì¼ìÖß7J#…F Œä×|(4’g¤ÐH¡‘|wE ÊBE·jþ¾Šž22$M÷[ÁíbÎå³WüÐÜ™dÓ@ö€]‘éÏ'¦úG:x2¶…9=Ø,®G°³L ûñŒs=OX>ù'8q“›€+®Ãæ-=u  Mâ® †Ñml~lççÓ¹3ÙÙ¬ZÅlišŒ 0úEŽž63›¨Ëè>…Ô,æ¿TWy¯!2–‰ñéX>¹Ä c·qôÝšþ2¶5p­¡u*ði2‹“QÉ9È0wÁ`8øÆKɇظßkQ¹êþ;ÛZ¥ý صµKÿînÉ~g,E å <0¶Ké<»©x‡bLÂúkœL0Rƒa)‘”¸¡ú€V¥Ž‡ ôkˆ ­õ t²½>K©ØHh"w«©0飆{ÒH;Îñl²´Áˆ–õ<@jr.ðg×GšôebkºPϪƒP©.% !s¥k†7¥ßC‰ð–4¯"S†ÂozÙÑÕŽîŠÆ"!£ž›Z.U¦åœ W)ÞAŽ£œ&re8)hRýYŽ£œ¦ ©“2‰Ì5hþeú‰zQurÆ&’tÛãø>=šK5TïPõ5wΣöÀb5^D Ó4(&býhP¿Âk ‡Y°RZ º’•~wâ9‚ý>—ÙwPÈØêÉ3¢tɬJ‚"HÕ0ØÃ½ó#òm¿w‚o.àjMä Ú‹eâ€þñ*“¥JpS¾bû9zvàüWêÕÙh¿ŽLÆÙuô“¬Õ˜³wWâN×]s&&@U‡3²ä÷ß+^|±ØÕUž˜hf•k4týÂ…ò·ÞòøþûÃëÛ·gN™ÒXi†ê*m-ZØÆÇOrrjT¶¬Ø¬ƒ=Xçö³²4þþ;‹‹µ»v ™8Ñ| “ݺUîïÖ`¢£ƒ»tiðM0aÂí}ûŠÇŒqx'ŸÄƆèh|¤©Kð‡G%ô #Ǿg¨ht=€ŒõW#V#x“Ñ"¸XTIïuÜ,ä)_þœT»KCL àD¾KÁ^Éé>ôtŽÏ›·}³ÆÂö‡ÞåÙÜg–Êdl›ÙëÙÞ-zB È1ò”;œ%ƒH 0ö!yI6´X×!|Nz•×( ·÷h­’ºšL¼–ؽOvR^Ë böqɈàE³W¥Q@@¸Æµ¿ø«Œ2À¿a s¬÷òÎ$)‚Ed-ðíÇäúNŽjSs+•Y„Ѷ4kͰV U5*É(åb>*Hj³ç6øÙÓÝŽvtW4 k^Ï ²äÔx ä׸”î;™Êq…Šî:â„Fˆ2Ȱ¬ñ¹›\ebÏ™‚– ÿ!`ÐXÊÕ2¢Ë¸j{VÑÌ•Qv8h–¸&`Ìår*ó‰­|ŽthÃð P˜/JXˉŽÐ)±ìÊÐnŒ¬ãž4b¼Ä¥3œ©¤R޼;Ý1ÈFêFÇ£}iñ2D êðߢ³JŠÌNS´„t2lѺ©9)Ñ:n]àK˜2øKïksÓ‹àgG^Ó x9 `mÄžwµžbKèåÄ©>ˆ%Ê÷¦1ñ$ÀÞa<)B§[®1u/rŽ¿ÈÀ¶µß›²˜ßΗ¢ò\À‡˜õ N¶\YI;=¯ˆnSÈÊcéX(Í(¼F·¡”•óç:ž–VËÑéèÛ—+WøÏøñGêXa¡Ñ×7/7×øë¯N/½dÆEúõ×9óæÝmÝZïgoo>šo’fظ±ëôéá8&'«»uÛ]Q¡?rdäÈ‘‡ùÈëô¾†ˆÇëøþÿ6À~þ9ñ7ÂÝܬ'»»?d®ûí„•+S,Ù™©ó÷Oðó³øðÃcÇšqA/_^¶paƒüÊéÓÙ´‰€.\¨§˜÷'Sg›gt.ÝÀ¢54q!öšˆV“ c-?ÊÂ}8ÙpéC:ˆV7 賞âJ>ÀÇ!µß_Í'øåz¾éÃ;¢Õ¤¯ÄòëÜT¬»°øÖÚï 2Åú€wo¹ÔföÒ)êyoÓ­^Ñ1¸µÀ[6¬t”¼UaÜNp N‰E÷"…ù»a±YD7`SeÆZ«|BGl–Ó®µ4šv—²D§Rbü%|Çâ)~èÉÜÛÀébÊí°šÆ€.Ò`" Cwžó&f1$ræ2µTÔÐtžT5䪢ø.¥sLC Ç¢ ½Û0Ü­ 'Àˆ¦Œø2bʉ)åª)¬&CnI[;º9ÐËžÀF¶2­‘"âÿSŽœšs äQÉWè{”dXÊp’ãhrtÕÿWÇ?©¥#`¨ ¹„¨2bʈ1PjÚd[õ]ÛÒͺ ƒ@%…™œNãpù€Usžðdœ# 1)…¢/òg… ó¢wož¶©çW{0ÝªÚ )[Ï©Ûä˜Í¨0e¼Ú¢|‹.ARD^…ñ{2ÿ ÖÙ~jáåP3JÄÄÄpxC¯ 0 Ö€ÖÀ éõì¬dJXéÀ&ÿ³ˆgS1|Ó’wDÔrá‘„âoϹ~¸ˆæ"SÚàW}xO4\¸ËÀMTøy 3EÎ>Áßv“A9.ÒᮥÑç]*´l›')‰#Œ—çè߃Ó?£í¢×4žÈh^z†_¿«óÔY¸åËi׎ØXìêÅ÷fÌP¯_¯éß_uæLÝL# #C;}zZ\\ŦMmGjp(}öYò'Ÿ4JšÁh 8–=}ºÏÆ!hù{d€õ7ÏóÀÞ} °þ‡ïÿŸ,A`øð#'OÞ}ñE¯Í›>¸qQ‘ÎÛ;4?_»o_Ïqã2Y»6æÌô¶mU‰‰þÖÖu½Ð¦ áO>±[¼¸n¬§¤„.]HOgÙ2,¨{äI¯ñç!39ÉF#Cßäô%Föãð*ɦ†ÈX‚ÀäµüMç\ø[&9~›Ñ[1 ü1‘É¢Ò¥¦0ù/rö g´h1¦˜p‰¢ë&lØí÷ÒÅ–µ£\é×F?(`Ž+E»\Ð2»„4A*¶;IøXé0n€'G’ŸŽa …©õ¦âââ”Û/ åU6(>¤õHi-9±¶PšÎ¦«½(•½”ÊM„ÆsGÃé6œn6õD•J(9Å©³*(½Ä¾œšâÕ¯ŽÛa>[@( 6ãÙ\0v´lÅàÖŒ°¨—½(6#eÄÕ€­A¤nI {zÛÑÕž@ÕË!ÿÓ'$^öóëÖHÏÓ£šTE‹=U–´°£«Ýè£jÀGXsú϶E+†´f¸EÑU=U·¸œNl:±@Ú÷ã÷z¡Ã|òsü·W\‡3Ü«žLƒ€ÆD•RéŠý« n'ú-¬Ù¤Rù!)·¨P!ŸE‹Nq9;ßw2ëæ ÞG…²Õ8Ž!x-¼;Á¶‚t1Åæ¨¨"Ä’Dë@1SÐ |Þ‚ù¢ùL'0îGsieMx?Z‹V Y†"±˜—¼ùu€èûRz­#³”·zñ½40÷Öv~¡«S¥Œ¹E¥‘š±D4K¦\eGî*Âúá#Ú¥°Šƒ”épcë Z:f…ž_¹”Eÿ6œ|•È)½5’6beÁ¹÷l+º0Ù¿ðÃaz´'â+,E²øÛôšJE{¿füÉãI ÷(tzŽne¸t“FC÷î$'3>ŸNÓj…îÝóõ‹Ûò‰™LXXYHÈ kkyb¢›6 2¥¦M‹Ù¼ùî¤IÍvî¬KÈ«c¦×Êž=Ã&LhOÚ* IDATûàÆ°Çëß`Ö?ºýヒ{ç Í›Û$$L~0Ñ$Ùðõ×~ï¾Ûà+0"¢,(è†J%»vÍÏÛÛÌZÿµ×ÔëÖiBBT¡¡fœÕ³góý÷øùqå Òâî8Á¸—°±æêI¼¥ç?rž1sQYpáWº‹(\:=¯¬f$½¼9ö©ÄßžœC¯ÏQWðÍ$Þ"9Ú«Øp•6ŽDÍÀ£&¦ Àëa¬MÂAEèz¸¤‡Ùóâ$ƒN×$`K—7…šûiçnùñ@7;ÕÞb&§ XÑq͉D=# ¹c “’c.´ÍËå0 Ž‚ìQ‰Ø‰V‡)ø‚Œ s¯( НˆN¢Hl2^Ïá%öBeR´“ó×Éšã<‘¾þõˆí$f哞DØM"õhœ¼éíÇ€†ZFô9\Lçx=žÐ@Eãòhˉ/ãJ)ÑåÄU —W›mì°ÁO…«'%NJ\MÞúoš‘*=j=Åz täUQNt9‰B­^¼Üšöô°§‡=Ò[¯o5 ›§ h+\[3¬ £-›Ч›DX&IÕß¸ÑÆ—`/z+¥þËjºU(¡UT5D·ò(ÙMäURWì&Ò§‡"_£à¢ ©rDU¿nf9†edœh`yð€ò&¡öfpI鼩æ XãÈ Ñ%_(gX2eFÞò ™{N«SqPÚ—¢‡§Ñ3üáÙø;sv,®5ó’ ðü¶ÇãéDÔ ÜDg‰½K¿/ÑhY?•Wžœå›½Ìû•¬~¢uW¥–^S‰»Åùi¾d—*-½Fr-‰Y/³ziÇϬYüðƒù9X²¤ìãK½½•±±fˆz½tíZŲe-,hÇWK3XXÈâãC:txÐð1F¦Lé°uë ´|¨=2ÀüOÎÖÀaO=XÿÖûŽŽ^¿~ý¶mÛÔjõC/RVk4æ¾þ9À2…  .äÌŸßíóÏ{=¸qc$€—^Jûí·‚áÃŽ3£³UTdìØ1/7×øÛoNS§Ö%ë˜Vc °lYÝ}«+›ö l )ó­ü¸“­ˆÞнh¦Ë.¢Ç\îòá$–O•ì²?– kË8:›¡"ev­!› Ë _+NO«]­¦œfÇmÜ­{‡ÔË;'Õi4™m~ \ UÜ99Ûª.~4À»éýÅâ–^JC€5­™)ÊúI70¢ëz<wÁKäÎÓÃkð«9©w=¼úseרdyNú&3 ìàæÜºâöÝ]¤&‰ÌDÜ£ð¥Ådú6¯‡Šê³zÑ«?ýUõ‹Z4·¹’ÀéÂû%ðî;´<éÞžx)wÒ9z—ÓzÊKÜ t£‹ lõ«´•SFl ‘Õì%+ÚV’&n¦ÀÁ7%ö ”Ø[àn[õg¸«po¨M}3Re DG¾Ž<=¥Jô”Vÿ[ýÙ@‰Žq^¡gE›I¦£¼ÄBйYÀ5@†ÜƒÀ6Œt—ržÄ¦&çç¯s¾’2@…U{ýàjN',™äc+¢hG»ŒpǽN›*ô'ˆ=NŒƒ%Ê¡tAW Kψð7wpÓˆÐ×÷èî" °&¢Y@Ê]ªlQ|HëÒþf*ÐÙÅ6\ÛŠX‹ µU/óg%V2¶:ñ”脱 ¼A‘i®ll+éˆÝ`ÙM¬ë8¦52î8ÇîÐÊŽð'i-ò-9Çǡثˆx…N¢ZXNàrRòy½?kž—<±Ðk ûƒ‘]óyZJÊž¹œµ{ðkÇ¥ÍØHqÒKYñíÛs;)¼9uŠ¡CÍ{ý[·ô;çWU ýå:h™þ¼jUîܹwÚ··Œ÷kHøê‘¤öíK›<ù/ggË„„Innÿ(˜þÈëá ñ~ ǬëýûûûOš4iÒ¤I:uj Àú7òÏ”Tú(à{xɦo)ý†2<ŸV°¢­¨h1®®¡ Âé#Ú:HS´bÈÿ–«ET9bùÝzHßšŒgH<Äe Z9ò'ðG }=Ö‘˜˜eý`×'fU[µC+™‹t€-Î^ôòg ­´„°ÉŒhsˆJ倀P]°ÄÅ?|]ðs¤}#ùã Ie\ÕQPIšžb=EzŠ h³»[%.5~/'%NwÓÔ­Ûºéî§XOqµSª¥£‘£Rà¤ÄÉg%ζt±¤…ÝïN«B]ÌB’ò‰)á¶€¸Óµ„Œ– nÃȆ`¨}Ú}—Õý*Ñ5.«^Js>B1ÝÊ ·a 3K·Šäæn"K¨AÚM¤‹”B—Oå×D'P(Gö ^Ïâ%ÁàrWsW‡à‹ÍrÚµ’^̦˜Kßtk]€±;›qqÁ¡8Y‡¥BíEFƦÅYÎg‚D âF%!ÉäèxʉíÐÒ˜BÆÎžùqŒÏbgÊý5•È«¸ï:OïØ÷,c½%»Œù£ñôöäì{XŠNwò ˜KžšžaÉ ’ç¹7”§æa©"r]¥*f®<™Œð}ô– §«ÕtéBF†yÞ*0thá_UMŸn³q£™y87Wïãoš¨ÒÑm¼4ƒVkìÐá¥R¶tià”)frÉɬƒý{–ÉÓQþðúëa¿ü’4mš÷¦:RõìÆ²ÎÏœhvRqíP¬~ÆÉZ´õLPû`Ø‹„ºÏÈÈBbu4WpÔ™.¢á|»Šþ7ÈÒ1Üý$Bt¦Bκ"0±U„Ž¡»HÇ!1¾(©âË!¼/.ÜÇò£xØse!-E#½JGð\ºÉnué wséöj~xŸ7'Kަ© Ûn¦²pK?¨óŒyånߦ²’°°º™×ÀæÍÓ¦5¸Ž^y%}ãÆüaÃŽo°¤‡IšaÆ®/¿üµ…µk“fÎ ó÷w¾vmâC+@?Ô¬ƒ=Xÿ…ÛÏÈ(óòúÃ`’’&{y=ĉ5wnªU©ƒ¹:Õ§¡6ƒ[ñÙgÍ-2SÄ÷Á¾ëª*úô!&†7ßä‡êîûæ~ÚDW?¢ŽJ4ÜŸwóÆç8Úquž"úª ðì v†Ó±%Qßb/ ¬i蹌”|¦öá7i=ÄÝILÚ‰\ÆÁ)Œ¬YUl?¢øv² “ýÖõ­ÚEåüÑ>ã‡ø¹H™žÙž¬ò—í£,–ÝC%c_{FŠž±fªÙ¨A%c³#ÏH£¦z?LåRJÓÑû¢üçÒ·lÚ…¤ÄQ®@ö M_¥¹xЧtùà4Mêqk²)ÞÅÅx2€&8Ž#0 ý¼‘Ä,Sã,®'–FŒàˆ‡Aégõ@Q ÙùÄ’X@B¹¦ï•X9ѱڳ傟¼ÑA½Æ˜2=…5žªb=År,õ”Õx¡œ”8U;¥þÈkÈ4d’XHR>W«õ,ªM•#žÎø»ÓÕ?EÃ7+`ÌâF§3ˆ«vY9ÓÌ—`ž°h ²‘t«\Jöu…À»ñôìw©8Ý ·wéî$uM]¦t©yèœP.¦m´·”#|ˆúO*äð.ö³$*TµBíS`’râIzF’aÀOÉ1Z‰ü¶wµôO&µŠAöî€xÅw0‡§.£øÆw¤½ûƒHVÄb­äø(‚En­‚ z¯ãv/taËÉ.b¿…Œ“o3@ꈚñ=ëOÐÆƒËßInLyУžàÐʺe›ÿó!k~3?×:ÄØ±X[ƒw=é~“ð•Y&p劦W¯$¥Rv횟Oƒ±¼%Kn~üñnÝ®\ ~0fÒéŒ>>;RSKwì2yòÃóTj °Æ<¼Ù#_áÇë_ÿXMš4)((pss4hТE‹:v|H´»‘Gn¤Í˜qnýúë/¿ì³aÃC’1L’ û÷>ùdÝ•«ÉÂÃËú÷¿ae%OHðóô4‰0±/¯]s³´¬;tèÙÓ¼*±¦‚îCIN1¿ª{v;NÐËŸð Xˆææ²Jz¿CâžíÏöy’]LŒÔµ/0CZÑá£Ó, ÃÙŠÈx¹ «¨Øõ츬ˑÀŸçÂÚÔrП h¾ëÍÞr™ÌTúK_Þ—ªÍ»Ë×9ØÈ9êEQ8E€Jøª|ãÀÛÒ¨ÑAx40¶!a]ÝD?“¢ëè­}†Ã Ò7¢a Y›É 7Khë"y%OÁ×\- ÒÕt 6'pô?¹˜ƒð§ÕDú6¯Ç¿Ö¢ #ì"õè[ÑÊ×@›7,(PNñ ¯^F À¢=|дùƒîXH\‰W rÂÇW:9ѱ‘ùƒ ¥¤p­„BªP›6Y`ï‚_µ»Î‘ö Õs4YI„Ýà¼æ¾b»e{zúÒ߃¶ íRJi4Ñ©¤¦“øà3Œa.õ¸whJ¼£#é>˜Îõ®'•’UÄÞF­D>•Žãi'ØF„õÜ[O¶!û%xzH;d2ú×kúóž—öçŸ`Í µGé]H¾‘ÞrÁM´-OOÈ ’*écËIoìD›.1ä"‹¼øLªo¼:ž9XÈÙ;ŒÑ"…8‘á[M# ç¦c#º|SÞÌ·“x[š7óË1^ÿ+á_ }¶ŽO~¡…1Ûp“¬¿Âö¬yo}q1:‘™Éʕ̙C}{åõÆ æôëw=2²|þü¦ŸÞÂÌþdeUúøœ)+ÓŸ9Ó7$ĵ¡fÕ¶iSòôég|}âã'ýs÷`{x³G¾†ýÿë뿹vü?´'Ÿ|r×®]¥¥¥—.] ‰‰‰iÌŽ2s¶xñâððpS›¸¸8µºvÖo2}þðÃnVVŠØØ{·n•Ôo&>‚³³Å /(”ë×gh4q3µZ}èСêÏAAvC‡\\_|‘cö>øÀÖ×W©T2{v¢øqqq€¿?Ÿ|‚Jeüé'ŠŠ$×`cͯ+Q(„°HÂ"ë^ê—ÿ)iæª+¯à‹M’MvV,:ÙÎJ¸•Ūƒ’M][òN`²LÆ—‰¸]{ Àg v/0 ¼{‚Â2ÝÖtÕ¢¿]uoãôF'\&†¸ñ£—F.ã`ë3$'ZÑ’§EUerª´v“ V8ðzA°§’E¥‹®a,|uíš3\ƒÉ‘˜hz’•qIE$?M%ŸT<››\^äV«ÕIqñ³hñ íQÆJÞáÖUÊÄO²®«éß¾ÐÂåaÒpaÏÕ³u~‹.´ù„I/l©S$pg ç~'ìRÒUñ¯5˜ÁoòfºäWäÇs’“kY^“PÛMÏÁ'‹¸6£ÔóG3·†›D^bïN>‰çÔ¹ gê÷ÓlhÖŠÁ]™ë7«wÉ,jÏDG:ї̉üvT˜ÆÛIü–CTaIv#˜>7f\ˆ¯¡úï?9‚x“†ì ŽV/8!LIà—ÖÝ#¢ µ%NMôeš}Ì´al ä£vL©›ÄÇ%š=x\\œZ]œIÒ_¬=ÎOW9ª¡Ä‰¦½xªýÅq!L­FWõ¯!ƒŒ]ìúßB M'ÝÿyñYžM —œH@¸Hòì’ }ðZÂ3#è~A| Y%¿‘ô ñ–(«äËé;v2ѥ梩¿~¸2xfkðJasEᇨ¯£÷B¹4:£KÜmÑ5°¶ƒs³³W×ÌûÕ?XÉü ŒŒRèB]êMZžI!_SÕ݆£^ØÉkŸÃåb>¾A¥Ax£Í}teú5×]gW r¿ ¸®Lw1ï$™%F+ÝçêMÅÞûƒÁðt7 ]Uoºp]áÈd¬}ë>º2]CØUN_F.6z]™®!¿oÁRe\üÞ}t%þÑß_+ºfÍ2Ó(º~]oe%[»Öñüy3}ò·ßò5‡ 63m2uÓ5,_~ËÕÕ"$Ä„®êÕz½qÓ¦hGGÕ‚ÝårÙ£Ž‹Å‹×‹ñØþöÿV[³fÍþýû;ö_?òlöìóߟ0uª÷o¿ xpK½^5*òäÉü¹s=¿ûN S«ÕŽŽ÷}þÙÙº€€¤¬,Ý®]í&N4CjŽŠÒÂùón½zÕ% ÿ½óŽ¢êâþwÓ{!PB Z „Þ{ï <APA‚E@¤ƒ‚Ò¤WéH($”P’Þ6»›dû¼,Ä-Tž×÷}8Ÿü1›;3;÷îÌß=çw~‡Ø·AƒØ¾ÝôØo×ñù\Ê•åæIJ‹WWîÐn,* GVÐI¬<ø:½ žM'1ctþafýNw®M#Ðè„ 5vsü¡~Òµ÷ýnÿ<ð Ýö©ÞæÅòÝÁ©_Ï6¿vu6^¶ýœÂð›H$ü\ÁFKDÀœT¾JÇQÂqù3`{ïç£éÂ:OQÌï.¼ÑPŽò¼.nñhï¡h.²ôAØ­Ã;D.LG½†”ÃäÚ"CÀ{”5 ^ u'’QØ éLÅ!Tw7‹@ <ÉãÜÖ£wéáÍ ±1ãå’{ƒ÷¹ŸM6à„Saá„›;Eþarîq1‘;9$8Ó¸&­½^GÅJ<—¸\î¨ÈOå|qìKSlðpÄÛ<ðtÄÛ„:SÖ‡Z¥uÅBHÝš©(¼Ïå8ÎÉÈl±¯A³ªD”µªØŽ Õmn_çºá²Å¶>õC©D%ó4…‡¤ïâr2Ù@3ª·¡VL=z„c$þÂ9j[$ƒ îFeWñx‰üÙ<•¢ ÅõÊ×Óáe“‘D |ŠÛxÜœ¶>€ŸÀ6Ã@ñ·o,d\>Z˜éÆlw‘K-¶ˆÎ JLl×!l"m#izÇý+*ûŠEš=$ì牽+öý êMesb{Ò_¹r—dÀ¯45WÌtèîs?šèÇ/ª,W¡JÔ †5ÝQ=º'ÜŒãl;=ñ 8€êþ9˜ñJ0-J)÷²¸Gl])£ ÕÚÎ68ØãæD)'¼íq3l;RªxÛ _3¹µŠ\%¹ÆÛJò”äªÉ7h©[4WÊk),EÍÒÔõ%ÌÅŒ$^‚éÑeò4iÜWRMàŽo-kÐÌɺ~6ÙQDÝä¦5à†[]êFáa©Ô´”‚}\»ÊC¼qíMCsºp‡œõÄ>EÔÁg4¡•Äg3¾ñ"ð˜O%ñƒf,Ò§hÝ,Á³·Xy¤Þ#à »@\Å ¦Ê¦¸±HÌâ»Z@÷²µ4våP>F?`B-/“¦¢§{±7êÕ§ô?…VÏ×L«šï¿Ç‚ D§š–y&ìäû?ðuãê4ªqá•jZMãÚÚ×ãèìŒæ(½ž®Ÿpü -ësz¨ X´Ši )åÅÍ“¦ÅÁRR¨S‡Ü\6mb¤¸R¡Á†•þòKQ“&.øØZ )÷ïÿxïÞ¼.]<±šè—Ÿ¯ =›’¢\¹²Öøñ•¬íf0F_£Æ¯˶mkû÷“‹íµV¿—ïöÚ×°÷-Àú×÷ÿ/À ôôô   ÿ2ÀÆŒ¹°~}ü AAÛ·¿\#nÆŒû < v½u«¥³³evˆ^O«V÷/^TŒSzíZÓjw€J%DDäÄÄh>úÈeÕ* î=//nߦ¢ø)é„u +‡Sùr‚é÷Ï_&%½AKÙuêåˆü/#"SÒt1±©t©ÅÁþ<êò²E—¿ý(´wû¾ÑÌl—çÍF"ùm|c_ÿNG(Ð2±6߉f³î3ÿ!6ì§‹ç­Èä³dô0¡ Ë+ˆÙu ÝrÉÒÓОå0Nʃ^p¼á€XºP!|…|@œ–áé)F3בÏäI6oìæR¹©Ù›5…‚ÄF‘ ”Ãm5Ã-%ÿǸ‹+ÙÏ_«ߥ™¯–z:éQDÅ£A¸ã^ŸúD˜¨‹-—Ô8þP Mz‘²'AâEÙ²•#¤5_G)TK‚TâQ!5¸‘ÔHUHÕÈTÈŒ¤>­š=nŽxºSAAšÁ)%¼‚4ƒž/¼eŽx½øè列å­UX4=ú\’Ÿq/„tª)2ü¿<5%HBi]ÚÖä¯ÌÁn*4¦±5°«A{†»‡¹©Bã€]ju#ÌÑÌÏ—MÑVîÿÁ3Àç¡Tokµ3PÉ“Û(¬eZl¢`>r Bmì×áUI d3 DƒãgKç³¶[XåÉXñÝt0Ÿ)ÔÓË‹•1®ÚõLI‹Ë<-¤/‡"D„÷S)ô8†RÇÌúÌ ðìSºlC«gEg>l(jÚ|‰÷·boËɉ´2"› C¾eû9*ûqm™ˆØÌßȬµ”)Å_LW€‘Ñ´ì‹VËþéÙQÔ¤×Ó¡gÎЫû÷cnû÷+ûôÉsq‘ܼél!·ôðáüîÝ\]mîܱL5˜A·½Iï‹›¾”PµfM܇^ü§’‹íµÖ»ÿÔ7v×[€õ¯ïÿ_€A+W®<|øðñãÇÿñ3—l©©…AA;U*ÝÍ›ýêÔyIÁ)µZß Á…»wåŸ^uéÒk»Ý¿¯¬W/^¥ÒŸ:ܶ­…×pl¬6<<[¥.Õ¥‹…g¾öî¥];Nž4Ͳ9}‘NƒNì¤XÃ¥Ø?sóÆŠšŠÔ´˜BtÃ82G¿ždñ5Ù ¦væë>·þñäÔ‰€Nb·¾Á¤Ç¥þL>ønP‰ƒ€Ïèy•ŽùáÌG¿ˆgé#\l9*0~ÎáýD4Ã|Ø(ZI?ÒÑ9—-Um9VŠ £©RC`8Â/Ðßl¸Ž üŒ|úòØ®Á«8Ø—‹v6O® 3dÈO¤¼Ù‹ùÙë‰MFÔÃ÷jU0ó‹hÑŸ#îw¢”¨í±kK­®„9Y ·©PÝåîU®êÛb[ê hPÅ:«½R¤ŸN‚îÏ2ÏlY4js”Šœâí"² Ì—ÚÙ<'”à÷2l8âaM=áͨ<ð-GˆAå¨nMQ P ¸Íík\“!q¬E­"Ì+4[ ‰»¸œ¨CÅ4ó1ƒÎ*t{y´—5zGlûRµ?AfXí<Ò9$ÊÐúá°ÊuÍ‚Ÿ#=„‚ËWx8ˆïÃGÐB8&.Í©*e·G ¿xÑ_œSx IDAT·5‡Q‰hÞóaC Hï*SE«+ÜSÐØ›“D ŠW2èx…†ñµX)VË»AëŸ*ù°!?t5]xHû娵lÊ(ñü³ðW¦ÿŒ»3——RK\Úñl4íÇ!ÀÑ•t§bçJ©ß‘ÄgLÏÂi&#ʲeLšDéÒܹƒŸ™Ó33S_»vVf¦~õjÏqã,,`d2]hhܳgê•++Œoõ8r$³[·kÎζ·o·¬Ví%Ï—R©«Vmç³g{ötèׯrÉ;¿–½Xÿû`ÿ³]»vãÆkÞ¼¹Ï³gÏvìØñÝwß?~¼~ýúf'{ù™ÿ¦iÕªØ~ý*ïÙÓá¥;ß¼™ß¨ÑEŽóç›4kV °¨V7wnÚœ9©ÁÁN·o‡X”ÅZ´H1mš< ÀöÎßR¥LwÈÊ¢NÒÓ-§ÌL_Ä•ø•æÖIÊŠ's7èð!Më0õ=:‹'ÍÄL">#3ŸÏû°Tìi?ÿ/&ÍÖŠC>&èt’µFßøsý~ËJGüùí{Ê;§ÐêYژϢwŒ»ÃºD<ì8Õ˜†&‰B2ú>F®£‡';«àbÔõt=]s¹©¡¬ GJf]tð!¬‡2*Õ$GÇÉf KÏÐ#/|‚Û§¸›xv’¹‚gZ„Z¸.¤J€ãJ‹p„§Û¸_ˆÖI* ¡º‹bRxˆè‹Ü¼píc%ôâ{…'<‰&ú÷ôè²” '¼uìK$Bý×À–5S#W“}ózý°0sëo‚'kö÷A•Á’HºÊÕâqöÅ7œð0ÂÌ5÷‹- é¯\ŽãPßwiZÍŒ'À%Ò~$.“" 4Ã$5KcJÐÑ!¬~‘¾ÚÏ9Tò×M4ãÈKBçd)^=ÌÄ#ŽÀÌüüžžà u)ÑÞ´whE&Ÿ&#À”²,פÚFr3ŸºüÑo£;îVm‘§â½`6·=M ¹4ßLFƒjñK_[ëI6‘%ç‹N,î+ú®£Ñô˜‡ °=Ä2R³<ƒø'ŒëÏœÄÃ+Ð{¿Ÿ qÎÿf*mGx8EEüþ;=z`n=zä:¤êÐÁñøñR9â~˜´fMVD„ëåËÕmmM÷0LÝ2™¶V­sÉÉEß~[ó³Ï^žÕ»|ùO?½R»v©[·úýƒî+Þ¬‡ý{–Å<ˆâ«5¾{Μ9³jÕªóçÏçççûùùµmÛvúôéÕ«W7?Üü+þñî§¥í,*ÒFG÷ 3׳bS§Æ/^ü¨F ·›7[Z+¶ V õëÇÇÆY+­×Ó¶mιsêAƒœ·o·@ÿ:vŒ®]qpàúuj‹5äu::âÌEËd¬ïw1a)¥<¸þ3UÄî¥xÚMG¥aãÞƒÉM—µ•êÒ £¯ö4*àdÕ^'ªö.ÞAâì·ëã¦jŠ~â­qA`m >0òèé†Ýb[ ^öüÑ„zâ`Áõº%¥¥‘+‡‚ð5––èŸÇqnöxÓIìÝû¶A,t-˜Ö1ÑÀä«QЧåxz‹} 7PÌàq&OìæP©…%ñ*ê<<ÌS=B)Q½#̉íÉØÅå§du lFõÚšïVlrä1Ä\åª9/<+hd^ŒÅÜþ¯ƒ­Üþ)PÅ Oá5®e>缿ÜS$“s…û«Gpǹ ›SÝ<à˜@þzbãÉ‚ðü€ÐK‰ 騿äqŒu¶MÌG¦0ì×à]Q¬õ /á[p€Ñ°Q,9UG—DŽ’~•ÙÕcà‘"§ùfžJéP…ƒƒÿ¬šÈ•4]Ì]3:ŸL“Éä°h8SÄfµ†Öc¸Cÿöì\(: XüSPÊ‹'‡[5š6%*Š1cX»Ö|ÔÙ°¡ðƒò½¼lbb|+T°@؈Œ,hÖìžäúõõêY гqcR£F^—.53a&VP ­ZuGFFÑÁƒ»w·Àù;öÚkè?ûý’Ÿß¬ÿáþ¿ €Lš¹lYLÏž¼\W¥Ò7hp!6V>mZÐÂ…Vµ»®^-hÚôžäÆÐP 9)OžèêÖÍ’Ë…;¼´°ÃèÑlÜHX‘‘8ˆ—­é™„u$=“ù_0c¢¨I0…½g¨S+?šùúé4#–ãäÀ i,´“¾‹õZÞÅY›Äø5ü¥î8áÅ+Ç×Ë=Û£µ³ƒý±!´;ÿˆåãKØHø¥ ƒŒèž:A7ØFGÎ5¡†8àvOI§‡$©©éıjT0êZà½|vá á'O‰æ$ ƒt([Áü×:r"ùRôØ®Æ+BìÀÈC;›§—É—À0ʧ¬‡%¥¥Gä¯'6®Ä7«Wyð×¼pM$Ë—Æ·¢¦uÎõ_ ›Øÿ»`ëU{-»Á´èn“xøxRì±óÀ¹.= w6ór™ãìNT0G`z„}ä¬%5MŽ‹¨\S<ò9è?Az•Fâ: ¿e" †Ë`Óa–X†'VK—\’u„ÚqT,%ªxï);rq°Õ,9·HG—kœË¡ª ç›`4 $Èhù;i…ô dOì¾/»–?ŸMãòœ†«± YOï5Š¡¦?—§àiôTæÊi4‰„44g×f¡‹X³‡Še‰ú™Ò⋼zƒ},S¯€iÓX´ˆ*U¸u w3žÅK'OµZ ‹‹‹SΜé?ožUº3g²Û·tp°‰ŽnZ’ö¯Á/¾5uêµððÒ×®õùÇu^` ÿ‡/ly °þ‡ûÿ†Vv¶²J•r¹&2²w£F/¯³{õª´Y³K —/7kØÐjúá¸qIk×f5jäzùr K/Ðõë ÇŒ±º+( ,Œ‡-×>s‘ŽVÈXòB¿GÜcwf›y-úu¬:DYo®/£ü ‡4ñÉö^ ³2gž•V‡OÓ¼¨åìãæ9³õªn+®âáÈÙ÷RÞdúuìmØÛFðK­§OG2)ïÄ…¦T¯!Ó4tyÈí"ì9Z:F“¤Så,Q ÅL£… '@ãáLƒm©èÆ!½Žº„páiòn£pÇn8~ƒñ³7{w¾blHƒî<ñç‰KG Ø`S—Š-©B9kl^€ƒÜ0&Â7¤¡ëë#š ž¤q?•™<Ö½ ®êLëÑ9ãnN¸9áîŒÇ‹m·WÄs¯e* ŠP(ŸÿÉ‹½ØV’/#[ƒòžoü¨îOpÕJµ7±×%°,éyâ¯ð à‚c‚ÛS»”¦Ý+EŠ(äËxö€ÂFx8c3ˬæ%Ô#Í@çƒÍ ¼Úš)Áþ£ *ÂvW !RC÷\rô4qà 7>F+ÐÓÿÇd¸Ù°·*ÅÒø¹;ß”ÊFÏ]²‚–y*§]9uÆÉèz 5tø™ËÉÔ.ùx‹feÅi|\¹:ªF^W­ŽN³8Cýª\XŒ‹¸‹ÛŽ2d&N\ØHxMQS^>õ;ò4™)±hºéØ^ºD«VgÏÒ¢…ik±û¿o_§½{-#ò9sRçÎM+¤èêÔ9÷øqá×_ט:õåÉ€ …¦J•YYÊ'ºvè`!•øoÚ[€õo°·ëtÚ´k‹ÝêܹÂÑ£]^¾7Lš·lÙã·U«ìÚ¶µP1#ŠåêÕdz *™Fpå -Z œ9C+3Áù‹Y°¿ÒÜ<¿8@p?‘ˆaÈ X9™ñâP½VGçÙœ¾MX..ÁÅEFÚŽÞò“w®GË–/W>T*õõëŸWÌœYmÞ<«ì±C‡ò{ôHðð°­Y¾¼¾íKafÌ`Á*WæömSW¹^OÇœ¾H›fœÜiJÆÚ–¾“±³åÔjZŠ“нúý›ñó‡²_ûwÍŒ½¨ìœ~ˆø2Íí9D’HØ::|H“çTž^;8š@o.šÍ“"Yƒ‹ÇÄ…ÌdZ>‹eS2e9A˜ƨ†W®˜R#€¸8mƒÙ*•pèP©®]-¤`¿T(Ç`gÏæ´m{ÅÞÞ&*ªEíÚ/÷¡J¥ê*Uväå©þø£{ëÖVcŽÇ^`}ðòÝ^ûÖ¿XÿÃýs ˜5+jþümÛœ>ýJU4/^ÌmÕêJp°ëÞ½á5kZeÞôíûhß>i·nž‡YöB—,å¢ÕÒ´)ׯ3j6˜›‘E½¤g2o23?5m²’%[ñ+E´™ö̽g4þœByÑy_ɣˀ^bóS½ññ¥ÿTìY?äÀx‘E¡†Ž?s)™Ze8÷¥Äq½γñžœîN£™BË€hŽeáfÇÞtûòt%³. [ k*2Zü<­¢o2vŽü懧dÃ0Ô*úVbŠ¡²ÑGzÎ: F‹ð;9«I‘¢µÎøL¤\)K)~wÈÙ@ìë “FC!Ü#õñ7yjHjóëÁÍ©ájdRøˆG?AsÜ`vØ•§|%*Xžò¯¶¬™ÁóT@~±J¼-Õ¡  F*÷[ì]ñtÁÓWs— ^nx™k“¾® é¤'’ø”§I$ñ´\q $0À*Tñµ’ü=àW‚[âb¥V£±Þ¬öý¬èÍê³–”Ü÷É'”ó1»O. 4}il¾Ç«¥Ù—n…¡ªÃNK{"À\9sH`–sÄïýb¡öÚΫF€øËÓTt¾JŒŒ@gŽ7¢ºÑ„$SÓî0QYÔ*ÅÙîø݃‚À‡ØxOGξG=qô¿8mprG–ˆe-/ÅÓöKÔZ 3z=Ý'rô2¡œß€£$]»I‹Þh´ìÛL/3åôî“ׯS«–i«Z-DDäܾ­7ÎeõjË5~ø!ëã“üýícc-K=J¥~ذ[»w§Î* ’Ö”{Ÿšž%ùQ ¯òà,q¹({lëØ‚¬–›5X)¤$‘ô˜Çé¤ /ê-Ú`㇟Á­H ã›,ð¬A©Bi‹­n%ðÉþ¦éÑg‘D’¡³Ê?yZ¸áV‘І¿²”-ùd^áÁ9âsvØÖ}ÙP[ú5C<- é5dßòìE@8îŸQ>ØL6V•v\…W1J“Ã8ØÀPXiôQãòÙPˆ-¬ñd´øÎÉéõˆ|­ÝÙ_Oñ-|OA§«$QÓã(o¡ µt9Êù4‚<8ßñi¿8ÉÒ˸Øs|ÍÅîž¼Ú~Ç­dº×áÀ‡"½†bÍ—É}Y2Ât¸f®á«Møxõ3•ÄÏr1õjò‡,™az`Vµk“‘Á÷ßóñǦ­À¼yòcÇÔYYú[·|]]-Ü©©šÐÐX©T÷ÛoUûô±ÊŽ]¸0aúô{Ý»—ùí·†¯,&é^¹Ò»qã—“tÿš½Xÿ{ °Þ`÷¿úêÆÌ™¯e—J5ÕªÉÎÖìÞÝ «Å5k²>ü0Éßß>..ÔËË¢J*7ξ_ûõ×îS§Zp†­XÁĉ”.ML eÍ ÖÍ\ÂWË-“±re„áI*¿Ã÷_5ÂñÏÇßÙù³áÓ…À¿W\ÜØ°²wDµ–ñi¶7’9;‰ºb7~ªœf›y*¥}‰s¹5zúœàpå\9߃*F.¦Ä³ôXZ“Ifyô?d1! =Œ/Ãò ¢·Ó#rx¤£ªþ@)›P3S4 „p‡Õ0Äl¯ þi:ºRØ,Ç«½¥÷h"Ê5¤ž"¨€ãG”ko‰*$G³ƒûGHÔ!¸c?àÎZ$f½è¸©[å(È\.ÜÜT¨RH1ËRHÑ¿ˆîIˆ†H¢Ókà^Å^³᫚T‡ÿT¨Š›  Ê€ _EÃB€{¤\ þOuè2x6§z3j¸Ynµ…ø—ú#Ÿ¢\γ‹äqüÐÊ-‘‚nÒ(+yÀ x·Äû3_àý,Í^½«„]Þtßž¤ zB‘žÞ^쨌 iûº”n×ÈRÓØ›C ñ1ÎÉÕÓû8G“)ïÊ…žT»Ä]dÚiìm80ˆ.âuT‘†N+È–ãçÁïán4–%¨‡.Ðk8b¦)ZL½ŠãÂ~ÓõУ‡Ñ¡Ç›f#‘‘šæÍ³K—|5²¼ªéÓçÑþýÒîÝ=´JZOIQÖ¨qV¡Ð:T§[·W’ZøüóÈo¿éÞ½âÁƒ_eÿ¿foÖ¿ÁÞ¬7Ø}…BSµêÎÌÌ¢ãÇ»vìøJy"³g_™7/§Bç{÷Z»¸¼¤~ÎØ±¥×¬±üHŸ:¥êØ1×ÁAríšO:¦s ЭGÒ¹3GŽ˜Î>z=qê‚e2Ö­4A‘ŠÍ³ñ7ž›?óúZË–û¾µ7‡MÔKžÏ”•|]"g¶ñus¸=7ðâÒT33riñ#é j„EZºãl*ݸГŠ&Ôõ'|‹Sªòuˆ©SbŸ”ÁOPêéëÅ6ñ‹$GO<Ôq®_»ó‰Y¾ÝK=¹è?AzúÏp¡»yò p Ù2ž%P4Àý3ÊW·Tå&ÅFâ¢È¬I©Dd-èFåJ%&Äe"»È½ËÜ“£œphHÕÖÔ,o¦mbjÔÏxf€&©¤ê^Ôþ“ ñÅ×M*SÙÙ:³þµìÎ;µMDØþªiФ‘–L²áâµFŒxo¼+P¡"«RÕ‹—”-¶BÔÑ<:ÍÝ4ò$µ¨Ð–Ú%ÓÝ Ð^ õ0Odhd¨½pJ6”7?$íÒv“¥CðÀv8eágîÔŽ¡üì…2ȼŠ=šëPYñ°QæQ¨Öx8Úoö¤©<ü”ÃèD´–æûЦ@þT6}£kéáÇ®úWðÒ :ÍîÇ”qæ\Lª­n¹ÍˆýH$lëË@q0N££Ïß¡¼7'‹*Á —ðëE u·€„dC*gé'|n¦ÒôÍ&ÏÇÛ“'¨TÁ´uÝ:ÆŽÅË‹˜*˜µ aaÙh§NuûúkËOÙîÝyï¼óØÃÃ6..´\9«K—ÁƒoîØ‘òÎ;3fØ¿Êí],”xõjŸ† _úÿ²½6ÀšðòÝ^ûV¾XÿÃýÓ X²äö”)W_]éD¯5º•_r8ßP?G­ÖŸ;W½ysË„­qãò×®-¬WÏþêUÓï..zºa£F™›‘EXGÒ2˜3‰Ù“L[>°Y89pq B¸±yÝ™™ÏÝYnßGÌRÙ=_2»;Ù]šÞºvy@­¥û*NÆT†‹“ñ¯ðc2he¥žF–ÎG¸˜N°'ç{â'~ÝÿüŒ÷o£^žuE•=€³rz?"_G[wöUÅÃè…¡‚QR~)æÌž˜Ë~9Çe5ŠÅÈõÐ Çñ¸5¶à3'ÜL œ¯%oS4™ûx|›l@¡øt¡büí­;´¬¥¶5¢šÃëИԨ“HzÊÓDSI5ölU¦²+®®¸:ãì‚‹áÏWÃÆ?BäwJ[HaRhøS 0lPO¾1,C«¬"_Kœ‚ ›Wy¨F xáÚˆjm¨ém] ˆ'ï‰IU£|pFõæ8˜Å‹µ»ÉZGª-’^øŒ¥\)K#–Šn!ò‹¨2Ñ[,…™ï½à…u˜"_¾-àKhhÏo*Š/Ç:Ç’P;°-…·Ð +Ï&ñ£¤úÛðràLwL”÷ßcÀn´z–wæ“FâK¹•Ÿ.ãëÆùÏ ûå­UŽŠT4ÉÍûônÍoKM%S¯?¦^=ärvîä]KåŸ|"[¹² fM»èh_'' ór~¾.446%E³vmÅ1c¬Â Ë—óš7¿äädתR¥Wª§þZ¥>þ޽6À2Ïøû×°â-Àúîÿ`kõ:ÔùÈÅm||ëÀ@«Îƒ4KõêN·nY–f)(êÕËNHÐΚå6w®…UÚÞ½ôï«+7oRÍl!\LÆ:¶-M[Ç,dýoú³ë]¦A¹£çª&srž¯m%ÉïŸ4é^÷ϤLIÛeD'R§<ç&á%ž‘ a•Zæ´f¶XE"_MÛCÜȦN)Îöe-'³èý|Ù½³>&Ž¿»Et~HІ.©Fñ«mk壶c—õÌ`ÏK³´¢Qo¢p?E@7œfàhInTŽî§—¥Œ,Å’‘¤@¸bßÿžT®P¢C+•ÜóÄGò°5àŽs-*ÖÀ¿þæåðJ6ÿ¹ä–°¿vN89ãì„“;ît{A½Ò¢-¢H‰RŽ\Ž\‰Òü£‚—”i/Cá/ûØ Q'ž@Z"Ù÷Há…˪%5kY’5:P{žÔ£<}Œ ©‹O'SÖ¼$%pžüe$?CDà1‰òU-]j!Âjk((Bh†CœF`Ê Š„AðÔz–k¶ž÷¤V!ñ®,uÇxU%ÀçÏX–­„Uk†V>áÓ8ô*³Ž¥3MÔjiÙ’+W2„Ÿ6&8sFÝ¡CŽ W®ø†‡[vM•¸iSv“&®/ZÄh1@KBø¼ªéÉ'GòM .véB+± êz*í¶ WóQCV™åÃÍ<ÀWGp°ãÐÇt—³¿ý„f_P ä»QLìezàwÛùln.\ý‰šbz¥ ðÑ—¬Ùb¹à 0>³fQ®wîàmÆpS(„zõ²=ÒÍ›ç>s¦e'å¹sò6m88HnܨY³¦Uîݺu‰cÇÞ)™Îab|p~Æ{ƒmÛÖöUöÿ;ö`ýì-ÀzãÝ/®—þÛoûô©TòÎyÀgÏ”5jüQP ;{¶I«VV)5†òXvv’›7­NŸ}&û»èh_ggÓwk~>uê”ÄW_1ÝLY§cìTvüFXmÎì6Ë~hxO{}! ÙYwÜ ¿†Å­B‚Ž_¨coÇÉù´s2’óh¾„¤\zÖeïXìÄ Ä_b¶àÇÞ ¯+>PA‹ßIT08ˆu-L1V¼‚Î/RŸŽEPAì)ÈÐÐ-èBÊÚs$ˆ00cT L‘³² —›=1WÜï[WÊ2Ð}‹b…:ðÆæSÜÞÃÕ" (–íjâ:‰òu­¤^¼ÚS”èoÛQ¾3~V^í/.&ÿ‰HK ½Àˆ÷ísþÁ”­†9Jý# }ÅN)ƒóIŽÜücÞRï\¯Übw—;în¸]&Ýþ¡LÃ\HK í!éq|ƒÙa[‰ÒÕð¥|ül­G`Õ译ñ;Oâ_øð‚ðìAå–”³s³Ðl u?9zOìFáÿ¥m-í|ÍldQ¨:ØÏÅ£‘Yˆ9†–Xi@KL—£ƒFöìô¦’-ÝÛ =ýqB†—-‚h)¾Ñtcï°1 ~ªË ³¸áW7™u[~ï„ ôA-~$³€!uØÒ“RÅ?œåãØÚ°k4ýÄëÄ9Ÿñ8amÙb&s9†6cÐhùuýÛ™¶.XÁŒÅtiËšET¯nÜ qct:Nž¤­% 3jTþ¦M…õëÛGFúšƒ3@¥êÕ‹»wO9o^ÀÌ™V3òò4Õ«ÿ‘•¥.NH2VvµhOŸÊ«Wß¥Ó wï¨QãUÙÙ^`}ñòÝ^û–¼XÿÃýÿï,à‡b?þøRh¨wLLÿW,™>oÞƒÙ³Ô«çÕ¢„¢¡cÇ&­[—Õ¸±ë¥K–]Ù*•РAvl¬vòd×%K,d6>MÇŽØØpù2 š¶ffÓ ÏÒødËt³ïÅíì×U)Í3|…ÅM.8Q¶þÕðÄçMT¼)6=z [lÿq–‰e"½OziIË1 5:b_¿j” Æ¿eì-…qí ²c$ž%¥-àC;*t¦b€uŽ—ý.27‘^ˆÎIJ%ÀÍÒ¥¢[„|/E”Åö3Üãb>ú§`è‹Z™[À<å,CÏ0)'^„¿ñ0…_º&p£²ö ¢ž™Pû;ÑÎÄÕ–=át6—”»Èºx:”ãÃPzWµ>“Ñl3Iùôæ·wÍ–IWþ#lÊHñZD£¥ã,ÎÞ¡I þXˆ£øŠÓsh0„Ô,¦`áG¦ý=}‘Nƒn¡«öR* '6–I“øæ³Á‚'T;ç:8H¢¢|kÕ²|~ùeÊ×_§×¨átëVMGG«OÖ„ w¿ÿþi›6>%Hê˜Øðág·n}0bDõÍ›ÍÊh¼{m€5å \Ãâÿu€õ§Ô·Vl£G‡ºét–-^ñÉ“«:é~ü1¹„Ý/.`/•ê֯϶¸ƒ££dóf/;;.\PŸ;§6ß¡];ÆÇÞžE‹P˜Q_Êø²{=ö\¼ÊÎýÏÿ)OMÙ;´1ºŠ hfŒ®BËyìag#Yü Ô0å'JÑiC8ô1®Ž\OdúÓ/Á”fhô|ÉÅ$QS+›QÁ•Ø’‡9(œ°¡\wL¤Û2†O¤k7êWÿt¥E‘´™Dn ö‰…hƒðüˆ:?Òn$!% «óäæþfÒ ÑµÀs¡ŸSÁ]!|‹|<ù{(rBònç)=Ä ]ià ˜éÐ îXBWGU ’rJ…¿ §|Xa†®ªx/‘8%ÁN\©aŠ®²Õ ºA¤”ÒœmbŠ®”:Þ;ËÉg¸ØñImSt•QÀGGÈ, e »˜¢«·Ùp½À²¦è ˜¶•ÇéTðå·/MÑ•RͧËPÒ>‚ùãL|šÌ·kf}j]³g#“ÊWf%S¬,ýÊ•¶¶,Xàn ]EGž?¯°±aóæJ% «˜yTT¾dÅ 3õR+—çà`3s¦UÖÇ["##GU¹re‡€€€öíÛïÝ»×x‡¤¤¤~ýúyxxxxxôë×/99ù¿Óú×ì­ë¿ÔýcÇ’ºw?îæfÓ¿bÅ’”ŒÉêÑãš««m\\뀫T€“'eݺ%ØÙI¢£CBB,ïöÝwŠÏ>“W¨`{û¶¯··)ªV*éߟÇ­ÒBÞÈOqtàÒïT÷ÏÙÑ»S†¦'ÞÁë§ê^ø Êz:]Ùº¢Ïó¹\ZÀ»‹9q“^ømºiáT<ƒ6’­`vwæô5 sÎ2ï<ŽœF¸˜c–YÄÄ+ìHÀÏ™Ã]D:ï@‘Ž)÷øþ .¶ì¬O1{L Ò˜Š¾­ÀD3? |­à+9èäÈV/ʘ-CŽÂ,ˆ‚ؤj„ ì ð1:$àú nfü.€TÔ¿¾›,àÞÏžøx–ˆEähÎGîeÒ;lšáßJ!¯S•/…Á³Uˆ*úE]À ûjøãL@E|Köýß²ld÷I»Oê}R¥ÿ?ˆ²^¸áŒÞ¯jÌ¢è‰ÇIÎGTĽ¾ ´X@°Ø´çž$ÏÀ«ëL©~”³tˆû(ú y::‰ë8\ý-A½§0"ÁæÀDLû …r–(`¬ sÝ-Ü¢× èž@––Á¥X^Òâ»éI!]®q_A{_~¨-*2HÕô>ι4jz³¾%ÍLÄðŠh³…˜ ÔdCO|xûöí+W®¬P(¢¢¢¦L™Ò³gϹsç …¢^½z#FŒøðÃÕ«WoÙ²åÖ­[...o´õ¯À[€õ_ûºwÞ9µ{÷ã-Êž=ÛÃZ ÐD+¨OŸ¨ýûÓûõóß³§A g9òé?æ„…¹DFÖ0WdàyfMΕ+V+Æ?|Hx82™eÕ`ôçlÜNP€âKïn9q· ÿÌuö]Ýja¾þù:ÔÛ³SZ´¨!¢€?N§Ñ$²eLíÏ×fõD÷ßbÀ:´zõeŠ8ÝZ/0tÛïàåęᄉƒŒZÞ9Å‘$\íØÝ.âoÀÇwY›ˆ­„j1Fœ¾|“ÁÏ”¨Úû:®(o!gYbò‚ÍÌX» 7QÇ,©yÐ8v ¸ WàeöLO_k×2Æ’`æ÷ßL˜ óò²¹uË70ÐòÏ:~|òªU™!!NÑÑ!ÎÎVc;+W>ù䓨€§¸¸ÖžžâÖnïÉ“#¿ù&¦F ¯7ú:;¿Ùy±½6Àšý®aî?"|ôèQxxx^^ðÝwßEGGÿòË/Å­C† ‰ˆˆ˜0aÂmýËö`ý÷ºŸ­¬]{OzzáòåM?ùIJoÙDí:5UY³æÙü|í¾}á½{›i®¿°‚}XXÜǪiÓÊ.\h¹šÇ“'ºzõ²d2aÃÏQ£, ò]»8''._&,Ì´U£¡}upÔÀêœ6ü§ÐÞu}ÛÅ)‚Ñ›Üpxó ?Í1=öômºÌA›&0¤ik1]ã‡AŒû‚Œ Çž{bO•Vϸ‹l¼‡ ëZ0Ò¬FöâGL˜R•E!¦­{ò˜’¬¬± ufWeBÍÒç ._¸±ÀÝô}«ƒ¹°è 3ÁlØžÛ43]G ÔÅ~>áVÞ¯—ÈßMÖeò Qºš¸ô§L'¼- :›‰÷Åûö”o‚ÞÁÿ$£è!i ¤?"=‰ìÒxeA.c³ÃÖG]pôÂÅómO\ W`|okÑ)P¢*D•O¡”Bóm…ÖÎ2xÈ(ªL™ÊÕ üë¦F,ƒÂHÒ’”‚‚Wö |7Yçj€*8 t7|\,ýF¯Ž°S` œ†tè ›±p¿+‘O®uš \ÇØ$¶çb+a–?_–5U†û#‡>×É×ÒÆ‡} ñ¿îã¥t>B’‚šÞíbªë[¤¥ë6Î>¥ª7çG N»¼•LÛeäò^S63%VÞFŸÄ?ãËwX`¦úÛLØ÷ =Ͱ—ASÔÍ•ÈC„š=æJ%Mšpëï¾ËÎfC±±Ú† ³‹Š„;½Þ}ײ¢ÇÉ“²NÚÙI.]ªÞ°¡Õ@pñ„¼x¯^¢ ÙZ¡‚K—Ò[µ:(‘H.^ì٨ћ*Œcnÿ߬¤¤¤úõëgggmÛ¶:ujÇŽ‹[Oœ8±xñâÓ§O¿ÑÖ¿loÖµû&öìyÜÉÉöúõ>µj½’Ê÷ß?0ᮿ¿c||OO««ŸË—-[>áÌ™àV­,'œÿú«òÝwó\\$ÑѾ5jX8Õ˜1¬_OPÑÑxˆ—‰‚^¿gäÈÄ“û uÛmíæß±ùÓ‘>¾uèæÕ Š,Ë.o<ÁÚ£Ü~Âo_Ò#´õÇ˼¿`ÃPÞ¯ÙÕ:zïähå=8?‚Êb÷„s£™f5`Ž™›ï§dFÇ YuuL_6ñJÞ}Ì"œlXTŽOÌf?ã­Vló¢œÙê÷4¬…=`#`ø™îòüR¡œ‡,úá<2V`S&šýdí&+-à†mG¼âW¥Ä 6Zô‘d'ñÙ¥qÎ¢È »xÕ¥tM¼ƒñ.AßÁšI)Ì$?…¥Á{¤@Y¼­BóÒ3Øc熓Î¥ñÈC¡@™O‘ t@³Ã¶ØUfØpÃÙgwœðòÁó/€ª\”qäÝ&ë&ÙÖ¤T¹¥plKùnTö-qx Ñ#ïW2 ºü6Hšá1ˆ2 M‹†?7 l¡àä²â_àîné'(‚o`1@kè [ ~%gžz8ñ£'>f÷ÎB>æ¡ 7Ö2Äl‚ٛƛ(õôóç—0Ó"9×2é~Œ,%Êp¨3¾âÁPë賋#-?‰wSiý 9ô¯ÏÎѦožeÓ| J5}šðÃ8SªÀÍû´EAßLd’YÝŸÓé<Ž_×Ñ¿»ùà1b?ýDp0ׯ›ÎZ€R)4j”£=ÚeýzË•š¤R]:qÉÉ꯿.7uªÕu,лwÔéýûûïÞ]RH¡Ø ´õêíIHÍšUî\3±¯7iÿ¬üüüÛ·oO™2¥}ûöóçÏüüübbbüüþœbÓÓÓÃÂÂÒÒÒÞhë_¶·ë¿Ýý÷ß?·yóýúõ}##{ÛÛ¿<É@¯Z´¸|ùrÞøñ•V®,‰S9cFê‚i•+;ÞºâáaÙ >l˜ô矋j×¶»vÍ‚„±RI³fܸÁ;ï°k—¨é̬)76­-þ¸?bÒ%¯?/fx³ÀŸF5Ø÷ý§€•eèÿaï¼Ã¢8»6þÛvéE±÷ÞEì½{‹±×Ø¢&ÖDIlÑ$š[lX£bA 5QD,ØEQ^wÙú| ØYDß/Þ×^^ãÌÙaæÙ™gΜsŸûÌÙÁ‚ÝX+8>?·p°ò&{a!Çs$r3ªttÞïé÷f`Õ-&_Ä(˜T“eMrO߇_0 µžEÙ垣û 6òåsVF|è̦²˜vw<«ep"\ålu¦‹Iº0–À"Ѐ|_"ý¬V#ÖºŠ4 ÂÙxì&b/Ù2Ð"|IÜOìe’9ÔÇñC\Ûà,YöŸ…G$_'öOžgË£ÙbYƒµ(X“‚pú[˜U: i¯ DeÕ-V¦Ø}þœ­2‚[¶(íP8agºì„Íß"ÖðÕMâ2>1¨³ÖgVÇ¥!Eò0Ò÷s˜ØŒW¬ºR°…Š˜¯úôC3›ä{è(àXÙ ©Î&ó’× V€I_Mž˜ˆ¿ù´ €•ÑÌ G#0‘]ñ˜i™R¢Ëªç¾M¼Ÿ0à4*==ʰ»¹YyÇ’FÓr ‘Iôtcï'X弃âRh9“ÛÏhT…Ó ±ËycDÅÑpÏ^0¢;[LžñO©߉ØxæLcþ&ã›73jÖÖ\º„››„Á„ Ikת*V´ vµ7íÕÀ€¼¼š5³?w®r%ÛûöEöí{ÕÑÑòöíÖ%Jä«Yg†ð•»»ë¥K½Š´¤ìu,Éõs[3¯u¾ö0ï,óÏJ¬³'löãéСƒ…… P(ÒÒÒ¬² lèt:{{{FóV·¾1Þ;Xÿô駦êêÔù-44yîÜzóLC.R I©[××`àüù¦M›šÍ_èõ¢Y³{—/§ ^ð×_Ëšùë¢^½Øû÷õÓ¦Ùýü³¿çáCê×')‰µk7îåÊ K¾÷_¶8ËæhÙ!g+ÿÉ_mQÙõ÷éÍ•–r2‰ö¶\"RLÙÀŠÃ8ÚræûÜW`þæyceÁþqtËÉÍ›ùcÐiÒ ô)‡g[¬sNñ‰t»L¬TÿÚ ü–Àè'$(£`Wyš˜ì?ÆÈˆDŽ™‘É~9tðì ,„a¹M^"£Jj ,–³pèžgìä.ªýÄø¯Æª7®QX²ãJv$¢ !þ6ñwˆ%)ëZÿë‘­üC‹>•ôdT {¬°µ5ïšü-È©ÊZoƒeœÝ(T× 8æíÀéçHÜOì’3†Î ûns#†þR¼IÊa9GÉ^à@L_Üa™™j‰éŒJ"ÁHi v;ÓÄdä’ ŒyÂÞ€¡ñ(M.‘€YwXŠ æTfž 3{ë}Fû¢7òqÖ·È](£½Ù,͆ O ÅO„ÅѾÞŸæ–Viè0›‹w¨Y†s?P çÛQº–Öc ¡yN­A™óÔÔé´èÅÕtlÍÑíJÈ!!4j„JÅ–-Œ!1tÇŽiºu‹W(dþþÝÝ¥ù‚Û¶Å fo/®^±¢ô/$'ë«W?ûüyúºuµ>1%uJáäÉðNŽ)W®ô®Uëíê¶›âµ#X?¼…c˜õ—"XÑÑѧOŸþâ‹/>ùä“9sæðÞÁúß¿â`~~Q­[{Ëd² z4lX8ç&iµº¯¿¾ûý÷kÕr¸zµ¥••ÙÉýáC»ûíÔT£—Wù~ý¤]±À@]³fq:8|¸@·nÊÞ½ôë‡RÉ… ԫǵm›NÍš–µ5¬r›5e‡‹Lƒò…ì.Ín]Èáå~„`ø\¶£L1¶R$ç¬b ^Ân_ 9q~1ULØb_îgñ –ž@Ç96%¦Óv+ÁQ¸áÌ\L’³ô:I’–6Å9ðN9'kIÒ죦eà#.¥a)ãë¢Ì).$Hczf£·Ý.”—Šž©p€Ö°Ì¤ƒaüÐÎ%éz 9Ê8VÉÓaJÃp‚„ÝD?B X!k•?"|þugë•JŒ‹S•tLjó"&-`‡EG\úSX²ÑMTˆµ¤þBša‡lœùðd,,€Õ`€‚0>“*’Ðfdêßö²f³&À¤1ð158Y°¾ Y7}Öhk||ÏQÈÙâÆ “›nñ5f]FÀÌ:,2Iß Á„c¬ ÄQÉ©a4ÈUÏ›B«%Ü¢IyNNÁ>—‚¼žž 9~•òEñ[L±œ³ ™ÍÎã”+NÀV ™LWyÛSSiØ;w5ŠMÆž?7Ô©k\ºÔqêTiZUx¸¶víÛ †-[ÊŽ‘W—ôqãnzxɽ5!MÔY +ê,ñißí·HÐM,î†Kì|®‡ žph!n>”ØúãjA1áPI„Ü•Ø*„2D€¨YS¤™üi!„Á Úµ‹ƒˆŽãŒf~ƒA´n}{õ’:‚lð÷—Ë(GoÝÊ=Ý™Cÿþ§À£Y³Czý¿s½ÖÓ ?üýŸ¿å ›œœ¬T*3–Û´isâĉì[Oœ8ѶmÛ·½õñ>‚õFchÐàÀÍ›ñS¦ÔZ¶,_ZÀçÎŵiã¯Pȯ]kYµªYm!èÚõa@@Z¿~.kÖ”–Ì­|ðAüéÓšŽ•>>Lm4š5#)ÄwŒëGrñ2Fªr*¶®íâÈ´ÌÆsBN`Ó™ /2é±›H£á!NOI;Êån-$ Æ$²7`¨ N˜´ H„E°<Ĭ8Œ‹IÉè±ÓESƒ°-ù*…7‹²˜"žôÄ…w“¸ˆÜœ­‚µ(P§Ø8£°{Q†· †d´±¨#H½A|qÑ99U5)P“‚µp-ƒÃkâÞ8:¨BD}’ô“h€ú(âXÛÌ@yÃT =¬€êfv»/щ$™ïA­gØcN$#ƒ‰…YRÓkJ/‡ IDAT¸v”†.— N¢¨’£ ©›“á­10ì {¡´À³ ™0¿´†dwíË3½)äÌé'§Ó~W¨Yœ³_PÐ$B4y=+½q´å츛ìü·?è;¹Œƒ?ÓͤEô+‰íkÖðé§ØÛsù2ÕL „E‹RgÍJ)TH~ãF¡¢E¥ÉO«WÇlØ­¿q£º««Ùà±Vktw?ûvÊܹ•癦W¥°k×ÃAƒþ°³³¼ví£Šó`þÛñڬů6{íc˜ù7D°Nœ81sæÌk×®K—. Ê%¦Ð AƒÉ“'¿Õ­oŒ÷Ö¿vúÁÁ±ÔéŒ>>]:v4éª%…?¾þë¯ÏZµ*xæL“<úFGFêÚ´¹ï^ú† eFv•´ÉŠŸ/[æ8eŠDü<Ø'Ègt7EæW¯´ÛõáÚq¶õÞÚ}Åœr:=»ÖÒ¿Gî¯ß~DÓ‘$¥òÃg|9"÷Ö¤4ZÍâúcVæôwØçô; F†lf÷\í9û95rf%"R較/(ãĉ¡T1‰ëÇkèq‚ QPâ݉¦9‹ú4F†³7¥Ow>’ ×2è1çS±ñMQfÔùº^Ťd4w+¼œ©df~~_g³JÃóĬtß’ƒáz94C9ÛÎXçM³z3ž9H¦Kaÿ,³çŒ=V.XÛceUA”YËöXÀºJ'”yðÍA‹!]*ºx4ñ¤g,'‡&c9 m|fSE,Õèy£ô_.¼1¿íú=¨w JÄ(‡¦(`Û[ÚÙæ.L…ãT…ŸÁ¤3òKdo‹ÙÇšN8›Š´¥0ô1‘: Y²µ,¥jãBUt àal9ÞˆŠ&R¢=Oà‰‹’CiaR9—¦ã£=ˆ½‚ßúåö®TZ:¯Ä÷ ãûÅLàëí|¿ÇçÓÒ¤¢%è.-F£JgÅL2‘ËÊ"¶ÏýœyŸKœÚõë4i‚ZÍöí 1©:®^Õ5mš ¸s'½nÝ;Z­ñøñJ:äåÍŸÞ¼û•+Û]¿ÞÊÚúÕDõˆU­Z{ãã56´=ºê+íß^ÛÁZöŽaêk;X;vœ0aB“&M\\\¢££Ož<9{öì 6tîÜHIIqss=zôøñã5kÖlÙ²åúõëvvvouë›À{ë_<€ ‚æÌ ,QÂîæÍ\\”¼Š§¯«Vílt´fË·#J™3vïŽ8ð±üÆêåËKO1y0@ÃíìÕQñ_!—¼þÆTft©¼¸oÍ•›˜<;[ü½©eòés‘îS0 vO¿¹·FÄÓ|_ÐΣss7ÍÐøpGnPØßéTÉé$%¤Óc~O)`ƒ÷@ššŒ„JO¿S}Š%{ÚÓ¥tŽ­Y2¤…åšÏ«(§Wx, "Y…AÐÚå(nE¸ª£¡d¬tb¸ÙÇû0nЖTÁÀ tž¨~C­FE„íð|´ ÞKÌqâ2*Ý £h…s#ê`ïüF j2"[·ˆKFFJ"•IÃSÈÀ…#J'¬Q8£tDáˆÂ EØ­û•jTKD“„6m2Ú$´Ih2òÓŸGEÆ®ÜpuÅú "UÐb ADÊ Ò.’È¡Ž})ÔüUõ•ÄI4ž¨Îgz{µ±‚ml$ÿx˜k@`|ŠÙßã’–QIÜÖc+c¥#£Läêô‚…‘,ˆÄmð”º,Ÿh¾ J Ò;5vÁ»®9ùˆ‘*:ûp=Žâ¶øt¡¶I7NM÷ø‡SÄŸ!¹YíZ=½ÖâB)|§SÖä 'C®ÝBΞ™|Ø4÷ÖÈX#<š‘=Ø4'÷Vu:Í{t“î8¸EB±=!aÃ8{–aÃX½Zâܳêx¦Nµ[ºTÚsʪ3Æuýú¼ë÷ï§¹¹ÓhŒ§N5nÛVúe5S·tëvüر§;–ôñé’ÇkðÛÆÿ¨ƒuæÌ™U«V;w.))©P¡BM›6>}z£F² ¦Nš!OÕ®]»åË——)SæØúfxï`ý›§¯×›7?=|xå_mŸ¯ìØñ|Èà¬îÜi]¸°Ùš _¿G{÷&´mëpêTes÷ùøñIëÖ©*U² ú³†9õE䮞$=û³ ສ«BKÿéÈwu+zhR ¹ 5Í»)[Š+>¸šÌÔ?ncæJl”øn ¾I:$4’æ3‰J wö~™[;G«§çŽß’žÇU:úíåèì¬ØÛÎsïÜ ž w±”³¶9¦o’‹âέT:bk$ÇòL C¡ÃÕ’­eébò¦ž"—Äe-O ¸Y±Ô‘fÊãŒà Ó!ä0~2£˜$c÷Vµ†Öc¹|‹–uù}5Šœç(ƒ&¼$¶_>†“‰wd4Ò£GÒ½;{÷¢”ºg‡OܶM]³¦å•+J4øî»Èo¾‰(SFqãFusŠ6ÇÓ¾ý¥?þˆ;¶´‡G¾ˆêëÖÝ?Þ¯`AëŠýK]Vþ"þG¬ÿgxï`ý˧š\§Îo©©º½{ÛdʃB÷îWŽy1xp OOsÊá±±úš5o¿x¡[½ºô„ Ò{– ߨ±¶N€&%y÷‡cn‡dÙ©üݹ²féê–qöÕÒNùòAŸ®¡eo®\£CK|vH”RýŽ (^ˆË[)a¢äy3ŒV³HHe\gÖNȽ5ïL„A0”ãÑ‘&ƒñJÒßcv( …•l­“»ßmbô Ã'é%Ùå§’ Õ|šB„ô³a±fºqä fÙÃç0 3Eü@f@kêtP‹>ØŒÀ¶Dž-÷Q#1ˆÔ›¤i²‡Jc]ûºØ»ãPì-h%É9TYñ*g”ѨP8¡tB‘ÙÊ q)ÞBãù$ô×H "5˜Ô{¨²o•|-âOT~h2¾Ÿ²ú[ó±®S0nЖ9 ;•àç4§’&PÊøÊŽ/ì3Åï³á`"£ž¯§”‚åh.EÂ|ªf`°”ñu%æTÊ-vM·ãĦӸ0G:QÐÄ¥ ‰¦“'ÏS¨UX‚ãh ÝÌÎË8ÛrfuL"ÇÞ—ùð{ô~Å´^¹· Á ¯Ù}’ò%Øš»Û ðãf.ÄÁo Åv`Þ<æÏ§@)WNÂ`ïÞô~ýlme®ÕªI¿ŒÜ¾^¯ÞÆxüx¥>È+9¸aÃÓ±co-ª¼}»µ‹Ë« ˆ§¸¹íKIÑyyµï×/_“ùÛÃk;X+ßÂ1Lzï`ý‡Ïÿ]p°€U«nMœxÁÕÕúæÍ|½ô}z²w`ïç—ýÿÜÜÊWÉî:ÃË'tqgë€9mJºä Q?‹ ~'¢c™5‘ïgåÞ¿NÏŸrö*õªá»[“9Ýÿ.f“–Îì|;8÷ÖätÚ-%ð‰4—VæŸcþ9d°¨=3L;·Áê[LºˆQ0±&ËMdH_hv“1È`b9–T— g¨8ÎG+¨oËîòT0K•à—4¦’*PÈgË3 ß9‰Yá{è+m˜9“¾‰´ áJ hŠr¶]r ~IÀ€¸ú©×I 9…?Yt®XÕÁÞ û:ØW•x¦ÿO"Ý-T×I½Lò=TY®¥Yl2N¶y÷ÒÎÀ#ô»PïBp@Ö›áØÖÈ“ì¦ÁQ*ÃBó?®€}éÌH&ÌÐMÉr'*˜ü¢ÁŒp~‰F@Og6—¡€Ô±ˆbÔut”¶a§;ÍLÂɇŸ0à4j==˲«mn)QàÜzî"IC›²€c΋\ÆïÄÃGkNO£¾IòÄÿ.í¿A¥aÎæ›ÜÈÀìµ,Ü„£·PÃÄý8užNƒ0Ù»ž>]%¾þûïtîŒ=J§NÜÝc’’ÄúõNcÆHO¤z½hÜøîÕ«ªÏ>+üË/y±,¢¢4Õ«ŸMHÐyyÕíׯx–0E›6G|}#®èéÙö•öo¯í`­} Ç0þ½ƒõ>ÿwÄÁ‚®]}||žõèQfÛ¶Æ’ ­rá§ŸBg̸S¦ŒMHH+{û¼ƒ?Þ¹3>o‘âŒN¨] +ÚN‰ôÿ=k½Mdzm»%¤e¶CÑ[|ß²å¬1òZ~—iÛ½žÝkégBxI Ñp,ä4ucóÜÜ©@^õâ›J럹ARü1 “™seSO`LjIJ޹](à`ƒþ@­§wYv¶ûÓ+Éh&`åc¦ßF'hèÌ®º”—šœ¯¤1à148ZàQšRˆÏ |›ÊFFp•ó=ŸÙ™5†©p€¶° ^™„¸ŒviÇIÏøIŠañ!6#±-–¿ÖÎFDé×H»LòR’²qª `UÛ:Ø7ıЙfyæšµýuÄ Ë𨮑ú˜ô¬[ÚY%lâè†}]ìíó7J:Äq©Uolìò¤g%ÀbXZp†/aŠùðäS“¹ ¨kÅRGZIÅï¥3à1×T(e,.ɤÂGndæV>èU”Mn°Ê=Ú¿ÞgŒ/z##«àa"% ºÇÀ}¨õô®ÊÎ>©è¿ñÓIløL¢¥‰†ð0Z›Eð«7—oáó íMԶžѠ3±ñÌûœ¹RÄö'O¨_ŸØX.äk“²e@¯§U«¸‹Íö³ÏÀœ9 D–+§¼q£º½}^—yÿþA{öDtî\øØ1“ÕÂüù—æÍ»Q¼¸íÍ›} È‹¼ñÏགྷõ.àð0þ-¼#ðüyZíÚûâã5ß~[aöìv¯´×ëEãÆ~W¯&MŸ^áǥʔ3‘˜h¨Uëvx¸vÙ²RS¦H·‚޽╾Ÿ7°ÝŸµÒ¹i»Åå?yý’Ç#C&þhl_ìÒ%jÔØÉò L‹½þÞÔ4!<Ý £Ó$Â"Ó¯r7‚åUÔ¼õ 7ùø :#Ck³©'¦-ˆÎEÒë‰ZZç`¦ éÍ›7kÕª•aÈÀ «p²Ä£6ý¥^Y“ Œ}‚W¦döºÒÒžH ŽiÉœ×T³ägG:›™oõ°¾˜LbÖxe?ØŒ{Py¢z‚°€¶(Gc×åkE¡ž£É $]%åE¶æ€vXÔÀ.ƒ¶U»¿Kz4ûhÿuÄÂc(,98žÎ&ÉμɔÀ¾Ó ˜…Q°s!:æÞšElïñ6KÛÓÓiÞœ«WéÖC‡$ €Ù³S.L-YÒâÚ5ׂ¦mV5jt×`gÎTiiª¿’ >>Ñ]º\¶³³¸y³U¹r¯Î*ܾP·îoZ­ñèÑÎ;çûÇðÞÁzð®xÿ Þ ðô|0tè™råüüz/þêÒÐëדë×?4¯[7¯ÀÀÑ£Iݺ=´¶–_½Z­zui&¯Ï¬¯om[•õ_—jµ·µùÖ÷aBÖšŸÔ ñª´e •*qå ’‘ˆ‘SÙâE¹Ò\ñ¡ É;d@íÆ“¦fÖÇ|ÿ©Ä×ó.>z–@ËŸ‹£]UŽ|–»#pú1½w“¢¥Cyö÷ÇÞ$p+Î>1ó“€.}é‰ÙÂo.XÖÁÞ‡ºØWÆæuÛ,š†¬*c9ÛØÚ¿jWq°ŽCFà·,s^dšà§T~LC-°‘1ÉŽ¯ì¥óÈj#Sž±>à#6–ÁIòR çÓRõT¶Ã«uLEÁgXw «›ó‰ÔUµø_ž˜ÙŒE&ï6ÀòÓL݃…œ]£ékBdÌ»8u™nSÐhùn_̽UŽÇë0U*pT‚ØŒÅæÍT¬È•+8›0·€óçµmÚÄ Áï¿lÛVšY¨Ñˆ îܼ©þüó"K–ä%‹£RjÖ<÷ø±jùò“'KQ½rB¯7~vç·ãÆU_»ö-ö*x-¼¶ƒµþ-ÃØ÷Öøüß) ?Þï·ßµiSÜËKjž3ÁçŸß^ºô‘››c`` K˼žöë¯qÛùùU1Mü²ôü¢ùYÿU)çÿñª]AÑYkF¶(»idݬVÐ=zpð D*]C‹^^çƒVó” ¼gMµ?Mæ‹¡Ç™·|΃hZ-!2‰›²f„u%‚®;ˆQѰGájòæ¡¢Ó1nÆSÖã&2¤Ø蛨 Tw`w]j™h™·Ô xLˆ9?”`²™`…V°VÅœ’Vð±-ß9àjÆ!¹³àÜ Œ…¡¼Z64ã^TÛQ=ÅX!ë„r¶¯ÐÊBöŒÛ#ÒË`ý„tsÆ äŽX8bဥ#…°rÅ*c9kM!Ù;Æh0Æ¢‹A—Œ!}Æ¿¹ÖÄfsòLQë4 7ÎiFbØz3ªH €Ù(‡`Û"¯Âƒ—¸ ëÁT ƒ®0 LòÛ/aO5_&iDYó£#eÍd,ósu¥êÏçCK²¦&¦L!gØ÷k <ÛÒÇÄU0&cm 2Vwå©Î¨kÎòÙndà9Š roÍ[СýRULìÏÊéû_¼š/¿ÃÁžKG¨.¥âéáÁ¸qX[sáuëJ$&ëÔ‰}òÄ0{¶ý·ßJݮ̜ùüÇ£ªVµ ªfc“×õ2uê­åË7hàìïß,ÞÏYX³æögŸùuî\jÏžvvo"‰ò6ðÚÖ–·p ¿w°þÃçÿ®9XÏŸ§U©â•–¦?{¶{«VR ˜9¡RjÕ:÷è‘jéÒêS§æU´’”d¨]ûöÓ§ÚÅ‹K̘‘£´úö¾ÝǦŒ#sR=ª¬*—œeЪŠëÉ/š+,åÀ“'Ô«G\ßÏ,>;ðô9õ;Ç7SX0CÂ`× †ÌF6|èžy @ߊ`Òn¨_†Cp2ñ>Bè¸Ðª¹r|¥M"m zœÀ/ŠJw¤™I9p+…þAÜJÁÆ‚ª"ù›ÏkdA*«Ó0@93ì˜j'QŠ˜;°ÖCFðÐúÁ$ÊÊæ@V@ˇt=8 ³FÖE#MPV‘`Ýä ÑèÂѼ@›”-’”¹œ„^kF”!ì°¨ŽíCÔ‰èóórg,±,ð2Tf™ý¿¥±v}SYùHŒ—Р½„V‰ì&: –ý°Œ­ó«rIà«3UÍäÐÆB/ÌÐY-Ó’ Ö4°b©#ÍÍ—onc«â£ù¹>4ô<Áù(\”îHs“ë\k`ؼn¡´ÀóC>2QQ‚ùG˜„ÕèWŸÑ&¡™¼[27Òz,ñÉ ëʯó$^É^Il¦Y3Ôj³íœ½¼Ô X]¸àjeæ7¸t)­yó{2~~U5Ê+?påJb“&d2._nîîþjÊ`B‚¦re¯ØØô>èÕ«ì+íÿ1¼w°Þ¼[Æ?ŒwÍÁF>°}{\ß¾¶nmŸ—§ ®@‹6ov«X1¯‰ãĉäÎ4nl·n]™Úµ_NÛ¡¿û=Ĩ™mQ88l*ºåF¹”¬oU-æpñëÖ.vÎ[ǎѽ;uë²`t-OF›‹•™=…>Rm.~ñbÒO4®ÅŒaôn“{«ÁÈÀŸØëG×ú,C%.THV—F—š¬DQ“œBD < ‰¦keµ§†‰ø‚JÏ€Óx?¡¡}Âô&.I=ŸRõLa{8•íhêÂ/R`kŸ=E#hdǸB *`6¥tGÏçÉøh°—áfÅ\{:˜’¤ÃXA´K ½ÍkTf!ÃNT1Êl#SË î(Z¢h²–D¡ä›Cƒ1{Ø)]Ærö¸Tz¢R’ñ“œÌ WöX—#®(\±Ê †¹þ­‹Ñíe´WÐÚ#¿˜©ÚE,†`W/îZxÀ=8@QŸ@9¤Ç¦'óÄ@ Ž’|çÀPój´Á*>ç±–0 ã ±¬$’²á«Ã8ÅéXÜÙ]ɦY·˜|2Æ7¥P†”h5“Hm’†O¼9þ™ŒChiR¨30É‹£7‰Jbã0†5Îm ÑñÉ*\¢€=~?RÂDnôÁS¦-åˆ}ÚâµH‚˜õ0ŒÏ¾âÄY³Äö/3†£G?žU«$ €M›T‹¥ÅÄ‚ƒ •+'ýŠ“šj:ôñ‘#IÓ§ùþ{“f×ÙOJc:4øàÁ¨©SË/^üÊ,=À·ß­XqÓÝÝuÞ<§·ÚËüuñÞÁzðÎyÿ$ÞAK­Ö·oäâÅèü·Y˜5ë΢E¡ :ûù5³Êó©ôí·sçFV­j}åJ5{{yÄÕË{û÷Щ_>†-­m*/ßý‘w’Z÷²’¿ ½âÒìÖ çžÂW­bÊìíñ÷—n¶ifbi…ïêI•Æ-ßÉôXXpèg:štbÔ꙼žu>”.„ï"ʘ¤HÂ☺‡ƒ×(çʉÉT21HHç‹“lÆÅšCiQ:·ÞÈœ«øFr!бÕXÙ¥ŽË¹•J{¼êâ&E¹›ÎŠhÖÅ4³gE)ê™'ÅJg[:ûÕ=­ùÙQ¢,?;®€\„;”…q0 ò’”ÎD(úŒ8M âD¶_!äMP6EÑ E…7y¤bPa°Dîü¦±´×EF´Ñ\D{?a«.V.È£hŒ¢vn©K hÀ Ö@VÐC·<Ý4Á¢T–¤‘.¨eI¦Ù™i£1z¾yΦ8 ‚NŽŒrå#©2¸D£®³? +Ÿ—gniló=&^ÀJN¿òÌ«Oq“«12•.;¸EÛr,ïD-“Û'MÃG¿Eõb,ëÇ&Á-½¾‹8x‰æÕÙöôŒïÓÇeÇŽrÊ<ÓæÓ¦Ý^¶ìQçÎ…÷í«g+IÀ̉;wÝÜö9:*|}»W¯n¶tñ_Ák;XÛßÂ1 }ï`ý‡Ïÿt°€Ý»C<]¸°Íýûýœ^-™”¤¯SÇ7,Lõõו.”’çËDzº±I“{×®© (ðË\Õ'½TÖ–YXÔ[ºeÀyËÉ/_î1ÊVõhüi‰L¥ ÂΔ+G@…¤ô9ÇÍÄc;ÅŠpù%¥²3VòÓ6l”øüB+j…JCçyø†P±çQÜD!>«¹J;¼?¥i…ÜðçJ ¶õ¦ŸIŽMÀÊf\Bk¤®+^í‘ìÊz?~W¹žŒµœEÕ¤Ó1ö%ðy8Ï´È`HA~*A3n¬Iû“˜5Þ./Ŭ $ÃnX·PB˜ R²_Òxá2ºóh΢ Ï&…Uyc-P6@QåŸr¶ÞRÁh}ÑžG‚.KËY= ±jˆ¢±[°Ö@ NЦä£þÀ;‰É<1¼¤[-q¤´™‡µ^°9ޝŸ«ÇJÆøB|[\:טHÿ ©p´Ä£6¤ª\SuŒ÷ÃóÀÐJ¬m)#(4Nž<ŒÙ.½ŒI,>JA;Ž|Fc“4½Q0l);ÎâlÇßKäñ£ãi5–»a4©ÍÉUØ›xx=Fpì4ujpþ ö&‘w!6 OOÊ”! €"Rb‰‰ÆúõcCC ãÇÛ®Yc6—·iSìèÑOììäW®T«V-/±þ“'c:u °°ùù5kÔHŠži‚Î}Žöé§5V­Êÿ½øáµ¬]oá¾w°þÃçÿn:X@‹‡ýü¢¾ü²Î?äK‚åÂ…øV­ü…àÔ©ÆmÚ˜ë³áÁM½zwªð¯*N5¦dÒØe²æ‹~ùä~ñÏ’þ4=_±´®hPtÍsz:­[@óæœ:%ѳB§£Ó`þð£n-|`g2É ÁøðØ£§ÖÒÀä-9YEûo¸ò€*%8·ˆ"&3žJK¿õ½‰’=cébBŠ7&ù°æ 2VtæSŠ.p5–þ§MÆÁ  4i¹CN¡‹²É:è* IDAT g©Gtš‘Ÿ¢X…F`/çó"Ì*f–gž˜ULÎ<FÛ¾‚þc„?`=àe@&ƒ?^«%Ç ɲ?ÐDds¶ #o„¢Ê–(KçO2ê]@"HÊ©²FV «†(Z¢hŒÂ*ߥ…Nççºð †W÷똜©ÐQÏŠŽ43ÿŠôG SžqS ÐÎ¥¨!ŸÊÐi›q­‘úNì®G©ßûvýNq+KV6•è EÎ*#ƒ(d²Ÿ°8:­àÞ Ê¹r|•M<!¿ã8Úrj! L±Sh;Žà{¸UæÌ:\¤^Z>ûšÕ[(Z˜€£”–JÙ-\ÈìÙ88àçGm©¸ôí›ðÛoénnVþþmÌÄoÝR7lxW¥2nÛVvèм&Ƙ­›Û¹ÈHÍ¢EÕfÎ4y]“±cO»v=îì¬xð`€«ë+ú,ýóxï`½ÿa¼ƒ§ãÆ !ÄÕ«1rùz…bÃIùüâìÙwÁ»dÉßãâ´y[zn¸?£pŸŠ;f}üW-ë¶ì#~Ëú|½ïVÓ¦±ѵkœÑ(½ŸÈHQª”1b„´A\‚¨ÔTPL|8J ƒôµ žpn-‚îJ$¤ ÷I‚nÂm¢ˆO‘0ÐĘ킱ÂrœØp^ú0–_²y‚yb’Èu.£¤N <bè"M'½Ÿß"…óq·(sJ\J¶BÅö퓪·@›’âշ닛׳ָ<ö`Õ!«N‡f­ù¨~‰=…‡êÖ5.Zä0s¦´(_p0-Z–ÆÏ?3mš„Á½Pšt#!‰ÙSùVªHÛ`dàWì=Eáœ[OÕ²¹ ¢“hõ%wÃi\…ßJÔgÕ:ÉdÌéʼîeÛuFFgd˜{ü)Cš]ízÛ}Æû¡ÒSÍ™=í©)%Ô¦b@‰¹EMq:…Éϸ¥hïÈŠR˜ CÀv5³Rˆ0 ‡1¶L²£z>’u8 Ëá"YÎ6 ºñ& ˆæZ´IÙÚ6D¡CD^yAä…°(¹\yäæyÛ9%wÄcŒÇ‡!æå‚1clæB8]fõ¢2w¬š£h‚²>VÊ7’E½ë`/ûc‡1ð©ùÞÌÙod³š…)$ 2&Ûòùœ¯ÊÈQ,~Aº;9_äæ<Çà`ž§ãª`‹’m±’µ|ržÝ¡C+±®¶–`2ÚÛo0ê:#ÃÝØÐCB‰÷ì}z­!IMÛª£Ôå:Û“…^(,9ð5]êçÞªÖÐeg¯R¡$¾(.5v¿ûÒeÛað‡¯œR€€]Ë–q:Ø·ÏåÃ͆ŽFz²yslõêÖW®T³ÍSÇcÕª°‰C\\¬®]kYºô+uQV® ™<ùb… Ž·nõU*-x› Þ ¯ÁÚûŽ¡ï=‚õÎyÿ$ÞA+ Y’ çÎuoÙòÕ’ À£G*wwßädý¯¿Ö>\BIÏ ÓîÖï‰ï™¬5É%ºº~÷íä7²ÖÔ/ërnVK[…pô¨¦Gø–-sç:´n-êØ¿Ÿ¾}¤»”s“5¥n[É>Z½>Çç"% s~#eMÈ%á±´˜IX4íÜ82k©Y}–I»1 &¶ay )êSøÐ‹-í˳¿?R;Éždù¡!“¥ÚójŒÌ¸Ã/г([Ü0×V'XÃÜ’ /é5 Šãh&ó¦ü˜Êâ4Ü-ñ×QÏŠ±¶ µ1K‹ÎŽ A¦í¼,¬£` H¹ˆùÅ çÑœGã‹¶ ²GÙ2‰¦P"sF愼E;!wF–µì„¼ŽÙüž$ŒQ“0&a|ñ†DDÖrÆXŒyý=¨•´@Ù«Æ(ÞTk^ ‡`=œÊ\Ó &ç¯Z¸ªc½ O5V2ä™9AsÎqQï‹pžfõ~,AQ3OööMœÙ]—²RiÁ XúŸâaž n`ES#`f3~h'!—p ˜A›H×ѧ.ž#%æ€å‡˜º 9»¦ÓפZN§§÷õ£DaÎo¤œEì^(»’˜ÌœiÌÿB 2’FxöŒ?fófés‰‰1šxù²näH›%K̶jöòJ0à‘µµüÒ¥ªnnyùL·o§Ô¯ï§VòÙsHHÐTªä—îíÝ©[7“ šw¯í`x ÇÐû½ƒõ>ÿwÙÁæÍ»:þUww×ÀÀÞrS—A Û¶…~ÍÎÎ"(¨eåÊ9#Â`ðÿñý£‡²ÖÜ×5Ù¤œ%ëoÈ„2mæ´)’­ËëO?¥Í˜‘\¤ˆüêU×%¤½ƒ ˜3.\@²Êš_ùô+¬•œÞCS)"”*Γð ¢b)|7P̤Fîa$­¾$"žŽu9ô4Kùà5mD­£·;;GIËvÛIt Šsd…¥5¹hÂkšc/ù·¢™ÙXww]š˜¯ŠÓóm$«c0ŠY1¯8£Í묇ø1_U¤€"rFÚ2ÖÖ¬"evDÃFXÏp‚ÐZAõ7ŠieÀQ^`Œ3RÒäC Ë™Š»èâ³ÅÆÌÁrÌ ¾\~¹²$Ö¡O(œƒsp.à #`Mݲ¥õˆù™ù ÞµëyýúN/6ÿSµAˆ“3'ߨ±5ˬ˜{ý­×ξâåÏÁÚÒï«VµKåˆrtéΩqc«sç *¤ô1…`èPvì lY(,%<=e7ïtƒ³ûq3á³Éi´OàmjVàìz šÄÚï=§Õ—¼HäæxÍÀRÊç8wŸ^kITѦ ÆKÈ>J “'â)ïÂñ!T2äÙvŸ ~¤é©âŒW;ܤرOÕ Â?K_WbN%é'S²?_ëÙ²2ÏçkŠ`—šµÙžßm•Œµ¥·õ«Ã*Dø ¾™+ A#híÁ¿¿µM:" c""ƒdh*C ¢9J?4€YQä…±0÷r•èðWñüàœ„°Ì•àŒƒÑù °wõüªf½Š#€‹œ¡6L¶£¼ùÃ}-ø#–!ÁDj(¬dk:I%Ú’´Œñeï# /‘­áÙb¾6éu`Û|¼k'ð‰‰ôŒýŽq²çôZêIÕXªÔtèÏ‹X*•ç· ØšÜ˜B0x0»våU˜ Ìš•²hQjÞï{hÒänp°ª_?/¯¼ä—É“o­\ù¸bE»  ùª¢½{7±ví}F£îS«Ö_ ¿]¼w°Þ üó´¯wïàéŸ?Ÿƒª½mÛ}ð(Rd[rò+¨ëYHHЖ)s ¼—- ýs·‹¾ÍÎjßÒ¦Qxø‹ 3Žg±Ú-Fî÷¾)¹Ã¸8C¹r/ â³ÏÌ2îÕjѸ±Ñ¬™HO—0ÐëÅGcÅDñ:âñSéÄ$ˆ}õD"^êO>NýÝÄgë„Þ Û7$“¨[sžx&ÅŽJõ<óD‘ŸÄÆcÁæÎèN‚¨½Wà!¬7ŠåR|^!„Æ ¦„™·À[ ·¥høY0 ±'^”¾!²@Ñ7T<}¥=P+Æ& ÛÈ—,øâ/ÄÌdñ4¤ó'B¬b%2)Û!z±Tˆ@ñ÷Ñ×óa<p1V^›yþpW! Q<ç ¢+…¸¿ýhŒbZ´²ˆ—¿E½á‘&TyžŒÖ(–¿NÁ‚@auULz*’òñhøä†(tBà-:\QR÷‘âr´(¿Kà!·¯Pi!Äɳ?Ø.˜'œ‰sR$ïì"ýÌîÇë¼°è!è&–”6˜¶TPOØ6¾AÒ­è8PPLTh""_HÛÌž-@8:гGrø°Z&‹°´Œ8{6¯;güø'X±âͤ¼‡[ˆ?þˆuu=¡P½z5ÏR”œèÜùxL˜»¦&×Ôý¯ãµžn€8ò÷ÞÁ'ì?Œw:„ó¶ñŽG°!hÜøàåËѳg×ýö[Z©øúÆÍœy700Ñß¿YýúÎ×¶n<õÕŸJÉÅŠ÷þíD/ÏGþã³V¶T–>·Îìþƒƒu͚ũÕbËç#¤ QQ4jÄÓ§ ί¿JhutÆÉsT,‹ß!ŠH½¤FÇÓr ÷ž˜UÐñ¿Ë¤õ„½ Y5vÍÀF*ð$ŽN+¹EÙ‚ŸLjpŠ–>^üþˆâ¬êBo3z®éf°2 wY6µÂEJËðP›Ã9…¥Œ‘¥XP…Âæ%Ú_‹ãœD#{ÒY™Æ-=€tV2ÙŽvù¦sGÀ8§àQ¶õöКAshA>Úïý/ +Ružf[_¾~/ÔÀ›UÄe °áS[j¿JJëT2SÂóUåhŒ¬|ÌwHÒÓÆ•ö®|YA" š]¹­~!¼ÚQÞ )4‰>ø< „>C$¤D_)q’5ǘäA›Ú´¬Áì_­æ‡-(¬8¼TB108½Þ/‚ß!ÊI–öî¥är¢«TÃàáC}ýú±IIâ矧M3mÜ·/¡oßGJ¥Ìß¿ª»{^ê%IIúš5Ïj4ÆÙ³+OœX6Ëì8uêy‡GßYi†ìxí–Ï[8†Îï#XÿaüOœþÅ‹Q2™‡Í¦°°<#$9ñùç·À»Zµ37öìYRÒ9+vµªf¹Øû÷­»œ]”Á²Ùï¸k—™ºj!„ëÖ¥A„µuäÕ«fciÁÁÂÞ^€øñGiƒäQ¯£ ˜¨ÝV$˜ ‡=e» ê‰öã…ZêMÕï¶p è&Zω©Ò;‰OÍŒ¦Š % 4zññAÑd“`žº_¨ÌH3!ö=Î[¢Ìq1JÚ&V#&…Ë#oá|\,z(ÒÍØ^žc¾«ô³ã¼FôV™A”JÑbQŠˆÍó™â¹{„+Du!dÙ‚:¶B4b¦¿ ¡~½]þûÂCˆ¡B”Ê©*"D_!– (^O³Á Äïé¢oüKÙ"DÝá‘&Rò±—ì:•C^¡Ó!„8%*œx ¼E{q#YÚ,F-ºú<„ÌCLº`V¯A±÷–p^$ .lO¤þz\ªh¶8¯»#s<Ý„¬»X´WÚà»M‚zª‘8|NÚÀhc¾NUD°™ÐT` °µ V­2{$*•ÑÝ="zõŠ7§#„xòDS À5\½:Ú¬Q&F޼ÞûåS—AHI3¼Ëx­§ |þþÏÿÄö­â]á¼U¼û¬ xz÷îÐAƒ*îØÑ6Ÿ_ÑhŒuëž×…^Sh‰Ì¨ÍXiecÓ×ëðš'ößyßͲìT«H'«ŠS&…;;[U+WÎl cÔ¨¤Í›UeËZJ«Ò§Àþýô”êåO‹^Ü}Hë¦øìÀZê¯=|FË1DÆÒ³û~” [Ý~F§9<‹¥f|æQRŠÆªÒÒGn`§Äk ]MØ÷B°ò23Gc F!¼úJt-Ì@X N¥œ¯Ý™SWšnu7•éw8ò ´ ª0´d^A¦|êLæB”‘­*ÖªxbPÊè¡d¬-í_?ç3ã=AüÉT·º™Ážf¯²õàøÁ϶¾´Ì ËÕ}}vÿ_Þ×Rš‚’˜v›sqUíYR®RüE š§ KÁÕš_[ÓÕLášZÏ—§XЧzàbdye|0ùlë|°³vc:JجÞÃg?"—ã¹€RÀW?ðÃ/ØXsr7Í¥$“#"hØçÏ=š ¤wŒ‘¸u«ºreË+W\Í`èt¢U«{þþi}ú¸ìÛ÷ êÕ©S±|pI¡µ¨^ݤIµ˜J3¼ËxÁzð¿áa¼%¼ƒ–ŸŸŸiÇÐðð´*U¼Ôj½¯oæÍ‹æsW¿{ž½<£ŸRö²õÜÒêí^¶U®»œuÒÕ‹;^ü¦•“UŸ>¡û÷'6h`ççWE’ɤ§‹æÍã®^Õu름áÌÍ™;sŸ9÷œç´mëÿæMñÖ­­–-SJ´•¤®^4lØű«8¼¿ªL°î|>ôûA°¾ã㯆‹ «W?Ú°!ÜÚÚôÁƒ‘f8ˆÜ„8÷‘ƒÙ¥UÔÀár‡î=œÝªwÿ-BIYÚ ™æÃ?û40Ö—'íÔ):!A¸ti­mÛdhh•"1Qje•ͬ[§·z5k"ÜÌ™8|X^±¨ôú 9¹˜:ÇwÊÈÙð$}g#¯¿ Çá?eØð 1lîGÃH^¡K(Õæ›XyI^žT¡s½p*¦¶Ã¾¡ÐeÉ·¿ò¿úƒ'D=]œ¶×en)X !8Àslm쎠ʵ~mtÑ[3MÐPqJà‚„ä )Ù š/åÚæ€aù§öÖy7À«HRÜJŸ÷¶¤ÉýÅ@A%ÛéqU@>álñLJ¸ñ¸óp5^ù€Õ¾Rì~ ±(,¥Ô ñw °ð¬üì‡oÀ´Å¶®2BKqâ)æzC Fëš83FFДȱW„ëqï9 uqõOØÈJøõðø•H±u!–M•Ý·‹˜¶D8²ÓÇË0`Œ…+WТ<€!ËKH©¦¨HDgÏŽÇóäí?lØ+UUŽ¿‹nÝäƒÎœùìðá$këAA=TT”}ù&¤*£ÊËO±Y•ûÐ÷ÁúŽÿ"X|¾¸yó³ii77ÛÉ“Yô+ŒÓSOXü¦bKq—%S,ëºþnfy-gM5?§ž]›¼M3~ô¨ÈÆæ¥XLMFŒ`­uêã#<˜G//#;;Ù '"„¿?ºw‡¯¯ŒJ…BÂÑoøEpœëdÿÖýg8EÅpœ€²” ‹J0n3®…BGçWÂŽEÁþHf»AÂ`~_ì”%C àÄSüæ"1ZãÌt`!OI|LòEPº‚åB| ¶Åcó+”0ÐVÁ‚†ø£äd‚‡ °"ibDƒ ØêÃÁ#kÈÖ@z%„ %Ø/Àý²Õ`ôRÇOšè¯6ªŸ äq@ SîOÊ.w)eY@ríèVÀs J¨fš•œd&•>¥¶dñö* UŠ|Dp+F @}ÌÒÆLm˜)U‚98…\)¸@_=üb‚IF¬g›€ iX×°¯—6²« –ân*&û"U€šš8уëÉ6Ëb¶'ÎFÀÔvøÏÚ¥ ‡!kñ$æF¸îŒö²êšßưÅŠð÷ü9Sv—BŠ-}Õá/ª‚Ì€žù8 Ÿrji© ‡š˜b9åXBò°8÷s “þmƒ^ìÓ´”°î1Ö?†”Ч6NÙ¢6Ë NÁÄ Hȃ\‡a<‹+O™Œ¸4 Zƒ¸4´ª‡kQ_Vjj¸q¶,a¥ ;;Þ­[ÂnÝÔïÞ5b‹[H¨OŸ˜  þ!^^Må{÷ $þIIÅ[¶´Z¾\ÙÅAC†\¿~ýÍo¿µÞ»·-ÊÇ‚U-ðucꫪááçå±&I¥Œ•Õ%ÀuíÚ06‘@pzÄÀÊ’W·œ-Zò=*§ ®¿-sw†¡#^¡ÖÖÑ"kr ÃÐÈ‘< µC‡,»Pd$@7²™Ð¥k¤R—8µéà)V?RíB°¤ÍÇYû³æTYÆÓ–‹¬í<ˆ#ãÅê³òD²Îv±˜¯œ Î4Âr¬­ÝN&³“W2=A7ß°š•âa.u ,˳¼Gþòò5‰ˆò$äšEí"˒Ѹ¡Ô?†Îñˆýš¼ƒ†®Óä\ª—Q–WúÑI£~9ä\Hw„Tô5©ˆò‰¢ 2ˆª˜õøI=Ñ.>ã‘yú;§B?ìrȵˆâ•V‹,&§d2zRvQ ÂÉá5=e!¥HÐÔð2±´Ú·É5‘äg­eh€7Á•¸È)˜Õ˜aÈå!©ýMp¦.)îƒDÔŠ±½éÁ8³iÍUÖ ‰¡š“ öÔe e±¤÷?'½žKúeíûEÓ+ð,Š [ÌiîJÖß $ è¿ÿXmˆÈÉ©H­U+=%EÞrrJBëÖ}–•Åž \Ž™3ŸžÖÖÊgÑíÛÉ€kG³²äå×ÊytÿOP¥Ù }þO5œa¿2¾ë㯆—_~IöÀÀ´RɆ¤$’ R±è”ѕٕǯ“‰dÖ‘°Êìjü¾`9©Î<ž¤Aƒg@èªUÉrzÂãI›4ÉR§NÍ•cví©¨—K¬6ûÌI¥.÷dµ9éMÜÎı¢},ãDär…¸ÃöäèÊ:e4Ë>„^ɳ/Eh9¼&íÇe“ºùSrJ¦x J™H‘йbrÌ'ˬ·:™H%ÕT²Ì"Ç|:W\e­‡ƒü±ý¹ & ‘ ŸÆòÈè]RešNö9´©„¤¬n/Q±”Îñ¨LÙ%@(YF‘k):i| ­yIšÞOÒ¾FNQT —0D'bÈü$Á•jŸ$¿VËt> :Ip&Ž39^'‘¬ž<{öL"%‡“R™Cî±¶æó„ôÆìiÀj*`á‹ÏbÉØ–`ISþ$)Ë¿J ³ösšâÅ– IDAT0‡Õ&!LM  %KXûCDW®”iŠúûËÓ½~=ŸË UU T,aãã“Åáxjhx?΢„! b±´mÛó€ëöíOå[~á­<ªL°|þO5œa¿2¾ëãÿ/ÿèÑ·×iÓüÞÿÃ\[8§2»:;f¨DX²õzLevÕáwŸ±‚™áÁ¾šZ—zã«t;=}*ÒÖNR”Ç6o&€´´èÑ#V›µÛ æ¤^ŸnÞeµ9|…8Vı¢C,ŠÒDäæGj# ö4u;‰X&³”\j÷7ÁüNѲµë‰ˆó¨Ça‚3©þMküX †Ö„’ÕE⸒Éqr‰PàŸ(’ЦW¤wàIj^äøœò¿xS®„\³ÈâcZÈ”ÒÕbr* Ù¤žöùhœAyt\@ _Sßý3ÏP€6RÿÒz÷¸ÌÓi,\ø*ªšE}”ËŠˆ¤ Cf·žÄñ¤±¡” ˆL?È W®4À‹úyQ»ý­82ÛFp&Ó­t=–Õ¬DL£ÿ#8ö|òbŸú•¹eb“È|Á’F,!1ËðHI§FÖsê?ŽJXHQAYX@ƒ“„}˜ÅĈ Ò€Ô;Xd(=]dföݸ‘ý6.G~¾¸~}Àsófvá/Yع3pmÒĽ¤ä»1~¬ê€ïúø¿ÅË—¯¡q¨Y³3wï¦VÞî»æ÷Êìê¤]oaa¡÷Ó4•_/½%Xc.Ù ?)6lHB ŠMN–÷ªì˜HíÒ%+8XžÙôéÐO?Q&»þß‚?æÔw …°V¯¡­'Ê éxø²Ú\%1¤3†~q¡"OOŸºo&8Ðà]t›½ZŠHJN·‰ãLziÂJgÚ‡fRW‚+i¢Þôî•‘äbšN\/‚'Ù=¤‰ÊV©ìÐâ„R—hrJ&¹—ˆl¤¤KÖ[²•\ç”ROUiÿmsÞ'‹Ss«¶üWB¦ÌeÕ4¢j.«RÜͦAIÛàI6A"ÏÃKD—O£oSw‚+Õq£1¬DP$¥e·¨Õ^‚3Ù¹Qû€|ãiÇHm.™,¡‡ñ¬f;<¨Õ\‚=9cuú&¦ÑÈ¥K8•9eóh¬qjSW{â³PC‰„, jÛ– Ø]HùùÌØ±<'uìXyš¢b1ó믯UUà Šaó–UÆòå‘::×»t©Úâ`jj‘ÍÀõÊYņª7~¬ê€o)Êû³ãÛ r¯ÀÿE9:Þ77×md¤àáέ[ÖWÔhØxÒå›/ê½6Þã %¥õµT»d™ú\Èž9³þÁƒ êÆ3 ~û-ÉÕ5ËÆF×ϯ¹ªL‰Àºuü¿ÿ.41ᆄ˜Ô«ÇV~³fáÅ hiÁÛº²ä¿ÿƒí®0ЃßE´“U2ÀÖ“ØtMêbÉL(Û&$+Á/][Àó/˜ÈJ?*cå%{Egaù؇s©  “v¶rùI9Ï^y ÁÁXCÌ7…µ2õŠeAHx$F€"H€Ûe™¦àíÔÐG†\Ôä¢5¹¨É… 5?{Éhð  2¥ÈfÍ ƒA ƒH1ŠQ\~ï6S6ê襎êJ)WÉDŠÿeá`62Ä0@­´à`¢”,€7ÅX³©0Ò “ê`Œ¹¼Pý" 6†cû3”HÑà võ°ØÚ,‘ö‰ùÁ)hj„¹VXÜUv€Ûјz a`kü9T¶”(–ÁŽË¨UMÄoCd7Ÿ‚1+Wˆ>VسÚ²tò ÐožaüpìÛ#–üã¥K nnhØP¶TŠáÃy×® ÇÓ:tÈ@Oõä­Z•²qcº­­ž»{cSSÉ §N¥L™Þª•î¥KV-[ʽ'+ahÀo_ßÔE‹Úþû¯,5°ê*¹?þ}èô½¹“ ãs¡,eÔê$¦woÏû÷3ìíë_½:8êÂéë‹CùèÖ2Ÿxå–@ÏÔzß^qéF5îµ%ÝÍ-kë@@zòdÇ)SdIsV'éÔ):1Q´|y­-[X•±$ØÙñ||„:¨ë²È\fe¡gO¼|‰Áƒqå Ôee(V”-«i ÿKhÅ’¼½í$–ï— —¥X Kb@|:¯Al*š˜ãÆZ45—aÃö'‹¨/eл9NÏ@m–¹!³S=p+`Elè6õƒýQøó ÅÐR…c[¬î]¹’TžX‰„òÔýÝmÐP^ µwÈÇ®LxäABÐI³¥³)„xRžjwO„B U¼”Ȱ4äœ C. 9¨­Rþ‹Ú\˜«ÀƒZ*¨ÌZ?ÛÅ„\¹„4)Rä2ÈeÆ UŠ\B.ƒ)òeÝ u¹HfÐXý5Ð_ÔQãÓ_˜;3q†1@KMÌ©‰™&ÐQ®Yƒý‰øó% %ÐRÁŠ&XÙšr÷õLÄ‚ $òÁÆ4Æö®¨Ç>õ_}‰_®€WŒzú83ÝY$ÄRüî> B×:¹žK Mdµ)’àœö‡º*Ž-ÆÄ^²[{…¡ ‘•‹½q|- d5%(†ÝdÜ{ˆ¦ áïÚ," 6`õjhhÀÏÝd•,,Å¢E;ws>4nÚ”•6]¿žooÿŠÃáܼ٬_?R ¯^YZHj7c‹¾,¬[÷ø¯¿BMMµž<m.'O¸ß¼ÐhøèCÇë;>þjH°”Ä›7ü.òxB—Ré•ÕŒ¤lÔÐÓñš^³Ö}6ß ‰Ï­°ßÿsÇ9}8x0ÉÁá™®®ê£G6 _æ‚‚øýûÇZ[ë,Zd:r$«2VAuïž)2DãêU#WP\llžŽ pêd Á‹Ä5Þ>¨c†{h,C0vºcÉ¿`8MÃÆù²_åÓs1t-ÇÁÌלё¥x† &FjLtqüÖª·DØrܔлNFmö{ª+ƒá êê`CgüÜœÕ@±[â°%)º¢­~kˆ¬º?üœ²°/ Y¨¡‚Ÿ±¸–²R¥r $‹'E‚Y 2d1ÈfÉ€Ç(Þ] 0ᢦ L¹0åœ[æ…ÊbÎ ›@‰›O‡óÖyfÂ…© jqÑQj0ùd/Z ƒs¹ØžgÅ Â>š¢¿Ò'?]ˆCIðÉ.«x3ÖÛZ£¾\Wx6ÞG@:Xš`Wtgo’0Xí‹-A `x #–Æ“x˜x÷ã ÊÅCð—½l9~ ÆnÂ0èjâÂïÔIvk¾ðÓ2¡\Ú=YC$ƈé¸á‡zµqÏ YhŸ«+æÌŠ ÜÝ1v,ë‘>,˜93_M ·n÷éÃ:vE'Æ'%‰æÏ7]¹RAY‹’¦{÷ ððüñãkŸ9Ãr¨²nkëÅ0tã†Ý€¬¯—Õ?VuÀ·Ê0> ¾]‚ÀË+iñØ}3 ©rJk{@USkÌéKµ»t½'øòãÔ Ëeƒ›mÿ¶ßÔ©ánn)zÁÁ6ZZ ʲü÷_ÖܹI*µjÖŒU‹)>^jmͬX¡»y3+õˆˆ@ïÞÈÍÅܹطO¶Mq †LÁÝû¨_÷<Ѐåáæv ¿þ ±ÓìqèOõ ñî\rqv”ÝT6ÓŽâÚsp8 – ý1é"R a¢?ÁN®àkH&ï#8úÔÆÎîh'w°T1ë~.⊠›!æ5Äsh(G#JœÍÅžL„ @‹ +Øê¢ºê(ð¦|rÙn§²ï 2T¦a6ê½Ó‚&†œ÷ý^•au¸ŸêšúÆòvá ±6 {#!%kâÏNXÐFž(ZR>&\Àƒd¨r±Þ+º³. ^~‚_#W€z†pŸ…,Oyâ¬ø­ãô ü²"1¦ Á‘¿ &Ë—$cÔLx݆© ü/¡%˽pù2ÆŒÃÀÕ³f±©¿¿hà@žHDÌšÅê. ÉÆæEh¨`üx#w÷F kZÌ™áêšØ´©NXXO}}edÎ 7WرãÅÄDþªU7lè¬ä^Õ ?VuÀ7Ì0>ß4ÁÊ~ydð®¸\;TEe¸ëñfvÖŸØv#¶Âlh{³+ŽÝT*=Åù|IçÎ/^ðçÎm°oß5?ÀøññçÎåZXh=|ØR›}ñ) @Ô¿?O$"WWÖGäƒèßÖ¬³³l›"OB`š5Â=˜±TÀõ Á¨e(`X/œÝ-Yô¯òjÈñŘÀ²B„]¾X~b):7ÄÙYh$«€4€,¦yàú+p€ÖØ6µz JkæÄby02‹Áå`rSl¬?àU%áÐ䈠†~®‹EÐHéuÃà"ìÉD¦·Ê•0U9h¯…þú诇ºÐúZáS"*óW•º¾Ô8PYüV©GJç ¨ž²!^ŸBøÀ¯Ùå+žôQÌ`¾)F)§˜ P÷Tì}gÀåÀÖŽ`_K^¸•„Á‘—Xõ9%Pãbnküm¹.Æ+/ñËeä– ¾ÎŒA7–7 ¡+.b—/Œh#Ó`ÄŠ§Ìº9€Ýg±h;ŽðïÙžf©Sæã̘áîE´i!»)??ØÙA(Ä?ÿà÷ßYôåKI·n9¹¹ÌªUº6È[ò›=;ñÀì ÔÃÂZ+ Lçϧ¦¡Á}ð GÇŽÊÖÌ$¨Q·._~Ý¥‹i`àp59·wõF• VÔèCëï`}×AþÕðð•SÉ}¿¯C³ŠœÁ-µ ž¹Ÿ ¢#¯+‹2t\s‡_"#÷úÙ³-­k€ç©SòÄ®JQX(mÝú9:i{>9R¤ª©¥úúÊS¯¹z•TU  ÿeµÉË'ËAs²°¥ìD+üœLú,©ëtÊfÑùcZqT¶ é{g;8­"8ÁB:Ï*æú¾Æc¼¢4±\!9“úA‚+S,å@D%R:—JÝ˵I¹^ÔÿKU¼cò%t%—¿¡NQÄ }«á¤F½^Кò+ Á×ýüêBA Ñ3íÌ Q¯ÈäÉÛ3€PªÿŒ~N #ÙôZÞ8}Ñ…äøœt¯—]³[äE¯•Pm¸“BmÏ\ ®Ôß‹ž³çRˆËÓWKÕnyìò–/Ó©Ã:‚iüF.>ïd¾w¶CbÈt2Áž:/¦Lö;e+Á’8V¬¢¾¥f3—ÌÉ =zÂjöèéé@óæ±ÚQNŽ´Y³L uÔ(žü|@7· TSóqX˜b¹W¯Š ®žû÷W-ÐÅ%¢TV4!¡ rYôÿ@+úóªá û•ñ »p>ÕЃ•ŸŸo` àeKåþÓàÜøW[¼ †NÛµ¦IwãÛE嵜ÍkhÿÙ·KÈÆ¾}¯çÍ{®§§Ú³ység/_–téò¢ @ºý9sdÑ(Ç’%ÿþ«8LÕÍ ?ÿ GbÚ4Ù6Y9è3Q1èØ¾Pƒ%,&:ƒ )­ãæÔeqwí¼Š%‡À‡áßYeë2žíübÌ< Ë– ·Ž†:ËA„¤`ü¼Îƒ±Ž„½Ü(+/ó°èn¼€V5àÒ•íËÇD¸¥@ €&Ú˜Õ3êÁ¤*ñU|ùð)D !EeqÜøêž-eÆö§C¦§ €¹ltÑ_=t”Í ,…ˆÁ• HÄì²*Š–pl„‰u;½â ð{ÎÇ@3ìè{EaÖ‰ù˜p•X¼ð3O ¿ á>]ß]ï«|¶}ž`Ô?(,Æ€¸¸ z²_Ê`Î?8tª*pý¿—ý£D˜ÿöƒ¶nœFOkÙf¯^ÁƘ4 'OÊvƒ‹1xpޝ¯¨cGµ€cv—æ³gÅݺ½˜#Gþò‹Ü…X@(dzô Ë;ÖüÜ9–¥²…gmíQR"½tiàO?5T~G|­á­<ªìÁŠþ}hõ½{°ªÃøš¨†K!D……gÆ É|þ¬b‹¾íôÙnm´ÌÔÕF””M)Zê*wzuiÌR¤0yrøéÓ)––AA=4Eúœ=›;aB¼šçîÝæÝ»³FÇ3 FŽÌõô,iÙRõÁãì4»wÃÑjj¸rvv²mRÒÑ{â^£»nºC—…¦fÁÎÏbÑÀ7÷ Khü… LݦôÅGÙ‘%(_.\q " ,àì,4a¡”ÙL¿ ïXp€å=°Ò†r—ÿx&bÑÄ€}}ìî†JœÍãx2v% ^\ ¯‡èϲŽ)Õ„l}^|vRUŠ”LÂþDd @_jc~#X(qÉlyŠÍOP"…Ž*–µÇï !7âQJ8ôù!³ qv ¬j˶,ÃéRٲ਎8ü3j°¯ ŸôÃŒ]Kð³--=ì%·ÞÐÑÂùͰc%X¹›÷BKÞ'Ñ·‡l›”ØØàõk //Ù)Ã¥˜=;ÿÀ¹97$Ĥn]Ö³“—'µ²ŠŽ‹:8˜¸º²ÜÞ•°`Áó={^7i¢ÖËÀ@ÙÐ+>_leåñòeÞüùmvïf9¶o?VuÀ·Ç0>#¾9‚%))¾0ytòàŠ-­G²Óuâ/wÏfC¿ì Ååp.ηÙ‰åñ\ŽÂB‰•U@LL‘£c£;YêÄVÂÂ…ovíʬWOýñãV&&¬­ÂB²±ÉyöL8À”fØb 3E!t¾ Xz OÒ1 1tÔqd+Y‘Žq‘M5lú ûÉkvçU,>"8ƒË,ÙΰÊ÷ާ º³kä9oÇÚíPSÃ¥C° Û&'½z!* ÖÖ¸s:ìÎñ-[øNN…ZZœ»w»taM. ÂèÑqy:hß¿ßBKÑpôôÌ1⑺:7(¨‡¥e\JS§ú¹¹ÅZXÔR憬ި2ÁJø}hôƒ`}ÇÇÿm,’J=çNñ¾ €Àယô<âð))‡ÛKམì Ë­ã-– fQ‘zaaù=z …ÌÅ‹V£F)Èy‹ÉÖ6&0߯ŸÞÍ›ÍTØÄ €ÄD©µuvF³`ή]¬)ïD˜=ÂÀþþhß^¶YlzBZ†Ä…ƒPcy+ùñvÎHÉUSx;Ôý \P‡“8 S»â¿ÉÐfyž‰E7p'ZcÛ@Å+†)Eø=¤ Rïì[‚ƒIØ÷Y"0PÅøÚXØ­•ð¬°!OŠ>ü á_ˆ§Åe€õÀD¦j0U…Iù§–jª~’æ–ˆ YdK%A¦Ùß%HãeÉ;¤ª:z롯zë¢kª«b¼ç)TçbD=…³±ð>ÓÀª&vv—'ÁPŠÙX~^1а¶ Äh•]'â·Ó(¢¥ÎÎB;öUf"¬8ŠmPáb×lV)Q%½¿v¢¿ ¢‚S{1žeQ ÀÀ BÛ¶ð÷‡{ÚìµkÂáÃy w÷ãÇË#Âÿü“þÇ)††*aa­)ººIIÅ;ÞãñÄ»w·?¿¡|ãÊ8räåŒþ::ª¡¡£Z¶d•¤ù†ðƒ`U|K ã³£,Vµ:¢›Ë#ÜO ç|ë_h<ŸpöŠš¶¶Ã±Çý_Wö®mxwC_åq×®„… #kÔP{ü¸g#E¹jééâN¢ÓÒÄýe¾v­<Ùýû"[[žPH{÷üök³R)&NÄùó¨]AA¬ÏÑè;9¹=göƒÍ+V9ŽäÀø…eˆKÃà5x•†z†Å××kµ‘sâ!渡XŒŽõpÖÍXb¼øÄcÑ Df€m#lˆ (+B2±à>B2 om¸(’r¨ !ƒ«8Ÿl <Í¡~2»ð¾RxϳÕH1%¬Æš\ªÀP†ª¨­s5ßÍÔÀ­4¶Kð¤È• WŠ41RÅeßËþ!WŠ 1ä(mµÐDôS=U•ñ^¬[M̬y QSéX·œüý¸L‚Á\Ζ˜ÙRž^1¶á߇I¡£†eݱÒš,c»°sOãT0LíŠý“ ÃN6ŠJ0fmÆçµ4Õá¶£Y^6¢0h>Þd McÜ`_pä f.€ƒÛ0c¢l±#FàúuÔ«‡  Ôc‘Åð䉸gÏ>Ÿ6nÔ[¹RžŸŸ_ေDäåÕÔÎN;J,¦Þ½ï?x;lX­+W:+q¨@ll¾¥å¥ÂBññã}~VþEç]|óB£?Ö@µc_Õ`±!`£sðžK¿×í}¡õôýZÎÔzƒç‹Õ—*å×fˆõî BCF5o^ßøèÑ¡—.¥wî\#0°»ºº„Ÿ_áÀ± CžžM‡ ‘÷+çΕL˜ËåâêU£!CXg‘ÆáÖ-4mŠ€˜±’'‘°ƒÜ|L‡#;XÃf‰°ö Ö‡ƒÍ °ügÙf9…ö7ÔTð(§a! +EøŒ?€ØLèibÿ$Lf ì fp4«}‘%—ƒÉØ2frõ\¥„ƒÑXŠœ¨r±  ´E£ªø¢çÃ5§RP$€Úš˜U¿5€é'ør*/E¬©"dK!)ó*eK)F¦Ù+¡8ªÎ‰*Úk#ªÙ)±‹*§ÌOVSµÔÞºÍLUaªŠ–š¨¥´`•”08— —„çKR³Kpô%6„#_u.Y`u'èÉí^é8ùÃÙÊ“Š¨¥†ã1«§¼Æ#“0a Š…`Ç¡‹vnðsØ/BvºZÀËÆì·òÉ ˜¾DØû沤¤aútœ8š5€, ÒÓ™.]²ß¼‘þü³Öñãò|EÉÉ¢N¢³²$kÖ˜;;+x°xq¤‹KBýúZáὌŒ”%%ÒnÝ.?y’3mZócÇú(¹WõG• Öë/Ї†?Öw|üß Á ?vðÎËJ¿ U5¶öÚš¯ªWK_cÛø¶Ó=fÊ¡…™^ÛDîE÷8+«šAA#R¥ äå‰;u HH,YÒxûöÖ í7nL_µ*ÅÐP%4´UãÆò¦ñ?þ(üç¾¾>çþ}“6mä„m¡o_„…¡];øû£ËS70ƒ'¡H€¥s°õOÖì*T’zwœ—¥²-…bÌÜ 7?˜Ú{çÊή*ëa æœÂé@ ÿAn 6Âå!„åž 'QV¹B8‡a_ºÔÄÃLØÖ†C+Œl(OdëýÄ8öû[ºªèaˆÞÆèi„Î5”U+ý3ȕ厪ü=] úêÁ¯x×ée¨Rîëz÷{-UÖzDŸ)!<<ÜãáM1Âò ¦:~­‡Ù ª 7 ,¢á 5¸\Xš`gw´–—Xž1Xr¯xЯv B;¹Ëˆ>ÔÖæ8뀶ìLƒ{¼°âJD°hßÑ„ÅØ+㇠Ã{á ‹†\)Î{bâoJ±} –Ìf5[¼..ÐׇŸ:±K¦Sß¾9ÁÁbu# Ök,Sß¾1AAüþýõoÜh*' ¡ÞޙÆ…¨ªrüý»wë¦èTÂܹÿýÕ´©þãÇ£õäóâo U&Xi_ æ?Öw|üG,–ªªVË ÞrD{œ¿æè@LÙ[ÿ‹)7ÌËâZÕT8âò`c]õ«ûÔÔPïÔébBBá’%í¶oïªü¯‰ Ùð¥PãÀT º_ý†“ž ‡ |²‘[VûLP$ÅoUQÌS‚ã18ø/ò@…ƒÁõðgGX+ ·zœ†%7áŸ-Œ±Îcå¾Î( ¿³öà| Lí‹ÿæA›…6ðÆÌuK0}®–]¡ÇÎbÖrôî†Þ]ñçbV³µkáì uuxyaKð;"Lžœçî^ܰ¡Jp°‰©©¼3>~ÒÞ½Yõ뫇…ÉK©)Å›7Å;ääˆvìh½x1‹>½,\¼˜0fÌÉ/= IDATm •FtìXõ¤ÜjŒ«ZàËKmUSbÃ‡ßø_wäTþóõ=¿ L*EÿnÛJkæ¥ÊR¢¥µ¾Q™¥»<|˜¡¦vÃq½~=©J?½m[àihx#!A±Ž_A¤eËç@è¬Y tü¦K—, µgÏì’yB™oÞPýúÐðá$–!Z†;¤Û”`Nƒ'_nOo“^O‚%Ù/¢"Yj¥gûE2up$Ø“ÚHÚtþµÆ•Jm ¤5\|äY–Â7:üGp&8Sç¨x—D–ÜSè·j{—¸^eÚ˜ð$U/ê@‹#É#²ª"³ùéxolið%t+“þ|A½ï“¦÷Û3OjæK¿>¡co(Q ™ÐÊÍ"‡{¤}¸ìÒ˜Ÿ$§`ŠWB2¥€nÝz€ÏWö‘€Ò>ÿç{&¥ø~=X©©‚:ut×#Gzÿò‹\ÇÅÿiá¡çÆ  ¥ª¨©ß›qôr¼èCËã3­~îñ6T{ëÖ§^^Iii‚  5åWf©"üôSè•+éÖÖ5z¨)RQŒˆ(îÚõ…@À>Üà×_å½ü¥¤H­­sTThèPͽ{ äxq¢¢Ð«rr0u*Žgõ÷„=Ã)ÈÌFçð>‰šìºƒ¢0t!²raÝ^.0aY|бâ(v{íqd!ŒÙ£ ŠÅXt`jWì›]¹ÑN ÁíVú öͱË”HT*]:‹" j`lc8¶E›*,€@¡Áyeþ›„•B k£‡lŒ0À¤j«cÕò´Ô‡×Û ªŸ'¹8ì‰D( ÕRz W Æîl¸‡BÔ¸˜Ûkû †Ü›Ry%6 a·'–…X‚.Íá¾YÐDX± ÛN‚ÃÁ¶EX2Y^–ý®PQÁ¾p˜Âjéá±cÁ08p3gÊ;¨C‡G BBÄÞÞFÊ»a^¼(éÒåEa¡ÔÕµƒƒb¯ÒŠÑ[·ÆÕ«§ÞÓØXÙ¬" à]T$nÜXïÔ)¹Zßrs…íÚ]HNž²sg„£#KÞ»àp8”ñù{©õ½{°¾_‚€Ãá®úúêÏžiÐ@n(òWGöËè3£ìJòrKÿäp¹7ã æƒëõKφG~}'êzûø¤LžÜÔÍÍVùÍÍwêðúµÀɩɦMìÉâå8uŠ7eJ‚¦&70°…¥¥¼ùùÉɨQ¹ GG;å­x…„ _?ðùpr¦M¬fñ‰< ± hÒ7N£iCV˯1h~™ÔûݨǾŽs%¿î¯uMpj)ktp)N<ļÓà Ñ¢Î: ½"Yö"1ö„`ý=ðEPWÁ+¬ë }%âÐ D8‡ýQx’S¶ÅÒ­0µ™RêYïA Åã|å"‡€äWVÒ€Qßêd ¯²^µB†!yeká`ÊïZèÂÆýk¢¯qÕ´ï+Pe%€™6¦5ÇìVJe!áB4–ßBb>Ø7‡Ë`4QD޳ù˜~ ÞŠk HÎÆäí¸WZ§ÜÛ~e] ‰1Ýî7¡®†k1~ k›"1~^€³W¡¡·=cÏjéë‹!C bóf¬X!ï .^,?>—apêT‰åÑ[>ŸéÒ%::ºdòd#7·Fò\¿ž9thˆŠ çîÝn=z(‚ ¸ºFÏ™`b¢9ÖÔô“ÓP«&MòuwÌ–H…±k¥àp8”ûù{Â1üA°¾ããçp8cÇÞ>>¾gO³»w‡qå'UE¦¥ºP’\±ÅöïÍ‹2[T»ª@·¦FA«ú¼çìIH(l×îŸ/öð8rdCå:88¯gÏ ‰„._î<|¸¢ ’ª”_õó Â+)!gg½5käÑÙ;w0t(„BlÙ‚åËYÍÒ31d ŸÃÌ×O¡»TjZ6ìñ4µkâÆnX4eµ|“I[.VÇŸ ÂNÃøƒˆH–¶ŒÁœ^PΗ\€u÷pè1‚‰6V÷Âü.ÊFs—Nö§_/€ê×óÛÀ¢ ÓÊ;¨™ä›SV^º¦èR6FèakCe !5¤–”qÄ ç£âö¹¢ÍòE8‡½‘xVu—U)&cÉM/€O6y¸—ƒÄâ·Û[ê"CsMª½ó©­ s·ÖÒPÀ•)ÖV,E®øOš©%ïlá‰ÀCT¾ü§£‚ež*#h~Zý§¸¬JñЇUåÉ uôðWoÌì¤@ @t–_„wúµDa ÎÌB#öűÊ+Úý;àä˜}à«8Û9ù°_„‡¨e„ë»Ñ‘="'ö?ãa˜â7–ØXØØ 3S¦àøqVÍ!!â~ýrø|š?_g÷nÉ[·f¬X‘\£†Jhh«&M<²$²µ}À³³3õöê€#n^½š8|xƒ+WUa7¹¨µSSçy<¡«kÏÙ³[ÿ Xÿs|®^M1âfÇŽÆ. hܸ*ùZ_OBC£Ö­J }Ë¥:ü<£×ºmmWûÄfðÙöj\S'êŸïúO†zõò É\¶¬Ý?ÿtQ¾ CöönÜÈœ6­îíc%&Š,-£%úóOó¥K8½ŽÌœ™ß Ê† z“&Éco{÷bþ|4oŽÍ›1r$«™P„© pÞ–í°Ê£X«J0þwx {;¬ž »îˆˆˆ°°°i|ç)¦lGz.ì¬àhÁri“O4æ¹#&Zj°³€³½‚CD8…•>x#- h‚l!·täûx”…ƒÑp+sh ­ #ÌmúŸc­ûUQ™A ”I?ÈG/cD”ñ°Úå_ÊIXmMä½zÞªMÛ ÂôöK R…ÈCˆ(Tª{}¡§Z&BÑÑàS…UðÅ8‹óñ¸—)ËÁÀºph…aõ{%ß6"º{¸û!)ÐU‡S,í®x7««¯à^,^¤ÃHF`fOy?›Š?Ýp6êªØ8 ‹GÈU,Ûñ)pÚ‰ ¾hZ7÷ 1û°ŒO„Óz\ðF³F¸éŽFì껉‰˜7ÞÞ6 —.±ªþˆˆ,\Xàç'œ6MëèÑò9¯oáܹ‰±±ÂË—› ®8DqãÆW6Ī…‡÷2©Êð™3qóç!2r¬™ÂFJCÎÃä«aÉ’;w><¸ž—×`.·ŠY„ùŸ¿?ƒë;>þŠDÖ%KìÙ9dHýË—Ùc¾<‰Øcú„?ŸŠ--GŒºçÐö[qËÏFÈßwÛx‹¥”Çyù2oܸ;Ïžåxy :T®`ù»ÈÊMŸþäÚµÌÅ‹ïØ¡XËǧ`îܤ¸8á™3ÇS@öîüýw!Çœ?o8r¤¼pßíÛñÏ?àóqõ*±¿j2 Vm“(àc÷zV-D)œvãÀ%”åI½—"3Ëã\ D¬õSä%´‹¥p½‡k¸ U.f÷ÂßÃa$ÏI%¸<„O<î$@S˺ãwhWea«P ÷W8‹'9(C•‹ ° -z›W¡ù2È!GŒrDȽóg¶9bd Ñ\òäµÓÁOä>ÄõTÁŒÕa¬Žšê0V‡±ZÙŸ¥_*6*SPI¼Èþ(AÖE皘ÙR©"Ü•qæ9–ÝBJ!š¡W}¬ësELW,ž»pöBžV ѳ)VQ0fÎÀa ø©V…•\Çç“Ø-@z&ÛaÇb˜²/%?ŽÀЩHÏÄäQØá SvçYj*zõB|<~ý»wC‹ý)6VÒ«WNN3gŽÎŽúrx€˜˜’nÝ^ŠD´vmí%KØåËqéRú˜1¡-Zè:Ô¾G*¼—$'YXœWUåîÛgóÿlqÐÛ;ÉÞþ†•UÍ«W™›kWY¦¡X±YUÁÑúA°¾ã㯂™™ÅÍ›ŸÍÏݸ1dÐ EáÊ_Ä0Þóf¼¸z©bKý½F»]Èsš9ÝâÉH¬ŒÚj±›™è¾ÿ&÷ï¿K–<07×~þ|¬‘Q ƒƒóz÷¾/2'Nt˜:Uñ9qqÉ\¼ø¦&×ϯy×® ˜Å_®[ÇWWç\¾lhg'¯W+V`ëVhiáúuôî-¯Í‡°x ˆà8.³f VH½pš†M äµI„]å)Z›á¬ÉõÐå °éþ½‘†ÚXcù}åEq•"§Ûp{z7„}3üÒÆUŒ» ÎÄîç8_¶vÖÎãcP]t4ùRŠïALÈ"Sˆt!²DÈ"­ò!: $¦ê0Õ€™F¥/0U/ûòqU«« "yðK…_*.¿. áêeŽymðSUÄ]ˆ\ys‘ek‚Öu°g¬«ŽÃ÷CD ôo—qh#w¯œŽa—'ŒêŽÃލ!÷&»†‘K‘ÏG_+\Þ}vcß@ü4…ègƒK‡¡ÏÎ,³²Ð§¢¢Ð¡|}aÈNl’“¥={æ¼~-í×OÃËËPSSÞäñ$ݺ½Œ‰)5ªÆùóMä‡xù’om˜Ÿ/ù÷ß6‹)„¯† ¹~ãÆ›Ï»8X 1çcbò+b]~¬j¯© QÝPùð7m \[·>'V(Póeà»fe…ÞÕÖÚú'‡ôñùD´ÀíɇÂW2? Üž|جTÊôî}p4éNU»´gOàÙ«WPTT¡2ö¿ý–„š™=MLT¬°´lY>ª­æï/ϘahölH_ŸB©8Ojõ æô³#‰Dò,÷_ •ÎÔfMXEùФv‚_¾:¨À˜ˆ^¤“Ý.‚ÁZ­¡›‘Šw!¢ $²>HmöœIc=G·ã”Ú±2Ò´)œêºQÇr-Ý#Ôß‹6…S@‰þ7C»º .Ÿ\£hª/Õq+;9¶ž¤yˆ¦úÒ“ì*·–VH›©þ¿gRYKÝÓ¡Ç$UB‡)‰GS” ¦«é\¨â]^–KµiŽ"—+ Œ†vºSÏKšð; åÞ¼H³!Áœ¦ÌWpËäå‘¥%daAÙrOWf¦´U«L µk׬ÂBgD$blm_¡;FñùŠha¡xìØPMMï‰+4~ûöE®&&ÇÓÒKý}[غõ)àÚ²åYQùM^¥ÉþÏG ÿqãÆ™˜˜èëë[[[{xx|ØU9&11qÔ¨Qzzzzzz£FJJJú\ÿý8ü Xe ¥Íš\÷îUn>ü¬Ú¾±2»:ؽCQV&½H+P›á¡$ÁRýõÒóäü/ÐÓ;¸ž;Wå{ÅŠh.׫M›»|¾D¡±D  „¶ný} úõéµÜ EEŒM6Ú¬YfzºbvµiSª¥õXÅv*÷©ëê^WÒ§^ GþĉUväWÌœé¸ÚÛ_¯¼±Ê‹>ÿç#Ö²e˘JwÔÓ§O›4i¢äqíØ±còäÉ•·Lž~æc! JÕ©Cqr]?B!3hPZ¿~Æë׊ÝK^^y**a\n¨‡G®Bc" ÉÕÐð}²KŸË‰‰òžËEEeëÆQ|¼‚fÓ2¨Ó@‚9™µ§Ç (+ÝzHµ,©Öº©ˆåÑøÍe~…©ÛI Ü“ µÿ»l–í»žUeŽK%OÒÙP6Á×ÞNkü(C©w~V¤”“­F§ßa$5“ýõoƒlUBÃwÁôs*"–\ŽsÙ™ïq˜ÎEV!”-‡OŽgHeÁŒ“‹I”Û÷„/éŽ!ØS‹Ùô4Aqz œG°$Ž9n%‘ÜeÇB> žD0'ݦtÃOAËEE4mikS­Zôâ…<ËŠ7¥ZµÒ_¼P¼ðùøq‘ŽÎc tË–t…ÆDÄã‰5ºx.X èfþÑѹZZ‡×K—ªºoõG©gnéÒ÷[ÿ?Ö… :uêô^WkÕª¥ªªjff6iÒ¤èJ+¦¦¦ééï §´´433³OÿïGãÁz³gß\û÷÷úÒ¿žõ|WËzìj{}ã¸;7Ÿ={¦pÇ­×c*Öü“2ÛÙpäÈ ÀµF£oÞTyrž7/ðlÐÀ';[)Bqæ à UQ óòRÌÉø|¦Gl µys+ ùù4cdnNOŸ*h¶ò\ró® ƒÊgûMõš¥ì,EDÇïÖ(‚=ut¤¹ƒ H:þ€j.%8êr8IYUYèÈ/!×Pj³·l²WÿØ@øñ*ŸEÓ”JÑßkj|È%‚NÇ’O2=Í¡”¢”WflË„@LI…šE×’èøKÚNS|ß÷T•’ª½‘ù9ÞŒR hS ÕÝQvªõ7’ƒ'EdT¡±”\ï‘É‚©Í%Ç3”§Üâ|åeÁ©Û©P‘Ãåv0™ $X’éº^Éó.ól§gVᭃǣ= þýÜkR)MœX¶Öÿü¹bv•š*ªWïúË/ ‰ˆahäÈG€gçÎÿÇÞuÆ5±¼ÝºôŽ((¢"н+*±7lˆ½ì½€½7¬ØÅÞ‘"UEš¢ Š€¢HGj(i$™÷CrÈ.àýß÷^Ï/v³3³³›ÍΙgžç<Á½ç¯¬LЫ×cÀeîÜ—´*ÒEïúàîÝ$ÀEW×µ  êk™.ÁªÛ|"Må³Ý±ú@Ñú\]^^^›6m‚‚~Z)=ztPP›ÍNMM=v옮®nTT”謬,ïçH Wn«ÏÑ:ãLCÕËÏÏç¶n}'?Ÿûô©áo:uá÷o·ÆX±r~”weØÑÓí'ÙQ‘¾û&mÊÙ7¢í1]ôÝúP?ïøñ~'jàë;œ–öqY80,,¬`äH=w÷TênÛ–±{w¦ªªthh›öí%¨ Ί*ëÔIöÅ M cµKK1a|}¡®Ž'O0 fõv¼2Ì^‰[!'‹kΘ2æ§£Uî¶@ˆ]±û"BôjÛ{Ñ¢ÖÈùwI˜rŸ3 ÒÎ 1spÚ•QÀ‚“΂/„¦¶ $åP!)pÇãxð…ÐV »cnü¢ÑQ|-BHB³á“Š”0UGüÏW ÒÐGEè+BC^ü©¼ÛT ê¿t¦Úg›+@\p‘ÉB«ší,ªüK+"‹môÖE¿Æ°4@Wí†IžØ ÷öEVÜK0 1ʼnÉ$Êñ:s— EyœZ„Ù–µæ °ûv]„Pˆ!=q}'ô+éWýz·©§ï™ ÄÄ ysøú¢MÍúï„`Ñ"æùó,UUƳgZÝ»Kqc³…&¾ySÚ¿¿r@€‰œœäßM”[BCC62² š9Éwï~·m[„Rl¬­ú¯eÃáïWrg³ùíÚÝON.>~Àüù¦UŽÒ•ià">¡ÀàÖ™`dggOš4ÉÉÉiРAµ;{öì“'O|||ÈÉÉ•––ÊÊV +ïÁ÷#t1„óô«9CbµÈ(Æõ÷8õiE *)í±¼'ÚK–i¤Š„B¼ÌDZ)>3‘ÍF¹ärÄä£v(É@[zŠÐQ€¶´ ÓÅfLc‰å+#&&¯gÏÇeeBoïÿ™ÀáïÃÎï#:wÖŠˆÿkRçÿ×+==}ĈGŽ2dHí%³³³[¶lYRR@OOïýû÷zzZ…YYY]ºtÉÌ̬çѺ£ž°ÿרéòy}ܪùR$Ñî1BFz“AÄ1‚%÷’Hp&ùOÒK¯+XCù·ý*Á@1b´”Cœn¥‰#‰ü8²ó6)åH¨òðÑDÐ4AB(øP×.!„¼}Ktt@zõ’ wEqt,2ää2½¼$ušBÈúõi@„¦ftB%góìlNÓ¦þ€Ç¦M’‚‡'èÖí!à²lñºÿoHK+QRº¸VÏLkpÀ!ò þ©ÁHOOïСóg”â=333•””DÛœÜÿY¨åç÷ôü.rWÊÉiȨ“26ëö¸a•Ù•—êqÞ/ÊÌy$"XŒÙY\zz0„[[Àeð`šg&„M›>zz~”^©™™¼fÍÞ“''Q9ÝçÏeúúY@Ƙ1ùe’Ü9öï'Ȇ ’[¾ïAUS‘ü–%×› éjGkÓÍ „RÙ_ì˜,7–8¸HªWä’íî¤ÑR‚Dy9Ùû”ª³NÄd‘…‘nGÉR/òèS}}áëŒbIb’WÙÄã;¹’@ÅSÈ®HrþqûFB2I|ùÅoäo«Œ&“/‰ÍÍŠMëëäI<‘$-R 8eäZ1Ü &Êö—I:¥¨8"’{ÁÄhŽØãjäÉÚl.q8DР·–äSˆd¤®¾K  ** #G‰@'N”ÒÒwïRzI^¹’ DÈÊFQ)/‡} xXX„••Ñþa6o~¸ß..¦Fuë¡ði¿†ë…iÓž.“&ù×T€.Á*!J þ©ÁÊÎÎîСƒ——Åò'Nœ°²²m9räW©…ãÇ×ÿhñ‡`Õ‘®ÁâÅ &'äóÝæÙUfWfNüL"(ªÕ®~ZnÄúœMÛ•“ÃÖÓs­›ªjù[oР0‰JW"ÄİTT¢ÔÕ£öí«U£ð/¼_¦©™dLŸ^ ÑÚtå ‘‘!YºT²iêY0Q5!Ð'Cl ³HòÝŽˆ#­Æt#*ýÉu ù´\²à‘E0’hM%ÇŸPKýKÝÛü QXJl]ˆ¥ŠUP®ÕÔ나:À‰Ÿ öˆKùP'%­†ÂÿP‰‘RÌ%þIÄñ±t% »Åwfˆk½4Æ>g“ ‰î¢³š(-']wS•` „¼Ž'}׉©U·•ä%…ظ¸¯¤ã‚nD¡9~KBaÑÝ>~0šˆ ·§77oYY3$S±«WY Fƒ‘qñ"%1F__f×®Ÿ€ˆK—r¨”'„lÙ/šË¥§ÓžåFFæÈÊ^’:ÿò%ÁºúA θ®4ÿQæºuCXXƒá¢ pñÛ·©*]‚UHÔüS‚Õ¥K—Û·o×ttðàÁ÷ïßÏÌÌäñx_¿~ݳg¶¶vd¤X£±¨¨¨E‹{öì) ­Öÿhñ‡`Õˆ¸¸YÙ ÒÒçcbè¯Üü ¡ÐgõÒÊìê΄áeœ:šÇúî,'XÏãê28¸¹}\/%&RR^¨Œ¬,N“&þ€ÇÖ­µ†nW‚·wa›6±…!áá<•L cÉÉÝss#€ŒOØ’îèû8Ò´ >é>ŒdSxÕ•»­b›ý6RLa4y›Húom“§r¡ˆü™Œ:%VÌÂÒi'9ý¢.-¡De§@2äZÅâ—ècx”Ø=$ç"ÈÇt-§ÿÿYLî$Þ¤ó9"½£â&Hï Ïoâý…¶J>!„Ç'÷"ˆå±Š_ªË.âùžª^kJ±?B£F’&3ˆ‹7%~Í“(õ#èFL'h Ú,B!Y»“@ŸHÓW$—?y’HI€88H~0>dKKgGRÂÃK”•ßÉËGäÛ·ocÇŽ¥»;vlòϸõ9Z7üKVddäâÅ‹EAÔkI,¼|y¨h)­~½#„À[+³«+ƒû° ©-$T‡ÉgÂË ÖµIËW5ÀÎîàÒ·¯ECTeæÊÈxJIy>}JÕáÈÕ5—Áˆ’Џs‡R$ýóç\…L cåJÉ !DMdð`”TüË7Òª>11'¨éˆ•omÆ“(jUÜÉñ<1ͲÜJ>Pþ•Êí"¢Á»>-B_H"2Èñ×ÄöÑ>øÙRÝG,]Éþüü]sïߎô"rï#qð&Ý\*üÒàDdv’n.ÄÁ›ÜûHòê´KI+ û}Ä«uøiŠÙÄñ&QO0’(N ®’" =a–©›+(~ …*%¥d¦>Q0"$yi …ÄÑ‘„Á JnÜ×—#/Ÿ dìÛGÉvž˜È)ÛÙ}•hc!%…¥­í xìÝK[´²jUàÒ¶í]6û÷>ÖIÏ|ûvU²¿ú×ÛøÁÆvfžËçýÖ“^¹’¸4mz£¤¤¶ÉÁÿS‚õ/ÿ$ŠÐÌÌÌÖÖÖÖÖ¶}ûöÔ¯HbœEA×Äänn.ÇÍÍjÌ£:wïÝe—çÛÖ—ïª57šææ«¤K/"¦2ÖÝ=ìóY´½{|»-£ªÆèRAa!¯C‡ûii¥GöYµªÝêû÷Ù´)^CCöÝ»þFF”b§ÈÚ¸1]V–áîÞjØ0U‰åýü¸£Gp¹dï^•M›”k/üᆠCz:ºw‡—tk ¦Ë+À¨•ÅÛhœØ…ùv’;ŸŒ)›“9ì_‡)’Ex|œ} Ç[`–BV³-±{:t¨…róøxƒóÁx/–ìk«™}0¿4•(µP-¾ à+BRœ‚äJâ J²èÜýšÁÒæÍÐHrt×?¿û¢„Ïãq>¢ €icÌêKã·ÜxõW]Íqh6šSˆ÷ŒˆÃ”ÍHJƒŠ"În‚ä*q‰˜¼l„B\=޽k+,`Éœ?¸¸`Î ¿xÁ><ŸÃ!›7+ïÙ£"±3ééeææñß¿óFŽT{ü¸¥ŒŒä¸Ï²22hЫÐÐüáÃu=._jl¬g+//]‡.Å=¼ûtÅBüu"E-í©n¾Æÿ¯ÏýâÞÍc~ÿ&«£×¬K·v§¶ª¥Mgÿ¤·bDÛ ¶87³K:Àß?ÍÚú©œœtdäx33 Zu ÁøñnnY={ª÷•“£¤g±n]ÚáÃÙŠŠRþþ­ûö•À™àr1zÆ¿`]³&ãÔ(Ib‰68ÃùŒˆKÛ¡)™%"¯;oã´Bh(cì 9ʃý—¸‚+aøQ ²Õ úò-ÕjBF1BS’‚мˬК’‘B'=˜7C¿fÒš$̨"$$¤_¿~ Ò”€ :KÜóÉÈeUR•GϦ°4†¹!z6…\]þ²È(Äõpœ DJ>ÈË`t'Ú7? k.á}2ôjƒcóЇ„ˆ8ßÁzgðÊЭ-îìE+ ª|§¯`íNp¸0nÆò»£ØÒ¨¶Â\.¦OǃPR½{>\BãááeC‡æ“%KOŸ–?JÚÍ*ARJxå U1 9ú7Gÿfh«MIîUbD&«ÇQbѯ6z˜m޹æÐ–<)¨@B:¶ÝÀýh¦ƒ]Óa?ˆR÷r 0Ë OCÁ``ùdZ9 ú`aázÜuû‰8wе2ãÂBŒà`hhÀÓ}%½Bbcùæåç íí]½ª^»ìKheõ94´¤}ûF/_šhjRšR—+xýzlÏžìŸÖ?–äÂÏž¥[Zz©¨È&$LÖ×§¡#œùîí½É£ËXâùµ´¬Üx×{ÍTèҺ͵ûâãYSõÖ6£Æ\¼Qí¡ˆä‚;^ˆ¶;¨¾ßU«f­(*âuèð %¥dïÞž›6Q# •SÔ§O(›-¸q£‹]S*U2iÒ×G äBBÚ4o.y’zòd©ƒC‘´4nÝÒ˜4I'+)Á„ ðóƒº:ÜÝÑ¿¿„Æã¿`òB¼ÿyìß‚ó$_BJ¦mAh U™ÇrDcå|L€!pt:QªXŽßgÐ*G ¯Ó’"¶o5SEb~måd ¡FÐP@諈w›¨@_Yü½ž2DRˆl> Ø(à €ÌdW³›Ã’ eÚV\Ì Ñ¯Ì›Á¬á‚2™p}s/‘œT2Y 1¥ÇÛò‹±ã6Î<_e¬‡¡@Íó"Ó·!#Úê¸âˆ‘’`o¢0u ¾~‡ª \VÍXð+²²`cƒèh4itä ðå ¿ÿ¼¬,áØ± ÷ïkÈH"Keed̘$oo¦¡¡\hhCCJWþåKi÷îÁL&ÿäÉöË–Q©RéVV^rrÒoߎëÐA“nuê8efÄ),ðm5.Àxtµ†&=±Jr“–WXõµ!X¢<3gš\½:Pbá?럀?‹RáÑ£}=<¾ïØÑmûvªfçÜøwÆç0Å.! iéÑ.×ZÛT¬Ö'ù{?ž5¥öFÆ]½Órh5nÙEÜÆ+¼DÛꊲ§GýZ†:D/¦ÆÝÝ­»w§=X9“¼té¥Gº›™IvË@¥Ùí˜1ê/6§"è¼sg‰£cqÓ¦Ò/ª &At˜Ë…½=î߇±1ŽÅIã ›ƒÛpá& ,Ÿƒë &ií¯Œ-gpø:Á‚qرkUÇ®\ñ´vÞAA Ô•0k¶N¥ÛVnÑ8Œç bƒÖ”Üv½ Ø é@8|$"«?J‘ÃB. yY•rþ2)ñ’Û‘•ÂÀM‹‚t;bۘ裣Ÿw[kBµAu§…~q¸¯X”r  ÀÌ>Тi ,ãã”î!<2ÒX`vЦ°”,ª{àß³]qs7šJòÓ qÄÏ 7½»áöIZILHÀÊ•ðñ¡$Ô 9Y0wnáóçeZY}.,Ôt'Ë[ؾ]yëVeBxãÆ<{ÆýµñÊÛsË–Ø•+Á``¬]›TíU0™LQ­F 8N+¬,à| ]­ZRûUÈÊà žž@/Ó‚›>´'nãePhíW@VCŒc#-….-qÜÆsù§<ÁT=Q-w2áS¬ukfÀ*$ìÄzk4Sc?ŽÂ‚Ð_‡1‡³>eJn¡–ç¡ò6·”Y–;Г̰´†H‡8ÛàÖÌÀ 󨏹LîV°¶ }5\{¿ó·Çµ±8> ³[¤8ô‚m;˜ÂTK¨£ÀÈ¢ŒU9)¡¾2ÚéÀÜúų:ð-p|®ÅþNq ¾¼mxÔ'$n)‚fãÑdìÏœ¬»²7¦wİV`'…”³+ŠWQË}‹ˆ;áÇn¿6θÖêÌ)=ðb >í@O…rvEñNúD¢õ<öê‹(å¦+®Ì~wz±˜]Il!0ÝíqÓÍuŠœàÙ94Õ•p?rac‡õ» ¯ÃZ9ôHÌ®BBBÊ»T¥…7’ÌÍ [[:ôºœ]Õt'ÓÒææéááeÓ§7zôHƒÍ.ªý*Á‚)ÇŽe÷ê%ôön-bW €L›åé™=q¢Î¥K~m¼öø|áäÉÑÑy'ê-X`Tm-ŠÏCíOŸÃöß°À=³y5±+BH¹v^ìÃöí‘**²Ó§k–³«òœœœ~ÄhìBH5ø‡nþ}øïZ°RSÙÍš)üêÙ³ZÃlþ‚È<»cG÷íÛ»Ö^’•—{{¬uÁ×/åßôÛ°½·Ãš*ÅÎv1)ý!Á€¬¤ÛxqTBµ‡ZmðMúQ*Úþ¸Ç²]jsäPV&´´ô ÊìÛWïÅ‹QtÝ8áàÁ¯^½*èÞ]-0°¯’%¯œ?ø&|úÄéÕKÉß¿µŠŠ„Z„`Ù2æ… ¬ž=åV¯V?^²ÿÖ‰Xµ „ÀÁÇW]å‰íðóêHr*¦.ÁëHÈÈ`Ë l_%yí/3‡\qì´o‰k1¸‡Ä~‰‘˜ŽUñ4L pl†ÕÉ1—Çǃw8õ¯¾€Ví`ÛÃÚ¡‰z]lpðˆŒùرƒ™’$_¢¿¹%L„ïGܧ Œ´° ?æöƒ.Mk¢_2±ÙUìneÒGçbåÇ 9ëNàÁ3°êƒ-³1@Â;^¾Â´%ÈȆ¶&\aósJÒ_Ÿm˜2,FÂ;P”dùöM`k[Àd µ´¤üü´TU%Ø®Á²e)gÎä(*Jy{·0€ªÃšÈ±]KK.,ÌÜÄ„¶S¡ƒCØÉ“7V|ûvœACø$Ö‘SG¾‚öþþ‰¤5cÇÀNßR伟?3MMïÉËK§¦NÓÒ’üÞ»r%uΜfoÞôèAéÿÏ`0’Iózw³*Œßÿeƒ.þ»SIIÀóç¹·n¥S)ïàÐÀ¹sq<^mî!¼’’‡Ó'TfW]ç-þ•]àH<)§ Fç Ö´|¶Ä¦j‡¬¬Ô½{–JaaÙ‹Ó­®  åîÞ£U+¥ˆæÌ™ÑB!¥?•®®Œ¿¿‰±±|xxé°a_JJ$äf0pê”Ú¶m*¡¡¼É“ ®]“|Õ+VàêUÈÊÂÙ³f¡ìçõ©_G #C>„Ã\Øqcg#_’__GWÃÿ Ú¶À‡$ YŒQ«ð-Cb×À¤)¼á¶-õŸ'Ì:†7‰”êV†œ ¦õDؼۊý¡ ‹o¹˜{ M7 å̸‚óÁâ8¸ÿä¤Ñ§ëÿ˜]•pð ¡û^è­…­ ’rÀãò-î-ÀçÝØdSv•”‰-®0[‚û!PSÂÑyøpŠ*»bqàtílñàà¸OŽHfW„àÀi ™„ŒlXôA̳ªì Õ=ÛW¯büx°X˜5 IfW‘‘e½{çFF–µk'ãã£)‘]Ø´)ýÌ™99ÆÃ‡-©³«óçSœ¿ÉÉIݿ߭ìÊÕ5ñäÉrrâ7ÝêÔ‘äï-r™uí¼L"»àÒccCÚÙùƒPHìí[SaWùùe6|”Ä’Xø~+þ»,QaÀCOO>>~ ººäwçÎcbòj ð¸ímSB^–ÓvœípçóŒêÌ g:µbåæÔ~ÆZ,Xöç#n¼Jm_œÝuî#‰ý—ˆ¨¨Ü~ýÜY,þÙ³ý-¢P÷3âãKúö -(([¿¾åT®SRx ÉɶŸCQ)äd±hv/ µ ˆ2>Î<Åö›hkˆðtm‰…Ã`7J’_§Õ ¿~q¸ŽàÏ(âT|ßVM0Ð&Ы—Åóÿ Š8JD`"^$ :åÌ_Q}[bBWX·C‹: žÇà¼/…AA* Ú‡æ@²ÉÐ#Ëá{& L‚Ã+ÑŒ‚4Þ\Ø/‡ßK0X¿{6Bš‚½øÀlÜ6`ÿ~ÉåycÆäKKùG4TT$ó‰íÛ3víʱ«‘#©©½ÞÞ?F~+k×:ÛÛKrû¯^eäÉå .\0o^]ä©Ãmδ/¾^ImÎQfN¯·êÕ‚v,d—Ü,*âÅÄLìØQ²óþ‚ï/\HF …Tx 0ŒDÒºžýü&ŒÏÿ2‚Aÿu‚eaöòeE•‹ãçÏêÖM;"bü¯G‰Pè¹xv‚§[ù7-YŽ»zGJ¦*u㇟9öæôq"àÜÊzÄØË·ª=´ùÁÇ}^bîå8¦­Ó؆‰"»qã³½ý YY)?¿áÒÊ Ê·²zÍå OŸn¿d‰ÅZ_¾p HÈÌ,³¶V}ò¤•¼¼ä·ÂéÓ,¦P¥cÇT%.ä½áÑžŽŽñô)šRˆwLIÇ´%}Kc¹@f.œÎ㢄B4ÕÅÞ¥°N5-·Gã‚/òŠ@C³†`‘ L(EgVÑ©ù‚Ð$øBa¥ ­±6,Û¼·A}‡€X<„%‰¯:è3xbEÈH¡“!,MaÙýZA¡®æ´&.ûãœ7’@#9L€M¶hMùï•€‡]Mqb-U±ç!˜¾™ÙÐÕ†«3¬J®"`Ù2œ;iiœ:…E‹$WqsãLZÈá;»FW®¨ËR¸QGf¯Y“&-͸u«Å¤ITŸ§¨(怯JJø;w¶Ù¶öŸ™ÉêÑãqzzéŠí¯»T ð9ìSfF|g—ű"yª$Z[Y.çäÈzžúøñØU«^ Ò4 `„ÄÂoßöî*#ÃàñFÐ ãI›úu³˜2þeƒ.þ%‹QÝ&ñÒ FllQ×®A^½2ïÙSÂ߆Ë4kvëÇö«Wc{÷®Þ°iu´ë¥ò]ý®=&Ýu—ýÙ/(ãŸ^~uü ;?¯ös‰0îÊí–VÕËÿ}ñu‰k´h{N£Ks(xmPÃÚµ¯y¯¥¥ðæÍXccÚ†Ž«WSgÏŽ‘–f¸¹u9’jèoBÇÂ"1;»lÜ8õ{÷Œ©(>?~Ì™6­Ã!Ó§7º|Yò0ðíll€-àí6m$K_òùØ}»ŽA(Ä~¸q )¨ox‡‡ñê=ô4ƒó:ôjO©"nÜÃqÞâŸæm±b4Æö†l=Ö+“-¿80+­¯ŠÈ–e[ jCOç‰PhôW°Ëù¡Iø„àÏàVGªÌ[¡QýÖ(#¿à¼/®?›-õ1ß s­¨ Ècb眾ZjØ6Ë&Cšq°ë¸øQdŽ›§ _ëKt·9ØÛãÁÈËãÆ Lœ(ùDgϲ–-£1upòä‡T))¸º¶°³£ª‘ÁéÝ;45•=eJ“[·ºÒU/ãpoÞü2¤©ŒÌïuwy_…6âÖf:­ŠÎv—[Ö*y\+©éÝÄDæ“'Ö£GKp“H!QQÌ­[[ïÞmú‡`ýÏñ/!XuƒÈܵfMÜÑ£_»wW ï'1-ÃæÍoö틞6­ÕÍ›?y=„Ùv´Âò®eb:å‘w#JïB<Ý‚÷í(üþb÷Ô›·˜]ÓQÏ Þ-¼ IDAT˜¬QÇÃDÛCÍtýÖ6ØÐ%’Q£|Ÿ>MéÔI+4tŒÈY¶nMس糊ŠLHHߎ©>11ìÁƒóóù¶¶·o·––üÆ}ñ‚7v,…Œü|ŒÐPhjÂÝææ”: ûåÈú]m\? + JµÁõ§XÙù’‚Ý0^ ]:ê<ï’à⃛(倾&f ÆÒ0¬wN Ù ˆGÈ%þ´ŒXN¶›ÒV(ø›Á"&ñø„/b_uÒRèló–è× Ví Vo%z÷Bpü ¢þŠ!Ü ¬1¾/%n$‚hÙÑÌÈÊ`ñDì\5jt6-Ó– 8ÒÒØº’ª15?cÆ $pwrKwñÀ•+ysç&8w®ù‚TÍâbþ€aÑÑEhúùõ–—§MæÍ ºt)ÞÈHåÍ›q::uZJ§ ‘4ƒ€!sØ|w®bÄV‹•³6l‹¼‚ÌòØo5iDÓ…‡Ç÷Ñ£}ŒT¾|™"ñ•xâÄ·•+?6oÞèãÇÊÊ2Öÿ).æ·k˜–Æ9w®ÃÂ…¦éé¥-ZÜðõëÔr‡Êh×K›V——QnÜdÚ?Uƒ Y‘ŒÈ7/woOóªJkʺ•ôô²ccjè&¸>h1xhµcR™·?m›ê«|Ú[}±º¡ €Û«—ÛçÏÌñã[Í›ÃǦ’Ü“,_Î<{–%-³gÕæÏ§äh¯S’¿w•F䔕{.YÙmþRYEůÏýâÜÉMøÄüþMÕ°yQzZYi‰¨˜Š~“YÏ_Ë«Vã1š_ÊÓZ&VW”“.u‘$¦I …½z¹1™¼º)¼óxBkëðÀÀ¼®]Õ‚‚¨ 7 +±¶þ\R"\¶L÷äIJÚw_¿ ¬­ó¿|á·m+ãë«ih(á\|>/ÆÅ‹00ÀòåX·ŽS­Ñì>ûâæi4¡,}ü9«ŽÂ+Ú4DZ5°¡ï1g¸½FLšbŽ%æ[C³N²Õ¢²M(ô‹˜¾´mŒOYedÑD újÐP‚†"4ÑDújÛê42-ŠÀ.C&…(`¡€…‚Rd2‘Á¬ØN/¬Xõ ¡ˆPÉÞ6Ä´aR‰ r`?ᯱŽk·VX` ûÁhDSÇõK*6ŸÆýhÝ GWQRf¡ò µeÜ8=jæåKì܉çÏÑ©ž>EIÎa<™1ƒy÷.[^žqó¦ú„ ”øé£G…“'åóÉþýM7l ‘º~ùò§N%kiɽzeÞº5íŸ- ÝÆÆ[ Þ¹c9ie¢Z'”g3cÉ*èw€%+¡·ªrH:2R[¹aÔ~ãâ Ú·¿¯¤$›–f§¦&¡Í©Sßݹ“1~|ㇻƒ¾;r4¡N":3bþËVùåñæéÓ³g^¾,á9 Íê×Ï]GG!%Å.ûMУ“eâ¼h²ŠŠ“îyèwé $;3ôð¾woTñd—’‘í4}VŸUµ«yYÆÆÆjqY·ÇÛ”×j7qÊð.ÕöDe‘{É_ÃNþ©Q ïáñ}Ü8¿õ7l衟?—Ž¡ûäI*K~"•ÄáW­Ò;z”Òy³²„66ùÑÑeMšHûøhvè y„ß·—.q“’ämlpõ*t©Ù$^„Ân2³¡£…k'ª ¯o°â0â¾ÀÈþ8±Æô½×³ píÎÞgà@ IOzö|üömÎ…]º¥®KÊJÅjŸÒ²rã®Þ18„WRòæÌñÈó§ÊØ? 51&ÃG÷ßä¨Ñ¢eM-3™L55µà}Ná§Ž•9úüu“Õ$½j»Ù?>³X´½sH'Cª¡ÑÔqøðûuë^ëê6ŠŠš@%?C$%±úô ÉÉá­^m|ä Ý_ߢ1c¾p¹ÄÉ©‰£#¥×wa¡pôè‚à`ž††”§§Fß¾’Ç 7·ÒÅ‹•²² « WWX[Sê[Nf8Àç…8¯Îáí f%B}¤*CHàõÎxó“‰eú (6h™_QÅÚô«å)­°"p¯2º "R«7.*ÈVc +ßÖP„¡&T¯›ØÝõ98<hÝs‡ÖÑ@(r¿ÛàŒ¬<0˜nƒC+¡Gg!ËݳWŠUBnŸ…95U­ìlØÛÃß .ä9;ËI|2³³…Çç¿{WÖ¸±”··fçΔå:LDðòú1fÌ[¡\¿N5uieðùÂAƒ½ðÁŽ’ãþ} É\#;3fÀÏ –/ÇáÔØ!p¾„u»PV†ž]pç,Z4£ÒA1*K94ÑÁ¾e4¤ªàs.ùW8 ©+aÆ`¬ ã†h €…ÅF¯ì"äC[™L± JGº™¸t”i¸Š78ŠÙ¸ýgž"æð—»Ã(ŒìQÇ_$"öhçuèMǹ…ÏÇÖ8x„`´®‡&5MØÛ#;›Æl!9Y`mŸ˜È76–öõÕlÕŠÒÊnhh‰µõçÒRáòåºÎÎ4ؽ{Ç0 ¬´T°géæÍu ¬Û¸ñÍÑJQQ´µ3ãþKøª|×ÓdÒK#qfX!KÞî5*¬”®ER§n8x0fÆpçO«IG[»v}Þ¾=¡ÊÈE—`½&´þh¢7ãÍ™`àÁª|ù\®°S§ „„’C‡Ú®][£‘ @AjÚ±ÞýUQ¡=xçåÆúÁûv|KªRX«u›þ›[YK–0©ŒœOoØ ,_|li5|Ü•ÛUÊ̽üîrp²hû̌΋ýw„?Ø]º<ÌÈ`•»ÑÅõëi3gFËÈ0<æZX$df– ¦êæF)™•<žpôè·¾¾9-[*†„˜7n\—Œ-[ÞîÝÕ´©RtôßázUîÛ.B®¢ÞѾ;ˤÄK·Œ°).”ÕïÖÃÎ= a;ðáC~‡TTdÓÒìTUk|LY,™ÙËädVµ Žt V ¡& L/ÿËVµ—äÈ×Më¢çœ7T•­Íûä´OÛ”všäZPEÅtÓÞn󗊶?e·Ûâ/Ú6ÖQJ:H- ®®¨¿3›-°¶Îo×N%8¸¯¦&¹¬“SÆŽ™²²Œ‡[ŽE5^òÙ3î¸qÅÅdÔ(…»wÕ5¢40¼{‡)Sðù35¾}X±‚j'SÒ±õn<!hÚÛWcîTª’¤"|ú†kž¸ðùE ª„)ÖX<Mh4R2òÅÌ#ô¢’*V ¥¥Ð¦©˜l êØJñ3ÊøxŸŒ€hñ¥”TÒSGÖbFÕˤŒv™¹põ¹‡HÎ9YŒ±À‚ñBÓ)>ò=ÖìÀËW`Ú ;×Ñðá‹‹ÃäÉøð Ø¿ŸÆóyà@ɦMÅ„`Ãåýû©†G¦¤ð HøþF:v„B2ujÔ½{ººòÁÁ}MLêÂâŸ?ϰ²òàç7bð`ÚÙQë€Ê¾íŒ Ý×}ÖÓ^Ų’u¡[”yEå…ÖõJ„9s^^¹’°jU‡£GûÔRlýúO‡%Õ”ƒäÁú'àÁªæòù|²ÆÄÆKƒ]5íÑÛbÛ®&Ý>„<˜>!9P,Ú.£ÐÈÞç¥HÈ´„ËWYä.ú^^FŠ}~lƒH{ׂ—/3‡ ñ$ÞÞ6ª“É·°‹‰)êÕKýÙ³>ÔHlÚ”¾–œÃÍ­¥ UŽõömÙˆù99ÂÞ½e==5µ´( ÅÅX²7nÀĉ¸pêT¼"üV9âU$tëˆ#ް¨í=Y 8û­(f#L1ŒE¦ˆ¯!xTQ&M # ]uè¨AOzêÐQƒ®k@G :ª5®Êå0‘S„&² ð£9E:ªx+VO¨-ôš‹N-Ä–6ËÎÐhhIwBðü-nùÂÕ|´2Äüq˜5’¶ÉJÔÚ‡¸r/ÂÀ`Àvöo¦§GG@]çÏÃÖ–jÅâb²vmÑùó,55†››æÀTŸ˜ØXö‚)¯_—Œ¡vãF uuìêòåÔ… ß‚º[Ç ?ÕhÒD1*j‚®nƒe÷« åYqÊ¿qí´4VOì !'à­ Û¢ÉûôÉ«k,ÿ˜Üà}(+vìø0>¾Àß„¥eB¬îîÙãÆEèêÊÅÇRS«þF—`ù†÷0Æðý/ ü!XÕ^~eqMUR^•(«¤tæÌÇbºw×~øÐê÷tS …3<ÝDÛR2²ÓÜýwê2âXØÓ÷b×åGËzëöwø(üøÁ^¼8äÉ“d;»ÖW¯¬›éîõë'§D_ßœ¥KNžlO‹cmÙ’áãÃŒ‰a9b¸r%U¡§ü|áܹÌà`OOÍÞ½©z€q8X»ïÞáÕ+ŒK—h,ÈÈÆÖýøš‚—¯ÐX;ÖbÞ4JiO~E|2®zà–/ ‹Q\ uÌUÓè…­Q!ˆO÷l|ÿ!¶‰íI…â 6­›àsFm”[¼ŒõY€Ì|1¯â j¬2 =‚>@Væg›™*´U¡¥ mU˜ÂÔò œJŒnùàÔ=Ä~€Î&0ÐÊ©u1Y‰ð.[úmZBC GœÐ—Ž#!8x[·BWíÚáÂQ­›•%1"?:ºÌÊJ~ß>ŠBí^¾,;6IAÑ¿¿ÊåËFÊÊ4ž×Ë—SçÍ‹éÕKcþüfsæÐP"ý¹‘„¹s_ÔÄѱ›…T]u"yÌH§\á³&HËÊ­JΟÏ3'ðÉ“ï—/[̞ݠ+7?ƒŸwuHŸræ§Õº½oв;Ÿ\¿‰¾91­“ÃÐz÷ÓÁ»w¹%%eŽŽÝœœªÑ³ ‚gÏrGŽ|ÃáW¬hqüxmÑÈ¿ÂÙùǪU©B!t3¤ÈW82}záÇÆõëê'ÒˆHzò³g£ ÍšáΟBâ© ê¶"ä tïçÝèSÇÛ6wüpú>"?€´F[`©-וÔ¥ä#«?˜Èa"»Ù…ÈaâG!² ‘ÃDqt 0CÐÇŠºš*UÍ]•7tÔþ ßqú®y¢¨šêbáxÌ‹ÆuõúÏ+ÀΣ8}ôõà´†6·ÎÍÅÌ™xúTœiàÐ!ÈQ¶Y&% llò?æKûøh¶nMÕjëæV8mÚ76[8nœú­[-¨{µxð sÊ”w©œ¶….^¼È6ì)'<}ºß’% 3TDn!„Á¸ßnöĸ«|X0}z2‡#œ>]óòe£Ú³•C À²eÌsçXÒÒ8tHnÕ*ê|))˜2¯^AF»wcýzÚ„ÆÃË6#% ¦OÀ¡mУ¡l_‘Ÿpþ1®{Í€ÖÍ0w ŒƒF}Ó 5Û«r˜(,*•WPÒ×´äþ^®Z r`?q^!%vl ‡)˜j]÷¨C>§¯Âñ0˜E•Åâصª4Ó¾|‰iÓ‘mm\½ŠtäŠ_¼(˜<™—“#ìÑCÖÓ“ªP;€Ó§sR„B,[¦{âÕ©‹gMšÉç“:'ÃðáC~ÿc‹ý) IDATþî……¼Í›»ìÙC- c½!r ¹´Û~¼’¢fn vú–&ü•¯w4.®X&¯Ö·½öW7Œï÷øqòС¾¾Ãkz±ÄÌìeBB‰«kg{ûêÍW\.éØ1.1±ý‘#Y«WSR b0ÞdX{^l>ÿY‚!ÂWɽU+yB!–.M~zô»JþWëw©°?L›ÖjÒ$ã¢"Þœ9õ|œRRRj9ÚÒrX‡i3Ëwß]:«”_ñ·JÌ­®Òï‚áÙ³ýÁ‚AþþuQx`e¥sçNWYYÆ‘#_wïþL«î„ ^^­TU¥oÜÈ·±ù\TTóšS%HKãìYµíÛ•=Ê^µŠÉåRýÍš5CP6l€@€1v,òi ¯ŠOAp\y9\€–}àt\ ÖÒÑ­-\6#Ùû—£¹>>§`ãI4‰…{ÅË[ÿs0ÐUƒY3 쀖ª_mº¡³1šjýSس'n£ÕX ]Ï`ÈËÂ~8¢o!â:fŒ¨;»z‚.VX¹Ì"XöG´?Nì¢Ç®Á20ÑÑôØÕ¥K¬uëŠsr„#FÈ¿xAU¨89e,[–BõOž¤Ç®|}s¦N}ÇçGG“:³«Œ Öðá>……¼É“[îÞý7±+™Q\y¿VcxšLzcP¡)8ø«Weve2bôˆS~m¡öW·D\¾œðøq²ººÜ¥Kj™¶Ý¿Ÿ™Pbl¬8uêÿ±wåñP­ÿÿ=cßwI)R!-DTh±¥õ¶¨hUi¯Û­to{Ý¢º¥}_Т½H+Rˆ„²§BöìÌ`Ælç÷Çø ‰ÙT÷w{¿¼¼fÎyæ9Ï9sæ9ïç³¼?ߌÐ:p øý{:€+ø¨“U)‘ÿñsþâ¿kÁ@"‘tu“>}bœ:Õ}Ñ¢/n€Ì'îÌ›Ñög[˜ˆËÊèýúÝüü¹îðá¡+Vð¦M)55¾C«ss¸o? ÿ§û\îk 1RÙgE™Ž‰Lù6lxµwo¢¢¢ä‹ã °Ví[E.. ,±g¡§'Ssr2ÍÉéCAÓÜ\68¸—¦&¯OE__ÚîÝÔ÷ïÙffW¯*óî@ˆyóPQnÝpõ*†òT»2?aãÜ€Þ=pp;ÆØñÝIS°Ø¸÷Ç®ãYÈHÁP#Ì0Ò6¦PæÓvòÿLbSñ<áñ(«× ­ßK§bÞ8ay…øË þ7 §.n‡³ß””ÀÍïä\P(ÄâÅÕ411lÙ¢ðçŸò< @°ÙÄÒ¥¹§O—‰‹“NœèæîΟ[4$¤lܸX:³zµÞÁƒü¹ûA¥2mlˇ ëüäÉ))~ä„7sð‘þÄ-µÈ4j?ÿ½EœÃ@"“'ù^ëa+úXÛüüÚ~ýnTU1.]²5ë› AÀÄäERåÌ™þîî­§Häç3ŒŒRkj8€9_1Xw‰ ‚ ½ML$Ýû/ ü"XׯWL›–¥ª*ž‘a¬®þe*jQ*¡Z5åŒÿXZZ,>~rŸ>˜Í—umª3Áá(“Õô¶önܵy¼áŽIß#d¡Ù³Ÿ]ºô¡K¹èè ::zHýüòçÍKäpˆv+mììzGÇïßÓõô¤?îÕ«¯+§¸8æŒU?²HÇŽ)¹¹ñ‘©”›‹3ðò%ÄÅñ×_زE¸õÐH¬ÚŒÔ @)‡HͱëÈ+Æýˆ†-d2 uam{ ØY@õ§q ~7°ØH|XD¾EÄTÿO‰tÔ`ÉX1ŽCL;hD {Ãû(èõ“ÅK°q… 9ž¡¡puÅçÏÐЀŸùñÛÄÇ3]\îçãÇ•\]y½Ÿëê8Ó§gÝ¿_-'G¾~½Ç˜1ü¹º¢¢*ckjXË—ë9"àò’Éä8;?zò$ßÈH9*j‚ŠÊ÷°4fVK©x[{1Åš}a$‚Xç¥Wùžû¶iXˆAprzðøqþ„ ºwï¶ÅÞîÜù‹> P!-…?–`Å|h ­¥ÞH)B^!òíÎÿÙú©У ì-a5¶ƒÐ•/Jë`0p›¼‘W nSàõ':ó_(«¤›7ãΔ–ÂÞ—.¡Ï®]¿žÊ`Jða‘­¨`ŸU£ª*¤?t(k¤˜˜ÊQ£^Q©¬yótΞí/X¡@‚À‚Ï/\ÈÐÐ~ùrbÏžßé¾l\H_í»(A»eÞÊмÐIé_Ò”9xøpʪU/54¤““§vêÔ'¶°ˆ|ýºêèѾ˖é¶Ú ,Œjg÷^V–œ–f¬«+ÅÁºMLâwäíb2éΙ`àÁ"âÇú~ýR™L":ÚТY´{VØ“´›eé¥2‹ë5¥»öž¿Ï£ îB¡0ú÷¿™“S#°î0julF½¿ÓȲw©_Ï ÜRYm°ÀŽ@EEýС÷22ªu‚‚F‹‹ H.ý´bE ‰„Ó§¿iÿjk9Ó¦e=xP-'G¾ySßѱý9ºñjûùÑ–-«®©!tuÅ®^Uá]Á@` ÎC` ÄÅ1>vìàã¹ØnºÙÑ b†×o1Á‹\ag-š¬ÀŸ„l}‡bÏßTq‘_„³WpÂPW ƒž8¼ VüÑé8t»wƒB­-lm±q#µ²2ÎܹUÁÁõ$V¬Û»WAJŠÄãÕÎÉa8:~x÷Ž®«+ùèQ/þ*ý½}K±³‹®¨`º¹u½xq€Àe˜·oß¶-^VV<4Ôyð`}=í¡QPº@¡Û¡ÁÛˆ¯~lqÞúïß¶9(Øí™I11¹USüyÓá·ßôÚhùàAÉØ±±ZZRYY¶22­8OY,bàÀôädÚîÝ]6nÔâW¦!€˜Þ~;>áBºö_&øE°¸§¿~}þ¾}Åææ²¯^µ:¯åæÒzõzÆféé#zõj+}<,¬ÐÞþ¾¸89:z¢™Yu+IIòšææc±¥Å¼@±âÕNêìŽ(ãв³©C†Ü-.¦-X`xö¬àe§}|²×¬I#ùû›´ÈÙ*X,ÂÃ#÷ܹ2IIÒ… º3gò¡™‘Árq©zû–)!?ÿ”ß²E÷'\EöîÅÁƒ`0 /µkáé iþ‹Ò¾M…×Üz {b‘+æLƒ*?²[mã'!["Äw&UX,>Á)„D€Ãcìò„ÓHAüŒAAX½YY`oƒy­/ÎEx8ÃÕµª €­®N>^iÜ8>n»”š“ÓÇü|Fß¾2õêÒ…¿ðÍädêÈ‘ÑååŒÉ“µ®]3ã«$CS\½úqÖ¬02™të–Ä º‚u"¥Ú˜­ÒJt÷êË^íæÊbuÄtÊáÇEF~ž=»·¯ïˆ¶ÛؼŒŒ¬øçŸ>¿ÿÞ£ÕÿüSüÇù={J¥¤KI‘~¬Ÿ¿€Je¥0Ïë>~ë¬hÁ‚Äóçó.ìvútÿ¶»]¹òå‘#)}ú¨ÄÇO––î¨8Í̧Ž%¶=/Lº ïàÔAøqq¥#FÕÖ²vï¶Ø¸ÑDà~vîü°eK†˜éÊÓiÓøÓÐ$lß^¸}{‰„-[:oÛÆÇÇëë‰õë©GŽÔ¤üü”µ´øx`fd`ófܸ::ص nn‚˜ ŠŠáw'|‘“R’?Z”­Fü{ÉÖ÷'U\Ãÿ&Ž_DnHKaÜ(,r…½ ½½~µkFFØ¿cøQVb³±s'u×®6ÇK^¾¬Ü¥ ³Mx8uâÄÌêjöÈ‘ wîè+)ñ7S}øP;|øË¢¢zGG»wII h´/tt|X_Ï>rÄjùr£ãWŽ'¹“™ß€åßj3;ñh¿âørìÙóöÏ?c»t‘KNžÒvÌYhh™½}Œššä§O¶òò­8‹‹™©ÕÕìààžÜº_ëgÀ/‚ÕpúW¯VÌœ™­¦&ž‘a¬¦ÖÊœ™YghøŒD‡¶Ý»·õK£ÓÙff·ÓÒ*==Möìé€òÏ€ óÖíÅ7Å.¹óBOGç‰ç.wÐZÅýû¹'>æp_ß‘nn½îgÓ¦Œ¿ÿþ )I¾uËÌÙ™o—Û‘#%«Wó-CÊŽ{ô ªËË9:‘ýü”Gâ/Ø6, k×âí[4@0·‡ƒ°(œ¾„;¿´æNÇÂY¢4h5‚Î@L2Â㇘”/Êd2lÍÁdASšªPW†º24”ÑI­áµº2Ä;`QAAi%ʪPV…ÒJW4¼.«BQ)2óQCkhI"¡Fšc¸†„F¤—|ý]ècž ÜgBM ÃåçãÏ?qéêêØ´ Ë—CŒŸË˜—Çž5«*"‚!&†M›ä7oVàëãwîTÍœ™M§s&OV¾|™?)Q99´áÃ_æäÐ4ñûñF¤¥UZYÝ«ªblØ`âåÕQSå·pPWƒÁâì·ÚU&ûÍFVé®gh/úÖ´´J3³Ûõõìà`''§vôîGŽŒ/ß½ÛpãÆÖs ]]³/_®˜8QùΆ !~ Öeb&ïƒç³HWþË¿VÓÓ·µ}ÿìuùrÍ#GZ¿Ý]]ß\¾\ÀK¦L||Ù!wÙl"<|œ ¥¸’““ûõk_,”ÁâèÌ>["õM¤Z]é/ÿRRW눴—¶qòdÚ’%‘’’äœììøóñ5…§gº·w¦¤$ùî]s''¾m·oWÍš•M§s~ûMåÒ%ÝVŸߺÚyylWת/Ü –ýûyÏ“ÀáàÒ%xz¢¨œqèz´n×oŸqéŽ]@^! ´Õ„´°léháC›?Ò’PQ„¶:«CE¡åkEtÕ„’ü—«M«GQ KQIA%µÙëJ ŠÊ_³­#öÑÑ–ªF|.ï œòGv.À­ô,\x\m-ö탷7ètÈÈ`åJüù'ù´6]øû+;8´²hc&9z´dÕ*—òòhÇGgg×Y[«>zd)'' ¿.,¬2ännnÍÔ©=ìŽß YaOº…j¼ß{ZÛ-÷Oï·Ö±ýµ"S7L&gÈ»ññeK—ö9v¬XttåСQJJâŸ>Ù)+·2EEÕØØdHK“SSûèé5Ü ü¬‹ÄœöÛñ‰¹$ßÿ2ÁÀ/‚ÕôôÓÒè&&iââ MLZICKO¯éÛ÷¹¤$)3ÓV[»X‡¿þz½{÷›=“—çõùÌ£ðþGÖ]Kn»sÆ5ÛÂ0n=ŸïŒÕ«_:”¢¤$9¾o_þKã+V¤;öIVV,8ØbľE¶ž=£Nš”Y]ͶµU¸sG_Q±å“ «ÝÔÿbi)qõªŠž’º:9‚¿ÿ• IIxx`Ç,õÌfãAŸEh£Úx,rÅÌIïÈ’2õ d¢¨¬™ ©¤%MÞ²9í÷#/‹¬ôO⥕<WYš*_ŒdÔ ñ¿·š*èÝ yÖÐHœ¾„»Àd@O]¸ÏÂ|h¨õÖ@»×¯Gq1H$L™‚½{ù¨*ÈES/ö¨QR~~Ê:µÎZ½·…q sQ\\?bDô»w5C†¨<~l©   +•Ê6,ðíÛr­'OÆv\(Å×h̯“ó¶ö®“hçNR–•øà=Z]¾äh¾”Ü7mzý÷ßoôô§((´ótpt|õøqéÖ­½·mk% „Í&ÌÌÒiÛ¶ioÝú¥hã/‚õ3àÁjvúkÖäùø”XYÉGD´ºB:5þæÍ"^êº4®Q–-3>zÔJ„î¨eôÚ𤢶ýoVÝöwÖ½Ná¡y‡CLrûv¶®®BLÌĶsÛA`É’äS§rääÄ>´´±á›«¥¤Ð?0ûõ“yøï0ÞÆb%%Ò©SJÓ§ó}"رçÎ͆š֭Ú5|”“û?áìeœ@i9(ÈcÆD,™“ï¾Ò ´úËSaé+TÓ×¥¨gÀvÂ^€´äÿL\Š­X¼´5ÐU’ßU.÷ ª(¸ˆCg‘öÄÄàd‹UîÂÀ…„`íZ$%€¥%DœV˜< l6±dIî™3eâ⤓'»-XÀw Ni)cĈè´4ª‰‰bXØ¿$6›˜4éIPP޾¾btôD þóA„@£4Ã]ÃYQÝìyùÈ {ýóˆjþgÏœ‡ k§ŽuBBµ¹y„œœxv¶­ºz+Ç‘#%+Wæuë&™žn,+û冸E°~ü"XÍNŸJe¦2ýütÝÜZY«&&RLM_ÈÊŠeeÙjj¶ÓèeðÀÉÑQÀªò_cååÄ#!™¼´‹÷/¬ÕqùƲ³ ŽŽ.63Sþ|¼œœ€+]‡˜3çí¥KJJâ!!ƒÍÍùŽ?úô‰áèø!#ƒ®§'õèQÏÞ½ù›ÍËÊ8óçWѸ¹Éœ<©$+Ë÷“6!k×"< °s'¦Nå·f¨g ð1N_jiÐrý ²ßIšƒ?Pë@©…„Ô•…•ôì Ä'áô%øß]´àú–̓ßVžfx÷ëÖáþ}èÖ ;w ˜ú Œ’€ÚZÎôéYÁÁÕrrä7z89ñmJ­ªbÚÙÅ$$T÷ï¯6XMMðUÂÒ¥‘'N¤©«K¿|9¡W/¡ê÷ñ‹Fi†R9­†îb“x²œ‰“IowØwAºÎ67¿šZ¹nÝ€½{-Ûm?aÂëÀÀbOÏž{ö~½·¤„e`RUžwOüøfs#¿ë,1ŸÇƼÃtþ¿L0ð‹`}}ú~~åsæ|êÔI"#øÕÌšñã_ÿùgÏ¿ÿnåŽo/¯·7ò”'Â#2>Sûm eòâ•ÄHHÜi/’yA”•ч½÷áCõرÝîÝ-&& €Í&\]ß*+K„†8ï¹¢‚5n\æË—5jjâAA=‡ áϽÄUqܰZ_Oôé# Ò¯Ÿ |1$«W#5ìì°?LOµl@F&.àì”W€’"¦ÇòyèÇ¿äéÕ\ ÄÑ HN¸AýVXäŠINà±ÈÌ·P^Ž;pü8X,¨¨`ì^ )þç*•Xº´úÒ%€)S¤ÏœQRVæ¢ yÿ¨®f98ļ~]Õ»·ÜóçCµ´ŸÊvíJؼ9NFF<4tì!üKÆ ‡Fi/uìî¹6îýñ¶}VPãÛÊ\³&ÚÇ'ÙÈH9!á·v£©©Ôþý_HK“³³[_ÏÏŸÿéÂ…òQ£?n%Æ/Á:I,æ±1ïð ú/ ü"X_Ÿ>A`äÈ÷ÏŸS׬étà@+åÊcc«,-#Å?}²k×HÎá#FEDð¤t>Õê¾®çóVËòrƷ󬻟_`öÕç¾23)C†Ü--¥/^ltò¤àQÙL&1eJ\``±††dxø>}ø.­×ê ž¯«Àœ1£êý{–Œ iÏ…U« b2qá6mBi)ÈdÌšootnÇKÐ>êh¸ˆSþx•$† Æ$GØZÃØàg±}¡QÞQð¯‰K·¾˜¬ÜgÁ}&º ýu08q[·¢º˜7;wBS Hü„¦‹KÕ‡|ßuW[H .€º:¶£ã«ˆˆŠž=åž?ÒnøiÈœ93”D"ݼé0i’®Àý ®4€9mŸÁ[kãèV}XòÚ‹LpˆIKO8ãÏo1 ^nïÈÈÏÇ‘ɤ—/' ¤ÑnŸÓ¦Å߸Q´fMZ‰H‰‹«³´L'%'÷ùúkýE°~ü"X­œ~J ÍÔ4@|¼Qÿþ­¬`F~õäIé¶m½·nm%ê°²²(ܪ©aÞ¸a?eŠ ¹d­¡Õz>×ú.ˆÓþò;÷u7ŸmÅŸ$ºhùÙÁ!˜Ng80dÍ^³l¾ƒÁ™<9.8¸¤S'©ðð!††|=>…F#<=©‡×øí7é3g”TT!/••ðö†êë!'‡å˱iä¬âØ éà{§/¡kg$¿yXšÂÊÖ°™ïîòs!+‘±ˆzÈØ†«‘VxÝ`²šèÈGMåo pó&6l@v6ØÛÃÇÆ…Ç5µ›‹¨ôíË·IMÈD4{ìØØgÏÊ»u“yþ|ˆ®.¯E¨¾Æ‹E£F=¨¯g:4tåJK ‰ƒºl&ƒE–8j¹©@¡ab”fÑ~Þ¢B+㾓ìˆÜ ÚZÖ€733)Û¶™mÝÚþº÷Ý»cãç¤ÌLÛ.]Zþn9 ò.6¶ö¯¿:ïÚÕŠûÁúðß%Xuu„œyÙ²ª£G[q9­X‘wôh‰µµü‹­D»¿|Yie¥¬,ñé“’Rû³Þ±c©Ë—G©«K§¤´SmJ4Öó©ÎÉ–U×,-,:l¹µX¾á'''%þzËH#m¾M>"ĵk™3g†‰‰‘nÜp˜0¿"ƒMA£±_‡…•£¹oŸ‘v,᳨ܸA_´¨ºªŠÓ½»Ø•+ÊC‡ Œ’›‹M›ĺtÁ–-X°€?1¤oZƒg/q#¯ÔJ¹’„ùXsÉ–T¾kô˃‰¸DDÆ"ò^Æ5xQ¹PR„Õ Lp„ƒ ôD´‰Åï¿#* úôÁþýpTå·¼œ3ož°‘ífѶ‹êj–»{â“'¥ŠŠâÏŸíÑCpv•’R9kVXRRùï¿÷ÿçŸÁ÷#0²Âž¤Ýºöþþ]‹u¿÷´çº_¾›ɧE7¾í ¢Î ¾8{ö©©ú«WÎÒò›áÂÇ©pë@רßì3·qãâz'çR|Z„X·îÕ“'y995/^Œïß_@q,4{Þ¼ÄÔTjffÝÕ«¦&B×®_¯<}º¬°°JSSñÊ•ÚÚ|»Nêë OOêÛ·ÌðpƸqÒ/*©ª øDåú•6oFM ttÀdbåJ̘!U ÔÔ"&‘±ˆŠEÔk 2Á‹ “aÚVƒ`mÑ# Ø1æÎŽ‹Áb³ñ6!ˆŒÅ‹P¨ Ý …ÅèѽἬÁØ@ô‡NHÀ©SˆŠÂ»w06†“þú ‚^@®[pÝ:Šžž¸¶6Ù×W¹[7¾×EõõÄúõù!!ŸUU--åöíë*ûÏȨqtŒ¥PX&&ŠçÏh»vEÛ(+£ÛØR©Ì¡CµüýGHI}ï•^ÓXUš¸ì¡;«¤æ%zåïÑ›e™µMÛ·]Ôù[hãö&˜šÞb³9sæüñG;•Ö¸ððH~ô¨dÆŒ.­&nÞ\xölé¨QJ¾¾º_ï=|¸vóf*…Ò¹¾žÃ#±þE°:"#X555ò"‰"ùŽ ‘HÚÚÅ……leW×–3›M§edÐýýõ\][!C†DÅÄT?ÞoÉžÜ^\q9'':¶>`Ijòå±¶— æÄkÛ¹´hЬ!"“Š1cFèõëY;ËFEMÐÓü1Îf+V¤œ8‘#&F:z´¯‡‡ nÇèèšyór22èššâ~~z£G ’kHŸ7¯º®Ž02÷ðuw—ØnQW‡ƒqñ">~€Ã>t IDAT®]±d ÜÝ Žn\÷YÈ „E!&þKmI 6ƒ­ìl`i*z’'*p8x›ŠgQxö/b@ý_9B ý 1Ò ¶Ö°¶è²BêëqãŽCÌÿª§'<< #Ä/,>ž¹jåógvVÛÓS~ÇÒ?|¨wqÉJH¨“’"]¸ 7c† ¥|^¿®;6¶´”aa¡|ÿ¾…††àŠ 4ËÞ>øåËâ~ýT_¼¯¬,„œ@hÔeàâRÿ%‰Z 5yH±8n¯~廦í;¢¨ó­[ÙS¦<ÕÖ–ÍÌœÁ‹¤jqq½ž^X}='%e¸‘Q˧jU[O/¹ªŠi`eÕroE§wïÒòr ÍW Ö/‚Õà›`•——Ï™3'<<ÜÂÂâäÉ“½{7DyóR÷“€D"]¸P7o^U—.bïÞiÈË·$û¾¾åsç~êÕK*-ÍøkGÒÍ›ES§Æëéɾ?’7SEE½®î*•3± #–H{ÌçéÞ݇-·–È5äDÉK‰Çmi õ#ƒ± θqž<É××WŒŠš d8š·wæÆé ô½¼‘%(-eÍžýè…DŠšû÷w•à{±Ÿ“ÃÞ»·æøñ:‡+YZ ÎJ¨T\½Š#G’’’˜0«V‰ØoØu4DÆ",aQHH›Ý°]NÃÃj:i@SêªPW…–FG™¸¾…òJ””¡´%e(.Ea1RÞ!â*«¿´1쉑V9#† .¶Î ŠŠàç‡#GPPJJ˜>«WÃH]Œ¢"ÎÆ??AÀÞ^jíZ9GGAtnß®Z°àSU[WW2  ‡¥¥ ‰®!!e“'ÇQ©,gçN×® ”•ÜàÄfS¦<½{÷“žžBTÔ„ÎáMu^w±¹nüEíÉ6ë¾ÓÇ[Mw„4×|•˜X~ì˜õÒ¥íÈSsÁ­6eJç7Z‰…ß²¥pç΢ѣ=j¥€Ï’%Õ'OÖÙÛK…„¨ñE°öðؘw¬'íÿױтoV´`Áiii//¯ÐÐÐßÿýÚµkƒ ¿–`q8ÄàÁe±±ÌM›äwîlùÜ`³‰>}ÒÞ¿§_¾¬7sfK#‡C…¿_{õê@žÂ¥¹õsÆŒéì(šsøçÚ”±¯SóŽ ÞÄ$7¬ûë(Ål!óCƒ±¨TæˆA eææÏž9ó^D¨U\¼˜·pa‹EÌ›§sút¢©‡—¬[—ÏdƒÉ]»¦×XÌ‹/ÑW¬ ää°I$L™"½¿¢Î¦ˆŒÄáøs§¡º°™-‚›d:XG”ëF y$$ƒ `Øï>6k#% U¨(AE ÚZè¬ e¨(A»:w‚ŠT”ÑY“'9Mz=*ªPY…¢~Fe5ŠŠQXŒÊê†ù…­Ô%종‚ÏèÜ Ö°·ãHt¼è%¯ˆÇ¡Ch(žcj Ìš9!Šö0™8~¼vË*…BHH`ɹ;ù¾étΆ ‡—˜È3G©'w£›±&f«Fígî[‘è2|«ø#×|uü¸õ’%<™¯¼¼>nÜøÎÎN=$¤•\ËmÛ ·o/rpP|ò¤óÕ¨QOŸÖ¯^-wð "¿2 ? ÁzñâűcÇ †‘‘‘§§çĉ›6ÈÍÍ]³fÍÓ§O888øøøè4qÌwÜ^ÁÀ7+’‘‘)++“ûߪ-<<ÜÕÕ5$$ÄÈÈè_J°¸¹U]ºD›2EúÆ–OV6›02Jýð¡þêU=—–F¬úzNa……ôG,Gn_8ÀŸÆîÙóvìØn÷ï·bÄâ«${»H½qåáê%Wú-~ÓùËoõÖòÁ“Í„+ÿ!4²²(VVŸ?×͘ÑóÒ¥‘Bf½zUåì[VƬ`h(~à€¢““€Úè~~åË–åÖÔp ¤¯]ë1`@ÃÍÆ×LBذ!}ß¾L ûöõY»VX¹¾ãÇÓ–-‹” ß»7ÚÉéG†~r-XOzNzÚc|ãÆßÒ.ÎÞøV$º ­^p~ÍWõõ=½Ð¢¢ú'O,Z>Pª«ÙzzÉ••ì/ llZš¯nÞ¤OZ©ªJ~ÿ^CMü/%X$iäÈ‘;wî455MMM]¸páòåËÝÝݹ{kjjLLLæÍ›·téRÇ÷õõ}ûö­¬¬l‡î|,[[Ûõë×;:~!žžž999ÿ^‚UPÀ64,­©!žD€›7³’’*ttäçÍãI ¤¨¨~Ë–Œþý÷ìi%c‚Ba:T`Ë–V¾£ýûk³³ÙÆÆâîîZ\ØùŸÃØ·o©‰¡¢gÏžyyyoƒ‚‚fϞݴýìÙ³ïÝ»×Ñ{ß¿IGGÇ'Ož´Øøûï¿ÿëÌW-°n\Ïžâ©©¬3gZF…HH6nÔ°}{!ç«G¤¢¢ø¬Y]¬]›–—GãåXk×öWPÎ-ÁÐÛ„´’²ã?ǺRrÆ|¸Ñ¸ñuv寛©}èv1r¤¶¯ï2™´aë „5Ñwî,>ÄÆFµ°>|øËÈH¹‘¹¹lB‚‘‹‹*•Êž93{öìOuu‚#2³gËddh¬\)àôé:ƒÒC‡jsô†–6lÀǸ~öö Ppú4úö…ƒnÜ€ðýÿ‘€Å‹¡­Õ«‘ }}xy!?~~ ŠÅgϦ¦esæT•–r¸äÛÏOYCC@I?¿rsóôädš‘‘ô«W†Ü +P\\?|xôãÇ¥ZZRC¿öIñ‹¤¤ŠÉ“ŸÔ׳—-3æQð©#p™{£¬è#·2Ù†0ˆé)çê«›6îå4NÕ«vAص+ÀŸšðfº|yrE³kWéQ£Z©âuøpIEkäH…aÃZ: ØÞÞ5T²Bùφ‡öíûEÈ>55u@ódÿþýÓÒÒ:z¯Àø9ÊÀþ’"yy)Ø´‰Z^Þò:w®šžžTZýöíVŒX..Ú“'kQ(¬ùóyá™jjÒË–ع³¥+22R°ñ·îÃFšÎ]hÒ·$¾qãÁ'î½)ù±øÅôéúGZ/Žxð€'`PV–xútðÔ©++™1·nµs‚ߺڊŠbW¯êùúêÊÊ’ýýË JOIá‰: ò¡CŠÉÉŽŽRœÕ«)ýú•>~\ßþ'Ûƒ¤$¦NÅÓ§HHÀ¢E–FH¦Mƒ¼½†~*tĽ-$ ܸ˜™áôiÐé°·ÇõëÈÈÀ† P…ÜC^{öì*[Ûò¤$¦ŽŽ˜¯¯rX˜ZÿþZèTö¬YÙsæ|ª«ã¸¹©½~mÔ¯_ëÞðv¯vVVÍË„„j}}Ùˆˆ¡&&‚èÀ5ï2zôƒª*†‹‹þáÃCÛÿ@Ç óéÃFYÑäNfñ¿„Xç„–%5mÜ{ìø±Gψä¸-.8×|Õ­¯æ«€€ÂÛ·?+*ŠŸ<ÙJä\M ‡k¾Úºµ•RäžžÔšbÊé¯ã[þÕ¨¨¨øë¯¿|||·TVVªª6‹„VSS«øßd×q{Á¦L™R\\ÜbcEE…‹‹ =ü„øúôÊÂU«ª¿n|òd glœÊf·ÒUQ]Uõtñb/‡.+£)(œNÅÆ–ð?p¾Á¨«;7Ì|G7-Õé§0÷÷OeY`viíw8z»Ø¸ñpJFæ\TÔgá{c±8I@˜ØýS§r„é*%¥ÎØ8ˆ“‘I8uªTÈÒzô( Bgçò¬,–6Ei)áåEtïN@()¿ýF9B$&­Þ±ÿe¤§§O®®„…EÃåRQ!Ö®%>~åQjj8[·R¤¥‹€B9¹¢­[)4G˜j{õJâÞ\ºT.LW¯_Wjj>‚ Š()©¦+.JJh½{§lmƒètQÞØüâμû´÷i+nÒë.;˯qºë4åÈî®êÜ]‡ º-Ÿú¸ƒÆÀáýûßN<™ÆKûÒÒzî×qæLëóÕßqVVï¾ÞÍ ‘ ¥¥‹ZÌ'¼?܉o[l¶ÚþIüÍËŸÍV[aÆ×øüùó°aÚn”`0M·0 IIÉŽÞ+0xƒ[¿~½ŸŸßþýû]]ÜÕOŸ>]¼xñÌ™3wíÚÅ7­û9ðu`S‘µë™L¢wï”OŸ·néOžÜЦ‹Ÿ_þœ9o•”ÄSSG|]üükpÓ˜Çë8Z¸óà ÅɉWÆÙ’ézÌr#›Ôpj–=T#þ&!öƒ ™… _œ;÷NMM:"b¼‘‘$s¼½3==ÓÁeH¹¨©á,Y’séR„ %æ‚Á Nœ¨Û¼™J¥22¤•+å6m’ÿZáV`4hS(xñ¢a£‚,-aekkØØ@êÿÕ*—Wde!$‘‘GcP‡ƒòòàá!âD‚ÀÍ›ô?þ äæŠLÍϯÜÃ#—FãË\»¦gl,xjjhhÙäÉq ËÞ^ýömsa½JT*säÈ øø233õgÏÆ)(üHùnÚ A"6[÷Qµá‡/Îa®xµS›ÚðÅwP9çF\¿ž5}zH·nò>¸HJ¶?]̘‘Phk«2øëL©ÚZŽž^ri)+,¬÷È‘ÍÄ ßÒqä7ÈÝ“ØÃccÞáEÚÈû𢠠`ìØ±ÿüó]Óí:uJJJêÔé‹êÇçÏŸMMM‹ŠŠ:t¯ÀàõQ±wïÞ‡>>.\عsç¤I“ÚÿÀO JJ$€ÀôéÍv:T»z5E__,5U£…Úä±c¥Ë—皘È&$µºÚ8w.×Ý=IMM25ux§Ní8c5±bc' ¤‘*¹·ŠêÜœ³6kIR>ƒ·WÊ4ñÊ1¨k¢·*ÕW¢cjò1¼jưaIIƒk††:ËÊŠ %&&¦ÒÙùuy9cøpµ{÷))}é“߫ݴ ɤIÊçÎ骨å÷!øûÓÖ¯§sÈdÌš%³oŸb§Nè±¥PÛà,{ý Æ—]=zÀÞVV6 ºº¢?tÝÛ55ˆ‰Ad$¢¢ z“eQ ŽQèé‰üÈ_Àõür+ÞHJ’<ÜR²ÁÝ]½kWÉ·oë‚‚Z7b-XÐÍÑQ£¼œ±xqûëu55inýnB/€eWÊ2ÒK–Y;#å4™Ó`Ñ©•T¸Ò1‡DðáaPæÓ‡:†6 ¤$ùàS÷îò11%..¡,Qˆu ¬òâÅ™çÏË­¬¢òó¿<ù½ÚÒÒäC‡tnÞ졬,vçN•©iZLŒPn6‰+å ¹v­œ˜üýi“'W¬ZEINþJMDPT„½=¼¼‰Š DDÀË öö‘AVNŸÆœ9ÐÓƒ¶6¦MÃéÓHM…¨Ü—"¼·)„„ÀÓÖÖPU…ƒ¶oGH˜LôéƒE‹à닼ÞÐÓÑyâ¹Ë=’6–VicXQQ¿p¡áéÓÃDÒga!ÝÉ)6)‰Ò½»Ì£G–††-µdøÂ§O —¬W¯jÅÅI»vi¯_¯%|ÉšŒ –§'5#ƒžÎ`f&±h‘ìÌ™2" oõõxýˆŒDd$(MBÍÍA¥BM êêPSƒš45¿¼æ¾PÝ㵦ee()Ay9ÊËQVÖð¿´ôËëòò-{4666 VVèàJX,ÓÏœ©{ô¨žÍ‰„©S¥/–³µÊ!ÈEÓʘgÏvŸ2Eʘ¨­eO™÷èQ©¼¼øÍ›f¤5‚¹ÿ¿¯ßÁôéÓ?®Ö\¦²²réÒ¥W¯^혱u8H$ÒË—„•$%‘œŒ^Íg‰ *éóçËž;×ì¦Ó9={¦0ƒ‚z:;·>Ÿ8‘³ti²ººdjêpMÍv–žë׿ڷ/qÂÝ»wE_˽åÀþW[A"¸ö½š1÷-‰ Üþé]žÚÑ)6¼àÕ«;»ûµµ¬Í›îØa.’>++™ãÇ¿ŽŒ¬PU• de%TF}=±~}þ‘#%ñã•/\讪*‡fz:Ë×—völWŒMA4q¢ôìÙ2ööß/÷ÍFR""ðâ"#¡¤„÷ïÛù™ÜŒl©©ACêêÍx˜Š êê¨R#Oâ¾àÒ)î–z¢ï,, /aÃ`cƒÁƒ!\¹0þPPÀ¾t‰vâD]N€¤$i©E‹dí줄'Ù\·àºuùL&1hܵkzzzB}ïÅÅõcÇfMvû IDATÆÆÇWkiI[ (úZ0fÌCƒsðàÕ«EV;U4]1ÖH*²ƒ*ÕpŽj´’5Ñ[¥XÍBi{?æðiqé‰ Èœ1#”ÇäÁ%K’OžÌ±°P~ùÒJL¬•[‡Nçôè‘RTÄ|ô¨×èÑÍTÊÂÂvvå­®ÿmmñìV¬À‘#¿Ößµÿ?›È:{6üý1inßn¶73“ml\ÊdÑÑêÍRc*Y½:oà@Ù¸¸ÖXÑ£_=}Z:sf—Ë—MÛFY]OïjM 36vR}}†µµµ°'ömpkË7¾­‘T<8dEªa‰,Ï ¬y¹U…¨¾¶¼ðÎ8ñ ‹ÅññºjUßö?Àêë9®®onÞ,’•»~ÝLIé½Wûöíª >ÑéDÏžRîîêË–iˆ‹‹ÀàT_OÖŸ>]ZÏýöé#>{¶Œ»»¬šÚ÷ÖÔ¨¨hfOjjLjÜ‹ _ïÞ5ïß·o8”“ƒºz?kJÚ¸¹¯55!&Tðß`³ñìYýéÓu·oÓ¹Zù½{‹ÏŸ/3¾¬À‚ì-S»vmþçÏÌììúõëµvíÒæ^ŠŒŒìÒe £ã«÷ïk{ô}ôȲW/ѤJ¾~]jk{¿¦†¹q£ÉîÝ"éS`4® .˜®L×0án'sØË^ïîV€D‚šAuÃ>}~›Þö£±/^D,_^Ì£ù*<¼ÜÖ6ZB‚oÓ·oËÜ@.(^»6ßÒR.&¦Yol6LMK““Y^^ -’¯_ÇôéPUÅû÷PWç`yÇylÌ;N’–þ— ~,‚ ŠŠ``*áá>¼Yƒõë)ûöÕ:9I=xÐÌÚA£qôõ¹k‹ž£G·¾(Ìʪëßÿym-;4t°­m;®kúôöÂS;hjÁâ"KÕð”Ù:nýÊwkrü—½ù)*Û?ŸáîþœL&]¿n?y²hâhX,ÂÃ#ùܹ\ ÒÅ‹¦3g [|íÓ'ÆþýŸ+0fŒÒÚµlm[Ÿ1À»w¬³gëüüh¥¥²²¤•+e§N•8ð'÷›ÝÌW^ÞÌ(Å}ѧÞ¼iiÜúÚÜ%ݾ„ÜwE~>ûìYÚ… u¹¹lÒÒ¤)S¤-’µ±7‹ë-=t¨ÀèÑŠ«WwrtVW=.®ÊÅ%!3³nÐ åà` ÑŒ6=½ÒÉéaNNÍܹ½ÏŸ!¼ÑNH4®£ºÙß5œÕ¸Ýñã-»¬=w1 Éï°b¼u+kÊ”]]…÷ï§KH´Å¹i4ÎС‘oßRvî4Ø´©uï*Æ10HÍËc÷3¦Ù#æÂ…ºùó«¿ÎÁ¢ÓajŠwïpò$/æ[˃8ÁccÞq’´ä¿L0ð‹`qOÿÐ!øûƒÅBBÈM~ 1uje|<Óß_ÙÉ©™­þäÉÒ³gË$%I_'w4âÈ‘lÿ‚Š FZÚˆ¶-Æ%%4W×g11%ÏŸ;›šv`¸èݳëH4â‰þħúßÎ$¥^>¿¹ãÆÀ¼¼Þ>|˜]|ýºýĉº"é“ °eKFTTennݸq¼½x‘«iAAÕkÖä)(ß¾¥9;+9ÒMWWd`ƒ¸w¯ÞϯîÍVq1›Å‚™™ÄÊ•r3fÈYøÚ@|<óСڀ“‰!C$++9sçÊ,X «®.2#b]gïÞÏÞÞÅ22dYY²««ê_i)(k;>Ïß?¿ºšÙµ«Ì•+¦òò¢)P—‘Q5rä}©þýÕüýGˆ‹ÿøJkÜc±¼ö¡Á[™ä†_œ^å{8o2Ñ"ób8bÀ€[22bË—÷=»ˆ´]»>œ<™cn®tã†ù·”2Ž-ñöþµ=MM™~ýT©TÆß¿i»¥è7}Öײîõ*ÿRÕ2€0Kÿñ.B.<=Mll´˜Lδi!9"é“DÂή®Úd2ÉÇ'ÛÚúeVVËtQ~1nœRjjUyyòýûÕÆÆ©;wÑé¢Ñû“”$M*¤úü¹ÚªUrÊÊäøxæœ9Uzz%»vÕ””ü›U>ÐhÄÙ³u&&eææeþþ4Ó§ËìÛ§ž®±aƒ¼ÙÕõ땆†©Û·1œI“”ãâ ½¼ºÉ®¨T–«ë› #"*Æëtë–¹¨ØÕ‡ÕvvÁEEuêêÒgÏû±ìªQõª®¼ŒE–¸Òoq#»’fÑf¤œidW:›šuôxnÝÊNI©(.¦¹¸´“¡YRR¿o_fA}Å ½o±+&“Ø¿¿8?Ÿ9mZËü†3gê Øt:1aB3vUVoo`ñâïí=ÿ…6ð‹`€¤dCá¦M¨kþ¨õðÕÔ$ÇÄ0ÃÂM·ËÊ’W¬Ð°gÏçou+&FâiÙ¹óCy9ã[͸X·®¿ŒŒøóçùQQÅm·ú£Æôttn±‘D3RN7™ç³N½.¦ˆ@êS$صkÐÆ&\Áè  Ñp,óçw[¿ž¤¯/ûúu•©é‹€€B!;”’"oØ •‘Ñ×ÍMFãlÙRØ»wªŸ_¹HFË…¾¾ØþýŠEEš¾¾Êýú‰°7o¦êè”L›Vùòe;7ØÇOXì¹ ÙÛ¶Q»u+Y¸°:1‘©©IÞ°A>3S3 @ÙÊJdöHtGÇÓ§gåå1”ˆ08w®»––°ÖÈÔTê!Q—/ÈȈýþ»ÌöíÂK‰rññ#eäÈûµ66ZÁÁŽrr¢!m€E§.r»í6õÝÝ›eïÒ6ûQ¯É… ÝLN÷S¡5“ÍíQ†¦`29ÇŽ¥ðô4i×þ×_ kÂ-;»oz*.]ªÈÉaI׬hX}=±o_-€­[å[8g·oGu5œñ•ø9¯ CZäåÿ~¬̘ssàСfÛåäH«WËع³¥¥jåJM%%±Ç)qqß´Œ«éà QYÉܽûcÛÐÒ’=p`pM gîÜgJ>,í=¶¥@­B}õÌäS˾ÏÕôyçâ8?uw÷n‹ L Δ)OƒƒsEÕ­»ûˆ„„aÓ§kS(¬3fÏ~[W×Rí_hkKøùéÆÄZXÈåå1æÌùdg÷>5U”úøÒÒ¤Ù³e’’4""Ô¦N•æpˆ7èVVåææe§O×Ñé?Ë·Öš½!$"#Ó¦Uvï^²}{MYÇÌLâÔ)¥OŸ4½¼ttDi¨®f{zôïŸöø1EUUÜÇG'6ÖpèP¡DC¸ðóË·°ˆLM¥öé£k½woëÅw@NNƒCpAA­µµÖƒNòò?Ò-ÝBõ*KÕðE·/µ\E›Å4mßËiœþ¨1:¤Í›ã"">»¹õš?¿í«´4êÅ‹yââ¤Ý»¿Ù’ÃÁþýŸüùggróçó¹s´ü|ö€ãÇ7ã.\;11xy ~¿ÐøE°@"aÿ~سÅÍMHË–É©ª’ÃÃ/^4ã=JJb‹kðòú¦ À¾}Fd2éèÑO?¶#J9ožAŸ>*?R.ìÀâÒ2ãOûOö¿a8á7uÃ>22jFRJÊ=+ÒGd‘}˜T¼ÿᇎ¿Ø³Çbùrcƒ3ujHhhû•ˆx„¢¢x@À@__1ÿüAƒ"SR¾éóårÑц¾¾ºâaaTSÓôU«ò(aÙ[ X[K^¿®’“£¹u«¼š9>ž¹xqµ®n‰§'5?_ÄÇú :ðó£õï_jcS~ãL&M*©§¾h‘¬ŒŒ(C¸ ~~å©ÞÞŸY,ÂÍM-#ÃxÕ*ÍVSôù…ÂrqI˜3çm]ÛÍ­ëë×ÖßJL™™›ÀOŸ¨Ã‡w~ôhÌeW™O~|t¿QæŠ&.wµïBâÆ%zåÄôf~½ÇŽ{ôL‡éñãü}ûÉdÒâÅFRRípñßOc±ˆ%Kº÷éóÍ/èÖ­Ê´4ºžž”‹K3ÿ “‰}ûjlÞÜÒ|µ~= ÌŸÿì]wXÙ×>B¯¡ƒHP@AékÃÞöŠ`Y;`ÅÕ]±Ëª¨¨(*6”¢€€‚Ò{é% Ô´ùþ„¿O߇Ç'9sfæÎ5sçsÏ}èêþ÷ ùÁÀï$÷n—ïà¯_ƒ‹ kËãÉÝhoÏÒm9aUYM-½½–šªÓKVz=„Å‹=ß{“òóŒž66’|}-û|@ÔúM›ÒÖÜrÕhß7œ݈Šû§˜kJõ¾/×€¢°m[´¯o¶©©ì®]cj]!II K–$æå5 ò\¸ »q£rßûp€º:ЇGÅ¥K5T*ª Àëé9bÕ*©ÁX{ÕÒ‚Þ¿ßzñb3]^X™<™ÏƆßÒ’oüx^ìMé ; (¤§S""Ú#"Hß¿SÈ0bÏ–-B7 R¢ÄÄgç’ØØ&˜2EäâEåqãFŠ©kµ ˜öêձ˖ÃÒ‘™IX° A@RR 8xè 9?_·ss^ ¾É“ùXÊkr ƒ]g³wRÃÂÚÃÂÚ?| áñSáööü­­¨³³ð¼yƒ´“™a+*òž>=` EÁÛûÛ¾}Y$ÍÈHüáÃñ£F1~T?ßÛŸ>U98¼­«kŸ?_íΫ¡]ÑqÅPë=ßè':keÜB Ð]×µÉöÛ«iyÀ•5ƒtÐhè´iÁ¡¡¥VVŠaa3›š{ép*54ŒJK#ö¢Û¯^5Ìš•//Ï[X¨'(ˆaÚÆŒ©ÉË£y2DGÃÑ£À\Q¥¤”Gô`-E^0ü!²ìW&ð+O&¤¬Û õLUAÆŒ5k€L†C‡º9‹‹#NNBpútËqöî•›1C<0°¾—²tŠŠ»w«Àž=™½ÿÞŠ‹‹—,ÑX½Z«¥…²xqXKË`Õ¤ûÚ³æ®Ù(ÞFXš~ŽV–Ôµ®¾ùuøÜ#GyzN “i«W8{6ågŽV\Ü-KT{ïžá;ÂÂ;;~ss>]ÝAŸ1Šjrv.NMm[[Qooe[TW¿tibQQ‹¸8öÆ ý>Ç“þÂß?Íš2™æè¨åë;ÄŠ ̘1}{°•´ó³›LsG",w"XññÕ/(Ú‹ÓúH'èü=¿xqÊÆîîåZZ))cº…¯ttjrs)wïJ¬\É X ŒYYpù2lÝÊ8NìW°˜h9RT‚ª('øÁ$üê‹G Å` í=h3Em'ÀÌ bb€ùÉMvŸ7OàéÓn3wííèøñ™™™mîîŠnn=vׯoÞœª¦&”•eÅÏßǘ•ž^7aÂóÖVŠ¿¿Í²eÜ#7¥%~S'·46^1Þ_$Ñq^^Läþ)f£~ªx߀ãþýüµk#ÈdÚêÕZ.ÌÓÖFsuÍòöþóçËûúêKH ØK|^^ûÎ%oÞ4€·÷ÈÉ“`'¨®¦ÅÅu­¤$2­“ "ãÇÿ¯’­aBªè(/'ïß_vï^-Š‚†ÿéÓ#-°‰~ú´àÞ½™d2:a‚ÄÇãÕÔ¸ã¥K..±4êâ¢çå5iȵÚ ð}Hfࣼ¼bWùõdÖt……™·MK#»¾Žš:sî¿þƒÚžúz’¡a`QÑÕÕÀÓ³ïbA‡çœ<™gj*ñé“EOý™Ýfh˜E"Ñ""´YFƒ{÷ZW­ª×ÐàÉΖeN¦¼|œœ@[ÒÒ +K£ÁDø’ PÑ¿)ÂÅè#9G²äW&ð›`m܃޸3íà“ÄhShjBe%<{sç2ìUU4uõêÖV49YzܸnÛOŸš-,²±X$1qLOÙîT*j`•žNüûoúŒaï¸|9ÓÉ)Z\œ/)išÚ€- ê¡ÁÏÖ.«çÇ7óháí¸Õ•¥„’|(Ár´­[‹¯^­15މÑîiÒ'8¸zÆŒxŽ7/ÏZJŠÍÓ4::šY.hÙ²ð‡ 8¼“Ü&ܸ”%cpËÐ¥kQôãOœL¹ÖW=sæÛÚÚ6++Å  ?ÄÄúÁQXz›-rs›—,IHNnäåE޽oŸÆ¾Ó·¶Ò¼½«Oœ¨hj¢ cöì‘;p@aH’ÐñxÚǤˆRd$)-A¶øù{{>A¤¤iiŒœ´4†þYZ#+Ë#.Îik9éí.´¶¢x<­¦†V]M«­¥áñÕÕ´ª*ZN…™T©¨ðXZòY[ó[Zò©© Žux8ÑÅ¥83³ ¼V|øP»bEbEE»Œ ß;Ó§Ëöî߯Þ…Ý»?yy¥ñð W¯NÞ°¡rÅÜAWi¯2Qå ÝÑî½ ç´j3º¾jNŸ5çæ½AmÒ¥KÛ·ÇHHð%&v{ïí©Ã“ïÞ-í} ùÅ‹Õ..% ¼™™ºÝ~À¶.[V¯¢Â“›+ÃÇǸ|¶Ó,Ä&О Uðà ,›û›` =~u‚…¢èßWaÏ1= RÃ\ª§éíŠ š†Fu{;š’"£§×íý¸±‘ª«›YZJºxqäöí=S§Æ…„ÔìÚ¥þÏ?:}¶°¾ž4~|à·oĽ{õÿú‹{ä†F!?ZèPöåsÐèåÑÊŒe–>+ œlû޽q„iÓÞ”–6I¿y3]Vv`Àw¡½¶o_ÇtáìÙr·nHJdÎï÷ï¤?ÿ, $€è¼y+VHápCVð‚HDãâHaa¤èhR|>‡QPÀàpÁá0ŠŠ<,_GŒÀ0³ÆÖV´¢‚V^N%hJ ÐZ§…ñµ—3jkciC©b…‚¾yÓ@¸¿tu½½G`µo RÑãÇóNœÈ£RQ++©û÷ X#›D¢9:~xô¨€ŸŸçþ}› Rå?£ 4øÙš¥ôÏ—MtÉÇ0C¥!ß)î}QŽÖÌÙ3¼¯cøögF37’“Œ>b±HF†%Ë*„.“ôô2‰Dê³gsçv{oGQÐׯIK£\¿.¾q##|ÕS¢ðÞãpî L2†è À`~¬¡Ço‚…’È0Îr ÀëìØÀØúìÌŸ²²—bLµí·mk¸r¥eåJÁ»wYƒX¯_788ä cÒÒtÔÔøRSÇÿÈä§[jjö½V?>¾zòäd2-(hê¬Y*ÿá2ÿˆåe~S'ë/M8X*¦J7òc1Ÿ[ª°^ø£¨ˆ8uê›ÜÜuu±b}ïÓO<^¹n] @9RðÁCsóÎHûð¸kW ‚@rr+??2{¶Ä¦MÒ¶¶bC›ÓЀæçSÊʨµµñ$<¾#¤TSC«©¡56r4€ˆŠ"ÆÆ¼éé<ž£]A2 ýó×Ñ£±ƒ$XÅ9JJHþþu—/ד°XDGG`Þ<‰ƒ˜Ã ?ÒÒ¶åË?~¬ãáAÖ]üÍ›ßoÖ­K¹u«dÑ"…€Žªzz&8/##œ¼PQq€sZ{Aaø»§«—Ô Èx™¹·a;Þ 5åDÜmD†reUUëôéÁIIx¡·ogŒ7ð)ùÅÅ­Ë–%ÆÆ°XäÐ!Í£G51˜û~ú”pã>4´‘>I§©É¿~½ôêÕR?_¨nð@ ÐÊËiôÈ€VTPY¾––ÒH$ÔÆ†ÿýûv@p8„)Ð…ùñ«‚ÏpH¯þmm´ÀÀz__|D‘>vêè¬_/½~½´¸øÃÂð+W&UUµËÉñß½k`o/Ó÷>ýÐîàð66¶JNN08xº¡aò¸+†ZÍÕUT{Îü^H®'7uáÌSöüƒ¿ÔqíÚˆÛ·suuq_¾Ìì{ ªœ;÷+Ç›ŸoÓSÌûþýº•+¿IJb33uääºù (˜˜àÈ—.‰oÛÆö{kœµ^…†åpã@ÿ…F§¡Á}ûõo‘é¿2Á€ß«ëò§¯€·`ëj¸|šáГHîÆ 7o¶¬['äë˪,‡ÇSÆŒÉÀã)þþjË–±Æ÷¢;š––6vìX…ٳ߾zUli©î0Ø«ú™uÊ-þ’WªœÉ]ým]ÆÅ”mí{í ÷ÑÔDž??44´‡ãùrª¹¹|ïþl{»wP(è‰yÇçÑh¨­­ô½{†òòìC•?ƒ²2ò½{µ×®áé)ð<<ˆµµè¦MÒóæI`±Ã’wô…ÆFô˗̱cÇHKc0ÃeÕÿ™ÙæçWëë‹Çã) €™5K|¢Œ?ÿ3ãä·]^Þ2mÚ›´´:UUÑššC&ËçUe¨dR¤êôWZ‹{÷<·dìŸÓ~Js¸O‚ýœ  ð›` üouƒ€Ü—®ßƒÔ,†ÑÔ,€ÖV8v¬›ó"X,ܽÛòíkÅ7iiì_)€‹KIOJ’ŠŠþ©ìtG••ÙHª øúZ*(EFVœ:•Ôÿ‹ûï°ØwDÉtÒ¸ª/f¥ºŒñ¥7"‹¸Ù !"ÂûòåÔ… Õ „ö?þx\Ò»?ÛÞîX,èÌp IDATâî®õx8ÞÀ *4´æ¿¶·GŒÁëê*ŸŸ¯ª¹hއÂÂ/.TVNÛ¿¿¬°°}ÀÏ8ØCŒ•deÿ÷ØUc#õúu¼…EŽ®nÆ™3•x<ÅÈHÈËkdyù¸€u;»gWÅÅ­––±¹ ¸¹i…„˜þßço;;»ÞÌìyZZ®..:zöpcW €Ãµð ‡©ÏêÓóÄËl|©O·ÿŒüüÆM›>€yO¡q–¿rå{f&QCChóæÿ#vì(©®¦X[‹::²)Gvòdìß/ÂÌ®"#áõkí&…M¡À.7€£»:ØÕo üŽ`1.Çðöksxÿ˜áSXcÆ• ))ÝJi®^]ïç׺e‹Ð•+l¦?þÈ m\µJÊÏO•í©9”žcFDD¹Ýk…ÐЙ66í2 h®®ò›:¹_çcz¸L´c°àE©;“þÒ‘ÆJkÑY¸t°³ú*ݺõãÙX,æÆ)kÖ°Éýyp!9¦ õñc‚OuZZ+`0`c#¶j•ä¢E8Åçß@$$´\¿^ãï_×ÔD žÅ‹q[·Ê â4ý`§úÑñõkÍŒÁ55m¦¦²¯_O“’à¬ùŸ]õ ŸY›—óX{Uœ’%'{9Ûix¯]‰övê¤IA‰‰øÅ‹Õ=²ãd—úz²¦æ<žôü¹ñœ9ìãèoß6NŸž'$„IMÕÑÐ`%Я_·;8ÔÉËc á+… àëW8u `8{Ý€]n ¡ Àß¹tµ¿,;4„CgΆüñ+ øM°˜/ŸÐZ怯ƒ§¾0o:ÃÍÙ||ÀÁ^¾dóó)£G×ðð yy2Êʬ¹EE¤±c3ššh/_Žrp`ÿjxãFñ¦MœêŽÒqèЗS§’””„“’HKsoL,މz¼ln ¿Ô…‰Œd,é–ªŸÝù)mÀ•õ;ýŠ‚‡G‚‡G‚À¹swï7g¡PP7·OÏEgÍ’;p`ÔÀ eýú#ÿþýºæfÆ#Û6Y}ýáÒóÿ@§³—.UÓuØ&Mqt”Z¹RRHhéì÷ï­û÷gEDÔVV¶Ï+ÿï¿ú8Ü $Þ}øP>wnHc#iæLå€;!¡á’Oɬz•"ŠÿL:Éáó ‹A’ÙêŽøÕ-;wÆ^¸®¡!–˜8ŸC˜½{³Î+°´”Šˆ`¹™6n\faaû?ÿ(íÚÅ&èdaQCúûo±Ý» ¡üýaÅ 1rsA¨“ä×Õƒ–9Ôàå`®«Û_‚e…~èÛ¯Ÿˆ@¬e‚¿2Áj'?rèz‚‘\—nÁöC0z¤„_ç­TS£FAc#DGƒ¹9ÃyùòúZwî>žÍ]ý÷ßU{ö”ji $%a;.wéŽ^¼¨·}»*'m¦PhÖÖ¯¢£+5ïܱæüb1gO~òú+E~½q Õ ÃŠ¸åiW韹 @Ó_œ=›âꇢk’¦CCk®_/~ò¤A`×.uggUUÕÁ]ˆP_Oõ÷¯»yŸ”ÔB·,Z„›3GbÑ"ÜÀ.aûÕI|ñ¢Þǧ†DB`ÄÞ5k¤×­“RWø4;f45Q®]+>|8»­fc#=gŽœ³³Ú ý\Ÿ?ÿ¾tiX{;uÕ*Íÿµ>ep€Iõ P@émHPdˆ˜”}\œñ/³?ÆœÈÈ kë—¼¼˜˜˜9ÆÆ-2(-m5ꙌÆÅ™³_p}à@™§g¥‰‰ð§OlDÃÂÚííëdd0ß¾É wl%‘@OòòàÖ-X³†á¼Ë¼®ÃT+xË$_ “ ‘ªZT–³èo‚5HFw—QP àiù ãæU0g*Èp…IØ]FމY+@<(bmÍwÿ~ke%Íž;eçÎÅ¡(xzV²mrö¬Î”)R§Nå76vdkEGG÷Òf,ãïocn.÷î]é‹ß9ºÎ‚œ¾!èWÆ›”}ì2&)˜~Uì œyÁ/ B>Mòg°w¯þ;Öff²û÷ÇÓ‹ê°8ôÞÛÂÞ^æömOÏ1RR|::‘îî¹­­¬Éy žmÛdǤ§ë¸ºÊKIa++É+W~£gh•–b2ÊÏ`@z{0ÐÞŽúùÕdZYå5P©`g' ^T4öÄ ÅÁfW/_VéêFººf)+ .Z¤póæ8—`Wl{ÛÛ;}Á‚I“äœõnß¶Vìª 4¸‹]@¸ú,fv¥^—½ ÓÙ_kæì™>7µImmÔuë"ÍÌäNšÐ'»êêðÇsFqrRé‰]¥§·^½Z3eŠèÍ›*ló Nœhš8‘÷ða‘.v·nŠÂܹ°jÃ3·üÀÒ Î3­s§ÑÀå,ÀÝ7œ]ço ~ÝЋ=¡6&~…a| ³WƒŒ|ÑÎ’PMM ¦x*É%ÎC®©FMs˜ë{Ÿ;íá¯_/YÖÜL™6mäãÇv""ƒ¥wPVÖæêšåï_†¢ ¦&tþ¼NOé‹–Ú£G„ ªRRZ€Y¸çâ"kjÚ·ÊÚ/޲2òåËÕ7nàéëQäåy·l‘Ù¸QZQ‘¢ééDgçôˆˆZ05•ðñkl’=mZÞ»w..².Œüqkl,ÉܼVRST$+*ÚqR*F†ü|xü.d8/Ý^À¦•pí/†Ñ76H@š[Q!ÎI±@£8rí¢‘)¿2Á€ßKÊ­m€ÿÀ¬) »ùlˆý Ç÷Áá £»;xxÀÔ©ðö-ØœL?/$„|û&+#Æë,]Zøè¡—l÷èèºÉ“cÅű……¶êƒS(´qãždeÕûø˜;9éö½Ã@€®ICÿ\%2â‚éÑ®ª«rMe;âŽñRIÜ©cÿðåKͬYo«ªZÇŽ•|ófº’Ò 2/_êœÒ¿|©[[ioo].Õ‘ŒŒ$^¼XTO¡ ÂÂ99¬¹¹¨……ÈŒbJJëˆä¢µ•–ÐÓF¬­%'%µ€‰‰°‹‹ìâÅ\šcmn¦ž=[pút>‰D“”ä=zTkûvÕÁ[$A"ÑÖ®ð÷ÏçãÃܺeµ|9÷ŠÇsŽ®¦T\õ²ñ®áEˆÜäw\º¥¸9ÂÔÔ´ij>lh …„̰·Wê{X¶,ñáÃò-[T®\a¯‘ñæMÃÌ™ù}š«­-‘–V7yò‹¬¬úÁ<—ÄçÏæwîHKóÑuvìÈ {+53P°´}òD½ @oÿ~ù©SÅ IwïÖnÞü}äÈ4 ôÍ›¿?~L¨­åFK†(4!¡åÌ™J{û~ôÊ•’\`W( ~~¥£F½÷ðÈ¥PÐU«”rr¬wìPΤì£QEL××8%ËDE3Ü ,)¨©‰ÆÆÎ±°/*"š›EEUÀ ea0ˆ££RN޵‹‹ÞÞßFŽðó+åλœ²2ßéÓ#Ô¾~ãå5rÑ"œ¸8OaaûõëøÅ‹ eeStu3èd«¾~Å~—s°¨T4!¡åÂ…êÅ‹ ¥¤RŒ³è¤ŠD¢éèlÚ$  þ𡺙—æR““'OŽ]½:¹²²NÄýü ¤¥%¸Hï튊–)S^„„”*(EEÍš:•S®À}àpíX[†.DþŽyRÐE·49L>\arrêoÜÈæáAΜá´lttô‘#94ºe‹ÊÈ‘ìWõ^½ŠOOoUWçß¶M±Z…ljff|;w KK3ÍCF¨«ÃÒ¥ ç˜/ð: D„ÁÕ‰a,©‚ AàÓÜËo !~õ)BE_}„Y»'¹OAº3+1!L¦?äÅ‚’B‡±ª ÔÔ ­ RR€Y$™¾œpútþ7oØÜÿD"UK+£²’üø±úÂ…ì—ñÏšõåÕ«ªÞKV± ) olüŒ“½DEE¤ï~Ì |è ñð]˜èV-ÜñöÄOiÿ›7ÂéßkƒÝ’ŸA{;ÕÑñC@@!??ÏíÛVK—j ö¶oOÿô‰––R/êË¥Ã.P(hJJkXXcX1:º©­­#ÙŸ‡10´³37±´²òÒˆÂÂö°0bXXcXX#À`êêüvv¢vvb¶¶¢’’Ü& Èîî¹—.Q©¨¼<ÿ™3cV­RìZ@™™„éÓƒ‹‹›ttpÁÁÓ••}”è/º$¯¾Cyù¯k¬Î’1èÚj_øâünˆGM9÷_ÿ3ð˜5ëí«WÅ[·ê\¾ÌQÍAHHh01ù( À“ŸoͶ7‘HÕǪ̂ª"?}ª1o›ü÷ÿmY¿¾AN“-#!ÑA°PŒ!1®_‡Î6‹àC Ý {Æ% VL‡{Çû-Ó`Œ~éÛ¯ŸøŠ˜üÊ~,úåOs†wŸ`ûb¸¸±uÑ&xò ¶8ÂO†‘®‰µ|9ÜgJæÆãicÆÔàñ4‰eËØ¼»\»V³eK±šV–.??›a5-h`ÅLJäçÛŒÁ©ÀÕŠïýýóW¬uïž ‡»üg„¼y¶v‹±RTÉÛôÓñ ®-$™-È7¬ŸÓT*ºcGì¥Kžž¦ûö z¶/ŠÂÝ»¥{÷fUW·c±È¶mªÇŽi‹‹ø3Ùúø‘ØÞÞqûc±ˆ¾¾ ˜¨……ˆ€ÀÿRl»‹T½Odž¥“*ssÑ¡ÊBûñÿøqm1±Aÿßÿô©jÖ¬wµµmffr/^Lå¦l'`‘¼€gcVÆŽ´íú:®êËÊ”+t{<Í»õ@ãƒÝ¶ˆˆrkëW¢¢¼¹¹Käå9•\™1#>8¸zß>3gØ¿$ïÝ[zî\•¥¥hDé㮇ȃK—2"/^Àœ9 ¤ å w0m9àÄ¡à3à:×E|Jóõ ÀYO@E¡ßËø!Ɉá¯L0à7Á¢_~f!è/Hò½Î Fn!èZ‚@V$h¨vKJ`Ô( R!3´˜núˇ´4&+K†9ºK•Šf¥¥µþõ—ÒÞ½ìk,\˜X±}»êÅ‹z¶¿´´Y[ûQk+%.nž‰ÉÀ‚eÁA,ø¤dýTDZ뫓­ºÏJö8s&ùÀx--q … & ú¯¾žìæ–{ùr…‚JIñ9¢éì¬:°µ¢û‹–Zll=¬ßL&w ‚‚˜ñã…,,DììD§LžÚZ……íÑÑM11MÁÁ%%ŒLD^ ;;±©SÅTT†8µŸ9~ie%uñ¢žžÞ Ç/Q.\H{úôÛÇ• ªß½k- 0ìÞyX“*ö/´—w}Uj(Úöõ4/µ[‚)w”öh4t„g øÓ§'ìßÏéPK07ÁXËʲÑõøö­}̘ 2‹cl̆´Ñ§A¦Mãî6 bn±±àí ÎγY—gþm ãÄ5ŸG7‚Çf€þ þ&Xƒß«ãò·ž†«`7B/3Öí‚[`Å|¸çÃ0nؾ¾°~=ܼÉ0¢(ØÛ×…‡·³­ ïßmmsEEyòòtYª¦Ó‘‘A7.JT”'.ÎB[›Ó`þþýñgÎ$O™¢ÙwÅ®ŸÄ/t<»)Q!Xì¿Åd™)›åÇà OžîßWP@=ZâÁ[6åÀ))ÎÎé?Ö€±±¸ÏXSSöb9\F}=52’øþ=ñÃbzzkר *Ê3uª??"-•–ÆÊÊòÊÊbéŸéœŸ¢¡¡A\¼2MM´šru5§ÔÔPðxJU™þozz ©²±µ¶µ±US\Ù*QWGöðè˜TT8}z4æ ººuíÚÈ7oŠ1äÌÓÝ»Ç-‰g‹‚ÐàgkùDÙÒãn¸Ð0,׊wŽ?!ÚÞÀ¼ ×jEܾ»vm„’’pNÎÎ5î§M‹{÷®æÈÍcÇ´Ù:,ZTøä aÍ©[·TÜúömûôéuBBHZšŒº:ƒ ‡„ÀÔ© 'ß¾`祾†…AAòcA¨Óè÷V»ÁYÈ aA€ßkxà7Áê¸üh͇z"{ôN}»â2Ð22ÞA§BAŒ yy ¢Â8Z^eÜ8|{;*ikËf”Ÿ1#?8¸ÁÉIÆÇ‡}ùÏcÇr½¼ ttÄ##Í8\UD$’55VUµ>þÇœ9ªœ]÷O¡ð}H擇øœ¬†ïßÄUÔ(mmU¥eLÝk„;4ŸÄy=lÔeþD˜‚‚âÝÜJRRjùùy<<ŒöîÕçÎÓèåË*'§ô’’V Y±bÄßëÈÈ #…šÊçÏÍ11Maa‰‰-šš¹¹m=9 `yxq8ûãg,//iiic;S[[iµ¢‚\^N&(•@ t~¥”²2rCC9øššüuâDaz°jüx!.pA£¡÷î•ýùg&OâåE¶nU=qB[T”3Âïß—¯Zõ¾¼¼EB‚ïÐ!Õ={¬¸pÒÿfÉ«*‘>uàâ§´9ÅŸRh*áC)dq5®©^@k+E[; ¤¤éþ}Η[^½úýÏ?3'Mâüx²„›—çOŸšÍͳ099º#G²Þé--èØ±5……T–Â8`i QQpæ ìëÌ]¡Raœ-dæÂ¥S°mMg³Ûaô(®„;à8³ÃØ_‚¥‹¦qèÌ92±¿2Á€ß+,µíLÂ9wö^€1jòx;ÇCzèÙ@ÐmÆŽ+V€¿?8;ƒ·w·ž<Ùtø0QS›š*- À:ägeµéëgÒhœ'€ƒ§¡‹ŽÂ@s3øø NŸSRâ‰'_½Ê†^ìØ!;jff›¯/þÇ­¼¼È½{†¢¢Ø»wKýýË8¼³gM1äÂ…´ïß›8Üe`¡fc?ýÀ•©—yÐŽ¼œúÊâËŸIÚ´‡XXtSDرC/:z¶ººØ—/5FFOïÝËãNKyÜݵòómÌÌp8oBBÃÎÊÊá«W'GEÕýÿx déíÿ]äç7:”­¬noÿùñã  µ²’ Ÿøò¥IOõ}‰‰xƒ@oïtAA¬—פÀ@{IÉn k†[o¾yå´þ¶­Ù…QòÏK1ÔrVrMe+R¯bÐnÅØ¥+8Æ bïÞÏT*ê䤫©ÉÑBךÒš5É( ô÷a`×áUUä³g«àìY%ÌOÚâbª»;||ÄEDº=°23áåK‚L‚ìÞ¾PV Æú0wZ‡Ea (ü¹4:§£FÁÇ íÑp`ü¯ßø‡aÚMMM666ãÇÿþýû÷ïßÇokkÛÒÒ[8íOtf  À£ð1£Ã¢¯kf™{½n.ëAIRáé†ÑÍ ÀË º-(QQäêUq8p ±´”5ŠÅLJœ:5Ž-ïiÔ¨QÂÿü£Û¶¥q24”^¶L£­zð`<'þƒ£NkkAw IDAT³¬¦çvY¾|«?ò,s¨Úóß0a‚lRÒüeËF56’V­úàèø¡©‰ÌS!ð÷ß:öFríí4?¿RKËXmíîî¹ß¿·r§¿Ámm´Ç+ìí?ki}8u*¿¬¬MKKØÍM« À&(ÈÄȨÿÏ´ÿ… Ò'M ÊÍmÐÑÁÅÅÍݱƒSå¼!¥­õŦUOW-Ê~þŸ™+0ò¾¼C×V1Rý†Ä(Ý~ÛšÓgqAP´ ÁÁ%!!¥8ÿ¡C†}{ (lØRQÑ>eŠäž=ê=¹m›9“ÿÕ+6iËS¦ä|üØtà€lPQZÚvÿ~ÙÕ«ßé$ƒAll¤6mR™;Wž.|ðÜABBƒŸ_éýûeôI[̬Yr›6©ØÚJsùÇ\SÓ¶vmÄë×Űj•æÕ«“9×j*0kŠÖ Ê^4=ÜÌ×A8xi¤-_Î(7t«sÏ5É+:¨TÔÀ 0=½îüy³;9*’ìãSäìœ.!Á›’2EY™};SRZŒ²xx =]WS“•B=xк|y½¤$&3SFN®[˜#?F, `DçÃáÇ<à6Œ^ß+àæX?§ÃèñÜýÁ@¾ž,OÿVª¢ß8tæEˆÚð$Ü:,ammýîÝ;fË»wïlllzòÿoBß«¥U^‹‚z;Œ±éÔ¿(¡:‹P2¥ÃB"¡f(( ÿ>dn €ÊÊ¢Íͬ¯¨ JHT”¶þxê„„f æ+?B~~³=55µës]IY9 àå±c¹^Ñþýq×ÌÌžÓhî1ðh%Ô]°0Ã-¹k雞~Ç7£(J¥ÑÖÞüJ¡]㺃¹·Ù"+‹``ðà/ï 7·¯Ô¡h9•J ­Yµ*IPð ÀK€—òò!..é©©ÜoÌÏ ÏÞn H×®}74Œ¢w;ÀK#£(/¯ÂÚZÒ´',¬TQñ.À5ié;/^õîè€âêÕL€kêêÚÚ(}{£hFF#ýN|ø°ŒÙÎÒáöö¹_wï.ùñµµT9¹J€r_ß(ºf €nÙ°ÔÔ¢¢š(( 1_Æã7Q0Bõ—¡j‡¥ /DÁHCÑ~>@-ð¿aK0¸†azý²²²•••Ì–ŠŠ yyùžü@NN‹ÅÊËË/_¾<++‹“³tý÷ßû€‚*·mèüÁ·µ£sP0B¯2ü€ª˜ mí £™ €^¸Àæø—/7”ËËWÔ·®\YðuéÒBfc}}=ó×ÈÈZžWXì«ØØ:N®¨±‘$'çpíÙ³oœøð9Y»'ñ¬èLÍŽ¼%Si7"¿ÁšÀ›‘CÙ6f°ô6[´µQ\\bäÀ5;»WåålÆDî ®ŽtíÚw}ýHæçýµk߉DòP5©_ष‡~d´8ÜÛM›R’“†ªId2ÕÍí+sàš•ÕËÒÒ¦>w&½ýlí2:»ò5ûD×€kgNZJßôlÝò¡j^c#I^þ.ÀµÀÀ¾½Q´­J¿7nLaÙÄÜáÏŸ¾âpIµµlîÍõëëÊ--ñ?¾ÿŽòñ¡¼¼h!SsvEAåȰTÖ¢bSP0BCãÆågQp@{v|í/Á’G+üï7Á¦9XAR²ÛÌš””T]]]Oþ³gÏ~üø1‘Hüò勉‰‰¥¥err?ÖÓ-·„‰ÚPUçŸwXøù:Öe½ MéËæÂ¸1ð½n0UÄru…‘#áÅ hüaÍÙæÍBææ|••4ww6‰ç§NÄ{F‚åËA­³9epÕ08Δ…âv›a®Øu.yü’¢@€άåä:~ƒK¦«¿ šau$ZÝ–vTM®ëècP1L“ÜåääRSSåä™Ú•••†††ªªª444ššú,@$á;:¾³0àâ3ð86N…ëÛ;,1)`±ÄEàÛ Àu¾¾N˜_’Áç$8u¾+¤§Ãøñ@¥Bl,˜š vïn<¾ÙƆ/<œU ¥©‰¦¡‘V]M Öœ6­Ç÷ã´4¢‘Q• ±±æœÔ~ýºøúõ¬÷ïË#"fI÷é?xøs÷Æ ÝF~VIz^i_ô‰¶:.'´þ$h4ôäÉ$*µ³qÿ¾¬ìз<3“xåÊ÷Û·K›š( ­-²c‡š££’°ðÿ’ú€JEŸ?¯¼pá½ü62{¶œ‹‹š¥¥Ô?¡ÈdÚþýñçϧ¢(ÌŸ¯æë;EBbXÔ±îÌ Y®j}F”îŽsB;MR­ÕÎq'„IŒ€ëTÅ¡Phvv¯)tìXÉ+Wú–´ PP“Éɇk?ξ¢3´µÑ453JKIOž¨/XÀ:îݺղn]ƒª*OV– K-µövÐׇœœnK¦*ª@à ÚIz£;Œ+ƒÿ[ز®è°¼ˆƒ9'@Z n€˜@} à„û—ä.ö8AôŸQHO‚Á5 Ó–®®nJJ ³%55UGG‡ÃÝ9ùOM*XrHåÔN®^,ü ™’[æú`c MàÍP†ƒ.g.©sšKOvî œœàGqÑ#GD$%1ïߓ޽kgÙ$"‚Ù»W\]Ki4€äÇŽuqQ£ÑP'§´®ÀI/˜9SYVV°©‰¼`Aßc™^.`á™3»hŸXn€Œá{;jä¾~ñzûÆ¡h@ÿÅ1äÈ‘ñaa3„ÂÂÊÆŽ}ΩPÙàAGGôâE½ÒR»³gǨ¨æä4mÛ–¦¢¾n]ÊÇåUU¬¿º¡Â𑾬¯'?^éâ’>eJìÂ… ?Ö‰‹cÿüS=/ÏúéSc+«¡gW¥¥ÍÖÖ¯þù'•‡ãé9áÉûþ²«¡êmŠ.>ùâ…ÓºäU!FúÞ¦.v%DnÞð3»®kŠÒ±wo\ddÅ·oîîýŸ ““UU…öïg_åŒÞá/Ö”–’ŒŒ„æÏgeW­­¨›[œ:%úc¥Ú“'!'tua÷n†ÑÓZÛ`‘ƒ]åãàÅ‚k§ …£÷Ž,í`Wpü5À¥N®¬ È üýê¦ËÁÁÁÏÏÙâçç7{ölw077ïÝgÜ€üjð‰è°h*Âz{ ÒàSŠÕ±-çýЙb5g*Œ%åp‡IyØÝÔÔ !.]b=‡9p@öîmü‘~mß.£¤Ä—šÚH€žåÓVUJHh¸|ù{ï×E‡ù„ ²ß¿7-[Î '$`°¼K–üaZùã¦DE³q5È ~YÌõ¦üW1F++Åäävv#ª«[§M vwO Ñ†þ-M\»gFa¡Í‹&vvÒ£G‹ÜºU²lY¢¼|¨†ÆûÍ›S?®¨«ÊÔ·¡•¾lm¥†…áÝÝsíí?Ëʆ̛÷õâÅ"aažQ£„==ÇÙž;§£¦Æ%™ÐÞ^flü4&¦räH‘ÈÈY®®ÿð IoSÚZwl<ú¤€rïK>;O¸¡½žÌÓ¡è̓R“}¤[ªXöⲦ(Ì„o9¦>‹þUº¥ /ÄH¢µýöjZë°ÈýL¡ÝÄäYAAãªUš~~Ö}ïðìYåüù_Åİ™™½½Ùâñ ôÆFjd¤ö”)",[·nm¸zµeöl  Ö©C??X½¤¤ ;¤;‡ÿZ¨N€¦fø ÆúÆ¥áQ8-Ÿ}–óA°û&ŒU…dï•ì9`óˆ Ñ»Køº±mˆÐ°%ÜÁð%X\‚ ™å¨þq ¡|ôˆ­0j#T7Àk7˜aÜái¿ ÂâáèFðØÜa¹«œa”*dE1„Ý+*`Ìhh€  `™ÏDQ07¯ýô‰tì˜è‘#¬·Ÿ¿ÝŠß”•ùnßn´¶îqr³¤¤UG'²©‰òò¥‰ƒGZíçϧíÞýID„÷ó繺º¬÷ö`ƒD¡)­¸^#Ô£ºTKÍžØCü<È®¢n6ŒŽèè蟟I).n:w.õâÅtÐÑÁ9cêà Üç^C‚ÖVjL !:º.&¦.2²–Lî¸÷yÌÍqtòai)5H2ñÒÛ=¡‹T}øP‹Ç3Šd«« ÑI¤­­´¤$o/GB$'×îÙó™žÏ7sæÈýû -,äûÜ«w jo³…ïºõ[)ö]‚ÌWõueêeEùDÅP Y\EMz´ŽÎ‚%ê6p³…4êàð68¸ÄÐP:&f¶ `ß$»¥…ª«YTÔâã£çä¤Ú‹ç’%qXñ—/Y“´rr(cÇÖÐh’"£«Ûí¤uu0f TWÃ;àèȰ8ž>0Ë^Üé°dÂØ¥À‹…üç $ ÀîQECÁä$Ãéyp`z ÖÀWâjCe‚ðkë€Ñ/›? ›ÐéÞ ûßÏPp@ÇnG»„»cSP0BŦ µZƒ ª9 ÔÿY·c^¸€ ÊÊ(‘ÈzºÈÈv€r‘ŠŠ VÝQ*50ÈøêåUÕ{›Ï+x©¢ÖÔÄ‘î0Š¢«W¸¦¥õ°¾¾½oïÅÙà\fiA¶f‹/hq¹aŽ/ŠFzp àšÍË„„š¡nQ É¡¡5®®™FFQÌ«.ñR‘`;»Ožžù_¿Ö‰r=稬l (ß´)EE%¬«ý/B-úzíÚ÷ââ–¡nc(-mÚ´)Їç:À5Üÿ±wÕqQ5]øÙeénÁQô•Ïzm}Å. ì.lTT0ÁÆîN0A À@¥‘–îíï]ØDñùíË™™{ç÷Þ=sâ9ªgœ‚èôš>× Ý‡oû€·µ{G3 >§è¯}Ò×­{¸©«Ÿ‹¯i„eË>]»úp8Õ= ©©,YÙ@ åC` "âáÃs´yóÄP¿ÎšEÒ»7%ÍÉP·û …cí ÌÈBg¡d¡ÄjPâæC`GZ¯#tV­‰Feý§¾OÁ˜7oŸWLìT«Ña>þ>¬>}r(±±ZMšTpÄûûÃÂ4‚ƒa($aÅ¦ÝØ¶ƒúâQY`êÇxt)bËÌW™h;Eta¸pí7"£×í`cV»ú¼ Ê‚edddcccccÓ±cǯ‡Ws]ÅÅÅ&&&¶¶¶óçÏpäÈ‘sçÎËÉÉý`ëw㯂EìõÂÊ›0ÔAè&ðChÎycº Zj!ú¤%àM(,f@A îÐP6í-‘˜Œ›'ðßáaCCafïÞÁ´buöjlÅ&MJˆ‰avë&wäHu>¦÷ïóÍÍ_Q©°êÔ©FìÒŸ?wíz;;›±ukW>Õ{=`ñ¥ƒO?Õ¤g+JôþR ,zéûŸÏrr vu c0¸RRÔ¹s;lÝÚUYYŒß¤a"#ƒéë›ûôi–§g6¿È´BTTJ9ªªª¤®®ŒŽŽŒªª$ÿ£«+££#ÍÿÞ´©ŒŠJMýqyyì´4F^›ÿIOg–ÿ™žÎHKcdg³Ê½™|hiIef²äå%zöTí×O³_? SS¥ß%b‰Ãá>½ys@FF)€¡C[¸¸XèéýšøŸ…Þ;}|c²¿–ë'-}í@àß÷«¢-££ó{ô¸[PÀÚ»×|ùòN5ÂãKË×oÞä-]ÚúkÞvQ¼zUÕ{":£Èxƒ7›[™«*ôÔSõ\e¥ ]¯¡ÇuTQ$9¹ØÑ1èäÉ(¨«Ë¬ZÕiÙ²NRR¿™[òâENJ =&¦äËf¹ ‰ÃùöKC^^BCCJ[[`÷ÒÐRTä±Ù’™™Ì¬,9*+‹YCæ55IMÍrš”……ªB×®*ÕdÝ6L<}šº|ù›°°\=zhíÙcþãáVbQw÷¶(âŸyFܺö8‰sXcDU}ø‰,üïmyúr]ϪŠŠØææw#"òÆ×»rå5uäHâ‚á::Ò‘‘}••«|/qML"ãã™+WªíÞ]Ù|uù2}Ò$ñ¹MÎΰ·GÛ¶ ƒŒˆárë>lÞƒÿYâi P¹ù*î.šj@ÂÌ—‡ƒ0j Ùèà&þöèÖ ¨Vù†‚emmmoo?`€0°ÏÓÓÓÙÙ™Ÿ*÷#­ß \ÁŠË%zªp'£AM±Û &÷ßcØVh(!î8”åàmzÚBAñ÷ © LôÌ‘š÷sÖ_xä¢"t耔=йs+œ4+‹×¶m•ùº+VïÛÇÕÒ¢…†vÐÖ®ÒPPÀéÐáEZãÔ©Î3f4¯áõîØ´~ý{%%)ÿ‘ßf„ÿYà0èÛŰí‡ÓeY6n¸ˆ©æ8g ¥lÈKý± –¶¶vNNކ††µµõÆ ¡2Õ€ù‘ÖïLJqý¦ýB˜F²÷ÛO`GVÞö黎`(ÙpA(´ˆÀŒ¬;,”¸ž$Ԧ俙„[1rýÖ-%%’šZùÔŽŽE@š‰I·r°;ár‰µu4ðaĈ¸êçéR ࡦö83³¦¡ë<±±ñÜ ®ÔwÀû'ï'ólÏX›»èiŸ±6¿;s’“yw1.¢ñ°k=?g‹‰ý­áå•Ò±ã ~ü»¹ù?¿ô_=£ú@QûÓ§’7or=<2ΜIÚ½;îС„mÛbŽK¼};ÝÇ''2²(+«¾oÂ_‡Ì- IDAT‚äda$»šÚY'§ ãwd/Çùqëƒ{M¨I"Ën]¥»3'Õÿ<·m à'ÄÆ|»wÆ<þý׿únwîäddÃÂĤSìÞ] ¤uê”Åùê¿=lÈ„ _ 9BäZ“Þ£„’°8BíFdz’”²ô§àxBFdF“ϙɫ8B™CdÏ9‰Ã à\p .•R´y3©ÑgóæŸ®`ˆ>|øp:žœœ¼ÿ~--­   ~“¤¤$‹ÅíÌb±¤¤¤~¼õû/áÇÿ¾ ó£:È©²L $BC¤æ“˜²[Ù?šP†ÙÑ$%[ ùA(]‰‚ÉÌHJé¤ßXrètåS .þ)*-åµhñH»xQÌc™œÌTU >œ9“ýu«(úõ{xØÚÖø1"¤¨ˆedtp5ê ïW§ˆ¦¦ì7ïÚj¤³è»XgéƒÐäZ¼  °X\7·míó€…âfcãõéÓŸvñ5ŠŠX›7•=¸IIX¼øU^ÞŸ SÆy>äkWëõZIL½þMKvò… ³g²éõÔéé™,!qœJ=~ÿþçÚŒÊ<ääÆÇW·Ùûò…­¥ |8xPLêwn.WM-H{ò„Q©éæMñ{ï„$"׆蚒·"Ƀ£W˜‘¥{…’ †’§ry¤Û;²ÅC I)$òÛ Ÿ_40ÈÏÿÔ‚U GŽ8p ÿ{T°~³ Ÿ™2Sñ:o2À¤9¦õ‹ûÛ‚¦îí1Òt¶—¹ÃÍ 1¨'ŠK±¿,@Vó¦À:'¤fT8ÅÁƒPPÀ•+xð ‚\V–²e‹"{û":½òî¡Y3)W׿-JŠ‹«®ÜÑ£Æ22Ô³g“Ÿ=^* ’·oPV–ºs'qÏžo¨K(ê6rþâ’„3úÙªòéùŒ>N/_Çåü‰ýtHJRíì ãâÆoÞl&#C»q#ÞÐðú’%¯óó¿‘bù¿)ØlÞñã‘mÛ^ݲ%€ÁàØØ´‰Œëêj¡¢òÛ¤;Tƒ°+J«ºôpàR¿]€N“{×gQ=×tOL,š8ñ—K¶l1«yÔ)“É[´è#€Í›ÛWS:‰̘‘˜™Ééß_iÁ1<[·çæò¬­¥ ¨RT„¥KÀÉ ºº†,Þ€R:úZ GYjTø'Ü})¬š"¼ ‡g”å±ÖF 9ÿïÑT+ÊbTÖ>E ¬(ßÏÄèÑ£ËËnªªªææV(Y““£¦¦öã­ßÆ«`ñÑ«9¾”`ÏkÁŸ;GAI·ƒàU&™šN…EXáPáà-Zì¦ ¢¤¤BÓÔ©²]ºH¦¤pªÀŸË¿W¦LQ7Nµ¸˜7}zb5•Û¶•··oKæÍ +/òM´o¯|þ|_*•boÿîñãäo¨K¨·ÓŸtùƼøs&þå¼ö€=¯…V®YöÓQÏq$ÌbbÆÙÙr¹äÀp=½+ÎÎÁLæW%*ÿD4œbÏu§OS»t¹=gŽï—/tss-_ßáׯ÷kÓ¦^óëtµÓƒ>d(6sí¹©Dª¦,$GŸÅL-üv¿Ÿ:óß^ÙÙŒáÃ[®[gúíeptŒŽ.62R\¶¬ºpÉ£G³<(PU•8uª%?NtÁ¸G–R©Ø½»ò?}ãF¤¤ [7ØÙUß~/()b×F‘ÎGÁãa¾ t5û³°z4Ô ”…Mîà<òÒ”KaúË` ADü›FFF!!¬¡¡¡:tøñÖš_£€7É„â@dÉç2¸mìˆÉ6alÖ¬CÉX'áÀÁ‹ ÌÈnÒÏ)D¡-¹ïUál615%Y¿¾òÙ½½™@šŠJFVÖW¡X„äåqš7>89U²Ãdr ŸŽŽ15»h6lxÏi¾ªä·¯öë5éÝ×NÔ­ 5ëΕ·É¿zju…€€¬¾}=øY-[^:w.ú—{lÿâÇñþ}fŸ>îükûöW¯_ÿô«gT'˜gb)3ùb%6Q‡VMù~Cþg_K_8ÃïcWŽŽ.––~@¡xøùåTÓ-6–¡ |¸v-Wl›\ ÍÖ¶2³hH¡Ñˆ„ ¬ /)%­ºè#g… hBéJdz’Ô²X«›¯†©¤˜.l¼G`Gzìò”Z&p k¼jM4 :ùùŸºwººº0€ÿ}ïÞ½“&Uˆó›4i’‹‹Ë·~7»‚EwƒÀL¹-–²H˵väÌ+$5‡ÈýG(ÃÈ›(„‰%oI¾ˆ<†»è–ÝHqEÇý»wDB‚HI‘+O`àÀ mÉñ*ާg…òAR2àýûêB^¼È¦PTêq>W¸“S“)fãôàœßg‰i7DŸÓŽƒ×ïh®!ª]ýZÒö}ûB7…Óááâ ±àñˆµõÀcöìjº±Ù¼="Ó¦%ˆíàïÏ¢PÒdeÓ“’*·s¹ÄÜœdùòÊC–;ènÿÑpøË ÌÈŠý‚?9\b8`(9úP IÎ%r eñH®$p Z»I~-㟠ŸüüÏÏV°¬­­oܸ‘žžÎb±âãã·oß®¡¡Ào-,,lݺõöíÛssssssõôôŠ‹‹¼õû/áÇÿÖàÿÿòˆŒ#¡8we!‡—ü ìˆöJRX¶QXs–`(éc/;t)Yí*”°ÙĤY/bëâcÞ<++RÉJÊ–H“”L‹‰¯â,\˜|èÐ!¼´´º—õäɀǀo¿}Í"ÈËcò«»Lšä]«u„˜‡î{[¨ê1’2í¦èë{Íõ°_=µ:›Í=zôcyü»­í‹F’føÇ **oíÚwÒÒ'7YÙSk×ú׊n]ã“÷ù3ÎX›ê=ž2½Âãii=wWSåJÚÕn]¥;¶_e÷Ô üüÒ%%OP(nµ5ž=› x¨«?©>¹uÆTàC³f¡¹¹âSA--³´ *Wã9x¤ysRX±%4‚H¶ ÍH È{.0ŠPº¹^$£lü1ÁPÒfa–ýVL6fŒ`§*ÚZZÊ50>¬\Y³ìˆšÚcÀãÚµ´^{ÙéräåOnÇGÔj`!üú¥ÝM•§™ô¥M½*úŸw.ˆ[.´J«ý Q\Ìvr RT<ݳçÀÍÐðÚéÓÑØïtÃYퟋ{ûv¼•Õ=ÀMNîT“&ll¼j^ä®®ñ³V›M/½7{òn]%ç¦*=û-¬``ž~³¿ÕÔ¯U+þ'îɃŸ2Z!#£TKë<àfoÿ †…JÈÉaij><ΫîMëï_B£P©^¾¬\k–¿à·oÓ4-­Œ‚‚ 頻 ¢¬Lrûv…Q\.1J C–nª ¾ŒÀŒ¬,óPÑ™¤ùt‚¡äš¯@ò6^@ÍX–kîìGà@Œ~ÕÄßWÁú“ÐØ‰Fù—_ÈÄÀ‹`r±©7FÀëOXv%Lx/ƒ¶칃ûï % ϲ²Ó˜Š^±c¡ð˜‹Ö#, ²²xt±Â¹®^Å()ŸECSS¹£Gç•–’S§Tºw—üš9  tæÌD:œ9ÓÒ¢B±Qœ8ñùüùÔü|ö›7½jÁ‡~çNâ¦MJKÙ÷ïÿkhXì£U!ð´Û³«ãÔ Ïš,fÒ„ Ç]èqh4o®¡oØaÌø6Öª9H Q?l×5Ç—/ôC‡>ž:•ŸÏ’••`³y&´]¾ÜX_ÿ×ÿ_~ mµ¿¬³gcöî MN.ÖÓSÊÊbŒ¯·reçvíP¹›ŸµÚwgNŠ{|Ÿ%!u±óüHÎår=.ü”hnŠ(Úý;lÄÉ‹b›ê#F<ÉËcÉÊR>,!Q ×E‹ÂCC‹”•%îÝë^û+‹EÌÍ£dd(½z)îÞÝ´RkAA¼¼²¥eŽ´4Æ—™7O^´uî\DFB[ׯWuê ŽžM^W¡XövŒÂt(ÊâÎ^h©€«;nøAQ7 J† =„b&z·ÃÖáCGï3P‘Ã?èßø&÷Ü:ÐÔµ‚¿Lîq„_ìð{,|}u„Ï”#y÷B°ôØ?,´™ô\øÀñzNü®p8¼GR\]ü½SHHPFŒhµl™qÕTù‹š#**ßÕ5üüù˜ÒRccµU«:ݺ†üà¿>y=º3}|‘´òiÓ¥)J­Ê岜’éAÛ䉯*ø«žÍ‹c§Ly®®.nÓ¤I-Îþñc‘‰‰€  Þ;V™¹m[ú¦MiíÛË„„ÊȈIÀws+;· ];ÚÇš’"e8¢¢`l hÛV(/,‚¾22qíÆÊG,‡»VO…ób`° 7i¹x°ƒ»€wú퇊¶CEVxbß n‡ ˆ ¥Ú2¹gÔ&ФQ+hÌ4 a¹0Æ <vfh§†èœ tp *Ç|’2RX6¶\t0ÕÇK”Ð…œXT•Ḗ; ¤œœ@¡`ï^dT¤ËZ½ZA]êãÃòôÏzµaƒŽžžtX}ÿþ*™ (>lL¥Röì‰-©ª›XìÙc®­-ëã“~òdÔ·{×=z­ZßeæÜæ óßïTa¹I>©¸™­á«\1Ü,œýëæX‡ Ñ¨Ã†µxútHHÈ;;C))‰Û·¬¬Ü»t¹}þ| ›]S>Ž¿ø‰ðóË;öiÇŽ7Ž‹ Ó9ýú5uw2fÊ”vªv ìÊ…/ º»oÕ®ÔèÙ ý·—kW :º$ee5 :Œ3úÂáÇ/Ô¿v•“ÃX±â-€}ûÌk¥]X¸0œÃ! ¶ªF»Š‹cîØ‘A¡àèÑbµ+:8:ؾ]Q²b‘³Õ«Áá`îÜ Ú€ ÎÈÈ„UØ  ƒ¢áá yY¬˜,¸=FZ.ºèá_3dË}X3P ]}.Àáw Ràh-èà 'Äë¼Q£ñ*Xí” 8gc@’*¸;^XÚ:êbŒlìx$20´”ñ6^eJ˜ƒ(¼†¬<á‘gMDwS$§Áùp…3öèáÃQ\ŒíÛ+È••)kÖ(X½ºˆ'î×SV–zâDK [¶¤ÇÇWI=jf¦òøäõ¨êcüöèÔIÍÍÍ*1q‚“Sw]]¹  ìiÓ^´hqÙÁ! '‡ñ«g×(ÀbñΟéÔ馕•ûñ4uÊ”vaa6^^C† kÙ̽uŠWÑYG»ÚçÉ -ëÍ ¾sÔ*h#\Þtï7Kâ2¦{¿zøÔOñÝ–,y™I·¶Ö2¥}­^¿žöâEŽ––ôæÍÕ œ7/‰ÁàMŸ®nm-^ Û¿¿$%…Ûµ«ä˜12¢r__xx@Aë×Wèÿ1Ç.€FὑÜ@ØœƒL6v߇‰‚nÂá ,øG0dÓs0¹˜d Ó&R—00RÅ_üZ4^K¦ŒŠmÝ;±À¦Ì›!­®oMÛ†ƒFÅI?Äg€¼ –‡2“U9±»ëá‘©TÞ*»#6¡ÂIA£ÁÍ qqä‹É5o.ÂÞ¶-HìlûöUœ0A­´”7~R5åìl¨¬L»w/ãñ㬬ãÆéѪ €µdÉëo÷®P(’2²”˜ysß;·,®W¦¼ÎAóé Í„]ý¡8ß‚úRKKvÍ“„„‰çÎýcl¬–‘QºeK@Ó¦—¦N}‘÷íñ ¿Åj—#3“îìܦ͕iÓ^„…å6i"·y³YJʤóçûý?\?¾Ú·>¤º´-ê£oŸóqNÀ.Efh7F^îWCë'_º''G;~¼w­´^:»fM€íÛõUT$«êvþ|ÎÓ§…êê4gçfb;äåñœœ 89)Vš€½=¬ZíŠå°®›ÓÑÉP(üÚ|uâ Rs`ÚC» $`?Š2–‰‹¡’€Ã?‚küQÊ‹* p‹·>WÁâ£W|¡ƒ_3†BS?pòCf ´×Æ„î`s±ý¡ ÿ¢¡ÐTÆëH< H6͆EgÜyŽÄ4áa»vÆ”1`²°rK…ÓéëcÚ4°Ùظ±‚\F†²i“€K—š±Ùâ§êêÚ\CƒöäIáµkUþ¬jkK¯_ßÀòåÙìÚ9¿±TV–ºu+áÎÄZ ¬#¤ð¿È±Kì>ì-§S(¥r´ûšD•¶é~ä–––?4Åz„”uêÔö¡¡c|}‡ÛØ´ápx.Ävìx£ÿŸ‹8‡ßeµCCsçÌñmÕꊽý»ÔÔSS 77«„„ f2ßß0ðƒ«íê7öÈ;Uèýì–ê;3h¿4§²éTFõGˉü JK9 ¼°m[W=½Úå8;JL,55U¶µm^UŸÜ\ΪU)öík¦©)Þ¼}{qQuÀéÿý¯Baœ[·ðú5´´°lY…þWïáÅkhiÀaeù†#èiŒ%ã…æ+ç[°¹Ì|u/ïÑD óú†¬} Á‚nh£ ï2q%Nh>¨Øuðiôhì ÖsP€Ý¡H*€>-ño[±°³lû·u8¤h8÷Ñ_@^K†À¦2Ó‰¹1šk#"ËöU8²óz¨(Áݽ+È·n…œ®]C@@ùôérRÍ›K8;‰ª†mÇŽ¦–.MÎË«rw°dIëöíå##‹]]ãk¸|èêÊ9:v°`_C¨‘ÇÈê‘R\–mÐÑ”%:Mþ„Ùª`ŠÎ¯˜Ú¯„¥e“ë×ûEE[¼¸£œíéÓÔáß^wu §Ó9¿zv¿1ÁÓ§©Ã†=61¹yüx$“É:´…—×ÀÀÑvv†2ßó“õû!þ™§û‚Yýl6,½Ê+SÛ) ý?Ýûñ4•'æµ£cjöµ°>±ví»øøÂnÝ4—,1®ÕÀ˜˜âÝ»?Q(8pÀ¨š”ÃU«R339}ú(N™"> )"‚óâKOObçÎ ÞC.W°‘Þ²¥Bæx)öÛÀi=TDÂóððb“±²¬òà)/¤dä †wBæ«uƒ!'¾Ix E)Ø—©Ó+Þ‚+:Õbþ¢îÐØ,s-ŒÕƒe¦çþ Rpä=>å@+uL5—‡me› …š"^Eâe¸@â²*Џûî>Â#kkbÓrX²LuEW‹¬¬¸w¡Ñ°}»âóçÌmÛJ‚ƒÅ+ÿ³fiôí«˜‘Á^·.µª+’’¢8ÐqÀÍM›b ªê&óçwèÕ«IzzéÚµïj5°. £ZÁ#A8CÝz~R.aIHî´àªÊWCÿ|´m«äêj‘š:ÙÅÅ¢ys…èèü¥K_—]~õì~30ÜóçcøæÀû÷“$íì #"l<<õëW9ÿO‡Aw·›r}ÚÄ šÞ ]Êå„3>üÄ€Ow«h<~rUMõ€wï2þH£QÝܬjÅËÀf“™3C;wVš?¿•¥e•F8Ÿâ3g²¥¥)ÇŽµë|d±ÈĉùìÁƒeºt©àd§À¬¦Ù…¹…Xå {–BU Øìº›Æ ÌW7œ ]Ì*S§ìŸÀKhÉÀõxøe@K«…|ñ+ÑØ,NÝ!# 1xŸÆZ˜Ü ,.6?tØ8Ò4\y‡ÐP’±¶–Å]5QÇÖ¹°hŠE2Í€±!âár¢Âíí¡®Ž/àåUAþÏ?R£G°XdÒ¤|CŒ×‡ŸÃ"-M9~<ëի⪮hà@M==9:;zô‡ììZØ¢¨TÊÉ“½¥¥%ŽôõÍøö€º„N—n•$aÑWÇÞ(—p(ÝÞí{û}§ø½¢‚¾†²²Ô’%?}ýz?ss­ò°¡©SŸ‡…ýúȘJh€«‘QêàЬ٥iÓ^DDäµj¥èäÔýóç‰nnV¿;÷XmWûþ‚YÁžÏܺ® Õ>wÒ†mk—´7Uj÷ï0½ƒ¿–?‡7gŽ/—KÖ¬éljªQ«±+WFøù妤0ªŒmg±ÈܹŸ Áúõ:â½Ã›6‡„°Û´‘:4\TN§ ’™vì€hRá§Dì?.ŒÓ-‡ýAdæ¢wL)[ÎS^øœ £a<LJ°id%àV$^'CGKÍ€ÅÃúwàØ JRµZ c°ê,´RÄc`Ékð•šÿƒ, —Ø-Ô0Ë<"4b-U< …ïGd ztDR¶™FƒËptAªˆº¢¢‚5k`Õ*TJ¼xQßȈÁÙ´I¼£P__fÕª&<æÎMª&ÊÊÕµ£……jR}âÄ .·:*kÖtæñȬY/Œ_ùˆ›$VÞ7áá¨È ”2ÿ!Xq5ÌþF¸ØÎÕãw‰ ª’’T›6oÞŒ|ùrØÈ‘­8ráBlw;w¾¹xñë7âÓÓK¿}”ºGYíÂBÖÓ§©ööï,-Ýÿý÷ñ–-99Œ^½šÜ¸Ñ/.nüš5&ªªÒß>JƒG­Vû“×#ÿC=Ö'ª´+*1óæ¿ß©Ÿ]å“Õ~Èð!‡NTÕZر#888§}{å º|»·®]K;p AR’rõj *•‘;3"#íÛˬ^-ž‚îõkÖž=ÅT*ΜQ0ÀB´iϤ¤ {wŒ]aÈ’M`²0c‹´Ø¦p-³Kæp¨Â½á¼¾mMéLýãSç¿…OŸ ÿü¹øÞ½Är¡ŽŽœ¥e“~ýšöêÕ¤CÕÆ¶Hii¥¯^eøùe¼z•˜]þÎ8°™ššÌ²eÆÝºiþÒ þbìš±p³k±”0 ¨IQÊÌ ý¢,t :º2Ê*Ÿ”[¶Ö0èÐá¿q¿Š‘èè|“[L&÷éÓ¡ÖÖºµXܽ»_a!çèQã¹s[VÕ-6–Ù©S“É{ú´½Xj†’bjšËY·Naûö ²³¡§‡ÂBx{ÃÚZ(÷ðÂðiPUF´4˺8\t‚lœ%ð„8þsèBJ—‡Ž[•SS1£¸`î}´WGø|HR‘Å@»«(`áÉ` h$µ–D£Qu  4jYÁJ,EkyÊ`ò ;À|?´QB„ ¤%Ç@ÛÈ¥Ãk úµ€•7±× Ã:Á}” ÕLä—À×–Ç\´ ‡®ÃÒ>'„Ô&Éi0ì’R<¿‰D69gÎ`Æ ´nÈHHWÜ3oÞ\´ukqëÖÁÁšJJb~ _¼(²¶Ž‘‘¡†…uÐÓ«rÃíí=p ?!xð û Aµø yû6³W¯{T*åýûQ&&âC;ëýáb»˜îb[¿.§3ÊL÷òœn2’"¹zp8¼Ü§OSüü2^½ú’—'¤OÓÖ–íÖMÓÒ²I¯^MzôÐ’”ü3ÍØññ…ük÷òJIHÚƒåäh¦¦––MzõÒ¶²ÒQQùoÊ…»iã\}XTá:´Ëœ|P†Cí&¯Õd^xêöúGúôñðó˘3ÇðØ1«š,.æôèñ*"¢hâĦ—.™VÕôïãí]4s¦ÆÉ“â•°Ù³ Nž,51‘ô÷W—’ªð–^²`èPxx…,6Œû"&´& î IDAT±h†P¾ë<Ö@Ûæ½ Yi`s ? _pm ÆZÀÙ×°=‡¶ZˆÜtÚDJ!nØ`L˜ï‡£Ò÷€ÛgÌmEyø…ü«U£eù«`Õïõg± %MyÜ5Á%0¹…ð\ì1¤`8¿‚ýStÖFàP)È.F›õ(bà͘·€áx ƒÌðÈApÌÂt°Aj&NnÄÌÂsmÛM»a¤`/ÐÊò|¹\˜˜ <`Ñ"_AŒÃ…Eöû÷ìY³äNœ_PlÊ”„‹s Pzò¤:딃CÌ–-1jj’V­ZÉÕ|}æÏ÷;z4¢{w­×¯GÔ*zô§#þ™gÄÍ«ÙÑ‘üݳº¾AÉ—Œ”·¯|]NÇÚPóÎ"s%Ù*)mDñÇTÇ«\.‰ŠÊç›p^¾LOJFï)(Hvî¬^fÜÒ–•­CRòº^m¾NÉ7S={–&ÊŪ¤$Õ½»f¯^M,-›XY5‘–þóUð®ö¯O˯†ryÂ_³ôW6ág$Håð I©e‰µc׫;>üqáÂW::rck¥"xýzš±±âÛ·–rrUÞgÏæØÚ&jhÐ"#44Ä<Ož0ÿý7WJŠòþ½†±1 " žCC°Ù€‰‰pÈvWlp†‘>‚<…QYI0‹âRf`rØá‹õÏÐMþ³@¡ 2n‚„Œ‘*Š8hÿ(·ÒÉ蚕עP(¯M cãU0øhÔ×O¡PàA Ú4 %cð#¨H!v<4dÀà ýA$âò˜ÐÖßÅŽGÐO–@nZÍDþ{ѽÌ'xÕÖAM Q·„ ™,÷ElmÇ[á<<0|845%% 366É13˦Ӊ‡‡ÚСblT99ƒÙٜ˗[O˜Pe G†}ÿèQf÷î*>>ÒÒ55W²ŒŒn¤¤”8`±hQÇŽª.×Ó~YØås2åuO˜­às»óѵ•êÃ嚊ßޤ)_íF¾¿ìéÓT?¿ŒÈȼòFíÜY¯…X[몫ÿdΧºXí’NPP6ÿr^½ú"JTÁ÷Šò/ÇÔTJm\nÑêW;þ™çÇ[×O¥«ÜS®9Ô7á῱7)ó£Ðp,Xii¥FF×óóY·o5ªUÍîÛ¿bE„¢"íÝ;K…ªºåäp ?feq.\h=y²˜Wkv6ÏØ8+#ƒ·w¯Òòå‚¢Îå >q"®\­-NŸII‡•?¿ìàø¸²C áò`8±i¸² ã{Àq_̹ˆöÚøèy è¹"ï©°n ƒáQ2áP/X§8`…GH oz …‚à:ÐLµ‚¿ V»g$¶GÁ÷Åzˆ')XÔ,àtfº£µ "BZù¥h³y¥x±}ÚÀÚspº‰!Ýp“ð°C–àá+ØÇiá½'i[ÙûŽª+@Ø·¯dÅŠBMMjx¸¦––ÅèÔ©ìY³>kkKFF©ªV¹ËËc›™ù&$”.XÐêСZ¨J÷î%ŽéÙ¹³ú•+ÿ34l`IU„¼tÜôþØ…Òª'Í–ñ¹Ýù0ÐQ|²¢W õZXì'ÒÓK}}3üü2|}ÓÃÂrËó!¨TJÇŽª½{ëôêÕÄÔTCWWNQ±FFÁ:Grr˜¥11ù~~_üü2‚ƒs8Až…‚T­¬tøfª-ªümÌà»Ý#=ºn43H§G¹œJx£"/˜§¼¨j`ÛCFž¾\Uk½Ë%S§>¿|9î¿ÿZß¼Ù¿æß¼ÉûçŸ7l6ïÆ ³ÿþ«Ž?ÏÖ6ñìÙœþQ|ö¬½ØhűcónÜ`XZJ½x¡.Qñ½‚.] %…èh´h!2dnx`ü\9*ÞyŽÑ« $ˆhZæË;ó3\…æ+ú›˜ƒk³1¶+ðU]çgiøß}(J"v<´e‘€þsй ÃjƒõWÁª4êë§P(7ÓȘhJ!ÖÊ4­@ð0R—ÀäÂ3á:‹{À–ûpð€e[ø®€œ"´ž‰":ÞíC·2O]\2ŒÇɆ÷Qô‰2½a7n»„Bôì yyÄÆ¢IEs.‡~ýrž?g)s玘ê„ _¿˜gÏŠìì4ÜܪŒÖ\hañŠNçž;g2uªøjb±m[àÖ­M›Ê½~=RW·Áé+ï»øìØ  TRþt—¥Ÿ•…ÅTuTdž¬°4nV;fçÆŒâböÛ·™|›¨5ÈÀ@%**€ŒŒ„®®¼ŽŽœªª”ªª´ÈGð§®®\Ó¦òßç€ËËc¦¥•æå1Ë>,þ—ôôÒryVƒ¯N)(H³QÑêÖ·¯îoÄ´þ«pw椰§ÏÏš.ŠWÕ/Js˜“Bf‡T3pÔ™+¿‘¡üÐ…ÿþksð …ŽNMßH_¾0ÍÌ|SSkÖè99VÓóåË¢¾}c¤¤(!!ôõÅÜNçÏÓ§MËWR¢„„h¶jUùVïßOŸbõj8; …¾þè3²2ˆx‰–eoßRŒÆ"1 ‡VcÁXËC‡ùˆIÅ¥•˜Ø=Ç¢«è¨‹M Rð¹úÁæáƒL›€K`z a¹ØÕ«:À¤ \NÅ䦸Øå¯‚õëѨ¯ŸB¡Bú¼†O.VëÁÙæúÂ-ÃZÂ} xÄ`øhÈáÓb(I£˜‰6ë‘U¯¥ègkÎb×-LèË«„GÞrÇ¡ß!W ]!—ˆŽÿ€ÍÁt ¯5 wïbÁ:Ty†))ÜN²óòx.¨Lž,¦D|L £sçH&“çã£oiYÝ–ýرÏóæ…ÉËKøû[UY4¾ nÿþüü2:vTóõÞ#‚ƒÎžx¶q5áñXRç;/ŒÖºETå%ï/µ°hûË‚ô_0™Ü÷ï³øÆ­âbVPPNQQM³®$ÕÔ¤ÕÕe44dÔÕ¥ùßÕÕe”•¥JJØ99ÌœFNƒÿ%+‹‘“èáÁ)ðem­«­-ke¥cn®%'W‡qc>y=:=oáÉ.Ë3å…&%V¾m k³ÂÄj¶ûw؈“?T÷ó§`ûö  ÞËÊÒ<=[ZÖ,¼àpH¿~o_¾Ìùçu//s­J¿“ILM#"#ŽŽºë׋±r•¿ÏœQ™>½ò ùÉ |úµ2×"‡³ÄÎu°_(ì¼|ö_F×x{eþ‰sÞ˜îý¦øxT0Øh·)y¸3#M`Ú]œÁ”N8? Ü"1×­9Òx—s?HSÕ­äj©`½¯M [£V0ðWÁ"„ «h|샶òȤ£ý5°à9ý›€õ9Œ®áÿ@È2ŽA¡ "~•lΜ)1£@Y™ªÙ¢…ÛÀæÍi[·¦ÉVJf©[Û³g“Ûµ“ÿÞJY¹¦?K,++÷°°ÜþÑ}üøß qëÚãåóy—B»j<+¸‰Ðñ!/M»¹ Ç cñUOýü*¯ö_T:#jO*72‰ššrs™L¦xú4##Ùéb›PµyLWWNGGŽÿ]KK†Fû3s:ÄÞÛ.¶ó˜] ¤…æpíâ´™AûTé9ÕªýყɈÙàÕ'._Ž›<ù…B¹q£ßèÑ­k>pÕªÈ={>5i"Ø[G§ºÐL‡´-[ÒõõeBB:HKW~—òxèß?çÙ3Öˆ2wïVv)øøø-[fˆÝ»+Tép9e›¡× _7Ûaq0› ïΣ‹@XX ƒyÐQņqÕö?ÅòèÒÖBAX&LŽFEä´Q² ]ï›6Ðû5|s±¾õ¿n5\" …‚·u  ˜7j,þåO ÆùØèàºì ƺw謎€Ñ à]*ÌOB††˜Eh¦„&ô6àK!î/ÄcØw+NAOa‡ [ö½ Dß9‘Bøu´)«·Q\+¤fଠ¦Îdölœ<‰ñãqå ¾Æ˜1y·n1þ÷?i//µ¯c˜LbbÅØ¾½éºuÕíêètn¯^¯ƒ‚ FŒhrçNך“!¥¤”XXÜKN.7Nïòeë/}ÿîÃ…³¹lå¾þ8Ÿ–Ë›hàNŒ:×W.GC߰Øñ¿–¼§1 ¨ˆ›ËÌÉadg3rr¹¹Ìœfn.C]]:#ƒÎ7A©«óÍZÒ22JßÃ<ýµƒgø—»½T¡Û«U~Üôàò¬ œÆ4•VmßÏž¥ýûïC‹WÛœw÷/#G¾§Ñ(ÞÞ=­¬ª«K]î ðönß·¯ÿþý%Ë—jjRÃÂ4µµ++ú/bÊ4mŠØXȖ颙ÙзD~!îŸÇ~!ËYxŠ¥±¹ðËNÂ庵ÃÛ½ RÄüÐ ¹Œ‡±XfŽ}`Ý;ì FOm¼ p36Ð’Fl_(Ñþ*X úúËoÁTôŸ£„  X©Á…áu$ádoÌ4€ÿ®ãv$æ˜áØPે‹nËMã±E„~|òF\z„Axt@(¼|“@[Q¾ÂJŸiih×t:Þ¼A¡ýE€ÌL^ÇŽYYY¼C‡”,vð͸rÄÆ–tíê[XÈqq1Z²¤»ÀœÞ½= Yöö&;wv¯ùÀzCÂ3/w»)l:ÀóÖƒ¶ú¢€ ¾Æ¯cØ@¶ãñõ‰Ó¾‰sϳ¹Â¾|˜vœÆ«ìœmPt |„†æXZº±×®5Ù±£/ŸOŸJ»tñ),äìßo´tiu¯»òxÖÙ³5ŽÏÅéÒ%›N'w搜QùËb¡C|ú„³g1mšP>cÎ\ðþp?'½‰ùNÐÑ@äM(—…u„F—¥àñð~?LÛ€óØßF×–x· |“Ðû ¥·ZòH)þ5Ð9ð m°xèø±%pë»þ*X ÷úKxP ,M"û›À–¼È… {€\ù×0Pgà #茻I*®Ù *lôÝ V¸Æ_GbÁQ€‚««¡_f¯ú’‹ÿ̓šVOÅÐ22¾|¡÷êuOSS¦M¥‹­knwçpÈÿþ÷–B¶¶ôµkߨ¥sáBΙL&yñ¢½šZåð B0xp.NÚ¶¥<)†]ÌÅ—.ANÏž¡<¯0$SÃûèµó ñ¿ù fâ?káñmFa)zèÃe63Ño?lŽ`ÄUä10¨-ÖYÀ|?D䣕<Îö—x\J…4/- AÁƒ U¡„•’Ž5ÛHR(øÔ&лñ*|4Þ€†ÌBVê!ª³p'ÆëGð&Ç"@_]tð!;|@F“ºãÕ'l¹þýcaˆ.mÅnÂSh«aöHøa¥ Øe= v®Çóר}ÉiÂÎË—#$‰‰¥b½„#FÈtìH ç,[V(örvïn\z÷nþ½{ùÕ_øðáÚýúiDFMŸÌáÔâîÿçÝ­[»†‡ç.Zôêݻ̚¬74ëa1öš‡”¢"‹ägSC‹nП·|Ûp*¡Pby|òz ,,ì—͵ñáïj×'ø«ýÔó³ŠjWTÂyqDÔe±ÚS3±ò_6›gcãõéS¡¤$õôé>µ*ñ´{÷'ŸœÄÄR7·o°¯qííS?|(]¹Rûkí ÀéÓ¥3££9»w‹Ù‘ffâþ}„…ñV¯†(kê­Äÿ µ+[N ( jJBí ÀYox!á & $‡žÃ?Tvõ4îшÈÄ¢î[€QxMfPÄÁÎOøP€uí A—`M*<_϶ ðêàÓèÑx,¾'K°:ä%À¯×·6 °Ù vŸá´¾7hTœAB>̶B3U'Ã#TpÀ]¶ÐP‚gn¿žeÁXthƒèÏ8zS(41‚ÍP0˜Ø²W(TQÁÁƒ ‘[´ééb&ì⢤¢B½{—áîÎøºU]æà `ñâäÒÒoÜÚ»v¶m+X°sg\õ=+ÁÖVÁ#ƒ;r¤gZZƒ(!\ M:›6é,Ø­vÌ ˜¸_š#\®7Íûžï¼€C• »z@ Q¦š¿¨cü]íúDSm­kv¶#\ß<ç6-JrYSƒY${W3Ðxü亟]M±ték_ß ¹«WûÕ*½&2²xëÖ nnTT¾Aáæàž–ƶ°P˜2ELÆqn.oíÚ"..Jªªb~1çÌ·7þû3dˆPèù^>PQª9ø)GoB‚Z!ô*¯ög`ß,¨È@ ûŸÀ–a‚>Û|`¥¥`Ópx˜¡6J°ë2™è­†ÁZp<üd’¹ºÀfƒ@ãU°øP£áq!žÀì–h'˜œM€!-Ð[Y þzª˜d 6;}@š†ÕÀÁC`ÄRWĶɰôŠË~ÓipZÇ‘S <ïÎu’ÄÙëø(bŒ7ƒ#'Ó§ãëíe“&Ô-[,ZTX\,f÷9ož¦‰‰\Rk×®Œê¯Z^^âĉN ¶n ,¨¾s%ìßß³OôôR/«!nRrb¢Ê¿·Íœ°K4Œ7\ËìT—e !aCœ†ƒ¿«]Ÿ¸»výòÜ΢¬%rìb»€=FYAÕŒj÷ï°†@vÅÇ… ±GŽDÈÈHܽ; V$|™6-˜ÁàÍ™ÓràÀohŒƒ3©T¸¸4k![µª(+‹×¿¿ô¸qbümçÎáî](+cçNa¢!X·Ö-†šCóò}`±1s$:‰”7[w™°2„ÞÉÁçÈ,‚…ž€ È;>Ÿ¡.‹Ýàc®ÇCZëM “ ×àÓ{q±µl^mNù_Ô»‚ÅϺ[– $Ûô`s J¹àØ œƒ‘Ï€}@£âlp™ËMU”Œe®»Aè¡älì¸.<ŰÞ`޼Bl;)¶n»Éàr±Þ©Â|Nœ€š<=q挘Ù.\(ߣ‡dR×ѱøëV Ê¡CÍ)ìÚõ%>žùuQüóúüù­82cF›] G¡¤$õÚµ~Í›+¼~ýeÙ²×ßPï`äå‰þÙ¼ aþ{'Fn¹$NÍpKÛ¬¢o,Ñ_üÅoŠG7®(5OSš Õé™ ý··Ê­fTû!Ç:Q÷³«³çÌñpèP¯îÝkV²¸ ÎÎqïßç·l)»kWuœ¢|,_žÌf“¹s5»u“ÿºõÕ+Ö™3¥ÒÒ”ƒÅP§¦bÙ28t¨oûå;EÓ& £½€»äà`'ÄáÄÐ$px.øêÝ׿«­/óÕÆ÷àÌ1Ds؃"þÓAOUØ‘ 6,¾£Š«>]ÁZ¤…vÒˆdàtŒÕ…™2Ò8˜VM`­‹|\Â@OÁæÁÉd$±jl.3bQ)8<T콃ÈdáYö/MGn &I(Ü´JЏ÷~ï„B]]8Ë–áóçʳ¥Rqø°²„öî- ÃÍØ«—ÂäÉêt:oùò”o^;ßQR¸sgu¯Ý¯¡­-{ïÞYYÚ‘#'OF}{@ýBFµ2EVIÚ"Gbá¿$Y©eï>I9 ÑËùñ#ðŽÈó H´:g‹‚øEþŽš¥ Û :º$ee5 :Œ3úÂáÇ/4ìÚ/_è#F<¡Ó9 ÍœY»|šÈÈbGÇX ÇwRTüÛßõëyOžª©Ñ¶nÕýº•ÃÁ‚…„ÀÞ^^__Läû¬YÈËȘ,âVe±±yl[¹²åäñ°ÒÖN‡ŽF™`Á1pyX>Æ­ÂêÍWÙ¸›YVw€˜œJ‚D™i ……™ .µ¨ÖQ†¿1Xu€Æ®`IQ°£)lLE!`§8Å!— ÛºÀÞPd1`coШ8„Ä|˜Óº*L£‚šµÅ¬`q°H$Ú½CØ›ƒU.B¡¦:–ÙÀÊ­B‡ ŸŸß¤I°±Aa!fÌã(43“œ;WŽÃÁÂ……b£Twïnª¬,qï^þýûßðýÉÉIœ=Û™J¥lÛP;G¡©©†››€ùóýüü¾á‘¬gètéöµP‰™7÷½sËaÌYTzQ—Mža)â“þâ§ÃÏÏïWOáÏÇùWIÿî{] aÔQÇÌÀ¹œ+‘] \Þtï7Kâ2¦{¿zøTC »âƒÍæ÷4%¥ÄÂB{ïÞžµ[îœ;·å€ßp––òV¯NàäÔT]]Œ*æâRÂnÛ–fo/Æ"tä?††ÜÜ‘Ûûè9|J„a;LùOØùì}D¢™–N ?†4ši`ãx¤*óÕŠróÕ`¡šÊÀú(° fµ€¡¬NE)“Ô Î÷¿]Á0FV ÈäÀ9úk¢ŸòÙpŽ m nb6ö†@[5Œï6ί€2#•‚3¯À+SwvL…¦2¼Cp]äÅq”àî/¡på\4Ñ‚ Ü=>ùò‘#ÐÖÆ³gbŠçرCIWWÂÏu挌¶¶äæÍ:={ʯ[—’•Åùºƒ(zõR›?¿%‡CfÎ ©m@Õ”)í.4b³ycÇ>mPïÆã&‰•˱Kì>ìÖÏæ²å”òú8½|Wõ_ü,ü%ͯk¸zÅM?õA”ìÊ2ÉkjÈ!I®o #ïÿìu\Té÷Çßw`†AÄÀÀ±»[W]cw5ÖN̵QQPÅîs ,Ôµ[ƒîéß3CŽ |×]öŸ×ü!çyîå™Ç˽çžó9Ÿ‘ј0vìõË—ƒ 6=p µDòmO¨yó^ß¾åà`êíurpÒ¤E‹ŠëÔ14È6ãèû÷ÊY³beË,Ó³™Þ¾ÅÅ`Í Ýå‡×r€ù®ê|¶¸\WÌ‹©NB+<–;–Á\g\{™8)ÊhÃW>ºðÕ¨:·?s:s1«ÜŽâ`&¸–¸ÏÞŒEx¤T5äá_Fnw°|dK‹!‚Å¡Èæ9"Àòw¼O˜S –?AãEÌlŠ¡ˆM÷R‚XÍËóÇ=Ö]ÑžÓÆ¯¾c×£s<ìl´=s&-#ùhnÆô±Sâ¥4-G½Rý¹@~F×ð æÂG¬$Œ« p:” aX‹™P à`$Wã°3dJ!€™±óõ”BåáEîu°j‰>*Yàm©ˆÝ\˜[‰ˆ­ïñ‹˜] ‘ÀÚg¼pk†À¦ûDüRUˆNdòAíÉE«œ1±ôüµF‰ÏÓW¯5ŠÅ̙඀„Ä4<•åË)^œ¿þbÁ=ë_¾Ó©´ IDATÜÒØXؼ9áÒ%=ñÿB…Ä»v•40ÜÝ?=›ͨAëQ£´…߈ʙ„wCc“Nëwü²ã@…Î]R3y;¬Þ\¬~#u§{4ªîȪ^ën-9ûÍ1¼<|=ò8X;NŒ|÷üå5µ§>³­šl4QĹ»¨ZðÍL$‡é]!!‰]»ž“J•£GWúVb;0wîë;w¢LçÍËâØøxÕ/¿¼‰Uöêe£79˜˜¨92˜3ÇÂÞ>½ø–Ÿ³f!lÜHêr___÷EÄ'ÐåGÔJ±O]I|"¿¶¡‘ÎVªµµ—®)m?Ž>äØC,Y¨ ‰Íº©ÂW®·&VÁÆ•šé/f”ÅZŒLÍÔ³‹`i€Ÿ‚Í ?eÖ5-ÿr¯ƒ•œTŸGŠ¢~·C­ ´–2eP1”j\_8YÓ£4R%ž÷ÊÚÐÝ ™RÄVöÀ̈7¹ ó1ª—bx;Jíß’š?³ÐæmMYɯ¨[ƒO!,ß”†§beŦMîîe÷å”߸l""Kvá¯ë“#Ì›དྷð4N´jÅðáH¥ôí‹,C jêTóòå Ÿ>U,Y¢?µ¦–K¤IŠøx±èw£nyØÅgÁ ÈQzWŒsýÊ• "ELhõ­Äöä#Z·Î"9¸fÍçíÛÃÍÍEû÷—25Õó‹^¾T,Z/±n•aÅÝ;w(U oïôC.ž( éc*ѱ Q©´ä ‚#qß°r8¦ºä䬼 £f œ›ê,—Æ×ÇÒÀíÀ”ªXJ©p 0§>]–<çè]ið×_)ÄöÚµ¿¹yž†Õ  [¶TÍ<9¥üå—7‰‰ª1cìz÷Ö_A¹sg¢,~‘‡Gú¦ÎIIôí‹\ΤI4i’fH­Æ}j5ã†R¸ Ö(“3mÀìáXéÜ+OØ{ K†¤;z/r%ÎM©[Rkœ¥Ñ¾ªO>cÔºðÕÔj˜«`Þ€yŽˆÞJYó,( °!' J0â›ÝÔ<|äv ˜eŽJ1XZ À#ˆ0†L) àò •šâæ ®€RûG[ºUDšŠ‰Õ¸,}ê’(gä­EX9±!+Oðà­ÖhoÇøÞ–¤Ð³ªWbú@9té´4à÷ßQ(èߟÄÄôë_²Ä2_>ÑéÓÒ£GõÇdëÕ3óð°W«8ÐÿÝ»ÌúØšlÛVÍÀ@˜;÷u6…vv&G¶155\³ÆoÆœBxÏá2yÏÃg*vù5c;G*[O‹ÎQJðç~Ï<Ô§Û±¡}Iv?_ÀÀÀ¬'åá xësöÄÈA›[6hÜvìï»%g±5r ÝŸn©ôÄ\s¦C2BB»uË>±=¹.gäÈÍšééÓœ ÍÝïí[i:f è—9‰QOž,^lik›þÉèâÂÓ§T¬ˆ»{ú×lÃÇ—V £'9§—ïåU Ž%ü“Ö"S0|5j5®¿RRç‡m»ÁÅ´Ä£³ÖâÈ%òkÙW¼åA8ELRÀ;m_çIª`K SbÕÌŠX`‰Q^œÜî`ÉÀZ„F§w\ haA[K¢”Ì å@)SDzë#Àôê˜rà-Â!9ˆuºðÇâîØšóçSþ¸§µT*ÁÈS*G4péO±‚ÜzÊî3)‹3##Ë×X¾)ý:==©T‰çÏquM?T° hΜ̚@'üùç|QQÊ_}'•fF0ª_ßzôh…Bݯßä¤oÎô%ÞGŽÌY„w½¨\¹²¡±IûåëÛx/+$ýœ®Î+‡Õµ§&·yyòØÉQC¾p¦emm°woIÉz »¸Ä©7–ôé“>êëËŠ²mÆiS‹o˜â‰Tư~V–º°WD s·€®IšKŽðì=e‹0ágÝ´x¦XÜ|º˜ÓŒ‹  _©ÔZFÊÌš˜$eé[Ðõu¾Ïá(ÌEÌ)07Ž`õ%ülœ­.5y¬ï€Üë`iTz0Ö”ÒþæÜéiyÈ¥81rðË“ÇÄæëjMzT0¥ ”‘"iÀýe5>ÝÈäØœ¦Åb{±bæ‡}³b;ððaŒ——69hnžYrðÆø3> [¶8”,©Gõ ¸sG¾~}‚¡!+WZ i°¸8ú÷G¥ÂÍZµÒ ©T G\<¿u¡k*mã™k‰ˆ¡]~Ðuúy†Ç>€eC1Òõ1r9Lh,MËÑS÷¿z5møj÷kGPœåf½$^I×ÂÔ·N)xŸTˆÂb>(YË,`³ÚÃ<|oä^Ks‘‚ ð´p%F­­wUèÄEúØSÕ’€DÖ¸TÃḆþ ˜Ñ„%9øœº†+CS¿AÑÌ:¡µX˜0À”-Dê þúþH­Š)2ttlÍÀHeôC:ñ…êÕ™:•ŠˆMëG‰D¬\ie`À’%ñz›@ùò:TÚÄD´jÕç;3ë’al,Ú¸±Š é;‘Ù&~Â{pðƒð®AÑz U­©k§“"Ö#É·¦Îÿ|e4?>Þ»3y(¯Ö0ßoÎ~}æD¸i•u§ûçK©O³”Fޏ=7õ…š9M‹!5’‰í¶¶³ûfÆ}råà¨QM›f– UtíúF.WOŸ^¸sç|zç¨TŒ­T2q¢y•*ât£¿ÿΛ7Ô¨Á”)é\°†+Q¤ Ëæ¤Ÿû³þ"æMu’ Ä%ѽít!ÅÛþlòEbÈš^ZR•šihæÀô&ä3F©Æã>€{-$"^Ƴ9ÙåöDp=Ž"b&˜K‚šÞ&Ôšmȧ⴯Åç¸lKY€÷nuÅó#„=÷“%&í–—[/wR§b\7wê×Ç› Ôéår¸CjÌ›÷àôé÷66F;v4‹¿ùé#“©ºt¹sòdH‡v™% õÀþ2™zĈ­[ëiج¯¯lçÎD##aÑ¢ôÂW¯^±l"+V`¶!á‹7ÌZ„ °n>©’Š»Ns÷övŒÑ%çⓘ½À«/ç~œðxZT ³®;¡o »abÈÒ¶ró¸ÕD$p?šã!˜hû:/ !TAsÚY¡WMs,žÁ6CQê<ü;Èí–4”=!ÊÒ×9¸Å +@1 9 h™X‹ß)ÇJÂØJ³ïˆV¶Ç@`ÙMêUýPÛ‘,:§µØZ2选›Ifï¸ Á”ùöǵIASÖÏGp[€_Ú ›‘+V̜ɧ òì+VX‰Å¬^ýE¶;а¡ùèÑ u¿~þ™S¬† sèÝÛ>:ZѡíààìÄ|W¯näè˜ïéÓÈ1cr+y·5¨ükïŒs¼¿ÐçQšv:ëŸ)ç÷Kþqá™WáÿbÉév;Ɉ“*\vÝΔù%ÉÐX!ï©<ì\éÎÉDjU¿mí_ô[ôj1äÀݾr%ÈÍí®H$ìÚÕ¢D‰ìhóôâÅðÂ…-ªhlœÙÃkÖ¬ »wJ–4š7O¿êš4ߨµš©SÍË–MŸj3©”Áƒ©[7]¥bð“Ô“6)ŠÜ»ÿÄmÀœá˜êba Arü¢+'|ÄÚ+ˆXÚ]· #O¡†i)™`ÓsÞÅâdM×’î/QÃH쌈V²8ÐJ3ìIä¾{œM&‚œ!U·ž¯Fë; ·;XrÔÍ¡-Ä‚'³Í1´®‘À´Bnº V Û/±jfx-*FÒÒ)DK»#Ì=M Ž21þ'ŠÙòà-ûu$ªÖŒÿ ÀeÅ‹O^[‹FÚŠÂÁP¦}kmÓ†Ÿ~"6–É“I''Ã#Ììí \]ã2aYÍkïädòìY’›[f‰BA`ãÆª X$vèp+>þ›Ș™îÛ×ÊÔÔpÛ¶—9M}4õn¥Û´/Ó¶CÆi•CÒ·ÓQ¦úÃI”)]ùe<*én·ó —§"ÕÆ@¬‘Õ…R6Ôœp¿pÊSÝH!íy½—¾t¸^-†œ¶Ûq^V(TS§VkÛ¶X6ÎàéùjݺSSƒ#Gj+–½ìÞ½oï`‘ˆ-[J˜›ñ·pa¼JE©R“'§oê¼?gÎ`cƒ§gú£–oÂ÷… 2Fûé»eÞ~¤rúên!Ÿ£Y|`^?’‘ã W2¼ •íµ–e7yB&6©ð~à®/|µ8„Íia‘Ð<³.Ã)°€éÙómò8Xß¹×Áú„p& X †°^¡}H½²¥”~Iì˜]`‰¾ àÕ’Âæø²ã‘ÖÒ 4]k(gºN ÐDÂÌžÓ¶#Õ…E&þFA|på¡UêE.r£hanÜeõ6ÒaÙ2ÌÌØµ‹‹ÔNæÌ±°±8‘4qâózÆÆ¢mÛÄbaáÂà«W¿˜OÔÌåfͪ•õpà@ÐÌ™/E"a÷îêuêèW[Ð@*U÷ëç/—«Ç+Ø´iúÄ_2®\‘͘óü¹|×®|&&ièà Ú×¹s±µMs”ÿ{fÌX=ëTË’=Æ€÷m?AÀ}71 tªKó*ZËÉÇœyе)îµ–à8æ\XÖcC€ÏñÅÉš_2„¯Â, ð°•E“uQÃD¦%¸‹Ž›’‡ ¹×ÁÒdÕO‘t™#ô9LtùìSR.Ê L/àþ …:%ˆµL_ËÒˆy­&#RwÏ\Ô S »ná«s-´Â©8ïBX«­47eú €ÉËQ¤ YY²ÖÀÅ“7þiÖ_¼8..£F¥W̲°Ö¯·22V¬ˆß½û‹…5kšNœXP¥¢ÿ¸¸Ì…ùóKޝmm->t(xêÔìD¡zõ*Ó½{)¥RݯßÅÝ»s•†Æ&ÖïøeÇŒeYsNùÓ¹’a  V3v÷Ãy’X¡‚ñMMÿ’T½zE)L™b^¯^ú¦Î³g@Íš ”Æ®V3t’VVô§¶i†¼¶M³š´k µ¼ fãY DxõÕZäJ&p뀭.Aúû¢¥tq¤}Y™Šùf×Ò¾ZBŒ’¶–41'QWèxûáØÃ¢ö"xM^Çú‚:?A(¬þT ñlƒ¡ă/4„Ùq¸ÅRGÌ_¶¨Ô8ùñ"‰­ôËÏõH^ÃÊw-±3ûnwøµ4{[¨Õ´ÜÎEFÖf¥îÅÒõ(ž§¨[’S´±âã·è4ksÞlÀÚ@&§N_,Ìø¹™6c˜Œ^#Øs„8¿Ô*Ã2Uªðâ 2aBúo·bEü˜11ææÂíÛ¶*è/f–ÉÔµk?{ô(qôh»å˳ˆÛ_¹ѦÍ_R©jõêÊÎÎ%¾r“Scöì{nnw „;[ôèQ:ërÞùØuU††Û:xw©ÐÕôƒßÁ}aÏý¢ÞY•(i[Þ±b×9¶¤+ÿ<ÞúœM}…Ä”­;NÚDïËM©ˆçý¬4QhËPD††å~ìöâ™öÒªP±b—_sþ¥õùsR‹'ž<‰¨RÅæÂ…¶¶é+õ²„¿B½z×BB¤C†_¿¾J擯_kÒä¥ píZù:uÒ'þ4P©h×.âìYiÓ¦’ ò§#°¿zEåÊÈå\»F½´eŽk·ãì‚­ ~—)ª~ñé[ú¹;yÔª¨5v›Ç×òëGi-KÎ3þ ñh&b€+4ÛŠ‰˜§#pȰö#}©lÃý.Ðù6ÇB˜\oG>+(ý„X%U ®^qL¥¶˜›¶È¡"¼­ÐVçElPD©VeEO`|®v0ÈÍ, Š`ðùQ‹Àx&‚Æ›QPÄ-9Ç“0HÄ’©i`MËTA¬±•hS”}oØû@Xѱˆ5w¸õQû[¦µ£˜57ß±K§^Ù±-ªÇ‚CZ‹DÌü1ø>Àu ÏýÓ,r…'v¶øø²yo»D¢e»ÏšÅǤÃèÑf½{›ÄÅ©»wLLÔ•K$Âöí%%aåÊгgc2ß«&MlÖ®­ Œóäܹì7ÌœYcÆŒJ¥ºoß‹Gúgã /¾IúR¦PMýãi&¦|Þbåƒý7B_<—'&æu‰N‡\.4šÜRPS'¨¹B…Õë]™Êãß[’ì]&6¶ß¤Åv;,,©eËOžDT¨ïÏ?ÛgÃ»Š‰Qtìx;$DÚ¶mÕ«³HHPõïï¯Tª]\ }É»fÏŽ={Vjg'Ú½;_:ï ·}РôÞÕÇ`¦z¬™—Æ»’+èçÆÝgT+õ)Ù»ºõ’ƒ×1‘0SWNÇ)€ÅÝ´Þ•LÉð¨aF­wšÈ´[”µdA=Ò‡¯¼‚ˆUÒ9u͈R±(`®,‡7Pú@8ª•h™ ßöt—}‡O®Gnw°&bx›ˆz2‚¿à˜ L3˜‹zÙàhŒ¿ŒmံYÁR«[ ä IDAT)€q7ˆ–8`L]TjFžÒ– šJðø Àåñ:êßÜ~Kò>LkiSŸH”ÒÛy*MƒüÖÚV fñ!-%½uk~ù…ØX=ÚîÀÚµV*>~¬7î‹ÎSÕª&®®…Õj† ˆ‰É"¤Ü¿±©SË(ê®]ï>~œá†Ù³kM›V]ÓçõøñY¥ó›¤/—Ÿó*$3²`UfGÕ xþU´™\¤M=äu‰Ö — jZ &ÿøÉ¢øšÚS­Jéœ 6^ ?ñ­m›ÿõÝŽŠ’µm{êñãˆòåóùøt(TÈ4ëcÒB.WwérçÉ“X''‹½{kf‘[œ4éëWÒªUMfÌø¢hûÅ‹28‘ˆ;ó)’Þ½úãΜÁÚZ·}„ Q1tj“¦ç ൙»Ïp(ÂV¯”Œ¤Ë6ÔjÆÿDQ…Ëõ(ñ´r¤]%­eñ ž…QÖ†qºÃI7‰”â`Ak{H˾ ’³. 4rôsã‰PÑÆˆ–FDÂ<€ƒº5ßìËæá{ ·;XÝ1­Œ8åfâÍÁ €É ƒá¦”2à‰‚]‰¸ðBª¦5­l‰V°ôÀ  4(Hp‚Vwpk†½w>±é¾ÖÒ§.uøÅ|›:X±Ÿg“…–ù9ÖÈŠ¼.ѹš–‚€ZžÚÕX[ÛeIýYo­+drÈɲ¿*D)ò˜9¹msFDGËÚ´9y÷nXÙ²V>> þfï 3æÉùóa… :UÇÊ*3ÅvÀÇ'vÍšÏb±°i“ƒD¢ß Qõî©TâînѺuú®Ï Ú×T// ¤íß³uÇÎ’ßšõ ÒØ¼Äk "[ܰÐ}Åã·¸ø(E‘ð bÃU SI3¼Áó*Àòv\ fÇKŒ XÞ2„¯æ‘¨¢›5ÕLù¤de<̶ð„phmà5Š]$Â4¾ÈîÏù¸wïÞˆ#òåË'zþ»tébiiiiiÙ¥K—÷ïßÿ3£ÙCnw°D0K`qŸQ 'x ë@"àf03©šîÖT5!PÆÆ0€Yº V„Ö6F,bÅî‡XHXü€Ëy>'KEXð'º¶Ðóú!1dÛžèB9–flž‰ 0k=wŸ¥Yê*/¬­8yž=GÒØ‹cÚ4gg¤žÊ• —.µFŒˆöóÓ/õih(lÛæ`b"Ú¸1ìÔ©èÌwLØ´©jƒÖþþ ÙnæÍ«3iRU™LÕ­Ûù 2d7sÜ<‹ˆÿ¶w¼Äâ|©NžMî­4$Ø¢hê.ÑyÈmx¼g‡ÔÐ询M6ðØZmôëÌD257-p­XKÍ¿srÛæŒˆŽ–µisêöíÏeÊX^¼Ø¡H‘ìxWsç¾^»6ÀÄÄàÈ‘ÚÅ‹gÑó'&F9`€¿Z›[áš5õÿ:¥’Þ½£‚‚T-ZH¦MÓ£Â5gþþÔ¨Á´áæàP&ÌX:›‚©/©Œ~nÈäŒþ•fºð¢RÅÔm3z`¥ËRŽÛBňf8é‚\ãÎ'ãW'Ú–P¨å‹¦W§œ¤ _ÈØ†€{€Yq$¨éfL]1þ°R¸˜EŒú`Zž,üQ}ô>ÙBŸ>}ììì®]»–q(..®E‹5jÔ¨Q£FË–-¾÷h¶‘Û¬d´À(õRb À €Ù ¿™PUL€’u hƒXžA$¨h`MëÄè˜X•mé„RͰ«Ú´`w'Ú•!"‘©çµ¿«~)zÔ"QŽËa­¥T!†¶E©JižãëëÛ¢6#»¡PÒפTÏôÂYè0z:¡a¤Æ„ T¨ÀË—,[¦ç;jÚ·¯I|¼º{÷Èøxýd¬ ŒgÏ. ‘…亱±èèÑÚeʘݹݯ߃l7ÞÞuGŒ¨˜˜¨èÔéÏ‹3è¥þ#øJžÊ‹àصß}íIÓn†R0¼[¤Á¢ús&ÆÖ:þ (73>s+è_APTÒÆ |^¬Ø?Ôì‹¥mq¡tÇx‰EöJÿ­Ýމ‘ýðé[·BK”0?wîG{û/r¡2Á¹º¾øQ Æû(«QÃtòä/ÖΘ{á‚´P!Ñ®]Ö©W¯_³d "«V¥×m9ˆ(Ú·ä·.iìîëyôŠRöx8ƒn÷œçi % 2LWfxô!gý°6e¦.·xî-Ÿa!aÑZË¢G<Š ¬“ªB†ðÕì ¤j-Må•‚- €»ÀtÂoP®!»€Ôáw,’Ȭ*\?äßá“-<}úÔÝÝÝ)]÷G6lØP¯^½éÓ§[[[[[[OŸ>½N:7nüÞ£ÙFî%ù¿%±´`ÚWýl+^£hÉgàÊcØ|ÀæÂ±$:GR@Ä;Ìê>çv<‹‹2® 7"ip KCÞµÄFL¬Çý|ŒgCWxA•5H\Dý¢"©àF¼”+i\às4e†“ÀyZVÕ®-!‰ê½xÈÔxL³ì¶½øó=:³'mkóçiÝSSüü(‘¡Â/>^]§N˜ŸŸ¢gO“Ý»õß°T*š7qåJ\ïÞ6;w–ÌrŸ?kÐàZd¤|Ê”Òóæ9f9?#ÔjFŒð]»ÖÏÔÔðÔ©vM›~‘9‘ñġ€R®õ…c¬nm~­x˱ž·ä*ŬF¶(Õ·aqcq†{|þ_ u`dÙúWì›_QUf÷.Û·‚xÛ”ŽYÏˈW´oúÊ• âÅÍ/]êX²dvUwîD5mz#!A¹d‰Óï¿g}#:q"ºcÇ×FFÂÝ»ŽNNúc]§OK;tˆ‰ðñÉ߸qz] }{NŸfð`6¤ue÷£Çp,-xr‘b©|ã›Oh85\ZGãêZc¢ŒòÃxÆÞÉüÚ@¦ òl^†°²'#›È”TYËp¶aB}€÷qT<@œœSíhW Ò¾–âø5<­Hyc~dCMYgŨ xE¡a‘»b1ó ŠW‡u ³vÉ÷ïà ¸ÿO† ¤?¼E‹...mÚ¤”wœ={ÖÛÛûÂ… ßu4ÛȽ,{Œ€§ÄŸ%¢,†=0UÀ\b… ‚¥Œi(᳊%ñà¦á§¢¾.ˆµô-€…M÷Ò)7ùœPÖ† õQðã(TE­™Ø`ì>m «€•6U?uÉ×’©1[Ý1á½ ßi–­é~µ÷(‡ÓRzZµ¢[·‰¼t03²¶°öìIܼYØS$bëVssÑ®]ü‘µlf… æ‡×’HDÞÞoÖ®Í]]X½ºÑÐ¡Ž Š<}õjp6N’ºK´…4ºÍ›#Ó¯Lèâ·Õ.>½Jþ£÷ÑöÝw˜xÆýȳð¸¼2›ÿWH®|vôà•pÉÒÊãfêsQ™Þ»2P+„¯~êì~©xú1‹òÞ‚„E‡g®\ *VÌüâÅÙó®üý:t¸ <¸ø×xWQQJgç@ÀËËþKÞÕ‡ʾ}£T*<<,ôzWrú4ÖÖxy¥±‡G2vÀ"·4ÞU’ŒA³Qª˜Ô'Å»–á}µÊÐ]W`°Ì‡—!8fhc­eþ5^„S±ctZý£¯'§Gi­w•.|¥Ñ_ŸòÆ<”óGÆ®æ“@c¡8ì'á1òb Â,ùvB€‚èù²ÿi<}ú´jÕª©-UªTñóóûÞ£ÙFî`‚ ÔTß±Cr§XhHh,ê}Ø4ƨ'ì…¾° |e4Ç\àv"ê?ç¯x¼í™\(} hšÓï\ M8­â]ËÛ1º@¢G7ÂÙÚŸ~õe”ƇTï=¸¬À{¥‹ò`7æ©x+·0z:… òôR5ápt$.ŽÓ§i›VOƒ={{õŠ26®_Ï_½ºþöò«V}5*ÐÖÖðɓР~±}2¶ly?pàC±X8y²NëÖ²œŸ*•º_¿K;w¾²²’œ=Û¾N»lœäßÅ‘A½5ætP Â3Ûª¾Å[¿Ê_1㨱ؠ[mûiÊW(üf¤æ!Gõ~rþümûÆW‹ÿi¢'r`&‹­óñjÃ÷ç­’ô¼À”ùáÇŸ6ïÎhÿO !AѱãŸOE‹š]ºÔ±té/öWÎ11ŠF®=~ûÃNœ¨“e٠Ы׻={"40¿r¥œ^ S…‚fͯ]“µootâ„MFÚtb"+âïÏêÕ8;§=ùö¡yC.ìO#@8n1KwãX’{»0Öù0a1”Jt|J."4–r3ˆNäÌ~pŒ¦â*âåøô£¹Àé÷´?¥¿nh²©©ÃW/’pòC/œ(iÄœ•2Ùo NB°†×`ŠºŸ?¡\C¾Î˜xp„°»B­¯¸ë¥“4q£‰ûWâŠ;Wfe4ÿ½,‰D/§<˜är¹¹¹¹T*ý®£ÙFî`iPÓPdûµEäŒ90›XÌ#Ø w¡‘„öFÄ©ñŽ˜U`~1Jê[Ó¦1 –¼ÕžpYŒ Øôœë!@JƒtW>Řˆñì 0å1I@Š\ÊÔm„†¥pÌg £rÞ|`úê4kÑÆu abÚë¹hQ\]A'å’={š dš”¤þõר˜ý×ýˆ~øÁ2,L1lØWÕ÷ PÌÅ¥Œ\ž}á‘HغµY¯^e4ÜØ;w²£°•=DGgÁèÿJèí juÅφÞ]ðû_î5?]©ÒÐ>“äÊצŸï¸ôúy¿Ð¿e%9×nçL\‰˜û8ûWÊšE"6.ÂĘÍ{ùóRš¯3nŽŽ¼zÅ’%ú¿ïÊ•–Õ«‹_½R ¥w‚ °i“ƒµµÁÑ£Q»vEè“^^ÿ«pƒ°}{ó=JGGËZ·>y÷nXÖÇü ü{D"¾Ô%:ö1=žlp¹æÒüÝ)Eš­J­>ñ0¸õ_‡Þk~kðÓæV OŒøÖçì—NõßÅßµÛ9 ¾¯Â»¯¾Ùêx¢oñÖRÃ4Åÿê²á~î/›ä;­qÀ9±ò‹I´NðÛíäZ`;;ŸŽŽYsÒõbìØ'çÎ}.TÈèôé¬E€ÏŸµ/ -[6½æ‚'NH/Ž‹Ù³'Ÿ­­ž‡Ýë×,Z„ ¤ç¶GÇàì0o:¥Rìñ‰ôwG©bú j§ŠJ¿ aó‰HÀ³Öòð›¯!6`AW­åÏ7{¥Þ­´–9÷xKFèN5ãõ­[;#'r(c.…\b&›“_Äx%a8„ \C<0K–ð^‰º+ÙI&ä|X[[GD¤y*…‡‡ÛØØ|ïÑl#·;Xµ±h€eÊ#LƘKl"jWÈá T6¤‡ IjfÅxXB¤’úÖØó4–):U…iÕ(eÉãVêt¿W¶ÇLÌÎGø¼dCwD‹Îñ:HiYµéJ‘ðTa jå˜>µš¡žÄ¤¸^”+…Û€a“‰M%~)‘°v-‚ -9Îccaÿþ|––ÂþýIkÖè'cÙÛ‹., Œøþ}ÖÎAÔ¯ÉÈþiì—òú=ÕÊ1m@û´íÈBŸTÓ ÇNü¥ŠÑÍ)_@ªdÌi€ÙÍ)bð2šÅ ¬mŒ¡`ï'N†ò2ž‰¥¦D# PT¡$nÈ(,b¬‰0€y`óˆM@Ýã:H®sƒ ó_-ÊNNN¦i|þèÑ£Š+~ïÑl#·;XÀ8Š äó[’º`Rq0ÊõÄçÓõ~ ð°@"°-?ÌiaA´’%!Kœ03`ß'|ÂL YÕÀíãŠ[1¥ÀèÓÚ°VÍô®‹TÁTdC§ºôiN!k¦lI³¼i©ãD@Ò¥&§v5>0mn{“&üú+"QzÂf2Ê”1ܰ!0n\ÌÝ»úKi´ýùç|QQÊAƒ¾&‡nl,:r¤VÉ’¦wîD÷ïÿ {iw±X´«,þùsR«V'Ÿ?×c˙ȤKt§õ;*þÜ}À¥[§ºK,,ŒIÎM»:qÀýe%¢ß¤;O¤‰í©²Ý<›,ZðÆ|ëÈ1ÿÊwÉ× ¡±ï4pÍĉluüV’þIf!nýæèŒËã{<ÙP0.Æ› |é 14þ*¯"GA.WuízîÄ ­wåä”MïêàÁ iÓžkDêÖýªØŽáFZYlÞì 7ñ'—Ó£GTx¸ªcGãß×/±o·namÍÜ´·Ð ¾lÝ‘„M‹¥zB^¸ÅºCHÄl›…$=õÜ®<¥yæèr¼ïqþ,˜ñ£Ö2÷*/édLjÚZ‹óU¤J†:R¿ @¬‚‰~ÞŽX‹¹›À‰hÌDL.ˆfĸZ`&°ÞCè~È(F˜Š… õr>)œ/:X_™ ü¦Ïß:lß¾=µeûöí:uúÞ£ÙFn'¹?T®‚­¯I,‰ñ ®!›HT 6`m†¨„AÐFÅpONU1k,¹Gì%üQŠü†Ì}ÍþOp².b Ë9B©’ŸÕ ¤Jj®ÃÎŒ®µc£hàC~<¢Q€gïi>²…™Öv©cø½¥…3å‹3s-ë¤Ø=㇞”-É|W꥚L‡˜›Óµ+£F¡#GF_¼(³³:ecjªç$¯]û¹££q÷îÖC†ØfœÏžÅ5n|½zuËæÍm§M+ó5‡d„L¦úå—³oÞĈŢãÇÛ–(¡Gìà¿‹ÄȈK¼lÛ¨Rho?ï¬ËùoõÄ®¦JHÿ¶#¨ÕÍí <6©WúTçáoÁêÃ÷7‹6Mö1ÎU þË@­?ˆkfWÈùþ×öÈáP«0à’¿Ü£GáçÎýX³æWÝ"2âÉ“Ø~ý„„HÇ/5~¼þÆAéðწk×·Ÿ?+\]  _†ÀÕ5öæMÙ›7Ê;wlmlôÄùé'”J\]éÖ-Åž˜DǾ¦_7&H±Ç'ÒqÁáüÖŽiSì1 ´ŸET}š3¥+€LAÇU|Šfd3†7Œ¦Ïaü£ØÝ…†Å¼aÍ3ÞÅr÷lŒ¦=çZ$J5Wê#èçÏË$š[àeÏ®D6&®â®-1Ð a4…ÑD½EQ‰;–Ç ?Ixò8Æ + ˜|Éý÷ïà ,ý›ebcc«V­:xð`ggg`õêÕ[¶lyøð¡™™ÙwÍ6roëQÀHQÅþ5‰G D\C$e0¼l%qFàÁ0ÕœrÖÇóHNsJq)–Å!J‘¨â\Ëtl÷Eõ¸ÆÚ§Ü02`n+.ú3ó"QIöùЀ+¯˜|P+ÐàXŒîÕßùú1t%Q©‚K1®Wîã>ÙäQI$¢Z-jöøqÄ?žŽŒüŸŠ82Ç?/ÆhbmÓb¶w¿ó×KµÔŠ –Œ|ÙçáêɾS¦çè¨Á瓪¾Ç¥F^—Üþ¨Ì– kÎÁWhT­æ¼_hËéGF©[ûoλÔjÇäR† k_ò®øö~‚ÿ ¾÷n»¸Üܶíå½{ŸÏžmŸmï*6VѵëÝ{÷¢Û··ûJïJ¡POúñæÍøêÕM¿ä]]¿.›7/îÒ%Ù®]ùôzW2]»rÿ>NNi¼+`î .ø"3.-çÝ}=ï`jÌ”þiìã7rÍKSêÔ*¯¹ÌY?T*ëÄf\äJ‹k½«Dorñ3jh½«'±,xõVUB$p#žíáø%1¡ pã’”‰fˆa\„rЮ#;Hâc1—¢Zç;Ä¢ˆÑNž{yõ5[šÓ èî߀………ÏíÛ·K”(Q¢D‰;wî\¸p!Ùú~£Ùÿ.¹6‚¥‘ tPïMù”]ǧ UÆl3ž#oM˜á:ì0¨Ïa3 €ßcXOcþ°æNuža&âme rî3mnbaȳfØ̼Ü{Ô´åÖψ€VÛ¹ð—FÌm '¥¬+Á1ü1Œ.5TjšMåêS´bóØ”Õ*”ÔêÃ×̬a)öÄ$œšñ.žŒJK 5ŠU«(]š»w±²"#<×­.—«Ïœ±iÓF?KtÖ¬O³g-*¹y³B¡BY«6nn/gÏ~iggtï^c{ûlöŽ–5mzüáÃðzõì.\è`júíï•NIQi Êâ%·ì_+Þ*ÚHO¶¥´ÙèV¥‡4-i*É)ý‡ U¨öÝüà}ê¥ß'=bTFФêÁ7›œ)ÿUn?oÙóêx“ Ö®õsvöÕĘø¡h¶ÏóÛo÷wíúX¹²Å_525ýª«ÚÙ9píÚÏ?ÿl½fM1½:2 êêÕÃ^¾TL›fîé©_eìX–/§xqîÿ{çÕÑFñÿ.K[:"R¬ˆ {GE4;–£Æ^±MT,±÷{ÁÞb‹{ï,AAšô¥l™÷ U &y“hÎo?è3s/sgwïž;sžóÜ'«ŽùU U¿"%•kGh… û¼¢vOÔ®mÄ1‹¶íÌZNAG†÷R*—ˆMÂþg"ðŽk5€‡aÔòD&åÙpìÌfÜcê]jZp7ãwÁå¢YšåUZ¼äL?[3Ó†Í úÇRNÆÓ¢Ä€ÄÃ-¨ˆºIê8ŒFa¸…w+y[ý8¼&Î+^בhM¡êý3W°>|¹+XvÅöã÷ž”^X™£íCâb*¡íŠ^ b) Z0€é ã ‘K8ÌC%uä´2!A“¾ˆÕ¼(ßZgn¥ãkPÒïH~}•™û5Xz“ XCÝôú ¡TH%l‰¾›Ïr(Kæ L ωH¥ÌÛ³,U[ôõX2`Òáò¸n>¬âsÞö Oµó‘ͨãî;¾þ¬ôïÿ(¤iØ—µøºµË‹»úl¸››]™§ç+Œùöé–B²«W=Á|päÈë#®I$¬_ïüGØÕ²e¿þúÖÈH¶woíB²«%KÂÖ®ÐÓ“Ž[ìc.}ñ/^¨d“'ç­.8z”+ÐÖf÷nrd‰¹O&9…þݲ±+†ÁsPªø¡[6v›È€eÁÌžéì ˜w’Ȝ˥³+`ìi4‚ê§³«·‰,x°´A:»Úñ– QXê2£ÀõÎÄa¢ÅhKÔ07`ª!2˜ñÐêÁRn’jŽt q¨ÓœEGQ\ ›x&@!ÙU:þ1¥r>'|¹+ õ±JFµ‹çr¤°–ñV‡‘ v£DÕ ªÂkØVRÜäÒÓ gÚ á„«–8`(cw†Ú].cV]€ ·IPÔµ¡k’UL¹>€A©dÍ‹0Ö_I”·eV/€akˆÎ’!X¿ ;’ªdÈ\²>th‰ksââñ˜íÒtuÙ³~ûÕÙ´>`âDúuµÕcÆäí­£#Ù·ÏÎÞ^×Û[Ñ»w ¦K*•ìÜY«T)ý7¢'Mò-øêf IDAT€ÀÖÖàĉÖffºG޼>üߺ»”²ú¿g…–PÕ½öÓÉÃîÌ­”‘€ö±IÊågüìÆê½þîã‰Ç÷¿iöÃÇL{eö“Íà“¥Ú&HsjÏ‹ÇvóÙà‘“"K¤yßQÿŠ<Á¿W®¼ëÚõ¬Z-æÎ­×§OùO>ÏíÛ1ãÆ=“HØ´©zÅŠ…ÒYž8;vì[‰„K5h÷ÞÍ… ©«V%ÊdlÛfª§—‡´4(ˆ>}‚E‹rfî?Æñs˜›2wb¶øê}Üx„µÓ²oº¯'8Ç üØ1=ò6†åç‘H˜×)=rògü1ÓcBÆv¡Ç-Ut±ÃÙ ^•ž~¾ ¦Ú“CFYb.c«‚—*ÊÉèªÏ;X ø, pÇÐÉ&BãP5À¸Æw@„!…ÚmȆL±çÏ _:ÁêGE’Óÿ-EK ûšä£DÙ!ëŒ\ ‹HÂ$fB*x"—p(™»JjËikB¢†Åa%ôIÓvõ!Eг¬x›ÈüŒ Ð9ÍÐÕbû#î…ȤÌê0í(qÉøøø£:и2¡ï½Öä‚°)Êå{lÍn¾r6r¶ïãBöäeË’V­òÇócÉdlÝjª¯/Y¿^qüxÞj§"Ed^^ö¦¦Zû÷GO™R¨ªÌææÚ»w×ÒÑ‘.ZäwàÀ§Àqp0;t¨…žž–§ç³¹s|ÀïDÚlÿ]°®U7ÿe¢_ô¿¿lôõ)Žo.i‹l99©*ÍöëAU>[¾û ·zÍ77køÏwÏú{g»@h„˜:lò˜w–:Nó¶i¨–d[SÑêêawFÜšå~szíÐk9ˆOV­»`?êÐÑ0wQ#=U’SЙñWÆõ|¸:·­FX׬mçÒÂuõ¦¾çn¸¿z×÷Ü ×Uí\ZäÔ_?}¶CBmÚœxÿ>¥}ûR+W6úäóh4¢G{Š´[Da U¶ný*.NÝ­›ùĉ%d£FÅùù©kÖÔ?>ï%±qã¸qƒ’%Ùº•æÓLíj ìž->r1ñ|ó›fc²`NoJ¤ãµËl¿‰ŽŒ™©ý[rÿ¥M^@À˜›SÒFOâYˆ–„•U€&¼¥‰!“¬0Ób«5åetÕ'Ö¦€~!ƒ¡’U„¤ i…yEä§ zM|1äm(U˜‰ý5¾t‚AÜ÷”7@æMÄ}"šc^ƒ”» ·E«r ,$Aš¡Äš )0ÁC ‡“¹£¤¶œ’:ø¥0,@GÊŠ*Ó_¤{»;ZÒÝžd5ão§ÿÑ)M0×ç”g2RuF"añ¤ËÑí¬Ò]U†­á}–<¿î­hÓˆ¨XÆ-Ïv!#¨P–§/Xšk#â—_¨U‹W¯>*Æúé'ggµ»ûG·œš77^»¶$0|xÐ… …*‰“öx£ìÔénRÒ§¯§ÝÐ…`ðà+'NòyrÃ$Oñÿÿ ú¿³þ°å”VCúçK£»ùlÈ]C:Ô°ø~‡¾s/\é+Ý=bø_5â?†¿w¶Ó¦¯ÚÒ¬Á2{«-Íl2|È"¯’?¼õ~@.¢…"¬ýóS.êà›‡1lžøsËÝüü¹³—Ú¶í‰×¯ê׷ܵ«ÙÇêÒ3f¼{¤¦j:w>ûàA”ƒƒÙñã­ÿHJïùó‘³f½”J%Û·×(LбFC·o'–)£{à@Y]ݼç?6V +³fU©’Çð‚ƒéÛ!X° §ô :ž”T÷¢~­Ì "™áóf¥x–ô^·Ùq¹.[G§ožsê &úLÊxÿ—Ü (–Vt­ ¤âç;sëa¨ °ã £(¦Ë´òQªtõÕÒâJÙ¬ @ƒŒ.úé?:iJ•Ä€qÊ`9o5ð–ÅÑMËÖª€i#¬Ïð¸Î‹g8š¿àõÅãË%X–˜ÁDÝàeÊX#$îÁµ0j€qêM¼+‚´?Àlâ%0Èx˜ð0ÄP‘dî()¦ÍL[÷`4¿TÆPÆžNFØ0¶:À¨éŒÊ½>%MxƯJ‰¹ß “âõˆGæÏR ›Ý1ÔcÛyÞÈyi&ôC†ÎÍf‹ÕÜ™ïÚeŠ ²ÂÞžõëFâþýhË–?´ø4gN½~ý*(ªöíO½xñ™” Îßÿ]¦§oR²”óÄén·»Ì\`V¦lÚQù×VIµ¨«üüûjHÿÛ“©5B ØäUØÑá_;¢–È«»²þÏ˧zÛ4ÔH³ ­ÒëÛܘ<üö‡\逖¶,BüyÈØs@¼tæÌùñã­ÍÍóös) Þ¼IîÖížZ-¦M+ߢE¡ŠåÿæàÁcc-/¯²E‹~”جnÐ@gôè<ÄïiÒ«¨(\]qwÏÙºëç¯RÄŒ™ã²Å'¯! „:ŒèšŒŠÇm%ÀœÞ”³Iª4,8 0¾†‘ \XÔ"=UpeA{€8ã}fhÛǾ!REsc¾5C ó¦!…YßCUØŠ"u%díпGüubåhõÅê=ɇðúã@Òiæ|V.ÍÿF|Ñ6‰ÄMxš"ŸA·[„-ä¾)ºëøê Ê<ÕB²ÊFh;ƒf/æÐ­w`üãâX˜ˆ«.^æh ¡/·ñ°bž-À¼WLð¥œ>MЕ’¤¢Ò^^'°© ý*l}HßCØñb$rm€ù'™~D]¥„ÖuôêTÀ²#ŒZµ9Wbžáê’ª¤fžú3Í©Yr[BèèL\<ǶӦYÎë:”µk±·ÇÛã\ï… uë÷§N¥tè wèÐG«^$$hœœ|>Lrv6½¢@r²ÚÅåæÑ­Z=v¬ž´Ÿ´Í›£ú÷ÔÖ–œ8Q®Y³¼­€#G’;tˆ–Ë%X”+— ûé'~ù…%¸Ÿ"Ù­Iã¨äÌÛwlZB¿,DêÑKêôB£áö6jeщu_È®Ë4ªÄåù|¸‚y'™tˆ¦%#޵Ð×øá+nãZ¯ïÞ$RaI*.·ÇÉ `Ô–ÐÈœ+ ‘Àõœž£-á‘ôX«`h,•e<*J0”5<∆„G ÙŠù×èöÇׇÄaØöÇjÏ섵µwpù ¾ë$ƒŸ“{ß¿€ lù¢ ÿ¬9â@ í¨Ó–Z\{Fô÷”ïNù)ç}ŠÌ ô æ_ícXxA°?Ph° '^pË‚zÚx+¨ï‹¼+QMŸT 5.ó,y•ð( °ëÝÏSLŸ]1ÖA#¨»ž{¡Ìÿ:}Ç01…ê3ñ‹`V‡Ì¥fÀe"—Óó+¶ÿ˜9ø«p„Ž6vR±tf|ÑÆÎľ4>ÐËþ´™’BƒÜ¿O—.ìÙ“Ç„¼}«®R%2&F³c‡iMz QÖ¯ïûæMjÿþ7JM9pà£çÏ^¾L¼p¡A¥JŸþ\• 3榧ç³bÅômU§ÎçY4>,)]T­ÌCÝ"Ó»mÛøcÂÚD·IüC‡³+s; ”oÛþ]×)ƒwø|Œüó‘¢*?þthL²©$eNÐÚÔÀçYéã˰„ÑVV•RjåQ߯&>¨Aðù:!×eš‚}{ì[¶í¸iç_pÿD$%©zö¼pà@@Ë–%Æ«îâbSð1Z-zô¸ïç§HJR_¼ØÀÂ"ïÒËYqùrBóæ/RSÅÚµ%þè×<2RS¥JDX˜fÅ ã#òX¾:vŒvíɸx‘† s¶ŽžÊÒõ4¬ÃÕÙ²w†F¸éÃ=X<:³óá[tœ…\—‡+°ÏÚ? ¥ölRTœIËÊþÑTZ…ZÃ!T±èvŽ=~t·çW€ÇñÔºŒ¼Sݵ Ž/L¶f† ©‚ ªùÍŒÎz €MÐ6Ã_í£Xœ%zþEÑ>@•0ܹ"E²Š&”3Ø'5’A¿`}ÿ0]_4ÁàKÞ"LCgÓ<ŒCÑ ìÇ/’¤¡Øê 9I”/ŠX"}€ò4Éi&oïÀ,¤ 3˜P[Ž›*Áˆ DµûŒ µ{7{[–Dšá€Tœfs¯•` Ëú^H$L?Š÷ëôJ%l…¡;.pàzæÈjп=)© ™“mÇ} U*ò*E¹äVººìÝ‹±1{÷²n]³ak«µh‘0bDÜ›7Ý´±Ñ>|¸¬tÓ¦ÈÅ‹ ¥ˆZ»¶ª®®4,,¥eË[ŸžThh¨½xqƒ¶mK†…%5mêuìXÐ'Ÿê_йgå_C:46e·¦âlçE‡+vÖÏöïsêÔø_ï“ö?‰KúWšÎ=ü44&ˆº”e”II‘¾O}ï_üäzýWU˜pú˜(—ƒ]I„(õ´ßýe£nLs|s©0슒†ý¯Æû÷)-[?p ÀÌLw„]õìyÏž?¿Ä½{k†]=žÜ±ã«ÔTááa•»† ‹ Ó¸¸è ž» Nw½š7/vu÷«¶ “±z^¶¤Â{¸éCI«l53"ã¼`A¿Lv¥ÒÐg3ÉJ†6IgW€ÇYRÕô¯™Î®n„±×}s2r Ó´í#KSÝ`e”ÔÁà `Cj*Ë複lmøâЬ#˜ˆ±±†·€6úH7ñLƒhKi ~ã†39“a †ø ^_<¾t‚Uë”NAy„»1k€U*ê¼°F§3–XÍ[9’0æ¯ÉPbÍ…k€‘„ã)ÜR̵ÅZ›+ ìˆhfAjÆ>ÀÒ†H%üòˆWq-ËÒÜŽ˜dæd¸Œ~UáMQª°Ô ç£2ŘÝ`øÚl… ܱ4çÒ=vœÈ jk³v>_5dúb.g±xHÃ1–»{Þb¬ämÛêÆÄhú÷ÍçÙ£V-ù¶me¤RÆ{sèPLó,“IŽ©Û´i‘àदMo~:Ç20>ÜÒÍ­Rb¢ªC‡SëÖ=+ø˜Ïù»g¥É³FÜš5ìÎÜjaw¤"›œ.E¦wµdó¹N 7Õtm’^ûbé¶ÑB‹KYt2gñ²iw‹ÛVþcx´øD¦Ç¥Ò­"åż­-n0suÝ w„uޱ®*ÅñÍ¥1×'¹y/Ì*´’H¤Eªä3ŒÏUÞñ¾råüÂ×&M eU•'„`ÈŸÝ»CŒe'OÖwpøèNß|xvêd:gŽm>=wîLúí·dɺu¦¹³ U*¾ÿž¨(Ú¶eô蜭 ‰ôA%{¦þHõ,l$4’©ž+Æa˜eË}øÂbøªò|fçîkÊX0ï›ôÈ­·ìоŒ)M4÷ëð¨NZÙúmo¸E1]¦–S2-`eI ¤¤ $Ì0B ÓA} ,¬ 1MSt¡s€ˆ RJ¡×ž"Þ„ß'Âí®Øûò„`9:®d‘ëÿ‡¿_:ÁR¢ìŒ£ é5žÙm¤gyãGì@¬‘]'î6q½—BËÕ!’Ú€#DÀZ("%mYzY"€‰smƾ%M¾ØC¿…r" –½Ê‘ªaü­ô,lTÂÊÛøE\½zu~'ÊYò𠳳Ц®4©Â»h~ȲòdnÌ¢Q£™…ä4ª‹cmT*ºá].•s—.¸¹‘œL×®Äåe˰~½©¹¹4-í9Ÿ©ëÔÉtÖ,[†îÝîÜɹñ”r¹ÖÑ£õœÍƒ‚’š7¿õöíGÓ „––díÚÆS§ÖV«ÅàÁWÆ0Àøø7–.¤{Vþ5¤Ÿ­±²þ¤Uõ&Þ,ÞôR©–š|•þ¦çH»û°,t ×wŸæ¶õ ³]˜1 _~&…L­ºRª³¸áÌÝU¾3ÊYÅÅ85¦¹ßá‰W~úöé–ÜVò¢–=¼Î~6öOþl?zô¾qã#¾¾1Uª˜ß¼Ù±zõ¼ *B0l˜Ï† AZ^^õêÕ3-ðIÊá>†ÐPÍÈ‘qÀÒ¥ÆeËæQig®]£D‰<\¯€áñ}…ZóÇç›À·.´wÎ ºÉÞ«è±~D橾aÎ ¤6÷ÁH/}ÂÇœFÀØF7Øö’;7`Lu€8ž,rH×¶ÿø†5íMig°9‰`5ÕµùF—° ´a"„¡ÙD¢Æ`¤@³‘wÀØJ` Ï€®”3D{?7ÖÔ4àÓsþ߈Ïd‹4((hôèÑgΜš7o¾téÒ%JäH 1f³bç÷|¿‡ëçy\›Ñ¸®çɪa1Çͼ[ÅÛòÈwPé7£‰-‰ÖŠžGÒ ,ÀR5ôŠáD Í訇€f/¸Ïð¢¬, °Àg™j÷°$Êï!.•3mùÚ Ï!¶=¤{U~Í(°pÝçEHàºuK§¨6‚„döO S–åîæÃ8{›Ø093¨VÓâ{Î_Åʼnӻ²™»ÉÉ4lÈýûtíÊîÝyLÎÎI=zÄH>,šçÍë~½n]¤ö­[‹/xñ?.NÕ¼ùÍÛ·cÊ•3¸t©¡µõºlÞüÜÍíŠJ¥éׯºue²/âáЀ¯NýXk¹Öíšü<ãå ¯—'…Þ»#4šD£Å›^/Ñ,^·à ƒ^ KnT§0¥Ã†9‚Ñç>xð@.ϯԥ…Ä`š˜Ö›ÞŰù™Ý‰¤ü@ëRX¹q>å4êUÁ¢OÂHƒ]3Ì\ˆx‰j&½‘;ذJÁˆXJhñ´(†ž$QójÁõŠÔ7@%¨uŸxæVd¼=Àìûü|‡êEðî„–„·ñ”_A’’Ûƒ¨“!uøé7~9K%kîMB/Ã7o…?¬£¨ Wa™ñ[ù2ˆjÝHQrn _ÕɼÀwáÔlÁ»pfy0)Wrò«WÔ®M\ë×3p`óÓ¥Kôo¿%»¸èœ=[äcæ~€R)Zµzyþ||Íšò+W*Lqbb”_}ÓÛ;¶BÃK—+ö‡8Ö‘#¯¿ÿþœB¡jÑ¢ø¾}ÍŒ~®TÉIÇp{qìHî¦òmÛ·Y¾îCU–Äð°W§ŽŸð£•Tû¾µã¥R-à óÛvJé¦èI4‰áÙÔu)ZzšìÕcä––Úúr±IJ„P&)ÔÙË(¥:*éßùvh uÕ°»Î§KÄùØù›Í»¾ÀaË–nn—•JM¯^å6lhRÐ|àáñlÁ?]]éÁƒuZ·¶,ø˜93tÊ”CCé•+jÔÈïî½i“bÀ€XSSé£G%Jä||ó†š5‰ŒdÑ"~ú)ç±}©ßE[—Ñû»ÌxbUºŠqŒè’ÿnû®áR³³2—¯&fÖqì,x8C]•†jkxÉê¶ ­0ñ6sàhÉõŽHàq<5/ÜmLucT‚ZÏðIb– “¬ƲQAs]N›óª‚6¼P;¡Aœ£¨tä±õ*TDo0Þ“2ŽZŽXNfo4 q©I鬸Qòã#ñ¨*YÊS‰„Ž8ô9Œ?‚Ïá‰ýúõŽŽŽ“&M233333›4iR½zõ6lØÿQòŒJã§9­N+j¿qCŽVšïèFžÊ ÂXÉ[ b FÀâ“SXñ0TN}m‚Ṏ¨¬Ï(K40<µ@&aeU$0ó%iÒ£ŸªQÚˆ‡Qlz`kĈz“EÜ2ç*Ûð,4›õèpWšV%"–QY6 ˕̴ÅJɲdeɯ+ÑÒbÊBÎåÚ.°·O×¹Ƀ¼ªü­^mR¬˜ôüùÔ•+óÛþÓÖ–üö›]ùòz÷ï+ºvõW« þ:™šjŸô4°,V½W?yÑ¢€L£¬ûöÊO×'¼·¸|Ô“Ü&Oð:E÷y²þãÒY_VQò¢Y_Á Â?"10R¨ŒV¨„N’Ì ëëïeWUÂîM¸2¶Ç£µ%âü¥R-ÛºŽùtþrôUÃüùúõ»¨Tj~ø¡ÊÖ­_ýAv5i’ï‚~::Ò}ûj’]íÛ=ujˆTÊŽeògWoߪnj‰V®4ÎÍ®T*ºu#2’6møñÇœÇ&*è2E¾ÏÆ®€Ÿ×B]†vÎ îºÌ¾kËÙäžÉ®î3ÿR [ú¦³+`7Ï")_„µâY⃖5D’¡mW ~(“®m_†OöºüT àŽ’Í t$¬0˜ pƒ°ˆx%â[ôË#[OˆuSLk`xÿ÷¤”ÇÔ ›S<Œ&¡4–u°¿Æµ8â€*ä§)üÿ|ËËË«wïÞY#½{÷>|øpaŽ5ÁäïóØ…*–‡sí(mA0 gnO;ôCH9H„+z5ÑC³Å×Т`9Ha• Z°$‘‡J€i6”ÖÁ[Ág T IDATºHgó µû3=-Ôøù±©œ(¢Ï¥×ì}Îftelì–”§¸ú*}´i…FúìºÌþ,…ãûR© Ï_³p{¶«sqbü4z '4W¶_×® Hr2]ºŸËýÇÂBºv­ °}{òãǪœÍY`n.;~ÜÞÂBvìXìĉ…ªma¡sƒƒÑ£Gq_}3:ú%¯Õ«gyãFÇråLî܉hÐàðË—…µ!ͳ:ã¿…¯y—U/ATˆ|<È{‘ëó¼ö†?#„•0HMHû·¾EÑïvúlôU…Aá?Ûjµ2äÊøñ·µ´$«W;-[Ö0ŸëÂ`êÔsæ¼ÒÖ–üö[mW×b…9äî]EŸ>B¤[çÓS¥büøøèhÍ7ßèåi%3q"×®Q¼xÞÒ«axö’ÊX>+[üá VîA¦…ç¤Lö²‹úS*ƒ%¦¨è½ ¥š›Ó¸\z0!•—0ÿk´¥co’¬¦WyêYl N×¶O)œÊ¬P€å%Г¢†Á±hÀÀ 2ÃÐðCu$mÑ[R)E2 ›÷$Ä€C¤Ï—¶dn€¡« ϸ…êh³v ³6ò<Ãß! 3ÆÒ̉°zŒ@ËxaÅ jÔàåKÜÜr6;êMŸnèíÚ¾ýûÈÈü ”-«»YÉ‚ï֮ȧçXZêž9SßÞÞàÁƒ¸¶mo'$äÇá DٲƗ/·«UËÂß?®qã#ÞÞ…CPÐáò[¯–Èn”pù[“=U’¾*1÷Ë(%¶ˆ""Ï—M|pñ¸À/“”èüÿD”¼èµéf»Ö5k~Ùïó@!?Û JWדžžÏärÙÁƒ-†ýýéýÙ1wî«3^Èd’;kµo_(võúuª«ë+…B“VŒ+ÿÎîî±;v$u쨛öø—'N°h2»wca‘³uÃN¶ý†œ½žÈ³¼áj f¢R3ª;5+dƇ¬&<–¯k00˓˔#<¡¢3²Ðõ×K”8§C€kï8€\Ƭ:q*&ú,vÀD0*˜ ß™ÑÚ`M"÷•”ÔÂÃ`2h`ØÂ\âUÐy)´VðV‰è@;ôwð"uC¬0?Äd”5)S«sœK%µ"…ª¢ ÉÁë‹Ç§W•úç ::Ú<{õÎ"Eм_¨â¬µ´j º3èuÂëÆûß\q«ýÕ±¡199¬½žcE's-8E ½ORµJzZ2ÙA"{R¬rl’‰ÉC1¨£gjºÆ‚qû5ú2´M¢§>Åž\mcåô^ÅÂ0úEû”,Yrr9“õA¬ BþâZ§F¿4 Í ÎûÇú9˜”5fx=6ÝSH”ËnëþäpõêÕi휎>ÂTÎÛÂçuÖM+à:¬ ›NÄjë™ÌÚÃr·tËfçZôm‡÷SõO‹â®HLkÚ¶‚Z-HˆOœ½TkÊOzY›ôôص‹ºuUáá²;éÞØØØ   ªUÓwîœÕ«WA©¤gÏèÙ³CìíK~("›Õ*úêÕ«ÎÎNk×–úá‡à-["ŒŒB{ô¨–»›OÉ’™gð÷¿{áBƒ&M®+•¢Y³s—/7×Õ•BÎ1äs†¬M¯^Ý»|¹}—.g½½#zö]+4³B“Ž:EKäA‚%Bè+óÞ–•i”Úš¿¤â«BÛ`¾Óü»+Û®Nè5ƒÔø²í;ùøøT­ZÕÎ¥…K‹3ûoz7ÿ¼3œ8qiΜX•J)¢÷Ë/e3—Ž>m çÎiŸ8ñ^WWºqcu++?°.ð çÎ]]° ˜••võêú#FÄåÿ^,_žèã£20àÛoÃ,-Íst cÊ”D++ýÑ£¥iÂö¬gøuϽ­{k1cÉtl‹ÅúødŽÁc¡Ÿ¡~Y»âLsËœÉ׉IÀD_¹É];m%ìêÕ«z%œn`.geç„W¾igxùžƒãmŒŒ~i‰DÂÃG> ÞT¬d¦ý}YJrõêÕ3–NeäT0¤dÀUlÎÅ­¦¨L¸%<‡Šá$STºÂLÇ@Â=x›˜h£¯?N*õA‹0KUý cä‹"•Iª¤cLB S¡Ýà¥4´|ô€‡ yêøÆ=§êÐfe‹JÃÿ¡ß¿4|4ÄÄDí,%Ô•J¥¡¡aJJ‰%‰FhØÎv=ôÜqCìBë¡=‹ï_“8ÈÖÓì%Én¼0BëUŸ îD”1ÒÛ}„´1˜B˜Â®$ºÇ`%å¹%Æ^%Så)JÁJÔ’“ª¡Úež'°º*CK ºÌ_ºØ±çk€3þ´ØŽžŒ{ƒ©”ñøu'ó‘À‰ÔÈÈŒ|Bõ‘$+¹8çŒ}öÈ*~KT,{æÒ¥y¶+=s‰–ݑɸv˜º5rÎÃÖ­ôí‹™>>Øæ@‡†ª4ˆzýZÝ¿¿|ãÆÒÐ&Lx;oÞ»%t¼½+åS;,+üýo¼}›Ü¥‹Í®]5 SC#(•š1cn._þXGGº}»K—.välŸ ²êâÓØ‰B;cƬÐW)<®ŽÏ¿tÌß…C{\+ùuaz6 :;¶L\î„ÇÿœÐ²åñgÏb*U2;r¤…½ý§×°JÃïºtñÖhÄÖ­5{õ* ‘âú÷ܼ9ÊÁAÿÚµ ¦¦ù%,Ÿ:•âêú^­æ·ß̾ý6BÑ;rø0®®9’ss0%•®ÜÌ^¬ÉÎÌÃÞSñ[bâ9²„vÓƒ ÉTÊ›HÖgp«ô JCÝ9<fBkætLjΛ¹ÌàÚ¬uøõ=ÏSÒg]ËðWPé"jÁÝÆÔ0F-¨ù Ÿ$gL1€þ±lVÐA´údíà(xÀ<èCô’‡b8£yu™Ø^X¹c;Ÿ{W iK™!T^ÃéºP¥+ w±ë/êS¿­$’ßñã.‘Hhõ0“ŸÁø#ø¶ÍÌÌr¬WEEEåXÓÊ ±À6Ûag‡]2ÉW¸bO±j”LFy’ûU(R“¢‰¨áW £ºÅ£ÞE˜#:NèÄ¡YO¢| 1°€nú4Ñá&ÝÛÝ^,ÑÀÈàto÷9¦>'N0½2öúsí@s;Ô$YEÏ(3väê–fäW¨4¸í@,gƒGg„`Ø”Ë ¦Ìྈ؄lÛ¼ £¡Tòý0â³7}úðí·DG§œÏkk­ƒÍ $›6)–,)ÀïjæL›Æ ƒƒS»u+”à°³38y²¾™™öÞ½!#F<.Ì!ù@[[ºtiñc«§¦jºu;»t©OÁÇ|ȺAv¥NÿÙ$“Ÿ±Ë[´”†jÝ{×>Ê¡s7-OOæÏ2=ýzÃGÕì“Wv+DXÝ,ñU!Ou³¤K™‰Kþ¼¡}&ðõqr:òìYLåÊfgδùãìêòå÷=zÜS«Åœ9 Ϯܼ֯9J__ú믥ógWÏŸ«ºu‹Q©øùgÃ<ÙÕæÍ>Œ‰ «Wç!½š4û)[š“s6[FL<­f²+`úNÞDRÇžA™&q,>Ã`JaRëÌà/7¸ŒµazYŽd5“n̬ƒ\0Á—T }ŠSÃ`]$>IØé2Òà®’­ t$,0¸ ÇÀ~”gI–#Š/Š+Äê#íE±@⯪ƒô;Êþ@]d­©ñš×/x¡ƒNcpˆ$8Ÿ)ýÿ|«råÊ>Ìyô葃Cb^q; ÿ´ ¹ÍíXb;RO‚ä"O"‰ïE ! –”¡Ø; C5#`=‰1hf@Ø •&È`y">*€ÉÖXis=ýѬp2'"•…~6rFWs3=§ë;ã%M¸Êâ,öÙ)cÁ@V\È ŽïL[ž±4K¶þÀŽ4¨Æ»(fæÊ¡œ;‘•ñ dôÔ¼üzzéÝ´pé•a›ƒzÉùõ2Tmî\Íî‹+XI¾ŸmoïHgç#AA õë[^ºÔÎÖ¶`¶??ŽïØñNr²fèÐRãÇÛò¨‡“Ü݃5kJæŸ6øþ½¦]»è˜M§NzÓ¦åáÿæMºêUä6@¼tƒ%ëÉØ±£ìuP¯=dûqôuYå‘|Ä2/¤V ͬèÅÌcž=1ÈÈ|Å” «ÛòÔû*°ü1¯¨^„žånÇð[úZL+§&í¦¸°8º40< Œ5 ¼ ÀÆ€%,"^@_ ,®%DÀwXš#ÛŽ¯@´¥Lôr[À×T3Bÿ,g'œôÑ»Í œ‚ÝI2ñŸë/Àç@°\]]·mÛ–5²mÛ¶öíó{ø Hˆ›üV Ë*TQ¡ºÀ[ÌëQV…æ8÷ÊaZ—bɨ÷ãW Ãz' ÞIxtœÑC¬'±‡'0€*2Üä¨`t€‘Ómƽ%Y°Ø ,ö'8 À£:Vrn†s0 eÓ›: iñÉ0a—ë°ê{€I‡ˆLêj³bÀ´fô”JY;™ËvñðE¶ëÕÕá×UÈõÙ¸‹=¹”ŠM§VcÆð2g¹€Nô¦N5ÒhèÑ#ÆÇ'?Aº••öÎed2ÉìÙ¡'N6•©I“"{öÔÖÒ’üü³ïÆ‚öÜݽʖ-Me2éüù†¿ªÑ䱜öAŸñå ‚•QꆎYyÉÇ^Ê5­ê)–ð6÷Ir¤ÝÆ\¾þðQm‡Ž(Õ¸iýa¹<ÙráCÉ?×U ŸúWø´Ê/ûl_¼ââr4""ÙÕµä… ®EŠä±ô»ðæMr›6·££•;Z­XQX_€èhu§N~IIš¡C‹ö铟©RI—.1/_ªÒór{» ÁÀDGÓ¡=r}£cé5†écp¬­I­aø|„À£v¶™gé‰RÅÐ6ÔËâAê¶Äz;Ò"ãÉ]#x„$ýjб"NNNÑ)̰°~:3›à‹€í(¡0=”0%Mèd °^Ám%ŵ˜`°΂?¸Ã#”gI‘#‚Á3׈ÕGÚ“b/‰¹C˜²o±{B°/!rt¿¦êSž¾á!†Ž8>åR,á@E¾¸ûÛ? ŸÁ4hÐõë×çÌ™={öì›7oÌÓ=3ô1Ã?‡.¸h¡õˆGïx׺2¤7xJt/*J#0Šä!Ø»C5C`‰Qh– ì‡cÌ2ÂBʹö' ´ ¶œ€–„Ô3¥³5Ij¦½0ÔfJ-€±·HÕ4+àڤ¨és0s£°uºÔA‘Êð]™ƒo^ƒïœP¤0fcf°Z9†vƦ(S_ôõj¡Þ+¦z ·Çâ|’Hš/æOÓü„_ŒH)6ž~",HĵG;ŠcïDâ#‘P[Üm,î½Ê"ÕF„Ø‹ÐH¡V Q]„˜&„B-D½Aˆ˜—þ·:¾Ü2¾]î^¢eÆ7öp ÀS˜oWî=I‹œó’iBg¦xø.sÀë. Ü„Õñ>13¸è€ÀU”$’R2ƒ·ŸG!©#œÏyÕᑺ†ÀZÌ_•Çœœ>-$¡«+=Ê£U¢.^< BúöÎz££Uvv>pwÈ×ù÷Ì#|ÀËÄäÄDZ¿ëÀÁÇ'ÊÆf;xÖ©s <<éCüÑÇ.ò?|üÎòÚo³‹ãÒ²Å6»8z ëïwîÔ‡Ö³çÿð‘c¶çÍ»/‘x‚§‡Ç­?åü*•¦cÇ;àU¦Ì¹xRVœ?§¥å-•Þ=~<&ÿž§O'Ëd!IÈŽysn¥RÔ¯/@ôë—GëËah/°;ælŠŠ¥\µÅ„•ÙâÃ×\…Ó8¡ÉÂ?{l¸ —_2ƒJµ¨·^0M <’Ù­ÕþB¼ Ï Î¾,˜&l‹èŒ‡µ[aBâ)ô7Š x!„ˆW «Ó/q T!TQí‰à®˜*„!œ#!â§X!„P á(BŒB‘õ¹ý‰H¬“ñ<ï-Â]…WwqJ!”—Ä7á9YìV õyq~š˜¶AlÐÍ9±ÑS¸U"ù?‚õOÀç Áú4ÄÜe^iªÙR1™„œtÄÑã0žð¤%5 Ð}Æ[_Þv§¼’3¿%q(¶ØMø{Tã0’À&#Ñ8AoH‘4С—>)‚±ñ@z^®F#ÀL{€±ÏH“_Ï«‡¶ûëúÇ¥pa ìÍyðŽ9WÒ# kº£§Íú«œ÷MÊ´X9‰„yûxžEY5ê{¾ùŠ˜xºŽÏ)ÆjÑ„ TÒcx® ‹S®÷ï3{vÞS—5©ðèÑü$VÕ«ë/_^:4èÁE>=³BKK²}{ÆÍß¾MnÝúöû÷¨NÊ”1ºr¥}E|}cùø¼>Xþ‡ÿþ›íÿ'Òf[­^Z´è‘ŽŽtçÎfnn•þ”“Ošä»iS°\®uäHÝ  >¥RtéâªlÖÌhòdë|z˜6úç¾1âåÅÜïv϶`è$ fDpkoÊJ¶%¤ŸÎ­k9Læ­TnJíõ¬·a»ÛkQk¿ÝM{o¼Nò+àϵ”8oÀqÓãæ °<ÉWG<¬ T«K ¹;ø­ MªP%…3æÜUŽ€3ÄïáÌs4ðÂcΓñÕ °€¸$ìïÔŸ?È>‹£"|À;U=0 «ò$"\’ ~ŒhðѲï܇µ˜èê£x_-ÞhŽÝÉ+¿asÅ>Æ!‹å‹—nç«W¨̪ÝüyÉX.ˆù_àãÍØŸX\@C ðõá§ð÷cò\\¡ÚЦ ヒÝN¯^dÞ…¡CŸÞ?=]O>Y̦Âï¿¿¥qcOOÃK/±ZK*ì[¶¬×²e-n½ÕÛ¶”çžÛe·_Eàrå|V¯~â©§j''[;vücùòR!¾RüßDJŠí‘Gþøõ×Ó*ø®YÖ±cÍërÚ%KbÞzë€ÁÀäÉ÷têTLßÀ‚˜4)~Ë–LÂuŠîñ0`@þ¶Á¥K ß6|ò ûöѰ!£F]>”œÊKp8ö­Ýu’ÓxöCrí îEç.ÙÓùxÀøW v ríâÛuxz0í%¼]»ñFmb‡…[Ë2ÆÕ*ãL:l#ÇÁóu öz”LO‡p_€O£‰Íå¾@º•ˆHÇâ /ú †èOƒ` iÍð~ƒ€ŠxLÆ÷Ü.‡C£GßÞ»w1ò 1cFâ›ož3›3çͫӪUQº¦&dNœ˜åçgX¼¸B­Z…« lÞÌ7ßàåŬY”¹B ôµÁœ»À}Íùð-7»DŸáœ¦ÕÝ|úšÛÐ3HHËW½ÉƒÝÉ+³±;y·¡·æ÷Å2â/ 0ùI‚|œ¢ÏŸ¤çòl]B,›€ÃÌ<·!¿iÇI+ßÅáãka€Cv&dâãƒ1À˜>0€ùdmÄvÇ+ì#s+ix¾@•XN‘VÿŽÜ²’=™Xo§f#j¬ag(¡©°%@(Oæ’|ŽÕ†R†ÿ¸Ù¬;è g¾7^wñh+¿Ô§~mjçId[U&8–”­œx–>xFb9EZ?ª`!ñIä%8õXW‘ã߃'|ûÀ Æ|–ÁžÆÕø<†è\ ðÕ£Nkøo§;zÔ#ÓNï ùܬ2ÞÌ슧Ï7²ÃµªÃ«m±Ùye64ãUC¢“ølžÛ=AÆê߇°G.iñ„¯/3fàë˶m,½"ŕÒ%jÖôÜ´ÉöÚkEiŠÖªåc2Õ­ZÕû÷ßSŸ}öTnnIc¥úõL¦æžsæD z´„«Š†——Çôé~üñ½!!¯¿¾é…Öed\šW)ŠÆM(ëú¯`É’3Í›/>zÔÚ±c­ÈÈ. –+~M °z·nf«ÕùÆ· T·ä .L~õÕ³N'£FÕèÖ­¨‹Y½ÚúÞ{iS§–mÕÊ»Ð9ññ Ž¿?ƒÓ²åå£S~dÁRÊ3÷;<ÝcŒ/çðÛŸ”w§^›3c >^ùºÍy»†g¹µ"Ã\’mv'/ÿ†ÍÁÍéèºûï²ÁBe?¾m“ÿç=èvñúmÔ…U¼\‰Ð2陋 ¯—¡™7NèN çHÒ‚ƒñ˜„èA•@<çq xžúYä¬ã€ºÐìŽpÄŸv´;ÌÆd,ÁTºƒ¶‡˜.·R ›O)þ=ÜìVeB+Ó4—ÌÌoÊãþGsì,{ó’X[ÙšIÆ“4~ÇŒW'nüıF”iK¹lœ³‰­ŒÇ‘–…B!ìÐûò”bp:ÀCAt)Gºƒ¡€+òDÒíŒpé§?5ˆŒá»ƒù–6µèßâRù?cž¢F9¶žbŠ+³•×ÛÁÓƒqKÙ{úÒ=$c ùÞíö ¦Cµ*ù¬…ËÊwßÉ /àÞ‹èBBò3ù3gfWT§Â† ýV®¬_±¢×’%)=zœ.yɯE‹róç‡zyFŒ8>~üé┟}ÖlذfeËúüôÓ‰ÐÐ_÷îM¼.g.E)þ-X­Ž·ßÞܽûªädëTŸ7¯}Íšÿ´ NNŸÎzôÑ­))¹Ï=W}„;K¾ð×_Szô8íphäÈ|P­ˆ™GÚŸ}6Ånç£_x¡p Y«•nÝXµŠN:ôòÑg8à‡QÜæž_Ûv€O&b00c˜õÊáäÍIH ~š†.1÷3‰ ÿ`ò‹ººâäao+Ç(W“ñÓé Ù0±-UüþLä8‚¼R`}:¿¥äɧÕä°ÒJ†L„íp |Àç¤'âl…OWü÷‘±´@<Ÿ§Êz¢Î“B@{jýÎ.ö¦Ô©M••¬ZÓÚï]ü´äédDZà ÿú<[„« G)ëàf°R‰¼— xœáIMyØÆ¢jT½“;íØ7°¡ukQ1‘Œ¿8üêûá•G9ìGˆOn/îÂûŽoÉFAl„L€Ÿ²ùÓðuM| LOÀœðÕx˜t–Ãå|˜ÔàÃíse…>˜9œÀˆ¿ò-Á~Œ{àƒE\HÉ7Þ[—×Çî ÿ$·¶ÍÉXßüÈ’ n¨\‘™ã0ò;ö\}éÙ“Œ œ …4MhÚÔ{Ö¬r¿©põêúåË{þòKò+¯œu–øøÄUfÌhb0ðÞ{‡.,i‹ÃbñÔSµ·oïvÏ=ŽKmÕjÉøñÿ´Õt)JñoáìÙŒ4}ûí///¾h±xqÇòå}‹_V$$Ø:uÚm}衊3g6ñð(‘\;°|yj§ìvEDT2¤¨è*9ÙÙ¹srr²³[7¿áà ß6ôïOd$Õ«3v,—uÏÍåÅþ¤gðÒèÑÍýäi<7[.ƒzÒ¥ÛÐ{Nqk?uÉØo.™Vz芳7–Q›ð00£Kâà2ry¡OÕ¼`H=ªúâïœø¨!Þd‰Ò¾¢¢q×uú[€½äþD–7†Ñ”5ÀÅôU<çqèAƒd26sÄCgšáÈyΗ¡LkZïaEiU¨s1¨Ç3†¿A€*å`ÝܼV&³  JMÚ;±aδ+GH ±GØØžxîaO i,c—/†0n~æhCÊ´£œ çb=a e=`"™'°—…<òåûµ<ù AÿTìP×]²¡Q }jaÉç©„ÝB¯dÙ齇{¡pt$Û]ÎÓ÷Ò¥1i9¼»àÒ}}ö"Õʳé3Ö¸Ýoó;Õ¿p2Ö£òforséñW$¡¦MãÁ±XèÒ…¬«(-<õ”ßС%ÙTØ´i™eËêyΞطÇX/¾XcäÈFN§^|q÷êÕñ%]V$6mÚÔ AÙmÛº pWNŽãw6÷ì¹¾´\xƒPÊÁºqX²äLÓ¦‹¶n»å–À¿þêÿœ©S dÙ2j\Ñ‚ü“1lÛEí[˜0ÂÍžG½:c¡å]|öºÛÐùx†ýðÝk¸Z2ÎÞʪCn]qr]ÅÁþ-xð¶|ãøüMH¾½/ß2lÝQs*5üP®f™ÁY¡Þ¼R`$ãМ0„T'¼F@}¼ö’±ô@<Ÿ£êjÎÅu Aí¨¾„ívœmhX²yqäA;ÙûY†V<}õ©œð£bmž´0ˆfjn/Åÿþm!®€Y¡ôC¶—éi“Âuð´v>K­ÊZ¦eŠøI?IúJKÃeü];Ód}FËÃdÚ¯ÄÊj.sk튕MÒ@¥„ÈòŒ%9¥%¤þ’¤§êÇ ‹¾Ï”¤4»ªífý’$I±9 Z.LºØ&ŪZ? £¾Ú{é‚®jô²]úx’Uöm®%{.MûéOu¦Ê=t$Êí~Nu(BÕâ%YÝ;OäXuO{¢×⨄Õ«'ÐÓO»i_vòçŸOKíÚ±qqÅôÆÙ´)=0p˜ûö=sµŠxzþ~ß}‘«WÇ_ò`ΜcÓÁذáü½{¯O—žR”âF#'Ç>`@džJ{—.+“’®AT½X$%Ùºvݼ¼nݵ11×pæÕ«Sýüvùí·Ï;ù7RÀR­Z̹sWtïraÑ"yxÈÃCK–2úçyÖ”W-m6_>4f–Uù‡tÚ]ÙÔáÔ#«Å{z±@?±„ U(Â5{Ë%ãÇëD„jSºKxùdª¦ £~=o±:Tg­0iæyéŠÇû »ü¢åaQ^¿ŸË$©§)#D–fŠÍ”SR? •Ù(‹UŽÞZ&S¤¢Ï+±Ÿ&¿©©IJ7Ë¡ˆño—}½f¾F“í²®Q“ÂÎk]–ŽšÕÈQñÎÏ@#]ÿãæ0t3 º`ˆe®¶:t1ý6šT£~é{YÙŽv¾øãØiNw¡9°Š½àèL`.Gêâÿ åm8g|LP<6b]J޾oø¶ƒ¯1A§“à$È“¼—ºAÈqRÅ—÷ê <”/‚UÖ‡i`€vp09ÿZG>Ì•9’Àð?ó-ÕËñig€7~"Õ¥§ðü”$>g¾ »@žö"kûA>úÁÍ U&Íæ·•—û¨bE–.¥\9~ù…ˆˆ«øÑµ©ðôiG÷îÉEo¼ï¾À%Kêùû{Lšðî»× •0vì\?22é‰'¶ÿøãUj– /¾XßlîvÏ=ŽMiÙrqi¹°ÿûqãÊ‚ÀÙ³Ù÷ß¿yÉ’˜6mʯXѲjÕ’ž922£[·“99ξ}+ÛËù»ï2ø¡˜mƒ»wóÒK8ŒM—.—¦¤Ñó->yçr]†íùØE½º­ºÛÐÈù¬ÞÃÙ8Æô¾d|g>qé<Ô]ôùÝ1ŒÞ„‡™] t{o ÓN¯t»-Ú·§9•Å=Áô¬ði41¹ÜH÷òo§’#ú”¡•÷%nîhñ8ÇŒ ¸ †=d˜óÓWU–s6캔mMµ_Ù&ôwá÷èBôq¶xà•§,šM|0ujð`ãóP¾\ÃNO7à¸éq³Xåy؉Õ¤º<åK…ŽFÙŠ§Á°5NrÚÐXËÚºT½‹Z9ä®boWêá}¤}$„Òœàµ$Ÿ&§ %5 Ý À o‚ºúÑÉ÷RõW]’ ããÞ¯C-¼ L;—mÔäåFX¼òg~¡Ðדiñ40&’M®iý¢u,) -°×ÏØŸF5Ùw†÷Ü“Ä僙7 o¾ž{9ëΆŒÐw –+48o¿yóðòâ³Ï˜;·pgºo*L+|’ ?´dI]??ñããŒ*zòExx† k0hP]›ÍÙ³çî/¿Y¯%+&¯æýƒ~pÊ9UkÃeüY‘ÙÊ}Q«Âd2+6EöG´7TæJ”´W¶²Ü¢èSÊ•4OB ‘òz¢~&,êà"ùt;!ÌzólþO®K¤Ž[u‘˜´2J0M§\=O³lºã{¡Ñ›.ÝË'¿‰p…Ž”½ýiú*¦²ÏêTŒÛ;zúªÇ\Î©ŠŽUµ{Dˆ&Î*Üiï¿/P­Zнªc,È‹¯oôÖ­¶«NraÑ¢d³Á`ž6íÚhU‹Gûúþ¦_Üe³] “Ë…}ûö]mèàÁ¤ví–‚ÑÏoê„ ®‰(VŠBQ„·KQr8t×] óþ2gÌ8zµiÛÛ Xò¾Vo¿}Ðj-†LY§Nåä5r~õÕ³v{1_˜¬,gÓ¦ñ`éÙ3ÙqõéÓG ;îP|aφÓçÜ@„èçÅ—ÍþÃE½²¸ÙNu&Âôä§nʼçg‹Ï•ë2O”ß"ô—ëáì”Ú›„Qýþº´pú9aR•UZ¿ç¤¿Ò…Y»m“¤q¢{â•Gš —ž–$Ù¥Š‘å[¥KJQn{í •y’³”û¼V†É´Wñu>\Æš-Û­qq‚¿ês£Â÷jU¦bþP×ßÕ9Mgd2+t¿º8e½¦î·éú7w€!éæ½§2€T ³+u2+4UÛ,Š4)l•^²+g£æ¾FSrŒÓ¸EÔA‹’úiòšš¤Œ_u"L¦wô—SZ¬øP™;joºìr±Ý{ºØî÷IHC%IÉUŒ-Ë‘¤ÃÙòÚ)¯:”-IñVUY%LšzöÒ¥öX+ŒzôK–U'E„ÊŒÔéä|K¦Uµ‡ˆpMXçv›Ïajþ®¬¹nvK¼*¶¡2.ºÜ3‹—‹ÔÕ±S—I²ÙôÀÝwŸ¬ÖB&äáí·SÁR«Vñ„wI'ÆÙÓsç¢EÉÅN.ˆu낃—ƒ©C‡-ii¹Å/¸dgÛ ˆ#;w^‘}}Ï_ŠR\+fÍ:0-o+ÆîÝ ×ýüÓ§ŸóòúLo½µßḆ·ŠøøÜ† €ù¡‡Žæä¿ðå—SÀR¿~\JÊU'O˜ ¿¿vî,dÔáЃO‰uísùPT¬Ê?$B5ÓtùÐW¿Š0•Ngã.ÇÊïMúiCxõ‰E„^þí’eúaT¥YŠs= .d«ü aÒQ’ä”Úf ·Hõ¿çHÒAÉKòvqÛg)3Ûž%§¤‘:*óë:&ég “i"%Ñoá2®Ðž,e}®Ï#¥¨ÓÚmTø Ê•u—¾6)lÆ:dݧ'Ì MÔ²­ruèj¾½ 5uý›>ÀºyK„b€L¦‰èª¼D1.„–åih%é ¦{y “¹p?÷ØPrͨcDZ‚=OP»"~'HÝNlg*ÝM@"¹ÓˆþKP0k°®Åj€¯Á_Â9(çÁ@€iØ¡‘½+bŸX*ù0þN€÷qÞU(߆J~¬Œâçù–GêðÌdå2pU¾¥Œß?ðÑ,.Y,`âÜV…ljøÉíöC*1åc€÷ÆrüœÛP×ÇèÑÌ,z¿ã ¢¢·7 P³&‘‘|ðÁUÝûÕWÁmÛúœ?ïxî¹ä+Or^{­òС!‡^|ñôÆÅÌ.€‡ª¸n]ë*U|׬IèÐakBÂõ”^ñóó?¾ÍâÅ+Tð]ºôl“&‹þúëºIp•¢ׄÔTÛóϯíÕkCf¦½gÏúfs·&M*^ß=úäË/ïu84lXƒo¿½«äzWYYÎÎO=šsÏ=þ¿þZ××·˜…FcÖôéYþþ†ùóË•-[øäÍ›8`útî½· _ObÃfªTÂ8ÆÍ.ÑwÉitiG¯0·¡'2ƒïpKšê€ùääòrÚ5È·,<ÄÇ©àÏ.YÑ„o߆Ê.M‡7œË“UéQ`^›3¨îÍÀªŸgè¤Oø¼ vx@*Î1¤à öÇp˜¬%$xcø€Z™Ø—r èIÜ?AL ~í¸#’H¶úÔ¯Nõ˜€¦<žM´… xÕç¹xæÙˆñ§A:¤ñ9`åZ¤:ì7à(Å¿áý›, IR/‡¬ûô¸Y¡‰Z™ ý&…­Ð³6¥mÖ£ÂWê{‡ã5>Bûµ?F)¯iÊš’ ´¥:&SmpÊyX™Íµ³…vW–$£2Bdi­8«œ’ž“^’$Yª',š’)Il Ø%ÌÚ”žaO™…I(Ns½<Å»^ž¢ÓUv”ˆ©À[WçïE¸žŸâv›Ê«‹<žÔªÝ—{à¹E¨ÚôqË–KJNU­P¢1ßîº-[äë+дiWuot´£zõX° ’vÕIðÖ[çÀ\¶ìî={²J2ÿ"NžÌ¬[w-˜î¸cùs×¶¶$8w.ýþû£§çäÁƒ·Ùl×P7)E)þ9¶m‹­Sçg0Ϙ;÷øu?¿Ó©÷Þ;&OÏ߯³Å/(›Íùè£ÇÀ\·îþèèâ)»wÛüý£Á2sæU¿ª‹ªWhРÂ'<*¿ÛDˆ~_}ùÐøŸE¨*wPŒ»ÖJz¶öa`t³ÏÛ!ÂUá]ŹžRiVÕüFDhrÌÙ•e„¼â`¹ŠÊ–$«Su÷ ³ò˜çíò–Á¢6I2IH奼¬ãGJ ‘å?Jäzép¨Ìß+JÒ:&ÓGÚ"i”‡Ë¸R{3•y1}u\ÛŒ ÿQÚ•»]Ÿšv@SìJsÕa¶fjŽE!€SW/1¸ š®ÿqsº™3Xy0”ê\¶‡Ð°ð]T¢q.™'YÜ”NÞøaogÚÒXÏúÊ5§Žç ö>Æ­•ð?CúfbQ¦•h4ç/Я3ا“Œ?˜;ÀÇÀˆ@€ÓIÕ½y¯*ÀûQlÜ´ ˜x7•}XÏl×îº> y¸ 9üw{¾¥Z CÛô_F–k¿Æ„çôåç,/ 2pÿ|òNÑókb’)ˆ‰R«*›÷ñûÆÀrÁLûƒOưÿp!~kÕ*Ÿsúæ›ìØQ¸o«UóX¸°œ·7£FeüúkN±¿‹±ck>ýtùÔTÇã?særQuê”Ù¸ñ¾ÆƒJoÛvóÑ£%Í•Pú²V­ÀõëÆ FÞóÀKOŸN/ùå•"¥B£ãǸÿþ¥§N¥5o^yçÎî/¼P¯$ Kîm›Í٣Ǯo¾9åëëñóÏ÷†‡ßrM—×·ïÙ•+Ó*WöZ¶¬^µj…(¤$g÷îÉÙÙzë­€^½®Ú§kW,~˜Ï?/ì‚séñ9Vúõä‰nCGÏòáw?¤j·¡7~àèî¾/z_2¦ç0p!ÀݨìØ@TÍ«óJÓ|ËÊ(~:A/~pµÓ´ä0ðÀ„»¨áðîö3'­ÜíO¯ŠÿM'[ôð§™7vø/à"Ã>‡LON0ð+ñȬŠOB2É]Êià9àÜiâñkÇíy髆4¬NH^cœPÂÒ9Ë/üêñt4Óí¤Ñ,ˆ»Òù:ï" ¸«Ý—âÿv„÷oH×X‹BâõˆS¹õŒY¡±ú9YÇLzr™ºg+a›þ‡Æ9圠 ŠØ«½±JyMS^×”x¥-Ó™§´l¤väÊ™*{í •y¥%ý¥œYê+:FIƒ%¤6’3¯ZŸ ,–&IéŽ|aº‹¤¹Q¤²ËuÞ•²:–"¿©2µÖ¥˜—ëP“I"BŸà]}±B„«þÇÊ.ð2épªý¦Ç†]Îj_µU†fòm­½Ç.÷O¿DˆZtº\•ôÒ„~ÝrKQ„÷/¿ÌKPPôáÃÅs¤¬Vg‡ÇÀ\¯ÞþØØkãT%%Ùî»/L*¬Ø²%éšÖ–ëÖ]¨Qc.Ë–1þÉñ¥(ÅEÄÄduìø ã€‘×D9/!22ì=¶LËW­Š+~;Þ}÷<˜ƒƒwïÜ™Yìd‡C=––V­â­Ö«R¯úöèÖ[ '¶K2J„¨nk¥g¸ÙsíjÙK„ªÏðË—ÌZ+Âð´Ÿw¿þ"\Í?×E¾ÙþXy*ÏáÚoÉÌUŸ/×|îºC˜¶=ÿÇ$»*ìf­H•¤Ý6yXä­3vIúVBª«ü„ÒóJ ‘eˆR%¥(÷aí •y­’%ÍÓ±Z5T[%}®Åá2®.¾º  ‡µÑ¨ðyúÄ!Çf 1)ì¨~´)v—Ú˜Õ,S‡Òô•E!ñzüšþ¹TÒõ?nîC¥¬^ó¤z.r0Õ ?ÍÔ BBhíÀv‚MèèK™(Es>…S¯~ø©Sñ÷gÑ"*U*d¯Ë;™v­™ý-îâ\ŸOgÛjVáëwÜì'£yË0¡j^²›Ïòý<=0¾HßL¢ÿ2r¼Õ’¦®Þ‰CÍœJ£qEÜ•o™Å’Êz1ñî|Ëp IvÚñh0À tœ0 €[=I†Oø|`99°–Ãã}o¹‚½%Áí)wŒywàìÃû8w†¸`Ê<ÀÙhÃÖˆFÕ¨²›å@s:'°+‘}>סë~pb­À£~TÊÄ3¬Ø_Çå(å`ÝÜì–å Òù"˜A4³“ËìF¼dÀó,«ì¤ÞMÀÌ’{¸§•’HÚǾ0îõÀc3ÇRÈx–zÀÏO$§‹;Û}8Á>µ›Ü Èk?¬ÐÚ‡n~dŠaéá•h@Mo¾r B}7¼ù#Ž‹Šåƒ›pgyŽ¥2jw¾¥E z7Áæà­åùoO&½Àƒ fb“‹ԨȬw1<“mGÝœðÕ;Ô¿…=ÇøtŠ›=0€Ñ›À¬ŒqW~Ïÿ,o, F 6mº*áÝ``Ú´r zeeéÕWSíÅ}낃=W¬¨_¿¾ïŽ™]»ž(Zþ2”)ãùÛoÍ_~¹Vf¦£sçóç[Š_s¨TÉoéÒÇÆkãëë9gÎñ-ïߟtÝ?¥73¬VÇÛoo~ì±e±±Ù:ÔØ³ç©Ç»Iî’ÁbÉi×nóæÍÉ·ÝV毿ÚÜ{oÙkZ>gNâ'ŸX<<˜;·ö#/k9wnöÊ•V//æÍ+_³fáŠí[¶ðî»'ZÈ„ÝxiÙ9ty”6Í܇Ž2r:Ìþ”ò.'×Î _“–Åî§Ozb¦•—fа*CŸ ©Ë»Ó÷ðçYªñ`¾eo"ßÀÓÀ´vx{D[yï À·wQÓ`o6ëÒ¹Ý<Õú?¬¬±RÞƒÁŸA<Á†F &¨<‡È4¹¸íÀÙq¶%ä6‚þ`'ðmäìd'ÐŽv‡ø+„ ԨͽG™Ôã™\,I,3à]×Ò-2üx܇¼úh©˜ú¿;…ö/b U–’ãõˆE!ú!CÌj¶Km¬ŠÝ£ñ&…íÒW6åÌÖ@£ÂÏëÀ>í‹PÄXµË>SÂeœ¥?%}.s˜L£µSÒ!w¶û¥…Ȧ§d—î’¾‘$´Ë'ZžíÏ•¤µi2˜å»S\ìÏ™ç…IW*ÚÕlk¬<&ËgЏŠ`‰Yª4FDhÞK÷6x‘WÍÁŠOWAôŸ$ÂTïU¥ºgô#÷ʳ¹<škãDø?Öȳ¦}úU}}ü¸½nÝ8°ôèQ”ìÍEœ8‘Sµê^0÷èqª$ó ÂéÔ A‡ò»'ž)bæ?QfÚ¹3¾Aƒy`ô÷Ÿ6nÜþ¿}ž›¥:X%Á‘#ÉMšüF/¯)Æ™¯I+¡ ŠööáÃé·Ü²LwÞ¹!*êšõG–.MñòÚ æñã¯N(€E‹²½¼,žž–¹s¯úYÑÑùÄö Ÿ`‰QÍ{Eˆú¼sùPŽUw?+BõÎ×—½7U„©N_¥¸×{Íáº3B™."xb–*»?HíN….F ,К°ÛaÒÛò´9Õä0«çîxå=áã„Eã2$é„ä+yHy=Ç)=D–—+9¤—t8TætAÒFYÂdz^+ReÝ£3á2¾¯9Vå.×òEÌ×ü\åÌÑûF…ŸÕÞ(ýiRØjõ²Ëz\o™zN_çê˜Eµ,º%W'¥§éã«yû2”Óõ?nêCº™u°”/4Š4Ī…Ĩ¡CI'5ȬÐ3™­„eêþ»žLÕɽZiTø"tÊñƒ~ˆPÄNíLPúšòš&Ç(%^YOky˜LfÅI©³¡2¿ª#N)CÎ&Š ‘åeIZæ¾ä­TaÑã® /}Ž[1«é!]Îì²C˜ôäöK—ýÚFaTËÅ—x“wŠUûJ)®8,סûF‹p=þ­é*Ǧ&D˜z½Üƒ¿¡ªÛEéW°)FM! ¬§= ÷ä¤IùùiÇŽ«z{×.[¹r1`éÝ»D1ÖŽ™AA»ÁÜ¿I[–ĸq§ ˜¾ªLJJÊß8óE¤¥Ùzö\—'”Õ¯ß_.OC¹™ñ½ýv»sܸý•+ÏcýúóÌæÔμooßž\¹òJ0µl¹1!¡¤Í.bË–Œ€€]`6ìBñ³¥•+s|}£Á2lØUwÛlºÿ~Ú·WnaÜˬlµx\„¨m×B(¡ï}#BÕè)e¹7¤^n–áIyuÑæÃnöŸ¶‹p¼¥ƒdHû.zdö%Ë—{…Q·þ¨t×'Î>95vØaVíýºœ*ir¦°¨v¬ò´ÀºJH¯H’¢e¯§èY"e•4_q¡2?¡}YräÈþ²Ö„É´\gÒçú5\Ƶڟ®ô¡ˆÅìÖ2£ÂÕçNå®W?“ÂÎiUšvšº[ms•˜¨- IÕGÒVÉHî*«W@€®ÿQ`ýÛðo ’¿t6QÏY’ª¡Ù:»S-wªy¶NÔ“¶k¸]¶¹úÀ¨ðÓÚ}@.&±féÏpgj½¤…:&S¸ÖÙäHU®‹íž$i²Bdi¬˜49%=*!½-IŠw¨l´°hUŽ$e8ò÷úŽtQ,/jÙýìzš¥ZUc®0j’+rp8ÕzªˆÐ»’Lç’Tñ]®¯Ýw2»  ÿˆ0Íq—$ͱêžçD¨ú.ÄW}ŠÝÚ\1W!¾új>á=îêLÙÈHk``4Xú÷O½ê¤X»6Í×w'˜ÇŒ‰)~ö˜9ó|žjâ›o^›jâ5aöìc>º ŒÓ† 3ß&r)þÏcÇŽ¸-ƒñá‡M={®KK+^ïàïaíÚø  å` Ûž•e¿ÖådU¨°Ìýú•HÍaãFk@@4XÞ~»¨¯|ÑO§SÏ¿.BT»¥â®PWÝ´GžÍåÕBÛ¸ÙcST­§Ó ÝìGc4@„kææKÆmQò.ŸÏtÄuþ3é œ.Œ2¹n4:GV“f¸ÞøödÉg§<ÌÚ·WÉ©aÑ‚lIZ/!ºÂœ7”"K¸’T@·}½’%ÍÔa—fµs·N‡Ë8HslÊ]¦eŠX VeÍÔ»F…_Ðá3ZfRØ:õs*÷°z›­iVEZ­úÅå)[_Spà§ë”Xÿöü›\U½m:dQÍhÝ’«Óg5ʬÐhUêr=cRX‚öÐ:£Â*Â!ÇDMŒPÄí(ÄJΕãu­“i¡NHúÕ¥íž!»SꢄY>Wš¤Cî’¾£Ò…Eã•÷Ÿ9¯Pè³Sû\…©gó …1®÷³…'…QÁ3åÊ{ï‹•—ûæI¿ï“¡Ÿ¼_×f÷oSVŠ0>­£Qnö=GåÓJ†fZy¹¯l6µë.BÔì1e–æ·ÙÔ¶mQï yX³&ÇÏ/,ï¾[¢ëçŸóéLŸþwt«û-Æß˜ºuÛ‘}£BŸ¨¨Œ‹©¬† ç¯Zu¾ø5¥(…$)..»OŸ ƒŒµkÿ´tiQEíˆE‹ò»Kõì¹ûot—:ÞZ«Ö>0wî|¢Øf8’¶l±Eƒåå—SŠh65qb1ùï¡_Š7Ð#—ed©^WªaîêV§ùX„éÁÝDþ²mjüéåbvgþvì¡ë/Ö £^X{ÉÒ}‡0éqWq0שÐC¬®xkXš°¨E¼œ’C •FH’̲V—¥¶¢ÏÉ.i¸N‡Êü¦ŽIº ŒnúãIý~DÉNi¤~ —q䥯†kxŒbvh‰QáKõ¥]ÖÕêmR˜E‘IZiVè^=æPF¼µ($]¤_$¤*ÿÿXE™Îž=Û½{÷      îÝ»Ÿ;wîzÞ”X§]Uò)zÇ¢$õËUânµ5+4]»ê'“Â"5ȡܟ4ĨðãÚ~P#ñµ¾ÎUîý.ãLm´Gña2=¥e±ÊrH½u8TæñŠÒ óšRu‘$e;uk¬°h–+¢zý¬.+>¶U˜ôó¥‹ï²RõŸÙ©·—‹5Ÿ¬‚Éš·ç‹pÝò_%ºSz|)ÂúÎå-tFN¡ªÑIIWÄ? IªÛZ„è™~—k=ä!:Z5jôÞ{E¹}ÅŠü’Á§Ÿ¦5Ï…ï¿Ïo¤³xñµ5ÒÉÆ eË.Sûö׿NA¬]{áöÛçç…YaaËÏŸÏ(~M)nb8ÎY³ŽVª4 ŒÞÞS ˆLO¿Q‰+Iß}wÚÃãw0 pào$tããs5:æv펖ä]e÷n[ùò1`y饢(›7ç38gÌ(|ÂB“ ÕåY³MQI¯|*Buï ²¹³G-aªü‚,îr£}gç«Ø¤xKüf‹ˆPÝñÊvdîqaT…™Šu=“/êæ\T2ްäÓ’ëPP´°h£U’¦KH5¥LÉ!uR|ˆ,_)MÒ^¥7“¹µvžU¶¤aÚ&ÓwÚ'i§N…ËøæÚdÿCD(b¡f+}º£“'´Ð¤°¿ôŽS¶ýêfVh¼gi¡E!±jêTªT_B2þ`]m(==½nݺ#FŒHJJJJJ1bDýúõ333ÿùè ÂM`ÙOJïIHí튉V]‹ª[µý‚Œf…V¯\e­Ò‹&…Åjûam2*|ž>¶Ë>I“"±MÛ•>^ËÞÔ´“Š‘ô…v†É4Jf]ÁvGÉ!²ôV’¤X)XBÊ{hÌÎÕˆÕêM‘*P(üÌUCÊV¹¤….Ë…L•!ŒZr:ß’fU¯E„¦ ¶ÙÕê ®§&¹Ý{J†j¿"Â4È™îp¨m_ªžŸⱃGU¶¡ÑÈñ…»tófùøõ¸ÌCé,£G—(Æ2$ Ìþþ»6m*Ñü˰Zõê«ÁÔ¼ùƸ¸K¤“7þ³›Í1nÜþÀÀéyÃ/¾Ø›[Z1ÌÇu÷öÿ×0›ã[¶\œŽ?üðï‡ÿ—‡"p™·¿øâ˜ Ó°aWí]23mÚóÝwLJ*¾°¸nÅŠ1`éÞ=©ˆ|öÅW²wß-|‚y¯ÊÔ!šPØš¥ŠPù¶ÖþnöíÇäÓU†'µt››}þ.¿7µ»@æâbKŒß]B€‰9ª2[u±•vœU•W “¦¹îu/JzòH4uK’¤t©º„ô£$éGe†Èr¯b3åtÈÙC‡Bežt·Ý&ûÇš7F¿EêhªR?ÓgÃ5!³ggyxX Ë?ÿátê•W΀¹bÅ=þ¦Ë§NeÖ«·L­?{öú·Ó)ˆóç/U 7þeÓ¦èâ×”â¦Abb΀‘“ÁX£ÆÜY³þNÄSrØíÎ×^Û—·©vÊ”kkƒ“›ÍÙ©Óq0×®½ßb)>ÇvìXnHH X{,±ˆÆÏI÷ß/[ag½£MEˆ^),#Ÿ¬jE¨ÆþèfOÏVýp¦î]¼ŽÇ*x€×÷8ÿ™…"BOÍ¿dé½^Õné¥Ney½Ë:lÉ·\,¾åŠ·çÊË"/‹åJÒ'RKÉ)¥ÉÙX1!²ü¦lIó{%·}…ÎJ2ig¸ŒÃ´À.‡I¦E,Ò¢L¥LS£úÅëÜaÍ2)l³þëPæ^=bVh²þL׋Bâõ°”"U•–*m L÷·ê«#¯wŽë`=ôÐC+W®,hY¹reûöíÿùè ÂM`9³YPÖléK é§ÒbÔØ¢l-‹s½"Ø•³V¯˜¥ û@MÖäElÑ›r‡è§¼Â¹¤E:&Ó«.¶{žPï*%Iú^!²< 8›”-Ý*!Í$­³ ‹ÊÇÈâz?|ó¬0«‰«Pè”:n&=¿+‚éÖK„Qï`kvš+"Ôw©Û½.0‹pù¾¡]îEç‘óE˜ª\‘Hÿn¾U¥‡]ñéËDˆükkûšy¸¨Å\á]Ò´i™ƒÅ`°L™R|Œe·;»w?æ5öž9sÍ[Ÿ$EGç4iò'˜BBVíÛW¢öˆÿ«WG5j4?O†»gÏu1176ª+Åÿ~8š5ëhåÊÿC5AIV«ã™gv‚É×÷_~)éž²‚p:Õ«×i0W®¼çÈ‘âßmΞµßzk,X:tHÌÎ.ª^±=+[Í;‰=ЭðNÿ,BÕ¶¯.«?J~ÈÉUÓÏD¸ž™ì6yÕI¡2#uƵçrƒE£|§êbJñ§(aRðr]|/nfݶ/¿8(©k¢°èIŠ’$¤¼@n˜RCd鬧”¨Üµ;Tæ?ó¹í‡.rÛ•þ–¦…ËxDR”’—¾ŠWüFÍ5*|µ&ç(q™ž6),IG.h¢Y¡‡ÕÛ¡„h5´($GJJHÈ«è @ÖMEø¿ þ·XU«VõòòªV­Z=¾´´J•*11nž¢££«U«öÏGonâ+/R¶ Ør&Ku%¤™™šaQH¬Z;”å*rÿzN«M [«Wì²ý¢O ?¨õGu4/‰e“mN‡Ë8@3R”i—³¿6„É4_Ç%-R|¨Ì´/S›œ÷+.D–)Êô£„T]ÊcëôOQíXýÇ%p•éP½ý¬á®ã™,-&-råDö%Ê{Š<&k³ë/çX¢üFÈ¡H÷Xªß\®z+µÀCÒáT‡E˜:~âÆÜr:Õé-ª'¯’ºÏë¢S½‰Îöо¸éúᇋ"¼K7.,žž–Ÿ.>þÈÊrÜÿ‘<ŽmTÔßùÏ”œlkÛ6Lå˯ˆŒ¼!ít "++wØ0³ŸßT0–+7cܸý%¡—âÿ$vîŒoÕ*¿&ؾ½éàÁþç—‘aôÑ­`*WnÅ_%¿à 8úàƒ(sPÐn³¹ø· ¨({:±`iÓ&!=½¨?õ™3óóÜÛ·2êtê™~"D ïWRar³ÿ¡ ~@gÜŸ?ÓVåoß9â¾}çõ yúåØÕp‚ˆÐW›/YÍF}îzuŒ·ªÊ*aÒÅÜ_^qÐ`Ö*Ku~¶ÊÅèñDÅ:$éÿ±wžñQU[&Þ›‚`l)bW”ëu@D± ^K°¢÷Z°^ÆXT‡*¢tzïuBh P’“ÞÛdÚÿý0™D}/>¿ùì½çÌœ}æì³öZÏzÖ“ x€½¸›a4ÁØŠ èG|$ŽWã¶ß³ Û(–³˜eÅ:鹤䥼…±av,ú—¡oÉá}sOBT¬%»7Æégþe ¬®]»®\¹²¨¨èÈ‘#ƒnذaLLÉõw{;].WDDÄÙ÷ž#œ÷VZ$†Èë°vš@n*·˜ó“É"‘[éì!9/Ú±dN<›mDýÄ[nŠG2ÒŠu-k¡Ì‹Â6–eÀ2º`ïÎÜ J‹¥ûÙî‹pš1® 9¯ÏŸP ý8è¡j‚GS«Àêyãäî =$5”¾“$½PUwD¨šIòK¾à€&º¤’<ÒÐTI2I?\£j¡Ú_ 9ã*a~³ÂB´8Qñy’T)LãPµpíÊÐÄíGÏõ²†ú˜BC4Ù¡=)GÛÿ©×ºªr„¾œ®çÑö'îÕ[Oé¡7« èØ™«[[¿ý¨Z5µÿýPÎÔv쨯¿VHˆÆŽÕ¶må (Eÿþ5úô©æv3dHÁºu®“_±:uB,¸ìþûkgg{­VcΜœ“?aa¦1c®ýàƒËêÖ ;öðÃGggŸ Tõï‡nÝšïÜùp¿~‘áá!'î»ñÆß¬Ö袢¿ ¢þÏbñâĶmgØl;32œ·ßÞxóæ hW­ZعþÜñãž{në¦MÙݺ]°zuÇ‹/>uæcœì~è¡ý[¶5n¾fÍ•§,5˜ŸÏ3Ïd'&z[¶ [¼¸nݺ'|¬¸\zýuy<ºí6}ùe96ÆhÔ$IúîSÝus9>®èêr‹F|Ô>`Š ‹uYc|õh£Ç§ÿÎRX¨zDêÅÛŽ¶yºQ¡úäN]ÓH’|èËmª¡—[«c#IÊtkb‚*‡èËVjVE’âœZ‘§P“F7WPIšR¤Ã^Õ2iL-™¤ß¤"©¡ôŽä–¦¨¨†Loªz]…ÌV&¢‰*=­FÅò®QI¡½Ô²¦"V(.D!Uç]•¡Œ e„)ìVݧUTóJÝ")-T—ë±4M SÝzêªlŸRMªV]oIÃ¥Ò+r§Ê—"SuÕ(ߟôÿ”q°µnÝzëÖ­e{·mÛÖªU«³ï=W8§æÛ_Ň%±¿î8’*‘g<‚ÿ¸ØlÐ$‰K½¤í§¯ƒÈ†¦³ÕN—<æ¦`ßÚˆÚÌÜCÎðŒÈ#Ï…ç¦Ea[Êv`6,Ø_d¹_&î°5Çr€ä˜1!8Õ!üäõê'#ƒÒˆÙÊ<¢©M)Çôûxdçâ%”2âW#÷Î=z~“¶cêGõþì&ª÷ùEÑ®?eœ®2Vï¡Aƒ³rpÖrô IDAT¹- EÒý­cɤ~Ì_NDSBš0YùÓüæ›H\z)Y'ÍC÷ùèÛ7G2êÖMÞ±ãÔ»|Ç÷Á†ä7îL4HŸNlÐ`¡d¿ì²¥ÇTÈe÷îìW^Yí6m:q̘]çNeþoü)ˆ‰I¿ûî9þK|Ûm³&O./Ðu“ã~ì±Í’]²¿ûîÎüüÓjöís^rÉvÉq÷Ý{*’MR\ì»çž ?ï*1ñŸøâ‹H´iCJy5 SÓi‰Ì|øEùoóФÆ-¬ÝÔ¾d+!]¨ö޽Aíÿ…¢hó)ÙeüÅ^wŽCVzN?J<ý!Ùh5™œ@éù­ÈN÷M%®)/Ü´ 9x+àÎOõ–,Ô‹ŠáÒ2IK£È7cÜGºrñøSV‘Ld·ûû¬÷áË,‰{ŒØC0i£µ…é±Ñ{,¯å ¿K?²ÛÁ 1Üæ"5ƒæ<ÃR\é¤ß„!ò’1IyÇ FŸ’þ²¬o¾ùæž{îñÿ=hР㥆 rö½çç±å2$áy«É~Cd=Û *áLzù‹ççà†ÍÜì&c-ïÚ±ìá—DvÚˆËëÅLb’Ÿ“ø ¼Î¹¹ñöf©û,âŸHŽÄñ;<ø²ñ¶"ÙŒ±'ðnTû&˜“É Ø4ÏDnÝUr·{|´Y‰ì¼ê%RçGdcJ™Åü©éÈÊÕÃŽ è9E4EÑ/˜Á{˜ÊÝ1uav0ít×ÁÆÃûß—?‘Ÿ Ffê\Éþò4¨‹ŠˆŒDÂb)ßD+…ÇÃCeJFãÆ)ññz6 ˜$9L&ÇÀg"…½kW^›6+%{XØì~ývÿa¶ÎâÅ ×_?Íÿ nÙò×?ìü'â|¨ExäH~TÔJ?ݪzõ1ýú9 ÿˆ˜ °iS–_ˆ¤zõy6Û¡3›ííÛ ›4Ù*9n¸!.5õÔßÜëåÑG³$£Aƒä]»N1~üø“Û=îy™¹ÑR~Úàê-TºEòC0[4;ŸfÿB>ý5¨Ýqð éͲ`ÎÛ'+•F_’à”.žS”´lÈ"d6sˆ Œ–Š\°•¬ÀÊôp&2¸3½dMXT$¸܃·5ÉfŒ…8o8‰ãyvi=ÄÜ.ØwŒ`Q¶,v±ËŠu  (XÀ÷6¢Ö19—øÙt™C÷"2öño‘Gøº˜uâ¹Ùp#>£h†Hn€7í—H"ý·ã IÊ9¯Ó60î¼óÎ)S¦$%%¹\®|öÙgõë׎.‘vÌÍÍmÑ¢ÅgŸ}V*zÉ%—äççŸ}ï9Âyl`ù9X±³ž’ªb˜p­ƒÇAðŒ›M’hî!qoÉ/û› bíXæñˆ‹<;ƒlD9°g“ýŸY±Æ|ËÜ(l?±Ø@²û£%:r¾nlÄ14à‡€dƒ² >¾;xðÂ-éÈàÙÀ"™á¦ÑVä`T ìÆÀ‹l\ðYmg^qIšÌkó‚N|Õ^B_ ìÖjÿb²`îIz°ˆÁÂõ„µÃtær<|>º?‹Ì\{Wù„÷¨[—Zµøè£S\‘âbßÝwgHÆ¥—¦&'WH¢sèÐÔ‡äèÓçpEjH—ŶmÛ§ÓÛ§ÏeèNÖÆ©y`¿ |>&OÞÉ%“üfÖ7ÎüßVÌòÏöÿ*23}ûn¨Re´_‚!*jeJÊD³óù2ä@DÄÉ~ýõ+wïÎçŒf{ùòÜZµb$ÇwîÎÍ­Ðçõ×s$£fͤèèSdõ.[ÆUWL‚ø­O™F×PÞMpРáÝ(’:¶ë‰¯…ß *‰SPÌå¢(ú[cëÿ˜XXfGóäRd£óœ’Ý>®[ì|ؾ&¹¨ƒL ¸ág!ƒjIì÷dAm·[`àrÌ’$R|#›Û∥ø‚h ö/Ø ì%©7¶—Nž÷†X±ndcmôÍ«…älä;–8F—îó]d¤c10çñ-LrHm…! ¾'yIÂWQ¦$)û¼NÛÀX²dÉQcyÍIþr–[±~Ï÷^¼)d¿Ä¨ÞŒˆ'ø/ë-Øml’‰ãn¶äãqốT3Æ €!%¼øªÝnª$!ƒùÇýÄ ä î’KÙ Û[ÖœØ>:ÎD6ú”q ; *}‚ÉÊÌ`û[SQ—¼O^sÂëãöw‘…>;v®¾ûERùFÖ•·nçæÑòVdæÉWÊŸêÅ‹iÙ‰OqQrr|~¶ì 7œ"©Ó§gU®¼Yr<ùä3¨°æÇ‚©-”ì .œ7ï¤ú]¿+œNÏ×_oóó M&Ûsϭذ¡¼ðÉßø«"#Ãùõ×ÛêÖýÑ{lÉç\e­©©Åÿüç¿J{Ÿ>;œÎ3¬0sfV•*›%G÷îûN¢ZVkž?7eáÂSìIÖ¯§F ªUcÀ€|úübûŠuåôæ”Ô¡¿çeÜÁ6ÃôµÈBµãʪ¾0EÑÚJQÃ/«ˆæC•÷ÊT\a`²Qe4ûTþ¯ö#;->JÀxp?rp_ þ˜å¥I 2ø>?ð6nà0žæ$•J3¼ËHÿ%ØIf »¼Ð‹ïc¦Da›Ãf`)K­Xà>?ÿdÓ²Ùk§Ë\r’½‡WD&ð­“Eæd®ò‘ ­@ð=?`ˆ”‹q§°¥^‰Uaüu ¬ÿ1œ×ç/‰Ôïqˆ—ãI%¹†p΃—@ÐÝÍ£$vß>Þty˜A™ì´c™ÇCÅdÏa°¨MÌôàùŽï¬X׳˜Âº(l™éƒÃäucöýÌ>H.ð »Jë$üF‘ãj’óð¹ -Ü¥KÐÀ ¨7)¢ú‘ÝÀ¶Ga{I.<d|ʧV¬G8’J¼ÞcxµˆÜ ô³cÙÉylu¹™[Üd¤q·9Ÿ‘0-ðe“r!†(šÂ‘7pˆÝwüm`ýp^Ÿ¿$Ü9ìh…C¤#ÿ+ ‘v $A ¬Íæ s/²ßAÛÍÜXLÊú’ßý¸Túo†Br÷±ÏŠurÉ-Âõ6?Ea[Ç`8Û-Øßg°üptds2Å@WÒK‹€.T‚X<Ð6 ¼0ŒSm3r`´Œ?‚ìÔ[@Zàæs²9RIKŸ®“•[ÆPVçrG"•_ÆÔ›ÙÁN©‘ …Úp8-¨Ýíá®Q$×=F~yÑI3‘™ðf¬ÚPN/0v,!!˜LØl§¸4û÷{üÕ6ºuËôTÌϽiSAÆ[$Gûö;ÓÒÎøâ¶„‡Ïö.Ü·ïÜ–=ÉÉ…ï¾»Á_ýW²Õª5ö•WVïØqÎ)ÿÆi!'§xذØk®™â¿L!!#þùÏykÖü¡á]·Ûׯßnñæ;îX›p&šp~ ˜d29$Gß¾ § ÀŒE¡¡ªÁ°g\€D·nåkçåÓê6dæ±Ë?BßoQ$uï`O°Š•ÏÇ?­%"ÉeebÒò¸àMÅW ƒÆ݈¬ÔH|™l›O¢‘ËÁXdºoBvzÊ|åz¸prð]ÀÞšëDU“Øãð@{¼ Àf\1𓔀xŽ]‘8¾'XÌ ö^,*“OÑ¿…m ‰L´bý߀ÒM{{ìtñïäwó‚ƒÈD†1ËÀœÂu>r EIÁü1DZ;Š] GùOßÀJ>¯óÚÀà¼6° Hbc²¦ã[àN#åâ@ñœ÷üe<$%Ñ ‰‹Øý¼ã ò0Ÿ—õÜ–ºs²l÷µìŽÂö&ã )ÎÅõ ,Ø7’¼ÍþH8p5ÆhAR" kR’àú@ 0ÎM¥$B –ì§Ï“ƒ‹ÊTi¸k²H«ÉwÓl"²ñÍö£çšQH³ÁÈŠ5X æË(Іo¼5ìÞYèôÁ±W™9\þŠä7Ëߌ¾þ_dÆ|Æ ¶Óß}‡DH'–? Û¶¹ëÔI–ŒÞ½+J×Ý¿¿$ªU«‡Ÿ:êDÒ—ë×g]|ñÉ^³æ¼‰+úÔù½P\ìzD!3WßI~y¦š_±=¼=‹Û³}?Y¨ÿø±e¾zØP·|DÉÚžB•O‘•IeVÅ]ÙTÉÆ²Ä’–y©ÈNy”Ú«¯FÚí,Ùšæøh–‚ ¸ÑúÔóÖ­º‘nÆP²aÎŒÄщ-ùxŠp÷d‘û2€ñ¬ˆÂ6˜9@q¥Üö$ö–ÒNÖóË.&äã 2†Û\ *(´æ!ƒ)äûÜ>ÚÄe ïɧòBfSZúÅ~ˆNs¨6šme–ž ýˆXR†ØîõqÇ E·aAs“šM£'‘…¡³¶Ò¤Â†Û¸ÝÜÖ™¹©kù\¯¿F"4”_-@)Ö®-®V-I2úõ«è3Ì0\×^+9.ºh[EJ§ÙÙîGög¼?õTÌ™e¼Ÿ%vîÌêÛwƒŸÜã/¶Ó§ÏšýûÏD•ûoœ œNßäõ_ˆR“·¨èOøULjÔ©3_²7k¶xÕª3)€ãGq±ïÑGHŽJ•¢'O®¨—tÓ&WI’ñò˧Øö$$Т7ÝĉRµEfj_ÁÞørz×n-I6娮}ÕB&›‘cÖ (j½ÆÁ2Ê-ù.ZEV^,³š¹¼´ŸA»G«….^‚ì .Í%Ì'4š°hbÆ_ïldÐ> ÿ…ß •Áþå\ŠÌW‘œƒÏï¶Gâ˜J*0žìo°Ú‡Hë͈—™L– —ŸÛ¾‰M>|¿ñ…A1,È .M•»›çDŒ*d²9…v>2¡!æó †ÈìBA Ž6W¦p7‹›I"aÂI/ÑQüm`#œ×ç_b`­lCÞ:&6W¡øim0Dþ ø‘^Ò’¸ÌÀìÂq€÷D¢™ìÙô¥Œ±5Ÿï²l÷C¤½Àˆ—™D–ßK,·`ŸÉ~`G"qôf7pÏE$5ÁØŽ‹2Bÿ^Ë ×§!ƒ7ÖÛ>:pÛ¸ Ù¹j9¥ ïçV —ýBn+çÃ¥ÈJ“A¤•Ù,ɤÎë(ŠËTŒf®Gª>x,{”S%&§Ò¤ 2óƉs?ø‰ˆfgÀƒY³ŠÂ É<¸¢ù´YYɺu·¬]{VY¸ãÆ©Zu®d¿òÊegVoäìQTä7nw›6ÓJR:Íž}vøþØ”‘qæ½ü|ï?þqBí~ìÝënÔ(Y2žx"ëäT­ÔÔ’¤–öíÉ=ÁæhÉ*šbjÌôò–‘ÄTšÜ‹"yåóc»ÜÚ¿,ôÔŸNÍ>(ŠŸÖµ?ó²Òú{ʺ€ýTЦIìÂÞÛ‰ì\XEÝ>®‹CÞø·–c2¨”„_§Ï(tö¼ÿ[Á­¤š1ÆRüLJ$ŽÙáÁ—FáƒÌí‚=ŽŒc6Þ‹YlÅjÃæÃÇJQèë¹–÷ìXv3)‡õ"·p§‡¬n402úàf<HŠÀŽƒÝwá ï°çSìþ,Š.XççõùKbqSì"qûÂ!>‡s.†H®ƒ×€¦ ˜œËs89M»hÚ;Iðë¿íÀVHÎX^·uˆ­¥l÷u¬~*qÏbH³`„ù9ç๓-‘8Ö ü—3FJ¶]QP6Pã"Ü Ä`u êÕç0rpC\‰ãÚéåŠeÈΗûJy¸v*²ñ¯21A¯;~DVþ91(ö7nŠ¢fâƒ;ŸT’ÿì>n£þí/'K*\ç ¢2ókyu ýxûm$ªTaé©êþôS¡Éd˜LƸqÍ{w:}Ý»ï“Õªmž7ï¬ £¸¸¼k®Y!Ù+Wž3dÈr‹ý1(¥TûöÿÔ·ï†Ã‡Ï¤XÐß89N¥ýc Ý”‹;r¯ºjyéïðl•‘á¾ñÆ’ã‚ ¶nÞ\Q–aB‚§yóɸフ9§ýÈÊ¢M$®¹†ŒØ¢‡ip2Ó¯¼”—B'7<…"éôb9‹ÏÇ“…fÿ"»ÌîÉëãö¯P <9Y©üéÑ’8ÀÜØl„¤Tew>•æ2›µ_ÞgIÈÁeÛ)ôø¸4|¸á‚ƒ~N×hòÍ7“ê‚ÜÀò¾’l`  öAÄLÉ Ã_vðGœäã?6¢öÆV;–ù<â"'O;ˆLâÇÆ˜S¹’¡&V“ù0†È~–l;±¥>…û˜W³ÄÀª0$IÏÁë¼60øÛÀâðìbIs wAt(…Ûɸ Cä¾ 6\î%#™–æbVÇÓÏAäA>ÎåÐlºÌáBÒ¶³ØFÔ$Þ÷àò³ÝûÓ?—ÜcÈŒýØ`Á>ŒmÀ„`ÝÑ–$›1ÆÆïr Yp ðÝ\dpe*E>€|/Í·!ߨ— R‘ªs‰,˜±™Tl”­-{$‡zŸ#+ßoò¢¸ù‹ âBv>·½Ã•/òì7åÌÞÉ“ ‡ŽAfª_ÊŽ]åô>_‰¬sÕª¬\y²Ë|þyIAèyó**Råñøž{î äˆˆˆþùçò—ù jyK=÷ß¿)=ýÔì®s‡ììb›-®uëÉþhè‹eÞ¢E ¢åWAü¿ÐÁJHÈ80æÂ 'ø§·F1QQ+7oN;õ;Ï%J=©-[.ÛºµB†ÍöÁƒÅW\±Cr´h±}ÏžŠÞMÙÙ¾k¯M“ŒöíÓòóOöSËÉ¡m[$.¿œä1Å´½™¹ûŽOañùxøÉÅ]I;®üÃ<µ榷Y,æ>p>Š¢ñÛ¤—±ºögRk²22úhcr!Æoî\‡ìôÌÙ'U6crPZäúµdpmZɦw'T)ÌÃ×Ê`ÆX@0˜#‘8¢Ø Ä‘ÙûƒÌM¥°×[e’Ÿ&0ÁŠÕŽXÉO6¢f3XÃ;v,{ù5›U"·p—›Ì®701^AW\1L$UÁOlk"å[¶¿„]lìò·õWÀy}þ’pf²² v±‡_Å!öÞwô‡ë‰‡– ‘Çsÿtr8PnóP4_رlc˜ïT>ö뎿ð‹ë4¦œŽ{„¼nÌîÊìxrJuG§‘ #ߌq‹7Ù¿G>&PèôÑ:|ð·ÏÉFªm&>ð¸8Ùé¶éè ŽÞ…lTM\™ujöLV*}B´q´1³€ û¢(¾X4EëwQ¥{ùd¬S&þëud沎dŸà‰àóñÜsHԪŦMå)Å›oæHFÕªIkÖTÔ¾ñùè×/Ñ/õþÕWå,ö§¥v=}zRݺó%û….Z±âÏ •ŪUI=z, é7.»ì—cÒÒΜvv®ñWVr÷z}‹%ôè±È/Âî—×80&3óR=²²\=z8J¹€e}•;Û±±EM›n“W]›˜XÑcAïæ›Ó%£uëÔ“r.(à¶Û¸äO8ì¹7™‹Ú’^õëýïQ$5oeÇqÕ v*‘ùä—àö@Bôœ2v——£•‡&môú¸k6²ñ¹Gëäøs±ër±}Ðirð¯ø’ë\„„8\p\pø”\3F÷eÑŠm>|¯³Ò‚}{–ïÙÁ+ÖÏù¼€‚4Ž ÷H^Ê")•Ív,þ‚l;yÊAd2óùÁÀœÆ=• ¶~g‰# ͆Cl¿˜ÜíÌgv(Ù[þ6°þ 8Ï?g¯$æÜMê<ìb~ ÷S ‡È]p½>¿‚ ±´d®10;YtDÆÓ/ŸÄÙÜ?›n$'±ÏFïѼœÌv?FPÎÆ ö÷X,*£;ZŒïR»‘>’ô1ÂõÁ79ù»äԞìüVÆ–xj)²qÕ” þÁ+s‘•K¿%·Œ­²0®DÙ»Š‹¹÷^$.¼'ŽaŽŸ‚ÌTnNty.¶)‹1Ý@h[æ¬>¶+=—KŸG´ž8Ý\ó1Šâ•IAãßX€¬4Lf™MÇ7!Æ“ðô—ª ެ{cÒ‘ƒú[ð× rúh•Š > ln?îÁ}/éíIÝR¢,º?G?â…²`šEN~lpðõ[#3ý¿=áup¹èÒ‰† Ù¹ó„÷‹%C2:wΈ= ë§Ÿ2Âã%G¯^ñn÷YYE~ý¡ÐÐÙ’½C‡Õü¡BY'‚Çã›93¾sç9!!%˜6m¦}þù–¿5´N„ääŸ~ÚóÔSËÂÂJ\€W\ñë×_oËÈø“]V~x¸©×GûUÈN߸£§¹-ƒ*£‘ŸË”šß›AþÈÊø2T†‚b®øEñæÔ ‰òùxô d¡Å³¤ï;yRá„^HHæ˜Ì^Á½/PXè{ùålɨS'yÕªÓàB-Z”S£FŒäèÚõ40'²eéMš”¸~ùål] ¿#ŽÉï×ÏÑ Á¸ë®›ZªÕÔ£Ç"›-Î0þ¶àŸ·Ûëp¤õë爌œæ·Dï¸Ã1Òï²úëØ.¼õÖ5¥ÎÞQ:~|ºƒñôÓ§±ÁÈÊòÞ~{ºdÜsO†Ãq²x¢ÇÃc!Q»6›7ŸpXF-Ú#3¯¼WN¯‘Æ…÷¢Hž)/û¸÷Ð’2©G‚ép+÷”SV59Ÿ ¾BV¾(S4,µˆÆ?!ýGh+¨ IDAT¯èúÄä óž’KŒüÄ/Ü ‚çGøž|3FRrðϲ+Ç0‰³`“Õ>ˆ!> Ûëü˜KQ*©óñG|”@BYn»÷r^ZÃ;ñÌËdƒÈmÜç!­”þ ÷ƒ c0DJs\Gˆ©Cä­duGìbÏÇl|›N?Dø·õûã¼>ILº›Ø9Š˜žØÅæÇI‹ClkŽ'! à¶ îÁûL00§r“ c3´-do,£ìXVóø¶³ÄFÔDÞuS¼Ÿý¥l÷Lò_et¶]$zñ½Âr öéìú²?‡•x`Áºµ×“bưQÂÕ|>8PèOŽHb{iªð.äीoÉ‘MèlÂf³¥Œ%ôÝd£ÖXÊj"މAVª}Æ®2Ƀ¥%è—“Ó ‹i÷dá–¾·•=yRáGƒ™z­ØâÚšdoN§ïá‡3%£R¥¤_= Êц %!’Ûn+ ‘œôeZZ±Å²ñ È1œNÏüùGzö\vÁ?•J7…†Žhß~ƇnZ½:éO‘xø³„F÷îÍ:tG—.óKB%[Õª£ï½wî˜1»’“ÿ ’ÌÄÌ™Iõê-ì-œ?ÿÌkb–Îö!GCä»ax¯».M2Ìæä˜˜“YW>Ï?DÍš'cRº\Üՙ騅âãŽWè¤]OÉ-Ï•Ó;x&²P¹;vµgrÑ»(ŠìG½>:GV:ÿt”eåƒ.ó‘[g­fáñÑf%²ó^Àå6?9¨º™ýN7´ICoÖÒ/ü|ð{†÷ãnA’c)ÎU«V-.CùH¢ ;sº0{Yn<ðK¶eìÆ1Ίus€e¸íû˜jDz”ç=8wðƒÈ4¦ç2ÐÀœÁðLPß!RšaˆÂŸ9…CìëNâ$ìbQcr÷2ºêßÖ_çõùKbß$lâ§ÆäíanUì&²6ׇHDn? ‘Ö>ðã® ©Ül`.à—Ã|î r?ï¸)\DO;–#,ñáÊ'6¢Ì"˜í>‡è(lV&{ñn%Í‚½ó2q–%E‹pš1š“´û²‘A»€ØÝöB"¢ q°:àÖzy;ÍÓu#e‹é=ºÙh;=¨ñÉéÈÊ5Ã)*c3Yí(Š û’ìò02¸ðidá™ÓL*ôùxàn¾Ÿ+n9¡Â;ÁùGI'­;âñðÒKÙþRhC‡ž†c&.î(É7!ál+ýù| | R¥9¡¡³ï¼sí’%r®Y¹Ø¿?Çf‹³XæU®<ªÔ¼¨Vmt§N³‡ ÙÿG«ÿ1ÈÏw/Z”зï†V­&—žµd»øâIQQ+gÍ:ø§h„žIIΞ=c.¸`¡d·X6¦¥m²ªÏÇÛo'ø“< :J…±±îfÍR$£eËÔC‡N1QÿùOI.ðŠãª—–ý&ϽA‡û¸¨- ÇÝÚ>½‡"iÑ…ÔãbÚ 6v?¦.åTG}r4Šâ†Ïp•ùŽŸ®DV~IR“1ÈFÝ9T¦ñ‹}\½œKJŠ:x¹x;rðe`ªúå"ƒËR),/8è è¶û5¢]eÑi¤Ÿ±É‚}[{™•;ÛýÜöB ËrÛdÎãa;–6e0ÇAä6ºxH.•`„;@ð_ò`ˆ´k)Š%:Œè0 ¶²äìâÐ(–?ƒM,êqúÖÎsð:¯ þ6°È=ÂÌŽØDôGÄõÅ.ÖÞFÎ<"¦®Ã$_€!Šf@wÉ©B¦˜Sh[\âĺ¡ÝGXê»È÷³ÝGñR6É9äøÙî8PºYÊà#6Z°ÇVàë2º£Àk' ––kø2ü^rpU,Å>€\7×,Gvþ{ôd³Šiñ3²ñF™zõyÅ\ñ²òúü£n/¢(zŽ9vÆ¢÷Qí!daÈqÁ}—»$©°Íãå$æpÃ?™Ö·“š~lïÑ/™ÅõןBA§C†ä›L†dôé“SñøNb¢ëê«c%GóæÛ*ž¦~DGg?ùäf¿+ë‘G¢ù‹æñ–Ø‘‘ÓŽ·9&OÞŸ“ógÊOü.ر#sàÀ˜NfGDŒ,=ÁzõÆùƒ¤YÍ0·Û7xðZµæIö[o]û»È­y<¾gŸ=è—)™4é4’^×­sÕ¯Ÿ,:¤¥¥ÂÓùÎ;%ŠÁóæpŒÏÇKï–ˆ¶Ä”—ÈÒφ"©q Û÷Ûµ+Ú ýŽ«¬5}3Š¢Ú«ì.c:nH ücB>ba™ Ä )DŒÄdã·2ôµ™„Í&l6«sóæäàšØ¡Ñmn"’1X|6pùfŒëHÉÆ L$¹TYt+éì1/ƒ¢Lòü±‹Ý$S<ˆAV¬›Ù\ÊmßÈ šÏíX6Ñ߇wÝD¦3+‡~æLzÁ\ÔÇ{ˆäº¹ˆ½âð+ìÿ »XÖ’ÌíŒ cd8;NßÀÚr^çµÁym`¥l“Ę›I^‹ÍĘêäîbA}ì"e6{îÆ!޼IÁP ‘zÄB„Þ4î200æ0ƒDîãMð­å;–XFËk#jß+YYÊvßR&oPðsº0{/Ù¥Ât«ÉrðE’bÆøáÂÅÎMá¸@žË•;ƒÏ»Ã YDÌÁdgf™ýâÆÔ’…ffüÑF‡AÄ'˜¬Ì,Ü—JõWQ¿ç󟺦$©Ð¾ñØ®“'fåÐændæš;ËOÏö#5•V­h×î„Ð¥7®0<ÜŒž=³N.~XééîöíwJަM·­[÷;p`»Nšø|,]jôí»¡OŸ5uêŒëÜyn¿~ŽyóŽ$'z½¿Ã™¬^½úì")+«xýúÔo¾ÙñøãK[´˜tÏ=s{õZþóÏûÒÒœ\Põ©§.›<¹SjêS«WwýðÃëÛµkbú]>÷wÇÞ½?ýÁ»·oϻ䒪v{ÛE‹:\yeõ³<ì¦M]ºì_·.ãÊ++/XpY§N5+øÆ~(2¤ ¨ˆ—^ª:mZ*UN6oC‡jÖ,…†jâDuérÂa¾ÕüeŠ×Ô‘ºã¦c{·î‘mº@_½.Ë-A]^ŸÞ£Œ\]‰~úLe¾ ÈjÒ?¯RT™wõ[®B·n¼PÝQ¦Ñ¡Ú7Ôgm6¾¿[…µ¯­O¯”$/ú2E&½ÖP‘U%id¡²QóP ¨!Iû¤ù’I)Õ‘|Ò`å‡H«JgU–4]i&—»jܤZ˕蔧‘ªÞ¯‹÷*9]¹•ö Ú§)-Q‰&™º¨K± i›I!7êáP…ÔÜP…_ªGª¨NŽV™ÞXQEúÙ¤šUÔ%\û$§ÔTÞ®ro–BUc€2Æ*¤šõ•1]!•U¿“¼ÕT`(¼†Z½¢øÅ’T¥îI®àßø`â/û8÷0™LX¥­õØdÍl/¯SnQì¿”½I×ý(ïF¥SýgÕèÊzD¡MÕ`‘Lí¤Ýš¡XÆÔÒ¿ªJÒ ú:E÷ÔÔ‚Ë$ )j«FÑíõ´¸ƒBM%Ï,×{ÔùBÍû§ü«èÙY»E÷^ª9—¬e ¨ µZw]©…¯+$x{}¤¾µ«eSm¤U‚fuÑz=ð–ŠŠ5ëkÝwó±sn¤¨ç«Z²Zwܤ¹T¹Rù—æàA=þ¸Ö­Óý÷kêT……ì:nÜè~á…œ˜wÇŽv{ºu+´mðzéß?Ùj5|>Y,µÆŽm^¿þI?¦bX´(mäÈÃS¦$Iºé¦º_}Õ²C‡:gØ?™™Å‹'.\˜–V4kÖ¡Òö+¯¬½kWvåÊ¡uêT ¼"JÿnܸªÙ\µôß *‡‡ŸÉ¶­¨È“•åÊÊ*.ó*ù7)©Ð0 ýgd8]._åÊ¡N§×ÿƆ «Üxc£;ïlܹó…W\Qû÷™‹sŒôt×Çïùá‡Cn7Í›WéÝû¢ÿûâJ•Îv» 4(åý÷].¼îgŸ5iÞ<¢‚ïýè£|«5/<\_~Yóµ×ª|ð„ êÕK3F=vÂaßQŸT½š& ÕýíÍÌUÛ§t Qo÷Òç¯ÛûöX}9]×^¬ÙêÂúÁ‡]ª>¿ª¥YKÿ­ j•4Žßª^3Õ¼––>­_Á¸=zz¹ZÔÐâûtqÀÎüá^Ü®KªjQµ¨*ICSõêµ­¦e—«Zˆ{Õ*M.4·ž:EHÒÝÒbéui°ÿ°*|W9-6]õj)䀜VÅÊ×_-š*"JËräz_‘íÔ¨¿fVzuè¤k~ÖÏ{µ÷&ÝÔIÖhR¬–_ªvwêÙú-N£êªU}š¡9GÔ¿ºÚ\¢wÓt›^_sÃÔMÚ%ý¨œ5*¡j/È×YûPåVj1S+®èæuZú¢R׫ã`%%jíW&«*þp7™LÒæ >\>úÛÀâÛË”¹W]F(“vÔÅ©åýŠyJU.RÇÚyäU«mÊLîmª5\U·K䇋õB¦žQݺZ¯yZw©¾®ªë—é—r"Õ·‘:N×'™2ÚëÁkuÏDMܧ}íÔî^Ýû‹Ö,SìUjöªþaWüÅ6Qõïu›Cù¯hO¸B&ªe UΖï6¥¥É÷¥j=¡ª’—&I÷Js%I‹ôd¶ê…hg5Q†G-c•æÑ¤z´®$¥¹tí %ëã+ôáe%gZ¤«§*µHßݤWZ tõp¥hØ}zñ†@cžþñ­@w·ÔM]SÞÔŽCº¿½f¼´¿”4`¬Þû^µkhÓx]ÚôØi?œ¨[ºép¢ºÜ­i£^þÕ‰‹Ó­·*#CO=¥qãŽýˆcpà€·sçÌ}û<-[†-XP·iÓГ.ƒß~Ë~öÙCžFÂÇo~Ï=ÝîŸ>&$öí»39¹X’ÅÒhÈÖ—\Rõìü‡!)©pݺ”µkSÖ¯O-.önÞœîóUt¡¨];¢^½ÊuëVª[·RéuëV®];¢ À“™éÌÌ,ÎÌ,ÎÈ(ùÃÿòx|<~Íš:5©];âÆuèаU«:YÕñp¹|DzZ÷dg»CBLO<ÑäóÏ[šÍ'ØgœÒÒY^×¼µjs…ÖŒQ•à ˜±NPX¨}¢Û® êZ»_ŽRƒêzçêYÒ˜«k†+Ë©qÝÔóÚ’Æø<]7M¹.»]=//iŒÍSÛÕ*òêç6z¬‰$%»Õ2VÙ^ýv‰ºÖ–¤û³4Ë©G«hRmIúIê)Õ“vJ ¤yoSz®|£T矪ìÿÒîXôPþjú“vMÖ¾+TçKÝ´^{~ÔòÚªö‰IÔ‘ñ_I•^Õ«.åNÓÇHêƒjª¶\/¸UÐNýêêÒXuSí¦z˧ÉEúµŠ®­H©§Ô\ÞEJk-¼j°]{SÑV5û^I1:Ó¡J¿JÕÆèŠ™fÉù‚²jÈ´\ Ì M‘ZJYÒTÉoðÜ©ÅÅz¦ªF×’¤1ézö…kgkÕ •¤åê´^&iùº)à0žyP,TåPmz@W•6îÒ¿ªj¸bzëòz%+÷ªÓ`¹½ÛKOw š½ƒ©ºáueäi@/½óPPè‘w5e±®¾TëÆªZ°‹KÒžº¥›RÓõDwÿV!'غoܨ»îR~¾Þ~[Ÿ~Š«™œì»÷ÞÌ-[܇Ο_÷ê«+êŽJHp=ñDüÊ•ùþ'ÓW_]þ;<° ¼Cÿ½óŽ‹êlÞþ÷ìÒ»‚ 6@±bÇ{7±&¶Dc‰&Ñc‰±ÅŠ5hÔˆš(¦Ù{‹${Åv±Ð”"Òa)ÛæýP0¨ñù™ëZd)*‰Æ¾KÎOdo+‰ß+ÈR’&—,%XÍ¥æÜe"cEy'GNÅŠk¼Ô0HêMé,Þ1âoã) ]oÉzÙ/+üeØ Y'"¿Ê¯>â³Q6ŠÈïry˜øÏ–í1JlW x_jD›–ÜE®yKðZɯN"É®;Hò{]V‰ âúxJƒN,âD‰•£S´Ú„ Á2¢åú¤›B€”?,I…ÊÀ?8&øK½EXî|ÄÛ_´…„? ÃÄt„/JB#".‰º»¨ºÉ¾à§—24R£à-ï}Y¼ñ/߇ª‚«Œ˜ü¼=:|XÌÍdáÂç©å!%ÅТEb éŸYøx^›^oœ93F­¾Á‡†‡¿2:ﲇ »šGÉ]¢Äï¾¾w³³ÿÑõïÿw$'çܹ“vþüÃýû£7n¼³|ù ŸàÑ£§L 1âÔÔ©–,¹¶fMØÞ½‘§OÇݼ™Ÿõ_áåú;qölrÓ¦§ó*ÙkÔ8þë¯_|ÌŸƒNgœ93&éªuë°Çä#fòcF†±S§$ˆupˆ?yòÅß—ë×¥dI4è™Ã¯DäÈ)±p\eæ¢â~9‘?çÀÙ§—R2óçá¼ÿ‡c3r¤Îla˜tøF ÿ¿, ÌçexXhÌóüË‚¿”Y/‰…šzóHÛ+}2èâ`ñUÞ7^c÷‡B¬,/8ÕPDZI>Ïû.Ér•ت'z‰ì7äR ”´ÔÔÔÅr©«,‹R@Ê3GvÅxQ.úˆÏRYª}„\ö—akdl¶d¦Èí_¥ÛoòN¦Ähäf°4¼(M²%"E>×T™ òƒ"•EwKbM$ÖTt·åFU F’à>ùƒqn®dK‰ –Y*™c&‘g^êáÀ¹¿àõZ;òZwFœd‚«„EæÛHr˜¬uäþïØLÛsäþçŒÜé&Ù{$‰wc”ˆˆ"r!QzÅŠk†,É«ÁÒࢼ‘-Q…¾6Ò$áùtµ OHh¾’¯|Äç®ÜÕ‰aªl&þrKD&H`W Ø ·®]»v^ÒHðrñžd‰H¼ªJ¼«Äþ*ÙRhÎ訂ëÈ#k©š 9yd-Ùb~QTÁr¦à¡3ʧ…éY¨%0C+ž›™Z¨05Gܾ|dvQÊ™Ñ[„aâø¹ÜýñáÌBW)ÙOîýÞ&,Jì[ Þ²ä½,ÇóoÄS}‹WÈÃæÍ¢R‰¢È?_;P¹mènò“¥¼h#ȶZaÙ‚À¨ ; €_ÊEÿ!5ØE¸k-ÏFØvÇI‹Ì&ʈ¸ š‚-0•´4Œ*X¦ðmAH÷Kª™¦g‰ ªãKSÝ’/ 1˜(l¨‡½ »âYõ6¦¬iZá«+œˆËÚ›³¾'*…Ù'¸óÄTKúÐ¥IºKZv+ÎìGϦ$gÐs>Y¹E–ªT`í,…‰~¿XÌ´nʶ՘š2Ï…ß=s£Þ{+aøpvî|Á®š›+[¶”øøc+FºwOþ駬ç(תU«ðŸ­ZÙ^¹R£[7û´4Ã{ï…™•õg ƒž5lýµÑ¡CMêÔ±»?{ðà+Ÿ>q"镜üOYûÿ{$%i'O­UëÄöíqÖÖêI“*ݺÕzذ jõ«©Ûµ+µ^½›™åË›=ZÅǧLá3?ßÚ‘‘†¦M“ÎÓU¬¨>uʱnÝgBàÑ#:tàþ}Z·fëÖg6ܸEçdd2 Ë棙Å;ãIˤg[ƽÿôªÏ&~ ¢¤-»¦`U´*kê~¹J +öޤDA‘X®÷w’£gDCºT~"|­‘ÏjÒ¹B¾ðAî,ªAÝ‚¬ìÌXJ¨©iÉç.7ôøiPÁ·ö¨A Ÿ€À¨ÀtÒ16Ãì]¬€õÄ_%ÓÓQ”Nzê鎇+V¿”ƒ¶nÕ({šÓ™d–£\uª_ãH ¸V§å}¤rÛ'Oz%²Gà 3œ]šÁ"0Z1PÍ/ôuÉÞ ¦X'~>@Ù9Üš‚ñÍ­hà܃ᇰp b7έhøì„b û ^¯;^c+ŠÂÁ¯i2•)WSº=6åI¾FJ ¥ÞDŸAÔ8x0Û™™_!Ÿ-üf†ÑœBº†ïË1J]:gS9Q!¦X?äBÁÞtµÂî!÷¹؄&%)ùˆGW¸ÒÏŠ¸¤’uˆkUqhŠ«Ã&nã(ç‚Ù 4IbÕ³Œ³ÈjÂ80ÂpйÂ*{˜“É=ÀtWÌáD&£ Ü©ŠV|_`Ì ®¥ç ›•fbŒÂã¤kó…-*0¶ z#ƒ÷­Mâ? IDATϪUlú¯2ÜŒ£ß yŠÂš±T/ÏÕ†­xÚº=Z1ùôÞý’Å•ßtëÀÏß R1y«ÿÀìð#F0}:pòä ¶T­Æßß~æL½ž>JûúkÍ (''“_~ñ\º´¼¹¹²~}Rơׯg¿ø°?‡öí.]j±vmÝ2e,‚‚R[·>ۡùŒWuþñVkôó‹¨Téè‚÷ôz8°ÜÝ»m}}«ÛÚ¾‚6U ;Û8fÌý^½î¥¤Þ~ÛáÊ•ê-Z¼¹CHˆ¾yó¤Û·õÞÞ¦gÏ:yz¾àS¥§ó曄…Q»6»wcñŒ2­{‘tìGR Ý;機‚Cgs3œjî¬ñyºm%àó¶¢RØøKYÚÌ‚˜¨Ø>œ*.Oä3Žqõ!•J° ýáÄó\O¦š åKŒÂÀË$iéìÌH÷|á¾4Æs1‹î˜*ax:øÌ螆pªÀDŽ’»‹lK”¯qP ’☆»-êsÄ_%ÑÓÞxÆ‘Èmªwh”AÆ9Îé˜CæöMéc û€|$hcø(ÇF¢rد`nÍ0È«q›Eæ,Ðcõ1ÉÈÀ²RšG0±§Ü‡\ý á|ŽLh1•ßæc48{>wcÿÅ_Ž×ÞÁªÓƒÜL7Rÿ#ÄÀñÙÔŸ 4•ªsQTD¬À¾&%É<‰ÖÓ&¡Ù£˜iÃDSäð›BV>îóµ)fUè„°ZÚ›îÀ9v†¶´ŽrTKnš(p«id ¦š ª«$Þ#ÕõLÜXIL89 øbo²•¬“ä3¡"\ƒ<—¦•ý-ÉF¦˜+¬óÀJÅÏIlHοÐ>® )OŽ‘þ—ÉÎïpgV–""ƒq… ç·£–3·™|ø‰Ð΂€‘8Ù°ÿS÷1¡­%»¦`gÅÆã¬øõiÏÁ[MIH¦÷DrµO¯ï÷dÅvlHZš¾}{§Ë—[¬[W·téWÐ'˜‡¼ÿÉeË,,TK—–ß½»RÉ’/á·<©mÖ,1&ÆÐ¦ÙÑ£ŽÎÎ/xhµôîÍ¥Kxzrð ÏàÁˆ}H‡÷ˆ{HÛælõ/>Ä廆í‡q°%àl‹¶*ÞŽaàŒ‚ï¼é]d)8ŠÖ ‚ß»´«öDxŸÅg0Q±¡'6­#‡cX~k[cYð|ns<‰²¬­›OLóPÇÐ(æ–¡¶ÀYœÑRZÅ,€;ð(°, ™B0[wÔF˜C”ãÛ85ÅN‹ñÑ@?ªÚbº³FŒ­¨îJ‰ÃÖ¡«IÍò”¿Àn-ÙnÔ)‡W´¤9QÛ•f1¬Ð“jK£´Ë`¬ùH͸µÐW!{Š9VŸ¿ Ì\B§TšÀUhӨЅG÷‰¿Œ]9jr«ÿ ¾’ÿïñÚ;X=}Q›rj5ÕûcnÇ­=XzR‹ŒbÎâÚc÷–â2 æKl}4 ‘O 4#S«ž°tæ:ÓÛšZâãYëNW[Ü5Ä…óK5š;á–IÊ5yáU 4VÄ¥.î¹èvÅzÕ’Ù˸¦Ga× G-2‡H#R“±ØL - ±„¼”Ú4ˆ`±%TÈe{€—%~åFDVÀÕ¹¼&ÕlÉ`|h¾ÄTÅÚ6Xšðã-v„ç ÍÕ¬{35ËϳÿîSy8±ëÌLXp€ŠrFV+Çš±( ã~ää"K*ëçà^†¸D>[ˆ±¸œÛˆÁÌ„ÑÈ Ñì;ò̽Z²„¾}IOgÒ¤ûXÀ¨QÖë×;˜š²l™æƒRuˆX?‡úÒËË2(¨ÚèÑÎÙÙÆ±cï÷îž’bx–òËÂÊJ=iR¥{÷ÚŽí!ÂêÕÑžžÇ||ngg¿²·øâUþcqölJ³f}û^ŒˆÈòò²ýí·F‡5©]ûÕô æaݺü¨jõêçÎU3ÆùYšÅZ{ïÞœ7ßLNK“wޱط¯¤Ý ’• C‡HÙ²:„‹KñjI)tx—ˆhÕcÏOÅ“Ûí:ÊŽ#¨T¬Ÿý4uKf=瓦á7ÿN‘¥ØTÞþŽl#[óiëB‡hù`aj š”˦jùð³¼iT`˜SÉÌ¿‹Ja]]œÌŒð~u¼iÇøÒIF¦føÙã 90Ú0ôh u1ýk %GSØLX0 ÕMßÂí±!Ü·À´3õ㉿ÎuLÚÑ.‘û·9£Â¤ ½2ˆŠâwµgšÄÓ LÈaoõ„Yó,ÌçŒY`Äj8I;ÑÅ`Õ€#)g0+…ó;ÜüEEýŸ Ðv»§¼5õù;[ ÁëuÇkì`¥'ìø†fb4p`1o|ph" æ\œM¥É(¦Üÿ «71-‹&ˆì\ÌZbLB³Æ0Íëöær¢<“AϺ\b¼ø¸Ã–›ò.(WØŸIrG:g9›Jj/š˜  $,†äθ9«¬ÃIßÎ`å]0»Žf3 À§ØÔÂô>†Åd /dÁH\Tù¤Ã£ÓH5|äÄû%É4Ò7œ#€µšmÞX¨ø.’=ñùf¨î€o#€§‰/(Xª[ŸÖ|¼—äB)²•YÙ`äfNÜ.bÎwÞà‹·Ñé黀˜¢ÅEŽö,ÁÔ„ö0—bƒISÇ0ñSt:zÌÉgô «T¬_ÏçŸsø0­[søpñj…Ñ¿¿åþý%mm•uë²{õJÉÎ.òÞÍ›ÿµ,-U~~å·m«èà Þ¹3¥^½›gÎ<ƒ~þ?‚““™ŸŸ×•+-;wvÎÌÔÏšu»ZµãëÖ=x%´éÿ@<ßÚÿÓ¸q#½{÷ ¦MÏžM)WÎbíں׮µìÜù™ÞÏ€´4û•e8Ð1(¨z: ?)„?Z{íÚü¯ÀÈ‘V;v”°°xwõèmÛ²q#Íšñû︻¯–‘É[ïsó65«±#¶Åå*?C¿©\¿Ëª)O3¶‹0Ôè'?Ò#[GïˆI¥ee–ô)rÔ¨ýÜM¦¾+S[>Ž8Et&M]˜T7_’¢cÀe ÂTOÚ°•ΊåH.¦üìžÿü—N¢‘ŽæôµX GÀò˜a.¢[K– ,Ä^ ‘ä¬.”¼GÚ”!N Õ°ƒs@gêÛaù;¿ Ò„&8œe« µhkË V ºÙR!š…‚Ñ…~æ”Ng.`Ë ¼Ñ»‘³ÅË‘<\ Pf>·}ªÌà’/†\*äÎ1Ò¢q©ƒÆHô%ݱ÷ˆ¼þœýýþ­Ázõx¬ì €ßS§7v\ÙCéfØ•#æÙzJ7#ç÷öR~bà®/¥'ÄNÅv6€ækŒC¡$œVsˆ±@:Ó¬ðtʯv_èDmWšȽŚÒTªH==º ö”¥l-jéÑáH)ìZRÈìä¼9ê±ÔUP¶rçi6¨§PøŽØhrL` ö¦°ÍUt€8À>ÈKÙ}lES3âÌ(pV¹QÅ‚kÙL.¨X¯e‹ou€¡W‰*ðœFÕä­ò$æðÁq?Û'5£•1|¶¯ˆÙ†6cT´zzûžXdÉ÷:Öãa*½¿"·è—«¦'ëfcmÉê]Œ]\ü†øNeزsè6˜‹×Š×13cáB>üŒ ºtaÓ¦âÕ £];ó#GK•Rä´i“””ôruë}ú”¸|¹F“&ÖQQÚV­nç1¿¿Bä…:nR¯ž}ttö÷ßG—/ØÇçvRRqùÔñÃéÓÉ}û^ìÞ=ø·ßò*ÙCC[TîÕrŸž;§©W/tÛ¶;;õ¦MëÖ¹[[¿Ü­{Á‚Ì!CRõz&M²Y±ÂþYÌsA‹\¸€‡Ë—S³fñjZ½?&è •Ü9¸™’Å%¦¯Ò{Z#zóñÛO¯úî`ûé'e!ÂkŽ¢¢;?Á¬PÎñ—0Ö\ÁÊ”M½x<5`öÜÃÚ$¿w'C®M#¦žÈ`^<*ØàNiS€“ZÖgc©ð=@rAÑÕ7àZä R0›š˜æ%s ’ƒ:ŒßpEô¢buJvŸDGlÛR3”Ð(¢¬°jNó{ÅqÇÛztŽáx7Ìq¨Â{‰ü¢áºή|”ÉbL©mE÷‚ðÕ\2f€«‘<Ú„þ6-Ȉ'ý*–nؼÁݨÌðCàB€¶ó˜ Ð}6ë§\}v:à_ü-x,1²c¾Ø5…–ÓMÊb]ýš Ÿ¢¶"vf0÷ û™±˜µÁ˜JÖOÇd<Íša&TÖ¡áû²Œ1Á>s©÷âC51œLâzúš`v‡ ñÜmO{SLopã>÷»ámy÷CxP]p3 ~\Õ#ͰïŠc.F"ˆ¦am€q¤é 4ÌàSHøÛc ßj8¯°Q±É3…e ì))8Úƒî.¤èx™¼X‰?´ÂÑ‚𿙯¦Røùmœ­¹›Â·ŠXt©Eb&ÝV^hV ZŦ x¸p.Œq?°¬• 8VWDòK<¦l­Osð#=ý#0Ó]ɛШ>IC`Š •Ô_@´‚|Cæmô•0… °áéäàí(2ÊbÓ*¹èö ¼C#æ0І6jTçÙ 4äJ(k€ê| `(¨mÿÜÈC ?€Êžù° ):grö¢Xcñ ß”ñáö,€ª³ šŽ©ù—Ö“L¥ŽÜ»Fr4åë’‘KÔ €ÎÅq¼þ‹¿¯±ƒ•Û’\ü×ú”(Gä°§”©Ü¿N….è2¹ùî#Aó¡ô4€Ø™Øød~ƒq8Ã…£vÌ2Y¢QPí¾È kOz7Xe]-Úƒœa›-¶Mhä %foRØÎÙk7®}@uW¬#HßÁ]`<å1»†f € غcŠn%™À'ðÄ5McF¦å'À½­øª,C#‰Ò(ðcÊXp*™¹NL+V·øâa®˜‡+»ÃØ.¨Ð⩦Âï‹4:Ú²k –f|·=mìöØò&jæü€ïšbvC¥bÝ2º´çQß#ò~ñ›¦(øø°lŠÂ¬YŒS|iWaT«frîœS:¦7oê›7O ÓׯÿÙº©©âãSæ÷ß+—.mzäHFݺ7÷ïOû“ÇþI¨TJÿþeƒ‚š:Ô¤kW—¬¬üGxóægþÀ‡üç­ýOFllŽÏ÷×ÕÕ|æÌ*QQí¾üÒÓÙù•U²çáÁm›6acÇÞ×ëeôhçÓ§«V¬øgß"ÏÚZ­¼ÿ~êâÅsseóæŸ|òâyMGŽÐ¼911´kÇéÓ”-[¼šgço8•äÐV<*£síG“‘Å€Îü0íé¶Á¨ú}ÁÈÌþtmXdiûEæïG­bóÇxâyOÍ¡óF.ÅÑÆƒO &z…AÇHÉ¥‡;C |ÁL XY w+#‰ÕÑÒ†é®ùj 5„ê©bÂk€“°Ìa(Šî;2U°{s”(rü‰£ 9NÚnî)(£©m†zC¡4²Üqn@¥ \H&Ù §úÔ¿ÊL’œ(_•7î°%‡$*—¥m ßêI±¡~ Ú§3MÐZÑßOXÀ2¦ƒ`ý ?aHÇþ-’n’u[/T¸¿3{<ôŠŠ7&q`@¹lšy¦/õ©ÿ ^¯;^{«×$€µÓè< `×ÚÌ89‡ºSQTÜ\…Ë{˜–àÑïà†EurïqóHšÕ0Tð“9M-è.d§3§½¬ñÒÏšJô²¦lÑQì«Ç[6”L$êç›ÓÜ›<!¤-µJaGJB%ƒ9êQÔV`+w"É(”(Œ‰&×eö ,!ózøƒ),‡<ª)[ÜÔ\ÔñmAAÕç.ôp ÅÀÀôàdƦz¨fßáXA½TOT&KÏûGy<ì¤gu&7Go¤ïvnª¬zÜT¸ïÓ÷±hÝŠøðÙ*‚þ…êÑŠÍóQ«ør‹‹ãe05eûjZ6áAÞ%þÙ |£F±};,[Fß¾ääy‹-½¿âÑ=½ÛñÃt… ~|¿»˜=±´ `-Þµ¹I§~¤<;TÔ³'ûöaoÏÎtéBzú35óP¢„êðá’={Z$';tH>{öÅœ§àâbºå¥KË›˜(Ë–%4ovïÞ_°P¹²µŸŸWLL‡¥K½ÜÜ,ïÞÕŒR¦Ì¡1cB"#ŸÇžú…½ýŸ÷‚Vkܾ=î748µ~ý•JéÓÇõÌ™fÁÁ- z5c+ŸBn®Œsÿí·ï%%é;t°»zµF§N/ÝŠh0Øvèüûï¹..ª“';txq0ÃÏÁƒÑé=šµkŸ9…˜êËÒï±0gïÔ)F!:žŸŸDÇ&l™Éf¯øŽK÷¨\†uã(\®›JïÈÒ2´Ÿµ)rȸüv'+úaWp5!)LB[áRPô?ê×3¨aË’ù’ ¦Ç¢ÀÏnT0ÐÁàTj™0Êš6fó!ªÂüÑ\EWõ$l Ä_!ÓÓ1ùÉÁ;‘d”ÅzU€_Ò*†zxxRú8dzÉöÀÃÏóìÔ“[‰®TÁ߈®<¨œWÛîÌû”-TÛž>` ‹È˜ ‚õXVaÌ¢DOâO“C#²´<<‹•+ÎmÙŠ‰u>â”?*5'±ëk€~3ž·ÓÿâïÂkì`…]˜>÷g¬ŸFW€_gÓj&ŠŠsßPõÔæÜÝ„}[ÌK“z­%VõÐÅvó7‘L4+a8“U˜Ø0HgºžNtt÷YèB#gêȼźÊ4.M¥lÒ¯r õ\qM'ý<çP©í°ÊK䡺+Vá¤ïâ.0òΘ^#s €v¥Q_D»,`xÀEø€®æx¨ÉÞM!KJ¨ÙàZa~‡ ¼YUiZ‚9|\PQnoƆ¶¨æ]æñX^EaÍÛ4(CXïnG_(ײ2ßõøl3g åeÃh^ƒèG¼·ýÂ.tÃo<"ŒøŠÍŠÙ;[öo¤ze®…Òy™Ïæ mÓ†Ó§)WŽ£GóSχ¹¹²uk‰Áƒ-5:4mÕª— !ÍCQV^¾&(HS¿~èæÍÉ/>ì?‚½½É˜1áám÷îmؾ½Szº~Ù²ˆJ•Žuëtøpâ‹ÿÿ<|˜»`Á½Šöí{ñܹggó'|1@Õyûxûptb¤ñhú¡×Òl(G·’•Nãî\¼°kõs·ý_üåx¬Š^÷n¡ÃÓ›¤"îR­™‰\Þ×»ès¸°š##çRy À­i¸Îˆ›‡õ—  Yޱ ´…$˜aÃ0ªë‰Ðà_–Ñ&8¤s>•£5ùX…é}¥r» ½A¹ÆÁ åQ6œâ”†Ì®Ô‹#ù!·‰³@ýu”‚ŸJ¶¨¿Ä XAÌ}ríPfcÌ#=ƒUk5 °ÜŽÚ¦„èWàNµ°aº+FI¼ÀDaK}Jš²;ž•QùjÍKóy-ôFÞ?JFA%·¥ ;ûâbÍ¡p>/ê}ØŒ‘­ÉÑñÎJ¢ ¹¦&lŸL™’½ÆÔõŘÔ»Ìýƒ‘ÓÙQ\³K)GnÁ½<ç.òÎÐâIJóP³f~)îãâÜçÃÄ„Ÿv˜6ͦT)Õˆéýú¥¦§¿t¦¯Q#ë  jï¼ãžnèß?bìØè„„¿*$®R)ݺ¹:ÔäâÅÆU03S~ýõa‡çê×?µzuôÿßìYÿ\º”6|ø5w÷#“'‡ÆÄäÔ«gïï_;2²­¯oõrå^:êù'¡×ËÒ¥ -Z„]¹’U¹²ùÙ³Õ||ʼ°Ýïøá‡¬Fϟ׽ý¶E` SÅŠEn.ýú±hæælÚÄ„ ÏS^»±3P¾_D¯.Å(Œ$"—†ÖÌ+¨'û=—ÅL`³Ž*¤€øê#héû`Ùó¢ÉA{}AR<¼(©E¿†ãÉdÖ¤¼3v8`ÀPŸú¥(u–­ µéd](?U¨F‰aPŽ/„ ߃ʞypö‚-ø’1Àæsú!¹8¾Ïƒ½èR(Õ‘GwI ž jWÂcQ‚rí¹¼ SK¼p`5*5ÝÆ²q @%¯çíåÓø—¦áÕã5v°L ~X­šÁ€yÛæÓa"ŠÂáoðþ µ9W×Q¦föÜßiU¬*’qM6MÑ?"åÝ ™_Ãr0…UpÙžy d²T!½ Ú}±é!ÈuV•£2 è/°Û÷*TÑ¢=Îñr8Öˆvd-ÇsÑÕÆñMÜ'û[`ÿ%' »bñÈ$Ò€· dpsY(lrÀRÁ?‹Ít Ó]igËCD’‡*o‰m€q!\-pÅæ6¤Ž#áéL(ÄGUÁžÝïa®fÅV1¤ß»t®ÉÃtºKf¡tYélŸŒ™ _ïb[q“S‡2e(#ïOcÿ™bʹrh+¥9|Š÷>AÿlÆÝ3ghÖŒˆš6åLqg+ EaÎÛ¾}ï;8¨¶lÉ®SçÑùó/};(YÒd×®Jß~[¡m[[?¿GU«ÞX° þ•WeFýúyOúv¾¾ÕË–µ¸|9Ï8šçüuïûJðÏ'5% àa‡ç¼½O­^­ÕJ×®.‡5¹t©Å°a,-_à©ü_pòd¦·wèçŸß¯]Ûjà@Ç‹«{{¿¸ ý)ddÈ€©œ–-Mš¤mØààâò‚;|j*;²u+8À{ï=Oy÷~>ü®lb| IDAT–ø0äÝbR3èô¡ԩ¾eOÓµqÉôñE§gR/ú%êšÀ– 'Å™JÏ­h LhÊÇõŸÈOųô:&*6¶ÅÆ@/¼w‰d]]ø¤À[‘À®TÔlõÀLxhdH*smif°Ž‚SÁlšMd"·$ªØxx¥PçàVn‡“V«÷© ì!(´r”´ ÌŠ"*Œ03ÌZÓú6gˆ´Æ¡.ï²SC¬-nntŠa¥žꕤCAm{?SjŒ™…6í1T¨»’´ÅÇD®Ï©\žÐp>Çf´œÆÞYˆÐi{üÐëèø¿¬'[P§Ùó¶óiüK4úêñ;Xy¨Ñ€G±\½HƒÎdgpæ7¼‹.‡?Ðh$bäÔBjšN•aÓqÿ5V@EÖ ö0 Œ0ƌƖùÕî³KÑÓ/-ãø¹2ïYâœÆÝiDOSÌùChG:ªP]âR #*ôpÃ)‘Œ=C©Q«¼v`<å1½Jæ€ùØÛ£:Lî^r€åà» ¯èÜË„ÅvŸ¦aPÁF\L9Îâ‡ùèíÊGòGèdÌÕlj‹¥ þ¡D=1Õåø¾;Àèý‰x"Ïkö©áÊÕ ü c!£iuA„ý¸QèT1ïSÆD«£÷DNGÎîéÎÁÍ”°gÏï|4¾x’Ò<”,ÉÁƒtéBr2;²oß35cêÔz—/;5nlihÕ*ÉÏOó4ë}úi©U«ÜÞzË>5Õ0yrLýú¡GŽüµã]\Ì'MªÞvÛ6ïÆŠd²þÒ·þ¿àŸL4š–¦÷ó‹ðð8Ú½{ÐáÉvv&£G{Ü»×&  aûöN/>þÿ€˜]ÿþ­[‡]»–]©’ùرÎëÖ¹ÛÚ¾´3wù²ÎÛ;qãÆlKKeõjû߯bmý‚ú°ØXZ·æäI\]9vŒV­ž§|è$ýF`00ÿKÆ~\ŒBº†Ž#¹F• XAÉ?”åêx{qÉ´«ÃÜE–v\bî¾'íÉ‘¡¥Ûfeñ¦'_8˜¦eàQ Âôú4.àsÆ™ÊY°¦NþHœëÙLŒø®æGãžJ¼‘NæL°H‚I,'xˆq.À|ìQE‘ãO,0 7;ÔyÍÝ ÊêZ çá1n¨P ¢uËfÍrhNssLƒØ4¦§ŽŒ{ì$¿¶ýn"; jÛ-TÛþ5„A øŒŒiÖã‰_ŒèqBäZ Y¸ö&êdþ\ç´Tâ¯ààŽYYîbëŒ{+ÎîÆÂš&}ùuÝ“ðÁ¿ø¯âµw°F-:B¯É¨Ô„§ÙpL̸ÏžX” - ‡X•&'CIl½=é°kÊ””óX¼ƒb…f5ø€+ÄÃV[|lôÜÎåLy&‚*“`=«3”8Í1«Ã›*LÂ8[’’ h`‚IA*Ti¥Fu‡¸»ÄY Im‚Iˆ!Ó“ÉTŽ‘‡ÖÕ4lØNv*FW˜“×ÐyìI#¬èeAŽà“™ßÑábÊOn(°;• ‚Ri?/ªÛË‚{ù’%˜ÛüCyT(22°6“š¡7²ø,á…åvìA +.E³è`é΀6dk™¹‰ÔâêŽæÃdåໆK·ŠQ¨U€uXYrâ ³—Ͻ{===ÍCB²'NŒéÐáNHÈ+›],ÌÌT}ú¸ž;×<8¸ÅÀåŒFÙ¾=nìØ/¯ ÜKLü—§ôÅ0åôéäáïuízaìØèèìÊ•­—.õŠíàççåîþÒ1¤—BV–qÁ‚øAƒ"7oN¶´TÍž]æÆ]»þ'­+Vh&LȸsG_§ŽéåËNüâOʈ\»Fœ?OݺÏS>}ßoÉÕ2áS¾UŒBv.£r3œJå8æKq\]³¶ñ¶NB]èÉs)šïŽ#ÂâÞt©õDn&$: ¯Rlíý„>˜s™t™Rð±O&qàj…Mõq4È22/­0¢¹Ã–jÓãªbCþÃoè ¼ÀwdXtÇÒëˆèŽSSì Ènî tý&%uès”7©ë†ÓMnf‘eý¼ÊIÁèLEOEð‹‚R––Žx=b«‚‰3ïYP.›Ý ²e² äÝ4Ws c,*'Tíɾ‰ÊûA¤]F1Á}qÇÌ%,EEk‚w¢2¡û,ŽnÀÄœ·¿ààÌÌéóéó¶ó_üm× ?øÉì!â,#?—®ÈÂ~òË †¬è&ç—Ë,•|ßXB”Õ*Ù^Kâ÷Êofr¨¬dÊ%k¹l+Ùg$©“Ä;‰îºÈv3‘´LY+e¤•ˆî¾ø‹÷]ùBD.Ê‚é*kt¢Ý# üeØ- Ôˆf¹,÷Ÿ{rODÉÕá²zšlÑŠNDÖHhW ˜$FY ÑÞü¹Ü£È§’â*±ã%UDô"=Eù¼à*“ Òò‘+SÒŸ\úœXQ‚¥ê Ñò%WÒ¤Ì!QdßÃóeð1Á_z(j6£|ú›à#µWJ¦¶ÈÒáPq'ÊpùåJ¹&GúøJíQÒvªdf³zƒŒ["x‹s¹Uüv8.®uWY¼ê9›*"b4ÊW_‰™™(Š,\øåÇØ±#»Aƒˆus{˜ûg+ŠœãW_ÅÕ­{‚MM/Ž˜¨ûÏNõ²׌Ңŀ;»ý:›3çö±c‰þïù ÿ+׬[wÿ“O®µl˜g.3³ßúõ»tà@‚Ñøw|ƒA~ú)±lÙ«¬RòITdäø/—”dxûídˆ53‹›<9-;ûO]ÀÙ³âè( C†Hrò ”¯„ˆCUQÊÈT_)Ö>:½tÿ\ð–6Ã%2¶ø“,Þ-MÇ‹ÛP¹t¯ˆ<1SÜ¿†É—»Ÿ>dÚQÁGê­’ð”"òÍw©´Yî¤æKRuâvXT¿Ê’B'%K×»’]p—;+&±â/Çrò%'D‘r"wEDä d»Jì’#Ù)¼%x „fˆ^DvÈÝ®0YÎäˆ^Dvʹaâ¿\öëÄ íbY<[f‡HH†$ý(#’Ñ%2IB¤ëaš-’å@°x‡H½d¦Ë×±âš$ˆDúŠ 2JD+ ^’ØJ4?ËÝ·%‰™!—Kró 9?Yü‘cƒäÜRñA6¼%'üe²¨µœÝ%]‘ÏjËéñFÞ©"'’ú¢­-ëÿ‚×kì`ˆˆÈkÁº~ à«)t€JÍŽ•4|3KNmÁ£%¶\ ÀÁ WbΣ”ÄÆäëdj°«CN ‚°m!ƒ¤½¨+aL$mô„&ðfYÑßw=·5¬-Í5Ö©OçB%z+(áìÕ’âE ˆ_ÌP×£°[³[ÖÔt¥Di\zãéˆEÉy3Û?¤´-ꓤ#U/°1CÙLVZ5ÌSXy ·*æÙ¡ßLŽ5&”¦–%a9L|/©cÇç|p•„\•¼†¸Ù“É¢BƒkT ¾í©QŠk´»Hή]5&uB„?q3î‰ÜÊœo>"[ËÑ«ôúÃ@­Âw›‘L»DÇ?­tlÅ’Y¨TŒŸÍÏ[ž·±ŠÂäÉ,^Œ¢0qâóhH Wõêe±sg>KV«VI>>†—/!07W&O.}èPåÑ£EX¶,ÁÓóÆ‚ñ99¯t¼Nqðð°Z¼¸Æ¡C·móîÚÕ¥~}ûMŸÖ¦ÍY{ûß½¼N ~mݺQQm\í9ø/Ö` ’±zuô AW<<ŽV¬xtР+«VE™™©Ê–µ˜4©Ò­[­7mª×±c)åÕ³.<£G34:42&Fçímuôh••++¸¹ý'9óçu $îÙ“co¯¬[gÿÕWv' >ÇÚGŽÐ±#IItëÆ·ßRâ¹ ‘wÂy³?©éôè„ÏO“…" ŸÇÞ“89ðí$Ü\‹9ÉêßÿçÂX9‚zŸÈ€‰L¢±3»9ä—0æD­ðU{< Mà Meî%ªØ3¹.žÁ¾Ï®•M=;>óÈ—Jç»G˜+Ì-ƒ… MŠFXÑÚ@£@`T‚ld:éÀP¬Ê JEÿ1À \lP'µ…Û@_<ÍQß'ñ0×U(]ñ6AH`.¸T§z{ôèܨíL…<Þöò´3Ãî+gúBš†• Øð Âv°‚/Èü}Ƥ*©¿ ²ÆúMb6¢˜Rº!ßTÊi_€ú³o.@Ëaùƒq:~Ä*€CY:à¿çmíÓø·ëÕã5v°ê4ÈÒ°c  Ó²å[º|Š;Óv ÀÞ™4›ptu'ÏÄs*À]_JO…„åXŽAåŒö4Ù[`)¨a™B˜-3€L©À…A@ Kíq/Ck#Ú0ÖzÒÀ…JY¤^åPc—¤dIë’—¸d‚j0-U(‡¸É#kL> ø™›Iä8b:‚2À"îga¬ˆÉ¬0‰4Ô†QàS!/¹×ÜŒ)6aP*yƒøÌ6y`¡â»Gì+`™W‘6Ž$ä2¼€p»¬5ß6ãR“Ïó[ôËÙš±û]ìÍÙÊ¢³EŒ:¾}‘CÏ•E¦è”uä·”.ÁK¼» âSv,¤E=î?¤óh’‹c´z¯ËçbmÅ7«Yõ¢ôßgŸ±cG> é AèŠ+aª*¨Bõ±cŽ3gÚÌš•Ù¡CRlìrpr2ñó+ýz>}JäfU­²n]ÒßÀÆnn®êÓÇ5  á¶mÞ[·Ö=ÚÃÛÛ¸y3cõêèÁƒ¯¸»©\ùØàÁW¾ÿ>úæÍŒ¿“ þo®ÁJO×8ðhÆŒ°ÿÇÞ}ÇçtýÿÏ}ι¹÷ÜsÎýžæÍOÚÙí®RåÏAƒ‚V®¼{ûvZ¡B¦:¸}÷]Å™3+†…5Ÿ9³b©Rov40KHHF÷î7›7¿vþ|ZÑ¢¦¾¾%NŸ®Ø¤Éó×®yš>>©Åܺ¥¯[×äܹB=zäz`/¿Ò^½š6mHN¦_?6mÂâY Fs9¯þØÙм!¿ÿ„q^‹}îï۰4gë<*–Ê#êC ^ ðý§´©ë­/7³û2®¶ü1³C¿Í|׊ÖÓc2ðÚÍåx»óI…‡‰›ï³êVF¬É^'AÏÇwø¦VÄœÈm=µMðΞAÿ-˜@¹ìÅ熾"&`Ì#<ÝÛØ¶ÀXÄÅ ôÍ(Z“B Ë9¢ÇЂj%)OüMnÚ`ó.ïÆr÷§Õצý=ŽÆsÕ ûÒtŠb•† Ê9Ñ.‰©BºM© Ã@à+ f¤| `ëCÄT\>ãæ÷ˆŽâ²m2%;pó)÷)\‡»7‰§HUÓ »ŒKIŒì¸z—"8•âÄŸF=«vƒº íŸHqS)j$ÇH} ©­’³¥§ƒx!güd”“ D.î%Ź´VÖzˆ/rm…ø×?äÆwr£½ ác%u©D ÷ÝÄ 2H‘æ"+½"Ä=A¾ÒKFxˆgŒlM—˜ÒÅOÚÅÉ•ûê+ƒ–ÊÐd‰ ‘oñž.Ó$AD6ȉâ;E6hE/"ßÈ/ñ›!"¢ù@®zJÀ< ‘L14”(w‰øA’E$U¤º"C³©V¤~Œ!rôÏŠÄý‚<Å O‡Ý‚Ÿüþ8Û7g_±ùU.Ææ*½­Á¢ž"ê)²óz®ôä ©â- ”Ž‹ŸPº%N½/é:CtzyZB²Ôè%xJÝ~’œšw­-^.¸ î2yÎ3êö¡ƒÅÖV@š7—¤¤ççÏÞ*³pááì|ûöŒço¿}û«W¿ P·îÕ£G“_åÓþš”ÝÑ£±3gÞðò:íà°;kP,ëec³«E‹“'‡ìÛ–ö?’xï^úúõÇ_jÐà˜‰Éöœ¿´té}ûž÷õ½séRÒß3˜SLŒvøð0cã³`eunòä{iiyý¼˜ô­[ÇB„J1|x¢FóüM²øøˆZ- Çç=Ø—Ó¡cbW^p—n%%Ÿ?Æo— žbZOvÏ;ÃæbÜA𒙞z뼨‰ñ§r8$Wzb†T\$xKï¹Ò5ziê'øJ­’š}ʺ—.N{?ùéöãœ=B…i,ºì߸4UˆëH ÉÞ𠈑ˆ±È¹*ÚâQD"D#"g%©¶Ô—sá’!"%ÜKüzɞɑm0P|'ÉïÑİL–y‹·Ÿø‰Èv™ç+OÉF½hÈ?ñº#{µ{^ˆg¢œÌ”ÓR8RJé$\ÄG‘Ò"éßC"¸Î’ì/È9k‰?*ÛÕ²ÃTbNÉRKñUIä1™]H¼‘?ã"‘ó[äãRâ…ì_.<ÄÙü‹¼SYÜ_îâÀooàõŸn`Èzˆ0KßAèõøÎ§ûPDøù:ŒXû ­>Øö5 ÆšLͯÎN¡ìD€ÐY¸~ j¢aÒÓ·1Ü'y*Lg8›m™&i¬0p³C€{ühŠe):€\áWWJ•¦¦íY¶•£\%*iÐle« í©í‚í=âv ¡ŠÆÇˆ<É}5|E #Tk‰ !ÍÕ4l¹¤„¡·„•`?@V¤tcøÝ5›3ø9{nûX7Þ±!RË€ìçûŠš³ 2ÀðK<Š>¡½Ë¬¥Ýž\ÞÛ—gbc Âû›Í1áÝÚŒMƒ±·dK ßåžð^µ$û¦aoÅÇødaÚY³Ã‡R…9}™ŽcóŽ}5¸ËæclÌ”¹|8êY±€¦M9x Y3¢ò_x'÷V¦ÎmÛšÅÄÚµ‹1"é/_hÑÂöܹJË——ts39}:µqãîÝoÞ¼ùF‚¿çÇÊʨaCÇqã<üüêDG·ºt©‰¯oµ¾}‹Vªd“œ¬Û¿?fÊ”k-[ž´µÝ]»öÑ#.oØõ·îá_–sì¯téƒEŠìïÞýìÂ…·Ž‹ÁÓÓnøðRë×{FEµ m¶bE‹W®ló7Œ>¢ÑˆO”‡Ç¥… £ éÛ×éÆ*ÞÞ…-,þâ¹wÿþÌêÕ£÷ìÉtqQïÜéèãcûŒëˆàí͈ˆðÝwøøä1Ø—Óæ]´éCbÛ²b!Vyuð-ßÎÄQ«Y9•Öoç‘a_àÃ8Ó{1®k®·BÐ"ÌíF“+í„Þ¹CuW~i—k“ÏŽq(wK¶¶ÆÒ@`@±Zb`v\†Uq¬‹ÇZÍo%΋¿¡cdÀb;ÊDÃû ‡‰P ð‰Zø+OL´È Â>ƽ(fÉh–rø„Jv˜E’°›@ª¾46Áø gîpÇëæ4¿Í…{›c]ƒ6·Ø’F¤-%‹Ñü‹õ¤ÚÓÄ–:IL±æ3#, kÑÀhN“¾•¶s‰˜à:†PÄ@ñA¯D—Fé®ï%-šâ¸vŽä(<p;”·(Y•èxî†R² B.S¢4/Mó^ÿyÿt ïŸÈîRÞNÜ‘½[¤©£x"G¶I_7ñBŽ­—qEe °N|<Ĺ𛬫 ¾ÈÕ%r¬±ø!×§Ë΀„ Í9‰0’cÑ\Y$‚Hq‘ÔDù*BÜc¤›ˆ!X> Ï{â«•ô½Ò×O¼"äX’D/‘!?Ë h¹™ù|ç-Þ "!1H|‡È/÷$VDüä–—øõ“½)¢‘9–5S/ùTâÝ%¢<ìhʺ9²¹•ý{7¤ b)Aº¬2Åá¼ +bK÷³‚Ÿ4<öøþ/]'om|¥áVÉÌqãm0HçuyOxßvAÔƒD=Hv]z²Ø]«®‚—|æ›w½Ü·V‚§t›wG—ˆlÛ+–¥wi×ORÓò«á‡nÞ”²e¤ti¹ž£¿-!!!ÿÄ` RLM#!ÂÓ3úúõWš®ž’¢Ÿ93ÒÚú˜šž><,!áŸï1 K[³æî°akÔøÓÈ(W—Oùò‡>ü0péÒ°3g""2´ÚWíöyvi¿ ÌLý;i{÷F{{‡´lyÒÆfWÎ}vrÚÓ®Ýé™3o=›žþ×»ˆ^ ƒAÖ¯+UêbVÿe‹ׂ‚žw¤>“V+“''©ÕÑ¢ElDij~`ÎÒÖédÀ15•5kžÿEßÿ*ê"‚»|6Aôù|É–Ãb\WTµÅwcÞý™êÏ<)]*NJï%O¾5á€à-޳$4÷üìyA‚¯X,•S'.¼%ø‰ó‰Ìîe¾«yxBû5û„¦y+ZˆnÙhi'‚Hc‘¬¿À’ê.Õå~¢èEÄW"<% “\ʃˆÌ“ó^â÷¥7ˆèÅ0]6 ß5â/"ñ?]¦{‹÷U¹—·^&ûÊÀKr0SwI?ñŠ’sirV꜕·ÒåNª¬ˆ÷âi4‘ODi)¢•¨ª$+‰{% t”„²]-;Ì%î¬,µŸÕá/3íÅ Þ.#d ra»ôq/Äÿié*žÈžõRÃ]Ü‘ÕK_êâÀOoàõŸn`ˆˆJþÎYJ@€ªN)]šÏ>dö$*×àýž|?žrÕéù¿Œ xeºaÍP\ËÑy<[?¾$m¦r¸ÖÅiñ3§ßÅÄžú;ˆœHÆ5Ê$Ó‡´Å˜6ÄéÔ† 0ÅÀˆhêˆw`™÷`>VcZ™‘^äKÜÞañi¶±¯0åK\l©®ªþƒ?Ì0Ì`;ìVsôWKâ2Ž*Çñ«Ä¿GÉO©’†¾+W¢ÐŒ§xW EchDt†%8´Å\ 3lºàYw¹$°<*ÆœvÆBð[,ÞÆÎˆ •Èšh¯¥ÚŸÜÍ`vE>Ïž™FÝÍÜMåÃòüš#^N²†zK¸M¯*¬é’«€'û1u;ŽV|E©Ü±„öÒî24LêÉÔ>yTÎÅ4H|ƒ»²x|Þxú<^ýˆŽ¥nM¶¯ Ó³jûÁÚ¶åÜ9ÜÜØµëáCé/^¬Zµê³6ƒ€m¯^ 7nèllT?þh×§Ï3'­<Ͻ{Ú©S#–.ÕëÅÉÉøóÏ]Gr55ý{Tò—’¢ L:v,Þß?Îß?.!áá´µŠm®^MÌÍÕ&… ›»»›;8˜d½ 6ww7ËúwÑ¢vvyÍÓ^ ´ÓÓõññÚøxmddfDDFÖ¿ã㵑‘™ññÚøx̓ƒA,,ÔééŸpw7kØÐ±Adž kÖ´U« Daž<™:fÌÝãÇS€J•Ì¿û®hÛ¶¯´ã;ú¬ÕoŒ™0Áúë¯mžäýQigfÒ»7›6aeņ ´ió¬­D˜2)sQ©øz4ÞcòÎv(€¶ÃÉÐ0}(_~˜G†Ó×h1‘ät>lÁÒá¹zËDèê˦óT+ʉqXæ˜Ü¿5„N¿£V±£O®©W{ïòÞnôV7£W™‡‰Á)x%MÏOºfˆAÛëìN¢ƒ=[²7ÿ<‰9©”2â|!ìT³a8Ây(шÁ‡v˜‡“Ùƒ+Z ‹)W›‹ÄNà„ F‹hìŽÕ^.lä”#Ö“éf†ñ*VÝäfUªv¦ó¾ˆÕ· ±Ãµ“¯ðËmv¸àYïë Mâ”+½‹0 ŠF¢ð5§Ôc"uI_`\§@®5AeƒCÂs+¥G›ÊU_ÊôFŠã?“²m1¯ÂžÙTncÖM£r#J4aé4j6¢|SæMųEk¨~úI¦OçË/ŸUßÙT*UV{èuûô¿ÛÀà?ÜÀÒëUÆÆ|7›u‹¸ÆÂßøíkî‡1e[§Êð¥ü9èPú/áü\b®âåËíÅÄ^ á$þAì!ÊMÁ,Œ˜¥Ø¶ÄcÑå1Dc¿‹ÐÌáJ*“˜hD‰Büy‹Éñìsâ½L>ÂðdîTâ“¢´üI¤¼ËÐâTÛÀ†+\)E©¾ôÍDëÍñ¤tãíT½CòHŽê‘Y¼]ÇÄã¦FP¹&¿‘ö‰®¨ÿÄÅU<Ô„;ð| @ªàCˆŽ‘VÌÏŽØý&âidÍ¡r;Õ÷EÓú¦jN5|¼âÄùn#MÇÂú|–c•ûXÞú…ÄLæ¶btŽ‘ƒÐþv\¤F1Ž}‘ëL l=E×èôÌèÏøÜÃYNÑr(©éLˆ÷À¼ë0ô6­{z’ìYƒGÉgUxJ ]º°w/öölÝJãÆÏÊœSR’ œ¸fM:з¯Å?Ú=7„ã³;—6fÌÝÇ“òåÍ¿ù¦p·nojm»¿F§“ ’Ž‹;~<>>^{áBRLŒF¯þ¹ÂÚÚ¸P!SSggÓB…ÌœM]]MMMLÒÒôÑÑš˜Ml¬6&F•£yôÒéžÿù&&*ggÓ–- 9;›6lèX¿¾ƒ«ëó—1þ;]¿ž9a½?þˆ¡pa“É“ ü±“‘Ñ+07f|òIbB‚¡D £5kìë×ÑGh×Ù¾·óÈ{D¯gðx~Y±1?Íâã^yg;s…柒œÆ°·ÊÝ” IDATî|ÿE.Þæ¯ˆKæý¦,Å-Þ)ÛñöÃÁ’3_áQèqzp o-!)“y­U/Gzoo!Aƒ·'“=&ê„Ç8ÀGÅXš½Úô‚(F…SȘ‹•p58¬¡y,j8âÄÛ¦g !ha ´`( ›I³58ùqœÄö8}MI úa‰$µ?»âñ€ÄoبE7œ6•)@ÀvXb9”¡&¨gR:I­âŒóŸ Cc|ô„…2ÚÛ*lNc~*?›RljÍÐNÂFUIÂq‰¡„Ç´8ÅÖàß#KÞú“Mõ=펰ì]4)ôÜ΢nhÓº‹oº‘žÌÄí|Þ‹´dæoçã^¤$óýzõWiµrù2•*ñ”Öòn`J¥ÀÁ9ß0qÅJ2î+¦¤pI>ûš…áR‚½Yþ!N%è5M}°+N»Ù艥;­Wqª9Æv4 àZ=t±xlÂ4ŽÄOP»áŒj0¬…®ð{4­t\µa¢ ¯ÐÕ€¶ËSI?· ÖMùùg޳Î×®LÎ s1‹SImG»ZÔºDØ÷ì6Åx]]°]IÈz®Åz!MPæÆßÅq¥ ÐØ³h`5[Àš‚vCKÎj©‹VØê@;s€Õ®©eNQƸ>,œa—øá6•l8ÛèásÎÀÆ[tÛ‡ZŶִͱŽX~·žñiÔÁ(Þ‹•=Yþ£çlôæ~ÌèŽyTß:ŽNϼьêG òïõåü%Ü]Ù±’šUòΖE£¡_?Ö­ÃÌŒ•+éÖíY™Ÿ°bEú!‰©©R¡‚ñÚµö5j¼ô¼OØ¿?iäÈ»YñH›5³™3§hÍšdzlYVSÎî¥}KÚøxíÝ»éIIùΉ«]Û. 1¿wÉî!sp0-\Ø,¿N277³ÒGõ´¸8ÝìÙ,x™)––êÏ>s™0Áí/ÄdÏ)=]ÆO^¸0èÜÙ|É;‡¼I›6\¸@‰ìÙCùòÏÊœšFOÙ±+KÖûÒ¶yÞÙ®‡ÑèÄñ~[–{ç±&ôõç~<ë±a<ƹýÞ+´ý¶£MŽ?Õ¤Lê-áj ½«²ºóãô¸Lêmáz"KñGKUü¤¦]§”%±5¸šçUÒ lô ³=@´êÑDøÆ†‰Ö P nÁXø€hºk†ê…J`´›¸‰Ü²Åx#•0^NðÜ(‰Í|Á\¶_'²>åûÓ$‘ÄÅ,Ö éN÷ŠT<ͦ@ö¸S¶cÏ0í§ŠónU]¡{aÅøÜÏhšƒÞ™&œƒÁ®‘0ôu˜wÆæG.•GŸ€ÇV®ùµqDE²Œrýɰç”;£wãðbjuAÜØñou@íÆ&_šuFœXý ïu!FÏ–-*xñ‹»J¥‚—Šéð‚Fü—( ,iÙ’}û;– ¸tžI³9¼‚ÐKŒ™ÏÉåÜ dÀ|‚–H÷ÜXÎýó´ñáÞ*¢Ïðö|Òv½²qt'l(¦Å¨|…øVhN`5ÛQPR`w&VqtWaíÂÑHÖÝg…5Õʳô“£9_Šùp+ß™bV„J5h}‰KÙøh p)Os£…Gã¥Ã0‚#᤼Où”½¦—Ó1,¦l]l¯¢{—hìĹ*&À4˜.YAjf¥0>™Bj.Â] °7‰w¯cªâtEªY¤é©u”Æzð]ÅÇ…öußœÃÖ”¨”£ÛeÒ!¦ÁÑ‚3/w\¼ÇÛ³HÍä‡^ yçÉ*øíùøe@ë<êhÕNú{#¯_óA»<2)©tù„½bmÅÆ%´zæŠ"Œ˼y±hŸ~ú¬ÌOÖõì™pá‚ÖÜ\5s¦ÍðáV¯8]Z«•eËb'Mº¥S«éÒÅá»ïŠþµHDr²îÁƒÌ¬nª˜Mtôãnª¢E-nÜHuq1sv6qrÊêâzØË•õ21) -§çÒjeñâho½ZMŸ>N³fqwÕ&ø•+ºž=ã/^Ôeo#FX½ø¶¡¡´nMh(•*±{7ÅŠ=+s\íúq<'üVð¶gÞÙîEÑàcîDâÕˆÍsžl<aÑ4Ï(ZÖÀïkÌrÀíXjKl*Ó;òeŽ‘JƒÐ~-;®SÝ•ãc™½•ÖÀ»;9AMg޶Ç*{ðùD<Ž#p°MœtBýΤ2À™ŸKtŒg[L9äDÖžö‚ß¡øƒ)hÄÜ@÷6ðNEß•ËÑh¿¦D{œo“<Š#z˜Mý 8æòZŽÙb9…n˜®fu(¡•©Ü•®ñDâ·LRZ0PMò ¾4Ƽ)¾‰ìgž9%*±.ž29hI_;&Byˆ„•hŠû*s ]!| ±¿aÛŠBÓð c+ê`sPñÞŸüÚ}&=¶³°#=Ãv1Ñ ƒž¯¶2¢ßm¥oGT*¬¦K¬¬T))/ÙÀZð‚™_ÆÈÿrþÛsЃ¿¿¨Õbj*k–‰;RÞ^v®O¤¹³üù»x!½åÔZˆŒ)$׉72ÇMBÿ_dy!‰þSüT²ËZ2"åj @îMÍٳݧ‹ RID'ý"Ä=AFë$õ‚´ Ï89$aÛ¥Ãvé˜"÷îÊU_´D†ÆK„ˆ¬“uÞâ½BVÄ"éceÅ@ñ="WEä¢Ä¶¿N²#L’EäW‰ô”€Žr1Sô"â-‰õåA/‰ÍƒˆèEZˆ Ò4{R§^¤E¬!­båÑÔåOïRùòãÀǧãÅl‡4ô¿û Í Òc¿à+å×I\Žzƒ¼·Zð–ê?Jjî ïkN Åtˆº–G-,Ü&x‰Q{YûgÞÕôý:ÁSLÞ’þùVe¦Fz~*¸‹iqY»%ßlL* … §%/þ”»ˆ¤§†O„ˆèØ1.6ö5Ì¤Ž‹Ónjz44èÎ¥K¯4º`:zôè?½ ¯_LŒvæÌÈfÍB²f²·jõª3ÙY¾<ÍÒ2"*VŒ z¹,ví’Zµ@4x~ ö[aR¾¡à.¥Þ’Ð|³EÇKÅ®‚§¼ý¡¤äõïÆHéO/iðy 6$¦Kõ©Â@éôã“"¾Êgbû§G_q[)a9b›DgJ«“b½SÆ_}œ8áž ¥.JRös# S„±¿/·³S~AÄNäföVÓ$ÉKbÞ‘¨¬À ¹ã)K°AÄ †±âï%~?Ë%‰•äáòë@ñ='7E䬜õïÙ2;ER ¢ß,Ó}eàúˆ¹"†#2ÒO¼®Éï:I ”fâ™ G3d_„¸GJ9½<-‚H}MöÜöi’rZÔrÖTÒCädKñC‚'ÊÁ÷Åùs€ø odcoùµŸ D–õ—ïz‹2ÿù¼³x"ß’~^âŽ|5L4I“^êâÀ‚7ðúO70俦Awý:?u*½{£Ñ°c?MZ‘”À™³ÔnJB —/Q¥ I1„†àQŸäh®Q´)÷‰ Å¥ÑÜ;‰Kt)Ü\@±@ÍýÙè­±:’†Áh(Wà[¦¨0Mckî îáck1š º«,/B… 4Ô£=ÌrÁà…—V7¹H æÝ©üÁÉxRªàØ’âZ ‹ è‡k9,ÂÉüûÀØX¢>L¦7I€VÊîWÃ*{\ÕìÍd~öú€s‹RÞœËéLÎÂ^Çž…Uð§Ïy.g¯_¬‚eM¨Sˆz@—¢\­bM*:sáüru¯:|ÞŠtü³O-ùüY;¦öAo ß|üNçQSúóå‡hutýÿÀ¼kÓÔ„5‹ù|-½‡ðÝâçÔþ¤I,_Ž••ùüù4jÄíÛÏÉÿˆ¹¹ÊÇÇvÓ&GGõ–-5jÄøû¿êÓÈFsæ½zµrïÞŽ‘‘Z_ßèªU¯´hqmÛ¶„übÐÿ?*È‹=ÿAAéÜ)Vìâøñ÷JîÒÅa×®²{ö”­Zõ•ƒ¥gÏ„þýÒÒ¤o_‹€çªUó}tà :_~IÛ¶\¾l÷ÙgìÛ÷œ@í—‚iØPªVäèÊåótZFsõU˰cVOýÄèDZMâæ}Þ*Ï®)X™çz7]KÇÅ ¾¿}kÎû–`fÅHÅš.¹z¾^â§+˜±¥ŲCƒj t `o4­]˜’ÜáD*3e%Ƚ¬c\2ÀO¶”0¸cø²‚¡$s1)Ah~ÀÁ®º‰#T_P\~Ü&Þ‹÷)¬âhÚÚxÔ¤T2ÉûؼÇ{VX]`o·­°ïàþé]'rçÒtˆÀWG¢ uly+‰)€ cÔÄÂ÷ †¤.@wã2X"|(pû‚´(¢÷al‡s{BGm‚G_—¡2¢òûœ^ƒ‘ 5ºsäwŒM©ÝC›1³ f ömÇÚ†258v —4[[ cÓ¦gÕ½âÍûï6°ÔÎÎ@æÞ½š6m°´dͺ~ˆZÍÒïé: •ŠUsñ°i­ÆìÃÛcŽÍ¦ú8€ ³)=§FDþÊ §þˆ†ðϰùu!4GIßs˜l„™%ƒ!‰¯édG&÷¢X_ž~ÆXÞçx—͸nc·‚Øo‰ekZ{Ø“DRÍâ¿…"nygÓhéü9ǃð(ÊÞpxêW&¦òîd®„S­$;'c“ûK5:ºþÄ¡âRXõ¶9Ú^Á1ôß‚ÀœÜÛ³N,*XÚ„·\§v‰#q¸›± 2¦j€TÜF/Œs#+$~†Ð;ta %YÁíS¡;¤Ã§5q?Ãh¾À¦Æä[ H_\ËaCú*B€O©lñqB.n…yêÛØ–AFyÊW¢R÷ϲTMè7sÚÌVè«åA4U¨‹1&%:B)cŇ0´0C1’§Øúó©g0-†ë\‡sSÊ~Åù9tTÀ™¥è5ÔèÏ¡%t4Ä–Eˆ¯a¬Zˆïaá,€ÁŸ3c ãÇ'Ï™äz?_oàõ_÷n`eßÙ%ÍšÅСˆ°È—.ï£Õ°y#M;“™ÎŸ{¨ó)¦R+Ò >MÉwH%,÷&dÄvó¤…ryEgbä@Ò^’Žb3 i4ÒÞƒ$˜hÃ(5.2ØQŒ1@$K:—ùyÊÄošÐTl'²*U+R1“̬У½hh‰Ù%ÂÎpà ãT"{ýœX·ÃY‹L'L "Æ“°Æ“†xÆ€zAmÌlI¦Ð=dð´ä+7 Ð÷6ñz,©Î[öÜN£Kšì&KaK6´ÀÌèáæ#œYÞ|¾C·§©Yó ^ÕˆN¦é˜˜°p)ýGä½BÎ#¿ü2èüyºu#)‰îÝ4Í ÷F/ntø°ÓøñÖS§¦ôèôÌ/{1eʘ͜Y$,¬ª¯o‰ŠÍoÝÊ?þ^‘"ûõ»}ñâ?¶Œàk1eÊ”z^Ib¢ÞÇ'ÊÃãbûö7öïO²¶68ÐùâÅÊûö•m×ÎîÕƒ—¦¤È¸qÉï½wó¦¾^=“  õìùaû÷S»6þþ-Ê¡CüùgÓgÇqØ´“¶ï“˜D—÷رÛ|ì1èû5{NàâÈÎ…¸= %5¯©œ ¥laöLÅ1÷çè ô[ÆÎK8[³wd®p-ñ´[KR&}ª22ÇcƒºÆ'Ö¢w™ÇéónòsFl©CÑìVÚèp®ePÃïÂÙ)Ii)kÌÜì†à¸ U`^Ö/‚a$Dah€é`¬¬pÍn˜~Œ;ð—ÓÑ5¤ð[¸%‘¶“@OêÛbHà nX`ÑŽv‚á0Ëôh+Ò°(•/§¯M'Ú–REhv—‚ΙŽfØ'ãØâ Ûa78À4’F!I˜wÂè-"¾(æÃÝ5Ä'å:vM¹õFæ”ìÁÅÕ¨MðèHàfL,(Ý”³»°°¡HMaïŒc).àV¬¸~råR¢¢ æíÛ?ëP¼y·Ö¥K[[[[[Û.]º„‡‡?#³ê)/ø-FÅ‹kƒ‚2<¡¡ÏÊŸ“±13fØìÞíØ©“ùÆžž1Ÿ}–ÿFõllŒt¾t©ò¾}e½¼ì23 +WÆV«v¥aà â_$\‚â5 É1"¼H‘ ‘#ÃoßÖd5‚ïÜ©êë[¢R%óçoÿ<"¬^^¡BôìÙ)U«o}ô¨sÉ’/úø¡N‡·7­[óà-ZÀsc¿ÿ•nÉÈdøÇ¬÷Å<ŸH:=£æ±é ¶ì_L¹âOfH×à5ÿ+/ľopË=) U¬ À΂Ýé”chƒÐw7â¨áÆÏ9^‰Ï¤ýâ3éTïsí÷D3î**øµ:u³×~Þ“Ä/1˜©XQ’¬Xr;3ù) 3ëì±Vü+À ÖCVsÕ‡”£d:£^„ƒbÐþB$ðÅ-PûyŠûVB%` ÇÒȬJñº”I&y{€¶´Í98ø3Iì2® P‰RH䨖î Jf¦dFK3êCVT±oÐ\%}Ýøí÷Æ¡‹Å¶%VM™Pi.çf *}ÊÉ0èðÈþEˆÐ|Ìè4†e³>ü Ÿé#'2k6`øâ‹Ô… ŸSýÛK]ú ¸ÚÀJIIiÖ¬Y­ZµîܹsçÎZµj5oÞ<--í›<1¹ì¿ÈfêT iÚ4ùâ €i3ø`("ø.¤ÃÇôl[I“^è4ÙLÍÎh3܇Gk2 =Fáfh YE¹É—Gàô!–5Єq¶‹ÀˆTti0 0Ô’&T×™ÊOÅ¥Â(šî–§Ðoz=oÓ͇(n^ä %–ïò.°›ÝI$5 B%Ц’±Ždwbgl1þŒ¢d/S Ìî8FhgLÖ‚9à› k’’¹Š5öX¨X’ÆïéÆ*V—ÂZÍo±lÈ^ÇÝŒ­u°4â×p~¸ý¸ôú–å‹êh tÝÇË3OkF۲ĦÓyi9ºu,LØ>ŒFe §å"s?³¯Rñãz6&)6Þ\ã f¦lžÃ€Nìð§ÁGœÉ·Z›7äè »rÀŸ†‰xªÃì rü8œ=K­Z¬[÷œü9µli¶t©Ý¸qÖjµjÑ¢Ô2e¢}|R_}ÄP«iÑÂÖϯLHH•qãÜìíŽKéÞýf¹r—ÿ5㆙ÁÀþýIíÚݨXñòÂ…Qii†-lׯ/\yÜ87‡WŠ¿ðH` ¶I“Ø÷ßO¸wOïéiòí·63fؼøØNx8ï¼Ã”)¨ÕLžÌž=¸º>+¿Þs>&Áç›î2©XÑüæÍÇ㆗.ýLIIzŸ¨2e.µly}ûöĬÑÀ¬ÅnÝ^1jè#ññ†#’j׎9zTãä¤^°Àöôiç·ß~‰ Û¶Q£ÇŽQ¬‡ãW`ªœt:ŒeÊ\LMXµ(ß@í@\­†²ý(޶x¢Aõ'3è ôËŽ3²cï7”~jþÖ—›ùñÏÇ÷T9m f¦?Æj6t§”ýãôÇ9p7K¶µ~”!NK»3$héâÎ×9V-Æ}-¬é `€þ‰ÄhmFV8‹LèÉÐ> ñaw>C±nŒpœÄC$Xb4–¢Ào\‰%£2Ž­)žJÆ:Žݨç€Õ.l޹^O &CÐÍó‰ù0–-é\7£° =“øô–|bŒ)Ì`©‹Ïm \Ç™BøÔ¦Tùž€¯A¨<Œã>ˆ:CÙ3 åhÖÏèþÕÃî«&²ø;€!ãY°Ð–¶|9&&F;ÚÏ»³Ì%ý ¼^Úßpéÿ;ЖŸŸ_¿~ýr¦ôë×oëÖ­¯ñ+2CCû³g›ö2k–Œ0}ŸŽ˜7žÃVúÐz=»–R¯/z-'7P¾=ÚT®¢X´)\ô¡Ê"P: µN}‘LÂÇä˜í¾f0Þ”²æx ÉÌ(̧FX'r4™SåèY¶¶]([¸^”Šåx[6k °-m-°¸Îõ@°é@m` þidzQ²"qd¬&X_RÜÕ¢ƒHj`2‘$ÞCt…A = kôl¨ÌI0ð~Y=/C ÑÖîñ=b–®î|YÐý,׳Fj«›QÕ‘àzìçÑà•ƒ9Ûzakƪ ¾Ïýl`ÖxAåÂ\¼G‹ù$ä¾911æ/yד¨DZMâöSË3[Y°m>µ'%cX»'ß*.Uœã~¼íÉ­0ê·ãD^Óçs²µå÷ßY¾ V®¤aCnÜxÎ&9•/o¼{·ã¶m%K?¯mÔ(¶{÷øðð×Ñ—õp÷ò7¬ZU7|®]Ë1"¼pá ‘#ÃoÝÊôðxÍ£Y V¬H/_>záÂT•ŠáíBC]FŒ°zvó('Žñã騑¸8Ú·'0 ž³Ijí?`éZ¬­Øú½;å›óN$ >âØJæø2êW{2ƒ±Þ;+vO¡ÒSA¶¼ý˜µçñ¬€œMlÿ®%MK>N_Ìâ+˜±9ÇcƒZ¡ÛYn¤R3û/ËòX6ÄcgÄÊR¯a³R8‰‹šßìf˺‡,?go5ŠÄ»èkb2 ÃLÂO)ì‚éeâöfŒz(UUð;Ç“H/OáTH!%kp° ml°É98h@ˆO*çöÆXà/P„á™ìÒpR³ #`4¤B/ rÌm_IêiL‹â6ž‹C¥F‘žJØNL¬qiAˆ&V8Ô$ô8ÖΨ »ŒKIbÓ¸F¹ê]%>–MÙ}ˆÔTºtI\»ÎjРˆ €˜Ÿýô¡z¯—ö7\úÿN´u¶ì =IDATùòåêÕsÝ4U«VíÊ•+ùåÜÜÜLLLÜÝÝûôéüܯ°¨Z&zï^³–- ÉW¯R¿>D¥Rª,7‚±tÇÑ•@JÖÆ›©Øc3N¯¥r_TjÎ,¦â0Ürk¦%(Ò}:—GQd6Fö$ú‘| ›éI£÷  DÁT[&«°Hg³ën|„3ÏŽ2[ÜôÌ7 ­Ow+p󇬱Î9PØŒ*epK$m§T¨†PÍÕvî\%¾8æïãV‹ˆHÇ Æªæ‰†‘5ª´ªÃudÍd·£°þ¦§Ÿã>dyÙK÷/i`=añâÅ­[·~‘œ©gÎt:Ñœ<ù0Àð‰""ƒœ=)"¢É”às"") r7XD$9Z¢oŠˆ$†Kr¤ˆHÊ]I¾ýðãOŠ>]DÄ •äcµ!¢ÌþN½ˆ$U#—²’Òäš^R³þ(·2$þцËÉ·ž,ÉäÁ£·®I„VFÏýyù¦¤ß‘qÖEE)ºœ)Es—Æ® y"ªù®DÉuYDäVªÏ+<ôÎ0‰Ï|2Qg?®ä‘9KÈ}Ù5ßw£eýó¢¯Û+×Þ“GD ñY"IÉÏÏ™ÓâÅôr›%¦‹þTŽS`‚dÜ–¤Gÿ½*÷ Ù)™áþè­š)éÙ_¤‹– ¾6%ûßz‰ÓÊõìôSòð«5’yüaZf¸ddG•Í^ÅB›*ÑgEDôZ¹("¢I—»A""©‰~UD$.JˆÜ½#÷#DDnܨ(ÑRRD$åôé¬ëÚÿY«@¬E˜3ªBÖþ¸ºº¹æxæþýû5kÖŒŒ|*He^T£P( …¢ÀxÅKAS †Ÿ–œœ\½zõO>ùdðàÁÀâÅ‹—-[váÂ++«¬ *Õã=oÞ¼ùàÁƒ6lèäät÷îݵk×Ο?Ïž=µjÕúÇ~€B¡P(Š—ñÜKÿÿ—ÚƒeccsðàÁ3gΔ(Q¢D‰ȯˆ'L˜°fÍš*UªXZZ6jÔ(88Øßß_i]) …Bñä¥.ý_íÁR( …B¡øÿU@{° …B¡P(þ) ,…B¡P(Š×Li`) …B¡P¼fJK¡P( …â5SX …B¡P(¯™ÒÀR( …B¡xÍ”VÁrîܹ!C†ØÛÛç\ŸQñêºtébkkkkkÛ¥K—ðððgdV=åoÛϱ—ªÅ‹SŽí‚@9u+ž¦4° –¾}ûº¸¸;vìŸÞ‘•”””fÍšÕªUëÎ;wîÜ©U«VóæÍÓÒÒž±É‹¢ÿm»úoõª@ñ"”c»€PNÝŠ§)F ¨œk)^ÑüùóÏž=»jÕªG)ï¿ÿ~ݺu‡žg~¥ð_»—­Å RŽí‚F)aÅ#J–âßÏÏϯ_¿~9Súõë·uëÖjþƒ”*xC”‚U( ,¥¥ø÷»|ùrõêÕs¦T«VíÊ•+ÏØÄÍÍÍÄÄÄÝݽOŸ>ÁÁÁoxÿýþB(^„rl+–ÒÀRüûÅÇÇ;::æLqrrŠ‹‹Ë/ûöí7lØœœ|æÌ™:uê4iÒ$00ðÍïæ¿ÙËVâ)ǶBQ`)£Å”2ÿ™šš¦¦¦š˜˜Ÿ—=@¡ð+‡Ãóóóårùùùyxx¸ýªV«]/œ?@U ,àWŒÇãv»}<·Ûíl6û÷†ZÍùT–w°€xišî÷û×××Á`°^¯Ó4-{"€By‚‚Ïç§§§ïïïF£‘$Én·{yyY.—www··Ù`fƒF½^ïZWI’4›Í÷÷÷ÑhTîTEò ”à ¨0,€` ˜=P´¿ÿƒuåªG`ó!@0L`XÁ@0L`XÁ@0L`XÁ@0L`XÁ@0L`XÁ@°?NQ!€IEND®B`‚gsl/doc/images/impulse.png0000644000175000017500000073130413536674414014140 0ustar eddedd‰PNG  IHDR@ ô¢9 bKGDÿÿÿ ½§“ IDATxœìÝy|TåÙüß}Îd_ÉB@²oJ)"²‚ U±u«V«õy, b+µO‹Ú—¾},.X}^ë.E¥UAÊ*`@6e ;„%d_ɾÍ9÷ûÇ™L†,“m2“œù}?~üÌœsŸ3÷äJBr庯[H)ADDDDDDDDÔ])žž‘3L`Q·ÆukL`Q·ÆukL`Q·ÆukL`Q·ÆukL`Q·ÆukL`Q·Æuk.N`íڵ뮻Ž ›8qâÚµk M¸vDDDDDDDDd2×ÞîÆoœ6mÚÚµkÇŽ{üøñ_ýêW<òˆã)¥k_”ˆˆˆˆˆˆˆˆLL¸6ôôÓO¿øâ‹öºª£GÞqÇçÎkx=áâW$""""""""sëÚtReee¯^½jjj^ ,""""""""j®mâ¾qãÆ#F4:ëããwß}÷:uªK'@DDDDDDDD=]&°ŠŠŠþð‡?¼ú꫎çÏŸÿÏþ³¬¬ìÀ×]wÝ7Þxøðá®›õx²käääL™2eûöí·½ñÆ7ß|s«wSUÕÓ'""""""""j…‹KuIGªÌÌ̹sç¾ôÒK3fÌp>277wРAååå·±s– 0ˆæÀ8šãh ¢ 0ˆæÀ8šƒhŒ£ 0ˆæÐuq´¸üŽYYYsæÌyõÕW§OŸÞê`~v‘s.î•——7{öì¿üå/mÉ^X³fÍõ×_ïÚ9‘™¸¸köìÙÿõ_ÿuË-·4{vÆŒ=öØäÉ“###322>þøãW^yeÓ¦M®™‰‹—& !š,..°}ûö×_}×®]%%%111Ó§OÿÃþ0dȶܖ‹ {:ÑGs`M€A4ÑG`Íq4Ѻ.Ž=ãóƒŸÇ&À šãhŒ£ 0ˆ&À šãh ¢90Ž&À šC×ÅÑÅ=°ˆˆˆˆˆˆˆˆˆ\‹ ,r“eË–yz 䌣90Ž&À šƒhŒ£ 0ˆæÀ8šÀC=äé)P·Ö3*ôXIHDDDDDDDÔÍq !õx©©©žž¹ãhŒ£ 0ˆ&À šãh ¢90ŽD¦Ç¹IBB‚§§@.À8šãh ¢ 0ˆæÀ8šƒhŒ#u˜¨çççsã7>ÿüóžž5Ö3–æq !¹œ=á iZIIÉÉ“'¿øâ‹>øà7ÞøéOÚöËÉÐužñæ'¹\³ ‡Ã‡Ïœ9sÇŽÇïÀåÞŒ=°ˆˆˆˆˆˆˆˆÜa̘1K–,yùå—íG233-Z’˜˜¸téÒêêjB8,Bt>˜:‰ ,r“””OO\€q4ÆÑD`Íq4ÑGr¹Ûo¿}çÎö§×_ýøñã³³³¿ùæ›K—.=ÿüóŒR#YÏù`ꤞQêÆ’<""j*aÖ[Τo~Ô=3!"""¢ª¥„CuuuDDDeeeÓSÅÅÅ×^{mZZš“˛ܒ´¬ÚsY5íœxJêã7¨oÇ®íºŽ¥+nJDDDDDDDÔséºn_X]]ýâ‹/®^½:==½ªª €ªª-]Ø®Á†sY5›–»nîv-:œÀê:L`QÏÖl™U«ÅYDDDDDN\¼x±OŸ>ÆãgžyæÔ©SüqrrrPPPuuu@@@K¶k°!©®uåä;)©Ÿ§§Ð &°ÈMRRR&OžìéYPg1ŽæÀ8šƒh ¢90Ž&À šãH.·víÚ©S§ÿùÏîÛ·¯oß¾ÆÓóçÏ;¹°]ƒ ƒúøvÊ§î† ,rþsbŒ£90Ž&À šƒhŒ£ 0ˆæÀ8’k9räÕW_µ7q¯ªªò÷÷·Ÿ}ï½÷ìýýýkkk}}ÒONSgpB""2ƒÒ íHZõ…œZOO„ˆˆˆˆz$MÓŠ‹‹wïÞýôÓOÏœ9óÍ7ß:t¨qjΜ9O>ùdNNN^^ÞŠ+.^¼h¿jРA6lÐ4Í~ÄÉ`ê &°ˆˆÈ Òóë>ÜR¼ýPwj~IDDDD=B8dÈßÿþ÷ÁÁÁ‡Z°`}ÀÊ•+ >|È!'Nœp,ªZ±bÅÒ¥Kýüüìß ¦ÎàBr“’’’°°0OÏ‚:‹q4SÆÑØ«·kvìíŽLDoà šãh ¢90ŽÔa² ?AFDD¬ZµªÙ«fÏž}æÌ™6¦Î`¹Izzº§§@.À8šƒ)ãèm ,SÑÛ0ˆæÀ8šƒhŒ#‘鉑¢gÌ“ˆˆÜ)aÖ[Τo~Ô=3!"""""te‡XDDDDDDDDÔ­õŒÊ&V`‘s‡ÎU­Úzep¼ßÞáé¹y)V`Q—’’âé) 0Žæ`Ê8Úz`Á[þÚaÊ zÑG`Íq$2½žQÙÄ ,""rîû3U«·_ÔÇ÷×ó#=="""""/Õu KWÜ”ˆˆÈÍt/Û…ˆˆˆ¨{B4=hd4ì© ©´ë¥YLÓ­0EDDf`ülÁ0ˆˆˆˆ<Ϋ2D&x ={`‘›¤¦¦zz 䌣9˜2ŽÆO ÞóÃ)ƒèmDs`M€A4ƱG`¢‡:ƒ ,r“„„OO\€q4SÆÑøqH÷šŸŠLDoà šãh ¢90Ž=B£Õ…ÆSQÏ~|çÎ&Lð÷÷0`À;ï¼ã8¾ªªjñâÅ111màØ±csæÌ ŠŠŠzì±Ç*++LÏùàÌÌÌE‹…„„$&&.]º´ººÚÉ[hv0uXä&aaažž¹ãh¦Œ£×d®lLDoà šãh ¢90Ž=Q} ãàéÓ§ï¼óÎ%K–äåå­Y³fùòå;vì°_²páÂI“&={¶-ãÓÒÒnºé¦Ù³g§¥¥;v,99ù‘Gii2­¾þúëÇŸýÍ7ß\ºtéùçŸoé-´4˜:©g¬ÕäšR""rnÏñÊϾ-éíóä‚(OÏ…ˆˆˆÈ{5mânÿu¾i÷¦¿ì?ðÀ£GþÍo~c<]·nÝ[o½µ~ýzcðË/¿¼dÉ’6Ž¿ÿþû“““Ÿ}öYûàeË–½ð ͦÚ5¸¸¸øÚk¯MKKkö-8Ü’3u—ÎÔ]r2ÀÍ’}ú'ûôïØµ]—Àé‰!&°ˆˆÈ¹ÝÇ*?O)éå³äN&°ˆˆˆˆ<ÆÉïïmI`%%%mܸqðàÁÆÓâââ‘#Gfddƒ/\¸0`À€6ŽÝ³gÏÀíƒÓÒÒ’’’šžóÁÕÕÕ/¾øâêÕ«ÓÓÓ«ªª¨ªjµZ›} N·äëÊ]_W~ëd€›Í ¼a^à”Ž]Ûu îBHn’’’2yòdOÏ‚:‹q4SÆQB¢¾•»70e½ ƒhŒ£ 0ˆæÀ8šÆåË—“““(JCï£øøø¶/((èÓ§ã©FO9üÌ3Ïœ:uêã?NNN ª®®héVílHöé?/Ðù·êpùU—ê•M¬À"""ç¾M­X»»4.Òç·?e‘Çt²+::úèÑ£qqqm¼³“ñ.¬ÀŠß·o_ß¾}S'Nœ>|xKoÁÉ`oÐu 6q'""30þ•ôžŸ ˆˆˆˆLÀßß¿¶¶ÖñÈ´iÓÖ­[×ö;8?sæÌÕ«W;YµjUK÷q>¸ªªÊßßßþô½÷Þ³?núœ ¦Î`‹ˆˆÌ@·%°<=""""j³AƒmذAÓ4û£uú|PXXXQQ±mÛ¶¹sç:¹ƒ“ñË–-{ýõ×W®\™›››››ûÚk¯9sÆÉ}œ ž3gΓO>™“““——·bÅŠ‹/:y NSg0En’’’âé) 0Žæ`Ê8z[êÊ”Aô6 ¢90Ž&À šãØC­X±béÒ¥~~~ö½ ‡¾aÆO?ý4111::zùòåO=õ”“;8Ÿ””´yóæ¯¿þzàÀÆ ;vìØßÿþ÷–îã|ðÊ•+×2dȉ'‹ªš¾'ƒ©3zFo)öÀ"""ç¶*_¿¯¬w¸åwwG{z.DDDDD^Š=°ˆˆˆœ1þ•ÔùÇ"""""3b‹ˆˆÌ@gw"""""ób‹Ü¤¤¤ÄÓS `ÍÁ”q4WÞ“¿2e½ ƒhŒ£ 0ˆæÀ8™Xä&éééžž¹ãh¦Œ£Q{å5ù+sÑÛ0ˆæÀ8šƒhŒ#‘éõŒæèlâNDDÎm:P¶ùûòð`õÙŸ÷öô\ˆˆˆˆˆ¼›¸9ãmK‰ˆˆˆˆ¼ XDDd¶&îžžµJÑSncŸCÇ&ÓÞ‚)1En’’’âé) 0Žæ`Ê8J/ۅДAô6 ¢90Ž&À šãHÝ3Y®Õ3zK±9÷õÞ²o—(Ïÿ"ÆÓs!""""gœüŽß~ýwÕºÃ{q?öÀ"""rƶ ¡×ý„@DDDdNBˆÊÊÊÿøÿˆŠŠ š3gÎñãÇÛxÀÎ;'L˜àïï?`À€wÞyÇñªªªÅ‹ÇÄÄ´Z!帖°²²òÑGˆˆˆŠŠúÝï~'¥¬ªªzì±Ç"##ÃÃÃ/^lµZ¯²ÿßàŠ‰·c‹ˆˆÌ ~ ¡§çADDDD.òÈ# 6ìØ±ciii³gÏž1cÆùóçÛröôéÓwÞyç’%KòòòÖ¬Y³|ùò;vØ/\¸pá¤I“Ξ=Û®B!㪴´´½{÷îڵ륗^úõ¯=a„³gÏø €^½z½ôÒK³fÍúóŸÿüÐCˆˆˆX±bÅ¢E‹üñ޽SýÂYyþ\Ç®í b`’’8ØÓ³h¬g,ÈôÎ…£&SRRæéYPg1Žæ`Ê8®Ý]úmj…¿¯XþËXOÏÅLDoà šãh ¢90Ž=K[z` !ÒÒÒh?•––và 7deeµz6))iãÆƒÛR0ÅÅÅ#GŽÌÈÈ0.¼pá€Ú2=Ç—/_îÛ·¯1 ´´4,,¬Ñ‘~ýú•””4{y«´mµíÛ2Ò=ÔésÔs:vm×%pzFbˆ ,""rî‹”Ò”c~>âÏ{E‹ˆˆˆ¨çR¥®®NUÕFÇ5MóõõÕ4 õͪüýýíg«ªªBCCëêêZ=ëççW[[Ûèí·­­­õññq2½fXº®;¶²jöHÓ«Ú˜Ê0SV×%p¸„ˆˆÌ€M܉ˆˆˆzŠèèèÌÌÌ„„„FÇ322¢££íO³²²k¬²²²Úx644ôèÑ£qqq;ºóìUKš6bwakv%q0ºß’½î†M܉ˆÈ lMÜ== """"jÕM7Ýôü£éñ>ú覛n²?]½zµãÙÕ«W·ñì´iÓÖ­[çÊwˆ¿¿£B0ê '°víÚu×]wEGG‡……Mœ8qíÚµ¤§§/X° 44444tÁ‚—/_ví¨ÛJIIñôÈGs0euÞTeÊ zÑG`ÍqìYþô§?ýío{î¹çΜ9S[[[[[{æÌ™eË–½ùæ›úÓŸìÃNž<¹råÊÜÜÜÜÜÜ•+WþíoûãÿØ–³Ë–-{á…>øàƒÂÂÂŠŠŠmÛ¶Í;×Ýo4hІ Œ¥‹Ôy.N`Ýxãùùùk×®ÍÎÎ^¹råsÏ=÷öÛoÛÏ–——OŸ>}ܸq—.]ºtéÒ¸qãf̘QYYéÚ9P÷4yòdOO\€q4SÆÑVå5,SÑÛ0ˆæÀ8šƒhŒcÏ2pàÀ}ûöÌ;×(p™;wnaaáþýûíÃÞzë­#GŽ :tàÀëׯ߲eKRRR[Î>|Æ Ÿ~úibbbttôòåËŸzê)w¿I`ÅŠK—.õóósábCoæâÞZO?ýô‹/¾hÍÑ£Gï¸ãŽsçl­È^yå•ï¿ÿ~ÕªUöñ?ÿùÏ'L˜ÐêN“lâNDDÎ}º£dÿ©JEà¯ÿÑ|³""""êAœç˜%趺.4.®Àúë_ÿê˜YLJJr\$øÕW_=ðÀŽãxàî°0•ˆˆz:6q'""""2±®mâ¾qãÆ#FØŸ?~|ôèÑŽFuâĉ.u\”nŒ£9˜2ŽÞÖÄÝ”Aô6 ¢90Ž&À šãHdz]XtWTT4iÒ¤¿ÿýï7ÜpƒqÄ××·¢¢ÂqÇʺººàààšššVfÉâ@"2)YVªÚ@5^„÷òôtz°ÕÛ¯|¦ ÀŠÿˆc“"""""è1Kírsso¿ýö7ß|Óž½ê$Ñœçž{Î1ÑžššZRRbêxÊñqIIIjjj³§xÞwðÌtU•¥™=û]tàRjŸ¯Ö6}©múRÛ¾±§¾‹îqû¿’ö=ñ]ð¼ïÀ;ð¼ïÀ;¸üééé rã“í¹çžk6QÓu¯Û%‰±ÌÌ̹sç¾ôÒK3fÌp<sôèј˜û‘œœœ±cÇfgg·2KV`™šžvÚúîßDX¸ÏÒ<=·ÒöîÒ¾úƒPS ÀçÉÿ‘žžTOµjë•C窼øh¬ª°‹ˆˆˆˆÈzRVVVÖœ9s^~ùåFÙ+Ç?räˆã‘£G6Ìås nÈñÔsuU‹ ÈÒTWuÉý»%Y§ý{Ëí÷(c®ƒ¦i;6¹ç¥MùõhÿgÒKþÞaÊ zÑG`Íq$2='°òòòfÏžý—¿üeúôéMÏΛ7ïÃ?t<òá‡Ο?ßµs î‰e«æÐEq”E ¥ÌÏíŠûwOúñ#¨«SFW†R§Þ UÕо٤íÚª}»M¿pºÞE/mʯG]6~`n¦ ¢·aÍq4ÑÇž¥Kšuž}z›g7w=—‹+»Æ·téһᄏٳeee£G~ä‘G{ì1o¼ñÆ{ï½wäÈ‘   VfÉ%„D¦fýä==õË÷*ã'zz:nbýø]ýØaË÷+c¯`ý|µþý^ÇÊÈq–»ôÌäz ÷7§^¨ðÿ>ëká DDDDÝW7ÿß>½ŽÍ³“—÷t=f á¡C‡î¹çžF¼®\¹bœ Ù¾}ûú÷ïß¿ÿƒnÛ¶­Õ왞,*´=ÈËñìLÜIf] úô5žªÓf«Sn²ý÷ã)ðñÕSÐÏŸñè{û?’Þ÷Cu‰Ž%b¼0iå.N`Éæ„‡‡Û 0à‹/¾(-----ýâ‹/ú÷ïïÚ QO$‹½+¥Ÿ>Žê*Y\_mÛ×BôŠPožoûoÞêÔY´¯þMóèd{Œ¦»QOôÕW_Mœ81(((((hâĉëׯpäÈ‘!C†8+,,LHH¨««s<8dÈcÇŽعsç„ üýý ðÎ;ïØ!ªªª/^ÓêZ?ǵ„•••>úhDDDTTÔï~÷;)eUUÕc=¾xñb«Õêx•ýÿ]½7Ÿ÷p}w¢f9îêJ=—ëãhµ¢º •Þ‘À’ù¹ÖU×ö"¶”æ¿«“§‹ð™—#3]ßСû|=ÊR—õ[uhâî¬îDê0ÑG`Íq4½{÷>øàƒ?þøÅ‹/\¸°hÑ¢ûï¿ÿÀ£G Ù¹s§}äêÕ«‹‹‹¿úê+û‘;vDFFŽ1âôéÓwÞyç’%KòòòÖ¬Y³|ùò;v؇-\¸pÒ¤IgÏžm×ÏÆUiii{÷îݵk×K/½ôë_ÿz„ gÏž=xðàÁƒßxã ÇñÆÍí•=þ€]ÏXé G‰ÌOÓ´ _(ã'ÖýíE#‹ ¡i¾|¾~žžY²þk•~h?º®üh²eþÏZù·õG-÷þR>Æ3t'몿[܇€ÀÎßêí E'Ók¼ð`L?ÿ~üø'žxâ“O>Ù°aƒqä¾ûî›9sæƒ>øÀŒ=ú7¿ùq|ݺuo½õ–QÉ%„xùå——,YÒ–é9>øßÿýßÇܰgÏžY³fýù϶ٽ{÷¢E‹:Ôìå­ÒKÏʲsmé"$I ÜÁk»,c銛µ…,½¢íûÖh^$¢zCQen–ÌÍýxzj]EêG0vTúôs6:$ .­Qê†ôKçµ­ëÕ[Úù[q !‘ üðï½öšã‘ùóç¯X±À=÷Üó‡?ü¡¨¨("""55Õjµ>ðÀ¯¼òÊåË—ûõëWTT´mÛ¶·ß~Àž={ž}öYû¦L™²páBûÓÛo¿½»ãŽ;ìGŒQQQáxdäÈ‘çÏŸïÀm ²ìœ–¹±Ã—»œ?M`u&°ˆÈcä•"H©íý€è‰à™›¥íØl¹ÿQOO­«h»¶@×ELœÌ͆C÷f‰Ð00q«²•ÚþÝʵ“D\|'o&›< """¢'77·wïÞŽGbbbrrr„‡‡ßrË-}ôÑO<ñþûïßÿýî½÷Þwß}wÙ²e}ôÑOúÓ€€—/_NNNv¼‰âи#>¾#?y:^ÚôHiiink!Ijüœ_îr"$ÉÓShXä&©©©#GŽôô,¨³\Ç+Å #"ÕcõÔCú©cÚ®­JÒ5"&ªê²×êô#ß°Üû°¶q­~ö¤èçd°  K®¸|ÝäëQæç€®[¿þ—Ï#£s½-¥—e°ºI©3Ds`M€A4ÆÑ4bbbòòòúõkX©——k<~øá‡/^¼páÂ?þøàÁƒî½÷ÞÉ“'?ûì³o¿ýöêÕ«a¡¡¡G‹kþ‡mŸL¬i#v¶fWBwʧî†]BÈM<=rׯQ:$°D¯Hj™u+mÓ—u{Q?}Ü…¯åBÚÖõÖÕïÊ í_£^YÚЍÞê¼">§E €2×W`u“¯G[ Óô“©¼›îeMÜ»I©3Ds`M€A4ÆÑ4ÆçØ—À—_~9nÜ8ãñÔ©S«ªªž}öÙáÇ÷éÓ@||ü Aƒž{î¹àà`{sÚ´iëÖ­sóÌ›ò÷÷¯­­õô,̃Xä&aƯâÔõGýÀmב8Ørǽm¿›,) ¢cd~®ˆˆ L¸^­,בٙ27ÃF¹dÚ®¥>(‹ Å€jbû keqÞ €èiYpŸóñ¢Ëz`u“¯G[+ U•òÒùN†»¡V§'Ö#t“ ºM¬·œHßÜó–{[ÍŠq4ÑGÓxúé§çÍ›>sæL[¶lùãÿ¸q£­?”⡇úãÿøþûïÛ/¹ÿþûzè¡wÞyÇ~dÙ²e3gÎ ˜7ož¿¿ÿÞ½{_~ùe£‰»; 4hÆ ·Þz«jº•%Á ,"r=ý¼,*”igÚwÙ•bêÍóE|?Ñ+„P§ÍV¯Ÿ@æe»~¢WU)¯@Ey{/µ%ìÂ#Œ§"ª·Óá¶X²ôŠ,ÈÓvmÕvm•eí}ÑnBß—b]û‰¼tUcKY@2€ÌÏéäKØXº—d°ˆˆˆˆz2Ñ„q|Ò¤Iï¾û¾Ú¿ÿþýû¿úê«ï½÷Þ„ ì>øàƒÁÁÁŽ Ô,X{×]wÙ >|Æ Ÿ~úibbbttôòåËŸzê)·½5»+V,]ºÔÏÏÏ…‹ ½+°ˆ¨ešÖÆ.T2'€¼R$+ÊDPHood‚Dd”åž_ÂÇ×~Üè e´9ïnô¬ #S";À2ÞoX¯¶^à_?ÔÖh)Ûõ{è‡X^Ôöp÷¡íO‘9Y"0Hí?€,/Á!F–2l¤~ø€ÌsYË;Vz©fˬZ-Î"""¢îÆyχÛn»í¶Ûnkélß¾}µKÎÊÊj4l̘16lhïK7Óô“û4<{öì3gÚù7~j+°ÈMRRR<=j']×¾ÝÖèØUq¬©±´gäåKm£–‹°•_Õ½c¡(² šÖîiw1™uÙö¨ý ,íØÃÂÛ~…Q„e´~Á!27ÛúöëÚ®­öîQãî¯G]7Š­ìŸ'Úë§OÈâB(Š2xTU^)xÑ• IDATF]§4ôp÷Ž¿©šƒhŒ£ 0ˆæÀ8™Xä&“'Oöô¨}dæe}ï®F)$Ç8Z7­3’8²0Öºú«Ò[¹mn¶mLeêj?¿Æƒ||D¯Hhš,ÌëìÛpy¥Xûv;X¯Àª_BØF µ5ð°,\*bâd^¶¶éKýÐþ&woHÛ´Z¼ÖE_ú™ÚžM“k²¨V+êX²¼L?sºæèºè __ )e~§Âíäïc¦Äoª&À šãh ¢90ŽD¦Ç5O¿xN–•:ÙN¦_°nü€ÌÉ2£• ,ýìI[&È¡£yS"&€öí6m×VÛý=¨²ÂúþòÂ2+Ãv°å–¶ù+ëGoÕ½ô‚~ä ãq[ÅY o¹y¡¶r-eð5"4Ìòð"eÜèç—"ËÌt[}“ÕjýrM;^Âu´­´õŸõbŽ ôŠ a­Ó„®£º €ˆŽ ¢cÑé6X\Bè=Žž¯Þ~¨¼ Äê鉑û0Eä>²¼LÛô¥¶k«§'Ò&òb£õRs§¥,È×ÔÓÎõ>Êð1ôŒtHé$… ÏžÒ–Å…:š7"búÐدmúR?v¨³o¦3jkë>üÿd~®,,@Mµ,̇¢ÀIVe…¶s‹~ê˜,*Ðuµ/)€T`Jòp"(ÄrëPU™y5ÕŽ#eAž¾ï[úÙ“òbš‘t·+Ũÿ̹jnöþVº.óóôö€¨ïd/zÇÀ¾)! s³Œ¦õÚ®­­Öô5¼Š—íBèÍöŸª\¿¯,·˜ ,""""/¹ ¥@~®¶k«öÍ&OÏ£ t]7Xi§eQ¡ý°=޲¤uµR[÷©Ì¸@¹f¸ Ee…ÌÏÕ¾ÛÙ|Ö©®V¿˜]×wã¼£¹2t„:å&eÄØ+¼<ĺñ yù"Y\(³3!¥ˆ‰ƒ¢ º ºÞt¼,Ì?òÂY‡YeyTU„„¶ãå ,!Ä¡¶#¾~">º®_¼zG¿Â|íÐÔÔ詇觎9¹k—|=ÖÕÊÊrzÆEcÁ`ÃÜŒ%Š@Û¶Aæd!(X9 X1dž-¥ýAÛô¥ñŸó7rÕ«xY–7S5Bl‚@{sÍ„q4ÑG"Óc‹Ü„‹ÒȲR¨­iT;㚦?âä¼ÌÉ2VxAJý`}Ve…=Ž Å2…ùúÙSDL1øú©cú¾ëgÿhXmWO¿pÎè–¥}¿Wfg@KKãÔ›ç«3nAû·#Ô°~ò¾~´ñB¶Ž‘gO€ªBÓô³'ˆÞq"0R6[„% ò(ÉC(‹ eƒ0R~RŠÐp´g]+b┤kwT ¯^E( òQS­Ücd|¤Ó¼OW|=Ê’+¶ŒB]]£²)cm ’8€±(U5^r“è?°Ù%„2;ö¬ViI['`ÐóómáÍßT¥Ãÿ{4o¢™0Ž&À šãHdzOO€Èäô3'QR,’®½"d¹m·WYV*üü=9«£ßk›¿R’‡«špñÑ;Næeë÷ªSgißï•é–ŸÞo 06•}PU%¯A("ª·rÍý‡ýÚ·ÛPYÀú¿+?º€2l”±RÌ– RÔÖꇢµ†P"ª7,Y\ˆÚø6éõÞÒ»;¸W¿pÖ:eÔø6^ÒYV*‹ áç¯Ä'èçÏè§QÑ2;åe¨,G“r*Y”@DÅ(V«~2U^8+ÆN@C¬v¬  LVÿ}£ƒb`2vlÖ/œU_·0€¶åkÔÕÐ/œEM5Üøiæ¸hQ¿˜¦öXÿD—ùyB¹q¦ˆïgSÆO„–÷‰€@"º7„°í`ñ1’›Êu“´ _ ¬­ ,K½@¬·ìÿù¹'BDDDÝÅÑ£Gÿò—¿ìر£   **êÆo|æ™gFÝá !ŒM쨛`‹¨ki;6ÉKç-·ß#®ý1ÊêX¥%FBÇ3¤ÔR¶ËÒmß·êäé͹˜@Dº^¹k[Ð-·@~.Šbëëäç§$&égOAU}}R?ú½¬¬Ð~§Ÿ>® ¥;,ósáç¯Þ8Kôé??á(zÇ:Ÿ­ˆé#³3enVXúù³Ð4²¨R¶k½^S2ý‘ˆÀ@À¶8MDÅ (h~#B#‘$"£ELÍ¡ V}Óz$°àã#úö—Ó´CûÕß@V”Ù–|BýÑ ÚÞ]ú©cö–~î”õƒÿƒ¾Ï¿ U튯Gã *ÃFê?ìw\=ªmÝÀØ<Ñ eÀ -;S¿&¬V"6FûÒÒ¶NÀËz`yÛ7UÇŸ½Þø²0-«öç7…M ðà”:ÏÛ‚hVŒ£ 0ˆæÀ8z¡sçÎ-Z´hûöí#FŒ0ŽôíÛ÷ñÇŸ>}ú´iÓÆ—””Ô™û÷èÄ–)±¹Izz[·3Y^{I©½«­¿“w=e;X|PQ®íÚb;Z[«¿š†ŠòºwV¢²B„…‹ˆ(‘¨  @Äö ü°×–*È…±òëjbÈʰÑ".^½y¾eþÏà ósëÞSÛ³€2(ªª\3BI,â⡪pJÄÄÁhƒU[c+/rJž;e{d­3R*¡ÛXj…„‘ÑFKVT43#Õ[ÄÅÃ×O¢ª]BØõúi´-_ÛÞ£Qö Uñý”O ÓN7¼£#˜”Æ:Ö®øz4Þ 2 ~þ²¬ÔÈîégOêÎ"0¨¥Z?;1`y)MfgPââEpEV–Ÿr­OÀËX^ûM°mŸ`‚@{sÍ„q4ÑG/ôÊ+¯,\¸Ðž½²1bÄ¢E‹^yåã©hîOÚÆAûÿ ÍŽ1ìܹs„ þþþ xçwÇTUU-^¼8&&Æ>¾¬¬léÒ¥ƒ ›9sæ×_ÝÙwëTúæG›þ×¥¯èL`‘›Œ9ÒÓSðM³õk/-`ïåþ ,YT¨íÚª> óõs§àçg¹ûAÚŽÍÖU·~¹¦öžµ~¾Z?•jý÷:yé¼ ·üüWƵêÍóEŸ~>.1}ÔªJý‡}¨©‘e¥°ø4MÇ(×  üèzÛsUU€ÚeÈ0ËÝ©sïh×ÌELÚûj—ÿ^·'§Z¦Ÿ9 ÀXX' ÚõZišÌº !”~ ,__ÑB–­* AÂHðÙÞ-¢ZØu±½”a£”ácPScýûÿjÛÿ-s2ˆ„ÊÐQʈq"2>¾²¬55PW§Ÿ8j»²´ûz”Ù™²¢¬™ãÆÂ^FÎQÏÍ ø€zÃŒV»q‰þƒèéŒð"®/E‡@JYÖ¦„¯ô²X^úM€½‰{Ï´7ÑLG`ÍqôB[·n½óÎ;›=µ`Á‚­[·¶z£ÆJÖkiØéÓ§ï¼óÎ%K–äåå­Y³fùòå;vì°Ÿ]¸pá¤I“Ξ=k¿Ã/~ñ «ÕºuëÖ’’’ .<ñÄ+W®l×[£f1EÔ…dE¹ñ;VýB{w—%°ôý»µmmw–Ò¨r²©ª´ÿ†§ŸJÕ6}©mùÚX<¨$V†Ž´üägðó×O¦êûRŒhú¾cwBËC E[¿måóè“ðóS§Ì`]ÿ¹~ô{H)"£›.н"•c• źÊaD\¼åî_*#Ƕ·IÄÆ@u¬ÖF{Û5óÑH;- óEH¨2lt® –L¿€º:ƒ€@Ñ+ŠûªI[V“%„…phíd 6XF~GôrMõÖ;Ex/Y\¤mÛ ¥l7^Wxƒ2r „QdaýÔ1[& ¥W:ùºúû´ß·ÕÀ82Þ`X/£XÏøL“Y—(×4þ³XS"$TDF£¦F?• @ÄÅ@H´1eÐóóäœígMOOƒˆˆˆ<+==}РAÍž4hÐåË—]õBË—/æ™gî¹çžÐÐÐ &¼òÊ+ýë_ígGŽiœ²Ù²eËsÏ=׿ŸˆˆˆyóæmÚ´ÉU“ñfL`u%{‚£´V«±” ™¬Î²Z­_ÿKÛ¾Qž8 @æk¾ÐO¦'µm¬¿k”€yYrÅØßÍȰ(&û<ùuÚÍêô9><UÕÓΠ¦Zôí/¢c®z!ʘë”kŒºZë—k4SÏrÛ]މ-%y˜ µüüWðõíÀ[a½”q?R'N 3ZK`íÞ@™8ŶéaçXÚ‘ƒl¹0U½"alŒ´Xeëà^ŸÀŠŽ±c£”²¤BU`!¡>¿}N9FÃ/@DE‹Ä$#E(¢¢aÔ UVh×0j ÚÞ½%ú‰£ú…³Ú¿×]}T—¥%ÆlXõYU)¯Á×·ãU„¨«ƒ¢ˆÞqDhÚœðuhâÞæ7C=“±ã$MDDDî±gÏžùóçÛŸN™2åÈ‘#ö§·ß~{£ñÆ ûío›™™é¦ùy &°ÈMRRR<=°¯´’å²´¤¡§x§“¶ÛæçíôÓÇ`d©¤´þó#™Ÿ )õãGôãGêÞX!s³m©)õÓÇQŸ… BÃÔ›æª3æˆÄ$eÈpã 2z|K¯¸/2^ôhÛ@°I,›€À«ž[}²3½Ÿ, îS¦Ì g\rò;«ÌÏÕÏœ€¯:áúúôM'Xš¦; @}­qÀ––2ÞuPÐ\«¨¹V~®,+…¦‰ `#è2B¨?šlï#ÖШ«þ±,Ì·®ù@–‹þÕÉÓÛç^‡¿eV†QJ¦íþFOý¡áxY 4M‡ÀbQŒ ¬Ü,=;RŠØx£x­UÊ€$¡Œ¾Örû=¶THÚœtÓz`yEbÃ;¿©¤-ÕãíÍA4ÆÑDs`½PBBBZZZ³§ÒÒÒúõë×Ò…zÓÅN]¾|999ÙÞ*+""";;Û~6>>¾ÑøO>ù$???))ièС=ôкuëLðsKwÀ]ÉM&Ožìé)x‚=Á¡ëöÒ'Yçª ,™mKêëçÏ¢®Vf^€šjëGo©ó¿öË‚<ëÇïÊ‚¼«.i®"F?Q?qŠ¢Œ×Ò+^?eŠ7Vßý Ú¶.Ì`,gë ÖK„„ʲRYTà˜¦i iÖµŸ@Jeìu õõG¥Ÿ>ŽªJoß'ÑrÏ/¡Yáë‡ú ¬¦K¹ ·M»>e,¯ƒ‹:¸_% PIf”Ý5M`é§ŽÉËh¹û!yî´}†þz´½Ph˜,-Ñ¿ßkÿT‘Æ>•FñWŒ‘ÀÊ1Ò¦JŸ¾m¼¹2ö:eÜÇ#¨ÄnkVýƒ6¾^ç¥ßT4$°<=Nóæ š ãh ¢90Ž^hÆŒŸ}öÙðáÛžúì³Ïnºé&ãqxxø•+WÂÃÃíg/\¸Ð® =zôh\\\³g}šü‰:11ñ‹/¾¨©©9uêÔ¾}û–/_þå—_:¶~§ŽaQrLp‹øDToøú¢¶ÆÖܽ“÷Ï©¯J­«ÓÓÎ/ÿY˜o]ó!uâ "8Ä(Ȫ¿F¡Ë‘’ùäÊ•+;Öèø±cÇ^ýõ'Ÿ|ÒxšœœüÝwß9x÷Ýwíýýýkkk¿Ð´iÓÖ­[ç|LS~~~£G~ôÑG7nÜøé§Ÿ¶÷rjŠ ,¢®ä˜À2Ê£BBÛõ;¹sõ{Ï%ÐO¦êY, îƒF¿-eÜ#§4d7|ýšOQ)Š2æ:'ë=KôM@Km°êjµïvBQ,÷>l{kFß%kã2·6Ò3Òµ-_Ë’+¢W¤2ªù† †²ª¢Ñïв¼ €±=·XD¯Hèº~þ4î²XŽ”¡£|~»ÌgésWu¨ÆR’® BÃѹX²0_fgÂ?@;€,¹)¡iÖÏVAÓÔë§)ã'#mEXõû v˜ñ‘,ofÓÃf¦ÇX^C—@û“ÓDDDd*ÉÉɯ½öÚŒ3^{íµŒŒŒºººÌÌÌ•+WGl [²dÉã?þí·ßVVV¦¥¥ýþ÷¿/(hX¨1hР 6hšæä…–-[ö /|ðÁ………Û¶m›;w®“ñS¦LYµjUFF†ÕjÍÉÉyùå—§L™â’·Ü’„Yo5ý¯K_Ñ#˜À"7IMMõô<ÀV¥ªôÌt%!¡pE/mzv&uÚlúშ®¡aʰQFÚEôŠ}ú)×]ot R†6®QÍìhP®ý±}X³<G߀~ò¨~`¬uާŒ3#ú °To˜@Û±¥ÝùŒòRÊ5#|~óG£‰x3þÐu{c~£ëYPˆý€máÙSàº-¯b4˜·\Uº,BBm]ó…IC`oˆ^zmŒ£®Ãñr)µ/ÿ @6 B]-*+´}ßÊ¢BÑ;Ný“†ͺՖ0µXŒžîc¤e[X˜›w~S5˜¦Ë›ƒh&Œ£ 0ˆæÀ8z§{î¹gÓ¦M{öì¹îºë‚‚‚Æ¿{÷îÿûß÷Üs}ÌÝwßýÄO<üðÃáááÓ¦M xã7ìgW¬X±téR???ѯH†¾aÆO?ý4111::zùòåO=õ”“Y½ð k×®3fLHHÈ 7Ü iÚÇì’÷ë娋Ü$!!ÁÓSp—ªJýò%X,ÊÀÁF–ˆŽ‘9Y¨¬ BBEH˜D[Ûú8!KKPY€@%y¨ˆ‰“¹Ù¨_®¥ÎºU?qD9Bˆ°peØ(ýØae̵ú÷{ˆÈ·„kicA;ÆQé›!dQ¡uí'jéuÆ-öS27€±o]Ãø1׉íÿ–yÙúÉTÛN‚mcljˆ¨–Ò|"«*eE¹ j¸¶¼ŽXƇôÔ1[e–ë¶ l""Jæd‰Þ±¶4œ|ýP[ƒêª¶ÄQ–뇪Ón6žjßíÔÏA!êÍ? Â{ÉÊ ='Kûfõæ[;µ‹¸xŸ_ügÝ{Ñ1öó ØRŠ­O¸áAÏOl´}SmÂ4Mܽ9ˆfÂ8šƒhŒ£×3fÌ'Ÿ|â|Ì¢E‹-ZäxÄþƒÄìٳϜ9Óì)Ç6ÆŒ³aƦwnö’©S§N:µõ©»BúæGÝóBÝ+°ÈMÂÂZ¨d1ýÜiëojÿZ…ú ,×°-…ˆï'zÇ ¾9Qgë•Øxö^ÚFK„÷R¯Ÿ¦ŒcT'NÅGé?ÈèÍÔl¬6òdƒ|ýNý¡íÚ*óseI±ñ‹¬ÌË bb¯¯ªÊÄ)0Ú±·‹±ºÓi#0 ¾ÑU…CqPM êjáëk+}`lbhß%°kz`µÄÈTëmGê‹°ÚGYT íØlkÿ¯i¶DÕ÷é9#§ÿ°•¢ß€¦ýEB¢å¾G‡š¸Ž¼{VRÞVå=ßT›ÒÍRåÍA4ÆÑDs`‰LXD.&¯%Ũ¬°U`ÅõÅ¡”¡#E|‚¢iÚ¶úÙS¨Kyæ$ê;C)£Æi[×õ;¾©SgÙ×”‰Ä$e̵PUÕ[V”7¿‹_O bû¨±}d~®þýÞºW—@`2b¬Ñ˜¼Q߯Ãöå¥Dp+ ,,YQn/Ó’e0š©;‹‹Woœ¥mß@tÑÂXn¿[Μ+ê;ʡᲠO––4ýX5£°Ö:mí§–‡é§£²BÄÅÛUF2N?u €2(¹Ù(I× ÿ Î½ QU‰ªJ8Tº5K÷²–73þÔÉ@y&°ˆ\̾5›ž“e[8B¨3ç}ûÃ?@äÉâ¢F YT "¢Úô2ºn´'7j¯Dd´zËíBPŸ/ðñun™ý>>Ù‰wÖ]Xnž_{â(ª«à€Ê ýÀnøùhÚkIDÅ ý ,”X!­ j²¡Ñª)8¸Ñ@uê,ýäQY\ä¸K ;Š€À«Žk KÚ´¡,* _8«ÿ°O?}€2ÚaOFc9duê7ˆl^“M…Û˶T³¼L´–Àbwïa[Bèéi‘;q !¹IJJЧ§à.Wl ,™q 5ÕPUÑ;€2úZck6(Š2hyî™~A?~€ÌL×vlnã‹èi§ey™ˆŽñýŒ#êõÓÔISÑ(aa×Òñvêq öùõo}ÿû/¾ÿýeìH‰ê*X|šæþDhüüQYÊ X­µÏý¦öˬ ç··U`…´R…nT6IÇ&‚» &™/Uµ,ø¹ˆl[j²+«Gµ”oöìÜÙê`#Àºþ3ýô1(Šã•Ž;* W»Šmaëm°¼m a·øbô#Â&´7ÑLG`Íq4‘œc¹ÉäÉ“==7‘öVÚH)ƒDp||›Ž+ƒ¯ÑÖîÑÏÖ¡áÊ5#µëdµÃ–vuuu¯ýY–—ù<ùæØ!ÆžƒF%÷ê&q´çªÔñõCûˆèÞ>D¶‘Ñ12ã’­«®€~ñœÜ¹êìù¢W¤}¤ÌH×îÑ1²¬“XÍ\(ââ-óîlëÛë2êõÓô#e^ö„’Ö«ÒŒ–èg´S qÜ“ÑÞÏK…8&³\N‡JÔl²§3tï(Íé&_Œ¡ë€)š¸{sÍ„q4ÑG`É9&°ˆ\¬a á¥4 †ê´›EDC®D$]@f¤ËŒt²¤ØºæCýÂY¨*¬VX,ä•"YT@ß—¢¥lÁ!>‹~go$ÓNPFŽuç[ë†Ä€A""R¶ÔÔÉžÀ’õ}ÿn#Ÿ¥\3Â1¥Ÿ=¡Ø#BBQU EW6¾s‹XÍ_(Ûþ¾ºŠ¯¯å®ëÞ\¡؃· Ù©V”ë™—E`‘Àòyô Y\¤Ú/\Ýͪ>ie¯ì" }Ü[#›yDædš ,""""j;&°ˆ\ª²µ5ðõE]Qï£ @<Ýq”èa¹ínY^ ]‡¯¶éKýØ!Ð4™—c4b·Wrißnƒ®Ë’+²¨ÐÖHJYY!ó/^Jõ¦¹2#] Ùüùh[,™“e±·Ä’™éÛÐÔIfg0ʯDH(„h|¯FŒìOy9ÔÕB:«Àê>D\¼2hˆ~æ„~æ„2vBÓÚ‘ƒÚúÏEd4jjh4ÒRë7h¸Op,X­Î`¹„ññ,ãBj`kâîéi‘;±¹‰—¬g6²N"2ÚXã&zEª7̵ñ–ƒÊu“Ôi³Õ·¨“§;¶r—Ùõšê+¹l«eRZ¨®‚¦ÁÏ¿ém»Z7Œ£2úZuîÊÀÁÍžµ%°r³ôô󱘞™î8Ræd6< ie BF‰–Qu%3Óµo·Ùv!ìÞ ,Ê5Ãè§Ž7ºº€,̇ÃRÍf!ÂzÁ X!¡hc–½‰{—N¨%U•²mÝñ]¥~1º­‰{ÏÏ`ysÍ„q4ÑG`É9&°ÈM̽žY?uÌXîg¬á".€zËí­ï¦(ÊäéDÿpH`5¤«êÙ'ÊÊ ´¼T­Kõ¸8 ,=í jkEToeðPPU!³3íÉAÔÖØ{–£ Üú ¬ÊrzæeíÛm¶"¯¦MÜ»1d8ýÜ)hZ3§kªF:ÝÓgáÓ>¿Yfûv#!ØžXÉkh»¶Ê¬Ëî|Å÷ÅèB¦I`ysÍ„q4ÑG`É9&°ˆ\@^:¯­ÿ ö ¬ð^"6^IºF6ª-—«ã'*ÃǨÓn gÛê€l¹°~`ߨî¨2_ IDATJ¡í‚Ê ö~X䄈ˆ‚¢‰*‘˜¤$‘ʈ±¢W$êje^Ž1Læd]õÛpª¨DP0„åRf\²ßM{ ±Ø."A· ­×ûøZîú…­õUv¦ñk™‘ S'Ý!”¦ÆÍ[kNWQU??uê,ËÌyÊØ >¿YfùÙFç&Y¿ŠÐX?h_Ë)Ú°„ª ÿè:ª«d¦CéM·¯ÀBý*Bëêw­ÿx»ñ¹ê*ûÃnÑd­mXÒaå û7§ÓwlB]­½½uµúXÌ`y&°ÈMJJJ<=….¤g] ­ÿLO¿@„÷R_c,^k+UA!"4 5Õ²¸Œb®„ê¤©Š±kaq}–±ó'*°zbÕYó|Ÿ~^9Ïñ#f$°ìm°ôœ,Ê[O÷6%°ìæç6,?Bô„Ê¸Š‘ãÕÉÓa±è'ŽÊFýÑ*°à¼Ë-Dp„åeÎëmOº'eýÇÛÖ¼­mùZÛ±Y;°€›+°z⣫˜f ¡7ÑLG`Íq4‘œc‹Ü$==½õA=DÝ+ÿOÝŠçen¶ñTkúdQ¡Ì¸_?Ó§õ=ìšctÎÒ÷ï–åe²¬ª*BÃÔYóŒÊ {W,[,O$Jzb•ác{·D|}½€šyö$‘8X„…@p›XF,ýìIH)bû (APzÀ÷ÕK…êœÛ”þƒÈŒKާdu51`2b¬ˆŽõÈô®¢ª„®ÛVζÀÝ ¬ÚýÔ1ýÄQmÇfmË×F71™ŸëΜJOübtÓ$°¼9ˆfÂ8šƒhŒ£ 0ˆä\×ö.!²9r¤§§à"•² €,È1qŒÎÍ"#¥Œ¹VôŠTFƒ¯_‡_M6[ÄôѶo4šéˆðû)Ñ+BfgÊâ"áëgëÕ–ªu_A"4L––h{wé'Ž" Ðòó_ÁÇ×X­ÙVÁ!°g0û&(£Æ÷¬6Þ¢oòòÅ«ŽKý<0¡ˆ™—-ËJEl‹95Ç\†š¸ËKç(ÉÃÔslG._Ò/œ•y9nK`y³úXDDDDäEzÀR"±Öi{v4:¦7¬¼*%úôS®ýqg²W`±(£ÆYîü¹mb/‡VxmÏŽºÿ{ɃXf"bãè{vP|£ˆhw¿'uÒTøø¹ŸEQgÍsù<»Ž±Ç¥ž‘î˜þ1v!þþžšU3BÂÀéF„޹ 7TcÉôóDÿĆC½cÈüž”Áì¹ê—2…EDDDäE˜À"7IIIñôœÑ¶|­ü®ÑA™Ÿ§íØì¸)™gK`¡ØÖ·[ffñý\5Ñ·¿2ö:4ªÀ  > ³3mõYž¨Àêæql£œÇHD*ƒwäÑ1êÍ??ÛºQ¿î”÷i™G"Â#PSݰ}ž”¨©†Mź”0*ÝÊœ&°{`uõ„t]O¿@$ ´½cÈü\í»]Χê*fúbl/ÓôÀòæ š ãh ¢90Ž&À ’sL`‘›Lž<ÙÓSh‘¼|IÛµÕúÅÇÚ–¯¯*EÉÏAU¥öí¶«_½„P–ËŠ29&›:O5~~¡˱ËhÂå‘ ¬îÇöjXæã+úèØMÔ‰7(ƒ‡*ñý:Ö¶ßSìqý®^EX[)áëÛ½ZÑ›B¶=ÕÅy ™›šjå¸[¥è @?~D[ÿ™¾kk×΀¹¾ÛEÖç(ݰV´«ymM†q4ÑG`ɹîô+ ‘GX묟­‚®ÐvlÖvc?cô3Òöìåe í ¬+ERædPâúºvR"$T½qÖUK{E*ã'•Y¶#ìÕ9ÆBJB",m(„zǽbðP—M˽Œ6Xzæeã©m ÂnVGf䉤ó%„Ž©ç.ÎkèÇý:´íØXY)µý»e)7î*R¯ÐóXDDDDÔvL`‘·Óöï–ù¹":F½åvòbšý”­!wm­¾c“íHi ª*$‚C`µÊÒ”•@´mV¯Ÿ¦ÔgX(CGZî¸W˜\ÿ\A@ Ë_Ô«ˆ¨ÞFÞJ Jnu°³û„†©7ÌpѤÜMÄÅ9™¶ç5U@÷[i«À*s2DwW–ÌÊÐvm…êø‰ŽÇEH¨íK20Ö:mÇæ.œ„w“õ‹D™À""""ò*L`‘›¤¦¦zz Í3O©7ÌP’‡¡þ7yýØ!8[iûwk;6k»¶j›¾„±VÈhø]\`4»q\Iä2ËU)*!{©W@ GÖ¬uÛ8v„ªª?ºA1V¹fDgoÕ£ÖÂ!Ž"¦ŒOu#P] þÝh B"8€,+ÑÓNëÇ¡®®é˜.é%¥ÌËÖ~¯íÚªíÚ*+Ê iÖ­‚¦©?¾Q$&5žgtŒ2|´Ï¯‡¢èß'+œeÜ:ÏT_ŒíaµìùûzmM†q4ÑG`ɹޮš!j§„„OO¡y2;€ˆ‹‘Ñðñ‘WŠeÉëŸøÄ'È¢(Š2|Œžúƒ¶åkû%JÿòJ±L¿ ‹Šl;£‡¸g¶¢w,,X­žZ?ØmãØ1FÙ²ÇQ‡ˆàY^&KŠExDw܂о„°äŠõý7¡ë–G+‰›î»|BýÈAëWÿBUeÑö)I×ÈÜ,­Îºµé%êµ?VF‡’4D?sRž9%ÖüºœÉ¾ÛÎ^mg‚ ,¯ ¢É0Ž&À šãh "9ǹIXX˜ko(ó²añF%T‡ÕÕÉÂ|(Šè E1q2#]Û¶ÕUÚ–õÐu­ÎžßÐLÝ⣠-bûh[×ÅF{,£BÄTUÄÄÉÌËéàŽ.ˆ#y„cELY~Zæd‰ð[Vw[Bè‹uµÆ3yù˲R™—-‚ClEdN–JÙ9ýøTUаpÑw€è¡Ÿ=%s³´ü\¡Þv7||š^¢Ô/*ƒ‡âÌIýÜ)¥+X^ûÅ(M”ÀòÚ š ãh ¢90Ž&À ’sL`QO¥mY¯ŸLU’‡ª7ÜÔt-Oɼlèºè‹/3ÒõCûèG¿ zÇŠðõæù.½"ÈâÂú%„nªÀ âúÊÌËìàN®"bû í´ÌÉÂ5#PÓ—B*¯ÏdF:ý‡}Úæ¯D¿>ÿùœ6q—…ù¨­}Ú³Ó‚”òây–‡‹ÈhêÔʺþO^¾¨Œû‘2°qýW#Êà¡ ÏêX3S‹ˆˆˆˆÚŽ=°¨'ÐuÔÖ8eúéãR?}ÂúÕ¿:|cûúAã©í®¶ßDL\³•_²¨Æ…n«À”¡#•1×)CG¹íÉÜDlòÂ9m×Výd*ºß.„à#–QߢNæd_°Nz`ÉìLý‡}íz5Y'+ÊDh˜‘½€€@Ÿ_.TFŽ³Ì¹­ÕËEtŒë%ËËŒï0äZÿ?{oçÈUžû?çTIê}Ÿµgóì¶g¼o3Þ±±!CÈ%$„ß/$!|¹ ÷&@nœK€$›n€„};ÆØàeð:xÛcÏŒ§g¦{zº§{z_ÔÚ«êœsÿ8U¥’ZRKj©—êóýø©tt¤·Õêzô¼Ï늕JÀR( …B¡XQT^Àzå•W>ô¡µ´´\_;“YT|Š¥ÉÁƒ˸{òQó‹güÍŸ[Ý罞>Æè¶]Ð416ŒDÜUS@QQ˜Ê Xï{ßûV¯^ý«_ý*ß"“Šo@±4Ù·o_îË{ŸX”=ñˆ>Ë’ç“.üåЫ÷“uàÜzìAãoÿÂüçO—º+><€¬uXk×Ë~í-ï°§þ­Ê-`‘Æ&‚"‘B °äZ®ªFÞ:*–Þ:Ê8dýíú[µëo¥Ûæh‘[›@ÓÈæ­Dßi1>"o‘.§!îbøâ1[›+ÞÛ €f X¥ §šòÃ/ÙrZCÕѨ"úUG Š¨(Lå3°Ž;Vñ5~EDf؇ô»3ç­ìÅ_Á2éÎóù™ÓbbLÄ"¤¾õE1rŽÔ7Ò]Šž“l Ÿ¿ü<ž*yÒå´"TCZÛ`YÚUûèºNÔÖ‘Ukrß“ÒÖ!FÎaaíW EåѤ}iiÓßûC‹½›ÜȘ9²j =o;;ÓÃ_~ÞÕ¾ÅÐ.º¬ ëþÊótÏ%E>œãÀ*3\ݽ‡4·Š‘!~ª‹î<ßúù}âT—þÁ¦{g?èô$iiËw«ÂÅ­//Q¿bÝÇž}R»þÖÙ±† …B¡P(Š¥ÊÀR,&¢¯‡zNÆ¥gÃñ ºïºq‹©œJ±ƒ[÷}½é6hÙ°€Ýd%5ŠéI$⤡‘4¦¬ÈÚNzñ ”lÙFÖ¬“Δœvgâ`)Õ@»åNý}\²ê²e;½ø zùÕtûnüÔq… ¬¬wï=“ )móS]b&\Ìc‰XD„§PS›·ƒ¸4^s=~ðq~ò þêK"±¾ñ%Ùtì»»D,€Ÿ<Î.ÿáV¼Ü ,15@ŽŽU( …B¡P,;AÀZ»vm X·nÝoýÖouuU1D±¤ÈÙÏ,z{X÷ÿP¦Øxá'މ™0Y³žnÛ)“hø‹¿2þþ“ì÷ƒsí–;´kn@6nÎX0<íY‚Û)9yçdÍ&#ë:é¥EÅK¹N ¯þå{T_º?Ȫ#Ý{)4m±6S tëý7Þ¯]{#Ù²tn´¯¼ðâÜ ¬¾s^äìgæ}=JZ?ø:’ ïMBfÐì¹Ù²29•"·èïýÿ´›ï‡‘öUÞL崀Źõ“ï°'.°%iÜ ë2,zÉ•ù&f‘nZI,Õ—î–uµën’èî=¨­±ˆùåÔ{ÞW¾eú‰óŽ@Ѩ:úUDEaZÀúéOºÿþššš 6|ô£½çž{þâ/þ¢˜;Î_H¹çž{¼í‘#GÂát‡ˆ÷&ïåp8|äÈ‘œ7©t…D\ ŸšNÚ:Ĺó?¿Øó­ÿ`Og±ÇÈÀfºq‹!Ó­í|øÙ©ôéGxffjóvºmiëÐýòKÀ˜õÃoð×q'ú=ø“‰Ïÿo~â˜wÒ•hió>‹_½‘vÎñ,œB#\öµP+¨–Ï tÏ¥V]²v½vñÄ@_èÅÇå­ÛR}O>m}í_E4‡'Þ8 €^½Ár» ì¡ÿµWà(Ôó|ôª}‰?üó¡koÖßõÛ¤¡Q{ë»X<€x ñ˜ñØCY?ú6|Εd–K-e¯Á®øD4À¨íÀzî©'ñY¨Ô jµ‚ZA­ VP+,÷î¹çžœB ª©ÞBæ^|dddÛ¶mÑè~þb–R,;x×QëÛ_%[¶éï~¿õõã£òz²aSàýhüý_Aˆà_ý½Ìå1¿òÄ@Ÿþ{¢Ûvå\=þ0ûåϵoÓn¸ÍúÁ×ø ÛŽø³¿&­mÆg>ŽxL»õ­ÚM·»w1ÿþ¯ÄL8ðßÿª@¬rÄô”ù¹¿ ¿ý7è›Ôw ÅÂÁžyœýòçÁ¿þA"n|öâo×ý üãC_$B [¶~ÿ#æ—ÿQ ôþÿ?aç]Gõw¾—^~uáÅ­|ƒyEÿ÷Ó‹¯¨øÎ­¯‰wwioy¦'ÙóO“æoãsàÏþ—Ôâ[Ÿýþ€‹¶ÖüÎm­…BLM"$ ¢¿×ü·€@0xÏçXßþ*½âzþÞ…Ø´B¡P( ÅŠ¡zÎ"‡¸+Yjåà•u%rÎݲ´´êüˆvãmÚõ·’¶v1Ðoþçÿcdíz7UšnÙF/¿:Ÿz€4·ãæ~‘Ÿxõ 2ÜJôCˆÇØÿ+=3aÔÔ–}ºHš[ €•ÕB8»ŽŠåÈr¯£vå5tã;£ª¶ŽnÝ Îw%º·¦ú‰á¶ ¨©gzÄÙ>1:€¬]Ovœ€Ÿš;xQLV¨…0ôêýø ϰCÏ‚RýwþÐÐ)PRár/bÙßB(F‡Íüóï>‰TÊÀ`0R‚÷¶¾÷ŸnG碰b‹è3T}€*¢?PuôªˆŠÂ,²€õ£ýèºë®[Ü=(†þþþ¬køé“pÕ“úFíÍoÓn¿Kÿ?B FΠ›¶ºÓ /ÖïxG¡hiÀO}¤©9ðJ/ºï?Í»OÈC„'»×Np_»¾üœfBèö]¤s£Œ×Y!Ì®£b9²ìëXS«Ýy·û/zþ$OmMõ[{¡v嵬Ÿþ†AZZQ[GwìÀ{N¸ñXù°3°:ª#`í¼€44Š© XÝs Y³^»î&ÔÔJ_XIÖ²/b¹ˆYò)c…CgÅäDúúhTLM çÖ}¿Øtÿ*°b‹è3T}€*¢?PuôªˆŠÂ,¨€uË-·üä'?6M³··÷3Ÿù̧>õ©Ï~ö³ ¹ÅÂ#z»Ù¯žØÓÚì½’=tŸ< =@7Ÿç½žt¬Ön´»üˆç&²q jj < ij #NèåW“öUreÑwZ8V†Kú¿Öo,ûyÐß÷ÁÀ‡>FÖuÎg‘åÅÞ½ªÝÆø ŽÞ÷Ù½„lOôîLö˜êØJ¯¹š&†!{¤}ikG<Æš"b¤’¨­óN‡¨$šF/¹‘Íô²«´7¿UêõR»/’Š‘Ÿ8f|ú/­oýÛü—Z0\rN?sÚ¾pn@&¸ÛÄ¢bð,ƒØâ™°|ðNT@ÕѨ"úUG Š¨(Lå,opWVˆ×'>ñ‰ï}ï{{öì©««Û¿WW×Áƒ/»ì²ŠïA±$`Ìþÿ'f?ÿ/öÌùO11f}ýKìÙ'¡ëú{?à6 ºhûo!«Ö ÖœÈB ÝyÒ¹ €¶g"n;°ÄÐ ;ø²óüÒŸ˜B¡XZæVsUgH­Öt’„ÂÍëIs+Ýs)‚!íö»ôw¿_F/¿€õãoKLj̈³}ÙkUÓ~ålã*ô‹ÉêuhW_/‡Ÿ–:ˆpþˆ© Äcr$ër!íÀšKÁ}¶€%ε[ƒ!ÈòsghW\ Mý½Þ¯7 …B¡P(K½â+øƒòæ›o¾ùæ›+þˆŠ¥ ?ò ›éÆ-¼ï41Љ¸ùåD"ŽºzýÝï“JS6š¦Ýõnö“ï–‚é¼YC¨­“+“ ›å:¤s“8ÓË"õ"A,BX?ü,“¾iÝ¡,…ÂLßù;ñï}c³1ØÚÈAh·Ü¡Ý~—WÚÖn¼ ©${ú€õ“杻ñQ²~CàþÜ»Ž˜GÕ°$dõ:²q³k5u®\JÅø(ƒ¦Í÷1ƒЋøˆFˆÈ LÀ|wApÿÌ(¬_‰é)1= B „@*€vnâ½§HÙ¶“Ž óS]¼ë½ìMÕß»B¡P( …¢|9KácDxšýð›üµC°,Ès‰È {òQ$âdóÖàŸ~2·z [wjoûõRQvÒçË8dt³íá"{.ãÀã£bl„46éž E‘xg©*–/þ«£ÙÔúÕÕ¿ýHó 'kÏ“i_åU¯$Úíwéwÿ&jjÅè08ƒgE,â=@Œ £Ê,ú»~;»õ8$­í`LLŒ¹H"²çžÃEu#Šh„Hgœ/yŠ q—XtÛ.hš3a¤s#‹òsgõåB~üõ*ï:7þ{'®LT}€*¢?PuôªˆŠÂ(KQ5¢‹XüȽ‚=ö {þi¢¿í×QW_øÞô‚‹J}@záÅdóVº÷Òô5{/Ó®¿U»þVíªë `0MÙ,C6nY.vƒRùŸÝßýðÙ/¼6^B˜NñìÛ·¯Ë*ÿÕQpBŸlºöÙ†+xA]ƒ^qMà#×ßù^ºu„'{oåÇ ›ÎËsïÊ »¤³¯\³{æ—"2SÌ"ùŠ(böÄ#bx°¨­8µ¬Â…¶=V[wÕk!„Ðnz › Á‰8il"MÍd÷^»»Ü¶÷…ÄïÄ•‰ª£PEôªŽ>@QQ%`)ª…ˆ„;n—ž·ùyX½ø ²~C5Q»åŽÀ?*¿N—uÚíwi·ßEÖ¬'uuDÜÎî­Ò–‰@تD¬ÔboD¡X8æÌóöBššéåW“ /ÀO¼‘^ddHŒ ®žnÝYñν«5ëðW^d÷ÿ`>ë°ÇB2Qdœ–íÀÄÄØ|t!)¬[¹ÈÔvÒ±Š¬ß€tnÒößBê!‡QöõÍ-¤± †á¾ …B¡P(Š¥Iå3°‹‚O›_ü;püøgŠÊ=©>iAmvÇÛÉQ{ò½jÿâl¨¾3aÄãâܲη' €>ç‘ …oð XEŠYtç àÝ]à\ö󣯠^ì¶!/$ôü=`{éYÞu”¿ú"½´œH&qn€¿ü<€bXik9:° UÚ°ZÚÉú 8¬éïz/(EC¤Rðúìä§C,‚Y=§ …B¡P(Š¥ƒr`ù1>‚D©¤Yì½8DfЫöÓm»Hç¦7ÖŸg›¡JŠf¯¤®€ˆE¸l!\¿qQ¶±ÂܪÆâGŽ©Æ²Šâ9:5ò‘Þ¯þ¯S?šûÐüø¯ŽeX¤­ƒt¬F".Ξ‘×ð#¯ {.©øöŠÚOç&íö»ô·¾€õÐ}ìé¼» ¦™ïøE4RÖ?”¾W^R€åÔBX\ˆûÔ$ÒÚF×oÔnº]ÜH}ƒ}³¦Ñ˯–IC#VkÇùñß;qe¢êèTýª£PETfIXuóÇÕ­ÄȹìlàEBDgè·½MZ±6mڴȪk€LEq¢Oy?UCPÀâUq`-~W<Ó©xªq,›W^ÿê( r^. ݱ›òÓ§´Í[ÅÔ¤AmÝ¢ô¦·té›èÑüë({äÐuý7?@wï™}¤·ˆbj‚y•}U ž%MÍÂ0‰™ð¿è’ X¶@¶[ XÉ’ C¨«'ë7hÎkUß(ÿŸ^tilʸ2¶-„þ{'®LT}€*¢?PuôªˆŠÂ(–_p¬ÑáÅ݈‘B*…@5µ2®¸¹y‘#R_€>_÷”°DU‰½Ž Kp|~-¢þ«c,dó6¢ÿ4œž;ºaÓ¢ôzÑÞþß´ëoÕ®¹´µÃ²òùjí" €|œ=ò€@Ѩ:úUDEa”Ë'xXE÷VéºJ¿½¬Ñ!ø:Á(` •U¿ìz€þ¬=ºùowüÆbï¥(8ŸÂÅ«eò €lÞ €÷Ÿçò—§l4[\HS³vû]ÐÖκáé|Gò#¯ˆ‘aíú[ØáC´ën¢7ÜJêÉÚõè=%†±óüB€æB ¦&ÅÔéX]ѧRа&Ööìt=ø‰Ï"Gm]úʆEs`ù’M·}µðý´Î IDAT~pav¢P( …Âg(Ë'x[w'62Á½a Xtû.·Y†^xñân¦ªÂ0Q• ,ÿ‘b¦]6C Î,³Ì‚‘¡e/`55“¶19.F†¤_i)X.¤©€˜É-`‰þ^ë'ß% ÉÙ¼U»ónûŽk×£°‹sP*"¤¡  ˜šãËBÀr³Û ôŠŠéIy#½ê•›¥,…B¡P(Š¥j!ô©¤˜ #@ ¦§ä|¥ÅE`‘Æ´ôàÁƒ‹· ›·Êyíö»|œàÎá8°xnãÄôØ'»ð§~QÞú‹UÇ'‡z¾Ùû±©ÊÏ(°l%hÙš˜`Äü~y/úû±â”çÀ@¶lÀûz¤úOÖ®«ìÆæin r9°ÄäDüë_‚eÂ0ØãЮڗ¾ãÚN°ÄÄéY;Á½¡‘t¬ &F+üªƒg aþƒ¦& e–+'2k1Zý÷Ntéôƒ³ÿ[ìMU ×qå ŠèT}€*¢¢0JÀòÒ~E:V“Uk!„ì’[ä-Ù-„î5ûöí˸¢b–m¼²ò8táñ–žþPwyë/VÄ^z®ñÀóSen»¼‘R ‰%·JæåÀZRïÇãSc;Ù™œÏ"¼xÛU&tÓV¢ç¤¥dõÚùl£Â4µ@.ù¹€‘"›Îƒ¦AÔ7Ð ÓÃÉšµ TŒäµJÄ­‡î§OBþ¢n_@Œ/+Ç¥YÇL{2°æ‚44`‘XKê¨(UG ŠèT}€*¢¢0JÀòŽ€µ†¬Y‡%ƒ%[UßB“d®€•[‘‰±$®-³Ã$I0ªL/3Ñ)SþXx,é­[>ž“û'^¸7øã_ŒÎkj²7óMŸâ-ÛðÇÀ9i_=0ŸmTÒØJEdf¶%&ÇhoÚG¯¸€vùÕÐ=™ éX ÆÄ@_ΕE"Óào¼€44ÙƒËEÀrj]DVQÖ":° …B¡P(Å£,? '’Ukd69ï>QÅKÄùÑWEßé9¶$X …STƒ;V­'Æ B7nO•ÀГLaV|e;}ùèA¶âFý“%MpÖüRÛ¼õ+­…°c5ݾ[*D2:j A)il‚"κELN míÚÍoA¨†^ymö]·îÀ{Næ^9O_nh”–˜«Ì¶KËY~Ö…ÇØS‹j!´§ª ¬*pvÌüÖcS¿ªÄA…B¡P(@ X~€ww ›Î£\ Bø‰£0ª%OðîÖ÷¿n}ÿk9nKÄ­~dÝÿÀnµ”2°V)ÇÅòL!Lð¡YVY'™‹UG¦¥¿/r^+K=¨Ê§Ü„Éw2¯žÇ%õ~d`˜wqË/ !ÚÝïA¨K,ÁÝFvΊÁ’,´u†Fý}¿OÚ:² Û¤€uBD#ìéìéî¬"‘HÙÐHZÚ i"< s¾Ÿb _~§R=Ü÷¼Je2dÁêê‹Z1@¨–…dbîƒ+Ê’z'Vƒp”½Ö“<=¼Ì¾2)ß×q% ŠèT}€*¢¢0JÀZöˆ™°D0HÏÛNZZÉÆ-0 ~âhåhz € ¢‘Ù™˜ç/ä/=+¦&UÖbap[×ÈçÀJr»pQ£œ°ÿŪ#¤¨¼ËÎÀšŸ´8XóRÜ–ÔûQ Xf.ÖSÃ=Ÿ?õðÏÞ˜s‘Œ÷‹IZÚô;Þ%èÀrsܳb°RIÄc¥Ë•ž·cöéÖ Tœ=c}÷?Ø#°G௼¾9@ÚW@C(%mBLŒÏsÃì±óM¬n­óéÎöPS =ìÎ ÂèOAYRïÄj +´|¾ (ß×q% ŠèT}€*¢¢0JÀZöˆSÇ!ݺS Ð‹.À_eŽ{MOŠÉ‰’Îó؃?eŠáAÂþþß»æŒÝä"úTÖba8,žÇÏ’öéYÄL.ОæMÜ4…fÁ1UÙ‘G–€%§‚æ—“BFò:°ŽÆÎv·¾|81GÏ2áö.ý…¡W\C·ï^ŠVSŽA„vÿ`k;É{ÏšZ²~#ý½ðOwy"€^½Ÿ^x±Ônì.ÂùÅ`ñÓ'yw—ýû¿jx¬<H pI=첋ðô)ëáŸÎksŠLdüò»J¡P( Å"£Ï}ˆbiÃO¼€îº@þ“î¹”=t?yœƒæ(…0ÿéÓ°ÌÀG>^ìÈ-Æø©.þêKbhÐ^cb,ûdÏIigºE, Je°ˆb!I9O¾ÂlVdÞ½B ÆxÊÎO1©ÊÀ²7&cšî‡ßár$Ë%`Éãœ7e/€Ry¡ôj¢½ó½%yvˆ–V »…P~@Úæx¢Ûv²>èÀï}Èüú¿ŠsˆÇdWHÆš:í]¿…@°„`þ Žªzð¹,D"HCSñk’†FX<o{4m^[T›nûª÷Ÿû/‹µ…B¡P(þA9°–9ŒÙX;m‹46‘¦fX¦O¥zìAöà½pZÆDd– À{LaÄð ,“=ñHÚf5+î×½‰zB5ë¼ Z8œB¬¨–âžçœßp¬¨UN§Ì¢Ôq"iN[¨üðD©žð2$E‚9ó%yøÑ–ÔûѰrW óÙ ½H-ƒ‚CÜ]HsK!CÓ"a;°fr8°Œú9FdÛ.ú;ÞC6o¥›·Aˆt¦{<µµ2ü ®€5Q¾€Ågû`¦º?]s&ÖIViSDä×-‰8q~êxù›+‘%õNT”ª£PEôªŽ>@QQ?|{¿Ò‘þê‹ö?"3H%Éêu¤Å3,¼µái19a`²Löä£èåW“uàvÿÍ Îû ýȼ ´JuL»æï­ýýý{÷î-òáe“ ÈoZñXå8°¥ŽSf 8'N©È ¬yf¢ÏÉcçNxóúó_Š9éfÖ<¬%õ~”dŒä°Šw`I(üÕ¯dg`e9°¦ÆLÔ¼/Ý|žvãmôÒ+!3Ý»»xÏ º÷RBf`ÕzhïP~–ì±‡ì‹ ÕB˜W©ŒF ±4–{™¿ö2ݽ§Ì͕Ȓz'VŠþG?è^~åT⻿œÞÞü£_+j"ä2Å—u\i¨"úUG Š¨(Œ°–ì§?äÇx¯qû%¤­CœéÁä8¶í„L¥ˆÉqöËŸÃ0ÈyÛíkŠt`èK¯ß±ZŒböÀuï ÷úzñåÞÕo¢…ÁdL+]ŸNöÄ֭⬜ ¬E©ã´³¬\Ç<áv&z¬¤eÝü1€›ÄÇõy{|<¬ò÷¼¤ÞŽÍ*‡!¥+NŠh!”,ÿ¹Š¥€59!Ò±É ÎUD= ½ùmò"ݾ›=ò€èî²o’S=iÎÑ«X<"£CöåHµXî…˜ŽW%ß9¿åÄHÅYU2°¾ÞûÜ!ýÅ-ÉÛqG¥ÖŒ0»…°–•Gï« 'Yß°,=0ß÷…kG2yå_EAþ¬Z9XȯÆz‘Z†F ütÎLš[IS³˜ ‹Ñ!²ÆŽ,2+cu¨«S“bj’´¶A¶åz¬¦f""á´RfbtÁ YµfîMŽ5µH&Pekî ,ùWŠ€Ehw¼ƒ=ÿŒèïå]GèE—Ïy/ÅœÈÍClW( …B¡Hã¿o«} ?~Äü÷±îý.ýλµÛïrÿ#kÖy$mð´ø¹,~ÒE/FÎÙ‡NÏåÀ OÉ8-1: M“]t÷hš˜™†™‘¨-,zÁÅÐ4zÕþù@QQÕB¸L0 Þ× B»ÇN*)@Öì?!³&[åÀsêB6l"MÚ­oE @ÚW‰ñQ1>FVÛæ/ù•;ih"ë6hûnž½Ò¾}ûæx,E%0…ãÀÊãN`N aJ”3…pÎ:Æõ­¨€EªèÀ²Ý=ee`}eæ^³~jïÙëþxÛK2û57Yöï:•Ì<&»b¨øûñTxü§£‡šiãïo»nî£3‘ ú9“Úewa1u÷:°|v¶L¶í!¼·Gô†¦Ë¡ÚM·íÛ{Yi u¬ ÆGE"€ÔÖf?PS‹3aÒ ¸QV©$Ls¶¾ÎLËHc“H&Dd†ÔÕ—¶½¢q­‡y°D,²j-Vr"Êœýõ•Â÷ŸŒ+DÀò}Wªˆþ@ÕѨ"* £XË~¦–I:7έ^¤¾Áq$@Ú•¦¡¦†x¬ÀR^íÜg¶ üŽZ¶¢ØÈS¦&hš=ëP±¸¢FÞs~ÝS’¢*-„F(Ï«"$açÍWÅUîÂçFûÌú)ãAd aŽG:°Š©»ãÀ"ð£ÝCþò'­íR„Òn~ Jg™n!Ì#`IíÉm!LQL¡ü(inüð|ùQqXN–÷œÿ99Øzl >5c&Ý+˰ ×±/fŸúr½’–¹ô¬¸i5œ’—¡ô¹ºt Y™Ýp)áf`U`ÿé)„ó˜œXñ÷£Á9H–±'@–Ç•7ß={¸,ß3Ó«ö>ú‰ÀŸÿuàO?øËO˯J-"inE "3bzY îò€¦xZË…3L°˜,ái!ôÞ·¤CÜŬNc¿¸(-+ ÒÒ 1䤸þ“QËoÉ,|_Ç•€*¢?PuôªˆŠÂ¨ ¬e€ˆFÄÈ‚Aºik‘wñ"”,ÒÖ!&ÇIK«vùÕ¤¾lÙÆ»Ž@A+_’Y½”ŠñQ16ÂA*ÉO€ü¬M›6¹yÅ|p›Ô¸G‘‘ñ؆°fÌ´AÆ &J§pãS€Ð,‹sæÈï82œšzÛÚK6Ôg'ýçƒé `•&¼œŽNò@JO4²Pœ‡b3Fª)‚:Î2½Q)f!Thn`º…prXÅ߆°ÊgRÉ–PMI÷¶Í*Ç‹Ãdwa®›²±[ Šk9\^Ö¶ôeçrÉE$„t¬Cƒâ옕…¦ÀñRÁ㢚SÀ° ¿Æ¨œ€%ÆFì`õô£e_°ÿ92$"3rÛ¤¡Ø_/³!-mbhP„§IgÕ?¶|ÿɸB2°|_Ç•€*¢?PuôªˆŠÂ(Ö2@œ=!èÆó iEÞ…´¯ ÆGÛE6n@:ÖÍ[µÛ.œ»…Ð4‘L@×Q3ëµñdîX½{NÝû‡ãŸþfï ³o²uÉ\*•(±…Pócˆ{>Ê("i_ €Ÿx©™åÀ’XN|UÚ•3HÑK"ÓDm‚AÇU±Bö؃Ȍ{K X™GòS]îeÒ8–üp\A„¾ÿd´¬ÅÞFµñ}Wªˆþ@ÕѨ"* £XËùm9Ù¸¹„û¬^@ŒÀ9÷Ю»‰^°—´´»‡Ès~ì5íº›Pßãq£ò{ìÆœa+dm§ý½ D»þV²fYµÆJ¨X,Ü\$o*¹Ì>7…a)h§ Ü¢å8° 3Á¼V²£&Ç2©¦¹¹æs2J€j†áB7– †æ¾[Ñ8S/EÑO0:t¡Xƒ©3ñ‰KÑ € ŽY-on ¡YY–¨|¤}Ù¸ã/'ŒØv´Ï> Nã¦X./x®„~ùdyò"÷†¸ûþt¹\ìùrFmž ,û[T†£qÏåÀ²Ü›Zà$!V,ÄsÞÝÅO§»÷¤¯K;°2*-ºÓæáÀ’aöX¨A„þFkb»B¡P( E%`-„Œ¤Ý¸¥ø»GÀ²,$Ð4²~éÜè=†ž¿—¬ëCƒæ7¾øƒæØ$¿BÏs@֮ǑWÐí»µÛ~­ø½)ªJÚå°d<¶ÉYÔJAƒ–ªcµÑ|9ëO ÷œIŒ_ѲåÂÖ59(À”HŸµFŒdÎc¤›&ž9Ñb&•jzC ˜u|ÄL ,j ˜ ËhÎ#`}©ç©.ýKù%¿wÞ5ÅïÙÅ9§¹zs· èÐD°U´N¡÷œi›5¤ŸËB†c8¬ù4ý¥7ìT–UB«®élʈç<@:þfD)¤€KÊÈ7RÓ»ˆ·…P-çî¾Ìþá¤Ûvfß\S‹P©qoîÕœXvÿ Ô}›€Š…¸‹±a¤Rüµ—½Vî ,Óägz@ݺƒ÷œ,?ÄÝÉÀ ’å{Ä é!T( …B± ¨Â%ç|P X%8°Hcj눋‘!¤¾!‡‹ª¦VÿÝ‘æVqî¬ÔȲ°°óXkl³½æ†b¶tðàÁ¢·¯(Käq—ñØ&XœBf=¦åöï<yõ¹Æ/NŸÎyká:FiD>€ˆ•{ ´†e9°ìúxôŸþçð—f/'÷A×$X^ÛÑ3ê'‡¬‰|äÄÓ‘W‚º”à&€€Ð×è­Æ¹#`Œh¯ì¸“JÍÀúø©ïøìžÍx{ºó%­yL!œ]ǧ†{>ê᎕· »™i+€¥¢4W3µMpÖ¬þP™fU\–@e a‘›^æ”ñK•lجÝ~—ülٖ〦üÜY»PJºù,·^î´kʺÿìéò?+bŽa.ägï:’¶ƒåÉÀâ½Ý°L²~£vç;AȼBÜíþú…°|ÿɸBZ}_Ç•€*¢?PuôªˆŠÂ(k©#ÆFJ‘ÖvR_ÚŸã²U„÷õÈÙ!€44Ê¡„üLOƃž`Oà‡yg9ÉA„¤c5Ýy~1ûÙ·o_Ñ{W”s¼*«¡8¬O¨áõD#fÅ»®c* 'šD­Ü,é©IñŒG?•Àjc“Élù#%Â5ÊuI+¯€• 1ÒÂÙsc}_êyê±s' ìÙíµ´JñÈýël¬é0£9ã…€åîb¤[K“œÂ5#VmätlÔ{¥«¸Í–{Šgv_‹öu·¾üJ¢ÐkU·Ÿ1Êr XœšRz¶€å}³ÕIûÉ“ ÝBèûóe :¿TIk;ë›_a¿ü9Ò±@>ùÉúοŸøöÔcéw Ýu!„à/=Ëy@þg}ãËHæÅ+ èÃà]é™D93°DÏ tÇn²v==ï|XSDÀòý'ã 1`ù¾Ž+UD êèT…QÖR§œ,nÖIo7R—[À@¶l ú2ì6ü×Ù#ðc‡ášä¸cKB5ôšës&d) –v`¥Ï¤ËK0@ƒh 4+§þa¡ÜyyV0 Áhe¹XRMssÍ%çȰ¼pdz(ëp“1” @’åÍžOêRÀJðR¸çõæƒÏÄ^+°gîû•žg"f¡(}0 [aÒiÅ hHôlÒ$¹eÇ9qXž[§àš À dG¼'=¢UjV2šüÑË´[‰j!œúûíêëÁ¹8Ó€¬íD¾BÎyßibh@ Ÿƒ£vÐßÿ|\»ù-Úõ·j×ßJ:V‹sæ·þ ¥K®öÀD€¿örú‘s:°ûÍÛh7Ý>Ÿ ,ÒØ JEd&+<^Q|eX …B¡P(%`-uä÷Ï%`IÖi ¯ Οû¼ÿ´÷ÔBFüÒó÷j×ßJ·ïÊsOB7oÕ.»ªÔ)ªŠÛ¼&ˆÛh&¤fd +) 5$D˜"¢F‰ÁBYíiS©$4F¬@½¨ Ý^9  @JdH‘ZÛdÔÉ:Ü’ãí¸¦±€dþär3`Òô“J Ž3K2žŒ;Û=“n3ô8°JxÊrÿÚBu¸nzWc4_ aúúCµ7?=’ÈÛZeq.tÀÉp‚¸,^ŠÈhpþàÀ±Ç‡zò ë^ÖlJx2°â¢€Åƒ©¸™QzÓó›'9K/-„ bNœ“•¾¬(‡šZí×~^t¹üY»„ ›­=‰¡AiªçĹ³Èú î­dÕí–;e¯¢þ“æVÑwš|¼´Í)1: M¥üÔq~ô°T”<-„žKrnçdýF™cU&”’¦f±0ƒýÍ q`) …B¡X”€µÔ‘”SωA‘H ±(dV¾Ã›Hû*¤RîÙKÛw³vû]dóÖ|÷Õîx;Šž§ú™½L&ãŸ:uÿ?œúEÅWN»rœØ „eë ,%R–0cæ°8e˜ÕçR ŽÃñͨ­A@‚çB¸“gdx¬ÞÈ$Ú?{ƒÖhÖ]ää>*¨ •§…0nš"`0iúq¥+¥¥›Úî?÷êoýÇè#é-¥;òJi!&€ 4C„fÊUdˆ»Èr`×åjOBŠS©ü‘^“){ÛQ=c ›(«…°wfâÁšû¤ýHþsvM˜È|õJ‚9¹õ ’£…Ðâšýš Ä2žN*Õýj¸:¬‘¿uÔ>R€¶’XÕû¥ªÝr4 in!u BN³õÂÏtË br\„§QSKÚWå\4·hw¿{üa{¢Ó„™{&©< ÎÉÚNºm³¾ÿ5ë_‡£[m0†ö‡Ÿ—[üäq$¤©¹Ô^û|uˆé•Å÷ŸŒ²X¾Gú¾Ž+UD êèT…QÖÒF;…}mg©wµ,ºN/{S¡#·l`}ç«Æ§ÿRfØçms<ÄêuÅïGõ3{™4ƒ­ÇÎ4”˜]î OŽ€å¶e™‚¥`¨¥AÊt‘œ,™•§=­@ÇRA«®†„$EŽÅ] éSÖÃSˆ0¥eŸßÜ@A©Ð$yîsÝÁ¸-‹0O¶—edc£½I`Ò´;L8çV%uMÂ"0 DÄLŽðg‘ µ%íÀr^Õ°óÊ'g5͹L¥lQ/Êèæªc%µö'¦€rƒs䪣%_+-Oãç\¸ƒs6!ÎxFRžK„ÏF§?|ö Öóu&/,`9?ÆsEìÛ!îÒUâæ—)Õû¥JÚWÑ˯€Æf44öw!¶²W„ IDAT^d:`ë…t݆íätÇùôâ+`ü…ì¿Jù©ãìåçrÞ‹Ëú ›õ÷ü®œu+†øéSûúÛ~sw¢çöé'옭€¬ß˜s2 ›Îƒka®&¾ÿd”oFßÇÒù¾Ž+UD êèT…QÖ’FLŒÁ4HK+jjK½/im‡®Ðï¼»ðŸõtóVb& ÎE×1¤’ˆEä›?¨˜?†l„É3p>ðt ¡}æï¶e1 [À i<ˆ<1UÜq/9­f܈¨áuu4¯€å™VOê€ÑÝ’õ<óTÇrXºÀѳf3œ´U¦™ÿvú™?úÜçN=l¦Üè÷`h+Ý‘W‚dÀ¢”D¤H»AæS€é}.f [œJæy:¦LÇ0†ãiùÀM7³ò¸är2”´ûcyR·¤Åô²Xö«gj9¬ˆÇë7jÌLI«6¯`x|dælËy²¬jö‘`K(¥xé¹Ñnº]~ È4tñøæq~ø%ÞÛ €nÝ!¯#sˆGt×dÜ»~äþÌã9Ó¦¤FF7nFM­¶ÿè1=%ú{f¢Ã˜¨ãqdÃf8_ºÒ­Êyw»9G:¤¢ T–B¡P(Š ¢¬%Œ»f}9w¦”´¯¢{/¥Wí/| Ùºƒ^µ_Æ“ú× Hgÿfï ßì}aá×à € ¬ü1ryànú’äz|˜`Ò÷T¯uËÙB¨j!,À‹¨õµZ@¹XŽ^c"-` iç\T»UKÖ Í:ϼ‹ qרl!¹-K£)[âºfQ0b$æ:¡†œ¨©X €é‘ŰÌRd)`ÕÐ K¾˜Ò'h†ÚÂÜBG# ;¯¼é1}»÷Å/õ<5š°Ÿˆ+rèzC»Er.S’—qf 1+€E-\ŸÛõØÐÉûú_Ofı»ã/­\+D<:aEì§&£Ù<Ï"GÀ™³¬™_é“Èêi”êt¹¦fíêëIS3Y½ž0uÖcY?þ6’ ÒÒJ.¸È>~. MD$ÃNÓà]ÇÄô$íPÖáüäq~ò ƒdÛ. ”¬Z !øÑWÔŠT›@¯½Ñ8(ûþ*éÜ]#Cå OT¸ØX‹½ …B¡P(þ@ X‹ ?ñ†ùÿžýìÇ9o#ç ctË‚îÞ£ßý›sFZÛõ»Þ­ÝxáÝ'ì«°TÂáðÜ-,)n=×xà¹ÆFé³±æ‰åœ'ó„¿” ó؈d¿žÛ{ÅÀ˜ãÒE@<×D?)ñ<íiê8ÃbI}=­`æŠw}4®´4™ŒÇFÀéu«¶Õ§ÚœŽeXLXˆÐtèŒ1šE €!Læ4*ºþ,3À)·änÓeI™èÒ¯TK‚(ˆš)8~.ž95Ïíõs}mËVм-„ÏëϾÞ|°+l§€Í°ô™s_"Gê<+å¬pZØ…‹›rÕÑ~­(wCÓòñ³ÔGë~öÆtFܾëÀrã̼D­´ªiý“OÄÛ˜Ã^GÖÜ-„À k!¬ö/Uí†7£¦–lß €wŸp¯Ý]´›ß¢ÿÞSG3š³}Ïh›)`ñoÀH`O%£ÃH¥ÄÈ{à‡´[î$Mö$\Ù´.s!¬5Gˆ†Frþ^g° ë¤s„àå®,ÁOÆÊbg`ùý=éû:®Týª£PETF X‹ ï:"†y×Ñœ·Ú¬Ò°$ڛ߆PM‘“¦fÒ¹¦Á^zU°úûû+»àüIYN>ô\ÝI•hGf*T‚zå ™q·¤8UCšÐ¤ræIÙX¹ÕœuŒˆ(€f­¡Q—–­YÌm!,¥ÍS¾&âÜD®:r§"Ó©ÄúºB£ÜäÓ‰gj¯ÜÓ59žŒ62¤„8K!bEÀˆk1ùÔ¤˜e æ%—˹8—?Î q_ASè—j(D6l}§ùéSôü½âTºm§ýªÑßñž¢Ö©©E €T F ÁèïSüÄ1¢]+{ê1và!ÛlE)íÒ«èþ[¼‹²™1 ^Ó ¯Yüäß•‘Y²a14PÙe³X‚ŸŒ•ÅÉÀòù{Ò÷u\ ¨"úUG Š¨(Œ°16"¦'€s “æÖŒ›S)15 =@:V/Ì~èE—±_=DUp`-A\kÒœñ:Çtä¡Ô\¾’Rñ:°¤•É`–|£3p)‘Ôh[ â&€ÉdügCGêiè×7_Âa'•‘•Ôâ:‚ÍX¶G ŽgJf$¹)ÝÒe 1^ß`Ûn”hðEILÁhЂDGþbÅh:’‰…â˜fp'&šE $¦]µp:Úá<_VÓÔRŒ)ÕêAÞ~Li4c)×Ü䶺 ŽW“µ›q¬dqžP—l† êéËsrÍyÑ5JqK¾&yL®5cÍáÀ’?Eɬij™ñTü¼Æ KÚÓj­‰Àˆˆ&RîFfqÍ>,—ËB8Wˆ»ÌÀR!îU€nßÍúNóב†F~긼¦ŒuHc“˜œàÝ'Ø“ŠAûûU²é<í–;ùÑÃblDŒ TüØ= ²ïžéÀ !õ  TšÅ* i[@†B*ÊFe`) …B¡¨ ª…p1á'ßHÿ#œ=›IŒ@²jõlgV• í«ü?Hç&¤­}atq£¯>Ëtt«CèÊÃ뜒¦C¸]{LŠuZ@æI™ÂÐz®ñÀã_HY¦L*^q1õ€Õ5ÁÜ™g'{ĤoÈídÔðòøYLêñæó[WÐDzW.ŒsTîÙÊÓB˜Òã¨ìà$¦B³Åš0ìiÄ›4mAǘ¯#ÏÒR"KÀ²ÔkAèâ"WpÉÌÀâiË~ˆ„ëÀrž¬Å¹”Ò"İH¨ã,’VÒ¬¢[ûf¦Ý0©x®Ñ“ðX‘¹,hf½ Ò–EŒ€içµuIr@#kÀôTRØ?)fy­UYê¤WR´æÌÀv`©óåJB·ïÀ¼j~åÿð7^@v”#`¡±å1غzº{i_E/ºš¦½åíòíêý¨­›­^AŽ b&&HȽ\q䇠˜šÈrô‰™°˜œ€µÐ_{,SVH ¡B¡P(Š…A X‹‰ìŰÿ"Oeßž‚ü“}!­m~”^µ¿â{ðàÁÊ.8ܬ%³”inÁt3°òŒ„+¯÷Göë¥Ç “Ÿ=°Ûñ€3pÝà€àOÀ*PGJXWÛØÈ°,‘îIt{Ĥ7j,Ð`¶È+u¢a– G¶jÐ$o ¡Å¹Š%ZÜ+¹fºVœÄLòtþNØr,7=Ï9ÓSâ<£RRîi”,pdöÓÁìM)á(8î ·Ü­ÚK‘$€f4f/èf`-2öÅÓˆIn"W…ãV‹š…,‹sù3–Ì P“²šnÕÀ‰Ùò’à€4€S¡›QaÊLnyÛ³μ¹W9º ³ö/§mz…œ-/Ø/U²a3½üjzþ^ÒÒ €t¬./mJÆ`ñÞnú­oÕß÷ÁÀÿ+íšëÐ .¢[w Ô®»)ÿý YµÀT³Ö£uU¬u¨uõ0 x¯¶þõÌüûû§ÔÜS; ³?+Ë q÷}Wªˆþ@ÕѨ"* £ZÎyÿiôü‹øk‡Äô,kfijÉqߪ¢ëú]ï®øªûöí«øšóÄJÌJ÷ñ͉k2ª¸KJT„éB³LÁá‘ç8±¬:M—bÜFÜ2 ”O'ãqGÔã$÷k’¯Ž“É8('V°.@8”'-«F×MXpzë Îe¿˜ &€Kò\DFË³Ìø-é3¢Ð‚4Ãu_ÿëÇR§¯ª;ÿ¶Î]ÿÐósÑjhÉúzÖ”€=OÒ2JB‹Ó0-ÙÀj¢ËÖP<V=ˆ;ë$³ Gš@¦}Ù–0G]Êl!t3°\Ï”»š; Ð° Íî…4H@‹ÞO¢Ûã‰R¬áÔ4‚öe)hήcZÀb…¬˜³Ï”È¡èQD®¼ª”H‘5C<”˜!3Îf˜×f•%%›žufwfï_¶®¤/eî—*¥ú;ß Bð“Ç‹Ìu‡ÜH ÉrZiwÜM^;„ú†+èïù]$§Ÿío;Ü ¦Õµ ”–öX†ÛÚE<†© È"<%õ,1Ø .bO>¢Ý~×|b ~2V–âÀò}Wªˆþ@ÕѨ"* ³’þØ_bˆ‘!¤R¤­]&Åb– RÒj^pkÅàz:ÌR¦¹UO+Y¥§€°ô8?7©Æ5™Üä¶šâŽ1žŒ»S9)­…p( vŽ2±‚¦–ÌÀ2ÛŽ”K¤VR{V¦ž;‹ÐAƒ™-„'ŒþÁÖc]‰ÿ꽿õ5púÛÁ»C®N“‰loLè3š’«D¹“*•ê—ã)Ϥ’ò€2]Eš N‘ AǖÈÈHÔr[ÉÉ]Í•2]£œ°X2{k•Þ€k9òÚD¦€õÅîÇÿìô×86ûYŒ³´õ,%rüÈ%-Ë}b¼©ÄuWe½ ò‰Ëá²âÓxìÜɃýpÔ½Ô¤EKw,Á¼ï>+Ó^ç}²Ö\oÒâ¾Bw]@/»ªÌ»74¥Wš%`‘õ´Û~mŽÇoë #uv.dœÖU5v“ãî5bð¬}a _̄ٳO¬ðïpŸ!I©w¤B¡P(ŠŠ ¬êÃrE,‰³½ÈÆóHs 1;K:°”€U5 Çmd-¸ËÍ¥ÊIþÏÝýÑÐç¾Øýx©+KçeRG`ðH$œX ‚„ô@€êp²äe !€ 3æ¶UŠÀž>À~ùsÄ¢¨«§{.I49¯ÂåWÄY!ý¼¾¯ãJ@Ѩ:úUDEaÔÂÒáÜnSÉwû©.öÜSÚþ[À2yÿX&?v˜lßͺWÿ͈‰1öÌ/!íÜ,—"M-br\ÌL“öUr€1ÒØTd&ˆ¢ \Ge[å¸4VPÀr}7ù|%†.¬ÒâígÄ©&ÓÐyF–„p ŽÐ {ÐÜTï˜H¤˜…àg&͘üçX"ÞQS_àq£ #®jß"¯ÑENº–tTq"àæa¢–a’€Æ€ÓBˆ\S  $<ýdÇŸE,y~T«Ôk5Y{ÓE°íãè 7 hÍ-:0˜òö”žåú1ˆ:à ]É @œ¥èܰôÆ•ÃyuddôÒàîkGtƒ£vyÔð(S“FtÒH Va¡›qËh Õx£xæ©»ü‘KÑÿÇÞ›‡ÙqÔçÂoUõr¶93£u´,[6Þ±YlÙ!6Kà‚0\È%¾@àKnxÈMHxâ›/…„\nð͇ÛÀ¬1¶ñn,[xѾŒ4šÑÌ™³Ÿ^ªêûã×ݧÎ2£i4’Fý>úãèœêêê®îžSïyß÷×M`M·Ú Xè ñ<⋊X¿„>k*?©äFÔÞlh©êH††§’Ø:¦„YG²IGÄU¨TÈáäÐ1A¾ MÁ]WüYG¾ûñBÙÎä÷P)/?¥¹Jj_ž›`¹„€”'I`)…»†_“S1gÝ©µA]¯Êoß™¼É7Œ² ›€1h}’ ¬eºÏ+EŠ)R¤Hqª±ø ¬Ç{ì}ï{ßÐÐc}*[8pàæ›o.‹Åbñæ›o>xp®œ 3ò[w QŸõãF]Þþ¡µž< @ØK.õøCòö/©§ŸD«©¼W=|?6zmĆWÐÇ&ÚýP¦ûrñž™h³H‹ªÀ¢Ò~š‡¡ê— À óž…À"ºd¡ ,Rñ0͹ˆu^]‘RB[\Þ¶&iÜ ÝLì„@ɯѧƒÙ¯y౩CZ„v}x$3;ÚALô(bIºBÜfèûÜP´"RÃá}B܉ôL¸–Dϳo!ÉÈBèÈÛÝ ,[Û#öJÄuWYC«²9Š,9+D¨ÅYïÊ5¤8ç ±+`¡©ç:ÈÚ½Ç;Üê§ÀŠìœ[×Ríf%Y+ùMBºh6É·Ø!JêR`‘ÆÍî¦H5*l/ï qVeo%ê<²RíÈ@ÌuÕy±K’´He&…`q=G/ÎVk„é×r–› ¬@‡Ñ$1_]UÍ… q?Ó°¯Z"…ší.‚1ñÚ7ŠW¾Ž¯Ûx2ÝhÃöš]îyMæžZf„sŠ¡d[¶Šë_IÿøK®ãGð½'m!\ö óLã”S¤H‘"EŠg)ŸÀzûÛß¾fÍšû÷£Z­và 7¼à/Ø¿ÿþýû_ð‚ÜxãÆÂcªOÔsOËû¨öï™­AxÇ¿èJX‰‘PíÙ©v> )ÕsO«§~€_ór~Å èS¶q3âT,eº/›w÷Þ{ïéB7’åñqׯ )°4w–§>¼ûŸÇ5ã#5Þ¨Îx­ã*°¤ÝÄñd\ýv`RPu²Ž£cÊ`ÚñüØGÖdÄB¨™0F·g9.Æ×wRÙ`µ¿>yǃ¸0Xä­3ãÆš:Â0dG¤ Ǻ³É!X9aÃ䀘 yH4\Îr Ä\Tôp³aoÉ­Jzq†‡Ý4S¶¯´6+õß÷|á½G>þ#ÑÛP¥­6­CéNVL`k¦D`*†|Þ²°ešþ´ b6 Æ› ¬gŸ~¹úm¶tB©üŸ¹ Ý9³š¤Ý­Ÿo–¸AžbÂH×’ ˜Fé°¨b£èÈÀªþÁÚL"WlWK4= übZ£Žd¢ìk„5°ÞI`)El•­”GdÞ˜Ç ª£2©cÏ4¹ÇžzÄq,.W~>T ñÒëÅÏþ²¹“éD1ý§ša«ÖˆW½Þþõ߯¹‰þñ‹/G.Ï6l7¾€.MŸÌ ÎÆI\¢ ¬å^YaÙÏã¹€t—Òy\H'1ÅÜX| áŽ;fûèsŸûÜK^ò’|ä#ôß|ä#O?ýôç?ÿù÷¿ÿý‹>ŒS]¯Fꪽ»pÉ}ZH©~º–Pzú¤T{v`ÅAbµÈ|K—Klhغé-ˆEjlóùԾݼ\RO< Í€e€`Û¶m§{ÝHìl]©á' !m… éÍ îÿÓÒçß\~à ë.ðèÔÁ/²¶š±5C?«T·ÎÌ]š×®¥9¹Â~ ,K Ä ¬8=jà±–Ÿ(°˜PU‘ðjFFV×<þxbÿOªûŸcÏxž³)y߬±Ü, ó6Ó’> ‘XÅÚ£JX\¸Â‚l ˆ¾Q< sb; 7bV«æ*æ\T\ƒjÔÛhnØbŒŽr¼)¯aêuˆv©g§´í©FEš±KsÕ ƒ¬EÖȱMÀ€e#„â) #‹bØ Ûî<ÒLÕ?ÉzO4G¤}cÒÒ" r3t”‰Näù1ƒŽ÷Žë–*jËo…aÆj?Ûe¸(` '\ÄÅ ¹M{N&é¿Ü0 ,;X0þa¶ò+õ·]·ö|‘ÿ&[¹Åb_dÒ²)+S´:¬0V`qi+´dçµH™ü’Ç·gjˆû˜7 è¤)OgàCui`N艹jë-ïèK·Y?ÿV6Pdù]¯êj…\ý© IDATg ì8^æÀ²ŸÄˆM>³îÈÅDzŸÇsé$.¤ó¸ Nb鱤!îwÝu×;Þñów¼ãwÜqÇRŽád oÿ²®V¨}»ú6ÐÓÇ fC+ ”>|HçâuoÀ/¸€žÀ/» †Å’ncúÐù­;å·ï”ß¾SÞó]XF ¬3 ™.®…0R`IŠ0Wný+Ö¿Ü7±À‘f€â2©°> Ú)/¢´Xå‘F1NaR”ÆÕÉqm Š~ÊØà /!Ô4×0JÚUfÉîy¢zà‰Á5‹G¼hxKò¾Ë-å!Žñ&oIC4e@Öp¦3Ľóœ$XƒNŠËlís»ïCl-”<¤£ÈÙ€¢U!ÌQ\´{ØÍp/Z‚n)¬ÀCÀt«Ñ¥ÀoTµí˜–z³…¶ ©ìGÒ¤¦òØ1¹R°"–Ù›´=!¦á $Ò­ì·ûLØ:â=WV7ßÔzÓ«ox}ëþ_ë=zþ[»>É·Ø©À꼎ÓÁ&ZU˜«1@1atz)‚=Ñ‘Z*£òˆÃþÛ{p 1e¶!“ãõ#Ëàˆ)ˤHBC¤8+:îÓÁ*ºÈv+° BpžÂù…¸×‚…—G8  #>t6ËpŠAuX§˜™E,Æ6ŒÀÊU0=Ù·¼ïòÁsýgäÔB˜"EŠ)R¤XD,)µcÇŽç?ÿùæ;W^yåOúÓ¥à COSÏ<7!ô‘1x}rŽ)ÄŠ­ZÃV¯ ¹R²›ùeÏg£[¬_yW’Ñί¸ºcËlŽ­A¨íBddÏ1®W¾sø¹íÓãK°¯Ä”Ô7½û„‘ðb3q;0}Oy€‰  ŠÇJÄ_ý´Ó­ˆ6R $°9¹¸áäêQ`Yˆ#Ï)5)Œ5M¡h¶ØLhÄ%í꪿Õ××>§6¼¢tþÅÉûD`yD5q¥´6ù—™°®˜´H†8Kue`A°a­Îä¶ùjÿóûGv‘…PqIVÞr :VPEs$Yo€ðr9Û`É €RÐ4-]jW%²z•QýÞ‘_Üû`Ån—«Ñ]OéN"²¬èdh«ÃBH–CÅÂÈs§Yr,ƒÀ’1ëDå ºøº—¼iôÊ×o¼ìyC«-ÎÑ•ˆoîÂP`™ŒÌd«#°¬¬+†E1ÇmÄ´„>#µ”«3LZàªì{Úuë‡vq¢Y#*óp“‚I„˜S®¸EX¬£zÀ´WÓLZœ±a»ÓBIGdIF6\ô©±?ÏwF¯gmöàä÷Nüù‡&>5›êòKûùÃ]·}õÀö¹w· ̰ˆÀ UuÎb)Xsƒ ¯ û"T> ¿ù5uß0kâ9ˆÀZþ¬)R¤H‘"ÅR`I ¬R©´bÅ ó•+WNOO/åN”fÅ/¼˜m…R}c°ô±IlÕZ"°ÔOÀ·^ Îíw¾n†_|964L¡W&Øæ èÑËìw½_ÜðZ0¶œ¬yú™ï9¶ë«Î¿þËôOñp€–ðŽþîž/|z÷=;f&æÜî8bSØLX Zy‡2;PRZ„ªí^ì³ -År'-Â-}(n‰'QDZ¢‡ waÖ"³^訜¶‹S>x«¢!uÍ£§}—ÈËn¹ðmæû9îð™¡À<šr°²ª`a;v="°˜°·:ý§;¿ö©]? ÒÇâ À[7¿pMé"0½¿5Iú#ÍÒ©QUÁq‰*f‘£'Ãlƒr׈v¤\¿ÙQÔO©ƒ^ô8ª¡úïá7<ðÝV¡½4­ÄY#mDB‹s¦˜®øéQÈȶ¼ªa ˆbË“+"†lô©:JVKˆÕ‚TJR ¬†?åwX5^°Æ)f-±êJ±I¾~¬«²a ? àP£\\îÀðÏ/_÷Þ ®ïÚû-;ï:0¼ýÅ•Wüúù/¿ûð³·;ÿ&Zy™©;µá¿=ï}ÔfGéèßÉÏÓë”æ=´ó/ß{äãÚö?Vø ÅÄTÿ’Χ×ýÞoLÞ¦¹—ÿ_>à¯vÝýÜÐ×ϼì°>:=¼ûÂÒ‹v?à}ü×?þ“æ’)þw«ßbìîüÆþáŸPÏïÔo¿võ(€ïÙýû¶Byý ­+ÿ3ÿ­µ¥çýÉ…oþ£_™Þ àò™—=5t¿[[õÉóþŸd<ÔÃå3/+éÊØðS#3=Co®.]ø± ßàkžüVîNzsSéŠ\8׳ñ»ôÔÞÖ;^5|ëwJ‚³¿xÏHßf_ÜûÀ¾`¤tñG/¼¹·ÁïïúÒÌÐÞleí_Ç—åIbouúÿó>M¯Íkf>ø“·~úÚê ïÜòÒEÌòÀg¿1ýìÁˆý½·¬Ya®‘èý{‚Ïþ Û¸Ù~ïïFo5þ_} ºxÉuâç~Áÿø£^³ßý~vÞÖS>˜j%øÄŸØ¿õ¡è'´3ŸûÆô3=ñžH¦H‘"EŠ)–=N³¤ ¬Ë.»ì‰':´ôÛ·o¿ôÒK—r '}d :ZÁV®æ›Ïçzb<¼ýKÁÇÿ8üÒÚí(kåšäëcwÖ•âE/íõ`Ã+Øšqݧî(Î KñãØ…‰ ŠÂÎÉ Gh… Ÿêì6ÒÔ4Q`ÃyYáû=¾É:B­¾T?KQÍÐL-(m:ÊÀŒØ‘ùÉßó…Zö˜ÙÆ‚ k[@n2°ü€&eG\5ÀØ+>ïú†Ø/™eN×û˲€qÌ“”tÎméðí:[Ba!vÆMÊi‰’I6‹¼u䎔P¦a÷ 6'â4wa÷;Ë2ê²ešÔ$TÍ*÷6F _“^5ð§†vïÜŽØœJÙ*A·K2I…ç„t‹ÑêÊà¨,°ðËøêWáÓˆÃõ»àÀFì[$ÉSÍÛƒo†í뤦ÛÂ¥FhÛgJ¬ÎäI¤¦EØ CXéX|ç#à0+€ ¹h%c«¦Ú[™¢}kÔà»ÊSÓ~‡EXäúLÙ«º@¨èÐD˜IzÙiݾ„ê" ¡çÌÀúñäþíüÚ­{#Ò¹C5»±¬¡¢[ïXf¬oªià;õ¾ŸžöÖÚ6ùã!»@'gqCú–:3°Nç[ô·^OŽ'cÒãhÔÙÚuâ¿Ü Û/¹€¼ï‡K1šÒ ¼ýKg”[/Ê™4¨)R¤H‘"ÅÙŠ%%°^ÿú×ßzë­æ;·ÞzëM7‚#µû9ì‚‹À͈Wß$^ú3üÒ+!„Úñµg'x-]­ÀvØàry~ñålíún 7¾³hꬷü*r'¨ú9óaêç€"_–"õÖ¢R|´)OžøŠQ&op˜µmíÚA¾¤œˆ E´¯¤ œ 31½vÇ*Í ½q–rëµâítô`3 €Ë-h¦¹ µ& žëðì¶on¬^ÀG\S@¹\ÞUžÚUŽ\!!÷dE7•.bsbb!ô”¤Ð%KºB·Ž8ŽŠ@iî”™Uæ%ږțNjâ½L’‚ËnÞ§§¹çzÆ Dzº)w­U+3ƒØ0؆Yd4”W < Ë´6€jO­FÍBòÜYÊFL¬ìÆdud´|-«ÀA?‹9ˆ½{Ä€pMùYF–lóJ&U <ÄG‡sÒÙM{qƒ„[Ô—ÛEVPËD¤§¯"ª À®Ú$: ¬†l~güÙOŸùnþ„Ñ‹Lš-›h°bŠÊ2RÏBU!tÑ>™Äl¢“´ {¬=µ‰±á?U‘bnž!îM]Éa¶z°6ÓÛ€jH§.Ò‚û˜ß. Ù·hÈãðû?çùP]~0gF^Z$—gùxž®D×’žšÀÖm$2•_» –­ž~’l†½XÄIÔ¥)úÀ^ùÀ=‹ÕçÉ#™¬Ó[³®»/§ÏršÀÖm8%£?3pàÀ¼B‘I`¢ûÑ:‹ŽD*E‡À °Z'Q,L&Áؼ ÀeŽÅù@½ãJ1¥X¦¬‰¶Ü©!@`ùT Âb=Yà*ºÙí˜"¡ ðcÍ:˜†• Ý6s¤U`7(;Ò³û÷}"øÌ'‚Ï4‚±ÆŠ*š(Ú.¦¯T€RAIâ#"Î2h³EŽà4ÓÎ 0-¹ÀŠ ¬ˆ"4鮺0`GïäûX< ‰–4¨²¬kÛg“o¬ŠN‘ïàaÆ…  ©¼º1®èV`ÕU·NM‰Ð×±ÐL3yËλö ýÀb Z†v€ÝWÅlÄ9ë$#¾L³öаeX-ÖžDâÕcõ—6€‰¸L¡æ’vOdS†ÛCV€tãð~#Zë`k @ÀBÄ´fC“A›à6'–†AÎÒxl.GfðÀ2)¡‹ŒN…[FEr3i¡©Mè$˜B[Å0'ÕÒí|dºÏC‰âíÁÕx£Úûé  ¶ùÄàxµ»Ùi¯y>T—ÔâkÖÐGéµ2~†äøU/‚Öêþÿì»õ"N¢.EZ?y÷]ºr¦|ûWç†òꜽ—ÒI\Hçq Äscñ ,3¸«+Äk``àûßÿþÃ?¼yóæÍ›7?òÈ#ßûÞ÷òù³@s¤Çǰ‘n‚I\» ¶­žÝ¡'ê£G°•kNÃøÎ\qÅói¦¡H¶¤ ,Š‘öY{•èÉ“±Æ”„ÕDìÿÚŒM»Ž­yªU×2¬Zx| á£Ç}bç·¾²ÿ1JòÚ=·6#‚Àa1E"€)¿€K»€ÐæSõ*2A…¶æjÆkX»e”> ZÐOåD5•›†3Вؽ ÚóµÃmš‡ ™FI˜çCuQö½ÛlÿæØ3K¼ß.tZOß8lÍÈEÐSǰ•«“â%×PO=ÞwóEœDR`1ø¾îW(ù´à©B¸ô7cŠEG:‰Ëé<.¤“˜bn,~ôéÜçwÞ¿ÿû¿/úNO-‚@OM‚s¶¦'5_àW_£º/ü?ŸE«€­ßxF¸Œ@r ÍýÕÒ㥃ë2ƒ/]Ó'2lqö«ŸH•H9K™N *&ÂÈ0˜6€«Î{÷%m´tÁ„'hÅ›QNˬ.7~Z;¼køÑÉòèeü"IôJ ¸tZˆI"\YÞ´WƒWÖ0Üß¹ÉtPÕÙFè†VpÌ«¹™c±û¬ê· ú ÐC D–oR¾ŒLÕU–·_»"ŠvÚUJt[Ú 8¼3‹)ÓBhéY-„»%4hgø¢if5¬€¬, b€êJ¼yõKC}íšµ…;? ¯¡|™ûÓ­¿TñÚB' 6:¥sXHÊ):dÍ•!4{óæ«0%Ú9VLc– ,—ÛˆK:§#4ÑaíÁ{ÊàxEÏ™ô­6Õ¤ú€:Q` Lµ˜MBCú9Û&²Éö*·`îšø/(Τåç§¿ŒÛ„“`…Y‰zSùeÖ&°,X4MQrS|#Ä䯛_v¨qÉ^ïÈÎÜ#’ØêLgŒÚXcf$W .˜+KõËÅ£üµ6Eg` ZCëþ^mŸùškÊî¾czº·Š ¬£^¼ó‚0í×¼ÉÉŠµR®àø¹–Ó H`iH,<9ëÔa­twî.ÑÌ¿ŸÆaœYÖêPô@OO`+Ú[»œëZJE!m³@=÷´zz;ݯ¾æD†2=€­Û JµÓŽs„ÀJ‘"EŠ)R, –ÔBx–BORlÕZX}VÂÖ+ÿ Û0ª§&u½Ê/ºDl»aéGx2 YÍ™2 )®î?¶ëîÜ]_¯üøÔí+‘JÉHö­Õx2°³|ìöÛš<¸ n‹,rpþâU£¬'§ F>”‰€·ØÞ:%0³Á×!€€ûPíÂ=B ‡A‘0-”HÚkìÁ®MfT@y+È à¤rœS^%–äzn¼í@3Y5Bè%¯¯¶Úµ;óÜPc \î­·óbH­æˆØB+°Lý‘ÐÝ0‡ó\e­[]]´³èÁ •à O‹*òŽYà+D í ‡V_6¼vu&Ÿe.9:mØc+2¹öî`Sƒ®)R¶ZÊò0%èÉK.N™þ‘óbÇ«T € :Q†…P†Âahfjd¾à©O,„ÚP–Ã$ d…½.ÛQò²©}<Èܲâ·Ú0Rƹa€§ý$p€…¸3º‹#&ˆ˜Ü$åêšÕ›Þ4zåzg€’8 M¢ðh«‚¸ºmô 2'ZG‰`ûôø_ïúξü Àìβ·¬Ç€ŠÕ' Vtÿ NÊBH¢6Ïj4Б̮¥š qšØR(Rçrª&eNÌÉ=í´‹,„] ¬U휳|ZëÚq®(õÈÕC÷É}ïÄF¢g¦ð‹. 'žX'‹ƒÀ:ÝS•"EŠ)R¤8û‘XLJ>2†9ªòû]ïç]ÊÖo²Þök=ÙCg0”ÖPúÛߘøŸÏÎLžê}Ý{ï½óiFßq5 )àFžÊ•[’?XœÖêYPv5ðƒcÏÜ»ë3,¨Û®1%áp>\µš,ì Zú¦}Qbz>,ØŽýðö•#sìÑW€{ Ýe»‡À²UÄŒ$aC\ Ä\†PÎúìP×&UÔ ðœ£2ˆ}g;öE™Ù•РE`ÀÎtmË&m%¯íVóeH òK VÌœOoæE‹©Ã¦·+’&E+Š÷’P0,»Gà¯Î×'·¼gÈí€n€^`H툌ãÚZ—f“k¬JžD¯ø:hI€ƒn¾Ìbb‘Tç‰P”­Fu)4"ÕÑÀrzÃËâKˆ¤F¤À²ú(°B–­¸Ú[´EDÅ2Ÿ= ›ï °BÄDIFØ#¹è¶r‰ ¦Ù°›WÑtP½§ý¤°&ˆÀŠX ÍA,­Û©±¢KTAÑm˜ÔÈÕV˜*ˆo%NÛCõR2”¶üGË{Ÿzhft;›Ög[-SÙ‹²ë´Ün+T*ÙQIžEÓNÓçMyU²…)°èLÎf<œçCuAƾ´ûRB) $^ÑÓL‹D ¬É£t½ŠVÙ\w=–"Tû˜RÍIÔGÐGœý¤”.Ï€1~áÅ83 ¬Ó:ŒS¥¿S,:ÒI\Hçq Äs#%°Ž(ÜjmO{DZþë»íw¾NŸ´3O•Žj+WÞI8ææ‰m۶ͧYÄþpEª"µÀõÞ‚ âeaäxâi¾xÚGìTš?º8©de~ËÖ·}jÓû‡«&SRiuAÚ-E6àÀГ_wîúש¹ªJѹ’§€êÂ¥90ìæ(Ë7C܉À² ^µî¢O¯û½¿<ÿ×’ò– `^‹­z ,-¬‡ÀbºÅ=«Í£%z¨^+ÛOæ™%‹ùˆsÍ£<)#IJmçü!{kHʬ$#Œ¼„u£L!Õ+ VN8c”ÖdvKüW”’È! †rÛ]YÌrivX×v†wUÃTLRã¼å\¸õU¾ð d/­ ŠøÆ$hoˆ{¢KšÑ:rpú¸Biy†Ü¬Ó°³ÚA•Ö‚¶¥ºÎº/Â!)d+†­¤ù<që | ž:ÐL·ÂÓÉaE'çd*—”ã.ïú7ùÀЀa`úX ôøahM"nµã‰…Žüƒ^ 7Ê‚¤(áéEš•"EŠ)R¤XD¤Öñ¡ŽF¿„Ë{ƒÃôÂÔ¡,=~ëÀ§Þ{äãk3í‘pE䑿 Ø‘fuzxO£8þƒ£»ŽÛ8±FŽ'+ÑY¡Ô}ã #°º8©l7ÕÉP0íwrmcµ2ËË™Š•º=3Ç—ÿ€…´›W)°2õUD=0Å^&Ã.Ch°&[Û°ZCAâ©Px\a»ð¤}TR @CyµÀÀeõ½_3Üj”Dyñ®¯`Ó•QE²,O´˜^6[t(°$S¦þÈ^x= ºÊA›_Ó±«·1E‡£Dv·‡À"ưï¥BÅ(‹–!4‹Ïïq>öÏÀ²ÄmÄeXD2&D­×:\͇í$°h5$"Q^ôÇhµ3 XíÀ¯ÀnÞ¶ÿ13.¡uª1Ó¤‰Àš×Pñm>ìdÂAû…#–f<»Þ§‹y£Í:q`µ] ûY†ç=û–z8- !€Æ<ª£ž:Do¿>½à—^ !Ô“«'Ag BB¬Àšëwú©Œ_ú|¸®; xž{ׇÊ{¾«º[±mWã‘ãžX)R¤H‘"EŠEÄ9A`Ñwʃ®”Ѩ#—gÅîˆëe€ +ú‚»Ö“O>9ÛGÒ­kÛ÷¤ båU»_¨ô /«î¯=uÜÆI]3é+® ¸£]ÄBŠß^øš³cÌ«‹Àêæ,º–úc­2€Œ0+’eUpËλ>¶ók ƒ( bQÓª°²¯ÛxÙÇ üК·r/ Jˆ˜ÂÈÆ¼Ó€&šˆ-iÙ òˆ‘xŠÒÓsÜqUÁ ÌøÑ¬)½ZàÃ0ÄuÁR6€ªjs%¡–ši®VeòW5_2Ü™ŸEÑòDú° }œ(÷6ç jà 7F鸡  bðkĈEâµN ;YÒö|xè!%“,²E’Ÿ¼å&·¤f¢è!°²¢ÏÞs–ƒX!H·ª`œl}¾Œe>¸Ü^ï¬äK $[ÉŽˆé D{R($‹È»¼åÈ©6E^´¯5NûxíÊó¡‘A,9.‡qš«^‚#×O²èc;æU×»EÄä¬ €ÌÔ~˜ÿæ×gÚU’Š~-+òúÉ¡i†¹¬ªïi&-‹óXàHСR©K€håÎIX™:/Å “…¡úœ'èa¢fy>ÏñP=EKžN–Ò@b!<hqÝöÿPÜðsâúWŠë_É/¾¬«ÁÂdÕø¶i³õÚ7ï¸(­ãB=ý¤üöjûcØ0Xk±À,]?)Ãì\=÷¼X–Xú›1Å¢#Äåt—ÒIL17,[8!¿ÿ-¶z„­ßxü¦½˜šDüup™¡^>R,A™öÑÑÑäõ'÷?^Ùwe~tÛÈ/Ò<ª)gÄN/0Ë‹m;ã…Ýž ]>מ”±SLÕü&-"˜(^Çg>Œbjó„î²ÚÙÕÆMǤ¥EØ’Ð&q&ƒ22(¨\'³3!§sÈÞ ܘ³ÛRd%dª†¬¬ÅØêL€s4ßÌÖ˜I]ÂLL¨çâ‹b¨ ‹UŒÒ cæ%#›Ùˆ5>ÊŽöÕÔ^-ô˵zai@͈[ ´"¢$ ´úÕÑ—Z]uåGœf¹À‰êúÙX²3.Ýe ËÀ`…nÔÐè~¿Ÿke&‹”å‘­²KL” "í» mÄcz‘ ,©™H"8™~VÁvàEBºA88t‡‹òã]fŸ—_•ä,i’…0¡M‰© ¶QŽ4V¤ŒËÙ€VHJ„h[G2 Ÿ|~qea÷úÚà·¾²50 ÀæQˆ»f²vŸŠœÕ”æP`?´â q¦;€ …AÔ¸u$ ,Ýž\Ï0i&º¤$H^ M±(Ä]k­ngkÙo`¡ `ÄZñ0¥;¬FèÁ‚æ$ê'UnʦDÍd¨@ÁÂú¤ä/5ËḢêÒÀ°­žù]JPp{¤À:3ˆ¶b¥¸ñu³~<»…0™D=~[·Ÿ?¸O=ú€|àëo;î®uy¿ør¶f„JvF P{ž£×|ëÅ]_‡ô¡ýzì »ö”dŽPâ>΀¸ýSŠ¥¿S,:ÒI\Hçq Äscù+°ôÑÃúØ„zü¡ÜüØú9–›K4,òÔ³lË7*ïÜ>xï=Õ§@ú#¦ ,Ÿˆ…ГѲJÛþŽÇE˜¤­K¨Z¹áˆ¿ ¡¥_©…*°:kÌç;X¶!ðá¡ );–‚S²`ˆ ä:ÝdGåôt+’„4;åaÂ+  è¶Ýj®Ê`ʲb®$±’Ä8lC(ÆÝ8IoYaH4Y`EÊ^]z„ê¯~r´  e¸Õ¤‰4tãCËXVÅiœBpeLá©v£ˆÀꜗ/˜À"©]C÷XýX.·Xhƒ«¯ÈñîÐzb‘”é|L³lOAR3‘õ(°rVŸ“IX°BRK‚ (CæCת˭+ÍÔTË<¨ËP¶A`É0Ô\A3šèQ{[]MÚ=vQ®ÔÆ|t 3iqà ~ ýwu8’œ7"°tCöX²5ª·¨¸—œ¸~ëªLž)®-¿”å®Û{ÉëDž©c–S–ÀôX3¾@„€ÑìJ«£aƒªLÒ%mxTð‡žþþñ)&¤ñ«€ºŽecv*jV0ÙÕ• ó¡º4t¢À:½@5Î ÖqÁA‚îÐ$ê#cT‚l ^ü2úà¾yõNֵ׉×ÜÄ6«G¨Ÿ<¬¾Ÿš¨gwÈoßIÿzâå#?VcNà¸æƒ¶ël˜©ÆÒߌ)é$.¤ó¸ Nbй±ü , CUO< y"?§kR`­Z³ÈÃ:0ÖlK–8Ľ 1í’XB*ЫGæÁˆ©šoϪÍkLús%æÂ¨k¦˜ª†®ì(ÌHKĤÀBKnu 7ºX‰VH3ÊBjvÆ!Sí³•¢ØµàŸÓ%/âZaøÃ#»ÿ~÷Ç5ô8׆œ6•×D`q«­ÀŠ@ªiµ‡:­ƒÔ˜Ê ·‰¡{ˆÆàã¹³zX˜èHá “À ”Œ˜)ÞGåD`Fð|Få¢7uûM»•é‘D®Êhñy)°³$öÉ÷ÐL±+D¿Ú‚ì QNHj¢ë ¬™cõ9™Û†fšËPk% p¢Ã™X!€,·r¶-¼\²mƒ¬xŽÖXÃ@5ã©€L¬É°ß¼ùªOnyÏ–Æ¥ˆoºŠŽËB¤ðÚ‘ËH.·ÅYŸœ[D ¬^ aÞî`ýˆÄÔLÒmè<&í¥ä·è`M¨äíneW ºfÚ ª¼<‡…°â7XÒ°.; °:|‚Ä&ÛÚ`zTÇÕ;3·Åþ–ê­0œn5j9<£È€Ìq¬O(ë$µ`‹?þKÑ:,qÆd`0K–ž¾ð)¿ôJªÃÖm„eé‰q´š}7騼\À†Úedùyˆm7@Êðk·éƒû QÀ†VÐÓ5^}OmTÚbGvüá¥X)R¤H‘"EŠÅÃò·¥ëUµói¾õb}ø Ý2÷&úèa]«²5ëØ@q+°LÒj‰Cܽ(ß*Xº,„‘Ôb¡ ,Ý^@Ö•7GKþD¥e=ðÀHEÂ11¤úùÂfƒ¯:ÂÅ!ï¬Ð×¶jFéQ^çR°Î«ÖdËo ¨\õ¨œ^6ÈåËà+úkj°åögë«;Šßi6è¶½‡,€+‘˜Èr±I´`Êöd˜ `$3Òâ±’³âˆÔ“vtV=P;1K@:ã–BHR`eúÑ4S””Õ1ePBD‘tÉâ² ÏÀÊ À³š Y2kö,äš®D=tèqÃ!6ÄQ'LÚ½¤gÁq™´¢öÐÃý1%úþ¤ÀÉmjõÀª2NJ£ä.&¯_F8²Þ`-‹õ(ã,V`mÈ »ãš+a# 0Ù1Á8âXzždÀ{¹Àò)"mM¶ðÚco°™xéÈ–{*wƒi‡Y‘«–ô!À”HÈ—«C%)°Xân¸}yè*§5ã5IeÊëBѾÁ»ÔLkùª£z2,N36„Ù2°¤ ¶v ;øÐVÇL5¥ºt5Ó¡ÖTaó@½D·ž'C§[ú<øpñ‡#3tëÍôŽÉ¯¹:ã ÏÀ"yZòT<íhçŽVKE!îg•‹1]«BkôÔl•wß…F_r…õKïŒÞ²,¶n£>¸OÚÏ·^ÿ™0oàÏoºüu/v3Ô•ÃÅóƒ+’2± Í¥:OZ¤Õâ= ,[ºÊa“#àLšV'­s‘½ÀX81‡«¶8* èd(Ë7{iiº¤š¬0¸iFNCo⦥ü:3°²:GÄñ‚XLavã¡ùP]$–ÕÓ­ÀÒøì}ÆAdsPJ×kúØ„¼ç»Ñ¿}ï‰;nWÏ<Û±Þø6ˆö=ÈG·`>.ÂVž×E&Ûõ =9Ѩà7ÐS ,I6C¥ôáƒ8Pç†kéoÆ‹Žt—Òy\H'1ÅÜXæ ,’_ñ .R{wE_ÝÌÜ› ®Ý£'Ž@)=} Œ-KËT`…§žÀÚ¶­ðb{`3ôIÚ@K#Øúl=yRʾ'•,:™îðoIưf`š–î f¼æÿRÿ 5>0’+‘º€f* oÖŽâž°$ußw3óºYº¬.U ')¨9³ºØ±Ð­Ø”*ûM2!YG7ÈóŸ9&KIÉÊ[Ž+Š…3­F;7MåÃÐul‰ÊnÏ-òM?`/¶Ã²¯½‰Ëú(°r=e‹ˆÀ²[˜É•6›ËU™ÄlÖå†à S@O±´HŠEcÅ<Õ\–ˆÝj\:¶q®Ú(dw0Y¶_öùÜ(ˆl2<®,‰HÚãÌRÐÐE›´è!°ƒöâqÕ<îgd¶†˜Çdíý„ÀXàØ2ã zÁ¥ úÄéXL©—(be`çh¦Px0Ê>rƬæ@Ÿ`…ð´¤$>?åsI”\ƒ˜èG`ý×ÜëË~óÅ+G-ƈ>n*/Ù¦Dãœá‘‹îq“ÀráVŠlª¸j•àTÂÃõb €±p‚vc®•ï<øÔM›.Gl+ÎÄSÉCGаâ7‹.Q—9]EK:"°ºÙWÊTy U©!k5†WàYÊžë›fõè±±i¿~ÅÐúˆXÑŠk5,´–Å.ìm Œ,-þï.aâNÅ+OôÙf!ÀŠE}ô°®–Õ3Oà/z)Ëåõصû9p.¶ÝÐÝ~Óyô¾Ýrßnþâ—‡ÀîýˆlcúèH‰Fr¶b¥>zD~ókjïÎvË¢®VôØ)‰ÁJ3°R¤H‘"EŠ‹ˆen!ÄL [·AÜøZûçºV;ÍäWôBO.Û,K,9EA6 ! ú&V„uŽ„+Õùµ7p«¦‚Zßž)»Ê ²<ÖA`ñjpWã߈N×LFb"íP„TZ',I-˜ïj­Jê1~¯+ViN&>ßP`¬Í°¼€ÛY_º´xì|Þ(8aÀ4r÷ë²íË X`®Š…ìàV6†Þ¶ù…¯¹À&bÈ0©Ù}ÁÀJs+hüLq‡sÊÀ’<œòë,?@ ß×íü¬^äz¢‚|PXø\¼yB£XÊvXû\% ¢ØUêqá ¬¢Õõé¿YÄí5ë æGgN“ˆÐ#S –J,„±‹“Y„t-åà³[©ÔcSúäöµ'R)ÑQ**i„‹ m­Ç +saTÛ%£³¶t˜ ²½9â¸dR†D!éÙÄ5«7½jýECnñɬ)€«¢3ÀÂî‹Ä‰,u’8D“ ¢‘uÙ"qÅ™IzÎÑÅßuÙ¯«8ø„,1!a—n?°ýïIzM¶â ‹ ,é¨íñ2.sh²Â˜¬ ª‘(°>³çæá+4œ­¦«(rcPL÷ÆÀÿËÌ÷¾êüë½ÇºKúmkNjÔ²GÑég\,$?{ørñ;Ÿ?â ,à,¢EŠô³;ôäQdsÖÏ¿U¼æ&ë¿)Þðf~Õ‹ÙŠ•]ÍÙÐ0+FY¥éÞþ"”KÐO×e+V! õäÑH•ϳ«{ůy¹¸þ•âúWŠ7ü"}è”"L3°R¤H‘"EŠ‹ˆeN`éZ+ °M籕«YaZëÚ\ÅéôÄxôÊ÷õ®g`¹XÆú*<õ!Á¦ŸYY>â<ãVüK~ Uò¦‰–Á4nTI5#«}÷â#àÈ€uмxå9¦Çx†ƒRAyçÄ 3 !«FA±ºì.©6(ЊýSºa0L ¡â¥/áH« +pÆþèÂ7¾•ÿ·Ã€²ˆ–1•°M`ùÌ3cæ]Ýß$KÄ7amUŽŸê´Öò„9’6€œ ÁKH!\¯@YÉUœYÔ×8F\)Ð&°f À‚¡À²”ÝV`ü…Õ`*Ø ÎÀ´Û’:Óéi‹þüZŽe“ƽ^Ž‘AžLèÒd±øÐ’Ä.²Z¡ëjŸ%M ]*M®G0‹$Bmꙇè,H“…Ó$°U"ôdˆž’ˆ‘`J„0*3^)–7ŽêÑÙÆ D »†l!NÊG?/m†Î³èœßd«†òt|°–_°næîgTý~VèZL¬+TX(Ñry²Uÿ®ønW9 +Ç#‹äŠæÝD ·éc¢ÀjZÑ_ zn4‚àéÂcÛ§Ç»64UW¦z´hQ1P—1â ±fÏC&ö Q }C"ž-M*§]%cq‘b§[¥v6)°øó. ¼¿ð’ˆ~cìÇ!·ÞôË}7oúeûÝ KS³u%¸öQ``ë7Ðû÷ `;°"°°¡ÖMo¯¹I¼æ&~Ép]š"ùùâ"ÍÀJq¶`Ñ'ñ¿9ý‡ÿûèÞñù~L±(HoÆe€tSÌeM`µš¸$r‰â ”çr& ,ÄZlÕšS7ÆÓSµ!™‚Ài±çÅ˶@‡èhb2M{*QúlYÏ¢ÀÒ!€œÊ£S ÀÅeç:Ø5WéâÂ!&B1Y5tÍp¾ß?|à± ª·B_V´Ià˜Z†É  ¯’wˆ*±ý,€†ù˜º½ä¹oÊ‘œY }”}nZRÃñŠ]“Ðn( @β(΄ Y•‡àªÎ˜]µÙÌ Äú86;M#Ä](7“ÞÃŽ™VL|än!\áäÛÃÓæié/ƒÊ‹ˆ‹é æ5#œâL,Kud`ecm¹8méeÓ«lJ `hÉ€‰ã4G‰…PS–I`i ±×ä×VñH¬‘gY! I™8£ÍYü á+Ö]ðüêû·vÛ: 8€¦ö`ÈÖDÏI³8O„Šȩ̀x²†jé¸äâï^øš?Þú&Ç/(' ,ƒ-²•`ƒµ@8PB,÷øÔÁÿPn3!°<´ä⩤y©…í;Ýg>€¬ˆ,„‰ÀÍw¢Y¿qä)mù÷•žM6 XˆØÈ“ŠåëK—n-¬F|÷õÆÀSµÓfOÕÔD4ªf©eÑ7$b{%ÒÑ„ ¬€1$?{xút*°ôY¨Àâ—>Ÿ­\MÃå·ýïÛ¶më­Kmrá%lÃ&0¦g¦Ñ#Ü#DÂÁ~ ,€­Û€â®X.1Å/¿ª½_ÎÙúMÔØâ‹°Œ ¬Eïû B𨲠°è“ØòuÓSsº>R,>Ò›q Äsc9XºZÀÚ‹s :Õ•ò\[MÀ†WÐ3ÓŽ[Äú,ÅéÊÀj†™†Hw„K%è^ËXïòJô¢Îê臀òˆŠF?ÑŠ+È–+¾ç´‘f*ɾ±£Š{aÝ ° T`Yq’ºÝ«ÀŠ ,akqá3´¬b=V˜‡QŒ,"°¨PšðL)Êì ,n¦&[AvXF•…˜tÓ"¬ª&€,²DH5Pé± 6†‚‰HŸùøÜX ­¦Û ,³®ŸkêJŒi…ž²€ÇŰÛV`™NOgÖOX}¬ŒI`Å ¬|œ›fi-˜‹ëKYæÂÍ1}ËÆQÞ ™`3Î"‰*¥¹2úÑI‡™Ö:7kX@€€L¬V§µÓ2ˆ<ŽYÖ Jò¢ .³I|GÈn$—GØñ))¤Zðˆ¸±ã‘éÀà›Ì TXb°‚B €ÖøæØÓG‡ŸƒQÁc>€¤¾§­2Ì;8Ö,wHój  ì{¤iBlø}8xÀ.´KšÒµ­Œ!Ñàß6øÊ?ºð[W¢M`uS?”h>â}Ž-$k·ØÀâ"aè‚Ó«ÀXg‹5sqÝô‚_té|·²l6P„”³~o¡äúZkÏNÈç$ ,~ÅÕ£Û0 @-~!ÂÔB˜âœ]ügÍ3*EŠ)Î,k‹¬‚ƒ ("–ÜϺÕä8~éóé¿üÉb8Ö IDATü‹ØÈúS7ÈÓˆˆÀÒ ³NãÚ‡vñwÝ6w³Râb €X4ž^–5D–gõW`…,PäyÒêX&Z0½}úp$ìR€fš2˜3Ì&‹ŸBhê2æ_3žÖœ–r¨ç„ËHk+°UCkKAÒ­ä¹ÏÄ€8Õ+ IÈQ%fGÿ¬?•ãDqKíñ$…ó†u÷⇳De!Ž×\Öd@Že(<¨eÕ`艺`1fy…¸@HJs²! ÅæÀIXf¨¼m+Äh@q“¸™'VeÚ ,Ó=gºíL­8Ъ'˜U’Ýi–]‡äæk+°¬¨‡žeyÛ˳W‘æHÌ^Uƒ(0_:q':ŒÊäÕ=6=Û¸ö2FDצl”¶3`åHHºEç¼X¬}N¬…ü¥ ‹¨Ï({Ë&´×K Ch " …–bÚ‰­]µ°…n%R`ùÅ)¿õuõmú4cú¼`@DóBýf¢ñP9á?(•°¿VJR¬ÍTЇÔÆK^´-RP¼›À2ùPºZ=ñk-Ý­ÀJ¬e`MXG¢! aô—"8X⬠qÀ¯¾†ÙèdçU$ÂðJ˜ÅE¨§&ÿäÖgGÁš ,WÀÖmà×lãW_Ã6tÙº ôøØ6?$󳼫¦H1Ò ?EŠ)˺ a€e¨KèWÊ9X¾¯gJ‚]r9îûþòWœÚAž>Ðò†IK[Á¢XµÐ« bA:£\.({Éú3„‘¥å%÷¤½x†üzJG+ÉÀnôÝ -#‡íÝ©Àòe˜\ﻚG‡3yÐás_sIÖ¡ sFÅ×T=ô“öÍqÄlH¸¦„æÊÖÝdGFØÄrp ónÖ!RÙ `w®ð[Ì`‡YÏm&¥ YÖ_µ¥°rëÄ W[m®*©‡¸ÆêÎO1‹DVÞvhÆØ!Èo5 r~±’­°”í‘Û±ÓÆØ‹DøãÂMÔjfȺ©À²ƒÜÏ‹Ÿ³˜þþöÞ<\’ì® ¬?ãÌÁÅZ(±ÂëoŒ_åÉp%JË)°ÊVtߎ}÷íØ࿞]D*jª”¸ßÒ1æ“\°Tˆ{CEè"°Òäi"øŽU'䵪ˆJS,¦kP"Ç¥Ä\+R`¡“wpi ´e——3‚nì :ÃÏRÈ·ÉBèÙŒ[I0Ö¬³,PpXîL à¯~Ví­ËæH\\жƒ!€Q¯`¿¸¨êbIú,¢Ó«\jκ”¡‰ÿâÚ%›~øÚ³o;| €â!ÃÓÆd Hißh˜¥=ÑÉ–"†­c˜FÇ\̵îõ¸ÉMªi´‹Éšî<ÁµC[R,ÜvlÍ ÓÏ€íµ8”’¿ì»‘Õ;÷ìÄ4ØØ„yþŒ™fGOä?k5ÍÜ,<¯o©™R™íÚk&¯@©€UGä[¸ÇQö`®¬?å¼Û©§VŽeûqˆ­uìÄïû€{ý§Y—]1(¶þŘ=qþ“?scZ²e±õ;qˆÍŶR`Åš \.±fXËXÕç? cØž}|ïlçn ^½)A¤ù¡TŸ|!©ÏÕÇírþ|®±'Š!R`¹sz¶ßÆ•^ïÕD¥¬üfÜ«ÍDMxfd§n™; , ®[qÖ!3LÑ " þB³8ÜÞÒÉ볋³9ÿõG'û–§h¡%± ~—Ë©o„D`µ6¢h¦ÕhÆ±Š™E/Y³ ¬7ȸàLXŽªˆÞÖÉÑï=ù†;ú÷޳•(äŸÞ §À2€dŒifh(rŸ"‡ÈWUêO`UtBS•=Ršˆ%§Ç˜ôT`¥&nÄk÷ßþ=ûŽ/±Ã¥ŽekÇG§O¾ò‰sÇ_ºûHÏ?“Ö™‚¡{Uè넸C”¸ dáoŸûø…ñ'_0ÿå.û©Xt€"«À¢u¸„ä±G,’h—ââ"RYãË©rŽ”»,«¸é„Ð+ 6y@Iø¾êËýÔ'ØåñøÆ@ÕT`˜ßÉ KEwIÆ`©o–æÂ–…Œ 1jÈZäÒ ¯4Æ EÔ›žƒ/e§U–îñíKb7§Àª¬W–ÂËoiCÜ]XaÔ+A#æmZòºØ~ò 6U]®^WXð°Ü÷Tx:¼çËàzïì8öái“‚I{€q?¹F ,0e¦ù¹LñŸž|›æ!€²ôHù©ø?œ~ø‰êߺÅZ‡Åy?TyÍá¿L–žOöÌc†+m ©4 ÕØ9óB d=ÑÚÒÍ„‘VîÄ·cøùßk7©:„)aÚŠŒ‡Âiu£MU`¥CÜõ–»­ZAÀ‚ŒË»»s`ã} ,}õ2€¥Søm'ô’ ¬¾‚íÞk._4W/±#Çzn¢¿þýÔüîSü;^´t›Ó¸EBÜ—íÇ!¶>Ö¥ÓÚ™ó‘©ó“ÑO¿iâÎC+ŽébÕØ.cO™Õ²â¬[Û¥o¨G¿Àg{/{7 ÛIe¦®ƒ9¸}b!Ì+°úYÕ_Z‹W¼š„úìð1þ¯­É[ô|žTZ?rþë¿{úágæ®÷ü4Y˜1.©çªg3˜]°J¬üwC¶R‹B4˜æ~s À•æ"½Ÿn¢ZlÜ£ÔpW° Ùª‹1’E;客$û&É]ÒBÑ:™à|Ž”ü¢ÐweH®Á5 èªÐWò’U¨0‚¼C„m´éTP§¤E@´ÄÏY•Œ¨ñÜÚÙ„òIóU•c ”¨mš©vYíÌàHÄý$ʼÔ¸Hònìö†‘j#’Û‘/É›»#yPêE`!å(dk›Á¼ØL%4ºäQúÞ­ªͤ.’ÜXÂX>R:²²·â{Yr•F&¦Ò%á%D%.´g”³aüiV±WFc)Ñ%æeǪŸªö¸"“&”J´¹Æô:iÌJƪ<³´ó± ©¢K=+ðŽ`ªGx”œIWX\„z| À‹ŠwHÆ ˜©GalŒ‘!  ’k„ä9ojfì̕ʳ°ò¥Š—(°æ£Ö£€ëc³÷ï˜;Š!ã À‹wæQ ‚Æt«KÎhÄÉ j|ÉÀ"­®6?rþ럻zTÔ‚XV:ôDÚM{õD3î°`j#BÜ-)wÑm7ÖBH ¬›šA’efgº?¡È*Нêv›¨––$°\âûsO«ÏZ}þÓ¦¾˜Û@=ú°þÆWÕWVݼâ~³wÔCä`2ÿ7ÄC ±Ý¶Õ>­¿ñµÍnGÛŠÀšžU Ðï¶Ø/Ä}¾ûNÊÔõég ¥xåkèñú·À_±PbX©<ô2îõÄ߯}ô‘§®ôüÔ%¶´â¥Ö6.2™¸*gE¡÷îr-‘ÍÀ:³8@¶ª¥¸ `²=à[³×ÿûõÇÜÆ:Q`ùä›;kÂôjPEé6I 73 / ƒ‚Ô¶tQ0çs$Ww:òŸ<ÿÕß=ýðé…™ˆÎª‘´8x~ÝpIÁùŒÒ£bDT-4qb!LëeV!-Ñ^ €' $®%-æG&Gö”FŽÌÞwbþ…²Kfè GT+yMeéè¥âõf|(&ÔigMJ/7™ƒ´´KQønñÏs-´.fV@¬t#0™õäÍ>BÉå»õ!åàsz.§¤#Ϋ“å­xb!v)4%Ç•=™.ay-š°%]ZûÓ­À‚­' ¹ŠAÂ\ÂU†¸ Ãhì¥ tI‘:!ã2G`•Ù¦)³.’J #*2‹(â-bÕüœ¬µ Êè,òI'"áyÖÊ'ŒøÙÒ;ÊüèÝc{ºØ{K•_:ù¦÷ž|C÷GNåȪ%§½&€Š ©Z‡U¯¯iÑ™ÓÛ°”ÉÑñteÑWÍìûkšÁж%ir°Ÿ €ˆ…^\ С՜Ëõ#)}HÅ”\E£)°,FLJŸ’ô‰£Q:cfìɆñ§ÉÓRõÈ#,Ëp•(°²ÌL+°øŠ-„”…WõʼïI`9þq\f–Ö?€æFľîÛ|Ÿ"'ÅbvZ`6lnÄK¸HG`-ªx>,Ո™° â¼,¨Ü'I¥Àu[džk*jIöÆdò16¸ ìx˜›µQî($bßÒ ,J”‹LêÖuè¶§ø4ÂÔ”Õ3ËMª¤È£2#Öd §‚Œé°•7¨-‘E¯7±!ë€îNÌŽs³08;´6×®`9 !ù#?éýƒÌïºwéÍø¾ƒ` c›Ù™è?þßê±/ÐqÍÓßHÎu .„Gªƒôvïª%±l?±õ±þh܆¸qØ^ãbS_¼Í×7ó™ÐÄöêÄ­ S_$Uµúü§Ó¥B»¥ù 33m.]Øö­Û†À2 sˆ’û{sm°›§Z^—ã>?—ÛV?ñ8þ¬µ¡ÛD`‘Ág@ a,Bô7³¸÷{*°zè!zÑLE&‡qìXôH¿ÛBÙìªëÑ€Š®Œ°*€YUûÚô•ëcϵxÝmLUÀŠÒ—ÚP‹;ÇR© , EŽBaD’Ö,Û*žG!놫¶ ˆ°€j²`Ý|Ñ 3ñb”ˆY1ƒ…. !¬š‰CTE@ñNlŒH³@!â@Ô¯¼.!] ¸€÷‚‰½/Úu¨ØŸ²+Å)1Ùq `Ä+TY¹PÛ±sîÄÝs/­ø}5_ûË#´ÔO“>,¥sGmVT.žÉñY|m3X‰u)° óûÇ!K Ë Eÿ¹Ò„$€"•MX)È!J÷D}ùMo%l¯Nܲ0 óñïÿ©ªÕ'>¦¿öøŠ¾®>ÿi4ꤤØj"¬mân¦;9Gæêeœº¹/S[c¬’É…a#£fòŠ©-0tT÷fvÚ\< ÀïXæåÍZÞxFb` ¡!R©U9Ä–!j/é/h¦¬y-)÷HŸJnuX¶׬ªaÕqQ°`ÿdös3¡×ÑÓ‘d£,|ò©ÕS™û(^A‘£P€C pEÖ¡ŠWH,„\QU{?.ÅXHù)ª9OáQvÕ¼®“kÌcòí}[#Žöî«¢ Œäe/@%Bº³%ÈtÈ·U`u9G#HHgñk3Óåà,„Î'R)QU/øéã/^¾ì~8ð’Æ«0t$6%¾¤Ëº"‚¢³æþr§Àšj,”™U`9²F/ÅÔx*hÅ^\ n$TG`õT`‘–m¥ 6*b!¸†a)I`ErÈvaÀÑJ†À*8–a=}‘TO@‹˜*äòÚ¼ µ‚ÑÅSøÁ~ìUóÑR¾PRYf» ysW¾F‹Â¡¥X‘Eج¨PÇà`Z¾ôÇ"­§rÜ~uçO\«×n;¸Ëîʰ·chHx©ú#ÙŠ3í¬@’h8²E30X ŒÄA{$óŒZeßP,‰Ï² AbY³¶‚$-ó ¬tPzºë âŒ"öµß잦>~éé¦ _½÷ŽÑþ¤³ ÄÚ&Ó*gKÔ];¿‘ Wš`ÀÍN‹Ø®ÝffÊ\¿Æv%[35©þ¶¤pe(ÙØ¸xÕë)«U¾ãÇô îWýc35©Ÿ}ZŸþ68/•úÌ_é Ïó¿bÀ½3°†¸e1´±,ˆâ’!6ñþ®¹~íÙÇöÐO÷ø“êbIÂ1i¼ñ4â°¦[|Ó9ÿ9!ÒBÜ‚åj©C£Ð± !aë'’¶®Ú •R•ÆäpT`r–™˜ÈtºØ›©Ùr!ÌNÅ)ÕUÜKå&U‡¶Šp#èÂiE™©˜ ÚradVm#§ÀJ¸û5úׂŰýí9ÝØ ^™©õÌSø/áwÇ:6¦Ã^¹wî>ÀÌÍà÷=Èöî‡ôÌôu„yÁ`O¤We7÷ m~b‹cÝ;Ѥþ;Ä Ãv¹¿î‡_÷ÿÇÿíO?òçïùg¦nv£¶ ¶K'neñŸÝu Å+WÙÄN„í4@a¨þâÿ ^ÿVþ/çü¥ß…r:Ý{ll#k¿ãHÏÌÍ Õ\fû"°ºT0Ý ¬0Ôgžcüö[ŒÀb¶>š@5×N„Ný¬È 6Â^k­Ã‡Ó‹˜¥ªû©Ø¢“«ÛBØq&Š€ÝÁèÝã»sü=>ûo—x»àjcÖŒcõ)€–i_mÔ~ýÙþÎsME*Û§¡HK% (­€ˆ’Õ,Lo¨°U¨?3ö¥¿m|#)•ØÕHZìµDŽâõ©d—Þ¿d¢(=hn¸&–f- K¢‡ë¶Å{ _xÃÞKó¬Ï¤ G—XO–°„NŠÀ²ìL¼*þ%%¡±´QOx–+IÈk·Loãx+±k[7F¤#°,‰¹$µ4œ‹ÓµÊå‘QZB`™ÕPDŲ#ÿ!'cÌâ盳ÊÑXî+¥Ž…°ÇézÊÐ’ tYÓ!î[A›Eg¨,3&“õž•žTw¸7©\€òZ_ð?׋ÈÚû\Ò-Ýn¨²5ÆüÌ¡kª {z‰´"»tb!däâ´#e¨5LÓU„Õ^EIÆ|f8% ,£ˆK&ù5eäNqJÕ3yÐMª$6Û>÷,Á0…>\X7¨y™oÛc`3°tWÍÄÊçŒÝ ¬îNìÛµ€¹ž”¯1³3fò* EùÖw°‡6´yìð±ä®Éø=/€¬:cèᲸu¬Aúqˆ-ŽuïÄ¡¸fS0¼o ;qí ‹¤?ءۤÔúñGÃ_{oôûÿ&÷Eõ‰?3s³ìÀ!ñòWÑ;âU¯óß÷¿ƒ137ƒ(4—/¬¨–ËF`ÛX‰Àb»÷²ƒ‡Í¹ÓúÜéîG…™í¯\€]ùŠl‰+E`éÓÏ ŽØ¡Û’»´[´˜¡DêABÜìâ*Ìòáç¿r1œ|õø©î<ÊÀê±ÖM¾ž*¶ÕÖŠrµ°Dˆ»ãÅü€}Å*€‰Bé}'ßÐŒ_ý+ç?X“í…»°‹êyqMéé€ÚÏ.N^êräßQ!©½PLS6¼`ÂåԈخlµÊ€щ—Ö,VèÊqëºØoÄqŒTöyOÐê×FzKcOHÌ- ©šqn‘VŒFÄ5TG;C×ãÒ­—>âJá7.|Ýd«Ë OûѪþR ,âþ˜æÄþpí)´»,„IóÖh!œÊÔ*GÐðU±KÉw­SOØV9 TIú°ÉbÒ¬†¤!¡ý¬ ‘(­áÕhÀ˜ÉXéÑ•Ê{Yézq!FMù=XA†ÀZ‘+ÙxÙ¡B‚¯zXäÎðº§ÕÕ@ IDATy~Ì/ Š«‹8eØ-O`ÉDŒ’¡¸”*ˆ)9gJÒE`Q·àtaD`x(² ±hFša[¦æ‰ÈBØŠIº•U`ÑŒJt¦Ì´uÜJ1S‹KX=X'7©:´U’´„­ìTL¦ÅžósÚX¬ó§% 3ÎKxãq“Y»;±He-„‰üêÄù„„çü®SúñGù=/=T¨T0;Ú"¨ÔœÖÇÝÜUêÇ!¶6†xs`ë÷ãùOþŒ{ýÉÇkŸx|ñ%w—~è•[½Ù7[¿·8Ìܬ¹r~ÀßNï°Ã·á‰Çõù³ü;“cså¢Ð\8‡V…"£>ý—ê±/€sùÖwd̆žÇª#fa^å‹ñÇþAÁÿ•Îa ØšòˆW‡í£Àš™çlb'¿í8sîô2Û??r4ÿA© dXúÛßÄ­ç„]Ì ®ÀZ°•¶âTõ¿S_{nüË__¼ vLS‰VòuцÕI…*r«G²vûAhj­½ ÛWîLjEéº`*¬hÄ1ìr½Ìm´/·fnËj À@Qk…õÚT²f&VHË€tàQ•0}¦öÛ”y¼´KÀƒ]ͦU*NUðÒÂÄ&Ca ~jÏóÊÂZ{•;\5aá‚À]>¹*\Ú6*—R`%[ÚÓ’p9–ýç-„ÍÀâŽÀZý‚PØSÔ9{ÂÙ!}XÁ‘·J–ëÛâÆP>%â)=`·ÌGA•¬þ‹÷²&MUdb¥Mx©µ±d+8-ŽTZv¨P?tjäÎ+Ôvží,’ R:'µYÐ_<mQýÓËð§iE!I´¬…ÁªMi˜‘/˜"䙑*¢ …V#õ7í'þþ•ù{sÿï©ÀBÛg(n¥RÒ㬅05-GƒÉ¦ˆç’H¦µœ[Æ{$°êvN‹R‚Ù¶Š`Ϙáj ÜÄ ýB°”½ú¦+WQ,¡Õ4‹ ¸á¡ôü–ß÷`§1Ù§€K@oÖ(bˆ-€¡kˆe1 qb# ŸþŒá'ï‚[ !þä9·™¼ JéÓß Ï<ýûÿS}î“à\¾ãÇÙ.Üøú™o@»e._03SÇyã±,›¬$Þø6HÉn;@/M`£ÏŸÀŽË}Ò­À2D`Ý~Ïz¶y;€´N‰²cË-®âtm,¯€Ö`n‰ÕÓíâ D@„EPÅ.çI!íUKÖ¥ú<˜áaIf‰ÞŠ©˜‰P 9€(h)4áµh„Š™ M@±ÄBè1á#¾Í“"ŽöB;S–fUÌå¿4R¢†7läS7HxB¤@:IIŠ×éËÒ© è×-HÅcùLR:8º¸×GX”l=DÏ*°Vá”ö£-©À"Kh;á’Z-«âÎõ¹¶lg!¡N\V}¿¼óAàˆ§ +Ùºõ”>N ,oUfÏbjD K”–beÃíñó ,g`dý)3ßtäHÎ.JÈT!\’ÍÁ‡e‡ :%ÓƒÀzÝÄ ïŸåëä+sïç¬bá!‰LÛ&lSªÈä^‘§˜Ð0‹T~4×ÑA² 2«"ŠBÞnë”LIÎ/ ƒt9Iè›Ø¹°›q˜þnºj*² ¬t û Ôyn$Mb͸3Ç:±*G(°¥x^Å´`Z€™v¼9.›L5 ’úƒS“ˆ"}æY0ÆNÞucÍOÜÁvíáÇ’§¸=+áôCºsn‘žb›á>úCôE”6#C¬+Ìù³øÉ;Ý;lï~Kfv†B-˜ëWé…þö7ÍÜLü_ÿÀ\¹ÄFÇäü$¿÷¾î}²‰ô™g“oyVýÏÿáþyƒ±,!Èwÿ¬xÙ«ðÃÇÀ¹¹|Áeˆš¹Y33~Òg¦&Ѩ³Ñ16ÖU»={ïe®]1s³¬:ÂöÜè¿cuøÀéG~å¹?|uÅÙJ‘¸Þ Xj¾ìW\¥­˜¥E~@[‡p!V}Ü.<ò½0^@ÆEóqÃm ûÄK‘rêjs€æ×ºUV°hê°æZÞ—½@ÄÛ³f.i• øF0\ÓÒT c!t éäfì-tbÔWäs×i7D:†¹,`9Cip+µ~NÊ fõ2Ë@!ETB–ùÆX–orª·ÿ\Q²‘ö£K)° Âg‘ï‡ o˜Þg‰G3­ÑB(9çQ °*Ùµ(°œÈÑm>çïõ~î½ÞϤ°SVƒúÄë[žr RÙ9+Ò x±6ºâœ”-ù(zýQt=:§€RV¤X_<ØuÊ€ ¬ +wtߎ}?süß{0¿Dç±/ší±úŽÀ2!€ Ïð§2u¶Ðrûdà" ˜<’é‘ò‹è! •Y»¥;v4`g¹œy3 q‡ê(°T”Ö«¦©p¤fTôIt“ª=Øþƒæây}á,?~”Šþõ?ƒRÞÏý"å“ÁúÙá¼ü ] ,Ê’`·ß½)ÎApÎ\˜;óüâQàø:î¶eŸ¥Ój³»ö_7ê*Q`%$0ÕªS ­ F §…ð¡‡km¸‚æ¾ZYËLB]¥ ,ÃÀ É&Û‹(¢ ò9ec¢`ÑÔ@‰Å÷áƒäda~Î,.`qUGäüdßûj6ž ¾4 óÌÌ´~öéøOþˆŒzÿðÛ?§¶ •?r\]pEA0 a…'@§È]»"cJ’ìB³X[/UKE+[ê †Ý^ÝÕû$~üèKÜëîHÍå¼$ ¬­Yõ ´Íù¿Ö—äT9U`y«Ê w!S, –Þ2Ê{Êe0¥ª®UCúÒø¥ùðØ®i‡kP`ÙéTlžfý¤ñT¼ZÐ<6ÌëÒµq€iaDÌûI%ÞùV!K,JÆ’¸nÀ_YVÒ)ËÉùD¡‡p ¼ÞÅwí=þ¡k‚¨s9@•¸ BHå#F¼ åé΀ y€gÏæß½óÕwŒe¦¬zÒÔcR ,zìÁ0Zë¬?ñFâµ8 Oð}ìpW¾ç kIe%X©î¹5:jˆ!:f` ±,†ƒdˆu‡¾|ư}s•^øÑãÊÆˆ›É+Øî}ü%ße.=ošMþÀ‹“ ð>HX E62šDhê³…FÝ4êhÔ—ÞÃ:b[Xìè üÍgI—TôSmH~ï}}Ü0ÆJeS[4õó<}þ 8ç'îì±åÖ€flqôuU§bZ žd„/ÿksl×ÕÖ<ÅF7äô5Õüåç>¤˜ú­ãÞiDѰÿ à}í¿€))ÁaCg¦+‹Å¼6­!çt À«æZµ+¨h‹:€¦NonÛÅ®úªX‡ÍK¢å+•ÕÓ,±ú\2lPÉb^ÚÌ BX°£v¸&çZ•i#bm;¢•Z¶T˜^GÌ<´+HÔ²‹\èR`%6z”'¹€æoDú µ¤æk¥èd`Ù'§QrIa+‚³Šxeü—LÙ-E"Öf!ð®£hDQB`­¡ ¡#SVy> œœ 6E«ìùHT{1€…ÆL*±·ËSNùéŠ"?™áT«té¢9¸??`«*Kãî ‚*Öa‰¤¥Qà€ˆÅJ¶Œy™õóÞ\‹Âÿtý“3cg"‘R` Ì»$Ä=Õ­$‚JhA{í°àaAêé³ì™'®‚vSh[E!]ÀJ@¨¶ÉZSú©kãÏ\Ã3µ™—/M`ÑÃIrR‡&=MYVêÍóÁé¨4¾yŽÀjªîŒŒ´1iš \K*ú‘'îoèI5g cë-òàš> é™+!$ã›G`¡T€ÕXo®bˆ,†ˆ%0 qbÝa.žÀʽÏöB˜©I37›(°vïå/|/|p ýŽ'Ûµ‡8¤&¯²#ÇÌógˆu`¦&oØÓµíÕ~äÓÏ!ŽÍ•Kô&±W̹Ófú:¤Çöìïý}ºýjÔôsOC)väz­ý¶¨ì]´Þ ,ªNÅ4'ÉIwòT7Z°OHœëQ¢ÀŠXŒ”^`Q×gÆÎÌ>ß²èlyø©v ׂ|FD`QEBC®TK(šX X0.ó½…*€H6aŒ"¡<Øxý xy`«R¢³aÊX.h¹*\V²*®š¿qâïßý.š)Îʳsf²¡õ/òz›‡{"@žÐɹØr!î,%Ñ*poÔ&­³Ë®Õs-°F¸Øìý%á,„R­ŒÔ¸S;0{ÏÑrfu½Ž ¬d?‚Ù=¯AÅœkýçUžêwò¯ùœ3ÍÁµáš)ô☘èSªò¨Ž¡Ômí´EôäJþ"§b+tíõ‚Ûò‘XDÌÅ,T¢ `4¶·T=1ºƒ²À”l¹}²4Eå#S>JÚ¦âùLs#â6kÂæú¥‘ŸD`i¦ÕTu•Q©‡„Dÿ•*Tº 3YwHX’C";Mµ-秇Ðd¾eª"›ë·&­"Ý.'M_Ko’…Ð)°èŸ›ÒˆõàIžÇßcGlÇ®ö³V5ÌÀÊ`˜Ør`ý3°nê1¿e±½.Æ¡«'¶W'n5ج#ù8ç·ß @㫎À|·¬:ÏÀvíaÇNò»N‰W½>sÜ«—õ7¾ªŸþÆÚš?¶¥ ¥2Û½×\»b.×Vå žø2Œaûä„s¬\1€©×èó;ïÝð¯´ÀXw a+V¸’SÖòVÛXÊÚdfãä6f!RzK8Ž™vc¿P³ÖLXG®$µÐÀ£@‰Xs,•æ© b Ôìôò±µ{ËU´¡ü¦6†êy¹*owˆ£¢“-§d À‰ÀÒšÅ|æ1»¼÷“U±[vŽc”^ÐØ¥­ ‡N`òZ…ð@Â(ûß»-ýn+§À˜”î€ia( YñæÖÝBVæ àɋݣ»W±CΟ•:ôè‹{í-—¾FxP­Õï0e!ܘJ@РµçPIðïcÌäÆS}JõQ¾ÀˆKÎÒœw9™ætOå÷™K{Âýù… P`]"ÆeB‘x¼Ð£&õ4HXÒŠ˜&¢JÒ¡‹„cq`üfCÔøq!Wá —>FB¶˜ÅÆñà:!°¼°jäÅv îž)Z Î2¾­îrFûLk™v †±S`¥ žˆ©|C‡VŠÀZŒZcAö±×I·6­ ¡ÀØMâ>xÒ;v;Î<‹~ñ7 «ÎÀÚ˜æl [n¬€[F%ºu°½.F=,UÙ Û«·¢ˆ4=ìàáîù ÐO~U?þ¨™Ÿ ÉZŒ±ñfò*Ûµ‡=Éöb¥s¿ôêkgž?Æü_ý-KUœ_;¶¥ ”Cè³Ï‘‹§ª 6êøÝ–€n¿ô3ßÄ6 °‹Ý]’¥ˆ‚sfËÚ[ÈÕ`Þ$·°T«Ëe`Q1/³aÂd¹'üsq7É4Ú¼ k+#³’LÁÆÓ°«-vy aÀ%p=Ù¬‡‰ú Y[¾lâDzK#Ûp×14€€saåã˜Ò’nõ^â«•ÕÀ×ë0£ñN½¿õ1ë9îfPð~pj o%‘烃۸ñNä¼­ ×ϘIdèÔ¨õÓqÕkü¸8v¾VqÕCe9uÒlocU"¯þRµ$ P†°ä”ƒ}~„¸§X< Fg¾-M—+;>I&©;±j['a|.íC‚G'Ÿÿà¹/-ÊYd»¦ÅXD÷{«‰¶ÿ5nIÛ\é€äM›7Oä*a¹Q ¬2¬…p–爃:÷nRbÿL%Öó”…†™Ïz(°„ ¨   Èò³SŽŒ¦:1;X&T<P2%¡}6ðg ó7•O5«“DªNb(šÂö/žù~áÌtÏÚTôÃG2ÁF©i*)Ü‘š¨Û:¦4½¦ÉIÇ2öÀš}ü@z.!“‡›œu«Xìà¶{/›ØÁn[Ï’Ä+†(¡5šËЩ¸•,„C Ñ òÛ]%:Ć‚´WÃ!2ĺ@ýíçôsO³êˆü‰€ž¥¤Çï>¾/Þüö•î_¼ìUòmïLs,âMß/Þø6ñš7ŸysáùÕ´~%ØžB€9*) °}ùý/ÆèÛ±S}îSæòì`>º¬óÝr–&Üâò+X¶(f+[*üÎ…_úØ…ûßò=7u ‘¶ö˜ð¶³ϸC¼ò5ô?þ@„­€sµéǧ.Ì´&±ªe¿’ÆõÂE5ôM©u’e-„=æÎ/©¯>7þå¯Î_ *á,KTù‰È‹|(Î, wÚ,Ì›…y6²ºmL`%(f\âÁ—ñ»^€`£Âƒo(Ѽ©CJ §(–ñ¥™³¨@[ö%°’¥ˆ ЋÀ¢jƒs:!°ŒI­½f©$Úeå7Àu[wJkÁ&×tó¹ùiÆXCÛè(ÞàÁKd\áe†Y–á$ý ²ÃÀL·›dÔ»[œ¸í3m,–®êG`“’ÓÈøƒ¸dЦh‰ˆDª U‡£ege㹑i\:\&ZU¶•!C—^¦;+±©zñ¥O9l#rMX± ¬N_7 fR$Ô*àÒÁÅÆ„¸;fÓÙN3[êS﮲žÂÎn•{a.­)UâÔK4Ù¸*7ªÉ.ßY—?ÕÜúÜæ÷Væ¦XÔi !ÕyDz g-±»çOìË—˜YG*ÅÉ!NÆmŒX‹À® ‚oEšÖ¤mYyÝd«ÖP!íx2žÏE•v; IDAT‘BÜîÑ4#þVãF ¦=h2“5£61iÎôí&§ÜìMB` I­nˆk!nÅÅÅŸ3–n2 á¶D¥@ý+ff¿ãž~•Œ–ÈÀŠ?ö§æâ9ñÚ7ó“wm\K‡b1ä&†XIˆûp ±v´Û¦¶ÏgÕ‘e¶ Öÿ3ÛÈL_gGOð(Ò§Ÿ1Ï=ÃîÿÎu?ŠÃö'°rð6±Qýo$4‹,êdÉ¡Ä Xߎå^ì÷u{‘ÛN€ . {W!LÚÀ´âØpÍyìk¿ÕŒÃçë3ðP« .†m§Àr¸f¦þUô{Ðü“X5CÙàA¦½Zc¼L‰Å hžh´j» £ ç¼¾ìŽVÇÅ\Yë3Ñu¤Ü=iJÈm®ŒŒA…üè4%TUæúÏy¬ÒX´ØóVu5•-èuv¿ýt,„èZ´q(ÙÕ{Õ_%+A¤d¥Ëfµ ¸ânëi!ÇÚ¬T¤ÀrÚœëÝ)ï=ò–H¿i|çR]&âBŒZZ¥è@âDè•ý=N5âoÔT¼«P¡z}…,„˜òˆÀº{¤w…4CGÍD}ÆŒ{V`¹ã:Kì÷½Ä^nÍ9R RBsÃ5¬F541Ù ÷FÙ‡€‘I”Ÿ-Tz½]@Ö¬}ºà@ñð4’#O«+ôQË8V2wÕUH“MÌó ¬!Rç5² , AÒ§Èd¬Vÿñ…/Kðw}ëši5ï+G` ïûoóÒåÃF½"3œv €þË'ßü'Þy¤<@1=§|Õ—ûØÑÚ *Ï¢—î#C`ñDÞEîÅ@x‰¼"E`}ÿ¾~Ìü½wî|Uz'y+¥Pˆ!•L´"Œxù¾e<ÖOe00bmxOÉ̆ÁU9üÖ—¿ºº=ãQÑ.û=êH®¢SïoÝNK2°VÏéSQH¬k«Òðì)Ú¾pLå>ÉbÏzôÈ#$»UlZVä£ksp¸?ÄÛ(Ö& ã$WTâα~ÂÎÅH íÏ%ÂÔõ/Râá`§lVË û^´ëPItQç]#) ÀM•1brjïJÐÜpÕŠãXk[§d¬Ù¸Þ²Ö¿©öTnÿ$›-p™(°˜š &飳–ý5iØý8ë¢Íi2,h›Ð¾©xLz‰¼+ó«t©±ðhõÓ_¨~²­g¸;™MêŽ3S'X[û¾ÿƒg¿ôëÏ~ôÑë}ó Ü•¸à‚Dù©û˜Ëûm¹„ËÌÏÂÞpߨŽý8DëÞ‰zè!Ü l¯‹‘|Ö[ü‡ìÆc{u♹€íع¹Íà÷Ü'^ùvÛÆ†5Ýt ¬›´ªi˜fúŸƒ@£Š5&ZeU¬]i,œí1”cMfáqÓ;Kˆü€…° €+Ÿ®€†Š'ãY;0>­®)Ôëq¨»’æãb"Xä¢Ç¼´äaL–¡¸jƘÞ÷¹€‚áj1j¢€ú®‡ÊC“xÀÄܱWŸ¸=÷iÚBU¥‰“¶¢(‰[çÂf®æcU`ÍÅu÷»—òÄ=ê(¨½:jq)±F<ÙX›d¶oÙÚZæŸsÄTã".F˜m9‹BÜ™äè¡Àšl/¥t¹±pbtÖ Tú0ý‡n÷9gÝBúöÔs¹o©Ó3ãgÎ,xé®#=7pWâ6‚ 5s3úɯèþq­:C`¥þѨ# qXÛ±‡Èaƒ:qÈMÜ`l¯‹Ñ’œÃQ’ÁöêÄ-3uÛÙûIí ÛPì?¸ÑGÙRwzCt@÷ë-fX[C¥0è àj+ï1!têI%U{X" ýV#Šæã¡|¡€VÍbÀ>oBj@-n»ê„Øš}M™)WäÃK{µ&‚2©¢œ‹Þ¨–Ód¥,öIªpõ¯1úþCßß=¦³ ,ÉMg[âÁê‰{æ^ú@éd¿rÙêqjñF‹=—L´"P½¿Wî=æÙÓBhlŠ;cI‘Äž’™ Åk÷ßþÚý«d¯ÖŽ*Z‹ã/R ’©ÔË`úbCæUÇl–lõIç–ñVoÌ,˜Ñ[%°ru 7н"_¹)ÇMÃw!îëWïF¿N?!A 㓞˜R`%Œ†‹]›V¬Àrý8Ê+<,޲¼g–¸¡kspÒc‘Äi£n þù±wÿZé=?xðþ~ø©0xâ¡2 ,÷Ci§Ç!¦HŒ¨£&©ÿÐm!Ìóà¢k¤ÀŠÛ‹q¦& c0¦&4XÃ…Rx¾–U¾p $d·V{ Ûš¶NÉ`>êôr}Añ¶>ld ,ú¢AC]e ¬y•eÓQò¸â‹ÓçÃÊl}äÊT«o9‘e‘h]¹žjÕ¿~á[³×c¥hu[Ïâ<ÐãyÌ&‚Ç¢.½ÃV˜Q×vàsùBÏOûX)ÅÖÍá"Üîý86 ‡âšMÁöº­Loˆ Ö½ãÿ¿Ñ¿þu}úÛë»Û­…DÕ×mp3a¨ÀÚøLøXcäꮹê¡Jò “,„±ì,*Q8HU/k!#¬`NõP`͇íI=@2IÓº ¬†ê¬m®…sdVòŒ3àrkÖTc…¥7UhÄ O Üs’œ1f€¶Šà%qÚ $sª…€ê’>©Lìí÷‘c%˜æàvU¹¢)™½X¢ÔâÍåÎ ¾·n8zÂïâNÿ´[ŠMºx>¼)ÇMÃ…¸¯cºµX!uFïº#¡85/Ø0¦ÀXc+Æwýø3Ç_¼¢ç6 µB áƒ;>ˆ÷­´= ÉØÞÒR„Z:K‹.ätK§bZ˜Ô69pÚ@Ä;ÄØy=X&Ã|Ų [ Â7AXŒ[±öšéK"ùʾóÐöí°£âºØœ½k¼s³B \VÒ°vYu'br~–¶éìg®ÝDÚ˜ÿ|î‹_,|´Tc¼ «Æ‚•\ùBÒ˜+;»`k^'ÖÓÍ ô‡Ì´KŸÿ%àfÚ‡'Oªôç¥Ù½o-½ €á1õŠûÕ µ^,_A¯Ÿ³MöçòÂÒØ 3êZÀö`.õ&°t ó³÷§¯³ƒ½¶¶{? ëÄ!uƒ±½.F°œÃQ’Áºw¢~öi´šæÛßÄñ-‘…²þˆB³¸éõTCß|*°¶ˆ©)² Mw½Îô ÷®'˜…‹3ÍÆEÀ"zXºð¥ÿÉD’ÒÒõÈ:ÉSLG ô¬Þ3å:_T“ ­1|MöÈÀꃂð]P±ˆ ¸æZ:F&K0L‡¢ `L¬ÒeàÖùÐÖ°ãþ9 dÿ ,*ñ^«ÉÀê4’9V"K`ŒýycŒQ¥ùtH¹ª÷툢”ÄÆ0Í©RaÚ2ì²ØI(º„õøüû§õ;ª{ÿŠÒк}D÷ ™Sd PÐЭܓزeÆOVw¡ íµÛˆVEjÓj@#Š~¹öÛI#µàÙC¨±:®¸º°Â0E„-ÆÍ§®7F:¡ïîÝÍgí·.ÔæUÆb(‰“ç,„MžüÖÐN¬u½œäsχÍ>'ly¸¤­EÝ Æ+­A³n–ÀúêÂYŒ€©ÇQ»zmp%À—±nw°ñ Ц¶hꋬœw"gBÜÓ¯çç°ãw˜™¿æ¸qscHc ±’*„ÃA²‘0Vók®]1‹ ¬:²ôöÛfvô‹|kàF¯Y/8”MÂlÚD’žvʇZ ¥Å¾â€¶LÏ„çÃñÙkÅ…ž{L$oz\z¬·…°• ­ñŶàãçÉâ4€l@ùÚ¦« ¡æÝ¼¡(<ÁMÛ¾.Â.’C N-˜™†ëØoرò ‚‹ ¢8j§]Z‘…0çìKg`%ÖÚ,„®†]^ŲUv›;~TZËá¶5\_xë§!ýWÇ~b{ÿ?{o'ÉQ_‰¿ˆ<ê®êû˜é™Ñ\ºG]\#$„À|¬1Ø+ þ0Öö²Ø^ÛòÚcó1F²­µ¼?ÿ°XîCÆ`@ tK#ÍÝsuÏô}Ô]yDÄþ™YYgW÷tuUu×ûè=UyDUVfD¼xï} ¹i°‰EÚx©O6(re…íÖk³v"Š7+pSh±«R]5–ó峚´ém#{,¤@¯ °t—À¢¶ÎuÇ!aq!€\Æu58”C°¦Kg$#Y]¨fždèf$ÌDÀ‚Q k—µ ï1ÒOz‹ô•»^ÀDd™¡“ò'XDÑCùþ¬~ñ…äôŽhs˜zÝ`FKú)SuX*Ùé<³xÑ[€I³KÈÀr ¬ŒÈáòÙ+ÜxCˆY1ïìC’K(6oµÎ\Ò…ö&­B„Þ>1uÉ$* ,ÿßþ,/ {¯àOü¨V~V]t:ºœ.VDWµð,!N'/½¹¥Íi $…ÞþV7dƒÐ‚¡(ÅÆ7  !©Ÿ‚ðª•Wìæ³Ê€[2ŽÔ€%eAžè©è¼U¢8n¬J ¡/3HAj£t¢K'œz k}e–ÑUªQ3ô$¤èÞŒ1$‚pI%YËŸ"$5SÒÏ2Œ4ò T¢LE¼¥Õx£ÔR‹‘â5’%#ÃÕrWÑHwöX¯Sâ~×¶+þdßÛ~y÷Ë/åtkÆ¡C‡Zr^?¼ìv­ir§6„”æQëzY¤oßÒ/±jf“×A#×Q! |™q›A7ĸä”âûÔŠ{ïËGå+ß 7¬ÐŸ ïœÈ-)¨ØÅ˜«ÄI@A9nP 1àTW„©!U£–  gy€ À’éË}ç ü¦HN‡´)¾WmC²*Ô Ȱ‚)lZ¶ÇÛ.¨ibÀ™Â Ü0¬¨/+;kkN_#;颧,ÍÖA•'9‚pi!Àˆ߸?G‹,ž³CDÎj¨ßl¤aÓß_”¡ž¨—é*cü¥µŠÃ=ÆD:JéU×’X\ÌÏŠóg6 MÅ&¸Ž]¬ûEìŠkZ‚κ¹èÊô*°ÎQ– Q||“º—ž­¢ÀÚBÓ¿v† @åB?r)° ÁP® …"„S®2Í*rªV ͤUúe@D™Vʰ-ÄÖ0Å”u¯D÷;év…û©î4¾” ZÔ¬’ÎÕ´ êÌÃð)°DI\ÏÜù[#ß@%nè5)S`­4-9)aÁ˜O%§(áKpŸÁç,·ÊS H`µlq Í ÕV×/Ľý!9_…f»b½¿½ÿõïÚ³–+ÒÈuT@›Kß>ðž-^à—ÿ§å©±hYˆ^ PBä“S¯ÈÀ ¸<µjŒjÜjƒ†0„­„<×p0vWîMw?@eAv  ,ÂpK&}!SÒí)°3TÏçu65hf@Ž6çbfŸl €Ú€ªéù(j~RJMT•Oo¡»Œ#@·Ã!0of¤õ/Ì" tíâæ*°¸j@*°\±°,+r)ÔÉõÓí.ë+°žšŸ|rnÂnæÔÁ!°`g,s±+Øå{;üá7²#©†ûî»Ïÿ?|øp2Y\ô¿åÿ;™L>|¸ê[­:‚,(§"‡^ÎVYÉ4¸ÕHœêxœV{œÏ^˜âsFÕ‘)ûíc/‹2‡{Z˜™“§ðãÇâÿi# @*˜" 4 Lõå9g”·² 2¼Ü–W TÄVä÷@]7ÆCN†:Sá3Êåç—áÎ S…ÜwùMþÔØUw›÷€SŠ“ÆÕ^‹;—“4™RJ`5x5½h*kÒ±©wÏÝÿ›§.Ȱ0FW<êþf&&åß!U÷¿uôèQøª;v´Ö6æW}ðàÁ–ßY^>‘”¶ùÝÝžGðòê!—ÉÁ¥±ÚóS¬ãäÓIr܇R}º³¹éYù‡|L©.ɵ†6xÏ"E(’2£F(¬iZ€­ŒfÏOU! _r–$°ˆ‘L&³¾)¹zá=`c$.·ŠGÀÒ›ØÒšgd ¯Økú®·î’Ÿ"jö8žº€âÓ»ÄBxøðáéÜ€ GDÀKÛ2Ð0C˜´€µ^M)ËÞMf»v¼óNÃ¥Hž?@·¢rýãô¤!Ÿ³Í:¿‡ÿÅÿéïÉ?-²õÛ°æß$w›mqóãç¾ú»™Oüÿ—Á6¼/9‰%à#°üG(›:t–).N‚ÒL¢ß9B,àÂÑ#ý=È'j˯E÷—r„¬cD.ˆzE IDAT)ÕAßC§AÞŒò)¤Ï:—/¬ùíð)ÖýesªG`ß}„?÷T#mÂ#“É6‡ÀòÞâÏ=yäÉ'Úö{hðR~%â=žÌaƒÛpß}÷U%jÐ4ÖæÆÍÌÌìÝ»7“ÉÔߌ·³©àB¼wá~z¶÷“»Þ àyóă©Ï•mÈ ôÚw'nzÅà®:Gûêä _~¹wy÷Gö½ý;S'?§}6œùøÌÛí_ëùŸ8õïÇ{ð‹öÛŽì~ïÅ¿àzá¾ðFÂźŸ>ûø£ÿ¾méêéðÈ«ù˜Jÿ"{ûDañû‘G\µü²ì»Àó‹Óò‡ Wej>À¥Ù¾¿Úõy¨ß8÷€YŽ'ÇÒáY¡™Ô =¸í7¼{î~ñÊ»®é¾ïäÿî=6°´¾÷d"¹ó£{Éÿ¡>wþ™ÆÄïíóÚ¾á¤iü÷ÔÇÄ“cÛ{ïGN}í\ÏsF–®¼oÿÏ4xùeèYÞ½Üã”L¢FäÝ¡·=ÈÖ3½Ÿ¼ì½kkžÄ™ôÒG|ªÿwUß=oXâwžhdß¶À‹ç ¿ò†Þkv­=lsàTjáãæßøTßïl)áã¡ñ7ñäŸä[ò9 à÷O~v®÷dÏòe¶ïk;Ë¡é3ÿ¬~ÀeË/9:ÉÙPjø{Þ`"³ü§…¨Ѭ'î½y`¬l÷¿ô¹„SFö·´_û ëï”Bä±Þòkç{Ÿ“¯Ç“;?¶÷—¼{ö# üUé×Ý>xùŸðçÏÿ-¦éï™ús¡™¯Ï½ù‘ðWbÉíû±ïéÄ÷/[~ɇ÷½Ñ¿ñÿ<ùÅ‹½G®\¾åXÏãòtÛþàòGÁéßýŽÛ°ï?—8´géôdï“×.¿ò"¦{N_Ÿ¼õ¹ÄÔ\üS;£ì³|êÔw ÂxçÎÛ{õhï?û -jsˆ­ß’?ø“ظ+Ï¿>t`wð—ïîýÒäáG‚_é]Þ Î²`öÕÙ»ü€ÿdü̶_YõÈΧþ{ཻc½uÚàÁäôЀ×ß{Ý5«rw±ÅñàWÆ/šýqåwß>Ôê¶tÄÅIëÁ?‡Ú¯ˆl!¬ßÎÕ_y.nšËšú;†ôßÿ¨˜¾hýõŸ‘þAí7_¾iÿý_Ó—ÜDoÚ¸xÙf€{ÁþôCôò«Ô{ßÓê¶” yŽÚŒƒ6ŽMLK5/n–)ÎR³Yj!$¶.TÓˆÎOcþTfG}Ërl À¾è äƒKP€«{œûyHé9À-/—¬íR ¡Åm*TÊ4޼¬ŒRt¯ŠÖ°æølcšÃ1J¡HÕ´ Š’ÐxÐT¡S¦3ͤ®q†ša¡˜ýá\m”SpªÂ²ôs;_:Û_çS×GD­ž¥¬æ÷ïy'¢øÑx »hf¡Bå^¡ÕBЧj)cíe`qøè·2¼¼ü.{ÕT(´Är»¹A…ÊJ,„ÅŸ–¦xO €z _HT Ê'¤&TÊDX\¾×C(@¨c €¸Z…"‘9Y§½,'XÝð…Ly1ÂAù€‹¨åR-fCÓe¦U\ à„3'«üž "`)”étiʦüñï '*7§x@œF¤ÿÝ„%æýj ®û¯ /Fžš9_¸©>Å•’pF¸íDiÂE3 ""’–Žxîô¡VÓB˜¶V5XáÀ7.¾øHð+‰ä®îýÅF¶7l×ÿH˜üBLÑâL®fÀQ`eRö?<@yËÛHŸSÉ?Æ“Z9qö4ºËçKWáy]t.¼w¢ÓEt-„kûî#ò[ã/<£l æf¤],.ø ,)¿"‰^dh¤˜ã ‰åE~öT¥Ó ,™àŽ-S‚-¯BøÙÏ~öU¯zUkÛÐrÌËøp3°JCÜ»8ýðÆåµ`»Uìˆõ¦ ÝŠJ #r›íA‡{rÒÍð3Ÿ}ßÄ'¿?=.ß’UU( ×H ,¦¼,ó]aç>é D¼³SA¥Eó::  Lq"¨\nëÁíü›‘IÙ—œ2X¨QЯ[-TJ.®Àɬ®&Ú‹³  dº5žŸkÛ¹ôƒ¯Hßy0{g­ Ú$˯/mtù#ä]öjíhä:î  ,ïÝ­n߀ö´ò餺7²¿À¥gYUP’“µD5Ý=¦J™ ÓD(¶¤{bzZ'®„¿˜Ó‹ _ÈõžŸœ ÄÂVÙÛå„Ó°ªA2,’Àªx*†I@–¤¨\ƒ/ó~B\0bsgé4IPã:Õ˜ÂæÄ0 Ç ×L^9 ÐóNÜÕ5(Ú(df0€•Eµ(€|lÖ¥Oç¡§LQ‰*#Ÿ$Âšî…¯ï‹ È?zÀK#W(WERP”k^E¬$gMœ®ðéÖ â‹o÷2°ÔUU!t'”Ì/Ú³À:(°T½w÷ËÞ±ûæ²×)Þ6UÏŸ?ßâ:U"L-.Þ4r_7zùŸì{Û½»_¾íi9ˆ7£Ê'îój¸ ¬K °ÜLjFTùÐP’ ¶€ë€¸VE•PwÊôUÁ)(ÏÛ–I ¸•^½æÝfÝqsú5{cAUõØ^ù$48ËHýSòÙKG5}YD (hYŠ[nU†a4 ‰t–fŒR¢kÁ’G ©µt±häüÇänºùŠÅI¼š‰(gpº ‹Úpei‘Pœ ,o¨Àk’Sw–o˜À’­å¤aË]„Ë4úJV;ó™Ï\{íµápøÖ[o=vìØ¡C‡n¸á†lƒ‡¿<õ­ÿã¡é3+oºV|mò…ÿãߎ?Z3ÏB"Ò¦Š*„RÁ$a ëKçüä#Í«z4ÛW…@ÌîA^?|·ÍŽhœÏè2èWD˜²çÁ AUxqUõUP30ô ¯LgZ¥@‘ëÿ~V!ñ`\®ÞW­á%_dÔÂz¨™*áX>á•FV1 »¡ÈAZ2±œ ŸãͪûàYÛ„À:pà@‹[ÄõÀŸL,ÿÅä²}âïD~¦ÕÍéH´Ãul+8í.û£ù:GO¥:ÖÚÙê¸æ<Ìu¢ ³môàÞp1öBa.9Ω§Õò£GwX”©p ¯´eXÔÎ÷ÃÇË¿m× ïÜýÊž@niBo“ÙYË@™®» ,VC£!v @^ ––SR¦ž°#Ü#Õ‘6,鈕ڋ…¼ÿ˜Ëáq ÕXúÐÇO>r.½$¿”²w½I`@–fôkQi²öúP£6A–q-„…†-„RQ%&°,ŸKš=í Ö&¹}–òà'°„ÈçD* M'½¾RßÁt¦ÑhAô¶Ä&¹Ž[ë{»üU«ÐY7£«ÀêþLJPÿ"ŠÅ9tl½ö%Øã? ÎvÞ-S`Mœ@ÆœøzÝ „=ÌÇ‹…¹2WG¶ÅÔ$¡îgÜ ØÐ ¬;î¸ãŽ;îØÈ3ÖÁEr1“¸0k¢Ðô¼±JLN.¯öjòâh8eæzÀ,µê¢x ö3Ʊ™Þ‰d¬j–íZÿä?ûÐ7ñhjtl°8¾¤„ü¦þ«EÙí«À’X¤ îqlQuŸ`*ªöÅo™~—„%¡ÚA† ©t/j¾9ÞÏ ½ìLvßî¡þ‡æ¾Žb%™8#ר›ÁªJK-U`­ŠÀò¤gáR‹²®Ð›õÔ „Û»µœÀj(ù œ›€É—_„R÷þ—V·¨‹Ž‡ÔinŸXªÀ*±j—Ö4"T¢–e¥Pì€-¤¬ú£©?B€£f¥Lc0R–ÁTÀv>v6k оÊ S…ê0Vƒ3[fêqG%(“U+ÕQ5׫è­LPA9À´€B0ŵ8ÝI—t6±¥õ/¨è* ÚH-Z% ¬œMUUõ¬úŒOHïÙë²\/#Ò–X % `(G–ÂG`ÕÉœÊÙ¦ì¦ò+©À<ÈuAiÜ ,(Œ1€IVèPh¼8]O.z¯ûÍS³ÓÈÐpYOFb ±0'RI2¸ÕK”t±iPV…°‹.ª¢k!\ÄÂ<Ò?Hv^ÆžøêÇ|×±0ç¼íW` Á¥Ë%wHoÙ¹[œ;Í>ÿÏèM¯àOÿ„Ÿ9ÉŸ{’^~5BatÄÔØ6EÝDÑM†‡¸·ÜITmâh² ÖJV“è)Ë@……0(BÞß¶°mÂØ¨~X™ÅN]ÉÀ{.{Í…ìáò9Éå=Þßþ\ð|ÐÿËÉŒFUÝS`1E%d$ý•=¯,;ZÀɵlE(Ä™ãåûýûýÔY©Àªò«“Ô’P,¤ å*óæŸî—³ª‰hØ%°"´ #ùŠþÝ—ÜÆG83Ò qxêš¸Š§NðŧŨI` ¿»h(TºKjk´x£©nÖ-ñý¡dð@|GåîƒØšÐL½{®J÷ @í*ò+½°$°¤ÌJa2–ɵ€÷^vGP½«êŽ”«rDeš ÜL€€2- (° ˆcÍS+¿ ½Øy+’b“¤×ó#¬R¤›ØÒúTU À²YB`å]á•Q-ÕQÆAfì‚É9*Ø"Ïh¡âni9#¡(ÉøêF‹ä§1jÛ ËO-, +°DÑB(¨ €‘FÏÕY(±.'¾å9páX#åûÇX˜édIé¨.ºèd ¬–6£‹6‡C`µº†ù9è$ñ„r×›Ø7¾hñ_ ‰ÆD&-ü6öùYò$Ñë樂ëo´ÏéÂåàH%ùñíÏþÙ¶Cûõÿ¶ñŸæÁ'Î ;/kuC6[7D†Q d¢_ $e×°~còÈÎ??g¤½Wd]¤2 a˜çlV—z““ϦRµ}‰~©´ª Ÿ‹r‹…\‚L'ªùä/,Xb#P$$å:tHªÔê ,'‡>ömáÜ’w/Ú¦„]GWŒš“¥åzVø†/íf!E-Àœ‘å„©AµæMê˧ÒKhs&“ËU¡€ ŒÕP`õ¨ÅI¸ÝA…Ñ;`Æ€ K*§BŠä)»ÄB˜·=‹_•þQXi–ÏW3Ê4t¸}«°…`z‚Œ„Ò'îõ¡êX®±a–£çj<Ë`P.?”]± µIîD97P¢v–C` –X› Ç}“\Ç­&]Ä®¸fƒÑY7£SÝ¢û#)E½‹hD6 ]—œ”òÊÛéþ«äj ¹æz”ZÅd‰P‚^ûR‚Êm¯ÓëÈÀòæÿ¬¼á-ÐbjRÖ1ì,H$ÝqY«²¡Øº–\¶š©À2`ÀÍuªŠoˆï|+üÕ“ùiï•´U@EB?eÖԒ]‹À¥5àW- Ã>²<3žZ4ˆ @Ô ;c©åj&Î GŠäμyއƒÊì­Z‚Œœ5I—J3¹Ýhù¢‘€¾¢î–2 *ºü#ž•‡Œ&Ææ€HóE{Xlq ç™q$¾_½›|ÍËW;·ò¦› ­¿Žm*TÀ¢U2°Ö ÓàUÒ,E@èF–¯üÃ=?WkwbáZù‚4`ÖH V=¯º³üÀUYãÕ`vžKK“æhA™tpW†¸÷ŠPq=ƒ—·?Ì£Bª €QÛ!°T-ˆ€4/ÍÀâUÞ‘Éòˆ²¼PƒÀòÈ)'k6—Ô ê”AüÛPø›ñGÿ^åq¼|÷:6Ã2È36ânú>ìÝ-'ì6ÇHF·Ó½—Ó—Þ™åÎÆÊ2ÜÅ\u‰'ˆN&°6ÇuÜâXß‹ØM5j:ëf”ñíâΚUtK¢ÎE”VAÒ7à̈Q~æÊ«ïT^}§ró«À0àÆnŠIéÜYrˆHTÿÐ)w½ ÁÒÓ«¼ƒ^q5„àG7ë#5 bâ,²c `aK[©Ô15ñ´ˆ…º–,—žgÅ èY^E£ES+ƒ-͵œ‰NŽÉjÌqrÄïá‘ÌOŤ®ÄèDó¬ªÕ%¢p£… ‘$Q¥ ®¯°: ·.m‚KNEí•§§Ð•Õýþ Wå:Uˆ G[%Ó]Wò+ç—†v V‰Zÿåí·o ¯PÏTãAÐ…·bR¤¨¼žK–Î \•Q_³MfP@uUZ¹£Àªð6ê”[ª¬*è…¸—oÖ§Ä!³m0ÅåàT¥4Jƒ²(U`1KŽ>*½ð)Óéó(äì*Ýœ·&d¹!î V4;WPì‘\†ž‘œHÏ•X.wfÖ¶–AºWQ…å+d²ûÞÄ =½"—Er Ñ?þbüÜ)àù–jD* M#½å‘…—ªÀ²-¨ã!ì/þ«úö_Yã1»èâÒà qï0n¢‹D‡†¸ós§Å“©?ÿËôêëVÞz]á(°ú«ùI¢WÌ͈ä2E>'.NBÕèØe+–^q …Ÿ=ÕA+b~–útû.¬ëRkûck}Z?¤ž¿ äa¦ùVø«_§ß\Ã)lj¢65_pµ (XR%} ÄtÖºwûF—® §F0j3ÊP-JCÂÉÀZ‹V³ìq½  ¨aWÿ¥TxF<ô¸ì@ó>|øÝ{oýÔŽ÷¿{ï­•ïÊè_‰f„¸ËÈWå?°š*„£tE“‰Zj|[8vMÏPÕ‚÷ëÜ.X´Õ ÖáÃ-“׊ì96ñ%‘9€Æ÷ÉIh‘»XgG6óa,V¾.R'œ?Ò'×¹­m^ÇŽ€æ èÊz>‘Þ³÷Õ¿¿ÿ-×ôTI¹Z‘½ ó \«(p’ óòåD?dÁ "¨TÈšœÉüG•¨žhÉiÕÆ@^¨¼Œ¸B5kHOÀµÊ0z©öŠ+ayQâÒõœƒ•VÒ.È? 0L©À*Õ{ö@‡NX¶r"€ €§Ûeç¼gós(…!< a£¤’¬ ² ‹•Y<üØdw"IôËKàœýÛWÔ|1â3œ™@ËKÂÍÀé$±¼È_|Ž}ï[Å’R+Áþâ¿VúYøÓ?áGžk¶ÏÅÃ&»Ž[ë{;Ž’Ø4講±# ,ÆÄì4lÛþ—à‡ŸiÆê\Äú=€SˆŸ€t×nh5ECtÏ~pξ°–·üÉÇø?ÂÖKpÇ–&°¤k¥–ý(k1Å »êhwÁ­Êd‚÷¢Ì%‘ ,âf„ïŠõýáþŸ¾'t; ¡À®a~d„£š¿£¼Ì)¥Õ²=ÑTQÞ jر(¢&MÓ§» ¬ÚÖÎ;k½  Þ ¡Tu)¥ ¬mà‰æÃ=ôõwåÞ´+Ú+¿±á`|Å]Ör´/ò-`Õ¿ŽM›~x™vÝÿ }/•/’ð6"?UgG‘¿Èg¾_ù:O—Çæ²(4:YÚháuìøtÚê­ÍEA¢ˆhy- (ê)°¤}›rEv l6Üj†’i’™è•!îæ‰÷ÀÍqç§Ž ûéÕ×à/4…’køñ#è/§×¾´ÕmÙhlQ«`Ûr\»¢K–Á–l×jÁ¤öŠˆ¬U¥ÐҒጫ,R=ËÂ…eVHS#L(¾Œò“ †j9&uàUý‹ý÷oûÕQ¶Ý{+HÕ˜êÖÚ«V=P¢_Ê?êX‰D6„‰ŸÀj‚ *ܯE÷2°V9/}Ãö+zçu =ð³Ê=wåÞt gÛº·³*«=¬ú×±yVŠ/> B•ío Á!ï‹hD%òSlî1°’)4ìœÈM€¨´ç"µµDX­ºŽê ‘i¹ìуWì_ºéæÄ>a5ÀfI°Î^òéM„"I|ËU`É'¶dš¤5¯*¥{Vq=ÃYðŠ{ì÷ˆèÅ'9a Üå C-±®4©¬b €´[¯ÐT ™EY 7Ç”r ašåàV;¡e–‹%ZN`™0Ý64J`Én·ñ*#v5ùOºt<°ÙîÄD1}‘}ûëÔ|1Ö*œ]@úÊýƒòEå5¯çìÐÀ¶Iß~a¢‘JêÇ%/~íóÈç —©ºWĹӰ.)žl³]Ç-‰u¾ˆ¢ìÿ»Ø tÖÍèf`µº«˜š„«ËUü —ŽzÑ q¯e!ì¬%ÈUºïÊOJ¯¹”òSǼ øv†X^³SÕÿôódtûÊ;l.lÑ ,YAµxœ(&çþ(ßÏŸöYóØK´+v×Kjí+Tç,i³«p™-[Y)W²HÑBhÀDÑBAT…k²ÔÔFm‹cÕU=–Îõ˜¦'”bZPPÕ5æÌg´Ú¿–ÁPÀ-ó·„|ÍP`½{ÛÝëömøôÊÔŒÆpûèÞukY_Çqçs?†`´÷z( "¡aEóà&h5‘ `¢0ÁØÜcÊÈkøÒa>ó(‰í%ámœÆ÷Òž«ùò lá :ør¬k½¹.:ޱŽòfE½Ü3vÍ=pe"•”;y•4ªB>½îX‚Éx&ͧÀ’’a½Úâ‡çOôÔªÛs}×:4 ªüÞàÚ ûƒ°K ,ϵgWG9·ª‰­Òi¨ÙAEħÀ²€ ‘G@”„P¢"j*«—ׯ6‰7 hÙ¼‹Ç IDAT”¹pN]ÁŽÕ‚YAÏH[FB¯'—ëhž>øè$-Ÿñ~˜¡Ü€Ê, åµoÉEþì“ÊO½•nßiýÝ'Ä…ó+žN$—øá§ðGD:%«ªóc/x®‘Í4Òg²'ÃÒ×Õ_úUêÁ]tÑ8¼è«Îâ&ºØ`8ÂŽâ9ÅÔôêëØ¾#–šB`Õ„iˆLª&“+A‡ˆ©I±¸ Žm WŠDéî}|ü?r˜ÞpËz5¹I'Ž@ÒsJ¹6 í54ß0ä˜7z®2¾üì¹§?~ò‘ÇæÎ0\§^Y=ï3Æô|Ïø)³¦îÃæÜK»ÈTS`%-g@oSpb> øBÜÍÜ©€ ª`”I9¯[…pUÚ"/KÚLzÔ¨÷Vªw¨­“šÂþ@X¦¨T]½oaŸ…pUì[ƒ G÷%ú{Aš{«‡”5X ×B(ÐzVË òоëËß Cp‘Ÿ®¾ca‚à3߇à|é9ž:Îç"²çènÒ{Ñb"=Î&¾ÜÜÏÐE'‚·o/¢Ed»^OoOe [ªå[’t\±Q³<¢§Àr-„®;dÇ>¶÷Þíý%ïk"nZ"å*€Á`ÓJ-„®s°² κW “[´R–'ˆ–*ál%T©ÀRP-+…2eÒ'·ªµT FVânó*TW®Úx`Ó€^s½òº{¼À­&BHV1”[€¾ê¾¢¾å´w¾OyÅmdt;(3S+ª¢ø¿Æ@8çOÿò9öåÿdS`ÍNó3'­‡?…u²Š ìÑoËÿÄr9yÚÅV@']´òw"íUÚ\*°ö\Ž@…üFê•ÄâÒÛWk=ŸlÛ JÅôE~ôytÏå«Zù—^<þâ³Îé’Ë"•ܰ,ÅUŸ8 €^~U«Ò´ïм©(¸l`ü{ÿãÔ¿þd®¸Ö÷8{öTïS%õÈÛec_>B%¼ZàÒ¶áëN~ög:fŸ‘ÿ”ëÞÄÒá® »B]¾-7 RÒ=A9V#†C.¯.Äݽ·%5 ƒ„Š’ÐI½¶…B­@ýó:t¨NB>«!î~xì^`5FËŸE[Í`Õ¿ŽM„•­JîX}¡Gl c‘/=+Ò§œ¿“ÇÈN¢ÅÕýïQØôwEîBsZßvhÙuì8Ú+Ñê[®6–fж¸½ÑjÑB.t¢P ¨Ž‹ËEÉCÉe®˜(-¿è!(œ^Às”«®ØVGy¿à™ %ÕtÂT(ì“§¾ó¾‰O~êÔwQ¢À*æ¸G`™nСû¯§Åî[P. ´ ®†á:ЫºþO$gýÿô¬U(°ä¢itfZ5ª2[:Ølw¢¢(·ß¥}àw•;߈`ˆpJ €H¾¦…ÐÛ—\¶4 Ž€s1]| óÓ.oÎÙ“Pî|#þôO „ý/ˆT’\¶—^3‘m€BÌMÎÛŸýÇÕ}^eב;Ìþí+Îß}dmÇìbƒ±¾7£¯ á:µ‹•ÑYUWÕ9Œ§bú"²mLJn›!ªuÅâ<ê$¸Ðu2< Æø¿ €îoÔ?(Aö_ÀÓÿÚÿò°õÑßg?úÞª²°m>~„˯nuSZƒ-J`å˜7rµOãÌ|Ïøù|q&PP³f1ß j¾´œ\¾¶kXI³8Hõ< Á)#6·rb§¹jPí ‹”[©»š-½\uÖ±Yâ†R§£®FOèyd¤!e0PT`…T-î*°µXT+ˆºiǬ³{ÔW!bU ôk€æJ ‚JgXh )V!$­öÖ¿ŽÍƒ0SHukµsÜ%Eôlòën9B!²çÈN$º‡Ü€'XG?iù„È6¿âžÃ®ÂÕ†hÕuì$p €¬Õ½Ø7¶Ëù‹Ó+zj[¸W©P=–,`"­…Rµ$k•ª)°BnÀ–WqUsX:Êûꪆ©ûÕQ3`ìP:)Ò,· ¡MË;2)”²s²ÙžÙk§Õ&-èÕ#p ¬2±u§s%…<"¬q–äÅVQ…°‚že%ÆMy'’Þ~å5wKC_”g(*쀑†¢È”÷•0¶÷¹Ù7¾»äJ‰™)20¤¼úN„#b~V$—ø ÏPßú $R`‰ä2 CªÆ Þòí,Äₘ*»Ž"•@÷_Jù37)&¦‹õÅúÞŒÅ÷Ρ&6:ë¡ÚqD§XZD!ObqIKx3žoµ.¢C`Õ°¢K—ÁÁ"«%°= Td3à\$—Åäyb©˜µ¾³è˜È–ª·¸j`Ag\%T €n‡ØJyBoàîøÝܱ»¨Ã!Ãk+KDÕ§x’ÕpÈg!T4'ÓÄ áª…°Jå—Qµhi6Gã ¯‚kÍÀÚ`8XÒBؾræBX’ÀŠU¾EBÃD~¦úŽùiʶ»¡†ËJ -.‰-4q>ûC‘>%2gD¡º!±*øò‹H u”¼u×öÈàpƒK&¾)‰DÁ¹H'ù‘ç«ÒähóK«Ý…Ÿ9€îÞׄætÚwh^‰‡Æðž©?ÿËSßZqËŸúÌΠᲑ¯º~Bn ‰”wÑåþÛSo|“~§Ü ¨ªþ©”Pjd`¡FŽI--„Š€Ô  œÊx,Ê4¬D÷¼9ñª7Þzç`͇E}Sº§óBsªúáM½B¢Àòe`µ|2Ý’pa¥áø«|$0¢c¥3Ca,@0Q˜ Ó¡WË"ƒÊÈíÎŽ‘Å­Õ°ŸÏ‚•Bƒ°s|ùÅŽ#°:+$¢%Æv«BèÇ™ãN*Ðé«¿e\ìKô„cUT`I añ3VMŒ©!ÄÖ¼ÀDo$XQúÓ£Ã58Œ`n ÕjAâ=ÄÌ”8wŠBÄòbónc17 ÎÙ¿»Š}ãçÏ€rÙÞ&µªýÑ@ÒYP+¼Ü)q2EM_€Á½ð &í†pƔӅ¤[p '³ÓQwåÙ(U`qØð…hOM8€‹ùå¬mxÇ)ˆâ€uѬ^¬!B¸jqO•¿qtO,TŽ®x• +Çýn­1•¾„§x ¹+Õ ±`ž„é6ªk!¼epGwÑ€)2SÍ©BèG@J 8U;DÎäXy[X[.à$¸Wñ¡$8(òÓ¢0KÂÅr¹öñId#~Púhϵ]QPßH@«fEŒk!„»¯àl¨ å*°ÜÆHQ8é¬ý¸ âÊü)Y–—Z®% @#*â-ÿP!;cçP+(» ¥‚ã&œ&”¶\à± ãÀŠiüÕmÆTuåáSu !o‹ ¬´eþÛÔ‘ ÕYçˆÆÄx–RÒ¿J4ôö‰Å±8/ægeDHɵiˆ¹i( Ý€ ŽŽPY’Yd•B à ֠ÀËóbnF¦®ˆ…9ä² ”Dc „Dc"“ËK$ÑÃOC!/f§e#»h+¬s–g [ǃvÑ:kxÓÎD§÷ÈõX’²WîùùÏæXÕ/"çby„ÔÏÀ!ú‡þH˜¦ìV ™*ÅOçdl–E&-RI’èYÃÑV„˜™ÀÕ © À‚ÍÀˆ¶ Èꄪ)(+XÖsÙ³GãO,.¥^êE‹ò>¶Í"°¤‹2+yÄÒ…f¢-¬%3eׂX@œe)A¿½€ôÕ®}^28Œã/ŠÉsüø  ”lÛ!&ωógä5?n$Y ¡!Ž+!"—…u:N‘J¢G8B"1H á\£<¤üŠŽí¢×^oŸ?# îL4æ‡"ÛÆp∸8áÍOùÑç•Û^×øWÑE'¢}‰‰.Ú ¾wÑ1!Eˆé‹0MÒÛ/Ò)±¼Ã©e¸;‘(tùŒÁšÇZ¯&É,ªÆ•¼k‚S×/Ÿƒ\G±™˜8+–šä×3Žº=õ˜òÚ7HócUØÿü?¡Üõ&qv«'¸£³X&1ðÕ÷<È)³ö:§é•@R-W%‹|™»dõ%æŽSËXÒxÈKãØMwã¤Hˬ.Y>Üo!LÛÕX¡Š­X0³p¸ªòAW™™Å_PɃC H-xž‹ˆ EëÉo&“Éúx)'ÍV`u(\V‹›±âul|XÕá"ô•f *Ûî"áíÞ†´çÚš§!”ö]OûoFÃB¾ð  ˆì›ø Ì¥Fvl9¼ë(2r…sÉ>ö›ú6›úvÇEz5„Ë*„ík!̦R÷ïû…í½×ËV_š´[ö¤²v¡¿nF°š«ºÛÅD+,·R]•VÂG`É2#¶W|Pa¿uúÞ3ýçߟvˆ`¦˜â"8yíUz /Ö|‹?¿@öã}ÿUË:|«ÎœST*°t”t#¶´.2Á²–€2•Ø*€,3 $º+d9?UÍX ù%Ë*(T+ŒÒ-´è‰ `ÙÊåå×NϨýö!«!°†F°'ƒm“—Ñ«¯ƒÏÒ"Ù"ºïвíI¢Ç™G) ‚!p.ç!ÕaØçÿ¹¸oo?TU$—ErÙ ±ªƒ|Ž}ÿß]{èM¯ýîGs;i¯º¹«Àšä'ŽÈWÄäy‘n8f±‹ÂúÞŒEkØ:´‹Ъ‡êÚж¿™9H.ÛC†F „˜¹(’IeuýÖzÇœW¿ˆó³X•}mð1tdhD ‡›WiQZIß ƒ}¡öv‚_œ NãçNƒrY—Àê0jà+)°²E«æ–E6ÊËdu“8²4`TÀÛ³–é¹ä(”?4~ègzøÌXÜ;H:/Lª`ùRi35,•(*Ó,ɹ:£¨`+h©Á«¥øé³ÿΩÏü˹§ÊáÎR„OåLEdb]×™Ûùó+L‰U—ÀjvÂŽ%€ÛÉÑVX+^ÇfÀ¡“êXŽkÆ·KÑû”±{h£vQeì¢ÇAØyÔ–pÏ’›  ¾Oá‹ÏJ®­ýá]Gž9@ÝÿN…Y6ñ6ñ¾\»Ý2p-„íû8ZÃͤ nB‡ÀrI+AÔÆ$÷žÓ0¢VX®8Kwù¦^=â½+Ó½*º‚²\tV¨æóת ZúhÂÛEw›çWÃ)”Fix»épBpXþë%…Ô!°dx%ÏH‹k„kr–Y 9TËäòP°‹ý¸Õ˜KV!ôº6YÑ[-“hÉ@Ê.ÍU`‘h@”evJvAB/ÿµÔÛ]ÖÌeÐýWÒ]»ðñ°,17#.N ¦—_]Ü^’PC£ÅWd V.[ëö>ÃOŸ ñ„ú¦ŸJIÿ„°>ö싟©µ—H%Ù¾c=ü×bòéí§7½Š2yíM@ÙµÇ9{)ÅÏS ëtÿUBë>cÛ­º»X_tÖulÛ ,~þ,ºc7Ù)ÈJ-@<áßLÒIëÎïø/¢£“ØsO ;w×Üm=@| JÍo³¬B^$—¡éô•·àÇ_€Å´GË´ÿ÷ƒö§²?÷iqn\.Æð3§`d`H.mY´ïмÒYÀW"©½òVm¡~å[¶;¦,(Ûý@¹WÛ*S`¹ÃÜ ~шÍ]°gà£ÌòjFêÅ‚v€…âÀ7Ë‹µýkû*M$Y¤«´‘e’¨¼;ž>fŸ^ê9ó¢97«j)ôZðBÓ£®©¸G‰ |=XX¡î§ë*°Êàç1[Í_­|›'«¶…04 Q˜á‹®‰ÃL€ž¨µKõãhq€-a6°Bngø~P̸YV ±=á\Ga‹ÜJãW¨W¼G}í¹@CŸ}ÓCÒ%¢å÷\M¬áf”«Œ˜‚Øpk˪n¹ÀÆý’º³«y¼•§ÀêóXnŒº÷Šì³&È€Œe‚r•>µ¸‹î’e~rJ'Àõ!‡,ÃQÝû»)} "(?¦ [æÔÎ2€Ê4¹N“µ-ƒP—ÀòKžoH¸äDR2ç+ °0Ür4ZóDÒ<D4h‡\ ÂA•0 ³Ò¡Õ-›;€î¿Šlß Ms3Ö“iSôÚ—À¥O¯¿QyõôæWY!K†¨o—œ¡A&žø©ãUEXü©[u?{äËbêVõR€°÷®7Ы¯#ýƒtÔ-$âY{ûŽÀ(@ºçr)%ãg;3-qSc}oF1ÑfÌÄfG«ªkCÛV!”4 ÙéX3 ai–¹Ãï,Î7tÌLºA¢îÀÞ1Åøqëoÿ’¿ð¬8wÁ½þÆÕ|ŽU£è‘Ô4ÒÛ©ÀZo‰™„˜†dh˜^y?yŒ}ï[Ö?þ­ŒcOý˜Ÿ:ƽÀŸ}Âþæ—Ý}¶|:‹Àâ’ÀZÉB˜skT—™þüðjx{°Ý$SÏØíÊl7«Õ*S`)ÎëY% G³l÷Œ¶–5`ˆ À"ÅoN¨¹8Å(ŽÑ5ªè< É3dÀ²Än¥”À*ØÎW‘§I}€€ ¯&¸Î“x‘ÀWÆGw-_ÿRÛlÕ¨Üå+-·ÉµJ¬-ùå¬h!Õ•Ñ×@p{üÿ“ê!7÷}u–É”5 ¥òF"ce/vDî„M‚ÃPD‹);ÞD_V')ð›*¨÷¿›!Ej‘˜TB¨@q ,4¬º ¸EicZ¹¦Æ#°®Íp à q§ Õ ÿ¥£Ó&ç)³€Øzæ#°Hw¹Tнjhá@T©b!”¡ï„¤^Œ»ÆI&Ç ×¤u=_´Ö`¾1@}·Ò(—¦„`W ?Z‚,wÄàÖ´öbê"ÄXî<€d¨ou»‡ÂÎ s8B¶í€¦k¿ö›dhDÌÍ8þÁëJ¦1tÏåÊÝo–ôsþpu Šä2XŒSn»K{ÿ‡éÕ×sþÜ“åÛ/ÌÙ_ø yzùÕÊm¯Sõýþ¹œò†·’ÝûÐë|Lÿ2¾ö®ßP~ê­ôŠkè5×ËŒy1?‹.65ºX-XZº ¬K…ȦÅâ<ô•,>}QVY%¥ ,Éï4˜qοûˆõÀÇxúS1;žý çï¹17cÿË?P^z˪”¼kA ƒ¨Èàp±âas‚êÿàð(éí#ã(äÙw¾Bþÿ±÷žQ’\ç•à}/LúÌòÕÕí@Ã[²A CR4)J”DŠâhGš•–ZqGÔÙ9³âìÌjgvµÒŒ¤#CJäˆ2CŠ"%R IM“HøFw£}wu—7™YYé"â½o¼ˆÈH[™Õe²€º';2Ì‹ŠŒx/î»÷~ÎçÿŽ-=€ßtRúޜͫ< À²áe<µ@ÞÓ%ÙÍ׬Ïw—ÜPri– ùŽx/âÒº°ª3/ü"€e3 Ä  j¥YVKˆ#˜÷¨ àˆsËŽäßö¼ß_®3=@šep»AÒ{§¯äñees€Íl[5¬£ ,Ä÷ 7öÿ»}oÿàu÷´¿“k‡_²ªò6µ‰:¼*ù«¥CÜh;Ö¶>’bìëð2°:U`)(¦ŒÚ!qœE0â<¶”u×nô¾ä4µ±¬#”ÅwùK˜™@ö‚sæ/³ŸÚ@dÜŠƒàØgñC IDAT±»ªÔ¬à–2›«Ä«ŠK¶;$Pš&I³6pÔô„W¾õo R)e­Ü÷õB'ÒœŸÌŽf­2î÷HdÝè:?oK ‰:ã’f(–ÑÊÑa³Ç[^yDn/ïÝ›¾ýHt·2NJî¸5™SƒLMê Â*kE¿y Qå”hÀR|™é¥Ú'XÀ¢1ÿØø™L¹ÔjËÕG\ËZ= (†S®Ëž‹v\¢DX|ïAULŠl3~ý£Ú[fÉKõ,=‚÷X43å<ò¨ñ–Š(—ýw÷ˆ#ÛØðV~û=äs?®ÙŸ|þiüæ;ôþíÁwÔ”0g}ýúCïd=^@L"àCÞª½öú/ý¿ín60„MëÕ?œ{}›ñ*ƒ|þ'öŸÿýg¿/_|f½ÛÒªCÜ»¤üƒÛws6\c!l¨ÀjÀ¿JcÎßý¥ó™Oµ^S<ú%·ô¡_§cüžû:8åB‘tª.Kö€1Êe± je•àΆ¶à‡n"pN—/Øñ‡”žgƒÃú»Ñï¤øÍn"Ê«< ˆÀrˆT4†\*²ÁeÚÍXê,„Ü0VX Y1HŽ@Þj Þ²àUû¶E¥m¥p@¯–€WÜ]Ž€-ÚŽö†þça„dø<VŠ¢Ž­Ðª«Fª ,I$L× p<3¡Ro;R`¹B¡Õ×4\A;v¬õ þ¼=_÷œ§.CPuµîÖ’×q5°´  m} ô8åG)wAiˆ–ܤ1ÔVm专½€éqÛÉb;xê r>Î¥ÏÉùg—Ó˜ÕºŽ*ÁÇ*Œ*LÈÌK2ýJ3ëÔÀõ€“G ô‡*‡ÚÍU—q3Æt€Ô¥ ) !ëØB¨êú1©Õ÷5¾8Ë·þ™œß—{ð–ìëà¥4ªÿ£:ÕñùÜ¥§@!ÎØ‡‡ß¥ª ø; Îmž‡ñöþòŸmûÈÃÛ]ÏHPuoüðG÷¿åÁm]ÝRsH&Õ8A‡¡¬¢°ËJÅ›+°¶A{©,N¹òò¹< ÀЧÿÉüüg®>¥®Ë€Rœ(µg‡\æöè)ÍX÷wº9?ú&íõhÁ7ÃÐî{“ñÛÿ§þþ½dwèf`åir\>uÌúÃÿ$Ž=^¡”ü*Õ î*ߘÅ45!¾ùe5CDJ“¥è­¸×1UŽBÔë|ÄâˆDQ*¶ð6nb]°²7£ìJeÍ+òì)4~ÕùÂßSfUT3+‹.U`MŽ`Ûw`‰$‹'P*ªT,VC`© ¬v,„D49¦>Ês§[œ°Ñø‹bA<ú%ñüӔƼ٦à×À˜ºÚ}o†aðnViGߨ=ôNíí?Ó´yÕ {‡æ5ÈYn²-5p,z4-êÕkøÕh^U0TÕU@UÙ£ºœ%‰ÈKW„‘0‹°G”f@¿ž@ÀŸ¯–bL ˆê=éL°0€E=€—"¨c+ôjiÒåâì±É‹?š¹ìGÑŸYœô2°:Q`1€‹š¯ÄÑ£G[¯PINYÿ §î¯²®_;´qW¢i›¨«wV nhCGˆÉ'ÈÊÀÓu f*ÖR}•(h!pƒÅvj;ö˜¯º ¥%3' ÿƒò——ÑžÕ€ºŽª=U ,#0?Àž¬Vã¿W”>K”ìÓAÅ bsx?Ž–q3ªR³’;ª§pXžf m+°â†©“¡|SXØ'°X¥OùÅëîüÙm·ná%yÖl—ÙaŽ `Œ&T„¥! ;ã½ovò"ë-„õÐëønôˆ¢í˜«P%iÁÔa(ˆ²Í—È(Vl[%ÕQÔ?S`/Jlž¨€2s%`öj*°¦+U:W`ñƒ7h¾£AñrMSÉèKÀW`MO@©X5«ŸQy. ,hšŠYß}Ì7ÒÕQš›aÉTCå—]¿I  PÕ7EX݆õº7±b(éÊ%h?|Bˆï|s½´¨[­¦Šûc¾!úºýT’zƒ ,Æ(3¿ä Ðì4,ËÏlZ‰UJñè—Àqh~ŽMé9p®ÿÌûõŸûåk:«¶¡Ýÿ6ýç?äË N9› 6²­ &„øçÏÔŠÕΟÇG±À†ØÈ6lÇn–êÕî—ùÃÆoüŽþ³¿¤=ø~Ëø‘ÛÀ9bC#Úëî×î}Ý5Ÿâ†ÇJ¦t¯*,w¶pi–¯™jž4ôô)æ(I ˜Ô¶_@Ð ì­àÔÅÃs™)캙̡p€Ôœ‚mö%û-^Ô#ºbžfJ‹¸ñºVŽ¢5Xßeßwô\tažÊäŠ3­Š uF`©÷´l_LæŽòù¦…°9º÷eº=Pî‹íï€-¥Ò4jköžß’™ãà!ÀÕu ÏB¸„‹W~€…‡Xxˆ²/Óe!3'T²»sæ¯ô~›™=u;[ˆ2•fÀ ÙZYÈ83þ¹S¹%®<Âûoå©ë[¬³1 mçì_Q~” ãL¹A7BÂe ª›Pý"†"°|V»ÏÞ­±äŸÆ>Üð+Ÿ· U;Ù•ëP*ñ²¦ÒÍCyñü`.5–׿íE“«M~ÏΛ^<{&ÜÛ Ä½™M>8Í㟗R`‘&Ü '&•~Ù€¡“ ×/\Îåà hºëûú†PÝq˜»Ì{ŸQ±R:-‹œ~åêKO–^º^ß÷ »Û­ Ú),Í¯×¼Š ¬tj{žGb²(Ás¡µ~î¹ ¬\Öu¾D¢(ä¹ÓÚÈ6Ȧïͤü¸ _|–®z[? ¼ÕZá¿þQ÷pÍÖ?DW.Óì´_²p¯!Ÿ}Jôôs¾÷Û¶s½[×ÁßFw…¸gÒàéIùþCê]G4Vµ¦i²x‚r ´i<à&®`#ÛQÈÓ¥ó43É’)ñå/È3'økßä+må3OúžAšž„ã@J60]VíXU°»ÙŽÝ•&{hì -¤v@¹ä|ö¿LÿÙ_ªýkò…§i1ÇzúØ®=49F‹9ñÌ“Ú}o®YÆ®Ð^ûFím?í.â\ÿW¿¡$fld›bµÜoö2ÿ¯?Z‘S;›ÝŸêx2© ±a†æYÛS`-E`•dÓ_N]<– Ø*96N<–_@0(ÚRcßLs5š¯dvÇ¡äÒìO\þÎSsÍ4ܺ_ˆÐ`Zœ&Å(ª¥7¤D¹M åÓðÒjgµ)5¿Ý‘…PMesguXK"ä½öè›U«ñJ qÉ…³mB…1,ºmÉ50#É“û@¢°å)°”Šrhñb«Õl7+°aê,„nmD-Bö‚œ|b9MZPq BÍð].¡À*Ï9çþZ]  rÎýµúYV)°Õ6§³!7\‹¸1Å1ùDo[Õ~<–ÿAÁTCO.¥"© ·Ë¡­ìPnšÐK•AðGv¾}[Ô½‹µ@™Ñ¤›à¾Ï_'ªˆ 7I“;ª±Ét€,Ü{Vò¦ +`/Ô–Kp@ÔëÙwÆz·¦oЋI´Ìèp±4=Ûsþ¼}µ£Ô࿜ýêïœÿ›gf—¸+ÍËÀZMK2v&¼@ZOÉ5Ÿšb[¶ ±+ʨÝõZtþ´ú¶……ÒÞúÓ䨍zË”—Î`oXú¸Ûv°m­b®kîÕdÐ~õ¡;•5¯l(ÿ Ûˆõò[ï‚Ɐˆo<ÒNjøº øÛè® ,¥Àò Ñû«W–L5p‚ô¶•ãNãW°­ÛU¸!MO§^¤ù9ùÒsä©ãä‹ÏÂÑô$ÍLÂwó­’=T]ZZÈÚõÇòìËòì)ûÏ~¿â1àú_û¢ó™O‰o?*O òCÕDh©R5Å×À ùÇÙÏ~âÂ÷W­öðÚaÃ0y§]Ë"Ïô×|€(ëKesiIY’6<¡“òøE€À*Ö+°€™ò¢-*GdVèÃÃïLš!¤Û§“O_uf8Z@_ȵNø! †¦)_¡Ûœrm2.‚F¯Í€ëaìYÜ C'A¼înÀh²¶úÊâøñã­Wð ¬ÎѬ8X7Y—¼Žõ â¤TÒ¤Ò´Ìœ¤lCx³Í WÑ6€¥¹Œ8–•ÀÍÌ^€QqÂ>ùßZpXž«’ãËŒêuÒ–Ù“Ó¶=€¬ô2š´â8~ü¸"kXd¤æ+å tQnÙZ+ QvÎ|ÂÌߘP_Þçq¹ê´.æÓ—q3êœCrÕkø†AÃq_ ŠAåÄU ÝdIF‹VŒ ¹NîšÛAæÒ(³ [ôŠ3±'Þuo± N×75¨Òò¯]Ôðug1©æ· fÌcžä°~là!Xû¥MK%D¹{šÛ¢ÉíøvçF /¢Òׇu¶ƒ)ãÊBêꜵD¾’4˜ån¥XNÕ´†Òpñžaö@w(°R©”3Ù˜ÀbF õSyŽš+°È^ 0 $(?ºª­]UÈ…ó´þ;œÂ8Ù9²sê:ª{MëâH¾åÜŒ¦0,ÌË=4<ÒG[ ¿dT3U©•°VÛ§0¡‘æd¬²:º?%ÓoÆ£ùTó*Œrob°áž5Ÿ´’MMòZài˜B‡W˜¸°a# À*p_Õt€aW)°Úz×P{‹ëLèªÍŠ.ô3°^D5aVÖÙ”MÒn©›-üÏ-ê5_;ÔßI]­uÑð»ÅÅs€WæiïA1~•ΜÄÞž«%µ}N§«£*žï¼®ÙšÝŒl`ŒÑü ˆÖVj–÷Dmé×»ìfâ ·VÝðÖTO…da‰ºX%«,„ë׎T'¸+hoz ?ú&,XÖ§¬æ…‰äO~€BžÅ,™‚hfR^¾€¥z)›†ð®;tCbÏ>‹1š™†ã`Cë©ÀRQ‰´A¹L“ãÐu¶m4 ¡0ÍNS6ÃR= ? @{Ó[X,Áo¹SLŒàGn•'_tÏnzÒþ£ÿ›ÒóG´UŠd¥ár¬eI¼»Ý;·\ƒ¼ðXKÜâ–§™jàô ˜ 9UEÍm[iéU(†G`yÂÀÞŠ2°r”W ¬p¾ÿ#;ßî/çÞt·/^ÌÍàŽéÿÝý€•×’¦kÔÀy9 ÔFvûš– %ý…¬CÖ‘äö›²G_¾©£­VoÞ^ë$ÀëÕ€®².ÊRG¥ixùtrúðèžÖ„•f!ÊÌLAoÐk6cJ„µ¬÷Ê^"[Q-É©…RZ¦Î¨Z¥$W,<ÈÌ$˜Fö"dWtž…°ŽÀJ\Ç{oâƒ÷BBZpšÈŒ­4”2N ‘•…Sh¼Z×ÃS`ícÑ®¸Ò^±ÓK¶ îu¾¸¬25² ¬¨¯ÀªË[U!ñ vQ5C÷*ÏEâ)¸w+sÌ­ÑA÷¯EóIš`[#Е°`•.la®‡˜ ÀÒJÞWÒiRa08%Önˆ;RzX/&BE÷J•X-3°Ô±DóDùVÕmNKk¾ŠÀZÅ4 —ÀZ¿~K•‡¡¢ê”‹}Wž}yI !<–¼z™F/`;W(sÝ ±D¶ÝVíùMlPl†¸¯-T±Q6\=¤I$`±K ¬î q¯ Àr ³D²a 6²]8ƒf½ç#Ÿwþå°ƒ×CM˜&-æèô ÚÎù‘ÛÔúüÐ…Y²ŽM3S`l-„Jw¶‘£!%Ûº†ÎUEZºp€<}‚Ư²dJ…-úå>ø]Gùá›ØðVýç>Æ(=xõ×¥°€Ç¢,o†¬{°aXEò3°–8úª{M‡e¤Ùt'¼zá*°”™NQKjMTÓaeÇ®úË£- r„d´7T1êÒ-Œ8Ì)'fžÎ\F Ü h2½Qµ©i)#¬ìIWG­ô…¼× C„T=Ž·FzôtØFè ’”½Ã7ö®+· ˆx ¬nYTXDž&Fÿ™¤¥oôUùøà½ræGAóÁ{ÄøcÍ4>T“ÙSn Âh»ò+mûÛ´-o¸ÆbÊ´H…q€êîEÀW`,„LŒœ|p*ϪŠ"cf/•gÉJ³ðª'5.Q&+n°Pm9ž:ÌS‡ÈùçÉ)Pyž5bÕ…SçEùËTœP.¼î'üä/*Ï’•…g‘!ÙJ¹ TGò <êJ{X^Ú 7¹bzV»©Ö 5±Ñj ƒ(‚lÁ.A—ºK`ŠÄûYÏ%Õ˜bSÞÙ¯0Ø‚h«¶VVãRóÄ¥ÊP7™1`Õ Ž4k§ˆØéÊv3°˜°;Ñÿ§¿é/Tý¸àKXïx|é)[‹"6ÒVÞÃX««À"¬«‹mßí~À®Û§½þñÝÇœÿñI86¢1­´ç|ûN0FWI7°æ ¬Ž¶k/Vž>Áo¼U>ÿüö»Y¬1u»‰ˆ®¡#^-p½fÕiß,žc´˜ëNµcuV·üdhnõVs°‘m¬æfèò…šTrw‡“c´·¿G»÷õ!EcWh! Óä·ÝÍ”ßt»öæ·Ù—ÎÁ ¹•ø†¶¨(.~×Q4ê”× Ì q§Ëp¯z,Û{/¿$ÏŸá·Þ%žø:~ß›¡:‹dŠï9 ÇFùî½,cÉD¢üì)šÓîyó¥ÑúX^¥±ÒåØ0Có¢§ÝÀRB§ –d€IU÷CQX*¥Õ€"°8<5>'p¥­ê̽PäGêpº} õÖ^§ÀYë ¥—èT±ö„\VŠÇÕs¬6«B`ÕÞÉÛ¢©¹¬ëÐB¸68vìXëT}wTO¡o]¦ÀZò:€S“ß‘Ó?¤ÒrrPVÁèv}Ç»TÍ;mà.Dó”%9ÿ¼¸òˆœy`)0³—E·A¯­nÛÙNŒ3Ŧ6:EÌÉÆ¡GANÞ_¦,˜}X¨Ý‘ãþü“ß@ĸ­mÚ¥.3{=áRó°°5'–¨éAŒþ‹(wOì*Í{"¼ë ¬¶nÆ:hÞ¬‰¯ÿ5yí’kAÌ{’Gô:KêEIK¥Aq;¤36réæ„hJ`U* 6ïã‚ózàqÉeÕtÅKš1 ¶ ºo¹šÐI—Kó¥‚Cœ®”íX*Q+Têâ!î /¢JÈ’X_ºzü¹ò';û…†\´Ü©>ÑR#–µ+á NKªë¡4WŸ×áõŒ¥zøÞƒlÛ¶ÕÑx;¿õNØ–’_@$Êú`Û(Xª‡5Ìêôfä7Ü@žxA|ùóâˆo<âüí_ªV‰á„?\üŸÜB.ÄÀ¨µAχ)šÕVJ¥w“ž«áETsl ¬´½è$r ¢q\nÎv½-è²¢b!´ÖÊB¸^¯ñú¿úª3¦¿û!å‹Ï´ÀrWß¾‹æfXo¿Öò%ªÓ›‘¸ºN—/BaÑÕËÎçþFÿ…_¥"ÛuK,³É&–‡å=Q›¡B`­àN7Ñté<Úâ–«Úr´ZÄ)*(·Ð0¿i}Aëš%¾ý¨|ñíMoÕÞüV· cWàÍ‚´¯ÀÀo¸E|÷1yòííï©i‚r à<XÎoº¼žï?¬˜í ª­ømw+cõÑ£GåÓ?b#Ûô÷}¨¡oqÁ’=T,Ðä8óÃÙðˆ’ž9ÿðiüÞ×è {ø 7#^-ª¸Ü´‡ÞA³Ó,¾Ö’[Iä[——QÐ=Ø8–W[KX^ìz !w„á*ž 9¸, [éö•KÕ"¬Ô- (°ÊjÆRhj~µOög1j!ê&±ØzÀîðà €K0(¨ÀòM:îB·bP*­@î¢Nòw÷?¬>G¼Óéæ²Y-õ ¬Í*„Õðû¶þüU[Xóð2°˜‘P’(Þs½±ð°R€6ø§h[d±u˜£P`‘­È¾L…qôÜØàëz–"°Š“dç7äúM¯qkJh !ó—°èÖV+)Ú®ÙRB³ÜDó°0²ÒÌì`¯}Èéð!÷}CŒ?¦ˆ'™>éèÿg¨Ÿã,\•Nù«–œù¡6òF´ð2ž<%ôcÆà,B+‹w±kyð“§üSS©LX¡w“óüû†_)ñWA–褫¹"SD\—èC¶M;…Íû¸ êÊ ŒzuÒƒuOÑtð鬚*Êi²„£©îú IDAT¦Ä¸cJ£ÜÐB˜³­DÀæH F\¯͇¹Ž–lðôYÔÈBX’ËlœL—³ÔM®Ç¢*ŠUV`CÜ»œëïý€ƒÊëD«u÷ìg[¶j¯yê2Ý® ¡ßwH¾ü”(lÿ!ûãÿUž:.OŸPñ(Ý)ÙÄr°É`­*lËù§¿G<‰r‰Å¨c©X"AÓ”[`[ZxÖíX41&ÏžÂ*¸ŒÝ ¾B¥7¡tej¤…à´lÛÖ×OósòÇÇøÝ÷U%›Kõ{%³ lïõ’œ+ÿ ¶k¾ÿ0BëiôÁR)šÀwï«üÆÓÞõ³Î_ÿ9JE„BÚÝÕ ¸R¥@7ôŸÿЪ6¸!쀌68Õmʦ°ág`-A`Iͯ4ÔøÚ8R‚KH‚ºdE”¤§Àâ• ¬ÊnÃM•õ®Ù®âi«>@šEe-lh99”¬¸²h»ýÏZ Äž»0,bhd y7î¡C2âc¾kÃ\Ö üéúÍ÷0ï§°îþÁ6AÅI÷ƒrϹaçn¿Ë{nÐïÀÌ€‘•i0¾#I¥€±Èº7F«$95h¨Àrù,/öËMp¹¢’®±eNPYWÍ òÝeájÃoÕY0³×¥ê¼‹^(;þ^\üÜJ4¸îè‹ÅäwÈ…³Î¥Ï‰ñoL¿î&/€1ö5ûøW¿êW Ï Ò´\8K…q²²Ììq‰<-ÄS‡@Rο€+¯ë+NêÏšø^Â_…p•K.ª^µ Ké* *,c†É­€]Ѧ ,ÿZ´»à\¯®m"ô2€0×cÚŒ«CT¡`5U†Õ@Â&épÇ_§žúâè‹'2U·@Q8hÔ›š@¶$˜TB–ÔXe²H³´h[õß.:mY ²b!l3~yX÷*„MÁ¹þÞh·ß³ôŠwÜ«½îþf¯Ôž¯¿ Û¾K»û(â‡o O¼à~½I`mpø?x¹É`­&Äß ù9½ˆº,‰t¥'·wyây×e¬ˆ’<úü,Êçk–(t¤À =øÎ×¾DãUƒFÊÎÝ /íò^3¨÷hL{ïûƒ‹ùÞƒüÖ»hw¼¦‘ Ö#ÕË•ÁÓFW`m˜¡yÙŸ`Ô:IÁO­M¹jØÇ¤æ{ '  (må5™Žº‰wª$Àºe§uÇ%Ìs âÒöhô°+ÑË@*»ó×UÆLº'‚S.E`™N´6&w)ž(wEån‰iîÂN«® – ˆëîͼ™UÿÏáXä@”›®½Êh'$¢‡T£À°Èï¿ ¸ÁŒHµPÃaQyä°«îY/x9îQ†´ÁÍšªÓ$Û*ÜøÂÆš¦5寒•efokí€{ú ¹.êcf z NÞ?k´xÙ~éÿ‘³?nUÆñ &§Ò4DI\ú9ýІòÁ{Xd¢LùQ*ÏÉô GŒÃ9ÿ7•†å.¨rú2sK]_9å¾[Èùçì6F2{w…ª\]…å%¶X^–^»d• ØœJ hïÞvÛÿªýê¯l¹_}û§[ÿ·ÿÿÈÝMcMuhcÍÛ©Ç KC•ŸQ•ê‹ê&cà™þ]s·š¿—åãÊÕU†UŒ€¯ÀÒ„‰º ¬¢c›?Qã=´U×G4€Ô\Ú¨áEt'Ì•D,‘{”ËùLý†á²Z-èò(€äXJ«u ÖÛBØœ¯`É2nF~øtCø}ŠácC[(MÚ$°Ö+œ…M᪃¦ÆÅ±ÇÁ˜«„5×Qµ¨+ ¶âN3Ó 41fÿÍÇa¯PtQ©è²äþ£¦TD±ÓÔßûãW ÑÎbdù‘Ûø]GáØâÛ_s•Ë”M#“ÐŽ_;ˆ•½¯,ÕÆôŸyý‰èoûi–êá¯}Ãz´«3G› ¬5‚Ã+oì–h5ÞòS«š]›‚°0/€€)¢ÊÒRÂ3t+¸{ Zm!á*žzŒ¨¤–©Œ& ,„ ½Ü xË»‚_»–tÚ}é½úåý=–zeªåqÂçî¡ã¬¢ÀJx¬Vwª[2\ j*šwSUƒŠ…1bü›Ö3u.üݺ4æèkî^r*–(‚haðÀ ¤ŸS£k^L~'‹ò²ð:Çd‘p“J³pj ;åWðlw~2½Ò u™KfO`=7,áIÕã,ÔQV—ÃÛØ‚´ Jp à¦k n gŸò×c_UäY8…Ú=/£Í3O:/ÿ©˜ú.*ÍÈÌq€äÂY*͂ƿ£íz/–Ø@.œ•SßI—‚,Íx»!éXL¦_”sOà=«÷˜&sçà,þü®ÛoßûÞ¾½ZèÞMX^b‹áQ9~ç+°ôU&°”« €FzO(|¸wðº„;Í˾p”7š2°ZX+_–¯;ƒ· ]çˆí›:ºoþNتXEÇVk:J3¥‚Ãjx¥O]:æ„kÊù•”²IÖ65¬é„´ÈÀ‚7ß„åÅ)ŒX‹Ž—E­†I%p;²äš×õwÒºPµÒXÎÍéïûe6â–(a[F è=- +ðØÜDGØÌÀÚp?ú„àwÕ«ö:ªè¥@Ty÷€ê>ÛõÇöüGåVs—ÏNÐîƒ,™¢Ñ‹46º2‡žsÅVäY)=€õöó[îôsÊ;‚öÚ7ð/G/Ègž¤ŒÚmgz®•½¯,Ù£Ý÷æZç£B$ªÿëßꔡ[(ý–PËRÈÝ ÃëI[Íï%ÇñC²š]5¿Ê„fz£ö°Œ°ÈQe†T•^ ÃÜ Ü$°txS£Í&±{EÿƒòÁí±ªTN•·åÇGfn ýä¾{ -„^RIÂ[ù$u÷óŠä˜¬ ”;ã•çÙ¹F, ÅQ bRërþ91ñ-*Mw¼aÚõ58—?¿ÄxÌY$;-0²Ò*©Ý—_Õ@:2{Z\ý YýNi Àúú€qß\¼Á7=§A·´¢÷öX~–"°¹&×2}ïYšša±(ï˜äÌ“ÖÓ¿mŸøÿ<ù•Ûaó‘&ƾîSE.‰©Ç•)P(f,Î(ÊIL>’ä쓱ÈuKŒñä~2ý‚˜ù}×{` ©8 g‘™)Þ{$¨8¦©,ZÄu¦_{›»j†÷8懸¯2E:‹•‚µÝ#¤˜lQ…0@Z3°…ñGtÓ¥p D¤úñ ¥®è‰ª,é¨2ê‚ú¦+‹™ñŸ(UWw)7±ª~¼a@»ÿÛ‚SK`Ù5Yn@`ùõš[+°JZ@¨Gu(ÆŠC=æ8g R6á>âfÃUzØMÖFÇfµ@nßH{ËÃlë4²²dêJ+8B”Kté<¥çäÙ—ý¥47ÆøÞƒlïA4Ûñ¾!*nAïQ£–°Þ¦.þ%Áú`”I£\@—/Ègžty±î1. lïí·7ý¶Czn½ æÞ¸c mcW!Ü0LÐ*Ã8§9•SÄ€ªØõ Ž ·’;€Ž!  L–ÒÒ«ŒU^«À’Ž× ) 3J®}¯?a’°ÐTà}ƒ÷=¼ýHÍB· Þ$­ËP¡ÑLLò°æ¶<©U,„=¦û¹…½¢Ë±5wp[ú†”щ}݃`ˆ;™…§êbìëâÊ#2{ªÅ:ded楪%…qçܧ© % Ò¥@Ö‰ÌôdÏiõY1V>ÆŠ ð-«ª@¥Mã‹è)Ø€?9÷øŸœ{»61‘Š!£© 8]½ @oG5 ±â7ã&¶3W†§¼cx\ÿ΋©c/eê 1uŽOO~k<¿Fas†À"ÝÀm-‹æ¨éJÝ c) ¡Fº;Ž'¦"¥l²UÁl5¥Õ åý‰Y5À5™ù{ûÞ÷{ûÞ§3¦äZŠØê¨“ªxè» Ôl°*EQ¯ÀJšádv{~‡?aÞ$°Â®…weÖèèÊØ¶_E Q„—€ E`ùZ§ãÑ-Yó*g* T¿’”3O‚¤¸üyqõ«dö”̾ @Ì<)ç~@Î?ßbr‘ʳXh@ùædæɆ+ûÞ:,9} äðž#AÞg½Àã»&/SyNž=PýýëX`: õ‚•ç©0i±PPãÃÌd¯[ß,^0[nëoËc;F‹—ì“ÿUL|»R‘$ô¨¢©‹EV %_b‘Å%]»Kf”¡3OÐFÞäp< ÀÀ“µí?¥øUèQTXDÙÓðl†À4EWájèÊ+3ɹªXÞC5ÄkXáŠkµ ,€4ËXex2oN`ù$Wwϼ¬@hÜ $""@eYÊ åòA69jD¡f¶„G`]\œV!Y¨S`•çÄEªæ°:çÜhoxýé·‚´œL>u²çG3ÅE*-²F–o!l^©±ä8dXLò‹¢ Ö?¾øœû‡/Œ>ßzµ†®«+CÜW+2Âq]„ªÇß$°Ö+;LÝ´®:ˆ(¿ÆX¢j„YsY" Æ(—í†+AÓ“âÛVþh’$ò ,ض¼tp°08„ µB ¬@ÁAW„¥X×`!À†FÐÔóæYª3^ló±5,)Ÿž¹òÂlg£k[ÔXÒ,¥kO½”žšê9{6·FƒçC`qÁ„Î¥Àª«ËãCÕÖE’ƒQÃ5§Ê9! ©Ê/Âs€ Ûa<…Uœ-1~!•õn.¥ÀRS£¹0TÅCæi¦‚Âzl‰ÆïoßûÂÞX¼/T™Ýí EÝô®T`9RkŸÜDkˆÉïÈüUT‡¸SÞ³ï©,íN@E/˜IQ0VÚ9ÿiçì§‚l”Ìž$+ =ÆÅÄ·àÄ•nB”TõC²Ò-\„®æ(Üï2ŠÏj–¥XŠßQœŽ´åôh[^ßÑÙ­ô8 @Zrö'j›oe7ÎÀ ÄATž‘ g0Ÿ.Q0z€õT`)gÛ¡7´µ¶Q„9ûcH›™niHmèµUµçŽÌ©,ÙÂ"[е+°ñ¤B»œ–<è9Y• Ðv¼SÛúPEꂺ¬4ÆÉ^`fŠEFZ‹…F¥¹î·€,ï¡Z!°ü2&ú)°T¯ª ­DxÇVq£¢nn:IãWdÕB³.r‹ •>D`®«Bè¼X+‡¤ÒL©j†Âûm¤ ¬j&hÆÉèg ¦¹¦ä] /¢?ýVV¦\RÉžJ<îç–Œ"ܲ§Àª©“ÄT1€[õXRuÙšœí9±¼œ»XeÜ÷el¿q°"#6<ÿ5µ _|Æú÷¿iÿ·ß»öobI¬ì0•*^Ù¿ýu!"QhU=WíuÔuDc’skÚ¾F éIñÔ÷iÆ-Œ#«XP¨p}žÞJ=Xÿ £ù4 îŠÀŠD—.w3°®ÅBè±ð45./_¨,Dê¬Çß|gl±|ö“ìo?a}¶£­Ôð†I®¬ZÇ’D*aV\ë´úgæ£ËÅ5²/l €^Ž« ÒXj¾T“º2åe—­ICTVA.ôˆf°™£ ºV`ÂVQ•%Ï  ¬àŒ®b ÔȲ^ºÕf­…¡¹ËGȳF*gLy'[äƒlb£€ì1þ UÌNýní{é×÷\Î>X§3¡JF@å4¤Mù+rîY™~Aùãäôh#÷óÄ>p. ãÌìÕ÷ü¢Z©zsÍ]„Ê{ÅBýôZ}߇Xt»ë׋_ÇSÁ4>üºš5]Å\y¾B` f$ Š×TxÑ)@¡…yÏa÷@f/ õóØ(ϦV=0ª~» ¬rF Yêð‡ÓBÌH€œ¼F]…ˆG;ž«ŽÃÒW¹ïN ©HÇŽ ñ¥X®ZÅkX*²Ý·.,&èË®…žË ½ ¬Q!°ìjÖ=¦Åw/Ñ&=¦íy¿ûþhg©4%Ƙ¾ó=íŸ×jƒ÷ß&g~„ŠÔ‚¨4£ì„MXƒ¨8í&.U+°\ ¡µbB9ýC*ÏqÞsãÒ++'y°…†¥Ú–7 ++F¯`±̈C‹°:[( õQ~”!;G… Wm×9ÜŠ‡f¯¯œRRÖs#·s,¶£õæÞ<üe¼`µðì*Í,»ÍÝŒH “qé3D«„àcÚ2X>Õ´z“œ,³ÎB¨æ ,ÕXEa)å– ¡H%5çä[e³M2,•!à#¯glkôˆæR(7#°Švƒ6gåÕÍZ”ŠÀ²0ÉIÓ…Ü–h•¸µ-ËÊ#„ˆè¼-– ÀÁr*U‡¸o¾Ï/Ãd}ý‰"¿ˆb.œQßÐùÓìö{Ö³m›èÖæu@¹,o‡Àꡉ1ZȲmK®»º éIòÌIñÃï@ˆP^¼>—?Ú3aù¿åNùâ3”ž§±Qe!dƒCjsÖ?DÙ ÍN_#ÍD3“ býCPô_!/Ïœ‚c³m;`v<·Kõ ¡Å]8 @{à½þ`wÂRƒ&YIÍ`“#Wn-Øn"[ÃP‚öñOÙï ólæZ6’T'AI%¼·«£RƒP{ƒ 56m8@Ì…fJl‰i&³ÍSzÁÜ‹°^«ÀRT¥åíÍa~AžkOr€ÑÉ;€J³âÕB)—èîvÅ{?ýÍ߉ÿJÍrà cõsL–‡cÇŽ­w6 hñ¢2¬¹v<½fï»…¾FQ5…KŸs.ý#ÙÍŸAŠÀÒÂPJœ¥ÆZrö)ä½G ÇYïÍP.ã|à€ñá×ñáû~ðü˜¢ÏÄ•GÈ®Óc»b™ôFÒ¤FàÉÌP¢¤¬{äðÁ{YbO››¯xb¿›¼îÛKSJþÖ Ë'°2/Â)°P- ¢vµRXÒR?™=…6bÑT‹_×éýÈûoS¿ÛÁ{nT‘í5P‰fT#+n(ÆSI½®%Ë%°B½êgOÔÆS‡ô}ÒFî_b{¥À*MÉÜ0ΓKX,4]Ÿã¾¼‡jDw{®  ^õ˜úªg`Uö¿Ë·6©”‚@ˆ{MTÈï¯=k!§Z ! ÕŠ¤’g!´¤.AL)¯}Vf9À¢ª‘I9”°'Ñà5CI¶ËB ÑE Ž[ÊÒž· ÞržS+ÇÌ– 5ÛZ^B‰¦ó|ig@XF!(šÔkö!!à Ï;… †¸/cûƒ•á°H€»âW%“çN¯àþ7Ñ+{73°V¹$k ¬×±{XžyP|õŸÅ×ÿ%úý¯¼%óÄÅ—H’”žÀúúù·Oÿˆr 0 æ—ð[¡,ššÀ†GX4€ò‹òÅgð#·_ãžÁÚ¶Åzû—Í^m¾3¶†-”«3Kx!( +g»“^%³]ƒíl)ÿ…ËÏqôEɹ…¹Lê²J1ÊkD`m$VKÎÑ “Ÿõȉ€"ŠêRÄ Òå’ˆ,BhúuÆîÀG<7;ÀÑlO¥#0Ù @“¦ ”¤o!ÌQ¥TWËQ`1¥ÀªÉÀ¼IˆàŒm62)TìÐøf8zôèz7a#€„œNŒ=êŽö¾P:Ê“œ T"¤üÅ“ûYß­àä¡Eé@…1è1U>§Ëùç¨4ã: ™FVZ\ù2~½œ} ¼3<±O.œá=7*úF¼ £["btVL>!&¾-³§ŒCrUžüª³©!×Ugg‘mø¾Îÿp« Æyßmbò pƒ÷Þ(&§ât³*„ðI.+‹ú,€ž èÚà\ü ÆxïÍîO…„œ–-õ§S­2{Ží,_€Iž<(³/óØhÖ 4ûÈôq€XxÈ%¼Ü¬k °Êi0û ÇùÀ]°²,y ƒ–‡zPþ ¿N%»/±ÉÉq_ÞC5ìy÷ªrÍICu¯·fl%ôåX­,„^¿ÌªÉ8¿Ò"s 2Ë4a ÐçJ¸!îÁ*„eK²ÈÀˆ+‡¾O•x@ÄI–1'Ï|© Í2sŒ-±êš©4Ýõ± °J°Ó΢ґÛÒ):6¸„äº0 äÔÆ ú5 eó÷¬“GL‘}-Ò²„R`±åX¯ á p¢1ò¥ç°á­45NçÏ€¨U´Ä&®+{_Ù?øõ…øê?ËãÏB×ÑHUY²€xæ)95É÷â‡×)_ɶ)=Mc½ýplvðÆâ|&töø=€a[ˆÆ óo?üŽ|ö)©è+÷D`Y…åÙSòÄ Ì0Ùðˆ­5<âþL3iùòK`Œßt뵟¥ö†‡äñgèòE¶ëºeïdó±5ü°NKJ?úsé­¤Sõ”ËÂYpJê%Ó å"½.æ¥Ìä·b_eŽñ.ܤüãù‹ˆ#¹°c!óf% IDATyʼn,8Rêm7iÙØHV¿–¼¤h©ê¨Ôé©]ñÞ¸aÈË€(‹¨|ÖbVë¥Ì84„ }Á‹”0°!¹í†ËꪅT†4Ja%1 *xs¹*­£Ü;úw°ù÷ö&Ü‚ªMK °š"$Ãh9¸5ƒò£rÁUãóäÛ¹¾íi1ö¨ÿ&èQ8Å©Ný¡ Ü„iWøT`ù¡T”¿‚¾[8W¿ÌûnW×ÄÄ·dú8¤nòä9ÿ•¦\>kàN9ó¤˜ø–˜ú¤ÅÌ^žtóªxß­rá z{ ¯”| ˜&ÓÇ©0nŸþ ãúø©Cÿ`GÐ"à&D™Ä WPWÜMÎ" oafJ¿Ö¬ ¡âïIêç½7×~»"Bi˹g m©rš´DYÌ-M`©\'_PÖøÀTž…i¶‚§ÀšÀ{Ý…Jå—/\\ a}Ïû;Ýš™=S4Ÿ6pg[›„ݳNµ!ÓL¥1 ÆBqÉåꇸR)a„[¬Ùxó 9ÕtŒe4©BöNV!exóFjW1%C J,ﳎ.5qfÑʼ I‰ `Lvrs`0ʉ†±:´ÕÄBXr*#œ²´…úY’΢càŽ¡Iž©0?â]4W`åd@‚Gƒ¹´‹‰vVk7Ä=03·‰vÀ¢1äÉð;_#=N™yšg#ëí€ÚDçØüå¯8hj‚ržÛ í ,¥±QdæÖ‹À¢ÙiHɇ_ý-D¢`,òbèìñA{€±àʯ°×±Te3ð°Ô‰ôUÛ‡|öÇòÅg áÛwAX¹,ùüÓ°-¶kK­@l?x=?x=Ô‰H6±RpH¨qPɱM³Ýé@‡$N\‡;„`6ƒšÓär<ŸÙ_ú°è¡ƒtûâÂüÞd€³Î(€}ØýBi^DÏ/Ìì\Öiu€Ät …R u!î_›}î“—¿§>çQçaŽÆÄs…)½NÕ v8@%å¹–7¸—\E\ÙžKäBék×yÁ C;è GØzàŽA7ÆÅ³V>w„0"Xý— ™yI\yDý'3'Ö»9Aù«´­š7} `de@Rç¶ÎEB_”¤©×x7zÉö-cT!° WPa\Î<é.”–Ë^,<È"Ã(û2¤ÅŒ¤¶åÍÚÈý@¸“ 8y1õ=¹pÙ9™;/çžÀ‡ï3ŽüïÚÖÁMmÈõ–Ù">xyóÇjÜÌ3‚ù^Gž<Àî„´ÅÕ¯¸‹–¯Àê©oR7B ³ð€²FXmÁ ­og]™¿B‹—eæ¥`F»ÌàKÕXtô(HRËw²²1# Æ—w?²ÖU/µúe²ØŽ Ç¢Ûp-1X–—µ\hÛÞ¦m}H•Sloƒ õBZÿ?{_ÞÆu_{î I€àNŠµÛ’%Ùòîx‰ØYm7ŽÓ,mâ$}I›¥MÛ4iÓúõ¥ék’¶I—×&iÚ¤Yœ4ûf;­x·[¶,KÖ¾QEJwbfæÞûþ¸3ƒH‚¸ ϧOÌ ¸ƒ™ßœ{ÎùU¹‹°²A¬QmÇçU` s›})¹Ô-NÝ,ù2V/!Ä]n@AB·÷¢Îík½& ,€„‚M±º–Ì–âTd22+fd¡0ÂÔ°À`þí‰ÿþpÿÿûnßî1> Ežu•šî#©³YnMĬW3 »X4…)g>)×T9©6eŠNÆ  h–¡¤4êµ:ÕP”ê²7%™Z.€ ¼ áý‰ùÜ_KÌï zXò‘¿$©b ¬©ãHê#càˆÂâFû‘š.8™tS‘ï‚ÿ‡u¿óå¦{_Ý^Ø4s~áš «ˆÀÊY‹ ’º*zw¯×~8 ,Iâ;¶}[-ô¬Q31¨Ÿ`9¹ì²»TX‚p£Ù$Í ú €E,F-£¡SV0F ÿUÍÓÏ!ËýÏêñ³‘ƒ_?õ\Á«†‡–²ˆi*9–Tû«Bׄ +ò¬”i‚:ÞÆh)0= -P+óÂÄl–C¥ ¬hÇaóâýi%UY€Rº~iÀûOÃ2á‘\¸rIo­ Ú°räÏ3²™)¨iðÏ×à…ú;¿¯ýѽô¢Kˆ¡¥ °c# Ô›i%€aµÀÓu×Z¥56©ŒÀ§{Ð5롪tÓ%ÖЮ5HmúÎ÷+·ßM×_4Ë&VPMðt!,cnIöŸ! 2Õ–lPãËÔÈ’t)ÉÀ&°Œ`4Ë­IX¥7XWÛ ­Ï­KUiXT+‘H¼êU¯ºüòËûúúúúú.¿üòW¿úÕ)tZ ¦£‚VNª…]ÖŸ˜ÌÔ ¦Þ¢] AâLËhðä’®fÊÐ’ˆ©wMn½ª©sê»ø˜­œTœtXWE@$Å|©dÝù¨‘´° ¡·¹:‡Il9¤kI 2ÃlðQ6ø¨È ˸kX'úºz â'ˆÄIxù‘)v­¸å(°dBc’ÇŽ[G¿€†7ƒ(²µ"ÑÃêÆÿEjV3Ú¨¬¿§`SJÛ-™¹m{µañÉ€ ÁU(߈äèkˆÌ˜¯f‡aD¥B9.ìü¢„Øu)jÀ£‡…µŽ| =€†6Òú­úÕÿ¢mÿK9åùÒBÙhR$ûeù\Z–R·ž¶\_ÐG’Ôt„ÇŽÏêÈÛ9/R¶LÒöÎCgœ²à(°ò,‘ì·Ž~¹Ê}…¥@X^ÖâÀW*"°$u€/]Á•Vй^H¾…0O•»v›ÁhÂ4ÌeÉmJ ¡¬dzI:HKKf¨K_S²k¦ŽÔR²-‰¤çkž|r°×ûª w'–€ËÒ\ËJ3€.TMNŸŠ/-„ ¥æ¹Ú+Km@®€²rÜ“ 1: ]'íÔw¼W¿÷³ôªW¥tó6åºW®h&–Ü4p£œwi!¤BшÀ¦d£4+€|yPdá¸)?2>lÒ €:5 Þç ÔÅd\Të+_ùʵ×^{ï½÷F"‘H$rï½÷^}õÕ_ýêW‹¯g)!R'ºÕ¶gÆNˆÄW¯«mÖãB5!Hƒ/¨zÊ;p= à›ÿèÏ6Ü1í»¸³²2Æ~ŠpåUõ[oϼɗl»Çdièðð6ošS–×BxaLzzzÿMùÈsvÛÁ¡gÀÒ ÑCPà&¬Y˜ÓŃà<~Òý+Ç8¡?Ü‘Ä j 'H‘M%ê·ÚëRMÝø~©·¢ ;”ö[Õ‹>lwaó€ÚiãSŸŸSÇ‘èaÚvî´¶¢p%=5H‚ z«/&hÓ3´Rm¾–F¶ÃJYG¿ 1ˉÞveê°´uðïEzÚ”ö[iã•ÞÅäˆ{™YaDÁ컥ìDóÅü==B›¯`¬ï‡lð1›Sž®ÇŸý$Õà(¶ì„KD`ñÔ „cƒZ½ß4~žG±Óß«’;’Š1˜­WÓuujÙ1ês„êPf*¯ðg.ÕU´héb+° 2° a µ?µdÓ<X€‡Àû'Ý\v»»ŸPdBiЛ´’üÜ/Ù1®XBÉI¢¶è3¶ì” VRÊ ÊÀï·<쎬[¨é`“«6-eKÆUhÐê3ïì‘ðX3¢£™ÅôÑ™1Ú›"33b³­Ë@a¸Ð ¬ù=£’æVõ­÷¨oz»ý·?'3ɤE,7Ž¢Àš/Ìï æø« úÈ_HÝC]˜nÝAÖæ´¢è8J‹Ÿ8b}û+ìÉGl§ì"j÷Ü'†µ¦'C×T+1%ÐÎq/‡À⃂tt-£¶€KrϸŒÀrXe[B}D`”lT@ðÒz Tº5'R£5Ôi>8«\)#W¾b,*õàƒÞsOžäž{î¹ÿþû‹¯õîµ×øp÷m¨œ0tX +  N„:ƒaV "¨é£„ØBaË$åÔôTm¦ÑØÅ:UÅé•Í]·w^Òjt8’š†ÀÊËÀšƒ+¯ á…E`Ýpà ‹ÿ¦`c»Ù¼HÖFFbÍuû#;Ùà£%¦qÏ‘>–¶‰¢¸ª(Wuĸ)Ã|ÙƘåj²Qk(«ßLjVƒPÛMækP׿[ê°(«^¯t݉Ueõ›*ØÛiÇ‘„71Xe% å¶P»V¿üoµ­VÁº‹ µÆæSJˆ ›D]ñ5ˆìhqc0ãàÔ mÜ!ÿ$võâ?Pºî´Í°¹½’ ,•l2ˆí†à¶…PcÑʪ7BññèÖ¿Í)Ÿršå2£p"´DúJk–ðøÑÃD«ƒ•Ù1Öû-ÖÿÛ ªB ðØq>\hûZT<ˆŸ_÷;_èúȦú²³êæÝ9UL`É€v¥‹æŸ÷‚š}*®…°0 VÞµûXb9õœ,È¡H÷Ÿ´ÝEY @ j|Š@P–«Û¹¹yÆn* ò´oÜ—>0ž –Êqùdµ„ë ´„•æ&ºT`™ù¤™…#¯›‰oJZ2^à£Å–Ìí8QYˆ;‘ërT é»`Xè3ªÌqw‘‹Á²L1îWW¬¹a~Ñ⾂ù„­À Θ8^dI}ƒL€Àw?'&C„Å{ÁQJJ-÷’IØYsJ?NBõø±C챇øá’Zõ‰óçжé3«KrϸŒàQ`•1·$5VTPÙÃÇ"–lP@ N­CŸ>þÀNÑhtÿþœêRúlëUûTèg¸ ÅeÜÓÓsq¤EÆR¸8ñnAó¤áf3ïKÓ>žvàÓÙ¬á>.w öïßF§}i ·à¾ºÐû`øšÌÍ™<³­ß"€}“ï¤Åæ¸"kg9gãççð)÷86ÈH MYõú©[0Mû.…ÜKj÷›{ž{±È÷PÎ>”±ïPz“.”hpµƒÕL.í¨Ý箿ÈdÖ¹ÑÌ´[ð®åf`‰ìX6ÆGz@+ m›ãé!*£ýy4•öÛÔM°_9¬]#Ù+ù’Òr=6òìÔ-XýÊ`þã;¿%g¤ÄlᎨžžžj;ª‹oáÜ[g¤ _e['pdÑ3mÁ±N¿…±aÛoå§ZOOlV( ¢Ñ˜ìBØiîéÀ˜}åIT(VÖ„ÃËdH@X ú¤l^®kiíF÷5¡E>E&‘ëõÃöÕλŸBÖ-xjGA˜` Š…Äd€ Ë»ñSÖYíVœð©žžžGú­@\P~¬¯y7:÷ IDAT@†(W÷ï߯Û]Yñ±àN¡ÜóüóÞOQÊñ Ù1n+°ªñ˜œ¯-È'n\ ¡l£ÆìeßϾŸ=ú?Æ[ˆÉq±߃Lݪڱ¨x <òÈ<îƒÈÁZFßC•oáü©SH 0ÓäÿÅ÷!¦ù”_ Ƭï}ãྷpŸâȳ="çÇˆÉ ®(¤¡É»/å>žeB9K$â®sÆ}˜˜àCƒ D*°ªm4gÚBOOû¸?1ùô™£Oî}±¬-¼0Òÿñƒ÷}±÷É%ü ·WÊc:@)[ÆC#õQ'–A2ÂZ V2kÇCœ,ØBbò 'žøÞ¡f4Ò0€‰‚bió×-™nW½â:ù' d15®­­­ûöíkmÍu;þüŽ;gihJˆ½ŸŸ;þPoä¥K£7~pýM>uâ'ƒõ‡oŒ¿æ·×^õÿìlä €Ö‰‹>µñ-_ì}røW'®ü“¯ý÷“Ïì =Ý=qÙŸo|ãLoñ«áÓߢÿ }bó'7¾@Ê4?ý{5ÑŽXÿ^¹ØÇO|3^?ˆ·üÓÚ÷{WÿŸÃø"Tý½Š³Ex6öÔ¾ä+¶Ÿ=”j «þŽæÊ¶ók aDͽÿ‡ø›Ô‹>lø[°ŒvÙ§˜{? @i•Òõ&vî6ð Ò~ë,’–ÙÀÇ^´zï@¯T§´ù+u‡§ÍCÿHôˆÜÏiñƒ'£ÏIèlÖþøîÅŽ­)";*2ÃDo¬þ6‚Õ–6vTÕ¯øÜL9eÖéðá¥û-ÒvW";n¾üWDÐÆËIpm¼ÒÜû—ˆj—þ• bCϰ3?õéWüÝü–ra¥Œ—ÿ ,£nx¯+Âbƒ³þŸ)­¯Tºï6_þ”ÈŽ©~Ç:ñ5âo¶;-V ¸iìýKX)mëŸI±˜ óàçAˆvчÍ}#̘¶ý4dü5Ç©øÄße¿`ÓäUÝðš ¶ðáþÿljmÑë?¼þæ™–ùHß—Œš‰–‰M½ñ7§¾úÌÐÉÿR¾ à é߸³kkï9ãKŒ­ïЃ>úòÐHú ? '"L5™?NáÑ@5L®»¥æŠk?¬›ìü܆wÿAß—Ìš‰÷ãÝW4u~pèï¤PM…~ÛçUÍ«g ÜðÕ“=/†ž@Mß?µþÑŽ| ûLí7øƒþáø/ŽG^¼hòê£õ/Èå•L-ó'BÑN?GŽÝ’|F´_lœ\ÿé ow7û‡}ÿ–­³ñ–Ÿè?"–þomð¹ã÷Fv¸-uÇÝ«·ÿô̾_l˜\÷™ ï°‹¦|¹õE¾óßïÿW+ðç¾uו×Ná#Ÿwê·>öÕ5~ú×ïY¹:T¾o·õýoBÓ´?ø„ùÿ”Ò­; (|ÿX¦úö÷X÷ÿé”öŸ&5åôfɤùуôÒ+g_ÒE6k~ý‹Ú>ZîG¨*ˆxÌúî×Lh¿ÿgÐ*u4ÅÎé>ÐÖ ~ü­+Åü¼=ô3Öó¸òº7)7¾j®›úÅìéGéE—¨÷üÞ¼ì› ¾çzÉ¥Ð}ü¥¬[>I:º´Ü»Øá¾ìW²…“wݺak ɪBŸü(˜Í_hú).vZ#Cæ?šD´ýUùŸ£*ð'~y¬~×E“Wÿñ†ÛJ_ëþþî—ë…Û·¥Â—{ŸÞ~ÀÍÉ׿½ûò×r¹‘kB›¾­|'oËèqîKþ–õŽï¨ßUÓu;¬+wÕ=àºø«e¹‹_ž=úߨáãz‚¼>sçCûý‰¦Lí¨’©ùbçÉÅd]ô!ú¿¶7´ÁCàÌ;UuÉ%—¼ürž¯rß¾}[¶l™iù©PHž…Є§]`˜Ø> €  ÆB´Øy¡A³_Õœl¿ªÚoê‰ÒhG;€­¸¤`uop»¦ÌOÂT=‘1~,C‚D=b[T©ÀªƒGUù{eœäT£rÝ>ÛÀk¤š ÷>¨šcш¯‰†·¬°We@ _#¸i§­O‹’#ÌÝ£šìäã{`¥„ՉϮl”ÖÕï#þê(£Õ ºú.Öé¸í„þ&2¢ž Kä,ª)MWÃùñz DfH$úÌÃÿ,O/R@·®1ßO*Ô–Ku•‚â>ýœJk*têì- q'NB ú³!^ö ù!îYn™(ÙnષT®]×Ò]„½‚£@MŸªÁd3€ÆlyšL¶ R¿­êd}f3ì¼U€ŸúüTÀ<XQ#› N€Ó+º@JŸ€>ÿ1¹€,œdð‚&Tº,r(ðÐÙ#Ÿ9þàƒ¦î­§•²ÊËq·„ɤœ0¬6sij%«ºèÆÍ$ÒHw\¥ýá_¨o{·ú–wjû¤rókH{'‰4@™.BÞÚúÑ·ùÂ^è}H&f_´j‘Icr\ô£ÃüXI9¼ â¾räÏ+D& k. ×Þ€Ÿ95ƒ$bQë¾·~ôm~ü~ÆÓd¼­°˜ážèöRwƒec6áà”yÖà‚àŽGþ¡³‡ùôS,n!<Û=zvêóLØ]Š€K(€F-N¹é$jµF Ö³¸n· «Y_ €båB!d‹˜ [ðF„‹J`Ý~ûí÷ÝwŸ÷™ûî»ïÎ;ËPÁÈä‹Ü°Ùuž Iµ ,ÙOPÆ[ÈBq$D”b=ï›7µêä‚QBd¤«·™Ñ&áô޶í«û=XêBÜ¥ÜNÖy´šéŠjŸ<T—©ín¸¸Òýuãûhã• ÃËçœeßo0Êhg›¿ ÆÆ^@›®*²TŽÀZ9$.,|aDê¡%18Tƒ€`°’)ŒI™ìžë,¹B`åÃïÌôhåXŠÓCÒõ?åwÈ#ɦåu!t2°¼¦NLÓã‚‚ªNÖÑÉQP®fꂚ§h ”Ð`Ñ%°4+ •µ8‘¶¥è²X׉* µKc×ßÞ €f@PÕýŠÀò4½Þ=Ö"‰æ/ÇäxhbÈ 818œw¢¯A@„%ÄÎÔ3‘}OgvO³»Nœ–´N‹dì‘sÇöŽå©é ‡ð’û¹’i=ŽNíCWû} T}Ë»H“-í$u!å¶ÛIS ‰4c „õµ/XßúöèÿX÷ÿÀ€x!Μ²ÿçÜúéwù =S—™–ÅŸ}B𾓳.[É8{æ1³Ë6~`ÏB½ÑmwsËÀò‚„ëI}é”9?ûÒ¥ ›5ÿå³üèAüÈ~¢ï$Ò¾ i)ì8­…pV¨¿yú›ï"«×ÑYn@ÄÐ9,ów ž{ÿ!É×ÿËì¯þôÔ×OÅ£ïä"À q·¦ðzËú¼ùå¯àQ£°×ü6(¨_Õ0j Õ„ zˆånmŒŽ¬µr-e¦×ëA8ÑŸªÈMIJÑOzæja¾°¨ÖûßÿþgŸ}ö3ŸùÌÄÄÄÄÄħ?ýé;w¾ï}ï+} vˆ»3ÈìbΠÕgÒµJ€.»Â!) Z1«Á”³º']ÕÉ‚ÍMö^Y‰®i nÊÔàÍÃ*N1}^ø¼ÖÜ…‚`™uÚ{ËšíB¬krXò£TXðGðý/ñÞcüÈöÄÃü…¾g²ùw2ŒYßÿ&2iÑw „°øá¬wÂøžD, ç¶|9‚?ý˜1»äG‰ßA\Q`Í;ÄĘ8sÊfig&°ÊG²zû‡àA©”nÁZ'#’ž>~ä ’ 12MWßüÛ dª«‚w¤{½ì*ÚÑÀ¥bg‚Â2$°¼ƒ(ïåË%°$Y#œV‚Z‰Ðàçÿù³ýE×[p‰9“XqË>Ûd u²vB¢¥KK L­ÑtBa¦3+–ŠyãÜC`Y¾OÄ»Æs–*4é LUWW÷øãïÚµ«»»»»»ûÅ_|ì±ÇjjJpü:¬™CÈbN á:üv¹)³ô¥§O*°2Z@³¯X.%D´k$W}¦À©˜%:kB¿QýÔÕýÚK§sP`pÎbÕÀVÌ#Î8ñ½ ïË’`©éR:ïPºîœ^»!ã®I”©G-„¼;¥/—FÔêý;ÿ[63< ¬¥?&a}@.ÕøØn>±O˜qëÈXÿî?‘:9úyóËŸ3þ-ešðtB̲ ¬Ï0iÚû¤»¼‰Ü¥ö}/}©÷©Sñ ­_Þ’ÿé¶øÁ—aì‘ÿ \w“rókH¤BH† ~ì˜g{wñÓHçj!N›å=8gÏJš[•7¼Y¹ív²v#1hç¡H²†¿ô<öøÃÈfIC£ qç³XüÈ16Bê@©8×sÁM"óþÌã0 11&dX˜?@ŒÛRÙùDá0X+üÕ|{yØ™ ¬²Æ‘vK–‡ÀÊfØO¾ÆÄP™¾B!ÄуèÅ—ÐÍÛðCûÜ·Pn»}*‹Äó¬òŽªG B›«­[f–w9±àÑ•ÁœN¸d—”¯äªN¸Ÿbª…0iÙgæq#Uð'¶…0 zR«˜¦R NA„;‘àL*ïÐJÓÜÖ4î¯ÓtY/ð{š&«²¨XxÖò¸Up¡P–;Å€ZM'†OèÙ=g–•ËâœkÒœ…ÀÒ˜ßÌ7’)X3Á§¨.ªÏ9Äý‚´.4„g#Ï  … e… TÝðóÐ?³óO’ú­4´±’·sìNÄÉ>aL¬-cõä´áReÕëf]x%ë†Òz£˜<Ä£‡„•$võâßÏ9Ë„ºöXóVn“ÛBHÕ:ÍÞ”,r8µ%"º?nfÁò,Yâת:©LnÅyN%m ;`Ëއ겸C`MÔõŸN4#§Ó£—¡]±ÈòXd05ϧæZe\©¼UcÄ”ï8ë·´‚rA·]ÎÏòÞc Tyý] Nø?–üøaë[ÿ¡¾íÝ2£G±“îutÝ&ˆÞãÄä¸è#ua©Lñ‚?÷4zýÍ|Ï.q®Ÿôѵ•”O‹11Ë$͹Æ2"gÏ?œÛÉDmât/R…:…ùÙ•B~^!bQïHQ`•ÒÚŸ_ŒZßùOÒÙ BÄ@Ÿ˜œ Ȫ®2öpàŒHÄI¤‘´´Ó+®s¢[wÀù%®â9JÊ>^ÂaÌj!BÄãÈr#°¼°µT)°\ è§ÁÌ-‘VõZ€A²ƒ©ˆ Ù@ñØW>HåXT(,¿ áŒë*ó™e[+Þʯ%ØÙ‡À²4²ÔÌ.ë#5ÝJÛÍlð11y•XNà4Ñ#D¶L–L§.aW½X!°.DeÝo‘óO‚ÚzsÅì•»1…6\ÆcÇèÔ¬ê ´ŠÄi‘䓇QÔóXm uRu‚õÿL&‹‰Ô ¤€ZÅ–†•‚:?uö…¡Xu•Xv0eÑY¥â!î>Wýä q‡pî6¹˜­þPwm=F)('–&T»SU(W˜åK@Íõ-ΛÚå ³[ݶÅ2ñ@¦qÉ€v8Ñ>šÛŽMx)§‚Ôû–àÈæX ”U©  Ƥ柚>®e™pý‰9`0n—U‚Õ<¡ÛŽªsÙqŽ\+ÆìÌ%i\Ër!¨s¡2œFï^WMÙ…÷ü‚n¿œ=òs¨ªúÖwÓ‹ìß2K*°øÓ1ë»_‡ D ]½–´¶£¦VD'ÄØ?°—ýòAÒÚ¡}äÞ‹áA~ê8tŸrù5cçúÅ铨b‹=ý(ßó¼òê7*×ß JE<Æ~ò_0ì_™ˆN ­ât¯X`keNz^ »éÙPè)‚RõµwX?À¾Œƒ/ç½££[,üèôâK–våµ³÷(›‹…P*°f±¦S°Løóöu-*S`MÍÀr¶v!XEX¦,C&Y¡˶J S 0*×€)P,ƒæ&î H(KËmM2VŠå³ ,O(„ b2.< á¡"O%ËÊZG·½¡íÊæ®€ªÁ!°L53œIÐÌÙo!þ°ãŽ¿ðèî®ËÜg¤k¶ŽÝ€S ŸC@ëB¸GÂ:ýQ¦®DôôTˆX"Dvœ< B•®R›Z’ºDj Òwƒì˜¦G€R-„ÂŒƒ›€àÉ3(™Àª*Ö‚Žã¯'ˆRºîT:ï˜+{ån0r)Ñ#¤¶XtT•Œ#ñ·àÃ=`iì-—ˆ!¾F°,|\f–¥¡d§Ò¿¹ 9îU2ˆe¡3yQÓäúfÙ—^ÈâeIo)3\®ðªF×QÐ…¸eòλßÜjT)U êé­BÑ@Xþ8(W3µîü™êd`ùKˆ÷ò;$Z½ìéé©U}p„WpÊë€gV̯Éw€š>Jˆ­ÿW<•+µàhµ$Ígr&5ÿòƒÈjÞ$&_¾++˜,îýÉFfо#åã¦G*eÎ,›Êʪ—ˆñl®Æ5\–]a 8¶Gcæ8­eŠjø1’H#ݸY{ï‡é–œ”•¶¯ †Î‰þ>Û$(å•·Ùk­^BèºDï114@ "“—hÆž{BÐWÃâ,öøCÖ×¾ smè¼ H&øžçašìáŸY?üRIó_>ˆ?àUQªíX 4ˆ+üÕ¼ÀÎqÓ}à)ˆËGzÍÚÝ«Üò:å¦[é57PXò¿|°¼;œkݦ2V™3%bÑ"kŠx ©›¦©n•Ã;ˆR{åJ¨J„T¹Ž®…PÐ áêÃsíì¦t!d¶Š*1…À’kI.…2'÷@ø¡0INU ¹æz."ÀO|4fW;54g!”1 Ù™[¾Ì–›‹æXç‚rpP§™ðl ‘S3ÃÙ|ð±Ù ¬©C9œ´KWÜùÌ9q‚v1½DX|¸‡÷ðñ=êúwÑð–ùÝø 7Ü0¿ôBDBpڰÖ?”RÓ €§Î¢¹›}_êk$z€È–IËÏ=LÛnà`i¢‡Ý{Ýâ Ä}°ô Ö‚Žã æD«SV¿©øQ]%ã(°|b€e!óBÛ~/Ÿñ^p“ =n’@›û*ñ5ŠÔY‘[¸ú*IJðï˜Ëê€ZTEŠ*°tJß'î#ÅrXv`Íåáî 6'å7êþ„bé öý­Bœ.„Dfs ]¥¶ŸÌ®Àò+š,>#ZÍ 7lÝ7~Ì™ù”åužÜö62Šå`'°RÆyH;QA÷X\jþýV 'ÄÝ„·bìBhÊ"x•¹º9Ê5ªL,wÏPD6eR»êˤšvÒâ–ü~%7'o²ä]„1Åõ°ÜQ%?Fõ]¿‹‚YÔ@„#":a=ðôšÅé^*·¼Ž;$ÆÇd{2ºn#ß¿‡Ÿ<.F‡@ÞšnÜìnF?@¹ò:¹0ݸ™Ÿ<Æ{‘Ï(·¾añ>ai`;Ÿi’U«Åù³üÀÖЈT’ttªïü]~xNUCc #°æwKo*·‚R ©UåêëE!Òö=8s .•I‹É hi뀚Zõ=§O˜_ùöü3Ê+oƒ6;o»x0M™u¥¾á.öì“üàËì©G(7ÞJÂõ¤Ñ¶ý’Pˆk,…ÐÅŠ«p^p0KÝzéZ³°oM©­#¡°ˆEÅø(il¶÷èÀ^ëûß ÍÚGÿrÚõÄäi(ý­æÔ… ¡°H§Dt’Ì@`-Ó÷ÈÔª²X’⡜3ǧˆ #‹¸ ¬Â‹iZصDf %`g`x«z»Ê•z=ØÞU § SMÔô1Åò ¥‡ÓqªQ#¨Å|© õð ›·ªõ4›ÒW,„ÓB6’eÂÊÂf§]’Kç­qµ¨„À²-„%„¸»Í•æªÀ³Îe­îÅ IDATKeƒõý,M#ÛHÝz@ˆtµ7 2÷Öxá#|b?ãñã!áͳ¯æaUæ"™ÕHüÍP|˜€•(¾ øo&̨Hö£¼¬*êB¸‚Ì#¤…€Ò~[‰‚Äê„Òñ¨5Äï™–Ôö 5¯¸±uÝ›Wo節/²Œl<“«Äíœ2å²!a8êz Tõðb~O]¡9ÑWev ¡ÏÉÀjöÔj>x ŠÍÐþPn—CnWŠrö.m™’¦á>'̲,®§„P§p’[nмk6”÷[êÛ©áP—hS˜/5žÍUÀfKµ+æIOÛ#“¹)³ŒH9}늸W0ï°Y'€î¸ŠÔ…H¤A¹åu”K¯tíN¤©…ÔÖ‰x Np¯èó´X=B–v/§@Öl ÝH%ùž烔~â’ ²ª‹¬YO¯¸„€? Ñ&›@]Á € q_éBX9øþ—dN™ó7ÃC D 2s=õ{úQöô£btX @ö¬L:³ ™€a œIŸ5-òBÜ+!°¤‹pÆwÛB¸ X^H²†O‘Ͳ–óË3¹e·Ðå å(°¦~-YîXÊô]¥:ç•më¯oYsI}Kƒ?§pâj€béÈ×\dt3 gëàx°õ:OÙ#ã;Í…Y/7‹8eÂ4(3(°(¦ÀPG+IÜc¬–`!„“%1?ÂEqçÃ=|b”€Òý\…ˆnÙ¿ÿ\VÙqÛZiÿm‰Ì‘ãñ^°, v­<›7 vÉ2,>ú‚ñâǬ#ÿ*Œ €½ r;<Ù_lÿS|ì%Ró€ø›‹,Ÿ·ŸÕ¤Àšã8® JP%ãHüÍ ”ø•¶[–z_æ% t¼6ßBØØRÍÂÒ ¢`²kÕ‚JVi—М…p µÑߊvv£ Â~V%Š·b Éݨ¸ ¬ 2»ËÎ=¤É_³ÿ~iïFÅËÓ›§Àpd_röN6ÌN˜xH.Y‡ŒšIA91uÑáx˜Ìºrâ%Õep.å]AE §Ú4ñ&=p,>äîC‘’T8ýc–‡À‚›e{ ã5µqÒrG•œQ§Ýr©rÓ­ÊM·º¹W6AåÚ›ìÇ„5쇫Và§Á{¤ógá!Â\(7Ü€½øìÂí|'Ž o@7n–wïtÛ)#áT …m–ÃGÌï zBÜçq«‹ 19Á_(Ì“â'ްçž.7à¼\ðwŠGs{21Ë$õ;«(æeI{'¾{'ûÅìð]ÏÚY>pfêòް ùæ¬ÀB¸é1:ƒæ@F¼/à ,ï –¢Àzn¤ïóÇþÙÏZÎ=cÆb)f –e.ÖÔ ,'|ÝT²/ɨ„iC(WàÔ!ÒèJI>|gèõï´~ëU­›‰]„ô\-$õÝ2¬`A±Ü,„D…ã†M2A@e~ 1Ùë:¬TB`I>²ˆ!Ò<ÈçÄ1äY‹­™!ëÌO¨kßNô¤Ÿn¾…«WÏ)†½ª¹w¹"}Þæ³²£ÂŒ eʯàX©bÄSDfÜàñ^Nô0¨€Öt±x¯H`æ}`ýÚópfLîpéz“ª"°æ8Ž+¨TË8…ø•Î;@«ÉR”ÖÁr!—vR£h‹ë¹a1‘ÇŽÂJŠd?}þVmóGí­Ë…Ô^)´´™'ϤQÞÐ¹å ØàƒÃÏɪC…â­üòeóv5U£ÎN`5ø‚Ë~ Ã-JÈêÕ«ýª NåYnù¨jç©+Ó+°üΜ'å Ò–çâX\0dD¡A1Re&§úe•«À’Ÿ·¸j?ÿÁ¶×§«êÿålt}ÙQ8FÉ™XYn¹ò±¨åQl1&ui˜ly—4ìzú³VËu:U]ʪ®é_óô&#k×ãÀtý&žI‹±qæY³N8©Iñ‚nÞUçJN›Â#F†Dim'3íÀ€?€n¼(¥;®fO=¢ì¸ÚÙiJšÄð © CÓ¡i0M˜4}~QLy°¼ Îõ[ßúÔ7ЫóÜýüWOðc‡qËk•)Çü½õø(?uµu¶€Ž.TL{ëb^Æ‘n¹T¸"⻞å‡öÁ9}‰³g .ï>Kÿ`}y–7(­‚ãD’³üÀ®WÞp×ÔD< €,C ¡wejUñ쪱‘Ýñ‰Ä›`§©º¥,33–”¼è–0åÞn¹ËµN‰Ë:B¦Z¥–MŽÖðÆ%i܇üËô¤•Á+šr¿z—ÀŠè¹8•]•W¬|ÈÚQz8SVªÓýq:èÜŸÌ@ @D«\UJ"T,)M®5ãFìI¯EûmñÉÃà&mØ!ssìP§JXìüã"9@›¯£¡¼þÊáðœN "ÞËã½4²ÍÉœ²ûéŠì¨`$TFã RÓ…2XvX»äΜŽiʼn0‘8¶ÿ4b0¢P²^Œæ¬¥?áÎqWP%¨žq¤-7ІËf_®úA¨¹ Ñë±ÀÖ¢ ¢ÈŽYG¾˜ûÛJeQ‚WnI`X¥ZäºNŠåÔΟ¢ŠêáÅBÊ´ ¬Ù¿JȆ°¼(‘Z׳1#Ö©PMòåùP\rªÖ‘}Q¦H1@Ú’óyn4;0nÆèV@~ÌÓSºábõ½ZàÝ·!&ÆÄØA©#@/¿†ØKV¯u—!MÍbxP²!$X#¢“"•$a}ž1Ç`-1…%F†øa[™B7o#ͳçÛòÞ£Ö·¿ #‹Lº ŽJ Æwï„¢÷˜›¡.âq Ônzó2Ž9ÚWóð~1ž;о©ËWàŽüCƒ—ûO7nñ˜ä×f °–«…Ð;ˆv{QK^S¼lއÀ²2Ü™ãá ËXV°ªbûʇۅP Pe8äײT÷d`À­è‡ü ö(K¨%yqL!Õæ­Â^UàÑ_/–™…P#¹wY·)bÆCÐ/ãñ)Ш×Vðv²¯PñŽÝ.¨ÌÀš[ˆ»Ä"g`‰ô Rç¨Çeöp¦BÙÉÇ^ñóµ{ 8Oœ7Ø©ïÊ¢À M™1‘@‚eÏ_”€0cÂÌõ‰“nÝÁcÇ wÄ÷¬n_¨"¬€0ãð’Eò ?ÿì›XfT˜1€”kxDu(°V°‚ù…ÒvóRïÂÂ@ Bñ¥½²¬e = €ø[”¶›I Ý‰¬R|tÍ?SûÇoﺲ”…m ¡°…ÏÓÏÊ:—u•¨šçF.¬æŠ9W%ý€åBÆW%ÌìP*"¨Pó÷Äírèʾdñ#Í nPX-q~V#=Yýsjª®‹ÂmZÄ©÷ãi@šäŽ^s†9Õ‰ln™”˜&3Ë–ÜpÊiï}áXHK;‰4’úi_E/¿ß¿¦Îe¸©Bdý&¼wú‚˜œÀ{Îhqšo)¿Z¿Éå\HS‹òoõÖOê]ïÐþä“ÊÕ¯` ÇRÓ¥l9gûE´Ô9 —ŽXréyéƒc¿x ÄÀ2þä#¶àÈ0¼c'â1ɉ ¹`çü¥çˆd\JÿˆD ©] +!d³-ê!á¤k $…ŵ’ÕkÕßx© ‰‰1qnºÉøØ…â.S«Š+°¤\ˆ{üt®É.ËXš™¨P$McGb•€‡ÎùRïS»Gs†Ùïœ~ñŸøÞÎì-ï3̆?í½ïO{ïÛ7~¾Äå]:O^Ó½0ˆÍäýNmk:}:õHšÄ|*!’êHž¨N Ê=yŒ½EÀ^µÌ,Ér"d˜@3ŠÈ\¥=€fE ,¢P§ëê2r‚´ÄàØ™@øXáÙé,+¨.²ãÂŒ›û?kìú¨£·Öé c\1Ø_,Dêƒ,Ý3•³–ýW°‚êÇ{\;"¬‰Y—¬rðØJÛ«”Õo–r9=²Ô;5#j5½Áô«% Ìm–sµ›öX¤y¤ªy*¿ÍC`9çóÚ"Z¦Bá:€¸i g4³0Ø-uì’Ñ¡´¤3"cÏç9!î â$ ˆ€B)œ@›ÀrXªP$¹l‰“÷iP˜$¢1ëäµ ¦‘#³˜3—#-„R¦½V2•±¬/õ>õï'Ÿ)qùTB´}Rûø§H[ij!«×"›á{_ã£0 RA`šnHtÝFâä1bèï=j1)Eë‚?_¥4#æ¦Wâ2kCžÃ‹®¿(o¡` ih„Ï€JmDÈw>m~ésì±ÿ)w—–Z€~ü0ºq3~²„¹#ËûzA)]· €8›³ˆóNµ¼` ,~ì´‹3š ª%Êr¢[¶Û.¹ ˆEÝ=Ì¡" ¡ðÜgUx˜B¶lÀ½ ÀÍ­çøáýŽ…pùe`åAXEE=²×­·%s2°²ÜÊJ !WätT†—ªz&½g_¸ç¥èi÷™^s`´¾·ß˜Ï$Ð]£±p,Ü2Uêf…£/›j!ô¦UŽdSßïÛý§½ßü¯S»à€Êtô‚ê¡/ð°<9V)’Qó¸©À²“ÅH}÷ÔÞˆóŽeF`iŠgØÒܠͬÀò¬¶ú+`7ð{¯ù˜ö»:JjH¯ˆùèB(3°ÕB(Dú<pæÖ¨N´ZpSSNг'ϸIO/õô”\¾LÝl¼Nh݇tQäÛ‘@…}IìÄz%R|ô|ôyû]r¯1ïwâX ”W‚ú.¬ dB>òœHö‰ì¸0£H° €€UŽüÊ¥2«A5—q\Aõ`e ƒµHƒ(¸Ô¢’ðEhøb¼Š ¬²Ë‡*Â`9Ñ–Í qørÅœî4 ¬ÓÊ#°ä Ê4Ï$ËÊ^?>«) 9U¯9B¡Hs@šðÒ%ã–QêH´Ê©W¡0'¨‹N5åæÄKø¨ €)†û ›áþ!ne[§fЙeäY í(°Ì’«Û„•ÝîÙS[íç« ïŒª\~ ëþï[ßÿ2Õ? ÝðùÄȈE­Ÿ}ßúÚ¥|Œ,RI©„b{^+馑?\99Âï=€l,9ÕV`%1Û ÚÄ\É ¬%ç­$D<&Οƒ®«o½Š"Îõ»YN3Ÿ<ÆHg·”׉sËÉn©YúnW ¾gÒ¹€èµsÜE"€Ô–t+7ï?Fºn“Mw¶wÒÕkðŸ+Xf.Bây\Éî]r)¾÷Eë¾/[?ÿ‘|’õÀ:¯bSiï¡^RŒÞ7 nN&ÕFfJ­0Áa áV`5ÑDÁS`×A%Æ¿'§~UÅicÏÖ¾ÚúóÇYË!-¶¢Vß’CŒµ’sÏ:Ïýï¹–õ^ï<û; f]ýÇÛ±JÒ›únÌBhéyK¥¯Ó¬5äŒ0€„±º€¡,ya/¸Y T†³£¾ìK7má( €IeBiå´ñ„NžR¤\)Á$$‹øz1=‚Ê!ò XøeØÒ( aÅ’¬ ŒÈˆÛ­éØ¢ËKÈ…P(ÏBXðoªrazòÛ§­—_+^÷ã{ß<èHÀr¥l0Ï¡‰õaò·þ{ݵò‰‡!\v鵤Á=ÐwÎÅ5á'<ÌÍ ¶Ü-&Çtšû²›•Cgpî4{ýµì£šž¤¶vø™nò•’W®AP<@<þ°&JÔè°ñÁŸ¨¾-M`¥W¬Àº –|æqvèRÚ½OûéÀlßA1|V>z?ùÄÃÆOü\UÂ%ø3j=‘)…©—X–¥ÅV=ýÔ?¨F‡Å7¿Î^íŠBÜ7Ú* €ö`‡/“/w¿þÏÆ;?€D€ÊfàØˆ'Иâ!€¾Ý㌄Trõ cGŽª/‚H¥ä‰‘Y„c³½ù;î è¶#‚¼ªúXº`7Ì›„XZrÅ¥Áw¢l”ÀrÍÊûøô¤Ž »ækVˆ'N‹ˆ'•È©2kÖ] BWáy'й%k‰K0€ULÍ™y7[ŒÍ#G{V©b„´Èõ©1W)7’…¢]Éåk@c†×›*ÛPl³Ñ€q×bBÝéM{VC‹/)²6‡À’©5Q áºëM"°ò£X¢`ÒÚ"9ó¤¾[Î>[çåbøkbøn9õ0¤ bþ‰ÆY\µ¡; ¹ð¢{ö‹ÊY$³…¢Ý” 'þK RàjX±~S…I(!&K»¨ü¸*Lб{ÅØ½rê!é`-YËáò»5â»ß âí Š³™¥{33çÀl x«•)°¨ò‡&šhbëÃËÀrÖN`)£Îw¿GŸgääC*sfÍ«­¿M)†¾¦œ´ž$·Êòþ·°–ƒŽ˜|@e‡ôš¦ßvhLå”´OPÿÊÊÇn ±2ùU-žÊI;-³R¬²vÆô—ìË€  ^@¹+4´ë°š÷Jf]å:q=‚ÒÁUÐL#Ê Ò(¹¨˜Suý°¡•’m¤YÖ;¾4OÄ%€¢?BKÆÜ&h§µÓ!€í‡•6}4±Ž ¶v~ËÛùmwj1Nõew/׿ª©I/C`µµë!õ¤N¸Ö­)ÕÈ:wºA¡“<ñ’|òÑЯ/ C+ °< ¡–ùÉçžÖ&Ä*X\€b…Êrúú¸ êA55!î¿R†°Ø±«ù ·ðn¡þ53%þ嫼pnFÍN#ž ]H$©µÅ‚š™ÇV3Sঠ×]ÖŠ¸ªýV*›%SìÀaâ‘ïËgŸðX["ˉßz“ÇŸµ?óiMתÓ'°Þ߉¬‹ 뙟úmvÍä³OЧÀ®zõ°«ß¸Ü«·4‚¼*UW‡«¿a?] ,J×VL_þìÆ,©”¾–YÉà°•}øÿéÜ“Ÿ˜þ½ß8ù…¥OÏž¼"—|9¥ÇÒ°ênÞÉ“’¼ÞRËs[ ¹cšÿr|!¶YÍBXR`I¦C‚y¦‘Ì<˜dvCÑ¢ž«i!¬€É|ÖS`Õ&°Ú,ÀŠÈ*Á“ë¡©ÚÕ!œµ9ð*üÊL¬í2Þ k? Îm‰Z<-gž³øŽ·™Ç~ÝSIð(¤ƒr+ï2áö‚»OóDZúÒ§ÿAN>€RûP|¾ŠZRT»ÍiÕ ,0“¢ÝPBÿT®²ÅCåÇäÔCbøn1|·œy Eª+„)ÖÏ{oä;Þ@§T~Ä(±Aî•ÕZо2Wc!Ü ÖÅ—ôñêDó8n¬v(–߉)WSBC寔“&«•÷ÞÈ{oàýo”{öK+=ˆÊYTÙ*ýßU!&P… ¿5µì¼GÉ}Æ‘Ÿ§h¤#§ŸðVž[ÑÎl„¬šÝ)ÁeÝÔÂ{EL·,ëJÓ=\¬XÕ®¢ @AÚ9d´• ,C««$KùEM`ió ­-„¾ ‡†v]‘$Óó(YWg]•vRXEžÀËCÜ#:èI̵°¤íèç'>ó‰éß;¹0£ÇÜm”‚dÊpw†òr7Ø[²Z–¾1˜OŒ„G@¶Ï‚9›90Z9^ÍgT6¸@)âÊu4ßáYÛ:hÇ µwªÅ´û/‹{îvÿåóÎþ¦û7¾tUj|¶ ¥ä³O6²i5rN )©w%RÔ‹‹EñÈýÚvZB>)svåkÙ±«¨ás*³¨Y­FV¼Ñ_FêÛaþܯ°½Q,Šo~ €<þ º¬¦J±T¨ýv-µ´Â0ر«A$?£†ÎÀа£+ÞŸ­ƒà EM¦& ±D¤›;R• €ÃðüõX³Åœ¾†Ó  .[A£¯ÑNµÉór@Kf@e֢ʩEŸ,^žVKú; 5=aHnØEFS/ÌàåˆU·ú nF„ „´]C¹9Ñbå¼ZU$ þC±Í,‹iK°áˆÖö, A1µ9Àª},‡;oª…0?†¥ ¬än¾óN¾ã­¨G`)wè+€âý7óÁ·S´‡u_Ã{o`ÉÝš¦Ñ^å<ÿ_Äð×=žhòA9õˆ½GÎ>¥œEŠõ‡>Îw¿>Ìdɽí%«â`«œ÷F¹‹ÐS`ió)Pùq9w뾆÷ßÂûoa­—ÖZ¸u^ 2àæ Eº(Ö[ÚPXµ: áJÞ×áâKúxu¢y7~ˆ{%FïuOüç/n 2ý2jñÜ7|Ç[A\åF®{ÓV´?*ý²fá—‡›#ß ì´ç7*ï4;/^ðVžo´þyK¡ a À2B ,Ã-³ŠìN´˜»ú ÷Ê•î€þ&F`ÈK;G9Æ–2P.ûòZá¢4ŸX¥‰´îhBÿªHæµK”žÕ#(‡ÂoS#B%>‹ ]ŒŠtu]eÚfíœ&°â<Ê(€©‚wŸï†ëÄE°Ÿ¨áð"ižU‰»>ÖxìîÁ«úŒªKý4ô(]‡a…R¼œéGïß¿W>ùˆZL«ô<Š•*9tÖûáXÃçÔìŒ|î)uî´óßÿ”b/Ac ¤ÁÎëÿi`çžü4uõ¨Éqùä#•ÊfJýn 渇Ôf+ØŸu”jf J‰o~;º¤Bã~ IDATŠ*ž`»öAy¢²ŽC÷ R¿—¢³ÏÔäuú$§¬)K<ò}ûÿ“øÆ—œ?ÿ÷ Û †ÏªL~X;õîà·¿€: )‹ƒ7$Ø„/#õí0>ôQÄâòÄKò…ÈW^[ |Í ,o¯ÚÚi÷>Æøõ7aU•¸[¡ ,ÿbQ7ÄÝ'°J—‰’…®#]F‰Àj(¡i*ï±E"Ôǧ™#—¯Låx]Uh¯ùø€C´@±\Ø•%oÒ¶G4kÃ>Âîþ%–¶ïÝÚu”$ ì‡Êpò®£I@«ºË'°$×M‚®ÿÇ+̈ˆèã˜aB˜t7ø¼·Í,=|ÔÀ Z›¹èŠz¼U’6…ÀRë¤Àò¦‚7ƒ¯Ð}y¤o•;íG`UùªÜˆÊ“ÙÂûoä»ÞÍzo„G`¥Èñï-Ûfèžý2Ük=Âz® gŸr‡¿.Îÿ›{îËxÿͬí22S´…Kî3)¹Ç¼òÓæÑ_YÕ{÷ßfb1~¤£²#øÀmxÿ-dæŒ*LÀH{>ÀwÞÉwÞIÉ=5×Å# F/=”âúÈ€'_xµB áj!l¢‰&„g!´ç!ò6UœcßQNÚ=óùÆ×£^ÀZý&xfR¤Pª8³¢ý‘ /ÉÙgq´~ÊYPn™•” %vÜ·­˳í7f!äÁ¯UF`íJ¶êàÛ>¶o•7NžJÙE3 3²„À"€á”<žK>ò çþjŒÆ"°X@`)êŠ&81R)&ÂBJ«8³àÇ|T(°bFivKå¼s¹àæ‹(H°(w"ælo9¬À"C°«Z@F0¥üøÂéàA'¨2l8µ¤‰Í xETÚöåX¾ {í5ü†[øM·óÛîä︋:»¡T4@ Ÿõ~ Âàk¢×R/ñïßv?ÿ?‘˲#G÷üÈÊöÜ'°ØÞƒàœ_wt _2¡\ׯb°‚óìæóWjvÚ‘ €]^…X§Ã—!dü,½vl(•Njé–>R:†Ÿö¤DXS¡üî=ÈçhÇNpC>÷´ë•NÆ“ÀêXjvFe)™2î—ù57PçNË矑Cg49¶ ÒÀ.ï‡TCÍ¿ævé1%<ºbù-|ÒÊÏÀZ‡O ;v5¿ùí0í~Ý$'Öï¢u5½"°‚ ,®®4ÈЗ¿§Cæ|¥¼gÃs@+cg´K,ñÎ?57 ™ïm3ãð“ªJ¯²¼ÐU¿òXâù-¿˜ÚR*&!YÔ0.áewÊÓ…¬þÖÏÀbʈs¡+þœZÐi4L`I ç6 ¬L­Àb¾+ÆkZ‘n‘l]'±0¼ ¬õ°J`s¬Â4øQèUPa-ymµôw MÓ(gJªü¨œzÀÂBu–×Ðí Ö~aìy?˜Åz®•ªwòþ[XÇEôªÁLcï‡ALLÜ%)Ö f~Ì¢XŸ·HûѬ0R"°à«±<ó ç 1Y `Ke`Õ:ŽMl/4ãæ@‹° Šbü?ÜÓÿ ^„׆h÷ü¿*{Á}ῊóÿVg ª0iS´K«P=D:äæ+3ûê­'?®§"äìÓu#ßtO}Jx ÜÜZâ„6t@‰ ®Š3A‰Ç6B%Uu` )°âXKcÌPDQZ(ê‹U*°,â,Qš [üt‡Q HF¢†Àɳ„j ,=èÄyi1ÍL—ÊS¶7°Îˆ‚޳M™QKƤÝÀvô3€CÞˆ¶ª+¸%X°¦‚]ßëa/%ÚJx•ŸQÙžý4°“9ªéyú52¤2‹àœRUn{¨§¾®'€Ê.ªÙiX~ýMÔùe¨vu~ð(+ÂïúÐ*I”HR{"Q¶{ßÂÂõôÁ²ÔÜl%;³˜|ƒdƒ ,Ÿ¸ ¬© ´g?j+ÔÝKÈfœ¿ú÷_>ïþÓß©Ì" y5? Ó¤®±©™)yö„ þADcººqÕE„êüYø\!íÞ@=%žx®+Ï 3¶¼ôgJV`mÞ—Ñ0ŒÌøÑŸ¦öÎ:5u ?$œ.thÚVCpKyU¬Þ$†¾¦„¯,Ò'°)´×Þ\aÖ¼[ÍBÈŠ»îJæT| aåvOG ¨þöH €0ÊX®éÑUU * û…}dì&L7w{¹F¾À¬“Ó ,«šËò»‰Iñ¨¡ ,ïš»ÈÒú¬å+½5€.Ù8l3Ëû£3 ¿'2^7üH§Tt,ñ>l¼w¬ÑBXj!Ü §P´&¥ïaP•ÀòÒß«•nx ¬´ÊC:ª0)gžÈœþ†»WŒÝ§¥[¥õä'àXÀ:®„¶ ö\gù9ÖSéÈ`Ý×ðw˯ (¹ÛØóAïf,>@{*=‹8k]¾û¹´¶H5–ÙÀ³ñ Vn™n¥¡¡¡åjbË£y7:õ¼ Prú13ö|÷Þ@É}p³îñ?VÅ1zOKGh•ÌÈzµ‘NÙÙ墺;€\ð²Nê»åüq|×»ù®»¨ü˜Õ¦¾™©Û3(±›¢=PR* AÛ^Vu–7Ròæ-X'e·þ&j-yš-€s"Æ’ñåÁxÿÀÜeG­R:u`¼AQÄq_/lŠhð«R² s@Ô `” „g-TZç\O•y—´šñ¨ŠH»¾…0œe(„£py%UpÝÀý!C“ÛAX‰£¶4õ*?£ÒànógÙøðǨ·Ÿ¾ùœóWŸRÔÕ‹j7KÔÝ Â$¨ÎÀwSÿ 51ÔKL× —qË;‹óÛî¤öÎZKÖC4f~ê·­ßú#D¢CCC`Œú¡”<_v@Õb:ØmT(°”R#õŽþæóšÀâÇ®fûW ÀòÁß|I52,Ÿ|D>ÿ´zéy5> ¥¨§¿tÔ¬µ¶Áuå@`kU` ŸƒÏL±Ýû@$‡N«s§¨S/% ! ¬Æܱé_Fvä¨ùK¿¡³ÞV ¯…J?7¡Äp^Uå”ZªÀ"ßB¨\W¹L2ô쎆¬E?p*P`I¥‚‹×¼½‚6RÍ -¹çcÅ;¢q”Î Á¶2Â#¶l^N`I†òŠÞŒ[„O!íJ¶ÿZôgÿ¨åSmÅnsާÀªâȲ˜4¼é+ÿŠŸ7 ÄÚ—¾ª*˜4äÅÆX+n̹°0¹ÎÀ’\îÀ»¯…ÅîÈØÅ«;k¶ÿ®ç¾yµ)°ÂÂuØ©e Xu ¬n2;ÌÜ Êce½™ùª ,?+(õsO¾[¹bÄð×YËA¾û½úæÇS`ÅüÙžÔ>Jîã;n@ɽk~‹‚u¿Ñ°ZÝ“« ,ogb}Xj¿ëÞ<ËHÕé(zEñ~ãÈÏÑ #çƒ{ª­À7_~ùåzšX4ãæÀØÿã å:‹§U~ÂØó£¼Ý}é/•“@:bôJìÔů•Ððåå§šÀêL-s•P™sîÙ/fk»Ty){N ß #ÁÚ/§h¯Z¡_À^$©¯Þ¶»—¿ãÝUýƒìê7ZW\-_|^žzY>þ|ñ9:x@Åv©»WÍÏÉž@úoO«o!”Ãgá+°OPwŸ‰ CÍÂ\Ü"(…†mqàËØXºüRxÖ:…¸_LbX-e ©q#䉛HÙRz…oK íg7™Á%à4âž‘A執aUѼ]èŠ&üSžÀÉ«ŒË?¸ûª¥+Ñp¡u[eÛ•@>6 àŠö‹1rMe8‹v±ÕŠÏ•r÷²Âã­tãJ†b¶-\˜VÚ.þöùÿe›9Ä< À®d;ü.»´›SŸK©€åë*˜b:SkÍ$àF3ö$'° l¼…p›XÔ?žy\˜6€„QÏî~M÷î:Ï®/ô‘¯QõÂ8Ö:B…j[µÐIN=lO?j^ö©Ò͉›Õ·^©6ç §ëÅ€À‚n0í½QI[Î>#Ó'äódì~ë¹NOÚ‡Udþ8j—KnXë%æ%¿dàý·ð¾·`…¿”ÜÏßf’™T΢zÅ, ²it…>™¹XM4ÑÄ  gºÈ0ö~Hfΰîkôìå0%÷©ÌicÏ+gA }UŒ|‹µ_¾tæÂW`•‰·õ¬ƒç¯ ™~Jº§þ?óÈ'uë¼ZÎã]¨J< Î0¦f§áºº4нûKjj‚zûùõ7ˆzúÔÈ|ð{jr\|ï~ëkPé•^@4FÝßm] •Aªš‹ ì’O>¢-„â«ÿN@—ã#lÿa»ÎWQ'_zÞýâçPôoPí"_55= m\–ô1LvùkhïùÄÃòäËŒ`iPW/N¼)‘H²½è÷U*°„PcçAÄ}iÕžýå!,¶ŠÅ©£KÍLm¹÷õ€ßB¸¹æ›m…2–pkR÷îÝ ®cY„CÜ•Ðâ_ †ž§ .+µð_Nþë8uâžÐ¸D`…‚Éýº’3j(Ýv~h®JZ1_¶Ýs‹sÒ,2;¶£+€9–0œÙbNX“ÅtpMÎ)O%Ì%I®€Ñü"€‚¹oJ ¢’%A1‹2¯@f5V@`qiDü&Áß=ñu©Ú]²#- ŸÓtlhaƒX[AÒ±B(pêÛ"š¬ñQÞ|d` G}W…=‹u“`-s6ô ¬šß:ŠõQ´›Ì(éžýb°B©Üc;ªî¥§À²dvx%vóÝï1öþ°uåoóÞ롤{öKrò~ßB¬ÓÌö*@ñJ”ëõˆWO¸¯³’Hßqï½ÞûÝj‡ÿ7Yín-ù¡‰&šØV äÞ÷–ð#|ðvÖ} 뼊÷\GV«Ê×ö½ ({5,„ª8Sÿ$/Ó¯€(8/ý9¤Mñ|Çm¼ÿÖõrá%1þ=U˜TÎbh[Z.Jd$ƒæŠªXe0[é·JXú×jË‘RQnˆ:-ÌŽ-- \ âZîD @L®ÀœØŠøŒþÔ?p ŠÃÏtW¤ôTv@o¡|UA`Œi{n8q#9ÏÏ•…wïšæó`’ÙÑ3¼ŒÀrs0@„†ïùò€ ñÁ„Å\>Ÿ H÷p6 뉩á2[È­ûškágGþôÓ¿wnqnÓ¶xA@½;Œ÷ýh­[M0 jï„”òÌ ùèýp]ùƒ'Á˜ñÃÕ¯¢Þ>ⱈ¾«&F+V F‡°ë>³§éÕð9„’etˆ;õöÁ4‘ωûþ·|ù8bq~ÓíìÈQÀ+ï“Ï>iÿç_uþö/Ô4HLÈ'A±Àa—]%a+@6ƒ\ÑXãIÞ”LÑÎ=pyü±=Êžíö#>.»Â éܱ\F>õ(VØ® ÆÎÃu©»¯’‚íÙWZ§¿?á—w}ÈøÈϰ° îbA8Ľ™UAw-êVyÜP¨µÐ'°àXæY—5¤Ç_)¦¦dÄS‡X!Ëõ›ø&ÁZp¼’Ä²í¾¸0 ™÷¼Ï†ˆxvîüwF_ͦgìA\E²Ü_E$€¿óëé? _RY%‡n0$… Ž¦A‡Áà±O£í/ˆØ+¨P0¤‰&µúoJ®7q—0W<˱AxKÇ¥·æîx[ÛšÂÅ)d„^û5YŒ~¢XgF,„æ±ß4ý&Y­*sVN=ì½°¶ð2°”=¯X¼ÿ­Î¤}šŒÇøî÷{Þ À=÷Uœ1íU¼(Áßnìù µZõJX[€Ázà.ô.4±hÇ ÖrØØó>`&뻀ÿ÷*Ëg/Ç`$ í€{ªQT™³ F‰]úBÀZ/¡X/ßy§®ÈP¹1z+±çÀlb¥Øø ¬^+…³s¬k3XžK‘ަúÃþwüŸë¥ïÖßÄdHKÇ ¨±v«ÄvÅJ!îÞÐ.© ,®3°TQ9Ì+A™K’I#Zs“& Þ!Î3od_ˆÎ08€‹( ÈÀ’:yeHN” ÷uƇ!,&€r;¸ÓpÕÊî“ÁçïùŠõ¥ÇfÖ!1§Ñ3*IÅ­H¿9Ð9îîßÖ½çjb BPgwÀ•PÏÐ<¦î×þ¹²,onºÖ3UDjï¤În•]|·ô\& ©VÏ%¾û-Æïå7—Xjz:ÛK•h«y íˆäw¼—¿ùVj²&¥ÆGÅ÷ï þ©óçÄ¿[ ŸõžÕ î+T¥±K<Ç¿á–Jëb@`]îÝàP< @ž=å~ååóϬhCjô<,MÓîýø[n+ñeWÚ³Ÿº¤Â¡YÛhx#¥B ’mX!Ñi0Ëç† >|]åºä°ÈÔó7N]Ö+óÓÒ*Ë· VÎuÒiS°c lÔsÌ ?¢«z gŠ“:¤wÿkˆ€ožñëKÿ<öèœÈžj'¯ló…\8ä‹'?@1Þ7S•M´q9Ê€±j¤¿å;Ÿ<'™à+€ãqg" &€ü·úl? Šºæ÷ÿ~û/¼³xW$Ó™Ú2 ¬KÛ{îÚuì5]«Tüj”e`­yZIÎ=ëžûbÍ§Ý DÞ»ªá»Þ @Œ|Sûé43U=Á 3I±~ˆþ óÙ?u>ûuî´G`u¯ŒÚc—@»øÍo¯|ª€½öv쪒2+!ˆî[цüÝë ¡¶vêîåW½¡T}Øp^{Ul£áM3«‚ƒ&›j)°\¥f§è^2P`‘Ðü‘Å S[Qo áÉ…ÊþÓ€À ç:eeÀHf^q€»¤a0Œ ÇðÙ™±¿?óèwF_0.'ºâGdð„ØgÌ "€âŠ(˜-–ÇÆKb²DãÌKRâpP€63 Ïr@Í‘Œå ·u‹NÑ’VÀ¯µýä/ Tš¸ë@¯¡(76kûX·8·ýçlDo¸ä¿îþxUqûBKlô7t­oLI•—ÓËéÇ«?¿œü* ÖñŠïPö‚œyÊ•óÏ`5UEÄwzŸuJ ‚Çøþ€WjåøŽÛ4oE±õœC»ø°¥Z›h¢‰u™-àQ¸Y¸©"ÊËÀŠT'°TmK-¼ €µ"3ÅwÞÁwÞÖÌR¸YÕ]Ôî¿ ËkM*<ª@/¹ -„¥w5.»ZC¤Õß„”¯„2r-ïÛ}uã/쎔Xq?R* ¢Ú­G!IG9(¯/dðêŠPMÅü^BÞJ)sÂ#°£,J6®ZÌ›<îIB°È‚ïïÐ}æX(/NE–2¹°¤ýÌZW ¬†HŸß9ñÕß8ù…É|¦‘…õ]žÜ^þâä÷>9ügŸ;óè ^ÃB&—W3¨»—í?D»÷O?€úB:½ýúvùkØŽÔôTøåZE«Ÿ¬vð;v5[>ôïÐä”ëRw/, ‘¨ñáñÛî4ÞùþÒ®2¦¦'àº:| €š Z~Åv–E­ípÝJÎ.Xxb ;z%;xrYÑ¥†Ï‰Ç\E]=4°ÓøÀGªä‘ÇâÆ»ØøÀÕ„Z…Hñ„–§O4¾!55Ž€¾ôÁè=ˆÆ¼ƒnE`miÂF#l!ÜRÖhnñ±©á禖_tƒ&°Üáëa÷\1¸²ø–PBGPE¸¡Ó~ê_MNÚç Ä é+Ê ¬œ(8µèÁ\ª7"ýJ“GN<œº÷¾ücÌi“Þw!‚Òm²˜;φ$ìv6Ù¦B¤8 M;ý¿æ|è‘@ÑÈ^ ÍRDŒ@eÐæDͦuEâ}ñõ«ÐT`Uà=»J=M{…Òlð:xUa Òàžû¢*T9é;Ÿ: î»Æûn ƾ+ç_€›£ÄÎ:Äk;J©}tî{Uª‹¬VÞs=Npo¢‚‹íóÞDMxÐ9€º•µ7 éÀˆ/MâÓ§n•9Sk…:‹j´F0M`qÊɨùã*sÖ³®F•H9é†í2[%Û~íò!ή;’–sn´Ø 6ÔMªñ@寡ÃLàŒP:¤Ã,Ϻb¶šl‰…P#ZÖÎSÒX„Nâ°Êr£RHh7ã\Û% ¢"€âîXnK:¶óÂ`©ˆ¡,ø‚,ø>Dnc 1c-¯L·oŒÀÒ ¬âjÇÙi•uc‹i±‚-­ÀÚ5Ù¶;vµñÑOzyO™ET(°ZÚ¨«¦Å.9F]ÝÔLÙ¹Qm€+ ~Í äKÏçÏ~k"~Ã-%G›iQg7„Pã£夦ƃÏk#\¯Qq§gLÖôS­,M`ñ›ngW¼ú»I¬ IDAT/ã›RÕĨG`•3DÀø±OPgcòOÓ¤öNó'¿éÍäJDXÚYÁ¯±GèÂDJ®g¼àG8Ä]n¥«çׯžú[úÜW§¹Ð;R–WåÔ0’çC¼R05ü=]¸’ „2°\ª§Àš¶Fô.É HéY‡°-.'‹†ýîQŸÀòíó•`S±àºv|ŠŽ¶y_Õ¢á—äZÆ´Êv6Šì2) Ï«-†®DV¹…°+’ ¬jOÅEü€ÖhsßœH®5*Çõ¡g­ MÖ« eµ­Jå}7Š(ÊÉ*†ðZûµÀ:¯&«MåÇÄÙ/(¹QjÀØy'€ ý¹çž[º ßq x¤I`ÕG)Ã} XUcÛÍã¸ÕàXå*ƒ¢® ¬r–fW$&V:$«ÒQù1cÉ=Õ7ë£ä^Þw38iU˜÷W4zÉV X`&Œ”X¢ Ûúð»k—ÿjG^ GZ_èo¢ÅIK÷¾+4E×s¼iÛ ‘ûÂîh€A €bʆV`• F–ÊZRKÍñn«@ó…œb’\‹|R¯…%tDb„O`iY[”",Ü`ºQÅòwݲd‘e)¾ ¡”ú¹®Rš#›·"•ô^­z¢XA§Ø9£þ—KÜ/rp€ –²äÊÊïˆÌ_ú ë·ÿ„w¡«ðšõÔĨøþ½ò…x ¬u%°Â‘vî¡DJÍN«Éq5|®bW+ ]„òÅÀõ¤'ÆÂ‚še™ ]zH~1_ËqÔÜ 8§®måÓ|ut‚HMMèÀû•*°°Bãžññ_¢ü ×Á4å+/ªtcˆÅ¢JÏÃ0«8ê Öv2¶l£á Y×·”ËU€ƒÑÔApÖð‰Ú3‹³OžÊxma¸í««TP;!I+°L‹qøï®*抅b|’½§óºdºÇÂ-RÎ9.€bhCyU0áz°e,„ 9.+¾8?&Í|kÜô.ÁqòÌ’ Þ™°gîÐëG¸Ì0ï–]×H1¢q ,«\ÕMP†Ô´Æx@`iɹpá¬X… °ZisƒhX[ áÕÙ ¥‹#”Sm6Ò›lo”Àq¾ë] ¦œ4ˆ±Ž«–Y<¹µ_NqÀÚµkW•…Œ$ï}3ÅÖ³ùâC†¶öX´µ£úqlb»¡y·t‘E…Ëg”ªœ¥)> ZŽA¹bä/}V& $E»kÇ ’qðcÁB§åìÓ^;‡¿9¯;•¸j-³ÿºˆp»Å`5ÒBèešÊ 9ýßDrÍwÅß²Š1wb Y ¼2˜G<õDSL¦[¥öbXå .k*°‚&#“X_¤@ÁȘÈgp;JŽ7cÜi¦tD¤O`y“Þ°€ p¤ ¸žÚ-–›8ôlmKEà»3R`-ízanòÑ©²üõ´’vóhŠ ”·\­~Y{#gTÛ—Ø¢©Àò@;=U4F­Õ‡£ž,hz€|üaqÏÝâkÿ »ˆh ±Tv.‹²ƒHDG. _|N磗XK÷°o€üÁS‰P“ã ˆJ?®>7¡”@ƒË+°ÔÔ8¤¤®pN±8MQWµwÀuÕÂ<8§ŽÝ«„WqO°ƒ—@)õbCœ‘šš€RÔÕj:Svø2óW>m|è'׸oÛhx£gN´kkXp8uUEŠà º¡©‹à*ð•ñÇþžýÃ?Œ=¨-¸¥«Cpv Z íà‹qS;åEm²éTz ¤"¹öc}²ï£¿uðÝšÊÑ"¯°ß\4³ðÒîÂ%K!ý-X€0œ¡ü€¤]:éé_·D¯áÅø ™Û~çàûúc­\^°(óúéÅHñpÛ îÿ-öÜžç»z^ÞzÒ´à'ZÖ´úÞaí²4üé+CÄ꼯ꫢ&õ*ÄúU~ €W~çViªªskT ¬ã*ãÀGAK «uÙåù®»‚ÅZ[«/Ïûoªß„Fà¼ðôUíãØÄöBó8n5Tµz¡T5t²Ñ½ïq9ó„ž®({¡žÀˆÕ+!3åÕ º‹ª0åz‰ZåB2œ{¼÷íVDX"°j+°´ ‰6F|³‡oìÛ¿Š5˜"‚P”üBr-­üg~–«XåD÷GÀÖ’ ,Ã7pâ‰Vn$`Ú^`‰8w=ñWw$ ­#sM0¹`(ø ,p¡µQ$ íP(–“8EU%ËB@ÎwÿŽE„â{‡3ó¿sâkæüÏ'ÓeÚEÇ£½EYDWM0€½Úq¶ Ö{ØÈµD`­–2»aZZxE};jMÛ’§Àš O½ @e¬;GSqu½ |ú15; Ë b¹–‚í=@û١˨‰±7=ñ÷·-|ß[¢.7¡f¦PÈSK+µx;PI`…¸ OoÕÓ Œ¿Kµj êì©Êmtú»|ñ,ì`u¯ØÞ¸"l£áÍ– q×§µúaçŠà †óª áÒq[áZ Û¿d( ,„R³KQf˜ZU[Ï;^LˆŠ’•) '~sÉàÛú²–§“¼ÊYý«C?ø•SÿëïÎ<¬'KØ<@Eí=©=”ô ¬×wîúÝÎhÏk´šÂpdD·½—$ e`årÛÞ¹óèÖJ…£áøª1åþT ̈hÕåë Ê,,W˸v4 ¬­…ðå{Gz.]‡O…Xròû©_uÏ|¾²pª1°öcÆáO°žkYØëɪkdz¿ l aM4±XÊ^c÷Šá»åÄ÷š:YŠtòžë ¤¾[eω±ûÄØ½zêÂÓRÅ—™ÐÞ@å¤UÑO &)ÖÇ:^Ã:Ë×~Ãí–ãNªTþ[e“6ÌBà;oZÝ £"P”|*ŠûÖBSOïûÓÎDUзm±Ê7È ¬+–$É¥Y\tì' *âš;Ðõܦ̵Ìs$“¢dB›õL†þKVä@`ˆ1+F|> ¾Ê å·R¿ŸýëÑöã`2+Ë”V‹~JÆ]žÀr•ò©Vk“Qªd!l¶ï¬Õ¥õê„–±¾š'+jë€a¨ô¼š™R“ã¥Ç7,Kƒ8 ÃôDC;vÖ¡„h×^F€öì£D v±{ædãGbÕÝ@;v–êé &Ç!¥:#Ï”RÒ=«·’À¢–Ö€b[…pÕ`GŽ‚1yú ËËW0CŸt ³ÜJ – @^8VhOBXþ)4ËŸ‡ÒŠÞ2KBÜ%¹Ú-á\w˜ÈYZfœE ™Ñ.{­UT^Œ°aKÀŽzcžª ¬ãÅ3éÖ¡SâœòŸu­e8 nå¹W)`ä[:¢ñލ÷Õn±b”Q„OQY¶G®xØB˜W”· ‡aÚ ÿUµX>¥XÁÌ–ªl`[1ÁÆX+Ëåjb£ÁÊM„«_‘(¨â˜Iɽà–,U˜†›SÙój¥Â`'k–6±!h¶6ÑÄEŠö¤ S€ç¾(çGiwaUð·‰éÇä ráï!‘çƒwx ¬ ¬Â4üIK2[á·)S´Ç8ðîÿö´ƒ¥­Õ-„^ÖÆNøÖ•B€ÃV‚7ȱ"Ž7ÌÕ^Фµ­ °‚¾í`üZz §€3€ãnlñ|faÎÉ Š˜Šª¨þ¸G`nT ;_Ì!Õ®H+°¢À…ÀbÒÒ®B¹ IwÆyD§äN ¬$¸uÉ9NÐ •GUЇP›)4þŸ“Ÿ_ŒÌ|,þÞ+;Ë49ÇÛD8çå[#/MØ ×uÜß²|½ •XÁ[°kT|•ÀxÇ]¸õDkU£öN55!{ˆ´X…Ú7¤‚°+büØÇÅÝ_TÓ“¬¶Pƒßx«û¹Ï î^êéSC9Ñãú–Ru†ôjlå`”HQw¯ššPC§ÅßC$Êöyo5Y"°(L`¥Z>‹z6‘!ŠÅÙÞòÔ+òåãìŠÚٸł<{Jž9¹Ù»·µ¡‰mÞÚJü•Ç ÕÏuÚ„ ,×'žŠV!'`Q¸ŸÌXB³K1ÃËÀ ©–bNd´P)Ž+î׆¯À²œD>–qXq2·¨¸ Á‰qåÚø ›låoQšÞµiV͈³Òyï–þC—dÖµÊ>)+EŠ»®”9•sSyL`’¡yµ"Q›ÀŠÉ„¾XÖÒ’ÇŒ€Àâ’€˜ZñÈ$Á-ö³ŸMÖÖB˜¡X [¡ò£€¢XŸoëȨü¸œ|H-žÔ¼•*LÀÍ‚ 27©ïãªÉ7ѶÕ<ŽšÇqËGÈjtÄØwåÜsà1>p»qèÖÕÀÚ¯¨úŠxF‚÷ß €¬VÖv•9 ïŠ×³€‘1Ÿ½"§dÍ âe ³¶›…þyUS1Us½LÓQ`­ý›˜ 8BN@7öíÿ«þ_þ̾ê_½l,’z¸o–+­‚¾íH ¡÷”Ž·œ€±BzÔÐÉÚ£*€+È7DÀ‚@1 Æ,мñ=“ž…Ð)W`éò‹Ä=÷AeVðCÚ÷ ( ^IÆ*L`¥£“n,}2S'äþ†ãá¿[xìáÔ½OÏ ¡è$ ÆŽc1¤oXa&bñúãí"O>€}÷`Ç:+°–D¶ÿùó¿Êo~;í=PÿµìÐ%:ʺzصo6ÿ¯ßr¹•Ù¸\^ èXýe§kvø2âïÉ—ž—ÇŸ ôMe ,Îaùúˆ ¤À@ÚEøB½,ùü3îçþZ ÁÆ[·ÑðFs[0Ä]K_EÝ\§ EpÃv?W ¶”"’…/Cy¢b)ÄÝW`)&5ç–vÐËÚ´ZÐÎCB%ŽrÄd€Ãì¡ì<€H¾ €âîÒ©Œ|t€Í új¾±1Í$YIe0¶;Õ^1wÂ|]ó¼Ïð4€nêôŸbŒJWs‡ÕS`Å}ŠjX-Ætº–§Àò×£[ã<À¥â²K®Mk‹a½,/e˜ råÔÃîÙ/ˆÑïèè+HPdµmZ°Òu×]·9ºø"°.<ƒÕ<ŽšÇq B»ÅðÝŒ]ïä·³¶KÁk ôAä}o6Ž|Ò¼âÓ|ï‡Èì²”³kÀ!Ndx5Öq…õÚÏ>ºÊ·ôdÉöS`´}¨qÙՙ赢O׈µ“C(±b) /Kiª¥"+èÛ¶øËÂr2ÄeÀ¤½0eޏ4>E €a—fh#2 `ÁÉðrs™n!”ʲ˜Ê#°ìò[ˆ@×îì+ü¾ó +ã–†ÅEV¦ÀÊùF’"J¬ž{uf*Þ]Þ¯AtCÅúO¤ûÑ—…O`IÔ8Ž?3ñ‡Ÿ˜þ½Ù‚WeûZu:°š¨ M`!ŸÀo|+4aºÞÂê_FÃà7½MÓIuw‘ø·Â²¨¥]r9µ¶§Ý´‹°>7áYûÊ,:ìEÈC)8¶|îi(ÔÂ<ÌR‹_ ¢T«NvǦX^X؉!j~°åË/`{ò7^O]55Åë‚m4¼ÑÊ_¶õBÜõ™°~0ù†"8ˆ2¤ÓgΡ̜¦*\LX’\p jZ%©¦l6˲ðkI4<ɰt᫊*@p{¬° î¶èˆô@Õ«1žËH«À1«´â¬4€o !Ç5,ØÅbtÀnËûv“"®JWm‡ë&ßêVŠü‘^mæ‡$aB3[IZqˆ{ˆ`ãÙϦ…pka½ø ¤B±>d$•(ÊìUœFhÚ³V6p[ ä..<}ÕDMl¢ÝHŸk9Ⱥ¯iôUÌÒ¶n2SéTÅ9ó<ÿ`ç 3©ƒ«(Ú˜WOí» -„žK›’ªf`a3,„«F‹‘ÀEÍág¾…$|ƒ@¯%ˆ-U`¡LÕ¢Z¦qg¦Ð2 É®îÚùƒìY7D`! £K™  )Å]Ù6 ]tyV¹K2@ÊŒä¥û + Œ$}“ ¤£@ÿÇÐ_(’Çì«€Bxî— Ój¶âÝü¨”2‹$üJÄe¡:Q;çXyk x+¿QQ6X+ƒG`ñÛî¤þãG Üsa÷ªì²+Øñgƒ“Èb¢»#=ÒãNŸ Ö£&rYµ0+â•-kÛ½ÑX ¼O=Ê^÷&51¥¨»¯ÈcaZZÁ¹ùÉÿ†Im›:¶§¶êÛ¡ÆGå™ìÀ‘*K!O¾€¿÷ÃÔ¶ÁÆÏm=q· ‹¶F–§½Õ'|%œÏÎëKS@‘¶A ¡í`6Hƈ<Õª^zÕ,yîŠêío²Wð[·\ˆ»¦‚xxêܽóOï1vüèÞ×oàž®¯5•aë«Æ˜íX²d!,m¥ÖBÿû$ ðŠz£d ®²Ì¶rúâ¥"K!  à:0±'(Þͥ´³–ÁQž%àL~ ZÈŪ]#˜ÐÖ%"Eà•Ü(Z)´ÄZ,ý¾±÷v½ñlöнùÇZÏét-“U'vÚ}­=©šcK& Ûb ¡«km@-¤L ¢z-ã:b‹Î(¾jÁB°µº ]—’‘Q%*_ •'¸¯ÛÈ”¾ÕÐÌÀjbÝÑ<Ž[FœÌqPC\ÉÒƒHÉ=”=ëzCcõ‡5‘5uÒ“Õ bÊžóêA¶ôiUß:T=ÇHõ˜»úJ~éFl}íßÄɶ»v{]×`­ L $°Deo5*¾¦?Ç©M”ï軂‹h@·Óà'÷]ûÙ®_ÿƒï^§‚*&ì²úä[ÆE×$€×´îÖS»Eæ’Û’V$É#43…0åÿ ®ˆ„ˆ;–[ÔO-’'t¹§À²¥Ôf;ZI­æýûœð8[²XÊ+ê’¨vm7°·T:›•‚zúÍÿ’f¯6kÿ2Rª$ÜH'z9îa¨Å´:{Êûy¬ŠPƒ¾¿émìò×pþû÷} „ú ãq”HÖ)IÜx.Ÿ¯ÊÕ)í\Ö†¹NØFßÀ–«ªÜdh*¿j0y€Ó™É‘öã/ŠS±ÁAÔg~æšðE¬Óþ<™,)°ÂX¾+h!Ô–äL^OU”®´ò¬/¶šŠJϬ¸ÚŒ CqwŠMè6Z™´dÝ2Êf´Úw¿‘åõM†²ŒÈ1I·5îO51Ŷv½uÇ¡ÙxÜZÂîˆß.]ÇB¨‹™€§ÃÐj­X•4"¤±±VSµu±¶B… ,T‰i×½áh !eݰLé[ Áa+XÍãxq y/,=ˆ,¹GËXûQJì\ú’¥  ëa ,f±Ž+åÌSrâ?øÎw®iU›‹e…ÏGÛ{¶¿mƒ¶¾ ßD/ÄIÝš­P`1ßB¸$+Âdè‰%wœ?2Ú~À~«:_–àQyU°u*¾dý¼s§Ñ7Œq`vô@W×÷f ,iâS† ÍŒæ,6бù_<ûÙ˜ÛÂ}º-ÈëÍ»6LDdgx76]I³8ž[ ß–\Ç÷¡”ÆÙš“j°ÿ[…Z—G»Ô9èg· ¡Ýn3Ä}¥ˆ'(žX~±µa}¿Œéx€^wš”R2ÔBX,¸Ÿû,õí0öì N¾ €õWiŒ¥C—²ý‡i`oi#ÎÅ€3ãöw³×† æ:«¥uéË74°‹Ú:Ôü¬<ñ";TÉõËW^°ôñ Â6Þh‹³ÒÏ[š6ÒÁäµcXK‚ºFQ·Ù2i @H`NyÒ¯ö X!–¿cLÂ'°b†Q“ÀÍ.àvÌ žw€˜aŲ]¹–ñÅÔ€¾h+ËrnÙ…cžU/.EGdùÓZDFÌÆÆt #j˜º8—ù§3DZY5ˆžhJ_Öê¤yj‘šŸå]yÛÍX-‘2PÜÙO†¦kk¡|$½JºB9‹6Œ„Nÿ 2zKkŽùùŽ›¨ÀjbÕØR!îM4ÑÄ–ÅÀL€øŽ† M`1‹B©¥«ï» €˜|Èün”]v/ƤAm  ¸À*o!ŒùVd‰…0â›Lß¾þ®Î7ê®jÝUu[)G¡(\øcå×E¼×–\ó§ˆEHeK©˜€dqÓl1#Àd!93Ÿ îŽd À’: Þ$' `º±=V1âý §Ü"°œXœ ïjAúÜV¨R]û $°$üû«¥î©‚€a'P`5-„¯d"í.)‘ùʼn¿¡ÿ¦÷¨ëºÿð?Ôèyuâ%(%O½,_y‘]rlé(™âïþ Jµð;Þg~ê?™¿ðkìuo Ÿ³tˆ;µ\è<"ö†ëȇþ£ò)!Ôôˆhçj+n/^è"ˆ-âÈ— NMž„|6Óçg&LøÓæX¾û»¬©• , ]&¨/jªª§ϧá÷íÐYüâٿδŒˆ1³[öê•ØoÓAï÷Ï¿ð»'¾öå¡gô ³Ý™V›i‘,´ˆÖÆAs7Íè3:†wÉr9-”®ÝV½Îe‡?yS'Ä)?dÀò×Ó]1e‘0@*ël` VSµµ°>Eqa?ÈR+u@&¡äfZ›X5ÞªÉ_5ÑDõ@œ;ÉH4(¿‚¯À¢h×Ú["(±‹RûÕâ)1úm¾óŽ5®mÓ@D%÷ÆÅzŽURúN Âˬxm–Un!p¬£/uj ›9ÐUÝpÚjÆXÎ ~’ Àk#—~5û]ì¤`µn(yjÁÎßþmD‘õ÷š»Xuº Ëp,;’³ ³®÷ezÃee8¶”cávª¡Ü °/ø5 ˜TÈB¨ïyìÆ¢‹õͧª!@ð4h!)–ãÿP'÷½‰‹’hÊìè·'{œiÜÿmÁ”š—gNê.Eµ˜V#Câßþ¿ñÖ°÷0 5-V_&Õ‚Xœ:Öd_ð×½I|ï[òäKâ¾oÂ4ÙeWèXz5? )©­FͦÔW-T(Ä]n%+¨Í ;nV?pºŒBÔD_þøÄ7O'Ÿ¿*÷¦ŸÚ-|»Ÿ!Í¢Ÿ„˜7¼‰Š€‡ÒTš¶õ-ÍÀÒàŠÃ «XvQDEå͸IJ¿2Ÿ¹Çì?‡g@²dŸ4 ™gŠÉ9'ß‹+ág·ÿ?{o'ÛUW‹¯½÷™jêñ}Ç ÷ÞÜL7! a0 ‰„$(êS þü©?ÞPQ‡ø ¾ þÄŸˆúA5AÂt@ &¹™ssç±çîNsöðþØçœ:5uWwWwW×=ë“O>u»Ní³«vÕ>g¯½Öúz9ž)¶< ìNdDwŒ]õ­ù¯„–üÌhÖ ¯Ëq.g2÷Êj“•1LØÒôqÿůolG‘g9ÒWÂMÅxѯ.~èr‘*°z õ[ÁË„ª&üƒ‰-„‘ÈØ›ÌËßd\þF’ٲܓ,ss/Ü·GPS`­k74Òqì¤ãØh9ˆ4ÉäW)ì3.þ¶óG»Ò%cç‚PqöËröÑ®4¸HΫk¿I°6¿D­„ŠXu7¸YÃE¬¦ ¬x/7YêèVûÆBe¬Ý½ã&+ 0\]zO»6FèàV±Àõûmðê4\yßC”rbSC¿ ¨Œ·÷e=eÃ4¥`Æ/e©¹'ÓÕ ¥œåu†Ž8÷7™ó¢Xq„üÂÐëõUó8ÆÙí1S¯¬ò¿àòõ¯üua¢»?F¥0nl:ioÿNá(%¾öEùø#p+ddT—êã÷|\?KFFÙM?¼ì³°›~Øú?b/ÿñîu|¹Èdésž¥Ä}_ÿq¯ün˜a¤¦&‘•YVÙ” IDATÔ—‚ t{#!$X-Ui/¢ÑóX;5Ó²QBI™~1Ù"½ï¢s tw¢ ?Ïê©•pI}k½‹Hq “6}ž ŠòªNöÑ\×/Ëì« ahó2!ZåÛEñÌzUPI¸imLŒ/.¿°ÙÉæC‹ñ¥…M65ôÎPL`%s¯œ6 ,ÌÏ`1?ºº ᦱ¬»"*MÅ`Åø)Õ[èÊ´ò%QËÀ¢…K–í!RØKö£MØÛjàĉkv®>COe`¥ãØHDZÐréØw.¿@ìºå‡èPwÒ‘IaÛùJ@ñ#M ©ƒðIfzÉ‚µŸb×è—¨ ,*Ðd!Ì2 d‹h;Òd%sß_¾ãÊçYÚg““Àj°¸uàj zýð.61QŸœRæ>&C-áµ[ð *Åïóë0]›X¶Ì˜ Ü"Z|f<‰Rƒ&Étò?消Š9£0ÖŠvD!éøvIZcs$í,„÷œ|ôõ“ïþÝéäì)ºŽîþ•Â=#w|pËëîz©|þmdx”Ýñ*ó7ÿÀüõß§/¸€:s »íehâŽ7(Ø-/f/z }ÞÍä£i}‘šž€ÑµÓˆm Û›ÞÍÀŠØŸ o˶kOt×-„Uâ¨øýO='ëŠ"rºZQŒ©·d¢º®„`ÜÂB­À2LD—ÂfÌò"€RG`5Ç¢çLãÊá­aYÃ`Qл–ëý‰j SYíÞ©ÞƒéW³Ëni' Þ㉩¨dîU;‹g‘HÎZ6eï´‡ 0„ `ž¯"Õ'“f߀tC‚U—àžÈÀ"û0ÿ Ö¶ø`ŒÚÞò¦X=U…0Çþ@:Ž}€–ƒHÌÖV”5Ûöb9þMåM«êD-o1qúßĹ¯ÑÑ=?¿öÝkFm^] vm~‰D³,Dpê³®r¦ Žšè)Xe&\‡”ŸØÝ"¯GcK6*„YÕ¥÷b·Â ö÷{‡4u¥ï°“BWø `2*®$,‰Ðz—#ŒkÌ',@‘».©'°QsÜ….5H ­E{Ì˘÷]DêŽ;L„!2åÉjêJ–A,E6½i/YgXD¢}ˆ;” 1S‡¸‹v±Y‚véS,I>BR7¿X6½xvËKÀÚFÒlTB\@|ãËÔô$‡•¢úK¢‹d¬„ÀúO:<üƒ£åÅËÞuˆxZsy{Kq´\6ZÀ£„ÂaXäYw€ä´Îã"*ÍÐ$$‰ÀÒ:)îíé«Ò¹Ê—=¯2€«ŽÀ²I#%¤cÔ·‰ÔËŽÑ-Ì¥kàÎxe¶Ìhê ¢^F?pTGB#Nög.ºþEca†#­W`Ù‰üÊL{gUy,âžÄoÝ{wþ­°ãµö°¦²i«W ©«·°$ ¡ªœ‘s #ב$'*°B>ÎÀ"öˆ±ï—»×Ùk¾^_¥H‘¢O@r;1ó°*ŸÂèsžR¥ÊŸ üž!°j¾a‰ŠÞ𤠑[2ù?Üû3-_kµ º„56 nú~F­L€ë¬Ëõ]ªZ˜ø>NqóËÈ-0ÀTxºØKˆD=A¡b“À¡VŽf”¥ÔX¶Ÿ¯8åyáð$`HÓ)ºç™9ûâm{Ãv•×+"À¥ÔkÉ:ËÀÒlW›õ[ „þBÅ'Ñz©]챦ºã3^uØ^æÖwŠjû —]I&ÎÓ^°vZCмH<ðmùä£òo«© ¤V„–¶® Iô Ö51Tœlåʶl~”Õe–0<šðuЕϧƒ",äd®" EýªÃÔ[ÒFJ(õd+)‘†‚à@&ªà!)€»«´'6¿ÿ’_Ižºj–l±ëX=¤C⡈–ë¾mß@˜7j‘ÆM—™  ™±²T†pJL?ïÙ.€ É,ï#"ÂD’ÀêLU 9tL`”Ž,½þ` S*«Y:U`õ–¤À’ÓŠ“÷Š“÷Ês_ÿ¨üåσZÄŠªêR‹Ž>·‘äZsȉ°ý,–I`Qi`Q6e2¸Ýiª&ã•[¯ý ÿ§^³åÖåtIк3W¦ ¬ u7Ð(°ô1ùÛu'¨@N?(:tšcÏ2E€]ÄÍ7ß¼Þ]Ø¨è© ¬tûé8özvIn'Y9¨º+¯ÈÉÂÇÒ‡pÁ–y·X— vm±Æ[É%XYfjuQsVȰd¦̈"Úðe{7ÿ†ûú½›FgþØû d¾&°ŒHe©{ȱ"@Gäf˜ÅUÀœ1¢â (LeYàI ÀÝel=…Gψóqƒª-ÌÊÂG}¬{%ðófÛðÝT!òÚÄã8ëU¼Â€’ç鈒 ’EÄd›X±Vë\uþ*´ÈK±ªèî1ÉF4˜#[¶±5ätÖôšëé¡åã …X‹ýšº‡ž½26£k ,]>uÅ ¬ïOœ|¬tæŠüöXWU]H¥|qÏÉG¿¹gpî¢?Þós+ì€/¥Þ´° Ñ”H$e„sª`ˆæ53å%,GXà¥M„”*&€\iëð–PÓJ£ùWX.—Òˆ®n¾”Ò¬B‘-Ù:+¦‡¶’ÍoÞ{{Ën'3°UÎK² O³Fµ®ÂäTnZ¥÷`–C^; a{ÖîüðîüE`kÂÑ•©ë‚Ä¢vU9 È.\9õ þ£~@G®[íî¥X3ô•"EŠ ƒ˜Ä¯(¯®î?öÏ*˜'ù‹‰³+a ¼Õ… gš¨BØ·ˆˆ¤–aíí`Gé< 6jFFe¥áÒVVÁ´öŒê$ ô&#r{þ†kæn6ܺUD\ëJÇä {ÐÌpiVe0Ç«8úJ´JÄ]šôç={ŠÇâ‘Fí—šýö#?&|¥þÁ6е)´Íb%XºŸXññsO|§ðåoÌ>Xš!j )°4Í$ÛŸý#Ǿ÷?žù׃çŽ.ÚY/ôƒëÙÒÕ4„(éœu³@•Àå<îI†h ¡Dì×VTó\É‹ãSÔ.‚D.×nBÎWæAõ3 .û˜ÚÄÚVÈi(2ë»â¤Ù …WND`9°)·Œenà±zV†ÕØá†ž¬XªjX)Õ[ I áÂwÓ¼¢üYP‹íøbâ[”7¥Ê'Àl:tÕªö3ź qO‘"ņ€a‰3ÿ!Î~Yœý² Šrâ~9ýXÆØó:íp_I Vðô_ù¾=̃_aW/€R#°–p×§£jXK±æP¦%q™¤–È60MìÛ¶íyÞ[³þPòà˜'Ô3ì!3ƒÈ¯áˆ ,TXYêpQ³0 mƒ"~f¶e«ó¥%`¨ý¥¼«nÝ9„Vÿ ¯âå¥jS…0ˆ,„Ú&“bc#â¾u͆eÏ»k[‚pcA1­=^f;”ðWL`I%øMkžZŒÀ¢B{Ÿe{/á!ñÄ™áÇ._´³^8JÊÍÉD2MÖH—•l±t‰[}€N|Ï1QÂ`¡¥ð|uã®™·\Ÿ"il?S­mœw‹Ì 1ø)¦„Æœ!´AÒÄ`Æ«Và43¹HfmbQa(,W®+*²Èh•I(°²‹ ‡×6I ¬ 3Ê=(’££7ÀȪÒqU9-gº´'(Ø$:´Þ]بè©eU:Žýtû½<ˆ$»€œ¸_5ò§>ÈOþ+ãâŸ$ö(Ì!V 3 樺uþ2oÿ×—ÀZ›A¤ˆ3°–@EÅfk)…Òò4  jÏ!á l Ç0 ©¢Ò•UÔLj ‰¥¯Ž ä kÄ®­4²*˸ €rsÐ̨ÂED ÄÈ›–Q-€ÊgK¡*0$°$à*€¿D–^ãi a<ŽÅè…•(þƒG´T,¼jg!Œ95m“I±Æèî±ÞBØÅ†7Øí?‚L¶[ î¿søã¯Ÿ|÷?páÃzùÊØ€ÈB¨XËü–øRj5_1¥uOUTk«Öl{|0¨ÔÇ,†¥e³jñ"‰³žW$ædZ%„o–Œ9:ÊÕÜårÔF´=À¥@}Í%7¾sß׌ŒÅ§Ð/Ô8ïÕnBƽ"G4X±¾ig¦-•©_tÏs×§.€a+îÓYš‰¶¶¸ ÌíÜ•]¦¡ˆÍ‰µÜ«¦"-ë‡Z<¤XýÌ«ù§Á2íR¤c–¬œ@²;@M:rƒÿ¦œ=¤Üqt E=ìuÇîÝ»×» ñ7öÀ¼”Žc Ç>@/"¾*¼•3kÃ;ºšŽÞ€XƒX™Kiò+(P•3Á£#k]ÿž•×EâºFƒ)°è’,„†ùÒÊ+›–°Ù9`d§ `T,|0¦¤^QUÐL`Õ«·bK‹d€‚iÙÌDÄ2 b`†Oq™´†4Å*ˆ$ †2Üᘟ÷Ã’¦“(·¥åj£— °Ê¼S–^:ÆãXâ®V’yÑæsÌ[ñÅX1¥m2)ÖÝý1&éˆ •¿2Yö¢—áE採©„@/_T`-;ý4–j]6ô>Gj¼ƒ¿€‹r Jçd- ÀÒGÎÑ™E;0¸Ð|Sˆä«DR#R`q«`{n€N×2°ô.Bž9ˆ¶¸ -„ͧ’#žW íòTPÛ*˜ JpU¹†ãjh¦nw¾-eÓ:ÝÓ|P LÀf+ïéîpˆõ{û~lÑb ªÁY·P`!×k¥‰ìV'CmD%ƒW kýV›o—M9oDÈ©ʼnÏs€^÷®Eï³~: ÀÊî@ ËñoªÊU@²ÛºÕá.bpppñƒR´]×"Y HDZ?Žc —‘äv±Ü.ý˜n¹‰?þ§Jì⟟ ¬åf` ÂC¤ÀRþ4¹µŒb»µ*„ËìÍŠ°6ƒHâ*„ zú@Wï¾f©ç6j €‹ìE’ȉ0az.*lRwGjÔß ªˆÒ¿ÓÎ&‘’][~á/]zÓ;Ž|Ä iŽØ9Hpæ!R`™Ä` » #‹§ i¹zæ%-„¢ƒ;oí²¡‰q,ɰý˜ÀŠy«˜ÉRmXáZQÛdR¬1zyFݸ`?t«*u‡ÕXŒÀÚ@ãXâ¾l‹‡SM°Ø'³(49Èi¾_ˆÀ"Qлò° KÛú¼Ìâ[V%^Õ–¶fûR ¡\R•4°ó¦¥s Én'Ù—±| ¡ð D|%UA1ÙŽ*ŸÂðµKîÛ0ÁÒ(,ƒ®~òé¨ÓÔ Æå‹eßPið šrpX @ɯÐ ¸~gß«âç3pÊÜâäP4<­¾ôâÇR6€²ˆ-„€-3eÀW>tÉöˆß«ÈZ LKp­¢‰’JÅBiW…/ôÑh!Œ——¡õ¦ "ú;·*²/Bjßø+Gس·±üøÒ¥|ý„ z羋è;K-BÖrq#é(oSÞ´shQUR,¤À ÂÓ ,¾ƒß;û·^nú'üŸú/Û/K6 àéâDõÑ©û¦‡Ž\öE¿²çåhâÕt *©aÜ)px€À—‚K)MŠlur(…Û<”nµD7Û\ZÛ*(¡ `Ø(´{ÉÈ–öÉã|  X)f3“CAœŠÕ-P‚ º`èäZ"gØH\ÑV}p}\(N<û÷üä½ %Ã[€åÌÃÍ“•8÷5V~ª*ÏyŒ¡=ííMBúÄ‚‘ˆ³E?•\$ô<¸Þ]ب¨­¯z Î{:Žýtûx-â¾dVðÔ_ø¾]ž»/üwh!¬)°VÒ©u™^×h# á(°¶8¡Ã)ÒÅHAS„YESŒˆYï(Ôûê:"ˆ›¯â°”mPJ TNWËZeQ€@Y†k3¯K›ûPâ~¿ñíß8ò·ß?à‘éso:ù·ùpòtAâ`_ˆxµ›&n‰U¥Ä" ,½TNºý šÀ„W˜˜X®ÖrÑÝcÊYu €‹XèÊe`­(Ä=–‹®\¥” Íiûš[ Ê% ˆ(ˆJ¾3½7ËÂ#» m”yn4mV¢ ­ÕÓ,eÄ@”„˜‘9TLV+h`g™…h{ qo{sTšY[?Þd5Z;A6*xb¸fÉÆËÖ×_‡ºb®Û ,TX“ë{‡(6Nû« áØØ˜išÛ¶m{Ík^óä“O®}º %øá¿UAÂÇþya=d¸Œ¬ògÅÉ{”{Vÿ]Î=ÁŸùkqò^€|âØ+—w8¬º<Òº‘ÊiqæKˆ°4âÇ$Ó‹Xn¾ùæõîÂFE<÷‚@ Çþ@:Ž}€;ˆÄˆ ŠüÉ?—“ßëøuJ¹çÈâ³á¿ƒF ár:S›a—ñê•bm‘E7{ºùªbÀ²!€Q±xé1¦,ÒôÐTÈÉŒXŠ Zº”¸H·Õ€ës{öÎÜp}f8¦ª]ýÊ"‡ØHLz¹•A@ÐD` §\8{Úp¸4Î3E·0^åµ%YXEûRÄãX‚åƒÈ=!Ф Êoµu N–7é³0tÊ…Ìz Ýý1&éˆeçs§HBÓ+‹*°6Е1™µ/×UÑÈ•/ €2j¼'mÛŒ-„~H`I§K³úï^’ÀŠ”8gEc!ÂÀ*¨DÓrO5Åf%¡«ž ¦uŽkU´x‚íJ>öcÞŠ†ßÒx½- ï*oqg¯»d–‡ž››;tèP˧–Ñ‚*ÀvÜÁ¶¿ÀÔ±ûÛµðƒï|±†èæ×Å£ú©êüYæÕoóÇîphæ —Ûƒ8©Ü³Í}Pî9¢pÕ‘©ZÔÜãGÂ-h’Ù¶.ŸCÚÂêµP.‡[„làw‘¶¶¶¶ÿólu;Ûñ# L}øß¼›ù¨8õ¹àñ÷ºÿÏø‘T¥£ -”&ŸE#”âeM`Ig"Ö’ÞEâ®;àè“줅¸’7%t ú°§tå¦Ù½7 ]²h ¦ª™)œÈX¡û`E+"©^–p)}ú)D´×}`¾ `Æ/ëÝø™³ÐE €¹j¤×Ó ¤¹*¢EÚ±“'Q*“2\tt§ãùõ ¬¸qôUÌdIýTrqË’ïB×êÚæïp”ŸZÒX¼ÿð—õìÿüÓÃ_æeœªÌ:tèÄä„bœpsÀ²—1šO=ö$°… !Ò¦ ¢ {÷–×ßë•Ã[WïEÀÖ«ïºë®$?3h;ïÞ÷³ï¼ìN¬Èê% &73Ûåüùó{öì)-V`•nöS•OÈù§õc:xEÒˆ· ‡Þ£Ü³æUoƒô‚'>@ò›WþZË#åÜü©¿¤ûËß^öümPÓºáA¨ÿÀ¯AIëÆ÷ΖɻþqÀO^ô¹F±‹~Šmm †ùCU7¯þ­dÏ•?<úG±®ûC¬¾G`8xðà’õöÎMóÿù‰ ¿ø#ÃW]ä¬ogÒqì¤ãØèƒAäOÿ•œ} ̆ðHî"ð’òj6vÛýêøŸâÜ×ĉÏ4#ÆíÜ IDAT´`^ñæà‰÷ƒeئÅùo°Ý¯fc·-©ïûÔäéÉÀPžýîÏu_Û¿0Öfßqøc3CGlÙÿû~rµO×9î~æs'†Öÿ»ñËW%¼=úÀ7 _Àª9izŠñÿ5ø¶¯æsοÍ]ôG{~nfï:üésCOÞR|éÃò‰ùÁ“?æýÄ;.¿çä£_ÈÜ3<{É{öþ7¿zîO”¼Ü}Õç3÷äçvü¯=¿ðÏÇüZî Év®»ùW÷ÜúëGþ¶óÏ Àó·ýß—Þà\¥xWåúH³2øç»ß7òùSßëü €ÜÜö÷îù¿üÚÑ¿©Î ’þå–w|éìÓŸ6?Y˜Ýù“ƒ?üwä#úU¿Œ×ݰiçŸþÒSCß»jö…£ÆÀ7òÿ16sù]û~â gÞ+­êÿȽùXiæoÉ?8ÅÍÖªózbÿ©à¿Þ¾mß3ïZ꬛Ä}gŸJp%ï±?­ÿòr÷Uwîºzy­-o=ú×na|dæÒ»÷ýìÚœ±Ct—ÀIbçÓNz¼.…9äìcâtt"|¶KqU¡$3¦„ @UÇÆÏ2`[nË„{3`€‘#ÎfUW•Ó0¡1@ ™OU¶Ý0zHU÷¡¸ò&AhœÚ®A¬!ëú?ZþY}l”ËI"¦‚i„¸§ãØHDZЃHG®“³Ax0²æåoˆ8wŒü9qöËbò¶ëÇ…_hõq F¼,+§k( †_reÃõõh¯Í ÆN Öcµ§mÔÌYVg¬°XØUIÁphö¬+}†\$7«²ŠÒ•„p˜  `8H£´kÈÌ„:08°u&"ŒkÏëNòÚî´HÚ¥ŒÇ1®@ÇÄÕåUÂàãÉfuÝðÎ/”,žo.9¿ô; r³ï:ñq>8ïÍõ„kOÁ±v9+á Kí„]þHµn +c…pp‰È¼ÎQ<õ+q—ªöÙÒÀ†¯Ú’sEíG­æ:Upš„>ë8ù.,’¨ˆ’´®‡çüY8@$ÕD¢¢¢RFîlJ˜‘PfìÈ! I Àç…‹(ÍP+°<Á…’ e`£eœ}²rúvì›å˜bùoÛàþ‰ñ_ž7zѲ[[*´yÐ@/êWV ë\…ðŸøÄM7Ý´Ögå%Ä ¼Æ‚K‚rÏC bo5‰9–¯€—!}qü3â佪r¦v°? €XÃúŸ¤p)Y<]šÐBB¶v¦2@•O Ê‡’ÄÞÚ+Å2S¬6Ò ¬)Rô%èð-fc/Ë€9lÇËÙÖ[Ù®;If+x9–K#"°ˆ.éivU ,b !Q‘°s$ʼö-âhŒ^»ÁµIŠÊÕ'ƒXq–dzò÷òŸ~à?ÀÂ"÷?9šP’í©±©`@×Eb>´JH:h8¨ñ,åµç¾â¥À—QÐï jVXé%3°dœlD0$\È%3Ú[XšSË›N¡´À÷¦Ž/ü6“ˆÝCóƒ' Y_(#@ûþF’´Jù«î€(Bõ]–¶Î 1]t/"°dûÀõ‘´2i£}·— °ôÏ\]•ŒðÄÐÀ i]kS"œQEÄûóD~¼Çƒ° ¡¢&ålK6@SZ\ñ²¬È‘ ¢ÔvOý%Y¸tûö%Ž«Š~€!VZpÀ)0£2¸¼8­å)½·AµªXSëöÛoÿÔ§>uîܹ Ž=z÷Ýw¿ë]ïzÏ{ÞÓÅS¨`^Î?•¤ZS@‡® ª+#°*§‘S'Îfª:®ªãú‚¥K&…{3ˆˆ34 U:¦üDÄV|'}Öݪ@•{®–V«Ñw𙱕t;ÅÆBOU!L‘"EŠ®eèàåÄ,°­·6ãâ µ/ª)4åÔº?Užø»~QR)ß õª5K˜Þ`u­Í‘pF•‘KéùS†<”ÎÀb qBVÍéG&5pˆ ªò,Àà§ÝYâ¾°må¦M—(Îz’…À‚½Àñ`(Jsßä­iE5M`™‹míôÖ”Àzç;ßù±}ìꫯÎf³·ÜrË“O>yðàÁ믿~¥í&~írò»üÉ¿àÇþi¡ãyÉ_Œ.XgÄYTÚÖ§Üó±ÓAU–?±+$°Žêcb#q'H£L¶@IÍ‘ÕÙ°V2.Å’ÐS ¬tûé8öúcéÈutÛKÀoCkæa( ]‚W`déàeˆ9@Ì<åiióPxm]‘…pfصÄx#ºçX´FEeÍ:Z*æ¶XÃFºM¹M4²\âêÕ—ÍLƒ–@èXq ÒÈ¢*;>¸é7Îß @p¼2À.màÛµ—IÒ*\£'yà "j)I`yMËT©”¢Š8†qyf'€ zCÆÎ#I‘XÓ®#æý° ˜\º¨d]ÐÝc’³’)Õ „U›‚ư®Œ:H‡¢BçÝ2H¨˜­î‚+qvS:ˆæÆ'-(òã¥)OƒèW¯Žw(Æ“o¯LÃliú˜÷=Å8‘”r @Up®B–)°œ ¯XЯÀËá›<]>'57¸ …p,[°JÊñ&N–„ ÀV+'°ÂýK+ljIÐ[S½v}_U¬)õâ¿ø3ŸùÌääd§Nú‡ø‡ýû÷¯°Mqö+rúáøŸªršWj/1UÚB˜Ë@¸šÏZ”{É„f¾~¿cÁnÿY@Ÿ "Ë´‹t¤ÃÏ fôué¶åY:xÉ_D —²]wêÿHþƒ˜y(¡‚bËÖÚa}-„k3ˆ1ÕkÂ,«XOE÷âL1"ÃþW·¾ÑyíEöæ…›±r|檄Ë¢”TÎûžË9ªÌœi!RèÅ’ÞÄÖú/1)§le#FµàhqZŸÂGÒB(8ðǾ÷y÷ÍQ´NE… ­ÕªGÄ©1ÄnG£‘Àºû™Ï¾íÙÿýs­h2?í¼|§µï +"û–¾&_t÷Ǩù+=«¤\VW tÖb¥ teŒ ¬X%—â³ÕÚG\å|Ö«.³? à “H ¢Þrì¯þæÈ·ŽôZ)°¦ýÚÅ7¦­µÜ•Á ÂPá´àò@Ú")ó²N»ódð2ûæ8Ê* q5"Gù C0-bàDÌ0hfìËŒ˜6&D$m[øý^™¹ÀIrRXYÒ…:ï±åíweß|åðÖ•7Õ9ŒÐB˜f`mÈéù±OJ•OŠs÷ÿæojÌQsý¾J[q6a±wqó><ú'üð߉㟆¨³ Ý¨)°Æcç òf }9õ=åM’ì¶³®6*¼BwqVâÙÙ @Í=¥ªçƒ'Þ<þ§Á¡÷„Eµ.õbq!D´¤H‘"Eèð5äÌ!qî>åÏ‘Ün:zÝB/ÐûCKÌqï)ö*!¡Àê­ܬZ6š ,'Êt'ŠˆwË©ÂÕÃ[tçU 7«L¬*&d¢ú†Ú™2绚-¢’Y”BRPéI®%Œ0³H¸p ³|&pªX¢>Ä}ºZ¹ß>è´0ý©ú ,"LASˆ{5T`ˆ‚Tšã“'Øùâàé“îT«³pfÆ!&zCôTäá*z£X»‹¨À\íqŠBXj1 ႌ¾$b0šX–nŒ ,]¥ñTeîwÆÿú{KHЋ‘,ÉÓ“U5?9!¯ªÍ<€ªªi>xä’ÖóL1"M.9VœÀ¼ lŸœø¦´Ülq쎗S]LP MV20‹F{,T`iS!‡à†`“pÍÈv(âg§5¿¶pBûsc*f± @–®ÔB€cÙüÓ+/È_qÍÜÍÏܳ¶§]Ol\Kñ£ÿ¤}‚²rJ•C™Rœ‡¥Êm~ºÒ‡ @-P‹ØZ5Ùö$Âg¿QÛ“SòÃÐËèès=¯5¯ýý˜a öf€(oRU'B¬a@©ê„œ~ºÊR½zŸ^^ûGh!¬ÝAÉâlQþ úÃP’XÃÄހأi  Âú*EŠ)@r;‰5¬üqúßÂv½jaŸßò ^,pMÒ[w}5jI6ÞÕ8,¤´(,„4×I³›29("MOK«2qSšÀ <ËB¥HUö} À¡! Ä© kXCrÀ‘h{’',„\É¿:ùUiµV=Ä!2ºÌ¼!M~“ÎB‹Âˆbˆ‚T¤áë•ú¹JÉ—7ªÊ²…µP[mÊÖ+V%’ZÈ ¢Àê.TR’X]‘è·*„á—„ …ÙçË çâ*Ÿ:òoÆwyfþïÔ?~øÈÁ¥¶•<;Sìmù_¼rö…Høcø­ ¬‘KZDS®ˆj*C{ëôDàLu€ã eÏðz"ëŸ'më¦`f¤ÀÚjêZW«¦ `ÔɰlÓPT÷Ï#±sÓ›3YÂt=TdYXë‚Û·í{Þ[_°y÷zwdíÐ[·2CU' êñ¯ªX3t.~/XËÑî¯j¶ïIt÷ÇX+0—òW]‚‚Œÿ¿6Е±–Þ-ƒí©"`Ö¯PT~àë÷ž:´´¶Bƒ°K #£¬€HÆ•zËÑýæ³?Q-ûMRžòPn'{¥g6SÏ·•Hu®: ' ¦´HÛ°;» ‘Õ—µ*„±k«XÄàQLÉòQ A€38rWFœ$U¦ï†Ið•Àº±a ¬Êi$»“äv€¬]ªÙèõQ•Ó­sÜu–™GD`ÉÙÇÄéÏû¼‹Ÿ¼§áX9õ²ÆŠño+†d·³í/m×1ã’×€ˆ³•d¶g°F¶ùxí"Ôé³h °è¦çƒeС«tkÄ,h^lÃáæ›[Äô¦è=e!LDZ?ŽcàBD2| âl6v¿zñ£µ«|\œûªœ}¼ÓS`=·ÖfYôÍ qÏ᪃©ÆŽ9¬–E£g7™…[¶ýˆê’µ]SZŠAÕ“>Z¥—UGD`éŽIÊõ çÖ-{!i9^çËðÄæcæ# 2;¿µùŒ@­r¼f² e¡¥…P»U,³ÌøîO?)œ2¨<ÌIÓà"\ëÎzÕ3>¯ó/_8÷¨ŠX:±¾b§*1µšÑÚ´® »?Ƙ›ˆ§X)ô‡¹˜F©§®Œ• x×3ÿz÷3Ÿmù¬þ^HȘ_F%AÉ9µ 3¶î˜ JKj*ù=Õi€Zú¤XM­&æOÍyÕ@µ È=`õ ,}¤I ¦ ‰w?%æ ‘A[Ö„ —æG)§¼¨ !5#í®\H`YÌÀ­2ê׈§md @13Ž,„  ÀµçÌ”ÀÚ0ذVù4•Ý¥ÿ‡£“Â^b@ú-sÜÄZ•ÝI‡@¸âô¿ƒWTñYåÏÔå%9÷$U:JÈ3_Àv¼bZ’ÝÎv½ÉlÕáîÊ›@G®iy<¹†.Õõ›µØ–`Û^¼ÐÇ‘¢¯Ki/0X)R¤H±V …=0òÆ¥?_'vnƒD ˜ïðñ´Jûw~íÙ*„…hÛÜPÂlô¥QÖ{ Ã–ó<º'”µ·lÁPU¥Oʤ  Â}ƒnP ËL’‚ùºŸC¶“+m•_? @$xaT\C®¦^ 2ÉžÄëmÍ1é“M–œ0ê8"°ô"pί~£úŸú/|D¨¢úƒÉÓ'K³Ÿ:ý}eøÐv*8ÌÈÐ0½«ÃjõàFEÚ2ë MŸ¹ïìáÕk… ” >Z(Ų¡3°ä†¢çïôðc'mù¬~+I½ä2ãjl5Š¢?UKKsW úL§jžHókC=‡§DË ¬>m ŒÃ¼<ŘÊлn”þ>«æŒ°‚Õþ#ÜÚ’ÉОq_q}^ƒ0ƒ_R¯}øÙM™pg"C Âr0QË®3GH»€v «6wJÍB“½‰ K`UN ¹$Xtô¹tøºŠäv]ݯøl‹WF%€šÆ¾_bÛ^B¬A’Û(9õ`| ˜úO­áRåúÿ*˜'Î:|õÂ}cc·Ñýp¶Ò‘댽¿HÌ€¡6ÖÀ~óŠ·°]¯ ÿY¯À@·¼ˆä/!…½‹~&)úëêpI‘"EŠuaæþדüÅlÖ¬Îk®¯…pmÀ¢è+«W-„FS–Aˆ.>HAcÖX¦SÖFô’hÙR6€²ð\á!â³Xd!Ô+. €œ¡ ,.@Á´\ª.ðHõ0êXÒðd©µÛÝg•†‡*õõ§ˆÒ*!½8´” Ù€£—yqÚ—!mÏ–'fÂt‹iî°úÊÿÜìwß]ý‹äC«”/í<²˜ö¼\{Õ¸Š7Q-—»]A ä=Þ—yï‘É÷”¿êtÖ† qÍÂTòVRAâ®C¬4Û¢iî%!f«%QJ²Šˆ¸/)wIM%Õm: Pχš#;ÊOë§|4Sð|â#ºÆ^H­Þ2‰iÀDÄÔ(‘"€-Öƒð*`UÃéB[¹ÞTÐÅsŸ»y×-[/i KKt‰`òšr*“‰î¤t»)2q;CVBÜS¬ 68•ÝI²;õ_Hn—±ï—ËþbÒ=T±ÅžL\‚0úa»î4¯½‹m¿€œú~|düXySqÌÜßÁ].a—þÍ_ €Ž<Ç<ðÛl×Äìä}‘&‹Ø#ÆÞ_èäµ=ŽC‡–èÄN¡§,„é8öÒqì\ ƒØ¹kžØ#q¥”%Xñƒõ˜`×fk ,Ú[w}ŽahÃ]ëúßÒÀ@ÃtI·d;ÊÀ°ÍÕhÂЧWJé¹*A`)€+­ì0XÍB¨×ê¡+àyƒ{œ·OÐ++DçàPëí{_ñ‹ßp[îú†Îx‚LJY°p4XÂÀ¢ÏÁT6€'½cˆ´e+¬NàÓj.5ï})° 3£{ÞÂj"l¾¬V¸^~꟎?°ò¦ºûc¬³v±Ý š^YÔBØSWF/ªöPá-D‘:Ä=à–A`Å G"T¤ ÀpT±4 ´öUÒ À”}V?å)¨¹~#¦Ò"ÐÄìXÄÐ3­eþ¸f ÀŽÌP††ôS.WÊ —Rö³VµGâdC¶ªXº€løn:`92ª&˜²RÖ†AoÝÊtÌ« –!ö±GèÐÕt`r‡Vë•TKVP`Õ^ÀèЕ0²ªrZUÎPAQ•ŽZ$»P²|BÍ?€ ì龜‘¤ `dÙ¶Û;~s¤ù±†;~yïb÷î ÝÕ è©÷tûé8öÒAl±G­ßg^ñfXºk]$Xk3ˆñ}¼E{K€€ÞœozŠ``Ú{ÂüLç÷¬»31U{Ëz‰XU^EúìÀ2xÒELЖ L€JÈ0Bø¢Ü"à¤D&Z85ËÜ<p¥@ÑÏ6Wõò¤D”;À’€: €yYºbæûÔp`î¦ÂÜýŽ@$5Éuò‡UŹJéï~÷_O´æ <øñc—û-Y9´î;æ·æüÅ—„îþëBÜS«+§èE(žžº2ÆÚÖVñº¯{/øjYâ á·}ËѽéäN–/ªÙZ½å¢Šˆ ª’ÖÂéjå'ÿì gÞÛ!—´jË¢ € bÜ-Ù9ýT ¹V`% ÚñÑI1‡®Y­˜ÀªFáYÜ)ØÊÑP÷4ˆÀ2Td!$aVó[ˆkËȩڢ>k$XXi%i>U`u 2ãë*ìu“À °vèÉ̸ìWŒËߘdyˆ³™˜Ì«êxãkC aÓ&alôüØ' $¼I@‘ÌÐ\ØaY< Bé*[ùšX}ƒÁÁŽ4h)šA{‰ÀJDZ?Žc ÄV $3@ña!\›A¤¤w ,*,&iA`iç Ó3È5Ó— lN6¢‘!6Wyžò8ÄFåîʰd»ÎÀ¢„@„/¤ÎÀràpíYYw¨I3óÓð’Ñ«öàRUxˆ‹³¦UŽŠñliò;…/™|µå³ÚO¤ÑrõÞø’våoN|}…Mu÷ǨÅ5¤îÛúÚB¸ÕSWƪ‰žhñvå;Σ O3H°Q^v†gŠ3þâ!V²>KÏCj€O[¿|Ê«ˆLYZÕgç¦êž 5ªUÇ·ëK†$âûS'â§|)4-Exݼ­†Z誨øƒÃŸy˱ÿÿŒ} €EL&_&«eÅ8 ¬!ÛÉE ¬Í, `ÄH.U˜ÕülV;õµ™=ñãlBÕ’ùj@Ž„áæ†äDzÊ›âÇ>!Ž}rõN±!KUN ¹í!¤ ]„M",ân¶¸ b;^A¬!U:"Î~EySˆ=ªÍ büÛPœdw¶¬$ØE¤Wº ½J‘"EŠE`dA¸‹V!͈c2ú¸JF¬À2io…¸ Â`µV`iqVâîˆ%X›õm$êúÈ6€*ªZ¤óÎM¥kczéë§ôÙPöMïíëÃxSë‹’\š>ä@òÐI$™.GŽi‘ IDATÙ¬ÀÒë:1eNÀ¨Úœøì×ÿìÔgX~@Þ ¬mv¨DÑ’Û"ÌÀjE`Å ,Xÿe{ÍU¯ÀZüš^ ¡…0™Ÿb…Pþ4tªÃªacXÅcNuÕ.Â9î¼´R`0²ì’Ÿ Ç¿©<ýч–~¸l…=_d½ó8Rô bÞ*ýF¤H‘"Åb Ä̪ìõµ® ŒèMÚ=V…•&ÚXš{b`z#=éévu‰Xtæð‰ï‡– ÖHH&‹„W‘÷F1ð¥T‡²Ë&+_S`%VP’¨ò(2F’À" ,mɉ­”­­¦v˜›’GJÓW¦I‡œ¬MLDZ'iÍˆŽ¥V˵Cç1+ÓoP¬­V]=+Îâa≹ó«t–eƒ\ÖlµòÅìg¿˜ýliÅFΠéÙJu鉧‡ø~ñ™ä+Aði듟¶>¹dn;øoå6X!aTT1!7àÅèÇ[ jŸçG>ðÁg¿~ª\W`×—RÛœõÔÄ¥ ˜`§= @˜­‡c.³±N{5VïX§ÚÔ ˆðœ{ …Ö²zKR]Î"$°t WM8:ÄÔ“üy5ñÈàÁÉ¡g8¼ `†Öî\èûÖQ€\qI´±ºYa0VÞc'”ű éñdáe…ñ”Àê¼i°R Ë‚*Y: €ä/YàpšÝ  ……П@ÌÖ…lèÀ~PSùs: ‹Ø#ÄÙL7=ŸŽ\G‡®¢ÃVø&:BÍÎÐWwÓ\ï.lTôTV:Žýtûé ¶…9tƒµ¾µÄZkÁ­/Le MyDí§c„éøÒi‚»FA !‹`ÀÈhÕ'€³qgžâ’ $8¾o•X¤iBÊåh&°ÌˆÀJ(°´Å&PB+°¨bF˜Õº ¡e`e“–=ËÁ€pAH‡FEîR³"ÒŽ•W-v*F\‰l¼Zn~–S€é_M«6ób‰‘Õõèî1T`Ѹo[}œwÃ/Àœ¿¢!X´mˆ;P&$ƱÄCúFWQ˜ñª‡ç¦&Z}W¿púÉ7ýÐ{Ÿù®w9®7‡—×úF¥ˆÀ ùnÁËoåŠÚ¯ø[Ö·T`é(À@ ©ÖJ8LÎ-/Ì\•ü{>I`©Å}ƒfè¬Ò±ƒ)º‚H´ŠVÏ¥!´€’‚Çßg^ùV9垃p‰5¼H´¹"j 0ÙX0€XCͯB‰³YUÎÈù'ÀˆqékVü–B¢½šþºêÝ|óÍëÝ…Šž"°Òqì¤ãØH±ˆYP€ æ—4e®Ë»6ƒWq2{Oe( ‘Q¥Z<Å@ß¾÷À+¼‘¥å:m&#ã‘EcÐÌB3( Çháà+_Bg`…7ÆL² ÑC "™Bàò 9ˆ'o†”“ÃŒX{D¥!_áòOýN4­fÃbóáÙã\›ì<«8œ•’ÇëÊñZÅ™‡Hx€J&Ožýë\õc;;Ú|ó½ßÿKÇxË–WïÊ·¹I®G,l™ñ*Û³ÚÀ¢#íJµiõÞ-$͘ø­@wŒÉwÙï¬)¿¤©×¹ÀÛµØÁâ®ÃŸž´OßI_öÒû‘ü [X€K*HŒc¬c ‡i}ìÔý‡¿µ{üšßÞ÷ʆ—OûE¯0153Ð¥¾×ÄV“‹G„QQ–X0ôOØ—A•‡O¹Q)O®”4]E^GjžšŠ _piú¶f dÚTF0ïU‡lõ(‰ÐZ8KjVPOÊ›Ì@”觘ôSV „`È:Õ’2&eD2Ee2‰Ï¦–:ô­5DìÈ^sêf®DfsxÐש@ ân¶ÚÞð;ù7.Nܼ­NÎo$ ³*„›¬PeÊÆO)Ų‘XPÕñà™›W¼Yu ¿@ÌA¦‚"GüÕ.„fƒeÚ¾ÐS•3Zðµª}Û€è _/°)z€Á%EŠ)º‡å)°úw†ŽÑsÖ&¹É-V6›-r—u Tœàk/1þ–á+ÌYs_n,þËˆí  Î|­tÐû"+Ð5¼â³P®¦,•´<ÑD`)’5[„¸Sn¨  €(¦‹ò&+ ¬ð\£¶šÚ–-sî´ °j†¶†£¬cÅŽGªùÉ'f ?†Ž¬Oœü¾,—òxµÔ)›ö[¨Z ÜñíÊÚ(°*rýkK…æ[zyVy|f|.p÷lqVï;í—‘Þ´•£Hçx¦8S¿ö<"°ZZ%á<Ú‚ÜðØ{ïpK²»:tí½+pcç43=Ý=3’f”Bò ƒá“í÷HŒ x~`Œ ÷}`lã÷àÁa ŒAæÃK °Qh #MÐÄîžÐ9Ütr…Þ¿ÚûÔ 7ßÛ}ûN­?ú;}N…]µ«ö­½j­õ‹5åÖIX­Ö$4=bìÝÃT‘)–Z‘ :0ª%B}xDôª/w#], *ñìËkÇL‡ÑûN¼£¸0UíÄZzË8Ö&Ö†9GÎÓ‚’ ×b!ÜÕ¶(m‰-I)Iü%N`Q.&LëdW·žÀ&V!°À8 ¦M2o’Eåù—&]q[+¬W9à>²íto.Û€[jg(±ñR˜_•(Q¢ÄVyÖ˜µ£Ê¼nú ¬W…ðGN=¸ÜO¹…p£a¯ÞsèÕ{¿™ kˆ¡ýXi@Ý`Å_dân3°<+hòQT`‘!NªÁ¼¦<×Êb–ÐDWéÔäÂ*dlØß—1*6Ÿï½O`i¾'ª…º’Ï8 Ë3eL®F˜—¶ÁÂô•¶¦»@óhðEúÜ[3Ùäf¼KYwôW#2‘¬¦XHÌög`=³zɶ›†ÜJ±ƒ3°~cé£Ý‰«ï]øï.d`o K2g0[Ù–u)øƒ£,Ýcø˜³I Tê \‡•ÐTŠÔO”â”!û½¿xšŸ>ßûçþN¾q£°=–»G5|Ë»K7W`1Ÿ+ Ö²£RR´Åöð¯ôšýƒ*€Ê#p味òjÜÀeÀ“‘D{)é{†vÝÕ9Ó'£v,%ù‡2°( 0€’ÊÒø“I’·cr£.˜~Sqä¢DÃl¿ÒüQ8Ÿµb€¿jÒC °6Ö¾¨N~-±5È3°†/¼-Äm“Å¢ýL2G ,¾š –ù£$|B€µœÖ²ó'0NÓ¾ÝØ­VײaôCÜwÀ«ìÇݲwÊN\s™5W[¨’q Ø›œŠ§ÀZžX¦†úÆ0áLs#¤ôz&½¾{1EJ3À€[“S`,r5ö”V`2ªŠ27*q˜*™) €NUÞ•ñ *°&}[+­r Ôö¿I.–©˜*€ˆJn‰œË—1€zz| µ4Ї.=MÅÂôÖl÷ËÏÀ›ãt7ä'Št…(ë-G±#b³)ÖߌÆÀÖ6Ý‘üU®ZÚq\Så—™ó¦m¤àsæÓÌÒ+c3°èXt£Ð=i×U €d’þ]”mYiµY_6H\ÒXm×&Ñ·ŽÉf`Q¹ÕTe]Ëv%&ÿp#¶·§ ÂhIarõÖ\Ò ²@ "‹r̽كí&fε懚J r<ôrÖ)c.”a˨–|á9;³C$‚÷®ò•Ø"/W`)ÃÖÿ' _c Ó#Ïc2Pa%µEЙÉÚ`‚[ïÉuØqïâ–‹ö™îEÓ½hâ`«Y}ÒOc°Ò%VT`EVmn#q¸R܇[OVl%ʸ– cG]e?î”ý¸ Pvâr`þ$Ö¬À꯵{3°\§õºðn-î îöýV_tÍ`Yhž ØêW H&Iá €žÍS/NÒ¨0bbKRV1¡úï;û27ÍiùÔÈÔ(0p#(9>8/€]w:iŽée5ä¼U”Nv¢€:«‚,„–áÖB( žÇÄïÏÒÿøÂ—‹Ï¾¾zß×¹ohï—Óy§?ˆG¤"ËÁ©Kšzx’Ki¸fšG¨ØrÖÃsÿlñ ‡½ýÆh< u$Ø{²ÅXâN£ÊŽd°è‚ß’®i#'°6CVeÐ9GY›G3)(FÈfš¸~쪄ªz’þ1Ë-„Y_‹…D‰Km®ÐA:ržaÔÖ=>ø&ÍÎTNKE x^…0°”oMÕÅrVn!ä–3j€¤)3\0À_Eñûøa)°(à¼R`9ýx¨£`Ê«`YT±Ö›™  âX.ªlÚå^Î䯢ƒ‚¤¥šSD}ºö ,;ãG¼{tÎ8&ï¤T¯33_ø??ÿkç>¹Æ-¯Š6XL“ù‹tjRl\ÕL{ŸªÿùãSŸyjñÚV5电¬\µâ¸ÄËY’ÞXÍ4¿¢2G`™•3°òKq>m¹AÕ)°Ò\•ÓXçTÜÑ Û¨À­~˜X¤ÀÒÒ‘È’§gªÍÍœiM]Ê¥ 3|dþŠª´ER}þ;ˆ+ï°6€ˆUÔx@g\e)b¯™¾ãÝ·øKñqm µÇå¯;+4S€ô¾H#I­6ÖvrOŒS`«Õ,€‚&Žu½XŽÁ_K€ï9ñ–Ÿ<õ¯œ=¸ú¢%Ö€\UX9¢½î#«¬é"ËÏ]Z´®âÀ;ñþ«~šïyíš¹yì’b;pþüù[Ý„ÛtUìN³ìÇݲwÊN\^"„Š1îåó²ØþñÕt/}³öN4Ígó­ç×»_ÁHôR—_ÁjPH­¢Tuâ>˜æî±Ø¹ù*…Ic¥:þPÕ0L§›ÄnÍãxànun3Üñî }ó‡øïù‡¾÷æµÆ¢ìÇݲwÊN\,˜6½k&]b••”Qx1°Æ·µ›ºöIqøÝń͵w¢¶–n?¿Þ +s8Vå¥ W+½O`y>Rh/€Bõ÷>5@ ™É qéÑàDŽT ܰ!íׂ3Ƥo¼¬•¥SAŸ#2¨ã©@Ó^ÀÛÜý6üöâ¿„~ÝÕD~yaSçƒAÖ\ÚKI5Ú²‘üx¤Iñ³ŠŠÚ£iÓËÁ©K†H± í¥¤¶À¤ÿæýw¾øâ\/[G`õ@VÎ$RȽö6î†sôçÔà[ÑFÀ>Éï@ !•m……P9K’nQ Y+³Â+6âŽq4““S5TçòîsbÃT“öŠ‚ÞUF% ‹ ,ú‰o½Ë©G/þáªðÈq¬\Ë¿5DØe…ø¼óì<€WE§`ÇœÔ먲 €IQ³aVWjm¼šO…ö'Ç®TžúBó¹WMÜ .}*`êh#Jd×^ D„ÜB˜˜ðífËYð…(Æðy‘Öªð mvE‹,„ÊpÀ[[”Uu¬/«ÄCvÀ«oëNn§®¥,p­ñêTÁÑhCÅ‚ì€q¶Íçt“¸ò8J”(Q¢D‰ˆ<³PÅeÙ%oâK#ÓyQ/|qc«êæ3 X³É‹@ÔÓë%¾v!hj‡Â[zÊÀ¢éY‘ã ,—T÷ !îI®ó ,n£^†ÊÉçÖB-¼Á,N¡<­l`b™gÊD ¯6¯>¹øº&’Yê6ixµzˆ·*0§z"°dÀ•^®ÃRã|vD„ª†õ0ʪc¤?p,Ÿž? `ªs8ä^QS–±Õ ¬ÿpîÓï?÷Éž\¥ )ï,„L¨ñ*ãez£\Q,s6a.¸²±- >äÞ]¹MÒ˜…¸»”lviH¥­Ž7bm[/“Ø‘é]²1´¬KY¾FÙ ,Œ³žE» 8J`xF¢O`É\U †¨"¡§íÚ$\0üèů†X.K¦¶å*ÖOïßTÄŽDS8”ß0éE¦ý*€L _W I— v÷úwxÞ¼(µài«ÀrX4š1[ÑBAû9c€\öÇœPx®„«ˆë°âߊ«8aØtT9U}w&™¤lþ`Xœ…ðvb9n/èæ3úú_›øúèOFv0o¥.Þ7EVþ„<áõ«SQM½ÌHC3ž3"¢Šk.\%/é/`¸ö5zÝl€HÒ<P+ÄÄ|×ñ¯mÿ”_À²Àé#¸ò´P°öÆbË Kº àR§Aüc , u®™jÈÖÌh8{”ñ&Ég²óN²»P²Áò+ ™&L} ÀùöËÿ|î±Ôdß}ìí³ã溙ÐLõ0Ád`¼t)é]~U8¥Œ¬6®v[«ØHĤñ5ÜsO/]ÿõ^oâWŽýà&wºvôlñA‰Í*°n ÿm&†¬ˆ®Lé–’ŽÀêg`«BhÅS]Ó/»éò³(݉H.Ñbt ç§ô«m¨BèŠ'Ž^üÊèâ€å%;¥‘®åò+ÍÁµ.œa:Û”'EùY:HLˆ*€™°‰Ô¦À“në±¾eÏÝŸˆÑ¨]î© Bû¯l¼€¿×Ž0…Q‘‚á…p2éòaʃM—¸ð,½PI¦ÚQ›ýšŸSc, V¾-|!h¦IXç¯å.*®n_'x»ÀR=uý3`ž8øÎ[ÜK3­sâðƒâè{†ËXµmmÀíÔµ,Ú‡µ'¸Ó*Ó÷Ћ0½«¬X‚p`·òV§OŸ¾ÕM¸ÁwLˆ{Ù»e?X0À¬…Àù°MÐó0Út/çO#Ö܉¦ý6q’ÕÐëŒÁ¹…°T`¡nÙ¨ÀºÿÜ´ ƒ ¬È*°& ª(š˜¥FQhŽ“qõš!P4aãà´¥g`Ë:v^È1ÑïEo˜²Öúþr9ŸíºÚíºñŒºðuþÃky¶Ù^$óLïÒè/Fv°m&°n'–8üwøþ·0¾Ê_÷"øì«Ôùÿ®—ž„ÎÔ•¿À§ïß¶núUom;¶o}ë[ouncäUwÀ5Qöãî@Ù»e'®µ´ú’7ËBh:ù¬XÏ?,Žþ]ú¼ÆN4½kXõ0óêúúgLg}ùý‚qì¶zg¹M˜´¼À½¥gŒiA‚V˜ªõ ¬‚…òÑ3#ifåDOû§÷÷’oÇ"•¦zß»÷+_èÜó²‡íxhñ‘ÿÜûÐøÎŸ:õàIuo•©Ý3?;ñÍÅo¸4ívq-¯ôfºþµ.ï˜Ë,ÅU,eä <ÿS¢Í' áZ UÈ šK:Óa~n)gšž£B‚Øh!¶!\[¤»y¶{SÀõ¤5º˜ÔšR¨ÁÎ;‚{*Tèü|ïh‹ÿ•½÷O¬ñ(‰QŽx1¹lÍd,+X©‘`–^¹Yp ,µ_çÊXLÛˆÅÓ½àÚX}ßÐSùv´p ¬þIÌŒ*ÐÆ¸üõØëºAÕqFJD\)?  ÎNrÓµþìâ““Ÿ8$ïøW'¿~3¢leÃk}ßÜ¿†æïßÿ¯h –ƒ—EŸ†‹ÌÈl\”XUN6tÓpÝ“Uô#ãótÐW`fü*€{Aw&©Ï?¶xù-¼7)  IDATûïr¿6ÓBº?ÔL]¨-gôjøÏ/p5QËÑS"rœ”îßæ‘çû–U?­,†¼YVspí«¾¦u,"áAA3EvÑ@¬À ÙnS`™tI]ü ‘{6Më,Ûó†[Ö ™´ÀtG ,Ù˜kê6áv"°À}z§ºv°`†Õî0å‹ÿÍ´ÎÁ«‹ïÜžÆmJ a‰QüÔ·ïå5Q¢D‰k=-¬ÇB¸íVûú çGß³.É%M°èUö1½õÅôÜ?}ðŸ.}Gerïÿv+&m0GˆþüIÏ /*°,ó2ô§[,!©&š [‰ø€…BÇ„ß|ä ¯jÞ95[¹æÀý3èWÒm-°9Yi-Ê9Òà +†²¯®¢S=8×Þ´ÚÛŵÔïhè>´”öz9Š?Ÿõ&È‚k)‰ëAè-so¨!µt< VåvÈ@EˆhÝ,{ÿ Lüó“Ã^ÚëiƒÎèE“_áóY»¸ÀS‹7þjáIÑ[Ú†¸ .<&DRpÕè­§ü( SÊÍv×c¿lÂ<ëb§ù‘«_ªóè;Ž¿iÌ®½ñÙäÛ‡Xo%»&ÔT×Ì&rô‹èêœÁ1b€„"dJ‡j"–ýCpõdÖ™A}ŠYÔ[ Züæ|2ŸN-.66«"qX‰è×Í$&ª×q[„€ùvxQJ tÊÞ¥“_U{íûf¡ý[:ˆi\ñün–k¦‘Ñ}–g6ÌG¹élï5ÌŸé\} îr¿6T@`úà4Ÿ¼`àùˆÓ\Ê×Nˆ–¡fÚ¬¹ÏiQa˜Ç˜+„zOíÀ·Üù:·:Sžá©¯V¡éCîAÁpE¼¤¿Î*„ŽÜÜ5X¦ý¼žûˆüÔéæY~ë,“.P²ŸI!»ðªÔÅšd‘ïy-`àU·;¯é¶"°6>û*ÕyQßøâð»\ßïX%[Q"G%Ü%£p‰%JÜäDÏZBÜíŸZ¶Íss–M2§.|^*6½kàžwâ;WY—XÑ~Lƒq߀Q`k}/]÷ƒ×ï;¶¹æïLU[D¬èô)À¥8 ¬pSžWH`ñ¬KåŸü):4pã`†ÍFÕ·Dw µÁ3€8hyBM'Ki_øKï*!öXÖ×sXì½l+Ä5Ñg‚i\Ìxjg)Í„'ü€*X?yí7dµñíò[ßzðøè®5SÔl#äRÚÚ¡hži?P q'EÌ|Ò9;ó0©¿ÆL·Y9˶^£‹j€ÀúìҹǦN3—Í5µÁgžWP”ÄzÝF¶´ ;Ë þâʳ¶Ÿ{eíø»ß»ÂZ«‚çUÍÙæÇ¦Nó¤ú&°g3mfGëElcò7ŸÕT]˜¸®„jeé„¿Y®¼g ,pM‚AYLI=@öÅ*@:Êb› €ÏÍzbð Æ{eXÚâuk0½® ÇRÉ 'Uç“.XCG0Ÿ†i¤,zû¿æÐ)¼hÄÍ49XXJ{°6aŠØkcà‹×ðÌyM„Um¨˜¾@†%2Œ%°Üªš‡Â ½ýR\ûÆæ[i«T…Íìs`Ú7H³Š+ ÓÄêëÌÀr ¾ØÙ™×k‡é^Î?©`€1­³·²=‰svݽÄ'O™¬©®üOEÄÖvûq{e`m |æU,ÜÃjwðéûÅþ·Ýêæ¬÷¢k—Ywüñ[Ý„[€²wÊ~Ü(;q°``&]Z­ØMR`™tɤ xU±ïÍÔ•¿T>¢.?¤Õó›öŠ™;:5é˜ÇÂ=à> ÷¨±ÕJ¬Š+§ª('n%ÇeßwF5³˜DL…zííù³*YWŠtX¹Î"jòK,­N¸^¸ˆe—S±Ú±ýþ4ÓÜÙ“Y—¬Á ¨¥4À²€˜/'ÉÑ€ŠÚÚj<D䑈k¬þF>2¢ÃŠBRl¹Dž…¤ûù¹‹:ÿ˜óR-Y™˜ªä­m™«£cX ÃÅ!yŒ‡¦¿#§ßY;dAà#!m?wvæáG:Ï­w;T…Ð*]•ÐA/ÕÃJ+I9ß\o¸„âöX›%ÎH°±€rÁ—’áÔð 1ý¤´8]¨Ù'Í@›c­°,`š®~ôú^YÉ•‚Ò#¡.d`{R•h¡«ÌÚ ´Ý²¶•:,Õ«½ºóó ,¨\,f¡uëÆ¢¨©fÖƒ½m¹ Ÿrõ"x:^øTå€Ë“Oÿµ÷cç~‡¾¤|± ë³HÄø!‘ü!tÒN¦¼@xŒ—Àj?sÆÊU±Ðf*àªh•«)°h/Üf`‰õ ŒîußÁYðÖºpÁ©Ç§î…¨˜øÆº¶°U0­çô—LëÜPÛôõÏÀ¨~S·ŸÀÚý ,íó_õÓ·º%pÇwÜê&”Ø”ý¸;Pöã.@Ù‰+ûðjm“µ˜?¹Â‚7‰Àê¼€×îäûß—Þ½´uI4WW?îüîe×í] ‹ö‘&ŸUšøºé]]WM›„™°Š*¬?‰"‹Iÿ[¾Ù}¹/ªí½z¢jÄÉÌÒ'°ì«þ3{‹‹YÖx‹â·h:m„l¦IG¦(ðhëB¡¢•ƒYÖ”_ô$­,I¼žF:ˆ[r€ÀjÚ™p5ôQ˜ö_ï¶©‘]5ž¢_ER“µF·@`Á4D¦‚0¼±Gz±Š:4™ïÊ„Ä/—:ÿ„ßFµËÁƒGîÐF{hÖ)þ·«½ÌÎg¼è ×O`¥KAf”Ö':eXè ÈÌ¥ÎÒñ‰Ù±»Ž¥¬®ßCº1$Z’†¸’//^ûàÂCûô¾qêÁõnŠè$ ¡n3Û‚÷¸@`µ³d_T“…š}C$ ¥à3Í!Ä“÷Ó÷…xgÃB3Sx·áÝ­"xº^Ø‚`²¾OÐÖtZÅ¢¦Ìc‚ƒÜ  )“Nd‘ »&E®¨òµŸM™hÉ ž#°ìhÃeŸÉ}`æÐ´sf£–«xº¦ ÊúÚ(r@›åXvËL{ÄàÓsí§æ(8²‰Ï ¬îr&¨ nÊ“@«*°|Ð0 yW^~ÎÐ-vjé^–Ïýÿþ¹æå/`þ„ÉZlò΄^z´ΰ=¯ßÎfŽ|þ¿šø=ðpÖ$ ¦wÙt/ëëyå„<î $°^‚¸iy7SS;½þãÎÄïþÀ­nÂÊ~Ü(ûq ìÄ•ÁÂ#ÛH—°2å>lâo®ÉZzî³ô™OÝǪG‡h¿€ÕïdÑqìï¹ï£¬•=ú´^xÔÄ7¨Ôò˜Óa%OPb•ƒX|Ìô®¯Ùx‹_ª¨ûy^*…@ Oû p¼uÿ¾ƒýÇî;ê3?{ò›‡VϽ6ä9r^•™Ê@¤”g3°Æ¶!ÀIq­×êf)l¸ûzáY ¡S`UE@óñ™ Æ;¾BÒÌvTâ™Np¥¥,š D"€êXº¹¬ŒtO£ ñNÔ g ,ŠææÍs¸6ùKµï{xîâ¯ã· —Ú*¥ÉÇùÞ"*pº÷ȃ¸@O X=>@`õ0HŽ0C†G‰¢¢¤¨ßYKIl€«Éë¾f$”€"{rñúÓ­«Ç«{^³÷ȪÛ,"¯BHX¦ï‰»Ôi X.5?VÙM#°bE]ÎÑœï,4§ÎÇí1‘ù«‚.!TÍ‚,¢H’d¯¨ÀRƒõû(‹)®#Êc¯d «a‹ÔUN†–i „Ò ­¨KhFnMK+Ý'°hL [XBìeU"°¦ýœÀòt £z óÀ×®…Í“ýa_TsuÒQ/kgiÝzˆÔ `@”73§u ,®E(|ÇÈ‘ö“¡ cr%ãðÿÓ€*_%Þ{"a˜-¬±nUÅsª´¢À2YKÿ#V=̧_Á¢½ò¹šîeÓ»²¦·P²kÒEð€ü*uá#|ò `é Ý:Ëoe’y¤ Ó¹ôÛH|æ•êê'ôÏê¹ÏÁhæOš¬ ºOmÖäö¡$°v\¥¹ÝÅ_•(Q¢D‰7,˜1 &]dµ•¤jý—FÞ“Îä™ôm€*£V| «Þ»?Á÷¾A_ÿk}ãoŠÄÖ˜u£\V@¼¦wuÃí}‰ƒg‘»Õ‚µíßÜõ]/\¾ãØêe‚ˆ±’й·Å>EO V$ͨ‡²„ kqK0®6B^8šÌåÎT„g ¬H4},%]ã¥Ð¼®&;¸Ò¤Ú2_û5Ÿ²“óiÿÕx‰¤½e,„†IaVo]žk£(š‡Üd‘ð¡rš +:mWÒ"°æ'Ÿ¿Þkï¯ÔÓ`€®úß$l˜!ãǽ¨ ©‹WKa±µøo’÷3éÿÚÁ¥o(&‰Ë@û‰bR@"ûËùÇŸœþÛ;_µ^‹ä5nþÞ³±\×Òa’(³†¸XmVïóç%«6~ÀûžWLï_yÉÄZ‰ÀZRfCAò”£ïsá« Z[B`±þ%×Q ˆî±ÔŠ4ƒ ,-pÍ9—µ'DÞ7® .n¦Ÿå̽7ªQyû«I˜ô#è fœç– «^@‹ìls~!é^HæskAña6 Çòiy#Mp9@ƅƒÊGnïózÉmçO¯>þîú J£TxúI…] dZ^î´*ÂKG,-2>g5Þï‚é“‹×/õ–˜>|°Zm9¹öŒ—¹Äqb‘˜ôà'Š)Šë’,#/ÛPÁ¸Ua0û o œÚ|6œ\ãâ·©´a(?p©»¸*å*-’Î¥){بàˆNŽ ÐZ†î\Š¥0»2 —qOµ7Ýq­,Ù -'¡5܃¦0໬+â1/´v™þŽN_{þ÷ÒNÆûîÔ°0sè‘+§­z¶Uýç÷`É;¦¾¼öß ‹9ÕóFÿèêæÞÝß.~ ôô±uúôi>q7DhºW–ËdÍ-„‘#°öƒq“Ü€Ùìt÷¥‰Ýó­?âßë÷l¤,#¥ +HšÙvâ÷ôãOöd!ô– qX‹Y›$NÎ ¸.¸ød—;3D³‹wO5î¬x¾o|sY€Ð~!€ž È!蛠挿Øúào²>+ž¢b³ %Á5€(«pX°åéc¤X.¢ z6Q«ÁúÉ÷×äâÕn \ó´âÅ–rÒ\ÏÇ]xäß%ïÿÅËIù0•F•æ<.ŠŠ’”%¿¹ðg þðc×úýòKg?þ£ç~ûWΡ;uµÛ¤ÒHØlIä‚Y‚…`ûµ‚È–?ɃĞCTïзÊÍæ©ñw-Y=Ý9µj/Z¥­;Ø$ÅEhBMÕù¿Ï|lÛ)B²“¬àHèžß¹þW?zî·ÿâò³ô_ ¤çF&ðÔ g´ÓB9B¨îˆ……ƒu:)º0.ö,µZ0.fYi5£ë:QEPP‘D±—ˆS¾óåí ó;‚âÏi¸ "8´ýœ…°jè¡»‚ƒû''Ò½’6€Œj,xýû¥â ¬,„^XÈS'íç?;ñö9õà^G`A¹ôó¹~úä{ßø‡¿þèýX }|™×+ *†Ui·¦{Ñt/Á«û÷ý€wây§þ D(Ž<¯jº—MÜ¿œLº¨ç>§®~B]?mâ0F«KS—>€WÞLðúñ›V‹Ð¤‹öaÃ`á^•Ü'È ÉÍè­!JÖK;îb°ÞúÖ·Þê&”Ø”ý¸;Pöã.@Ù‰+ƒÕpo;—]läÃú 3_ã¬v§‘mH憗‘m¨¤ÿÀWu"Ÿ¼G/>nO²}o^†žqû YÌcá^_7½ë¬:ìI,±*ŽÕ§7¼.I®4WÄP¸¸ôw¼i ãhÊ'–!°*|€¨j¨N]D(h©ÖG“vž9á?wê[ò_u`IµpÓgˆ¢ùp„°âù0 \“'®çTl‚e,„B¨© =žX¤çš»ViÞË z®nÐÀ´0\õйÜm€!H«¾Š2,1é{I=«-^é¶2-¤¢«¼—<&ê… y)Eàªê³Éçù‹É+/¶æ€޾¹·NMí ÀÓa h¦´‘Ë2P ¼u*°ò,—eêÔ ªw5õ6¯À"j^5W]2…%°¸Ò@ä˜ÛƒFÎP‚’¼?Wù´ñ²X¾‹BÐvñÉ'zçß0qêO,»¡$ñ’i5óRb<‹ª«ùðª¬6¯·rž.Õ Ü „Úsx?è:t[ƒJU64ÄV q7ýMWÓ%⎌蟞Ê(°ŒÀjÍÀêYa1Õ‹¸*â}¤ ¢ ©«˜ò\2ZÄû÷/ÑЕV• ô^1y蘜ýÓ¥ÏXÌ:°EB'ýeSó0Ve·ì/ý±«8^yVëD!î_sèÔë’.&×Í=õwj"b™Y÷_f²BüÖÏ£õÜçˆ=¯ƒˆð™Wú¯øQî1É‚žûœ^|DÊ5V”B .|"àÝ÷ýŒ ùâÂhæO°ú Î`È&N ñ´iÃì¶EaZ?ãPÉcqäA½ô«]ƒÓ9%W*°^‚Ø‚<Ž%J”(Q⥠VÙ¯jÒ†IWZlsªgÓ»£Y´Ügþ˜0Y+WÑ»eH~í]fàS/ OÙ~Ö†NáU!úÁ·ä"TWÿ'Ei”¸i pbÍò*„!eÇVóøRC,WĽ"n™N¬3þÆX6¿&WlÞƒ iÚ|VyˆBŠòÅCä³eÌBJ1&RJ[¾£¢êb–OìI囑 ,Kx%6Î\FmAo @õH7©zE×xi-”×â&i”R¯£¼@ØÞ¶öQ8mÓgâ]‡îù?«?øÕ÷,•"°Èú÷>Õa¤½'–3šKr:‰X¾¡‘’%²”eÔ:¥IV€ÕGf ¬Ñ ú ŽÀZ%ºke$ZR÷VW`eŽ,c&‘Y—º¯Àé¬ÚžDRyK\ceŸ97óðÇ[¯q›$¬ ²*ìõi tùFGçMXã¢êüÛ³ú«Þ_ª7rnM1ËÒLR)sYÓ~ß_†J[/ëŽ4\£±b1rkŒ…qÚOíGð¬+]Ed(ÑX.|ª_à D¤ß;½ï {ÖM À’îÀgœ,¸ž«ZjTµä[i'3^X°ú…bžýžVçŒÍFÕ©`8kípÈBÜ;Ò©ÒnŒÖóà{ßè¾£‚Â|öÕôÜçûËv.€‘V=Ê'ïa'üûÌàǽû~`èeŸ8@oŸËhù̯A¶äœ½wáßózïä?G¾nÌZ¾­,TX/AlIE¤%J”(Q⥠Æëw0­çWZhs¬¼¾uõí’ L²0°L¼lV¾ç©—ÐgŠ ©9Æy‰ÀÒsŸÓ _ÚH£KlAn…S䆛ðÂ#‹¯¸c顇é÷ìåßOÿá7íyÓØTÅÀ¼®Ë:T"Íǰãf-pAòÅx¢¥Ú¼ À3AMT0˜ +å q• BÆÇ(°ˆaš&dZd,%šÉ‹ G¾+ö‰]¢×êÙ €ÄëÍe-5]ŸD@˜Õªº`!k%¤‡ {ÆË`Ø/Þù½¿tü{ýx–À ¸ð8?\¸³º€â™ €NÐ'°TЉ}³ sCùà(uH1EÌ…æ2cÊÀ2³¶d¤6Ô) †-„Ê8ÿÚ¦XÎØf«Ì GÔ“Y*6«À *…ýfÚ¿f¾4w)ž¸ w!QTSð„~æç>})éw%qd™ðý ããsC-¼0ýÈÜt?âZA È/ øŽÀ"fsÉX ×Òäcrl‰×kñzj5ŽX‰-w ô0 ÏP>U{ð U©t ÐôoÕF¿9Ô„7¦Æß„¨hé.í¥¦‚þbÕ‚…p47*p){EU]Qå[ªˆ@6Çæ³ XmÂåÊhÜ4èÆÓ&k±Ê!Vv¬ó©—1Òô®šV~¡æq" }õÊ[fõ»Àƒ’6 Ó9¯›ÏdOý²Éšˆ¯ûÞ,?èÝù°|²ØÍ´–ÖŽÛ¥¬2®ew ìÇݲwÊN\¬~7Ó^‘À²6ö<4@`Y¦É ºWHp§Ndá, ¦¡z•jWÓË­Ëgî糯`z¥릢"ÈB()@§&‚Ÿ:õM?~ê†nÆã³_{øž—Íì»7¿"¹SÌ»$q ±–sÝ=ý_ˆ½6ßø"b Iª8¦ æ!‰3„^&@ Æ€8Ð2] ‰Å…¹õ%2ÚûÌ^oQµL±‰CÞ¯7±Wﯣ`A¶I®Á —ÍKótgfP ïê~@‰ŒXµb)4Ò„¾IL ³ÜACçUÉÇG§ËIÎD#2’bé#Øá2°¤=‡*èQDL©Ö>ÿØŸ]£ÍEOæYì¯À*$èudš‰‡¸›5áU^¶ô~g6Ið?¿˜ï”­Àª› Í©‹_œúÔÝ눵t¬"Ñ‘œäH j8…P1•’ƒÅƒå9KEYþmÞ?±=«‰½¿×Ê\é@¨ŽaÁ'-‹§X,?NðŒñ€¯ŠV a), ]³Ê\ao)1†Àš5]tR­Ð¼^GU¼>ÝûÚU6Í<>u/`LãÉ­m3A/= Àô®Ê§~Y·_À¦^&޾‡Ú¼,,5š–°å( ¬‡]Ê_•q-»e?î”ý¸ Pv⪠,½2ÕqßÈ.ô …œÀ˜AŸ5–ÀrH[ :,ßòâc&kZkÀ~Èjwˆ£ïZ¾ÄM@”Xš¦únÒ¸®›±fXaw@tˆU)N×$ŽU`±€ô»BNø€l0 =E B–Ó ÍIZ˜ `I@Kw` _v[×!°Žø{¨ ×D ÀŒ˜ø¶ãoø•c?øc§Þ3É'4L;-°-Ü–6+¦Mû<ŸÎLx~~¼¤|aælk…°vò9­SËX !,ïf˜&U‘’Ž}ý ,€†+Áʸ«ú§¯v&¹¼ëJ§ñPõ£ þh¹=tù™Ÿ:óÿñ¹OH­KNFíU‰¨Ìô}p±’’¢¸Þƒ•+°¸÷½æ‡N~ ÅŸµ³~ZÙ¥(טP0ÙªÐÆE5Éû:9Ò™;o<ãUx ­v‡7œÛ"[ç>gJˆE¿ƒ\\š«Û8Ÿ:Û©Yˆ»KÉp.Û¸À E9•ŸŸ5b!ŒxAßd‚£ÑžÉÆÑº64íWd"†¥¡kÖìjNŽS`Íú5=Öm¤=\úÅùÑ=šåÆ%’\9OŸÛ#ßú—·*7}¶:C6`!„U’z·šåÐgð©{ÆþÊ÷½`zñÈ®‰ç z,˜âS/ó^öC+¨œú«/Ÿ<°1˜t¶„¨n<€ù&¾n:çQLá\eˆûK»µ a‰%J”(q3Ákw€û¦sÁt//—w^ø›»?º†R¨†X*DHÿ]ÞB˜oaé Ó½„ÙWç›n?gÒEK`Í/î÷M²S uyy IDAT:l‰›€ˆ¼6Lª¶¡Œ•š‡3%gcÜ~/3¸D­uÂ ŘÆPÅCÄB~…Ìë¥Z–ôIX .Œ8€xé –#µÿ`é¦=ÆÀÒŽÀŒæéC ±’ˆÚL2/mðEú¯ûi‚GbÄaakž²á8ºH`Y–0~¿ÁϵoÜ?sàZÜ¢eQIˈuXNvEEÍÖ\r’Ì0CÆÃÑ$£•á2°œ…P¥9¸¾Ôm®N¸…[Vu=é׉–!3e;Ó»rcæL»ÙÞ–(»:×—;Í£µÉÑåŠÂf»3–JY´‰­trMœ7«Ý€ùc—^=OxFa+Ò¾Ôùÿ®›gÄ¡¯æ³¯1‹àwò»³§~0`b… „~“ˆÀâ>øFìðëB©ÀÚq(i«%J”(Qb B±ÿ-€Q—þÇvlÞ$ P=æO2?Ÿ+²A–é]1ñõ,„į-ºý¼žûü²äã¬r0¥‹ðf†‘çINø³.LX½Ã4›bÒ‡PmÓ­A¶^„¶ Y0nõJa"±pÊÈjó‡nü{’íÀzšê^€0VIÑ«{½‰};aCs†@‰KÌpÆ+Xã\Ï5„Ž3_gºyŸÀ¢ÿÚP§HNhªG1kRÃðy^’–À²|P;M™úÔÕ™§ÿÒça™5ÃÕã Wzªb¯ôÆ\Ÿš;÷¡àÿkóÏ1H`ÝÈú„Ú˜¬¨Õ ¹Úù-§ëš¾[0?™†ëµ”ðk¥ ®üjáŽ#1dN¹Fä£Qó‡¯:_… ×dÏ,Vô3zõñß`ükŸpå¥Q—ºM"­±C#¹H\IºÎa+Zj?!ÂìiùÜ¥™'ži÷äDe˜¹°Ñ’b q–ÀšM÷¿-zÍÝÞX~œp<84zff£ 3~*!9Û¤eÃ]Å="¹†p : @ùq#Kxzx¨aö®õ:éŸÇ<¸ì¹Aã“s:|“ðl{6f!ü·'¿õ—Žïñ‰™-iÌÊ0½+Ù—^žýÏêÊÇMïŠû^7ŸÀ&Çû |ê>¦ùŒný2âÈ{Æ¢ýkÚŠW‡Þ¾ÉƬ%µãPÈÀÚU ÖùóçouJlÊ~Ü(ûq ìĵ€ù“âÀÛ#_ø}˜1> Í¼4Ê•V…€*V9È*Lº(Ïü'E¯U°` lÌ“½ëDîL²HÏŽ¦{4ÇÖéräW^‹p5Kžû­ì©ÿW/mYRÆKe3c„Êÿ `7cÕ÷)cxÊ«² Ž–0Nµ´¸ìö±VÑ„Uãa=]³„|±7÷Å©OfÕ€)/‚õ˜5мT pÝΆEXIžœ-Àò ¬¶îÀ:›ê#¶Vâ›b™©a«j+6Ñ|µ^8´€f™f}V%2ù–‹XAA çb¼ˆ2kŠ%M+°¬…0ç>\¤ºd$#Ò¶œÃ†CÜ‘+°òP§º®èXzy̹֒’¶å}(ÃÀãÑ—-]Ã'[—ŠZ׳1–T @ÊcÅS:/û §jÝGJd®g‡!BØ(´\àÄݤ«3éð´_¤_ >9}åš‘<æ9jØÁS E¨W¨è®µÑ$ËœF,ÓúzÜd5n€®‰h‘eöŒu³ŠT<\7“€â @W÷™»X‘JQЦ¸ ¨ ©ç%KÅ[øuSc|gc, ÀÌBÜ1^`*Èé*2ú±,ðÆÉBÎy‚ë+ñlµÍ"œwxtu§ £¤yn‰ãw§ÀÚ¢wÙʯü)°n"Œ|þ÷L÷˜uécökmOà+X¬z^Ý$ ¦w…S+/< ¾÷”ª¾™$,Ó»¦O«ëÀ;ö þËÿw eS¯Àª‡ùž×®%ë&c‡_/E8Þj—)°xà[Ý„[€²wÊ~Ü(;q‡dá¬éœWW?½ðEuù!XSÒ¦ §Œ¦³óÀ»çŸ1R7ŸÑ7>kº—Á¸wê{øÁñU±ûè,ÝKHx•ÿ² ùµ–IM²ÀÈuTÎ*±È D®:7m[ïÍHÜʤW­êlfSe\ÁUátÁ¸è¢j¨ŠÜæIK¨X÷išÉ àÙùçL'éPhz36%2Àµ`l@E% k#Ty”R-u1^ó© ¬š|î¥Õâ´„M2Y lª ç XAåfþŽÀò{2h±œÀR\¢ À×s½6m Ÿ{E—™Ã° k5J´a¹+V\Cóªä8(› >šÕ6ù4¾«ò“Ö´ÕýtØùÐ…G\ø òJVX}Q¸óíC~ —‰®9€&ú /g!üÜ >ÿØ™ÆÜèOfPEqN±%°RrkjN¶µÆ¬†%°&ý>ߤØ0å¾!5™1áõ—¿cñ•oh}Õ¼h®ˆäòUÿ²40dÀL žViäõ¤ T5ºÓcÄ´—*»Xç‡àbÝç’ .HÏk!äÆÀU@ XÌb €(üåq·0O*÷Lîp ìj¯m„„a¶˜ ™øF½"«¸*fÄák/ûQVÄ,§À*Zž 9Y[C`?”ówl‹Bµ¶ zî ¦ý<ó'ý~ Ü× K7Ÿ5Y“Eû– ß´`Ž´âûß¾Þ(+V9äÝõ¿€¦{Ť”ä˳¿)Ÿy?d›Õޱúqx5ÿ¾ï‡¾Æ½6G¾ŽU®¼‘›’ÀÚqØe¼U‰%J”(q+!Bq×7L]ú˜ÉZòìo©‹¢ç¶?oü¥ÑØp+ÎòÃï ®þŒbÑ>ó€8øÎU·F„)ªLÀZ.ýX¦w¥˜F<ÜÂV^ÿ êXãTo·5ò8 ®ÞP,É2Tk¦ù´1«BÓH=¾)ES‘J\õÆa¬yw,¾òÝÝo˜‰*°9Íöú–ÀR>€F:\?.5¤.ô3°2A‰Zà ,n$Z’‰ê²‘¥‹hAV/®‰€âÒÈ‹ Ë·ÜŸiæî^aEd‘¬Ã&ˆwmX;…©Cµ®öÚp¥ô ÆN˜5[ö‹~ˆ;€ŽLpD<Ä ÇBÀ–+´·wÿ· ¿ü¾Ë¿àŠ$ö%ûLâùìš#°æ½k®^€cÒ¦ˆá"˱-ÄNvDÛ-#—!°þdéoª~ô¡¹/9XfÂ:ËX€ kˆe€î«ÀR¶:u>ž0¡¦ß´ïŽ÷ïý‰»_@‹ ¡e!IŠå1o²PMï+'^þOŽåýSǦ)Ä=0…Ë’¢ä¥d @Íä ,Êtפ\XËU6\Jº°2½|yZÒVêäZðT@ hf]X ¡(Ô›ãvx™îñ|¸Ø]ÀeàV>^›} ñ–Wg¯]vEX`‹°*¹"¸q>Á‘w;.QÙAf—,]ÖèêÄïœÂ;˜©0Z]üqìï±h¸yþèù/à{^¿ê6øÔ½À±ÿ-ióøä)À˜æÓY0é>ûjqôl›‚bŽ‹ö¯å@n2vðeñRÅnÍÀ*Q¢D‰%n øÔ},˜„ÎLë9úF]ý}ØhBÀÄsX4üªœOÞ €rUמjÁëw ßi?€Ï¾†S|âÄØå™?ÁüI¨žIÆ6tëlþI—–¿9P×>™~á‡ås¿sKö¾,~·ÁÀ—7fo~eã­''öNó>eSTK­‘ Á<„º&°&“}ï ß@!# IUß{Ç+)éÆwV”X—óóŸþÕsŸ¸Úí×w£*„"·Fº @çÙÒ#Bxz*£4(?©2P9UUԪ ™T_ÍšÝÌv(%GØ|Ÿ*j°– k· ¬>¯z-nÐ|á15ffdFä?+Ãe`H?ŵGŽÎ"Ç‚?ÑÑjóIWVZ:è-ú7蛞Õʵe]e”#¿’Ú|[õ’#‘çýís½w)¸Š;±_ìÖñ•ªlèöèO¤Àò\5LˆS`IÐÜ7€ù¤½w[#ŽÔ"®Èyø^Ü2bf¤ áPVÀĤß>Ÿ j°º0Éø"SHFg†(°b‘Į́%Õ0ÉêD`¥–®ÊB›÷ï» ¬¼I Y×µ')t.Ln]üž ¨ EÖ°…%¸cG–;9®¸œ.À²À„õÉï?ñÎz÷[—[±¢k:Þ€h„ÀrÙUœ(°<«­ã> &Ábäü–+°¦¼1NáÓ½hÒ ÷ð½oÀ}-¼ªn<¥oü­^|`ôýÊ`“÷û¾ޘ𲵀M½ vªªî{'¿›¹ÆcCF¶%µã°[ ¬Ó§Oßê&”Ø”ý¸;Pöã.@Ù‰ëÅ«[BÇt/éæl4Ä]_? «À&°Xå@^Oz5«Ø‰lúÓÍgLïšIðªÞÉïò_ý3âè×/·úhíÂ!8Ö­²ê¹ÏBg‚²ÛEªÈ_ïÍøÇßô¾ïØÕf½"µ¬ýgPnŽóõ Á9ŒÁê;÷¾kÒ«P\æ²”B–M^h pYTB®L?õøÔgεçÝ’äÉÆc ¼5ບ70$qš ‡ ,ÏxÚª®™Š`³x¦DÎ[õh°Í¥,ðG<ç ú3ÛÁc÷¬…p°ÙI™ïXƒUç³6, ãCð±)Ô|}B¡*„]•* lû«(°­Ï.®.Їž qÏâŠZÛU ×׳% g@ä8ÆÍÑvóI—üwäGSaŸÝ.Ê¸Š R•]6†ÀÓ"KaPòzÊ»A€i/Ô€OfŸûñö/þëóàÖþüÜÅŸ;óÑß}á î›E>àN»“S<£ ,«>Ë-„Ì› B˜|§b|¡ KSõÉÚ`i?R ªB‘Me©Þ¦E˜)ò!Ÿ/ôŠ«hf=X–3-ÐaDÞ1-„ö&ª"ÐÖ=8ÖàLœ€ÔaDˆÜÐK(pµkAÍÔ$•€h¤Æ‚è+°F3°¬¤‘ùq/ŒÂ)°¶&ÄýìãOæ ÛÁyÐ6¦ý^Òq3Â;úwÈç*aõ»FŸ FÁÂYíçÞ±áfp[Êp-ö20&[ðÿ³÷æa’\w•è¹KDäZYYKwõV­Þ´uk_-Y6ò†,¼Á30  ðöŒ?}À˜Ç2€0Æö{̘7,fŒ±<ì¶ñXmËF»Z–ZR«÷¥ºkÏ-–{ß¿ˆ›‘™‘YUÝÕ]Y©8_RVdÄÍq#"óž8çüÌÏ•u„”ÀJq‰pÇ] ¤XGHÇq0Žã ÄÙ£0Š$z,?û4V˜¥+‡Õ¹Gíû;½ð” ™GG^5¢Çªx¡Df ±ÂeP^pìKYKt*tVO&¾«½];þ± ,]9B]Ú]ùoë>E¼øŒ¦mç}1ŽÙCæuÁ:Ÿ§Ü[s¥w¹ßÿþŽÄw‹1 aÉr\1%Q Í}¥”ò>¤ÿ2ùßæ} 0R!“3wVšE‹.`R` eS¶=qGg?õâƒÿ:uT›ñH5çG>»è-“VF\Ñ4 !qÅs?€øš6…×Y·B!îaIÇ=çuñü’L©Êxðû‹ô8Yáð¢P¨SÌA@-;  *›š¯§Ž)?õ¸ÿLsG23öÃÂgäJëŒ!SDvH‹ ΋èË Ù"¤æ‘\9ÞrZÒ¡S"ZTxÀ¨U NÇ­æYÍÀÕL£À‹2°æIQÅ‹+°|\ ÀÖöYpRŸ X»…ÀïNüûgî»mÞBË K}çêú”÷Ü«…u} ~Å?ò×H’_Â` &(Ùj™àå}ÔÌSˆ|½‹ÁJêpå( !¬‘+˜úvøJ¹”yS`w–ÁÆL“ÀÊËó³Ê7n¾üΉ‰ïc©@C©” «ûùÄ2dc¶H¯9Ïwtóݸ<‡rйã§Jþ€ÇÁaw ‰(è¥ðd´ ì„Ö¨lÉÀÊJ€æÙÃ=²3QƒÑ̶ÕBhG»3$²T2òå…0My[Måµ/êš>8Á“̘š«J°‘‹¡d`Q4qŸ=ùõÇJ_ÿïõÏw*°æ½ö+“‰^Q DÙa‚xyÄš®ž˜½.Óþ¬Zx5:ÅÑ]€+xpÍBîþ$'¬KyQ%> /SV€g7•\dÙ ¢"ƒÓõjàTY wà én±J*¢´ˆÅ#ñ Õ(`žMg õJ3Eг¶â˜ä+ŒWœô¡ê¢`ƒ3DBeµ¸E#`ª¶ˆXˆû¢ª#:…HªFh³:ÈÜTÞ`&{€Ö –=‡ËÉB¹Ç%ϳ*ö ’Š öÀ¶L3K1ßI`EW“äí_„YiE}³KË2ËCh† pU·!#%™µyd`©™§uõXË"í«…—Ɔö42níýyû¦ß²öý¹a™÷òî-¡‹pþàò7Ñ /ªéÇá΀•X).<úÍúX6™"EŠ)R¬#D%u4Œ­Ï_ÄRtõDpòËôÏîà/êÊzΩ+G°LrÂ:/]-/{Üýc‰»_m~¥ØxçÒ;ÕÓBH?¸yq°F ¬…ƒ@ŸÑ#¨k}¡™¸¤;Ì6+ÇælSs”·Ï‡Àê Θ Ê)EvÂ,)°Dà1€˲q˜Àò›–‹Ë13vž¢ÒoåxÁ;€'•B -„º @(ËÑY–°1ÊÛ³KñMŒKq`bæÊ-3{·çÊá®V«fÊFx "KÕñÚ,éæ ¸æÊWŠXÂͨèf ‘Ã¥èRõÌõ“™'ÎüçÏ·…:5«2 Jm—°(ÙÇçç§•žEt5‰˜ð#ƒö¤ssä©)ª(§˜¢â‰„ê,•ˆ–I=Ÿõ«$ûÊKfNe€d¦Ž,ãž3PZ“€ËP–ÄÃúQdU=R!åX“<Ò–;•˜Ç" À³³§8µa3ꫤ¢®‹GBB؈²Õ8<´y7$Zb†ÂKèt@WÙ}®Ž ¡¸ãœ¨Í!f!¬Ä8и!1R) Š–Ë2çªá ÜÍNõùÙ³!ßiÙë ²Ðz¹9e]^þ†» Íg-…Õ°©ÞОÉ8†À Xa‡ÛŠNÐe¸ZX˜g#&øZ[èÆYÿ…?AP‡òÂÅ—¡\–ÛĬÝèJ+ ® x~ºk±œ}D/¾œ*°R¬>LuàÀµîBŠU@:Žƒté ® ±Z~á¯=o±ìöį\5ýxpôú§gèê JX·êr!s|ëyùšÞjD–`™qf—å®{—cjdÙ €éÚièÁXlèr¬‘K7¦aÂéÝ!°D¤Ð‰g‡Ÿ÷Å8’ÉQhwVI¼Ð*#È|Ë0›¥xϲ)ð óìŒjÎó4i5/¦C"õŠ™¯û£žö^ ½$‹I5V ”}×ð5¯ZxÃ]¥klÈ„3ÀM1=É9SLkÙð3Û¾ç?íyûæ|¸Ž™H3Ýr¥VQ8´ïÓnWå—-xnXsÐË™.Gæp!ºÄá7º¤›ºú—Ÿ·ÿêá³Gã …þÓKàÙCN@ Ý¿8½?tJߨ¨Œ«¢ÚX5åþêÁ¿¹ÿ…ÏWP@ bT\å2"°*1+jÁ¯R4˜!•ìʰ8ˆ„u ™’–Þ|k=J*´!£º&Ý ,žç-¤ÉÑÊl¸³lQ6€Cõ)%oĬi-¥À¢À/ÒþÈÀ`EB[F ,²J;n8õÑ~”<ø]ƒf¹R'uÂ9lð¯‹Ï#4VX €’í$/×â¶ÂU×ÌÝ~}~†«›<9X¸(_–).+ÊãXG˜œ\n%¦ýŒté8ÒA\"ЦÀ2 “ž‘;\Ïœ1€©shw&8÷h¬Ù¥SZ{ sùÈõ|ø´z©º‚Û,3¦ëSº~†ì„-¯À‡ö`j€¾¤¿,ü ” ™cÙM˜?HdÖ@˜_α™ð…\ŒÒÍùÙœOÖr@©@,hòPäýÑÜ£Y½#°Þ½ýúwãúøæTŽ`BšÐT` ²½³˜°ÕÛÑÙ KK ^ ëÖñm·Ž‡IÕ)¯Ÿ»SAmŸìÜ¥àžL«âÃ8ËÚXTÀ°“ã® €Ù @*Ë ¤–nÅwI‹” ŠUœ¢2s³e ÑmÂì*µÛh8ZŸšÕBÛBÜ)Ñ܆]²2h@IoZœ ×äA ªÚ…Nózñxù¥ÙË8*[‰•/dJhPZ“£ª#òq…—®‘\ÈX£þDU9þÚ°è¹&'ëdu~Ènò&0£½yÐ –*R`¹:S² [¬ãµÙ½åêb@À‚©zå›S‡žógÍûj7 ¡Žv_…§±D”åDú>’²™¸"EX†ËçïÕZÿ¿Þ_*»tÐ|szLs7ks.:æÈLYw–öþ)ž8œy^á-Íœ/^îÐÒUZYLbü®M»ïÂnZy'ß6—^Žjh º~–áX¥ÅÝ…ËßP2fÕJ^~ÀlW`Y‘10QñÄ”ÔÜÍÈ–*„9«E1ʴЀd«s›œœ”Ó¶ßr¿V ¥’š~œþTÓO`ÎÈ…„¯¯"XvSóQÖ2$`jöYe‡9ô© Àc=vß}÷ 'þAT’x. ¦fŸiY’Xžyæ™ûï¿ïÞ½o}úÓŸ¾í¶Û>ò‘”Ëår¹ü‘|äÖ[oýÌg>³ê}X׈ÙÖ²)R¤H‘"Å \„á­í-š¯ÚÎϺ~Z±Ì¸!•¸!° “|ô&挬ù£K^¾Flz…mQJ ÕÙ‡© Ëo™€à’>/4 ,æ”hw@,„TMo÷Ü »‡VçÙ{^È‹G`i€#°¸™Õ“f§gõÃ-NÙY箃X 8";¡Å]AZÃ®ŽØå^‘ØŽÍ%C3Ý2;Ï£yr§BÍÌü¹j™â† ,Å‹–MGµÂ*$lòi.*—Ìw#²@Y EΖŒŒc¼5É«‘TžÏd·SU¸NÐM…r‘ÈÛHeòÀ4ó-á¶p:ASÑÓBH.× Ùg’ùäy€†mh¨^^–9Ð \ù±|w‚ ƪŠEL ŠåfJ\7ºI„ ¬„Ýœ‰7ϵo ¯˜+gYP\ó€(?’hqˆR«êgVÏ8^‹ö+¨+@¹²õ÷·àòḅ°9ôq¯¢Žb³ÈþIäÔF6î,Œo‰‡Ci@IQù ÔÈ™n8UD.Ùa!$.øUCW8ek–A”õzД¼Í7B‹f[;’1Ú rŒ®Te¬BcÅ÷Ÿ n2ÔA`9ÑA¶’˜²“ÉäˆA&F©³X'9yW+ €ÍHÕ–ÖîÀäî›^2Ϭ¡¥¶º¤ˆb°–ÎqWÓOBy¬°=Šéí9ôë—T˜÷¥/}éÞ{ï/¹÷Þ{¿øÅ/^Ê>ô?­—€ýû÷¯uR¬Òq ¤ã8HqÅ µ?=5¥)¡ÇC#ú-Ï–b¹mô›å'Á¤Øö}¨–¾ðAdùI±í1ñzº1@/ö_úÓàøß๭˜ÌãÒç¸ce„|PªJHÑÈýÄö×Å^È8–xW+‹œ8Rµæ7D`Ѭ¾×Gß9±óã;Þ¿£²1™¯ÙÜLB­qåÁïÍñßÝξ+¹4C&žhùV¤‡êT¨™™?o˪ˆû6R`Õy€ [h  xäË ›y6¸š­WIÎãièáµLòݤ÷ŠX~f!.ÑjËÀ‚åÈq*î»ps¢uÐM¦Uƒ7Xµ«^ ìMÖÌP< šEgL°¸ ²¯ÒZ1Çœg‡Öd~tÃÌž­sW;\r&I»¹è7X‡Ô‘ß{áË~øÑoœy€KÁÖ2" çÝ"Û)ׂì“ìJÀ"[@TθOVgH;.ê bV¤À""‰ ~`×ßüêÞq‹YØ"R„e"‹ê¼Ç#ðÃ6y ƒ ’¬‹B[&2CÑ"Ÿ¦¶\s&˜ó# S¥‚¦(L¬pÒgsNŽÑ X±øw2; €ù–ìµ9ÆB¸aD×Sí«±U qß¿?q‘crí¹í-@9ˆ„¼>ËnÆòXjú1büv–Û€Ù¥õhúº¤!îÏ<óÌu×]_ríµ×>ûì³—²ýOƒ×5î¸ã޵îBŠU@:Žƒté ®bìV–Ù@Eñ˜UС«ëw-¥n G/ïÓî,/îÀGn¸À.­Ú fÆèúYÄ‚f2n®ò/Š+8õ5ø‹bâ®PçA7ÈBXfÖ˜ÐÞ´vIv^ X·û¯²[f22ŽeY@$ª|vk¸2W2€«‰À’K4Mk‰Àúß§^ü þ9]ƒ‡èúÑ€ÖžÝM]÷™œõ%!"‹ëö)·ñµU!ÌK:Ùˆ¢©Ãp(fIm¨°“ÂÏø–{ºVWÐÌæÜŠšµ‚Lrc¼ ãB»sÁ‘¿À²›øèM­oMƒ ›Œ3»¤ÓÚ½À¢ý€«²“oÝrõ*6øæW]¾¸qÓ¦‹eH¡Xk[·L,ãŠ|O !T$”{5å.è\(~±XS¥HvÔ¥;Æ]‰\—µ:>×(°:ª4~·jvvǯ=uG‰ç±!¾Uà0›XÂzà«05IX¬Ÿ?ݘ‡ŒB|¢~:*KŒ/ó--=7²~{öÅç‡f®ó^uÛbLwóRe*F`E‡‚‡¤¬1‘ @Nå)ÜÝ@›Trá¸cÃαLþÁÓ/=ÔqXÊNd'Ô­ƒkqÉ Ö‘:ßtÌ1Q[8ÄI!î• €¹Ž¶ˆ€ŠîQ1ʶ2Ø* ^‘Nh!9§#¹Kn=g}gÀY¿iH¬¨PÓ×öéqê“M6Ê(°thÿLžÒ6OuÍšáåD`u(°TySv°í–¶ ;9T ¤ÇÈ6¨8¸šªÏ#Rì-­VF‚52–Ê•‡”¿A¿îÌÜÜmj}öÆX&ÿó{Þœø–Ѧ-™ÂN‡¥-™Àoìþá•ög½@‡V%^u‚9cà¶nÌÀ¯¶=LŠCM?­xy/D–ïƒ;Æ®¼”ý\-ôE¶ÿrÀ’pÿý÷ÇeÛ˜›3eZÝñ×sssH|«Z˜Ÿ7gëy/ÒÒÒÒÒÒú¶…fVôn£Q÷ÎÿÎjož¶" ácÏžHl¡ö"ö£8ùÅcjw†Ùe>|õ7Ÿ @y@2@Í<} 8ùåUìƒ^|‘–¨¹ï´µ@Xß~ü Ø#<òµ‹.z Ã/Ϙ4ñUéÃñƒ/Þ4¶us~è"íÅ„qÆ7ÉÑø[ÌoNªýJuɽ YëìÂ,€… ™ˆd3IÇâÔéÓÆ7—Ø‚£!.ËŽ/s/H3…KÕ|Ëd`1oak~è¾]¯Ý~¼¨Ü¡¶\n[Ÿ:JÙçÌÎ4æ 0Š®…Z ÃZ¬…\òÄi»ñ•“ÏÕ‚&u¬1ý?~û'~ë#/ümY¯×B –ôpO°¢û¼.š½#(ÌÍÍ=ùÔSÊr¡Ù°“Û¿F$Ћ£V€æq^þb“«ÒnX×v}Ý—± I6îß¿_€ð´ê‹JÐm„øÝó×Ð\}ýÁ]M ,ÿ ’çTü"O"'ÙŽgØÌ‡¸çháOÕ+Ç监=§ç¦ÐÅûWB±8oÂtCùû÷ï×,Vâe´{ÜÍÚœ8pàe`™-,ãÅÚk§·H]hsÎ ®HÈ&9gcÑ`:.~1"ÌtQÐ>Æ+ººß>yÍûwÝ1{èè*Þåœè4¼½?m-Ì›At=öù½zµZ „.²}½O?£œ @«êñ-¸gþ¹/_ó­©kŦ».¼÷ß"Qƒ‹¦;BþV°q¬gí0ÖÞøÆŸzê©7š%§Nºá†Nž\"r¬³©ÆgÿyæÉë>ôŒo,Ë%×_/Ø¿jx¤ã8HÇqâ… 8õ/Á‘/ˆ‰×=ÙxËÿøÊ,€zÕÜ5?4³Šr÷ûXn‹ûè‡À¥}Óoá¢Uò^ÅAô~FÍ<Åœݘß-&ßaÞÒ /ªÙg ƒàÔ×À-ûú_éñ„vEÿÏàô×0»d]ÿ+MýrÝG~ܲoþm€ù/NÙ/&ß!&¾{U>·ß°î.ÆÿpèSõâ¦ømøå%×ÿô‹ßx´ôµí³×ýòî»ÿà…yzø›´ü-µïËž¾ìYxÓÍ…çü§ÕÿÏ7—¯ÙÑ àŸŽ?÷×Îÿ¤×÷ç>8‘+,§Ÿ=ø¹3åƒrógçÇßúë#OýSîKFfv~lÏ&nþÛÿá…ò£ôúÎÊ›_vO)?uËüëžÆ¿Õ†Nÿˆþwÿ0ûðéòs×ͽæÉÒƒÜÍ|bóÏòÅŸ(}À®™›^,? ÀYo§ÞÙx÷›¶\ÀìþÄÌ•w®ûœõ—Ôþ晽ìCåÇE=ÿÑüÏüæ_Nm,Ëvgÿáá…ÚëPå³?ªßû]ã“¿zð‹ÇËO¸vîŽÓêÌéòó¦·¢–ÿÃmÿáLmñ£•sÏùĦ_ðìÌ™ß>ß)æ[.¼ÿ?×ÿPÔóв•«g_õìp¨Óº§þŽôö7ŠS?¦ï½µµ¤tBvaÃïîhêIÿËÁ³þ/¾øßJÇßå~ÿ7_þ'‡úvñ«[göýÇ=ß7Û¨Wo,“ÿÐáÿ§^H[m™Ùw¼üôU³ßõÁÝoˆúÓ3§ÿ ë}Ù‹e·ÐLÓûÍ¡_²Ÿ:óëàêw‡?DÁ¶‹ñç}ºV< ³0þ{;ÞO ?øò'…s¼‘WNÈK2Ï&¢ÀªßûîÉë?wøñ¯æÿ.Þ“]37þâž·øéã¿KqïróÕ¡SWÍ~׿ ›–˜cøÿîPùñæïüɯé6÷ñ÷];2µÆþÓ‡þ?ñg>œ¹o²ÐKjôß}ë[ů ÍnûÍÝ÷öXíBûÓOwÔàè—‚“ÿ,¶~¯Øœ¬_ëø/ÿ•:ó`ïïY÷Ñ!¨Û7þz,p‘qñœ úM¦cXÎú{÷î}òÉ'ãKžzê©«¯^M%ö€­Ã(µå îD).é8Òq¤ƒx!è¬B¸Ýû;@3kH{ Á©¯èú)@³Ì†‹Ç^aU‘X¤{jsó±â.±í1ù^ºÊ ¦¾¹Zª^Ƶ;G‘aS‚(-¾ìIëëîb4Ör=5ÿÐ*8õ5ÿ¹?`Qß–] )Å¥‚xGu¿DP2TÀ|5VpµÜýÆM—ÇÃìuOË‘áeë+ˆ’1Vç„Ù8³xGÝ:;–Ÿ6ñYžöÈtfqI,Õ"1&q)ÇíOŽ}ä“c!šÉ‹Êóù“¥-÷„7  TÙ ÅëùéJn ˜~©rÀñ›ÿæóÛ?lðŸøÄ'¾õ­oýñÿñ¥ìCÿ£I`­i7R¤H‘"EŠAE¨Àò™ÅlÏÀÇ_ŲYv“® N~Þ·¶ý\2c˜5$'ßÙm^ºŠÙ%Ý8§+GX~ûù}Ž®žPsÏ"”YiV˜äÃ{Õ¹ÇôÂ!]>çüŒ®À2ã|ü6Ú„å6L×NA«‹ªhK±L>(žæÞ2&Ï©£`H†³z*™­44Þå×k.šü+¨!`è ÑÁRµe`%"¼•“6ñY íQz·ÃEgÔxÑ¡p"ºÁ0YBS8TD`Å’¿çÔ€¬Î6*cµâãA;^›ƵÕî3¡t”“Mµlt†ìŠQôXÕ"˜jXû2°ÃŠ{\iXMÑ!USí!îùôòm·”·eÇÛ…NÑ+t ÁêrÜy—ó¦¢e#JŒj(Ÿè¼6^Ɇ€ª ÆX׎LÈ#%?7`raï)y¼áT¼Ö!#8¼+ÕPAxºî<¬!×J¼9oçš!–šV«de;x`kß×ÒËðˆåQ6åÀ1%X¢Yãµú±ê¼÷¢öb‘ ü‰íïî™oÅøÈ Ô¹ÇÏûƒÔôãÁÑ‚£¨3ûðâ.–™ Szî;ºzœ9#òò÷[×þGJŠ‘eö0”«gÏûsûëîb”Ѭž/ÓBH ,(o(YÑiF?Võ ,+*s¶.¿ŸÆÆ%;,„F ÓÉmk6‘#B–-$íEÃZDTθÍGs&•ÛC«Én‘-°`mð[¤š§üiÕ E E€È¥Uˆì~›rE£èAûlÓÌJËXØÈý'•E\˜fŠv¤(²fC‡ ’;5T»…X; #Ù["¢*„AGa¾§¦OyÌPÎk'v…ÇDK5ß÷”B¤ÞjvÄ ¹ˆ*WÊÝöÆnLñÚx;éYá˜&¨MˆçA#ðÐÁÞv1Îk¬eÞ΀°#*TJ–ƒ•Ƶ` õÍŽ¼Ÿ,sx¢Žˆu¹{¢6  Pûá·ÄUŠ„¸©Ðî+k,„ýÑŸµ½£ªÅuí´®¡?)ÄÙý®À“,;­º‰µ·€Ù«âí¥Ä꟦: æÝË.»ì _øÂüüüüüü¾ð…íÛÏóàc°h«&Ž9²Ö]H± HÇq0Žã Ä A,K˜ÈœÀ²›°ÒU´Þ›üsõ°ŠƒÈì2½‰Ü|=X3Oœ·‹P×Nà#׋Mo›ÞÀGnd™qº~V×OàîàÃûÚ~ÎsÅ.B¿ºô:}€uw1šúwB'p ¶ˆØ š«—íðñsÄ_-A`ÒdÒ[~? $;,#&TKt#™˜…°(RÐxð4×.Ê2€¹©*ŸiÖi*°$bÞ:bd5±À†µÇÙBKÈ 8ƒYt@„µéäI-¥øh&o=B[P-3²ŒnºYD2Zõ!lÉ94Wd9$Ë[xX¤E¾ËY¿òÂܹSÕfu<Òe’Ø+Dж¶ ¬9·ñ™…/x¬  ›ŸB¬$+°ˆÓ¡ä,?IàÕ¥+LÌ]±½X¦ÍÙ`‹+¦É­‚A/ðOÕ¿Ù·¶‹Ñkã1¢-ÿ ­¹T%; ÀŽ(WX·+ÕgèE®¤Ãl¾UÀYs§¼y9•œõÆ[XË’@^l§ªÙëµÅßQÝ9ºv ü*” ‘H¨MÑo ahçï)°ÂBØ]¸ À¢œ…å‚)ZˆX‘ 9ˆ1ÍÛ¼œYÄ ¬pµ¼; À!öD75D¥•á’rП~ÛûäïøR³Q ;ïðèB !Z,„sü 7?]+L(ʦ’ˆ w5íS4X?U–sOœ;ëC!)ÈüUãÛE½ðc¯At6jé!vØ ì¸…°u¬ëÚ±2 à6í]m£ˆ¸ªM™&Õit•*â:/؇‰Ÿ” Žšɲ±o~€/Óþ€!–ÌÄOf«?OyiÍî›ÝÕ' ¬µ¼£jEYQD`éÆ9Äòû¼t€àØß«³ÿÚùn¨À’ƒ Àê ž5E†·,þ*EŠ)R¤è#ð±[‚“_®}cCfcºÆÇ34;â/îR /]lêô' IDATÿàêC´{U’ÀøÈõÁ© N~%\ÔÅÖ»é¥öÔÙoࣷ$;&‚†nLƒ…d_Î8¼â¶X6¡`¹MX!ÿ½ø’š?ÈËí!2).&Xz¹ ,&•±ÓVÀh6´š*„½ ’,§47é3oçŽY»*°$—$"jƒ\,@ª`9a˜¯¹`s9æä‰üH•cèÃd‘ý-0 ,æl­(» ÀáÖöbyäôNŸ¹·e¯þ_8è忥9ø¤® ™Åö•'Þtæm¤™Êšªvš3%4š©U9Þtr%À|;¯ ³‘¾‰)A{ÅsÒ2›:BZZð2®hò¿ÄÓ92™²”\P­!îãI³aÑnW`¹O´6ô‡·ßòô‹ç†_þ¯³ŸÇ$ն㌽¿åªò8Œ?”iÄlz¶l½Œe·i¸Ê?æN!‡1Ýõ¤Ñ©¾µÐKeZæ¾ÅÃÏ c¡„¶>¸ñíŽ##á9Ÿ‰’ø™’Yò„Òäj€/Ü9w@Y,M`-YõïÒ€3ök»—~þñJ€ö È9Ô#kw­5½Q¸ÓÁÑüCnܱ *²‚+%°ú)m•"EŠ)R\lð w§¾V¬?¹«XPçæ-VºŠ‹ÌÅö®ø†Wƒ º1­¦Ó•£áÊó~J/ +GåîíÜV×Nše7¶e±³Ì˜^| ˜`I1’eéú™evR/¼œü'zþyÄ,5ÿ¶ûÔ}ÿÍ< ³í„Ì%»ÕX&ÿÎÉk£îE¤YÁ®ŒHeo]DBIàž½ÏÙ½7»SœC¦Dœ§ËA¬Ÿ–."¿'¥õ ¬VžÀ£gÕ‹SæÏáË„¸èpqrÆ><ùî_šþ¸›Ÿ©¹#èBÓ¼qóåÑî7o&G@qê¼1ú1ÏÖNÍUÁ”>`³ÝÕ—Jäóìb¬ž#ëP홊<Ê#3áñĶÂp|eSJRh‘‹c%]šSz¤òsŠ5-„ÿ0óX|…a») #ÓŸ§|O+²c:Y²:I¼†HÞÕ ñ„þÎwÄS†ÀUÁ‚5 `GnܬÜv1ÒðY–ŠaL·Ÿ¦†À’–D{—òQ¿TV.– Ÿa¶]+éJñ€™äØo+ÆÆZ"‰'` ï¨Ù¾® ¬ +l *‡ÕÌ“þ b„Ïiˆ{Š‹ˆfÖšvcÕqÇw¬uR¬Òq ¤ã8HñÂ!6¿IC8ÜE›+»‰ïë¾Ýªam‘ÙeÈüŠnLëêq5ýDF^þ±ù‚#Ÿ‡Vjê›Ts08ú€:÷¨®žD”vßÒ”XIþA9ˆ,‚üÊ’Ó•ãº1Íœ1G×NÓŒB/ò~ ÊUÓç_Bñ"aÝ]ŒVwk^"Hޤ˜šnTXA,¡©ÕB¸ÚV”_Þ¡2åÛD÷¹ŒQÇP¶z^:ˆÂ™ ·Ïy!˵32ÑÙ­ ,“nN>ʼnX&Û›q‹Ti†þÔvQhT²‘rJ‚³h…™öâì$;’A‹A˜©(oD ɹɀÏJ+^{Q[®¯5€z@Ñ]Ý ,ÎËÀZôÜc…çŒÌîÀOG¢ÝqU@Š­DQ(€/ëˆØ±nˆ×Ìu„¸0{g¨.ªÛØ<77 àÊ¡æm§íb$r-´¨NxÇ9cGvN†e´`V‡Í6…Ž È|L2&!ŠÞ: ·ä–A`õ‡…°ß°†wTí’‹ÐõSXWBÏOPg¾¡Ý95ÿù?AÕ§ ‹0p}!%°úfHL•"EŠ)RôX~rzè­ô:®Àð 1©Ñ/]]9¢Î=оÊnw1gTWO¨©‡ÔÌDѰzñðÒ ¬¤÷ð-g92zƒDa¬¸‹wƒ\„Êóžû$‚5û ”·D)zÂTv³:2³AjŃ9¯@^*++zX#.£;‹È®,Óš  Iå”TèZÈDQ¹(z‰,¯©ÀR ¬I3åX • h!°Z,„q–ÐÂ$ymÈ´|¨d¤£ZŠ ±ˆ3¢–ÃJ…ŠKÆZrЙ>[«h¦ºÎû(+Š*xiaZ[®U-½gä»…ñMó—·t €«=²&:é˜û¢$þ±µµæ»Y™°¦9z†î±À1÷¬æ¨†®âˆ\+´d"sÐdtœ›äi‡«¤“Zb ú“0õ™Oä’½ZÍH{ͺYnS¬Ü9,¿€®Z_XF_ëTE‘ñ°fËÑà/`©…0ÅÅÀ *°R¤H‘"EŠ~Ã|þ5OÏ^Y2O~Z>Ø`ùm ¬Gˆ±›€[bÛ=üc«ëSÌ*Š?@UލÊ1D%[ÚÉDÓ¶ì’ÖÒ.BMV~’ ]@Í?§«GÔXv#ËO"hô¡‹p}ÁŽ(K/S%h¦æ¼*G'ða$Ó*õ` }v§… a×¹LÞjV‹P²* ¥ ·ã!Å!âŸh2°ˆn0éæšûJ¼I`eZECEÅÀ‚E ¬ŠÇ¤2qR`1ÏÎt08!…6VD`i†Èfåз´pέpY»wèv³4ˆÀ¹vdâã;ÞÿÑ=Ll—×S%• °êìî6O´Ö(ÌË„äÁ¦…0: lØNá4€\}¸sƒ[‡ö왹ùÖÜU‰ ËÖí ,»ƒä-ʈÀ‚,ÆX[íP &Ü\·óÒ6OG:œŒ)Ö¤ÀâCWÐÕº1 °uF`å¶À˜Äw¾Wlz#½%|O8Ë+öÒïH ¬þƒ¹› +àÀµîBŠU@:Žƒté ® cŸ?üÖ§g/_“ÇFk>ˆD`Siw–9£¬p-çåë˜3>°ÞÇì³Ëjj¬°ƒÙ3F‘…,h¯Nÿ¬0kiXr#€~s®ù8®F]Ò99Oq"šûóA @FÇX €ÖZkmþ\-d… $ê(Ngªvrä­_؈“ƒf”¼Î¢ ©ÍN™^øuñ ,Ùb!ô©"0`8¦bȶr.%ª=ç4èOâËxQhÈA4œð˜AÊüΠå-Q0ÄÅ„üW Ð#5ÝXÐ$7ÍO!§d¤Àªú."ªdås…¸')°ˆwƒ°TVÜR—íqGl°$­©™­söYåÖ„mãk6îüù=oþž-WÆv…LT²#…6çD0u^#¥HueÁ*ZÍ ,‹É=…ðè¸]u.FNØc8^áXË;ª7 € íaÖvg¡}fÖYE&B•´Ìñ‘ëŶ·Éíï¢_8ƒ!¿BJ`õ!Œ®u è+`rrr­»bŽã` Ç@:ˆ«ÎX=pþæÈ÷¬É3£5D"°(—ŠÞ«#ÃùÆ×ÒK^¾Q.,ÀääÛ›²¯û¨}ãÿm(°¤5FÀ]J¥\]?M?ÁYn³‡µ;§ÎìÀ —ñ‘ë¦fŸ–hçbÍÇq¥0O˵ €æjQÕäМ´_T ¡ID²;3°D‹Å/’1ŠO’€3Æýh")°&s¡xб2ˆén “Bö· U5f7XùÖ ¬ÙâVƒí"V>/Ž‚ÝŒR"X<Þ€,l9Öj!4–âI«´DŒõ#̸U  wˆ{¨À"!jA†„ê1Vžò‰ð²’8D;¶mçðÅ! ¥™“H` !ô'I±¼ì<€M²…ÀZÞÅØ™%‰®Ê°˜>EqN‡}µdKíæú—W ÑVä$MD“Àê>¯p¬á•"™=ÂG® ­+ùå·५Ú*2DzÀ€`ËËnLq)Ñ´ƒU*½Ýƒ‡té8ÒA\ÐWm Åš|ç®ù 2»,/{nœÕ³œüƒÄø«‚ãh’A±üvL?ÁG®g…Ém‰®14ág-O¥+Ç Ëm¥2^¾68ýõ0ˆ¤°ƒ9#,»A×NëêqJúè¬ù8®fNÞ99OD†Jþñ JX.ZÂŒ´à‰V”)ÞƒÀÀ©¹+#_÷me5õì,Ž`ˆ²ØmÎ?Vø¹xûdp3Ò$Í€q§1Z(X-œËxÛÑn Øêܦ¸æJ‚“Ñ ²«ýûËÞ|ªúêÑm-áî<²ÝQ9X\qtXçü*¢*„¢»äG†…&#Và!)¿œ@ÎSAÐ]e¡É£u–)l]³Iè$®gäf¡Ù0¡i‘i#­¢’å\Œ¢ƒq“L0Í5 ²1‹+©D`w¨ÿ†í,ª`1K2Æ©…À†t¸´j%/?CNÒD4OæÔBØkxG% !³K¬|=N?*­»Þ /û~l»±Û;+îÔµ“ƒQ‚)Õ‡0Þ*EŠ)R¤è¬®õioxuò"#ÆoÓîlH$¶Lˆmo;ïZ:K¹ÞS¿ f!Š¡ÀG®Ndž’¶Xa§®V /‰¾!°ÖœÈã,WE Š€‚¸D!î¹Hf•I,ª 8¸êa!À;°\C‘ÈÀñ±€ˆëP°lÑÈNÕa#™)°”ËóÅ3âä°È©Ø\®ÕB¸);Ù ›ë³.YcÌ·´ÝL#“Õ ¬‚eï.µk@šqìZ Rx‘¢'×z¬æU€«}°^X—Pͨ¯šrÑJBÅÚ*µO´DÑŽm›½æ›Vd0 £è;À#ú¬¯\I‹Í±Zo°æHr%ÀƒoW`už{)™šd~dX\(zåǐɮÉ\ÍS a¿Á¯B¹D†wAà/Ò7×úƒhaÃÅø«Yv3Ïo]«î¬.R«ï0 X)R¤H‘"Eß!-œÒ|ãkõâËôšå¶‰‰×^ȳè˜KÇ·öæƒc h>zÙ7•GÀ ;™UÔÞ/ì ­xa‡šzH/¾¼néO êÐ 2›ŽpÙˆPèÌ–JgŒ´B5^0$š”A“À¢?WµŸy;"Úº§Ó\‰ž"2®D#S¬À©‡ýl2 ™F©âTe— q ‡RÜXYiqßVv@A¶„"oΗ0×ÞH·Æ™’@C@D«À–ËÅQ½ÚBDôd„˜¿¶¢jÜÀ‡L¨¾×ì!ã4yººvÑJBµ®,xÚ'ÂËN"°œXqFÙÓBhc KñKÉÜØì®œÎÇ)³Q»«Ö©X‡"L2É×@žÇÈÙ.æÛÚ®‘€‘’ŽqÛýƒÐýNiXiV¿AUÃÔd\ly S¼|íwk5ÀòÛ% Ò+§ï0¨Âýû÷¯uR¬Òq ¤ã8HqU°¶ß¹}>ˆÌå£7†Gl½û‚šÈ”«½Åøb];¥¦RSßRSà#7Šíïf¥+¢Np>~;+îâ#ׇ Š;è…—–ó™î“÷»ý’^Ž0Sh§§4¦J¨‹ €’•`!TAåð0™(—¤#~!1€É€¼u6L¹žˆ—,% ³´À@UÎÿ÷Cß~ôìqð@F î; x[ÝÀ¢e3¿÷‘IBDÕ-&2È2ßâË%°ŒkH «¢ ­¼ÕÒŸ*#V€(|=vTh’þl(@¦‹@¬|> ÈY™h!Œ‹ûìž!î&ÎŒwÉŒ7lÝ–lù×v¿çÃ{Þ&c¬åD¶…ÀZÎÅØY¹Ò₎d^6 ,ŠÞO$y)LòÝEеÔ@" Û)KAX«;ªžyÞKН“ïì¯z ƒTÕw0.†»«ÝqÇkÝ…«€té8ÒA\¬-µ1v\–——Ô«-gTûU4¦aÅbkÜYú¿:÷8>v‹™?ÄַƧ¿,3ά¢öæuã\ïêæÚ›‡_ k§Xa'üŠìïxé ^Ü ¹bÛQ¬‡qlAVX$ÒYæ”íTž¬(Æ4Gµ !(ÄJz¶Hê§X*‹k 15Xq-ÒOoû†ïº1! ‘¼ÈÍÏ<„/™Ù§Ë €Ã¥8~×›lä<鯗ˆ..¢lć÷Ü ¬€ 6‘;䑤2–FÞÈ+§RC€°šÉYpx+¥]´ª¨â ©‘¯}Å4ZËdb…ÛˆëSæOtQ`™n›¨Âæ +>Üjù\ÎÅØy–JÆé /ŠX– ‹¥2°}€â±DÄ»Ù=¹TƒL3´>Õ‘$cî¨ZM? €—¯_‹OO±¤WNßaÀ„W)R¤H‘"EßbP+ÿö'Xf];_¨# Ð`œw-Ù É/)ÂÒµÓÑ‹SÔüóễþÁϸxÉ,ùÁ†)±—89O¥8vÀÕ5°Õ¯#áæ˜g·©ŠÂÏR €ä½æ2R‘ˆ&$S²ˆ ÿÅ$Qã™üX&owi'ž_g5DN7؈DOmpü|ÛÙ…À¢4t«§@)1NG ªTHr³\T…0W/py € ¿[oÞ´†¸»ðÐ="LA¤À²’8Ä8åôV`q£ÀZ"‹£5Í^æ<¦²Þ=›ËRcƒ³0¾1ÛäÖ¿[Üñª…7ì)nèlÁR6"…š)XB±™h€R a_A/¼¤½y挱²Ú *RVß!–•þœN‘"EŠ)."նߟ`ÙMèE`å¶.YÍ+ìÀÌSjñ»%\¤<(ÜBLRD¼•y¡æ¾L@jö±ñ5¶7ë&+»lW\[^²c6+êℸøƒÉŸéöåXÉžÂ@ ‡2V¸\”pÄ—=ŠÛ߬àÀYè¢ÀÊ«ü"Àæ‚¡;%´¥DdÉFÓ"wˆÀ¢ÊX4Óe5ºˆ$šó”€wÚMe5~öð'r^)1ª¥ F¥‰ÀJXecÛövª ïâp4¼•äí ,á/}»Hj0:š!‘ñ0»*†·o½¦[ ?7ñΪïMl*"V«Ñéõe‘’ô="ÉR\z¨™'¯zŠ~FJýöõÇôºKˆH‘ˆté8ÒA\ľs×àK÷•6ˆ,·bÚ³¬vò“tåˆYû[÷±_òÿU|µu€žñVzö™óÙ.Xwã˜\fY™ÌPt"°]r.QÂåt©›rŠp•صefïåùMôg'(°ÝÑŠ±®¬`Z ŠÓI±M¿éIL4Ù(©’¬KbņV£À".& cÀ£#³¬O-™%€i/?³?éÁcNòÊL BV’31·öqœwB'Ó©f°ŒÚÎ JÆo?t+ÊÀbAø‰‰"²ØœÚ]-X6bQ÷Ùå%Ê™ÕxªÀê‚5¹£ªÙgðrWÖ2Eÿ U`õ•ÀZw )‘Žã` Ç@:ˆ«‚µ­BøJD–Ý @WOÄ’Kl{y6´{9íðü$Àtõx¨ºTå]ŸjY¯Xîœ^<¬ÓÌ*òMo NýoµpÊ_.}Óënó‘×)³| ¡yæˆD¥ …¸óKx!Ñü_ö´§Ý»ã»â"ªˆw\ñÝ1Ã%Â`(¢(<žÜˆ‰œK‰X^Η5Zbu™p}xÏÛzt¾„!°4GD`™¨xH-ü­™‘G5Ó–ë+åé ¾U'ìù¢¤ëñ:bnÄö•¹p_A¡‹+N`9=3°Œó.‘‹wÛd`¾ÉQíÉe+ÊÀbÔÂÓ2©Ìå2a aÏÝ4h^t)Õ—þŽªgu} 2ÇòÛ/ñG§8¤WNßa°h«)R¤H‘¢³í¯e7^!`N"£½yø³,>vßðj ÉZÂaÙ è â´®€ÆÙøZ¤ÀbV@pú_°¡+˜Ud…I(OÍ?¿*;µ!yY_^j¢|%Dõ× b ¬‹âÞï/½ãÇõ½û†'–¿‰IïêT`uCœQv‘¾‰Üˆ2)¶i³3,kÅwÜ‹Þ>Çó@SŇIÄ¢âÉØ8j¸ç8S¯øÚG÷,y´ Ù˜®Ë byðm À,Ÿ2³œ$ùR<é¿·…ቮ–E$cçSÁx™f¡Žoyùë‰p°2:8ºñtÞ7P³ÿ€] 8R\2¤ ¬¾Ã V!L‘"EŠ)ú ƒªzîW0–ݤ©ê‰Ð-¨<ø0Á¬ÂÊ*l×µ“ªrX¶ëÚ ÚoêªüŠö 6t¥>÷pX^ªt%^Ú,V³Ïòá}«½ƒë7,Þh5<œ\z¯&H[‰ñW—{ËWºII†ûÛ£_âäÄ×ðÀrÐEu÷Ö}wc€Ÿ>û|D¥ W2â>h\~hòÖÐ7ÆÂ¡ùAëžšë]5¾QžÈ¹výhe†X²7c¢8eœð3‹ò]X†¸+d’"/o9ðÂf{do4n%y%íld!4 ¬hP ¸@‹“Z­·Ž¯72<¤êœåX—”½Åuú­Ó/Ðsÿ€—®Z뎤XR–±ï0¨?¦çææÖº )Vé8Òq¤ƒ¸*h>4Z‹ïÜWà F1X¡‹P{s€föðJÛñ0ë0]5aXZ7Î…¯j§°ÌF–Û:lè ¬¸êg.tg"¬Çqüɯ¹o×k3ËvN™¼žv €ŽËûü·kÙ ¬N3]·AÌt¨‡¨ ãµÅm—ÏÞr{æÚgôYÖòâ½—¦«@FJÊc"Ü1±ã›//Zö°;à;‹'|"°z Áâ1gZøò²K— 4Wh͹70ýY²ÖžqÞÉ.–aM– Õí—s1ÆBÜùûì÷ü¸¾wK¾´äVÝ`Jd—­g¤CV!ì†K}GU®Z80–Xëé•Ó¿èó+Å‘#G–^)Eß#ÇÁ@:Ž€tWkûMû İa5Êq§w{xÅíä·ЋGèÊQ³ÜÄ`éúi,;Á²Xq·µïCÌ.`²@û‹°-x%Œ£)Ûg©nÂæŸ}‹²X’¨nƒhuXDÝ4¶õÿÚý¦»·öñËž³ÚBÓÿÞR²I1à°Ê'©TÏ•)Û+Ž8)G†Iš$I³“²Ÿ VD~u4ÛÃûØ]Ž’Ž™½6”Ù°l'°–s1rÖT`Ý4¶åæñm½KôF–Xš­ ‘@ ž+—¢—öŽªýC† Áò[é "Eÿ#½rú±@Ùþþ°B\sMZÖaŽã` Ç@:ˆ«óÛÛär‘ð ÄÀŠ R;+·ÜÖõ3Ú›W‹GP~–Žb°ˆÉb™ ,·Uîº×ºêg飀&½±® Ä+aMh”¥2ñåmÖ¥ q? ;9h†XÞ¹A·AìÌoâK12F'e³åjs–Ýr؇ޮÀËs›œ“g(k‰(®APÑÎ$®h €bb­.KƒœeÓ¡fI1aqçÝÍBÈÚXFÑ6j·X˹kU¦ZYn£U¿¶t”DTÎ2E'.ðŽªÎ<}@ÇêÛ&B7¦'¿¢Î=‘•;ß{!šâR"%°úÍŸÐýý# EŠ)R¤ô¹rd`ÀœðB‡ÈyX`‚—®´:û°®½€®ë –gö0½9þ£ŠÉ<í­õJ€ÉÀêÆÅ\ú÷ó€dŒù’XÝ`sŽÖ¬"¾ìa+J%·WÛBh8Þ;rýÈhææÏ5àbIVÕ-ã?#Å|°] ’`€©%N £Àêf´äX&6~ÜYYv^Ô`Ø_ _VØX°6Ѝ+‘Z/´òÿupòËzöék©3úÏþ]=œø'r×V7ź@zåôxS•"EŠ)R¤¸ˆèsÁÈàáÿgïÍ£#¹®3ÏhÜ3±/€ÚY$«Š[‘EEÑ¢¨²$KòX–--u·íi pv IDAT{Ú’G=îns¬¶=nO·çÈžq[V{ËÖbÊ¢dÓ¢Hk+Q¤Ä½ŠµÅZ€Ba_@îïÎ/2‘r¹îïððdEF¾|È‹H ?|÷»z& e–íoµ…€ì8À*#ÛÙãÏ78°Š=ÒÃÊêèw¦ò–­qåè+HQ.«ÎÛÚu¬éRSòÝg~±æ%ÕÝXÊî lËSBÀ*SÄã=»ß4p@+_È©Õ`æÎô;ÞBˆªZì6v€X^ÀZûÉC–ήòô¤B½l‰Y–†ò :‘ȰdñÌøUVîÛ«Û:¸püPô¶KWs1ÊÜç_éć­ë;ú~~æã¡Vÿƒª•öv&ÛyG¥ä¤}ËJ©å‹ENX¹ŒlL„÷znøHl¿Áþ9´¿Ÿ2ÛǶÇ6ýo Ã0 Óêwšž›O©Yd–­¹=w@lñ全ó˜µrIvßé ¼”š§ÔœNç-cìf˜ÊÆZ¥îjþµxÚÜÿÓÚ@Þé”k5Á–šBÀK~Tò"EË1¨”$µæ!¹Tr¯átˆ{.μ¢ìÆÐîçs·Í²YòR{ˆH@£´˧;ø¤ ²³DÕíW¬zV '—]¬‚ìüNŸÿ‡ÞVqÙRä…°±_[ `znïÞÜ”ÂNFÆ9´Kx"”Y¦è9´ZBr€ ï¡sæÿe _9MGÞÅ0 Ã0LMY›ÒüŸ¼Ý‚ƒ•šSsÏ=wny)Ùy €Ñk¯ |º‹p©ðõ–|¤íÀr¦…°ÖPìJöâ_Sj®{È«6Áµ¦6‘o!Ôÿ¬ï®¶ÀÏÁÝ Gú7û@“lYõŸÿó½o§3°òÍtf%äõ½{un=t }itVúj§¤*)`I¬ÊIFz}_ýŠU–°J´–îÚyÕO4胰nÈuD>[e–_³µÐ–컀Z:Wä;±€ìyÛ¯Z°š÷ý"}êÔ©Foq®£;à:º.¢344k‡Ñ _†•¡a±y)!ð÷Ë®[E(gð÷ Ôl¹wý@GÖ´Ž”šÏ¾òY¨ Ò thKáý U»gÏ“·,…5!î9ýª5¦ø©=·ÿÇC?~ï®ëŽW,b~¤`õ¬ÕB§,su0_…Íx¥l[Ù­o{J¤¤k$ ¡T·½2oèÓˆ\ƒ¡/[RÀòØr•?ljGR „€¥Õº*åžj.FcÕÕ˜&>]¾êÃÔªE¥­ÑpxÍFpêÔ)ëÚc™—_Mo“%ÝB({ï‚ôPìêÆ>qíÀ¯Z°šŽü›jc·á8###Þã\GwÀut\DGhìäßYDÛµòØæjæÞÕèíÀBrFDÑc/ŽÇÉ ¬ZÔѺöXöòßQüš5ú°ÚHéE¨tæ¥ßVó/èshåræÌPüªãϾ3§}„‹9°Z¨…°‹èÉ :ÕO04s-„~ÓáBOÎKUM/äA±Wßð–âÒ6¨nê²W.õ•Ï,Xá’›$/rÆ®ò¼Û{ÿñwߨQ\ËöhË[uV5c>ÄÝy ©:tŒštº…P-¼¤^‚Ê8»lý¡¥óS /oꔎÂJÁ o‡ ïHÏ YC‹iQ8«éмjÝßJÑÞÞÞè-0Àut\GÀEt„‚Â<ûÎ,¢-`¥£ØêüÁ5èf@½²íÀš¡ÄtùÅ…@ XÎ×ÑJYã‚,a†ì`†VJ-] ôBöŸÉÎc5ÿ<@”˜¡š+¡y¡¤Í(<î«b½¹ñ‹fYS!äX Xù=Tl!pW×Ág­oð–íÅk£ŽD"ºß; ƒ¯=TnϲŸ7,B¥ÎѯX5Qåo¼®Ì½¦Vë¨â2@uc^SkÔ@ýáÈ ÄBÔܳPiµt^vuvå:ÓÞÞž¹8 @Å.Tý˜(9@»zEûa,WÑó²ëÖÕ3¬$e– ½ÂÛáø¶™ºÁVÓag¸·ìo Ã0 Ó*4v áÅŒäo:ûgp½šZE6çõ¬{pÒå8jùU=Þšþ>¬¤ì‚¤•‹=kŸ°°Ú'E‰‰:lÉ“ûÌßîYëÀ‚Ó¯\×>P€¶€U¾¯¼‰)à´+ï¥2ªØÌ‘Î~ï•.I¢«½¤Øà?z<>ý(¤ò¢l aîKk%XúÛ¾ËÉ+NŒ2ïviÌ7¬Ö¥³þ¯lLEÏP §Z]ÀB6¦m§ÈÆ)9-üU·™'çûÓ…l;l´t¾ðþ\wy«ß«Ü X͇¸3 Ã0L}hhÖÎDxÚVo;D"|Ý€ÐÑì2¼eº«š;Ä¢¹ìál€l;LÙZŠž {îÞ.@À Z£Sb²ÌRN‘Wm:|k2ò,¥ lJøVÉÆ(5¿štÖ ¼ØôB©Ã›”,5§oËäWžêÚÐ>³çßT¹²dÖ«¼I_YKæBܻ͒–~Ū q/â•ŸBX;¬hes £0Ë æŸ×ª7-¾¼)×R#! €•€±Æ×Y(ÊÓÊåê,J/Ðî*‚¢ÔůŠà}B²‚9—i 8«é­ð†³Nž<Ùè-0Àut\GÀEt±áF=Ù¡EôäXÂá é^[‘ƒeNt¶…Ðñ:j'EþCh?,¼]È€2†Þi ½Cv܈܇=µð¢³{X‡Ý}F"â-ž…-Ï!ÌÆË§öPb"sî3jñô¦WÞ ‹9VÕCñ¼Ú( œWIQu›™£å‹0ü²óXѬñGÕÜ3Èð”Z8cä½Öô“È,Cï<°;lMAvQ §¨’€E™e5û4Ù~#ôûd.ßÊØýv5÷-_T3OËÞ;Á,·ÀVÓÁX Ã0 S·Ö#éÊÔâÏàÂßKË ="\.×\xBpÎå,:‡X†÷È®[)5'|Ý0|ðuåOXm¨Røû(>n}Ù˜Šž•G¡2jö)þÀæºUMf׋ù gk–v^PüZ¹sôØ{RÙË_ò´ΜûCdãæá_”í×oîɶ‡?7~±z–€°jàÀ’&Pi°àÖð’/øËêƒyk0XÒÕáówøüÛßv™ çÚ†ŒÜ·i£¦:Žš Ùy“°òÆ+mhª'Ù×þBÍ=@D”°ì®gaÀJ©ùç(5gÍ<)ûïµÆ†Ïz‡>Avß¡_¦ÄT²„œªÒÙWþ„b£`¥ôûÉj@»0FÞ“}í¯­©oÛVb,`µ>.¹nÝDCþÌ0 Ã0;þ‰Ûô BÔàS„ðõÀÀ*ûÁ^˜0| VÒñ=l-«™a6þœ1ü ÝBýÒ™«)T"0@-ž ?7ª•ËÙË_Ê^ú¼‚ìi0¬õ¢ÆêB@lþ‚¢Ô<J\+c°Ñ]?Úo¥æžÕ¹`Ð=Gu$hl:ÄÝ£mk伯äÉ9°Œ|j8n=´pû-í{ÊœcØÝ‘²Ë_.Þü† ÕµVC¾ïR6¨…ÐqÔܳd÷q9`ìz“±ûmÆž@ÈÆ@Ùzî„bc¹£%žšìV莣¬«ÿV*{î3È®PjŽV.kK„†…¯¤l [?8~Õý‡Ü?TöŸSlT¿ÛSâZa–FvÝ3Hñk”œ†ÊPbBŠànç¿r¦Ž¸äºu¹B·ýR½C“>\×Ñp]Ñ;…pçÑŒ 6A$Æ®{=7ÿ¦±ÿ§+žYM –Z"#‡œ_Zz…¯»ª3ÍRsÈ® ôùjúIµxZÍáë’=·0†ß ǵ-ÒÆî·Cï0zn –^•¤Ä$„)BCD`Ð>oƒ Â0z^€bWHv`µ>-ݺÌÃm ¢ÑzÂ`j×Ñp]Ñûç".bÑc UKfï½S†÷ •K¥Ît¸Ž:¤|ƒ€%;n4î_??KHáw o§yà#º‡Hv%& 5"âŽÍø¯héUJÎè—Tþ\+`MäoØ îþ>"´°_J/”É}ß‹Øæµƒu¼ ÒŒ ñÉ|Vc>6´‰ˆÈx»ä± ÑTs1æW²õ?«¹ç¡û7^žvh„KxÛõ< ›‚†ß\ a?sï=·þ¶1ðf)ûN]ÇExϲç°>Yøûóá:ú­O„÷Bz)>¡_H„vëw´,á)ò=)Þ¢1Npw-ݺFÿJ] FGKþŽÈ´\GwÀut\DGÈÿ´mÈ].b‘Áa@PüêF•‡RsÖÕ¯Ù¹ÈGDdµ\RÀr¶Ž¥X¥7ɶCd÷íæ¡Ÿ‡ôÈŽ£Âו±ÕŸÚc)Âf."Û…í7@”œÉ‡=S|rõ4ÛÕ @¶_/BÃF÷í0CP™|~–#T,bÄcg`ù«ÎÀªùwŸÑ5íßü±?øä¿9ðƆ<{ª¹Í|ˆ{Ë·’Zx¶€µž8°´€ " ýÖT8¢’“Xk­*DøºÌƒ¿0:j2„ôèhælÒy‘'Ú| ¡Á‘Ý·‹Ð°l;¤3kdx„¤ø5„%v¨æÞŸÄº¬¢´¶ÜÅøá}wüì¾×7C?cSQMÜ·“Ñyü[†’SŒÁ„¿¿øfÒ+Qëhöò—(½(ÂûÁ  ÝNHéyJ/Pzf°ûUå" iîýqࣛۥôèfd¦Õáw½¦£¿I×”'N4z ŒpÝ×Ñp·ÃÈŸ]wäK¯ùçèc¯Ã6¸ˆEK$”œHÿþEñqZ¾Ã'»n+úJ¶l‚¥¡ÒÂÓ#Pî<ƒUãwµp”•‘ƒÚoµ3Ã+¡¢g›g˜M¬¦Ã}Þ+†a†iB´Íê×?;i)úôÏõ}ÅÌYŒ‹Ñ²%'…¯KEϨè9˜Acð­Ï”ÝwXW¿¦fž”7ÖîNp/ cñeµx†Rsdûz4¡³¬u`UxYhá%kê{öãëûždx¯šþ9 |] ¬±÷ë”DûIýý€ ä HQl,äÌ0Õ°ÚBزNm¿B¥†8ám'5~R /ÀÎ’/º‡NJLª…—Àã­zݺ·¶ž:U<9‚i-¸Žî€ë踈N¡à6ä§.±áèé캩MM~€1øÖ¢(Ùs; Ô©ìù?¶&·?@p¶Žµ"7cQÍ>m=b=¢æŸßþšEžEO!ÔX•NV˯Þváë\7<nž;@˜²£D\ŽáÞv¨ ¥f3¯ü ůmuû«ðÅ誩£¹:…°õ2°Ôô“ÖèWhñ46Lç܈ö9Rb¢†²’*zBŠÎ›‹ïA'Öeã€ÕiÍ|12åq^Àzî¹ç~ñ±£££èßaÄß@«cÿ&íºWfdd¤Ñ[`€ë踎.€‹è²q?v¹ˆ gUÀ"¥V.ÝÇ‹Ÿéí4¯ûÌ°Šž³ÆQÓßÏßµ¥:’5þh‘£:°òãÍ Š_ÝþšEžÅv`UÑB˜Q|Òã¹ù7Íÿ]‘¥ü=0ÞRV޵'÷P³O#»’½ô7 µ•ÝÀ£;¨¦Žæjˆ{ë99¬kZ“ß²¦ŸDî*(ƒ6]:¢ð–B-_€Êˆð>á‰=AܯƒºD`W…†Ç|12åqþºýÈG>Ò××÷ýï¿Ô ´Ç7Ðê¸N¹²ioooôà:º®£ à":Ew›ÑÝf4ä‡/±ñØ…IJ\ƒ•þ^ái+u®ì8ê9ö)ÙwÝ£ÙB)vÕTM¯ÛRsÏŽ:°¼íÂÓ&"<‡ µ°TÅBµ| Þ a–x‘… ï•Ǫù”«;õÇxŠYovçëà‹ÑTSG¹*`µÚ‡.²(³ *J îÈÏ©HÔPÀ¢Ô|þ‰Š"ÛyŽ~Êz‡l»®Ê5ùbdÊã|ÖË/¿ìøš; ý^*[í•a†aZ‘O|çjï\r¬)µ|€ï¯p¾§ÍÜû™…)5Kñk[N•ÒúWöÊß{‚C"4”½üE5ó”§í0eãpÈ@>`ôÞ é t”2Ë¥\[G­Þ, -_ "Ê-ÞWíKª½'Zï¬ñGe÷ñšÎ[d\C¾…ÐhµBÊ,š 7É­Cø{`ø(½ˆl¼Ühˆì Ìð÷”^D¾O°Òc ¾-÷>Á0Û¥õœ“®GðB†a†a˜Ú#<˜!X 5÷© `é‰ÎcÔ‹[~^ÛÀEVöÂÿÈœýC5óZ¹ä  €ÑÿFH/ Dp7jcÂ*üµ’K XËœ#;ÊöªzÞüGwaÈŽ£ K-pnSùB³åZ ãØ…¬B±9¾œ +{á/AÖÖvDéyÂWVÀÊmfkOÁ0ëhÀu»k×.Ç300ðáøÜ¹O#nArXÞ‡Óœ”Z@EÖ&á‹‘)ó-„åyðÁ?ñ‰OÜqdz³³_þò—ï½÷Þo|ã·ÜR9¬qçàVëĉÞã\GwÀut\Äí3òÀg».b3`îù‰ìù?¦ÌÌpÅ©^ÙvŒÅÇ)5'|Ý›­£¶nÉŽ£Æð{Ôä· ¤ð÷e/þ*zŽÓRªÚFõˆàŠÕÀUð k©ø JÎX“ß)Þ·qøàŸ×ÛÃ+)Ú¯m‡¡Ã¤!=[[/FwPM¥lÕ ,-`‰Ð°ðõˆð¾jbç¸çXjáEJΨ¹çŒþ7ÚG&þ€š{¾äÐÏò¤ÀQ‹/F¦<õv`}õ«_½çž{ü~ÿÐÐЯþê¯>ôÐCŸúÔ§ªyàÆñ…Bˆ‡z¨P£=uêT4Íÿ³ð®ÂÛÑh´p{ê™h4J‰ í½ÊÌ=•ÙôW±8O™%)¼-öJò έðÐCjP3Ävæîlã:BT^|jjêÀ+++ŸÈÝó +þxô±×g' Ã0 Ã0; J/RlT÷Vƒšy*{éó²ëÙwuåË”˜€0¼wü·*r^(ýì¯ÃJyÿ^ḽÌéÿSÈ4FÞgìzÓÖ¾ŠÒÏi¥Ÿù$Èòÿ/0|.¼’P¿ù—Súö®.ó“EF"Pæ…‡(½ ûî6úîÙrì}y¬«_³®}ÓØuŸ1òÞZ¬Ï¸Œ=ý»êègnïnô^6AöŸ«ùçÍÕm³Ua%ÒÏý{@zÿžZ~-{þÿՇ͑Ýwd/þš}Ú>rèçeç͛ڥæ3/>$¼ž[~kSdvµp¶åÀ¢¶¼Âv6à2Fûøècÿî_ôï{÷¯|ì}úŸÞ”cÊ·LëÂut\GÀEt\ÄæAx;ªW¯KË¢å‹jú{”˜²W| ¥—`¥„'R¨^au¢ØÔ6ªÞ®!‚QÂá¬5XÅN •K”^¾.sïk¤^m×È;°¶_Œî Ú:’`´Zˆ»ÝBèíØÄcŒ€îeÕÊ%Šê#ÔâËP5÷ „Ôí„zÅæ¨Aÿ øbd*Ñàëö‹_üâÝwßÝØ=4RpÓ¬pÝ×Ñp]±uþ^˜!Ê,©…S€Ð#ê)³\ñ”œÿz§’ ïƒnÓåüvs1Xjé•Z,n?E±_^ÕÜód×-5A&C#€ ÄÄ–‡©ñÅX (µåÝzQeIF«…¸ÛS7%`²íZz…bWhƒ§Šž§ì Èžv9ðf@¨Å—AjS+SzÕŽ Ü|12å©«€õæ7¿ùË_þòääd&“¹téÒïüÎï|úÓŸþÝßýÝzîa†a†a¶‡Ð’ÈÁA@u’36¦ÅkKWMìWÙq#kü*êäp¹f áÆûI-¼@vUÝñ´5 Ÿð÷Be(1¹~™¥Ú>uÍÐrŠnY˜k,jò‰: XÕB€§Š)~M)ÊD!¼í›zœˆ –^Õ,Ù}Â@6†tÌðv oTºpÊaU;²GÖDsg˜R8/`w­ ñúßøÏþóG ƒ÷ÜsϹsçNžìøZÞó_½«ëý÷lN\o~ G0­ ×Ñp]Ñp[™c÷ìÕVõ-„Xdï„¿ßÑ=®Á~—ØNVT6:°ÔâY¢ýÆšöÚÏ@±5–šN-¾lÌ.K³]Œ´ô*-¿F+—h岊ž¥äT£w´iÔä· Ò”ª«€Uet a+ XÈl¥ ¿ ëö@Ýl Oùvf3@øº`“–ÎÀNg`5ÛÅÈ4-uÝ2­Ìèèh£·À8×Ñp]Ñp[1FÞk ÿøåé,ÌT%`o!` Üïô×!dÇä\áÑj£€= @¶ßàÔÓ•Û‰ùŠ´fžHÍ=SñáÍv1ªåWX[ã D« XÙ¸5ý=ä¾áëF•u¼1~ëÁ…ãÞ@åS›JÍc³ î9dä:}C„F3Œ¼Ë°zlVmÌe`9ÜBØl#Ól˜Þ³S8vìX£·À8×Ñp]Ñp[é1vÝàØÔô2ªq`‘¢Ô, ôÇÅõ>ç7¹Ù~½uí1=çTöO¡€%× XÙ8Å®@²í:‡ž­24 €âãi-’Ó´r €šý‘1ð–òo¶‹‘–.P §Ðr,kê;°R€úV7ª¬ã/¼¯Ö;Ù”˜T‹§ÈŽ#:_eµïŠÈîãúIvÝ çÀšÖ8°´F¶‰}ÚššÃ¬f»™fƒ¬&bäÏ6z Ã0 Ã0Ì&±3°*X”šYÂ×Ù˜¨SÞÃG‰ J/nÍʱ~ÁÂÛk{ÕÒy’m‡ê Ìv5¥(9£?ä«™§õ=”˜¤ØXr¸œ‚’S¹ìy;†¥ÕXdM} (³ •†ô6xG-…šý‘5ñM°’ÆÐ»ôÁRñyÕ ‚ƒFðÁÕj–n4ÃX°Ê9°(6 ˆÕë(‡•„á×3X¦np !Ã0 Ã0 Ãl„L™ !îÛñP8CÎåTa¡fµÎ€¥æ_ êÒ?ho ¼-_•Qs? ÂûX3?¨Û6¶¶_‰ð~©¥JNåŬæ‡SÈÆ„·SøûjÒ÷&Féïa€b«-±¹w­Xë1Ãt*–ð„@{BËf`Y×¾‘½ø×P{?éyÔ a*ÂVS0úØÇËÿ×è :ÀÉ“'½Æ¸Žî€ë踈.€‹èNž<™ËÀZ*&Å.]µßTIDäµrÙ™ÕÄúÛ”^´®}ƒRójáCvw䉪A¶ ¢ç(6–9ý{”Ž Ÿ¹çýÔôÉìkl¼Ôc›êbÔXFϲ븱ë>˜aX)J·L²µîÜá½Zm¡Týº›ªŽ[D¥µ× €Z#`M€ò·=yP£XÞ6HeVJ(¥ø¸Z8M‰Iëê×í#vÿ ó–ŠÈÔ°˜:qâĉFoq®£;à:º.¢ à"ºƒ'NØS³Xjá%ØSù† ä¤3«å|W]¾Å›Ã߇•È^ø3ëê?fÏüW’]·:žSn3í×PK¯d/ý %§E`À<ð³"4lîý Ÿš{NE_.õغ^ŒV‚V.–¾›lVÛ!cðc×}"ЖŠÁÒò¨ïþÔ7ÇÝoªjå È¡!˜adWì\ªlÙ ¿ð´9ð檀¥CÜ!¼Q –5þÏÚhM~[-½Š¼€U– ŠÈÔ°†a†af~H¬T)ÿJÍQüŒ€l;TÏ­­Cøûá`¦’€twßå†Ï½.òxú…ÿD+—‘˳×!÷uCøº…¿Ù8ů o»çÈ't^ì»Çè½+¿«†£¢ç­ño”º—ÒQÊ,Á Ÿôà :\²Ú£X2¼¹Ùv”Y¢Ôœí!bÊ¢{`eä@n.Á¶€µ‘µ¬}P«X¿'%&ÔÂKÙw 5õHÏ·2u‡,†a†a†Ù¶ «´D¢íW²ã„S3·‚ð¶Ã ÃZ¿˜šþžšþ>¬DõKQlL 'Þ5ô„WfVV Òcü¨ð÷ʶCõÏM—í×Û7úï]“”¯?±7‹€uVEÏÆ¢VÚu¥±o·Š+§Ä¤G„†´à¢æ_È<ÿ2/þ™—þs 5B6 Z~ €ˆЗþ>É XÅçq`AøK渫¹g’=¯7ú߀âWQËB†) XL8uêT£·À8×Ñp]ÑpÝ]G;kDB©X¶€ÕÙø ñ"Ѐ]„ÙXöò—³—¿@ññê×±®~]¨Ìîà€æ|qþ50÷~HvÝæ¹ñ׌áwzã•m×€á3úî^sܬ /Öñb$Šž`™Ûxwb 9£œ¦µX*v †0´©ÇŽ&œë]-EË¿©’¥V.B®°œKp/t`¾¼Î+‚ÃÔB‘PEÏÇ„¿ÒK©dãµk!lù"25†,¦NŒŒŒ4z ŒpÝ×Ñp]Ñè:u`©‰'rF'¢Ø( ,B Døwa­ ¢–_Ó7”^¥fÕü ÖÄãÖÄ㔘(² )µüšZxq84`4¶›`Cï’=¯3XûÙv„aôÞ#°æTZÀªõŨæžÕŠ!Å'(½@Í¿X<ÖJ{m68°(1Q&„¾yÐ.ex?´º!$ÙvXcÔZ†kõ7UŠB¥E fØV”jáÀ2‚º.yûÙu+ -¿¶¾Ó3»B±«9!Ep ¯ÝÂV/"SkXÀbêD{{{£·À8×Ñp]ÑpÝ]GOÀš¾<•±fŸV±Q”Z€ÊØí{fc(¸îZ‚Þ' ¢g3/þVöŸYcXc¨¹g7.B©Y¨´šyj(8`,>X8‘°a>9 ûï]w¸bƒgm/F•¶ÆQÓ'‘3³@Y׊˜°Š8°|]0|”YΜúmÔÄšy§¡0„· †ÏØ÷?éá›”˜TóÏë4dãֵǴrê­þ¦ªt~ä tÝÍ0²+jñŒþ¶qLÀFXÓKÃ'»nHÍü`Í–¢ç’‘Ú«%‚CÐA]Ù8¤wÍ ÑêEdj X Ã0 Ã0 ³-tWNa_žšÙ¸6^ÙÁFN}þÜ[ÒTNÑ,5ó4Þ#»nA®‰iºÙP-½Úë›Ë*c2Ñ×`ìyWˆ-/6&Ëšx‚Ò Öì ÒºÐz'„¡f´QÊe`~«Ï‘OŠð^Ê,«Å3¥Ÿ&lÜY=¨z(9cM-_€•DûJ«åK2/`ÙŠeEx¯¹ÿÃpðÓΩµ–íþ^Ê,ëY¢Zz½Ï¶+~œàÎ4°˜:qòäÉFoq®£;à:º.¢ à"º]GÞ'»n†Jg_ûKküQëê?ÑÊEèP€ŽFØláë†0)½¨µ|¤ôGYJ/XsÏ‚²²ýzámÞNÝĤ› ¡øµüí±ø €&q`G0 «TŒTí.Fkô ÒÂÛ ÀûÈ’‘0ƒÆà[Dp’3ºçNCÉi€„¿WG­ÁۙŢÏBéE¨4Öv†ÖRóÏ}'Œûeï]ù;dçMZvÞ>X)€dÛ!cøÝz¤nšsŠ–~SUË@Y†ÔGdçÍÆÀýÆÀ[ÌC[3UsÛØ,Ïú@Ùq€Z|Ùþ7e)½!ó=­"8˜ÿæµIôké"2u€,¦Nœ8q¢Ñ[`€ë踎.€‹è¸ˆî _GcøAƒ–/XãZ×þY¤t”ÒQé kBŠÐn€ÔÊeäF÷m(=¯f@öÜ©ÏÕMLvhQ¶ËïB“ X«ƒ—ŠÞ[£‹QÍ=£æŸ‡á3¯ÿe˜a€„·ÝØ÷a†ìº ¹×–bcÖÄãÖä·±6kuÿžv”v`åBÒ‘GË)½(|ÝæÞÃ&Ð VEΛ·Èþ{ Ó”*¬nU¿“–~S¥èy²mU¡acøAcøÝ:ÄÍIŠ9°ˆŽ#Ôâi{K©€„·cUQ•^áë„1üc×›Þ€/"SXÀb†a†a˜í"|=æÁûßn Üo Üo§MÅFsCÄš¢…¹!q´r €Zz€è¼†VŠbcÙqDŸ©›˜´l•lœÒ ^c×}ÆbMïÀ‚ƒE™•Š':­\Ê^þsä}ÂßkôÞ 3hþÅ|r"Ÿ&¶xÚ{DÍý¥,o;Ê”°’3öù+ŠšzŒ]Ù7ÝE@¶ß@øû„§2KëÇÞ@é¨ZxÑÑÍ6/jé<Ù~¸Ïeîý ÷uŸ1ߺ€á§Ä„6]æF vž#BÃæ¾o®Ã>f#f£7À0 Ã0 Ã0n@vÞ¼îˆ51EËrÁF ÙÕFDxð-Z¹„lŒâãÞ'¼”˜H†÷åû•DhrÜU|€ÈÞ;c£O̤ºÑô–ðD@éA„΢fžÊ^þÈ’7ËÞ7@§Au-ŒèÒqBúÅÔñù²ã¨ì’G‹¬h ½°R°’0ü(9MñqáïÁÝÈi@ h!$¥æ_ »o+¢vf _·ð÷ê"r€æŸ§å ¥ºkiå’šý‘¶ª¹R”˜„íiä6„!Û¯Wó/PôeÑwtïðÚ¬+sÏO䛦þ°‹©ÜÏ츎î€ë踈.€‹èÊÔQ«?jîY€„¯§H°Qƒ‘ýÔÊeµôJ^±>[_m«íÀZÍqWiëê?Ò‹Dp·ðvœœ¹‹HÀÉ|éš <åZ¿­©oƒ,£ÿ^óàGí øºExÿš-y;`†QzéE²ÿcøAým³Û„•ë"T³Ïd/ü¹ÎM§Ukºp„\ ØeÊ, _ÖãÊ »Ž›~ÆØû¡Õ#m‘ó–Z\EÏRÕ²c뾩Rzd o‡³YW[@ûãt6™öa­Ÿ6Xcõªu‹ÈÔ‡fù9ʸîgv\GwÀut\DÀEteêhÛ—2KÈÙOšái¾nXIkò;„žz–óYÈöëVÏÌç¸'g¨•+ÖµoXSß »<=o§e‰&·`yÚ » +±QqøbTiJLBH‹VæDÜ €âã”Z€~µK#¼(è"¤l 9ë–-` *£Û¾ê†Z8 @v«x¦ðuÉîÛeAò·h?µpZÏ(²øÊeRsÏV¹™Ö}SÕ×WΛÖHDärÓ!‹ X5¦u‹ÈÔ°†a†aÆy„¯ËK6ü"r¨ÑÛYƒï G%ʶCÈé#0"8\x¦V¬‰oæÏ‡ô"'¾(Ê$knýÊv`¥£Ù N‰‰š>ÅÇAJ*ºiD^ÀJk«£ÜÙžvÈç¸gW ½ÊRzBÚ5­o –Z8@tk{¬„ðuɶCPi=Äp=déÞU ænì³f°ü½Â¡Ì¥æ(=¬o!d˜ÆÂX Ã0 Ã0 SÌý?-¼"8Ðl=v2²_Í=@DöëØ9H7 ߺVGcèjþy5ó4õ¿‰–/0÷Xwk»P^·jrK‡¸«¹gA–ì¾£¦O¥;.u÷eylkéU¨4Œ€·*y²ã¾hÿÛv`-Rr¤„¿W­å ”˜B.ƒ¿ÖPrš’S0ƒ2r`k+Ȟ׫¥W¬™§tRØšÅããP£Äd>Þ¤f_ã,@ˆð>Zx‰–/BëëÀb˜ò°‹©Ñhñ±)LkÁut\GÀEt\DwP¾Ž²ãFl6õ €ˆ4úïõû÷ž~U+V"²ß<ôóÆð»×Ÿéë1úïÈûªZ¹ @DŸ¶­ XõÜýæfÈB±Y~Î^Œzh£¬ZÀRËPÑ~…õ,ÝBÊên/áï×%'·¼óÍ¢íW²ýÈ–óÝd×Í0ü´ri£-N³éï,5[• «ußT)9 @ø{½ÐamjùUÊD!d§O´n™úÀS'FGG+ŸÄ4=\GwÀut\DÀEt-ZGØeìyáP¼2ƒo…áSѳ°Â×#tž”^'£É,OdõvzqÝN‘VoÙ¬âYì…ˆà ð÷iY­¢L°.Ä];°¨è9"Ð?êÛB¨æŸƒ¡¶Œô=w°&¿µîZ¹ @vß@-ž®f±½‘K1k† ,2²€Zx ¤„·£ÎÓ'Z·ˆL}`‹©ÇŽUwdš®£;à:º.¢ à"ºƒQG3dôÞ¥oê †y Z›ZÁÒXvËÞ†Y„Û,"%¦2g?ckX*MÉ)C«Ù—ì¿Ç¾é«àÀʵ®u`jé<Ôƒò k %¦(63(;nÜÎ:r×}RÍ>³®.´r €ì}=€*Öób´Æþ¡ÔPËMCŠRs€¾æp`…F =ÈÆ ¾ö+ìwTf°€Å0 Ã0 Ã0L9ä®7ézr­€•W°š[¿¤Gvßaîy? MLå!KÍ™½ð?`%eçMõ÷:1L+²­È=†a†a†av,«S[Âái'\£ô¢ðvd/ý-¤Ç<ð3klDd©èY²ã(­\¤Ô­\ÎKEkÈÆ)5é•m×ÃÀJá=5ܽ·€šý¡6…‰ànŠ.t6ï IDATTàÀÒXÎ "¤Ì’uåï!„yà£ö!=ÑðÁJCï„pÌ !Â#ÂÛIékâqá}:ÛÌ TÑBX”9ÿßuמîXÜÙxæÌÕ‘UÚ2&Âû„§2K”œÙlˆ•š{Æý >cÏû7·†Ù©°‹©§Njôà:º®£ à"º.¢;Øáu­2…0·2Q=¯^RsÏRr¦°ˆjéUXIÜ-|]"´€ÒEPñqh”24¤ê‡Ô¡¬ùÔÂK„·Cv“m×énGè0,!)=¿:£pPüšš^Í=G©9ûHf €l¿Á¼îcºqÒ9„ž`÷ÓµZ½ÃÎÀªìÀªæbT §(vExÛaø(9Ce½xë°¦¾KÉáë6þϲý{{á}(«…Ql´øñä4ÙûÏ‘_¯<ƒrǰÃßQ™Š°€ÅÔ‰‘‘ZÅ0õ„ë踎.€‹è¸ˆî`‡×±õZu^:ª–Îé#+,¢²‰Žá½h%'`©´5ú0å†êþAÚ À–¤Gw½ÕÙ~ƒŽÖ¶¶Û›‡~Á¼þ—WGÅ Cøz@Ê‘.B­° Ÿ2Pz €ð´ÉŽ£ŽÇžÉÞ»²ˆHA6¼UÙUÅÅHÖø£äÀR OÕwª´n4öý”ìº%ÿå‹È~eº­«_§¢ƒ/µ€ÕukSÍl8;ü•©·2u¢½½½Ñ[`€ë踎.€‹è¸ˆî`‡×1¯[ÉV°¼¶€EÑœ€¿Ú>|\ßVsÏ©¥ó0CFÿ½Ð²”0(1•¡ÌröÕ?¥ø¸Z žV®@ç©ëBoM¾ç…¯K¶ß ¢g Ù¿z‡«²€UñbTѳÞ£ï V6†è9Z¹„®[Ê<${ùK°’Æàý*zÙ˜ï-t‡áý@+Å,Š«è9™¸f‡¯Þ•˜B®ë“ɳÃßQ™Š°€Å0 Ã0 Ã0ÌVXÍÀj Úµôʪ‘*6fßEÊû sø=¶ëGz„·Ró”YÊžÿcJNCHJNgÏý‘ˆRóÏЖ+Ù}›·û¶|9¡Ì=£b£wmw­œKÅFµ,—s`ÕJb}w«èÚéÍ´CÜ3„¸SüÙu+„i;§¢g0ÑÙ}‡X«ÍQjVMŸH„†ÕÜ3Œû×­)BC^JL!·ãº °&·Ÿw]F»•¤Ì¤Wø¸ya6·2 Ã0 Ã0 ³ ¬ÖP°lVj€l»€Š_Õú­\¦tTø{õTAO¤)5ϱÿ])1©¦¿+%B{D †=ƒ[@†GPÐô·ò}ˆÓ±ñ¶K¿&5@vÞÙvpÍQ-&ZNL!Ôª¥·º?THJLYc_µÆ±Æ±Fÿ~Ýéjîû{#v…âã€m‡×¯) Hm0aQj^«œŸ°œN‹hº=Sø{ïÄdwÃS'Nž<Ùè-0Àut\GÀEt\DwÀuԴ̧ð÷ìy½ðDÿèûP‹/X—î$,{ï¤tT X:_¬B´¡™'Õüs…æžÀðëû²¯~Ž’3Öå/€²²çÙqG·ú%0ÌN‡3°˜:ÁýÌî€ë踎.€‹è¸ˆî`‡×qÕxÕš – Ã>5{‹1üC®‡\`9)Ô4ûÉQDû €PÑ3Ec°(9CÉi˜Aóº#ï‘°’jîGëOK\ €0v½€5ñ°&D¬N‰|S¡•Ð9VE)1RfE™A÷pˆÀ€1ô9è¹áWŒáõÂß'‚C =q²(²ãkê; K‡òê„ݽ(ŒÁÊìÁŽGe*Â,¦Np?³;à:º®£ à"º.¢;Øáu,h!lM pâÄ=dÛ!x;×ÝU˜÷$<­áÀ¾.¡Ø=#;o^w¯Uß~#„`ôÝ“]~ÍšxBvßQh²»&CÃdÏíâÚ?Sj Rñ„̇¸S|œhL~9°î´R#e–‘š¥Ô*õ»~Ìè¿ÒSxPFö©Ð°ð÷•R¾ÈöáÌ2¹vc"0hŸÓq#‡^Ud‡¿£2aÃ0 Ã0 Ã0[¡Õ[ ¡‘ÂP$›ÂÀòi! »n æŸßxÙÃoÌy³ Sj.;úðê9™%Ê,Á _Óz—¾«¦ î%1Cù›jæéì+’9÷GÚW jò[™3½ôy$¸GÈuê9è9òIóÀÏ–{ ôzŽý†ì½b]ŒZ0'`íº¯Ê 3 S °†a†a†Ù yKº@Á*†ðD´S ­ÓB@vݵøòú.B+¥–/@ÈÕfIa˜û?éQ3?Èœþ/jî9äìW28”W&e÷q{_ý[¡cã… OY”ž¯òᔜ ' ¢vE4ƒæ¾Ÿ2¯ÿåõ,_¤GeÛuµzj†Ù1°€ÅÔ‰h4Úè-0Àut\GÀEt\Dw°Ãë(rG+w–-¢Â Û7[Ç%|]"4+¥V.W+—@–í)œ$(»Ì½‚¢øÕì•/ƒÅuÿàPá’Æð{`‡¸×Ù}»ì¹Cö¼@^’³e©JÕ‘R«gÖZ…”m‡ÖOiRvl¿ªŽþŽÊT„,¦NŒŽŽ6z ŒpÝ×Ñp]Ñìð:®¶¶²€U¡ˆºiÎðÁ”;­ÉÐ~Ÿÿ¿½{Žª¼=þìÉ•Kn„pQ Ðò‘EDyIñHY\lA\m#´¥x¬”#­¦V,õ œú¢@t¡¢.ˆ7  Öt¤¹±ú Ò$@BB&!³ÏÆ1 „=³÷ó›ïg½ë}'{O·OÖ—ä•_÷~Ƭüú{GkN*¥Œ¾¹í Øþ4âÓÔù*³êyöˆRÊhÙùûìéIÉPN鲃»Ÿ‘ÐS)åûþËåqm/õˆö$g(¥|å;¸Šê<ƈmšõ6͈oëœS)¥ °.ÙѬ;sááA‹wE]wg àˆß¨Ž€æqVb•V`Y< Ý•á1Ï©úÿAÓº+þR,¥<)J)ß©ífm¹ŠŠ3âÓ¼Áˆoo´pîsôŒh#.U)eÝ ø``0ÖœëâüÈ™ç@>ÞÀµ`€ 9$} áå\øÜ=}6Àº *ÎhÕY™õç¿Sì#ó\‰ò°.y–RFën*ºµYwF)åIéçªF‹ëÔ…-ê/ñá%Yoó$ÿ‡2<*º¥#›Ð° ,„‰×ëuz °e £D€ˆ2DxGw`èI»5º×/¢®¶õØÅ“𥔯ôõ‡ßñüÌ¿ÔåîÀR†Ç“ÒW)Õþöèn÷…q¥W*ºçÏcýŸè®?VÊ0kÊ”éSJ™gZw™]²ã…™]ËN±Çf.4b¼f\•ÿŠ&¦i:½†¦†ë"Çÿ}·ìëâ¥Ô¸!‰Cú¶rz9ø³ú¨ïÔ³®Òwò3£u×èžÓêvÿNE·ŠÍüÓåþ#¾ÓŸ›ßžpÿGæÕíÍ1kÊbnü½ß¶îóg¢»M2Z¥7xïäÿS¾:_åûÊöDß0ÅÓv #K"Pè8l& 9!Ôù,¡Œ–×Eµ£êkjOí4Ï6«‹Õ埴x’û†ku×ĈK3kÊÌšæ™fõóÜñÆ,³¶¼þÈÞ¹›Îh…G4‡ŒG…»¸V}ñ&%e”c´è ”ò•xë¼§”2ϻěêë¾{£ éèÈæV~~þĉÓÒÒ’’’¼~ýúo(**š0aBbbbbbâ„ >lïàZN/6 £ t€ˆQ†ïè[i=ÀÑ“ÐS)eV}£šºKžŽY**ÎwúskËyóÜqÕ¸£¯V)e´îfÄ$ªèÖN,WMü#®‘ͬaÆ8qbýúõÇŽ[²dINNΊ+üg«ªª²²²233 333³³³«««í]Ü)=½ám½Ðe £D€ˆ2DxGw`‰èI½)ªãÖÿèò`pFlJÔõwû¿´îÀjÐÑôÕ*¥¢Òn޹q~˜—‡fÿÈkdóÞZ<òÈÓO?m\üÿ`ûöí?~ü¬/-Z´sçÎW_}Õÿþûï¿РA³gÏnb•lâ¸ÌŠ eÿ*¬QJýä?“nîÕÒéå ’˜¾º/ž3ZtôÚ¥ÌúØ›žVQqçÏÌõÚÝ}ª'u€Sk"Sè86ßõÌ3ÏÿýK=|÷Ýw§Nøþ©S§æååÙ»aà¹ø¡Î7`AO†'ºÛ½QÇ-Ú)ešß–4|ƒ¯V)¥<±á_€ í&î6lèÛ÷»›T÷ïß߯_¿À7Üxã_|ñEH× $¾{„ÂÍhÙɈI4â;¨‹Û`}Ï…VLØ× TB8À*++›?þâÅ‹ýGÊËËÛ´iøžÔÔÔ²²²Ð­îáõz^l@Gè( ¢ ÞQÆXQwÖ'šçŽ7èhíep–VøaDp¡z4±¤¤ä'?ùINNÎðáÃýcccÏž=óݼ®®®uëÖ555M¬’=°—Yµ©¼àзJ©û²’oúA §—ƒHä+ÛsþÀËžä>Ñ?øŸÇëö?cž=Óç£Ug§ÖD&—îe<^\\|çw>öØcÓ+¥TJJJƒû­N:Õàž¬+ùgùåääÎh ***ü_ž |]QQøñœ\+p®À¸Wà \+p…f\áüù:ë…õ·M¿ ® õŒ–ÕÅ"üÞ|µJ©]{>×â»à \AÇ+äää\rP£BÆþÁØÑ£GGµxñ⬬¬§²²²æÍ›7räHÿ‘¿ýíoþóŸ7oÞÜÄ*¹ p™ÜË÷üV)uÿÉý{pœ`újwýoU.æÆßñiþÃu{sÌš²˜~9FÜÝ0À..½«±ÒÒÒQ£F-\¸°ñôJ)5zôèÜÜÜÀ#¹¹¹cÆŒ±w p§Àñ-ôEGè( ¢ ÞÑð ¡Î›`ExDíOJ_¥Ô7»¿÷éöf}Rʈb,ðÈàlŒeffÎ;wÒ¤I—<{æÌ™~ýúM›6mæÌ™J©eË–­\¹rïÞ½­Zµjb•ܸ̫Þ}àœRê‘)7Þïôr¡|åûνÂhÝ5¦÷ÿò¬Ýñå«ð¬bw ¼´¹k÷îÝ÷Þ{oƒ OŸ>mMHHزeËöíÛ»téÒ¥K—;vlÞ¼¹Éé’ñ)„Ð'©—òÄšU…f­+Sùê”2”'&Ø€V¢í½\“c¶®]»®[·ÎÞ(1¿‚“<±ž¤ÿð•ï=ÿųžöâ:Þ¡|ç•2•'†?›€$6ß\NàG@_t”ŽQ"ÊáeÜáeˆê0ÌŒmkÖVÔoPÊ´>‚Û¯´Ã#‚c€…0)**rz °e £D€ˆ2DxGÏw,'XQ#¡ÇG5b•¯Î¬=múj•R»_é†FÇ a’‘‘áô`:Ê@Gˆ(e £Eãñ¥ÈȸQÅ·UJ™ßžT¾:¥Û·k‡FÇ @søo¼Òù,ÈaÄ¥)¥T͉‹2ÀDa€ 9dì1ŒïîÀb€Ä aâõz^l@Gè( ¢ ÞÑ?¶Òz€áÅðz½F\[¥”YsÒ¬¯UJQ °4Ã#‚3LÓtz M3 =Ö DŽ·ò+þùEµRêÁµéy}œÓËA¤3ÏÕíÖhy}Ôõÿãü×ÿåIɈî9ÝéE'tîÀÐßÝ¥÷6îˆOSJ™5|ýúõýû÷ß¿ÿôéÓOž<9mÚ´À÷°›UdJOOwz °e £D€ˆ2DxGŸBáÅ £DDp6ï­õÈ#<ýôÓþûªöíÛ7~üø|÷ÏkÖn^lâ¸Í—E5ÿõAYb«¨Ç§´sz-WÝÇæ;°žyæ™À/{ôèqøða{ÿÜàÂXN/ B»‰û† úöíÛà`‡bbb:vì8yòä/¿ü2¤ R&X€Ð ᫬¬lþüù‹/<8f̘7ß|óÌ™3Û·o8pà°aÃöìÙº5À=¼^¯ÓK€ è( ¢D”!Â;ÊøÂ( "‚ Õ«¤¤dܸqË—/:thàñ¼¼¼¡C‡ÆÇÇwêÔiΜ9999óæÍ»’ 6þøBÃ0rrrÿˆTTTø¿ <øº¢¢"ðÓ ¸Bx®0dÈÇ×À®ý C† q| \áÚ¯pÉŸGí¾‹¿Â!C_W¸Æ+Ò÷»à ÖoTÝ¿‹f_¡ºú¬ `iú]ddd8¾®píW°~uÿ."ü þ®¡éw9WÈÉɹä F…Ì5í­¸²Àëß}÷ÝÏ=÷\vvvð+”””tïÞ½ªªªÉ›¸®r ¸vù»§R£½MÜJ¹v÷K®éèÑ£wÝu×âÅ‹³²²šwîwñBÍŸ!èÀæGKKKGµpáÂ+™^)¥Ö®]{Ûm·Ù»¸Sàý‡Ðe £D€ˆ2DxGkr¥û&îQ : @Dgó]™™™sçÎ4iÒ%ÏfggÏœ9sÈ!©©©GŽyíµ×-Z´iÓ¦ÌÌÌ&VÉ#„€ ¤|1øŠþ6#<+¸Pè86ßµ{÷î{ï½·Á^§OŸ¶ÎΟ?Íš5}ûömÙ²åСC¿üòK¯×Ûäô ‘ìšöÀj,ø˜-++ë -àZÖmVÿ.©]²îTÇ6Ñ¿ùIšº‚›³h6›ïÀ.'ð³9¡/:Ê@Gˆ(eˆðŽÃPúoâáÅ £DDp °&EEEN/6 £ t€ˆQ:ª‹[¹ë‹ˆ2ÐQ""8X“ŒŒ §—ÐQ: @Dˆ(C„wŒò¨qžøX½'XQ : @DgóX"Äõmcžüi{§WˆÜWc€…0ñz½N/6 £ t€ˆQ: @Dè(œaš¦Ókhšaè±N@¶ô‘/CÑßf„g% ݇;°àjzÜÙÄX.ÇXÐ^AAÓK€ è( ¢D”ŽQ: @DÇ a’žžîô`:Ê@Gˆ(e £D”ŽÁéñh¸ B1À€«1ÀB˜x½^§—ÐQ: @Dˆ( ¢ t€ˆN½¥Ø ÀåØ Š\„ç™e £ t€ˆQ: @Dè(œ{K±€Ë±",¸,„IEE…ÓK€ è( ¢D”ŽQ: @DÇ aRTT乿eaIDATô`:Ê@Gˆ(e £D”ŽÁé±9:›¸¸›¸ B1À€«1ÀB˜x½^§—ÐQ: @Dˆ( ¢ t€ˆN½¥Ø ÀåØ Š\¤  Àé%Àt”ŽQ"Ê@Gˆ( "‚c€…0IOOwz °e £D€ˆ2ÐQ"Ê@GˆˆàôØMÜ\ŽMÜ¡`ÀÕ`!L¼^¯ÓK€ è( ¢D”ŽQ: @D§ÇÞRìàrì€Å ®Æ aÂóÌ2ÐQ: @Dˆ( ¢ t€ˆN½¥Ø ÀåØ Š\¤¢¢Âé%Àt”ŽQ"Ê@Gˆ( "‚c€…0)**rz °e £D€ˆ2ÐQ"Ê@GˆˆàôØMÜ\ŽMÜ¡`ÀÕ`!L¼^¯ÓK€ è( ¢D”ŽQ: @D§ÇÞRìàrìíåää8½Ø€Ž2ÐQ" @Dè(e £DDp6ƶmÛ¶bÅŠÍ›7·mÛ¶wïÞ3gΜ0a‚ÿ EEE=ôЇ~¨”1bÄâÅ‹;wîÜô*¹KD”Ž2ÐQ" @Dè(e £D”A›;°fϞݿÿ7VUU}þùçsçÎ}òÉ'üqëlUUUVVVfffaaaaaafffvvvuuµ½k€$!p}âããûöíûÆož¥£û5þI4 #66Öÿ"j¡¾¾~éÒ¥7ÝtSrrrRRRffæÒ¥Këëëýo £>üðÃ[o½µE‹mÚ´™2eJIIIàY"ºVèþ²UY5`UUUeeeeffffffggWWW;½.44eÊ”víÚ}úé§OHb÷6l؉'Ö¯_ìØ±%K–äää¬X±Â–ŽZ˜={vÿþý7nÜXUUõùçŸÏ;÷É'Ÿ|üñÇ­³DÔŽiš<ðÀO<xŽ1¿Ïœˆ™5kÖ¾}ûÞyçÊÊÊÕ«W¯^½ÚŠŽZ0Y´hÑücë,u1gΜW^yeÑ¢E‡>|øð¢E‹V­Z5gÎë,µ°yóæI“&MŸ>½¨¨è«¯¾>|ø¸qãjjj¬³Dt³ýeÿª³6þ…î6Ï?ÿüäÉ“Lž<ù…^pj=hRã?WÁ#’Ø=~ó›ßø|>ÿ—{÷îíÞ½»ÿK:jêÀÉÉÉÖk"jç¹çž›2eŠùý_­tÔEÑ"¢.¶lÙ2zôèË¥£Žêëëo¸á†Ï>ûÌú’ˆºHHH8tèPà‘C‡%$$X¯é¨…Ûo¿}åÊ•G^z饥K—Z¯‰¨{ÿ²µY5` >|Ó¦MG6mÚ”••åÔzФÆ¦ƒG$±k={666Öÿ%5UXX˜ššj½&¢^vïÞÝ«W¯ÊÊJóû¿Z騋 ,"êbÒ¤I7n¼ÜY:ê(//ï–[nñID]¤¥¥5`µk×ÎzMG-´hÑâĉGJKKï¸ãë5µ`ï_ö¯6«¬víÚ?~<ðȱcÇ:tèàÔzФÆ¦ƒG$±k½õÖ[™™™þ/é¨Ó§OòÉ'ƒþÝï~g!¢Fª««322þùÏZ_þj¥£.”RíÛ·ŽŽîСÃ}÷Ý÷¯ýËŠˆºèÒ¥Ë[o½uûí··hÑ¢uëÖÙÙÙ^¯×–Ž:>|øë¯¿îÿ’ˆºÈÉɹùæ›óóó++++++?ùä“þñ´ÎÒQ —`]a&"º„½Ù¿Ú¬ °bbbjkkÔÖÖÞ·iüg:xD»Ó©S§~øÃæççûÐQ#Š1âüùóÖq"jäÁ|â‰'ü_þj¥£.ÆŒ“ŸŸîÜ9k»–víÚíÞ½Û:ED]ÄÅÅ¥¦¦¾üòË¥¥¥¥¥¥/½ôRjjê?þñë,µ³oß¾Î;×ÕÕùQ>ŸoìØ±ÿ†3vìXÿÞtÔÂСCW¯^xäå—_¾ÂLDt {ÿ²µY5ØÄ@ø•””Œ7nùòåC‡uz-hëW|IIÉš5köïß¿`Á§W„«“——·ÿþG}Ôé…àšäåå :4>>¾S§NsæÌÉÉÉ™7ožÓ‹ÂÕñù|Ï>ûìOúÓ´´´´´´ŸýìgO?ýôïÿ{§×…fzá…fÍšíôBpÕžyæ™]»v­[·®¬¬¬¬¬lݺu»vízþùç^®BNNÎÃ?œ››{òäÉ“'O®Zµê‘GñxJàJiðg%%%¥¬¬,ðÈ©S§Ú´iãÔzÐ Á#’ØmŠ‹‹ï¼óÎÇ{løðáÇé¨víÚÝ{ッ¾úªÿÓ$‰¨‹‡~ø•W^‰ŠŠºäY:jjüøñ^¯×zMD]¤¦¦Ž=:ðÈ~ô£Ï>ûÌzMG½œ}öîÝxdß¾}½{÷vj=h†àIì*G½ë®»žþùììì§è¨©”––Z¯‰¨‹ƒvíÚÕ ”ò¿ £¦Ì€Ç{‰¨‹>}ú?KGüõ¯½çž{üÕˆˆº(..0`@à‘[¯é¨‹aÆmÙ²¥ªªªººÚëõ&%%ÝrË-Ö)"jêZÂ]mV X£GÎÍÍ <’››;f̧փf‘ÄîQZZ:jÔ¨… fee5>KGMmݺµW¯^Ök"ê"ÈŽŠŽÚZ»vím·Ýf½&¢.Æ÷Áyï½÷h½¦£Fêêê–/_þë_ÿºÁq"ê"==}çÎG>ûì³Î;[¯é¨©eË–MŸ>ÝzMDM]K¸«ÎÚÔ]Ϋ¬¬ìÖ­Û‚ ¬§Ÿ|òÉîÝ»WUU9½.\Vã?WÁ#’Ø=ú÷ïÿÚk¯]î,µ0räÈõë×—””ÔÖÖ9räå—_¾þúë?øàë,õø«•ŽZÈÊÊzóÍ7;V[[ûÍ7ß,X° mÛ¶;wî´ÎQçλõÖ[W¯^}âĉ'N¬\¹255uË–-ÖY:jdÍš5#FŒh|œˆºX²dI—.]Þyçòòrk¬N:ýå/±ÎÒQwß}÷®]»jkk<8cÆŒ|ЊˆZ°÷/ûW›Uƒ–iš‡;vlBBBBBÂØ±cÿýï;½"\Bð iðˆ$v‰KF,//÷¿Žî·eË–ñãǧ¦¦FGGwìØq„ Û¶m |5Õà_èè~›7o7nœõÃxýõ×O™2åË/¿ |uqôèÑÉ“'§¤¤ÄÅÅÝrË-}ôQàY:êâæ›o~ï½÷.yŠˆºX»víàÁƒ““““““o¾ùæ7Þx#ð,µðúë¯÷îÝ;66¶W¯^‹/®¯¯ùä“AƒÅÇÇwíÚõ¥—^ ÿ·à* °l`Ýle^Ôø ¿øÅ/n½õÖƒnÛ¶-??ÿ¹çž›5kÖ Aƒ¾þúë;vìØ±cÙ²eÖ;¿úê«{î¹ç¡‡*--]»ví‚ þþ÷¿‡ó{pƒ;Ûla ÿÍÊÄ0Œ^xaöìÙÖñ­[·Ž9ò©§žòùôÓOùË_îÞ½[)5uêÔ~ýú=üðÃÖ©¼¼¼_|ñý÷ßßwà2 °ì|€uøðáN:YÇ+++“’’éܹsEE…RªG6lèÙ³§uª¼¼<##ãÈ‘#áûN\†€=‚°|>_àÇ^òˆõ游¸ÚÚÚÀëx<žúúúЮÀÅØ gU—;bILL|x^^Þµ_@ XöèÞ½û|píwK=þøãO<ñÄêÕ«O:uöìÙÍ›7ß}÷ݶ¬@Sì`7Ξ=û›o¾©¯¯÷o}Õà…_ð#{öìyôÑG½^ïùóç<þüìììp}®Ã ®Æ#„p5Xp5Xp5Xp5Xp5XpµÿK:¿êsQIEND®B`‚gsl/doc/images/histogram.png0000644000175000017500000002243613536674414014456 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœíÝl[Õ÷qûvliL“Ðf6›” XØPU›XG2iÀâŒbkën,-j·UüÓ´桵B°% hÑÒJ¦ÿ°Nj³‹Æ4)ÙÄ(«–¸Ôž’ñÇ`8QݪƒHÔÈóGöø¹sÇv|Ï9÷œ÷ë¯ôÞ›ëokû~z¿çøØ;77çbýÙ`" `$ €€@ `$ €€@ `$ €€@‚Úð‰'víÚµzõj¯×[â°3gÎ\{íµÇLLLD£QŸÏçóù¢ÑèäädÍË@µà­[·®]»öرc%Ž™››Û¶mÛc=fß833ÓÞÞ …2™L&“ …B³³³5¯é¼Î}°×»èÉ{{{Ož<™H$ìÇôõõ%“ÉC‡åÛ²eËúõëwïÞíP…È"a øäɓطo_Áv˲b±˜}K,X‚ˆà?ü0‹ Ô××ì ƒö-mmmããã«@Ñ-è;wúýþGydá1+W®úè£Úž€yÝ© à‡zhhh袋.*º·¡¡!—Ë577ç·œ={¶±±qÉÓ~ôÑGÎÝÇ£j%fáA.ž5ñ¼¨©ôGj—Cèð›o¾¹nÝ:¯ÇãÉÿÐÚÚšJ¥ìǧÓé––‘ †Ðž[ ¿Ñãñtvv& ûñ‰D¢««Kd…ˆ!çsÀE™žžƒÝÝÝ;wîôx<û÷ïH¥RuuuË ˆÇó¢,ž5ñ¼¨É¹ç¥öwÀ ÛËe6Ðëë뇇‡GFF@ Z2}p#þÃÅÕÄó¢,ž5ñ¼¨ÉMwÀ`I0œò³ŸýLv (®³³Sv (‚·Œitèxз8„4Z!€€Œ“Ífe—€Ì“L&e—€IX,ŽIXh…@0N¿ì0 Àâ@+0À€q,Ë’]0O8–]&a°8&a  `À8,Ĩ@‡ÑSÆ€a ­ÀH@Æa P£§ŒÂ0Z!€€Œ“Ífe—€Ì“L&e—€IX,ŽIXh…@0 q*Ðaô”1`€C@+0À€q,Ë’]0O8–]&a°8&a  `À8,Ĩ@‡ÑSÆ€a ­ÀH@Æa P£§Œâ¦1à'NìÚµkõêÕ^¯·`×+¯¼r×]w­Y³æÒK/ݰaÃÑ£G ˜˜˜ˆF£>ŸÏçóE£ÑÉÉÉš—hÌk#»K¨}oݺuíڵǎ[¸kãÆï½÷ÞÑ£GOŸ>ýÌ3ÏÄãñƒæ÷ÎÌÌ´··‡B¡L&“ÉdB¡PGGÇììlÍ+4677GCp›· oÛ~øá'žx"ÿót:}Çwüë_ÿšÿc___2™`¦ü{¡ô›"›Íúý~u.æ¦t O>ù¤½3vÍ5ר›Ì–eÅb1ûñ±XlppP\}€¦ ZÓÉdRvE¤Î‚~ùå—¯»îºüÇÆÆ‚Á ý€¶¶¶ññqáu²·¦#‘ˆÜbx· ír¹Ü—¾ô¥ÜtÓMó[V®\yîܹ+Vä¹páªU«ÎŸ?¿œ̱X ºÌÖ4€…4iAç½óÎ;›6mzî¹çòé»LÞbâñxMNÐ^</%Î=¢„;àS§N}ãßøÕ¯~ÕÑÑaßÞÜÜœN§›››ó[Μ9sýõן>}ººLSæpÿŽ;¤U ¸Š>wÀÙlöÖ[oííí-H_ÇÓÚÚšJ¥ì[ÒétKK‹Àê#¾€ „ð»ï¾{Ë-·<þøãííí ÷vvv& û–D"ÑÕÕ%ª:ÄÚ‚…B?þñï¾ûî¢ÇOOOƒÁîîî;wz<žýû÷ ¤R©ºººJ0“°€šsS Ú>p]0ˆýúë¯ßsÏ=ãÛï¿ÿþüÞúúúááá‘‘‘@ FGG‡††–L_•²,Kv ø2@#eÞ³P>ç"F‡è"€y´ šsS ,‰@0N¿ì0 h„1` æ@+0À€qT Ã€ÃZÀ<Æ€šc ­ÀH@ÆÉf³ùŸ ¾1€00`œd2iÿ#£Â€:ÌÈ`^ 0¯ŠIXó[x‹aZ!€€ŒÃB€ tøaø ˜Wþ°}ÚsÑ1àü•¾¹ Î\ñßP cÀjlnn®ôe¥ê‹Î’gà!€‚ŒcY–ìÀ€yÂá°ìÀ€yü~¿ìx.–]€Š-\º™IO€ëp ¸R~¦1Ñ ¸ ‡…8è°„ qÀ4 k]gcÉ…8Šž¡àWªxs•øâÀXˆ­ÀH@Æa Pƒ4 5Á4ŒÂ0 €V`$ €ãd³YÙ% €ó$“IÙ%`àBL„aZ!€€ŒÃB€ t¤a¨ ¦) 8ÿÍÁŒÕa @•HA@M0\,»…b§Y–%àQ”Æ0 ‘âp8,ì±,†Œã÷ûe—€4 …|€[p è`nnŽÙ΀»À€qXˆPAíøÄ‰»víZ½zuÑžØÄÄD4õù|>Ÿ/NNN–¿@ù¼^ïb}é;v.ÀBµà­[·®]»öرc wÍÌÌ´··‡B¡L&“ÉdB¡PGGÇììl9{T„¦4 8׊[¸|W___2™‡ÛÑ‚”å¦4X €0`˲d—€Ì‡e—€Ìã÷ûe—€@ .–]ÑúûûÛÅwÂèðIy>ï·Sg!Ž%è(³$oLè‚…8Ð -h¥ä›ÒUÜÌÿ.÷Á@QÜÆ)1¼ÐÜÜ\Õ Jô%è0HÃPÜNý1àÅj«âkwqî5L Ä>Á˜L@ g9í\š!€ãd³YÙ% €ó$“IÙ%` J‰ ML”ÅBh…YЀºD®Ì¼äcU½"Çr–ò4Æ0 ´üÄé¦WÑ…8–œ¡]õnæ~Eé0<à \¡Š1àªGj.(²Š3îÂB€ûèºò_YÔ-hÀAZv_èŠ"€ãX–%»´ yëå:Ý㠇Ξ@9¸dZ¬GíhïÚï÷;tfå#€€@0NÑ…8¦ÃGãù€?Ô¤Âr žpâ ']—+–D €dZ.W,‰ŒÃ0 Fe[‚š\=R+l ˜Ab(ιW&wÀH@ ³ …ˆù¦¿l6+àQª–ÿG # ½q (DÌ|àd2éôC,Ñ À€q"‘ˆìÀÈ@  ‡…8èðÉw>¿5¹z¹ ‰ qü"  q  „ðǼoß¾p8¼zõêK/½4 íÛ·ïã?Î011F}>ŸÏç‹F£“““"Ë„ñz½bÖÜ(ʲ,Y Ohßÿý/¼ðB__ßäääääd__ßo~ó›ûï¿~ïÌÌL{{{(Êd2™L& uttÌÎΊ¬Cîð…ÃaY Oè4ŸÏ—N§×­[—ßòöÛo·µµ}ðÁ§¯¯/™L:t(¿wË–-ëׯ߽{wéÓ2YjrõT)&aó4™„uÉ%—,ÜøéOzþ˲b±˜}W,Qb àïÿûwß}÷_ÿú×ééééééW^yåÎ;ïüá8¿wll, ÚokkY!bý6¤G}ôäÉ“_ùÊWò[n¿ýöžžžùŸ§¦¦íÇ755år9‘&`!@B|òÉ'N9r$—Ëår¹#GŽœ8q¢··wùgöÇ—f`IöWìZʲcÇÙ%ʉÇãE£Ä¹G:Í᪫®øêW¿šßò—¿üåÞ{ï}ë­·<Osss:nnnÎï=sæÌõ×_úôéÒ§e²äZlž‘«§J1 ˜§É$¬S§NÝpà ö-7ÜpéS§ænmmM¥Rö½étº¥¥E\}ˆ"4€?ÿùÏ|øßÿþ÷Ï}îsó?wvv& ûÞD"ÑÕÕ%®>À »¨ ¨@ôBÛ¶m³,ëý÷ߟšš:zôè¶mÛxàù½Û·oíµ×öîÝ;55555µgÏžãÇwww‹¬0CcÀrW\Gô(ËáÇ{{{ßxã ÇóÅ/~ñÁ¼óÎ;ó{ß~ûíx`hhÈãñttt<õÔS@`És2V¹®è€%ÿõ†Rœ{)êðç ¹àŠÈÿãä&€¡2M&aPA6›•]‚ÇCËÆ#€ãÌ…  '‰È. € 0À€qø2@:Lôçã ‹!UtÀbÿh| jâcHhEè÷ëEó¸ŒcY–Üè-0P8–]ZÐ@­©ßbõûý²KÀ0àV9°$ `À8,Ĩ@‡ºó}È¥år꜋…8Ð ³ ²äüpõ'5Ä0`YcÀKNgö8Œ¢Ã( cEËEã©n<3 —s/EZдbïcáP-hº¡• W €ãd³YÙ%  ,E¿–f2™”]B5ô{"`8iÖÒŒD"²K¨’fO G  €0`¾ŒP gÇŽ²KÀ,h ¦X͸†òÿ˜L¼‚–¸j‰¨¨!æxþùçŸþùü®™™™öööP(”Éd2™L(êèè˜\! ´X‡“Î'ç„õç?ÿùÔ©S–eÍÿ1ÿáÈï=pàÀ† zzzæÿØÓÓóÏþóàÁƒ»wïY$ =âT ô¸¿¿ÿ?øÁb{-ËŠÅbö-±XlppÐùº³h°£ЀÐþÛßþ633³qãÆÏ|æ3õõõ_ûÚ׎;–ß;66 íÇ·µµ‹¬€+04  à3gÎÜwß}ßùÎw2™Ì[o½õíoû›ßü櫯¾:¿wjjª±±Ñ~|SSS.—Y!b àO>ùä—¿üåw¿ûÝ5kÖ¬Y³æÞ{ï}â‰'yä‘åŸÙ[L<_þ™ýäçaÈ‹ÇãE£Ä¹GôŠìä\~ùåÿøÇ?.»ì²ü–÷Þ{oݺuçÎóx<ÍÍÍétº¹¹9¿÷Ì™3×_ýéÓ§KŸÖëú·€fò¯Ÿ‚*ÝîÜ/ÖüÌÙlöŠ+®pWÍË93°ν„Þ·¶¶–Þ›J¥ì[ÒétKK‹ÃEÆñûý²K 6€7mÚdÿÜ‘Çãy饗n¼ñÆùŸ;;;‰„}o"‘èêêWP!æâ¨šÐÏï{ßëèèðx<·Ýv›Çãy饗~øáÇÏïݾ}{0Ü»wïÎ;=Ïþýû?þë_ÿZd…@Eò­NÙ…p¡wÀ—\rÉï~÷»?ýéO_øÂ®¼òÊþþþ_|ñæ›ožß[__?<<<22ÀèèèÐÐP]]È ° &)0ÕËaà$,ÓÎ ,‡&“°À< `À8Œ* €ãhðe €`$ €€Œ“Ífe—€Ì“L&e—@ìR”€Dö# _Ÿ!‰È.wÀ0ÉÜÜœáÑ @0Ђ†¡Lþ #âTÀ0ÌelGš…8ÀH@  Dz,Ù% €ó„ÃaÙ% €óøý~Ù% €@â* Çò†/ÄQôI4óá‹;` z\¦Yˆ#¿‹±‹±@0Ђ†[å‰ÜÁ O1‚;`¸Ñ[Ç€yIÀE`À8Œ* €€@0N6›•]F2|®l2™”]F2|®l$‘]Xˆºaäñb€Ê¸††¸Ú–¦ñBXê*#€ã° ZÐÐ\Ež Ÿ ZÖ‰;`è¯ü>$Kð€00`˲d—€4`žp8,»ÝлF¸Œã÷ûe— !¢•"€€@0Ž9 q*#€ã° fAp«JNYÎṉ̃BÍq À­ªX8¥Šã‰^8„ŒÃ0 i|æÌ™k¯½¶ #411F}>ŸÏç‹F£“““²Ê4Æ0 9<77·mÛ¶Ç{̾qff¦½½= e2™L& …:::fgg¥TÀ(^¯—¯â€`r¸¯¯¯¹¹ùž{î±o>.°:ÀÉdRv ÚâNåÀ>øà·¾õ­ 6,Ü555ÕØØhßÒÔÔ”ËåD•˜"‰È.€Ø…8ÇÆÆž}öY‘ €‚„Þ?ôÐC/¼ðÂE]TtoCCCÁýîÙ³g î‰ã-&/¿f”ƈ=Äãñ¢QâÜ# à7ß|sݺu±ü­­­©TÊ~|:nii)çÌsÅÀb0âå:,Ä,Ç‹F‰s(4€‹þÅò?tvv& ûñ‰D¢««Kd…€ XˆPBKQnß¾ýµ×^Û»wïÔÔÔÔÔÔž={Ž?ÞÝÝ-».ðxþw¨Kv-ÐB\__?<<<22ÀèèèÐÐP]]ìºà¿ø”jHò×¼”×­[wäÈYņ°,Kv d04SÃïOÍŸŠŽš ‡Ã²K R z¨aŽèuˆßï—]hAC¨ö¨KœX¦…/§‚- ‘`ù¸†hÎÍ#e†j™XˆcI _K ÿÈ‹ ËDÆa!@´ ¡:z}´Ä0TG¯€–`À8Œ* €á2,Æ»|Œ»ËPk‰†ûД†xÙë‡@fAC)}3šu‹Éf³²KÀ0Dß@£e·˜d2)»0`žH$"»´ aãÄBÍ%úÀEWØ o °Œ Jàÿɶíb'\ì±hC'¼˜±0 q* €á¬BP+.Ä!ýÅS°Œ kÀCÃEhM£jÒ_Éÿ1•J]}õÕù?ööönÞ¼Ù~üæÍ›Ÿ~úé%O+øo!žgA–>ráñ¿¸Ø%~±ôUÿ¢sg¦$άΙUø» jÎý ½~òÉ'íÝËk®¹ÆÞd¶,+‹ÙÅbƒƒƒâês‰‚¶0WsúÌåBY2'a½üòË×]w]þcccÁ`Ð~@[[Ûøø¸ðº\ ÿÿ2  Œ+Åé÷2— eI à\.×ÓÓóÔSOå·LMM566ÚijjÊårÂK4Ç0 9üÎ;ïlÚ´é¹çž»é¦›jrÂ…Sv½^o<¯ÉÉ1 Ÿ…CZµjY»n°,çQBŸ:uêë_ÿú£>zóÍ7Û·744Üïž={¶àžx1EÇ· àÚ¢‹hiaºVovwu¿ãñxÑ(qîEp6›½õÖ[{{{;:: vµ¶¶¦R)û–t:ÝÒÒ"°:ÀÙlVv Äð»ï¾{Ë-·<þøãííí ÷vvv& û–D"ÑÕÕ%ª:ùjØñXx5‚à´d2)»H°dg•«„`Bø–[nùéOzÛm·Ý»}ûö×^{mïÞ½SSSSSS{öì9~üxww·È ¥s®óã¢Fœ‰Dd— ò—…Å®îêk@h¿þúë÷ÜsOÁÿÂÞÿýù½õõõÃÃÃ###@ ŒŽŽ ÕÕÕ‰¬1„~á’ÿ·Z·nÝ‘#GÄ(Áû¿_oº°;Ííò2ñmH€qXˆå(:’Uº‰ŠÀ€qXˆPÐ4ŠbÚ!•qrwÀJ`ò!eqr Dz,Ù% m<šK ‡Ã²K€¶ª¸¤ØÅ¡[í‚ÝŠàØt4— ä÷ûe—UqUp!RðBG -èÿª´" g(¡à:ìºË2wÀÿ_¥=š·p)â€6 ®Ãîº,À€qXˆP-èÚ«Õt»Å¾/l9ç€y5¿˜puªwÀŽà[(Ήn-¨ŠÀ€qT`n翸ĮÅXæ#Ò¨\ŒCŠ2/€Þbz¬]é#VÁÜö,Þ-qî+·Ü5Cj«Ì  ý"\Ý5Sü/VÁè@fA/͉EDkÕßPsS(.›ÍÊ.ú(çjVþÏé¹ÙJ]3¹^šss—fzÚ¨B2™”]´²ä…¨ü+•ÓJ]3 `À8‘HDv ´kA/¹èÂþF½‘‚3«ÐÓ(óoÁlµ²ÌëIE¿>p‰k¬/nÞWÚ ©¨7RôHzeÖ B©ô rmÉÃÜxeÓ0€”ÆB€ t`ç>OíÆ^ÇB€¬%’t`çÚ­nìu#exNç@YºÍ‚V j¨É²,Ù%J{•æØAË_ÎpB8–]  ‰g0Žßï—]]ZК5{5ûë€ —8jÐçX§6¯N( Â%N…ô `eb!@p-Iù(7P)‫‰Y7CÀ£Àµ¤BO´'àb+à!`$Ð~ÀWQÇIDATdô’è yŒ*0è˜þ001`@0ê0¥ p;͹Œ“Ífe—TC³‘D0N2™”]3X³®°L‘HDv Ì`Z=À¨†ŒÃB€ `À8,Ĩ€†Sâñ¸ìPOšx^L£VOLLD£QŸÏçóù¢Ñèää¤ìŠP½Ÿÿüç²K@q<5jây1B<33ÓÞÞ …2™L&“ …B³³³²ë ö àlذ¡§§§¡¡¡¡¡¡§§gýúõ”]µ§P[–‹Åì[b±Øàà ¬zpŽB<66 í[ÚÚÚÆÇÇeÕ€s à©©©ÆÆFû–¦¦¦\.'«œãUg™Æ•+Wž;wnÅŠù-.\XµjÕùóçKÿ"K=œãPP*ô}À ¹\®¹¹9¿åìÙ³÷ÄE©óʤP ºµµ5•JÙ·¤Óé––Yõà…¸³³3‘HØ·$‰®®.Yõà…Æ€§§§ƒÁ`ww÷Î;=ÏþýûR©T]]ìÒ¨1…î€ëë뇇‡GFF@ "}ZRès(t €9`$ €€@ `$pGŸ8qb×®]«W¯.ú½ ÑhÔçóù|¾h4:99Yþ^Ô–wû^ž ð,¨ƒ÷‹"dEŒ;xëÖ­k×®=vìØÂ]333ííí¡P(“Éd2™P(ÔÑÑ1;;[Î^8aîå·ó\¨€gA5¼_T -bæ\eaÁ½½½›7o¶oÙ¼yóÓO?]Î^Ô\‰WÏ… x”ÂûE5‚#ÆwÀ%X–‹Åì[b±Øàà`9{!Ï… xÜ‚gJŽFŒëxll, Ú·´µµ—³Nøìg?»bÅŠË/¿|óæÍo¼ñF~;Ï… xTÃûEqŽFŒëxjjª±±Ñ¾¥©©)—Ë•³5×ÕÕuøðáééé‘‘‘o¼qãÆ'OžœßÅs¡ž¥ð~QŸ£sqMJæå{/W^yåý÷ßÿ©O}ê'?ùÉÿøG¹Ujâýb8å‘¿˜†††‚ÿnœ={6ÿ_’Ò{±åøàª«®Ú³gO.—Ëår¿øÅ/®¾úê™™™rö¢¶ÚÛÛ>|úôéÿüç?o½õÖž={.»ì²d29¿—çB< êàý¢ ÁãŽ.ý_‡ÿûß·ß~{}}}}}ýí·ßþöÛoÛ·ô^ÔÐÐÐЦM›ššš.¾øâ+®¸bëÖ­o¼ñ†ýž ð,(‚÷‹:dEŒw±ÇÎqý0nD  €0ÀH@  €0ÀH@  €0ü_"¹šÜe/«IEND®B`‚gsl/doc/images/sparse_poisson.png0000644000175000017500000011372413536674414015531 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìg\IÇ7¡†Þ‘ ¢`»X±·Ã® ¨`ïý°ŸØËyÖl)VQDÅ‚‚Â! ’‚ô^Cò¼.kHB’ÈÿûáÅNÙÙßN–ýíÎÌÎPØl6€x¡’-$0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0à &&féÒ¥jjj …+‰ò999]]]‡]»v¥§§ (B@YY¹oß¾¾¾¾B*i( ÕÑäS@óÜ£¢¢lmmååå9ò¸‚bC˜Ãáyn …T >š—hRRÒâÅ‹ÍÍÍi4F³´´œ?þóçÏñ —.]êÙ³§²²²††Æ¤I“ÂÂÂÄ#¬™‡@ó"l1Ø@³±²²Ú±cǧOŸÖ'Ãd2óòòž?¾nÝ:--­ÿýïüJ#òãÇk×®øøø£¤ ü Bž‚€ªF kkë{÷î1™LžÁ&дÓf/Œïܹ3fÌž6dΜ9»wï&Ælß¾ßK˜’‰\EíÚµËÙÙY˜¢¼¼¼ëÌÏÏÇ+žT£:««« ˆoä¹¹¹jjj?~ü|\®C ®®&W¦à¹hßèuED^^¾²²’gN||¼¥¥¥Í¦M›|}}SSS à‡„ü_‹ 0à–Dx.++SPPàWŽ¢¢¢½½ý… ðTcccƒAÌO§ÓMLL¸gooïææÖ°[HpR£…ão?òóóÕÕÕyžEsŽÂµAD˜Ô<‹F|¬†:‰AUÔ¡Câ;M~~¾ÏB|Iå’’‚ï%LÉĆEééé SÔ·o߸„UTTìÚµËÒÒ’F£q.o)))~'%ŒNOOÏ… âyöïß?hÁÕÕäʼ# ã½®ˆÈËË[ÔÙ¿ÞCðÈšššÇoß¾ÝÉÉICCÃÑÑ133“Ÿ~HÈÿµØnI„7àøøxsss! !"''Çõ´[YY)''ǵïׯ_'Mš$//ß©S§yóæÝ¹sû# ©ÑÂkkk…TÛœ£ð+¹¶¶V˜Ô< ž72"‚Õ°dbP@ÉÊÊb¿B¥RKÅ‘’’⺗——ã{ S2q£aQÒÒÒÂU]]Í%lÕªU#GŽŒ‰‰)--e³Ù~Matæäähhhäää°Ùl&“illͳNZpu5¹2ïÈEÃøF¯+"æææ‰‰‰B–Ì¡¢¢ÂÝÝ}âĉ‚³5¤mü_£êúZÂ0×û0»phøÈ`0>fr¨¬¬üðáÙ3gììì¸Æ|ñLú­Â…QÛœ£¨©©³ß!~ëI¹™g!ÁÇjXrÃñ¬"--­ïß¿óééé]ºt)77·´´ôñãÇøèž†'ÎErr²®®îñãdz²²²²²Ž;6kÖ,ü¸JƼ…`6kÖ,¼¨ãÇëêê&'' _‘Y³fÍž=;33óLJš2eŠ€_SøÂ‡ ¶eË]]ݪª*~u"àЂ««É•)xG.ž~£×—.]j×®——WRRReeeqqñÿýwàÀâOiccPXXXTTÖ­[·}ûöñ¬RHÈÿµØ@]_«@À“ ”••ÕÖÖ8pàÎ;ya –&øpvvvœ çìììîûäÉ'''MMMyyyssóM›66š$dá¨m‘£øøøXXXÈÈÈíÚµ‹Édâ©÷ïß·°°’’jh-x àX K&WÑû÷ïG­¬¬L£Ñ† òøñc~'ÞØØXGGG 777®/Pù•ÌÓ€KKK,X ®®®  0räȸ¸8â-ŠH^^ÞìÙ³544ÔÔÔ\]]KJJüšÂ„aØÖ­[ùÕ†àC7Z]M«ÌFw$Âóô_W yÿþýœ9s edd:wî¼jÕ*ü÷ŠŠŠruu511‘––æLpKÚ)ü»™äü_‹ ›Oí OEE…††FJJŠÙZà÷&[@),,ýãÇÈÈHiiéáÇ“«ø]$ú) @””GGÇÈÈHb<‹ÅZ¿~½——†aOž<騱#žºsçÎ;wr¶áæÖ‚À°$âééI¶¾ ¬ C[ÊÚ0× ZP›——×êÕ«¹ÜÃ0*•Êq_ à õõõ‰©¸û6!'¤ÓéÓ§O×ÕÕ¥R© ¦&lý”„øC"ƒÁ066&[oPÖ†¡-emÈk-¨­cÇŽwïÞµ°°gðàÁ“'O^µjÏÔ&ß܄ܱOŸ>¶¶¶Û¶mÓÓÓk4sÚËçi/"› ¦Å1ê7Шï€ßÝKtN´‰Ä É„F£ÊÉÉ È“ðÇ(((8::Z[[4ÈÄÄOµ«ªª¦¥¥©¨¨Sæ‹#û^xío‚˜§ßÚÍýÖmùݽ  @‚àºãSpb¬¬¬>}útèÐ!99¹ÀÀ@[[Û‘#Gfee‰GÞîÝ»=ZRR"žÃµUÀ€Ñ%2‰Fž ¬ C[ÊÚ0× ZP›¡¡!N'ưBŒ”––6lØ®]»nÞ¼™‘‘ajjºxñâ&ŽËÝš}C¬¢¢½¿ÍÝÅ:Žr€(kÃЖ‡²6 ä5ƒÔ6dÈàà`KKKáw‘——ß¿?±Zxˆ¾.dsëìÙ³§L™òøñcUUÕF3õد ²D€Q?´.‰î…>`$!!aøðáÏŸ?oß¾=W~×Z¹r¥···””žïèèÈ™µC }À C÷m@0€¤`eeµoß¾þýû{{{'''WUU•””$&&(Ëk‚66‹•ú4<áÖµ”!†S)hjõ`ÔQßš|§®b²yå%•̲ªÚ⊚¢ŠÖÏÿƒÂÂB555ζ•¢"/­ª £('­"/m¤A3Ô ÉHñfÅfç$&¤E=£G=K% =\NY¥ã¸IÖSföé/ÄÙÿBûe…ÄËËk×®]gÏž6mZ‹(Ì­¯aÄo˜¢ XXÚ’{zzzxx­‚7(kÃЖ÷[ÚjÊÊ>ýïò»s§ S¿òË£Ù±“ùÈ1æ£Æéu·å÷Äfc_sÊ>0 ?0Š’”2òËSs˳Š*›|ÕKQ)zªò&Z ¦Z u•z«õ0V5Öäîâe×Öf¼y•òð^òÃ"z*¿Ò´;[÷t[ÚyòTá?2n3¿¬ð°X,KKË'NìÚµëÅ‹-RfÓ Xb¹ E…îîîx|¡1ƒáéé‰'yzz2 Îvdd¤¿¿?žÔüˆë‘‘¥_ ÎÎΤkP AƒH×À¯aJ(Éü~eÉŸîæa[7ðt_%sK‡­»<öïgµÒz=zrÜ÷ÏÝþ~»úJÜ }Ï”˜oz8ådôžàÄë¯Ó_¦äg6Ý}1 «e±Ó *¢’ó.¿LÛq翉Ç_𬠹ç%|/£Xn¨JWC‡NZ–Úì´Ui2xRvüÇ„›×þ»s³,›Ç¢ñÒrò]¦Ï¶_¶FÅÐHŒz[C† Ù¹s§ƒƒCPPŸŸß7ð$Ϋ‚–––«««žžÞÛ·oçÏŸ¿wïÞéÓ§s2˜ššîرcêÔ©¹¹¹›6mjß¾ý¾}û°Ÿ·¾«W¯^¸p!44”x¸… šššnݺU@4ƒÁèÛ·ï¢E‹œõõõcbb<Àï"s"s[°NšÌàNZƒ;iÿî^Ð-,`À@ë%71áÕñ߃°’’•ë4Ñ©ëŒ9†½ûáíÌ_sÊîÄ||Ÿ•œWËöJ–¢RôÕäM4Ôdå¤UdT䥥¨<ó™,vI%³°¼¦¬ŠYPV“š[–ù;ÍײÒÔÁ´'ÙêMè¡g NãD²kkSŸ=ùtÍ/ùA‹ÉäÖ&#k5eFŸëTML…=L›&..nÞ¼y111†±X, ‹°°0SSSN*…BÙ¶mÛîÝ»ñü÷îÝÛ½{÷«W¯UPPЫW¯/_¾`?o}555fff>´¶®kŸÈËË377ÿüù³ŽŽŽvuuÕ××'¾ë fçÿvþ÷»ç. vLì¼sRçßÝ XXÚ’K`wWK²<žÚ²ã?¾ûœ—VÌâ/NŠJa­3·¿É$[=y) êKJ>^ó‹9º(Á•™*-Ý}Žkßµ›‰_·¢_¶ùäææöêÕ+))IVV–“““cmm’’¢¢¢‚ýì¦þ:ý'~[[½zubbâ¾}û:v쨨¨XYYI£Ñ8IxžÜÜ\KKËÏŸ?kiiÕÖÖ¶oßþÆööö˜@–‘‘)..¦ÑhBž0ß’Qv áiÚâ—ˆ0ж©.->éõîŸSÌJî/‹´­ºô]½ÑbôxÎÔÊ/SòO?ùzëmFy5ßé¨lLÔFuÑuè¤ÕßBSIŽ´î Êjž'ç>ýœ{76+1“ûÕGMAfº½áÒ¡í»©bÆb2n_>~¤àÛ®œrÊ*½W¬³]¸X?öôôܺukÃø#Gެ]»ãsÃ# ¢££ëæ5ð„„kkk.Æ0ÌÍÍÍÔÔÔÃÃãöíÛˆŽŽæ*§aÉzzzÏž=þ ú€ù–,É ‹ÉüxÕ7êðÞòÜ®¤vÝmú®ÞØaÄhŒB©f²ßg}”ò"…÷RTJŸã{èM¶ÕïØNIô¯9eÁ2C>dE$æ0ùtQ÷·Ð\5Â|rO}i*…][›xëÕñÃyÉŸ¹²© Ú²³ÓD'ÉY|©¦¦¦C‡Ïž=Ã{|9|ùòÅÑÑ1))IJJJ°khh$%%iiÕµlذáðáà øÓ§O£Fúö훣£ã‚ ðé¬i4ZQQþòMÜëwû€[;`À"qŽŒŒ8p Ù*xƒ²6 my÷Ïÿ“}íßœ„O\ñÚV]nÙÑ~¨#†a9%U?ùvúÉ×ÌÂʆ%P(X?s͹ýMþ詯©$Û0CsEÕeUþïuÆ¥(ú{z!Ï fڊˇµ_8ÈT…&Ãf±>‡Üy~ெ_Ø÷Õœ:Ûq–sËÊk)Z¶ê®^½zõêÕ   †IãÆ›;wîÔ©SðìÙ³)ÊáÇ©Tª¯¯ottôÍ›70†aÇ···¿páƒÁÀ·K—.{öì?~<>ýVÃQÐ...zzzïß¿?pà€€QЭøX!~Œ(kÃP•W‘Ÿ÷pÝòø¹ÜWIWoä‘.#ÛuÌ)©Úyç?óM·$4t_uÚ¦1?ïs|þ§ƒ›ƒi‹»/&šªk§*¿rD‡˜Cã=‡oÓ±*wcò·œ²u×>®½¿ùƧ‚ f§ ¸FDÙ¹O^M˜-ãõË›WEìò¨.-mq‘ͧe«îرcË—/ç™´bÅ |–|||0 ³¶¶¶´´LHH¸xñ"¿œ«V­Ú·oŸ››ñ}÷ðáÃ7n”““kØÁgll•””doo¯¬¬¼dÉ’™3g uVÀ¯ ý (jÚlvü­kOwo-Ïû¥'L†F³™¿¨ÏÊ ²JJï'}šZÑ £—J¡Œî¦»rx‡áÖ:ÔÖßËd±ƒßgü%"‘»Ã0šôòaÖŒ´ÐR’­,*|}Ò;æÜß̪_žEuÚ òØi=nú-CEE…††FJJŠÙZPš E0  ¾¦Ü_³ôûÛè_b)«?¦9lÝ­¨Ó.»¸jwÐ瞦V1¹B+ËKÏ`²bx ]äºx›OlZÑñÐ/W^¥UÖp?s(ÉI/ÞaóØŽª4™Bú·'Û7yü€+ÙÐ#Wj§/.½m“£Gfffž9s†l-ˆ,À€ÑÂfÇ\8¹o'× š; ß{ĨêZïG)ûï~.©äþ”V_M~Ý(‹ƒL‰“IµI8ÞÇBSòJ«¹’´”dwLê¼h°™Œ5åáÝð훊ÓÓˆäUÕ†þuÐÊiºõ¶)(Š‚‚ÂÈ‘#/]ºÄù´ hôK"ÄùfQemòŠÓÓþ7}BøöMD÷•¡Ñò,¬]>3èÓßïÃrË#[ñ\îk¤A;1§Ç—ƒ#׎´¿ûŠ¿ê´•å¶MèôíШýS»h+ÿ²*Cniõ ÿØ®[Ãßgš;ÿé›< kâÊ •E…÷VºßvžZú#S̲‚ÂU'žƒ–ÙlvYYÙíÛ·Éu_5ûÕà IDATÉPÍ…D¿Â0 ">^ù÷É®?¹Æ up3Üó°²¾ATrÞÊ˱1 †›j)lk9o€‰¬´„>—U1ÏD|;t?9«ˆ{šƒ¥ÖñÙÝ»©æI~´qUú«(bª‚¦Öð}ÞÇN£X@R€&h‘ ´8Õ%%6­J ¼EŒ”UV¼uO·9óòJ«7Ýøt!2•ëºÓR’Ý>±óâ!f&‰”*ªk½&¸—ÄÕ6 M¥¬r4ß9©³’¬TÜåŸìÚRS^NÌ`5eƈ}Þ2 ¿7ù X$€-Kæû·!K\¹fU4u:òð %=ƒ£è®Ìýµ§S^Fjåˆ[ÆZª)´ñ¾ÞßåGqÕŽ€„óÏR¹&ñ0Ò ŸÝ}’­~~JÒýÕK2ß¿%¦ju²ú¢fÇNâ ´e Xi‘ÅDEÊÚ0Rä±Ù1çN_›<šè¾Òò´Aîrò¿•Ž© >ðÌõü;¢ûR(ØÌÞFÿíq`jtÜ_VWEîï¹6± Ó­1>-¿b²Ï« Ç^–ªÎ |4èÏ]Ä^áÜÄ¿Q1çN‹]/BUÇ”塬M¤6g,Ð(&&&dKà ÊÚ0±Ë+Ï͹·jQjD1R·[ñ§/ª˜˜üeÓÿ>q}bd¡«tÊ¥Çp+qêÔ~Y+}•»kú…Äf­ðÿš[ßàü!3,!{ïë•KW›²Ä5ÿK2'‰YU¾có÷˜7ŽŽÉ*+‹M*jUÇÊòPÖ&R$º š æ“û>ÈÝù—Ïc(Ûù‹¶îNÊ­v=ÿ.úk>1¿‚¬”ÇøNëGYHìH«¦QVÅÜ”èý0¥¦ö—GÇ.ºgçÙè+RžíÝsþob’ºY‡‰çü´:Y‹W)ÐÖ€>`‘ 4“˜ gžîÞZ[Sß°LÓÐå}ÊlØÈsOS×\ãZ¿hl÷v>³»›i+Š]i!)«t©ß‡°„lb¤ Múд®nf ·®>þs]MYž$£ àxðxçÉSÅ®h;@°$Â`p¯Š(kÃÄ"¯¦¬,déüðm‰îkا¿Ë£çÔîì}ºèß÷D÷ÕV–»¾Ä>du?© ÞK!⿬|u~èúϵQ–¯ï>+®`.ú÷ýï(-Ç?œï?Õ±îŠ'Õ”—ß]¾0lëâÏ$"¯:”塬M¤€£‹ŸŸÙø‚²6Lôòò¿$ûúË·FŠýÒÕÓ®=þŽõÜþ2å—fçqÝÛ}Ø=l𽡴5ôåQ(Ø¢Áf÷ çêAðñG×­£ËTf?î:Ó…˜ôþâ?ׯ–d~µ6‘–ßLP–‡²6‘"Ñm°Ð 4zdD»KUq#«¤4Êë”шqk®Æ‰øF̬©${bN½ Å.³íÃfcG|ÝxýSiUýçÂT eÓ˜Ž»ÿ°ú|ûÚãÍkˆÓ)ê´›|ñj»¶dˆZ1Ð,À€ß%ÖïbØÖõ,fý_»³õ„³~™rÚÓO½þ”QLÌ<ÁFïÌ\›†«ï-È·œ2×óïž~þe™©~æšWÛÉOrw.bÔ¯(C£>öL˜ü`À" vmmÄ_ÛÞ=IŒ´š2cÄþ£—ße/óû@ìñ•—‘:<½ë²aíÅ.S©e±=ƒw%Ö¦ìPW”¹´ —£™ü½î_Ãáñ*uÀ¦í½—¯!C)Ð*AX’Ê”£¬ ¼š²²; fÝ—"%5dçÞaGN¯¼‘èzþÑ}-Û)¿Ü:˜ŸûJZÕµ,<åIQ)Û'vß8ÐP†G”ÕLòyéž9ñÒ5¢Ý²Y¬È};¬]ÖâòZcÕ!ÊÚDŠD¿"þÌ`0ŒÉVÁ”µa--¯ôGæmç©ÙññEÅq'ÏË÷<õT4×x+ç~Ƨ\z(ÉñâF¢ª®Å,¯¨¢ÆíbÌ7ÄÈ!µ¯-¶Ï~p3tãj¢éõ0éÂ9Uñh#”塬 “Ì&hƒ±fÍšÐÐP ÃFŒqôèQ###~™CCCwìØñþý{6vìØÃ‡ëêê6zÄ @Bú·›³þ(LýŠÇ(éêM¾tí?Yƒé§_gWáñ ²Rϵqî‡î}D`³±c¡)ÿ÷‰8_‡™¶â­e½u²Ì.Ï«ï-Ö²ììtù¶²ž>JVƒÄ5A—––:ÔÖÖ–N§Óét[[ÛaÆ•ÿºò NXXØŒ3ÜÜÜ ÆçÏŸ‡ 2yò䪪*ž™@x²bß_?œè¾ÚV]f‡„]ÎTqè9Ñ}Íu”^n îK: ¶ÚÑ<|Ó@=µú±oßrÊúï}^£?+ø±†yG<>÷óW'9æ§$‘¡P5à³gÏöéÓÇÃÃC]]]]]ÝÃÃÃÞÞþܹs<3ïÞ½ûÈ‘#®®®ÚÚÚÚÚÚóçÏ_¸páùóçŬ¹Å‰ŒŒ$[_PÖ†µ¼Ôˆ°ëSÇ_˜ÌGŽv'tsXκk‰KôŒéÖîõö!ÝŒ„jÌ”„ªBÊ`¡»{ØÎÚxLEu­ËÙ·;¢ŠgÜyhØ»_œžvuò¨ÌïĦ,P–‡²6‘‚¨»¸üò)½‹‹K`` ÏÌoÞ¼7n1füøñ"Ô'ètzã™HemXKÈûïöÿnÏNœÔ°Ë´Ù½Ï?s*¼þ…˜J¡ìšÔ9du?uEa—3jóU'R„—§­,÷p]ÿÃ;#‡~™w5yœï-Ëq“ðÈŠü¼ÿMG)-jm¤€²<”µ‰D;Auuuãââˆý¸YYY666™™™ 3+((0 ---<&''§[·n<3>`€'1çÿß±#\}VmЛ·fÜщ™%x¤º¢ÌewûÑÝmÈå—in—b*ÃÔ{·×Xf÷ñÀŸqþ—ðHª´Ì˜cwš4Eü Ä‘¸>à‚‚ bŒ¦¦f~~>Ï̽zõºwï1&$$„_fLô ïðí›p÷¥P©Ã<Ký±´ŸgÑ}Ûk+Fý9Ü}f÷5ŠØ4ˆ8Jô×|»=Ï´—îê»z#ÉbÖÜ]éþñš„Ή¢ü[ìܹsݺu¾¾¾¹¹¹¹¹¹—.]Ú°a•*Ô©QøàîîŽçñ÷÷Ç»( ñ“5OOO|ñÈÈHâ²ÒPBk,á‘çÎÈ};ñ)Ù±'Ï'YèNrÕMW&zûÎúÊhž”ÀUBUƧÍ] ºªà©ƒ<«ë¦2i:å罂][ûpýŠ˜s§Ñ< (AÔ%ð³Lt°‘DGG'++‹“™™Ù®];~ù#""† ¢¨¨H£Ñú÷ïýúu33³F‚ìéspss#[_PÖÆnš<ëÉ.Cú*øßQóv©Ïžx?L¦ºÞÆæÝÂÿœÿySYS+Vmb¤ Ë+®¨ãEü)e\~Éø/ðÖcÍúŸÞ@õõécbÖ&P–‡²6¶(ÑNСC‡nÞ¼ÙÑÑyôèÑ„ÙýáǾ¾¾—/_œ ú€:Øìð›‰Ë¹Ë(*NºxýbŽÖ®ÀÿðH Û>¡óމEúL ˆŽZÛãVü{õßq~SeF› ³ª·_¶zП»ÈÐ ‡Äõ7Î××—ãëë;a‚°S¨Ÿ:uÊÍÍMº€6›Åz¸~Ñ}åÕÔÿ¸¼5žFt_Yiª¿»ÝÎIྭ)*eÿÔ.Þ3»QþŠl6¶+ð¿Ùz.\•¡ÕÏdùúäÑÈý`À€hAÔ€ÝÜÜ^¼x±wïÞ‚‚‚‚‚OOÏW¯^-\¸ÏÀÕ.?nܸ÷ïß×ÔÔ|ýúuÑ¢Eúúúƒ·h Âq_âÐ-í±—ƒ<©ðY¿H¸²¼ôÝ5ýfõá;ЊXíh~e±œtýÝÏûQŠG¢ÒøK7d•”ðÈh/â€hq5`eeåððð7oÞ˜˜˜˜˜˜¼}û6,,LQQ‘_~ggç9sæ());ÖÊÊêäÉ“ür¶"ˆÃPem˜ðòØìÇ[Ö~º^ŸYQGw¤ïY!ù¡ñÙxd;UùˆÍƒ¸–¹6’yÓí ¬ë¯J«ÿzûZtú²×Ô W‚iêõß_DŸðŽØ½UÌÚDÊòPÖ&RøNO:¦¦¦&Óàj‘Ÿ>}úôéÓE/J¬˜˜˜-/(kÄ“Çy÷%º¯²žþp¿ ©×ÓÞÓ ñH ]¥‡ëú›ió}ø…6‘yƒ;i?Ý2hŒWÔ÷º®ßÌgjŸó½}Ïyrea'òí)é[vŠS›(@YÊÚDŠDB‚AX’ ›ºyM¬ÿE`‘,Q|ºîÿ`Ýr|•š†f¿ “¯gÐ îëÜÏøâ‚žRT˜kCB©¨®r2ú^\ÓÕPåÊhå°y“ñµ))RRãN] .h´mÀ€E°ät7(xÉ'¯q¹ït{ÃóóÅá¾­«êPC òd¥©7–ö×½—V4/‚ÙÏûUºnX@mMu»sfÌ1kk(ËCY›H‘èW@Ä߀ †±±1Ù*xƒ²6ìWy™ïßþoê¸šŠ NPJF¶Ï ÿ9Ï0¢ûÎék|i¡˜Zž[QÕ!ˆØäUÖÔN:þêá§xŒ‰Ú)Ëìç{1f>Roo.fmMey(kà ZD nÀ@ó)¤»2aDyn'H‘’êwäÜ‚Êÿ}¯ŸxaV#_·^Ðï pQYS;ñø«Gîg®y¨]Ò‹íëñUc“Y¡Š:ºdÄ4AÀoSž“}cæ$Ü}1 ë»ëÈÊu¢ûNéeð/¸/À y©;+úç‘’·=¿³Ýš-xLƒ~{î´êÒR^@#€£Kdd$Ùø‚²6 Ã"##k**æÏ*¢§â‘¶«6oùÑámjýÜFN½ ®.±—¯û¢_udK„˜åÑd¥Wõu°ÔÂc²Ëî>Ïù÷áÎü™µ5ÕPuMem" ]èt:Ùø‚²6 Ãèß¾¹Í!Ž‘éè4ÃKÖáÙç\`DuIIÀ¼é¸ûbŠþ¶“+"Êq÷¥ÉJ®ì î 4ûöê× _¯UT×.~EÕ[UßñÁù8Ÿ| ø ´zXÌš; gç&&à1FKÑùx+}•ëKŽЂ0^u‚y¿ MV*`EMT±tØryrv'H¥Pn.ëÎGG€Dñ÷“oK|ßãÁ^Æ* Ÿm/IŠç©ÒÒS®÷D’: ‰HÜ ,kkëØØXbL\\œ••Ï̽zõ"ÆôêÕ+##ƒgf U“›˜ðpýr<¨dh|Õn ˜ÖÜ ‹ÅCÌÖŽ´ÀƒoÅ¡ã<åÔêzÓXLfÈ×’ïpkê@Ô€ÇçëëKŒñõõ0aÏÌÆÆÆïÞ½#Ƽ~ýÚÈÈH„úıý5HÑV]Z´hnÍÏÏÁ¥åä£gxE¤âæ 0Y?Ê‚,yB‚²6 ä5޶CÓ»Œï¡‡GÞúTÀX|Š"%Å –çå¹9×VWñ.BôòÐem"Ñ6Ø’’’îÝ»/\¸pÉ’%†:uêâÅ‹±±±ŠŠuëqÛNœ8qøðaŸ²Ùì§OŸ®X±bóæÍË–-|Ä›  †±±1Ù*xC‚66;ÐÝ9ù^0Q¶æôÎøú/Ðú[h†m('M%GžÐ ¬ yÍ×VRÉìïñ1½n Ûmœ%v ž³ÛœyŽŽ‘%APÖ†‰Ò)Ðu ÔÔÔ5kÖ„……a6lذ£GgK᪑7nxyy%&&bfii¹víÚiÓ¦5zÄ  òòèÁ¨CõÉÔi«·”Úà¯L4^oBî:ƒ€“š[n¿û >*MVê/V(û^ýXß‘‡}ºÎtá³7€’hÀb ¸µ@Œ¸9ûöÏù½©½†z-È/«æ•奣<w5T!O póôsîˆCÏkjëž4hë>¬IŒá¥åägܾ߮‡-ya‘¸AX†aøxz§¶âŒô%®¸ûJkëŸï쎻/•Bñs·ãr_¨º&òš —6K­3óê§AM˯¸Üw#U±nALfUeð⹕…dÉC ”µ‰0`t!~ŒbÓV[S¼x^EAÝ,Tiép§Ã ?ê'Ú;Åz¢×^PuMä5™†Ú\˜¬Ñ¾É¨ˆs©ïú-JcÜ_µXlK¶®ª“$º š Ñ'|Çæ˜s§ñ`ÆBï£ 5<8«ÑåEvdè¡`²Ø£D=NÈÆc¶j}Q½²ܲ³÷ò5dH„š IäsÈ¢ûÖŒ˜}2£~‚ÒnFªg]¡ @i*åúR{3mE<ƻĒÕg |~ð/zd Ê¥0õë£õ„5L;WƒiQW”¹½¼‚¬9â@h4eo/ïCûy­–U1ÿ1sÆ´ 9AvmíÝn¥?xÌñ´yÀ€Ñ…8Ç)jˆZ³ª2hÑܪ’Ÿ+:Ë)ܼ=«˜0ðÊÍ®ƒŽ"¿Ý%¹êš Èk2´õ0V=CX—úK^åÉ0iiN°<'ûî²…øÂšâ—G:(k)Ý }ÀÈò`í²O×ëgK;ÿïëéõßøî˜Øyç¤Îd耦ã~)æìÓÔú NŽ…ýŠI½W®¸i; ²€Æ€>`@‚H ¼Etßìq+ˆî;¦[»í;‘¡ š…Ïœvfêxð|®NÉYxðõ ïÔ§ádèH @‹‚¯)7ÔwýÖXõ=C­çlª¥àëÖ‹*ÊÂ@DÈISo-\÷4YËbŸVÃ4´äÙ,Ö½U‹Ê²'7`ÀèB\±5D¤­¶º*xñ¼š²ºÕØŠª¾=VWÖMÁ!/#°¢¯¦’,YòZ”µa ¯£ÍHƒve±þ™SZsgøvL¶Î’Ës²ï­tg³XdÉ# ”µ‰0`t!Î}"Ò±{kvüG<ø|êáÄÜúucNÌéÞÃXU˜r$°êZ ×d„Ô6ÜJ‡Ø‡ý½:vÚ>áÝòâÚDÕµ=$z ÂBŠ/Ì›O ”:zÕÉÚx*̹´XlöXï>Öµ6S(غÊ'ºOë`¥JKO¿y×À®y_€AX@§$óûƒÕKp÷-íØç‚TO<µ‹ ̹´¨ÊåEv&š œ ›UQaT7°ŸÅd†,qŧ_Ú0`ÀèÂ`0È–À—–ÕÆuÇ©–Wù·û²Šêº®_eyéËzÿÖœ’Su-Èk2¿¥MCQöÊb;©º;pQóÆ€-µTNëyTüòÄ ÊÚD 0ºøùù5ž‰$ZVÛ ¯ýo^áÁ§ìO-ªŸ”àŸy¶ô”«@É©ºä5™ßÕÖÏ\sÿTk<ø1¯öSýÑ_?øà{¾Åĵ­ªk3Ht'(ô£@zô‹ëSÇá« ¦_|’ÚO]6¬ý‰9=øì ­6s:ù*àÝwNBÁÖëFßæ¥åiÎ÷#4;ÂWï$}À@Û¤ª¸èÞJwÜ}Ë»øÒúá©] UOïJ’49 vqAO|©6»¤?¹RÓˆdVV„,[P[]Å¿ u Iè–µÅéiœíZi¹ëý7–TÕ™±¢œôÿ–ö–—倶Œ*Mæú{Yéº[qn3hän¥.˜“ð)rßnòÔ¢ ]<==É–À—ÑãJâ›x0zò_ yµxð”sßíúÅióU':@^“i²6;3õ]„¹Íßäbñc7áÁ·gO~ Ô\qm´êZ;Ý Šx0ƒÁ066&[oš¯­ˆžúïÈÕ%%œ`fωÞZ“ð_cš½áõ%ö$Ê(kÃ@^3hŽ6›=êHTh|6'(M¥¬ýv^ûs$'¨ ¥=ïñ m²ä‰”µa’ÙÌ`0œœœTTTTTTœœœÒÒÒøå¤ðBV¶ñ å+²™ÚXLæÝn¸û–©é_4p¯ps¥sÍûê· W¨yM¦9Ú¨Н[/•º9)™,ö•.n•r*œ`ynÎýµK›ùUR[­ºV ¢\ZZ:tèP[[[:N§Ómmm‡ V^^Î33»ÞÞÞS§NˆFè\ IDAT³f@x^zøþî5g›M¡Ü¹«àç„Ï2RTÿE½”å¥ÉS$ÐNUÞ×­¾ÎHzIíãñõ_%} õ¿HŽ2@d jÀgÏžíÓ§‡‡‡ºººººº‡‡‡½½ý¹sç„Ù—Åbùøø¬^½ZÔ"EMdd$ÙøÒmßß½~ås~p\÷¦ Þn÷OµîÝ^£YâÚnÕ‰×dš¯mdÝu#-ðàÓbå¤~sñ`Ä®? ¾¦4¹ð¶]u­D 888ØÅÅ…ãââ(̾!!!ºººvv­~Þ`:N¶¾4Y[MyùýÕKðïŽ~˜öú¥ ž:ª«îG >»ŠCž@YòšA‹hót²îiª†/k +ÔîÀÙ®©¨Y¶€Å¬!Qžˆ@Y›HAt’®®n\\œ®®.“••ecc“™™Ùè¾C‡]´hÑôéÓ͉ø ¬6Iè¦ÕxKZ•Œü¹‰gR‹ë_ÓV–‹Ý=LOMž)Ù¥¶;ÂK*ë&ƒë¬Âš{k‘».ØýŸ}×lâ¿7ÐòHÜ ¬‚‚ _Ú!555óóŸüãÇ)))NNN"“4Ô§á±—/áÁ'cwãîK¡`ççÛ‚û€¹Ž’÷Ìnxð¿bêëQñàË£3?¼#CÐò jÀMæØ±cK—.•–vÏÔ ÅÝÝÏãïïwQ0 â'kžžžø4â‘‘‘Äe¥¡®*òón/š‡äüÜyTX¹6ž­J~wôÏJ€ÄP‚A¦3zâî°:¦uèÏÙf1™÷W-®©¨@ÿ,Z] ü숶Á6­ :77×ÒÒ299™ë홈7A»»»ÿóÏ?d«àM´/šû9äg»P©ÝñÁûKªë*ßÚ@åÍö!´ßYï¨Åå‰ ”µa ¯´¬¶ÂòšÛÃèyuŸ~èÒ(K¬T¬*æmç/ú×Aåµ,(kÃDéˆ:ÐСC7oÞìèèˆÇ`ñÁ÷üã-k9Ûe²ÊÇåW×½þv7R}½}ˆ¬4<ùÀoSTQÓm[ãçôXFr5Kî-—©­æ'¿l>jyêÚ,Ð ´Š3҉ϭÃÝWNšêçnî MC•&sqAOü˽´*™§}–à©¡[ÖU’£ hp+Z˜ÐÍ«ñÆçS‡Ôú vLêÜÕ&½€¦3´³öÒ¡õ:¡J6©Úu+j—eg=ݽ•$]@SFâR¨ÁO[üÍ«ßÂC9Ûe²Ê]ê?X´5Q[?ÊBâZgÕ!Èk2bÓvpZWs%Î6‹Í¾Ý{e•tÝé×üðOÈ’×PÖ&R$ºñ>`ƒallÜx>2à©­"?ïâ`{|4æÍ!Û£eÌ8ÛrÒÔ·;‡vלϭ®êÐä5qj‹JδïëçíkDÙǨcœmC#×ðh™óBÕ5è–DP¾"yj#~ ñÑd íšl%6÷ÅZaÕ¡Èk2âÔÖßBsÅðxð±RdíºÙ²ŠÓÓ"ìn¸ T‚€-×ÐûIw9Û%rªAÖóð¤Þí5ÄÖø ÂÞ)Öºu Ñl6l¿oˆ~ñŸŒ×/É“ 0ºDFF’-/\ÚªJŠC7¯Åƒ÷û¬(dÖ]ZrÒÔóóm¥¨"XrAhyH²6 ä51kS•úwa/ü?+³F6Üvg›Íb=\¿‚YUI¢¼ßem" ]èt:ÙøÂ¥-b知Yß9Ûñú½ßÈÕ7Žýõ‡•ø—ûmEU‡ ¯Éˆ_[_sU#Ìñ`„ºý7Žœíü/ɯŽ"f†ªC¤G!‰Äaµè‘7fNÂØl ÃÊe8–Ç”â$õn¯åá æ×_*ªk»oKþQ÷១TŲ‡«¤Y5†Q¥eœïGh[u!U`[aˆRS^þhÓ*ìçÕùÈ~ î¾²d4>€DA“•:ëZ¿¨vz-íi·Ùœm³æáúåìÚZÒÄ 4‹ç÷ÑS9Û)ZÖ/”¬ñ¤­ã;‰¿ñ$ K­Åƒ Ssè:¤«˜r¶³bß¿;wŠY€€£‹»»;ÙøÂÑ–õ!&æÂßœ˜j)Ù ûú»©nÓ‘\yh‚²6 ä5µíŸjm¬©ÀÙ®ecýÖÔRꢢy¦~%W^£ ¬M¤Ht'(ô7“é?vHö§8Nð®ÝâõÞœm)*åÕ¶Á½LÕÉS’Åý¸c¼£ðàøŒƒâ¯s¶ú˜~#£@gP>`9¢}ŽàîKW5¦ÑOZ7ÊÜÄÉènºsúÖOgñÐhÔ%ÎvÚËç¯û“¤ 0Ðò¿$Gûxq¶™T™À~«Y?-t•vNìLš2TŽÎꦣR7G5 黊ýó­—ø¡ €è0ƒÁprrRQQQQQqrrJKK™ÅbùøøX[[ËËËwéÒåúõëbÓ):üý}he³Xþ.ÓñÏüŸv‘V[7ñ,…‚uµ¥ÉJ‘§Ã®: mmÈk¤kÓT’õ™Ý&R´£;ŒâlW•_š7“$]CzÕ‘¢\ZZ:tèP[[[:N§Ómmm‡ V^^Î/ÿÒ¥Kãââ‚‚‚Š‹‹ÿý÷ßÿýWœjE„‰‰Iã™È îò¥êÔ/œíïÊFÛ Å“nï`©E’®z­: mmÈk(h›fo8ÉVÞ·˜Z(¯ÁÙ®üøáË£{$éjªŽ…äííýîÝ;âcÑœ9sìííW®\Ù0ó“'O¼¼¼‚ƒƒ÷(0« ”eÿ¸à`WU\„a‹B=;âp V×Ý«¯&ï9BMA†T ÑdVZo -(«á»×Ðç<ÙÉÙV10t}òºáBI€`$nVpp°‹‹ 1ÆÅÅ%00gæþùgùòåbÑ`Ovná¸/†aQÇãî‹aØ)p_ =5ùýSêg¿Š•1ù`П³]œ‘udIº jÀñññÝ»w'ÆtëÖ-!!gæ—/_–––:88((((++><**ŠgÎÖƒÁ [7©a‰·8Ûù4­Ðö“𤙽&Ú葤‹«emÈkèhss0f¥ƒƒ»Í+•­›çݹS?>Æ’¤‹/èT˜AÔ€ 444ˆ1šššùùù<3gee-Z´hÞ¼yt:ýëׯ³fÍš8qâóçÏÅ¢T„øùù‘-ᘕÿ\ÇÙfc” û•?'¹ÓT’=:«iÊ€ZÕAYòš:Ú(ì´K|,dq­ô|¡¤ÚÚÐM«P›Ÿª3ˆðoÁb±>ìêꪭ­­­­=þüƒnÛ¶M˜})| ÎÌâïﯖÅ`0<==ñ$OOOüÙ-22’ØiÝüˆ+„¥XÂÙ….…ôoœí7ÆñrFxÒÅo•…?Ä AÈ Dº~%xxx®A@ ¤kP‚‡‡éø•àááAº¼ ]¥„¯£UºÅkÛp¶³bßð=/ —àááAºŒ¿`"ÑQHºººqqqºººxLVV–MfffÃÌzzz?~ÔÒª|›““cjjZVV&ø(0Kxr?ÿçë8ŬÁ0¬DNÕkÈ‘RVÝóõÈ.ºÖõ'UÜ0YìÞ»ŸÄÐ 9AmJŪ°5rÌ* Ãd••çG¼Vj§/° ÒaåççŸþšS×מ™½èÉ*›…a˜ª‰©kø+iy©1 ÕªÃ!¡ zúôéoß¾å羆=úíÛ·Ó§O…,eeåððð7oÞ˜˜˜˜˜˜¼}û6,,L‘Ï÷ãòòò7oÞ|ôèQÇŽ ÿùçŸëׯ7ê¾èƒÈ¹o'Ç}1 {bùî¾T å¤sÝC¦êx‚²6 ä54µ)ÈJtî¿Jë¼6©›º®ˆž}›$]¿€fÕ‰¤_E âoÀ(õ!æòøal ð…vGî­f×9îÊŽÍê.po`ÊÉè[o38Û Tæº'Uª 0 “’•›û8J£ƒ…À½%‰› À0 OOl+Ìc=Ç}Ù%¸×bÜ}5hÔ]“x‰CÒ«N(kÃ@^3@Y›ÏìîŠ2uÿ¼å,éÝæq¶k««Â·m$MÖOP®:‘Ò¸O:5;;›+²  `æLt×Öh¿&…ÿžËüð޳ýN¿ÿòõ¦Ï6¯@yÖIÒ«N(kÃ@^3@Y›žšüd³*<øF½[¢VÝÌ9©OÓ«”«N¤4þf½qãF__ßÇÏ™3‡ºhÑ¢Y³fíÙ³Gô E4A  <'ûü ^œiŸËe½‡z²e9Iðá/´:jYl{ÂgÁíX%«Â×I³j0 SÖ7˜ñià™Mмÿ¾··÷¸qã’““W®\¹gÏž»wï¶v÷±g¾è«Y¸ûÒd¥N¹ôà¿(òÿöÎ<®‰kmÀoB{ €€È¾(‚‚¢(jqw)±u….Š_kïµµ·W­´uEÅÝZíâÔª­W©VEP÷%AQˆBd‡|LR•5™ÌÞççïœÌœy’ȼ9sΜ£ÁåüòQ_zÔd!×à¬ã»T\–ÿ8uóöÔ:/-êîÛ·ï¥K—†îëëÛ»wïsçÎõìÙ³ùÃvËãK©¹‡P±ÈÐñ¢ù`ú¥ï\ºà/eiô·~6ÂÞ<çàÿLW>Û`ƯۊïÜbÉ«óÒŠAXÇÐÐÐÔԔѹ1Å9NÕI}míéo¾™ ê9Ü¿Z<ùÅ_:ñÝ'R±ôIÁ…W¿¿5Ð|>pà€‰‰Ék…B¡ð÷ßgF ‘£¸b¥zÈKM¾yô0ß7vÉìâI¿´2¸ÝuÄŠ[« Yd7@=% Ù þ©çl®ÿ…E’¬üò äË{_ÙýËÓÜë,ºu*p&,r±µµm~'ÕQWS}æÕØ«:/¶oÝëÑÏÎèÓö,ºµ’õHvÔS’Ýà ½oßu±õ8CpŽö “êkkÏ„ êCøGÇö-üñÇ[·nÕÕmj¥¹òòòÏ?ÿ|÷îÝ̸1ÂRäâ– I«—Rq‚ã»'åw¥¸Nê·Ã8ÙSCDõÍ*ØœJo~³Ëë±|JÈq›v›„sÊaaÖþýû½¼¼Îœ9ÓØ§OŸöòòÚ¿?Zˆš)Ëœ¶eKtLœÞ£_š=ܳ/‚t<ÞíÓõ½¾]éÍ“nÓË5åmâóËæáA˜£Ñ|ûöíN˜0aذa?ýôÓÍ›7ËÊÊÊÊÊnܸ±mÛ6Ÿwß}×ÛÛ‡b1‡X,VÛ¹/¨y)_1ôXïªdTÜÅ@keð[Æ^©Ó­ ¬G² žìèmžî¡Ë—ÿ±—‚Ö©ò§ÊŸ=M^£¾¹ ÿ蘣Ñlmm½k×®GMœ81..n̘1ææææææãÆ;sæÌ”)S?~¼sçNkkkuêv*¢££Õs"QÒ¹;ÇRñ-Ó^ÙF wͽ„zoYtAmnmƒd=’Ýõ”€d7hDÏÖDw‘z3Õr¨ØP>UVÖÞ…W¯°èÖèÔ Ø õµ5{ü—ܽ µ\ÍF¬)Ð0¢^ìd’¼hÎ{† ˜êÚzïãoÈÿµ­*ø<1œ#“€ÕÀÁS‡N Àõ€¦ÈÜù3•} Áñ]:ûjp9[Cútú?=éàðyÜ-3<èM‘V׋݆Rñ£‹)7c±äÕ)h>sG ~£”?{šºQ¾ J±ŽÙy‡ ôKÿòsìccÈ’‚ êc¤«Ùû^ÝèÍ8×i/ùT|nùw5åå,yu|šOÀ2êêêîÞ½»hÑ¢Ù³g×ÖÖªÁ¯3Áô)W.©*+¥â£½?¬–Éÿ?˜ ´–6µà•Ü”d=’Ýõ”€d7hNoÃTw}-ù´wRàŸ|5KZ˜ñÇ ìºu`Úxkû›o¾Ñ××W¹:!¼X,ÛØØ0Wÿ“쬘 #dõõpݬßÞ>ÿ¢_Š™í5}PSÃë˜vS’õHvÔS’Ý zkOÜžP>`ÎÅÛw@ƒ¯õQBªÐžÁÕwÿèˆëž9sæöíÛU«òb±888X ‚àà༼¼&vî·Ç™ý)“Yô*ûÖhðõ ¥_îÒešw3ƒÛIþk²õHvÔS’Ý z_ŽvrµPq=@¬ûÇõ.ÔUW_ñ=»n•6&à®]»¨VE©Têëëëéé)‰D"‘§§§ŸŸ_y“]²œ[ÇàúÁß ®\¦â³öŠyò?ù䓹sç2!DqôèÑÐÐPÅ’ÐÐÐØØXæÎH "‘ˆ¡šS7­yYTHÅ÷œ^ýjÞ+sÖ·.캩’õHvÔS’Ý Åzë§ôèÈGc•qµO9Rqñ[Wv3ÕíHøGÇÍ÷-¿ÖŸjddÔ½{÷yóæM™2…9-ssóììlsssº¤°°°oß¾Ý÷æp8æææÅÅŦ¦¦¾¾¾ß}÷‹Kó‰„ðAX ñ\ô`÷ðuÕUpOèò³×ú¥=³ú}8¤“.K‚ ÅÊc·ÂåP±ȾHYÜUšÚ†F3“3uŒ__¶ÃÃæ ¬×úV%ÉÅ‹; ‘HŒKLLLJJJÛ? à?þ(++KOO÷òò6lXVV£†í—s˾¥²o=‡{´÷‡ty?;£Át(‚ 4_uv6×§â:às›AÅ•/ž_X·’=¯H™ +66ÖÇÇG[[ÛÊÊêË/¿\²dÉÂ… [r`csŒÌž=›Þ'&&†î¢‹ÅЬEDDÐÓˆ'%%).+Mf â ‰wO£JR­G<Ö¶xõ9ÀÖ>\§]¼ ¬kÀ˜«¡0ÿÑîMú¥Û†Ý¯›õ£â¬è]{ÖE¶‹wцX˜rJF$fff………Š%-<¼°°POO¯Ù݈}ûaaaª­°¾¶vß µ–‚µ–‚¥¶]õ?ü >:DýûhÇevÝT Éz$»ÉPO Hv“µ^oìúdúú`:cç*+êÒqà}ÖÝÔ s™‚ÐNP__ß… Ž=š.9uêTddd|||K/,,trr’J¥MïÖÙú€¯Fï:½pÿ¯ghªõ*6ÐæÝZ5º«‘6{j‚Åü2ïãkêê©Í±wù=ß< Ú³ßqÔ8öÔÔ qq0¿¿TT”bITTT@@@ ?xðà!CðjÇT—•]X¿ŠŠ ô­.Z§_úö]̾‚(ÒÓÒ`ޝ½yÖù½ÚBy¼øj ¢$„&à°°°”””•+WJ$‰D‘––6kÖ,zÅûò~~~þùgaaaMM̓V®\¹|ùòU«V±!N.Ö¯*ZDÅGÝBêAþ:›ë9Ú‰=/AeI`Ï.ZT\¼ã¯&ˆ~.zpe÷¯ìyuMÀ ééé¶¶¶¶¶¶—/_Ž×ÓÓ{ëÎáááûöíëÕ«—®®®ÏÍ›7“““===Õì¬r‡ (Ésу¬½òiL®™÷»cØ~iÃTw>¯Õÿ TèÆ$ë‘쨧$»A›ôŒt5WLt¥7¯˜Ê¬§lXý²è ‹nÛbggwøðáÆ^U¼#ïëëëëë«)µbk«²GrÏ.YDÝ2ªåjžì9.éjæïaÁ®¬G² žìmÕ›5Ìî×ó2>pb{}øï”ï92YµTš²~Õ¨ÈM,ºu:×(¤×è$ƒ°Ä~ð.Ç;øŸt ¦b—se™_¯L<‰ H§åÂbŸUçé+åäë;úç_Ž†Æ‡§’M]\›:¸CÐéa!ªBVWwvÉ7T\¦exÞñ]ú¥Ïý1û"Ò4CœM‚ûu£7O¸L­äiumYºˆ=¯Ž&`r¡W†kûcžæÊ×ø<Þýƒ ŸŠõøßµlÚgæÜ˜ƒd=’Ýõ”€d7PNoÃTw]¾|ÆøRžÞY;*%ž½Ç®[»0¹DGG+YCµTJO÷H`—Ñu0ýÒò‰®&ú|Ý…d=’Ýõ”€d7PNÏÚXgÞgz3ÑaÜ3]ùDýç–†+¿JástŠNÐÆèð}ÀI«–\üq#È€óóÀE÷_`tµ\]îÇã⪿‚´ˆòê:—oNå•TP›½Ÿf†^ÙBžË"=g~Êžã`0Òj^ˆEÛ¢â+]½éì ›§»cöE¤åèò5"‚ÝèÍk]<ï å}X)ëWUH])iLÀ–Ĉïk«* †Ë?é2™.¯oב®fìy!Ò.™1Èf CÃ"uG]§Ë8¨|ñÔVV$G.cÏ«= ˜\fÏžÝòï:.JÒÂüÌòEÓ-}½úíùÚC¬¸±Éz$»ê)ÉnÀ¤ËY5©a©à»B—[¦½©8ucdUY)‹n„Cè($__ß… Ž=š.9uêTddd|||c‡deeM:õÒ¥K-ì3N|ùYÎû Š§µvèÚ<ª|Æ ›èÙýYUC¤1z]òéœ"*6¯(üê·Üú:8÷?> ¾gUMY:Ý ¬œœÅww÷ÜÜÜÆö¯¨¨ ݽ{·óv¤ðôFNî!ùú_çíÆÓÙW‡¯±"صñãATÌÚɽ¹¯î¹=ѱ¸ôj©àŒ_·Ñ³Ó#¯Ah–H$ÆÆÆŠ%&&&%%%íÿÕW_½ÿþûÞÞÞÌ«©±XÜôç—+«¯€ZÂDûqtù¼ÑN¶&ºìº± Éz$»ê)ÉnÀ¼ž‡µaè†5}Ow®âi@meÅ…u+Ùu#Bp«ˆÍÉÉY´hÛ"*&::º‰WÅ)IÏ'PqœSPG¾Î ¹@ká„캱Éz$»ê)Én ½]õ´xT\ÊÓ?k?ŠsþØWt=›]72!4 …Â×Ú»ÅÅůµ‰iþóŸÿDGGkhh´áDœFPœ™%&&†^-K,GDDÐ/EDDпݒ’’Çò)_ƒâ !¯×°bÅùeòéÎ ô­2º½Cï9Á²Ì@›§*‡Æj QÛçІ†ʺCc5„‡‡³îÐD ááá¬;4QCxx8ëÕκC5„‡‡3ípÿú寗 ¶óB[²úúÓK¾i¢†ððpµ}MÔÐX:Æ tR«a5ñ5ýîÚï ¬œ??ñŧT¼½ß×·MäC{Zd/©ÂeAZÎ˪Zç…§ žWR›ýó“'_ßIÅïïµõΚ™tºAXþþþQQQŠ%QQQoÝYöt¡:\ÕNmUå…5+¨ø–i/:ûÀºÉª\ôA¤Uèiñ–6ŒÍ°|ç±@þˆQbÄ÷Ô˜„†Ð–’’²råJ‰D"‘H"""ÒÒÒfÍšEïÐæºR¼¢HÖžíÔj_2çD÷èòá.]Æ»[°ëF$ë‘쨧$»õ>ñ±íõj^À±î“©øÉµ«·þú»n¤Aî=؇Λ7ºçìçç·iÓ&ҵ›¾'Ð1ž‹Å666¯V•¾Ø1¸O…¤Ò»ùtû„*çr8—¾ÑÏΈE7r Yd7@=% Ù Ô«w<»pÂÆzsVæúÏ®€¡µÍ'‰—5øZ,ºµæ2шiOÀo%1bñ¥m› †Ë_;tµ„/¤ÊC‡Øì…3o BŠórt}ùøË”ï¹²zð]é9óSVÕZM§ëFÞŠ´0ÿÊî_¨ø¼ÝX:ûjkj,™7!Åy9 ôºeX¡âÔMkªËÊØó" LÀäB§§I^QSQR¾à¼CÃÌ_Žv²axæf݈‚d=’Ýõ”€d7P»ž‡µáôAÖôfœspµ*JŠ/ý´™]7rÀL.ŠÏ@ÉÝÛôÄ“§+¹ÚTlªÏ_8¡;»n¤A²Én€zJ@²°¡·b¢«_>=à ¾a¢í*¾üËeùìºBûëU!í«øð‡“ï9 Ou-Ö‰¨ãÈ<ý0Ýãß#YUCy ßü™³úï[T¬]_¹0q¾^uxÌøxTä&VÕZöwv]L¡²/œt¦³¯³¹þ§#ìÙóBi”…º›ê󩸒«}Æá]*Îþ=ªøÎ-ö¼Hp{@&KŒXL…y‡kæýèW"‚Ý45ðKD„D u4Ãßu¡7S­ýŠuÌ@VW—¼f9{^¤€×nr¡g(½sòX~Æ%*>Þ}’ äc ½ì…“úwc×LHÖ#Ù PO Hvöôæø:8šéQq‡ç4‘Šïœ8V™Î®ë´§NP•Ó.ú€ëkk÷ø *¹{nt鳫ïôKñó}|{vaO A¤y~KÍ›ñ«<×r@67m™UéC°ò2åÐq6ÍZöw^®ï¡²¯ŒÃ9éD—w·Àì‹ ùLó¶¦'é“çX)Tü(íÂýø8ö¼Ø0ÑÔVV¤nФâË–ïäÈgkãr8Án‡ B ¬T¸^Ýö —I\¹TVWÇ’û`&—˜˜˜Œí?QÌÕr5O+4CÛô±1dO WÓ$’õHvÔS’Ý€m½Ñ½ÌG¹™Ñ›wŸ,ãpàÙÍœÜÿ ü£cLÀäÒÍÔ$ýç¨8Ùf¤D«aâÉeA=ÙóP\ƒ@HÖ#Ù PO Hvô'§Ì7°Î²HÅI«—[wUÓ2n¤ ˜\8—.T>—@Offi?]þ¹Ÿƒš'ž|vš†d=’Ýõ”€d7 @ÏÃÚpò+zó¤ó¤:¤…ùzwo°çÅ&˜€ EZ˜ŸµwŸµ_Γg\#]ÍEþ=ØóBi#+‚]ù÷„ ­žÔ‹CRë7$$„m…¦ Yd7@=% Ù ÓÓÔà.ŸèJof›÷:ücéÕΡ X*•úúúzzzŠD"‘HäéééççW^^þÖçÎÛ·oß“'OJ¥Òëׯϟ?ÅŠ‹·¿o1÷Ðþ§¹×@ÆáЋv€¿‡ÅÂÖ]°±±a[¡)HÖ#Ù PO Hvòô&°R\¡á¸ó$*ÎKM%cMK½: xãÆŠ„Θ1cÀ€sçÎmÉá÷îÝëß¿¿D"iz7¢FA×ÕTïæõBô.[9ÐkUÎåp²–ùõ¶°)‡ ¢jÎäZ›Lo†e¬ë^œæî}BŽŸbnúuºQÐG U, mááššš x1HÖžíTö­åjžRXwaÆ`k³oRRÛ MA²Én€zJ@²©7ÒÕLq…†Ý'Q£^ždgÝ:v„=/õAhÎÉÉñððP,qwwÏÍÍmöÀ/^$&&Nž<ù³Ï>cÌNõTK¥”?—bí+Ñ6¡b>»ä=–×]x+"‘ˆm…¦ Yd7@=% Ù HÕS\¡á‘]¶…'G.¯¯­aÏKMtV>ŸÿòåKMMMº¤¦¦F__¿ªªª±C8 ÷+FuâĉfÁäÜ‚¾°neêÆH¨âiGú¬)Ó4 Ê¿ã¼~JoVÕAdêÏ—ö_|DÅÆ•Ïæ'}£!«€Q«7y„|̪šœNw º Èd2™LöäÉ“}ûöåää5æ¾iÊ‹ŸelßJÅgí'ÐÙ×@›·`|wö¼Age°›Â ¦—¬ä«6¥nŒ¤æÃïÀš€…BaII‰bIqq±±±q³š™™M:5&&fÇŽ-9§fÏžMïCwŸˆÅbÅÔAOqž””¤8j¬å5œY¹´Z*)_l3’~©Gu®™@K=XÖ€5` ¬Ô`ßEOq†ÝSNAU)¸²ûWu¾‹ÆÒ0)÷`_Ã××wáÂ…£G¦KN:ß’ÃËÊʺtéRYYÙôn$Ü‚–æïâIýÐû_ÏÐTkùú\f­ñïþu«v2{öì_ý•m‹F!Yd7@=% Ù ÈÖ ûW,otYe-µ9öî!¿ûÇ@Gh–šÍ70`ÕŽÁLÁ~z+6lÈÌÌ|í1$//¯/¾ø¢%‡ÇÅÅ-X° ++«éÝHHÀqÿ{mß^(Ñ1]ûÎêZ޼ßz[hŸÏF8°ª† ¢&¾û_7©X§¶raÒuk¤0ø«…ƒÿó «j¯8,,,%%eåÊ•‰D"‘DDDPÓ]Ñ;(Þ3fLlllQQQMMÍãÇwïÞ=sæÌU«V±!Þ:$îåüŠ;¿Og_û.z3}ìXÓBQ/óÇw§{Ü*xÚ ¨8ý—-åÏž²çÅ,„&`ƒ„„„ôôt[[[[[ÛË—/ÇÇÇëéé½uç… FEE¹ººêêêzyyýý÷߇7nœšÛÀ…5+êkk ßÀ:ÛÜ‹._5©aT‚ H‡çµ1§)Ö#Ÿk@ÍË——¶nbÏ‹YȽÊÛÙÙ>|¸´´´´´ôðáö¶ÿX‰Oñ†Àˆ#:ôìÙ³šššüüü?ÿüsàÀj÷m5ÏnæÐ›w~_öªMß×Öè}¯n xž4Hv²õHvÔS’Ý€l=Êmޝƒ‰.URÃår ¤â¬½;Êò³&Ç$ä&àObÄY}=Üö¸eÚð°ïªInÔ“é¯ýæ ’Ý€l=’Ýõ”€d7 [rÓÖÔXØ0ïPF·wžêY@mUeê¦HÖ䘄ýQH,Ââ ¬Çéi¿Ž¡âŸú/¸o,_shÓó ‡²¢„ Â.uõ2÷ïâsóK©M'é3®nކÆÇ iÆNìÌ‹Ðéaux’V/£‚¦tö€Õ“z±d„ Â2\β †Fp¶yÿÇ[ÕÕ¥lXÍžS`fgÏ}uÌl¯&Eéø®I:{Cþø¯Ýó;Ÿ_ZIÅÓbOYöW÷C.ØÜAÕÕ]X'ÿŸ”Þ͇ξšÜ%$.;ˆ ¢~VOêEO¶ôÐÈù¦©;'®\–`V+¹ÿ;P|û&Ôr5Ï8ÐåŸøØ:™é³ç… B„Ü-èÍãÝå3%<º˜"J:Çš–ªÁ¬>êkkR6ÊŸfK±ö¥æymMo\ÞÜŸäIv²õHvÔS’Ý€l½·º­œÔ‹ûª\ oEϘ´j t”žSLÀêãjÌž¢‡PÅÓ>ëàO—ÿËÏÁJ¨óæþ!!!jsk-$»Ùz$»ê)Én@¶Þ[Ýz[ ¦ ´¢7㜂ê¹PxõÊݸ¿Õ'Ç$8KMo¿¶ªrÇà¾ÒÂ|8ãçD• tx÷ÖŒ5Õç«GA¤½p·HêºèLM]=µù~ÎîÀ´GÏϤp¸jj@â ¬vOæÎŸ©ì[®©wÞn,]>o´3f_A7q2Óÿèzó´ã{µ\MxvëÆÍ#²ç¥20«ƒê²²ôm›©ø¬ýøJžü†³‰>ÿ«1N•””¤¹6A²­G² žìdë5á¶$ÐU‡/_§õ¹¶qšÕp*¾°ne}mܰ:¸üë’(奨Œ¤ËNè!ÐÑlì(‘H¤¹6A²­G² žìdë5áfi¤ýép{z3Þ! Š§ ÏE®ïÿMrL‚}ÀŒ¿ý IÉöAîÕeep¸çŒk?ª¼«‘öÝÈ1º¯~Ü!‚ oòLZíðß“e•µÔæØ»‡üîËn3“3yZÚL `p;&ý§ÍTö•è˜\ê6Œ.ÿ.À³/‚ HÓ˜êó¿ÕÐUwÞn\¹¦”å?ÎŽÙÚ–*ÀÌ,åÅÏ®ìÙNŧk¹<*¶3ÕécÇš‚ HûáëqÎÆzòÁª<ÝÄWãXÓ6¯­yù’=/eÁÌ,ôÿ§º™]ÓåË‚\ù¼f>üÙ³g3+§$»Ùz$»ê)Én@¶^³n†:šÿçLo&ÙŽ.Ó2„¶pÚ#ØÌàÛ—>)Ø1¸omeD{|žmÞŸ*ïaap=b$ËiòhADNEuóÂS%Ô¦ètÀ­} mh––­%0dîÔØÜ.IÙ°šÊ¾ l®™÷£ËWNrÃì‹ Òrtø 't§7S­GP³ùV¾xž±}{^JAn‹ÅÁÁÁ@ çåå5¶gbbâäÉ“»tébhhèíí}äÈuz6Æ‹}zäÈ‘‚‚‚-[¶,Y²dÇŽj~“ ë"êjª@dètÃÔƒ._>ѕӲÖoLL CnÊC²­G² žìdëµÐM‹Ç]¬°lëån>ÏtÍ æåËË¿laJŽIMÀÛ·o÷öö …B¡0<<|À€¥Õ¯¿þ:>>~È!ººº^^^QQQ«W¯V³ðkHîߥgJ;é<‘.âl2¶·y +±µµU½™Š Ù ÈÖ#Ù PO Hv²õZî:ØÆ¥«×q¸gÞ£âÌ¿HŸ0"Ç$„Âòõõ]¸páèÑ£é’S§NEFFÆÇÇ7{lyy¹P(¬ªªjvOæºÖþ߇·Ž€ÂîÛ¼¾¡ËÏ.ðîÒ…‰3"‚t~¿˜7íçt*æÈdóR¿ï*}ž3?õ]ÉÄ;Ý ¬œœÅww÷ÜÜÜ–{âĉ^½z1ãÕ"Š®gßú;–ŠO:54G¹™aöEQ†É¬<¬åcžeÎGy#øjôîÒÇØój „&`‰Dbll¬XbbbRRRÒì%%%ááá›6mbL­y’#—SëEß0õ¸/ìA—/ rmU=b±XÅfªƒd7 [d7@=% Ù ÈÖk•—ÃYü^COð5ó~y†öPW]•ºiê嘄ÐÜ6žÈš~p­U(Þ?! ’Ý€l=’Ýõ”€d7 [¯mnC{˜ŽîÕ0­=ãÂG ®\VÃz >|8oÞ<êž³ŸŸß¦M›ÖV¼'ðÖ{ô‰ÄÈȨéS¨òÆ‚L5Ƨ(ç\´ö§ëGT±¦÷æªQ]ôÚP¥X,¶±±Qžª!Ù ÈÖ#Ù PO Hv²õÚìvé¾Ä{ÅYú*þI榞Ϯ€Ýp¿I¿ýOUzÌÝ‚&7«~¬7c›ó Ôr5#ßYMÍŸpØÚG%§@A^#ð‡ÔØ+ò9°ºJóæ¥.æÈd0ùÏ¿­½£’Stº>àö…¬®.eý**NµNg_mMEïöhü8AD)V»q_Ý-з¾f&_õõÂZro¹Ó`V9‡öSŸUkðÏÚûÓåŸû9X uÚ\-="Ÿ@Hv²õHvÔS’Ý€l=eÜzu|0 ½yÒyb=W]Lyx>ArL‚ XYêkkèéW’mG•ñT¬¯Å›?®{ãÇ5âsÀ¤A²­G² žìdë)é¶,È•^aý©®Åso*&¿Œ}Àʾýì˜=§|•kË5åã­¾ piíÜ“‚ H˜¹+sWÒC*V<[ü†¬&Ftð£dåØL(u5Õ\OÅçíÆÑÙ×HWsÞhgö¼A:‹ßsÑâÉÓ™DÇôR7ùlÄÖFÁLLÀJ‘³çEž^ò ’lGÑå Æwêi²ç… Ò‰°1Ñ fOožqz¯FƒO®]½sò{^Í€ ¸íÔVU^üq#Ÿµ_¥¡MÅæ­tT¾~ÅyVIƒd7 [d7@=% Ù ÈÖS‰[ø»=tùT\Ê7Lµ’/ pam„¬¾^ùú™û€Ûþö/ÿ²åܲo TK¸Ú'²†+oònšæþÅ('Õ("‚ -cÁ×׿MÅúÕe “ÿ«U[þÛv¹¼Üæj±˜8jÊË/mÛLÅñèìkm¬óÃí?Aa„ù㺠txT,å$ÛÈ»/¬¨¯­eÏ«Q0·‘Ì?—?{ ϵ/uF—û®‹¶¦{^‚ }þ— £_ÏÛ«àé€äÁ½Gþ`Ï«Q0·…ê²²ôŸ â3µ\ùo.[ÝÞ±mü¸Ö¡¸b%iìdOYIDATë‘쨧$»Ùz*tûjŒ“±ŸŠ+xºôØØÔ ‘õµ5ª:‹ªÀÜ2vl«|.‰Žéån Ó. ìÉç©ì#U\|‚4Hv²õHvÔS’Ý€l=ºêh~5¦aN’ÝhêéÐç¢9÷©ê,ªaµúíW¾x¾ÝÛ½ªôìï=+£ëªÜÙ\?wå(zBADýH«jçÇ•VQ›¾÷ÿw÷OXYÏLÎÔÐä·¶B„E—ù‘ʾÏtͯXxÓåK{böEa}-Þ×cz‚“mGIù(}”wí÷hö¼Þ&àÖQ!)ÉÜõ3Ç9Õsäã­Üº ¦ ´Rí¹Äb±j+T!$»Ùz$»ê)Én@¶žÊÝþåçØíÕB8Õüsöã¨8mÓÚÚÊ ÕžK0·ŽôŸ6W—•ÀýnWÍÐåK{ÒKb©Šèh²~¬)B²­G² žìdë©ÜM‡¯¡¸NŠõÈZB>)Èþm¯jÏ¥ ØÜŠ·_QR¼}{µT QŸ_3—/<ÙÛJµÌOå AiUµõÎ âòJäíÝ!â37=3óY)W5uZ±P,öÁÅ-¨ìûX`{ݼ]¾b¢f_ArÐâqù»Ð›­†?×6€—EO®Fí`Ïë`n)/‹ ¯Fï¤â8Ç@È3®—½ðÝ>]ÙóBAÞÂ'>¶ö]ä+ÔÕryñT|ñÇTSŠu0·”‹[6ÔTT€ØÐáF—>tù² W†Z¿ä®&M²­G² žìdë1äÆçq¿ hh§wó)Öí%ÅWölg⌭…Ü,‹ƒƒƒ@ ÎËËkbçÌÌÌ9sæq˜I†Ò'Ùû¢¨8Îi"]>ØÉdlos&Î!!! Õ¬<$»Ùz$»ê)Én@¶sn¡ƒmzXPq‡{æU#øòÏ?PÃiÙ…Ð,•J}}}===E"‘H$òôôôóó+//olÿ33³ .0äC^hä|ÛÄ._1Ñ•¡3€ s•+ Én@¶Én€zJ@²­Çœ›—óm@z3³ëà"½®P!)ÉØùC'm9„Ž‚Þ¸qcFF†â¡3fÌ0`Àܹs›>°UÃÕZ¸s飼ïxÖÕTÀÏ^ ï å_§OwÓÄo†¶ð\‚ ˆú©—Éú|íQ)µÙ· mÚµ_@K`8ûâ5-a³5tºQÐG U, eE&uóZ*ûÞ1îIg_`¸ù IIIŒÖ¯ $»Ùz$»ê)Én@¶£n\绀žôf–ÅÀ}+¨*}qù×­Ì·%š€srr<<<KÜÝÝsssÕoò"OœûÇïT|Ú1.ÛÛ|hSFO-‰­_Hv²õHvÔS’Ý€l=¦Ý&õïÖÇFÞÒ•q8gߣâË¿þX^üŒÑS7 ¡· ù|þË—/555é’šš}}ýªªª¦Tù-è_~–óÇ>¸iê¾Ós]žöÝðÆ-<‚ Â"±W H¥bȾL]bY&€ÿþÊgáâ¦ít· Õ§fÏž Ô2·R{žrz>* oW*ûFDDг˜&%%)vZS5PÄÄÄÐ÷XÄb±â˜{¬kÀ°¬é®ßÕÇJþL° 8§œä·33wþüÙ‡òîÎÆÒ0¡-`ssóììlsó†'| ûöí[PPÐôªmÿý¯Y7ÿ9fž{úüûÕQ¹Ä¾¡ ‚ωì'ã7ÊŸ”á€ìßi+¬Kï€×§s‡}·¼‰;] ØÍÍíêÕ«Š%ÙÙÙ®®ÌzzâÛ7oÆêç’cCó7¸_7õd_Å_v¤A²­G² žìdë©Çmœ»ù`'*–'îU#øÊî_¥…ùjxB[À6lÈÌÌ|í1$//¯/¾ø¢éUØ>úÞ:v®™÷‹òøUÈåp²—û¹u´ð‚ !Äç\›Lo~~)Âîù]ðœõ™ïÒÕÕéZÀaaa)))+W®”H$‰$"""--mÖ¬YôŒÞ—€g7soÿ dÀQü\ZZZZZzøða[[[ÅW_»! {m>õ“쬻q€ŒÃ‰wð§Ë§y[÷´4hsµ­Eñ`LÀÿxûÕµõ|)w˜ûÖ•‡d7 [d7@=% Ù ÈÖ#ÊíÍ,€ƒ°šA, @œ——×¶zÈɾ‚ ˆúQgèùF*•úúúzzzŠD"‘HäéééççW^^ζ‚ ‚4 A ÿ6³qãÆŒŒŒ˜˜ºdÆŒ ˜;wnÓußãMHÖ#Ù ÈÖ#Ù PO Hv²õHv¼Ý4G U, eËAAš¥#$àœœÅww÷ÜÜ\¶|A¤Yˆnø·>ŸÿòåKM͆¹«jjjôõõ«ªªš>°ÓÞ÷P’Ý€l=’Ýõ”€d7 [d7`Rˆ'X„Ãá°­Ð$ë‘ìdë‘쨧$»Ùz$»1GGHÀB¡°¤¤ÄÜÜœ.)..666nö@’s!‚ ›ŽÐìæævõêUÅ’ììlWWW¶|A¤Y:Bö÷÷ŠŠR,‰ŠŠ `ËAAš…è®ïRVVæáá1kÖ¬Ï>û ¶mÛ¶{÷î«W¯êéé±­† ‚ o§#´€ ÒÓÓmmmmmm/_¾ÙA!™ŽÐFAvGGh#‚ H»0‚ ‚°&`AaLÀ‚ ˜€A„0#‚  tê,‹ƒƒƒ@ ÎËË#_#33sΜ9FFFj›»¼åz‰‰‰“'OîÒ¥‹¡¡¡··÷‘#GÈqKKK›5k–½½=ŸÏ·´´9rä¡C‡ÈÑS¤°°ÐÙÙ™éï·Unœ7`Ô­µzõõõ[¶lqssÓÖÖîÕ«×ÈÑ{ó£ãp8|>Ÿ·ººº­[·öë×ÏÈÈÈÐÐÐÓÓsëÖ­uuu̹µJNŸ>=xð`ccã'Ož0êÖÌ]u;o–J¥¾¾¾žžž"‘H$yzzúùù•——®bffváÂõ† öôéÓ#GŽlÙ²eÉ’%;vì Ämîܹ}ûö=yò¤T*½~ýúüùóW¬X±xñbBôhd2Ù‡~¸lÙ2æÄÚæ&û'DéÍ™3';;û¯¿þ*--Ý»wïÞ½{ÉÑ“½ÁÆßÿ}ܾüòËèèè7æåååååmܸqÏž=_~ù%Cn­Õ‹Ÿ2eJXX˜X,¾uëÖˆ#‚‚‚š]d– ¼ê¾ùÿ£“°aÆéÓ§+–LŸ>}óæÍíEC=ß]«ô¾þúëúúzzóêÕ«ŽŽŽ„¸½ÉÝ»wŒŒð’Ó6½õëׇ„„Èþ~[ë¦æ E«ôüýýÕâ%G™ÿxuuu—.]bF­unŸÏŒ—L¦ô7(‰LLLð’Ó½+W®¸¸¸”––Êþ~[ë¦æÜ*½)S¦œ¥?ÿüÓÓÓ“/™L ·çÏŸŸ?ÞÛÛûÛo¿eÌ®Õzååå½{÷NMM¥6ý~[ëæææ<ÏÂÂbÚ´i7nÜ`έµz¶¶¶þùçСCuttôõõýüü’““ÉÑ{#Fìß¿Ÿ/™¬•nK–,8p`bbbiiiiiéùóç½¼¼–/_NˆÞ[°ú/ÑŠ`VšššÕÕÕŠ%ÕÕÕŒ¶ØT«¡žÜf½âââ=z$&&2¦Ö7ÅΗQ£FÕÖÖ’£÷é§Ÿ.[¶LQ•·€€€ÄÄÄŠŠ ª§ÐÌÌìÊ•+„èiii™˜˜ìÚµ«¨¨¨¨¨hçÎ&&&III„è)’mmm]SSØZëÜêëëÿ({‘ØÕóññÙ»w¯bÉ®]»Ô‰V°ÊÀÜÚ¦WXX8tèЄ„&ÕÚþÑ=yòdß¾}–––K—.eÌ®uzGŽñññQüA@T~mÛ¶3†/9­ÒÓÔÔ|³§pøðá„è)2sæÌU«V1æ%“µÒ-22ÒÆÆæðáÃ%%%%%%‡¶±±Y·n!zñññ¦¦¦{÷î}úôéÓ§OwïÞmbb¢­­Íœ^³`Vx º%´AïÑ£GgΜaXMÙo0!!ÁÚÚš/9­Òstt|øð¡b Q· _£°°POO/9­Ò³°°xóF¥®®.!z4OŸ>566...fNLÖJ7;;»³gÏ*–œ={ÖÞÞž=™Lvîܹ#Fèéééèè 2äÀŒê5‹Êÿ*;ïcHnnnW¯^U,ÉÎÎvuuíœÑZ½üüüqãÆmذÁÏÏ4·×èß¿QQ^rZ¥wïÞ=;;»×´eî‰[%?:Ã!µJÏÍÍQ™·ž± ŸÞ/¿ü2iÒ$ccc&ÕZçöøñãþýû+–ôïßÿñãÇ„èÀ°aäRiyyyrr²¡¡á Aƒ˜ÓS?7ûûûGEE)–DEEtNÆh•^QQÑØ±cW¯^íëëKšÛ›¤¤¤¸¸¸0à%§UzMüÖfÝíM<8dȼä´J/((èøñãŠ%ÇŽóòò"D¢¦¦æ§Ÿ~úâ‹/˜³¢h•›MFF†bÉ¥K—¬­­ Ñ{“mÛ¶………1àŪmP·#JKKííí#""¨þ+V8::J¥RÒ4ûŽÔóݵJ¯oß¾¿ÿþ»¬Úà6zôè#GŽ](jii 4H ãZûÍ8ðرcL[µÁíàÁƒÞÞÞFFFFFFüý÷ßwh_Ö¾}‹ŠŠÖ­['##£¦¦¶e˃ÁšÎvc®ýļ¼¼+V(++KHHèèèøûû·=ÔÒÒâãã3jÔ( ‰Ñ£G;vŒ5ÝÈÈ(88¸Ã2SRR†ÞÜÜÜŸhÒ¤I›6mòõõí§ººzË–-ššš 8pà¬Y³nß¾Ý6CÛhvÛ³êëëׯ_¯¤¤Ävä¹®®ÎÃÃCAAAJJÊÆÆ&==í+Ðabgëj›íÖ­[FFFRRRRRR^ :ÞÙ‹@  —¢¢¢¬¬¬ºžÇÄÄD__¿¤¤$***//ÏÛÛ»;KÎÏÏ766VWWýøñã©S§®\¹ÒöèÚµkëëëÃÃÃ+**Μ9sðàAV=oذáСCuôèѯ¿þZLL¬›?”££ãƒ:L\±bEsssxxø‡Þ¼y³aÆ£GÒh4Öö(óÿk›ÿ›o¾166~ýú5Û Vww÷ñãǧ¥¥egg[[[[ZZæää|6XgëbyüøñÊ•+===sssß¼y³nݺåË—ÇÇÇ·ÍÐÙ‹@zERR’Á`tþŠŠŠ/¾ø‚õ5Û½¶‰+W®Ü¶mÛ…Ðh´Ÿþ¹ý”ààà)S¦0™ÌÆÆÆaÆ¥¥¥µ=ôîÝ;99¹·oßv±®êëëû÷ïßaiié>t–çÓ)¾¾¾ÍF£ÑvíÚÕþ!ooïåË—w‘ªýs;{hÞ¼yÇoÿÐÑ£GçÏŸß6[g/A(`€^úl×××{{{3¦ÿþ¬Ï»¢¢¢¬‡ºneeåW¯^±]&FËÎÎn?¥¢¢bРA¬¯wïÞíîîÞöÐÞ½{Ûº­³uuP[[;`À€óLžbÄoooÖ©ºm¾yóÆÅÅEQQQ\\|Ò¤Iþþþ¬éÝé’›7oÒh´Ÿ~ú©‹ØmÁûõ맨¨hjjêååÕá0«¶ÅFEE999 ncX¸×ݬ¥¥•’’Ò~JjjêøñãÙΜ=jÔ(z;4­í ¢hÏ™3ÇÏϯý???¶3º]ß6‘YzŽ¢c­ÕÕÕ:::îîîkÖ¬¡Ñh'Nœ8þ|JJŠ””k†®Ç0 !tCÐ222‘‘‘ñññªªªªªª mí ÀﰩǶ€€Eè¶€ €0(`PÀÐIIIk×®•““ÃÅŽú =°|ùò!C†ÄÄÄÂ÷p¾ 8 ೄä­§!­[·NFFFMMmË–- ƒt"á…"&&&úúú%%%QQQyyyÞÞÞ¤ /¡@è)!W!WYYi``Íú¶ëƒª>}W’·J A@_1Œ]»v;vÀ€t:]^^>//¯íÑ®ïßÇU{yyÑÉñòòêc~nŠÏ/=%$ë@ØlܸñÅ‹¿þúëèÑ£¥¤¤ Fÿþý{ýv'$o•Üû1Ÿ±P  k×®=yòdøðá¬osrrÚ?ÚÓ!hè#0€°¨¯¯—””lûöüùóíEÅòö ›7––––••8p 77—t"¡†G¥ÑhZZZcÆŒÉÈÈè°ÜMmG6uøzJ(v¡÷”YŸÅ½FÀ0(`PÀ €@€  Ýíì쬨¨8pà@##£ÀÀ@Ò‰ø.E Ý5cÆ ssóÀÀ@]]ÝôôôÕ«W¿{÷ÎÝÝt.¾„+N° q°µyóæ}ûöµ]ú*55uþüùYYYdSq.ÄPTT´nÝ:55µ-[¶0Œ=}ÿþýí/<©¡¡QPPÀéŒÂ DLLLôõõKJJ¢¢¢òòò¼½½û²´ÐÐÐ &p*›°ÁX+‚aPYYi``Íú¶§÷®¨¨066>s挩©)·"R†  ¯ Æ®]»ÆŽ;`À:.//Ÿ——×ö(³Kõöí[GGÇ“'Ov³}½¼¼èíxyyñr¶Îf ›zl` ÒÆ_¼xñ믿Ž=ZJJŠÁ`ôïß¿owEEEvvv¿ÿþ»¥¥%7rR ÷Mà ҰaÞtè……WÓR÷ç‹úúzIIɶoÏŸ?ßþÑîÔLYY™µµõÞ½{…¤}¹ û€„…ÍÆKKKËÊÊ8››ÛÓ%X[[oÛ¶ÍÖÖ– 鄯ZÙÀ4¤ŠŠ OOÏÐÐÐÖÖVGGÇ#GŽÈÈÈôèíŽí0uee¥œœçbR öó Xp€@A€  @ €0(`PÀ €@€  @ €0(`PÀ €@€  @ €0(`PÀ €@€  @ €0üõõõÞÞÞRRRt:]ZZúÚµk¤&0üOll¬––Vfffff&“É|ôèÑ?ü°y󿦦&ÒÑ þsôèQ''§#GŽ\¹reäÈ‘4mÒ¤Iñññ¯^½255}ÿþ=逅Îd2Ig :/ S§Níß¿?**ŠU½í1™ÌmÛ¶…‡‡GDDÈÊʉ@ ÷Mà „M`` §§çýû÷¿øâ‹ÎæY¿~}zzú½{÷DEEy™ €,0O¡€A¨ܺuËÐа‹ÙZ[[­¬¬f̘ñÓO?ñ,q(`žBƒðhmm9sæ¬Y³~üñÇÏÎ\\\¬¯¯8eÊd î5Âj~~~ ã‡~èÎÌ***‡öððhiiáv0‡^uuu;wî~üxìØ±^/áõë×Ó¦MËÎΖ––æ`0ªº!è[·n¹ºº¶ŸâêêÔͧ‹‹‹ãb=©««;{öì·ß~Û—…hjjNŸ>‡CôE 8==]GG§ýmm파ŒÏ>ñÇÑÑÑÎÎÎkÖ¬áZ:þvîܹéÓ§wqÕÉnÚ´i“¯¯/Π芎µöëׯ¶¶V\\¼mJSS“´´tCCCgO¡Óém_Ïš5+44´×Á‚Æd2Ç÷矚˜˜ô}iS§Nݺuëܹsû¾(jº!è^`2™L&óíÛ·—.]JOOß½{÷gŸâååEg‡iH •••åHûÒh´79r„#‹6ÝÔSRRJMMURRj›RZZª««[RRÒ§GEE­X±"??¿wkÇ00GGG{{ûU«Vqdi#GŽ|ô葆†G@5B·¬¥¥•’’Ò~Jjjêøñã»ùtƒ²²2.äàoeee|PSSËÉÉ‘““ãøÂȺƒ°€³ššš®^½ºtéRn,|àÀ¸ @ €„BHHÈøñãÕÔÔ¸´üåË—÷ô¾ÂB .\¸°lÙ2î-ßÖÖ6###77—{«0(`ÁW]]}ïÞ½ùóçsoâââ ,¸rå ÷V `PÀ‚/ ÀÌÌL^^ž«kqvvö÷÷çê* @ðùûû;;;s{-¦¦¦åååݹkÐPÀ¯²²266ÖÞÞžÛ+Y´hѵk׸½"Á€pׯ_Ÿ5k–´´4Ö…Qh€îC¸7npðî ]›>¾²²’÷«à#(`ÁÔÚÚzëÖ-"Ü¿ssóàà`Þ¯€ €ÓãÇ¿øâ "kŸ;wnPP‘Uð 0€` "²ùËbooÎ`0H >0€` š;w.©µpàÀ„„²1(  h***RSSÍÍÍI¡988ܺu‹t ŠBšàà` IIIÒAhööö(`€Î €Mppðœ9sH§ Ñh´©S§âÆ l¡€JKKKxx8ÏnÜ5QQQ++«°°0ÒA¨ PâââTUUUTTHùMhh(éT„(¡¡¡666¤Sü••UTTTcc#é ”ƒ(T+`…1cÆÄÄÄ@9(`ÁQZZš——7eÊÒAþŒB°…aaa3gÎ#äÿ@°…!!!”f100(//ÏËË#€ZPÀ¢¹¹9<<ÜÊÊŠtŽDDDfÏž`€PÀ"&&F]]]YY™t60 ð)0€€ µµµ%‚=kkë0 ÒA( ¨¹˜eРA&LˆŽŽ&€BPÀ‚    ´´ÔÐÐtNÙÚÚ†„„N@!(`A6{ölQQQÒA:eccƒ‹B´‡T»Ö§&MšT]]M:U €ø^SSÓýû÷gÍšE:HWètúìÙ³ïܹC:U €ø^LLŒ¦¦æ!CHù œŒÐ €ï………Q|ü™eÖ¬YÑÑÑ ¤ƒP €ï………Y[[“Nñyƒ š8q"NF`Að·ÒÒÒ‚‚*Ÿ€Ôžµµ5v° €ø[hh(ÅO@jÏÊÊ  À‚àowîÜ¡à :£¯¯_VVVPP@:y(`>ÖÒÒ1{ölÒAºKDDÄÒÒòÞ½{¤ƒ‡àc ******¤ƒôF¡XPÀ|Œ¿ÆŸY¬¬¬"""ZZZH  ÀÇÂÂÂø®€‡:bĈ'Ož@ €_UTTdddL›6t³¶¶ÆPÀüêÎ;fff¤ƒô®I @Cð/~¹å§Œ³³³ËÊÊH  À—˜Læ;wøè¤öÄÄÄ,,,îÞ½K:I(`¾”””$//¯¦¦F:H/a À—BCCùtü™ÅÚÚúîÝ»8 „ €/…„„ðu6LEE%>>žtbPÀü§²²2##ÃÔÔ”t>Á(490ÿ ãÓÚCƒCð~ßÌbbb’••õöí[ÒAÈ@ð™ÖÖÖ»wïZ[[“ÒWbbb–––¸1-0ŸILLTPPPUU%„0   Àgø÷XŸ²±±¹wïNFá„à3aaa0þÌ¢¬¬_ÀjjjÚÚÚ.\h›rïÞ=}}}uuun€ÿihhˆŒŒà±µµ½}û6é ¼óùÞ·o_hhèÁƒçÌ™óúõkOOOŸàà`®&ËÏÏwrr’•••••urr*((èlÎèèhgggEEÅr5ïEEEM˜0AAAt.š3g „J·öëêê>}úÔÌÌÌÂÂbâĉ÷ïß7nWcÕÔÔXXXèééååååååéééYZZÖÕÕ±yÆŒååå%%%Gõòò:{ö,WãðØíÛ·çÌ™C:wÍž=ûñãÇÕÕÕ¤ƒðH¢ÓéTPP ÓéÜ ÄræÌ##£íÛ·4hРAÛ·oŸ_À¹¹¹ÉÉÉíÿÿgΜÿêÕ+îŪ¬¬”——o?eðàÁݹýCEEÅöíÛ:ĵh¼&< IDATÇ»»»·ÍÐ~O­µµõ¶mÛø*} ´¼  @FF†t.6š† 0P„ššZHH·¯üJA¶¶¶_~ùåÂ… IÀý€„Obb¢¸¸¸¶/F›;wngW¾Ý*ବ,WWWqqqWWלœn'rAAAóçÏ'‚Œyóæ…„„466’ÀEŸ/àçÏŸO›6MSSóáÇ?~|øð¡†††±±qzz:ò­ÀÀÀÎŽüxJJJcÇŽ}ðàé \ôù¡mkkk;;»õë×·Ÿxøðá°°°ÐÐPnf#û€¸¬¬,SSÓ¢¢"!ÝO´oß¾ÜÜÜ'NÂŽäAXRRR999JJJí'–––ª««×ÖÖr#q(` õƒ @$Âêìxýû÷çtøO@@€££#é$ihh(**>~ü˜tnù|ÏŸ?ÿêÕ«&úûû;99q'€°+..~ùò¥ðÜ€¡3ŽŽŽ¤SpËç·¬kkk¿úê«qãÆ-]ºTEE¥¸¸øâÅ‹™™™gÏž0`oRò† ¬“'OÆÅÅu¸«JNN^°`AVVé ÔHîîÎíù¬®PÀ@ÖÌ™3×­[7oÞ<ÒAÈÓÐи~ýºŽŽé ¼Hîf{Ã>Ü¿€KÞ¿?{ölÒA(£Ð Àpx!µÜ¼ysöìÙ‚º§§oܸA:W €¨Ç?·gddôþýû—/_’Ày(` ©©©yðàî­ÙFDDdÞ¼y¤ƒp €Bnß¾=mÚ´^ßIS 999]¿~t ÎCPÈÕ«WI§ –3fäççggg“Àa(`ª¨®®ŽŒŒ´··'„ZDEEœœþý÷_ÒA8  @7oÞœ1cÆ AƒH¡œ… ^»vt CPÅÕ«W.\H:MŸ>½¤¤äõëפƒp €ªªªàââ‚C±@`àÎólpïöËŸÚ¹sgMMÍï¿ÿN:(**š4iRaa¡„„é, ,¸×Ø ìòåËË–-#‚? 6lâĉ¡¡¡¤ƒp €¤ØØXqqq]]]ÒAøÆ²eË.\¸@: €Hºpá6{ÄÉÉ)""¢ªªŠt€¾ÂÎN6°x£©©iذaOž}šýìÙ3???GGGÞ$l5rðôéÓQ£Fñ~í l¸×h6PÀÀ?~9rdNN޼¼j_&))§¯¯¯§§×ÙE§»OYYÙÜÜüòåËÉÀKüô Àï®_¿®£££®®N:aâââÞÞÞß}÷]DDD—¶zõê“'Or$/a¬• A—˜™™­[·nÁ‚¤ƒPEMM””T/ÎÅd2555ýýýõõõ9   † øÞË—/_¾|9wîÜÞ=½¬¬,>>ž³‘ˆ“––îû¥1étúªU«p>ð0œ|xïÞ½çÏŸ·¶¶æF6Áàââb``°iÓ&ÒA@Ð`€¿ýý÷ß–––½hß}ûöýý÷ßqqqÂÓ¾aaa½¸¤×úõë?ÞÚÚÊHÜ€à:&“yüøñõë×÷â¹nnn111£Fât(êb2™ŽŽŽ=ݧkdd4xðà.¥à80×ݹsGRRrÚ´i½xîàÁƒû÷ïÏñHTfccóðáÃ#GŽ|óÍ7ÍÍÍÝâúõë9½`œ…à:__ßo¿ý–t ~¢©©—ŸŸÿË/¿tÿYÎÎÎ/^¼HIIá^0ÂÑFlà ,à ´´4++«7oÞôë×t>ÓÒÒÒÐÐ0`À€î?eÏž=ÙÙÙþù'÷R°Áµ y  äî¦¶}ûöÏÎYSSÃ`0xJP½ÿ~ôèÑJJJ¤³€€ÀQÐ|éíÛ·7nÜèÎÍ MMMÏŸ?σTlðàÁÎÎÎÇ'àó°©Ç¶€S~ú駪ªªcÇŽu=[RRÒܹs7nÜøÝwßñ&˜ËÉÉ122zóæ””é, 0ÍS(`àˆºº:55µ˜˜ .f ^µjÕéÓ§ç͛dzlü«¤¤DNN®ë#ÃçÏŸoiiùÍ7ßð,0 AðŸóçÏ›˜˜tݾ4mРAÁÁÁhßn:}ú´¹¹yYYYó|÷Ýw‡jiiáY*€^À¦Ø†¾kjj3fÌåË—§L™B:‹@a2™^^^—.] ÑÔÔìl6SSÓuëÖ9;;ó2$lð™K—.©««£}9ŽN§{{{oݺuúôéOž<él¶mÛ¶ýúë¯ø$ T†à¼ÖÖÖýû÷wçÔ#è77·sçÎIJJv6ƒ¸¸xpp0/SôÆZÙÀ4ôѵk×<K:ˆP»~ýúþýû?~L:ð7 Að &“éããóÓO?}úPbbâîÝ»yI89::ÖÖÖÞ½{—töPÀ &&fccÓazxx¸­­í„ ˆ¤B"""?þø£——é ì¡€8‰µù»sçN:Þ~ú?ÿü³lÙ²ÿýwîܹ¤² !ggçÊÊʈˆÒAØ@pRPPN···o?166vçÎQQQ¦¦¦¤‚ Ÿ‚‚‚¶oEEEúé'l5¡€8†uŠª··w‡Í_ccãgÏž7ŽT0á!--mllœ””Ô6eñâÅïß¿¿wïÁTl¡€8æßÿ³³³ûô¡ò>Ú¸qã‘#Glll¢¢¢XSDEEwìØ±sçN²Á>…àŒ––///Ÿ›¿ÀcŽŽŽW¯^]²dINNkÊ¢E‹ª««oß¾M6@8á• œ ½pöìÙþùçÁƒ¤ƒF£••• 2¤íÛ›7onß¾=99YTT”`*àG¸O¡€¡§ ÆèÑ£ýýý§NZ]]-##C:tdnn¾råÊ+V|â ´#GŽN:õêÕ«“&Mb0¤AG»wïÞ¹s'~5@ØÔc[ÀÐ#ãÇŽŽ¾}ûö¡C‡nß¾­­­M:°áää4yòä~øtà'‚æ)0ôˆ§§'F  1béDÀ^ffæôéÓÓÒÒ”””Hg¾!hŠzõêÕ•+W¾û††‡¢})«¼¼ÜÆÆÆÌÌÌÇLJt [Àla ºoÞ¼yÓ¦MûþûïIÏ»wïž‹‹KCCÓ'OÆŽK:ðaÜÎÏÏwrr’•••••urrjy¹O%%%­]»VNN§`/EEE=þ|ýúõ¤ƒ@·Ìš5+**J\\|îܹø ÄQ´€kjj,,,ôôôòòòòòòôôô,--ëêê:›ùòåC† ‰‰‰áeHr---›6mÚ¿¿„„é,Ð]ZZZÉÉÉeee!!!¤³€°£èXëÁƒ/\¸Ð6eÙ²e“'OfíÒŽŒ`ºãðá÷nÝ 'z,$$dãÆ©©©’’’¤³Õ Ýô­[·\]]ÛOquu "• Mssóž={^¿~½gÏžcÇŽ‘޽akk;qâÄß~ûtjÝÔSRRJMMmª@ii©®®nIII×OÄ0pÕÇ-ZD§Ó%%%'Nœ¸k×.Ò‰ — uuuccc555IgJºó€ûõëW[[+..Þ6¥©©IZZº¡¡¡ë'¢€{rssíííÍÍÍ­­­7lØššÚ¿Ò¡ ÷|}}oÞ¼…ƒ7¡ B7Í^^^tvHç*jjj²²²òððØ»wïúõëOœ8öåw6l¨®®fkR^^¾cÇŽ¦¦&Ò¡@ˆPtSCÐ@AUUUrrr›7o.))i„ 𯄄{{ûçÏŸKHH¸¸¸|üøñêÕ«ío£ t[ÀZZZ)))í§¤¦¦Ž?žT&''—’’ráÂ___ÒY€3 –,Yòí·ßÊÈÈNŸ>ÝÐÐ0))‰t. -à9sæøùùµŸâçççàà@*Fknn^¹rå¾}û°…$H~ùå—˜˜˜°°0‘]»v:thÙ²e¤sà£èXkuuµŽŽŽ»»ûš5kh4Ú‰'Ο?Ÿ’’"%%Åš¡³1 A÷øøøÄÆÆâ‚'""ÂÍÍ-55UVV–F£566öë×t(  ¡‚–‘‘‰ŒŒŒWUUUUUMHHˆˆˆhkßOµ?~ ÇRAßEFFv˜’’’räȑӧOÉ\eiiikkûí·ß²¾Eûo`S l 3ƒñÍ7ß<}úôÁƒòòò¬‰S¦LÙ´iS‡ëÀÀ¨©©ÑÑÑ9räˆé,@-B· @DAA©©i]]ÝãÇÛÚ—F£mß¾ý‹/¾@û 0iié¿ÿþû«¯¾zûö-é, ,PÀÿ)//Ÿ2eÊâÅ‹/_¾Ü~Gxx¸¿¿ÿ™3gf˜6mš››ÛªU«>ÝÜimm=zô(ƒÁ  ÆZÙÀ´ÐÊÎÎVWWo?¥¼¼\WW×ÏÏÏ‚T*à™ææfSSÓÅ‹oذ¡ýtƒ±jÕª/^øûûãÒ•ÂFè.EI X˜Læ¼yó´´´öìÙC: ðHNNŽ‘‘Ñ;wtuu;ÔÜÜ,&&ÆûH@ Ž‚à¤ÂÂÂÀÀÀ.f(//_´hÑÙ³gѾÂéèÑ£/_¾|øÇÄí„¡G°©Ç¶€“Éìú"á vvv‘‘‘ZZZ??¿û÷ïwÿ/'44tíÚµ3fÌØ¿¿¢¢"Wãga0ÀçIHHt¿}Oœ8qêÔ©{÷î¡}¡§¶lÙ2wî\kk몪ªn>ÅÆÆ&--MAAa„ gΜáj<àØÔc[Àïĉûö틊ŠÂ½ ×6mÚôèÑ£{÷îÉÉÉuÿYéé鉉‰®®®Ü œ…Ûò ˜â˜LfBB‚¡¡aïž~üøñýû÷£}¡ïX|çÎyyyÒY€[0 ðŸ'Ožoذ¡w×Ýõõõ=xðàýû÷ѾÐw477·´´,//'ø øFiié—_~¹`Á‚5kÖÄÄĈ‹‹÷t »víúã?îß¿?jÔ(.a´oß>{{û3fõe9œŠü |ãÚµkJJJ™™™®®®]_ÕùS­­­›6mºqãÆƒ†Î¥„ œvíÚµjÕªéÓ§¿~ýº× ùý÷ßÍÌÌž>}ÊÁ`@qØÙÉö ˜†††+V”””4ˆtLþùçÏ?ÿ|ãÆ ##£^<½¥¥å¯¿þòòòš:uêž={4448žzû€zéýû÷³fÍb2™wïÞEû÷¸¹¹={vîܹ7nÜèÅÓEEEÝÜÜ^¾|©««;sæÌn^Hø6õØÀ0q CRR²ïËyýúµ““Óž={z:j Ð ÉÉÉëׯ߼ys¯ÒØØˆK³Q¶€AXDGG›ššúøøpdQÓ§Oߺu믿þŠöÞ˜4iR\\ÜåË—¿úê«Þ¨O£ÑоB Tgkkûå—_zxxìÚµ«K;uêÔ¢E‹.^¼¸jÕ*ŽÄè¦aÆEGG¿}ûvÖ¬Yeee\rkk+—Ä¡€êêêÖ­[7wîÜÌÌÌeË–õåÆD ÃÝÝýøñã=µïii退€éÓ§rêÀ溺º±cÇîÝ»·ººš# âPÀ@  HLLôððèãà[NNމ‰I]]]\\Ž#‚DDDvíÚuôèQ‡'Nô}  LOOÿâ‹/~þùg\úCàh#6pŸ ôððøùçŸ×­[G: À²³³,X0nܸ?þøCZZš# Ü¿¿œœÜÞ½{û¾4ø,\ š§PÀÜSUUõäÉ+++Î.–Á`lÙ²åÖ­[þþþ“'OæìÂú¨¾¾ÞÓÓ3::úÒ¥Kúúú¤ã@Ïà(hà{999›6mÒÐÐ äì’“““ ËËË“““Ѿ@Aýû÷?sæŒÝž={ZZZH'J@/|ùå—S¦L‘HII9yò$§ÛÜܼ{÷n++«­[·^¾|yàÀœZ2Ç-\¸0!!áþýû¦¦¦¯^½âÆ*ªªª~ÿý÷ÊÊJn,8 ¼ðõ×_çååíÝ»wذaœZfFF†±±ñÇ]\\8µXî>|ø;w\\\LLL>ÌñÓŠêêêRRRÔÕÕ¿þúëÌÌLÎ.8 ¼0eÊ”pjiMMM»wï633[½zuhh(n®|„N§óÍ7?¾qãÆôéÓ_¼xÁÁ…«¨¨øùùeff*++[XXpp´ ¸G±ƒ°z§¡¡!99yÊ”)\]K\\œ‡‡ÇÈ‘#Ož<9bÄ®® €{˜LæÉ“'½¼¼¾ùæ›­[·JHHpvù uuu¸þyßá , ´ôôô 6 >|Ïž=Ü[Keeå×_½páŸþùöíÛh_àkt:}íڵϞ=KIIÑÑщŒŒäìò%$$¾²³³³²²8p`BBBPP7VÑÜÜ|üøñqãÆ‰‹‹§§§/\¸kà½aÆݸqcÿþýnnn ,ÈÉÉáö«ªªÖ¯_ÿøñcn¯> c­l`ºG^¼x¡©©)**Ê¥åß½{÷Ûo¿UVVöõõ8q"—Ö@ƒÁðõõ=xð ››Û¶mÛdee¹´¢ªªªcÇŽ]¼x±©©iÙ²e+V¬PSSãÒº.ÄÁS(`ŠHOOß¼y3ëº?¤ãp]IIÉöíÛÃÂÂvîÜéææ&&&ƽu%%%ýý÷߃Þ±c÷Ö"PÀ<…n¯µµõÑ£Gþþþ¾¾¾¼Yéëׯ½½½ÃÃ÷mÛ¶fÍqqqÞ¬€ ’““7oÞœ››»sçÎ%K–pox ºa6l9r¤§§çˆ#Ö¯_σ•¾yóÆÍÍÍÄÄdܸqYYYžžžh_6“&MºwïÞÙ³gOŸ>­­­}õêUÞ߈0<<üÝ»w<^©°AC§¤¤¤”””ÂÃÓ““·nÝÊíEÙÙÙîî†Ã† {õêÕöíÛ9råz>5cÆŒ‡þþûï¾¾¾ÚÚÚþþþ¼¬á‹/jjjš››>|877—gë*keCÐ<–ššºÿþ;wî¬]»vÆ 8w ƒ°°0ŸwïÞmÞ¼yÙ²e?i˜-ƒûüùó¾Ü¥›¯a0O O¿|ù288844tûöífff¼pÿþýß~û---ÍÓÓÓÃÃ{G~€û÷ïïß¿?99yÆ _ý5þ_xû€Ãüüü444fÍšõêÕ«õë×òrí ãüùózzzkÖ¬Y¸pavvöæÍ›ñnÐ5333Ö'æ””555OOO.ÝÔ¡›bbbŽ?΃s—•°lêõˆ0l§§§·´´hkkóx½999gΜ9w§çìÙ³ét:3€¢¢¢“'Ož={VWWwÍš5¶¶¶\=g‰­„„„“'O†††JIIYZZzxxèêêò8`𧦀³³³ g̘A:­©©)88øÔ©SÏž=[¾|¹‡‡‡¦¦&éP|¯¡¡Áßßÿ?þÈÍÍýꫯÜÜÜ8xñnb2™iiiáááFFFS§NåñÚyÌS|]Àõõõ7n܈ŒŒŒŒŒllltqqÙ·oÁ<ÉÉÉÿý÷åË—Gíáá±`ÁÞ? TÒÒÒN:uåÊ}}}WWWGGGÞ¬^½z5jÔ¨~ýú‘ÒK(`žâ뮩©Y¹r¥¹¹¹……ŸqãHÅ(++»|ùòùóç?|øàêêêêꪮ®N* €`0AAA~~~qqq ,X±b…±±1ñ½<–––OŸ>Õ×ן9sæŒ3ŒùëÒ"(`ž¢~755%%%éêêRíCeeee@@€¿¿ÿÓ§OíííW®\iff&´g/R\\ìççwáÂ…šššE‹-^¼XOO`žššš‡†‡‡'$$DDDð~wu_ €yв|ëÖ­¨¨¨„„„gÏž©««©ªª’E£Ñh>| ñ÷÷¿ÿþ¬Y³œíììú÷ïO:€°{þüùÕ«W¯\¹"""²téÒùóçSóŽ&µµµÏŸ?×××§à•ïPÀ»=ÎIDAT.]ºôõë×ZZZzzz³gÏvtt$ê?(`ž"UÀååå ÏŸ?711111á}€î`2™IIIaaa!!!™™™¶¶¶ŽŽŽÖÖÖRRR¤£À祤¤”••ÙÙÙY[[Ïš5kàÀ¤sÑh4Z]]ݳgÏ àîîN:ÎPÀ<Åûþûï¿wìØQ]]m`` ­­½hѢɓ'ó2Àg½{÷.***$$$44T^^ÞÆÆÆÆÆfúôéTÛ Ý”£««kkk;{ölmmmêl* 22râĉ::::::’’’þ<--MRRr„ cÇŽ3f̸qã´´´†J:fWPÀ|ĈÜDóT_n&“YRRòîÝ»ââbV׿ååü²²²Ã‡>|¸ªªêˆÿOMMMEE…ƒ?€à©­­}óæMûwÔ¼¼¼Â¢¢¢Aƒ±ú˜ÕÍ#FŒPQQ2dȰaÃúxÒ ˜§>ûr·¶¶–————————çåå•”””–––––ÊËË+***++>¼ícëÏçÿp“É,--e)æææ—••ËÈÈ 2DII‰õ>¬¨¨8lذaÆ)++2ä³ïÉ(`ž¢ÓéoÞ¼)---+++///--eÕmII ë‹wïÞ±*¶í·¨¤¤¤ªª:tèP%%%@oß¾-+++---,,,,,ì°í$&&¦¤¤4dÈEEÅ!C† :TQQQAAµ­   ¤¤„æ‘––111UUUeeeÖ¯aèС¬ß’’’’’’‚‚‚¢¢"îL ª««Y; Y›[¬í®_£€y‡:§!YÜk\€0(`¤€óóóœœdeeeeeœœ H'èŠ pMM………žžëR)zzz–––uuu¤stJ÷=xð`bbâ… Ú¦,[¶lòäÉžžž½[ Ž‚Ý•[·n¹ºº¶ŸâêêD*Àg B§§§ëèè´Ÿ¢­­‘‘A*Àg ÂXk¿~ýjkkÛß5¨©©IZZº¡¡¡w Ä4°p¯„úzŠ^^^ÞÞÞlâý-'@¨¦ž’’Rjjª’’RÛ”ÒÒR]]Ý’’’Þ-²[À” FC¶ÞB¶Þ¡l6Ê£![oá ¬®hii¥¤¤´Ÿ’šš:~üxRy>K xΜ9~~~í§øùù988ÊðYÔÝêï¾êêjww÷5kÖÐh´'Nœ?>%%EJJªw ¤ì`eƒÑ­·­w(›²ÁhÈÖ[‚ŒLddd||¼ªªªªªjBBBDDD¯Û€¨û¡ƒ Ê~£l0²õ²õe³Q6 Ùz‹{ÙD½¼¼¸±\~gffF:{” FC¶ÞB¶Þ¡l6Ê£![oq)u?t0AØ ÀwPÀ €@€  @ €0(`PÀ €@³AÿéDl”––jjjR'ÛãÇÝÝÝÕÔÔúõë§¢¢2sæÌëׯ“õŸèèhgggEEÅ’Nô?IIIk×®•““£Î¯2??ßÉÉIVVVVVÖÉÉ©  €t¢ÿ¡àËÅBå¿1*ÿo¶Gµ÷4^>Aý—¥µµuöìÙ—.]¢NTCCÃcÇŽ½xñ¢¡¡áýû÷wîÜ™4iÒŽ;Hçb2™LfnnþèÑ£ÚÚÚ§OŸêèèœ9s†t¨ÿŒ?~çÎiiiùUVWW«««ûøøTTTTTTøøøhjjÖÖÖ’Îõª½\m¨ü7FåÿÍ6|OãAªü¨”B¿€ÎüþûïË—/gR;jVV–œœéL&“ùý÷ß·¶¶¶}›’’¢®®N0[ùUúúúº¸¸´ŸââârøðaRy:C‘—« _üµ¡Îÿf ¾§ñ nGÈ•o M£Ñ’““—,YòôéS*GÍÏÏ×ÓÓ{÷îé ÕÕÕ 4¨¡¡tÿƒ"¿J ‹­[·Îž=»mÊÝ»wûí·ˆˆ‚©>E‘—«3ÔükCµÿMj¾§ñ ö³7tèPqqqeee—/^Žó?õõõ®®®çÏŸ—‘‘!¥S>|`í[³f é,l„††N˜0t ŠJOO×ÑÑi?E[[;##ƒT>EÙ¿1 þoRù=ëEÀíMl~äàà]___PPpðàÁ!C†<{öŒt¨ÿ|ýõ×»víjû–j¿ÁöZ³fÍjnn&¨£÷ïß3&::štŽ(ò«olll?¥±±±_¿~¤òt†"/[Ôü£ìÿ&eßÓxPTùQ©ìĉVVV¤S0™Lf`` ©©iûÿêü±¶÷öíÛK—.©¨¨x{{“Îò”––NŸ>=22’t6(ò«D÷•ÿƘÔûßä—÷4&wŠ€¢?*Ïtg0 ´´TJJŠ—©X>ͦ®®ž››ÛaÞcvïu‹ŒŒ1b/S±t–­°°PGG'<<œ÷‘ºÖö(ï#}jÈ!¥¥¥í§””” :”TžÎPäåúíÜ¿KrQÇñó@«CD¸„5ÔÔ”BHhAÑäâÐXÐRCCcƒKPKPJS´He-Ö…RHÑ$ÈyÒçjå¢ßãõý/ŸÎûñp¹Zˆ¯±IíÍZæÜÓ~ÕŒ"èôgÀÕcñÃß´2RõçZ²e³Ùþþ~Ë{i"o*72ncccù|¾•©Êêf{~~žžžÞÞÞöûý­ôC0Ó ßÜÜT_Éd2G*O1a5HjoÖ2çžö«flÛN/àFLLLH§PêÇc“t´:...†††¤S(¥T>Ÿ›››>ŸO:‹é‚Á`<¯¾Çgff¤ò´‹öZcæìÍ6º§5¥;(wŸÏwxxøòòR,b±XOOO:–ÎUŸ93855utt”ËåŠÅâÓÓÓÞÞžËå:==•Î¥µÖ£££ûûûÒ)~aÈT~|| Äb±¯âp»ÝŸŸŸÒ¹¬ ®/&¯1“÷f-Cf¶5E`Ä¿j”d2‡NgWW—ËåZ^^¾¿¿—õ-C«Ö:•JÍÎΖǭ¯¯onnîòòR:Ô?u¿z é\Z“M6Òããc(r8‡# YÑÉ2p¸ÊL^c&ïÍZ†LhkŠÀ”Wžè(<@ € 0(`PÀ €@ €@ € 0(`PÀ €@ €@ € 0€Š………ê+ëëëóóóRyû£µ–ÎÀooo^¯÷øøØëõ*¥®®®@&“éí핎Ø '`N§sww7‰”J¥R©‰D¶¶¶h_ 8°ZYYÑZŸŸŸŸœœHÇì‰`•Ëåü~ÿûû{*•”ŽØ ÀjmmmrròõõõöövggG:`O<ðŸD"‘ÍfÃáðêêêõõu"‘NØ'`…Ba||üììÌív+¥îîî‚Á`:îîî–ŽØ '`Ñhtii©Ü¾J)dz¸¸FeS¶Ä œ€@ €@ € 0þ¨·Í¾IEND®B`‚gsl/doc/images/rand-exponential.png0000644000175000017500000004136413536674414015732 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœíÝy@Mùãÿñ›-„d)RÒ&¥b†J£0ö}‰l3ÃðÁXæÃ,Ì`ŒYf,ÃØ1d;=’6K´RB‘*õûãίO_®¤î=ï»<åÜ{ÏyuJ¯û~ŸsÏÑ+((i•]D  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@ÿÒ{ ѹ”¦$ßËÛžS¸7ôõõMLL:tè0gΜÄÄÄ÷] ®J¹û_›~šÐ0ð?ŠˆUJJ/ùÞÈÊÊŠŠŠš?þóçÏ[¶l¹sçN±©Ôd[@)èiîß@¹ôô´ê¿Cé¾·½Jáòëׯ{{{Ÿ:uªY³f*JU–Š–ý@¡}%2`À€3f]2}úô¾}ûÊ¿ÖÓÓËÊÊúä“OêÔ©c``àëëQôÉûöísss300000pss;pà@áCzzz¯^½š;wn£Fôõõ7n¼|ùò¢¯=}útëÖ­+W®Ü¨Q£uëÖ•ä…òÁßk³èEG„÷ïßÿüóÏ«W¯nii9}úô/^”bŸ899MžúòåKCCCù‘WùÇråþÏ …aôõõsrrŠ>T®\¹W¯^½ó…o~;…K&MštóæÍ~ø¡qãÆ/^¼b‹Ù o[Ù£G;wî}NLLÌ”)S‚‚‚5jäææÖ³gÏîÝ»”}3UNNNÅŠßö]³cß\[~~¾üÍDñ{ ,?@Y8 xóæÍûþûï¿ù曀€€×zðàÁkÿ¬[·®ük“”””¢¦¤¤Ô«W¯ðŸ¯ý­/ªF<(ú®YÞ¾ï|a1vîܹvíÚ–-[Èd²{÷î•b%r{öì騱ãk ---wïÞýôéÓíÛ··iÓfÞ¼y£G.f%¯µïkŠÙ±5kÖ|úôiÑGcbbJ»,?@Yø%JêØ±cwïÞíÕ«×èÑ£¯_¿~ìØ±¢nݺõµvêÔIþµ³³ó¾}ûŠ>ºwï^ggç’lÔÃÃ#00°i+W®üÚйÐkcÊõë×—bý2™,44tÉ’%S¦LQø¨¾¾¾££ãرc:´cÇŽw¦z›bvlãÆ/\¸PôÑßÿ½ðëb¶U–Ÿ 4Muj¯øÿ©©©ÖÖÖÑÑÑòFDDXZZ¦¦¦¾vðàÁË–-KNNNNN^¶l™‰‰É;wäž;wÎÈÈH~ÎmJJÊ–-[jÕªuéÒ¥b¶[¸0<<¼~ýú6lxüøqFFƱcÇŠž„UÌ ›5k¶{÷î¼¼¼7|øÓO?É?LUüN(\ž———ššúÏ?ÿL:µnݺýõ×›Ïiß¾ý¦M›rss“’’fΜéëëûÎT 7WüŽÝ¶m›Í™3g233£££¿üò˱cÇ–d”å'( ¿RÀ¿Š“:pàÀo¾ù¦èógÍš5pàÀÂ×fddŒ5ÊÈȨjÕª;w¾qãFÑ'ïÞ½»U«VUªT©R¥J«V­‹nWa˜Â¯CBB|}}«W¯^¥JcÇŽ•ä…‡²µµ-_¾ü›åúäÉ“!C†ÔªU«fÍšþþþÏŸ?/IËUªT©nݺíÛ·Ÿ={ök§Y¾öäÉ“}úô©]»våÊ•mllf̘ñôéÓw¦R¸ªwîØ€€[[ÛŠ+š››Ï™3'//¯${  l?@)8­PÎÐð¾8 €00o€Œ€€@ (` €€@ (` €€@ (` €@K øÚµkãÆ«Y³¦žžžè,¼›–ð°aÃŒÏ;':%¢m÷ÖÓÓ¶ï •´d €f¡€€@„íò^ßÑ·ß~«pŸT¨PAÚ@}©¨°´í”¥²Ÿ„õôéS##£{÷îYZZ*+@C©îÜ^¦ _W³fM™L¶páBÑAÚŒ°â•Ô®];$$ÄÜÜ\)©Š°ÔFõÓO?‰NÐZZ2VxÊRkzzzÉÉÉM›6 355-[4€cü O0+Ë MLL†ºdÉe% (-+—üýNbb¢““STTTݺuE'ˆÁX33³þüóÏ¢ƒ´#` ßï$%%µhÑ"<<ÜÄÄDt(€ªSÀ ÝÝ“&M*W®ÜâÅ‹ÅFAKªèîNNNvpp «_¿¾ØT ®]»¶víÚ­[·>{öL„cÀÂÔ«WoĈ ,Ô°aÃŒÏ;':ˆÆc¬Àkïw?~loobff&0¨Õ Õ #`‘êÔ©3jÔ(Á4šÂ )\ièÄû—÷õæû'Ož4iÒ„A0Í¥p$W–á#à2b\"µk×5jÔ?þ(:¨Š^±D§ÓBpIM:uÛ¶m ¢ƒ€J÷ø2®|öìÙżJÍž=[{HÉtbá}é½eÂá¿ÿýoZZÚ¯¿þ*}$(#…ÙÞöç®Ô+Ô>ªû6ub÷½¯·íî§OŸ6nÜøâÅ‹VVVÒ§€²xó/[NN޾¾~áB½b癕[ÞDuß&SÐï¡fÍšãÇÿî»ïD€ÒˆŽŽ.úÏ+W®ý§J§ ñ& øýLž<9(((22RtxoÇ¿téRVVVZZÚÁƒýýýe2Yrr²è\:J'&ÞWñ‹-:þü®]»¤Œe¤§§÷믿ÈÇÁvvvŸþùþýû¯\¹òàÁƒ÷ZÏ› µ¸J8,©âw÷‹/ììì¶oßÞ¦M)S@YèÈ![¥ã°©\¹ò×_ýÍ7߈Ð`piøûûÇÇÇŸ>}Zt€¦¢€K£|ùò3gÎüꫯD€’bþYÝPÀ¥4tèÐG?~\t€F¢€K©|ùòsæÌùïÿË›J@)PÀ¥×¿ÿråÊíܹSt€æ¡€KOOOoÁ‚ÿýïsrrDg)œ9sfÀ€uëÖ544tssÛ³gèDŒ.“Ž;ÚØØ¬]»VtB‡=z´gÏž¤¤¤€€€Ù³gó°Ôø\¶ïõ±ëÐÐPŸÛ·oW¯^]¥©@¸iÓ¦-\¸°ðbX7nÜèÝ»÷k—˜Ö2\ KRï»»‡ Ò¤I“¯¿þZu‘ Œ”~;B™L–••eddôòå˲ESk\ K­}ÿý÷Ë–-{üø±è ©C‡988ˆN¡©+PŠ÷;&L¨T©Ò¢E‹T Êè#à÷½pjjª»»ûš5kÚ·o¯Äœê†°ºûæ›o6mÚ/:”Ò{ÝøáǽzõZµjU ÛwöìÙzEÌž=[ʧ½í b1V tïw¾þúëÄÄÄõë׫"”‘ß¿¿k×®‹-òòòRR:õÅIX’*ÝîÎÈȰ³³Û»w¯‹‹‹*R@Y¼ù—-''G__ÿ}§ sæLÑAjаJy¿“™™igg·gÏWWW¥¤H°æ100˜={öÔ©SE¨# X…üýý?~¼ÿ~ÑAj‡V¡òåË/\¸pÚ´i¹¹¹¢³Ô ¬Z]ºt±´´\±b…è õÂIX (÷{TTTÇŽ#""êÔ©£¬u¤Á•°$¥ôÝ=iÒ¤—/_®ZµJ‰ëH€–”ÒwwZZš½½ý¸U0h>†¤ÙŒŒŒ¾ûî»)S¦ˆP°DF•žž¾k×.ÑAj)hT4ápêÔ©‘#GFEEéëë+}åU` ZtìØÑÑÑqÙ²e¢ƒÄc¬€êÞïDGG»»»‡††Ö¯__ë(gAKJ¥·­ž5kVBBÂÆU´~€QÀ’Rigee5kÖlÆ :tPÑ&ÊÂ1`íQµjÕüñóÏ?ÏËË ,@ÿþý4hðÛo¿‰†)hT:-éáá^·n]•nP–”,“ɦL™’™™É8Ô,)i 8==ÝÞÞ~Ïž=­ZµRõ¶¥ÃIXZ¨Fß}÷ÝäÉ“y:ˆÉßß?//oýúõ¢ƒ¤Æ´ÒLAË………y{{‡……q6¨!ŽKJÊ–Éd“'O~þüùÚµk%Û" „(`II\ÀÏŸ?oÚ´éæÍ›¹6¨NÂÒfÕ«W_¼xñ矞››+: @"°ZèׯŸ™™w*ÝÁ´OAËݽ{·M›6×®]333“xÓ€·a ZûY[[7nÊ”)¢ƒ¤ÀX!#`™LöâÅ‹æÍ›/[¶Ì××Wú­ÞÄYÐ’UÀ2™ìÈ‘#cÇŽˆˆ000P,),“Ɇ bfföã?Š (DKJl?|ø°E‹GŽqtt• ÇIX:ÄÄÄä‡~3fÌ«W¯Dg¨ ¬Žüýý«W¯ :@U˜‚V@ì´Ü;wÚ¶mËÇ‚@,¦ uŽ­­íøñã'Mš$:@%(`õõå—_†……íÛ·Ot€ò‰ŸkUCê0-wúôé!C†„‡‡×¬YStÐE| IRêSÀ2™ìÓO?ÕÓÓ[µj•è  ‹(`I©U?{ö¬yóæüñ‡‡‡‡è, s8 Kwþúë¯#GŽÌÈÈ 4j4ÔSj5–>|¸¡¡!7 ‰1-)5,à´´4‡¿þú«M›6¢³€a Z×-Y²däÈ‘/_¾ °ÆèׯŸÝ?ü :@ Ôn®U¨á´\RR’““Ó¡C‡œEgÀ4d2™¬~ýú?þøã¨Q£rssEg” ¬aFŒ!¯aÑAe¢¦s­b©í´ÜƒZ¶lyðàAÑY@Ë1ÿ155]¸páèÑ£srrDg”¬‘†nff6þ|ÑA¥¤Ös­¢¨ù´œüŒh&¢@¥˜‚ÆëêׯÿÓO?5ЉhÐD0Ô“žFŒ€åúõëgkkË\4¨ׂ–”pJJŠ““Ó_ýåîî.: h!¦ ¡˜±±ñªU«†ÎÍ @³hÌPOJ4–=z´žžÞš5kDmÃÅY²dÉÉ“'÷îÝ+: ¤4l¨' Ëd²óçÏ÷éÓ'44ÔØØXtМ„%)M,`™L6mÚ´øøø;vˆÚƒ)h¼Û÷ß±eËÑA撚C=UÓаL&‹ˆˆðòòºté’………è,  £Dš5köÅ_ >üÕ«W¢³ŠCk›/¾ø¢R¥JóæÍPMkU)Í‚–KNNvqqÙ±cG»víDgÍÆ4ÞC½zõV¯^íçç—žž.: @1Íꩈ¦€å>ýôÓÜÜÜuëÖ‰Œ0ÞÛ¢E‹Îž=»k×.ÑA hÃPOé´c,“É®^½Ú¥K—K—.5jÔHtÐHŒ€Q...3fÌ2dH^^žè,€ÿCK†zÊ¥5#`™LVPPЭ[·æÍ›/X°@tÐ<\ ZRÚTÀ2™ìñãÇÎÎΫW¯öññ4 ,)-+`™LvöìÙ\¹r¥Aƒ¢³€&á0ʤ}ûöãÇ>ÞÍÍmûöí~ø¡è, .Cå6løÇ <8))ItÐ~0þÇÛÛû³Ï>ëÛ·ïË—/Eg-§‹s­ï¤›SÐrƒ ª\¹ò† Dgñ˜‚†DôôôÖ­[ : h3ÝêC—GÀrqqqmÚ´ávIÀ’²°°Ø²eË!CâââDgíDC1/¿ü²gÏžYYY¢³€Òõ¹V…˜‚.4tèÐråÊmܸQtƒ)hˆ±fÍš[·nq¿BPº ¢@­U©Råï¿ÿvsskÒ¤I÷îÝEÇíÁ\«LA¿&88¸k×®GmÑ¢…è, )¦ !’««k@@@=RRRDg-A£Dú÷ï?|øðÞ½{s•JP æZ` Z¡‚‚‚T­Z•«TÐLAC<==½ 6DDDÌŸ?_tÐxœ÷PµjÕ½{÷¶iÓÆÆÆ¦ÿþ¢ã€£€ñ~êׯ¿oß¾N:5hРmÛ¶¢ã€¦b ï­yóæ[¶léÛ·ïíÛ·EgME£4:uê4oÞ¼®]»>yòDtÐHœî«gA—З_~yáÂ…#GŽèëë‹Î*¡ºF i €K(??àÀ+Vܼy³žžžè8 || êH~£¤¸¸¸™3gŠÎ†F™T®\900p÷îÝË—/4 CBYÕ®];((¨}ûöõë×ïÓ§è8 8ةǀK!44ô£>Ú½{·»»»è, 4†ºsttܸq#€zG§¦¦®X±¢OŸ>––––––}úôY±bEjjª4¡):wî<þüÎ;ß¿_tPwo-àÄÄÄ1cƘššnݺµcÇŽHJJJJJ:pà@‡¶lÙbjj:zôèÄÄD)ãBÍ1büøñ;wæýï­SÛUªT±´´\¼x±Â':tè‹/¾ˆ‰‰ÉÎÎVeB8\F3fÌ8sæÌ±cÇ Dg€2p!Ž#F¬\¹²jժż8++kܸqÚwwX ¸Œ ÆŒsÿþý½{÷V¬XQt(=®„%) ¸ì^½zÕ§OCCà 6p‘,š‹³ ¡aÊ—/¿mÛ¶èèè3fˆÎêèÝܯ_¿”””צ¥¥ 4H5‘ %ªT©rðàÁcÇŽÍ;WtP;ï.`KKË-ZlÞ¼¹pÉÑ£G]\\¬­­U ÚÀÐÐðСC›6mZºt©è, ^J4µ2zôèúõëÿòË/¡¡¡¿þú«½½½J“ÅÇÇOž<ùèÑ£2™ÌÛÛ{É’%æææo{ò›GË2eÏ1`åJHHøðÿþúë‘#GŠÎïGð1à–-[^¾|¹cÇŽžžžÍ›7?uꔪÛ7##ÃÓÓÓÙÙ9.....ÎÙÙÙËË+++«˜—ü_*‡÷bnn~äÈ‘¯¿þz×®]¢³€ºx“°ôôô ëÔ©#ÁI­kÖ¬qss›5k–‘‘‘‘‘ѬY³Z·n½víZUo*bkk{àÀqãÆ8qBtP %*à>ø ""âøñã'OžìÚµëÝ»wUkß¾}~~~E—øùùªt£P)''§¿þúkРAçÎÔ@Á»LŸ>ÝÌÌlß¾}…KŽ=jmmýÍ7ß¼óµ¥fllœœœ\tIRRR½zõÞö|™LfbbR¡B…zõê <8**ª,[/ÉnAé=zÔØØøâÅ‹¢ƒ@‰¨®Þ=޽~ýz·nÝ —têÔéÊ•+*½éMZZZ­ZµŠ.©]»v1—îÞ½ûÎ;Ÿ?~åÊ•V­ZuèÐáúõ몋‡RëÔ©Ó¦M›zôè,: ˆ¤¦§ûVªT)33³èU sss«U«öòåË’¼|ÕªUAAAÅ?möìÙsæÌQøPfffñ—áDY~úé§AAAŽŽŽ¢³@qtîJXFFF¯wŸâÜtD‰ 8::ÚÏÏÏÔÔ´bÅŠ¦¦¦~~~÷îÝSu2uæâârôèÑ?þøcçζ¶¶ ¢iƒøúúÒÁtÁ» 8,,¬]»v¶¶¶gÏžMOO?{ö¬»»{DD„ùÔYÛ¶mƒ‚‚öîÝkff&:‹–èÓ§ÏòåË}}}¯]»&: ¨Ö»§¶}||ºví:a„¢ —.]¤­Ÿ‘å$,±?ùä“ÀÀÀ>ø@tºNäIX÷îÝ311)º099ÙÚÚ:33S™„£€…;tèЈ#¶oßîáá!: &ò$,}}}…Ë«T©¢ì0Z¥W¯^_|ñErr²è É?õo IDAT××÷Ï?ÿ8pàÁƒEg•xw÷îÝûÏ?ÿ|máŽ;úô飚HZbùòåÿùÏbccEÇÑ<:t ô÷÷§ƒh¥w¬333ÇŽkoo?xð`SSÓlÙ²%**jíÚµÚz¿ %N8$''/[¶ìÒ¥Kò+Šà}]ºt©G+W®ìÝ»·è,t‘ÈcÀzzzï\‹–1å°Z íÚµë·ß~;fÌÑYèÕ5»/äDA,GGÇ3gÎx{{?}útÚ´i¢ã€rp%,‘8››+:…°²²:sæÌ† ¾úê+ÑY@9(`a²²²–,YbccóË/¿<þ\tu× AƒÓ§OMœ8‘YZ€¦jÕªGݽ{÷•+W¬¬¬V¬X!:‘º«S§ÎñãÇCCCüòåKÑq L8ÛHéOŠ‹‹KNNæÂO%ñâÅ‹aÆ=yòd÷î݆††¢ãÐrÜŽPRœ­æòóóÿóŸÿœ;wîàÁƒõêÕ€6ãv„º+??_tµS®\¹€€€^½zµoß^ÇoÌ@sQÀj-**ªqãÆË—/ÏÈÈEí|ýõ×S§Nýðù}!MD«5{{û-[¶œ>}ºQ£FS¦Lá’–¯ùä“O–-[Ö¹sç£GŠÎï‡Vw|ðÁÎ;CBB*UªtñâEÑqÔNïÞ½wíÚåçç·aÃÑYà=p¶‘œ„¥qn߾ݵk×|ÿý÷%¹x*”gAKŠÖD?þøãíííW¯^]¡Â»¯± %ÁYÐx«1cÆÜ¸qCtÁêÔ©sìØ±‡öìÙ“sÖ¨? Xã5lØÐÒÒ²k×®žžž{÷îÕå-6hР}ûö‰‰‰¢ã@q˜kU@§ sssÿúë¯%K–L˜0aèС¢ãöóÏ?/Y²d×®]\\ @q XRšXÀ…òóóË•cbC¶ÿþ‘#G 0@tŒ–”F0 ………uïÞ}äÈ‘_}õ§F(NÂB™\¿~}Ö¬YºvX´yóæ.\8pàÀàÁƒ³³³EÇ€ÿƒÖ µjÕÊÈÈpttìׯ߉'tg|_¯^½Ó§OWªTÉÝÝ=>>^tø X'4lØpéÒ¥±±±^^^“&MÚ±c‡èDÒÑ××ß°aCÿþýÛ¶m,:ü‹ƒ hý1àW¯^•/_^t ©Ž;ö·ß~ëÙ³§è,4'aIJë Xg]»v­gÏžcÆŒá´,%ÄIXP¹ñãLJ‡‡‹¢BÎÎÎW¯^=yòäÇüìÙ3Ñqè4 ÿjР‰‰‰¯¯o»ví6nܨ­§ ×­[7((¨aÆmÚ´¹uë–è8ts­ èòt^^ÞV¯^=`À???ÑqThݺu3gÎ\»víÇ,: õÅ1`Iérë”Ë—/÷íÛwäÈ‘ß~û-‡„(DKŠÖ>ìׯŸ‘‘ÑÆ EÇ v8 j!$$ÄÁÁaÙ²eiii¢³(‡‰‰ÉñãÇ5jäêê*:Bã=899­X±ââÅ‹VVV ¸xñ¢èDJP±bÅ¥K—Î;×ÛÛû·ß~€®`®U¦ ßééÓ§;vìhРA·nÝDgQšÛ·o8ÐÞÞ~Íš5U«V€Zà°¤(`õâÅ‹Ï>û,$$dçζ¶¶¢ãcÀÐ$ÁÁÁú¦råÊëׯÿì³ÏÚµk·mÛ6Ñqh3†z 0.‹'Ož|øá‡999~~~#FŒ077¨4"##û÷ïïìì¼jÕ*ÑqãvíÚÛ¶mKIIqvvž:uªèD¥Ñ´iÓ‹/pÁ,*ÂPOFÀÊòâÅ‹¤¤$KKKÑAJoõêÕ_}õÕÒ¥K $: 8 KR0Šº~ýúàÁƒ]]]W¬XQ½zuÑqHŠ)hh›áǯ\¹255Utwsrr ®R¥Š««kHHˆè8´ 1|îÜ9++«=zìܹStœw¨Zµêo¿ýöÝwßùøø,_¾œ eÇ\«LAK&==}Ïž=W¯^]ºt©è,%r÷îÝAƒÕ«WoÍš5&&&¢ãP9ŽKŠF1rssçÌ™³nݺU«VõìÙStªEKŠV—.]ªS§Žµµµè \¼xqèС^^^‹/æƒÂ€ã$,è¢ .´mÛ¶M›6K—.}ðàè8ÿ‡››[HHÈË—/¯\¹":ÍÃPOFÀê#//ïøñãÛ·oß»woHHHÆ E'zÝÎ;'L˜ð駟Κ5«bÅŠ¢ãP2¦ %E«¡œœœJ•*‰N¡ØÃ‡ÇŽ»qãFGGGÑq(SÐÐuokߌŒŒôôt‰Ã¼ÆÄÄdÏž=ãÇ÷öö^¼xq~~¾Ø<4 ÍvæÌ™† öîÝûÏ?ÿÌÊÊCOOoìØ±/^ ìØ±ã;wD% )(`h¶.]ºÄÆÆvïÞ}ýúõ¦¦¦bï!heeuòäɾ}û¶mÛvÑ¢E¯^½€šã`§ÖPOž<ÉÏϯ[·®è ²˜˜˜Ñ£Ggeeýþûïööö¢ã(=ŽïV»ví·µï‹/¤LbiiyìØ±#FtèÐáçŸf( àM õ`¬e^¼xannîââÒ¿ÿÞ½{׬YS²MÇÄÄŒ5*;;›¡0 ¡¥W¹reùœð5j4vìXÉ6miiyüøqùPxΜ9/_¾”lÓÔC=k±çÏŸGGG·lÙRâíÞ¿„ 7oÞ\»v­»»»Ä[Pj\ˆCR°nÊÈȨV­šJ7ñ÷ßOœ8±gÏžóçϯQ£†J·@)˜‚TnÚ´i666Ó¦M»pႊ.¦Ñ»wïððð¼¼¼fÍšíÚµK› )ê)ÀXg…††þý÷ßÿý÷“'ONŸ>mkk«¢ ;wî“O>±²² °°°PÑV”SÐ’¢€q÷î] ‹ *¨n999?ýôÓ’%Kf̘1iÒ$•n @©QÀ’¢€ñ6/^¼ˆ‹‹³³³SÖ ïÝ»7nܸ‡®ZµÊÍÍMY« ,ÔBtt´———½½ý_|qòäɲ_aÃÊÊ*((húôé}ûö5jÔ£G”’€ú£€÷ààà°yóf##£éÓ§Oœ8Q)«4hPdddÍš5V®\É•³]À\«LA£„^½zU¾|y%®0<<|âĉiiiíÚµS⚔ǀ%E£Œ6mÚT·nÝ:T©R¥/ÿóÏ?§Nêáá±`Á‚úõë+=€’ã0 I233,XP¯^½.]º¬\¹233ó½^Þ¿ÿÈÈÈúõë·hÑâ‡~à–€Vb¨§#`(ųgÏŽ9røðက€Ò …ïÝ»7uêÔ°°°Å‹üñÇJOà˜‚– µrôèÑI“&™šš.Z´¨E‹¢ãº…)h@Ûœ”——·víÚyóæ¹ººÎŸ?ßÞÞ^TH@+1-) š%???##cÍš5 .ìÞ½û·ß~kff&: %˜‚ðVfff‡þôÓOsssœœ¦L™’’’":€âPÀ€ÆkÞ¼yBB„ ÒÓÓ¯]»Ö¾}û¼¼¼¦M›Îš5+55Ut:Š1תSÐÐhyyy*THHH˜;wîîÝ»'MšôŸÿüÇÀÀ@t.@#q XR0´Fttô7ß|sòäÉ3f<~üøöíÛ^^^^^^666¢£š– -öí·ßž;wÎÓÓSOOïÌ™3åË—ß¹sgëÖ­EGÔ,) Z),,lîܹ§OŸž2eŠ···MõêÕE‡ÔgA(«æÍ›ïرãøñãׯ_÷ññYºtéÓ§O_{NAAÁرcW­ZÎÛP@¥(`@·4kÖlëÖ­gÏž½{÷®­­í·ß~›––Vøhnn®››Û•+Wz÷îmbbâçç'0* Ý˜kU€)hèˆØØØyóæíÞ½ÛßßÒ¤I 4(úhbbbTT”···¨x€:` €ò5jÔhÍš5!!!ùùùŽŽŽŸ|òɽ{÷ 533{[û^¾|yÚ´i{öìár@©QÀ€®377_´hÑ­[·LLLÜÜÜ|ýúõâ_R§NCCÃ5kÖØÙÙÙÙÙ­[·Nš¨€6a®U¦ ¡³ž?¾zõê¥K—6iÒdÚ´iïœÎÏÏŒŒ,_¾<7€¶âcH’¢€¡ãrss·oßþóÏ?—+WnêÔ©ýû÷¯X±b)Ö3þüÔÔÔvíÚ¹»»+=' ŽNÅŠ‡ výúõ~øaýúõVVV?þøã›ŸYz§N:­Y³¦qãÆvvvªH h(†z 0Š ýå—_öïß?lذñãÇ—â2–ùùùÖÖÖU«VUEB@u˜‚– ¼éÁƒ¿ÿþû|0iÒ$OOO¥¬6//ÏÉÉÉÉÉÉÝÝÝÕÕµE‹•+WVÊš¥ €%Eo“½yóæ¥K—–+Wn„ C† )ã 6??ÿÖ­[.\8þüÕ«WÓÒÒbcc•P XR0P¼‚‚‚'N,[¶ìüùóþþþŸ~ú©•••RÖ,¿—â›Ë³²²²²²êÔ©£”­%ÇIXÔˆžžž——W``à¥K—d2™››[·nÝ>\ö¿S ÛW&“]½zÕÆÆ¦I“&~~~K—. -ã†áê)Àx//^¼ØºuëòåËÓÓÓÇŒ3f̘Zµj)}+òÏ[[[Ožqvv–8À±cÇî߿ߪU«&Mš”+Ç ”€)h U«V¿ÿþ{TT”……Eß¾}[µjµzõêôôtÉdgg>|¸W¯^5kÖüðÃÏœ9#Ù¦÷ÅPOFÀ@Ùåçç=ztõêÕ'NœèÑ£ÇØ±cÝÝÝ%ÛúÓ§O¯^½Ú¸qcsssÉ6 ­Ä´¤(`@‰RRR6mÚ´fÍšŠ+Ž;vèСFFFb#µmÛ677×ÅÅÅÕÕÕÅÅ¥yóæåË— j‹– (]AAÁ™3gV¯^}àÀŸ#Fx{{‹ª½ÌÌÌëׯ_½zõÚµkÁÁÁÇ711’ê– ¨NZZÚ¶mÛ6nܘ0tèÐáÇ7mÚTt(òóóþùggggGGǺu늎a8 €–0227nÜÅ‹?^¾|ù>úÈÝÝý·ß~+ÅÍT*;;;%%eÞ¼yvvvõë×4hèDÐ6 õ` HæÕ«W‡þã?Ž9òÑG >¼sçÎêvD6!!!..®]»vo>”•••™™ÉY‹1-) ÞÓ§OwìØñÇÄÇÇrrrŽ9²}ûö´jÕjàÀ½zõþIâ÷•’’ríÚµ°°°ˆˆˆððð#F|þùç¢C¡D(`IQÀ€ÊÎÎ>pàÀŽ;Ž=Ú¡C‡véÒÅÐÐPt.eZ»víÇ›4iÒ¸qc;;»J•*‰N XZ0 ÎÒÓÓ÷ìÙó×_>}º}ûö èÞ½»v4ñ‘#GNœ8qëÖ­[·nÅÆÆîß¿ßÓÓSt(]GKŠ4BFFÆÞ½{ÿüóÏS§N¹»»÷êÕ«Gš{œø5¹¹¹ Á¿ÿþ»­­­ôÙt ,) Ð,ܳgOPP‹‹K¿~ýzöì©5Mü¦… ^¹råÎ;wîÜ©W¯Þ¹sçêÕ«':”Ö¢€%E*;;ûСCýõWPPƒƒCÏž={õêeii):—ª¼zõêÞ½{ÖÖÖ o~¼víZ [[[sssu»¶‰¡€%EšîåË—'NœØ³gO`` ±±q×®]{ôèѺuk…E¥•rrr&L˜}çÎG9::^¸pAOOOt.ÍCKŠ´F~~þåË—÷ïßøäÉ__ß.]ºøøøèÔ¡Óìì옘…7½xúôéï¿ÿnooïàà þ<‚– h¥{÷î:thïÞ½/^ìСƒ¯¯¯OP—„ü†QQQáááééé¾¾¾;wîJ½PÀ’¢€í–––väÈ‘      ##£^½zõìÙÓÅÅEw&¨JOOòä‰Âw$7oÞܲe‹­­­Ÿàö& XR0 # ‚ƒƒÿþûï}ûö=zôÈËËËÓÓÓÇÇÇÌÌLt4õrïÞ½M›6ݹsG~PÙÇÇgË–-¢CI„– è øøøãÇ?~üðáà 4ðõõõõõuww¯P¡‚èhj'''Gá”÷ïß¿mÛ6ÛÿÏÎÎN .BKŠtÙ«W¯._¾|ðàÁ   »wïvèÐÁÛÛÛÇÇÇÊÊJt4u{æÌ™ÂrïÞ½gΜ):TYQÀ’¢€È¥¤¤;vìèÑ£AAA5jÔðôôôððèØ±£NUº™3gîØ±C>J¶±±ñõõmܸ±èPoEKŠðš‚‚‚°°°'Nœ8qâìÙ³ 6”0þðÃkÔ¨!:†ÉÉɉ‹‹»sçÎíÛ·ïÞ½Û«W/…—¼Ž‰‰)W®œ©©iÅŠ¥Yˆ–  ¯^½ >~üø‰'._¾Ü¬Y3OOÏN:µiÓ¦råÊ¢Ói/¿ürëÖ­=233³´´œ;wnëÖ­¥AKŠPB/_¾¼pá‚üì­°°°Ö­[{xxxxx¸ººêëë‹N§ rrrbbbbcc[¶l©pæ? ##ÃÜÜÜÊÊJ‘¢€%E(…çÏŸŸ9sæäÉ“§OŸ¾y󦫫«‡‡Gûöí[µjU­Z5Ñé´ÖöíÛ¯_¿žp÷îÝ»wï9r¤eË–J\?,) @eddœ={öÔ©SçÎ urròððhÓ¦»»»|2GÙÙÙåä䘛›[XX4jÔhêÔ©%üAPÀ’¢€(QvvöÙ³gÏž=ûÏ?ÿ\½zÕ¢}ûömÛ¶mÛ¶m£FD§Ó999‰‰‰‰‰‰qqq÷îÝ›6mZÕªUß|Úo¿ýV§Nssó† ÊoòHKŠ "yyyׯ_ÿçŸÎ;wþüy™LæîîÞ¶mÛvíÚ999qÑá&Ož—žžþìÙ³J•*QÀÒ¡€H#66öܹsçÎ;{öl\\œ‹‹K»víÜÜÜ\]]MLLD§Óu/_¾Ô××g,) €ôž={vþüù .\¾|ùÊ•+†††îîî®®®­Zµâœj(`IQÀÄ*((¸yóæÅ‹¯^½zéÒ¥›7o:88¸¸¸¸ººººº6mÚTÇoÜ$% XR0µ’‘‘qíÿ»|ùòÇÝÜÜ\\\œ]\\,,,DÔf°¤(`ê,%%åòåËW¯^ ¾víZnn®‹‹K«V­ä•lnn.: V¡€%EÐ IIIÁÁÁÁÁÁW®\‘÷qóæÍåóÕÎÎζ¶¶ÌW—,) €æzôèÑ7 û8%%¥iÓ¦......Í›7oÖ¬—åz/°¤(`Z#===""B>Y~óæMsssGGÇ-Z8888884jÔHOOOtLõEKŠ ­òòò¢¢¢®_¿ùäÉ{{{GGÇfÍšÉ+Y~(ÈQÀ’¢€èŽôôty‡‡‡GDD„……8:::88È+¹Y³fº|ýj XR0]–œœ,ïãÈÈÈ7nDFFÖ®][>8nÒ¤‰­­mÓ¦MŒŒDÇ”,)  ÄÄÄ„……EDDܼyóöíÛQQQÕ«WoܸqãÆìììlmm-,,´òX2,) ŠwçÎÛ·o‡‡‡ßºuëöíÛÏž=³···µµµ±±±µµµ··oÖ¬™\A“– ïëéÓ§QQQwîܹsçNtttddäíÛ·ëׯ/ïc;;;KKËŠ+Šû(`IQÀPvyyy±±±ÑÑÑò±²¼˜ï߿ߠAy+7nÜØÖÖ¶aÆ¢ó*FKŠÉÍ͉‰‰ŽŽ¾uëVttttttBBBll¬¡¡¡¼mlllll5jdaaQ·n]Ñy)`iQÀ ±„„ùXYÞÊqqqqqqyyyVVVæææÖÖÖ666ÖÖÖUªT‘,,) ÔAZZZLLL|||áX9&&&&&¦V­Z 6477777·±±±²²’ÏcW­ZUé(`IQÀ ¶òóó“““cccãããïܹ#/éøøx333sss sss33³† 6lØÐÔÔ´B… ¥Û,) 4Ñ£Gcccå_$$$ÄÇÇ?|ø°nݺ5’·²¼¡åõüÎÃ̰¤(`Ð&yyyIIIqqqñññ‰‰‰‰‰‰qqq ™™™¦¦¦ÆÆÆ 4³©©©‰‰IýúõÍÍÍ+W®LKŠ‘•••˜˜øøñãû÷ïˇˉ‰‰)))??¿¢KüüüEåà´¡€#""‹.iÑ¢Edd¤¨<¼“6̵VªT)33³bÅŠ…Krss«U«öòåËÒ­)h€œê¡‚*Vª)fÏž=gÎ…éééI S´a¨gbbrãÆ “Â%ÉÉÉ-[¶LJJ*Ý ƒßÈø5€L&ã$¬â5kÖ,44´è’7n4mÚTTÞI ¸[·n7n,ºdãÆÝ»w•€wÒ† –çÏŸ;::Ž=ú³Ï>“Éd+W®\¿~}hh¨AéVȼø€Œ_Èd2¦ ‹W½zõ'N\¹rÅÂÂÂÂÂ"88øøñã¥n_$Àû;xÛ ~ ã×2™L•¿ågÏž­ŠõjºŽ;ŠŽÁø€Œ_Èd2•ýðþ´á0‡@ (` €€@ (` €€@ (àÿ‰ïÓ§O5jԨѧOŸ„„щ ÀµkׯW³fM===ÑY Æ™3g P·n]CCC77·={öˆN©]¼xqôèÑ–––•*U255íÔ©Ó®]»”¾ ø_žžžÎÎÎqqqqqqÎÎÎ^^^YYY¢sAjÆ 366>wîœè ¦C‡=Ú³gORRR@@ÀìÙ³×®]+:$5qâÄ–-[edd„‡‡OŸ>}îܹß~û­r·ÂÝþõË/¿\½zuóæÍ…K†Úºuë‰' L¸¬Îš6mÚÂ… §@nܸѻwïèèh±© ÖÝ»w]]]ÓÒÒ”¸NFÀÿÚ·oŸŸŸ_Ñ%~~~¢òå§Ÿ~*zÂÆÆ†R¨X±bùòå•»N ø_ŽŽŽE—´hÑ"22RTjâСC¢S@˜gÏžÉO øì³Ï”»f&ÙþU©R¥ÌÌÌŠ+.ÉÍÍ­V­ÚË—/¦‚@LAC&“¥¦¦º»»¯Y³¦}ûö¢³@jE'B¼½½:¤ÜA0#`PìáǽzõZµjí«› >|¸uëÖˆˆˆyóæ)wý𿌌ŒRSS‹.yòäI­ZµDå Öýû÷;wîüÍ7ßxxxˆÎ‘Œ ´yóf¥Ÿ Oÿ«Y³f¡¡¡E—ܸq£iò>t‘IDATÓ¦¢òèÁƒ¾¾¾‹/öòòjÁÕÕ5%%E¹ë¤€ÿÕ­[·7]²qãÆîÝ»‹Ê@”””Ÿ xzzŠÎuqþüù&Mš(wð¿ÆŒsþüùùóç§¥¥¥¥¥Í›7O~%ѹHÍÇÇgæÌ™]ºtÂtîÜ9000%%%77÷þýûëׯ5jÔ?ü Ü­pžçÿÄÆÆNž<ùøñã2™ÌËËkÉ’%¢CAj ¯@É¢ðw --­fÍšÒ‡'Ož\¾|ùéÓ§Ÿ={V·n]ww÷iÓ¦}ðÁÊÝ  €LA  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀþgÀ€3fÌ(ºdúôé}ûö•Ðbz¢3POžôòòzöìÙ‰'lmmEÇ´ àu'NôððxüøqXXزeËDÇ´Ç€üÇŽ»{÷n¯^½F}ýúõcÇŽ‰Nh'FÀþ'--­U«V‡¶¶¶–Éd‘‘‘ݺu»zõª‘‘‘èh€¶a àÆ7dÈyûÊd²¦M›}úôàÁ===ggçÙ³g7ÿ"t:½þcá6^Þ €{ðï eþüílmmýåËÎ^–7—b{pttô¸qã^¾|©­­Í›¶âxN @‚h+]]ÝôôtÖ–ÌÌÌÕ«WKKK÷éÓgóæÍ4ÍÈÈèñãÇ Î‰‰éÑ£Guu5kcPP„„DïÞ½/_¾\ßÎ:Ð3~üxIIÉÎ;¯X±¢¬¬Œõ»555û÷ïïÝ»·¸¸x¿~ýΜ9Ó¢ŸhРAëÖ­;~üxƒûoÞ¼Y]]½cÇŽ²²²ãÆ{ôèQýõ£Ùõg•——¯Y³FII‰íÈsYYÙòåË;wî,))9iÒ¤¸¸8¶?iƒÆÆîU˜‘‘‘¤¤¤¤¤dƒÏœN§·ñ“à$&´ÄŸÿÕõîÝ›µEEEåÊ•+ÅÅÅ_¿~3gÎÖ­[™L¦‡‡Çرcœ»dÉ’}ûö±^6!!¡sçο~ýzûömŸ>}Ü:11QQQñÌ™3ÙÙÙÙÙÙ§OŸ¶´´¬ÿ.F³±±Ù¾}ûçÏŸKJJ^¾|Ù·o_OOÏfþ8uâããUUU3cÆŒuëÖ}ûö­²²2??ßÇÇgüøñ]‡F£-Z´¨îùóv4mþüù'NœÈÊÊÊÊÊ:qâ„’’Ò—/_šHÅzncß UPP¸qãFnnnNNÎõë×åååÃÃÃ[ñÉp 0@˰þöÏËË»ÿ~ï޽ϟ?ߨñ?þìÛ·/“ɬ¬¬TVVþøñcý·~üø!''—““ÃzÙ… =z´þ//¯É“'7¸µ¥¥åXï²oß>Öú´k×.Öï>~üØÐÐð¯?«òòò:48FJJеš6}vüøñÆ£Ñh{÷îeý–½½ýÂ… ›HÕœ<}úô³gϲ~ëôéÓ3gά?¬ùŸ ·¡´ÌŸÃH ~ƒ———ÛÛÛkhhtèСo988,]º´þȃþYrTUU“’’êùùó§²²rƒc”””RRRXoZ7]X}W²þ"òòòý8lÛKKK;vìØàƒeË–edd4ç:4íëׯögÈääänݺ5‘ª9¸W¯^iii¬ßJMMUQQiì¦M|2܆ Ð2õ¿ëkkkóóó===ÜÝÝë°µµ0a»wïJJJ˜Lfyyyý)yyy yyyL&³ºººW¯^oß¾mpY11±¾]»v Ž)//gMUVVÆZŸjjj‹ÝÌö¸¸855µǤ¤¤LŸ>]BBBSSóßÿõòòª­­mì:4­²²²±ÛÑh´?„öíÛ7vµšššæ`qqñŠŠ ÖoUTTˆ‹‹×ÖüO€Û°  •ètº‚‚Âܹs]\\êFSëÚïܹséÒ%===III–’’RJçÎgΜyþüyæííݵkWƒ—•‘‘ùþý;ë¥uµ‡Uçγ²²X[|Ù®][ÿÓöòò3fLƒÆ>}ú>>¬->d0- À#„zÞüŠí5ÞÞÞšššuÛ–––VVVYYY999GŽ™5kVƒSLMM·mÛ¦¤¤ôû÷ï?/ûñãÇnݺ]»víÇ%%%~~~.ÂJLLTRRrvvÎÉÉÉÉÉ9{ö¬••­ñÚÆYÛ«««þüùæÍ›7véÒåîÝ»3räÈëׯ§§§WUUeeemß¾}Ò¤IußÒÖÖ~ðàAuuuÓwd iiiyêÔ©º…ܧNRRRúüùsÝwoÞ¼©¦¦öêÕ«ÒÒÒäää­[·ÚØØÔŸÛĽ‚ƒƒåååëVAçææÞ¸qCAAáÏqþæ|2܆y-ÓØïëÁƒ»ºº2™Ìüü|+++99¹E‹78åáÇ4mçÎ]öýû÷“&M’––îСƒ±±±ŸŸÛcÆŽÛ¡C›ÜÜ\Ö™ÎæÇ®ÿ[\LL¬K—.#GŽ´³³k°ÌªþÜÀÀ@ ‹N:IHH¨©©mÙ²¥°°°î[¾¾¾êêê"""Íü;€F£•””,Y²D^^¾cÇŽ&Lˆe=òôéÓêêꢢ¢={ö´··¯{Tº9÷zð྾~‡:tè ¯¯ïííÝô‡€ ¤`C^+//WPPHNNVVVæÔ5_¼x±iÓ¦èèhN]¸ sÀÔÔÔ 0`Íš5 ,àTNà`0 @ 0(À € @ 0(À € @ 0(À € @u pZZš………ŒŒŒŒŒŒ……EzzzcGÒÙãeZ€¡h.))111a0©©©©©© ÃÔÔ´¬¬ŒíÁÌ?899Íž=›Ç™š¢ïvrrŠŠŠrww¯oY°`ÁÚµkÿznmm­ººº§§§¾¾>73´E{À>>>ÖÖÖ¬-ÖÖÖÞÞÞÍ9÷Ñ£GJJJ¨¾@e-Àqqqººº¬-:::ñññÍ9÷ĉ¶¶¶ÜÉÀ‚+--­o©ªª’’’úýûwÓ'~øðaÊ”))))íÛ·çrF€6øsˆŠŠVVV²¶TVVЉ‰ýõÄ%K–8p ™wÙ³gÛÏDBB‚Çÿ/eµ¦Œ5E{ÀJJJ±±±JJJõ-ÙÙÙzzzYYYMœõãÇ ÏŸ?+((´åît:E?à1îUŠÎkkkÇÄİ¶ÄÆÆjii5}ÖùóçgÍšÕÆê À-Àfffnnn¬-nnnÓ¦Mk┪ª*,¿¾@ѼlÙ²GGÇ‚‚‚‚‚‡°°°¥K—Ö@§Óœr÷î]--­¿ö’¨€¢XZZ: ""BEEEEE%22Òßß_RR²‰SNž<‰î/ð ¬6b‹° ŽÐ-Âl(À € @ 0´À»wïV­Z%''÷çã Ð"(ÀÐ .TTT &„ïáy6ðÀ_ ɯJ<†måãã3tèPIIIúÿE:—B AAAóæÍ³²²JIIÉÎÎ>{ö¬„„„›››0ôb©I(ZJHÆU@¨Lž\NNnþüù4ÍÃÃãÒ¥Kááá¤s /ô€„‚¦¦æ‹/|}}ÕÔÔÔÔÔ^¼xáïﯢ¢ÒÒë°Jc€º-„b ½¥„deüa`P€@ €`P€ ¹^½z5wîÜ.]ºÈÊÊyyy‘NÄǰ4×èÑ£½¼¼ôôôâââ–-[öãÇ¥K—’ÎÅ—°ã؈€­M›6>|¸~ë«ØØØ™3g&''“MÅUÜ«¨4l €@òññqttŒ-++cmoõo¼²²2yyùV¿Ð/`',h“   yóæYYY¥¤¤dggŸ={VBBÂÍÍ­-ÕÅ××wÀ€ )TÐÕc=`<“'O6lØÎ;ë[ìííýüü^¿~]÷eÓïTøó·âÏŸ?‡ vñâÅ‘#Gr<-u  mfiiÉÚ²`Á‚„„„ú/[ô>àœœœ3f¸¸¸4³úÚÙÙÑYØÙÙñò°Æ ]=6ÐÁ#**Z\\,!!QßR^^.''׊ÜÌÌÌ)S¦;vÌÔÔ”£©=`h“.]ºddd°¶¤§§+++×IoRýaß¿Ÿ4iÒñãÇ…¡úr 0€P066¾~ý:k‹««ëøñãë¿lÎtnnîĉ\NNnþüù4ÍÃÃãÒ¥Kááá-ºÈĉ·oß>yòdîd.˜ìdsÀ Þ½{·uëÖ6räÈ#GŽ´ô!"¶+¥ äää8‘z°O¡@,Â(Ô-Àiii222222éééM\[[{úôimmm ‰ܺu‹g9Z¢¸¤¤ÄÄÄ„Á`¤¦¦¦¦¦2 SSÓ›—²ZµjUllìÇ‹ŠŠ\]]]]]y™ ¥(:Ùéääåîî^ß²`Áƒµk×þyp``àñãÇ}||8uwÌ@îUŠ>†äãã³uëVÖkkëC‡±-À.\X½z5¯¢ÁÿÇd2ãããÃÂÂÓÒÒjkki4š´´´ªªêÀ‡®  @:#uQt:..NWW—µEGG'>>žíÁ¡¡¡%%%£GîØ±£´´ôرcƒƒƒySH………­X±¢{÷îæææAAA æææ³gÏž={¶‘‘QQQÑÙ³gûôé3tèÐóçϑΠ@Ek+--­o©ªª’’’b»g©„„„””Ô‘#GÌÌÌh4šÏæÍ›½¼¼FŒѺ»cº1AAA;wîÌÊÊZ±bÅÌ™3ûöíÛØ‘UUUþþþW¯^õó󳴴ܼysÏž=y€#„î9à`11± .üûï¿õ-W®\¹~ýz```ëîŽü§ôôt[[Ûèèh‡9s戈ˆ4óÄïß¿Ÿ9sæÂ… K–,Ùµk—””Wsp–Ð=,//ÿóçOÖ–üüüÆæ;uêT×÷­7uêÔæì¯Öà…Vî9u\\\ÍŸ?¿ùÕ—F£uïÞÝÑÑñÇyyyZZZ\+À×(Z€µµµcbbX[bccµ´´;¸uw±³³kÎk/…Yii©¥¥å¥K—‚ƒƒwìØ!..ÞºëtëÖíÊ•+îîîëÖ­[±bEO” Š`333777Ö77·iÓ¦±=xÆŒOžó ‡ìììÑ£GKHH«««·ý‚£Fzÿþ}yy¹‘‘QRRRÛ/ÀÇš~ÿ)EEE}úôqppøùóçÏŸ?÷ï߯ªªZRRRkòòòòaƹººæååååå]½zµS§N­¾;e?^úòåKß¾}÷îÝË‹_¼xQQQÑ××—à îUêVš¯_¿NŸ>]ZZZZZzúôéß¾}cýnƒOäû÷ïVVVòòòâââC‡õóókË­Q€{õêuîÜ9îÝ"$$¤k×®W®\áÞ-ÚŽ{Ë}ÙòUÐ_¿~5jÔ¾}ûX–sCRRÒ„ Ö­[Çv*º°€”œœœ &lß¾ÛÕ—F£õë×/((ÈÔÔ´²²rãÆÜ¾¥ ÃÿTTT˜››[YY­\¹’7wìÕ«×Ë—/kkk7oÞÌ››PPµ6Fh‡ -ZT^^~óæM? ™™illüŸÿüÇÖÖ–—÷ø+ A×9s&:::88˜÷[‘(++ûûû1BAAaáÂ…<¾;BÚÕkšö€CCCg̘ÒÄöÎÜ–`llìææ6nÜ8Rº­(—òóóçÎ{ùòe‚Õ—F£ijjÞºukáÂ…Ø£„ÐuõšCØzÀ³gÏVQQ9zô(é 4véÒ¥cÇŽ………ÉÊÊ’Î |oC"K¨ °››Û±cÇÂÃÃ[½Ï3ÇÙÚÚ&''ûøø´k‡ ˜§„§gee 4èÅ‹:::¤³üOuuõ„ ŒŒŒHga‡9`àŠÕ«W¯X±‚RÕ—F£µoßþÎ;ÞÞÞ¤³p C^<ˆ÷ðð „ …7nXXXèééõêÕ‹tΖ±Ö†!èÒÒR---77·Ñ£G“ÎÒ¨£Gz{{¶o¿€ A‡í߿ԨQT®¾4mÆ 222û÷ï'€ó¿«× ßNLL9rdlll×®]Igù‹ììlƒq÷îÝaÆ‘ÎÂ=`à¤õë×oÛ¶úÕ—F£uíÚõܹs .,**"€“¼«×:‚Ý~öìÙÚµk?|ø &&F:KsÙØØÔÖÖ^ºt‰t:ègÔÔÔ¬_¿þèÑ£|T}i4ÚñãÇŸÕÕÕ%¥­²³³uttž?ÎïL_@Úäܹs£F€êK£Ñºvíêàà°råÊÚÚZÒYZOкz!`=àŠŠ 55µ'OžPíµƒ­Æd2GŽùÏ?ÿ,[¶ŒtpÜ«Ui8EÀ °‹‹ËÓ§Oìݺ?~;vìÇ;wîL: 2`ž¤\UU¥¡¡qóæMCCCÒY8ÌÖÖ¶¢¢âüù󤃀 Ã0´Ò­[·z÷î-xÕ—F£íÝ»÷áÇÑÑѤƒ´ °€;~üø¦M›H§à YYY{{ûÕ«W Ìp`AæççWYY9qâDÒA¸eÉ’%¥¥¥wïÞ% Åg²“ƒfxâĉsçÎ]´hé \ôòåËÅ‹ÇÇÇco,à,Ââ)Á(À ÆÆÆß¾}'…»fÍšÅ`0¶oßN: `žŒ¼víZYYÙ}ûö‘Âu_¿~500ˆíÖ­é, hP€yJ pII‰ŠŠJLLL=Hgá…mÛ¶åææ^¾|™t4x ZæúõëÆÆÆBR}i4Ú¶mÛ|}}ñHð`Áäìì¼zõjÒ)xGFFÆÎÎnýúõ¤ƒ4 ° b2™£G&„§–,Y’““óôéSÒAšX={vÕªUt:tžÙ¿ÿ–-[ð–$à Ô-Àiii222222éééMLÿÏrRMVV–¿¿ÿÂ… I!`úôé;v¼uëé GÑ\RRbbbÂ`0RSSSSS †©©iYYY§0ÿ/žE¥šË—/Ï;WZZštètúvíÚUYYI: À_Pôy''§¨¨(ww÷ú– ¬]»–íñœ]&ο!1™Luuõ;wîèéé‘ÎBÌäÉ“'Mš´fÍÒA@ÝcH>>>ÖÖÖ¬-ÖÖÖöF[nxñâ…œœœ0W_vèÐ!‡¢¢"ÒAšBѧ««ËÚ¢££ßÄ)]»víÖ­›••UBB—RÔ¥K—–.]J:a7nœ““é M¡èX«˜˜Xii©¨¨h}KUU•””Ôïß¿Ùonn¾qãF}}ý?~ܽ{÷ÀÏž=4hPëîΧCÐyyyß¾}“‘‘!…°ºÍ)?}úÔ¹sgÒY€¿ ÝV”--À ¸¸¸x{{ÿõ‘P;;;{{{¶ß¢æÇÒ´S§NEEE¹ºº’B k×®mß¾ýñãÇIþ&tXII)66VII©¾%;;[OO/++«9§çä䨪ª–””´îî|Ú2dÈÁƒÇŽK:%ääähkk¿ÿ¾gÏž¤³ºEXÚÚÚ111¬-±±±ZZZÍ<ËgÅÇÇggg“BJJJ666ŽŽŽ¤ƒ°GÑlffæææÆÚâææ6mÚ´fž~ûöíáÇs!u¹ººZ[[‹ˆˆB!6l¸sçÎׯ_I`ƒ¢c­ÅÅźººK—.]¹r%Fsvv¾zõjLLŒ¤¤dݬc¦¦¦+W®1bD§N222nÞ¼éääôìÙ3ƒÑº»óÝtMMŠŠÊ‹/ú÷ïO: µìÚµ+;;ûâÅ‹¤ƒ¿º!hii退€ˆˆ•ÈÈHÿúêÛÀŽ;<<< бcÇ‘#G&$$¼yó¦ÕÕ—tïÞÕ÷Oëׯ÷òòJII! !>ëêñßõ€­­­õõõ±÷[vvviiiW®\!ø’Э‚&‹¿ piiiÏž=?}úĺhêýúõK]]ýõëפ³ÿº!hh¾û÷ï>Õ·1²²²¶¶¶X TƒÌ÷nܸ±`ÁÒ)(mÍš5OŸ>ýüù3é ÿÃOc­<ÃGCй¹¹ššš;v$…Ò’’’°M´† =OOÏ©S§¢úþ:Á@5(ÀüÍÃÃÃÒÒ’t > ##³fÍÌuðÍX+/ñËô—/_†ž‘‘Ѿ}{ÒYø@aa¡ººzDDDïÞ½Ig¾!h`ãÖ­[³fÍBõm&99¹åË—þÜ©S'ÒY€0,Ôž`>€ñg^Ú°aÙ3g~ÿþM:8`ª«©©yúô) 0Ï 8PGGÇÝÝtp(ÀTÚ«W¯=z"D¶lÙräȼ£¸ ˜êž>>ÖÖÖ¬-ÖÖÖM/Š‰ŽŽ¾xñâÙ³g¹wªªª^¾|9~üxÒA„”¸¸8^ÏÜCÑ—1ÄÅÅéêê²¶èèèÄÇÇ7v|yy¹µµõÕ«W¥¥¥¹ŸŽGBCCÕÕÕ;wîL:ˆðZµjUß¾}ÓÓÓ{öìI: Šö€ X[:uêôóçÏÆŽ_¿~ýìÙ³ŒŒ¸wž?>aÂÒ)„šŒŒÌÂ… Ïœ9C: ŠàñööŽ‹‹Û¾}{KO´³³£³Ã­ðìÙ3Œ?·~ýúË—/ÿúõ‹t4ÔzíO=%%¥ØØX%%¥ú–ììl==½¬¬¬?VSSó÷÷g}‡k_^A…·!ýøñC]]=77WTT”l°´´2dÈúõëI„îmHÚÚÚ111¬-±±±ZZZlþòåKïÞ½ta)Õ—m??¿1cÆ úRÁ¦M›Nœ8QUUE:Š`333777Ö77·iÓ¦±=˜ù‡úF^dåŒ?S‡žžž¦¦¦‡‡é Pȵ²U\\¬««»téÒ•+WÒh4ggç«W¯ÆÄÄHJJÖÐô˜€ A÷ìÙóåË—ªªªdc@/^ØÚÚÆÅÅñõ° ´‚Ð AKKKDDD¨¨¨¨¨¨DFFúûû×W_÷áà T_ê7n\‡|}}IÁA¾«GAÄ{ÀÇŽKII¤MEÀÍ›7/\¸H:ð”Ðõ€…ÜóçÏ1L5sæÌIOO #zÀlí———wíÚ5==]FF†T`ëôéÓ¯^½ºsçé À;è ‘ׯ_ëèè úRÐâÅ‹ƒ‚‚’““IA€L9/^¼7néÀ†¤¤¤Í‰'HAð—žõÏŸ?oÞ¼ðîÝ»ÜÜ\¦¨¨È`0LLLæÏŸß`»fAvzРA...C‡%š››Û¿ÿÄÄD¼$@H‚ÎÈÈX¶lY÷îÝ=<<ÆŒóøñ㬬¬¬¬¬Ç=úÆÝ»w_ºtiFF7b ­ÜÜÜÔÔT}}}ÒA€=EEÅ3f¸¸¸|¯ÑÂÞ¡C‡>}ú?~|âĉlðõõݰaÃׯ_ËË˹™‚=`;wîw" ¯€€Ò) Y6oÞ|èÐ!Ò)€ý½÷éÓGGGÇÝݽ¾åÅ‹ƒÆ«8.00ÐØØ˜t h–iÓ¦•——ûûû“üªYCÛïß¿_ºti·nÝœœœNŸ>sîܹþýûó D怙Lf·nÝÞ¾}«¢¢Âã[Cë\»vÍÃÃãùó礃žÖÓÓ 3fŒ‰‰ÉÀ_¾|)ÀÕ—”øøx)))T_>bee•ðþý{ÒA€/µ`N—••íܹ3ÞIÎ ˜æ;¢¢¢kÖ¬9vìé À—šU€ß¿ohhçïï8eÊ”/_¾p;™°Á0?²±±yúôiZZé Àþ>´½eË33³º??¿+VXYYÙÛÛs?!¼Ÿ®©©QTTŒ‹‹ëÚµ+/ï m·qãF&“‰~0€ "9üíÛ·èèèúêK£ÑÆŽ‘””Ä@Â)::º[·n¨¾üÈÖÖÖÕÕµ°°tà3Ø ‹ Þ÷€>œ™™yòäI^Þ8eÑ¢EêêêÛ·o'8;a ¸€€Ló¯-[¶œ>}ZðÞJ\Õh^´hQYYYÓ'—••-Z´ˆÓ‘„NeeehhèèÑ£IVÒÔÔ444¼víé ÀO-Àžžžúúú~~~ðâÅ }}}OOOî"oß¾íׯŸ¼¼<é Ðz›7o>zôhMM é À7-ÀIII†††S¦L=z´‹‹KBBBqqqqqñ§OŸœGŽ9uêT###,Åj»ÀÀ@<Ìï† Ö£G;wî|ã/sËyyyïß¿ÏËË£ÑhŠŠŠ ÃÔÔtÞ¼y:uâUNžâñ",“Í›77ñêeà Ož<Ù¾}ûû÷ï±S € á^EÀ*h6xY€+**333¥¥¥ysGà&“9hР#GŽŒ?žtଂXaaaÚÚÚ¨¾€N§oܸñÈ‘#¤ƒhVNNN¶¶¶îÞ½»¨¨h÷îÝ­­­SRR¸LH¼|ù Œyóæ}þüùÝ»w¤ƒø{þðáÈ#ÔÕÕ_¿~]TTôúõk55µaÆÅÅÅñ ŸÀ{ùò%@¢¢¢¶¶¶G%øÀ߇¶'Nœ8eÊ”5kÖ°6ž}útéÒ¥Ž;ò&%ñfººººsçÎß¾}“““ãö½€Ç222 ôùógì0 ÀïHÎ7g[Û̓78<<|ùòåïß¿çö€ˆE‹©ªªîܹ“th’sÀÌfàF2‡ `Á¶uëÖS§N•””…°ˆyýúõˆ#H§nÑÐÐ5jÔåË—IŠÂ^Ðlð`º¶¶VQQ1..®Áó] H"##-,,’““EEEIg€VÂ^ЂæÃ‡]ºtAõlC† éׯß7H*¢nNKK³°°‘‘‘‘‘±°°HOOoìȰ°°¥K—öéÓGLL¬{÷îcÇŽ½wï/£¶&€…ÄÖ­[:T[[K:PE pII‰‰‰ ƒÁHMMMMM­{qYYۃ׮]«§§÷ôéÓ’’’?nÞ¼yÿþý{öìáqæA¦¦¦²²²^^^¤ƒåPtØÉÉ)**ÊÝݽ¾eÁ‚k×®mÎé_¾|2dHAAAëîÎí9`&“Ùµk×ÈÈÈž={rï.@>´³³‹ŠŠjÎ}@5B7ìããcmmÍÚbmmíííÝÌÓEEEEDD¸‹3¤¥¥Q}…ÄÔ©Skjjž?N:PK{ÒØ‹‹‹ÓÕÕemÑÑщÿ뉿~ýЉ‰Ù²eËÊ•+¹–®­0þ,Àjjjª««YwP§ÓéÛ¶msppˆŽŽ¾sçNqqqQQQnnîÙ³gW¬Xñç:äçç'///---##3wî\###þÀ#‚+--e}x£ªªJJJê÷ïßÂ:¾7nÜ8__ßVw‚¹=mii9nܸE‹qïÀK¾¾¾žžž_¿~MOOÏÊÊ:vìØþóÖjjj´´´ìííÕÕÕëʪ¢¢b»vìÇŸ¾|ù’’’RXXXTTTTT4vìØþy˜³³srr²ººº¦¦¦ŽŽN§N¸ò³=’[QÑŠ\'77×ßßãÆË—/ß½{wÓÛÙÙÙÛÛ³ýW?–^½z¨©©qïÀ L&“í~üø»wï<†¤¯¯okkۜӟ={¶eË–èèèÖÝ«=`›®Y³†K×ʪªªêׯßíÛ·õõõy|ëß¿ÇÄļ}ûö?ÿùOcsÏÀ–Ðõ€—-[âèèXPPPPPàààP·ÝUý¬ïO˜0ÁÛÛ;77·ªª*33óêÕ«K–,9pà‰à‡0¥”––Þ»woÉ’%•••ܾ—¨¨è† ˆüË700X³f Ûê[\\XUUÅû`ÂŒ¢XZZ: ""BEEEEE%22Òßß_RR’íÁ[·nussÓÒÒêØ±£¾¾þãÇïÝ»7iÒ$gn޼¼¼¬¬,¶‹ZÇž={6oÞ}*))Ù¡CÒ‰¨ ˜GBBBð0Gœ’ž={¦­­ÿþýûÕ«W“ŽÃ#;wîܵké À;(À\©©©Ù±cGÒAøÃÛ·oÏ;wûöí=zÎÂS‹/þüùóË—/I¡GGG<£‚ ˜ëÞ¼y3bÄÒ)øÆîÝ»ÇO:¢¢¢{÷îݲe ªFÓÒÒ²³³ÓÑÑquuÅk—@P¡s¶à€fš?~UUߟÈ{Ó§OŠŠ:qâ„»»ûèÑ£IÇà lÄÁ»f2™JJJïÞ½¶UhÇoݺ5&&kƒëåääPüÝV ذ¿JJJêØ±#ªïŸrss½½½I§ œ)S¦ÈËË{zz’B!¨¾ ¨P€¹+$$ ýéþýûƒ ŠŽŽ&„ŠöìÙcgg‡]¢þ ð;`î :t(éR\\üï¿ÿnݺõÞ½{{öì!‡ŠLMM{ôèáææF:¥åçç÷éÓÇÑѱ¸¸˜t€VBæ®°°0###Ò)(ääÉ“ÑÑÑø»¤ ööö¤ƒPW§N^¼x‘ ¦¦vèСÒÒRÒ‰Z ‹°ØàÔ”{qqq÷îÝþü)**Úö« &“I§ÓI§à3gÎ:tè¦M›H¡º„„{{{ƒÏ ¸„{‹°P€ÙàÔǸ{÷îׯ_·ýR lF•””$''G: €PÃ*h¾†(¡u455g̘qàÀÒA€[P€¹(443Ðjûöí»zõjZZé üª¬¬¬¶¶–t €F¡sQxx¸Ð®ÀÊÏÏ777‰‰!„)**®\¹Rx^SÈqÎÎ΃ zðà&Ú€šP€¹%%%ETTTYY™t"""† ¢¡¡¡­­M: Û´iÓ³gÏðwLëlܸñÀÏŸ?' !`n ÎñçsçΙ™™8qâðáÃíÛ·'‡¿IIIíØ±cëÖ­¤ƒð«)S¦DDDlÙ²e×®]………¤ãü(ÀÜ"œÀÕÕÕ‘‘‘ÁÁÁæææ¤³ˆåË—'''ûûû“¯ètú¬Y³Þ¾}‹õä@5x ‰ Ž,:>ÞÐÐ088˜t`cÕªU¹¹¹·oß&Z‰¢ØÌÌÌÍ͵ÅÍÍmÚ´ilÎÍÍ8qâÁƒMLLx’®)oß¾Œ7 EDDŒ;öàÁƒm™Mîiß¾½³³óºu늊ŠHgj¿~ýZ³fMff&é À(Z€—-[âèèXPPPPPààà¶téÒúXgj'Nœ¸}ûöÉ“'“Hú¤¦¦¶k×®gÏž¤ƒ´•ŸŸŸ™™ÙÅ‹---IgF >|ܸqû÷ï'D¨µk×NZZZWWwÏž=%%%¤ã?¡h–––ˆˆˆPQQQQQ‰ŒŒô÷÷—””d{ðû÷ïçÏŸß`!Uaa!3Óhü9!!áþýûS¦L!þâðáÃW¯^ýðáé ÂKZZÚÑÑñýû÷_¿~íׯ_@@éDÀ7(úY­^t¾nݺnݺmÞ¼™ã‘sêÔ©‡úùù‘´èèè.]ºð6´Â !ñ‡·oß ö@A«V­úñãÇÍ›7IÚ AƒP}¡ùÐf£uïTVV*((äää46TÀ%Ó§Oÿøñ£¼¼<é,‚=`>­®®Žê ¼§¯¯?}úô­[·’ìùûûçææ’N”ƒÌ1|:þ\SSK:´•££ã“'OÞ¼yC:°¬­­íàà€eÒÀ ˜cÂÃÃù®×ÔÔüóÏ?x¹••=yòäÒ¥K+**Hg†vïÞúéÓ'55µS§N‘ŽTÌ1úúú¤S´@MMµµunnî­[·Hg˜9s¦––ÖÁƒI6ÔÔÔÜÝÝýýýEDDHgªÀ",6Z1å^XX¨¢¢òóçO~ù¯«ººÚÚÚ:??ßËË«C‡¤ãgdffêéé½zõJSS“tEXTÁ`0ø¥úÒh´ŠŠŠž={z{{£ú eeå={öØØØàkêCæŒÈÈHþ–’’:tè„„é Àa+W®¬ªªºpáé Ðß¾}#x ˜3Þ¾}k``@:­]»vW¯^ݽ{wZZé,Ð\ïÞ½2dȆ ¼† 0gð]˜¦¦¦­­-¢ùȰaÃ>~üX^^®¡¡±wïÞââbÒ‰€P€9 33³ªªJEE…t€ÿoóæÍùùù/^$š«k×®ÎÎÎaaa_¾|ÉÈÈ x« Ùhéš·{÷º>|ø{‘Ú¨²²²¢¢BFF†tà„„„‘#G†„„¨««“ÎÀǰ šÒ"""¨<\YY9gΜ<¥©©¹}ûö%K–ÔÖÖ’Îl s@XXe_\UU5gÎfooO: ðš­­m»ví°õ’`ÈÏÏ'8 CÐl´hÀ¡¦¦FAA!55UNNŽ«©Z¡ººzÞ¼yÕÕÕ·oß#HNN:thhh¨ššé,Ð&£G–””Ü»wï!CHg.‚¦®¸¸¸îÝ»S°úÒh´¸¸¸víÚ¡ú 355µ]»výóÏ?555¤³@›¼xñbêÔ©3f̘1cF\\é8Àè³Ñ¢¿w.^¼rõêU®Fh5&“9eÊ”aÆá­ ¢¢ÂÅÅ%!!áüùó¤³ îõ€Q€ÙhÑǽlÙ2ƒ±råJ®Fh‹ÌÌÌÁƒûøøàiu€–Â4uñék€A¨(++;;;[ZZ‘ÎÿzÀl4ÿï’’’nݺýüùSTT”Û©ÚhÕªUEEEîîWÔÔÔÉËË“"hЦ¨ÈÈH]]]T_à ÇŽ‹ŽŽ¾~ý:é À¡¡¡ûöíÃ8¿@n“°°0êŒ?_½zÕÙÙ™t  ®:xzznÚ´ /ÞH#FŒ MNNVSS³³³ûõëéDð(ÀmA‘U->ܱcÇØ±cIJ0`À¦M›¬¬¬ªªªHgÎSUUuuu KOOOLL$þsÀl4Ä¿GoÞ¼éÝ»7—ýEPPМ9sž| …¿Q´—””˜˜˜0ŒÔÔÔÔÔTƒajjÚĦµ .TTT æA¶ŠŠŠ„„===Ü €ˆÿþ÷¿ãÇ777¯¨¨ (§_¿~III***“&M;v,K·Ea999EEE¹»»×·,X°ÀÀÀ`íÚµMŸÈ‘Ùò¦/¶zõêÈÈÈ6Þ€Êjkk,XPYYyûöíví(ú—:UUUuûöíîÝ»“ÎÂEB·–µµ5k‹µµµ··7©<¬Þ¾}˃— ]»v ¯©‚ÚµkçêêZ\\Œ·5@cDEE­¬¬»úrE p\\\ƒE˜:::Ùœ…À'Ož}úôåË—EEE111¤QEwÂÒÖÖŽ‰‰?~|}Kll¬––ÁHu¸ýÂéÓ§sïâ­Ö¿__ß &ÐéôY³f‘Ž|CCC»I7†¢=`333777Ö77·iÓ¦‘ÊS{`ÐÒÑÑyúôéêÕ«=<>~Û¶m¼,æ€ ‹ŒŒÄø3@3õíÛ744ôׯ_£FJKK#„…¸¸¸¹¹9g«/W¡7K[V`ÕÖÖ®X±½g*RRR·nÝš7ož¡¡¡¯¯/é8477·³gÏ~ÿþtÿAn–¶lB¹eË–¤¤$ÎF 8:¾nݺ;wîØØØìܹ³ººšt"j={ö ×ÑÑ122:tèÐ?H'Â0; Fü«««ååå¿ÿ.--ÝÒK]¼xñøñã!!!òòòÍÀ7rssÿý÷ßÂÂBww÷¾}û’ŽB­ºº:((ÈËËkëÖ­ÊÊÊÍ9…{sÀ(Àl4ø¸cbb,--[ñª¬   ¹sç¾yóFÀž]h)&“yñâÅÝ»wïÝ»×ÆÆ†t€À",’Z½KMMíþýû¨¾t:ÝÆÆæÅ‹§OŸž3gFÿþ”œœ}zìØ±„„„•+W.^¼¸[·n¤C€Ã",¢¢¢ ª/uÐéôI“&ùùù=yò$--M[[ÛÂÂâÙ³gxtø p£ZýBà6óçϧ¦¦N˜0aÇŽýúõ;|øð÷ïßIçhàFEEE <øÏvŸ“'Oò>4 --mccyóæÍäääN˜0áêÕ«………¤£üæ€Ù¨ñWQQ ìÛ·/ë·>|ø0vìØGµî ÁÀ=ååå=òôôô÷÷711±°°˜ŸïÌ™3cccjµÚb±h4šŸþ9OΑ‘ñõ×_?þøã36w½„ò©Õêx<>y$k4š)ÿãŽ;DO?`¶›¡òb úfnÁ!…1iò0oò0o20iòÌܼ¥ÂÁ‚ º»»'¸\.³Ù,*SJ…®ªª²Ûí“Gìv{uuµ¨<L)V$†‡‡KKKkkk7oÞ,IRssóþýû»»»“?t  520iò0oò0o20iò°}3Z­¶½½½««Ëd2™L¦'N´µµÉn_î.ˆn€ëD˜4y˜7y˜7˜4yfnÞÒfâ¸JÇGßd`ÒäaÞäaÞd`Ò䙡yã‚RaÅ¡€€@ (` €€@ (` €€@ ø·Û½fÍN§ÓéÖ¬YÓßß/:‘2œø ¡¡aß¾}¢C)@}}½Åb9zôh,;uêÔ¶mÛvîܹcÇѹ#‘Hlذ᭷ÞD1ÿ6íÇçiHãöìÙãp8801²~ýúeË–Õ×× L¥,ûìéӧŦR¢¾¾¾²²²p8,:ˆ2ìÞ½ÛétÚívNÕ[qf‰;àq‡®©©™<.çääLÉÍÍ …B¢òà. …¶oßÞÔÔ$:ˆb$&++«²²R«Õ644ˆN¤¯¼òÊóÏ?_QQ!:ˆ’TWW‹Åâõz¦RÎêÛâñxž~ú鯯F›Í&:‹RuttlذÁív‹2«·µµ™L¦‰NUü~QQQ,›Æc²=nÁ‚ÝÝÝ“G\.—Ùl•©íüùóO=õÔîÝ»ißÿGYYY b¶ëëë{衇®û<ë }°5…ÍÄ% <®ªªÊn·O±ÛíÕÕÕ¢ò …Õ«W¿ýöÛV«UteûñÇ}ôQÑ)f»ÄL ŠŽ¦$ŸþùŠ+¦ù ÿ}oîNÑhtÞ¼y»ví …B¡PhçÎÉÕѹ”„o§[d±X>ûì3Ñ)”gÕªU---~¿? |òÉ'<ðÀ‘#GDçRNÕ)Y­Öƒz½Þx<~æÌ™]»vÍ™3ÇápLï«°pÍÙ³g·lÙÒÖÖ&I’Ífkjjš¼k‚ÿå† Y|_ÝÄ g,geeÝù0 ÒÑѱwïÞï¿ÿ>‰ †Ç{lëÖ­Ë—/KyØžR{{ûÞ½{;;;#‘ˆÑh´Z­Û·oŸ?þô¾ o° €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@¸fíÚµ¯½öÚä‘mÛ¶=÷Üs¢ò)L•H$Dg0[\¸pañâŇ^¼x±$I¿üòËêÕ«].—Ñh H5ܸ&77·¹¹yÓ¦MW¯^½zõê¦M›i_`&p àz7n\¸pa"‘8~üøW_}%:š(`×óûý6›-‰´··—””ˆŽ¤& ÀõêëëW®\988øë¯¿¾ÿþû¢ã©‰=`ÿrìØ±¾¾¾gžy¦¶¶Öét;vLt" 5q àšp8\^^þí·ßI’ÔÓÓSUUåp8²³³EGR wÀ®©««[·n]²}%I2›Í/¾øb]]ØT@Jâ¸@ (` €€@ þCß0<Ò>¦ IEND®B`‚gsl/doc/images/rand-flat.png0000644000175000017500000002411013536674414014320 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœíÝTTuþÇñ;¿ÄQÜVIÐDSÁPÊ5 4a5ŽJeIbæÉŒ´MksS`µÚLtEtÏÑ#{XS“Ý„%£ÝD m›¡H¢1@ ‚#ß?¦ï4 Ã0À Ÿ;×çãó¹÷~î{î½3¯¹Ÿ¹ÜQµ¶¶J wÝ'ºîE0À@  €0À@  €0À@  €0À@  €0À@  €0ÐKTÆè'Y°µZ’påÊ•6óô|Emº²`Ÿï 3è=­í˜¿¬9ɤ볡¡áìÙ³ï¿ÿ~]]]@@@zzz—ŠìÍ$nq/Sué-@·©T¾ÜLL2£3LŸ>ýÈ‘#£Gîy™ßR˶Ž3`@^®^½ºlÙ2WWWŸU«V555Iÿ¦ØfàÚãÇ_±bERR’î¡~ÙºººU«Vùùù9;;÷ë×oúôéŸþyG+R©T¯¿þºZ­6:òÜÐаdÉ’¸¸¸DDDé'­V¿£ëÒÏ–••ìâââââ|ðàAôZíºuë† æàà0bĈ­[·š¿Y9 €y™|ø_|aΈ´V«­©©9vìØÊ•+§OŸ¾}ûöQ£Fµ™çñÇß½{÷•+Wîܹ£Ñh’’’üñ®®HïìÙ³ÉÉÉÉÉÉ)))kÖ¬ÑMZ±bE\\ÜÑ£GJJJ~ÿûßÿôÓOæ<©•+WþáسgOUUUUUÕž={Ö¬YóÎ;ï˜_ w.üîI&^núIׯ_ŽŽöððpww_´hQ]]~Rvv¶ŸŸ_Ÿ>}:êGÿ¢¶··÷òòš2eJ||ü•+WŒ®(777**ÊÓÓÓÑÑÑ××÷í·ß®­­íhEF×h8µ¾¾þå—_îß¿¿³³óŒ3 çLNNöóó³³³{àîܹcâI®ëÀAAANNNNNNAAAº/ªÍ) ° ܆‚@` €€@` €€@` €€@` €@!|âĉ¥K—º»»«T*ѵÐ9…ð‚ xìØ1Ñ…`Ukk«è,I¥RÚ3(’B΀°-0ÀˆÐª,]zFk×®5ºM{w'äËJ¥´K–,rWrt¬— A  €0Ü/ºË0¼¥þÿ| -…0Y °- A  €0À@€Õ]ºt)**ÊÍÍÍÍÍ-**êòåË&fVµcbΞז——7oÞ]RRváÂ….•×Fvvö˜1cLÏc~y0ÅJ?shÓØ,:R]]ýàƒêšókgg×ÜÜlØIss³½½}G«ˆŒŒÌËËkll¼|ùò¦M›xòäI£sJ’”˜˜hØ’°`Á‚.•gèúõë#GŽÌËË3±Ì/O¬—$0½ÆÆÆ„„„‘#G:99ér«OŸ>]ê¡«ÜÆ¶mÛf̘at’$I%%%†-çÏŸø`Ĉ...MMMNNN]z‹P«Õ………jµZߢÑhÊËËÍY¼¢¢bøðáõõõí'©TªÆÆFGGG}Kcc£››[KK‹ùåé\½zuæÌ™7n ëÒ‚&ÊS.Â1ÒÓÓwîÜàââ"IR›oXÛÿQlû?=zô©S§ —*,,ô÷÷7³Óïþ×®]kóÐËË«Kåé–ŠˆˆHJJêjúvZL €À”6§˜©©©†S;½”$iÖ¬Yiii†K¥¥¥EFFšYÀþýû'OžÜÑÔ={ö´y8mÚ´.•WYYþᇆ††šY’ùåÁKŒc+ ›€Þüùó£££ËËË+**6lØðôÓOwõ-âæÍ›>>>ëׯ¯®®®®®^·nnÌV?ƒa‡¡¡¡éééåååÍÍÍ.\X¿~ý€òóóÎ,IÒüùó·lÙ¢Ñh4Í–-[Ôjõ?þØ¥òöîÝkb†.•§<ÖK’Æ€Þõë×£££=<<ÜÝÝ-ZTWW×·ˆ‹/Ξ=ÛÕÕÕÕÕuöìÙ¥¥¥†S ;ÌÉÉ™3gާ§çý÷ß?dÈ ãááa¸`}}ýË/¿Ü¿ggç3fvµ6£çf555Ý(O‘¬—\mda§äääsçÎ%''‹.äÂEXi×®]/½ô’è*`œêÁ0@‡3`…@` €ÀêNœ8±téRwwwÃ@•——7oÞ>>©©©S§NÕ·9r䥗^êÆ¸·­°^"4FÀô† òßÿþ÷W¿ú•îá™3gF­‹°Æôµk×ÂÃÃ7oÞjzN•JURRòàƒê[JJJ¦L™ríÚ5óË31OûRííí«««ûöí«o©¯¯÷ôô¼}û¶éRmCÐ F›SÌÔÔTé‚®¬¬ ÿðÃ;M_={ö´y8mÚ´.•g´½£úýë_ççç¶|÷Ýw<ð@WŸ&$L‹ˆˆX¾|¹F£©¬¬üøãKKK-¾ ÃsÐðððwß}÷·¿ý­93K’töìÙäääŠŠŠŠŠŠäää”””5kÖX¯¼åË—/\¸0++«¶¶¶¦¦&##cáÂ…+V¬°ìÁ4½êê길¸ììì»wïΙ3gË–-®®®]}‹0:Ìk8ŽmzL»¦¦ÆÝÝ]WŒŸŸßõë×õ3××׿ñÆŸ}öÙíÛ·§L™²aƇ~¸Kµ­Öð ¶y˜žžž””T\\,IÒÈ‘#ß|óÍgŸ}¶‡k”3¾îU0yJNN>wî\rr²èBî!| víÚõÒK/‰®–Á©žœt8@Q` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@`¸ßôäêêê½{÷>|øÄ‰•••’$ 8000044ôùçŸ÷ððè•"PšÏ€¯\¹²xñbooï={öL:õàÁƒåååååå ùä“O¼½½ccc¯\¹Ò›å  ªÖÖV£œœœ|||’’’ÂÃÃÎý»ßýîâŋ֬P•ªÃ͸§X/:<ž7oÞ÷ßßQúJ’ñý÷ßÏ›7Ïe lœêÁ0@GÀ0°žÎø™gžÑ]ÿl¨¦¦æù矷NI(_çìãã3vìØÝ»wë[¾úê« & >Üš… df mŸuêÔ_þò—Q£FYµ²K—.­X±â«¯¾’$iúôé›7o~à:šY¥RµiéÉ=ßtðÝwßM:544ôá‡>r䈵ӷ¾¾>44400°¬¬¬¬¬,000,,¬¡¡ÁÄ"­ÿ˪åÐC]¸K¥Rõë×oÀ€íO7-nÇŽÁÁÁ«W¯îß¿ÿþýW¯^=qâÄ;wZ{½ô³øäÉ““&M***ÊÉÉÉÍÍ9sfII‰UËÊÊÊŠ‰‰1l‰‰‰ÉÌÌ´êJè5ðÛo¿¿k×.µZ½eË–+V̘1cíÚµÖ+«¨¨hܸq†-cÇŽ=s按E dgg7xðàèèèââbëÕ@ÏuÀ¥¥¥³fÍÒ·L›6íøñãçγ^Y555m~éÁÓÓ³ººº£ù###ÓÓÓëêêŽ?RPP`½òè©VY²³³knn6linn¶··7sñm۶͘1£ÓÙLœÄw§è^dgg§¯ÓÑÑQ÷P÷¯»»»a£½½½¾ÑÁÁA×èèè¨o´··7ìÍÙÙÙ°7WW׎Va¥Þ nÓ›““SûÞÚ4ö°7ó7¦¾7ÝÓ·jo=ÜÑ=ì-$$Dô!f½DéßÛ¨ÕêÂÂBµZ­oÑh4åååæ,^QQ1|øðúúúî­]Ά¤R©š››õo¦MMMMMMîîîZ­¶OŸ>ºÆ[·nݽ{W’$µ¶¶ªTªºººûî»ÏÅÅEר›¿¶¶ÖÅÅEß[KKË­[·:êM×e{Ó5vÔ›£££.Et½Ý¼yÓÓÓÓ°·¦¦¦–– ö¦Û˜†½ÝºuK’$}oºIõÖÒÒÒ~×tµ7­V[[[ÛQoæìh;;;Kõ&ç×Ð;¬÷*è°ßE‹¥¤¤8;;›X¸¡¡áµ×^KMMµxY¡¡¡ï¼óΓO>©où÷¿ÿý§?ý)''ÇœÅ5¯¯¯RX¶µAy8Þ¼oß¾   C‡u4ÃW_}´oß>k”5kÖ¬´´4Ö´´´ÈÈH3ß¿ÿäÉ“­P–ÑaŸ;wnÒ¤I3gÎ Ù¾}{qqq]]]]]ÝÙ³g·mÛ6eÊ”§žz*88ØJ—b-^¼ø›o¾yÿý÷kjjjjjÖ¯_ÿí·ßÆÆÆêg0ü[ä°°°¿ÿý殮¥åâÅ‹ï¿ÿþÿøÇ>øÀ…`œYWUUíÙ³'77÷äÉ“UUU’$ 8Pw_ªçž{ÎÓÓÓz••––®X±B7æ¶yóæ¡C‡þR·Á˜ÀáÇ·nÝš——wãÆ µZºzõê‘#Gv{Õrv“smPŽ7@ÀwÀ÷29¿éȹ6(ÇÀï (fðùóçcbb¼½½íìì¼½½cbb.\¸`íÊP°Îø‡~øÍo~ãççwôèÑ›7o=zÔ××÷±Ç+**ê…úP¤Î‡¶ÃÃÃgΜùúë¯6þùÏþòË/³³³­Y›0rþÞKεAy8Þ‘a¹¸¸\¸pÁð¦T’$i4šáÇënë£ù䓳gÏîܹÓô¢m—œ‡Ýä\”‡ã ù°áM;¢°—¨œßtä\”‡ã °Þ«àþNçàå€Åq', €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €€@` €¡íÈy³È¹¶žX»v­$IÎÎÎ’$ 4H’${{{;;;I’úõë'I’——W@@€®]÷P7¿ný‚ºÆ®öæáá1~üø6½999ö6xð`ÃÞ\]] {Ó5ö°·Aƒö¦+Xß›®`]oŽŽŽí{Ó7Z¤7ý‚úÞ ·°~cö¦{úúÞtO_×›~ÁöÖ¥­k´Ôa£Û ÙÑ–íM7§¾·ž6=éÍR;Ú²½…„„tïÝI²Ú»®J×; ©TòÝ,r®ÍRZ[[U*UCCƒþõ/I’V«mllìÛ·¯nª®±¥¥E«Õ:::.ÞÔÔtß}÷é^‡]í­¥¥E÷>¢×ÜÜ,ýÿ«Z¯£Þ´ZmŸ>}zØ[kkë­[·:êÍ°àæææ»wï¶ú}úô±To*•êöíÛí7¦ƒƒƒ¾7­V{ûöm3k3ºk,Û[›]Ó§OŸúúz‹6ºÞœœœz¾£-Û›®àŽzëÆaÓÃÞzaGwµ·n¿yZï]WùïæÝ ç“smPŽ7(† ˜ï€! ñññ¢K€^ÅÇ[#äü©_εõ„RŸ—­c¿@18@Ý•ž²ÂÇ[#äü©_εõ„RŸ—­c¿œ (0dA†£C`UŒ/!ça79×åáx‚@Q` €€(Ÿ o·ÇFÈùÂ9×åáxƒbp', I0dB†£C`UŒ/!ça79×ÖJ}^¶ŽýÅ`dx»=>Þ!çOýr®­'”ú¼lûà E!€! 2«b|É9»É¹6(ÇÀ4ŠB  €0@ùdx»=®°0BΞȹ6(ǃ;aI"€!2«b|É9»É¹¶žPêó²uì(CÐ ÃÛíññÖ9ê—sm=¡ÔçeëØ/gÀ(  YáèXãKFÈyØMεAy8Þ† P` €Ê'ÃÛíq……r¾ðDεAy8Þ Ü H ™áèXãKFÈyØMεõ„RŸ—­c¿@1‚@Þn·FÈùS¿œkë ¥>/[Ç~8@Q`È‚ G‡Àª_2BÎÃnr® ÊÃñ0 €¢À@  P>Þn+,Œó…'r® ÊÃñÅàNX@’`È„ G‡Àª_2BÎÃnr®­'”ú¼lûŠÁ4Èðv{|¼5BΟúå\[O(õyÙ:ö À0ŠBCd8:VÅø’rv“smPŽ7€!h…@`€òÉðv{\aa„œ/<‘smPŽ7(wÂ’DC&d8:VÅø’rv“sm=¡ÔçeëØ/P † @†·Ûãã­rþÔ/çÚzB©ÏËÖ±_΀P² ÃÑ!°*Æ—Œó°›œkƒòp¼ A (0À@”O†·Ûã #ä|ቜkƒòp¼A1¸$2!ÃÑ!°*Æ—Œó°›œkë ¥>/[Ç~b0 €2¼Ýoó§~9×ÖJ}^¶Žýp €¢ÀŽ€U1¾d„œ‡Ýä\”‡ã `E!€€@ |2¼ÝWX!ç Oä\”‡ã ŠÁ°¬åÒ¥KQQQnnnnnnQQQ—/_]¦(!€ëëëCCCËÊÊÊÊÊÃÂÂD×….áèX•Æ—6mÚ”ŸŸ¿{÷n}Ë /¼0qâĸ¸¸îu(ça79×ÖJ}^¶ŽýÅ`Ú*²²²bbb [bbb233EÕÞnO øÀÊ*ñIDAToÕjuaa¡Z­Ö·h4š€€€òòòîu(çOýr®­'”ú¼lûà Ø”ššÃOOÏêêêžôyçÎýÿ›››oÞ¼Ùf†¦¦¦¦¦¦67oÞlnnÖ?¼{÷®$IµµµF{ÓMÕ÷ÖþK놆†ö½µYP«ÕÞ¾}[’$ÃããÎ;---mzkii1,C7ÿíÛ· {»{÷®¨Þ$È•œ£½iµZÃÞ$Ijjj2ìM«Õö°7£¯ACwîÜ1ìMǪ½é î¨7s6¦e{“íaÓÐÐ`øÖ­ë¤Í[÷;wjkk¥ÿ}³µŠVÛggg×ÜÜlØÒÜÜlooßé‚2‘È•ÂK ãK÷Ô´l±Ñº‡íÖ=l·n`£uCЦŒ=úÔ©S†-………þþþ¢ê SJàY³f¥¥¥¶¤¥¥EFFŠª€N)aD¢®®nܸq±±±¯¾úª$IÛ¶mKMM=uꔋ‹K÷:d ¦ØhÝÃvë¶[7°Ñº‡!hS\]]>|üøñ¡C‡:ôûï¿ÏÉÉévúÐ ø@dŸ»Ö=l·îa»u­{¬·Ýúp^£¦N*ºÛÃFë¶[÷°ÝºÖ=VÚn| @%| €Í!€€@` €€@` €€@ø—.]ŠŠŠrsssss‹ŠŠº|ù²èŠlÉ'–.]êîî®R©D×bòòòæÍ›çååÕ¯_¿àààŒŒ ÑÙ†o¿ý666ÖÇÇÇÞÞÞÛÛ{Ú´iÿøÇ?Dec4ŸŸ/Us¨Ú±ø*àŸÕ×ׇ††–•••••†……544ˆ®Ë,X°`àÀÇŽ]ˆÍ ©ªªÊÈÈ(//ONNŽß¹s§è¢l@\\\@@À—_~Y__úôéU«V­[·níÚµ¢ë²­­­ .LLL]ˆÍhý_ïŸ_CúÙ¦M›òóówïÞ­oyá…&Nœ'°*Û¯šiåÊ•}ô‘þuaaáܹsÏŸ?/¶*[TRRòÈ#ÔÔÔˆ.Ä6$%%¤¥¥ñR5G/l%΀–••cØ“™™)ª(؆  ‡³|}}ù¾£{ìììúôé#º ÛPPP°cÇŽ””Ñ…àðÏŠŠŠÆgØ2vìØ3gΈª÷Žììì1cƈ®ÂÆÜ¸qC÷Uú«¯¾*ºÐØØ“ššêêê*º[2hÐ ;;»ÁƒGGG[¼øg555†-žžžÕÕÕ¢êÁ=¢ººzõêÕ›7o]ˆÍÐ]ãîîâêê/º"ðæ›o>óÌ3ÁÁÁ¢ ±%‘‘‘éééuuuÇ )((°ì*ø&àgööö·nݲ³³Ó·´´´ôíÛ÷öíÛ«²-|±ÔUÏ>ûl||üOÆúo ŒŽŽž6mÚŠ+.\¸àîã»ÈúP}û*yÿ5 ×ëýüü¬_[¿èìì\¹råˆ#o¾ùæõë×ÛÞ«¨¨(%%Åh4Æ”””½{÷Ú>`kkë¢E‹"##üë_ÿÚb±´µµ=ñÄQQQáááO=õTGG‡Ý3êtº‹/>ùä“¡¡¡#GŽ|þùç¿ýöÛøçÜqÇÏ<óÌš5kì¿©©éùçŸ;vlHHÈ Aƒf̘±gÏëÖÕlë½ÚÚÚžzê©èèh‡+Ï­­­?þøàÁƒFczzzyy¹í?¿{UÖgqø\.¾ª=ÿD¯²p‡íoMggç?þñýû÷Oœ8ñç?ÿ¹Ý:nÑ¢E/¾øâ©S§š››?þøãQ£FmÛ¶­ëÖO>ù$22òwÞ©««»|ùòŸÿü爈ˆO?ýÔzߟýìg[¶lihh8uêTJJÊêÕ«ö³ŸmÞ¼¹¾¾¾käÕW_í^R\\ÜæÍ››ššÎ;÷ÐC½ð ÝqöϱUQQ1zôh»cxàgžyæë¯¿6™LõõõEEE÷Þ{¯³ÇÑétóçÏ/((¸zõj÷§Óét<òȺuëjjjjjjÖ­[}æÌ™ª²½¯³›z}U{ø‰^FîqøF6!!Á3¶9ñ›ßüÆö¾{÷î4iR×׳fÍÚ°aƒí­yyy>ø õ¾Ö|µX,‡6¶#‡ºãŽ;ìžÑNCCèQ£z>ÆÙx[[[pp°Ý1´MÓžG§Ó­Y³ÆÙa:î·¿ý­íM+V¬˜7o^U¹À½¾ª=üD/#€÷ØÍþÿøÇ?Þÿý[n¹å?ÿó?íÐétÖ–®KCCCDDD××7ÝtÓùóçmo­ªªŠ‹‹³Þ·ººÚzÓÕ«W»„……Ù=c[[ÛŠ+n¹å–ààà®w~~~Ëvöϱjii ±;fâĉ .¼pá‚+£ÓéÎ;çì°î/ÎéÓ§‡ ÖCU®p¯¯j?ÀËØË¸Çá £GΙ3çìÙ³¶tq0`€Ã»]½z500ÐzÓõë× ÔuÖV¯×›ÍfÛS›G¬OÔõÅÓO?]YYùòË/ß|óÍF£ñÛo¿íêb•ÝÃxEEÅ¿ÿû¿Ÿ:uÊö˜sçÎýêW¿úàƒFŒ‘’’2kÖ¬ÌÌLëIY»ÇÑëõ&“É`08|º®3ÄAAAÖ›ÚÚÚÂÂÂÚÛÛ>šÙlîz3áì¹\|U{ø‰^Æ&, Ü~ûí/^ì>n7×ÛŠŽŽ®««³©««‹‰‰±~Û}#R¯¿Ù¹sç¦M›Æg4u:]ׂ³{÷î»ï¾ÛnpäÈ‘»víúæ›o¶mÛ6yòäÜÜÜ ôð vékçÒ¥Kvß2¤ëëðððo¾ùÆöÖsçιRv¯¯j?ÀËø¿ôÏ?ÿ|ذanÝ%99¹¨¨Èvä/ùKrr²'eØõ”[¶l¹±Ç)--]·nݯ~õ+‡·&%%-Z´hß¾}Û·oï 2™Ln=KAAÝ·Ó§Oïúúæ›oþä“Oloݼy³õëž«?^U ¿x}ÑP›ÝoM}}}×9`ë†#óS•¶ƒ‡ŽˆˆèÚ¯[WW÷Î;ïDFFþßÿýŸ³ûö0býbΜ9sçέ©©¹|ùòêÕ«ò“Ÿô\ŒíxGGGCCáC‡ž}öÙ!C†¼ûî»Ý™:uêŸÿüçêêêöööššš_|1==½ë¦„„„]»vuttôP°]ÍsæÌyíµ×jkkkkk_{íµèèèS§NuݺuëÖ1cÆ”””´´´œ>}ú…^X´h‘õ¾=<—»¯j¯ ÐßøŸ¸Çî-lDDDJJŠíGY\ `‹Å²k×® &O˜0¡°°Ðáa½ŽX¿¨¯¯Ÿ;wndddxxøüù󛚚\ à.C† ™:ujNNŽÝ6+ë}?ú裬¬¬¨¨¨   1cÆüú׿þæ›oºnÚ·oߨ±c»> íÊ?_§Ó577?öØc!!!÷Ýw_YY™í‘yyycÇŽ5 Ç_±bEׇž]y.·^Õ^ ¿±û8 €0À@  €0À@  €0À@  €0À@ €¼|þüù¬¬¬°°°°°°¬¬¬êêjgG=ztÁ‚#GŽ ˆ>}ú{ï½çÍRp—¤ÜÜÜœšššœœ\UUUUU•œœœ––ÖÚÚêðà%K–Œ7îƒ>hnnþâ‹/žþù•+W._¾ÜË5à:½Åb]ƒk×®=qâÄÛo¿myôÑG'Nœ¸dÉWî~æÌ™ñãÇ766ö[xDÒ¸¨¨(;;Ûv$;;»°°ÐÅ» ??¿~¨ €¾!i———'%%ÙŽ$&&VTTôzÇ«W¯–””Ìž=û‰'žè·êð”¤KÐ---ƒÁ:ÒÞÞ>pàÀëׯ;»‹^¯·~=cÆŒ}ûöÑäe‘’Á`0™L¶#&“)  ×;^¾|¹   66vÅŠ½ìl£VPP— iÝx˜õHÒ8::º¬¬,::Ú:R[[;nܸššWîþÑGýô§?=þü=»^/éËð²þKIÏ'$$”––ÚŽ”••ÅÇÇ»x÷ñãÇ×ÕÕõC]ô I8###??ßv$???33ÓÅ»9räÖ[o퇺è’ðÂ… 9²jÕªÆÆÆÆÆÆÜÜÜ®Ë]Y°Ýruß}÷ÖÕÕµ··_¼xqË–-=öØË/¿,¢p\"i‡††;v,.....îøñã0~á…òóóãããCBB&L˜°wïÞ÷Þ{/==ÝË5à:v9À&,@ŸÛ„€¶À@  €0xÛùóç³²²Â²²²ª««{8XßM—wòäÉÅ‹‡‡‡;|.·ŠG`ðªæææÔÔÔää䪪ªªªªäää´´´ÖÖÖîbw áþ®pÞ¼yC‡=|øp÷›n x8ÃçmàcHúÏÚµkOœ8ñöÛo[G}ôщ'.Y²Äáñg¤îOínñÀÇ@<½^ßÚÚúøã<Øh4¦§§———»û EEEÙÙÙ¶#ÙÙÙ………}R^ggçÊ•+GŒxóÍ7¯_¿Þó‡µÕÅû ܰ`Á‚øøø/¾øâÌ™33gÎLKK;{ö¬[P^^ž””d;’˜˜XQQÑÃ]bbb ðaÃæÎ[YYÙÑ‹/nkkûðÃ6nܸvíÚíÛ·»U^Ïn x8C€~øÃ.]º4&&&&&féÒ¥‹/ÎÉɱÞÚ}ÃT÷ÍS‘‘‘¶ÕÐÐàì333wîÜÙÔÔtìØ± &L›6í³Ï>svptttnnî˜1cŒFã´iÓòòòÖ®]ëVy=s·xô€“p€Cz½þÌ™3£F²Žœ9sfêÔ©—.]rýAZZZ ƒu¤½½}àÀׯ_wåîo¼ñFaaá|àJy£G¾á€ì>Þpñ999+V¬¸±2<·|ùrÛ÷Iné¿D i €8¤×ëÛÚÚ‚‚‚¬#mmmaaaííí®?HtttYYYtt´u¤¶¶vܸq555®ÜýòåË£GnnnvX^ggç€ìoxBë~_‹W›°@ vÍî¥K—† býÖ•5Þ„„„ÒÒRÛ)++‹w±€žÃÀ.}íx¾íañ°E€ ì¾>}ºõ[KºŽÉÈÈÈÏÏ·}üüüÌÌL رcÇwÞycÅ»R^Ï<,ßÓóÏÃ7ñ²pH§ÓÍ™3çµ×^«­­­­­}íµ×¢££O:åÖƒ\»vmäÈ‘¹¹¹ +W®ìZR¶}ëש©©;w©1™LgÏžÍÍÍD  €0À@  €0À@  €0À@  €0À@  €0À@  €0À@  €0À@  €0À@  €0À@ €¿èô±X,ÑU|G¯×wvvêõzÑ…Ò!€Mioo÷÷÷7™L¢ ùŽÑhlkk ] – M1™L¢«ø§––ÑU2"€Mioo7 ¢«ø'£ÑØÚÚ*º @F0 )00à h KЀ*`@S$ì€Y‚"€M‘0€é€‡`@SX‚TAš"aÌ4à hJ{{»T0KЀ30 )&“Iª˜%hÀЖ UÀ€¦È¶M 8Cš"Û40à  hŠ„KÐtÀ€C0 ),Aª €Ma P h KЀ*`@SX‚TAšÂ4  Ж UÀ€¦° ¨‚4…%h@0 )²-A‡„„|ûí·‹Et!€t`@Sd `½^ØÖÖ&º@:0 )²Öqp‚4E¶sÀ:NNÀ€¦È¶­ã“H€0 ),Aª €Ma P h KЀ*`@SX‚TAšÂ4  Ж UÀ€¦° ¨‚4…%h@0 ).AÓÀ€¦H¸M 8Dš"ç40Ð h KЀ*`@SL&KЀ`@S$ì€Y‚"€M‘0€Y‚"€Ma P hŠ„0KЀC0 )0KЀC0 ),Aª7€ÏŸ?Ÿ••–••U]]íìÈ’’’Ù³g2dРA)))»wïöf€N§ÓK£³³Óßß_ôëñ=!!!­­­¢_˜ïX,ѯðI¸¹¹955599¹ªªªªª*999--ÍÙ›èiÓ¦]¹re÷îÝ555yyy999›6mòrÁðe~~~9˜Ífѯ‡=½^o6›E¿0‹ÅâïïßÙÙ)úõ¾#éûÁµkמ8qâí·ß¶Ž<úè£'N\²dI÷ƒŸ{î¹ßÿþ÷z½¾ëÛ²²²|ðôéÓ7üì¼M†[ÚÛÛF£Éd]zR__,º¨¤ÿAÒ¸¨¨(;;Ûv$;;»°°ÐáÁ«W¯¶¦¯N§3fLëÕ@Ÿëê€EWÞ †öövÑUß‘4€ËËË“’’lG+**\¹ï¾}ûn»í¶þ© pÀl6 é¯lÀŠ\›5¬###mG¢¢¢z½cCCòeË6nÜØo¥öè€UAC*šzÛ~ùòåxà7Þ˜:uª+Ççää8Ü'ÙßuBcè€UAC*’Îvýn}}½]OlçâÅ‹÷ÝwßK/½tÏ=÷¸ø,999·JÞxÝðI°üýý `ÈCÒY#!!¡´´Ôv¤¬¬,>>ÞÙñ—.]JOO_³fMZZZÿW|Ùlf Z tÀФœ‘‘‘ŸŸo;’ŸŸŸ™™éð຺º™3g¾òÊ+©©©^©ø:`UÀФ³ÆÂ… 9²jÕªÆÆÆÆÆÆÜÜÜ£G.X°Àz€í™Ú™3g¾øâ‹ÿöoÿ&¢R€X0¤"i‡††;v,.....îøñã0þûßÿþÈ#Øm¤úæ›o¼\3|°*`HEÒ!étº#FìÚµËÙ­¶[¥Ø6±è€UAC*¼m<ÅÇTa0:::DW|‡YðâP0¤Bž¢V ©0kž¢V ©À€§è€UAC*Ì€§è€UAC*0à):`Up-hH…YðâP0¤Â¬xŠ q¨‚†T`ÀStÀª €!f ÀStÀª €!ð°*`H…Yð°*¸4¤BžâcHª †T˜5Oq!UÀ  xŠX0¤Â¬xŠX0¤Bž¢V—¢„T˜5OÑ«‚R!€OÑ«‚†T˜5Oq!UÀ ³à).Ä¡ R!€OÑ«‚†T˜5OÑ«‚†T`ÀSlÂRׂ†T˜5Oñ1$UÐC*0à):`UÀ ³à):`UÀ  xŠX0¤Â¬xŠX0¤Bž¢VŒRaÖ<Å…8TA ©0kžâBª €!ð°*`H…Yð°*`H…>>>>~É’%ûöíûÿø±cǶµµõ€¼Ìf³Á`]z§×ëýüü:;;ýý{Yü¼ÀéÛöÙ³g?~Ü.}m¥§§?~|öìÙýS  – Â*4äáômàÿüÏÿôzçW´%h…tppp°èBvA¿ùæ›Ç×®]Û×ÅJâsÀ áï1@½Ï999%%%vƒï¾ûîºuëú§$@1|X!,AC½ðÿþïÿfggWUUYG:´téÒ}ûöõga€2è€BC½ÏS¦LY¿~}VVVKK‹N§«¬¬|øá‡ß}÷Ýøøøþ/P°B`ÈÃ¥½øõõõóçÏõÕWï¿ÿþ7ß|sòäÉý]  :`…À‡«†ûéOZWW—˜˜¸zõꌌŒ~­ P °B`ÈÃO£?÷ÜsÏ<ó `ìð1$…ð÷ §iª×ë{½3Wtt\ˆC)tÀ‡Ó&\Ñ+„†<˜5OÑ+„†<œðüùó[[[{¾skkëüùóûº$@1tÀ !€!§³Æ¶mÛ&L˜ðá‡:;`ÿþý&Lضm[ÿ(ƒX!0äá4€¿úê«I“&ýøÇ?ž6mÚo¼QYYÙÔÔÔÔÔôå—_¾þúëS§N½ÿþûSRR¾úê+o– HˆX!\ òpº køðá›7oþÝï~WPPð׿þõ•W^¹råŠN§:thrròÃ?¼{÷(/– HŠ q(„òèåC½C† YºtéÒ¥K½S  ".Ä¡òàm;à):`…À‡K³ÆéÓ§³³³ccc ClllvvöÙ³gû»2@tÀ !€!ÞøóÏ?ÿÑ~4vìØƒ^»víàÁƒcÆŒ™2eJyy¹êäÇ&,…ÀGïv~î¹ç–-[öÔSOu};zôè—^ziРAÏ>û,Ðñ1$¥ÀGïoÛ<øÐC٠Ξ=»¤¤¤JC¬þäÑû¬èp<88¸¯‹”D¬:`È£÷~ðÁwìØa7¸}ûö¬¬¬þ) P °B`È£÷sÀ¯¾úê¢E‹®^½:gÎœØØØK—.½óÎ;_~ùå¦M›¼P ?:`…ÀGï>¾oŸ%''ÇâHß> ú ›° 46aAÒÎÈÈÈÏÏ·ÉÏÏÏÌÌU$D ¥ÑCÒ^¸pá‘#GV­ZÕØØØØØ˜››{ôèÑ X`¡0”FCÒ -..>vìX\\\\\ÜñãÇ8`4o{ú–S¹>‚†Ò`Hz%,N7bĈ]»v9»ÕîL-'n} ¥À´zÅ&,(MX €¡*:`(0TECi0`¨Š†Ò`ÀP ¥À €¡*J#€ACU0”Fƒ†ª`( UÀP ªâBPâ UÑCitÀ €¡*J#€ACU0”Fƒ†ª`( UÀP ª"€¡40TECi0`(©³³S¯×À`¨ÊÏÏÏb±˜ÍfÑ…@æ/(‰ö@ìã`(‰†À>ކ’`hìã`(‰†À>ކ’`hìã`(‰†À>ކ’`hìã`(‰? àOû8J¢†Ðû8J"€¡°#€¡$@û8J"€¡°#€¡$@û8J"€¡°#€¡$@û8J"€¡°#€¡$.Ä àB>ކ’耡tÀ>ކ’`hìã`(‰†À>ކ’`hìã`(‰MXÐ6aù8J¢†Ðû8J"€¡°#€¡$@û8J"€¡°#€¡$6aAØ„åã`(‰@ìã`(‰†À>ކ’`hìã`(‰†À>ކ’`hìã`(‰†À>ކ’`hìã`(‰†À>ކ’¸4€ qø8J¢†Ðû8J"€¡°#€¡$ï:QCQIDAT@û8J"€¡°#€¡$@û8J"€¡°Ó[,Ñ5HG¯çeqÌl6ûûûËðâèõúÎÎN½^/ºàÆY,???~¡$׉àß ­jii8pàµk×Dh^¯7›Í¢«ÐétºÀÀÀöövV•¼Œ%h¸¡©©iàÀ¢«ÐÇX ‚†šššBCCEW \¿~]t>‡†`@“逽†š›› `@{X‚‚†è€M d Úû`¸MX€&Ñ Aà tÀ€&± Kn €Mb–0ÜÀ&,@“X‚‚†8 h›°„ €á– M¢‚†`@“Ø„% 7pÐ$6a Aà tÀ€&±- 7° Ð$6a Aà tÀ€&Ñ Aà 0 Il‚†Ø„h›°„ €á*³ÙÜÖÖ"º}Œ%h!`¸ª¥¥%$$dÀþÏZC Ád W±Ð*Î AÃUìÀ´ŠsÀBÀp hKÐBÀp[ ­âBBÀp0 UtÀBÀp›°­b–0\E h›°„ €á*Ð*– … €á*6aZÅ&,!`¸ŠsÀ€VÑ AÃU,AZÅ&,!`¸Š´ŠMXBÀp瀭b Z®¢´ŠMXBÀp›°­¢‚†«è€­b–0\EZÅ&,!`¸ŠMX€V±-„Þb±ˆ®A:z½D/Ëõë×CCCÛÛÛE¢Óëõð¦ ЋÅâçç'üg0šššEòOý—L¦²+//¿õÖ[-0›Í¤/ Iz½Þl6‹žc,‹å–[n©¨¨ýzx ó©ìÊÊÊ’’’DWÞ””TVV&º /!€eWVV–˜˜(º ð†ÄÄD²(--%€øˆÄÄÄÒÒRÑUx ,»Ï?ÿœ%h>"))‰VÌùóç³²²Â²²²ª««EWÔ7.]º¤ÓébbbDÞ0lذÔÔÔˆ.Ä´ÀÍÍÍ©©©ÉÉÉUUUUUUÉÉÉiii­­­¢ëꥥ¥´¿|Êí·ßî#M°xãÆ)))Ë–-‹ˆˆˆˆˆX¶lÙĉ7mÚ$º®>Àh¾Æw6Bk!€‹ŠŠ²³³mG²³³ EÕÓ‡Ø À×øÎFh-pyy¹]›˜˜˜¨r—••Ý~ûí¢«ïñÐ]sñ†´´´ ëH{{ûÀoì{Ô××<¸ïªóˆ„We€~%Ïõw—/_ž““Ó'}ݱ>`0L&“íˆÉd èõŽË—/ï—× !ý^Z耣££ËÊÊ¢££­#µµµãÆ»áì}ò~§¯Þ4QŒïÓWC1JÓWC1JãÎ'$$Ø0(++‹U½ÒBgddäççÛŽäççgffŠª€^i!€.\xäÈ‘U«V566666æææ=ztÁ‚7ü€R¦g(ÆŠqFªbt’ÕC1Îô_1Z8¬Óé¾þúëgžyæÀ:.--mݺuqqqbKêÇsî£g¤*F'Y=ã Å8C1n‘½>uIõ³§g¤*F'Y=ã Å8C1nñËÉÉ]ƒfÝ}÷Ý¢Kø'ŠqFªbt’ÕC1ÎPŒ3ã:Ùß  IZØ„€r` €€@` €€@` €€î{çÏŸÏÊÊ ËÊʪ®®XÌÉ“'/^®×ë–¡ÓéJJJfÏž=dÈAƒ¥¤¤ìÞ½[`1]1zäÈ‘±±±Ó§Oï½÷ÖcU[[;vìX±?,}7‹1›Íyyy AAA·ÝvÛöíÛEUÒýeÑëõ¢êéììܰaÿþ뿆‡‡4(99yÆ ¢êÙ¿ÿ”)S‚ƒƒ###çÍ›wùòeo>{ÏTsò÷XЧšššF½råʆ†††††•+WŽ;¶¥¥ET=ñññË—/ÿâ‹/„ÿ¬u:Ý=÷ÜsèС–––O?ý4))iãÆ¢Š™0aÂúõë+++¯_¿^__ÿ׿þõŽ;îx饗DÕÓÅl6ß{ï½bXÂÿ«ØzüñÇ,Xpúôéëׯ?~<==]tEÿ´víÚ9sæˆzö'Ÿ|rÒ¤IûÛß®]»võêÕ?þxüøñO>ù¤b>üðÃÈÈÈÍ›7×ÕÕÕÕÕýéOšVTT”m;’]XX(ªy¬^½Úvuh̘1-étƒÁÏÏO`Ÿ}öÙÆ7lØ °Ùüñ|òÉ'EWáØž={¢££'L˜ ª€   îƒÁÁÁÞ¯D§Ó;v,##Ãväþûïßµk—bìÈ<'À}¬¼¼<))Év$11±¢¢BT=ÒÚ·oßm·Ý&º N§»zõj×ùé'žxBT mmmÙÙÙ[¶l Uƒ­˜˜ƒÁ0lذ¹sçVVVŠ*ã“O>innž6mZHHHhhèôéÓ>,ª;ëÖ­[ºt©À~ùË_>üðÃljjjjj*))y衇žzê)%ÙéZNê9Yt ®5ƒÁd2ÙŽ˜L¦€€QõXIõ³®¯¯¿å–[JJJÄ–aû‹0cÆŒŽŽQ•üâ¿øíok[˜¨J,KfffIII[[[uuõÚµk‡ú÷¿ÿ]H%QQQ¶g£¢¢<(¤[eeeÇoooXƒÙlž5k–íÿáY³fÙžåñ¦©S§¾õÖ[¶#›7o2ïuÿÝ‘vN¶p¸ÏIûÖ'€kkkïºë®ââbÑ…|çòå˱±±+V¬RÀîÝ»§Njÿòü°,Ë믿~ß}÷ yjƒÁÐýÌâÝwß-¤[=öØË/¿,¶†ßýîw7ÝtÓ®]»ºöíڵ릛nú¯ÿú/!Å8p`ðàÁo½õÖ•+W®\¹²eË–¨¨¨   ïWBû´¡C‡ÖÖÖÚŽÔÔÔÄÄĈªÇJ’9ýÂ… III~ø¡èBì>\ÈS=ú믿¶‘ä‡Õ¥¶¶Öh4 yꘘ˜+W®ØŽÔÕÕ…„„)ÆêÊ•+‘‘‘õõõbË1bÄG}d;òÑG9RP9–?þøž{î1ÁÁÁwÞyçöíÛ…ÓýwGÚ9ÙÂ&¬>—PZZj;RVV/ª©\ºt)==}Íš5iii¢k±7~üøºº:!O}æÌ™#FØ}îVøp­,ß_«÷¦„„QO݃?üá?ùÉO"##Å–qñâÅñãÇÛŽŒ?þâÅ‹¢ê™6mZqqqssskkë¡C‡ 4yòdQÅØ’yN&€ûXFFF~~¾íH~~~ff¦¨zäQWW7sæÌW^y%55Ut-9räÖ[oòÔÝß[…ÔcgÇŽwÞy§§~àÞÿ}Û‘={öÜx¬ÓéÚÛÛßxã ±Û¯ºÜtÓM'Nœ°ùôÓO‡.ª;¯¿þúÂ… EW¡ÓI>'{µßö×®]9rdnn®õCߣGnnn]—øUÍqãÆmݺUl V÷Þ{ïîÝ»/_¾l2™.\¸°yóæüàï¿ÿ¾èº¾#ð‡•ššºsçΚš“ÉtöìÙÜÜÜÁƒŸ8qBH1mmmS¦L±;³(v÷@AAÁŒ3`•——÷—¿ü¥±±±ëð¿üË¿¬_¿^T=?þñOž{ÏTs²-½EŽe.| 瀀@` €€@` €€@` €€@` €|^¯]à` €€Г#GŽÄÄļù曢 ´Æ_täµgÏž_þò—;vì¸ë®»D×h  À±·Þz+//¯¤¤$..Nt-€ÀX½zõ±cÇþö·¿Fѵڤ·X,¢k ½^o2™bccËÊʆ &º@³Ø„ÀžÁ`øýï×]wUVVŠ®Ð,:`ߣ×7-ìÙ³ç‰'žØºuë~ô#ÑED À±ŒŒŒíÛ·Ïž=ûÝwß]  AlÂàÔ”)Söïߟžž~áÂ…§Ÿ~Zt9€¦° €,A  €0À@  €ÿÏdë#¥¼·IEND®B`‚gsl/doc/images/rand-pascal.png0000644000175000017500000002604413536674414014645 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœíÝ{T“÷áÇñ'@ÂM¢I«@•®ƒ©™xëÔ´Ê)õزN+ÎUÛi-]¿Î_O{ºJvÝÜĉÚn¶º²oõˆUëvTlÑR[µL,§‘‹á'T®.ùý‘þÒ.‘ð}žäýú‹|óäy>‚äÃ÷¹Ee6›%0¼¼DÀQÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀÀÐPÙ š>}zNNލ$ŽÆ-|}}u:ÝìÙ³333«««òÚÛ‰1„ëòµQÀÀ1ÿ¿²²²_ýêW/¾øâ–-[D‡úK¼¶¶¶/¿üòµ×^knnž4iÒ¾}ûµ’á¬@ênLe6›EgÜJÕû·)??ÅŠeee“ô1þ¯ýkîܹ}ôQ\\Üm®¨–ª×2Ç p•„„„ªª*ëëW¯®^½:(((::zÍš57oÞ´Œ777¯Y³&&&& 88xîܹ‡¶¾ª¢¢béÒ¥¾¾¾ñññ{öìéw…ƒrß}÷=÷Üs7n´<´Î8¥²,`Ý›m}U{{û3Ï<£Óéìîynkk{ê©§F˜œœ\RRb}Êî׺»Û².vèСiÓ¦N›6íÈ‘#¶kèîî^·n]TT”¯¯ïÝwß-·½ ¸Ê¹sçÆŽk}xÿý÷ÿà?¨©©9yòdEEEff¦e|éÒ¥]]]Ç¿qãFyyù³Ï>›myª²²rÆŒãÇ/,,ljjzóÍ7wïÞÝï ë‘Gùøã{ :Je™Zw¶[—úé§g̘ñŸÿüÇî„uùòå±±±.\(++›?~RRÒåË—û æh[gΜùùÏž‘‘qåÊ•òòòÕ«W/Y²äìÙ³ÖV­ZÕÞÞ~üøñ†††íÛ·geeÙþùˆg0l›ŒFãÞ½{ï¼óÎM›6Ù]¸¡¡á®»î²|=bĈ7nØ]ìç?ÿù‹/¾8­Û®ÐÑïµ£ñöövÿ^Ëô‘êÖõH’´qãFG‹I’ôꫯÚ>•™™¹dÉ’>RÙ¾ÖÑS .ܺu«íSÙÙÙ>ú¨u±—_~ÙöÙ#GŽL:Õî¿‚††íßµS¦LÙ±c‡õÙöööÌÌÌï}ï{þþþ–e¼½½-OM™2eÅŠÕÕÕ·®3""⫯¾²»¹>V8Ønmm èµL©ì–byy¹£Å$I*++³}êÒ¥K}¤H7®²²Òö©ŠŠŠÈÈHGmhh9rä­ÛDa40d¬¿W---Ÿ}öÙ²eˬO½ð ………»víª¯¯7›ÍíííÝÝÝ–§vïÞ]__?a„ïÿûË–-;xð ùÿë¼¾¾þÎ;ï´»­>V8XW®\Ñëõ½ûHe×wÜÑdz½Ö¯×ëëëë-ÜÓÓ3€ÔR]]]xx¸íˆN§«­­µ>ŒŠŠ²}väÈ‘Y30<|D<¾}û>ûì3k›ÚŽŽ>pà@GGGiiégŸ}¶~ýú>øàí·ß–$iôèÑÕÕÕ111ƒZá`ååå=ðÀ½ûHe—Z­îc×®]»ë®»l†……Y¾ ùúë¯CBB¬Ï–——$¶N§3¶GÙFã˜1c¬½¼˜`@Öø ‡ööv???ëÃ;wöZÀr’ó“O>yôèQë¹BóçÏÿë_ÿêÜ ¨¨¨hÓ¦Mÿõ_ÿe÷Y»©üüüL&Ó ¶’››Ûëáœ9s,_ß}÷ÝŸ~ú©í³;vì°~ÝǶ áC‡lG>øàƒÁ0¨`€H‚v}î¦ïߦE‹-^¼¸¦¦¦®®nÆ ?þñ­ËÏœ9óoû[UUUgggMMÍ‹/¾˜œœlyª¢¢B¯×gff–——ß¼yóÓO?]¸pa¿+t”Ä:ÞÕÕÕÐÐpúôéçŸ>,,ìý÷ß¿u™>RÅÅÅ8p «««ï»mžE‹mÞ¼¹¶¶¶¶¶vóæÍ:Îr¾´ÙlÞµkׄ  Z[[/]ºô /<ùä“Ö×ö±­O>ùdäÈ‘ï½÷žÑh4ï½÷^hhègŸ}6H€ðß}¿¹_¿~}ñâÅ¡¡¡!!!Ë–-knn¶.òäÉÔÔÔQ£FùùùM˜0áþç¾þúkë ËËË/^¦V«ï»ï¾={öô»Â> ØB£Ñ„……Íœ9síÚµ½N³Hª£GÆÄÄx{{÷½EÛg[ZZžx≑#GÌ›7¯¸¸ØvÉìì옘µZ=vìØÌÌÌ®®.ëkûÞÖüýýýýý,ª î2€@ (` €€@ (` €€@ (` €€@ (` €@¾\YY™ššªÕjµZmjjjUU•£%Ïœ9³|ùòèèhF£×ëçÌ™³ÿþጠÀ`É´€[ZZ CEEEEE…Á`HJJjkk³»pFFƤI“þþ÷¿·´´\¸paÍš5ëÖ­{å•W†93§2›Í¢3Ø‘••uþüùwß}×:òøãO™2%##c //++›tèPzzºíHzzúÁƒørµZíííí‚\ ™pIII||¼íÈĉ/^¼Øï oܸQPP––¶råJ—¥àvÉt´F£immU«ÕÖ‘ÎÎÎ#Fttt8z‰J¥²~=wîÜ£G2 È—Y–ÔjµÉd²1™L¦ßÖÕÕåææêõúÌÌÌ~vt¢–ŸŸß0ÿ²å|™õI¦3`NW\\¬Óé¬#µµµ“&Mª©©ÈËOž<¹téÒÊÊJç¶®RÉôÛf®k™Ž‹‹+**²)..ŽàË'Ožl4] €¡!ÓNIIÉÉɱÉÉÉY°`Á_^XXxÏ=÷¸ CC¦¼bÅŠÂÂÂ×^{­±±±±±qýúõ–Û]Y°=åjÞ¼y4W¯^ݹsçO<ñÛßþVDpD¦”ŸŸöìÙÈÈÈÈÈÈsçÎ8q"00ÐîÂ/¼ðBNNNlll@@@BB‘#Göïߟœœ<Ì™8Î6²ƒ“°wî@ (` €@^*++SSSµZ­V«MMM­ªªêcaÕ-\šÍrEhtt´F£ÑëõsæÌÙ¿¿K·èÆ(`‘–––ÄÄDƒÁPQQQQQa0’’’ÚÚÚúxI¯; »4^FFƤI“þþ÷¿·´´\¸paÍš5ëÖ­st_}ôëmìà2$¢dee?þÝwßµŽ<þøãS¦LÉÈȰ»¼ð÷«²²²É“'766 ÌàR\†r§R©ÚÚÚžzê©Ñ£G&''—”” v%‡JOO·IOO?xðàÄëîî^·n]TT”¯¯ïÝwß½eË–Û_­Z­æ³_CÀY¾|yllì… ÊÊÊæÏŸŸ””tùòåA­¡¤¤$>>Þvdâĉ/^ìã%cÆŒQ«Õ‹/.--ícÉU«Vµ··?~¼¡¡aûöíYYY{öìT<[7nÜ(((HKK[¹r¥Ó+ñh.ú˜CEãÛÀ ’$½úê«¶#™™™K–,±] ßwãÁ~ú‚ ÚÛÛ«ªª²²²ÂÃÃÿùÏ:Š÷òË/ÛŽ9rdêÔ©ƒŠwë’sçÎíêêêç[£d®k丽$I*++³¹téRDDÄ V2ØîeÛ¶móæÍ`¼†††‘#G*ž­ºººÜÜ\½^Ÿ™™ÙïÂbOÔzå•Wœþgº®8ÛÈá'5P"•JÕÞÞîççgioo×jµ_‰N§+..ÖétÖ‘ÚÚÚI“&ÕÔÔ äåuuuãÇoii±¯»»ÛËË«×àm¾ÝìwW§$I)))999¶+ÉÉÉY°`ÁìÝ»÷þûïw.ü@âݪ°°ðž{îqn‹žnHvd»¾-œ IÒ¢E‹6oÞ\[[[[[»yófN÷ŸÿügP+ijjŠŽŽ^¿~}CCCCCúuë,»”m·bý:11qß¾}555&“éòåËëׯ=zôùóçí.l÷m°ow>ø`^^^]]Édª®®Þ±cÇwÜñá‡j%ÊâºF` Cæ/ùKQQÑ÷¿ÿý»îºëÈ‘#ÇŽ›0a Ö”ŸŸöìÙÈÈÈÈÈÈsçÎ8q"00ÐîÂ/½ôRnnî½÷Þ0sæÌÒÒÒÓ§O ˳ ¡¡¡·ûOú®^x!'''666 !!áÈ‘#û÷ïONNÚ­xÎ6²ƒ“°8AnoÙÙÙ_}õUvv¶è ÊÆIX€ÁÙ±cÇ/~ñ Ñ)à¼þ^“ ¹ý @xëpKÌ€@îh_  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €ò-àÊÊÊÔÔT­V«ÕjSSS«ªª-YPP––úè¥K—œÞºJ%Óo `˜¹®d:>tèPzzºíHzzúÁƒí.¼aÃkûJ’4a„>öW 2-à’’’øøxÛ‘‰'^¼xq ¯=zôè½÷Þëš\ ™îkÕh4­­­jµÚ:ÒÙÙ9bÄˆŽŽŽ¾_ØÐÐ0cÆŒíÛ·Ïœ9Óé­³ `áq» SWW÷È#¼ñÆlßµkתìquNd:ÕÓétÅÅÅ:Î:R[[;iÒ¤ššG/¹zõêC=ôÇ?þ1))é6·Î `áq3ุ¸¢¢"Û‘âââØØXGË_»v-99yãÆ·ß¾ ™pJJJNNŽíHNN΂ ì.l4çÏŸÿúë¯'&&K:n—L÷µ677ÇÇÇ/_¾|åÊ•’$mÛ¶mçÎEEE–l÷  †5kÖ<öØcCµuvA,\×òmš+W®<÷Üs'Nœ$)))iÓ¦M‘‘‘Ögm¿#vO›jll qnÓ0À X `áq'aàÞ(` €€@ (` €€@ÑгÙìííÍAzñòòêììôòâ/HJEËÉdÒh47oÞD^´ZmkkkPPè à$&r×ÑÑáëë+:…ìhµÚ¦¦&Ñ)Ày°ÜQÀvQÀ”Ž–; Ø®   €¢QÀrGÛÅ €ÒQÀr×ÑÑ¡ÑhD§­VÛÜÜ,:8–;fÀv1 t°ÜQÀvQÀ”Ž–; Ø. €ÒQÀrGÛÄ1`ŠFËl3`JGËÉd¢€oÅuÀ”Ž–;fÀv1 t°ÜQÀvq0¥£€å޶‹0¥£€å޶‹ t°Üq+J»(`JGË3`»8 €ÒQÀrGÛåççg6›;::D'QÀrG;‰Ð–; ØP4 Xî(`G(`ŠFË·¢t„ h°Ü1v„¡(,w°#Ì€(,w°#œ @Ñ(`¹£€a @Ñ(`¹ãV”Ž1 \°Ü1v„0Eóéû醆†]»våççñÅF£Q’¤ððpƒÁ˜˜ø³Ÿý,44tXBz4 Ø €¢9œWWW¯X±B¯×çææ>ðÀGŽ©©©©©©9räÈìÙ³ß{ï=½^¿|ùòêêêáŒë(`G(`Šæp——7þ|ÛñØØØØØØŒŒŒ£Gþ÷ÿwLLL{{»ësz. Ø® hgÀiiiçÎëÕ¾¶’““Ï;—––æš`øì3`Šæpü׿þµß d1ÜnEé×P´þÏ‚~óÍ7íŽgee uØÁ ØfÀ­ÿ^»vmAAA¯Á÷ßÓ¦M®‰„ï €¡€(šÊl6÷½Daaá¢E‹>þøãÈÈHËÈéÓ§ÓÒÒŽ;ëú„¨Tý[†‡ÙlöööîîîV©T¢³ÈNOOZ­îééDR©TüŒwåºFèûì³Ï>;ùä7-Z¤×ë¯]»öÞ{ï}ùå—o½õÖ0äópÁÁÁ¢S Ì€8¡ÿ1b„å‹—_~Ùv|×®]Ö¯ùìBáV”ŠÀ €ú/`ÊU vA+'apwÂ’5 X¸ €(`Y£€à XÖ(`E`4'PÀ²Æ­(³ 8–5fÀŠÀYМ@ˬ̀8–5 X˜p,k°"p'PÀ²F+—!p,kÜŠR˜p,kÌ€“°8–5 X8 €(`Y£€0'PÀ²f2™¸–üi4šŽŽÑ)(LÿGèiº»»%IR©T¢ƒH’$©T* Xþ8 €(àÞ¼½½%>ƒAp» ÛÅeHœ@·‹“°8n—!p Ü.fÀœ@·‹0'PÀÀíâ$,N €ÛÅeHœ â‚×[©T|[0f³ÙÛÛ[&ÿgT*Uww·Lî$¸×57ân—J¥êééâ–3¸ ì‚ÜŠ¯¯/¤E €·Âa€RPÀ€[¡€¥ €·BJAn…”‚Ü  ( ¸ P p+0 0àV(`@)(`À­h4šŽŽÑ)ôÜ w”‚Ü » ¥oWVV¦¦¦jµZ­V›ššZUUÕÇÂ_|ñŪU«BBBøx8 P ™pKKKbb¢Á`¨¨¨¨¨¨0 IIImmmŽ–_²dIxxø'Ÿ|2œ!¢€¥éÇnß¾}Ú´i/½ô’åáK/½ôå—_¾õÖ[v—/))Æt€|QÀ€RÈt|èСôôtÛ‘ôôôƒŠÊ( (…L ¸¤¤$>>Þvdâĉ/^•P P ™pccchh¨íȨQ£D唂”B¦ À90 2-à‘#Göšï^¿~½×œøö­]»VeÏÐnNÜ P ™p\\\QQ‘íHqqqllìÐneíÚµf{†v+ÀpÒh4¢SèŸL 8%%%''Çv$''gÁ‚¢òJÁ.h@)dZÀ+V¬(,,|íµ×ׯ_æÌ™åË—[`G1` (…L 8(((??ÿìÙ³‘‘‘‘‘‘çÎ;qâD`` £åmßr(žŒ”B¦wÂ’$)**êÀŽžíu¤–·€ (…LgÀœCJAn…”‚Ü  ( ¸ P p+Ü P p+¾¾¾Ì€E €·Â.h@)(`À­PÀ€RPÀ€[¡€¥ €·BJAn…”‚Ü  ( ¸ P p+0 0àV¸ *>I÷V*ß(•Ùlööö–Ï`//¯ÎÎN//þÖ‡R¹®|\±R¢¨TªžžÑ)¾5räȦ¦¦ÑAÙáÏR.òõ×_‹NÈ À…(`À € QÀ€#0¢€G(`.DŽPÀ\ˆ¡€¸Ppp0 ØEp¡7nˆNÈ À…Ø 8Bp! p„àB0à À…(`À € QÀ€#0¢€Gøà[;ø<``¨ôôôøúúvttð‘ÀP(×5¿\ÈËËkĈMMM¢ƒ²Cp-öBvQÀ\‹좀¸ ØEp- °‹àZ0` Àµ(`À. €kñ‘À€]0×â#»(`®Å.hÀ. €kQÀ€]0×¢€»(`®EvQÀ\‹좀¸ ØÅßÚÁçC¨§§G­V÷ôôˆ"yyy™L&oooÑA $®kW¬¬¼¼¼º»»E§$I ÿßÿý_N': Iì‚à9ÂÃÃëêêD§¾Að:Îh4ŠN|ƒà)ÂÃÃ)`È ÀSPÀ €§ €!+0OACV(`ž‚†¬PÀ<—!AV(`ž‚Ë +0OÁ ²Bð#FŒP©T---¢ƒ’Dð(œ‡ù €xöBC>(`„ó° 0Â.hÈ ÀƒPÀ €¡€!0BC>(`„†|PÀ<—!A>(`„Ë *³Ù,:ƒì¨T|[÷ÔÝÝ­ÑhzzzD‘|||ÚÚÚÔjµè è‡ëÁÇ+yòööîîîB’$)**ªºº:::ZtÃ.h **êÊ•+¢S@$  €A€QQQ¢S@$ ˆŒŒdìá(`€]Р€@ \ðj×pµ®®®#F477s)°Ì¹®˜€>>>cÆŒ©®®ÂPÀ {¡= bPÀŽ1¸ØÃQÀ —{8 Ä`´‡£€@ ØÃqÁ«\ `tvvtuu‰"y{{ß¼yÓLJ¨µƒÏw£V«;;;E§$IÒëõF£Q¯×‹âYØ žN¯×_»vMt C€§‹ˆˆ¨©©ÂãPÀàé˜ A€§c, žŽ‚Î<°4 ÍIDATOÇ.h!(`ðtÌ€… €ÀÓ1‚[>ÙÁ°x”®®.??¿îînÑA$??¿ºº:­V+:È·\×Ì€ÀÓùøøtuu™e`Þ¼y|ðèïÇ0¡€rñ“Ÿüdß¾}¢S öµÚÁ.h¢¹¹yܸqW®\ å삸¿   Y³f>|Xtá@dÄsöB³¯ÕvA€(MMM:îæÍ›¢ƒHþþþW®\Ñét.j> #Z­¶½½]t I’¤U«VmÞ¼Ùuëgªg3`@yyùÔ©Sëëë9 €á˜˜èºõ»IWVV¦¦¦jµZ­V›ššZUU%:@ñÖ¬Y㺕»C·´´$&& †ŠŠŠŠŠ ƒÁ””ÔÖÖ&:@Ù ƒëVî;³²²ÎŸ?ÿî»ïZGüñ)S¦ddd8·BŽ,¸G_:”žžn;’žž~ðàAQyè—;pIII||¼íÈĉ/^¼(*ýr‡}­¦µµU­V[G:;;GŒÑÑÑáÜ Ù °p]#xô8Ö®]›™™i÷)•J5ÌaŦz:®¸¸X§ÓYGjkk'MšTSSãÜ ‡äï¡ú£‰0žf¨ÖCE„ªõFaìr‡cÀqqqEEE¶#ÅÅű±±¢òÐ/w(à”””œœÛ‘œœœ ˆÊ@¿Ü¡€W¬XQXXøÚk¯566666®_¿þÌ™3Ë—/wz…¯¼òÊÆ»M„q„0ŽÆY…‘d–‡0ޏ.Œ;–$éÊ•+Ï=÷܉'$IJJJÚ´iSdd¤ØH²:•š0ŽÈ*Œ$³<„q„0ŽfPäžO¹dõ³'Œ#² #É,a!Œ#„ïµk׊Îà¶xàѾEGdF’YÂ8BG3prÿ·ä'a 80PÀ@  €0PÀ@  €0PÀ@½ÊÊÊÔÔT­V«ÕjSSS«ªª†ùâ‹/V­Z¢R©Æ$©   ---,,,88xÚ´iyyyÃX>1:::Z£Ñèõú9sæìß¿_`«ÚÚÚ˜˜±?,Õ-†éééÉÎÎŽ‹‹óóó»÷Þ{÷ìÙ#*É­ß•J¥ÑhDåéîîÞºuë~ðƒàà`ƒÁ°uëÖîînQyŽ;6cÆ ÿÐÐÐ%K–ÔÕÕ çÖû~£“Õ{òw˜1¤š››Ç¿nݺ††††††uëÖÅÄÄ´¶¶ŠÊûÊ+¯\¸pAøÏZ’¤ýèG§OŸnmmýüóÏããã·oß.*LBB–-[JKK;::®_¿þüã¾ûîûÍo~#*EOOσ>˜››+ö‡%ü¿Š­§žzjùòå—.]êèè8wî\rr²èDßÊÊÊZ´h‘¨­¯^½zêÔ©üqSSÓ7>úè£É“'¯^½ZH˜ãLJ††îرÃh4Æ·ß~{úôé7oÞ¶}¼ÑÉí=Ù–Œ~ÓÜÃÆ/^l;²xñâ?ýéO¢òX W}þùç{zz¬‹ŠŠÆ/0O/—.] ›áüã’%KÌ¢XÂÿ«Xåç秤¤ˆNa_ww÷]wÝõù矋 T^^n;R^^$$̬Y³vîÜi;òöÛooݺuø“Üú¿W¶ïÉf³™]ÐCìСCééé¶#ééé•G>6lØ`»wh„ 2Ú$IjµÚÛÛ[`€ýë_Û·oߺu«À ró—¿üeõêÕ¢SØwøðaN— *€ŸŸß­ƒþþþßD’¤³gϦ¤¤ØŽ<üðæ9¿'SÀC¬¤¤$>>Þvdâĉ/^•G¶Ž=zï½÷ŠN!I’tãÆ Ëñé•+WŠÊÐÞÞžžž¾sçΠ  Ql3F­VGDD,^¼¸´´TTŒO?ý´¥¥eöìÙAAAsæÌùä“OD…éeÓ¦MÏ>û¬ÀO?ýôc=vêÔ©ææææææ‚‚‚Ÿþô§Ï<óŒÀH½Xv 'ë÷dÑSpw£V«M&“íˆÉdÒh4¢òXÉêg}ýúõï}ï{bcØþ"Ì;·««KT’_þò—¯¾úªm0QIÌfó‚ ÚÛÛ«ªª²²²ÂÃÃÿùÏ Iâëë;jÔ(Û#‹£F:uê”0¶Š‹‹ÇŽÛÙÙ)0COOÏÂ… mÿ/\¸Ðö(Ïpš9sæ;ï¼c;²cÇ!ï{·þîÈö=ÙÌ1à!'Û¶| ¸¶¶vÖ¬Yùùù¢ƒ|£®®.77W¯×gff ——7sæLÛú—ÏËl6oÛ¶mÞ¼yB6­V«o=²øÀ cë‰'žøío+6Ãï~÷»qãÆ8pÀrnÑÆ÷‡?üAH˜'NŒ=úwÞ©¯¯¯¯¯ß¹sç¨Q£üüü†? ìÑÂÃÃkkkmGjjjÆŒ#*•LÞÓ«««ããã?.:HoùùùcÇŽ²éñãÇ_¹rÅvD&?,‹ÚÚÚÀÀ@!›3fL}}½íˆÑh ƪ¾¾>44ôúõëbcDEE|Xà‰Ç’$uvv¾ñÆbO¿²7nÜùóçmG>ÿüó±cÇŠÊÓ˶mÛV¬X!:…$Éü=yXçÛ ©©)::zýúõÖ‹¾ÇßÒÒ":—ø½š“&MÚµk—Ø V>ø`^^^]]Édª®®Þ±cÇwÜñᇊÎõ ?¬ÄÄÄ}ûöÕÔÔ˜L¦Ë—/¯_¿~ôèÑçÏŸ¦½½}ÆŒ½Ž,Š={ 77wîܹXeggGFF~ðÁ–cÀwÞyç–-[Dåy衇¾øâ “ÉTVVöä“Oþò—¿ãÖßÙ¾'›9ì ååå . Z¸pa¯Ã{ÃL>uÙMÒØØ($L~~þ£>:jÔ(ŸˆˆˆÔÔÔ3gÎIb—À>qâÄ#}ºð³¦Nzøða±¬öîÝ;mÚ´©S§îÙ³G`˜Ý»wÇÆÆj4š{î¹gÓ¦MÝÝÝùõ¾ßèdõžlKe–Çn.< Ç€€@ (` €€@ (` €€@ (` €€@ (` €|‡J¥ð0PÀ@èKaaá˜1cÞ|óMÑAwã#:ù:|øðÓO?½wïÞY³f‰Î¸ €}ï¼óNvvvAAAdd¤è,€¢€رaƳgÏ~üñÇ¢³îIe6›Eg #*•Êd2éõúââ∈Ñq·ÅIXzS«Õ¿ÿýïgÍšUZZ*: ඘ø•ê›·…ǯ\¹r×®]?üáE‡Ü3`ö¥¤¤ìÙ³'--íý÷ßpCœ„À¡3f;v,99¹ººúW¿ú•è8€[a4° (` €€@ (`ø?Ò-æ¶"Iµ¡IEND®B`‚gsl/doc/images/rand-rayleigh-tail.png0000644000175000017500000004512213536674414016133 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœíÝy@Ìùã?ð÷”nº¥C)„TT6–ŠÛ"wd–D$Çn‹¬¯\±±Î›]’ÜG¨\-©tQ:Tºæ÷Çì¯O*5½g^ï™y>þZïyÏûýl–÷³×ûýš÷›Åf³), ÒÄ €0(`PÀ €@€  @ €0(`PÀ €@€  @ €0(`PÀ €(Š¢X\mmmF00NA4ÏÂÂ";;›{Inn®———¢¢¢‘‘ÑÊ•+«««)в³³»xñb“÷¦¤¤èééÕÕÕq/LLL´±±‘••544Ÿ/wGQÔ´iÓ‚ƒƒóòòòòò‚ƒƒµ´´222ZIÕÊÏÒ¸äÎ;jjj¿ÿþ{aaaAAÁÑ£GUUUï߿߸8@Û¡€Øìÿ=L={ÖÐÐpß¾}-­_\\ܽ{w6›]SSÓµk×§OŸ6¾ôþý{•‚‚îÍΜ9sÇŽëDGG=ºÉ®§OŸ¾uëVî½lܸ‘»HÖ­[ÇýêÅ‹mmmÛþsµþƒ°;PÀUUUrrrMÖéܹ3w›¶¾Š¢víÚÕÒjEmذû¥õë×Ïœ9³•Tm)àqãÆíÙ³‡û¥°°° &4®ÆÃÐv(`6»¹k„MµUUUëׯ733“““㬠))ÉyióæÍžžžk~Ù ÆÆÆ/_¾l\§¸¸¸k×®MÖÑÒÒÊÌÌäÞ)ç tãjc¾Æ¨ªª~õçj²¤•„çþô铼¼|“ulllæÍ›—““Ó–íPõúõë–VûògOOO×ÑÑi%U[ X__ÿíÛ·Ü/eee´´Ó¶|àm‡`³¹Ê >|8qℚšÚ±cÇWðöö9rä£G***ØlvUUUã[ŠŠŠÔÔÔŠŠŠØlv]]¾¾þ½{÷šlVZZºIÁKHH4YGRR²ªªŠ;Uee%w‘Ô××·û«?W[~ž øÙ³g&&&MÖÉÌÌ7nœ¬¬lÏž=øá‡èè膆†–¶CQTMMMK»£(êËO¦S§N-m­¾¾¾-,##S]]ÍýRuuµŒŒLãj<|àm‡¿LlvsÖ?þøÃÔÔ´±3tuu³³³_åLjü£§§ç¦M›Ølö™3glll¾Ü¬ººú»wïZßõWGÀm‰ýÕZùAx.`îsMÖ©®®NNNÞ·oßÀçÌ™ÓÒv¾:Šme¬¢¢RRRÒäUÞFÀoß¾å·  ã0  y“&MRPP8yò$çUUU²²²¯:tˆ{eooï½{÷ÖÖÖ†……-^¼øË­988ÄÄÄ´¾G''§ÆÝq?~œÇô-kýáAJJJppð²eËš}UFFÆÂÂbþüùqqqüñg¡¬¬lMMM»öÕäÇçü·©©é;w¸_徉J+û²²²Šå^rþüy++«vàéߡ٠111={ö䜇œ>}º»»{^^^AAÁöíÛ'NœØä-NNNþþþZZZŸ?þr³OŸ>ÕÑÑ9|øðû÷ï+**®\¹òå$¬þùGKK+<<¼     `Ïž=îîîÝ#àV~Ö÷޼®®®¸¸øæÍ›¾¾¾§OŸþr!C†=z4;;»¶¶6//oõêÕ...œ—ÌÍÍÏ;WWW×úÂgúôé¡¡¡œùá¡¡¡ZZZ¯^½â¼züøq“ëׯúô)==}ÕªUóçÏo|o+ûºuë–ªª*gtaaáï¿ÿ®¦¦öååƒÖ?Ožá/›ÝòÕÚÚúÈ‘#l6ûÇîîîjjj***³gÏ.//oò–óçÏSµvíÚ–6ûøñcEEE999‡+W®4»ÎðáÃåääÔÔÔæÏŸ_XXÈ}I²í±[Y¡•¤-Ì!--­¡¡1dÈ€€€&Ó¬ß›àææÖ¥KYYY??¿?r^Š‹‹ëÑ£‡¤¤d½ (ª¢¢bîܹªªªòòò#GŽLMMå^3,,¬GRRRݺu[¿~=çØmÙ×¹sç('''''7pàÀ˜˜˜V>ºV>à1ô¨ªªRSSKOOïÚµ+]Û¼|ùòŠ+’““éÚ 0®ÐàãÇÛ¶móððè`ûŽ7îÆeeeïß¿?{öìܹs}||è Œ‚0@G±X,ÎyÑÇ+))udSgΜٵkד'Oêëëûôé³xñâ3fЕ @NA€  @ €0(`PÀ €@€  @ €0(`PÀ €@€  @@'Ò˜HUUõãǤS#°Ùl~l–ŧí 5  P?§ @€  @ €0(`PÀ €@±G-Z´HEE…Åb‰êE @ˆÍœ9SSSóÖ­["¼GQ…›7÷‚¡#ø—˜*q/h”››ëå奨¨hdd´råÊêêj¾î.66vРA ¬ÿÅ×BKPÀÄØÛÛ[[[çåå%$$dee­_¿žûJLLœ:uª»»{fff~~þž={dee###ÅaËLbq¡½Ää¼ 0JIIÉ€2228l}`úå1ꫮѣGóÍ7k×®m\²~ýú+W®Ü¸qƒO{ 8 jª««7lØÐ³gOyyy‹¥¦¦–••Õø*»U<ìîîݻӧOç^2cÆŒ´´4þí‘[@@‹œ€€€æç±øý¥½Ää×: kéÒ¥iii[·n555UPP¨®®–““ãùàóÕ—””Tyy¹¬¬lã’ªª*•ÏŸ?ói¢?f'~l¾êÔ©S÷îÝÓÓÓãü133“ûUV;O•††FNNމ‰Iã’ììì®]»òoÐ:œ‚ £ªªŠ{]·n½½½ŠŠÊ´iÓ(ŠŠŠŠŠˆˆ¸ÿ>í;…6€Œ°°0Š¢ÌÍÍÍÌÌž?ÞdÜFóŒšü7EQÅÅÅjjjköìÙóòåËqqq&&&&&&—/_Ž700 qÐ."r ýÑ£GQQQ¥¥¥ÿ‰Ädfˆ¶°°°—/_rjxÆ¿F‘0îM ÐÄÁƒçÌ™C:´HÔ†z´üª‚0p` RPÀ €ënéÞ¤¤s ¥£G~ûí·“&Mò÷÷?~üxnn.éDŒ&Х°°P[[{òäÉ;w>s挥¥eß¾}·oßþþý{ÒÑ„ÌÛ·oÝÜÜ””””””ÜÜܲ³³[YYÀCˆëׯO™2ECCCYYÙÎÎ.::š¯»mb]À@#6›mhh8iÒ¤5kÖœ>}º  `ïÞ½/^¼033[¾|9j ***­¬¬²²²²²²¬¬¬œœœ*++[y‹ ‡C‡-**ŠŽŽÎËË ˆˆˆàëE èÑÐÐÀý«7‹Åk½}ûvîõMLLZ?C­‘ƽI‰k©€9ÌÌÌþúë////ggç={ö2€€ÙÛÛ[[[çåå%$$dee­_¿¾]oöì™……÷’~ýú=þ¼•·hkkKIIéè踻»§¥¥µ´ZbbâÔ©SÝÝÝ333óóó÷ìÙ#++Ù‘³Öqqq}úôáùíâ®õçO‰'|,<زeËêÕ«¿ºZzzºµµõŒ3ª«« €¬âââîÝ»7þ±-Gc))©ššîÔÔÔHKK·´ WW×ëׯWUUeggijj>~ü¸Ù5]\\6nÜȽ$ `ðàÁíŠÇíÇfffׯ_oÃ'!Äø×"2âØ­Ž€߸qãóçÏÎÎÎ%%% HÕÕÕ6lèÙ³§¼¼<‹ÅRSSËÊÊj|õ«zÄÄÄ 2DVVVOOoéÒ¥«V­jvÍ»wïNŸ>{ÉŒ3¸GÌíŠWPP0~üø½{÷2¤-9›|í3 @«µ´Y¸éq3p/hlÚ´éóçÏ7nlËÊl6ÛÏÏ/..îÒ¥K]»våw6YºtiZZÚÖ­[MMMª««åääÚu<ÑÒÒJMMÕÒÒj\’ŸŸoii™——×–·WTT|ù’””Tyy¹¬¬lã’ªª*•ÏŸ?·=Gnnî˜1cvîÜéääÔÞ÷ Ü ˜®#`‹õ믿Κ5kÈ!ÜãawêÔ©ˆˆKKKŠ¢233¹_möÎ?M¦­˜››7™«˜ššÚ»wï6h¥*444rrr¸—dggsÿÜ–xE½{÷ÎÅÅe×®]âо|…z444HH´ï¯“¯¯¯ÏСCÑÁ 2ªªª¸‡˜‡â~µ-çxÇŽÉý®ÈÈHWW×68yò¤½½}³/988=z”{É‘#GœÛ¯°°pÔ¨QŽŽŽmŒ-éD:ˆfž/^¼¸¦¦fÔ¨Q‰‰‰šššüH H...K—.ݱc‡„„Dddä›7oÚ»…yóæYXXlÙ²eáÂ…E…‡‡ß½{wß¾}+pŸurrZ¸páàÁƒ»té’““süøñ   ¿þú«Ù•×­[goo¯¢¢2mÚ4Š¢¢¢¢"""î߿߮x£FZ½zõèÑ£ÛûsÁ—0z4¹GÛ-_¾|êÔ©#GŽüøñ#í©,,,Œ¢(sss33³çÏŸ7·…¢¢âÕ«W=77—–TŒ…ztðt£áÇÿôÓO'N¬©©éøÖ  ô q– ¿¿¿¦¦¦¿¿?]` 0Ѓ‡;aµ„Åb9räìÙ³þù'-` 0Ѓ–kÀTTT:4þü¢¢"º¶ À((` ½LQÔ°aÃf̘o€¨B=èš„Åmýúõ¯^½úý÷ßéÝ, €´€)Š’‘‘9|øð²eËÞ½{Gï–ˆC=:~#ŽfYYYýøã , }Ëd¡€üs¬[·.77'¢@Ä €ü+àN:íß¿ß××·°°Û  ôàÇ$¬FÖÖÖ³fÍòööæÓö ôàߘã—_~yôèQll,ÿv H(` ¿ XNNnïÞ½K–,©ªªâß^ ôàÓ,hnŽŽŽ666|Ý €` €üsìܹ3<<<33“ß;à70ÐC0¬§§çëëëããÃïð èAãÓZçããóÏ?ÿàAI ìPÀ@ÁŒ€)Š’–– YºtiMMvÀ'(` _¿ÜÄÈ‘#{öì*˜Ýð è!°0GPPжmÛòóó¶Gz¡€.`ccãY³fýòË/Û#½PÀ@0EQk×®ŽŽ~ñâ… w @0ÐC7âhBEEeÅŠ«W¯äNè‚z~LQ”——×£Gnß¾-àýt èA¤€eee7nÜèçç'àýt è!°q41cÆŒÊÊÊsçÎ ~×Ú~LQ”„„ÄÖ­[ýýýëêê¿wž¡€‚Ÿ„ÕÈÙÙY__ÿàÁƒDöÀ0ÐCwÂúÒÖ­[7lØPYYI*@{¡€GÀEY[[4h÷îݤ´ hC°€)ŠÚ´iÓÎ;ËÊÊfh;0Ѓì˜¢(33³Q£F………ÌÐv(` ÙkÀëÖ­ Å „ èÁf³IG LLLF…Ç€P@=˜0¦(jíÚµ¡¡¡?~$à+È1A4¿ÌÑ£Gï¾ûn×®]¤ƒ| èÁ0EQ?ÿüóž={ Ih #Ž˜ ˜p ˜ÃÀÀ`Ê”)ဤÆÐ,ÿýû÷‘Ð"¦1AØyaKºuë6qâDL‡&Cm˜SÀEùûûïÝ»·¤¤„t€æ¡€Œ:MQ”¡¡á÷ß¿gÏÒAšÇ #&5F‚æX½zuXXXEEé Í@=ò=`nÆÆÆû÷ï' (`  Ó ˜¢(ÿ;w~þü™t€¦PÀ@Ž€)в°°°´´<|ø0é M¡€̹Vk×®ýõ×_ëêêHøL|¸’’ÒùóçIø èÁä0EQ+V¬Ø²e éÿaî„ c¯sŒ7®¢¢âêÕ«¤ƒü  ô`Ú­(›X±bÅöíÛIøs˜ \x+Ê&f̘ñìÙ³äädÒA(  ta~KIIyyyíÚµ‹tŠ¢¨N¤€ˆ`~Sµ`Áccã·oßêëë“Îâ#` ïs(++Ï™3'88˜t0ÐD(FÀEy{{>|øÃ‡¤ƒ€¸C=„¥€»ví:nܸ}ûö‘â ô`ø8¸­\¹2,,¬ªªŠtkÂqÄæ–0EQ={ö0`ÀÑ£GI±†z0ù^Ð_Z±bÅÎ;ñx  ´¢þöÛoÕÔÔ¢££Iñ…zÑ)h___Ü”B=„â{ÀÜÆ———wïÞ=ÒA@L Ó˜L¸®S%))éååB:ˆ)0ˆ¯¹sçþõ×_999¤ƒ€8B=„è{À”””fÍšF:ˆ#!;bc Ý5`ooˆ²²2ÒA@ìߘIèfAsŒ1âСC¤ƒ€ØA=„nV#__ßàà຺:ÒA@¼ €B:¦(jÀ€zzzçÎ#Ä è!¼LQÔòåË·oßN:ˆ0ÐCgA7ruu-//¿uëé F„õˆ LÃf³IGà„„ÄâÅ‹qgJ$0ÐCH¿†Ôè‡~¸yófFFé .„øˆ Œ"Ô×€)Š’——Ÿ3gnʃzõ5`ŽÅ‹=zôãǤƒ€Xî#&0‡P_æÐÕÕuqq9pàé PÀ@a¿ÌáããV__O:ˆ>¡?bCû5`kkkØØXÒA@ô¡€¢QÀE-^¼S±@PÀ@Ñ(àI“&¥¥¥=}ú”tq(` ‡h\¦(JJJjÑ¢E!!!¤ƒ€ˆc‰ÀäUÚ±XøXÚMUUõõë×***¤ƒÐ ¸¸¸GÏŸ?×ÒÒ"ã_#ˆÂ˜@d®S¥¦¦æææ¶ÿ~ÒA@”a¨× Œ€y ¬¬œ­¤¤D:=ž={æììüúõkiiiÒY€$Œ€éDàNXÜÌÍÍÍÍÍOž++KVV–t #`2LLL¬­­Oœ8A:ˆ0ÐCdîý%ooï]»vá¤ÐK4˜ x"v#n#Gޤ(*11‘t)¢yÄÁ½qpûé§Ÿð}$ f5“°x ÚZUU•¡¡áíÛ·IgÂ$,`4>ÿÌ!''7wîÜÝ»w“¢C”G-<íÁ?444HKK×ÕÕ‘ÂGïÞ½ëÛ·off¦²²2é, 8£‰ö`]]Ý‘#G:tˆtê5#àöª­­UPP¨©©!„¿îÝ»çîîþòåKÑ>ßÜ0FÉûP~ÉÖÖ¶K—.þù'é PÀ@‘Ÿ„ÕÈËË+,,Œt bqÐ~‡kÀS¦LIMMMKK#„ h &§ )Š’––öôô '„f5“°ÚëÓ§OZZZ¤ƒB^^^Ÿ>}222TTTHg¾Ã$,`4ñ¹LQ”ŽŽÎèÑ£8@:7q9h_‰Ï)hŸ°°0Ѿñð h >“°8¬¬¬ºuëC:10Ð@ÜFÀEy{{ãùHÐ(` ðøñãsrr{ö,>>>!!a̘1üNBDÌ'a5Z²dIhh(é ¾~Ðôóósuu 8xð ––Vhh¨ÏÈ‘#ùåä¡ Î7âà6qâÄôôô””ÒA@|½€ß¼y“œœÜÊE ˜ Œ†kÀ_š2eÊ«W¯ðK ´¤Mœžžîáá¡««+%%¥««ëáá‘™™Éïd \PÀMHII-Z´(88˜t`¨¯ð“'OÜ£G7n”••ݸqÃÄÄä›o¾yöì_“½}ûÖÍÍMIIIIIÉÍÍ-;;»••Y_àk6h#àf-X° 666//t`¢¯ðŠ+Ö¬Y³nÝ:ccc999ccãŸþÙßßß××—±***­¬¬²²²²²²8Ó¾Zÿ^2ûñ/| 7âh–ŠŠÊÔ©SqShÖׯ-+((dffjiiq/ÌÏÏ766þôéŸb=|øðرcKf̘acc³dÉ’f×§÷"9&aµWRRÒÂ… III5.©­­íܹóçÏŸÛòö½{÷ÆÄÄ\ºt©õÕÖ¯_ßìK¸Ü.wîÜY¾|ùíÛ·Ia¨èèè­[·Þ»wth7’×€Ùm@{,UUÕ&ãÝ>4·b„ 7oÞüêj‚ùqD®·ÎÕÕµ´´411‘t`†4ÍÍÍSRR¸—¤¦¦öîÝ»oG‰ ®·NBBÂ××wûöí¤ƒƒ0´€ÇŽÛdâhdd¤««kß~òäI{{{>䂿áðWÍœ9óñãÇM~­qÆÐž7oÞíÛ··lÙRRRRRR²yóæ»wïzzz6®À}¸wrr:}út~~~mmíëׯ·lÙ²qãÆ­[·’.¦PÀ_%##³xñâ]»v‘LÁÐVTT¼zõêƒ ’’’âããš]yÍš5QQQ}úô‘——2dHZZÚÍ›7­¬¬œYœáp[,Z´èâÅ‹­ßTÄnùÔ Ü «½6nÜxõêUÒA˜ÎÇÇGZZzÛ¶m¤ƒ@[áq„Àh8ÝFË–-;pà@ii)é @ h€n£nݺ9;;GDDä¡€¸Üv«V­ ®©©!ÃAh€ï·]¿~ýúôéÃý¤/O(`  ¸íV®\¹}ûö††ÒA€$0Ð#àvqppPVVÆãÄ h€kÀíµjÕªÀÀ@Ò)€$4˜Ý^ßÿ}eee||<é @ h€n/‹µråJÜ0@œ¡€(`L›6-===))‰t  4À$,HII-[¶ ·¥[(` &añÆÓÓóÆ/_¾$ÀAh€gWðF^^~áÂ…Û·o'@ 0æÍâŋϞ=›••E:š@LÂ♚šÚ¼yóvìØA: h€îˆeË–EEEååå‘… €;BSSÓÃÃW‚Ä h€kÀäççwøða ‚Ä š@Œ€;H[[ÛÝÝ=((ˆt0ÐÜq~~~(**" 4À8:NOOoÊ”)ˆ4ÓÂßßß¾}ïß¿' 4À½ iÑ­[777·ÐÐPÒA@PÀ@0-üýýÃÃÃKJJH¾C 0¦‹‘‘‘««kHHé Àw(` &aÑhÍš5»wïþøñ#é À_8h ð4$3f÷îݤƒ¡€¸½Ö­[‚A0€hÃAh€¯!ÑËÄÄdìØ±¸ ÚPÀ@0íÖ­[·{÷nL‡a(`  ˜vÝ»w?~<ž ÂPÀ@\懀€€ÿû¿ÿ+(( øM FÀü ««;sæÌÀÀ@ÒA€/PÀ@0Ÿøûû=z4;;›t  h€qð‰††Æ¼yó¶nÝJ:ÐM nEÉ?¾¾¾'Ož|ýú5é @30ÐÌ']ºtY¸páæÍ›I𡀏ÌWË—/}ñâé @'0Ð_Câ+__ß5kÖtÂAh€0¿-^¼øáÇ·nÝ"hƒ`¿ÉÊʬZµŠt  h€°Ìš5«¼¼<66–t  h€ ‰7®\¹²®®Žt  h€Œï¾ûNCCãØ±c¤ƒ PÀ@Ì‚˜;v¬[·®²²’tè(4 ŒÍÀ÷ìÙC:t è˜-[¶ìر£¤¤„tè0Ч ©gÏžnnn›6m":M NA Øúõë###ÓÓÓIÞ¡€l6›tñ¢¡¡áãã³zõjÒA€w(` NA Þ²eËzÐáBöô§OŸNŸ>J*sÈÉÉíØ±ÃËË«¶¶V»ûá‡êëë×®]«©©9dÈÁì@d €D ¸®®îäÉ“ãÆëÚµkDD„ŠŠŠ€0Ó„ ºuë"€} >|óæÍ·nÝ***Ú±cGë°  œ‚444Ÿ:ujüøñGŽQVVüÞë·ß~³±±qss322Ìåäälmm›}éõë×ׯ_wqqÑÔÔLa0ЀȸS§N§Nš5kÚ· CCÃ¥K—.^¼˜tŠ¢¨ŠŠŠ .˜™™õë×oùòåÍÞï@<¡€|-༼¼ÌÌL>m\TùúúfeeýñǤƒP}ûö=uêÔû÷ï#""ÔÔÔÒÓÓI'` œ‚444Ð> º®®îÂ… ¸}ûv```÷îÝéݾh“––>xðàwß}çèèÈ„oIJJÚØØØØØÀ =è¿xñÂÀÀ`×®]“&MÊÎΞ7otwwgæ—³¿4zôè¹sçÆÄÄTUU‘Î (` í“°LLL®\¹rýúu|Á”g7n¼uëÖåË—IùºÝ»w[ZZ†……éèèLš4©¦¦†t"¾C h¿‡””T¯^½hÜ x’——Ÿ?þ§OŸHgùŠîÝ»{yy]¹r%##cÚ´i¢}Ã20Ѐçû´åää`V_9rРA7n$¤­ºté2a„f_jhhp¾B x˜„•ššêááÑ¿ÿ›7oò)p„††=zôÁƒ¤ƒtÔo¿ýfaañË/¿$''“Î@0Р]_CÊÏÏ5jÔ˜1cúöí›™™ùÃ?ð3Pêêê;wîœ5kVuu5é,òã?îÝ»·ªªÊÍÍ­W¯^‰‰‰¤tûÓ < ©½æÎkoo?gΜ¶¬Ì¹…äĉqO&L˜`ff¶uëVÒAèq÷îÝ®]»vëÖt}x0Z»&auêÔiúôé|Í_ú¿ÿû? —o¿ý–tØÙÙ‘ŽÐQ8 4À æSWWß³gÏܹs™?#º#ŠŠŠú÷ï¿iÓ&Ü= ˜ 4ør\WWwèС¥K—’Š_7nÜ7ß|ãççG:©««‡‡‡|óÍ7vvv‘‘‘¤´ 4à¾G}}ýÑ£G{õê5iÒ$²Á ‰ÐÐÐ .\ºt‰t~a±Xß|óMXXXnnî† H'h® ¸gA=º²²2""bèСdSÁ—”••÷ïßïé陜œ¬ªªJ:IJJ:;;“NÐŒ€ܧ >|ãÆ ´/c1ÂÍÍÍÓÓ“t’¶mÛvöìYaÿ^;0Ѐ{¬££C6 |ÕÖ­[322g9c&Ø·oß… Ο?O:{öŒt"5xê@3ð0†örssswwoé1®Àp111‰‰‰x}št!ó矺¸¸DEEá"1ð MÕÔÔlÛ¶ÍÔÔ´¨¨¨oi×ãÔÔÔNŸ>½hÑ"±ýf0ofÍšuôèQ]]ÝY³f%''“NÂMø 7oÞ¼uë–††Fß…°°²² œ0aByy9é,BCNNnêÔ©qqqiiiÖÖÖ¢ý¨G Æÿ¹téÒ‚ ÂÂÂ\]]ÛõF܈C4Ì™3çÁƒ³fÍ:sæ þ‡¶‹––Ö’%KH§!ƒ0ügøðáOŸ>moûR‹‚‚‚M›6‘":êêêŽ=ZZZJ:0 þÓ©S'EEEÞˆqˆ iié³gÏFDDœ:uŠtQ\\|öìYƒÉ“'_¼x±®®Žt"` 4‹ --­3gÎxyy¥¤¤Î" 455Ï;÷æÍ›áÇoÙ²eÞ¼y¤S €ÅTaa![Ã5`3`À€ððð±cÇâYtQQQ™?þ­[·öïßO: 0 XìÔÕÕöíÛ—ÆÆ5`Ñãæææååõý÷ßWTTÎ"R:uj~êëçÏŸœˆC‹—§OŸÚÙÙ]»víþýûššštmßI~~~ƒ šŒ¡¡¡!//¯k×®´oÙÉÉiÍš5ŽŽŽ´oˆ+//2dȬY³|||Hg eee÷îÝ1bé ð/þ5nÄ!F$$$øÑ¾¸,ªÏŸ?ooo¯§§7iÒ$ÒqDŸ’’ÚWL €˜-Úôõõ/^¼èì쬢¢‚n (88¸¨¨hêÔ©}ûö%h€kÀ@Ì‚yýúõ;}úôŒ3îܹC:‹ø>|x]]Ýwß}×·oß-[¶”””N‚A999ÎÎÎ Û#fA‹ƒÁƒGFFŽ?Ïü!¥OŸ>Û¶m{ýúõÞ½{ß½{W__O:tš¢æÔ©S °²²>>Æ ËÈÈ ÚçèÑ£¸‚@ X(UTT|8é8Ð&:urppppp D|a,L¶oß~üøñG1ª})LŠ;vìÙ³ggΜyòäIÒY€—/_Ž­®®&Ddá )L–.]zíÚ5~ë#` (ÊÞÞþòåËË—/&hPQQ¤­­=iҤÇ—––’N$jPÀÂDZZZVV–tŠf`pôéÓçÖ­[K—.ÅŠ…Ýøñã¯^½š‘‘1vìØ?ÿüóÝ»w¤‰Ñ|ò|ñïñË¢ÊÂÂâèÑ£ýúõ#áãÇ“'O–””<~ü¸ŠŠ é8¿FÀhÐÐЀkÀÐHEE%..ÎÂÂÂÆÆ_OmEEE&LØ¿nn.é,ÂM NA7IIÉÀÀ@__ßaÆÅÇÇ“Žü"//?qâÄ„„Îï[ H˜à\k3p º½ÌÍÍO:Õ»woÒA€q§NºzõêÅ‹“Î|TWWwãÆòòrWWWÒYhÆ¿F@Ó4Ü^½{÷>sæL¯^½H&zýúõ„ ÌÍÍ÷íÛ§  @:PTT¤¦¦&))I:/p  _C‚Vݾ}[FFÆÆÆæéÓ§¤ã7nÔÐÐ?~üo¿ý–••E:S €…‰Í‹/H§hnÄ­“““;pà€ŸŸŸ££cDDé8 h¡¡¡/^¼˜4iÒ;wlmm=zD:#à\k3{ ÚØØøòåËÝ»w'¤)33³ .ôèуt`º´´´©S§öìÙó·ß~Ã7”Äçè*DçÌp (Š¢ªªªäääH§hnÄmÔ³gÏ»wïjiiõë×ïï¿ÿ&`±XÍ.JKKGxÿþ}1¹‹ X˜TVV2¶€q ÚHVV6$$$**ê§Ÿ~Z°`AEEéDÀ²²²‹-ÊÏÏ÷ôôTWWÿñÇI'â;†žk%‹±§ eddÊËË¥¥¥IiбçÆÉJKK½½½oܸ±ÿ~GGGÒq€AŠŠŠrrr,--I¡(| IÀ[ÀŸ>}bæ·8ºwï~õêUCCCÒA@øÄÅÅ-\¸ÐÑÑqÇŽjjj¤ãÓÅÅÅ%%%ÙÛÛÛÚÚ æxˆkÀ@QÅÌö¥ð5$è—§OŸ*++›››|¨££C:ˆšëׯûûû———¯_¿~ܸq8Ñ4z÷î………µµuÿþýûöíkmmݳgÏ/WC  ¸½ttt?~¬­­M:ˆ¦‹/þüóÏ k×®?~tfA c ˜±TUUß¼y£¬¬L:U__ùòåãÇ_¸pÁÂÂbêÔ©&LPWW' „ X PÀí¥¢¢òöí[%%%ÒAþóùó縸¸?þø#..nÀ€ãÇwuuíÖ­é\ dPÀ…n/%%¥ÜÜ\EEEÒAšQUUõ÷ßGGG_¸pAWW×ÅÅe̘1ƒ Â7‰¡-PÀ…n/EEż¼¼Î;“Кúúú¤¤¤‹/^¼x1##cÈ!ŽŽŽýúõÃÙ¡%(`B·WçÎ Hh«÷ïß_»v-!!!>>þÇC‡µ··4hµµµ””étÀ (`B·—‚‚Âû÷ïû-)€Öåää$&&Þ¹sçæÍ›VVVƒ0`€•••ét@ X PÀí%''WRRÂ̯H´KyyùíÛ·ïÞ½ûðá䤤ÚÚÚ 0 _¿~æææ¦¦¦¸r,nPÀ_ñöí[ŸË—/S5bĈàààŽÌudfÛÛÛ‡„„ 0€tfÈÊÊ–––ÊÈÈ@³¼¼¼¤¤¤‡>}ú4555''ÇÔÔ´wïÞ¸R˜ñ ïIDAT}ûöåôq÷îÝ¥¥¥IÇ>B·¦¢¢¢ÿþ³gÏ^´hEQáááGŽINNæùÎÉÌ,` ‹ÈÈH ÒAš!##S^^ŽÃˆ¼êêê/^<{öìÉ“'OŸ>}õêUvv¶ŽŽŽ‰‰‰©©©¡¡¡¾¾¾±±±±±±ŠŠ é°@pk‚‚‚>|xìØ±Æ%3f̰±±Y²d odf›šš^¼x±G¤ƒ4CZZº²²§æ@ ÕÕÕ½yóæÕ«W¯^½ÊÊÊzûömzzzff&EQݺu300ÐÓÓÓÓÓÓÔÔÔÕÕÕ×××ÒÒÒÐД”$Ú ÜGGÇU«V9;;7.ùûï¿·mÛÏÛ™YÀzzzwïÞÕÓÓ#¤RRRÕÕÕ8¦4úøñcNNNVVVvvvnnn~~~~~~VVVaaaQQQ—.]444444´µµ555555544TUU•”””””ÔÔÔ444ºtéBú‡ŠB·NKK+55•ûiðùùù–––yyy¼m™Ü¥K—W¯^©©©‘Ò IIÉÚÚZ|“ -ŠŠŠŠŠŠ óóóß¿ÏùcqqqYYYYYYqqqAAÁÇ•••9•ÌùEEE%%¥N:©¨¨¨¨¨pþ[UUUNNN^^žs/Xeee yyyIIIÜŸ®ãPÀ­‘––þôé÷W÷jkk;wîüùógÞ6ÈÌ®¯¯—`æC‡$$$êëë™™ @x}üø‘SÉ¥¥¥eeeeeeµµµ¥¥¥%%%eeeõõõ%%%••••••eeeE•––644TWWWUUÕÕÕ•——Sÿ¿•¤¥¥;uêĹi‚‚ÂÛ·osrrêêꤥ¥ T^^þäÉî§:ÊËË/X°`åÊ•âüX >6[øIIIÕÔÔp/©©©‘––þêùå¾|¦ BøT^Lêµ—˜œ‚f8|h¼ÁçÆ|n<À‡Æþ}n¢pÑÎÜÜ<%%…{IjjjïÞ½Iåø*Q(à±cÇFFFr/‰ŒŒtuu%•à«DáŒDyy¹………§§çÂ… )Š ?tèPJJ ÏÏÀ‰àCã >7Þàsã>4Þàtk¯^½úàÁƒ¤¤¤øøx<™˜ ¿5¿'òoð¹ñŸð¡ñ†Ÿ›d@@?¶+ì† F:‚ðÁ‡Æ|n¼ÁçÆ|h¼áÓç†_ˆ…kÀB @ €0(`PÀ €@€  @ €ðÞ¾}ëææ¦¤¤¤¤¤äææ–M:‘pxôèÑ¢E‹TTTX,é,ÂáúõëS¦LÑÐÐPVV¶³³‹ŽŽ&H8ܽ{×ÓÓÓÈÈHZZZWWwøðágΜ!JÈäçç÷èÑÿTÛ‚õÚwþWEE…£££••UVVVVV–•••““See%é\B`æÌ™ššš·nÝ"Dh :´¨¨(:::///,,, ""‚t(!°dÉKKËK—.UTT<}útåÊ•›6múå—_Hçl6{Ö¬Y6l Dh°ÿíÛÇÓþôðáÃcÇŽ5.™1c†Í’%K¦.xÚh­X±â×_mü…:55u„ ééédS £ŒŒŒ”””"víÚ•œœ‰ªm!€O #àÅÆÆzxxp/ñððˆ‰‰!•DØöíÛ¹Og™˜˜àzo¤¤¤$%%I§ÉÉÉû÷ïß³gé ðð¿ž={faaÁ½¤_¿~ÏŸ?'•ÄG\\\Ÿ>}H§2¥¥¥œKé .$ETUUyxx:tHQQ‘ta¢­­-%%¥££ãîîž––FûöQÀÿ*))QSSã^Ò¥K—ââbRy@L¯Y³&88˜t¡Á™£¢¢2tèPEEÅ€€Ò‰„À²eË&MšdggG:ˆ0quu=uêTyyùƒ8tèÐäädzw+ÿ’––þôé“””Tã’ÚÚÚÎ;þü™`*á‚ KíUPP0yò䀀ÒY„Laaa||¼¯¯ï‚ ~þùgÒq-&&fçÎ §ëñO•{÷¹téÛÄÿ†iii¥¦¦jii5.ÉÏÏ·´´ÌËË#˜J¸à_u»äææŽ3fçÎNNN¤³«„„„Y³f½}û–tF311‰700h\‚ª<(((066®¨¨ q›8ý/ssó””î%©©©½{÷&•DÛ»wï\\\víÚ…ö툒NÁt†††M¾Ïʧ/¶Š0~üÊ‚þר±c###¹—DFFººº’Ê"¬°°pÔ¨QŽŽŽ¤³·Û·o÷ìÙ“t ¦c¡q!éhÂääÉ“ööö4oôËÿ7⩬¬ÌÈÈhóæÍÅÅÅÅÅÅ›6mâœm K˜à¯SYZZ?~œt áãìì]PPPSS“““sðàÁ®]»þù矤s üSý*GGÇS§NåååÕÔÔdffnÞ¼Y]]ýáÇôîWþóæÍŸøøxŠ¢œœœ‚ƒƒ¹¯š@Kš=‘…¿W­hö+))QQQ|!’°{÷îÄÄÄÒÒR o¾ùfÅŠ¶¶¶¤s \þª«W¯îÞ½ûúõ륥¥ZZZŽŽŽkÖ¬133£w/øß@®€  @ €0(`PÀ €@€  @ €0(`PÀ €@€  @ þ3eÊ???î%+W®œ8q"©<"ŒÅf³Ig¦øðáCÿþýcccû÷ïOQÔãÇG•ššª¥¥E:€¨ÁþÓ¥K—ðððyóæÕ×××××Ï›7oçÎh_~Àšš={vŸ>}Ølöµk×.\¸@:€hB@SNNN¥¥¥W¯^íÑ£é8¢  M-Y²ÄÁÁáýû÷Ož< %@4á0ü+W®dddŒ?ÞÓÓ399ùÊ•+¤ˆ&Œ€à?%%%ü믿Œ)Šzþüùرc>|¨ªªJ:€¨Áþ³hÑ"wwwNûRÕ»wïéÓ§/Z´ˆl*‘„0€  @ €0(`þFc]€äÃ*IEND®B`‚gsl/doc/images/siman-initial-route.png0000644000175000017500000007570613536674414016363 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìÝgXWÛð¥7QéÒ¤ ÊÒE‚ ƈ`…D‚Fãƒ-ºXAA)‚ E h5"XèˆJSŠÒËîûa®g¯}©[fvvàþ}x.œ9çÞä‰ÎÌ™sèt: ¼%ˆwÀh àÀ0€`À €@8€p àÀ0€`À €@8€p àÀ0€`ÀpN`pÈ .\033“–––••]²dÉýû÷¼VZZÚÚÚ:::š›J¸<•Xì…cX·_€st&ýÿøÛo¿:uêäÉ“µµµ>vttðòÒÒÒ~øaçÎÇçMåuàNù›À%¾ÿ5©ªª>xð@OOq$,,,,,l°ó322Ö­[WZZŠ}±ôŽÝUüÓ>|FÀ`¥©©IEE…ù#}daaQUUÅY_Œ­€€@ooïþýû555ÅÄÄôôô˜GÕÈiŒÿe¾[Î<&þøñãæÍ›¥¥¥µ´´vìØÑÑÑ1l©©©VVVRRRRRRVVV7oÞdî´½½}Ë–-JJJ̽ÌŸ?_JJJ^^~Æ mmmÌ fffZZZŠ‹‹kjjž={vØÖ `°baaÁœÃÊËËSWWç¾ß7¶··§§§744œ>}ú¯¿þºzõ*ó }n˜÷oaÆŒfffÕÕÕ<¨¬¬Ü»wïÐ=fgg÷Ýwååå›7oöññyúô)ã„M›6ÙØØ3º+--utttvv.---((ÐÓÓóóócœÿîÝ;ww÷ü±®®...îÀÿüóÏ­@Htúÿ×TXX8yòd“àààèè芊ŠÁÎGbFMM-""‚ËÞI$ÒîÝ»™?ºyóæôéÓûŸ6lýˆ††mmí¡ÏY²dɉ'˜;vÌÍÍqÕáÇû\²jÕª}ûö1Ù³g£}Ÿ?þøƒñQrr²‹‹Ë­@DÀ cÀpêîîNOOß³gϲeËdeeçÍ›W]]Í8ŸAJJÊÒÒòܹsÜ÷N"‘JKK™?jhh‘‘éÚ`-´··ïÝ»wòäÉHyBBBC|G:>qâÄ÷ïß3©¬¬ÔÐÐ`\U^^Þç%%¥>u–””0Ú×ÑÑ)**bþ ªªªC´Á”Ð1ì¢ŽŽŽ   ÚÚÚäädVÎïÓ8ãç¯b´†<ìÓ>?ô?ç‡~xûöíÁƒõôô¤¤¤:::$$$» !..ÞÜÜ,&&Æ8ÒÙÙ9nÜ8äá±€€@WW—ˆˆó%ÂÂÂ---âââŒ#ííí’’’Hûbbb]]]Ìç öööÖD$ŒwŒâââ ECCƒƒkÙúE¹Oú²+>>>''GMM ùcYYÙ°—())ÕÕÕ1?À®««›0aãýóR^^þÓ§OÚÚÚŒ#Ÿ>}bü’’’bjj:Ä%sçÎe>réÒ%ÆÏöööׯ_¶_ˆ —ߌ<ýÿk"‘H&&&IIIMMMÍÍÍ÷ïß'“Éì|Tz°ÙþŸN:5))©§§§ÿ9^^^ÞÞÞÕÕÕµµµ‡rwwºq:þï¿ÿÊÈÈÄÄÄÔÕÕÕÕÕÅÄÄÈÊÊæää qUqq±’’ÒÑ£GkjjjjjŽ9âååÅ8³  @YYùÂ… Ÿ?niiIOOgž„Åê?øü_tô†ÿýwÍš5ÂÂÂÈb“ÌÓ¬ð àÛ·oëêê õÿèË—/ÞÞÞ²²²ãÇ_³fÍ·o߆ `:ž””daa!!!!!!aaaqýúõþ½÷ñòåËyóæIJJÊÊÊ®[·®µµ•ùÌ/^ÌŸ?_ZZZBBÂÞÞ>==}Ø ˜„àž8€p àÀ0€`À €@8€p àÀ0€`À €ðKgggûùùiii‰ŠŠª¨¨8::&$$0>ííí=qâ„™™ÙøñãÇgjjzâĉÞÞ^ ¸!@§Óñ®D"‘,--W¯^íè訥¥ÕÒÒ’——¼hÑ¢½{÷’H¤-[¶<}úô÷ß711¡Óé/^¼Ø¾}»••Õ±cÇð.à¿p¥¥¥æææ$iìØ±ùùùšššŒO+**Èdòׯ_q«à¿Ü‚îODDDHHùY\\¼ÿ ¼­@ ?psssVVÖŠ+6l؀ٴiÓÊ•+>|øíÛ·oß¾eee-_¾|Ë–-øÖ pŒ¿nA 0~ž;wîíÛ·‘A0NwssKNNf|ºdÉ’ÄÄDæó"¡óŸÚÚÚØØX•½{÷"GÂÃÃ'Nœ˜””ÔÐÐÐÐД”4qâÄ?þøcئ„……ñþ €Ø0 ;þ3{ðàÁêÕ«ß¿O"‘´´´ÎŸ??{ölƧÿüóÏ÷ß_VV6t#üûC¸š W0‰€5®`k&\Á$ÖL¸‚IXÖÌ¿ÿ,¾}û¦  ÐÑÑA"‘DEEÆŒÃø´¥¥ENN®³³sèFà_6®`k&\Á$ÖL¸‚I¬™p“°¬™'a!?~{öŒùÓÜÜ\uuu<êPÀ/ìäätýúõºººîîî?ž?~íÚµD>ýá‡V¯^ššÚÔÔÔØØ˜œœ¼zõêüßšŽñËÝ€?~<33³¹¹YAAÁÆÆæ§Ÿ~š>}:ã„øøøÃ‡¿}û–D"MžnܸøøøÀho@bkkk³²²zõê»z{{———wuu•——oÛ¶íêÕ«ãÆ«­­µ±±yÿþ=¥3`@`BBB¦¦¦ùùù\Þ=ž7oÞ?üÐÚÚêéé9cÆŒœœ´Š€Akkk“’’’•••––®¬¬ä²µ]»v©©©•••EFF.Z´(** •"`@À€ÀZ[[‘¹Td2™ƒ»Ð}œ;wîáÇ>|xøðáÁƒƒ‚‚h4•@_À€À˜˜ÝyX3fLRRÒ®]»jkk?~\XXèêêÚÜÜÌ}ËÐ0 0Fr?Fèêê^ºtÉÓÓ³½½ýÎ;d2ÙÒÒòÝ»w¨4 À€ÀP#æÍ›àááÑÛÛK¡P¶mÛ6{öìû÷ï£Õ>ø'€³³³ýüüÝiTTTŸ DTTÇ‚?`ð”)S***ÚÛÛÑjù—_~QSSûñÇI$’¿¿||¼¯¯oxx8Zí¿p`` ‰‰É;wZZZ vìØ±ÿþÐÐPäSz?ýõ—‡‡¾5Ü1XDDDWW÷õë×hµŒLÈÊÊÊ:}ú4‰D²µµÍÎÎŽ‹‹ó÷÷ïêêB«ÀhÆ¿{”––š››766öÿˆF£éêê^¹rÅÂÂbèF`3†‘-**êÁƒ.\ ‘H>>>sæÌùî»ïPl¿¨¨ÈÖÖ611ÑÖÖ–D"µ´´øúúÖÕÕ%$$())¡Ø€oÆÍDDD„„„üèÆJJJæ/ñ#`ªó°ôôô.^¼¸råÊOŸ>‘H¤1cÆ$$$,\¸ÐÒÒòùóçèömø1€›››³²²V¬X±aÆOˆˆˆ âqU€10ºó°œœœüýýÝÝÝ‘;ÏÁÁÁ‡š?~RRêÝFþ `dvÕøñãíì줥¥ÃÂÂúŸóêÕ«’’’eË–ñ¼:ÀwúðË—/±èe÷îݪªªÈ„,ÄòåËÓÒÒ¶nÝÏ8œá¯F&XÕÖÖÆÆÆ8p ÿ9GŽÙ¸q£°°0‹m8ƒzÀh„ÃÀ***$©¦¦õ^ Y™™™gΜa466ÎÍÍ}òäÉŠ+ÚÚÚPïÀcaaaæv=ò塞^½ºÏ¾4Ÿ?ž©Tª»»;‹é F<æ0 ¥¡£§§wúôi777dBBLLìüùó6l°¶¶ÎÊʨkÀˆÄ¿üøñã)S¦0éîî>yò$L¿ }‹‰ÐÌ.\¸nÝ:>¯ûûûŸ?~ùòåçÏŸÇ®wÀÃ/ìäätýúõºººîîî?ž?~íÚµd>çÚµkx øMÿ0¡™íÙ³GYYyëÖ­}Ž;99=|øð÷ßèééÁ´ÀÈÀ/m`` ))iaaqóæÍ„„„ùóç3ŸsäÈþf}xÚ´iïÞ½ëîîÆ®GóçÏ?xð€yBBWW÷ñãÇååå®®®MMMØÕFø%˜„5²™™™>}ÚÔÔ”qdÊ”) S§NÅ´ß'd!z{{wíÚ•˜˜xýúu}}}LËðÀhœ„À°úŒ€I$’¡¡!Öw¡I$’žž^dddŸ Y!!! …²cÇŽY³fݸqëJÄ lÀÆtâE‹üüüúOÈBøùù]¿~= 6P XÿæÁ<,†ÐÐPeeåmÛ¶ ø©MNNN||üªU«:::xS€@ € À¼“þ7!+##ãìÙ³ž ¦¦–™™ÙÑÑ1gÎ,–è0 ªžž&**Ê|PKK«©©iÀ],± --˜˜¸k×®ÜÜÜO’’Š_´h‘¥¥e^^oª0 ªþÃ_‰$ 0mÚ4ž ‚I$ÒäÉ“›Å()88øðáÃÎÎÎ111<+ Àç €Q À$^M„f¶hÑ¢µk×6! áîîž‘‘±{÷îÆËòü ÕÌË0",,l„ Û·oâ2™œ›››““³xñâ¯_¿ò¬6‚D5Xór"4ƒ€€À… îß¿?Ø„,„¼¼|ZZš¢¢âÌ™3+**xU€A¢"€ x›™µsçΧOŸqš¨¨èÙ³g7mÚdmmýÏ?ÿðª:ßD5X7NNN®¼¼œ÷%!²<<<úï¤Ù‡¿¿TTÔÊ•+‡1F0`@Tƒ0 §»ÐˆÅ‹ûúúº¹¹ 1! 1oÞ¼G>|8 Ó $ü ÕÌû‰ÐÌÂÂÂddd~úé§aÏœ4iRvvvuuõ‚ xöî2€O@¢:€y?šAPP0666==ýܹsÞ,--””djjjiiùúõk”àÀ€¨øó4‚Å Yd¥}ûöÙÛÛ§¤¤ð <?€D5Dëéé}üø±µµ•Ç%1›?ïB“H$AAÁ‹/¦¦¦^¸pƒËÂÂÂ8àààœœŒvu^Æ»81ìýgÎÃb‘‘IMMµ³³›6mš¹¹9-¬X±BOOoéÒ¥ÿý÷_hhè°¿Žø Œ€!±À|;Fp3! abbòøñãÛ·o{zz¶µµ¡[SÀ€FF“H¤%K–xzzr6! ¡¢¢’••%..nkkûþý{tË`‹¬®®ÞÖÖÆñø’78 ..Âq bbb.\X½zõŒ3rrrP¬ €`@H,°€€€¡¡aAAJ☠ à¥K—®_¿ÎÙ„,†   ÈÈÈE‹EEE¡TCÀ€X `îB“H$™”””àààgÏžqÓÎüùó>|xðàÁ   ÞÞ^´Ê`ëÌÏ¡™éëëŸ:uŠ› Y==½ÇºººÂJð3`@H#lŒXºtéŠ+<==9ž…••½s玑‘‘¥¥å»wïÐ*€.`@Hl€ ‰r?ö·ß~ûù矹lGXX˜B¡lß¾}öìÙééé¨Ô@0 $Öx̘1&L(--ź$T ²’““Q™Hµnݺk×®­^½:<<œûÖè‚„Äz“ušD"ÉÈÈ$&&nß¾Ë Yˆ3fdggÇÅÅùûûóᾌfÀ€Ø `BÌÃb044ŒŒŒtwwÿüù3÷­©««gff~þüÙÁÁ¡¶¶–û¨€„ÄVhŒXºtéòå˹Y!‹Ù˜1c.\hii‰ÊÀÀ=`@H#ø4ÃÁƒEEEwî܉JkÁÁÁüñ‡‹‹Kbb"*m¸ ‰­ž4iR]]Ýׯ_1- u‚‚‚111IIIW®\A«M´´´mÛ¶…„„Ðh4´šp[,((¨¯¯OĽëedd¶lÙòüùs´Ú466ÎÍÍ}òäÉÊ•+a%p ‰­&ö.4‰D"“ÉT*uÙ²e¨LÈB(((ܽ{w̘1666•••h5 ` 0 $v˜( RÈÍÍÍÃí Y11±sçÎmܸÑÊÊ*33­f¬ƒ„4zFÀ …"**ºk×.t›õ÷÷¿páŠ+Ο?nË€añKgggûùùiii‰ŠŠª¨¨8::&$$0Ÿ@£ÑŽ;6uêTqqñiÓ¦]½z¯R?`7€ŒŒòóóét:v%a Y!+!!Å Y''§‡:t( Å6`XüÀ&&&wîÜiii)((رcÇþýûCCC'lܸ1???%%åëׯQQQ°ãé(ÇnËÊÊJII½ÿ»’°&++›˜˜ˆî„,„®®nvvö§OŸ\]]›ššÐm0¾”––š››766’H¤>|855•ÝFø÷ ŽÑét‘ÎÎN!!!Ö¯š?þÆ.\ˆ]a<€¬R™››+//n˽½½»víJLL¼~ýº¾¾>º@\Øå¿Œ€ûaüõ¹yóf|ëü£££CTT”­ô%pAʹ¹¹-[¶ÌÓÓõý„„„(JhhèìÙ³oܸnã€þø1€›››³²²V¬X±aÃäÈ“'OZZZììì$%%¥¥¥ÿý÷_|‹8b÷þ3‚С™…‡‡ £>! áíí””(€5þ `ñãÇÛÙÙIKK‡……!Çkjj¾ûî»ÊÊʲ²2//¯Å‹?zô×bn8 `¢O„f@VȺvíFSmllrrr®]»¶jÕªŽŽ,ºø-€ét:N¯­­-,,$‘HsæÌ©©©Á¢ øMXXØ€ya—t~•‘‘¡®®Žü{ö õzð«©©Ùç? Ñh4 …¢®®þôéSŒº€ÿa—#ü5ffnn^WW‡üœ;wNUUõÖ­[ȧííí666QQQõõõõõõçÏŸ—““ËÈȶYþù‚EW¯^]¾|9Þºukîܹ¨×Ã½ØØXæ_)¤¤¤bbbX¼öË—/:::W®\Á´ÂúúúÙ³g»ºº677cÚü»á—|ÊÈÈpss“““VVV^¶lYvv6ó Ÿ>}òöö–‘‘³¶¶NOOg¥Yàéüùóß}÷~øðAII õz¸§££Óç7ãI“&±~ùóçÏ^½z…]…t:½³³síÚµFFF˜v_Á.GFøBQ°Öˆtâĉ7oÞ?~œƒkååå •””P¯ŠâââÌGÄÄÄØš°š››+##ƒvuÿÏ‘#GÂÃÃãââlmm1í>1WÂ`0?&‘H†††|8K]]½Ï555¶ZðòòZ´h‘——Öiƒ‚‚¢¢¢ÜÝÝÏœ9ƒiGŒxÀ€x¸ `þ\rýúõ̯JIIýúë¯ì6ÞÕÕ…é„,Äܹs>|øçŸÁJp OKK˘1c8»–GÀoÞ¼9r䈟ŸŸ¢¢¢   ¦¦&•Jõôôd·aaáøøø¸¸¸¸¸8,êd¦««›››[QQ1gΜúúz¬»`D‚Ä3’FÀ/^¼pppØ¿ddäþýû׬YS^^îííÍYk²²² [¶l)((@·Îþ¤¥¥­­­mll^¿~uwŒ<À€x¸|üöí[>¹qš——·`Á‚'Nøúú’H¤ÆÆFYYÙÁNfñEa##£¿þúkÑ¢E_¾|Á¤h&ÈJûöí³··OIIÁº;F`@<ܰ„„„ššZQQº%qàáÇ...Ÿé¨U IDAT§NrssCŽ4666‡ùòåËÝÝݱ±±ƒµìååµdÉìVÈêÃÓÓóúõë6l€%Ö` 0 ž¶¶6IIIŽ/ç‡ÇÀ÷îÝsww¿råÊ¢E‹›ššÆ?àù»wïnmmeü±µµ544tˆöÿý÷žžž={ö UðЬ¬¬rrrnܸ±zõꑱÝ< ˆ‡›0‰߸qcÕªU‰‰‰ÌLJøð¡Ï‘ªªª!º¾zõjlllBB—Õ²HMM-++«³³ÓÞÞ¾ººš7@hÀ€x¸™MÂ{œ’’²nݺ”””3fôù¨¡¡aÀgÀ¥¥¥‚‚}ÿSUPPº#…äää7ò`BBRRòòåËK–,±´´|úô)o:€¸ €ñw|ùòå 6ܹsgúôéý?í?îéé9r䈵µµªª*óqqqñoß¾…„„ôY?«##£Ã‡ófBÙ@‰J¥ººº^¼x‘7@PÀ€x¸ `mmíÆÆÆ¦¦&KbÅéÓ§·oßž––fdd4à }¸  `ÆŒ‰‰‰NNN%%%ÌgÚÚÚ¾{÷®¸¸ØÌÌ,77wˆN½½½/^̳ Y—ôôô°°0Ø@ €¡`´Æ4Ÿñ_pt7n\SS7-X[[gee¡U+þþûoMMÍâââ!Α••ýüù3Nïîî¦P(ŠŠŠT*•F£‰ˆˆôùÏVDD¹$..n„ ­­­ƒ5ÛÝÝmoo¿k×.t¿Ñ°>þìàààââÂå¿,ð…]ŽÀ—³ I< ~øðáÌÌÌI“& vNÿúõë¸qãòòòÌÌÌÎ;·ÿþÞÞÞ]»vuww÷9™qÄÃÃãåË—Ÿ>}277ÏÎΰedBÖ¥K—ÑúF¬““»s玺ºº­­myy9/»€„ñ.ötuu ô²…—ÃÂÂâââ233UTT˜wwwúôéýû÷•••UUUååå4ÍÄÄäíÛ·'NLNNVWWWWWìs#—ùë+**ÆÇÇÇÇÇ»¹¹yyyýúë¯}jPPPHHHpqq™2eŠv_¶‘S§N8qÂÆÆæòå˳gÏæY×ð?`@0\>FÉä!“BÑŽ;®]»vêÔ©gÏž%$$TUUUUU!¡ûùóg%%¥‰'jhh¨««777Óh´©S§Þ¹s‡1åŠF£ýþûïâââmmmÌÍôéÈÃÃÃÞÞ~Ë–-ÆÆÆgÏží¿W ™™Ù¡C‡–.]š““3ØÛÆÙ´i“¾¾¾§§ghhèúõëyÙ5ül„o— û<>|°²²êÿ^,[ššš444ššš˜÷ âFgggÕÿTTT ?”••ËÈÈLd¢®®Žü ¢¢"$$D"‘Z[[wîÜyöìY—/_2Ú|ÿþ½¯¯¯PTTÔo¿ývúôéžžaaáuëÖýý÷߃U’œœ¼iÓ&ôÿM%((¨´´4%%¥ÿ{MX+--]¼x±]DD—70à%ìrd„çðÈSTT´páÂwïÞqÙŽ††Æƒ´µµÙºª¶¶ÂVUUUVV"?TUU544¨ªªª««khhLœ8QUUõèÑ£rrrIIIòòòC4˜‘‘±nݺ™3g.\¸ðĉÈñ+W®mß¾}Û¶mì†eCCÃ?üðøñã3gÎô¹ëÛÓÓ3wî\[[[¶;äÞׯ_½½½[[[ãããåääx_À.Gà4 .Wá` “ÉùùùpggçÇ?}úT]]]VVVVV†ü\TT$,,¬¬¬¬¢¢¢­­­­­mllŒü¬¡¡ gI$RooïÚµkSSS¥¥¥+àëׯ»wïNHH8qâÄâÅ‹¯]»†¼ƒôíÛ·íÛ·geeݾ}ÛÔÔ”ƒ¯&++}ûöíÕ«W;;;ÿñÇŒ2„……¯]»fiiI&“=<<8hœcÇŽMIIÙ»wïôéÓ“““§M›Æãà+À€`¸Ÿ044|ôè‘’’ósYäçoß¾!Ïe‘ÛÅVVVŒŸûÏo꣫«ËËË«½½ýÎ;âââƒvëÖ­õë×/X°àõë×cÇŽ%‘HMMM222?öññqrrzöì—_sþüù/_¾Ü¶m™L>}ú´££#r\NNîêÕ« ,˜:u*/'d!ÂÂÂtuuçÌ™sæÌ™… ò¸øÇ¿C · G˜˜˜˜mÛ¶Õ××Oœ8qÿþý¬ì›ÛÒÒ‚Ü+Fn¿ÿŸ? ‘ÉdÆCYÆZEEEÎÊëèèpww»|ù²¨¨è€ç vøÐ¡C'Ožìè舌Œtuu嬀¥¥¥ùûû;99ýñÇHØ“H¤èèèäææŽ7žX÷ôéS77·7†„„ õ$,À3`A$—/_^·ncS ))©ÈÈH///‰ÔÓÓS]]ÍüP–ñsWWò\Å2~þúõëÊ•+¹–ÌÐÚÚºxñb%%¥¨¨(aáï-%$$®X±bÿþýÌÜÒÒRii鸸8%%%´JbøúõëO?ýtçÎ*•êììŒ ,//¿~ý:ï'd!>}ú´téÒI“&9sfØ[ à˜CÀ#ɤI“JKK™HKK“Éä÷ïß×ÕÕ)(( ´ƒmqßÓÓ3nܸúúzTnhýúÕÕÕUWW722’ñ0˜YmmíæÍ› Ïž=kmmÍüÑ… ‚ƒƒÇŽ»uëÖ 6p_Ì`îß¿¿nݺٳg>|xüøñÝÝÝsçÎ5kÖ¾}û°ëth~~~EEEIII}Ö»€O`˜#­°Å'FüUÄÄÄúü¿WDDäáÇ•••ÝÝÝ4hbb’››Ë}a –––›6m¢ÑhžpñâE%%¥;wvtt0ÿò勇‡‡‘‘QAAÁŠ+._¾Ì}1CûöíÛ¦M›ÔÔÔRSSétzmmíĉ“’’°îwh EMM-;;ß2v92Âó x$鿎£ŽŽ7 ®^½úÌ™3\VUWWgll¼}ûöÓ·ººzéÒ¥†††OŸ>íóQFF†ººz`` ’ÊsçÎMKKã²=zôhòäÉõõõÏŸ?WTT,((àM׃¹}û¶’’Òùóçñ-€þ°ËX ÆÞ½{™W–’’âòeVCCC.¤¬­­3gŽ““Ó¡C‡úÏ$Š766ÖÓÓËËË377gïéé óöö>uêÔ‘#G‘}ÿ½±3cÆŒ/^hkk“Éä²²²?ÿüÓÍÍ÷ÛC1svvÎÊÊ¢P(AAA¼Ü¸ wî\ccãçÏŸ÷ùèÍ›7¦¦¦K—.­¯¯g>®££3ô^IXxüøñ”)S<<}ºƒrrr}"™7ÚÚÚ¶oß.///$$´gÏÞÐGww÷¦M› xÿëÂ9€ïß¿ïâ⢪ª*((ˆqqqÉÈÈÀ¨&Aƒ¡)**~üø‘ݫ޾}«®®~ìØ±>ÇKJJìíímllÞ¼yÓ磺ººE‹™››¿{÷®ƒ4MXX˜³©d¨ÈÎÎ600ˆÇ«f‘‘‘&L¸wïÞ…€kGFFjii%''7440ê¸wïÞܹs1ª EÀ`hŽŽŽ·oßfë’—/_ª¨¨DGG3ìéé WPP8~üxoooŸKnݺ¥¢¢²sçή®®Ûljj;v,[e ®½½ý矖‘‘‰‰‰Á·Dff¦²²rÿßrà1<xâĉ999}êøö훤¤$F5¡ mëÖ­ááᬟÿìÙ3eeå>ÃÄ‚‚KKËY³fõ9¿½½=88XSSóŸþ¢Ùòòr ÖËÀNtt4‰Drqq©ªªÂ»zUU•©©©ŸŸ_gg'Þµ€Ñ »~tMMÍ”)Súìììl­„­‰Ð?ž?>•JuwwGŽtwwïÛ·ÏÁÁÁßßÿŸþÑÕÕe>???ßÜÜüýû÷ÿý÷ŸÝ-ór ôÐ|||6mÚtëÖ-$Œq¤¦¦–™™ùùóç¹sçÖ××ã[ ¨>€ŒŒnß¾Ýç`jjêÌ™3±) ÞAöDbå̬¬,77·‹/2öxùò¥••UNNN^^ÞÚµk™_C¢Óé‘‘‘óæÍ Œv½å††> `‰ô×_ÙÙÙÍš5ëØ±cóçϯªªÂ±˜1cÆ$&&º¸¸˜››?{ö ÇJ@ß°cä(((üùçŸEEE$éÓ§O'OžTQQyùò%F£r±òÁhÖÑÑ!))9ìÎÛ·oËËËß¿ùc{{{hh¨¢¢"•JírMM‹‹‹••UII ‹eÄÇÇ/[¶Œ­Ê1USS£®®~åÊ …¢  @¥R[ä‹gâââð-ŒBØåKí¾}ûÖÇÇGGGGTTT^^ÞÃÃãõëׄ.`0,}}ýüüü!NHMMURRzüø1òÇÇëë뻺º8}:11QII)44”­wj###ýüüØ*kÈ Y………óæÍ«¨¨À·¤ÿþûOSS388¸ÿ47°ƒs0ÖŠ+†XÓãêÕ«ŠŠŠÈ<Ͷ¶àà`•ßÕikk ÔÒÒzôè»5„‡‡ÿôÓOì^…µèèèÉ“'755uwwS(YYY …‚oøÕ××ÛÙÙyxx´¶¶âXU°ËXŠŒvCÌÊݺukzzº¥¥å£GŒËÊÊ^¾|ɘ„Å——gllÜØØ˜ŸŸ?cÆ vkàŸIXÌ|||æÌ™ãëë+((œ““sëÖ-;;»ââb¼J’——OKK3fŒMee%^e€Ž!2Ÿãkù!ŠøJII™?~ÿãT*UUUµ°°°¹¹900PUU599¹ÿi4-""BAA!66–ãNž<ÉñåØéêê²³³ CþØÛÛK¥Råååq S©Teeå¡_îØåÈ #`Æ­­­^^^aaa%%%mmm%%%{öìñôôlkkCë—p4àDè'Né+++;ØvgÏžE¶äfEFÆ€[SS“yé~Ø‹uOž>>ùùùoÞ¼133ËÍÍåYyˆeË–Ý»w/888$$„ùí)øg¹²ÿ~~ø ‹ãÇ¿}û¶³³óË—/iiiÆÆÆ{öìaœÀY©A0Ú¼}ûVGG‡F£8qBAAáÌ™3¨4ÛÓÓsâÄ EEEggç>Ï€ƒ‚‚ìììTUU×®]‹Jw<6ô„,f±±±&Lðý.LÕÖÖÚÚÚº¹¹ ¸¦ ÃÂ.G8l·¸¸ëi#%%%ãÇgü`ª§§GJJÊÙÙÙÒÒ²¸¸•6333ŒŒ·cœŸŸ?gÎQQQOOÏÿý•~y)22rˆ YÌjkkÝÝÝõõõ;+óLgg§ŸŸŸ‘‘î["â»niipÊ(Š*++™W»„˜ºy󦔔ԦM›P™¸[UUåéé©¡¡1àÎÁ}üüóÏ?ýôÓ_ý¥««kbbröìÙ¶¶6îkà™€€777_ЊWVVÞºu+ï¿ã‘#G”••³²²xÜ/ :ìr„ÃYÐyyyššš\Ýû\sssVVÖŠ+6lØÀ||„ """ÊÊÊÞÞÞo߾Ũw0Ú´··oÞ¼yóæÍ&&&d2YDD„›Ö:;;ûí7]]Ýׯ_÷ß9¸¿ÆÆF--­~øáÝ»wLJJÒÐÐØ±cGyy97•ðÌÑ£Gkjj~ûí7VNvwwÏÏϯ®®622zôèÖµ1 ŒŠŠòðð8}ú4/û`Pì&vccã­[·´µµ?Žú¯Ì…Í;—y—•E‹eeeµ··WUUýõ×_ŠŠŠ/^¼`¥AÔ‹#IAA™Löððhhhøë¯¿6oÞÌMk÷îÝÓ××wuu-++cýªåË—_¹r…ùHiiipp°‚‚‚££c\\ŽÛ ±hˆ²sóæÍ!¶»ÀNqq±¿¿?.ï("Â.GØ~ iüøñ–––—/_ƨ :^[[«¢¢²wïÞÁÎùûᅵœ†mj°_;BCCѬF‹ˆˆPPPˆŽŽFŽÜ¿Ö¬YœµV\\¼`Á==½[·n±{í`{vttÄÅÅY[[Oš4‰B¡|ùò…³ÚxãÉ“'òòòlm‹ÔØØˆlø˜žžŽ]aý}ýúuÑ¢E³fͪ««ãe¿€Ï1^Íç~¤Ê"þ fdd¨««öiMM””Ô°À ¨¦¦fþüùVVVÌ‹ª~þüyüøñì.6ÙÒÒ*''ÚÙÙÉA1ÃîE˜——çïï?~üx¼–xdÅ… ¦L™ÒÜÜÌÖU·oßž8q¢¿¿?+3¹ÐÒÓÓ|8wª*ãqšƒƒC|||uuuWWWYYÙäååŸ={ÆYñ`tÊÍÍÕÓÓóññbÖÏO?ýôÛo¿ ÝΗ/_#""¸ŸÅñ^„oß¾ ”‘‘ñðð@k½LT ²8Û2¹µµ588XUU599õÂóñãG ‹•+Wëí/À3üÀIIIzzz(Ö‘‘‘áææ&''',,¬¬¬¼lÙ²ììlƧ÷ïß_ºt)ò©ªªªÏÛ·oYiÐéôÞÞ^d¾UllìÐgFGG{zzÑNTT”²²²¿¿?ëcÖ¡566r³ass3•J500011¡R©­­­¨TÅ¥'Ož())q¼žIVV–®®®‡‡Zÿ‡ÕÞÞîããcbbòþý{ÞôŸ쮵¸¸øÔ©Soß¾QM(‚•••³fÍš3g·†=ù¿ÿþ›:uê€!ËZÍž=;??ÅòÊÊʸ_TŽF£Ý»wÏÃÃCNN.00­— 0rêÔ)&d1 Ca•ÄÄDt  F£P(jjj999¼é€ „ÐÅîÅÅÅ)**†††ööö²r~gg§¤¤dŸõŠ?~üèã㣦¦…z…Ïž=311A«5æˆSRRØÑ®uëÖ-Y²„›=z4yòdúúz ÂÍ›7±ø ˆ Ï&4àQ«¹¹ÙÇÇG__ÿùóçl]hhhȸ¤««+""BQQ188£õ"ÒÓÓÐm³££#**ÊØØßˆ‘ YÃ>SZ[[[pp°²²2+‹z¢âÕ«WZZZ,þÒF<ìrdÐ×[þõß6|.;;ÛÌÌLBB"//ÏÄÄ„­k ‘·bÒÓÓŒŒÒÓÓ³³³)ʘ1c°(uØw8 &&æëëûâÅ‹+W®”••éèèøúú"_Š—DDDâââNž-((puumnnƺ;0š À¬$?ë€%ÝÝÝ»víZ¶lÙÑ£G©Tª¤¤$»-Éä›7oº¸¸=z455UKK ‹RMMMãÇǨqäâׯ_Oš4iþüùööö èîä=´ &\¾|ùûï¿/))á¦kkëçÏŸkjj’É丸8´ÊŒœœÜ;w444lmmËÊʰîŒ^¬ùĈÿ‚€YQQ‘¥¥¥««kmm-g-|ýúÕ××WRRòðáüY+ø÷ßß¾};:êêêºzõêÌ™3ÕÔÔöïß_SSÃN'Ožœ6m*÷ð³³³ ÜÜÜxSÿ‰'&L˜ðàÁôøv92üJXƒÝj†[Ѐ¯œ9sfÆŒß}÷]JJŠ¢¢"»—ÓéôK—.éëë···;öÇär[$aq z@"""Ë—/ÏÊʺyófee¥¾¾þªU«²³³yÐõúõë§OŸþý÷ßÓ¹¾m6}úôçÏŸOž<ÙÈÈ(&&•ò†°qãÆØØXOOÏ“'ObÝ8 ÔâÀ+_]cc£§§ç´iÓ8^'¹Ï²Vrrr¡ÙpòäIÞôÅŒñ±©©)^ îêê²µµ=xð Z ¾|ùÒÔÔÔÅÅ…k•––N›6 6Pµ°ËNÖ‚îêêJMMÕÖÖF÷W8pÿþ}2™¬  ——G&“Ù½¼¡¡!((ÈÙÙÙÝÝ=77×ÆÆ†Ä4‹x6îcìØ±þþþ¯^½ OOOŸ8qbPPv;‹ˆˆÄÇÇŸ8q‚› YÌÈdrvvö¬Y³ÌÌÌ"##éXNIÑÖÖ~òäI]]ƒƒÃ ÔÀ¶¡c@°à]]]¡¡¡***œý_‘±¬U```SSóG[¶lùóÏ?Q*sƒíEÈc¼yøñãÇܬ5 üü|sss'''¬±¢Ñh¡¡¡:::¯^½Â´#Ào°ËXˆÒëׯMLLÜÜÜ8[­033“L&ÛÛÛ¸¬Uddäwß}Çu,v/B^âÁ Äÿý·¾¾>Ç+d ¨øc Æ IDAT»»›B¡(((P©T¬×¹r劢¢bRR¦½¾‚gðÈC£Ñ¨Tª¼¼|DD—³²¬ò15²AGGÝ!*òòò|||deeýýýÑ]z“N§ûùù-]ºõ¤,((°°°˜5kÖÿ<_¼x¡¡¡ŠïBc€gð à¶¶¶mmm!!!Öo_ó B XW[[ëêêjaaQTTÄ/kÕÒÒ"))ÉÁE`k/B«©©¡P(êêêfffQQQhMAB&dQ(TZc† …eee) ¦ëX}úôiúôéË—/ç“Ý/¦ð àíÛ·¯\¹²¡¡D"µ··nݺÕÃã•ùÐ<’¤¥¥©©©s÷îÝ›2eŠ««+‹èêê¾~ýšýÙÓÛÛËÙ^„¼ÔgbVö´Ö§OŸÔÔÔû¢«¸¸xÖ¬Y¶¶¶ï޽â}DGGÇêÕ«+++±ëð<XCC£¢¢¢OÇŽ[³f F5¡xdhoo ÔÔÔÌÌÌd÷Ú¢¢¢ èéé±õ×ý²eË®\¹Ân_ìâr/B{óæ Š;ÿû│OÈbèíí¥R©  …û=›‡¡¦¦Æ¼w*yð à1cÆ´´´ÐétqqqÆý–ææfŒjBððêÕ+2™ìááÑÐÐÀÖ…---¡¡¡rrr¡¡¡l]¶k×.¶.á@YY™¦¦&Ö½  yX__Ÿûˆ?nhhˆüõ‚…ÒÒÒÙ³g󯯡¸}8gnß¾­¤¤tþüyìºøÂ3€7nÜxîÜ9:>yòdÆ.1Ÿ>}’““è&AF‹ˆˆPPP¸xñ"»ÆÅÅihhøøøp¶faBBÂÂ… 9¸-èîEÈK½½½Ì;———sÖŽŸŸŸ››v³™){X…ß½{7eÊ”ÀÀ@LGÛ/xð‡ ÃÜœœªªªêëëW®\éããƒQM(‚&®êêjgggkkëÒÒR¶.D–µ233C–µâLqq1ƦXìEÈc%%%ܼ@ÜÑÑaiiŽQyˆ²²2+++ìžëùòÅÑÑÑÙÙ¹±±£.^øâ5¤ööö   ooovï☠”””BCCÙR|ùò%00PQQ1""‚˱Hoo¯´´4Ö™ÆÇÇ/[¶ Ó.x£½½=**ÊÈÈHWW—B¡°õ—¦²CáÐÐPŒV”ìéé ÖÓÓ{óæ í¼ðE0á´¶¶jkk³5~bY+ŽYYY=|ø•¦éçç‡i<ÆÙ ÄÈ„¬’’Lk£Ó鎎ŽFFFŒ§i¨;}ú´’’÷“ÔÿÀ.G8Y Œ<}úÔØØ¸±±ñå˗Ȳ̬ÈÌÌ411¹páÂÝ»w92nÜ8TŠ!“ÉX¯×BÐØ133‹ŽŽ.,,ÔÖÖ^°`­­m||ü°;ÛØØüòË/nnn­­­˜–§¡¡q÷îÝ­[·:;;‡„„tuu¡Þ…ŸŸ_BBÂêÕ«ÃÃÃQoŒ0ƒ° xY(Ùz{{ÃÃÃ]]]÷íÛ=fÌV®úøñ£¯¯ïªU«¶mÛ–‘‘1mÚ4K244|õêŠ ö7ò1a„àààÒÒÒ   ÈÈH ?qÉæÍ›-,,|}}éXn«@"‘|}}ÿûï¿7oÞXXX<þõ.f̘‘““¿nÝ:,2Œƒ0‹s¸WYYéààpïÞ½çÏŸ¯\¹’•KºººŽ9bjjª¢¢òæÍ___Ô«âÁžH#5€"""ÈÃ÷ïßooo744\¾|yzzú`ç?~üÇüñjSVV¾~ýú/¿üâââ‚ÅPXMMíŸþihhppp¨­­E·q0r`tk›OŒø/8ÄÅÅM˜0­µSRR´µµY_ÖŠ3ÒÒÒ˜®÷»|ùr,÷Á'šššˆÍÌÌ{˜7²˜UWW/]ºtÚ´iOŸ>E½qF¡P&Nœ˜——‡zã€g°Ë‘žOÀü¬¹¹yÕªU/^¼`ñƲV¼Ù S]]ӌ瓽yi؈ÿý÷ß &ð`B3ä·ÀàààŽŽ,WTT¼víê-ÞÀ.G`ÀÇ“'OLMM%%%‘‰WÞßÚÚfmmmnnþêÕ+ggg‰õ<¬‘} z@‚‚‚ŽŽŽqqq999–––sçÎMMM¥ÿï‘–ÍÎ;y0!‹™‡‡ÇÿýWRRbff–››‹zãwïÞݾ}{HHFC·q@l;Ÿñ_ˆº»»CCC•••‘¿v‡Åý²VûùçŸ÷íÛ‡]ûü¹!/ öñÚµk1]!k0qqqJJJþþþ¨osT__oggçîîŽÝÒ›#ØåŒ€O•——ÛÙÙegg?{öÌÕÕuØó_¼x1sæÌðððË—/GGG+))ñ H¬'BÂpâââÈœäË—/Nš4) àÕ«WǯªªòööÖÒÒÕÒÒŠ‰‰áA=ùùùíííd2933Å–åååÓÒÒÆŽ;cÆŒÊÊJ[†Q°ó‰ÿ‰%**J^^>""‚•‘ ó²V˜îí:„W¯^Mž<£Æ ±!UWW#;Ϙ1cÕªUÌï:JIIÅÄÄð¬’ÔÔT555Ô¬T*u„ ÿüóºÍì`—##<Ÿ €ùD}}ý’%KLMMYY¥¯»»ûرcŠŠŠ?þø#ZËZq¦««KRR²­­ ‹Æ›šš´!/uvvÆÆÆŠ‹‹÷-Lš4‰—eÔ××{yyéêêfee¡Û2²²É àÀ‚æiiijjj;vì`eOÀÉdGGÇÂÂBÔ6,ccc,^P¡ÓéåååÈ6'`@bbb}XLLŒ÷e$''«ªªnٲݡðÛ·oõôô~üñGØ@‰ÿa—#ð `¨³³3$$Äßß?:::<<\TTtˆ“‘e­|}}·mÛvïÞ=žÕ9ì&B744ÈÊÊbÑòÈ ®®Þ爚šïËX¼xqaaagg§¡¡áýû÷ÑjvòäÉOŸ>-))qqqillD«Y@,À+¯_¿¶²²*))yþü¹½½ýg2/kõúõk,–µâvó°`ÖÐöîÝ+%%Åø£””Ô¯¿þŠK%ãÆ£R©ÿý÷÷ßðíÛ7Tš;vlRR’‰‰ÉôéÓß¼yƒJ›€X €úètzdd¤ƒƒÃ† ®]»6ô8/55U__?===;;›B¡°¸ 4Ï`7†š——•JÕÔÔÑÔÔ¤R©žžž8ÖãììŒü*F&“ïÝ»‡J›BBB %,,löìÙ©©©¨´ ˆ£[Û|bÄA>T[[ëêêjii9ì®EEE...“'OæÍ²Vœùô铜œ-¼½G‰´´4 /_¾ ÕæãÇUUU) Z a—#0hJKK333›:uê£G&Mš4ØiȲV3gΜ5kV~~>o–µâŒ²²²Puu5ê-Ø æÍ›÷úõkmmm2™|ýúuTÚ´¶¶ÎÉɹvíš··w{{;*mþ ÐÑÞÞ´~ýúØØX …"""2àit:=>>~êÔ©eee/_¾ zf?Àh[$`â’””¤P(W®\ùé§Ÿ–/_þåËîÛTUU}øð¡  àœ9sjjj¸oð?`€‚‚‚‚éÓ§WWW# W v¾ËZq £ÇÀÀDgkkûòåKd(œ˜˜È}ƒâââÑÑÑ‹/¶´´|úô)÷ > ¸B§Ó9âàà7~üøOkhh rvvöððÈÍ͵¶¶æqÜÀh"4ð !!A¡Pâããwîܹ|ùòÏŸ?sÙ €€@ppðÉ“']]]/]º„J‘€oAÎÕÔÔ¸¸¸\½z5;;ÛÛÛ{Àszzz"##§NJ"‘ŠŠŠ‚‚‚ öÿ:ƒ¡ÙØØ¼xñ _»vû,XpïÞ½={öÀJ#Áþ*ü#!!ÁØØxúôé>ÔÖÖðœÌÌL33³+W®Ü»wïÈ‘#ãÆãq‘¨˜:ujQQQWWºÍB$ÈP8!!a÷îÝË—/¯¯¯ç²A2™üôéÓÜÜÜE‹}ýú•"¿lûöí[@@À®]»nÞ¼&$$ÔÿdY+ŸmÛ¶eddL›6÷u¢E\\\CC£¨¨Ýf!€Gkkkd(l``ÉekrrrwïÞÕÒÒ²µµ-//G¥BÀW €{rssÍÌÌÚÛÛóòòÌÌÌúŸÀÏËZq ‹»Ð À#¸¸8…B¹wïò÷ãÇÜ´&,,|ìØ±Í›7ÛØØ}jllÜçÓçÏŸ#ËZ]¹r…@ËZqF@@`êÔ©h5<Ú>yòÄÞÞÞÜÜœ›¡°€€@XXØþýûÐZ‰à…_8;;ÛÏÏOKKKTTTEEÅÑÑ1!!aÀ3kjjtuux\á¨ÒÓÓ¶lÙ²#GŽP©TIIIæO‘e­æÏŸOÄe­8†î]hàQHXX888øÁƒgÏžµ³³+))ḩ•+WÞ¾};000,, ½¯ñKš˜˜Ü¹s§¥¥¥àÿÚ»Ó°¦®½mà‰ÈR$ ‚ZA­V 2ƒR„ZÔ#*Ô©V¨§­¶=U8žZ‚Ú§ÐV6ÅžT B+Ž(j-X†(Q¬XTPdž‘AÈû!Ï•'/y'áþ}ðŠkíì}'°øgYûÁƒ;wîÛ·/**jÈbgÆ {öì!$äñèÑ#WW×üüü€€þ.5˜ÖJb²½x̲±±¹qãÆÊ•+ÝÜÜbcc%žèÊÑÑ1///==}íÚµ¸’ª’Óm¥WZZJ£Ñ†4îß¿ݺu‘oШÌ/P9%%%ÇÅÅ éºrå N_°`ÁŸþIH6b]¿~}Þ¼y²Z[llìŽ;dµ6PE¥¥¥ÞÞÞ=’x%===ëׯwpp¨¨¨a6à'¿:¢¼»/šššC¦XºwïÞáÇãã㉊¤Þššš‚‚‚˜Læõë×·oßΟZ«ììl•žÖJbt:½¸¸XVób¬­­Ùlöúõë===ccc$X‰ŽŽNRRÒ† ÜÝÝ däJ p[[[nnîêÕ«·nÝÊkä~ÐKLLÔÓÓ#0›ºÊÊÊrpp˜6mÚ7fΜÉkçMkeeeõèÑ#õ˜ÖJ2zzzÆÆÆeee2Y 0H¤qãÆ………ݺuëòåËÞÞÞ%%%’­gûöí,ëí·ßNNN–mB/9íYK†?ØÂ… _½zÅëúàƒöìÙÿ¤ˆ+”}JõÒÓÓ1mÚ46›=¤ëÂ… VVVÏž=# ™òY¶lYjjªLV|âÄ ™¬ ÔÀàà ‹Åš8qbLL ÿß=±üùçŸVVVÛ¶mm¼1N~uD¹ö€¹™êëëSRRŠ‹‹¿úê+nûùóç‹‹‹wíÚEl<õóðáC77·²²²ÂÂB___^û“'OvìØñâE Â"*^=`àG&“ÃÂÂòóó333===ÿúë/ Vbkk{ûöí¶µµÉ<$Èžœ »ôrrrÌÌ̸­­­ËËËù{EL>Ò«ŽŠŠ’y`ÕÂýÄmjjÊb±øÛ;;;£¢¢LMMcbb^¾|IT<åtòäÉ+VÈdUNNN2Y¨Þ®pTTT__Ÿkèïïß¶mÛo¼QRR"óxêMð{7ò.”Ê[€ÛÛÛµµµ¹%þ¡ÌŸ0T__0oÞ¼'OžðO:enn¾nݺºº:ã)­¿þúkúôé2Y•••ÿ›À¯¼¼|áÂ…ööö………’­ÅbMš4)++K¶ÁƦ±X€322ìííGê}Xv‰ÔDzzúÔ©S#""ø?_ß¹sÇÃÃÃÉÉéæÍ›fSr¯^½¢R©Ò¯ÊÀÀ ©©Iúõ€;uꔉ‰IDD„dÇ¢®]»6eÊ”˜˜™kÔ¿/Z´(--­¾¾¾¯¯¯ªª*!!áõ×_ÿý÷ßGZXÝÝÝÛ¶m³°°¸ví¯±¹¹yÛ¶m&&&qqq¸vcTsçÎÍËË“r%ãÇ—øZ;jjjÞyç:þßÿþW‚§—••ÙÚÚ†……át’4äWG”å"¬ÈÈÈäääÙ³gëêê:;;_ºt)55Õßߟè\êãÎ;µµµwïÞõôô$íi­$F§Ó¥Ÿ«½½J¥ùš;€ É“'§¥¥}ñÅ‘‘‘/_¾ëéVVVyyy ~~~ r ’“SaWjÿE1887qâÄ_ý•×8Ƨµ’Ø>þøc)WòôéS ™ä1¢¶¶vùòå¶¶¶\»788enn~çÎydS{ò«#j^ŸP€+**|}}çÏŸ_YYÉm©ªªZ·n™™YRR±ÙTQVV–”+áE[N:5iÒ¤ˆˆˆÞÞ^qŸ{âÄ “³gÏÊ#˜z“_Á!GuvæÌgggŸÌÌÌ©S§òOkõøñã±<­•Äìí틊Š8RÜV„/ƒ¤V­ZuïÞ½ÒÒÒ¹sçŠ;ñäêÕ«/_¾üé§ŸFFFJù ²‚¬ž:::ÂÃÃwïÞýûï¿3 ‹/¾ùæ›YYYùùù CGG‡èŒ*ÉØØ˜B¡TUUI³`˜©©é™3g¢¢¢–-[ÞÕÕ%úsçÌ™“——wåÊ•5kÖtwwË/$ˆX åçç;::öôôü÷¿ÿutt|üø1wZ«C‡aZ+éÙÙÙI9 0HiÕªUÜÙ²ìíí¯^½*ú'Ož|õêU]]]ŠŠ ¹‘ «•W¯^ÅÆÆ®X±bÿþýÜiÙ †·····÷ýû÷/^Lt@u ý„”(À =‹÷î»ï†‡‡wvvŠøDmmíÄÄÄ7º»»ßºuK®!A8`õQ^^>þüìììÛ·osï‹2cÆŒ§OŸEDDhiiPMØÙÙIùM$`•ÀÀ@îo£½½=›Íý‰Û·o?räHPPÐÑ£GåFƒ¬&NŸ>íææ˜‘‘QWWçååÅd2SSS“““MMM‰N§V¤ÿ*0 0ÈFc±XL&sÆ bí /Y²äÚµk±±±Û·o—ìnÄ %`•×ÖÖöî»ïFGGgddlÙ²åÓO?]¶lÙúõëóóóÝÜ܈N§†Þ|óͲ²2q§Dà‡ 2·téRîçB:ž••%â³f̘qãÆ‡¼xñBža(ÀªÍfÓét*•zóæÍüü|î´VÅÅÅaaa˜ÖJN´µµ­­­%»a 0ȃ¾¾>‹Å:tèÐæÍ›ÃÃÃ;::Dy–¡¡aFFÆœ9s\\\JJJäøáo´ªzõêƒÁ ýñÇ×®]ëééyòäɬ¬¬ƒêëëNÍIy!tKK 0ÈÉ’%K¸»Â³fͺxñ¢(OÑÐЈ‰‰Ù¹s§¯¯¯è{Ï =`•TRR2oÞ¼¢¢¢ôôô'N¬_¿þóÏ?ÏÎÎæîƒ¼Iyö€A®&L˜Àb±?þøãààà––Qžõþû罹¦nذ!66VÞ Xõ$''{yy­]»Ö××wÑ¢E˜ÖJñ¤ü&Rkk«¡¡¡ óZ´hÑÇ­¬¬ètzZZš(OñððÈÏÏ?}úô–-[úúúäÈê='™¬V/°±±ñý÷߯©©Y³fÍ¡C‡fÏžÍd21±†âUVVΛ7¯¦¦F‚çjkk÷ööânH ׯ_ï½÷æÌ™óã?º|WW×úõëëêêΞ=‹ïPäYG°¬2233ûûûi4ÚáÇ1­ÌÌÌúúú$»¿îE æééYTTÄÝ>{öì¨ËS©Ô3gÎ,[¶ÌÅÅåÎ; H8f¡«€ÞÞÞÈÈÈéÓ§¾õÖ[˜ÖŠp¶¶¶’Æ `P< …súôé]»v755 _žL&GDDìß¿éÒ¥©©©Š 9¡+»û÷ï;99}óÍ7ÝÝÝÓ§OÿóÏ?1­•2ø:¬/^Ðh4™ç•»»{aaáÔ©Sétº(eõoû[FFÆgŸ}¶gÏu:—§""‚Íf§¤¤øúú–––Ž´dHHHZZÚÖ­[q%É /44ôÙ³g}}}Ïž= %:ˆjܸq666ÅÅÅb= T‚Í7V®\éææ;Ò®°››[~~þ™3gBBBzzzRÕ¡HN‚ÓÀ¸!¨ŠñãÇoß¾ýÖ­[éééÞÞÞ?v±×_ýÚµk~~~uuu ©ÒP€$'î…Ѓƒƒøn7¨kk뜜œõë×{zzÆÆÆ;ùŒŽŽNrrò;ï¼ãâârûömŇTQ(À’w÷"U4nܸ°°°[·n]¾|ÙËË«¤¤Dpî ”¸ójýú믊©ŠP€$ǽZôÅà0¨.++«ììì7z{{´+••õå—_FFFŽtÚxP€$ghh¨¯¯ÿüùs—G•F&“à233===ÿúë/Áeìììnß¾]PP°lÙ²öövŇT!(ÀRë(4 0¨ ‹ÌÌÌM›6ùøø0 Á9)ŒŒþøãKKKOOÏgÏžR% HÆ î®ðíÛ·oÞ¼éìì|÷îÝ! Œ?žÉd~ôÑGîîîl6›Ê@*b] êdÚ´iüñÇ¿þõ¯%K–DFFöõõ Y ,,ìäÉ“¡¡¡L&“„J@*؆1nÕªU÷îÝ+))qvv¾sçÎ^ooïk×®ýç?ÿÁ ”¡HeÖ¬Y"΄ jiòäÉiii_|ñE@@@ddäË—/ù{­­­oݺU__ïççרØHTH%„ •ñãÇϘ1ãáÇ¢,Œ jŒ»+üøñc''§!Óqèéé;wnÁ‚nnnâÎÞªÆP€¤%úQè––`Pc“&M:{öì—_~¹lÙ²!»Âd2™Á`ìÛ·oÁ‚çÏŸ'0¤ò@–è×aaÆ‚U«V•••9::æççów­Y³&##cÛ¶m CôlÔ 0€´DßF†1ÂÄÄäôéÓ ãwÞ ïêêâu988äå奧§ãJ(ÀÒ¢ÓéEEE¢,‰[!+‡¢µWIDATÁ˜²jÕ*îlYöööW®\áµO™2%77WKKËÃ㢢‚°|DCÖäÉ“Éd²(7bÃ0Œ5,+..nݺuáááÜvmmí¤¤¤ 6xxx’((À2À½+ƒðep/B³¹×IØÛÛçääðÚ·oßþÓO?½ýöÛÉÉÉÄ¥# 0€ ˆr÷"„±ŒF£±X,&“¹qãÆðððŽŽn»¿¿nnîÿüÏÿlß¾}¬Ý@ @D¹ÇŸ–.]ÊÛÎÊÊâ6Μ9óæÍ›ÅÅÅmmm„T(`e€D"éëë³X¬üqóæÍáááÜ[fddÐét—GQAP€dÀÆÆæñãǧºEàY¼x1wWøÍ7ß¼pá‰D?~|LLÌ?þñ__ßììl¢* 0€ P(333áŸÜQ€øM˜0Åb?~üÿøGpppKK ‰D ;}úôúõëccc‰(wÊR€oݺõþûï[ZZjiiM™2å­·ÞJMM±@Ðétá§Q€y{{YYYÙÙÙ¥¥¥‘H$OOÏ[·n:u*<<\ð‡êDY ð¶mÛ222:;;%%¥¸¸ø«¯¾½w$äá xƒ<¿·B‹««kaaáܹs.^¼xåÊ]]]çÏŸËcs cØz!mq)ï5Jl6{Æ #Ý©Jx/.ÂE:tèPQQ‹Å¶×ÚÚú?þ°¶¶Vp*UWTT´iÓ¦)S¦°X¬3gÎ|ýõ×§NòööVÌÖÇâEXNNNB®>Þ @á×aá4€dìííóóó½¼¼)ÊÑ£Gƒƒƒ=Jt.i':ÀˆnÞ¼9kÖ,Ézagg÷àÁƒÁÁÁqã†~´Å½¤¡©©áïï¿iÓ&SSÓ”””?ü0///>>~üxå-dÂ)Ëðâŋϟ?ßÐÐÐßß_]]˜˜¸yóæ¯¿þZ”^%¡¯¯oddôôéSÁ.Ü‹@zt:=??ßÇÇgÍš57n|úôi``à‹/ˆÎ%!e)À‘‘‘ÉÉɳgÏÖÕÕuvv¾téRjjª¿¿¿(½Êc¤£Ð8þ ãLjˆÈÉÉ9sæ ‡Ã144tqq)))!:—$Ôü%\„ öÅ_hjj ΓZXXøþûï’ @ý¼zõjÿþýû÷ï755­©©IJJ ”džÆâEXªÈÎÎn¤=`¦ø<ꊻ+Ìf³uuu»»»—/_~ðàA¢C‰@–Fú*0¾ 666yyyÔÖÖþä“O¶lÙ¢B7PB¥7Þx£¦¦¦³³sH;ÎÈɸqãÂÂÂŠŠŠ|||Ž92þüúúz¢C‰@–444fΜY\\<¤wb+kkk6›Íb±îß¿ïää´oß>î-ä---;Ftºá¡ÈذBc@ÞÈd2wWx„ »wï.//ïïï///OII!:Ý0P€dlØÓÀ/^¼ÀEX `eeõòåKþ–®®.Á/&(`öBhì(LUUÕ–ÊÊJB’‡ cööö‚{À---FFF„äkÌÌ̆´L:•$¡ÈØÄ‰µ´´†|Ç0€ÂDGGS©TÞ©TêÞ½{ Ì3`Ù¼ @aBBBX,–………¦¦¦……‹ÅZ»v-Ñ¡†¡æ35b*J ÄçŸnllÉk144,--Å\*SQ¨;;;þÓÀ¸!B½!ßD½@ 0€ìÍž=»´´”÷eDœA(À²§­­meeÅ»G) 0B þ ¡Q€@ 0€\ð_‡… ‚P€ä‚BJÜ ¡Èÿ…ÐØA(ÀrannÞÓÓÓØØHB€á È ï40 0BޅЭ­­˜„†@ì€(Àò»¡È Nÿ믿P€@ 0€¼P©ÔI“&•––¢€ `9¢ÓéEEE¸!B#:~íÚ5Ü‹¡È‘ÝÕ«Wqü¡È‘]qq1F#:(`9*((àp8EEE–––ÇŽ#:(2‡Ã!:ƒ‘ÉjþA™?~|Ë–-]]]ÜÿR©ÔŸ~ú)$$„ØT ùÕ5¯O(À@ éÓ§—•• iyòä Qy@(ÀBéèè¼|ù’¿E[[»··—¨< ùÕœ33³!-S§N%$ (!`y‰ŽŽ¦R©¼ÿR©Ô½{÷˜” 0€¼„„„°X, MMM ‹µvíZ¢C€²PóS¤8 ÒÀ9`µ‚ @` €(À@ 0P€•ƒÁ :‚xT.0I3«\`’ fV¹À$̬råJY&ŠºuëÖ‘#G²³³«««gÏž½uëÖ•+Wr{sssãããsrrúúúÞ|óÍÈÈÈ   QV«Š3a©\f• LRÁÌ*˜¤‚™U.0I3«\`ÒX˜ kÛ¶m<عsç¾}û¢¢¢¸½>>>iiiµµµL&“Á`9r„ØÀÒPÞ#eeeNNN­­­$iÇŽß|ó ™LævݿŊ¥¥¥£®Ÿ¶@å“T0³Ê&©`f• LRÁÌ*˜$ÏÌÊû^TTT8::655 vuww ¹Õù°ðÃV• LRÁÌ*˜¤‚™U.0I3«\`ÒX8ͯ­­-77wõêÕ[·nvôôt[[[§!åú0Â;ÈL"‘.\˜žž®¡¡1d™––ww÷Ç{yy‰²B¥z¢P¹Ì*˜¤‚™U.0I3«\`’ fV¹À$¹fæ(Ÿúúú”””)S¦DGG骫«óööÎÉÉqUryË`,‘u•û_Êûa„Ífoذ¡¢¢‚×R]]°ÿ~???ƒHOy pGGÇĉ{{{¹ÿ­©©Y²dI\\Ü‚ ˆ  =e¼‹ëæÍ›³fÍâ>nhhX²dILL ª/¨e)À‹/>þ|CCCuuubbâæÍ›¿þúknï’%KvíÚµtéRbCÈŠ²‚f³Ù?üðÃÕ«WÛÚÚ&Nœèîî¾cÇŽyóæq{ù¯Žæimm¥ÑhŠ ÊR€Æe9 0¦ €(À@ 0T¾þýï§ÑhÃ~WXx/O]]ÝŒ3„/#CgæÞ¥qâĉúúú®®®iii É;JªQ{+**V®\9a„ &¬\¹²²²Rþy%400?wî\¦¯¯ïèè?00 Ì™I$Òàà “É´±±ÑÑѱµµ=yò¤’æQªÑ'$3Q£Oš7™¡'(33ÓÝÝB¡®[·®¾¾ž×EàpBH`’LÇšÊàuëÖ™˜˜Ü¸qC‚^.‡³aÆ={öÈ' Ø©„ôúøø466¦¥¥ÕÖÖ2™LƒqäÈ9‡=•ðÞÎÎÎ 8::>þüùó玎Ž~~~ÝÝÝrÎ+y¤O>ùä—_~ù÷¿ÿ]YYYYYùïÿûèÑ£Ÿ|ò‰¼K“™D"ýýï¿ÿþ… ÚÛÛ“’’’’’”<0—R>ᙉ}&jè ‘½fÍš-[¶TTTpà@hh(KhhèÁƒeŸLF‘ôôôž={ÆßûìÙ3===yfJÜÌ999 7‰îJ5ú„g&|ô‰˜ð¡Çåí혘ÈßòóÏ?ÇÇÇs+ÃpBx`ÙŽµ±^€ïÞ½;kÖ¬öööQ× hàêêêÒÒÒ’i¢Ñ‰›yþüù—/_æo¹|ùò‚ dŸLF‘&Nœ(øÁÄÄDž‡7óš5k222n8’ýÜ•mô‰õ»ªøÑ'n`‡…Billäoihhxë­·¸•a¸ !<°lÇÚ˜.ÀÝÝÝvvvyyy¢¬A¤,ÀgΜqtt”i¢Ñ‰›ÙÄĤ®®Ž¿¥¶¶vÒ¤I²O&£H cÞ¼y¹¹¹ííííííW¯^uvvÞ»w¯‚âr8ñ3O›6íÌ™3ÞÞÞ åµ×^óóó»~ýº‚²r8‰~îJ8úÄú]Uüè70áCkØz¦TÃmáe;ÖÆtþàƒöìÙ#âäAšÜÜÜÑW }â&|èqyyy%%%ñ·$$$(ÕpBx`ÙŽµ±[€ÓÒÒ¼¼¼^½z%âäAâ\WWçíí““#‡P£Pûknn~îܹ––––––sçΙ››÷Ýw ŠËáp$úS+xÖÊ××Wžÿ?âVÎÑ'âï*Q£OE pvv¶±±qRRRccccccbb¢‘‘‘ŽŽ·W†›Xe;ÖT© ¿vLÜÂ`mm]^^.ú$#ÛÌ\UUUöööYYY²‰8Üve˜YÇÁÄ ,<’……›Íæïe³Ù–––2 Ì‘uæI“& 4ÓÕÕUÚÀÊ9úDù]•ëè“m`BAû®\¹2þ|*•J¡P<<úÄ LøÐã (,,ìëë+++ ûàƒx]Ê0Ü ,Û±¦òXø§ ±>s(ìO€Ä™‡íjmmUæÌçÙ³gAAAzzzzzzAAACNþXx¤S§N¹ººÒh46oÞ¼“'O* °”™kjjBCC ´µµÝÜÜäw‰€¬ ®JþyÿwC’eö‰ }ҼɄ =A'Nœ˜={¶––Ö¬Y³âââø{‰nB,ñFæ(ñWu5vÏ€(À@ 0P€€ @` €(À@ 0P€€ @` ƒú#“ɪµ ÉÖVYYI¡P6mÚ$Ã$cÓÆ)JUUÑA@Í‘9Ñä‹L–ûï9o2Ù–d+yï½÷òóóoß¾­««+e€1EðÝîîîvrròðð8|ø0Q©`,@õ§€,ÛmI°’ÆÆÆ©S§^¼xqÑ¢ERn}¬öÝNOO_¾|yMM¡¡!!©`,À!h[.^¼èêêJ¥R©Tª««ë¥K—x]d2y```ß¾}ÚÚÚo¼ñÆ?üÀÿÜ¢¢¢E‹Q©Tccã>ø »»›w¬˜û€÷/×ü<ð÷÷ç®vëÖ­ÝÝÝüK^½zÕÅÅEGGÇÂÂâçŸéu¥¤¤¸¸¸ˆU}ÉdrwwwXX˜¡¡¡±±qDD‡ÃéééÙºu«‘‘Fûøã_½z%J’êêê>úHOOÏÒÒrçν½½¼MyK;::vîÜ9cÆ ]]]}}ý… þöÛoCBÍœ9“¿¥¹¹ÙÜܼ¿¿Ÿ¿qæÌ™<r¤m û##‘HþþþÇýý@Ýñ~Ïóòò ;ÖÐÐP__ÿË/¿ð Ûµkד'O:;;¯\¹beeuâÄ nï£GLLL~øá‡ººººº:&“Â[³àÁ­ÛXZZjjjW[[[[[{àÀµk×òzKJJŒSRRÚÚÚòóó---Ùlö°¯ñwÞ‰÷mÙ¸qcbbbKKË“'O\]]¿ýöÛ7&$$477s[<(J’iÓ¦%$$ttt<{ö,88822R”·tùòåŸ~úiyyy___ss3w÷]0çܹs¯\¹Âûï÷ßÿÚk¯¥¦¦òZØl¶›››ðB¶5ÒŸÁï¿ÿ~ÅŠb½¥bAõÇû 4¤J1™LÞY‰´{÷nþÞK—.Í›7û8$$ä믿æïÝ»w¯ôøÝwßݳg×—_~Éë]·nÝwß}ÇëJKK[ºté°¯ÑÜÜüáÇÃv„D"ñê+‡Ã¹qã•Jåo¹~ýúœ9sÄMÒÒÒbeeÅÛ„·ôµ×^kkk5ç¡C‡BCCyÿuttLJJò÷÷組„„$&& )d[#àââb ‹QãH Ôï/¬¹¹yEE×óçϧM›Æ[¬¬¬Œ¿·¥¥ÅÀÀ€ûØÔÔôéÓ§ü½eeeÒ`SSÓ!---åõZ[[?~ü˜?Ï믿>ìk¤P(íííÃv„D"UVVòþÛÖÖ&Ø2a„Q“ôôôDGGÏœ9“B¡p«ihhð6!ä-uqqÙ²eKUU•𜭭­ÍÍÍçþýût:ÃáÌ™3‡û£lnn655íîîRȶF*ÀmmmºººÂ³HÔï/¬¶¶voo/Woo¯¶¶6o±‘ž«¡¡ÑÓÓÃßÅ=Y;d1Q ðÀÀ€ˆ«ÕÒÒrÎhܸqþFÁ<ê™&‰4888j˨I¶oß¾xñâÂÂÂÎÎN‡ÓÓÓÃÿnyKŸ>}¤££3kÖ¬7¦¥¥ Ù:Ohhh\\‡Ãùì³Ï¾ýö[‡óÍ7ß0 ‡÷ÑGRȶP€((À þ„ìWTTðï y®Ä{À4­µµ•¿…Wø°±±qMMÍh¯Ãáp¦M›&Á!hÑ[„$™2e ÿ~sqq±wC°±··÷Þ½{,ËÙÙù½÷Þv999666ýýý“'O®®®æp8UUU¶¶¶÷ïß5¤má4WAÃâèèxñâEþ– .8::Šò\??¿S§Nñ· {‰¬ŽŽN__Ëo¼‘——Çß’À{¼pá””þÞ_ý•÷xþüùçÏŸ%žƒƒ›ÍeIÉIÒÓÓ£££Ãûobb¢XkÖÖÖ¶·· KOO?yòä°ËøúúöôôìÞ½ÛÆÆfÊ”)$éõ×_·¶¶f0¯½öšÝ¨!…lKðGÆ•íàà ÖkÑŸäŽ÷{~ãÆ îUÐ ÇŽ344ÌÏϲذÏ}ôè‘©©é¡C‡êëëëëëãããCCCI»z666çÎ{õêo ÇŸ>}znnnWWWiiidddXXoù'Ož˜šš~ÿý÷Ü‹«<Èqõƒ&Ož|ôèѦ¦¦ÎÎά¬¬‘.}b2™ÞÞÞ’½-¢´IZ[[[__ÿí·ßþío|[†]§——×/¿üRYYÙßß_[[»k×.þK«†Ø»w/™LNJJâµ=z”L&'$$ðZ„„²-Á—»»;“É)€ôP€Aýñ—sçÎ9;;S( …âìì|þüùa¶ñîÝ»o½õ…B144 khhà?Ì}žž>cÆ þ'2™Ì3fhjjš™™EGGs¿\Ëëå~½XWW×ÐÐpË–-]]]C6êïﯧ§G¡PæÏŸŸ••5ìkljjÒÒÒ©wÔ·E”–‘’477‡††Òh´M›6uttˆX€ÙlöÊ•+ŒŒttt¦OŸñâÅ‹‘ÒVVVêééuttðZ:::&OžÜÕÕÅ¿ØH!…lkØYFF†¶¶vSSÓHy¤‡™°$”™™¹cÇŽ{÷îämÞ¼™;%ïjdLww·³³³«««™O¤‡sÀ¢ ºvíZ{{{SSÓÙ³g7oÞüé§Ÿêÿ0Œ²²²?üè *ïÃ?|úô)ƒÁ :¨9ìˆ*55õÀþù'÷âÛ?þøÝwß%:¨*`à4P€€ @€ÿkÕ±¶?¯IEND®B`‚gsl/doc/images/min-interval.png0000644000175000017500000003301213536674414015056 0ustar eddedd‰PNG  IHDR€@£¯Z]bKGDÿÿÿ ½§“ IDATxœíÝy}šçŸÿž,"Òzå7nܳgOËÈ8;;ÛÖÖ6//O¥ÜJmmmÿþýø@`‘< ‹Ífkjj @ ±pEE…¯¯ïÔ©Sù@pqø¦ƒ•O›6-..®‹«êÑ—K>>)))çÎ#èáØ±cÿüóÏž={H’0ƒÁÈÉÉ155½sçΘ1c¨I4õèÑ#‹Å}ËÉ/Á¸sšššÛ·o···¯««#WMM½½ý¨¹åä—ϸ٢E‹úöíëããÃïH@SÎÎÎâââ§NêÊ›1îª'NÄÆÆ†„„‚Èßß?##ãСC¤ƒÝ˜Á`¤§§[YY¥¤¤Œ1‚¯©€^ž>}:mÚ´¸¸8uuõ.~#à¯0qâÄÍ›7/X°àãǤ³€ ¨­­7oÞ®]»ºÞ¾|%„#`ƒÁápììì† røðaþ¥quumhhþªOñoÜ‹+%NDDäôéÓ:::S§N?>é8@XpppJJJZZé ÿG8GÀͲ³³ÍÌ̺r™±æE$$$|Ãä3Ž‹ñãÇ{yyáÊ`€î¬ùªß}ûö È¡ßÂ<n¶xñb))©ãÇó6ÐÂW]õÛFÀßîøñã·o߯m¢º¡“'O>|øP®úmKøGÀ #;;{úôé·o߯m¢ºÌÌL ‹¤¤$55µo^ FÀßeüøñ»ví²µµ­®®&¨PQQ1þü£G~OûòU·7[¹reIIÉ•+WDDDx’ SSSÓ¬Y³444öîÝû«Â˜Ž=úöíÛ}ûö‘üõûï¿×××ïÚµ‹tŽç8Ú%**¢«««¥¥ennN:ðÅõë×ýýýÝ",,ÌÃÃ#55uàÀ|Ý|¿¢¢"==½“'OZYYñuCB2­¡¡‘••Ž$;;[]]Ê _bggçèèhccƒ²\}}½­­íÚµkùݾ|EiÏš5+00{I``àœ9s¨ÌÐíÛ·÷ïßÿçŸ&:²víZ%%¥M›6‘ò](‚®®®ÖÒÒZ¶lÙªU« ƱcDz²²:¾§` º%áäÉ“ÝÝÝW¬XAÁæàk8pàܹsIII<9ôÛ):MAs¸nu[ZZ:...--mذaÆ {ðàAll,5{°‹šOÈòôô¼sçé,ÐZLLÌž={xuâYÝña ºuë–««ë½{÷”””(Û(tìÅ‹ÁÁÁÆÆÆ”m”N#`!0}útwww[[Ûºº:ÒY€Á`0ª««gÏžíééIeûòFÀ_´páB‡DÇ뻄ISS“Í Aƒ¨Œ,FÀøùù=þü?þ  »ûí·ß***¼½½Iá¥^¤.qqñˆˆ]]]555{{{Òqº©sçÎ]¼xñþýûbbb¤³ð¦ ;‘™™innÎf³uttˆèÎÒÓÓ­¬¬bbbÆG$¦ ‰a2™'Nœ°³³+))! {)**²±±9}ú4©öå+pçæÍ›çììlkkÛÐÐ@: @wQWW7wî\ww÷Ù³g“Θ‚î‡coo/!!qöìY‚1º ‡cgg'%%EüY±˜‚&LDDäìÙ³?ÆIÑؼysii)õQ gAw•„„Ddd¤¾¾¾ŠŠŠ““é8BëÌ™3.\¸wï^ïÞ½Igá#LAdzX¬Ë—/Ož<™t!tç·„„„Ñ£G“ÎÂ`` Zp¨««Ÿ9sÆÖÖ6//taóäÉ;;»   i_¾Bµ3flß¾}Μ9ïÞ½#@x”——Ï™3gïÞ½¦¦¦¤³PAP¦v;&8SÐ-Ö¯_Ÿ••-dwf ¢¾¾žÅb±X¬mÛ¶‘Îòÿ𯀮ØÚ%€ÜØØhcc#//úôiÒYèÃá8::Šˆˆ Úóop XàôìÙ3444''gçΤ³ÐÛ¯¿þZXX híËW¸ éÛIHH\¹rÅÀÀ`èС‹/&€–üüüÂÃÃSRRÄÅÅIg¡ ø» <øÆ&&&ŠŠŠ,‹tš‰ŠŠÚ²eËíÛ·åääHg¡šÀ[m—ævûöm;;»¸¸8MMMÒYh#''ÇÌÌìòåˤ³|Ž 4##£Ã‡[[[ã‰I]TTT4sæÌrûò ˜7/^lmm][[K: € «ªª²´´twwïÎwöè©Ý>ÝŒÃḹ¹•——_¾|¹W/\hßÇ­¬¬ÔÕÕ9B:Kçp0=r666Λ7ONNÎ××—tAÄáp\\\ªªª.]ºÔ³gOÒq:‡cÀôгgÏàààÜÜ\///ÒYц ^¾|J‹öå+Ì”ò˜„„ĵkצL™2pàÀµk×’Ž @öíÛ˜˜ØÝ.ùm ˜÷Èf³§Nª¨¨hkkK:€@ =räHrrrÿþýIgô8¶J—cÀÜ222,--›o•E: a111‹/ŽUWW'åëà0ýhkkŸ?ÞÖÖ6''‡t’uêÔ]»v‘Îò]„äNX222ÙÙÙ***-K^¼x1~üøªªªŽ?(ÜÔÔ´pᆆ†°°0\~ÂíãÇsæÌQRRòõõ!ç»ÉYÐíþúôéCeRzôèqöìÙÚÚÚåË—ÓýÇ@/^,!!qòäIº·/_QZÀkÖ¬Y°`Abbbuuuuuõ;wìíí×­[Ge‚ÄÄÄ._¾üìÙ3wwwÒYø‚Ãá¬Zµª¼¼<88³}£tj—ÃáØÚÚFDD´,™;wîåË—;ý‰$SÐ-ªªªLMMgΜ¹uëVÒYxlãÆIII·nÝ’’’"…7„d zïÞ½W®\©¨¨¨¨¨¸råJFFƺòY‘öÐñ™222QQQááá{÷î%€—¶nÝú×_ݸqƒŽíëååÕnÑðo‹”Ž,‡`llܲ$!!ÁÍÍíùóçP˜FÀÍ §M›æáá±bÅ ÒY¾QPPЖ-[ ‡ 2mÚ´”””;wîÙ=„ä,h11±ŠŠ î_F>|0`@CCCǾf0yyy&&&ûöíspp à«…„„,_¾¼¦¦¦ùŸ"""‡¾Óz„d zèСéééÜKRSS•••©Ì 8TUUÙlöúõë¯\¹B: ÀWóôôli_ƒÁápŽ9B0íPZÀëׯwqq‰ŒŒ|÷î]eeeDD„‹‹ËO?ýDe¢©©µzõêk×®‘Îðu^¿~ÝjIAA‘$4Eé½ ×®]«  ðÇ6›½dÉ’«W¯v‡öå+°`166¾|ù²ƒƒC\\é,­EGG»ºº^»vMOOtÚC œ)S¦\ºtÉÑÑ %::ÚÅÅåêÕ«h_ž@ "t0´/Ï¡€:GsûFDD }y,¸šÏÉZ°`:ºy󦳳óÕ«WõõõIg*(`Ö|NÖ‚ "##Ig€îèúõënnn˜yæ° ›2eÊÍ›7W¬XA: t/aaaK—.ŒŒÔ××/((èÓ§««kóK?(wÉ’%}úôi{³hàF\t“qt ##cÖ¬YGµµµ%º…ÐÐПþ™Íf?žÁ`¸¹¹Ý¿?--MBB‚ÑÙ×rmm­ŽŽŽ¡¡¡¯¯/u‰ùCHžüÍPÀ ãáÇ–––{÷î]´hé, ä‚‚‚<<<¢¢¢455 FYY™’’Rdd¤¹¹yó:ýZf³Ù666EEE²²²T$æÜ &L¸uë–‡‡Ç¹sçHgavâĉß~û->>¾¹} Fpp°®®nKû6«­­]¹råÀ%%%---sss¹_µ´´d2™!!!Ôå¦0hjjÆÆÆnÞ¼ùĉ¤³€pÚ·oßÞ½{ÔÔÔZÆÇÇ·}вeËÔÕÕsrrž={faaÁb±ž?Îý'''\ÄÑ0ÍŒ3&11qÿþýÛ¶m#„ÍîÝ»ýüünß¾=|øpîå™™™&&&­Þ%¨“——7uêT}}ý€€€NoµÔC ?///##£¤¤$Òq€ wïÞ:uê† >,""B:´ƒênjjòööÖÐÐ×ÔÔÄ¥2”Y¶lÙÙ³gçÍ›J: ð×Å‹çΰbÅ ÒYà‹zQ¼½Õ«W766^»vMYYùÑ£Gžžžgè¶ÌÍÍ£¢¢æÌ™SXXøóÏ?“޼ÇápvìØ ®®N:t„Ò³‹ããã8ùµÄYÐEí>RRR† ²wï^ÒAà«555yyy :4##ƒtÚûý÷ß).JJOn(`è„´´tHHÈòåË /^¼H:@wqöìYccãM›6ùûûã9B‰S»˜‚™™™úúú˜Žૺºº_~ù寿þºxñ"΂$SÐ@“ÉLOOÿüù3¦£øçÉ“'zzz•••<@û 70|iiéàààæéèÐÐPƒ4|øp11±áÇ‘@oÓ¦MûùçŸ%%%IÇþ¢ÇÔ.¦ ÍÇåååÓÓÓ[ž¥!))yêÔ)'''²Ù訲²ò‡~xòäIHHˆºº:é8ðp#zäìVêêêüþý{î…ªªªÿþû/©H4•’’²xñb‹uðàAœ`!hPÀôÈÙ݈‹‹744p/éÝ»w}}=©<´óùóç;vœ:uÊ××wæÌ™¤ã@;øW@½ø±Rè&”••[¥¤¤D* í<}útñâÅòòò>”——'¨†“°àÛmݺ•û<‘®>>rrr¤ãPRRÒ<ðõ÷÷×ÕÕ%¾FÀ@K“'OÎÌÌ1b„––V`` é8T ÓÒÒRUUMOOGûB+ôYbLw÷îÝsss=z´··7®†î ??Íš5EEEþþþÚÚÚ¤ãÀ·ÃèM__?++K___KKk÷îݤðËçÏŸ>¬§§§««›ššŠö…/AÃW(((èÓ§««k§ï\²dIŸ>}^¿~ݲDTTÔÃÃ#55566VGG'55•ŸIÈHOO××׿zõjRR’———˜˜éD ¸è1µ‹)háæævÿþý´´´Nï_[[«££chhèëëÛê%‡èáááèè¸mÛ6iii¾å Î»wï~ýõ×k×®8pÀÁÁtàLAyeeeAAA]|Åp³IDATZ‹„„ÄþýûÏ;WQQÑê%—œœœêêjuuõ‹/ò'/EšSª««÷èÑ#77í ]„†® ÖÕÕ577ç^XXX¸víZiiéáÇoÚ´‰ûQH–––L&3$$¤Ýµ 8ðôéÓûöí311yüø1ÓðÇ?ÿücnn~øðá+W®øøøôë×t"  0tU||¼££c«…†††'N|óæM||üË—/·nÝÊýª““S\\\ëœ8qâÝ»wmllŒ·lÙR[[ËûÜüQ]]½aÃ##£ùóç§¥¥ééé‘N4ƒ†®ÊÌÌ411iµðÅ‹®®®RRR***'Nœh5ŸÌb±222:^m¯^½ÜÝݳ²²òóóÇŽ‚ãý àšššÆŽ[YY™““³råÊ=ð] _'7á$,A !!QRRÂ}ÎT}}ýž={‚ƒƒ_½zUWWÇ`0zöìùùóç–7TUU <¸¦¦¦‹›HMM]¿~ýçÏŸ:d``ÀÛü<¿Òî'a úå—_îÞ½RVVÆápêêê¾ó_]]Ýäää7:99ÙÛÛ¿|ù’WQ¾ßëׯçÍ›÷Ã?Ü¿í ß  ]%//Ï}]/ƒÁ ;}ú4“É”””d0ÏŸ?oõ‘ׯ_í“ÆEDDìììrrrÔÔÔttt¼¼¼>|øðɾSó%FL&SMMíéÓ§ÎÎÎ"""¤Cí¡€¡«˜Lf||<÷’ºº:qqñ–´úHllì·=øEJJjçÎéééùùù£F:vìØ§OŸ¾a=_%((høðábbbÇ b0 3fLyyyVV–§§gŸ>}HÇ!†®b±X.\à^bii¹~ýúâââÒÒÒ}ûö½xñ¢ÕGBCCMMM¿y‹C‡={ölLLLBB‚¦¦fXXNþ Y¹rå‹/>}úôâÅ‹•+Wþøã7oÞü믿N:¥¨¨H:#!oÞ¼QUUíb‚9¡ÅÛ·oÅÄÄbbbZ–”——/\¸PVV¶_¿~®®®ÕÕÕÜÿKEEEõîÝûíÛ·<ÙzLLÌĉõôôØl6OVÐÊÈ‘#[}=Š‹‹'&&’΄ñ¯€Èœ]Ìáp,,,–,YâääÔ•8 Z@,]º´ùV”ÎÂÕÖÖNš4I__ßÏÏW[çp8ááá[·n•‘‘ÙºuëôéÓyµfƒ!..ÞÐÐÀ½¤wïÞÜ÷–î‰D¦Ø8ððáÃÀÀÀ.þC ˆ‚‚‚Q£F9::úûûwüNWW×ÐÐЧOŸ*++ó6CSSÓ7<==%$$~ýõ×Ù³góvýÐm 2¤¨¨ˆ{ÉÈ‘#óòòHå!TüðáCGGÇÔÔTiii0|›¦¦¦íÛ·ËËË{zzb4 ߌÃáܼysûöíEEEeee-C^III__ß¶wƒîFx®®««svvÀ3pà{ôèÑcáÂ…?Þ¸q£‡‡‡¶¶6NÑ‚¯Åáp"##õôô~ùå—Õ«WçççŸ>}ZEEETTTEEåäÉ“h_à+ªG–«V­RTTôôôüßÍc ß­©©éÒ¥K;vìóôôœ={6®Ñ„޵üÍˆŠŠzzzΙ33ð%B2¾zõjnnîo¿ýö Ÿi——¯3ýôèÑÃÎÎîáÇ›7oÞ¾}»¦¦¦ŸŸ_«³išÕÕÕ8qb̘1‡Úµk׃¬­­Ñ¾À`0¼¼¼Ú-þm‘Ò‘¥ªªjllì°aÃþoó¯%%%íÞ½;--í‡~X·nÝ€H'ðöí[???ooo&“ùã?š™™‘Nô $#àgÏž©¨¨´úeÁïŸÐÝL™2%22266öÕ«W£Gvwwúô)éP@Rnnî?ü0zôèüüü¸¸¸ÈÈH´/J ¸ƒ œ©Œ݆††¿¿ÿ£Gddd¦M›fiiÉf³›ššHçê455]½zÕÌÌlúô銊Šÿý÷‰'FE:Àÿ"<µ‹)h @CCChh¨··wUUÕÚµk]\\úöíK:ðQEE…¿¿ÿ±cÇÖ­[7þ|111Ò¡€®„ê:àÿ·y0P(99ùèÑ£QQQ¶¶¶+V¬ÐÓÓ#x,))éäɓׯ_Ÿ={öºuë&MšD:ОÐp¡€‡*++ÃÂÂŽ9ÒÔÔäââ²|ùrYYYҡ໼ÿþÂ… >>>õõõnnnK—.8p éP $PÀôÈ 4ÂápbccO:uëÖ­Ù³g/Y²ÄØØ¸G<ŒNcbbΜ9eeeµbÅ ###Ò¡@Ø €é‘è¨y@øòåË… .[¶¬ù9] Èþù石gÏJHH8;;cÈ üƒ¦GN µ¬¬¬3gΫ©©-X°ÀÞÞ^^^žt(øŠŠŠ.^¼úêÕ«E‹-Y²D]]t(r(`zä!ÐØØ˜’’rîܹ‹/jhhØÙÙ-\¸£+²Þ½{wíÚµ°°°””+++;;; QQQÒ¹ [@Ó#'“ºººëׯ‡„„ÄÅÅZ[[Ï™3gРA¤su#………×®]‹ˆˆ¸ÿþŒ3---{÷îÍ«õ7?^sÁ‚¾yÉ’%.\ø÷ß•””xhLœ ”ª««£¢¢"""¢¢¢ÆŒÓÜÄcÆŒ!KhåääDFFFDD<{ölæÌ™ÖÖÖ3fÌ””äù†ÜÜÜîß¿Ÿ––&!!Ñé›kkkutt }}}yž ˜9A¸}úô)!!!""âúõë={ö´´´´´´455íÊ×7tìÇ111QQQl6»gÏž³g϶¶¶ž6mZ¯^½ø´Å²²2%%¥ÈÈHssó.~„ÍfÛØØẵnLœÐ}äææ²Ùl6›––6yòd333&“Ù³gOÒÑhãóçÏéééqqq±±±©©©úúú–––VVV£G¦`ë‡OLLlYâàà ¢¢²{÷î–%›6mzþüyxxxË’É“'/Z´hÍš5$¦GN膪««cccãâââââŠŠŠ¦M›fbbbbb¢©©‰«ŠÛjllÌÎÎŽOLL6l˜©©)‹Å211áÇ$sæÎknn¾zõê–%ååå&LˆŒŒœ0aƒÁÈÌÌ´°°ÈÎÎVPPhy··wBBÂ¥K—¨Œ d¡€é‘º¹’’’„„„¸¸¸Û·oL:uÒ¤IÝyšº¦¦æþýûIIIÉÉÉ÷îÝSRR266611166&xzù°a⢢Ǝ˽022rÛ¶m÷îÝc0zzzëׯ_´h÷?~¤òQmmmVVVÆýûï¿&L044œ2eŠ€<¡YBB¢¤¤DZZºÕrWWWMMM‡“pýúõV¯VUU <¸¦¦†ª˜@ ˜9ÚUWWÇ]HOžzôèÈ‘#­^Åt7Ä¿â×)þð%bbbÍCÖ%ÕÕÕÿüóOsŸÅÇÇûúúæåå}øðaèСÊÊÊÊÊÊC‡:t¨¼¼¼‚‚ Aƒäååù7¦¬¯¯/--}óæMiiiIIÉëׯ_¼xQð_}ûömþ‰ ªª:þ|55µÑ£GS|þO0™ÌøøøVóìÙ³#GŽp8##£˜˜333î7ÄÆÆ2™Lj“‚ТÇÈ#`è†êê긛ïÕ«Weee%%%ÅÅÅeee½{÷0`€ŒŒŒ”””´´´””Ô€äååTWW—••}úô©y=òòòòòòJJJÆ kù 4G¯=vûöí–%•••“&MŠŽŽ9r$ƒÁxüøñ¬Y³ÒÓÓû÷ïßòCCCGGǵk×H „` š9(óþýûòòòªªª–ú¬¨¨())yóæMÑ•––666¶|¤gÏž ŠŠŠ-%­   ++ÛRá222”‘‘!øß‹2åå劊Š7oÞd±XÍKGµuëÖ–÷lÙ²åÙ³g!!!ÍÿŒŽŽ¶¶¶.,,óÈ€(`zäYºtió­(»2¬¯­­4i’¾¾¾ŸŸÙ@p €é‘h¤ùa ŽŽŽþþþ¾ÙÕÕ544ôéÓ§ÊÊÊdÁ¦GN2ü+ º^z@k(`PÀ €@€  @ €0(`PÀPZÀwîÜqpp““ëÛ·¯¾¾~DD•[½¨Ü˜‘‘‘‰‰IDD“ÉÌÍÍ]¾|ùÛ·o—-[FeA@éS†6nܸgÏ‘æfggÛÚÚæååuúA< ˆÎÇÖÖÖöïß¿¡¡¡Ów¢€€á|!›ÍÖÔÔ$€Js«¨¨Ø¼y³¯¯/©‘—””ØØØ?~|êÔ©]üˆH{¼¼¼øº //¯v‹†[$plµ°°pæÌ™û÷ïg±X]üŽü+ ª§ ‹ŠŠ,--:djjJñ¦¥SÐ¥¥¥þù'Úº9J§vµµµ7mÚ´`Á‚¯ý ¦ €!¹¸Ý£Ù•••ýúõëôƒ(` žF‰4ÃÓ@€  @ €0(`PÀ €@€  @ €0(`PÀ €@€  @ €0(`PÀ €@€  @ €0(`óòò"Aà`Ÿ´…}Ò.ì–¶°O(&Âáp¨ÜÞ«W¯~úé§[·n1ŒéÓ§:tHYY¹ÓO‰ˆP“°[ÚÂ>i û¤]Ø-maŸ´‹»…Òð‡LMMµµµ_¾|ùòåKmmm‹U[[KeA@é§§Ÿ?¾eÉ¢E‹tuuÝÝÝ;þ ~—µ »¥-ì“¶°OÚ…ÝÒöI»„déìì̽ÄÙÙùêÕ«Tf”pnn®––÷’ñãÇ?~ü˜Ê ‚€Ò 11±ššQQÑ–%Ÿ>}’’’jhhèøƒ˜ivK[Ø'maŸ´ »¥-ì“vño·ôâÇJùADD„tA„ÝÒöI[Ø'íÂni û„J”pÿþý+**Z–”——ËÊÊvúAü(!Cé1` ¬¬,î%ÙÙÙêêêTf”ð¬Y³¹—Ι3‡Ê ‚€ÒCîÕÕÕZZZË–-[µjƒÁ8vìX@@@VV–¤¤$e¥#`ii鸸¸´´´aÆ 6ìÁƒ±±±h_è†pÒ9x(`PÀ €@€ €|ïÞ½eË– >\LLLQQÑÌÌìÒ¥K¤C‘wçÎ99¹¾}ûêëëGDDN$222V¯^ݯ_?ÜS¾Å«W¯æÍ›'#####3oÞ¼‚‚Ò‰þTZÁWJ»ø[@7iÒ¤£G>yò¤¡¡¡¼¼<::z„ ÿùÏHç"ŒÁ`˜˜˜$%%ÕÔÔ¤¦¦jiiùúú’Ežººúï¿ÿž““C‹¿m TWW9rÇŽ;vìPSS«©©!‹<ü©´‚¯”vñµ€hy#ŽgÏžéèèTVV’BÒÆ÷ìÙÓòã=;;ÛÖÖ6//l*Á'›6;xð`zzúùóç[–,Z´HWW×ÝÝ`*‚?•føJé" ¦ ÛíÙ³'é„íÝ»—{êLUUS‹ÐVdd¤³³3÷ggç«W¯’Ê _)]ÄâY¿ÿ¾ù@Eóã ›ÍÖÔÔ$Nnn®––÷’ñãÇ?~ü˜T  |¥´Åó¢ÍÜ ÷O³éÓ§³Ùl ‚[TTTøúúN:•tAyÅfbbb555¢¢¢-K>}ú$%%ÕÐÐ@0•@ÁŸJ[øJi…OD›pó!ë’’’àààÜÜÜ;w’N$(JJJlllŽ?Žÿ«À÷ÃWJ[|* ûéÇýCãKÙâãã]\\^½zEU(ò¾´[ gΜ¹ÿ~‹E"Iÿ©`XÓLAA!;;[AA¡eIqq1“É|óæ ÁT*ܺóWJñ°€nÌ}Šö—Þ£££SZZJe*âÚÝ-EEE–––èžÿWéÊŸ hhhdeeq/ÉÎÎVWW'•Y7ÿJé"ÀpWܽ{w̘1¤SVZZjaañ矚šš’΂kÖ¬YÜKçÌ™C*,|¥t/ ˆ'Wó•¹¹yDDDIIÉÇ_¿~íïï?dÈ›7o’ÎE“É !BpÑâo›UUUÇß¹sgË8FŽùáÃÒ¹þTšá+¥]|- üˆ?zôèíÛ·ß¿/''g``°qãF===Ò¹k÷þy•••ýúõ£>Œàhw·þ9_½xñâ§Ÿ~Še0,ëСCÆ #Š<ü©´‚¯”vñµ€hPÀ‡–Ç€è @ €0(`PÀ €@€  @ €0ÿÑ{œGžcIEND®B`‚gsl/doc/images/siman-energy.png0000644000175000017500000005146713536674414015065 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìÝ{XåâðYnrQñ’ ZZØÉ,7èz2#I´L9–få%È.ž4ã¤Ræ=Fšš joˆdy¼…7@ô(ërwØå¶°ìï÷ižifvvv—eø~þ8ÏòÎ;³ïÎÙüîûÎ;ïÈôz=­ËNêtD` €$€@` €$€@` €$€@¶À………¡¡¡¡¡¡r¹ÜPMN;bĈ®]»véÒ% 66V§Ó‘­/^œ={¶¯¯¯““SŸ>}ž}öÙ´Ö‡àg£¬Ñh‚‚‚ ‚ƒƒkkky+GDDìÚµ+&&F.—Ëåò˜˜˜;wFDD­ .>|øÑ£G5Í7>ýôÓ+V|ùå—­øiØd¶ù<à˜˜˜+W®ìÞ½›.yë­·F޹páBne¬¬,º$??ßßß¿ººš÷àwïÞ T©T-Ýj±l´œ””4sæLfÉÌ™3y+;;;s ]\\ ÜÑÑÑÞÞÞÂXÂF8;;{ذaÌÿ›7oòVž7oÞ´iÓÒÒÒÔjµZ­NMM [°`·fUUUjjêÔ©Sßÿ}«´@‚vrrª©©qtt¤K;wîÜÐÐÀ­¬×ë'Ož|èÐ!º$$$äàÁƒ2™Œ.a¾~î¹çþøãt‚@Jz›äèè¨Õj™%Z­ÖÉɉ·òªU«ú÷T*•JeBBBÿþý׬YíYZZúÓO?õéÓç?ÿùÑ6888HýHϼ 3Ê&zÀÌî)i··wVV–··7]^RR2|øðââbîî¾¾¾;vì?~<]rúôé·ß~;//÷íN:^XXh´U¶pr$„3€3€3€3€3`½3`×€™¿HÉСC333™u²²²üüüxwW(Ì’ÀÀ@…BaèíËÊÊ,n5€ùl"€¹&NœÏ,‰Ÿ4ioåþýû_¹r…Y’žžÞ¯_?C?þü£>Ú"í0ðœ9sΟ?­R©T*ÕÊ•+É‚Vtæ¨uDDDxxxRRRee¥J¥:tèPxxxdd$Ùú /$&&–••566*Š;v¼óÎ;_ýuk$ÛÜÏÏÏŒŒLNN¦(*88xýúõ  ·²å÷íÛ·nݺÜÜ\Š¢† òÑG………‘M§Núî»ïΜ9SUUÕ£Ggžyæ“O>yê©§Œ6W>ppppp¬w:ú™€¯ÎÎÎÎÎ@;Ÿ„ÐÑ €Á <²ggggÀz:úØ‚ ¼† Ú°W_}Uê&@û„"°œ€%À@H 0€ÀBp0X @` €$€@`!˜ V‚@` €$€XfA€• €$€@` €$€‚YÐ`%` €$€@`!b&aݹsçÀ­ÐhOÀ–ÊÉɉ—ºÐÆ €[@ss³ÔM€6l)½^/“ɤn´1à€õ:ÀT` €$€‚±e°p @N€©À–Bú€À@H °‘×wqL…@` €-¥×ëq L…Xº¶`%` €[:Ê`*0€À@H,DÌÅ]Ü f@H 0€À-×€ÀT` €… k V‚ØRè%€l7€ CCC=<<<< KÏ@J†š™™É¬“••åççÇ»»B¡ d–* òúîÝ»>>>¬Ÿ3-û»Æ~Ä@ÛbÌ5qâÄøøxfI||ü¤I“x+÷ïßÿÊ•+Ì’ôôô~ýú‘×zºÐh3¬`%6ÀsæÌ9þ|tt´J¥R©T+W®¼xñâìÙ³é ÌþkDDDxxxRRRee¥J¥:tèPxxxdd¤ ÅFgA»»»§¤¤DFF~óÍ7E'''»¹¹ñVž?¾··wtttnn.EQC† Y»vmXXX«¶À6ÀEùøø$$$ÚÊž2eÊ”)SD¹Å–1R ¦²Ñ!h€ö  °Ì”+A·d0˜  0€À@H,Däì*LÂS!€$€¶º¿`0€À-`0@`!bº¶eee耩À–š?¾L&“ºÐÆ €[zÀ`*°$+X XˆÑ±e$4˜ °¬ V‚¶¢̃@à€h0@`!èÚ€• €-‚„ó €$€n耩À@H,ÄèØ2ŸÀ<`QŠŠŠêêê¸åäy…ˆa0X”éÓ§§§§s˽`0€ÀB˜\Î.úÁ`*°r‰—BÄ@KC Á,h°°(ZhY`Qd2®@ B‹‚ˆ€–…Ø"è€yÀB¯`%`Q„“9 ¦B‹…”€„@`‹`\̃"2_Ã`*°(z½) - 0€ÀB˜ÃÎäõ•+W„«ˆ"“ÉX¯Ÿ|òIfD/˜,ù V‚KÏÀÝ$I“ íB‹ÂŒXæ¸4€yÀ@›€ôƒ¹S£L…Xog×J“°š››óóó-?´ `ã­ý.555þþþÖ~°`!õõõçÏŸ¯¯¯·ö{mݺÕÚo¶,¤¢¢bÖ¬Y†nÿ¥µÈôÚµk1¥  ã@‹‚h€–e»\XXêááááá*—Ë ÕÔét±±±#FŒèÚµk—.]bccu:]AÆaRKHúÊd2«®…ŒèPl4€5MPPP@@@AAAAAA@@@pppmm-o刈ˆ]»vÅÄÄÈår¹\³sçΈˆfý߉o }ï/ZðÖ­[GµdÉOOOOOÏ%K–Œ9rÛ¶m¼•ãââ~ùå—±cǺ»»{xxŒ7nß¾}qqq­Üf !à: त¤™3g2KfΜ™˜˜È[ÙÙÙ™[èââÒ‚ía®e½¤Dt6ÀÙÙÙÆ c–øûûß¼y“·ò¼yó¦M›–––¦V«ÕjujjjXXØ‚ ˜uzõêåèèØ»wïéÓ§çææšÔ£óŸœ`* `•JÕ­[7f‰———R©ä­¼lÙ²Þ½{;–ÌØ7n\ß¾}—,YBW˜4iÒ¾}ûÔjõ¥K—ž|òÉqãÆeddˆl ¬ÁFØ$«W¯¾zõjBB‚R©T*• W¯^]·n]!11q̘1ÎÎÎ=ôPDDDTTÔâÅ‹EüÎ;µµµ7oÞ|á…)Šúꫯ¬ò1öÒ‰ŠŠâÞ2cÕçÏÚDs?ª§§'«¿ûàÁVŸ˜¶iÓ¦¸¸¸2c+$$$...66ÖÐÛMž<ùìÙ³"Û6hÐ WW×Ç{ìèÑ£dAJæ N‚ ­‹ŠŠÒó±Þ;ÚDs?êСC333™u²²²üüüxwW(Ì’ÀÀ@…B!ðv–´vïÞ½–ì@ÙHsMœ81>>žY?iÒ$ÞÊýû÷¿rå ³$==½_¿~†¾wïÞÑ£G‹o ýËÀª?…ÐèPl4€çÌ™sþüùèèh•J¥R©V®\yñâÅÙ³gÓ˜ãòáááIII•••*•êСCááá‘‘‘dkppðþýûKJJïÝ»½|ùò¯¿þÚì¶ñ>£°E ƒ:©ÀÏÝÝ=%%%22ò›o¾¡(*88899ÙÍÍ·òüùó½½½£££ÉýEC† Y»vmXXÙºdÉ’ï¾ûî½÷Þ«ªªòöö :{öì!CÄ7Ë`@‹³Ñ¦(ÊÇÇ'!!ÁÐVV"N™2eÊ”)¼5ƒ‚‚‚‚‚Z¤I†¢[$ž‘ñŠAÛîZÐHJ°X”Ö ]D;@Ç6Ž•‹Ö›„¸ †ÀT`#¸ý]+Å-R C1ÀMMM­Ð×:“°Á‡ñöññY±bEYYY+´Æ6á>`hqÆøÈ‘#ùùùC† ™9sfzzz+´ÉÆYé>`èPŒð°aömÛvçΡC‡N™2å©§žÚ½{·V«m…ÆÙápmÁèE? C; ËËËë³Ï>ËËËûì³Ï~üñÇþýû/[¶¬¨¨Èª³¬‡1 &Àr¦Í‚¶··ŸVÉ|.w±¬™ÐfàšššéÓ§¯X±âîÝ»µµµwïÞ]¾|ù›o¾yÿþýÕ«W/Y²äçŸn…†ÚšŒŒŒ   S÷BÄa<€###Ÿyæ™%K– 8ÐÅÅeàÀK—.}úé§—.]úÜsÏ­_¿~Æ ­ÐP ±&aYi9d3@‡b<€÷ïßÿú믳 §L™²ÿ~Š¢ÆŒsãÆ «4Í6Z˼nµ…-ÀÆ຺:rww÷Žö¼BîŠ&'R(1ùäë·Szæõwxï?ñÄ©©©YYYO?ýtçΟ~úéëׯ§¥¥ 6Œ¢¨ÄÄÄÉ“'[¿’á^¶d–ð¢Zˆv€ŽCÔZЃÞ³gµ›b³x£Qÿ }b0iOC q -AÔJX­ÐŽ6ÇìF~%&€{ôèA¯¹ØºØ’£™·Úãüúë¯9r¤šb³è fMÂjÙyÑH_€Åx¯Y³æÄ‰111ùùù­Ð&Ô²ÏD0> ÚÍͼøè£X›:N‚6c)J< (1ÜÁSAà¶ÝVn ´'¸ Éd® @‰ à”””—_~ù¡‡²··'%/¿üò©S§¬Ù0[aè H-~R C1À[·n={ö»ï¾{ýúõææfRùõ×_[¹m6¤¥Ö‰DÊaüðŠ+öíÛ7räHfá¨Q£Î;gµVÙCóŸM½ ©¢¢"55U&“ªL<ÑëõXù #0Þ.))yôÑGY… ¢Ö‘n,¿ë·   ::S €0ÀÆ ûã?X…IIIcÆŒ±N“l ÝßeuLM½Œ|&ã½Øo¿ý6,,L¡P¼òÊ+E'&&._¾œ›Êí^‹<ŽÐŒMÐþï?>---##㥗^rrrò÷÷OII9yò¤¿¿+´OrÌ‘gú2-w“øCéõúÛ·o¯]»–µ•uphßD]Ç2dH||¼µ›bË,$³¾B¡HJJZ´h‘p5hǰ‡«@[ü›0 ƒÀ¿þúë¨Q£ºuë&û;k7ÎgÖëõ7oÞÌËË3éPä6$»ŠÑè ŒðÆ—.]úå—_Þ½{Wÿw­Ð>ÁÛëÕétMMM”¸Ô´pý,hgŒ_þïÿ»}ûörÓ™¬54˜¯Å ¸F6t(Æ{À#FŒh…¦Ø2C qôkkkksrrX¡Åݳ :ãܧOŸâââVhŠmXŠRxÇœœœ3f˜zXè Œð;ï¼³}ûöVhŠ-3t’ø…5ZäIJÐnàÏ?ÿ¼¢¢bÙ²eyyyôÓ:3¢—YMü&¤2@‡b|ýÐ…åË—³6!3„Ã˜Û ¦¯þâÔtpÆQÁb^Xäò8ÛVÂ2Bxåg³óA ÐÁ‰ à”””—_~ù¡‡²··'%/¿üò©S§¬Ù0[ahò”˜IX†®õ"}ÀxoݺuöìÙï¾ûîõë×éIX‘‘‘_ýµ•ÛfC„{½"WÂb^ÆmHœñkÀ+V¬Ø·oßÈ‘#™…£F:wîœÕZeCÌ^´Ù¼@E tÆ{À%%%>ú(«°¡¡žݾ /Ä!œ—¼ý渒6pàaÆýñǬ¤¤¤µ:´KQòÄ’:*•êäÉ“bÞlŸñ^ì·ß~¦P(^yåТЋ‹—/_ÎMåvÉ’yΓ°Ì8l^^ÞâÅ‹/_¾l^{À¦ï?>---##㥗^rrrò÷÷OII9yò¤¿¿+´Ï¦Xu)J+]TÛ$ê:î!Câãã­ÝÛÄ™–_ÄÅ-€ qˆb(€MZÓÊÂu(‘¾í ؊̘”è ÀF°‚“õÚ’kº¦ÖÇÍKí X’|2™Œù§È½XÊlrð;wZÚVh ÀFFæ­#—ËM:&KII‰y;@Û‚6ÂP‡•YN÷ŒŸ}öÙüü|fÞúæ­­×ëé7€¶,«+Ì;ž¬×ëéçU:‚%½Xô€Ú Û àÂÂÂÐÐPÐÐP¹\n¨¦N§‹1bD×®]»té«Óéè ÍÍÍ7n:t¨³³óã?þ믿ZØ6‘‹J Lu6o4ïÖ-[¶m Ø `FPPPPPP\[[Ë[9""b×®]111r¹\.—ÇÄÄìܹ3""‚®ðÁdee>|¸ºº:.....N|KÄ A³ Žc sçεґÀzlô‰F[·n5jÔ’%KÈŸK–,ÉÉÉÙ¶mÛÂ… ¹•ãââ²²²|||ÈŸãÆÛ·oŸ¿¿ÿÆ)Š:uê”B¡HJJ"[GŒñûï¿‹o ï$,JD·ÎR””h£l´œ””4sæLfÉÌ™3y+;;;s ]\\È‹-[¶ÌŸ?ßì–ˆééšæÝÑ+I÷¬ÄF8;;{ذaÌÿ›7oòVž7oÞ´iÓÒÒÒÔjµZ­NMM [°`ÙzáÂF3nÜ8WWWww÷gŸ}öܹsâ[Â{ï¯À¢’ÌIX¦v‚Ê…·"€Ú `•JÕ­[7f‰———R©ä­¼lÙ²Þ½{;–ÌØ7n\ß¾}éáë’’’¹sçþë_ÿ*((ÈËË{óÍ7_}õÕ³gÏŠl —2™L`„™.4´XG‹¯œeÉ^ 9 `“¬^½úêÕ« J¥R©T&$$\½zuݺudkssóš5kfÍšÕ£G=z¼ýöÛß~ûí_|!òàda ­V;eÊ”ž={­/r‚´Èw7º EDEEÉøXïm"€¹ÕÓÓ“Õß}ðà«OLÛ´iS\\\HHˆ§§§§§gHHH\\\ll,Ùêåå5qâDfýW^y%==]dÛ(ŠrttÜ»woYY)¤Ç™¹=Z³ça‘ÏÞ CІ>9@DEEéùXïm"€¹uèС™™™Ì:YYY~~~¼»+ŠÀÀ@fI`` B¡ eaÛÄ—£¦7éõzFÃ\·Ò’e:LÚ«ºº:::ÚŒw€dÌ5qâÄøøxfI||ü¤I“x+÷ïßÿÊ•+Ì’ôôô~ýú‘ׯ½öë¾£ß~ûíÉ'ŸÙ:yÃU|‡•»Ëo¼qôèQ‘Í0ú^&×’³Ñû€çÌ™3lذèèè÷ߟ¢¨ï¿ÿþâÅ‹?üð]9%*"""<<|ãÆcÆŒÑëõgΜY°`ÁâÅ‹ÉÖwÞy'88˜¢¨þóŸEýöÛoŸ|òɾ}û,ik´ÈlfîeÞàï1yËÀÆÙh»»»§¤¤DFF~óÍ7E'''»¹¹ñVž?¾··wtttnn.EQC† Y»vmXXÙêìì¼ÿþO>ù$""¢¶¶6 à×_0a‚­3 Ú¼£‰9±cÇÄ\ø}Ø’³Ñ¦(ÊÇÇ'!!ÁÐVV„L™2eÊ”)†*÷îÝ{÷îÝæ5ƒ·‹)|}—·³|óæÍf¤àµk׌¾)´6z ØvãÌÜ?IÉåË—)NOTLˆj†IÖ¶ln^ $.wk}wáB3Ž­ ,7A™›x_s@G¸cmFÛ¬ZZX}Ë-E)“ÉHß—Õ6Š-xR‹,Ëè½Fo¼ñ†B¡…¦ ÷€[m%,3ê@‹C‹bh:s«F£inn6ºF‡¡›€Íëã>`€6 láþ®Ñ׀é­'OžÜ²e‹imÝ0h`±DvXÅ”óö€Mj@^^¹—IøMÀf!€Åâ„Å,!“ªÄ?Ø’IX¬n“˜…´°`s Wñ{™÷¦¬6éP`[€ËÔÐ5t‰—Eø]cIŽ"ƒ$‡6³ßÉ `áΨÙYˬß"·!!}l؆®ï2qCšµI8­E΂x-2@r`±Œv@Mí†Z2ŒÌÛ€6l1ùg´—lÞ^F«Å þúúúììl³fC[ĤkÀÌ^/·Ü"“¢MUXXøÚk¯™·/XláÌÓÿý–\P¤Æ`öý»Ì+Í”÷cì@*`st^™¯år9ï‚‘!mÞ$,³-láíL`6°9XPÞ!h½^ßÐÐPTTDÿÉ|65üXéköô+ô€lX,{Šx+=ïEînƾ"›­,ïZÐÌסÈí¿š=nLq’×€Ú°EŒ†™@¿™÷B²ÈÛļµÈ6#ƒ$Kà¬@ß”wwÊâäk©ÔDHlŽòòrµZMý5öËÀ}ôï&C=WÄL½£Ð¢(1 IDAT’C‹õàÁƒ{÷î‘×þþþ?ýôe`þ³¿¿MMJ¥¢øâ5šU.@dÜ(æû"}¤â uÚŒ£Gîß¿ŸþÓPwV¯×çååétº††Rž’’òóÏ?¿úê«äÏúúzÔߦ(êðáɉ‰æ}ú€È`I €ÅjnnfÎ[f¾feÙ¤ÕjÉ&FSRRBwy/_¾L™•|ܰZ­.))á6@üq@*‚K¯×ët:úO’²¼ãÀz½¾±±‘YÙPg×Â,4ï¬!hä1€$Àb±²Š{/ÃÍÍÍôø3÷Z/ïÑX1Ú=ƒð^ÂÀRA‹Å‚˜?Åê+Ó…Üj¼ùòË/éü6³¨Ú:°X¼×€¹ѤÛU¥ÿd–ó¾Ñºuëx˜7¿ÍècÀ €ÅbÆ*ÅékµÚû÷ïS–™ X8YA.ÕUd°X¬ÌÌLî$,Z}}}AA½ÉÐÅZšÈ (d&½%=`ñ;@ B‹¥R©¸CÐtOT£Ñ0Ëy¯s”÷Ä„¢…s¯L};hq` A>|˜Ynh¬Xäµa£CÖt5ózÀ¼Ç€Ö„…8L`¨LQTSSo9eúG"ËOŸ>]UUe^|b@rè›@`%¬ÆÆFf9·¯Ì46ô<`1¬×ëKKKïÝ»gF‚¢ ` À&(--¥_³b•žŸÅº¬×ë¯]»f(}ygA3w?|øpDDk+ýB§Ó™q1¡ ` À&P*•ôkVÿÕд^¯çí§ _ë¥_«Õjf곘ÀÜf˜·/Xl&Ö,hS‡ õ¿WØÐдÀ´/Š¢ššš,‚6uwh`3±bÌÐ4]áðáÃz½^&“1«ñöŒe2™¡œf1»Œ ØL$ ùS`š8~ü8·œ÷ÈÌM¿ýöï.¬kÀ&Á$,[€6 ÚØØXŠ¢ôz=À¬YT”˽¬…-Y•é×{÷î¸N¬Óé̸ØÐÛ@kB›‰ue—`2Íí³¢NxïÀ2·2÷™K"[ŽÐØLÜÛÈ‹}ûöQ|aÉMS V¼ó¶¨¿ç:Ź|ãÆgŸ}Ö¤O0 ØL¬YÐtŒ9r„2Ю¬¬$W‚©¿† …sšÀ¼=`æXw}}=óF)C¸×’ õ!€ÍÄJG:yÆ@ÔÖÖfdd0 ÙP˜õyÝYd0€$Àfb-ý‚u øÒ¥Kþù'ňLº>3/ßzë-Öq(¾°¡!hÖ.Âx‡» •!€ÍÄš~ÌJbº¼¨¨èþýûtÎÑ\__¯R©è£‘ܾ¯@@šÝÆ4€äð4$3‘ ­®®fþIèsX§Ó1û¯¼‰(p Xÿ×ÍNftgѰ蛉Ž@æŸßB#çŒ>é÷ß§ø²–ûšu|ʬ0ï1  €ÍÄŠRC×€Y mèÎ]º>YZ‹wš75-ï­Ö€6+ºL‚fD`ª³pF „´ÈO ØLÜÇ-0Ë AÂ;™™®MMMr¹œûvĺuëDö€Ñ ØL††  CCÐ,¦ö€KKKƒƒƒ Õ¬««3£lR}h)`3‚fý)Ü®¨¨¨­­åyë0·3Mèc4@‚n¬^±b³\oà±¾K—.MNN¦8ÌLeá¶p4Ò@*à–ÁJ²›7o2Ë¢‘÷y‚¼YËûF¬C™Ú> X¸e°:¸Ì%'…wHY3† ¾óP”)æôôôƒŠ© b €ù™Ú/4Àt^ /ÁÁ{EYLØŒ!hó¦@_»víèÑ£³f͹ @ó«©©1©>+ÉšššÈ Ö}À\¼CÐjµšž9s†ù¤ådjñ0oÊrƺúKÿï¡C‡Èò\¤N^^ݯ}ðà¡!hæñ¸¶¶¶¡¡¡±±±ªªJà“ÍF8;;{ذaÌú ,óæÍ›6mZZZšZ­V«Õ©©©aaa ,à­¼~ýú?ü°ÅÌš„Å"ÀÜð3£Ì]½R¸ÛœœLnC"ûŠ‚6”Ó .Œ‹‹sí `•JÕ­[7f‰———R©ä­¼lÙ²Þ½{;–ÌØ7n\ß¾}—,Y­yýúõ;w†ŠoIpp°˜j–ô€³²²ŠŠŠ˜%F¯s³™ºôÌ)Þ·cîÂ|Zb]]B¡`Ö,))!Kr„E,|í˜l4€M²zõê«W¯&$$(•J¥R™põêÕuëÖqknذáƒ>pppp7771Õ¶þïÿتP(X‹`ðA³:»k¥-ñ=`–÷ïß§_gff>õÔSÌkç³gÏ>~ü8%bVSSÙTYYÉú1aªÅ‹[²;@[a̼Aˆ”xzz²ú»<`õ‰i›6mŠ‹‹ !3¶BBBâââbccYÕ***Þ}÷]“Úvøða1ÕX+o˜D«Õ²J„{ÀÌ,//§(ª²²²®®Ž®ùã?RÆzÀäø—.]¢³± ņ èšÍÍÍäs„ÕÔÔD*Ü¿ŸÓ<:nÕªU–œLóDEEñÞ¶j½w´‰æo:433“Y'++ËÏÏww…BÈ, d¦RõÃ?¼þúë†RÜ1Õ¸3™Åãöž™KdPœ'&q“uëÖ­ät577766æçç“úÙÙÙ†ÆÆ™×kÉk:k™Í …ôÿ;†®“.»ðз€ôôô””z_KN&€y¢¢¢ô|¬÷Ž6À\'NŒg–ÄÇÇOš4‰·rÿþý¯\¹Â,IOOïׯ³¤±±qÓ¦MfL¿ùóÇ’NwfzD—ü)Ð&˜¦ÖÜܲÿ~ÖÁ™=`º&µÌðî‘n7ÅèS|ñY[[[RRÂlmAA³BjjjRR½/zÀÐØhÏ™3çüùóÑÑÑ*•J¥R­\¹òâÅ‹³gϦ+0s1"""<<<))©²²R¥R:t(<<<22’yÀýû÷ûùùêC À–tÚ®]»Æ*aõ€Y×tïß¿Ïêe2û²t“.éíÛ·Y/..¦8S©É4%Ø>|øðï¿ÿNïõæ›o^¼x‘¼&¿ȾÌAlâäÉ“Ìÿ‹Ÿ~úiîç¥ß °»»{JJÊ¥K— 0`À€Ë—/'''š5þüÕ«WGGGûúú8ð›o¾Y»ví¼yó˜u6lØ`ÞÝG­Ðæ¾]^^N~ôÑGëÖ­À"Gª¹ =‘ÀÀF‚¶³³   ?÷м̭@ËËË£_³¦‘4â03/IÊ2˜d*}´;wÞºu‹nŒN§;yò¤F£¡þšfE"™nU}}}}}½¡0ý§î/ô ÌkÀË–-ËÊÊ¢ÓôìÙ³%%%©R©Ž?Np÷îÝäaE]¹råÎ;ûRè@ëBÁÀEÙÙÙ‘©Xt…O>ùä±ÇsÌ©S§:T ‰=:lšÿ¾%%xÛ1«ÜÜÜL_Ð=þ~kú_óøøxFC¯¡AqRV½=ÉzJ‚û”b‚‚¦c˜„¨^¯§3»´´”¼ \YYÙØØ¨ÕjÏž=›››[QQ¡×룢¢XL|üñÇßÿ}}}}iiéµk×îÝ»·gÏV{Hš’Ìcö€ÉV2+ô€éÉbUUU“'O¦Wº&¡O2¹uX­VWVV2?,ëãëtºµkמ;wŽ{fÈOCƒØ»víJMMåÝDQÔ¥K—æÌ™ch+´K`#èÜíÚµ+³œ7€IØÁÁaøðáÜÅ:ìììÈÑd2Ù¢E‹ÈeKŠ¢Xn¢Ñ×hsssu:« ;aÂ1í?|ø0ya4€Y7Zݺ¹¹™¹\y&©“œœL éYÙt›oݺÕÐÐP[[»råÊÕ«WSuéÒ%NW^^~íÚ5Ö{]½zuÞ¼yܵkWyyùöíÛy˜ kÓL÷¼éyÝdIR¿¼¼++‹[®T*Oœ8!ü`6°tèvêÔÉÕÕuÈ!EÙÛÛÛÙÙ999EDDxzz0à‰'žpppxâ‰'HÍ'žx"**ŠìHwîÜ™yd:€é|"Kk‰äååE^DEEÑw»ºººººvïÞúûEkÂÐŒnZpp0õW]$²3€}}}é×r¹üàÁƒÿüç?éúÇ„¡ç%0g’Ó=`ÖSärÀ•+Wè£(êÂ… ôk…Bñïÿ›¢¨#GŽƒÐY¾bÅ røÂ… —/_Öh4‹/þþûïÉV2.={ölúÁÃÅÅÅÕÕÕ‹/Þ»wïÏ?ÿ¼{÷nê¯,$Ÿåúõë‹/ž={6 à_~ùåÀ>>>Ï=÷õ×OºººââbO<ñÄž={HÃjkkI———ïß¿ÿÙgŸ­®®>qâ¹"°ÿþ={ö:t¨¸¸øÝwß%Mº|ùòÛo¿ÝØØøÉ'ŸPUPP@>û_|A&Ü‘Èߺuëž={ÈÀǼcÇŽ1cƬ^½zÕªUôÉ'“Àsrr^xáæ&WÖ333YOѦùÉÆxçs=pqGG˜¦´z0€œŸäääyóæQ5zôh__ßW_}•¢¨•+W®\¹’Üê:uêÔE‹‘]È?F~~~›7oÖëõ{öì¡(ŠÌª>}úœ9sÈzR—/_Öëõô]@¤Óãàà°ÿ~áuµd2 Ñž={;vŒæää<óÌ3ÿ÷ÿGÞzÀ€/¿ü²½½ý£>J*¸ºº’ÃŽ5ŠžF°²ö£>¢ _“fbçùçŸwqqñôô¤(ªsçÎô3 …B!ü¨f–矞~mh™Ï'Ÿ|ÒÙÙ™î¯Ó?e1·xâììÜ£Gf‰ŸŸ·Ú£>ªT*wïÞ7wî\Š¢d2ù˜]»vݶm©Ö«W¯÷Þ{úk̃\ƒ 'ÙÅÅeàÀÓ§Oß²e‹½½ý·ß~KýõkoÑ¢EîîîkÖ¬)))0`@—.](Š9r¤L&[»ví‰'ÈÕ2‰ï¹çž8pàØ±cŸzê©Þ½{?óÌ3=öØÜ¹s?ùäOOO77·nݺ)Š‘#G†……QE~2>òÈ#§OŸ¾víÚ¨Q£ûlêÔ©G}å•W>üðÃÿþ÷¿«V­’Ëå ,˜6mÚÑ£G===kkkÇŽ;xðàÍ›7ûøø¸»»,]º”ôƺuëÖ¿ÿ’’’»wï655yyyÕÔÔüûßÿV(iii«W¯~ñÅ»wïîè蘾hÑ"ò^G:tèåË—ÝÜÜ._¾loo¿sçή]»Nš4)++«®®néÒ¥—.];vlZZÚ[o½uîܹ7Þx£_¿~kÖ¬™6mÚÅ‹cccßxãÁƒ_¾|¹Gõõõiii:î¹çž{ä‘Grss¯\¹2þüªª*æõÅÑ£GwîÜyРA>>>Ÿ~ú)EQÎÎΞžž …"===::úäÉ“¤ãèêêêåå¥ÕjÉ?CMMM2™ÌÇÇÇÁÁÁÃÃcüøñIIIÅÅŤƒ(“ÉÞÿý455 :455ÕÕÕuéÒ¥IIIt—wÆŒ?ýô“N§óðð°³³›:uêÎ;<<<莯LÆþªÛÙÙ±zotOOO2eŒõ•èÔ©SçÎe2YUUéevëÖ­®®®W¯^ååå†ÁÇÇ'??ßÞÞÞÙÙ™ÜMüV`^'vvv®¯¯ïÓ§OUUk¢œ³³3¹}«sçÎ桇ºÿ¾££#)!£åÜÏEó÷÷'sß¼¼¼GŽéß¿SSSFFÆìÙ³«««===É­nÛ·oå•WÈÈäää &¸ººÊår'''2]àܹsôòò"ÿwîÜÙÅÅE.—ß¿ßËˋܚèââB.W•••9;;WTT¸¹¹¹¸¸hµZ24uçÎÛ·o¿ð J¥²S§N< ƒFÕÕÕ………ƒ ª­­­®®îÕ«—½½½“““V«MII3fŒ££cee%þ©ªªrwwgŽrét:ÐXAœÔIDATµZ}çÎÁƒ;;;;99‘ûýȹÆA~ÌiµZ{{ûºº:{{{µZM>&ë—kMM««kMM =tG3J_Û"_?C«åRUUEšA+/ÜŸÚZ­–;b7fÌÖ­%­Cà¿2KŒ6„>éõõõ›7ož5kó{C#3}˜=Â{÷î1‡a)ŠÊÈÈðóó.))‰ŠŠÚ¼y3wSYY™ƒƒCUUÕ¡C‡Hß´¶¶–ü7ðûï¿8îér6nܸY³f‘E%+**Èÿ¦ÊÏÏ¿}ûvee%éB1oggWZZºk×®ÄÄÄÏ?ÿü¥—^¢(ª¨¨è³Ï>{üñÇçÏŸïèèHê_ýÕÍÍíäÉ“/½ôðÌÍÍ=räHbbâ‘#GX}ñsçÎíÚµkĈÍÍÍÁÁÁƒ "Q3wî\òoPbbbNNÎèѣnjsìØ±ŒŒŒ°°0N÷ðÃçää\¸paܸq}úôù׿þEQÔk¯½víÚµƒ®ZµêÎ;EEEä_É)S¦üüóÏ~~~Ÿ~úéÉ“'?þøã±cÇ.\¸pÆ =zô(++S(K—.ݲe‹J¥ ÷÷÷§(*++ëÌ™3•••Ý»wW©Tžžž¡¡¡?üðÃÀ¿ÿþûiÓ¦ýãÿ>|ø¹sçnݺµgÏž·ÞzK©TÞ¸q£©©éñÇ?qâÄĉkkk»té¢Ñhœœœìì삃ƒ7mÚäçç—’’âïïŸ=lذ±cÇVTT<üðÃ;vì}îß¿÷î]ww÷×^{íÆr¹¼k×®™™™?þxNNΘ1cΟ?_^^®V«_zé%''§ºº:™LæááAVkñññ¹páB—.]ïß¿ÿÐCõëׯ{÷î7nÜ ¿WΟ?ÿÌ3ÏäççS5`Àòã S§N}úô¹uëV§NºuëVYYigg×ÐÐàìììààЩS'­VÛÐÐPSSÓ§Oò Mò߯££cQQÑСCËËËœœI™ÜX__ïàà Õj½¼¼ª««IÚ‘\!·º¹¹‘¡rWWW²PyG•JÕ¥K2«ÀÃÃüXìÚµkSS“ƒƒ™3HÆ«ëëëÉG#Wj:wî\YYIZNnR§¿ùäÚV—.]ÈÍ{ägMïÞ½«‘ôÏpòkÃÐ[vÉë¼¼tè]rðàA™Lft« ¼à à à à à Xñ èm’£££V«e–hµZ'''ÞÊ«V­êß¿BB‚R©T*• ýû÷_³f˜­¬rº ­±<ÔxÙÄOfg”´ÇÛÛ;++ËÛÛ›./))>|xqq1ww__ß;vŒ?ž.9}úôÛo¿——gt+€$lâ0·ß9tèÐÌÌLf¬¬,???ÞÝ E`` ³$00P¡PˆÙ ›`®‰'ÆÇÇ3Kâãã'MšÄ[¹ÿþW®\a–¤§§Ó«vo„ðœ9sΟ?­R©T*ÕÊ•+/^¼8{ölºsÔ:"""<<<))©²²R¥R:t(<<<22RÌVIØÄ5`^ùùù‘‘‘ÉÉÉE¯_¿~À€ôVÖ´´}ûö­[·.77—¢¨!C†|ôÑGaaa"·´>Û `€vÌF‡ Ú70€À@H 0€À†††zxxxxx„††Êår©[ÔòdÌ­Âg žŸ«W¯~ðÁ]»vå}–%¹­œá3Ðî¿©©©S§NíÑ£G—.]FÅ|NÑî¿FÏ@»ÿe|}}œœúôéóì³Ï8p€Y¡Õ¾`~&(((        88¸¶¶Vêvµm÷ü̘1£gÏžçÎãn²ä#·¡"pˆöý•7n\yyù¡C‡Š‹‹7nܵmÛ6zkGøŸ¢}.\8|øð£Gj4š7n|úé§+V¬øòË/ÉÖVý´ä£•Ú‘uëÖMŸ>Y2}úô 6HÕ+øŸvp~¸ŸÝ’ÜOïÿûíþ+ññÇ777Ófff4ˆþ³#|„Ï€¾|¸îܹӵkWòº5¿`~&L8vì³äرcAAARµÇJþK>íàüp?»%¹-žS¸ý½^_SSÃ|ÐxGûè9g@ßñ¾z½¾  ÀËË‹¼nÍï˜_Ïž=KJJ˜%ÅÅŽzõ’ª=VBQ”···ƒƒC¯^½Þ|óÍœœz“ðhç‡û¯Œ%¹-žCÜ¡¾û÷ï ÿìhß=ç è;Øw ²²òÌ™3£FZºt))iÍ£££V«e–hµZÖïÄv`Ò¤I©©©uuur¹<&&¦gÏž×®]#›„Ï@;8?Üø±ä#·ÅÂÀê+ñàÁƒ!C†¤¦¦Ò%í;À=úó`^Š}î¹çšššHyk~ÀüÚÖ7©¥|ÿý÷/¼ðyÝžþKã…3¤%JJJÆŽ›’’Â,ìPßÞ3ÀÕŽ¿z½¾´´ô§Ÿ~êÓ§ÏþóRÒšßÌ‚æçéé©T*™%<èÖ­›Tíi“'O>{ö,y-|Úåù±ä#·ËBµß¯„B¡xá…–-[6aÂfyÇù:\íõ;@ôìÙó7ÞØ½{7=¼5¿`~C‡ÍÌÌd–deeùùùIÕžÖ¡g ËŸvy~,ùÈíò„Píô+QTTôÒK/­[·.88˜µ©ƒ|ÎW»ü°–••‘×­ù@ó›8qb||<³$>>~Ò¤IRµ§uìÝ»wôèÑäµðh—çÇ’Ü.OÕ¿eee/¾øâ7ß|ÄÝÚ¾Âg€«ý}¸ÎŸ?ÿ裒׭ú°p½½ª®®öõõ]¹r¥R©T*•+V¬4hF£‘º]-)((hß¾}ÅÅÅZ­6//oåʕݻw¿rå Ù*|ÚÁùá~ù-ùÈmñ„pÏ@GøJ >üçŸ6´µ#|„Ï@Gø<ÿüó‡*--Õjµ÷ïßß¾}{ß¾}ÿýw²µ5¿`ƒîÝ»âîîîîî’ŸŸ/u‹ZXrròk¯½æåååààзoß3fäææ2+Ÿ6z~„†Zò‘ÛÊ 8á+ÁûñU*]¡Ý„Ï@Gø¤¤¤Lž<™|ÆÞ½{‡††^¼x‘Y¡Õ¾2½ÿ?Àzp @` €$€@` €$€@` €$€@` €$€¬B&“IÝ›†€€¸0¬B¯×KÝ›†h233Ÿþy77·îÝ»¿÷Þ{µµµÌNç™3gFŽéìììããóã?Òå2™L§Ó­X±ÂÇǧS§Nƒþî»ï˜‡ر®®nÁ‚ÞÞÞÌ7R(óçÏwww÷õõýôÓOëëë©¿º¿²¿ÐG ÷JJJ5j”›››››Û¨Q£Ž9"¾…í–lÞ­[·zöìùÝwß•”””””lܸñÍ7ߤÿûÍÍÍíÞ½ûO?ýTUUõçŸúúúž:uŠl¢(êÝwßýüóÏÿ÷¿ÿi4šÓ§O8ð—_~³ã¬Y³È&fK °}ûvµZ}ïÞ½°°°Å‹ÓõYm¦K.\¸Ð­[·={ö”•••––îÚµËÓÓ3==]L Ú10@ðæ›o~ýõ×Ì’åË—Ó 7cÆŒ5kÖЛ:ôÏþ“¼¦(ê‹/¾`îxäÈ‘§žzJÌŽëÖ­n•R©8p ]Ÿµ•. ‰enÚ¸qãäɓŴ C´ÞÞÞyyyÌ’»wïÒ 7hР۷oÓ›”Jeß¾}ÉkŠ¢îÞ½ËÜQ©TzzzŠÙñÞ½{¬fÔÕÕýç?ÿ2dˆ‹‹ B³··§ë³*Ó%ýû÷/,,dn*((0`€˜´c2=&JØ<FãììL—ÔÕÕ¹ºº’ÿ~;uê¤Õj™õíììt:õ×V;»¿ÍöÉdbvÔjµŽŽŽÌ­¹¹¹_ýõàÁƒÝÜÜêëë]\\È¡ècrßÅÙÙ¹ªªªS§Nô¦†††.]ºÐ×ZÐŽa@н{÷ââbf óO¢¢"æ/k¢+Û˜„wd¥/EQûöíÛ¶mÛðáÃÝÜÜ(ŠÊËËÓxooï²²2fIYYY¯^½Ä´ Ã÷  Þ»w/³ä矦_O˜0!11ьÚºc]]³¾cÇúµ³³3«3M HJJb–>|8 àÿÛµC–…8ŽãÁ ½"¾“Ö½Áb[0ylƒ¯B°i¶Ý0\ƒIA‹¯@nÌ¢F…'CPžçq<Çäû‰ÿÝÝ~aãÏn÷fXàãüÓV7€?Øï÷Ùlv8j­µÖƒÁ@)¾¿»Ý.—ËF£ .—‹çyg©žW‹<±V«)¥‡ƒÖº×ëU«ÕpX¡Pp]÷z½>ße¹\f2™û)hß÷Çã±”rµZý&!ðÁxÊxX¯×årY!¥lµZ¾ï'“ÉÇ«•J%•J !J¥’çy÷úíí­‰ÇãQ)%¥L§ÓFã|>‡Ãf³Y>ŸO$aåq×u-ËB!,ËšN§/Ã|_> '€XšÏçÝnw³Ù˜ "þñ`Ûöb±8NA8ŽÓl6;ŽéP¢ã ˆ‡ÉdÒï÷·Ûíív+‹ív»^¯› :0° €4`  `À3Íýk§™IEND®B`‚gsl/doc/images/movstat3.png0000644000175000017500000032560213536675317014245 0ustar eddedd‰PNG  IHDR@ ô¢9 bKGDÿÿÿ ½§“ IDATxœìÝwxUU¾ÿñµ““Þ =¡·HWɈˆ 0ô"ˆÎ€½b/Xø!XFttÐÑÑãÈŒql(5"H¡PRNz9å÷Ç›c!}Ú÷¼_Ï}î³v9{“Ͻøe­u4§Ó©_ä퀦ÐÀ€O£ŸF >| ,ø4Xði4°àÓh`À§ÑÀ€O£ŸF >|š{X‡îÑ£‡¦i®'sss'Nœ;qâÄýû÷»µø576°œNçµ×^ûä“Oºž,//¿ð  ´oß¾}ûö 4hôèÑ•••î+~Ms:nzô¼yó6mÚ´`ÁM;þ–_|qÆ ï¿ÿ¾qÛŸþô§aÆÝ}÷Ýn*~Í]3°6mÚôæ›o¾úê« Î/^¼xÚ´i®g¦M›¶hÑ"7•ç–VUUÕ´iÓÞy瘘˜—²²² àz¦ÿþÛ¶msGÀ-Ko¿ýööíÛÏš5«þ.KCCC+**BBBŒ›ëêꢣ£kjjšx Åb±Ûí¦× ¹i¯*‹éO\´hQVVÖßÿþwŸi·ÛÝ·W<õ ÿEŽ2£„(!Ê@Ž¢ ä(!Ê iš›žl~ëøá‡‚ƒƒ½šPTTÔ¦MãLaaabb¢ée@ó÷ÀÊÎÎîܹ³æB)e ÒÒÒ6oÞìzÿ–-[úöíkzÁü–óÆI¥Ô%—\²`Á×û,XpÙe—™^dðÄS×…¬eee ¸é¦›n¿ýv¥Ôk¯½öÎ;ïlÞ¼9**ª™O€Ÿ"DÈQr€ DÈQB” DÜ—£ù3°š³téÒuëÖ¥¦¦¦¦¦®_¿þ‡~hº{€@æ N±¢ ä(9 @ˆ¢ ä(!Ê@Ž¢ rf`!`]ýõÞ.&˜={¶·K€ ÈQB€e GQr€Ñ4ÿhpÒˆðqÌÀ@€¢à4dffz»˜€ DQr€e GM£%vLXXX›6mFŽùÄO8pÀÛuA ””o—£„(!Ê@Ž¢ ä(!¢iþ±·{`5ÍøýØív«Õº}ûöÏ>ûì½÷Þ{íµ×&MšÔüœ1÷uü£sA‡¥iþ~6mÚ4f̘åË—§¥¥ÁÇN ›¸ã´}öÙ÷Ýwß¼yóŒ3yyywÞygLLL—.]f̘Q]]­”Ò4M¹,BlúfÏ£%ÙW\±bÅ ãpĈƒ>tèвeËöíÛ÷ÄO(¥ôΨó˜¦onœ9s4_2gηüN^FF†·K€ ÈQB€e GQr€Ñ4ÿX;¦±Æ­I'ûýTWW'&&VVVžx©¸¸xÈ!ÙÙÙM|¼Ñ›OfΜ9§lryÒìÙ³éaàIîkà0K2‡Ã¡[X]]ýä“OöîÝ;22RÓ´ÄÄÄ}ûö샧u3€[ùÇÌ&f`5íd¿ŸmÛ¶M˜0a÷îÝJ©{ï½wÇŽsçÎíÙ³gTTTuuuDD„þ©?ÞÄÍbÎÄçŸ~Áèã>úhþüùŒŠŠRJíÙ³§‰žÖÍ(¬K— DQr€e GMó™MÌÀjZ£¿ŸÍ›73fÅŠ}úôQJ%&&îÚµ«uëÖúÕ‡zè…^Ð?aµZCCCÏ6q3@£˜…f±ÛíÅÅÅ?þøãC=4f̘üãz÷J)5~üø{ï½÷ðáÃùùù/¼ðÂÞ½{OuëÖí«¯¾²ÛíÆ™&nð0XBhš¦iZddd¯^½}ôÑèèè_~ùeâÄ‰Æ ¯¼òŠR*--­W¯^Û¶m{çwŒK/¼ðÂŒ3ÂÂŒߛ¸ÀÃüciKaµZãââ¼]ZŠ DQr€e GQ–ð ¹¹¹Þ.& GQB” DÈQBDÓücf3°|3° h`À§ÑÀp222¼]L@Ž¢„(9 @ˆ2£„ˆ¦ùÇÞRìàãÜ×À±¸ã¡Þ¥iÚÉ.ì—èƒ 2, À+6°\û>´ü{`)uò™YÈÌÌôv 09 @ˆ¢ ä(!Ê@Ž"š&pVÓ4M«¬¬œ1cƇ~˜ŸŸ¯·®Œ‰Zš¦UTTÜ{ï½üqPPÐ7Þøì³ÏVWWßÿý~ø¡ÝnŸ:uê‹/¾h±XN÷f¥ÔŠ+zè¡-[¶´mÛvÖ¬Y7Þx£QÕÖ­[zè¡•+WFDDLš4é¯ýkõ›õÒ¼¼¼¹sç¾÷Þ{­[·ž4iÒ“O>®¿Âf³Í;wþüù‡JMM½ûî»ï¼óΦ±µëV׬[}f¡¸CØÐóB‡žçí*JIIñv 09 @ˆ¢ ä(!Ê@Ž"šæ+ìÎx%à‰Ô4íúë¯3fÌÅ_Ûà6MÓ®»îº‘#GN˜0¡°°pêÔ©'NÌÊÊ:ÿüó'L˜PTT4uêÔ«¯¾úî»ï>Ý›wîÜ™žžþòË/_|ñÅ;vì˜2eÊÛo¿}Á(¥²³³GŒñè£^uÕUJ©… ®[·náÂ…þÈf½T)Õ¹sçÙ³gOš4éèÑ£?üp×®]çΫ¿â–[niݺõõ×_ß®]»õë×ßpà Ï<óŒ^ÞÉ”½öBùk/œAFn}ǃ1w<èí* îÛÊ)XóæÍ»ï¾û½MÓ´¿ýíoz÷G)µzõêßÿþ÷Ï<óŒqæÇ¼óÎ;ùå—Ó½yÚ´i xàôK‹-zã7þ÷¿ÿ)¥¦NÚ³gÏY³fõÌž=ûÉ'Ÿ¹fÍš“ÿ¦i`èh`™ÙÀÊÉÉéܹs£·iš¶ÿþŽ;êçKKKãââœéÔ©“Õj=Ý›»wïþõ×_÷èÑC¿T\\ܯ_¿(¥Ú¶m»zõê®]»õdggwïÞýd ,S^Z]]ý—¿üåƒ>ÈÍÍ­ªªRJÛl6ýÙÙÙ®õwëÖ­¨¨¨‰_5 , ,3Xµµµ!!!Þ¦išÃáÐ4ÍõÒ‰gÎàæ°°°ÚÚZ×—Ùív¥”Åb)//×÷ŸÒUUUEFFž¬eÊKï½÷Þ;vÌ;·gÏžQQQÕÕÕÆÏe·Ûƒ‚~³Áÿ)#`¬‘‘‘‘žžîí*ÐRä(! @ˆ2£„(9 @ˆ2ÐÀ2³uâ£\{R§¼ÿÌnNJJÚ²eK»víN,òtg`™òÒ:¬]»Ö˜·µmÛ¶´´´“ý\'; `p_÷ èÔ·À £FZ´hQ£—ÆŒóÁ¸žyÿý÷ÝýÒªª*×9_ï¼óŽ)o0ÅÛŠÙ³g3&""â’K. _³fͼyóôýÔgÏžžž7yòd¥Ôÿûß]»v¹û¥ãÇ¿÷Þ{_xá…    ìÝ»×”7˜ŽX’––öÕW_ý÷¿ÿíÒ¥KRRÒŸÿüçûï¿_¿Ô½{÷ï¾ûîË/¿ìÚµkß¾}·nÝúæ›oºû¥¯¼òŠ~C¯^½¶mÛÆ ,4SFF†·K€ ÈQB€e GQr€Ñ4ÿØØˆ ˜|{` @ÑÀ€O£±Z­Þ.& GÈQB€e GQr€Ñ4XðÜÜ\o—£ ä(! @ˆ2£„(9 @ˆhšlŽÎ&î>ŽMÜ h`À§ÑÀ‚‡dddx»˜€e GQB” DÈQBDÓüco)öÀðqì€E ><$33ÓÛ%Àä(9 @ˆ¢ ä(!Ê@Ž"šF ’’’âí`r” DQr€e GMóÍÑÙÄÀDZ‰; ,ø4XðŒŒ o—£ ä(! @ˆ2£„(9 @ˆhšì-ÅX>Î} ‹; ß´zõêÊÊÊ„„„´´´ððpo—Ó,þ1³‰X¦ˆ-++SJ­Y³føðá&>™o!„ßc=³ ä(9 @ˆ¢ ä(!Ê@Ž¢Ç:tHï^)¥òòò¼[LóùÇÌ&f`´ÜÊ•+GŽ©ÿö·¿M:5''§OŸ>-83°ÐR»ví2ÆyyyÏ?ÿüàÁƒ£££¯¹æ/VuJlâ(\X»wï^¹r¥RÊáplÛ¶Í{E3°à!V«ÕÛ%Àä(9 @ˆ¢ ä(!Ê@Ž¢Ç¸6°¾øâ‹ÂÂB}œŸŸºš>}úùçŸÝu×ýôÓO¦Õw4°à!¹¹¹Þ.& GÈQB€e GQr€=f÷îÝÆØn·ã‚‚‡ÃÑüç¾õÖ[«V­zï½÷–,Ybf‰ñÍÑÙÄ …ìv{TTTMMM£W Z·nÝÌG½üòË÷Üs>¾å–[^ýuÅ&îh¡}ûö¬{¥”:räHóõöÛoヶ¨¬f \מ¨ùÛ`íÝ»wóæÍÆa^^^‹ÊjXðŒŒ o—£ ä(! @ˆ2£„(9 @ˆž±ÿþ&®6VVV–ë!3° Gzzº·K€ ÈQr€ DÈQB” DÏ8|øð‰'SRRôÁ7° êêêZX[Óh`£Ekœ;v¬>hþ­[·º:ŽC‡™QàIÑÀÆ ¬³Ï>[$%% >çœsô»·Á²¸õé€ÁXR ¿FŽ2£„(!Ê@Ž¢ ä(!z†ÑÀºüòËg̘¡W¯^­š¹„pÏž=UUUJ©víÚõë×O߀ŸX"..ÎÛ%Àä(9 @ˆ¢ ä(!Ê@Ž¢g ¬¶mÛ'Ow–±VZZZûöíõ13°ÐRåååJ©›ÛÄ}´ \)¥THŸ³Úô ßÐÌXÆXiii:tÐÇ4°ÐRú«á‘!O´/{ñiã|prÛ«’b?,(­ªª*--uý‚ÂF–uÖYF‹%„B_ GŽ2£„(!Ê@Ž¢ ä(!z€¾~𮤨çíù‡_LŽx+%>TÓš3 kÆ ú`àÀ[B¨9N·¾Àšæuø¦Ï>ûlÖ5“¿ëÖJ;É +Êk;½ýш G7zµ¨¨(11Ñjµ&$$8ÎÐÐÐÒÒÒÒÒÒääd¥TëÖ­ Ü×Àa€|‡º£u”ѽ²tïqùUZh¨qÃÈèÐþõdüñÇ•R7nÔ[TguVXX˜±Þ°¬¬Ìm…+E :86&Ì8Œ½ÿñø§ÿÖú󖽓·m¬ùiʼnŸÝµk×›o¾YQQa¬0&a•––º¯xÿØ[Š=°Zâãóú(­ß£=êšb{Ƹt`É×êÞëƒ-/Œ¾ùž˜{uýìСC{eg]6ê‚íÛ·dU×=÷êaÆ)¥ºvíš““£”ÊÎÎîÖ­››8w<>ÄáH++4ŽÂFs½ØqÌøg+ì×Fë‡ïý#bÂdKçnúáþýûƒ·oy¾s‚Ú¹ñwAJµ‰¶9Uìá}J SžšÅBá.û.Þi¯?ˆŠ znƒ–vêu¸Î¡µµ%LwÖÔ臟}öÙÃÉQ®7[4U9뾊¿¥œNÏìãN bµZ½]L@Ž2£„(!Ê@Ž¢ ä(!ºÛº¼lŒ#F^¤,! nèÑÀœ#Ç;Pu[7•>ýˆ>Þ³pÁ9‘¡ îWv[éÜ™EÓ§ÆGGë'˜ rss½]L@Ž2£„(!Ê@Ž¢ ä(!ºUee¥¶eƒqzîÈïéׯßÖêoÊjŽê³…µÖäì™Z´Ï8ùkÍæ²ÉUÍÊï§TÕÇn団³‰;À™yçõŽzyv˜V¿I{ò·ë‚;tjpÏ?þ˜žž¤ýЧ]GU¿Ø0$m@~qIÂÁú–Ý©Æï)ìýjç$gyý|+§RÚW¼¬¼öõ×_¿õÖ[ÝÔÀa€d?Íÿ§Ñ½ îrb÷J)Õ·o_¥T™ÃyÞñåœuY›î•RêµÂŠ­Õ6û9#“>]ܾ£~RSê/íc#‚4–àLlÙ²%!7Û8 žÞèm íÛ·WJe”TØû>ñ†ví…ü ¥Ô¸qã‚ÛwŒÿË?T°E¿Ô!$øŽV‘lâ 222¼]L@Ž2£„(!Ê@Ž¢ ä(!ºÏ›o¾™u| öÐa#Nv§> K)µëœ \ÚPU·íò©uN§Rê÷¿ÿ½R*ôì¡QSo6n¸£u”åÈAËnÀ?ö–b, Û5×\“‘‘Q^^þòË/ÿéO2ë±}:§~UR¿‚P%/ݜܶÑ;ï¹çž—_~Y)õÌ3ÏÜÝ.ÎQ\TPPðÖÛo/-«ÍoÛñ‹/¾8묳z÷î½}ûvý~gyiþÎsÕoâ~$2fàº_Ù @&§Óùõ×_ïß¿¿¸¸xñâÅ&>9µ¼Øè^Y:w;Y÷J)•––¦¶mÛuÝ!·?¸a`ú3GÊ×TÖöíÛ·oß¾íÚµ7nœq¿sïcÆa\u¥‰e7`qߣÐ{öì)))ÑÇK–,±ÙlËñ¦Íúõë7mÚtäÈ‘Q£FwÞyÍlMMÍËñ)Q¡ÃßKg,!ÌÊʲÛíãÇ<¸~3¬>}úhš6zôh×–R*òÿ®ÉYüi⺌œZû[z+å®U„ÌÀ‚‡dffz»˜€e GQB” DÈQBܰaƒ1...^³fëÕ¿þõ¯7ß|óÿûÿïwÞ9­ÇŸç²VØÉ7ÀR. ¬;v|ûí·Ë—/饗ô3}úôQJ]vÙe#GŽlð©Òk§¿^X9~OáŽêºÓªí´ÐÀ‚‡¤¤¤x»˜€e GQB” DÈQ ±®®îÚk¯|X»©cqÇCà>ýôÓ£G*¥®¸âФ¤Sì €¿p]Bh³Ùþò—¿DEE9NMÓšøÔ‰±Z­óçÏWJÅ-ìÚúìÐ&?~èÀ+ã&ï-ŽŽŽÖ4M_©wèСS¾¨fùñà º7µ ÐÕÙgŸ=lذŸþùºë®Ó4í­·Þ:å¶ñ±±±FËMh`À|O=õÔ¦M›”RgŸ}6 ,€ ¥¥¥'¶***>Ü®]»æ?Ç肵¶ý75¡Ï Ý«Uu+ËkûG‡_¬ŸI VÔ'íÊ+¯|衇ÔowÅj”£àHÝîíúØîTUý‡6¿Â[n¹%''çøƒRªU«V­Zµjú~c,÷a,xˆ¿¬gFÓÈQr€¢Ýno0I|Ž€e Gü"D×éW®öìÙsZÏÙ½{·>x¾}lŸðãS‹‚Ûuˆ¾ñÎVï}~Seè_ò˯Ë9šQqü‹oÓ&!!11Q?¡†$þóƒ ˜8ýpܸqú`wí½¢Jã¶Q…Z%ÄëãS4°œÎšŸVG+ÊkN«¥”jþô+Å ,ø)ã‹´i`ÄX¶l™>5jÔôéÓ»wﮞÁ»[G%Yê{2ZhhÜS/jaáÆ 7Þx£1ÓêïG+j­Œ¯*o³«¾‰Öt«n×6Ga>.s8©ª3èÌÀ‚V«ÕÛ%Àä(9 @ˆˆÑá¨ÿªo£“%’ø!Ê@Žø~ˆååå6lPJþùJ©nݺé—~ýõ׿?çðáÃqU7¶Š4ÎDß|¥k×{¢¢¢nºé&}œos|TRm\Šùôý0MS§j`Õ¬XbŒ¬¨µ9U|||ó‹<]=öXfffNNŽû^A ’››ëí`r” Dć KÅçQrÀ÷C\µjU]]Rªÿþú·ò ¬Óšµk×®‡’£õ&”R*¸M»¨ëï8ñ¶»îºËXÄ÷ÏÂJ‡qaÿÞ‡ÛD«S5°ª¿ÿŸ1þ¾¬&,,,22²‰û[¨cÇŽguVçÎÝ÷ Xð~ýúy»˜€e GQñ!HK|Ž€e G|?Dcýà„s‡W.|§ø¾›"Ÿ¸tbŒR*??¿´´´™Ï9¸võqÇW ÆÜý¨qâm;vœÎ®±-,®2.ÝÒ*òúÄÈÚÚÚ²²²F_aÏË­Û–Y?vªoËjܺ~Ð3Ìo`­Y³æ¦›nêÒ¥Khhhûöí/ºè¢O>ùÄõ†ÜÜ܉'ÆÆÆÆÆÆNœ8qÿþý¦×ï2–Ên`ÄÿøÇçŸ^)uYløMk¿±þùÑê%_Öü´ò_í"wMœ‘³sg3ÕnÉ¢àúÙWÊÒ£OÄ¥WžìÎûï¿_)Õ©S'¥Ô“‡ËÔÕÿ‘¤ÔŸÛÅ<×>¶èð¡F?X½äøô«µ•µ…6‡[×z†ù ¬»ï¾{àÀß|óMyyùÖ­[g̘ñôÓOÏž=[¿Z^^~á…4hß¾}ûöí4hÐèÑ£+++›~&ü‹Ñ·’½ ¬X±b)¥ IDATáÂ…!šöTÛ˜vŠ ®©v½:8"䥱aO=èüíùFU/ý¦Ç¡½ÆaÌôUÐI;3ƒ ;v¬>«Ìá¼?¯Ôl\štÏuÆNí¿y‹Kë«Ò¥Ôé~¡2¿õóÏ?OŸ>½W¯^¡¡¡‰‰‰¿ÿýï?þøã—_~Y¿úæ›ožsÎ93gÎLHHHHH˜9sæ°aÃæÏŸozð5Þ.& GÈQB@|ˆ²„P|Ž€e G|6D›Ív×]wEkê³. ®;¯7·ggñ½78ëêœNçÔ¯;K½S;ö•‚¶ÎÝÃGÿ¡é·¿þúë½zõÒǵ!s_Õ¢¢«–Ü=…7L´ÊûÍ[öf×nÙP i_•U+XÍ\ß#\¼xñ´iÓ\¯N›6mÑ¢E(Þ•žžîí`r” Dć ,ñ9B”ðÙ_{íµÌÌÌÇÚÄ Š1NjaaÑ·ÝvþEêØ^ìJ©šUK­³X¾lÙ·ß~Û裬O?ì¬(×ÇuN•0ó×7*555%%E%Ž»´Õ‚Eù¡Ç÷̲eï*¸dDÙ‹O+[~¦üÓÔ±YqÇ·ëŠÖ)Y­Ö•+W^uÕU·ß~»~&++kÀ€®÷ôïßÛ¶mn- ,€luuu³gÏ25ñxÏ(¸CJ«-޹sFâkïïó·íÕÇËW}ñaΟgfeeø¨Úõ?Õ®_cþS‹Ž>÷üæÔ`4°ââ₃ƒCz¥Í8êû²ãgMuù[¯\üñçŸ^WS}ôƒwK¿vMÓ4°NJÓ4MÓâããGŽ3gÎý|qqqƒ­ï[µjÕôW?º>°9sæ¸N2ÌÌÌ´Z­Æ¡ë%×±ÕjÍÌÌlôOà <'ðžÀxO0å ú+¥ìv»ÿþ<'ðžÀü +W®,))y¶]¬Ñ=±tîÖú£%;ìšþ„¾’[’]s¼‡uÑáœÂÍO¬¡ì5îYV^ûK§ͬ¡¶¶6''§¨¨(''G¿Üæ¦ýV×–Rjל‡'ýß3ÇŽª®¨?™™ØV ,³~“sæÌi´Q£ÜFs›Wæùùù?üðÃ>xë­·>þøãJ©ÐÐÐŠŠŠãóîêêꢣ£kjjNþ¥iî­™™éûߊŠS"GÈQB@|ˆáááú_ðæÏŸã7z»wŸc DÈQß qãÆwžî'M_Ò´Vo:ô<×{ºuëæ8°ïË®‰‰Áõm®euA™ÿwmQQQeeåÓO?ššZùáë“3Œ\šS4ñÿ=ñ裞YUÏ?ÿüŒ3‚55ÿªËÇíÜଭÕÏßgzU|ýd±âaç¿×ᥗ^RJÍ›7ï¾ûî;³×÷5pÜ»„099ùꫯ~ÿý÷mÚÌ·*,,l0' "“á×ÈQr€b€,!Ÿc DÈQß 1??ÿÚ„ã‹Ã/º¸A÷J)5`À€½µöG–g.q,{õ¥7Þxãý÷ß߸qcíºÕÖgfWWUÔn¨¬kI·Nï¢ØjeDBÄåSŒóO·ýCl¸qøSdBqq±>f a³ 2$??_§¥¥mÞ¼Ùõê–-[úöíë2à]qqqÞ.& GÈQB@|ˆÒÀŸc DÈQß ±dϯã]ZBQW_â=gŸ}¶Rê¥Õ;‚Bõ3šRO%GkJ)µç—%ßaì°^éTs—)¥ú÷ïÆUÓ€ŠŠŠ¢o¼Ë®Õ÷vbƒµ˜ úE|…6Ç¢œý%%%úa||ü¿ÎGx¢µzõêÞ½{ëãK.¹dÁ‚®W,XpÙe—y  x†Ãá0–Èn`d‹Y»2䨶N–®=Nœ~¥Ž5°œJ=š}ØX;wV¸åÚ„HM©³øÜž¸þlPÐôý%Û«mñññ:u:ãª\XÁ:}yâ=ߔլ^û³±ŽX;vì¢E‹òóóëêêòòòÞyço¼qîܹúÕ›o¾yõêÕÏ<óLqqqqqñŸÿüç5kÖÜtÓM¦—oqmZÑÀø¯¤œÆ8rò4ÕØ&åzK)µ¶²îskµq~VÛètŒëk-0μàß–Õ(¥úõë×’ýÎ]XN§sæž#.³ÿvã©/K« 5pÌÀjÄ#<²`Á‚¾}ûFFF:ôÿûß'Ÿ|2~üxýjLLÌÒ¥K×­[—šššššº~ýú~ø!**Êô2àk\¿Âþ‹e GQÙ!º6­l6[wú;Ù9B”ðÁ•í‹óÃðQã½-%%Åè(=y¸¬ôX')LÓ.‹;¾ü°ºk¯kõS¥Î=÷Ü–f¼nÏž=Ï<óLyyùüÂÊ[ ë¢o¼SÿŸ¯ãÛ­®¨UJ•––êw h`ùÇ·ûñ-„~¤¢¢"::Z?÷Üs3fÌhú~|PõòïŠïœ¦k’Úv^¶édw^xá…Ë–-ÓÇS"þÚ>¶Áôªb»cùä[_û䳬¬,¥Ôwß}7f̘3.¬ªª*2²á²ÁáǯY³F?ýôÓ³fÍr½jµZcccÏøÍç¯ßB€ÄB€µ«—cÛÙC›¸séÒ¥eee¹¹¹›7oþ¼ÊyOžÕæÒÃq(uçë?,Û¶m›R*<<<==½%…EDD¼ùæ›;vt=Ù£GcܵkW×KÁÁÁ111-y£/°x»HC @ÍêÆ8|Ĩ¦oŽŽŽŽŽŽîÔ©S¯^½>Þ¼¹Èæ<7*D¿´µÚ¶¬¼Výø£~xÞyçEDD´°¶›nºiÔ¨QÝ»w7ÎôìÙÓwèÐÁõæøøø–l¹å#˜ñÁõÌ8ä(9 @ˆÈ‘=°àGQrÀ×B´ç²íÍÖÇuNgëÑo€u¢´´4¥ÔÒòšgVýùHùŸ”/rÙÙ])uÑE™Ra·nÝh6ÝÀ2åÞE ÒÂ’ðä(9 @ˆÈ1pf`ÉÎ1@¢ ä(€¯…X»~1άSá ‰Íü`ß¾}õÁˆ#l6ÛáÇÏ9ç×FmV‘“&M2Æ®KÛ·oïz[BB‚Yoô"–ÀdÓÀHU»a­1Þn‰¸¸ÙœöØcJ©ÈÈH×X‘‘‘ ÅÅÅú¡ŒX4°`2‡ÃaŒi`üQ톟Œqn\«æ°G®“¡”RÆ Ó­Zµzûí·MÜŽªG{÷îmݺuTTTƒK:tÖÀb !<Äjµz»˜€e GQÙ!ºî{%»%;ÇAˆ2£>¢ÃZbÛ³[ÛÊÚ!µ%O>|¸>xíµ×,îk¹ÔÔÔ»Wê·Û`%&6wý£/£ÉÍÍõv 09Ê@Ž¢²Ct%{wÙ9B”ð‘W¬X¡”ªÝ°Fû³l[M]LÛuRSSÛ´i3mÚ´É“'›Pbó¸6°âââ<ö^÷¡éׯŸ·K€ ÈQr€bàì%;ÇAˆ2£>âu×]·jÕªê Çwp_[Q—œœÜÂÇNš4éå—_náCN‹kKÆ&î4°`²Ài`$q:¼òÊ+÷÷?ãäºÊº6mÚ´ðÉ/¾ø¢‡§A¹®U”±›¸Àd4°þ¨´´´¶¶¶¸ ?*O© ú­Öozñ•®há“-O·_˜œ¡ŒŒ o—£ ä(! ;Dצ•ì=°dç QrÀB,((PJõ ‰8Ö½R­’.»á¦V­Nã[}„kKÆ ,Xðôôto—£ ä(! ;ÄÀ™%;ÇAˆ2£¾¢ÞÀbœ <Ü{å´3°€SpmZ¹~#!¾,??_)5Ð¥Ú÷Êi‘¤¤¤ÐÐP},£ÅX0Yà,!HrôèQ¥ÔàÈã ¬þƒ½WN‹ÍŸ?¿ªª*..®S§NÞ.ÇÌÀ‚‡dffz»˜€e GQÙ!ÎBÙ9B”ð… ⃃:‡×[BBúö÷jE-2uêÔ[n¹åª«®Šˆˆðv-& IIIñv 09Ê@Ž¢²C œ–ì!Ê@ŽøBˆùùùiá–cû·«n=µp ­h`ÁCâââ¼]L@Ž2£„(€ì§%;ÇAˆ2£¾bAAAßðã[-Yz§y±4@ &c,€?jÐÀ éÙ׋ŠX0YàÌÀH’ŸŸÿ›X4°| ,xHFF†·K€ ÈQr€bà4°dç QrÀB,>ZÐ3ÌeV/X>Ds:Þ®áÔ4Í?ê€RêË/¿¼ôÒKõñèÑ£¿ÿþ{ïÖ@sô‹þ¶S´>JjÓfÙfïÖãÜ×ÀaL83°b”••uÓŽÿ™ÅX¾†LÆ&î¿SPPÐç7`õñb18 ,xˆ/¬gFË‘£ ä(! ;ÄÀ™%;ÇAˆ2£^±   Íõ+{¥y±œÈ?ö–b,?òŸÿüçꫯÖÇÆ [»v­wëà”¾üòËNÞl©Ÿè“´h¥¥[Oï–äØ ~#pf`Ä(Û»Çè^iaá–Î]½[ “±Àï8vï0Æ–^}U°¥‰›áy4°à!V«ÕÛ%Àä(9 @ˆÈ1pf`ÉÎ1@¢ ä(€×C ݿLJô>Ë‹• Q4°à!¹¹¹Þ.& GÈQB@vˆ‡ÃËn`ÉÎ1@¢ ä(€×CŒÉ?hŒCz³ƒ»ÏñÍÑÙÄÀ¼ñÆ·Þz«>îÙ³çÎ;½[§´±_ÇvÎúeï­?ø*¤ÿ ïÖã§ØÄ~#p–d°µ9Ö½RAÁ–ž}¼ZA &cw€9øÑûFÄÒ­§áÍjÐXðŒŒ o—£ ä(! ;ÄÀ™%;ÇAˆ2£Þ ±æ›EÆ8â÷—x±œŒì-ÅX~dÞ¼y<ð€>n×®ÝÁƒ›¾/r:¿_³þH’¾XeéÚû%ù/öÀ€ßœXª¿ùÂè^•´nK÷Ê7ÑÀ€ÉØ àG*?ÿ1®:g¤+Ah`ÁC233½]L@Ž2£„(€ìg–ì!Ê@Žx+ĺYuY›õ±C©ÖWþÑ+eà”h`ÁCRRR¼]L@Ž2£„(€ì§%;ÇAˆ2£n Ñét~ôÑG^ªúôcœQeï8hˆûÊ@KÐÀ‚‡ÄÅÅy»˜€e GQÙ!:c,»%;ÇAˆ2£n qÓ¦MÓ¦MËÊÊjpÞYS]õå'ÆaFtë  ú$>Š``2×}¯d7°~aÑ¢EÕÕÕW]uUuuµëùªE:¬%ú¸ÐæÈKeûvßE &sÅ&î¯[¼x±R*++kÖ¬YÇÏ: ^7Ž>(©jÏZTF ’‘‘áí`r” Dd‡è:ëÊáp8N/ãV²s „(9 à¾÷ïßÿË/¿èãyóæ-]ºTW¯üÞ¶7[×9oVvêÔÉM5 åh`ÁCÒÓÓ½]L@Ž2£„(€ì,¼ŠPvŽ‚e GÜââÅ‹Jq8=ö˜>®\øŽqÏçÖš#6 ,_fñv¦AÇÊf³Y,üµà_|ñ…ëáºuëŽ=šPSYóÓ ãä…Н³ômÌÀ€ÉgÀÇ•””,_¾\)¥iZÏž=•R‡ã»ï¾«üøßêØŽ™v-«Ú¦”b–/£aQº ä(9 @ˆÈ1pX²s „(9 à¦~øášš¥ÔÀ¯½öZý䊯¾¬ül¡qÏ»ù¥J©ààà:¸£˜Bó‹=55Í?ê€Rê¶Ûn{ýõãßëTTT”àÅzé›o¾ùÃþ ÷.\سgÏÁƒ+¥ÞêÞf|Xý=ÎÈèöT:œ;vÜ¿¿«•Á} 6#€ÉgÀ—½ð z3eÒ¤IS¦Lq:mÛ¶=§ªÄè^)¥J~wQåº×ë}K`²7q÷V%€@VRR¢|ðA¥”¦i#Gœ÷pr´qCHï³6õ?W³ƒ»£±Z­Þ.& GÈQB@vˆ :VŽc»äÊ#;ÇAˆ2£îÑxfbb¢>k±§†ëc-44þùîÍËÓi`ù8XðÜÜ\o—£ ä(! ;Ä+Á3°dç QrÀ!–––êƒØØX¥”²ÛÒ÷í0®F\q¥K÷è‡;v4½˜ˆ<¤_¿~Þ.& GÈQB@vˆ³–ì!Ê@ޏ#Dc–ÞÀª^ñ}tYý¢B›¦Eß|·R*;;[?Ó¹sgÓ €‰h`ÀdÓÀø¬êêêšš¥TXXXxx¸Rªòã÷«Ë,ÑÁmÛ+¥vïÞ­ŸéÑ£‡7ÊDsÑÀ€Éh`¼ÎX?§”²9T“±Ì¸ú¯âj¥TMM¾t1((¨K—.Þ(ÍE ’‘‘áí`r” Dd‡8 ,Ù9B”0=Äë«>[¨õeV×-Ï;l·Û³³³õ?¤RSSõYZðY4°à!éééÞ.& GÈQB@vˆÓÀ’c€ DÈQÓC4Xú ¬ê¥ß—>(®²ÙlùùùÆúÁž={šûv˜ŽLÖ c%ø[>Ëu ¡£¸¨nÇVýСÔbkR*//o×®]úI6Àò}4°`²À™ðY®KkÖ¬T‡~¸?4²ÈîPJåå屃»¡ÉÌÌôv 09Ê@Ž¢²C œ–ì!Ê@Ž˜¢ëÂÚÕ+Œó¹Éôk‹%„¾<$%%ÅÛ%Àä(9 @ˆÈ1pX²s „(9 `zˆ®Kk~:ÞÀ*íÞW°„пÐÀ‚‡èÛæÁß‘£ ä(! ;DDZe:Á{`ÉÎ1@¢ ä(€é!3°R5‡ýðA}¬ED÷¬wîÜyèÐ!¥Thhhjjª¹o‡éh`Àd3 ೌX=¬ÆÉÐ!ç´;6Õë믿v:J©îÝ»[,ÏWˆÓB &£ð:£•šŸgœ 1ªk×®ú¸²²RüßÿýŸ‡kàÉÈÈðv 09Ê@Ž¢²Cl°fPpKvŽ‚e GL±¤¤D)¦i­òö'ÃÒ/ìÙ³çØ±c3š¦]wÝuæ¾î éóå|œ¦ùGPJ Þ­-G ’‘‘áí`r” Dd‡8 ,Ù9B”07ÄÐ_·¬‚-&>^¡9No×pjšæu@)]QQa>ÿüó>ø ëš•ÇõعIGßþ@Ìô‡¼[Oàp_‡X0YàÌÀø¦„üÆ8tÀ`/V³ÐÀ€Ét¬ØÄàQ¶ºk‘qrÖ@/Ö³ÐÀ‚‡dffz»˜€e GQÙ!Î ,Ù9B”01ĺ_wû>ܪ˜¸ ø³ž /¢IIIñv 09Ê@Ž¢‚Ct:ŽcÿÙ ÜÀœcà DÈQC´íÈ2ÆURÍz,¼‹}øá!qqqÞ.& GÈQB@pˆ ºWJ©òòòüqÏž=N§sÚ´i^©ÊMç8QrÀÄëvl=>NífÖcá]4°`¦ç[}óÍ7óæÍSJ…‡‡_zé¥ ,帑kKëÖÓ‹•ÀD,!€™Nl`þ©¢öÂ_ö4ý§Ìå¾3°`¦SNwzã7œÙ½{÷£>ZUU¥>ðÀGŽ1«ž£GÎ;w÷îÝf=àË\×n«¶ÅÄÄx±˜ˆÌtÊÖ{ï½WYYézf÷îÝûöí{饗”Rß}÷Ý[o½UPPp¯v8k×®mpò¹çž+--ÍÌÌ<ƒüNÝîíÆx öb10 ,x‹Òe GÈQB@pˆM4°"##•R%%% .t=¯OÒçIÝ|óÍN§3??ÿtßët:ï¸ãŽ'žxÂõä^}õU¥ÔÖ­[Oò¹œcà DÈQ³B´í:ÞÀ:aÊ3á h`ÁCÒÓÓ½]L@Ž2£„(€à›h`ÝvÛmúà•W^qÝ c×®]J©²²²áÃ‡çææ*¥Î uß}÷½þúë?ÿü³ë“Ÿzê)}e¢›X‚s „(9 `JˆÎš[î^}ìPª ’õƒrÐÀ€™NÖÀÒ4í¡‡ŠŽŽVJmÞ¼ù›o¾1.TëƒÓ]BøÈ#üíoSJþúë¯Æcß~ûm}ÌB¶ì]ÊQÿÇPn­ÝëÝz`"X0ÓÉXqqqmÛ¶½õÆ-šRJ=÷Üsúy§Ói´œ [·nݰaÆ š³›û_|a8è±6Ñ×·Kø÷¿ÿÝàÒ¡C‡NùFcVdd¤Rª¦¦fÓ¦M+V¬ÐOŽ7N°;g«³ÊÓ‡¥öÕÚ™%‰ÅÛ@cßôö!Áÿè—d Z_YwqlX˜­¶éŽØ¸2º¸á—žr–ÍfÛ¿¿RJÓ´é£~wéÎõ¡š–xïµSÿ¤•;œÓ§Oÿꫯ”{f`|‡íàã+ÔÙkœNX’0 ’‘‘áí`r” D‡¨oâ>&&lI·Ä¡‘!Cƒ¯ŒwÝåêÐÐßåÔÚÿ]\5:÷ IDAT»ëàè›îªQõ—‚l¶Ú§މw}ÚÑ£Gëꟷ¥”ª¬¬ÌÍÍÕ[ftmwOnf÷0KJhptYÉyaÚâ;¶m3nܸèèh¥ÔáÇ 6ÈZHpŽƒe GZ¢}ÿ^c¼¯Î®”¢% ,xHzzº·K€ ÈQr€âÎ;«««C»Ý> "d~§ø„àFþªs÷#e×Ý9ò×£,ÝVd¼ë‘TWmÙ»îêÐÊõ~‡ÃqøðᓽúÚk¯Ý±c‡RêúÄÈ»ÂíAŽßl¿uAtèʤà’Ûÿ8¸gýLvvv#OiI9,B”hyˆöýûŒñ¾Z»RŠ=°$¡€Y¼xñçŸn:ª«^érÂ÷ Ú£cãžz1ú–{“““mN¥”*((Ø¿ÿ'GËW·ÝfïìúÁ“­"´Z­Ÿ~úéý÷ß~tèmÿO”p‡½æÇeÏ©’øà ýgðü‚íÀñÖÞZf`IC -²|ùòwß}×8ŒûüƒîaÇ7Z}õhÅÇå¶:/ü&òŠ«•RIIIú¥‚‚‚}ûö)¥ž>R^¦Õÿ½4B9ç¶‹ RêüèЋbÂÔÉ÷q_¿~½Ãá°ïÍ~£c¼åX¿¬Üá¼ó€UÿïCJMå¿Sã5¥Ž=jÎÏ ð=¿YBHKXð¾÷Gr” DÄ„h·ÛW­Zõý÷ßçåå)¥”­.úÇŒ«Û»ô÷ñ×·í>tתõíºtÕO&&&+¥JJJô5}ÅvÇ×zŸº(&ì—^IÿIMXÿ^J¼uGV£¯^·n]|pÐ{)ñ±ÁÇÚWAÁOÙ">µV_³¯øçʺR»Ó¸y`DȨè0ÓXbr d„(9 Ðòm¹{±ÞÀŠ‹‹ká3á;h`ÁCRRR¼]L@Ž2£„(€˜7nÜXZZj·Ûÿõ¯)¥j~\\^¦_* õß/ÓÓÓCBB\?Ôºuk¥”Óéܰaƒ~òðÙç„9׸'ÉRÿ×Ô11a£þög÷‰¯Þ°vÍ⺄_o{ÿÌÃ{*¥öÖÚ/Ï)¸«@ë?ȸzS«HÓXbr d„(9 ÐÒNûo—Z,–Þ½{·´,ø Xð:ß2£ ä(! &ÄåË—ëƒ÷Þ{O)Uõå'Æ¥µáñZdT£Ÿ2V ¬N))qs^ÐÂÂN¼9Än+yøgm­Rª¢¢B)¥ì¶Š½ñ讵éQ¡ÆmÎß_uÝ]»v5΄ÇÅ·š9×8ªåæœþØ192B”haˆŽÂgU¥>.µ;‹íŽþýûGFFšQ| ,œ¹eË–éƒ;vü¼|Yõ²oKk£Oö)£µyóf}’’béÜ-æÙ5QõÛ±ÛŽ¯ÿSuÛ3KºÕQ\ôÚõ\5ý†‚+Ç”>÷x;íø?WÛÚÌý»Rʵս{÷´¡‡é‡šRÃön³Z­Ï=÷Ü­·Þ:f̘nݺ™þ½„¯°¹n€UgSJ{î¹'½~ÈüÖÊ•+¯ºêª¤¤¤¸¸¸sÎ9Çõ+it¹¹¹'NŒ8qâþýûM¯`³Ù222ŒÃµŸç¬®ÿ>ÁÜZ{NÄI·ÎMNNÖÕÕÕú@_9uÍ ÛfÿmÄî£×ç–œµ3ÿskµñ‘ê¾.˜pþÕÛÖv_ñ•m÷v×§åÖ9ž±´  SJuëÖÍ8ߣG¥TÔÔ[Œ3ÃË s–~÷È#¼ñÆßÿýž={>|†?¼¯ÊÍÍu:§¾d±»l€¥• ,aÌo`9²  àóÏ??tèÐ+¯¼2gΜùóçWËËË/¼ðÂAƒíÛ·oß¾}ƒ =ztee¥éeÀ׸þíþ‹e GQ!nذ¡¬¬Ì8 ÿe­1^\Zl±4ö!¥\f`RSSõArrrN­ýÛ²šR»ó‘C¥û뎟 £èh°úMk¦ÊáÌêØmÕÅW'Û!¾Á ,¥TøEãí)]ô3AÊ¾àŸšËŽ9ÒŒô¤|0ÇY³fM™2¥ªªÊÛ…ø  g€haˆ6—Eâ4°D2¿õàƒþðÃ#FŒˆŒŒ:tè‚ ž}öYãê›o¾yÎ9çÌœ93!!!!!aæÌ™Ã† sípAªôôto—£ ä(! #Dc,¥”ESéÇ7¤Rß•ÕÄÇÇŸìƒ XqqqÆÖ'íÛ·Á©ÔKª†í>Z|ã½wÍýËÅ_¬Ÿw¥7°TPpøôÇßµ;kf›hã°…3°|-G§Ó¹dÉ’?üpäÈ‘‡òv9þÁ×BÄ™!GZ¢}ßcœSkONNvý' `~ëùçŸ×´ãÿ¬Õ½{w×E‚‹/ž6mšëýÓ¦M[´h‘éeÀÝŒ–Åb\ÿwËB›ccU]bâI÷À2–ê\¿yª}ûöëׯ_¿~ýòåËøkí²œ¢Ãç5np(õnQå9E÷å•ÚC‡ ›>}º~566VÿŠCul ¡R*qü„Ÿ*wÁîhuU|„>ná ,_óË/¿è}«uëÖ 6,++ËÛ€‡¸ÎÀÊ©±wÞy^,îàöMÜ¿þúë³Î:Ë8ÌÊÊ0`€ë ýû÷ß¶m›»Ë€é¶nݪF=&æøþP^cwª„„„“}°Á ,cý`C† QJÙœjQr—¸9/8´ §R,]”Ò÷`b¥TrrrçΕR®ÿ€ºcÇŽììììììÁƒëg‚‚‚ž©¶ØÆ=µ‰ŽÒ””VqqqZZZ||¼ñ#+¥8ðÑGy±*ð$Ûo÷ÀºôÒK½W ܽ ¬¢¢¢™3g¾ôÒKÆ™âââÿתU«¢¢¢S>JkÌœ9s\WÉfffZ­VãÐõ’ëØjµfff6z‰'¸ï ÆU¿þ)x‚k”þûSð„FÿÿÑï~ŠBFF†×kà -|»ï¾ëõZø»Ý®OöÑ4mì°!Lˆ0nû¾¬V)eü­ïÄ'4h`é3°N¬ÁhÇ,Y²$òÊ?½ßéქÿ)®š2eÊÞ½{¿úê«3fœøS´jÕªk×®]»v]»öøž\…a‘ÜW\å¨ßB+ÉtGë(¥Ô‘#GZò{ÐOz=‹½{÷nÛ¶ÍõS:= ù¿(o=aÉ’%^¯'´ü úÿö÷Ÿ"ÀŸ‘‘qÆOpu–—ê‡g‘ š0a‚Ÿþüå sæÌi´Q£ÜFsßw”9rdòäÉsæÌ5j”q244´¢¢"$$Ä8SWW]SSÓT•šë@£jkk?ûì³W_}õÕW_íׯ_ƒ«‡jß¾½R*))iÉØÉ¿ü¤Ÿ¯ ¶ Øz°Üáü÷¿ÿ}Í5×4úäíÛ·÷íÛ×8|öÙg~øáoÛ¹sgïÞ½•RíÚµ;xð`RRÒÑ£G•RÙÙÙ§»³ÉÈ‘#W®\ù`rôýIQõu:œçî>ÚmèðÕ«WŸÖ£|ТE‹.¿üòÏ_rÉ%‹/ö|=àaµ›Öþ©~ÊUVµí¹.—,YâÝ’–û8îš•——7vìØÇܵ{¥”JHHh0ߪ°°°‰ýàO=õTjjê”)SV­ZõÝwßxC^^ž>ø]ûääÍÇç:}Ó¦ÜáT.3°NÔ©S§aƇ®{`¹êÑ£Gll¬RêСCk×®Õ»Wqqq]ºt9ÝGßëG+ò-$ŒÒno%c ann®ë¡åØ÷?²;€aßç²V­mâĉ^,nâ–ÖÁƒÇ?o޼ѣG7¸”––¶yóf×3[¶lqý÷7xÓé|òÉ'oèûöÛoO¼çàÁƒúàºP›rÔw…v×ýöÎ;0Šr{ÿgf{ÉnzBBH ¡÷zETP@QP¹È½^Q°!ö†å§È×~½°‚õ öB½— $¤÷ºÙÞæ÷ÇlÞ6!Ù$›ÝÙóùëÌ»ïξáavvŸ=ç¼Î Wù@–Z­Þ¿ÿW_}•””—7°hšNOOgãÏ>ûŒ † Ö‰ ¶hÑàdÞ©6Á… {MUGO€p7M€éÓ§³Xþ§¬¬lÍš5kÖ¬ÁÜ7ñ'—tp·:&NœÈãbnÂ÷VUUÕôéÓ_{íµ©S§¶|tæÌ™ë֭㎬[·nöìÙ>_h´lÊ€#¨£0@Š(\DNg·ÛÉáîÝ»M&“Ç6«ŸL<Êäþ[^.×»ÇÆmgÙSµ`Á‚sçνüòËmÔ’6Xß}÷Œ1¢I3dkÂoêMå6+ijôz=w¦ÍfËÍÍõò´¢£GÖí·ßÎz|UUU‡ƒ§E ¾ñìÙ³‹/^¼xñ믿îÃÓ"í #Òº"¢£0ŸÄ­6{¾7°¦OŸþôÓO_wÝu­>ºhÑ¢½{÷¾úê«õõõõõõ¯¼òÊþýûï¾ûnŸ/ 4<>W!A ê( PG€" €Ñ£çƒÙlÞµk¿ýÜQVÍXĨ¨æV§Ì¶mM–††öЛ6 …âÙgŸíÑ£Çå&K§suç%9Y‚XV†y¿ÆHÆo WT••rg~ûí·ôò´¢caa!‰ÅbñôéÓ£¢¢Àn·WWWó·®àÀ·"ÇÐét¶=ñ-r1"]¡+"Ú‹8–Åæ‹!…ï ¬cÇŽÍŸ?ߣ =ù¶}ûöC‡%'''''>|xÛ¶m*•ÊçË@–_‘`u¨£@@€‹Ør“h¶ŠÐôÓ÷¯ø¨™––¦Õº_E­V8°ça›m±˜Ì±ð8r(Ýþ‰üñÇ3gÎþôAÕje»•‰D¢eË–]}õÕÀn h`ù4°Äo\sÍ5‰‰‰‘‘‘#¢"‹™¬´;õb©D"áwmHwÐ]»"‚ ‚ ÁK}}=\uÕUr¹²³³«ž}Ø©s7(¡bÄÍ&iúÔ³¸S¾Úfš¢(nÍàÈ‘#E"Q'Î3nÜ8îòùiƒI¬=wÚYíÚ‹ðµ×^ï3°’’¶Z-!!aîܹ3gÎ’Ezí#þKÄoœ9s¦¬¬¬¾¾>ÜM³Í6L¿*h`!~"++‹ï% >u¨£@@€‹H2°322(€—ãØ=;.7_9÷ö°1¸#¾2°àÒšÁÑ£Gwî$R©”MMbqö\§‰`cÚéЯ] Û¶mc»_yŸ:’úÁääd­V;œvè?ýïLCÍÒhÕ?#’#û€aÚ>Cˆã[‰o…X~&.F¤‹tTDÒô}°ÜouÚdW«Õ¾\0ˆù^*dffò½Ä ŽÂu(¢p‰9aüø9ù'çG(È£e J hþ¢.7IóÈsK.1}|h`‘>îÐÙX,×]wÝÆÙ8>>¾hø¸ÈÝ¿³‡Æïתï~`åÊ•ì¡÷V èH ¬ÌèðÚ;n´Þ&Ä©vÿj=vPš>–Ç8¾Kù".F¤‹tHD»Ýn0Øx¨Âíld›íañ˜%L0 AAqa0fÍšõ¯ýë‡~`G"ÃÃç×rÝ«z‡óÖ UgÌc³‹">ü†R‡õíÛ—4Ì‚€4°f̘AQÇÇÇ›¯˜^iwypŒÑÿøÒÛ¶±‡v»½õ³ì„Jšº³ä ë^yP¿é;“Éä÷u…(XBˆ þA§Ó1Í饃änë4– ÌÀBAA\ìÞ½û—_~!‡*šš¶÷¸ gȈ5L{Ó±ü<‹ýÑ݇2« N€ýiÃî’H@$ <øðáÃìLX©©©ëׯg¿¨¤¥¥uú< ÷ÝwŸÝn>|x^^ÞG5†Í?Ô«önÿ¼Wø“åMå6‡Ãᨨ¨èÙ³§oþ€n†ÍÀZ£R› ­N¨ZÿuÏWÞahQUU•uAZ3°Ä?èt:6HOJŒ¹~rÐ;™B«£?X3°?qêÔ)¾—€øÔQ ŽE)â–-[HÖèøVDÌÀâ Þ/F¤ëtHDÖÀÒŠèt›ž þÜh4°„ X‚ ‚ ÀÖ­[Ù>SK¢UC8 q•soOøþ/“ª•ïwÜqGBB9:t(‰?  Ô昙_÷Cƒ;_éáUEóÖ~NYNö#QîÞùò©Óå×Ìdã‡?û²¶¹ŠP#¢É$$=‘n‚$^¡… Ý k`ÍÒÈÄÍok­Ž#˜%hÐÀBAAöïß ÑCÑ*2(½v¶ö…7´1±K—.%ƒl#*±XüøãsÏMü¬ 0°Èj«ªôNÚõÙ8E*h»Ãáü*0ýg﫚såhVûÜ*òÐà¡C )}Éáh¥¤¦¦&??ßßK 1°„Aük`Ý.'#?4¸¶[EK¨ …ø‰¬¬,¾—€øÔQ ŽE(bnn.<«V4"u&âÙרø¡‡R*• ‰îºë.¸õÖ[ûôéãq’ƒ–——ëõú‰'úoé%‘ӾĿ(:šŽ®+ß÷ì£ ÿþ÷¿×¯_O¶»ò€_õµa;~'‡ê%Ò1qÜ ƒæÍ'ñ¥° VkøVD,!ä‹|SE:J‡DÔétñz´RÊ2]‰´h` 4°?‘™™É÷€: ÔQ ˆ EÌÍÍ©ÜÄù5û‹ˆŽp%RÅÄÄ,Z´FýàƒRõä“O¶ŸîÑ›m…ÛÒÀÑÑÑ2™«Ë1°×Ö™ÈÍþ¿Ò®œš††ÿ.ð²0V«eß.rxL&—{6Àb‘¦¡Èß(Å6XÝöÀB?ଫéoo®¤¨ðëæp\AK¨ … ‚ êØ ó{7T‘Ã?¿eË–ýû÷/[¶ŒÇUùŠ¢H1°î¿ÿþ¨…w‚+ œÎ 玱acc£¿—x¬Gö3F—Û¦I—›IÉä’áäp¢ZZTT8NœðÀ ,ñæ¿ÿ¢ÁUCÍôé'éÙ‹­õfAK¨ …ø‰ÀùÀ‡tÔQ ŽE%¢éç îN"ý‡ôž6}Ú´icÇŽåVØ Ò‹X#GŽ|ãwG~ò™[^¨¤)h-‹sss¿~x 9Ü®·&öìÙÆ|Ù¸I$ž¤’B€ý÷ãßþk Åø¿Zx/¢e»{Vé×'e˜¢(µZÝúÓ  ,ÄOñ½Ä ŽÂu(¢(;·Xû;y\‰ÿùüóÏ>|àÀ™3grÇeã&‰“û°1åpŒWJ¡5‹:”VçîÆµ]oáv£o‰t¬»­ÌD•”¯ú—â[Iå –ú™€zSE:‡—"2V«eÿnr6ãàXJ¥R$µþL$Èó½$T:´õqàu¨£@@àˆè¬¯sœ=Íf`9”W^Ãó‚üKZZÚå’N˜b/ÌgãÉjé6½¥¥Å‹Ž…ö])s}Œ·1¥·^Ñf–tÈJÆè› VL‹u:?$øVDnâ•ÃáÀ/Ò~#pÞT‘NÓ¶ˆ6›­¦¦¦¶¶6­©Ž1»:V8˜†ÇÀÂúAƒX‚ ‚ !eßNŠqu©ÑFÑ‘Ñü®'p›LâÉêÖ3°xAr쉭MN¦g›ˆÄ²ŒñähŠJŠX݇‡ÅãJDH0 £R©†Z²ù{2~Ðáòˆ‰…õƒ ,AAƲ÷o÷Çæ@dc3AäJtê/ÇKè1°zU•x‡Þ íXÒ WxŠZ –ÅbiR7À5­°ŠA|E]]Ífcc;§~ð¤DŘ  …ø‰¬¬,¾—€øÔQ ŽE""سv£Þóð¸–@ƒR‡I‡¥“ÃɪV|ÿëXWU9’v[$;ôðÂÀ’M˜Bâ±J‰¾®®›–8¬ZµÊË™¾ ,¾”7U¤ ´!bee%ÄŠiM­+v0§ue K£Ñtç>A ñ™™™íOBÔQ ŽE"¢½0Ÿ©©bcEkÆĪÙxwa¦JªÓé<, ÿëxáçMjÚµid¥ÝyÖl§(ªÝý"Å)©¢—É%§)ù…3Ý»J¾9sæÌ[o½åådߊˆ%„| oªHWhCDb`Ý •“msOšmtxc a(€‚ ‚ Hèb=êî¦T“b ‹ @¤ã&‘x’Zêt:yo®ß¹•Ä»õV ::Z.—·ûD§Š0º ·;Ö8¼øâ‹¼ˆÅµ8ÑÀB_Q]] ršZ­"ƒÛš,Z­–‡>oÞ¼Ûn»möìÙü,é~pBAAÐÅvì ‰Eœr9„E:,Rª£âÄt?™¸¡¡!<<œÇ%…åf“x§Á‰‰‰ÞÚïÚæÃ…+V¬`šÿW{i`ùVDÌÀâ ¼3 €6D¬¬¬œ¬’’Ã}F›~ÅoM7âgÐÀBA 9xà={öDV”‘º„d×ÈHú Åö`c5M‰Oæk%ŒA¯:箯~ÿ#«W¯þôÓOo»í6oOÁÉ&³ÚÃô¾]!ï\¸pá—_~!‡^X¾ ,é*++§¨ÝÖ.½°_{¨MÜAAB‹?üpÍš5ÐËØ®j ÏàsM EÉ®šnüösö(üôÑŽž 77÷ôéÓW^ye3Ì»¶Šš sTì¸ù ǵý„¨ ¾huô–Š€±Z-»·Ë§ êëß¾}ûHú”••ù XBˆ ÝA]UåxNÖ.ƒÐÀ =0 ñYYY|/ñ¨£0@Š(øq×®]=ôˆ(èK¹¿]'\1—õò©3H_pœn‡Â9rÓM7EGG?þùçŸç:,ÂôÛ&Ë®šÑÆÌË¡ÕjÿÐYÈ¡yûï[IÀrøð%ùq^f`ùöbäšV˜åOðÎ(Ú±GcmM±±^¦8k¶6,%%ÅO+C4°?‘™™Ùþ$$àA…ê(PDÀ—ˆ_}õ•Íf€4©XÕüe Öîì?åJ^ÖÈF·Jel¬°˜¬G’‡¼Ñ‘ݸÐápìß¿ÿå—_®­­íè.^¼è¬«1sºVÅÌ]ÐÑ“€F£ùSÏ1°vmcl¶Nœ'Ð0›ÍÇÿù矷n½¤3½—–o/F,!ä ¼3 €Ë‰ØÔÔ4„v[Ãô¨ñ ¦_…$h`!‚ ‚„MMMl0B!!ƒyb™L&ãiEÁ€XR:ˆ™~ÝØ¡g{l\؉º¶‡~øâ§P;{X!WI ëèI@,Ÿ¥¤ìÞ…ÀèuÖC{:qž@ã·ß~9räìٳϜ9ÃŽP•••………‹/~ä‘GV­ZåŸÅ` !‚øœªªª¾29ŒŸrÕ AƒÐÀ AÐÀBA !ˆ5Láî…ZÇÓr‚†¦tw¿)óŸ?1V«÷Ïe3°ååå}õcÇŽU}ù 9¬IßÑ3´ڿš8IX;þìô©‡ .pSRRbccÀáplܸqÍš5o¿ýösÏ=góKºf`!ˆÏ©¬¬L“ºïYâ>iO=õTF¶n 9ÐÀBü¥ ÔQ ŽE|‰¨ÓéØ`8'ËÞ§/‹ &2Æ×6'.9u–Ý®R5otôÈÀꨥÓé"j*Sœ.ËÌÎ@ÛïîиhµÚ?9–e×Ö6& VFFFbb"ÿüóÏl`³Ùrss[}zKív{ÿþý‡ž‘‘áá?¶ X|wFp9«ªªÒ8Xâ”´Ûo¿M´DB 4°?EéÂu¨£@_"²X ËÝ¿f«FàïØí ŠþIg&‡¦Ÿ6°AKÏ;·víÚ>ø€ôcòp@:ZBxæÌ™ÛÂÝž»ÍŽA™“;t.&Ë`59]ä¥Åöܳ>[€àáL=šXÜïäÀЃ–"œ?þäÉ“GŽ©¨¨èÐb¸eƒXBèOðÎ(.'bCA¾Väò.(…RŸàÇE!X‚ ‚ !k`¥ÉIJæß®Ëmޤé¼.*ÿ¡Ám`™wüi¿p®Õ™_}õÕwܱtéÒwÞy‡éb aΉã7iä0;)¦;ÿ^«ÕšL–Á]iþ$,nÖ,üÚ†òyNÃÂÅÕa2Ysã0ÈÉÉñò„çÏŸ'qUUU‡ƒXâs 9Ù$§¤æ^…*h`!‚ ‚„¬5@æN¿Ê6ÛûöíËߊ‚ƒððð£&[Ž¹Ù q:šÞk½)xuu5œ8q‚ ºh`9þþK#r}[«¶;US§wèéhµZØ®çVnéÊ yÇh4’Ý'ª¤&icúvZAöªÍÚ^á»Ò¢oÐÊÙG/—Õ’sçÜîdeee‡Öƒ‚øGÛ¤÷Nãq%¿ …ø îH‚: ÔQ ˆ€/ÙX8õƒyN*!Ë1Ú!<<œ¦é׫ôdļýw[ö‰–:«¤¤¤¶¶º¸ !à >{Œ­o0M˜<¥ƒk¿ÖÀÚÚäÎÀ²?rñÄñüü|Òà?¸ÈÏÏgFôéýA¯H¯7ñúÞÚÇcÕpù ¬–"r3°ºb`a ¡?Á;£¸œˆ²jw%/X¡ XˆŸ(**â{ ˆ@…ê(PDÀ‹ˆ6›Íl6À ¹»ƒ{cD ¶Âmš¦ÙöçGMÍ;Ù1Œé×-u$4'au%˲{[ŠÍÄÆN€ï›lcÆŒéøòݰV©ÍÑãrØŸ¾rBjjêܹs»rf¾ °^‰’ÆÐL«sî‰RÆŠésçεšÕRD,! FðÎ(.'b„Þý.*B+„A ñC‡å{ ˆ@…ê(PDÀ‹ˆ$Åfg BgJªÿWŒDDD0ÖȈiûDÇÍ›7/^¼xñâÅÜ:µËXlÆP»”––6ü÷ÿÈaÓˆ1‘ÃF*•Ê®ü† rã’Èàõt¤Â. ``THFÝÿÎÖÑ76š­ÍÿÎJšz Ze6›/^¼Øò Ü‹ñçŸ~÷Ýw?NF°„0XÀ;£hUD½^ß ÜÉŒ˜ʈ۟‚ ‚ ‚ÖÀÒˆ¨øæžJ64ƒ‡óº¨ !222??ÿo½ÕÂ0l |gI¡ýÂ9qZøñÇ¿øâ §œ8qÂf³FH$J¥²±±Ñb±ÔÕÕEEEµûŠË¦_õ.ã2e€Ôç_{Ogìâ_Ï™œ£›'«¤UZZªÓéˆÃ,°ÖÂwŸ{ÉБòÿûðþظ#‘ÊWz„±ƒ #ÕÏœ9“–vÙo¿UUU³gÏöÄBá—ÂãG{IE®‘XŒ?º„0˜… ‚ *î¤bP5gÞ<—DDDD€Ác ¿²AAAA˧œ8q‚¤_iµZÒkÌ›*†††Œ:÷´3šhI¿A\}3'Ndƒÿî‡ödÝ qO+1Î 80&&jjjšFŒ%ãìV}Ag`ÆC‡ݬU(i×7\QBOYæ•pë­·ö4H}ïr2yn¸.æ¶<ɦM›Ö¯_¿~ýú¿þú«å£XB,àQ´*"uâ0‰ec&úq9HÀâ'233ù^âPGa€: Qð""›5E-##â´þ_FÂf`À_MÒÂJV|ÑôëF»Ý^RRÂŽLVK÷¤E=§¯’^­’È·þüN¢&«oô8¢CX•›þ§i®ô¬²;æ^ë“¿‚¢¨É“'³ñ>¹»ZpŠJ#¦ƒ® ÖÞ½{­VëÜp·Ó§¼yÐ"÷á óÄ}]ÿÉi€á‡wµlØ0ÖŒ+//çäyG³™3T.P[öÎ;ï° G+V¬8yò¤¯^´;hjj:|øðLN§0ù5³Ziºõ.[î©èß %ÅùùùìÈñãÇ#Dôc±jR³ÉvsOIIa;m`a ¡?Á;£h)bÓ¦oI¬Ì¼Ò¿ËA4°?Ñ«W/¾—€øÔQ Ž dE4GŽ9räHÐ:µ¤»EÌÎÎ6 ¥¥¥ÙÙÙd0áø~9éu˜¤¸ff·®A`p3°à½ÃnZÁ™¨’’ý Uö´ÕYž.×C]^<^%…æÎM-_Âl6=zL¿o&ƒŠé7„……ùîÉ^„¥fëNƒ»òå8õsËY±bÅÑ£Gß}÷ÝóçÏûðu}ÎÑ£G£Á™®t×ʯ¾¾Õ™a§ìÔsöŽÜþGÁìÉÇ>ú=÷,„W–þ™¹,Fµ55*C)¡(ê…^ˆ‹‹:t(;¿Câ.„|²wF!ÁñÏ?ÿt8ŽºŠ©€ˆ›æó´.$P@ ñZ­–ï% >u¨£Y³³³322222,XÀ÷ZºŠoE,,,\µjÕSO=õᇲ#Ä·2›…öçO§¨æß "Ÿ%õ„Ü ,0:™«L‘ßjIKö¸©W̸²Íö?8».í F£ñàÁƒ-ŸuæÌ™Ç{ÌYW^˜Gå3nôÕŸ@àvJ~¹Bï \Æ[‰èáÕ7ß|sÏ=÷Øíö7°***¦‡qê‡jY?ÈõJe“Îᮌ³š&üö]õœ+*'ôE_ÚS"€žÑÆ”È%ÉqÉÉÉO>ùd\\;Kƒ‚½3 ®ˆ ,ØxÏ¿HÁoetqï4žÖ… h`!‚ 4oƒlÃl„pìØ±'Ÿ|òµ×^[µj;B ,ÒÚ¼í0³Ë̲‹%Š›ÿáÿu5XP]]-=!âÕN . œ·ØŸ)o2N˜:vìXvä‹:w±á‘=FLÀŽ;Z¾Ä‰'¶oß~ðÃÿÐŒ+‹ÇÒ3Eœâ³îW„I“&‘øœÅ~a¤{c¯;#•PSuäÈp«ªªêZÎŽòi3.73,,,—]›_{ÌdóxÈ©k»Õ1O¨Û™SK–,‰%/äýªÐÀBŸ`4RóÝÕÖª›ƒþ‡+¤ë … ‚ HÐ@¾ â×BêëëÙ ¤¤Äb±@kX†o>%ó+†dÐa˜­Ð1<2°Àét}úçÓ+•ú••ú½W£¥˜˜`“°€uõ&ò”Û"À¾}ûX«‘ k`w–jÒT_ÿR©tÌ×nôZ­vHú(õÒÇÈ£·„+Ø4±¼¼¼@6‹µçNKš‹Å}úŠ“û´19** ¬ ³øbÍ‹M?5š³ V‡ÌÕ¾ÁáüÊè.0´ä¾ù¬wïÞìa^^^Ë^ÌÀ⋽3 "¢Á`˜ÆÉ¯,‰OÂý@ ñÜV Hð‚: ÔQ„¬ˆBÊÀò­ˆÄÀ€¼¼66–¦]Ÿ®¹¬o03ÍÛö–ŠÆ(%&“éìÙ³g;yòdšLL’©dx†¯ÿ¤Šp„ 4M+o¼•Ô*Š(ÈTIÀb±vÓºNJ¹{mò©m¥_@tt40«k÷–4ÞRPÿéõ wܱ¬NÕ ³Õ§'MWÎ[Hæ¿ù45ÙÕOšìWè h`ñEÈÞ…Q¯×_­–’ñðkgó´"$°@ AA AHV'øì³Ï(Š¢(jútÏï꤄Z3° ÕUÆדÃuõ&ßîj:´š„ÿýïëêê***rrròòòòòòØþßÄÀjp8­î>S·E( EaZqqq]]Ý$•û;›hÄhJ"îáñÇg—ºnÝ:Z$¿Ú½+%Yƹsçºi]'ÕÐ@bÙ•×¶=™ÍÀò`ßÁCgššœ ¤¤¤„-{–dy8*ËòrXG²¨¨Èfólžu9¸eƒXBˆ ÃX\8Táz÷c(jЋø]  … ‚ HÐ ¤ÂN@vŽ?îñPÛX¶Íß2zWÛ¿é,h`uŽ–EQ÷ÝwßÒ¥K#""(Šêׯ_Ÿ>}úôéÃ#FŒ`“¶´Z­dÖ\ò¬ÙyšLìa`±õƒ34î$/Í”iÝ÷·„……±K%©I²qîÎîׯ†³AÀ¶Ár”F8]ïŒL.2¢íùäϑȕãvðàÁ’’6NJJ¢5ZÅ·’iÖu«“ÀápxŸ‰†XÒuûvr6M—ÄÄñ¹$`@ ñX”. PGa€: €QHXñÂ… lPYYY^^Î}ÈÃÀ:pà9”R”øÇïÉáº:£aÐÀꤻB¡˜9sæG}ôÃ?|ðÁ—›/“ÉJKKm6[CCC⬛Eñ ®§ÓÔÚ^á;ÿ4|þé— ìà‰'†Ê%™œ ,ÙÄ+ºë/i ÉÈ1”ÜÕÙ=Âfé#AXÖ#îÿäâ¡#A$n{>7kذalŠ\}}ýÎ;ÙA¶e»jÁÝÐ\j;—ýdœëJñ¾ X|²wF!AD¤O!ƒòÉÝhå#ÁE;oôâ+°(] ŽÂ@:>ñÄ/^€•+W²Û~ AŠè B2°:!"1°àøñãd‹4¸ÔÀ:zôhEERHž‹£ëkØCŸÕ™@£ÑtnÙ!ÉÀš?þ§Ÿ~Úöd·oBÓêÅË_tõJï-õ>½_wz?8kªUwÜwâĉbÜ]Š­†ˆûôáâÛ…’J¥éc-{ÿf'«eùuÆ€5°Œ÷X>zB»ó¹Xƒ JJJúé§Ÿ   €d/(qJªbƦ_7²ƒ3Íõc”’ƒF[ç ,,!ô'!{gDDù¹ÓdP6n2OËAÌÀBA„ÀŸþ¹~ýúõë××ÖÖò½¤ åB†a¸_¡=ª¹=°ÊÊÊØ¯Ía4µ¡wÄ¥»‰ÒWuÆz‡“¦i•JÕýK $«Õ†Jí¢œ·[¡FнùRã‹-ÈÞ7S#'ƒq<Ù¹EvÙx÷ÅqJ p–åÈ~ËÒǶ;Ÿ+Ù AƒFŽé18šgVŠz$²1Å0ÿŽTBGú¸c‚t{Až¸ÑuS3Ó"Éáü® ÐÀBA„@(û!…2°:JYY™Ñh$‡V’¾á®(Ï-ƯÕÈdé"”D²ºÖjµšâŒ#Þ3f̘iÓ¦M›6­¥ýá%ÚçþÏÞoç(Ã×9†r· ÷$Ÿ|U§×Ùi¤£Æ‘x”R%%%&“Éÿ+ig}-UZÄÆ ¤#Úß«ÑÃÀJIIá>*‰bccÙ˜Öhµ/¼Aº&L¦¢),!D¿aåäWª#Ú-FB4°?ÑØØÈ÷€: Aêj¾† Eô!9•‘[?—X–ܳDЖōTô%¶ÔM‘jK3Æ;Þÿ¦Ìæl€Õi–.]ºeË–-[¶ÌŸ?Ÿ騎”L±î§kòj_¯ÒÿOg¥d²VæÈšåÏ&£xÀJêj•(ʼni§Ó™““ãÿ•´õèA`6.’*ÈÖmàQBèa`ÅÆÆ’Îî ›p…(¡'+hjºFæ}îBÈ!{gF£ññÇ_¼xñ¢E‹Àzh/y¨(Û·#nÐÀBüDQQßK@|ê( ©c¨X‚Ñ„$tGEô0°.\¸ÐÔÔŽŠ²úÅ·EˆèHý¯H÷×ø±h’Òý«µæ©ÿ× u•¿a,Ò‰‹Q­V—)5oW–×ÃÓ¯y$”(ÔÑë·È&^é»5vJ*BG($°cÇ^ÓÖã‡H\ãÍSH–L&KMMMNNæ>Êí(@QŠëæ£9Zy~~>Ól™µÃ0\ÓJïTADÈÞ@qqñ믿¾fÍšO>ù¤¦ªÊÂÉÀªŒëÉãÂ@ ,ÄO :”ï% >u‚Ô‘äã„È·AŠè B2°:*¢‡åt:³²²œ õu‹ocª\-ۗƆ;ö6¾³ЍùûvSx”¤ÿ`Ò!®sý›VéÜŘ””Ä%É}#ÞúX}×ýGŽz¼L· °~óԛŽÓ|ºÆŽ!šNât¥¶lÙÂßrZÇvü0‰’Û˜IHMM5 µµµçÏŸ‰DIIIÜ”«„„ùŠëo"ñd•Œ1¼IðñxkÀ;U²wFPZZJâ’m8k«ÙXç`ô=ÐÀBÜ … ‚!ùH©„°£‹|Óþ믿_~Üžçî±A1kf_Ãæ’ܪqצå'÷€š×^„ÜZ*„ˆU\\,¿jFزg¿WD}UoÚ¡·¦¤ñé^€d¨»½×H…vïÞm±Xø[‘'ŒÕj;s‚Zúðò‰J¥222²W¯^ ‹{öt1öÌÀ÷(Nqíi+¦`¸BÒ  Kĸ–mÇŸ$þ[oQ†aÊ0â ,AD "}=êtBÒCšmE[~7ÿõ‹ç¼õë¾þô“t•¬§Î•oÅœ‰ë 3°x‡k`±i±Ô§O~ÖÔŒd'K%£ŒFãÞ½{ÛxŠŸ±åœdš µ›CÓÙ„5naK $ÃG‘xd§ ,¼%!ˆ7p ,Íé£$þ½É‚{æ"\ÐÀBüDVVßK@|ê( ©c¨X‚Ѹ‰WÁž„ÕQÉçû… Êd2¸ÍP-šò8«+3Î}k’{S¶zk-RBˆX>¤s#Éý @Kœ”BG¸Ú¥)I“‰`ëÖ­¼.êlÇÜ °md÷ÀŽÂíãÞª%åXéh`u‚Ô1Ô ,AŠè Á»?½Ùl~ë­·t:^¯ï½÷(Šêˆv»ÍŸ‰D)))™™™Gödª¤dB–ÁJõkW÷§€8[ŸÔû €XÝCç.F’Å~m3 ‘HÈC¼AQ’AÃ-{\ÛÈÄç-ö'N´ý$båX‡Œ¶±5°ÚÏÀº´XqCC»çôÈ µDQ~ Ù;£ Öl­œ î1Øt ,„ f`!‚ B Ô ¬%x ¬’’’gžyfÕªUï¿ÿþùóçÀl6{ÿôÊÊJö›pLLŒH$ºiÜèWz¸Û‚”Ä%ý»¨¡ÌÖüb·16æYì;ô£Ñ˜H¤!ÖU¼xñ"»Ã]¯^½Äbþ`§õ'q?¹Ø-/E‹Uýín*Èh‰ñj–´›%é7R¸vöŒÓ–âÂvωXÒ XKBQ #dðwÐÀB¸ … ‚4°B®¾ÁUBXVVFâ455Mš4iÞ¼yUUUÞu‚Ô‘xÁejtAŠè Á›Å5°vïÞ}ÓM7>|xÆ C† Y¿~}»O'ÖÀØèÚÝ n¬#i1×b€ßt–Òac¸Ïª6úg0«ûèÜÅH žQ IDAT<ÄÀ4°$}ú‘¸¿,€2°L&S›‰3ÙTa¶%\' %„4MÇÇÇ·:‡[E¨.Êk÷œ¸ !„ì1Øq8ì=î®H%ÜF+›œ ¨ÕjÞV†h`!~‚ݱ vPGa HC-K"zCðXååå$þôÓOIKìêêê… 2-z±_îész§ÎÝIz“Î*Ÿ{{]ËÏ*»õ.å­w°1Sû{ؘ5°0«;èÜÅèX©ý€r¥øõ–Š% X¥¥¥ w‰åÁ.tp€äää-[¶lÙ²åÇ”H$­Î‘Žt›Â±eXBЄì1Ø©¨¨p8ƒäâá ×eÈPÔÿ¬.§3°.üר#!‚V«å{ ˆ@… u 5K"zƒ0J‰]EQÃ0‹¥¶¶¶í¬(ö×éh1=®º˜ ®­3=S®›SY™—çJ ‰‹×Î^IÉd†u«µÏ¯’k\½ØBÌÀê:w1ªÕj¹\n6›M&“Ñh 4‹R‡‰âå¥ ¦ M&* «¤¤d´Òí46ZcÓ:o`‰ÅâiÓ¦µ=G:zGÂ)! ˆ“1­Æ}¥üÒhŸX~m‹(5ÎÖ\=i¿xÁY[ÝÆdÜ…GBöÎŒ|úé§Ÿþ9èõúÍß|}µÚýÖ÷Cƒ™íŠ˜~…´ ,A$èá–’—©t” -!ÔétlöŠB¡=zôK/½ÄŽ·›ug¤‚ºtNîõÅ&qŸ¾={öô˜ßjEQ`2™ª«]ߺ1+@ Bäää°ªá¼GœÚšKM“%"9ÍÿF„–[¥ŒË*±9Žšlà—4M\üi³Ú²O´13°Ä²³³Ÿxâ‰ÚÚÚµk×N‹œvÝë ­Ž£&XÈå@ A z‚7+é(Aª5I°JLLüõ×_I–MX‹EW^6»+“ݹªÞ÷ãNqröTÜù111©©©'¡iš-¾`¦¸Øµ}!f`Dˆ3gΰA@X”R%Jpeù‰(è+ûßÀòH_2ý¾™Ä?7Zؤ(?]jµÚ&Žuúx“ÑÀBvq:999555=öØ{ï½Ç-ßÜhfš÷%4° …ø ,J¨£0žŽAš•Ó„'¢—»•@¾ogeeõR)®×ÈúÊÄÕåžVAAÁ<­LÝü£t¥Ý™q¾æWeˆ%ìˆGVËô+òéŸìs‡X¾¥ë=°HVà4Àb‘ô@âr‘ÿKßyç;ëk-»¶ÃŸuf6ðC,µZ}Êâ¶Ò¬mX¸ !„ì1yâ‰'ØÝHvîÜIóóóãì–×4_ñ…õâ…)*wýàæF3466²‡h`! …ø ,J¨£0žŽAjjtá‰è%AjVr ,×ä—å'¿ôÈÇIá;Ó¢Ö5^¬½cŽñÛÏÁáú£ Î]¥$gø²Îhe˜øøx2â‘uûí··úÒ¤ 1°0Ë·t½Vee%TˆÓÜV™¿3°6oÞüÅ_CÓ/?06WT®Å~¼9%Ê'ÿhm‹HQÔE‰;CK–½32ß~ûíÖ­[·nݺ{÷n2˜»oÏw) "_&‡?«5—ÊS}ž³\rgG ñ ,A$è A+d R­[X O=ÐøÒã`p¥´È(°Þ×øÊSÕ7Mµ< ’_'JDì£V†ù²Þœ’C'ŸìçÌ™ÓêKcVÀÒRˆ€3°.ÉÀò«e4~øa²A7~Kâÿ5¸Ò¯(Šò![£Ò®FîÎÚjGE+».° … „†††’’6>}ú48ëkS>|-I"€I*élNý êÎû=ΠV«ý²R$h@ A z‚ÔÔ@:Ï3°Îž=Ûõ“´‹‡eøüÓ/ZiÏ;_{çÍMoÿ¿´£{Èàgu¦j»¸XÀ©"¼ï¾û$I«'$Xä/ug!¼ÒÒy èB™ØŸ%„+W®,,,¬­­e/sÛ‰#ö\W¡¥ &6ŽŒŒ‹Å~XZ£Í6»ßplÙ—­"Ä]„Í0 ‰€±˜ë–Ü®«o9YܧoØõs w3°ÐÀBü©dF‚ÔQOÇ4°„'¢—øVk§Ó¹hÑ"?|Ã$?A'$$XdéÞ~…ú(wæÁƒ:ôõ×_/^¼ør/M>ýët:6èÓ§O—ÿ ÄM§/Æ–V e`‰RÒHϵ‘µ¾Ö?¯›››ûú므Ó鬪ªýçG·ë-q³±¯,¿vElÑÇý²U„˜Å#!{g XN:EâóçÏÛl¶ÆÚNku²zñ2 i­VËD ñ ,ÄOÊ$¨A…ðtäfâ„È·á‰è%¾5°Ö¬Y“••å‡ÿ3dÀä¨È†g„fsŠÖ†¯ˆé;ò\õ¸Üšú1“[}î'Nù¤é×;vlݺu½zõâ>¤Ñh222þñ´QEE2°\¯HÓ)))]ù[:}1¶,! ´ ,J"§¸ìN @^^âŸ×}衇, WTTØ/^0oÿ<º®Ñr÷Ýw³±¯,¿vEÔjµ'Ì+çÔåf¢Å#!{g Xج+«ÕZô/r³õÍe¹”L.¿j†bÆ Ð±B ñÀ9·C‡å{ ˆ@…ðt Á ,á‰è%>,!,--}òÉ'`Ë–-ƒ¡¡¡aþüùÝÔnÃm`ýü­»{- c5õá§»‹¬Žƒ“¯»åú_z‚ôqw0°²Ú°loVZZZ§_Ú£×{bb¢L&»Üd¤túbT©T …Âd2‘‘@ËÀIÿÁö çØ8¬ªÜ¯¸uëÖßwÛU©›¾„æ4ÉSf•1aþüùãǧ[$ktšvEÔjµûMÜÂËf`á.„<²wÆ€…›5K#W|÷)9ß™.ðžˆ^â­xàrH ,ÒjÝ·°…ˆ‚TݾhÏÀÙI°¸¸Øét’ý 'Mšôõ×_‹D¢.¾ú°aÃhÚýy3°|NW.ÆéÓ§“Øoêu ÇÀêa1€ÝÖÆdŸÀÝ4ZL÷=ëÞïou­AáÑ Î'´+¢F£€“Ü*Â3'[‰»òHÈÞùbôèÑ‘‘‘‘‘‘{÷îýí·ßRSS tã7²æææÀ š]iQ}eî7·äÑ{ V2dHËsr«ª€õ„€â'233ù^âPGa <C0Kx"z‰O´þòË/ËËÝÝ|È&ßÜb.žvŠJ͸L)UŠé7°"&%%±ƒ%%%uuu¬+¾k×.öU#,,Œ›u…–ÏéÊÅxß}÷Ó*뀎ˆ´‡G²±˜alù¹Ýúr Ü;çj¹.¢ÿ—!o¶ÌjíÎï̃[KÙè:íŠÈ6Û:Åíã~¦õ6X˜Å#!{gä r'­©©¹xñ"_¸pÁf³@qqñLüœŸnþ×`ú‡N€L&›1cFËs8{ˆâX‚ HЂ»†,>ÉÀb;Rµ¤[3°¦†IɈâÚÙ”ÊÕ-ž›EçÃp«ÑÀ (’’’æÌ™Ãƶ!ÁÑ»/‰ígOwëk 6þO¢f ÜµñEÑädZMÙð×\sÍÀ/ÍÀj}#B4°Á`0°í#áRËf³ååæ@Õ…ÜWz\ÒÁêŒÙþt¹ë)sçÎmÕµˆˆ qddd{ì"¡ X‚ HЂX!‹O´®©©iu¼[3°úq (dW\M⸸8©T µµµì o“q¸}ÜÑÀ 4žxâ‰'Ÿ|ríÚµ|ðßkiª¯;!Âv6»[_‹4Àšž;-̽]æ9môjŒÐMXí’’’ràÀ¤ ™F§+aÓY[í(/m9w!DBn"3×ÀŠÑ’ÿY3wÚÔß¾»ÜJ"‘­xc £15_AK–x¶ogáöÀÂô+¤%h`!~‚»‹*¼ ŽÂ@x:† %<½¤[ ¬nÍÀÀ1°Äi YDš¦Øñ£G²o ,’¥Ñh6Í'xéâÅ8jÔ¨•+WþóŸÿ4h¯–ä[dƒ†’Ø~þL·¾i€õl‚ûKìq³}á…*ÃÀešætoD {óíwNr«Oi9 3°x$dЪ¥Qß$‡++JlgOÇÉõ=Gλý‹¯¾f‹¦GŽ9a„VO«ÓéHÜ·oßVç ¡ XˆŸèŽŽ›ˆÿA…ðt AKx"z‰OJ/g`•––’~X>¤¸¸8ZLG“¢erqR2pD$m°Žq}öm áøñã¿úê«ï¿ÿþ»ï¾óáiÁ_ŒªÁÃIlϿЭ¯Åf`]&ëctõ]Q®+©ªfãnÊÀòRÄáÇ7öpÏ´ž8ÜrX<"ø‹1 ¨¨¨ qUUUQAÁÜpùï}¢†+$3-}©=ãÇöÙgáòéWpéV¹˜…´$àö:A„ Ûü vPGa <CÐÀžˆ^Ò!­u:ÝÝwß&—Ëßÿ}2ÎnìÝ‹ÅRYYï“¥Š‹‹/I¿Jí ´8"¶4°|›¾`Ážá"ø‹QÖ¯ž ਮ`ŒJ©ê¦×:{ö¬Œ¢VÄ»ûælm²2º’žâââº)…Ð{“®½¾ÿ”­'ÛÏÀÂB"ø‹Ño0 sß}÷1 £P(^}õU¥RÙr7ëôéÓ÷ªéå±ê–Óö¬ãßXb—«õÌ3Ï:tèÿøÇå^š»{ XHKÐÀBA‚ž4°B–i}êÔ©õë׳ñŠ+ˆ+t¹ ,())ñ­e4kkkûGº?ý‹ÓzÌ!}ÜI c`nH‡„&”DZbwö–Ð c/È—pŠ }Èùóç÷ïß_´2E*bGì ¼Z©'øj€Å%lÌDb`ÙsN1V+%•r'`"JJJV¯^ÍÆK–,iÕHâXò¼³%]â1Ú m)Ë«Lõ)½É¸X,Þ¼y3Ù}µ%Ø i4°A w! :TBÈ퇲aÆj4šôôôËe`@qqqFFF××I¨®®€œÍÔ$}xÌ!Xß–"H)QopU×Ú .t“µ|ùò(Æñ@´ûëëÚ:ãY‹û2çk B.=-¶9’$"`¬V[ÎIéðKÞ1ÐÀ d|ðA‹Å"‰V®\‰éZm@¶S€²²2#iíÚµ………üñ{¨¢©ÿôP‹)×£664˜^¨hjr2œœ,‰¸OoýŽEQöÀBZ‚=°?‘••Å÷€: áé蓾HÁ…ðDô’e`>}šÄK—.:ujFFFññ#©4£ ©VŸâó>îì.ã—–ög""ÉÀ"`V c)ínjc/È뎗رcÇ/¿üòLœZÙ|mÄÒ׫]éW³fÍ‚îÌÀò^Ä=z3¹ï2-û¸{Ô ¢åOÚÖÑáp|ðÁkÖ¬ùð몪ü¶ª`„l§¥¥¥kÖ¬4hиqã^ýuxâ‰'V¬Xqüøqv‚EO‰Ë¢bî(ª_^¦kjÞm°å ®Ý—¾xñâÙ³g9¢RuWµ2¼`â'233ù^âPGa <C°„Px"zI§3°XÂE´sÙ]ÛÓ¢ Êî\U¥ÿ¶ÞÄÀîèCt:Ðk`5g`[f`¡D„ÂÅX-WÍÊÆŽ‹èãÎ0ŒÅb‘ËåíÎܾ}û¼pù­{æá!ct'Š@©T~ÿý÷÷ÜsO÷e`y/¢X,>/Q¸\*ëуª.æNÀX<Ò¶ŽÕÕÕD£Ñè—+XÇgGâââ{챺º:ö¡Q ÉÒU:§kû –z+EQdG”–7¸¶™4iRWWÌÀBA‚ž4°B–ŽöÀâJ(ø8I+«©dcÅôËña}¤—”6>Üʶb]¡©©)NBkD®¤J&ŠOð˜ƒàÔ«4$îPVQQ‘B¡ (J"‘´í8Ëe½• %‰‘’þƒ­Ó®¥(jÊ”)r¹üã?9rdgVïkÊ"ݾÖYàl«foIw×<4°ÚÆÃÀ:zô(×ÖÖ655Ùl6 E=§ÞÜ;rz˜,¶y]““9:0].—¿ñÆäé5°¤mÐÀBA‚4°Bïµ.))©¯¯ç޼6QuI»e%M½×S+æTîÛ·Ïdº$'«‹ètºd‰Û#÷ê ”gõbLLLX˜{Û5™LÆíb‹ ¼cŽv[6ö‚‘SÔRgÙøÞ)¿ãŽ;–,Y¢T*§OŸ>`À€ &Œ1¢C¯ ï¨HW@ ñ¡Ð!"@…ðt AKx"z‰÷Zs;¸À-á IóoÅ%6ÇÖ& yhYŒª'IjÛ¶m>Y*‹N§KâT)Š{º ,®ˆ7Üp‰ÑÀ .BábŒŽŽ¾`åxÇ^W’ ,¸Œµ~ýzÝ«OÛsÜW«öÙ•ò«®ëìJ;I‡DìÙ³ç.¯ ¬¹%mëX^î6^ÑÀj®ï lVr†RòqRøÎ±võ›ý9]ËlŽ]z«a~l4÷5šØÍ?þøcNNΞ={&OžÜ¡W…wT¤+ … ‚=ÜLü¶ l¼7°rss€¸7J¹4Zõ¯HwñÑǵƇKuõÍ%*šZ§&úÜÀâ–Š8—ë®»Žì,ŽhDEE]´p.½ÂÎXVWWÿ¹ì>ㆯÈȹV9oaçêwéÝ–õÄQÃç@sŠ îB°`–—xX°óÌ3999Ÿ|òɃ>Ø+AABÌÀ Y¼lØÏþ„{FNFT·,ü蹕µµµd$..®¸¸øíjý7ÉìHJÙEEYÆcî ÒÕ“ørÜ$À‰ŽŽÖ;™*»3ŽM'´Ûì%Eâä>m?ëСCÜC‹ÅRQ^žûð݉•3_­Ò[føðáÿŸ½óŽoªêÿø÷fï6]Ж––––=+³(¥ ™ŠLKñáÁGõ§€€".@}ÜŠú¨€¨ÈT†¢”%{ (”–èÞÍÎýýq““Kš¦iš¦ÉÍy¿øãÜ“soNúå&÷~îçû=QQQxkÑ¡C‡K••ïÕèÅbñ\ëí”f÷váÄi­êÀ¢ XôôLŠ^xÁl6‹D¢¥K—yð}€Z­V*•hû'ãÖ­[ÔÚøøø’`£‡ IDATÄŽ'^±Ù¯þ[¡6˜­¿Â”€>yòä6™*&0ñv ¬={öÌž=›Þ3{öìß~ûÍËÓÀ`0 “ÀVà@·38qÛHYÄP±Íî$xð¡öíÛ£M¹\NÕJ?¦Ö—Y=l­&]Ê:°¤jÛ- Xÿ$88˜ÍfçÑ긛šªã®Õj÷ìÙCµår9p P½µt8M½2œ¯7¬-Wí©ÓÀÚµk=?õÖ!::V­ZÅóêÔ9n®ªhÕU=ŠÚvVaaáG}ôÉ'Ÿ¬Y³¦á*rzþ `«qPþ`rròг-rV :¢ÒÑGRç5ãe¼-`]»v­wïÞôž^½zÙŒ1Œäøñãm=ŒÀqdÌ‹£‹®&Á¼ ºˆë¬4)Ÿk­ÅɉKàÄ'Ò¬Ç{ŒÏç€‰êæ™bJ¨ÊËË+**<2áP½µí– Ø 2Œ@ˆ#‹Å’Ëåô2XÆÂÛÎwùã? $%%1BÊ"~ì(—;€TÍÓók¦©>®P“#GŽ3fL+Í¿IšÄ: <ø•W^¹oêŒL­% Ì&íß[/…°°°^GÌ.…ðäÉ“¨’¼Æâøá‡îÞ½›Þƒ¬Æ@Ü»tér¿ÞV&²¬k[1XX'¾Q1-ÁÛVMMÝÿõÐÐÐêêê&w$±jÕ*úñÌÌLúW9ý%z»®®Ž¾º>‚wŽ€V÷ëOššÚæsÀGhùž~÷)è/9t`ùݧhÖRSSÛ|mr„†±vx„ÂÂÂ1R[âƒ`ăuuu”bEÑ¿6Û²8ào4k„ˆ+f@e¶üS„m¬u¡­oè±ÀG Ž@}£úû§hòb±8×ÑB„aëÖ­TcÆŒñññÿ §ŠyhX•¦æ×œTëW®\ ,kݺumøwèÙ³g³Ž””´aÆS§N¥¦¦ÖÚnëug4L!t2‡E‹MŸ>}̘1üñ‡Ý§X°`AJJJß¾}?þøãÌÌÌ‚‚zþ XXèh ,ÿÕG NƆGøðÃ_|ñE AÕÀòÍOѶG@ÿͺ'tÒË@ýêÁÃá^¸\›ÇÙƒs°»×ðß¿d€aÕªU…h5’$›åöÑ ûãóx<µZMÿïn0$‰N§k°·³ã`0 ƒX³fͲe˨vbbâ­[·Úv>˜ÖC&“¡:&³gÏÞ¸q£ÃaN~xÕS2¶å*tó^Ÿû^zé%ªÊl¿~ý.\¸ðè£nÙ²€ÓIa1\‹žµðnÝouÚO?ýôÙgŸmù„wï·9lË~n>-?&ã}RSSe™ç¿ ¦6ùƒùæ—ÆkµÚ°°0J#¸zõêÕcGS>yCd]Q¡@oš]X{Kg$¢¬¬lòäÉqqq›7oö§ð: âϵìŽå¦ŽKÞ4þ¿Ÿ|‚F²Ùl'ÉÎiiiGŽ€%K–¬Y³†þÒˆ#> =ôÐÊ•+wîÜ©P(>ûì34`ݺu/¿ü2ÚLII¹páÕž?þ7ß|Ó²È(„B¡V«¥÷ >œúóbì¸ï¾ûΟ??^×þë¨NvtlÎë :”>R©TJ$’6˜"Æh=‡Óu‚\.¯®®¦ªNPTUUµ’ÿƒÁ`0®8¸ë.ù7‘zÅ çõêK–,=ztnnnrr2  °§NûL˜˜Úœ$üV§õH,½N˵¹ÝqwŒÿzƒžB˜Ÿãdpqq1¥^ÅÄÄtïÞ]¼á3¾U½*7šÇß®®6™ Gááá .´»1ö}èvÎn“)ûø2UÞžT«¢«î©µä<…­‹×°j*±rñâÅuëÖ]¼x‘~÷¦ªÕêË—/£Í€M!tˆB¡°S¯§6Nn®Å\yû&’écCCCéÃx<V¯0m‚·S»wïNÿz€+W®tëÖÍËÓÀxŸÆ’&0þŽ#3`^PÀb^]„ßF} fÓx­mí?Ñ´YÀb@DDĘ1cžyæ™ôôt  X°[as‚ò¤,¢   å³Uä!× KÄ ¾§ämÀ‘aHÃÂÂòô&TÇTZLj•jjjÐ^¤J!8ô;zéã 5¥^@ZZ<þøãqqq­3kWiI™2å<˶àiDÎ=Ú7I’N4,TYÜNÀªªª*+³T»¿sçÎŽ;rrrNŸ>MC°Î;Gÿ> XËaËËË©FDDÄܹs©6%°¶-Ï=÷Ü‚ ,XÐP_k+Ìf3õÿŠÇ"ˆ³ÇP¿`ÄØ°°0úÈÖ«à ߨ·ñ¶k„ ›6m=z4êÙ´iÓ¤I“¼< Œ÷‰mzÆçÁqdÌ‹c XÌ ¢‹¸ë¼MßF[µ)‚Ï?ö¤ÃatëŠÆPÆæµ3é€O£¤üœ¢¢–ÏV›ªþ°cìC°AdÇÐÐPIÞ5˜âxl’4Üævéáp0Z O.—kí'­¥BîL›klËP–/Ð’ FDDLzç}ÓŠç¨ÍŠJ ‹P™m¹3&“‰ÅºÇ40wîÜœœœØØX$Bݾ}›ž–h·Â•ÉdJ“ðæ…ˆ>«TèMÃ%ü^BNÏ+'²–>wR­×uíEå|! F#‡ãí½6Ça‘€·råÊ 6€o8°¾ýö[jkÖ¬MŽ÷*•ŠÒ[Ç„›–ÿœ,y(¯ß}r Øl6úÙm½ ªùFŸ·¿×ž~úéÞ½{¿óÎ; .€/¾øâôéÓ_}õ•—§ñ>AAAm=ŒÀqdÌ‹c®Bȼ ºˆ+Vî7Ÿv·¶…“¦³B£ XpV4QeYypj°p‘',m^ŽMÀj?°AdG*è–Îh°Œy9 XȬÙÿêßQ«5X«¢°X¬ûï¿¿gÜZÄðqç½µT¨­) ¦ ¿¯¶é#v¬âââüÑh4ž8qušL¦ìììž={R›íûO˜Š ¦ÛzÓ1÷Õ)›€‘R¾‰KztU1ìÝ:àß~ù«TI £ÑxçÎøøø–|(ÄaÑ’²ááá"‘ˆjû‚€…~œTIó2ÔÊ¡^ åXNUÁðQÀb³BBBгõ¬ùFŸM«Xô²ó¨Mñ’J¥‡zá…¨:…ééé‹Å­1 ƒÁ.¥•aü³ÙL¯ JõË/¿¼sçNxbÊ#skÊÁš¸'š6»±£Ù Xâ$` óø%UZ­¶…OÅMwlyˆ\ ãÏP D¹zÓ(k)¯Ñ2XÈ%•èNBý»Z‹ÅjµºwïÞŒ)ƒKðxúÑ“„»·P› ÃDGTº<ë¢&“©  àÝwß­«« êØ±cÃß) ðè¡ø³G ׯ°#£þºip;Ç†Ø V÷+ãsÝUTÙR¡óòòPÀBìÚµëçŸÖét&L@XÀr%`="J`Yj B8õ ªæ ƒqN«XÎ ÎÇÅÅíÚµ«5ÞƒÁ`0I¦& ×§GíìììÛ·o@æ·_ "-7~ì¹Ýz6v4;«D ávëe¸~ØL‘ñ‹‹‹;uêÔ’ ›‹ïØÞ X†r`åèlwÚÆÆ,äÀJÑÔ‚Ñ@µ³uÆ,­–/_þꫯúNþ Gˆ_ôrÙo?s :pÙ&„Î.¨=]¯“ÉtðàA”qbW‹½»€³ Tœ.åÉ׿‹lTÍ­RÌfmì<·°övx4õM°e°(222¶mÛ\.·oß¾T§Ï X¾sÝRWW׎Ãz)Â&ž šÎëBµ_ýõ—^z©¨¨°€…i;¼]İ?~¼­§€ñ8ŽÌ€yq @‹yAt»àÒŸZWUUQŶ‡s‚QãÍNÀb³Ù‡g¢ÍraÑÝ»-™-pÊm둱cì¬À "ó8FDD@.]ÀÊÏml0r`õ)³™e§nݺuç΋-’H$>%`µ<ˆüÈè3B[Yk ‹ø.6¨ f³ùܹsTÿ‚P¿¦‚ج‡ŠþJ=:5X g7}S¦·Z®i”«^-Q^ÐЫ,€7ÚKÓx€Ú L ű²²’jdee!ÓPDD‡Ã¡ ™L¦¶-N7û”ke{©”¶öˆìÅ•èÕ3fܼyóõ×_‰D­'`È7*Æm®¶¦­HMMmë)`<Ž#3`^PÀb^]Á‰«ººø‘.±-o/5Ç€5n²òýU¤^xì³™— e5z5•¨Í‰‰³{50ƒÈ<$Ž;w€\=-_;?Hˆ)mV« ŸQiÕp ¢×‹ËúZ}ˆ3fÌ6lXkÏÙu<Äœ©ÙôÅD™%ï8˜ÍÚ'¼ Öd2;wŽx3Rúdˆè¹pñ¯uÚ™ÁB!ËÁŸ¡6“Û•ú!AAõª˜ØZ’øç¾ááBþ¨qãG ²ÌvcuýÂ0ñ² •WÏc?*0‡jôÐÌÅ X999h½ûððp‰D:êëëÛ°tº–>¸~erío"Y´Ä®ˆ¤X,^µjÕÓO?“Ó¨³…È7*Æm°€…Á`0¿'¬À¤I««€#²ÞšåaÜž}­¡€Å –óR†èN¡zŒ×¯´d¶¤NËW[R‚̋ݒ£a0mKxxxHHHeuu­ÉÌf©©7••°ÛG5L¥>&¢þÀTzíêÕ«™Wª¹ß°|ûÝìp#ÊÀêÀeN ÕM1änÞÌ(Ùãr!ÈÙ¬y!¢†»+Lä%Q.’vQÕ„sXs ëºL|øNXØöíÛó÷ …C€$I‹E†'¾¨TGsmL>ÎæXÀêf°ä%-™­±ÐVƒ¦>ÈÁsþÀ "óœ8RVŽÞö}»ñ×Þ{ï½'Nج©©yPÊGuXòAú8¯ÍÓ <Ę˜ªñJ‰âš†Õ•FóÛeª~Ùü¾Ÿúþ'fÚKQÑC† €ÔÔÔ… Úíh'`Õ˜Ì;jm圦E…ñx<8vìUÐÝ9999.\¸páB]]]“ƒ}*Ž$I¢ªˆ1‹h÷Ëwuo-YtU,`Ùa¸~Ehu ØþÐám2ÀùFŸ°0^ç33GfÀ¼8Ò/é…Q ó‚è XUUU/GH&É=h,±uá¤ÆhRÀŠPÔ$&$¼õÖ[nÎöŽMÀÒ‡·o8 0ƒÈ<'Ž”€uCk»ÙV_½üÊ+¯,Z´Èndmmí šáH8~ Áãyg’îá‘ ŠD¢°°00’°¤XñV™ªÈ`2ß;¦ÌHšEb(Šˆ•[õy¥ºÂhŽŒŒ|ä‘G¨ââ¨Â}rrrÃ4·àà`Ô¦l_(u¨‡sîxê TÛkΜ9))))))ûöísù³ú(T …^¯GÃ%¼Ea⌄Pbï¶ú-¾5V,óÂw,yð¦=øj—vèDðÛ¦@Xà|£bÜ X ƒñ{œ”FÂ0‰ÆR«««û‹¸_ÆõØXÜn=Í¡€ÅŽŠ!%RªGÆ&¦ªÊƒöï2W–»1[ca>j :»q Ƨ°X´…“pô•Ë­«¹_lS¬„“gB`€LXðE¥ú¾ìÊ9UÅVKÙ½oö «Úï8([²úúìEeF3°X¬ˆˆ™L–žžŽö1b„“w¡ XãÆ€3õú*£åmÌŠº´PÕÎÏÏorÎwîÜ¡ååî|Ñù ¨L lŠ•/k'éȳ|á Ió+’Ù!BµZÝFh}ÖÑ£G›{-¤=d°ªº4ñŠÁ´XÀÂ`0Œßã¤4†I4¦TVWW÷p¶µæU5Áf…†;?šC ‚ÛÕváþ|¸xjm‘îÜÉï¿ÿ~íÚµk×®-)q5¯ÐDK! ïÛ„ ƒñ}:°’øVó¼d­ÈˆNFnמÜäî^œf[kד­3NÈ­:¥Ö/)V°Þþtú‚…ì˜8ñ¬Å'$P¸\.<üðÃh/äÀr=…püøñ`"á/š k˜Æ’ ؤ€e4Ñw½n”_ƒ¬IA‚Ï¢ƒ8Žj!þ;T¤U)½:­{iU«  `üøñóçϧŠý»‚ñö-cÎMªm AÓ{€g§„Áx ,`a¼òê1€ãȘÇt`1/ˆ®Ð˜R©ÎË fßsISÀs°È—Ž,Aƒµ Y™ï¼óÎÒ¥K—.]zíÚ5g«Ë³­2ÞËÁzˆDæ8qLHH`³ÙeF3*.f1<¶íÄ4›Ô?~[>ñþ>´d^áÃ~`¿òTé,D©Þ8%¿fs­¶C‡¨³_¿~8pàÀ®]»¨žI“&±X,ˆ§9°‚:thll¬\.?b¶ýÍ‹nGqÙà‚€URR‚¾HàÀ¢âH Xd Ô+‹àZ\ºQ\¶ôl[ÖZ¢KK¿hyöÙgÕjõ† žyæ‹*hÿÜÚ'Õzq;iïÞ!p¾Q1î,Œ—(,,lë)`<Ž#3`^PÀb^]¡±@›snØ,“5½8zc‡V‹Âu•ZvÖv©×CE™ezìŽ Ì 2À‰#ŸÏ§„•{²ùt&ªüVñîrPÛŒ-œÄdáĩަ;x*ˆ,ŠˆˆÀVTH,9räÈ‘T±vh×®Õvž?4+:::((¨   ººzwq%§“%U™e6Í ÊF8°¨8VVVŽ’ò?ï`S¯Œ$ núÝNÑ´YhpÌñ¿È¶3aµžkÇŽ{÷î¥Ú_}õUhhè°aÚ¬†¦ùkjïQhe2™§Ô,çãXÀÂx‰ž=q*5ÀqdÌ‹£ÝÅ_ XÌ ¢+4&`ñ í/Íëš~zl'`q8ÿ¯ß@ÉSϲy ½d¸qµ¶¶–jWWW»4Õ»`}À^Çå´ò̈À "ó¨86Ì"ì"àX¼$FƒzÓWôÁ§InØæ½,Yø<ž bÃB„m Ae:ÏZ a÷î´ÜL‚Ïù7Úz\.±ˆ&¬»wï¢6XT«**>ˆ’qiêÕ³EuGz ⥠ÏYh&,÷¿âÚª[SGm—öâÄqcÇŽÍËËkì°­A+ Xæù矧÷ÔÔÔ?~üÌ™3Nö2Þ¾e¼eyd$a¿B׆V@}£bÜ X ƒñ{И4–B()·¯K¥‹íÔäÑs`±#ÚK_X²bÚlɼ0×Tµ³^1¹èÀ2Ò `ÕËÃ\Ùƒñ}à&ÍÕÅêÀÒìÿÍTRDuêHry‰ò¿Á1„uI„Á‰J劀5yòd‚ š°F½dÉ’ <öØcô~áÄi¬°ª-eé~II‰N§st t, ö­¬0Žå+›$ˆÅEu»ë´ÀŽŽÉŠID#¥wóÇfM¹yîÏýûsss½9ÉV°nܸQTTááásæÌA:Tff¦“½´ö¢ö µ¾ÚdnC ƒq°0 ã÷`+@h,Сµ¶5§þPèªMf~Œƒ”=;°(8<ÞMƒ­tHkM,zwˆnÔ”Áø”€Ew`Ý/áqÌ&0›Tß~Ž:®Ñ|_]/ –·ÁÛ”:°:uê4mÚ´¨¨(çÆºfÍšõë×Ïž=›ÞOðx ¶„Íñ2¾ÙlvžÅ°BŠvùÙ¨-=1;&ÂÃ-ËzœvQc ïÄcóŠ‹‹½9IºhåÁ‹ä¹0`À† ¾úÊbŠlBÀ:òjïUh XŸ X/qüx[JÄx GfÀ¼8 €Å¼ º‚Ã\QR¥ ÑÕ[🢺Ùµ¡¡¡M͹€9`ëéÙL‹îÀ’$uq8&0ƒÈ<*Ž”€uYk¬±Öqa³F²êM_oeQ=$Áúºªär¿°<ÄÈÈH”Œl‡+¬[·®%Žž€Ú#¥|aSY„tK¡PhµÚ–¼{›CÅ1±Ò&E ÒF¯^½(ð¥²y…µw ÷\'ø`RR}Xtt4 °™f$ZuÌ&ºëªU«by'…šÊ"$uZÝéchóO,`a|,`a¼„óÚÇ‘0/Žv¼ôY˜DWp¨TnØþWµ–Ò¼°¤AAgëmµ~‰xàš€e̽‰ÚÅ,°ìL˜AdG*‹¾«®§÷³dAâ¹ …ãAµ„PÙlß§5‚HÿJáp8‘‘‘ ‡ðz÷gÉ‚¨v(‡Å/¼ÝØÈ»wïš­¹cþîÀÊÌ̬?{mÝ?µ¹\.}d»ví`k­Vk]m6ÜlÔþ“1•B=zô±ˆ®ŽþðŸêëI•‚>^þ©µ¨xư,­ÚZÀ ´oTLsÁÆKxÉ8iep™óâ€,æÑš4Œ96µˆr`q¹Ü   &Ö¤€%“ÉN«õhs˜ µµµMþ3æÚnJù¢Æ†f™G Å‘ªã§ÔúuåªÏ+Õëë !_ýÜî﫲ÿ{®]»F HNNn³Y6“Ö"½ŠPtttÃo˜Ö‚Íá ¾muªj4îèÑ£v=þîÀŠás‰Š2ªm Xü¦oSVɼ³ÎV·^ýÃ7tËïR+++•J%Èd²ªs@»°SÃ&„N»vJñÞ*åúÑxN§;~m*’-^­¶°íÓ\°€…ñ®ÜK`|GfÀ¼8 €Å¼ ºBÃBcîMRoјJæ¾ÃGŒ9rÒ¤Ivå“Ò¤€t†æÀ(â€Ùl®©©q~dº€U.jt-§À "ó´8" >ªP¿]¦z¯JÚ. †[·nAݺuk³Y6“Öâˆ#†åµüA ~ªÍyÔÇPߨ°mÛ¶Q äówqíjëâ;÷º®èP|K3êÏŸŠ¼xmú«aþ 17;é›÷Ã9¶[þúÿgÌÏ€ÊÊÊÄÄÄ‚í?¡—Êb©FÛ XöŠi.XÀÂ`0ŒßãË–Ñh$I²éqhhC–­*í¾øÀؾ}»+GsÅ•©5¨­ &Vg>\¨ãNO!¬‘b ƒA)„R©Eœ¥Ÿ˜999zæGÍ9 IDAT½bbbЀÀäµ×^;~üx=ÀûÖÐ4°Šø½ù¬Ú};Ž©©©9xð 1þ|ªÓßX7vlAívé:‰¬,­ñ$ÍiûhÍ"‹ìE XÇ÷üD½"`s³«žœBÔÞóƒE Š÷VÀ¢E‹ˆ²’0Ê2 þ{ÈR KH_ X ƒñ{|YÀº~ýú!CΞ=ÛÖa m¤À*•6O*rEÀ2’p¦Þvo3VÆÊ`h,…ÜoÊa0®Ð«W¯)S¦L›6íÉ'Ÿ¤zè'æõë–UAýÈ~Õz <øâÅ‹o½õ–]ñֆў›dùû³4+ë/Ÿ·ó믿RRãÀSRR¨Nw`ñn^Cm~ÿNFŠD"$°.-Qª¬*x?v”§ŠyPYYyúôé>ú¨5¦ÚV^^ÕHèØ±~×–ª¹“ÍUIÝÑ—æMÛñË–çÃō󼯰ïˆ%¥qÇø2XÀÂx‰Vz|ñ28ŽÌ€yqôe«¦¦æôéÓƒ š;w® jøK¯]»öé§Ÿzêh #«¿n°áÍ«‘슀û¶¥ÖÆI›°ÌŠ:³µ‹ž$õ¡ XþDŒs-ŽÝ»wß¾}ûÖ­[?üÐRL‡^ÜO¬Ö "—Ë]¾|ùk¯½ÖJÇo éóËL`ͤÖëkï™ÀÑ£G_~ùeª=mÚ4Tn¿´´Ô‹sô0æêÊ’j“‹×'ÅùxdÂÊÑÿ¯ÈVÚ\Ä"¾‹ Žã±I’\¼x1ªéæYZ£V~~~›õQ´lññÝu+›kl?UßWן£eÄ·;wìtç°ÇäBÔsPa«Ö¶V }£bš °0^"55µ­§€ñ8ŽÌ€yq´{zéSVmm-$¹qãÆää䜜Ö/‚XTT4vìØßÿÝS´‹, À˜}mêc;5ëh. X*u&khO!7†Ëv.`oe¡v®Î$’6z'àAÄ4IÀÆ‘ ªÆI’HÃBV÷îÝÛlfͧµƒH/èîø÷Ü•„Ò× W.ꎠÚYYY£G¦¾ÇÁ´iÓPÉ$OýBµ uíCeNׄ¤ &""µw+´ï”©Ð¦„E|Ú!HÄ"Μ9ƒ²b=Kk8° ž OrõZzÿ±¨%ÊWKF¾M±ŠäÚ~òòõ¦Ÿj4h³m¬€ýFŸ°0 ã÷ø¸ µ•J¥_ß4‹ºººqãÆÝ¹sçôéÓv+µ»]døRm¹å¨1™ã›u4WЏ@…Ñ|Nc¹{!ÆÊøM X7P;Kg‹ÅNc0~ :kй‰ì*þåÀb$wºöùƒf U~¶LF((( ™ˆˆˆ#GŽÄÄÄDFFR_wuuu>hª¯¯ß³gÏÖ­[·lÙâpÀíÛ·³³³+÷ÚJ}‰ÒÆ4yXäÀ¢ø¬RýMÃê/äžM ›%Æk׮ݹsÇÝé;¦5,}aÞS¡BzÁçK¾tö¾4àšÖøû˜éìíöR˜È9…µ5&3ôèÑcÏž=C‡õÈ|0˜Ö X ƒñ{|YÀ¢XˆV]–ÛwÐëõ<òÈ•+W ¶¶6++«É]\Á.²¨Ô.\ÒéÓ]ÁEüN» œ$p^ÄÝc°nh±€…a2v–ÑhÌÎÎ[‚©DEE}P¡BO Y™µ+^Ðþ¹G{‹êIOO8ÐR( Uéºyó¦ýÚš[·nMš4iÆŒO=õ”Ãß÷‹/>0d犭Îøè&‹¬àà`ªñE¥š.ù…°YïDÊú ¹›6mš>}ºg}X­‘B8S]Á³ï'$2Ñ£óÂ÷ž”þçåÖ5®*ëo.ZùK­YóÌ@,¼[{KgQÐÚ·o?aÂô¿ƒñA°€…ñ8Ÿ™à82æÅÑîâÏS3=‚€å©e¹}<ˆ_|ñÅ¡C‡ÐæÉ“' v»@óPû´Zo÷8½I\°ö)tè&°Ÿk.*trXz áMQ"‘46Òǃˆq‘@Ž#]ÀÒëõÇ×étСCÿªÍÈ FFFfi{ëlÙdš=Ûj^zºçÏëÅ,BBBÐKÉÉÉTÃ,•ÊbŒª¯¯çp8,‹ZÛ‘——×S¯˜-?Z‰ŒÛ¥‡ýQ€~2†:vìXªýÅŠZ¶í—…MÀGѲ_~ØtúôiT5Ì#xÜUwóúƒBÛ­}Ðò·ƒ–¿ËŽŒ€:PwîÜÙºÿÏŠ“óªOÆ$IžzvkBŸÃ*›0‡ª¡µ!Œ<1 X/󙙎#3`^}ÙEO!Ï9°|<ˆv·@§NòÈaí,šët½Þã,´”x‰Át¶Þ–EØ© ǘMK!têÀòñ b\$ãˆÎšÄÄD¡P˜––Fm¢UíüF1** –—*+Ø\z¿´¶êƒ(„††¢N¿°(H’´KƯ¹žù~”M05Ý— V#’úöí;räÈ‘#G>ðÀo¾ù&APc2g>»“ÂÈ“ãA°€…Á`0¿Ç—¬ÀL!¼}û6}³5X1\v”µ­ÖL^nÍBø•æbèQYÔè ËJÌÊ:ª­4“EN!Ä0tÖ”––ÒKÝ 2¤f„± UFó«z!¸§4Ò¤ ÁüP‘Ÿ X Óél¿­fóÃ—Ž…slwµ‘ÓŸpå°=ôÐ8ðòË/÷ïßòäÉ •J'<>K1uÎÕ¶¢æÿ %ð90þü7n4zÄæàqË|ê(j 'MÚºt‹Jí€^½zAÅÊ, Æ9XÀÂ`0ŒßãËV+9°|œ¼¼<úfvv¶óÂç.Bì ±ÍSpQc04ÿÊÛN±âp8v¤R)a}Œ¿·Ng´®IßÑl Wj§c̦åj$€“B Æßi(ûRà"оåÀ€cÅåò¾M›Å‰K@¯¾ÖNÚYeûyò/ ÊËË©†6ã÷ƒMlÚÎ‘Š‡pã]V¯^Íb±yä‘Hùf™²È`ùÅáÄêöRP*•/¼ð‚oˆgk`‘šzqŽmM^þý#鯶oßž:UËÊÊêêê 44”Rµ°€…ñ;°€…ñÔ×%ÆßÁqdÌ‹£ÝÓKŸ°ZÉåËA4™L@DÏž=€$É•+Wþúë¯-?2jÑ `ÕBBB¸\®£¥I‹ÅBòSµÉœl»²¯üõ‡Ç4æÜ³!8q`ùr1®Èqd±ÜJ‚~ýúy2-‘A”Ëå …¡ÿà ×ß“±™XŒ¥züöƒ©ÔR–±sçÎT4óòò¨Bf¾ƒ3‹$U_}ˆ:¯HC³l8غwïþè£Îš5 ¢¢¢Ôfò{®½š&á‘òàÀù÷¬Kwò(ËzÀ:I]©‡CÙñ½{÷¦vŠ•/ÔÀbäɈñ XÀÂx‰ÂBg%o1þŽ#3`^}ÙÕPÀÚºuëöíÛ¯d×$¾Ä¢¢"´FûÈ‘–{‰/¿üròäɃ¡%G¦G¶—Ðf˜:×üXà‚€´2XAD͘úuÿpxLÃMÛ3ðZ#8u`ùr1®ÈqtxÖôïߟÏç{2-©AD&,JsáÄÆË×}R=9jUíKÿÒŸ?EÖ«…Ball,˜L¦ÜÜܶ™n#8°ÊÊÊ ™ÿTÍ}ØpóÕc"¡Ãª÷–.[æö½ûî»T·ððp.—;xék7RôêêH©€E˜L¦Ÿ~úÉí·@xXÀ:vµk’°GY„HÀ¢§‘‚o8°˜z2b<°0^‚zñwp™óâèËJ!¤’Ñt:ÝŒ3¦M›–‘‘Ñ’ÃúrQþ`||¼])œ>YE‘åÌ· XWµÍ.€® X¨ Ö#<’øÄS&k!ïn¾±0¯áxÃõ˨}]k§,_"Æu9ŽÏÌdjÛ·oO5JKK©ÿþ‘_ëmfUýåóUs'WÍšDjêQav¶³u*¼Z­nØYQRRýÌú gPÏI®¸û˜q” ç111” Åb àp8[]:ç…Šyqùòå«W¯¶ðøq`effN˜0a|ÿ>¦"‹kIG’rG%À:IAUpŸ°0ç` ƒÁ`0~Ï Xƒºòæp8;w¦¿Ä0ë÷ß¿zõê‘#G~úé§óçÏSñññ|>È!ž°ÐU~ÍA©5@+ X x饗¶lÙB]î«ûB/iÚ X†¬«`]ˆí¶Þ¤6“€‹¸cÝY¿dÉ’=d0aÚ„†–Á`P(•Ï)Š ÷üPjÿÜ3²ÆRË#kn´œ¿ÿþ;..®W¯^›7onøjüÍ+¨}®Þž[%ìêÉÿx)))žžüŸ—õ\KJl(›˜Ä€k×®µðø°rrröíÛ”gs̯7Ä$$6¹lÙ2älâr¹ÝºYľTÉŽ ,`a|,`a¼ÄñãÇÛz €ãÈ ˜GŸ°ý*88Õ"¡ÈÏÏ'Iò›o¾©¬¬tãȾÄß·©9GŽ¡ñññTU’ò”«'­%`µk×®¹GsEÀ²Cúà$k6 2ÿ1WUÐ_¥ç^ª7ÇsRZÞׂˆq@Ž£'‘oÂÔ 6°ª««I’¬1™(Ù’Õœ„$4xÈÍ‹=ðëâÅ‹™™™hòééé£G€«SU)ùZ©2[gìÔ©“ÇãØ±cÇV¬”?:õÌ -%Óm<’BHý¤¦ŠmKšüCrÚ~ÅbñÎ;ƒƒƒ K—.¨J›Í¦: ((¨¹k¡´L=1ž X/‘šê ãwà82†Å‘$I»‹¿–×CõtËn  ‚‚‚ÒÒÒýë_‘‘‘£Gþæ›o4£c8Ƨ‚¨×ë©’^1B¯¼eY…½S§NT Xv%í› 4ÝuUc€Vs`Ù‘0`е½Ù\¶{ûgŸ}¶gÏjáyÃ5›€u¥©XàcAĸM ÇÑnB‡ÓØH‡©Al(`!qJ"žõ¯/~dÉC¨–ÙüY‡ 1‹ðëòåËv=Ï=÷ܲe˺ð9¿ÄÉÙ`yšPÈæ_Ö >>¾•â(š9¬ÿÕû ¹]Ï Xn_´ÔÖÖChV¾¼ÑŸÂÄÄÄÍ›7³X,T‹¹®|Ä~ÅÔ“ã)üõgƒÁ`0І.ýÅUPPF£ñÀHLL¤Ö?ò;þþûo¥R Ï…‰‡‹ Ä`:©6$Þ½ ÆTàp=ëÀbtÜSÁ”s7,™Lv x½­7Nw¶n^´ÿ$$&&ÞºuëKcœ?ˆa:Œq`1$`•——S ´.µü;:&hÕ5ÏÏ£:“øœ£ƒv·l‘\OÑPÀ’H$‘ªºñò`¶M9Ý©¶¨?Èóëq8±ñü!ÃuÇQ›i~ËË„yDÀª««ë"à´ãXþ*3Ùõ¡)NÆ?þµ×^‰Dôΰ°0ªl¿XŒs° ƒÁ`0þ/ Xh B¹\N9°Ò%üÿ„‰ÿ&ž'" ÝFì¿U±:ùœÿ„Y.‹#¹ì)ÁÎÚåÕÏÎ!ëÕž°:ó9–¥‚{É\d0€]‰1WpïÞ» *µÃïܲ())1×ÕÚÖ%d±qwL `wÖø¯‹©8q`QÒÇŠ&?Šv'ã+Îõâc0®_¿n×\WôÎ+tõŠûýr`³Ù-Y°I#Æ öp ÏwR'ÊhóœÎüÌsÏ;ßeåÊ•=ö½Ç×XŒs°€…ñ™™™m=ŒÀqd ‹£/ XtVÿþý?šöІŽòåí$Ô¿!{š,Dƒ›%`ùTsrr€5‘R®ue@„îø¡ª'§D-WØ°î—ØÒ%Î×€Ãá tE×qOÀŠy ½ÈZüXä3abP«Õ5¿lDÜ Qê]¨àîSAĸM Ç‘1,¦åVߺu‹’® X {õmn[ô±Ú0·ñÏhVV–NwÏR‰\"¾û˜TØ~Dx§?Û\¡·¬ãÁår[/Žü!ÃQ{€ˆ[Wæ+)„e|´©8,$$Äù.,ËΰŒt+$w¶-L=1ž X/ѪOE0^Ç‘0,Žþ"`uTTÍÈý•í6ÿ–Í”[4¬Æ,µZM•X¢ãSA,ÌÏ{;R:˜V†ƒŽáê¥ûîXÖHR(-y£†Ößj=ÄÅŹQzÖ½{ïáii¿ÕiÑæ³a¢x› Ýöê¬í;˜j8w`ùT1nÈqdŒ‹©AD’Daaီ\¹‚RéJ!É?Ùb‹àfÝ™^žª ó‡KØy·Ðæg•jõÂW*ë-µ#)¦õâÈîБÓÑò˜„Gª|BÀ’”'ð-'ž$Ǽñ®AR¦8°˜z2b<°0^å`üGfÀ°8ú²€EO!T~º–¼÷y2φY4ª$VCþüóÏ+VØuúTçVÎ ±ÕÔ8¨ÒMΫ®kz’neR欖;°x1XD°TzHJJj|§F±«?í¢€5dȯ”Æ2£ÅlÅ'ˆ£ƒÆÊø¬’»TÁã÷Hµ X>DŒÛrãÀbjéžšÛ·o:tçÎÔ&Ý쨂‘ãЦfßNḭ̈1ì¬>Bî¢0Û×é¯uÚwÊTåååh_J|iÕ8ò‡GíÞ†z³Õrë°ºW¡v^Hû¨ÎÉnä7Þ¨®®®®®~ã7Ü›†gaêɈñXÀÂ`0Œ Õj3ïø²€…X1\–þÂiK/AüR«1+V'»¯ ;°víÚµcÇŽóçÏ·ölÝ£îŸs“¶ÌÁZ“yy‰òL½¡ò•·‰Œêä׫¨4‡– X÷‰¸"k¬bƒé–ÎnÀwï½…Ba×”o”*QOŠˆûuL0ÚŒy¨Îz}…‹¸c˜ cXL…ÏçËd2´©R©N:Eµí,M°ÕÿÖfüNêõ^˜ac;v µelâãhÇú;SËæ.+Q@yy9ªíå÷–Ex¿ˆÓµ=P‹$﫯A[±³ç»7¡P(—Ëår¹P(lz4ÓÖ` ƒÁ`0~Àž={.^¼èð¥†.}GÀB¬îÅy`U¬”± /)(m÷  ¨¨}£ÑxúôéíÛ·ùå—ûöí#IrùòåÞ»t:]FFFFFýÖ¢öó÷|UNçÕêMÐcà`ÑÃ3аy!"ð„€uOþ Êò7tÏå¶y$--í×:í¥ÍOG/ý%ž9W­V[Ú¸ˆ;†Ñ¸gcÄx“Æ 5,–ĘZMZ¾ÌH•-ºç}ŠŠŠÎ;Gµ”ò%†u¶&ÊAìŒïYg2@ii©«Uáß7„°æª'ð9™—u \Õ®Ór–áê¥HÒzÍÀbÅ?:×íÉ`0~°0^âøñãm=ŒÀqdþÇÍ›7ÿóÏ?_ò}—m+JÊ›0vÖiPÏÃr‘EÆ;wîP=ùùùƒž6mÚ3Ï¡ë•Bµsrrì¬V#!–p{§ Íêû–-[æöÑZ.`iþøµ¹©é„Dêöd| ŸŒ€,Œ—HMMmë)`<Ž#3ð»8VUUíß¿ÿÒ¥K_m(W¹]NÂãPÖ}"® Ö’k@„g͉‰ÉPê©gÈÊ‚_:ÊÃ9,T Y·è¼úꫨÝ&AÌ͵¬­®×ë  nÍ Âê,+–×$u§Ú½{÷N\oÀP´û¤ AˬnÛòejx3… $ «ŒæŠ'Ÿ'­ ˆ ×ß“>û –óB¿;1 ä82¦ƒƒH°æÍ›÷æ›oRar `\’Ûjj 5õ®¿Ñ‡~("##gϞ݂ùüúë¯ cßu ãÓ·å$$É^^ÕµkWj3++ËNÀjí8ÒË`îÚºgÏ·ÕÒB³Y»7Ú’NœêöL| ŸŒ€, ƒÁø:¿üò‹^¯÷G¥CM” P },!‘¦§§ëIr¯Â–}"âN 5ìÛI-^ŽŠgÑ9uêÔþýû[ÖrûömÔÎÍÍÕìÝ¡?c{Rš•rÿƒ>8mÚ´É“'Oš4‰êŽ™„L’µTÀÖ«älË¥‹ÚLR¹ŠB¡0&&Æ£¹}ïÍçó}Úa¿w@,ȽuKùß·Ðæ•ž“:bÆŒ[·nݹsçÓO?Mõ F¶åž¶«€Z¯„¦´Ý*ÜÔYLLL´+Äã"-1¤¥¥½ýöÛAˆšñv™êí2ÕþJÛ".:°0 X¾ODDjSÞØôôô‹/Òû!¡¡»ël¿³ZZ’Z“dggS ³ÙüÝwß¹9]€ëׯëõúPë±Û€ï«ëwˆÃ >’““©ïüÜÜÜââbj€j`·kO-ßRé\Æ&zñ9n¯¯Ò,ë±Ç³«·¥Ù»µê ‚/h°ÃL°€…ñ8Ÿ™0&Ž$IêÛty¶Å¿â˜››K©6F£ñêÕ« ¸!`½þúë£FJIIÙ±c‡ÝK?þøã¢E‹V¬XqæÌ™ÌÚBeee?7’k¹Ç#ÄþÐ4° XåFó#yÕ%íïq™Šïj~ý¥çÆO—µ“p­™H¡÷ ‚Hw`©/ØÿêHòÕE|||Ã]XòP>-‹ð!´äÔ WÙŒiYZ#ôïßÿƒ>pïh-¹÷^°`Azz:DFFR=%%%èU‹¸û×™ˆiŒ@Ž#cRDdMb±X½zõ¢ÚÑÑÑ<¯áàÐÐÐßêlB‰îÄa²^íâ! ¾ûî;³Ùìd°(SÕ¼¬ùéÓ¥*ô;(‰bccÀ`0\¸pêôB ,«6ÞVrq ˜‡ŠÍ7׬ÚÚÚmÛ¶Í›7´&ì“z½ö/[öâß\FY}|2b<°0^ç33ÆÄqñâÅh%éÄ¿â¸yóftÑæ° –Ö÷ߟ‘‘qáÂ…mÛ¶À©S§nݺE½ôã?~öÙgo¿ýö_5#uÂ!Z­V©TÞ“?øÀ(êrtt4•¡4“7ç=_:q¦Þú)Ò¼(LüQtµ9wî\ªŠdµm ,P²%3þ¡ÐåëMqqq÷Œ}µgÉEµEwÜž@¸šærŠˆÜ½{÷¹sçFåÞÑØl6A«®Ò¬{otO,‰@¥R)–é¡büôìâ_g"¦19ŽvæGÿu`18ˆèË*!!A*m¢Îwhhh¦Ö¯·fêtº¿ºò.ôdº¢¢¢'NØ)++k¬€Ý¡D,b^ˆõ|]U¯'Iº¡•Áª¯·TéòN ,0wëÚ÷‰¸q`9¿h¡®O~þùç¥K—R=ºcf…%¿Òh¾ìôI¯Áà“ã°€…Á`Ž%K–|òÉ'½<Ÿbܸq‹/Þ¸q#êqxíÛðÑ¥ókÁ¢¢"¤/ddd>|x̘1¨'++‹j ÛTTTXÄÔ`š€5zjïÝ»÷ÆeeeÓfÌ”<ùŸûsª~®Ñ arà ¹P"‘<õÔST°¼Á`@%Ì2 öA•N,; /ãE IDATLHáøGX!–ä›ÐlÙàöÚÕÛ¬¥ëÿ7qâDºåôÛo·Í#È„•——:îØ1ËÊŒƒ jÉô0‡1,“žž¾iÓ¦/¿üò­·ÞjrpHHü® efìså]èö+Š]»ì1ܵkWzzz“îæÊÊÊ™ÁBTî°Îdþ±F÷fd£2X豈 Åö­ž"äžo}VNNÕX·nÝ矚][Ы»Zi°Ü½9`0þ°0L`ñú믯[·°€åûœ={öã?¦D 8°è滪ªªÑ£G+•ÊêêjP«ÕH!òˆ€5%H€®ÂYAÁüaéèÕ„„„ää䈈‡{×H¾T¬èž])ûð[v»H4ìÍHé³ IJJ¢”š»wﺗÑB ÐEv;«‡€KµM$VêÇߘ–DðâÙ Ð&g÷VÒ`p8² LÆ mq“º¹s{¡ßo»}ïE5ú÷ïÿþûïŸ8q‚2$%%uìØ±å“Ä`|\Ë÷‰ŠŠš5kÖ¿ÿýïéÓ§79˜ªìþmí±ƒä½Õ—‚,$èïÚµ‹¼×Y¼cÇŽšššÑ£G#‰ß!Õå ÂDhscµFm&á^ 9°(Äb±P(¯š2Pi¶|®P‹[^BÏw×,ä€çŸ>ÿÄßÚ¿3PÏŽZmPPÀ`ü,`a¼D WžÂøþÇ÷ßõêÕTûÚµkm;™6Ä_â¨TÚü¾råJCù¦%X/«ªªàÆè‚ÛVyùS¡¶«pÑÔ'+³Êçó)Di0–vêòívËr[È'ˆgJ²¹ù¹ÔãeNWZZ mDzþ`º”Ī4†j“yÁ‚÷¢Ïœ[OX>KY§?ãìî¥!.\ÈÈÈ8¶å'Ž5ú:‰Œ%iÖAâ ݰ™L¦U«V}ÿý÷Ôf“¹þr&bœÈqdŒ+ƒH‡°.j •Ö›DR­Ò:ÚäŽHÀš;w®\.€üü|Ê4M­ÊZUUE­-¨P(ÆŽÛ0ÁÑþff *ÉçoÑY~mœXÈ~å…8†·kÿƦ7Ý'â¹—Eèz !r`Q#•›¾ëOáeá!88Ø ø,ødÄ8 X/ cüãúõëQ;X~GNGUû&‚ÅbQöU*ýQ$Es,‡ ùQ,”?ž°ÌçNtá[ýlŽèÑ' FÐóòò8q ßʢГkŽNSó쬾±ÑÔæœ9sJKK½Dz÷ ´Â^Uºäää´´4'ûéE™-¿C›ñ{³Þzþüù£Fúð?6¬¾}‡f¡1<"`-[¶ìÕW_¥Š «ÕjjÑL9r¤óýâLÄ4I Ç‘1¬@"êQ ð-‹Pw¤éŠHÀêÞ½û„ –dùý¿îR~þÞïSÇ~õò »víB>#µZ½bÅ ‡Ç!õú´ÂhSøÐ s%?Ž.`uëÖîùE–âÈf³orl¿€D\÷긻çÀ b³‚ÏÚž}]U s`á“ã,`a¼DÏž=Ûz à×q4 ôúA555EEE-?¦{Öñ¶Å/âˆìW¡¡¡åååÈÌÒ0‹°¡\åäZP§Ó]¼x¬ºê§Xž°¢ŽÚÊœ FŽc·r2˜.`ÀZòÝ2[ºœ©¼ôMP±Y‘‘ñôÓO{?ˆÈÎa¥ŠmËWý¡Ðýë_ÿj²UN;Ûb‹Ú¹‰BûtÊÊÊ §‹zÔ‘1o°úôéóöÛooÞ¼™þGàp8ÎE=ð“3Ó$GÆ8°9ˆt¢¢¢’’’à÷Û/ îï ¸7°!HdIJJ2d<$˜ºw³êˆݽ5韓Ö-{L.äY¿$=JÿÁE¨ø:ÂhÉX$YlñœSe¹àÞE]CBBúöí‹6Q¡zïÄqÀ“¶§)ý[_À¢;°¦ 8ËJ¾*h¯B Œ°ðɈq°0L ŸŸow‰píÚµ 6¬]»víÚµîéPwîÜA9‰Ï‚,©TÚ¯_?j³a÷f9°nÞ¼©Õj S§N)))\®Eñ¸Ké\D©­ä¹ä©g·°jkk?«T¯¯ªGb´ª]ñòH.öîÝû¿ÿýÏõÉ>|xúôéÓ§Oÿàƒ\ßË$ø>™ñ 57 d!Á™3gN“»Wtè¤0YnÌUú\½â7›ÍÐS`3wh:x¦¶”G,ŠaÆ͜9m0€a7LC³ !A=.:¥6è9ÖB‡å¥†¬L'»˜L&º€>\Âû´CT¯Ac:óØïGÉvÄɇ $I®_¿þþûïOKK›?>µBˆ¹¢LõõGhãØ‡9;Q ‰p¯ ÆŽ‹Ú^«àN1fÑ `ýŸŸÈçÜ;éÆA\L!¬©©©¬¬D›OÈm¥¾Î¶7 K!Ä`œƒ, (ÐaQ\½zõwÞYºtéÒ¥K. ã yyyß~û­{ûbœC° X§OŸ6dÞ£a9_…*º@6¢.]º,Z´èã?¦6=îÀRoü µËc¹Ýz9o'`Që‘¿Uªd ŽÆtás¾‰±h"/¾ø"=§Ï9§OŸÞ¶mÛ¶mÛvîÜéêhŠÈC2›ýJ;$mÚ´iTÙçHåò ­0ðá¦sR(ª««F#ÐS`s`éc;¹¸»s<(`ÀºuëæÌ™³xñâÕ«W¿ùæ›-<ãû0Æ…AP–ž$Ï›mr¤îè'»äççSO†"##ƒ‚‚"„‚£ƒšrû‹¸ŸŒ¹Ÿj¯_¿þرcGŽùöÛoo^8¯ÞðeÝêWHµÅz\k2‹þÄÄÄÈår¹\ެXm(`)§£å7ˆÐ^åNÍ&XèÚ•Ïçß'â&£ºî1‘EÚÃK0°0^âøñãm=Œðë8¢‹ÀR¼àêÕ«”L …Âcæçç †•+Wzd†^Ã/âh'`Q) ñ|Õ܇k_YHÖ[&'¬«W¯>úè£ô—Ѓ„„„'žx¢{÷îÔfuuµÁ` «œ-°ŒÝÉ#h«bäÄ&÷  Xû÷ï§þg’úþW¼”ÁhX?!w””J¥rÞ¼yιoß¾yóæ-^¼-gN=åv*"‘\vœÆZ\ŸÅñæºåË—»²»L&û‹¶²•ᲫUo©üÁŽ<¶Œm¹!ª3™Å I.OÜž°:tè°aÆ?üpåÊ•#FŒhr¼_œ‰˜& ä82¦V ÑŽ´´4*ŽÛï–£Nú²w AÏ~¨Úê1{¶´ãXkÀ³ØÇÕz#-1zÿ®‰€*s é~çµKï¿¡=ü'öA¥&¤clܸ±ºººººÚî×|РAÈœ…,¯Å‘Û½jw6ëœWÞtˆ‹²¶ 6l¶Ü¶,Œ`Ę;j‹Áa,|2bœƒ,Œ—HMMmë)`<€_ÇiéééTãêÕ«h­÷,Ê,³mÛ6÷Ö i+ü"ŽvVûöí;uê³D©Ói~ßU9óAcn64.`i4š™3g–––ÒW´A¬„„@Ot«««KJJè‘õõ¶ô½æ¢¿t=F.3šù4ª1€uýúõ3fP‹!J¥RŽ,(ä«-üAÃÐÈ%êÇûرc:§«›ÿøã6løøãQ…Žââbçµ6œ@­$•&á¡b(¼Þ)ü±ÉÉÉ®ì.—ËÏk hÓpý  NÆ#,°hö«L­1<"Âõ™;Á³Vsñ‹3Ó$GÆ8°9ˆvÈd²ÀA¥–´–¬2\»bV4ê3¢ XæÊrþ©#è¥üçç×½oß¾ãǧ& ^Œ#·§MÀê%àÔÖÖ6÷.¦¢k×Ôî]'ÛŠÇ‹¦ÍBöÿvíÚ5÷Ý}|2bœƒ, ( å⡇¢W®\1,·Ð-°H’\¶l™'戱a'`À!C‚جÙ!–'ÆÛ·*«Ý¿»1kñâÅ×®]ƒ{W´Aÿ Áºd8TUUÙÕAk‰‹n¿:ªÒ¹¢¶DGGóx<P*•è#õx™àóeKÞD7º 8³ÛI’”¸ã’$>l×i2™Š‹‹›óQlPI“ðQXÓ&#DLLL±ÁTf´,þMê´†ìÎw¡°Vp·9;25FT²·… ûm‹Õdz ccX:ÔeR…Ñ\@XŸ˜Mús'Ѐ+W®äçç£Mº€¥Ù³=œÈÕ€<½é|h|hNVn׈ün™ÉáÓŠ:!V”*ƒC›Î \¿~ýÅ‹÷îÝÛä’¯‡Û½7j÷r©2šÍ¢¹)„ÃU•è1Ž!"R•غžáóù=zôhî»c0þ °0L €. Ô¾}{ »WÜN!¤8«i.¬§B„–Me ëÕ5//þú“ݾ&“iûöí_ý5µi°LFCV&Ý¥Ù½U¸û—ÿ„‰ÿ&žššKèñœ€¥wEma±X;Ú&GùœÎ]„cFýËC…Q\6”––Úí²~ýúeË–Íš5ëäÉ“ _…,P­R©¸ £­?ÈOm†€E}º‹õ4ÖÕ‹®ìX^^÷‰l¬,#)“É\k' ÛoÿuŽ`0mcX:óæÍ£Š-üYa3eý´ñðáÃÏ>ûl\\\ïÞ½:d{‰&`Õï´ý"ÿP£9yö,Õ6Œ}˜×ߦa Øô§.§Sg’ v×iO©]úÝlC¸]{Û"×vä±ëî6;=ßEëæÍ›À%ˆNY¶êŸ¹=RΞ?O9µûôéÃçóÛƒaXÀÂx‰ÌLgË—`üÿ£Éd¢ÜRA$$$ÄÄÄØ h‰‹bÕªU-˜ Wñ‹86°†öéõT¨È~I&œ8°4B"dhQí'N uñðwýd¸z©jÎäÊc¦ÖW²Ølv‡ÚŠÚåÏk>]³¼dy;ÉÒ0a÷/ß(³ùó5ÙlvcææšjÃõ+–ٜҙ‘å”Eˆ ï(}n)!´||1˜ßŽ”‚Õ„0 Ï<óÌš5k6oÞüÊ+¯8|·Ë`©TªþB*DÅ çviÆSߨØX‚ þ¡e꯸$`•••ÉØD¡M8ËÊ<å–j[Ë/ÎDL“rãÀ ä 6$,,lÚ´ipB­GÊ¿Ž1âóÏ?/((ëJ#6ˤ5æYHrGö¬UÀêœÜ%øÝÏYRÇåÆËx°Ÿö…ï>vêÿÞ}¥DîÖe÷Z ¾€›hIŸ'´™.ýœÑ¡ X$I:Ì"¼sçU¡b~¨ˆSgùƒ«ÌäqQúÃ0 ¹oíãà“ã,`a¼Dlll[Oãü7Ž………T¹ÐÈÈH‘HÔðÉž–F£¡;\¨§d~Ç‘úKRIäs¿r¬æÙÙª¯?Šüôm9Ûú³%<›¢ñ\¸øjrø},…½KKK© Vχ‹?ïÔýôÁÊ™ê/³ù…0Ñå½b¢5ë^Gµœ(8FÃú˜ çÃÅÔ&I’î•ÁÒ?VåëšÖHÉíVšoŒ†½2+;:Vö¢m¹€QR~,m籪¬¬$­êäÉ“ßÅ=I’jµ:MJ³_ ®}. @Ю];º€¥8sÂÉxDYYÙb>Ç*Xeid¨ÇžÌ·­€åãg"ÆE9Žv_nþëÀ ä :dáÂ…pZ­7X';ó9¨4;PUŸŒù¹%Ï?§¯€àà`Áî_Ѐ¿”ú*£y™“““ÙQd¯¯³¼l}‘¥5~T¡~QE­Õ[ªR+L$¸+`y3ŽôÅ…ÉÜf¯Fm§X9°6mÚd6›ÛqX/GÚ„¿_j4× ,`á“ã}N‚ñ;ð ¯ÌÀãˆò©ÊG jÑë|»H~~>IS@Ü8B[áËqT«Õ“&Mºpêd»[Wߊ”>,”iË‹´Gþ¢SŒ~(~úã5ÿ~Ül­ü*d]Îù¢[ìµòªËÃ%ჸð‰B>$¼„ÁpóZ×€%>A¬+WQ“‘H$Íýšßw¡öA¥.<"ÒÅ)«K—.7nXŠCÙY·D3çÖïú™²w± Ú9°*++›|÷XjµÚl6§»[‹"66öòù2 ”‹‹SZdVÖ5ö@QVV–.± g‡Uºðx†X¾|&b\'ãÈV Ñ!ƒîСÃÝ»w/k )Ö îÉQaÚu¤VÑT”+Þ]¡þe# »âä‹‹¢¤Nô_êÕ¶'@Ôóáƒq¢cY¡áìö‘¤^ýŸÒ‡ €¤`ËWEEÕp/…Лqätîbk5ûÉbe4y´Çr@’äÆ`e{©Àl\k2X¡ÿ矪ª*ª‡y>1ÎÁ, \ºt‰jtîÜ]¹áÀ¢W0øöÎ;°‰úýãÏ]öl“nJ-´Ì¥¬‚,p |EQ€ |¸~ nEÅ…úU–Áˆ ‚R@FÙ-e– ¥»i3šÜïK?¹¦iš¦i›ñyýõ¹ËÝå’'—»{ßûy0›Ím©š„¡y饗òóó+^yöŽ“ûgË…|Ò‰uTkÌOÁíŸ!ÿúG-4ZànÂðJ”øçDùÙÁ=œªW4Êžx‰+úV¡52´È…¢ xTËZ«09ˆ&·)õî_…wëÖíž{îùé§ŸÐÇÜC‚Þÿ(šº_&¨,kT‘]ú#šÞOz&`©ÕêhÙ‹ß°5’ÅËÓÚ$$$h¬T¾ÁV샠(ÓÉã-®UUYy«Ä.œýë^M17Á5°0˜¶0¦)cÇŽ€}{µÐ·‡ xæ™g€EÀ=yûë7®¥ëµóIâë¸åÚ2äk¾.Íf¤¦¤¤ 1§ß@V—®@²¾ ª‡m>:y¡Ç0ž9°:vw{^a•“Š“®i*`9,pôèÑ‚‚‚tgZˆ½¸ÁG ½Âb½|ù2ýEÉårú²ƒ °€…Á`‚‚]»v±%â>Ä1kÖ}1¦âÚI£š—XÌX4~dÂòMvíÚõõ×_ßÊÜÝÜ2gt¦GŠënTT€ªkâ…5«j´õÖFÉ€$P<= €àr«$޵¨±tCb¿WÊÔ÷]«¥ÓhfÊÐ’€å´êª~×vÔ€é¢Þ|É`nZp­9FŒñÃ?¤¥¥!ݪiñ,Á¤»±­(X›qö(XíÁ–X,~ûí·¶àY ¡F£+æ!E›–N†ºUØ‹ ]ÇýˆÖ~W£?î<Ï‘‰´ª å­h¬Ôq­É‹76XÀÂ`Ú.âÀÐÖ¯uzôÀÇ|þt­ †‹ºÕ×9,Ïa<:™:ùRjj*8C.—Ó¿™ºº:º+´? XÉö¢T8%h‘æR­j¥fÍgpðàAàh :órzõ;×H®6l 6°€…é ²³³;{0^ÀOã¨Õj¥yÇrR"~I”¥ü[ýÉÒ¹¾‰ ejX¾)`mÙ²eõêÕ«W¯¦±y ߌc]]Ýœ9s8䲘F æÌ¡ä©ÿÞÿ¨xþs‡ŽšY\§¶R¥¥¥››{Qoz«\ý©(Hç7N— æ±WkC¿ý-ìÇoFtÿVѨ¬•äéÿãFÅÀq­iî ûåø81/ŠMº°¬Vë×_Ýt¾nç64þ]©€>}ú¸óñ 66V(’$™™™ M+AB‘`ò44y‹¢TùÆ hÒ!…pÅŠ&LpØ‚g,FÓ(ð–ql„þ8Gå5‡þmq­tƒjŒ&Š –o‰˜ÖÌq V0±9Æ%& Ó„•ôû†ïãCŸt•\ÏéÙWÙ39§_¿~N—$I2,, (Š¢Ï_è åÙÿ|GÆ‘câÚ¼Q<³ÑRQÖªÕ›s`Tö¾réâ3's?Š•2;ðJ_zsÐàF ƒS§Nõd×}|0b\㯧Œß1räÈÎÞŒðÓ8îÿ÷ßä>¾øféÖ2užÎô΂'GÝÊîžÊNê!¿`"³ëõf:KŽMÀB.¬ýû÷ÿúë¯O=õs¦U­4æ@“ÛTzhþÂÝ¿þú+ÇkNRÍœSÿÇfBgSâ´[æÎÜy4v`Mš4iÞ¼yÌFQ4555õõõ"‘¨U»¤®­Å(DÅ剀E;°ŽjMØ2?‰Â|J£Fž²¦ÔÕÕMÚ¯Uv© àéS:WÀòÍ#ÓZ‚9ŽãÀ æ 6G×®]SRRòóó7(tc`ð®1þ‘Q«yaƒ N÷ås8!¡Âé gÎ ÿã/æ¦ÒÒéYLÂÃÃéGtÕÕÕ€®MN’dÿþý=ØçŽ£!ª çF=6^fEwqÝæ,ÃÁÝ ýù»€Œ øc'q‡Œ|î2zxFÄwÞÙ–ý÷MðÁˆq v`a0˜@¦¾¾~ñâÅÿ¼óZ7®“«j!I¬OíÎcCÛXR©Í1ä]Vii)Ròòò¼¸eD§ÓmܸFŠì*Éû•šíJ½(*ÍéÒÅvu¸gÏž§Ÿ~ú¯¿l—Èü‰S%Ͻ*}éͰoãô$}ñõÈ=y›Ã  ys7oÞ€ÍuzÉ‚ù“îdwO…†Ç¿4?ÖéÐø!™@«VÀgŸ}6nܸ‰'2«SmܸñĉtkK„ñÐ~°Ø®A ÌÔu£úöíÛÚoC(º¸dwO|ýS™É~í«|{‘òÅu/ÎOγeäõë½öù§ ‚ËåMóiÿZ« Ï䈄E2"ŠÓ³Õ ¬³•QËjtY«âôÉÞ …·,d–€…Áø;]ý×…qÊ¢E‹æÍ›—xÿ,sˆ³œq’ }oå~39¥H‘z©²hᛑ{ò$ϽʊŠqHt!`¡ÿ󪪪]»vÑ:NFFFÓf;>ˆ5ÞÞ;Ø|¥u­¨§R”öÀzN4ØS2YQ1ÒÅK`ðàÁhæàÁƒccc[½ÓŒŸƒ, ÆNEEÅ¡C‡vïÞŸßên¸ßdçÎË—/Ϭ¸†æpûg&å,òÇ„ÐH6Ù ]™yWÀ:ÞÞ&¡TΟ?o±XÄ$Ñ_`wËoWê@"±Ûsš»V4hsúßø—èѤ, ¥à]¿~Ýh4ÒyÙlvt´]“Ëåh¼¥Noj('Ïe‰Ž€}ûöíÝ»7++kÿþýôKz½~Ë–-z½þäÉ“ÌÝÐ3JweÕÙÚŠwíÚµ_„{È }´\§k¨üEéuÚ_¾Óý½m|á™/»†|+ÝN’ÏÏ©[òŒµVqðàÁœœœÜÜ\äóà‡*̳ËLü1Á£¢(Ì,BcN³e° |jš<®5*,Vðjm¤[áo ÆÆ…qÊìÙ³W­ZõÕê51ßmån”žg°È?ÿž7|´B¡½•âLðmŽ!æ¿tll,óA‘LkÇŽôxòäÉÞý í+É^‘Ê\غ{§,ÓÅsPãØŒ…öÝVV—®Ð»wod ¾ûî»=Øg ÆßÁ¦ƒð‹|æ/¾øbäÈ‘&Lxýõ×;{_|¿ˆ#“M›6Ý*æ2M=ÒWÞyûcÞÜgМ®Öwñ¡`ÐÓDÝD¥RÑmU'm?Ë»,ŒãÙ³g`¨ËiF®Ìf+¸!` ‚Þ½{;Ý,SÀ*--¥( ¢££™wYÌ ë:‹õˆÄîî‰ËΫõÂ… ô$ªDö×_ÕÕÕÀ¡C‡ìofµ²íöjŒÐ§OŸv*°Z%”¼V®n:ZF¨€´X€¢tÛ­ºsT÷š²47M‚¤:µÚÉŠ®°Ze—N£)þ¸Û=Ûg™LFÛÔÛ5Éf¬ÿþ÷¿ý5 4ùÚV‡%`X>x$b< ˜ãˆk` ì=å_þöÃvñœ§¾ªÕO»ª˜r¥Ú:d$ «8Óí˰\د€ñ^^^¾sçNzì±€ÕÁqö¶—0¶ÉE X†&l4ž|ÝfV\"=Éb±>ÿüó%K–<ûì³3fÌð`Ÿ}|0b\ƒ,LáùÌtz\¼x±s÷Ägñ‹8"t:]Ùž¿×Ä…Ú[§ ÊéÝä —ü¤¶ßBp^’´Ê„…’°âââBBBèqû XÕÕÕ%%%ÞڲƑ°F0ª,¡ÜL+,,ŒÇã9¬;`À€æîšPÀ7n /ÐAc:°àd4+a;9ŠUêm¿Ù*\ kÆ ô XE)°6<85rx'´F𨖛$$$üX«{¥Lm¹*¦k­­Q,x¨ú¾ Õ3nÀµ ­°ŒgOòëm«ØîÐQží3(•J£ÑøÒ?¡vMó´a IDAT¦ g)óý1UU 6ü$b§*Ð,<1Ìq V0Ñ}¸‡Hž{uUpLkúAý0ŸL=°–,YBŸd£¢¢˜®êVÑÁq éŸŽÆæü‹Ì¦À-â4…Ðpp/s¦Òb=z÷ÃìÄdæÌÇ{ìÝwßýôÓO“’’<ÙiŸŒ×` ƒ±ƒ$‰üü|‹ÅrÏ=÷ <855µ   sw ã;wî|[Æ6î’Ï}½ú%)ÙÃh¬3K.ÐoÖ Ò”òòrzj`ýþûï‹/~õÕWÛ¸ç4L ½ -`1½r‡ê@’$³Ü8A¨ ÂÅ•.Ó…j×– [÷Ë]í…ªÞyFÆ+æñ‚¾¶®­­EO‰>LQ”D"!IrëL{sÀ|±ÌDxTËMè,ÈoÚÜgÞÏN¼àE‡k\¨zÍŠ‚ !Z/`öìDãëÑñ‡ãbááp8}G.h(ƒ3³ò=“~ªjVÃ᫊ìrÃd’$BÖp , ¦-Œ ã>¡¡¡ô ¶¶Öl6Ó'‹…æ€L&CõÑܰ´Z[g’»îºË¡¶šÏ"ŠïVmiÈå×iuù—Ü_·©ËZWkûv©Ý¶Uk«½ÚÞÜT©%O/’,xQ¾ñ¯µµú µº¯ªµ’«$ ^„Æ_ÏbÞ/ã“D«¬ãöLÉ›‰)mßy™L–g±ß÷OrºX¦UÆê¶Þár¹Ü‹b°0˜¶0,Œû TÁºººÚÚZ:7?44”™/Ïb±úöíKËXn XÀårß~ûí/¾ø¢}v¼]¸lµê_ß{Ûý› XÆ£ÑUè½ùÑëu§ VϺ1b0 °0„wS«\“™™ùí·ßz°"º¿€?þø÷ìÙã…Ý :2Žm'é\ó'LÍœÍ|5""Bc¥•ªP*ëz‘î¯ßÜÜ8ÓÅ|êHƒ’Î<¦¤¤ÄáÛö¢Ë×âXQQQQQ1VÂCç¤3:S­Å± SÀºÿþûÁ¥+%%…¾¤¾råʵkךnärùc=6dÈú½bbb,‘1_Tk6%$‰§%,]yé?þÈœÿý÷ß“¯FIÐ5,§Oÿ­¥¶\ÂîÝ»»þìƒn!ò®´X_/Uþ_©j¥žOºK¼àEù?’‚‘t)ecD\FãþQÚzÓÅs¶1€&¹§WöŸ>UŒÚa]Eù0¾ýfØšy+=ðbþ t¶€åkG"Æ3‚9ŽãÀ æ ¶tö©­­E°šcOŸ>­P(,‹ë9(Ù°OŸ>Çíµ×8m0ùv|‹9B4f]mEÆFSËtÁ^kr¿Æ0lذÔÔT¦ =HÀ#Æ5XÀÂttû@£ÑÏž={îܹ:Îýu:Jã‡ÆÖ¾}ûN3AK‡Å±íÔŒãÛÿâD<æ°}|¨Þ¸¹ÎîòÐ|õ1XÌ஬ÂÂBö™ *Ä&Øzú”••µq›_‹#?8Al×Yv7”ëv!`‰D¢W_}U$õêÕ«¹-‹D":‹Ðh4¢‚›Íþæ›oŽ;¦R©®]»vë­·ŠD¢/«ë‹ŽG½„$Ê?ZšÍ!8élÚ´éÅHñ­Œê]Ây «ªª€ ˆökŽ~¨&ý¦À¸àÝ2.rßéèÜbá´Њ·Kù­r`Oç ƒ¢Ð`æDDµqÏiýäs¤CÁ%«Êñ‚µöÛÿ¡Šþìî©Cî½¢¨¦ÎÄ6Ò¹–¯‰Ïæ8:8dý×ÌAl-(…°®®]93+¸·Šˆˆ‚ ž~úé'N´ÝmÔñq,—„¢qD­cA4­eºl?»Õ›¿ÿþûÕ«W·}ý|0b\ƒ,LÑ~•Œ@÷rëÖ­ËÌÌdjR®qPNž<‰Æ …"°Ë¹O‡Å±íTmÞh¿ûMNáÎtXù8VTjL ùbæëWµÛ7»³ýö°Ðù»OŸ>ô U5æ]ãkqÌÍÍåÄ- (Kí¤‚; ª•ššÚ«W¯ùó绾eBò-“A“B& ‰D$é­ÔkåêkÂ}¤5¿Þß[/§„L‰Ø‘$ÿ3Iþc‚ì®ùÙûRnÿŒêî½é Ó°°°¶Žµaö‡:ݬ&ÊjusE'¬KçÐäy½¹k×®#FŒðÊNúø`ĸ X˜@ƒ™ºuêÔ©~ø¬V+ª ÙÌüA (Š9É4daüsîQ4N{¥hÐMþ “å§Z» «~ÍgîTª¨¨ L+‚MpÀj™×»wozàEËר¸qãpGÔPn_/’žÓÛzD6°n½õÖE‹½ôÒKóæÍ€×^{ÍõÆ{ö´¥¼¡ƒÚÁÕÚ±¿[mx‰ñX~ÙüJº|8eo 0FÌ])FÓ•fkéãÏ7ŽžŒŠòŽYÉ)ݺu£MXM“츃†’2[©¯vóšûoddJǴƦñùf¡qíúÕÀø×­ÿa5ÑК°žd ï{Ø[oê®…Á´\+ñ®+,,lÒ¤IÞÙ³Î€ŠŒ©³ØD+ %Ǹ¹¢cnGMjd¬³Rji¨P(t²ô` h {9šï¾û®´´t„ Çw½¢ëÒï+V¬À½ý«Õ V«¨ÐÞ †;lTÓŘ¹]+«ë™&,ÝŽß[|—¦EÜ €Ob¥¿w“=*bË}Ž?~öìÙQŒþƒÄ°QHÉh*—¤§§/[¶ìƒ>˜?>0®¤›£i‚¡›:tÈ`0)jEeËE£ 5÷Fݰ)w¢è·«€ÕµkWÚÞU^^N§K»°€dño½ M%—»ëϧL&Ó»õX½×X šþ ¥!ÿˆ[U®úðMͺ/4ë¾Ð|õ‘fÕ'h±òXBäµ7u XL[Æ}˜,$`y±9¬*“ÓÛKOTfïssEkù¼9h|Á`îÒ5Î{‡Á XÀÂtÙÙÙóFųO:Õ§OŸ½{÷ÖÔÔ¸^ÑÁ…HLL­V;{öl«ÛÆà@¥ÃâØ¶oß~ýÀ^®Áfª2òøœ”ÞMËÌÌ\¶lÙ²eË&MšTj²üʬ„µæ3°Z ²²rùòå‹/~ûmÇÎ2MSç„ ÇŠy\‚x/FòÈÍKkV~¶wï^?°zöìI—!×h4Æ@ñ©8®[·†íVÔíw¡*NR©´Ûw°ÂÂÂZÌShZ3õ¤,æÕõôf:J‹bå!Z(XP¢ÌÑš˜fÏv°Ž=EÑõé+++é—œ–9ç³·âNQ»›[mºpšj8”JM–&‹,R®<MÖ¯_¥þd©ú“¥ê/?¤L6 ^­Åz¦{;ft®€åSG"Æc‚9Ž#`s[‹ÓBXÞ¥ãã?q2š4æµð¼á `%˜íW¡çufµ|0b\ƒ,L1räÈ–òHÀB·puuuТ€…XÌ{W>Ÿ¿eËÚæíÅ*Ú~J‡ÅÑ5®«8Ÿ?~ÏÇËѤ:±NþëRRR-Z´hÑ¢Ûo¿¾¨®·¶ÅÌ…ùú]ÀÞ½{/^¼|ùò·Þz‹}‹É˜R_Ç' ’$à JxñôaÂW¢ì7ö“$ï£7ǧR©>üðÃääääää>øÀýψ¬øøxZ2°Z­­ª½í‰#˜L¦Ÿþ™Giûm7}È-·ÜBÛž°æ `µh¿‚&V·nÝ›3gi…f|aM¿KU/WÝi ÉÊ©éí?TzºÖûâ2ÕN•Áa;í*`9Ò!‹ýDQ™0&ÜÁ™ÐpoiÒ[JKÜyãZü¸ÖÞˆ“¸ÿ¾àzçoªÄÑ1^|G:WÀò#Ó‚9Ž“BÌAl-NS}ÄÕñq\¸pá€ím‚ÄEùn®è `õáÛ¯‚.LôªàŒ×` h ÂE‹1ç»/`=õÔShfRRRzzzJJ =é~IxLûñÕW_Íž=ÛÅùùùäY{Ò+}¨ë Òþ©b£å”Ü~Ÿ¬^õ1X­§N¢'­VëÖ­[QžÊ7_ú9>ä|jÄþ”ÅÄ õg½-á5.³5AÂë/àTVV]¾|Ùý‰,]»vE.$o X¾C]]J¥ê/`s¾=Vl+2zΜ9¯¼òÊgŸ}6wîÜ6¾Exx8Ó‘tï½÷¶¸Šƒ€õ / IHa±V˜­ôÕU÷Gæ}È‹^Pr±rc­“ž§í*`A“2XHÀЉq¢øB‘±»]Ë3ÙïÎ[óN ñ ­ ¼èÀ~úÐ_åq*‹ská÷ Ý?jCXX˜ßÑœBˆÁ´…€q`aÜÇ—X›Íæ Ì ®aÂ4uVµ[mR¬4½åËy9˜, Æ5XÀÂE!köìÙ è%÷S'Nœ8zôhzܽ{wh|ªöîcZEQ¯¿þú‚ ”JWWò/áÛ/©ec&¸Þ,’‡^½pÝG› .évýqúôi´Ø–-[4ß|Y9>]1÷?°íD²Ë{Þç"D•••¨2ªûÞ"†vòùüððp´‡W‹–ä2ùƒÜC`òäÉK—.}æ™gÒÓÓÛþ.È„5dÈ%K–´¸<³rj¯^½üq‡¤¼©S§Òƒ;ï¼4VŠþ¯pè9ØÁRá X 1×xä@Ëo@Qºöz´ÇµFð¶ n YP½ªF[Э§xÎSìçŠ}’?vRDþV…P>i{€, ¦- Îø8 |ÙÕ)’s¬íŽƒ (S^Ž;k1¬D.+‘k;vLuÁ€, ¦YüIÀÊËË;~üøîÝ»ÍfsËKc| ÔÀ޻Х‹eeeôœ°°0™L6oÞ¼ lâ…›¬é¡ünÇ÷¿×?eˆXÀjB;ÅÑÌfó¼yóÞyçhɈľz%”eûs«³RQÃZ°"§¥¥q¹\8U]»Ui¯AP½ôåÂ3§Ðä™ìƒš5+-奆£]l-OgBã žætnuu5=‰JµÊŒ%ÂëV'ÆÑ:”ôáFÃ8ØëïB7"‰D?üðƒ;¦ëóÏ?çr¹Ì’ÿr¹|Ê”)ôxÉ’%çÎ+++;qâÄøñã?ÿüsævÚUÀ:{öl«R€7ì46ˆ–ŠúŠ U=V[©K3‹ÅòJ§s&={öTX¬o•«×„ÆIž{õÞT÷Ï‘­üî½x½•€v`ùΑˆi ÁÇ€q`s[‹S–XGþL46æsg¦€5NÂCãcZ“ÎJ³€…FŒküFÀ²Z­C‡0a®CäÄÇÇ·Çfy䦠‰ìWô}Ý’%KþûßÿÒsܰ† 9ŸÅ†ð7¬ê¶gûoÝäïÆHúu‰ÆY XíGwX²dÉÚµké±FÓlK¸êêêV»•\¢¥ûÒäää矞Z¥17˜°ØuŠ„½ ÷Ór>¥q¦‘$§ï€,–èý Í“%Ê%œpnÿ ú@²°Üw`1,`xļ%`ubP«Õ$@CÀâ âõw¡X+V¬@éÀ®AÖŒ3Æ{VÞwß}<žíZ3,,¬OŸ>ÑÑÑ¡¡¡;wîtð‹µ«€Ï°(ŠrB’ÁÃP²žµ¶Æt±…kÄßÞyOjMÊËùƒ4´¼—.]ª¯¯?tèдiÓt:úÓ`–¶Ìq ˜XÁÄÖâ´ ¡¤vV%Ãíχ4G\=æD4°ÄvkÚÁ,`áƒã¿° j‡,„.3ä]®\¹²iÓ&$jèþÜ¢8°‡þM'%%Ñ3Ñ£{×Vmm­I§]ÖEŠŠ‘É…¿û¸æ‘»â„|´˜·?„ŸÑqt‡C‡}üñÇhÒE?¾üüü[Dö|´âp·Ê?¿úê«ôµB‘Ñò¿êz4F¨`¼„ÝyìGåŒ'FŠzªDùwÿ‘»O†ÿü÷úˆnŸW×oSêC£cDsìeÔbòÏÔ5¤zàÀ¢ÛÐ0¬òòòÜÜÜììl”™èǦh4š~޼Á1GJC8Ý{zý]zõê5eÊ”ùó绹<›Íæñxb±xÅŠô¦€5kÖ¬æÖJNNfÎiW+$$ X—.]úþûïF#Èd²æLRB±$[kwìv±ýC‡•ïÞ‰&O´Oþ 0¬Ë—/Ÿ={ÖjµæääÌ›7)¿ìÀò#Ó‚9ŽãÀ æ ¶©TÊçó@¥R¡ú>âÀê¬8r™åV/¥´õÍ/ ÐX½’Äp‘ý1Þ‘$IwÎ*ø`ĸÆo,¦ú€, Íï¿ÿo¼ñ†Z­6æ­[òtÆÆÿLø%QöbE~õ}óˆ°ÚüY555E ŽÂ ´´t~˜(•çxáEP”1÷Ø-å6c°ÚcÇŽ%''§§§Ï˜1Ãá%£Ñøè£2Oö‹Å!{Qtáü`†G™ÜËébˆD"Z ›8q⟲ØK»­ïÃ.ÒûeÂß»É8¨Êxt—+‘]Ÿ¹©úM©W¤g²"£qºŽŽæß2ÎÀ·Qâ fÛuŒ^¯w]½ è‹fwh,`Íš5+##cÔ¨QôïßßQ«ÕcÅŒXÃoqÚ2² 0`íÚµDã*û®‰D¯¿þ:êc- ÕjõéÓ§ÿøãáÇ7·–\.GñA0e¯ö 22’6‹étºÇ³uAj¶A‡Íö/Ap‹¿÷Þ{éŒÖt Âö0C…‡‡Ó›U«Õ;wÚ$³ 6\»v -àõ7EàXL[Æ}‚ˆŽŽ¦ÇÈî#¬Î‚SÍo(>`6sޏ\¼‘€5BÄE]€ÈØøø·DFFÒ¥-0LSüFÀBOb X˜èøÊÊÊÞ]ª|ý9ºžK$›%âv­.3]8c8ô¯ôå'3EÜH69ÃP›{ôhJJŠ@ @þ,¥ßüÃóöª7Ç|½Wáù(6 ¸ a{röìÙ¢¢¢¼¼¼ýû›£•——_¹rÄb1Ê`j® –îèA¤4-¡©n X0}úô;î¸ã‹/¾˜=þs7U°m$ŠM~ÜE‚,B yîÕÿEõخԺ†c XÀæTõ„– Ôn‡¡³Õj5Ý—Ð!©ÐtþtõÌÉÖZÓeØŸ.°yU*ºXÌÏw·U³/£V«oe8çy#ǵǻDEE¡H¹IFFÆÂ… ™sÄbqZZÚÔ©S] aÈ„%“ÉÚû” ˆ;v •Æ…€'Yä]4;e­unM5 'îïÞ é[(8¥3À!ÞOð€ÔÔTzð믿:¼Äáp€Û` ƒi ãÀ´ ‡ òd37£íI†Ã-ôùe XwJí_`ôøß~ûmòäÉ^ß= &`ðK«¼¼¼÷ãÙÙÙÞÝ`EEÅ‘#¶çükÌׯ:_NYûSBèÎ$ù"‚XüD›¤;2}XÊןë²é;>ÙðôC&ØqTúâTˆíiËb^.ìÀj‡8"._¾Lª««­kK£¯=)) 5ƒk® VøE{ßÀýCbb¢ûû°yóæ=z<òÈ#/ûCÈü…N—L.˜< 9¤PµìÞ½{4hРAô­¸qôD´Ê­b.ýû†,ÂÿýïÉÉÉÉÉÉO<ñsãêO–š¯\V<ñ@õõbzNÆÍBÅÓÌ<{HB R©‡«  Àýæ@ûűµª«¢ÖÑÁ1¦3÷†Á—_~éÐRÐMèÎÐþ-é ÞrË-ëׯgÎo®‚;A,=§oÈ"´Z Ù{.vøðáTÊ„.ò f•î³¶À,ƒåðRXXX«¬s­Ý~wʷ¶Ìq ˜.„ÁDp°|§`S'ÆQ“Ò Gܰ$1IjŒÇŸ05$$dÕªUí±‡þ>1®ñ §ú;#G¶Ð ®µlß¾–92EÜY!®l‚ˆá° KMÅŸÝä)<6(•ÊÒÒÒýû÷þp©vëÏÌå¥/¼ÁŠŠ=údè3‹ÐÌY2$°€åõ8"€e±X˜‚5ÔÕÙú …††"–S‹2û*íu¦þQÜßÚ/#—Ëg̘!~ây²q1& à{Búþç@tÏJ`ˆ/¾øbNNNNNΓO> ’AC/êíyˆ¯D‰—ÅH…$A[®P·¦e8²Ÿîoh:zVA.Ÿ$ž%þù3X­QŠŠd’ð–€Õ~ql-!W.°Ô Nj:Ó@:”Ç+¶·€…‚8xð`æM£k–D"Ù£6¢ICö¿NÛµkW†À®ßå6ôÖ6l˜Ç;ì$`!zØ®° ³X¾s$bÚB0Ç‘yà°X¬v•›Û•`¢8œhŒÀH'Æ‘•>u2æ[*]Ý®"ë6 OÔðÝ*çAïdÄ#Æ5~#`áBŒtþ ˜$>‰•¢ßq±É:³¸vƵZþÊï%ÿ} š\H%pYkãB8QWW÷é§ŸþgüXɺ•èUµ•Ê9Ip×}ô¤`ÚLV¤í Í'‰NÀ X …bþüùóçÏñÅ;ø­‘€MŠ£¯]&“¡ÒNSõÙ{Å`»| daœŒá­r`1!8œÈÿÊ¿û¡\Š é· íøÂšKëèUSËÈÈÈù%J¥Åf%#– ¾­*/†€UXXh»ˆ¡(õ'KÑꃹľä°E‘öŽoƒ„œ 2J‰,ûºþLìU»ã†7jl'>|øøñãÇ?eÊ”ŽyG±XÜ·¯ýÁ¯k–D"Ù«±ûO dz~YYYéBûƒ\­ är9Êõó. `NÊåò—_~™·k,èl ƒñw¬NÜLGâ³V'‘Ø-OÇh“rÈ• ]¿M ±çšo™Ðe@1˜ÃoìÀÂ0Q«Õ{ö쀅¢8Ží‚‰"ˆ…%uû4Ƴ¡lìmâ'_<³¸éºÝyì§Â…J¥ÒP]õe×p¶í(0QÔ=WÚñS‘ìEp¹¼£ÑŠÂÀ°Š‹‹W¯^½zõê•+W6׿¯=0™LHÓ&–û¬Úß~BcÁ¤;ßyïýÖV>bBE£—®¨{yYTöÅ7«õõæÚÚZ½^_[[K——H$Í5e /2YçÞPš_ã7aªSëõúëׯ€îïm¦ g™[ˆç:Þ r‹.¢êõƒ^סê5I%h’ë¤NÜoqûí·geeeeeu¤ Ì4F¹v`‰ÅâÓ:ÖªŠI}zN™2…YŽ­ººúT^³‚;íÀ6lX;Ù+ÆŒÃ,xŸ––öòË/ÓÕÄÛ…Áø;Ì'Èm#A°šs€ù|¨™ }ZÀJå±ÇIìùƒ‚ÉÓÚo÷0˜€Áo,\Ëßñn>óæÍ› ‡  ·ËÙQ‰Ç´&`¤â‹V8í~°œgäs½)îúØ‹ï)²[ >ªª?¯7;´­å ŒÆƒ‚À…nbM&“ÓÛNyéEEE&“ý±•Cis¦ËEwƒFc9¼M n¿{øðám¿ß~衇H‹¾V£(ª´´´Eû°Ùl¹\~¨Þx×ÕÚ"£Ý'Õÿò)]ÖŸÅÅÅhNAAe0¨?}Ï™P~•Íø@gúH}ýÞl«íËцÈ9ývîþøÌ º/`I$Ç´ö,Â.%;vì@¿j¸|ùr/.Òи ž fh·üA`³ÙÌö£iii|>åÊ•è,91m$˜ã0¬`¢àXM‰‰‰ùWc?·ìk³6yZÀz.B„nÅÏêMaCG´ï.ú ø`ĸÆ/¬ŠŠ ‡ÏßÇ»ùÌëÖ­€I^Ø~ uëS9è1óAPÈ^ â†ò?×jkÌÍþlŽê-_V×CI‚˰2„œº ° ªªªéí”—ÎÌ—r<5u`=ܯ'Ûh{ö¥âò¹½Ù. ý0JKK›Vpw í(9¥3M»ª(7Ùs ë–<Ó ì×4ùùùõë¿¶Ü´y©LœÐÚµýAºªW[r[dèС#GŽLOOŸ4iRff&=óÓO?mUÀ)„L[ Ó*|VÀê\¢bbö3LX†ƒÍfZ,–‡dt~No>% mç½Ã`¿9Ó8(VeeeÌz˜ â›o¾€x.k”ˆƒÊÿX§C 88™Ñü_ët21VÂ,äðB D…Ñ\e¶¾W¡®2[ <<œîCg‡ 82 öÐSt¬æÊ-:°Ú XJbÉu=õœw÷)`iµZ‡™Na6¡ËÑš^-S/ï"¥'¹¬}ÝÃèæ˜põ<ª’UGÁGUõ ä —„ÎîžJE@ΜCíù“ä 9ál²Úl…68°|㙓`±%öÌìŽ}è0îCÄ—_~éÎ’ôt^oRZ¬t’ ŒEN‘ò™–0ïX4Çv]MˆÄü±T›ìàÁƒsâãã{ì±v}S,`a0mdÔœÆQðÁf³ÍfÛI X4111ÿæ]CO€ vKž¶54/**JJJBKZ 惢/ªêå)Ý:rW1ÿÅoX.ƒåw0ïŽÚ‚ÕjýùçŸ`¶\H4¨W×…Ò‹ŒWÍ XÀ×5Úû®Õ¦^¬Z=mîðJˈ‚껯*Ž7dl9u.0³¾a‹,wâ¸|ùr‚ ‚¸÷Þ{Ý|ߢ¢"ædee¥áð>ío?R¸t`Q:­U¥´T”©ùÞ~Ë-–ˆGz¹ŸS–;)„ˆjují2k ÇÉ…þ²r•Òb3g'-V¯@Ò=åLCk`œ˜‡vÆ“ã½ã±-˜N@ããZSëÂí„gA¤¿g ûO‰_××*è±ú“¥c²w¢—øã'|t޼Ím·Ý¶jÕªU«V1‹pu¾p$bÚN0Ç1`XÁD I=¥“H$!!!»?ˆÎcLLÌ>Õ+1]]½rUcó‚1‹¸k4Õo”NªÈL­70æ—uhuÞˆ1„·oz=°šæ[½V¦>ÇPZ™IÖ;X¯ÐÀ’%Kø|>óU©Tº[mom3¡Ákæñ9¾sÛîØ±ãå—_>÷ËF4 XàYÑ÷üa¥¥µÆqX)ûw€öçï4ë¾ ­3S§·yO}š´´´yóæÍ›7¯ýJÔ»À߉bh‚9ŽSÄ=˜ƒè(‹Ðw*¸CgÇ1&&¦ÚlÝÇèE¨Ý´ Åè¾ÅÞi¯ºU©7RT{|ô#ðÁˆqßXUÛ±€åwôë×Ï+ÛÙ´iÜ/H~¼dxd¿§_b6›s!`¡º€eeeF£ãÔÅJ°;~“yìÀ°XEEE3gÎd~QîÄ177—ܼyÕ;wEQ%%%Ì9de¹áX6Xkk4«?ýPu½¿€¡¡¡v™£¦JûË÷N7È¿õ¶ß´µ ­ª  Y] XO>ùdjj*š3fŒ¢æß¨S[íêÀ‘zã†ZÝV¥~ÒÕÚ¯Š+ >>~îܹ›âp8ûö_ø-b.—  qáíVá­ãÑ3Ö®]ûÁ²e²r{ÐstXÀj5žý=-ëvK`¯Ë§ÏP.{¹p]ÿ!<Ü©=éÜ#ã-‚9ŽãÀ æ z°|*°sãH'çVÝŽß(öĉE-_¾œ¾¢®ÿa5û´Ý„~H–””ÔÞý|0b\ã7–XÀ N¬Vë–-[ä,ò¹{ùvÑŒG¢ãâ @Oáp*e X·Ür =¸víZÓí;Õ#Ø]ãmk É&Õ•¦¤@¡V^^Þ¯¿þz×]w¡ªO-RSSÃün?Þâ*ÕÕÕ´­ÙŽÆUÀЬCÁº9Q6RÄe:°FܸLô›2QÔùÁ£·ßíæÞº7?Ž:×Õ²e2ÙöíÛe2ðùü?ÿü333óªÑòpqí³7•÷×>Á‹þ *åÿJUÿ-Q^ÒØ.wf̘á4gª„/B­ Å$1LÄ•JE1Ì2þBUUU*Ÿ-eÙ$9…ÅZd0c«c5j”Hdûÿü´JSj²ÿ›Žì³-SUc¥î/®Õ,| H?¶T`0˜ö&`X˜Öâ›VçB'»5Çæ”§4j}ÖŸôÅð7¾ýö[Ó…3ª—¢U.œ¿ ®¾ÿþû²ÏŒß,L'ó÷ßOŸ>}„ |ðA‹ ŸÞ“õ»~g²\Æj¨v$ g<“&Ù²ÃÃÂF[bbb ”šššššJwg€ââbz ‹ÓÓÓ“’’d2™s=‚ÍaÇÚ< Àå½YC‡mêÞ žþyf»ÏÊÊʼ¼<øûï¿'Nœˆ Q¹&77—)©¸“Eˆò»wï. I€{ÅŽOqE$ñ~Œ$4$„–9b8¬ÌZûŸqƒ+Ü©2L*RhîzXÞœ––ÆœC„Cž¦¤¤¤lÚ´‰Íf‡‡‡‹D¢¿þúëöÛo?¦5mªÓ¬7ýrèhVVVÓUœnJ"•îa˜ÒG‹x`±Xêëë=ùˆÁ´?°¤R[/,`ùÙÙÙNç?~|Ë–-»wïv¸“¯©©)**:yò$³ä!±ê£á"n£úµøÉHy8L:uÀ€“&MjÚ²*:::''çÒ¥K—.] µ'P[€´´´ÜÜÜÂÂB…BÑ4u‹†™Exîï¹¹¹nª9~ÄÏ?ÿüÉ'Ÿ0sui=>tèÐäÉ“¡ù8";‰Æ°âââ"##G‰¹±(Ä ÷G2͹x†v`-Œ±d2Vl\äî“[$snÔ]Ô›Û©ƒH$ÊÉÉyÿý÷ÑzXXÇs½Œ7nåÊ•´ºcÇŽ­[·&$$ÄÄÄðù|‰DâP*«9K*•2{3Û\Zž•Áj1ŽíJeee_¾]®: `y„ÇAœ2e  úôò†Ò°XÑ]^«Òý£6@DDDÛöÓ{$b¼E0Ç1`ºs=ãî»ï¦;`L›6­³÷ÅNçÆ=×ܦ´gﻘcK,¿^¬Þñ;zéÿÊT•ì–¯$ƒ |0b\ãgVß¾}éîBèw âS Vwûú÷œÝÞÙvŠÔVãuz¨½ÇôV¥ÞBᣃi5~ö¨¤W¯^b±X£ÑhµZ¥RÙTŒÀøUUUô@§ÓUVVFEE€J¥2lå~hK÷Ç&sq=ÇBÁõ‹‡?2›K[ûvR©” ¦R掀Ŋ· XÝüßuøðá &@TTTyyù'Ÿ|’M¬è"Ê¿7”Â"ÖÔh›V¯©©iQh@š› ÅÅÅ͹Šh˜ÖÈz… Èf´¾a²VëO)™Ñ’Äee4 ^œ;‘¡p‰Ÿ|Xì7®Ð“]»veö£l'æÌ™c0Nž<é•­1X.¾(ú¥ýã M´-âm®Ó{æÀêD*++ÃÙ¤¼¡ŒÖJÝ4Yâ±€Õ±|õÕWôUD?$ôŸŒ `a0˜ ãúôéC÷2ºÑu@ÃÌq®ŒE IbŒÈ~»¹NXöÅ`ZŸ9°Œ²‹± Ë¿8{ö¬ÓùÈŒ,Bd¿ÚÑcµÖ÷š³¡VyÛTÔ+`±XŒ{¬d4Næú½€…£ŠŠŠÊÊÊýû÷ïÆHéÜ=à­hÉÿEŠ›ê@ …¢¹8ÒhµZº_!ÇëÓÇæœ:tèÐùó狊ŠL&“ëý‰‹‹ë[~ ÍßR§§ò 6Ö:ïÈîÑS0ys Ö gÁ‚o¼ñ†W6Åt`µ(``Ôq§ë {&`¹Žc»RYYÉ´_ÍVìÀò¯=BV>$`aVЉG"Æ‹sÆÌA $:=޽{÷¦ÇkÕe„íj‡G÷…òõëÑÐ~ qÝ.èÍàçGM;ÑéAÄø8~ `¡Û3‡3pà@,`ù)ñññNç·(`]¼xQ“õ—ùªÍbc¢àµzڠ늕[¬¨‚g3ý†²H‹  Ξ=[TTô\„èy£Ö #Dß҆°ýEÔÔÔ4G´= C1zë­·úö훜œ|þüy§k•””ЃxÏ”{ÍߢÔ@AAÁÚÝz…Îa­kF‹tùW@’Ì-´Sw§xë½ZåÀ:¥3›œqñ\–œEz–Bè:ŽíJee%³VÁXÀò¯Q"‘ЦE•JE›.±€Õ‘t⑈ñ"ÁÇ€q`s‰N#°Î_¸°IkïŒ4'LxÛŒ&k3ÇÒ,`5¥Óƒˆñq:AÀº~ýú½÷Þ+•J¥Ré½÷Þ˼—v ª ݯ_?@€,?Åi¾§ÙlV4Ô[†€…î Àh4*¾úMnSêYÑ]èúJ^Ùw, IV|"šJà²IÀê^Yò|¤“RÍ$¼ße‘l©*555®óv‘€ÞTß¡ËT9`µZoÞ¼ A„9 mOêL…3\¹rÅDQ‹ËT¦¤“29ìÓo/Rè"mÿEE¶ôÒŽ°¼E÷îÝQÚ£CAw&IIIl6ÛHQô#;šŽg¬NÌ¿®ªªêÁµßääÌ€‹…{€W‚Èb±è/ßjµÒEîÐó,`u¸B`Ìq V01èô8Ú¬óç¿+S ‡Ž]9,N½­’¬ÚJ‹²i4~}Ô´DŒÓÑ–F£;vlzzzqqqqqqzzú¸qã蜣æ ëLrîKMFƒR,`555V«ýé„SÖ—så"=¦¾ª©OJJ‚6à‰€À޵? ˆãŽ€up×?„óÑ) #eaèÕ^|ö¶¤°Û† ¥'‘>Õ(paaaMŸŸ0ÅJDyy9ZnÉúÍßCÙÊ æjÏQ/Äœ-SGκ^«´X9rîÜ98zÔæÛêß¿¿ë=ôAÄbqJJŠL&ãr¹.X\.—6µÒ1,¶ßqwH!,0˜;°:ô—Hk¸ƒqº-/_;°0¯Ð«W/ú©ä¥K—Êu†*CÓe6×év²õXÇÓZ:ZÀZ³fͰaÃ^yå™L&“É^yå•!C†¬]»ÖÅ*'€-Ýä÷¶ª•XÀ $˜ùƒÐŒëépïV.êÍm°Y¾y·2Öž¡™À!')muÙ[°œ¦"œ XHMmºtÎ6—ÅýúR‡%e2= ÄR 0yòäþýû×××;vŒ~)33Óõú&—.]R(ƒ!##ÃÅb Y„öRbý°R X8…°“q(ƒ…ʺcƒi‘€q`a0^A"‘ÐOpé'ôj+`À ýüðQƒÁ´žŽ°þøã‡~˜9çá‡Þ¶m[sËSFãÂ+9@ð5*ÕÒ—±€å§dgg7Ùœ€…Œ<éÎ-b.Z`eu=tŽ€ÕÅ.`uåN ¬i"û‰SüÈ|nÆ0VTLêöýü1Ñü´«¢Ø$ÔÔÔ8#‚™BØÔå4…°°°ØÌçYÐLÞ°Q²¤îKÊårÛ~2ÒͬVë¶mÛèÔ§¸¸8L!tZÀ:£o$`y–Bè:ŽíJ}eyÇvê1±ËC¼D©ÔÖ£¦¦fæÌ™?ÿü3=‰¬ DŒ æ8L ¬`b á qDY„p¸Þø O¶Nc©¾ýÞ×–eOœ>©HqÉ`F—ÄXÀjŠ/ãËtô™æüùó9>iii.\hny‚ËM›÷,\BOêþú­·ØæÂÀ–1räH4Þ±c‡R©T«Õ\.—¹ SÀ/á¥òØ“¥öv³—Ò\m´YÀò,…ÐÁuÐo,¥R‰<; \Ö0‘-€àž™ô˜àñC?ZS5y˜¥¢ Xó3¢WÊÔ …‚Ǧ0S…Baxx83Ô©ëú¹³oGKÆKx‰»½K0eZÓô¥.]ºÐ‡zIëׯ§#FŒp±o-`åÌz ø@@$›$kªZZÏ ®ãØ®*JQƒKCD´‰ª,`y„·‚ˆþ·lÙòÓO?Ñãøøø´´4¯lã‚N<1^$˜ã0V01ð…8öîÝ{çÎô˜8Ò=M2P’øú2¡D¢ÑRgt&`<ÓÅVS|!ˆ_¦£XµµµÈFAæô¶!^ð"sRþÓÚ^|6üûï¿o¾ù&S£={ö,ÓŒÀ|‰9V*•Ìöœx ¼…}ûöM:uæÌ™óçÏÿ矀\U«É¿1×ò¿‰ }%J=ÏÎÎv0a¡#¹Vžísĉ\FB×þ¸ÉM,”Bè vdeeуÌÌLÿŠEk·‘‘1~üø{¦ÿGÕ½®¨ð¯O!WÚ•ÊðÁÃÇŒ QÒ_>E mA(Òc¤ßqÇgÏž---õ£O·€·€·Ð)[ Iõ!¡oÅýñSà-à-xq }úô‘‘‘K–,9}ú40,ÏèY2‹ÅòÍO·€·àæÞ|óMÂÐnTCs„ŽËåÖ××3[È™L&±Xl08)q‡ ¢lp¥µÝ]_6˜o/Rð$R¿Nãò._¾üûï¿@Ïž=ïºë®ŽyÓ²²2d¥‰ŠŠª¨°Ý~ß!å+q9‚É÷(·oâB£_¦²[J￲)ŠâñxJ¥’Çã9n×m C¯^½®^½JOFwzZëj+Fö¢ÇZ+u„¹pú2;wîœ}úœ>}zâD{}è3gÎ0kÝ5‡`ò4ã‘ýÚ­6‰úQ¹p§ÊPQQÑ­[·öØÏýû÷߸qC(2¤k×®íñ¾ÊÅcvýk'P>³Cáv¸MÂ{ŠÑjAœ‹ëq ïTÙºúâ!z¦WÚÌMŸ>}äÈ‘ÙÙÙnÀ¢au‰3\¤Ç’zµë…}$`M€êz|\k¼£o¿¦ ¦Ü«Yû9=%â-ÔÀbqº¤º˜$F‹¹#DÜUEêÏÞ#ÄRKùMí/ëÁja®+ûü{þȱÌ9HóbVg9rdIIIII ÓÅ:fÌ¿®¾Ñ*Ø=íîôd0{°…Ϊ/pôÈ‘^<»dÌîÑ Þxãø <¼D‡ëéûï¿ß+›Å¸®ôyIÒö(ʯÏÂAÄ€Áâ(‘HâââPa_,`µ_"Æ—éhÖÔ©SQ• šõë×ßyçî¬+}ù]v¼M®"Vt‘V_óúÒ¼ýöÛ³fͺ÷Þ{Û °›ŠJmÄEv§Ã{±X%nº˜¢Þ©¬7,ø¿w+4_×hQ*ÙðáÃÛ¾{A|üñÇ$I¶JÀb3ê¸GZÍ®ó^}$`¥ÖØÛ \t(¨OÃîÑ““jÓJØŒ#&ÐHÀ¢XwÞyç†çþ››ÞmM\è£rá«N³f¥ú“¥ÚŸ¾uP¯Ž|õ T0¦ŽüðÃïØ±ãèÑ£Ì\&Lp±c'9…hˆW ÖZWe}Š6¬—²lQ#ÄRVL,H$’6vfÀ´f_ ‚ xàNÜ ãw† ƒñ"Ì2X‘‘‘hŒ, ¦ít´€õøã>|ø½÷Þ«­­­­­}÷Ýw=:wî\wÖ%„¢w?ƒ†ç<ñ\ç—o.©×뫪ªÚ"Êœ9s†¶/€éÀòn’ê믿n2™œ¾ä—{Bø©<Û#; _V××Z©Ÿku# j¶€ iR˜W,Ø:VãF„~Z‚þþ¥,"¬ô:š¹äÏ]Í-ÏŸrß)å¡¶)NqH!Œ9ðÏØ¬-]³9nV’U`0—š,YINü_L‹éÀ¢ …¨˜0}›Ã¦tçNu⾸Ùl.ÚcïÛÀIéíYâã&LkôèÑm.0 Æ5èܯXŒafaã]:ZÀ’H${÷î=qâDBBBBBBNNΞ={D"'écNá"š5MFÞc))vXfݺu 22rÆŒžídii)ºËd2¹&œR]]ýÊ+¯<üðÃÓ§Owп¶nݺ}ûvæÔÚ€)`‰HbQ¤Ý~µY©{·B“v©òùRU©ÉÏ,Ž“˜˜ÈÔ,ÚÈ{ï½×ª­5nDHú©€EÛî† ¹DƒŠÝ£+6¾¹å“îB*C†sãdNsKFúÅápBBB´¿~¯þô]h^%¸Ü†Ž}¥&#¿ZÖ»Ëi&orr2=ˆ‹‹ ¶»nNÆî¦: IDATj_4®?ÛÚÕ™­F:Œ}ûöuÑÛÕL:ã1Þ "SÀZ°`W¶‰q“N91^'È㬠bÀà#qd:°˜–X,vèÎæ×GM;á#AÄø,-`@bbâÖ­[U*•J¥Úºu«C™ç‘<½¨^`¼H‹E±à!ÝßÛ˜7ɨ«]^^³…™û ûœ;wnÓ¦MkÖ¬ñÓ–s®A)„à‘TwêÔ©÷Þ{ï‡~زeËÁƒsrrÖ®]ûõ×_oÛ¶­¤¤µµÚ¶m Tp²¸p°ÐVç¹QŽíÛHQUÖ€¥!˜áááA0Ï^)€…èÚµëo¼áþòáÀ¢ƒž)²' ò†r±<«KWnÚ zL¨ÿØÜÜ’(P.—›òŽ+—¾ŒL ëºJUĬùâ9O‰ç-”}ömäžS»ëm6½=z4Ý`DD7u`CÀ ªüA6£Ž»ñâYK:ÉŸþÙ“o>ÏI .ÍÑëx+ˆ‰‰‰ àñx]ºt¹û²MŒ›tÊ‘ˆñ:AÇÀp`y‰#r`‰Åb¡Pˆæ“$)7*œ‚¬¦øH1>‹ÿi¾à∠»§'ÍEu/ΓQpÇè9HÀR*•W®\IIIií[0¬œœœûî»^zé¥>ø ­{ïc TVV¦¦¦ºX¸)EEEhüÍ7ßh4š-[¶]Y÷îÝEEEuuu<òHMMM¿~ý(ƒA³ê“'Î|"Q¾¢JSo¥³›ïVÕhKLê"ÑúÅèÑ£I’ŒŠŠŠ>}ºG´Y˜êX‹°ºØmJñœÀ°¸CF¸^…?éNãi›ñªË•óÍ-†|‹qáauKžù˜à ^Ô¿”UÀ«wÌÐp¹Ý»w§_Bº°Óã´EÖŠ+žþùºººøøfd ‡QÇò[-¯÷ëçÄòÖÞ\½zõžý¤ÃNÆV›ðV ——g6› …›]Y1Þ¢SŽDŒ× ò8†+ȃ0øH ••Åãñ˜g©Tʼÿò룦ð‘ b|ÿ°À4jBÞ› ì×ÙªßâžHJC€!`@NNN,ÄéÓ§=ÚYŸÆAÀjíêLkóæÍÈsõêU°Z­_}õUVV–R©¼téR¯èÈšG§™¯^a‹#=¨K?½è¸´~±lÙ²ÖîX;ÁêjWIºrX'ZŸté ¨T*‹ì…Œ0$‹;h˜ëUø·Ý¡üà ‚¢@|³ØRQÆŠŠiºíÀêÍgÊ®·”Ô4lŸ”}´ºxñëEPPPðÌ3Ïìß¿?11Ñh4^¼x‚èÛ·oÓ º®r¹\.—·ø‘N¯~ X@«ü¦U¥¤ÿ}™²›%É<û…³Œ¦Óa³ÙÌB³ ã&Ñ…ƒñ"<oüøñN_’J¥7oÞD“XÀÂ`ZK'¤¶è˜˜ÿ–(·)õV°e[ÕêOߣÇL+7·Õ¥a ËéL‡™Bè€UXXˆÆõõõè+â“¶¸|üñǧOŸ–±È‚¿¶Õ>7×|õJs›:;êvÕžÊápX,3ƒÌ ¥!„ØV|Q@ú²›®—÷A(ŠR«ÕÃDtäszönQø`EÆ”†4hIeø÷§‹ÕÔÔŒ—ðþì&O2ëÑLÑÌ9¼ÑÌtáÂ…ëׯ7®¤¤äâÅ‹F£›>¡7XÁ !–òLée:ãÉ]C”Ýä5”~ Ã#ÉPYçîƒÁ`ÚN`8°0˜ŽÁ¡Ž;6>c0­Å?¬èèkFË“%ÊuFû™R»yƒµªZ/`•——3'Fã¥K—œ.ÆÜr`Àt`yP‹éÀ¢‘²ˆ5q¡§R"ÞŠ–t㲬Vk,‡µ·{ØÐõ+'9Ý) ‘}´F“–Áœ¿fÍ_°€Í0aYnÞèÄ=ñ ­Vk6›G4ÊéΊÉözÛú½;]†}ìÀº¸P$_;©‡ä¹W@&³ItÎ`QQѸqãþþÛ¶þýû;Ý úH¥R§ WS!³ûeLgN¶jÝììloïN Æðz{UNvr«½±:>ˆ¯ƒƒy£V1`ðý82›Sö>7Å÷ƒˆé\üRÀBÝ>*Q°’ls­ÝŽ­ÐXÀ:yòd‹uÜ—,Yb6›Ñdaa¡Édrºdà™°Ú˜BÈt`…²È™2AVrØ)OÊ"ìþF´d}|h»ÑÏ,»Þx¸Þ¬Øxáf…oÞÍ¿í‡Çr¹ü±Ç›;wn«?R;ìãNT–uâžxí¹Ë`¤ßr3†»³¢püd46ž8DiT PU¿=Û9ŒÎ*üÛî[·™àñ€éÀ¢ùùù/¿ü2=0`€Ó7MIIYÕ€;;lh⺡±±•ÖÈ‘n —^¤´´4…käÀÁùƒm¦ãƒˆñ:8ˆAÇ10¬ bÀàûqt¸å‰í¬=ñY|?ˆ˜ÎÅ/,‘HD«×*Žh¨Ýº?·ÆZFe"µZ]PPàzkظq#štÑø ðÊ`µEÀª©©¡»œr â©pÑñ”ð]¤qû * 0?LØ‹ßèj¦’Í{ü†òÿÙ»ïÀ¨ª´ àçNOLB„Dz 6a-XÖ®…¥ì·®k]ûÚ@°¬ØvWÁµíŠ®ÝUT$ J'$Ô é¤·és¿?îäÌe’ “ÉdææÍóûëÜ;7wN|&Ѽ¾çÜë‹ê®nÑ'­ÿÅø—g¥’×ÿŽv¢¢¢˜Â¨Ó<XºÚê0Î$0•0ÜÐVÀݘ‰>¿ÂmøÅ³XÝu^Ñn·üð×ͯ¿a5»/TÆ¿ž# a¯îÀêã!’¡üå,APÀjOù!BxõÖß«¬¬ì+‡ç»ˆøþ«„Ów\ò]—áÏ1]¶l™´[_BíuñÁƒ;Û«7ò*`‚pî¹çúùå…G>ž%k¼ªsºž¯j¾ºŽý+eÈ#ICuΣcJ“¾Zݲ ¸Þâ:­3ÎkƒöÞRÀÒÈ:°ìWú–——wñÅß}÷Ýò&¸hll)/`÷ÿk“'Nù¶ÉêùÚ÷Öˆv»h1×ݽÐUïY·ûTesÿÌ,¯¯MHHð:3þ|i0zôh^Ì‚.IMMÝÜâI¤ýºNÒÓÓÏ|QPYæëø#“UƸO€žÐ‡A‡ièã9ÒèÀêã!’¡üåò$$$ †0NF™”"„Wo-`ñ¬{î¹ç·o½_aw·†¨lÖ% ‘ò+}w`ñÖ>üðCÆØÉ“'G4W óG¬?­f³Ùθ£V/"íçíå矮©©ñçËõ?o–÷ò|Ò`™v¤æùS-—ßöÇ;v|µ97áå·úo;RuïãË*›«Þ[éó¤Ä«ŸV±,yV¢è`.§‹}¨©©EqÕªU'NܳgOfwfä;¸éBÖ˜1c^­nᇱ'Õþöšº;8NxöòñTËWÖÊUí{¬þüç?2„u¾ƒ;œQrrò†YÖö-bk‹ëåBÿTÇèGùXוÊ)tæ$!ÒÐÇs¤±V‘ åç(ÿ“íWR~ˆ^½¾€UQQaÅ¿Õxþl»5>2Z%ðò¶Ÿ,ÆØSO=ÕúéûÏUl8+áoŒ5•ü88aaB$“í&¾ÿþà~#aäÕ%q:ëׯïðú’’’;î¸cîܹW]u•íðY…žÁvFšn/i¶ãáÑH&Lè¸D2|øpùaTT”¼ §ýŠ3…"£T&wuF+Ö²Rß×w†W óó󝹿šàLζòÒþmí zƒvèÿ¿vìØ±;Zí¹-6ÏÝvÿbÝú?\[g^YÕÜ¿ÿöU™™™^' ðè£2l€Õ Z­¶!&î˜Í]Em6yJ“RSÁǺ±“Â8"X¡!/`aw€ôú–äM4ïñ‰Q — #GŽ”ý\BÈ3?\ÿ—{“Ùi½BK“¢jÕ\ptH²€5{ölQŸzê)é𫯾êðú¼¼¼—_~yݺuG¿þ²rÞ¯UmK5ÚmÙž?G½¢INN....,,œ7ožüüùçŸ/?T©Tò5›ŠíÀbŒ©û{þeSSà"my›[yyywçä7C±gŸoíðQL£õq±—!C†DEEý¾¤WLäl IV4±NþoRDDDjj*?Ôëõ&“iÞ¼yÆ C«;RRRäë:»´Š0Ä[›ùX;,"ht`„:°º©·°~ûÛßnß¾ý‰'ž˜2eÊ3Ï<óÐOþ«ÎÌ_1jÔ(iìgV–Nýú@£ÐnEX¤JXÑ?vÖ¬YÒa~~~о‡pã,©[mΜ9Òá×_-m楲²’1¦Ø iFÕóO;ê†[£Îö´Sy°cÌÊÊ’ÿ¾ÎÈÈh¿¦L¾&\ѬTO«áÈ¡Àn"/`™Í溺:Qt…硜ÚìÑ]úZµZ=jÔ¨:›w¢®ÒkM¨J•wÉ5-.‘uþ/ã¬,ÏÆXÉÉÉ‚ ¨Õê'Ÿ|2;;»KÓ¹ÔÔTy˶Õß}Üsss{fF³•žLiû· ×kG j!zB¤¡çH£«‡H†òsD댔"„Wo-` ‚0qâÄGydÛ¶m÷ÝwßÔ©S?¨7óMÂ'Fj§ p·{øYÀúcb”Qíþ§áÙæéL¹0Zw‰Åýì“999=9/oÕ›6ð±6{¬ Ó…òÝ© qˆÐ" }]Õü 1Ú‰SùãÚÕÓc Œ±ÂÂB³ÙÜþ>½‘W– sçΕÎ|ðÁí¯¯¨¨˜¥ûsR?óE‹ãì—ßd*5/`©Tª¤¤¤ßÎâc¾$S®×°Rúó±£¼ÄÇ•>„«€•ÒäiõÒŽÕÕ/_¾|ù¬Y³ÒÒÒš\âökÅèI1·ÿ9æî‡#¯šÇkÁþ°Ú·éA`RSSí"ÛÙêy:ªmç¶0Χ3–ÜïøX‡õƒ„¨Tî¿&zu@hÈÿÞA@ˆ°T*Õ”)SÞ¯÷”–L[¿ËˆÐ3Æ-Kg_(ýÕ}N¤ÎÔÖ~Uët½^Ó20=Ýôä B´»F.Úíï 4Þ›år:<؃ßIy°c×_½4X÷ÑGMï®v–»KN§“1¦:qôÍô8]ÛVÜuN׿‘S¤ö™¬¬¬É“'Ïœ9óÊ+¯ìì?_ä¬;°äÿGB±›¸³Ó— §*¸ƒÅbinn–Ÿ MËU]kw/7si´š¬!]½ƒ´;/E;æÙQ ¬°þInk•í¬¿£ƒöÉðr–—¶È X¦ú¸zX¡,€n"RÀbŒM:u]ƒõ¤Ýó@®ÒÜ]<íãnµZ¥F˜Kc üäúF«CdT÷Ô ¬­^£ؽIÑ`,س§¿òZBÈ›>}zjjj¢FõJ„µyå#U³§ÔݳÈvpÿ}÷Ýç¬([tlOŒªíAr‚`^t×ßÞ{_:JKKûù矿ýöÛ?þ¸³·ËËË«®®.,,ܽ{·¼–Áñ:šF£‘oè®4ò%„††@ö®òj¿bŒ•••ukNþ±xi8ˆ©ù?¥¹¹¹¼YXXÈÏ—”¸›Ñ:û—1 X=AZŒ¹­Eֵï¬Pî/мæeÁéþÍ|J¡Ï¹ doM6‰ !ÒÐÇsÄX ÊÏ{`‘òC„ð"UÀ²‹â_«Zø™KõlNÍ:YEX]]]ZZ*Š¢F`—š"ùùÿ5ZcÒš8ÃÌKcnû¯a1Æ®02>XÝsßE(µïÀbå%«& _Ÿ•0!BËcN‡å›/+o˜õáÛ57_ar9ø×ÆÞóÈ„{”7ÁžQNNNBBBVVÖØ±c;¼€ßÍd2 ²æJ#/`E·6û¸²3í X¡éÀ’°Ä³†v“œœœöX¢(?îÞz©K{`A7Iÿ$w›íö¶gi±³âÌõÐí/ય3ú?ÌMÆTø_ôÁM"@ˆ4ôñit`õñÉP~Žz½¾²²²°°°°°0...ÜÓQ"å‡áE§€5eÊ•Jõ‹1Q•9X:£fâ‰Q¬£–Ëåš5kÖc7ÄEôÜ[ 7:ÅÍ-6Æ/²DÿþÞø×ÖªúyöuÊ*9æ8à³çÅ«€å¬,¯¾ñ²éÇóS´§}*4ûmF­³Ì³Ù“úº[¢ÜôùÈ XA¿y©ŶÿÇhpÚÅæ¦®ÞA ,Íð.o€ÅµïÀ:räHuu5c,>>^¾£¿\JJJdd$üî '=ÍÓ*Š{­žçB†k¬­[·ÆÇÇgddðGš2Ƭ›¾mîŽE6gé°®=ûŽF@È$%%eeeu¸ΈN+..nĈ«ßøgìîã'¯6FdèÔí—Ö××ïÞ½ûÖ[oT ÷&yV«­k´ØD166vøðáü¤~ÚýÞûŸ-ÉÝ3"0ּ楞üVBD¾„P´Ùêî^èªéx­¥Ü›m‰-ï‰ùô–g|"?â;…ù°øÿx Qkÿ^>Ž3!àû´ïÀâ½¾çž{ngÝs‚ Ì™3gâĉ3gÎ ¼‹°¶nÝ* Î=÷\_ûÑGmß¾ýÛo¿ÍÎÎìÝÁ‹ gŸ}6cl—ìA„Ö¼]ß|óMû‹å¿ Ïøó€'NH^¢-fë–ø_7Z”ÿÓÝ‹ôDˆb‘†>žcJJJVVÖèÑ£Fc¸ç¸>"È‘„¾‘*`sÎ9Œ1¦RE/¹‹Ÿüuœ¡A¶üM"-wÒ lA¼g÷«5µ­vclÊ”)íoÞÿ×óYÛ6r:Z?}?¸“÷Íjµîܹ³  àäÉ“Áº'/`ʼnÎÖµoòó[ª1‡N=ZÞxÓ‡_ÜT\÷juË«Õ-ëãR}¼î‰Š¦„@û¾ ×t`1fHÄÇŽò.$rýõ×ÇÇÇß}÷ÝÒá¨Qîu|!ØÄÝžïi¿:`sé"£»OqqqBB‚Ô;ÖÜÜ\YYÉNïÀêöL¡k¤Ö³§€5Ò ùö«¯¼.«¯¯á…øáPTä.ë[­Vé׋uË÷¢ÅÝ vÒîÜoq$$$ý}û¬žB !Ò€ @ˆ4 G"øFª€ÅEÌ™«Né/#UBÆïçJ sb |¿'‡V÷jµ{ø X‘‘kížµý–¯> ú´}زeËĉ³³³'Mš¬{ò%„¦ _ò?2ÕÉ©«û ªsº÷Óù¡Ù¶¬²yYeó}‡J¶µÚX7v/âÅšÎÌ›7oóæÍß~ûíÃ?Ø[„Œn@·ž8îÿòIfffTTc¬¥¥…ÇÑCl²ÖAWà?øRŽ| àÑ£G«ªª>ÌÓëõAü|‚Ÿ†Ê«t¸ÊÚžÁª„cßz°JJJ^{íµæf÷cÎøóùÇ[úkù~=?óU£•õ†þÊ^¤'B„Cˆ4 G" È‘„¾Ñ,`1µ&òú[øÑ”òc®S•Œ1gUsØYÛW "ø5 “§7¶­—ë°€Å;’<Ð*º¯q—·´ô´½{ÝïUUUeµZƒrO©?3^­Ò~ý)?½èŽ¤Ì³Ú_,õ¬1Æ’““ƒòîí%&&æääÌœ9S¾™2ñò(cÌ\x«_¿~üy|=½ŠPþq=®‰ðq¥?ä¬-[¶ˆ¢È›4i’^¯ïæ¡«¤cl·ÙóœÐ”úêƒÊ/+))©««{ã7zn&Þ,Q´mÝÄÏ|ÓdeŒ¡ C´€ÅXä572­V÷sØN]7«ö÷ó«fN¨ºdróš—›JK&Ej§DêÜW ‚é–ÿ»öÚk/½ôÒë®»®³MBú ïšlüÐÂ&¬={ÜMd¢(k¹Y}}=cì7ñŒ·_%¥F\=?##ÃÇWáùqŒ1uÿ|ì¬ð^ Ú™S§Nµ´´ÈÏ$$$„¥€UÛÍ»ñVaaá| ñÔÛ°°<«ÇFh¿þúkùeÒÎk«V­r8¬¸\.ùçêêjÇÑCΪ é°UdÛ[í X(²,U|?ý%sù¡ëT¥uówÌåtV–7­Z6óó·O‰á¯j&NM›6ý?ÿùÏ—_~Éÿo/##ãó ?´|ý9EQׯ_ßÙ— /`1Æ‚² Vkk«Ýn×ìÙ.`Q·üNÐë{¨€Å·I"@ê)`©ÚþD?#¯ö+vz‹ïÔœ•å®j÷Þf—èè?0à[I9ò}Üúé§Ï>sWro¼ñÆîMqöÙgKO~”°.‰Ñoþrü2©€uâĉ>úˆõÀÏcYY™Íæ©ï×ÔÔXò´_mm±ÙE‘¡€T”~©öY‘äHB¤9€Á7²,Ƙéá§ruü¼ÞÑj0`€‹ýÁ XÜâÅ‹»yO˜Tmu‰ùã=OœgŠØpû"‹ÅÝ4Êoìܹóûï¿ú¼ê³õUU¶?ñÃMÍ6†ö+èÊ,ÆØ¡Ãž®lžx¸z瘩W\—ðæ'ús¦Ë/U꘻òónReg]£lá7_~¹nclåÊ•Á›µ7¾ƒ»$XXÓ¢t“#=mhQó~+ ÒÓÓ¥IŒ±‘#Gfeeñk¦M›–žžÞýw' 5ÚÈÇÎR¿uzý…¯R©L&SZZÚM7Ý$é¹O‘m×Ï|¼½Õ6p`àX’äääèèh~{Ýu×uóž°Õ«WïØ±cÇŽÓV¾¨9Ë]qV1v§Æ²ýžÿ“å¿7¤&¬àòúxG?ÄŸmêLH|X¨bŒñÿ÷?.˜²¦´fÙ^2çJÿïf2™âããkkk×7Z®6ºWÍŽ5üÜjgŒ­\¹ò / êôc¬¡¡á½÷Þ“Ÿùá‡æÏŸ?hРåË—|[gÁ¾œ(?ŒùÝ=òW§N*m?vìØššé¤Z­¾öÚk~Gb­[Î~Iì˜{c2GY×:°~|å…¡.›N§k~ãÑjI*<üü€¸µµ-;Z[­VkÐ7 ²íÝÉœîÏZ5Ww X<dzÎ:‹?[`Á‚Ýœ$‹þœéñ¯¾SùÇ[µvcLÅúûÿÀ»Qëø[Û56›í¡‡Ü§•••IIIÝ_¯Ö†S|\>À]G+¸ˆýRí›" È‘„Hr$!‚o}¥€uèÐ!~RÕàÝE5Ò®RýúõëÒ ‡ òóÏ?ÿOVÀº8FÿxEclýúõ»wï7n\p¦ÞfõêÕŒ±äääÊÊJÆX]]ÝÚµkµZí²eËøZ¿®ŠÞ»õSÏ׎™ õã?æãÒÒÒ§Ÿ~º¼¼<&&&999°·cŒÆ3_Ô{)i|ì,->ãõ¢(]m4ü¡_Ô࿯p2f–½:ϨŸgÔï4ÛëO'Ü©Ê7Àú¥ÕÎëN‹çÈ;°† 6uêÔnL‚LŸsÑöËæOþä-ì×ý‰Qÿk´œ°9½.>~üxP XÕÕÕ|œ¦U§ÙÛ–Z«5Çâ¥!–±_ª}B¤9€i@Ž DðøÂÔÔÔØØXÆX}}½TýaŒ555IÕ«‰%ýÑþc³û‘ðŒ±,:Sç~Öáû↓™Kìvû‹/¾({ì1µZ-‰÷F ±ÐóXÈ«|- LKK»ÿþû_|ñŧžz*à·£G;гս?K+++Õóói±Ã V'DhíwÿÖÕPœ)¶)߸ž··ÚããヲÜïŽ;îøüóÏ_zé¥^x¡ûwƒàrž°²ªY~&B%¬ìÛ¾àÝþᘩ­­åã ¢=Ý®aÙ…UÒX0â,ÆØ°aî­Þ}÷]iÀ;ºÚ~Å2dc¬Ù%nkõ<pfŒ» &=Ú/ˆŽ9"í\“˜˜¸`Á¯¨ŠŠŠÀnë¬(‹«s/ðq *ý¹Á_ùH^Ä ³øØéÇÂ;vÌŠÕëÏÔ1§>~¤þO¿ëîäN§©(åã½ÝÛK®ÿþW\qÅÿøÇÙ³gå†D «ny¦ªyÎS¬œ¥›Ÿbòº2X¬ºº:>žãùÏ|¿eÕªU|VAy/èƒè°.\( žyæ™ææfÆo\ à¯)¾ljC“•Ÿœ›â¾´Ö/ˆxSÃ!Côz½Wé÷”u•õÇo=o‘’¦2ÆöÁå1w?s÷Ã1w>5ÿ·o ´CÖÓ×ô²'{ìÚk¯}óÍ7wîÜùþûï?ðÀ---ÌÓYR$ˆîy–ÛVQìf‹XŽTñ_n555±¬pªÜ¿êã¶»ûŸÖ„”V}}½ô4ø¸¸_'ÇiÛ: ZOmWz,, ~ @ˆ4 G" È‘„¾Ñ/`iµÚGyD¿ôÒK6›w`¼„1vÜæ.6›Í‰‡óumÕk¥š-¿ *>áòF~;û¡ü³«J>ùä“;ï¼ÓóNïí·ýá(:ÆÇÇmNÆØÀ¸ô.¼×©¶¶V“žùmŒg›öql)kP XòßT—Eyvyû¬ÁÂÇz½~„ Þ_ àú,ÆØo~ó©ë¤¼¼|íÚµÝYBh2™øW­wx¶T¿:®ƒÖ¶mÛº´ìËår=ûì³ò3^S9räüùó/¼Ð½eU`Xöü}b«»—§ÒáÒËö}=tH„RÑópú¸xûöíGz.6\r…×qqqùÇ'õž¿ög©íŒ1Qäë,`9e¬cV'ëÞ#¡·ˆŠŠ2 Œ1³ÙÜÚÚººE¬i«·FŠÎ™1žfÀ¢¢"ùÇ,0¼€58.v ó´\}*+`M˜0¡«ÍàúDK«ÕÞ~ûíÒxÕªUÝYBÈdMXùɬ­‘a|„v¸A㵄pãÆkÖ¬ñÿÎo¾ùæÚµkåg¼:°$)))Ò °,뎟øx[‹-dO*¥·ž¹JçÙÓÊqâ˜+·nÚ”å).¾Ôë“ÉÄ[SÛÊÏ\­3ªOûñ °«ø87MçwÞÈ‘#¸G/GªäMX‡KJåÍP¯\uéš5k¤OÙlx7=Žïà~…Ö©bîrØ^³]jú“L›6­›ï^ðÃHB¤9€i@Ž Dð­O°cK–,‰ŠŠbŒíÙ³çƒ>N°„É XƳ‡é&L‘Æck3L©­§u`=ñÄÒÎñgÔÔÔôÈ#:tˆ×)ìù{Ž$kT¬“V`X¶žõƒ[CXÀ¢·ž¹6"†'|u`5ä~Õ¶s¶:)Åký k+`í3Ûk"¢¥3:AøUìií*^ËKý$_BxíÝÚ´iÓĉ¸G/Gªx¾¸¸¸¶¶öY+bßö×ý:++K:<~üx_ßR©]#° ZkùÉ÷ëÍòkPÀ :ü0€i@Ž D#|ë+,“É´hÑ"i|äÈiXÖüùó—.]ºtéÒùóçG\ök~>I£ú‡Q7¼UTTüõ¯õç¶+W®,//·X,|Kš†Çï›—ÿÓ{†&NÜ»•µ-óINN–ôM8¶]¿ð£ŸZíqq¡x!IMqžª¢|¥^{)'=å-}ÎEL¼.à)üå¹çUFäI“¤Â+ ÆÂè¡#¸ôR¼ê½iÓ&Qw›í%̽ŽU´ÙZÞ~mØÀÒ¿º¿ –ÔuqŒÞhw?Ý¢Å%Ê—Ä2ƦNÚÍw€¾¬¯°c=ôW·Q`¬Ù³g¯X±bÅŠ³gÏŽ¼òzy +A£ªYt­å»¯¥bSQQcì¹çž;c¥©¸¸˜×¹ cÖm›íû¤3IÕÀ-žø3s¹X÷:°ìyb‹»#¬Êá:fsÆÆÆvõ& ±öKæ[9JŠ™£ãýÎ,Ëx»ç‚úóf´¿FêÀbŒ}/zVæDén=<)ɽýv,ÑbvV–»¿\d¦!zâ$(ÿýöÝwßIƒüätþjók/<{d[IvrÁ°ÄÌw^myÕÚÁ]üS[[Û_«^žêùeòYƒ¥É%2Æf̘qÙe—Ýpà ü@úP+11ñþûïç‡&“)33³»7Õhãž~9êæßñ®²’º;n­àvQ‹‹‹cMMMO>ù¤ïÛÜÿýf³{¹Íc-ÿ|ÕëšÖßm\ñ°ô¨T*ÆXuuuW‹¶Ûøx[‹-:&FºU444„æB&*¡_…½íŸ¿Óá()îð²Ã[6Ö·=—M£ÕŸs^ûkx+¿±E7n2?ñ‘=:»k&€–óä Þ¸WêpÅ´fÖ ½©âX[¶l‘uÎQ%ºû7ù#N­Ê8y´qùƒ– ÿeŒ½úê«MMMeeeyyyõõõ~¾—¥¢ìÝô8i½³äZ÷/´7Þxã‹/¾ðÚÝ‚?Œ D#‘äHBßúP‹1v×]w¥§§GFF.]º´°°pðàÁA¸© ÄÞ÷ØWNüœùË«¾ý¯I½þúë|Ýb{xÿý÷å‡ö¼ÝÖ­?´¿²å½6þ%´ë¥r%&“©P¶GugÛ`UmÚÈǺÑã…è˜ö×ð êêêbï{Œ7vk*/Ö¸ß"€–ãØQ>>)ª„vK@/GªxÿE4bÒãÃOwv½y݇Œ±—_~ù‰'žX¹råèÑ£M&Ó’%KÎøFΊ²~þf¸Áó;pÇàQy;cL§Óá©—=?Œ D#‘äHBßúVË`0¼ÿþû‡^±bïy Aø»¡ßêÍòM¶-Ï?¡i+ØíöÛn»­³M¸9"Œ½1oGÍâëøa¾ÅQa÷|aëoÕ,¼öIî"HWWÚ÷îàãf{ÈvpgŒEmýZ\\Ü1«§¨ä준eÝç)jGïðþi¬¯¯×Ž¿‘yžo8Cå^™Pë0—k >®ô½©’?ùA2vìXÃŒ_f]&Š*µüUëO?ÈýñСC/¾ø"/©ó¡úÐøôÉVÏ4 3~ŸŸúš‘‘¡V«;ù:è.ü0€i@Ž D#|ë[,ÆØÔ©SÓÒÒ‚~ÛÈXã]¥×¨ãûsëJ‹n4Eð 6lØÐÙnîååå|<@«¾Û\%67ñ3ÏT5ßRÖtZێ˹Xl~1ͨº¶»³¬ÄYå.x™]b%¤,zL&S¡ÍÁìã]ZÄǺ‘ã:¼&66VZËÙØØèt:_©ò<Îr³Õ*vzËϵ]5»=õÊê(lvÖ·xíñ—’’"=ÿÁøàòȫ晞_]øÌšù•ù–¶Ï°Ëyèï«cv»½ªªJ:רxÚ“UÛ³.°|÷?lÍ·òÕKæÌ)++«««;|ø°¯ð_Ÿ+`õ˜˜ÆØÖ[ÍxÏ“¶îIŒŽR ¼⡇’¯øÛ¿ÿ“O>¹råÊÏ>ûŒŸüSR”N¶ÎëÓˆ&ked¬éÙרéíׯ®2ÊÊÊüŸ¤MÖ~µ×b·‹ ì“É$ïÀr=ÔÁE.׳§©5¶Ã[©T*©˜(ŠbIIÉ/§êŽZÝe c³côLVÀZ¾|ù×_íÏ ›ó÷ñq“)`A/âÕ5v¬û³§ê—d|òÃ%—Ç¥ p1öQ½™_“´o»×MÎXÀj~í¾Ö^³Ýòà Á¡ÓéRSSñ났ààÏò;œs‰%5ªÿëµtéÒ‘#G2Æl6›´›rË›kxìOß~öé£>zÿý÷óbÄ0½æ£§iËQ£r:7n\´h‘(ŠÕÕÕgœÞÑÍ›øÇ«ÊáŠLJöuµßèåH•¼K¥R]|ñÅòWsrr¤ ª®Íž:¬|á3óYÀr«_úÖ¶µß>³}C“µýÆ[ÐsðÃHB¤9€i@Ž Dð ¬àà¬ÆÆÆè[¯JH”#Uˆ¾¼hØ¿¤ÄL‰ÔNÞðiË»¯K/ÅÙ,k3L7µý¹¸$!r¼Î³x0æÎkêÜûÉÿ&Ô qÍüpfc¥Ýn÷g†¢Íæ8”Ï¢¯¹æšiÓ¦uõ;Nêp)°Èš°æ{]ÓºÛ³&«³ °$|½•ÔuÀ⨌ˆ–Îhvm\Ä®]»®¾új›ÍÆó§ëç=¶.î ééî_Þ{%$$°ä‹4cÖ\ÏeMƒ†ðÝý;»•üpðàÁç]~…á¢9üÌS©1¼Ê飀år¹òòò–-[6Ü á'£†>|ø¾ÿÌ‘ªW^yåÞ{ïíð%)G^rÚž:ÈìrÿJrV•Ÿµç§ÔÔTéÐkaiié”Hí„Hw=UdlEe³J¥:tèW\Ñßt?Œ D#‘äHBßPÀ ¾„ðàÁƒ ,¸è¢‹X7×[Ï?a©žµÎùåðÍÿY÷§²FG»׿êÌë,EEE·Þzëºu뤓°&z X)U%þÌО¿—g嫘ÒB¹a|ÈH"t¶åè()[=«D­¹ßñ±0é\ß·ºí¶Ûäÿˆ.\(Bä øgäl½g©ÖÆGýîšÕCõm,Axé˯³³³ýü¦|#™#U·ÜrKg/I9òß-»‹K×Ôzšªš_[5Öų­ý§yÝÅÇ¥—JKKç üÊ MÖ–™õõõ|ê©§z⻀Îà‡‘„Hr$!Ò€ @ˆà XÁÁ;°ä65Ûþ5ö|U|?¦RÙwïèCÕר»9¿¨Õ%2ÆþSožUX“Ûbã×»2Îz´¢‰1ÖÐÐðöÛoçç»ÛyÚï^¤7™©Ýå‰Ìi«,÷==Ñjµ=ä3vÖìËù&¡„„³K€‡VpÈ´Zí©S§vïÞ=þ|MF–á¢ÙŒ± /¼_£R©~ÿûßK_UlsþÒj¯:JHàuÛôôô+VŒ1‚µ£Ÿ4[6}ã{zòõƒ%‘±ƒ òÿ[ –ÜÜÜ3_ÔÛH¬õM~ƲñLcæ/?â'ÑF2Ahÿå^AX½zµÑh\´h?i×êþ^íYÛõ›øH©µª³&¬––ÆØ¸OK7:˜,’9öAR޼8.=:à“ËáÁ#ù5™:µï›Ä̹òãÏ?ÇVá‚F" È‘„Hr$!‚o(`‡¼kìØ±ýúõkÍE]ÄÇ“'OþÛßþvâÄ ¡­®‘’’"=öKnÀ€K—.íß¿û»ésó”ȱ„P ðÃHB¤9€i@Ž Dð ¬P3fLg/uu !c,ñ¬Á?ÈŠ­ýËë‚Öÿ¼ÃÇEég z= “âââp½uÏQ«ÕF£‘1ær¹êêêä/Iƒ °r[lüY„–W“÷ï÷–÷ÞàcûðQšÌàoyF2Ç>ˆç¸|ùr~ÒGë®»î:ï¼óœžž>uêTþ@U#ü0€i@Ž D#|CKAºüBÆFýq½…š×}(67ñCgy©ù»õüpÈ=cš5*lÍ_=Š7°:tÚ¦T=QÀªr¸YîóL´ý²U~¥«æ”ù‹<ÇWÎëÎûv†jŽ} ÏqÑ¢E×]w4–°bbbä×OŸ>]„#GŽmݺ5;;;dS…Îà‡‘„Hr$!Ò€ @ˆà X @ëâ‹/þªÉÂ÷ö[š[×}È_-}úaAt¿TcJ™1;x“·~ýúIƒ«¯¾º  €Ÿï‰cl‡ÓshÝö£hnµíúÙ¼î?ÍÿøkýÒÛD‹Yz©ÔýÎÀ/¯¿þzff&ë¼+))iØ0<  ,i¿„ðŒ{` ><9mÀ¿j[ù™–7^vÕÕ2ÆŽ¬ûDóÝWü|òïî ÞLÁãù矗zU*++ï½÷^ƘÓé,,,Ü»w¯tAp X#|\÷Í›þþ|ÍÍsë¼£é•g¬Û6ó—^¯i6Æ1?Ƶk×jµÚ7qgmíWᘀ X @cìâ‹/þW™oåî¬,¯»kAók/¨»‡ÿÅiNIKºiQ0çÚu¹¹¹á@™6mÚÇ,÷ïßÏ›>}úàÁƒ7mÚ$LOOïÎý½ Xúh[[ÖúšªºwW·ÿ’]fûÛ Öˆˆˆî¼og¨æØ×xå8eÊ”'Ÿ|RÞ¥ÕjùGhúôé!ø?Œ D#‘äHBßQÏ|U¸ Bï˜g÷©Õjéav’›o¾ùí·ßöý%k×®?þCÉÑèÕÙ5 ÿüX7ùÜ ÍNçp8bbb, c¬®®n̘1òÝ+**ä-]õÀ¬X±‚Nž<ùᦒ‰*gg×[\â¬cµ§ Qõõõ¿)ôA.—«¥¥E¾õÕ\pèСªªª;vŒ7.Œs€Þ¢ç 8èÀR¯v:°f̘!Âʪæ–Ž‹Â침^õ(FÃÊ–ŸŸ_YYÉ_ŠˆˆHJJêÎÍÛ$^u}ûË´£Çë&Ne:ý3UÍG­Žèèèî¼)ôA*•Êkãö~ø¡¼¼Ün·;6\³ €¥,^›^ùSÀJJJJMMuˆlIq­/É)²5.Cʳÿò,¡þP¶Í›7[­V~>==½››y}4ÍÈ[—´¿Ì¸ôÉ„·>m|÷¿¯×´2ÆPÀ‚`Q©TØ Â,eñªVœqw‰ô€° »kï}OÇÿý½è%wå˜ðju˼¢º“9³˜2þøÌËË ÷zÐÈ‘#¥Á† ¤Á AƒöïßÏ·rXû,ÍaêäTùIkJšvÌÆX“Ù"-@Šêt=i7Ñαï@Ž D" È‘„Hr$!‚o(`)KKc|ýÚÂBýô‹bî¸ÿùÇ²ÊæÜÛyçüY¤›{™+ïÀÚ²e‹44hPvv¶^¯ïæÛw`1Æ"®¸–ÉŠ›ÅÃÝ+¼š››¥AÏu`Ñαï@Ž D" È‘„Hr$!‚o(`)KKY[cìСCŒ1Q·nÝ*QNËh4†{ =ˆ°¤­Üc©©©_ÞÖ4cî|0iÃÎFL*°8"Ûer¿W X´sì;#‘„Hr$!Ò€ @ˆà XÊÒͬƒ2ƪ««¥B†ÉdB ;4233###ågRRR‚rçÎ>ê¤ÔªsgÎ,¬¹àhõÑZ÷CPÀ=°”¥;{`±¶¬’’épÀ€AtJ¥R >\~¦‡:°¤%„’þýû3ÆŽÙœ¥¥¥‹åÔ©S(`I(`)‹WÅJ^­ðaàÀRûOeee]]ÝÉ“'¥óŠ*`åææ†{ =küøñòðÒÒÒ¤AYYÙgŸ}¶uëV^ÀЉ‰ Ê»·G>Ç>9€ @ˆ4 G" È‘„¾¡€¥,^,?;°T*Õ!C¤ñáǕٕ““î)ô¬I“&É{z !“°JKKß~ûí;w† ‹|Ž}r$!€i@Ž D#|ó«ÁBÆ«åÊÏ=°cÆ Û»w/cìàÁƒeeeÒIi‰„Fè X©©©‚ ˆ¢XQQQQQ!˜1c¤—¢¢¢‚òîJ€,e ì)„Œ±¬¬,ipòäIev`‘7räȈˆ~ØC,y‰S§Ó%&&2ÆœN§Óé M@è¡€¥,mâÎëׯŸ4¨®®.--•ÆŠ*`‘_ϬÑhÆ'u:]BBBPnëûÁ”|!c¬ªªª  @÷\‹|Ž}r$!€i@Ž D#|CKY|W+|°x–¼ºv}a=3_E˜œœ,BPîéû#áµJô§Ÿ~’Ø |CŽ D" È‘„Hr$!‚o(`)KÀ,ÞïSSSƒ%„á XÁz!󹄵«QšÍfi€=°€lâ®,ïÅ;° ¥¢¢¢L&Sp§¾]sÍ5999±±±qqqÁº§ÿKå°P‚,eéþX………Ò@Qëc ážB3 &“)XëY;°¸ž«]ö…ûäHB$!Ò€ @ˆ4 G"ø†–²t ¡Ëå’J[?X\\î)ôJ¾? .¬­­Ýµk—¼b5dÈ‘#GöÐ|# È‘„HB¤9€i@Ž Dð ,e x ¡ÑhÔétò3 Ú´‚aÔ¨QážB¯ä»‹1f2™Æ7aÂ~fñâÅAló‚i@Ž D" È‘„Hr$!‚o(`)KÀX‚ ÄÇÇËÏx=Ÿz)??'N”:î–[néñi„ XÊðXL¶ –$###8s‚°:c–„w`]yå•III=>-€BKY¼*VU+:äUÀÊÊÊ Îœ‚$777ÜS蕺ZÀZ¼xqÎ9Ò€ @ˆ D#‘äHBߺPð*`u©‹ïã.QZ+'''ÜSè•ü\B˜™™Ù¯_¿ØØØ‹.º¨Gçƒi@Ž D" È‘„Hr$!‚o(`)KÀ{`±Ó;°ÔjµÒ6q‡Àøÿ‘?~ü…^Ø¥¢'@¯€¿u•%X¬x=”z)?—2ƦL™‚íÛ€$°”¥;›¸Ë—fffmNA’——î)ôJþ×4ï¼óÎÔÔÔžžr¤9€ @ˆ4 G" È‘„¾¡€¥,ÁÚÄ]i`1ÆÒÓÓÃ=…^Éÿ–×&h=9Ò€ @ˆ D#‘äHBßPÀR–ît`É X ìÀ2ážB¯äÿÂÐ@Ž4 G"‘äHB¤9€Á7°”¥;{`)| !¦; PÀR¯–«€7qG‹ ¥u`„ XÊâUž ´„0777ÜSè•”Ö…i@Ž D" È‘„Hr$!‚oèæP–ît`ÅÆÆ~ûí·ÍÍÍv»=%%%ØS뮜œœpO¡WRZ 9Ò€ @ˆ D#‘äHBßPÀR–nV+fΜÔé@øa !–*Kw:°€$°PÀR¥­ "¬gŒÒ>È‘äHB$!Ò€ @ˆ4 G"ø&ˆ¢î9œ™ ôŽyvß‚ Þzë-~øÃ?œþùᛄ_qqqFF?üä“O®ºêª0Π3=WÀA–²x-!ìÒS$,!è‘úÈ®]»n»í¶¸¸8AÚ¿Z\\|Í5×ÄÆÆÆÆÆ^sÍ5'Ožì‰9ôRJ[/a‡@°nºé¦¤¤¤-[¶´©¹¹ù¢‹.?~|QQQQQÑøñãg̘ÑÚÚÚÓèW+Â=…^IiXÈ‘äHB$!Ò€ @ˆ4 G"øÖ#¬üüüÇ{,;;»ýK«W¯>çœszè!“Éd2™zè¡É“'¯Y³¦'¦Ñ~ aqqq¸§Ð+)­¦‰i@Ž D" È‘„Hr$!‚o¡Þbé‹/¾¸ùæ›ågn¾ùæÏ?ÿ<ÄÓP,¥U+‚hÔ¨QážB¯¤´,äHr$!€i@Ž D#| u+??̘1ò3£G.((ñ4Ë«ZMÜpMÀO¡®ÔÕÕÅÇÇËÏ$$$ÔÖÖžñ …Ž<öØc¹¹¹üš¼¼<ù¢YùKòqCCC^^^‡/…ýí«½ñ»À‚x‡ƒ2™üüüÞø]à¸î€;à¸î€;à¸î€;à”îðØcuX¨a=FE±ï.xß_§Óµ´´hµZ~Æn·GGG[­Ö.݇ª?ÿùÏÏ>û,?,((>|xçD¹¹¹999ážEïc³Ùôz=?üå—_&MšÆù G#‘„Hr$!Ò€ @ˆ4ô\§»÷•W×Úߪý¼“““÷íÛ—œœÌÏTTTŒ7®¼¼Ü÷»ô‘Ö<°bÅ ~xèС³Ï>;Œó°s:ò}¯vîÜ9~üø0Π3=WÀéîBQÆŸë³³³÷îÝ+?³oß¾#Ftsd`,ðâõû&î¡êúÈe—]öÎ;ïÈϼóÎ;W\qEˆ§¡X^Õ ìØ ‚ È?øH@êÖâÅ‹·nݺ|ùòººººººeË–mÛ¶mÑ¢E!ž†b~äœ|Ë7èùÇ ìXÈ‘äHB$!Ò€ @ˆ4 G"øÖ#,ùæó^ÑÇÄÄ|÷ÝwÛ·oÏÈÈÈÈÈØ±cÇÆ£¢¢zb½á¬ôôôpO¡·’ Âþ‘@Ž4 G"‘äHB¤9€Á·éæð½Ö Aƒ>ýôÓžx_w`ÆpO¡·RTr¤9€ @ˆ4 G" È‘„¾apeÁ&îО¢:°Bõe!ÜST@è¡€¥,„÷ÀÊÍÍ ÷z+Eu`!G#‘„Hr$!Ò€ @ˆà›à{¿*…„Þ1Ïî{ñÅïºë.~ØØØÆù€¤¤¤TVVJãêêê„„„ðΠC=WÀA–²`,hK C}DY/!„€)j !@è¡€¥,„7qÇzæ€)ª 9Ò€ @ˆ D#‘äHBßzÇÞR}g¬5kÖ,^¼˜:N¬"„ÁƒJc›Í¦ÕjÃ;€a¬¾{`A{ŠêÀ=ÔG”E^±¢´~ºƒT*• á @è¡€¥,ò¢±ö«†††pO¡·âŸ %Ô4‘# È‘„HB¤9€i@Ž DðT‰„ÂÏ›+..÷z+E°# È‘„HB¤9€i@Ž Dð­wlŽÞw6qÿàƒn¸áiÕÜÜÞù€L˜0a×®]Œ±èè覦¦pO cØÄ½¯ ÜST@è¡€¥,„÷À‚€ñOA}J$ÊBø)„¹¹¹ážBo¥¨,äHr$!€i@Ž D#|ë{Kõ=°¾üòËË/¿\'%%UVV†w> çŸþ?þÈëß¿iii¸§Ð1ìÕW`,hOQX¡‡–² €í¡€} XÊ"ß‹Ø&îyyyážBo¥¨MÜ‘# È‘„HB¤9€i@Ž DðT‰„ÂXéééážBo¥¨,äHr$!€i@Ž D#|CKY°ŒFc¸§Ð[)ª 9Ò€ @ˆ D#‘äHBßPÀRù²Ab,˜¢:°B,e!ÜST@è¡€¥,ò¢±MÜsssÃ=…ÞJQXÈ‘äHB$!Ò€ @ˆ4 G"ø&ˆ¢î9œ™ ôŽyvߎ;&Mš$ÇŒ³gÏžðΔ`þüùk×®eŒM:uëÖ­áž@Çz®€CªÇ‡,!„öÕz(`) XÐ XÐÇ¡€¥,Ø ÚSÔ&îÈ‘äHB$!Ò€ @ˆ4 G"øÖ;ö–ê;{`8p`ĈÒxÚ´i[¶l ï|@ –,Y²zõjÆØ¬Y³Ö¯_îét {`õXBí)ª ôPÀR° =ì} XÊ"ß÷ŠXµ¢¡¡!ÜSè­Õ…i@Ž D" È‘„Hr$!‚o(`) áMÜ‹‹‹Ã=…ÞJQXÈ‘äHB$!Ò€ @ˆ4 G"øFªDBá%„£F ÷z+Eu`!G#‘„Hr$!Ò€ @ˆà XÊB¸€ST@è¡€¥,„÷À‚€¡€} XÊBx¬ÜÜÜpO¡·RÔBäHr$!€i@Ž D#|#U"!€ðœœœpO¡·RTr¤9€ @ˆ4 G" È‘„¾¡€¥,XBí)ª ôPÀRÂX0Eu`„ XÊB¸€•——î)ôVŠêÀBŽ4 G"‘äHB¤9€Á·ðÿ= r„7qOOO÷z«©S§.]º”16}úôpÏ9 @ˆ D#‘äHBßQÃ=‡3„Þ1Ïîs:¼ËfÁ‚ÿüç?Ã;?õ\‡T„—,Åá+QÀ`(`)¯[Û+777ÜS€ @Ž4 G"‘äHB¤9€Á·Þ±·TßÙ‹1f0¬V+cìöÛoùå—Ã=¿`¬>„w`a !CKPÀCKq¨nâŽõÌ4 G#‘„Hr$!Ò€ @ˆà[ïØ[ªOí•P[[Ë[ºtéŠ+Â=¿`¬>KäPÀR°äPÀRª{`544„{ È‘äHB$!Ò€ @ˆ4 G"ø†–âðº¯dÑP\\î)@ G#‘„Hr$!Ò€ @ˆà[ïØ½Omâž™™yâÄ ÆØ²eË|ðÁpOÀ/ØÄ½¡º„ 0(`)6qCKq¨î•››î)@ G#‘„Hr$!Ò€ @ˆà[ïØ[ªOí•]PPÀ[µjÕwÞîéø{`õ!XB ‡–â € ‡–âP-`ååå…{ È‘äHB$!Ò€ @ˆ4 G"ø†–âð½Û‰mâžžžî)@ G#‘„Hr$!Ò€ @ˆà© T;°ŒFc¸§A€i@Ž D" È‘„Hr$!‚o(`)Õ@`PÀR¾r,†–ñº±=°rssÃ=äHr$!€i@Ž D#|DQ ÷ÎLzÇ<ƒbæÌ™7ndŒ}ðÁ×]w]¸§à—ž+àêñ¡KäPÀRlâ ‡–âF“Éd2™ôz}¸çLXÏLr¤9€ @ˆ4 G" È‘„¾õ޽¥úÔX½öÀ€> ,P4° DÂ=äHr$!€i@Ž D#|C B¤¸¸8ÜS€ @Ž4 G"‘äHB¤9€Á·Þ±9:6qP8lâ} X h(`Aˆäææ†{ È‘äHB$!Ò€ @ˆ4 G"øÖ;ö–ÂX ‡=° B  ,‘¼¼¼pO‚9Ò€ @ˆ D#‘äHBßPÀ‚IOO÷ # È‘€ÿoïþc¢®ÿŽß"®€ƒÒü:hÎËhCÇ?'9K˰ÕÔ)éLkVÊLšÓ«ùëЙšM0óÇ –šsŠÁ²rù C qÂ}ÿø¬Û'ÀûŠÜçýöùøësï÷½éIŒ{íî#%@D9ÐQD”%@D¸'ÆÍѹ‰;€Æqw<¦`@Ó`¡“äçç{ûð:ÊŽ ¢ˆ(:J€ˆr £ˆ÷ĸ·÷ÀÐ8î€Ç,h,t>Ï,:ÊŽ ¢ˆ(:J€ˆr £ˆ÷ĸ·÷ÀÐ8î€Ç,h,t’Û·o{ûð:ÊŽ ¢ˆ(:J€ˆr £ˆ÷`¡“”””xûð:ÊŽ ¢ˆ(:J€ˆr £ˆ÷ĸ9:7qÐ8nâ€Ç,h,t’üü|o@G9ÐQD”å@G Qt”áž÷–âXÇ=° ¼ÄÄDo@G9ÐQD”å@G Qt”ážïlâX ¢è(:J€ˆ ¢è("ÊŽ ¢Dz–Íf›7o^HHH```xxxvvv³'”””ÄÆÆÄÆÆ–––zü †çX“'O®ªªÊÎή¨¨HKKKLLܶm›k·¾¾Þl6›L¦âââââb“Éd±X<~ ÈÁóïìZµjÕ¦M›ôz½ò°¨¨hΜ9—/_V¦¤¤œ?~Ïž=®ç¿öÚkãÆKHHpwJÞI(>"ÊŽr £ˆ("ÊŽ ¢è("ÊA¤nÞ¼Ù5½ÒétƒVHðÛo¿]¸p¡úù .ÌÉÉñø1 ‡ÿW;6bÄ×Ë/Ž5Jý„çž{î·ß~ëèc@TÎŽT]]=tèP›ÍæZéÚµ«ÃáP?Çápøúúºÿ:Þþ€ÿ¯CLN§OǸ²²òå—_ÎÌÌŒˆˆhç—b†ðØjïGõ*êõ²²²éÓ§¯]»622R½TSS£^©®®nç1 «ö°Zý _yyùÌ™3“““-K³ç‡……ªWŠŠŠ†ÞÎc@Vž¿‰»ÝnŸ1cÆÆÍfsËݨ¨¨¬¬,õJVVÖìÙ³=~ ÈAïñÛK™L¦Õ«WÏŸ?¿ÕÝ¿ÿþ{Ô¨Q‹-Z¶l™N§ËÈÈØ¹sgaaá“O>éÙc@ž`5»–¢¶¶Ö`0(×ׯ__±bEnn®N§³X,[·níß¿¿gÏix~€xçïx,h,h,h,h,h𬒒’ØØØ€€€€€€ØØØÒÒRoŸ­+((ˆ7 z½¾å®ûŽTÖ›Í6oÞ¼ÀÀÀðððìììfO ¢Μ9³hÑ¢úúú>óÌ3S¦Lùæ›oÔO £XnÞ¼9dÈf¿W‰( } ê]: ¡©©)---,,ÌÏÏoĈû÷ïWïQûZþo¨×ë}}}]O ¢ÓÓÓŸþyƒÁh2™ÒÓÓ]O £¾ÿþû‰'vïÞ=888..®²²R½KDÍê¸WúmÊ*À«¾¾Þl6›L¦âââââb“Éd±X¼}.´"...44ôÔ©S-·Üw¤ñ^Ri ›IDAT²FLž<¹ªª*;;»¢¢"---11qÛ¶m®]"Š"!!aôèÑǯ¯¯ÿõ×_W¯^½aÆuëÖ)»t‹Óé|ýõ×ׯ_¯^$¢XœÿåZ§£(âã㋊Š>\WWgµZ­V«k‹ˆBp¶’’òÒK/)»DÅòåËwïÞ’’RZZZZZš’’²k×®åË—+»tBnnîüùó/^\RRréÒ¥ÈÈȘ˜˜þùGÙ%¢–uÐ+ý6gmù ]k’““,X ^Y°`Ajjª·Îƒ‡ÑòGË}G*kÄ{ï½×ÔÔäzXXX8hÐ ×C"Šëòå˃A¹¦£X¶lÙçüïïU" ÄÍßZtB^^^TTÔƒv‰(¢ÆÆÆgŸ}öìÙ³ÊC"ŠÂßßÿÚµkê•k×®ùûû+×t¤I“vîÜ©^Ù¾}{zzºrMD!xö•~[³ 0ÀŠŒŒQvé(„VX™‰ˆáÙWúmÍ*À«k×®‡C½âp8Ôï µü±vß‘ÊT]]=tèP›ÍæZ!¢XÔŸŸ:uêýû÷•u:ŠbéÒ¥ëׯw=Tÿ^%¢@fÏžm³ÙîÞ½«Ü±%44ôÂ… Ê…Э[7£Ñ¸cÇ»Ýn·Û·oßn4úé'e—ˆÂ)**êÛ·ï½{÷\+DESSStt´úÏ›èèh×½/è(„ˆˆ«Õª^Ù±cÇCf"¢Fxö•~[³ pw¯²²2&&&333""ÂÛgÁ#R~ËWVVîÝ»÷âÅ‹IIIÞ>Ú ''çâÅ‹kÖ¬ñöAÐ^999~~~}úôY¾|ybbâ|àíC¡ ššš>ûì³7Þx#$$$$$äÍ7ßÜ´iÓÇìísᥦ¦ÆÇÇûøøxû h³Í›7:t¨¦¦¦¦¦æÐ¡CÉÉÉÞ>Ú 11qåÊ•YYY·nݺuëÖ®]»V­ZÕ¥ C <,~V‚‚‚jjjÔ+ÕÕÕÁÁÁÞ:ûŽTÖ”²²²éÓ§¯]»622R½ND…††¾òÊ+{öìqýƒ’tÂÊ•+wïÞýÄO´ºKDqÍ™3'??_¹¦£ŒFcTT”zåÅ_<{ö¬rMD±ÜºuëСCK–,Q/Q™™™V«5:::((((((::Újµ¦§§+»t‚Ùl>xðà®]» Я_¿mÛ¶eddôêÕKÙ%¢ Ú®­Y`………ªWŠŠŠ†î­óàѸïHeí(//Ÿ9sfrr²Åbi¶EDq3Æn·+×t•+W  WÑét® "ŠË©úx/…æ~—ˆùâ‹/æÎÛì¥EQVV6fÌõʘ1cÊÊÊ”k:ŠbòäÉyyyõõõ ùùù&LP¶ˆ(¨ö„kkVXQQQYYYꕬ¬¬Ù³g{ëÜiù£å¾#•5bôèÑ_}õÕƒv‰(ŠiÓ¦eggWVV:Ž7nìØ±£wïÞGUvé((õïU"ŠÂl6ýõׇãêÕ«III=zô8þ¼²KG!ܽ{wâĉV«µªªªªªjçÎF£1//OÙ%¢@öîÝ;uêÔ–ëDEZZZÿþý>\[[«Ü«OŸ>Ÿþ¹²KGQÌš5«  Àáp\¹reÉ’%K—.umQž}¥ßÖ¬ °œNçµk×¢££ýýýýýý£££¯_¿îí¡uî;RY Z-X[[ëz…——7gΣÑèããÓ«W¯ØØØ3gΨŸ@G5ûsˆBÈÍ͉‰QþgìÝ»w\\Üü¡~…P^^¾`Á‚   nݺM˜0á‡~PïQãÇ?räH«[DÅÂÃà ƒÁ`?~üþýûÕ»t¾}û†îëë;lذ­[·666ªw‰¨Y÷J¿MYõ:  Ü 3XÐ4XÐ4XÐ4XÐ4XÐ4XÐ4XÐ4XÐ4XÐ4XÐ4XÐ4XÐ4XÐ4XÐ4XE¯×{û2`€àŒ«:,€Žât:½}0ÀðåíWú©•‹†††%K–÷èÑãý÷ßw:wïÞ]¶l™Ñh4 ï¼óÎýû÷]_íäÉ“ãÆóóó0`ÀöíÛ;ÿÛÐX ¼ÙÊù¯–Oxë­·&NœxåÊ•3gÎØl¶-[¶ÄÇÇ7îÏ?ÿ}zÚ´iŸ~ú©kåÔ©So¿ýö… t:ÝÂ… GµråJe+''çË/¿üî»ï:ï;ÐXžá~€UZZÚ§Oe½®®.00°ÙJß¾}oß¾­Óé|ìØ±!C†([µµµ#G޼qãFç}'à À3ܰšššÔÿLa«+Ê“»uëæp8Ô_§K—.{z ãXA=«zЊ"  ¼¼Ü©Âô <æ`x†ŸŸ_³wN=šÈÈÈœœœöi0ÀðŒAƒ=z´ýï–Z·nÝúõë­Vkuuõ;wrssg͚告{`xÆñãÇ®^½ÚØØèºõU³ ÷+¿üòËš5kòóóïß¿þá‡Z,–Îú>4‡4@Ó`@Ó`@Ó`@Ó`@Ó`@ÓþxÔA9gø9ûIEND®B`‚gsl/doc/images/regularized.png0000644000175000017500000005124413536675317015000 0ustar eddedd‰PNG  IHDRè๠Ð÷bKGDÿÿÿ ½§“ IDATxœìÝi|SÕÚøýt€Ž”F HA  Z¤"9‚”ƒŒ"8 ""(ŠÑ#"·¥È þEèAÓBEEé@©dPH ¥¥#…y^ä''SwÒ${èïû‚O»²»÷•E³rue­kk ƒ@Þ|¤@íHÜ q€ÄPw@HÜ q€ÄPw@HÜ q€ÄPw@HÜ q€ÄPw@HÜ q€ÄPw@HÜ q‡ji4©C8íĉ/¾øbBBBPPPPPÐwÜñÌ3ÏüüóÏæÇìÝ»wРAZ­Ößßÿ¶Ûn}víÚÕ¼ysóöššš)S¦¤¥¥ ‚päÈ‘”””ýû÷GEE™óÞ{ï͘1#''§ÿþ§Nòõõ5´ºººU«V›7oNLLôÂ<„wà?ôzý˜1cš6mйsç5kÖÛm.¹15j4šëׯO˜0A«Õj4š'NtêÔ©¦¦Æâøššš:ìØ±C„ÌÌÌäääÀÀÀ-Z|þùçž|N $iii¯¾úªEÖ.‚1kaþüùS¦L±ÈÚA˜1c† ‰‰‰ 7n´xô›o¾iݺµ½¬ñJAâ‚ äæævïÞ½U«V{öì)..þôÓOW¯^-ògÇß½{÷“'O †6mÚ´iÓæ_ÿú—Å1ééé¡¡¡½zõ:~üø!C&Mštùòåµk×Κ5kçÎn~2 LÛ¶mëÛ·¯ãc~úé§¿ÿýï˜8qâüùó-çÏŸ?qâD›Ç3þCI €J9õëýÔSOM›6MüyL‚ ¤¥¥™?´ÿþ-ZܸqÃÔRQQ¿yófƒÁ0jÔ¨ÔÔTÓCß|óM¿~ýÄÇ *XQQQÇcª««~ûí7SË¡C‡ª««mÏøaÆAزeËSO=åÚÏ>öØcæßÞ}÷Ý­ZµZ²d‰©eÉ’%‘‘‘ýúõaÏž= 0=ôàƒ>|صë€úþ{o’ÆŒÈ3øøøL˜0Á|Ò}þüù&Lðñ±ó0þCAؽÕr°9Õü ÀxŒ¿¿qqqPP˜óÔÔÔøúú5ÍÍ›7ýýýÍضmÛO<ñ×_5jÔ¨¤¤Ä8Žûì3A–-[fÑ~èС¾}û†„„õìÙsÛ¶mux– 6‡zòÉ'cbbüýýƒƒƒÛµk7qâÄììlócvïÞ=pàÀ&MšøùùiµÚAƒY¥Û¶mAÌËø¥`s* ¬q€ÄPw@HÜ q€ÄPw@HÜ q€ÄPw@HÜPRâþÃ?ôîÝ;((¨Y³fcÇŽ½zõªÔÜ@s‹Ô€¬))qOKK›2eÊ•+W~ûí7??¿1cÆHÀ ƒÁ`: ;BÇÊ’’’¦M›–––JÀ=4¥¾%€wH0ã~ðàÁ—^z)<<Üæ§¢¹¹¹ƒ |ؼ%;;»}ûöRÅpƒ9x‚¼÷þýû§§§›·¤§§0@ªx.`0OWâþÜsÏíÙ³çƒ>(,,,,,œ5kVVVÖØ±c¥ŽËfΜ)uµI„^à —óÐ%dòÿ…úI>ƒ¹˜‚ãcì=jÝ^k‹w^•®]¥Ž%¾—l6*¥£Dþˆ‡:J’^ríB¼îãPrÆåú €œ1ãÔk$  þÄ]s‹ë…PNg—¤ŽEÁÛÈŠwÆv•ïïa9cŒr ý@ÎØœ Ôk$ @â(‰; êOÜ)@V(éŒíd…rn@É0rÆåú €œQ¨×HÜ q€ÄPw@HÜPâN­_²Bw·`l +Ôqwjý3Æ(×ÐoäŒ:î@½Fâ(‰; $ @â(‰; êOܹIYáLnÁØ@V¸“p“rÆåú €œq& ^#q€ÄPw@HÜ q€ÄPw@HÜ q@ý‰»æN'u, èt:Ó¸$u, ÆØ@V¼3¶k ƒçÎ.9FåO€¢1F¹†~ gž£Ô?㨉; $ @â(‰; ªMÜËËËׯ_/ÂúõëËËË¥¨u–ÂÍÊÊ>|xnn®ñÛØØØuëÖÝsÏ=ÒF¨Gîú €œynŒRáØW\\Ü¡C‡³gÏš7ÆÅÅýþûï¡¡¡REÖH@]C¿3nÀä„ÌÌL‹¬]„ÜÜÜÌÌLIâêN…‰û‰'œjäO…‰{LLŒSí€ü©0qÔG…‰û©S§l¶/[¶ÌË‘€5N§¹EêXÌÔ‡:NêXÀKc» ÷ŠŠ ›íÝ»w÷r$`M§Ón‘:3õ!‰;9ðÎØ®ÂÄ=00Щv@þT˜¸'$$8ÕÈŸ wÀûÊËËׯ_/ÂúõëËËËÝ~~&îçÎsª¨£¬¬¬víÚ :T„¡C‡¶mÛö—_~qï%T˜¸SÇÞT\\ú¨iÓ¦ÒÆ‚\WpH°TæàÁƒ/½ôRxx¸ÍIúÜÜÜÁƒ‡†††††<Øúo1çg;xš'ó;vtíÚÕÝ‘€Ó乂C‚Ä}Ô¨QÑÑÑ»wï¶~¨´´´W¯^IIIz½^¯×'%%õîÝ»¼¼Ü©óËó/$P·æ‡š4iÒÒ¥K=/8AnõdŒ4®‡Ñh,¯>oÞ¼¬ZµÊÔòä“O&''¿òÊ+ŽÐ\FFÆ€¬Û7mÚ”’’Rç¨ÀmfJáì`nš¡7ÿ©;wŽ3fݺuÉÉÉ.\Ü(++køðá;SãââÖ¬Y#fgªçÆ(ymNÍÈÈ=z´yËèÑ£7nÜèÔI¨ãÒr<˜n1=ºfÍš‘#GnذALÖ%Ïz2FŽwƒ“êMNNNçÎÍ[:uêtôèQ§NÂw–SƒyZZÚo¼±}ûö.]ºx%:pDžõdŒU•ñ¾ÂÂÂÈÈHó–Æ˜¾5Íë¿°ù×kÜ@Zµææ&Ož,B»víL-%%%5òh„`œ3I…Ý€IÌ¿½Ý¾S¦L1­êÑétŒþ›N§“êöògýù­˜¬Ýf2¶¨;ñõd¼?¶‹Z;¿zõê5kÖ|ýõ׿=ö؈#† æúµ­VîkµÚììl­Vkj¹téÒ]wÝuñâEñ§=þ|||¼uw½^ß¼ys—£·SÇ&K æN]Ü%//¯C‡ùùùæ±±±GŽ si6§šÌž={êÔ©o¼ñƇ~èÞh>lޒݾ}{§NÂw–[s𾬬¬ääd‹¬=..níÚµ"³v•¸;vì®»î²hLJJÊÉÉqo4ýû÷OOO7oIOO·YÛÑ9¯L€úÀ-ƒ9x™œëɉJÜ###­?ß¼páBxx¸{£yî¹çöìÙóÁΚ5+++kìØ±NDžwº€úÃ-ƒ9x™œëɉJÜûôéc1w"¿þõ¯>}ú¸pIó•û«øCBBvìØ±ÿþøøøøøø_ýuûöí 6têü6ë¸ ‚ðÓO?¹-¸—ùf&©c©Oæ"¯Î†TîR—UÞÛE­?sæÌ}÷Ý÷ÔSO=õÔS111çÎ[±bÅŠ+vïÞÝ¢E Ïçîœ @)Ødéú €'¸+‡”xsj‹-öìÙsþüù|044ôÁ¼páÂÞ½{e˜µ ¬q€ózôègÑÛ£GIâ±&öLñññ+V¬ðd$nÃw8ËÏÏïÅ_|ÿý÷ËËË-qqqkÖ¬‘C=#yÝ9Õ-ŒkÜ­ë¸'%%Iä,++køðᦒ2ÁÁÁï¼óÎĉƒƒƒ¥ ÌœÂîœ*uÜ žu!ÈòòòO?ý´ªªJ¨¬9JÜmÞÄÕ¯혽µì‹-òr$`M5Ue¤EUnd³dnnnff¦È3xglw”¸œä¹(bo-ûË/¿ìåHÀšN§“Û°©D¦>$qPwu/mâ±]…Kezôè¡Õj-µZ­|v@>”RÚD…‰; ^rrrTT”E£¬ A©0qÏÌÌÌË˳hÌËË¿J õDVVVrrr~~¾yc\\ÜÚµkåSÒÈQ9Hg×Ëd½&7`€Æz2;S£¢¢öíÛg½ôZrõhsªÜV)@Z6ëÉäççïÛ·O’xSáRã ˜¬Ûúé'ï(锃àîZ©!}9H…²y&Azöìéý`Àå Ý‚rÜÂ]+5(é"Ö¸@ ¥Ô“1RaâÎwÔJAõdŒ4êû¬öüùóñññ«e|}}õz}óæÍ¥Š ¬i4*„½€~PwÅÅÅ:t°®'säÈ‘:Ö“ñÜ¥Âw›kÜ«««<(I<eÕ“1RaâÎw8¦ÄŒQTâ^UU5þü»îº+,,Lóß<Ÿ XãÇ”˜1ŠJÜ'Nœ¸fÍšE‹={Vž7]2g³Ž»¯¯oRR’$ñ@n”UOÆHTâ¾jÕªýë_÷ÝwŸ<7ØZ°·Æýõ×_—$0Ç ˜Ü‚0¨ ·×“ñÎØ.jÓkãÆOž<é¹8ÜhîܹS¦L±nOMM}ýúu/Ç&wN ^qqq‡¬ëÉ9rÄCõd$¾sª ›6mêÛ·oïÞ½wíÚUTT´k×®^½z=òÈ#2¬6coû믿.I<`N§Óin‘*†áÇÿúë¯ö²vAúöíû믿>Ü›Q9ÅÔ‡:NêXÈšwêÉxglûArrò«¯¾úÄO˜7~õÕW ,ÈÊÊòLl.š;wî”)S¬ÛSSS'OžìýxÀfŽ]C¿Ïû™¡ô3îGŽyøá‡-~øáßÿÝÝ!ÕkÜÀe7nÜHOOONN–:p5e†*ÜœJwpAnnî[o½·zõjÖŸP c=‹FÅÕ“1›¸wèÐaëÖ­[·níØ±£»Cª+uÜ%‰dnûöí=öXRRÒ7öìÙóÝwßõë×Oê À TSOÆHTwA¦M›öÌ3Ï\»v-%%%::úòåËÓ§O_±b…'ÃsuÜ@Œ’’’•+W~òÉ'þþþãÇÿòË/ƒƒƒ¥ ܦ¸¸xذaÖõdöíÛç¡z2ž&6q8p`ttôG}4gΜ¼¼<­V›””´yóænݺy4>ÄÄÄ8ÕõMQQÑŒ3V­Zèçç·bÅŠž={J¸™ƒz2)))’„TGbwAºwïþõ×_{.€w¼ð üñÇ‘#Gš4i²jÕªqãÆ5nÜøwÞéÛ·¯Ô¡€Û¨o† 7§Ú»Õ·£-[¶,^¼¸iÓ¦~~~O=õÔÑ£G'L˜0uêÔ»ï¾û믿¦Ò"uPS=#'÷5kÖtëÖ-22Róß<œkÔ÷ŸîUTTd¾ÐÑÇÇçñÇ?|øðôéÓgϞݩS§ÿû߆n¡¦z2Fb÷… ¾óÎ;3gÎüóÏ? ÿÍ£ñ¹€ràXMMåø¯ÑhþñìÛ·/55uÉ’%’z2FboìÔºuëåË—?ðÀž¨î222 `ݾiÓ&…nD VÜÔ5ôÇŠ‹‹;tè`]OæÈ‘#^¨'#ýSõz}—.]<Û©o#¸×ÓO?]^^îø˜òòò§Ÿ~Ú;ñ€{9¨'#I<î"6qoÖ¬ÙÅ‹=Š»°Æ[½zu×®]·mÛf[·víÚuõêÕÞŒ ÜE­Ó¸b÷gŸ}vùòå Å]XãŽ8qâž{îyôÑG{ôè±dÉ’?þø£¤"û/ IDAT¤¤¤¤äرc‹/~àRRRºuë¦ôw8õV||¼Ív¥OãŠMܧM›–ŸŸ?cÆŒ¿þú«¦¦Æ£1ÕÑÁƒ«««-«««_ýuIâs:Nòª\±±±Ë—/?wîÜ Aƒ¶lÙò÷¿ÿ]«ÕjµÚ¾}ûnÛ¶íñÇ?þüçŸ+U„µ2õ¡N§“:ò’••5iÒ$ëvÖ“ñÎØ.ví¼ƒ ä¶ChîܹS¦L±nOMMšÄKg® x lÅb©Ã€s”€üì³ÏT¿ºÝHì{·€’ÏíëŠÞ›Z¾v¥àã³# ìÃ'/TV›?ÚÌß÷:%ôºY,ÔÔ6cŽTq€‰|†Pe¡ß€ú¦¸¸¸C‡6×ÉÄÆÆ9rDVÓí2½sjuuµŸŸui<§ì‹ÅåkWj‚‚#æñi`”EÖ.Â…ÊêOƒšDÌÿB\¾veÙŠ%’Ä gÕçæ\OÜoÞ¼™‘‘qûí·»1×TŸÓ—,˜-øø„ÏYØóï5556«©© ìù÷ð9‹Ÿ’ùTŸ=ãÝ0à´z^Ò\퉻½Â2aaaï¼óÎüùó=d-Jý¡²2xн!??ßæaÆöÀ^|ÜPYY²x®W£€“(i®ö….Æ5:²]Ph¸QQ±í;Áǧы¯[ìÕk?uêÔý÷ß?èþîÝ5šŠm› ºTM@€ƒ€ì-’êM Hs2MÇÅ»±û§‚Føwîõåfc‹O­Oêû„¨Î¾ËZÝõWxôC=Ô Aƒ³gÏæççGEEÅÆÆ ‚péÒ¥øøø~ýú{ü9¨¯d;'"sôPOdeeõíÛ׿t{xxø÷ß/Ïu2ž£Än-up£%iGÏêógAð¿Ã¹JŽ”ßìtjWæªÂëéééökܸñÈ‘#xà‡zhçÎz½>>>Þüë~ýú ‚ðÝwß™¾%Ѩ»¼¼¼þýûÛ[$SJ@𛏛gç555§OŸ^¾|y~~þâÅ—E¯)º&‚OX¸S?UP]#B„o-Kü¯^½º`Á‚ øúúVWÿ§Rù×Z­V£Ñ˜çÄÆÆ®[·®cÇŽÖ©|yy¹ÈF€z.++kÀ€W¯^µùhlllŸ>}¼’¸RÌÑÇǧU«V³fÍzë­·>üð÷ß~Ûía9Lx„ 5× ú©Æ¾>‚ \­¶]Æš)S·ø://Ïü°³gÏþãÿð÷÷?wŘÊ †áÃ‡çææÖÚxÏ=÷öz} zƹv{Y{ý¹Oªµ:-Á9uêÔßþö·3gθ/§Ýس³àùÇÍ׸_¿~ÝñOm¾=ò® ÿÇõ…ÿWzÓÓÆÄÄ †óçÏ×Ú÷ûï¿=zÔfBŸ••e/Ñ7rœÖ“ô2ÄZm×Ðo€ŠçÚ¯\¹bï€uëÖ 2Ä›!9ËscTÎ[VVyãÆ 7ä,ʼûÛnTDÿø«ïmÍA(..Žˆˆ°WÍ]„ß_ÚD•×:üqå†Ì†þÕ«W¿þúë»§ãââöìÙsï½÷Z·ÿþûïÆ¿8§õµ&ý‚¸Ìžìp/P×Ðo€Zååå%&&Ú›kdyŸTk£ u°sçÎ6mÚÔå nQ8uü…Díµ¯™Z²²²üýýí=å´f¡µó›‡y¤Cë&ÀNyÊ{ï½×fû‚ þüóÏÓ§OÇÄÄX<WTTd0ŠŠŠŒ¥rl>j´wïÞ¸¸8Ó£±±±YYYý,æƒÁPVV¶nݺÔÔÔuëÖ•••yæÿP ¡nƒp½E¿ª´wïÞ&Mš8H“š4i²wï^©Ã¬çÆ(ÿ ¸víÚÞ½{_~ùå×^{müøñ.œÁªÏç^I¹ßPUññrã=˜A(//OMM9s¦±NÆ #"".]ºÔ+Ðçó¸ðjƒ¡Ç©«gnV;<±â%''·jÕª  `Ë–-Ö¦¥¥=úè£ 6¬©©¹ï¾ûLç ‚P\\Ü¡CÇÇâ¦öDNÞ3ÇucæØ5ô >µÎµ7nÜ8''G«Õz3*×H¿TÆ¢dxxx›6m&Mšôøã{",g•­X\œúž&(8|ÎbSî.Xu\Ñwß”¼ýŠoåÍŒf­·îtíÚ5???›uÜ÷íÛ÷å—_š~{T•̶¨ÆÄÄTVVZìXmÞ¼¹F£1mWuÐóî»ï>ûì³ÖO°wïÞÛ·o·n÷õõ½xñb­Ëú]ðÀ´k×.,,¬Q£Fz½~ùòåÖǬ]»vèСƯE&÷‚èü^üŸ)>”‰Ô5ô &åååüñìÙ³KKKíÓ¤I“M›6)¥þ£ô‰»ü½7µ|íJÁÇ'xàãÆMömÚ\0ë¸ê çJ—Ì-ÿfµ`06cN­'4OÅ×qÿý÷߇jJ^ãââÖ¬Y£ÑhD6¶oß¾cÇŽ¦TÕ(66vï޽ݻw·n7.óÊÈÈ0`€õS˜6mZbbâž={>ùäëG4MYYYAAAEEE­â@XXXÆ A¸pá‚õ£Ï=÷\·nÝBBB"""BBB4ÍÀ/^¼h~Œu~/þÏŠEêú P¬¬¬¡C‡ZLeZPÐ\»‰»(e+?-ùx–¡²RÐhü;ÜéGbø»s¯Íx­òxNeÎaÁ`Ðøû‡¼úvÃ1/z4 ñ%Ûm6þòË/Ö }·nÝìµ ‚P\\l3Ý7¦õŽÁ^Þ?eʔ֭[_»v­´´4;;{ãÆÖÇÖ1é7¹ë®»ÂÃÃCCCCBBΞ=ûùçŸ[¶iÓ¦””óR|( ¨k4MÅÏ;ª/œ«).ò ómÓàî{5RÇÀ9µ.”6×n$Yâîà†©&²zש>§/Y<·bë·†ëå‚ 4ËÉ»¨AøpÿñS|›ÇÕvé¹PÇÝAZ_룵föµSXXXVVöí·ßŽ7Îú餤¤4nܸ¤¤¤¨¨¨¨¨H¯×_¾|ÙåÎñññ  3þe²sçNë#?ù䓚> <™â dùp ‰»³ªrO—.ž1çãØn¢ üÛ£!ã§øÆ¶(4N³øà{Wnܸy0«úüÙ†CG•­û—oóØIÝ4v ¶¨F]ê¸;ÎìE#æÁþ¿N§k׮ݵk׊‹‹‹‹‹ûí·ŒŒ W:ŠŸŸŸ1Ë÷ññ9uê”õ3fÌøûßÿqK@@€S)¾@–W‘¸ ‚ðÝwßÍ™3ç—_~‰ŒŒìÓ§Ïœ9sì½I—}±¸xþl¡ª²YNÞ•'úù·iïVS\Ty<§òÈoBMÆß?dâ[ ŸzÉËO€Æ÷¾S§NeggoÞ¼¹¸¸ØññJœk7"qAXºté²eËÖ¯_/Â!CÆ7vìXÇ?›¢xn©ã.æ‘ù½½Ã:d0Š‹‹ ‹ŠŠŠ‹‹333?þøcëhcbbªªªŠŠŠœÝ¹XPP`ýÐk¯½Ö»wïÈÈȈˆˆÈÈÈÈÈH___fù¤øêÆ%B¯^½&L˜Ð³gO__ßyóæeffÚÜ‹ÿÿod<2\—jÑoÕ—.”~šV¾á+¡¦FäF&^cœ_ÿ裮]»&òG:×n$‹:î¿üòËc=?hР}ûöÕ¡¥Óî½÷Þï¾ûÎøõwß}wß}÷Õú#N=A¸…˜:îYYYæ¥åãââl–eyXQQ‘yy£ØØXS¡ú7n\¾|ùäÉ“iii6_wß}w÷îÝÛµkwÛm·Ù+¥oOhhhtt´Í‡¦OŸ¾gÏžãÇççç›G[kY}‘µóê|ÈŠÀõßJJJ‚ƒƒ­ÛK—r!Q{ñî–×wü`°ßo×wüpñî–µ¥_,öl ì3¾Íž={òäÉï½÷Þˆ#œ½_RLLŒ"êµÛã¹±]ìy7nܹhÑ¢ÜÜÜŠŠŠÜÜÜE‹EFF~ûí·Î^òÀãÆ ³ù¬ôzý AƒBBBBBB ”››kz(44ôÊ•+Ư/_¾^ëµxS”-‘)¦ÈÃÜ•â›.úÅ_ØJz衾}ûvëÖ­M›6Mš4ñõõ9ùøø4iÒ¤mÛ¶íÚµ³yÀ’%KL¿Þ¦hŧøç³|È¢Ç(—s{JKKgÏžýè£Z´W=sñΘ ›^ßþ½±ÅA¿]ßþý…ŽM/ÞS•{Ú‰'Ày º)M7 ®iذá¬Y³”>÷ä¹±]ìL~rrò«¯¾úÄO˜7~õÕW ,ÈÊÊrê¿$11qèСC‡íСƒÅÕKKKï¼óΧŸ~ú¥—^añâÅ+W®üí·ßŒË|}}+**Œ·D­¬¬ ªªªr|->†®?D.)³˜G½žG„¢¢¢õë×Û\µu÷Ýwûùù]½zõêÕ«6ÞXóññ‰ŠŠŠŠŠjܸqUUÕÞ½{­ùßÿýßAƒYìÔrVàÈ„¢Ç(—s›Œ{–¢££wïÞ`þе7Ç_ÿöƒ‡<¦K5þê:tòäÉaaaEEEÖÿö?~àŽÓÇNÆß±©]W{Ǩòßüüüüü|FÓ¸q㨨(9„Ä¿rþ·Ž¿0ÇŽûî»ïŠŠŠÜ8ª(zyŒ9é—Ê]¾|Ù¢ñòåË6?ÓÉúêiii#GŽ4o9räüùó_3ã·pï,¾AÜD~UUU^^ÞÑ£G?üðC›¯ÄæÍ›GFFŠ|Ù†††¶iÓæ¾ûî8pà /¼0}úôçŸÞæ‘›6m²˜8ò¡Ž1ÊÙÁÜÞPQQÑÌ™3xàóÆšŠë»´¸Ð±iÕÅó¿ºö4÷÷=Ÿ¨=Õ.:@Da42¡ôå1æÉ—Êx'qïÙ³ç–-[Ì[¶lÙÒ«W/ã׬q‡—‰OXÝ•åWUU]ºtéÈ‘#™™™o½õ–Í¡ÍÏÏOü8ضmÛÑ£GOžùäN÷è£ÖqÜ|þùç7lذgÏžÜÜÜ7n˜bpj=sóÎRÇåì`naÔ¨QG½yófnnîË/¿l±Æ½lÍÊ ‰Úkï¾¾iÓ&ñ¿Ï5 ½¨}2"¨Ž¯ ®²”ÝHðØØ.vênÚ´iÏ<ó̵k×RRR¢££/_¾œ‘‘1}úô+V¸ñÿ¯°°Ðbµ@ãÆM‹ƒ_xácÊnüúÙgŸuã¥: 2dˆ˜#ï¹çž?þø£Ö%æ¡¡¡k×®µ^‘o\³a~°ÍEùZ­vÑ¢Eeeeyyy—.]º|ùò¥K—rrr.]ºd}¹eË–-[¶ÌügµZmƒ ,ÖÍ ‚›››™™iqÿZÁ™2—¬°W=ǃ¹…”””Çü?þÐjµýúõKOO7´¦èš >aá'Nœ@Au ¾>N‡ÀÃÂÂÂ}ôÑŽ;&$$ðà4ñ9þîÝ»7pàÀ:.E²¾º¿¿ÿÍ›7Í[nÞ¼Ù Aƒº\¦™3gº|NÀ›Ü>‘ooÚ²oß¾ èÚµk³fÍj]Þ½{÷¡C‡Nœ8155õË/¿üþûï›6mjq˜Í¹ùú¹öfæÌ™u„eË£ƒyÙÚô ‰Úkº)N͸§6 ½¨}‚w@NÔ7¿îý±]Ê‚Ö[nµZmvv¶ùnâK—.Ýu×]/^t×%3“-¦`NMMM^^Þ… ¾ùæ›÷ß¿.!M:uРAqqq·Ýv›@õ+ê£<:˜ßس³àùÇý;wi°äßÖ¿ºöl¾=ò® ÿÇõ…ÿWzÓÙ+p‹ððð~ýúµmÛ¶¨¨(**ª^ͯ{nlwb—›$&&>|¸OŸ>¦–ìììöíÛK  b–ë8^cäããÓ´iÓ¦M›¶nÝ:==Ý"UЉ‰Ù¼ysQQѹsç.\¸pîܹóçÏïß¿ÿÌ™3Ö—›3gΜ9sA Œ‹‹ òÄÚÈó]ºi‚‚+?Q^jñ«kOŒ¿ïAþe5†_Ê*]¸"§˜'èÆb‘õ-M÷&±|ûí· .ܲe‹ ƒáé§Ÿ^¿~}=V¯^ââµ­þIKK;xðàªU«L-O>ùd×®]'Nœè®Kœ™ÉYù>##cÀ€Ö?~ï½÷7^¹rÅA<·ß~ûý÷ßß²eË-ZÄÇÇ·hÑ",,ìÎ;ï97¯Ü‰yuŒQž̯½ùòõo×öî\1uÜSŽhsúØÉm7µ½[òRÙ *ËÍ¿õíߺÿ Û#}÷Þ½{gdd¿Þ°aC×®]óóó§N:mÚ4——éX_½¸¸¸eË–³fÍ*(((((xÿý÷[µjUZZêÆKp–˜uöEµ³/++ËÉÉÑét"‡&{w¥µ®L¯èEóê£<=˜WÓ_¼+–;§P ÏíbÏzõêUã×cÆŒY¶l™Á`8þ|ëÖ­¾¤Ã¿NŸ>=pà@ã]²xæÌgÏoïZlHÿüóéÓ§5êþûï‰‰ÑØ¹uN```—.]†>mÚ´åË—ÿý÷âËÒˤZ¥Åf&©Â¨;oæ¥_|r!Q{ñî–ÆÜÝÞØ~}Ûwïny!Q[ºbI].ÎòÎØ.v&?((¨¸¸Øßß_„víÚ­^½ºsçΕ••aaaåååbÎ u| (…˜%+"×Þ|ýõ׃ r9’¯¾újĈæ-ò\1Ï%^Ñ{SË×®||‚>þÏyýV}á\é’¹å߬ †àacÂfÌ‘*NðÜØ.ö¼­[·Þ¶m[||¼q–½°°0 àܹswÞyg~~¾'"s ÞªKõ›;wæååºå矶Wf¤I“&mÛ¶½ãŽ;Ú´i;iÒ$‹ö6WÌ{y¹}útéÒ¥K—.­Zµºçž{DÞó•1Ê5ô9#qwƒ;ñ\ž•7çããSSScÝn1+oü+bèСëÖ­ã†áÎbl g$î.bpàfåcbbV­ZõÇ8pàÀ‡®®®¶>ó°aÃÞ~ûíÄÄD___yÞ JAÛȉ»‹Ü¸W­³òŽïùÚ°aÃ;ï¼3;;»¤¤Ä¼ÝÞZØÄØ@ÎHÜ]ÄàÀí\˜•øá‡:têÔ){§µXKÛÈ™çÆ(OœTV4·P/ €[2dòäÉC† ±^›ºvíÚØØXSK\\Ü÷ß¿víÚ“'OuíÚÕæiOœ8áÁ U‡±€¬èt:Ӹ乫¨|Ò‚Y’p0+oo‡+3îâ1¶3–ʸˆÁ€ÜØ«;yäÈÖ¸‹ÄØ@ÎX**as-ÍÚµkÉÚŽ©|Ò‚YòD÷º`l g,•qƒ;9cŒr ý@ÎX*Ôk$?q§Ö/YñN­_Õcl +ÔqwÖA3Æ(×ÐoäŒ5î@½Fâ(‰; $ @â(‰; $?qçîzd…;§ºc;YáΩnÀÝõÈc”kè7rÆS€zÄPw@HÜ q€ÄPw@HÜ q€ÄPõ'îš[t:Ô±€ ÓéLã’Ô±(c;YñÎØ®1 ž;»ä4•?AŠÆåú €œynŒRÿŒ; $ @â(‰; $ @â(‰; $ @â(‰; êOÜ5·èt:©cA§Ó™Æ%©cQ0Æv²â±]c0qﻀãcì=jÝ^k‹ù·žû¯wíÌuì(ñ½d³Q)%òG<ÔQN}ëFê(I^w"cs×þ;ü{ö¬Í“ìØ±£k×®Ž;·¼šê—{,''Ç4æÜ}÷Ý999^ŠX ü^‰TÞÎHÜúnÔ¨QÑÑÑ»wï¶~¨´´´W¯^IIIz½^¯×'%%õîÝ»¼¼Üâ°C‡Mš4iéÒ¥^‰¯º¿šê—{¬´´4,,ÌøuxxxII‰÷‚ö:~¯Dªog|tà?¬?K7oÞV­ZejyòÉ'“““_yåSËÎ;ÇŒ³nݺäädïÅ È›³¯&Ó¡ÅOÕŸÎöXXXØŸþ%•+WÚ´iSXXè嘽ϵQÚæª›ŠßΘq`WFFÆèÑ£Í[F½qãFÓ·kÖ¬9rä† ä<ÌràøÕd¸EŠÐdÊq%&&îß¿ßøõ¯¿þš˜˜èíøä¡ÖQFªy;ó“:ò•““Ó¹sgó–N:=zÔøuZZÚüùó·oßÞ¶m[)¢”Äñ« Ö÷ØèÑ£ßyçãàóÎ;ïŒ7N‚e€ß+‘TóvV¿>:à€õg‹ 4(++ó÷÷7µTVV6jÔèÆ‚Ù‡û&%%%5òB¨€Ì9ûj²yóoUÿfílë¸öÙg‚ ¼ð ³gÏ®¥Ê]ø½ªo¿HF*~;#qðuO5ñjr=&½$’Š;Š5î슈ˆ(((0o¹zõjdd¤TñÊÅ«ÉYô˜ô’Hªé(wv%&&>|ؼ%;;»}ûöRÅ(¯&gÑcbÐK"©¦£HÜØÕ¿ÿôôtó–ôôôH \¼šœE‰A/‰¤šŽb;€ÿ°^XRRÒ¹sç±cÇ+6,^¼ø‹/¾8|øpÆ %ŠP^M΢ÇÄ —DRqG1ãÔwš[,¾!$$dÇŽû÷ïÿõ×_·oß®¸að^M΢ÇÄ —DªÅŒ; Ì¸ @â(‰; $ @â(‰; $ @â(‰; $ @â(‰; $îðFãò£u?¿|XÄé¡°<}út‹ÆéÓ§2Ä…³y'fð&Ÿˆˆˆ#FI ŠÆ`0Hê ÆÑï›ãGë~~ù°ˆÓCa_ºtéÎ;ïüñÇ;uêdlÉÎÎîÓ§ÏáǵZ­³góNÌàM555YYY/½ôR=æÏŸ/u8@íx÷…\¸»ÝÊ•+-Z”••åëë[]]}Ï=÷Lœ8qÔ¨Q.œŠÄ€Z]¸p¡cÇŽgΜ ‘: ,•A-4Íõë×'L˜ ÕjÍHdff&''¶hÑâóÏ?7µ—””¼ñÆ­[· {øá‡¿ýö[Ó©L‡9r¤oß¾ 6ŒŠŠ7n\yy¹ùm†aúúüùó/¿ürHHHË–-ßx㊊ŠZŸBuuõûï¿ß¢E‹€€€6mÚ,Z´Èü€ŒŒŒnݺ5lذaÆݺuÛ¼y³ã§¯ÑhÊËËŸþùÈÈȨ¨¨©S§ †ëׯ7®qãÆááá&L¨ªªr•5‹K>|8&&Æ…³ ‚0f̘ÆÏ;W„ÔÔÔèèhÇY»^¯3fLÓ¦M:wî¼fÍ. ʸråJ©jGâŽÚ?¾{÷î'Ož4M²?~|È!“&Mº|ùòÚµkgÍšµsçNãCcÆŒ©ªªÚ¶m[QQÑéÓ§'Nœ¸páB‹þùçŸûÛßyä‘?ÿüóÈ‘#mÚ´;v¬øxî»ï¾.]º\¼xñ§Ÿþ¿öî6&©ïø½“‡ˆ,(W–™¶ÊÜ l³ÍZ…n2ÂwÌ^d +­µ,{X¸œ/2Ó¨ÔåLV”e‹Öæò¡i6—m•у #“!0ðÿânwwÀ²ÿï§üöý¼:çû=÷ø½íìvÎõ…ÙlV*•Q/Q(n·Ûh4NLLܾ}ûÚµkøª´¯¯¯¸¸øøñã_¾|1™LG•Édýýýn~úô©¯¯¯««ëêÕ« …B ŒŒŒ ܺu+ö;”••Õ××U*Õ‘#G(ʟΆinn®­­5 uuuÍÍÍF~ýúuÇŽëׯïé陜œljjjooŸÝ€8¢Ñh(Ê,~i0fˆAººº  L&«­­Å»=ÊÏÏÇÚ .t:dSaTUUS/^ija?–dŸÕ‰‰‰ÔÔÔÈc¹pá1b0¶mÛ†µÅbñÍ›7‰Y•J%‘HðkCoA††¼ÛÝÝÍd2‰‘—/_òx¼°Å„Ö‰w½^orròðð0ž²Ûí,k||œlªXܸqEÑÆÆÆÈÊ‹‹+++ɲd5@\óûýÏŸ?ÏÌÌ4s]QÀwÝþýûƒ"==="‘ïîܹshhkoÚ´éÔ©S?~üˆ0á³gϤR)1"—Ëc,fzzºªªjãÆ EQ6›m6›£^U\\Lìfggüøk³"‘èõë×x7ôö‘H$x{Ë–-.—‹ÉÌÌüüùsL÷C@¥R ñ¡{KKKAAÁŠ+þtª (Šú|¾Ècž>}ô]€ÿ<­VËf³wíÚUZZ´‹€yN˜(Põz½T*•LLLôz½ÄHBB‚ßïGÄd2$%%ùýþÔÔT­V+ÂN‚·#ü›Íf@ V«åryJJ ÙH*•:99I§Óÿ´fˆS333<¯¦¦&??ßår¥¤¤ ®Y³f®ë€1rïÞ=¼žžÞÛÛK̶¶¶âm·ÛM|TçÎYÔO”••õøñcbD¯×geeýå´³VVVÖØØèóùT*Õ±cÇþf*µZít:ËËË9qâį_¿ÚÚÚÈ …ÂYøï©®®>wîÞ---mmmõxŸN§Óét>Ÿ¯Óéb¿6öY*t¤^¯Gäüùód3ÄB"‘\¾|9(xéÒ¥ÂÂB²KL&“T*]¾|9•Jåñx>Œ½fˆ/999&(h0ø|þœÔ@,à„ÿ¶¨=Ýn7›ÍMNNþ׫ §sn–Õðq8õõõr¹|þ¬Ú0À€yEQƒ±oß>8' € °p`ý' Uˆðwâ,܈ÿ¤¯Q!‚?IEND®B`‚gsl/doc/images/rand-bernoulli.png0000644000175000017500000001520313536674414015370 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“8IDATxœíÝ{lÕõýøñsÀr±ÐnTI–:Ý`ÒØ¥ˆètҹȬÍFÝp*$8*J–-KˆÌtÙ4†¢N¦YãlcÈÔqq^ÇÂÅ2u@Å¡T‘›X ¿?úý5~ ùôUÇ_í§§ç¼ )OÞïónO¶±±1´¯NÑÀñH€ €@€ 0` À@€ €@€ 0` À@€ €@€ âe[èÔ©Sß¾}Ï;'zèÀÑ£,›Íêƒnv(­Þs[rÀ Ñ™L&ÓØØØôÆêëë—/_>qâÄU«Výæ7¿‰ìÈ49™L&›Í¶|hââ%&jýúõÅÅÅ~øaÈH‡ÒíC@Ç'Àб8p`Û¶m .9räˆ#š.þûßÿ¾âŠ+&L˜°uëÖÙ³gßqÇûÛßš?å†n:tèo¼Ñru8nܸ={ö,\¸°¾¾þ¡‡ª®®ž5kVÓ‡–,Yríµ×Ž?~Æ ëׯ¿ñÆGµtéÒvü*“gnvþùçík_Û²eËsÏ=WWW7yòäöœ ÚI#-ñ{sàÀÛ·ooºÁ¨Q£î¾ûîæÛÿéOúö·¿Ýü¹÷ÜsÏ'ïðÖ[omyeþüùçž{nÓÛßùÎwî»ï¾–6mÚˆ#š?7qÂVß8ÌW÷É+‰3'~z}}ýi§ÖÆÇ‚cˆ0t-¿-ß{ソüå/ûöí»ë®»š>úÊ+¯TTT4ßøÂ /¬­­m~÷»ßýî'ïðÚk¯mùîyç÷úë¯7½½bÅŠË/¿¼åG+**–/_~”¾”6Iœ¹ÉG}tûí·ùË_>ñijÙlŸ>}êêêÚs6hN4@¼Ä³EK–,¹êª«Ö­[—ÉdºvíúñÇ·üh§Nöïßßô¹üq^^ÞAw¸ÿþN:t±éQºuë¶}ûö®]»6hïÞ½ŸûÜçšžjýä0èܹsãÿž½jûi¬OÞàP37Ýì–[nY»ví/ùË3Ï<3??ÿ£>êÞ½{ Ž!VÀÐA}öÙo½õVÓÛo¿ývËUrS}›T²&Õ·¥Â­[·¶¼²uëÖ“O>¹éí^½z}ðÁ-?º~ýú#þ*%qæ&O>ùäŒ3Î9çœüüüL&Óô_È= ÔªU«N9唦·/¾øâ¹sç­{.))™7o^Ë+þóŸKJJšÞ>óÌ3ÿþ÷¿·üèÃ?|´º-öìÙÓ­[·æwyä‘ö|th7~t8õõõÿøÇ?&L˜póÍ77]¹í¶Û.¹ä’îÝ»———wëÖmÉ’%÷ÜsOËŸúT~ò“Ÿ”——÷êÕë’K.Éd2 ,øùÏþôÓO7}t„ ãÇøá‡›Î!Ϙ1£¾¾þ¨|]m4|øð[n¹åî»ïîÔ©SMM͆ ÚóÑ¡ý¤Î hÅAß•½{÷2dÈÌ™3[ÞæÕW_>|xÏž=»wï~ñÅ/\¸°ùsïððÿøÇ?–––vïÞ½{÷¥sçÎmyËiÓ¦õïß?//ï‹_üâäÉ“÷íÛ—9Ú§ s³mÛ¶]}õÕ}úôéÕ«×èÑ£wìØÑöÇ‚cˆ ÀsÀ@€ €@€ 0` À@€ €@€ 0`#^±bŸqãzõê•Íf£g€ÖåH€GÕ·oß—_~9zh“lcccô GS6›k_9)GVÀpl` À¡1·|ª¯è¶ÛnKü3éÖ­[ûþ%Ðq¥¬\;²tTa9É@“ôŠ` 0`pBôGGËß@Ùü¶çqè°r$ÀZ À±Å4` À@€ €ï6nÜXYYYPPPPPPYY¹iÓ¦CÝ2›¤K—.í9mÎ`€ãÚÎ;‡ VRRRWWWWWWRRRVV¶{÷îÄòWWWï{ßkç™sƒ_zœÀÕÕÕË—/ôÑG›¯\sÍ5ƒ?~|«Ÿ{àÀþýûÏœ9³´´4Í#ù]Ð,›ÍîÞ½ûúë¯ÿüç?ŸŸŸ?|øðÕ«WÚ;™7o^UUUË+UUUsçÎmËç>õÔS………9\ßT 0À1l̘1 ø×¿þõŸÿüçÒK/-++[·nݧº‡Õ«W·¼2hР5kÖ´ås§L™róÍ7ª‡£™½Ö¶ cB6›½ýöÛo½õÖæ+·ß~û›o¾YSSÓ|ƒÃ|zÓ?t]ºtÙµkW^^^óõ†††=zìÝ»÷ð¾jÕªË.»lݺu'œ#¿T1‘-h\}õÕ½»páÂæwÿ‚ðŸñ¡§N:nܸ6ÖwÒ¤I‰'¨ÛǤI“>ã›K½VÀÀ1!›ÍîÙ³§[·nÍWöìÙSPPÐÐÐÐö;),,\¹reaaaó•wÞyçœsÎÙ²eËa>ë½÷Þ;묳Þxã>}úÁäÇ+`¼ýöÛ½û…/|¡ùÝï ›n3pàÀÚÚÚ–w²råÊþq|ðÁ+®¸"çë›*8†=þøã½ûÍo~³ùݶlA———7?gܤ¦¦¦¢¢â0ÚÐÐpÿý÷;~õåò3ç9ïµ×^›6mÚ÷¿ÿýL&3{öìûî»ï¥—^úT÷pÝu×ßyçcÇŽÍd2Ó§O_²dɃ>Ø|ƒOîÁΙ3gÀ€­®’9<+`€cØoûÛÚÚÚ¯|å+§vÚüùó,XpÆg|ª{èÙ³çâÅ‹—.]ZTTTTT´lÙ²E‹åççæS¦NjùûÙ9m”À!,à˜à«vàä€ p¬²ÿ|L` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ œ=ÐquêÔ©±±1z ÈM $Û·o_ç΢HÙl6¥{¶ $Û¿çΣ§€œ%À@²}ûöp‚M2H‹ÉR%À@2[Ð*’YCªH¶ÿ~†ô0¬éÇ¢§€œ%À@2[Ð*’9„©` ™0¤J€daAªHæ¤J€d¶ !U $s R%À@2+`H•É‚T 0Ì!,H•ÉlACªHæ¤J€dVÀ*’9„©` ™CX*’Ù‚†T 0Ì!,H•ɬ€!U $`H•ÉlACªHf ©` ™0¤J€dVÀ*’ 0¤J€d¶ !U $³†T 0Ì‹1@ªHf R%À@2¯†©` ™ç€!U $³ ©` ™0¤J€dNACªHæ¤J€d¶ !U $s R%À@2+`H•É‚T 0Ì!,H•ÉlACªHæ¤J€dVÀ*’9„©` ™CX*’Ù‚†T 0Ì!,H•ɬ€!U $`HU+ß]õõõO<ñÄâÅ‹W¬X±uëÖL&Ó·oß’’’aÆýà?èÓ§O» ° ©:ä xóæÍ×]w]¿~ýüño|ãóçÏß²eË–-[æÏŸÑE=öØcýúõ3fÌæÍ›Ûs\ ÝXCª²‰èÞ½û—¾ô¥{î¹çÒK/M¼ÁÓO?ýãÿxýúõ{öìIsÂÙì!ÿXàøñÕ¯~uÖ¬YŒ"¥W„C®€G޹lÙ²CÕ7“É >|Ù²e#GŽLc, œ0¤ÊR/0d2™3Î8ãÙgŸ=ýôÓ£H+àf<ð@âõêêê£= Ð8„©j=À“&Mzá…º8gΜ)S¦¤3Ð!Ø‚†Tµà?üáUUUuuuÍW^z饛o¾ùé§ŸNs0 ˜c€Tµà¡C‡Þ{u••»víÊd2k×®½òÊ+çÌ™3`À€T'Û¸qceeeAAAAAAeeå¦M›sãì'¤:¼¤ªM¿ «¼¼ü¦›n=zô–-[.¿üòxà¼óÎKu¬;w6¬¤¤¤®®®®®®¤¤¤¬¬l÷î݇ù”Æÿ•êxp<° ©j믢üáXZZ:hР‰'–——§:S&“y衇† 2qâÄÞ½{÷îÝ{âĉƒž1cFÚ 4s RõéNW·Ûÿˆ‡ ö³Ÿýì[ßúVó•¿þõ¯¿úÕ¯-Z”xû£{LÜ!A&“ÉÏÏ÷ÝwO<ñÄèA RÀ!}òYÕl6›——×>ϳ®^½º¸¸¸å•Aƒ­Y³æ0ŸròÉ'çåårÊ)W_}õÚµkÓ› ŽaAªàÆ6Ho¬÷ßÿ Wz8餓êëëuûŠŠŠ'Ÿ|rÇŽK—.---½è¢‹þùϦ7‚TuнÖ.]ºìÚµ+//¯ùJCCC=öîÝÛ–O¿ÿþûçÎûÌ3Ïþf“&Mš}ú׿þõË/¿|È!¯¿þzc•——×ÔÔ´¼RSSSQQÑÆOŸ={öù矟Â\p¼°†´µ²µýî»ï>þøãÏ=÷Ü«¯¾úî»ïf2™¾}û6ýZŒ+¯¼ò¤“NJi¬;v3fìØ±™Lfúôé<òHmmm~~þÿÍÝbS¾¬¬lìØ±\pÁI'´yóæ'žx¢ººúÙgŸ-))9²G÷cH°}ûö¢¢¢>ø z–^:ni6lØ0a„¦ü-++›2eJQQQóG[þ‰,^¼øÞ{ï}á…¶oß^XX8lذ‰'žuÖYGüÐ õõõýû÷ß¶m[ô ìx p †­[·ž}öÙÿýï£`‘¯œÉdÞ|óͪªª~ýúåååõëׯªªjݺuiLtaAÚZðªU«.¸à‚þýû¿øâ‹~øá‹/¾xÆg :tõêÕí0Â!,H[ë+ëK/½ô²Ë.»é¦›Z^œ:uê3Ï<“«/ l Ö¯__VVf¯ "ŸÎÏÏ_·n]aaaË‹ï¼óÎé§ŸÞô Á¹G€áÍ7ß>|øo¼=‹|¸k×®‰×»wï~´‡: / ik=À#FŒ˜={öAgÍšUYY™ÎH@<†´µþ 6uêÔýèGÛ·o¿êª«úõë÷öÛo?öØc¯½öÚŒ3Úa> Äþýû‚Tµ¾µÝ–×ýͱgL= Ë—/¿þúë—-[=K¯­¯€¥ŽCVÀ¶6ý"àxã9`H› Ò&À@[Ð6XCÚHàÅ m $ðb 6Ø‚†´ 0À!,H› ¬€!m $p Ò&À@‡° m $° i` CX6XCÚHà¤M€aAÚH` Ò&À@‡° m $°†´ 0À!,H› lACÚHà4¤M€ž†´ 0À4¤M€VÀ60¤M€¶ !m $°†´ 0À Ò&À@+`H› Ò&À@[Ð6XCÚHàÕ m $ðb 6Ø‚†´ 0À!,H› ¬€!m $p Ò&À@‡° m $° i` CX6XCÚHà¤M€aAÚH` Ò&À@‡° m $°†´ 0À!,H› ‚´ 0À4¤M€aAÚH` i` CÚH` Òæ¸Ûºuk&“Éf³Ñƒ@¤l6+Àªlcccô N6ë€L&Í"Ø‚€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ 0` À@€ €@€ äH€7nÜXYYYPPPPPPYY¹iÓ¦è‰àpr!À;wî6lXIII]]]]]]IIIYYÙîÝ»£ç€CÊ666FÏðYUWW/_¾üÑGm¾rÍ5× }¢æHÓ 8°¶¶¶å••+W0 j€ô0HyyyMMMË+555Qó¤ÇÓût ;vì(..3fÌØ±c3™ÌôéÓyä‘ÚÚÚüüüèÑ †CX9Ì ˜¤gÏž‹/^ºtiQQQQQѲeË-Z¤¾‡²ÿßAo“Küß X@€ 0` À@€ €@€ 0` À@€ €ÿ#›ÍFÇ€ 8œW^yåä“O~à¢\sBô@ÇõÔSOÝpà ³gϾð £g\#À@²ßÿþ÷Ó¦M{á…ŠŠŠ¢g$À@‚»îºkéÒ¥Ï?ÿ|~~~ô,›²Ñ3H6›ýøãûõë·råÊSN9%zÈYaËËËûõ¯}á…®]»6zÈYVÀÀÿÈfÿ§žzjìØ±O<ñÄ\=ä +` Yyyù¬Y³FŽ9gΜèY 9„ÒСC,X0|øðÍ›7ßrË-Ñã@N± lA@€ 0`ðÿáEø¯«œ<IEND®B`‚gsl/doc/images/nlfit3.png0000664000175000017500000102304214057135461013646 0ustar eddedd‰PNG  IHDR X'bKGDÿÿÿ ½§“ IDATxœìw|Åú‡ŸSÒIHè%”Ы4é‚TQšH‘&E@@½ ‚HGzGz“ÞQjè%´PÓ+éí$§Íïx¹ádÏIð‡âõÎóɰóîì;³»³ß}çÝ9*!‰D"‘H$’W‡úu; ‘H$‰DòOC ,‰D"‘H$’WŒX‰D"‘H$¯)°$‰D"‘H^1R`I$‰D"‘¼b¤À’H$‰D"yÅH%‘H$‰DòŠ‘K"‘H$‰ä#–D"‘H$É+F ,‰D"‘H$’WŒX‰D"‘H$¯)°$‰D"‘H^1R`I$‰D"‘¼b¤À’H$‰D"yÅH%‘H$‰DòŠ‘K"‘H$‰ä#–D"‘H$É+F ,‰D"‘H$’WŒX‰D"‘H$¯)°$‰D"‘H^1R`I$‰D"‘¼b¤À’H$‰D"yÅH%ù_G¥R}ðÁŠE=zôP©TÏÍòYÛóáOªùÏð$Ÿõzn0pàÀìªrîXºté5kÖ¤¦¦õèÑcâĉ/Ûí6ÌòìÅŽÊgå!!!ÅŠ›2eÊÓ§O333/\¸Ð¹sgkÕ>ßâïïïáá±iÓ¦ØØØ˜˜˜7*Tèòåˬ9‰äïƒX’ÿu²u÷ïß/Q¢„^¯BèõúÒ¥K‡…… +ë믿ÎYÃÁƒ4hÛì¹~Bœ?ÞÅÅ%ç–sçÎÕªUËb¯œlذ¡lÙ²/å@ïÞ½g̘‘³ô»ï¾{)e£ò¾}ûþøãÏ‹~ùå—:X«97U«V}.§€¹sç*îûœ„„__ßü8–ÏÎQôÓÆ_ªòd‹ò<’sKçÎúé§œE‹-êÚµëkŽD"ùû –äçºvíÚmذA±~ýúîÝ»[”æüÇ“'OrÖP¨P¡ÜfÙ-›äääÜ[ (`±×s>\´hÑäöÓ¶>>>OŸ>ÍYúäÉ“—X6*/W®ÜÇs/^räÈĉoÞ¼Y«V­ 4oÞ>>±±±9·ÄÆÆ)R$?G”H$gä­+‘üŽJ¥=zô¬Y³FŽùº|ˆŒŒl×®Ý?þئM›?VC«V­¶oßžsË–-[¬;::ZD¤lÓ²e˽{÷þ1Ç€Û·o-ZÔ†N§Ë{[»ví>Ö£bÅŠþþþ9·¬Y³&Ÿû¶k×nݺuŠE6ú¹N:û÷ïϹeß¾}uêÔÉçA%Éß—?y R"ù»cû.@)ë™ÙØòüÕ«WŸ7o^>=Q,}ðàÏ’%Kbbbbbb~úé§>}úXkcÕªU÷ìÙc4m8™sã;wŠ-ºnݺ¸¸¸´´´'NØHrÏùßøøøì¬ç‰íŠêÝ»wŸ>}¢¢¢bbbfϞݽ{÷ÿ·[Û¨X´eË–òåËŸ9s&==ýñãÇ'N:th>+þaPPPff¦¿¿ÿó¯môóùóç *”ýallì¦M›<<<.]ºôÇš#‘Hþ>ÈUò¿ÎßJ`Ùx Ê¿†¸qãFëÖ­œœ<<<†ëàà ØºÃ‡W¨P!{mªüWÞ¾}{777''§–-[ž8qB±f‹&*T¨aÆ9×P}<<<ÜÝݘššú ,!Ä¢E‹*T¨`ggW²dÉ)S¦d¯U–Ïʃ‚‚úôéS¸pa;;»Zµj=_#Þv?ïÙ³§^½zNNNNNNõêÕÛ»w¯mÏ¥À’Hþ+É’É?œãÇ?þæÍ›¯Û‰D"ùBæ`I$ÿ4:wî|öìÙ”””¸¸¸Ý»w4hìØ±¯Û)‰D"ùßBF°$’»víš;wîíÛ·M&SµjÕFõᇾn§$‰ä )°$‰D"‘H^1rŠP"‘H$‰ä#–D"‘H$É+F ,‰D"‘H$’WŒX‰D"‘H$¯)°$‰D"‘H^1R`I$‰D"‘¼b¤À’H$‰D"yÅH%‘H$‰DòŠ‘K"‘H$‰ä#–D"‘H$É+F ,‰D"‘H$’WŒX‰D"‘H$¯˜¿‘Àº~ýúˆ#ÜÝÝU*UîRU.þz%‰D"‘üyØ~Ö‡††vëÖ­@ èÖ­[XXXþKÿzþF«oß¾ÞÞÞçÏŸ·f ^ä¯ôM"‘H$É_€µg}ZZÚ[o½U§N:uê´jÕ*###?¥¯ÕßP©¨T ^)n”H$‰DòÁƳ~Þ¼y×®]ûù矟oùðÃëׯ?zôè11ÑÃÃ#§±§§gBBB~J_âïG~¼Z²dIÛ¶mó4Óh4¯³s%‰D"ùËy©îßÁ kä|ÖÛÙÙéõúœ¥z½ÞÞÞ>?¥¯…¿cæx~òÙcbbÊ•+—––Ç‹IžU­_8`ÀÉž=+lÙÒæ¥ýX³æþ A§*W.tçN/µ:¥(48~ùrš5õ,›»T*W¾øàAÆ®]Õ»v-lQº}{òÒ¥ñ:ùÂ…òêã˜S§¦>œYµªÝªUsnOOÇ××Ë‘#Ú¶m_ðmþRÆ~Ie?ΣվP[«¾œògx–L±ôpÈ Ví£vEüWâ`ÿB‘Y0t«÷GÔªRüÜL\Z×sÛ¯ÐÂY=¨§Ð)™ŒÞËÆëØkXÚ•o(›ý^'|çÏ·çP±ËÛÒ¢¤-ûln&ðã6=¨éÁìz¼],ï½®$1ë ;£š{2«2õÝmÙ§šøð1û©æŒ–¡Y«ÆÇuô!ÆD-ºº0Á{+—ÒŒ,é‰2SFÍ'Zj•Í¢áCŒg Q ÑÔÂêÅ™„ùs’O¥‹ˆt.^ìœ>ŵ(/ñª³™¸›düFJf4˜¨Ám¡qûuIùŸ{ª<к É¬‚0ô@eœÔ€QˆÅƒAÀ Ò#1”Çá!™@9žå‹CÜzáY‡|z•€XGú9ôÉZá0“‚Ŭ´KÀ&Ìs0Ýg˜…f¨•é‚“Fè7ÓTË{úÚ)ؘ`V"ß&RËžd3{ŠPÙ^ÁLÀæg|L²‰Âvl,G[ëÕ¯ñÌ~‘X€Á¥XVœãMî‘óH8Ÿ^âa À¨Ê|_W%WsœÌìË,¹ PÍ‹}])[0]nEÒoÎv\à§. ®oËx鯌ÚD/ºÖeÖûÊ6ñ©4Ÿˆ§ G§`—ë I v¢â˜>ŒIý-K©×…*åY<…Æu^(JM£Á[øøðñzv{¡((HÔ¬i¬[Wµd‰¦rå:uJ¨QÃîêU/»;pëÖ¤^½B5r>wÎrL‚F®^º”²iSÕÞ½}r732RW¦Ì 8øbÅœ^ê›0•J5#Ÿ¦/É—ðÿ9Ÿõ>>>>>ÿéèèèÚµkGEEåYúZø¯™"´àUéÂêÕ=jÖô2™þ.*³o_¿rå xy98œ§ñ'ŸT¨PÁõøñhÅR•ŠO>)Q©’˱cñ¹K»v-ippP;f)RGŒp6=~l¼{÷…9&MÒ´o¯Ú°Á2ü=båÊRØ“]û-´è ¸ñà)×ïZÍMùxdæÏ–Ej³?SºFÍÇ?aÎu~T*~ʧos;œùÍJJ^GV½ÏøædYs…I‡É´>車5âL/ªy–Æ„ÓtÚMX^³!µ<ØÐ”í-ñu#ÅÀÔ›4:Àù¼&8ê¹³¥Ëkàã€ÎÄ[tºÂë»iØëÇ>?|츕Áç¡|ô„+myÛ‰{¥èF–àhUÂ8­S¶üÒcÎÔÓlf–ž~ÊÓfEà8ÚMhCà ¢?¦¯1%YqÕõ* ÁÓàÍ€ØCæÇ$}LâMò;ÁÙ¯Y”º@ÕÍ”Ÿ@Ñ.xÔÄÙÇŒ±G²‚.}°g!Ñ ˆOÈvâ÷¸Œ˜eÄœ#u.Qß¾Žg+‰ÝGâ-2ÂÑ«Àõ[†Ï§=I•=øM¤X>ÕU¦Y¤6 æºDL ±ßçF<¬©«'ˆö7`.€º ªËhÕU&ŒÏdFfhX餬®B ´ˆà¨ƒ …×K*««ï=`õ3*;Óћխª«d#0î.‡cy¿(gÞdE l¼Í=I¥ãq~¸Mh: pðm6ÌC]éŒ|{ž77q2”ÂN|ó&×úå¡®LffŸ¦×>#AÇåQy¨«™‡Øv³àÃFVÕ•NOŸ‚ÄtöLVPW&3Ÿüˆ‡­ë1±o®RSS²(ëZª+`á2ÜÜÈ̤GË¢åË;¾ªÒ¥Uê Ø±Cçç§8ÐÉ.W8R®œÃ Aê\˹sÉ®®šwßõzÿ}oÅ–nÝZ»¶{×®%ŠsR4øï%ç³¾jÕª·nÝÊYP¥J•ü”¾^_ðÌ*ùñjÁ‚mÚ´ùÿW•™i´³[¢Ñü”žnȯ2K–܆Åuën3›ó°ÌÌ4.¼¶ž?ÿLÑ 5ÕèåuNÞ¼™š»tΜX¸õöÛOr ‘ýû'ZlÏÈ>>zÐ9béÜîý¢PiQ²ŠÈÐYÖ6k…¨ØZÔ}O–Eï mc¡ySœ¹¡à?® ÷¼#&mPlŸÐÅÈŸ…ë0ñ[ ²M6[oŠ2ß Ÿ©¢ö|ñ$Þ–¥BoËo çy‚Y¢À|±&@ó:BQ¬z ¼7 ÖûubÈ9ñ8%ï½’ bÞá|H°_¸_ÝÉ6¯DỈŽ—D“»ÂãŠX#l¸v:C¼.x,ꆉÏâD†Sƒ‹²„g² IIÛõÊfBˆ!f £«Ðס_(L¹NéžÃL‘RJD‘ÅDäç"ñ˜Ð™lµÏ‘úäá›Úö[UÐÏoÏÉzô£ˆø\/Ñ Dä½DDŸÉ߈°¯Dè<¹LDïñDJÈ4Øê$[Üú‘"±”ˆì,⊉ÈÏEÒy‘eÃ>Cˆo„±†0Ø }aØ"¬¶õ²QTN$‰Æibn–°ÖÛS…W¨*|CÄñt«ÇÝ› <¯üE‘«b§ÍË{_´hpN8ŽÅ‚§Bo¥c²GÎ £˜{G8¬¬›Äš‡BŸ“·ï±èú‹`–PÍ_ü&¢ÒòÞåi¼h¶T4ùI¨¾SŽ‹tëW "Ë ¬¦ í ±å¢U3ƒQtœ"xGT."¬ôÉ…g[Qò=­d0gµ œ(ÿ–HÉ5|†„ G¡r—¯Y™íìôZ­þÑ#ËÎ=w. "=<¢SS-‹ÎŸO‡[… ßÕ)ݽzÝ“ß|£0V !ŒFsÉ’û`ë©S1Ù[^êÉÌøsþ^‰ÀÈù¬Ÿ3gNŸ>}r–öéÓgþüùù)}-üw¬·ÞzkÇŽQQQz½þéÓ§Ó§O÷òòºv-×¥ªrS£Æ­vÉ•+1ÐÝWNg,Zt‹ËòãÇCó4ž4)¶Žiµ+F~ Rüâ‹G¹‹..·=<îfZ=}jÔj#‹‹ µùgÏ6¾{wËí&“¨Û\Øy‰…Ë,”–!Ê4ŽUĪm ~³RÐP¼=Z$æÅ€c7„ö=Ñl‚ØrF¹F“è¿J0P´#ŽÞV¶ÉæF¤(÷ƒ`¼h¶Dì»gË2›ðTÑ÷ (½\8ÎݧBòÞE‘¬_^­Ö¿]âeý¹øœ0èC´¸ Ø/:\«C…ɦ$x ï ü…Ê_ô~(nZ?D¦YLŽe‚E×(q*êå#“h•&Ho§‰þé"ʺ÷„h- vBo'ôƒ„ñ¤ùòüî Æi"¥žˆñQEEä@‘°J¤EY ¤§g|7gK푳 _¡ýhkÁ+j}2ë»9[2rËùWA¦0ï½D|7_TD–‘ŸŠ¤»Âæc_ˆCÂü¾0Ú }]a.Œ V+“u¢tŠ ITN—­tC‚Q ‹ŽOÅÀgÅ,Ñ F<N—D½Û¢Í=n]þ…ëÄÀ›Âþ `¿xSÜSxçúÀ/!¢ËIá´^”Ú&úž1ùèé{ñ¢×~a?G8Ìm·‹sáyïb6‹¥þ¢ÞBÁxQbšøõqö1ÉbÀjÁ@Qh¤8vǪ™É,Ưµ?^½E 7_ÞíE‰wÅi¥·»àpQ¹­ œ8ø«B阉Bå.zV(úòK£J¥ï×Oá„ ’‘_­ðâ5rd8Üš4)*wQLLVñâç4šS¡¡Êçàðá('§~~Ÿ¿“¿¬ÀšûçüýeûYŸ’’R¶lÙéÓ§'$$$$$L›6-{ö0?¥¯…¿‘À²`;yòd—.]<==µZmñâÅûöíh3^‘£ÎgÒÇÓ}ú¬å^ ÍmÌ‚u‚ghÕ|^ÏÞ °•Kë9«.óÙ~2+ÀŠnt¬œÇ.ûnÐ{e½ðteÛp|¬ä1y#ßoÇÙ#ShZUÁ@—E‹O¸|—ÎÍØý¹ØvùV†}EQoâUèÅöšyx¿ ßN´ÜqüxÓœ9æÔkÖXžÝ!C’W­Ê9ÒeÑ"K×'OŽúþûg|à¾uk)‹"³Y”/1(HwøpÍví} ,‰¶NqöÅ. S(¦ Øni×1èn¨ÝQ:]f³©'†»Dd«+ SãYËÁ!Sûû%b¶ói¢zðÕ¥ô‘ªØåÎa¶‰áa=éÑ}EòYôhŒˆž8OÄm,n5°³·®®2`HG(P IDAT>æÞMð ú¢^ö-TŠWD€‰w2Øjà m´ìv¦Œ’Ý==]b¸eÀÆdqa<•DصtÚÜçt*4 ña…/…•D˜€•¡ô¿‰ ‚%Õù²UpÉëëÂët^Ï­(ìµt¬ÄÞÔ´ù’c|½‡O6Ѩ|Ø>w+N>_ËÉ›ódÙ'´ª©l3|ºLJú°}:Ž¹Þ”ÓëSêÕbÚXêäÒg+׳k¾eX4‹Dõ{÷Ä_˜[´PýðƒÆÝý…Ž{üØø¯¥5kæ0mš›»û ç>#ühQ¼¯¯Ã—_.QÂқÇNJhܸà¤IeTJ#Úœ9>LmÓ¦HçÎÅŸoÌσ/§qGPÿ ‡áŸ-0òDF°HK3,¸R«U§¦±·ÿ»¬›•˜˜UªÔú´4ÃÔªåeÛ¸a×.ů\Yoð`_Eƒ5.ß¾¶ukÕ>°üÄ÷Ò¥ôþýß=3††VvqyáοvÍЬY¼ÁÁÞƒÂêÕ¦ pó¦Öâ›—¯§sê4NNœÈõ?ïeèd ºqç0ž¹>q6“å¿P¾××ã–kÍÈ¢ß\ÎÝ£pANÏÀÃM¹+¶]æÃÍôoÌŠþØ[œè Ì=Ã×Ç‚:ÅÙÜ?˵,¸˒묺 PɃ[ÒÁ×fˆãß ç‹«ÜNÄËßL­E[¥P\N¢³˜úe!¨èÊÌJt.bÕØ ˜Å”ptfª93©8==•3òd¦'iÄ[ÃB/>pU®3I0!“•zhˆ,v¤½õgçø ÓaÌEP¥"Æ …ÚJÅ/ŠéY;ɸ‰Á•²¥Ñ¼…cÄÌ_Š< ®®¬a§ Д-=uBŸ<•Dÿ+†Ëè͈óèŠhã0·Ç± Ž òˆ0èaæmˆÓ˜÷POCígå*Ð ¦e±Ù@°™ŠjV9ÑTéš4ÃÂd&Æ“%híÄtê+Å™Œ‚L‹ Š3fÁÏå©nEjû„ÐpLfö²¡Y –jQ³ÅxÛ‰XRiE¨RÃÝU,wâ‚ dfRÃtDXY¢Úv ù m9H„ã˜{`œƒ9¯5´)…fÎðºŽÏ¸·Á¡êDÄÒ/ÜO*¨Íû³sWÓ¡û–ëy ˆÁtýNt3ILJžU$ú+Rz–¬L•ÑŽÀõ ÞÄg6ßÌK]a#æ*·aŽC¼ê(Úh¬©«sFj§qÎDaŸ9pÓUY]Ey/Š#èC °§ˆ²º É¢Å=N¥`¼ëÎåjÊêJÀŠPšùó4ƒ"ì¬Ëœ*VÕ•ÑÌ‚{´9ÊÝD Ù3¿?7ÏC]¥øö<µÖq4ˆ2™Ð€{åK]í¿Gµ9Da§atnŽÍ[]~@ýiD%ñ0šß&ä¡®>YÆÝPœØh]]í=ñ˸8²z’‚ºVlC£¡TQæMV(µ€ ¾´lª ®®^ññ¢xqÕ¤I–Qx¸)(ÈT¢„z‹"!8z4µzuÇÑ£Þ¢ïßOѶ­Ç€E›sèPdÅŠ® zæTW’¿2‚Ыױ­[­]ÛjÀ€JWù$$$µB…ŸG>,]ÚJăÁ\ºô¨(¿ë† î´´4S±bçRSMwï6¨RÅò&ß¹3ùý÷C*Ur¸wÏÏ"}ꔾU«xoouP·³ó ekÖ˜ 2Uª¤ºsGk±`þ’U|ò9~¸}Á2Šþ$”ÉÐqx íšYúù „º©]‘ïðÑ;ܾ}»zõË"xk2ÂéXÂûÙÜ cøÆàî̾ÑT±9‘¦gþYþu !¨V„•Ýi¨4òZ`0³õ>_œ&:µŠÕø¼>•<òÞ1ËÄÚÇ|ubÎÜM¢[if¾AY[§³`Scﯧ¸#•âËr8Y×›âø4˜x#µ\âÍ0å);ÓO„‘jæzñ‘›²R0ÂZ_êðR&oÏ$Gl$¡C¬Æ´]˜ *•'LBó!êBVŒ…0«^œX3C F²ÆöÝi´súÊ1<;ãJwý£ºâ*ƒ®ýÆNQ‡cÌ@D}ƒQ »@ €/š§˜ì 1•±«‹]}ì½òý†i€m˜g`.§o š€ú]ëhÙÁ¿ &î˜h¨e£rư=áÏH0Ó‰qî¼c%"µ#žáA·'ÙÄúr4·’‘É [}0®_•ÇÝzÐñRƒÎr7 `R ÆVÅëßÂîܹsMš4±°°é›ïsø)*W±oP,QÊû±Ì>ÍÚ+ïUef‡¼£Å&3Óösüçñþ,èCQëËh™Ì ]Ä0îsx Í”ò®€[h:ŒÔ Œetƒ›÷iØŠe˜;™Ö-KïܧvS€g¨–kq¥·ß6ž8!&MROŸny¦?ÿ?@¿­¤t!æ¿Ëî~y««ðDú­dÚ~î„ó}7¶ ³¥®tzF,aão<‰äØwVÕUÄ3þµ’:~ôk§¬®t™L_B–ž¦õÔ•,YE…r ¤ ®Nž¢P!>ÿÜòL'$˜׫Tä_;v$«TŒå•[]¥§›ÎžM†/ž{G ((íîÝ''Mß¾e”Ûœoìþœ?É?9‚uâDÌÛo5êÚÂ…¹Vá}‘Ó§#:v[Éñ›toÌ–ñh­Ä2ôŒÛƦ T*Ê[Uø¾[»™F~ºÀÖ›\ ÇÛ•…ïÑ£†r¦¼Ñé|{ž+Ñ„¥bt¯È´&yH¥òõ â29A!{&×dTådöçø'òãSöDQÅrÎ,¨JëÚÀÚX$QË™Þ^Œ-J®aüw¶¥ós2t¸ªùÞƒ­þ´Í#kôœ1#xGËR'JØtøb¦«‹¨†Ê£îŒ:»þ“÷wn¸0»ÿ›_¼U¹›ÅŽ©I SÇ}çí\þ™ÖÖLRvKmÔØÐSލQ¹ òFí¯ì8«„"6bž9ª¡* îñoÏylfŒŽhÁ-í˜êHe+s4ƒÁÏ7Ò܉ž® ³¢™~MaðS´PÜ=ùHyo¢²À\´ .ÉÄò±>ZgèÂÓ©ëIO_FUÎcf4^ÇÔ âi|éîGߪy÷¬Y°æ {ïrà>~…iQŽémñTЖl½ÄòÓüÈ»µù´5oÙüº0!•ÎÓ9{—¶µù®/õ*(›¥fÐl·Ó¯=Ë&(G¾ÇLcÁ:ºµcã8åA×mfàZ4å—M|ñd™Íôêe cǪ‡µ<ßß~›:ujÚ!ÎË—[ŠÄ{÷2«U{X¥ŠãÙ³å ²<«VEس§÷–-Õõå—³g~ö™ß¬Y–Éü/ÁZ›OÓ—d Œ`½nþD\]µÀÁƒyÿQ:Þ™™Æ7â²²òñ‹ö!U«z8:jΜ‰X·.L¬2e\j×vÏÊ2/ZôHÑ re—*U\RSMk×*tHÏžîZ-ǧX†nÚ·w(ZTbڱò¨KuéÒªÔT±m›e«]kêÕ¡z~˜ky,­†ñC8{…e›9q^ÁÕɨUІÍĨ&©VŠPÈ•çù|µÂédãlÏ’™Þk!Ì<İõ$ZOɵŒkÆæÞ¼]ƒ‰á{豉¶vɦˆ ËÚ°­ýª”ÉŠ[ø­fÑuÒôyìXÖŸ›1§>K’¨ç§@šdo¨­]b[æVÅQ;ªžfYF+yQ]=ØPžÞd˜ù"”N¸i¥>pa•}ÝH3³+nÑܳâ|;-?;3ÆgŒôÓ±XO†õQôMT¿ =„f ªÇˆ“ˆ^˜ú`œ‡9±÷Æj`÷õ•:ý¢§úÌÌÍ3'ož4OU •mu$ÙW˜äQÄ%¡)oâP»JhK¢ùÃêÊ ÇŸbòÃx ‘ ÍP}‡fÚ^ÖÕU&Ì×S5•ƒFŒð“Ûœ•Õ•N0%A±„iäÈŠÂÊê*ÓÌ÷´¾ÇÓLª9³ÊתºÚC³ ¤PPËÜ*̯jU]Ed0ò"ÝN¡QQÛ“ù¼š-uel¼G¹•,¼NH ß7cÓ;ôˇººJçu ÙÉÉÇt®ÊÖ>,ëš·ºŠOcÌz-çv8½²z`ê*$–NS±×RÚ›ùC­ª+£‰gróK2÷SeuuÒŸ…ë±·cÒpu•Ȥ)ƒ>´TWÀöíæíÛÍz=ýúYžïÔT±Ö›oÚ÷í«JøÓOñBЬ™Knu,_tè ü…“Ñ(öï4™D×®y},#y}ü“#X&“ÐjÕ*8x°Y… 6“\ G£$­YÓ²n]+ÃØkâÈ‘Ðï¿¿“~÷no­Ö– ö÷ûæ›»¦“'[88(X:ÿÃ!qq†Û·ëkr-n3eJÌùóé5k:Ξm™²´c‡nñâŒøxs@@a‹o6Ïše~ü˜À@­Ë‹èÝûŒžÀÕ›œÜ˹rNç®aÏ1‚à 8H¡\ñÿˆgô›JrRrã:ŒUnï凌ZF–‘*%Ùð™Õ8pø6c¶”AãrŒï@£rV-³‚]·ùt^.ÜabK>mBá|¼|wã˜x†¸ .FáíÌ— ^+_¦Á‘–’¤çt4­‹1·>Õ­e-Å÷¹—†2M,¯A#ëö§SúW fxÇÉÅq´r)Î`d.*øÎƒ1­½BÌLËⲉÛ&Jª™ëHW»½¹Sèâ`æÝ˜á ¢î•¥6eu¬Ñ¯G½O ú¬ý §¦=J¹ïÜʤ°.„2ꌀ3¥B·_¢P^§Ö&?cÞˆ(±Œøõ0Ôoä¥(ö“II5Q‚j~tÂÛÊ—³èC‘æN´rbœ»r¤ð¾ŽAO‰1দ;ß•ÄN©B‰‰, ¢…'¾Î|çgu+??aÔE\´˜Óê2 ¼­®nß¾à^}ôIž&SÕ 7;´¢J>©#S˜rœ[‘ÌD§2£=}ëä+ ¼÷‹NŽ«;2¤Y{ݦÃÜqsâ—¯(j%ýQFÌæZ ö¬ÿ_¥Ù¶°(jw¢šZ2n°‚ÁÇc8sžºµÙ¸ÜÒ+½žªUEŠ0l˜ºOË›jæÌ´Õ«uÛ¯]k9Æ%$˜Z´xR²¤öÇ‹U®lyÚ.]JéÞývn»vUsTºW÷ïøôÓM›z¯_¯°ÜËF°ÖçÓô%é/#X¯Û?‘l ñèQÚÑ£¶r8²ñõ- ÕªnÞŒûóýz9Ú¶-§{ø0yçÎ'¶-5òŠ‹Ë:þÙÞ½ÊQ—ví '>¤`à™UxÂäq ^ýô“ùñc‘œLÏž–Óôt1wnú£GÆ>}NÌâÅq·og ¡Ê­®€%KÂÃóªWwQTWÀªUAAAé5jØüí|cÿçüIþù 6j4L£¡cÇ<–ë J½?ÑÕÕ®uë’oùD¥ÂÞ^™£{ÿ}……R,xö,+1Qß¹³BÜ8{º¤$cR’ñÝw-#Ï j?Ö»ºª“’L-Z¼¼ªVco¯ŠŽ6›>øÀÉb”©PAuö¬HH S'µó‹ù@ê³s/^ž˜ÌÔy1O@¥¢y6ïý.ÎTÎz(áMÅRœºJh %½© tZŠ{Ò¦6»/àæÄÉ›´k‹Mº;ó^T*~ $!k!Ô+‹«­¬6´´­HËròuÿà2bæÏ0C<@\A8 ê„zš©hš ²² 73RÇ×YÖ"˜áÈR'JZyc½œE»H’ö*z»±Õ‡âJj¼‘ÁO¸Æ“Lúz±¾e•:à øîãï‘` …'›kÓÑÇÊšg‚µézê÷ìÃù ø¶¶­!ЙîOŸƒ¤5%]Z“-ïà—×·±B°ó6ב’EPíýØÿïT&?« n¼À·{y–JB:;°°…lö»ÌÚÅŒ]¨ {~‡³õ»xö&Ž^$9MShVKÙæ›„FŠ#kpÉ5§×3l %ŠÓ§ïw¶,MIaêT³ƒ³fiüü,ÏÀŠÏž™Ë•ÓN™b9’•%fÏ~æà þþû"eÊXž„ÃêÕQŽŽê9s**¤,¥Û²%ÔÙY;wn-…+éeý“RwÉ…FÿÙ<•J¥RmurÒ$$tUœ5{Î¥K1 î¬RÅãîÝ^™{ù$+ËTªÔúØX¿·† ­¯5 ÉɆâÅ÷ed;T¬¨0+š”d,Uê\jª9  ~õê–ŸdÖ¬ùÐÍMV¹`ÁFǬ,Q®Ü³ˆÓ¾}…:u²õ;t0>,&NTϘa9¦îÜËûýñòäÁUËlw`Ó^|‡;ñQJ6øn-ÿZA¥2웥¬±€€`>˜‰Þ@q/öMA›ô±;LÝǵÜYÑŸÎy|ÿð;'±ú2[o4)ÃÜw©—¿Ì³`÷C&žÁÝ‘kÑ4,Æ´&´Êkùàa Óo’Îéh*`~:Ø<âT&ÜçP,@÷¢,ªf5'ËÌ‚hFaÀωU¾4±2ž)X’̤ª9n`–'ý¬Ï´gÖ虥']$xߎ©ŽT´rÏ=‰½óÝþÁQ(Ò©U!ÊñíÇoØh½9UeŒsÂ4CW,MhTƯÃSL™K5>Mýöyºþ¢.æ^fZ—Í+‰R‘ˆ«ˆ‡póUDTW@ETQ5GÝ •MÉý;ñ‚Yø¹`ÂEÅG†ÚáfEg ¦&²9•#µXîE=+òh=%RO³Œ)J+ZüA#ns;•D3*óiYåøð4•Áçù-Šš4öajm¯O±|L‹û‡°ì"®4-Ëœw¨—¿WÔà8†màè¼ÜèP))“Ç‚Êd글­gШY8”álº6bübâ’Ù:•÷­, õëEZ÷C¥â·M4Qº¿ŸÃäï”WœfÌ0OšdjÞ\õÛo–*'+Køú>‹Œ4<èÑ¡ƒe¿¯_Ÿ8`@XíÚNׯ+$ŽÍ›öÙgÚ·÷ëkáaGœž7ùÙJz¾ƒš/Š±ÓªN<Ð1)Œ1Ád(¥É;ªøÌ[%q†_&0<Žp+³Î*F:pÝ•þöØÃ6Ÿé¨ãQ®šbÓ¥y¢;Ÿ75 ÷;_p‚ u¥FñÚÝþúznÑ©õÉv&}}òÁ,;³_ÙûsúìùtïúA—²ÿftÛ¦Wkâà âb+æŸ0}Œ©%Æ·1½‡©;¦­˜Ï t`£PA{íL4ò¡®R3³ø0ƒ9YÄúÛèÊ8{«êꌎîÑüHa-ãÝñ/®¬®2Í|ʸP"õ4uc}9«êj]#ïr*žzîœkÌç¾ÊêÊ$XñÁçù5Š"ÎL­Ã↶ÔUH Ý÷2ò8‡žÒÃó}˜Û2ouõ$ž?3x'ÛoñF Ö}ÀéaùRWz#31xGïàéÊœX?8ouGï‰NÄ͉ݓÑÑ–ºúù(³7ãêÄO㬪«ðhf­àÍ:|7VY]=~Êžƒ¨T,« ®¢£Ù»×ܨ+2ÐÌ IDAT‘ê‡ýæÍ:½^Ô¬i×¾½B¿:”¢V3j”´«üúk¢Z­úøcåÕ„àìÙ8µZ5`@冽<Ú?çOòÏ`M™rçÛoïŒWiölå·ç´o¿ÿȑЃßéÐ!†¿–°°´ÁƒOݺwýúÅlŽ|·n%5kvR£Q‡…uRŒ?xÞ¨Ñ5ƒA„‡+¬×päHj·n!>>ÚGü,áu:Ñ¢EüåˆC‡JãœXduqÑX>[Íî t¬ÇÜATT~Gž`ï ®ãæÀÒ~¼geég R³Xy‰\ E£f\SF5¡Dþ!Òô,¼Žž¢‚î~|ߌòJëPäDofÁ]ö†r>g-_Õd\5[K9Dd2å!kÂ0 ºe^«¿­Lçç8žfQΑU¾´°²X€€)lK%ÒD˜‘ñî|Yë·3óõlIÑE88i`¬}í¨ñïëbÿá™»–¢Ìi—^Yj«³ ¡5ÿ½ó «êÚ¾þïQ@@TDŠ¢Ø{ÇÞÅÞ½·Ø5öØb ÆÞ{ïbAÅŽ"v@š M:œºßæÍMpŸÃñÞróÜd<~ð¹7kí½×ZcÍ5ç˜<Ï¥¡ mlùÖYü88MÍ·/8–€RÇP7{ê­*•ÅÀ`n&RǪv,¬FQýg‚jŸ°ù)ï3¨æD@yÆVE&ýWïòXDP÷c©åJs¦6ÆÚï\yÉØ=¼JÀBA¿º,èDqýe›ÅÕ§ôZAr]ë2¯7 ÎÐ.Ów–æ,&.y¨Ô4êEH(Ã{²qÒ/” àß‘ [L›À’¹"w:T(^G¥:vüôñ£vÑ"›/ÝW7nä4nQµªùíÛåÌÌ ¾ìk×>5kö¤V­"ÁÁU¿Ç®]ûجÙõڵ킃›}™«ô_ëÁ:n¤éW¢ó?¬ÿvþp4lè \¼X¸XC¥JöÀ½{úÿ{pq±²±Q|ü˜·uk¸aËÊ•m}}m?}Ríß/žîïéiéçg­Ý·O¤§-ZX—(!ŠRâÿ’ç¹x™³Úi%ÄÙÕ•Þa{,ÕŠ°¥ë*èeWû"ñ;ÉÍDJY2¯*ëëbW·ãh{” ×x™Ê¨*lÏ„j¿4@»ÒêØýßÕ,»ÎÃ8¦4âX¶4Š]E§2q?óOò*GŽŽfSÿÂÙ•FËš“ÌÙMr­«±yL!ìêä-ƯF«cJ½ì ˜ÿ#!¡¸–`Ñdvì;̵›8Ø3yŒÈoÄ;t ãÆ‰\¼gOÞ… J­VÒª•ÈsÙº5 èØÑæKvlÝ´iSL”]‘@ëÖÎúØÕ?øëà߃¥RiÛµ»õìYú½{Í]] ‰?ž;=wî}ggËS§Úüi-4·o'Lz7..ûÝ»¾&&†˜ñ±cq‘66&Ô58u*ùû³µaaµ¾t³oÛöéÈ‘ áÔ©‚¢£ÙÙBÏžŸ‚ƒÕgέ_¿àÌ=s¦öÄ ÁÛ[rôhÁÅ'7^ƒ ¾ËÜiŒ!Ò¤9«8uµ†'DBMðHƯ&7Ÿ*žløV_×ÉÎgÀj>¤ñè›G3È_¯ågèo²ù:/0•3¯#cý Ñ#ýïR™s‘w©¼M¦˜9ý«3©6†B´ÿ…ÏaïgÞñ2¢fL®Á¸ªX&~”À²g¤ªy˜L¯²¬¬³þ/ú£’±ÏIRq#•ÖÅYWrzøŒZ`e'Óxƒ‹‚À²4Óï“»œÇôTð8ŸvltÀÅàa@œŽTœ‰¼ë»vqw®[ŒQèÛ@"É43»7qÄdÛ/’õ!”ð“Oõ<ѲKÅjh!˜eJCƒ×0>…X ¦t°Å=üæ½’Ṳ̈CQJ(X醅ؘVéXüŽ•øZ#‘°ËOïKLÊgømNÄÐÔ;S6Õ5t&˜®dn0û^âQŒÔ\~ô§EiCýúŒkï˜|†ø |ÐÁêöø’;ô òÕüÄìcH¥8Ú0Ο bÿq)ôþ[á4¬H»Lî\ÈØÜ™þóiX…&U™=H¯ÙÁ³ ›MõŠ,B ±Jâ1qøÖÁÏ—qà è(bЬ™&)‰€É¼yç:/¯$é”)–]ºœËÞ¼QÖªõ®vm‹Ý»]ìí >‚„UÅŠ÷*U²Ü·¯¢³³È§“–¦êÕë® ;vÔ*QBo™Î>^žsõªHµá^½Š^;VĹgO^D„65UèØQ„­_Ÿšž®uq1ù’]Û¶}HKSÛÛ+DÙpèPì¥K‰2™Ô»ú7`úÇüûÿû2 óæÍËËÓ†…e(•:Ãb ––&wî$:9™W©âàìüóûŸ‰ÔÔü¤¤¼.] *Êd’ÔT•D"ÉÊÒøû‹ˆ H¥’Ü\J¥ËÉѵjU0ÐÒÄD’ž®Ó鄤$M›6=ø•+›?®43“x{›”*õ»ùÅÒ¥’œÂÃ…=¤|cžåˆ‰ÃÁŽ[wéÒ¾`“äršÖáÀä2är*{ÿVKÉÍ _wNß&=›ô,êé™%ûâ^‚-t¾MÛê˜Te±µ o¼IÍáUKÎ’œEÝr˜QO«„ í|ð÷ 2©„ð,¼Š¥‚Ê% ÷„Ù›ÓÓ‹r¶„§ò*´|Ö>ÂÞœ ú~eê9ÒÇd¥’œÏ®wøÙéueyYñ+!é<Ê UÅ‘Dª¡¸ØäçhÂ7ű’q< ‰„Eñ”3ÃSl—IhhNkÒuœÉ%MÃò ÜLðúýãºvåò»c›¬w MÉ.~ÒöÛx/ôjJ ù6áéeöçÛ¼E¢ÓèÔùê\?W½1@kX¤d`q74ØHèdÂ^ +p6¸ Ê£s"µ¼TÑ΂ýŽ45ïj†–ñïÙžŒ‹‚z6œñ¤¢ž·3Žî1—a.cCEú”¿a¦šq÷|‹£9‹r¡µõWúKÌaÔÖ?Æ\NE{NÐÞQõâ_‡^ŽŠï¯ÑgylÍ]—}ŒR*îG1÷k.“˜½GG3±…Q.Þ<ßncÝiróiZ™Ósð)Ì›¹î0¯’–ÁŒÌ“³úŒIôžˆµõªñØÙ°m7CÑj9}«/Öµš‰u’1c¤Mš|'Z-³ggYYI§O·òó+8}ddh×­K±´”-]êìäT`iµÂ–-är錥˖çO+W¾¶°é^±¢¡=Å×Ê4ôÉðoï?2 ÿۼϞÒèèœ2eÎXZÊSR:k8ðêί֯o8ztÁ2Ãde©]\vdd¨BC{T®l(ëæåËÌ Î[ZÊãã;ØØˆÐ„”UÉ’wt:!2²Ž‹KÁ9/>^]¶ì+­–7o<Ë–-ÈMfÏÎZ¼8»U+Óóç †²ääàá¡ÎÌdß>Y‡õ‡¼k’™ÅátÛî:΀)”sãä&|ô¾Ø‰>óhT…^Íö…2Íoü‚΋IɤSæöį¬!ãÏø”Ê ,;‡ÊÓ¿ê{b\zÃÔ3ãl$@Ë2¬i‚WaÒŽgãu‡2ÖÜúÈò¬¨Ø«þÿmKbH¥Ìx˜Î¤²,ôÒ›ÞžÇØ÷eÐØ6”ÆAÿm/ç11…pÕM‘Â{꘡ÊÏÞ±Ê-xeЉÏeëo2e†ªûªÍ£2K^Ò˜ý.'S*‘.ì¼ç?Tf7ÏtTqXMq)·5 eŒ3¥…\ozைT3ﻳª˜²´-ôÚžûÄÄÞäa%c‡;zÁÒÕŒãàÙQÙ†ž|‘‹ò ‚?Òç19XÊÙT—>îú ,ìÉèˤ+±R°¥=½ Ñ§× ìyÌϸ0¡>SálD@:Á¼Þ¤¨%V¦,èDï:F àöKàâc̬Î7Í —*³…EÛq°eÙµÕk–“Gý¤mcNl¯ýð>†JuÉÊæÐá+`õjݤIZÉ‹rùïe×®¼Ò=<ä/_:Ⱦ¸ÿòåÉÓ¦%4kfuåŠÈdtútJ‡ϪW·¾¿†h—Ÿ?Ïðõ½P¤ˆÉ‡-, ‰Œ}íáy#M¿­ÿöG„ –­­âøñx™LR­ZÑÒ¥ ¹¦rƒƒÝܬZµúË%¦¦²ÄļW¯>YZš4kfHÉÁÁôúõäìlM‰~~"‰j²—/s>|PÚÚšÔ­[p3dc#{÷N£²¶–5lXð‰U®l²iS®NGŠ’%7Î %7o’œL@€´ÀcmM±¢œ½DN.­ü1ÿb“Vٛ܃¾g8ô[Sj9s6€ú¥ aWw£éw€=y™Dÿjl à›FE²çªXu‘.rä! 9£›²5˵KÉÎgò6v_#ê#ž¥8=‡V… Ák´L\ËÑëdå²q ôGÏêtŒ_ÈǬ,9·M<ÐS£aê\”ù4¬ÇÜé"II,]ªŠb×.¹—WÁ–i4¬\™#•2mšU•*7%*•°lYRd¤zýú’åʉ<Ê5kb_¼È7ÎåË ù3¶l‰ MïÓ§tÇŽ†r¤ss5ß¿ð«Y3«Îú¯¼˜Î¸÷¼ÉÇÃŒŽŒwàEoYô–úÅ(mÎO½ú/ÓéygŸ(nÆ_&øèu鶇1!ˆl]ãG€g!½‹Ï`Áξ"-—fô¯J7=gñ Õ±ïÓ‘T†LkCYC¾ËßáÒVŸàÂcœlÞšÝ0-ì€>;Þß‘’ARk'ÑV\tóŒ[À»¨âþ5xéqf/ZÁœÅÔ«ÍÙC"E!C´Û¶é† ‘nÝ*ò¾·mË2$£IÅ¥KvbέOÄ6mjuåJÙ/爈¼òåCL^¾¬]´¨ˆÇ2?_[ªÔ©ìl̓-|} þüóËÁƒ}fμ»xqmf¿B"‘c÷õhò·÷`ý]VppJƒW}|Š„‡‹³ÏÐé;»mééÊØØ¥J:ÿ‹ M›3çÏGzŽ©VëÜÜÎ$$äݺլ~}ñóÄš5>x¹{·Oß¾"ñþþ‘7oæ¬[ç ­ÀºÌ~L®† ¶L«D?ýÇk™&„³= oI¾u¯®Ã磥&F“¤¦ˆŒen -.’óàìéÑY®ÊøÛV]ï›wÔHô¯m^±GYÅo²Â}3lJ_ôß§–Êtà-ÅCF9)¥¥¸Jpâ ÁN‚•„ßþ±<H×ñ¢u¤<Õ¢ˆ¸¡¨,ã©4’SGF;jÊŒMöÑÂÞ,vd”‡¯)«í©¡ß¯óIÊ–ÄÓȆ|;ÝÅcÚ€ˆ\f½âàdf{0ÛCoí­¯™ñ+2TìnH=ýµé_¤²ô{©êHY[6øã`pk¡Ö²í³.–‹™\ø¾µdxm,ŒC.>gËuÂx÷‘ªn¬èN#㆜ÁòcüpŒ’v”qdý*üÔ?#>™1?pâ&ÎöœXJMC™©lÚÏÈ9˜™rq kˆÛ™unÜÈž2%1>^éeúÅyÉŠÙyåÊÉΞ™/†Õž>­ëÙSºfÈV/p?n!-ç!â;Å üHž’Y#i¯GˆØ~†ŸÏpû«Æ3¡‡^³Ïx—ÀÀÕ|L':™¾aL;cƒ«R²YxŠÇ1Üy‹¹‚1͘Ù£“xTZ¶Üãê[ž&•JýÒ¬hKm㎠/¿gbjj-5œø¡ .ú‹ÕQY »C®†;I´,É–z¸ê?¿˜Ìô—È!4‹É£²>i˜Ë|òµhá§2ÔúÿcèiÐÅœý3*ä< 5k~ݪoŽÔýTZ¿Ív¾¨Qü’ÜZÕ­áxÿúŒß踭ᕎ+^h)#å¥ÀNBªPTÂ' ´”Oe¤DéÜ¥Dè¼¥¼ÔQVвªË¨'§šŒ2l¾Æ%¦ƒ£ÙÌIÃIF®@®Àübt±4tÐv&éѼȣ†Ý혠ÇqìŠcT5lÉÖ°ºõõœG§æ3ä6'bhèHU{UELH@'°õ)‚°4ÁÉ’e i[X0Û­(F'2•:n˜›0Úëu«:FQ¤çñl¼ÊO×)c‰œeÝèèg”§ö3v^eïu®<¥¶'-ª0³»Q †¡oè¿€ø*¹8wƒ®åCg2‹ªÓ®zvbyùTk„NG.ÌŸ!b ôè¡MI¡qc¾ûNdNûé§ÜÙ³³š77Ý·ÏöK¿û… YÝ»Ç4mjyð Û—s©R©ss»ãæf¶aCùêÕÅ÷:þþ×?~ÌŸ2Å«ÿÒ:ûþ}–¯ï¾ìì™™*kk£Øñ?ëÃß…`½zÝ=p fíÚ*ãÆéÛ Ì{üøÊkÖüÙILFB£Ñ¹ºîLHÈ éZ«–¡|ž¸¸\ÿQQÙqqD6ÚJ¥ÎÅåvr²úáÃÕª‰,ÝU«¾}ò$oûv— ¦¦êÊ”IÊÊîß·¯Q£àH~úT¨VM#“ñð¡Ü×·à„¢ÓѨ Á! éÏÖuâß¼Ÿ‘ßacEȼô/›Ž3j‚ÀÒQL+ì\W£eÑA6žC"Á«?ÇÝPiÇßáU3Žrâ1f&x:1º)ýëajt=ˆ<5[î±ø*%‹úŽ˜×ܨDwµŽ59ùŽÛñXš°°>cªbPÝï˜xŸT%UíïC¿rzy@†šY¯ÙøÚ;²Ü/ý»™ô F‰LÂŒ$†¤íž]#åj¤Âï²õà$yiMÒ˜%f9_RYFÿúk³¢‹»ì+bnTt›¢t<Ñ¡#C๖9„ëÈp—ñF PZJ‚K åeH\¥xH)%ÅSЇ”’ÿ–(FàX;³9—PՔɶô´2äôJÑ09š]ÉÔ³F+°C¿ã*Kˈ0öÅ qe¥6z¾¨›‰ F!åC.›êÒKÆÆû úŸ#8ŽjŽ”±eS †Éê›üp AÀÓ­40"HÈ`Ñi6_ÇTN©b mh¬þÂg¼ùÀ˜Ÿ¸н õ|X5˜²Æ Æc×é¿€2Î8Ùs`v=ÊoÑ~(înŒíǨ¾zÍf/d×l¬yxÑå;wêÔ–(!yýZnõÅQ«)_>éý{í‘#ED®oÑ"òòåìå˧L94Ý·ïcŸ>á~~VOžÔm^\\nïÞ!jµîÂ…FEŠ¢M‹=œ3çŒùª ÷`#M¿õÿöëoäþùÿ”¤Ôj… íwärÙ›7é@·nåþ„þJ%™™ÒÒ”-[J_¶±1 I±µUètBÍš"9ir¹$+K+—Krr´M›ŠÔ?³°&&j£¢”½z-°+µ°dg  /^h¾œSœœ$99XXðè#‰„zµ8užœ\J•ÀCŒ?U«ÈËwÈdì9I·ÖXê9ݨî‹#·BIË"ô ­jÚ=K¥4ö¥š;'B°2cþ>ìm¨b\®½5=kÒܵ† ωJaùyì­ñvFfÄÊm"£¶+#ê Òq÷= 9+oòò#>ŽØ”‘I¨W’ÖeIÊåQ"R ‹îR¾(åô”«*c@9¢³IÊãj"gãhäD±øk3mŠÓÌžà4ŠÈ™ù¹”:EÅHiS†;b"!éÅãNû†Ôº6ÃL¥:e3áºUߩފ?Rez¶ãå ×óZÅïjIo4¯¬ƒ¡žÿö&PLBõåøËé­`ˆ‚oL3å;3†*˜bs‚¤Á IDATÊ3&˜2ÛŒi¦ Q0XAWšÊ©.£´ôëüUŸ‘¥cG=“8™ƒ‰S ËìØhOeSCŽ«=) ‰D-¬f´[Üõæ`ÞùD«,d|TX‰Ùˆ¦8kt,eâdªØq¼ ôïªö¿¤ÝQŠ™¡ƒµþ̨…¹í.?Þ&`7:Gk†Ôdo/Ê–» ä(Y}‰eçIÊ$îókþ>F  ;Ÿ¹{Ùz‘¬¤À¿mÿ¹ÿoÌßz°RR”ŽŽ' ijjg9®*•¶X±m¹¹ê„„AŽŽF„Cÿ7‘Q¾ü^SSY\Üáî§OèÐá–§§õË—mD™GDD®¯ï}Žè躎ŽaµZpw«>¾L«VJŠ®lÙ¤¬,áÎû:u .# øø¨ÓÓ9wNÞºµÈß^±Ž©ßQª„ރ„Č#‹< £QM.íD¡çvò&=f£TÓ·?Ϥ°mtjsvsàr%íøyÑ©¸cnGúÕ1vu’²Ùr w\‹@.epMæ7ÇшæV, B¸ò ËQÂ` à‰†“ªÄ¯Ã<á¥ß•¥aÞkÖDttd‰7ÞbwŽxûbóôêñ'ÕXÜ´êõмN¢?º[«²x{1·Öë.«ê.íýëÌîn…X±ÿ>"Õü˜Áö,*)¸•§ ‹íèhYHýÚH%£¢¸˜N5KŠËY_–²z³T³^±*@K6V¤¬¢ð.“áwx•ÁÇ<–UgB½çŒI¹ ¿Ä‰·Tw¤¢+›⸺Ê{Ž ÐËï[QÚg¢FÇ{L=DB c›2ªžF»·øvÒ°0el&wÄÁ¸ Æødz}‡TÂ0~šÊà/´ô ô%-œÆˆÞlœ¯wßG•¤}bíRñ"ÀðáÚ-[tÍšI®\ùòò„zõR,,¤“'[vî,òÐû÷ݽûÓ„ ö«W‹¸¬Ã²«U{РíÉ“•¬¬ÄGS… ç_¼È<}ºA»v†œÞ!!‰uêut´øøñ›¯ò`Ý5Òô+QçoïÁúßWrÿöö¦Õ«+]Úòöíf …¬~}gw÷"Í¢„Ÿáî^¤Y³RNNGF¶lÝÚ¹dIs…B’ªçV-[Ú9:*Qº71‘Œk_¤ˆìèÑŒ/ko/9ÓºIÓ;DÊé9;3gŽÌ‚íÛujµÈŸž4š6ÍñpgþRñƧ$ǜڌgär&,Ò[…èØ³«°¶àÆFÿ@VA ú‚°³fã(NÅ\Ah$“ùá¹ÊB®ú-+òdk{ãíÌûæ ñRÜ+D5þW·bv3öeZc¤‚ßÓqÓÏ^а çXÓk±™ô8Ͳ{†Äß;¹Þ™nePêXû‚¦çy%òŠÈY] µ(mÁûcÞ›ßé³§&~¸4w°bNÅq§›·ýÑ~ë}‹öúØ•Á4îžãÍùž]­¿dWJ3ç“e&ŽNÁ3†ùŸx¦*¤×T§sèþ‘‘)¬É C‡…”N¼p%À »RêXÏÄ÷\LÇNÎ'ÎyëeWáY´ áJ R˜æÎéšzÙÕÎwŒ¸Ãµ*Ør½5“+êeW§#èvŠSï(jÆ·5ØÞÚ»ÊQ1ý3.p4ŒÞœý†}½ ²«à`‘S£+/¨½ÈVQ³ 7§³¶ÏW°«Gïh4ƒÝ×øFõr\YÄÒþƲ««°ÛψúÀÍŸŒbW3VP®4=Û³~®^v¥V3s í[1v¸¸ÍƒÂÓ§(¬_/þµïØ‘›‘!¨T‚(»Š‹SGD¨ Éøñâ™FG¦+fâãc©]Ý»—&“IK–4oÕJ̽ö\¼ãädѯŸÑùÿàÆßȃ¬\ùzÉ’—ýû—6,Ö°téã3îŽUqÆF|ÿMœ=û¾ÿ+-Z¸îßß°å¢E/æÌ 0 ô޵D ‚‚>ùû‡–(¡ˆŠªûe…ÑŒ ­Ï›ÔzT«V0–$#C¨\9):Zwã†]Æ`*M›ªoßfÕ*Ùĉ"l>"ІmøÀþmô oØkÚ%ú³F±h’¡ž>|ÉìÍ<}‹§VàiD-»¬<–aÿ ’2°µäûþôoZøU¿B'°ÿ矱7À§ó;Ò¹ÚWx³^'³í>+n8Ù0« Ãj"ÊDg²ú!kÔ)ÁþT3(®}ä=k¹DU;úº3ÞGï©h††¥ïXö:;1·<îBúÝ­‹+>Ùh%ä¾1­yÉzÈ'™¡‰^žaóto¥FUªNûvÁµQ9ÊßÕЖH¤ã[­lU-(Ó¹h WGeClhi‡q9kÿ·Ðås8›h —rÊ™ÐÔœQE¨l°ÀgœOgü{ÞæãeN”D¬ €N`u³^¡ÔÑɉé娥çd5]Å”~O†ŠIøÎOü„ÈP2õ[ŸâçHmgf×)Ä©yúK®ñä 90­1æF<óÇÑüDàM€ö~ mH»Ê_É“ÌÚS¬>‰ ÐØ—á­èÑÀØËÕæô»á ïÌÂa8è=Žþ¡/ñïGj:cú±r¦!Ï÷w‹ ÜEi7NÀŅÕÒ¡ƒöãG¡kWÉôé"Ã2=]çîžœ™©»tÉ®I‘—4yrªUÉÇÛmÚ$š’•¥-Y28?_÷ìYM//q¢=tèƒÀÀȹs+Ì›WQoO@­Ö¹¸ìLIÉ{ú´WŊžʃõÄHÓ¯D•¿½ëïE°>‹5T¬X$,ÌPZppBƒÇüüž<Ñ_ý¿ F(WnWllÎíÛµkZ]##³=<ÎÙÚšDF¶ ¼½CÞ¼É=uªR»v"Û¬iÓƒƒ³ëÖµ\±Bde]° {îܬ€³#GD‚>K6¸ºJîÝ“;‰mv·îdØxÊ–æê)Jë¡DçoÐq8‚ÀŽeô1¨ÞõöSÄσµ“hhˆHÿ ÷_3b#O"†µbR'<–¼ÔZößcÑit‘Ét©J×êô¨ù+нf^@«ãF$+0¸íO:ÁØ«”¶!$IÕ˜QÛ*iš’É÷ þÈ»,—gV%Êè?”¼‘ʨç—Õìæò‰Ñëí…ôy¹Ë6ƒ£M Mñ²Ü4Ëç‡ììt]—­°÷öYuqÒ³¸;lZûöéYsÜçÿ?U˜Åþlrt($dêèm¯‚¦æ¿èÂÿ¡ÈÖq)Ó9|8™ PVŽ­Œo¬éc­>óñcþË—­½¼ éèŸ?=pàÕFJ:Ôòk•Üÿ!Xþ^K«Z¶¼qçNÊÓ§-=<ô./J¥¶I“Ïž¥¾ßßÞÞˆÒYÿ%¬XñdÍš§mÛºmÙÒİåðáŒY²¤ÒÈ‘â³õÏ?',Zô¾lY³+WDÆy|¼º[·˜Grß¾õruý²À–Уǧ«W•—/Û5n,²Â§}þ\ps“lß.î™ý-‡OàåAо¬/ñ;޲af¦LJý @V.ƒóè5%h[·ðÔÂÏÐêØtž}7y…LÆÈÖ,èC‘¯©H©Örø!óO§&-‡*®LjI§*_A³.¼fÆyRrÀ¯ËÚP¡°¢o9jÞåA×b¨âÈâ´6¨.r&–aÜI¢ºË1ÌS|IV«”A+ËÜYé¤KË”Ùݲìù怒ù–h”¯ÏJ’<Qùmíö¦òÞÊ#×”`(a[z~§] ÙïÏT×óÙ“ÅÙ\ä¼T£°—ÑÉ’Ê šSQñF¶2uAX$Uʳl”ÞÚ£¿ÅãpZ  |Ê—aËbCì*üµšR®,c‡1¸¿¸Ml¬P¡‚ÆÝ]²h‘¬m[‘畘¨swOòñ‘oÚdS­šÈ§³tiÒҥɽzÙþô“øŽ­råûJ¥nÙ2÷ŽÅ%Y÷ï>üa§N%wí?øƒ]½z5nÚ´ª£GûþC°þ"ø{, _¿={¢W®ô›4ÉÐAµ¿ÿÉ«WãŽiðgTCû÷ðæMº—×^KK“„„AVV†ýÆ®]ûÚÅÅâàAqµã¬,m©R·335ÏžÕôõ9cè×/vÏžOß~ë êÄZ´({Μ¬zõÁÁ"Û¸˜ÁÛ[“—Çò Dæ©Ô4*×£\YÚ´`êøý<88¸~ý‰elØÃØù˜*8·&5Šu:~ØÇ´ #»°jþñiÉ©‘µÚGô•ë~}%“Êæ´ ,£?sP#pGÉ¡l.ä’®ã“HÁ^†‡ •MñSà&§¼ã$׳tÄjx«&VC´† ¹¼PQÍ”J9nrÚYÒÉBo‰›/‘¯cG ³c¨`Ap&}ìYYýd£žó.‡Ð º9³ÑW¼<ð!—onqñ ©éÀ÷ÕôŠqD¥Óë ÷IXÔ€)5õÆfñŒ:Ω£ê2«)%Œ¨'øÓé÷«ï”~û`LS&´Àýk¸Ñ¥'ŒÛÌëxÌ´ªÊìžTýšy4!…‘Ë9y g{ZÕaÍøB²?#$”ÖßžIçXkˆ]eeS³)¯Þ0¨?oÐkÖ¡ƒöôi]—.Ò£GÅ?·ùó³æÍËîÜÙìØ1ç½R)”)ó*!A}éRÙæÍE&Õ;w2êÕ{ä計­g¢‡ž·hqãòåÄŸ~ª>b„¡'¨Tjœ¶§§+ß¼éãáaûµ뙑¦_‰Jÿ¬ÿíþù9»~ý;‹Ý» mÖ¬yzâDT£F%æÏ&ù‹ k× ))ùÆùôîmHÜ+?_ۢŠF·eK }eØ'N|ûìY¶¿±3DD0?Î;6^¥âòå2¶¶§›¬,Áß?U"áûïmš6Y@æÍÓݺ¥S© © \¹Î„äç³ã'êë'Oß.áÊmS8²žúÕõw€ý—¶ïÒ¸—bÉHJ!ú/<‰dÝ)ßÆÊ {V ¡…¸ÿ^/TÜgþI,¼þˆ§sÚÓµº±4+-—å×Y}‹Ö^\~ÔÆÌhRˆæ–V`í#fߢºéJfס»ÁP×#ïy—жäkåý‹ìûƒ³GäG¦—SFH^šÖ»b=(Cfh]U$…[…î)ãíÚlÑ +÷ÒSdä¥YšU)œÔ™/ w©:¬c•ÁFõ"Õ\ÍãV>q‚ò¼¼R!€¹„|{¥ä˜K°’â(å³*¼•„X :¬¥ËÛxáE:ÛëÓV2þá׌¾B;"3ØÓ–úK’ [ï³ø*ž<ˆcY†âxñɹ)X›ILMXÔ™nz¤ÏEòš;IÎ +3õ¥Û×è »/°ã,:Oß²lt!ÝÅåÛŒþŽ¢EqsfïjCyÄ:½“—G|·.`¡gïp옰l™6/óçe%KŠŒÛ¸8m»vŸJ”-[fåë+Âæ¶mK۵듅…ôüyq¯ò„ oCC³š4):w®¸AttNß¾!ææ²C‡êÙÚÚBŸ>ýþ‡žØÙ™;Öš¯/ö\p¬þÁû‚õ¿Ýÿ/¿³Œ uñâ't:!)©SÑ¢z÷­·n}hØðx¥JvOŸöüã›ùïcË–ðáïûû»\¾ÜÁ°å˜17lx;aBùÕ«ÅÉ‹9uê<”É$±±õ,-EvlÍ›G^¹’½p¡ÓìÙ"‹î¦M9+VäØÚJ>´ÿ’FäåQ¡‚&*JX»V6nœø²6m.Ë×RªOna¯GŒG:‹m‡¨S… ð+¬ìLX$ß®ãæÌl™A·¯ `?}Ÿ [ÉÈE¥¦Š;KPרÊÿ‚RÃ{Ì:Fü'ŠYâS‚)­ho´Îõ›d–±ã!@E'–µ¡Ma ˆHgØE²T_õ{w^Ÿ>æ{öˆœÎêtT¬øúåKåÁƒ®Ý»‹¤¥©ëÖ}T²¤é–-^îîâ,ïs~RŸ>n{öRU°G‹‡½[¾¼î”)Uø‡`ýeð·#X@óæ7’’òæÏ÷íÔIïŽR©Ôº¹írq±:¾½½ÑUQþt¤§+Ë”Ùåí]ôÀV®®†Ò‡BCÓ4¸Z¿¾Ã‰õME ¡^½G™™š©SÝúõ  Ên×î}£F–‡»YZ¼C^žàá‘ìä$=Û²S'‘'vê”®[7mãÆÒ;e¢Ñîj5MÚó>š6-Ù¼Z/ Ñh™¸ˆÝ'©Q‘3 çXÙ _ÆÁ+4¬BÝŠÌ„¥ñUn4ì¾Æô¤dÒØ—ò%Ù¿¯QÌòÕl¾ÎÕ—œ¥žy*¾ ¥¡`ñß!(‚±'p°¹Œuñ6xX#À¶g|{< M\éãM?ƒeÚ¶»ìxzF#å# SæpͲßsóÆ­¤ªl‹WgÌ#®XwðÍ‚9 ++ 9ëÃŒ£=ÔZqÅÔìŒû®òEÝÛÐס¯1ÐA²–4-i:²u¨ _`"ÁJеRì&ú 8ÂÂxÜM¹˜9 \èRÌP,9p8eïËÂÃ’nŒ.­×þE:ƒƒùÇÇ<–Wg¬^ˉŒ¾Bj. 9,iÈøjðŒ•7‰JE€ ¯Ö,ì¾ËˆNÁ¹(ʳ8{£k±Æ§²à/c {…ýš0£ë×Å/ªÔ,ßלÆÖŠ¥£ÚÑØ}Èâ\æÆ}¦ gÉ·…\¸‹Ÿ÷ð(”KÇiTO¯ÙøñÚ“'…2e¸vM.zÃÐPõ˜1™«ÃÃÊ”ùÎNžÌœ??1=]÷æç—©ÙÀ¦MñëÖŹ¹™?_Y_3ºu»síÚÇ}ûê´li(!;[ݾýÙ‡“ÂÃ{¹ºZóÁúËàïH°Ö¬y=qbh¿~¥ ‡ ôîݧqã*ÿ•ð€Aƒ®îØñjΜê rP¿þµÛ·“÷ï¯Ó³§x¶Þ¡C{ô¯TÉêéSñƒÑ–-£‚‚²ú©äàÁ"9Í»vå ^¾¼üùs1ö¸qš\]%GŽˆ/}±q4iOi7Z6eÊ8ÂÂÂ|}E Z«ÔL\ÄÆ½ØÙrewá Øz’å{ÈÈÆÊ‚sŒÍ.üŒÌ\ÖœâÊSn=G"¡Kæ÷¡‚¿EžŠÀ›ì A£ãÑ{j»³¨3ÍŒS2WkÙt•׉N§TUgzÓBªðÆgó}·ãyšD«2ln댷OîÇnŸY=åšA-1»kÑå¶e€F¢×­+4f‘7-ŸÊ÷®º«ëŠÏVl𥬮ͺuEß…­ªûжÛÎd4ZÛ0Ù™Ö¶†"‡þëHT³ù#·³¸œÐ¥]ŠÑ˾pûÈ\Æ>çC>¡™Œpe†®úÙü®wŒ¼K {,ä,®J=^[ÀÒ{̽FGO/æÖÃK¿"h|CrþÀ”FLiŒCaDçA+/rð>ÀðÆLn‰Ga©¿"%“Žsó9w_a¦`B&u2VÚêW\{ÈèxMKF0©ö… 1|†J͈9<Cè 6/bP×BìoܦU*ûéÑE¯ÙÑ£º®]µÅ‹bRFOÊHÓ¦©AAªï¾³ž?_„‡~.í|î\ÆŠ%¾ùFämétBùò!yçÎùµn-þ:ïÞM­[÷Š››eDD[™Á¡²s端úû—º|¹ãçŸ|-Á*DMñß…ûßž`ý„FÅg¹¶ààdA]HŸ¢7o&\¹÷gµëßÄ€^5k:>þÉpw€¾}Ý€#Gôö¨S'GGÅë×¹wîˆëQN˜`oo/Û¼9M+¦nÙ»·¹§§<"B³¿¸bæ”)²W¯„sçt.èD \J±q%×n°|-׃qug1 VϦC3RÓ™ºŒÇáú:ô/ íÈÉå”p ê¦òÃ^TbÚ§¢°±à»žÎäΘ+ £Ñt­áytá×þ scý¹>Á p°&$‚.ë²Ûo ¿ÖDÆØº<Ïàš¸eáUzíý%lYJZ±ÁŸ Õ(jÆ…(:Ÿ ð7¬±o_]žà°¢N”«À3³¦?Úo½aÕË»R||^ìÒ¬η]¾bÎÙS3šy3áB2Þ1åÁóQWõ]èS¢FÏÊ]WºñØ—ØÈ¸‘ÉØ(º¼aé’~ îf1á=U˜GŒ’ê–-Ïáòô1È®4ËßÑòç’Ð ü\™Ÿ*éeW)JFÝeÀ-r5øØr¸‰^v—ÅÈK¬}„N`jMvµ5Ä®„Ò÷ϰ5gsËÛ®Òr˜t€ÆË8xŸ6•80‚MýaW¢B£¿EF+ÓxËŽpï5ãÚ¾%¾Ž]Å~dôÌßÊ«h<\8²„ïGË®RÓ5—íGˆŽçøÆÂÙUøKÆO£RfN2Ä®RRøþ{0ožL»ºpAyçŽÚÎN:a‚¸36((ûСô"Eä½{‹´ºvíSLL~éÒf-[ê­xuìX,У‡‹avœ>ôìéaØÌþˆ:9ÿ9·HLLôððüÞ…(ù¿ýmLLL@@€M@@@llìÜŠÿGЮݭK—oÝjZ«–ÞÊ[aa©;ŸW«uÑÑz²xÿ:t8{ñbÌ… í›6Õò ™™êÖ­o†„¤¾zÕZŸJÅÊ•1K—FûûÛ¿_ä`I§£{÷˜“'3öìqéÑCd"<}:âĬÜ\Ý»wÅ-,Dæ…À@íÂ…‚NGx¸ÜFOPȲ5l$/G7pÕß!•šo—°ÿ4-ç¶QLj8t•šy<|ÍãW8Ù±m&µ Ÿ}‰ÄO^"èמ!•0¢5£ÛáSH}°‚ÈV²î2ßsâ ‚@?–vÃÛ¸ü{1L;GX"ÎÖxg]JÊaÌU“y•FÛ²,ñŽHØû]Õ÷‡M5©ð»b=ø£Á:ÍòÌx«§{->½©9j|Í1妿„%)YÉOB‘wCÔÏE¯5WX-î¼×Îê_YZ¦²*1J¼Íp7§¿=‹¡ø¯:´>ª9žÆ‰¼È£¶5fŠÉãD#rîe02 3¹|¬Yá£þ訠úݤ”%¶& õ$ ´^˳‘ ÁžÇ”µ£eyæ4+<âêðV^äÑ{”§VYfµÇJ› µ†íWøn/Z>.³f~*éo›(”j~:Êì-ääѬ­k3¶›¡¼¿xñ޾“ }AëF,šD•Â<Á ‰ÔiNV6=X¿Ü˜ÖøñÚ „ $[·ÊDÕjZµJ“JéÙÓlð`q‚Õ¬YdxxþܹŽ#GН/;‡Ý½›þÝweGø>me IDATSQ*uÎÎ'ÍŽ«çímè]&'çwëv^£ΞmWäÿËÑ~­+ÊHÓ¯D™ÿÀƒ%B«V­Ø»wïßÞÄ@ײ³³ýüü 4jÔ(`ãÆ;wî µU0ûSðwô`µkÛ•.mqúô6+Úefªbb²""ô”ùk@"¡J{µZ·wïÖ66&ÞÞ6:°c‡ÞÕ«—cF†æÈ‘¤¸8‘Â1R)-ZXi4Â’%I¢y»vfvv[[i` xµšAƒdÎÎÄÅ ³gkõµaÊ8*z“’J×þäçëíŽÂ„•3iR›ôLZ à’á&|?’…C±+Bx$õ†±|7ù_SªÅ©(³{°*ÓºRË“çðÍðõ¼‰ÿŠ›X™2³»‡²$s>¤ã;‡IˆûTøµµ\¹:ŒyÍ1•s, Ÿ•ì|ˆNÜ!àdɑ̭‡»$¡æÅÁŽ‹|êDí3Ô©²’Gm§í-ºÐ»’*³¬Bw½8Ý»‚ó  {u'Ïø•]ÅMYáÍX›KúØP×½åoÙ`-cHqÂ+³µ,Cy£äÌ'º¿¥a8ßFs9ÍŸ»ãKÑp •ö¯(õ˜ɼÈÃÙvºs´|áìꓚ)¯¨̃t2T,ób—Ÿ^v¥Ò2?ÿ‹ÄçboÆÖúzÙ•FDzût?EJ­Ê°¾™!vu/ÿ-\|¹ ã걡S!ì*2‰ökéþ÷"XŸŸú³¤«QìJ8B×¥ ßÀÇt*¸²jÇg}»Ž_ǧ{/’“Çÿcï¬ã¢Ê÷ÿÿœ¡SJ Dì.ÄnE]±ÖÂXtíîîX»]{íVTTÀÀBE”éîaê÷‡{]Å)Ø»÷w¿»÷õð™Ï9sÎÌ™ÏçõyÇëåÚŠC ™9¤ìê¢ÍÝ@ã:ì]©ž]eçÐëGb>âäȦUªØÕ¥K²íÛeòÅ‹³+`ß¾|??ÑÇRwwÅËöÓ§ù~~¹òÁƒÇâм¼R32¤ýû+­á÷òŠÏÈ(20ÐRÍ®OÏwïÆ››ë•Q&ö¯þ #X[¶l±±±}zÀóç)#G:­A™Ïÿ?DDdzxøJýý0TÙ¨õüyÆâÅ!YYâ;wÚë(‘Ù7.<,,¯o_«©SdèD"y·nQ99Ò•+Ëuï® vÿ~Ñüù9ééò{÷,¬¬¼EHˆ|äH©D¾}ZÍ›+žÆ22i5ªst¯ŠB*eÌBÞFRÆ„Á®ŒTâ·S …E¬;ÊÁ+èꀀ3éÞR£¿F|:kϱ߇6µyJ‡z,L“Æé“²Ù~‹ Þ4®BD"cÚ1»'d3÷:>ï°·¤H¯ýh¬$Ú—›•ùhÿêÚ/v›Èó¡É=#5>Íi‘A„a¨gº‰mÚOë×ïb©hK‹æš›¨ì<FÖëûŸÓÕVªÊ•(æT*7³ðΤ­)w³©e@Cº™ÑÙ”ŠšÅTJ 9„ÙTîæÐ̘"!ùô¶`˜=ÍPT”¬à$Çâ˜JSüS_…Õ5”г¯3~+=ž¦1­‹(-Aû˜Ãà«ÄåP͌՘ÙTiå»DƦ{,ö¡q*›³² Ž*Ûî$2vù²õÖ¿®R*²ðEE¸ G.'&¿kX+ÿ|’“iÙRbkË! ÏYYò–-S­¬„3fýðƒâ§zèÐØøxI»vFK—*®e[¾<Ê×7£^=ã;•jë ú(>¾pРʪå¯w÷Û?æþôSÍaÃþÐe)i+Aá%„mi#XÁÁÁƒ 411)v/*n­C‡óæÍëÒå︛7o®_¿Þ×WiÃ_¿?ÁŠÙÚ§ö"‘¬lÙK99’¨(×*U”®f¼3Æ¿oßjŸÅEþ›Ñ²åùÇ“Nœè¬Z ¨WÏ;$$ëʕֽz)6fÈúñÇ×r9ÑÑÎ åï~ù%eîÜ„–- >T¬ ß½{º··hÚ4£-[o¿6m’nØ ·´äùsm}%‹ïëPšwæh­_þúè÷ÉØ°ŸyX;‹¹JL[¿Ç«H†/çU$À”ÌŒÆÎµ_ð1•÷Xs‘m-·a’+ÍÔ| Å™ÌÒK|Êän8F,teJg´5Ø^ e•ObÐÑbV–tFÿ«5¾¨°0àÈæª¬d™€íç†=î)(}æÈuã_žÒ—å2`êbÇ9èu.ϤšôþŽo_}yäü³=ª¯p@“ ®õG¨½‘Юdp' ï¬Ï—™6fZ¸˜ÐÚ„&&Ô6øS9ÄÁù<Ì!VÄé4’Å44âEºº›1È’.fXj¬)p'_Þs# ›5[j᤼çN¿„°$ˆ"Í˲§¥ÒŠ+àb?ûZ@eSÎö¦¹òÄñû4&{ò$–Ìv`Q'5–O£s„—˜ÝÙÝTõ ~­ñÇœ#„D—ŠUÖdHÛ’©ï™¹«”·BO—•cù±sÉNÃS16äq0»—3z€úC$ú»ãyJ¸wC© —ãê*¹~]Þ¥‹ÀÛ[qç 0kVö¦MymÛêÞ¹£ø+ Õ©®«+øðÁÉÖVAPN,–÷éó*6¶pïÞ..ŠC\II…½{ß×Ñ^ºäR¶¬ªMFf¦ÈÆæ°L&OHõµéÈÿi‚UPPмyó}ûöµhÑ‚ïîE ØØØ¤¥¥YYYuèÐañâÅNN¿ ÊØØØ¼zõÊÆæ^›˜˜Ø°aÄ„¿èþÔ£4²4ÿWàã“lÞ»aCq §'ìÑÃ6""÷Îä‘#•z‹tëV¹|y£¼<±X,Sïù/ÁˆNÉÉ÷ïÇ«%XÇWÙ¿ÿýíÛIÊ–‹Kss##áõë© Ʒܸ1EKKðäI~óæ âäëכܿ_"ŽŠ’*ìaž8QëàA‰®.ëÖÉ–-SüÁÖ©ÉɃZý†sãNŽôVNq…BæþŒ±SVpÍŸ´LÖÌB[ƒýz´6¡¶!2$|*"¶ˆL ÏòxW@íßëëk’,¦‚.Œ˜eK3ÌJ2 ¾Ëcæ[ò¤H)¯ÏZ'†WT¥Ú›ÇÈ{ˆåˆeŒ­Áæf)y» óî’Jݲ˜èr¸»*9þs¯XãGx íí™Ý–v*Ã…b–yr?‚¤lª•e;]Ô•~fWi9ìòâ|ob1Ògãh~ê‚Q ÍÃR2Ùt’§¡Ü Âĉý™6ÞäÒMVí"ì=Êñø 4(”É7¸OXZpã‚*v8 KOX[ËûM)»ŠŠ’¾|)14lÞ¬4mwâD¦ƒƒn—.& ÙpõjjZZ‘ŽŽP»®]‹—Hdå˨fW€·÷Ǻu-¬­ þ¤¥›ÂIa&ÌÒìð°éϼý·˜1cÆ€>³«ïÑ»wïY³f5mÚ455õüùómÛ¶õññiР‘‘aañMˆ¥¥ezzú¿ïÒJŒ¿s+6¶ÐÎÎÀÈèNr²‹¡añõöرhw÷']»–óön«â$5kž Ëx𠟳sɃÿAddˆlmK$²˜˜*¨Ê0%%V¬xE(|üØËÚZñÏrÏžO&„·ooî秸t|ýúdoeµÏžU,Õ7~|öÞ½yC†œ8¡xyþ\Þ²¥D&ãþ}í–-•®P»ö3i6õjshÕe͆aWuõ´›Ž›Ò|ÊL-ßWT3ŸâO®wÆW‹Úã3T*SÚ©ð5äE5÷¬l?´B鵯òe„^@’˜7¤ˆ1’"¡’.úˆåu ™…¹6UõÐRYG*êRCŸjúªÌ˜U#®Í¸’Äû<ìè^–¥ŽJ-?ãc+‚ J#( 7;~uFEˆa× ö¼À€´Nõ¢žò:¡Ñl¼Ëå7tqdP}F«|>óD,½Ìé@ tÐÓáðhšjÀÔårNÞÅë)§îtŏÑ%V}Ë+`ó)üžŸJd³i õ¨Âíì8Æ•ÛX˜±q>£4«°”ÉX°œÍ»1+ÃÅ㪬·€ÌL†•^¿.›0A¸k—Ò¸·¿Q¿~醆ÂÀ@Ëòå[´(qÍšäáÃÍûM11zù2¯MUn@XXNóæ7…BABB}}Uqø´´Âš5OffŠFYZ~óx•”`iÐ]S˜—œ`988øúúÚÙý±oW}/IIIööö¹¹¹üW¦ÿþËÔôn¯^VÇ+h5<øñùó±§O;÷ë§T àÆw÷ÛNNæ÷ï+×NùïÀ­[çÍ{T³¦ùñãU¼y3ÑÝý‰¹¹nh¨ÒÄÛ’%6nŒ=º¼²JÌ5k’×®MîÑÃôÌÅ³ïÆ¹¿ýVhc#¼}[±tHĈÒädyÓ¦‚õëL%Ÿ AÄb&ÌäØiªØñÀKå:@Ÿñ)‰©+¹r›¶Í7„~ÝÔŒÿ2§osà ÏB12À¾kÆ—¬÷ ²òØéE`W4q`ùPº7.ÍʱÅÿ0üèlɬnŒo¯´0+ØïzÁ©…uò‚?ÿWsŸfãS‚¬‡>CÖ,ïS¡‘r‘I9Žà\4Þq Ò›ªWðXÓ;$½&>f»ú”£‡5îÕ~þ{ð!ŸmQì‹¡©9NÆ,ªN5•MßrØÎì§d‹ù¡2}ípWN,²DüäÍ…wØ›áêÀºÖß”Ð}sZ9;0÷:«³¹ö*´O>0l‘ɸTç‡FLê¨ÆËò3žG2q/OÂ1Ò“÷j&ðèJG¥2ãŠ!³ï2>Oðz€}E*°f<4ΕA~+vòð9ÏßÐÙ… s©^E£¥RFMäØiÚ¹°d.íUu1  ½tIöフnóÄbêÕKII‘­Xa•;;Kd2üýµÛ´QúÓÊÉ¥Mw‚CèØ–kgPVÿ…"–ncÃ~€eSY0^£’¬/‰9zƒ¹;ÉȘ1˜Ñ®Ô.¡CÎgI8r›§±5çY$X0€Z"Ô˜fÅe0ý)¹Ü £nE¶¦Ã·-­áÏ}:ºø³d( ±Oó[ãàãÚ™1ÖµëV½aZBË|1ï3YߎI QQp˜\È‚ûűÓ5½/VÞr»ÈY"§œsTÛ¿¦Iðß‚ÀLÅžÇ4´ ­ÀÂê8ªëîü”ÏŒ@>æñ(×Jìu¦‚r6ö,‘!×°0àm*¿va°òNå¤\&_æÜ+:8иkº«j€(³Ù‡µ^”+ƒ¾¿yÐH‰ãÞ×HËaÃENß#% 3#<Ú|Z2ªB‰²ä)çý™»“Ø$t´éÖ‚YCK¹9ñ{ÈèùÄ|¢ &0m¤{Á?®A¤ټxÅ›P®œ¦C5ã—ýô“T_Ÿ/´«USú›Ü¶-oÚ´lGGí+]%­S§Æoßžúãf§N)ÞpfeI*TxŸ/ káè¨ø±Ë©VíZttÞ½{Z·VcÄø9?xð`‡ï›Üÿï¬ï¡ú^¶oßîåååããlÞ¼9((èøñã_^6lXÓ¦M§NUÙ$õWâïO° ‰Ž.\¾¼j·nÅ™DXXöøñÏE"Y@@¡òï§ŸübcófÍjеk %ÿã˜?ÿÑýû =zØ-X Ò« V®|sûvRûöe—-SºO>ümdd¾‡GùŸ~R\.0gN£Gù5kêïÛ§¸ºdÇŽ¼‹ 33åOŸZi+Ù@/_. EF¤m®œ&$Ò­29U+sá ­xŠaßi–mèäÌšYT,a]N>»/pùB!_3¨#K~ÂIƒµê{qÌ姨bMD­˜Ö›¡íJPæuí%ÓOQÞŒO4®ÂÆAT² "øùÇCs?{Ý|¯ãècâ§£JUD+7ÑøÕY½¸'z¦eZÍœßpÔX–V¡”÷8ŠDJóòlj¯T1\&—-¾4,.£Äîåͪ´p>¹ö½Ö‡d2r¤ *Ïä*4-aeÏ_ŠB縞̩O´2'¦€Ö̶ÇAµ’ïáÌ}ŠcrÅ,kÀ åŒ\ÛŸ3ç.ÎÀþ®Ø+ÿîE1è8Ë›ÉÁ¸ªTŒ ŽeØ~RsʘÙ]ÐU¸’H9æÏ̃˜“œÁ¢ÁLêY²Jv¹œóþ,ú¹=mä–þDÿö%Ö~Ab sÖTJn>‡×«—¹ú‘ˆ¡cx„‘!‡vÓ¢‰šñÁÁòöí%ÎÎwwá AJŠII²fÍR«VÕž=Û¨gOÅ{‚øxqëÖï+UÒݵ«|íÚŠ?»_ýtøp‚““Ñ‘#J¿Â»wSfÌ®PAßÓ³µêO/#C4|ø­¢"ى˖-¥.)ÁR,Zø§aøï&X;v?~¼‹‹‹¥¥e\\Ü©S§¶lÙâããÓ¨Q# ''§~ýúãÇvïÞ}øðá—/_•Äóߊ¿?ÁZ¾üÃÒ¥Qå÷ïwú~€½½WLL^@@Ç-”Ü—. \±âéĉuwîT·!úÿ ŸØnÝ®:9™‡†Q=244»];?±Xß[Y¦ÿêÕ´9s"µ´xýZ±Ëáû÷ENNááá5ªVUÞ‹©S'åÝ;ÉÎe&NT¼i“HhÝZòø±ÜÝ]øÛoª6ªoÃhÓƒ´t† â·=ª¿àÑ æ®'è ººìYÉ ê)†ä Öaï%´´06 C¢–µ,ßC$æä]<ãù veÖŽÄU]Ÿà‡KØåË…ç<Œ¤ºvø í]³<µå¿WAeiYù¹«öiˆóŒB¯¼óÈ%µú j·x•¡Õ7»ä€OŒº‘™¬iÔFª"m™E²™gúJоÁêX³¿»ólÕ7ò,‹µ\IBåõ)£ÍˆŠ ®@Å?Õõgñ2›Ë‰ìˆ&­ˆ¦Ä0¾ ì(¯ÁU…d0î!BIüP™_±Vž˜MÈÅLj "3˜Ñ”Õ­ÑSòÔK¤¬ðeµ/Îvèhqb°*Q©Œu^¬½NEsŽzhTqõ0” {ÿ„µ5+²ãgª+­½V™ Ï{œ¾ÍY_ÇÊü2‰^­4úmƒDʯ'Y°‰ì\Ì˰zc~,Aà93 ·aøßÇÒï jªÚ´4š6•DEÉÇîÙ£êmæÌÉÙ¿?¿U+k×”V'Ì›—¸~}rÿþeÎSº4è¯oú®]Žƒ)MÃÿôSà¡CQ‹ÕZ¹RM~ðèÑð#nwíZÙÛ»×÷¯–”`)¶6ûÓ0øw,??¿;wÞ»w/++ËÆÆ¦C‡ .¬Qã tttôôéÓ?ç;vì¸uë֯˹þóøû¬7or]]_Öªetùr½ï]Í×® ½~=¡W¯òsæ( _Ÿ˜6XþSñosðNe ¹RlõxšI“2Œ¯Âàòh°ºçIXÌ…bó¨fª†¸UQ5þv n‘'¦’ Kœé¡<Ê—Åà<ŒaE檌wF§2l?ZîG°È•ù=Õ· ¦d±ù2^ÏxCUvþLwu!Ÿ¯!—sý!óvceƃW4ªGoFö,Y.þ ü1mlð¾‡k¶/¡ª*Ó¯âˆO¤ßpʘðò >©§NÄA*eÈé›7ò2eð÷×ÖUþYùû­\™#»}Û¼jUÅÁÀ„±»ûG©”mÛlëÖU̬ïÝË\¼øCrrÑ«WÍŠ yy’|—ú´sŠ­Ì¾`úô?¿OãÇ×7NAwð߉`ýŸÆßŸ`Éåòš5‡…åûú6ìСx êÞ½”¶mýŒ#"z*;‰\N¹r‡’“ BC‡89•°Éø;H‹D¡—ÎEùßN }“óé£iÅÊV5jVíй¦Û@…Ý[%Åĉwwï~=~ã5kT6ÏÀŽS¦¹º–¿zUi!èŠQK—F¹¹•½pAñŽ*4TT»v¸¾¾0*ÊÉÆFñôÃYY²&Mt7lP:kœ<)>\jjJp°¶ÝïPHHHݺÅß÷ázÄÉ‘ÚNìß®iøçè%Vì$===¬¡g{Ž*†O)¼Š÷c… ÐÓ™e4VÊÌUA,áä=–'&3êUaùPZªdS¯TE¡_áÞ½ø¶m/µlióàAÕä#%ET¡Â ÝW¯º*ÄJL,²³{hn®õôiÓJ•qs‹ñôÌZµªÜüùŠƒX!!’† SʕӺyÓ¢V-¥%!nnÒK—dî”l}†ÿ}z@³&³b¦+2÷Y©›, kº ,ûóš17-_ÆSÝŠQM™ÝVU­tz!“ns*¡€ ˜ÛœŠ_Ñã´ÜÄYgûÊäߘ UZ~,¹›™.uÍøÁŽÑÕ5£ÿŒl ¸—Îñ8Är´˜hÓÜ}!­-hhJ£2˜•j ÿý‚‹xšÅ“ â ‰ÈÃ?z¦¼ÊÆJ—þåékCG«HH„g±ù ß!•ãböæ4R/~“ʪǜ¥ž5Ck2»™Ò<®TÆ*?v= %! ÙÞKåeò™ù,¸Àá ÅŒoÏj7ÌÕU›¼ûĪ3¿ƒ\N—†ì½f.ãŸñä ¿]çÐDÊY²fC»–ÀFð›‹ÏfÃ~nÜ£¨ˆ˜OÌô`ÞÏè—°ïáÂÖmæY0Úpáfü¢ÏŸ—'ÑÒâÂmU_ùÎy3fd;8h+­mON–´jùþ}Ñ‹Žõë+ž!ãâ ›4y–‘!‰‰q.WNé.zøðÇÇÇìÞÝxüx5‚¾¾q={^«UË"(h Â%%X ü`ý½ïÿósöâE®«ëK¡ØØVß/Æsç¾Ü¾=bÑ¢Z *-§¼xñÃØ±~ ZߺջÔ“ô*øÌ€žE¹¹Ê´Y½²éˆ)¥~ @&“wérÅÏ/îþ}·V­ÔÌ'>ß¿ÿúuõfÌPÚH={väŽqS§VZ¿^qêçÅ‹üþýc““%115-,gV¬Èùå—¼æÍu|}•.DééŒ)¹zU¾p¡pÕ*5™ïÛ¬ÚÀƒ'L˶ušÖ|H¥ü²ŸAÜyŒž.kg1fPiJqÔL{áû ŸÇèêжc~À­$uë_Ï/xAZ6/>Я¿Œ¢Š5üËëÆ.`“µì=â4í wŒ‡½ÕSŠr C/DÜÈeå4ê¸z£mƒÆ@¡„y×ñ‹ÄÒ<1Ç~¤†Ê^¥³á}Mt6q9üÒ–±ÿjÚ?÷l÷µ—¿}=ÒX¯ÌÖÁ×B³tç?çQ "Ve˜=½JØ’#Á7•Ç™œGOH¢ˆ,1r p0¤Š!Õ¨j@Y=L´B¼-ñ…­Ì©bH†˜L1Ÿ ‰) WÊ“ Âs)¯ÏËl€šÆXè%¡»5Ý­icQ2i®4BØò†&V˜èÐ׎1ŽªÂlrØöœ­Ï‰É¢ó[¨r¿‰ËÂã|(xô¨I‹ÅÃTW®|êÓ' ysËÇ;);Ozz¡Ía€ääÑff¥i.—Š‹·kžýAíH=ƒ©”ºçj‚¹sýòKÐÏ?×Þ»·ê‘ŸïÝÉÉôíÛîʦòÀÀìæÍŸYXè|üèü½ þgtïåí³t©õ²eŠ[õÒÓeNN)))²Ó§Í R:+ß»'ïÐAR·®`ãF­ŽÕ¬{w0‚òåhíÌ–5õ~Fxãqç Àø!L“FUC ™Ëž‹¼äúCÇÊÌwgP' JþŒ$e²ý .!–`kÁ̤ ²Tð]^Aò‡J^Ðä¡‘Ûƒ¤å!>™Äð½¯áësBq‘µM«™ êq|Ë@ýßãqŽéê°½£šª¢IyŒ½É•H€Ÿê±Ô[#ñŒÓ½³ ¾ñ èQwØ f“9œfó^¥“/¡Oefס•ry-ˆÊçYwÓxžEfay6z$‰,tH´µänÀø*쉨fȇ|€Æ„ç8a£G 3Z™ÓÒ‚r%ÿ‚rÅŒàB4÷“ÐâáÈêFX¨mª±¢ m•—gIdìôeö$2ú5fÝT)r¾ã— x>A*cT'6ŒÂBM‘ψKf÷<.“0g%/d$RÎ^cñV>|ÄĈvÍY<‰¦jt‘ +›ió9rmm6®bê8ŽŠŠÂÙYœ˜ÈĉÂ;UmáärFŽÌ|þ\Ü ÎñãJóïŸõ–óóeÏžUoÔHñ´&Éìì&%4nÕJi„m÷îȉŸ«.Øørmvv¿}ü˜ûìÙÀÆÓÒÿ¬ÿüSÖêÕÑ^^iíÚ™­YS|-ÍÏ—þðC@\\¾¯o;[[¥kÿO?ù½z•¶`Aã¾}K#ˆôêø‘›s5Uãê̈*=Çzó&mêÔ€´´ÂÀÀª-%yŸ>÷££ó÷ïoâì\\ìþ †}óömÞÔ©•FŽT¼û~ð oñâÄÄ/_V/SFñÌuäHþ‘#11Ò²ÆÆJ×óýûe§OË‚‚äj§¥=P]Äsÿã§“šFÝÚ\<މŸ!—sì2»O •ñò-ㇲbe4^rŠ¡HÌéÛ¬9‚…)^cmΤþLì_šE(2EGäVñdž¦/¯#ÿƒŽKÑ~iÐÉßxx¾PÕIu^˜ý¦•—"ÐÖn8£Õì…z&ŠÇg2Û‹'±0D¿ ¢¢Êôʹp¦úbeHLsëÞ Züõ«ëœ³1ý#Z%–±êΧ_“+T7%WŒ‘6«ÓîOØMIå|È'<—„BBóH-BG@J¶zØR$¨kÊüPÌu¨lˆ¡;ªQYŸÆTø-Š")Þ±"˜ô"šZRÖ€u©©N]âLKÐÑ"£½]襜ċ$,½Å¾'Ô±AO›c?RNù£›Æä<‰ÂÂεÙ0PC¾ˆ§Ùx‘Vµ°2e²+íÔ4¨Á¿Ê³rÙ…¥û)kFJ3‡0Þ [¥ó„*Èåœ÷fÑfÌMÑÓ#%åÓPª®¡g/øq4v•ˆùÈžÍtÖ¬ž25I… ˜™ ΜQS„pà@þÊ•¹Uªh]¸`ne¥t ]º4ÉË+»Q#ƒ}û”–4ž8‘¸vmL­ZÆgϪª½ïÚõna¡tòäêjíqž?O9Ò×ÞÞôÒ¥ÊvÅ%&X"ù®êÌâ:Áú?"¨ü§Ñ¾½ù£GY§N%}ÿujh…†f_»¦JPßÑÑìÙ³äë×cJwá^—5,+*xúÛöÒ½P»¶errAppªŸ_œê‘ÚÚ‚:uÊDEåz{«âs}û–•ËÙ¾]éÙZµ2ffƒ•JÖa(P½ºöòå9*ÞËÃChe%ÈÌÄÍMZ¿¾šéÖ-9²™œÛw1Ž”TÕÃÿ€@€{_¼Ѹ629;Žâ:†ýghdýRº:¸wçÍ)æºÓ¤&Éì¾HõþLÛÊÇä’*#èüì§µi#¾fWtì·Úîe:Q»ÒNÿ`î¿ÒìþF­¼”´Š­w¹Dt\¯k¬t¼©>¿öce"Rð‹¤þ.½Vuajðb$öeÈ.â^ÄÅb¯Ö®Ðìkvè™ÑØø]?úÙ˃dÚßÀã÷J»qÐPÝWÆØ±¹Gp°>Wšòk=8°Ì‘eŽô+Ç»ö}oØ"2q¢ªú;Ÿô˜˜Â.]TuGEFæÞº•”Ñ­›ú‚¸óç#_¿N³³3)]mƒbÿšÿxüS>ƒ-L›41©REÿÅ «{Ÿ>š6µV¥gÛ½»]ýúVIIù¥cä©aoK4þþ‚¥RqQiÞ €Aƒš7·¹_½ÓˆUkÔ0 L‰dÊÆôêeUX(35Õzô(KÙ˜åËm23¥ÞÞÙÙÙŠIŠ@ÀæÍ¦AAâçÏÅÁÁbeç8xP«vm…Ó¦©ç;MòÀçf¤eÒ¦aïÔñÌLÙ»’§—Ù€g¿Lî\ó/Á¾†–>­yz¿¸µ##—pÄ„ „i@Ë_Þ½ùpl#§ ÿ¸‡­J'Í–0_™¢¥t_«Unòü …ï”0Ûòm7þèq-J¯æÉÇôÞAœJ‘æ^µšFïZd°ÿ “©¼cÛÆK}9Ô)ÚF;¸ØKj*0’*S¦Œ©Ój;uM¨nÊ™(<hv•+±Èþ»w¶i"Ö¼¢/磉ÏG"çj'ôTŸë<ÿŽögx—©.£ër­6Ê«Ôo„Ñy?iùT6ã—žLk­´èJ,e©'Ë®SH¯œK[•þ3ù"æý†ÇžEл9›Y7} ª”ärNÝbÄjSÏ»¤eÑ¢—7pföʪUœÊËŸ†½Y¶[Ԯί«x}ƒÝ4Ufÿ©iôŒ×MÄb¦Œãvš•÷I¥¸»KªTxyi›© =Λ—co¯Õ§þÀªˆùŽ©õëëW«¦W¿¾Ò¼G``v\œÈÞÞ`èPUÁ[OÏO-[Z b§Â÷ ¢¢rêÕ³rs+•³ÄÿðŸÅ?…` …‚æÍËܹ“yá‚ãpWWÛ  Œƒ?ääH”¡n]ËŒ чÙ¯^¥•â 3JæF CöæÌÉR¼Ñgôî]õÉ“¤ýûßH¥jÖ±ZµLO¢—W¼²1zzB7·²wïfîØ¡4ˆåâbdo¯{ëVîŽJ?Ÿ† uF2ô÷/š4)[O56æÂíyd¤|çN¥´ï ªÛsáZÂÞѪ+÷ª=âÛ«ªÅ¡u\ÚCjñIŒšKó~ø—Àg¯8Ú7f×,^£wkš8±ç"µ‡Ð/#÷ü±ß”NÕ~íZ7÷Å—?æ-¼L'î³Úù^O©(¿@"2 »jqc–Á{?-m擦¾÷¼é ·ãcðœBXYùÔYľ»ª®¶¬—Gpxc9÷ŠÆÛx­j¼NáøæË3Ö·jPIU¬ÑD‡¹u ìÅÊFdKxžÆô@ª_`}¥ßDüUxŸÃ¢ ìβð9±¹h ¹Ú‰û=pU·œgŠøù&<ÑÓ¢~Y^fl}¥Ý‚Ënáz˜Êf´­ÆËé8+DŒË ý/¬ðÄX—CñœŒ¥Êlxà;z,cçU>¦°Ñƒ£Ói¨Ùrü<ç± Y‚ÏÊ—Å{+þ»hR*!’ÛhæÆ²m¼ %%õs ºÂØ’h‡~›~ÔkÅ•„¼åê¶­Ó¨¤Ë™-X±Bã޳瓿F·n–J—Z¹œ;w’ž>M4H=aŒŒÌzý:­B#—’ÂþÿŸðO!X€›[Y 00ûû—¬­õ­ê×7ð@ýú €Þ½«FDdùúªÉ»)„¾ %xwݳoôuëZ:8”)*’=y’¤vððávB¡àæMU#Ç« ­- ÌNHPº$.\h\½š“£”-^l\®œ04TræŒ*q»58qBûþ}ùβ۷ÕÇ:ÊÙpõ }zžÁú-ì9¨öˆâø¡3Áר±-!/0‰1‹xTâó|A]{6LâÈbÆ»¡«Í»Xzͦ÷†ü1&ö]è­9ýl69qÄ݇†ý÷Xí 2è&Sö •Ëõ£,®Ï4~uZ Umßi¤ß£Öó—éþ-éÝ€X‘UÀŒÓütˆOʾ@€{#L¤Q>¤³È‡EÞˆE‹¤¢‡ïoû㇢¾ ´ó”%‡™.Ój5€C.|ÈaÞ3Üïáñ€%L¤þȸGïÛüà‹oL«YÓ´];u­ àç÷þ}–¹¹žV‰z_ÕBÿ¯ù÷Ç?ˆ`µicÖ ñíÛé¡¡yß¿:dHå—/3ΟWEžzõª¢§§uòdx)ÞÝÊIcK­!%´dYÅb5ªf^žøìÙHµ#¶«XÑððáiiJÉSåÊúãÆUˆŠ*Ü»÷“²1:a˜¿u«Ržjj*ص«Œ@ÀäÉÙ©©ª¢S½z V¬(Š— yóF=Ç22äÂ1~YÉó`&ÌdÄ8 Õô t´áF¤˧ҶÏÐj ÜyôBý±ÊPµ<»gu‘©Q™«÷é9ƒÓ¹r#òÖœ~&Ë불»(üW@HŽà­žË^«Ý¾&#D¥‰%ä·æ·šîÑ*Ì(S©òOô;~Á¼ZñpkS.NæØÚ8‘LíE¤êRkZóhË;“”Ãj?Zìäíw”ûÑ{Ÿ<Ñ7Iv@+NÖgý†^ãü·¿Œ€€€ïßÅ@‹„»q¹#Cí Nãà;\¼èy‹ÁD*Øþüåx‘ÆŒ@*žeÍK®~ÄRÚæ„ü@@Ozi@­¢²èyþžDe1¸&/G0®ª£.„Ðh;‰Ùô©ÍÝñª´$2–yÒm3"1£\Z†³J¤·鵒͞䊘ۣ3¨[EÝÕC‘˜½qÈ¡k‹Fóî,µ¬J*8"“áy‹½èó3ç®Óµ5çá˘Aè•VAùê j7gÏAŠŠØ²¿«T*I¦rÞ<éÊ•2{{ÁÑ£ÚMš¨ù&år<<2<(jØP{øpåi]xó¦pÓ¦ÔjÕt—-S¾:t(!<<ôh[{{UjGFçäH ª¤Â÷ Ο¯¥%ps+mÛóÿðŸÅ?¥‹ð3æÍ‹ ÈêÕËjîÜâáøðð'§ë––º‰‰?|ï¨ójõsU D]„Ÿ¡¥£;=Z)SQ‹§O“›5;W±¢qlìµå=zÜ»q#açÎÆ'*ÂïßÏlÓ&ÈÆF7:ÚY__ñì{ï^^Û¶ïÍÌ´""jXY)­'80#.NV«–Öª "d2~üQz~}ÁíÛÚVšØž<ÇØ©äå3¸?k–PE©º²*¤g²õÛÿ¥ôäÚ‘ntjUšS}Aj&ÛÏñêuB£O‹Æé7à:¯]ý¦é˜šù4R¡¾nic7N32Q#F”Ř#x½˜Ñ…ù®X©|xÆà~š÷i´·çÇúx4ÿCÄa™çȨÔЯ7¶kç\gýâîÇ‘'æ§zÌo®Êº¸Þes8‚ÛŸJÿ½*«ŸuÌé]™†–êÉM©!•˜Âµœ‰ÂÖ€$€¦V ª†»=e5Û|Kdì æØž&b®ÏÚ6ªr‚@˜5~¬òÒ]?¨ \}Lgòq<ƒÑÑb]¦wQ¸’Ë9t‹É¿RPDïæÌêKkuv1Ÿq+ÅûxñŽÊ6T±eÛôÒøl~îÜþi„} ‚ sÆ2º?FªXŠÄƱqÁ¯¸ÿˆ–Í8¸ƒš*kÎ¾ÇÆÒ}ûäÑÑòóçµz÷VÏ)5*ÓÒRRÖÖVÕøY³N2ÄL…ö•D"st|UèåU¿G¥Uðb±¼bÅ+ÉÉ…ÁÁ]ë×Wó³ÉÏ—XZ‹eII£--U=£%î",•ä²ú3gý¯‹ðŸ„Ž-€K—°–5L¬de¥w÷®Òt…žžÖ¨Q5ëÕ³*E/aíAC̪”¬,Qß\©·¨&hÒĺoßjzzZª/u;Ö¾U+«“'UÝWëÖfC†Ø˜˜h]¼¨”öµic4fŒe‹†{ö¤+¬]kjl,8{¶ðúuU& B!Gjõé#üÜ”¯™çû<ö¥C^„P¿§ÎktT1X˜±bÑwY> ¡·‘tA¿ \ôA¦¾*L1ô™­³fïNu˜®{èkv•-´ºl:ãå&ìJ(Î7~uÚÂ{Þgv•íÐãÙÀ'³æ×ŸipS]€Í¶ צò›Ö¼üHE\¥j¼³ÁÓ™êðóEZï&2 &-¼»:ÔtkRŽëýÙÝ[cîÄ2òS}ÉѬ¸ÊÑ”µyÒ‹»Ý[ƒºæ$°<˜ÆWh|…!wÙÿŽ·YÿžŠx‰Œ 4¼ÃÍ«“L dÍ+ôµH1¥O{Ø‹™µ5eWAI8Ÿ`Š/ú ¯Eèh~VÉ®B“iµÿHœ¬ÙÚ›ƒU±+¯W4]A®ˆê6øÏaFWUì*!÷-LÜKC{†·çøLØUL"S6Óe*ºÚØW`ÿÍȤQwÞœfæUíÛ¯XW­C—o ÛÍë¦ì£y 6ÂJå6ÔÝ—êŒ:DR6®Û˜Ù•Unè)™ŒuÙÚ›«¡¼Mâa ã.0² ¢¼sņY›V¬]¾) ÷Út«Ê†@6?# Ž‹lhÇÀ™ ¸ØàbC¡”€$.Äð2GɼHãB4€ž -i`A=s*SɈÊFªœ½ ¥Ääò1¨ž§‘-Æ3–| -x‘ •3£6ý«Ð¼lÉãr˜w÷™}Ôµ cÆd:9iÙÚjõ﯆»Ì›‘!­[W_Ùäö>>i©©¢N*«Nü=ýþ}®‡‡F{ï+W¢ß¾Í:´„¡Í¾Æ#sµTu?è&½6>®õÐ10h:~j³IÓµõ~_Ä6]æütµ ‹cÝÆvSsr9Ûo3ç-HÍáØªL¡¦æ1Ë‹ko©bž[ËØUÀ7­ ƒšMîQwX±Cž%2ÕÇñ8æié-oÅ€R­¡™ÜIämWc‰ÉÅJT.6¼L'G `c@yCL¨eþ{_£c¶¾!£S‚Òê˜c¦K@U‰Îű ímijE§òT.9áγùkŸàhNf!ו”"-Ÿ±çÉãóOS~h IDATŽa Ù톱òtb£#“áû–…½XÒ[óKX}–3Ä&á\‹ß¦S^ƒ÷ÃV!¯€»/pmÅîÙTR´WRaö,“qÁ‡…›°4ãYÊ1}cÄàÏEUÞE²n+~wIL¢jvn c ]Ÿ±˜±c¥iiܺ%;sF£Ì °`AŽ¿Q|¼48ØÊÜ\Õ!ÞÞ9k×&ú$yöÌÁÌLéD”3}zDa¡Ìß¿¡2÷ ;[ܯ߃„„Â7ÚTª¤&â'—Ó»·WBBÞ¡CëÕSé|YŠa©ŒÔŸ9韞"üÇ,_ߌN^Ô¬iôö­‚½žƒƒ×û÷¹÷ïwtqQZïÓªÕ…‡/_îѧOÉ«`[µrb‘ªº¯Ñeý¶zÃF–â]¾ ZµcQQÙš6UÓ¢òâEf§NþFFÚÑÑ®*ØØŒ[¶|5ÊöÐ!¥ù¬×¯ ë×§«+ˆˆpªXQ) “4hjm-8yÒÜÅE |úTÞ©“¤n]AÓ¦‚-[JÀ±ÂÞñÓ$"²r!3'¡W¯£ß!–pýk÷ò$C,ÍèÞ–£©ñÝT&“>8}ÀÒ{E%Iqý‹(Ýz·Œ=’tT=?ÚÙñF/Oê%üžÿ³ïԭê e*)`CQIÌ:ÈÅG4vÀÖŒ½“¨ fúåy Ãö–€ž6kû3­³CÆó!¬õ>SÇbó7W¨¥»eÐSQ&çê{¦ú“0¦>?×§ñŸ˜ÄS y“AP:™E|ÈáQ2ñùX› Юw¦ÖbÛ[€ †¤Š¨dD=sj›QÖ€ºæÔ3Wãl£29Þ1ç.v&Ü‹c|Cæ6£²:¥~ÿ÷ ?ͧ,ê–cMw\UÕ×q7œÁ{IÈÂÅ‘µn¸8ª•Äà < §S}ú:3¾»zKÍì<æïaï%d2úwdb?Ú5TsH1Èdœ½Î¹\ôpªÆòé¸u)¥ò¤¦±q[÷àPOñ¬_Ψ¡%p¾ú‚ü| \¿.·µœ=+tqш]ݼ)êÞ=](ÄßßRõ,$•Ê4ˆxýºpóæòÓ§«*5*ôÈ‘„3*«0Ž‹vwÒ¾½µŸŸz½ÔààÔ† ÏT¬hüñ㵃ÿG°þKðÏJmÛšYZêäæJß½Ëst,¾‡íÛ·âîÝwï&« X®®U‚‚R=J(Ášú!qKE ©\#Éðw×=ÿ$ÁêÙÓîðá°»wãÕ¬ Ìʔщd¤¶n­ÔyuâÄŠÛ¶Å夤•-«x>ªSGÐ 3OÏìýûÓ–/WÄrrÒÞ°ÁdþüœÍ›ó4ÐQáŸ4m*¸pA»gOIt4ÖÖ²ùó5-träîu6ídãNvàÞCϦU .mút¢O'üsþ{N²ï4!áT«Ìèþthùû°§^çµÎÏk z_ìpM|šE¹Fo/FÞB&Ì«9tX±¾j{¥F™Um8?Ÿƒ·Øt‰kϳƒáÜFÕ]4¶#h)óγÃïD²s(唇âú×åIØåäo[üšUí¨]B}èQÃ!l|Ê™Pž&PÝœ%ÎÔ)•ÑJY}ÚÙÒîÛÌZºˆ9„g!’Ò¶€‹ Cí1×Å\ ½O¼®Dr2ÏDR*s­Ôõ²ˆ™wƒ{ø”E몜L%å5629›}8HBíœøì]y\ }û¾ÎÒißw‘h/²&„”ìÊ–ì²EBуìdDöìûQ(Ѯš’VZµï{g™ß=/:êÌïïy?Ïó\ŸóGÍ|ç{朙3sÍ}_÷ußZ.èXð{‰3Oð*Ý•°k†Pð© ~c>‰ƒŽõs±s)%ÓÑï{ÈÃãpxœG\šša1 ¦bÞäÎø…þˆÒ2ì÷Dr‚‚Á``è ìÙ ¥v}nAQœœ¸ÁÁ„¢">dÖ ¶ °wäH=‡Ý»%IŸñîÞ­,)áöìÉrtôSRÒüî] Nst$9KbbJ…„è¶¶”Êp¢£ $%YcÆt°w:Et>Mò/áïÁâr &“^3rd+¹ÕÚµGæìÝÛsóf ¾MbcË,-ûvKK›ÐÞ´?–›˜Ü“”ÊÏ_H¥°ögœî§SWLnO@\IeŻθB|CXXÞ„ õôdß¿ŸI:øÐ¡”ìì4.^$`ØÒ¥).|mó ü†´´¦‘#?—–rRSu{ôh÷çÛÜLÌŸ_åãÓ°l™˜·7y)‹Ÿ±f ';{÷26oîX‰F\</YÒåüyAŸ§¼¼YO/°woé[·†*)‘GVGŒxðêUѽ{㬬4Hw8‚Õ¾Éí¯€–ýO`ý«}|ª¸¹ñWZZÊh³ÎÄDN\œ™™Y›–Ön¿(9 µqa?®ÆÑ­°Ô Ý-1pæ«I|ìŠ f¼è¸“ gbÅl°+VÁ;ù õï®ÒØõ ÑJ5mÝ»¼½R·z˜£Ð­`P¹LuUÀ¥58» uxüƒÿÀ}2S{ë~¸f‰F(­Åñl»ú¶ªÿÂ?ñ7¬a÷Xú ÏºÇ(mÃTîOTUU†»ü§bÇP¤Wàq&_ÇÊ`gáöÒÛÄÅå$Xùâ`Þ¡‹â¶5f‘±+G£1û’‹` Œ[s±Ù\aŠÍÀ˜Ãþ%)ìš‚­V‚'ç`ò{QæÂiGrvõ0 \ð ÂBر§7PeW-ÇîyVnÇh;ÄKg÷Âç–Úþ»ª®ÁA/èã†jja9Ïàҩγ«Ç 33NVàÌ&EvàÀZ?¿Æ¯_y{÷J fW¼¼J¾|i®«ãM™"ˆ]±Ù;»îêÕ,ch4X[+ˆ‹3öï4LCƒÕ«—p]ÏՕĈkåJq ¦œmáÂ**¡š3è‹Ñ™L¸»ó6mêÇ £…gà숱£àûV³0r"’ø ž(!7=%xÃtÅCCŒKCi­#2¥Ìn·Zú43ÛÕX´ôi– ÙÆ*ù@XJÚÂíÀü'‘]M†°ˆ{û°Ø*ò €‹°ÒÅ¢Ÿªrðߊùæ(©ÆÝhôZ‰§½²h4¬´À©yÐSEJœoÂëÙwë©ÈÔ‡n+$"$ºÁrü£…˜bø§Ž{ìy|ùiÇz÷îÍ·DQ ;M¿NÐU•XµÓX‚wi·ˆÍ‡K8ÔÏ`k2+ÑW }ñÞ«ûC„ŒU°¹8…iW…î²p¯ÉmÿVXU©'°æØ\è¨ |º´¯Ðjh†ÃIÌ8€ŠZh©"æ Œ4Hö'4«p;⢘e‰ó›¡CÙn7· 7`»vp4$Å1o2.`í¢˜’üŒ¢bò‚Fo¸@ì+Œí®ˆ ÄAJ”—cìXÎîݼª*LJ¿|™A½x%)‰³pa%‡ƒ DFŒ ×¹ºÖÖòÔÕYƒ ªõ#ŒêƒÆfì»ÇS¨äêŠ>êˆÛ†uãR€«/`yy ^DªßÈ!šãD…Ä{Èáæ\EqT7bù=¸G´ÝÁ²"Øh‚ÏËpÛ † ¨nÆ›"L¾Þ—à‡|òTöïDZ<ã u¦7ñ±M\Xv‡‡9âí°À, "îÄB =‰«ñhfc© ÖÂB`C›øl pC]¤DqÛž³¥sJ0q'²‹!ÂÂQ{œv„„@ßþÆfl<…YÛ‘WŒ©#ñáVÍ /0lA]¼ósâÏšb6› EE\¸ÀX»¶7²²2Þ¼y•Ʊ¦Mqq!÷ꈭÏÉiÖÑ`:Ó‚ˆˆŠ¢"¶ŒŒÐܹ$Uy~~y#F(.X !)I)$XTT?dˆò¸qêJñ/þ:üý Vbbã;U­ÁG–KH¨óñ)ÎÈà§,]KKâùóÒ;wrÐ>úöUŒŒüJ1,ÄŠ®î2={͜Ӊùù !!¤¨(‘OÅ€^V–¥¡!ñüy± $©°0}òd…ˆˆŠ£G SP`.X [¿n]`¤¬L?vL*:ºyÓ¦šøø?Sº-Bö`eE¿ŸùáïäIÞìÙÜ&ì¡M aÙB¤¾ÁŠÅ(.Ã]?ô‚;ñ9KÐVåÅ…Ïv,!6ô’~Q˜h•}æÒ˜¯Å¬O(œ{-fÕ^Ÿfá¼WòAë%nÓØ”zÍñ{:ÁË[L±m݆”8v/GâuÈJB]Ža¼¯>’@ %ï†û"dãôôwFœÀ<£( ‡lqË_+ž»ó8ñ²¤†ßfb¤ÞÔoÏ0ÂÇuÞá™ØˆÇðŠZ›!:&káùl|\ŒiÚhä"©®‘p ƒ®aW,Þÿ·DZ<ñÅðz‹þW {wRð¹Ý¥0Fö¶…•&¥üF#ÛžÂîÞ䡲'§áÜtHµoÕ’²™%¿¶Æ‚æˆC_'„'‚Gà•œ­Iö'!ÖÂûjê°c .n†&5ÅAàîŽÃOÈËÀ@ ©ÁزŠ¿ PÈøŒåk`ç€SçÑÔ 9Y¼DtPgÜ­øvÕË‹7l‡Ë¥ áÝ;¡1c:‹jn&¦L©øð]RBܽ+KJ=y<8PÄá3gÊtëF’ž;r$7"¢bÊaa’ëùó_"#K&O¦txrrj<øœšZÕ¯_§ ,ÿÅ_‡¿?Á²¶–RRb>{Öê¹XD„nm­ ¤$܆Š|æLuaaú»wmÄ·¾aêÔžBBô”ªrõÑâêÎ’ô`ÈfY¾Ä`ýž0ëĉBïÞQêl¸xqeccIr6Ë–u¦gg7fe ’X9;+¨« UVr}|}Ÿ&N^µJœÃ!¨«©!ÐZÄÓ&,-iAAL<}Êstäuªê@Z k‘'ôPÇáX² ó–ác ÿÈÚêª`õ kµ†¤_%ø¥CiƒN)œy*i/¨OsY†L¨›tì1F])i ·ó#º $wàÖQÇýp™…nÊx—†Í§áä‰j²x†åãðpzuGj>¶ÞÀ–kàŒ3Yàƒf Âûä—·k*õÒoåª(Žƒ² zJH(ÀîP,óEi]ÛÍž†<ÖBþ øMÅÊ~¨iF\!vÅÂáTOaÎcœù€¸B4u8Ü \ïŠq,ΡP>‰9p9 ïŠ!#Œ>J‰ÏËð‡1zPnÊš±çqø9jšà<‰.$«ÊzÌ=‹s‘`sád‰€5Ðl_Íáb¯Ün¢¢SÃÇF=a¸<콌5GKc¼ºÇé n· ü%lWÃy7²óÑG¾§à½¹_(»6ý«×cÉjœ½Œ¸x¬XŒ¤¸y}ù3ÆFj*akËÙ·ËfÃÒ’ÈTë æ{ãÆš´4N×® Y*ßÏ­[IIMœ HüE¾|iÈÎn¦ÛÛw<29¹šÃá)([Xá[]Ð¥‹¸™Y—έSó¿óúÇãïlÓ€F£=yR3iÒCCáZ9÷”Z['öï/ÇÿÉfššssëÓÒ&hk·öæñCÃ[))oßÚöïß™‹¢„÷W|i;&¯­»(âu'¦m995ZZ×ÅĘ¥¥K˜L’ë ›ÍÓ×’™YûîÝØ¾}uÈrvN;v,ÔOÏ×·jöì%%fjª®¸¸ wol$–-«JJâôèÁ¸wüù²‰‰„›/&†`0àïÏ0 ó—¡¬ì÷„_**¡¬„¾½±ÙC¡¹±1ú²§F´‡"¯ Jý•©ýLji® i½¾L"ñ®pvt‹T‹ý£˜­ºÝÞU+”ÈÌøPÛ€WøïR¡¦ˆë0E ëU ›qè>¼ƒ_†!z¸¹/ﯢøì)4Z«Ø£ýˆíô'¶¹I'cq4 ùÕá‰X0d§ÛO“p–ƒ¨\¤UàA:¤…QÓ }• )ƒ^òP—†ºTÄ¡)ÆOG»ª e (¨Cv5Jê_Œ¥bàåW0Gr¦jCE“z²;¥<àȯ¦'øRŽè,ÌêƒÕÃ0”¬Ê=î fžÆ—R ìÍ0µýÔ1€¢JÌ:ˆˆD˜õÆÔÁp²"Éñåácˆg[l[LÕã*·.{q/fOÂs̵¦šOü\.?Å~O¼z9Y¨u™)Ö­F÷ßáÜÄãáüyž‹ W_ŠŠô5kè \µàðáºÃ‡k%$è>>2}û’«ÅË˹zz©UUÜ;wºO™Bâ*ëä”vüxÞÚµÝ<=µܲ%qß¾äµku==)ÉûgÍzvçNú¹sæK—RïvئÜn¥3 }ø§Û4üý VSOU5¹¼œ›˜¨Ó«×÷ð}c#OI)ª¶–ûùó ~]ÃÂ…¯®\Érwï³aC»ÕëW??q"qÛ¶»vQhÖ¸ÍMÉ÷}²ÂC ?¼«ÊåϬ,‰z+ÛSàCqG`hx+9¹üùó©Ã‡“<`X½:þĉô ôÜÝýòâãk ˆSTded i))hÁƒ3^¿®wwWÙ°ä¡-5•cbRZUEœ>-íà@µalq1¦MãÄÄÊÊ8wŽieõKz9y¸|îGQß:»Õæü¬ú]y…?¬¦+DIÌ|':–h?§Dã4‰¥ˆ§<¤âZý¢”=ré£Þ@VËfÁe1:J³’>cÙ~¼H‚Ƙ`Ý\¨QàùQ1×¹¥ … Ó`+P ãûÖûáû‹?.cIzÍ~Ìb ꊒQ'•@WIˆ0aª†‘]1¬+´¨ò¶B='c±/ • P—ÁÊ¡X;BùAàT8ö"¿Æ=pgz …¼H“7Þd ‹|6”¬ÊÅ/N =‡bÍ,X Ì9~‡‹“×på>R?4¬·ÇÆå—±75áòMø>Dn>RÒ ¨Ç¥X¹Š2•ý ÄÁƒÜ7‹Ñ==2ä‘ùqëVüy•ªªŒ³g¥&L ÔÖÇÕµààÁss‰ÐО‚ygi)[GçEe%'!Á¤W/Aº.‚€­mLllÙƒGŽ$`q¹„²òŲ²ÆÌÌù={’µøþ%Xÿ#øû,‚ ví*zþ¼ÎÂB|óæVÚCW×Ì[·ŠV®Tsuå}ò¤`Ó¦aaÆ«Wí:h?^°fMTc#'9ù7(¥. Pñ9ãÇ%¦ë6Yëúë3·àÀø ’§MÓtwB:øÍ›Š+⊊š¾|™Äø9DðRŸ?¯tqé¶t© Þ[·n]ABBcJŠ®€æ9-xü¸éàÁÚØØægÏä-,¨z 75aÅ nr2ÀÄ„vèƒõköÄÅÅÄ¥=gÇ–íÑ$Ú()íHŸæ{ôÆ?Åd¢²rCÖlè·x9Nÿˆ]ÇQQòJ¤gÁnÜœ¡Ò‘`(‡3ð0 áñ†Çj,!‹v(¯ÁÊ3È+Côг«Ú¶Sâò¸.w¬+ë[9q°¹³wZ¯Ñ¡Ð7(ÎA£!µ‹ao‚Á¿¦Ð­gãc’JPTø"ÔÃë¯ ³nˆÌ€5pô-¤…¡- !:Ô¥ #‡®0T€,<9¡O‰÷ïùË…¸JJ~uuœÏŸ'jh´-–âpxÚÚ×UUÅϳ04ìÔñˆ9´÷Åу?.‘ÓÒY÷‹Ó~CDD¾¹¹Ÿžžì§O”è ®n`ZZMHÈÈQ£]}Ÿ>-³¶NTVf}þ<„ÉtoŸ93Çǧrþ|Ù«WÉs;vÔìÚUÛ­;:º«ºz.©/ò–/çr805¥Ý»ÇT¡@ÚD\À=†ïfíÆ6ª [ú4‡IÚÕÐi€YEIïo0«þ”‘љ̾vKM×o–lõú!Þwpæ&Šrøc –΄|Gп–`¥üžÃX’⸰ ä1Jœ{Š5çPß„!z8é€~šü^ =¶¹Õ"‚öòó¼òîGç`épr&÷îCRtm¯ã1(ªEM¦õÂÞqÐý­:ÝŠFÄ~EE#2*ÀLf]5HÀ=)0X‡&`÷¢°¬¸‚´"(HàÒLx«n€ÃIÜŠ†6Ø5—¤Á_zl6!!`=N¶”R{å•p;Ž+÷!‚¸Nºa\;ÉåÄÄÄŸ]6~D~nú`÷!ÔÔ‚ÁÀs,œ ›ÉT…_¤ øùñŽ'ÂÃy V­¢ïÙÃ([m›‚e# IDAT‘‘M“&UÔÖÛ¶IìÚEÉé€Ë%ÆËjhà *v𠉓BC¯oß×**¬={zNòÓuv~wìXš‹‹îáÔòƒû÷¿Ý¼ù¥ƒC¯Ó§;PÐa‚õ ~‚f~ýO'X‘;€áÃÅG’èÒ…_ÿãòqãä† “‘‘aþ\K(*ÊX¹R{Ô(•  v…ÓL&ÝÖV[X˜ñ蹇')ô§Îà[Rž‘Vü1ñ×gnÁ°aªffjJJ¢Ÿ? ôü-Ò9R) €¿‚ŒcÆÈ)ݽ»ˆ¯/‰(þÀ##‘ÔÔ¦wïÈÝ"vì\¸P´woÉiÓÊëê:ð]¼˜ÃìуÆdÂÎŽÔáŸ÷û°'/ìûéݘÑ&»Êb—;ê/½V»bÔÈDyÈDîÿÆ®º6ôÜb—;»ÐǧÜ€ãÑ[ egÐ@¹(²‹"¸ãÎ46ƒÍÁ¸_©o…ýX¼=ŠZ…éì¼ >O·ð~y»ŽÊÀ¡šÝi4ì{Œç‘KÖe §F·Õ¦ˆsÂjSˆ ¡¸3®Ãö:’;Ù¡ ÈŠ`bOÌ3ÀNSì4…y·ßÌ®^ç`ÔY˜{ƒC ‹¼§#Ú‘œ]5qà|“½ÐC#õðÞ„]¥æcø”×@J >®Ø·€„]ÝÄ;H‰CG‡á<“»ò†þX¼KFC#þ°Gb`»ì €ºz»ñÆœ<¬\; —ÓÁxpwa;õ·±«øxbøpÎ’%ܲ2ÂÔ”öú5óèÑN²«˜˜f[ÛÊáÃYÎÎâÙ€ãÇËÊË9µµ¼íÛɃ{7o©¨°dd˜¤ìŠÇ#>~¬25Uœ3‡j87#£ÊÌLm̘®Çwÿþwð Xt:zõ‰Ž®¿}»UÙ?‹E75•ª¯ç=|؆#ù€²!!…ׯg ˜yôè®ù—/wʤ²5ä´t zñ-Lñ»÷ë3·€É¤++‹>þ5(ˆ¤4¯Ó§w‹ˆ(¾páKCƒ ò- Ó§+GGW:D2m¬9sd¾~e;9}%}ª¡Óáé)‘Áyû–½pae‡ž‚ ¢½zÅÔÕEX1agÕ*n9£€Ô7/œ,5ÏOèU÷þçµåŒ.¾2®×d÷ µ{ƒ¥7×J¼¿&ÿÔ•Uð§³§¸’Êx¯3³î(ê xë^:ð9Žýë!)ŽÊjÜxQ8{\Ê¥s¶£q Zjhh‚oÆ­E.ÑëŠØC¬‡&6ÜnaÆ~ü‡3Uç}úÊïJ?ÆpÚ¥%¸ëˆIG¯m8ËoðÞ ÒÒÒ¤E°g,27bŒRŠq7½=áòï5 øë“…‰±.a•>2\±ÌDgU >`Ä~ A3Œ¶j£Ûw¢0p ²Àæ"Þ 6¦‚7±á|Ó7ÂH šjx{}IÕPTŠé+1Ób`2ˆõK!&ÐO«åØñ!=KVa’-N_›.ªxñ ÑA°×yi<²³‰å˹..ܘBD®®ôçÏ™ýûwröØØæñãË‹‹yêê OOª¦ììæmÛ ããöìQ– 9ÞÇsž?¯œ=›œŠEE•††4 @É£¹™›“Sûõkݰa‚Òÿâÿ‚ÀÖVFLŒž’ÒÈw«4H:5µþíÛ6Ì ÇW•`64ð Úµ!07甆"&,ÌHHhþ£ÐŸÂÄúäw—R:j;V]AAäãGJý µµ%åTTDBCÛwÿˆùóU…Øl"&Fmy6›(/ç÷Öo²²´‡eed艉7·Ž¹O**â̦‡ƒÅÂõë¼… 9QQ‚¾ÆŒoÜ,U=MKC^ÛH“•´ó–?‘,ÜFëžÐŽXúS¹€µbiAàqЙBý—8,yþÆÐf6ÅûÏ #<¹ˆ«ÐB<‹AÓð8ŒÊ¦ '…‹[qojëüóÝp–ß"”BL¸ÍAðt‘CN)æÆã8ýthíB%-*ß¿ûã{ãÕvôQGuÎDÀñ*¾’øo€²¶ŽBú8 ƒ²$ν†ËcL¸ˆðÌßx‚ÿpx¸›€¹·àˆÀäTb«%2\±r¨ göÎFÂé:DXÐP@¤+œ,y6.Ãëj1ß¶AS`F;»“7àæ3 aþx\ÞFb:Ú‚»˜¾~ÁÆNg„^ƒ®@LJ6ñ)ë·c¹3.^Gr*Ö8"17ÎÁˆÿ‘°óÈÌ$6là.XÀ={–—”DlÛÆHMš3‡Þé¨Xllóîݵ55Ä‚¢§NISŸgÿþb‹fk+3i9'{ú´ŒFƒººˆ ¹b=4´PEEdæLªu•oß–æç׊Š2)é_ã¿óúÇã¡Á@04Lûô©1*JsذïšÞ†žºzLY;=}ˆ¦&ÿI`ùK®Äàx(JªQÕ€ƒ¶°A5ŒQPÃQ¸›€ü*¨HB‚…e&X0 ä®ÚÿE×âöx>GvŒT!DÇD}8 ƒ<µ“.§ +¯ãñp-V(ôþZÛˆù„þZp{²Þ‚1X²Êr袀½è¯K2@A1VlÇ£0hb„ 69 kÇ%‰ŸÒ°s?îùƒÅBW5Œ5ÇÚ•Ðì8E€ìlbß>ÞÅ‹¼^½h))„ƒÝÅ…Þ­Û/ÅÄ"#›­¬Êµµ™£G³öî•bP¾ÙûøTΜ™£­ÍŠŠÒRV&·r6ìmLLÕ™3ºË—“Xr55ñºtñ¯ªb'&ŽÓ×§NÛ³çͶm¯œŽí˜ó}‡5X¿æþÚîÌ‘ÿj°þ Ñ`e% àÁƒV±QQúøñòû÷Û0áœ2E ÀÇ‚tHÓ¦õðèÑ—_?‘¤Ôºªýd8ùé÷e ÕÔÄ åjjر±$A©X[w‰Ž.½?¯¸˜D´hQQQú³gå?÷ÏæÃŒÒ¦¦â……OOA¢[ ®®nfÆ:uJ:2²ÉÕµæéSAަm¢o_Ú©SŒ-[èL&Nâ-Y¹y“×r¤Ê ¿>Û±„µ­×à¼ûm²«Ï¬¾ç伤V `WÌŠ,Ùˆ=2QߨUÑ器™PµÇ_9ï#I§cÞdøžÄl+ÈË ü%&ÙcÓA”RóµU–Ã1\ÝÜ"¡«N9°+.®bŠ+ŠÊa¤…›»(±«»O0jüC #…ÍŽ8¹³cì*:::=«Öc‚ ü $„Åóæ¿“]%&ŽŽÜ… ygÏòh4ôïOKNf9ÂøEvõðaãÌ™55„‘³C쪰³m[ñСbÛ¶)SaW/_V¿|Y-//4où—RT^Þld$C‘]ˆ-`jJ©_á¿øÄ?%‚àdžùósKK¹¹¹z?Z—;;§ÓéHJâ'7õõܱc#Þ¼©HM ®Þöµ– 0yr@hhÞ³gÖ¿þKxwù\è–u?.“WpˆOý±?ݯààÁx/¯„Y³´¨õøV­Š¿u+{ÇC''’òc7·/±±•††¤>{IIù>4DGkõéC©ž{ß¾Úë×rr¸ÁÁrC†tÆ}!1‘Ø¿ŸO¤¦c,+—u’qZ‚¨osp)³kˆÄâtaAžBôÆ ñ÷E>GЈ?õät¦ôÈ%>¥Û› ž›/Ù2+—bº5¨·¡ý啨y _òð8 r2ص³Añž‘[ûýøüRâ01Ä¡U#û¾ã3q(h1K¤U#ž~êÃ׌öho“/q! Ÿ¾¢ªÆcË$k¨Áåáñ'ø'#©q¹Ð[Ô0Å£u FnÙI4rõ>p? zJˆÍB?5ô”…½ Æèt@Qô-peÜ=q|. © Çaý%˜ÅÄE'( ôŽ/*‡ƒ;b`ØMñÇò}«¬Æ*7Üz„QC!&‚Ó» JÉ0ü;róá}î^àp0b(ÌGÀÞj¿õ.EܺEœ9Ã%XXдµi6Ð{öü J®3gêöî­“•¥-äá!Ý!qØ”)YQQu3fHŸ>ݕʆ)ÑÑU‹wqq!ÏúÍžýâÅ‹2WW½+(¹r8}D‰âbNDD«ö"ææ²eeìëù‹‰1ÔÔĹ÷ï·á„Ô úúrõõœ[·(7 nºVSù¸T}YiN´@-qG0t¨ª††d\IÅß7Œ¡X^Þ|ë¹.~æLåÊÓ§ó ø{Èð¡W/‘qã$edy›4oÚ$1t(«®Žpq©NJâPÚ¦5z÷¦Ý¸Áp]_ç:nãyÅž£Ó·É®h’O%—yËÄ®¸Íb)䟬Í ûÆ®º¹04vÉ÷§âÞG±x¤¥û N®Ð€£§QDõ+燜 ŽmÇáM˜0å•8sÆSñê¥m»)ãɬ˜†ârœòÅÀEˆO%ÙDA6]°ÐŸ&`“¹ƒqkÆ¢¡nþ°;7Y”vƒŽÉ†¸8þv84“ô‘X€Ëo0å <0úN½ÀëœßÖâH,Ä¥8Œ¿ùØ„ó¯Q^“ðd1î-ÀX]ªìŠËÃùç0ØŠêFȈÁy4n;°«ŠZ,ðÄšsàp1@~[HØÕ‹$ô³ƒßsiÁmÖÍ%ß·ˆWЋþÃÂið;Ó1vUVŽÝ¡3î^ÐPÇÒ¸v;7þ6vÅáàÑ#ÂØ˜3bçÙ3ž˜V¯¦_¾Ì8s†ñëìŠËÅÖ­5+VT‹‰aÖ,áÇ;Æ®®_¯ð÷¯æñ°m›2• ããkΞýZZʶ³#_ÕÔp¢£K55%ƧúU~øPVZÚÔØÈí(»ê „þ;¯_Caa¡¶¶6­õÁÈÉÉ™>}º”””””ÔôéÓsss©¯ýÿÇ?ˆ`pr’9R<  •bšÉ¤-Z¤bf&óøqI«™3»©-¨‹ßìÙZÆ©~úTñëd]L^AÝ”¿xú7f ML”EE™¯  íà &Mêbn®Äá™™üì“zzbvv*ƒIŸ=K^æì¬Ð­‹ÃÁ¹s”Šh4x{K¯^-&&F5ªìãÇs,vsS¸÷¾á=·ÈzÊ ÏÒÒ§ùxKŸfZÛ˜Ÿû4éÞcê•;3nûËiýäÓÕÆ–uÈOÁ¹ccœ<œ¾=c,_‹IÝñ?¡ÓçáwÊ faˆ –oE9u9†µ³ðäúhCAK÷‘˜8„~â?Ù›Tª« ~ei\YŠ  ÑBaíÆ‚ó(#9eZAU ëÌðh>­Ãþñ˜jˆÜJDdbç3 ? éív .pöb³QH­æ¡¤¯rq1ë°Èò;aä‰ã±x•ƒ„™Ø5Éëãˆ?F@™j ?|̇•6û‚Å€š R÷c.É7„”< ߈²ȈãîFì[@Rèí‡Q« ®³~¸¶#È\“›à¼cì ¢€!ýÿsÈšCÿ6^g0Þw ¹3¦ ÈçŽAý7ùÔÔÀË‹§­ÍÙ³‡[Y %%Ì›GËÊ:vìW‚-¨«#f̨¸s§AQ‘¾e‹äæÍ9œÀׯì­[‹ŒÅ¼¼º¨©Q¢Gæš™ÉØÛ«ÊË“øðkâJJÂT•†oÞÑeút –k¿Žÿ=‘;Avvv»víúqamm­……Eÿþý³³³³³³û÷ï?jÔ¨úúz*kÿüƒR„23›µ´R¤¤EE""ßÕ!!å£G¿70ÿø‘?KX[ËQRòãpˆ/_&©©µ[Ê1eJàׯužž¦¿^O›äs#h­ãKX’’ŽïÓ™"¿§düøGAA9·n™5‹B…7°`Á«kײÜÜzmß.Èh@ll•©é[99¡œœ¡ââ$?¯{÷ªfÌÈ––f|ú¤£ªÚö*::zذï…{Í͘6­<  ©KFd¤œ–¥´)ǹ}^!È­+§ ½1iƒžJÚW2=‰ •gH¼»!T–öm SDt£ó Uk™Â‚o1¯àyeˆŒóáXï„qëË ± G.Á팞…#[0ÛŠÚ†Íp;‡[!È.Ä\ÝåŸJÅÙõη&6²[]’â?:Ê Û€ ÓÉ]¦êšàˆ`s1¸kù²1r M;ùIËêùoóð )%Ciˆ³P× &4å!- a(K ‘ÂÈ­DU#$Xx“‡š&ôVAb!hÊ#³ ²£s-˜kB¹S¾J5póDZôïŽü œ_„±*鮄Âñ4ê›0T—×B[àE¢±+ârÌúaD?ìXBî ‘ö6«˜ a<6ÁqnÇ,©?…³+>gÀÒXµ 5•­~z¿‚Œ ÂË‹—’B„„ h[¶Ð§M£‹ü&·wÙÙÜ3*DEi‰‰ÙáÃ;¦"àñ`c“•›ËVUzøPƒÊ&©©õ¯„„h_¾ UU%»ñ㟜;g¼t)UÂdcäë›yñ¢Å¢EVsv8EHVcÑ9Оv>Eèééùþýû«W¯þøYŽ9òöíÛëׯ6oÞ¼Aƒ999‘®ýKð÷`56~?Àšš¬E{ödED´z¸63“UUe‰ŠÒ?}ªãÛ\B‚éè¨Õ·¯t`  ©»¾¾lIIã³gíf©Cg¼5—j®©ùüë3·À¢«¦¦tB¹Æ¼óæu—“JL$7V:Tzð`)UUÖ;äù0é $edèîîíFù.ñ,îÝ“µ°`UUñ6n¬IN&cÅÜû°D§ïc‡öØUSë²ì;2Û°+F}¹Ô«32!;dWš–ãE¼úÇ&Áì €© |¯áÂq8;@JUÕØãx_Bc‡UûÆ&|x )•âä5L²G…óN„…ý+qa T“€Å{ðäÿ˜˜Œ@>vŤ Mh—ŽÛQ»_É,>Ä…±k*ÞîÀ c¼-;Š»ðœ,/Ù&äÅþ4O^‡ò¸;'ÂnÆê@^ Ô6#6ÏÒ“» ¸›€ˆL„¤#.™e¨i‚Œ(”%1»/öŽƒ§ò¶àË&xOǬ>aWk±˜qWbÀ#0PÉ{ÉÙUm#ÃÅ`Ô7a¾9ží&aWÙ…·ao !ŠU6ØeOή®>€ý47C·'^Üêù`W)ioƒÃÇQ[}]<ºsÇЧÿO¯àñðä áèÈ3‡{â/6–°¶¦0“’˜sæüNvØ4{vÅ»wì’Þë×òeW¼¼J>fçæ²ÏŸ§¯»|¹ [7á… U©°«ÒÒæÚZŽ””ÐÔ©ˆÖÖ²•”DÿŸîÿcF£ïß¿?wîÜÉ“'ù–?zôhÁ‚?.Y°`¿¿?•µ þÎ¬ØØfSSá… +.]ún°{øpɺu³gËܼÙÊKwçÎ/ÞÞù ¨º»ó7 ñóËŸ:5ºÙ·oÇ´÷^))7¥¤X‹DEUîo?/=ðÑKt&N¶>{õ§mÁ‡e}ûÞVW—ÌÎ^@>àr Çyyõ¯_66&ñÇ{ô¨ÔÚ:ACC$-mˆÉ/,+«yÀ€tee¡ƒU'M¢Ò¯«#6mª¾zµQHOŸÊõïßvô+.àÝw«Nc»÷öj†|”ø¬Žöi ÛCÓb—{‹ÑwøGÔÔâÆ]ÜöEd4º©Ë…ýB¬YZœ6A¸ì‹}§¡¦Œ¸Dl_…uK)‰ß J±ë"Bß #ÌÁ>1A<¾åþœ¼ŠÌî9z…ùž ·Øp‰YÝŽ0…,Ö²{·_ãt8¢Òп;äÄqt6 I*Ù;€z6ò*QR‡Úf4sÑÈ!$X†”0”%!÷û´+ñÙpº‰˜tèªÀD k,Ñ‚wBl 5†êØb‹ÙdRâÈw˜¹Ý•!%£k`H쨭Ǫ¸r¶®ÂÆå§æ.+Çqoì= ú:ظsm©OFy9|}y‡ñÒÓ UUZ}=±h}ñbzïÞ¿ÙÛ»¹™Ø¶­60°))‰íä$¾{·¤”T‡ß"6¶ÞÌ,@PPQ£(ñFt:íÓ'“=È¿qoïL‡7VV]>¤ê¶ž^©£sCYY¬°pÅM~D‡#Xü%¿4ÿÎD°LLLΞ=;xð`´þ,ÊÊÊ ÊÊß=] ûõëWPP@ºö/Áß9‚¥¤DÜ\_ÿýÛØHÓh¯««k¥C3F®°°ùÉ“Rÿ„?^UFF(9¹:=½]釞ž¬±±rM ›¢Oº`üì8ú9äiS ¥7¤02’WUûúµ.%…RÑ?ƒA›>½«¦¦Dx8y‹“‰åõõÅËË9þþäA, –‡G—ôô¦]»ŠJJ¨ÊªÄÅiJÁ*-å-^\ï©ÿù,fÙ½3ÚcWšp¬˜Í …³ñ¢ãÚeW!’-¸Vü£ï7v%$*:Ôeã°cW$%à°!~¸}Æàk!ÜÀj&v¹£œšÃ7ÐhXdƒtïŠúl<ÇíÈÈ&ßPU§Öc‰˜ xÜÀrwdäñN†oI-xÇÇ®˜ëO0nžíÂÌáx• ›ýX 5dæø4f›à© ŽÎFzB’1êÜüQH ¥1!è(ÂTcu`¥F˜a„)†°Ô†‰:ô•»J+„ý¬¾Ž˜tt‘Á–I¸¼ˆ»ºŽi{‘š# ÜÛD®70}ŠÊÑ]w÷‘³«wÉX¶!1Áѭؽ†*»âñpæ"¦ÌÅîC0ÐŲ…xþ (—¦ À‡Ä’%ÜAƒØû÷ó22ˆîÝiÎÎôÌL¡#G¿]¥¤p/®:x°¶¦†çá!uô¨T'ØUe%wëÖB‡pqQ È®\½ZÀá¶¶JTØ€ÀÀ66TýE¼xQ`ذ¢Aƒ‹‹ËŒ3ZØ***ääZ=äËËË———SYû—àïÁ@£ÑDD ._–ž9óû/aþüÜ{÷*/_î6sæ÷ÈA`Ò¤„àà²~#Fð·”Ú´)ñôét]:¤K—R¶lyѯŸb@À¤_ÜmNSãé>Ú|Œj¼×C›Ù¿8s þø#æÂ…OnnÆÎΔº¨¿~]6w&nv¶©žæÞ½¢?þÈ`&%™æñ`oŸwûvå¤IRwîðßµø4X?‚ÍÆªUU60׬·²ÿ*ïò–¥a4´}V }6}"½¼ž&¨k«ø£Ä»k̪V(š–ãFí;,¥ö;›‚= Ã^HH ð¤$±z9Ö­îL4ëqŽW°c5ÖÛSJ½L‚ÛyTÔ¡‘y¯ÏÀC= >—&ÿ8 ‹ŒÆ¾é·iÿá áÿ ¡0ÑÛga@ªª–Ž+…UØî‡¬2¼ËF}–ŽÀæIP¦jô—!·^Á𠇇‰}з+6N‚Ǫ:8žÆÍHôí cmx-ƒ¨À>•÷ïó7A„„pê”´½½xDDóÔ©§¿ Þ0]Éc¨qih{ì*_H×[ÞËWÆU»bÔHÇ“‰Ø÷#»ª¤i• ¿§¼ü¶d—ßÜçüà IDATruŒ"±åŒê—ò·Ô´Ð›Fû!ÂG£aµŽ/‡¹^§Át<ýÀiß@!'çÏß‹Š4ÎÚáø ×FÇB`s {ÿ¶hÖoG^¶Þ‡öFĤÀü¡81{¦SbW¯Ó0b#nFBBNV8»Š„]e`Ä \ „ª¶-ÂÎ¥$쪡›aµ›°`*Îï£Ê®á~GÂç&ŒÆ¾íxz¿mv…Ž`”–âäIžµ5ÇÚšBde[¶0.\`x ×ivuâDÙ… ……ìÝ»U(²+9 <--Q*ì €O.‡C¨«‹QgWbc ŠŠêûõS¤¾É¯€˜ÞÆkg/€Iéµ³WÛ3tüñǵk×íœ:²²²|©²²²oQ+Ákÿüý Öˆ¬¼r¤ìÉ“”$ÿ,wwÕaÃÄ7n, ž(À``×.‰½ÛKOvžùvÐà¼û ´m?PÍP¼%³ù’¼G ³]jzs­DÂmù§…ó^} Q©2ý Ÿ¿*46ŒcnÎ9p€÷ÛúCMx/‚aÜØ}Lá~õÔzT·@Z×ãñ9¨)£©}&áìmò­d%1sÚEÑ–«R«“ŪÅÏòèwÃS78N€„<ý±ÀŸÚñšéÝ»÷ÿêªàþ*¼Þ†…¦ˆIÇ×è±›}‘ø*C~â³±à<æŸÅÓ$°¹ÐT§}¸ºd½†¼bÄFtUÀMÄ{a‘%É&ao1Ø’bÐêŠk;0a(Éøœ¯0›ƒGafŒž8éaj’î°ç°²Åù+b`ÙBܼ²¾c÷3‰­[¹Ýº±wïæ…‡ff8}š‘›+´g]Só7g[ÐÐ@ìÜYcgWÅfJJôÇ%Ï“‘èä{½xQ¿woñÀb§N©ihPÕÅ7•™šÊlݪAq“OŸªGŽTš=›BRù?¨­e+)‰ß½O §Ýo5"ÕáWÇ‘™™©¡¡Aû¾ýahhøáC+À„„ƒ–¿¯ýKð÷'X ââØ~~߃XªªBbbt!!ú“'­rp}úH””°cbªÂÂøå0L&MKKâõë²[·‰\FîõõÒ¥”_ßíî#ÌÅZ=¾ð8œ´À‡¿>3€îÝ%ssk£¢¾¾{G•±Mž¬YréÒ—¦&roP;;•kƒƒËþ&ÛÄŠòªªLqqƲe¸Ù–<Û±dqšñbá»,´ÍÌØ4‘@É%ÇÏgi/VM#8¢™arOÖ‰¥<ï?óÐh6³–¿x»?ÄåSªØ¨Qô‘#鑑ĦMÜîÝÙóçsüüˆfGÕŽa°1.ŸF°?tµÐ­+6î„Nœ»Ò±^ÈÍñá1TP]‹å[aë„ „’š¯Áï´¹jˆæXqá¶+„˜Ø9¶CIÏÞ£ÿx<ä­õ#jàÒÄ $Ep4FÛ1âÄ£©3²¿ÍÜ{ƒ…0À ×bñ¥ z*HÚƒëË Eͨ3¿ waÍ94s`¤èƒ$Õ‚}W0Æ :êÛËÐëNòèk…¸°98¶•ªÍUE%–9Ãr2BŸ£_D>÷QHvÊ¢¢e·ÃÉѣ9}úpNœà1™8Ìðp!ºDg§%E``S¯^%nnµùù\]]æ§OŠÓ§w¾1/mc“]XÈ67Ÿ>½)ùC‡r>~¬SP`öëG©(§  áܹÏéé5ãÆu@MWõµ¬¬QHèïƒæñ¾-0iÒ¤«W[{]½zÕÚúÏ_‚ൠþþÇoölQMMFll«,ìôéÒÅÅœ°0~S[[%}}±¨¨6ÂT³fuWSýô©ZÀ Ïʪ‡¡¡œŒŒpRÒ¯ ëèL¦öx~ƒ£ß˜%3F½o_Åøxªþâ††ÒÆÆrZZ’¡¡äRw11Æš5ݺw¹}›RÓC ]²²šKJ8.”hâð.EgÏðz®¿9X|¹¿Á–àÙ'c/Eg7sxj«*ƒ=Ö7¹h I¿(J´Msx4F´ØO•›oŦðˆvÏsVQ’ìÓÍ’o/Л¾W0(õ2šý h‚—·˜¢MMÚ¶môFp0sÆ º‘íúuÂÓ“«ªÊÞ¸‘÷æÍïT1šš ";\1°ò pã. Lpׯ3ÈËâ¶|ŽCNU°œÿvûÄdsÛþ‡h ro0Ìû0}(šØ¸ùžÈ¤Û뫎»Žx±ö# -ŠWŸq2 ]ÖÂù&Þý†*‘àC.v?D·uð Æ«Ï…“%"]qmô)ßïFcô64s (‡Û°ß"c"Uµ˜âŠÀXÀ¨xxÒÓM.vÃáó0Ò…•^ù€’‡ž…Ár ž†‚É„ë\óÆÀ~T?x<ïÂ…†¼¼ï ÁéÓ¥óòš/]ªÈÏg·¬ôéSýéÓy?g ‡W”•e••5ÇÄ´+-a˜›«…„äž?ŸÜÞêПŸ%Ì{ý¢:ï÷xÿ¡J§Ó:@gÍRýºìÒ¥/T;:v­®æœ;WG©øQ]]èÒ¥n11õNN_}#Š{o I?»anœsVAy}37ókÅÔιÞkûnºëáV²²ÇàxI¢þGËõÿNtTåJ¸ä’f^»ú fE–Lø™ÈýÌêïÖó"Ò2næF¨ó×°Ðé°´¤ùø0™žž 99š¢"ÍÝklÌé×sò$¯ˆœyR…żí EJlbÒL$w$0:c<><Æÿ±w•qQ´}÷ÌîÂÒÒ) ˆ ¢Ø…Š­ Æm&zØ‚‰ b+ ˆ¢¢`¡  „4Òݱ5ï}–Ø]Ðûñ½Ï0;×5³ìÎ\gþqŽz'Ä&aÂB,vk!á˜Zø12=´Åá¥%†Ó]»|æÅu¤Äpz Ý@Obaú¶]ó?¨ÖÌž¿CO žÓ‘}gfCZ¥58ñÃÿ†Álº…·i`ó$‰˜/8Ó-èá†{PX Q,Šœðœ-y~§*¬À´}°ó@©áÓqضå` Ÿ³ÐϹEÈÌGÐAlˣ誠ܰý"ÞÃa, ýÕ5X¸6“õC &{·A˜o‰¨ÆŸ]u5æØÚ²ÇcGF’998tˆòå‹§'Uïâúv 1‘µdIE·nEׯק¤°Nœzÿ^ÁÚº=V¤ßÁb‘Ó¦eÞ¿_Y\̾{W›F€zyå<^1v¬‚™¿š2çÎ¥GE•M*XífhhvLLIÿT~€ð¯ùùÙ””|òäIdd¤–––––Ö»wïBCCÅÅÅùyõ¿‚!I’ÎÎåiilGGÑyó~´nÛÙeÞºUyô¨ê¢EMî¦ææ‘”]»ô† á.…Þ¼9n×®øµk ÷íkÕ·âÇâž=ýMLäÞ¿·£Ó;jàÕÇ”‹Q ܲ³÷Ÿ K›‘Q¥£ã£«+•œìHá©Ï ÈήÕÒº¯ª*?JR’÷™‡G¦¯oA¿~R§Nñ׋Ì™óåB@>Í6g-çÊÖ5¡”³„Öx3â¼P  |Ëö>ŸþEØpZù.É`´ÒØYÆuÏ|E×Õ‹µUñ@­/kêÓ adAAÓ­0Â[’\Ã…P0˜ˆNÃþ9X`Ã{H@8v_ÀëO°îŽKnÐæ¤xƒÝ'‘™â2øA?s¾N,ü5NœA@0X,lsÅš¥í”`¨ªÂ¹sœ‡9AA$A`ÄŠáèH៨µ)),w÷êÇÔÔh>0gÏݹSò«ìN±m[Á®]…²²ÔW¯ôõôxYYõ¼'I"0°›‰ _©Ð¬¬ÚîÝ2™œ‚‚ñââD°ºw÷-޵75å›é7…À:X³Úw^3_ü_7{þŸ X!! '§255jTÔµ3(¨jöì,55ᨨ&ÑvOÏ/›7§Mž¬tá·AARRåˆaUU¬üüñ­^íÓ¦=¼y3ÕÏoø´iüÅñ[GØÎ-‘§Ž4Þ¢lÚÝ)øy§ýŠo…‡çGEÙñ_J9gÎ[_ߌ3gzÏšÅ;H^XÈ´µy÷®2*Ê¢G¾nI¥å,­å!KÉ‹_ÙÕWCJÜa°çâÓÃ$è2¢¦TxÜ‘Zý™n€ Ú*Z"Ø Ñä‡b w)Ì&ñån=†íú[ÅŒWð¡%44àÑ#ÎÙ³dE™žŽŒ RNÓ§SæÎ¥ôèñs'EÅØá¯ðê-t´á¶3`qIØr÷Ÿ€FÅî5Xå ¯Ržz¶µµ!N–[®ß·½÷ù¥X8‡VðÈy}EH4ŽàÅ'Ô2°hvÍ„„àu2lžFX"|_CT_JQU y ôуQ'«B_ Ú P•­õ5·°Y¥È.CìÄ~A-Aq`¢Š¼ Hˆ`t7Œï¡Æœ|ä•bÍ9\ƒ¼™âÐ}ÓI›3'áêÕ‚eË4š+Q·†ýû·l‰[¸Pÿðaò²•• YÙ3zzRŸ>Mow Ö‚õ›à‚`1™èÔ© ´”“ hdôíI‚É$;uŠ/-e'$ý8¤¤Ô¼§æç[77ÔëÙóá‡å÷îõ;¶ÕÖ'>.Y6r¤fp0.q­£ .æ’ ·÷³Œ–޲iw!ûL²£ µÿYræÌÇ—.%?>pñb>ÜÔW®d<˜$##üè/QjÀêÕ)fM™¢tý:_‡ðz–žqε1»jßÙÿ @ g¿•Œ¹L©i’á‘‘í»r}Og¢ÃKGI îÞå=ÊùðÔÕ%ÒÒÈ^½ˆ9s(Ó§SdøŽ9µ¤d,]a>w¡+ße ¸yb¿7¬Í¡£›»ƒ§W·Z!''®ä1åú¹‘•‡QÏÀXkü½|4B•×`£NCbR_ÌQü]ZDz1"’‹Ÿ » dÄP^ ’"P•AU˜ª}˲é+b×”Õ@N y`¢†O9 !‡Ê:ô7À0c éÓö n$üžaéi˜h".ûç`þHÞd·´KÿÆåGèÞÓ†Âu&!,6özaïqÔÔcéLØ!>" ©éX¿Ÿ¢¾®+±u„W0¨®Æ¹s??Nd$I’8pw§Z[ÿ²«ÿàÉƵku^^µ$ %%ʤI"®®ZZ?MéáÚµr‡, ¡ƒU'MLkîÓ§êîÝ#©T"!ÁRW—_±|s󨨲»w­ÇÀÁ ,,wРÛÊoÞp—ˆð V{äâù˜ùü‚õ¯~ÿß¿g®®•/^0mlè[¶ü¥¬_ŸQ;z´äÆM:…fÌø”šZ·j•¦wѱcÉ7ndëꊟ;gÑÚAËË&M **ª «¡ÑѾï>Ý*¾´Üº(«£g{âœr·Vó•mÃÇ'ñìÙ„îÝŽá×À¡²’9qbDqqCPÐUUÞ7š¼<†ƒÃ§ììú;wºuíÊ;>jØü˜UÃ9QmìÓvE+M•üà+Tü¹ñF‚Bé2Én°ÛnQ¹vÆá[CL yïyø0[](.Fy99f eÁÊС­&I\¾Ž5[` œž@UõLhÊÃT*Rè®nè¢ÂÛׯmÄe`“/‚ßCGFê8±j||w¢?ÃnÄEQPŠs›0ÊŠÇþ%å°_ŽØ$t3‚ã8ÌâÑlð ×ï`Ár˜CJ›ÖÀªÕûS«¨¯Ç¥KœÙµµe'ììLüjjU]MÞ¸Qwà@ÍǬaÄ_½bÎ+¶zµ¸¦æÏѺs§rÆŒ,33щ¥V­X\jÊ”…… ++)}>‡$%UM¡¢"zï^:]€¯Ý©Sýü>¬¶c‡¥ çù,—vªÍ™Oÿ!Xÿê÷ÿý{Ú0lX©¶65-Méû"÷ða•Mº‘=!Á°ñ¨£G³—-û~džs¦¡¾¾ô›7ùv±™Œ€EsÚ`WÕÕ g³™íQd21‘35•WQHzÞÁAÓÈH*:ºœÏýׯ×RP*(`ÆÅñ–'/­a0@›+´²-'Õ($Û®Â]¹áÏ©(Ì:‰¸«òA«E2_4fWµ„’üŒ£ö7)» "‚ñã)§OSÓÒh›6Q,-)ÑѤG_Ÿ¹r%;1±ýß i)xzÀËæHÏÄá“p^‚rþTѵձ`Ùižì @=³öv”7Q:nìÆÅ­GbzÏÆ‡dÞ¢Q±z²hâI¬ž€ðx¿‡Ñ"ø>ý™Â4˜¨ašæXcÛxlaÆ0R²ÔÏdWLŽ`Â.<Š $žä‹]Õ5`þœ @=&ºx~’7»º ûåÐRƒ™ ^ßà‹]%$¡¿ ž>ÇÀ~ðõ•³³«GÈÉ“ÙÞÞœ¬,²sgâÊê‹´_Ç®**H/¯Zkë’Å‹+½½k++IQQÂß_6#Ciõj‰ŸÎ®î߯tsË76Y·®=ì À±c9Ý»K._®Î?»šZmn.çèÈKܬئ¦òææÿ†ûüRü¯, ãÆ‰¼xÁðõýÁ¥h4ÂÉIîóç?¿&tAYYØØXüÉ“2ÿd¢ìì4_½*9{6­Ã©i` ™YÚ~U…Oþ—Ë3Ú:ÊW”g¤}ò¿ÜŽù©TBII4<<÷åK¾Ôª¾ÂÖV5/¯îÒ¥Œ6¬¯CU•¾|¹FI cÃÞ÷râÂÂ`eRB«.;Úºmàˆ¦>‘ Z-–€Æ"O¡B³öä:ï>sVEppÃ?óp¥¥E¸»SoÝ¢^¿NÕ×' ‰Ã‡9ÆÆ¬#XAA$ŸúœÍÑÃ/Cpt qÞ&–æ=*§<="…_¹Ú°¤»ßíŸgŽÂ+oÔÔ">}çãÔm¾P;Éâï¹xsUQR‰­~èº>OÐÌQýwIâÖ+tý ˽PX«.ˆö„ç¾âpŸ³`5I™x—ÿ8±Âm–Cq8ØrvKñ)–Ýñò:4ÛÔ)ýŠKþ0ˆØOPí„“1ÃŽß·öÉɤ­-kÄÖ;iiøúRß¿§ úKáá —Š)SÊ\\*""))ìM›$?~T •³³iG¹O\¹R>qbæÛ·µãÆIyx´‡]_º”—]¿~½6ÿ£¢£Ë®^ÍÊʪ±¶Œ'ÕÖ²nÞLML,31ùÉu <ðÛ(¹ÿËð¿B°ØÛ‹xû–Éj$mc#™ŸÏŠˆ¨á¾rrêàÙ³–ùI“ÔétJRRUAA}óW¿‚J%úöU‰‰)¹s‡7Cj IøÕ—üx·}‡èß_•F£|øÀÛ4ð;DD¨ãÇ«Ñ锯ñüÀÅE-#£>*ªŠ§&V5ñ+LÖòƒ_aŒ/ëé9mì@+N‘üp‰Rß$¤£ae=ûÑóS‰žîûUÍÍ…®\©³µ-?¾ìÁƒ†vS $„)S(—.QOž¤.\HGI ÆŒaÅ>s†Ó>7R*-À•sè×¹ùؼ –£¸¤­!WÞfsZ·l Éñ{}ðûŸÆ:9‚ev¨k€o0œw¡€?µ^qm=®o…‚Äl8{böaÜ{#˜Hý? ’Ľ7»‡ïâs Ô°Óç—£+ñˆO°pb’QQƒ7g`ÇË0§ª‹Ýpö¨Þ u¼ pªk°h%–®Eo38ÙãÎè "3QU…õëÙ rž=#%$àæF¹v6cÆ/iÌÈ`»»W;8”õï_âåUÍ´±¡ûùɤ¥)º¹I˜˜üªuØÇ§ÌÍ-ŸÅ"7mR⪲åL&yöl.€-[t$%¨ ΢Lª!΀øø2QQš±±œˆÈ/ðqlÖ¯ÁÿÁêÞ]häHzJ ûéÓQ^½DGŒ|ýº64´IkÂECC±ë× 23¹õed„,Ð+(¨÷õÍhãpÎÎ]´´$½¼âóòÚéý\œÈ¯ZiQB;uMû÷W¦>z$X˜ÍÉI[D„Úv ¯1…¶mÓ)+cmÚÄcÈÄÞšá”¶¬£8õšôæ2z[å_LƒŠ¾+@ùv‡’TUçå3íÆ#cbõjñ§Oå÷ì‘6ŒþðaÃüù††Ežž555ÿÐjßµ+qò$5;[hþ|ÂÆ†Âñðàhk3·mc—ñe,Ä }<Äá½PR€÷EtµÂÝÀ–÷ŒÍ~—ýZ ÉãsßÅf¿üþ§ˆ0ïáQ4{öððPqwog‡…—WÎÝ»ÅcÇ*,Z$@ IÂÛ;UB‚ÖŽü`TTam-ËÊŠW.ùþŸàßO°ò¥¿lméõõäùóMO¿~b®]k𣌧¨®.Òb–pØ0e&“sæLzkƒŠŠ¸™™"“É9w®ì§žïõ¶¾¬Î<ææJõõ¬èè"ƒß¨€Aƒ”„…)qqññ|©´pvV¡¶o瘚²fWñ•zm ËÂû(÷GA!¶íÆÆíÜÒí’ãÿöX;NõÊO® ×è¾ðÝ›>((Å® Ø} îbE°¶æf%B4,°ÿzu€“ô IDATš•¯sûŠ´4ræL–[D½z/Rwî¤*µÜiþÙñ &÷ï7¬__©¢RèâRñàAƒ¤$áè(zåŠÌóç [¶HüÜöÀ–N€tuÍwuÍ#¸¸È¯[×Îb¦ª*ööíéœU„„à‚oÞ”¤§×ˆ‹Ó,-Nó}úTÊázz‚©HüÁo‹sah(gØ0êôé,?¿o—tf&{ΜŠìlö»w RRß®™¤¤†E‹²óòXÑѪ‚‚J<<2Y,2<œ»gÅ"Ç‘‘Q{æLo+«V¯¢'OrvîŒ,)iˆŽ¶£R~\;ÙÓ ¦/ûq¥N‹¢“ÿ+¦M IM­8}z ¹¹Qô­[?FF– ÞiÕ*¾z ìߟuï^•Jyö¬-Ù½÷åƒ=žÏ«¹¾å ज़)'SMèo€ô¢"£[›`T+Þ[¬;hèà{eux¨²Ù¸}»þÎú›7ëÅĈÒRÎäÉ"C†ÐííE:âw&(ÂÃIvUž?'ee±buåÊöXç’$ŽœÂ¥«Èʤ|N¡_+娩…wÌm2–#”ö(:VÔkøPpãppìŽß@N1tTà㆞œj×^Àí2:ÉàÍgôzX4 =WTï rKpé)Ž=€–"hT¤åcÍ$,°ˆ UAñ·ÄDPX¿íèkÊ{ˆ×U,ÝŽ¾f‚ÿÞ8$‰}žØ¸úBWÇöC”oW^^œµkÙúúD~>yð ÕÑ‘òs £¢˜õžžµÅÅKK¡˜ÖÀÂÓ§‹Nš$"!ñËe´¾¢¨ˆeoŸEÈÍeº¹)O›Ö~º={2nÝ*ÒÓ»zU°n˜µkc""ŠFVݼ¹­`|‹˜=;4%¥bËó‘#Ž~5†À]„ë:r´ÖgÞ÷§‹ð·ATTÔâÅ‹eddZ ÊÊÊš¾&"¢âÃîö701‘ޝ¸t)£Ø8 ÏÞãA¬]’ýí%~êxhTŒ³Ä•µøtËÆÂL÷#qõ9tçaìN¸û#†/oqQ€°qÃØ8ÿOc‘U ÇÁ߇7à0P0‰‡gQ²i9Ã*ønƒ/=Ý’rŒž‡ÔLˆÐqÞoàmû VÑ’†.x|«ÿâ×(©¡û÷³'L`gdººÄ±cTª"I3žŸI",¬ÁÞ¾\]½ðÊ•ºØX¦¼7—“™É +Kqt6Lxøpº¨è/: !ÝÝÙ ÂÂÈ.]ˆíÛ)S§ ¼b=yŽ™.ÈÉC7l]Éã¾m¯ª/_zyI6!n»'_U“Ñ ûHËÂ@ lù Cûòu¬GoáìŽì" 1‡­5–NMðb›zß!<Aï˜ 5t×F?c˜é¡«dx;4ƒ…ø,ÄÁÓX<ƒ¢^'@'Y 6Å3LìiçP×€íg±ßÝõ¡$‡ãk ÇG%tl"&,Dz6Ì»âøvXò¡|û>œ ¦Çàüq¨ñò‡þq¬Xrölvt4Ù§akK¬\IûB¯ìK—ê½¼j925•M¥ÂÉIlÒ$úˆt:ý¿µÈÊbΙóåÉ“êÎé3gʸº* Ú»Çÿ{ûOòòB‰‰}SX´èÝ©S©›6»»ó‘$nŠèè"3³k&&r? æTѧ7vð€­Ì¼û=Eøÿƒ` 2ÄÕÕuĈ>!!!¡¡¡<§’’bÈË!!4ýÿ´óØÙ•…„0öì‘\´èÇýÆÑñK~>ÓÙYvútÙÆ3tíú¦¸˜yé’ñðáÜO$GŽ|^³&fî\“'{µq³f=¾y3mÓ&ó ve+ˆýà?u £ºU‰Na ‰i×´Û-ƒÁ–”ôîÔI,>ÞA\\€»Illy÷î­­CCµa}Í…7 §Ný8b„ü­[]›[=6GCU団ž]º<Ù¬B“lJÌ`ˇD0I2:zÅCw–V6ùÎÈ+ˆ­Ý0˜Béè?9™}õjÝõëu••df&À€t]]Š }Ô(‘ï•|¿®]ãlØÀÉÈ }}bï^J×®‚±¨ –ãs*`;ÛA§ãUjð©gnw“W>dÿC«¸ ‹·"ì-T•0q6/? ü¥•p¿OQ1º/v/‚Q{+Iêð8oñ9a€.ýMž5èv‚šä$P]I1–€…HeÕ¨¬EZRóÀá °¯a¢‰OY ¯‚žz°íѽ ÐÞHAôgìóƒÿ#ШØ<gñÅ&ï< _<Š€EwÜ> U^EÜöàúmtêuUxód±pìûÚ5òÕ+ÒÀ€8žÚ·ïOø¢¾Ïôô¬©¨ ïÝ« ©I]¶LÌÞ^TMíŸÕøH/–ݺUP¥¬LóöV;¶£±Ÿª*ö´iƒ‚J¼¼ŒæÏà!“É=ú9‹Å9rÄÜÔTà4ß;ésæ„¢vóæ(AÇrA`‚åÆ{·öœÆö?ë÷{ÿÍ¿ÊÊʱ±±ÊÊ?šWóóó{öì™—ÇCЉ ˆåËYžžœíÛ©[·~["&O.32¢EG+|ßÓß¿|æÌ/b/^4)Üñôü²zuн½²¯/wETQQƒ©i0€¸8EÅVH>t› ˆ¬¬Y’’«éÄ~¸¿Ø¹,½•Ni Íq^—:®¾¢_¿[/_æ½|9ÙÊJ°ºáß=~\pÿ~ÿ1cø½‘$>úûnÛ¦ãæ¦Óö®Ÿn^ sßZ[T ÞÌ|¹äS®]îe¨éL^b¹tUܧ’Ë>܆vÝ{Y´\Ÿ?³nÞ¬ l¨¬$cc™DDˆqãè#FÐÇùé ÔßÑЀ“'9’ÁÁ ‹SÜÝ©’‚CIǽqòâÑß >§ñ0}ÛË” Æû 6š8»Ÿkã-l6öœÂ©ËÈ)À4[œØ9þjZ_âÔm„c@O 6ÆY wLC21/”ƒÐH‹!£iù  …âJØõ [<'€¶22 @W5 •€¥ºé``WôÐí#a={}°Ç&ºÐSņY0ã£Íƒ$±Ï  w7XõÀžµáq®ªÆŒy†¶&Ö.Ãâyüžaf&9c;"‚4ˆ°° ¶m£Šv(]&7nÔ4\¹R@_Ÿ6t¨°­­È¨QtžÉÍ_‡ÔTÆ¢EÙUwí*bi)¶gO'EÅŸ ¼´kWƾ}Y£GËûù úxöða¾MØÀJÏž nÇ¡wï~¿iÓkWWó={ø³ajÖo‚ÿKXX¸¦¦F¨‘Ö/“É”hà¥ÏHDp0ÇÆ†edD$$|»ü RE¥°´”«hjúmcu5§S§øÚZNJŠ‘®î™¿ôô:=½WÔ‚‚þ¢¢Ü7f—wçϧ8ÐcéÒÎmœÆ A·ÃÂré¿t)æÍÀf4Äߺ¶ss}yƒ©WïhõoÏ•Ìgç'çÏ'?>pñbÞv±{wü¦MqNNÚ>>ø’†‡—÷ï%!AMNîÓ©SËëLáÇØÐÍks"Ô U‰ÊN±¬×&›ã§²Ôbl¢g9+’$yøïy¹Md#deE×mLí Áo3|ù¾y³þÎúÒR2.Ž @T”pt33£KÿEOóååpscŸ8ÁéÝ›Èχ‡‡ÀÃèXL…NJHÍàŒÛ0ºžÝDdÙ°}æZ›zöŽ« /&öÁ‚?Ó˪Úo,„$Ñ¿v¹ GŸ¾C"³ _–ÚdBJ r¨m€žzð~Y ¨ÉCZ z*ÐW‘:_æ‰ü ôv]ÀÓ÷ R°t*ö.æ­  ºë÷á„/¨Tì]‹5|P¥œ<,^øD”–áÚ má“i·n‘ÎÎ¬Š hj>>ÔÛ¸ª¨¨––®¨ ýýk÷ì©ÉÈ`S©èÚUhÌú’%bªªÿ=bTWsNœ(¾s§òÕ«ZEEÚÁƒ*ŽŽ²¼‡ñ¨¨*KËwJJÂݺwØ,ÈÅå—Wª››É¶m‚ÝH¿bþü§gÎÄŸ<9páÂö oŒ?ë7ÁoTäþ‹`c# ÜOLÌ&s‚ ‚ Ó)¦¦ï üü¾õÆÅűÙU‹Ëwë&êçWÞ¸À3'ç½³³j’”TTTÄÅÅ})<<|ôh ¹«W³âââ***¿Ôø÷5kzZ[«xyÅ—••sÍðý÷6fxõ6ÒÔÞI³ß®·V]Ïç oþ.úõëdi©œ–V)è Ó¦i øøñ—º:6ÿç`m-3¾’ŽeíÚÔæ»E½zìºòÒèAÙɺ²ëUÜôT–“xí¼‹Kö³gC‡ssܲ²º÷‘Ùüÿ¾ÿÞö»ÐР®X!þì™üíÛ47·jº©)íÓ'æ¢EúúEC†”:Tóøñ§ö}­ÃÇážžÔ¨(š¬,de+ììØ£F±’’Hþg¨© | YYtïÈÅ®(ÕXżÅzU¼¾ 1:d¥a=<áÇ×»î…8·&MW¥¡¡½úÆ®AfþOø?¼Œ×QÆè^øË}•ÃO,ÂÞYX7+ÇTL6o‰û[qilõÂ7L…5Ìôú¹×EãsHJ«œ¹×  ©Xz ‡V€.Ì{†”LôŠ·jŒtÙ·N|cWmŸÃ‡8X ÃÇÈJ—E>ýÆ®x^YUUprbOžÌêÒ¥fÒ$Jt4mà@¢Ý÷‡èèœõë«45 –-«PW§uîL;p@ÊÛ;Ý:ÎwvõÓ¯,ž3°Xäöí±;'ººæÓé”yód/\(ûή:x gÚ´wff’sçªtï.)è ,ùôia“&©·ïêëÙ––ÊõõÙß·ó3ömÛˆf€ þ5?ÿóøÿÁêHŠ$ÉíÛÙ÷ï“ýú‡»5¼zÅèÛ·DU•š•¥ô=ÊR5rdº¾¾ðçÏF¿¢Gf/[öyÌùû÷¹Ÿß Žºú½¢¢†¨¨={¶úÅázz—22ª‚ƒÇŽ)Xßïw<ݶñ½÷ñÆ[¬×mî³|mûfkŒ'O²‡½Û¯ŸJxø$AÇZZ>zû¶´íJÿæøò¥ÞÈèM]ûùs3këÿdž¾æwl®-iÙº§LLi²Emg²IÏ`:SÍüf€…•äÚW}_r±ddE×ÿ‚ JK9AAõ7o6²#"˜$% 33!{{Q[[ººúÏ|Üçppîgö‰ ñú5éæF]½š"Ì÷½Œ$±æÄÙb¯Æ»¨˜»Ž>ÑÆ(&k=àyýÌ¡¡ï]à¯*¼S·±é4jê .Š=‹0C>$¾nÜŜŨ®Á kܼ9þB3±±ä”)ìädRBÇSgÎlÿ>3“ý÷ß5¡¡ II,C‡Ò]]Ň¥ÿ\Ñ,AÁf“7nTlÙR ¢"ôüyuŸ>b‡«ZZþŒ¢ýÿ`óæ´]»2tuEcb,$$¾fƒƒóFznd$•ÐÎ *cãË e±±ö¦¦5"8‚µ§ƒleæ "Xÿ`bbÓxKll¬±1¿2QcÇRØl$$ß]­¬„­­… ©ÏžýH2*Ñ»·¨††PddÍå®]Å««ÙyyMÄ SæÌѱ¶V¼y3­ƒB!/îÚ·o§Ë—?óyÎÍ!¥ÆÝ¤T™ÛÖAù‡©©BŸ>ÊBí¸æÏ׳µU kAÉ¢ hhˆ¬Z¥an.µgO&›M(ˆýà7nxÐò…­±+DŸ!}Ãôœ¹6ëå,és¿¾ž3{v–R'n’W^V÷îíÏù/µ99ÊŒb·nÉ>z$ㆬH¯^Baa ÿ:cã¢#JΫ­ªú97 óæQ’’„ŒŒÁÁ++ÖË—üßL!£ùŠk£©ºUÛ£„„px3îžFl"r `>qüéÚÒ…±|>_ƒÓ($n=Cç©ðºö?âÿØq|øc6Œþô)Ã×÷‡â(•J (ñôi¯o“R'!##ñ°°ò Z˜99i‡‡;–\[Û–ÛŒ³³qU3=½*.Ž_á(.H©q³‡ªœŸCEÒÓ«>ÌúòE`—–Ñ£U‚‚òΜI«¨à%LÙ7j1KNNx²u½ï˜ÁyQ‘­í¬dbêp+hìé‹¶‹×ÆÜi«NZ˜ …‡×:ͪ"Á]Ðú(™Åú‡ÖsQQbòdÙ€¹«WeôõiffÂ1æÎ­Ð×/tt,¨g öjrr8uŠF+*‚„¬­Y..ìÖ›M ¦¡*­èׯè}ùáÖã†âÝT×âs:V¸ãÌ5~ÏVU>[r•µÈ.„‹¶âvØïåBÈ…×1v ÜÏ#>ÅåðÚwhðçWZޱ °å K°mî†4¯zžšZL™‰í{‘œŠ“qê„øè ¨®†£#{Ö,v~>9q"ñò%ÍÀ =T¨ €³bE¥AÑÞ½ÕjjÔ¾}…ãâ•êÕ«cí Cz:c×®" „ ²¿|aTW³/_Ö|óFêTéŸKø˜LrñâÏ”úõkÈg}=ÛË+5"¢xòävJÃTU1>ÌŠ‰)–“ã[@ö'âÐè¯Áÿ‚5þü—/_îÞ½»¬¬¬¬¬l×®]¯_¿ž7ï¾Àɉ"!Ç,´"T*’“Ù¥ºííe¨T">¾ákXå;æÍS"Þ¾­l¾$tí*ݧ¼””Ppp[ùJyy‘AƒÔbcKüüÚÄ’lF°*³3in]»ÊkhH&%UðÞµ)TUEû÷W”—§‡„äóÞ»DE©ž‡õÍÅžV±‰:{ŠlEL“.%=dû^§ 05 +;I½0ráÚG¦>Ï}܃M›”h4"è!÷RV^Vùæ§ý£ø„¸81mš¨··tPìµk²Ã†ÑŒ„üüê¦L)ïÕ«hóæÊ´4Ì[CÿþDt4mÀ‚FÃ… ''vTΗóšÓTþª¡ZᬗîìŨáCkÖ@/®b¥3^FaÏ)ÌZ‹ªšVwæ«ìבgqq+¬Lq÷9–þ‹úŽ÷Aÿa¼OÄw,?„ûÈ(ÀÁåˆõŰÞüM‚³+¾€‚,ŽoÇÒY¼EAsò0k!’>CRwü0§U+Î&ˆ'§Og‡†’ðó£îÞM¥ ^Ë_[KzxTÏž]qòd-“IN›&úè‘Ü¡CR¥¥‚™‚ÿD°XäƒUcƤϛ—XQR¶°suUJL4rpé ÆU‹ððÈLK«ËËcìÜÉÛû¡E„†HK ™›Ë\ÿ¹¹Õšš::íÞQÐÍÏÿ<~#‚Õ¸@«XORRòÉ“'‘‘‘ZZZZZZïÞ½  ”êèH!Iœ:ÅùÞ‡g`@W`; ©||†b¢8¸ç= )ŸÛpZ­<247 ¦P0sžÇÁe0ÕÇ›Opv‡Ù,øõßù|šàÕGØ®A¯9ø˜ &[œs +í!ÌwÇï.úNAa ¦Áû»Á‡cr\<¬†áæ=àíŒÁ{€›79}ú°8C†‘‘´éÓ¾“s8¸v­®sç"Wתú… Å?|Pôõ•Ñ×§¡fÏAttݪU¹êê »wV¥§3ŒŒD^½ÒóFút™_$ Rêæ–ÎáàêU~”ùZĽ{yYYµ³g·ßG3'§&+«ZA¡cŠð›á7"XdKøþª¶¶öíÛ·++++++oß¾­¥%˜‚¡ª*¬¬ˆúzܸñãñÝÖVÀWq—ï9Râ͛ڋ›¶YQˆ1cä\¾Ü‚gßĉjÒÒBUU¬¬¬Öçmm)Mƒ}üx\»µ1yšH“ËYWWWVÚŽ©šÃÀ@@rr9Ï=›ÃÖV•J%=*(-å®Qk5…ùË]®N]”À«úeÓîÓö<-¦Àíëa¬&ýÌp!×F‰ºÂò‡§ÍÌDOœP•WjÆD+êÿù ´´¨®®·oË8 9k–(NqÆ+µ´,Þ·¯º¬¬CÙ²ž= __jÏž› Ž£#;9¹… IsÞpmÛ·ïõ èÞEÅ8Áù:¢½-®Áð~xö}&ãÂMΖ.„%SpsޝA=ÑŸ1kì6b¿J¡þ°Øð ÇmX" !ŠÁæñÄŽùáÛo»mžp\š:tÑǹ½ÐäCîa(†ŽÃ—ô·‚÷ñá–Íáàða޽=»ª Ó§S¼½©FFu"#™åsæTèÝ[èÉyOOÉïš5ÿô(" IDAT0bbê¶lÉ4(mùòÜC‡Š XL&PŒì|ö¬zŸ>?³ÖŠ ÅÅÌÅ‹“8rÅ ^½Ú)RZSÃòõM×Õ•˜0-ÿVPTT@IéÁúWá7"X¿óæQzõ"._þA°¦M8P8<¼¡¤äÇÆ3dû÷—xø°ªªªI&ÅÉ©S¿~Ò÷î1ÜÉ,ii¡Å‹õËËÇób­_ßÓÚZÅÛ;¾¼œ‡‚W IUî øg•auí*gn®TXXÇ{×fPP ÏŸ¯§©)Öv¥?‹uæäÙ½âo\m­GDFvÈö½Žžªš[´6ϘÙ.ï)Ü¢ õwv‘ µââ”»ÈÉsß+Ÿü÷‚X\°´¾pA&7WiÁQ}}š¤$qéRŠJÁÌ™å ,Þã[ŽÃ‡©ÑŒŒˆâb²{w–§'÷5³äsym“ %•B5VíÕYσ ¯mMŒ±Ã¾<› tpÏ ³&¡w7ÌY…[P*?Áüñȼ/W ·@y Öƒú8¬8ŒÐw˜FwŸ³°ù4Ư…ý|LEf¶ÎEú-ìû ‚”âddcÐt<{ Ëî8¼g÷ð¥åy cì`ÔSðè_%íUU˜2…½r%{ÈâðaªŸŸÀî7%%œ«úô)ŽŠb(*R<=¥Þ¼Q8ðŸnìäpðúuݺuyzz‰K—溻R(da!{Ù2…ÈÈÎoßê¯Z¥Ðصìל¹dI’¦¦ˆƒƒòúõíl(2p ’ºzûéQE£[7y#£öTw´_óó??Á*ûÏMßÖ–’@>{F¦§[Ú;u¢èèP»tºqãÝÑÖ&² €uóf“§iq!ÑÀÀ‚FãÆ©%%U=›V_ßÖ*Þ£‡¢¨(­¤¤þÔ©Vƒ7m …,aÎÏ ÌèèH½_øúµ`uTßai)ŸšZ}åJ3KáFøò*Ügä€'n®ŒªVJé WN°5ÇÙšÒO:s±ÄëŠ+ƒŽ}ý}ü$#®W++®øñ ¿ÿ$dd(..âIIŠ®®}û 3ä¥Kuƒ•8:–/m†%^¿¦©ªuuX±‚íèÈn¤¶ÓB~P_ÉTLX€”$nûaÌHž…câ Tñ‘Ç¡Ãs \ ¦Œàç0§JwKø´:ƒ0æGð!¸:at_(ÊàØu [ íIØê…'ï~Iê0ù NÜ„ã6Nî HÌ„‰.MFÂUlŸ׸ëè6¯? ¿§Ü±|6ï!,–®Á Wp89—Ï€Ÿò©”XX°nßæÈËcíZêòå‚ݽ9\¼Xg`P´gOµ……ðäÉ¢Ÿ>)N™"Òb‰?Ÿ];PXȺu«bÆŒ,eåø+röï/JKc””°\\ä·nUþô©³§§j¯^ÿPgçÎŒk× jìÜO­Ë—333kÌÍ;IJ²ªccKhíðïü)øC°~ þÍëY8lvÿö§¸8æÍ£Nܺõ#v2z4ÅBhh“x’³³\¿~âOžp¯0_í«áÃ5tu%oßN;s¦U¶Ñ~]ŠB!ÊÊž=Ëi_–´´††XVVmpp“Ø×œà¹½ão\mm¬¸’òO©WßdhÍœ™ÐÐÀWrÈLK&TŸ»P¤¡¬úÁ‘¯¿·á¶ˆgNÊž2%S_?éäÉ⢢öçã~:ºt¡yyIûúÊØÚÒEE‰¼ --pÇ»†2Üæ"ù:yÂnºhC\g0 ì =#–cÝ1œ½‡gQHÏkYO‹ÍAQ9¢’pý <ýa¿§bø2LXOĤ@FÆ:Ø·8» zðnôkŽ è5ço ) §Ýqãdùx»9y0 w ó žaúT¾Žuð ÇÖ–U\Œ=ˆ—/iººœ.‹…½{«ÍÍ‹¯^­ÓÕ¥Þ¾-ûð¡œðB;>;.”•±®^-_·.OY9ÞÊ*åÔ©’ÈÈZ:¢¢B=yRíógÃèèΨôï/ΧjëODRRí´iããkþúKÍÆ¦Cªž·ne‡…ÉÊ ++wH^!1±ìÅ‹\íß¼"ÿâßÅSWYiÜ Ä¬é0d¡ªJˆŒ$-,""Ä”)"·o×Ö›˜|«h•’¢Ž+õìYÍÝ»•ýõãò“—²µ•/¿w¯xáBn®ãà ¹jUt^^]zzŽN["öö7n¤gÍ›gL§ þu)B²%%õ™™•ææÜuåüÀÁA3((ïñã|gço-~Yáa¡›×–$·*II¡ÑzÌš×oí&º¤”^ û’oQAãÀ¬µù9âDG§Û¼ûsšƽ}ä¨%„˜Œ¡‘¢¶®\FZ“|îÀþÕ•Uò™Y¬ ®\©PT¤Í+;l˜¤°ðo¡Ù¢ªJݶMrÑ"ñãÇk¢£™÷ï7ÔÕAI‰²s§¤žžÀ¹]]âÙ3š»;{çNν{œÙ¯hÝšpJiQyMùʪu´‚eëq÷vìCÌG¬]Æ›‚P(X6 }Í`¿?cÍnŒŽÅ3ÐŽ¤A §!zÂu&ÒrôaÑÈ.Ä«ÈÌGL2 ËÀº;>¦¢›>¬L¿©Ãk«`ù!TÖ@_ý[Ä«‹62@] ƒÌ0È CÌaeÚž³ú6ŸÁ“×HL…©!®zÂXŸ¯Ñ±Ø¼±Ÿ`Ø÷®@W›÷6°ïÞ%9¸»S7n¤ÄããY›6U=Îhh ,Û¿_JJê×~Õ?|¨»¿*9¹!.®>:ºNSS¨¤„­¯/™£™3E ;ƒ‚ªÛÛûYzE**:ÏœÉü¬œœ”(AAùT*»K8–ÀÅ+*ÖgE[+‡è[dÄŒŒúׯ9³mþ€¦¢Â‹çå]ÃǨhŽœÉä%ŸZî;Bàp Äá?þP*-¥„‡×ž8ÁVy™³ó¬‡–Ajô ´¥Tƈ()³±>‰) Pzxä˜1\ë׋¼x¡úúµª´‰Ÿ[RBóòªqp(Κ2¥`ûöªë×›ªªFÂGsL˜€ ð𠪪âH$ÄÚºÞÅ¥©¼œæ—^ÆšìªÕhkd«YU¢Â@_aß8áÍ®‡ ‘¼¶Â¡-@âƒÂR˜±~;%#ómýzhn…ßÁê]šJ²°m5œÝüìѸšZ°rÿ` 3Àc=lYÏÖ^¡¡¨…½²$$ "/+Ë.=jkCwìh[° ±±‘ieÅuáÙÎn$‹kÚׯ¯01)˜:µðÊ•Æ/:mmIÇŽIÞ¸!Ÿ ¼oŸ¸žÏ7´… ºlYöåË•MMôC‡ÇŒñÒòò΀€¢§Oëìì$¿ühô¸¸Šêj6üªF„Ñyüôøñ –‰!Lµ%ExúQÈÅcd„©©Ak>’EEì¼yÜ&&„;wzB/êê\³g“'Là‰Œlé}@MM^WW ¾¨¨~l›/V02¦ÓÑׯ‡(frrRZ²d,ƒœ?ÏA‹_êó:÷‘)Ã’‘ᛇ²2Ï•+ãÔÕyO*KHº lª†ØmEw– ŽÞÑyû¯Ïm§³¶v´S“Š>?”„~Ñ"Áðpùººq÷î)ìØ!fjÊ«¤Dˆ‹kò¤ÍÕµTY9WU5gÙ²RÿÆÜÜ‘ ²Y³¸ß¾qpàâãC**ææ gÏv°)È™þ™­ÚPK‹öè[\‰Ä7¯Âß!-Î_‡ÐÜ2ô^`0^FÀñ] $¹ > <æ`ø]!ä.Œµ¸gPU[WBzX½×¼ÍS[ÀãAF B/³ësâÓÃ!)‰lØ€ Â|3Šœº‘QÝ“'KK.ò‚BB#sy¯®¦=Z;sfÑäɯ^u>{Ö1mßÑ£’ï߫߻§¸y³¨‚Âw½–2èÒ¥ÙYYíbb„ÐPM]Ýa*¶³àæÍ233Q77E~þ(' Pff’B_~¨ÿãûÁO°¦O…ê¸Ô="&ªªÀÍ 7oö¬NÖÖ\P.]ê#ã4m_\\Û¥K}²„`n.ðøqãٳ埿ÎÐP8%¥þÔ©!D„0dÎ¥¸¸ò?ÿ|ÖÒÂnÒ‡ôY#aë5’É„/j<(íè`7KXððÞ¥)úIÿx ”¦Äâ º+Ü—Ç¥jÌ]Èþ™88ˆ8: v.Z”VY94qžçpÃjÆK½m(%!eÖ Vܓ®®ß&óîÛ'ž œ–¦«äê*¸p¡ ïÞQïÝk]º´T]=WB"ËÅ¥äôéú7oº¾Ž¶€xxðeg‹JJbDD0ëÖ5›™Õçä ñyuÑ:ÞU³¶ PªŒêêÀÎŽþÏ?lq4 <ÖAhTUÃÝû°h¼B¤G'‡…K!î*HKBŽø€Ëopó+ɵ©0ÅÎBe `0áy/Û˜ÑÀÔÄD€J…Ô'0Akè] X·Ž±iCJ ¶oÇœ8eß}/4´KO¯îí[z{;óäIþÕ«¿4Bóá³KNîØ¼¹BV6{Û¶Ê»w[ôõ‰3fðge©Ý¿¯´e‹¨ŒÌwQ§88(¦«kÖË—­ùù‘‘ã'Mv—/¿ò¤fúô_À“'å •²²£“áþ?¾~|‚3l ¨Þ—@ÇGúäà€¼z…ÆÇ÷,Šóæq‰HC³¢‚ÙkP€HÄ44Ð+*ú䆜ÅI$lK ½  Ÿˆîºuªx<æÝ»¶úú!h“ƒƒ‚‰‰$//žýJ¬Qm$TU%«ª ÔÕ m˜ÓP¶ÈéæÒ-eÒ;ekÛåq/,÷ÁsbËý(/X ÆÏOܼ9Èæ¾éã%nɯaö ba”®Èî –MA¬Ä¶Ü©‰DÌ”)|ë× ûûË66j¼|©zà€ä¼yd))<‰„ nZ¿¾|óæraá,;»÷^^5©©£M¶dd°ÁÁ‚{öðÉÈ`“’¨-ÿÝ>ˆitfÅs:³Ï˜Ä-8ÎË ËdÂÝ»Lw÷Áü¡{ÃÆžÇ€™1¼| k6Adô`“Yêxd$Áÿ/ˆÇ©õöŸÝ™p/ŽÝ„ãWCn!¸ï‚­^÷ŠËáòQˆm6D?Eáð?pèhn9Yˆ¹ âbCïÕÞ‹3¢£Qnnض ãîÎî•™BAÝÝ›mÓÒÂ-^Ì“œ,¢®þ¥â;T*Z]­e`ðnÛ¶Š'ꤤðÖÖ|×®É'&*ÿþ»èرÿ™žþ†Úüùocc)Æ£G FŒ]½߯`€€ÞÖVbD(&Æ++Ë÷ͺñ£óà)))+W®TTT$RRRÖÖÖáá}ŒN‘ÏÐ{kIIÉœ9søùùùùùçÌ™SZú-h ‚¥ª æ&÷nFv88`xx (ˆ™“Óý…ÀÌŸÏ“šJ»|¹‡3 açÏ'¿xÑyùrŸ ‰„]²DòÕ«V_ß~JÝUTø¥ããk/]ê௿Œ+*Úÿøãy}ý€mw½ÑŸÖˆ, ÉÏoüLhIÇû[=Pƒ²/Ù0Ùk¶Y^axg‚Ã!'NŒÆ_»V³lYökðÂ9¶·0F,ƒ”GÞh})(( ©ŒaÙ[ØÙÉYM‹èêò¬\)xýº|yùØû÷ýüd\]%% ÍÍŒèèÖ“'ëôõ߉‰e9;—øú6s\Î>¦OçÊÈÙ¶¯ºš¹uk‹™Y}^^ÿ¡¬ÏóƒZ2F fûv̵k¸¬,ÔLJieE¯îÇǼ(+ÂÝë°p.ÄăãBØwèœôE˜êÁ3pT »Vï‚ p!ˆ_ Ee°fhÚAZäÀî_!# –Ìæ@†´« –¸CX< ǽàêàf£w²¾é¯^¡¼¼ðàÎɉÝËrI Ã̬Þǧ£´”¹v-1 @`qvvÐÔÄ8r¤VQ1gÙ²²ììN õôKJR~øPiÞ<2ÿ]X €ììvSÓW·oש©oݯ¯?bì BCË^¿ntr’áæ媮.Zii[{û·©òìè<8dž ttt¢££ÛÚÚÞ¾}»mÛ¶üñǽç }ñi¼­­ÍÒÒRWW·¸¸¸¸¸XWW×Êʪ£ã•µÀOB°ÀÉ üv÷Ÿ\\àà€€k×z>ž ¸ 4´«÷r¾`„…5³¬ñ Š@XXm¿÷nn \2$306–°²’in¦z{¿eçŒ^й ±q€¬ŠæÞ¹uÑ\/é/­ê€çáQqýí@É®ÀDí‹îÆÄÄgϪ‘ɸë׫ÿú«dðÉŽ:R7åÖБ>¿i,ƒÚyëЇç6Ÿ »wvÒãÙ b %%ÂòåBW®ÈÊVU»vMnùraBC#3³kÕª2…œùó‹7n¬¸¿•Bù{SÌ‘#¤ƒI22ØädªƒCùsŸåÞ–¥°ŒŒ—é&£óæ!·oãdd„táBÆ«Wì–d;ǽ€‡®ß÷ß Š=rö ,r„›çÀ{?0žK¶ÂÒípþt²u—1òHy î»Ám+œ¿ èjÂËØ·‰Ýbö(*7w¸õ ÝÙbf¹¹èÂ…ŒÇQ Åš™±Kbbb¨ 6µ¶‚¬,6"BÐÍí‹Ò‚uuô;«fÏ.Ú±£²¢‚¦¨ˆ÷ñ‘W9xPBJê? dApp•½}º¤$aüx¾+WÆiipêíÎ pp`•›6xyñÐÞþÙK|<þ|ݺujjjAHHhÚ´iaaa'Oždgß .Lš4iç΂‚‚‚‚‚;wî400ðõõís? ÁrvcˆzåCN+Wb´´__æ§ûï©S¹ìí¹rséññ=ìaêT’‰@@ž?ïC„Éóæ‰VVRîÞí§Ô}útÉE‹äét4:ºŸ ˜di)sï^Iqñ.Ƚ0ÚZ£²²|ýj23‚ì"×,i­è§òì”­m—Æ>Ÿudï¬9J ÔLJiý i!!šææ‚QQµÇÆ#Ͷ ǘ°ŒÓb}™µï@^QPUU¡>þIagÇÈÜ2Š‹ãœÏÏW/(Pß¾]Ôɉ, €mkcœ’šŠ›1SZÊ41¡²uzÝááM…€k kñ¬}ŠÐÜÜÜß®Ýà"À²¹P gþ„É“ kv¬)8¹CG~G]ŒáÏ0 IDAT×ßÀh.øµ.ûÎí)qÎõè ØÎ¨0Õî߀6líõìjjJõŠioܾSSc—]?ÞncS_]͘4 ÿúµˆÁð9PCãèÑZ…œC‡j˜LXºTðÁ¥øxqnîÿRÈêÚÚ«W縸d‘HXIIBJÊD9¹V`ËÏo}þ¼ÞÂBÌÆfdòƒ ¨H–“#±™Çø©€ÇãÙ¬FŒŒŒtssë=âææ1:çÅ~‚%(R’@¡ÀÕëÝ#††ƒååhtt÷];ÚÚøÎNôÊ•ž"$ tuyž=ë¸x±å˜“&‘ÛÛ~~ýôc±ˆ¶¶@zzÓñãCûåNœ(*'GJL¬Ü´éé“G5‚ÕÕÅ(-mkjêÁ¢´4ÇìÙ~Åμü9k¦é•Tæ†Ïö!ËÊÀøñäövúµkC„†„©©©Ð/¿H'$4oÞœ0[«'.½‚%ˆ…aÒ)7~x>Í–U««‹þôË‚XýBI‰°x±`x¸|mí¸½{ÅwïŸ0GFÜ4gN±²rîŠe·o·P©#ÓÀøû lÝÊ+*ŠyøbaÑpÿ~÷MÂçùAE‘±ü<‚½GÄÅáÆ ¬¹9¦« ÜÜÿÍd³üÜx„\‚)¦PY{Âqï>uë%%C¸¹à—Eð(þömÀbaÿiPŸ¦ÎpjYs#&âžÃÞ e ‹= -ɰÂÃÙ} À¡(7“ ÇNƒpsõ¸~ÔXúGd$jaA×ÔDLL0!!816Jµ « ݱ£ÕÓ³•Á€ xüüÈÃîìè`ž9S¯¬œ³cG•¸8nÆ þ¿þ’¼xQvêT>v>»ïññM&<ÏÊjçæÆ,[&¨ÁÃ3òæ3Å S^žwŽÇ#%%­ìÔ¿Ž ¸FçñehnnŽwvv^»¶c‡„„—””\´hQNNÎvff¦¶¶vï™ãÇÏÊâØówñã¬øÝO–/sSxô¤gÓš5ss$"¢gMX¼˜ÇÌŒ™IïêêYü\]MMyÓÒºÚÛû,;nn’ffÌòò~n;V­R65©­¥de ÝÑ~èÐ$]]Ñ÷ï›>‚-…EðÄ>¹ZgggC?Q´a@Y™ßÜ\ŠÉüøÞQ43,ØÏlâ+?ot€<‘h¼Ùséã$E ëOƒ ÈOž,š›ÛÖÕ5•5óæ‰:5fìXÞÍ›ß ˜‹BX<Ë"cÎ2N‹»Ì¬ÌyA5uÖ VB\aDZ>‡ðîÛ'ž–¦$wô¨¤QI‰—Gqt,RVÎÙ´©üõ뻤Μɞ.:}:—’væÌ†5kš©Tôs‚õ)?Øøúb}|°""ðàÓÅ…ÑÉÞy‰ŠÀ½08vÒ3áßÓ`í5•Ô´´Øè<:À³p¸ç‹g?W€û i–®pú ¼ú>eh´uÀØý/ȘÂH|Í ?6¸AÙS8´$Ù£8½Qß3À‰s (¶Öp#ØsI>uйp!]YQWGnÜÀÙËïÕÕ1mlîÞ¥˜™á¯_>„‹ ¢¢úb1™è‹aa}R""øñãù=j¸p¡ŸÈŠ€^S“œ–Ö8¤è(HJUÞ¼©ß²%±‡ß Ò¨Iaµ¶Òââ*ê꺠:ãMã´{Ý;ê”U¶¶]—jì±Kès·¢ªÊ×ÞNOI©»ÿK³„°nÌâÅ’õõ´sçÊüýŒc9È\—XFíkaŽ  Ê­î –Ítu–²˜®.zBÜ×ÈH)(¶l}öL%0PvÁmmnYYü‰õ::ù¦¦—/7ŽHêPBs玽=7œ?ß1Õ¶"·ê Ëœ~ Ö¬^ Á={††„0­­é5ªÆö ›…0èì‚ØX±’ž óüu5Á÷0T&éÝ0ŰHÏ…ûAkzw´éo_ˆ5ìÝPtvAæ;ŽC°h3é‚Ãjˆx•5 "fz ÏoÀš…@d[¡7^¾} hk‡. „úƒ×^`“î<ÈÜ¿ŸÑÑnn˜sçØ•cxû–¦§WOmmeþóyîÜaf¾ÒÓ;ßÍŸ_Ó6y2ß½{Š(éé ë_ð€Baþýw‰ªjrnnfÁñØXMMŽ;—ÙÄ«WT¥¥5NžÌÚ7ó%áŠ-õªnÉ>Ð{ý<öº²»û^×þ0üóAQE«««ƒ‚‚233<øiSDD„™™77·ŒŒÌ¦M›öîÝëéé9üWeüÈËv2 ÷‡ƒu+ÁÄnGuO”„¹s1¦¦HTT§±µåÊÏgÐL!•1ó®EÌö!Iõ_æéì,'+KLHŽ.ü'ô.âñô”;}Z-)©åÒ¥Ê#GŠûÅ Ëf™bY½iOƒ˜åÙ #KV˦Hˆ{ßÞ6Ší~,PP ¬['üúõ™E„…±( ÖÈÊf{xTé-,‚ÀºuĤ$aee,d:ƒÙç­ñrñ+ŠŽdw $!''‡¼}‹º»Ó³³ÙÍcZšÃË8˜ïb`ç~ðÜ lJ?|"ÌšQ~Póüƒ«#H‰ÀØê[¼@ÜÈ`â,˜¹Öì‚CÞ°÷$ì= ¡÷`åp\³×‚´15Áe¸üÿ\„ÄT@Q0Ö…¹vðê6ä?†=ëÙõiî'½Ác¼/ÒâÁ‚=3::V¯fܺÅCüý±[·²{¾Ÿ²qc‹„ÆÈˆ’"¢¥5-†ÆFÆÆ6TR%%ñ>>2òææ£ÅEFŒ3gʦM{}ölyc#Lƽycàá!7ªÝŽÑÑUÊÊ| È î6Ë)ÔÔ9yI|7]„½!&&¶páÂÀÀÀA Õœœ>éí ²Ä«êëëYbZ_?2ÁúpWúì5\þ¨£á8ŸÁé @ùXedg‡~\ª¼|ܯ¿ ëë±±mJJÙE©©_š7œ8Ÿš**«ý’õEe&a!~õãÇ#ϟ㜜0¯^¡!ýömvCk²Òèd8rìçÕ )F:8È$p´ÿ£Pž±WÁï0¬]º@&AKÔÕCd œ¿àÏ“ðçIHH¿P¸ýR3 ¢xà冹¶°ox€†Wxö¬ÁæÐ¨«‡Y.qOaÿNxr¤¥ØÚ±­ é.0‹ŠÐcǰ‹³{ù½p¡ÃÞ¾!&†jnNˆçøº¢pýz³ªjÎÉ“u))Û¶‰åå©­^-4PÈíÓ¢õ}¢¬ŒrèP±¼|Ò¯¿æQ©Ì‰IÑÑ""´FÄg0™èÙ³ùm#›eeþªªŽû÷K¾M–ð»ÑÁúzzz5ÇÒ{Ë4hhh¼yÓ'`Ÿžž>nÜ—ýÚ¿ ?2Áú„;±Ýµ·ã5Ag<46AôG §yó0$¤¥¡ï>†„…1Ü \¿Þ“%äãÃÌ™CFQ écÞ‚ °d‰$„„ô_´j•\»VÂŽøäìÙJNNJ÷î=úziüŸZîìcU¯_#6.CºhþBqs¬ˆOÕ]¹ƒâZNŽ×ÈH˜›óàÁ𳄟‚,_.ªÉË‹MHhúå—¼º:Ö‹ƒ,µ7 ÀZ³ŒÓS®3‹ß€´ yì8Ö±§ñïÛÚ¾¶õÍpq!  øû˦¦ªZXðâpÈ;-NNEË–•%%}‘‚‹€BVxÅ28H~°7ÄÅáìYì¤IHk+,]Ê8s†]Ž…ÇƒçoððèëBÊK1g8ë;2R¢ª °|œý¼÷CSÔ¥Â-¸å gÿ„…ðÇøcÌ0‡óá–7„ž†¢8èx Iazvÿ ¶“4‘š‡±à²"¢ ¿"‚`×VÀ³·TWƒ»;£±„…áÖ-œ [Q…C‡ÚÖ¯o¡Óa×.>//~..ŽÃ3EEÔÕ«Ë]]K„…±|©©ª"||ƒ]ü1{þ†hog„†ÖÌûVE%9:º®®ŽfhÈ¿m›|Hˆ†Í×T$&ÖUWw))ñéëðËáp55&ÍÈø–5Cß!’’’ÔÕôX»~ýº‰Iw󸽽}@@@ï­3gÎÝó?>Ár´†œx˜ØýçúÕ &>—ºÿ$á×_1øû÷lÖ¬áQRž=ÛGRhõjaUU®sçX²K–HNšÄ^[XØOÔaÆ ÉE‹äóòZCB†Îâ!üñ‡‘‘ÄáéññšâòË|Áú¢FÂöšêÛ7^u°ÂÔæ 4GLs¼Ë­ûÓOøEÙ­vwW&°¾¾#š5K46VGTþ|ùĉ/^¼`í!Xj*"êÚ‰ômbAÑOA¬©vcXƒXTFü“oÄê‰yŽ“*(Pß´IDW—çòå“w66ï““‡éÛWÙTTÛÚ—y£­f"›»óð@p0vÿ~¬²2Ê\µŠAe;ja÷o€ã À`ÝX¹ŠGZQYXtÆ£5¬]«ÀÞ °wØL†UÎàh “&€¼4°o5Ã::a£'ì>é™`oÏc`&Ûe¼yy¨±1ýÚ5¦„’’‚31a‹$uu¡ 6íÜÙj`€÷ó#ïßOâÔJEáÒ¥-­<_ßú)SøŒ‰QÒÔaÙ‚ÑFQQ—¿¥½ý‘„S§JÃÃkôôHjj¼ññº))z³g‹b0_INâêÕb2¿v­òhxZÛÙÉ“É\©©ìU>þ °±±‰ˆˆ¨©©¡Ñhååå—.]Z±bÅáÇ?lµ²² «ªª¢Ñhïß¿?tèÐþýû?m]µjURRÒ¡C‡<øAþÛ½›Ÿ€`h~Õg@C<ˆÊ•iÓ0ÍÍpå ú©ÃÜÜœ‹FƒwïèII=Kо>‚^U•pï^Ÿ]@§¦ÆË` /öS|Á bÍÍ´ƒ³†¬^€±c§M“EQpwB¥ö6øŽš›Ó щoo¬Š [‹sCsæÌÆN~~d×.¾åË9N~Ríí‹V¬(SSãš7|õªì¼yìµ8~k (dg·ûùUìÜY¨¢’¬¨˜äë[q÷n=•ŠŠŠNž©}Ⴚ™™À×<+VZ_OµµÿA(+“››) ÞZ"¾›¡§§g@@À¸qãˆD¢¾¾þÝ»wÃÃÃíìì>lݹsgPP¦¦&‘H433ËÉÉyúô©®®î‡­$)&&æÅ‹òòòòòò©©©?æåܨm ÿÝk@¤¢]øÔ7“ Xç¯3`þlظEÁÑ‘QV†þý7ÖÒ²ûÚwèP[t4eüxüéÓ= gÏÖ‡„4KIႃåz¿JbbÓï¿R(ŒÄD=,–õêI¥2ííãkk)ŽgÇ”BaØÙE65QœU·o×ý|BSñ{_ã ½GxÅÄצqÜÈ^šüôñ®mu9™M@0˜±Nó§ì9Hf¿Ì/¿¼|ó¦ÉÅE~ݺá”?}útT•ʨYÆ}ÈNgÏÖ;PUÙúïÑx–/¿¹¥ò ¶=çFMM Ÿ†ƒ«µµyJJ¨öö¤½{%DEÙ­n>½ámyŸv>žÚE9Ñ‹ž?§-^Ìsú4™ÍܼyƒÎšÅaaÄÛ£¤ÄEÈÈÈÐÒÒª©…õÛàùK¨®†ùsà÷Í0æ JË¿>ZÛà÷}ðò5àqÐØ—ÎÂÄ Cïõ L†…‚Å"ÁÁìÊ1TV2çÌiäãCòòè7o êèp¼X……5¯XQ¦¥ÅUXHóö–ž9“3£˜Ÿ§/:l´¶2²³Û :Ÿ=kIOoÃb‘GÀÒR0&¦QH?{¶¨‘¿½½ˆ¸8aÈ£¢£+ÿøã­¬,1,ŒUÐxDPPмzõ&=šùù:„ƒ•At@‰Ã/b?6Á?~KR øˆÀE€ÈuWÖô.uÿ‰  « iiè¥K=!œ¹s¹Ÿ>¥úûw´µõöÒxö¬=4´¹´´Oé±±€˜¡¹™qï^?7øfÚ4‰×¯›þù'—æâÂþþûÄ–Zxxa^^ÓçHRÒHßÚÔöÚ:…ƒG[ueÔÆ5!óìaWÚ:.·N?á3lv––bIIuEÃÛ}ðB³c‡|h¨™ŒËÈhÛ¸1ßÃã]S¸p˜•3&úàìXv¡§Ýe¼K I’†k%VÒÓ¢¶ÖoÄúìöí¢……ê&pËÉáÏžmPUÍ=z´–"*ƒ’WÅZÉç±Ì|åJ"ŠÂùóŽŽ --ì^û´µ‘ÄDœ°0’žÎ44¤÷vIrrr & !—àä_ 9BoÂxØsÚ‡™öüÚˆzZFpú<ƒÝ4xÇ»:wŽ9g££dd8»ÊϧÕ%'S)49Y˜SvÕÚÊts+]¸°DA/-MÈÈPå”]ÁÇÏn4ÐÕÅÌÊj¿u«öܹò•+s,-ÓÒùùã SOœ(=q¢46¶±ºš"-Í5ož˜³³ø‹ú55¦¾¾ê+VH}CvOžÔææ¶jkVØLY™L$ââãËccGÌœãÿø¶øñ ¸:B}#Ä~L˜Ì˜2RÀÃo³»G–.Å AUúIkÌÜܹܓ'îÜé!.BBØY³ÈZZÜ}ÊÀŒŒø»ºÐÛ·ûÏ ¬Z¥,,ÌE¥2ÓÓû!LŸÃÚZÖÜ\ºªª}Ïžgt:kæ‹'EúB¡h[%[e&ö!'˜vm „ –—lù§×¢;1’:zìsLŸ.%%ÅÃ!EE£µ¢šš’ß¼1سG!%¥94´fìØ”3gÊÚÚk¦(^ZÐ ¬ñajèžOlìÔXœØiTÆ“˜‚Q:ÏaCDwê”´ŸŸì¼yäæfFpp“†FÞýûC¸*eW¼¤2úE^.’’¨¦«+OR’°¬,–FC§L©ÏÉa·ÇSJ nÜÀNš„©¯OO†ŸßÐeïdrOBÊÁî…Â9@¥Bx¸¬„à°ï:cXZnîpü—Â-¸s<7±[Ï( {ö0#"P¶oÇx{³+võò%mÑ¢¦æfÔÀㆠ¤$gudii&&ïÛ¹¸Ñ9aáá:ôþ솶6FZZkPPõEÛ·L™òJV6qÊ”WÏ<<òÏŸ/÷ó«ˆm,/§pqa´µùtuI‡+GEiß»7¡¬ÌäúuÍÕ«¥ôôH_Îtv2ÒÒxyq ÊÞ«è鉩© DDÞKôÌè<~züÿKhh†+· ¿€@€5Ë º¼/vOPP@¦NÅÐépëVϲ1cwTåÌ™>\+V¾~ÝyâDËÚ°|¹dCÕ×·<3³&A&ã—/WHH¨=vŒ­ üó >$äÝáì`ЯJ %‰ñþSMcþ𤶵õ;E°OÛU½îé®\‹ O"º/ˆD¬……ØÓ§u_n›3xy±þ©ôì™ÞÔ©Bµµ´ÿ-•–Nܾ¥`¾±ÖYÜ –ÉôŒ‡Œì8— iiV‰õ´¨¹ù{´3†ëúuùû÷……±ùù[Û÷®®¥••Ò£ô2Vk@ )C, ::ø¸8a<IK£™˜Ô?|ÈnÐŽÂñ‡c““Qæš5 Ž”®„…Àï4<C}¸s\V‚™¤Ö/ûmÐÖûÿ‚1áÊ5ÈÈŸãútµ‡Þñ(pueìßÏÈÉA¯^Åzy±K’?¦XXÔss#ÎÎÜ11œýÏŸo˜2¥JEÇãJMUuszŸ‘•Ê|ó¦íòåÊíÛ V­ÊQRJæç[¶,{Ñ¢ÌÝ» oݪ‹k*+£47ÓUTx¬­…íì„ÏS»BX˜f{»ùë×gϪyzÊÛÙ KK±ÍÊH#"¢üÁƒj99¢ŠÊûF÷Æš5-ÞÞo ‡öÿIFçñÓã§ X¼D˜c Ò­íŽ3 °bâ ëãb:}:òä ÑÛæÎåæçG22è¹¹=˘•I^žPYIú´‘À/^, W¯ö¯J°n*™Œ¯¬ì,+c«÷žL&œ9cŽÁ ¾¾™ii¬"[Ÿ7¶ ÚHØZYµqÍõùõyö ÊL2¹'´+¢Ù^RžsÇáì,hq3222ØŸ¬£CòóSôh‚„¡¥…~òdÙ3ÿN?̬F„õ‚H¹¾ëÓ©6cX‚Xt:3îû b}´i¤¨(ÅãÇ¥H$LYÕÅ¥Ø×·¡ß8PÆ 9ŠŠØÁY³¸˜;w¶^¼È® Û·c®]Ã>Ž^¸Àüõ×6al~§àÒY‡”°r=¸¬‚¬¿•_4œõçeð (˜7 žÇÀ꥜u#ÖÖš5Œ  &??x{c]\ؽÆ^»ÖµfMKk+ªªŠ;}šÌËËAئ¹™±vmùºuå--ŒÙ³ùÃÂÔÕG£ (äævTíÞ]¨¯ÿÂÈèåÂ…o—-Ëþë¯â»wëÞ¿ï$0$vÞ<±íÛå·m“{øpBa¡QF†a~¾‘Ú¡CÊîîÒÓ¦ ))ñ|1ªÁqï^%¸ºŽbø $$ˆ..ª óÌ.},¨­ýF††ÿÇgø)¬œ’¢p&>Ègjƒ¹³ ¯"£»'89aôôˆf^^÷zÅË‹lØÀG¥¢.ô,? lÜ(‚ÁÀùó¬j%ë×K+*òœq ’öÖ¶ƒ”¤âï3ˆõx<²q£HFÆ|^uÕª2;»÷%%}j[Ë«[úD4@´d&õ!‘7ÿøƒTSƒ®XѼkW+û ;ggLl,nútÌùóŒÅ‹99ýï9X%‚€ÛÈM¯½ &Á¡ e ›wBú€£ |`ö"X·’Ÿ‘ÏcàúeZ? ?51¡£³gcp¶¶ìò_ߎeËš¨Tt×.’¯/y(™¹>ÈÍ¥8:‡†6YYñ††Ê>,9 ­, "4š—×qútÙܹS¦¼RWOY²$ëÌ™ò—/[ùùq8ÆÙY|ß>¥S§Ôrs'µµ™'$L¼~]ÓËKyÅ )kk!EEî{çRŸ£¶–T¬®ÎÿávqT±k—¾¶¶È‰oÒÒ†cƒñòe­A(¼ÿuc`ÿGøY–±.ø ´|¼n˜M®|d||0a‚¢Ð»¸dæL®ÎNÔß¿“BéYBfÏæoogÞ½ÛÒÔÔGë\MWQ‘»½ÐkÑ"y …áçWX]Íîú½eË„©SeoÞ,Ü´©ÏõîsƒšÖþ´F Þ»h®ó‡'m€¢b ¯»Â}E|ªÆÜ…­môÚÚÎæfª˜ØHª! QSS‘à`޳„Ã.11!_¾<îêÕq¿Ïsjõ8uw´·3`ª‹ˆÎ|™õ'g IDATòx·¢oyyB` ÜñãR¢¢8 …©¥•ÒSøº4‘e¾¬°ª‘µYA`ï^>OO^lÛ°¡¥÷÷|p!gÏb¦OÇ$$0 èQQý”d Þ£ÀO‚-ë!ðÔÓ§¨¡!=?íꂳg±ãdzË$Žk[µªYG·aïþý|i,EEµêéåÇŵ™›óž9#3wîÈ1°|v ×xà@‘¢b’•UÚúõyááµIIÍŠŠ=ÝàÚ5Ý»æÌ3†ø_äRý"4´”NGUTøDDF=塞Ìoe%Ã` Û·'wtpfƒqùr¶‰IxQQ+pqqwÅÎã§ÇL° ËTv]ë&!8²ûÏ…sÁʲr¡êcòjÕ*Œ¹9…~ª,Ñ×ÇÏ›Ç--¹w¯§NEA°aƒˆ²2!  ‘å7l™ÃI“Ä##‹¼½ß~ﯫO«©¨ð†Ûü›K4 tp9c3· –ûŽH$((hš8Qtöì‘×Л9SƒÁýMc#ÍËKÅʪŸ Ó/ òóãKJÈdv[’BCßÍŸŸ››”4GGGªÒRí­zÏ!ðòYî?2Öi>“Îxqöøó3Çnà“2Û±GcîÂÞƒaagÎdhi <9™ÍccÆDåç·>ybin.:âÍ4µ-·ãšVK¡}²ºoÇX=>‡Ábx¸ËÝ:Yjú)4²ˆ¸Œ^F†KX/"B‘áâãûN—«W›~ù¥\G‡» €êE<¸x6•ÞçÓÿ}†·šÄ`1™¬,ú´i åå \T”œïôøq掌±ceeäÒ%,ßp‹€kë ä<UÕ€  ¤:ãaÉB°žÜ#§=þ¾Â#!0ˆDH~¶Ö°e=X˜ ‡WÛ¶1þý—© €¸¸ û÷cÙìa0`ãÆæÛ·)55Ìk×fÍâàMvu¡+W–^½ÚdaÁ7cÉÃc„VÙÙí~~•AAUÌÎN&…ÂTS#.Y"im-0q"ÿWSNÿPTÔ®¤t‡HÄUU9òñ}%Ö—×dmQZÚ¦«+9c¶TSÓyîÜÛ#G^uvÒED¸ƒ‚¦M*˱VöÐÓ†dìÏ®ƒõ#,@Ät ºs)ØN˜¾šZÀÝÜf܉†M;@_‚?¶;Æô÷gZYaþý·ûYYÉ40¨SUÅ^¿.("Ò=H§£yââØýû%ÌÍû¬'‡UOž,pö¬Z¿§deõ¤£ƒ¾p¡Ü† cØ#k×ÆÝ½[¤£#rñ¢½<'Ò}IS¡)>q h«Ðþ‹'h»-7Û¾ÿ™¾íþý©‘‘ïU<<8ÏŽ …Ý»ßFEUØÙI8ÀzáàB£ìc׬ú[Çþ¢_d¯˜”Ø6%/¯£½¥Œ‡«ðƒ—®ð46!ÆÆä¤¤fÀbŒˆ^NŽ›LÆIIqIKsÉÈpÉÊrÉÊrËËsssËxpQméÒÒ„„6S‡|‡¿zoâÁóžq}€Å ±6TT0fÌh¬®fއ;tˆd`ÀüRL sÎÆÒÐPì‡'Ãûøh4ˆˆ‚{ár0™0Ù ÞƒŽ6ØYƒÅdPW jmƒç/áþc¸÷øù¡¶ò AF œ`õÒ/>mh€E‹è”„?Ž]·ŽÝºº6•—3ÐÓ§ÉVVŸªªèsæÑéhVåʹY³8–¹]]ÌÈȺóç+^¾lhmEètTM¸r¥”°†Æ·TÄþ†8q"/(¨xÜ8þK—8³²øB””´NzEQ13“^·NküxáO[ÛÚh‰‰•¹ááZZB99MvvògÎLåaþŸ`~|‚“ÐY“áæ€ Û°h3jCJ8²ÐØIºõ««AF††Á@e%^è£›ç† -aa›7óõàÿùgõÞ½Õóç „„ô)Ä®«£ÉÉ%R(hNŽ¡ªj?ÅLVM›ga!iÆËËîýPg'cÙ²Ç!!ùÓ'RlZ ¤³08”­m-öy È+ö»U_?45µæþý™Ó¦±VÐ923›55£ ••Ž\\_›ˆÔ·QÕ·DÆ·ºË }ú11²Z¼^¯ÁÔ×µ=ü„%ƒ‰#5¶sscRS[«ª(t:ZTÔ22\ee'TWS?='ŒK”àÒÔä7ŽWCƒWIé«–ô2èéÓõÁÏþU³zÔ{\OÁb½•;GhnF=<š< 640ƒƒ8ˆ©äå¡nnŒgÏPÌúõ˜3¾ô—WBp¼Í‚€k€¢ÀÅD0Ôͱ ª Šò %ÂB‘ OŸL1ƒ‰ÐÐõ ð¾òÞAmÜ Y¹ ¡Þ]D// ÎN`dÓ§áËRj¹¹¨£#CB áÚ5¬±1»o¹­ =»ñÑ#Ѝ(&2RÈÐ.›™ÙµhQIs3“— –×Ò™à^]íôé²èèúgÏZ@@÷Ë/23gŠŽ{û/EAS3šŸwèÐx ‹‘l¯fÕÕ~~Ù;wvK8ÊÉ‘ÄÄxˆD\}}WNN£”oii‹¸»k¹»khjöøOsL°FLjQú?Áú¡ß?‚ xSTZR|A\:»@Úð8ˆ½ ãTƒãçÀ}9ìû½{wwÆÛ·èÊ•˜¥K»y@TeÆŒ†©S ÑÑŸ‚ÿåå4…99|R’Џxž´jUŽ¿åÎ üÑ?•qvNº{·òر kÖ(³ÿ^**ÚMCœ»cÙ6„ûyE‹}^ÊÖ¶M¨¯ïÒÔ nh 46®$G% ®§÷ /¯-(h’½½Ôhpl}[yê_úy–qž¡8ùôúå‹>wX,²u‡…pKnkcTWSkkiÕÕÔÒÒ®–znnGI ‡Cš(¦ª*1?¿””¸ »ll„)†¦&ßĉ$}}þ±c‰_!·²ñÊÜ&jŸ‚¼å¦¿›«±V¡ :ÜÝ›ýü:ÔÔpžž|K—ò°ÿÒÍÍðûï oo¦ŒLw²Œ£n¸PU Ñ!ý-\¿ å• -åü$hià%B{ÀÚ•pÎ@Y ŠT•!¿0Ò#°±CôBÁÍ›ÌãÇÑøx¦¾>ró&Nší~æ&ææÍ-ôÒRÆýûBÚÚœÍãÇm‡UÇÄ´;:òŸ?/#&6ÿß’’.ÿª˜˜†'Oš`Î1{{áùóňÄï4!þ5‘’R?cF<‘ˆ+*²ÿVZoÞÔy{gfg7ÆÅ•€€×‡¦rmm‘Å‹ÕfÍR”“#±ìÂ1Áz?²§üñÈŠÿ'X?ôûGdzá6üµ<\vÿ^>°q)ü½ 3,€F‡òàለ`º¹17oº/^L&X[×ÇÆR>²¶îQ—Y»¶üüùúC‡$·oïS‘™Ùfmýº½QZjB&÷sŒ­qvNBQxÿÞž£¤þý£g2Žÿ>ô¼^Àóð®÷Ðs_ãìN÷Ò¥ì+b–,Q¿tÉji_Ÿ‚ß~K³µ•¼qcTœ¼G]uÌ–»ñ-îòÐǬ#=Ž÷¯ @0õu{Å2}~†Frsægçø( UUÔ’’®œœöÌÌöæfúƒ $ƒAÞ¼iUUžº:𙙀•• …… –Ö¨ÈÖ¶Vl¹>›eðØü{E×qð`û™3í**Ø©S¹víâ ¯ E᯿˜W¯232PWWÌÁƒ9¹‘\–JË!3 ^¤AatQàuÔ7€ ,˜ 1–ºƒ ¨*77¨«‚æ8§ºÚÀ5r²Pt:ìÚÅxôˆ™—‹#ÇŽáØ/«©aÚÚ6¤¥Ñœœ¸áWQá€Ä\»Ö´dI)‹,[&tì˜$7÷—þcËÊ(]¼XI£1 ùEE [·Ê}eåïkÖ¤^¾üþÏ?5==¿±K)ƒµ46R:;邂ܪªäAúÿO°¾üøëV:k;ŒW7Wž¿Ã9 ! ¥ ðáöz’5• ²²´šxþ§¯ß} ;p m÷îÖ… y‚‚z®>÷îµNŸþ^U•+7We²²J‹‰iü÷_ÕM›úO·™š>NL¬;zT{ËuößNèÂYÅñ±ìÏW¶¶µbq„æfú›7m))Í©©­Ì;wê@Cƒ73³]NŽ{éR KKA33 k=Î H:Ú{¤©\Zºê”——??g‰ÀÀÎåË›h4غ•ïàAGQŸÄDÔÑ•ÅäâBüüp3gþ85Ñååè† Œ7PQQسûë¯ä»ËËsç6¥¤PÕÔppÖIpâDݦMS¦ð½¼$¿°Õ·¹™îí]~áBEy9…FC,ÿýw¹qãøzMh·œÿ4ºº’’MM´¬,»±cÿK©RŽ Vñ蜆üÏN°~d™†°3{hh…Ôlm˜?xy :¾{ºU`d±ذ£§‡\¼ØÓ¯¾l…W|<µwû´i|óæ‘%%ñ²VDyxÈ™™ \¸P10ÁŸjNž,zâD^{;J'u9YlÎD°¸9WÂfû‡°Ã®JJZ33ëmläfÏVbÿd8…„÷ŠŠS¦ˆ}ÐDf#È®`Ûô17¸­óÖ%5|/0è`m3‹íó‹`0ÐÇÙÕÔød2nòdmÛä¯_׌Œ_Rb0ÎÞ^DR’ÐÚʸ}»~Ê”4™Ä͛ߥ¤ŒŒ*`FY ËHG™vxx“…Eá»wlõ{‚«+Od¤ÐøñxŸö ;:8¸Pš˜ ÷ï㌌Ú451ŽŽô]»]ÿÕ‹¡‹Î˜ÁxûTT7p±«Š †MƒbhˆfŸ]¡(üö[…‡Gå¤IÄyóŽù"vÅd¢W¯V«ª&ïÜYˆÅ"îîÒ™™†ãz³+()Eo«ÿ nß®àqu•ÿo±«áàÿV9£ƒŸ`ð` ‚pùn÷ˆ®”À¥ðî?gÛCF&<Œ…‚aÒ¹s1©©hP³ã£„»´4–›ÊËW¯ö¸`±Èĉĸø¶S§X­llm…qÕ½”••8“‰–•uúøp`ÌÒÕȪ¼50Œ¢åT6'_¸UUÕ!*Ê#(8ºö“& ß¿_åë;:•CA‚̽ÔLé(v.Ë8³*Ÿ–‚‚ã ÙpݺòË— ÄÓSì—_„‡Þg`¤¤´èë§.]šE&ãLLÈÁÁÿþ«ª¦ÖO€VK‹ƒnßW®åä´|Ñÿüÿø™ñã,˜m-ð® (4€%N ,M-PSÀÇ ç‚‘ܸÝ=_M ±¶F&L@nßîYV¬ ŽOLìcY³b… ¢"¡½QXØ'<€Á ææÜܘððí~ÿ}œª*_bb]S»–¹Ü‚캷r = ) •ãÆ ­^=ŽÍ]†9sdUUI(гk~7²Ø>cÌm.ó\„•EQÃö VSUY‚XL&ûh„…Ý&N$mÝ*—Ÿoôò¥þ¬Y¢RR\yyaa5rrIéõï088r«Òºh}lȸp>ظih@/^ìY–-ãáâ‚“'Û[[{¼I“ˆÓ§ó'$´ß¸ñ?ö®:.Š­ ¿³Å.±,ÝÝ) ¢‚€€¨ è 1¹&b¢^¯¶×nìn1PÂEDº¥»wa‰Íùþ{‘5` >Ÿÿ0gæÌ™Ù™9ÏyãyyÍ-Ë—+‰‰á÷ï/ù Kù),-%-Ò|ó¦~Û¶E¯L™NQí>¢ªn8ez·»ÅÅUÍYW×v挑ÑwŠ3pp56}ø°">¾¡Ûû#DYBpº¥ò§F,´¾”ùìP(¤!¼™ÉïÊkú͈õ1ääþþj÷ïŸ>­ëâ"ÙÞΙ;7[W÷õ… •_w®5´Ô”Sy“­ºhOϘA¹sGeÈÁs眜 ««ùð÷‘ÉÈùó”Y³£¢ÎÎ ·ow¿$àÉQprÂddà/Ƥ¥¡»v¡ææìøøŸÔ”ÅfÃÁƒ\vj*ØÚ"aa¸³g±"|úÓdˆÈ©Sº›¨©õ”¨õm~É/‡ØØº›7Kètö˜1üé›üÆo|ŒL°Þæ,< ) VFÀæÀ¥Ø€ÎP÷ cE!8¤CºÆŒÁÒhpáúßR[[7h¾¹½v­K¤Ë‡ØˆS§xƒ’’€­-…ÅB-ƒ/`ÉM,9q"¿¨¨ûù‹'¸?Gøj±7–Hœ´Áuó9/™3çi{;ÇËKwút>Šö|#°XÄÎN._.ún'åÁÝœÅ;„·B óÞv”Ñ öŽZx|—õ—‹F>ê}:!¿ÀÌ›'÷®ÑâÅŠºº‚ùùm–::&GF~1ËáSó•ò’%B zìX˹s|ÒQ(pô(öêU,‚@r2jeÅÞ´‰[SÓýß11èĉìåË9­­0hrù2Îٙﴽ[·Ú&Mj”’ÂøøíÜIÆöx5_VÆru-LOo70 :$¯¬ÜGK{;wçÎâ R«ª˜¶¶bhÍŸ/ßçEÜ0Î+''Y<~ O‘¿ÑßÈO¨Àã$hnðž#Á‹ˆÌó›¡òL5˜7”•àú¿”køpä?0$„‡w®³}|„†'œ>Ýej™>2v¬‡ddð.ëW®T¶¶¦¼xA¥Ó?ï10õõÕÖÓ#ûûgôä¢dŒM¦Ü Sû¼ášA’‹“_?suÉàÁ7ŽM¯®þ̘“Cõðx4vìee‘¥KÙ“óö!¼¼T­­¥>¬`0~LÀ³†´Ð å¸OŒXÔJVdÉC,y#±’“*ª*›á;ƒA<<¤ÓÓ-.]ÒÅ·µ±GNš0!õýûÏü¬©e¼ËXÑê³Ýª«ž?×Àã,±´Ì{ù’I $9Bær‘yóh¾¾M½Æ··Çdfâüý1ÈÞ½ V@ÀO¡ãPV†zyq¬­Ùµµ ©‰DDàΟÇRø×Ý<~¼uêTêðá„qãˆ{÷’{ÎlJKYŽŽ…ââØáß?W—“ë »ÊÉi6ìm``¡½½ØZ‘‘ƒUUÿ¢ˆúÍÍìÇ«ll¤æÌù|)Žbÿüýßc ,-y€Ò:¸ñÀÞòË!9³Lô ¹ JáÞ“ŽýG€¬8s©³ $?=}º“¸¸¼ÏNH`ÅÆv.ý……1êê„'OšäMÑ27QQ!¾zE;uªâKãôñÑľySŸ’BíÉuɛ̎zå´÷ˆÎø‰Z:xI\S[ÇÅm̾£«R“]½••EP–.–—??tèíE‹¢ýýãwìH\°à¹Á5ˆ[·Þ“É„1cTñýë? Dinf˜ðð/Þ“è¿@ .:O°æ ¯éŽyÚÞ v£yX(ŠF}ƒ&V¯Å"žž²ááƒÆ—"“qlCÃø-[ ÛÚ:K—Y™ÈsàXŸBZ¡&'‡ohà,YRŸ ×’%B³g“°X8t¨eñbë Qïiii_êAP°¡¡ØQ£:¹“&±/]â~©«þFE,_Ι9“sé—D''$3çèÈ÷«¢°u+}Ïž…‰‰;wòáV,(`Z[çgeµÓéèƒj’’½)ƒRgf–œLWR"îÞ­åë«Ô;ÃÕW~»ë×KJK[ÑÒúeùß„L°>`ˆíðÍGæ) IDATæU§¶1»¸˜p$Y“¯t($„¹wOÅ×WŠÁà®YSñ©ƒûë˜=›..-)(àÚÚ~^"KY¹‘[MM$4÷ø1nâDLDzäWO}é—Ñ{-0¾Q\Œþý7GCƒ•€¦§£óæa²³q›7ó—*ø( +V4…‡38ôÂÑåËùÈûËËcŒSH¡`ÍÍI!!ªbb|G³Ùèºuù~~ï „ÝÝ¥ããÍMLz_Ž©ÛßnãéÓê¡C޽ûQuù7þO0ðKåˆNAi-ut!½Œf€¨0T<A"КAn0˜Pø”å–­…Ã'ÀgÚÕу»;çömîöíØõë;Èh~>GK«FD)-•&“;ª‹KÑÇM[·ÊnØÐ¥è:ŠÂ AñiiôÓ§uçÍû¼Bc#SK+´¾žyÿþW×—í­­ì´´ú·okêêÚÅʼnL&gøpY33éX@£±ääî3Ü¢¢ñJJ½,DóȬh2ú;ò!sãnç,"H:TˆRš›;·F±˜]|»Æ&rž³¾SÆå—ðêÍÇ'—DÂÆÄPÝÝ¥×yZp",õÒÇû˜(Xá°·'½íÙS»fM%‚Àöí²ëÖIwÀGHIaÛXQÁÑÓÃ…†Š«©õ2qˆË…à`ÔߟSQr¹@"ÁÂ…oo¬"¯`Y_"1Ý¿Ÿ{ã×Äy÷õöÆ,Y‚12êå’£½fϦ޸Ñ&(ˆÜ¹#îäćŽuNcôèee‚¨(æÆ ¾_ϲ²vŒW¯h˜3gtgÌøšÝK$'S~D¡àËË'üºå®ù.•Ã_•‡ƒð»TÎ@ÇV A†o ÕÁÒÈBö @T–΄á¦^Âù^€Á@zü2>‡7o:Ÿ ìŸ *)aîÞí²Ðöõ•Äb‘¸¸ž¤zõëUp8$<¼áK•sÄÄþþ†8rñbÑ— ]½€  ÎÂBfÉ#ÿ!>>F«V™XZþa›¢¢xy))ò5}yòDS¹-Øi<ÛÑV*+∈ ³RáiMKùaF¬ÿ0l˜èë׿..$æöíš¹s³^eóúR¾èäÁêÕRG* 5bјáû@Hˆð©+=µ²¢ü±>@KKðüy=3ÇB@º°T²’4™?ïš›åÔ)E süxýªU|)È“ÉȾ}"D:8±áÂ…Ž$Ç^ç(X[#{÷bSSñGŽ`=<0EEpã×Ó“£ªÊ;–³lçìYîë×hÃWÃÆJKÑÈHôôiîìÙ¶›kÑ"NDš›‹:;#×®að۶a••¿) 1+‹íâÒœÌÒÑÁ;G10à#2½ €9iR‘–aøp¡}ûäI$¾¿Æ'N”OšÑÖÆ]°@áàAm ‰>3ü ž;WØÖƱ±‘VWï½nþoüÆø1X(Šž|ÇÃ@]‚×üuîFäQ°m!À‘‹púèiÀµT¸{Á»THŒUe€ÊJ˜6žŽfdàed:z>t¨åܹ6UUìÝ»õ©TŽ—Wi[ºoŸœ‘Q—,U:3kVfnnëÚöö_,)èãó.4´ÂÆFúܹ¡}{+~BìÙ“}ñb‘¹¹øÙ³?ìb‹¨C6GÝfnsà¾ûx;B:¥[Z˜;·D1]r ŒdgÍ5ÿ¾#ý"ŽD­O(Œúx‹ƒÁOË•½èêÅ‹–«1”DÂܹ£J$òA>P¶l¡GE1i4ÎС„#GD{'þY¡wï¢))èµk\ $;­­ ‘@Z10SSäƒÐ”¦&²w/·¶(ÈÈ@@_ÉÌDõõ † CÆŽEÆÇHõQ˜ÈHÆP54°â☫W)’’|0¤‚¦­m>‘ˆÑÒ"\¿®,,ÌŸCŠÃA—-Ë=v¬|ôhqggñ•+ÿcÒû L&WK+LQ‘´y³¡½½L÷üÄà7‹‰ö‹?€°6Áèß‚®C!£ÆC `¬dÃÙ‡NC7'HÏ…{O€Ú@99hh„³—;—“11¤¾.^ì4bM›FÊÊb?xÐ^\ÜM¡`ÕÔðOŸ6ïÝËk•Æš™‰¤§·lÛVô•¡úújWV¶_¸PøüùO&¿Ø˜4I1#£éæÍÒ¦¦”`¦Jq4Ù‚›ŠB2¶Ó™¡{áƒk¯+3½ª´¤Gšý —“QžÀ³ñÅ=ÅÖÖÞDòY[ íÝ+›žÎovs+â«M›„—-ÌÎæœ<Ù:n\•Ú7ßVUUdÅ ÌùóX ¿cvófÌÔ©33DK ).FÃÂИ40È}û–›œŒ–—£ - ÖÖˆ½=räöêU\q1îÖ-ìœ9}Æ®®\iuvn R¹êêØ{÷ÄøbWEEL[Ûü’–´4îúu~ÙUSÛÕ5õرr ³h‘ÂovÕ'¸v­¤¤¤¥©‰õA ùÿ \ÀôÇß¾¬ÿ ÌÚ%µ0y8,`ï8 ¬œNC¦ùBe-Ìœó<^ÄßF%CØmø°2G·lሊ"aaØÿteæÏ§å糉~~ö䂦›[±¨(ææMYÙ.þ‚¦&öÈ‘ïÈdÜŽ#Fˆ~iÌéVˆ‰á#"F}‘ªï ¸úz¦§§ÊÔô{õ¾ÁjÛók¬]ã¸ñ]$áýï1ùÖæŽOŒXú2³çù®ýrª’·‡.øx ‡…£…(+áÞ¹cÜóÒ(#+‹ao_ ©) "‚\¿ÎwØõë×,7·]]<™ ;w’õôz£çÔC II(……(Œii’Bˆý¦sˆ¢Hù’ùîËË‹´?ÃÏ*-e]  €c2!<\ßÛ[SÜ3'‹ÍF›ïÝ31‚!Ô>BC“Je65±™LÎ%`±@$bÅÄbbáWš_Q\]_ÖÕ1-ÒðòRýÑÃùVðkÁjG{YŽéë "ŒM0ºÅÿ Áz®[@G²Ž‚@Ð]XºÆ€{»®†ÀŒ•0Äâït¨oY9ððŒsàrACƒ]T„>zÔ)?øü9ÓÖ¶^Q[T$ýq)ŒÉ“‹ïÜ¡ùûËð®„6m*ز¥hìX‰ÐÐA_s[ÇÀ ¼°°åøqó… x©Ñ+WŠ==_Ц¥ù´5&&æûÔD³ÿçeuæÛXæ* tyÎËfî€ðÐìgOy“|VŒPRþaÓÛÜ~{üAÊù·¨Š ðÌÈh‘À_½jàè(Þ‹nssãÆ c°XxüX]\œ?Ki)Ç×·)4´@Àœ9Cñð8¢Ît::{658¸]\s𠨧'—VVƲ±É/(`Ž)ôð¡*™Ìß-)iwtLÎÉiµµ;wNOE¥¿nìǯŠB~~sffsJJcvvsS31‘ZWÇ—'·€¼<©¢¢ TU…ŠŠZ@AD§³Húú¢bbxmm==²¾¾¨šÚOÛQéìüB^žTX8þ×¢†Ÿ¿« í—‰„´l‚Ñ-~ù'é+H,¼àl @ÀCBÀ¤Q€ÇAU}GíçIN A 2þÍ›3ÄÅ!"²ã_ ¼½1ââÖé4±±!¸ºõõqñê5H||k{;ï³åë«$,Œ­ªb&%}±è ‰„ݳÇDZZ "¢²¦æ'( ÒŸpwW’‘!"ÄÅ}&¿ò»UœÝ誛¨„`y3ï˜OƒÐ†2°¥N$òZbž>Êý>Ãû RË^ñl®7"&ÆÌÅE²¾žµo_ÉáÃ_Ì«ø ´µ?V£Ñ8yyÌyóÊêë?_èéKPRÂ^¾Lñð¤ÓÑèþþt6u¥^qfÎl|ú”A¡`®^¥ðË®ª«Ù>>¬¡C{Á®òòZ,È.(h°Ùù¢&;ù5s9 ï°˜8ç(< ωüD aéòÊ*?̈Em­]~Íí:à]Ü’UFQص«èÈ‘òòrÆÒ¥Šû÷káp|»›KKYþYA·¶ºuKEZšog_PPë¶mtPPÀÞ¼)&#ó Ï^/^0ÝݰÊʘþ!kków7¨TÎèÑD"FF{挅»ÊÊjqvN‘À <¨-*Ú/ŽW6}ñ¢æÞ½òwïccëA@Ton.N"aŒ(ššÂººdEE’Œ ñë\¤¾žYYÙVYÙž—ל›ÛÜÜÌÊÎnŽ‹«33OLl55aAA¬ƒƒŒ££ŒÌÔº}»ÔÝ=N_Ÿï $Ôíï~-XTô‹!+ß BÀ£'ø…¿wÝB_€Ú ÷“gŽœ8QÿéÓµ`‚™™HI #=ýkEvýý …„p7o–>yRÝ»ËÿU0k– )ÿàeøQøÛE7Q ÆòÚÌXQ§¸µ…`=JDâ͵y‘óÆ÷ ¸(÷ÀÓ5<ìJJD^VTÖ­SݵKƒHÄ9Ræã“ÛÜÌ·II ö¬’¥¥`U{Ö¬Òêj¾{X¸PðæM±ÖVôÅ ¦›[ãë×?,›á[ÀåÂ-ŽŽ 55\yyÌ… bü²«ÆFÎìÙ¥‰‰mœ'øfWIIÍ'¦·+(;¦Óì*/¯ù¯¿RÝÜbìíŸ>œj*6s¦êùó©©cž<2rÛ6£9sÔ† “PRìÖÒ#!A04upY¼XóÀÁgÎ µ/)q 4ðóÓµ±‘RVÌÈ 8ëç—*!qwþü„C‡róò¾k=u`±¸ÿü“ Ë–i võKãõë×óçÏWSS#òòò£Gþx‡’’’É“'“Éd2™ü]YßN99üýûª„øøV[ÛüÊJ>F€aÃðoßJ:844pW¬ 4ó%dúÃQWÇ?¾áþýö‘# 6‡„ˆ‹Šòg ¤R9Ïžµ8;“Ÿ>U“”ä]½}Ûlg—S§ÊܺeØ·–.}ð ÂËëŽNØŽY--ìQ£¤×¯×{ölØÛ·Ž/Zxy©öa1+%%Áqãäwíôü¹Ý“'6/^ØmÜh0x°ׯ—\¸P¤­fdžœü²t}Ÿ“Óìá¡ëÒ€Á íÎÄÈi··³wl‰lkíB2´u¤æ/´øïßúzf\\Æ|ÿžÖÖR¶¶2H_'ƒ¶³ZýnM¦µñr»{M”ypmÎÎ)¹¹­ªªÄˆ¾çËÚZ¶ƒCAJJ»ðùóJJJ=RÍIKK32êðƒ3™èÞ½-64£(8: œ=KQPøVw±±Ì)S¨ååYYÌÙ³gg¾ÃJš›9ÎÎEÕÕìgÏÔøŠo3&YOOHR󦡀@ŸÝ4&“{ï^Ù¦Mé99Í0x°ØàÁ”ùóÕ‡ “„®¿Ýw@}=óñãªÄóg ™¦¦bïÞ5jh{{kŒ+kdÔ_^øššv0*•j=v¬\?åûƒ_aÚ/ʲHõ·Œüü|ssóÆÆFØ¿bbâåË—ÿkõôô:tè²e˺mý!øË÷*šR vº°Ñh-06¸(\]j2Yî…§‡$-màà mCm€Çà^¨©À¹£=ʽu‹+'×®uÒsjM gêTâÂ…92MMGÇB8zTÁÌŒ7[þï¿ bbh²²øë× ¿2þädª¯oRuuûñãf¶¶üâýµ0~üK5KuêÔ)ê3t󳪂Ü$æRt±âGz]€§rGðÆ¶“Dä32ÛªªÚ1$&¦EÁÆF*:º/Ö Âü‡§O^^T€ÌœIòôìŠÄ÷“‰ÐcbX4—H„7ÄTUù6µ¶rÇ/b±¸ÕÕœ¨(uEEþ~îÄÄæ±cSôô„.\Ðë+Ñ. .[¿>•Áàr8(üù§º¯¯¶˜Xo~Ó¾‹Å}þ¼&&¦îäÉüªªv''ÙGªôõÉÓ¦©üñ‡¢®n_BQ˜9óM}=CPüòi¾Á*))155­««;;»uëÖ9::þ×úøñã]»vEFFvÛúCð ,"¿îæð<Ž=D…@S^çÀ¹§új @B^‘ÀÔbáÌ¿• gxÀë¸tŠÿõäΘyû½qÍÉé|n<<ˆÑÑÌC‡º˜"Éd¬µµÐ›7­{ö|¦ÌêÕÊ))Í7nÔÄÆÒ¾2xʨQR99M³g¿¡RÉø•ÂÝ])"¢rëÖÌ/ÕÃþ>øk¼N)"uc˳{…[žU\ÜZV‰CÞ·¦¨ "8¸,6¶.?Ÿ.$„³¶–²´”ð÷7ð÷700E RYõõÌØØºk×JîÜ)óöN°²z:dÈ]ݰùó®\)./çÃŽ]Û\ñ$ãÆ§ÛueM>Ë®@\ÿèÑ UU"€qpH~øð‹51¿ ìÕ«JT*÷ƒHfnnoRÀFHJ’Ò×Ç?~̘9“:iRcMÍÏè/LKc[XÔïØAOKcyy ÆÆJöŽ]¹¸={F/*b=~¬Æ/»JHh¶³Kª©aô%» «tv~1}ú«ü|º˜þðaÓ’—€ÃŸ]qp 4,/w޶³° df6…†Vèé…›™=Þ·/·´´oœ>[·f\¹R”’B=rĬO:üIPXøµèÞ_4íÅ‹S¦LY´hч-ƒuqægffö¤õ‡`à[°P5Ü8Øù8ÀË pÙ 6Fpç/Àbàtü}ÆZÁÙ ÉY0r ØXÀc@ÀL›ï’a‰7,[ØÑ§·7'* ýóOÌÚµ-‹NN °n°Mçwª¬Œ¥£“cfFºtIYE…÷óú÷ßgÎT¸¸Hž<©û•K`³Ñ‘##++ÛÜÝ•vï6é«;ó³Åâji…IH¸¸tdiÒh4QÑ~IoùPûGÖ—ä'±–  ]íËv»õù~©©T[¢ù`ÞéV[_]GWJNޤª*ôi¾•ʪ­m¯ªj/.n­«c¼}Û•ÕD"a?$j ,ÖØÈ'Lœ¨àæ¦hhØÍ%Ú_øôÓíÓ,|ÇNÿʺxqÎÉ“ööâóæÉM›Æ÷²µ¹™;~|a||«««h` Œ®n/3±oÝj_°€Æ` VVøéÓI³g ö¹µw`2ÑíÛéïÞ±´¾{·lâD…ž‚|áÝ[î/º< GŸß´Ÿ·ôŽ`|<$‡ððp, ¡¥¥ÿQ.‹%,,Ì`0ºmý!ø¿ X§žÃš[0JîùŠÂ eV¡þ0Öè­ : êiqôÕl¦›ë€‹=@Ô °wuUxŸ~ô„tèP¶´4”•uþ”;wÒׯo;V 4´‹.ß–:Õ°r¥ÔÞ½¼ïpc#{Ú´ô¬¬–sçôíì¾XÞ¿§[Z>­¯g„‡[3p¾<8}ºÀÛ;ÁÔTìí[Ç·ú;‚|À­„rcoö°OÿÉ ÿx;EffÆ«¶J¡5”°˜]|ˆªêâ‹}ø“™`³Ñ¤¤ÆØØº‚ú¹s…t:ûC»±1ÅËKuÆ YÙÏåפoy0Ÿ'yðvL¾!OQíö¼ÿüS²ví{ccáåËçÌ‘ïv´¶rýü*/_¦’HHTÔרÃ×ubKJ8´ìßß#GŽå«RràõkÖüùÔŒ ¶„Æ×WpÅ aaáÞð&us+ k60 «èèðÇ®²²ZllÞÕÖ²–-SÚ·OóÛmW,wß¾œr™L®¨(~Ù2­%K´¾ìøÝ4~{ƒVWêT>Ʋ´”HLltp™2EÙÙYNJŠ›|óféœ9ñ­­ìS§†ÌŸ?pbÛ ®£ãó/j¦65±DDzôB!R„òVë¨"ÅßB0jjj"##W¯^½`Á‚M›6Á/H°¾‹&˜B+žfBM L·¸þ@X<ì.ý›<8ÑâÞÁåûÿކz / 1q[† A<<0òòHhhç£ãí-((ˆDFòê5,Z$qq-4¯T£˜ÎÆF¬¤„±woÉ×BMMá¿þÒ“ ÊÿyÔùúžž*òò¤ädêÓ§Êߟ]ee5%߯åâöà&·!]>Ù½>3*8ØÊo­þhMž‹ ë}Ûð IDATòß×óu.2D|ùríC‡LëêÜÂíe$$©©Ô›7K55Cç̉ù²‹ôÊ›ýŸeW8,^ŽÒ£¯¤ŸŸòþýšÅÅí‹åž?_Áט@P³{·ÜС¤ª*ö¬Y%YY_| ¿>C++c÷í#‡„ˆ)*bcc™^^Ôuëš©Ôã1,)á,_Þäç×”‘ÁÖÐÀÞ¼)¶q£H¯ÙÕÊ•aaÍRR¸7”ùeWEEíóçgÕֲƓس§ØUj*mæÌ×ëÖ¥ÖÔ0.ÔLHp\¾\§ÛT’Ÿ]€€ÆÍMq÷îAåå®—.YS ,¬òäÉ|YÙû³gÇïÞœLýzŒAm-cåʤ©SãFŒôñÑHìŠÃA×®Myñ¢öCÖgÙÕÏ iiéiÓ¦]¾|ùôéÓ¶ˆ‰‰54tÉ쩯¯ïIëÁÿÁ’&Ãb;ÀÁ…8€Yö`©·b¡ª`¡ Ò‚S÷;ô±f¹Áp3¸÷J*>h¸Ï‚â28ÔÙá¸qHs3ìÚÕÉ™$$0«W Q(ȇù<˜äã#™•Å8zô3³ï²eŠ..’Ož4wSÚÙ×WÛÝ]ñÙ³/¯7?6J©ÿ@$býý TUÒ¿ó©++ÛöíË11ydcõÏ®lÁ|¤ ÄÎ`yvã$Þåä'Àpk5aaÞ‰óQXï5±0cÆÈmßn\Y9!$däàÁSS±óç ½½LMߺUú‚¿Îœ_óù›Ãæ°Þä?éáé–/W T|X1xð#ié{ÞÞ 7¦]¹R[›˜Ø˜•Õ”Ðpòdþœ9ñææOöïϵ³“qp9tÈôG_JŸEaÑ¢·!!å&(„†Zó{øÏ\ìÙÜܼ¦¦c~400HIIù¸555U__¿'­?™`q¸‘ïFëCC œ~( rb §–:pó%€±&àqPOƒ»ÑâPU& ÎÝîèÇà ªª!$Êþ]í»»cÑׯÑÄÄΙ`Æ Rm-÷Ò¥¶úú.«pWW2ÆÙ·¯–Nç] aÇ“`±Ðµkó™Ì¯­Ý±XdÃ}^¹{wv¯ïÉOŽéÓUh4VS+,ŒoËJ/ÐÞιu«dôèçC†<]³&%%…Ê墫VéœÛ4D[Fd/vºÆŒ£(óÎf °Ö¶¼kߢ†÷¹|óǸ¸È™_¾l±q£¢¢`RR£‡G܈‘ž”Ý~{ì+ÇÞH8Ìd÷”ëøú*Ξ-‹ ȵk5½(§C"aNŸVpq!ÇÆ¶ØØä¿}Û{‘X  ²{·È¨QXµªYM­&(¨•Nï_šÕØÈÝ»—®¦VÆd0PwwâÉ“”¿þ&{Ik8tîܲ«W ˜;vÈóÇ®jkYɹ¹­,¤C"}ÓÇ9?Ÿncµn]*•ÊüãŨ(Û‘#¥¾¥ÃŸooõãÇÍjkÝN29RRUU¨¾žYPвuk¦§çëµkSÍÍëë‡/^üvÁ‚·çÏš˜ˆŽ%}äˆéêÕ_‹|ýåàç—rêTAM ÃÏO×Ȉï¸U&úã¯O.-..NW·ãÇ?~üÅ‹?n½xñ¢««kOZ°?ðôýŠ,¸q,°Î$`Æ`І×ù€  #*@ @l&ä–Ã,{šZ ´Üí$Ä °r aödÀ`@X*«(Ít°¶À㡹0¨®gçŽï „¦ €C"!L&:lXç³¥®NHNn#‘°l6jaÁ+Adb"C#,15ùÊåÉx33±ÄÄÆ7oꇕèCõ¿ŸF^ž”“Ó|ï^¹——ZBBœ²r¿¨6ddÐöíË]µ*ùĉªª6ooõ  ‚‚Ìœä45„Eˆ¸kI "Ð: íBg¹U¹¸Ac0âŠò ¢ñ¯K™Ì.žßºú–¡}3`QQ‚­­ô”)ÊJJ‚ÉÉTEEÒÝ·Èê_ˈicµñ‚Ú²=Í„07'ki FF6>~ÜÈ`p­­ùSÂã‘1cDÒÓÛ1»w×*¨¦Ö哚––&#ÓÓ8z99ììÙ‚¦¦øÔTvq17>žyãF{RKS'%ÕÇëÀÜ\öÖ­ôÇ[Ÿ=cVVrq7oŠùø‰‰õþD:{vYBB«°0öî]SSþ^Ϧ&¶£c²°0V\ÿè‘ …ÒKýޏ¿|Ú´W²²$6›<|î\u~ååøúí~8ðxŒŽÙÎNfùríY³ÔÔÔ„45…ee‰ªªÂ(ŠŠŠ¬¬$utÈÞÞÞÞkÖèJJ¨2yþþ7o–ˆˆà/]²°µ•€ÀÀÀžÏìK$ûc`Gëù%NNNd2Y\\œ@ TUU/_¾üàÁƒZZZ`hh¸aÆ––CCÃööö}ûö=|øðÔ©S¡ÛÖ‚äÞÎ5hÒr0‘‡waë𲂠óÍ•¹PÑ1ÿÀp= ÑAÞÚ™w Ôå Æ@æ{¸s ܞǀíx“…â4øB÷þ=ª­Í&‘ ¬ /öo„zh(cüøuuln®4ö£<³û÷›&N,RTÄççë¼ëã7ª§MËpp¿wϸÛeëúõ©GŽäYYI^¾lÉW\篂ÿäU—.Õ:|¸mø4ëÂ…Âð𪈈Ê[¦MS3FÎÕUgJãpQ½¿žÔWW¦1‰@ó ÎØ‰´.¢Ÿå‡†ðj©{/´ÐÒécSƒÁ=u>õ{ŽØM/øûmQ’Ä×wû—.UÍžÅå¢;wj¬]Ëw¬+›Î›Wvñb£½½ˆŸŸ¤£cç"¡×I QQŒË—ÛÏk Ü܈NNnnDIÉobZµµÜ;wÚ_½b]¼ØŠ¢ .Ž9¿~½°…Å·~™LÔÓ³´´”™™ÉxòDmèPþØUk+gêÔŒììVxùÒTF¦÷ãa³Q?¿”ýûs`É­mÛŒz§µöýx£@Q L¿|¹ˆFcŸ>=dÂ„Ž´A~u°²Qþž.’Ã/ÁxöìÙ‘#G¢££i4š”””••Õš5k,,:•œ‹ŠŠV¬XñAÚÊÞÞþÀ***=lýþÈ 1؃z ‚M£¡¨ÌÁ\n-2 6\‚;±àfÛ½ÖƒÄp¶„ÓœƒƒÀÙŽ ([°üµ \œ;:wp`74À¢E˜ùó;¾û\.xx465¡K— ººv:PLLr0¾¾’3fðÚ ¸\túôÌœœV//Ù+”¾~EL&×ÓóuBBƒ¥¥Ä¥K–}’¿ý³!5•jañÔÒR"0ÐÐÚºoÈJr2õòå¢3g „„pååmÇKš›‹Ï«ö!Tö³8]ôçùw±¯¯ãÜâiÜÕµf³¹;·F5ѺxåTTÅ–øï“1Œó±;ŸeßíÉž¶ºn³‡¯ã«ó *çÎͶ³sv–X¹²›'ðSp¹°iSÕ®]µ#F­\)éâÒ7jII¬  Ö„VRKQ[]Íqv&ZYáLLð˜žq-’’XÏŸ332X7o¶“Hˆ„RZÊýãâÊ•B&&ßd(ú&9³$7—YZÊŒˆP37ç]±ÙèìÙ™II-‚††RQáϱø1˜¾¾I99´¤$êÖ­Fk×êõº«ßøùÁá  ¾ÍÈ %&6ÞºeåêÚ)ÊÀ/ÁJEû%ÈIØ£[ |‚kPqA¨øpà¸[À×<‡A~h-A¨¼"$x™ Ö‹@A Šï 4P°6 £AQàÈIðñƒ1£!üߨ¬û÷щÙzzHFî?ÙŽ  ÖE‹h––øW¯º]¯]£NŸ^blLLJÒþtnxù’jcóNP››k)/ß]ª²²ÍÆæY^^óÚµz;wû]ú ±{w¶Ÿ_ŠººPB‚c¯¥n€FcÝ»WvìØûøø02¢XXˆ#çâ"ßmµZ‡«½îqCm]k‘Jÿ¸ «;RpÓ x]ðà¯ÛnÞ ݾ4b•S 7ÞÁáò&¢~³Åí²¢˜_§¸~½jæÌ,=vLgáÂÉç| …­[k6mª"k×”'Mê3㕊޻×ÏŒŽfff²€@@H$ÄÀ§§‡“—Ç`0@¡`©T Bàpк:n}=7+‹“žÎÂáàÕ+¨¨`««¹sæZXàÿøƒ($Ô7+&uw/ iRT愨Ì·6ýŸfŸ:U¡¬,ðøñà^T1ú¹¹ÍãÇ¿ÌËkvv–߸QØ0>¬˜¿ñËÅâ.[ö.((_LŒpó¦ÕèÑ]ü¹ü¬d´_J±™ )›`t‹ƒfSŠ`°èI#QÀdÃtKg©_ ºJ0H ”eàú(­aF ¡$"К¡¸„ÁÊ@S€ú˜îdMM$2%“AUQSëø^ëëãNœh--åŽ- ¨Øé&ÔÓHOgäæ2µµ ::¼‹TbZ=%…ŽÇcFî&­TDobB¹t©(9™ª§'Ò·å#~ *ž˜HmllIK£ÛÙɉ|ëhÇÅÕmÚ”¾iSúÙ³… ‚Å"þ©±gñœ9êúúäžd¿c1‡¹›ZO@9Öh—Ü=´®§gƒ‘RSP}_Ê`tÑæ¨­¡µTéCåÌ“ÑU´ž–…G­¢ÐÇ×) …¥¤aaõ/_Ò””Œ…ù:AÀÆF¨­ûòeKm-‡Cø ñþˆDÄÄ?nÑÓSÐÔO¡`¤¥1iiìÒRNE7,ŒÍloG/\h‹ŽfR(ȪUÍ!!Œ¼<ÎóçÌŠ .Š"òòØI“ˆsç ž}óòZ==3›““‡ ñ6‚  üË—‹«ªÚ.]²«Õââ–¥KBC«Œ(Örr=š½²²h·n•]¾\œŸO——'©« áp˜Å‹5ÇŽ•#‘øfi 6WÃﵡ1•¹X ºHcµ­b æEaÈÝ žçxÕÓï›Ú‘©eq{­à÷¨UNûù>€ƒKOªÂúú*MŸÞ›ç£Gë‚‚22Ú÷î•2$»Ÿä”êë¹Éɬª*n^ Ó‚ef†?uªMR£¢‚•“Ãèëã qJ¿äJ·¶r'M*~ô¨yüx‘mÛdùfW.TΙ“enNÞ°Ae„ޛ<ÏŸ/\²$ÑÌLLMMøØ13!¡>@ú …Fã**ÚÆ{‘œL7Nnóf#SÓψTÿ¶`ý$ø‹Ú†Êo66d¯m)ð¹G"aÙh88Ú˜ ïôvH= zJPÝJE¡äÈIŠ‚žäÀ½ ˜0 ö5Œ’P’$"@c#()±Z[!#§§×Ašjj¸ªª5 šž.¥§×ù±c0PMÍì²2ÖÝ»ª'~f‰éã“{äH™››Ô;=òˆûø¼;r$OZšøæÍhUÕî9Ù/‡ÒÒÖ1c¢33›[³Fgòd¥Ïúõ84.®.1±áرüü|º„¡¶–¡ @ZµJwâD5µoº3Ÿ¼_~5u9çÞf6oqeÒºœ±›Íݵ-ŠF퉥 (ºlåÈo7bqQîÆ»žeùü(OQÝêv‹á›S—‹†„ 3¦7}‡×ùúV (ìÞ-·zõ@“ø€æfîôé%6ÉÈàž‚甎-k×rââPssdÿþÎÉlõê¦7oX¦¦¸ƒ»£œ<Ùpõj#› /_j|ú)¬©aΙ“••Õ¤ãèØýÜÆá “'ÇR©¬êêöW¯Fcj÷ω†æüù L&74´BNŽäé©¢©),-MDQ´ºšQZÚšœÜS×ÔIJ°ó¦ARR`Ñ"Mkk);;é>©³ÖÎâ¨û=¢R›’™KäÐ.2ÁX53Á­ € q/‹îÝáÕÿœ=ˆ¾AŸ%ºŸ~±åeÞCžKì¶ U]ZÚ:sæk6ÊË[W®ÔññÑúÆsmØPݘšJ 15êkEœ¾„+W¨[·Vãñ˜!CH'N( °T *•ãâR„ÇCQëÁU~ÕD 9™ng÷ÎÐPxÔ(ÊæÍ½GQؾ=óàÁ< ¼öâżÕ~c EáСÜÕ«“-,$LL(›7}%8õ7ÁúI0…Fÿƒ‹DÀ±8àpÁX è H.ûIã‡Bt:œy­ —‘ð*NÜ.`š ¼M…;à}qGWc >‚Îuv>k&6=}šKûȃ4w®`l,3*ŠI£uy¼fÍ{ÿžÛòðaÓ§ã”–&ØØP Û–.Íe0º¯‚Å"/ZÖ×3rs›W­JúºTé/ qq­[VÓ§+S*+Û?®Z°à­›[̆ i‹½Ý¾=³´´µ©‰¥­-âî®e[U5aófÃÑ£eúªŠ-]á¨Ù„ƒØ hps3gÍš÷IIôîø3fPöî•ËËk?{¶aêÔ’ööó‘­¬dÙØäÇÄ´¼ÏŒ‰Ñ軪¬dºº¦êê jh¿…]-^üöï¿ÓôõEvìô›] lÔÖ2-z»|y— 2š~KêÏo|7ü_¬j / Jx^0w¨KAT€±*Xé–<<ˆp ZJ +/S(dpwC-¸ÿ´£«©“AF…´£nôõ‘Q£mmäÎN~£¯óò@._nýx$Èš5R øààÏ,X¾\IWWLÆž8QÞ“K#“qŒ3FöíÛÆyóâ9œ3“@LL `±Èôé*))N11ösçªÍ›§îêªàì,;¾úæÍ†»w›”—»æäŒ]µJÇÖVúÛk·}ŠÅvêR"g±Nåo¬ãÆ@¹X,f”=ï W^NËL¯úö³£(÷bÜ?(Ú…=cŒ—•‹Å"[¶þóÏ QQ|BBØ1ѽ—V€Ã‡µ—.U¬¬d._ž›Ÿß›®ÆŽ%8@—Àfe1þü³¬±ñ›8ßO‚¼<¦—Wi][WW &FS^žo›qs3gþü,E ÌÉ“½”QàpPoï„ÔTš€æƒ¼wý|^½ßøQ9rdThhÅðá’aaÖþþ†}þ•c¶?þúv¿"²‹Í< ÎA'iîç°. Üá¦'PÛ@a´³ ¨JÂùH˜sFèÃË]».ºã0e4\ßðò-XOEY(Šîu_±‡…sáø¾ŽݾÍuwç"iiW3œê°ùùRïCk+wêÔÒøøÖ œ>#ÝÕhoŸ$"‚ÍÎî^²áÒÒ¨NN/*+ÛæÎU;}zèï8Œ>Çö‡9‚3¼9{Ù§xšHËoã†Næpж?klè§eåDV¬±F¾í÷x‘ûàÌË­<ô=<‡­útçÌ̦?ÿLÀá0¹¹ÍŒ43ëƒï˜Lî¼yÙ—/W©«“^¾4íá£Èƒôôö•++“’Z)lh¨š¶ö/,ûömÛ¸q…rr8--bP‚„ßó‹…º¸¤„ˆ°Ì˜l8õ@QL„Z*œ}€ 0Í’2`ÿÙŽnõuaÑ|hk+ÿê{ãñ0q"’’‚îÚÕI°üý…EE!0Îíµd‰„ƒƒðíÛ´Ï; wïÖœ8QêôéÊèhj/ÖÊJòÎáNNrþþésç4_ᙄ_æ ÁìÜdž&nYëÕ b¡,.Áû|Îw±ˆq7ñ$µ•·€´‡ùa/*yŠ‹=²Y¼X³¸¸eÕª¤Ó§ z}vaalxø 3dRRšSèôÞ¸ù””ð/_jΚ%öæM«Ÿ_åÅ‹½Ï¡Cu7V—–²—.• QêÍgsëÖ¢­[‹¤¥ ƒÔÕùÖt.7/~ß¾[[éƒM‡ éMŽçoüäàrÑ+WŠ'LˆñóK)+kuq‘¿uËjíZ½¾ *ýï‰L°>ø©Q€3ict€ÅSñ€¢0\ È$(m€Ç®C¡ "¡ 0~0Ypüp¸SÇ“ ^B^QGÏ£†CY%8ÿM3f`Øl E³²:gSWW¢&'‡ýà¯ËÕUüý«¸Ÿ L×Ð $\_ÏZ´(§'Ñîàè(»r¥Ž°0îÂ…¢eËÞ ŽõS‚,wÔ¤â/cíÞ#ò>ÒĉâiiM'N”·àã#oØ ‘”Tëå•‘Ñ2.KK™S§Køø¼:4¤¬Œñí}þGûX1\ST€z<$…Ä­ ɸ¹ ,…B:œ[†ª¸¨&öm‡s¡^gÇçEr-´Ô¡£`ÜþAfÍÒØ¼¹/‹Åyû¶jÅŠ·<ÏUji ?®K§³““ë6nÌlç^††Üz¹óçK8¡¬£Ãùrå Aï“’Ûܱ'×hf–VRÂäç'?¯2cå cÆÄêꊘšŠxxð((ê啼worm-{ùrm›ï¡Ýúù¹û]Nc#ûÎ|gçp#£‡6$deÕ©¨ýþ»fZÚ¨ùóûübêqÿ?ùõ¬¹†Ð‘Âó<˜`*ŵ(¯‡¼FÁD 7^À4¨Hƒ V³¡$‹â ”UÀ # 2†N/ÜyòqØPR½9yÍK´´H$CCÒ¥KŸRU„…I¶¶| |}¹$WWÉ ÄØl\¼Øv¢•••øŒ }úîßŸÓæ_ÂÜ\ÚËËH]]¸¨¨qèÐà””¶3½þGG‘á[d×› ònê$®UœÒ,fèy¦Tde¹Cú¤t¨ò€ÁnºòÊ›k¡Mh²Ù’ŽÚìì¬rçŽu||Ullå¢E¯y.€0@ôêÕ¾/_V?N?x°½åŸcc#âﯡ£Ã_RÂrrʾr¥½Y†ß“Ë—«\\rŠŠXL&^½Ò27çqކNg¹»'‹‰QååùöìáQªêÊ•œ»w (Ò©Sf#G~;xù?z8))Õ'N¤®®~gÿþÔÛ·óËÊš.Ô|øÐ&9yäĉª4Ú÷¾/wGøŠÀÿÄÿÖxm”ÖãbÞ–@]ý•ñ8¢`¶^fààcÄ„0b@³è(9Œ·A^ NÜnÇm2žGãÀ¹æee`oƒp>ñéXË–Q^¾$öï'˜-或.ÎÉaŸ:UÝjæˆJ%M™"^÷×_E mç¤ì߯¥¦&pìX¯oÇòxúöñ¾wo:ioÿìæÍ¼oïÓóè‰ ŒÔá§Þ"[Å“5¸V1¶ÙD&“ì†q±JKëbß´ÿ(÷ãüJk¸·w2ž+!ÄKÕØ°a wîX¿zUqüxzg ¤ýüôŸ>­X¹òýµk%¼ @U•ÒgÞ<©âbÖúõÅ“'gWTô•¬ÆFbÙ²‚£GË“’/–~þ\SU•Ç L&1iRÂÓ§•òò|/êó–¤?cF$›Mœ;7ÈÕUƒ7Kþp8DAACFFm\\U\\UrruFFmII#“ÙüA‡(*j|ù²üÂ…lOÏø1cÂeeôõ®Zõ6 ¿¤¤©wo‘}ûŒss¼½M~T&{ø»ãõCÞKâ×w°ø)Xj +e¤À<3J€QFP’@M"Ò`Þ0x–& FÆû<<‰ú¤ê.!†úÄ%7¼t‡¢®®yÉðá¤)SÈ ðéG(-M^°@ˆDÂùóÜA¬‰ÅMM++ÙçÏ·]Z%#C›2EžÍ&NœÈ/*êØdŸ¢¢ ¿¿ÕÈ‘Šùùõ«VÅüýwÂO—öž“Ó±ÐÝw@F„ÏÝFƒÒnÊgA¬²fð)&ý•eåD¸Ö>~˜ÚÎèQE]ñý¸ \ åÅTúNisûö`c#÷ð¡¨(5#£îÏ?ãxž+œ2E~×®>qìX~HÈ7ê¿R£ ,LÞ³GñÄ å²2æõët7·¼ððº/mü݈oœ93×Û»,!¡ñüyÕ]»x¿ámÞœYQÁTPà»|¹¯˜/ ˜_¼(ߺ5‘Í&FRœ1CgKx GÕ—|7X,âæÍ¼?ÿŒ75 üí·à©S#úô¹gdôhÁ‚×zzúô¹çìüÜÄ$F»fcóTM펞ރ™3_޾páë;’6mJØ´)ÁÑ1tðà'ÆÆôõ ¢¨x{̘°™3#wìHLN®.+k’“ãwwï}ò¤Ynî˜Ó§ÍV®ÔQPèp?€ÿñSð+ â£ÞÚ»rØ]“ƒüE ’0Ä‘9x±æj8ðk¯c²üÜ`ÌVÜ}…[bœ88¬@Ð+ÜÛ‡Q–°í(¶xcÖxœÜÑ<þ¢¸ˆ `þìæ%W¯rÜÝÙ¤ØXê)±{ûòÔTÖ»w²ºº­.µÁÁµ..9,‘‘¡+.Þ¶¸ÎâÅ)ÇŽŒ#Я£ŸA`ÿþ”³g3srêûMîàA“_²-ô÷¤ˆÞØ{Í£F+˜±Î”xßrIBQä@:ø£_ç_¹õ£ËtcÓßÎÂ9üt}TæS®…+‡ÿc¤jÙIËŸ=+Y³&þÕ«²å˵ÿùÇ„çq¶oÏÚ±#“ŸŸÚßÀ S_§÷ïžž…·oW÷îÍgm-¼w¯’¨èxêc2‰={J>¬ «›8Q|Ãù~ý:uÏÛ³'gÍš÷ýû‹=ª3p`Ý¿IZZ­¥eP}=kÅ mÛþ—Õ½45qL=t(-/¯ÞÂBæÅ‹2MMQ ¡ŒŒ:aaЦ¦hb"É$””Y,Ndd¹xB@ß¾âïÞÑØÚÊ…„”PRüÐGAGGLZšöþ}µµ •JÖÖ4Hºo_±î¾V88H75±ùøÚõS"‘Hw°.Á™tû×v0¾É¯ï`Õ0 *Ì/àe!.ŒÆt=¬»Ý!p„]Ž>kA%#odDqð_,?‰Ñf¸ó7ìöú£3ÿ,è?rà - WoÁe. ôîƒ>}XyyÄÇT‡O¿‹Ñ«Ÿ=[èìYn#;»ŒààÚÍ›åÿþ»í²¼¼&C×UU,ÿ~ÎμL…„”ìߟzçN¾˜íÈ‘þßùiø×cÉ…·GždŒà¼¾ÆÜɵŠæ?|#—s8ÄþÝÏJJZ5ò“–þc½í×g ^ï~°˜k¡‰šõòa{»ÄòGŠÆŽ kjâìÝk´j•.oƒ°Ù„‹Ë»7Jz÷ 5UVîÔ\“IøøT¬ZUÀb}û ìÛ§äàÀÿëV"#ë×­+|ö¬NLŒ2¾äæÍ BBròþý·lܸxW¯ö8‘[™¶=”—3œÃjkYJJ‚·o[ÿ/ß¹[‰­š9ó¥„5,¬LWWlÞ¼^ƒËê鉉‹·=;ÌdrjjX55̺:vU³¤¤1?¿žF#ð«ûö¡ÊÉñËÈð·ÓËé*rr z]Td}âD¾»;· L›H¤ëÄÄî0f鯝í`|“_ÙÁŠ*Ã@Y’k(qÞ~‰ð‰(MBZÜo £ïVA”‹|ñü=f[a¥Êkàâ…¤\¼Ø U”Vaê¼ËÄËÓP“€…ðü5\Çãw`±0~&âpâ †Û5÷ðaöÅ‹„ˆ?þ¬ÊÌd/^\Ífs×ÖnÄzñ¢nãÆb/ªÉË·=•pæLÁåË%MMì7 åäxÑ©ªb®]›”TýæM¥££Â®]F½{×ÛØ¯DnEƒÖÚGM,ÎS溜´–«Hb²Â2H"1Ñù—ý¸ƒXS¦÷7ûb‹Íao¼íš[Ñ**F%Ó¶¿¤ ÞeŠù{ö$3™WW%K¸ÓÅÚISgüøø¼¼&qqêƒFÂÂí;×èæ–'"BNLl24ä?p@‰‡>Ê¥¼œ½eKñÛ·õõìÊJ¶Ê°aýQDG×üö[Œ‰‰èèÑÒ«WórÖ˜LÎðáÏ úô¹vÍRD„—éEž©®fäç×=}šWZڜҠ©)..Îoa¡ #ó Îd=xP8eJ„žž8??yÃý¡C~ÞVcœÁƒß0™D\Ü 6›ÓÎŒ.‰t…à=ýà+¸®þÂF{ø•s°àZ&*§‰ø2<ÎBz´d@£@UwÀÁñy8Ò¢0épêÈJ@AEå8õoó˜cì†ã—›³¨TX˜!;‡Z¤º»ºR’’ˆ  "&æÓw«W/ŠŠ )0áåÅkba!,)I}ò¤öï¿¿˜É>gŽ’¨(%,Œ>wnoßX Úñã/Ö´³“»~=ÏÀàáöí‰õõ=%¹¸Mzl"ˆª”à¬Áê¶S\¸VÕ¥ÌÇG›()(rËØ¦~%îIÒ .ï ÀHÃé]è]pvV^¶L;>ž¾lYÌŋټ ÂÏO¾p¡¯¢"_NNãØ±qmÊáÆÇÇ·À~ý""ú̘!ÙÐÀ ª51IÛ´©¸ €—þ<í¡¾žóÏ?e½{'{{—ÅÆ68;‹'$ètÞ»*(h3&NSS°_?aÞ¼+Ñ!!%55¬'|ïŠ šZµ{wô„  ¸&.~R_ÿ’‡GØæÍQ^§N%:9Ý““;miysñâg·ogVWÿ"â/EÓ§GÖÔ° Ä?¶6ì'ö®,Y’úæM͇«úÿ”ß{¿²ƒ¥" dàŸ >LÕ……2n¦ÀL4°ð0`¨ ¼HÇÄë÷Í©î œ¡£Ž˜T°Ø0bŒô ¢€§[º¹BC µµHÿ($&†9sÈ’üüZÝuÖ®UU¥¤§³sr¸Ýš-[äååi©©Mññm+‘HðöÖ–•¥Õ×sNžÌçù3™2EíüùAÚMMœààb=½û¦66öP7kðàÁ?Ú„/â9Z‡J~B6~NÒçZŸãE4T“H$ûÏÊ ËËê£_·]ÑYÛD¿sšk¡¤ìh£Ù]dò'&OVÝ»×H@€røpÚÇ<ö+””¤9¢ÓÔÄih æÍKþÜïï¨N,•Jš;W2#C×ÃCFY™vÿ~¦fÊÒ¥ù™™]y;¯­åûÜòlÛ–¸aC¼ººð­[–¦¦<¶^yû¶vÈ755ìõëÕwìànwÍ3ïÞ5=ZáãSÆÏO% Ο/=nœXg²‘^¾¬?w®25µééÓZÇ‹þõ—œµu×ds8Ä„ ¥zzÂaa¦ÒÒ¼ˆ;„…•ÚÛ‡I¬]«;q¢j—ö9 ûöíÌ'##‹8Ô×3ÕÔD§MÓÖÕ•°²RÔÔl»Í%‹Å‰Š* ÎON®¸t)Í&(’“S¯E‹ † ë.S»úzöÀß½£/^¬uø°é6§³Ü¿_îäÇáÿþÛoôh™Õ]íÜ—D"#\»ÃªÙ$ß_ÛÁø&?·ÏÞdPÑ„·°VŽXžfC˜.FâíxX` 2 ñ¹¨¨€#@¥àþëæÆ FDþý8[5oøhHzÜBE àÕÔÔ4/ÑÐ ÍšEŽ%ΟoÄòô¡PÁÌÍåýõ—œ¤$%9¹)0°_`üx9ù†ÎÖ­Yê ÷9C†Èúúšÿû¯uÿþ’jj‚+VÄŒ¾råÛääšoïü?žct©dRY/”dÀµŠqo/QWI"µ!ì^YÙðúw+«<%4õ×B-y£A}†u­Í-ñôÔ_ºTÀÆï²³yTI06 è'(H~ù²úøqÞc«\ôí+päˆR\œöÊ•²ÕÕœ  ÚéÓsŒŒRçÏÏ{ø°¦±±½ZD,VçéY4~|–“Sæ±cåqq£F‰>~ÜûÑ£^]å]ؼ9«°°IJŠæïoÈ›w•“S¿sg“ɱµ•ë&ïŠÍ&ΜIrv¾?cFPPP.eåJ£/&de¹îÜi>k–î—¼+T*ÙÂBáÏ?ûûúËÌtݰaÀ!JþþnnOÇ»Ÿ“ó“]7¼¼’²³ëôõż¼Œ~´-%!¡nïÞ6›Ø¼¹÷èѼTA¤îyýç×`mŠ!6Ç`¡.ŽZÀç-–aŒ&üñ¶CŽŒ\OÒð»ÞåcÊ@ün‡êô_†ô"$¾*ªë`: H¸ý^°l+¼ÏcÝBì\Ý| EËqá:vnÄ’ùÍKbc ;;“‰¬,šT‹èÀŠÕÔ-^,tø0÷µìäÉŠ%Kò‡  ÐøÒ“zy9sö줻wËÖ®Ußµ« ‡ {ÿàA‘‰‰ä«WåƒIOŸ®î쬬ªÚ½3ß$>>¾‡·ì˜yâõ…9ƒ8)™r­â·Ò‚À½¡\A, IÁµ-‚Xˆ÷¦½m¹ ‰DÞèt¦—Œ^·ÚÏdr–,‰>q"ÝÐPüùó¡<‡0oÝ*[´(©¬ŒuùrßÉ“y©›û ee¬³g+£¢ê¯_§àç'‘ÉÐ×05ÔÕåïÝ›_Y™*-MÀá ©‰SPÀ*(`ÆÅ5¾~]ÏfÏŸ×PP ™™ êèðÏ™#©¯ßÅÉÚûöå¬^ý^GGèüyýAƒxe¨¯g[[?‰Ž®\° Ï‘#ý)”®¿9ç/Yš˜X`âÄ>jÓ¦i ñ´nh`:wÿ~Nll™¢¢Ð† fS§òX3ñ /µ± îÕK8 `°Á}ÊŸ‚¢"Æœ9I+Wªzyi~È!ëxkVwØ6›tþ×v0¾É¯ï`½«$úúC’¹SPÇ€ê1pd/€’BT.ü¦b† n¾ÁÄ#0VEÌfXtÇ`…3öÏ€E^8æå.øgD¾…ÅDÈJ!+Bpã¦C³7’^úñ’5r$ëáCbÇÊúõŸ"…‰‰,[ÛrÚ… âJJ­j¯ššˆ©Ssè'N¨¸¹}qÊ&,¬ÊÎ.†ÃA` ‘½=3;ŸSyëVÞ¡Cit:ÓÔT2:ºÒÌLÊÞ^ÎÚZ®Iyù.¸'UU1KKËÊ••  µµ,ÊÊêê"ÊÊmÌxÒétqñ}ùK.¬éëÄ!æV{NkI@Dø@IL6!®È÷ìk®«j¨4~!YY´t…K\ØéM˜e¹¦[ÿδ´ JL¬vuÕ8sf Ï·ö½{sþøã½åñccKKqááá]›Eßxó&=-­éÊ•*òòÔâbjQ €š_N@¯^|2·ä䨲²ÔáÃEF޳³¡t¶Ø± îÝ+wrŠpåJßI“xt.7lˆ;s&KHˆòòå0))^Ê„¿Baaýž=ÑÇŽ%ÈÊ ðôì?ožþ×OtûÏ]qqýæÍQ>> ¶o7ÿã“ïßé¥C0™œ³ÙÄœ9½V¬ÐùÑætŠêjÖ¤IñOžTÍš¥xäˆöÝÓ;ê`&æv‡yóHg~mã›üúAîÏ‘\ßu0µ7Vãn:æàOs\ŒÁÁ0ñ!d!˜lL8ŒÈ ,…¥&â²°è(2‹~ ‚|ˆOÇ"/¼ÏGÆfÊõ<{‰ Kà68Lš…Èר¿SÆ7=,ŒX·Ž•…÷ï©‚-ü‡U«ªïÞeØÚÒŽçöþý·ÚË«4%¥)%EGJê‹wƒ½{snÞ,IOoˆ¤¨Ø•—ã†öíÛùoÞTž8‘®£#ÊÏO/ðÛor4Y[[´o_199YY~YY~>>²„ЬVWǦÓ••ÌÚZVAACQQ“I$&Ò ddø=*jh`[[ˆ…•2D64´ú¤¥ù/Ö8PÊѱ]Ú-=‡)>¯®½Ê3&ÒŸ1Ö’Ðê×Ä7f-ÿÔ]ÝÛƒ+Ê[ÍÁÕÔ°_F7ÆÄ”ј“¼îP…ZÍ sü ¡Ëœ 5$%»½ãDff»{??Y[[´3¤«W¿ ­§<¨­¯ßjеµœ˜˜†ôtÆ›7õÙÙLôömUUZI KA¦­Í¯ªJ350@PV¶3 ß¼©vpˆÕÕvv–^½šGy¹'Ò=<¢íì¼¼úuy@% cîܧ,!//¸r¥ñ¼yz||]ïfúú¦>WæîÞ×ËËBP°çfsž8‘þ÷ß 2×®Yôp_ðë0œQ£bê …/]2•ý41ÝQë± ;,\H:þk;ßäÿ…ƒu13ža€ ¢Æ 0 ס&†Œùh`Bq ê˜HZ YxÞÂŽ»pµÄy7½uøÝ“¬Àj>"âqÆsFÀÅÛ˜± Úˆ»×ì^;ƒE+aeŽð‡Ÿ °°`EFÇŽQ,øôKNKcéë—’HHN–ëÝ›ûbçàX³t©Œ·÷] ‡9260°ÂÝ]éØ1î¨Èe±ˆÈÈòèè ÿüèèÊþý%ƒƒKXYÉ<^`ð`™¾—µµLX؇?š§ÿDmldŸ=û´DD„:|¸Baaƒ¤$Ÿ††pii6› )©¨`èêŠ&'ט™IíÛgbmÍ[&Áà]~u¿ O8q•¹s$§U¤ŠÄ/6"x㾬ʊšqc¸c² Òu ” º(·n{IÄЇg”èëKéèH,]jhc£Ü­u×åvvO›š8§N™Í›÷Å2‹¯Ãá«W¿?p WEEàùóþªª¿x3²ììFsó×’’Téþáqv,6¶ÊÂ"¨¡íë;hæL.4¯¦†±xqèåËiººêê¢ÇŽÙª¨t£ôÝË—Åýõ2((wØ0Õ;wùù»!ZØi ŽŽÎý¬¬ºk×,'Múùró[òûï)>>ù |/^ ÐÐh5Ãð?«‡ðë;X ÁæÀü.$øà=’°º þ´À0ulx„7y°ÔÀ_öÈ*è $ë¿CR'áL´”à».<Ä¡ëP•ÇÀ`bàxHˆaËr 1€ºz˜ÛCJûw ¿q³×®qvïæ¨¨üý)äKnnô”–‰ ÕÛ›û5>¾ÑÑ1SCƒïÄ ]Ý/Þ¢ nnI œ!C$6mêÕ•ŸÚg²²êé))5œ¨¨ò²²&UUá—/Ë++––2elldÓÒj%%iÆÆ’uu,99--Šªª‚‚€²² °ðŸk³³ë®\É=p ¥¢‚1fŒ’¦¦è®]?M±ñøÃ‘þo úÙϫȭƒX·ªGϾ7BJJ`ÎL%2©Ueƒ˜ÿ¿ïLg±[ɨHöq3=zÿ^®¿FS'*ªXHˆª¯/9s¦îœ9ºÝ~øÀùóY«VÅhhˆìÛglc#ËÛ ‡·µµl …ôè‘‘”’{>ÕÕ¬áÃßIPhÌ›`wm-käÈP:9dˆl×Ö²ÅÄ”Mœø@EEäÍ›ÒLJ̞ͣj‡HM­úí·mm 11¾›7GP©=.>äã“~íZNC;"Âþ§VŠZ¿>ýùszEÓ×WßÔ”[oïVáWv°ÞÐ1@‚4û-qÖ‘8”„¥zð6ÇÎHü†‰:¸î„W¹tÒBÈû TŒØG 84KìQÓåY¨i@ÂôUC#}& —¼–ÀÒ6yc³7Æ Ç­£ÍGücöÂôɸðQw”Å”)ì°0ÎÑ£”‰?]n23Ùºº¥l6/«§Çív,^œwôh…‹‹ÄåË_S ©:4† pë–áØ±?MÈç+Ô׳½½Sÿþ;Éä,\ØgêÔÆ!Cz®Ö¼Í¡›nzBðcîˉl¹ª‰C{ú[ Ó,ëÌô²³§¢¸vÓKM£\åZ¸ÞÑGW¡ù^[TTãFú¾}1**"áá…½z‰ýý·Ù¬YºÝ$‡¸~}Ü®]I½{‹<{f§¢Â£HUÓÞþmttµ5ùÁë΋¼÷@9ŽŽ±OŸVŠ„†šJHð2#F˜7ïUdd¹¨(íÙ3»ÿh:Ï•+iaÂÂT%%‘3g~ÓÑ‘ìè<çÏ%$TØÚú——7nÞ<ðï¿Íx¡û¨«cijÞ+*j¼}ÛÚÉé'KEhÉ–-™7fòñ‘ml$>ß £–7±¤K lƃtøv0ÚC{ÂèB$h\‹jÜ´A&!® lÌ6ŒŒJ×a *ú«@ˆw“Àmø©MQALµ”n½>¸Eln7¿p*øù™êA IDAT‹œÅéK€™ÙÈùX†O¥ÂÁD§ãæÍVß´^½(nn‚‚‚¤Ó§>·|ãF…Ñ£Åbcnß®þ|íØÚJìÞ݇Ã!||òÒÒêyÿ¤z BB”uëônܰ¤äß¾ýs4ó1Vwì§`Õ…Óº8™ŸÌtâ¿! @Ñë+¯ªÆ})¬JS$qZÝ›Íû ÿÏ»   ´d‰azúÌåËúö•Ê̬öö޳·xó¦´;Þȶm†..jäuëbÛgo´;wú *•“÷dI*ƒÁã8=6›X¹ò=™LRTä»s§oÞ€cÇÞ‡„””—3®\1ï*ïŠ °aCä®]Ñ¥¥ “'k†„8óà]¡¿Rwï:ÚÚ*_º”véR*oƒt—.e“H¤Aƒ¤jïêС¼«WK(ÒÅ‹úmzW<À¥;^]bÛOM—9Xµµ_ToúQô€ÈJ\ÊG?) W³"ÜÊ‚¢0C”—“`™òé8ôœŒÑ[±9x•KQß„ýþ¨k€ùΠQqè: Ê@AK]ñ6 G.6QM ç â%öúdƬYä~ýpå ' €[ËÔ”ÜÃÝDNŽ:y²øû÷ŒE‹òéô¯É¬¯Z¥¶l™jx8}Õª÷t:‹çϪGáä¤üàÁ ¾¸¸ªƒ{Ö5úKlrÖ'‘DR½E±âZÅ|z’Sš `˜ƒ6×*2KT°ò“;ÅG˜<€»Ó32™4aBŸ¸8— †)+ çt}ÅŠðÚÚ.î$C¡Ž鯤$xñbö¢EÜ•íGI‰ÿèQmeesç §OOüJw Ÿ‚À¢E)>>y¥¥Œ'OLÔÕy¬®ŠªX¾<¦´´éôi³^½ºæA¢©‰½råó]»b ëOžüm÷nË’Ämn®0¾~vvõÂ…!_{Düž45q6mzW^Þ´e ·jÝOÄ¡CyÞÞyõõl??ûˆÿïI‡~ååå£G±³³KMýtóåžî9\È€ñà—½ð,gâAã !̇ðL¤”ŠH-ÆÉg`¨SMTÕáúsP’½˜,œ¿×<òäQpîê>Æ¡ÜgƒDÂ…«(¯l^ÂÏÙ³)à´ b))QÌÌø¢£™^^mø¦Ó§K$TXÈܽû±Š-[zÙÛKÞ¹S¶lY“ù‹ÜÉllä¶m3 *Þ¼ù]JJO¹FcUñÞü¶S\X¤Ön,ãöNºúrjêÜááR+§9QÉÉxŽ´ˆÂ—A&“¦O×¾zuÄÆf 9*ªxôè»!!]¦íù))¾½{…„(gÏfúùñØ©€––ÐÑ£ÚÔ7J6lÈüe& ¼½óNž,¢9¢£§Çc¥$Î\²ä ƒÁqsë=zt×DSètÆÂ…!¼ýí7e?¿¡nnÜœ¾'S§j;;÷®©a®]û‚ÃéçþÆÜ‚‚==±aþøëá>œçᑚ‘ѰeKï©S»Ò»"@êŽWZø“ÒakÍš5êêê………#FŒˆŠâN+éi8È!¶±Õpé{E„#­½à¬…ìj„æB„+¬¡&“‘0ÝVZ¸…²ZXî„~8|·y´%1@Go6w*4ë‡Ùço5o` ‡…sÁÏãg>ÙàæF3†MܽÛ*ˆµnˆƒ¿¿Sh(w·52Ç+ÛØˆìÝ[úæMÓˆÿ!&FõöÖ6LúÚµâeË~ŽxO{˜0AÅÅEDR’oîܨrþ1wî“Lÿé$Åkdk® ˜ÏÎqŠÓ ñyKD°¢?91•Ó¾y,!!ê¦M_¾œ( @-)i°·¿íéÙµ!"##‰Ó§ZZÊìÞUÁó8ì»wFŒö÷/YºôWøfž>]pêT­­ÄÕ«}­¬x×Sذ!ž H“'«íÞÝ52âeeööׯ¿2Diß>«áÃ;[G§Ó;9ÂÑ£6jdŸ?ŸÜÉ¡º„={’Œ$Ö¯×ÿIÛ9ïÚ•½tiª¤¯¯ÞÌ™]ì#6¿;^]käÏH‡¬û÷ïoÚ´ITTÔÙÙùæÍ›“'Oމ‰é˸ }F;wÔB- gs!Jƒ™, $q2ŒdQÝ„ã±0ÎY•8÷,¨KCR58ÿaÒpŠ«@!#ú=ؘ ‰‰¼RÜ i”-JÊqØÿ=£OpBQ1¼£ñcãf~~ØÙ‘jk±}{+KF†liÉ×ÔDüñGõçøúú 2™ÄÞ½¥_¨« lßÞ‹ àã“î½{{ ÇojbGD”;–þ£mù«W?÷õM®ç˜*‰ØA™Â@ë¼6“á¿€¶®l¯ÞÜÚ°Â¥VdmÚ å4J{%ÍŒe=rš5K—B!æ8:Þ­¬lê‚wò5…ŒŒÚI“"ÊËy최““ce%¾j•Jffã‘#yÛ¶eu¡…ߟ۷Ë,HÉÈhpsSâµ! \»–{èPÚû÷5Û¶ðV{ÈEEE“›ÛÓÌÌj%%_ß¡††Ò3''§“#HJò»ºêÉ>_]Ý•íºyàÙ³ÒØØªÂÂFggåk 6lÈðñÉWQáŸ?_iúôŸ5×BCC§L™"+++..nnnÀµÁ×=œœœ &ˆ‰‰‰‰‰M˜0!77÷;ÚÞþyWUU 5wP1119{öì˜1c’“¿Ç3 Ñšvî5W ƒ$CGÔÁâàMšØpëyä× ¬ÆJ©3UÜK€…¿Á¼7ž$‚ ÀOÃÂQàÃùZE‹'ªþ kþ×yÌ!+…§«Çìm`o ]-\kñݘ?ŸR¸ rp4ƒ¼$®‡€¨f;"«WƒšÇwŸ)qÔ6 -«y‰Ë8ØAM-4º—/'KJ¢¼áá­â M˜ÀŸ“þt©Ÿ1nœØÄ‰âT*ví*ùæ;ݰ¡×ìÙŠõõìíÛ³ÒÓ{hȧý|HYµJ·¾žýî]uvvÏ’¢¨¬l:p – °r¥ñøñÍ·ÿ£ $sž<”k{fÄ•ÈgÿäT¤ÕÊ…r­j¨g½ç1£\UUäÙ³q“'kJJòïÚ}ñb—e;©ª ùù "“IEúñÌôéòÞÞ:oßÖ^ºTtäH'æw+¯^UoÙ’ÕØH,_®ÒÉöêG¾/(hPT<~|@ç3X,ΊaÉÉ•**"AAc•”º±7ÏØÛ«XX(ˆ‹óß¼ùÃfùoßÎ](%…µz5½ººñÐ!%IIêÑ£å7n|#ó”DÂÉ“ºóæ)½zU=gNb~~Wæå|>$‚hi‰.\¨Q¶ysÏ b-_vófº““Æ®]ÿ-n o¥% `/uBZçTÜÙ€!œõy+$8· aaÚ•+“&i绺9ÏÛ8Ÿ3b„¢——Ñ‹åÓ§G–•uìëÞòß9sNŸÖ‹Ž®]º4åÈ‘Ÿ#ŽõæMƒÃÛÇ+¦O—ß·O«3^QTTŪUo++™~~ƒde;›ÿK˜??äĉD ±  ±½z‰ur@.¸Î]gX³Æ$3“¾sç›RIÚØÈÞ³'åùó²5k¾‡–}W‘‘Ñ`eõ&  TOOèÐ!íé]¹»ç¸{÷W˜Äxð෬Ɨj>Ö|ɸ~%ÓŸf¸@Z ‘QxÞBÙÛÍ")‰ÐP""¢ÕÅÆÙYÀÒ’¯¸˜säH«–ÀPP ­Y#« @;{¶¢¤ä÷`*•´¿–¹¹XX}Þ¼äœ^ÚþKY¶L‹F#_¿ž›–VócMúgÏòãã+ôõ¥ví²àj ²ÞQ@$ÏR†síePT¬R[ V.˜kU}#",‹g{H$üùg//K‚ öï=qâÏCqáá¡5p T^^ý_Åwèù¹Xåœ9Їk SNž,8~¼ «,ì&bbjgÍJ¬ªbMš$·}{ŸÎtV©­e­Yó–ÁàÌœ©aoßi4‡Å;—$,L;thˆŽNרM¶„g¡ÑÏ=ZCYY$-ñêonß.(+k26–ÐÕíb´ûxú´rÙ²´÷ïLME/^ìkhØ™4?¿Ê7ªèèüôE|žžžh¹ð+ž@ee¥”T«8Ÿ´´tEEWf¦v”ö:X“&M*)អª¬¬œ:ujW›Ô6·oß¶¶¶PQQY¾|ù¦M›Ö­[÷õ]ú ÀICï°“2cwG—‘øÎ϶cˆc09˜¤ƒ~rðçdWPÁ T6`ÛõTãL!)„}÷L6H$ü1j²œ—›5«VOƒ†|ý¾K`s€Qï6© ÀÑ‹.,„ @Y«<+[Eww/VR"mÚÄF‹ÇD ‹—˜š’·n­ÍÍmµêÃßnnRcÇŠEFÖÏ›—ßrÕÇÇǘS¥œ=«?x0ùÅ úðá1Ì–›ÑéôoŽðùª;BŸ>"ü¡ÃÏOlÛ–ØÞ‹Å™??„Notv–ÔÒ’àÚÌÑHÁ@AÀ^Ê„:Rë&¬3ò0„sÂYhÍ“ ÔÆFVgÞÅ AµçÏUQ^° dùòû]ò9|HÆrpP8y2ÃÇç=#´\åî®äã£+"B]¸0yëÖ,Fàí]tt„S§Âìí£étÖœ9Jë×uuÕ¡å*7·§QQ“'«îÜÙ¯óïâÖ­ôåË쬯]s03“ëá¿îÈȈeËú)+ Ÿ;—üým8t(USSdôhÏ#tÕçÐÎV®|æàð6)©nÙ2ÕÿÕ,-Mùú›6mjQQ§íêúžÃI ¥Õkió篠MaMàkÏ+hSX›#´ß€Ï)..7nœµu«ê<H{;­Y³Æ××wïÞ½3fÌø°äñãÇ ,˜6mÚ¶mÛºÓ¶)..îÓ§Ï7åãI$^k”°[ ýÃMǵþ˜¤ðxõÇ5Œ¹…»é8`‡eýq& ó®ÃRÏ€á$äãæbŒïª:¨Ì†¼îm„® º.HÍAÀnŒ¡Q°™ Y)d‡BP**¡aˆšZ¼yÓ‘ËÊJL˜ÀÊÏÇùósóVÏÄS§V]¹Ò0{¶àÙ³m<’ææ2 R««ÙW®¨M™òígÖŠ ¦MtNN“ÄÙ³z?wÛÝìì:-­ûjj‚!!v**?8™÷ر„E‹žikK¼{7µÍ޶ÑãEØÂò[Îæ®4Þ;@?K\„¯AM2}×*‡‘:öõ:iÞ¥K©®®Al6áãc³pa×èVߺ•7aÂscc‰Ë—-: ¸p¡höì$6›Øºµ÷_it…]IddõˆoétÖøñ²W®ÐhJ˜zþ¼lȧT*éõëᆆ¼«g} :ºÄÆ&ÀÔTvâÄ>K—þ Ñ““+gÎ *(¨ËÎvýž «ûö} .NËÏwúJ§ùƒÁÙ¾={Ë–L kתoßÞ»CAÓº:ÎÈ‘™aauîîR'Oªv¨á:b'O&ƒ]¤õ¼ååçç;::îÛ·ÏÞÞþë[¶ôäååãââäå?Eˆ‹ŠŠLLL ˜tQ{¿ë^^^<øçŸF––æáá±mÛ¶{÷îýï @ûO›•(^Ö€I`l¤á_Ëô!/€kYàÞCTð \Œa¡~*Š`±=ltpý5Hcõ8¨Éâ\Hð˜“O³„CÌ0Úz}pùNó)I,v‡í`k!:*) [[²¢"öìá.ܾ]ÔÒ’ÃŒ‹k£âFU•¶g¢™™àÖ­%ÅÅßNÖ‘’¢šXXˆWW³íìÞ–—ÿ°*žiùĦ®.¼b…Žªªðñã?Ð$ ûÒ¥Tss…íÛ}én1ÖD©Ÿª8€Tçp§Ö:fæ°41ÕÒæ–S Éhhè왚6Mûôi;‘3g’®\Iëäh?^åÏ?õ¥¥ùçÎ}ÕÎö‚-ß¹˜1CáÒ¥¾êê~~Esç&±X=HHöÑ£ T¡I“ä:ï]ÕÕ±/~íà ¿u«a罫òòÆéÓƒ e45Żջúʹã]]Iyy!MMñW¯¾]©Ó…œ;—ic#»p¡fÏ÷®rsmmcþý·ÔÜ\ÜÏOçÎŽMIæÎÍ#‘0y²Ä?q§E#GŽÜ¿ÿ7½+´öúöíÛrm\\œ¾þliЇ “W¯^ÙÚÚÚÙÙ†„„èééuŸe_çÚµkVVÜMßÚ¤†g5¸W‰ÉJˆªÂ•|¤Öa¢¢Êp)ÙµÕéUx”…g¹¢a”."spì¸ Äë,\}…”"˜lg 8zÕõ0s$Þe¢¨ñëc¦Ah¼N‚ý1‹ýw7$¦ -陟Lòð ÇÅ·nq‚ƒ[ÝWz÷¦˜šòÅÆ²/nCw€»»”¸8åÝ»Æ-[ŠÚóÞùNŸÖÍÉiŒ‰©qpx[Yù“5+äJ™>6íë|ýÜñ€¶¶xhhÁýû]óUlµµ¬ãÇÓŸ=+>]ý»”7îß/71‰zñ‚^YÉòñÑáAhmß¾Òkתbc·n•êpŒrw¼:j€’’’#FìÚµËÎή=Û·ôFíëëÛr­¯¯¯““ftþH$’¸¸¸ŒŒLûµÔ;½½ý7ŠŠŠ˜LfffæŽ;¶nݺsg»¢šsd¡HC 4xô‚½ nA‚ãÕ¡)ŠY ’1¯TDq'Æ€¤–¡ºB˜:½dpó5è«Âº/Ôeq+Ä„á:9Ÿü¸ùX“FÁÑê*xü¼y‰ª2œ‘™s—>™$!U«(22ðõåŽlÙ""#Cnl$nßnC²D©S*#Fˆ¾~ÝxéRU{Þ¾²2Hˆ©¦¦`^^ÓäÉ yy?q]aÿþ’––2**B7oþ°4‚ÀÓ§ùââ|žžý¿þˆ9ÑLÙ@Y €7yl¸ÓT§5‰ HªkHjëpkÛ„…d4ÔwA¸qáBƒ9sôX,ÎqQQ]9¡^ºdA£‘_½*ü¸ø›Û‹‹#`3j”LP‰´4-6¶vÉ’Ô^±{wö™3L&áî®´g&…ÒÙKÜýû…IItAAŠŸŸ9•ÚÙѼ½cKK„®]sàããEd¨ý|óÜu”‘#Õåå…rr¾_‘Ê;jjBC†Èv>pØ}°XĦM™æÒhdGGéèh3cãwþ «{ð †D¹sªÚÚ¼ä¶3À×/,1bÄŸþ9jÔ¨6×~ÝpwwˆˆØ±cGeeeeeåöíÛ###ÝÜÜx0£«è€ƒ3hРwïÞ=yò$88ØÑÑ1=ý;I›xzz^ºtÉÀÀ@HHÈÚÚ:999<<ÜÔÔ´=ûºÊ¢†ƒãÅÈlÂ8•aO:,ÔEj5þyî†(©Ç¡hס¯<†ôÆãT\Œ€%vÈ(žGh`€Ç$ä`¯scœß' ¿ÿ\FqP)aƒÀPìôùdÀ(,†×Aä·˜öð “Îã­Ý¾]ÁÙù§©”ü111S§Nåj†SUÕMøº' **úôéÓ¨¨(uuuuuõׯ_?yòDXøGþXÚë`­]»ÖÉÉiÓ¦MgΜ‘——÷öö^±b…ƒƒÃƻվØÙÙݺu«¬¬ŒÉdæååùúúêè´7Þ.EÅti ƒJ ŸJxP+9èI  ó¡"†9 €«I0{\~ Fj˜2}äàN¡$…¤\„½€>Êp´B#çî5nöHˆ!"ÑËä5{cÜh08qî“U¢¢X²„ àŸ8\¾ÂÌ™‚FF´¬,öÉ“m+…º¸HŒ/N§³×­+lg—_ee~__ýÁƒ%rr]\Þ½~ÝSľÎç‰ cÇ*+) &%U×dŽÿ¸ví}ff‘‘t{Â.ƒTäD&)#q_ûš®m ¢*¡£+ǵ*üYF}W±H$lÛ6ÈÑQ]UUdÉ’°ºº.ó÷ß5§O×(+kÚ´©kdÉtt„в²ÏËkrvŽ»yó{ŸÙ’†»{òáÃyQQ5ÿþk8gŽb— »wo²šš¹¹ô‚’'PXX¿fM‡CL™¢eeÕ5æ}g„…iýû˲ÙÄ›7ßãü¾{GýºBP2ztMHºv­dÖ¬ÄÄÄ:UUÇMÜÝ•xðé‰åË ?®]°@ú?ºKçý{B´…„DsQ×7= ÿêêêêêjuõ<;Ü^+++ëíÛ·£Gz:thTTTjj—ÉFwÓePÊÂá"p€åè%Œ#Ù°¢/4Dq4]ó˜ IDAT&é ª¢Á!0Î#uñ*Ù0ÎUuøçШX3*28ø1“}õ4ôëƒý—ÑÈ!¬_9xødÀºåèoŒý‡QÞB’ã÷ßÉ&Ÿ?ç\½Új¢BÁbC‡ò]ºÔðA²ásŽWvv¿y³z÷îö^­$$¨ÆÓ¦ÉKKSííc®^ýöÏçóDì驯¢"èåÕ©æ-¼Á`°/_Në×OzÖ¬¯ù÷Ñ|B“ _i)¨# ¢p§°SŸ³â ÙV+¤krùi4òŋÕ•…sæÎ}ÚùÈ…BÚ¶ÍÀØXâÈ‘´ ¾–RÓ~±JÚãÇÆóç+«ª zx¤¹º&~·”¬°°ªI“.^,>\*4ÔtäHÞ»8·$0°hûöDìçgÞ-1kVP~~í¼yzk×¶+lßyºPhô?† SQUù>yî§NeÈÈð/_®#(ؽs©rë`§&™t<ÈÆŠhbÁç8›¢º¯³ñ¦ FQ%Þe#«Ÿ%•¸ò1kúX”UàÆC¤lHoÜr²¨­ƒ÷ñOæ aäHRm-þü“Ãh5·µå“•¥DF2–/o[WF†ºl™´¹¹—WYpð7´*þCP|þ¼¾žžpu5kÚ´ÄcÇzzÇ’6A\\Ô**ååŒÔÔï-Uüøq^EE#•JÖÔü¢L‡à ödsØ,ó‹}½åÄ+§Œ*!qïÅ¸æ ‚PQ×ÕçŸ ͬ«íšÉqq¾;,øù)×®½ß»7¦ójh»¸¨–.}“›ûÅç‰Uòñ‘×™?_©¢‚éçWdnþ:1±½_lÞ`±ˆÝ»³û-&=½ÁÁAúüyýþý»¦Srm-kþü×GGEMͧÔpqútbPP.FÙ¶­³¾ZûéB¡ÑÿÐÐËÍ­ïöVô çâÅìââF'§¾ ­3&ÎϯHP¼p¡òÁƒZ>ÒÖ­ ²²òfØ vÇ«3&ýP6mÚô£mè.ÊØ8²m3ÇcÓtPHhâ Ÿ”1ÁG‰Qò¨f€Ÿ‚JlÀ&ÐÄB~ œµ )ƒ×yȧc¼!ÄÐÈä”ÃÉ"‚hb¡¢ÅUj B(§#1 3G€˜Ê*ÀGCvF~¬õÑPÃû TTÀÁBËöûõ#ED€F€Z]:-,h!!Œ’ކUK«oª†_v6³®ŽsñbÕ”)""íò•ÉdÒ¨QÒ’’ÔwïêBC« ¶¶Oæýž RêëY……%%Æu¸Ü¦3œ9“D¥’'NìciùÅã>M¾ù þ¢„trQôËŒÇ$Òÿ±wqM¤_÷LI„Þ›4¦ Å®Ø{okï]ײ®½÷®»6l»¶µ·µ¢¢‚Š(DDz¯¡“™÷¸JD2q]ÞÿùÍLžÜ0çæÜsÏ“!Mɳ”€%¥©ã¨ü4¦EK†¾µŽŽ ðyÒ§I¥$ƒI|îãÐ0hiqµ_¿Î ͵±Q—²Š““ztt¡@Àþûï´Q£Ìèêxqr  ýä‰HK‹}òdFV–ÄÓS¨ˆßÏØØÒÉ“ßܺ•_YIopà@S¡¶ý`þüÂBIÓ¦ªû÷£⛈ŽÎŸ8ñ‡‡ÞÆžÎÎôü2ü[ (ÄÄäóù¬Áƒ-úB—.¥ÄÆ»ºjÌ™c­ÐªÊËÉeËÞO™£¥Åiß^íìYû=4ü‡sþ¼èС< æŽ:È&ñ«W¯®ûξzõê–«dE¢´ hõÍFœ`Ôÿ™Q9 @3¼¬À_%¥…gÅ8•ƒ41†À/‡’ ¡ÐÃÒq £lñ, §¢‘V Su4ׇ„ÄÑ—0¶5ž¾Å ¤À°6x‰ý7!*€AAR(,o`õKO§¯Šôt¸—;Lqã.¶îù!‹…)Sˆ/¨5kȲš‚+æ¨Q¼ˆˆÊ9s +*j¯ë¬X¡Ãd">^<~|r½J?sæoßnieÅß¾=©}ûàÿÜÈÂAƒL?Î>|ø}iéwíí?s&ÖÏ/µS'£/]P.)½ìà⫃×CŽU´Ð pE|XÝR Y¸âü P”¡‘°™,‰åÿ8¾¸˜¶[Óµ«ÉøñvÙÙeÆÝMK«e"S}±‹ììŠÜ\ÉÞ½têlm•Ÿ=kѱ£FddÉêÕñ­Zùûcg½PZ*]²$®yóÀÐÐb‹ºqÃqÓ& ‡¶OÂgÏrŠ ÎßµËYÎÎÁÊJr̘û))%Mš»w§Ù7áûÃÊJíñã´ë×HR±-*‡ÅätîLÃH"º êÑ#tÏždƒëøø4³´løäégÏJGN *–°×Â…èÕ ÙÅLIÁH½œ`gˆó/ÀÞíìae€‹ ÄF×VÈÈÅùGÕ/jk‰‰CQR†ã—>F2{*ÊCvÎÇ“ƒ1\\}};&›+Ìœ©lkË ‰ýûk¯Â0™ÄéÓ&ZZ¬ü|éÞ½9µ^ó% ¤³}»e“&¼7oJûö ¨“éÃwÆ—„ NNjîîšVV*ׯ¿*gl¬ÈÈH`m­æèøE"ájÈQQY€â Q™¤ú®1ÒÎ0@9Ø;™ýežB&W]àÝÍZæë¬X,}üNWÕyóœµö’%Ïäßä´´”Ö¯o^pófZTT-åÚëx”•™Ë—›=zäbmÍ‹+_¸ð·wHHˆ¼ÃÊJêèÑôAƒ".\È’H¨N4ž?oÙº5ûSy¹tË–7..êëÖ9Èï°sg(EÁÌLeËOZ«;¡ÁRQa»¸è88h¤§Óß ïß——“ÚÚJ#FüöWååä/¿ÄýüsìÇù}úh={ÖrÑ"y2ïøxñòå,1}ºæ¬YôšåPRÄAKlÿi4þ«ÄñB¼‘`¢BJ±3$0Å Ïó±;0Í/²±7&;!$ ;‚ ¥Ð­)T¹¸Ž{±0»3B’°í6*I˜Ý¯ã°ùâG¿†‚b¼ŒÐ¾ÙS†"<›@ô¡c¯¥3ºyãîìØÿ1<‚ÀÆÌèhêÚ5ÔLrØl8 ,.¦Îœ){ÿ¾vªÆÐ}æŒ1‡C,]šñøqý>¶œU[öê¥Åå2Úµ ^µ*^Ñß,닯A¦M³|ù2o×®ï×cñäIZ@@º³³ö—Xý좴{‘çj}ÈR/L•Wà8Ó;²=ƒçW€" …vö²•Ç€§ 4’X qâD'Š¢NžŒÙµ+ôÛOøúõ3œ6ÍòîÝÌ ?oh•SÇÓ¶­Zp°ëæÍæÅ÷ïçµhñrêÔ·ÏŸ7DxWVFž<™Þ¬Ùó ¢ƒ‚ŠÜÝ…ÏŸ·8|؆öùQëÖE]¹’J˜3G^w€ÐМeË^¼~}ò¤·ŠÊ÷žs¥ &“xñ"+%E ÖùóÉ…Â8Ø‹…½z…îÙ“T´y³…ü:¿¼<éÏ?§ùú ܽ›F…¡˜ãÿ;‚5DgŠÐYˆ&J(âq!†êƒÏÄó|¼/ÁHs(³ð<ï‹ÐÉöZ0QŃ$0Œw€³!о)ºØÁ\‡@ŸV0ÑF|&„€º Æö€c7ª_׎PT‚ŸX‹fÀÙ‹Èûdt—.D·nŒ;wÈýûe³¨6m8®®ì  ɦM_üúÞ¹³Š——rq1¹hQzzzýúðµ´ØGÚ´m«&•R«WÇÏ›[Pðßp{<ØX]RNgýè+ Éàê*›ýƒ¿^î—Hk—¥s˜Ô¼.MˆÁÚÎ ó(™Yùü/T·ÖøT‹¥~è$±tuùûöµ#ìÜAÜùÕ«íŒø/_æ=Jw×§àó™Ó¦ÅÇ{.^lêä$8x0ÅÃ#hèЈ={’ß¿¯ÝÄäSH¥T@€hÆŒoïà;’ß½+kÒ„·nùñãÍ\]éw ŠŒ,ôäÉ¿ïÞ^^N._þ¾GP_ßüÞ½µZ,Zdª¤$×oEi)9wnÚ•+…#GªíÝk ¿uíÿ h4þk²*š²ñ{!Ä‚ ìÍ€…9MÀ"p8Bf5“Àá· €Y.x›‡½¯`¼+ZáÏ×H.A`”â²±õ60øe04Øy­ú…æ…³5~¿ŒÔìê3K§ÁÒëC釽ÀÕÓ& +»Ôrùr†£#±v-/KlÛ¦êíÍ9|¸ôüùZ¼Ý«°v­îĉšå$~I°õ%°XĆ W®8x{køú滸¼|ô(ÿÛOû·Áã1þ¹)ŸÏüý÷wßç_¾Ì41¸¹Õ.ìˆËŠxïû¥çzÛý¥§«¾À)fÇBv‘Š +!­ÔÓW±w%±üŸÄоx뀞=M—-kI>üNE…¼"6¡}䈫ªO\l¬BüÕ45Ù›6Yܸá°d‰©““àùóÂ9sb-,ž5mú|̘¨Í›ÿú+ëáÃüW¯Š‹îÝË;y2cóæÄ>}Â45ŸLŸóÛo©.—qùróØX÷É“ ¡š'IjÒ¤ÀÊJé²e¶žžònŽ‹öñ‰25U]½Ú–ð~XXµµy99ßNކ‡³¢£ ûô1ðòú7‚‚Šúô Û¾=ÉÞ^yÑ"Ó'låOèÅbjàÀÄ?ÿÌï×Ouóf}UU:í'¤`*â 1Âÿ(‚ÕB xn”`€:ò¥¸–t zéBT‰ãÉPèm‘Çc!&1À"1n¾G‚:Xj¡’Ä¡0°%ÊÄx‹—ñ0¤5ŠÊQ€ØT0Ó‡µ ÄìþP&jïu!²rásþc<#C,ÿs|¼89NNDE–-“ž£«Ë4ˆ`ΑHT{òÄd6èji±ž?/]»¶!63}úh8ÐÔÜœ_Ö©SȦM‰uè«P|]Ò¿¿Q^žøÜ¹$‘Hás¬IÑÑùIIÅvvêŸ?J:õb'…ÚïŽ*O½¯óx.›9¯‹% ˜›Yƒe×O+ 8 K7k«²’ô£U‰à—_Zðù¬ˆˆ¼Õ«¿}õ·Ðµ«^ß¾yãÆÕ(ŠDt’‹úúJ6X<{Öò·ßšª«¡Á–J©“'3~ù%nîÜØŽƒ[¶|9xpx—.!cÆD8výzŽHTI’XºÔìÐ!›çÏ[öë§­¸†Ù#GÞçåI””˜?ÿ,ïÌÁìì²… ( C†Xhhpi ¯¾ ÷Þý™]–‘¡¨ëĉ‰„tqÑøŽƒÜj@"¡¶oOòðºw/¯W/­­[-7o¶àråÝgI?ÿœ~ûv‘¶6kÓ&}CïU?ÓÒêý­I¶"9Þq#Ac¶iÀ‡nU÷•ˆc’•`('1\á…Ðå ‹¢  Î….ZÈ-ä–£“)ôTŸ‹ð Œw—R1H )ùèå¾Ä¤ä > =[€™>bñ>C;A‰:šHÏBØŒLŒžäT¤¦¡sû¡º¸¯_Sð𠌌j|<¸¸°CB*™LÄÆJ»w¯]9¨¬Ìhß^9#£òÖ­"6›hÕŠ_ߟ•º:{ð`]eefppqf¦øðáÔ–-U þM¡â×'Îjk+ee•“$Åá0]\jÉ{hDbbá“'é­Zécóù£Ïãî~I}ÀÓ¢‡k“ŽœL„‡ýJÅÒ(Ât ‰|™Æñž&PåeegfÔx(-UÔ²•1—K››ÍpsÓ ÏõóK÷ôÔ36–׫©E dz %¥¥ÒÈƒØØX]]š;¹X,ÂÚš?h΂&;ª;9 ¬­•­­yKS“meÅ34ä¶n­Ö®ÚÔ©†»vY/^lÚ±£ºŽNCÆ¢ÕqqÅcÇêëóöîu‘*ÎÌ™¸»ë®]ÛŠŽèEÜ;ÑÑyÅÅ•vvêžžô×= %ë×GÙÚ —/·SWWì¯aaÅcÇFß¼™Ëå2FŒÐ=p ©™YÃ[ÿEaÖ¬ÔË—EööÜ3gLìí¿–sSF½}»ÙÂb±£cRœÕ«WÛ¯$œŸ#bõÅÆ`|™ÁJ `mú*#¸7J-F5<+Âï™Rh§‰×ø-Úéáv vEÀ([¤á@J$hme%ð9¸c¼à‹“È-€‘í Ÿ»ÈÈ€–Í`e‚з8òÁç½wGèë 2§¯} lâh¼ÂîßkL'41!Z·&¨M›d‡çÖ¯W ‰#GJïÞý¢äÙɉ7b„Zjªdþüô{÷ÒrÅb‹›Þ¸á(²^¿.öðZµ*þßšúW´m«ãïŸ{à€Â«„oÞdäåÕRª“HÅ‚~ûÊsCSžŠ+Ë(+±æv± c3ó3+3Nòä$€Î]­j!±Ð<÷ÓÍM·S'£ôô’qã|ËËå-ª©±×®µŒ-_]­CoÞ¼¹Üa~L&áà ˜2ÅpûvË}ûš>xàäzíšãƒÎüa»fùðáºFFßéëÁôé¯ÒÒÊ,-:É›”¼x‘yòdÌ«WÙë×»Ó[à°{G 52ŠÂìÙ©¿ý–›ŸOnܨïìüŒmëÖâë×Ë´k÷/¤˜ÿƒ s‚•MÀ )Ø  ¥.–À[ v<˜*ÁW„ÑF0䂤[ŒQ–0âƒÞŠÐB­ ÑL—c Ÿ2Šp;̵ѽ9ñ×K°6DïVpl‚Ó~Õ/Ú· ´Õá I%0èÑj*¸î òCÍ­…ú÷‚­ «ð’%Ì^½ùùÔ… ²å9;;VûöJ±kWé— …† Q[¶LWE…±n]æ»w ôoÕJåêU‡Å‹MI~~ÎÎÿÖÞo¢#sse€¢XÝXNNY«Vºµ4ÜŽ8Sœñ•çæ•dÝýÀoÍìd®¡Ìp‘Ù:‚ÕáŠ/­¤BWOÅÑY¶?èy@¢¨€N%€+\íí5MMUhé(ìØQw̘&ffÊ7þ SŒþEœ=›TQ!ÕÑánßî$çRR)µsgh‡†¿üâbmýÅiÿ]¨ªr\]uTU²÷?}šcm­2q¢¹"ÿ ’“ˇ ‹¼{7W"!'O6øã[OOÚZ(Ö­Ë|û¶‚Ã!Ο7i×î‰c` äöí >Ÿ`bRô®Er½óFÆœ`¹2à¦×$˜¤Š  ìABa´6žâPÔØk„´rI†*=Œà—Co`ŠÒ°ûŒt†¨ '_áU ÌèˆçqØz RæõEà[l½q%ôò‚P€«qþAuÃ{ÍÁ…Û¸t÷clk~Ep¶îAJÚÇ“$üü¨… e}G,^,hÞœuëVùâÅ_ëT_½Z·OÕ·o+¦OOÍËk 3Áã16m²¸sÇ@hh±»{ÐÊ•ñß[•õM!ˆ’£OC?¿,ú[Ø>Ettþ‹™šš²ŒHaYþÍГß|úõÐ㢲\ª<ölo $ˆ-Ÿ“X9I¿£ºt³–q¯¬$> ™¨SRb:ÔþÞ½äÕ«cci0BÛ¶ÍIKK)<\tü¸boǃü|ñܹÁ~~ÙÛ¶9ikËK˜?}î\lBBÑ’%ßiæàw†TJ½|™¥¬ðpÑŸ&dgWôïÿE`EàÚµgç—.d Ì;wœ´hwoÞœ½gOnRRåÅ‹¦={~#i+*¢.,|øPùãˆßÛ·×%IêÈš½ >E^^Ea¡D]½F èÌ‹]R²®´I‘§žï¨ú÷¼.–*\€¿®A ÙÝT|e=U^¬¥­ìÜBv·|ž”ŸG³I£¦&wøp+ øÓ:/YÒŒÇc^¹’zéRŠü«ý°H¨éÓ_‘$Õ³§¾¼Sq23K·l &IjâDÛËbà;@,& *hÿè¸};#+«\E…íì¬Ønâ*3eº¶Av~ kÅbthƒÛ¾ªó–-Œˆ«WÉ/d?Š8bûvU//ö… e×®}Mõlgǽ|Ù´_?áúõÙ›7gåʺ€Í&æÌ1 u30PjÚ”?rdd—.ÁÑÑŠrd®FŒ0éÞ]_I‰£(1¾®.ßÓSïÓ+,% <åy½‰J K  )àLíP-ÅÝÀüŒÄ*Ì–Üÿ@ç.Ÿ“XÔC_šÛ Œ߬s áºuAò¯fhÈ۾ݩ];]»brsØiñãcïÞ·ee•ÞÞzË–ÙÊ¿ÚÁƒ‘ŽŽš'Ú¶oÿ8˜L&ÃÃCÏÔT®q1ŸãÔ©D//­™3ÎüQ6oNìÒ%ÄÑQл·VP«œ£o>Ç/¿¤oÛ–chÈ^³FwĈogW%%Ôܹ…ŽŽìI“øcÆÐà ñ?ЈƟ`¹3Q@!—Ä] †(ãE|ŠQAÁC€è2ü–>M•[ŸdðYðÐF`6öG@K¼ÊÀþ× )t¶A@‡«‘0¾5^&àìs$çÀänyëyªÊp³Å£à$Ÿ‡®mñ> +wãŸ/pf&p°CF&¯¬³¥%áéIdeaòdiåg£kš5c ÂËÎ&'Nee}­þ×¾½`ð`aI‰tÉ’ôC‡h˜‹baÁ;Þ~Æ cŽD'§À¥Kß—•)Jü^G!ˆª*ÛÄ„'<é> IDATëVº¢H¬×¯³2x¼êo‡$Ež Ü÷õ§ÔŠ“[ªH¯E=¬J,÷Îþ„ì-¾¶™*/ÒÔâ»´”Uì¾|‘”—Ks^Ë`Ë–µ|ú4}çÎÐwïhp˜?ÞÜÚZ3gÎkùWû‘˜X²fMdLLѼyÖ\®¼¢æØØ‚uë‚‚ƒsæÏ—·‘.„‡‡+bÙììÒgÏ2 éL»33Ë/]Jyñ"·_?Åæ¦ååä!¿üGQèÖMóêUuu:¥r$‰Å‹36oή¨ 7nÔï×ïÛ´(Eaüø‚GÄFFŒ;èŸþô?ȉƟ`‘À,%˜1p¹ÎJhË…×J0^M”PN"±M`­Œ¨b”J1ÜfÄ!_Œ^pЂ‘¾‰  v@A9.G€†¸Áͧž€ººÂÍ>ª~ÝÙC`¢‡’²ãŸ§‡… T”q÷ÉÇð–-„¡>ÊËñ8 FØK—2-- uu>\Kú2s¦rûö æÆÅ_çÛGŒPÛ·ÏPI‰8~<ïêÕ† Ê•A`øp7oÜ”++©§O ÜÝ_Þ»—+ÿÊŸ£îB±c›ØÚªFFŠ*+R¹lÖLÍÃCOY¹ZfÁ ëœ>1áÅ—Ž£ãümôji“H%Uí„ZÎÄvfU'7±†È\FçJnïàÝՊɬñG*•RîÓ¯ÄrqÑ9ÒÚÑQsûvÔîÅ‹› …œ´´²Û·¿æañŦMo<<´ÆoÒ½; †™¿ÿáä¤5l˜U³fߣÂU|Ýã·Á`±ztª°/\HvsÓ8ÐX__üMf¦¸wï°ÌÌ æÅ‹ö‹›Ò[‹©aÃ_½*õòR¾xÑ´gÏ:cÛ¶•df’JJX¹RE hx@°q48žFƒÆœ`E€0Ò,D8.F<‰Q*x\Ž…ÐdÁS¾…8‘ U˜òQIâJ¬Ua© ßt} &aÍà—‚=¯`L $àÏ×Õ~ ÓÚ#àvÜAE%ÌíWï°÷:Òò@Sˆíñè56ÿQ‹é#ñèVïý¤–&¦MÀÃ'Ø´£Fð<vì`úùQ¿þ*ÍúLCÅ`àÔ)ub×®’¾ÁgL›¦¹f—Ë1"éÚ5r,êê¬={¬Ÿ=kAQPScwé:dHDvöw¿wwMŠÂß§ß¹óYkÈxö,£îâ\&ƒ5³ÓFmÙ¯Ô¥9»ï-¨ò]ÜÚÇaðc4LØË\)¾±*ÉW×à·p•%±^½L¦Ä°q£{ddÞÁƒ‘/^dÊ¿š……`Ù2Û‡³fÎ|UV¦ÀÏïë×Óx³t) ÅÁwïD{ö„…†æ.]ÚBþÕè‚P(¯ª¬V$%={–Aoj²ÿ;ÿœŸ~Ràt稨w÷ û÷ó˜L¢jæ½ë—–’}ú$œ?/ .[¿^ UxøPü믅‹OR³µ•+›‘‚¥ˆCžs‚U5P A`,à‚CPfàqŒ×€… Q†x”‹Ë0³ÜIIa¢¸,„g#½ÊŒw“Qí×àe…îÐâÒk0ÓEÄGÓÑyÃÀaãYâ?lúSF@[± xø‰zgÎ4ô(ܾ_#þÞ½‰=ˆ’ìÙSËþd`À˜4IÀáÃ¥ÑÑŸÕkbáBmgg^i)¹reæíÛ´ •ÜÜT3…ȪÄÁB´W…·Ù•ð-À`}8«âB:B ÑÓôq/·S¡ÍÇ,gä–aßk˜á CUìõGV1ôwAB6Þ¨–U-èUöß@YëbîP¤daû©ê”yX=¥e5H,2ú÷Ba!æý ÅÕîÝÌnÝ’OŸÖRù<˜»d‰ 2²räȱø¥±íÛõ—/×}ÿ^<`@âÇ´ý±XÄ‚¦áánC†èfdˆ‡ìÙ349™Ïñz AF631áùø¼Ï̤Ùñ¼Á0ѰšÒ~AÈþ•ÆûÞ=`q¦ÀsÂæÃQæ2Éß;¨Âluu^K7YëuPJv6ýn‹9{zê¿z•uçN²ü«±X„›ïÞ½Ìà`ÅZí7lØõ÷ßéC‡ϘAƒ¤:!¡hûöå_ýè+Å!#£”ÍfhkÓ–øøÄr,°a±Ò{yýzŽ·wˆTJMjèë묭Móㄱ—×»£Gó>ybáàP§ŸLI Õ·oþ;³g+¯YC³Êþ 9Áªé΂.t KП)p¬b =ÕUн™à1ÑV~Oƒ€·!ˆ€>–(–À'R4Ñ€³!**qè9ôq‚‡ðÜ‹€VMÑÓ9E8ê[ýꣻ@h,²?ì/?õCDÇá–ßÇ G ž.Þ¼ÅñÓ5‚·´$\\“ƒY³¤åµ¥ K–LL˜ÁÁ’õë¿=ÞkõjÝQ£Ôìì” Hxò„Γ¹9ïìY» ôÕÔXÿÛ­[ÈéÓYò7c×K¢§ÇurR—HÈ?þH÷…?Cw%×»ÔÕ´}牟Ÿ¿t 0þ¾±olëjk5s¤Œs U^,þ{€NÞV,V?U’¤Ü£ŸÄRUåŒÝ4<t¨±¯oæìÙ¯$ûžˆ‹+Þ±#† 0gNS&“†ÝÇ'ÒÊJ­ukƒ&M~,úJAF£™™e ù¹aoÃPV&ý믤°0Q÷îz´,(ƒË—³ /+#›7W޿ߚǣy»Œˆ(oßþý›7ŽŽÜ; ¬¬êäk@Q˜3G"±¶f­^-`Òá_%E4DöGãO°ºƒ‘‚š£w&ŽHЊ‹Q*pæàz Fh¢“/KPi¦h¯‰›™(`¼: $IÅhm„¶PáàL4ÌmÖMp*R÷€»v|ƒ3ÀÎæØy¹z¡9æ Aa)6}Pb øèÙ–&X²íãtB6›W¡­Vm@QÍLé×_™½z1 °eK-jwâÏ?ÕºuSÚºµäêÕo07}û [¶ä9:r»u{ïëKçÈU‚Àĉ‘‘­úöÕjÒ„?rdD÷î!©©_tœ¯ ê+™:Õ²M­'h7ÚiÙR§E 튊†h‰ú8÷°è*s’åód]rÞ»¥½ªI¬`†Å†,!¹³—eª©óZºË<ü*5;‹þ¡¹£GÛôèa’šZ|劼-™U= K–Øvíª—P²wï¾P8yr­­páBMùWKI)>t(JK‹»r¥«ü«Ñ òù,OO}]]>-«]¹’ª£Ã=º‰ ýéé_e áå%\¼Øtï^YÃùñàAñСIffœÎUüü, êÊ­[W|ùrE›6œ«WÕÕÔèÚÁ ÅÿßÑø,; ÔAÙ‘â¦ñ$:óp¯ ;DÐfCŸ 1e¡©L©å8™m.\4Q^YMbu1Å»|ì€væÐàAÀÁ¥åˆÜ Gx ôrE~1â2>¶þÔáq8xÙÆÌLŒŒl„Fãìqöï ŠDj6ÖT»s8X¼˜‘˜HmØ }û¶–Ä¡U+vçÎJeeÔØ±¢÷ï¿‘öï7²²Rª’Uþý7ÍÆQJW®8Œ¥§©É¾s'¯W¯ÐË—åµàª;:wÖXJJŒGäõV•A\œèÕ«ì’’ohÝjbB›eæÚv2çË%e»îý¬Æ¯é^<­c “%±*JÄ7¶èèmù9‰å«‹Ëeöèa–’R²fÍKZòTeeÖ¼yMSRÊV®ŒHM¥yÔÏ÷Ä©S‰d&$/\hCË‚»v…fe•*››+DQþ£$)ÿôgÏÒ è‘1>÷öm‘— É® þø#}øðH77ÕîÝ57m² }ý“'ó»wŠ*wrâÞ¸a&Ö•†ºp¡üܹ2€øåµuí*òÏ›¢þ‡ ?Áš† ˆTP Ó9èÊÆ™J À%¡bLÓ…¯K ¦0Ý-„x”}M ÏGP.*¤Ö ÚÐäáI*Ý›‚¤p1Ôø×­­púÃ,Â_ÁÉWžƒ¤ÀÑ ýÚ¡ESú0‹ÃƲp°Áé~’m[3<@|b·Ðº5ñÓO b÷îÚ§æÏW0€Û¤ sêTQEÅ7vE‡MŸ®éæÆ[²$íÄ úÅ1Æ鄇·êÕK‹$‰+ÞU\ü=úȘLÂÃC‹ËeÞ¸‘öí«ëWW//ý²²†$XØLΜÎ[4”udÎçgìñ]ôK ƒF4¹Îh%søî~*/UMçæ.[0 y–¥kâD[;; 55¥›7hY°kW½ŒÔV¬ˆ eÁïÂBÉáÃq66ª[¶8iiÑPû(,çØØ¨/Xà,ÿjÿ df–zxèuîl¬¤DCY+.®˜¢`o/6ŒfG‰óç³¶lI ™Ý»k.^Lss"EaçΜíÛ³Y,böl­; ê>ÙæÕ+Éš5EyyÔÏ?+÷èñÅ_Âyó¤Îœ©‡=! †"ŽºÐXÑøM@˜Àuƒ9¸%ÁÎr0tàÁ¯ EðT“À\ÎC=¤•ã])üóà©÷Rq.JLô³Â£$ìyã\‘"¹P^‡Â¿æ]] Ìpì™][ÍMMqö¬š··ÒéÓegÎ|»CX±BwÓ&}’ĶmÙ¿ÿ®§ÐÑ£õ^½ruvV‘J1wîÛsçêgâÐ!ˆ™™rûö:<ƒ^KM£ªÊ‰är 6Ól:¹íJâ3iÂÓØ›íš¾c€hÂø2ÓSæ±ïA2;AUUÉÍ]V‰œ–‘Nÿ€ I“l«„2~~ ÿ1~zûŒù'šç=ú¾¨¨Dà¿…èèÂ{÷2™Lbï^Z<œ*+ÉR óæÉ¶Žþ P„+)©H(T¢Å‚$©/r cÇÒ“ïVÁß_´jU¼››êŠfóæÉþ­É‰ÂBé¤I)çÏ‹x+00/,¬àÛW× ::|ò'X´˜âÖ¤³ÌIŠ"…|Ÿ*ëap!ËH%³Þ«ª*¹{È~3 IOO£Ç ÿSŒaÅç³=J}ýšž6ƒX¼¸“IìÛNÃÄÃïƒsç’üýs*+©éÓi;ÿùgLëÖC‡ZÑÞ›ö#ãÍ›|4(úK`±ƒÓe Ÿ™)6,2?¿²O­eËÌèYôJ:txófQŸ>ƒœëáRA’X° ðñc±¡!síZ¡ð‹oxÇid$:vd,[Vo‰›lEõ £ñ¡1'X¬Á:²)`x¸fs`ÍÀ1 Ðw„W`°¬¸8›ƒRsÌᩎ£ÉP˜fƒ6º¸’„¼ x`”¸,œŠ€ymàeŸ—(“À/=ÐÊ;îTkÛg÷†·î… <¡:žÉ}ÑÚ;Ï¢ðƒ©Ÿ7Fö¤{O~ ›ÇÅ–5hã3çQRÓ¬Ê̌غ•Ù±#±k™ÿmúÞ½ªýúqE"jÉ’"iÝ”åƒ oÞlâåÅ¿|Y4lXRa¡Bé“'<|è\XXyíZN«VAoÞ|Ûˆ«aB9w®µ­­ððaÚf?››«:9iÒ &µ[a¦%Û‰Æã¤XèVw7ld‘ æ§¤T"¾¼@ûN–Ÿ“XŠ0vWUå,ZäÒ¼¹æŽ! [A$’Í¢œÕýµYÓ¦*óç“äÀ«°P2o^°‡‡æöíNti}Þ¿/|ô(ÇcbIË‚ŠÀç÷N~äçW´l©#ÿ¼ÅÂBÉ­[éNNj}ûÒ3ݹ¬Œ80ÜÐÓ«—æ©Sv´8œýƒ‹ :v|¯­ÍêÑCåÐ!C3³ú)“V¬(:z´¬CÎßk1s  –/'­­±|9C½þ?`)˜Š8êG£CcN°ªð•Qª p€,à<ÈÞlÄðƒAÀƒ‹ ¿žÈ”à\.¼ÔQ*ER®fÀ\ÍÕ¡ÌÂÑXèf†¤Bì~ ð0…¹N¾€¾ÎÈ.Bt:n†€–*š£°[>PV­Ád +¿]¬>C3i™ØxyŸ°-CúƒÏÃõÛØ´SöíLžÌ`³q÷.9~íi—KìÞ­jdÄÆÌ``Õ˜šÀ×ïj²0 öìaêë ÔõëµML˜7 ÔÕ~~’C‡êº5¶lÉ»xÑÔɉGh×îýë× ±,22Rzò¤Å A:\.cèЈ;wèo``o/7®‰©)ÿúuzFššª´ic@K{y´z³:mf1k|ÕPÎ4T‹«ú÷&Ö ¢&eBJÅ—ÖèÐÙ’£TãÓ–¢pïý6ž&&*C†X¸»ëž<Ó€§7oÞü󓪪ìñãÍUTXÇÇgeý(CjET”(4´ÀȈ·o_ ºJQ ’ãà 9y2 ƒ¢‡Zï~\W:ÊȈý葹©)Ç̌ݶmÜ¥K Ê̳gíÜÜ„‰‰å}ú„?¯_<õG²||âhYÍÌL…$©ªQµtÁJ×a|ë%2'MýAPR­?e•œ!“Õ•9^²„JdxFJ2mš³0i’ÝãÇiÛ·ÓÅ2ÄØÆF3wn0]kÒŠÂÔ©¯Â &O¶tr¢A—]…k×âïÜI¢(¸»+dºË‹ðð¼ÇÓ¤Òz˜3ÕŠˆÑÙ³I11EýúÉèlnÞÌݸ11 @t½=mSœ³³+ÇOþóÏü·o+®]3›1C«¾+\¾\>~|Appå–-ª#F|M³µkùè%áüy§¡Æåà*âh`4?Áê ®*ˆ‰¨œ†ˆK G°¡J ‡D”Ó…àxXcµ!dáR.TY˜e)…3i €)6à³p3¦:ÃD|’ Ád`¶¸,\.ú:ãu"Î~h½úe¸¼MCÚ„•@ð}…¢ÔR+'´qEht %€+¡®†÷ ¸q[öM͘ÁèØ‘(-­}~NÆŒáÍ›§leÅܶ­$&¦®ñB!óâES++NI ¹ysÖ–- ñag2‰Ý»­æÍ3‹É;“Nœ¨g’G2j”ÇLK+OJ¢a(²¦&÷íÛ‚¨¨¼ü|z\|ªàeÙ£{ó‘5^Ha V­ÄÚÂ\&ã%C‘—ÖhßÑBé3Ë÷î;c«Bûö†;;;kݺ•@ã²{ö8++³Â <øAm§ÏžMJM-e³³gÓ0ÔùÜ¿ŸÂç³&Nü¡é+E .N¤«Ë·³“-‹×W®¤ª«sF2ãóåek¢£KvíJrvVپݪsgzúCÄÄTL˜rKË®]ë=ŒùΊãÇËTU‰U«T¦LùÚX¡çÏ©ó穤$jéR†i£hH}üøñСCµµµ…B¡»»û•+Wd.HJJ8p ªªªªªêÀ“““ëþè÷GãO°˜À,(+ƒ8†’`&€ÚRB`:Ñ$~c 2,X8W ÿrLÕE%…]È«ÄH#”H±ó= +1ÎjŽÁô”±Èa98 ãÝ`¨†cAJ€Y¡¡ŒßVOα1Â8oÜÁæ$–·wÄý@ì:û1ÈuóÁU–Cxùñ¤¶vl@jŸDiÍzƒãÇ™­[Û¶I}|¾˜cmݪکçúõòž=ó²²êúÝ‘Ã!2ÞµË &F¼kWöÔ©©ååôë‘ ºß. IDAT;vXmßn\<~ü›Zs,y„ jjìqãš„‡Ð¥õ14TNH(Š‹£™Õê:Óɤ†ÔÌѸZÚŸõãLo™ë+/‰!ÊÊÏÖf2EFd$'ÑObÕôÞ½”]»Âêûįô(˜™)oÞì]´aCTE…¼¬íÈËÏ™ó:%¥lß¾B!mÍP©©%‡GòùìQ£¬éZSA ÝhôÙ³ŒÌÌR9]UËË¥;wÆ”•I§L‘·£³¨H:p`ÄýûùíÚ©Í™CVÿROÏwׯ.<|ØÈÁ¡Þ,ŽŸŸxÀ€ü›7Ë/VY¹Rð•+sr0dˆôùsrÝ:fÿþd+o×®]vvö•+WÒÓÓ÷îÝ»jÕª#GŽüóhqqqÇŽ]\\]\\:uêTZZZ—Gÿ4’»R+bP`R»É5”€ôQœ9’ g%è/ŸBXr1LÍx8•[Z©¡°§S¡®„ÞÆ €C1ÐË$…cá(‘@ÀA;8ô4•1 ( ûT‡1­Žû"óÃÞ7s쿈¼ºdscŒê ’ÄÚ}5ÞÂOCÑ¡ ®ýûeß±1ñÓO K—JããkO€˜LlܨêêÊŽ‹“Θ!ªWž4gŽÖ±cFúúìƒsGNNJRˆ±ÂüùÆ«W7!IjÒ¤7gÏÊÚÊ):ÔÀ©S‰R) b•8÷í[š3‚`Lk¿ÖHýㆡ­šª§VYî`(#jÊ/(ªâÂ*í:˜ËX|ÐN8p ¹²2ëéÓô·oë§ñÿz¤IæÃ‡›øùeíÙóà ޺õMvv…——Ö€´m½nÜHÔÒâvè`(¿IÑ ÝhôÕ«lŽŽõ.–}Š;w2Œ•›76o.¯R~Ù²¸èè{{åÕ«i³*½xQÔ¿‚¡!»_?Õƒôôê­è ’ŒQPZJM˜À_¸ðk%K©?ÿ,MN¦<=‰… åÝÇ+ÁTÄÑ€H,XàëëëååÅçó]]]Ož<¹iÓ¦=|ø°»»ûÒ¥KÕÕÕÕÕÕ—.]êææöOöõGÿ4æK,wQ  Ÿ \Fùt0AiÏÄ6XÀ_bLVEk.Η Kн ùpbO<(`Ž-<´qü- Äh¥1v )œˆ€žhÝa騲Ԟ×m­ñG’ó ¹fô‚*Û>´¶qÂä~ l;õ1Úe3нî<ÆO2™Xù Úzbí„GAÇ3fÎdp¹ÄO?I¿äÈÀçׯktë¦äë+^¸°ˆ¬Yп¿ðØ1c¾¯o‘»û»/h¨µ}ŽE‹L7m²psSݵ+ùóK´i£=p q~¾øîÝ ùWkÕJׯFýý{ú›õ¸lþ\ïm*ÜE £ê!™„Ú!F7™ë+_]•Æò•9­ÛÊî Q‘™´“X{ölGŸ74.Ëá0fδrw×\¶,ü‡²Å 9ò¾m[íýûiÓ¶Wá·ßÂõõ•'LhFç¢ÿ”•Uæç—·j¥ko/×`æ½{c¥Rrölyù¿?ÿÌ8y2£S'K—š++Ó# ß¶-{ðàDKK¥=T/^4ãóë½·†„HæÎ-ÔÕeL˜Àûýwá×÷V¬Þ¾MöéCœ=Ëü’õhÝQ ¶"ŽD²uëVâ“wniiùi™ïúõë£GþôúÑ£G_½zµ.þ+hÌ –ØJ@^C¾'89 £´ Y "A‚jÏB&…£b˜²ÐŒþ(BW5äK[ŽÛè®\1¢‹á—‹fj°×€P Çb §²J±/`¦Žf:x‘Œ}þ`¦c ”бãNu$¼‘š‡ƒ·‘ÿÁÆ}r_dæaÏyd} „*èÚe8üW ÷–Îpl±“fËz»X³†)•Âߟڱ㋩“®.cËUÖ¾}%sæÔ/?ppàÞ¾ÝÄÓS¹iSN»vïÿøƒþÉÐ/68P;$¤x̘èû÷ië+$´h¡ž—'>vŒ†*¡ŽÿÍ›ü¨(…´=j«Ì괉ŨþHÒSKÒQM©ú÷NVÿbȪ\ÅWhÛÁœÇ“ý»w›~B¨gOÓ„„Â'ÞTVÒYÎsw×tvV‹ÉI“^þ ¶X$IMŸDQT·núÍšÑ0Ô儆愅å$%wè@{ÓááyÖÖj¦¦*\nó™ÄÄ’‡³ââŠ{õ2'˜èè’©Sc„BÖ”)úVV_S8Õ$‰õë³-J' ¤ºi“^Ý' þƒ°°ÊÎóüýÅìÔ¾¾ÂµkäÆd^æÏg5f_†[·nÙÛÛÿóßÈÈHGÇÓ¥¢¢¢êòè¿‚Æœ`U¡9ø(é ®3ت ¢ f[ç@fà (ý•A÷Ë@3ôÐFçsÁ$0Ím5p:zA‡;© )ô³‚‡´x¸›ãZÂÅOP"€EÝádŒwYÈ.Ç&à  ìÿ0‹°… w@Kl;ý1Ôi#1¸;róqüÒ§ïë–ÁÆ L&Nž… ÔÕqì³sgâÌÒßÿ‹[Tóæ¬ TÔÕÏž‰W®¬ßè:UUæ•+¦NN<.—±|yæÔ©©ôï…óæ™Ìšedb¢4}úÛààê傌cææ¦QVV™‘!¯#€½½F»v´TkES='Ëd•ƒq5‰••ß™=d.® ¹%}ó„Çc{µ1“yèMtVR"Íy°‡‡^§NFÍš©ß»WÑhxxø7¯Y·®¹*“Iœ8ñCØb=OÐÖæN›F³ è­[‰íÚŽgÃáüzéërïꎰ°¦¦õ–{Šsç’Û¶Õ;ÖLM­áŒME9iÒGGAûöêƒëÊOÄbjäȤ+W ;uœ>m2~CDf11•ýúå3zôPÚ±C•õÕÒâ»wÔ¢E¤ñì]g\ç×=3ÛXXzïUT,Ø»bÃnĈ-ön,±k,¨±÷£F {A± ö†¨€( ½÷º,ÛwgÞ DØ]ðÍ?&ç7`§ì33»ûœ¹÷Üs7mbTëzúê4üÌ!,?_ÊÖlSq÷²5Ûª=‚#¨EEE+V¬Øµk×ÇWŠ‹‹Œ*ÕI©²öoÁ·O° ŒÒwµû9d§! â èC „ú1¥ÄN)úh#[["‰0ѯ…ðÏG¼?Ø ¤Ws‘.F[äKp;×ÒÁ"1È3°ý%´·—…GI8 ¶håˆko°;¨bóáQîG¢è½Y1±i‹EÚ‡´›…¡½ñô5–oÿ¤§‹UK™…£'_Põ{ö$<=‰ðpzôhå—ìÝtèÀ>qÂàÍùÚµeü¡žîÁ vî´:pÀ:7Wþì™°OŸäììú—dmÙâÒ¹³A|¼hüø˜” êCbeŵ³Ó¹v-ûÈ‘ººº7jdøäIöåËÉRéWqº—+e1Y/?þke˜ò1ˆµ‡9¸Uå®ÒK~ºtwæjWoî|… V¯^¶d;¦F–ÐN…~³zz¬U«Üž?/8w.£¨è«ØÛªŽÂBÙ²e‘OŸ¬YÓ¤.³xµ8r$æáÃÌ!Cê¹ÉÝW‚*÷Nuܽ›ñðaV],F)ŠþõׄòFŒ¨S±ÜÒ¥‰OŸòóóåûöÕCAi©ÒÛ;ùÌ™’„éêÕæ#Fhbçñö­bÆŒÒìlÊÑ‘`ÈáÔ‘*+ÃÂ…Tl,íæFTÛsP$ÆÓ`ï!5Æ`D~¾°×,—­ÊÂ^³¼Ú#¨w!*#77wèСèܹs]Žó÷âÛ'Xadæ#”Ž‚6 D<”æÀP]A\5Š 8%ŠiLуW…0db¸1,Ù¸X+-Ìu—S™ Ìj }6®¥Àôæ0áB®Dd,ê -&î'¡<‹2±3˜$B“Q*€Nnð팄 ®˜‡ z¶BT~û$^å;ZÅÂþ?+…ï0x4ÁûxlØ^Í9®[ÇhÛ–‹é¥K•54lîߟsè~·nìÇŧN©í#:r¤ÁÓ§.,ñì™pìØôÐÐz®Î üö[C__3@¹pa|q±:`_ÆÔ©N\.ãåË¢:&¡´µ™M›9;ëEG•<é­w§ Ê*iÅšÚ„”ÿÁ‡Î¯ÌU¶W¾»«Œ~ ¥ÅìÔ¹ª+î}~rR=?·ÓÃaäæŠT勞¯Ò„êëk?fŒCDDñÖ­õ©ñÒ{öÄ3™DÏžæååõˆwµ™VV::ü3ì¯T¼w*¢¨HÂã±:uÒ<¤qï^žŽ£AÝ.]4¯C¼¿øùóR6›ß;ÀÑ8˜Ú ,‰È€$0±5þà2:£;} ± ڸ«øBüv³bgkŒê …²R9aóÆð™›V:;,~›ÀÿLªîà@lÛFvêDlØ@…„ÔÄK¦MÓY²„'—cêTþÓ§js,SSæo¿ÙÌžmlcÃ7.}ÍšÜz¡A¡§ÇÜ¿ßÕÒ’}ï^ñ¼y¡µïPÇÛ8s¦®íÕš77^ÿ$àRØA±¼š"Mw›çå ­ýäÀ*k•qO•´˜ºVM<ÅÇæ'%ÖsËÃÃ844÷Ê•úK¹ºêÍ™ãJÓðó{÷·Øb)ôš5Q99’+7jT×Ù÷sܹ“ÀÛû›ð‚TOŸfh×ÎBcn”—'¹s'‡Å"}}5¿€6¤¦¦JHÓ¦ÕI# :Z:ztzB‚ÌÓ“{ô¨­½½&êòŸ~*•JáíÍÙ¹S¯æÌ €+W¨;( û÷3\\ªÙ¸¨~›@ÓX0[íÁüïD°òòòúöí»iÓ¦=ªö±0`À€ãÇ+=ˆ?~|РAª¬ý[ð-¬LˆüŽÄa0áCqùÞÐêNäo _ÒÄo ú±0ˆ…÷J+0GüZ )1&È’cg6,rF#¶%渡•1Î&£P []Ìõ—‰½a0Ö#šA CP<ôj‚1í‘ÅDZZíõcàéŒçQð!­ž„î-ñÇu¼øÄbtý| ê‰SWü´ÒMŸˆF"9k6Vs¾’½{ÚÚ1BY³°oÃÝyót<=Yƒ•„„¨­¦b±ˆ½{­gÌ0îуçç—Û«WRaa}Ê’lmµ›uëfN=šU÷ŽïئÑÙ³iuòaoÓÆ¢aCƒÈÈ:i >GfIò£¸ÀjWÙÇêTð¹Ìþù¨š¸‘žYšîÒÕQ‡WõW>¸¾»úø8·lizõj²Š-ƒÔªQX²¤±MHHá¶mC¢pïÞ¸;w²ûô±˜9³>}ÛË‘‘Qöúu^§N–=zücêëÑhôÑ£,=ooͳ®þþ)óæ¹ZXh–¹u«pË–ÔnÝ üýÝÔí Xaaâ>}’‚öñÑ¿ßÙÌL“ö…¯^É{ô(ŠŠRüð÷Ò¥ZtWÂÂè;(bï^F·nÕo<}>"£0i,–ÌS{<*j­Ô]ÔзoßåË—÷ëWµ¬§S¦LyöìÙ† Š‹‹‹‹‹ùå—É“'«²öoÁ·L°¤ \Ef pE R!‚È ,è?!ò™:Tè6 ˆC2´àÀ‚„B 4D‘¡e-Ãs”)-À½¸è¡)ørü¾‘/ÂáHˆäÐb¢…5^¦aÓ‡´à–(“àÀý a–§ ,Œ ”`ço c´w‡’º£ÜÒ Z@$ÆÌÕ~"ü%I,ž‹6ž8|žUsÊK—2,,–FO˜P“ ÀöízDQÕ§Oah¨&ŠõI“Œ¶l±´³chÓ&>&¦>÷¶j¥;k–õóçe³fŽ|YWë)++®™™–X¬ë֭줤²Úw¨?dg‹ýü¢¤Rjòd'zk÷ûÁÁ‰ÒÔ”ËåÖÿÁ¿êÑhôñ㬔”Ò-4ÔNÑ4J|ö¬ÀËKâ¿’ÅÔ©±4~ýL5ª“/ÃË—"/¯¤Œ ¹­-ûÏ?ítu5™@_¾”÷ìYX\LµiÃÚ¾½öÌ`FT>zD÷îML›Vý;ž8ƒó—àçE`üªT¿ˆððð‘#G•QRRáí§««{ïÞ½—/_ÚÛÛÛÛÛ¿zõêîÝ»:::ª¬ý[@Ð5ÏÃÿp1~ÕÖi _@à­Ñ°˜…bøÆ‹@%‚î r4M~'E#@7Ëà/€ —,°:Jш‹ŽØšˆy°çâæ¸Ÿåa`Á}Áa`HŠ$ד<À— ÏaÐö Fk[P4ÆFZ!¦tØöð"?‚•ŽÍ‡!Š˜°E|,ïö#—ÉÑmt´Ñ§3V¦àk6áÎ]ˆ%x| ¼Ï><éétJ]]ŒGÌ[ÓWM©Äøñ%ÑÑŠôtåõ놭[kòÀ‘•%÷ñI%IDFJŽ·2¤>­ƒfÏŽ ÊžÉpl©µ.tðª¢Ç]…e• ñfÎéP/ã,Ǿ}o/\HlÞÜd×®zvú.ÇÔ©¯’’ÊX,òÆ.õkòYÆŽ INÚØhŸ9Ó¾ö­ÕÇ´iRSãÇ7òõ­ÿðØÿ8òòÄÆÝd³·n d±4¡#ÁÁ¹~~ïØlFPPWÍl‹%ÆÆ Epp CóOÕË—¢þýSÙöö¬“'íX,Mõø±lút>GØÛ3Nž4¬Õ#T,F·n .4;w˜N5Û$§¢ç`Î4Œõ‚Pcf'B‹V»æIHî·M0jÅ·Á*G$ø—>¯! @‘.h¯ €Øä#п‚2%Њ ‘c”.¢dⵓLñD€#yÈ”aœ žã~!’Eèn %…'y8#áq¶¾„’†¾º» 4 ïI g<ЇߕРVÛ†pµÂ•пºê¢Ks<~ƒ%ûñ±Ù<›…uóük÷"«²¨zň%ˆx‹e~Õœ¯­-±oÃÀ€X°€º~½¦7ƒ?þ0h҄Ѩ³oßb r…¬¬XÁÁNŽŽ€Z¸0{ãÆ¼züBíØáB’ˆ‹ù®Ž5€ýúYòx¬øxÁýûu’ºki1?Îzñ¢¬áP4u6´¢;Ra™Å·#k`W$`íd ­ò¢29,"pÙ«ô`k·ªu)ÉEõÄòö¶{ø0Óßÿ½\þU”R7z¼}Ë¿u+û÷ßëj«¡"îÝËŠ*ˆ(Ù¶­Yí[«¹œ:s&þöí´Žëj ôOĽ{Ožd³X¤fì À¡C‰Ožxy™iÆ®îß/Þ¾=5(¨hß¾†uaW¯_‹½½“4à4lÈ9}ZCvu玴oߢèhEÛ¶ìÓ§kgW…¹s•¡¡tv6ªgW f/BR2\œ*Ø•P€ù5 Gó áÛ'X`3A”AÚº6`ßEéhh|iO @˜÷@e!–Â+%XÆéÁ‰KBØq0ÄŽ\,‚óÁ!q* f7†·³`xCôw‚½n%ÀüÎ౑W†è\Ó Ì¡ÃÁÅWCš?l&^Ç#óÃÜ7Ë–`0p:译{uÀ^02Àî?*‹ÿßÀf#"÷UsÊ}ú½z½{•qqµp¬cÇ íì|>µre©fK[›<~ÜvÓ& ‚ÀÅ‹ü‘#S…Âú™}CCŸ]¸àno¯Åb;vÔ©/:“I´nm¤PÐ7oÖ‰µooá⢟P? sH‚üå»Sþ“^÷<6k–\Y)ˆH‚6£ÿê{ä•þ${dUºéÞü"Gttª†!o߈­—¡–ÃÙYßÃÃØÑQ/4´vžªŽÇؘ½woK‹¼|9#;û«eÀ¬öà²ÉGyÏŸÖh`Žä|„UŒjñ00¸ø)ÒC»¢mdâÐ'½)í­ÐÉ|6„¼²ïæÌÉh× 7ïà—êú6mb4mJÄÅÑkÖP5÷xf0°e‹Þ˜1Ü-X'òïÝÓôë§䨍‡Ç#ÇOó¦~dï]ºþô“BA¯X‘XR¢¹û¨vïÞ2uþ¼æ~ Íš™ˆÅŠÀÀ”ÜÜúôY½ð*³Ú×72G ¥ž…Êæ.Sœ{n²î½ÁT“éó•±FløÅ,à®î¸ò-—ÉÏ …W²ÂÏB–wnÖg«wo[ÕCuç—°vmS//óû÷ó®_ÿŠïÉ?v,™É$6on¦q«V”‡úºt©«5À?‰‰|33®­-¯Y3Mz(`” âÅØ’ `¯-  hLo„vfˆ)A\&~n-üòì 1¯3RH»x IDAT^f`÷`’X;V†øå*Ê¥D ­±p(dJ¬ûÐ^ °k:¸ãêd}qX<>Þ~‚í¿W:/&»7£['lÛ[Q?R<ýú;v(—/¯ÅF¡<ŽÕ¤ ³¬Œîß¿HÒr4hÀyúÔÅÌŒùꕸK—Äààú)[¿ÞiÌ‹ÒéÓëÄfÍr±·×Ù³GsN‹>Ü…ÍfÔ/Ãx›Qy*ϰÔ×Ò"¨T˜½%`½ÙUš€,X^5Ûzžµ”â™¶O9Çr¡³†QOå4ýò³N>©)Åq±õæÝÕ©“eË–¦¯^ååç­ž½½ÎÈ‘vZZŒ Bëè¬ñ%Ð4fÌxÅ``Õª&žž5éÞê…‚zò$ÛÕÕ .&æÿ\ܹ“SìëÛ@3ùÔÇù|¾¢«Þ½Õ¶¿§i̘× wåJ‡ví4¬¼IHõ,oÚTëÔ)[ÍüMž\âìÌØ¾]ÏÏO%võâ½v­²Ab÷nÆðáÕÏÑJ%fÌGb2¦ŽÇ⹌«2d_gù×ã[&X™(ðÂ[Â(‚ Hëý2(BÀe R úăAðP\n$(ఠݹà°c"H„ï ¤ð¨¯…ð6Ä q;†l´7ÅëBì€Ñ!”ãN ÞäÀèÉp0噟Vðt@V Îh77¥Lt—‰ø3u»¦°1Ãý×Xù‰Å(‡é#¡PbÝ~¤dT:A'Œøf.@nuîâ..Äܹ  ›7S§NÕ¢‹"IìÛ§?hG"¡}|Н]Ó0þddÄ8q®o_ÝÒRåôé™gΔԾÏðQÂbkÖ8êè0rs¥§Ni.¢êÕËB.§bbJ=Òœp8;ë‹Dòû÷«9ÕŠOÕúÿ.Ê”çµ PÈ/ó—m¾-_ÑŠŠÿȮʑ“O£T9Ö2åY&­ —ReŸ±n]__Ål6£M³Æ <¨…bòùš§t'NtrpÐÉÏ—.\øU…‡'00`Ï›×ðk¿áᥥ2’$ÌÌ4Épý¨Ë½ûˆk×RÊÊäMšhXo{èPb|¼ GMäígÎä>xP'ž;×V³wÏÌ”÷ê•”“£hÙRk÷n+ÍbW7–ýø#¿cGöŒ:?ý¤’,&†î×ON÷éCΞýÅ zÍ&¼ G»6Xÿ3ª6M¾éô×Yþõ`¬Y³æïÃׂÒ~›¯ùnÆB(í= 6ˆ2PÝÁ˕Ŗ°ÒÆ»bÄ•Â× †d`H ¿ÌxH.—…œ2ôpI@$EV ž'aB' yHÎA.a‰ö¡”¾¹+B£—†î°ú ev²EZt¸ˆJÀ ÊÍ<›#<º¤ ¡å-+°B  m0‚ õi@0’x w”0$1š‡Flœ)ƒ‹ú¢±Î˜iö*q"¹Ã˜ƒçy*ál€)Í VâØ[hm‹^ àd„aÀb`ùXè# ¬B‰ee„¹ƒ`kŠ#wþðÊ °4A à K3 î =Ž]@qåiÝÆ Ó'ÍÆ•›ˆŒBµØ±ƒaa‘³gSÅ*À-[ÆÛ¿_Ÿ  Ù´ICŽ`Ò$£K—ìµµÉèhɈiI]9Öþý YB¡òرlÍŽ`g§Ý¶­QQ‘ììY ¥î Ñ·¯]‹¦Ïž©‘¬,gWåǽÏ_¹ôVtT…ÓÁãTS¹¼R•™ JPCÄR)½b……÷ycìè¼»òe+å¾TUb¥§•ÄDÕµÝu9Zµ2µ·×34Ô*.þ*©X° á°a6‰‰ÂåËßÖ×1K–J)KKîîÝ-ëë˜_‚TªtvÖoÛVm Ñ7€—/ó768P{Š¢CC Í͵¦OwQwߨ¨²ˆˆ2.—J(Ì·@„›³ £1Õï˰= 2xY¢®¥ãD"LõÀÛ|lzb ,ïˆ,ø¿‚Hã:BŸ‹s/ÿRb-‰ G‚QñŠž~™ŠÐhø_‡ô“çöi#ѹ®?¨x@ùÃaÞ ßǨIW'b±pú4³Iúömê»ï2>ú3gjÿù§@@/[V:}:_©i³Áõ‚ƒd/ò HÔx®ù\baÁ>|¸Ñ³gü]»Ò““5YÏšåQ²uë{ƒjݺY‡‡ç_¾\ûCbvVé«1‡~ ©9€ôQGõ)ÄÏJ‘À¦kÃåÂ0žÝªü MèÔùÊ€Á¢?ŸEù‚nÇÕ‹‹ÍfØØèö©©‚Ú)Z·ÎC|Ük(¤7íÏiýN«K·ï3mŸ¼1¹,µ3,9ÖOÂm¤²jz7øV|½±Úµ3××çÔìç^_f•ãÆ9ÌšÕ 6V°hÑ›º ~ãÆ˜#G’Ú¶5^¶Ì­^V3Þ¾-d2‰6m¾ðlŽ ý‚þ¸W/ÂߟѲ%±t©2 @%¶äáÁ 4lܘ©T¢S§Âäd ¿:ÖÖ¬‡›5ã2DŸ>ÉÙÙšs¬±c-||Ì\]µúI×Pccöôé.íÛ;VK)Ü—0hc6éé*9©*•ÔÛ UùêÂI6œ¿¤•EÊ%1ƒnÕƒËÍͰ{wkCC-‘Hó›¨:,-¹Ó¦9»¹éíÚwçŽÚQ"¡&N|Ù¾½ñ‚ {ô¨“û€ê(*’˜šr41(ùG#.®ÄÊJgà@ ìUårêÚµ,ggÕÛ73Szøpvçλv¹ª›“-*RœÚ¾½Î¸q†Ë—«qè©SùééTƒÌ»w=¼X(¤mm껸¨úéZ·Žzø0c9p`Moºc?²²¡§‹ÀÓ0®.ÛüÓ/(,Ƥáøy–Zc¯ É×Yþõø– V9R‘w=à˜þmÄ7O|·MBAoöAÙÂaá§‘x‰Ÿ"퓈'¶‚ÅÂö#Õ$ [·Ä˜á¸ÿÓæ!ê}Õµ±y3cêTòéSjð`ELŒJÓ-GMšÄ WŒS y;  'CCæýûe¦”•i¨ëš5ËÖÒ’X°u«&¦V½zY<}š¯±Ô½wo»/rÏœ©=GÙÍ˹߀ƪS‡*q\q*»æ%ðï ºÐJ|Ã]rßUúÂP™Ã¡ET!ƒ®%%—Äny^9E0˜PÞQ¬ iE4Qõkž“-ˆ|S× –µµNHHnxø $õõë9xC’Ä´qw78z4yÔ¨…¢öíÕ«Y~~QOŸ\¸ÐÑÝýÿ/˜”œ\úøq¶D¢d2ÿ‘¿±ß»ÈÈÂs犋¥=z¨]§YòÇÉYYâ±cíUß‹¦±paü½{Å Ø:8¨—!;wŽð`AX˜80ÐÁÚZ=S†²2z„’—/å ýà±³³ªìê·ß¨U«”OžÐçÏ3Fªéãq3‡Ž!% §ŽTãØàÀIüq 9øy6˜ÿOÏÿA ü#¿üjÁe ¨,)СÈìKï#O!°é ­æ`Ý„tÈLàhq,ÀI9ZrÐA "„hÅæ0f! Ælü`þ0× $—È—€I`~+8ïÜ!SâtdJèça­£‚X-ÐÑ O¢±ë“2Àž­1¼ÊÄØ~²Òyµò@‡–(æcïÕx_|!a¹ø_1¶ne FÚÚ R©©*q, ;vè/Zij±aÌž]z膕ó¦¦Ì‹í\]9E/X%•jPa2‰íÛ]'Ndk`‹5j”½®.óÍþû÷‚Ú·þ ÞÞvL&ùæMAIIíÁ¼O9–k#ÓK»²ÙÕü" IƒGÜ?+:›‹Ÿz ü½K áïQ²~vÁ”…ù£~Ìß­ìäç{U•"–¤•¬©]ˆµ­ôMªÚaߎ¯c«aCµfHëÖÖÚ‹720`d¬^ý®æ3 )\¿>Ц±aƒGÏžÿOÒ«rdf–ptüG†¯ê‚k×RH’6ÌYfyêT*A`Ü8]]5¸Î•+ùoß --Ùóç«u‹Œ¯^ãàÀ>tȦU+õìæËÊè9søçÏKš6e^¿nää¤*»9z”Ú°jÝš8p€1thM—(<Ë×!.3&¡ïj6x‡Ýþp`¾ºëÈÐß>Áêf 0ám4Ðç:â¼aeÈ49††`ÞßÚ±Pü†²ö |@¾}Ôl83°O†BK aHbS1h`ˆ!ŠåX— ˜ïˆÚØ•„<)êcŽ¢Š+‚Xã›ÂË—ãq'¾kŠáxœŒ#ZåÌí #¬¾Œ¢¥l¿Œ§ vâÙ'ÅR»æ£ƒ;öœGP(>…ß\Œèk÷±¢:¹Õó=îÜÇŠu ¾!b0pâ£U+"(ˆòòRfe©4ã¶lÑ5JK[Ó¦ñW¬øÜÒR%X[³nÜp01a:T4ztÚç¶ŸªAºt1X²Ä!#C:k–Ú(]]æ¼y ¥Rå êî ÀÈHkôh×¢"éÕ«)ªl_α\™ŽŸÔÚÜ\wѲnZZÕ(6¬™ä ã•VˈJ¬¨œ3Ùˆ½¨ÖLöºOu-;]þ7ò•ßµ¶öêÕ Êf¹9‚7ášäF?ÂÅÅÀØX« ÖWBË–†·owëØÑdÆèùóÿ”+¼r%ÓËë~ttéš5M-ªîñÿk"%EÀå2ÿ‰MrêšÆáÃQÚ4ËöîwrâýøcÕÏj J© x>úcǪç[VF{{;&2DëØ1ÕÙÕï¿S“'+¹\LšDN™RÓ䛕ƒA¾HL‚ÙX<·š Db,܈Ì,ŸŸ¾•V‰5Ðn(¾Îò¯Ç·O°šÃEEÒ, ÅY q1M¡ßúAÈiÝW(óG¾Øy(d½APÀAP p% ¢ñ» ý¸°bÂ’‰ B‡X1®Õ7=H(ìO_GÈ(üú|¸Lô²€!@ðmšÆú»žXÀÕ|1¶~è0ho†~ž i,8‚å_V&Ü\\‚äv‹§‚ÉÀn>6b±Òß?Y(Ôä÷ ];s…‚:}”}A IDATZÕJÆn^Χ´)¸×7à.ù¹‡ƒc5 ¶DÑÕÈž=íÔçnͶt¾©èùKYÅå¦ä9‹óG¸J+¨w+á¥ìª³©ëã=¸-[Ù˜šU5¶¾s+®V£Ôàè¨[X(©!‚U/F£Õ¢M£åËÝúöµØ»7¾OŸ‡qqU'N¤ öT$RúúÚ­Xᦖ §^“#‹ÿ~_šÝ»‡3SR,Ù¶­ÚñBÿ”Æõ»v5mÐ@°ßñã9FFL33Έj¼#McæÌÌÄD™«+gÅ õ†*‘Ðóç—FG+ììÛ·ë©Î®._¦§MSÒ4fÍ"§M«iæаd52²ÐÂVUãØ`ñf< …wW,ŸYuÕÊCpýéç;}ÿ¬¯Æ7ÜìšµÖoí˜5£yÐc©å Kd¹vƒ}$Jb ˜ LjK@5×,1ÅÇ“OžÐ††Ä¡CÔ A¤®j?q-Z°Z·f½|) ’…„ȇ Ñb2ÕžÊÌ͙ݺñ""Ä4°0qïÞ½·Ö—:rU†¶6C[›-¼x1Ê+K1˜›k%&–Éd—ËôôT»¥‰ƒƒÞ«WyÂQ£\¹\• ˆˆO~/ÙlFóVü‚ª™V¡P«Ó¸…'éA¥ÝÞTدÊV<éj³w9ÝHúü1«s´œ~,Á8*øÓí™P0H‚åÑ[K‹õ¶’ÁH$75ãYZé©uÊÁå2=Ê62Òòñq©V<^ï"÷OáâÂsrâÝ»—Ëá06lˆÉÉ‘Ð4(оq#{üøÁÁ¹ŽŽ¼±cöìi©ACººãáÃ,™ŒêÖÍÚÓS½j¸ÿhvï6oc³™cǺvꤞEѳf…éé1'LpjØPU‚UR¢ðõ²²â¬YãäêªFOèC‡ ¯\)urâœ?oob¢†%©LFûø‡„È›5c;g¨:»ºpš0AÙ¦ 1mcášØEaäD„E Wÿ ºÕõûñ¿„GáÑ[—¦r3¡{¯°â ĉ~‹–®±P­´ÆÏϳרx"êaŸß7L0TÁ·ÁJ@€`»Ã1é÷ÑVñ(|Ž4{p KFÙ+5v $çPèîÈ!)²)ˆdÐ{AõbAè×ä©‹® !ÅhD ÄÇ+!:‘‹DަÀ.ˆ(ÂŽw(“CöVσßS ŒóDd6.½«bµr€ Ù%ðû »Òæ`Lw¤åãÜcˆ>{Ù,Ì÷El*¶DDåpÉâ©+pç f¬ªæ"ôì†þ½QZŠ 3k¼ €YTD‡…ѽ{+òUöìÛWkóf=…—/Kú÷/‹5‰ˆ´m«½q£åÍ›‚mÛò÷îU; `âDK>_™ Ú°!EÝ}½½-ß¼)9qB혘h±XdLLÑ•+úi±ØŒ “[»7«Æõ§¸X|$¹CaÓ±U^׆ôœbã¾°øacZ-îrÅbÌ÷Œ%—„Êgå+²Áu²u•íe·÷ÑE™-<­Í> bÝ®S+-MðüyN~¾†M!ëˆLÂÂúØÙi;8èìÙ׿ÿ£Ö­ƒÆ{Q"(~ûÍsÓ¦¿­l=1‘ÿôi6›ý-ÿÀVX¬¸t)ùÙ³ì!CœÔÝ÷æÍìððâäd‘··öWëÖ¥ddH( }ûªáæ*š3'«´T¹f¹ƒƒý(år V|íšT$¢wìP#vuþ<5r¤²´^^ä²eµ|$æ/GÀ5óá·¬ú²Áwq˜¹º¢r°©k¥UB1¦lB!š«‘hý_ ßò÷¿ЃRG˜›Á ­aí£HëÐ}‚a0²» &èà6û2$3@ÚÈø²PL㢆$&é¢N•ÇÀd3´áát 0‡5·ò¡ ÑÃÍáf€“I0×öz €'0 1FµMÿ¥ÄZÿ<”wêýÇtG¯à‹*©ÝÛ¸aúP4v€ßï•4U,&ý#ääÃÿR5×añ\Œôµ%¦üˆ‚Â/^.SS\¿Îtw'ƒ)ŠT–ÖtêÄ~òÄØÚšÐ:fei’,ìÙ“çïoËå’çΕ\¹¢¶nšÁ hhfÆzöŒŸ˜¨Þ|ïãc;t¨ ›MÞ»§‰UÕ÷ß7hÕʬ.m rô-Û´«&f H•Ê4÷ªòº·[°uöñ0Oƒè ½º¸™üD¬cŒ¢P9f#—È®m!I«wÕÝ‚|aøëZl&j@¯^6ýúÙþ= €ëìÙþÙîÇxy™{y™jsútûÔÔ-[þ꺺¬öí-LMÕ“Nÿ£qýzª»»Ñ¤I\]ÕvBÈlÙÒpÖ,ÕCàÉÉ∹9gÇ5ü ø|åÒ¥9¶¶¬aà ¼½ÕÈER-*‹abB7n¬jÜëÊzófJK ‹“«VÕ2áî?ŒèhsqÞ «cH"16€­%&ø`‚OÕµKÀ­UªW® Ù×Yþõø– @ R^á•'$ ë1Þv‡Ó{\G\X¤AtÙ4 ¡в+(íWB™%ˆ ²ã &°I㸠¯•øQ¯$ØËG¾³,ðZˆ«ÅÈ–a¨%@àZ.ÎeÀ¦xœ‹mï  ¡ÏÁ£7Ú\œ> K <{Ujº\ff¸vÉfãñczþ|%Ÿ¯êu¶µe·lÉŠUÌž]§‰ÄqÁ“… M““e?ÿœ““£P·ãìÚµNööZ%%Ê'OT7`êTg--Æ›7%ÉÉj·&45åZ[ë0D``Šºû~ ‚À€ÁnÕÚeÉäôÝ1œU^_¢¼pëØÌb±­w\Ç¿`ëÿ½³ êêÚð}FãîB„àî^ÜÝ¡¸») P h)P¤@[¼Å­ÅÝ‚OH âîãß %!afúµ}ßÒ÷¹æG®³×ž9ûœÌìuÖzÖ³$}ÕBÁ_s•Bqt‰H$´h]ºÐ›¤$çÞùcçìäd* Å©TüYÍžÿ‰P*5À?—änì½‹Í N“ÉÄ={–4ö³vHDýû{ÛÙš° ʹr%].Í›g„²èþýégÏf[Zжo÷”ÉŒ`æ-[–½{wž‰‰°|¹U­Z†:Í¿ü¢›7O›‘A§NÂçŸëñ®nÜÂÿ+bãÔ—^]‹¶ùþ¿^ÆTάј¤œeæðõO\}È´O)k„ˆØÿð×âãw°jP#ô‚S9“œ«u ŒÍIÂ:áaŽx?Ñ50o€e6š[d Àì>ÊMä´Bh‰è"Ú_ÐŽ“á.b‚DŸYc&byj±óÕ+²5 ðà;Ås& zy›Çâ‡èÀÖ„¹õÉP0ÿmeÇÒ6XÈ™wšŒ| –t'[Ág?ñ[%ÝWƒ¨âÃÚ㜹ÿûrº5¡]}ÎÝaÔW…Wºq!Íë±m? Þë x¸qxåʰt5›¾ÿÐssãøqq×®¢;µmÚ¨³ –ˆrt]¸`?t¨iF†®^½”Û·n§#|ù¥K6¿þšÙµëËü|ã"+®®²iÓJܼ™1n\Èû¢€££|âÄR±±yëÖý‘Ά#FT”HD7þ aš4/Ù¥{Eá½Â!–C¶3š¶x÷ €neÎ7_n> ÌîXö· ÖsÁí ¨A¡wP]ܦM ¯RÕÕŵðÿÙÓaÍyÞ´±‘k4ºÄÄÿXŠð¿¯Ã™›püÛ¶¿z•3ztE;;ã¤>ÓÓ•«W‡89ɧL)ìúŸþB,fÁÕEÃÂC‡Æ˜š [¶xúùA½úþû¼Ù³³œœD?ýdÛ¬™¡OŸÖuﮎŒÔ-X Z´HÏ¿Á³P:õ%8„ÙSùbjÑ639;VQá½ìḕœ `P;&÷6ð ⬿¿ƒUšÒ:t÷¹_-º‚kà¦CH¬#bWLÝ1½Er,‚ÈÛMJ{L¤€2Uk`ZÕÄ(`³’Ʀ4’ã(æ`µÍ)mBªš“‰hç °ú@W/ld~Ëײ”Õ¢ȯI)w"‰oKé’ØŸ#¼+ÀA¢Ûc[Ë rÓP¢2ÒÈŒ¨%ÂStÑM‘ÑHÂ%jèj‰Àšt€ÏÝidɺÔ:F• ½3j¸“Ž\̼ªÔwbÉ#;z”Xð–Û°¸ -Jq3ЏLS_õà“2ì»MÞÛÍ)éû ·CYþéÊÙŽo¦Ð¸W[°ä®qmL¢~uúL&©¨½¾{':¶å“úôÂí{Eüá±µ5AAºfÍÔÉ×ö™š ‡ÛöìiR¦Œ¤wï´‹þž9:JŽõþä‹{÷V¯6¸ ÑŠ~Ÿ|b3g΋ôt#6þªUmöqu5Ù¾Ýèz@¹\<~|¥jÕwí*¾PÓT¯é>pHÍ÷µ°u:áŒÅðó–ƒÞ=XJËÖ!‰ùs:–•¼uË—½¢Æ…¦«®lׯ…T®âö¾4Ãù3$ˆåädV»¶sqšÝ†'˜?:T«æP¥ŠÃ߯¿õgÁ¨{wòd¤L&îÖÍ·ysOýÖï@£Ñ}ÿ}„¬GC'êtL›ö¼n]ëùó½ ÍÖÍŸŸ’ߪ•ņ FHž_¹¢ìÛ7í“Od=z˜öïoh½ÂºŽ5~~´l)|ýµ'#“ö½ ¥oö~_D/g@©¢ÛX£ÓŸeŸIdóa>©ÆÚÏ(ýê¢ü³ƒOp‰½>ø(QÞâV9J„s‰µñ#ùX’—ÙÜNâô+€Ux–ÂÉnÅÔóÂÙœÓ!,|«[Ô·.V&¹Ïê3oŽH%ŒlCdKöúN±W¿ÖXš‘’É’í…W=sb©éÌýºh÷©ã)[š¼|:JDä‡. ——°w¯X,æÁ]óæjÃ5He2aï^ÛŠ¥r¹Ð¾}êéÓFK W®l2}ºã­[’Ï??>Û¨¹Ý»;ŠDB\œrÁã\¥ŽÝž=Ë:|8æ¾Û¶õº?içÎP£R“@ùŠÎÃFÕ‘Ë‹Ü0ëqÊr¤îRÁ–ª[§—M-édÞ»ŽÇo¿÷RRpºV£<ü¥ Ðâý VZÞÝÛF±”JõíÛ ÉÉE§£¢þHƒÈ¦<|˜ügý3üý0êÞmÙôâEFýú®Æ:”ÇÇ>{–—ײ¥¡jŸ?ÿœpûvfTTþèцºJyË—'%$hæÎu¶¶64¨ìÒ%-?_W±¢têTsg]½ªkÓFŸŸ°j•žÏÊϧcofË kàa‘Õ5kfh¿B@X³Æjôhóõ´iY‡ícÍ›ç\­ši``nŸ>QJ¥Á€*U,úôqK"êÕ³¿x1qÍšýÖï¡}{¯Ë—_íÛ÷GÚÏ6cÆ×³².âÙö±iÓÖ³Ô›,‰ßá1ÎÊW=jýþd¿\Ü#‚þ™V£8è/´lS˜Sœž–w÷v´Q§—™©¼z565õ4?ûÈñìYúÕ«±*Õj õ¦MONžŒªVÍÑÉÉ8ѯ{÷Òöì‰ Î4ÈÐJÀ½{SSU*•vð`CÅ fÎŒ¿v-'6VõÅNNÉÌÔµi“zïžJ.°)2m÷>îÞÕµm«~öLר‘°gøÃ³t:FOaýÌL9yE›Ýbãn‚^°v.µÞÍ}ÆœÍ\}È–Y8¿#ú¦üžÍÿ¬¿³ƒõB/jPˆ"ªåˆ"±n&H’ÈÑ ¬…Ñu{a'‚d7ǤO$WP´A…î<:1 •!‡}*Å °ÄTà§LE´±æNöÑÑ©¾H‡¥”–nap7úw.<šÇ²(ÕŒîJÛ‚y뎜ú Åöø{ðñ;Xn”Œâ™ˆ<|^ð"“¤j”Š$ñ ám(DöIžwÇC‰îg¢šcí‡IyOÈùm›ÉiƒÐá ÚchÇɰ±^A”–Ïl0±5“d ]ð”³!ǹø˜1Á‡§Y¬z­ä^ò6l {Äš\“v¾œäJ €·-3›šÄÜ·¼«²®|Ñ‘à8û}ãÛÓº?]aá;|-³¨T’oòýñ Ÿ7žQ}¹ÈçËPUÌçîÊÉT©È{˜»˜×ë98pþ¼dÐ QZš®^=uPñ¤ùó-Ç3 Ñôí›vì˜>VTT”øÇ=ccU‹%i’¡ê 7¾:y2¥cG‡îÝ j£2$:"B¹b…k•*†ª9,\˜½o_~:Ò'쬭 ò®ÂÂtŸ~ª‰ˆ`Ò$ñŽú½«o6â¿ Kí¢QaIà7P(é6–cçÚƒ¥Ó‹0½ŒÜŽ• |Á¬Ö†¦Cÿ‡¿¿ƒåE „›¥) Üã^U|€Ô(ÊÝDÄX¸HÄ—ŸQ±4»±p]ѧ|Y–/¤|Y–®fÕz=WÒÎŽuëÄ@l¬®[7ͳgFøX3gZŒo®R1mZæ¹s†f”^AªW78ÑA§c̘WááFd£†wupÞº•y䈥ˆz ‚°sçËÄD£3_¯»°mÝüÿiðW$¬¬ä£Ç×/áUD’Xié]6_æˆÞŸ;Ylyî7ºq‚`³UÔºÐõÝ#šwÊWt.*ˆfxbëµAq²éÿf¡Ñ×¼´´´jòÔÀ{·qãS G#šÕ¼ÆúõÏSSýúyyzÔ¤93S³lY0r¤»„­+’$*˜ŒcXÓcøñÇÜE‹²…¯¾²òñ1(.®ëÒE¤«ZUX¾\$ÕŒÛñ³P§KæÒº0Cò t:f®àF ^î,Žì½÷Üs†Ý§‘Kù| f︎J5“¶ RÔ+kÈé¿Eþ_óúC ;v¬Íûr€€ðÞŠŠêÞ½»•••••U÷îÝ££ã<üéøø¬²Ôñ L!~xûâM´vñÊ"OE^3J–Æþ:‘}ð#:LLGlkb~…Lš‘˜—B²œþˆZ!º.Ýgrê‹Ù®"zYRMÎútruLs£‰‡Ry© ’%SK’¦âëp€‰åiZz÷” IDATãÎõD®%|V“v¾ÜOàøsW+Ú”ÆÉ‚ÉÇÞ„‘-éX•ªžŒÝñ{N°Nfö¤´#Öóîöݯ5µÊ!ô›O¡B{[¾™Kóú,ÿŽG( ê2ÿsš4äóù|»EÏÅ´´ä×_%;ŠÄbš6U?}j„ñÕW–sæX¸¸ˆ;vL;sƸgâD‡áÃíÄ}ûF+†~¨¹¹xɿڵ­–/4œn\º´å¸q~nn¦ë×-:Ú¶m‰îÝKfd(~ùåƒõ™ffÒ‘cêú•rx(^ê»ÝnY†øÍû9ÿiÞq¿®wͦ ?F§SZ¼/ìž™©¸`įR•*ÎÎí‘ÿ*”/oW¹²}fæÇ¬tþ|LxxFÇŽ>½zç`¥§«¶m ¯]Û¾Cu³V¯Ž’J…]Ú·7È[ºp!{Ù²DssÑîÝžR©AÙÙ³Š#27–úû[Ö«gPÖ2&F×¢…F­¦KÑöíb™>ÒŸ1d,µk2|P±ríÀ¢õlý™VŸptSÄöà—ŒXJ£*lšI™‚º ÷C§:†œû/ àäätýúõâ tñÛñìììfÍšU¯^=22222²zõêÍ›7ÏÍ5¢ÎéOÇÇì`å DpÆGG<"yè‚‹#ŽxP5š+<®„óCâOÖÇrHV ²C’‰æ©]0 C}€<º ëÐVSNŒ¶+id‚â´ü‰§Œr25|ÐË•ð\¾}Iº kuÉP²è!€¹”6>¤æ3ûêWi\Rr¹ÅžoN~Dc´:"’Yqê÷ÍìAZ!l*(úÕ8rò¸ù„¥ï©6Ô¬ô¦…Ψ9<*<úÚ0¤?:“frø½Tc!˜™±¿ØÇ‡R¥„ÆÕwïác-\hYµª4?_×¥KÚåËÆí=«V¹ÚØHòò´3fÄé·~‹þý}}M=Ê^·Î ‚Þ½KÄÅå?x–Ÿo‡F$ê×wILÌû曇FM42¹dÈðZeËA×M»ÿh»}ÒÕj6”÷ík[?1‘~ý4b1¶¶ìØ!6Õ7éÜ%ŽF«¥]K†,Öl÷Qü×’§`Bª¼GÏÊS0s¹ùøºÓ¯U¡;aÜxFf.3ºrúÿ½xúô©¿¿… F³ú¶lÙR·nÝÙ³gÛÚÚÚÚÚΞ=»víÚ[·ný+NÒ@|Ì–‚L ‘àRTÓ zEhYʪQÇ[ o,ÒÈ*‡½öÖÈcIkkelΓРûJ˜Ý'ÇqkL*#=BþXDU^¡‹ƒöÜŽªÐÀtê˜p, Ls¥Š9ÏóISSˆ..T·fk4À¤ Ôr GÍÝ€‘U¨îŒ½)B̤,lE w¾ _ X݇rn@äÛ"AKSÖŽ¤¬;ߟ#æåOk vùãå¡KÜzZø:ŒèͰžT*ÍЙE«ûð•?-›2c>'Nmóär”ØØÎÎB—.š‹¨+ü櫱cÍ\]E“'géí¥ó.ÄÊJ¼n[r²æÖ­Ü'2?0ë]H$ A®¾¾¦‡%¥¥JˆiÐÀ¡eK§Œ ÕÏ?­¹0lXùªUT*mp°Áú÷Æ@*V³JÕ"všL±ãvÛ¯â%¾€‰2ýˆhµé[5å5â.&e(÷Ï£˜ VÀMƒ.—‹7vsu-:‚õøñŸÐ;èŠ2el7þË4è½wOž¤*ÚªUF®hÔ;+•ÚsçâkÖ´6ÍÐ$Öºu1õêYìÒ°¡AÙܹ îîÒZµÌ¦M3ˆ­••¥ëÛ7­zuIçÎ& Ô::#ƒvíÔ œ:%±Ô7éæmFNÂÇ‹ñ#™1©X³€,úoÖÌ¡C³" &}MJ½[°~Zã S¶’“Ϭž4(†5ÿ!|­rŽ?>p`×uàÀGý»Ïã|Ì–¾@"OÕ$*QD¢&M@'<Ž([,Ÿw‡ª¸‘t–pHúa¢+cšöÙçÈè†éM”›È.ð Â]tÑt–’ªãŒš£*:›“¢áL.Gs¨dF N¦³.`œ7—RXñ‚< ¶2šºr=ÿûr1£«r9šu¼#X\‰`ÝÛÈh£ÒTõäîK¾óÒµ彸ƸMÛ¨*=›“È’íä¼WĶa!2÷ƒè3©ˆVЯ1c5«ñ<œ^ƒ¹\ltö är׫'¼z¥ëÞ]}ë–>ÖúõÖ:™¦§kÚ¶M}üøCNO!"H¦S§:ܺ•;|xLR’¡ÞR›6ö®®ò72–-3"m×µ«ç•+I+W†Û«ÇÚZV§Žó•+±›7¿çêþI‹E}T«S¯Ùæ‘ÍN»%ÑÒr€_~Ø7ê7ÿ%˜o´/d¬~|V|¹l9'o_»BC—Î?7$ˆuÿ~òå˱VVE§FJ”ø÷ K[ZÊ._Ž}ðÀ¸>ÿ=Ð{ï–- ¼|ùÕTЊÞ=‘.$*Ú- ŠÊ_¹2êìÙÔñã‹3(ˆÀÀܵk“¯_ÏݼÙÃä VK¿~骄Ý®]¶¯zÜ\ÚµSß»§KIaß>‰>¯ïáÚö "’ÖÍX»¬X³è8æCÔ+:·`ü€" öœaËQC˜=‹‚³YÛ¹DN>Ÿÿ±ðÕ?ªUŽ‹‹‹T*uuuíׯ߳g¿7Ïxúôi•*UÞµ¬\¹rPP1‰›¿³ƒõb¤ñ<*O} ²H‚jRS‚$œð†T# '¶)>b„²”ÅÊÉMRzc/G¸NVLÊ õDtƒüˆráäÃ$9&pL…&Yc"ðk.@?{¸šEŽ–Ô²A*°7`zE,¥Ddq; `pEº—&>ûMK$°¤-–r®¿$ý­‡´¼ÍËq?š«¡¿¯hÝ(¬ÍyÃÁ‚nЗ£(çÍÇE¨6Ȥü¼W'‚Ÿ3oM±×jáŒJ^>KWsïA±f¯!‘°y³xèP‘ŸŸðÅšk׌ð±V¬°¬ZUššª3'3<܈4Ü”)ŽM›ZäæêfÏ6B téÒ’‚ÀÕ«i11†r¿úö-áæfšŸ¯¹pÁ8y`ìØJÍ›{ï±.ž{®Tè Þ¸ÿ~²ƒƒ¡5ðÿøøXee)¯_ÕoúÄòå‰&T*Q „Úoøå—ØädEýú}úÝ É]¶,R*-Zä«ß¾þ:yïÞt++Ñôé%ÏœQΜ™•“£Û·ÏÖ×W?“L«eð`Í÷ßk+TΞ{zêñ!"£>€;ŒÂÎÍS©é9ž}¿Ð® ßÌ)ÜÈÈfþV.ÞcÖ@FÔÄÊÎgþn†³l0Õ‹xà2 GtE¼úø:½ÑïðàèÑ£5211ñðð˜û†¨÷¸àuª°t:ë0f>n}¹D"–ÎÇÒœÄ$ú !TŸ,¹HÄ‚â¡CE99ôï¯>}ÚÐ/•\.|ýµu£F2‰D1"#3³ˆ‰EA<=¥Ó§;^¼˜ãïŸ`¸jÃäÉž^^&áá¹Ê;îßßËÚZzéRâ;F? Vغ5H¡øk¥&›4/ÙµG¥÷ë™5‚ä°Íôû&-¥h¶«WºéR âIŽL(öÏ¥(&VNŽòæõ±rsÕ©©ù2™ØÑÑ8 ïL,-¥ÊôôªRCqˆ‹ËÙ½;T$FŽ4Ž}¬]véRbçÎîr¹A[ÏŠ‘jµ®GG__ýÿcʯ¾JfÎt45Õÿþááš#ÒëԑΜiÞ¬™A‘Ÿ%K4{öh­¬X¿^\º´ï*6ž£¸|¦Xµ˜âj u:æ¯áÌ5\Y3Û÷B‡:ŸoààEú´`îУþ{¸D¿&Œ/L0ÿ¨á»èÖ­ÛoT][[ÛBñª”””B1­¿¿ƒåGK{JEr¹íD‹ú”+I÷q<+¦‹ŒTÊþíôêJN.-»­¯üN,fëVñäÉ¢%„NÔG޲´öï·uu]º¤èÞ=íýf8ÅAºw·ž4ÉÁÌL4hPŒýt}|LGŽtMHPM™b¨ø‚••tÖ¬ò¥JY._þL¿uA´háùé§¥ÓÓ•»w‡ê·þÿ¡^¯>ý«ŠÅ…~±ž`ÞÕY—¾CµR†:ù7âšК°›ê'K•vð-Y¸"üÒ…ŠâƒX‘‘Yžž–­[{—õø7 :ù¸»›?zdhœõ¿ ¸w«W?´¶–MœX¹Lƒ(çï¼gòÉmÛºŽaP8êáÃì_~ImÑÂnÎoCìÇŒyei)š2Å¡U+ýqµÜ\]×®i"*H¦N5 5ß~«õ÷×6k&>,©^]w•œB«.„>§c¶®Ã¼x%ÿµ¬ÚFÛO8¶ï¢hf«ö°ímê²x4¦ o?]aÍQšTdVÏ"â^FàKrW¦¡B… (ß~ôèQùòåÿŽó(³ƒ¥&Èá©©)ö ^iÑ™a™E¬ &N8EòÂ'¬®ò¤ŽOI8Á³Æ8%žStöHòÐî#µf1h“—޶B|‹ÆE ¦„{V)pSVJ¾ŽeéÐÉŽT5+cQëèàŒZGL>[£†•ÂÝ‚ç™o„Ý[xc!#%Õoû NiDz§B8õVK¼M%\¬ÉÊ/ íîíLÇÚh´Œþ–ø‚õjKÆ`mÁÞ3Ì.H„Ùcñó"=“ΣI+¦O.çÇxºãáF‹.Äéã; _-þäA©¤gO̓ƒÃÎ΢­ÍÌ„sç£Feb”€2¾³Z­»v-gåÊäâl a„ééêK—Ò~ùÅÐ=oÀ¯%ÌRž?7ºÞ¾];¯ÔÔüåËÿtÑÑ÷Q­ºûÀ!5¥ÒÂ9ÂY‹¡ç-ÕÖ…,Qÿ|'i+~¤SN÷~wœåk/‹ûÐÐÐôèè¬8¸ÿf¡QÀÌL¢VëBCÓõ›þ÷¡¸{—˜˜wï^bjjþhí¼|ypNŽºvm;ssƒ|/¾x‘­nÖÌÖÝ]?þÀô§Oó³²´3gÔspܸŒGTr¹°j•µ!l°ÔN˜ ©[W5JÔ¬™ž YYLšÉ‹íùq#ÖœǾ?ÀÂuhµŒXD·Aàr ³6¢Ñ2º+¾î†"³–ž )çùûñëaúÒû öíÛ× Aƒ×wèÐaÇŽïŽîر£S§Â¼ˆ¿³ƒ•I(Ï™R´•bÅ­ª4“bF`uªÁW§”Iñup/…ƒE \Êcušø~8TÁì69ΈºcZé~ò†#ªÂ¯è¾A[N„«ˆ[6*ñ–PVÊmë2 ´±áRKcÑAW²Õ\OåÇ€Éx–Ή(N½hàN +NGàÿ6Ù7¡¶&ì~Àw·Þñv a)î¾dÂn²ß’:cyÎá›(XQX§{ò4œa‹ UøÊ˜šp`=©éìû•a3‹íBhmÅ©C¤¦úœÖÝH5@×iáBñ A" W/õ†Æˆ+U’ìÜi}æŒrá¬]» í”Ü¢…EÖ'Ofjh¢pÔ(÷ˆˆü³gSwï6´qòäÒ×®%oÚô<6Ö¸ÎR©¨[·’QQYûöé#²ýIð-i?rl]S³"¸wÌÚ±þl…f[uíóD­b„ÂrðŠ}sÐi[·+–ÈÍQ^¿ú²È»~=îÒ¥Wîî¥Wþ…([ÖîÒ¥W¿þúçkúÿ§›³~ý£+Wb'N¬¢ßº –/vçNJ­ZvŽŽÉ:Ì›qûvf‡úEÕgÎŒü8_.õé£?k¤92#5U·x±E… ú½±Û·u½{«_½Ò $š4IÏŽ©VÓk0§Ïó"‚ «q-þéãq“¢RÓ«cûa§ Ëç¿No¼ç$¬8H@(‚ˆÍã _p”;c›ê]Ù;øoj•ónœBýpfÏž½gÏžŠ+š™™5jÔèÙ³g×®]«^½úëQKKË .ܹsÇËËËËËëîÝ»çÏŸ77ÿO6eü˜,)V©Üö¡±«xî—¡––‘<®JU3ÌBiHEd¡¼jAI ¢Wd”ÅÒ s3Ä·Hé½¢[d7@Þy$ȆHÁè’á32ÐSl {¶¨W/A­fÃí‘#†úX͚ɿùÆZ§ã‡ò®^}CÔKâ™:Õ¡D ijªæÛo ÊúÉd¢ùó}ärщÉjµA>YÉ’ݺy88˜ìØñÒûw1bDyA=z”rú´Ñ‚¥ ž6ã&Ö—™±'=1irÜzúvÍKòV‰»ÕF?Qß>èíc÷~+žË^äåçÌÉQÛÚÊ«V-¢uÏküË9XUªØÛÚÊ%Ñ?‘ç^ä½Û°á±µµ¬wo¿Ê• íî÷/_æ„…eK¥¢Ï>3¨µóÕ«IIJÉ”)žzoßν?O&6mr×›ìËÉÑùûg©ÕÔ©#ýôSýÄù°0ÝÂ…šZµ„‘#E³gëÙ.µZæ~ÉÃ'ØÛqú0ÞÅJ¾Œá‹U<¥}S£;:kqI”tgÙ8 5¾Ư÷HÌ`jÞÉ?Fr5”×ä5ûùo„®(¼jÖ¬Ù¡C‡’““U*ULLÌŽ;Ê”)ðLèíí}øðáÌÌÌÌÌÌÇ{yÚ‹é/ÂÇí`èPÇpÌ“jjòB9U†êùäÞçb*)QPWSd· Ñ¢¨ŒËS¯Ñ¯hr÷Õ[KDÏÈ{F^'L/ ø–œ2=]A·m $œT±SIM9C¬¸˜Ï·™Èæyð4y1Ý]èîÆÉD~Œ[o v½àH$@9{¦Öäú+f½-ìV‘Þ•9œ·ºêb[“‘Ç‚£Üg¿Ñšzå8ÀеbQ‚Às)ïÃÞ³L][Ä•©ZŽCˆKbÎjöß!Çѳ‡±³åð Zv1ÈÇZ´H¼l™èÒ%ÝøñÚ“' ÍŽg¶h‘å… Š1c2^¼Ð`‰ÇÊJ¼}{‰˜åŒqOžôÄÔ¯Ÿs÷%mÞü^d¯|ñEù¤¤ü%K‚RS+Œ15•|ñEõ'ORæÎ½¥ßúO‚“³ÅÔi”ïñ±€Pyí+Öã·j¾Ý#núR(,ó¨8àVÓºmá V^žêý VV–êäÉÈÜ\uùòÅéüË9X2™¸J‡G’¯\ùç‰5¼ïž=K[¶ì~n®záB£{Ý-^týzÒĉ¥|} ŠwΚõüáÃl=&µZ7zô«[·r.t)_^¿\Èĉ™û÷ç7n,Û´I¿H[RíÚi~ùEW¾¼ðí·úE&Ìà«5øùpê ‹—SOM§Ý0N\`@gÖÍ/Z»aÍO|³©”c+°/x¦9ôYΕ',êGëê¿W¨™´‡kaø®cùþcøø,{êêЦs×™JZT鄹â«"?‘0_|5h‚ ®ŽÀ³&øWyÙG $I(^‘ÓûPò’Ò kDP>@5 °m —lW¡ƒžæ¨uüEžŽ¸H¹—͹ DÈÕ°é%*¦bÆ–ø&è’û”šXÈ8ÁÍ·¿Æ³›#³+Goª–`ø'ëÎýÞïYXÜ+βóbµÛX°z&26æ`Á¡×hÑ€eÓi\‡±ó9w£ƒ×pseÛzJ•äÞFO&=£XËß0c†xöl±LÆàÁê3g õ±fͲ:Ô,9Y;n\FzºAѯ&M̶S(t³gÇ«Tú?H,zõrV«ukׯddD­ZÕ¦Y3ç¬,õÖ­†Êhý†AƒÊº¸˜Ý»—ô·±[;³ñ“¤•ú})«aýéÚÃ+Ä= i_©nþäåc[ªLazÍ•‹/òr ±îÞMÔju•*ÙK¥ÿoÈFãÆnÀÅ‹ÿ<ë}¬Zõ@­Ö~úii??ãôc£¢r÷í‹‹…Q£ ’i:}:Y§Ó¹ºÊ† ÓϾڽ;]£ÁÇG6a‚þ ÚáÃù{÷æ™™ «VY™™é våå1i’æùs]͚Šb‰¾\⊵l܆‰ ³§S³Z±f¹yÌZɳp*•aÍ\äEi7\¼Çö_)áÂòñ”÷)<ºð'Âã©áÇ´‚aè5g‰§SU¦¶ÑsªE@ý×¼þõøø=ébo Güha…G§ªÒÄç\¬C'œhH…8\»ê¸/Hꇷ_€FP IDATÍÏDuÁ®2æGHËD= Ä›Èù¡¢Dt;ÑöÒWJ®ŽSjZ˜2À’X5[311ßo9 czºÒËg9l^šn^$±ã9€³9 âjÎÒ€7yÃòÎÌmŽ)K/þšZÐ…n5Øy£‡ÑÕŽïÆSÙ‡± +øc^³¦SÁ‡A‹xR”{0ª/MëàâH×ÑÜ+^ÓÝ•‹'èІÈhÚö0(޵p¡¨GÁÁAèÜY}ö¬A>–XÌš5V Ê®]Söé“®1LCjÅ ×^½l‚ƒË–Ô™¤sg‡aÃ\ãã•_}e(?fîÜ Mš8?Ÿ•eÜφ©©äË/ëúøX~ñE€±]wþ?ðs·ª×©BlQiÐXi)¹uµÈÈå¢nS$ŠH}°KC'CHC; “0g„îb᪆•Ä´”sKLÀD ¶ J^©¸ŸMÊ[p+©±@uk*Øp;S1Yj8!£Ð”ÇÅ(UD*ÂDŠRMj.gBX™ ¬+á‰X™rüêýÞܪieF•Dt2Í Vù´®Ã‘+‡/ói«7,Èß thÆ­8;°m=ÛbZ ™ÁÊ’Níøå r9{öÓ»²R)¶mEééH$¬X¡­WOä奿(ÚÚZT¿¾ìÊ¥Lf%‘•*é¯ôññ‘%&ª­¬ÄGŽd d§—ëêî.ŠÊ73‡†æµooc×ÍÍ4**÷Þ½Ô}ŒÊ‹I$"ss™J¥ LêÓ§”Hd€êΟ„Æegœ°ÔèìÞ“!Uæb¹‡½2ÔA[ ì§| k9ÖÉÕúv@¸‹Z­•HD%K9yyê­[ƒüül>ÿ¼º™Y±w',,ÌÙÙ †¾ÿO¤¤(ŒÞ²%üÌ™ø={¢T*¯¯ÅCîR$ââr¤R‘©©´fMƒô™þKðî½ûá‡à;wK–´Þ¸±‰±WÕßÿ©X,´iã2xð{¹®÷ TjÇŒ õó3>½D•*z|¦K—²·lIõò’ÿðƒ‡­­žX׌™QQñþý¶r¹ž/àöíÚµkuNN·ߊëÖÕc|üã¦áçç=1èC–+¶pô<–æì_OÕ¢Z-W¡PâbÇáe…Z3rh=ŸRnt®[¸£óä½dæáãÈ÷C‹,X`øÎ¾`Á:jlNq%þó¿A,© ärß!‹ÐD®Ùâ–LðK®¹áË‹PnûàO|A¶È3É '.’8O¬ÂI½À‹8?"ý0¯Êa¢D÷”¼“¤÷Á4å.rÐá:ºUh,šŠ Ô°Lý- ÈgY:ZãÂÃ\ަs- ‘ÀÒØõ ¥‘À”òÜHdÉCR+«âakî¾YÅ š¨4 „¾‹ï¾ W«™8±t¹rÅk™¿E^žöĉdssñ‚¾z£¼[¶¤Z[‹K•’O›¦Gï4+K·tiv:² ,kÖÔ#]ðò¥nñbMýú”)¢!CôlŽŸ°d%•*0r0ó>ÿåSìû­–>hߤh›ïŽrë)R1ÓúáíZxtë"©W¶0õ*-‡•§xäTþÿ|uÍë_ÛÁÐ’›Â~gêæÅ?šeÂñŠ|’Nb çkP=´›Ü¬ŽŸÕ5žZ øb÷ˆ¸«DvÃóÙˆn ’DTd·B~å²Í` âÛèV u%円 $Í9›Ç¢T€É®¨ulNàV6"î<Êdv0¹€%5ÈPñK4 yÍJУ §_²àmtª¦“rñ+.ý¾®þõhàÇñŒÙY`½sûТ*Çn±`OáKѲ6ßNGüy\È͉Ó? —qö:Ó¾*V€(U’“07çÀQ:÷Õïc‰ÅìÜ)9RN«VšÈHƒ¾|_}Eóæ²'òûôI×àÒôèa=nœÃ±ccÆ$Á0w®wv¶fÍš¨À@ƒ(2:¹W­jsôè«íÛ#ô[ÿ{ç^EÕµá{NO¯¤‘„ÞkB¯Ò‹ ‚ EŠ€(ETªÔ H/J•¦" H¨Az ½…„HHHï½ç”™ï‡ ’s‚ïëûù\ù‘kf}öÞsfÏšµžý¬§Ñ·o•ŽÝŠüæ›[/úÙ¿A`ãpoKµbw¡yF~ W]'hvÙι¯nþç)#^{æ{w›ZµŸMðùŸÌËÕúùE¹»[öìYñµöÜ8BB²'O¾íë—–V¸o_«S§ÚOZ³wïò&Ô¸r¥ówß5ÊÍÕ<׸ñ±û÷ÿ“ü';;uëÖ.‰‰ù‡ÿóGCBÒ÷ì 7¤Õ«Û”¥žLqDEå-Z•7zt™*._šªíÕËñwLøLññºéÓýýóÖ­s×hLtküø¬C‡Šlm…É“MäsrèÕËpäˆT±¢°d‰‰œcD$Ýúrô$Í›ðÝ2c–ç®2t§/³z6 ,ÙæÄ5Æ/åJ;æÐ¶á³go<à“ œ bz?ª<í{û‘ƒt©Ëäb;Ï„äü@ú/Àÿ¾ƒeCGuYSË@®DŠ î…dC–=®ä’êŽ{EÑD4¢ªW¸ßÊÀE¢Úád…¢1šÜØÜ o?1«ˆ<ý)Š>B¦†“ˆ‘0Nˆb‰³œ@-§ ±W0ÚàÛD€Î4µ%Iûh;a³r´wát"kSºg¶ ;§£ ~œìšÖžNUùé¿Ûè7ÿlÌ8Ⱦ›OÊe,IÛº¬ócç9žÁèÞTr#=›I«I-i'`õJü¸ ;Öî`aé¤@­ìÙŽ› iéLI‘©ûY©ä›o䎎ÄÄH,&&š°’“cÖ¯·­XQ®ÓI+W–)‘7uª£üر__Ó k77õG¹I«W›ªh € ðé§ÕË•SŸ<™ü¢A,`æÌÆ‚ÀŽ÷bc_¸²á_AEGó}뛵湄ç^-õ‚r¯í´`M›?h}¿–Šò;w¯þ|kßÞ«W“ïÜIkÒÄDçõ >|˜7nÜŸ~ŠìÛ×ãüù޽{?[#·S'çS§Ú7oî —Ë>üðZ`à’n?|xÍðð¬]»þIYBƒAòñ¹výzr·nž½0ì»ï‰xÔ¬i:|•ž®Û¶-áê՜ѣM‹….]ššmxûmëŽMìîÛ¿¿h÷îB aùrk¥Ñè•$1k–$Õ®-¬\)—õ¯“?…Ä$:·gɼgU@‹ãf03–SÞ™1ï1~hÉ6!Y¹ K3¦ ¡ÇgϦç0u+…ZFw£×Ódûnâ{+ Ë<¢^ù:¾:°é…¤÷þ`½üï;X PS!•Ÿ=è­Â1†ßjÐSƒM~ éhŽU gZÒÒëK\jGìÏè…KC\ 1D> Iî%¶õ0;@fÚϰtD¾š\Wø9°C%5ˆ¬Òb&0Ç;sÒ&ºÒËŽÐB®ä"À¢ZT5gV(Ùz/;°(»™5íéR‘ä|>>þèWê`Έ&¸Û0î72§<X3„òv|¸ÄbOjnŒéNeg>\Íݘg'dãtwå|ýKÉ6®ÇšÙ´òfÆr–l26·5ªqê å]X»™wßGg*/gnÎÁƒŠd'OŠÝ»ë3Mi=Ô«WÏÕU¶u«mn.S¦d;fú¥ÌÕU¹j•«››b̘¸ÌLÓ2Ó¦UèÐÁ~ûö„³gËT3®o_÷Ž}}c·n}á V³fΓ&yV­ |ÑÏþEŒïT¹MuG`λZŽïó>–…¯Íä›fªšI™ º“ëË—·©]çÙÍNqööª1cê*&V×$4‘ۮݩë×Óß¿Ò?4ss+yS˜‡‡ù™3:tp ÎêÚõÌK”ë~UèÑ£bûöå‹(kaòÿ8Z·n½zuàž=áo½Ué믛›þÀÓˆŒÌ[±"ÔÛÛnΜºe±_¸0*>^;vlù7Þ0QëÆß?oåʔ֭-V®4¡’/Ž™éæ&[»Ö¦F ì¤Õ« Û¶ºtöï—[usóøh÷ÃÔß~DU:,<šî# ¤g¾[²Mr='sé¼ÅüÑÏž%&oáâ=†´gå‡OŠIgýÜíX;„ÊÅB~sŽñ‡*ð'­ŒâYüËÁz=øÇ8XÑÑÑ}ûöµ¶¶¶¶¶îÛ·oLÌsŽÃsùc9»%C¨1ˆfsÏ–r: ’qÆEKaaN80ä“/RàŽƒ· ¯…S8i~Üo‡sú“$Iˆ•шH?‘Ú ³"¤ho €~HY0HAžÄz-C-ÑÃùBÎà  Ž9WrYÐÞW iZVDT·¡i9 3Ç¢Æ{#8î{Ž jˆ»-I¹|yôɇ4§š3i¹,:òÔØ¶¡yMò‹¸„ü§èߌÇÞšËwX¸½ä©ëÔŠ‡"“1k»›äÕøz.Ž<Êã1©\emÍÚµòªU33ÞyG_P^J»vª^½Ô¢ÈàÁ™qq¦}¦!Cì=ß>WgÉH)EDÙÒ¶4PèÉ)Gm‘SÚùäg’Yê±$'ñ6–EQk<òÕÈrÐ÷À9ŒÂ´oa+ ˆðÃpÌ2!² ¯LÑ@6tT"nëhI .å’ ¥‰%åUT2'²€4í±TàíÀÅâòðrÀÃG3Ò 9ÉûuQÊšyp-†d¼Êãi ´«ID W"°· ^±§^§†œ D&—NǧU¬ÌiÝ€±œº‰\F³:%Ì^Ýê8Ú¢7°ùW<\©÷l•'p*G׎øG£áôyÞêVòjò'ÌÍyë-Ùúõ¢\ÎÑ£Rÿþ2ãö@›6ª7ôÖÖÂÞ½…C†˜à Íš™_¿ž_P V©¢öð0ÁlmÔÈ*,¬ðáÃ|UÍš¦+ƒÖ¬i}íZºB!©qccBPÏÃÖV›«öï>¼–É Ð+„ƒ¥J¥N.@,ÚN.Üô@Ó\ž™Jᡪ¡^¦ª¬½6_0³¶iÜ1!>;9é©ð«‹zÐ{uÕš—Þ³ô’EiР˱±ù-Z8þúk+++ÓP(„~ý<ΟOqvVŸ8‘Ü£‡›FóxòT¨`uçNzhhæÀÕÌÌþîy{ Œ{ÖÚZõÆnS§z›¶~äþòK´««fÉ’†¦K;Ožü@­–uîl?ztyã–Û·gDFjÝÜ”ß}W^©4æ mÞœäHQa¡ôË/öVVÆ,##¥·ß6Ô¯/ôïošØ>á ®ÜÀÞŽÝÛñ(ý#+‡ç¢VQΞC›1+i$‰©k‰LÄÎ ¿Ø>':z<€/wPÑ™ýiô´ºÕb?.>ÀÍ–-#±xÜxŽvãiK¿ú\Øù‚2 Êjüb8ñ¯LÃ?›6mjÞ¼ùŒ3ììììììf̘ѴiÓÍ›7ÿ”Š€–›* gsÚÏ n&pÄ:É=àTjÆq?ÿjT"*€€Ê8&’yŸØdÒËaEæï„uÁ%ÌýÄT@¥B¸GÁ>Òav]ú( =‘ù#­À ¨¸``Y¹£­ÉIÐqµG­- .`V,À”Ss0‰a®ætv#$‹Eò7Ãë¡5”Ê7W¨¶3]j›Å·Ð=å¸ÛÑ«!÷÷ÑÅ ,4lþµ‚¯eC± ×hV‡á=ˆJ`âJ–B•ùx(m›šÁûS8pÒØT7¨ËîíܼͶ|ø)& éìÛ' “'L(5(õ'‰G&cÛ6›ìl©°Pš3Çt¢vmM×®VÇŽåŽg0˜àXXÈßxÃ& wúôð²T€–É„#*]¹’6o^HAAÙÄæ‹aÒ¤† ù·n¥.^|Ó´õ+ŤnÕZVu…J«Ä¦ƒ2樥˜mÍû±'!h,–ò3»v6ˆ%“qîŒi­Š   “6/„™3ƒŽˆÈ[¾¼aY¼«?`n.?z´mNŽþСøáïüG´jÕ²ÓhäiëÖ•^-á¿7ïßaa¡üæ›–¦­ŸÃÌ™A~~ ÞÞöÕ«›–n Í?q"ýòåìéÓMÔåÍÈ0L™’àç—óé§ÆuÛãâ S¦äë§O·tu5f™›Ë[oâã%''áË/M< —­eÝ÷DF±õ[ª—®çY¤¥÷~=‚\ÎáÍX–¢Ì:ý;Výн?ÏÃù¹×´ XL|:ýZÒ­ÑS§nD2Ç—» ,èK¹b<ï7b±Ö0·³ñq”Ýëùû†ƒuðàÁaÆ?2lذýû÷—å³r£ËY³›ÀR¸ÓÇðåXD‰ÕÛ8{µd›?ÐÄ›}?aaNÈ}ÆM2ícÕ©#ì߯Ðh–,)Ùº8‰ÇÑQ¶fu@€îÒ%mYÈXÓ§;U¨ R*…ÓMôQùjÕÌml;v”{ýúyx{Û¹ºj¶m{a&–J%_·î F~þ|Bhh™ˆ_¯ 2Aø~¤·F)vÉß8)º MŸa.–@¿aÞ}ŸÍd}~®îèjg«ºõŸeb]ôÌÎ2±wÔÓÓóUõر#Òß?U©”ýúkKÓ77WìÜÙÂÎN•PèãóŸqq¦LñrpÐøû'üW× Ëܽû$1dHugç›gàÚµô„„kkå”)5Ëb¿fM¬™™lÊ*UL$òV®LuqQ´kgÙ·¯1ž–(2}zŽÐ·¯fà@cmJ& êÔ¶m“'×oØÊ¡£4ñâ—m´,½Úµ(2f&éY¸9±a>v%›­ßÇ•;(ä|>ˆºÏUhÌ)`Á¯¨•¼Ó’/û?u*«€ǰÑ0¡3=ê?9~-†ËÑèù¢=f&Bö%ÁðzþþßãŸá`7hðT–«~ýú!!eÒlIËg§-­ ‰HáWºçÍîjtJ'ü>GêÓ.™è[œhF³D/p¡%µ³È=O òJØxŽÈwð¼GÎ.¢Ú`ݳDtÇÉ„Ùôß‘—Ž8ùM¤¯‘ô0WÍ «µÀ綤XŸÍÍ"ìLrå|sbêX1¤<§R™yÀRIÿJø'1ù:DFZ•§uyü2áqåA‚¯»s3Ž™GŸÈb‡#Iüt‰oO=5üAm™Ô›“·°˜ì碳F2¦ÙyôŸAl)ErLbÖÇHðæ\¸alª[7Ço/÷îsù¿4¦òðÚ´vï–_º$M›føñGÓ|¦6mTK–XŸ9£2$36ÖÄíkn.[¿¾üÕ«ùÓ§'ÆÆšx™R*…e˪^½šýÅáe©-,ZT?7×°{wÌ‹V'Ú¶uûè£:AAi_}u]ÿÖˆJMW«o=J÷NQŒz(*ßϘn-–@¾Ö´Ým÷ežß)7½K·êϱôzñìi•ll^¬*°ܼ™±uëÃ[·2¶nmÚ®ÝËH¢WªdáëÛêæÍ Ÿà}ûÊ´iôÕ¢cG÷ºu’“ó·o¿gÚú?N|ï½ã'NÄŽU{Р¾¦M»}î\ÊĉÕË—7]‘æÆœo¿Š*?Þ„ˆSHHáÂ…É÷ïQC” IDAT­Yc‚§µeK¾¿¿V’X·ÎÄÏoéRñûïÅ´4É×Wne4Öväã§pöã?â-£¥”¿ú–m¿‘˜ÂÑ­T(%áéw‰O–qî6;fÓ¹é³g%‰÷W°ííë±}"Åo;Ibä~ºL,,V«=_ÇÐ]œ gFš½Ê—šñWñÏp°222ì퟊¢:88¤§›ŽLf¼ ‚Ä- ¼E´JrÕ8’b… «âì°5Ç:‹4'œ (H$Ö›ª\#´3UëľA9WÌ,Q„Ùë»%³ŠN¨µH{(èP!é b%ƒ”$Šü¢£œœÑÖH°1`œ ]m‰/âL6ÀUÑÈ8žBPÀ Êx;XÀ÷¡ú?§V*NEsò±ŒN늌jJ‘ž¯O>‰W9Y±z0-«òý9BžΜ3¯Êħ3oW NÏ7£Vp?šéëÈ/%$1k<åÉ/`êb>Ú´À÷gbذ•Fåaþ@Ïž²+ä’Äœ9âéÓ¦]O>±èÖM’"úøäèM96ݺY½óŽMv¶aÅ ÓE ßz˱MÛ´4ÝæÍ ¦û ;»8;«ÏŸOٲ充Ý9sšØÙ©÷î ß²¥Lõ_!¦÷¨Ñ¨¢- Cþ¾b²Ö?<}𽡵Õ0U“ªIÙW•ĺt!*ËTë• 7W?gÎ3g’Gªƒ±|z¬Û.p4[sf¿ºX†|ͤQÏ…©íŒuï_üýøg8Xm¼×ÄFébÒ2h_zJÁñ›“WL¼¤-Ò¥n­IO "8æ’PI ät+Z©Pýžý{;Úay’€ü˽p)B %µGã}CÖ.¢ß®1–§É¾NÞ8,‘¯Ôg¦feÎ@f ýýý)Q |UÈÙ ¦ØÒDÍÆlüÓr£C‚zÙ’¬cJçýý=͘Y‘Ï®fgeeÉV5ÃÝ‚iW 莖·dtù ±Ç)2••´¤=jñã-&þðäé^QÔ²rуdÞÛ@‘þ I£bj§ë­ë°l‹ö|ò‰ìƒbsr¤Ñ£ !!RPPП…fƒ‚‚ŠÊßß_&ã‡l{÷Öܹ£4)¼ÄÆ‹·°f[‹º³góüürŒôáSË–UkÔÈêСÔS§n/vûLþüÿË/«89)fϾ“šZd¤%¶`o¯Y¶¬•³³füø³÷ïg…‘>ãëõ♓^®/4ŠáÃ/>?xp…… ëÿÅy3¦JåÊEÑÑùýú]ÌÎÖýÅ™|Ñ>tíê9rd­[·RÆßÿr-üõ>iáСȵkƒZ·vþê«*î,{ ¢(Mz[©”Íž]-&æ^‰fÅ[8~<}Û¶„¶mmÿ`_ÅâÅWîÜ)èØÑrÞ<#}8ÞÔ¨ÌÈHøq­[™‡ððì ùù,X ³·¿X¢Ù}ˆO¤ß0,-Ô7nδ'-<߇M¿0q.åòÆ¥}óFáïï•HÏÉ\¹C‡ú)ß-a~7˜¸‰Ê.ìœL5·§Zˆfô6ÑÕ–m£¨äø¤£f?}ÓECüÕ o¼4Jáð¢(|=ÿï!Hÿ õºLÁÙÙ900°xáØÄÄD//¯„cÁ‰;2¡ž^“A¬HºS"Xa ³ßÞä+òÝ1f È;ñõ/,•1{=›(†0ä0·³ÈkFdd¿؈òÒì=.h·Ðì0¹ëIj‡õ**ö õº%Øôü'†$äêäpOd›齃”ÆòLz[°Ï…‘ªÄkñ­ÁÛv$1äA9üêM€Þ'Ù͘š¬k ñÚNp*‹Ú2íqúÿÈ=¦A‚Ãéð8º—[„×$óÅ›|Ýï©Ùð»AOc_Ñ¡>Ï 4š¢Õ1u³F–<ŸZ}?&'—¨xÎýŒÇsõŠã·ƒ Aµ*Œû€ñ³$‰±c ŠffÂåË GÇGdz²²JL3?^ÔµkºBÁÅ‹Ž&Ë_|óMÊ´i 5j¨oß®¦V›x£80ø—_’F.¿~}™^Áß|óœŸ_¤I5—.m`Úú9ŒqrÛ¶{-[ºž;×Gþ\=æ×ŠÙûB¾:ðè)ø‘Áo©~s¡`ñ³ÝœXe uhËiò8¤¯à.¯õô.K…B6mFÛ’ƒ þþþ] kÍš°O?½ie¥¸~½KYHÓ&QP`hÙòD@@æ Až?ýÔâ%F—.%¶jµW£Q„„ ªXÑ´ç߆²š4Ù™Y´dI«É“¾Äµûé§HŸà*U,}}Û˜¼Ñ$‰&M®Ý¸‘³xq•©SE%‹ŠÄ:uBÃõ[¶xŒQ § €M›ò>ú(ÛÉI\ÎѱÔˆ"ƒ’“%QääI…¢ôÍyù´ïɵ›´oÃѽÆ$¯üÎòÖG l˜_ª\{VmÇFÇÆYþl-g 4Ž‘«¸Ãç}˜ñ4õ*¯ˆ÷6p €;°vÈ“ã¹E4ZEh*>]˜ÝéÑÁ-Öêx² ‚Àô×ã,úg8¯ÿ ™??¿jÕªU©ò„ xñâÅÐÐÐ÷ß7Z¾œlŸ5³æjåŒ1k ÄŒþ ÉRSOЩñT #·ÀC­5 )Ì £&5¢I‰!¥/Í’žL^SÊ ÈH£h åƒ)ˆCÛ+”iˆ·Ñ Æ<"n Af/ | ¢šÛEd¨£¢’K9¹Nfñ3– b ÉÒs"…žÐРt®¦ÒÁ3ä5ˆËÅ?žî•°ÓTsäV¹…c°×£T½JAÓJ„Äsæ>^¨TL€®š2™Àº#ôm…ÝÓò464¯KDÜ\­6ölÚÔüòå‚¢")+KlÛÖ„ Cýú–·oçÞ¸‘Ó­›ƒ££i²h:6!!Ù—.¥öéãnkûÂrAíÛ»Ÿ;Ÿ•¥Õj -Z<›ƒ{­hUÍaÿ­øäì"à†¬š;©Äк…çãÕ2ÏúÎùz¥‡›B+ªíl„â ¦(JƒX³vɤ¨¿Nr¿v-}É’ûžž ÖoÛÖD•2B©”uêäréRÚýûÙææòÚø‹ðð°LJ*Éÿ„^†äô:›«ëÒå@… –-Z¸,[ÖZ^øÚ†½âæf6lX%oocnÐøå—¤¼ªUÍW¬¨n\paéÒ”°0­··Ù¢E.FjÆÆ† ÉjØP9ož‰šƒ ˆ‡K2{ö(lK§Ë‹"G’†»~ÆIëÌú}L³ŒèˤJ¶Ñêøl9éÙ”wäà²j9§çÐafjÚÕç›á<ã÷´{‰t©ÇšÁ(ŠÉŒ|v€ä\ê8³î'bîSÎpu‡×¹5ËöÓöññ¡õÜ2™¾(üÿ•iø' gÏž;vì(~dÇŽ½zõ2þ)ª€Ä] z‚ 9g{.72ØïD“,Bâ8èFÃdî…r´uˆÄ¿5¢‰¾ÍíÊ”K!+‚Ä’]±J ç0÷ºáLÖa”HQGQ´ƒ”!Ë…ß),é8Ò¤*âD®øM‡«œF.1/`D9¢Š¸–Ç®T€‰•ÏÃ?ƒÝñ5mðr &ñ—I6tðÄÉœ»©Œ;ñd€_w',£¡l.¶¿¯yºÖÅ΂ɿ’ðôþ°ШPÊ™¸‰Âçjà¾áÅè>$¤ñÅ:~-E”Á\þudçI·‘¤å±ôïèadd2y&?ýjüZ¡Ñ°s§"6iüxÓûO¾úÊ2-M Õþy¶qK¥R˜9Ó)0°`Á‚䈥«W7¯SÇ"*ªð‹/L0¸ÿ@ƶ*˜GEå/[jÚú9ØØ¨¾úª™µµzÚ´KgÎü­Ò£*…lû¨ÆÊÇ«ò$ÅG7…ªJ©p@ÖW5Š.?o¯ÖÈ«TT¸º=t¹z9:3óµ”1ÎÎÖ xéÒ¥ÔV­Þ}÷U–®ZÕrÞ¼º..š?¾yþ¼i~Þ«ÅÌ™ƒ‚ÒnÞL=t(òoþê!ŠÒ”)‚‚ÒRR 7nlÿr!½+BCB²ÓÓµï½gÚ3ÓjÅ™3#NžÌ4ÈÉÌÌØ3(1Q¿paJ@@Á§Ÿ:ñŽU©’¼bEy¿~ÆHZgÎHs碢¤ äåªn-ZÁ‰³ÄÅóó÷8:”jxÞcÈÎ¥amæ|Z²(2ü+¾?ˆ£ ¿,Àö9íU½þ‹ ‹G«gå¨g½«gÙ~ðd¦wGSÌu<ʆ+„$³ü-T½®ÓѬ½ àþBÑÞw¾ü3"XuëÖ1cF^^^ݺu —/_~èСM›6©Œmðññ™=·ª€(ÑVB+G-b+ÃBƒk¹*ll©šN¢[g*§jŽ¥5¶zäJ”‚3®ÙäëÐw¦Þe¢•ÈßÀóù–ÈåȺâø;YæÈ[a©E¸BQRo4ùéÐ ™Zà®H–D_%ÔlÏÁFN-X+¸•O‘ÈÛö¨eX)È&EG_äÍØŽ£K%ulÚ¸³=; f ê:X¨¨`ˉ0Ò hW›Ç Këê 3ÀXúx?¹]îØs|-·Âyë¹ÍƵ+aeÎù¢¨á‰gI!š¾Ý8|;~ñ£w'ÌJ_Ð5ÄΖ“gÉÌÂÚŠšÕ],++ÞxCøñGÑÜœøxÚ´1¶ž*B›6ªŸ.47ÇÂBV»¶1U¤ TaaEEERD„öí·Mäe7¶Þ¾=ÁÊJQ¹²¦BÓ;¡5² ÌJJ*lÐÀÖÕÕ´ý3¨TÉ:""ëîÝŒ»w3ºtñ´²z‰=Ö/ W[Mn‘þBX G~Bæ5@»}\4ˆ9ÙÏ dˆ¢¤Ó‰µê<[ú¯cܸ›™™Z77³Ÿ~jñÊó§ÕªYEFæ?xsûvfnŸø§••ÊÍÍâÌ™ø{÷2ºuó´´üû®x‰˜2åR@@Jݺ[·v,_Þ´ÐîóHJ*\¾<43S»ys“*ULK·oØ÷ða¡­­rݺF‚RÀ´i 99bëÖ_~ilëèO?\¾¬»{W¿oŸ½¥e© ¦¤0a‚˜“#Mœ(ûðCcŽÝ÷?à{¥‚íëiô\õå?—Ĩ/ÉÎ¥G{6.xÖ1úS×r?šŒ¶Ï¦VÅ fýȃxô"'çãðôúÍÒßIÉaý0:Ö~rÄ”ÁXšÑc7ï—<¡åì9¾œÎ]¡Ç(ròŒÍþ§cøÆ‡ûôÁÑÆ,F__ù¹sÒÌ™__Ñxµà:u‹[8¡=:+!Á„ÊÃòån66òóçs÷î5Q÷×ÅE5i’çٳ˗ǖEC¡B‹æÍΜIþüó“Æ%bÞ¼f-[ºœ>7hÐïzý —ßù+˜×§víÇA©XÁq„âs½ —!öÌ^Ó,¯L:sÀµ+Ñéi%–þ•bÏß~¶eKDDDî/¿´T©^Ë25gN ìΞM4è’I5ÚW‹¡Ckx{;œ>7t艿Y§ã,[°lÙ­«W“§OoT£Æ“„Ù ]»Ù³ï?žØ¡ƒsÇŽ¦ýìôtݬY/\Èú曪Æýfÿ¼ßÏ +Z¾Ü˜4CR’øÙgÙgÏjW­²vq1F½úàCn®Ô¬™lÎcjþ§Ï3ösΜçËÉ´+‡–™ÍÈéDDÓ´>Û—”Z¾bý>–îäò,Á»$b窬<€BÁþ™¸;>u*#Ÿœ¹Ç˜ö iQl,Cw±;Þµù¼í“ã3Îs$‚JÿEÔ¾ÿïøg8X@ÅŠ÷íÛ—½oß¾ ʺ[[Æ “qUM+@A† WYVØ(°È'Î…J ̲ˆsÅMƒeifŽ8jÑ&Ó„ê2„ë<èNU d/ìZQÎÕeR»b£CºHˆ#±À—ø™ÛÕÐMA¬ÈN-|f‹µŒÛZ®¢èk^bW…"r¯jb&çLÚ£ ÐÃªÐØ‘ÔB6?Î> «KËò¤²º˜Õ7=h[™=l/vÐÕ–MöøsýéÍau<Ù>™À?ΔTtxöHlÈÎcÆz–°yÀÍ™ý©äÎå&Î'ßhŽè³± èƒVËœ…\2ªV tî,[¸P.Š,Z$ÚØ˜(X:j”ù›oª32Äyó²“)œC‡Ú†…i7oNËÏ7áÄ|ú©{ÏžŽþþûö•©:ï”)5Õwîdùù•IâáÈåÂúõíÜÜ,®_OY¼Ø¨ÔØ«†Z!û~¤·üqᬬÞ\Ù`@@ê’»¹cN)µ*Ÿ†Á >Y‚RíK3܃ƒ³ŽMtqѬ]Û¨,‘—ƒR)Û¸±‰³³æÊ•´ï¾+Ei÷õ@&¾ý¶““Ù•+Ik×¾b½û²c×®°5ke2aûöŽmÚ`Þbt:¦Mà½~¥š1eÇý©äÁ–ŨKI¥ì=Íò´ªÏ–™¼áU‚Áï7Y{ˆ-c»ÓäiJž(1kn1¸9óûJb¹R)Š¢‹ä”CÙëSAÛ M{gr¡ B¹pÁÀ=^r¼¨ŽäóPÏ+ê˜s·€ƒØ+haE Kæós¾¾ÒéÓÒÀ2³Ò—MA Cõõëº={ŠììdÍ›K{y™…†j}}³år¡}{cm¥R&—sð`ê¹s™ãÆ•7™ŸÒhäNNšC‡â.\H3¦ÊKä³,-•-Z¸Ü¸‘òã¡–ÞÞ¯†Ð]¸Û›¥çé®D¾~}ÇÊ•ÿî°ÃÞ½á“'_°µUÏ™Ódøð¶Ž–’Dÿþ/\H6­fïÞ¦ë?|X0eJ¸¹¹|Û¶ZÎÎÆîÖï¿O_´(¥sg«%K\°à)š??·F Å?ØÚØ”/¸rE0ÀP®œ°}»¢AƒR[ËÉå­HÐç-–|UjÊO2‰|éÑŽ-‹q)åf=@ïiˆãûñAI„áûqt›C^!_ á£çôKçâ?ÚÕdÍ`Š-W·è» ¶ô§áãÐ^¡žn{JeAzWÃÇçkzÏ}-¬kÿ¦ÿ‡¡? P0[ •@s%q2Ì Ä[à b6gì©/¡OäDy‰"ñ¯L=)œ›•©(GžM¶Cm<ì°ºÂýê”»GêQBÛQÎY8¹7Èè„ ð©VÈÚ¢–`-y®Ðá4ÒJD5ôV,(aM 5t\(@€åÆ‘mWA`õC"òš—ÃÓ‚ëi|qýјê:ÒÀ‰\c£{ˆéU›ÎÕÉÓòÑ Å¢3“»â`É™û|¶óÙ¹™Ú…œÄtú/&빟JɲOiPs Ãæ‘WJ€ª’;Ë¿ >…'?Cé¬FAàëÙô=úo*Ð3ož¼cG™Nǘ1ãUw\]e&Xû÷ݽkL{T.>ùÄQX²$9<ÜÛýÝw<<Ì"# 7l(%ˆ÷4öts3 ÍY¿¾LìøçѲ¥Ëرu€±cÏž=[¦/}Uøº_ªNO–ðqŠñ·…Jü߸àÐÛÙ+d’ ªÁ :ñj‚@3gݾY±¢ÅäÉeªµòÑ¡ƒS÷4t蕤$Ó%˜^!:urÿä“zZ­8`Àï!!e’M~Uðõ8ðXLLî€ÕÆŒ©kú¥`×®èóçSlmUãÆ•iG¤ÏȈ‚ÊÕ«gì ';[œ93>ÜÎ >;[3&«°±c-<=K}½ËÈ`Ø0ƒNGÿþBçÎ¥zW¢È˜‰Ü¼M~>_Ï2V±~ÅöÅÖšESKU« Š ÏtŠt¼×•ñ%É“¦ç2};…Z:{1©Ï³gOßÅg?2/{âYŒb_ cÆQ´zÕ¦k±·ù—¸ŸN%Æ”Î3†×AÀú[Éÿ¥øŸŽ` ö>>‹çN—åHI¸ —å|,’!«â dˆJ<åXh°a¯À\Z…½ˆ^*ç“EVuªÇ“Nâš?$3•¼ê8:aQ€!‚œ‘xÞ§0 ƒ ª®XÜC¯/”ÍßEºŒÔY™pÃ@ŒDe $ˆ7p¶÷­¨ªáA!…"©z:Øàª!C‡.e0À  i9Ò¹šŠ—•­Z–çZ")ùäéhóø¥±}®Ä™Ž-§Oå2ÚÕàfW#0WѤR±¹x«)—îQ ÅïƒÚ>» ¨•ôjÃÞÓħrä":— r°£SK®p+„à0ÞîTêkŸLF÷Î8‚\ÎÖŸÔÏ;^¡ Má×_³ÂÂT99´kgìM fM…VKh¨ÁϯhØ0s#+£‡‡2-Í Š\¼˜?p ±Šf‚ xzª´‡¥Žá¦Ñ˜x‘Ë…Š-²³õ/¦¾óŽ»¹ù˦½¼Êd2aåÊÛ={VtrzaÊüËA)—Õ÷°Þqñ‘*¬ùIYÆsfhg}¤³þá}usQ0Æ\IˆÏnà]ÞÂâIX"++«4¡Ò°{wÌܹwš6µß´©iÅŠS<©m[§ÀÀLNôõ2¤âß)HÖ¬™s@@š¹¹|ÕªÀwÞ©bk«þ¾ô‡îr¢M·þý«Î›÷\­ l×.'Gß·ï…† í¦N­Ù¬YéíãÖ­ŸÈ¦M­çÍ«bkkì™=;11Qß¶­åܹÎFv5Nš””$y{+.´6böÉ'…‚êÕe7KÎþš½û©S“ÝÛq.R¿ùW¦C—Ö¬œE³RÄïb“ùp!.4­ÍÆ/xžÇ¯ÓÓë+bSy£.[>{V+2•/öânÇÈ6 :Uû±/·ãy³&«ÞFùx,W˜xŠ&®¬íDkàÅ#XËjüb¸þoë‚-€øPÐÞ‚‰;J4Z 8dEƒíDR6ŸïâÚÓ5]¬ÍÙ6‘Ä üC˜·«„ùsuäG²ò8yá_•Z¿¹~MVÏ&+‡«L]l삘›±gyùܹKï÷È/ýžžÂŠv‰‰Ì›'îÙcâmhêT‹øxÃùóÚ%Kr[Θádf&»z5oß>l÷=˜˜¢yóÊTѹgO7ƒAº~=}öì—/'üõ×-ÜÜ,êÖµó̓˜èá+D»šåF·{â€G N#” ׇEWfú(%cÚÌ¢(>ñà5mÄþyDFæmÚ.IRÿþž™ÖRzUP(„ï¾k””TG=Ó IDATxãFƪUaÛ÷2™°ys{ƒAŠ‹ËëÕëP\œÑ #¢(͘qyìØ³5jضkW~ñâ¥Y–åÚÍŸ•——§2¤LŒØ©SÓ’´^^V+sÝ<ÐîØ‘yçNá´i匸MW¯ê֯Ͽ{W7gŽ•‘wª;Äï¿/^”V¬Ùt~ø —“šÎüYT®Xª™ßYÆÎ"¿¾Ýɵ?ìû‰<ÕŸ$>XÍé@ÒsøfOOF^}Öòû*•ãËžOÚȦ+a‚±Ú&¯Ý;YÛ·Gææê~ú©…»»éïߟrñb¶Á ýüs]ãñà â$‰÷ß·<¸T'[«•ƌɖË9Ò|ÈR½‘‘ÒÌ™’V+-]*ïØ±Ô;ý~¿¤r&ŒePéÄö›Á|¾­ŽÉ2aDÉ6:=ýg ŠXšsp)V%MÌr_nG’šÍ‰ùTN‹kÜä¡Q²{fÅ<Âð4¦A+²øMz£ÌÍ8Ol.Í\YÕáÑš_``Á¼Œ`Õ{=¬€#XÿóГé4Ò£º5´\Ïc½-=󏑯ÏÎtÈ$ Žýž´L&$ŒãµhσN5¦q 1¹Ø„ê™ä^ã~Yuq&ù(a}ð%ç")ùèÚau™œM$WDÞ ÕŠÖ‘W¡-Â)¤åˆè¦ä¸žYEˆð± é"{òØ—°À›y¬NàVÀ„ÊT±`K4[bT2Ö4'OÏÖ<Ìy4¬µ°R³)•ןŒuQw2އñ…ßSs°| ÎVø‡2xãS$- yMfàT ŸoæÈužGýªì[DL2_ogîæR§¹cK¶-Æÿ:‹Ö³xƒ± RÞ•ß÷q3€ß2~Š1K`Ò$Ù¨Q²‹ž} 99Æ,»tQjvîœvܸLÑZºcÆ88;+ŽÏ7/Éø·7h`Ù°¡åÉ“S§–‰`T«–õûïW:{6ùÓOo¾t‰µZîëûfÕª6AAi:ìÿÛâXjÅÆá^ÅcËe}’„'‰T7]è°Œ/¬ÄRÙB¢(mÙp-$8éÌÉð#‡^¬ˆõœ9wŽOO×-_^Òn«×æÍF®êïŸúÁWÃÂŒþÔ^5lmÕû÷¿©Pdµk·ïĉ˜Wþ—/'öî}äðáÈààôS§Þ1â%Yí@¥1c®?ž8th¥&MLë…ëtÒôéágÎdLŸ^Ñxrpÿþì~ȼw¯è“O˜-[–——' ³g—Êå26Ìàï/vê$>¼Ô']f½qå:5jðé˜R¿1"†ÞcP*è߃9Ÿ”l#IÌXße¢“8º»’¤>wcÖääóë4TzöìºÓ|ž[Qø~‚m1çLk`Êa.FÑ­£‹EÎND±ä*b™Þ Íãy}àÀ‹…ÿÅkÁÿK5dèýe¼ æ •ÔÁµkéöT—¡È#¦<õe(²‰ó¤º³\2¬Q•£œC-©­@~“Ý©< ÍyoÜ3О é=-Ç ½GÁx,¸†6 q*2ÜAJ†Q*¾‰è%º”håÌﱈ¡¡5mªÙ‘§c÷}‚ÓZçÑNz7kìÌLàL8}êbþøiemFÓJ¼Í¾›4¯LÕ§ïÿ¶uÈÌ'&•í'é×Ëç²Rµ*RÍC8xžÚ©õܻרWƒ nüîÏÎÔ¨DÝÒwÙ{”§^%ü!övÔ)iÇXXX˜³³³RIÇŽÂéÓ’¯¯hg'4o^ê’ªR îî²~(8p °W/‹K© «››Ò``Ϟ̨(í AÆè>VVrkkÅîÝÉ7oæ~ø¡›ÉJõÜÝÝ<44çüù”~ý<5cÄp#P©äýúU Nÿé§°;C½¼«U3ÆÊÿë¸|9±ÓØãZ·§ü›Ô§ä^à 'þ¶FÊ­UtùºqÌD-òa†No¨VÝ„äDllþ´i·cbò-jзï«,‰ó¢ºww½{7çâÅÔää®]_šÒò2P(dýúUµ´T;}øpÔ‘#QmÚ¸•+÷—6:\¸0fÌ™­[ïé?ý´þÒ¥­ËÔ ¿¿iåSRŠzö’lp5㣚“®’ûXŽ`Z3Ì8Åöb¼ê±-°·àj Ÿ x¢ê|ÜæUóQiOM• °pE:îÆ2|ù%mWÔ…/ß§fEÍáÌÍRg}x_>ù?öÎ3.ª«‰ÃÏÝJïUi*VìŠØ»±ÅØcì±5¶Ø{1ÑØ¢ÆS,1&Š-±+6ì ¢  ((¥.ÛîûAI,»HS^ÃóÛxÏìîݳî½sæÌü§/ý&r¤H9èNí˜3•ˆÛ A¨1}ÍjÕžJ–//̘!vî/_.jï­Ie÷îæZ-£GgéŠm`ìX§-¬BCÕÁÁ¯èf8xp©R¥”×®eoÛf2ró,={z‰¢xñbúÂ…·^mm++ùŠú÷¯”“£íÕë— þÔ«͉ íÚ«Ý^Ì3S ›¢Û)<Ÿ°j£Oé›1M)¾ºáãÄ좕ÊõzqĈËÇŽ%5nì2|¸ï8ó׋µµlÑ¢j‰ðÙgQ[·Þÿ›ß]˜8±ÆŽmË”±¹r%eèÐóç_JJ*²Äׯ§Œs¦aÃ=‡Ç¿óNÙo¿m½hQ RY\w¿¡ÑiÓÂÓÓ5AAN;Ù̯… ïgfê4°mݺ¨JÃÄDígŸ¥cÇ:Éd&]¢¯¿Î;sFãâ"?Þd‘©ZÍðázŽwß‚‚L¾Ô©³ŒŸŽƒ=s§áeZÃkÉ\‹ÄÃåÓ°6ñž?Ÿçƒå³ÑÒXcûÔ,&nFg m-¦õxq4OCÿM$gѬ“Ú=7ô(‹÷@HÝgVûïr=™*ŽÌjÀ¯e¯ŸE–ÁQsÓý5ÿß_¢_ƒß }¹”Žu ":‘‹Qtoh$^ÏØDøl;­êRÊDl¢am 4°ù{êùãeú:\«:IÉ«7ðNGLÇ’*W !*JܼYìß¿(õÑÆ×®iïÜш›Üo27—äç<ÐîÙ£:Ô±ˆkº\.”.m–ž®‹ŠÊïØÑI©|ŲD¨[×ñöí¬}ûZ´p-N °)¤R¡sç²ææÒå˯‡…¥µjåinþ:ç‰"Ÿ~£oߣ͛{=|ÿþÄÀ@§/¿¬ceõ÷5,gg¥››YF†æ‹/îµlù§¾¾?†··õ AUÔj}t´jçλ«W‡«TZkky©R–¯  æähwï¾7jÔéY³BÕjVk3ÆÙ²•+¿žªÌ#G¯Ys·n]‡Õ«kg37,,gìØè  ÛÏ?¯àäTT™È˜1‰YY†^½ìFŽ4釥¥:wΨSG>s¦UíÚ&ß}Ò$ý•+4j$ùâ ©ÜÄ{>H egªûÓµƒÞ3yV«¶1gÍëóÅ*šÛ_ФÛtWç½¶ŒíiÄ@­á­9Ä%Ó¤*[?Dùü)‰"wq>š:eØ9‹gjHtFý„*Ÿ–åù¤ÃoäÄÚý€‡5ƒªÑ¶ð¬"2ùâÞV,«Ã¶å¿3ɽjq7K"Xo2€.Õ mšÈ‘SJÊj Ïã{Kjfs>•¯ì H#ô!{\ñ{LxÊÎãpNW¡rI7¹é„…}:Ù—ˆòÇ-…Ü`n×ÁQ…ö!y§IîŒC4ùwÈOAÛe,ºµäæ D‰¸C:ôQà,pVÏ-`M¬–¤0—ÐÆŽD SâÉ5L,‡›9Û NLõ§´_Fsµ0Õ³frn§3à ¿ <íÓô<&îNµA"aÍ{hu\ãý­/Η›=F“£æ—«Ì7&Ü,§ Ùy´Ï-Óò‹&PÓ s: åZ‘‘—‹±³%%•νIÏ(ÊrâD pÿ¾øþûEåÇXY “&Y=~¬?y²àÖ­¢–Qƒ9ääèïÞÕ,Y’\ÔC·nÎR)¤.^|¿hË'T«f[¿¾cNŽnÈK2™F˜7¯nŸ>mm?þS«Ö÷G޼¶$h•ª GÃãÆ…èõ†5œôÏ{8:A"1™dciPL7 ïõ¯%“u…Ù·/aéÒÈôtÍŒ~..S±dqx÷]o;µZߥKȃ$€ô'±¶–úiÐÖ­-:w.£VëNžL üÁÓó«)SÎoß}õjJjªúÉÿ«ü|ÝíÛ‡Å/]z­e˽..›ÇŒ9sæL¢……¬wï ½—, ´±y=im™™ÚAƒ.ݽ›Ýºµ[1[­Réüý­*U*ÊO½|9Û¶Œèè‚Ñ£‹ŠrMžœíë+uv–ôìiruú´aýzÃãÇâܹ&—aZ-½“’ŠRÁô‰&ßîÐ)>\ˆZÍ»¨ågÜæîCÚ'%gf+-EúÆÙHÔZ–6’}±`?ëŽS¹«ÞÃþùàÓGÙyrŽ|Öé71-ƒHÿƒ¤äa.ûMVÔ 2ä,¿$PÓ‰æëÎöëçêÕ«#GŽ´³³3ºœˆïÚµ«M×®]VL¿Â¯}¿h…— ¬ºöÛçîR•!õ¨êÆ´Cd?³ågcÎà`E|:ëN¼8[•<øaåKóË5–ë-‘ðÕ,º6£nzÌ0Ù¬PX>†µqvའÜ6-o.“±s P® ÝPðÌ©¾ÐqV.gÇ©›©©âŠEy-Í›+>üÐ*;›‰³ŠÐ——ɄիK{zÊˉ‰)JÛ]˜?¿¬ù©S™11¯ÞfÎô«\ÙÆÉI¹fÍk8ïÑÃ7,¬W£F¥|}m<Þ±ãøø?[é|? `GjªÚÚZ¾{w»yóê9X¾x'ÞhÑýb­çnA©>Ö‰‰¹G>øä“kµjíjÖìG…b ¬ñ÷ßQ¹òwo½¼wo̱c ôݺù®_ß4!aÀäÉ5\]ÿ`ø-<ÜH‡ÄI“®—)cÙ¨‘óرÅja´cG’L&T©b9k–‰àsç&Õ¬i>q¢sùò&E@ΞÕDFê>4,^l¬<•ŠI“ uêH–,‘Ô¬i2Ú7Žöx{²c3¦¤GoF1u^¥˜3†^ŒÛ¤fÒk¥y«k&O~_ú©Y8X< ÷—Ò¼~ºJð5¬Íø å‹‰í߇qî>¶fLl‚ë3ÞìªkˆPÚš­í~ë`µ*…„²VÌøc 'ÍãÑ·o_—³gϾ<”““Ó¼yóš5kÆÅÅÅÅÅÕ¬Y³E‹y…‚ŠEþ#ü,³@òO‘{ñ1º½}5‘sÖšÓQËù\ÖÛÑ:—Kìv¤fa‰ìó n2·¢8X‘z D_ãH=êÅwžó~xå£ çþâ}‹”½D¶ÂM‰$…ü+¤wÁñ*¹_“’n–çѬ"[8É9ÄÓ’à="?ëØª˜cÏ- Góy¬G{q*‹ OuGGú …ci,+ôQæ×$MÍáVF†œÌY׊“ñL;MÔ3A UQÈ8ŰçKÿ*º±i1ßrè¥ i³jLíÎ…ÛLÚÂöÓFfT*áëÙˆ"1´Ã# ‘ ¨Ä­hÞÌ#ÓA"+Kv}ÅÕ?Åð;þr"ˆ——°~½ìÌq×.ñÂ…¢’{fδJHÐ:Tðé§EU6lhÙ¼¹eHHî”)¯hßS·®MÓ¦¶çΩÆ/–¥¹¹tÅŠê‚ ÌŸ3*ê5”ý{yY?Þ¹GßÌÌ‚ýûï7múÓGûcnÖ¥KI­[ïëÔé@\\ŽƒƒYhh÷wÞ) Tóx1o=§@×êfàlÙÓM”c’êÕ•kIjé.ÛQJã:àOx” Þ¶ù²Ñ,µZß­ÛÙãÇ“6t?þ%ùµR©ðÝwééšãÇ“†½ô‡E7þ<+Ú-YÛïÊ•ýûW®YÓÙÏÏÁÉÉL.—žžVåËÛµháѵ«ï®]m’’}ñE“¡Cý¬¬þT_È—3Ü÷îMøò˘«W3¶l©k*ýYrrô'Þ=v,}üx/{û¢67oNß¿?ëñcÝÔ©&Ô5qØ0Õùóš-|}M¾Ú¨QúÐPÑ`ÇŒ1™m¶{/ –rÝ_ãd"^–šA×QX˜Ó´3G·ÉÍgȦ`¦dç|ã.Öfú6ï?ÂßçÅÑ› ôÝÈ¥ûÌ~›Ï«’E§òþn.Ä3¿-žñNo$³ç¡‰¬o[a¸+*‹iW8õ˜Õ °ýcÁÊ“ÐhDDÄœ9süüŒÄ 7nÜX¿~ýéÓ§ÛÛÛÛÛÛOŸ>½nݺ_~ùeqFÿþ V' ¾Ž|‚• ½!ÐXÀZ‰ZŠ›ˆÖO¥–$Hòˆ÷¦Žy)”1ÃRC^räw¸Ý9Òî·Æ× …Ã#²ëáxÜ$U¬16æH‚ÉlŽÒ¹a/ê:}·`Â<3$°O‡˜Ñœk¬U4¶¦«rÉSÉ™ÀʪGSy`)cM À¾øßd±Þ*Ë€ªDœÿ-²¥”±µ;ÖJ.?dÛó‰4oפiEtV%ò%×¢{Ë!Šl8Ìé#“j®dçêT&>‰q+È0q——Ëøz9ëâî̸dšÎ&wufß,-8sÕLš: óçKCC lÈ4­œ`c#|ù¥­ °oŸ:*ª¨ÂÅ‹ÝÛ¶µ¾wO{àÀ+²Ý-òµ±‘EEå?^,Ɇ֭Ý=<Ìóò K—Fë]Ld2É!UnÝêÝ¥KÙ²em>þøÚûïŸèßÿØñ㋈ýŠVkøá‡{M›þ8f̵Zgo¯\±¢á®]m*Uzš Ó­¶ñt¹Ï¤]fËÞ;&©Þ[>% ó¾òI¼š–«èöÊwôô¶3z3ž=ûæƒyåÊY­\YãUiEÿŠ={‚¬­eçϧýÍ ïF©YÓùƒªmÜØìæÍÞ'NtÑhFˆâ¨ãÇߎŠêsôhç ºw÷urz=;­¶¶¶Ïþ3%¥`ýú{‚À’%þÅÜ\·.A§ëÖµ8°¨ÿ'*•þ‡T‚À²eî––&ïG6äefÊ——Mj2…{ß>ñÊÑÊŠ-[L¶Ä‰¾Ç†­ˆ"³>¢¶‰¶}êÆ/$>`í\ãq)½ Ÿsü2¾ü¸+cÂàP¶A„>Miþ’ªkróöômÀØ–Ï åhXpŒ|-=ñŒêU®–E9›Àð´/ûô AdÙM "ÊÓ®XUÿÇ÷ë×ïÙ#ýúõÛ»woqFÿñ\šýÕ¨Žv­Å[­°7GƒÝ(Ä©ˆ¹¢Í—:a¸€o#²˜oF‡|Ê¥ò32Ð?æPd ‹æçJtÔâx‘ý¨ãMàNvÚcÿ>C³Ã ‹÷hBÒ„7Âgµ‡sé!y+© ŠAÄ(Sù<ÚA¤WD~§;ˆMÐéàrWè˜Ç-Ëͯ$ZCP"ézÂ<©¢ :ŸÑqÜÊc%,>ˆ`u,C¼ØPÊg ©È†BÙtU~äôæ1û-õÝaôÛ‰—ÇRù™%¢(2~'+~¡’;g`óR¾ÂÜ휹Åõ{„|L%cU6i*Þ_LJÀÏ+°4‘ñžÉ )ì=JÓzÞ‚Òôkÿϼ7„òå˜7v­Lšiµôí«ß¹Óн»d×®¢ £>ú(ëãs[·V>ìPÄ|Ó¦ôáÃJ•’EFV´°(jÕ±nÝÃÉ“ï¶mëøÝwUåòW»™™Ú¶mO]¼˜¶jUÍÑ£‹Õ·˜\º”üùç7~àçgêT¢½½²{wßòåm«Vu¬XÑÎÎNif&•É$æçsr ØÄ­ IDATt‡7iÙòwhÓ¿Itî²o_ÂÀe6mª[‡866¿J•‹r¹äøñµk›ÜÑ>ü0ñðáìfͬ׬)eê•ccõµj¥j4âöMšßCLMÅÏO›‘ÁÆÒþýÿ„ lŵ0Æä³E&O©ÿ$¶ýHË|·gÚ ,gõnjWfû<|]C£h6 Žeƒ×é¥3ÑÑbg£éÄú~˜=mìý;®Ó»:ë»býÌÇq„/®Ó±»:ý&+º,œO"hâÊÆ §á«¸||,~Ç]:ý5nÀ¾?å`‹Owuu {¶ÍÀãÇkÔ¨ñèÑ£WŽþ#¼Ñ,Ë:ªc(› ¹IÖ6äï k h’ÜDR”x€\ÍÏ642øÉFÀ#zшå¤/5$÷¹é›nÖX?$¾&¾q$&¼ÞR$çˆÏCÝW`7ªbQ ó,ô{Ho޲=f1èöW¡9’|X^€‘ 8ª#Ê+èa…d”7§Š95LgX–Ö.lyÀ©ÂÜö©þ´pgãvfšÛ*™Ó‰À¢ \yFO ›?Ýýq³föϨŸ å ß!À“ô\füø¢Â;0½ærÒ²éý1‰i/Ž޶¬ž@b gÃø`9Zq";>ŸEiWN^dì<“= mX0ƒkaôAd”ñD@.gñb‰­-ßoøöÛ¢"7S¦Xµh¡ŒŒÔ}ýuQ‰SؘÅÇ?-/‚ÁƒKÕ¬i½{wʺu E[>ÁÎN>eJe`Μ›¯7]ºN—¯¿nuéR÷ÎËT©â‘Q­š4é\»vÁ}úqpøÒÂb}PÐeË~ݤÉÛ·ßý駘ìlmåÊvŸÞè—_:O›Vëï PÈ$;FÔµ63¾óÄ»²6“íQW©TM[”{«°mG…JÎó—´­â÷ôêfÊ»ºr%cáÂ[ÕªÙΚå÷ï÷®€öíݧL©\§Žcß¾ïÜyEŒódÛ¶ûûö%ØÙÉçέZÌpã¬Y±jµ¡K§¢½«¨¨‚uëÒ¢£5Ƶþ™:5ËÆF6Ì”wÌœ©«VMhÙRè×ÏäMméJòóñ-ËÜ©&ßkëlÆÊ‚O§›ô®6ïgõn̬gÜ»ºŸÄä-¸ØÒ«1c;1˜¶›³Ñx9òq÷½«¡ì¸Ž³[=ç]ŠaýuÌd,lô›w™Éœë¤ä3 üo›ƒE,¾óì+Ðü5×MFF†ƒÃsߊ££czzzqFÿÞèÖøzEìÚ ¸‡ún‹ÑoC|¤·ž$²YÀ;-W4U‘®%ÕŽ·¹¡!Ûƒö÷‰Ì&¥ AÈŒå†/µe¸_áŠå[¼ýÇH›Á»ûˆ¾BBuÜߦê"î úœÚ0|AR6ºï¨xœ‚uä¤b8Ë-Ä èo †!w‡ùìÓ1ZÁT%õ H&DÍÏÒón4ç²Y]æ©>ÖʾID¥åFcÌ¥ßŰæ6w2¹Ù·ÂèÑÌöǯåZ~-çÏ.`à.NÅЩ ›º?7E±)ŒÛÎñÛ mÂò—jŒó è¹”ˆxl,8½c‘ð;ñŒø˜Ð[tnÄ׳Mö »Í„Å RÖ‹õ L~e¢È1„^%/£?eùx›T³Ü¾Ý°v­Á`6o–¡%¸{·zåÊÜðpíÍ›Î&Ã].äM™òèÊ•üë×+”+WT"Ñ#éóæÅ†…åܺU¿ti“Wüg9òÊ… i5kÚmÜX¬Ààî]Õ•+)§O'DFf89™=ú ?_ײ¥ç©ÞÞÖ­Zy–.mÙ¦—‡Ç«÷w®ÜÏìýEht’‘8VyW«íÃëÖòyN^òú•Č̼ÆMËI¥‚Á †œŠµw4¯æï~çΊŸË¯R©´3f„ÛØÈ«VµíÝÛ¸Žå¿QäË/c¢£³u:Ü9UmlþTzÓÿ¿~w‰‰ù3f„—)cÙ²¥[``Q%~¿rãFÎîÝɶ¶²ÁƒÝí틚«¥KSÒÒtµj™÷ìiR°ôÂÍÆy+ʆ·´±1þã¹tI\»ÖP±"ƒKœÛ„^aÍ—Tª@Ÿî&U¯"ï²ø ªøÒ¼uMd‹_½Ãg;¨èMóZ4¨fÄ ¯€¹ÛÑé)_Š!mŒ4{>ÎŽ‹Tpã½@¼žŸÑ¨§¼­+<'¯“–Ϧpòµ4ð Uagm­úûÑhSŠe…Éß&0,œÜvÂcµèZ¬‹&µ?|gã;§X/qwwçy½,…B‘››+F{C«ÕZYY¼rôá?à`© eú£Z…u_Ì/cˆÄâK­|è |—Î( Nræ=d¶9-xï+m©âD¯ ¬²Å££w󉽘¹Š5 cØ~®]'¦ µ¨ô‡ÈVÓq ÷÷ò°-<•ø“dý;Ž-I¹îlßÅ¢'ú1ŒD²é)Ms±¸k“Àœtæfð¶%?ºlMaà=ÜäÜ©ŽH3\ÏbzyÞ¶ÚáàC:x\¸‹_ §ö6n¦23yÏäˆßxDƒÕäiYÿCŸïM‹ehtlLÿ ç0-›†“‘x¹ðÓôE\žp9’àSеùÔtaÙÙË´H^>sÆ0Û´™ZMã·¸t•ÖÍ9ø½É2`ÊÃÇëkÔΟ—)L;Eݺeüðƒú­·”Õ7màÀ[·fôèa»s§wf@×®á{ö¤ôéãöÍ7Åj’”¤nÑâDDDÖÊ•5ÆŒ)VÖ?KÎðíùøÃáI7²âRó¼-ü=mÛVsíSßSQ¤òB %”ð÷0ó* nPÆš±–¤jð;Ertü[„mÿ7àpÉá}¬jaðF€6ù ¤ Зð®@œ» ʨ`†Á‚ª–6xXã+ ³ÅÞ‘r lr¼ðsÄ#Žð:ÔñÆû:×[PÃç»$ºaQr8œá~w<Ëa¥B›JAKlËav•q,VÕ‘ï%_ sTB¸‡˜ˆØDF'95¤|Z0ÑŽw,IÖ³; ¿3­©dÁÊG2õþøXðs2‘…Á…AøX¡Ò°«p£P)e[{Þ*Ë‘8ö?#ŽàÎÆnø8°êWžï’×°<úãíÈâ\x)°ìhÍÏóÐêÑè±ÔÈN"P»2û?!5ƒÌÚhò«ªÍ®Ïq²gÏ/¬þÚ¤™™{¿ÃÇ µš¦c]ÀŒ’J•ssfÍ*ª~õj[iv¶¸kWQ/voÓÆ:!Awøð+Jó–//_¡‚Ellþ‰E*wâêj¶p¡Ù²V›6Å„‡ÿMÍ›ÿ J™dP#Ÿ]#ëÝZØ*w}çÈE­vލ;°¡w‰wUB E£×ÜÜùMðð››ÔYéë¶¥iÝàaýoîüF¯}{fj=çRðµaKçÞða•­hõ4O´ÍãuãççwãÆg„……U©R¥8£ÿÿË¥c/T'HÞÌõiÔn¢ýNb9­gµ94œËçkKêäq5ƒÝÔÊ$,‘ŸJQ+…[QªLý¢®q¤5㉿Ä%G,äHï‘xÛ-(w‹äƒD9cV Ûó¤~σfØæc%ç™1W#žA³‡üÊu~F\ˆX ä´Žåİ’ÐÊ‚sj&§¡`±)ZöeWP׎ÖN\Vññ½§¹Y¥,˜@jŸET˜eTÃ…æ^\HäýŸIy&íçÝt¬ŒD`ÔO¤=ŸÔ?ˆuðr¤óçÜ{IOÁË™§q9š}™¼Åø47ªÎ†)\»ÃüͬúÞä·Ñ¾˦v›Ï¿â°1 ˆ'¸»ñõzÎ_bé ö›4³²bóféÅ‹â²e†“'M.•ÜÜ$3gZ9£yR‹dÚLÖºµõÙ³¹cÆ$µðòñ1ëÛ×íÚµìétÅZ¢uî\ºuk·°0U¿~ ^OßJ(á_ERØõ­Íu'øÇô»QÚüü´è;wöÿtxü¨­Íê'…]]oô8Ÿã‰ô,C“ÂÍCÉÜÎ%>ŸÆ6._þ¯y¼n:tè°mÛ¶glÛ¶­S§NÅýGx£¬ìp€ôhdvèÒQ¶C£Eþ.‚ƒ ‰¨$ Pb%`m Ý–Ú ÷]i$ É%ÁƒÚ乤ºPÊ ;1‡”JT2Ã,‚ˆT— ¹Å?\àe…ü2:QZ€;¨rÐÂEŠpˆ£±’ÁQÔZø‰ ®!ÞC¬&¥—sÍ€!6ø+(Ù”ÐÀš nçóiaŒsQ%Z;q:…9Öƒ*àcID&‹žÉÿ°6ͼÈÓ2#ä99’eí±”s+™é‡yA7`q7$¹LÙꥌp?oöLC)g(kŸïöAlœŠ °õÛ1ùµ x‡¥“IIcù&Ân›4kȈ1¢Èš/ 7­_¿¾0}ºX³F_D:ãÀ˜ß¸¡]¾¼(Y¬>p¬RÅ,7W¿~ý+²Ý'Mòª^Ý*$$sÓ¦âÆŸ?ù$ |yëGÔË—›þØ%”PB±ù¤´í'¥m‹ý¤´mòͰ_&G„ÿzüõžLRØõÝÛgÄWUΈ½·³{û¤ðFG/‘f*MdéXÇUãÊàýw÷vúû2dȹsç-Z”‘‘‘‘‘±pá .¼ÿþûÅýGx£,A »÷IH”¤ŸCé:±ä£Y.ˆ#EâEÖY2HG´–½ötÎ#"—“n´Éæv'|i‘I\ ¿Ô •Š´k "Hƒæ,g+ãYr™ä\ãn]<âQ}OD9,[ãŽj7ÚaëùQ²~FÕóN˜§àò* ŒArq>`žþRöëˆÐ#…•ÎdꙚÎc=À2/\|þ˜C™Ž †x“ æƒR4¬¢´ŸGðMáO["ðÕ[”µcà Ö=³jRÊØÞ_GÖ_`Á±çfK*aÇpÚû³û2ÝÖ }iýÑ´{¦£½žÍGŒOù€öl™Î£4úÎå'ÓªICÖ›£giÿ> I&ÍV~\vêxŽŸâ½!¤+c|ŒҡC%¿ü"frÑ$Lžl%“ ‹åœ9c2V/— ë×—V© S§&Ý¿_TH_©”Ì›W65U3iRôƒEí<þŠ¥¥ì‡‚¼¼,¦Oÿþû¸‡C %üwˆ:¸ï׿£™‰ÿ ôZMðˆšã'OÐääðZö ø¦1ŠÂøø['ÑÃQ>þµÿa„B^ø°¶¶>~üø¥K—¼½½½½½/_¾|ìØ1KKËâŒþ#ü’܃Áïc’¦ µÀw&³±|«4(@Þ[«˜:Ø™Ê +KÖÇ2V»+‹®1É ×ŠÌ=ÊL3lZ°ô;æ[ãÔ†Ág¸CLš`þ-ÇËâ>†·?ä` ¹“hdÕh.Û!ÿŠú?“=‡X|…ïOä"Óù!œýÐ ¹ŒÊg­†> ¾1èü˜}¹Lµg‘À§˜GmKBüxÒh¸íE~Na”««>ý¤[£‚§%ç;Pºp³ï.Ÿ^&,…£=¨ùŒ‚ÏÏQ¼µ ™„CïÓ¼Üs3v?•À…D†7eîÛF¦ô‹CŒX‹…’Ÿ¦Óª†ñi_°…™°³&x _RØ{B†Öý9}‰öÍØ¾Âd›zµš¹y‹ z|õ…ÉÅû÷Å€]V;wJ{ô0¹l˜;7gΜì ÇŽ9˜™™,çëÓ'þ»ï2û÷·ß²Å³è¢¿nÝÂø!eà@÷Í›+e÷ k×Þ5êJéÒæ§N5/¦fc %”`”'Q¨‰ Æó?)m«°²‰•›ûÀ“¡OnmÑ çQ‚^«Ñæå™zâœypîL1Ï$)ìú½£‡‹cY®e[W"§ÏãÙ ‘gà‹Ý,ž¡Á¾°¬çx*­.¢¸Ú˜ÊV`,=¼A þ_ã\xÃŒWò†~AÄS<¶·!§P_¢ÔJt«Á`°z×Àf98븥¤M:ñzRìé’H˜†d7Ú=$&»eh– œóÆÏ'9™OþHFnæH ƒiŒáwäHÑú3îœ#¥¥{á3øëäOŽ ¶£È8IÁlza±ýWˆ~{¦ˆôÍㄎ–´”©å£4niØïN%9:‘^ÑÏbj)&•ˆÉcD8ÇS ®KÛ”Æaç8ø€ö^¬ ü­GÕŒ~¸ƒNäJ?žmùºôâ9Ë©ø=¯žxå>sör0Œy]˜n¬ לï%*㋨cB;sâç¹DR:¿¬Äß׸Mz&ý'“©ÂÚŠ}Œ÷š3t,GŽ3e|Q6ß~kX¹Ò%†…ɼ¼Œ»EاOæÑ£š>°˜7ϤBÏ£GÚÁƒNœÈÞ´ÉóÝwM‰‰Fž<™¹gOµöí‹UÄŒuåàÁG¶¶òóç[š›%”ZB %Á+,©\Q¶U›èƒÁO†:–¯˜ûeƒê;¼}x¿A§+ÚÁ:·|ñ¹O—ü%ç]<ŒŸÒ`‚éK*].“¦aˆ'£ËèDä’ë_Á½Eø„‚G¨®!õAûˆäo–BÌ#ïb*úpAï!rßÀv3jh8ŸÇ+ªgs!…¯ì HçÚv¹Q=“¸(”Å?‡ŒÛ\ðÀ]‹6“Ì(¢|q/@s”kAxç ‰!ã[⚎æ(I: µ°JFóÉh‹Yârr4ˆï#-QˆšÉÐÀØ|tPYNi)÷´| ꊗ‚íi$hÊZÐÊ [9«cÉ.”÷œ[ƒr6¬¿ÍÚg2|fb!çn#žßԛ܉@Zïl#óù ®Z> i‚ 0óGv\42£³{S«þeh7›H;]¦F\h3ŽXIJv¬˜ÁXâc**Oš=—rcÜô,㉭I O‰·· RñþûzS?j…B?ÞR.çäIMD„Éþ9îîò®]mÔjqüøÄÌÌ¢r5K•R¾õ–£‹‹|åÊøœœâfu.^ì¯PH"#³æÎ½Y̧”PB ½VS¶Y+ úà> ÷}š¶0èŠjŸõĸN§Qˆ>O¬x pìÿ XùÍç?à`yı)ªl›¡(…´fAä‡ ¬‰ 9%¡‡@m9‰ ‚¤¸X`mAu…¶T• ´DéB œryP:.øDr¾ ¼ñ#,?\´è“ÖŠ•q9ɽjØu¤´#ÊÃ$¾ƒCæHN’Õ ó†(<‘n'ßZ"ñ„¥€qJêÉp“ðµ`¾JÔœ ÐÚ–J8ʘ÷ôc}X–@{ L+lUâfÎ8?üìX}‹¨BÅi¥”)cË­T¾~&U\ø¦7uþøvttQÅG%”PŸ¡ü[S fŠC…vƺþ27 ƒH{Æø<=òm ·-áàÎA ‚D*n†úK¸7‹²”í@î5욡ۂ.R_ †ÄÝ`ý‘ž ­ò¨•Ë—– R!Ï` ïgRÈ!ÞÍÅú{|hìHýŸÙì„GGƬfµ=öïðÎQÂÏÑÿVÔ™ÈÏ9¨—ÒöÚÙ„¹böûɘÍÃjXlÃ7„‚>¤Û!9‹!]âv¤]‘œÐÑ:+hkœN¨š„‹Œ®xÈЉt¼Ía3J3ß@m }(ÇS™W™…-XNãd8íëðã4äÆ~ÛwÒm*7î2°›¦aª.oòR–mÄǃ »quP©T¶¶ÏiÕ\¼L»ndªØ½wL\'srh×N"Ξ-™3Çd ùèÑYkÖävëfþý÷&×z™™úþý«6nô<¸¨6;jµ¡]»ë'OfΟ_vÆ Ÿ",ŸÅ`ÇŒ¹zî\š pèPc—»/—PB EðÊ$÷'£ª¸û<­gvé–u©ÒE?ñ QaÙmÝþla¶ŽÚg°•³½å,5ô½Ç©,v•§«ãïLr¯þ׸×ßh£¼áŸ_q3øtC¼F^ þ‹Iœ‚Y¼û‘µË.˜ ”c´òQ ø>…Áœ­Xw J»±ð*Íq«Ê'‡˜ À²5KƒÙ¨@Q—·¸ŽsV¥ÖbvXb>Þ{¸}˜¨–”L­Á„Æ“;…*qD\y3)ÝÛ·I E3›¡XnÄ0 }„ÈÐ.—Ã:¦)YhÐë1;saËZ'€ 9LŽã¡†}©jp>ƒi·¹•ÃÏõ¨^ØyÜEVÞ¢‰Á-k¤p;º_“«eK[úU}n¢úïdÛ•á‡~8?¯˜ðHEÐBÌ´®Ê'=Œô.|@“©¤¨˜ÒE}ûO¡·h>š<5ŸŽeÜK-¥Ÿ . Y.\§W¶,ÅLIxxxµj/ʶ–ñÓ¨U›ñ-kü¥Îœ[¶Ô5m*Y¼XR³¦q‡.)Éðî»™·néÖ®µéÒŤg³cGfïÞñ¾¾Šr®®Eu®=}:sΜ˜èhõÕüýM–(¾@n®¾U«“çϧöìéµys] ‹’¢ÂJ(.¦ÄBŸxNÏzQ_µ J¹uÓ- Æ{Oò*Ïì ×j¶4­—yÿ¥”Õç±ó);ðÄ©¢x}˜M—Ï16ø3¤°gú°6$3•µe~¿LC•¿Æ ¸õ†;¯äÞ"|‚[#â÷â1 ñ'š´VÈJ‘½Åˆ©¬’0ì[0PŠ'Ür ‹w‘¸Rtc“Å•ò´1Äp¤ 9d†²¿&5KS:”Pkñ7`8ÉõŽT¬ˆã b“ÈHY,w/…6ØY#]E’¦bí‡üS²31 Dò.’cˆ0Ÿ˜Ó@ÊÇD>q¢…9ëUͨoES´"ƒbžfYÚÓÌ ¥„×ùu{jimz•ár*£/ü6•ØÒŽæ^ ù…³ ÏMÒ†®¼[ƒ< wRð|y»-‡'PÎ…•Gi¬`eOÍ¡eu~:ÏŒoŒ u«°s>AþlÚÇæýÆmÌ”ì]ÏÛ­ˆ{Èi/{WÀ¸Œ΃DzÆT—ôF„yó$‘‘†~ýôj T®®’Ííí…‘#U&÷õzõ²:Ô1=]?iÒcS6OhÜØ®aC{Aûõ‹,þF¡¥¥tÏž ·ß.½gÏÃîÝÏjµ%]tJ(áõS¡}g |»¿ªqŠT®è¸n‹Âª(e;…•UÇu[þ¼wèE†yó~¡wµ3É´±cZé?ôr†¿æñŸç?à`Y—à%3‰‚dRŽ¢¬‚!—äH0ä’—˜þ‚DïɾQR[ËÕ\6ZQ+‡Ë)l³§zQñìô ¶†ÜhŽøò€ IDATR]ƒ:‘{Z²ì°Ó£?ÏùºTÈ£à47Í‘–ÂV!˜ÛA8ùb™Œú·ÆV‡ƒú™õP8!ÉB\K® º#äÃ"ô*ð“ E Ô2ZZ`€±©<éz7¹K9¬)ÌžX3 7²XýôˆRÊœÛî²3ö·ÉèZ4zzî#ù™v„JË;­áÀm†ïá…UGW¦¶Ç\ΆS,6Ö'§–/3z’¢bÑ.>Ùcü{hİ·‰IdØž3nãâÈܱ„GñÍ^–iÜF˜3+ ._cò,ã6À˜1RKK!"Bœ9Ód–UŸ>æ..’Ç &ÕÝù£œóóÅo¾É8uê™RS¦x™™IoÜÈY¸ð~Ñ–Ïâæf¶dI€<$$uÒ¤zýzÍWB Ågb‚ÊèãÙÑ'Ž›<1AUïƒñ/½.\ý«÷üþ€}™g´›Ÿ‰žÛ—)×óûÅ”-³Ê?}ùd£c¡«ŠW<«„¿éœ9sþésø ™;wîœñCÑg“ƒOg¤Jd.(dˆìº ¨ÑÜÁº‚D0ä#/f2ÊéAnN= *ìi˜O†™-¾ZD) R;¼)µi–Lr:éAÔK#G\ƒ¶1bÉÐ!úá,G–LÁm²ßÂÝi†ëävƾò;è²14DYÉ 0‡GˆÍÔ•q×Àm=e¤øJ¨£ä”@=3Ê›WÀñl:Úc/C.¡¦-aÙ„fRÏs'3\ÌI+`O<=±/\55÷â\"¶J~Œæ=?$…—+%-|9ÍãlÒòhòüî›§Õ½¸Ë¥Xœ­©æñâTû¸P¾Wïq&¹Œz|þ¾hu¨rØv <]ظ:QÅ—°;œ¾D*”1bcfFÓ†œ !:WgüŒ‰¨Ëå ¡¡bX‚‘BA (H¢}ðÀP©’¬LãÛsööRA "#5:ØÈd&ÅÝårIÍšÖׯç\¹’ݰ¡»{q—ªNNÊfÍ\ÂÃ3#"²NŸNy牤H ù ¢Hdd–³ókX”—PÂÿ;V®nï °õò–)"bT[Kµ«wPã:Ã?hµô3ëR,¾d¹€c¡/5$ ¦%˼@|rã+ö}îܹ8×ø÷‘ö;NãäŽ`ÝÝpe#5’R¤&~3Õɹ„*]<ê3èË¢;ƒv“ 69g`’¦Z®ä³Õ’:y„§³Ã‰z*n%ð£7A©Ü¹Cpe<æþ.™#S xÄ£+\i@å{$žá¦#^Ø^#q/·›á’ƒö6ªc<î€ýc47È;„*¹Òc|F6ð’óˆ+0<@th(%ÜÀ‡ùhA)0Ñ–LÛ³IÖt°§´’{ù,K|úYƒhîH¶Ž¥÷È/ Ù¼_RÄeÓç4ºÂ€­L¶öÜÉàÔ>¿òÜ„Uqee'î¤0çÁ‘¼@{>z K%ý¿ä——J.LêBB:s·sè²ñïdÎûÔ­BJ&ïÎ"6Á¸ÍÛ­x¯31fn^T¬q›€ª DÔ]–¯æa¢q›Zµ„Î…»wÅ yyÆmÊ——uëfvó¦vժ܂“¡£ \”JÉΙ¯”Å ² ²MO×-^§ý=Z4µk;,Y—»k׃!C. ÿq,­ÖðÞ{bbJJ K(á)R…²Z¯¾×å½vrfE‹2ë¦tübkÕžïIå¯3¸dUXNt0“ðõ•(ò°<¥ëRÑ ó«D·¡‚éC²T¨{ám‰ì<©Š«Ò3dëÇb¥@ˆFw}„nHœ¾ÀŒVRA‚œ§’ ,ñ•“¨ç㌧îsšÚp%—àÂ#ó*RÁŠ[Ù,¾ûÛlÂË’, ËžÑ /eÉw¨éÊOÑx>)³]%>iO7Ÿ‡põ%hP#:Õøø 7Œi¸iËâþ8XóéO„š\X5^­p²åƒOIÏ2n3u8£ûb-&/%ËÄíûƒaŒJâ#¦ÌÁ”dèôéÒ^½$ âÒ¥&7 'N´|糨(ÝÊ•&e±”JaÆ ™L8{6ïÖ­W´v^¸°œÙ­[¹Ë–Åmùõë;8ÐØÒRvõjƘ1×tºµ•‘¡4(ôòå ™ì¾Œ”PÂïG­ÍÛ{m°çêÆ|Í_µÉб6‰5C\ðR$êØ›p·D†ê_À}e”*_æñD÷¾Á¹Ya<Ø…ý[ˆz´Ö²ÉZ‡¤7†H –K)r¾´¤§–+ü`GÛ\®e\жO‚XéAìmö× y6iáœö tE*>âQ8áÕ)GÒABݱ Ä3‚¤D5õæ§I9JRì`ý ™{É(ì=,Ρù„l`>ÒRÁˆ7°Êœ›¦¨IV9¡2𩊓ùnrú;šÃÈXTz¥„ÕUIP³ð.Ç EíloÂÝlf^åÔ3YÚͽXÓ鳟;ÏˬkD£2¦ÓV^ÎRXÐ…1­8I»O‰O32ëSºÑ½!GoÐaw5É‘IÙ87'œ£ËG»K&S¡,{Òoâ‹9a¿ÚÌšŒ-ßîbîR#€\Δ)’¸8qÁCHˆqE¡&M²ŒŽÖÍœ™só¦ÉAA–&8Ÿ8‘3lX‚¡ÈüMkkéªUîÞÍŸ5+æôéÌ¢L_¢Q#çC‡šÈåš5Ñï¼’Ÿÿ/•CŽ‰É :öÍ7qåË[· c %üGØ{}³*?ÈVgßøê/z—‘±È ­-c åuƤr( {Iùo´ƒõ‰ŒûGñê JAn‡ê*d"õGlF"/ú>’ò˜8mN  øÅ6@ÇÝhB çKS]‰½€¾ A:tQ„–¥¬ Õu®WÅÛ û rnÓŽ Àyä£}Oà‰@ lôˆ?^€8K î - µá6âJ @kmedŠ|¦(#g¼",ÉD#ôs&К‡šß6 «Û0ŃȜ(2 —®L¬J€ nðø9õáÕéY UO’õ¼LèÜÖ4+G‚ŠñÁÏ “òÄõéFÛj”qfÔ7¤[›Í}—öuHQ1f=IF ¬ÌYÿ.œ¾Îì Æý'KsÖÍÃÁŽý'X¹ÕøwëìĪeH¥¬ÞÀ™óÆm„ $særM„¨ê×W b¡ÑˆóçgÑ?gêTgwwùÅ‹y;v¼Âm ´4ÉK¯gÍŠÍÌü}]Ï5rZ½º–££"88qذK©©Æ$\ÿQBBRúõ»™åïo·n]-[Û¢Ô+Jx­^ÓS½þ›êý™ùó¯ð—ò7œÞ¿vR²DìüõŸ?ßÜžœeºÃ×åÇ ~ÊÀZÊ2Ÿ§7òCyÌÃúÜÕK”ÜÿþVQè КáàÏÍxDjAjØÿØ;Ïø(Ê®ÿg[vÓ{-Z TéHk (ˆˆRPˆ i‚é t¥JïÐ!„Héu7›mó~Á”M•Wåáúí‡ìÜgÎÜsOvæÌ)×Á¡=Y硤/E11–œ5RÆ‚B`ÃL\v¢‹®–¡› Ý~¯B§L¢CØV‘Ú*¬¯p¨*¾>øDJh{í±ÞÏ¥rØ¿MÅ ´¿s¿%n-p{DÖQâ߯¾ö÷ÈÞN²'ÒqXË`>YÀd¤-Öa:Œ,VÑYΚ‚íéeÅÑl¤H`UyY3+æÖžŸUd°'ÁéÌÊ( ªE GÎ'ÐïÄ-tXÕ–¾U¸ϸcä¯]“KÙ>ˆþ܉gÄŽÂ åR6¿O9gÞ¦ãÔEbí2)[&Ò¿)j-oIš9³¦´ ûÒª.ço3cùK§I¿õË"jWcË~ö3/Ó¬1³§aeÉ'“I.¦ãáÔ©Òþý%§N™Æ/Özš3ǶS'åöíÚåË‹ ÚÙI—//]¿¾å’%I±±Ï¹L›æ=p Û¥Ké3f“GV<êÕs:}ºe—.¥oßΨWïð•+æ¬Ô¢È’%÷[¶ ±ûªhï@)sbÉ4ȦV¢¶óÃØž” ÌÀVÁ‰'̼ñÇÚXÉ™Õ'%«o1½`;BGKæ´#SÇ/ט¸¿ð¢Ú©˜ß›Ò\cÈ*ôE~KVJ–Œ .•›áôŸÖœ¦zE& âìM¦ÿÄ6s]½¼¼Þ~‹wzpñ:ƒ&𸘗ÀOFÓ²)÷2êSó S¦HÜÜ„+WLÇŽ™ÚØÇ«ìì$»vi££‹½7tëfëì,½tI3zt1©õyÉ„/¿ô®SÇö›o¢6lx‡VQøúÚ®Xàì¬|ô(«Y³c{÷SðÿˆääœAƒ.|üñ5ƒAlÝÚmݺz66ÿpWŽàðÏþ¾q¢X¹×ë†]\7ìâ?=‹ÿW\‰8™ÿë¿sÂn_~\øvvñÑáûñ7ÌÊÿ9Äë9”Fk{çµUü,™ë:Z¨j[âžoðÿˆ×šhõÁ¡rkqekœ¬ÈN r!ê)í‹:×6莣OÄk4ÙÛ85ÀpY£2E$LB¿t‚ÄZóa ¤¸2,Š3Ù$xÒ1žÔd8PÖ†w8­Gו7³9‹¬v´‹%û2÷ ?¡ÇZ®<&Õ÷T›ÊÍDrzQæm<>%â ºØ ÃuYGÉ1Ào8é  ÆÄQH†#Éé¬!ÞÄ$ †(F%r[‡RàP)ƒH¯ûÄêñ³dU·Â‘lŽ!4‹ ñR=Ýxò ã/•ÍÆ·hUêu:͇G‰W3§ C 2¼_ŽbØ6’5Œ{‹ñM /pX—âj‹i–0s¢’h? ”sgçd3,ðÀÒ­ür˜ÐöC?3¢Hß±$¥’”ÊùmXªÌÈDDÑ{iéŒÿˆ÷†˜æÎ58`ЉáÚ5™••y™÷ßϸ}[ïà ìÙSlcœØX}÷îÉɆ  ÷þýŸÓRuݺ¸U«âîÝÓœø øÆ´¨(Í{>ÝO.ÿg^Š~2zôUwwåýû™kÖ¶kçñü}þrÅ=>‡¬ª§”[ ‚ÄÁÒyv§±˜);û§j FCŽ!»„çnÉšc¡;÷ÝXŸ–\Ö±Òà†çø(+'}Õ;§eRpéñÑ}7ÖŦGØ[:w­5¬QÅöÏv|œ²-ø»°Ä[&Qôvöí0ÒǽֳÑ¡¿í¹±6=;¹¬“OßÀfî}/ÿ4ŠS«ÎÉØyõ‡ë‘gÒ²S,]šùtéPc°€PôD®GžÙyõÇØ´ÇNÖî-|{¼]­@a¦4MÒ¶àwb.eæ¤Û*ík—mÚ«Î(¥Üò¹J*næ…¦gV,Ç=b]3'k÷1-ç|âËTuâCN7ÉB¾«uÃ.:Dqë¯3hß[×ÔÉÚ}ZçÕëÏÍ¿sQ@,ßj`ýO²’šS…Æ]½w¥¢OÝß“ªN(:ä`åÚ¤r§¢¥øzTñ¨mv("‡>Ù]W9Àñl†$PZÆj|/ÏäîþjÌ€'¯µñx­Ï_Ÿ-(,Å Ða ×Qºâ=r’¨7û“°,WC’6RúsLë1Äà±ý»V&›Â :&¤3UA}èÃl+¬p‡Y–”©Ê×/AÑ‘¥ÛY”NR;†G“qœã©Ø‡¾ß±OMv'ê+°þ‚#–È—ÑéÉsqG¹Žú×ÐŒäq}¬æQV†¤1‰±W`ßÕL£0"lDfõ Òà&jƒ½@Љ*‘$ÙäFk€ûZjÞ$ÛÄïUþh¢Þù2{âiâÈñ]͸Îþh’s8ÑŽRù÷?ÜàýCXɹ0¿‚æ·ß¤Ï&¤v ¡]•Âkü˜ö‹IÌdF7¦škx+‚&“¨\šÕ™]Œé3f!ßn§‚'Ç¿5OŽ•©¦^wî†1  šW²c7=ceÉÕST®hFÀ` ~}Õ+â˜1’¥KÍS^=ybªZ515Õ´e‹CïÞÅÞ|W¯N6,ÚÙYRÙÅå9^œAƒB6n|R»¶Íùó ÅŸ1–.½¿ysÔùóIŽ7Ö¯TéEûðü-HO×OštãÇÃD‘þýËΞ]ÝËë•„óã¹–L"¯éÕ88üøì[JÙ—KȈž°­G wË+'Œ&ãŸ6°nEŸ_pðãg_í-3²SL¢ií° ÂØKóÿHäé=S@ø¬ýŠÜG`dʃ»‡éŒÄËeù”Ž?”w©Üо°ààØgC6J‡Lmê³i” vÉ‘ W#NåŸa÷Ú#ºÔVèDî=¹>{ÿ¢øG,¿ýqmªõ-tvsöºÝhúÃAÛ¤r§aoM-YC C%Ì<ÿôŠ3šŒï®ihmaçhå™ò W¾¸I–l`•°þ&Ñ4tuK…›]™Ç‰!ÏÚøõë_ïcŠÇ¯WWþv­¾ãÿt­5¼[í÷Ì=ÐrSCG€‘šQ„ê™éÈàå ,ûWc¤½ÖÆ àµÊU.>dª‘[bÐRq(6åI‰ÅÚ w”u‘» ¹‰Í0äÑ\CÖIe‰!SÀœ•¸Hp£ d8ˆmðPâ.ÇÆ@¼5mpä\ š[aÁºÔµÇ^DL$¡*e4è®ñ°Nþ¸¹`}‚G-qóÂÊÅqêbÝÛ$ [IV"LÀÚÉn´:ÄîHê#‰†¥rÞ’á"ð­ÀQÂ\'ì$¬Ï ÅPYÉtOe,{ò´¢ø©:®ä˜ø>WÀäXËÑ›øäÒÌXÀȼëO-7>9NbAʨžÕ™ÛÚ¥™{‚ËE¨êxóÓP¤ßaµ¹¾¨þeÙ5•›áœ½Ërs,ðÀ¢éÓ g;>˜:ÛŒ€[—akMr*«¶™WÒ£3ý{áèÀWsћ˒ÉXµJªTrë–X\E¡»»dî\;;Éš5š””bk‡ulÑÂÚÅEúÍ7IÅÉ<Ê>*¨D‘—emx†>ª¼xq­ ¬oÞLïÓçܼy¡/ÞŠç/bÏžØZµ=š “I¦M«¶~}½ÿëêE`0é«{6‚Ñ<òó¬ŸÿÁü'p8d+P»l“¥ý÷/î·×Ó¡‚I4¹Ž‡ßom?n½`Õ;§?j5OD<”—˼ûúj1' l³%ýö};à@ wKƒI¿ïæÓÞR¹bÞ-¿ppI¿}å] pã– 6$6˜ÝcËê¡ç>j5W¥°~˜p›"øýÖFQ4µ®Öç‡Á'>l1[&‘Ÿ;XTì³ö+V=·nØÅµïžÿ²ójàZä™çj(q¨Ø™¿È J%R +'ÝV尤߾‡œ(a’Ïlb³‘ÁÖ_"H.S@˜ÝcËò‡šút.?.&¯ó¿[éSë ˜“ŠR‚Ÿ‚‰öÿº¢˜ÿa¼ÖV.’pî{ʵ%ú4© ¤ßçÞrJ½CÚ%bö£¬„> Si ‘d¬@6ãU´ %Œ¹hâG}u\Ö°Þ‘®®'³± ]Ó ‰dk:¥Ê®J(±N%!ƒx?üÂ;ÙÆTÓ¡¿@h±=ñ‹ u'!Z ïP>”ŒýÄ0 ÅåÚ•$$a艥7²hW¡`&’ûˆs0ÝE`± +r¸cxdžæ*fóU^Z÷'Ôµb³óru\-Ø€…”qw8›'&ØØ¹„-ùòZuZÞ { GÐí7r >¤Æ7¡yyN>¢ã¡fè\“5ïrê>“¶±Ï\šA?6|™ÆþȯæjýdR¾›ˆûÎ2p:ÏHΜ9óLƯ2«fsàc‚¸bF °|5ý9~ºXÖ†5„éÓ¥'Nˆ³fK=:|¸e³fŠr&N,¶Ž ð㥽¼óç'îÞ] —Wll¤[¶øY[K¦N}´yósxJ‹C` ã•+oO˜PÅÚZ>iÒ ?¿‡½t^×KáÂ…äÆvî|úñã¬zõ¯^}{út?©ô_Ä/_£L#árøqàJÄ AÔ*óVqÂ…òß‹K‡L~ô k§rr°tÔ`|þÑG‰w€Å‡Ç[ûÖÒ#\¿ ð8ñ.Ð7pŒ½¥³Ò¡wÝÑÀ³üÈ”û@¯:£l”öö–Îêú‚jÝmËó|ôËÅÅ ,í·ïÓ6‹Šž]®ÕÕ¡ú ¥\U׻Ū¡g¦w6S9¢ÕkÖ›7ö—CW7üj÷»@®#­d % •0ó<Á\ô koél!S•<ÉPòúçbh£ÏJÙ—³¶°ë0HÕ$>Wí¿.y•»´Í&ÊÀ:WäÀì€ß_®vù ^ þ ,Ÿ¶˜ È="ÏàÕ Q$[Ä‚ô`l:’u–”ýØŽBáGv<’ N½7XŠ[Ñä:Î:ÐZ@–Å%'dXÑXbåEc9–O¸VŽªq„ÝåB R¤D¨ÉjŠ?p–œ«áªEœGMpnŽ[(Gˆ÷ò¶ZL[H’Âx¬­‚ÉÉÀä0‰ajKñ•'2'°À‰Ö*6eq8@&°¸ÍmY™À¡<&Ž4°Gg⫤çýÞÜTüÔ™„U÷9/m\)ceÊÚr>¶pÂ;0£-í«Å„}$)³ÔÙ=±·bÂVΚ¹ÁÒ³3b41u#î™p°aý4mÙžo6?ÝØ¸qãJÚ1¢/ÙZ¦.$Õ\1{;&~L|"«7p¶˜Ѹq’þý%‡›.4ïê.´mÒDqò¤îÈ‘bÙˆ+T°èÐÁÆhçÏOLN~Ž×$ À¦_?wàë¯ÃoÞü“¬ƒvvò¯¾ò ò«RÅöÁƒÌ1c®õìyöÂs\d W¯¦öés®uëz½ÉÃCõÃuÖ¯¯ççg÷·è/ÂÞÒ¹‚«_dòýðä{nWv«a«rø‹:3µi€“õÓ@µ‹MÞ&ÙºÂÿúéÙO×?÷iíhåšûÕÁÒHU?}„giÓÇ<µNybÏU;ì­©¥ʧ¨ã‡l]zdâø­Ýî=¹^tÚ]&`«|Îéÿ|aѱ»;Ò4I"b¡d 4”0TÂÌ_JÌÃÎëÙß%L²”¼þ¹(íð´K Ê ÈôüÏ!÷É-òu§µŒ¶¥¶@¨‰õ:€—ó3¿©"|5ø0°*µÇÊ™k;©Ò›ä;(}Qypw9åÆ`ÔƒmSRv!©‚1‰´%(>ÅŠn¹„A[­&’Ã>gHOggYúgñ(œ e¨¯C}‡5hêŠ×ÎêÈ|‹·tèNp¢5ÊSê÷ÛG,¯«Fÿ6vÈW–q,Þ(W“AN3,z :LÎ"²€iH› Y‹i/&`¶’626êY¥¨ §‡5 O ÓPEE?'dï„‘”gNͨ OŽ&ñþÍ?–¤‰;KëQÛ™¾'¹“ÑÉÝŠ=ÝiäÉÂË|Wп%“°u ýk“F¯hŠÄà>kO¯â3è¼”»æøE'÷泞¨µt™A˜9JeØ>‹ªÞüz’MfâK¿dPWžaðóìYë3g:9:¾G†9”BÁĉ’êÕ…iÓLGšV¨ íß_•žn6,=3³Ø‚Ñ£‡w¼pAóá‡Ï/ñûàƒÒ“&• ×öèqëe™±ò£ys×7Ú|ýµ¿¿¿ÝŽÑ éØñôîÝ1ö]§3mÝÕ²å‰ÎOoÝÕ°¡s·nž¡¡íFŒ¨ð¯mŒX§\s`Ë¥e¢hÊý»8䯕 …™ŠFš¬,lgIÊ ™*W-6À÷ƒ=Û}å“y;ÚIYOÝŠ‰YqÏ6ÖJ»üjãÒ#_P­—SåYÝùºûÏëRÞ¥ZzvÊÊS_=;;•#Å7ùqéñQ`l«ù«†žù~pY J*aæ/%–[@ðÜI–€’×?¹É× SRا¦¯5“D‘Í éKø¾áÁz5x­ ¬[Nn@¦$-UDa‡Q:“Ñc6ѱ®|©3ÆxtÐc8&1€ÖÄF ™HÏf½-EtÉìt¡¾ }§œ(%G•Å“DîxPÄ«®IM¦ÛÜÖé‹'ð;Á•p®„ómp?G7”iè~%ªµ°4 .'€¥ V£‰Àè]d°Q¶CŸkI†Ûâ-#ÒÀ—yôanøªˆÓ3.üé¹À—•°”²9–MùÌ€÷«`'']G¿‚,£þ.|R?Æå`Aþ&+ ;’¢áD£¥h¯¼ÝiâCŠšNÿŒLu IDAT‹‰77ûjU>–ññúÉ“ý{H¡Lž\õûï¦M«æà Ðh ]ºœñòÚóÍ7÷îÝ+v¶ÅÁh‹ÿê«;Õ«èÓçܱcñÕ«Û_eÆzŸ}ækkû¯&­S®{ùÙßž€Í—–ed§¦i’6ž_ÔÛ¥*°÷Æ:¡p»¤j¥ê[/›©MMÓ$m¹´ ðq¯_í–ËßfjSSÔñ?_\ü‚j—›üᦶ‰™±­ªöÞä Š‰—•uòöÝ\¯Õg_~|ìÝ5¾øu`qçh§rÌÖem¼ð´Z$·‘K J*aæ/x‚/5É\„%ÞÉŸÌž‹’×ÿÏÁ×# k­á/òiáÛS"¼èKˆ€Ð·Nj¨õõ(AÏ™l–¤!˜`…°ZÇioXþ=x­“üuÁÂJœT‘&}ˆ8µ3Ê,ÒSgO" ”ò"ã^ÐìGIÙqh¶‚ˆsSôG‘Ö4¨D¸*¡W Ü·d`2´Ü·§CYéܶÅONµÇ7a¬Ï'GYŸFbWÆ^âZQÎ8·¦íjjÑvã-=²­ÜŠ'k.mÃÈZKø4?RO‹ø9QÑèR¶*ªid\Aïd%zŽ!†!ù 0@Ã]e,UÜÖñA÷tìr§ "‡y¬å›rôÉcœ[ÍÚhn¤s¾>y-Ô:!QKe[¶·(à‹Ÿyãá\Iàt?ü †Ä3x O2è\Ý /y¶Ž.˰žÈ™ÉØ¡TÈ̦c鬔ý¥¹Ç÷Gßò˜;YñÁånêØ‚9ßsý.ÖÐÐÜ-ôÞFŒE§ããQôénFÀ` kWcT”Ø´©P\EáíÛ†Q£ÒïÞ5ìÚåаa±Z¿û.ù·ß2ÔjÓ®]圜žóŠ¡ýðÃû!!Y]º¸|óM¥’…_iiúÍ›#—,¹Ÿ˜¨õ÷·?q"ÁÛÛª{wO[??»*Ul Ï\yò$;44388åÂ…äðpÍÕ«)îîʪUmãâ´C†”{ï½ ŽŽgcÚ?âø$s}NùËǾøu`dÊogßé]Öò, % ‡_vô³g_,]rcO¹ò·c.Î?ðѳQ¹TQÓ«ñ‡-fñÑSwöÏÿàWÈ”Ó:¯Î5­®DœÌÍ=Ê…£•kŠ:È-N,AíÖËß>Ë”ÏE½ò­G5ŸYèDîÇߘµwä³2= oàGíü S§,<8îfô¹§Ó“Z¸Û—L¾oea³bà‘4”0TÂÌóOïÅž;É~n—Û†"U„%¯Ñ£<÷ÿ䥰ààØ[Ñ^\¾j©:“Ú-ÿ+G4AÇ84"­UO+£M Ñ"Š|  ·â%«•¯Æ оÖÆ àµö`),KÔEîìÆ¥yrŸ´»$œEU•ŒD¬Cî‚öšDô÷ОÁTã%ôë¥b+‘ë&–+i­'DÍJ;Zfs7™Mî¼Á½8ö—Æ?‹¸d±Á1‹Ôë©Cb’HÒ£õÂõ1 öÁY@HB³Ÿ{ÕqB<9Û‰rF^U,º…Ä£° E¿í%tr„ôâ×ciJœVæpÆà§ ¹½ÈÂtrD€²¼ã‚§_D•çšâI%©zz^áYw;++­æ×~*ؘyJ}î5?y{‘BjŒú’Õöø CõÁNÖî2‰ÜÉÚ½uÕÞC}FTv«1ªÅÌÒöÞ2©ÂîlÿúãÚú÷/*6¨Á§>î5R O‡ ¿½ OÝ­Ü,]KÖPÂP 3Áu{©Iö üÈNå(“*Ê9ùÚ«äõ¥¸}+ $6ø™ùçdäOéÓÊA`d6ÇôT“ÒëO8ß„_ ^sSq\)JWÃÕŽ´Hª´âþ*\ü©P„³8ù+ª²”íNüBTUqõGý;ªV¨î"¦ `P¬k)£“X"ÁٚѬbã°Gì5íN‹ Äιâ[žŽ¿²ÈrÍéwœ31ÄT¢R=Ìàwì;ÓPl§Ëá0†QdÁ-¬ÇSU†´÷Êbñ® °YHæN²`1;za|ŒØá¤@PkuT—°Í hEZÆ"B[K¾ÌËCíJD5­ØPñ©k*Ë@3ØÉ¨ïÀ’j,ÑÞ(fßD˜Y›fîl×h¾ƒ KvvAY0¢¿õ&Ÿýާ-ãÞ¢[vÐG‰4øšÊnTtcõPŠúÎïDÒp5¼iQƒéýÌ\¸” šÂÓ/w¾ŸhF@o i?ÔÙÔôeí<3‡E:ö!<’ZþløÑŒ0uªqãFÑÏOؾ]ª4Gz¥Õн{§&%™Ú¶U~ùe±ÝSÃÃuµj=¨QC9t¨Ã!Å2”>ÃÊ•±ãÆ=ðó³š7¯b“&Ï¡*})˜LâÕ«©7n¤:•xçNº‹‹ÅO€–-ÝŽZ·v;|8ÞÍMÙ¹s)¹\R¿¾SãÆ.ÞÞÅð®þÏ#13füÖî ©ÅÊwN=_ú þ÷`M_ü:0:5ìew,e_nf·ŸÿtZX´ªQ\(MUÀ&=+uÜ6rËáåy°xEfÀkn`<âk @\ÐJЏe´8qF)qGGqâé ≸N%Þ›!öoÖï4Ãdb˜BÌÙ$¦!f”1Š?èD¹^lš%þ+z$‰=ÅM7ÄêÅw’ÅËGÅgÄÞ1y§8ü°8-MŒ>.þò­8ú¬øk¼$Ígfˆ{Å‹£Åo¿w‹¢8O<ÝGܼI¼!ŠâLñv ñè1TÅbbuñF/ñžQÕ¢i ˜ì!Æn5¢(>E[Q§uçE“(ŠZQ¬ž)’&ÎÐ>=Í ZQúP”…‰—ò¶ÄåˆÁ"çÅeq¬Æ­ Ñr¿Èñ—˜«4û¦ÈjÑùg1,£Àö8µXå'‘ybï]¢ÑTxm—™ ª&‹§›Yù+á¢õûbíéâôßÌ_š£7DYQè$®=b^àæѦ…H}qÙ6ó±¢Ok±n7qÑjóqOD÷J"vâ·?šÐjÅ€=èÆ7˜—Å r¤ÒX™,öÒ%]q2¢(þòK*ܰµ½žS‚Ø3̘ñ¸Aƒ`—Sׯg¾ˆüŸ†ZmˆˆPߺ•œ’¥ÉÎ.ödß`Éባ6´>²-Ç MU'.=2iðOA»ßý§çõoP÷uâÒô§?1‰Né"i⦼{ÏK=Ùs WóyÍ Œçâµæ¢bs€¨‡¸ú¢SãX ö*žmt¢‘ÔK8ö'㠩ǰƒ¼<š8dõT–èíÀ4*|lMdÚPEŽ›€L‰Ê•¦rl3¸Vž&)Ü çx5QܵÃÊ_ñ:×›S]‰"†¤Hâ{PU…,š´T´ƒ('A¸BJ,Ù=qò@‹þi–ÝQÛÐd"–ƒ‘Hà;L°€%Jج㞠 žŸØc™—ú4Pè®`…7ÀO ÜÉ£îô³aI5š9±è1wò%COô£S’´L½Š:_}›»%Û»`gÁïY\x]?lĨdëùò¡Eej—eÇhBãøákÏZTgÙHD‘;9g.ŸÝ¿"ËÆiåÛ9e¦2/æM"ø?måªòEÜÝøvR)¿æž9ò ¾ûN*“±s§lþM«^=Å'ŸX Ì›WR °o_û=ì4ÓÌ™ Fc±bÏ0eJ¹²e•‰‰ú)SÂbbŠ%ƒøë°´”zyYúùÙ8øúÚzzª”Ê×­–êoDy—ªY9éëÏÍom“±¿t?. tªñÎ?=¯7xƒP ŒÎËf_˜CšH[ý^•;ê ^ÒéÓ§ÿÓsxe¸q,èûõÓâ¨Tƒ{'h0ˆ˜Kè xT â(Õ†’|™ÔÛTèOòa¬k#Ó’~—dïF{ûÉèVbzŒb”Èfd =´ì­SÙm$ÅžöqÊâ¡/£b¹ÇõªtÐcˆà® y †FX=UXÜ!"™Ì·©™AÎi"s04§¬ñÉÉèZàêü,™Y›`ë"ã!rLЋ@$7a'&;„úå$`L‘ÎrxKEˆŽjdÐLPE…QäBw³éâø”ƒ®¶¡j~{‘$†x’Û¸EèX†{éœM "‹eþHxwµ¤®;g¢ÙyŸJö…»è´õ!5›$ ßœ¢Wuì FÙ*¸âéÀÑ6_¢vY*»Su*!‘pø[Îн!ŽEÀHsBËz¹í9ÃÉktk‚m‘@–Oy »rè ïôÀ¢HîPUŒFÖý¹‹ €´ˆiQº´`a!ìÛgŠŠ¢{w‰Ì\mó[o)BBô;wjE‘-,ÌHТ…õÚ­[ÓårI“&Ï º :9ÇÆælÛ–pøpjÿþnJåÿÀÛο•ÝkÚ(íSÔñZC¶\*¯àê?¸á„š^Ÿ¿ç¼Áÿ#T2`—žïuT—ò£ {ôÆ4Ãsúµ_,Ç:((>5DX3_gãðZßÓýšDÝÅÃ+GÂC$„À±&@øy”ŽdE +ƒh"r56MRŽ#+‡1‰œl Œç¥Æò ˜Ø£¤6ˆZ~µ§.·¥´5‘jB]ð1Ýg¿ Þ䤶xèÑ_âR|Ká¤&'‚øVTà8Qw¢´ á$ñÉl–ÇÉØD’ïbü„: £Œ@ÌÀ˜›Jý‰ e¬Ö³A ˜`OK%óÒÎsˆ|VšR v¥òE¾7_V¢²w³˜Ïod#gVm”R¾¿Çâ;V±eY>­K5g†üÎé‚iÜR sÛ“­#&þ?“Q¤{H#†7Á`bØj®™ë3¥7ª’”Aï9$!:ð÷÷ߟîMÉÒ0l:sY““Fà[‡ŒŸmfÿž¥¾Æ‚eæ>úHÒ©“dÏÓìÙæ‰•JaÂë€ù/¿hoÜ(6uÓÙY6~¼‹DBPP|p°¹Ž?aa!Y° ’¯¯UJŠ~ôèûYYoˆùþhUµ××Ý^9ääƒOLîð}2þé½Á 9Óš3}¾»ä;ù°ÕÈ]U§î½ââš3º¢%?¹/̉"db¢›œ²€µ˜Î =yã¨þçñZ{°$’   é1ŠØÙu“FC0ZáàJüª¿‡1Mn蓱oDú"nãSÐcûb¦Häm@- †@­œº&Ôâh£'=»•šAt"wýé–MV6jSUê$“œAFuüõžúˆø–TÏFŸ!–Œ¦”5!j1Ý'£îî(bÐ'£öå‘§#ªbh‡²B<¨á"bo$*•@¢È&=CX ”‘ñЀZäçL†Ù"PZs7›=©T³¤Š @.¡…3·28œDi5òüÌÎJ*Ú­aÝCü¨’¸»¶aiK®Ð¹".ùH‚åRºúq1ŠètŽ>¤_M qR6«BRKŽÐ½6Ž=;Îõ~Hbûƒéß ©¤°À[59q•ÛˆŒ§}ÃÂY&¥EB˜ŠÑDíj…,Ôâq8[vк9¥= Èå”-+„†Š¿þjjÖLR¦Œ™|ø2e¤‘‘Æ'OŒ;vä fYÔ–‹ò僘“#®_Ÿú Ås¨qT*I§NΗ/g^¹’yð`JïÞnrù¿”Òó Þà_aèΠ]w§wõ}¾èÿ ®„§µœwzÍéˆ;1IY:½QLÊÔ…ÄfåRtÊN¥ì‹m!ÿ'04›,‘–2æ( ±7Æ:ƒfÌyá'{PPLýg•oû(ßû­üăƒW_KyþžÿA\ Ok>÷Ôƒxó÷‡ñYÍ瞺aŽWæOaŸmzÂEf)Ÿ&uŒÃ”N/Ü_(ÞôÊy%x­=X4ýXÚááƒ. TE¬œpö!ù "Tì‚Ü …¦'X¸ãÒœˆzÚ#j0å ª –V¢L!à$ÅÍ€A‚£* V Wâk"GOFY:Æs_Z«É0a0"–£ÊcëÑûQMDÈ&'¬TI!H!»žqdÇ¢CÛת¨’!_,Ë¢ˆÇŽñ1†N(íd‘È ¡ŒMzTÎ*K ÔQ²SVÄG— К‹YXHÑÐÑñéÏß–KiÄë8—B'w¬ò\2܈R#ØA/¬òr’Î9…µœýaôòA–Ï8·WÑ¢"KÏ`!%"¦å \‰@§š¸……ŒÃ!ôªƒ¬ ÈFE?foÃZEV6•Ÿn?s挗—àá„—'®¡ÑâW·"Lþ><ŠD«ãÜUz·7“kÕ¤!ÃÈTó ŒÖæ(“5’lß.ººMóæfîPr¹P½º|ïÞœŒ 1 @îînÞ‹%• [=x ‹‰ÑëõbíÚE¸V‹ÀÑQÞ©“óöí ¶¶²Ó§SÛµs–ÉÞø±Þàu@Ю?Œ&1M£¿•¾út¸L"4ñqþ»ôÿ„ôÑ”^Cvg“í÷Fú xXÊHå­XþÁ2œÊ³ñ£¬)W…Onñ{§üéc‰÷^~°Æ~ A?óó#5£Y ¦±^CÎXº9á0ŸÓ"Œ N)ìßáB"Ú)TkÛb7Ô‡¹”ÑÃÛ$ÞÃ0ÛQXå@W G§"ù)°<‡…:ÊHøÕG (…YxÉØåŽµ AO«»ÜÒ0« Ÿçµ¯Õ™h{‘ãÉ´vá÷@¤y?ù,=s2ž&înó4>‰êoâQ}ªðK§Â/JîÑq &‘µ½\¤ÇCl gQÁ7[6Ž,Ivž£ç¤Ѳ†™ë9m%s6àåÆå5Ø!¥ÊÌ¢Nwî?âÓa,øÜÌî×o؃C¿Òª™‹Å!CŒ «VIëÖ5üôÓÌe˲ºwW®[goaQì]òçŸS ˆR*…óç+Ö¬ù| ¸};ë½÷î]¸Þ²¥Ã®]Õ­¬Þ¤P¼ÁÂЀ¸¦;œ¥ Ë\v$lË¥hàÀ§Úø=í~}ùqêäíw.„¥˜D±Ž·ÃŒnUó›_ßsµZìÙ3õüyý¤IVŸ^,õ(ðþû1?üܳ§ÝêÕell^(玺uëkIIú޽ݾý¶²½ýKõk}ƒ7ø×¡”‹q¿Ü\|èaûêîûÆ5nD¥7˜y"[÷GDI!“œþ¼i`yàÀ­øvßœ}6TÊ^Ÿ‘c4‰¦ÕÝ¡€þ#! o/8óì&›øV®R²’â0ý·»ù=pÿÿ˜ÖÅ·8çÜcµ²¸eM @ÆÅ˜üN “ð'ˆFÿE–Pä’äW9nܸÇ­[·^¼xq™2eþâ,_^ë¬ÀÖQ³=š ÞÅÅ›s¨9€Ì'D…àìGèJu áî*¼†“‚:K?’6"õÔMÚBdÑ_F;[§MÌRÒUÇåLØÓJOb?xÒUŽM$Ûìp)C½xî„q<t—ØW†25¨IäyÎ7£†?åB‰¼GTª–ÆöawHx÷z8Ÿ'i71vHÛ`—ˆa.±ĦX Áê2ºEd>Gzq4F$𽊲ææ°ß XíBi)_§±;/_ª­=³½ɦßCRòÈ®<•l®MK> ao¾”¡R–ìn‰§% ïî¢ãçÌήXË™‰uë Q ˜×u]Öq«Èëœ_ivŒÆRÁ”¬:mæŠ}5Oºq5Œ®3É*âkW*Ø9‡Z>|»9ÌìXƒy“8y‰AŸoîÍsÒÇôëÁîß™4ÍÌ($mß^²e‹iæLó VVÂŒ6¶¶ÂÔ©™§NéÌÊäbñâR½zÙíØ‘þÕW/”ŒT«fuêT@Û¶Nׯg¶n}=*êE;ã¾Áü‡0¶uEàÒ£§™X3w‡fëŒÝJÅ.jŸ°´C¯º¥uÓÜý÷rG— ºÔòˆ[Ü>ú›v~žvF“fz3,øý(²ë£Ú•]S_Yz$ìe•üW`‚ïTO­«ˆ³0¹"¬D*íŸáÁÒ½šÏŸD!ºÎgÛ³²²Z´hQ»v툈ˆˆˆˆÚµk·lÙR£Ñ” êŸÅkm`=ûõ<|€hâÚ1ü;Pª*‰ RBöRª@ÜMö¤ÞDY z=vm’aQSÙ H\0…H `'¬¤”€­žëÈä¸ëˆËá–#"Æ(¶—£ p=eñ±Á!ƒ¤D FoÜRÉÚË%Kä ñvpG‚ЉRH®’ªÆÐ‡Ò(ÂÉÙJ 0˦Xl&;=0‰+œAÜ„ ¨ á=9ÀØl2D€ª FÛ¼ŸD\ž©0΃ºÖ¤ø*æŸ`s'zx`rù²×k91½6>v|pž#±Öµ…Óá¤bø…^õñM©Uš -=7W„y¡UU¦vøz§ï•L닳 ·#ó7nÞ*$à寗ï"‘pðgo˜¹æïõá­:$$3v†™F‡R)Ó>£ZNŸç¸9 O¥â³Ï$ s昊£­SG>t¨ÊdbäÈôŒŒbïeJ¥0c†û[oY-X¸vmjqb…P±¢jÅ {{YppFëÖ×oÝ*)¡þ Þ࿈ÜJºôì§ïyÁá©ÀüÞþöJ‹9½ü€k‘O«lnD¥ úú»Û)K;¨– 0—=À¥Ç)@—¥ç•ïýÖmÙàÆË+ù¯@ýäj˜‹Q„wø ËQx©×³W‘€õ÷×ë¬\¹²~ýúS¦Lqppppp˜2eJ``àO?¼J±ª IDATýô·èïÂkm`å¢n+î]§ù¼ª‘¦ÆÆ…ÛG|² Ð+ñjAø1*Ä%èSxôB!)] Òc= ec2Vb1i}rVHøT ®ÈwÖŒ–SKÍ® ·¤fë½ècOÍxŽ;ã]†dᜪK{*ÜàdiJ˜FZ0ÁM©^²©d^ça*×Â#šŒ«ÄÖǹ·)C˜€G¬~$>C9d Qø!ŸHšìá¤m~”ÀX zÉ1Áܼ"¸1v ´Æ]FPÊÓÿt¹À/•hnˆDæç³™&Tà2x[Ò5˜Ì|Lî½ËÑÍ‹†.t?ÆÍ‚u?ƒ«1°*JÓý7.ôT «{Ó¡ r ÖQ¤(oØ[Ì莗]—q¿ˆ—Ë֒ߦÒÔ]Øp©ráah×€Ù`0ÑoIEÛ‚Àšy´lÈá³,]gæßÁ§ï ÀÑžÁ#I5çoÜXøüsi­ZÂÂ…&µÚŒ0uªM×®JNœ1£HUdþcùXŒéÔ¼¹ÕD_¸ð¢¯Yžž{öÔhÖÌÁÆFÖ¸ñÕ½{_4 ä Þà?ð$ àdý4“ª<Ÿ¦*–vP1©OK£3s/ǧÜ0å]‹¥ðÍÈ6Úò,åüÅ•üWàš÷èþãˆd<à.úÉ\^G¬={ö <8ÿ–Áƒïڵ럚Ïsñ?``9¹“ò„Ì"nqz;‚@j FOsõ}°ñ$3ƒ”Dü†µšÇDmBêˆ>žôûÐÝEï„é6†ƒRc€È-»•Ô3pWË!k*è‰ÑpÛD¬+=iQì,Cý,âïñ{yjXb›NÂ.W£Z )ç8g@ïwê=\´@R÷ ´G3!¶¥T,ÙÛˆŒGÛ[ÒÔ<ʆ‘X¥b Åðj ' œCœˆB’2fçpÐ À|g$&~È`qž%á¥`„©¦Dq:Ï6`Y5rLh |‚)ŸSfZ-ÊX“©§ÓžäΜÖo;Ôz:î ¶ ŸE)c]_ &¬äô\‡®ð}Ép´"EMÇ%¤1b*•bJ2³¹øÀb³¹»ŸôC€¨x…©ÈkR)W>DZûŽs3ÔÜJ‰Žeôx3£ÀÔ©aófÓäÉæ…r9³fÙx{Ë-Rÿö[IoŠýûÛW¯®ÒjÅnÝÂcb^´¿¼ƒƒìÀ>>–Ö;ßœ>ý±ÉôúæJ¾Áÿ¾ü5h\éi~¨ƒ•ˆHzúž¤,å¹_­@tž½–P¬O×ÞR¤¯è$®éžûQÿÐåe•üW›žyq¦XÄÈÁ“ÈÈD¿Œ¾WÕ‹ðÏÁÝÝ].—{xx 0 4ô›ø;wjÔ(à}¬^½zHHÈŸ>ЫÆkE µ£R b£ño"nþdgF…fˆ"rw ZB¨2†ô;¨µXWEj‰]{´¡dÇã=ÔÛQÄö]ŒWÑï–Hû‹Ü‡=–ôÕsWËv'ep0ßË2PMdáUéëEƒ2£8ï:‰÷¹Ú‘‘©¨G™Ëh|šÛ–Xó 5•BIÈ@’ðæx7Ç-í/D|ŒÏD~ôhê¹sé6Tus3—xÿoð_€Fg Ëœ»ÿþÖKÑ‚À¸6s··®æºé|Ô¤m·|§–Á(NÜzhšW=çWÚöIºvâÖÛ+Õ4˜Ä1ÍeP×ÛáÀ­ø9ûîOí\Ųà åÅ•äG³*Îð¢/SEèPÎþ…'P,40cU„u€µhdPYÜ‹h/€"üËÃÇ/¶ûbXüÒÇ,;w?~|ݺu“’’¶oßÞ´iÓƒÖ¬YHMMut,@Òãää”’òï¥U{­«o\jÖœð/KV&MÛrpÞÕQfNǸ°Ï:Ø‹Ä_¡ù×Üš‚ž€ ›Eé(“0fáÒõ$dep‡¶ ‚³h³É ´ð€=‰tRÎõ#Å¥4ã#8Ço†€×E–ÛàÞ–ù¿0+ÄV ²Æó'~’#ËØ;Ĭçp%‹Þü6Ue3ãl]¿Æ`æ­ÞÌï[u~Ò èøuÜô`éä&ð¥oøê7< ÿ §ªÒ½'é?ƒ.͘ÿ ÝZT•–iý(—bxi‹jJiÿaϽLŸü¸¸zwàÝw¥7ß´Õ­+œ?¯Ô×T/(Ë œ·c‡©_?Íή·H˜MMµŒ•VòÔS.?ýtw5/ÇŽŽY·®6.Îøí·õ‡ «¹lû¿…èèÒâb[«VÕI>ÄC\¯"¬zPàãÇš¼ÒÿeSL–¡é›û+VÚ«'ßêêçl<“6bñ‰?E~.våÑÃòÊÁŠU„{¢2û}z£TP«R jæýë”v·UrO`¶J_ßs;ßX°§>ê½Þ·à†¸s¼‚mRS„ßQj Ût Žc^Žk_A{—U„ ÿùxjBÿÜÀøæ›o¶lÙ²k×.@­V—””¨T7œs‹E¯×›nFý߯"lÖ@kOƒd%““fM‡ ¶ÇP†½¦bú£Ô’u¯Î(uÈÎ P|§NPx§iXS1G=A#˜ÏŠ<v"aöŒ—)4³Ó‰~F.å³Ý‹ž p¡­ð¶aK#¢5ýEÄ8"}ði@%ʳœmMH ‚s('ºµëá.# Ö»‘ÔV!î$ ˜Œ—ª<¬»ÈæáÐõ ÌG0S[#” (`©z36v\G}àJc5Y6>½(T ¬A'r¨O+$cõrgAC$™E \ª\ä¡ek/œÕœÊæÝs•î±^Å–aøè¸Í««:…[ø²n,J‘ÍQ¬:[u~|Ù<•Ó‰½Æç»k˜ÀŽwh@N¯­ÀV-ا ^äÈ9>[KFnU©–UŸ¡Qsø»kÊgŸ<ŽÉã8Æ»×Ìš%¶l)ÉŸ~Zs PX²ÄÙÃCŒŽ¶-]z«æƒ~~ªE‹|u:ñȑ҅ ï.§ªsg§ˆˆ6¾¾š¬,ó¼yñ'^ÎͽÓPã}EV–yÖ¬˜_¼’žþ7}»=Äß ¢ x:j†·ò=2§ÛŸÖì©?4«kφöj…N£ìÓØóÈœnåÖ0¼•ïG…z;iµ*E§·MS«qÃ\GßP¯Ÿ_hÛÈ×Q¥]uê1íý¿Ðân•ü¿¡VŠ?¿ÐÖA{« ƒVùó mï‰uU1à…ð ȰÃY,Ï¢ëÃMÒÿ/bøðáÇŽ+ßwqq©â¯ÊÍÍ­âÓú{A~ È!¢<´•<¼®ÜùÛ—å ¾ò§cäi^ò$QÞ4M~ùçqò÷òGÈç?•—*å åóÏÈۯ̑Ï7‘ÃsWÈqŽr¬F6í” ´r¡›MÚe–uf¹¶Y>‘.fÈ Ìrò%¹÷y¹Y™s^~s¿Ü3IÞ ÿ¾N½S~E’­åÏËS®È'2åÌOäO–ËË‹åâ‹r¿ä¯çÈ?™dó59g¼¼~¼¼>_.5ÈÖ×åó½äýåLY–÷É­ä =ä‹E²U–åU²¡–œÖAÎ,“%Y–ÏËÒ@Ù¢—Í'e©ü¯þÁ,·+–›ËÏ™äv)21òFÛs¨Hv —Å0yW~¥›6ó²Üå¸Üà œmªt|šì½V¶[.¯Ž­zŸÏdÈ ~”þ ¿{¼†YXyZv|KVÏ–U»P–åíçe—)²8IÞx¦iZ®Üy¦Üó5ùõ5H­6yâÛ2íåÞSe›­†¾Y-+ëɽÆÉÙy5H32åfdœäï—Õ •e92RêÛ×âæfÞ»Wªù YÞºÕØ½{Ž¿æ… –›SŽmÛŠœ£Dñüöí…·>³:$I^´(¹~ý°¶mý¼Ž._ž.ÝtD÷yy–7ÞˆÕëÁþÞ½ÏFFnÍC<Ľ@l–‰ìžÝü_WR#NÇç‡ÌÚÍÄ Õ·Y»OÇçß^Å!^–4²ùKù·Þ:¹ÔGNë)gåÈ6¹ü߀˜û³Ý#==]§Ó•ï÷èÑc÷îÝ¥»wïîÙ³çþ-÷ ´«N®D¡Q;€´ ò2ÛB›Q¶¡ÔŠ ¹‘€~i±÷¦à2ÚÆI?á: {v½MN¢hŽœ+šCº‚K*ZHšÙéHOsXãK …Mµhi‡K!)éœkDà<‡=ð¨KÝxâs¼þxQz„¨`Üšámº…+:q—aqF¤ž85Å>ë*²ÇÑÕC•€í;J€¦ÍLð ¶râ‘I*ôçl̾îUi¦fŒà¥’¯§œws`º<O|ÄÜz”Z¹b`Z¶ ®ž>|ЊºL>ÆÑÊÔN-½ø¢'i%¼qŒŸ«1ómųm1Û»–èìªÒM™=IfÖ¯\H®*õqåýñ¹È¿²;¢ªT!òÁ‹x¹²/œÏÖÖ0ùÏ>ÁÄ‘cæ‡5H½<™3`Î|’Sk8!4TèÞ]ÌÍeêT[ÁM¨øÖ(’“mS§šL·ò‡ä0k–GÇŽºÉ“SÏŸ¿;Ž+AॗjmÝÚ´V-mf¦y„KO=uùÌ™[Õ0Þdd˜çÍ‹¯WïøŠƒmð`÷Ï? ýŸ¯Ézˆ¿-†/>á>uû×âÊ̶´cy†V3ÿj÷_É UçÈw{ÿ8©å¨6~ }ìÕŠ>µ­õÓäVQïö¾ÃÔ«;š!<äbû€bàônˆÿ/vëýÙî~ùå—N:•ï4hÅŠ¥+V¬2dÈ=ù¢û@/¿BQ>¼<‰:AßÇ)̯!¥ĆÑñITj\ I:H«i˜ò0æãÝc2ÎÝQØ0ÇkRe{q™‡”Œí yK&I抹V’Ìvež‘¸Nøñ‚‰¼RRÕ8»Ð¬Œ¼®¶al>™9¤èqj@ól²£‰nB“ÚxgQxøN4 Â=ÒdŠàÞ÷dÊR(3!µÀ¥v™XPÔ w”¡(“°mÂØ­bGÄKpÙ=è¡$ÊÆnž-mµ$Yɰ±³”ñ4ÆéìH’¥ÈŽ|†»Qž~­èïÉ%ûrÉ1ÓßóÆýlîFZ%V¾¹Â°Ü*¸¢ƒœqÑRlæËÚûTùMÒ;„øûlûöíK–,Qרvão€Úƒuú$À杻¹ÄÁ(”æbÈLàØf¬&òÓ°iˆ9DøJ\ëáBq!…—I݃¾%eÉ$þ€¦.ÖBòŽ‚„-ƒÒ,ä¤+‚E†™«*Š ÔFªÄ®6 9¬t§“™¼d~  £GÅœ ‘ÃIv¸à⌳ó!ã«AY‚qçüptÅ>ž¼Õ\†Q+Ó:3(«ªl¬sI‘ êz(-ÈK0H …#æÃ'H§‘ç4”ȼl$Z‚rÖ7L2aF¾üƒ~>$ÓÂÞBž»qçjÛñV‰oY^Ù«ôv |ìÈ51x¹•sožkF{_,oãRåÂQ໸ëpÒ2teÕ’ˆÞ½šøF,æÏl×?Cï3Åו‚Æ~Jqµd§ÞmèÓ†}ጟ_3Vm_ž{‚’2^~‡k 5<&o¿Fý6laÑw5H Þ_,(W¯–Ö­«yq¨× óçë‹‹åÅ‹K6n¼kêóÏ}]]•©©–âsrîz‘'Œï}æLëœt:ž}y“&]îßÿÜž=¹÷ƒÊ!/ϲlYz»v§;t8½tizË–#Gz.ZTïÛotèpïñU0g`ýEc›…ú9Ú«z²k}÷mÓ:iQcÕÛýUò·‚=Bc`/¦+Xµ/£Ò±,&È»G¤¿¯¿þúš5kBCCííí»téråÊ•cÇŽµlÙ²\êààpàÀððð€€€€€€Ó§Oïß¿_§ûûzÐè*Âì,ÁÓKîß…:n”–T—äó88£2 Pи a8y¡ÈChÔ›Äm¨õ·#;϶”îGíŽÿH²¿@éL­É/Bá†ë#˜×"Hö]%Ö‚·…Q%,q²çdÞRãåËüh¾2SàËÀL)„©qèÌ+ù\DYŸ6¾4Zà š! )E^Í~=öãé-¢œÇ~=šQ4n‚÷‡\Τ¬6ºéÔ/Áö$1®(‡àú(.ägÉ/C†Ýxì×°B®ËQ–sö)%^"PÁr»?Ö2Ǽ™G¶Üè½Ìðj=/SGÓî¼èuãþ­NåÛD -,hÈ€ ~¬2Ý~ÃA… °£7š ^&üF‰«¹ì}ŒÚ•½MÅtüŠ 7œµ¬[µßsF!Þ#À@÷Š FF¼RZÅÆ9U]M’DŸiX­8;°yA ލ1Ó‰IÀ×›õ‹QVsíÜËÔ™èu¬üž&ª=HðÝwÒ¢E’Ë—+|}k^‰~ùeÉwß• ‚°u«Kݺ·rMÙºu‹sqQ8;+V¬ð×ëÿŸëœ¬,ó'Ÿ$çXD¯²Ó8“ÎùfôLãÚ)vèÑÕ¡N )9€§/nѤl%ÌMwêF“³’sòÓÔÕ î%#‚|Šð:CÉç¤`Ó#ŒÃþ$æ÷(JÃÌG¡„ÍÈsùÃô½=f™µfæ]÷ªtÔÒמH3ã²H¹¾Â©oÇÂ:/fF"'+T?éGow"‹yòl¥.:v ¶ôâZûÓ˜t¬Rå KúQl&:ŸA)¬ìâòv`Ç$N§°>’™;ªN—·¦O|_î­*ÕkùêŽ_fsW+ýE–½AT[òå/5< _¿‡GOñö¢¤úЫ磘øæš:h=û¬*ìÛ'Ošd»ÙcêT]ãÆª‹-£Få·z­8:*vï4™¤M› ‡ K¸uæÖ-àé©þè£àÍ››¼ýv ¿¿xÿý„-Nõí{nêÔèõë³²³ï¢Xn®eë֜ٳc 8ïí}lüøK©©F›Mö÷×ΜY'9¹Ó‡=´®lŠÇXjöÂþ!ý;áo8$À´a^Ùǃþ¸VsÙçÃMkgß/šCÑ,ŽO¡öR¸“‚Kܪ¢ù&ø{>0x  ¬rh4äS+;íA¥¦Ä†VGq͇áàA©„Ö SA¢Ö“} Ÿîhݱ8¢°Ç”¶¦$ŠŽ { Ó9Jw£yÛ,›FËDÉlÐÐÛF²‰®<* (%Ê“ÎZ¼eäNÕg°»d‚iî¿Õ5Nw¥«~,d ¦½ Eù)d ž':+ÒI’ÝÑ4ÅäßH³!÷ù=z%¬#€vZÂb € ¢PBr2 ‡/ìPÀ!+G¯›S¯:3À³ÌkyX¯ÿF¹ò/oÚØóAéâwoÕc˜7e6f_¦ Âq{¶÷ÆQED.oW&nÐ(Ø8”Fn¤3ý ÖÊQµ†žlZÁX–œª:W-XýG¢Yš}Õèyƒ}X1A`Û)^¨*õ÷âÇ×Ev†q¦»³³ž£ÐÀ0ŽWK–>} @ò Xô} RA`áB…»;IIüðCÍBA`ɧ  Ev¶ôöÛ7i²sžžÊ+jûø¨._6½ðBŠÕúÿ¹¸(Ÿ}ÖïÚµöo¿]÷…ü¼¼ÔV«¼xqʨQQcÆ\ò÷ÿ½_¿s¯½;{vììÙ±Ÿ|’4o^ü¼yñ_}•òÃiï½—0gNlß¾çêÔ9>bDäС,H,+³©ÕB¿~®/¾X+%¥ÓÎ͆ qÓhþ=Êí‰?¶ Ú’iuߌ·Åœ¸ý•ÿ%üÏ ø?‡iÃ<ó†ùÖ »Ë>}”²¢²…#­ÛÌÛÜskÆkXí>ÅY„Bl»(P ¼Œ÷í/~ˆ¿tˆAûw!ì(“'²ez’v†R§rv ZséW$‰Gžçø´OÁa éû)ÿÆ1ˆúýIXLà¿O`8EðR ¯aKÇw–QÈ…8ün‡Až‚“9L±ïÆ/él*dŸ7/I\bŽÀV,ÞÃkŤueŽå¾õ!xSÂ8±Ÿýu©;Žq; ßÁ©ø¿Ä0’¿ád(ž/ÓI@x…³)|‰zèq‘–Ô»,¤¡ä&býç!ØŸa›Œpey ðSÿ6 rN³cc`gMÌwaŽË÷Ê*31–Õ9tvà@#T×—…+Ož%¡Œ?·DYa¹¸?¾êÀ˜º•î|RÃ6£QГ¯úT—ŸÏ3ágdØ5™žÁU¥ŸîæßëpÓ³ÿåâfu«f¡~º‰ÿD³@v¿Wµ¢œù?2ïBü‰XŽÞ®ªô£%ÌZ@pç¶£«&=~’g¦¡ÕðÍg´mUU ìØ! fS©ˆˆPÖ¯_óºùÜ9K¿~¹YYòºuÎ=Ví;*#2ÒøÄ‰))Öqã\¾øÂG¡¸kq›M>}ºhÿþü°°"£Ñºo_н»Ë¡Cù@·n.‡çÍ›;œ;W téâ|ôh0h»Ù,µmëØ³§K»vŽöö`/³ÿuÔì­ͨwÔ¾~¯ô;,/CUƒ«òéš»ø—ñ øn†t_Qn]ýùQpô‹nN«ÏÒŒ®©žùî!ÁhraþçÑØóHÙJþ0\^§–B¸‹ÿì‚ @M‹Î{€–¶q[<ø–4óeá»…tïElfæÈfF<Çáïpp£÷PÒ/Ѱ'?F­£ûD"ÑtE0$Ðù+®NAíN“×HœcO<›R¸ÇgÐK˜D3ݦµI|#òl!Å,Ð0@Íóq<­Â+˜ áYD—ìÞTµÁN9&L°­^-M˜ ~÷By“´Š¯¿.]¾¼,'Ƕm›k£F·É½8uªtêÔ´S§J§Owÿè#¥ò^Æ;$IŽ7FE•[SSM€^¯Èζf³”™iööÖÔ¯oïWÏ>0P{O,¼‡¸¨hFn©Ý IDATOȆ\)íŠy÷"kØ:Ànö.eÓ~å§ÙbÃMë^“bN Kb`kÍcï(t­®¡ú‘ò}ÝçŒ+§ÛbN:õÀWǪ̂ñZëÉ_Í[?”Ò®Î>êáo©ºTkYu/ Xö}kÞ¶@*HW4×<õUÙýdC®Ãr#*ÍéJnv·m—Y/ºý¬üyþåC¶K‡o}Ž¢^'E“Þw¨PÙ°»¢Q÷E¹HMÉ|ûOp!‚Ò§‰UÂ/Ô«ƒF¸kë>ùÛ?ØÆmñ XÒîÝŠþý-¡•!~„㩱ßCëŽä_#-‘þ ßAïÑ$ýNa:]‡‘z– Îä#û=Þ$v)öµð s Á¯b9Dáaê/¥dÆ3øoÇôR¤ìpØ&Ì9+r²yfN¸±9“ Eñ`¢¯$6ˆ¨[ðùI¾ÎçZsž²awŠ Ç2ï,çNsZ…êiž>BÔQ"Ýq~ŽWÉ]ÃùDò?a€ºÏ¸|œÜxN¡^)Òë$…a˜†ÏhÜd˜Aá~LÝP/Â8ü¶ýÈ[QöE®I¼jd»…¥öŒ»^º»¸eÅ\³p¦Áמ4ðf2‹ø©.ã*4e9žÏÜ«ìÏáËP^ªSé>¿Á–$RJù} *–mŒfQ‡“Y3˜'Tž™§å`,öj޽ˆKe_OQ$&‹:îlžZ->Ÿg³'‚Ù#™ÿdÕy¿’È´ÏÙβ7Û¿ª4ò*¯FB2ïý›Á=«JFÆ>ËþÃŒ}œEU•……L™bÛ¸Qš1C|÷Ý›úx¦N-Ú¹Ó¤Pîîèx«åĉҷÞÊ8p äÑG×®­­R=´r¢fÔè°1­œnÞ¹PÙü»™;)ñ|Éܘ+$â(Õös*‚ÚÖ¨¡º%zI™±ž`7c“²õ£UδEí+ý ï‚`ÿúêÖÀ>`ëù]e ü)\|åÂL$›Ãj A¸Ã!ÝZÉÍîvwÔ_õˆ¹šójÅcCч8ÖAiBÉ5Â0\ÆáaCV âCëï€9¯BìÙ£.Ê.î4iF¾”ü†ÍFA …Y„ý†ÕL~*¢ ¿¾ÏæèkQ”OI2Q8¶ÀœMü"t-‘JÈX…¹”¢.ÈÅ‚y›€”Â2eL9ÑßJ~>›<é¤ÅÓBQg¸é»cÁ½^ˆŽ¶>õTÁmß0íÛÛ¿û®·££xèPÉ”)iÿïœ÷‡øgBÕ`‹ý#¥Ñ´ù]ÌeÊ6Ãô_§é¿ÍR¶…ÕlÞºàΊ^AúÅÉúo³”í,û¾­~Žyû'ȲÝ+[–íflB–Í»¿¼¶ì^([ Õ®_œ¢ðE²Õ £[ éΕü¡/š:(oÈLÂ$¸H"Èÿ/ï!l • ºu“ŠÊEbbé6€Ö¨ßŽ]IH I7œ½©ß›z]H¸LH_Ü‚Pº£u"ù(_Á±™Wqï…]0£kƒlÄnš¶ÃPMAÑË‘Ú@„Ž1jšÉ˜ìpsåQn…ìt£­÷d¶ÑÝz Ô)œêÀPOj'pÁб;ÝkQë W”(Zˆ×a"˜Ÿ¤Ymœr)‹$3]ëãð-16ä.8öù!v?’ ÔA1 ‡¦¨Þ¥¨ ˜Ø ¡¼p½¢p’šq*š‰Œ-¹aNýäAS z‘ù~Œã<èåD3{&ÄUbxÒyõéçÁøóœ¯`{‰kºÓÁƒöRR™~ezkf·£¹'Olãjer,½š_Æ’W‚ÉÊsªÎ^°ëž'ȃeGÙv®ª´wsÞGh>ÙLR5vøÉƒ™ö’Äøw°T£ƒye2ƒ{Ò0˜I³kèBؼ óçЮ5ßþHnMmÚ»vÞzKѺµð ¶ÌÌNìí…Í›]‚‚” ¶… o“ð´mk¿Ýà`UddÙ€ñEE5w?|ˆ‡¨ÑÅKÿ`·“âNš1 Î>‚£GyÒ”P­èÍ¡yê+Áµ–àè¡yâÀ–Yýœró¨ìÓ¡Å´eŸ ¤Ä;-õ¿«Û’Κ±ŸÎÞ‚«ŸfBMeÀ·Ò+ù_a":à*eW0£™O-BÆò&¶6îŠÑÝr¶:h ùÄ iÓVÌÂOâèÉ„Ÿ&þ§öâÛˆKG‰½JêEÎnÆ·ñG¹¸ÉFÊ1$-™‡‰þ·žä$éœûP°—œ]hša¹JéeÄ`äDÁ|F ¹DlPÒÆÄ~_9е„3™üäCŸ22ò9Ë©:tÉ%úë|¨c‡CÉgØÛŒfŽ8Fu†3­!™ì}œuÅ®µcÈ=@œŒ<–À Œ‘l!˜‰ ~!g'ÀÓèÔÑX¿Àˆð-Š³È›~¾þKûÊŽl™³]/Þ׋¬ò"_bA>ßU°™Þ÷ÇCE¼‘QÑ”Uø¾‚«šÔ2"µ‚³ÊNÁæ^$—žÃØÃT!¼|· v*’ЏìÒJ"g~Ï™–žæ“jÙ vùÇžéε,æ¬çjFUé¬tmÌï—xlæjVÔܧ¹–Ìñ ¼Y­*Pøö¢®òÛ!¾ÿ¹ª˜9:µÙ´ƒjÊÓ^]´³#:Zž?ÿ¦¬ uê(-rtv_}µè¶ì£@‹v?þèŸ`>xÐЫW\zúÿ$OàCüõ²ÁÁíy©€èZ«ü£èâHù5µ‚l5y/& áSÖ"'!?ÛÓRÁ ¯¯.š¨˜ãŒë „_÷W)V¢¥ÀÊ´Ä|&,iJWWJ%f\¤¬Â/ÈSËŽ>¸jˆ-fNå’…Àª´ñÆ`fÚÁDíåhåÇÊш»£ù­2½BçÎgögjo &f¯§¸²•"̃ …Þ©ÖˆÐÅ5o£Tp"ŠÕˆ¾^|ý6vZ¶ìãj\U©(òÁ\HLâçõÕŸ) V®Tôë'œ:%/Yrӕ‚þý5²Ì÷ß—ž?ûõ\ãÆÚ°°àÕ*?ñDRdäÝõ+|ˆ&Lëßõ;—t.€”“XþQÊIøó € rÁ–‡T“wJÊŽÿc'7 =«Ÿ#Ø;ú ÖÈå›~éí=µÿ zW@Êû#Ø/eÅrÜbHw®äåI³«È±BmÔ“ñ‘U€ÅáÎ:ä<Ä_€ÙÀ²^¹-9:Ú¶}7nnlÙ@Ǿœ?E|Éר´„>OQZ„YM^ û¿¢ùX’N’JÇ¥Õxö¦(š‹ŸSû9òO‘ò .Ã(:Ha4ê&”lÅ”ØË&Á’#ÐAâ7ÝvŒ6qÒÀb/^4“É7>ôVá”ɾxÃgy9†ªÒÇáù1ì<ÌØWj#Ö©Íw 9Á ¯ÔÜÚß_xé%ñìYùå—mQQ7ÍšzõUÝôéºÝ»MÆåçæÞÞi_§ŽúÈ‘ F´GŽ:uŠÙ±£ê¢ü!¢²©ÔQöåãÖ°u‚zÀôòãÊ&}ÓÚYrQ¶\nZ3P4ìV.œ½Óú¹ri”~ÕøãóÕ5›VÎ 2䢬rê&Ej5À j˜·~(›J«Kïá€ÅZ¡€iÍL¹(KÎO3-›z3ý·Ò+©eÃîêsï|»“ò@ÅÝèT6ì~ UW1.&#Ó»øk‹°l$ù*E/QïNþº‡ø ð WZ¯\Q5l˜áááæé)gg+õ6¬fØHŽoÂ^O÷œØÅ“ÓØý^uèÐÌk4éÍïï¡ÖÓc2§?#t"æsä£Ó×\›†¨¦õ2bG¡ ¤îdOFÛ§({EI?ÝÆ&ðs6=EìÝÙË4#1µx¯s4_¹ÐªïŸà«4N·åEG‚×ò®ÕãÌ,Âô?éÑ?Ïó¥XÖp0Ã3<â‹Û;¼DÖp?Fh*e_på*ÅÒ¬!N ˜F- |O`st #7óóèÞÂÈVX2à Ï_·§G”²ÑÂkíÿXì˜eº¥‘k£·–/=n]í)ä‘+¨Ö…0Ä寽½b ëqrÌ|ÔUºíëâ™r‹Äúô©ÜzùB6WSfeQ/^¬üÒ–e_ͯèÂ/cq®\Tx-“¶ïPXÆ×cy¾GÕ‰þ| 3~ C}~žEmJ"«g>`åN¦Œä‹éU/,2Ðl )|:‡ÕšóÃDzi;ŸäÇEˆ5-Fž}Ö¶d‰Ô¯Ÿ¸q£ÂÞ¾†£QîÖ-7&Æöøãv :¨Õ·Ï«5åI“’×®-ÐéÄwÞñ~ùe÷ÿåd܇¸g¸)­Ô˜Õ_)ÿ$eÆ”ÌjZ±(OÐØÛ¿}RôL˦š÷,þS¤n/¥\”Åkd$[ñX% 8ûÈéžcÿÚ>Eh/*—Z/ì)û°ß1¨´Ê–ƒì¦ýzÏl ßXöùˆ"W?9/•Êe·Ò­•ÜCT!­Âƒ¥1O=bî=ù"þEŠFã6?à[b6’ÜŸ4a×=U5ô€ Œ;ân›]ÿAtwŸ?þ+*•²kWeF†,‹¢¿/Ç3z,ñÑ„¶3Ñè6„Øu%ã"qát™ˆ!÷ú(EÒŽÑòe 1\&èIŠ£PºàLIº>¨a7…ëAAù$¢E椂fdåŠD±žÇŒD—Y›™FÒŠˆ±Ç[G@‰éœm£2ä‘VHNKº1fQJisšæcH$+žôö4 Â5‰ü0’ÚR«ú,qN‘7_WTvˆÙXâ0õÀI…Ðõ5¬›06E„Ò#F#¯Dzäz÷õ~J®Hì±"ÊtU(è7³Ö@t£Ma%ñ&~Ì⼯ûžÝÕ4q$ÙÈ’$üµ´¬ÀÎê‚U&¾˜£X ¯ ¦’—ކn$±ä Ýh\þJx¤×r8Ë©dF7GˆŒŒôòòÜô„ú›ÅÅTܨ[ÙŠj_Ÿ¼"FòûeÆõ¨d ‰"M‚¸œÀÚ½Ôö¢Eå¥FM«Æ\‰eù&tÃÏ‹*èÙ•˜8ÖoÁNK§ö5$áyìSçr^FÛ ÷Ág£ì*éž¶1Y >üšMo5-ù>… œðãõ¬WùBG¶,ÙÃk$´`b-:¬d¾ËcÌÐn`ƒŒ<‚zœÞfu1¥éÛš¥DìæZ7_ ­éN¥P:‰ºORÇ‚<‰¸ ”<çT¼%”¬¥L@^‡›;"ð2¶È^° eyà6¦”qÖÆF^çÂè/qRâ}{F˜ /e©#m,d”q¡ˆ]^ô,âJË}h!!tÍè¡@™Â•T¢»Ò5“Ìh¢¯q­ ,ØÒÈ9À9=êæxÇ‘·‚³%Xšã€.²u$ÊÐûVèR0¿A² Y„q¼Œå ¦Õ”vð5ŠóÈ¿ ­¼ÎÚð/5A"©O”Þ`Æï@+ õT<žIÖõr?•Àúz$›8[¤ØJ‰íóê¡Sebh8ÙæÇÕ"«»oàbªÚòùÃn”YH)fÐ M•Dë0§q¹LÝ̱„J"Q`ùÓ$ær2žÕèÚ×gtWâ3ùp=™U¥‹^ÁQÇá³¼ñ]U‘Vìç8ÅO¿òóö¡瑚΅‹¼ù^ R`̱uk!5U~üq[ÑͳÒ ÐLŸ®kÜX9qbÁ¯¿Þi… ¿¿êС Nt …ðý÷ymÛÆ=Z-cÿ!â…¢nÙk\:¥x¢½aŠŸõÔA=tÎ_¯äî PÖ¼`Cž‚7p‰Âk¥Qö}nºniÝZg;|Øœ-ûû+﨡²R)të¦:ÔéĉRwwå޽Ň•tê¤ÓéüÒCüáhÐEpp—s“1•FÜ^ûÔWÊ–ƒÿz%wI’…ë/ Šû÷ j;D3Ò·ÄDcJ­žxYVrÞ€)bþºOç}p‡ªæÏŸOÜþ¼ÿ~~€ Œ;Áƒü‚Öuëä¯_¯èÚA°Ô­+GDØ~§´„ŸWѹg~'%ƒ+løŽ.OP˜E™@æ5ö.¦éh~'þ ¢7âØ’‚+D}Œÿó„û^ÏStŒÌŸpKÙa —¢zëaLŸ‹¼,fcž—-\5ð¥Tx±¯€]uWÄ¥d6xÒЇ橜¹ÌÖfôP¢ºÆékœnK[{ì/qéçêáˆ÷E¶&ÀdÚ¤R¼…K‰8¡z¿‹.&&³áüQ|Gæ%Ê€!Ø=Ž]æ…—ûÆ#N@¸ ¯!•;›6ØcøÈÈ·×ýOjØäFä3+P 6´ck}’MÌLb]…ãv 6·A¯$ÍÄ‹‘•ü[lïCL3Xx©Òì8kØ>“Dš·~¯:w=ÂèæœŠ7>¶ªoV–Ldß%ž[NdåN8¢ÀÜÑÈ2+² UûP>|CŒ›œj.®çÇ0¼»0ûãèÝ›4bÜheÒK¤Õħ¨Õòë¯ >úHZ¼øVt sçêßxCð iذ¼ˆˆ»Xä5k¦ <ØéÌãÊ•ù:Å|ùeŽÙüßOq0îŠ3ú!âî îû’nA¤~i‰þ§bû·+[ üo)¹CìÝýÓ’SV«ØlÒŠŸNÿ¶ýò½ý "°Š„£dû`7†`—N“âɦx>Äýƃl`‰vd,›•Jó¡C¥x{Ë11tí`S#œ‰ÌÚ8ö!XBÞI´ Ýðlƒ[1–µ$¡Ø×î é2ÍÈÀlPl¤lÒ¶ -¼N³ÛXÁk€wM„_§ƒòQ°ÌµÀ÷Ŭ¯êêÈ«¾È0'‰ˆ ´‚ÞÖ¶âJ1ËSø"¾Ò,´vcUWâŠyû;*ÛCuœXõG’Yx†õ•y³"ïôC©ÖOäÝ}UgöÉö<Õ™R3³ª±z»ðÍD…[ «öNû×ãtmNj6ïüTU|2›Ýغå›jNË€>ääòÆ»H5Y!!ÂÓO‹‚ÀH'OÞÊî™;×aâD»À@åŒEW¯Þc»V+LŸîU¯‡ZµTÓ¦¥™øÃ¹ÿ3«´TZ³¦à‰'z²|ˆ0súö™Ó·[­ÿ,û{ï®è½»££¯d/û1Üd²®\zæÒÅÌCûc﹇a'©‹«Ó(Š!W0Žæw¯Ì|¶:ä!0þüM›Ÿ8á2p åÔ)í!Br2n¢NËñc<>†¨Úô $˜‹tÀåã4ëEZ$1at–ŒHœÑj(N&t2…É8BèL OcÌÂg8†pPáØÓI=v±…#›Õ0™SpUÉl+§l$;3/i IDATÃLf)*<íiPÈÅ|"B˜hÁ˜C´…²& *$;™«*4MiW@Á%.ÉÈi B™Df éhT÷T ÃHvCˆK(Î1‘ÙG?ì[¡KÀt„b+r;ôZ”‘X7bìÆ…š#DÁ*¤Vˆ!@’Ài+¬ŒWc=áÝ_IŒ•%Eô±£Öõb;=F™SÖåò¸Ž×c\žjš:r­”Ÿ’ÒÑÔñÆ,ÔwÂNId>Ëcà‡O…J¸G¼t\Ìai½¨U¡tQ¯¦k ÑÙ¬ˆÀKO›ÊÑÀ¾‰ÍfÇyb³Ùº’(ȵ’ðk\Jf@+ì+DEÞmHÌ`ç œô´jPéB½=:áX³ýp¯\¨(ôéÁåh~ÝŒkbmhÜXNŸ–ýU;VÔéj~,µ‘‘æ}û,kׇ Ѹ¹ÝÅRÇÅE1v¬‹››2.Î|ñ¢).ÎÄ_I’í]»êìoÛ®œ>•\Th¬èªPˆÀÌéÛ÷îŽ.ßî ?•œ’\èè¤qr®V= €,s&ÆÅB*

tÈœœlûåóèÑN^^¿O7ŠˆP?õ”w“&ÊÌL˹sÆÃ‡õqqº‹M‚ 4o®úÒôzqçÎêÕ«+<{ùòr›MÊɱöì©yùe¿aÃÜþw¾ ~ìßsuÏ®4“É&I’Ñhͼ^a4Z[µ Vã©(JF£µ ¿úÌ©™LmÑ@Ltlؘ̥KåF‹Å.IØlbU•éRj±J%iî}{ýzø«+XéeçNç^K/»ËßþÝWΞÉý•3¯W\½RRYaºËoYtX¿"£žÏ¦@vk{¸ê‚òotW!ÿý Öøßyoîÿë ֽ̃eÌÈЄ…]=ZUU%iµžîîbq±W‡deÉ[6JsÑiiî‡ÕBǤ'àì‚ÆBeÆq5I¤YSJÓi3‚¢ éùY›‘¬„£x®-ñðDw÷p.Çrç!8k±DÑ[tòÙ#àiç%-Ÿ‰ú›Å<¥^Œ Êág ]ù:™å\s# ;Àº ‚hÑ›1;ÙYD‘ã—ĵÃ$O3LƒÓ§œ(Ç€ë,zØ‘’RŒ¹³>¥ð2F'ø‚iå¤A¨_Á `"v#’+µ[\ò$Æé0À%ÔÒ#X%F¢—Љk|ø”Ûv›D’í7ákðVÉUœªâh/ÂL8f;c¢·¢³qtÝÅ&òd,eFr´ÄOƽÖrìØ±>}ú¼\*äô‹4v`4¶œå“½¤;›Î!uDÙ%L\L¹–9c˜9¬þØxöCÒs(®àôw8Õ5¾hõŒ˜NU5CûñÑÜú yç\"W®ræ> }e ˜1Ã~ýº4hðÙg¿Æn0H#G–k4Bzº=&Æ«eËq·ÑÁƒº%KJ++m2™p䈾o_—ÈHõðánƒ»¹¹ýë6-›M:Þxü¸áðaÝîÝZ“IzðA×;u‘‘ê™3}†w‹ˆPÿv/÷ñ‹%).Ò=:9ªMÛÀ«i%«VœquU¿ó÷!Àk³w. ô–âbÝñ£™Içó§gv¬o\yçÝ&“íñ';E´òW©äz½åôÉ죇¯…¶ðyò©.õ:¬cIÍñìWûmÿùbvV¥³FÙ/:´_ôD˃uï®´K‹´Z³»‡S÷žM£† ‹ý­×wi\T3žë±mË…ÜœJ‹Ê±auµy׎KéWJõz‹‹«ªM»ÀáFªÕ7ÞK‹öîºRT¤õòrîÑ;¤O¿æ7ãË“ â¤ëÜÝÕƒïÜÕaßMCp4GýW0dhøa ç½)ÀøRŸ¡E{<Ë1¾Å>\†Ñà òÄÆFÉìÄ]Ù•A€õÿÑ ¿‰I÷°‚q7¸—c°$Q ÷î5ge/]’ÜÝm/š,éøqÛîýäçqþþMˆãâ%ÒH8„ 2S¸z‘ât®Å;‚œSœY‹kåW(ÎB{¢ÈC¨ˆ'g-.½Ðž¤h)š‘Qùò±ØO`ùR&•H‰Qâ ’kzVy1Ú@j1ßùÒ]Äj ;—­áŒK¹VEN¢‹ÉJáP¥ýèWHá.d‘ÕPò+äýÂI`2²¨:JV;Â)„^G÷3y)TϠŇv)…€áïxKÐíÇ ðòLØŠøVm0VcO5¤‰|hæçÚØk¥ÀþäÙЊÌ.½Àî­`]Yfb+y-»Îm7¥Œb3£ÎPéí–³º/yʘ~¬N,¼BƲ!äé¸TÆÔØ[¢>}ú¯E#È×2á¶€÷q]èÔŒb-|M•±Ž¨©¯Žåj>/}Krfý±ñɋ䓒Á‚õEn.,™‡RÉÆì;ÖÀ¸Zø:=׳yæÅ¤@PóæÉÒÓ¥Ï?W¬øµFؾÝÛj%-Í6`@ùïŠÇrÄÀ®11!ëÖ59Ò-2R-—óí·åcÇfq½k׫/¼·aCåÙ³†ÒÒßè¿ Àzò¤aõêŠY³òúôÉhßþJ·né³gçÙ,©gOÍÈ‘©©—.E¼ô’ï}íêωٯö{ÿã¢)²¦!^€Íf¿½šÆEÒÜûñ';õíß8väúíudr —Ëœœ2™àæ¦ô@Ë‹†ÖhWw‰ïWÍH/³ZíÕU¦¿¤^L¹±Iä§ I'ŽeVTm6±¼Ì°kÇåû® … 0›¬ß}{:óz¹Í&Ök¸amÂùsyUU&›M¬ª48š¹ýç‹5¢ë×ÊW¯<›—We³‰%%ú˜moþ_W¯”®ûþ\^n•Õb/+5lÚ˜‘^VÿZÿ:‘"qk'°š„rŒn8u'ØŽ¸‘ÃÀQ.üžþîÇ`ý!¸—]„JŸ… ÎjßÞ-*J$Y@€¼°oo'Á×WèÒEÐVØ„’l<¼è7 ›ÿf”\ÁÙÎCÑ£ Ä^†‹#)ŒG®¦åt×@ŽWH¨!7!wCÕY9r7dÍP˜ÔÎÈ[C!è•õYPQÅáSdå3"ç:t§Èd ìÇšõh4X,tíÔÀØ ‚‚„ØX©ªŠ°0¡iÓ;ºHT*aìX§“'-YYâ‰ÖΕwÅÝp;<<ä½{»<ÿ¼o§NÎMš¨ÌfI&#>Þpú´±´Ôöõ×åo½Utê”aÉ’Ò¸8ýÅ‹¦C‡ô‡é¿ÿ¾âí·‹-*þñÇÊ—_.8}Úœlúùçêœk›6ÎÎÎÂèÑS¦x}þyã_ôíÒEãç÷Ÿ'õ¹?Û¶\ÈÏ«nÕ¨mû@j}võŒ"þþ®ÇŽ\7­Ñ[Ôk®Óš³2+’ó/¤TôVW•“Ó­p{‡Ž%5ÇMšx>û|¯ƒÃ*+ŒE…Z£ÑÚ©K0°eS²Ý.¾27zÔ˜6‚=Ò. ‚бscAöí¹"I„†ù<;«gô ee†â"Ý͆]º5<4|ȰðÁC[F¶ 8Ÿ]Ueª¹ø_¶^()Öõé×|Æs={\L)Òë-Ý{6~ÞœRVj˜:½ëÄIQÁM<Ïç›M¶ë¾ùuq-½ìZÆS kæÓ"¬a:+ö^ø*&7r ÊYôpFyˆä"*ö/üiå‚eò»3 ,\¸þ^øMl»‡Œ»Á½?Wj$Î9;Ûœ’Ô»·d2Ù¢¢äk×Úe‚¢¤„õßóÄDb¤Y—Ï’y‰Ç¦sx=M#)Ï%~-½ÈÁ÷pr' #×wÑ|0–J®¬`Ð:ò7’žM×å\}”¼E´\BÑl‹h´ ÃL9rå9«°Lâk%3Tt5qPÏw<ŸÉK2v6g©7]‹9œÍ¦ÖLÈâXƒéÙƒ‘ëy/™Ã-éÜ‹^¹ä&ЈFé<„N;9½™#¯0þ!"S(Š'§îiû!‰Tœ d#YShÞÍ,?¥ €œŸwF6—$¬¿`|ÊxË 'ÂgÈžCLÄ~ !xYM–Èy‘‰Žºà!´V±ÊŸœ4¡bl­ã¯¿;߇1/›g2V2¨Öç"'¦+ƒã)µ2=™ï£¸©_´öäçA ݃ÞJ¸“Bo=©p/6bèf$ˆôaŒÝ”Ÿ Û¦Ðÿ+<œø!É:ZÁ–Y [Â…\>ÝÇìê<ýÏf`´°ùÎj–Ϫ#êÉ‹™ó9Éé$­Å§®óñ•g8yží˜ö:Û¾¦‹MHSÖ­à­¿³èc¢Úѳ[oútY~¾´i“ôôÓö;äaawÔ±\\„;¼_x¡*5Õ>`@ù† žÃ†ý[Æ¡öíÛ·w~óMN]¶k—Ý$ʃ›²i#ã'³c#ýây™Øõ œÂáuØU¸xqp£çpäc2Î9})šVxF’ý =¡¿ÊÕ÷é°ˆ¬9ä-¢ùBJŸ§ü]‚–`œ†å+™r3Ây‰d%ÏhxÂÀßx3Ö@R!K#ÙÌØ|¶gò}8Ï•p)s™éÄàRr®p¶mZÓ¥IŒ#n8Ã'Òw ǸЊ¦áøŽ¥õÒ¾áì|†ãÖïud-æÒ×tU"ûM’»œâ–8ÁÃÙx.E÷Õ­QvC,G>ûZDû ä€6kxÖÈR3þoÕNVs<)9gbD§ß"nXÔÈwÅŒJãd|jwF¹ñc'޸ĜTüÕ<î°çnjK®ëXšÊÃ9õ!ÄxÏF‘^Éò$þ™5óúv¾eYz² —Jøâc¿çì‹8n-Å»óÏ=L\F¼‚ëÛ‡°ì9ÞúiŸÕ‚ÿ["¹Œµó™úw>û‘aL»ª д«>àÃoøä;:¶¦C«úìÃw©¨bÝ&¦>Ƕõõçz@.çûïå3g²q£¨ÕÚbcŠ;¿p*•°zµgãÆ²~0M›VYXèöÒKw yø7àí-ïÖMÓ­Ûý¤Ñ÷,$‰Më“ó5.ªggõ rûõú{w¥!¡¿¶+P㢊låÙÊ¿g¯f¼w0ãê Ç™ ’$iµf775PPЀM¨¼Ìàçï TVqÐ~5vŸózÿÂmúÕÒóçòr²+\Ÿ8÷­µÿ…TYaðòÖådžɉùÀ”é]"[ùÛlâÛso%*vuSWUš´Z“çmÄNÎJƒÞòîûÃ]œ¿ŽÐ0Ÿ!4cÞ j6 þfŸ-Ú°y§Ê¿"=G~ —[â3ƒ®œ&-“Â„Ž¡Ï¯´ºî+Cîe VáÞ½@n\œh2•:$÷ô´UTˆîîH’!;[*(wí%<’vQ¨Ü±ÛˆÛÆ•‚LܱÛ8²¿æ«1X±™Hþ Ÿ(râH^Cðt™œÃ«25=šv `uBÝÉ‚©ùìWËè$qDä]g&‚MÏ·.D¨²Q^†ƌ”óØi¦¸)½Èã´ ¡Q àg+æîtÎr¶˜âö„ºàtÂmœFáŒârmþ©‡iâƒ*ýz28=„ðy¥Ø€¾¨£PÙà*+wx™¾wHS*ãe5rX`b¯Ã«·Ð +äÛ˜TŒ¡v±*ƒ›ÒFƒ‚)×0;Duðç™fHðr*§êšyÞ‰¢‡?Å&&ÄQ]×;ñ^Zûp½Š²[Ûë.‰ç!Ü—Œ2fl¡ÞjùµáD‘UƬêS±OL÷p*õ<ÿÖº3I³@ž…‡ «vr-¿þ5˜ö­HIcêkŒõ¥* ßÀÃí»øòÛúÒ¸¹ñþû2ââ¤wß}K ð¸¿ø¢K÷îÊÙ³«_|±Ú`øŸÞƒsÿNÌ:Ÿ<2)êW´+«Åž—[µnMBÒù|A _ÿÐz6¬=¿ð­½»v^./3Øl¢(JÕU¦”¤ÀÙùÆ*ÊÍ] ìÝ•f4ZKŠu[7¥Ü~¢˜m©Z­Y§3×0m6 ¾A‘÷Ús ßÞ[^fèÝ7dâcpðôÕà—Ÿ/ê´fμkÇedž7Ní¦6m¿l½Þn2Ù€Æ=€C2,f[JRÁ¯ì\òÑ‘š MšxqÒ­–BþD‹0Ÿ!ÃÂïþ÷ÌsÝGŒ¼mæ€!ßÕóî;¼SPC7 ô¢i®zŒ[9žOy{B]ù5ƒå}ü_â^¦iDQ&—ǶnÔ²%ƒ‹··¬ @f±x¸¸Ø32¼zõâòey§öBþ5t:Âa2Ò¡- ¨ðq¢ ƒApõúr:õ#ç4-£K 2þ ÈX‰>›îóÉù[5áOQö‚Œ&O¢]d"`!æsqÛocºÄu[«Ym岚Þ2†ñ•™¼p~ºÎU\t"°5óΰ¼œôfôiÅèݬ¨¢´mz0j?ûsÈñÂëa.£z-ЍœÊàšÄ“s˜ÌRtséïƒ&•êo¹zÃûth…»¯“•ƒÅÅ4ÀOQ^ˆ„|5^5f— ˆß"¦ íGÑ¡6bê3GìÄÙˆs¡S­C¿ÌΨB*íDªØx+¸ªÐ¨4ÊmtqeCK­9s/‘\Å™jNö&ÌÁ(Smeä>Ð(Ù1¸×C®–GcPÊhëÇÒAukf“×#“10ŒCꈲËxl9ZÏôã…ÁuDåZ¦,!- }XôDý¡òÒ'œ¹ŒÉÂÉoQ)ëˆ FFÏ$·ˆ¾]ø¦¡dÏ1»X²Œ¤T¶ý@ßž TN’Þ_î æí1êT9ò&Ôƒ ðà¨Ö7In"1!oãºÄ½~c'´ëÑ«°më…G3o–7mæUT¨5›m.)ŠÒÜ9;wwuuõ-gÜŒçz„…û±1—Ìpì¶CÇF?Ù©æ:e2A£Qét 4üî›Ó—/×*•r?—ü¼jgrᢡ™×Ê¿úâ„ã7íÁQ­úh\I+Yñõ©›å …¬U›€'¦v¾ý¿û7q“´=<Ò7¬=Ÿz±2,|ÈÐßaûuTbú€#-ñyŠNÂ÷ìϧ<© µ`vœîþË.|ýŸº°ºxöV0î÷²«†ä±:5U[QQ¾o_Ñþýæ‹ugÎHJ¥-3ÓbµJ ö}qäd“”@P3NàÂE®&‘žBP9©$G[LÞ4È=Ë©oðmKå5.ï@¦B{ÊBLyT'"`ºLõaĬ™˜Î`‘ôˆéXb:AŽÈû¦[IÖ³Ú™æ ·RPÊ÷M/CYÍ%!ô«"7•_LTuäRò‰ÓRÞ›Þ I$]ä¢î­i¦Å°‘ÃVì=h"GÈ¡zgÖ¸·ÂSƒ|YVD^£Q>–ch·R(à}ÐÃÓI.ärÁÝ]ݺmÀô™Ýk´+`ă‘]º5Q©jµ¢mûÀ©Ow©1nY­öš 9 …lÚ3Ýš6óT(dž^Îc'´«Q’€aFFjáéå,—Ë<½œ{÷ 7±ýͳK’4í™®MšzÊå2oÍøGÚßl8zlÛæ¡ÞJ¥<0ÈmêÓ]G<ÔÊÓÓÙÃà  õžôd§€@7…BæçïúÐÃmúEߨá÷ø“ÝärA£QvìÜxÜ„vÿÚþuDj1bd«ðH¿©Ó»ªÕŠ'¦unÝ&à?«]&¬T?H„€p…Ü3¤Q1’ä DÃqrwìïùý¯ã^¶`‚ üÒ¨‘[D„¦¼\áêêݬ™˜Ÿ¯ –ÇÅ)Ú¶uÏÎÆÇGÞº…|–ÎÝHØMó:¶åb<zq~3Á‘tìÉù-„öÀ|I"j<‰‹ñmCÔ“$½ƒOÍ£ÉúÏ.øµ¤|®½ðޤúœºã5ÓóÈ;¢ùÒJVr–Tð‘D©šd Èä%'›ð÷,¶•rÒƒÖ­xõ(© ¤m{&íeu…Á´ì͸y曎 IDAT∠$pä(ó£U{B†Ð¹ã«ìÆs¡}hfA|ž³jäðžFs`?U?Q&"½Nã0œ€XL+Ñ‹ïáÖ%`†þØl‰ð=òÕÛ}tX!LÆš[!{±zf–Ò\É«<ä`”ÚYɘ4¢Ý˜È8‡ Žj½#sáÇN(ŒU‡ ¶—ž~LnÁôºSÐ[¯.ÍnÙ9£éXG´`_¤Më#¨Žë€Y?°#‰ð@¶ü ÷º‘ó×±r­›°i.žuœN¤0äEº¶bþtܶ¬]¾ùŸÒ:œÕ‹izÛÎn«•A£(¯ e›V¡TÖ¯Pƒo¾_|ÑÞ¥‹ðÖ[òaÃ~›Ûº²Rœ1£zëVcT”²woÕǻߩçû¸{ ·ó—þå ŠÒMþzÇãÿŠÑ'7Œp ¶uH§píÓ)¼ýìŸ*L-’ŠüñÿíŽnX°>ýÏ^^-^º·ŒßĽlÁªg×®ÅqqBãÆUÇW^¹¢?r¤lËYp°¤ÕÚ;u’޳_¾Æõk¬_Cל:DqWγu9}#õ(Y™T“HäÃdäØW4Nvy‰¨<ÉŽAtÇZJÞ:Ô1gS¼ywÄ2´k±y"øaÁ²GÆd‰#" ]yÕÊU §œhäF/ñÅ,oÆ$+ì.ç\“+ɺÌÎ*r{2Ê —TNp­#}ñM'=Ž89²I à)…”{â<•N—(^CB&²Wiu™êõd^ ŒG(N§ÑÏ%»fkàœ:¢<…ù*«‘5lBQ„´ qQm0–ls¡Lâ¤w$#\x̓£F&“è`^yГå¡\639x‡Àî vv£ÜJ••çëZ¤¢YÕ‡C…|r‘£u7¾?¶åó8’ÔXŠôuDo¢Oq<±‘zÉdÿùͼÙ‘gÖÔÆzûQ"›°/‘n³ˆ÷jÇüéOfÉFŠ+êKg>Æ}‰;ɤÙÜÎÚ¨T²i5#Ûv°èãúÒ›˜1CöÞ{2™Œ‰m‡ýö¼ãé)Û¸Ñó³ÏÜ­ûö™{ö,IL¼+ãÄ}ÜÇ}üwá¨Qý™‚ȆÒˆ!>‘k‘4H”ˆCL&™À]jW÷ñ‡â^&Í?|ø“Õ« 3]½*÷ôTêõ6ƒÁ«cG[~¾&:ÚCp°ª¨HÐédC‘q…î}¸t›NÝÈË }_ÒŽa6ý8ç·Ð'®~„"k6=f’ 2š¢ì 7¼{¡‹Gî‚G4ÆÃ®ObÝ‚`•)ß“Ø. Ú©0sPÀÅÇËùÉNµ'ƒx–sNÄ̃ªÊÉBèUMi—l˜[HP  ¡„6Æ?‹’tò,ØÚÚÏ«”çR-"v ȵ)‰Ê*,=ðU"ëŒË~ªò°HÐW ;ªƒ˜¯aÓ# @-€´Cö#âuh Íwž ¶X9#(о6¨›×lœ5“mc€ó­L…]È0qRG¶™~îxÖZ½<”ôõæÝ+dðPÒÅwªJ;s¹ZÍ€ ·™¸\]éÞ…¬lví£Q íÚ4<&{õ’=+?.¥§Ó¶­Ð¸ño̼‚@·nªèhu|¼5>Þš”d-+»wWÉÿ AY111·vŒKW®ØbcÍGZÖ¬1mßnÚ¹Ó\\,VVŠÞÞr'§?iººÂBñøqËñã–åË 11æK—ì{ö˜ãã­&“äì,ssûs]¶É$ÅÆšccÍ«W/_¶_¿n U¨Tw{‘F#k׊˗‹è»wW9;ß±á–í¬XCú5Ú´ª¶Øì¬ÙÊ×ëÉ- K»ú¯RNK6²q!ð÷ª+*aÉv¬y ¢îHâóýœ¾Nï°Z;Ù|zœ‰{èÓo´ñm+RÐYhçH”Øp½ù-¤§?7• ~*à‹LªèîuËÊ.J¬+cY!Éz¸Ýš‚*DViÙg ÏN[Ž‹+K-¶Ó]Žº¶ò~Ä¥ˆé À†´ãZ yˆPÖT<Šv¥É: Q HH(þ…Ü̸9TÆqý%ÍñrFy¢Ýœ5aÌ@\H¸ÈEðÇ${Þs+wƒ{Ù‚åÓ¾=0t¨¹²Òã¬ååVwwÁÙ¹lß>eÏžÆ]»xä »¨ÀÛ‡µßóÐ㤧âÝ w¶~ç)È@oÃ/”Ki3–¬“œYG§ç©Ì ¼ˆq˜KQFàÙÝE\Gà…á"êpŒõö`TO`=‚e§À“‡DÞuåEþ:>U òã) ù…, fŒ7]Š9\ľ6ŒoD—k,à|'†4¥ÕUR9H`4ÑÕT縄4šáÇsù©À3t‰Ào'WŽ“A`¿ZKƒÕSÎj˜näx­ýF€oýxÆsM¾B3Ò§!<À*J£ÚÁÞÓÕ“µQ8Ë™•Blq‡5·=O¶àP!£÷£¯Ýè·páB¥Œ/áÅÊd^;T§‰¿+ŸF”xk›êÆ4óáýñäU2k-çëc…2çatFžûŠóu ºä2Ï¢o–må³M· 'O6|F#Þü˜ØCõ¥@®LŒÓ_àô¹*Ô`éRùœ9²sçÄaÃl‰‰we?ï×Oµc‡÷sϹääˆk×»u+=vì/†bÔ¨Q5W®Ø,ÐvíZÚ®]É”)• êÊËí-ZÈçÍs}ê)Í€j?—šâˆÀ@ÙСê)S4ï½çÖ·¯*'Ç~ê”õÍ7µ ê7.jÑ¢xÞ¼êýûÍËÙRX(.X mÞ¼xúôª?Ö——‹=¤ž<ÙÙÕõnïmY3fاO·KŸ~ÚÎËëŽ ?úœñOrâ4ýzãÒãÇÜyj.ùÅ<öP}íJodÈ‹,^K#_ÚÖ ýÒ›ò6‹77Ðal2£>'.1Q:Ð,T›ô ¤‘;Q¾{ ¦íb]*z cë¼yŽÇ³'—iáu6Ö|”Á#縠eRcœ>Œïå1ó™žð«ÕƒÀ(ñ@>/”eeœC°ÁZ £ ³1N‰{måíˆbß‹ÔÁ·vÿÏëT¿DU)ö‡¹±¶ØGÕd`ˆ»ð#ÙsI‡µ?þ@%¦w9ÃeOœ¼p¶a_ÇÆÑô Ư’Êd’U¨â¡îàoà~ªœ?K¸ ¿ÙDíå I6¹\wõjqZv{ÑÁƒ ??k^ž ¥Ü\ñçítíI‡N¨\‘$öî$°•¥¨<‘DâÖÓ¼+¢Â\NdÄ£Vç—áÛ¢ã\þ ïhÊŽ‘½·ÞT¤pN½0¡r1ŠQ`ÀüœGA)²CŽAE7 ‹žÏ}˜  ¨d¯™Œ@ EQ ö§•ˆ-‰dÈZÑ 8ÅN3†îtoB“$’RHqFÝ›6ÀvNVcðEÓ` ‰U˜OÒ ÷õdÅS ´ÂyÞpùyXä³píˆò-ªO×¾Ï"÷A¨‚'±ßôò=®b’ þX?jTE»v¥ êγª~ûm×cÇ|6lðzí5×&Mþ †¸ZøøÈ&Ov^ºÔý矽¶móêÓGåï/»vÍ~ü¸uÈrŸ¢Ù³µË–®_¿[€ÿD‘={̯¼¢mÑ¢xáB]a¡8~¼ÓO?yþô“Wdäï 9,*bìXÛ?ˆcÇÊ–,‘CÖj8Ì ‘ɘ;›v­¨°çñI¸»òÖ,<ÝëKç}MZ6-›ðÚm›yßYOZ-ñî⑎Xezf¬A’˜Ö›Më4™K/ZðZtòå‰üx™Ô2þÞµÃ(ۓLJ)(d¼…¿›ÁÑrÞ¼Œ¯µ¨³Óy})ós sb~0MÌT¯”rÖL¨’|oi]§mÌ2ÑWÁËjºÕžô <ƒ]‚§‘ ¨Õ®6cÚ€Á áeÜ<9˜’«ÅÞ ×Vh€4´«¸fCJ#”¬á¼sÞÑ„û8WH…7îýiìeo6ÙíhBHO寃ìììqãÆ¹»»»»»7.''ç¿}Eÿ:þ2Aî5ŒvÿB«Ÿû÷×fd4mݺ:5µY·n˜Í//22ä’ä®ÑØSS}–e½»É2¯PQA— z:Fqñf#í"I;Í Id¦8ƒ3IÁ=_ …gh?Š8Ê“èõ9yËЦÐu=… O¢Í>*^Ç’HÐvìcO@ýŠ]U%~ði¯ÛHö!¦œÕ‘ãÂgi|RAR ƒB˜|Œ%Ud‡ñ@$#÷³¦˜œf´ê͸‹\<ÙRJg1Ëç8˜EQÁãé |É©ëTá6‡Þ@ y(ÎA¿‚n^¨€wȹ„Ñùw„Ê€ÐÇœ‰}~~ÈLÀ~ ©†ڔ vxÜ€N"[º•EH³òL1,Ìòàïí™f&§“fd¢_6¿U.ÁßRHª"ßÌé>ø;°._©fú1\•ô àÍöuúWçÙt½…ï†ÓÖ·ÎS~ú'Îçã¤dÿ38;x+LVÆ}Éå¢#Y9­N“…qïs9—ÁQõSè¯,åh!¬œ‡kÝ0yIbú\Î]ÄÅ™Ãê,¦k`µ2a*Ù9´mÅÊ/îðn±0eŠ=3SJO—ââmÛÞ½GZ¼X·|¹±U+ÙéÓ¶çŸwyýu/¯?ÑJ©¤Dܺմ}»96V ʾ}•*•¬Y3ùÔ©Î}ú¨îbeô—(o9rļaƒ99Ù:|¸Ó®]&`äHu³fòèhuÿþ*?¿?êÑ$$X·n5mÚdºzÕ&oÜXîæ&¼ñ†k¯^w›Äæ&²³¥!Cì’„[·*‚‚î8ß^¸Äì7°Zy` oÎi «ë¹tM»p&>ȬÉõ¥[âøúgì"Ÿ¿\ß|µ'w7"—±ì9Ú6«#zx)ÙeD²n&ŽáLkxaQX1ž0‡9átÑéÈ쮌»Už©¥s m¼Ý„9m®Ù@磴w'Ú—ºNëˆN¥›+Óü˜âàdüºš×Êè¤æK_ÚÔÞì‰.:BzÉù¨vÒÐÁ4ìÅо­µ—]À:š²(”¢™€3`Az‚t„ã´&€û N{¡ŠÂk:¡@××“Ø ÏYôðÂ9‹â_8!G6‚nÍ ¼À…]ì `ã\ЂìwÒ4|p—•'æþÞ¯¶N§‹ŠŠš6mÚßþö7`Ù²ekÖ¬ILLÔhþ’ÜÈ¢yù‚Ýl®Î͵!7W_]]ºsgɉæK—´§NI2™½°Ð"ŠÒ… âþÃæ“v7_Žîáô) 2‘Éð ¥ #[D*r1 $“ºÀ”§q~~Ý0æ“¶×–XJÈÞ€*[)_áÔ{1‹P>‚x óûr¦H\–ˆ•Sª D¤JË><*ÇÓH¢ž³n$?‹Í”‡1DOq*?[Ðvd°÷Ëœ.#¯ mäÈõè÷±AWW4‡HN!x”veÎ{‚`$5È*±,&µf¤¿B#-öóè—sÃK77'dň£¢fõí K‘•#íBüš+r9,s&["ÅÎFnO"”¼ãVâ«j6;¥BÔ|‚AdYŸ9ððY”2²ŒŒ9[‡˜4ÜÙ›ÇÛ üR×µ÷\Gº‘T˜mTÖe-X2 _r*™S§ÜIÉÇ 8suñuE*>z 7g¥ðÓ±úcæ½™4ñcÓ^ZR_$üóMªuœ<Ï[ŸÔ—J%_‚»kä…רP•Š5kä¾¾”–2x°-5õn§!ggaÁ·#G¼CB”z½´x±®oß²ùóu%%ÿekVU•´~½qÌ˜Š¦M‹Ÿ}¶*6Ö‰ãÆ9½úªkLŒ×Ê•}ûÞSÚ “Ñ«—jî\·¤$ßìlÿI“œ'Lpòô”ét|ù¥aÂ„Š±c+""J¦L©\µÊpú´U¯ÿwW³YYöÍ›MÏ>[ÕªUIçÎ¥‹éüü„æÍåÓ¦i~øÁ+&Æû_Ю._–fί_—Ü݉‰QݱfA!#'²ÿ¢xãå*˜-LxžŠ*<ÜøÛã·5/eæböŸá±!õµ«r-O}ÆÉËLŽ®¯]}}ˆ_Îs½”&ÔÑ®r*ù¿PebJ—:ÚU•™Gc0ÚèXG»2Ûyô0í¼ðPò²ƒve™pŽ +n æ;hWe6¹ŠQ¤½¦Žvµ×Àó%D©˜íqK»²Â#òEd‹jµ+ žÁþ ¢3|V«]U#~ŒN-QÔhWÀW]ƨÃþ7ܜߒ^€ÑŠ8… ýI² Øê…³û:^!¯ þÍ 4cÞË^†v´sÁå2§€¢;Û ‚õùýn|ûí·=zô˜7ož—————×¼yóºuë¶bÅmô9üe‚Ü.\ø{/µ"#cñçŸ?Ö¹³J©Tzz*EQpwwqqQyôè¡ ”ùø(¬V»“““Fƒ¿¿Ð½›€„›'VnôHi.J7$^A´Œ¶“žð^ÈUhü‘ªÐ<ˆÊó(ÝFåÑl6Õûü^Æ‹ÌçG‘Î!øƒ òP0C®šyÎ *ÚÚ-äYÉõçq™rœ,”5ãÁ2®ªp6PÞœÞ%ä˜0”‘FÇ`‚/pAŽÜï@üM˜‹¨,¢²=¡î8¹¡ªÆ”EEG‚œPDᵟ"7v¤–¸©‘Eâ|jb0êÆ¨è‡z+FodUH]PÞ­‘%#¥?B8à,0\Áz+npMd`­ý&TI‚‹N›i­¢imy#áNì¨DgÇ_EËZ›¼\`„?› ðR_Áh †P7T2ʸ\Eî‘­ ^~Ocb¯á¬$.›ñ·f[µ‚v,G.ÃYA[‡ÞüÜpR°#‰Œb¢#ê¤ÐñóÀbãp —sy #î $…œ¶-ذ…W mÌo€³ÝÚ³y6+î®´£\]iß– ›Qª¨¬¢G׆ǧ\Îøñ²óç%¥’5k¤®]…àà»U@||d£G; îTXh—ËeW®XçÎÕ‹AA²ÀÀÿS¿[A¸nñw´¯¼¢ÍζïÝkîÜY¥˜7ÏmÛ¶>©© #"Jå½¥X5YûöŠ œ_yŵMyóæŠg­II6³™¹sµ| KL´­[g<ÞšŸoÏÍu:I©4šú÷Çl–JK¥ë×mgÎØöï·lÝjüàýœ9Õ[¶˜RSm[¶˜ÂÃåv»0y²óœ9®}äÞ¯ŸÊÝý_¹É'OJDLAª‚Mȃ ^¦*1å<äÀaªwR„j>M£S|š2_Ô¯ÓÊ µ„´œ3å;ÓèaZ{I¨B¯@>äÈö±Ï†ÍÏa 3cŒgû w?½`’/éÉ Bÿ?&ÈýÐïýjÏ›7oÖ¬Y-ZÜÚäêêºråÊ)S¦ü®~þ$ø+¹ÊÊÊ|}}øöÛoGFþZŠx üêUŸðð÷œƒÜÜŒÅÅá=z”ÇÇ·>¼z×.Ÿ~ý„£Ge..aa2·fÍ„õë…†(RN`40íq¶ÿÀÓ8³›…©³ÙþO:DcÀn¥ËCì?F¼Nܻв—>§åT4ò×Óüÿ¡.£ôŸÇÍ™Êp‡Ï$ ãPtÃåg;“%Šä¬ÐqHÇR5ý=YÆ(+…Mù@M»x¦ƒØ6gYn ¼¯9㿞÷ôT`RkzåèŽD1†12dŸñK:y½ióÑ|ÌÑsäw#øezÇ)ÝJNÕ_Ð%`%E'Ñçaþž0?”@<æyT§a[×°Úd ÿD|»CQ@pÄÆ`=*5NŒsX0Ï-cq%¾rN4¦¥ÃüûE!ÿÈC+r¬ ô˜¤jz'Êñx©®ñÙ|“¹Ê_oëåpЬjº|O©‘½™ß«Îãþî4Ó7ã¦æô DÖÝ¡<õ;Ö£KÇßDåàÔ“$&.fóqú¶áà"u5“•1<ý<\9¿†æ·q_}¹–WàéÎúOiÕ¢¾ض“±“~^Ǩá T¨ÑÈÌ™öµkEww¶mS ð»?“'NXV­2~÷¡o_ÕáÖN”Ó§kÆs ø£ìÓ6ÇŽYöî5ïßoNK³UWK@¯^ª  Ù!ê œ¼½eü«ný{ 6))Ö“'­……âöí¦K—lÝ»+µ}ûªj† Q§¤X;uRv쨬IUyø°åÐ! ¥HL´ݺ©NŸ¶#Gªýýe‘‘Ê!CT:(ÿM‹à¦MÒ“OÚÌf¦M“}ñ…ÜÑ SïÙÙí<ý«×Ó:‚ñø6”Áeí6>^AI»WÑþ¶¹ùŸëye)Þ$­% nÚÃ{yf).$-¥™ƒ­Èb£Ç{œÏæÙh¾z²N“÷{™¬Jο„Ãe¯¹ÀÔ]¸(IžJ¨ç­òuL>‚“œ#éèpöuyLOB&pªív ÎÉâ“Z8q¨Áµ1 z‘^y$[˜äÊÚ€[ÞŸÏ-ü?#}ä,×к¶tÒlÀ/(†ÖΜKÐ}„Ö Ù|ƒ‘Ù˜#]‡}'âbœÁ=¶Wh5œ †ËëHòÆy1CÝPçPò1›E¤—ÛœÀL2÷±Oþ žðÁç ?\"þyáKIá®Æ‡ °ànjþ~,ø½3@@@@rrr@@ÀÍ’ÂÂÂŽ;4ôúç‡ôÁ¨Q£Ž9b4srr–,Yâïïþüùßlõß¾»÷q÷q÷qÿ׸ûok``ðŸá2j T*-‹c‰ÅbQ©T¿·Ÿ? þ2 V=,[¶lèС¿Y­2+Ëj0ËÊŒ%%’(V¥¦J’¤KM•DÑ|ýº]¯ [F†$Ibjª$ŠRQ¡TV*I’tõ¢$IRiTQ"I’”}QEÉlŠÒ%I’Ê2$C…$IRÙ%I´I’$U¤Ü8¨J¼qn㕦Ӓd“$I²_‘Dƒ$I’T%JWk„)E’¬’$‰’Ý ]¨-¬4Hù5ÇfIW)åÜüò¤+7‹¤"¤»ùçU)ÏVs"I’$é²Tb”¬7ÿ4J¶sR¹ãÍ)•¬ Íkð‹d´×-ÑKÒv©^™$IÒ&‹CïµÐÙ¥Íõ»”$I2Ù¥ŸÊ(—$ikd°5Pž¥“N—4Üd÷5ÉÔP­YÚ{¥rI’³¥ÌÒ†Eg®H¹wUh¥ÃwVã«uÒž£w”Öà‡%ëí·é6ØíÒçŸÛ †ß®ùë0™Ä4>ûlåæ·¯_ÅÓOWΙSµ{·É`ÿÐý/àÚ5ÛæÍÆÕ« óçWÏŸ_ýG?;‡óŠ«W7ðj7ˆ´«Rü™_«`³I?ï½£Ôh–öžjX$ŠÒŽÓ ‹Šª¤äœÿßÞÝ„TµîqÞl)•qª‘„4QIjbé¤eô!:ÐÃ4­a lHäà¯Á©‹J©¥Fâ…S«{C(¥´èK×Äz;»|˵}žQ¼{+[ü–¿ýîµ—+¬üý6¹Ò·Š¢þ¾ÂúÂbô©Ö?/F¿¾Xa}öSôÛì ë£ï£\ºø!Š~]¶¸E=Ñâ’l¼ÿ½_òÌ{Ñ›ùoO°cÑì\ÚÉu!Z¾™ò÷è?égß?¢?þ÷>GŸÿ­ô_YV°Öã~ú-þßxÓÓÓÅÅÅóóó+> $K–½E¸?E˜^¿óœµ ø[•––Ž}sÛèñññ’’•î·–ë±`eâæÍ›UUUqO„QWW×ÙÙ™¾ÒÙÙùõoB$Îz|‹p¹ÚÚÚ–––ƒ>þüÆíííwîÜ©¬¬Œ{4 €¹¹¹òòò¦¦¦–––T*ÕÑÑqíÚµ±±±¼¼¼¿üÚu(;X.\èêê*++Û¼ysuuõäääàà vY#??```hh¨¨¨¨¨¨hxx¸¿¿?¡í*•”,€IÆ@‚(X)X)X)X)XeyÁÊY&î‰øOŸ>mhh((((((hhhxöìYÜñ¤/Yîß¿ßÚÚºuëÖ”0®gß?v’—,/X©oÿ²¡›~%Èüü|MMMeeåÔÔÏjÕ¤KIDATÔÔÔTeeemmí»wïâž‹ } ræÌ™_~ùåÞ½{ËÆuî;Çî IŒE–ßh4''ËÀ,ÖÞÞ>22rýúõ¯+§OŸ>pà@[[[ŒS‘9éK¨åN“bÅÐIb\²‹„êíímllL_illìéé‰kذ„~Bö¬]»våææîÞ½ûÔ©S“““qC¦=zT^^ž¾²oß¾‰‰‰¸æá'H_vƤ“ÄXdyÁª¯¯ïîîž››Ú¿ÿ¡C‡FGG㊌ÌÎÎnß¾=}¥°°pff&®yøQÒ—5„1Ñ$1.ë­Ù«W¯öôôܾ};îAøk›6mzûömnnîוOŸ>mÙ²åÇ1NÅO“¾¤X~ÉŽ0&E&—[IâšÉž¬L>ƒzìØ±ÁÁÁµœŠŸ¶mÛ¶%/‘_½zµäe4 "}É%ŒÙD×Lö¬L>ƒº¡¶ë’®´´tll,}e||¼¤¤$®yX%éK.aÌ&’¸f²§`eâæÍ›UUUqOAFêêê:;;ÓW:;;ëëë㚇U’¾äÆl"‰k'Ê^555ÝÝÝ/^¼øøñã“'O.]º´cÇŽ‘‘‘¸ç"#oÞ¼Ù³gÏ¥K—ffffff.^¼X\\zôhSSÓèèh___ÜÄÌkJ`Ufgg÷ïßçÎâââT*511QWW722²mÛ¶ô§ÙÁ6;XÀª´¶¶ž:uêK»J¥R%%%'Ožlmmw*€xyM ¬;XÀ†b 0 0›öÀßëë}°¾pÎ6 0o¦`¦`¦`¦`¦`¦`¦`¦`¦`¦`¦`¦`¦`¦`¦`¦`¦`¦`¦`¦`ö'h`ô"U³çIEND®B`‚gsl/doc/images/movstat2.png0000644000175000017500000070021713536675317014243 0ustar eddedd‰PNG  IHDR@ ô¢9 bKGDÿÿÿ ½§“ IDATxœìy|Õ÷Ï a (‘¨TÔ¢6mÝE1 ­¸TŠÚVi«5·ÚWm\ú±ÚÕ´X¥‹K´Š­+Ѻ`] ŠE\!"B´ „ȦÙ k²ß›;ïÏËóf»sï=sgû}ÿàî2÷ÌóÌ3ünkkë9çœ3|øðõëׯ_¿~øðácÆŒiooWÞ bš¦©Ýâþð‡x ‹Ñ—/_~ÑE}õÕWôßI“&ÕÖÖþç?ÿáÏ_qÅ#G޼ùæ›Õ6„õ¬|Õ+!Ä·¿ým9IpæÌ™W]u•üù«®ºjƌʛÂëEÜß}÷ÝN8ÿ»bÅŠaÆÉ8餓V®\év3@PÑÜd×®]G}ô¼yóø•Þ½{wwwËŸéîîîÓ§ývzõêåõq)pE`Ò´|÷Z¼mÛ¶ÒÒÒ'Ÿ|òŒ3ÎÈrS===šêZ] ÇÄbê ®Üƒ8†Ä1 ˆ!A ˆcPÄ™3gnݺõ‚ .8ôÐCn؃ÎÄp •R‹[)„›7o>ï¼óîºë®üàòëƒ Ú½{·üÊ®]»ŠŠŠ\jä’|°¬¬lÍš5^7B…+Ö–-[~ô£=üðÃcƌѽuüñÇ/[¶L~eùòåÇwœÍ€“L&ù_ªP/`mß¾ýüóÏ¿ÿþûÏ9çã»\pÁ”)SäW¦L™2nÜ8åÍ€Ü Ü@½€uþùçÿéOúñlúîu×]÷É'ŸÜ{ï½÷ÜsÏ‚ ®½öZåÍ€Ü Ü@½€µtéÒñãÇÇö¥©©‰ÞÝÿýçÌ™³hÑ¢#Ž8âˆ#ŽX¼xñ|0`ÀåÍ€Ü Ü@ý*„)W 8òÈ#ßxã å¿ ž ÜÀ­UÐQ^^îu€Çp€8†1 ˆáq ʃHÒUÊçú@-èŒ!AöÄqaÅ‚ÑN@Ä6lØòåËg̘µªÄ=,PRÀ `€2 `€@ÀÚ‡7üú׿¶úÀÕW_]PP°iÓ¦\¶*ÔÔÔxÝ Ä1 Ž!A b8@C€ò BÀòtÆ€ {‚Q[*g5°þÏÿù? .\´hQÿþýM·½½½¤¤äôÓOúé§sÐ@°8ú裿øâ‹©S§–––zÝÈ5¨• vìØñÒK/Mš4‰Ô+Sú÷ïÿÐC½øâ‹»wïÎeÛ,pƒh X¿üå/ï¸ãù•Ûo¿ý¿øýýòË/9òÜsÏ¥ÿÆb1ú—à¯üèG?:å”S^yå•\µHº D¦ ˆ|¯Sžx≓O>yüøñ'Ÿ|²béÒ¥/¼ðÂòåËéÝ?üpüøñüaMÓ¬œo—]vÙœ9snºé&›ßš;wîܹsU¶>;Î>ûì³Ï>ÛÃÔÔÔŒ=ÚÃ% Žáq b@Ãâ”±§§GÀ•sÐC‚ì‰\ ¬™3gþõ¯]°`â´ÓN»å–[®¸â zëˆ#Žxï½÷Ž=öØ”¿»råÊŸüä'_ýµÍMœ8ñ/ù‹’6+áî»ïž8q¢×­ ä :tãÆS¦L¹òÊ+½n ä÷j`EË%„¸ð §OŸþÈ#hšvÈ!‡°z%„رcÇá‡îd#‡~øöíÛí?ã­ÝɈßÚ@(A ,pƒÈ XBˆûï¿̘1ÍÍÍsæÌqïWøà”SNq½­ábÆ ^7(q ˆc@C‚Ç <ˆ°<1 ˆÀžh X×_ý¿þõ/!D,{ê©§~ó›ß466Ò»cÆŒ™:uªüùâââwÞy‡–‘yõÕWÏ9çœÜ´94œxâ‰^7(q ˆc@C‚Ç <ˆ°<1 ˆÀžh X7Þxãå—_^\\Lÿ=î¸ã.»ì²o¼‘þ;~üø |ðÁüùüã·ß~{ß¾}c±¿øþûï×ÖÖŽ?>—-zþˆÕÞ @¸µº¡ZÜ[…QÇ5×\³páÂE‹˜~ ½½}Ĉ£Fú÷¿ÿƒö‚EaaaKKËã?ÎOÊ :¸'àDË•’‰'®]»ö¦›n²úÀM7ÝT__?qâÄ6*$ÔÔÔxÝ Ä1 Ž!A b8@C€ò "…ÐÐC‚ì ”±ß~ûµµµýóŸÿ¼ù曽n ð)³gÏ~íµ×~øÃ^rÉ%^·ÅÀ€j`ÁlX²dIeeåÇìuC°@H!)I$ü/À!°@ލ««óº @ˆc8@C‚Äp€8†åA„€å ÁêŒ$]‘Y0Á "È=°@Ž:t¨×M @ÃâÄ€ †Ä1("R=!X‘N8°t+ˆ ÷@À9¢°°Ðë& Žáq b@ÃâÔQÓ4ª^ŒE¨rL°:#,S‚D{ `€Øx°5°ÈX XÀ °ÈX GÔÔÔxÝ Ä1 Ž!A ¡â›o¾‹Å.¸à¯â.¡cPDX^¬ÎˆBS‚D{\°–,Yrã7pÀ±XÌønÌ€m~côèÑ^7(q ˆc@C@胑5¶BÇ( 6ˆ°¼"X1"WÈt VAîqEÀºòÊ+üñÇ[}@Û7Ú RÌ›7¯¤¤ä–[nñº!ÀuêëëÛÛÛ½nHݘáö D XÀ tmŒÇã^7€ ‘ïÆFW¬XáÆf+vîÜY[[;xð`¯\çšk®yçwf̘1nÜ8¯Û쀿DÖ­ðœØ€+$€X G Ÿ9 Žá ”qŒš×#”AtHhꆄ>ˆ¹= }£€Ú ò9VŽ VgDwS‚D{¼°9äÞ½{2äòË/_½zµ'm9ùÌáq ¡Œ#M£s·Ê :$4²HèƒY9ôqŒ¨‚Õ#r…L—`ä¬qãÆUUUíÙ³gÑ¢E#FŒ8묳>ûì³”ß2–~Åb'N”5Úºººææfþ¯ü–üwsss]]é[ض€-` ØB@·@SÀÝ»wz/°'[ÐMúºQØ=¤¤Hw/°l!Ý-èRºØ‚Û[ ‡1»ví ô^` ßÂĉM…á1Ws³c±ÔÛòÉ'g̘ñÞ{ïe¹Qæ…^¸úê«Ï<óÌ>úÈë¶w9ãŒ3jjjþóŸÿ\~ùå^·Ø1yòä믿~äÈ‘ .ôº-äŽíÛ·ãßBÜ~ûí^7ø”ÒÒÒªªªïÿû6KŸPÜp¼¯uÑEÉÂ+²¬ ‚ âBÇФ•9$”AtHhj`…>ˆI }£€Ú "…Ð+‚ÕC3–©%XA¹Ç{ Öªˆ°a8†ƒPÆ1"·ÊL(ƒèЈ•¡bh"eOèãÔ–W«3¢ˆ»)Á "È=Þ XÓ¦M;ýôÓ½npO<Ñë& Žá ”qŒÈ­2Ê :$4be胚HÙú8FµA„€åÁꌰL VAîÉÏñï3æ†n=zô¸iÓ¦W^yeÒ¤Iï¿ÿ~Ž› dÐM2î¢@ÔÄÊà‚HhÂç<†$`CD$~ÔâŠK.>¯+D?a„—_~ù„Nèß¿ÿgœ±zõêšššáÇ»Ñ Ñµ$¢Ý"Öþ‘Ñ„ ¤@›6е1{Ýÿ2sæÌ[o½uöìÙ^7øW,Í zëœsΙ>}úÎ;ãñø¦M›¦L™rôÑG»Ñà7Pª? Žá ”q¤‰`tw‡2ˆ ¯'ôA M¤ì }£€Ú ò9R¿9&X1"WÈt‘ƒ¸`Á‚Gydþüù¶ø ïk`ˆ0zôh¯›€8†ƒPÆ1jÁPÑ!¡‰u胚HÙú8FµAäG)°rL°:#œã¦ÈA${€  –Dt@¬ƒ"¢ Џ' ˆ{JHÀ d `¸UŽ˜ôôJM `'Dģ𠰀X GÔÕÕyÝ Ä1„2ŽQ»UešX‡>ˆ¹= }£€Ú BÀòŠ`uF¤š"1"ƒH X G :Ôë& Žá ”qŒZ÷PÑ!¡™Ñ†>ˆ¡‘í }£€Ú ò9!É'«3ÂMlŠDÔÀF `QXXèu€ÇpÊ8FäV™ ešX‡>ˆ¡‰”=¡cPD8°¼"X,Sä "…€ „Æ•R‚XD DXÀ p`¥0 @ˆˆ×<µè• š@ÀN€ÄŸXÀ,#jjj¼nPâBǨMCD‡„F }#Ò+CÇ( 6ˆ¬[iš¦p³ %ÁêŒxcŠDÔÀF `1zôh¯›€8†ƒPÆ14¢†CrÄÎÎÎÚÚÚ+Väøw„fÒÊž(‘^ú8FµAd+ô'¿ßVg¤QLÓ4œ'2r#ò¤,a "·Êòõ×_—””Œ7Îë†`FB#5H!NàQ I+2s`­Zµª¼¼üùçŸw¥MÀk `4¿ÁÝ‚{Ð<²»»ÛÛfhšFQ†€åØ_€D*)øê„3ØÀº †3+hâ‘îÔnÍš5Ó¦Ms§QÀc `¬¤t`âBǨ9°rDŸXašñ‡²'ÊpŒB,BÇ(àR , `¬¤t`â|LJ~¸¤¤äÅ_Ìr;Q°rDšAvuuåøwu„)çÂW=Ñ Â,BÇ( 6ˆl¼ŠÎä‚Õùô€Ô"“} ,Xá/Y¿~}mmíæÍ›³Üê"¹ Í=Ÿ²kƒÿA°@4A !pB˜ Å.A¦ïtOÔžhF X¼„&p¦²È3ÏŽQ@m£6ù‡uFùª–ŒD¶~§µÝì±¥¥e„ ê</¡y=d3}+] A—àk¬œ@ D¬BR"_}u…œ={vYYYUU•× BQ ¬x<þòË/úé§Ê›</±Q©2°pÃà<ôVÀŠˆ©' W‚hÂÆ+8°€¾u`-Y²¤²²rÞ¼y^7DE¬x<®iÚïÿ{¤ô†X GÔÔÔxÝ Ä1ø*Ž)SQ˔ܖr|ÕÝ LÁ²!ôqŒjƒÈ'ˆH!Tޝz¢DÄú8FµA„Ë+Ôå!ÌÛ¥QtPÃ<,v)QU !ýQYY©¦‰ÀS `ð›ŽQ@mQË+Ô}» ¡Í¬,7p{zzhìPRKøì8ƒŒ€rÄСC½nPâè9i-Ìg…¯âhc³ÊlˆLPrD>°>q`… оê‰n¦`Ùú8FµAdÝ*:{°Pg„Ë "Ï íûÑìÙ³KKK'OžÌ¯XÕÀ‚+¸"`-Y²äÆo<à€b±˜ñÝ 6\|ñÅ8pàÅ_¼qãF7ÚüFaa¡×M @='-S’¾Š£?<-ëxD¼LîƒÈÏ0QK¾ê‰n‘^ú8FµA„Ë+ÔQË ¢Ãá~õêÕUUU .äWàÀ 7®XW^yåàÁƒ?þøcã[­­­çœsÎðáÃׯ_¿~ýúáÇ3¦½½Ýf@øP"`ù ›Uf¬0_á“UÃ$`…ôJMP ¤Ä·)„dSòCw6LÙú˜ì®¢'™LZÃ&ß®X±Âê­§Ÿ~zÔ¨Q&L ÿN˜0aÕªUÏ<óÌÍ7ßìFK d¤µ0_ P^+LÇWødBh"ÁÑH‰o,ÏXŒÃBjª| ¹ß%‰üüüˆ$³G‡\×Àš9sæUW]%¿rÕUW͘1#Ç͹§¦¦Æë& Žž£Äå«8¦¬…UMÉ}}âÀ ÓLÔW=Ñ Â,BÇ( 6ˆ°¼"@QU ¬ë®»®¤¤déÒ¥*õÿãa ,¢CËø”û]<—g,p`…WX6¬X±bذaò+'tÒÊ•+sÜ {Fíu€GÏQ"`ù*Ž)k`aBSrDÔÀRޝz¢D¤W†>ŽQ@mùêî3߇¨3ªªUWWW[[»k×.Â,¢ÃBjª1…¾(÷AXá ×¬ÆÆÆ¢¢"ù•}ú¤»Pºuë&Ožüî»ïzݧLŸ>]1xð`¯¢ŒãŽ;N1lØ0ã[?ÿùυǼ“í|ãß qmÑ¢EªÛ4MÓ®¿þz:Â?þ¸‡Í˜9s&5㨣Žò°À ƒ ¢`Íš5Ëë¶;{ì1:ó;î8¯Û|Êüùóù~ü…^Èx;4‰š9s¦ª†]tÑEBˆC=TÕ3†Ÿ– 8Ðæc¿ÿýï…cÇŽåWîºë.úâ–-[¶nÝ*„0`€bÿý÷w¿Õàÿក“kÖ Aƒt~«]»véˆ#Kcˆp¥úª'ºA˜‚eCèãÔ5°¼"@QU ,c ó,ñ<…ƒè°–Õ*„BˆD"A¯÷ïß_D>…°³³³¦¦ÆÛ)œr-`üñË–-“_Y¾|9)Ç Ü()ØàU_{íµòòò… *ß²’’R¹DÉ*„¾ê)W!t8-óó­òĉo»í¶úúz…ÛÌ}± ¡r|ÕÝ LÁ²!ôqŒjƒË+ÔU­BHz„B‹ÆúÀÕÀ²Z…Þ%+Üˉ¤ä»ßýîgœQYYéuC²%×Ö\0eÊù•)S¦Œ7.ÇÍ‹éÓ§WTT,^¼Xù–é¶*@SÌÀ)n)I¹ ¡Ã ‡Ÿ‹ænß¾]¤ÿèoÞ¼y•••«V­r§QiãËÏJ%Ð`hÂö·:|îÀòƒO'c–¼ !½^PP‹Å‰D”»$Åô¾ûîëèèðº-Y‘këºë®ûä“Oî½÷ÞÆÆÆÆÆÆ{î¹gÁ‚×^{mŽ›T¹ÜÛfä|(yX>+å*„Aw`µ´´P)ët¬^x¡¬¬lîܹ®4+}|"`«õß:üü@øU«†/…P×‘êø€Y…ÐÏbeº„{dŒŽ€î8FµA„€¥œ9sæTVV~õÕWö Pg¤±¬oß¾" %(”)„Ä´RM«.ÊEÜCS‹‹Ÿ¤UbiSXXèu€RÆqçÎÂ5˽"îšb*q`)ïJXÆYEX;vìȸj¦½€•û‹ªO¬0É"á}Û+•î8FµA„€¥œÉ“'—••}òÉ'ö PgT"`)t`UWW———Ïž=ÛsQž5Ù "ô1Mӌ˅Òå¼¼†é·DðSó½n T€ÕÞÞ®p›¬‰ÔÕÓÓ“ŸŸ?hР;wæåeûØ@‰€¥—XÎíf¾58PdZq3ÝomÛ¶mÛ¶m‡vؘÖSâ ¥Áƒ‚o{%nK9™®ö3´Gýúõ*XÙ_cçÍ›WQQÑ«W/Ï,ݯ),úƒlV²€¥s`…@ÀâÞH$úôéãð[p`€9s`å 5»±±Qɯ87%å KGdX²€•›U'Mš4lذ¿ÿýïi}KÇ5×\S\\ÄãqºÜ«­ÕÖÖF¸qÁ¥ÑÕ)¦ñÑP6ø3…о–¦i»Ý»woذ!‹~øábß)—q– ?C³o€oE Ê©¤u²s“B¸nÝ:‘ug¡¯ë:²S}Õ €D DXÊ¡ë‰Õ„Œ‘S3Þ/cö\ÆÐ¹ÊSnáƒXNòÐ5M357]…0]Mh}¨õdSĽ   ‹Åãñ@›C!`”±sçNº Â%ß’_1¤ý€} ¬ÎÎN)wïÞM§=1³ŸËXáÛ´2:{iIqß³g¥ñf9­¤èÈ,y}ÿ¤úªˆˆ,|Âú.ÑWdöDÇÏÈ)„þq`Éx›±>75°äXí ¬ÅØ¯B˜™ˇVf)„tóóóóóó5M ´  äˆ%¥ìãÈsTÄ.è9(â.üäÀRÞ¹14Þëu°è+X)CïsVQQ‘HdÿÀÙ4ˆd¿Êà·tÐ×åŽ,ŸoÞ.À&_O¸GÆ0EÊžpÇ1"¨ ¢ìÀ‚†¥‡¬uF9…0ã+¤Â"îF–ÍX爵ÈA4}ÆùÊ+¯\xá…/¼ðýW>%Ô:°Œ)„=ôÐÉ'Ÿ\YY™ö.)%V¯^½è”óv"—%°@ŽPR:°Á>ŽdýBttt(œ±±€å·Â)S¦Üu×]K—.µÿ˜K5°²ÙZŽk`™ XFÿ¹M÷”;ë7kþüù¥¥¥÷Þ{/½ƒ 9©EÜ3ø-F‹6Hóÿ8°üël÷Èè·^éáŽcDp©–€ýPW! PgTRÄ]ù*„ré¯X¦5°xY²dÉ[o½U[[kl¤QÀʦˆ»1…píڵ˖-ÛºukÚ»¤”lV!ìÕ«WŸ>}„×¹,É÷º€ðÀV2™ìêê¢Q9{|›Bxÿý÷¯Zµªoß¾§œrŠÍÇ\r`ùê†Ð¾–NÀ2dˆ0s`óAÚo¢F}}}UUUKK í¬–)ìÀʲ³Ð£9£€Õ¯_¿žžžD"‘H$ÈŸ{¢ãë :ѰС°¨ "ȇ«%,å«:°rSËTÀÚ±c‡ü–©Kö(éRÓu`ÉÁølϲI!díË«¯¾ÚÒÒRZZzÀ¸ÐR·€   T…×wWX§nß¾}õêÕBˆ††~qÒ¤I%%%/¾ø¢üI:°ŒTVVÿõ¯Íìë8°ŒêŒnVÑÓÓc¬k`…ßn•©ÁÍÍÍr aj`©r`,jF~~¾çÏîü&V+)Yd )„JpèÀ rw:°l²ÌXÀZ¼xqiiéý÷ߟ寛b:ˆè,y6bZKçÀrx zzz(›RÞ¾qjä XwÜqGYYÙ_|áB3]ÈÍÍÍ^7(À>ŽìÀÖ ^~ùå%%%+V¬pþ£9¨•kþüù4+•¬õë××ÖÖnÞ¼Yþ¤óJäNPRËÇ;vÔ××oÚ´)³ ¦,âγ€Eú”M ¬´Œ6ò‡³É×øâ‹/Þ|óÍ5kÖd¼‚ÜÔÔDŠž,ÓÎèv aïÞ½=°ü&VfC¸GÆ0EÊžpÇ1"¨ ¢ª! 0XêŒJR=w`­_¿¾ªªjÞ¼yYþº QžÉð:q`Ùqw8;jmm¥I¾üyŸX|(2«%Ïâh_¸„qP€€rĆ ¼nP€}eËêú^WWW[[ÛØØèüGÙÔã«XŽäÀ:t¨PçÀ¢ ¬¸tÛœY ! ØýúõûÆ7¾!¤,BÚŽnDáQÖ?5°ŒqTåÀŠÇãÆgSôÊ!‡"„hjj’,‡)„)wÖá­r"‘¨¯¯_µj•Õ” XÔ˜l,«ÓÆÄd2)×}H§½ûÀÝÓ&…0-¥ZhóòòDðe‘pŒ´îŠÃ8ÒeÖó§÷Àµ–r.Ë ‹ª’Bå,Óá9/Ë“å¯ÿøÇ?JJJîºë.ùWd–QÀ2u`É;°B(öu`AÀ £Göº @öqljjB 2D¤)`µ´´,\¸ÐTV s XÊÝã™ XÔþ¾}û’(ÃmM×ÈŒX«V­úôÓOyÕm$­­išÖØØÈÕÄŒqt.`uÖYEEEµµµò‹ò j4aÑ ÛA$„hmmu#…Ðá’O‹/...>çœs¬>@‘UU‹ÈËË+,,™½…õ¾[‘p[ÀòÜEͺ,î‘QŽTÐ¥F{Æ1jÖ_þò—’’’×^{Íë†8Bmg”‡!奢‰éüÊH€.ªJЏëXÍÍÍK–,ɦ=2Î,Ucñ_|Q[[Û¿ùWL,n›½K.âN)„Ùq7–õ„”8M€•1¹o@9‰D¢µµ5//LIVRˆ©€5þüQ£FýøÇ?¶ú<[•ß6Ó —îÔÁ^À²r`¥û+—\rÉi§¶hÑ"ùÅ̬mÛ¶ <ØêÎ}Ñ;wîlllÔ•{—ç”VVQQQ^^^GG7縈;í`CCƒ\¯ÍØT…,!Ä~ûí—Ös?ÝœOPLŸC2S§N­¬¬t²Ä¸i !×Àbó¹ÃV)‡âY$è(¹= ÔkSÎqèÀ n8°ZZZ®¿þúÌ®·ÆoÙ\¬\r`™Ö·ÊÀ%§fæÀ’Ëïò‹~s`eS««« VzhûâIjiiiÑ4­°°žœ¤åÀZ»v­bóæÍÆ!PwÁµ¹Xÿãÿ(..~øá‡Ój6ÿbZSLj¿~ýt–i aÆ,ÈåUE¦é56¢ƒs–é(9.ìóbH*((0`€¦i,Ù;°Òªå0…wpÅŠ¦ È677g93°Òš¡*°þô§?•••mÞ¼9åvLXþ©Y$(@j”I&“Ô‰¢ãÀ" ƒçõbÍ;³°|^KÉÒã>!Ü#ctXNâÈÝ*:)„Á°ÔvÆH X<jlltïW:°tQU"ñëj`‘¾¹¹ùÖ[oMwSi Xº]6í§OŸO›B— '5°LX6)„\Š$å)TUUU]]ͳDc ¡ç×´,S«¶µµy®Ê¥…7Ö!‡Ò»wï!C†\~ùå«W¯ö¤ ÇP ctlâÈ,°Òªe#`ñ7åÀC3§t,ä²q`éR•q×4ÍÔ•M !7ÆGz]Ó´”ÐFÀ"}Êx{¦°äù‡J•+åDÐa ¡Èúy”sëw¿û]IIÉܹs­¶`µïVA´°h;N¦;|º»»uó$'R²Û„©4x¸GÆ0EÊ'q„Ëç¨íŒþ°jkk«««•HNü˜-Kç²=Xº¨Ê¬ŽŽŽêêêM›6¥»‹k8L›6-Ý–’XÔ­[·:i=¸%;¿°°ti†º3.âÞÕÕ¥3‹EÁ%‚fÂò@À7n\UUÕž={-Z4bĈ³Î:ë³Ï>Kù-cé÷X,6qâD¹sÖÕÕÉåiå·ä¿›››e)¶€-` J¶@ƒ;°¾üòKã4M£ (Š555Édò믿¦ÿ~ú駺ó”ENÈ7mÍÃä1òŽ;î(..ž8q¢Í^èR°¨býW_}%oMjjjxp]»v-oaäÈ‘‡v‹SÆX´··“jÍš5rd9Ìy4YÀúì³ÏLo–n6lŽÜ<~Ëa¢ÓA·`%`Xº½à¿‰„ý9iz«lÜ ­—-[fzt¬Œû…nVÁ–q «V­ª­­mhh°ÚB<w؆ ³§´ìÀJ¹òwé€477Ó”ÎèÀÊý5Jö9ÒߺNFj :Y9 {¡j Üe–/_ܽHk äÆ ú^d¶€åý¸úê«ÇŽK“®,Û °\Ú žZøíHf¼ÙÕÚÚ:vìØx Ý6˜:°ˆ/¿ü2­½E(*øÐÝÝmµ£€Eo­Y³fíÚµ|ð…>`:Ý5¶‹¸ÓÇèWHÏ2­UWW'/ÕÍf¹J]{¿úê+›™ÿ÷ÕW_5Í¢ ã@÷ôô|øá‡6{aú·òY,'[à*i<‹[ºt)lÁ‚ïÅĉM…áš×<ñÄçwžýgüÐN€=Ï=÷œ⪫®zôÑG…¿ýíoŸáöÖ[oå×­[ÇW¤›o¾Y÷ZƒïÔSO9r¤báÂ…V øîw¿+„7n¿ò׿þUqå•WÚ4ûÜsÏ¥Ÿ¦"ôyâ‰'„7ÜpIoC‡¥×/¸à!ÄÏ~ö3ùÃwÞy'ýÄ›o¾É/î¿ÿþBˆúúz«ŸàáI'$¿~ 'ÐëO=õ”óß|óÍô­uëÖ™~à”SN¡¬_¿Þ~S4ò=òÈ#ò‹ßùÎw„'Ÿ|²bêÔ©š¦566Nž<ùÕW_Õ4íÚk¯BTVVžþùòô¿ÿýï™gžáÿÞqÇò6å‘U÷sFzè!!â.»ì2«ýíoãmnÝºÕø<Þ}ñÅíÑž_ÿú×üC—^z)M hüäYg%„xöÙgu¯þùçôõX,æðGiVqÜqÇ™~‹„­¹sç¦ÜÎ{ï½Çß±c½Hõ JKKõ«_ !žþyù+mmm¿ùÍonºé&‡M͆c=VqÚi§ !ž{î¹ü"ÈŒûî»O1jÔ(!ÄYgåus<¦¾¾žúÔÓO?íu[rA2™¤ÇN?ýéOÝû•Ï?ÿ|Ù²eîm?cèÂNØ ôBãõôéӳߗ ÷Ýw³ß1þüiÓ¦mÞ¼™_¡ÓiäÈ‘Æ?ÿüóçž{îK/½¤ê×sÃðáÃ…óçÏçSåºë®Kw#4õB 2DÓ4yNõ¯ý+­Mѵš1b„âˆ#Ž0ý¤¬ÏŽ3FHÓàaÆ !ª««ùÃ't’â”SNqÒ†!C†!®¿þzúïÁ,„¸êª«„>ø ¦iÅÅÅô»ßüæ7é3rÅú‡zˆ^üÖ·¾E¯Œ9ràÀBˆæææªª*!ÄÅ_lÓ€—_~Yì ïšlõjllt²;.Á·>ú¨óo½ôÒKBˆË.»ìøƒ¢¢¢‚n܈?üPy;…kŽ÷5°.ºè"YØaQ6qÔÕÀ2Íàg²-™œ$Õ[¥rw›Ä%c !ýн§‡áÌj`‘¥ˆ‰}½! yòOP;mò¹x›JRu5°ŒqÔ9°¬ÐöáºLCÚe =5lÓ¦Meeeüã…äÀ¢gzò·TÕÀrXmGÞ;Ó,B—j`Ù¬}cµ¨ oAÛë[Ôa "m¿oß¾ùùù𦙮êè$…PîeÜ0ûX»víª¬¬|üñÇùõ®®®ÒÒÒk¯½VyúŒë ×À ÷Èõ"Ä1j)„­­­Ô÷]M!lmm½âŠ+””SÛå^óåzët*‰Ž)„wß}wii)‹;Ú^ÑÄt[¸pá¬Y³èy'ÇQÓ´ªª*Ò,ü‰œBHdpq0®BÈo—„vÒ‚fkV=KŽ‚.…¦¬ò2H!äTJcwÎ'p^Äà°ˆûÊ•+­vV>Þ.Dhš>™¤ªÄŸ—u œÑ£G{Ý ›8êj`™^Üm,rU¤,âns±6q§©€<£êîînlldmHdº !m¹oß¾4¬òœÃa ¬x<žRMàFîܹSn•ÔÀ2ÆÑ¡€Çé¢mZK^L‡6(ÌâBF'`eSËa1Tùô`C„ Ÿ™9+âN‡ÈFÀ»o "kL¦?—Awa°¬¤döðsE•õë×WUUýûßÿ–»›Â$‹„{dŒNw'qŒš€Å×W¬îîº &d¿)µÑÿ5°èÚ®VÀRXÄÎ^ƾèõ)jDZ½½½´´´´´ÔÊöÈó"ƒ‹ƒi ,r«¥;ø:/ân%`% z\*‘þÞ±c‡“Q€NHöÂëj`% ¾°˜qçÓCN²³Ÿé G›rú›üXŽ_ôö2nL!tþ-Xj˜6mÚé§Ÿîu+ÙB¬ÂÂBöì,y¼!ë?øbãÆº¯èЏ[¦­­­FgÑõ /Q”¼}‘iw€eïÀâ×u¢€)<­L&“ìŸY XVÏÓøuûé¬Õ=Xfq7U¸çÀ"Sºq‘iYPSXÄ}ÿý÷ïÝ»w,K$Æg6 XFl–Úéé顟–75}úôþóŸÆç¢¦¯óh*%,Ö«Rf‰’•›@ˆx¤.¼ð±cÇò=dÔ,îøn XBˆI“&É%iü@4,…,€e¿ìõ)]ýG>°úôéCz“P'`‘”½ËêÐmÚôÝmÛ¶ŸãrݨíÛ·Û7 ««K÷p—þ çâ‰D‚÷x=ù3º¿¹ÓuuuõôôôêÕ«W¯^6^x†X”Ý©ÛYyjäíÚY XÆU,{ÆŒóÚk¯544Äãñ¯¿þúÞ{ïýÛßþFUÆI ¡©—¬ï}ï{}ûöݹs§î‹X|Û,ëOó+¤Ƀz6V¿~ýòóóóóó{zz¨a¦–ÑåDÀ’ÉÓ2%)„F:°¬îÁŒ6oú!ÚÁ”,ú¢îh¤¥à8\ïŒöŽj(Ø 7i9°fΜ9vìØ‡~Ø´Á´×VËߘ®ê(2°l3ššíï¾ûî[n¹…— Ð5‰0¦šª,`ñqc+Ý9tJ¢ãë :Ô¬Y³ª««–ÕExîܹ§žzêW\‘£ö¹LnXt!J&“W_}µ<Ö{¬,ÉØÅðw©ÇÍš5«¬¬lÚ´iªZ脞žžÚÚZ¹ §î]! +ÂvÕ?+tEÜé‚Cõ@³°Òu`ѯó´ÊèÀ…Ñ_-u)r<·¤ ÆàÁƒ…ÁE…Þá4oI™BØÙÙùÕW_õêÕë /4îlÆ)„ .,++“Ë“e‰ÚÂ8@@À²g„ /¿üò 'œÐ¿ÿ3Î8cõêÕ555²Ì ÂJ¸+}D›8Z¥®\¹²¢¢âÍ7ß)„ä×=öØc©"£naúJJ XF–QÀʲ–Ø;²Òü‰¶æ\À’w§¥¥eË–-<É–<-Ëlõ\+ãX¸ XFK®‘M ¡Ã´2:òV–¼Si XõõõÕÕÕË–-ãWäYíµ•wݪVÊÝ·ªe/`É›¢Ÿ6FÜÔ'o/`ñ­£Ñ¥\À’}=¨åg¢ãÀ2Æ‘ËroJéÀjhhX²dÉâÅ‹]kfNÉY !ý±aÃ*”1j;c¤,&ÜK!tîÀâ8òÐC}páÂ…•••sæÌ1~]¹¾À477—””|ï{ß3}—в€¥ÊE dg™B‹Å¸j„«BžVXÂA,]í×d2IkAЬ£§§‡N0Ú;Ýc9RÜŒ)„FËFôY·n]OOÏQGuâ‰'нÏMŸ=¤%`­Zµª²²R^GÇ[o½õÞ{ï9·«Û;°>úè£êêj«o¬Ã?\@À²çœsΙ>}úÎ;ãñø¦M›¦L™rôÑGç¸ ÀÂ]é#:ØÄ‘XºÂE‹•——ÓâF«µµuÍš5}úô9ᄾùÍo C!qwèÀêèè˜4iRQQQyy9MöìÙÃ×z20«r`,Ú]H± IDATšií!‘Ê5|øðÃ;ŒëG*t`µ¶¶ò¬Èª–ÃBn°€%;°ÖÀ2u`eP‹N›PÊ,c aÆ,Ùnfl0­8i5sR^‹+•š†p"`Á•3Â=2†©Ü¾=¦UéÆÏ¹€E}mãÆá(›K‘¥z©X\ˆÓŸ¬D"A KËÕØØØÝÝÍqäïʃl{{{WW—®¦Ô2†~¨««Ëôà´<òHYY™H_ÀÒ4­»»› 6ÉEÜIâÉÆEc=mßøÉ̬”,> …$¸»ŠX|p,ëéé¡£JÛ§[+ CVFx†·O+kæçç'“IúŠ©€UQQQRRòÔSOÙìµÐêþ¥««ëÒK/ýÑ~ôÉ'ŸØlDÆFÀêîî>ûì³ÇŽkõX”¬®®.ú %œz›™.Þ×À„‹/…¦¹u< ,]º4™Lžxâ‰}úô¡•nu ø •sÙdÅBhšÆöµ)„²€E¯Ø§Ú×À¢ñüÏÊ•€Åö+amPçFÚ?²³r`ɫʬD"‘L&mV!TëÀÊ2…ÚIÕ(Òz%«uÆÛ;°œX]âé¦R³wRÄÝy ,WXA°ÂM˜Êí§‹Q®J™BÈ7Øò;¸ðP®|ùª«Ðþ“=>°øÂžý]k[[_äU X|ò8t`QŸÒ4Mž,éX´ËmmmO?ýtAAÁu×]ÇŸ” ãjáÎnjØá´×]wÝ7Þ(Ò°hû}úô!AGÓ4U)„ùùùté¾à‚ Ö¯_¯ûdJË4…й‹FyC-‘HÀTTT$ÏCLXÜéè:t`ñö?þøÝ»w744È·¦æô•+WÖÖÖ®[·Îf¿è­N°¹sçÒŽ;¿TÚ¤r#~.+Ý|ë!,€¸ˆ».…P^û̘I^[[+„8õÔS…Evºî‚ëÄÅÿ OªlR•8°LS:°èo€EÖ²t`É5àMï’É$·Äa ,Ýl̨)ðÅãq›"î²òeãÀ2î,yþ{ì1ù),jö·¾õ­X,ÆÕFj'•x—ï…4M«¬¬¬¬¬´Ú,}Ñ=+ûXi9°ì‹¸Û¯Bht`)/âeY$X8¬LJŒr•C–0[Ì$ˆð5ÁÊ~¢µ–³”v™‡Ø[êvìØQ^^þàƒªúi'ðI˜½€%kFª,>yø',±ïdIW‹,šÊÛqOÀ↙özhľ3IçP›ûöí˪Âüüüÿûß|puuõ£>ªû¤qv¡«%;¡øP;¯%?ù6:°t–½‹zŸìÀr"`ååå 4H—üajN'/¿}ñ2ûìí·ßÖí~JlX| ¥+`9|PÚÒÒR]]íÜ,æ°@ŽðUqM16q¤‰ q7°Œ,YÀ25÷êX)¬x?RÔ ½+,,<è ƒ‰„nM:8ä]—§#MMMeeeeeeVB’•kÿý÷4hÈL·VJËØu«šz¸Œ–qÎdŸBèdÂíÛ·óä 5°l÷ȩѪ3ŠŒ¬ 6¨obÎák‚¦iî%§È¢lÔ“={özè¡i%ÛÀæ‘êñXCCCEE?ŒÉ X$` ¬´j`Qc¸3êX´§ííí4äÉW$oX¤Î¸!`eéÀºä’Kî¼óNav̯X¥ÊGÕèÀzàÎ?ÿüY³fÑy6BÇçÿ,`ÑÉK7â8,âοÂZ°x¶G–ýÉãPÀrÞmô\>…ŒÑ·Z…0-ëóÏ?;vìøñãu¯+ŸéÙ äˆpLÈ€MÙ¥«ešBÈ×q£€eªbðc«@ž6‘*at`išFV{{»±v»ç5°LXT[Q¾;Ê2… .ŽY X,mð$Cì{Ûæ°VZ)„ô£|$Ór`õïßÈ!Â0¢vÒ ,o„Ó ­æ=V¬Y³fíÞ½{ĈÂBÀâJϬBh쌙¥:t`¥UÄíW5°l ÷È–1Ž X;wîdeßCXƒnVW¡£J“‡lX[·nÇã~ø¡’†ÑŒÂ‰€EgHÕ»³A¹€uÌ1ÇuYœÆBç,î>¦5°¼r`™ X²‹æ“§²€¥0…P¤rŽËhš–L&)„òw¬ùóç¿ÿþû´”“,Yd4:° d4FY9°ú¼óB~Å*…;N–¬Õ«Wó|I‰+ƒBªÓêPÀ¢ߺu«îŸ}öÙ………/¿ü²Ã]ÈX GЂ èXű­­-ôíÛ×´–©‹+¸Ëë}X¥:t`‰½6+®%öÞ]777Óø¡i뙥Ò–iÂ!O;ìW!Ì £òШ$…PG%–\§@ì;}q(`­Zµª¼¼œŸÅ9°¸o•iï HÀÒÕq§ƒCÓ ù|H)`X,÷ð+¦ú,/ñ“ËØuEÜíS»»»i­X´] aÊX4ÿË€_O¸GÆ0EÊc3®%2M!\¿~=I üãu‹ùzB.,cÞwºpPTiQ°Ž>úèX,¦ÊRš‹;£i ¬ööv£€e_¢(ìXªReËI aGGÇwÜqÓM7é^w.`™F!‘H°DeêÀ2Nø¡2ý—ÿ—þH«–•€EŸOYÄ^üЬ”Ÿíµ··Ó¤=ckéÒ¥üw–1n§R#ãñ¸œÁ0{öìÚÚÚ–––Õ«W;Ü…,€PÛ¯„}úôéÕ«—7²©UWW—L&O8áùÙˆ} aÊ"îbïˆØÙÙ©s`É:£)XUUU_~ù¥ü¢ªB£äᆀeL!ìèèhlläf˜>V2Å*…PXr ¡€%§®[·®¢¢‚ÝÔö½bêÀJ¹ aÿþý)7SçÀ’,S–Í"2ÂL0âµ±…ÅémUSL8°ŒèLRƳKޔͺ“r*eº«RO¤š¯´ûé XÆ ‹Åb ,°ú@˜Xá&Ê‘Êq ¬²²²#<òŽ;îøôÓOŸ}öYWë¦;ÄUkêÔ©±Xì'?ù ]ˆèvÝÏÖÆËËË'MšdõÓÁ°è>öÐC0`@<WòÄÂ(`ÉÏ`Œ5ÅœÔÀ¢=e–Rå]™ X<åÙí½«©©éxâ‰'t +Ëê ¢Ž”–ñÓÉÃ'aÊX§fìÀ²O!4-ZoDn§ŽU«V‰½ÑÏY ¡nÂ´Š¸ë¬gDEEý!WÄsXp,ú¯œEH×DÓUé[ƒ¦íX‹¸ 3–Ëêþê©§ž*//ÿì³ÏäÓ°Œ)„:{šØ»ZŸp `ÙéM¡!™ôeï½÷Þ¢¢¢{ï½—> *…PŽ ·¹­­­§§‡ž¡éV!d•“Ž!ajwrèÀJéõpžB˜–Ë*…Ð(`éN`W,ûB‹ZE' a‡ltöÒÚ̦sèC9$‹™Þ¨Ó¡°šyÓBK½zõJù(xŽÃ^JrœBH=®ªªª¬¬,™LæFÀêêꪯ¯_³fé»òóåæ]]]tTi¡DÀúâ‹/”Ñ× Xk×®­¨¨¸ï¾û¬~š-±¹A'`-^¼¸¸¸ø¢‹.ÊxSýû÷§ ’2X6,a{ÓžrB®å·"î}ûöÍËËãÓàÛßþvQQQÊKÎÇyꘟŸßÝÝmºS|}ÐÉ òA–-KXÛ¶m3êVö–Îeº ¡i ¡ó"îNv‡áíó+V”EœlR…'t’ðA÷-[¶¼úê«ï¾û®ÍOs°6oÞLlܸ‘uÿ”uúU 䈚š¯›`GÙ%ö.*GWF›Bº²¨a_ˉ‹Öì£ß5ÖÀÊÌE#Šnþm¿ ¡•Ha“BÈØ XTe@×râÒK/ÅbÏ=÷œqhH¦'r´©µk× ‹F« mÊŸ¤™(%{–ÜZ!µÂZÀ¢E'—-[FÁµ÷z$‰îîn¼M,:8ýúõËËË“u)„6ÖŽ;ªªªæÎ+lϦ°ŒQWÄÝ>…PVMw‡îF¬XV«RO¤wéì5]…Ð&eƒ+•ß'[p ÷È–UgRG3þ¡ƒ¯½(4µ··Ó³–ÜXK—.-..¾ð Mߥk-ç¼=tÁçûs…,¡È„¥°èhìܹӦæ ý=°jjjÞzë-'r!_Øé7Ö××ñÅü(×§Û~%e°xÔhoo7>´¹iohhàÎh_ËèÀÊþø±â©€@~~>M\žõ(6mÚÔØØ˜2%“ç¢t¦µµµ%‰¾}ûöîÝ›¦[¦]'À6–i áÏ~ö³K/½´©©ÉT’3—uJÍñt#>§s,Úq^ Á~BSu@.ãqw«XPUÖ‹l›ÿú׿Œß²I!Ì  X .?~üĉmöÅ(`Ñ C7€p`°1zôh¯›`G‹Æª”]¬iÔ¶)„Xò¨ãЕ²5R7ù`¥CdäÀ2 X<°é,šò€$O/t7„ôS±€†d’lècT1ÄhÆ.8°¨I¤iZÕÀ¢w V‹ì è°ëµ×^;ùä“)ñÐþV™óÅÞåu5°¸´™NQ+`-[¶¬´´”÷ÉÆeìŒNXY¦êV•ftEÜé]:{M½T6ó9{‹g`tlƒ.‹„{dŒNwŽ£¦iUUUUUU65°R:°¨šxZ ÐÝ>åFÀ¢‘V’l:è á‚‹2º»»•§нx²ÄTÀÒ4Íè©áŸÎ>‹ðç?ÿù…^HIIöðoQhèxf¦àpq7X\±T¾€ŸòümÛ¶mÜMX´qÏ‹¸sí~…'“ñxœÚ,çᚢs`ÑÁ§‰ýk:þ:q`¬í۷Ϙ1cêÔ©ÍÍÍ),ÝóQjŒîó¥Ãª–.…0‘HðT_~àmt`ÑÈX,FÛY§Ê?DÑ¥f&`õôô|ùå—±XløðáÂpÝþâ‹/***žzê)ã³L!Ô­BÈEÜi7ucFkÙ²eBˆsÎ9G@À S]FåTv^# Â6…С‹T ÂXK®8˜®ËTÀʾ–‹ŽÎe#`ѯ˜NwŒ–NpQ•B(»¥LX}úôáù„Xt$åÖŠ},›Xrƒío•9Ó†KH§³š÷SEÜyæ$Ï„l,›ùº\Äݨ1ñ4ª–VEÜu,žmÛ¤öêÕ«»»»µµUv`e&`Ù¤Š}s L?ü@tЏ3­­­¥¥¥¥¥¥ºú;€ů÷ôôð½Cø»Ô÷Ý+š.C»Æ«£è k9]J!dÖÁLÄ3ÎÂÓy+jjj***æÏŸŸq yê"„Ð4ÏW,ÚÂ×_ò“ºB3øQv`¹!`‰½ÏÀlžèÐ^Ó¨-ß?›ÖÀ{wÖ8Âæ¸–q’À“Iã"ŒVÐ…‚šŠ“ZDÉ ¦#if,FÉÌnܬÜZÝlŸ“RÀÒÕÀÒq§X±XL—Bht`Ñu //OçÀr˜Bh_‹ît¨Í¬õ8©eüÌ×_ÝÙÙyøá‡S´î:I]É´zšÚUÙEílhhH¹’0Xçž{®€€r‰iADÒ‚Æ!¾èËšŽ©‹” ÓB«"îº{r*CÎyFKU ¬ì¬lXtH˜±Á6ÏëäByÖ Xtü3.â.O2„4ˆÊ–Ø×„åÜeSKn°ý­2/A(özÐäòö"W,SËxëâR ¬ŒXü¤×¸ñd2ÙÚÚš——GçXcc#½k#`YÍç4M£Cá0…Ðç5°n»í¶âââiÓ¦yÝoˆN !ÃpË>…®K–,Iëwi›#FŒ¸õÖ[EnXš¦é.¤W,®Õ¯_¿öôô¤t¬X¡«nóÖ[o•——¿ùæ›·ÐÔ%Ì,û2IiA[X·n]ÊO*°Œ¬ìÃm°lžèÐ^åååµ´´°ˆÉCœB(öî¬ç5°ØÔ̯Ð4©««‹¯òqؼys}}½îêA«Œ1‚DºþФÚ&…03/0—H$L5 ãsMaëÀâ‡ÊV5°tÏ«hj±ß~ûé&9F X|xÉnŸB˜L&›ššòòò8›D˜¥ÊÏöÒJ!44:¤Ç{,…L,ˉ+]‹ÃšH$äçý:¸‘¼ï$`}ÿûßßo¿ý:::2¾§, î¼óÎÌuêêêÜþ @üò—¿,))Y¾|¹·Š#]…¿ûÝïÒS XBˆ®®.] ¡é³¾àêX&L(**¢äð‡z¨»»ûÔSO•GÖÖVžÇÐS)šò’ÆáÜE#«nòáU ,ùfãÀ¢Y‹î†J~¬ÄÜ~ûí¥¥¥¹ä’K~üã»ú+ö&Ê0ÁqtâÀ¢ÛiãFèä?ýôÓ>øàuëÖ­Y³Æy¸{úDÀbQ›Ú3oÞ¼ªªªúúú”Û|öÙg+++»ººæÍ›W]]mªép-g°ØEdÃBf#ìÀÚ¾}{cccuœ§ªZ…Ð+KW‹o+4M+//¿çž{L×S3…Yz:°XÀ2¦vuuuvvê:Ñ•H$ø»óçϯ¬¬|ùå—6ØŠ”5°Œ)„¦5°¶mÛF›’OÅeË–uvvsÌ1p@öEÜuƒ)mP~Ø)×À²q`ÑäJ'`qiNù³)â.?óf§r2 CV¯^½È%lë¸ÓdR¾’k+V2™ÔºNRecTCCCyyù_þò›BnIÊ"îl]Ô=^Î¬ÆÆÆöövÊ6l˜Ø»˜FCCƒÍ¡P¬èÒÙÙyÉ%—P÷È€r/b%`­Zµª´´”Êd¨¢±±±¡¡aÀ€üÚa ¡ó"îÆUÙæC×è‘#GÊ›bhT‹¸ë[ߎk`éüÌ„¦i]]]±XÌ*…P˜Í„™€et`qké§ÉÌÌBO,~¦D­5-âNÿ5u`ѯ˜ Xº½àBÖé]SýkêÀ{#‡«K"UÉfÕÝÝ-˜çÁ´#¦)„Û¶m£„ʶ¶¶+VÈP>8Ƈ«º)‚±Tº–£k÷îÝ[¶lÙ¶m?¶5¦Zq'Ë/ìÅ¢­qþGg]aa¡Îe•BèDÀrXËÏ–¦itælݺõ–[n;vì3Ï<ãu£þŸ|ò‰¢µµÕ4=AÞ½{Çb1Ýãý°âDÀÒ4ÍT) X 0`ìØ±Â,‹°¦¦¦ªªÊôÖ‚½t}ó\Àª­­BuÔQÔžÿþ÷¿¥¥¥S§Nµß`[[Û5×\SVV¶nݺsÏ=wìØ±_|ñ…üd2¹{÷îU«VѹÔÕÕ¥K!$RÎiËÊÊÊÊÊøÝ­)íÚž={(Žx£¬RÓ*âÞÖÖvýõ×ÿù϶ú•åË—WTT¼ñÆò×ׯ_Ÿ²²­©€ÅÉÝiÁ¬<°¬¬ŒLîòTdÖ¬YŸþ¹Hg™Húúa‡&ÌX·Ýv[IIÉ;ï¼#7€,ìø˜s­£KþƒD@UUÉL7e“Bht`qR…ìÀ¢üÁÓN;Mì=Óè]¹–óBS‹‡û¶¶6Î~µJ!¤}¤.¯{:k*`±Ë8îË©ü¼Š‹‰}u(£KWë¸ãŽcï¿MwS–M ,¹Þ“½€e:ÕB¦_\\l#`ÉLJN yâj“B˜ÒEè \g–bóæÍT¯F°àÀîòÆo,]º”þ†€¸–ª•€µ`Á‚ªªªÉ“'+¼—à,îX,F¯8I!ìîî6-â®»Û;°ºººd3”Ñ5xðàX,¶gÏžžž:8äÀâsÞ>…ÐTÀêîîÖ4îÊ„Y ¡n/Œå‡lj` !ššš¨´G~~~ß¾}eáÉFÔ°r`ñL#–Í*„²kþüù .äUNXœÕEÿÕ¥êX´j¯•€EmvRKì{ª;I!ä“„þcÓÂööv9^d¿"øo.f¬‹uÊB]ÞŠÜÚŒ,¹Î:/ÓÍ åŸÖI–µµµô•´[·nÝÒèRMX|ÿ@ïpÀyyyºˆXMæ„˸®¶îþY“¤±±‘ Œˆ´<5®òñÇÓ¦å·U,»œœ¤ ‹c¾@ÑrN|ðî&L(--;w.¿òá‡Ο?¿­­M‰këÖ­iM l,J<ï¼óä§J)ÕR¾K_²d í‘δøüóÏxà´^»0K!$R:°ššš*++ŸyæÝõm§œBH›ÊÀeåÀÚ´i“î ÛX[·n6oÞ¼ÒÒÒ‡zÈíö!vìØQ_____ŸAußÂãÕDŒÜBÊfO Ó8®\¹RìD †éš+CºXNRSqgÑA˜ Xýúõ£Ñˆö÷àƒÖ ê,y#ÿ¢H•B(ï²€¥s`Ñï¦%`Ù;°t5°t3 ž€ÒÁiiiágž:–_~ù%ÝÔõíÛ—ìŠärçÓÞÆÅç{ÁLçÐÙ8°ìS{ì±ÿüç?¦_̞͛7WUU9—œøjÜÝÝM÷FËáȨ–ºº:ôáÀRÇÑI ¡0»Û‰Çã‰D‚¼Æ¤Åó­èÂȃû´iÓèê×ÞÞÎ×®ŒXÏ<ó ¥ä;Ÿñ^è¬ 6¬ZµjàÀ£FÊÌe/`1ñxœ/kÏž=õõõòq˜8qâØ±cçÌ™#¤X°JhLB´¶¶RÏÍÒ¥it=ÔÕq·°8ÇJ6ƒ5ê†nxî¹çxG:::>ûì³”Vmmmyyù¤I“ľ±`£®ÈHÀbý—,~D8O!¤¯“4P[[ûÈ#,Y²„ßÕåuê¬Áƒ/X°à½÷Þ“[hïÀr/…0­U¹2‘œBx饗>üí·ß¦WdKÖdVÊB¹_ðÍ €•H$äË X²ú&¤šJÂpHíS5°4MãU5åZìbïãCyBûHW] ¬Ûn»íöÛo3fŒn¿V®\)»é‰´R;;;éºGRŽCkÅŠ>úè›o¾)öžc4ËêÕ«W¿~ý’ɤ|ÊY9°’É$ÿ\f,±w¶,¤BÙX—2…´ª={öÈF8°rAkk+×éð3×_}qqñ«¯¾ª|Ët†ÑåÒ?)„«V­ªªªš9sf~‹/ÎÇTÿãÐ%2°t¼þúë&L l”ŒXºÂt‹¸Û§öíÛwÈ!BÊÓ\W]uÕäÉ“i>a,âN–ѵvíÚÒÒÒ§žzŠÜ틸›¦¦åÀŠÇã4¾îºëz÷î½bÅŠ®®.>JÜ*Ó¹nª6âÐEåRÞXr6M ¡€U__Oö%ú¹>}úPÁ8y*oŸBÈç·„¬vº!ÆÆe|«ÃFùì³Ïþð‡?dP¿Ù!ï¾ûniiéÝwßíðóFmhÏž=6+*áâ‹/.))aƒ•)¬¬3fŒ?>³bÆ,.„^Àb XÆcùꤰÆ?nܸ%K–°kãÆ³gÏ~ä‘GèœB˜±€ÕÓÓÃ˪:ÿ®•‹ìWcÆŒéÝ»wf,¯…Á†fœØÐP®K!ܳgÏE]T\\üÒK/ñ‹³gÏ®®®&E÷l†¹ˆ»Ú£>ZЧt` iÆÂ'Ø=÷ÜÃWZ!Ä‚ ä¯ËšC `)°¸›Ó,ÞÁ¦¦&'9ªííí‰D¢  @–äGMº‡d:kõêÕßûÞ÷®¸â ¹i X;vì ž} !e÷îÝeee¿ýíoù-›BÙõÎ;ï,]º”„Wa&`ÑE#­UeUËJÀ¢†qe]‰Oj¼nÊY a^^^OOj¹µìÐ×¥RÏC’Éd[[[,£èë¬+®¸¢¢¢â;ßùŽn¿„Ù­½’2…}š4Ä2ĸÀ¢Þë>øàæ›o&õ™úÝ‘GIoãeåÀRwȬ–ØWÀŠÅb½{÷–Wê4 X===---ôÓ”)ÜÖÖ&?†€eΤI“† ¦Ê›ó“Ÿü¤¨¨ˆœ´~féÒ¥õõõäpQ aºz@žC]77Kð”+÷¬-[¶”””üà?P¾eSkäÈ‘±XìÝwßmjjâç™J¬uëÖÝ{ï½t³d%`uï]ÞE,S–îrœ²ˆ»,'‹¸³€E&öŒX6–} ,S–qìqèÀ’ ©€Å9•ŒóX¼ 6?f©¡¡D Ý=اŸ~ZVVöøã Ç,‚?É…®~øáû￟Î"c ¬¦¦&ùEw&ôïßÿC!¹$ãBS–.…ΜÃ?ü€H$ÍÍÍòW>Û剩08°¨`–C‹g®¦Ø8°lj`ñ»·Ür‹|ò°K®Â,¹å:–\Y9c}åË/¿,//òÉ'u‡…g´|”ÚÚÚ.½ôÒ®®®={ö455Ýxã¿ûÝïìׇ~X]]í|u<º»v.™jC®–ÁÒ4­ººº¶¶ÖX(Z†9PgIéÀš3gΫ¯¾:{öì ÚßP X3gÎ,//ÿè£ä3®% X………yyyt·ÿå—_N:uæÌ™sçÎ¥-ìÞ½ûÎ;ï<÷Üs¹ŒiSS“¦i”ÃEú{gggZGûÝwßås&‹t¡þá(¤T¼íííº;y†ç'Ü+íXbï…ÂèÀ¢{Q~b'öޒ鄉”,UƒTà\wç,gsë6bt`ñ ¶aÆçŸž¯¥ÿûßÿ䯳hü!Ú&¯ œ X‹/®ªªZ»v­ñ-S–QÀ¢bNæÛ< Ð5аZ-WHý´16ÝBö¯)t`mܸ±²²òñÇçWœÔÀÚ¾}»®˜<   Ò”&ƒU)dNXrr™X:KN!LéÀjmmmoo§*boö\{{{,ãrììÀ²°ÚÚÚ4M0`€ìÖ—•üdÑx*Ú¤®^½ºººšž?éR>ø`9¿Á>ztnÓÙ(;°ÄÞÎ(Ÿ¨ÜB~‘ïÖy¦d“BÈUF>,Üae”hçκï.X° ¨¨hÔ¨QôŠ XÔxXæÔÔÔ,_¾¼®®NÉÖh¨¶ñÈyKMMͳÿ—¼ïªÚÚßSR'½NI 4CDÀ€r ÂEP°7¤¯¢ˆW¯‚kàÂEED:¤E:DH!•ôIŸ”)¿?Þ'ëYìsæd¼~Ï÷ýÖ<“áÌ>»®µö»ßµö_dggÃx«ž¥\§$êÚµ«øËs`¥¥¥­Y³æÔ©SøsñâÅo½õV5´jqqñúõ룣£Ÿxâ‰ÿ^•þXEEEiiiûöíûÓo€R !ÄX—–– …Þç \)|JY¯×»»»ÇÅÅÑ÷®$q'—‚\ÕX×™ÄÝÓÓ“3°$‹ì?À¢B6oÞúÎZúÞ{ïMš4I5Db`u¢ù4 F£ÆÝ¿õõõÕ°œ…R¢ ^Ã61°T¬ýû÷–u]¨âÞòKEk9°”»?%«¾÷ÇEK &Ð``áËVXP:t O¬´´Ôápxyy‘¡ÊÀ’BÑW¾¾¾œN ,eÛ 1¬««“<LN®IDËÄ^½zurr2¢}}}½½½›šš0OBCC¹—Îå£> š={¶‘€“XÒ²ÍÍÍ4vJ–€¥¡8€Õ§O|‰ñB·ðN‰-Ž©U^^.1°x!ì_sîÿ& ûOWÀû¥K—.X°@ã\Ñf³Áh9°þøPC–.]:}úômÛ¶¡&RÀ¼+’™™©}°Œ’Û`!cT;’ƒŠk3}üë_ÿš5kÖ| „°X,‹-Z¸p!,ÎÊÊÊ‹/ðÓ3Eiºœ‰`]ºtiÓ¦MíKmÞV¡É©qÑÃu–L‡Ã±.))A"zËëçŸ~ï½÷œ‘þ¤Œ-0óçÏ?t誦g0¥XRwBg ,×C±¹•Bÿt‹ sæÌë«oÛdôèÑz½~óæÍô &Ù‘#Gð¡­VAAÁm·ÝvðàAg8ŽÒÒRNÖŒ‹9r ðzr¹råJPP‘!5Id`c²³³±—†N§¥{âÄ áÄ·–û\‡ väÈ‘VëÀ ‡ÎÚ±cÇĉcccCBB\*QÊáǧNªñÌ_`Q®òòrŠêº7räÈ   ÊÊJÕùÿÉ'ŸÌž=YZòÈù÷®äÀjjj’XªÀ\' ÅJ ,Z©¢ª¿÷7Ön·Ó"tÙ­Ä»–J“l”ŒÍ æ’*©ü§Ÿ~Rºm•••‰‰‰J¬ÖuÑ8{úé§'MšÈ£%/9¥ô'Íy Àž\›%Z…_ý•"ûèT©¢¢‘0ܤ+ š¾úê«eË–![p«r–Ãáà šÊ€E+ˆ@äwÞy¦pß1VVVÖÖÖþþûïï¿ÿþ7ß|ƒ–r:Fè?0šUUU¨CQQ*F+ΰøÿ¶I8€…Êøúú¢|š$™™™+V¬PX´~é¢[U–ä`ðø&ÕA¤•””pß8°ð^UÅ¥‹¬*¦´+ ,hÎÀÀÀö1°¸€¶•E ª±±QrêÚŠwSŸ“·I+Å•B.üžA!e,âÎÞâbáôéÓu:Ý–-[”º¢] ¬6…¢BCCñ|mm-r<ýôÓtÚ'e €H ,T^b`¹B(œho¬ šØ$ˆÆé¦F!ì¦ÅbÑ``I!„ªPµ’¥¼0Š„iôy·Æ%K–ìÛ·¯GB À’šƒ‰‡¸Nwww¬µúúzNDh5”òO”ÿ5Ö¹sç0Z­X˜¾y”È!(,,|àâââ¸_·nÝ?üðÛo¿á¾}û¥þï @NÂ$C¢ !DAA¿@[ÊÊÊ’““¯\¹¢á¸”——777¹tÀjll„ÿäì$¶´´Ôl6çääh[úÆÆF8”ðÀ(¢›@.)±‚âÌ™3q…yyy•••cÆŒQۤŠI ,rýËËË•ïu]._¾œ––¶k×®ÒÒÒáÇøá‡ÊíS«Ö±cÇÖ¬YCyL]*Ùf³‘‡oJJJ°gëÕ«öTª /Æ×ŰJâYHßs‹ÎC‡jwíXÚ·J ,*Šn# ò§„JçÔX^Ê—¬>ÅQ*S_áCPPPÇŽGŒñì³Ï¦¦¦®_¿^¸`ñ·HËÙ•XÎBù’ácbbŒFcAA§Ññ{µÓÒÒÒÓÓ[e`¹žÄ:…Ð~ (Cee%ÔXhŒÝßþö7¸žd¤222¶oßþÊ+¯…´•åp8àŒÖÕÕ¹’‡X´ õGMÿ¥ `áUÓÍ@‡WUU}ÿý÷Êÿ%–+¬?öŠüên!„Ùl¦¡-¨¯¯×(󫯾š5kÖìÙ³ù—?(Z<æ’’ ŸªqàÀ¸.R!iiiGŽiwTÂ{ï½ç,ïì/_&ÿþ÷¿—.]êbª ÎÀ"!•ô³`‘ò”JSe`aƒ„>¤’+**(÷ ž—XØÁÑåÈã|˜˜È3Ê‘I´ À×7RL±Ðd`ˆ|êÔ©;wân%oood\Öét¸Þ«  ?¼zõ*&áΞ= xuâ× ¨ÿápÒŠÓf`™L&777›Í&Á%m°àðèt:˜ŒŸŸŸ`-X° ¢¢BÀR^jß«Pü ³EÀ*--å^ÓŸÅÀr`mÚ´iÒ¤I<*\)X€={öLLL<þü´iÓD[X\Àâ¶âJ,‡ÃAoÁÌihhh5%åJoS!èív»Ü^Ž‹!„½{÷¾å–[êêêþýï‹?#–*‹œU‹X)))ÙÙÙqqqwÜq‡’EP”ÑhÄ"rÆÀr=„P¸ÆÀÒ°°ÊÀRj (a‹ÅB½á«¯¯¯©©)++óòòæNýöꫯ&''ïÝ»WÀRN XÊ畸^RRÒ‚ „ËUV¦¦¦Æb±èt:Ìežþÿžü¯°ÈŸhÀ"OEã®`:t(++‹À#»ÝŽK¸.\(„())9sæÌ©S§Ú‘«hÓ¦MÉÉɸÔI[ Îø9!ÖyrV«5??ݺu®èͱcǘغu«³gp†¦zE”ªœ={+»žÜë%?Xõ€‚jNå$¢ÍƒÄÀ‚%–xéBˆåË—_¼xÑYþ&ôXuuõ˜1c”èÌo¼Áÿ$” “Šû¸×“EþPQQÑùóç8ðÌ3ÏtìØ´µ+W®Ì™3gÆ ­Xo¾ùæ¬Y³èŽ!×£õ„>¤¶”––bæwìØ?þDJÚ,a|-4iÒ†YzLÉÀ ­€ÔÖÖ6772%ØŸE ׋ó¡ÈšÂ…,„Ò¡C“ɤÓé° UX&L0` me`ñÖ Å)^§J#‡ &äääìÙ³gÕªUC‡…C©LâŽï%4>·ÊÀ¢Ëï$"Œ2„ЀEW5©2°P1ɆI!„€¥ÊÀâIÜ!ÎXd>ÛBwA#‰{eeejjª‡‡Ç¢E‹x†ËVXÊ“U¡æJ9°$O׋~¢¤±H ,žË¶Õ[ñ½··7HX„UÅÄÄØív¨GTÆh4êt:«ÕŠÞ(++Ó``ÁÄ´ƒ…:ÓöœÜªª*U¸?wÞy'm_ñ«}ûö]¹råË/¿¤t×$me`•””`€‡‹œehc°n»í6½^ÐòOTm:Z››Kùþé¿ÈN­Y³FùC²Œ’_ž——‡EÝÐÐpðàA½^?jÔ(ÎÀZµj¿gðÝwßýâ‹/ð™l N—/_æîÀ"¨HÕð]¸p¡   99™;o´“çªFC¾ýöÛ5kÖðÊÍÍ]´h‘òÉššt> W®\ùòË/ÿòË/®¼‹3°P”ÃáP¨”ĶÉÅBœ‚þIR\\ÜÐÐàãããíí %Æs`‰Õ„Næ#râĉ´´4ÕüД—וæSÓ0¸Àâ!„:ujjjB@€`qµgÏT5::*(44;öüü|ü0??¿¦¦ÆÍÍmÈ!7ÜpOOÊV™A®5M*)$Pb`yxx %ºz[h‚Ýùý’Ç߸qcmm­ÀRÎv‰…Å+qxñ+àD­†J–N§Ã¹æŸÎÀ"ïmÿá‡6nÜHßBˆ#GŽL›6íÃ?¤opvÛ·o_^½zÁ_m+€…i‰)M!„°Ó``ñ¨ ÀmÜ (gN«!„’‰Û`øðáz½¾¶¶VOõ$ì`« ,“ÉôÐC !§¬`IŠöåÀ’è9€…#™™3gêõzå'¹ˆAAAXSJ<›Íæp8\°¤¦ÄÀR !$®:šà,tNƒE °è¸ íàÁƒ»víÚ¿»,Œž>}š²N·JLÓ8$æJ•¬²²2¤-CWjäsÿ÷ä €ET”V‰!äÀ¹ÂÀÊÏχÉ$–ŒèÞ½{wîÜIΓ¤µwìØ1þ|m/gÇŽ»ví’HõBqÔiµZ1M• ,.YYYË–-k5⬡¡áøñãîîî:tÈÎÎvvØ ª¸Ö2dHPPзß~+@µç©Ï©U–ä9I¼ôììlè¸-[¶¨V’¬Nuuµ2ËÆÇL7Ñ E!6ñññԄÇ/^¼xÛ¶mªïr&ð“Þ…«Ê&Ož¼mÛ¶5kÖ¬X±â™gžÑ°ìv;Èwí¸¯ %#¦Z `A™ÆÄÄDEEÑÛ=—ÐÔÔÔÐЀœ-4ér+Õºp ÀÂ+¸ª‘Ëh4Â(–””`öj‡½CMÂÃé´ÐÐP½^ïííëN¸“ŠÏ'OžfÌè´‹/Z,–=z„††BIÂfee=øàƒsæÌAhê?ÿùÏ·Þz 3„l€…T Bˆ}ûöIÍç!„Ôçª , <ð}I q%uŽÅb™2eʬY³>L_¦¤¤(}!2¾œ…:»xï3g`akkk5ÎÃ[îb.3°p×·o_þ$,¢e9€%1°P>jôj)/¯+ͧ¡ªübßÚÚZ½^Oñ_nnn`H!„˜ÌPAEEE¨jtt4@Þèèh‰e±XG`` ?ÚH ,.ª ,Ò<Ò=ƒÊD¢½–^¯ç ,)„pîܹ‡ƒXôA5Õ—Ùl6›ÍP€)U«} ¬øøøÈÈHáÀB‹‹‹¥n·Û­V«^¯'?PJâ.1°”‰}?¾~ýúÿüç?ô îŒ&èƒëz!dΜ9k×®1c†`!„PG›ÍöÉ'ŸètºG}T2IX)˜ ôRûmŠ"T®tWBñ.Â_æÌ™SZZºfÍ???BÉ¥9% ®¯st8uuu¸íá¾ûîÓëõ gŒ3 8¯â¹1Ú!„iii[·nEg’[â À‚ ŠJÎ’2ÍXew¡p,U¬gžyæÕW_0`€¸V655ÕÕÕQÞU°œ…666bª¨XÄ' çùnèÌ™3Ú!„$ÊXLõÚÚZð£W¯^-4¬ö1°à?pší_FÂúß`ac£ñd›XDš 9äÀL~ã7œX›7o^¶l¸ZÎ*X‰A?~f›®¸Â^ëòåË4äÊ…wÞy'33³U  ¹óÎ;EK`„§"vÀºtéÒO?ýDÝH'Øäz^ºtéèÑ£f³˜)eU垀`ˆ+1°”‹“Gó­X±¶“›:.0Šp•$‡µ¹¹¹ªªê¹çž#ëËCkkk <==oºé&ÑúlÙ²åõ×__µj•껜 õ¬§žzjΜ9MMM“'Oþì³Ï„UUUÄOVÐóçÏcÛ `¡F£…P}._¾\SSŠX˜‹åĉ………˜Î,Gz£PÓïÜðó ?|†öÄ+¸âÓ!4 aaawÝu—Åbyíµ×„"„†_ `yxx„††’ñƒÛGGʈ< ½’Àïp8ÈQ°yi9°4XJ(P\€…[«õz}@@),:A•ŽžÈeÑétûöí‹‹‹Ã‚ÅLº…ÐYwÞKüa¡ÆÀ¢”)¨ÍŸEœ˜³fÍšgžy†"›T,$îèÈ­;g`¹žÄ]À¢ÌÁø¾®®®´´î‚KÊŸ* ,.ô+‰E·ÆHu;üE¬ ª ÊÇL+))1›Í:ŽBiÚ_Ï-„ø•dyéÎÀ:xð Íf:t¨ÄÀ¢5²oß¾mÛ¶;wnãÆØÐJ ¬]»v?~Ù²e‰p¤©MÖÀ333á¼ôÒKØ“S»$*„p8tê‘‘qäÈÈçææVVV›L&Ø))ư®®ŽÐ Ò`uuuãÆ»xñ"êŒJâ(»¢¢Âf³ÁL¬X±â®»îZ¶lYuu5.}‡O¢œe(((  sKÉÀÒ°jkksrrÜÜÜt:Ý‘#Gh–ª2°ŠŠŠ>ûì³»ï¾û§Ÿ~â…¤§§Ãwâ9 ív;¬ªïF¸ã.Xœ•PUU¥š¶ìzBÑü^½z),l”+×n„ŠŠŠHá`]¨Ò«1Êm°xÄy­ÕÕÕ‡ÃÏÏï¹K 1°°…+..ƈÄÄÄÀ¢“6b`ñž×:ôÙh4’bÄ—€¥LÊŽn‘X’\'€E°;XÛ¶mÃb©©©Ñ!$)-- Â&‹û`œÕ¦XBˆ›o¾Y#sss3 ´Ùl’‡/ѯDkIÜ!ÅÅÅ4¦h'*¦§§ †n¸ßÀ)ã`¤~óððàÖ=÷Üóðç B`‘ûÁ#¼šššp ´–Ø}ôQ²bm°Ze`©†â]T[rhÑ@`©2°`v|}}éFN‹Å‚ØCƒÁàïïß©S§æææ¬¬,U–¸6² ÙŧŸ~úî»ï†Vtv !Xx;¶o ,êe¡`Ž%Q …B&Mš´xñbØPÞ3ø,Å ÍB!„^¯—2Ì’äååa?E¤9Ñâ5Y, "€E;×X˜3555ü†4,ô¿äžñúH¯ù_–ëÀÊÍÍ0a‚ŸŸŸŸŸß„ \¼›`„›››*C›K›X$pakkk·lÙ¢ÓépÅÏ™3gh/¹Ñ|ç¯*6› Œªòòr)SÉÑ£G?ûì3‡Ãm2™ˆ¢…”"ôsz&l/¬   ÜMQ„§N4hRꢗ´¬I“&Ýyç@m…‹ð;”ÆXf³™t´ä¨¡ ø%%%ä;J!„$Ä“*))Y»v­^¯÷ôô<~ü¸ª3é¿ýío‚žÏ;÷ÑGQø`6›/]ºäp8ºuë†ÞÆäA»ÚzçF¸oµk׮˗/Ÿ‡-Ûºu+åÖêPRR‚%:<*søðaâËûí·Ê]«”ëƒ>øÇ?þ¡ì)„+ÂÅBHdd$ .œ%E[óí„Ýn§É¦ÁÀr`=zT#߯’=âÜIøi-ÌÆÞ½{ !ŠŠŠ(„ðHIIyå•Wà¨rµ€F\k.¹–#¨èRw)ý×_ÃÀ¢Br­9‡W#„ôüR)„î¬-+®M· `©î<ù¶KÒ]R,ÑZ,ˆÃá IÖÅ‹›››»ví*‘RðŠPXžžž~~~…ÉL¨œ’E( æÐ<„½ËÉÉIKK;v옒e6›7nÜèì@׋”Kƒ…ù/œXRNO%€%Z~Iuc Ð3Ý»wBüñÇXÂT ÀâîEJ§hœÕÜÜLI„óBJ⯮d`IY&ø3B(Ø)¸F!„óBT3¸‹ÖXAAAtIºÀ¾|Ð'¸HM°Q×vfvv6æ!æ³Ë€E®Qf”‹–”ÅLÙ B(þ?a`ÕÖÖŽ9rÀ€999999 5j”ªž•Äl6wïÞKQ; X­2°¸PPPÐØØ˜žž^WW×§OŸxxxÔÔÔ‹ã"€5bĈÈÈÈôôôK—.Ñ„“x4G]·nÝ™3gŠŠŠêëë‰{/X,¾5:t(}.,,¬¯¯7›Íά)À$''›L¦'NàLòÉ'Ÿlnnž>}úƒ>صkW°Š´,´áV«õìÙ³:Îh4–”” Î×_ÍH»©cÇŽuèСªª*33sÓ¦Mv»}ãÆ7n¤rÈe¡ )‰; ÁL_ýµÅb7nÜØ±cGJJÊ•+WžþùùóçÓÃpèǧÓéΟ?Ï»‘ E‹•””ÔÖÖÒ™Íf4¡{÷îðÂ9€•——ç ¾Qšxø’8¬^½Á‰Ð§*9ËeKŸÛDÂ"F.…O>ùdéÒ¥ÒÔÅ"â›(šÆ ú@­ÿúë¯{÷îݱcÐ!¬Vk\\\\\ú¶}!„P|Ú!„'Ožôôô8p '³tïÞ}„ زj'qç ,!Ò`ùùùáOØ âø@ìv; ç/Ѐ¥Bõ-ňqKÊIï" ½á:KBQ=¤I0øL:}ÂKFcß¾}19‰@ÊëÌ“¸+­—‹I܆”9°œÅç«Xûöíã;á„•‘‘±xñâÅ‹ ‹•9°ˆ)Ƶñ—_~4eÊ¡°ÈµRæÀ’,¾[“ú­ªªŠoBĵ¢ `I[_)„Žë1°8ÜL_r¼4¸•Ê$îÊ”4Âeð©ñ:‰%®°xÏxyyýýïBäææB¿CéuëÖ dÕììl¬& ·A#„°¢¢bÒ¤IRÖElrø~ âçççããSWWçì(ŽkìÌÌLºu7//OÀ²ÛísçÎBÜwß}¢e¼öïß¿}ûv^gŠ"Ç—”Ç _¿~=tãí·ßž˜˜XXXøÁ¨ö€"77‡öða|ðÁ€€€ÌÌLzLÀª®®–¦HO½zõBÜÐÙ³gëêêÞ}÷]Ú`Ю/??Ÿô†þ?þ¸÷Þ{ÇŽK>ɱcǰݥÎt8Ï=÷×™Üøâ ­¢¢ú°¦¦&++kæÌ™ä~¼óÎ;RîsBi-KcccUUÕÊ•+éâéI|h N‰~I°®9ÚBËSÚUbDèúó61°&Mš4dÈî¦rA+ "à °H Ç¤Xø‰ÀŠ‹‹›8qbbb"6“ÕÕÕ\ó«XJŠ-^¥³[…‚¥ `555)Èĉûôé#˜¶ÊÀ¢eb³Ùh’k0°èyø¥)š„(ÖuV~~¾Ífsww'°ïæ›oÖ Nð9#¡ÏÎXJKò.H}Qž ü)Å Åé‰2„Ð`0"€.¢F©†ÂNqUÜØØ(XèÕªª*%ëÂ… “&M’.¯¤9°jjjŒF#Ùn MWB%%ŸU,J€…?%K“ÈXm¸’ ?¡Ä ÚIÜ!.«M–jw¡æ–»»»GGGó$kªk‡ Z>ÁHÀ¸pK:xs ËY#–t;–¸Àª­­m 5Ñ!4™LxÓ€×\ƒÈùçÊ_ `}ú駃^¸pa`````àÂ…  „¸ªVeæÌ™ÒýJ)..®¬¬ÄÔo•5hÐ úÆf³åääà{Ú@_| ¡ø³ªªjîܹ‰‰‰ˆ;hjjÚ·oßÕ«W7nÜ ‘0ˆcÇŽ•””PJÙÇsÉÓ—7ß|3}.((xôÑGƒ‚‚x¾C.t ‰——×”)SÇ{ï½÷Å_üöÛožžžV«õ›o¾!î"°$Vq+.]º„{¦,K\\\TT”Ãá(((ؾ}{VVVdd¤Á`ÈÎÎnjj" >¥ÝnGd{jjjNNΤI“&MštìØ±†††ˆˆì‘~ÿýwéÄIƒ2ÅÔ©Sï¹ç!ÄìÙ³cccW­ZÅ/c‚EìÓ§OÇŽ- 'OQ9•••ß|ó tVlee%|°®^½ÚØØˆ@?«“;¿‰´BK}}}SRRˆGRTT$Û;t`bb¢â×_¥xCgR[[›•••-X©©©%%%¿þú+XƒuøðašPå”GŒ0µ;wfeeeeeAŸ: !T°(±°”!„x¦¨¨¨±±±¬¬LR¸h%Hr%–h°È ˆDÊEJ£¼¼|ïÞ½Ÿ}öÏ2ë ÀóH"[A$3ÏCáäµ/¾q…% `Ñ{µCÑùܮË***âuà ,×,¥AÕ``555Ñ¹Íæ^] ð]07W:±Ä¬t”ËY¡” ³N†+IÜùöë²²’ÆZyOá•üÕÒÖ—ú Õ&yŠIII?üðÙe8X ,8dX˜ëa³Ùôz½Á`ò¡ðz ×,¾“-æ›r`UVVž:uÊÍÍ x_×7Ýt”pnn.<¹ââb”LEO´ `avñæìÙ³§oß¾7n”l(Žå•‚âÚóeоNj.\¸@d"%‹¿ñ“O>9|øpTTÔŠ+ÜÝÝ«Bùãþ«`Q,¨¾¿ýío)))nnn¯¿þ:@Xh~”ÀŸªª*œd?~ ¬o¼¾ 8J ?Léð§w`9sæ‹/¾8}ú´2:áÆotww?}útuuõÏ?ÿŒÿÚ½{7=ŒÇЙ}úô‰‰‰ùí·ßÞyçz#߇Àâ”Æ'Ÿ|òüùó0¾©©©'OžüøãùJçsÀl6Ïž=ÛYÜ=üÄuX´Š)¥#!„¨†Š–A§öºÎÀ²Z­ø•3°Uƒ%™ !t8’6èÙ³§^¯/--…ÿÔ B¶@•¥šK0ŠBs4X˜–Ú!„Âù–ìàÁƒgÏžÕ°èBÜrXWW¯낺WÀÂ3´Ø¡u‰k‚ÙÂóª:$Ô”æåå… êÙ³çŸÅÀ’t>=ÀX‚]BBVzzúŒ3¾üòKq­ÚWõ‹xs8)ë Wæ>)“¸‹–ç­#šyTT~‹±¨¬¬$ì€EL-íû%ð ~ #åÀR†7‡ Xrhù.ØY!î)Âçv0°œXK#<i¥»` ÚKùCáD”x‚3‹‡'デ‡‡››¶L•Õ«W'&&¾ûî»xŒº]MÖ°0|0ýx‹3–jØ FPFvv6l« ,dÐ*€E÷‡ÐŸôùÿ,ëÇœ:u*ÿfêÔ©—å‰HÂÓÓsÚ´iªÖÕ«W‰¸¢ÿþƒ¡´´T5 ~uuuee¥Éd"ÏÝ••…ÙF †=q_§©©‰Ð>ú(-- ™³È- “€µ***€ªP6qDGbÍ´ÊÀ*((|I(„Pñâ‹/êõúõë×?ûì³Bˆµk×>ÿüó'NDþ !DXX˜———Á`°X,k׮凇” Iñí·ß¢zõêm˜ŸŸ¿dɼ¢sçÎV«533“”2µ÷èÑ£6l8tèµ „ÿØØXxc¿ýö›hÙ +,Œ º:33óøñã~~~cÇŽ7nÜĉƒƒƒ‘ØûÊ•+(ήyÂàr—‚û¦%%%Ðؽ¨2°._¾L£ z¹ª˜Ífîi™L&r7ûö훚šÊ÷3þþþÍÍÍR`¡C‡ £££ïºë.!Ä’%KbccçÍ›§ñÒuëÖÅÅÅM:=ß±cGî(H‘zÁˆˆ½^_\\ÜÜÜŒ½\XXXee%í*++ív;R !ˆ@Y `ÌÚBÈÑzTLÉÀÂ3ØI655I  ø,½^<„P´Ørzr`qÖ3Ï<3cÆ žIÍ€EoQ’I ¡€™ç ,LûÿF,~D#Ësoój‡¢Ïù¤‚_%i!žKéë;Kâ®ÁÀRX‚u²6«¡¡W ¶+àGˆ¢eP`ÝQ«Õ ™³BÕ$î¼±°ðÛTCiç!„|s«d`ÑëÈI%‘’¸CœXœEÂÊî¼óÎo¼ñB‰Å})”ƒžÁ÷ø¬ÊÀ’X`\Ð h5TS÷îÝùÜ£MÆ%//Ïjµ0õäñzC† éիר±caÓ9 ÀD\\œ`•••I|Û®]»?–ÏÓ :yòdrr2ŠÍËË£%ép8>ùä!ÄÌ™3…B Ž–/_>|øðM›6I÷æ"„سgMøüü|²SJ^·råJt—Ùl€5xð`ª³”8z2##Ãb±€vÇwìÛ·oðàÁxl+>ó]ÐÞ½{1a¤Lö¼|)‰;ÊD9žžžÔoRU©|° ´uëÖ/¿üR§Óiì<ù8~üøš5kvíÚ…Õ¡d`yyy¹¹¹;Œ,¨/›Í†EÚÐЀÜvˆãæ8c`)C©Óè´’Ü'e,áÀRe`Q0²` ,”Y]]–‚^Àµr)èõzn˜Z !„"òõõ%(¶M9°8&B[6Þj‰Õ£G!Dzzºë ,gf ÑhÄOxǺ`‘–SÞR­ÁÀúËB{õê%š³ˆ¡Á3.\HKK£-°vŠ$%€Eýz :Ç]ª ,N‡é­ÊÀbçÎø_XœdàJ!äÿ‹XçÏŸ—®SéÓ§v¾Lôæƒ>¬°~ûí·ÄÄÄÄÄÄ•+W:œöíÛ7$$Än·óüß$Pš;vÄ´-Qßa- þh"ò3î@ƒ\¼x1''‡*vöìÙÿûßBˆqãÆ‰kXÇ—xȘ£·Ür‹`l,rüýý{÷î­ÓéPTAA ³ ÀŠ?~ù$ ÓétXöiii¢ÀXB7íÙ³‡~Ñ9k×®=räHhhèã?Nà=9ÔÀO>ù$;;ûÂ… äÑâ€466Ý ËLBb9ñûï¿w8wÝu———W@@@JJ n£Cl. ,((°Z­‘‘‘îîî†PSS³~ýú´´4ø(XZeeeø3..Î`0TWWcr‹ßð•™™ÙÜܬ¼óK)€]ÈíÚµ+ßdöìÙ“Ž¾}}}á:K~ NŸ¦L™£>²Ùl?üð“O>Y__?þ|‚Õ0%NŸ>¬[”êLÑbÏŒFcXX˜ÝnOKK««« ;v¬`t€¦¦¦ÔÔÔÒÒRw:tŠˆ3°\°Ze`q w“,R¸<Ñh¡Ð“ï%„HOOÏÌÌ$'˜‡jXv»ü’ŠŠ NáDÅZ°”Ç,‹XÄÀ:sæ FAüXÚ!„âZËY!ú¼U‹pU–äƒÒX·ÊÀâìqÁFWn>ñðŽ;Ìf3¦³Xt¯%J£øAÑâ÷8 !Ô¸…³Zyè*4XðJ%¦¯$ g`ý¹!„ÊddÕXèNtâ ,h ÔAJèK —>ðm¬ÈÈHœ%r]áçç×±cG„ Š–øAqído¿ýöùóççÌ™£ÓéòòòЊââbÂq JKKÑ|ž@]ÑÐЕ•e6›KKKÉd¶‚~ýõW»ÝŽÙ’——÷î»ïÂíÝ»7===::·©Hß#%%åÀ«V­7nQ‡D‹qG‹0Xpgy!(`a3yÛm· vÝéÓ§½½½o¿ývq-‹,là8¡+D éÏ`*TÊÏÏ'ãNÄÞýë_%%%;wîÚµ«`)XBˆ¨¨(ô¡´§’BwìØ‘­`ÅÇÇ£‹~þùç5 8%E5Й‘‘‘ÉÉÉ#FŒhll„•¤ >\´œQ)Ô•+Wòóó œzÿý÷©¸]¾|¹Ùl2d‹2ܯ¡¡t,]ú!=ã ÀêСî0ÁŸ`µ›e±X”ð™*€EL›…ב=R !Œ„%iƒàà`ø]°¿®3°È\Jv“”@dd¤^¯ohh¸zõªÕjE—ÖÕÕ9ô?ÞÐ>®3 ;ÁG IDAT‹öϘ™» 6²áááR/Ñ+0íy䑉'Ž3F(ö¨€Å 7XJ‡„ʧ„ÜãLJšrÀZ·nݬY³’““û÷ï/ÔXâÚs e!fX………hZCCz2**jøðá|«Ø*KÀÒÈ%Z*€E ,h„žà Àr8x¦¼¼Ül6ó'9ÜŽk„âPD¾¾¾èFwwwš'®äÀâF¿ÄÖ!”xÖT²+!„ôCå\’¾Äu·È€N…HV3»¥úO!tEý€½*í#`"y!vÁ¤¬T¯&Ñ``!ÌÂXäCJ“&`ÏÑÅXºG’? `ýÁÀ2›ÍÒÖ:88Xûvdø:8=ƒ1aÂÜŠõè£>¼°°°¡¡áÅ_|üñÇAð6l†œ>>ÇG%Ô××ãiÓ¦q óáüùóëÖ­ûøãsss7nܘ€0tcMM ‚V1óû÷ï™àîîN¥Q}ðvLËnݺðÅÑÕ””!Ä„ bbbª««®’ë }Šn„Ââý@–Õj¥2é8Úë…¢L`‘ËÍÍ剱322ð=Êwww'7±¦¦&66––j2|øðûî»9Á’¸; !,,,äz {°óçÏ£0œ:‡·+ýŦ¦&hXèÚÚÚªª* À1bDbb"²ŒÑ±_Ýxì:ÜjµrÀ‘¾¯®®¦ÐÕäûÂÊòšƒw‰Ÿ§§§{zzr÷X©©©Ü®£žŒîææ†»JUXÿ={ö,µÄÀJMM•€!Î-“äìÙ³Ü@òí ÆÇ&LÌÍÅsƒz˜²¹‘œššÊX¼†è:43Dº…[ü„ƿ◂edd`þÃ+%ª‹"ÍËÊÊΞ=+åï.„bÚð¬jÄÀâ{x<†ÅÏŒv)Ê´€ª ¬ÔÔT 'á³ZŠœå­àÛ ÌöÈÈH ¼ÈîñóóKKKÛ¾}û¨Q£„;vä[Dz­ðôôìСCss3tQee%7UUU¹Ò检¶çææâ'n¸ ¤á“6=a„͛7¿üòËBˆÇ{ s@²üVø¤¤$«Õú÷¿ÿ=++ ý€eޙϢE‹p¤Ÿ}ñâEƒÁY]]­Óéòóó‘)£´´´¶¶6 ??¿ªª cSŸáÇC}]ºtÉjµ‚„±¼& ~½wTTTTTTCCåB"Ö,&HUƒ 2§NB²Fs×®]a322h> ¢ÊÝݽ[·n]»vU#E{”–ššJ^úÙgŸ555Ý|óÍðÙâââ’““E ݉iR!e\ƈÃÃÄLƒ—’½fÍ«Õ:|øð¨¨¨³gÏ"+‚¸“gdæÌ™Ã‡‹‹C4+—ÆÆF°˜)“1AH´.0óÉ‘¾Å¸` bÐ;c`‘ -;"X1¬¬¬”æ$°”I‡‘Ê.üW©©©‹`^I¤[9"i·Û9âÀ‡LÚmq/55•°ÉIMMÅgt8„EÒ€¶§Ÿ ]€E»?¬DÀ£ðÞ…‹êeÈ!ûöíó÷÷§:ptŒï›ÐêÔÔTn» ÀB+ˆU¬,Ï®K—.A3DGG£©Ó8€…YMî+‚Pü€=õôô¤I¥×ë+++‘˜§@ïÁÜSˆQö¨ÎèR 4!•Lþƒf8÷¾RSS©|´"""Â××·¬¬ :JÉÀ‚öV !Tåf‹Kaa!9¨~øá7ß|c·Û/\¸@­ CÍñóS§NàBÞ5é°0²è+¼‚2Òòý…4«1ý LÐø i9Ò3=zô8sæ õshhèÀqâ‚‘OHþƒ²sHàL’@zh|¾çž{<<<&L˜ðÝwßáR2”/Å’U…ó†VàTØh4feeñÃKÎÀµuÔ@|àCÃÁÉ7àËÄb± òN½½½-Zdñgýúõß=pò?p aûÄáp8¤Ê[±bþŒ‹‹knn¾÷Þ{AZùå—_à >œ2áçõõõ[·nÍÏÏ_³fÍ÷ßo2™–.]ãééÙ¥Kø+YYYP Xð²Bø¶Ñœ†{ñË/¿à\ø•˜˜øòË/?ÿüóz½þòåË111€®ð/8Pth,„ KHHÕÜßß“ì—_~ÁóË–-ëÑ£Ò࿊‹‹y0&Ѳ~èꊡC‡^ºtéþûïç›Íæ .¹Ã²‡wVBBÚÒ«W¯èèèÆÆFhçøøxxf‡#$$döìÙ è=º¥›„C¼tà?’B!wÜq‡Édjll„+i2™‹Ú⺨ÌÌLwwwT˜+„¸ûî»ÝÜÜ>l6›¡`A§ìß¿9/èÈ‘p¸,:t œJ]»võ÷÷3fŒ——Wmm-ìLvíÚµdÉwww̨ââb^ÿ¬¬¬%K–¤§§ãÎ;£ à'lIIIÄÀŠŠŠÂ眜ŒææÍ›«««Ü£G®]»RbÐy2”‚‚‹Å2cÆŒ7ß|“´dEE…Á`èׯª·téRôXXXuøwÜ؉Á±‹¿óÎ;iÇ×zmðàÁèh“à‘ÒP|Ô Á,¾Ñ%´‚§V¥Ëhé½xF !ŒGO¢ObbbøA©QªÙ`¸/#FŒØ¸qãã?Ž/1°hó““Ã};l§#""ìvûŽ;à …PRsq­477c¿ú¸¹¹ùûûK 3Ü\hÞ“ô"~bL!„4±²`Ú«««©ô?MB%߸_¿~T8ÜJΠ&VRR?{¸Œÿåî‚•TX|S—@c-%%%Ñ©;ŒŸÁ`à\trBB;ZV¢e2@e=öØc‚AæG'$$$ðt‡ááá‘””ÄX¨ê—Ÿ¡ú¤B>ð0µ‚EDDZ"7]#„°²²’Ö)¬×0t‹6€…iç±ÅbÁ¬à=‰Ç°Xà§ò…&®)ª‘””DGñéééÛ·oëVb`ñVà·°¿¨!4•··7Q„P¤¤$“ÉôÓO?7î@ üð¯F+8ãp8€´Ž;–,²øÐ<ø^"½¦Á`€‘‚±kjj:þ¼N§å™¿'L˜pìØ±.]º<ýôÓ¼'©æ”Þ%$$äÃ?;vlyyù§Ÿ~Š~@"""Þx㌌Œ×_=66ÖÝÝä»Þ½{GEE%&&†……555]½z5)) Q—.]Phà£GFŸøúú‚ì‚9 ƒӉà‘“&MBà"ãìì쬬¬   ¨V“ÉÔ·o_›ÍÆ/&„í.\ÿ¤¼¼}:¼)–¢[·nÛ¶mËÈÈxê©§ÄµÒØØ¸ÍÝÝßÇ'˜~À7ˆR×òtDË* $­…͉Á`®ÁºÀ7P8aÖl6Ks݈2¾444PþM°ø¯nºé&›ÍFÚ†b¤X4£P½„„g ,!Dtt4Ô>W>pŒéyŠn¦†Kv“”@`` JÀ¿¾¾¾Ø.öéÓšGÉÀêÛ·¯2+6‹Ô´¥ÌÊÊjhh : é>‘X\_¡ÏQÅRðÑ$Ñëõ˜¦GÓ¿¢Ì†âÚ!“¶Ü&%%uBò@’’’ ÿé- .Ôétމ%Í(¡°¼¼¼Ð·p)¡vhž766Âú@íð:ðžç`JNJJ"+))‰,”z¾ÃáÀ¼2™LC† 8p &-~ȽÈÈH !äùsœÈòªÂùªü5'ðY‡ÃQQQ‘€áÀ¿è=nî‰E+K´$ñÀƒÍ%-MжºôâÅ‹wß}÷›o¾‰ ­ÐétpfÐJ }.…ÒnN(Dò@ ñññèsçÎ=óÌ30š¡¡¡Ü CÍéÖ&:>$ÿÞxRRXY LRaa! wT¤Y öT7ú“<00ÏdZèL^ªU«Nœ8m FYnQ‹3˜ÄÀJHH€_^^¾iÓ¦¿ÿýïX ÒõdÑ¡÷¢|-PÊq-€ÅéÔX%€Åɰ}úôáçý˜ðü¤dÑ¢E@fPàÁƒñ§jÛÿù«¬ÀÀ@é ¼¼\îäL$Êàç±cÇN:µS§N¹¹¹;wîÔ©“ÄÀzùå—ï¾û˜Y³f‰–¼B7ß|³Åb¹|ù2V`FFg×KaüÎ ¸D”ª|÷îÝpŒî¸ãŽ’’’ãÇ¿õÖ[&“)&&Çžï¼óNMM ©_|±gÏž“'Oæ¬H¸p¬%öã=÷ÜãææÆ÷!c¤Cž+Và{BáºOU¸ݾ}ûêÕ«7lØ@ZX,¸Ôݺu£ ={öl,<(¾#GŽØl¶ÀÀ@h:£Ñf¾Òô B(„0`* §™™™(¡¤¤$55Õf³ 4Hy2æçç7lØ0«ÕºbÅ ˜C›ôêÕ롇ª««#p"¬Û²²2€ß:t óIx"4’×ü>wî®&Á¯”×iÏ;÷µ×^[·ní=€ËÛŸ„_ÿ„®Ã•»ví*..†¯ ¢§§g§N`Ï$ëôéÓ´gFŽ|*¿W¯^&“)((hĈ£GF``xx8mÏ8‚&Z8ݺuÓëõÓ¦MB †ž={Š–ÅØØXÌø²4 ð´“¸[,îwÒ/ä• µ$îxFb`ÑJ‘r`A”)hª¨†8ËE#+©]˜L‹Åb±X¦L™ú†+!„ÄðçãÈI7¸ÁJ´¨5s`9 !Ä(K|x^,€IpgZ9ËuÓM7‘Ý%·©9°´o!¤Sëššš¦¦&`ª!„ÊXMMM 7ÜpƒÑhÄ[èü…¤»ºxg›r`)ãq¨C”j„¶õÂÆÆF>ådwźBˆqTMFA3¥!••Xž«¦¦æ§Ÿ~š7o˜q­&qç„=qg”6 žžžÿùÏÈV2°¤B è·Ž;¢½’,„¸zõ* Á¬ŒŒ ‡ÃÈ7fG­««ëÝ»7¸ú¹¹¹tbi2™¶lÙ"% &!£(uZ@@öß}÷]ss3.N5j\U€>¢*:|ø0";Ù‹–E4}úôQ£FÁ‹Ø´iSxxxLLÌÓO?~¦úàÃ:¥‚mdSSSNNÄ€€€ûï¿ÿ7Þ8wîÜܹsŸ}öÙåË—Ï™3Ç`0Üzë­BˆÝ»wSgŠ ñ’ð """ºtéb4q5\¸ž={2y¯®\¹‚q¹á†žzê©Å‹Ûl6Üö(шD ™K\»fÑ ÜÝ݉ÿ+ý\ !ô÷÷‡ÈXÁÁÁ¤‡É¦K§5‚™iÄa©2°ø«­V«‡‡«®®®k×®^^^_}õP !äW¿ Ew¾úx=- ï:£ÑèïïÏ,þ“ö…Ò«Ðp'|}}¥Ä…Ú!„R¸7jµµµ˜Z4Ž6›¤$î¬D²°ª ,!ìÚ%=ƒ¢’R,ˆF¡Û.ä5S¸‚ݺu{饗<==‰©Ì%®ç1†h{RR’Ñh,,,ljj"°ŽPØe¡ækñæÍBªæ¼——סC‡Nœ8š(m·³$î$nnn <ºhQ¶(/.Ê.ºÀ(@›9»…B9°8B#9ÉÊX555[·nýè£ð¥”Ä]´øüžžžK—.]ºt©jwÊŽÄ÷$1ÊMåÀâý‰%¦Ì¥L1A­ÓNâNIëÿÄBj‹ÄkQ}F°YEçÌ Àòä𸸸iÓ¦=òÈ#‚épt ’Åo¾‚ðTÀBA«IÜ!Ê$î<‹ÕJª$ïŠÿƒ!„½{÷æ×ó !Μ9ôEÀŠ×ét.BÀq¡LFBˆ+W®üþûïîîî&“iÀ€Ë–-CRs’^½z¹»»_¼xñêÕ«F£QJ—#®½3H´d ><66644tÒ¤Iµµµ8u å;½Ñ£GÏ;÷¦›n*++{î¹çJJJÂÂÂ:wîüØc%''Ór A<9pÕIÆ¡¨†††œœœ•+W !vîÜùÊ+¯À…UX­ _?‡ãñÇŸ:u*h½QQQ”;ÉÇÇ'22ö>$$„Ζv`,(Õh—.]àÚ.X°·@B(„¸å–[ V8,- º X¹È’,^¼Ø`0,[¶ ^51zV¯^ ‡@P$¬òòrBšH[Qù˜>>ø³¶¶Ãeå,‰»´_%Åûå—_âB!q­ÑG¾×éÓ§¿ÿþûªš£BXTT4zôhø¢ÔLå1°¿¿?íUs`I¶Rj­tél£ÕX±±±žžž«V­"˜&v«9°Pø?þ¸sçÎAƒEGGÛíöK—.q\Uy±¯µNjޏÀzâ‰'V¯^ f%u# _BóóyE-­¨¨ðð𠥃Xú_NUÝÕ*€%åÀ „isÀ4hмyópÂq%–”œrü¤X¢eÓn©Ñhœ7o¿9 5äŒ{gIÜ©&J,®|$‹ô€ò€ÓÅ$î®X8!¨ªª"ÅE!„Ò“Ô ‹ÏŒ‹ÅbijjRÞŒ$ ¬=z|ùå—o¿ý6€3v• ,ÔíñÇŸ>}zmmmbb" 0‘8€%„¨­­•r «6S8°èÌO°ø\¢HdVÿ)òWXãÆdýúõãÇwñ瀧 7ÎLž<_‚¶=ð–-[„÷ÜsOMMMZZÚܹs¥ÁóòòÂu6v»=""ÃC3ÕÝݯ 6>ÄÇÇgff–””jKš¬kÖ¬Y¶lÙÒ¥K…k×®-Ô­3fÄÅÅ‘µ&,ÕµGg°o¿ýöÿøGeeåºuë_yåÑ¢Û`3æ–[nÁv}Mð"ò‘£ÂD¿-tGᆄ„@ÅÇÇ4ÈÓÓó‰'žf4dȬpOOÏÈÈHrõã&1°ð_AAAF£±²² nXC‡7ožÍfã÷% !¼¼¼6oÞƒü÷ÄœÔétåååÄÈÈH/ ÀBLœ81**ŠªšŸŸ7¨¾¾žë‘¢¢"X©‹/"¥TDDD×®]‡ ¦ªï aCBBÐ3/^Ä™p^^Q—ñä£> wÜf³UVVÒùR• <Ø××·´´Ôn·S§ÀêС´˜ÉdŠŽŽvssƒ§ÂÏÞi:uîÜyôèÑBˆØØØÍ›7¿ùæ›Ô'QQQßpŠ?‰E–TšÑhD‡H¹oyÉ·JIÜ;öÁèõz¤g"íl÷-„øßððp„Q=% E)¯)ä>¨ÀR2°ÜÝ݉±Hî¼š„„œVX¤®¹!·Ûí¼ùJ–haŸ­°4XÊ$î<‘¿ê-„Ê™&X¥qþ‘*€¥ÊÀ‚2áIÜE‹ßl³Ù’““qxÃCQ²Ôó€EªÚ ,©2®3°èž(>ß„s‹4çĉ©J`)É$dÎ<<…Bk3°„8Myíµ×êêê&Ož|ûí·O:õĉ«V­¢ŸŒ9R¯×úHÀB¨†Ò½;wîÄ.€ÖŽ’EZ `yxxh'q_¹rå™3gjkkùÕ™BÀ"Pò‰'ž@ 2¬ ,)„P1`À€Ûn»Íd2!€kóæÍ· `õë×oæÌ™ÊK 1-%¸GÉÀ‚fˆŠŠÒétJ›n2™0ot,X˜¥ !߀, +žWÚ\þÆÈÈÈþýû/]ºôÁ¤/9oWFüI†leºT2°P T¢JhƒBUX”¯K;X<Ã`0|øá‡K—.¥å£šÄ, ªWCÚívÂõ(„PYs^[UáS”î¦Bøùù9Ë©Q®nI¸ßëŒõóÏ?ýõ×HR‰™© `ÕÔÔ´)‰;?$& €þùÿ‘5cƌÇ¿õÖ[f³Ùl6ÿãÿ8räÒ”¸"À*/////÷÷÷ÇŒïׯàx„À p’I–F:1ÚŒ‘ÇF¦+00 kõêÕ¸y‡ŸéA8€¥œýBˆ[o½uĈÞÞÞcÆŒAÄ,ì° ÃÅ‹U'™`mذÁl6¿òÊ+[·nB|÷Ýw¿ÿþûõ0°† ¶ÿ~ŠFC;ø IDAT×2°à2†‡‡‡‡‡ý S„V +âãão¼ñÆñãÇ‚IHH€{Ý¥KNG'c°TX:.$$—KFrÜ•òúë¯O™2eÑ¢E©©©ð\!:u:~ü8ZŽŒŒôõõ¥+###1^ÑÑÑÄ{"?#wï½÷êtº‚‚â:qmrDK¨vØ&±Ø:vìh2™ŠŠŠÐðÜÜ\J‰'ï»ï>r =j·Û1‡é&MjZÿþý‘8Œx1’Œ3¦¬¬Œ®l:=ûì³Ò®•æpçÎõz=vJ¨¤ê-„J[E×»r7]º…¢ `ÕÔÔï%ÙÔ¶†j3°x!V«µ¤¤D§ÓI»#“ÉD&„»;í``Y­ÖG}Ôjµ¾ð #GŽäÝÎcÓ$áäR2°<==± þ“¬ö…J·º¹¹ét:|5Xªä¿eF§Ó©2°¤Ã"N¥–®dâ.=^!ÝùÕ* Ã×VV}}=f…”ÍD(À ~³¾!„—X¸i^ÙoX°ª ¬úúú]»v¡‰ºÑˆH“J5„P5–¢ŠB:°ôz½w Z63Гme`·Z¸`ÑIÏe§Õo”ºåøñãË—/'(BÁÁÁÄÀúñÇÏœ9…«!h“ÀS€;“˜˜˜Å‹Ïž=SÔÃÃ#66Öjµ^ºtiÇŽ‡cĈÒ@À(DDDâÙqx£d`Ó$–2„WX `ѓРÏ<óÌ;ï¼üþûï«6-44tÀ€ ØÓ&ü¡‡":sppðÛo¿}ß}÷ÅÆÆb8±Ž‡¾ð <Ü> Àf³?~á…«G;v,..®¯¯÷óó#E„DT¿ÿþ;và¾Aƒeee€…‡©>x ã^PPÓFFjP(h¢-ÿ-°Hºté2oÞ<$ä‚(X´fiÆâ~4£Ñˆ´ÎXBÿ"4,Jó$1°œXuuuuuuÄdÁ ¡SCÉËEÄ·Åbn|á…æÍ›G“ªU–³ÂÚÚZ‚]€•Øív777½^¯d`aJHp‰âÓO?å),Ož<‰ÃÈììlŒ¦*€¥Bè,« pÕ¦Â!C†$$$8#:)u²Ùlƶ+ Ô~ÁÌ™*‹€~q-€E†Ô·ß~{üøqÑÂ/v`9c`Ùív¼XJá¡‘KÀRÖYáããƒ= ôX¨¹+ ,×Cñ"IøÈJ.ê-„âZ…Q2°xòJ%ºÁ‘”ËYaûXÒ-„’[òÔSOÍ›7Ôu2°DËJ¤úh‡bCê¬(>EÑ`©v‰‹ÆZ™iš††TÚ»wo¬,è‡ÚÚZ,g ,L` K#ùÏ•¿ÀòõõݳgÏñãÇ;uêÔ©S§'NìÞ½[Õ^ª &´NDyåÉ“'wìØ>xCiiiÅÅŇöôôÝ×™€EKLWPP\–M›6ÝsÏ=ÙÙÙJ†?¬/€OUK‘’’RQQñË/¿ §)ZÒÝÝÝÏÏÏd2uëÖ­¹¹ùܹsÚæ"">úè#‹Åb4ívûüùó`9‹¹URvp GEK122’XèjƒÁðî»ïJKŽX÷Þ{ïc=vÛm·uèоæ?ÿùO³ÙÃì²ÛíÁÁÁݺu“–Uwþˆk]5d8qâ Ü ŸqÀBïB‹R) ¹¶X\A}òÉ';wîÄ ’tèÐaéÒ¥ÈÃQ;%€ú•ŸŸzÒK8°´CUs`9 !,--u8>>>èg À’Xz½ÞÓÓÓn·Kñ_éB4„24g`ì‚™ lÚOÉÀÂ%€õÝwßáZåàÁƒ¸ü‡òa e½j¡€e4%n@@Ž‘è„L5„033s×®]üæ5gdaÞŸù®©©éÁ¤í+ý–ÂëÚ”‹dÔ¨QÁÁÁéééýû÷‡r–Ë€Eµ•,~‹œôóVX؆`™+;ÊÇÇg*[¶lijj"Ëëz,L{<¯°<<<0a<==ù®„W@´$»B(„HIIÉÈÈ€z‡ÖR2°ÐEÎ,UnN»,î®`>»ÂÀR¾Ï455ñæ´ À’‚º´C9éU) KBHƒîp8øóÍÏÏïòåË™™™°³ÄÀRºyÂ5‹’¸µBøÀBtîÜyË–-ÕÕÕÕÕÕ[¶lᧈ­ &&%À¢ÿ½ÿþûÉÒ÷ìÙ3 77wõêÕ6›mÔ¨Qð‡âæ›oÆDWXO>ùäºuën»í¶úúú)S¦pÁªSž„p Qn³‰Œƒ?q8†³ á<„r‚¬X±ÂÃÃc÷îÝõõõd½\êLq___삃ƒ½¼¼üýýQIêêx@*aĈй!!!?üð§Ÿ~ ¸IIIpÉ)Bøùùᇪ!„Bˆ½{÷¦¤¤Üzë­ ÖµO¨ßüýýÝÜÜÝó÷÷7™L¯½öZzz:ç-X° ###%%.Y²$$$@gŒJÖäÉ“£¢¢~øá‡•+Wj¨9!ÄSO=•’’¦°(­,wr aêxVx`µiAbcc‘?K¹4$K¯×GGG#Õý—v,áÀÂ&¹{÷îØHˆkíåÀ⹨$›úßË…Ý]xx8ͺI°†úàƒºÈÀâK±uª6^Y[×s`yxxðôÂ…BÎÀrBˆÎ§œ²xÌËËëã?^»víM7Ý„æSžj&­e"g‘`ñ^ÉšJ9°è9K°”!„±±±˜Ø9°$=ÉIp(oá7"VZÊåŒ%¯6€¢Ãá²r(Xxê‰íS›,!„Õju8MMM:ŽüQgÉÚÄÀj»Jžî o!ç9€‹‹‹Ñ'v»ÝÝÝýÞ{ï­¬¬>þ¹çžÃgýÿcïÍã¬(Îõñê³Î™}™fX†}Ù„‚2hŒq :áÆ¨ÁD'Fq‰WÃõªhT²˜ëzuo6còÉD—|Œ~ˆ&˜q‰’ Žh"Nˆ ›È0Ãìëùýñ~çýUÝuª·sºûÔóŸÃ™>ÕÕýv×òÔó> |æî»ï&„€ ’%%%°¦‡c&Üæ£´´tâĉ—\rÉ/~ñ‹âââW^y¥¯¯ï¤“N¢ÇÇ´dÆH¥ è­™]p0m¤À‚K#„̘1#ççç_vÙe .„„©üA2ÒÙ‡B!ÔÅ@Š;žîhhh Só”——C·*XBn»í¶–––Ûn»ÿ“‘+ÖÕÕýéOBݲà…À(+‰»³OŸ>ãÂG˜©“vA3,@`Í;÷ÿøGÊ'=208œ_á&÷¸ WUU…Û±óÅv€Ã&]eÏž=’)„DÀ«ˆD"˜Ä+°t ,FåÆ.„H`áT[[[SS³páB\lÄqRCCM> ,ø œ 0#6XF)„±X fï¾ûî¦M›~øa]‹ž–ÃôaF)„„3ê¾ôÒKׯ__ZZ  *°øB>@ôˆÄ² {MžÀB – …ÐHÐõÀ’W`ñX°B 았ÀBÌ» 74K`Áòi2™Ä&¾Pf=°pâÄ+° OMŽO!œ>}zeeå+¯¼BŽŸÃ1¼¼  … ÂÌ1ååå(ÞXgžyæ×¿þuøL/‘€vì‚ .ÀGÈ”‹t` 0}útz™Ç³fÍjhhÀ§ÊÊJ¬Ìi§öÁ¼øâ‹ÐY K—À‚ ' ~íQ`IbéÒ¥pó/»ì²”[ôàÍ5ØÒ½­Š999` Jwî555•••‡Þ½{w,ƒ!èæš››»»»‰¿¿ªŒ‹N!¤ß8(MF}«©ÕG€L !XtB—À‚÷R]ªK µdXF)„@`¡ Æc¥¥¥£G.))aZäxzŽé)x±' ¤¤¤¤¤„ÞèÝÈ+‹AC 5\›ÁrZZZZZZàùçX„µ2B9Ȥ–””äææyö‘ãGòP휜xV¡>4Çèd᪡nô¦.ôeú(ü÷ÜsÏ­¯¯gòÜu×]=ôÐÚµkÇÀâƒîýãÝÆWwb/ †À¡°Ø©ŠÃ+:t»(H™8qbJ*ŽŒqºeD`Áéè-E˜B³§€Q`aù4e-… ¬ºº:èðt=°èBx˜]™ 'ÏR¡1‡<…ý ÞáóÎ;¯¥¥åW¿újp8’——G7>‚BZd,’X‚B8¾ð ·ÝvÛ­·ÞʤÊx`ÕÖÖnÙ²†Yt !y0øJBË ,MÓ†††N‡B(ÂA óWÝ]Éñ9ÜfO_€.¥ë…S/Bhä€ÀÅãñH$‚ vžU‘I!ÄÀáU¥2X0Ì‚ƒi+vü.„EEEº ,œ| Üô`CÃT݉'Ö××_uÕU¼‚I!ð)„ð4ÂöÄ| œ> ,ü+sŒ¦iuuuuuuØYë¦N:uöìÙgŸ}ö¢E‹€š7o^>¦èu~˜xG"šÈt°Â˯t~=„ÓN;/m†j`ç‹ÅâñøÀÀÌÒ™u¦N8aÛ¶m¸Å-êêê5kÖ¬Y³ÆÔ˜>®^½º  `óæÍ)F¾‘_BŠŠŠ ˆH`͘1ƒN?O‰K/½´¦¦†éèÑLsêÔ©ð£9þæÀ-Ež `¤Àb,xf¢Ñ(²60N€7öådŒüà-¶0ŠàX………uuu^xa"‘ SM)°n¸á†ÞÞÞ?þñ‘HvÔbÎˤJîBˆ ¬Í›7·¶¶ÂC[%¶¶¶ÒciÖ‡Ÿé¥.^¼¸µµõå—_&H(,£BÜhÏXSSSSSCwÁäx ~˜ŸŸ\‚@U]]½hÑ"X¦×x˜~ÉCµËÊÊ–-[¶fÍpŠ /ŸYf€G*Œ;ÕÂ*v¤{?é@oÛ¶ ´Wº€k1R`}ùË_®­­=xðà¹çžË {«W¯®¬¬üÞ÷¾‡¥YS`‰ °u£˜ý+Èñ¡¤#C]™îرƒ&°mI&“¨XDòníÚµ›6mª­­1cFyyùþýûwíÚ¥K`p ………F–Œ–e B]·Y]‹‘eÑ•¬ªªjmm¥%F% °àWtiÐCg*&° 72áØ±cÃÃÃ………⟾|°±æ ,¾ä¼¼<77 ‰Äb1X†¡&\L¿Ëº ,.bÉ(°P˜O7x9ôOt—Óæ¥ßŠyyyyÑh´«««¨¨Â&ðòDBç„NàWux€¶œFyyùÞ½{é^äŠ+®Xµjúš#PÿLL®UN:Œ¢Ì`šyÈ`ßÃp8Œú”Õ«W¯[·†&Ë–-¹™5‹^73f̹çžkª”Ê£¦¦&FÖK‰b`Á`°±í¹@LXÌ#tèСo~ó››6mŠÅbÐPZHâ#„Ìš5 fÑ«V­zæ™ggPÂ<‘Hdܸq°ÚSUU•——wî¹çvuuY[ö7O`¡ ]-¤b"d$™4iÒå—_θ€iš‰Dé•fS¡äÞÞ^± ›N!„¡F4E;jLëz`Ñ Ø4³þiÇ x¢d2 ý"áñ†é(:p‰S‡‡‡#‘ô¯óçÏŸ?~[[ÛK/½$V`!P GºƒËH$—ÃtŠ]wZ«Ö}}}t÷ WâD‹’H$°×çMÜé]yTµ½½Y¤/þ/Ö´öÈ‘#¸ßó+ÂX¸3&±šBHF88"Ôê‡B¡ÜÜ\8ÿè–––644ÐÇ‹X¼‰;¼4e´&YPP …`”©{FŒI.1õõ¯ýk_ûpíµ×¾üòËS¦Lyçw`BRVV)ŠÐnÐ=Ú”)Sjjjª««Í®µ@Ï8sæLMÓ’Éä‰'žxÍ5ט*áòË/¯­­ås¯häçç÷õõuvv†Ãaf„ÇvøÇãÒh§Ÿ~ú¢E‹x2‚Ç´iÓàÂuEgÕÕÕ;wî,--7nÜßþö· .¸ÀT5¢Ñè¦M›²fÙ²e`ÀŒê°âââÒÒRx‹ikþüùßýîw è—^Ã}ûöÁk8iÒ¤™3gîÝ»»KÈ‚7^‡úúzø4Ýùùùíííôp‘7¦‘„® =äXŒ­Iuu5&•òÉ'íííŒvO7…°¯¯¯§§'ò4¼×dóº”êúê–À´Oæç磀E7….OÄLÎùBü!­ÀZ·nÝ}÷ÝÇ+°p¶9sæLp.'Ö7¿ùÍÙ³gÓöpXiiéW¾ò•¯|å+t­àò‰¼G„R`P%Î$zìÕ%ó‰ŠÄX‰D~ó›ßTWWïØ±^m]öO<<;½hä.OŸ¡K`1Ó ‹&°òòòph„®LM ÐJ´µµáräȺ¨¶¶6hf±nµµµ˜Å²råÊÇ|Û¶m´GbÛ¶mÄ<°2<ÿ2$МT"‘À; “B(žèÑ›ü½a ֊׿WWW¿÷Þ{0U³Q@ ìÚµ‹;¸K‚y¼q¯ÕÂÂB\¨ 0€ØÚ‘H$úûû{zzàçeee “I! +%!HF(3bBHÿ$³ ,ŸX„âââÇG£Q¸;‚å¸%K–„Ãá¡¡!ù•. ·¦èP(ijWĆ‹˜ÀŠD"0BJ$gŸ}vWWׂ Âá0,]"agÊÁ²~ýzñžßŽ@À^‘ãW/'°B¡PeeåÞ½{uS%Óƒ1cÆ8pà_ÿú×c=6kÖ¬ /¼Xê6cÆ è„0û•71%„ ã#1vìØ·Þz«´´nÔ“O>iá¼bà3Œ“ àïöìÙƒ=…Bœ$CCÉÌ{F–Yw2²3—.tX¨6‚‘Gyy9ž4%WÄû) ÄF×HH·çkK§”Ó› ã‚*áX¨K™BÈ€ûÌ(°Œ¬W_}?CK7@‘HÊ×%°x,Z…uÎÉÉa¬—_~ùðáÃøš£=IC 5CŽ÷ÀâSéûƒŸsssMXš¦õõõᚦÆãqfÃxúWð¡¢¢BÓ´®®.8ÀH%™Bˆ¹¨8RŒlòòò༉»Ì¬’O!äMÜe,MÓ ÛÚÚ,(°£FºóÎ;ÛÛÛÁòIÐç~îsŸ?~üĉKKK‘À‚ÅŽŽŽI“&Ñ‹ ‹/†ýÌzÆüüüêêêsÏ=÷»ßý®@J`tEâä}BHAA¨JKKŶ Žà¼óΓ\É+((;vì¾}ût;P °JJJ®¹æ³¼à‹_üâ;ï¼Cƒ#%:½±¦¦¦µµµ¬¬Œ6+())¹ñÆ™aذÿ~xŪªªpc999½½½ }£¿‡—¢   ½½½££ƒ¾KüÖ`’àX4w8ãÚÚÚðìº ,´0/**úä“O^{íµ¹sçVWWãó£kân”?H8–Ù«³O`ñ ¬ØÈ.„ÀC1´…^RRrôèQT`3æßøÆÀÀÀ¥—^zß}÷Å@XºÍBˆç]·n“{ Õf¨gúòq™ÈSº›ëéééììÌÏÏçnæyðàÁ§Ÿ~:''窫®ºûî»óòòèMìEFvÜëêê‚–G÷¼(‡¤oŽ)Voo/P¢ô«däE+°x+??Ç«0æë ñÂd ìe:::hR?ë’†«V­züñÇ_zé%z<,‰H$‹v¸&Ç{`é¾\4Å+é v!Ô4vrˆÅbø':.2)„b¦ýp%=›‹Œdƈ;; °@¡·°~`š šÀÂO`Iž.‘H´··Ã‹L¨9¾| ¡)V,Cƒ|ü«˜Àʈ–ÿ,èüzzzþð‡?üñ d ®ºêª÷ßÿüóÏ·v® &”””ðΦ<À …Bâ±µâBDyyùÓO?Í|9f̘‰'þûßÿ6«À".pFfQ^^^PP`³`ܸqH`áË/Y*°æÍ›wàÀ^xaxxøÞ{ï]³fMOOϨQ£lVy+q a8†Y“x½Ý&ÆŒsÑEE"ì`åêÃ?Ä©24Ê‚BèçŒRN âíÍ*°ÄÐÝ…XŒ­,‘&°ø&;™LB§"6bÊaÀ+°x‹1q ?BÓäøTGZDŸTw—@£Bp°¤ >0"îîÇôµ¼‰;dè´··3ÎVô85¥ ?ó ,± + ÐSš¸kš‹ÅpŘÒ××700v¼Lš*S2²sWWðeJ#+‰À²9C`Á—h`Ç™‘¢î»™ŸŸ=/¯®ÒÍÞeŽáXüêÜÎ;‘÷è2Š‹‹mX¡P覛nÂÿ ¬H$rÕUW•———••íÞ½›ŒL ;::ÄK2ðì³Ïê.9|K0Õ·NŸ>݈ÀZ·nÝøñã‘r²€p8ŒÙÄ€…  æ` íñÇO©¤FtF¼±XL×wÚŠ¿ýío¿üå/g̘qî¹çB[FÍöe$•á#œ S¡ ï½÷JKK–½ IDATo¹å–Ï|æ3/½ôÒ_þòÂX8¬…öùœsÎ!„¼öÚk˜¬€„­Ài€î:.ã%yu‚B–™ÿ9¡<°x–®–˜À3fÌÑ£Géžî;ßù0jÔ(ɧ$°tX¼tXô— Ë ñc†ôü1h0‰Dª^æÁƒ‡‡‡§OŸ~ýõ×  ¨ V`àÙƒ[!6еâ ,‡Ã†GÂRY__lø(Ø™TWM=½\DáÅ ¬‚‚‚p8ÜÕÕ$ôªô²+Xº#FP¼nÛ¶ š&³¢]”ÓÚL!¤H::V4…Ï|¸¯¯¯¹¹™P¦e²aú1iÒ$™]º!LééÆŽ»k×.&ý™‰#O`vÚi[·n¥ ,õÁœÄ²‘#°ð3,²BÇ×ÝÝ Þ©§žzÒI'ëd¤ÀЭ“®Ö¯ýk2²Mx¯uÓÆe®Î‘BT"0&îxýRñÚá=€d7~üxH«…Bü4ø]ËËËy_gIž…™‡ƒpÃl !XºË+°`ê+¤‰XP¾.ÕÛÛ ­Àb^F‹¯À–——ƒõ0ŒCÆoD`éŽC¡P"‘èììŽÃ‚‹ÒÙÙÉ iì{`2Vò)„0ö`ö–!N+°è§®E)'ÑÓ¦Mûøãßÿ};K„{þi®/b\àÑ%Ò >Êó¡³ÀÇX Àb^7OSÒã4¨0ÝZ’L+°|¶ ¡—½)w’)„F˜O`ñ ,¬vÊB³VJî¸bt^"§À¢ÏKFzÀ¾¾¾·ß~›¯Àb^Føm$¡G×|ï,P`C­ðz®£wy^¯5 ŸaË)„¼–}‹I!ÄaÕ‡'°œU`Ñô%}·SN¢q#BÝñ¡<ŒR‹ŠŠðÎà%ã’˜)Ö±cÇ>ùä“p8Œëµ,#wI‹'¡  aÆwåå'@¯“Y–—1wî\ñ¸SµÛ†\Ðvhšfʧƒò·¿ý ´µµµ¯¾úêÆËËËÿô§?ýá°¿¬=nܸ–––P(¤›Éå…GV™P²ÔÓÓ#pp'»šJ!,,,Ä DFŤšµ=&#ûÇ1væÄ`0Á¨cø‘hJ+‘Hື}– …RYY‰2ZãCŽ´µµ¡sj]– Å(° XSÞmø 0q—ÑÞ‹=°èÿʧâ n™À(°P"­"ŒBà%›¸ã\I†PÂ=¤SM)°d,^Eß]¼»ví‚f•†ãĽL ]†ÙÝQ$‘²gt^N!ôp|á…â—L‘À‚K—.­ªªB^ÂqàÀB1ÜS`Ño4×]wÝ´iÓ^xáT`Ñí¼ìô;HÏÕ±uêîîFBX°õá\ ûÑý¦üò¡ÀËŽ {Ìp8Ãé÷ÀB{o,iš»¥)°*++?ùä·X¸Ã#s–”ú¸CSXt !Þg,¥”¦¬Ý»w; d,Êøñãkkkq{¦kš¦{[)„°b<×5qg,ÏT ¡ÿà,eMåk¸ªÀ¢QQQ±uëÖP(d–õ@ÚôKKKÿó?ÿ“I7³†P(¤[Žw¬ &àÞÏ„îîn±œÊZ !C`á÷Œ‰ûÀÀýgÁøÖˆÀ22±&„tvvZN!„ejû–‘½ ZYY ¶¦D˜Bˆ ,]"RWuÊ)§<õÔS´‘]–Ñ.„ð'°4MC†T×Ä]~û³XF ,ú\¼+ ñ´‹5 N ¹~‘H¤¤¤dË–-4H©ÀºöÚk;::@-‚÷Ÿ'°Òàe´ !&6VWWøá‡‡BK¾.!ãVz Xbܸq?üðyçgt š¸_{íµ_øÂ˜¤0˜N`†,Ö¦ObwF°-å«¡tOÁ+°º»»|ðA^ÊfîÄד˜q]À›ç5LX`ÿmooÂéß´iÓ€À2kâŽgaF­8V¤ ,Ýè€á:LáÆ@ùBZåT !Ü@Re42çX0ÛÚ¾}{2™œ5k–`l ×Å8Õò=>*èeŒçÊËË+**Ú¿?¯ÀÊÍÍ…Ë„› ëÃ?„œ/7X­­­CCC´ >À~”ü¯ÀîííÅý’»F£Qø íÜØH$" °ÆŒóÎ;︪Àª¨¨ )KS ,$°àñpƒÀÂpØT`Á6ÇcÇŽÅÛÈìöȪU«~üã3%À‰`aÛèM¡£Ì¤Î˜}?ÊÄÝ€^Ç‘ÂÁÁAKT å¶+‰¬Y³Æ‘¢-ZäH9ð&înŸÑ ma'…0¥”ŒãfzH3 k9Þcž®€îÁ]]]–Sãñx8†ËìB(H!„Kf<°à© œ ˤäææ•£.#w]ÖØ±ca/*h–8…ÐÈ †VÝÝÝpëtMÜSæ¢"Ä ¬ &ÔÔÔ>|¸££ƒöÀ’T`ac5gξwç«'C`ÁI+**>üðCØ tãÆp<=Ü1òÀ“Þ|óÍø%C`¡ìN’Àâw“ä×Ãù›£_:…6U$„L:,˜èj\‚<åÓÝQJå Ö®]ûo|C,»¦Sy‡>†Ø·oôiðÀ‚Ø–Ê(°x¬#GŽ|ÿûß¿à‚ Õ  ‚é#5Mc²ád®NÆn6Ñpoé,lü9xiã7,Ë ,¨M`É·~‹^Y6å…—é”@Ò –¯Œê†GF£Q(VUîxjf+H!¤ÕUð!///''çàÁƒ¨Qà ,¸É€¶¶¶£G¢±‘‹žIê §£*¸¢üü|݈VOOO2™dî³ÙB ß‘Àêë룭¸h׎º¡À‚†‡‡W¯^M_‹˜Œc1Ú»w¯ÍBÞ Ø"±K2“jËÒcÆŒÁsé¦ ÞDàUî‰ …füÊ"³ï m)„YĸóÎ;ïÁüò—¿l§x°ÝA0ÐÔÔ$> ªªŠî†ÞQ`ñ–å”XmÓ_ÒÄ Â…9áÌ÷ŽX8\¦&zñÙ!±txx¸¿¿L¥„ch«ûï¿ÿí·ßAÀN ,y– h˜¸“)„„ºáÄ@%O`1XLórÿý÷·´´ÀLÌŽÖªU«øhZS`ÁÂ4†)'°x–€ …Bðv£Ó4-‰$“I(J·…¤ÊÓ¥b±àC ,¯X`¿}Ï=÷¸Q”=£#P ,±téRž½b∖n ̼ŦË”ýlmè·¸®®îÝw߯.æWd¤G8räÈÇ [0c aÊQ ž¥ººZžª“ñÀ(°ðDpÏi ŽLðR¦:è…¿ÍÉÉ©ªª*)) œiè¦BUñA‚a€¤–Ñ.„ºË{`Ñ…oŽƒÀ(°‰|Ò9Ú‰p/ã‚ êêêN9åúKA !²Tt áóÏ?ßÚÚŠÛk"•——¯ÜdܘvÁËËË;õÔSÑ …¹^ ¬)°€À¢o\‘Ñ›…–.Sc6…þŒRð¹‚ÿÒ ,ü¯YK¬ÀÂbéüAbR[GG‡Mw™B ÙBx~þüç?“ãXº)„º“Œ‹Ž2“B¨ëàßÔÕÕ­]»–þR)°ü‡%K–,Y²Äf!ô¬)`ò«”»ü„Ãáæææh4Ê}³¼‰{¦j‚㪂‚‚ŽŽ ,è gÞè,º}¼Û ,£*MÓp¸oŠÀÂbÉF)„š¦ÝÌx<ª™”&î„Ñ£G=î¿ÄWQQñïÿ›Œti(Æaæô:›)Ú”Q`Á©M¥’‘Ñä—1X´˾€±u #ͯÅ+°h ÍÎRXüÞíÝÝÝðÛ”VÊBp Ôÿ3Û)À~”PTzRáßüü|ôWUUÁ®L`kíµÂÑ£G;%Úåajÿ;Ëðò.„ÁGSÖ¾}ûà™w[…Tú ò­b~~>#;vleee[[[oo/*°ÈHïÇáÝAVJËÔ®ÍNy`Á=nL¼]FDF²ÌrrrÀk7]VQQÊ™™ÀUVVB£*C`AÅâñø–-[¶lÙbx#8LÜ1 ³gÏþàƒLy`õöö=z4Ãà!ý ,AÝè „q@ú`æe¬««ãÍÍ*°˜ƒX•••---mmm@`rÊ)¿ÿýï׫[1 žÐuÒ· Xº¿¢XÄÅ„ ¦=°ðH:ˆâ«†Ÿ§t9ãŒ3víÚÅX¦<°p%Û)«¸¸¸­­Þ…W`Bû ÙàÏ›7ŒÐî)SQ`1)„ºª*ð=¤‘6¬@Q$¿ìŸU˜6mÚ¤I“ÆÜÙ„wXH,ÂPÛ‚–`†ŒH›ËT !l{<<< ]ˆØK·]sdÊ­ôúúúdLÜéŸèXðAœBH?in+°cHrü0‚I!´æe–ÀâŰºXPš¦i+W®Ä›Ëk) ,¸ ˜SÙQ`Á¥ÁZ@`ápg``€~yiúUœBhÍÄžBÓ ,,¶°°®÷½÷Þ#Þ#°•B˜f –î_y4ÔvX±XLwìÄ›¸¡‹ÇgœqàÀ믿žŒt4Ÿ|ò þ•6qwƒÀr6…0//gØ™ÂP(ÔØØØØØˆ÷S—ÀB÷nMÓ˜n%ƒÅ{8Æä&#éTÌÂFBˆKG³gÏ&#óOÉÂÖÖÖÒÒÒÙ³g;«À›¸§T`Ñ‹F%%%•••ôý”7CÈ(°$ ,èà K…š´µµœÑz<³gŸ©šÓ ,ºœqãÆmܸñÊ+¯ÔýÄXÌÛ$I`áý+ø†N!¤ \µjÕÁƒ_zé%B=$)‰™Í‘ !O>ùäÎ;1U`*…ÝÍJ!„ÑK[[[___4M$¼+‘H0›ZŠ ¥K÷EƒÁ5:˜B¨‹´)°Sà-ÐÆ+ŠÇQ ^š_áL$Sù]·e^!ápwžLI³+Ïb–neÀ >y` Fx8€Æõ(‹.Ír ¡x¿ä=°R*°!¥¥¥8†/=úÝï~r웸èðɤ2 ¬Ù³g=¿DŽ@àEßRÅ0SÊ©S§644|ÿûß§.N!„7Ôš‹_OK&¯'‹UVVˆŸ6q§$À‚ï½–BÀ“£išR`¥fXð [S`Á;hÔ ÆFvB …Bx^˘‹MFúAmâž)KÐubõðÚÑAïXYY|iÄ1Á‘ضmÛG}„¹x@`åææòÃuÈ"”O!´O`Áb8¸Õ‡N&“)SéÛxäÈ«§§'= ,üùÌ™3[[[wìØAh¡ËQ`á)øZñ ,dÌ9rXF ¡v,Ú‹®XUUÕ–-[®½öZÝ_hšÖÙÙ \9sEbÒÇ”‹I!,))©¨¨€1X ¦WÚ,˜ÿšJ!ÌÍÍD"½½½ N²¯À‚GñàÁƒdddËX999¦¬šš|ÆÆŒƒç ‡ÃÿñÿÑÐÐûf,Õ`·Sü•îYx+e ¡.”V–"À ¬æææLWÁ—ðމû¨Q£ qGK&…M{ÇœœZ(‹ÐÞL‚s¥„©B"G`Áð]w &V`1]> ,ø,P`á.„º)„6XpÞœœk)„8ŒX°`®`ã¤kãÆ`HdA¥;‹€k‡ŒE™B<ï™gžyÏ=÷lÚ´‰þ9‹>2¼&£Fª¯¯¿è¢‹èŸãp'‹Áñ4‹½¬” ,ÞË”‰;!äÀ¸ í¦Â_‘À‚yEž{È8•žž†¿EEEb„‚e0q”$° A–BA' l~~>Îaº\†À¢W¤ ,))9묳fΜiV%ïàN„–Œi¾a=zT·8ò7Þ8å”Sn¿ýöp8FAª£;éç~kéÒ¥kÖ¬‘·¾B0--ziÁ—p߯_XXØßßßÞÞ.™BèééÙ…G<°hÕ _ £À’iTù§œ"ˆy}™555¹¹¹xûí·‰œËl ¡‘–áp8//oxx˜Ï=$©XXC,&…>ºd˜U`™ºE¦R±2à¿é¥1 mŠÀ …B¸ÍâØ±cé‰ÃÒ¥KëëëAh)P`Án§ðÙÂ.„F)„ºPXYŠ›¸[螈æW4ÆÿÞ{ïÇãñ¾¾>ñ*üxZÆœ6*°¬MŸªªª¶oß.h ?þøcšEp?´BâBü 9^õÍo~óºë®#„¼úê«Dâ%¶Âq,qG——wìØ1ÞA™ŽÎ´iÓ^ýu~¿HݱBú$|EéÎBy–Ãxë­· */£ÀZµjÕ–-[0ÛèÒK/=|øðĉ+**Ž;öÑG¥L! …B`Íÿ¥½2y¸äeô àÏé5Nü SI™F•ïA0Þ×ׇäД MÜñ¿³fÍÚ¾};$͹‘Bhä•………À­ðI¯ápØèý•Q`¥òLY¿¼ËB¿lJE)((hkkÍ”åB—%“IÀ8«À"„Ì›7ï•W^!\ !ž ,BHQQ³¯7 øÁŽ+mXŠÀòlâžÎEõ Á;&îd„ÀÊÏÏO$}}}°¥…Qs‰<aˆLy`Ñ ,ÞÄÝY¬h4Š­­Ñ`z#>ý+¾2ð‘+ eGÅ«¨ŒR<°œR`ÁÑZÅZ !ŽohKÓ´D"A–;kâàXp] ³~ Š$° pÝ)%ÎÐ÷½¿¿¿··îɲeËè±h8¢À¢ƒhÊ ÀŸ,((ÀÇ2ùƒÄVzzÆ lß¾Ýòè\!%˜8JXsçÎݵk×Áƒ¡'²¦ÀŠF£t;it:¦†°mhެ)°PÊ$©À*))innîèè Ç)a3…È)°~ô£ýä'?1*>ærp7LX2,¡)0KóçÏŸ?>þõÛßþ6|˜7oÞ®]»¶oßž2…ÊD ˜GXš¦9åÅ£x,™FU@`¡‹ŒìŸ#¯ÀÊÉÉ™;w.Þm7R¡2@`™2ÿ*,,Ü¿?p+ºo“Ñ"–Øëç?ÿyww7¦3ùºR/y–ØÄ]¦<°ÈÈSjSOx__Ÿ …0š““óÜsÏõõõ7N²| ¦£ÑèèÑ£qúC+ãˆpBBHQQÑG}D¤MÜ5MH&“š¦yS(Š$p ¡‚5d|~EV“€À"#{²5—tcG/ÞJz`!÷AÜQ`Ñ_¾ÑñI‹I³2"°rssQábTÛ”XF)„ü>ÍF)„Î*°2V$áǬøÍ‚ èï™Q—³&îÚÄ=¥S$ ˜%°t=°tg;L*^ZJù†#Xô[fÊ‹þ ½ë%Í ¬ô 77wáÂ…¦R·ì@ÒĽªªª¬¬l``öß´<}æQ̬è ¬)°+åK …æÌ™ó©O}ÊTåêšÅäôtbK<,¡û/šÀ¤Ξ={ùòå ,pÀ’ Áö诿þzÊBrü™³—#©ÀÂÎÑòX¼ËÚšÿ”b—D¬pSÖœ9s°@£%%;)„4ûcJÀ 퀑ÔHwÁ@+°øÁÒ²eËÖ¬YƒËpü‰ö~¥âªËl !½CŸ5ž‡z¨¡¡˜kÝB|À‰Ä¸qãjjjäg.óæÍ+((˜6mHïáKF%v%Æö?%%Àzè¡¡¡! &îiðÀR ,oÎ[ ˜KÁ<5¿ºì²Ë-Z´lÙ²ßþö·d„ý1j.i+''wà–ôÀ¢SÝV`Åb1`7Õ£{\~$ªK`!-êŽ IDATÀ@÷€ƒïqà…}9nA…‹¥F&î|õ$MÜm*°ðJSz`ñò+2r·KJJjjjèï_{íµ¦¦¦õë×ó×e8õ±cdž††<Â(…~éøcxÀœM NªKùá@þŠ6º)˜ñ „*a !-.K¹ ¡M–¦i¤ ]4ŧ‚&°²M¥Hœ|òÉ7n\±b…î_ñE5jTUUÕ'Ÿ|òþûï« ¬”Ð%°èi•¼”UWoMJ–5R !±Xlpp0e !¡î­n ¡¼+e ái§vÚi§Bþïÿþ¾±àÔ)†¤ ¬×^{íôÓO'f,€# ¬”#4gX20R`Ê‹ÈXô&''7Å«®®6šÇÙW`ÒO`­äá¯h–ÑY\U`E£Qôš'°€®µ³„p饗BèÉÜðœœÈAAo) MÁÒ¥Kѱó=ñžöiÈXHAö÷÷ÿîw¿;|ø°7SEâ-X»†)˜…wLÜ !‹/ž9sæìÙ³Í*°p±ŽXJ!äRNX¼-—ƒ ,ÖˆXH` †¡¸¦3¨gJ_=ÞK7…Ð)ÖW\ÑÐР;‘ƒZéX0î¡Ü“'O>묳t¯Ëpó[[[‰ñàØ(… ©ÀÂïÑįž ¯‰îlöÀ"#C®¶¶¶¡¡¡x<.x³PUÒM!ô;uuuçw~cÁ ÅìPI),,ÄIH¶)°TÏ 0q\¹rå–-[èÆŠM`ïÒþýûI&XDZD+°À :ÉBk×Úû)„£—‘>’.éBqÔÒ À_þÂ… #‘Hss3]ó”e4MsÄ+åM^Å£ø5™FU—¦áXp>ÄPBnn..ÔB‰*°Œ °ˆÁj$l*°t=°ˆÞæk( °h p’ŠÀrU%¾4Ek¿¦_sh!5MÃŒrT`Ù< í>FŒGþ4RXL¡œÖÖÖÛo¿½§§'//ORž–¶B¥Àòlân´© FÆçW Ž2Vaa!x½3–d !*–MÜ™“ãË¡—$°˜Ñ›€À‚ŽA0ŽÁ.A× 2Õa݉¯9¾K+))illÌÏχ“ʤZV`%‰ÚÚÚÚÚZÝ#¡X]»ŠÅ‹ŸqưbÌ€>^^8 O`Ñ ,|7>%“/GF%Ø…9’C`•””ìÙ³Ôâ£ÀÂ…M:…Ш΄ªªªÆÆFú&=V÷Oü]‚ÂÑ©³5sss³V¥zÆ`ÀTc±tŽH`\U`1K)5/ R*°\z‰Ü#°ø_‘îL¡ €»ñ™Ï|¦±±‘‘ 3`vÑu’VnnîܹswìØ&ЦX¹¹¹bK~ÜÚHdH$zzzRŠÝäX2)„2/#–ƒ{øÄb±sÎ9g÷îÝcÇŽÅÃŒX𦵶¶ÂŸ q‡Ÿ±cÇ–––¶¶¶ Ø%¼^Ú%MteË ,šÚÐ4 þ ,øSFX„òó’ß…`ß&’.söñ-Xj˜\ “BˆÒý‰Yü{äÈhÕåW•¥°‰»‚5xÊĽ¯8…2zôhp ÄÅ:biBžM``Y!°¼ À@!M`é.)°4M«««##[GɤZV`‰ûiA áºuëÖ­[gô«ÜÜ\ zäX°ýJÊÁ1~æXpj]µbÑ¢EGŽÁᯀÀÊÉÉÁQ câ#O`¡³ !}%[ Xø+FUXX¨iZÖX Ù‰‚‚žÀrI¥kânY500pìØ±H$‚ºªÀJ$@1è¶Þز J¸í¶Û®¼òJÔÅ` ¡ü°Áhc–ñãǧ”À¤ÁÄ=e?¸dÉ’;vìܹ“˜$°Œò —B(°{ëééqPÅïæl-…ŸÒüü|Äb±ûî»9¬¾¾~ÿþý“&MâK *Œ~p!sçÎݶm›€]‡Á¬üŠPÃMÓŒöÍÔ,•íÝ»—è=’)„„+j°¤ *6Xò)„gX³gϦ¿t–À"Ômq)…Œ,ýó–òÀÊ:X¥` Þœ_AŸ-V`ŠÀ¢X’XâBú#VÊÂX,ÆwŠ2 ,~å!°äXŒ‰»îhÊ. ÇR¦ÚQ` ŽXb™%°`‰ÕŽ þ¤«VC<ÿüóddF"$°@488˜›› µB N'C`Ai¦,ÝB ±–I!äï’.…³kpÊ˶B…ìĬY³>úè£ÊÊÊ4(°þë¿þë«_ý*íìCÌ+°Ð‡±µµ5™L–––¢¶ÈÕ—HÓ´ÜÜÜ®®.Ë ¬9sæ {E„)„Fà”ràh!SX„%K–<üðÃÐ ¦Ü…þ¯ \†ÑÍ,((øøãe,MI„XÖÖ<°§ËÏÏïêêÖ½×\sQ iˆ| Oé7Þxæ™g~ö³Ÿ5ú­ ûúŠŠ Sk·p£Œ3MXÌOÈñÃ$üײ *ÖXÖRÃá°ý—”¾d$°>ÿùÏwuu5êé§Ÿîíí2eŠÍ³XH!Ä‘¶) ¸ÝœœÉ-I=°å-XÕÔÔ¤r%,Àkó+ˆ#­ÀXðÎ>W`év¨Ìg¸-iH!ÄAƒ`C=¯À§"…‘Re”B¨«À2J!455Aõ1¾+‹‰h‡À:pà‘ÖÐ÷Á¨æغ—¯;\àcñ”Vww7úÈ ¿Ò}̘])?³)„F ,ÉX[0q'#7ÉGT`Á_.\xàÀù¥AÆXÕ3fã¸mÛ6ø–4—X%%% {EÌ+°°gò‰Ë ,¨ª‹ …Ð(ˆü‘òCŽŒ{`BN9åü,£ÀBóÑ€Öððp$18;òvišÇ{{{^¯À’yé´¸D"ÑÕÕeê)"ÇXŒÜþ³Ÿý¬€½")°Lå’ão”ã~ –,Y²}ûv]§|â¾ +fJe?.d̘1ØÔüà?€ÖÔ‚<˜aªL aJK×Å ðÀ@²|Ý•u°‰»£[CÆçW x,q !|°æ…Ÿ"‰D¢³³“¤×K—Y+°Ä)„ùùùfX ¥+¡+°V¬Xñüƒ¸©ÀJ¹–%0qƒÙ°Y ºFé2&î„ëà iZ"‘èî#}ƒl8Ýßß´îl-Eà‚-ºeXp.£BË ,˜u0²B͈yÆXÕ3–㘖.,+°xËí—6qÔÊ H!4 "l]OOÉ,(°Ü#°R^þĉgÏž-ŸB8cÆŒ·Þz‹XápïIee%³Ý B’À"„$‰ÞÞÞ´y`Ñ“kÖøÃöööÉ“'n°—ø0Xp‰ÅbÑht``À”ƒ;9þFÙ!°˜ÿ2¿‚+*((X¸p¡nå‰yVzRY?ÀÈ¢üÊ ˜Dû)„üªÀÅ_ü©O}J²nš¦ÁóÙßßoö2…@i|•B¨ÀÀS»"dL܉%+e !}°vÀJ™B(O`¥T`MŸ>½®®îä“O–ôÀêïïGA5M`Áe*–²KÃ2uÓâì+°RŽ×í(°àƒ–8…>¤ì•áÚS*°E`‘‘çY° !yn¡ÚK< •Ù…`ŠÀ­ó'Ë ¬Œ ã–B–cܸq0ËŠD"Žg™ `MÕÛÛËlAHÜW` °cÇŽd2yÒI'Éÿ ,S“«n¸¡¾¾Ö ˆßR !gžy¦L5 ¨¹sçÂ]”@6 %ÈÔJK›½µ}ûö–– ®$¦L™²páBÐaY&°,(°ÈÈ0À,%V`ÉìBȬx R`J588hÍü7ƒÞØ4XºXFïš5,BH<Åb³fÍ2[=·EX °4鯃gàBkð¦‰;´ÑfSMy`¥2 ,BH(²#Ã&zü –‘pÚi§566~ík_“W`¡Z ¬ÈH½$N$º4,A×ÄݾË=Ë”+ãaFާ¦X° ø¤2œ”'°à¯Fƒ xn­y`ñ)„ð_ ±x‘Ê+°àHE`)d3âñ8ø¾¹”?hlmì+° µôËK‹Å Í1µîuÇw444àþJ!$%£ÀBË0§,IIµÑJ(Â9#œ½°°ÐÚ¥»õ &ÔÔÔØ]c/&Y›´vX¦LÜÆJL`‰oã]wݵuëÖSO=U\U¸-öSMy`9’B˜NVv!$©]¤Ç+3“a°Tà`V{{;³ Ž‚ ¼¦À‚8B ¼‰³)„º»M°¡¿± ¿"î§‚.þ ¯ÀB̘1£®®nùòåFµE œ)âñ8m+.*Œû5}þ¢ÚÛÛc#;ê¦ÚW`¥\мå–[®¾új†w“)!$C£jS…Ûë¤\w¹õÖ[=ʯ ó ,úòe44S#û»)(**ª¯¯×åžR*°ºººà°N8aݺu«V­’9£KÈ8¥zÆ`ÀN«««<˜ÎüAB52fXF)„Q`YCiié±cÇøŽ8eÍ mˆ7v!$„,_¾¼¨¨¨££C|Bh¸ÌiÊËT ¡#÷%º $°Àî——'(Vw !‰DâwÞÏáp˜®¶Úð¾X¾ l—éêõôôè–À{`Ñ…ÿõ¯ÅÏPIôXòwûô‚BþùÏ’‘£GÒ%úH÷`Xv&„¬[·N÷ì¿¿÷½ïÁ7>ú(|sÛm·%“ÉóÏ?þÛÙÙi¶ª÷Þ{/!äšk®)))!„´¶¶ÞrË-„Ûo¿=™L®X±‚²mÛ6ú'¿ÿýïát‘H„/âýìóôÓOÓàô†ÿ“×_=üê‚ .0{™’hll„S<õÔS2Ç/\¸rÞyçðöÛoãÅöõõ%“É'žx¿yôÑGá0ج}Ò¤I–kŽ$ãÝwßÍÿuíÚµ„¹sç •ðµ¯}r×]w%“Éë®»+ùä“OÊTà‡?ü!!äòË/‡ ¿øâ‹Éd»âñ¸Õ+ûÿÖoÌŸjkk !_üâ !—^z©ýs9ZeÀ×Ùm¨ž1ð]{ì1¦ÃJ‰ââb2"·yë­·ðû¿üå/„+VÀ­­­îTÙu¤ â·¾õ-A®‹gŸ}–Œøu: X¾"„¸ñì=öØc7nüûßÿ.8æôÓO‡ tww;^/¾ø"!¤¢¢Bæ`™ò³ŸýÌ‘a$æn………’ÇC:!dùòåöÏ.7Ây>ÌüiÆ ð§çž{ŽùÒµO<ñD2™\²d ü÷Oúƒë|W\q…#U¥3dÍþöK_úüöÁLy0òq⹉§°nÝ:BȽ÷Þ ÿ}ýõ×q c4…I&“D|ÖYgÉ =öX2™„q!dýúõf«OÈ«¯¾št“À‰7AsoI¯åµk×Þxã®VÃG°‰;̱,ÀS)„¦â¨iÚ¨Q£8@Ë•m¦Ne(ª²ï?dÔÎŒËBÚÄÝ(…P÷Š Žùùù]]]Àª0‡Ñ÷Öš‰»{)„Ö<°[ö`9š¦ÁgºùeÌ2œòÀâÿzÓM7xâ‰Ë—/4þ×]wÝÚµk§NJ™5k~?fÌ™ ˆw!t$A°7|ƒ*Bûçr–íÞêƒßÅѬ‰;yµ¡»¡wyËøVžN!e1{Ýl ¡Žf=°Lá /¼ð ÅÇÀE•••¹çw‰0å%ó2:k:« ò÷!Çb±þþþL¥zÜÄ’ŸŸßÚÚJ, K5Yʃ!ÁH!´EEEû÷ïÜÚSÂN a<°ŒH+³Çdlâ®`ž"°ÌâÏþs$ùàƒðq'¡kâÎ\µ«–Qg™H$ÀM_@`ÁJŽ‘Ô6[èv!¤=°ŒLÜã ˆX,¯™¸[óÀ2rp§Ë‰D"°îâ’V<7ÝB-Z´hÑ"q Ó¦M›6m|¦ï°$…»ºG`Åb1¼ñ×åƒñœ{ü¦Yd–ÀRPÈdöŠ¡PHàûNw§Ö5qwdè …¶oß.8»"°2Ë ,BH(¢g5Q`¥„ VD|§À’A: ,S ,8»kÞ”)SMiU‰D{{{š ,Xæ‡)æOžÚ…Ø#°°b¦,)°îºë®»îº ÿ+câN$,z@ˆåX6qGSW—î$µÚÚÚÇüàÁƒ»wï¾óÎ;o¿ýv: YúÁ X !mù¦` –©7`-ŽtµÅvç)©yJ‹W`Ñ&îv,˜ùÃg(³¯¯ó™‰xt q„+â·b$N(°ÒB(ù:Ü{ï½ï¼óÎYget¯èæ×A¹-Ž [ѧÔ¨Q’"ï©«Àr{æ©,ªg |GË ,BHaa!ÝBF•2ˆ–w!t£¹Ë*«¤¤dÍš5'Ÿ|²ÌÁ2/£ã»ÖÕÕ}æ3Ÿ‘ÿ ¼wiÒÃB—.gíå%‡-ŒÛ)„dä½öÅ@>…HXJÅâæ›o~ஸâŠöööŠŠŠÕ«W755MŸ>=ÍÕð,¼,0 QÃSO…µ8ÒÕ–W`aê‘ °ŒXpÖ²p+:;;±4d"tó Õýè^Äîˆû|¤À2›B˜ŒÅ¦Úœ-8H`aR¤dþ ¡Ðù2”œÛƒi:…0 ¶)’pª=±Õ3¾‹£m€EF¦šP`¥ ¢Öĉ7lØ0aÂ[5ÓƒŒÈÚU”””äääÐ麇êêê­[·J,ó2:K`Y€ƒ#yLž<ùõ×_×¥_¤O( F›ãª ‡yiH!„‘°RÐËç‚ûŸ6+XX °ÜóÀN<¬Xi]UÏ ø.ŽXØy1éêè}‘L&5MóïØ5e-X555÷ß¿­j ã ,&É;y'\ÌÞ»4Xñx|ñâź(°!‘HdhhH Àr|ãs˦±ÄL ! „Kü8™òÀ²ŸB4KA OQ Až ùB:-òOÚX➎ϠÌüá3š¸)°ðD‚Ñ- íB¨iZAAÁÑ£Gý«ÀrdÊ3O›–Sì8…;?èÝc±XOOC ¸§Àw½ñÀÒM!4«À¢¯ˆ9¯" “÷9 ,BÈäÉ“[[[:…¤‰»×<°ðQ;v¬äO¼ À‚<#•B¨ A8®ÀòéFɦ`ÁËUœtÒI½½½^`Ó|Ç ³Èˆ–) , X„7Þx£¥¥eòäÉŽ”‰DÀŸg!‰‡=°Þyçøà”+=XïLº2K`©ž1ð]•‹GÊ zJEijjÚ¾}»…Ÿ`CæeLÛ²|§À"ÜŠ—®ï„SWÃ]£úˆa6…ÐïL!üêW¿ÚÑÑñ£ýÈ耙3g.\¸z;)„Ð<öööšý¡)x…úU@kc„+Vdº ~…§ÖâhÁ‹Î´J›K<”¹í¶Û6lØpâ‰'êþUàåT aWW9>…P`â.N!„8 X„H$baN’†]Ý@4íïï+°ñÀúïÿþïÌš5ËN!|ýåðÎã‘ÙVõŒÁ€ïâ‰D Í‚‰˜ óÉ IDAT»®+VÊ ÂæÈýýýQ`)èBæeôˆË/Ö#<ÒÛÛ J# ~èÔ(÷=°£ÀÊ ¼ÛÅË«ñx\¾á²¯ÀRVv!À–‚exŠÀ²³)„ñx:ž4XâÁÄœ9såÅ;øS)„ÐǤ=z”RZZªû"¼(1eM•žBÇÓ±‰»# ¬³Ï>ÛÎÏiXðÀBo]+=Xï<h`,àùçŸbØ(Ä ¬lH!$„9rÄ;ü»‚5xÄË;)„â´;zÜuæ7¼s–ÀrÄ+ðÍ":¸¯Q–‚Y8…PÁ20¿2›Bˆ£Ãô¤:2”I©À‚³Ø!°èÒÀYW£Ñ¨¦iÉdR’Àâ³Æk¤'…ÐqìÌõÀrøšXV`1W¤X™­‰‚B:qê©§š:;/†À ŒK---ć›N*0P)„ Ä ,´ ø¡SWäˆVöÌ£Á/ØÁýì§öôô8U]dKhý‚+°|çáxj~e-Žò ,è«°ëòT ¡iØ…þŒ»vww½» [Åïå¸Ë; … ˜{%H!ôΖOÛ·o_³fÍâÅ‹U ¡(,ûȆ8â;ˈ¶£À’ bQQ‘b¯<™8ªBò–‘¾wjqøðaÉúðÈ6,ÂmèTÑhÔÂPM)°²V`ùÎ!Â;ðeÓKÓ4±0G—Àòˆ‰»iØ… ©À‚cúûûu/ŠñÀâÕà$»X‚BïŒ8W®\¹uëVS?Ǧ»»;™L†Ãa¸ÌŒ˜¸{çñPX ö‘ q4òÀ‚fdppxc”bÙÄl€L3®À‚a¡wRíXΦΘ1C²><²PåˆC+ ˆ¯…üA¢¬ìD€X –aMã)оHâÚ_&…Ð#XbH*°ììBHÆ]“É$1 °˜=yà¯tÉ*,–#X™òžD·R ¬ÌÖDAÁË0òÀ‚z"õ)øW`mذáüóÏ—WO»@¦fOsä¸ âhm‡SE`e#¥À#ó+¬yÊ *++ëëë«««á¿ÁH!¤—ÚW`Áº·î•'°t»=› ,ï02Q`9¾Æ•~D"‘p8<44Dôûtš¸{çñ@« ˆXõ)ø7q;vìØ±c3rj]ȧݥG…–J!”K)„J¥ ‹§¶··+ãkðÔüÊZ±K;¸B&L˜ÐÐЀÿu5…0//±9w6…0666’‘«ÈËË‹F£ÎXØCXº]Ä‘§ðh(óù„N¨««;ñÄÓ_=]X{ãñ8ø¦ñ}:XÞy<2ÛÀªž1Ȇ8ŠXügß!‚˜ ‰c2œ…¼jIìå!ŠNbO°y´žJ!„ÑÛV¶„Ö/Ì8€Çž={2]¿ÂS–µ8b”RÅÀÕÂp8Ìøh:›BH©«««««ƒÏ6lèïï¿çž{,ndâÞ×××ÛÛ …tõ,pŒîEA]U`y‡¡ õùϾ±±ñóŸÿ|ú«§ k/#ŽíÒŸB¨XûlKK˼yó˜’- m ,ì›í(° Žñx\à» Ò4Í‚–§ Èx`y Ö^F|lø|ÚR=õxd¶U=c0 q„¦ƒ1À"Ò«fC³2qT)„ ¼æõÞ{ïIÖ‡‡üµžÚ#[)°²¾˜5YÊ+2]¿ÂS–å8B¯fVuçwÞyçºEçn½o åB)dá.„*…P!ðKÁ2™ÿS6+°ÈÈ…ïò‘Àâ7Cp{¤¨X „z‰|‡¿þõ¯ÍÍÍ™®ˆ‚>ìx`)di؅Е‰ÖÅ_\^^þòË/óêìì\½zõ‚ >üðÃ?üpÁ‚µµµÝÝÝnTçêB–2° OíBh9ŽS§N]¸p¡³)„Ž{`9¢Àr)L¼Ë¬sÏ=÷±Ç«««ãQ ,âíËwÊ+§çb=®ÀÊH¬UÏ dyƒ1pÍò ’qœ0aœ9s”Ë›@,_7)Y ¿îB¸sçN£?ýèG?ZºtéÍ7ß ÿ½ùæ›ß{ï½Gyäšk®q£&~DP²”¹€exê‘ðBÝóÀÊžB™8f¹Ëû)„Ny`B"‘HÚXÊÄá…UÁ>²<Žž¥XF–10Pq V¬XñÀo/"*!€XÏ<óÌ%—\BsÉ%—<õÔSi®†—Œq€‚ƒP÷<°|aâîl ¡Y®À | !C`eâ¸X+(¤ÁP`)((x*…пðk ¡;wîdLpN8á„wß}7ÍÕð2”‰»ƒ`˜¸;7&œö÷£Iÿ.„Ž˜¸ å ¬,$°Ò–B¨X A‚z‰œ…2q÷/¨À:zôhii)ýMYYYkkkÊjzؼy3êÜÜÜÜÞÞŽÿ¥ÿDnooonnÖý“J‚@`ùô*øð¿¾¾ŠŒ”088ŸC¡PƯ¢½½=ãu`’õ©ª,—€µêììtã> …]£À2utßG¦„¶¶622!ñà{áv pᚦyö*à{³%0”OW$qõ*Þÿ}øœ““ã;‰SnliÓY‡­[·:rª„Ì–ûý*,—€[6ùº¿øè£2^U‚ýà¯~¿Š,/¡½½}îܹ gu–¯"{Jؼy3ÍÏüìg?#„¬_¿ž¸‡¤›àËF£ýýýô7ýýý±XÌl9ƬY³ 4¿üå/3]'ñöÛogº ~ÅwÞ Äe—]–éºx"Ž=ôÜmÛ¶9UfUU!ä'?ù‰å^ýu¨UOOSµ¢±iÓ&(¿¯¯¾yä‘Gà›O>ùÄli2q¼þúë !«V­2[x00zôhBÈ„ 2]CX{ýë_Ãcsûí·ã—°Óücçj§ƒ¾¾>8õã?îê‰LáŽ;î€Z]}õÕé?»ZTûÈò8N:^¢¯~õ«™®‹udyÇ@Ñ׸öÚk !ÿó?ÿãcWEóm2Ç—””0z«#GŽ0š¬,GPSçΛé*øžç{!ŽÙœB¨io$d!…P&ŽéI+ó,¼oâníeÔM!„ÏÊÄ=ýg÷B‹ª`YGOR,#˃¨8*ˆ¾†Ri2LæøÙ³g¿õÖ[ô7o¿ý6jŽHPÆ By`1pÏÄÝû»Æb1\-&"»d‰T(Iõò3hâ®iœB™¸+( ÊÄ]AAAAàË,Î:묟ÿüçô7?ÿùÏÏ9çœ4WÃ˪KÁ2ÔüŠ7ÄÁ]]%°}ÀÏ.mAH²^•UVzXx E`)( ê%RPPPPÀ]#Ü@º)’Ë/¿ü•W^¹óÎ;=zôèÑ;î¸ãµ×^»ì²ËÒ\ /#¨ãÚNÁ<õHx!Ž^V`…B!É|j³@~c‡À’‰cPIx?…ÐÚ˘Á]ñ¤*…á…UÁ>²<ŽÁP`eyÇ@Ñ×ð«‹vÅb² ^|ñÅ7Þxc„ &Lؾ}û /¼àÒð>…§Ø ±bÅŠLWÁ¯ðÔ#á…8zÙ˽)°¬µŸ2qÄ-”xŸ¿³ö2fV'R ,„ZTûÈò8zj”bYÄÀ@Å1PAô5Ò@`¹2ZûaMœ8ñw¿ûç T ¡ƒ` „{ ,û)„é$° ‡po =¾Hž…÷XÖ€ý´§-Ö*…PA!x†KAAAAÁ>`Œ×ÓÓãÞ)²tiÝËÀI…"°nð5¾†ïˆ}µ¦:U%À;Ð)„‹-jmmuï©Èr+¨—ŸYÖ~ðƒîîîòòr·O$Õç*(Ø„b`á¿B;ê8 ¹¹9ÓUð+<õHx!ŽÞôÀJ$W\qÅ 7ÜàT•ð ¬p8\RRRXXh¡4™8fy ¡÷XÖ^ÆÌz`]tÑEõõõžò Èlë…UÁ>²<Žž¥XF–10Pq T} ¥ÀÊF5…püøñ™®‚_á©¡¡âèÞ.„6 ¬‡zÈ©úðàMÜí@&ŽA• IÂûXÖ^F]ëÊ+¯<ûì³§NêLÍ|…Ì6°^hQì#ËãŒÂ,b` â¨ ú~õÀR°O±¢¨¨(ÓUð+ðIð‚Æ qtCõÐCutt̘1é¯À²™8*ñv;líeÔõÀºð ©“‘Ù>× -ª‚}dyƒ1pÍò *Ž€ ¢¯¡¬lD0Æ B= Ü °–,YâTQ.aÕªU­­­é¤“æÌ™S__Ÿµ{Áx_e º ¬l†j`l" ,ûPV6B¨G‚§$iiC$)))IçW®\¹råÊtžÑS°¿1¥7–Sé¨~6°Á‹µ‚Bz F) °úúúÜ;E \–‚ ®755eº ~…§ø/Ä1¨ïH:á…8zÞW`Y b(‚–D)°™mOÔ› dyƒA`eyÇ@Ñ×Hƒ‰»"°<‡ š¸gm"’}xНñBÝH!Ì6x!އ÷=°,DXŠÀd¶Uob0åqôÔ(Å2²<ˆŠc ‚èk¤!…0PI0Œq€‚ƒPuCÒï+°,CX4T{¢ `ÁP`)((((؇"°²¨. ˜KÁ2ÔüŠzGÒ€X0¶ðBJ² Ú›P£@aaa}}ý¾ð÷N¡†kžCP²T>³exjhè…8â„SÍÀ-à qô8¼ŸBh9ˆ`ß®X€Ìš¸«71Èò8càšåA TD_#‘H444ÜsÏ=îBMÿ<‡ ®«|fËðå…8õI'¼GÃû ,ËA|æ™gúúú&Mšäl}|ŠÌ¶'êM ²<Žž¥XF–10Pq TÄP–猅,á©]½uCÒï+°,cΜ9™®‚‡ Ú›PW…´Aé<‡`,d)8õH0P7D! ð¾KÁ¨öDAÁ&ÔK¤    6(ËsÀî?`éQííí™®‚_á©¡¡â¨Ríà qô8¼¯ÀRAt™m`Uƒ,c0XYÄÀ@Å1PATCMÿ<O±bÏž=™®‚_á©G qTÒûðB=ï?f*ˆŽ ³ ¬ b0åqôÔ(Å2²<ˆŠc ‚¨ †"°<‡`ŒxÌ;7ÓUð+W1Èò8C•åA TD1å95…PÁ2‚ÊiZ†"°Òï§*8ÕÀ*(ØD0,_ ó‚ÊßGš_1ˆD"%%%yyy™®ˆBá}–‚#P‹F 6¡F) iƒ®y8†öB¾˜ƒhjjÊtü O ½ÇÂÂÂÖÖÖ½{÷fº">†âèq@SìåvXÑd6G[1Èò8C•åA TD1å9u5xÅŠ™®‚_á),Ç`@Å1%¼¯ÀRAt™]!PA ²<ŽžZf³Œ,b` â¨ *ˆ(Š$Æ8@ÁA¨GBA!ýð>¥àT« `ÁP`)((((øŠÀò‚ªÀR° 5¿RPH?”‰{–@5° 6¡^"…´AQ$žCPÇÍÍÍ™®‚_á©GBÅ1PqL ï+°TAfXÄ` Ëã V–10Pq TÄP–çà)¶ÂAŒ?>ÓUð+<õH¨8*Ž)á}– ¢#Èl«‚ dy=5J±Œ,b` â¨ *ˆ¡,Ï!¨)„EEE™®‚_á)wÇ`@Å1%¼¯ÀRAt™{« YÇ`(°²<ˆŠc ‚¨ F (’`  Y B= é‡÷ ,G X›P/‘‚‚‚‚BÚà õ÷¿ÿýÊ+¯,..Ö4ÿ«ÆÁ:øAU`)X†*(¤ÞO!TpªUP°‰`(°|W(’‹/¾¸¼¼üå—_6: y<ܨƒÝ𨽦¦¦LWÁ¯ðÔüJÅ1PqL ï+°TAfXÄ` Ëã +˃¨8*ˆ b¸b©³sçN7ŠÍ€Ï‘¯ºX±bE¦«àWxŠÀRq TSbݺu3gÎ\ºti¦+bDGYÕ³ b0åqôÔ(Å2²<ˆŠc ‚¨ Fæ=¡¨¼ž2qWPÈ,]ºÔËì•‚SP ¬‚‚MC¥    à dÆe©²²2Ž3æ‹_üâ?þñŒÔÁ³€î_`) ‚±¶©   àA¨VAÁ&¥    6d€%9çœs~ó›ßttt¼ñÆ‹/^µjÕ›o¾™òW¼õ»¦i›7o¦³d›››ÛÛÛñ¿ôŸèÏíííÍÍͺòB  Ô À§WÁ—€õõUd¤„ÎÎNø‡3~t(3UU‚ýtßGß]E–—ÐÔÔ”ñ: ìm»»»Ó_‡Ÿþô§Ž\…*!³%À—~¿ Ë% Àx›|z[·nÍxT öK€ý~Y^BSSSÆë J/aóæÍºD q š«êš–ºü‡zè©§žzî¹çl–<ú裗\rIQQQ[[[¦ë¢à $“IXÞüè£Æ—éê((((ØÀîÛ·oìØ±™®Ž‚‚ÿ°eË–›nº‰²{÷î‰'fº: ™‡{Ž]–}šmíÚµ4±§ Ràû¥Äù ÎB5° 6¡òpÒ»,I’‚ålÖ!`ðþÞí é<ÊcXAAAÁq¨nWAÁ”–‚‚‚‚BÚy™OccãòåË3] !¨ ,:±VÁ,¼3¿Rq TD§ÁV1Èò8C•åA TD1ÒÍ’ÔÖÖ>þøãؽ{÷wÞyûí·ßu×]i®†—áªÂYìÙ³'ÓUð1¼óT¨8*Ž€ ¢SÈ`«‚ dyƒ¡ÀÊò *Ž€ ¢‚®X´+ãuóÍ7ÿò—¿œ3gÎÿÇÞÇ7QçÿOŽ&i›Þ÷EK)W‹Ü—Ë!T`]\ÑõZ\]WVPõ§®»_ÖׯërÈ âWAÐU@P–C( ÜÐ(ô¾›¤m’æNfæ÷ÇÔ˜mKË‘’dúz>|ø˜ÌLfÞÍ« 黟ùLppðøñã/]º”——7lذî(#@‰uÖ Aƒ|]B«©©ijjR«Õ¾.9Šr„è-………%%%¡¡¡·þÔQzxŽî¾U@víá!Šr„ë–)u:™ÖjòäÉ“'OîŽ“Š†ÿŒµÿáëÄ ÷M¸î¾fê€îÀ*+4° ˆãBh`ù±^B˜——çëÀ £8 G@ˆ"€Å¡‡ç(ŽIÜ{xˆ¢E!Bç˜N.÷ó uzÅrssûöí[TTäëZ®jݺuO<ñ9¹\îërÀ÷º¯#¶a>"€K ˆc4°üŽX/!‘>²2 ƒÏ®ÐÝð/ßë¬üü|_—^€Å9ŠB„(=qïÿë_ÿzÔ¨Q ,è¬JŒ$ |Q£8 G@ˆ"€Å9ŠBä(Qé¿ÿýïîîõéÓÇó"Á¯¿þúÑGõÜÿÑGݱc‡×Ëqèö»îÞ½;''Çý°°°pðàÁž;ÜvÛm.\èî2 PñÝ©±±±_¿~‡r¯‘Ëå‡Ãs‡ÃÔùq|ý"@׺¥ÁÄó²î«¸¡¡áW¿úÕš5kÆ“‡B  ÇºÙKžëkjj¦M›öç?ÿyÒ¤Ižë###›šš<×466FEEÝd V7ÛÀêðB¿ÚÚÚ»îºkÙ²e¹¹¹möÏÎÎ>wîœçšóçÏ8ð&˱òþ$îæç?ÿù›o¾9yòäö[ï¾ûî7z®Ù¸qãŒ3¼^ˆãõ饆 öÒK/=øàƒnmii=þüˆˆ†aÚoípoEˆbÁ‚C‡ݳgÉd*((x饗^ýõÅ‹ [‘c`áyþ7¿ùÍk¯½æ¹!þ¿¹×#Ç@1þüóçÏõÕWF£qÆ 6lpoBˆogùòå÷ß¿°!ŠE‹}üñÇË—/¯ªªªªªZ¾|ùG}´hÑ"a+r û÷ïðÁŸ|òÉÊÊÊ¢¢¢I“&Íš5Ën· [¢?ë¦ßô¯;ÖöoèþfÙ²e<òˆçšGydåÊ•¾ª®Eûo­ÎsDÊ~âÿý¿ÿÇqœûá¹sç233Ýbà*..Žˆˆ–‘c`ùÇ?þ1gÎþ¿ßWbéä³r ¸û¶!"–e{÷î}üøqá!B jµº¬¬ÌsMYY™Z­–‘c@˜0aÂúõë=×|øá‡ï¾û®°Œ‚wÓ¿ÞX 5iÒ¤½{÷z®Ù»wïäÉ“}U\‹ößÖ爔ý“Ùl r?Dˆ«¢¢"::ZXFŽäÌ™3ýû÷7ü¿¯"ÄÒI 9„|pÏž=WÛŠÑŽ;ÆŽë~ˆElllûV\\œ°Œ‚J¥Òjµžk4ÍwÞ),#Ä€àÝßô¯7Öh`ÅÅÅÕ××{®©««KHHðU=p-Ú[wž#RöO[·n6l˜û!B Dz½þàÁƒcÆŒùŸÿùa r ‹eРAÇŽz¾¯"ÄBDñññ2™,!!áᇾxñ¢{r ½zõÚºuë„ T*Uhhhnnn^^ž{+B D“&MÚ´i“û!B K–,=zô¡C‡ŒF£Ñh|ø°°!œóçϧ¦¦:N÷„(8Ž›9s¦çÇ›™3gºç¾@Žaüøñ6lð\³nݺkŒ !ú ïþ¦½±À$îpë544Ìš5kÍš5ãÇ÷u-pƒ„wù†††O?ý´°°péÒ¥¾®®ÃŽ; ÿøÇ?úº¸Y;vì?~¼R©LIIY´hÑ’%Kþð‡?øº(¸ǽýöÛ?þxlllllìoûÛ·ÞzëÕW_õu]pƒV®\9þ|™LæëBàºýýï?}úô¶mÛšššššš¶mÛvúôéeË–ùº.¸K–,yá…6nܨÓét:ÝG}ôâ‹/J$hJÀµ €ï•ÈÈȦ¦&Ï5QQQ¾ªnLç9"e¿RSS3mÚ´?ÿùÏ“&Mò\Q\\ÜC=ôÉ'Ÿ¸o(‰ /¼ðñÇK¥Ò·"ÄÀuï½÷æåå ËÈ1 DGGß}÷Ýžk~ùË_?~\XFˆE§ÓmÛ¶mîܹž+b X³f͆ fΜ9sæÌ 6¼ûî»ÂVä&Ož¼uëÖ>ú(===--íƒ>X½zubb¢°!¨› îzc €Vvvö¹sç<ל?~àÀ¾ªnLç9"eÿQ[[{×]w-[¶,77·Í&„¸FŒ¡Ñh„eäJJJÒÓÓDä^@ˆ‹÷¸¼9„ìììη"IJvíÚûͯF1PÔÔÔŒ1Âs͈#jjj„eä(&NœxàÀ“Éd±XòòòÂÃÃÇŽ+lBˆêf‚»ÞX u÷ÝwoܸÑsÍÆg̘á«zàÆtž#Röæç?ÿù›o¾9yòäö[bà:zôhÿþý…eä:™q€b Û²eËÏ~ö3a9„Y³fíÚµËsÍÎ;GŽ),#Äât:׬Y³páÂ6ëb HKK;uê”çšãǧ¦¦ ËÈ1@­^½úÉ'Ÿ–b€º™à®;Ö®¦èò=£Ñ˜‘‘±téRájç×_=33Ód2ùº.èLûo­ÎsDÊ~bèСŸ}öÙÕ¶"Ä@1uêÔíÛ·7448ŽêêêuëÖ%''ïÚµKØŠ”çû*B “'OþüóÏëêêGiiéÒ¥KcbbN:%lEŽÁjµÞ~ûí6lÐjµZ­výúõÑÑѶ"Äòé§ŸN™2¥ýz„(V­ZÕ«W¯¯¾úª¹¹Y˜+%%åŸÿü§°9ŠéÓ§Ÿ>}Úáp”””Ì;÷©§žroBˆÁ»¿é_o¬ÐÀây¾¬¬læÌ™jµZ­VÏœ9³¼¼Ü×AÇ:o’vž#Rö&ØÜÜìÞ!„Ü{ï½ÑÑÑ2™,11qöìÙßÿ½çÈ1µù¸€ÂþýûgÍš%ü0&''Ï™3çÒ¥Kž; Ç€P[[ûÈ#DFF*бcÇîÛ·Ïs+B £GÞ¹sg‡›b Ø²e˘1c""""""F½yófÏ­È1 lÚ´iàÀAAAýû÷_±b˲ž[¢ßê¾ßô¯+Væj¥øƒ˜ z24°À¯¡~ ,ðkh`€_C üXà×ÐÀ¿†ø54°À¯¡~ ,ðkh`€_C üXà×ÐÀè. Ãøº1@ À;Юè&h`tžç}]€ àÂð+æGž+…‹Å2wîܨ¨¨˜˜˜—_~™çy«Õ:oÞ¼èè興ˆgŸ}Öår¹vðàÁQ£F)•Êôôô?üðÖ9~ ,/[ñ?j¿ÃÓO?}ûí·—””|ÿý÷‡úÇ?þ1þüQ£F]¹råäÉ“'Ož\½zµ°gQQÑ}÷Ý÷ÜsÏi4š-[¶,]ºô»ï¾»•_ €¿a0²À+¦í'+÷†aV®\¹`ÁaýÑ£G§NúÆo¸×9rä™gž9sæ =ú裃~á…„M;vìxÿý÷ÿýïߺ¯ÀÏ à7°ªªªRRR„õF£1<<¼ÍšÔÔTƒÁ@D}úôÙ½{wVV–°©¹¹yРAÕÕÕ·î+ð3h`xGç ,Žã}ºW*P˜ À;öìÙ³`Á‚ÒÒR–eÝS_µYpë|ÍÙ³gÿøÇ?æåå¹\®1cÆüéOÊÍͽU_€ßA ü.!¿†ø54°À¯¡~ ,ðkh`€_C üXà×ÐÀ¿†ø54°À¯¡~ ,ðkh`€_C üXà×ÐÀ¿†ø54°À¯É¼~D†aÚ¯”Ëå‡ÃëçÑó~‹çù6kV¬XqâÄ ¯Ÿz¦}¿É»8ŽËÊÊÚ´iÓÈ‘#»õD JÝ>ÖÎ;ãããѽ€Óí ¬+V,\¸°»ÏbÕ½—æççOŸ>½´´T&óþd[Ðto_iåÊ•óçÏ¿–î•L&cY¶[‹€nÕM#¥ºq–N§ëׯߕ+W¢¢¢º®ƒéöéäáÖ@”â€Å9Š¢ D)ÈQ£h Jq@Ž¢Ñ}QvãXk×®½ï¾û®¥{p5ÝÕs:ß|óÍÀ¯©t[ÅQŠrä(ˆR4¥8 Gq@Ž¢(Å9ŠFàÀÚºuëÀ¯±{p5ÝÕÀZ¹råÂ… »éàÐsøË =  D)ÈQ£h JÑ@”â€Å9Š¢ä(w !ôX?þ¸¯K/˜7ož¯K/@Ž¢(EQŠrä(ˆR#tÉ_zœè¶øƒÁîë*àf!GÑ@”¢(Å9Šr D)ÈQ4º¯½ã/m#4°.!€ ,ðk"l`1WçÛª|xv€ë•——çëÀ £h JÑ@”â€Å9Š¢ä]ò—™§ºé"Iÿ™ZË*è˜+à¡{pcz\‹a«Õúì³ÏÆÇÇ»/ëëðú>Ï•5j”R©LOOÿðïvð–––—^z)+++888<<|Ê”);wîl´sçÎM:5$$$&&æ©§ž²X,ž•X,–¹sçFEEÅÄļüòË<Ï[­ÖyóæEGGGDD<ûì³.—Ë}¨šššgžyF­Vgdd¼ôÒK6›í&^ä/׵ݲK†yüñǧL™2}úô°°°NÎî^YTT4nܸwÞygúôé—.]zðÁ×­[wÇw´?ݽ÷Þ›žž¾pᤤ¤–––£G®ZµjïÞ½žG»|ùòøñãÿüç?ßwß}DôùçŸ;vìÓO?¶2 óØcMœ8ñž{îillœ3gÎìÙ³ 'L˜pÏ=÷455Í™3硇Z°`pÆôôôÅ‹ßÿý:îå—_îÝ»÷ßþö·N^’ZGq­ýF^ÊîÑ'I‘™äë* yyyãÆóup³£h JÑ@”â€Å9Š¢ä(Ýw aOl`-[¶ì¹çžëòìî•>úèàÁƒ_xáaýŽ;ÞÿýÿûßíO§V«kjjÜ}±öÈ# 4èøƒ{Ó믿þꫯºX+W®t÷§Ž=:uêÔ7ÞxýæÈ‘#Ï<óÌ™3gÚŸ¢¹¹yĈ%%%¼ {O¶|sÒÔÉ·ØÔ¡ÓF¨}]xX^;,Ã0eeeééé]žÝ½²OŸ>»wïÎÊÊÖ7774¨ºººýéF=xðàÅ‹'''_íh ÇŽËÈÈpo*--ÍÌÌt7°ªªªRRR„MF£1<<¼ÍšÔÔTƒÁ@D6›í­·ÞúôÓO+++­V+I¥RÏ ÛÃ,è&h`yí° Ã8¹\ÞùnÇI¥Ra¥B¡p8ž[% ˲íOWVVöüóÏïÙ³'==}̘13gΜ1c†0¿•û2™Ìd2)•J÷³¬Vkpp°»Åqœç„Y®v^´hÑ¥K—þö·¿õíÛ7$$Äf³©T*? z܅ЛÚt¯ˆ(""B¯×{®)++s/‡……ÕÖÖò:ì^QFFƶmÛôzý¦M›ÆŽ»téÒßýîwmö‰‰‰©««ó\Óæaûå;œcžˆ>ÿüó>ø`èС!!!DTZZÚán7@å9Š¢ D)ÈQ£h Jq@ŽÐ¥žØÀj¯o߾ǎó\³nÝ:÷ò¤I“vìØqíGS(ƒž;wîîÝ»7oÞÜfknnî–-[<×|öÙg×_2‘Õjõɵ~ýú;@{•••¾.¼9Š¢ D)ÈQ£h Jq@ŽÐ%4°ˆˆž{î¹ >|Øb±”””¼òÊ+:νuñâů½öÚ† Ífóþýû§OŸÞáq&L˜ðÉ'ŸTWW»\®úúúeË–M˜0¡Í>‹/^¾|ùš5k4F£Y½zõÅ‹o¬ì»îºkÑ¢Eõõõæí·ß.//¿±ã´7hÐ _—^€EQŠ¢ä(ÈQ4¥8 GèXDD>øàÂ… Ÿx≈ˆˆI“&©TªÕ«W»·fggïÚµkóæÍ±±±K—.}þùç;<Îk¯½¶}ûö!C†¨Õêñãdz,Û~tUß¾}÷ìÙóå—_¦§§0àܹsË—/W(7PöªU«„òúõëwáÂŒÀQù$îáÛo¿}ñÅÏž=ëëBn&q•™3g>|Øh4êtº/¿üò‰'žxî¹ç|]ÀÉËËóu àÈQ4¥h Jq@Žâ€EQŠr„.ù˸§5ë‹/¾X¶lY~~>˲999Ï>ûì¯ýk_pSº¯½ã/m£ÕÀ\B=XÐüü|_—^€EQŠ¢ä(ÈQ4¥8 GèX·Ã0<ð@‡›~õ«_1 Óf¥Á`ÈÉÉaY¶ýq …">>~âĉùË_ª««»¥hè©ÒÒÒ|]xr D)ˆR£8 GÑ@”‡Kh`ÝR'Nœ(//o³²¼¼¼ªªªýÎ~øaUUÕ_|Ñ~Ïó<Ï[,–‹/¾ñÆ---C‡ýüóÏ»£fè™ÂÃÃ}]xr D)ˆR£8 GÑ@”‡Kþ2uzO˜Äa˜ÿýßÿ­­­]±b…çú… >ü7¿ùç+Àq\¿~ýþùÏþå/9zôh›ã´­Îž=;eÊ”ï¾û.;;»û¾€«Á$î"ñä“OnÚ´I¯×»×èõú;w¶¿´ð«¯¾ÊÉÉ™6mšZ­>vìX—G2dÈsÏ=·lÙ2/W àkh`ÝR‘‘‘³fÍzÿý÷ÝkÖ®]ûàƒ*Š6{®\¹rÑ¢EDôôÓO_c[jÖ¬YôbµÐ“åååùºðä(ˆR4¥8 Gq@Ž¢(Å9B—üå½r !Ïó—.]š2eJii©\.w:YYYyyy)))ž¯Àùóç{ì±Ó§OÇqYYYû÷ïOOO÷øàùçŸïä°Û·o¿ãŽ;:?5FpòòòÆçë*àf!ÇÀÒÀ6­4|*c¤£ÙîѲÎ:+d2¢ D)ÈQ£h Jq@ŽÐ%÷Ô£F`Ñ{ï½7oÞ¼µk×Î;×s«ÓéÌÌÌLÑ_XV0r":z˜ÏʯÂO¥8 Gq@Ž¢(Å9B—¼ßÀš5kÖ®]»<×ìܹsäÈ‘^?‘h´bwþüù‡~8)))((())顇:wî\›§¸©ÕêÑ£G¯[·î– 7¢Vkúê»"zký‰ -Ÿå¼s`KV¬ƒˆJªôDT­iáxžˆj5&ß– >!³µ6°†°É‰ÒÖÌrFNDÞå³²ü€÷XO<ñÄÚµk7nܨÓét:ÝG}ôâ‹/.^¼Øë'«-[¶L™2eôèÑ?üðƒÙl>~üøØ±c§M›¶eËÏÝø•––þñ\ºtéÊ•+}U3\‹¾Èw¹8†!—‹#¢ÇÆ6J>3\ODÅUz"ªªkö¬Õzg©ÍÙºdùé ¨µåìð)=„÷XJ¥rëÖ­ß|óMß¾}SRRÞÿýÍ›7Oš„™;®Iqqñ3Ï<³ÿþ… ¦¦¦Êåò””” ìÛ·ï™gž)))iÿ”ØØØ{î¹gãÆï¼óέ/ÄÊsê>èßPËÚÇÚÇkê:ÙÍdqlÚ}‰aè¯ÏŒ#"µ’›=¼‰ˆƒõÁJ™¶Éb49ªê[X5^…‹Üæx³gKFD—JŠ|Sx~*Å9Šr D)Ⱥ$뎃&&&~òÉ'ÝqdÑ[¾|ùÓO?““Óf}NNÎÓO?½bÅŠU«VuøÄÁƒWUUuÐS¤¥¥ùº„€ÁåŸaÿ³—ˆÈf•NýåÕv;}Qc²:‡ ˆ{ô—¯Ìœ ∈{‚b]q•ÞÝÀªÓz§…KP‡#°HNDQñÑ>) ¼?•â€Å9Š¢ä]òþ,¸ûöí»ï¾û:Ü4{öì}ûö]퉧OŸNNN Ç ÷u ƒ¯«i]¨,ïd·sEZ": žˆ^z|äoF6¶n`¸>©aDTR¥¯ìt[µÝU´š·Ô\{mÈ1°(m¬°À{4°„9°äÁA¾© ¼ ?•â€Å9Š¢ä]ê–XpÃ*++333;Ü”™™YYYÙ~½N§;|øðóÏ?ÿÊ+¯ty|®ì _Z|³UzÓ»$#Ë×Uܾ¾µ£ÄÕTÇ‘¤ã? œ-ÒÑ~±D4°w´£ÞFDÄI)#^AD%Õúªz£°s‡s`qÍù¼M+‰Â£[-B<‘Êε.×T²‡Zÿb1Ì^«Or:Ô˜ z44°‰çý ÛÜ»pôèÑsçÎíò|i1{`·÷+»QRº‹ÐÀ‚€fµX›ôJeªæ›ùúZ&)Eز~{ÁŒI}¢Ã•ÂÃó—µD4(+–ˆÈf!)ODœ]* f³ÂmDT\ùÓ%„ß…µo«ïæ/ |ÃÉ;U¶XÚvïWÂò0"͘G&XУ¡å_ÒÒÒJJJ²³³Ûo*))ILLt?äy^øssó·ß~;þüýë_<òHçÇgz÷‘Ò]Þ­ùf0½ûøºèX^^Þ¸qã|]EàêkÞ¯Íí:¨W4ßÔÈW• ¬ïNT-^}ôïœÿÀà§î¬Ó[-ᡊŒäp"âë‰!ž#3Oj¢ÞJ#½¤Ñ·ØU OÔl´Yl®`å½Eó¬ˆxëu4°c±9ÌJï¹F2`±.îòÅP ©¤ègÙC|Ux~*Å9Šr D)Ⱥ„–™:uê_|Ñaë‹/¾?~|›• ÃDEE=ðÀ üúê«?üp›‘YmH2²0â ®þñ¸F|]Í©–à§CwK“Ñ ®ª\2z<ËñKÿï"2Yo­?ñŸU}R#ˆhPßáÔÖX%%b9j‘IÔÄ&Ê뤅¦ÉBD© j§‹+«1ÔiM™©ž§"ÎID¼µ³{¶ˆÃbT9äL³µ%ŸË·¹ËÕV6¥7¦5 üTŠrä(ˆR#t “¸û—E‹½ûî»mÖ¼ýöÛ?þøÕžxÿý÷‡„„lÙ²¥› €ÿÂÕÖ˜U¥zîÍ£6úq÷-{‹ŠÊ›‚×½>5.&øDAýg»/QŸ¬PÏ6sÆZ]!±$eTáDä²Öν°pÀÔuR\(µŸÇµñDÄ; ä²ÜÂ/n§Í@DÆ0I¥­«¢b˜ÐP" 5sN—@†–ÉÌÌ\½zõ”)SÞyçêêj§ÓYSS³jÕª &<ñÄíG`¹1 ³dÉ’%K–pw+ èáÊKë ¬”ˆ6ì¯8`Žä›td6mÙ[DDñ³ë·÷Þ4쯵}fZzϰöža-üÂÆÿ}¥iU³¾Œˆ¤Òàè°L"RØÍ9¿²g &¢T©%Ib!¢Í{ŠÖl>[Zm "ŽçyÖ¾õtäû‡b4-òëšëØv¬xë¯þî¶¿sZLDäPɘà"¢ ª¦5©­¼ ,£³gÏêt:_W ,¿3{öì}ûöXò·¶û"-Y}”8û;bßú&áb’·\k+//oÇý²}ñŸçºé5ð-§SØv‰ˆŠjXïý·–Åb1›ÍÁÁÁ*•J"iýëKYYYß¾}}[˜·pV3¹”rbCˆˆ‰Ž%"Rªh0ÄÇÅFù¶<𼻊rä(ˆ2pY­VaA¯×Ñ©S§n¿ýöΧu†ž ¬0oÞ¼¦¦¦iÓ¦}÷Ýw]?º_Ks¼tS¾%˜ˆ"ú8cosÈ+W.Hö†ÜFdNŒbö î-KÎ’§ߨã ÏJ42’’ËÅØ-DDŠP’ ‹Ñ§,eÙŽþÁÕwDX¤Ä§ä4%θÏ‘ò’jý_Ö#¢¢òf»KBDºÙu݈°AÏQ¹–q8Ù ¹´Ëýý–Á`¸té1 ó³ŸýL.—ó<ßÐÐæëên _UΕ‡–—«T2|(OÄDÅ×|–’ybIÞb$¼ý€¸ ¬ØØØ¨¨¨²²2‡Ãa4ÃÃÃ}]ø)\Bþô§?={Ý+Àí·Ó°ÞÖÜXhV2 žá$"ù'í­‘QHVèWãBkrGJ§ÍN›!üs"â5õDÄW•“Œ'"’©Y(Q)/^~j›~@¹]J<1uµR 3id*¹XŽˆ K›…³kZd¼CíÕ6èy"r±LIeë ‹r–÷Õ‚<Ï £3›Í.—K£Ñø´./h¾t‚ÝûUdQ%q*¥ä¶aÒ;Fñ©V¶nŸ«| ‘”Œ™@'Ìf 54»’’’Œ"Â|XÐ 4° ƒ8§Lºvõ¬î¢³¬™3¶ß”g;ó¹ù['ïj©•[9Il„ë¬éçÛÈH#UÔ‰H@D¤–„OabâH"á›tärq…gINDÄH•$f; azõ–³|ŠÆ%ì¦1Ïß9¦—û¤ùÅ­‰h[d¼³ƒª:ÔØØÜdjƒ}ª |íçç'ÿnËô§·Yí®ë|=|eY"’J¥ôã sá»T ¬Fk=]N Ú72Äž(ÉB¢8óQ¶ê+r™yŽ!¢KOÔñõã@ðî*ÈQ£h ÊÀ¥oÖчÛ/½±rËÚ/‹ ,èXÐÊÊJ_—àc»-GW>=c¿Ô~“†ml]¨•Qß$ûŒ&Ó/ „ü40*$ÞE ,’ɘ¨â8^ÛÀ]8ßzõ¶TÉÈBˆˆçÒ)Ó…[B¤ÆP©ÂÁY«ï™’–öð/úQa™YØAk "—•8'ñæ ¶n[·7•wøUœ-,á~ìx¼ùÑù¥ÿ÷}q¥žãù+Íߨڼ·Hßb¿á—ès¹\DEDÍÍÍôã§U»Ýè[9»ˆ¦Ú§L‰ËAD¼]KD’ÈÛ¤‰wÚu©Dϵ¸Ê6¹Ê6£‡èðî*ÈQ£h ÊÀRU|úüɃÚÚR"²˜ÍDT¥±¿÷oýå*›ÙÆY,‹ÅâëÁOa,èÀ Aƒ|]‚9x'Ùùnr×ȉH- 6lD”í ¢ju¬EÙ¢qÂLUA ŽHÍ»ŸÅÄ%ð: ûí×¼AÏôUòd#©’$r’礥éÂ"êÚ„P)Q˜ÉPµÿ3.&fõ_Æž/à‰¨¨¦µÓ¤1ñ¼³…QDqú lÍn"¢ä»¤¡éíKŒM#:-,Í."ÊL(©Ò7.^}Äî`Nö×wôÚ«ÖÜ ¬¦¦&³Ùìt:Ý}+FÓ}s%ðU\Ù÷CIF&5Ý˧°Û‰(]•ž2¹uMKDÒÄ\&4ƒ;ÿ Ù*UJ–Ó#"ï’e>|¸Z­ŽŠŠš9sæþýøÕD®°°°°°°±±Ñ‡5ü8«ƒ&Z#g ¢>òTƒYÆÅFÅÙhÆc”JúÅÛˆH¥±áfÆóB"IÿAÒ w ÿ1‘á^©m‘ÔÖÖ6sIDD.sÒÐiLXxj¯‘9ãJÆfåN­–…êŒqyžg·9©Å&}¯qýyÇeÞõãøê«4°t- ÑC“¢2Žˆýzx¿ôH":v¶VØá‡ü:mS` ÒX2™,22’ˆ„5QQQ*•Êáp444t׉m6"’dö•dö%"²{ÿ¢K‰ÝAD*…šˆ8}!¹Ìä²TÉÈÕD$ # q#ëû{iò/ˆèºfñ¿<.K€[‚çœ.ˆˆ,£Õj‰¨¾É‘–¨ž÷ÐÈŒIqíJ1 SZZzêÔ)\Km åïÞxã÷Þ{oÍš5 ‡–ÉdwÞy§¯‹ñËËËëz§îÁqœ0öÊ· ­+G»K¼ÓÄ™eŒ4]–¤·ÊÂCeÂÅ\l3ß"•ö·QZr(ÇpÁŒJêñˤ¤µÞ‘pÚ ’ñÕŽ¬ å-EEEEÆL–d¼ËDR©dôx&FŸ2àîgb1çû#ŽMšx{›´-²0§eõîXüUX§Ï¥Å+R’csÒ¸‰iØ€¸~éQDÄñ<I% Ëñ»òʼòŠuB«Õ í§›!Ü…P&“ÅÆÆJ¥Rá›$<<<==ˆ®\¹b³ÙnºÒðvIn.4Ìýлd+Éç\% —…2ÊXa«$4Œ4TS*—„e “¦çå&Úege£Ä»Ç„«ñá»+xrä(ˆ2€8Ì:þÇOȵµµDÔÐìŒ #¢ø0–ˆN^l8p B¡0¥¥s­Üh`ù»wß}wãÆ£F ÎÎÎÞºuëâÅ‹}]ˆß¸qã|uj›Í&\æÅÖ \_&´®líF`5qž(J% krHcÂ[gdlÿºþ· üÊô¦ÇìKDjëÛ`]v›JD …ÂÅI´®Tr™‰H2j„³x…óÜ_x›.AmVI?¿]}Ï ETx¢\‘Æ$ cY§ÿiVGsu‘4HÝ?MÅ0̤Á!ÏNi!¢ÔDu°²µæû¦ô%¢½G˯ýeY·­`úÓ_~º«ƒ¹í;¤ÕjOœ8QPP`ïtàR•«a¯õ˜û¿*Wé„»Êd²àààœœ‰DBDááá 111.—ëØ±c‡6¯õ×JèX)”¤PyKœÜÁ‘RÆ[눵³ ‡ˆˆ®$’‡D“$ZžˆHDDÄz¹†&Îð/Ó. ß-@hÇï®àEÈQ£h ÊbmѺ—Íf354;b#‰(;+‘ˆÊkMqqqÇgF§ÓùvRð7h`ù;½^Ÿ””ä¹fÉ’%>ªàVp£±X,^ù‹ã¸²²ëdd¿Ê$¢%áv‰Î!‹ “Ã¥b\’°ûF9ÆŒVÑO€ED<Ïž={¶Æíä¡!ÊÌÌL"ªwfð.3ñ¶Jás¼µ.ˆ‘GIÃ\Äê¸æøèÖK3ÕvF`±œ–m¾–9°ô &¢!YCµD$a˜¬^‘BÍÏ>KåèhEKÃÍM-N’)#¢•-<<Ü¢r‘… ³9tôß`QKKKUU•F£inn®°ô"¢ø¸˜ØØØ ™¹pƒ®†ˆ¸–ÒBÛílcœæz"J”ÆQ=Û˜Óz¨þ¡6"Ò¶ÈÂYVÇ6SWs`iš¬ýRUDÄJÃôvueyieeå/ÆD¦'(z%†¥%† ïp²ygjÚ?·Fcj¿²Ng&¢²škÊÅó²ÁÎ{‘ª+e3òLîÿTÅmŽ<Ï»\.†a¤ÒÖÁhqqq·Ýv›ð0((hĈÉÉÉDÔùP¯k¤×ëÝ7äæmV"b”JF¡¤ïx5ŽâmæÂçE×r.gQ8x"b Nh`É‚Éc–$DMD!VÎÉ9©‚ˆxïÀ2Ñq{á)ûEïz&½^_XX(Œ ÷d³™‰¨¤Övèû‹cFd?÷Nѩ˦„X5©Ã¢bBY›ƒ¯Óš‰HÆQSSSUUuêÔ)a¬6œNg—“H˜Íæî»ÛÜb2_]X½zõ½÷Þ»aÆ©S§fggO˜0¡W¯^7|4Îx…o)öby7‰Q÷‘„eùº è@~~¾¯nH,ü#$e]¬Tv®î4TÙ/NucG³Ûíååå,ËÚl6¥RyOätõXQ’pm]3%EK‰(J­L8lkÉîàJ²pa%ÖK$£0æ¿XÍÍMDÃq\SS“„á’$IbBBEu}}“=ÒÖ`j®Ó³‰ÈÚR§ JÆPI«KŒ !"¹”Ï F`ÉÃ\\#gà»%“rÁÊÖ?T\°åË*ˆ¨MÅË"‰hò¨Ô“…õÿ9^9íöô6ÏýãÊÚ;¦o¯HÏ•Âm K«¯©å9êªó–Ëj""{ït"R”–»lmÿÈ&|ú‘J¥ÂmÂlîn …‚¼ÑÀr:.\o},|*R*IèÇu:–‰³Q¤$¬™3 ß*]já̱.¢ †‚¼©œˆd}ž`+¶¸G`‘Lf’†8X§µE.é®X§¦Ý:®u†ø,yZoY²wOäÓwWð"ä(ÈQ4¥_1›Í.\Æà«Bcz÷Š÷Üj³Ù‰MF§®Áî²4¬R¥œ"Ô "*«5dDÛµ-²òCr\¨p¯§Ób0 ‡®P(Ìfsdddcccee¥Á`ˆÍÎξZ1<Ïççç«TªÊåòîþÚ¡»¡åïXPPpðàÁC‡íرcÑ¢E#FŒØ°aCBB o)¦öÒä» ,¿”––æõcrú&þüi"’dôaRÓ¯¶›p XtC&©—´‘#]sAdÞ¤!¿ôì\\»ââb¡÷a4•J%˲˜âJý_æ÷J ›÷«ÁíŸå"–%Ž:º aã#°4ÅEȈHFDÁ!*"Þ‡ilç(TÙf¬æ¦F"ŠShb3'œ;²MʸäÊ`"ŠOJ«¨®ob“\U_-­›ÅDD ÒhÇÕ¹t‰1ñDÂÆÊD¤5ÉÂYŽãœî¹:œÄ½ÅìÈHT‘šmn‘FòÄ„¨dÊàðÆÆÆ_ÿ¢o¿~ýˆhÒ¨´·ÖŸøÏñ*ž'ÏXÛd9tª:øãSkþç§»F¸XN×l%¢f£Mßb>jtBh`1 Ãó|'—òÄs6+ Åò,•–³¶¶wœñ¼~ðj¼ÕÀ***²Ûí?ýÁÐ} ¡Th`uv|o!¢A½ØÎ Úºd±)Oƒˆ­ù7oÓ‘$H¢Îdúþž‘ª„.W4ÿ_uÂÒ¸§IÏ…‡ya,Ïî·—’äNÕhúñ»:YWãÒl3ö¹;x<XÝ¡;Þ]áÖCŽâ€EQú“ÉtöìY÷¿òj]›–ÑÂQS‹«ÖTW[EDqá­Ã£b“²Ò£Ï/)«1ülh2åää¨T*©TzùòåšššK—.±,k·Û333KKK…Ok:Îår]íSbCCƒÕjµZ­'OžLHHP«Õ111ÝöÕC·C+Èd²ÜÜÜÜÜ\"²Ùl .|ê©§¶oß~‡bÔ}¤Éwy»ÀǨûøºèØOÃO¼„#®ü›RΕM¾Kzõ–0+¾¶"¶¡¦<+ÇFz*,,ÌÉɹޓêõzF#, †¸¸¸ââb¡qS\^§–5WVˆ:h`¹o>Ø~Vë%„’ˆKÚZ"ŠTˉHEDýÃ3+¨ØÂ…dR£U}úË3~úò9Î`la mÞÅ^8>@©±1ÑD …„„„+ÍjÖ5˜ØÖ ï¬6'ñlŠ4v~þ›„ò„˜ÞD4ãgQñ±ÉGC‹<”ãƒ9±Ð5°ªLýÓTD”h)åT™|$'Ò`’$7’Än1o©Ø;)!&¤Ng>wY3¤_œû¹_}WÂrüîÃeK›ônþ¦i²°?ž´´Ú0l@ñæJÎxYX)Qg1¡? ºN*•ªóéÌš¹…ÝEDr•ZÎsNblFÖÄY<'»5 ,“ÉÔÐÐ Pw_ÿ(ÜvQ(y‰“¨‹–™³Qš,áÈß*]²Ø IÄ[û IB{#a1,ÇK‰-¿ùÓnÖJqTW£ýá²c’‚ˆ»Ù¹á,¼m›ù€„˜;U£y¢fÎHDO©ï˳!¢2Wíeg…‹o;æ¼Âëï®àÈQ£h J_9wîœÕjpu6Ÿ·ÐÀRZÍ?ôg†Ô]´Û%—²‡iµZ³ÙÒÉÛ«©©!¢ˆˆ½^o4µZm}}}ß¾}†a-·g«k;®Ä=ðªƒXÂ%„Òð†F©CäD¤RÇQoUj¬Øá’÷aúË~vùÒåó|³\.W*•.—‹ãøP‰^Î8yk„(DþÓ‘ãâËÊÊt®dñãy‡pô IDATU¼M“¬¿ÌÛã4Ue½ø1}L£³ÓI.ÏÎЕ™žOpºˆˆ'†!ÞÉZÛ‰®Õ…V¸E+µ;ÔiÍ2ƒ]Ê–Ýa·¶ËÂV-ëûû{&e®ýüü†¯. yñ§Ö¶ÅDÄñüòO¾¿xª°²NkŽRË f–åø²j}ß^¡ÁAœ¾€­ùqòïäŸK=XÂß‚ƒƒ-K'#°ØÆ KYÄñ‰ç63‘|#ß›köl` O÷bËétr'å>l\\5r½,|ëß­\0[·Ÿ¯ÝMD¬vgüÁõU ×í÷IVÖä<ÏÄ;\Dd–2Däâ;¸õžQ¯SIšõ-AvkTe½‚2¤‰w*£ú‘ÓÅœûáÿ³÷Þqr]õÝÿçÜ6wúì´í}Weµê’­ê†lcLlI'„` 8`À  xžøJȃI0O~Ätc˽É*¶Õ{×jWÛë”Þo=Ïw¶HZUË2óþC¯Ù;wÎ=÷ž«¹g>çóý~Ýù|îãwÍcò½‘D±‘Þ‘ÄÑSãv«`6qvtôEíÁHvNùΕev†ÿäóÏŽ†3TIg“¨Úiù¡ ÈÏãÀ iQ—¢ znçhðÀ÷ŽT¨„³‘x<>YRÐø¼ €E‘eùbòt&“Éýû÷'Åõ=Ji__¯×k”†T'3^Q ÁBÀóIÊ/ÛÛrÛgžúÆÃÛ_ÚÚwv³F,cw06 zRO_ T#¹ÜÀDÙAbkˆdSù¥­}]1cÇ})Ë«»Â;ŒºB•$Ô”$UÒ¥j@(š»È‘“7¶ %ª'sûhm*UŒyä äÀ*Q¢D‰%Jœ‡ÉåÉɈcñØï¯Ø~hl,*൫«k÷îÝÛ¶m;vì˜.E)#P –Rê€r÷”œ4»Ö  k0qöá¼^ïìÙ³çÏŸ?kÖ¬êêêyóæ±,ëóù†I${öìÉårV«µ¡¡aöìÙ~¿R_khh0ö4lbLú^âbГ'µà´¾ÊÇ- Xè<üðÃË—/öÙg“Éd*•Ú²eË=÷ÜóùÏ~r‡ 6¼ñÆ‘HäŽ;î¸ï¾ûÎÓT‰ÏöíÛ¯TS™á®þ¿\ÞYÐXBW®@ÏmÆ1ž(&’#>¸¨nâÌH~€ ….©€n8ÖuÝårY­V‹Å¢ëº±&“Ëå$I2q»…Kff0ìLF*TÕ¡OnOéY´!ÊèÏý>œ’½N€‰:›E0”¯—5âdÇçšvµ˜Ö—›êêêjÝÔÏÑϸ3ιÄR5ù)‹ÅâõzU”5š‚nÕ#{¡Ig°2Ô§èE;Ò쳬h†½N÷ŒK¤Ÿi–ÑuÝÂf$ÂCPHªŽ­½Ë\w;@eO!©yÓñ@M¹}ÝŠzYÑ{¹XîÙÍ=î\Ûô·Ï¦¯l+Ö F²eîk<µ~Óo^ìèNüøñÃPÒ9™ùʳ³^¯ÍåO›X"ÓºŸAPšxcýÏ/4g$&+1™áøáÇ‹®½‹ !$„ðú¾9^ß;ll<ÔpÛªú›¯«°õÀˆ±=Éz<ËàSw–3„xâÕÎÑpfsOÅ-×רlæ@ä´ !Z Áõäsï k1N€§OÎ9±|úýå0¹´œ `Ò~1!„¸”(Ât: €R‡ù€¦¦&BˆQëPÓ4JéTwÀáœÀ‡on°Y„}ǃ݃ñémÊTQ¨ÊN ¼›uâ‚i°ä¨.P ¨Â“›ŸýYpVpÀ²¶òÿüê Z× `oºèòÛÕë(~€–‡–£”|k½eÇ¡QÒg{3™ª“}Ž'âU©2áp¸x @¥%ëmáJ}»–xg)ãµAi¯JCùV×âò»6äwõ«£—ôÁéË“ûöí;xð ¥Ôï÷ïïˆh¯Ì…ã2!Ð4͘å …|. šV-" ’Ò,Y8×hdÍš5Œ©¬Õ_Ð5?ë€3ÓÖÖ¶råÊ+V,^¼xzA¿ßodmŸÌxeLK¬+‚QBj0˜™LLvu( Xè¬ZµêÑGP%•JíܹóŸøÄô&ËZ,–‹ÿm_¢ÄÛMŸ:º!¿ë‡ÉßhÙ€¾FÛ«+¬Y£ŽÛ¹s`‚ÅxBy|’ ωœÔ¼¿º×ä2K’ÔÙ9ƒíål4MK¥R„£ÎˆÃá˜~ˆI @<9ƒ€5=õÕô×)=À¦ñt«ùc·ùˆ;¹ƒñx®¯¯Ÿ»dW}qÌ9 Àµ#‚}Æs·`ÁA\.— :…V~;[{W¥uö>›@N%„j©6%šà7ö¬ ¹d2 àõCÉê2)ÃŒMnÊS–Ï¥,m+'½Q#G{4‘Péµ®XP%ðìÑSã†O-Éš]C…é#·x®o/WTý—ÛL‚o±ÃÂ`ýÝ‘‘#‚/*ÅŽI-/¬Í(Êw>U¿f¾Ãì*ãòÀ¤çîbB1“€5 kb`X---­­­ ,hhh¨¨¨ðù| «xÐÓ¬£iÀê9e¸¥ÀïN7aeh€Xx'.äÀ¢Ê´2…’ &*Æ3_»§æýËÈŽ;\bަiíè2 r´3¥d"„0-·³× `Í¢ò/}¸º±ü¢ëSu65™ÏèÖ€¡¡¡îîni03'REä §+Q¢D‰%J¼«Q©¶·PÌ?P8«xÑù1¦v~¿õêÕk×®]µjUss3òGºÆ¬›“›ðæ{½^c~I©‚1¥~v1ïÕŸÝ:kz›„g•¬®4FaÉueЕ Ú¤êL$1†¯%«D‰3ðÖS 1J³ù†YŠkwH_œ€Õ=¦H„8p;5è#£‚ ¨ªz1OC皬¼k±X|>Ÿ!`¥R)Y–óí+ÈdfhMÂô©gyÒ°4v\<.^×éBË6AœÒ¤X–5Žb@Zt`¥s XœN§Õj5®cccCCC±HôãÞϨ&·DÍ<ª ­Á2–,jF„³(„S#Ó›*zÙâ²ß!3.?šš°&üDò Pí-^Ç»#”"š,SpÃÒ[ŒF²n êqòiuå&ÂÍ“;§'Z+¢ª*¥T§Øvʪk2¦%JH§Ó”ÒB¡pèÀ!Aã©Ü/^ o<¬ÆÒ„R8ìS=4n‰Ë! ýýý”Ò'Ntvv‡›ì€Éjgc螪ªNw` R1‰xyµÊ†öï¬ú²X²°ýÐh*#ë”ÈÒ<€ƒ¿áR¹ž«0 ÎÓ[*§¤ œî™þVÑzÆšÛÛÛ !«š ûŸ¨û›uîxžë Å|ùš”ÊÓ×zçJ÷_­sέ3¿g±M×gž(¥“ë1MÀÊKy)MùÙo:8EQFFFò£é…†Öcžáááóô¿ÄåQJÔrmPÇkƒÒ8^3”†ò²9"ŸÊNÔ:»úöù1¦vFÔÇqÆ‹ž¡D:+W{˜F¯IÊL¢hµZ ++c¹§ö(†®klpûöí`ÄY†ë¢CÏNéP 5J£$`]Q4]Sš×WÓ„U°J”(1o=•€ ÀB¡•Íæ˜leÒŒ €ž£ !¥ÔøÝ>:.ˆ„Y°›ÎPÇ, ¦åE:F;“!dΜ9¢(2 c£ …åt^—fèÌé!„Sb–QT΢±§X7ÒY…%øsê ÅŒWJ“!„ç° Œ|(êíí=vìXÏž“#új‰Z”3 ²Rç7å´‰R¤¬Y#<@bjD¦JŽ(Š¢ªj® ›9‰c›¢²Œ|€hq0 G4…òr6`~«À±žH*+©ªn· ÏX[°F(E"•·Š,C´;›Žµ[v®Y³fq{“¯°uÿ±Q•²Tœ&`Çå{ÕpxÃ4VOO¦i&·…0„êºÊæûJÿ뇒¼m~K­3=mDŒ¡¼¤ÂD"qäÈ#ÚÔétêºnÔ%œ ²6â Ï%`©ªNÈ„€UÈ€(b"5Ø"[’à®››<þj×GþñÅ}ý•ñX.£ç»M]›µ×v Ts>žpª4^{U l¢Rôìšf_F@„+PÔ£§ÆO Æ5U6îŸÏçt: ÁÝk<­.áæåžÆ Ó®¾ÉžÓh–_ÜVõ7yVàsñƒgÖëþøš¿~\V´Rá$˜÷+Ôde,ËF£Ñ«fÂ* XïnΨ1ÅãK”¸:,žð4› ÚÜ’l8§K’$MÓtMÉ4£a, €×‰ƒ±¥õcá0-/Ò V Ó,ÇB&Ÿ=£…LNP(Ìð ;=‰ûÔ³Ü!4éÌë *D8§&5åÀÒ¨9œå\;Oâñxêêêêêêjkk‡ªª£ .­{˜-fÓh@y…ߨ9% '³7tIËrì¸ÜÓ£ aBã Æå*§€š¬Äá„ Ëâð ¬ZæöŠœ Æ4V$‘Ÿ[o¹m¹{xx8T¹Iµß2Jï::æ°0L$jŽc¨Ó¬ÍñF×ÿƒÜÞZ€å¦œSÆœÆÊdVÅÄè …D"Á°Ìc•¯wVC4ëáS@}¥Ãé°te¦¨Z˜<—K !L¥R±XŒeÙæææÅ‹ûý~¿ßiÖùX/líÛq8`”JÄ$8lXÖ\QÀº©ÀËÛúŽ÷D¶¹ýïÖÿ~ýÀ±ÿ¶ÿõmþßìcÀÔqïg™‘—µáçµÀæޤ¤HyÇÁ `ËÞ¡÷ßÿÌûï†Ài·(++póââm6§ÎÜžš)†R€Þ‘L]…í…])ÃÃ{÷î˜Üç·/XÚÂe³SÊïd÷‚$‡5}±²²²ººº²ZÏκ®hYVÓ´S§®vq™%J”(Q¢ÄÕ!®§NÊý<áÖš—àÒXÆdozÞt‡N†,¬IðÙÔlA‹¥”‚¤¾¶{ÌØAÓhZ+°|dÕ¢ª3eEŸ]u˜iÃ*2aEõ^@ÿèÐDÅš9ÃÁ4JyܯÙl6¯Ûx"—q!‘×p/éÛ"`‘³x;ŽR¢D‰··.¢+P”Âbur1&ç!4~'"Åßù‘ ›“eTSMD ƒsX”Ò¾¾>MÓz{{÷îÝ«ªª gXš1!`BzF F!ÕgX‘§‡âÌBA#ªÕ À-&Àð“•ãf¤hÂÊ8_°á¹©ªª2R2 ‚@¬¶šÌx(&ÛÌlD«IinPì=Ëäd’gaÁÖÃ9rľPL©t)P1&Fm2ýàmë&m릡p€{€L"H³ƒ§Xå³eòÊ!—P^^^QQár¹´7Y:z£n;ÀDsŠÊ€œ0 =În·“Ê3F 1ž›º±UʰóU²evñ¿ž R±Úï÷ëºÞÝÝÏçŸßthå<;Q`FCÅ4X“w¸")b)…è” S9Âè•цi•K\®Úe‰·•Ò8^”Æñš¡4”—G4;ð§ ›M„ÇåX €ÏþëÑ «T^R»KÚ*ó ŒÏ®xô™ãc©P\6‚…Æ"²½F`$¾˜N2™kÐà-.­½µó€¡)+…R¬+D8àáÆ¨H ¸Š—ôír`ÑÓy›ŽrÍsôèÑ{î¹§ªªJ„ªªª~ô£GŽy§;Uâ‚¡¡3Óè\* UXr2bµ9€8“@ÏBh(S=€ÀRJI8š*€ Y€säÀ ‡ÃÙlÖd2™ÍfÃxr¶ý –`2dÝp`3X†‹€`š›ZƒžÖs Q ØE5¶$¹&Ex'=;Œ‰¢„— ÇqåååDQ$¾ R׸gxãþ„ë°fö|ÿg§~ü|ôŸ~6ì>u¤¡ç¥J, ‚1Åɨx yÓgÉÐÒ6<¯mx~ cóˆ´–Õ(MƒÇ^ƒ–ŸÛä°óÈ˜ËÆ¨·Í©w.^¼˜ã³À”»y¿‹`Ò ŠÎ rÑ•f{kˆ ù\1~RÀâYšÊªÒét___.—áäh€’#I9›ˆ±Ê,kÒUéÞïwç×C#ã’¬ê<1ÛÈIú©ÁøôÂg^mBŒ…µ³™œ¯ÄãqLÄåÍH0’›°¨Txb¼¬#J_Ù>àî¥.9½{÷nÛ¶mN¥ôïܴl^CÈÝ7·|æG®uóE+æÙ_ÜÑgaÇuŠf¦üzhÛ¤=  °²,+*ÓŽP,Y0V|¼Î)‹bô6hxMÁ-Îï'C©¤ˆ§5#[ÿɾ€Áìþw¾ôϤc h‚;×µ*q¼õo×”ÆñÚ 4Ž× ¥¡¼#„œ,h:ÐÑw9³ CÀÊår‰Dp`Cóy…€$¨:M¤%»U0ÙLìÀŠ+ššš  kšfJ01îísm?ßéýùær/æ·üË„GŸÛßµ!¿«O5´¿G¬ Q)¾ôëSϽÞcØ¿¾£úÎU~(ÚT¾!`퉜MPîùâã[ày>[jÖí1á¢z~ûx\ö~ù‘½½ìÞ{½€,/ûd,Aåun£Àɾèû†Çcyk…frÒÝÇc„\.7™*nH œTúÏžq–(Q¢D‰%Þu órüËw2OrÚà%<ߥ¾SŒ9ÞÁαñhw@›7@?Ðë·©®o%7ÍÊ´U¾ó›‘·{DZÔÇúß~4R×9>C»¬ u®,€±ó9°ö /:z‹3Cc `ï±àänCÁÓr`¹Ý:cXJå>‰ݯ<®…¶]ÌÎF>/7J@Z”aY–¯Îõ¼@E§Ë¦¢¢"z½Þ[n¹åŸÿùŸçÌ™ó6èZ塇úÜç>×ÞÞ~ÆööööÏ}îs?úÑ~øáw¤c%þÊ}K³ŸÍpŸÚ·ÏBË]×4MRh£»PåPl9œú„‡¼<Òá@çXnn¡Š q¬£—Z(I‘ü€©~ýðdz¬†ñ1½#ÁLì?–P&æXDvÓÁ4szª¾€/ZN„ Ý¡ì–DÀ¨9/Ô”¸9ª~˜%²¬0Vm4iî=4óQ ´ÁÍÜ`¼Ž…êSáóí|ñ¼…ç¯ÚX-Ü^þ¯«´Ž›g§·tÚß8e³ ºÓÜ÷fv:“/Èz¹¦‚Et°^¨‡üþ×Z“¡u€YÖûÔ±—Œ‹ºÙ©qBÑl2_ Àee@—ä“£ûe ph¬”B(ä$¡pT Iæ ÙBpå r® fœóÈôÆ2ywŸ¼ñÍcëî¾×Súèp1tt4>5àXÓ–Cq*B0§[&.ï@°ø‘ »ƒ.wå¥^1"3zƒDSÁ˜vžTÆ‚RŒæê}V#ãùòhfDr2 UΖ:—ŽÑ5!Ýv*Ïi.BØD"a(b=½ýU¬@y`(TUÿÞeÖß¿í(;óGòé¶{[– F^PF¥:sžñI–©)h9óÓûGE÷ÕO®Ê$‚w¯rTƒiË´[K6‰9^ gsÕpx|$×Y4 FàM§•¶|<ž '@Õt’¬­ß2€,[eÆ3|+U‘6ì 3 öËó²µvÉÌR’+èT Ñœ À±îè~{ @í-ù|ˆÜlЦá¶Ñ­»ŽªP°=î¡Ãå]k"wU.u.Hc¥ÐXqfÞº%J”(Q¢Ä™œŸÍ`o@¥S $ùŸ-»#“ÜŒÌŤ¯f5¹6šA3ŒŒ:›¦ !»†´×$h)ÞW­øüÍam•ÅU4·M››•ðx‰%³Õ¼P·iÖVmMbhóÞDŽ9-…v­3¹°‰T@½¨´ø$§?n~hv¤wXÃr‹/š|bTgˆfMGz§:iñX0 A5 ÀçäÇS\‹dU!Èåõ2¯̦O–lï±Q¡”ðÒžt À®l†Ó=ÝÁ²tEÖÏL!FS #°;:T³YÌæ G»ÆCjÖJ©Amp³éhoö¦…¢¦ uÜ]™X¼+™:0|eîäéܶÌÖX!¼[¾'/»…'žxâ½ï}ï»ý,J-ÿ¾ÛÏ¢ÔÂ/~ñ‹¿ù›¿y·ŸE©c;€wûYœ§…+29?›èˆ‡ÿrô‘­õ›“¾ÓËîTþ‚l’†"›`t©Ò©’x|SÀb1…S CæVfP@R¶ú„ì­sS+êBšË‹³”ÆJÙ•ÑE~iÏ 'µp¾à±fËå•§·FM¦ÔPx\Óô2—3ÉÄ’Ùg¶ÅDYŽcmVK"™þí†aŸ×“H¦Øí¶l6—ÊJÏ툅q*lò²j„bòþcWþªþáó¡ú—–xŽˆ.xvðNcKõ¬˜Ï5éÄ.ˆßš½®F.¨¬‰©:Ç1*§eÇӬϊ½‰XÆ,ìü?o¾ùÄÛ×yr2¬?òÈ#Ï=÷Ü«¯¾z¾~«Ñ“wf³9ÏX$+ŸÏ{½ÞË«k¾ëÈØî£·Ü»+ÆŠ•+V½Ó½(q&¯îKo±¥îWVÙõþ®6M§±¾7ß·@M cüá¸ü§5/àúeߟÿàÑ]gœÑßß{ˬÆò®þP­Øgä†@ ¬"j<€#½Ù½áñÖµw-?øåÁd:¿¨­¦æG5M{óo«ç7š>û Ê_Ï€pÜ!‰ÏêüBzzFϲz€Æ8ÎuyÏE@îÊ·-µÝ¾ü2óÄ•(Q¢D‰×0Wdr~‰Tîë?xÎmÕþíÛ ùÜŠ¯üë’Jþê<Öºð‚Ÿ-ìÜør@ú«;*ÒñàKÛG^9îüÀ­ ý^ûÿn{S¥ùµÏíC©“U–…cƒŠ©Ù'ɰ§iù{22óÁ›RßË3:}u…)ÿ*¡g&5ZM² rë#«úGS_ùô­MuÞ³;ðü¦£¯¼yâÖ5szÇû†£Ü{ ztKS­§¾ÚóúîSw­[pÇóu ÿ÷ï¶ÏŸ]5ËÇSß¼ÿŽêrVK™¤S:ë(˜f]‘‹ùîbùŸ2ô)°½I¿FA,’~˜He-"é°óüŸ5É}¬cÇJþ—ºÄ3&…*d«þ)NÈB='ók7ý€¸Ê„ü—·IÞy»B§óÁ~ð+_ùÊU8Ð3ºÕ.†ÝGýúÀ•íÌ[áï?¶´$`ý¢S˜SkzÏ’ÒH]$ÿ€#ôß´ŠcÁ ]MU–tNKf”¿háF|æÃ0mmm Ã8|XŽÇŠfø‰ªQ~NEöùû{ïûòÝqÛž#M PWÉÜÙbìýýŠÛíž\Ô:¹‚*É*€¶ZfÕ¢âoãc'À)êYx¡µB_»Ì®Ç¸¶ N;êvFZ5× ‚'T]6:f;u]yuå蘻½}Ë¢(uÍsýÍ-ïÜC¯ø¾¸ÐÍZ»ÒVUØxÒ‘égÍuÑÇM‡Æ¢ÓqçõvÀÔ ea;}”«W ¿Íââ[w÷æ ÔzS›ÖXípÙ§UpùjõñÑël¹ýÈG,PËŸ„ ( ’¨.R`ÈêFïI‡ `ëÑ´ÙÄ޳ΪÈKª¡Z¦$vÝ–˜ížÉ†&Oc¼PJjlòŠ…nRop|Ëißo³êµ•³í™¼¢¨šÕÌs,“ÌHË[Y¿ûÒ$]·nÝJAX¸pጠþ 6íŽÈË:‹ äÉ_Ýê»y±‹Ë4vpÆ£Õ[f)kxì„ÚBµ¥/ÆÆ>¥DІFý€¨6”¦mö-FÊÚÊô1±BÓûdç3/­g¯¶Ý¹³pd$ñ£Ó´`ñšND·hÑÂÑÑѱ±±-ΊŠ)5'¡cK œ¨J 5ñ$%[99ž³À U£D’¾ÙñäP{Æ}t]e…×:§J{áÕN¯“ KÏìÈ]ÿµÄHoþÏÐ –RW Ëphé²÷߸ìî{¾öÒmž9Q Ú‚Ùîîá,kV,áyÀWÃë×t϶Ébµ?4kÖi·d``@kCCccù%ÎÆ™þ \ZÅ*Q¢D‰%fäŠLÎÏàõ­]šË ³æÍoàË~6[9rÜ” u‹¾ò ŸuÕ¹£i:]ô`äý7øÌö§Fkò¯w>»ñˆñîõ³XHÂå±ë*š}ÑQa¶6,®?utØÒP«0€ ÐµË+1ŸÑ¾rÂB³XÐdíMõôöszÀ]7·Tûm~òøá¶fO$pÏí ›v“¾á¨SÈ?WÌ÷¯]RýúîSÉDìÎëí£Ã*€%Õレ'>ýÖëíÒiìß§…¾gÙãÊ™r$A%ðÈÜ1/Fl ý÷zêW†#÷}\7YŠ¿°Œ*“Ó |«ªºsgR'äº9ô‚‘4˜@ÚZi팴V¢ÑD•M€õŠÝ¥gs5¬’µê2¨««ëíí7oÞÙoõööVV^rþƒ *ÿþcKßZ×®$+\扔x[1þË^®L ©Œ\H:pÀ^ÿ¯ï÷VyLݰ'üÚ죟ò\ÎB4  ³³³­­ yÙ{Gs€©‚ÈYÅÂxÚlÑ}ÿòáÀm?mMD$ÊDæéÆÆÆ‹ìI41‘,|" @2-pX4†*€Ð?8²p–ÛÒI•TnåЬf[¹w¸‰¯ÛÌk¬®‰:Éh‹Gæ†l>ø§ÔvóuX ¸z0¨™ö*@r€Ï´§ŸÕ¢ g$³7‰Ø‚¼¦W\½+JñBúæ›l½ YS±@cµÓeËp9­ÄR€æGØíöx<Þà¬Tû!ªÎ5 Í2,cimËÿmV;_?D–¶˜n\Ùþ³§@—N' ¥ò ´âô$8ÌZ*Ïõ jí2ÄâôÅi=m!.”̈%òÜNÑítÓ—*`1 ãv»gÏž=ý1|6ÁH€BH©⬷,q1}Ikþ„§où¶˜SÒúGTö$Wÿg`xš¢¹ÑLY#ÎDX]µ­V_×Éá4ݹÊÀ°JP\6oÞQ¹9Ô T% @, šiÝš•𛛣Ñè\HTÑ(Q-Ä•r›ÃCWÊLg:s-"Wî±(÷XFÆ¥Æ*ñG¿‹¥Uûí͇ø+̪ciun¹€JÑúFÇ3?ºÛã2¿œà@åÚ*Ûî#ÁÁ¸õ&¾Maò;ê»nï^ ›šš ¾Ád¢wcºS¢D‰%J”¸R\ä伫«‹b6›½^¯Q¾æ<œì<À^§Y €òÅŽãñÍéÎж *Ï#` Œ&[l·.w‚26òËâ cÿÕn_6¯üåsï]z\LýÄZóóo°· LŠžÓ VöÌ~V¤@}¹à™-=ÆÆ¾‘ä¾t#€õ›»¿ÿó½ !,C–Ï« gtôE «­Ù³¼½À!UÓ·PgÖì<àùLJ¶~zpþg?²È˜ÀLN]þ¸ •‹½õÄ ÖÖ I©Æ¦f·“÷¹*wï;´ví †½`ddÄétNŸ9kšVVVfâ©BIOPhµÀBd…BÁø­FÞíÖ“O>¹zõê ïWb·ÝvÛúõëg°Ö¯_¿víÚËkv媒ã©ÄÑu €a.SÁêJ¤²rß4«UXÆf__Áp @lX”‡%¥ìø¦“ïýÛ;DyOOO(²Ûí>ŸOQžcûB@¹ 2¬‰küˆ"EÊýƒbQ ½äÇÌx·S De'ŸÉd‡ªªcccÇy½SSåP( ¼¼z¼#(þt§÷á¦ap0AP(¬o£¯í̈ӷÎ{Þóž§žz* *ŠÒßßÿï|çÁüîw¿{ÅtmóÀüøÇ?>~üøÛ?þïÿþïŸøÄ'Œ? !?ýéOÌfóÊ•+ÏÞ¿D‰ËÀøyyúÕ‰ÞèW~øf÷PìC7z>vCÅÜÕ ÇTù}kæ»ÚÅ7ÌÊx="Ö;¬•••F}Ò‘‘‘T*ÀjæBi@¯°¼ ϵ~ʤvQ“ÈFÁ%gt`Çò'ûbǺ#’¬%Ó2§E[îÜý³—B=£“h‘\ú¶†N®BìŸÏ rßXþ[í9™–ä a„ò)¢RmýÖh…E@þÀ,èr¹Cu[Õ\–95Ȱ‹:Î^áy°,TÕ.^™L6æ´YŒgMõb·ËÆ0Ù}Œ¥ ÍêóùÊËˉš ŒFÁ;Œ§Yb!"®[¶xýåMK„J"-p™5G™!HK¬®ýA£á €ùUùÉN5˜e2áÀrØŠ– ’̈' ¢Å5è>Æ©.kWl¨ R%­¾ª'OêÉ=Õ•WfI‡a }ª,&M+J2 ›ï°K²&€Ç„K¢²Ù°z™ó”båõzϰêkëyÂé &Ñ@gDäSÏ‚³ÞnnûŒÍ"¸¡µXA¦¡z*Ìv$ŠS#ÅòØ™pðT&“cIÅã*Å&wæ  ªÂ ``´XÄZ¢ÅúGŸ 8-£âä,°P¸„"ÜÅ‘ùã°êêêÞé.”¸”ÆñÚ 4Ž× ×üPžkr>88¸k×®îîîT*ÕßßÀ˜?œGš¡¹-°IíùÅñQ®ÄG£]]]sÍÎê*8J)~ú« TIÍØBOϨY`TU©áûÐ B+pÙ‡M R”Êqè,2 ë4«œ˜Üà,˜ ÍʤèyZœ3ÐTRÛº©)0H#a0"€E Ü×?yÝ×?yÝ7>½âî[ZTUÿñㇷ°p¶¯¹Öuý‚Jsš<„ {0Þ='sš<®k¯ðâ›}¾ówóª\Êu ¹ç>ÛwïŸÎ£ÿñÛƒÌ,*E[Xͦc£c¡¤¦ÑŸ>ìÈ0~— ÷ªªšILåýˆÇã‰D‚eY¿ßªlì°oìsD’“.Áp`eÓx›XW^ÀúÆ7¾ñØcµ··[,–µk×vvvnß¾}É’%Wü@×6ÍÍÍ?ùÉOn½õÖÿüÏÿQettôᇾá†>ùÉONw`mذá7ÞˆD"wÜqÇ}÷Ý÷ö¹Ä5Ã[ !üųÇt„6íêYØlU) yW,Þ‰§ œfç¨Í¤=ø«á¾¨½ÏÝÿKáåõ!¿ÝûZýÑÿz6 jô'Ïÿò©qkÒÎÆrãyI¯0+À]¸DËU‚LIióªò¶öØ” 0ÓˆhÀÆâÆ_l>¯TTº­ªJù–æºJ7`²úÀY‰à‚&ÑB¨Îh( ƒ¥TŠÊHše,Dä'ŒEåååÂIj\d—EcE¿U$:E&]4Ááœs*¦dŽ:QPô'»E#’·šÃ„÷jÊåµbBfÏŒ_NE‹Ž¾€ƒ'ÃúéAîÁhÀì·¤èÆÿ€MûâMÕî€0_1Õ>ÁÜâhy¥ûg@µhlW™¤A4B€ÙM¾Ã½ÙhJà°²oì{÷Ïïûìîî§­’!`A1XDà8ç³ú;NCü²ÚEìÿcï=ã$;Ëkßÿ»SåÐÕ9NOONM4’F£€‚x$‚ÁÆ Ž#0Ì國9Û‡`ðÁöõχŸåÈŒ¡Q@9Œ&I“cwOçîêêʵÓ{?ìªêêžž‘F&ŒFµ>uWíÚµk¿ÝµŸ½žµÖ£>úTw²‚~]èQmé£! W.Éj @og´º‡æ† °¨cö îœIfìhc „4§½ä2* ¬öN?Ð?R®_K•ÀlÜÒ4-N{Î_ÿ%Våx^x%á}u\ø¨¯ãÅú:^4¸è—òlÅy:.•J§OŸ~á…²Ù¬ßïïêê,ë¬5³;½Ï¼÷¹cÎÑqÿ²>ãw­K;><<ÜÙûØ;zºšÅ¿þÁIM•÷=›îüKnj¾ê¤3[N|ø·6¨Šø÷Ÿþ·~ãæ?¾ë­¿¿} è=íQÓrJ¦ÓÓ tàO?xÕ×>yýu—u¿ó–¿~eEGfg?°uÔo(úHÇ»ÊÚ¶\34GÔµŠüDQÛ|Ð2욯ÂB8Yöx9™ÌäL`d"72‘<^캵:ðÈóƒC'͇ÿyÏHÖ–ÉØS3NØç !w ïx©Ü|8:2´B ªç}‚~1Êì<šuEà… Ð¨:,Ô©j¼5Ý]ZnÙÚ«…E½+àÓÃçĬ œ¼®´@¢Ù¸zy·ó ¬–6E̪SÓy °ÿÉz:R€t:HY&°V´Í*°ºƒ²ú¯ð8mÝL{VhŒ— ,Ïè72‘Æ“yç<½gRrèÄÉ™ž½ŠÓcY`eo"Wt€¢éî}iJÓ”Q{ Xd)€*˜XS¦/…[.ÍfN¶€’ê2MÍôÝ7.„Tו¶ãžÈýnð¥GLÊB0|*Ð9k´¼/+Á€ï¹bSÉõ‘pP]ôvé>ýWüÙ7_Þ›o‹[ÀâÖ¯Y|ÍÆ®?þ½Í­a@(ï›If¬†DXè¤#­²ØÊS`µ¶ú…``$ãÑ|Ŋο$L/ŠÑköz¨XŽãœ£n^Þâ×3먣Ž:ê¨cA,XœK)3™ ÐÕÕåÍZY´h‘—Hp.Vi ø¿ÏõéšøÃ·´ê®‹Åúúúl¿Ûðýéû—ê7~ö÷º®\{h¿áœüVµ¹åÁ{,eú€°…ˆtLë ÜÌq\Óͬ´ÐFñ¤ÛBFÐzß¹«÷Z™*_ï KÜRÆÍ½°÷»î}R€}hŸP}nEœUšì žxç]–íî>4lÛÔði½•žÜê¾F¿O[³¤ñ7—i‡P@ëËîþ­_úãk¥cV>QøÙÛ7LJÉv¼8O„500pìØ±×CxwYåkTÖN;mɬ´ùƒ'“¿~iîäH H§Óããã%[EÛpÛ²¬£GJ){zz¼>'óßÞw¤PÌœaRJ³ç5§Àªãçˆ5kÖÜ}÷ݧOŸ¶m[Jy×]wÝsÏ=žõ´Š¶¶6ï‡`0X(ÚMuœ¼›Uåü¬oß(ä¿{sóUk#Ž+§ã€ ²8<½qe¸ç…&™=aŸº§­­Í»~,_¾|bbh 9€¡—#º…¦µaáqisÞÖäT¹oph ,9~:•L— M6†`ËØwdbbÄ §Íi[šj–¶Ú}KZâ'ß#–YˆÚ£c% Í°QµÿRÊýÏʬlcO°´¨ d`Õ´)ÑØ „ roéH0ìîî–‰Ð×ËnDØ9ÀK¼€âH+ºDm¿q¢åÒCA# ø44ÀÂÖt½!èØ.ÇOžÂagXäcA ˜ÉæT¦X2HÀ鈕9EÐåàbÑòáõ¶i@j¦ø7ßÚL† ÛƒYV°w¢&¡ÿ•``$-”ßý…³ß¨#“¹§S¡€¾ym[¾è?}>ÕÀ¨3´Xå.±¡<ñÉhÄš‚½Õm°+Q—±†+û?®Ðu]ÀÿþØÕ/|ûw>þK€g¾åf VIš’Ì»J(¨ñØËÄÒû„„ý@_‡ÿÏß»hËêг·Í¯Yüû·ol‰+½aìÓïÙP›ÀúžÛ×þë_¾ñö–^½©hÝTJ–ŒøÝÂ×å¦à1’ºŸæ† i9#ã9 Ti¤–°zzzTUœœôJg*% ÷ï|þ"¬×•«Ž:ꨣŽ:Î çÙlÖqœ`0¸lÙ²«®ºjõêÕíííÞ…ø¤ƒÓ_¤å¡}üÎÍ-͆_ʺl²«ÿh"w¢¤šºËLAíi ¾÷M­§òÝÒÊÈì‰Ú—OM%5Ã4*Ñ8@2#Bݸ–›>&ÓGÂŒžG¼Â!g„(>û@áéagbÚMdzeÑ“Ït÷˜GþÏÔ¿tßÿ$ðýmáœ_ˆ‰‰ñÂ$€S&°Ü©ìcßüäMC^ŽÄ¢Žhoœøò_{èÞ÷Üÿ·}ø]:w%@;ÔöÕö¯XŽ j ¬|>ßßß_,½¡Û7d)ùâPàï°ï~ÔÙŸ¿xêÅd&ïl¿"씲¶#ó…©S§!ˆìôðàà mÛ‰DbÉ’%^"ÇOž.×ÏÃ)ýg‡Ã”òsjz`ø5•UÇ/wÜqÇ»ßýî[n¹%•Jýª¥Ž‹¯.Ë´l3;ò¥;ݸ)®(â'ÏO7G ¡0®å)°žù'Ü&Ý>6®O“5þŒ’?ÙÞÞÞÒÒ’H$F'2@CÈ|zE%¤jmÒ I%T:o³ØäTÙýdWÒˆvî•’ö¨)„:ŠŸ66•:V¾Ò[)õ’™> µAûðÍw^?·bQ*ÊSöÐŒ›]¼xq0 ½|ið:`Ò+ œ”)Í¥êP»·Ÿh»ô„ÏŠ€^“MÞÀ¡c€’Y7 ëÀL¦@E<Õ±ýº .гüáÙ”Ðx¤L­Œ~)÷Åo>ßcÇXæ–ÂÃÕxYZÀÈäùýa81E¥YK`=ü쀔\³±³%ü_wŸþ³»ïnz}¯¶£ð¬g!Œ›å&á5è^ÄrØÑØ,‹T×Yj&áTNo8"TUäsº¦o¼º§9üíí+–Û…ßøÎž’´ü¦œ²ÔHPtý\¦Ô'žxÂS`I †&tMx ñµášå·ö5Ý~iêÛ[ºÛ( ®ØÔ‚`Õ­e2®1d©ZXø©‰ÁÒPdzz.ªË”¦až|Ò+q¨”€¡Pˆó'°^W ¬'žx¥©mu\Ȩ¯ãÅú:^4¸è—rÁâÜË*ŠF£€¢(­­­B¯œ8‡ëÑ#ÑAkÕnk½n}TJwýóÏÈîu¸wÝ#/öxÆéëׯGâÀL)d»¸É=µ/?x*ÝÓ¿¦‰X3)%¶ p'ž–¥)Ô€“h µ3…õ’òí¸ø~îáïç~¾´ʉeˈϒûÌ#¥Ôh<ã£ÿ•o8ÕGT,„Òœ"zúÏîÜ lÛÔ5ïEBƹúîN ¡µ{»Ú½}éÊK€ãÃv-uøða×u¡¡¡³îçb,M=r8ò?žlæ„¢>¾/ýïO !×­êzÿ¶±ñRæóyUÒÓ@jjÄ;-µSà|Ñ.ë•À·žoÀÌ{à K¦E]UG->ó™ÏìÙ³'ÿª¤Ž‹žRXœç×ÃÎ݇Ö/ñ¾`ü3ÿÐÿ£ƒã ¥rˆ¸}ò[¸¦ãoÊ«ŠcÈ·6¥€ÿþݶ¾²¼Ô_WWײe˨Èjâ ðë;•ª¶ê0:£·2çûYª!îUì:8´Ç-/:Jqr}Ýqà讲Àxb:?:žZáK¬n/GŽç3‘R*¥-Š}%¸3‡ÀŠœå­å†U§ç¸<»KéîEQ¦®Lº3Š¢¬\¹RáóWN¾âƒò…_Ú5–#=®*'‹@Pøj‡ëµÄ5àÈ`P¢2+ Ѥs%*X͈ 'nŠè,ãóû}þ¥=¿s O1lچƲ@cÐn6F¨$UUÓ¯Î/Ëu|ïàêK;˜K`=øL?ð†-‹âAÍ´ÜcCÅ|Ñ5—|7·cÀüælš©*C8ÏŠZŸÒ¸ î$•.„ˆ5 ¥¡*½PŸ¢-{kxü…¡’4ý%9a±FͱuëVOe Ë•J0ŒM{oG(蟷±'È’Å…£6®oŒõZ‹VŠ Ð¶55*| j ,¡¶´½&ç©ájBܽ0,Oÿ›ËyÎPé8ŽÂã@Ï7ÇýuE`mݺõW}uüP_Ç‹õu¼hpÑ/å‚ÅùÌÌ «ŠsÇ“— ¹ÞÞîÛ®N\±*‚"È쎤SʲUê¶sͱÞÁ© ?~8öÒ®¶\hŒ/Ý齵郥FÀòûE¬é 5½P"}Âv€¾è2 ¨§hkºn³o5pÊžvÒÑŠ+bi·®¼É^ Úoßpɦ·íãÕ*PJXé_»º÷×ôI`½Ü©+Q¸±¤§Ir`Rznƒ™™™½{÷¦R)Ã0EI&“Gõø¬‹¥©©œöol ú•á©ÒÎ}§6.Ê¿qm:ÑÚ÷ö ©‰dùÖéÈ‘ã÷ïQ€±¼'¿ªþ¥ŒgöŒè~]þÕ{Šàé‘R¡¢ÀòÎÛkk auÔñZ‡w:/V.—+å&% C)ýdÿ°Q8b†ÌN›@Ô°ŸV±S©Z›a£i=ažŸS ˜œ1ç=â%auÆ-áo¤_Öйòµy<™›H­Ma4ô6•€ÉaÇÁ™œQ6ź€Ü™C`›zÊg©Ý5Y°Rµ¶´á eÐ,ÏÅ‹Åb]]]¾`¥*g”`ŽKu¥… Ü"Pü Š‚â⺸­‰06£NX˜ÒŠ„ )1«À²pI„l`QÜô:xå£R ìw;ÏðD7„œˆ:ôk¹‚54–ÍUl€^Ö™ø—ì>>õ•'Šs:‡òNg·]Ñði'‡f’3E P²ŸÚ3¬ñ†Ë{BûžöZy1Õ ¯Ô=}YLDqªº›ClÒýòêÓ!µi jEx¥ÌÖ‘"Þh®˜¦ èB.¶€cÓE×ô›rJúTË¡lÛ<; a%i]zÉšË/¿|Ùá}Šã°tKøšYš\p?zåoÏût#Ðä-[Ó#«ü=–…ÝÛN y ¬9–W©xÄœã8RJUU½áGç­ÀêÂ:ꨣŽ:ê8 ªÅ¹ëº…BÁ£W<Ö¼ûs[÷½¸_הÅöŽŽàÚ†àÌ8 l¼\½eûß»y¤I‹L¦îõ?ÿ$ÐÑh<Óß$Ígð2? à”NŒ‹¦¨øC!|> Óz;j$ZHi¾J±@óPUÅqßâ¿öm¡7ýöÈŒ™ •Ê+Öo Ýpµµ‘ .[%Ñ4n{ïUþìæ4 Í4È?ûÐU^ò<àíG- ü}ÁXWƒi»M ?~<™Ljš¶råÊ––)åñãÇOŸ>½{÷îáááóõ¼ÐáZÒÊDÚÖ,"ÔwÜvÃ÷>ùÎûNüõ;•P¦‰%ñ1àäHa߉ÂàX°€–ÖŽBÉþê?¿àJù÷ÿô” 7®LwuÅV´:EKì(”X^X[]UÇÙ0/gîõ;WÇ/®+å•y]×ܽ{7ÈGvÍÄâÀ[oïY¡–I3€Öó-ØT7¦:¼<´uC'°8 ÓG7¹k,­M>PµŠEÓZ MëæyO7Kf\ 5:¿ Õ³„¿ÀÎ/ëi¨}jµåªòh5Ÿ%žôÉ *¥¤!t#"˜›-X'vYíŒ>\LÖ+ˆw++°¤ÕÔÔ$„ð ÙÙ„ ¬²kaË”VóÓZ´M![h• ,³¬ÀÒË ,Ç‹?94GeJÐ4MaÛ¶ëºÕ¬WG`y¨_ÁꨣŽ:ê¨cAT‹ól6ûÌ3Ï<öØcO=õT¡PPUÕ3ïWq áÄÄD6—³lyäÄÈÊ+Ì*¸Á †â_{Ãþ+{Õm7†W­ÚÇ7ÎÈÃnr ÍdÒç)°‘(€n8ŽÒ¸QíþucýŸ* ëÇtÍ_~Ö2”hL çeQÉf„”"C, )e6 oo ÙÓ­z5iE%Í€´±ó͉`8x.ÅúB箕ò„îk.™|Y‡·lÙÒØØØÑÑ444øýþt:}øðáãÇ{Jó‹ÒšŽD#ؤë†Ö÷;"ÔêG Š@û’øD:ï|÷ÑÑ““¾ñr970^ºó‹OŸL}õŸ_x×§~ôo*ðÁëÆQô+;ÀÓ§ìr_S70 Îé*ø/¢N`ÕQGóq^Xétúرc–e¥ä=N.銛/OÜÍʺøŠ€ˆ,ñaEÕ°­5K#~iç7¹Û#°šýžK­Â©j›nci­å< ,ÛÌMçUUȪ«®Š¶˜uHÉÒÎ-í™ãɘÎNÛ@kk‹ð%4Uv6X®ËèKEGŠDØÑ¤¼ ¬y ¬ËåÛ¢Vww)¬8–¦/6ïàec‚‚@¨àT'<*ŠR QîV9EæY]<V^€@ eI»¥­½úVÉ0"> ³qMOÕ±ÈðÞ«&?ûÐ=i詼©à#T˜Zû®ÌŠk”øìÍWoèAh *VPïÃÍB˜r3ÔÐ.Š©ôPI×…ìÕó›V·ÿ|ßkßó¯þó ª"ÞÿöKä东‹i.py,×Û´zµÑ÷þÈÛ–:~@ZH¯¥±èªËâ— €Òº aÌX1§ RQ`©( J¤Ëv~‡ïìlÜk7àωjVUE ØÕ4h H·<ÖY,„YéÃh_-ÖõÖu…ôÆÍS`Ù8Ë{€#ýÓÀÐhù<—*tgU„U%°¼þÛ«³¾Npѵ¼NP_Ç‹õu¼hpÑ/eµ8÷ZDRJï‡h4*æ^D…ªªzÖ~ïÛ¶'''9²ÿ~àGÏL_±B ²èX^;Ó/Œl@yv[zËöÀ›Þª:NȯvwO¯<–,%“…€OŠeiÑà¥jHÛÒzß©¶ß䕎+ t¦ ,Ò:€HΈÄÐu¤Ä2ɤ"Qà‰'žPû–{C›¤7…Ð)–{¨ ­Ù$‡óÀ\Zpi‹LgÊ·]]=¦ ‹Å®¼òÊK/½tóæÍííí3˜ÏŸ·ÿゆ•4]bÑ€bhËÞ§„z¥q󲆩ºìЀ}|Ü—Ê:Í÷ÓçS§†ÓGRÀS{†‹–{ËŠ™å­%¡hW,Q€çú)+°|þ_¨üŠ:UGuœ‰'õž Þkccãßß7Y(¹Kºã€#œ  Þ|‹t2(ºð5iBUPJº°Ì5Kš€£~ìœÌ –²“GÇ}BИO`Å5×o¨™¢ªåfåįɱӮ$¢-.Eˆ¶¦r“ª3n½(¦!pÍeÝs²&¦r£) ´·· £D_c 8ý’´FàB¶vÄÍ'>yøŒDãÛûüÍ­TJ–`QVXs÷쇹B@u¤-= a *~@Glì–D‚D‡â‹»€/0S²4å)°š#6%®ìÉýææé%á’gµ«¼©Ђruá¿o¿æN·ÍüÑûÖùuÂ>h˜Àîƒc€÷÷v6–G`çX§‡¦%¢Ã0µÔÔ›¯]rÇ;/}Ë K…"4UùÚ§®Ó¶>÷à‹À'ÚO´süòî|kfDZ™KŒeWÊv@ø›cË>Úôå ïöcÞÀ`£Aä) ü³Ã•å«”uu³D…À ¡Gº`ú”ÜÐZb‘ùB¹y˜ÍÀª!°ÇYÑ”8scáoXÈB8ìL˜”µ`oWîú@ÿöõ)\UèqÒLy1U:rqgLÓ”‘ôáSÉÏ}äèðS>*•6¯eYž¾L×õrùRq?;.ú –× êëxq ¾Ž .ú¥¬çÞÐùÎÎÎ+¯¼rË–-«V­:sãêÕÙûuttôÅ_ôr¸ÿãgS?|jêº-@A–ÂE  ¾rRA¹ÌÐÑh|ñþ8 óC€]˜² þb¾ÌS¨À\Á—°]¼‰LЫµÁ¢D0$  K%™™¡¢ÀÚºu«/ÒèµK½ ¬²üÊ; æÌ«9u^ˆ{EbI›Æ&ó@(êŸpßøÁïí=<xBr]×W®\ÙÚÚ å~Ñ@ZYÀgh@"^¾-F\[ú@iÜäÓ™žNÚ.YSNO˜¹‚ýôþÌD2¿÷ÈÐ¥"øðMãB¿|©¦vªBÑÓð/¿ûsEÀú%A¼®úËu¼Æ!šÔ{6xWGMÓûGÓª"<ééHÁ-uŒ"Hhób'}B·4HËZ³¤88vÎÍžÜ5Ê›J×"³fÃ,C$4] Ûb:01£¹ÅÑWþAÆ'F¦˜Ò÷­ Fùð #f奨¨À¢U× §ÑƆŽg4 ­9‚P=´¸±ô¿$–˜.,–XˆM+ˆà—eÅjõ–íêÕ׃@¨èz¤Æ|Ô(°æf`a–-„^ˆûÖæ5­ßùÒ›÷ÿÝïüšâ‹º€’@¦¨Éâ¤âÞ±0Ác9Læf`U+ Ú öŒ›½+}èžyÿuYopdk(¼tl Ø´ª™\ +/‹ÏRtç)§Gf€N¿%§§Ö,iüô\þ×rãÿøŽþó[o»~)àX·F’wvŒ':rzŸ}èo¤•Q‹ãþYƒ¤ÇUÉb¹5'&âäðDmåGº{Õ_ÛîXÕ:ÒZ¸s¶Î»½=´4ÎaQ„NúI‚@T:gn)Œ8Š.­Ì™„ïræÜž™QèaÇœ˜Ÿÿ4–Ští'~è<¶cõ3ý¶23£²‹;cŽ+ÿõ,Ý=úó@ó@ù#—;Msžëü3° ë)XuÔQGuÔ±ªÅ¹§qƒ~¿?x—Ýy˜—ãžÎd–––»ùÞ§’{rñ†f à–Ê ¬PYEMÛ/‹ËZôçLýìXƒ4SØùáÑ©†ˆøK…rÁã•ÄÎKu\ÀÐe+™e‹´v Tt‚¡ÊS&™ ”X€q\§@%«ŒW§Àrç*°`I»üä¹äÕW_}É%—ì?2trhæ-ûÁß|k·[ÓLóæÒ\l ,;S´D8  ±Yóé ÙÇ‹»Oˆ¬]Zë\/ýtçŒ7Ì}Ç3ýÀçnÿê;—·yÆL=ó¯h-mõ§3pÂ1~‘¨XuÔQÇ|¸ç¯ÀÊ—\Ûv;[#>CŒáQ Õ“ù@Êž2Ÿ0LMXV[S¨1æá°Y IDAT›Î«Ã“E¬ìcÇÂ@pmZµ%A2€ªm1xß?÷üßÝûÊ?ÈÔÔ4Ð3š ;aµ…ËW¾ö¸•WE^UBo{¸lQ8:TÌ›Jȯx{Ûˆ.n2á´Æ .`–‡›ÔͰÐB-mê¶•Uë8—K¨>*«Z ¡êÈŠ…p«%¼r}G8hd™ÅP6.ª²4YqÚ”Ê{³¥:GÑVSa$l7' Ónú¨5økˆ¸Öà `Z°aU«ŒMåÝ3Ô;žüŠ3XƒãY Û°drV ÔÓõ\Š2›‘Î n†Zc«,ŽÉˆ}à+îäs€¬‰  l!ä ô3/tLĺªVe3Cèáî2ëÔ°|A—Aèa^k´òî ÖU¢œãî‘n58a=UÚK…À 8¹¦IÚÜ;œî]óÈÁM‡‹ÿî^ë/ÿÇòð½Ýåx¬g_ +OK—šo•ÀRUU×u×u«Š³W„zŠ{uÔQGuœÕâÜ#°üþùˆk1/Ç}|"44¶üŸï¶¯Oy“[,+§ÛÒÕUO'UI*(o@xC¯þöÑ6²0<8œjôÜ!fÜl¹„›«ÀÒ óXz‡¨*°A @U®tò‚¡rSÕ.8#;܉gª»õ,„ÎØãÎà½ÎÐýÎÈgè~gð^™9~®sçÌ'°–v€ã§3ºnøýþýGÛv¿øÍçOžžy.FV2§ÇÂóç_?QÜý¯Ù?XxFiܼ¼u¶ y|¸øð®ò9éN+Z²oZW9KŠ.5ÿu+2À?~ÿ€K÷=Û¹äøñs®È uë—„z¼z¯!œW–wãšÊXÀÒÆ?2G`†(ßóû„n©À¶O„µÀ‘vö‰ca ¾®‘TÉ” ¬ËG|>ÙŸôýÃÇ_ù?ÓøThŠùnÚÔôµwÞ¹õD»~H„e@wsŠ’WÀ>ô7ŸºþàçoZº­œž6€‹›¼8F´¯É¼$ÅM \X ,±å/逩¿-RU`ÃB¸€«l!ô¬r”³±X”fÆÍ·N†ÐCRѶPd6ˆP .k[;XÆæÓEÕ´e HÛ*°8Vf’Jí ÂZð*DXeþêõqô¦ž×ñZG}/Ô×ñ¢ÁE¿”Õâü•XórÜ»üÎgvíŸîl°ßº!åMnqs9À­(Çýsûd¡pèiñ5Æü»N©Ïœ ¹ùáþÑì’N?à“.p_þ±rI\K`9Ž8ªð+>¡T2°B"ШÆCÅJl¼G`™%ée`E£ÀÌÌŒ„¼ZRq-gð^7¹p=úÉJîèCUêÊ£±¬Ãw¹3Ïv6¤;ÏBH,i Ùù’;1žÌ± J…£ñP%°.ªy;;‘óš°Tu6€uÄ™FœI%q銮r) èÏ̤ó³bEˆÅM5ž¢£ß}ÕTHwzvG®¿PóYÀúy"“É|ò“Ÿ\¶lY0ŒÅb7ÝtÓøCï©ÚUÜ»wïÍ7ß …ššš>ðäóùê³Bˆ|>ÿþ÷¿?‘H455}êSŸ’R …;±±1øÃ®*144tçwF"‘Å‹ò“Ÿ<ßÜÜ:êXÒ<ÏßËÃkïLΔ€¾®²d48<‰Aº=! #€–X†0,½ü2`Ͳàà°69•:4â× VZ N@¯0Dšüñ-íŸþúTkÔž˜qŸJÎ?`sÚÙ±ûÉýï¯ßóãÞ;2Ôï=þø‹y`Å¢h÷Òu·Ý|ÙÖí1 hÙ@NOÇ""Ð&­Ìu+rk¯wŽ^:뛼þòžòÎõèâ¦òÖ¦EùßÜ"ªGu¡ J`ÕçL õ²ÃíΩÀ*w«Ü Ë–TWX®%¡à©d`iB…òtBY>oKûÕÃcþ}G§,Û\ŸæÊ,Ö.ÁH™sBôk ,M£;§û„ž±&A¢…¯é–Õé»?³öš]@Gs¸½) ÏwžMu:Y:}¦)³™y¯r¾HÀãQƒ q\-,íjÇ-jÇÍsÏ^j4P…²"ŒªÞÒ ˜•¯noa¼Á6óf È+P` g„¸—ßt!(›wrgíƒNùG“,J­L'S3Èeí¤1&‡YM<^®W–GË?øü¢ï’"Lé^{¦‹JUJ¥r¹\¡PH§Ó/{_QÎÀ:÷F ~Õ‡PÇÏõu¼8P_Ç‹ýRV‹óW®Àò.ͦi*ÂÍœcƒàŽm㺮 =(ùàË»š7+&‰™Xß½·ï·olþé‰å2?4:íl^AÒìX%i>WzÉT$ k-„Ž Ø >aÌúøÍÐ-—9½Á`9«§GQ¼Ô‹‚A$vJì ûЇvÄC;â¡Óñn¼ ,;/KÓ(†Úy«Ú~£Úy«’؈kÙGþÞ>únúHùt•¦dn; (°„îˆ[ÀÐxÖ²Ý#§‹ŠàúåI d–ÀRUÕçó¹®ûêf+_˜VfºJÖœ²kØ™&œi[5V]ýÛÞƒ—¯msçgMþ áÎþ.4aCöï®™–’ÉTùDÍ΃ú N`ý<ñû¿ÿû¶mïØ±cffæäÉ“ôGôõ¯}Þ6G޹ùæ›o»í¶'Nìß¿íÚµï{ßûj7øÐ‡>tÕUW?~Ü›ú•¯|åƒüàå—_~ôèÑ;wîܹó®»îªn|õÕWoÚ´iddä‘GéïïÿÜç>÷Ëøœu\ìpÏ'Ë»:çê8¿Ð諹Tîs³§˜«À2ËX&°¨=Œ¥µgö§\I×rSÑ¥êºP«À*[ëSÁÐÖ¥àñ]ƒóŽÁkÂüøÑ={_êÿgô×>ü i9¹‚õÓ½RyÛu‹E¸WíÞ®4nÚ²8÷©·øþðÚi  ¨/„|úºOë«>¢¯ÿÓï¶¶ %)¿ïõ—uWÀ×q|†ŒG¿ùÍ]Qá qªG7 ½&G)[Úú–¼ÌKƒ! Tpk•S5;žµR¶ @Hi»–)M×' …JBSu?–´íJm¤5# à E ]í¼UíÞ®vÞª-ý}µý ÜéÿôÞÈ9uµÿKnr€kÔ(°Ð"5<ž=:0m9rQcie[èšS^„1XV&Uò¶3KeÜ\ÖÍ.î„3ÝÛÓði€¯TG -išC ÅFø½µ“ÀHÊ¢ºæ·_.$Ák>øàÐÐw’H$Þüæ7¿ùÍož·Íç>÷¹}ìcúЇ¼_ï¼óÎT*U»Á† Þýîw _ùÊWn¾ùæ?ÿó?Ï{ÞãíóË_þòwÞù‘|ÄÛøÔ©SÞápøïþîï6oÞüñç8ÂT*5==}Ž ~ÉhhhˆÇã/¿]¿\Èó±zWÇÁ±<Ð×d*iäKvPñ¡…QVfù„‘Sïe@"¦²ÚÐdˆöØ€°½1s,„ØvVl\>õ»{îÄûÞ¶^'Üé½Òq'ŸG¨Ïv€4Üé,>Ý_2¼)6/ÊwwUšªqSé—Ùîô„DäU!¤ Â3…9¸@Scx:jN×-k.¿Jñ !»Úíw¿mº9bÛŽ:çð.(:N =J9êR%W€…3°æ B¥³M!ôÀ)¬B¸¶éù—Ž gÿ`cit¦Ë¶£å- 5ƽ¬›¿ùê ?zr䑃ð¦u)ƱCþlX&¦M+÷¦ÂˆK++”¨t’á{ocÕR5ÞßR•DÏÕ}À%Ë›ÿóácûŽL¼ë+kwS£Àšk!̸ :c29)zWŸ’©iì<•‹´X¹Ô®‹@kmã® ÒÓ@II©ˆœA`‰Înm`ÈôFFF€.â7N­ó]ȳÊ#½RQÚZ[ÏÝJõ`ˆBÜ«ògœ¢4ntFuFôȇÆÛ–y?¯,Ì’zŽê/+°–)‰+œ¢9õqPÁ¡'Ýoˆ¨)EËBQ˜ÌjÞaTKdŸòêéX,–ÏçmÛv]×qOŸ533sŽoûו«Ž:ꨣŽ:Î^qî æ{Ùš¡V•Íf¡ óû_»màØ^焯<¢ZÉ¥R+j¨šPmé|?÷°÷ȶ‰‰xr"ýß>üà“‡zZ´ý“]‹{b@x`@l\º³´È)fŒ9!î%«`€ëe†”}‚5­D¯ñVµNMDjb¿u]W-ë-Æ5èúãÅ]‡¬SiïöÁL»ù!@;k>®P»oSš·Xû¾€UV|{³ ¥……Xž'ch<[(ÙÀªöbwƒ Ϲ1ÓÓÓù|>+ÊÅ ý‘v6oG·FÉ4âL-ÓÎxƒ:jO¶ûšß÷߀C'Ëíá«–™ì3€%á¹e§¢y'¶)b©ÈÇ^Ìܰ©«¹³“_$.°{°×8V¯^ý‰O|ⳟýlçÙ—í¡‡úüç?_ûÈ»Þõ®ÿù?ÿgõ×·¾õ­ÕŸ×®]›ËåjY·n݉'¼Ÿ‹Åâ¿øÅû·ðâåj¬ bzzºÊy] ¨X ^EˆûÑÁ4°xhŸ“Ú/§&+(4¤Ò¸eö{Æút…0óÓy-™UqÂsÑ‹Ù)„ GZãZ[<·ªd:Úø“ÎèÃÕ=ç#W¼Ô_Ð4åC×O}éÆÿÉþ¢ pÛ¥3³º$ÕH3 ÒV ×ÁõD.Ð%uÝæ®êÇWTøÐïL/j))ªGuAèPZ@¢‚#ÅÓÔx]¬s½.‚…³d` EÇ5q̲…°RØŽ™w‹ÀÚEç©{ËaúŠÙ·•“…¶ôiêc¶#zšœ÷nb/v0°óšæ‡Ö ®]Ü;ïMõKÿ`Ÿø79ù Aœ€¿=S˜)Êétäôi:q½d?|÷šâ2À›ì[‹2%çX‹%{ª$t!ÛzÛ9ž®ÍqÇÎÉ‘~¢²¢+- £€œE­éè:–…ea[H‰?p授' ÇÖr™ÖeËõpä¥þƒ ŰyÒŽÅôñŽE¹hÑ¢…÷?¾2õŠ,„€Ò²¡³OYƒ×Íäõ©=ÙDhP¢йÙÝêq™ïD•îTývѧùK$`uôôöÆŽk^ç‹.0–ÕÍ«š×îUÌ­­­ÞäiÇH&“çú¶¯‡¸×QGuÔQÇÙáç^šÕyXã“) S %lì):SwÛáJwʼn`„f¯Î> ›°Tï>f Úªb”ŠMMùP‡SÔ|Maš4¯±‚k˜‡€´Rê`N–i pTÏ S1^xùÞ!ÏB85 ˆÈœ^¦¥5#ó9‹û„H© ­´\€À¾f„"­,ÒA¨…c¡ ,´pĞ'²#“9`U[Ñ›EÞ?:'’ÂS:uêĉ‹-êîî~ÍÓXV¶è4Z›dØ™ð›ò7Éüí[ã#Îä†ÊãíÍåûˆ+z3?;ÜZ,ÙKüsC!ÝK2QTbºóìÁlkïʦ†ù­ÜŸ/.°{°×8¾ýíoüã_ºtiooï–-[n¿ýöíÛ·ÏË0›œœloo¯}dÞ¯µä—'æš÷H:]¶æþÉŸüÉ¡C‡¾õ­o-_¾< ‹ÅÀÙ+óÐÐÐðª>Ù/ ÚñÔááUX'¦‹ µá‰USþ„@íz³7èăÝÒfCÜc~ ™Ó’y ŽOåK 6ßB¨ m²YYÙ^<0ìþ¥‘+Ô=€ÒrµPÀ ýKlçÉÍkÚ~ó ò¯rÞ9øuù¦ v5JxV) XZÙ§fI[àùÝþÛÛVoYÛ±mS—ýÿâîzNýõß}~`qK¡ìm´/< !E—€âCèHG:Bä²À ‡oî=§‹p6Ä}á´,¡ú¥kJ'cJ•vËS`ųM-rr¼}Ê®Z½¬ˆ̸ù¬›…}—/qŸ:¢þ¿·žöi’qd_0Õ™ØÓ<±6¼ð÷€ð7êõ׈Æëgîû|WŽŒÉ1®BfF™emqõ®1Ui=|*Y2o¦À|Ì¿èÚÙ²ih<+%>Sí[á?,O«>åæíÔhœý³— ÿYüå«÷zgú=¬š3½¨X9ÑØù6¤´³6~æ¦¯ŽØ“ÝcÖŠþR÷¸5Ú=ÛÜ…}A¿–/Ú=ñì —mÍ®‰œ˜³?E/ŸX•„æ$--™.Ö ¬×/^üýï¿T*:tèÙgŸý¾pï½÷þã?þcí6MMM###‹ÏšV ,ï;=_t—7ª€X¼Téî}É<¶\=x!‘Uø„áe`yfø†¨G`©S9 0"®Oø l„G¯«zgc±èLO-ø’yغuë°3ÁÖ¹2°ªðdáÇ‚ks¥5©Q=ÚØšK‚T"ËeiB–’ÂÕ©•_ ,ÚÌØ}˵¾ï_R4µ”ä@Ñ'º|æá¼`4sYìËÓÿ.H`Åb1UU³Ù¬išg˪÷.sµ9Yét: ½¬¬øµˆ‹ûëõƒú:^¨¯ãEƒ‹~)JvQÓdzjŠóQ`Ù¶-’4%¢¥I@Ø> ÅÞî'š“ JtËÒÕú0€åú¢NµEA˜š ¶½yMÛÇþ÷ôþ¾ã¹ßZ_ÈãbP–'H²gËHË.®6K`¹‡÷sx?€Y’ù< ‚Á²+›¡Få­£†$ÈBN€§À*JS -rÓGdi Du<Ô1Ìi¬”t+•’•Ã1A¢³úz@´ÇM``430’Ö´#¡`"d'sÚØT®­©¬< ƒªªvvv†Ãá¼æÃ°ì<Òõ:ú ñ¯Ù+(¿þµgrѨ\ÿBᑎr]*ûO8»ŸûàÖÄéÌ©Um…oüÆfy褽ÿgsv(4¡T,CR 9ó Ÿ)÷—À]ðù|ëׯÿûßÿý÷ç;ß™÷ìÞð†{î¹§ö‘o}ë[¯î …Bí÷×7¿ùÍW·Ÿ:ꘇrÖ+ûzðX¹¢»4®Êеê-Û÷_Ó­‚­ùfäàº]q·€xÔ§*¤‹êdFôˆ  ã8AõÆÕ»%v]h“ºvårøÙΓ€Ò°¾z5zjÏ0påúv[õ¶ÓŠàKw,¾qU¦¿ S­X”5EŽtµ:ȯT&°Å®«¹ º5GuáÀ;ÏŠÏûŒÂt(P/'í1|RUü¦tsá •(gvŠ.®cçdg,@Y²\*¢iÆq¬²sÐPW"ºÐLiYÒ¾é²æÿqë0Q@0”èP›Wé‹£ÊÂA]Â׸é£Îཽ…àéN÷?ûJH%¶5Ðã¬\¤ûj\„nÆÍw<Ã̰¶ä€]užM]>ënõ eQŽã©Ì]¶sPþƒ*Z77„G ÎIÇŸ‡2‹TðÜÏ À*ŸÅ5ëÕm7ªÛnT–¬D¾<ˆ –šŠ¼Â´¹JY9K`ùçÎ@\–´'œ¤‚Rwõû´ãÜ:MîDl…Ò¸ID– 0?.-д𫎌WþƒššMi– ¥Ûg§G2€¦iŠ¢8Žã èYÀRÅÛyäÈ‘×|±XGuÔQGÿeÄõ)*žWH`Y–uèÐ!EÈ“#žîF@'J0±¢óÞ­áCׯ‹fõÑ^OwµÞ§ ­Ym°¼¢Ø¶cþ¶Fÿ¾ã¹°_|ìRS*ʾuŽs§ZvpU}KËõÏÚK92D©ˆ¢àóWŸR·Ý¨,cŠ—€‘ÏS“Ÿ ö¼µ<³È—@] ÜFæŒ,Â"ílÙ?87ÉTháΘ<>•É™] ·9bc$%ʬVuË@ °eË–%K–477¥RéÜCi~iùáòˆžâøy¼Êʪ¦JˆÇ‹»V|¡ K#Îdï¨lú¥·ŸÞ¾ôE}–À5W»R•À’6 ÁÁ V¾e™À²5hÒ5\ Ûû˜–…лxÕ‡îdÞFJ½¼ŽNé¢p–ëº05aMî)‚™@¢1).Ãã(ŽcÙŠ#Ù±œX©…âNq…°Ä2À`³wÏL¯Õ]ݵÜûþ¸Õ==+$@pgΜîÚúVß®º¿úî÷û~MR“6aYöïjð…~G-Se´Ê ÛÕS¤ V¤Zf—%´k‹ˆ¤‡> €]¹ Îáñ‚¥U>^I¢%—Ï|€»¤À"Þf©^è³Ö6›&J"d5JFìVÎqp§ËKñH®š Ue.\SöuW´-jøæ÷Ïþù·OM§B„xœRªª*ç\<ï;Xâ„=ù´=ù4›ëv³²\ª@ :ÁUÌ^̲\眀2Ü{"“fžJ@rQ0ƒìÊY>7C|â ¨l,C(°£§Ì¤xNn*llP»PÉ™D÷{kºZœ¹¸°ÿÓ{è³}Îs-Ü\Ï`·:xàx`ÍU•‘úîÝ»ŸþùòÛ矾¿¿õfW]F¿õ­om¼qU¼lÞKä¦s€Þ Ü#˜r›ELYÉP¨Dá„Ø2‘LË‚¢D*P È=ÜcÊXQão)…Ð@§Ò}ïyíüO¿u¤~ÎsšP²w áï~tÀgŸØ.ö µûËD T|>ä‚] — ,XlÎH¤‚Ó/pÓdT›©œOä¦T`ºœZdhùüíííWß×Àü‚+·±+ €YK¿ ÙæšÝ@œC DmlÇ…™ýguÏXx¦NûðXqÛaGaúŒuæ4y?øè”ïÉ1ðV}ØrJ”$—ÔøÀÒ‰úƒÐ0.çNòqp`ýE&£)-oø½*€óæ!Z‘˜]P¾òŸN0Îéž-øn_a .ôùÀcßÀÓ±¨Ü0ñÌÓOí»ðáôDÐ…´×ÕÕûD›\jE w£6z¼ØÛCÎ[÷ÕäTn7€V3ØÓÔŸ%œãj•"ÚÛÛ"S“[ Œ‚ Ïš\Ï/#j+0kÏh–j{•vò£ˆ_Q© l§áíåmœ‚•¾•W«á ¹óóù €Dk‹Äà"j[»…qÄK–˜æÅúò+’$•#‘È©S§&''c±Xww·(c"î6•#˜¸·455MOOONNÖ×ׯyä[›º*«¸éQíÇÛÕ~¼mptåääd ¨©©Y½*¸’ "h[~¦L›àÅK_ õK.`bD®­­JºNŽœßßK\ȰLBam™ÒÄ¥ëš$4Iu–DpË"À;¿ôÙ;=.YÌ^› éRZj¤$«@®`æÊa„e€åé$‰ÔÔóø,€ "§5t œ«Àã 1åŒÔò3RëcX•á!च)Ø%ºÊ.ra±ŠÀ‚ämš‹*€}miP#lÍš®6MêþÛžûá«—ÿÿ¸»²¤•ËåÊf³Â3á}Ç™‹ñ×ÏÕ‚PE²§/}û7ûpÍ~/̳äi®Ç3jÐ+H+Y`ÌœX´«W›»ìͳéYÔ·ñd8ç– €ç¡(ÄMyÄÓȤC]Qg¦(./ò!k6›^ðP%°Þ|ô£ýßùÁÁAÃ0^}õÕ/~ñ‹ø‡ø~7ªŠ*– R7ãÌ#ưLÞòºåf/œù—¥àÊJ†B¤Ö[•LÓ€¢Ô„Ý@@$@xØÊBÒÅm[¤šÜ:´¯_ÿéÑKöÑKGÊ›m啕s‡“êEp2ÿ½@ü¸PS¿]% WËA¡ukçŽ¢Š®|»DŽa­éùXð!Kÿ{Všf¼*DWªD-ðb‘›âÙ yC|qžyª*}àgÊ{ÍXóš¤:/q·ÈõSVìRûƒ{—Z(°VXÄ]‹ü|:d–6ÚÙ[äEí†ÝÖ_Ä«XŒ;?˜²k«ápx```||<ŸÏ/..®G`‰‰è–––x<žÉdæçç…ýÄm€M]•UÜô¨öãíj?Þ6¸ ºr~~~nn.‰Ðå6´Œ±|>¤îY#8·²Xvàåé[BÈàà`4ýÆ|Àƒýé¥í]u°4)ªcU a%š¥ÚÅ ßö¦`kcpY†Lºäf>%$53S#lËÖ•IC“ °6ˆ|D?:-xï¹ólrh`Üàš€ÖÝåd®F)…б(&ºŠÀ’=ÍaQQÊÕS[U‰âßݪïÝŤžC¯›œŽi'ÎÆöm_ò‘ ¬›‚À²òÏŸÆ×^.·-}÷ÞË?Ó¹{½Íí¹—ìɧEíé£Wjj{©eó$ÑÄÚqkæ®9ií(æf½Ù¢žY@çiÇJŒ¸9ݺƒYç!ª¥Ïˆés˜ ºŒ\Ip~*7ÕÂ÷ŸùÌg~÷w·µµµ££ãOþäOþèþèÉ'Ÿ|¿UEKà›&°wÝîn Saß(É<¶ êÊ›—¨g+%÷hØÂA Àc k ,2Ö@WÍ¿þôžùÉÝÿò“»ñ±m-õ~O>±›AÉÇ}%µÂÁ11<Ã4(U¨Œ«âéÚ°W¶ð&€Ôòa¹ÿ×Ix»Ôô2ÝŠ9«’ÂÖÛ7àϬ= ÛK‘LÇ+XÔæ~ê h ­íÒ£Ó½ût™áùê2#Hk€pAÒX>f/ÎæB¥$]ë—·­éܲr)whÍ% 1}ÔßÉ ]˜³I–™<çðKPB¾ð‰A”ðDÓðøÈj÷=L÷Ý`רác@¤i€²k;ñ4BÞˆ`¢=}e R龇iϪ֮€`¸„ã»°'÷mŠÀ([™:ïF¢XÌë/Ù¯<dz™òö¢pa³\àsþÇ¿zrOðnÐeœë)°\î&©PQùµ/I?ó±7ìI§Z‹¶¸Qôôôô÷÷×ÖÖn>¾¡¡¡¯¯¥Èš–ªªΞ=›J¥ÖÛ¸Š*ª¨¢Š*niäóyMÓt]Ÿ˜˜˜™™¹|ùrÙk)ŸÏsÎ ¶jó5ì=„-wZÓ/Ž\ª\FmÆ_>2à=K>ßeVRXë+°šå:&KtÓa:„I”ë‘wàSƒò¥m°U"\®Zb¨ÌpQª<ö‰£;XNÐp¤²(Ӳ㋼¶r !‘ðâ"°†‹H^A`í¨!„Ù#¦laë„àgïëð›òò—þô' )Gr~óX,?=“VÜ¿ÇßYcžœ-¯]òw/¥òôpF#;¥¦‡Grýäs¼êãöb‡C`µ3Ÿ@1»ÈsÚ’CEŽ€tpì…«eªÌŠ„\,›h¿‘ÖÍõ öOÿøÇ?þñ¿ß­¨¢Šu! É&rK%í¦:ìà(°{gyýþ+œ<ßÖ}u6X"°ò’Cß;)„`¨pp‡Qth<Ó€¤r‘?h¢Z‚Àº¹R‰§‰xš@ »™ç¦°%±&¤PÔYsiænÙj7XyÀvqE!¦)[h—y: €+:ZĹ\ù?©kÀù3µÀicéeœD¢+ÌÖ o[ãdy€#ÏYÒN¾d[ñ)¸†.Äœ7ǬWe‰ÿêý‹ß íÙýÝ_¹ó;çN„5£F±ÊS¤¾I~â“Æ¹áÚ”&äw4X T…ä‚]$ž[H:{¤Î«l³ .7PrXË瀄ô«¡®òqç×ó¤TˆŒ±SǤC0¹µ`§dHõR@‹¼NÞ: ,§ÕF!ô õxÑÅùÖLBUYDµ“†´˜ÖkÃUU›ššššš®)‡½ÒúK ¬¥#K’¤¶¶6]×§§§Ïž={÷ÝwÓM–G­¢Š*ª¨¢Š[e·Çññq1NMM ÔÕÕiš@·ÜXœs&"´¯|¿©¾eèÿê[6‹vê||1]èlôt×-ÙDW-7ÏÐeÛK|Â"}MPP—âôX!V©E·  ž&Ñ”²’Àb–~ ⣚W‹|–â´¦¸Ü¦OÀ´Ì†;ATçFT@Ë@ÅLHÄã·) KH@MĹÁyƒ· °”U&î¶­:ÖJ¿jB°w ^Ø·_¤L`•æ°„ËrX¥„%ƒFn1K_…A©Sfå&S`Ub‰·òù7s=’P@8Ë,¾††·HMKMÇëw[Bãv8o—‘I)„ÎѼ><¯•ÿ“ÚzAžÍ¿U›v<•Þù Úõ¸Rzm„k[K%Öesjây—e“»»r…ššÏH|þ—O_ù‹?•x¤·,'k(¥[·p —Œ„‹^ÀºæÆ{<xQGùûÙ%ºR$áK ,Ç?>çĎ줓Z³9x‘6ë×S`QW€:Óúaþui¦íÑ *³4 Ó1­rûÍPÞe”+|;û‚ ¢ !cŒ1FtÕ–-[|>_±X¼=ÜÜ«£äíj?Þ¨öãmƒ[½+…Ë•ÇãáœË²‡mÛžššËåä-VçÜÒþìÛÁ§†Â?:œ\1‘ôÜ[W<´Û€x[ÅBâ®ã– À’HDÚÈ5 €G ˜/Æ+ŠŠ·ã¤R#Šf¾¼A‰ÀZ9×K꯮Àrú±ÑÎ^†Ï,Å9낪½àì"$q×YCå ¸í¾f4…„ЇOÍ€¥ØÕW÷ö÷>÷ă½D9BÜL ,®Ï,h.[Μjˆ˜RW–²Dy~zÙ Îx1±ye*–íltÏ]LÙŽ«!a¹ n…‚ÄÈf„”`gÏÁ$Î8È>"lŽi©‹© \𙮦Vq+áàÁƒWߍЛŒ×”BX°#Ai’Ào™$y•‹¨Le‰ÀŠ„Ï wˆp3 ,W`•Re'…pÝ-›B‰ÀÊ•X|I%—=°Š¥©*‘ç_}˜„ˆQÿf&°Êì ñù6s= +¢ÙKåí*×z¥¶Ç¥¶ÇÇ÷Ø €»Ü$rϤJã ‘·(’ãòyà)Ør\¯IÙPóÎ ,øƒT´¡ÈôÔj~¯:׿ùE=wå/€/| ˜s×|îÀÂ.3¾-vîPXûL¤€46Wì‹HNP%÷ÿ†²ãßÐÈÎwÞÎ5!+eX,ÓQ`m® ¡èÊ• ,·c!Ïg¦x)°ã±û¹ïóé‰ ËÓ«Åx`µ–ýZáÄ„5—bÙYGEß\c˜Žg7Óò5!XåÂXeùUi-ikk Bù[ÕQòö@µoTûñ¶Á-Ý•º®kš&ËòîÝ»Ãáð¾}ûvîÜI)M§Ó¦i VÎô`upnj‹9ùß=Ý`:ÁŸ8U¹òǯxd{­ÝOëï• ™`É$J¯bPƒ…Ê…Ô²D]N RÂL³`•BtÛ6HÒ2¿ˆÉKE@¼ëXN?–6 ]½lA`iKÖz’ïròQÃŽ„±¬¥Àñžçv‘=<¾8¯[Þ¹¥ÀØtšqžÍ7ÅrÓŸùH÷¿ÿ|»½£¯£µù#÷DY‚Šg¬"°¸‘·SVø_þÇO}驎F—m±àñ7uÛáÛc&»¥€' çr<™@ZÚ€sd9ž¹€(âïTÿ@øMqa:ö/1Km7Ru?ƒUQEïD áyö«°D`Ü—عaÞÔ<¾Ô Ä#R}Ò¶ò|šèÚ}ÛøéR˜È§'ØèHù-ݶ‹ÔÖ¯§À‚ìƒìu[y¿m¿™ùIj®³`ZT• Þ5Lǯ6º>$I¢”Ú¶Í£”®I`UºÂ744ŒŽŽf2™cÇŽÚÚÚl6›N§ßqª¨¢Š*¤R©ééi]×].×ÀÀÀ&ëQTñO étz||Üï÷»ÝnY–kkk¥MØ l333jkkÝn÷ž={ÄÂp8œH$‰D‰ÀraUpÎ-ík/Õ-æ$U&†ÅŸúÁ‹{šhdq×_OŒM§kž;Zæõµ‘RM笑vå¥kㆅÔ04#«ó¢S=†sÙâœp)È—·HŒÅ¬EaV $Zk„Ê”’º>3uUóâñ‘Žnäs´£s»m‰HE–%¦ßÞïZÃý–¨a®Ï j„È~ÜÈkU!”=`é°u¼|öv‚›¹ò&]-!ãÓéá‘…zå‹¿°7ÅÙB|¡¥Ö¥È$ŽÞðóàܸ³æ›åX¹Ë3úK#‡/{ZÃ…‡ ô1œ_¨h÷ܽÝO€b2áæMäÅÙ»Ú·F-Ö¥iýOÿæ~®öÞâFË¿ùtDü~³ByæGln·Å“\m½h d¼m&ã2ðbMì#²D-›DÚ9.r3 €{Ec^ФY¶]n¬_¯mDCî¹…\c­O–n`ž_5…°ŠëŒ[=½ l‚À:uêÔñãÇÇÆÆDØç¤Ú‚À’¬ìEY‰R¬ÚÅãwQ€W²o=ÿI0äpUJ€c‰ÀZz¤'µ „OO¸,0p–eZûuë~ƒÏN%–ä6ˆ£s.§F3 €(Ç«nÌRuBK’êD¹‰Xþo¸9,Z@`§7ئȋ²%XÛ¥¹“BXÆ âŒ/Ä˯Åÿ­F]ŸÒîOæhÝ5žVÅñ;º¥G—}\zô ÒÞŽ0¨Ü>´»À^½œ'>»¯/OƒýÎ.¢²ra«äW„ŽZzo,žXĵȯDW:)„03<àh£N<€$S<ðÄÀ/Íîé@µœÆóü¤B•Óоzçììi6v œÓöî5/xZ»Àé\6iòbØg5ycSÈ0õ.R±ÜÇ]|öz)„]]]Ø»wo[[›Ï磔rÎ ÃÀ­†ê(y{ Ú·:æææt]Ïår’$uvvú|¾|>îܹ÷»iU¼ܸKR×õ……JiWWWKK‹ËåJ¥RCCC©T*‹]¹råê‡(!‘H\ºtiqqQÌߤR©#GŽ;vŒsÞÚÚ .›D¬­­L&øýþ5ƒsnf¯$T?ÐÛÙäg•ßÿ^ËŸwì«ß<þÏ^ðÁ-“\RÓƒœi*L²8€àª<‰5 +d ¯Nœ4Î`f€!WÈ2Åæ³vɧҶHÒ¡2©©#u X‹ÛX³]DÍz(ä²Þ(œœµX)cnÙñ %rc6Á/•—_¦¹oçž[~j^°ò° P0§Z‘ýÊígŸfÞno H”LÅ´çßÏhÆ_ïÌû’ExÖýnî%ñwÌ8ËóS # ÓÚ/Ÿï=óã£1¶é׳K]Ý5>7m©Uï ýÎÏ7ÇÓÆ„1PSpNOuåÓý‹Wr,Lø[ã&'„6·€? ”ã,•pÞŸzûîº}7íÜí´†HÔß Ãri–/~›B—Ðv# °P%°ª¸î¸¥SЫ`b®ÆÛ5A IDATb}K×õL&3>>^A`¹¡°vî(»üwŽ×ÿˆ‚Ä\ÖÇ”ø”@%hI6¯9uX¦À"Áija¯Ä¬i4¾øâ¼ðôâñ9À!°ˆì)G¤ZÜŽ¦-´;Prņ£À2i‰À"ÒÍoâ^¡ÀÚ”-èÀRÉËíŠà À E|g¢Ž³y^ƒmÃã]Içy½ø|¬üZüï6C{îçÉE$úÎSWÂ>î»zÜA¿º˜ÒÁq¨WóDz–ã¢0¥a=K”Y|OX"“'À·YKt¥ËñÀ2ÒLãz6äÉXþ<Plé‹n hyå±\%ì®èÞ»å'>IAž\´ß|%‰Õ ‘]Ü5–M9+è}*êx:(mmq&§gÞÁé—±ŒÀ)„¥UkX„—Ë …z{{÷ïßïóùÜŠVu”¼=PíÇ[¦i&“IBÈÞ½{ï¹çž®®®h4ºwï^UUS©ÔìììÕQÅM†wINMMqÎ:;;ûúúöìÙ£ªj:>yòäÙ³g/_¾œH$8çù|~ããpÎGGG´µµÝsÏ=÷Þ{oKK‹{<ž®®•Ù|n·Ûïw":¿ß¿fpžÏe4I•IcïcoðÇ#ÿϼ_ýæñ©X6àfz4eà‹RÛGË»è¬ Û@7ÊÊ2€„ÄìEéb€­H´D#I Y\cŽ{·µn}à °f?ºˆªù(®i ìÂÉ­yÛ‰Z ¼‚Nšc¸\{k„;!–å$ùµ‘Ãs£Gx¥w–`ôl]Laê™4NTtKä5U‘šëý–͆/.ø«ï K²‚÷œÀ2¸ Jƒ¦­8[8ªó;[à~' òÿíÔdjÄC²WL‹ÿù÷§cÇ2 W8P_ãŸ4û9Ç7ž‰¿ºX3sI1‹‚9¡Á®U,ž »„³> rLN$8! !é¥ùÓ¿DJS¾v]OY1±$Ës„*¸mDBU«Š*ªx?àx`­#ÁbŒ†A)mkkkll<7a$³V$èbuYlK¾3{Ñ£¾‰®Þ—‚ö*m†L¨ Ëy¿G ¬O¼”õŽŒÁë“|tÙ^[·^œ@é&¾y8¼Àâ³( †!ûÊN“ÂTË«É2¤µsÙþ¶ Û¶Ê&îôH!$ ôèãÒ‡?ºy–-pðœ²_}Á‘ª£æÔˆ¹4¯h0Cf‹€Û6ÒÂke­ÉõXF¨§‚iÀçwX°ë9‚2ËtòdHxI[N”ˆjBiiã…y{öóìWyö’Ø€[ÂÂó=T`%¯M%àh¹)f½ÌøLÉ2Ùfp¹ (Þ@=VÌ²Õ ¬,øý „lÀ¯\@×!°@UÝ HÉ3a¯L$?õ—¯yÆ0/p#uMí¯„0šq|Ü,'²´œØw£ì ¡Þÿ­(ª¨¢Š[óóóœóh4 …”ÒŒ,˽½½FGGË5R«ø'Ž……Ah¶¶:Uü<Ïþýû;::EÓÈÈÈ©S§Nœ8±ÞœŠiš.\8qΩin·»»»Ûív«ªÚ××÷ÀÜwß}û÷ï_sÈkooïšÁùÄl–sÒV§J”üÖgîøÁùØo~„üê} _üxý—?ß÷Ÿ?9©úêˆwYf¢Î‹ŠÅå~ëAQô À\Å*Ë…‹BÆu^*ámTe][Õk…›¸² rÙaãRŠeÖLIðõfát–9‰À|ÞÂYP¾“¶ìE)@8Ç”_x&ý…˜Ÿ7–j‹[ynéæÓ’² €lë ŒJ;›—’ RÙâ•Ù<ÞóÉ3 €êVn’¥ÏS5@6 ÍC)ãÛšÎMèÃZó6ï«0_ûÎìx15Ì5Kç¾ùl€ãkß™ýÉét°Õf)Ç’?·÷?áÏŽH6–‚yE5]ŠlsjÚñˆ¤»hÜN ® nNÚ•a9Ã~æ(°Zo¤ƒ;ªVUT±§ .—«··w``௞™Oiv$èB]À1·ç…°ï¿×‡$²6{òÏ~K1|¦™ö_}â‡ös5þÂ]ç \’”Ïþš¨[W† °¼#c(Ýįá\âÎíÕˆM%–äµx™À²0Û iŒSBZÛWÂ4ÌÒ¹XTÓJä&N!„¬H÷=,|hó{èA/ÿÛ#ö³O³·6/~:jN–·1-pÎdÉ!ï,›gRXQ‚P@ø¸ –Pù|H>Ä®¯ü €™ÙC{[H°?K}mPó„(A€ÃÒÜbžùc{òi®™¿Î 1 ¤ÀzSÅW±É„e8eJ ,“X(úÝ„s”ŒØƒáFÞ¼©±–›¸£Â¯n/ÙŸ+*i]×Cª» À+AoV¢!ê'\®hÒvË,­K™ÙSëíxUT*°(®¦ÀZA`ÝŠ ¬*ª¨â}G<P__¿byCCC45MóòåËïG»ª¸¹‹ÅΜ9cÛvSSSY @Q”îîîƒîÛ·Ïï÷뺞J¥Kµú ‰DâÈ‘#333™L@ww7¥ËÀEU“5à÷ûC¡Ûí¦”®œ_‰å´7:ý®¾ºßúôöÿóƒs¿ñГw/Ú’¥Ñ•¥N!›™æU•ÎÎç’KI… ,@ mÐ nA–åtµ8yÞÙàìX78ö³¦ŸÕßcÖ4J“÷ÍrßöìKÆ"Dè^…¥}@gDpäÍÌèèù3C£9w»=£Ê½ ÆË'Ó÷B<”ëøˆæ©µUse©à`2Ðpô|t6€¶-=þX~§ã&U…ÈY–Ïó¥áíÄUCCŽkÒr$–U€¿õ™;¾þå~ì¡u¦E¯ªV×étúýnBï›!°Ê§©L@˜Ì•#‡³5c»³UÈÚÏ ºUV=Æ‹ÍåÓñîèÎ-µýç$›Û}}NÅÖ Öâ È©tÓ‚·“öZIïëžË¼s{%ñ8Ý­îÿÏrÿ¯›X–BH2ÊxÞ§’ÐJGnVɉCB±J¡¾]ô{M^±îšîô¥ºP"žíôPñ¨9UÞÆ2‹¸,‹ˆ‡_¾ÀN–;¸(©ŠøôDùµøÏ†OÚ?}ïÎk5¨ßQ`™fêЭîè̇Ü6Üu°mëþ‡³ä@"^¸˜ ÙGC°òÖ…ÿjϾÀ’§ð^)°ˆË €ÏÍâZX¢+]Ä@çÅ25cÅÓ¡’—„/À«u•lè¹$–§ ,‘dJ»zE ÚÞ‰õ©"âïJz#/…½@ÉðÂå&àõ~ ÀÌ•‹›>$°J&XΪÕUWãÖ%°ª£äíj?ÞºÞC”ÒÚÚÚÕý¸eËJéììl&“Ñ4íÍ7ß}Ð?}pJšµ— Gøekºì‘iED‘ʳ‘sìÌI++ú)„ÙLùµøÏΞf§ Ñw^‚p ƒB%nš©Îæ`Cƒú¡þ´I%¢Ùð vám>;Í“‹HèÐåùYÔ×&où<ñwðâ¢=ù4Kï‘–“B(²ù6M`‰®¬¡A“Ö\¹ç´=¿p®UáßO€œOÀ´4_9…1äs „Ù¥t`'Ö7À*Œu=ªSŠ2åv¨w›&&gÁ¯P®De áfLÜWàÖ%°ª£äíj?Þº°,‹s®ªª,Ë«ûÑëõ¶¶¶r·‡‡OŸ>],S©ÔôôôøøøðððáÇϜ9344T,çççc±Øj¢J¸N:õÖ[o¥Rï<Ϻ/^œ˜˜8|øpÕc~=܈KR FÀFùP¡PèÎ;ïܶm[OO€Õj"lÞ²eK4D6᛾Ö Î'æm-KS‰Do3ì7ÒÄUC|­+ŽS45ö&ãX¡´²LAdÄìÅ\1 €Ê–$LÜ¡³"€,Ë˶HQ|'Öšýè"ŠðÀšL~ê¹TCÂÀbÓΗm0ÇòÂ0xNƒ¬ˆÐ”6·xâeÍŸw-UA/Jn€À.p;€У¼Â V>`KGÄïU;šƒwlkðy”x²ˆ{ÐKÜtn0aËŒæ/dBF‹wœ.0+&êiŸ Y*þïÿôxCƒûÊ×Ó§Ãm€9Õµµ¡à©¡€@»MÛ§SS+©k¨|®ñŽÕß6P/E<›ó9ý­çôÃåmŠÜˆÛ  ËrDî"õq™››;tèÐ¥K—®ãD79vîÜù~7¡Šw Æ8ºƒ%FâÌ(þFU–„ƒn®À<’Ànuë.µo½ã·n9ð}¼Ki©?v¾ñÂ,:†@¨>af|4Ô·öïGºë ;öÖîáÌ·ï¿^<µÇµöTØê3Áâ<'d!DëR6Ï‘ö.6XÙÇQ¤Ê©4€|Ð €‚|q)I¦i•&‘”"@j¯§€è†b“×£ @6ê!<1_° oN(rcÊŠ·ËhQÀ]nÒÙ#Ý÷py_ºe`ÅÑhïVÇ)L¼^¾¥œÐëâ:)„F À®ÊÃZÎå÷ö/`'~Êm‹ë t5>^˜@< ª¼åWÙÜ+eå ®û£½Ž =[V|?›èÊ©À˜5 Dý¦ÍÙ 3{›Ø¨äß_ô»09«!>êHÁ¹žçðùQJU ÛÙñÃë`•R› @˜Qr4ërÁwqŽ|0w…øWZÏn×jâ¾¢ЭH`UGÉÛÕ~|÷Èd2©Tª½}Uæþ †x*æÙköcWW—¦i‰D@8noo×uÝ4ÍD"Q(!º®>|˜1ç©Øårutt´´8NC œsBH±XÞ»w¯Çã‰Çãœóºº:!¤êëëóx6›`Ç…dŒ1&ZUÅj܈KRtñƃ‘ÏFˆêF•X‘¸ð.³Fp>€ÎÖeq) Øù42Xš!ªh¥`òæT,Â'˲¥æ æxÌ^Ô I­8å ¬,ÏÉìXköã¹ý¬WÐz~NXèðÆ’ìÓÆ€k>Çuo2 ÎI$*¢ ÒÒ†‹çv\.¥`ÌL/ò¥o„@öÀʳâ"`‚¶¶¤q\Áð„à¾;ZÏ~ï³¼·g_hŽ’LÞÆ V`‰¯±Aª³¦EV¦ÉÍí±v•`>e¼T7€ÉX¡ù„çšQžM·4øùs}ÿ÷Ÿ·¥@› àÕ× ìüñÛ')€C¶öЛ0ã0­¤ve&5 @VHcs}1 Á2R,SÞfÖ^àà-rý¬µç:sRo}‹sþä“O~å+_ùô§?}ã>¥Š*ª¸îØL ák§b.ÿäþ"A/̃Y¸dGQBW ™e¸»·5´þ¢EÔ§<ÓŸ|1c}çÂåðÖßcÒÚ…uIsiï’'Æî:o¼¶ór‚eD1§Á“ãlìRù-íé#-íxr‘XV2(]iT* ¬ÊR†&Lr* ö€?€e–a'vQó6R³ò^«C% €!\Ùô¸Òù“soè.g5'K/€ÇK»ûнÑC:º¥Žî—\G@P¤2Sðø#v³eÄÔzvù"Ÿ™`Ÿ: ËB'8­s]XMˆÚ»A [·Á½Rç;t¨—¢DȯꥨBä;µ,)°J–éóÙ`žù¨géJ¬0À =[‰/°²pÁ*ÔQgÆX(°„Îk›«`$æb™ R‰Àb™‹ewÏ«bY !€ ÖæMÜoE«Š*þ‰Ã0 UU3™ÌÐÐл¤¼cVb=×!±jçÎÃÃú®ïر£ìò.êĆqâÄ ]×½^o Èf³ù|þÒ¥Kuuuâ¾$ ¶úúú‰Äüüü‘#G÷`ddD¼8zôhOOOmmíÈÈHSSSmíºÂäB¡péÒ%ñ飣£eÖ¬Š÷b6eƒŸJ%Ün·$I†a˜¦Yþ͆ÁSåª,ØU±FpÎ̉„  £u™µ(­Ý/XZ{×êãF“7×AB™fƒ³Š‘ Wø[ Ÿ,Ɇ0q×XÞ)Z}ýêµÈõwÕÜüP°W¤©…ÏN7&ÌYkáŒ1 €ƒš“;ET­Ò탧ôs1–Ø©ö6é.vâˆ7[X´Sµ’#X#’‡[y"\P‹ðôïÖé–9‹mÀ¦!’%Ùü[öì‹Í¾ŽË©ZÜàØ#Ï ¢R°L`¹2R÷b½Íøùîl6ÏZ[¤t’» zÓ§Ã;Ì;lŒŠ¤‡4ÿ¿u'õyÉæj€È x_pÀ}ýö¿Åi ä¶V&°êVå´ 9s+$©ž.•äʲœÅm™HD È©Fcù4Ó B·ë«_ýjCCç>õ©*UE·6N!Ìçu‹iëÕãS[Ú#"~ f¢@`qÏæ’°v©}³ö»<ÝIùÎ Xæù׫wG6à¤{î³&Æ>0d¾¶C½`ŒßãÞµÔà‘söKÏ,múЇ%A`ÅçÄ"òl\~  \‚€à„KyÐyŽ–$Ø67 VšDrk6n)Ö&¡ÀãÒXØîOcjvØ©ö—F­©q'Z4HîëfÉyÝàñ2 F@g$yX®{íe ùlâ˜å*+Xïk£ß!"Gh@L……¨ßKÜ vj1XŠ­ýNš€XPc>²¶–Y–ùÈUçH£RH†dÁŽˆB¯”î‹Fânž¹ˆæ€•³Ç¿Mwýþ&ÏeY áò»Íæ=°ªU«¨â–€asssr¹\,óx<†aX–µZ®ò Rµ‡U,•U5[TUݵk—¦iuuuâ ÃÃà SSSÝÝÝÂ`‹RWWרØ8<<œJ¥cÁ`Ð4M]×}>ŸßïÅb###—.]bŒ …ÖØØØì쬢(ªªjšfF0lii­&µ¼—ؤ« ¯×+ÍP©¾Íõ’_a­àÜ,dfS %hk\f9Dg/69ŠZ –Å‹Ü`àY–«)„ëaod¿‰€$IÄúækš·¾›)Ç{sb{B0°†r/OÙñ´W[¼—æ¹oä zfœ8ÒØô׏ìS·¥ÒYh0—ǾXüµ8¿mjê<ü๠«Xú€–°yrÚÂ{¢ÀŠÐ xmF×Xˆp<ýF¢7²pêÐ9€»‚…îÚí¤€L€GV;?T8÷MŸ_QP“[[:Cõ7ï¥ãQÏ=w¹vÄ¢2Wˆü˜÷~ÂǃËu_[Õ¼÷„-—>Çæ¦gÆ5vám(J9Û‘nÙ€I®Çp X宀õ·ÈõA'F,««ÄO7˜g•îЄk™—½ãî«~4i–ë½Ä-Â)B|þ-„ÆU3;!l°Xbˆâ<·Y’5Rÿix`UGÉÛÕ~Ü c333ÓÓÓÇ››ãœçóyA^ëºþÞKŠ*Xô#¥t½,?¯×[___“DäôôôÜÜÜåË—cápXQJéàààý÷ßðàÁ;î¸ã®»îÚ±cǾ}û¶mÛ¶}ûvI’c”RMÓæççóù|>Ÿ7MÓ¶íéééb±(Ò ÈF£ƒƒƒ¢ÁUÖz¸—ä5)°PÊ%Ìçóå%בÀr‚ó Žàí‘Y‹¡1ÌTåä]–¡cEÁ H(˱ǔã¦@Q+¢ Ç‹s À‹Y–—m ¤ÌºV¬×¤T’ööÓî- ¤1aŸ/\ .šH,ø©oöÇú›gŒK“Ö\ž\Dmj iö›…!áþcý áã ¤÷n‡,[þΧ£þŸ„àòD蘟Ð6s:ˆiš7ŽJ®$°ŠÜ§–|i*÷Ôë‰'ï^øåÏ'%…¨õ™{¼ÛI „’í¬J”¶tÅ «!¨@¤A¾wOË_ü»Gd³ °c@zôqÒÞ%Ôô tua%©¡»öÒ®-V8—Ÿ¿æY@Ÿ¢ƒáV÷ÀÒuýñ¿ñollzWÅm‰ƒ¾ßM¨âÝbc̶MÛæÉ¬Å8¾ùƒ³"ž"h°)3É.]àSW€å ,›‹Ëÿmø—–½÷ùýÙL ʲ‹Ò•8¶æ§‰¯%Ž`‰S’oSŽ6Ë,egºÍX’$ɲlY–eYkµn6TGÉÛ·S?2Æc7â:¿rÅ)û Ãá0¥´¡¡AÓ´l6+Êùåóy¿ß¿ñq®/* ¬ëÒ¡P(§R©²Ãz]ݲgBq»²,±¤¾¾Þï÷çóyÃ0.\¸pöìÙr«êëëMÓ ƒ[·n-‹¦i644²ŒÂ9[ï¾Ù·nÄ%ùXXnƒu}XwÔ #fœ3¼rtÀßþ`À=[®íÇ`YE`Óò(áeš5RH!rŽëŠÅ¹"b§”Æ$›x1ËK&îÒ†Qý:X·e.7ŠºûN¨.;’“©é;´ÚÀWÿLýͤ5·°8´°ç#ÞC-R‹¨ÇsËQ2»9¯<ê¹Ç{Q?r¸8üs4ìtm®ûh‘뇌‘W0þx>Gž>’»)dÚŒMîR`š¦˜HÛ .šÏé‡;åæx¯þ+-°Â‰­¾¨‘üjˆ”äÿþìBMî½ç{~xþ'O‡#AÖ%· ˜€l€JÙÃ;,xZmuûˆ;¬ŽÂßüû©Š$&ÅUºÙúƒH§H8ºñ/!@}âÒyÑKÜy^(Û`9 ,)$>9QÚð½òÀº! ¬ßþíßþÄ'>q÷ÝWŸ×­Y _þò—+‰ØáááÊâš•«*_§Óéááá5WUP=BõW=BešýŠ#œ>}šsžÈZ‚äº0 ì.@–D\DÝ|\† MòºW 3iͽʯ¥ý÷2Y7»_{›OO,­2‹¦ãñDUÖYeŠ Éz$ÀñJ§ÓgG΢dâ˜ÐSçÌ19“3ôt:í˜IÃÃ`Ô¹¹«š YÉz õææà!.»®@[ܼãIöìÓÆûêïW IDAT?~±À‹î"0½°xž…åó`Œ…aø@ÿÿÙ{ïø8®ûÜû9gÊö†Þ H°SIS¢¨F™’#3¶Üí8®7‰u;¾N³×¹yíDŽËÍ›b§8ŽËµã.Ùr‰$K–(‰"EŠ`‚‰Ftlß~ÎûÇì.@•µßÿ³3³{03gžy~ÏoãöpË–ôÖÄç§ÍëéÎ;_9ÞdìÍ1Í5e ËáS乆ò¬{øÂÀ*±òÍž{÷ï·e©œ»ª,ÛEܧOŸVN¼j=õk;  o<<í†fµö†JK #žêæFœ%º°ðñ<¿ûnÙ¶PÙgÃ0í}°¬³gÏμ{îxøðD[œ7š…5Öp× (JkkkggçáÇ_~ùåsçνð ½½½öQ9ÿ}°×F)/////—$©±±±¡¡Áívwvv666ÚºUGGǶubò[æ?***ÊÊʪªªÖ®]{ñâÅë®ÁívwttTTT8NÆ!D–eÆX®ÖÒëõWTT$Å~ñ¨v UßðD;¿X,ƨ@dP˜Ö3ÖŸëB¸°£)ýÑŸwlßc7P–*jÜójbÿ1VûòÙ–DˆëãöWÞj¥·8Z6È¿ë}èΞ–X,f÷%t%õÒVé­ž½[äfƒ›Ò#öšõåâÓ§Oo‘›÷¹v5:[L €ô8€hïa4´¥:¨H¤'ªóüÇzOÖÏ_0zóú ^+V.Å_asSw©aª¡ôèÛÖù¤ºý%zù#¾ñ»ƒ‰ò'±÷„ðdŒIÔîK­õª÷MÞy4Z;l¦™jôì([É•°"ºlÖÌŸâOƒïûXàÝ; d¿±1+ „fXÿø­ÿðä/6YÆÁ¢AÜÿö³ŸýìË_þòsÏ=—“«íÇ×Ù<–)P ÀÀ8þôß)Á¿òê߆Ãá“'O¶÷*ÏŸ¶¶µdbÿî.ùÖ²‹8ˆdZ(úôßç¿­/ž}Áèûxàwü}ì;k¥UöÏ3ýé·ÜGî}@¸ï ö‹æ÷þ“9!¾ó¤¼Âø‡GIY…ô±O°~õ¸uð¹Çïò½Úâü›…Û#úQ—Í‘ÏF¿æ$;Q2ù—ÿiÄÈ“¶ÿaï}¬ý´ù¯ ÛogG_Þø¶§{î»t^+¥}2ÿϸ²øqä—©“‡œ:h¬Vj;Û¿eÕîUßèÞs›cý±ŸiïÑ”ðú7 wÝ£ws*—~üÿU]Ä ø¡PÊoù¬8€už¥µõp¹­_[ý¿¸Pq·P÷ðÝç9sFïúçø÷|,ðîiúöñÁóÎþ§Ábñäüö~÷]æcÿÅŽ¦ë6’² ºn#™w ¾ùÃo³“¯¾_®{é ÿ£÷ŽüñÛ뉧Öêù‰ý[ißüLX`ŒÝu×]—†Ì¯>1ÞX%?²¿ÀÑ£G“ÉäöíÛgöe?~<nݺõ†ä@(°r‰D"“ &có9²8篾új2™¬­­]³fÍ´Ë\ºt©»»»¾¾ÞG_2ÆÇÇO:U\\¼yóæë/½øŒŽŽêº^QQA)=sæÌØØ˜ÃáØµk×Õw€/¾ø¢išwÞyçʲ®\:¤ªê®]»ò´P¥ÓéW^yÅáp²²²ÒÒR;mãÆSLyyÂÕ9f0=ÂF^éˆuµ•ühóS/w¿áÎÕ«‚‘÷oߨðþÏ^wá¿<÷ÕûZtrö(?y~àÿü8õW¿·æCo½7ú³o¹7Äî-;w½çŒ¿ý4O%¤¿øœáu}tü <”zðpÀ“¯óÔïû€ÝþÜWÿ´á²Æ?üˆ£aóñï±W wÜ#¼áÍù|„産?H=}—óÖwy0¹õGãG@þ¹äÏŸUŽü$õì;øš;.$¾F©åc¹·,ž¼³ð§¿O|âÏ>ûìü[-X¡œ>}ºÐ[zE3ó¹Æ~ 20¦ï¹uÕ¾k›ý¢~ì'°€8¸<;¹Ý–b,á$2Û½53ÒîûÎŽ^Içñ‰G:0teÛ‡’+äº@—HÒI%TIƒ1Pj— º³–?Å$—Ã8N–6Ö¯_üøñ\<üì 1XÓ²C9Û ,—ËE)Õ4mddd||Üãñ̳„´†ž³&Ÿ|¼æ³GÎu‡ü¯ß½µQxÉ0!ή×2tL©¼6D’pÓD6‚S68€) Eˆ®&Y2`·<òÎ%J(Ïq¤-›ì r0f:Ps¦ÿ]›wIÖ0¼ÞiÕ+ÄàJšÇcÄãm”jªÅ²½a˜¡Àä%KihœQ#]èÂjÀô˜?üYùfS¤UŽYå¸sC «×‹ÁM:îÐÚ™ð®W7¢ÀSG¯Û¶ †î>u@Ùž;*¶ÜšyOI)R Þ×-­ßLx•L¯ª@’¥¸ €94 €äÌ ŠpïƒÂm·#︧àa ã,ÊÁ‹…õS€˜Ý|åf`uuuÕ××Oy1;7-x¬n~ì$Ë+û0¥×èAhWb;—|߆L×c°&8©®2×쪒+ êC~–»¤æðfïúKa–˜Tó¨g,âòdºÎ1J¡iT™p‚”ƒøÆÓ)âõ™Ü $Ù®žô ¨¶®uR€˜‡Š $Õµ$Ê´Î=×ÖÔìX +'Á³?ou´Üêø4npÅ@±"*×Ý–i–ÚXÿŒÒu‡iº$ @X’×`zíƒ×K®ÿÈq’Êb!X%”ŠDÌYÌ®†º½–@ÜüÌ€Ç"H ¸`{ãõhôê:†Ü\íFAe¡þíæ¹a‘Ó3ô?šŒËåÒ4mxx˜ÈxÍX…«äÍÁJÇió’Âá0€mÛ¶M69Ú6¨òòòS§N ‚N§ÛÛÛwìØqu¾i‰D"‘H$'WÙÑWuuu3Üüçê­f÷‘æÍä ¬å6Ž‚ lÞ¼ùZÕ7ö>e1†r¶X„—Ë•J¥A°,ëôéÓöj®g‘“„ò»˜\ú…ŸZ¯tw~ãE­w0!‰tuu€÷¥Ù X¦€Jùå7Ù:—iØ,7YÜjÀ  {ªþ%ˆD‹+\C2éÔ9w»áÊ·­ÓdòGR]g7À•4;vx×S8pu$ùÄ[üA><ÈãQRY `“´æ%ßPÑ%k×YEÜxÅsMuŸñ8«¬$j²ï%¼÷²°å~#ž²0˹7uä'`¥¹êL9!b}d´f»”—´õ°b¯Ù\_ÇNƒªºá¡·äÞB×m´z.²öSâúÍ‘tnøS™SD(ÁF™ ÍT‡ÎGæO‘‚˜Í´Ð•°8€Q+  ”†ø& X+7‹_EîÅßVeH®qlÊ îÉd2N«:ïèUÊŠ2—%®0D?ònÊ›#D}:Þ>s€‹ÌԅІÜç`Å'¢|l‘dP ·œs%dºjrS ƒeÂjê×ö=}ù/%Ø'ú¸‡ D@üé‘?ßóa²z°g/]Ý+»! s»ß(æ|<’@„ˆñá|Ä «YÖò°¬ºUOìöv–gÚÇ3͉³Œ8WL ŽÜPRÏ„~ïSÁºgh˜@ˆæ‘ 祊€Ç£XPËnwØäT‰ô†¥”NÕPo=nÄg~{ŽU«VèííåÌ›%ä)`Ù÷Þ¶ª¾‚(\%oVÄ8Z–59ŒÉ&•Jiš&Ëò´%º^¯÷öÛoß±cG0Ôu½³³sæM؆††N:500`ÏöGFF‰„Ãᨬœ&‹ ‡Ûí&„,}#Âɬe8޲,_K4,4"œÅÊÉZgžx<žššš]»vy<»Û¦ yªÀSà©>®…‰V=ÌKïüÍi‹sòƒ£!ÆycmP)Ì$H³°˜©flü=A¶ !€z±êÍž{ëy)LÑ¿D[ÀBœ¥ü-™cñàÆQ¸{  ¡âk.ç`­G¬ž±^xf³Q™(âð•ÔNYö\uÕ3AJ×àjE²Ö’n÷< ìÙ+ìÙK×n¸Ö2´¹Å^Fس—”WòÑá?üñxEÄ@BSe¯2!à¸Ð À¶ï8¸ÎÊüf"maFÖsêÑ¿Œ|åñÔs¹WÆ£ÆG»ë˜Ž´‘œùƒ(\ P ìNާHï`@‹¨Ú¡õÂÖÛ¦Úß²&,ëàs{_[Ió*™vòn•éZ€b¤D –@0×þR¢,‘°h€ƒHUbYšp°ô<Ÿ_Γ¥8w¼¦˜ÒT¸ÀŠÃ.!´Ì©çeÆX:&„ëˆ EŽL•W$ìj&a֧Ž®A꣠ûÝwçù–€èOº)8çYÏ„¸KÈ9°’I¹ ¬r¡81¹„[EñÌÓ‰â˜éO2dJ§;%J28zú¥î~ ˜“üF1Ÿã‘Bj’2€½;#`9–£€à-žûì–|ïõ>T%¬¤œ²<™íPÒÍ·`'_ÍXíÓçñð)V žhï™x¢H'n©y®) 1Ël, Û“…ü,ÕÕÕ¢(F"‘¶¶¶•rSW¸JÞ¬ˆq´ Îy[[[<WUµ­­-BòIg¯¬¬,**2 £³³óÔ©S­­­‡J§Ó”R]×)¥6lسgÏwÞy÷Ýw·´´‡Ãº®‡B¡æææ|ö°¶¶–244¤iÚ¹sçcº®www···wttÌóã_‹ÉêVÄ8æ(X3°àC9Û¬«EqóæÍUUUy.ÿï?>õퟷˆ~å¾É´ÈOOQ_#ãü[?=à-»E¬"Î"+]ášh§°ç?›í÷Ì}Áä)÷vã#,\jKBs°æ6Ž$T$ìÛ/ìÛOjW]s™º{aß~é|Œ—úÃi_ŠAìG¶“Ù$7ísíZhàLd'9*«ðéñ´ ‹:uêÈ‘#vË‹Éh\gé~±4ëH8?¯RR×Ñåõd4 KšÔa¤‹^ÖÔ9uºi›°g/½ýî«ßEo}°g/mjàOY.sÐÕCžWúy cÑ1P*džŒ6ˆUŒF€ƒÍ¢²rά¼‡–9»wï¾Ñ»P`^ðLw‘©¶t:Í9—d‡añ"á½?88ãÊ@b\€Ù_æe"ý¶ûî;œ[s½Õ®KHðÇ<ru;Ëv`ùkD˜q`¡L(J9…ÜëÌœ€Uµ%„Óí¿$M.›ö%%9°æs<’`€ò$f±LÂeéÀ@A?ìóÛ<÷ßæX£÷eQ˜íPÒ†5Äàã£ìàsfÕy]²,æ­Õ´_Ÿøà€¼,vêsC(\åèíííííEÞ÷ ¢(nܸÑ.tºpáBþ½®’7+bsJ‡išÇ?räÈÈȈ õõõy†ò¬]»V„ÑÑÑx”ss`MRZR’W1ç8Þ>üù¯éŒÿÙc—ûÀÙAÇSÏ~ÿ©ŽöKãn—kmcå;n‹Àv`q – B!Îbb¦0M²ç¿y;q2yíF6MÃ0Q¾zÑ@ÄŠ—ÌϵD‡¤Ë-Üq·ý# ]œb~í+¾˜ÔbFã3ž2èº>>>žJ¥®nC¡s@b’€M3ß?:üįÀfJ/zöˆ(ÐxÚÚ¹™“GÇ™@x¬ ¯ß/ìÛ?íKÊ*„}ûé¶íÊÃ&áÜt9¬€€HÐÔ$몛»Ya‡^YÛU×®åƒsJ—óÇ÷×}®7z/– ”ÒM·`:°°-ˆœ.ÑB°"M:.…-–Þe¬ë¤þäeÁ'[w5'|öGÏ~á›GlÚØ’æEïÞö9yM…›)€ÑÌâ/Yáªdצ‰ù;°¦+!œ.KdœsvCJçݺfŒë ¹J­Éão ÜoÄ’Ö«jSSÓæÍ›)¥¦iZ¹€0€Æ q>Q-MgÆèÿý±'<64Ã^±´`lÿ0ÓðØ×ïª`:}½¿qê¶uåu5Õq“UÌ?Ø3FI&Á¢—ÏFÁR¸&Ùõùg!ÙnMó ÖTý+ۅЗæƒ›—¼,{þ\ÃI·lgm'HÝê–Ò]²+™e T„ EgßûÍØŸþ~ ‡Ã¡(Цi“OúU%„㪀žÔé+§‡¼¯îZ›Kh@,©W6‰E+œ¬*Ñ¢.Ù}½8q{ø€»½B €#¡0Õ6¿[ÛÕ¡wç~¶©JœÄ¡±DWÞ¹»À2ge¥ ¸{^dSO@¶€51Ô„t°6vÀÓ¼»Gí@…¥È‡ªJTŸÝ¡£·w5{RÎ:°0 0f Ä!¹jÅò¤Ëv`¥ˆ±&RåaSV F‘r‘i,Ûs$›\6ðZÊÀ †ðXWÒÈ\;é˜?sJRR–‹{ u ¼C/ŸÂš‚¾qüà.¿øñï<ñå_›F³*!@€˜êTÊêêêJKg÷ð¶¡¡A„H$ÒÑÑqøðáÖÖÖ)OD—…«äÍÁŠGû‰”}^]]=õ !dëÖ­ùô¶—$iãÆsØD …B9K×bÊ­Ü ¬B á Ìv(¹³Ÿ±ŸáztÚ&;°¸2È“ÁQ:l=; `ç¦JŸ®ڳŸ­.]é6ܲ­èÑ?¾$"ù>pû×£ÜL ’÷g©ç¾•øyŸ9“¯'Gš«‚Å‘+ Ì{É)¬)~|;ËâeQ‡ýj)Iñ·ß.êo…{öͰŒ•úê:J|–(pT5LÀáp઎„¶Ëà¦Â5ÀnÎç¹c£[¥àèÙ±6—`š¦QWUCIæ^lUHxóÝ“âü=1PÀÔXZœy'÷OG©f1ÅtBÀ" õb¥fï,I#‚«À³²Ò \=-r]u޳k¼ÏtÅl©IÓ²;ˆà0jENIÝ%c&æêÀš-+ƒ Àñ¡ÈÅRºLjèÍ:°t€&qÖŠ²7DÔdÄ ˆÑ€hUqQïhi”ί\$…¼tºÇË™ ,d¾›e\Cw5ó:!<Uçu¿X<–Û©•x}ð(ì®;*Ÿ;ÜÿÓ_ô<}Ä:âœÖžà_윀e3Ÿ›2‡Ã±nݺX,¦ëz8ŽÅb½½½v‹ÃåÆrÊscEŒãBYò¯¶[» !„Â9çœ/F¡ßÊÍÀ*8°f`¶Ciõ>ÆÂÇðô€Øø»Ó,0ÉÅ"§­þ_@pТmbûfUµw5]ýѧvø­=«ë*ýö‹­í#þäý· ÿèÇXãpÊü=5á_ïu}æÁ;+t/¦pËFÚx¦¡èe‘cZû!íÔmŽõö½yæM+\“l+Uþ¬+K¹%MãÀ’L^1nÑ^Ò¢ IDATK*ò]ùU,·C’z¼‹Ðk*e£O ¼ØáOW—{í¦“šv…jcg`ˆ³”KppmTƒów÷•ŽœîoÀѳ×Îq×uEtQ€›qW¬.î>ÖãPW¬‡ƒþëî*™$`Ÿ_ð™€?ijÜÐÔ*ÏËW2I´šìÀÐ Ukä8niKP©Q° (pŒMSBÈ9·Ãe^>5`KBC[h`€‹êɾdÿ´ˆyfÓ e>¬)Ú·â‘_¦_ $S;€¤dQðˆ±RI®Ù îÄM\ë€K< ÇRåÁ¢±4I§xüåŸ ýÏé7–°Xf¾²¢¬ù@¼>ˆ"Ò):WX&c;ÕÓlÇžÏÐx·ï ç8Öãο ¡ýÜnž¦‚²²2Û`‹ÅZ[[{{{‹‹‹}>ßJLº)P`AX¹µr‹*`­Ü ¬‚k¡`ñs,|‚œ±ñc¼ü.âÚ½îŠ ,#–ÆF3_-Ù>Ÿ­ÿà¿ÏýëNOÿõ#·H«fÇ¥°(ÒMÅØ†‹pP@‡‰ßŽvÜ^¦q#79'Žbž¼dÌ´{½Q–iÉÝeô_wÓI–öš³ëBH$‰Ü02Ì´,;ÄÝâk{utÆ¢¼•…×SÂ0À]·}‚~m8"§ªË½¶kŠ€U¬D÷&Sˆúœ%¸2 âtÊtͦ&÷‘¶îtZ5ÝÎ+Dë©'øå>ºi›æpº™(ð¬j(í´[Òcòëï«ÃÁDJM@ðøíðÓ@ÒJs%©D8]×7ÒÎôUP·“8T®á*kµX“u`-EÖÊ»¤(P`Q™6Ä]Ó4˲$IîêOø]VC‰A³Wú8Op3 ˜K¹áö—𧬟§_x1vÀ˜z<õ›ÇS¿ù)Ž"ãÀÒ¨qQ€ÁMœ)­qα-èÍ7ß5Ïé¹ ,;5൓BH Îy, U€åŸhP`©°ku= 7}óÞÌ<ø­ï¬!§.»tm–aê zW***cÇŽ;xð`¦E¯=V®€µ¨V£Â×2žJX/<“ûÇ®/‚¬x¸euÿ€PµO¨¸àfïcW?C™üwÂõØ«=nÜÀêû)Ìy]Vž9˜é™ûø¯ÏiºàäÁ3¦ÅÖ9RâW…e‘Uå˜ ÂáָʵÜäœ8J°ñc,r ‘¼+#`¥øõ¯¼Ÿ}ˆû¤ ,Æ`Y tŠ‹ˆ"‡Î›{u¤yc7o$Y[“cífÎ%¥>Ààh ×(!¬NEö‡“ûÃÉàÀ«ï‰øÀQ—S Ëþÿ¹¿È´xëÙaÃdlÒœ‡uœa]çXÛIætðˆiâ,]]’y¸* 'óp`0œ™›É„? ”`ƒÖ×.Ç|}¥YÝj² Àj©Z'cs1àÏ–‚«À‹Åò J(°l±O§œ3–e…Ãá±±1ûP·›ªê.ƒÑ2, ÀÍE S¿øJÓâ>×®"a xÉ+÷¹võ[#íì' é”­¹h2\Ä ÖQ—‰SãCÉ~g<ÀøH‘ÀûzÀwí ƒedvϬ–ó<I0ÄÇGy4\°n8ËîÔêñð*,ÍÕ†ûµÃ?ÃÚ†à{ßµæÅ—†¤3“Û§>Ìž‰7B466š¦™H$4M;uêT}}½=¿,**²,ëìÙ³œsI’LÓ¤”ʲ\__ …z/¦gÙ e9±"Æqå*5‹j5Ê}-ÃVøpüä䞉k¥UõâìBè—’°øè°ùíåáñ‰—t]¨ªY¨õ/%×?$-•[*‘ƒ,|œ«ÃÄY.TÜf²ÑCp?˜Æâç­áBõƒsÛÏÞÁø…”_´jdãl ÿýÒ¥7Ý»¦õð9[½*D ¦AjK8 8À}i¦Á°B@ƒëÁÍÜÚˆ¿9¦ ¨Î ƒ›™i*¶âͳ.!œ”5m‚{vm·Óœ:×ÊŠåÀܯ§ËíÔ:Q— U Õ^ÀÐx À´%„”>¸BJþøõåca+äËLs6®)j©KÿÉ—ŒÇ”g¿ö¶\)†°ž‹Âm‚.…H†!¼Ökœò{†ËáHªDoøœ¯Â_T/9l…Í1ßBŠ!Ôgã*–‡¸¨àÔ¨1zÍžŽ ÇÊ»¤XæôööÞè](0/ìk¤ièÏœ9344ÇŒFM[jâ­Ï-Ÿ`)N& KåÀ"^q¤´7»î¾“nPê*{³çÞ;[%šKçöÅ@—¨ƒdGèn€ÑDŸ3®0>R”s`][ÀE"2ˆ@È,žY-æ{<‹°W³öÓHAÀºq,·S«=¥ó(,ÍU=¨Ú©~îcwxW]“àȹÙ9°ìRž¼W•eyÓ¦M;wîôûýŠ¢´··wuuuuu=zôøñ㪪jš–L&UUM§ÓÑhÔ.‘^–ÛP˜+bW®€µ¨¬\ áAõø[/ÛömûßýÂblq¡ Â}-Ö³ÿÍÃ㤺Nس—¶lÀÃ3%L/g®{Hrmܼðup“·*î 8H ô©ÉD“3°Îö(mƒ®³ýœ–Ý€§æ¼ŸÏ¾Ò `·?ù®²0€ïÿw€“ýi·ì^/òsâ›Þ‰ªŤ< SÙ$–·^¨ÝŸû—ð”[`>êöP7ò0aÍÅ%‰`˜¸¡crìlAP5j›7仿éXv§V[À"„x¼dõµnÀÐØ„ë*Ëê Kÿñ‹’{§’Û/ ·†|ðÖ»KF“šnõ'3oH§ìÜ^nè—ÄrO ‚³ÎϾýþîÿûÁnLòªÿ0݉Šz| TõÈ”ñsáS.À¼“@Ji¹2ÄÝÆ-ø„ñiÞ¶ÐX˜M›6Ýè](0/lG«Ý„Þn¯¨¨°ëqþŸ¯°µ&Mܵ¹å3–e;°–HÀ¥Äëã‰8O&쓾í“òQ€´[t¦  Ð$’°¸Û…ˆIÔ(:¸¬«jHÃaÏ^ûgië¼–۩Õ~\GÜ^P*¬Ùlµý¤"xK`æñ¾ŒaêÕ¶á¢b!ä“Ô‡ÛÎUܶ¦Úù¿?¸ZUµËÃ1  YûSv‚xÚjöiDpR"ݾ& ¥3ërX®¬Dåõ€ßÄ(‰EeÝNA™WB%B€Ÿz¯ÞŸzâfAÀ*P À’39+'`…B!‹ñç ÃNp÷LXî¡ñ½SþáËÀl ÉóÇçG"Žx,')OX )xd€&gVÀ\^ KHª €¸\$¸J¨½~¥—$è&.-•B·< Í-“ÚØ4ÃÂ^SOÆuÙPâöÀMœek Ǻç³{O–eyË–-¹ÿ655¥Ói¯=±Ë.€BW¯7)+WÀZVœ§†¬qq½Ûû }U;{V¿˜äË:2oáKÇÇÀÎ-*™xå&âìÅñGûî`%¿<J2¿Â&>Ë<¨Ë[¤†r¡øê_Äb)#:ÏMäCAÀ*P Àp„Y˾ÙëìŽ$ÓzMH/ö1âžHˆ¨;?vÏ¡$ºtúñ8úy"Æ3,uˆÙ>¡ðM&Nd,Ù ¦Â²fp2 ?%@VXÖü!µõBmýÞ‹Ë;KeÖ€õð—£”•ûÍá¸ØÕ]SÐ~1üü«}yû–VfOÊ— ³¥t²z…BW¯75+WÀZVŹ‘‚ðP€$[ÖÖ-vZ¨Ãiß럒Œt š:ÿ¬œåï^¸ôÿÕšûoÛ ëw¾Þðæ{jÞZš.+r ’Ó9°rXÑðØÉ>€#á$÷I~nĹ%rè?=£jæ{~k½ß›W…×Ù®qݰZFq‹ JÖÂ~ôô9= ¬a«§‡úš Ž€â^… scòä|2¶€¤>Ê(€ÔŒÀç€Ã"À¬BÜEü|o^Ÿu`½fÚ¤®^|×l×9@ÀÄêàdçèùžHIÈBc†aH’Àà¦ÄÙÉ>·ýöcíÃÅ!¾µÊ IQÊ…‹š¯º;^)MQ2ƒ•s`ED€TÚô8EÊ0 !)?ц»Ý ‰ÚÊ-.³€²ˆY±’Òy~ bõÇïžöW©È,¦Z‘RaqCEWÞ%­À2祗^ºÑ»P`^ØyRÉ„ªª¦iʲlŸ‘[Û‡ÜR—&® ÐlQàŽ«Èº ž½¤¡qévÔçÀNågIà&.‚-`±áAšDs,§;@Š&‡"‘æ{ñæ’˜ýa…]³ ÇãMÃrJâöð¤YØŠR?‰ˆ•n[•B6æ£o(ñÞOýêß|Ê0g² d2°·¯fQӲ܆²ÀÜXãhÿa“Uùn³¬1@z2µ?^âB~}Ün ûµØf«\;fBBÅX±&¬k’=ao¸³ážxäš ëܰóóßü__|>£J>0“SÞ˜ËÀzáX¯Å ‹ñÇúá,ÀÕQM·þú_=úõ#';GòÜɳ]ãZJRX¬c;îJUe‹q[B 7Ã\ ÿèÔ“qJîj^…MîB8…ˆü¶›â3õ€ ³8æ"`IXçYöê¡k9°åvj%ݸfýeRMHß³9®ëÖûþòÉ;Þû½±¨IU„: ®‘³ƒNJ¹+ˆxR?{!"„,F «òôº<²%¶‹1Ñ@×5"8r&g*ì$’×wîò°<ùŒ””¨·Jb!Åó°f€P'ãÏ*Gþ.úÍ£ZÛâm« `X`vïÞ}£w¡À¼°'v¿ß¶_y<»é±³Ã¶Õ*Ä=Ñž&Í•`’vîöí§«›—l?‰?€9Áε€ì@/u']¶,‰+3°ˆË  8fPT$ùúŸœìVš«p<Þ4,»¡”e.‰²É%“È…nÁùÐæ€ønëW¿âw>ù«‘pz<ªüêÅ‹3¬ìÚ –^ÀZvCY`N¬ˆqÌÓÅXüÜäÖf7œE=0íÕÆy ÀŽæ[y*a½ðLèà±½GSÁÈblq¡X`+< €MÜÓÚbÖ Íq¿Ö!y¾' à£ï¹åãû¢ë«Ôüíݼ1Tp¾p¬ÿëŸÆ„+>å¹ ¬çZG¬*¥ž;ÒKœ¥ Žö %ìÜØ3òÍýië°¾,£“Òr¼qƒ]ч-µ™yªÀOJ|E¾¾´¥qqÎÝÉheG›Þ5y…‘l a> ¬˜%Ͷ„°a ½õuXg;7 D^ħ¹ËüÔÊáð;ÆK+ýɤb G4L°4nô\– ‹”ÖZ Û!P Ñ5‹Š=RVàËÖðX)¯LHn„é°,g‘½€×¿ªbºª½« y+¸|™…m«¥×¤'Á¢ÅíC%888; »d^¾`ô-Þ¦ V®€e;õN+`ݲ*MüÅOÜEþæß¿éc?ýÞoF€i2°l9p"à/ß]àù£}*Í8°z3š×™óc|ø?ßðá¯u^è™y2¬a«¼qëyûW[Zc’ Ííh÷úýþ …«\çVéÐÀšO*/O^a4âžq`Í\BhÅC¶p!èê&ñ·ß‡“ð±`6î­›ÛUJÌ·´èÞu;6V„ã&&Å`é\ïìv‰ù»w·üùëÖÖ•9B>€hªD¶Û¤j«J”Eð-!4Ó’€H[À‚;£Cm)ݳI^“×îÕÔ {ö ÛïÈü¿¤€K1Ò²ú®•8çàv;·.Þ¦ X ¸~¥€eçÅ„cj÷@Ì-óµå õL8°â,]‘d¸©kê®~ÝGÝg«¤Ëëv†äÆg£Ã—Íç„Ë  $nPœÄ“·+×0˜È¯ÝkvS<~‹7è’!!+`‰ò×õ7mzBðî×=ð‘Ç^9=øåo½êvŠïm./vOYÕ ¬pZzVKF®j†e¸‘°½W\WåíÙõX±½§REßå#C¤¬‚C¬³Ý•64®O<÷Zf,´k )*é2úÿ=ñXŒ%ît+o»¹¬®¾XiP¼{Éð`ïxbcÔ*íìÑZ.ï}Ý–?¼ù?=ÓÚ>b˜ì­ï#ÜLMÉe·¿çƒ'Ǭ±T»GŶu8Þ1òݬ¬WGº/gäÎg÷(š àD[oóšk¶²?×&ëêT4x»Õq±¥*ÝT)¦ÂJI­ÁùjEàãCé–xªÅ2êñZ€Oa×9w¨ÒW F²Xã$ŠüJE‹³l»$´±™=ÅÛN¯­ ¬©˜ðSËÓœúæçÞùØ3ç_zå®t`µž÷”‡$û/é#ïhpA—*9Ž9LëIv¤¬ Gì 7Ö•"aÀßÓËÞU>À-ª¶LF}Ö0@¾gfRV)ìÛ?ñ_NT))_°/aÚM .¨«jÅŠÅÛVÁU`9}úôÞ…ó¶C§S©d2 Àãñô'¾ð£œcSµ"ŠÒ%„é°Sç†,äˆ¾Øøˆ@‚§h\0ÉåH2i‘wä|î9ÕJ»fŽÇ›†e8”Äãð!áþúÞT%dŠP\Ä¥Q”ûO¾Ó'?´ã/>¸£®Òÿ–½Mþá»­~ýÈ_}õåiVà5“µ ‡²ÀX㘗KËÍéËÈ|´!î·´'ö¿”ÄÈ)¯?üGv‘”?Å—s ÖBg`H†ÜÿNŒ%êÄʱ €…—‘/¦=$;{Âwnöß·ÍÓu±;j•ˆGãÝ—ÃáðŸ½ۑgœïZ‚œqãŠ,û{þÁSçüñ}#ƒï­þõ‰á”N';°lõ À™®™j /õÇͬ J NhY†àM·›‹Ó ¸äÇ$ñ ÕÁˆ(T ev³OšiÜ`œCV¤ØÄß'ŸÔ…0Û…`ú¿Þ1+:nÅìBjZÀ¬]T´y=ÖÓ,nÖ2?µR÷:eEæ¸p÷f9ž¶¤Òé0¡i­]U%™û…ú*ñö  aÕZ2gO+‡“*€Á¡0 ƒ§’/«ÁÎ2ËëÓYV¦„Èþ9ï°]E8ù‡Å‚:ø `‘íW(8° ,8uuu×_¨ÀÀ4Mιt½«Ž=/*ó¹ÂG¿ñòýªÀ¶Úõ­•‡¬±“úy±±óëÕçœo_Ö…ÃOÝ, @ÍX™l;°€uþõ^1ïg9Ýj¥ X…ãñ¦a9¥Û €¤Ó;·M¼Fœ%Nƹ¥!£kèáMn—àÿ>Ñö«/>´ïîíµW¬Êq¿ ÖÒ XËq( Ìž1Žùd`q=Óëê  È<L~¹—uuN¬mó­$8ÑËÖÅ6\P˜·îrí{ˆx|ðøx–dé"˜ÏÎ/ ¬ë…Çò\6¹µQ^óˆÿmÿYü@D\asW’.ök»Ì@;zµ nåÅ.9qÂåòvƪ‹]'OBÀ=·ÿæØxo,ØàMÂHdÝd ŒÃãê¦Zó q"îÞ^yëúòcg‡?ò_uõÐHÏ@ !¯¶‹3Dm]cÖ— –ƒ„J ˆ€¹ý¨0´»b”¨ˈì!^•é–ʘSÅ•)W)–6¸é!.™HžLÖô%„íÆÅï%Ÿˆ Zç„Ù:ŸIs ¹I ‹9^æ§VÜ`]þ…èêÄŠ·ûËÅÎm@éà@¿Ã[ñëCÝm#ƒªA7×gκZ\‘E Ü¤Ðâ6¡¹ßPZàÆ<1q|ÇŽ‡Ë¼vœ©; ¡‘´ìv@ÈõΚ¤¤Œ÷÷Àb— nFü¶v[òԚܤ `X`ezÕcÆÉ“'›››¯+`q Ô“®q÷qΫ««ã)ã±g΂Þ+¼a]ŒïpH=õ”r@KD û½3¯s)ñQ/€K"ëÀrGæwî‰Â%»ˆ"ï‹÷а ÇãMÃ2Jâöà©+Y{¨S¥$Àš(d¨¯òòC;ø=òßýç‘ÇŸ=?EÀ¢7NÀZú ¬e8”æÀŠÇü¬Hö‡›ÇÅ:ÎX¿y2÷_>6"><ÑúÝþZ<ª5Rå­yø]™W½>¾´¿†‡e9°‚»¦ñd¢ôŒtºî  ›Ë_Çh›OÁ² äíR_t]·,«o8Õ\_2í@ W%‘ž½09_æ%†åT]™À×9¨gipç¯cÁ¸»Ä²F4}ßë‹*ÄΣÁ n&'Ï mK3Ø'î%„9àSÞùÏ<ùòâöyÇl][v¼cD Ü⤽WcœÓkhCmƬ/Ñ€ø@‘K8†*ýão¹z'åTÔå nI%%Õ``\VÜ4¸)¹úAÁ ›5ý_o”%8ã¦3S?8k  „Hy×µÜO­.7º€­¸=׋.h.H©ìG¿îü—œ°—j©Î>º)ƒÇF@ù;^LÿcÜJ=Bâå³|×Þ‡€@ Ê=)»„Tëß9Ïý%%¥Ù»„Ð @dæB|Ž9Šo[…Ân~4MkmmM$ùLz8ê`„€WWW777÷—íŠfÞ³£ö“{;×Wª4¸@x cïÑÔûßÔáà.²¨?|Ô ÎÒ Ìà&µ/óàœ”¼ãššÂ34«[Ñ•&`(°ˆØҩɯ¹‰S±å(kš$Ž×m®p¡/:íú^#%„ ,yu!Գǣ±Œ¬ù:°â1tíza÷½vâ¨õÜSÖ Ïð~–ÁL„Yý['’4íšh¯Â“×ð°,PpçÑqJÐàé-¼d5¶¹ÖÇ|aüòø¹ùobÎ(ŠrñâkÇÆÆ:tøðáË—N?ÿüógΜ Öäo"©oxä±õoúæ3/2±,Æ·¬ñÙEäEv.ï|²éDosl÷îÝ ÖT9;Gœp¥ Ñ´CÜ9¹£! ÁÁ`ûÆŠßxç¶z®t$¢‚ïl°µN© I•w_ŽàW]ÐbIí‡OŸpKy Ī„ +Tmr:ÜÄ €Õb)²–¾4Ó¸G檚3aÅX@€zdXÓg`ÅXÀZ©¾Œû9¥°SÛ„…•÷4w!.úŽÍPÓÝÈ Xœ“C'ÜuoÉïí«*–x¢CÀ Aà‘8NkîÍX_uË2ΑˆÑÙ§H¤¬Š€–)!\¶+â›{b^.€S¹_Úâ"çX Ü䨪züøqUU‘ß\вÌRO ÀªU« “}ë‰6Ú‡¥Wq§¹ZÞÞÿúW’@¦sJ v.ÁÀ IDATT½˜Ÿ`vä2°ÔŒýjâ*K&‰VÄ5‹Ð.âpLù¡@ÄíÀSS,•RÜR¯~ÝXp©?Æùå ö]Ù ±`¬71y9°´l áMäÀB"€n¿ƒ¶lâJš;l=óKÐõîRnX†ª‹Hl\;ñ—›SâÒxÚHa¹^êð|Åc1‰jå¯z“Åæ°)}^Xý^)°Î ;?t¼ºlýü·274MëééÑu}íÚµ„±±±¶¶6ÆX8aJñ¹…±±1MÓžy©½¼¬ø¶Mµ£££Š¢üúPÏöfù ;*^·ÞÇ8Þ¸ïöÞÞÞá¡AåŽah!îê nœÖ/¼Ëû`mmí¥K—JƒÒc"€)XºnX[ãò9-➈f/8?ò[ÁßûJ @E±ç޶僻ã鮟|ü‡5ƒ1©­k¬ºÚuBïÜéØ8ymÿçÛÇÂ1u×–ªÝµG9@œ%°Ã%'@ 2â•ËÜÄÑiô ÁLõ€ƒ¥0ͥ󬀕æj>Q–D¶ °‡ºbÊAôYl©ë>×ö ¼ÄÂÿ†4€nÛa_¹s¿_‹È2 m‰˜Ñ36×Ë­q¸Âéó£’H?ð?Jww=ÿJê6MíçnqhÔǨ’¼ ¹aêt×íÎíï{ô¼ u³*(¾2üÿ³÷žáq\çù÷}¦loX,zH°÷^LJ"%J²EK¶lY–cI‘Ç%JüƱåŠåÄ-‰c;‰cÙŽmÙ–[Q/I‰%6°$@T Êîb ¶ïl™rÞ³¨A‚$H€Úß…KZîΜ9³ggæÌ=÷óïþµ•Ðp4­Ï7-üºtþÿ_ 5™ ªdÔÛüñ6±{._y ;ù¤R)õÅÀÀÀÀÀ€£-±Ÿ¾â®)µýÅK~ýÒ±5óÌ~¿_fc±XT6Fd™.Ÿ_¸yU¥V«›ÓjªÖÂb{Äå40‘}Rë(­éó9ù®£W蜼¼â“щ„ÓÒŒI°$YQ/eªCÈh‹3=º~`g“ã®U,€  Xx³yí9Kø½äñÛõkôöG¿ð­=’¬üå§—Í­²§Ï¥ìáºÏÆÝ°âCDü„Z-šr®p¡¦f6_žÏæ2š,oKš|·h‚‡êczf(„Pu`©#£OÈ)AI.ðï {µÔ}䦯0N­z"QƒPc®‘%/xÕÄnXZ¬(î50èt즭X wȶ¦œ,Ì+9ùD×reàüN}ÛóÆÚ…Æ5¹e%ç=¨UÃñf œðѤSìÀš¾?ß,Y²\=ÑhÀ‚ z{{q7i’$¥!IjàòÆüزûˆÆ àœÐµ=¢P–™ò‚¬W„BS„Madw‘0F‡^V£U•?V;ÃXY²Lª»¡QnÑõ3€l RüµªsãG޾ð†eáÇSìkŸˆla–›˜K‡*iHq0< ¤8•b„Ÿâ<)—ÇU˜ŠBcQBLÃå{.è¥e(!@G)·•Íìì“Î<{"ÔW°«Ö;)(¹‘§¥‹r•ç+¥±^Þ» €k].0 e÷‚°¬c•â«S¢lá"Å~éhªñÆ XåååÑh4 zCÒ/wx¶­¯üÖ_n,È5üò¥_H̳ñ=ÞÔÏ_ïß¾±ð7;‹ç<þ±E›V”jx@ðþá€;óÖUúûøIjoâxœ&>yT\ÖÐ à¤Ü„Š{ }$ÎÏá6üëœmËb?ø&t»"óý½_¼Ç"Ét¾½°¡_mÐ-Ù¬[€è ]?ðèÆ°fÅ_ëÖ-s¢·Ï‹¾ÝŒGÿò}hGËNµlä¿pÿò¿ýÁûprËšò¿yx%$:€ÛÀß®_Ë€ä*~øX“³­P¿@›;ôU¨9°–´§€5À’sÉßo”Ìó!Õ¥†0½¡°ü>(1%N@,ŒR˜ÖÖ @oÀP¶4Âsµ†t:«‘]·¤8!ŸËf‹…Ýø¡1«VG*'ëgËT€ûáß(–Æ+|þ“KöóˆnºŠèB8#v`e¬,Y²LJi*•"„ †ËœôôôôPE ŠVÀ© Xh¬ªzQâÔ×Ï(ùÓ­B GX=Ñ&h*(Gpk¸á¤BW3Ε%ËÔAìp< NC“Ñv Œ.© X¡F„/\«Jï ;Fçq¿q)°2ކ¬€•å¦ä’!„4(ÑØÀh¨G:Œé!`]ՈƢ ”˜-¡Ü½ËµlâyÙƒD‘[Dßïô“»žïó¨ÖrÒèƒHü-쿵œhj ªwYLš}íV†òB ª`®iÉÇ[PMD<@eñ…_3kΩxƒW I%…ýÒŸ¿ò}*08Ò…ñ F”¸jaL z!„YTˆÞ@_kì„·Ú´‰(r–̶/ŸW°/˜ŠÈ¹Ì–ñÊ)ª±rª’+®äŠ3oÖdþ_’§}tmCô…S¼Sg :°¦TÀš>á,7Ó?tùƒC2™¤”jµZBˆA0qa*•êëëÐâÏóû½ú¼QÅÖ41f²WvH½…~ 3ý‚‡°0F~%@;Ú5d¼š” C…gZá•ìñxÓ0‡’aH^>(¥Þþ¡÷ D×®×ìϱ±E[/ücìË«óÒ¦€¥Þfs`e™,3b/éÀR3¸MŽúŒŠN›B„W¥ÔDÂ0ºä–O ú- €UÍjxõÔ™¿÷Ëc¿|©¡Ï-t×,*ðGŸÝ” íb÷Õuª¸ÚBOFÀ*öËyfcYš±À2<1–”£ɢÅ1>ª}’÷ÚtýRœë =ý\ýOŸ?}ð”³ÏðÓÎøÍΞ^oê3ž7$ÃÞwÛìCgc/¼ïg9C€B‡qò’‘‡¤_ÎXƒÏK.“’gÊ]'ÒŒ¬(ååò|¬ï¬ùê=À×ÿc4hê˜]ª eÓc¹Wè°6DôE䞗ijßÏTðduZNùíß/ûñ³‹·þl`áã1ìØ× `óGl‡Ù“»u=®ç¤cÌÝúŒ7‡ð~Ñ×ùK49~-¤¢úÌ­µ¯m4í]Wöß³…MÌì¾ôâgv!!)±Ù½é¼S­ò¾=ò¾=a‚5 ‡©sQIÄ•V!¼>Ì€S«Á"€è A³Nð¥OÎÑjXÈ©°’ '/oœu5„05nÃ4á.±¦ˆ®Ìô  È„ ʉá×SCÖ•å3B—?0¨°t:.c.H)mii‘e™ÓÙƒ ý¬r½¬P_` ­Ò€VbE ÉŸ¾–™1zä€OÐq`©º!“Ê5¬[ñ3슒=o¦çP’ü"êvRo?)Íä1}»Ns^ÏmÉÝ~áò4¨>÷]\(`©ŸNuwÇ#›+Ë•1#ÆQU:.&`QÁ©ø€Ö®…Šÿ(Mô3–ÙCýÅU9°FdpB I yXÙ–n^JiãúÀ¶ÙŸºkþ²yùNOìCÿaWкÅj{nÓ¯ €Nž10º|Ö^ÌŽw;z}¹ªó•$Ñ€ #%7% ƒÉ_;ܸy–í Ñ¦ XélûxtÁ™ê£tœHðËÁ'ë»Úf+ü¢ýÑËYþù·Ûž~®^}ý“/WìkïwÇ’ï<å4è¸ûo¯ZÒ‘£_2·hçáîï<±qÇþ®ƒ§œ÷Ý6‹eÈÈC2ØÚ72úC³)O©rÇ ©äêÆÑÜ÷éøOþÅ•ÅxX°YüüçÙYÿ«†^öÅ7ë ~ã‘2ÅLË|r#ëD_ˆp“jÞe­>OHj™o–5¬Ru[*ædÏïÔszjØÔu%yÉ(¢~k1kÑÔD3jµQ” ûmÜ¿*÷ / ¢rý1²nSŽ+ø—/WÔ§ÓKVTìÝ„“©–y|•šVe0ÒÐÖôU¦ÿ©•è  H „7P $âîNŽS‚˜°qE¤Z’0ÇQpÔììJ¨‘Êc©“[ }ˆ¡ôÂg#E«l÷,Y²\—°(¥N§S’$Y–A†µ”IBˆg .ÉJ¾UáYJL™3lLI” H¦aúö!Ô4X~Yu`òLeŒW &,+>–!K3ÃXY²L)$¿#ÂRð„ã 'RI¤OÆÎ1ˆÖ^âà4uùbBR2èF-p=mPÃ]ʆf¹y™Ø¥N+“ˆ&G•@=õ(¹‹½¸€EÓAÂðàLSÓå W¥ÔDÇq`Å•„ßÂ0 Ëküí !øê¼ùTŒ”°g7ÌÕíoNöÔõÜÞ#[ÌÿÆÞ<¬À€yÜ|ïrí ®¹|5_ õ{¡(i‡ÝO#Źx Y;œÌ”˜k(ÑsLa:ÛlþŠU„+ëª0pþC^÷òOrkjl6Òñ8p²ÀGVrΈѨcJ¢‚üêÞsþô¾Efã¨Ù×'î¨=Tï¼÷¶YZ wð”óã#ä-)*~ä­þ) –Ô¢L‚Þ±?ôÅ,ZÆä{ò´å®dÌÕa®Z ‘H°œöã› ¿þ~oõdfŒ~9t2Ýr^ra(ÒPláÕ¡706QX¡ôwøC{#Ž€d2€‰ê(`•ýã¯Ëê0”c¡äNv´€¥Äˆ¡düu§=#]WYV–,Y®„K X‰D¢½½}èŸ Ã,\¸°ÅÅIB2ÜK¬)€ ÕŽ)B‘Ú XŒ@Ÿì -`A¯Çdã2(`‘™B˜%Ë”r¡€À@ta‹Ó„˜/\Ec.¯ÍO6ºô§š=CyÜ'ÈÑ3Õ\ÿÂ,Y® X4éÀä,š‹%*:ж@p*áHi4Ü"OsµŸ£bTñ@tùÄXN4¶ Öš,WçÀŠ –±,Ÿ@€BÙ¤Hªi=§øK]è'—X÷7—ít[·Ÿóï·œ ÉÑS¡SwŸNFj+äx~}åÏY¦™{ vïJ¹ª¯ÅësXÂÚxq™~£’]ÞXe‰E””¦^ÓBpˆ÷’ü•Œþ0€¨r…,¿ža`¶*.ç+ÿkŠ—ÉüCd1UŽû; F’.Oè£rž¸ÍkÖ„›…|“Qÿ±­³ëê]ß~bãÖµcåÔ­k+Þ¾ÀdÐܵ±ò¹]…µ£‚ïb'Þ_ЙJèXDõ¦P ¤[¿Z«5ë ʘêZÁ|S¹+)ºº¹ÙËyžE1N¯YT[ûįËPªíÔT}„u¥Û‘W×%†âxÞŠ_ðå ˆ°L”cP1WRʸ‚uÆÅ‹þ_Àè¶ø@tÐý:Çå“ê<6A iÛÙªdB×»tçk‹;’Ëè?õ(1[g×ÓõÙÎ’óÒ.Ù÷Ãðï+¸¢£©F™™¿UÍõ.JÀg€+‡©©•¤ä;‰£yº$ Hîžd¡@8U…$L°HÁñ׵̆"Ò„K 5ÑôØm*8ãL°F;°²V–™C8¶ZÇËZ—庣 Xª;zÜXjB“ÉTPP@)5™LV«Uq $1­fp/²¦‰.o¨žk*͉* Çû$®¾×Õ8­Îº´c,#0¹ îÀ Ε=o¦çPf,OÿÈ7 DFL Iưˆ±tmuC£K°Þ5BÀnh¬ëéÀšžC™e²Lÿq¤”RJ !ˆU‹-¾ãŸ’LSñïŠ+ õ*á:¡€¥D;”P“ìÞKÃÍJ¤uè}®êA&oݵêüUYÔZÃcX41`c(„H¥%ËËãTpÉý{JLU·Íí1ë䆸þ‰ƒò sö¬>û‡1CRA]Ãúù%'sBmÕ–͹‘ÖÐ×"Q™#“+¤C=nh@Ë…JM,ÂíìÞ);ñ¯%Y1êù”(K’òÍOÌ~hI3µ%è<~\¹€EÍBæùh‘ûÐ_<¥ޱg 6_¸tÝiçƒ[òVÍ5õIƒ Aü[φnƒÉ0μ‹ç˜¿}d“AóýOÏ’÷íL&u:(5ì À‘-Õ·FËió;¨Æd¿ý3#[ˆäþ„»s§pШD$‰¹³J¬º³‘[S¢c³°ú债Ö(ËXÞR´¬#ÖçãÙÌN§³²Ô±¢RhòÚMz–Ê)Cîlua¯œ ?)`è—ýŒ‚³¼î1>À³Lh:’™YɴѪ ´žE^[u;[²íò¿Ì!jùòZ¾üày¡«1\°TjÃþ÷–jºya%î‘R«æ,0‹—ãÍ—iO—áÝ÷¾¼jû;šf–°ë´‹ì(Ëð 6ûôäú0ýO­*VÆ4`EÆOë> ,(Õ3q 3 !Mh2E3F;°hÒ9E4Ö)õ.M)d(ïaÔ`É)"+`e¹ÆÌˆ“΄ CÇu`™Í£\ª5Ýápœ¬wC°tÉKutÜÊÓ†Y|Ù,~ìdE…TÍæ|tLn×K3œÄ}ú>³—ìñxÓ0M‡’aH^>u;©¯Ÿ”f”nÑらþÄX¾²2αôL›?&¤Õ§ë7.‚p8„P½wº[œ¦C™e’Lÿq¼Dü`*E$k™¼Ôy€p%&p`Ñt˜¦Ô›y ¶ú3Œu ž‘Ú¡ú¹®×6‰»𠩤‰Õ<øX:Ãñãñ„`ål=ÀØ—Ñ0yk?ºzÿsÇñjжw·—¡`–¯æ>þ $_ýÛÖÊ$‡sxwˆ}ÏÇß.å >cºû*wöò!„PBÑ•vˆ©¦Z¾ÜÂ\F>2I m0¢/mø¯c¶Sï™:š#óêÏ?Uœg'uö›O×ýqWËW^,{í‰Vb·Ó²é¶KIzYI¬$Ijhh…Bv»]èiìî©NcH:Åã CmQÔÎËÜ,4–Qdø7)Šb<¯pPzÅC ©T €†$h¼÷²¾IÀTÍ&e™kPsºëÍ¡û.™?HæR¸ˆilÐ)(Tb¦4 ibù0{<¯×{ïæ2î$XØ1-Sö X•ÓTÔ VòÈjW:ìc¾²4¿Ð+mêNÀšhDퟻC)Ei‰Üü:Jh˜ü«ò'ªÇOuÎ[Åï¯QMa¦³˜ñvéJùð~yïn½ÛyïŸüùøíø<tOOO¦ÿ©UÅLŒ~råó=ik:7IdÙà^âÐ÷{NÌêŒËÆê‰Væ­F:°hj@v¿ÁÃ,Â'£®Ošéë¡È’%ËÕ (J:&„hµZ †ŽëÀ2™FM}Ôé"!È„ÚDÂ+\\LÀšÇ©õ;# +³p©˜ðºráZƒ¹ÛI6‰{–,£!…Å”®sCïˆXZ»Ñ _\’dåhCƲ¡Ns””‡*›+ËMÉ¥`y]AP‰ªïxå@¦nÔV¬c©%†¶èVÆ:OmMx¯aç¯kD¬MRP=ѵÍDšÚôríòŒ#†u¬µë7ÛD§À×Gõà8ö¶»›[¸›°šÅ®ó’ëLºíŠöoÒPg¼o¼ÿ@à”¼)*¾.¼ï”}—\T–ÚI òoö:¶ý{Õ‹;í M.'ýêÁ¢â<€\«Î¨çŸúÂú\«®É¥kw)¨°Øz"Qé/'»(Š'Nœ…BœNçù I¤:–ÊiΑZ[Êçe@ KãÝCkùýþ#GŽœ:uÊaåúéåUŠÃ‘Qš´LB¹LKù‹ØmÛÕ¿÷6~(%TõŸ’{_£Äàš&­ÍgcY™~ÿ¿¼‹NŸ/)/-(( „XíyŸ¼%@®6LômH !äÀbô¥­_ö/ìL/8—J²°3UÖ% ©c*ÊPªw½'Ö}“æ»pe÷Þ‚«@½@i©†ÔÖë–lӯ˘õ·°›¶BoPZ•SGÇoÇ×€ä\Mg²°0FyP<Ó°È÷Bu¿lEKB‡&2Ñ“~›BÅ(hæ§ô¿«Ö„¹Ü12lp*Kb*¬Ã‡?þøãUUU¦¸¸xëÖ­/¾øâ5ßJ–,Y&&•JQJµZ­úó¹`2™EQ£Ñhµ£¬©÷Ì`÷b›ˆ–.žÀ›fª€u næ¹ IDAT…ÌXV–,S ³`)€‘se#£p*Õ²;Q·;Q甼NÉ«¾Þ¨óÈÆP¼®:à`½K]å:°p#Ò`eÉr¸„€•ð€® ¤d\^9ö!„4Ú €Xj¹ÙÆ–Þ£¾It†¦PÄkÕù+w`) EA1 O]âJjtó`›’Lï[•fí‹Áhˆ6W-À€Ë[}ç"ÀΈ…]µäd"­Xƒ €.)»eÿ¾7„ý^oÛ{"z\SÇÙ}§žÿß}Á7ÞàÓ€Åm‰çâ»=rÀ-]ZÀj9òÒOwùUÅ?¿S˜ŠÇâô3„ƒK[Ì¥btÜíë*¼Ýd&°¤1<ï|:ri°"‘ˆ :Žâñx’²FGb‹ŽíáÄ4!\’÷U6+ùR8“Ëãñ444ˆ¢˜’¹£Í±3g;8]nÞ Á_ËQH1š \rÓT1ºÆŽ”ô®Š%)aÙ¢ÛØ¢­lÑVÆ26òÓʘÚÊù¸žPîôåT:æÏŸ¿lÙ2BÀs «I«>[IÐTD‰iŸÇæ`„€%CñÉÁ…©jWÚ˜Pt¦ ûe‰0„ÂD,Ó76$egŠ6^rG&Fœ=ÑÐþÓÆ»î3ÞVÃvHn»m;÷áv¼$ïÛCãÑQ­ˆi ‚e§sÛ™‚ê|ìËg˜ú&@X‰q©4V7a ao(£ ¤eÿqlÁf&gÉ”w}ê`4`x`j3¸c*¬'žxbÙ²e»víŠÅb_ýêW¿õ­o}ã߸æÊ2=9pàÀîB`tü Æ»CÊà>fEu‘>goŸ7  È’r`%iÚ È8óµ,64`YÍßOó÷ß;¹œ©7œìñxÓ0m‡’©£‰zÜò[¯«Ü àtºíåø»/Çß=žn:žnR_¿÷@ò$Ñ®«‰¨;=JÀºQ¨« Vº¦íPf™ÓÕ+þÅ3¸{}þ°K ªL¨$Ф‡¦Ç©¢¥D;0梵c(‰8a‰ÖªÐÔE*ÇOž+–•i, J‰ÉŒÊ*:‰ž&ÜgE¡zw‘íŒcõp´ á>¼Ú `WÈN6ß1ÔÑéèRôTªå aÿa?qölhHl9H£5‚©á™ºÀW;Kלž“€*§t(y€ëR, ¿ôVÇ¿¾Ux°ËdדÙôõä–¯:¼mIžÛ°²RvïI(ŠhB&DW|×ߌ•1Y2`aòB²|®Ev5Àd®¬ÐùÏÉ&2 ·NÔpI^+;•[ww÷pV!'#`¹eÿÂÎÌëmGâDý­Æ)Ì(K‰¨3Iä\þ¡¿½&cõX „¨Å GF^ûÑH~¡ÒÒH=né?f–eê¥P¯Ó>~púŸZUæóÕ’^"E”jÞD(˜—Öh{V¦(è.‘œh¬Tè£é01BöÕ`¯]× gD:<Õ¬ë‘Äçyv¦Ù²d™éŒIÐ~ášßï`±ŒÉ§‘HôÝ÷ Áwïs#ª 1*˜ã2ò°²dÉr˜5Áe¦4RO•žÉ<6_1áÕÆ5³îú·ðo|rЯÑÙxº´\>ÒÁ9ã¾c}efzCs`eC³Üd\N!Ñ„’§€^9Pʨœ¢‚ä¤ëRgð4Þ+ûêJLå™ ‘}Bc­1#;ÓzV-- ÄÛ­N9^Gl9Ìš]¸ü•;°¢aíÔô‹—þóÉÛÔ÷š¼ º8šx»Ùr¤ƒ_½•¹)b™€ÍßV?jÓ¦ò;4üê`îÎ],Ë<ý\}e±åŽÝÀ¢Ý’›•©Ì’‚@¦Ø±Øß‹üùcºá”¼¿‰½Ñ#¹ Œîê¬]ÏÇD,7 {p¡(Éâ>Þ˜¤qqÉþ jÊ;^%áŒËÀ|ãë÷ôjúA;vâ—J¥xžgF«a7¯,}s×ÛgŸ]{ @¹9-¤ãØø'Rʆ,‡Ã¡á™Ò•LÓÆ˜áÍ€õÿ«´«Ž¦Î†r$‡Kã—Jü ™(ªªªï}§À£ë¢ŽkS}(CyÜ•H+ƶP 5*¡¦QÖ Kñû÷ª‘„g­¹Ë´¹tØÄ8°äþ\./$k’{Â2KtO}úk_ûÚç?ÿù)ÝP–,YƉD0BŸ3 …B±XL£ÑØíc+é*ݽ}¢$âöš Õ`µ`2™bJ¢èëÀÊ’%ËE Ž|vÛö¡Ò­VN$x7qÔW¶$júe›³XS{ yªžÜ¬© éÈ­S,uÅFa–›€óýéNwúF÷âIè»§bc>â\+Fdh6ñÎÂxXDG˜÷ÿÁuøQEÉ@„bþ§bÊ•åò½BÙù ,T¬³·ËÙæû‘JMw¨Ôê*ýºÂ@"väüœÚ£{’¦Üãš±l % ŽKv~\Ì^«¯ €)ØçÞ $Þ>~nïñ6¦¯R~ë0]YÜÂÿÜgúù‚¹€^ËìmdTy}ð¿´°o™ùÕÁÜ݇zuZÀyWäì±_×èR4$‡7I¼¿ÌPÌXîö®·õ‡y…/2‰–$"½ZòŒL$G=N%0wdû¬˜–'™Oóç/6¸Ï2WRýaï„­÷ï‹zlÊ‘¹ò—Û 3+³»šç·7×óÖ¤Hf('ÚÅN£v$‚úw;Fì²,X%ŒÕ` å¥E@׎러íà0Ëa¡&¤bî} ‹8ÛCÎN-“.b;ž×ÄfgÐú‚ÇýžM^NZåP!W¦S<„Ð )á{vœhJë5ÜÇ–úÓD÷‹î㊕V1WKí«€T¸gß©aµØGÁ×Åî_…s\Â}ðdoŠdbç†"à5_ófý #pÚPäÓD:ùYÁKýr4E‰‹úìZt¤Šz#X™ž=#”™|%×ÕÞê›$›^6-lîæÒ€Y}éƒoî<€: j×v×¸Ò Ã„,:{H of-© ’ ~nìò~À—D=ác01—¥£™{ìKÊÁ÷Æ\\™¹3£ÌßL•Òž®_ (PtéËu`Põê?YÇÊ¡»­™ê½šq9°T!„›Í¶yóf³ÙüÔSO]æ*cxê©§F†Â644„Ãᡎühäëp8ÜÐÐ0îGÙ¦º…†††Þ‡l ’$% †aêëÏŒ, 5X@§¯¯@qq±*llRĆ‹s¤¤á­þ¨Ï˜¤”dXÓÿ{ȶ0æxœ¡{‘mA}qÃûp™-{.»åî:£Ý¶½áÖ¹/o6(ë ¥µ|9€þsDc]SðΡv åÀÜÍ뼉Dƒúþuø&‡>£™maÜZûR;ŽD¯Ãßñ3±î·Õ¿ºúžI­{´%ÀV.üèdc7oÂöÆ‘X„ÄÝz ->¡îc—ާ ~óhdÇ‘¨×ëОýR㬠|§Ù í¿Xg¼î0€=Êl8⨒ìló`ãáq—ßߘ‰K—¹³þã• »*v9úìíÔÄ“H6ÿdôÿ@àßÿ¡ëË¿+ÿ×Ý¡8æ§„Sú‹5õÒvvÑrJ+ØÕ›ñ”5u…”<¢KSc’Þ~,®wæ…2A|LÀu"çö·‡Zx³³S&QXçSž1íKû^ÛÙrnìv…_u×ÛŸß÷5µ÷kån{d¿/Éèíiýгþ»î:ßÓÑ{áZ‡ö–yÀŽd9€šBì8=ãÐ×­þ‘4z¤P3¨H”"MOC®Iæ9r¢Gïó `ä˜b¸áÝþ‹}iêô²¹­7?òBÈÅ“ä™óz"w(d|î7çÏ>cr ÑWÎVYåöź÷B~ol §±ù<¥(+44ŠGÑž±8c=°7Ô°ãHô¥£\L4ðˆ<Õ×ÙÖH@;£¥¯M5«¸»Nï8>î<üzG[aÌFñ¨Q‚û«Bù5»©­ÏvÉßLÊc'‚ÑMòA‰§ã„ïŸO>þõ÷Ù›z·ˆÝv¸oݱs,Ñ­)9RZ `Ãñ¾ÕÇ×?{ÏÁ£ “/?–_ ;Ow²$ƒõH ~Öþ\›yRÇì­½) !“:ËE$…½ãµ8£zQf·m'¥åÓùL;fâzÃÏö—lØr£™;,êÀÒé'n±ÎS+ ¸å¹lÑV¦à–»WÓÂSO=5$Ý<ð¹ï~ÿ·'6ÜñÙ‹¥_¼&)}äèõzßyç¯|å+ŸûÜçþñÿq¢~©íI–ëF8¶ZÇÉåz ëëë-ËŠ+ÔwdYÞ·o˲›6mJ§Ó‡°nݺ1%ì:ýÚ÷wƒ¡—¾³j±ò 1Uñó¿¬~´ÏÿþÚ¾˜2hÌ÷ýë¹;Y®˜ìñxÓ0C‡òùøžwG¾ñKnDæŸøz»]üAøÙ¾ôËýñä@ëòï,J‹´þ…ÏÚÌÚ¯üÔMï®èúW$3ŸEÞ®Â{êë^º¶÷L¸ø(X9¤MãXÖ¦Mô`ýÈŠP¿<ßOŸdîÝUõ3NѬsßç6œ£„Þ’Ü»DHxÏb]šee7óEF.^NžÉŹ“xd€Î¾p[›É·eðûé“"Ʊ,?üL®÷Üù[6UZ÷  ÆÙ¾º´ë0€÷îú{‘nÃФ.Ѩ]R¿ðrv¶¶iWŹýAGuØVL(¼R(>µ*ðOõüóùÏέ-HÍÃ%é¢?ÝàO+Ï’°v€T*uáDhùÍ_ÿR<Ü5l"¸yðÛëÜìQå?°ÿÕsæyËæ5Ÿ’ÃQ¥ßÎça;€­Ýê%3€6û‘Öœ#eÑy}æf†rwu}žÐáóÚ¢º´TÛÅ‚GFnQ”Z¤ÈËFÉV›Ë™ÎŽ:÷lÑÞVË7?}hyw³.ïéb@^¢|­ë^ËɯsÑîÁBüðà XYnfÖIçfeL,Œ!RjµZ/œ´Ph&|y®ßp,R, @4^*®;Ë´!{<Þ4ÌС,ç tñ¹™öžÏqÌR¢D_¬áZjKù3©Î¾ðòyù™<7õ9áuË5C‡2ËHd…˜_¡»eÉÔJH­%œIýSÆŸ©Yú‰ óO] ¯7qö,l¤g®¶}Ñ’ÛA†£.¤.§âCIi)WHw‘Ç[Z2 ˜àl[=7€Eö¢¸‰SqüÃy‰ 1šÀšEED?n³Ô2‘Ö-e§Øâáâ}{õ>·«eAã[”.D¥ù ú>áh¹6¦r·Ï–HÁØ6 îðaudËšËJY {!ŸƒcÝò‚µ›þøf£Bx»µàÉê‡_:õ!ô?èUÖnY䨨×ÝÖÞéÌÏwlœ«¶ºÏUâ½¢LØŠû‰± ’ &X—ŠQÙ½Gýóô=/¸÷` ÓtP žÑû”8&wYPލ rò¾=ò;;¥~WÝ›‰Œ+4/¶hK¸„Ö€¡é¢Ö\z$÷îDÝîD]¿<€)Þ @ñ¼EZæÀIç›û»žÛÝ >3™hr€£ÔÕ“éöˆ˜”!&›ÄŠ"Âk¼}¨!ˆˆõƒSñÙP/)JÃ\ €2z 7Ñí%1–­­Î¤.zèž%93Ä?ùJI¸€-H_é(=Ò%òl§ñ§A+Ó¼ Døä ²?ÜóÀÓñêÿy¾ŠæpJÃ7A9 § I¥ÿÝçGôžæ4wè-ÔÅûßh=ýÅg_xú¹z_@8|Æ `•Y &KH‰) À±ä™Wÿî]íOòG×ä³›¶ŽýÛ|;÷È_tú’1šoËKòОt¿9¥³ &I’œN'€êêꊊ UÄgYÖf³¨)ÖÚŒ¤ÅÅ>ÚZémç=Ý<<@ T É®·.üºÔ îZ%úÛº\8×ãõŒ2Ë ‹Š´ÅkÓR¿z¥Wþ1¢±Öõ$E,®äòª×h–üc^ %|TJ“³„-ÚÊ–ÜÅÍ~œ_úMb(@x3c_ ªXœïUËn¹+Ù²íd’ê«Ö0³NÌÑEõ ‰Æhp€%˜Àç^ÚÆeg¬ºõ[KK–Îç«7×§Y «¡f²=É2C!f ¨35ÑeöO!SëÀR9tèÐܹs/½\–,Y®‚ à‚ ƒ Ã(Š¢(J:Àóã?Åõ DTäJàK”Èb»6De4›Á=K–,—G!›{Ÿñ¶Ü"'°øy‰>N S©(2«Óƒš‹ÞV¶ a–É"ËË\ûx×=‡»ô»“êë{æh£ðœOûñG>¼¡ 6Þ›8l¸ RUT‰JáåôÒÎwLÉúf’*¢(GÄÝo™íË•ˆ«ÿÕÙr*d*8E;{Rnµg"®ƒoh$l-0 Ñåkuù2š¬’Ôì\ 'S Ó ¯Z»$ç}†Û\²o‡°€ $î3ÞÆXæc9÷(Ç™Ázð]Î0€w¤?%lÑÝõùóO<Ír ÉHf"¡ ¿‡I—VH§@£I¦¤õ>Bè½+ÉËÇðþñ>²1Ь×ä1†¡6'ÎÏBŒåËWoÌ1”JË«þŸ]ñ­ŸzádŽ7Ào›:3þÀ_°=&ñšÓöd®§â-éDÂìûR@Ô¯‹¥j­\aî9¯EúdÏ ÌS[>=½E¤òŽž•MoaÈñˆ)’ZØØêåx­NˆŸ{¿ñÀ ‰7qôÍ]}!£–]dLÀl +1l8Ž<ÿV€7‹{Cb~Î-vfÔ”/–Mzþþg€õ5q¢µ·ù;omŸoNé›qV§Ó%“I–e G 4ê¼1‹þï·7ýé?=À·~m¨6Ùõ“³HÕ’†ÈXRÿ §á•†‚Ç6úOôÛ)%‹M†y¹?8œüÚ:ý³«#®Ãxý½ŽoüÅzŽ3°•ìÜÑønß¼Œ«\U& DWÉ7¥;»%·]c%Æ2ÖXváè°·('c™”ØÿîäÛN5w_á³UÑíXf*s§k´AiaGŠžk%óëR² %SÎå4®یÁ²tr 1Rd]qeýÉ2ã f+2VM¿Ü¯OSmÖ5…\û‡GÛ¶m{õÕW½^¯(ŠN§ó™gžyì±Ç¾ûÝï^ó e™žŒLö–åú“H$Ξ=+ËrAAÑ8*´aè&mb–/P–“flóÙ¢­Œu€˜"„•X2ê@L×#ML–kBöx¼i˜¡CÉ€Ù¦_·¢p#ð°±fAž'ú¢k€Ë«:2¬ëßÉëB8C‡2ËH¦Îåܶ²øîÕFY¦-ý:I&ÿ÷Œû»gú)@í¿¼²;QQ2þ Mÿ8òÜËñwmÝo˜’!/Ïî±Õ¿“F€³FN`mÜÙ©ïôîèoüçâþã^1&_Ž¿{"Õ àü)ñÕ@³b-w杻Z=*­a¡É#)áT€ËôÉžN©Ï/‡|J0¤DÕ>4‹çÕLÎ4éÚUÀp<¨@LÅMH €Á9OÀš´¬,ŠÀkŽ6ö'ÒÊ¢’äŸlµ(È5üâ©;l+¹FƒÖÀè†ÚTÛÇEŽG¢±ê*>rüŸixéáÚŠœ‡·/ØùŸ[LeßyÓOêòœô¾ß[ !1ßë-üá®âðYÞ«œ{Rl@äÞYž|*håC­Çö½úO­gwh žQ7ÁÉŠüöòî×äݯáÀ{:ksË,Õ¤Dä\gapºÕG)–—h8#¥ùÁŽIÀ³.P¯OËÒ¯¢¯(ƒ'Ï·ëº?ýäŽÅûÍ'¿öúw¶ò,ýâ-¾î~ÁÕÐcNéežjµZUr*((à¸QV5z+‰,œ?çùoo5±Ê»^Ën NK@e©ë J[[Û¼˜°Ý×UÞì$}!ýq§ ÀSâ#+ 6Xbëéòj©T er'j IDAT„SûO:ã 1­ŸûÖ±0€{n©àS‚òØœ ®@Ô?ÁPS1UØg1ø9V<HÐjŒW|j=½ªð×¶vóõ³´äutÀÀoãôäòN1Ãç¶ð¶l;ÑŽ­ñå2™y—Hd"W6Ôô¥‰BIQÉÈŸD–kεw`=ùä“?þñ{ì±p8œ——·~ýú_|qÍš5×|CY¦'7n¼Ñ]ø€’H$Z[[ƒÁ ƒÁ0gΜ1 ¨Ó5Y–Uëb,0 Ì.2ù[&yjŒ&˜ €5Í´èô0Ùãñ¦aF%ÉÉ!4€¢Ø³Þ-ÎYTl;  Ï3èÀú`„Îè¡Ì¢")Ë^{–' x`þÉ-µþöµºh’yÍUñ»7Ø£?ÍéûF¬L…ƒ'÷µ-é®/Y?U—<½'q¤_˜­˜Ä=2Ã6TmMñzްË5óvvìµ>·ÇP87àò“T`n2 Íi roÙF¢Ðw;NµÅ¬_Ú¶FFi÷/aÐaC&`Ð&É݉n!Žé9 ¢ÄÃV¯Ô§ #ÑN€Ê™:†’¬ô¸36«ã>Ç&ZGœžO‚hA18¡‘qB'ïÀJ¯9×°¸DX:·ð ŸªþâKÍFÍ¿xL$>Iô¸Àu™Çã¬êʇÖ~¶ÏáŒi¡”’˜Â˜t\,)=çË÷3žtÀét›§åÿgï½ã¸Îsïçœ©Û »À¢W HìM¢(J¢zµ$[®qnl'×vâïÆ÷Þ8Ý7q¾ÄI|Ý’Øqm¹Ë²dIT£ )‰½‚AôlÃö:3çþ1 ‘ RPûû ˜=³gΜ³Ï¼ïóJDÂ’ml·T^7²ñdê@|÷S¥c,>ÌñªC>Ñxá©ñ«W:ˆ'ˆé\dhþýXÛ÷-LÁú"Šz0c÷mAtd³À$Óu®h"Û?í}ÜÑc oyê¥w¿°·ÿ¿ÿý˺GÛ¾££þÛæl½ýC 8éh­X¹Qn9sæÌøøxié…Öï²,K’”Éd’ÉdE™ó å£_è-ùú)OÚCw:"½øö;K ÆúwsFƒ\ZV Jhâµ./x¹¿aï™ €u–dumñ?V¿€„ÁB¬Þ;³¿à?ÿ/¯…¢é[7Vēٖe…•^+¿àæœå|€~eôÒÝÁy¶e“ƒoØ x•ãUßZíÔPÃfjŽæZ³ô¦HBˆÅÂ&B-Ù¢•ƒ6 L뛺M×9ó/`mß¾}ûöíó~ØëžL&3>>^TT4[\ÌtR©”ß?ù€Ëf³™L&J)Ík½ïa&&&Nœ8¡iÏó•••w¡Ë¦¾å²)„P@¹3C„óBU\K°$5¢eNÕyòäÉ3‰ «EÂ,­ý$€CäqáZ:Ož°Ø0jL»”Þòֻ͵ðÀÊsY2™ÌÑ£GS©Too¯Ýn·X,„EQE‘eY}ºU%‹e³ÙD"qñS)I’xž§”ªªj4W¬X±§’gaèëëÓ4Íív×××ϦL]B8«€ÖSsΧ &´€Š´HÉ–‚ߘ'Ož<³ât!f!¿Ý;)`S«·@04Å&^óÂ<×Ê|x`=ózÏ×~rd×<ä°žòð…$·üÍ"ñCæ;r+€M-C§ºƒ¬šQü^Åï}=ö‹ ±QóûL·¬jÕ¾¿Àyn˜~|$¡ns£Šç홄SQ˜ì­dÚüþÖžSa…ðÛWºþÇG×B”ˆÃÉBAðÁáàTT›¢sœ†ÉaÕâ-`Ôürjÿ™\ïyKIëûèùƒ«›<':|>9]TH°tœ§ €8],蟟,–† ýC«Ü4¥Yty&Ër SE"„ÇÜ<°f¤ÀhøÀúÐSÇíß°Ôo¼Vrý‰þ´øÄ[âò‰Ì«a‹¿½T¿_SÐ7(øèƒç¿géI¿9ìýy,ùÔ;^j7j»&€üUø'ÿp§Ý"}â‹/~ån?ÝøÐŸ=[]lý´l³eU0,«pÞgnôÝñDªßÐR9 ŠŒPù¤3ySÆäIâÕ¶¡¯=ÔÄQ­”ŠßêHïÊVP}wŠ>t:Üõ?\Õ#i!&år/ð–!35zÎÕCt¹\3žfQQQ0ÅbE¥U_R†ÿmœ—ïéRïO$lÕFû ÿH9…q]íÇk &2QŽ×íº‡ã¶Ùb‚ÌÁd€xÜBF·vÓí®µ Ápê+?:L ¹ûÆjýC}ê7çtR›…uw'=ÞŸpm…UH²<™k®ßLrŽBÎÕN¬-ª3ÕfXöÕôáîš¼cFž9A,6h}Ý,àƒÁHÊ*ºE×9yk®„B¡ÑÑQÆX&“I§ÓŠ¢ †ÒÒRBˆórÕPñx¼­­-•JI’”ÍfC¡P(ºô[(¥n·[’$UUC¡P.—SU5“Éd2™©®®1{÷.½àÏ%N4 ‡Ã<Ï744\x5Å)„³Åú'JYݾ]'Î’ìI€æ=°–ùñxݰԻ’8]¬· ¡€½Ô`B‹¤Àå6ŠZ4‘‹'³ï¬¥Þ•y0õ΂3žx¹s4øÓyí?ÿ|  YWÃYJ+àp“%ÿ6¬,þÎ'÷·Ç?³¶¥ýË|§0-ï!‰çJ I 8 %ALeÄTžJ¥AЦB8C‘ âÍ©”±,'ˆÂÛ&ñgŒèL XñxY(ÈÆG¨»„7©ª+§ˆðç×–A-’Ð’è:©éåÔþö\/¢–B¨kI UN$C‡z³ÿübQEàØþÌ„©X®µe!‚T° ŸEfˆÀ´Ê3sYÓ2G k žì®`ö,;x¢×ãIšL¦K1»fœT¬TUÅÛ=°æ8 µýÁ–Þª‚¬,°GÖNXM’¨ŒþQ³kçïÛ÷g¿~5l‰öpodŽ…{ødŽT»2»rKSì»{¥tË€ Qõ»/€Ã@;û'¾ø­·n^_þêÁÁ‡>÷ÛTZa Ý#ÑÏ¡l§3  ©ª`µÔØD\>ÔËG“`ð;š€CáBÁ”Zû¼»èέ'÷\Ùqnz_qIµ€€ì0¬§±]Ñh@Ú¨0`™PqYÝÎår­ZµêÔ©Sñx¼kY‹É[y?°ØR7øG8«–‰8îÏ · †l&P¼B  6÷“×ÓDËæT·;¢Eb²`‰¸‘<üI×ÝÆ&Ùœz¤ÝWäš Ó#° 9'€2¾èt¶ç™äÞ›ä5zÛIjº€¥ðÄLÄwxk5S#€aãvÞQOMtqùåî°§H½¡vxZ×7Àz·É X—BÓ´H$‹Å¢ÑèTÊÞ‰D¢££Cÿ{*ƒR*˲Á`0›Íš¦%“Éh4*˲ÉdÒ4M×2™Œ¢(š¦É²L‰Ç㚦Y­Ö––ýãñ8A8ŽK¥RªªNÜb±è ê„Ï0ƲÙl.—K&“§NZÀràKî¦s000 ¤¤äꦥ^"KQ´p$I Šœ2M±LBK¨×Ræ”&†"`É{`-òãñºa©w%)(À‚;-0iÿ,ÛÝ~I·ÁZ(òXy®”I¬w58;tj À‹oõóÛýŸ\ßÀ/…5Æ\eXeD “3Á3¡P¨ÂåáyrôŒO17séWÔÑÝ7ÜDyhû5{‘‹D…æþ#G"‘¥Ôn·766ê—4¥œœŒb.@5H¤rLAcì¥î,@ "×7ý‡ïìwØäû,žœdãcXAˆhC&X•ÎH ç#ÅBj„6j®à‹MÄPÃ~uÂõö¾‘(€ª«%ªêÅãG,8r³õ@JÊÐv©$”ø ×$W„¥´ŒfãR‘_|ËrKš‚±±±ÉL´mhðú™×‹‹‹õSÏðæ> ïpY:ß¿. Çîi`Òklž„“añn!DZ6€Í5 ¤ñðê ž—XGF–µ› ±¿L®>Õi1¥þíS+¶ýßž]oôuôMèŠX]ž¬¯°ýlOî…@cu $ñ$(Ћ=Õ"'P¨•Ú¸ÊG5ß›£‰¿½û,Ȱì"ž÷yPRã1Õà¬4 `“´r.gj³Ù6lØà÷û{IXlrÅ ñ¨ªo d €ÒÒÒl6Ûßß?š«àðÔî9ò2€O>¼òëål³Å :!$d2Ö,d“Ñyÿëã뻇Π—~u@!u¨à‹Og{ÞH³SË%¬Ëàs…'äÞZ-ĈsÏkõƒHÞkX’S¤Å @÷þ§ Í ÝšëŸ¼€5+‰DâСCSd9Ž+//7’$ɲÌó¼ßïEQW©¦öÌf³Ñht|||êP©TJ·Ö¾]GPRRR[[«¯¡ ¯´µ„I’$IºÆ ñ< N*• ”Ò‹Í8/`.)„ÝCaUÓÊœ9=üê•ÔÁ§’¯m–[â,¹s_‚ds´¡YÎ'Ož‘:u¹…fMêž—ß|i\QµÃ§ÇŸ€Û+èïnEÀÉNÿÞ#ÃÔYö‘lü¯Õ¨³E‹žÕÛ\a\†T¯DD#‘'´(;g°QZq8Óî;öJº€ç¦¦µžNågßïéñbY|OuY¶á6FsdÓ O¼ÑðñÝ~©ÔA„B¬6„Cˆ†q‘€u Z¦ fl^@¡]`3²ÊÊJ-þÂÄ/5·ö·Ž?ä£èìì4›ÍµµµWÑeDvëýB²2 6–!F/KŽhã{¬uÁR[Á`Xˆÿ¬&Œ4¹Ó[kãd¤œEûáš#P }ææ¤¹(­¦žx¬Ù´ëP%€Wù>Ûø‘Ac…3øÊ-®ÐPåTûÀÔQÑV‰D­D¢ò6yu¡b¸»7Ï1L¯‚I8ï-ÚÄqÕÿ&Wr;¨€eB,—Hh!c|‡¼‘^áÝ•ãùê3Ç0‡uäTôÏ¿›ù§ÏW·V7誢Ûí“$éì@Àª·Ûilmt»:Ð^4€É‚PМÔ`C’e.þŸ6 › +ç‹n6¬?‘í j—°2…Ðøy°Z7S#âZ’MF`Ѽ€•gnœËM¡Õu Û–÷ykVô)Ód2ÕÕÕ]vçé \Qm¶·åX™Íæß5—‚ƒWÊ‚ X‘Hä‚ÓÏón iÚ±cÇ$ — ¿Â¹BÝ(m¶ŸdíÝAÅé´æÆ¹õAÕ‘þ ‡"hë:âñÎ×)ä¹äÇãuÃRïJRàÀ&fbà —dé,Ë ’ÓkÏöÅA¬:„Ýn///Ÿú7NG£Ñt:ÝÓÓÓ××gµZNgiii<Ïf³v»]¿*ŠÂqœ>çê6”FãœÊ`-õ®Ìƒ©,îjÄV(ùÝ'ÛºÃ.»¸Aþ9¿2µnEÉCÿÊïíD¯¿Øëˆéäòãû,+ZQZªi³¿õÒÍ7Z]Ö‰è9•30*ÿ|¿é†5õæ¬&›ÍæWÛ”LŽõ&~þjäáLªªò‰ˆcI­€d•ŪKõ›"ˆ“ß¾(.wä^öál÷ÛzÊl6Ûív§ÓÙÑ× ¾Â àÞ»JŸ? €(Ð 9LóÀšâµôá™6nîüMØA­$¬Æ40=jìwÉ×ßL×_=•íþÛc©Iw €&p˜[«…“j:¦%Ïy`å#°€¥8E« ‚%Góֵཻø¸,KTÀºÆÕ”.fÉÝt®”¡¡!UUõäPY–õŠ?—È1ÉårÓ_UUuhhHס&&&¦ô©!„\¼t›ZÒqWZZ:222—ð+LK!Äe¬â4u”Hi™òqÕUúû–²­vçŒïʳh¹îÇã{‡ë +‰ÓÅ’ „N»Õ¯N„´ˆG¨XYšðêÁ¡ûînKáBˆÓét:¹\.‰ †ÃaQFc4Õm9ŽÓ4-NëOxžŸú»¸¸øÖbèÊT*522¢×“áy^QUUEQÔÇøøøØØ˜¢(¢(êOt¹ŠRêóù"‘HEEEuuõBŸÇ‚qX_ýñ‘WV•ÚÞ8:ìr¾mÙý¥ÏèÌY×4U>ûo}íßb°‰Œ‰ØÈÚezX 1Yøßÿ´ó©_ŽÄKJ-ûŽtÞsË*?þÝi>c<•q§»F™ÿäÃ-_ùÑá÷ ß¶¥ö?}ëñgÏPtêY÷×?Äñò±ƒÏw{6®«âvµ­¾Üsß©šý'G¹ÏÜÂQËùî¶ÒÉËÛ~î×É•1Qª‚ eF­ÕJì9*´ª»€ù}[RK;êsÚ†Zz<I›dX|kî Z->l³XŒ…rª+Kôí}ÊpH‹:¨µF(›í½sD6â ÍEÄTFäVÔ¶\S3$ç¨÷´íîñ±•2zìyŽ0$ ¤È‹8¨HÂÆŒf‚*hÉ-¾­¾¦Ì~þø¶e©ð†ÿ D£5½êH'®`-y£“Íu·’s €‡cttT¡ÅÅŲ<(DŒÅXÚÈ:©7ÛBÁŠê&‡påž_8Qjr¥Ñîž4UcÿõÔ©åµ®õÍEeee6›íl_@}¥@†ËÈ9Ò¤1™Å9o©)ØáL;€mòšUIzè%´¹•wب9¬ÅÚ²]£j@eêþôIôfÃú™¶³¹þß&^•#É?þí„)¥å1·V35Ž«¡x^ÀZPÃyŘÌâßü3²™IÑ6Ï»L^Àš•%*`-xÖußï‡'£šõÏ&“iÕªU3&„ŽŒŒtttF‹Å¢?™÷ù|±XljŽã*++cŠ¢è[ôR•š¦…ÃaUUÝn·,Ëú¿ºiš^šçùÆÆF—ËUQQ1— Ó8—B¨ÿ¾š±µ¾P20‘2ËÌkS†¹I¬–®4€ã5²™›SvLž •ðÌzÜ!ا¸Ükãý]j]‘“=vüt_ò÷ni¶h…£qÏ¿5`ûúòe•β"ËàXì³ÿÿîLVÝÙhù‚ùdAyñ—dÿðï^š:àÆ–âK4˜—PWa‹)ñZÄr´ÝWâ~ÛBE° ÃjQÛ •v!bþqÕ ‘L–‹ç uEÔ˜‰öxÅ­$/`-=®ûñøÞá:èJº¬ªÊ|cü™¶‡_ɽX>ˆz@*¸£¹ëïvUøm§:ž~%Ö²¬`yMEÕ8J—Ö$<ý6;‹¡+õ †©bÊÓ©¯¯Ÿšh ƒÁ`(,|ÛOît: õ3ÇI’ÄK¥RCCCº»»%IšŠÆÒã³ô¿{zz<ž}¯ka²,K’¤§4ê¹™ÓáyÞårÆD"‘L&‰D8æ8nXÀœ#°özáÍ>“QxäO£¦!GàxóX¦Wè­!àh¹O ¦}¿QwWÈeª¶¬³8÷¡ ‹8®Äeyâ¸EKax"äµÁ»Ê  Ô-¥Siþ“þ›|ë¦ ·l¬øþ“moáyúG˲ÆÜYóÄÈh*£8mòàXL¹šÒËü8§+V·ž8òZÄr¸}üîmçóYÀW:p˜Ô­Ç“†#/M©\ëúÎÁu¹ ÚÒ2r4 Ø%ÌœªÜ¸J¯1—̦”Õz¦ “cáb¦¬¬ÁÁÁÂÂBIõkÑŽ¸–QÞ‰î@²V$£ç+Ü…µØîÔ=°Š/¹ðÐÓ¸¢ñH F–LÀl½p»Å‰ƒ©#/À z+ZZ® C ël0âtišÕ+ܨ>YÀÚcjçS“_EÅ…éºz)JéÀÀ@[[›ÝnEQžÕÇr!иü–p8üN‚ɹ,"¨ØbNõ¤%EÑîØZ•É©»÷üâùŽ?zÿª³}º€5äÓ’rNÞæ…DÌ@¤K¥XÆD ThG³g¬›Ô]ÏCUéšÌ?ÎzµG lú>î2n-å=“MqsÎaÅçœ.` "æãÖZÎèWF”1|¾lѰ¦È<‹œ¼€5+ú”™°®”ëþ¦£·”RBˆ¾,XµjÕÐÐ!DÏn÷ûýDQ¬¯¯Áj½p¹s홞Ü1£‚v m @kiLe´®q5€’Á€“Õ#0Ó|]Ø¥Çu?ß;\]IÊ*¸² ¾çþ˾÷в=gP":eÝ¿Qþáˉö޳ÿ»ã,€Ö·Ñ ;ãûÕ¿Þ«‹YK…¹LÁ‹¡+õÎl—]ùȲ\__¯išÃá0 úþñxÜï÷g³Y¿ß?–5µAA¢(>Ÿolll¶ÃÚl6‹ÅÂ󼞙ÈqœÇã™e Oœ8±bÌ'#°æàÅþá;l{Ÿy·ø:røƒŒÚœÌT# @áz£rt¼>“ÑjŠØ¾ÃGÏLV·8|z|i X ^Ge޼óóââ ÛÍf=s°®®nº€%ÂT HUU•þKÛ`0‚ÉdR©”ž,o³Ù.ûc{.n׆¹G`=ýZw[W Èe’w ¦[ šÓ/0‚õeW »já‚ä­ªñÑßS]QûY†TµP“ ýˆ§xùh«‡ùHD¹¿½£·ó€PLù__ïõŸRwï°†³¸â£®|d­3÷z¢tæb1Í! ¼ °uÇ®Ý×Ö7‘É(’4Ù‰,àûÖháölÂ!*Äæàï}ç.$¶bewûX ²§Óí=þÀ«… ÀïOŸÜ&¯nÏõéaµõBBŒJ 1t§¥í—‹ÀRUµ££c||@0,²tšÌý+¥ŒÐr±ÓÙ7ç k±Ã™Ó"n’×n–ç³(·iÛ¬_W¦uöÓê:íÍ>Äå@\~ͰY†ÁHœ®É=/!`œ¥U u‘¸$|øs0^F@áy~ݺu‰D"“Éär¹l6›„ãY•ñë|,>Ï{`‰Wš“F™ýçßÜf27¬))+² ŒF÷>prÀ²ªÉÈ2 ®èΓ&îz O<úä„}ƒ©gçPJ1çz:ù:€gxõÍgÐ5‰³€X,xö7l ·þµBkƒvãÑäMG“ÀïT€|üƒðP'gD™j¦GžŸL7ç4Iwp¯Ì‡_åɳXÉ X³²DSq®t]^Àz—˜‹²)Ëò+^K¦Ú,IÒ5ãïðÇS¹¯ÁcU:£ ¥¥  %æ¼VžF×lüq÷å!O£±¯^]Þ‚iWÑ6燊Ô„|é¨ À k,’r0sêÃ?ÐÓÁ˜-ÕÙ·º$ýÒisONb©ÃÛ/È©îN&“'OžL&“zéÏp8œãðË*E×û†·8ÍÆ öµèO ˆ‰°Ó°é.ã ¸fÈÅ8ܯµw1ºf#mZ ”Ò5“ÁktÙr¨ ZÛp‰Ã[F®ñžËªW:’$M·›ÐBq¥ëûiÍÀËóqîÓ"°¨*7ÓŸ¸3^Ub@ yôöeÿüƒCóïov „ÝNãúåEÌ7¦iÛqà¨%©¥j*lË[³…¿ÿýl|DÙ÷ú-‡’O5ú¡}¬^(ïWFÔZÞ@Woà¶ß‚È­Z«îÛã|ýÀcƒbÙ¸€nتzK;vPu€ãV*£‡Ê•‚Øùç¢0?OX PÆÍõ¨.e—'Ožd‰…]K–´€……[á÷š±t/Œ)«´´ôâöï=: `K“ ˜±÷÷õ¥XƘÖpNÀ2å=°– ×ýx|ïp=u¥H„ýë\û–˜$±Ž@d™ CŒ`€,ñßVÿ‘{›:=¾Ð½2ô[ë¥#°CW^:…pѲx"°”¹¥î92Ô5öš¥Í£¶È-Z´1Wûs¥9&X-æÍ6TŸ=iކ ©„%2YÅmÅ.¿ GQ5åFÿäCk>õH §cÒÀb1p”°‰ îæ;ˆÝq¯<¬=÷í\fÖUž§$­(³8y|@Ý·Gk;úÄO_ÿÛ~/€‘¬€6¯š¾»‘Èk«Td‹)Î(j«½ën7l&€ ÍËî4lÚiØÔ T}ð+7þûĽÛRº4 ÉÄ®w·^''™Lšd¹®ª¾g$£iZ8A„·üH]$ Å”ùŰ۠Uò^ŽÐ¸–tRÛm†M˜ó5‰ÍŒ‘ŠjþÞGfØ¡¬‚Ûy/·ó^r‘¡ÕÛv³;ùº{©gýU6CvL¦I"ÏjG›æEI$¬¥ì|I¢‡o[ÆQÒ5ðÈÎe÷š±D×ý8—BÈqœ×;C\ô›ÇFl®W„2öj;Å&#°’2òXK’ë~<¾w¸ÎºÒ`´?~[º~åVçOƒ ÆÞ¾‰87qÕ“°Ù(ŽÅ|¡¤Û¹dÔó¹(,‹¡+—è g.úà5€š‚ËG5}ïÉ6kn—Îj•¬ió«âÁ45e†í£p€GIi‘d/Sм€¸ÜÂýÍv4âtXdâ3õ]äÍ 02¢?Š®©(€pqÐå«Ô7^Qß|ç2³®úd—×üòôÈé3£#Öì¿—>$ú·?šO ðl[º%X^ëšÚ_æm ‡ì@ºØ–#’«„p+ĺˆÿ¬í¦s^í¹^d‘-I莋X"®—«;¾„èííeŒ9ìö†·vÿÃsyªŠ]¾´ãøX5¨ÜÛ(Å’êßþ` W·ÝTù¨ýÑy:ñú ±V sú3_ã‘Ö7Bɺå¦wTOiñÀUŽM"»0"».¿÷e™Å©2š=_i¡ØeÚ¶®l÷þJÈcw6Ðz»k2ÿâFÃ_.¬о½±ìÔHéXÆP4O‘‘H-ýP£U5àÏ'<’‚Bnç½Ä]¤üêÇ¢-N€Û~»~y°LFÛ¿gý©Õ¶ ’…ùÇ!˜§®Ôm°H^ÀZ8Ùg‘“°fe‰.ï°Ð–Ív¡íèuÆÒ½0ÇÖ­[õòä¼”Ê(‡Os”l¨Š!ƒPÖÑb1%YؘÑ$% ÀœÀZ‚\÷ãñ½ÃuÖ•NjÀØh­» ÈËFFàB…±X15o‘SGWÙ²{“8tjüή>éì3—ùw1tåÈI ¡¦éN—ùúº‡Â¯äD¤¶vˆ`[‡r2[ÉÕ·ÀT½œ"­®SûІæK‘Rº¼E;qX;ð†¾A6š±ùVv3T•E# ”ØìtÝfœs½¤ëß‘#òò–J<=rÚ§üÅ„÷õˆY$l¥9u(f&æ¯ûm¯|uïûooøôV=óz€›Ö•/³ øk‰ €M;lÔl ç3Ýš„ê~q$æn³ÈêDš *¼'#x[MÌ)9Øn·7öœèûqOmÁDâý7»Bj±TX|S!˜ãÙƒ÷)äì)Ú>j¹gî'8_ã‘”Ure•ór¨«V¯€Š\ŃÐrÄ0úË”–(ñ*@sÊô×ß{Ãîý7®--õX˱áPúó›ŒI‰\ì;!ˆ¦cõ†­'’k:Òê5S#ëú2SN%m]:þª£kȺêFÄáävÞ«¿”ëî>i›Éhñ0ÿ8áyÌSWÖ e7È­"‰üΖç*X SdžEN^Àš•%º¼ÃÒ1‘]¢,Ý € ›ÊŸì üêųٜº²¾ÐJO3 ”±‚´–)Lkšm+Êdƒ%_%Ož<ó„“³±(·u‡²ëG*Œ}dš4ÁBÕ4°îçƖœ€µøçß%J¼H,E.çàÎþä«/jŒ•ߘÞêjjÔ†9¿þ’HÒU ¹JËõ. +×@·×l]wéæùÛ¾S;qŠE‘ß|ªŽÊ²Ì"ah±;Àq¤Ð3õkÿ²|u-ÁgS2RàÀžiîËòVвo6Èü÷ŸlH)Ë0KV¯kR±*â. «J·²Ö'ÅŽWöØ¡3%y.òq×»Û]XX?ØÍŽìÿòpeŽ‘P83ÌZM|ÿXº$nUÆ‹Gú&ß \Þ™þ½ç™ÕiþŠÏiŽ‚ pT8ýê?Ç-Ê]Ãïj  öAU™·$!)&b ÙÔ‰|t™´õDruGÚy¯•‚äº:0»)˜çÁOªÏ<át–]°®\£î~€b·ò~d>»ÞA­4ß9_GË“'Ï»A^Àš•‹‹Í-É ïze‰®ûg$žÌÞ÷Ç¿íìŸÐÿÝÒZÂ2{„2vJHŠeô»œ·]ºhNž×5à¶›ñâÉjq9ŒþPrú>üÁÕÿç[o ŽEYñ'ûÞ¨œ•—8¬•˜ à^–å;1e6íðéß…küŸßh0ù5Qª­¿á—Ÿ|À#+»üé­cvƒòkÁ²œÎƒWÎb‹—óX"SUb–›!&_UµÁ>,sBÅl€7Vʤ’z¡Œ±H˜6¯¾šv}â/Ö¶ò]y}ïÇ<—%/`ÍJ^ÀÊs1K÷ª˜‘“~+ê&KÕ°L@D±Ã”Т•>Hùâƒyòä™g¬Ô ª%»ƒE’j,}\Ú0î@ =UF%ẺÆ<…K#9h©Ì¿Kt.[$_¯ª³x`©{úÕnÿñ·îò<£ ”P†çù&9Æ)*²†yT¯€¸v°áAâpêa,´¾i>X·mEýÉh¡ÃP½©…U»a0–|ñ-]ÀZÓä9|zÜ(óî¨ýésgNuNõ%~wÒN >|ïÊË´pFbˆÚËKÒ'† ÿÔç:zÆw¢'ó† |ì³÷Ä’¹Þìû܇×xao¯/”¬+‘Ö”FYs‚çäòfÏï2Ó"°U ˰ìÅ;²Ñad³Zaá>®*,3•ý1À¸“Ÿ¸åFNnyG ›)2+Ož<ïòÖ¬,ÑåÍ ïºdé:£Íȉ³~+ë õYr@Xqhr À&V â—ò°È“'Ož«ÀFM¢Z±9Xß0¯q\•%F‚Â[ðpÝÝã[6-%kÁMš.Ë]á,‹1Ucø™<°öñ…’•^k˲Â_ú›GjÔÔÔˆ¿fÎ{c¸o™÷c^ÀÆuU/ýp²)¯àu›uøìØP>8»i]™Ù(6T9Ou~óJ:Gê¼|eãå­ë¬Ô4.„7V'N ~øÔ)%ÙœúÉÿóR÷`¸¨Àø¹¯é‰~á«{<º&€º7k¾7„ÁNóîœï.Ó<°D¨ Qaé¬PÀH4{ÀŒXF:Y×Ïs‘©žýÖ§¿ñ€AâOuÒ¥o$:L~ôÏŸ FÒ7¯/ùÐÚ~p2_ñ°fpiD´SÌÃ}1ŒÇÅËTÝjQ‚ ³ìç‰ç¿y|\}Ûm™EÂzLqì0lhf(k “7y77ÿ‰®ÈwåõB¾ó\–|Ö¬,]+ïõî±t¯Š‹ië 0†¦j'ÏQêðóP3ÔÞ<Ø]¦É¯0¥ òîKœë{<¾§¸þºÒJM5Õâv€tÜ :2úK„$@ \Õîq Õ3_Ж^s™CW.ѹl‘˜ëXVË…¾l©ŒòÌžŽ#·­/<Ñv¢8fÏòJcc#À˜@Ü+ ¹ïÞÂI‡£Êë‡ïiZÓäÐPéOf´ÔÏ)ÖÌJÍg9ZïU>_Ô/®ùïà$ðÐÊoÿú„Ó*øãßyâDïp¤Ôcùæçøîç‰\Â…\-tôUÇ<å.†ñ¸x¡”z *D!D… (cÎæú<Óu¨h@ÐŒ¡êaÓÌQ–ÿÇÞ{ÆÇq]çÿÏ™í ½7 I°÷&6‰©bQV³Še[’;ŽíDNò·G.qdÙþYq“íÈŽ,[½wQ")±7°‚‰FÔEßÞwgæþ_,‚µØÅ,ï÷ƒ‹Ù;gæ™»÷ì¹çžá ÷7H/šŸõÙaR&LGƘ°Ö%Q¨{‡Iãá%% µ¾(G‡×Ò°C:( ì_p£TK£Xú LÁ2° Æ„`áŒC’Ó-û2RRH©G…T i™¥& pº?0Vc“…I’"4& õp&‰{3\kÔÓM\.—Ïç;ÜÐû¹e)‹¦™‡úN m+µ¯×j©³‚Œá²”±vLòÎd`çšM†áL«ª)gó*ÇÀŠ>ˆ0 6‚N †Bwç¬ +§¼·£íWÏþË[ Ö/+ÑÁ.~q_`o¯!2C#¤Å¢‚;cLTßú^ôE´÷©ÄáÞ×é^¡=[ºœ&nµnÁ¥šâÁ-×Ι@[ ÆÕ `]…ºw˜4^R¢Ü»b4¢$ÿæù£¿~î0€™™R÷»òÐ\ƢϓU]Eái]2± Ñ² ,ƒ{Ì$ú B/IIÀ9eAR¥ * õ[aIÏ()HH¿Õ%C¢V£e’i…NÆD<ò8àD™­¥á¥¦¦¦@ Š¢Ûí`à±v®€Á`ˆ¤“·4»¦šK¨§5ÒòGðh“摾Ñ%„éíHô @N†!ŤqzB‚ÀM+W‘£èÃ\j½!è”ú>!ú\†”éÓJsûm~Á`ÍÂB¬ÐËãuß6©Æ¹¬‚{œQ©h"”PJ i»Fot9­&fK:I¢´ cÒ¢0ß%ž(Ô½C¢k`¹\®„7>$G«¾Åöÿž©%ùžÕëçéd[-ˆÀç®åó7Õþim¡v9ä“uËÀR6Éݯ*’OJóHwK*uwø‡Ç¾íÈÿ'"¤ÀTArìæÍ¤H–6«;±ÖŽ“ñL M)•;–%vŠÎårÑ2X‘ÞÔW~/8‰ðò\zº¹Ð§ 7w8>ÚÛý`(,%ÐìË£”ñW¹NBŠ$H’ÔØØ ¬¬lêÔ©:Ka›#U&ÚèÖ·?iõøÂó¦eÿàkK§ä[P_gVÀëçˆ'kéȇ ®ª*UtÐPÙžÕsJbÍc0W Êþ>¡(×½SŠ­D”{WŒ&º„°¬0Ev7àÌç,”4C@@ôÌGd0ÅðÂèo×”T·Ùßl}$+‡_¹Ž«œÁYªEª‡²m~ÿÒ1½î—67&Ðì˓ؔãG¹cYB<œöööP(d6› ˆŨtÏ¿ ÀÝ7TEÿ¥§#µà¶ñ¦§¶J»·àjØÃ×.‚žhUDÒP˜F¢ïc1êë½[tý Ñfzdã ,Æø4zs¹RÍÐp•"®ël)wbIMŒY ã*#ö¬;vÜyç™™™‹eñâÅo¼ñF̘{weìÚµ+!ÇÑŸ%J¼+FdÚÞã"SòÍÔÓ€˜¦ž³ƒÆo È gÏT<Éݯ*’OÊhw×pV*JbzŽðà7øõ7“Âb.e:”H·×ØõþðÉþ»ÿO¯ŸØs¬'¡†_ŽñŒ¿“AJæá|*l6€²²²èÑ%ì¶ÖnçÏŸ®=ÔÐo2¨oZUÝ™ö·CÝŠœC"x›2•›·˜›ZOƒ„yT&&b( ÛK½[Îþõï@µé!Q•–¨/ÝÞ§f2ôGÅ R Nñy/ÜH, ÎÀbR&LGƘľÖ5×\³zõê7ÞxcΜ9õõõ=ôÐÐÐЃ>óM4̽»2–/_žãƇèUUôBk¿'–r3 zØ"OH¥ÿ˜¶@ëBÍtüö`­¤÷,+)HîþxU‘|Rš9#<²‚rÓ5xœ~¹zÓúBÃðŠfÎ2 ¼š€v µú?>¥yg{ëË›u:UD”þ—ZµÀ}óÞ¹?‰¾Ç3þN)•»>þN$ñûýÇ™Íæè;’Lääd¿ðþÉ?¼|À¦µSušaZµ@ƒ°“ôeNÝðw$-#n¦*31ÚàrÊž >g,’ÙÙgÃy{†4 Çëô«ÉЕQ«)@­ Ñ"@Ìêv@¢XLÊä€éȓذyä‘Ç<êa,X°à™gžÙ´i“XÊu„A‰(7¬9Bk· @é™õƒÇµòë¾mÞ÷ï’AC4¬5PA¢T­ºJ v0Œ„Àƒ3pz¯ìwÈî´Â’ý¦öþp…v8nîÝG#«fÿPÜù'JN­(³}|*ïñ?íñ‡‰7yc[Ë“/pã5¥•%i =sPÊø«Ü±,þ,—ËE)µX,#a4Kà°u'€»®¯úò­3Fö—%€“:ý¶µ:½ƒL>µM´HörU!b(á@e€ð9×€œýâ4å"rÒDØúÁÄÍÀ²vàªfÈ Ç sË×H[ÞC8”ð ,ƒq•ûÖÏ~ö³Ñÿ–——wZ ­ ˜{Ǹå†5GˆÀ*/L¡žfÍZuz*=nÀ‚èXúƒÁ˜X²ù4¯ìÿ­û¥…šC…þHªäÀì<šúŒ÷áS2d–Í¿/òˬ0ûøÃÃ#òo_8}Qßb›T,¥Œ¿ÊË¢6Çó ;N))gœK`wúZ:£æ'ß\~N qèQóBNÜŒT.¹|€^ihøNMt¹ÔoåÌSù¢M£÷´…AÌ3°Ÿ•€lí@rò„i3©ÃÆÕÌ%f D‘L)O´} ãª`Â}—÷߯Œcï7ù`¬+£®®.!Çʽ+Fˆ°J ,4`ЭQ­ÒÎûógþü¿¦<ð9Ãêh÷ ?Þ§1&3Éݯ*’RʇL›rø «8ðºo[É¾ðŒƒ‡¸#§"íµ¡€xÕ·u3_×1ê”P¡¡Nw—®kºtó `<X“AJåŽeQ›ã“ãf·ÛÎ `ÉÀÁcMV-($+‡›1›_±–˜-\Í\nÎBb0ññ †I™0c2±,»Ýþ½ï}ï‰'ž˜Ð£LÊuﻄ¡¨¨(!Çʽ+Fhêp(/4Òà LЯâSy3€ÙêÊ)Bþ:ÝbÓ€€†=M&)HîþxU‘”R¦p¦¶Ü{½nézÝ’ôÞéN‘SÇÃM6êWÌRWhè ßǨ°Òèp÷"Ïèê›zaø%ÏÒdR¹cY<§è¬Vk}}½×ë%„ŒÀ™%„­ÝNk£& “DÐh1rìA(c“ËgbtÀ‹‰&K9ò{‚X“¡?*¢:[>Ÿdç%Ð’‹Â¤L˜ŽŒ1™ÀVÿ­·Þúä“O®X±b<û“‹ñ裎~A]]Ëåùwô¦Ñ¯].×èð핵à÷ûqÆUJ” WÖˆ{—,Ë$¹ÑB4,800 Ð³8~¼îäi;€ª< TR BR9óH HjCáL-ƒIx¬…ñ·p^TèY°X,–„Û0-Ûsäs†Õ·Öäµ­à|f/ñî Ö¨QO-kH[¯[²F·Ð«%>-·ÒäN3kî¿ÅiÑJÒ"€úÓŽ;#¯‡ŸR'I—i!*åÄÙ0žF–N¶ûaÌ¢St---q°ad“ÉÄóüÈ&I¦QlmxnÕ‚B4âiÝû”Ô»Eêý\HµäOèuHš2ùTŽ›ä ÓHô£Mv.k9w^ ¶ €éL+V6Dûc¯ƒ2Z8SUÎ-8Ñmlg1òÕª€+ÉZ¸t ç9® =‹«ª…G}ô¢aLd‚f±¬VëÆñ‹_¬]»v\v‰²äŠ9xð ×ë]°`Ѩ°b@ííímmm%%%S¦LI´-ɆÕjmjjÊÏϯ¨¨H´-WBG{Å/d¥éü¦B<ý·Ãí 9™O¤gd™âÍŸ¿¹Ñ¹•_ºŠß¸é2M1 F ùÝ[¶“i{#UÇX8Óciÿ8âûüÌõ—M9–Ú+ÿ4wéÚõ‡ŸýMÆÇæ»Ø?n4÷»…OßU’göÊþÉðB)ýä“O!«V­J´-—cç΢(®X±B„DÛòé8zô¨Ãá˜={vjêĦ ûýþýû÷«ÕêE‹…B!ƒálâÏ{û=y§yïþÚE5¹/ÿâ&ñˆ§~Cg“¥ì¾õžuºEjaÒðÇz¥¡ï¥|¥0Z5ŒÊ‚ÎïÎp¿z$|êaÓ¦¹šêXɤ7K[ÞÀßt;¿x\Ù ãªeâÂ;â¸ôôôÜpà O<ñÄš5k&¢ýøŸd öŒÑ(·ðm”†Ó6ÓÊÒ£®v¯FHáÌ£w ”äèYTƒ?ÐU `Õ¨ËG½+µólæ…ýbÅœSVð½ }_Zb/Éõ»…~·¹¾e¨$Ïü7ï{_2ݬ!êKµ”2þ²%„c2’ù(ÂH˜zÛm(RxlVM I½[䡃4ÐKt9\Ê ðÉ÷zÝ|zêD[˜4ä½ÒЖÀÜšËÏcÌ!x2H©Üɘ¸y8n·gÖ—ÐZ¿ûÓ^†»ûÝ–¤”ºÞ¢^Y›µ«d閌̔G¼’:›ŸDÇœäDD¸?T÷ºoÛEÿ~å~!@CÑX¦X×Àš ýQ)Ü®¬’›»hrÎq2)“¦#cLbŸuýõ×÷»ßݰaCÌ[Ž3Ê U$6€µ|ùò„7>(×éÿí GÎÈ©oµÈ,æ‚þv5У*ùs2°d £ìP6sVb eÄ”äîWI/et°­”ªœüÞ*Õ9ëßUDX–³ZÂË¥]IúírG=GåÏß:Ïù»í™lïœ~Gˆšp4Ü8Öq'I’,Ëü%žå:¤dΘD3°F×nðâÇö.»ö—»fuÚD£ŽL½ “ziàyƒßÚf9‚ËÞœr‰Va¦zªD¥Km=nìû~ézÖ!»1EÜ'CT \éT®tò¦2)“¦#cLbÀ:räÈÝwß}÷Ýw~ÓápŒ~±"P®{—ا&7ʽ+ê[†þðòq'ø¼Aµ'âˆ]àRÏ]B(ËÐIl !ƒÁˆ7gXÕNU¯†¨Îßš–`†/UàS‚º,øûôÆ©ªÁ›gº^;’òò+Ó¾„ºp‹IÀÅÃFqcò¯"Tî@†xy8¢(úý~ŽãL¦³IÊb$üÊÀS[dÕåo‡ºÔ§»,ɲuD“Òã\ó¤{@Ûd¦DÈ+.yÅ®ÑÍû™ó™N±€žhuDGÓ ƒ1éˆ}k2;mŸ åzx“ß{V.ʽ+š;^€N#[lðÀ¡1^§[:]]6z7J©A Àb0ñÆL-7ê/R˜¤¦ A_(ûû8}áÔ_]ÙøÆ‘ë6Í´½ÌPc¸ý¼ï´ø3ùç”›JŒxy8V«•Rj±XF_¥ÍÛÙ¼Î,ÉO46µ]¿Ïwf»gdO£)Œ‘ÆY¾i¹ûÃÀ¾™ê©ÓU îÝ ƒÁH8Št_âƒrC¬ÖÄ¡P¿_åŽ^wôueIZ¦¿5WÜjXS*äÞS¦0P?€'âo'#æ$w¼ªHz)‡[Š)ç~) oMI!Ôå„, %w©ç>Æçß@´¹e™¡k‹Ý‰øßÉp4Ü_«/Â䯥\÷qñp"‘Hgg'€’’’Ñï?ÿA3€âÌáë˜ÕdòS\Å4~åºÑ\yÕÄ™w’ÃgÜo¼q¶ºREb?ïžðþȈLÊä€éÈ…=>9ž(×Ãc5°&…Þí=nQ”ó³ŒÅ¹æ’|sŽg@Är‘BT¦z)@ Y´juÜÍdÄžäîWI/噸Õ%TÄd¦nu;IJ8íl#A€‡Wn~Ú\»“[z'9Æ5}×$ò+zÌ!8áR*t ‹2ÑŽÝnïèèE1===55uäý!G`WW«¢ÿûHÁ†ïõpj,ËëS?7 7UT* ïŒXÁ¤L˜ŽŒ1QX"INsËÞ×|[]²7ö^ ¶„pB™ÐËër¹Ž;æt: !¥¥¥£7¬ï“)æûÚól³ª‹Ó§EAºŸ@Œ¦K´Ç`0 #Æ(Ò}‰ U@ Þ³rQ¨ßßÚåP^˜bÔ© 8©×ˆþ¼Ýä†ãÂö÷(Èû97&ÀJƒqà—ÎÁ"ié仩Ã@n8.7ÔQ¿ÀC³mÚ>RSöÿÕûn'p&ÿ’rÝLðå™™¹téR£Ñ8zÓá“}æú?$åkIÚŒ …ZT>?°ƒÁ`0ñBa¿Ãã‰r=¼ÄzÏÑ'O'+ `µt:”¥€ÊòÐ>'õ*§½íµŠ/ÿ”~²ªÕR‘Ü:^=0“†ä—r¬ ¬hwùøaiçÚßCmƒÔ>Dš=VÌõé%û€Xxr–èN„[vÄÉì íkN¸”Êuo—VQQ‘Z­>oSíñNSKE?Ï‚ƒ×òÃùÔã@Œæ ›b(…„÷GF¬`R&LGƘ(ìwxÜ ”RJ !JôðÀŠ–>MVê÷·œÉÀ’ú·SÏJ8nÐ鈖öZ¥[¢âßþáP¤fáÓbŽ$¹ŽWLǤ!é¥$cÁW1_¶„ÈGȇöGߤ]HàRð…ü!- _0Þàßì»d[ɘIÐ —R¡31Q&ÎÃñx<Á`P£Ñ˜LçgT…#Ò‰Ó.Ž€VD€È¼½zDÂP©¡ÑÄÜFÜHxdÄ &erÀtdŒ‰"Ý—8 Ð8E”İjjjrÜø ÄƒÒá%„S4Ç$ë{^Ê0 œ–‘ëI›ßŠþQ§—¯ý<BHrëxõÀtL’^ʱâW …%ü†[¹òJ„ÃÒžO†ß•«‚ÛVÚ5*nÛοü²·4X¢á¡móÅíkN¸”JÈF˜ˆ" @ ¹¹¹µµ@FFÆ…W¦®y0AyV¨9K•ÆY€’ÅæJä‚hCY$¼?2b“29`:2Æ„°.Ž¢Ý»É_€C¹(qâºwÈë D2ÌœÉþ.¤P$uÚ)&º~ÚpÓfò+×ñ×\+|á+/àyã3 Å3æÀÅ-Y5¼ŸF • <ù¹Ôéû·¤éµÂÛZžÕØ<6ÁÆ^ÂÂI_†’y8çáóùº»»€ÌÌÌ w8t¬ @Mq M£ºÛx½Î•ËÙ3 Á0°õƒ ƒÁ`Ä%ý'Švï&¿÷¬\”xc4w8”eI¸ô¹¶ü5 äl‹_±–_3ÝMÄhŠþ(PÔù1Œd`œ_;\E5ÉÈÀUNãÊ*pi\¸wÍÜÿÊãkÜçÐI†iðMÿ'›{­âÀD~>“I‰31#LÄå ƒÌfsaaaJJÊ…;ì=Ò µ2¬#Újõ”ô¦%|¾*à{!ƒÁ`0ñE‘îKPbœb„ÄzÏ»víJÈqãƒoŒú–!UÙn|á-0:‹¤Ÿp–)p$Éu¼z`:& I/eôkUsà"„[²7m¿ñ6ÕÃßâ×ÜÀå\(¨ô==£Díñ…'J¼ïßýºoÛ¡ðÉ ¶ý<Ç‚.¥²&Âà …B222ÊËËÏ»,m¢Õ í©rÂqŠ*_/83Ô5ÖÆz€=‚Pñ$¼?2b“29`:2Æ„°.sﮘåË—'ä¸ñA‰×'Z‡LÏñ•™¨S}4À@´ðy @«ƒáìã· Ç‘äÖñêé˜4$½”dì*XÃðsƒ‰«˜FÒÒIq)1™¹Š™<]¨d¿©ª@×nõzÝ’¹šj ÉÀºLtÂ¥T´‡39æÑ–V«ýf›hýní³?î~æõýÇÌ*ôd EBI¦„)™i`XÊ'áý‘+˜”ÉÓ‘1&JúOíÞMþõ ÊE‰7Ɖæ!Óó‚CZÓæÀÞq€žè.L¿Â™ô%ƒÁH ¢_«ã¸4þŽûÎ{ôÝm°– gº8‚=û®åVܤ_  Gœƒ/E4Â2™‡`%ÎÄŒ0qK5£î¨^iè§Î§wlÚõÝÔç^©°lf0È‘b!€$ç÷€° ƒÁˆ/Št_âsïEq7†ÇîèukÕ¤,3¸_p½îÛöQ`_†Sœ±¿SÚ·°¨ D1çÇ`0’Šq\\yÕoqªÏ?Äq rŒ‘%¾`Hܼ«-›O?$9C4sS/Åä‚•83ÂÄ-!Àê—l(îÆˆÀš–ãu ¼‡ç>oX·²×lñÊ‘T‹pÓíüú›IAñèý£w !I®ãÕÓ1i¸J¤üìãI©°h¥ÕS}’L÷âÑdh­ŸÝ¶ñ0Öœp)7&æÎ…° Jvw‡`~f`}¹û¶kÜN‹VpÇÙ%„>ÄtUtÌ$&áý‘+˜”ÉÓ‘1&B¢ ˜¤0÷ŽqQ”ucx|áOj»Ì,ti-Q[8ã†#€`Í4ÃÅÎb$€Å`0ñ„‹IÀOY,wî¹e¶móIß_?±y¿¾ú?ÉnõÈþ2UÁ4U©ÓmÔZ8ãÝÂÏnö…$vÿxPÖ@v1÷p.,€`@r˜Z(€ŠÜГ®Î P& €$C+‡ C¥†Z+K ƒÁ`Œ ËÀº8̽c\e­¼øã+Çîàâj]uNpHà3ùT„Cº'ÐYó.ú‘‘%„q5”Á`0Äbä"yÅP]7Ýý‡{­ù™Zk¿ìä|Ñ7½îÛv4|ª[ìÛØûA`oL ¾ˆ“~VÖ@vÀÒjµ#ïD¨Ž8ùÓ€ìé%/dšëõšÙêÊêr²L˜h4ýŠ­d0 #®(Ò}‰,€uÅìÚµ+!Ç º1ì®àŸ^«ðÈÍ<€!AÈäÓä㇠¢¤Ôœ=墟Š& p\’ëxõÀtL’^ʘ}¯§^.¬­r<´¨@×îà¦~už¦À€äpÈÙ'BŠÍÏ?þEÜ.¥‚² ‰y‚Û…XC²³2jêј={ gºÏ´1ºU”ÀBý{a2ðþȈLÊä€éÈÀº8ŠžŸLìú…åË—'ä¸ñAA7Æk[›½Èš…Es œl*>‹K•j÷æ/UÕE?z’ä:^=0“†¤—2M‰ÉÄ ¿bç©Dk« ¡Û è%ý:Ý"’Ý.¹Â.Ž‚º$o,Žv>cqO¸”Š`š֠d/tˆ=.A£"³ LœáÓM¢€€ŸÙÏAÎÀbÜ•OÂû##V0)“¦#cLð;ړŧìý~÷'ÿœÖþÞ&¹œèëêóÄâ£>Ù‡`ÍÄ\Hl//¥4àÜÖ€äpÕ«(%Õ%Ï=`¼©Z5€´skøç?àÞ|îÁçfzöBƒÁ`0â"Ý—8  8Å…L~ïY¹(寰»‚Oô©nõü|²äºí¾¼Gð³æCuñô+°X #A¦`ÄdV-D³¶Æ`óÎ&ш.@Cµ'úD?ixÆpÛ=[?ÿOomøÚkÛöwÆæ¨=”2]”Xy8áp¸··÷È‘#çÖÀr»¶2ØpM€éê2´½EúàMT¥žêªòžËÀb0 #î°ÖÅQ´{‡„ư’cé²<êWT»Ø³9°ws`ïfß^(dÖzÛNI¦KgçTP)HIukˆêtüÊuÜÒk.óA™G’DGÓ1iHz)£Ãm,£>¼VÈ»iã4GðÚÖÖ¾þþhVK](z<—+¢Ó.oèKßÿ`ۘŰÆ.¥¢=œ˜Äûûû÷ïßêÔ)—Ë¥V«gÍš `õICß±?1Ðs|[£‰çpëŠùtsô#Ò¶ÍøU×ùþÞÇæ¥2–ö–VqåUŸù„ &áý‘+˜”ÉÓ‘1& ø)žíÞ!¡3ÀI°tÙGß²ýì»ö_;d7€á–×}Û^÷m{Û·ÃwÅdÏnÛ¼»ÀuKJ²P9)aãmüú›Izæe>ýÍÅj`% LǤ!饌mV.eYY_á Fð?O¾˜¾×«ë¤¶€Ùÿà¾÷Ÿ3¿úŇn›I)þüú Q”6Hòg~ âX¬„K©hç³ÏÏ 644ˆ¢˜šš:uêÔ… ¦¥¥E7 HìÚ£ ‹dÉt]f_“ôΫeÚÙ&·6B«ã—¯õ¦-×ìÎ][ü•¯‘âÒØœ#q$¼?2b“29`:2ÆDH´“E»w`«?Cõa±ÓˆMr¥rf¯`â ‘H¡‘È‘füQMÒµ_xû¡nŽ5eÒ@?ÞK[KMÕsŽùÙ3XJ½ó †B™€ø}Ö7ôý›‰åÙ=ZìA~~Š»Wz{¹ÓŸ/kÔü?Þ3çoï4ì<ÜýÐ>ܺ¿ÓdPWMI3ÔßùÒ‚i¥éWpÄÉ¿„ð*¯åv»äççWTTœ·É!»E?yk €Û¯­’ÕÒþùð~¹î~ñ èôR@ Ì‹Ç`0 †âa#ðÅa¬«™=ÁcÑNÙÀKýJ„ÜŠP¡ñPg}-¼<ïíj †ÄE¥áLï{²í ÇÖŒk¥Ã™;b-d0Œó.âãa‹¤gV¡õSG SÉV«šÊ˜[à¿Ýã®ÜÛDmƒ£ææUe”bëþNž#_øà‰¾­û;ùùvQº’ Ôäíá|öËëóù¤¦¦^¸É!¹OþÑØmfä7,*—[ˆï½&·œŠ¦_$ @àyõ ƒÁP:,€uqíÞ!¡´ËåŠÿAcE·Øÿ¦ÿ“N±/úo4€å“²ø´j¿ˆ3ÁÙY—0+/ÍÖý½î×·6¸yÖ|@3ÐŒ½J—]8ž¢I§l#0“†¤—’`BÜè¢éGÍ'÷-8ùë;»¢o..õqÀÒS½òþ]î»içžúÁúýÏÝóÊÿ»¹(×|¢eè/¿’#Ž5þ&\ʨm ÍÀúì nÑ–Á`ˆþKú¤[¤[iïáC]´&­ô«k;¹—ÿ2<"†Bø•ë ÓØ(™\0“&erÀtdŒ‰"Ý—8ÀXWLgg,ç/†/Ô‘ð©÷ý»hˆçf`eñ©U¾^eˆìj„WÛãÜ-üè{W}ù¥}Çz5‚|}•{Àé×™ _šmÎã/Wúj„‘"îÊÔ‘q>LǤ!é¥$ÃX1n–«šÎ¯\—µvUæŠÕ«Š|k\—z rýQP:³"sVeæ÷þa8ÓZg¨+®Výô[+Á;ÔÑã¾Lã2hsä|]ÆŒ°$\ʨm õp>£{#IR0ä8N§ÓEß‘”6¿%}ðfäWÿíúc€//³ÉaÚq¿d%b¶ðgž­’&ð$á:2bÓ1i`R&LGƘ°XGÑ"ÐVMMMŒ[”Bà51nó\Ä–ÿ#Ú,>ÿ† ¿k­ÓWÌ¥e‰Äv(öàÂîunß4ï µ„WC!õuÊî&.e:¤xÝåÌïÝÂçß0¡öGiíržîžµXSå19Dˆjáæ;ÞöüÉ!…sùŒñ42º½ŽŒDÀtL’^Ê `‘‚b¾ 8úšžúþƵ†ÙbN:¤Þ„Áø»õºõÖ¾O†ìÉÒo\Qùöë£Oîù¿]ý¸(Ég_?%ø‰>wëþίû¹uúÏݵò_~ôV¯3ðÓ¿µ¨4gÈxù£¦†pk{¤wÝM^j  4q)BExåðIPÄ]ÜÏe.Ž‹EŸ‚˜°ŒFãðÿá0µv¾ëLùc3yÞPá•Â3 ÅiaÕ´{" ÿCÊ*¡Rñ7ÞFL–‘$ x¥Îo2 ƒ¡lXëâ(=€5ùŸ‚4Nd_‡<°‹Ï]N5A‡ÚÞ€šBåC+ÍSSÄâ û­ó¼‰@•³ö€»A€Óþû߇‰·pã¬æ2úü¼kcÃßù׸¸ý®S#²»‘K›sÑhÈ&uî ýDÎ#T€ÔTÐ`3@¹ôyD}‘*³—b˾›æ¸¯Ë?M$= 2¿ªO²É³ùtðãidd !ƒÁ`ē跎<‘Ó.Ä8@UN˜f ;3îÁ5†H07"©Ú#VÌ2¥˜ˆ1JÇ®ýsÛû¿Q¬þÉIóÛõ޷뽯~üô§à¯ûú7-ÊÛÙìíŒNu¨¾ß¿Ã&;t,…\†3å‘Û &óÒ¸<*JÝïp 0¾±#n|F÷æ¼XrW[ BëÎàñ…Ü2ÓE´™0f𛾽+‰åœx8‹gÃ$ƒÁ`0 X"•Æùã|ü(=€•À ¬]»v-_¾€¢‘÷ý»>gXÛfY늉í—õuú·s™‹Ï+ÆACv¢IÐ7äûò÷7?üù™V”ôŸ>hÊ(IIϽt‹õu€×m¶ì¬[Ÿ€.µêŽûšÄ¶×Ü/TªJV¯¼^|þç¾™î ϰ:Ôÿñç =:½X7oÂ"kôsZÔéŸØlàðóÏ¿òу?Ñ+ž~N˜ú Tnomúî+%ÿsOS¯•úwDMFÈ–Sæ>—*Í þm‰Õ¡¾úÐÝkiE"ÈTò§P£Ëbo ËÏrdw#‰Vk—óGÜ'ÉtÙÔ€Q-ó™Ë¥m»%ž<§9$‡ O×úAŒºóÙà‘0“†¤—r‚j`w>ûèã,Uœ&@4¶·u±'¡-,÷ô ¦Rê9f ˆ³Ið$6ßͦØjfiëþ`zxÅÐ#×õŸ<¬ÝY—åŸÍÂÛùŽÁ#[ü)Û·š ðE½­AMzª¸ÙWÀðþ—óOß±Üoäô¾ö_[×,,¼÷Æi8WÊP(¤Ñœ-òXWÊã²_æ<Êç Al‹þ»@3=3Ú«0ì8‰.+DŸPöEÙÝ(¶¿¤žù#«ÝeÛ!²·°¨(ÛŽH;…¢MÄXòiC>£{ãõzüâoÇ_þèt(,Œ„à‡__&”º>xáx†Iä.=W„Q5°’¾K^%0“&erÀtdŒÉ„°>üÔSO=÷Üs.—k¢c(ÇÃM»BGo4¬Ë$¬+`9eO†ÆYih¢Iž%„ÞÔß#»ÛôÆ2UAô}ºßÊ¿à¥÷¹Üž··ݧÓ-*ÚyhÍêÕ 4F%ëRß6H! ¨ Ýp©ÊÒ9Ò'ÙäðéÔ”Ú¿èÖ€ÿp®ú´3@Ÿ:<÷ö{3U""ˆ¢üÝe:½Z¾é*Q’i}ÂS[‚_¼³ãÃ>zq»gż×6Üp}~¶‘ú:þð±a_›á–_©ÿaMC(’¡K+;Ñ)¿} è œÓ/~y ûÉ£y·.ÑfêÄÓG‡Â!ºðVî‹Spžô„¹Gër}b|ö›MSέ‰”B%p·ýÓ[vWP§æîš7H …œ~¹äÙ5”&ýRÍ,3Õã¼àÑþªØ§0 åy—ÑõEŸ/dw“xê7åC­ Ñf«ª¿%ÛjÅÓÏ E"©(»S­ù§gZÕ¹Ö:TÏUt©6l9õú²û†Å¾å{wVÙﯲ‘b 5¸|[Rôöy yÿ¼ì¥¯¥ÜÑÔ8X×½½¶Óí í®Ù#x½ÞcÇŽÍš5+Z’Éëõz\öˆH?¬uòrÓÕ‘z’N3\:¾,_›fŽ;ÚK© ÐæõÞ™µéÓ^É× èèà™iü- ôAŽH=òEŸ)²5 ÔÛŽì• bäØhØ@²¾/TþýgÒà³A!„PJ)¥Ÿv–Ñív‡Ãa§Wzö½Ódé¬Ü%Žã™|¸à‹÷Ï›–½#hýòLDSÙeY ,ƒÁ`0Ç„°î»ï¾Ûo¿}÷îÝ3f̘ˆöGs tÂ+ûëí³Æý}<\Ak{ðGöÝkÜC3.µ ÊõÇ¢¯¹š¹$5í¼â“åA‡?/Ó8ö®W Ù ×Sœ~FCÂ!u6¯/JîºÞ¢ÞvQ yü•³"‚¡çØsys¾N=ª-Ilúƒì:…è*)@Ã.¢Í¢­öÔm2§tK»ª^Õ²CÅS ²[¬°îÜ"¶&=¿ðK_pÇÀ“/àþ¸Ôùƒ¦§æÕ—þúì^Ó±nÓ'ö_¾þÒÏY5Ã|üµ#)úܪ#ºèÃmdNUÖŒ©íV÷êJSÙá÷Ÿvä}2¨~~{t« À‡6ï›füϽŸ,w{y¿{Çñ³ÅáÑ'õØw‚ÖäÛ]Áò¢”¿>lÏ„›Ë¸Nê0˜ÊßkÜøiûEt ¡R3 †bITÆ3g® úêïÀe,À¥Ï/¶Å¢B²ÓˆÐq©Ó„´\ÉúõuE7Iý; èA8þí£º—kóþëŽîª2Èö£4ì êT*d×IêmOxÖ•°v×6i œôÌŸžóÄ¿¬.ôGžúˆäæ«––ш'쳈rDЪµ—[tÏj`1 ƒ‘@&$€U__?ÍžG„ŠAnŸ°7x<ά׶Ÿ q×ú*w(衞,MêÎà‘ ߬_eæ 4d—퇣{risFו¸ QV ãšÔ“÷ï’v}þÀ‰wSOšášOß)¢I{K „é˜4$½”Ñá6!¥Ïùì•bÛsáÒçEßáÒæe2õ[£ÿvúsÝ][M|³.ø /H tðâÌÊ¿Ùn]ˆà3¯áò×e7íè„ÙÀ¯šm±ÍØ×w[M®Å((ËÓtÒÁ¯Ï>µÉº@Eˆ(ŠÍ'£M9½b{Øñë_>n@5–hffð)'{ž/öñS©VE]Þ<‹Q"íî…×¢»ßÿÓçºE.'§¨D•’k/Wç‰I&Ä4sI9r‹:lÒ©ç(òt¹«öôkÝöëo+x½Õ_ýÚÒÔá,I¯½e–kfAà½Å; 7þRÿµž½Ï9 øüõ4d—z>”ºß©Çí³ª²‘ ®ÌÃymK³äµk-*³%íùo/W«xiÏ!¤°„†]á?™ªÑðé³ —Ä©•ô]ò*é˜40)“¦#cL”QËG2¥&N?òÎ=µîÃ_}yàKèd±úXU‹Ï0]¬ŽuŒ.úiJñè_?yúÙF• RQß³¿>¡å¯ÿbQJ¿[’·ëݤ_)õlöê4 y„ÕËæÊÛiÈOC—*W±uçžÜó›ï®Y1V½mJåú£dwÖü溶οîFèô£w‰}K È®S!¿3’yDäˆgÐîõè¨4HCeÑZTQŠŠŠFŽûBÇ—hfŽqNa§l«¾æÒæF¤ÞWÿS}zù5iA1´¯6¼iºû–Ë×½§Ÿ[«²p‡5P*÷;"ŽS'®}è’™=k°¡ßÑjhkk+ÀØ€äÝà3ím½Á`2 ?¨š=”_ÂKÄ« "ÒÇÛ‚';w^_YZXòöÑm|‡æúKÿÅw[Î2•Jå/F½¦9Ûk9àÛ ,¥à›ßZ³¯vóMi®ßÚ Û<€™ô¿ŸwúÙÞŸ}”ßcGðí¯\Wlÿ9õ쯔9{âmNæÒžŒ“Ón§íþ––àC6§&WÿÃæ§Jg”Ÿ.oÜ›ýjKê/Þ÷nýßÿºã‘_lfKµY]Þ˜÷¨Ì¥Î† ÷ µ§úÌ"|zFB·çéÈP(LǤ!饮•ˆCséóÐõ&ÑežmâÒçáLê{{ý•‡ÓºAÊ£ÐÉ#rCeªCZƒ*—%P{Ô^]byw¯cÕKu‘eù–²ü¦Sž!—dÔê ªœ“tø"êö퟽jµV«}¦òî-ƒ¿_6øæoµõ|0gÉá&¯ÇLÛaúËÞŒÇ6Yw·9‚ˆ„'ž­{íþ s7Wçäh¤þ'›;ïú㛿øzºî|ü)yAMñºUkÅïþ§‡ã D ºá"ú”âÍ­õ\geîß^9ÜÂЀ£‡ÜúÓÙb O MÅ—oV’†k`%}—¼J`:& LÊä€éÈe°jC C’ã6Ã:´Sì=âÚ±?Ò¼a‡×â Ìwb~c`í!ß ïh‹+h§G‹a9#¾~ÑîäœnÙç•ýÍ¡»jæðãʄ™êQçe`¹¼¡v«ûÿ{jÛ‰c.€„ÃøÁ·Oe5€Gÿó@zŸ%æŽ=xdÍòêÍÛ{¿²Ï­ yÅþ¹5ßwóŒ¡#¹&ó†Üù#"¡oÈ÷Ï?ÿÄî Þú­7¿}ß¼/}nF $n?صó°U«4j>ŤѪyxÝs ÍsSÍíÿ×Z§6 9uÑ~òêüð^QŽmËÑòA__¯KÊÈF€4€À5³!É´aûï«ÜÄ¥Ë-ËèÏžŠ´í3€åm}ë¿_GŽÑW™>°jñ ¦ìn»Ž÷=¿wžÁ o|^ ‹Èá9«_õQ†_PëÕ:€/(Ãòo^³>Wj_^õÐ7o»¶âž©ûÚ-Y]ÞL±î€ñfš¨Q;ûûåÙýÍÅcgÊ©Q0€Õbß]ظ÷ÇûIÕßß9ûïïZ rβº—ŸÅ ‹Dƒ¾J5€Óv¤ va¢> IDAT›mz¢õÓ`·8pÊà;j[úõ²À#µZA ~µ]̾IÇ 3¿ÞšâEîÔÒ\1RÁxaô íhðZZk¯¯#úNfn5°÷n³ã÷s4G4÷®s¤[ÅÌH×I$3ãÝ#áãmXô…gLÏ P†^íuÓÜ©#±TóY+!€œìÊO/õÙ§ž§#C¡0“†¤—2.EÜ/§â³–uꥶ 9g<}-ŠÛP ¨ ¢.¡‘6œgxòI£Ó-l=ÂWvYt†Ý½ó©$À¢Ìú´Tï rò€_¼&+ßr³Å ÁæõÛ_>ŠûñuÝÙ! P¡ œDtíÊZ#eˆXÍïž6<°Ô¦É^p¢%4Ó 5 ªLÑCGDePÖk9hµ{÷îÕéu½Ád2efföY­}ZsX\ ·ÓÕk Ï›–ÝÜéØ~Ä z±ök—¸·ým-¾‘ÈÒišo.;ùý·òûµ½Ÿþ«_ÿÎ ÖÏýÊW¶ÕÂo^è.H 7µYšÚÚŸ»ãýßmª.¯‹õ‡Sßj{ðßß{ù‰Ïd›ì>bͲȊ rϺvƒ:ŒÝ7z|B¨(U›ÆÈ\Žf` |òwÉ«¦cÒÀ¤L˜ŽŒ1!ºÊ,Z§`œ{n=ì¹ÔÖmÙ/ù¸ò7Ò¤šÇ}Á¸´Ì{ãL×[G-iFi~O礆>yg®¯úæÊ잣»~¶Ï ­úW&En~ÍÐüŠ~ÙíÆ‡æß<^Óý$<à’²y}ŽA§ðÆ–º7>ª‹nÔäŸ,³>¾7»Ç£6 2G¨;r¶„<Dk§[ÒUE_}—Zu ´¹g]åòUsG<(Jñøÿn=ÙÚŸ“Jû„Rð']ºþúòoO@uÚ¥É1G¦åw6#Y;]\qÍš†Ö¾ÃÇÛÚÄïÜUP]¤…a*U¥Œ÷”/@E]\¨J¡H$]Þ!É2§ò«¡ E¸º6?f–‚ß’ÌOö––úu„œ=UJÉ 7«!õ4©k†k±“TûIÖy‡ÐÀ9Uz.‚´úv¿*½€Lpõdå9\^•F{©<~›;ò×ï_ŸõÜ–Áyé=„;´Î½¥·tÑžÃmýÝ›V^Ü“îìq.wi¦ Z,©ƒ½F¯çÀüm¨í©UÛN¨´&üò‘ÛuÚá9Û2éVþs#Ÿm29š²@…g®Ußìã=™¡?íúï'B‚jMË\íì¡Y÷{¦ûS¾2ØýH-ÿA.'OÚíãr\äüº°zwÿÜÿÇkP}ï¡Ôbÿt­¤Pá­YóÊ/8YúÆ=9§>ÔÿNo›Úîôj‰1H;f_'vÞñÇOP5£P|ì–Ó ›~_öçû:Òªn"5ûÒ7ûy÷?ÿù¨!H÷Ýôo¢æS?ª¥'ÜØºvžñú¦OûYƒÁ¸b6ô|xÈ[Q ™š¯{ïX£¦. udyܪ°Ñ[?FP 80(ÕdfÔ!‚¾–E-3o‰îS~èµ_­´P[«}¤@Ú‘/í@/±æ/ãI0S>þRãü¢‚l¼(Ê}ÿ|{‘Ó)ÎUù¨š±!H#ÜPï Þ¥184:7€€7ÃÖ= @ج¸ËÍÏ¡83?=DjŽ©6¸åSÌ´8ä37ôô»>þà qÓªì…UBÎO$W¿S}óǃ2%/Þšb§šÛ<¸ \^·®#%í™ü÷›n_À÷V~aÁ $a÷©ð[Gõµõ^ Š.+ón;eZZ¬û»¯Þ(óªBy[Y!±,ŽI)=ä:>Û€ÿffk¶fÓ{! ! ¡¥Ð‘¢ˆ ‚¨€íÔSOÑC=¯zÞ+çéïyŠžŠç{Š€åñTz7¡B $¤÷^¶·™yÿXŒ0ƒÙ]¾Ÿ¿fŸg2óì~Ãfùí3Ϩ¡Í*ipJ?ØtfCa{Nö0™LFDU5u§Ëšô*Z÷Xñ¾ª°W¶Æ5¶%©Á “Ì *x¾ÓÆu9n'¿±H›×¨&¢ÔpûooW3¬þÁ¤¢'¶Eo?%Ù~jO÷øÍV7}¹e¿ÛiV´ÛõãìùËU¨$–¬àÝOu¤´:¾»0#¸j@P—“dDäæÅÍ; ŠÍ•vFJƒn£ÊRs›+Së ŸnPu9c&‹».|ã„M9-ž_ÜÍ"m9kLø¤üv§pî£aˆ¢ý¡¤U‡[SRƒ[u:Õ¶º"%*}¤Åî–ÉN·hêìÒÕxJ£嬯®9Ûè(6I25EGkã:~÷ž-6ÐvÏøz*$"Š:ºélY¯\Ý*®ÞÕêt‰*;4I(QÊ™Úù²/ËKëíD$aÄ»CKÆéÍyiÃò¿,/ýæÜ- “'Éw³Ù=•Üÿݯ¥;Ž(›ˆ¨fo‚+£¢L-òZ"¦SÃéM®´¡RÉM¶ÇÖv®žÀ5ÙB”-æ˜ÏKTD&µd€…ÅóÃÇšNQQ¬D¹–-YÄKˆ¨†h0&¶Ä9EÉplx‘—›\ª¿ÜV? Jþæ¡8AÞd½¥DíäUvÑ&•¬;Êý`Q¸wµ55”æÙÎËËë¾£mWWWuuu÷¥é=»Nœ8ÛýµIÏ.GÀp„K!"*©u”Ô:¨°DîË|Ï —Eé«Mê$3×"Ô·ð!ÁDµt°E·ïÛ1£Ì†™tb_âÚ>FHX`ÙÓfÖ¿Ý8ŽˆfƈSãŽýçhf–DL7©Mæÿ†QÙ%1GJD;[FmmODÃßµ##°øŸå÷ZÜJ"rGEIÛpûÓѰ(wgôÈÃÁì {y¨‚†\t‚%¦tOšPν²VüD.MbÇeñ‰Ê8N/×Û›c gˆéœ[çT7‡Ôœ$¢­9­„§oÈ"}ïsÝm1qñ§ŠŠ†ipƽSpn:RÂ@RèšNŸ9ÛÞÑ©ËbÆ»J¶D4t¬ø×ÜúI¯'ï«¶fìÞ¯³Mn?þ~ÉÝž1ÿxõe‡Ž”4Ûl‚&ìôˆA¹!†àɉ¢RJ;Žšm®‹Tš¬VÛþC‡Ûºì ‰Uõx}kPÁmi ÖÅØ\’í‡EOÊrÁ9FnGçkÝïs‹9ûCøî3@/8Îwþeá8Ž€#à8Â5;¢E‹þüç?ÓOÈ+f`•Ô:Æ(¾Úo¼°+‰¶˜òXï Ý茀¦v÷ñrk®¦ýh«²Þ!KI " 5Öš\N‡Íy®˜5i¸næƒÓf)+·¬>äè0¹Õ zà~å>E»Ùõü‚["B/15±©Õ¥n• m|Ý”ÒÄ;jÜdÓ swµØ•¢lDJ¦¾S©w ˲o“¹E™<Àì43ŽSlB²y⤻¾Þ¡q;S%2‰›ˆœ.fÇ6Íó‡b:L 6`l΀ÌQï~²§½Óú×Û›ïÞLDvÒo²<¡ H¢m ÌN"jS$ŒMG5DÔÔ%ùÕš˜³Íò• j·ÄÝ(3{Ë ‹±ú#›as‘>=Òvÿ¨öШ•í*>ÄÍ‹-.¹Œ=x²iüäsß ËȪ§r#Eg2Ÿê¨®ûYWÑØñÜýÅ5B%oo!bt\çn{è]i‡Y4…­¯±¶û¼¯w¬Š¯xÚ:ü±9Q,ÙÓ4[:Å¡¢ 2™L†ˆ4LC5qì1•"Ä6ÀY'!g åžg‘œŒ9Ì¿ªÍ¡-̹[Už®²ÖÇHN|Õ2)]ouÇJ-Òà¶Ä¯xî1'*o¬zˆ9ªÈÛ¼­dVJÇ|Á8mYò{÷V¥VÙ”mbY¤t@½‹ˆê£’½gýºu±ñ)AaQ«¿:\QÛe±¦¡cº¡«)^r¤0@èQýd$â¨yÊèÁì@iZ¤%ù‡~1L²¶ÒÀCŒ(Ú<ålà¡3†}žö_¬ëL/w¦5¶Ç7¸>½I›©ÊÊvœç6Ro×NßÿaPséŠiÚŠ¸äÑõßÝ =³à?aõ'O'EXŒq f[@àëóôÏ}XÉs’ú›sc¹<Ïnµ4²KŒNgÖœ﨧aeúB¶k[j­rüá†vCèá±OõrêÞ¥DËš*u¿aïêù‡|šßGYRë8[çìïQ\LÛÂŽìàãuÙµì>wAúÏ;‚=]mYùïwF· ¬þDfÁÊ–ðAGsî%"S1‚Þ·“¾†rÉÝ¥0ŸeQd˜6]æv§›yâ¯]ô]éGÆXœâ¹¯XDFØ»ŒsSL7G›Rhw³å¢ckã£î[PÒ$'"•LXzgåÐAÎN3}^¸¡Y{²PIDOÍh¢gˆu³Î.ysL“k`µÓ%So»ð‹7ÄÅÿâáì:͹Õå£L•n5Ùì®:¦²(eÓîg dR<ó\–!øÓ’Uª÷v‡ ±þçÑÊN+kàMLDø(O½Me:”ÌQÌ"jj±¼µ¾å®iCµ™Åe o.ß)ŠL€T°ºX†¡§>)3´™vå`‘Ÿwí%×®*s;)\æúûŽÇ[x–ˆæM ž–è’„ºd±D¤¦¦î¯ ’2b¨^&=ãü/^Ù„åÑòÆŠƒþýOò:á÷o­×Dé£ß¸v3°¼¢€åÙóôéÓD”˜˜è™—DD"ï¨ÚýòÏ—E̾!6=á»õƒdN§ psRöÜuC€kßÎõÿ=ª?Qð·GUŠsô1D¢³“å§ ¢Æv׿#Že/ßúCÃh벿¶¼`åÆ3¿º3*=Añþ—foíÒ¾Zäܸà¬R*µ2TÀrLæ·paãÙÀÉ®“Îû£Ñ™×¿ñNšã‰Õ2ž¸Ñ7ðù;Í fÑ#!™vÇ–§›ˆO(Ÿ:1úpQS÷yÓâÔkÞÏ)C‰áD[ƒ$~£ sy‹ˆ$‰÷0AY]|—ºjƒPºŸš>™êÚ¥µñÜÊ-Ý[˜³å M“‘ÔID\Ø.nŽÙØvæÔ “ýÜ‹ßarkn +„);b¤§dd9÷úȃXÃ0ÑmZö1ŠiæŸ<í'mn1Ë"Ôæ#n~÷ãݯ|\>al„jÁq£LÜ?æµ%Ç !’/¢‹ÂDǯ*brn*/ˆ*½#ñ–IT÷“²Šö·_«”ˆÃäÈ3ä²]E¯‘àbÔ‰DDn“ËÞõMçÍ2)WRc‹ –ýﺪŒ—[ŽËý¯Žc™‡ï”´qV¾‰–³tj@ «½S5…ˆ‹]•!‰v˫ՙ&Tü¯›W«þqOðˆ#­cYNqói7}HÁȈ¨¥Ý:ýÉ/[-Dd¸7-=øÛ›kªùãŸ5·¸oÚŽ'×8¹Y7S¸ÛÓņŒbäwñ»’ ˆaÿÒñ¿[¤µDÄÉ’Üuÿå?¸"B[ûÍWI¡¦h';¥¿û £ýöë1»ÍùÒïI"‘ýÏ«üÎÍüŽÜ„¹›<Ÿ=DWáŸD×E¾±#".æ6.br/'ýÚš÷¥u÷sú‡b%$º]§^g$J& ú¼¿5lèhWc^CåÙŘÿjÕ2á—SZ–æ7uqD Œ¾=@:½¬ç:Ÿ ’>ùiSl“KrÛÜ¿åâ#µü„²}ŽãžÞÑŠ!÷«gx¶ßìúô´«"üÀð0sÄãs‡¾ÚºtþªS·mÐb–LËèÚuV35Óò÷™UÒèi\Ô´Ë|1Eg—õÔÛ‡‹-%MòÅÛCMvN-ÞóÞúÚ¶6æ™)MŒm}ycÄ' Q¡ìâ'3l6[nnn@@ïvr’s5Ýõëµ.7sÿ8š>*ØÎÊ--¥ÅMÍÁ9ƒ#í2‰`d¢]-í “WCÄSK§¤`̔۴·\æ8àrøù%„ DÔÜÜ,“É8ŽÓh4-Íuñ†gæ‹*+q»‚›êœr…1(Ì)“ÏÏ·¶ž›æÝJ’4þ×)­¬èî8-×!«n§¤6»J”é"¥Œu:áij”}óÞÊ©£ã/@³³ãßm;YÞAD&›‹H‘¡²*ó?7´F”ða‰D$AÏ8eâ¾f&:–‹Î¨"ôçÑ!Êgï0hÔ*ϧC‡*$vxHª­Ö"1ȶAˆDJ"bˆªˆÎPù°à[47õþš€÷ð¢–L¡Ö¨ämmm6›ˆÌf3˱¤R0Jc×`»‘+9Æ $›p—ÍáðÜ%Ðn·‘Ãáhjj2]ü¹{ —ê∔xžokkcY688¸sÿ«‡ÍCsi?‘™ò½ «ÝϼñIK‡aþíÌ Î:QÀTiˆJE.ã-YDD'ˆÊ;=…D6!‰ˆa¿½Ç6Ñ}¨Ù»&$pºFÏÃä#ST¡DtÆUù†úø´c®Ó¹k ·{ìôöç+­±±mÿÄf0êxF&Ú›ˆˆÕ¥rQÓD¢]m»¦³„·‰§Rµ[¥1D™[ÊUŠ¿«§i¬[ÅíAJC¹RXÖ/ì;@Dìˆ\F¥‘·4‰]íc Ò7ö¶³ é™BžžÐá2È•$':tìlˆšˆ¨Ò™F”F§«‰¨®©“ˆµš»¦,ÌohµQp 2"¢ö®ŒDFžNùö™²©¹á®ÏšJëôIQ Û©Ž<Êë~X¢[iD÷Ãû÷7v’Vy›ZÉzn«Ä "Y K2UÌq‹ò!{ǨÝF"š.=ÉuDþ³£jr£K”plÒ L'¹ À$‹ÆïÙ¦¤6"b"£µ¬ú¶€è†ñ¶S¯ÃóO|:Q;_=#6#)Xg«þ¢,·ÍêLÕ}„LY²ŽÕt ¦8I]!-«Ò³šNÁ”$íŒÅ±mKænŽœ1ðíOB;øVs-:¦çþ&Á²Ïq\ q³u/pž/3Q[BøhEZü÷ÀDÇrÑß»‰l0§Û’¬°ì4iëÛ·|ý* Ëšóí%‡œ|›y×.{Á¤JO½o°dÎ=WútàÊ0 *ÖV“HLÈù·(a£Ďv¡ð XUNR›’ÖÝņ §$©¿ddß~12ÒU´˜‹¹.õUŠ–UOQäʙ˽4cÙÿñ®_%®ÿïŠÆ”‰ôÞÂÛç¾}™­šäÙ¨TÖË)½”´¿MkjmÕ¼ó¼Á-ž»’ŠÒˆFœ¶´ÁóøÑ:Wz…ƒÑüÍêv»G ˆ(gtð”Ó)»B?ÇqvêË㺽eªûF˜=¬#:âœMDlЈónõ(Zë\%ÿ&Þv¸*àƒ¼ ËÜš0ÜrvnPûk¶°³.ER˜cîN!q¾:}”«äÔ+ƒ–ßÑ2 ÕDjµTî}hƒ¡¢CþÕg_Í~òÑÏ·•ˆ.á7?‹T)¥RÁiiŒ3²ªx_£#Ú¢4Q°´ŽÒÎ}lu¨”Ì0vXæ”+ýú úÑ5ù³Íô˜•Þ½}É)dë÷Û2STwL-‚ÃáøÏ;?Ï3›,–åCÚâõJÅcÏ ÙÐ⸀€s—ªÕç.!ŒŠŠr»Ý­­­MMMR©TŸ2ÑÓÎq\h蹕š¸ Ëw—8²rª‹Ž銊ˆ‹‹S*Ï­4ñÑÊ-9êä¿Ð° 9)ÌS ›Ætˆ.b$Df¢j–{±,±™ß•fÎ% ¥©ç·'H"YbI%·"&3XTv‰ær¾¬:.$Gp´‘T³•kmã"ÆKª¿”ÄÌdCÇ1§ÌE3??×x¦ Y‘Ú=ž—ÇJbdŒtZÀØŽS… æÉDe‚P\Lîb"r,Ÿê^µœAKôU²uP½SúTþà¤ÚªûÈ íˆUEƒ£¤Î¬eÃ%‚HMí®ìT5½ý¥¹¡Õ¢Ò+n— ´¬#"!<\š’ÑýŒØ¡ÙÄqùð‰kç×OÍÒ¹Er:«ïp²2)«Ss mκG€‚ÉNÒEˆˆé2»·6›œÔî6)m¦÷TU3Hç%†‰\ô”¢æÃ)Åâ7Û#ÅV™¤d’Ë/úQšýÝvú·U5–UÌœçú÷›“ ,›¹ü=’Sá\0•ºjr*D¤JòÝO;V1ôkë7WQÀ"¢•¹|Û`Ù€&¾µ‘oKJ3D5µ[VQIU•b¨ÈSënZgÝ)KÚbÛßÂwx~0EÛÈ·'×tQVê­9êA—Ôé¶*Øê¡IÚ9#s9ÑÜ<3ÏÜãé±¢ÉÈïÛCDÄ0lj†öŽùÏ/ vº« ‰ïþºãàgšæbéÛCÿ¹#t|²9\W`qp f5¦½÷»ƒˆnwñ»ÄÛÚeÃ~ó¥‚MO„7?£h"•ÆÈžnh–†‰ÂF{1Šˆ¤)éšÁ Ï–5¹ùX"záhtEODXg‹â²¯ Ÿœ®RJµŒ}ظɌÅÄ¥dGŸ\ÒaÕ "&­ö,›@Dº° zÙ%–C½$ü“ôÈÑo Jÿ€á’®íX—a˜asþ-åhÏGÊeÜš/¿ùÕ[§RqÙÈÊ,»EòГ쀔}Ñ™÷ëj»ê³3óSµÇ0 &“ÉNWé” ‰‚¨Ô™D"§Y+Š”¦>(– ©ì‰3Ä9B2÷g?fë\ª,­ZðEG{Bûädu›…–½ž`mdÜ…ˆ¢Ù§fh‘ |kžñà Ï÷¤TXíjÕà‘D´5Á¶ÖPãp œâY5éˆãô—«Gq…J îV‘Ä¡%öà.ÞsÆŠ˜µ>",0ž!F´Z„…5Fþ…ª¨?Å6¼]R¤ŒˆÐ(–/¾c÷ÁНXߨҬT=-7ð“ÆgîÏ™::ža¨Â]wæË·'X¸)Ó¹‰çWæx³ñާ>;\Ã÷ld‰ÒlñÁÂüw¶§–n´æ4fWFTÖu JŽN¡ü‡q¹Kt?½ª#±Þ¹t†þ”Y1|dƃš™k-¤ßÌIDAT;S–•Tç²*Ø» ™y›{ÅïbîUË„ãG.Ò¡PÊþø7O Ò£C0þ±ýíß鼺–Ç6ÛγOéîf‰umûZܹy{–ÊpËݹòÁoWžt–yv‹‘„§Iˆh¢2Ûé0ëþö¿ 1²ç_éù›Þ‰m-|Þá`~§†;üË9ÓTc‰h¯ýØ óW)ñäÛEävIÿð£Â½½ú•(º–üC¬¯!"Éü‡ØŒ¡ý= ËÅ“PÕ^¢WäÁžÑbòwQ÷ÇEŽcsÆ’©K8sŠHd3G0!aDtä‹W2 ê‰èìÈ·&ñ)g³«÷H¿þ¦Üá<÷ñ@ÂÒÏnMúÝÃãr ¹»ÎÛña…Yÿf~tU¹-Ù`_ŸXvb ¼]Ç9³³ÅÒb‰ÉY3÷í+Ëˉ¤¿¼¹)«ÑÂÄè‹ê1¬4=VvtLðÁß/Mº97hÌ`Mcc#锌Ý)ˆÖºñ‘'e‚ˆ\JY“;AÂw0šX™vœ{÷bîî䦌)LÔvêöÚì[¾y÷†ž”[kEKu¡!â”Õ<³ˆåDÆ$Tîc—éXu­»ih©=®ÑeQ²êŸý’ ‰ ¢Q‚yCÇ’9ÍÿvÕ¤áòA#Óÿ\LdãH3Bž¶}x×-ÑX…cIŠ¥3Ô"cN–3dID!š ±é —ÊKjRÃ~1„ÿûWÍÿ›dÞiΆHÞ]ȰĈͨ-3ÚÏÖ=³8•a¶Ø†È’‹]U‘­."bÂ#/|RœZûÏ·gÎyyeãAyZbPH®µCÛ<93êñŠXbd!e m¤ü£ºã¹aÜ 6€ˆ–?s‰îLŠKhj!–mK sq‰Ò("J‘ÆT$Õ¹ì1 “š~¯3wómŒÞà]Õî‘D"b1¾S"Ñõ¬^Q «*Oâ~Ô'Ú4Yb®|°çÂH..ÑM”sÊViYU|£û$W¦`äq’)Ã=¢¹]ÎÈD‹IÈ; vv¼ÀÄÄ_~õŠˆ˜ ÉÌ»¬ÅÇõ]¦ºÊƒ”>–ˆòì…Z‹p×Q'¹œLd4ªWýa¸§»—ÿ‹drvàÕü!ë/±‰†ïÍäeTšoW ïA«ã¢¾w©;“;¶Fr<æ`IÒ©&]ŽÁ˜Zñƨ_<û‹!omÍç8Ö~¦jÝÉëJ÷mûãùEåmï¯)h7 ""›*œo@µÔ)vNïÐŒV i RìªÔª¾7’‰*óŽßÚXͦ¸p…§ñ7s#?ÞÖòÐ-AD”¬‘}¯zED’.n1…x+ªW¾Î; X¼£{ó/ÛJË*š†”x~®¹ƒˆ¸)}vwIöý…C•U/N-}bµs]~ûc•VîX…㎴Ê{ÇÚ8u"£ '"ÖÖã6±A¸à\â9â8JIeÂ.R¾¹"Ce‡šn§WŒÏkª²-¨K±2Ú­-ÏÕ¹™ïŠ”f"FDDî@ö'¸às‹VèXõDEÖnû‘ž«&ÍSO ³$Œd”<3˜Ó“†ÎÞ;À¶asøÜŸ?ÊÙVZ6ŸuUŸuU{v¸Yñç OþS¹–Ä›\L}›yφM#UÇÕΙÔaÝADtÄÚàÙß*تÝ#ZÝDÄ„]|šR¸"pøB“±Ìññ¨GþÜñ^o¿K?‰‹¬k*Ý›ÖÇëïu(צZ6*òïRÝXín¬j?3µØ9ÍÁ2¼ÀDÇ-¹-«"¢Òèå)Ê9»Ì¬ 2QŒîüë2.£ ä¦Î ºœ«én˜tÑ«*._$Ò½ÍÆÄËjlÂàÓFcõò¬ñê,.63p9bçžH(<$6Ÿ{mÙÄä+>ÃÈ2Fù»bÏ4¯ßÉ2l¹»îñmæÐò"b“úæúAø‘Ø”4&~£ $éå.YåÓR#²™9¬åáDáÍ…ÎUãZ×ZvÏ'¶QÐh~uºå7«£ÏVu<ð§Mž‰tê’8F¦zvnJìG§Ipsätb" ã‚Jã.z¢ÌŒt·Ûív»¤RÙñ‚otjų"ˆHÅ™Cs.~›iF¦#ú±× @¿óŽwnJ¨^ÒÜIŸ40 ¥Ý'ê7ñ¢TÊÆ'õÙ‰X‰9sâÚõ¿]ݾrLÅÃG—|å"¢qÁ¦ù*µ|Äóÿ) 1Ñq’ ,juµ4ƒ²Ìƒ(N'ï+¨TI4€HI¸ÁYŒJí]U(I¨’SJGO8oNÍM£:Ó¹…ЉˆHÏjºWcõHŽC&†‰! Þi/Dˆ ÅÍ|ûõ^‡ÛE }3)qÜ' SYâäÑ{RI#GI“ºW‡íÌû'Ž9ÏZ,­:³ ÊäL`ÐEŸ‘”‘è$jJ6µð-|KlÄ$&ó5•Âoˆ(‡(æ¤äÝ; ¢À9ô‡]­‘h?±‰É¬¶ûPrFöDÄÏ%‰_¥gØÔÁ}óŠ÷*˜Ó÷åáJéo_¬m.²o_We¹£‘è›õÜ… gS3¨×•ÔzÁe òw )u,²æ‹ “SdTn#e—=ššÕ7Ï‚¨««K§ÃÇ}Ÿ‡ý¢ôE’›n­–óý5J%#'"qüáDaî1˾nSØ^"Šà‚3eÉDt$çØòðНòõïí 5pî?ßY?<ÑÊd½¬bUBq‘›ˆˆ¦‹¨þÐòêÝ«—QNÖÐýÇ”rŽehPzε}†ßç¯9^o£ß@”þ9Â%yE«¤ªƒˆåøõ°?¿rdDZø¸ìÈýDÄ„„õü4óã%Ic> –ä  }eZé¯tQCKùÇTuŠì»{ù)îÆéLL|C=÷‘M§?qT•ò¢‹cdQqÓÝGÊ"R^jÞŠQÎU_F5íÛ×íÜíùˆˆ(Rú¡i]…»ÎópMH¹:E>¼Øž¾ëÌà®É÷ö<€Ct8ŠùÖ¤6'±¡á½dÌéºÓ)g™@B$a81sD÷’™“ͯnëÐnM«p‘ñ«U'¦ «ËŒ›¬ÌѰ*"êPf}À-}Œ©˜ŸÓ.7Š’`‘o—+Yy c"£¯ôtuÄØ®~ Ëÿs¼~ G¿(ýr„KòŠ–Ë-‘.§sk—[V=. :ëªÎÛç""68¬oÏΫـµ¹ÖèFUb•åGBï eÀw·±»6áÊ/õêT–“qûî‡=OŽRfpù?À(®î´#dƒÖ°ÛL‚EǪ9âÚ…®¯Æé2B²dûö Ç Äñ“™Ðï>Êi¼4²ÔUá¹~ðb `u fõeT›ï8JD\°g.|¦§—;ÑñÁ›MÍm$(Ò[ï” ÉîåhlZ&³kóU|–õ"‰f΃×äÈ #ÍÎçïLJɼùMëhÿž!eEŽgâTžö@VûPðCÆü¿GY(˜ˆˆ«tågÙÄd±¡–®ª€Õü>ÇërôˆÒ? G¸$¯(`¥"¢´Ÿ™‰èŒ»"\Têª kçÉ3«O1DóTS?0­ý× ÕÂ5Îè&qC³IòS/Qa`uç]÷÷0ÜXÅÐÖüÑŠ!rF¶Ö²sPÈpuÂ4ÞÍðû¿á·~-¹çaòÜrèð"ºÙe?ã´¤W8é‡Àòð\ˆWçn&¢HIÈy½ŒJ#ÿùSBþ.bYiî8F£½È!zRp3îìÛÉwþ„ÍMÜwëv±£&ôã`¾#‘p3æÇñy;Ü+?ìùJçv«[EÓ–=4´N!Ôíã¿Z#¦e ¥DÄDÆôß ÀxE«§ÓΊYÇœ%7¶»é°ˆ(Kžf,«hË©ù“ã yE6kTŸŸÅkS ßjÝ?N1LJÒMÖ½ÓÆ{ÃTþð¡è¸{ù¿˜„¤î…ÆSˆºoÙ{+C–äÏÝ*Û³ÚÅy.~£ÆL»ü¯7LH7ufà⸩3ź¡â,¿yýù]Ê1‘æR„Å¹ã°ØÔÀ75ÉdLÐùß~ô䬞ëC”¸ªÚ…®*w}øµ™å1Q™í ×XùPî¦+¸pÏ?Xí<õÍVGD ´wX-1­äÎ{Ý_¬JЍ¤ˆ¾]h\ a»í`²46^ÉöúÕh‚$*AEDyyyñcìí¡ßååå;¶¿G?rôˆÒo\/Q²,7ï&çEz²Ç¨¤OüF¬®Û[™à0&:–Xö½Öõ’£¿CŽ~Qúä—Ĉ,/úÓ«u7ÅHÃÿÐöO#mäÛråÖ¯½ÓŠŒì…Wú‹û®[¢±K8˜G<ßs¡ñÅ]ŸÜ§žÞÇ·ê¿Ã0תÐä3°Ì¢ˆÊâå$käÛZ*Ž 5 ,/2ªW?%F«ã¦L?¯ñFe.ªWм¢€•*'¢{ÕÓ+œµ¥]E¬oQÙºf×ÂÉ%õ÷àºæEË ÿü{Ü¿Wý~‹\ex¹„ˆ˜`°|ω'ú{У@Ž~Qú Dé£@Ž~Qúä—ä3°<Ħzò,è.—+>G C<ß߃‚+ÛßC€>€ýrôˆÒo Jÿ€ýrôˆÒ? G¸$¯XĈ†á ŠÍ|ÞÉôÛÙÜqý="¸×nw/*`yF"¶µ0†`b˜þ\먀¾èÚ•w¼hwðyyyý=èÈÑ? G¿(ý¢ôÈÑ? G¿(ýr„Kò–yO˜àÓ0 ®S(`€WC ú.]öÈÑ? G¿(ý¢ôÈÑ? G¿(ýr„Kò–•§°€OÃXpB ¼ XÐǺººú{У@Ž~Qú Dé£@Ž~Qúä—„ô±êêêþôäè£ß@”~Qúäè£ß@”þ9Â%yËÒéXÄÀ§aw¸N¡€^ ,ècyyyý=èÈÑ? G¿(ý¢ôÈÑ? G¿(ýr„Kò–•§°€OÃXà3-ZÔßC€>€ýrôˆÒo Jÿ€ýrôˆÒ? G¸$o™÷„X~Qúäè£ß@”~Qúäè£ß@”þ9ú ›U]]=gέV«ÕjçÌ™SSSs-Î׃¾/`™ÍæI“& >¼ªªªªªjøðá“'O¶Z­}~"¸ôý̮ŋ>|øã?în¹÷Þ{srr.\ØÛ80]Ð_ Jÿ€ýrôˆÒo Jÿ€ýrôˆÒ? G¿áK—~ùå—÷ßÏ–ûï¿ݺu}~"¸ô}ëÔ©SC† éÙ’™™YTTÔç'€ëAßÏì’Éd‹E*•v·¸\.µZíp8zÃôí0à'v.!”\‹ƒ^\ì Õ÷—¶··÷likk3 }~"¸ô}+==ýرc=[Ž?ž––Öç'€ëAß°f̘±bÅŠž-+V¬˜9sfŸŸ®}¿ˆ»Éd2dÈÃ?üøãÑ’%K>üðÃcÇŽ©Tª¾=\ú~–F£Ù±cÇ¡C‡ââââââ ¶oߎê\¾ŸЇú~@B ¼ XàÕPÀ¯†x5°À«yK«ººzΜ9Z­V«ÕΙ3§¦¦¦¿G?èÈ‘# ,Ðëõ Ã\ØÛ{”ÚKìÙ³gîܹ!!!:näÈ‘k×®=oäè+öïßÿðÃ'$$Èd²ÈÈÈ)S¦|þùç=w@”>§±±199ù¼7XäèC˜ ôìE”¾B„·Þz+==]¡Pddd¬Zµªg/rô þcdF&“uï€}Ïóï¼óΈ#ôz½N§>|ø;ï¼Ãó|÷ˆÒWlݺuôèÑJ¥Ò`0Üwß}MMM={‘£7»vE€+JÖ+ Xf³yÒ¤Iǯªªªªª>|øäÉ“­Vk .î¾ûî ÍÏÏ¿°«÷(´÷˜0aBKKËÚµkÞzë­E‹½ÿþûݽÈч,\¸pذa›6m2›Í'OžüíoûÒK/½ð ž^DésDQüÙÏ~öâ‹/ölDŽ>Gü¾îvDéC,XpüøñõëׯåË—/_¾¼» 9ú ñ‹/¾óÎ;=½Èч<ýôÓ}ôÑâÅ‹kjjjjj/^¼lÙ²§Ÿ~ÚÓ‹(}ÅöíÛçÍ›÷È#TWWOœ8qöìÙ‡ÃÓ‹½Ü5*\q²¾³ÿô^ýõ{î¹§gË=÷Üóæ›oö×xà2]øûÓ{”Ú{üú׿¡ûá±cÇ Ðý9ú´ÒÒR½^ïÙF”>çµ×^»ï¾ûÄï¿Á"GßÒˇ+Dé+vìØ1cÆŒêEŽ>ŠçùÄÄăz"G¢Ñh***z¶TTTh4Ï6¢ôãÇÿðÃ{¶|ðÁï¼óŽg9úо-\i²^QÀš8qâæÍ›{¶lÞ¼yÒ¤Iý5¸Lþîö%‚öZ‹E&“u?DŽ>­ªª*((ȳ(}KaaajjªÑh¿ÿ‹}K/,Dé+æÍ›·iÓ¦êEŽ>jݺu£Fê~ˆ}HHHÈ…¬ÐÐPÏ6¢ôJ¥²¥¥¥gKssó”)S<ÛÈÑWômàJ“õŠVhhhcccÏ–†††ðððþ\¦ w{A{­5kÖ >¼û!rôQ»wï9räóÏ?ïiA”>Äjµ}º» QúЏ¸¸5kÖŒ?^©TªÕêÉ“'çååu÷"G5qâÄ•+Wv?DŽ>dÑ¢E¹¹¹{öì1F£q÷îÝÙÙÙùË_<½ˆÒW\´€u™I!GïÑ·E€+MÖ+ XR©Ôétölq:=烀wºðw·÷(´wjkk8pàž={º[£Ïéyaø7Þèv»=íˆÒ‡<öØc/¾øb÷Þo°ÈÑ·Ìœ9sÏž=6›Í³PKhhhaa¡§ Qú ¹\´téÒææææææ>ø ((è›o¾ñô"G_tüøñ˜˜—ËÕÝ‚}ˆ ³fÍêùigÖ¬YÝ«a J_1nܸåË—÷lYºtée&…½Gß®4Y¯XÄúKSSÓìÙ³ß}÷ÝqãÆõ÷XàêyÞЛšš>ýôÓS§N½üòËý="¸2ëÖ­;uêÔsÏ=×ß>°nݺqãÆ)Šèèè§Ÿ~zÑ¢E¿ÿýïû{PpeAøÇ?þñàƒ†„„„„„<ôÐCÿûßÿô§?õ÷¸àê½ùæ› ,H$ý=¸¯¾úê‘#G¾øâ‹öööööö/¾øâÈ‘#¯¿þz ®Ì¢E‹ž}öÙ+V´¶¶¶¶¶.[¶ì7¿ù Ë¢"WÀ+~]ÛÛÛ{¶´µµ †þ\µÞ£DÐÞ¦®®nêÔ©ÿó?ÿ3qâÄžíÈÑG…††ÎŸ?ÿã?î¾§$¢ôÏ>ûìG}ÄqÜE{‘£O»ýöÛóòò<ÛˆÒW͘1£gË­·ÞzðàAÏ6rô9­­­_|ñÅ£>Ú³9úwß}wùòå³fÍ œ5kÖòåËßyçO/¢ô“&MZ³fͲeËâããcccßÿý%K–DDDxz‘£ïú1Ù]i²^QÀJOO?vìXÏ–ãǧ¥¥õ×xàªõ%‚ö*õõõÓ¦M{ýõ×'Ož|^rôiYYYÍÍÍžmDé+ÊÊÊâã㙈¨{9ú4±ÇE¾ˆÒW¤§§÷Þ‹}Ë{ï½wÇwœ÷?"äèCêêê²²²z¶deeÕÕÕy¶¥™0aÂŽ;Ìf³ÕjÍËËÓét£Fòt!Gßõc²»Òd½¢€5cÆŒ+VôlY±bÅÌ™3ûk|¸gËÁƒcbb<ÛˆÒw-Y²ä‘Gñl#Gßõc²»âd/µD×OÁh4&$$¼üòËž«š_zé¥˜Íæþ\Â…¿?½G‰ ½Ç°aÃþóŸÿüP/rô!7ÝtÓÚµk›ššœNgmmíÒ¥K£¢¢6lØàéE”¾«ç,rô!“&Múì³ÏœNgyyùË/¿|øðaO/¢ô6›môèÑË—/oiiiiiùð‚vìØáéE޾åÓO?½ñÆ/lGŽ>ä­·ÞŠ‹‹[¿~}GG‡g ¬èèè·ß~ÛÓ‹(}ÈôéÓ9ât:ËÊÊ}ôÑÇ{¬» 9úо-\i²^QÀE±¢¢bÖ¬YF£ÑÌš5«²²²¿G?¨÷JhïQ"h/qÑ;::ºw@޾bÇŽ·ß~{PPD"‰ˆˆ˜3gÎþýû{î€(}Ôy£¯Ø¾}ûìÙ³=ÿ$£¢¢î»ï¾3gÎôÜQúŠúúú{î¹'00P.—5jÛ¶m={‘£ÉÍÍýꫯ.Ú…}ÈêÕ«GŽ©×ëõz}nnîªU«zö"J_±råÊ´´4™L–ššúÆoð<ß³9z³kW¸¢d™ €7ðŠ5°~ XàÕPÀ¯†x5°À«¡€^ ,ðj(`€WC ¼ XàÕPÀ¯†x5°À«¡€^ ,ðj(`ô†aú{~,€«„rÀO,€>#ŠbÀ¡€p5<Ó¯˜oõlôlX­ÖG}Ô`0ÿîw¿EÑf³=þøãAAAz½þ—¿ü¥Ûíî>ÚîÝ»srr E||ü|ðÓ?o†ÀÕðL¶¿uáO<ñÄèÑ£ËÊÊöïß¿gÏž×^{mÁ‚999gÏž-(((((X²d‰gÏâââ;î¸ã™gžinn^½zõË/¿¼k×®Ÿò¹x9Ý®ÜÿQª»…a˜7ß|sáÂ…žö½{÷ÞtÓMýë_»[òóóŸ|òÉÂÂB"ºÿþû‡ òì³ÏzºÖ­[÷ÿ÷_ýõO÷L¼ XW©÷VMMMtt´§Ýh4êtºóZbbbºººˆ())iãÆÉÉÉž®ŽŽŽÁƒ×ÖÖþtÏÀ»¡€p•z/` ‚Ðó6…mñì,—ËNgÏã°,Ëóüµ=€ïÀX×DÏZÕµxhµÚúúz±T¯zB à*)ŠófN]‰'®[·îÇÀ_¡€p• °aÆ?[ê…^xñÅ—/_ÞÖÖf±X¶oß>}úô>!€ÀXWiÓ¦M .,//çy¾{é«ó6ºõÞrôèÑçž{.//Ïív9òüãäÉ“ªçàíPÀ¯†KÀ«¡€^ ,ðj(`€WC ¼ XàÕþþËÌkó%BIEND®B`‚gsl/doc/images/rand-bivariate-gaussian.png0000644000175000017500000005475613536674414017173 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìÝy@L{Ü?ðÁm·TTèZŠ,‰´ª,ݲT–D$’¢$ne ·k+dÍZÊ‘ŠRYZ%*mZHDI«´ïÍüþèùõô¸¤8gÎÔy¿þb–ïçsf8ïùžµ‹Åb{õ¦º:BP @0À@P @0À@P @0À@P @0À@P @0À@P @0À@P @0À@P @0À@P @0À@P @0À@P @0À@P @0À@®^íôîÝ[TTTUUÕÝÝÉd¶½€Œ¢„ù_YYY–––£Gæããããã;vìš5kž>}ʆÒÿEø"·}k<<õÓEn}MKK‹££ãÈ‘#yxxÆŒsæÌ™-ãwMž™Úëà©N.òîÝ»Û?4eÊ”. XWWÇÇÇ×ùž¿Š|e cß¾}íŸÚ»w¯±±q]u&€õôô\]]Û?åââ²xñâ¶—uþ“ ÈõÍ:±´´ôÁƒcǎݵk×7/˜9sæ©S§Ú^yòäI99¹Ö?×ÕÕíÝ»wìØ±|||­Þ§OŸ¶·çääü¨hÇoüæ]£Fj?¯-++ÿîBñòòÖÕÕ}Sñ›­J]*ÝþAeeåµk×~úô鿯éà©NÖm›J¶-£Ðw—ñG\SSÃÏÏßùž¿Š|eÿm2;;{È!tÕ™>|xnnnû§>~ü8bĈíà“ ÈõÝ5fll¬„„Ä7/xô葈ˆHUU‹Åª¬¬¹uëVëS7nÔÒÒJLL¬®®f±Xuuuí×¹?*Úñ¿y77÷73õÞ½{w¡Fýúõ뎗·K¥[ZZÚ|ÿþ½žž//ï¸qãLMM˜LæOŸêdÝ–––5ÜÉÇÓÓÓGýÍk:ÓXû‘;øÊ Æ7?njkkÿøãÖþ£ë €yxx¾ÙhQ__ÏÃÃÓö²Î2DÁ¿0 ×w×bÕÕÕÜÜÜÿ}¢¢¢ƒƒ‹Å²··?~|ÛJ|èСyyym/k=*§ƒñÛìÒ ôùóçÎ,ÔÚµkœœ¾ûTgJ ~ýúµý»²³³¿é§¾¾>99ùüùóJJJmûË;xê×ùGvðøÌÍÍ¿ûšŽëxäN΀;þèº4ÎÍÍm?î %’à_ëG3àï®ûüüüúõë—‘‘ѯ_?//¯¶Ç…„„JJJÚþºuëÖN†Joäååm¿Ë™Åb-]ºôìÙ³Y¨ôôô!C†|“/­¬¬üàÁƒöïÚ±cÇV÷¥¥¥?}ª3u?€“““EDD222:~oûÆþû9ÿ4€÷ïßßþ©}ûöµíîø£ë Ö÷Ÿ9sfÑ¢Ei €$øäúf-öåË—Ö}Àm‡á´AKK˘1c $))ÙÜÜÜöøŠ+ŒŒŒ ŠŠŠœœœ–,YÒÉPéà&Lð÷÷o_%--mÈ!W®\)--­®®~üøñÂb±XW®\Õ™Eîj·âææ™>}ºƒƒÃ7‡Yu¦çÿ~Î? àêêj333!!!~~~--­¶ô§]ǵüýý•””Z¯ª¤¤Øñ‡€²áÂ1À•°(€ €` €(€ €` €(€ €` €(€ €ÀQQQË–-0`€ŠŠJ@@Õïªø–ººº††F@@€œœ\zzúÚµkKKKÍÍÍ©î €H½X,Õ=üÛ¶m;zôh¯^½Zÿšššºxñâììlj» Çð7jkk…„„¨n€H·øÁÁÁ222Tw@0Žž—••©©©¹»»OŸ>ê^ÅâT………3fÌ û…÷ÚÛÛw¼Ô#FŒ`ÏÇ ?¥®®Nt†t:ÎÏÏŸ7oÞñãÇgΜIÆø½zqè‚Ð=×ÉwƒÁøüù³ŽŽÎ©S§455©î€wVqq±¶¶öáÇ‘¾Ðƒqܬ_^^~ûö톆†¤V¡çæÎDÏu2Ç-sÛ%8Úûúõ«   ±U8mÁh‹žëdŽÛLÃïhˆãöЀ` €(€€NILLܰaƒ  àwOU  ±]±gÑrssõõõû÷ïß¿}}ý¼¼¼^üèÑ#555>>>aaacc㢢"6tì€N166‰‰¡º‘ÿƒ3»ê@uuµ¦¦¦¼¼üÇ?~ü(//?sæÌÚÚÚï¾øÉ“'†††k×®ÍÍÍ}óæ††Æ¢E‹p{ÖƒŽ§^1èzÎ!8ó¿!]±aÑNž<ùòåKooï¶GV®\©¬¬lccóß«««¯^½ÚÔÔ´íúúú 6Ú$ûqæ?*²a УܻwOUUU@@ ×ÿ…®¾Ñ«W¯ºº:kkk11±ö´´´8::Ž9’‡‡g̘1gΜiÿ®{÷¨¨¨¨uµî½{÷V­ZÕþ‘U«V~÷ÅñññóçÏoÿÈ‚ üýý»Z8 çˆŒŒ444422zÿþ}aa¡««+//ïÕ«W©[pfW ãï¿ÿVSS{ûömûN6lØPWW÷øñã²²2ww÷“'OÞ¸q£õ©çÏŸ›ššÚØØ|øð!''ÇÊÊÊØØ8>>¾KEÓÓÓeeeÛ?2iÒ¤ŒŒŒÎ––Ö¥ŠÀ¹Ø|ûCAÛ‡žMGGgÿþýíqpp˜6mZÇïêê*¢«ÿ}8³+ƒqâĉÿ>¸{÷îöM™2¥õÏzzz®®®íŸuqqY¼xq—zæââjlll?Hcc#77÷w›œ>}º§§gûG<<<~ôânžëd:.3‹®_6ôxBBBïÞ½kÿHvvö Aƒˆ­ÒÕÿ>œÙƒÁÈÉÉùïƒß´ZVV&$$ÔúçáÃ‡çææ¶öãÇ#FŒèRÝ.ð“'O äééYRRRRRrùòåòòòv\ÂÞÞ¾“/ÙÛÛwé3aÑuLÇýÞ ºîð‡‹‹«ªªŠ——·í‘ºº:AAAb›íêÎìªW¯^\\\ß<ØÒÒÒ»wïol™——·¢¢‚‡‡§í©†††Ô××w¾®˜˜Xjjª˜˜XÛ#………rrrß}}ddäÞ½{ãââ˜L¦¼¼¼Ýû÷ï;_±[ ç:û€z‘OŸ>µ$//O\\¼ãwõêPOíŠÁ`|“¾­¾IßöÄÄÄŠ‹‹Û?R\\>>ÅÅÅÅÅÅ>>>ÂÂÂ/^¼èRŸ•••(+++++stt5jTuuõz˜7o^bbbccã»wï,,,,--»T®» ç:™ŽËÌ¢ë— tðòåËÙ³g·ž¨ª­­ýêÕ«¶§ %$$ììì$$$ »:r¿à¿|ù",,ük])))ùøø°X¬¬¬¬?ÿü³¦¦†=]ýB³X,%%%>>>>>>%%¥ÀÀÀ.uÛ*''GOO¯_¿~ýúõÓÓÓký-ò£|}}¥¥¥¹¹¹ÇwêÔ©¶+= =×ÉtÜïÍ ë{{û}ûö;vÌÖÖ–Àa]\\²²²\\\~á½ÿüóOzzº±±±ªªªµµ5'tlFÏu2—™A×/h.%%eþüùÎÎÎÖÖÖ£G&jd99999¹_x/‹Å’••ÕÖÖöóó{óæ 777'tlFÏuòT7ìPSScllìãã3cÆŒ?þøÃÀÀ &&†Á“’’~ù½½zõÚ¹s§¡¡áÅ‹ Lßßì € p4-lذÁÚÚzÆŒ cÁ‚ÆÆÆÿý7ÕMý>}úHII™˜˜PÝ[ÑqÖÏ ëæΤ««»|ùòåË—SÝP†žëdl‚Ê0™Ì‹/~øðaÙ²eT÷Àn` LŸ>}FŽéçç×Áõ§z*0P††[ÚàW'À@P @0À@P @0p%,ê1™ÌòòòòòrAƒõéÓ‡Á`|þü¹¨¨HDDDDD„‡‡‡ê``öijjÊÉÉÉÌÌ|ýúuvvvaaa^^^nnnyy¹   PuuuIIÉŒ3"##õõõß½{WZZZRR"(((!!1~üxEEE ñãÇS½(ð»èx(]o}ì×ÐМœœœœ÷âÅ‹÷ïß‹‹‹?~ܸqRRRC† >|øÀ;§  àýû÷™™™±±±áááÍÍͺºº«V­RVVfÏ‚Šžëd:.3ƒ®_6°GIIɳgÏÂÃß?þêÕ«qãÆÉÉÉ)((¨ªªJKKsssÿ~‰¬¬¬›7ozzz 8p`öìÙ¿?&…è¹N¦ã23èúeyêêꢣ£#""=z”­ªªª®®>uêT>>>’Š2™ÌÀÀ@ ‹ÄÄÄaÆ‘T… è¹N¦ã23èúeá222ž]¿~½»»ûÔ©S©nŠ\¡¡¡#GŽ”‘‘¡ºè,0ô(999îîîW¯^_·n]Ï8ºª3|||V®\IuÐt<õŠA×sÎz°–––û÷ïŸ;wîåË—ÆÆÆfff´ÚZSSó矾}ûvРAT÷ò+è¹NÆ º·¯_¿^¾|ÙÕÕULLlýúõþþþ=ï誟º}ûöôéÓ»iúÒº«ÌÌLggç7nÌ›7Ï××WII‰êŽ(sëÖ-CCCª»€®¡ã¬ŸA×Í=ÆóçÏ>üâÅ‹õëׯ[·NLLŒêލTWW7xðàœœaaaª{ùEô\'c ݋Š=|øpnnîÖ­[¯_¿ÎÇÇGuSÔ —““ë¾éK[`èZZZüüüŽ9Âd2ÿùçƒ?þÀêëÍ›7ê. Ëð/8Zmm­——×éÓ§………8 ££Ó«W/ª›â •••=¢ºè2:nvgÐu@÷’““sáÂUUÕ7jhhPÝ'Z³f ×ùóç©nä·ÐsŒ0pœÈÈÈÓ§O?}úÔØØøéÓ§RRRTwÄ¡£¢¢’’’¨n~t0èúk €Ã544øúúž>}º¾¾~ãÆÆÆÆüüüT7ŹJJJ&Mšäïﯢ¢Bu/¿‹žëd:.3ƒ®_6Ǫ¬¬<{öìéÓ§eee7mÚ4gÎìèý©¥K—Ž5êðáÃT7Bz®“± ¨T\\|êÔ© .Ì;÷áǸ—@'ݾ};==ÝËË‹êFà×õ¦º ©ÜÜÜ7Ž?¾²²2!!áêÕ«HßNªªªÚ´iÓÙ³gixÑÍž ìöáǵk×ÊËËóòò¦§§Ÿ9sfäÈ‘T7ÕìÞ½[[[[]]êFà·pb'&&nذAPP;z˜ÂÂBkkk%%¥¡C‡¾}ûöÈ‘#ƒ¦º©n&--íúõë=c×/Íqb‹ŠŠÆÄÄPÝæË—/¶¶¶222ÜÜÜ™™™{÷©niëÖ­»ví8p ÕÀïâă°ÒÓÓ©nÓÜÜìæææèè¸téÒ´´4LyGHHȇ,--©nÀ‰ =CUUÕåË—G9~üxª;êÞ¾~ýºqãF'''...ª{pâ&hè‹wîÜ)))ùìÙ3ooïÐÐP¤ïojjjZºtéܹsuuu©îˆ"}úôÉÊÊjüøñåååqqq¾¾¾=à:MœÀÚÚšŸŸÿرcT7„é™ìààЫCT7н{÷ÎÒÒròäÉýúõËÌÌtuu• º©âÔ©SÏŸ?¿víZŸ>}¨îÃÑWÿ"ïâdô¼ìIÞ¾}ëèèliiicc3hÐ ª;êQBCC׬Y;|øpª{! =×É=s ì‘››kff6uêÔ1cƼ{÷nß¾}H_beee™˜˜Ü¼y³§/m!€àW”””lÞ¼Y^^~èСYYY;wîìׯÕMõ4555‹/Þ¿ÿÔ©S©îˆ‡€®©­­utt?~|KKKFFÆþýû©nªg277Ÿ2eÊÚµk©nHÁ‰ç·?HªíÏ4Ü=ÀiX,–··÷Î;UUUãããqŒ©Îœ9óæÍ›gÏžQÝ…Y Àâãã­¬¬zõêåë뫦¦Fu;=\\\ÜþýûŸ={†ûõ`œÀÀQŠŠŠvïÞtèÐ!ccc<‘///ïÕ«W¯_¿ÎÏÏ/...(((,,,))ijjb0üüü<<<”3fÌĉgÍš%,,Lu×?TQQ±|ùòsçÎ5Šê^€Dt<ò›A×CÞºª´´ôÈ‘#¦¦¦öööýû÷§º£ÿUUUþäÉ“¢¢"999iiéaÆ‰ŠŠ2dðàÁ"""­—l¬­­mhh())ÉÉÉÉÊÊŠóæMtt´˜˜Õ ñõõõóçÏŸ8qâÉ“'©î…}è¹N¦ã23èúet^iiéñãÇÝÝÝ wìØ1tèPª;b0 ‹•’’òòåKUUÕ™3gjhh(((ôîÝ…CJ7nÜÈb±œÉkõ×455-Y²D@@ÀÛÛ»KKÔÝÑsLÇefÐõËèŒöÑkgg÷çŸRÝ£¦¦&"""((èîÝ»ÚÚÚ­·£çççÿµ‹ŠŠ¤¥¥ÓÓÓ9êÖLL&sÕªUwîÜ¡Ûíè¹NÆ>`øÇŽ;{ö¬¡¡arr2åÑûåË—û÷ïûûû‡‡‡+**jkk‡‡‡KIIýþÈbbb+W®<##ƒÍéËb±"##W¯^=|øp??¿•+Wæçç_»vmÁ‚lN_ƒ!''—˜˜Èæ¢íEGG¯_¿>((h̘1¶TÁ €Fâââ,,,ÄÄÄbccGÍÎÒŸ>}òðððôô055=|ø0å[\[gÀTUÏÈÈXºt©ÏäÉ“©ê¨… …¯_¿:88ܺuËÉÉiÅŠì,zöìÙèèèåË—ûùùÉË˳³zFŒÑØØXXXÈþ³?}ú4wîÜcÇŽÍš5‹Í¥s €z¸ªªª'Nœ9sF__?--MHHˆLÏ IDAT=u[ZZnß¾}äÈ‘¦¦¦M›6ùøø°§t'EDDpss³ÿ‚Syyy3gδ±±Y¹r%›KGAôXMMMçÎ;pà€––V\\Û÷­©©ñôô}ú¸»»ÿõ×_ì)š‘‘qüøqCCÃçÏŸKJJ²§î¯ñòòÊÎξ~ý:;‹~øðASSsÛ¶mH_h…è9²³³ÿù矗/_:tÈÐÐ=~£¢¢Ž?gmmýöíÛ²¡èï(//ß¾}{PP{.÷Ñ s_ø/œ ÐTTTØÚÚªªª*))½~ýzùòåd§/“É PSS[»v­ŽŽÎû÷ïwìØÁùéË`0,XÀ΃±ß¾}û×_ýóÏ?H_h3`€îÅbyyyÙÙÙÍŸ??-- '×ÖÕÕyxxœ}é ß…0@÷óáÃ33³††6\QòãǸ}ûöªU«’’’† Fj9R>}zåÊ•ìÙQ»hÑ¢ .èê겡tG˜t'ÇŽSRRÒÒÒŠŒŒ$5}óóóÍÍÍDEE³²²Nž<Ù­Ó·¤¤äâÅ‹[¶laC­ˆˆ===OOO¤/t3`€îÅbݾ}ûßÿ;v,ÙßÊÊÊãÇ»ººZZZ¾yó¦[Ûܱ’’’ÖëO±á®!!!&&&7nÜ`ÛIØÐM!€ºÈÈÈmÛ¶1™Ì³gÏ’zùþúúú .²k¹ºº>|øáÇ“&M"»ô`U[[{ôèQWW×Í›7ûøøðòò’TˆÉdz{{ÛÛÛOœ81((HVV–¤Bì×ÔÔ´dÉ’±cÇ?~œìZ{÷î½víZttôÈ‘#É®=€Ý»wÏÚÚZEE%11‘¼CŸX,–¿¿ÿž={„……½½½9ùÞ ¿€Åb™››sqq]¸pÔë‚1™ÌÍ›7GEEEGG³ùÞJЭ!€8K~~¾MZZš‡‡‡¦¦&y…=z´cÇ&“yôèѹsç’Wˆ*oÞ¼ ÿãWt¦¦¦ùùùááá‚‚‚䂞§!p &“yæÌ™É“'ËÈȤ¤¤—¾qqq³fͲ¶¶Þ¾}{BBBL____ooï»wïòññ‘W¥¢¢BGG§¡¡!44é ]…0GHOO733ããã{úô騱cIªòúõë]»vÅÅÅíÞ½{õêÕ¤N )ôúõë7“ºA8??_[[{Ö¬YÇïFWÃÎ4kii9x𠦦¦™™YXXIé›——gnn®®®®¢¢òæÍ›µk×öÔô­­­ÕÓÓ;vì©÷;zýúõ´iÓV­ZuòäI¤/üšžù? »øøñãŠ+øùùH:ت¼¼üàÁƒ–––YYY £ ç°µµUQQ166&¯Dtt´ÁÑ£GI­=~¸P£¥¥åÌ™3S¦LÑ××øð!éËb±®\¹2nܸòòò´´4GGÇŸ¾—.] qvv&¯D@@À’%K|||¾ð›0 @TTÔ¦M›„„„?~,##CF‰ääd++«æææàà`9992Jp‹åààpíÚµþýû“TÅÍÍíàÁƒlhhHF‰ÂÂÂ={öÜ»woÿþýkÖ¬¡ÃÊææfKKË´´´gÏž‰ˆˆQ‚ÅbÙÙÙݽ{7::ZBB‚Œ@7=ÿ&‡¨¯¯wttTPP••}ýú5éÛÔÔtüøñ‰'0 33ÓÜÜœé[__¿dÉ’üüü'Ož”¾+W®Œ‰‰AúQ0`‡GmذAVV6!!¤;ܽ{wûöí’’’Ïž=“’’"£ª®®^¸p¡¨¨¨ŸŸ%ÊËË—.]Ú·oßÐÐPRÏ*ºA«¨¨ÈÖÖ666ÖÕÕU[[›Œ)))[¶l),,{ölEEÅóçÏ“”¾ÑÑÑÓ¦M³¶¶>}ú4Ò‡0)ŠŠŠÌÌÌ >|HÆý…X,ÖåË—wîܹxñ⌌ !!!ÂKp²Ö[üNŸ>¼Û]¼xq×®]^^^³gÏ&©Ð€xwïÞ]¿~½™™Ùž={ȸàTBB‚••UïÞ½ƒ‚‚H½Þgª¬¬ÔÖÖž:u*IéÛÔÔ´wïÞ»wïFEE3†Œ 0±jkkmll"""üüüÔÔÔ¿´´tçÎ÷îÝ;tèЪU«H½Ëgª««›7ož¢¢â‰'È¿´´´õ«§OŸ’w>1û€”žž®¬¬ÜÜÜœœœLxú¶´´¸¹¹M˜0ŸŸ?33ÓÄÄ„†éËd2ŒŒ$$$\\\ÈXü””eee55µÀÀ@¤/ 3`4448999;;;99™˜˜>~BB‚………  `XXØ„ ¿[¨©©Y½zuUU•¯¯/éûðáÕ+Wž9sÆÀÀ€ðÁþ 3`€ß,##“˜˜˜@xúÖÖÖnß¾}Á‚¶¶¶tNß>L›6­_¿~÷ïßçææ&||www“;wî }m0øu›6mJJJruu3gá㇆†®_¿^UU5%%…Ô[Ûr¸ˆˆˆ+VØÙÙÙØØ>8‹ÅÚ¹sçíÛ·Ÿ>}:jÔ(ÂÇøÌ€~“Étss“••3fLjj*áé[RRbbb²aÆóçÏûøøÐ9}¯^½º|ùrooo2Ò·¶¶ÖÀÀ ::úÙ³gH_`3Ì€ºìÍ›7æææ,+""BZZšØÁ[ï!øï¿ÿ½zõŠŸŸŸØñ»‘Öy{{‡‡‡7Žðñóòòôôô&NœøøñcÂÇè  ZEÞ¿¿½½ýúõë ¿Ó›7oÖ­[W[[K“{v ®®nõêÕ¹¹¹±±±dlˆˆˆ022Ú²e‹­­-áƒt6AtVvvöŒ3^¼x÷÷ß›¾õõõÓ§O_²dIll,ÍÓ·°°PCC£OŸ>aaa„§/‹Å:~üøòåË===‘¾@!0ÀϱX¬sçΩ©©zyy9’ØñÃÃÃeee_½z•œœleeEóËgffª©©Í›7ÏÛÛ›———ØÁ«ªª nܸñâÅ‹Y³f;8@—`4ÀO”””¬Y³¦¨¨(::zìØ±„¾mÛ¶ˆˆ— ;xwôìÙ3}}}''§•+W>xJJІ††··7vúå0èHDD„¼¼¼ŒŒLLL áéëåå5qâĦ§§#} ÆÃ‡-ZtõêU2Ò÷Ê•+³gÏvpp8wîÒ8fÀßÇb±:äêêêééIø¶ÊÏŸ?oذ!''[µ \·n]@@€ªª*±#×ÕÕmܸ1:::22rüøñÄðË0øŽ¬¬¬¿þú+$$$>>žðô½s玼¼¼¬¬l||<Ò—Á`0™Ìýû÷oذáÁƒ„§oqq±¦¦fuuu\\Ò8 fÀÿGssó±cÇŽ?¾gÏÂu®¨¨°±±‰ œ2e #w__¾|Y±bEcccBBÂ!Cˆ¼uÛþÊ•+÷îÝKÃ{W‡Ã ०¦ªªªFDD$$$X[[›¾Ož<‘••íÛ·oRRÒ·Uë݇äää?~LxúúùùihhìÛ·oß¾}H_àD,Z¢í‚Ã444ØÛÛ‹ŠŠzxx0™Lb¯¬¬´´´>|xhh(±#wkçÏŸõõõ%|䦦¦þùgøðáqqq„d ç:› ‰‰‰¦¦¦IIIC‡%vðˆˆˆÕ«WÏž=;55uÀ€ÄÞMÕÕÕYZZ&''GGG3†ØÁ‹ŠŠ–-[ÆÏÏŸ””$,,LìàÂ&h µ––GGG;;»ÀÀ@bÓ·ººÚÆÆÆØØØÍÍíÂ… HßVïß¿WSSc2™±±±„§oLLŒ¢¢â_ýuÿþ}¤/p8Ì€¾>~ü¸råJ^^ÞÄÄDqqqbŒŒ\³fººú«W¯‰¼û 233Û½{÷ßÿMìÈ,ËÉÉéäÉ“—.]š;w.±ƒ 4ÕzÖ©­­­­­-áWuÞ¹sç7Ο??oÞ<GîÖ˜Læ¾}û<<<üýý ?ר°°pÕªUuuuqqqÆ #vp’ €vš››wìØáççw÷î]eeebþüùš5k&Mš”ššŠM mªªªŒ¿~ý/&&Fìà>455µ°°Ø½{7Í/£ Ý 襸¸ØÐЛ›;!!aàÀŽÜÐаk×®k×®>}zÉ’%ŽÜ%¹¹¹555L&SLLläÈ‘”gR^^Þ¼yó¦NêççÇÅÅEàÈ»víº~ýúõë×ÕÕÕ € 8ñ ¬ÜÜ\}}ýþýû÷ïß___?//ꎠ‡WTTœ6mÚƒˆMßÄÄDEEÅ?¦¤¤°?}ãââttt† 2lذ+VlÚ´iÛ¶m³fÍ·¶¶ÎÏÏgsKmbbbÔÔÔLLLΞ=Klú¦§§«¨¨dee%%%!}¡["éô¦¦¦¦_{cUUÕ¨Q£ËÊÊÊÊÊ¥¤¤jjjˆm¼ÎTWW·yóæ?ÿü388˜ðÁ=<}ú”ðÁFµqãFÊaáè¹NfÇ2777ß¾}û¯¿þÛ½{wÇ?]¹¸¸¾ùßÕØØÈÍÍMlKôü²iåÊ•+"""çÏŸ'|ä/_¾,[¶LFF†òÍΜ&%%EZZÚÈȨ¢¢‚Ø‘[ZZœœœDEEoݺEìÈÀ!è¹Nfß2766þûï¿ ƒ——×ÂÂâGÿE `{{{ªŽ>ʵä„ ÒÒÒüÑ£Gþùç–-[êêê¼ûjii9v예ˆÈÕ«W yò„’~Ú|úôiúôéÚÚÚÅÅÅÄŽ\[[ÛzÉ2.ß‹žëd²fÀÏŸ?_¾|ùtùZÓýúõ ‹1bĈ#žz®“q7$è–ÒÓÓ äää’““û÷ïOàÈ,ËÑÑÑÃÃãÉ“'ÄGÝ%222×®]«®®NII)..nnnîÛ·ïˆ#FMìD¿ó¢££ÍÍÍ•””RRR„„„¹®®nýúõIII111£G&pdN††îçÂ… »vírrr211!väêêêÕ«Wþü966vðàÁÄþ úöí;uêTª»`Ô××ïØ±ãæÍ›®®® .$vð·oßL˜0!66–ŸŸŸØÁ8'ÞŽàGÊËËõõõÏ;Exú¾yófÊ”)BBBaaaœ¾">>^AAáóçÏ©©©„§¯··÷Ô©S-,,¼½½‘¾@7`è6âããååå‡;nÜ8b¿sçÎôéÓ·lÙráÂbï¦vîÜ©««»gÏ__ß®^§c•••ÆÆÆ‡züøñúõë  »À&hè.\¸°{÷îsçÎ-Z´ˆØ‘[ZZZ·¯+((;x÷•`bb"--œœ,&&FìàaaafffsçÎÇÄh  œ®¾¾~Æ ñññÑÑÑcÆŒ!vðÂÂÂ+Vpqq%$$P{‘ ÎÑØØxðàÁsçÎ>}zÙ²eÄ^YY¹}ûöàà`ww÷9sæ;8@÷‚MÐÀÑòòòÔÕÕëëëŸ?NxúFDD(**Θ1ãÁƒHßVIIIJJJIIIIII„§oHHÈĉY,Ö«W¯¾t<õŠE×sκ‡Љ‰>}šŒÁO:5xðàÇ“1xwÔÔÔ´ÿ~QQQoooÂ/++311‘””¤ü^À™è¹NÆ&hàPgϞݷoŸŸŸßôéÓ‰¹²²ríÚµÙÙÙ±±±¸ÁN«·oß0 11Q\\œØÁoݺµqãÆ%K–¤¦¦âªvmÀÀqšššìììþ¼mÛ¶˜˜77·¹sç>~hh¨™™ÙÂ… 322h~\Àïà ØÄÕÕuùòåׯ_'#} ƶmÛ CBB虾G••••””ÌÈÈ <}›››wîܹvíZWWW¤/Àïà H×ÐÐð÷ßÇÇÇ?{öLBB‚ŒŽŽŽ>ŒŠŠ¢çU=zdmm-%%EÆ•­ ÆëׯMLL ôòåKÂÇ 'Ì€\………šššååå111$¥ïÑ£G}||?~LÃiÙÇõõõׯ_ìØ±{÷îž¾,ëìÙ³3fÌX½zõýû÷‘¾B‰•••µµµýüüúöíKF‰£G^¼xññãÇbbbdŒÏ±åääÒÓÓçÏŸOx‰ÜÜ\Ë—/?}úÔÒÒ’Ø;Èâïﯭ­}êÔ©Ý»w“´î>|øðÅ‹ÃÃà ¿‡<‡ œ0aBRRRBB®]»ßðÞÒÒrúôiEEEuuõgÏž3†Øñ€}À@’£Gž9s&88XAA¤ööö·nÝŠŒŒ2dI%8PRR’­­miié¹sçfÍšEF‰ÄÄÄuëÖõë×/::zìØ±d”fÀ@¸––KKË7nÄÆÆ’”¾,kÓ¦MwïÞ §Oú›››Ï;wÙ²eIIId¤ïׯ_­­­çÍ›gmmýäɤ/©À@¤ººº¥K—¾ÿ>22’¤ÍÂMMM&&&/_¾ %£§ill|8UÊËËmllâââBCC±Í€*˜Ãoñöö655  5}}:yU(3cÆ ;;»ýû÷·þ™Œ*L&óüùó“&M9rdjj*Ò€` ]ÖÐаbÅŠÊÊʨ¨¨~ýú‘W¨¥¥ÅÈÈHYYÙÊÊŠ¼*TILLܳgOzzúÞ½{W®\Ù»7Y¿†_½zeiiÉ`0ž]]ÝI“&±­âï`2™÷îÝ;vìXAA­­­··7???ŠzyyíÚµkÚ´iIIIþù'Ù€T`ø?nݺemm"++˶¢YYYW¯^MKKc[Å_ÖÐÐpíÚµ£Göë×oëÖ­úúú}úôaCÝÈÈH[[[???6T²!€áݾ}›ýéÛÒÒ²fÍš={öˆ‰‰±­è/(++ssssss›`ø”¤/ƒÁ8vì'ßï(;;ÛÆÆf̘1999Ož>>ooïÞ½9eãÇúõëHÔ‚¯_¿=|øPRRrñâÅ .¤äïöªªªœ,X`oo?lØ0jûà4ô\'Óq™´ü²Y,–™™ÙçÏŸïÞ½ËÍÍMu;ÿ+77WAAáíÛ·‚‚‚¿6‹ÅJII ILLÔÔÔœ;w®ŽŽ'Ü/¨²²ÒÅÅÅÙÙY[[{×®]RRRTwÀ‰h¸Nf €écÓ¦M/_¾ eÃóºjõêÕ#FŒpppèÒ»>}úÒ¿mmmmmmuuuYÀêêêÓ§OŸ>}Z[[{÷î݈^€ÐpÌÀ>`š8xð`tttXX‡„Ó7ìíí§M›öõëW™±cÇJHH 8°}«eee………EEEŸ?.((ÈÌÌLHHøüù³†††¦¦æž={$$$(ìÿMMMÎÎÎNNN³fÍzúôé˜1c¨î8t0hök+""ÂÈÈèåË—ƒ¦º—úøñã£Gž?þæÍ›¼¼¼’’’ÚÚZ..®êêjaaáÁƒ‹‰‰ :tðàÁcÇŽ8q¢²²2çìÉnóøñcIII'''ªÎqèvhµNnɘ˜˜xñâÅk×®UTTÔ}¾ìÂÂB…+W®Ìž=›ê^º¬¡¡¡©©©oß¾T7Ò)YYYÿüóÏ«W¯Nž<¹`ÁªÛèNè³Nnã& ÃØØXTT4&&†êFº½–––åË—¯]»¶;¦/ƒÁàááéé[VV¶iÓ¦©S§ªªª¦¥¥!} 38qpzz:Õ-ô;vìàææÞ³gÕôXµµµÎÎÎ'NœX²dIFF†ˆˆÕ@·Á‰ „ð÷÷¿yófBBî(í/]ºtàÀiÓ¦ÅÄÄà gè*pÏ”––fii4pà@ª{éiššš¼¼¼ÇŽ{÷î]yyyª;€n Ü•––.\¸ðÔ©SŠŠŠT÷Ò£Ô××_¾|ÙÉÉIRRòêÕ«Ó¦M£º#èÆzæÆI‡^¢ºA566.^¼xÙ²eË—/§º—ž£u_ïèÑ£CBB|||?~Œô€ßDñ‘ßí³ð¿w`z>äÝÔÔ´ªªÊÏÏ»~ ñõëWWW×3gÎL:uÏž=²²²TwÐõàur(ÞMÃOœT‡JKK‹ŠŠBúþ¾÷ïß»¸¸xyyéêêFDDP~Gèa°šî9"""Ξ={÷î]μÞd7RXX¸zõj^^Þ””¤/ÜC0™L[[ÛcÇŽ :”ê^º±šššÈÈȈ‰‰½{÷îСCâââT7='Ý~ÇpÛŸ±±ºcžžžÜÜÜK—.¥º‘®ÎÍÍíØ±cqqq’’’Tw='0²¶«ª««÷ìÙãçç׳ð&Icc£‡‡ÇÁƒ•••ŸN. á(èîÍÉÉ©oß¾fffT7Ò ¤¦¦š››ËÈÈÔ××'&&^¹ré  ¸KÿíÝLUõÇñþá˜!?$¢´¤•”ùƒeü˜ñã^&˜ÄO²eƒXØœ¶Í\òW›AV4²… -]Ó]e¨QÌȹ‰ˆRä7È4ƒûý£ï_¿~Kàrß÷œó|üçÙä¾>ŸsöyÝóãÞÛÔ”——wêÔ)ž½úãããGŽÉÏÏ¿xñ↠.^¼ÈT°°ZýñÇ)))ï½÷ž···t;500PTTTXXèáá±iÓ¦ÄÄDGGGéPð°Zmß¾}Á‚\|¾£æææ]»víß¿?&&¦´´4 @:ÜŽV¥¶¶¶Ï?ÿüܹsÒAìNCCûï¾ûÝwß½öÚkÍÍÍ^^^Ò‰àÎ(`U:|øpLLŒ§§§t;RSS“››{îܹ͛7ó…Øì¬JGŽÙ°aƒt »0>>~èСœœœáááÌÌ̲²²Y³fI‡€¦ÇŸ`TTþÛ“###óçÏ¿råÊœ9s¤³Húý÷ßKKKóòòæÌ™³eË–¸¸8~„P)U¯ÉSưú;v,00PÏí{éÒ¥‚‚‚={ö}üñÇáááÒ‰`Ò8cPŸýû÷'&&J§`±XªªªÖ¬Y³|ùr‹Åòý÷ß—••ѾTJgýŠš/w\»vmÁ‚mmmºú6‰ÞÞÞ½{÷Ξ=;===%%ÅÙÙY:«Qïš<\‚V™ƒ†‡‡ë¤}ÇÇÇ+++?ýôÓššš¸¸¸âââ   éP`°Ê|ñÅéééÒ)f\{{{QQQqq±——WzzúÞ½{9å 1z<ëWT{¹£­­-((¨££ÃÉÉI:ËŒ9pà@qqqSSSrròúõëŸ~úiéPfœJ×äiâ XM>øàƒ´´4íµ¯ÅbùöÛo‹ŠŠÊÊÊV¬XñÆoDGGóq^ÚF«I}}}nn®t kسgOaa¡““Ó+¯¼’““×GÐ >†¤&ÁÁÁõõõÒ)¬`||üøñãÉÉÉ .4›ÍÅÅÅf³ùÍ7ߤ}è¬&!!!µµµÒ)¦¥½½=;;ûÑGݺukPPP[[Ï6Ð'=Þ÷VT{ÿ¿¿ßÇǧ¯¯ïž{Tvï »»û«¯¾Ú·o_kkëK/½ôꫯ.^¼X:{¡Ò5yšT¶ŽëÜ}÷Ý·hÑ¢ªªªÈÈHé,wåÊ•+0™L/¼ð¶mÛ"""¥s€<=¾éPÔünë£>úá‡JJJ¤ƒüöööƒ–••577ÇÆÆÆÇÇGDDhïámÖ¢Þ5y:ô8fEÍ;{``ÀÇǧ££ÃÞ¾˜b||¼¡¡¡¼¼Üd2uwwÇÆÆÆÅÅ >Mà©wMž=ŽYQùÎŽ‰‰yñÅ×­['DQexx¸¢¢âèÑ£•••«W¯Ž æ—Ü=U¯ÉS¦Ç1+*ßÙ‡Ú¶mÛ™3g¤ÅúóÏ?ëëë+++¿þúk³Ùéíí-’€Ú©zMž2=ŽYQÿÎ~þùçW®\¹iÓ&[¾hkkkuuuuuõñãÇyä‘ÈÈH£Ñ4{öl[Æ =j_“§FcVÔ¿³[ZZV¬XQ^^0£/ÔÚÚzòäÉšššo¾ùæúõëaaa‘‘‘>øàŒ¾.]Qûš<5z³¢‰ýå—_nݺ5444$$$!!ÁÍÍÍ*¶··÷äÉ“?þøãÙ³gëë뜜ÃÂÂBBBüüü¬òp ¬ÉS Ç1+ZÙÙcccG-**ªªªòóó3 ¾¾¾?üðÝÜîéééìì¼zõjKKKKKË… š››ÇÆÆžyæ™eË–Ì›7Ï sÚX“'KcV4·³¯_¿^WWWSSsêÔ© .tww{yyÍŸ?ßÝÝÝÅÅeß¾}¡¡¡uuuÞÞÞžžž×®]tvv~衇æÍ›·páÂ'Ÿ|ò‰'žX´hÑ< =º£±5ù.éqÌŠÖwöÍ›7»ºººººüqŸ¿6þüóÏ}}}nnn®®®sçÎåá)vBÛkòÿ£Ç1+zÝÙ`Ÿô¹&óm  €@ €@ € 0(`PÀ €@ €@ € 0(`PÀ €@ €@ € 0(`PÀ €@ €@ € 0(`Ø]×ÖÖ&%%yzzºººšL&éDXß=Ònn2™–-[ÖÔÔ”––Ößߟšš* kr°X,ÒþKffæŽ;þú§ÙlNHHhmmµî«88ØÝÀ@·ô¹&Ûû˜GGGÝÝÝoܸaÝ?«Ï öIŸk²ÝݾMEE…ŸŸŸt ¬ÌîîO488øöÛoïÞ½[:Öf±WÝÝÝ!!!ÕÕÕSø¿Û·oÿûQ»ººÚfzÿÈÛÛÛÚ¢—Ýo=l¥(ÊÄ$«W¯Þ¹s§Ñhœ¡×•¸0É6À$Û“lúœdáKÐwœñ®®®U«Våçç ÛGÀìî!¬ÞÞÞ¨¨¨œœÚ avwÖïï•µvíÚ}}^î°1&Ù˜d`’m@Ÿ“lwcžxWø–¡¡!777뾊½ \{˜d`’m€I¶}N²Ý} I‡û Cvw= €@ €@À¿²³³¥3È “Ž }L² 0É6À$Û€'YO~ ŽKР€@ €@ € 0(`PÀ €@ €@ € 0(`PÀ € Ç®­­MJJòôôtuu 4™LÒ‰´éÌ™3nnnÒY´¦££#11ÑÅÅÅÅÅ%11ñ—_~‘N¤MÃ3M竱 844´¯¯Ïd2]½zõÃ?ÌÎÎþì³Ï¤CiPJJÊý÷ß_WW'DkFFF ƒ¿¿ÿåË—/_¾ìïïo4GGG¥siÇðLÓùjì`±X¤3ØZffæŽ;n½¥5›Í ­­­²©4ÌÁA‡ÙÌÉËË;}útiié­-ëÖ­{öÙg7nÜ(˜JÛ8†gˆÎWcŽ*ettÔÝÝýÆÒA4‹Å˺ Ã[o½µråÊ[[Ž;–››[UU%˜JÛ8†mCo«±/Aߦ¢¢ÂÏÏO:p·ššš–,Y2qËâŋϟ?/•°½­Æz[788¼{÷îçž{N:‹fqö`]³fÍúí·ßom¹y󦳳³~ÎlcØt¸ëú ¸§§'>>þ“O>ÑÏþ;¤ÏÕXûì0ÁÄí‘‘‘ï¼óNxx¸T6Íø“Œ™àîî>888qËÀÀÀܹs¥òÓ¤ÛÕXûl™àÖÆ®®®U«V½ÿþûF£Q0›fÜq’1Cžzê©ÆÆÆ‰[Ìf³¯¯¯T`:ô¼k¿€ÿWoooTTTNNŽÁ`ÎLZtttIIÉÄ-%%%111Ry€)Óùj¬Ç' üýý³²²Ö®]+D/x€Åº~ýõ×%K–¤¦¦¾þú늢566Þ{ï½ÒÑ4‹cx†è|5ÖãQuÇû”CCCnnn¶£awœgo3áÒ¥K›7oþ냿F£1??ßÛÛ[:”q Ï4¯Æz,`Äéñ0â(`PÀ €@ €@ € 0(`PÀ €@ €@ € 0(`PÀ €•IJJÚ²eËÄ-YYYkÖ¬‘Ê`j,‹t“000°téÒÇ/]ºTQ”†††¨¨(³Ùìåå% À$p ¨Œ‡‡GAAAZZÚØØØØØXZZÚÎ;i_@u8Tiýúõ~~~‹¥¦¦¦¼¼\:€I£€Uêéé1ÃÃÃÕÕÕ>>>ÒqL ¨ÒÆÃÃÃûûûúé§]»vIÇ0iÜÔçĉmmmñññ©©©gÏž=qâ„t"“Æ0 2CCCË—/¯¬¬|ì±ÇE9þ|ttôéÓ§ÝÝÝ¥£˜΀•ÉÈÈHNNþ«}Eñõõ}ùå—322dS˜,΀À0(`PÀ €@ €@ € 0(`ü§»3ÅàIEND®B`‚gsl/doc/images/interp.png0000644000175000017500000000316013536674414013753 0ustar eddedd‰PNG  IHDR::3ßmtEXtTitlePNG plotË¥°H(tEXtCreation Time16 Apr 2017 14:17:46 +0000.Ñ‘_(tEXtSoftwareGNU libplot drawing library 4.4e¾†IµIDATxœíÝMŽÛ6`7s€ÁçèŠÇé%Rp€ GвNjYdWo»(ª "ª ´ ýÕ²DY¤Ä'Rï¥Öh(Úú†IS~ñw5M:ìbˆ!†bˆ!†bˆ!†bˆ!†bˆ!†bˆ!†bˆ!†b¨Oy!i 44ÐSÑ@)7 vÎ †¢Ë&»ÜÊf_^nMA~¹UMAx¹%ÔEDPD]¶Teª ?.1 & ÃI8B048n}ÐLbh>© huP¸:H® ªêµAåê 34÷âÿÿCÙê duP´:(\$ç¡.NÕ@'‚Uý$TPA%t¦‚r*(¥‚2*(¦‚*èHETP¸:HA4ø‰‚zÍP@ *HÎC·*m3 ÝB@* 6È2“ÎTPJÅз½tt€œNvàÅǃœ…D»y„¡ùUÒ©FóP¡@,”»@.';s\Æš ž¢G@ "¨eBg*(¥‚b*( ‚TMäA}£a¡¾Ñ°PßhXèö÷$RA’¼â3ôú A©yYòÞP9È£ |GAé ?Á1¶xGÅØ’AõÔ†÷¢ € © IUÖO¨î` óp G ʆ;h8BP¶Ðiwb  T$‚*`Ï *µ=¤ ¤%PÕ=&ÓKý¡s×î‰VºJ»±¡/Z%õß×m€…¢®½ º?I,$Z£ÐKáÂ~ ’íéÑ;öLH#š€š#šËÇÅV(›Š45i^dõþ8M£²«Þa賜€šKâæDwÐ'ašfPMÄØ®éÂìF bl×#Žf7š©‘úòðLÌËT¸ù§:ä*Þì} ÉÛµ¨Ú™Åþƒ¶…ðP¸Nhœü!¹Y¨•l*G%›òQÉf lT™’QÉf qÉf p+Ð8X'-w°Îy?µÕA¶i¡[²Í€ló#C·d›º%ÛDËPðê¡pt\¸ DPõ!¹*© œ J© L˜Á:ëŒ ëþzkÖÈyö£õAÖ©†Š=4ì냬SÿÝ ëDËPŸ¬íˇÌý A!C³Ü,dŸÖî‹ìBCFŒ €übldOÍ>Ý ²O"÷‚ŒÝ@RA‚ ’Dðé™ËCöËuOH_Þ…€ì—ëž0øïƒß‚>2Ê Ò÷PH *HAИõ‚ 1ëAC †Œ¨üa1d¬?Z+¢5¢‚ê€2‡ˡB¿²!0Æ–kýÈ\KçQ£,‰ìõ>i4Í@_µž ŽúWƒ ÉÈkÐBsˆ×Pò€ ÉÈ Šj(y@$¨ ‰†Ú¥†ðñ€À9Ä :í®ܱ] ÷mÒLóP!Ú•¦pÇv€žëê¨á‹#'èÃåd_à UMmž/÷$t}^Hè ¶Ô6Öµçø í¯Û“|DBj2ÛíñÒêÿ@b¯‘[ó?&¤ úæÿ ‚úsû»ª·‚RUàÖ³û±ö‡:îWUWõûUó?€cmybˆ!†bˆ!†bˆ!†bˆ!†bˆ!†bˆ!†bˆ!zè?Šqåñ¡)hþIEND®B`‚gsl/doc/images/rand-erlang.png0000644000175000017500000005023013536674414014644 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìÝg\WÛðY^U`A@@¥X@QÀ‚Š5TP1 FÑhìš[L¬(*F‰í±wTD{,¥)¢H¥Iïuß›wŸ}ÌJÝ3»{ý?äÇÌÎÎ\;î=gΜaq8 è%C:€4B €`P€@ €`P€@ €`P€@ €`P€@ €`P€@Ö4ýÚâQ| Øl¶££ãúõë³²²D‰·+á~LšO€è  GÒ¡þ7ReeeBB¯¿þZVVfmm}þüùVí„Έr ŒÅ´?bŠÅjõoSÞÒ3zôèû÷ï[ZZ¶g?BÜ^Xï`8´€èÀb±ªªª,XÀf³¶ê>|øðÃ?¨©©¯X±¢ººš÷Ɔ††M›6)((ôèÑcïÞ½üoŒ3fŒŠŠŠ––Öüùó+++[ÕjìׯßâÅ‹wîÜÉ;÷‡²²²+V˜™™)++khhŒ=úúõë¼ >ë`øéøcTVVΛ7OKKKEEeüøññññügFàéjâX¼Í®]»fgg§¢¢¢¢¢bggÊ¿‡¦Ïq(À4ùþûïÞ¿/°I7xðàþýûgggß»w/==}ýúõ¼—üüüªªª""" :´k×®³gÏr_JLL3fÌĉSRRâãã­¬¬æÎÛÚ`“'O~ðàÁg+½½½ëëë#""JJJRSSüñÇÀÀ@Š¢¸áÿÝÁÞô§›3gŽ……Åëׯ“““Ççää”’’Òl°/‹ëÙ³g³fÍZ¸paZZZjjê?üðÍ7ßDFFò6hâ¼0‚À«VÐZMÿŠQµsçοEà® »wïÎÛfÍš5ü¯†††4ˆûóŒ3¶lÙÂÿêÆ¿´Û/­¯ªªRRRúlUUÕ’’’î§éOGQÔ† ø_Z¿~ý7ß|ÓD*þ÷~é¥I“&íÛ·ÿ¥ÀÀ@WWWÞfMœ7&@ަ¿ÎR•ššú¥·TUU­_¿¾gÏžJJJܲ-++ËÛ&99™ÿ]………;väþÌf³SRRø_MNNnm®¨¨PVVþl›Î;7++«%ûiúÓýû#$%%uéÒ¥‰T-)ÀݺuËÈÈà)==ÝÐÐðKå?oL€.hštíÚõK/­ZµêÉ“'§OŸÎÏÏçp8UUU ¼WŒŒø7îØ±cQQ÷çOŸ>uéÒ…ÿÕÏ["--MOOﳕgΜÉÏÏ755577÷ññ á49ª‰OGQÔgû×ÓÓËÏÏÿÒÆ-HMåææêèèð¯a³Ù999¼Å&ΠÐDNNîK/?>88ØÚÚZEE…¢¨Ï®ÊÈ|ñ÷TKK+;;›Íg‹-qåÊ•áÇ¶ÒØØøòåËÅÅÅgΜ±··ß¼yóœ9sšØIŸŽ¢¨?~¶¨­­ÍýYSS³¸¸˜ÿÕÔÔÔ–Äf³Ùyyyükòòòtuuy‹Mœ7&À?Pòªªªy‹GŽi᜜Î;Ç¿æôéÓ­:tlll@@À’%K¾ª  Ð·o___ß°°0Þ&EEÅÚÚÚVåÔ©SŸ-Ž5Šûs=ž>}ÊÿêáÇy?7q,›k×®ñ¯¹zõªM«‚Ôt Æ¿hÑ¢íÛ·ËÈÈ?~<--­…o\·nݰaÃÔÕÕÝÜÜ(ŠºpáBBBB³ïjhh(--}óæÍ•+WŽ;dnnþÙ6Æ óõõ>|¸®®î§OŸ‡ Æ}ÉÄÄäÆ_ýµ¬¬l s&$$N›6¢¨sçÎí۷ﯿþâ¾´xñâ… >|˜;<88¸°°÷Æ&޵|ùrgggMMÍÑ£GSuûöíµk׆……µ0y¤/BHˆ¦Åþ®ñVxzzvêÔISSÓÇǧ¬¬¬…oäp8ÑÑÑ£FRRRêÔ©“¯¯o^^ž‚‚BÓ åååµµµ‡êïïÿÙ0+ÞžïÝ»çææÖ¹sgEEESSÓ•+Ws_ 333ãVÄ–„¤(ª¼¼üÛo¿íر£²²òرcãââø· 433“““300X¿~}}}=ï½Mëòå˶¶¶JJJJJJ¶¶¶Ü Õ-tww×ÖÖÖÐа³³»rå éDb ¸œ=zTZZJ:ŽŽŽùùùW®\ÉÎÎ ô÷÷&J\á°Môø;;;Ïœ9súôé4G`‚åË—oݺ•7õU\\œ««kRRÙT"…kÀLáêêzéÒ%Ò)Zû8ÂM›6)((ôèÑcïÞ½­ÝɶmÛø'ž455ÍÌÌjL)‚Ü:...ááá•••¤ƒ´šŸŸ_UUUDDDaaá¡C‡víÚuöìÙöì0,,ÌÊÊJXñ¤ pëhiiÙÚÚÞ¼y“t€Vc³Ù›7o655UQQqtt ܵkïÕÖ>¸°°põêÕ4~‰‚ÜjS¦L¹páé­6kÖ,þE{{ûÄÄDÞb«žœ››;yòä   ¡C‡¶äÐþþþüåÜßߟÎ;´Y„%@Ó—Ü?}údfföñãG%%%:S´÷°ŒŒÌg+ÛP>|ø0a„;v899 / CaƒhiiY[[ߺu‹t€Öù¬ú~¦…]Ð?~?~üÎ;¥¡úŠ p[L:õâÅ‹¤SSKº óòòÆ÷Ûo¿9’lZ €.hšípÈÍÍíÕ«Wvv¶¢¢"m©ÚCà_¶Öö¯ÚØØ¬X±BªæB@4³°ÙìÞ½{ß½{—tZEGG{xx|Ö;]\\L:—XBn#777ôB€ØŒkmÛN`ï´¦¦¦2JtA Ð’‡¬¬,kkëììì:Г è‡.hÆÑ××ïÞ½ûƒH±„ÜvS§N=wîé –Ð-@ ;233û÷ïÿáÃ999RýÐÍD¦¦¦ m€Ü.îîîí|–H'àv™:uêÕ«WkkkI Ã³gÏæÌ™cll,//¯§§7jÔ(ÜÙf(Àí¢§§gee…§€”X¸p¡µµõÍ›7ËËË_¿~½bÅŠM›6­[·Žt.±„AX´ê’û>|xêÔ)‘F`¦äää‘"*„Å\S¦L¹qãFyy9é Má>ŽpÓ¦MFFF =zôØ»woûw+'''++ÛþýH!àöÒÒÒrpp¸~ý:é Íðóó«ªªŠˆˆ(,,}ú™3gH§h›ÍÞ¼y³©©©ŠŠŠ££c``à®]»x¯¶ðyÀ¼-555ÕÔÔüýýéþ$X&Mštÿþý’’ÒAš2kÖ,þE{{ûÄÄDÞbKžÌ¿ennî©S§âãã7oÞÜì¡ýýýùë4©EFÁ ,ÚpÉÝÕÕuâĉÞÞÞ"ŠÐNÜkÀ222Ÿ­lg¸wïž··wFFFûÒ1a1fäæû¬ú~¦å]Ðü ——'‚°’X8¾þúë§OŸÐF-ï‚æ÷äÉ“^½zÑ™Sb  ‡²²ò˜1c._¾L:€;6$$$//¯®®îÇGŽùöÛo·lÙB:—XBwwwLÇ’mÕªUÇ·°°PVV¶µµ ½xñâøñãIçK„%@Û.¹×ÖÖvíÚ5::Z___©€~„%äåå'MštúôiÒA@   “§§çÉ“'I§1€,LÆ +,,|ýú5é Àt(ÀÂ$##ãééyâÄ ÒA€é0K€ö\rOHH=ztzz: 0Kl˜››³Ù쌆,|ß|óÍþóÒ)€ÑÐ-@;;rssÍÍÍ333UTT„˜ è‡.hqÂf³®\¹B:0 °Hxyy?~œt `.tA Ðþ‡êêj}}ý˜˜LK ÖÐ-fÝÜÜðlø`QA/44XT\WWE:0 °yxxà†`ƒ°Ö%÷ääd‡¬¬,99¹öï è‡AXbÉÄÄÄÌÌ,<<œt``Ñòòò:zô(éÀ8è‚@ˆ%%%FFFïß¿×ÒÒÊ€Nè‚W&L8}ú4é À,(À"çããL:0 °È1¢´´4&&†t``‘“‘‘ñññ9|ø0é À „%€Ð/¹geeõë×/33SIIIˆ»Qà ,ñ¦¯¯okk{ùòeÒA€)P€iòí·ßþù矤SS  ZQt8ÔÖÖvëÖíñãÇ&&&ÂÝ3ˆº Åž¼¼¼§§'fÅ.´€Ñ÷·oߎ=:--MVVVè;Q@ XôêÕK__Ïf ˜fß~û-fÅ ]Љ®Ã¡¼¼ÜÐÐðÕ«Wzzz¢Ø?º %„ªªê”)SŽ9B:†°¢û¾CQTll¬‹‹KJJ †b0ZÀ’£oß¾l6ûÖ­[¤ƒI(ÀÌ›7ï?þ HB´"킦(ª²²²[·n/_¾444ÝQ ýÐ-Q”••=<<ð€Bi†°¢nS•àä䔞ž.'''Ò@{ ,iÌÍÍMMM¯]»F:L̼yó´ º %‚‚ÂÌ™3ÿüóOÒA€´€ §LQÔû÷žž®  @ÃᠵЖLfffýúõ;wîé @7`¾ÿþû}ûö‘NtC&l„ ùùù‘‘‘¤ƒ­P€ “‘‘™?þÞ½{IZa–´ Ââ***211IHH`³Ù´Zƒ°$YÇŽ§L™L:Ð-`hnS?f̘´´4L À(hK8KKK33³Ë—/“4AfŠ ’N4AfŠI“&eee½|ù’t  0SÈÊÊúúúîß¿Ÿt a @ÿ ,®üüüž={¾ÿ¾sçÎôþ ƒ°¤‚¶¶¶««ëH‘C XR-`êÿïGJMM•——'ø¡,-,--­¬¬Îœ9C:ˆ 0ã,^¼x×®]¤S€h¡3ÎØ±cëêê"""HBf‹µtéÒíÛ·“"„AX„ÅU[[kllÚ¯_?‚1ƒ°¤‹¼¼ü‚ HQA Xâ-`êÿ§¯¯O6 €4C XêtìØqæÌ™AAA¤ƒ€Hoê1ZÀE¥¦¦4(55UEE…t)…°4266:tè‘#GHácDSiÒ¦(*22rÚ´iïß¿ïСé,Ò-`)ekkkddtöìYÒA@ÈP€™nåÊ•[·neH‹„˜éÆŽ+##sãÆ ÒA@˜P€™ŽÅb­\¹rÓ¦M¤ƒ€0¡‹©S§é,˜VbT€)ŠZ¹reiiiPPé ˜VâU€‹‹‹{ôèñðáÃ^½z‘Î i0 ¾HSSsÑ¢Eëׯ'ZAœšz´¯0EQ=zô¸~ýºµµ5é,-`hŠŠŠÊÊ•+×­[G:´”˜5õè!v-`Š¢jkk{õêuêÔ);;;ÒY$ZÀÐ yyùŸ~úiÍš5¤ƒ@‹ KŽY³feddDDDÍC–rrr[¶lY¶lYcc#é,ÐŒf paaá¾}ûÜÜÜŒUTTTTTŒÝÜÜöíÛWXXHODh¹É“'«¨¨œ:uŠthÆ pVVÖܹsõôôN:5|øðÐÐÐììììììÐÐPGGÇ“'OêééÍ™3'++‹Î¸Ð4‹µmÛ¶5kÖTWW“ÎMùâà.%%%ccã;wŽ7NàaaaK—.MMM­ªªeBÄq4?777{{ûeË–‘ öLE9kÖ¬ýû÷+++7ñæÊÊJ??¿£GŠ"Aâ^€‡ ’йsgÒYÄ悦•¸`Š¢üüü”••·oßN:€xC¦•༼|øð‘#GöîÝûþýû¢®¾ååå#GŽ´±±IOOOOO·±±qrrª¬¬lâ-œÿ%ÒxâÂËË«±±ñôéÓ¤ƒÀçZ1%‹ÅÒÐÐÐÒÒ¢¡9uèÐ!;;»Õ«WwìØ±cÇŽ«W¯8p`pp°¨+aX,V@@ÀªU«***Hg€ÿÑ¢=hРøøø;wîÜ»wo„ ÉÉÉ"uíÚ5///þ5^^^!!!"=¨D²··2dȶmÛH€ÿÑ|×öÊ•+O:äììÌ]1þ|OOÏõë׋(›ÍŽ‹‹c³Ù¼5999ÖÖÖÙÙÙ·g±Xl6»  @KKkäÈ‘kÖ¬éÕ«W›.1×€¹²²²¬­­_¼xahhH: €˜!y 8---&&†W})Š5jTdddbb¢(quêÔ‰MçΛxüƒ‹‹ËùóçËÊÊ"##mmmcbbDO¼èëëûùù­ZµŠtø/†6õäåå+**äääxkêêêTUUkjjZòö   ›7o6½™¿¿ÿ—ñÌ<-mVUUeiiyøðááǓΠN¤n&¬ÖvA&77×ÄĤ¼¼¼mG—°.h®‹/®[·.::šÿk 4@´OÓ·ýPUYYéãã#ìHEQ–––±±±ükâââ,,,ZøvÉ+Ÿíçææ¦§§D:PTøÌ™3¶¶¶_ÚàöíÛ¶¶¶gΜE,ggçãÇó¯9~ü¸‹‹K ß~îܹÁƒ‹ —xÛ½{÷æÍ›óóóI€/àÄÄÄAƒM˜0ÁÑÑ1((èíÛ·eeeeee û÷ï:tè×_mgg'¢¡XsçÎ}òäɯ¿þZTTTTT´yóægϞ͙3‡·ÿ½ÈNNN.\ÈÉÉ©««KMMýõ×_7nܸeËQkæææ3gÎüå—_H€æ®çççŸ:uêÞ½{ÑÑÑÜ–“ŽŽw^ªéÓ§‹ôq³iii‹/¾sçEQNNNüwÑðwÊß½{wïÞ½>,))a³Ù#GŽ\½zuÏž=Û|h‰¼ÌURRbnnbkkK: €ºAXdIp¦(êØ±cÿý·¬¬,é,LGx.h$^^^ªªª˜×€¬त$///===999===//¯””Q'a±X{öìY»ví¿ó ´i¾¿zõjÈ!fff=*--}ôè‘©©©ƒƒC||< ù@úôéãíí½téRÒA¤Wó]ÛãÆ›0a‚ øWîÞ½ûæÍ›aaa¢ÌFŒd_檨¨°²²:tèШQ£Hg`.’ƒ°TTTRRRø'¥¢(*''ÇÄÄDRr' ˜¢¨ÐÐÐ¥K—ÆÆÆ*((ÎÀP$a}鯳’’’°Ã­&L˜`aa±}ûvÒA¤QóØÕÕõܹsŸ­<{ö¬›››h"}vïÞššJ:€Ôi¾e]QQáëëknn>cÆ ==½?ž}úìÝ»wüøñ¤³0 0­¤¶Suÿþ}//¯¸¸8MMMÒYÈC¦•4`Š¢.\XZZzôèQÒAÈC¦•”àŠŠŠ~ýúíØ±ÃÅÅ…tÂP€i%嘢¨'Ož¸¹¹ÅÄÄ|ö,iƒL+`Š¢V®\™””„;ƒ@ÊaΜ…ê IDAT&, Û† O:E:€dBSO´€¹¢££¿úê«èèh]]]ÒYÈ@4­P€yV¯^åÊÒAÈ@4áïïŸ}ðàAÒA$ šz ÌïÝ»wC‡}øða¯^½Hg ZÀ@LÏž=·lÙâááQSSC: €ä@SO´€ÿÍÓÓSKKk÷îݤƒÐ ƒ°h…üo%%%ÖÖÖ{öìqvv&€>(À´BèñãÇS¦LÁ]I UP€i…ü%k×®}ñâEhh(‹Å"€„Œ°víÚ’’’íÛ·“ öÐÔ-à&ddd 8ðòåËööö¤³ˆZÀÀݺu öðð((( @Œ¡©'ZÀÍZ¹rå«W¯®_¿.#ƒïp ÉÐfÙ¼ysyyùï¿ÿN:€¸BSO´€[âÇ ¸páÂàÁƒIg´€qºvízèÐ!OOO\ h4õ@ ¸åV­ZõòåË›7oÊÊÊ’Î |˜ˆƒV(À-רØèììleeµuëVÒY„]ÐÀP222'Ož¼téÒÙ³gIg'hê €°@µµµ ©©©¹¹¹yyyššš ,à¾;zôè;wîôîÝ;11qݺuêêêZZZ:::=zô?~<Ùäm&ºŠÐA;‰ôîÝ;OOO]]ÝÎ;ó^êÛ·ïîÝ»]]]###;vìèââRZZZPP––VQQ!°ççç§¥¥™››«ªªÒø!˜M=¤¶ÜØØýòåK__ß6¼}É’%ñññ7nÜhÉ€¬'Ož,\¸ðíÛ·FFFýû÷wuu8qb R¸ ¢uëÖ-//¯×¯_744´a'[·n­­­õ÷÷oÉÆ/^¼(..>yòäСCÛp8±&¥M½¦Ia xîܹVVVnnnúúúíÙOAAÁ Aƒ6mÚ4}út¡»sç‡Ã€° K¾™3g¾{÷îùóçAAAô”Åb:t(==ý×_õ±TTTúõë·iÓ¦®]»þøã¯_¿õÚOûZÛOº kkkååå‰:??ðàÁ¿üò‹—— ‡KII9vìX—.]æÏŸOÃá@à0­$¬“•0bĈ'NŒ5Št€VÃ5`WæææçÏŸ÷ôôŒ‹‹#›$..ß«€9P€%Jnn.é :4 ÀÅÅåãǤ2ÔÖÖz{{›››’ŠÀƒ,!ª««}||æÎK:ˆ`¾¾¾ÎÎÎåååDÈËËGGG>|øåË—&&&«V­"€;»kÀ®®®=zôVVV&ç‹|}}333¯^½*''G0FaaaRRÒÀ fqAX´¯üìÙ3WW×¥K—.]º”t–f444LŸ>]NNîĉ22è}1€L+ñ*À™™™‰‰‰NNN¤ƒ´Hmm­³³³©©éþýûIgàÑ£GvvvdèÀ((À´¯,vJKKGŽéììÜÂÒ¦¾¾~ܸq ¾¾¾¾¾¾]ºt!ÈÃmH 9ÔÕÕoܸqúôé={öÎò?:tèž——geeµlÙ2Ò‰@’¡©'ZÀ4ÈÈÈ6lغuë|||Hg ¤¤äýû÷ C4­P€éñþýû#FìÚµkêÔ©¤³†.h (Šjhh¨­­%D8ÌÌÌÂÂÂ.\xãÆ ÒYZáÓ§O¤#€$@³gϾqãFCCé,BÓ»wïzžRÜ~eeeVVVOŸ>%Ä °ØX¸paZZZHHˆ’’é,Â4pàÀK—.yzz>xð€t–æ©©©%&&ÚÙÙyyyÙÛÛߺu‹t"W¸Ø)¯ûûû‡††Þ¹sG]]t‘¸ÿ¾»»ûåË—Hgi‘ÆÆÆšššéÓ§“Î"„AX´b`¾r劃ƒƒŽŽé "tûöí™3g^½zuРA¤³ü˜V ,ÀR"<<ÜËËëÊ•+vvv¤³PFAƒ”3fÌ‘#G&Nœø÷ß“ÎÒv©©©îîî‘‘‘¤ƒ£¡³Œ?þÈ‘#...Ïž=#¥ttt† âîî>|øðÐÐPô¦€@èk]ÐÄ………Íš5ëÌ™3#FŒ ¥êëë/\¸ðûï¿Ï›7oþüù¤ã@á0­P€™àÁƒÓ¦M;räÈW_}E:KÛq8œúúz<^ @|¡ÓŠx>~ü¸ŒŒÌÌ™3 f`‚çÏŸ»¸¸Mž<™tR„%E¢££—/_Þ¿ÒAÈ8p`XXØ÷ßêÔ)ÒY„,;;ûýû÷¤SI(ÀÌRVVæîî¾gÏsssÒYÁÚÚ:""båÊ•üñé,mWWWWXXÈ¿&66vÈ!nnnÏŸ?ÿl㪪ªììlÓ(ÀÌ2þü‘#Gº»»“ <ضmÛ¦M›Hgù¢´´´³gÏòŸ={öÃ?ð=zôý÷ßóÃÂÂöìÙ“šš:bĈiÓ¦õë×oøðáüï]³f o1<<ÜÛÛ›·µwï^Þâ§OŸÞ½{'ìO´àÀ¿:-õõõ¿ýö[ee%‘£3\vvv¿~ý,XÐÐÐ@$@QQÑÇy‹Ïž=9r$o1%%åÀ¼ÅÒÒÒwïÞµd·µµµ'Ož,,,üÒ555¼ÅŒŒŒððpÞâƒV­ZÅ[¼}ûö† x‹999)))-‰_"ºŠ€AX„•””Lœ8QOOïèÑ£òòò¢>\AAÁñãÇ/^Ì]LKKÛ±cG`` w±¡¡¡¾¾^AAAÔ1Z%?????ß‚»¹víZîâ_ý•››ëææF. €øÁ ,JCCãæÍ›555_}õUii©Ð÷_QQ±hÑ"Þ¢¢¢¢ŒÌAŒŒŒxÕ—¢(YYY¦U_Š¢´µµyÕ—¢¨ñãÇóª/EQjjj:uâ-8p`×®]¼ÅÒÒR‰yÔ4€X@q¢¨¨xîÜ9ssó¡C‡feeµsogéÒ¥uuuÜEeee+++ÞW]•ü±‡h_~ùÅ××÷íÛ·ÂÚaß¾}ù'6™>}úŒ3x‹{÷î忺üöí[Œ)`3²²²^^^QQQ­}ûùóç‹ŠŠ¸?³X,KKK^³ÅbÍ™3‡Åb 3n;,^¼ØÀÀ`øðá“'OÅäØšššl6›·øóÏ?/Y²„·xóæMþé¬?~Üþo<ÀÄÒÒ¥KwïÞ=~üø°°°¦·¬­­­¬¬ä-¦¤¤ógÏž­¢¢"ª”íÓ¹sç5kÖ¤¤¤899Í;W½îMX´h‘‹‹ oñï¿ÿæo_½z5''‡Î<’£ sVAAAçÎé9–äyöìÙäÉ“7nÜ8gΜ/mãçç7lذéÓ§ÓLâýþûïÓ¦M366æ.ž8qÂÙÙYSS“l*QÀ ,É”˜˜Ø§OŸŠŠ ÒAĕݣG¶mÛ¶jÕªÆÆFîʇ=z”·Í¾}ûP}…nåÊ•¼êKQTBB×ýñãÇ1ž  Y(À$ýðÃ+V¬`l¨X055}úôéÓ§O'NœXRRBQ”®®®™™oæ\Ó…Ë—/§¤¤NAmÞ¼YCCƒûsCCÃßÿÝ¡CÞâÅ‹ÉE`.`bÎ;—ŸŸÏ?A´MEEEAA±±ñ Aƒ’’’zôè1xð`Ò¡hòîÝ;;;»3fÄÄÄÎòYYÙ}ûöñîà*))¹sçïÕŠŠŠ—/_ŠÀ,¸, ×€KKK---Ïž=ëàà ÒIªØÛÛó¦ã¨©©QPP^³fÍÙ³g‡ F6ÊÊÊ<¸{÷n›+W®ŽÓŒ„„„€€ÞÌÞååå ¼Ö3áq„´¢¡×ÖÖ†‡‡;;;‹ô(lþüù+V¬èÞ½ûgëïܹãéé¹fÍiëZ¨««‹ŽŽ8p é ­sãÆ+W®}x‹û÷ïOKK# @4P€¡äåå“““ëëëÛ¼‡ùóç_ºtiþüùëÖ­ãÝ%,mdeecbbÆŒóÃ?ôéÓçøñ㤵B=tuuy‹***ü×|èÚµ+ ºsçÎ7ß|óý÷ßÿôÓOüúÉÐÐÐ ++ËýùåË—Gå~3@›¡,öÞ¿òäÉÑ£G“Â,………ÎÎÎ 4ËÉÉéÅ‹·oß=zô‡h8¢¸¨¨¨°±±Ù±cǧOŸHgi;^õ¥(ªGóæÍã-¾xñâÖ­[$B4˜&¿üòË’%K´´´Ha–N:EEEñÿé)==½{÷¸X[[Ÿ>}šžƒ2ŸŠŠJPPЫW¯ÌÌ̼½½£££I'j/555+++Þb}}=ÿh¾”””ÂÂB¹þº z‡CddääÉ“1H„¢¨ƒVUUñßîI¿ÈÈHOOOGGÇ]»v©ªªLÂ(EEEÁÁÁ•••ëÖ­#E„¶nÝjll~üø—_~!˜HÁ5`pRÓRRRºwïN:Iµµµ{öìùý÷ß½¼¼Ö®]‹yƒ[+!!áèÑ£§NêÞ½ûƒHÇa–ßÿ]IIiáÂ…¤ƒÀ?p0­P€ÿ­¬¬LRÛôm–——·fÍšk×®mܸqÖ¬Y´=ÕXb466&''KÀãÂUUUUUUÅZñçŸZ[[ÛØØM%Í0 Hªªª²³³«¨¨ „Ytttþøãk×®?~¼o߾ׯ_'HÌÈÈÈ úþ›’’ÿÀÆ®]»ò?»óîÝ»¸1]b ©'ZÀÿV]]­¨¨H:s]¿~}ÕªU;wÞ¾};&Ïj¿µk×VUUÍœ9³oß¾¤³0Ë‚ ~úé'===îbqq1ñGkK<´€þi}P}›æììëíí=yòdOOϤ¤$҉쇇‡¢¢â¤I“úöí»uëÖ²²2Ò‰˜"00W}ëêêúôéƒûâÄ 0öéÓ§)S¦HÛí"í!++;{öìwïÞ™››ÛÛÛÏ;W:ÇŠ …¹¹ùÆSRRöìÙ“––&=óK·Šœœ\FFïö⌌ ²‘ UÐ×*@Û:Ž=êââ"I³Rp8ÞLÐ*EEE;vì8pàÀŒ3V¯^Íf³I'ÉW[[›’’Ò«W/îb||ü³gϾýö[²©$º ™îÇË–-“——'¤]8ÿ£pQ}Û¬cÇŽ›6mzûöm‡,--W¬X‘››K:”¤‰‹‹;|øpAAé L!//Ï«¾E)((hkkóð k¦AŽƒzxx¨ªª’Ò.YYY¿üò :E„EKKkçÎ111555Ë–-ËÏÏ'JrÔ××ߺuËÄÄ䫯¾úÏþƒëÄŸ155åï‘NJJzõêo1''§ººšD.ø/tA ÐÚ‡ºº:##£Û·o[XXˆ.ˆµ?þú믧OŸž3gÎÒ¥KuttH'’W¯^=}úôŒ3¦OŸN:ŽØX½zµ¹¹ùÌ™3¹‹¸ÞÔLÄA«ÖžîóçÏݽ{Wt‘D§±±1&&·ùÓ#33ó÷ß?}úôÔ©SW¬X!åŠsŒ7nýúõƒ "„‰p ˜Ñœœœ‚‚‚H§h£ÌÌÌ-[¶à{= öîÝûöí[6›=hÐ //¯øøxÒ¡$ÜÁƒ1½Y.\°¶¶æ-zxxàù4@‚N:õìÙ“tŠ6244<þoÞ<îb~~¾¦¦fÓ%˜VâX€Z®±±ñÉ“'!!!—/_æp8®®®_}õÕ!CZÛ2‘zûöíáÇlooÏkÏAû544ðfäõóó7nœ‹‹ wñíÛ·ŸÝ`†QÐ ÀW_}•””D:ˆ™!C†lÛ¶-))éÒ¥Kªªª?ýô“¶¶¶««ë¡C‡0|š!TTTÔÔÔþøã^½znݺ•t" Á?þþýûyÕ—¢¨€€€„„ÞbXXXQQ‘è’ ©'À—¾ïTWW§§§óOÝBVRR’©©)é !>}ú~ýúõððpƒqãÆ?ÞÁÁƒû˜ ))©¦¦ÆÒÒ’té²bÅŠ…   š>_*À.\øã?nß¾M$Ú444<þüÆ7oÞLNNvrr3fŒ““S÷îÝIGÖ¬Ys÷îÝ 0ÀÖÖ¶GÏ%\¸L«/îÉ“'Oœ8qÖ¬Y´'ú¯Y³f-_¾_„yyy7oÞ¼}ûö;wF5nܸ‘#GvìØ‘t4øGiiiTTÔË—/_¼xñâÅ‹7NŸ>t(‰‚L+§»´´´[·nd'ÀЉ‰±²²B¯ Ð/!!!""",,쯿þ222>|øˆ#;uêD:4/<<\[[ÛÂÂBAAt1ƒL+§ûĉ.\¸rå ‘HÌQ__}ÿþý{÷î=~üØÄÄdèСÆ >|xçÎI§Á–/_~ëÖ­¤¤$###›€€---Ò¡Ä 0­žî%%¥1cÆÐŸç矞6mîת««{ñâÅ_ýuÿþý¿þúËÀÀÀÁÁaÈ!C† Á5cª««{óæMTTÔŒ36…kkkåååéÆd(À´bÚ}À?îÓ§ššé M©¯¯‹‹{üøñ_ýõø}D5IDATñãÆÆF{{û!C†888ØØØà&c櫪ªÒÖÖÖ××ïÝ»wïÞ½­¬¬\]]I‡"˜VL+Àâ(==ýñãÇOž},,, Hg„æÕÕÕ¥¥¥½ÿ>))éýû÷½{÷öõõý÷f%%%:tøìùŒ‚L+Røñãǽ{÷&;ÑÓ”——¿yó&..îÍ›7¯^½Š¯ªªâŽÑµ²²²°°èÝ»7î?_{÷î]¾|yÇŽŒŒ ½½½ÇG:Ôÿ@¦ÿé>uêTttô¶mÛÈFž‚‚‚¸¸¸øøø×¯_¿~ý:>>^VV¶gÏžVVV½zõ233333ëÞ½;n|çãÇiiiiii={öØSññãGccc}}ý®]»Òy³2 0­øO·›››‹‹‹···ˆŽ5sæÌŸ~ú s;´G^^ÞÛ·oß¼yóæÍn‡gVVV÷îÝ-,,¸× {ôèaffÆf³I'…6âND˜žžž™™™}øðaOOOzL+Þ鮬¬ÔÓÓKIIÝl·¯^½²°°À᪭­}ûömBBBRRRbbbbb"÷‰~Üzlfffbb¢¯¯obbÒ­[7L®.^ëëë6‚===Ÿ?®¯¯ß­[7CCC//¯ö?³˜V¼Ó}éÒ¥„‡‡ wÿ˜ì €ˆââbÄÄÄ´´´ŒŒŒäääÜÜ\CCCSSScccSSSCCÃnݺá&@qT]]ùÿÒÓÓ§OŸÞ£GoTZZª««Ëf³ ÌÌÌšø›,ºŒï}Mùûï¿…>[CCƒ­­mDD~½h¦©©ikkkkkË¿²¦¦&)))55533399ùéÓ§Ü~ÎŠŠ ###SSSccãnݺèëëêêê¢Ëб¹ƒšÞ¬cÇŽ©©©oÞ¼ÉÍÍÍÌÌ<~üxÿþýÿ½Ydd¤H…°üßw8‹ÅîþKJJ444„»O®ÊÊÊ”””¤¤¤ôôôôôô¬¬¬¬¬¬ôôôOŸ>±Ùl^+YWW×ÀÀÀÐÐÐÀÀ k×®èÍ–$ß~ûmddä«W¯ÐM¡w8466FEE‰éMèÀ¯®®îãÇéééùùù999Üœ‘‘‘››«­­­­­ÝµkW}}ý.]ºp+´ŽŽN·nݺté‚Ùâ×€i%ôÓíççwéÒ%¡7¦€9êëësrròòò>~ü˜™™Éý9'''???===''GCCCGGGKKËÐаk×®l6›[°uuu¹? B3 0­0%ˆBþÿËÈÈÈÊÊÊÍÍýôéSnnnnn.w½¦¦¦ŽŽŽ¶¶6›ÍîØ±#·`óÖèè訫«c®š¡ÓJ(§;$$$55uÑ¢EB‰Ãá|úô)??ÿÓ§O999ÅÅÅEEEyyyÜÚÌmI—––rŸÚÛ¹sg Î;kiiuêÔI]]ÍfwêÔISS“Û˜ÖÐÐ`òüŽb˜VB9ÝYYYµµµÝ»wJ$®ºººüüü‚‚‚’’’‚‚‚üüü¢¢¢’’^ÍæVñ’’’šš MMM mmm---uuuÞncš÷·Á-##Cúó1 p3222/^|ûömŠ¢FОéÚÛvº9Npp°··7îñ&¨¯¯/ùÜftiiiiiiQQQiiiII ï¿¥¥¥ÅÅÅÅÅÅ***¼ÂÌ¥¢¢"//Ï[TWWWSSSSS“““ã•s%%%%%%ÒWTppSÊËËGŽéããLQÔþýûœœbbb”••Û¼Ï#GŽøøø´ê-,‹û TGG§ÍÇ–:tîܹUOª(++ãÖcnÙ.---//¯««+...))ÉÎÎ.---+++//¯­­å•󪪪êêjõÿ§¤¤¤ªªª¬¬¬ªªª¡¡!++«©©©©©Éb±455ÕÕÕ;tè ªª*''ÇÝ@AAAQQ‘[ÅEwB˜FZÀ»vízùòå‰'xkfΜ9pàÀ… ¶m‡,ËÍÍíÂ… Ín_ZZjooß¶H ^{ºººº¬¬¬²²²¢¢¢¤¤„Û/**¢(ŠÛønhh(++«¯¯/+++))©­­å–ðÊÊJ‡£¢¢¢  ÀmAuìØ‘×Ô¦(ŠÛIέÖ:tPSS£(Š[Ú•••:tèÀm©s·á–|Š¢¸õ¾mŸ -à¦\»vmÕªUük¼¼¼~ÿý÷6`Š¢¾þúë–l–]PP€ ”Ú555•••Üÿr8œââb^S›¢¨’’’ÆÆFnµ®««ãõÔÔT‡Ã}W]]ïK@UUwEqÛñÜCpK5·Æó*´ššZ‡¸MðOŸ>=yò¤¦¦FNNNà YÂ" -`6›Çÿœ“œœkkëììì6ì­¶¶VAA!''GàƒSÒÓÓ×­[wôèÑ6§‚***jkk?«ÐÜ9·´«©© :TEE¥ªª*22ÒÑу°¾H^^¾¢¢‚¿{¡®®NUUµ¦¦¦ { ;v,ï´ÔÖÖ.[¶lÏž=¼Å/^888´?60Ÿg†àˆ?99¹ÚÚZþ5ÜÇ 5ûÆuë։䜀Qñ’„°p» )Ì„Õ&8imƒóÖ68om€“Ö6¢;o’pϵ¥¥ell,ÿš¸¸8 Ryš% ØÙÙùøñãükŽ?îââB*@³$¡G¢¬¬¬oß¾sæÌùî»ï(ŠÚ¿ÿ‘#GbccÛ<*:jÚ'­mpÞÚç­ pÒÚ]ÐMQSS»{÷ndd¤¡¡¡¡¡á‹/îܹƒYÈ€Éð…H|Olœ´¶Áykœ·6ÀIkÑ7YQìWÜ >œtñƒ“Ö68omƒóÖ8im#¢ó†/DHÂ5`±ƒ @ 0(À € @ 0(À € @ 0(Àÿ•‘‘áææ¦®®®®®îææ–™™I:‘xˆŠŠòóóÓÔÔd±X¤³ˆ‡‡º»»kkkkhhØÙÙ]¹r…t"ñðìÙ³9sæËËËëéé5êâÅ‹¤C‰™œœ333üª¶ë_„~à”——9ÒÆÆ&=====ÝÆÆÆÉÉ©²²’t.1ðÍ7ßèèè<~ü˜t±áè蘟ŸåÊ•ìììÀÀ@ÿàà`Ò¡ÄÀÂ… ­­­oÞ¼Y^^þúõë+VlÚ´iݺu¤s‰ ‡ãíí½aÃÒAÄç }ÿxÒ?víÚõòåË'NðÖÌœ9sàÀ .$˜J¼ài£-´|ùò­[·ò¾PÇÅŹºº&%%‘M%Ž’““ PTTD:ˆxعsgLLÌñãÇñ«Ú4œ%´€ÿqíÚ5///þ5^^^!!!¤ò€Û¶mw–©©)®w´œœœ¬¬,éâ!&&æÐ¡Cûöí#þ øñññ}ûöå_Ó§OŸ7oÞÊÒ#,,ÌÊÊŠt 1SRR½”þÝwß‘Î"ªªª¼¼¼Ž9¢¦¦F:‹8ÑÕÕ•““ëÒ¥‹§§çÛ·o…¾àuêÔ‰MçÎ Iå)QXX¸zõꀀÒAÄw8Œ¦¦¦£££ššš¿¿?éDb`É’%S§Nµ³³#Dœ¸¸¸œ?¾¬¬,22ÒÖÖÖÑÑ1&&F¸‡À•€ÈËËWTTÈÉÉñÖÔÕÕ©ªªÖÔÔL%^pa©µrss§M›æïï?bÄÒYÄL^^Þ;w–-[6oÞ¼µk×’ŽÃh!!!;vì¸wﯻ¿ªmróæÍÿkßþ]ÙÂ0ŽÏý•),T¢(Ñ"EÐʈAA L“B°P [6‘`i‘FÐFP!?ÔÂ.¨#ØEDÔ8AF¬!·X1®»{÷Þ»q_göû)Oqæ!3‡'gSÁ9¹ /TU5 CUÕבûû{¯×›ÉdSÙ «ú?¹½½ ‡Ãº®Kg±«d2911q}}-äSknnŽÇã ¯#,ÕÿÁ4M—Ëõüü\Á9yý¢½½ýìììíˆan·[*œíîîn```yy™öýÙlV:Åg—N§ß}ÏúA¶:ØGüe¡€_øýþh4úv$ Iåƒe³YŸÏ·´´¤išt{;>>nkk“NñÙ•¾ñ:(ÍN677{{{+<é·÷æÏôôôÔÔÔ …r¹\.—[\\üò¶A:—ð8ýK^¯wccC:…ýô÷÷ooo›¦Y(nnnÖ××ëëë÷öö¤sÙKõ§4MÛÚÚÊd2…Báòò2 ÕÖÖ¦R©Ê^…“€²«««™™™x<®(Š®ë+++oOMð#ß}‘Åsõ¾û‹åóùªªªßÆF’Éd$9<<´,«®®®§§gvv¶»»[:—ýpüS‰D"‰Y–¥ªª¦i ­­­•½ ·œ €@ € 0(`PÀ €@ €@ € 0(`PÀ €@ €@ € @ÙèèèüüüÛ‘¹¹¹‘‘©<€ƒýU*•¤3ø,=ÏÎÎŽÇãQåääÄç󆡪ªt4ÀiØ(«©©Y[[ Åb±X,p8Lû0€÷&'';::J¥ÒÁÁÁîî®tÀ™(`©ëºeY‰D¢¥¥E:àL0€÷¦§§ûúúÎÏÏWWW¥ãÎÄ0€¯Äb±t:=<<<55uzz‹Å¤ÎÄ@Y>ŸïêêÚßßw¹\Š¢\\\øýþT*U]]- pvÀÊ‚Áàøøø—öUÅívƒAÙT€#±@;`PÀ €@ €@ €€¿T“žtn\]'IEND®B`‚gsl/doc/images/rand-chisq.png0000644000175000017500000004553013536674414014512 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœíÝw\gâðYAé, ˆR¤±ƒ 5DDb4Š1±\Œz?cb>~þüù\.W^^^WW×ÇÇ'22’~ˆÃáôò½?*‰^õqþcРA\.wòäÉ;vì(..îË÷ö'†pßaéûó … (Š:räȇ~¸hÑ¢¬¬¬úúúË—/wvvNŸ>t.±Ãçóù|~SSSVVÖwß}×ÐÐ`ggüF;a³Q· ¶8|>ŸtÂ222Þy礤$---Áíß|óͶmÛ(Šâpdë_Ê«~Þ·?xð`úôé·oß¶´´ìçþ…õ|a}/€Ha @íß¿ÿóÏ?ïÖ¾EÑíKëììܹsçÈ‘# 4zôè_~ù…y¨—9VCCæM›LMM¬ªª:}úôëׯ3fddxzz*++kii}òÉ'MMM½/º n,))Y»ví!CŒŒŒ6mÚÔÒÒÂ<§¹¹yݺu\.WðùwîÜqvvVTT9rä±cÇwûrŒW¿U=°µµÝ°aÞ={º…|ÕÏN?YÍî%¶`þ¦¦¦Õ«Wkii)++{zzffföø¶tÛøª×bžvíÚ5WWWeeeeeeWW×7nî¡—?t!àÈhnnVRRêöœ^~öKñ娂ïF·;vìXºti/©úRÀóæÍ |èàÁƒóçÏgžÖË:@ÿ¡€úTÀÌ|‹VSS£®®Î<úªotvv^¹reqqñË Îáh999},àæææ;v˜™™)))ÑKYrrrÌsòòòº}£±±ñÓ§OÃ6¬/1^ ›ÆÆÆÁƒw{N/?{¥ørlÁwãåzzz½¤êK1¢°°Pð¡‚‚CCÃW½¨à:@ÿá05lذ¢¢¢ÞŸ3räHÁ¡ººzmmm·çpÐ[Ο?_UUebb2f̘åË—‡„„ðÿsBÐóçÏõõõ¿½Û°›®®.æëÍ›7ÇÅÅ;w®ªªŠÏç777wvv þ8ݾ·¨¨hôèÑL6 ²²²·‹Ñ£üüü—¿«—Ÿ½G/Çî%•¾¾~UUÕ«ž,ø^õ¢¢¢BGGGp —Ë-//g†}ùCxk(`jêÔ©ááá½?gÀ€×ÿcüÝ–Þbddtùòå/^œ?~ܸq»víZ±bý––Vii©à· ÕÔÔ^¼x!øh^^óuppðÑ£Gíì씕•)Šzöì™à3ååå»:thii©`<¦°{ÑGW®\™2eJ·½üì=z9v/©JKKµµµé¯{¯zÁår+++·TVVêêê2þü¡¼5üõ Ö¯_ÿÓO?UWWwÛþí·ß eÿƒ ²±±YµjUhhhPP½qúôégÏž|ÚéÓ§™¯G/øèñãÇ™¯›››™á‰'z0uêÔê=F_¤¥¥íÛ·ï³Ï>ëñÑvEEŶ¶¶7z•n!Ïž=;mÚ4úëÞß«^^ËÞÞþÚµk‚[®^½jooÿFÁÞ‹ËÝâë×_577®©©ijjŠ÷Ýw©¾‘íåßÑĉO:UTTÔÞÞ^VV¶eËOOOú¡ììl.—{àÀòòòòòòýû÷/^¼˜ÙÕ¹sçLLLîÞ½ÛØØ˜““³yóæU«V1.^¼øƒ>(++«¨¨øñÇ,XÐ{˜ŒŒ ==½ýë_ÏŸ?çñx‘‘‘ÌIX½ÇxÕÜÑÑQSSóçŸ~þùçÚÚÚ/^|ù9½üì–––—/_îèèxù»^õ/^¼˜ yàÀ.—Ëœ¸Þû{ÕËkÅÆÆª««ÓgAWVVž9sFCCãÞ½{}‰ÐøËð—ØØØyóæikk8ËåΟ??22’~è­ øÖ­[>>>šššŠŠŠ&&&_~ùå‹/˜GÓÒÒf̘1xð` •+W666 îêàÁƒ¦¦¦òòò;vìèèè`­®®þàƒ444ÔÔÔ–/_ÞÐÐðÚ0©©©žžžC† QRRš:u*ó£½6F·™¦   ­­=qâDÿn§Y1ßÛËÏjjj*''×÷_qx<ÞǬ®®>xðà™3g¦§§ >³—÷ª÷׺|ù²“““’’’’’’““} º/‘ú׈#¸l€ìÀ1`PÀ`½ €Ì€@€  @ €0(`PÀ €@€  @ €))àû÷ï¯Y³FMMÃáÎðzRRÀK—.ÕÑщ% O¤í~ÀŽ´ýD •¤d YPÀ €HàK—7ú‰¶oßÞã{¢¨¨Èîˆ/–´²$”“°„²“C‡=|øððáÃýÜ$ºs{±-*FFFyyy¤S€˜B‹ÊÈ‘#óóóI§1…%hQí¤¹¹YSS³±±ç\X‚~ Îtûš %%¥!C†TTTâIJ ¸ÇÌH‡Â*4¼’”°xBÀ« €E ¯‚!CC‚Ò)@¡€E3`x°¡€@ú͚ܿ5jjjÄ?l"éPÀ"4räÈ‚‚q8@X–.]ª££K:ˆÄ“¶ q…?v­££óðáC.—+”½ˆÑ]¡B¬àB’ «Ð &,--ãââ˜ass³¹¹y`` ÁH2,Z(`¾¾¾ÁÁÁÌPIIiûöíAAA#É8°h¡€@Løúú^¼xQp5uæÌ™÷îÝc†œ^‘ˆ,åPÀ¢eddôìÙ3Ò)(KKË¡C‡ÆÇÇ3[ÚÚÚx<3ìýîñý|uÿÞ ^¤üýýû™_PÀ¢ebb’M:E½´ }üøqKKKv^Úßß¿÷‚)°,255ÍÉÉ!€¢þw:%%e×®]ëÖ­cí}I.µÔ’‰“ÈßGx'wuu©¨¨TWW+)) e‡ýaiiùûï¿«¨¨xzzŽ7.88ø­ËUˆÿ«g¢û11­â00ˆ __ßM›6¹¹¹5êôéÓ˜Ú„9¬B€˜ðõõõööWTT|‹=.Jcº?’ ýPÀ >,--û¹ * ËÎìÀ XäŒsssI§ñ‚9Ì€àe(`‘ÃGàe2qù›îIç***uuuƒ Ö>€ø’8pàˆ#òòòH1‚fƒ©©)V¡@ ˜ æææOžÿü󨨨ñãÇ<ØÉÉ)00p÷îݤCI*0° ÄYZZÆÅÅ1ÃææfssóÀÀÀ7ÚÉ?þ(xáI“¢¢"¡E”1(`6p¹ÜŽŽŽêêjÒA@vu»°’’ÒöíÛƒ‚‚ú³ÏÐÐP++«~G“Q(`–à00%x3`ÚÌ™3ïÝ»Ç ßô~À555[·nÝ·oé¥ ˜%æææ8 YZZ:4>>žÙÒÖÖÆãñ˜!¿WÝöVQQáíí}øðá‰'öåÕýýýëÜßߟͧ½ê dáJX=ÅuOvïÞ][[ûÏþS¸»è;ÿººº½{÷ÒÃï¾ûîÒ¥K)))oºŸ’’’9sæüüóÏÂÎ(vp%,‰‡%h Np:%%e×®]ëÖ­cíãtii©§§çž={d¡}E ÷f – €8fZEEÅËËËÓÓsÙ²eÌ£}™çUVVΚ5k÷îÝîîî¢L*°ÝQ,8´µµ©©©½xñBAAA¸{è;ÿÈÈÈØÙÙEDD(**¾Ñ·ÛÛÛoÚ´éý÷ßQ<1$º%hpDôv3æâÅ‹–––Bß3@effZYY-Y²äÈ‘#JJJoúí=ž][[«¦¦&ŒtâHtŒ%höXXX__ßàà`f¨¤¤´}ûö   ·Þa]]ÝÝ»w.\øÉ'Ÿ# ÌA³ÍÆÆKÐÀ>Á›ÓfΜyïÞ=fØÇû3ÏTSS›Ÿ_^^®««K: ÈfZEEÅËËËÓÓsÙ²eÌ£oW3qqqæææÂË(Cp ˜R|}}7mÚäææ6jÔ¨Ó§O÷>ë}ÙÌ™3CBB*++ÛÛÛKJJNœ8ññÇÿý÷"J+ÝPÀØØØé Z(`±3}úôððpÒ)@´PÀbgÆŒ8 õp ¸SÕØØ¨§§W\\f̘ÊÊJyyyÒYd– e‘®®®‰‰Ill,é |(`±öî»ï^¹r…t >±Xk7b²MQÔ£GfΜYXXˆKb%heaa1dȤ¤$ÒA@ÈPÀânþüù—/_&„ ,î¼½½/]ºD: XÜÙÛÛwtt<|øt&°¸ãp8¾¾¾.\ „ ,Þ{ï=0€”AK‡®®®Bƒ– ¾¾¾ÁÁÁ¤S€Ð €%ƒ¯¯oPP˜\ú,ììì „+rH °Äðõõ=þ<é ârÑc±">ׂôäÉ“©S§ÉÉɑΠ+p-h ÌÌÌtuucbbH!@K’E‹9s†t q\k%N<— )Š*--µ²²*..}štxK(`IµråÊßÿt xK(`I5yòäÎÎ΄„ÒAàm €%ØòåË9B:¼ q?Ûˆñ? ‹öüùsSSÓ'OžèèèÎ pô@KKËÛÛûøñ㤃À“Œ©Ë$eLQÔƒÞ}÷ÝÜÜÜ’Î …0†žÙÚÚŽ1"$$„tx3(`‰·~ýúýû÷“No,ñæÏŸ_RR’˜˜H:¼°Ä“““ûôÓO1 ,s¶›$è$,Z]]±±ñƒ†N: €TÁIXÐUUU??¿ƒ’}%aS=vHÜ ˜¢¨‚‚{{û¼¼¼¡C‡’Î =0†×044œ6mÚ¿þõ/ÒA O$oªÇIœSuïÞ½E‹=}úåÌ€áõ\\\ ƒ‚‚H€×“È©ž¨Iè ˜¢¨ÈÈÈõë×gdd €_­„3`è“iÓ¦©©©]½z•tx °´Ù¼yó·ß~+¡3xÙñ𮩩 ðññ122RVVVVV622òññ ¨©©a'"¼///99¹k×®‘½ye¯\¹R__ÿìÙ³S¦L¹qãFYYYYYÙ7&Ož|æÌ}}ý+V³úbëÖ­þþþ˜ˆ³W[VRR222Ú³gϬY³z|BhhèÆóòòš››E™É= ‹Æçó·oßîååE: €d#pÖÂ… “““_Õ¾Eyzz&''/\¸P± ?8ζmÛ0 g’=ÕIŸÓœ¿úê+L‚úC‚7öÕW_íØ±C ~“J¯/`__ßÊÊÊnkkk-Z$šH ï¼ó΀.^¼H:ôàõldd4vìØÓ§O3["""ŒE ú‹Ãáüøã[·nmoo'ºëÓÒvjjêŠ+ôôôöîÝ{ðàÁ´´´_ýu̘1"MVXX¸aƈˆŠ¢¦OŸ¾oß>ƒW=™ÃátÛÒŸ¥Wé8L›1c†··÷'Ÿ|B:€D"| ØÎÎ.11qÊ”)îîîÖÖÖ·oßuûòx|8aÂSSÓ˜˜˜úúú˜˜77·ÌÌLò‰³ñãLJ……]½zuøðᤳ¼±Ÿþ9(((11‘tõú¥íY³fÍ™3gݺu‚÷ïß&5Ÿ‘íFºOÂbœ;wn÷îÝÉÉÉ‚WA$OÂRVV~öì—ËÜX^^nll,­—t‘¦(ÊËËËÕÕuË–-¤ƒˆ)’'a 4¨ÇíJJJÂ#U¼½½7nÜX^^N:Ho~ùå—½{÷>yò„t™óúž?þ… ºm òññM$)ñË/¿ðù|++«¿ÿýïùùù¤ãôlĈþþþË—/ïìì$@¶¼~fÝØØ¸jÕª1cÆ,^¼X__¿´´ôÌ™3YYYG•²û1„¸àP^^~àÀ{÷îÑWC|>ßÓÓsêÔ©_~ù%é,b‡ä1à¾Ü½NÊŽ˜ÊÎ1·ø¡ IDAT`ZAA““STT”µµ5é,â…ä1à¾\ÐRÉ€5†††?þøã¢E‹ZZZHg¸I7nÜhoo'‚¢(jÙ²eæææ¸4kPÀÄ455íÛ·ÏÄÄdïÞ½ ¤ãP¿ýöÛ¹sçîܹC:€L@3xðàˆˆˆË—/'%%5* €lMMÍ'N,]º´¶¶–lY [gõû'a”——»¸¸°ù¢=úôÓOëëëO:E:€XÀíY%kgA jiiquuݸqãÒ¥KIg Ì*±*à®®®X=R‘‘ááá3zôh6_@ á~À2*++kôèÑ¿üò ›÷îµ²²Ú¹sç‚ šššX{QYƒkcÆŒ9sæÌ;wFŽùÙgŸ±vIË•+WÚÚÚ®]»–—A(`qçââœššª  ÀÚë>|811ñرc¬½"€L£ƒâC¬Ž”=a„›7o:88Î@ަ¦¦¾¾¾ÕÕÕ¤³H°ÄKMM]¹rezzº(v¾`Á__ß… vttˆbÿ2 ,ñFŒadd4gÎww÷«W¯vuu wÿß}÷Ý€þñw·2;{ ‰Ç€ÛÛÛ/^¼¸oß¾uëÖ-Y²D¸;¯­­uvvþÇ?þñÑG wÏbâ`•$0CDîÈÌÌtww¿~ýº“““Ðw ¶pô•ˆ.›eiiù¯ýkþüùÅÅÅ¢Ø?€¬AË„lݺµŸÝééé¹nݺyóæ566 +€ÌBË gccãëëýÖË)›6mrvv~ï½÷pR4@?IðÁNÑ‘ècÀ½hhh8sæÌ¡C‡¶lÙòþûï¿ÝN:::ÞyçCCÃ_ýU¸ñÄNÂb•´0£³³SNNî­¿½¡¡aêÔ©^^^Û¶mb*1$ºF(Š‚˜ëOûR5dÈ7nŒ?~ذaü±°RȆ¿¤¦¦~úé§}y2—Ëýã?¶mÛöLj:€TBÃ_† Æår==='L˜ØÜÜÜû󃂂üüüRRRØI M¤ü`çÛ‘úcÀ½èèè¸qãÆ‘#G.\èçç÷Úç_½zuõêÕ‘‘‘–––,Ä`NÂb•,ð[8wîܦM›nß¾mllL: €á$,_‹-âñxÓ§O¿{÷îðáÃIÇ 8 o 55ÕÊÊêÀµµµ‚ÛW®\¹víÚiÓ¦•——“Ê YPÀðlmmFµpá„„æ¡Ï>ûléÒ¥Ó¦M«ªª"˜@Rà`gp øµ^¼x4lذ¹sç nß¶mÛåË—£££µµµIe"œ„Å*pÐ¥££C: @¡€Y…î§Õ«WÇÄÄDEEééé‘ÎÐ/¸0HŒêêê?ÿü³²²ÒÚÚúÞ½{¤ãˆ)0™¦¦ffffXX˜……ÅøñãW®\I:€8ÂZk°-,ؽ{wtt´¹¹9é,o≴~ýzuuuww÷k×®988Ž F° ¢µtéÒÇÏž=;::Zpû²eË:TSSC*Y(`¹wß}788xñâÅ/^d6.^¼866vÔ¨Qô£ãƒ=À1`QHKK›3gΖ-[Ö¬YÃl¬¯¯¿råJJJÊþýû fx|˜U(`ÉËË›={öœ9s~øá‡°úŸi`dd—ššêããÓÔÔôÚçß»w/77—…`ìC«ÔÕÕCCCÕÕÕ'Ož\ZZÚû“ãããÇ?nܸýû÷¿öÉ’k­=À4 ¾ÿþûC‡]¾|ÙÑѱ—§uttDEE?þêÕ«©©©#FŒ`-!…cÀ,C³ãÊ•+«W¯>tèÏkŸÜÖÖ¦  ÀB*A¸H¡yóæ9òÝwß}úôéæÍ›9N/O~Uûòx¼®®®¡C‡Š&#€¨à0dkk²páB÷{¸{÷îˆ#æÏŸáÂ…¾œØ &PÀ@˜¾¾þ;wÔÔÔ?~ü¦ß>{öìüü|//¯'NèëëŸ;wN!„;{€cÀDüúë¯þþþ'Nœðôô|»=TWWwuuikk 7È2œ„Å*0)qqq .\½zõ–-[„{¥Ž––EEE!îd.Ä2ÁÍÍ-111""ÂÓÓ³²²RX»mii100˜5kÖñãÇ_¼x!¬Ýô Ä‹žž^ttô¸qãlmmÃÃÃ…²OEEż¼¼+VܸqcäÈ‘«V­Ênúk­=À´8ˆŒŒ\¶lÙŠ+¶mÛ&'''¬Ý644äääØÙÙ k‡ Ýp ˜U(`1QQQ±téÒÖÖÖÓ§Oˆúåx<žŠŠŠ¨_$ Žƒ,âr¹aaasæÌqrrbážÁ_|ñ…‰‰É_|ßÕÕ%ê—‡©^07)))|ð››ÛD:IMKKû÷¿ÿýïÿ»ººúÎ;¦¦¦¢{-X‚f X 566þßÿýß­[·NŸ>íêê*ê—ËÍÍ5448×ju(`V¡€ÅÖå˗׬Y³jÕª¯¾úJ^^žý---fffì¿4cÀEQÞÞÞ÷ïßOIIquuMOOg?@NNއ‡Ç˜1c6nÜxëÖ­ÎÎNö3€tÀT¯˜‹¿'NlÞ¼yÍš5[¶lay*Ìçóïß¿âììÀæ«˰Í*°D(--]µjUYYÙ‰'ÆŽK$Cgg§?£ bKÐÝéëë_¿~}íÚµÓ§Oß¼y3‘{¾ª}O:ÖÜÜÌr (`lË—/øðaqq±µµµ°.]Ù»wïÖÕÕ={ö¡C‡I'±ƒµÖ` Z…‡‡òÉ'&Lسg¦¦&é8EQuuuáááüñÇÁƒ•””HÇ€·cÀ¬BK¨ÆÆÆ¯¿þúìÙ³ß~ûíÇ,Ü€lÂ1`€×SVVÞ³gOXXØÉ“'Ç—œœL:Qonݺemmýå—_Þ½{·££ƒt` ¤­­mLLÌš5k¼¼¼V¯^ýüùsÒ‰z6yòäcÇŽ 4hãÆ:::{öì!X…µÖ` Z:ÔÕÕíØ±ãÌ™3Û·o_½zµ8^¨²²’Çã5ŠtèÇ€Y…–&k×®­­­Ý½{·§§'é8o,,,LKKËÞÞ‡´ˆÀ1`€·deeuûöí;v|öÙgžžžOžsè—Ãá,X°àÉ“'K—.ýøã'Ož.x`XðÉôPNNŽÙU{{»à-ÚÚÚæÌ™Ã ;::¶nÝ*#((HpWYYYoô&¼}}}??¿ÀÀÀâââððð1cƈú (`Ý.Ú¼k×.Á³yÍÍÍÛÛÛé¯9Κ5k˜G9NIIIWWóä9sæ0½Èáp~ûí7f8`À€¼¼<æ@/‡ÃüFz¸|ùòǯZµjÆ ...¡¡¡¯zrgg'³+yyyÁûþÊÉÉmܸ‘òù|---fØÖÖÆ ›››ýüü˜!Ç344d†MMM|ð3loo?qâ3ìêê*))¡Þ™™Ù!C^ÞÎçóW­Zuøðጌ ¬ˆ^‚·EDš››»ºº˜áúõ뙡±±q]]3ܹsgKK 3ÌËËëììd''£³³3((ÈÊÊÊÁÁáܹsì¼nWWWMM 3lkk»ví3lhhذa3¬©©±¶¶f†µµµžžžÌ°©©éСC̰³³³¸¸¸——nmm=vìØòåËMMMµµµ—.]ÚÏŸ@Ò‰®Ð4=@ ËéÓ§ëë뙡‰‰IQQ3{öŒt¨~QTTtuue†ººº?üð3433KNNf†òòò–––ô×ZZZ|>ÇŽffffffÇŽ{òäɧŸ~Ê<¹¶¶6&&Fô?€Ãçmz€! jjjêèè:t(=üðÃ,X0wî\zXWW§ªªJ.1¿©©‰¹qdZZÚÓ§O}}}éáñãÇŽ9BSRRªªªfÍš%¬ä(`VI}—––:thçÎô°±±±µµ•™@?ÕÕÕ?~üðáÃJJJûÛß–,YÒã%/€ÖÑÑakkkkkëæææèè8vìXEEÅ7ÚCgg§œœýubbbyy93?Þ¿qqñ?þH“’’ZZZ&Nœ(Äü õPÀ¬’¾æóùIIIÌ 2---—/_^´hÙTÒÏçߺuë×_ŠŠòõõ]µj•½½=éP⨫«ëÉ“'ñññqqq)))µµµùùùBÜ[[›‚‚ýutttSSs áÎ; °eËz«   xáR Ì2é+à®®®Ù³gc*ƾ²²²'N=zTSSsÕªU‹/fVSáe¯º—bSSSSS“àå<ûÏç·¶¶2î›7o8¹ÖöíÛõõõW¯^MTUUqm„f•tð–-[|||HŠ¢¨®®®ˆˆˆß~ûíîÝ»¾¾¾~~~ãÆ#J’ÄÄļóÎ;ºººÎÎÎS¦L±±±é+vûÞ™3g¸\î´iÓè¡¿¿¿··7=LKKÓÒÒ6l˜H#(`VIhwuuÕ×׫©©Ñä¤$cccÙ7%%%'Ož¤(ÊÏÏÏÏÏOðê`Ð ú3ÇÉÉÉÉÉÉÆÆÆ6l ¦¤¤DII‰ù÷õóÏ?ÛÙÙ¹»»Óï¿þzêÔ©Ì0''GGG‡ér,(`VIhTUUáãC’"!!áäÉ“.\pvv^¶lÙ¼yóÞôä#xYdddII‰“““¹¹¹à½#YöäÉMMMfÁ|ãÆï¼óΔ)SèáÎ;çÎkkkKŸ?®ªª*//O$*¼ ˜U’RÀ­­­ÉÉÉãǧ‡]]]ÿo§¹¹ùòåËIII>>>Ë–-sssÃÇÀÞÚµk×Î;—’’RVVfkk»sçÎI“&‘ÕÝŸþijjÊåré¡ÏçŸÎ’سg···‘‘=<Lj@³JR ¸¦¦æoû[PPþ-JJJΜ9sòäɶ¶¶Å‹/Z´ÈÜÜœt( öâÅ‹”””Ñ£GÎòf.\¸0uêTmmmzèààpòäI+++zxäÈ‘ùóç ÷d4è ˜Uâ\À·oß¶¶¶ÖÔÔ$D%%%åìÙ³AAAZZZï¿ÿþÂ… ™ÉËøñãÛÛÛ¬­­Åy–)¸¸µgÏžeË–1ÿprrº|ù2sÁ•+Wf̘!7“ ¢k¬XJ˜?ÿü³°°t !‡Ÿþ¹°°ðÀEEE®®®ãÆ;xð`yy9éhÒ#<<|ïÞ½cÆŒ‰‰‰Y²dÉóçÏI'êà¡¥Ï>ûLð÷ï›7oêëë3ÃÐÐÐÎÎNf8iÒ¤††f˜ÐÑÑ!â°ðÄwªGXÍ€ÛÛÛsrrðéC™ÕÑÑqþüùk×®ÙÛÛ/\¸ÐÛÛ+,èêêúé§Ÿìíímll˜aÉ’žžnmmM¢âóùîîîôǬù|¾··÷¥K—˜©nn®±±1ɸâ 3`Ù•™™ùÏþ“t fàÀžžž'Ož,--ýôÓO£¢¢LLL<<<Ž9R]]M:4knn®¬¬Üµk—™™™žžž$^9nìØ±Ì "çÖ­[ÌENø|þßþö7¦}›››çÍ›Ç|ckkë¦M›˜!ŸÏ¼ 8‹MõÄñpGG‡œœN­‚µ´´„……?>,,ÌÎÎÎÛÛÛÛÛ[âN5’,EEE=Þõ¹©©©±±QB§È¯ÒÔÔtöìÙ+VÐÃÊÊJ—¼¼†Ä*ö ¸¡¡áèÑ£d/­R€Ï秤¤\ºtéæÍ›¥¥¥sçÎõòòš>}ºŠŠ éh²îèÑ£.\°²²²´´´¶¶¶°°‘?”æææªªª#FÐÇž:uê‡~ ‡‰‰‰—.]bNs©¯¯¯­­544$“õPÀ¬b¿€;::~úé§7ârt ,EEEW¯^ ¹wïž‹‹‹§§§§§'.îAJeeåýû÷>|˜™™™‘‘ñá‡ÊÎ1Ô^ÔÔÔ1÷Õ¸uëÖ•+WöïßOãããÿþ÷¿ÓÃÆÆF‡Ãþ§œQÀ¬b­€ù|>δQãñx‘‘‘aaa¡¡¡rrr³gÏž3gΔ)S”””HGƒîŽ=ZQQann>zôh333æNƲ©¨¨¨¨¨ÈÍÍ^ºt)::: €ÆÇÇ.\¸¶¶¶ÊËË‹âr¼(`V±SÀ·oß>qâ}WvdddܼyóæÍ›©©©ãÇ÷ôôœ={6>ý)>ÂÃ㣣Ÿ~ü¸²²²©©©™™söºsçNccãìÙ³éá÷ßÏáp6oÞLèèèØ—]¡€Y%º·»³³³±±·ñÁçóß ˜UB»›››qÆ)H®òòrº‰oݺÕÔÔ4yòäñãÇO:ÕÒÒÿC—ÍÍÍyyy=þòôâÅ‹ãÇ3ÆÊÊ 4í ˜UÂ}»Ï;—Àœ› ÑòóóïÞ½sûöíúúz77·‰'º»»ÛØØ Œ%}ɬ¬¬ŒŒŒúúzOOÏàà`Ò¡Ä ˜UÂ}»;;;ÛÚÚ0éS\\üçŸÒ‡+++ÝÜÜÆ7~üxgggÜ^Õ××WWW½üÐãÇÏœ9cbbbjjjbb¢££Ã~>^MMmüøñt[XXˆâZEÀ²¶¶¶? |ýúõsçΙþ‡™™™ªª*ûñ„ ̪þ¿ÝÉÉÉ...Š ¡ø|~VVÖŸþI—qee¥³³³“““««ë¸qã455Ia¢O`&ÊóçÏß²e éPý…f– D¤ªª*)))111...11QCCÃÅÅÅÍÍÍÕÕuìØ±ƒ "ذeË–   z–lbbâéé9zôhÒ¡^ ̪·~»cccqý €¾àóùÙÙÙ ±±±IIIOž<133srr?~¼«««©©)N«–VmmmÙÙÙOŸ>ÍÍÍõööîñ’×yyy Ð××'û?U0«Þúí^±bÅ—_~ijj*ôHR¯µµ5===!!!..îÞ½{555¶¶¶ŽÿallŒ>–5›7o>{ölUUÕðáÃŒŒvîÜéììÌ~ 0«° @\MMMJJJJJJRRRrrr]]­­­¥¥¥½½½ƒƒƒ••ÕÀIg6´µµååååççÛÙÙõøñ§ƒòx<ƒQ£F‰â#R(`V¡€ÄÍóçÏÓÓÓ322îß¿ŸœœœŸŸoaaammmkkkoo?vìXÜÇIf?þÁƒEEE¹¹¹¹¹¹ááávvvBÜ? ˜Uoôv|ÿý÷"‚x<ÞÇ322RSSSRR233¹\®½½½=KÆU¡33³¶¶6CCÑ#G~þùç}üˆ ˜Uoôvóx¼¨¨¨wß}W¤‘ ]]]ÙÙÙ)))ô,9%%…Ïç[[[[ZZZZZZ[[[YY©¨¨Ž $µµµ<{öì‹/¾èñzm¿ýö›–––Áˆ#è›<¢€Y…%hIWRR’™™ùðáCú¿YYY:::VVVVVVt1›››÷x) q6l((((*****ª¯¯¯««SPP@³ e:;;óòò˜>ÎÈÈÈËË322¢û˜þ¯‘‘®Ò‚Z[[ „0«úòvGDDÄÄÄ|óÍ7ìDájkkËÊÊzôèÑÇéJ®ªª¢/ A/\›˜˜Œ=w•0«úòv744ZZZ² D­¡¡áéÓ§ÙÙÙ=ÊÉÉÉÉÉÑ××777733³°° [YKK‹tR` ˜UX‚Š¢:;;sss³²²ž>}š™™I·ò€ÆŽ;zôhæ–£FÂE4¥ ˜U(`x•ŠŠŠ‡>}ú”ž.çääêêêšššZYYYXXÐ×76lé¤ (`VõòvçææþöÛo?üðË‘@lutt<}ú4###++‹¾ÄqSS“‰‰ }{cccú³§#GŽÄ¼$ ˜U½¼ÝõõõIII,GÉRWWGEÎÎÎÎÍÍ-,+åÑ õIDAT,ÌËË+++300 [™^Ä622200PTT$^ Ì*,A€(´µµ={öŒž"ÓÝLäTKKËÄÄÄÐÐÐÐÐÐØØØØØØÀÀ`øðárrr¤# ˜](`` ŸÏ§¯c\TT”———ŸŸ_XXXUUeøô©^ǧ/Ï„C± ̪ßî?þøÃÅÅEMMH$5---Ïž=+,,ÌÏϧ[¹¸¸¸¨¨¨¦¦fÔ¨QÆÆÆ#FŒ>|8}qcƒaÆáfä¢ ºÆé}5fÌ0°CQQÑ¢Ûö––f–\\\F¯c———s¹\z){Ĉ#FŒ ×± q9ñ„p° §³³³°°þXTQQÝÊÅÅÅ………ÊÊÊô\YOOËåêééÑ={T¼– Y…iRUUEO— JKK+**ÊÊÊ  DÏ’ tuu¹\.}¤ÙÀÀ ~40«º½Ý|>§<€Tª©©¡gÉååå%%%ôì¹££C[[›>ÌÌåruuué#ÍÚÚÚC‡%%(`V ¾Ýõõõ&LHNNÆË@¦466VTT”––TUU•••—””TUUñù|z5›>1[___OOÏÀÀ@[[[[[[SS“t|¡A³ªÛÛ]^^Nß–hõõõeee••••••¥¥¥%%%ÅÅÅUUUÚÚÚô‚6ÓÊzzzÚÚÚ:::#FŒPRR"ýô ˜U8 Э­­UUUåå奥¥ôgš+++ËËËé/ŠŠŠ”””¸\.]ÒôÚÚÚººº:::ZZZºººâsÌ*0€H=þ¼²²’.骪*Á†¦çÐ---L+kiiéèèèééiiiÑ­¡¡¡¦¦¦®®ÎBT0«˜·;&&ÆÕÕŸm`YkkkeeeEEÝÓÏŸ?/--¥¿(++{ñâEmm-½ÐMW²ŽŽýµ––Ö!C˜¶ÖÖÖ0`@’ €YE¿Ýï½÷Þ©S§”••I'€îÚÚÚ˜J®úšššúúúòòòÊÊÊçÏŸWWWkii :TCCƒ>;lèСšššô1iú!MMM--­WÝÌ*,AH‡ÎÎΪªªúúúÚÚZº­ëëë«««+*****ª««ëêꪫ««ªª¨ªªJÏ¡ÕÕÕÕÔÔtuuUUU7mÚ„KQ¼999]]ݾ|’¥±±±®®ŽžF¿xñ¢¦¦†^]6Lõz€0ÐD×ý:4-ÅÒÒÒ®^½J:H-pÏ:;;»ººH§©…µÖ` hX‚*(`PÀ=ûá‡HGi†‘é Íp¶QpÐp€TA %\XXèãã3tèСC‡úøøõs‡ÅÅÅB Ð#i(`çîînoo_PPPPP`ooïááÑÔÔÔŸ}â„ RÒp¶ÑÞ½{SRRNŸ>ÍlY²d‰³³óúõëßn‡8 h8 «7×®]óóóÜâççB*ÀkICgffÚØØn;vì£GHåx-i(àÚÚZ Á-ššš555o··?þøC¡z3t’üýýwìØÑãC‡å0 S¤ál#.—›žžÎår™-åååvvveeeo·Cœ„ø;þEQ8 «w–––iii‚[ÒÓÓ-,,Håx-i(à¹sç n ôòò"•൤a¥¡¡ÁÆÆfÅŠŸ|ò EQ‡:qâDZZÚ[_LëN€¿@á¯P…%èÞ 2$:::))ÉÐÐÐÐÐ0999** —²q†ßïz€_{€Â_ (J” äüýýE±_I7eÊÒ€0ü  €¢(‘ý5ÀïwHÃ1`‰ƒ  @ €0(`PÀ €@€  @ ø¿ }||†:tèPŸ¢¢"Ò‰€€û÷ï¯Y³FMMÃáÎdܽ{wáÂ…ÚÚÚªªª®®®W®\!Ø–°bÅ ###}}ýiÓ¦]ºtI诂þ Çsww···/(((((°··÷ððhjj" ضtéRØØXÒA€˜É“'WUU]¹r¥¬¬ìàÁƒþþþG% Xµ~ýz;;»°°0—‘‘±iÓ¦;wnß¾]¸¯‚»!ýeïÞ½)))§OŸf¶,Y²ÄÙÙyýúõSA¸¬Ìúâ‹/~øáf $==}þüù999dSY¹¹¹ŽŽŽµµµBÜ'fÀ¹v횟ŸŸà??¿Ry€”üQð„‰‰ H¼¼¼œœœp÷‰þKff¦à–±cÇ>zôˆT¡¡¡VVV¤S1uuuôiŸ|ò‰p÷ŒE¶¿(((466ÊËË3[ÚÛÛUTTZ[[ ¦‚° EÕÔÔ¸¹¹ýþûï'N$Ø&¸2}úôÐÐPáN‚1èYEE…··÷áÇѾ²‰ÏçóùüŠŠŠ³gÏfffîÚµK¸ûGÿE]]½¦¦FpKuuµ††©<@VIIÉÌ™3·mÛ6uêTÒY€$E‹>}Zè'ã€ÿbii™––&¸%==Ý‚T ¨´´ÔÓÓsÏž=¤³€Xptt¬¬¬î>QÀ™;wn`` à–ÀÀ@///Ry€”ÊÊÊY³fíÞ½ÛÝÝtqqqæææÂÝ' ø/+W®Œ‹‹ûî»ïjkkkkkwíÚE_ …t.`Û¬Y³¶lÙ2{ölÒA€˜™3g†„„TVV¶··—””œ8qâã?þþûï…û*8Ïó¿òóó7lØEQ”‡‡Ç¾}û I‡¶õxJü3‘)=þ¨­­USSc? qëÖ­_~ùåÎ;uuuÚÚÚnnn_|ñ…‹‹‹p_ @– @€  @ €0(`PÀ €@€  @ €0(`PÀ €@€  ÿµpáÂ/¿üRp˦M›,X@*€ãðù|Ò@\TWWÛÚÚ^»vÍÖÖ–¢¨ÔÔÔY³f¥§§s¹\ÒѤ fÀð_ššš‡Z¹regggggçÊ•+þùg´/€(` Ý-_¾ÜÊÊŠÏçß¾}ûúõë¤ãH'0tWQQáááQWWmjjJ:€tB@wëׯŸ:uêóçÏ>|xàÀÒq¤ŽÀÿˆŒŒÌÍÍõöö^±bŃ"##I'N˜ÀÕÖÖ:99ýñÇÆÆÆE=zôhîܹ)))êêꤣHÌ€à¿Ö¬YóÁÐíKQ”……Åâŋ׬YC6€T €Ì€@€  @ €0ÿ:LFú‚ÁIEND®B`‚gsl/doc/images/rand-levy.png0000644000175000017500000005215113536674414014357 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìÝw W{ü?ð2’¨dDF2ÊȪ–hP*Q¡¡t•ê¶w·ºíº £«½”-ܶ2ÊÕ2ŠB!{+df~~|¾__¿.2ÎçóþŒçã/Îçœ×yQ>ÏÏyŸsÞ‡N§Ó€µzn€!€@€  @€0`À €@€  @€0`À €@€  @€YøøøîšAHHHZZz„ ûöíËÉÉaR{Í¥¨ý‘ þX Àèt:N¯®®NJJ:|øpEE…žžÞ­[·:U„•ˆ¸^ÃG§ÓI÷Àøøˆý}µºë÷ïßOž<9<<\SS³;u(\Ÿªm8Ž€Èxþü¹A¯^½|ùòe–œœ¬­­ÝÔÔôÓšMMMZZZ|||<øé¥¸¸899¹†††ŽìQWWwÆ ®®®Œo›8+**¶nݪªªÚ»wï¾}ûNž<ùþýûÍ+4f7oUSS³fÍiiéVGž«««%$$DDD,,,š_jõ·y/­î«yµ{÷ˆˆˆˆµüUðññ566~ü(##sõêÕ¯_¿VVV>{öŒqCcc£ššš„„Ä!C~ÚÖÌÌlÇŽÒÒÒ-¯Õjk× %%%ÿþûïæÍ›[Žf·\gܸqׯ_ÏÎή¯¯ÏÏÏÿã?,,,/ijj´ì¡ÕŠÖbyþüùÿýwAAAAAÁßÿ---͸^šN§ß¸qCEEåÅ‹UUU©©©Û·o_¾|yó¶íì+22²ÿþ>>>EEEEEE>>>âââÍÃïí·À¶ð€YÚÿÈûîÝ; QQQaaá‰'>{ö¬å¶/^¤Ñh.\øoÙþù‡F£íÚµ«#»”””7nÜÞ½{ºÌª¹™°°0›ôêÕKEEeÛ¶meeeŒ—=z¤ªªÚ³gOZÛgjéÿWVVþöÛoýû÷ïÝ»÷Ô©Sããã[®éáᡪª* //¿oß>ÆÌÙW@@À¨Q£„……………Gôß½·ÚÛÂÔ3¦¦¦F\\<55uРA¤{€®ëèýûÀÊÊÊÜÝݾœ À1øøøãºW¯^%Ý t† ÀmH €@€  @€0`À €@€  @€0`À €@ÀOºvÔ¿ÿ²²2Ò][ ÓéÌ(ËǤº¿ Ñ˜™‚  @€0`À €@€  @RllìªU«úõëÇÇÇÇ=deeÙØØˆ‰‰‰‰‰ÙØØdgg³ C®„ iÑ¢ERRR‘‘‘ÑCee¥©©©¾¾~fffff¦¾¾¾™™Yuu5 šä>˜ô¸˜ XÞy~Ùƒ››[LLŒ··wó’… ¬]»–ùÝ‘¹ ØQffæâÅ‹edd„„„tttüýýY¹÷ððp###aaa ÇÓh´·oß1o÷îÝspph¹ÄÁÁ!((ˆy{äb`€.ÊÊÊ266VVV~ùòeyyù¹sçüüüX¶÷ÈÈH{{ûƒïÙ³ÇÞÞ>//ÏÅÅeÍš5ÌÛiBB‚ŽŽNË%ÚÚÚ‰‰‰ÌÛ##?âÁ†Øa ØŸ£££¬¬ì¡C‡Z}µý šþû&ÓÙwžéÓ§O™2eݺuŒoíììäååoܸ‘––&((Ȥ«ªªš—Ô××÷éÓ§¶¶¶ãs A°'Ož,Y²¤­WéíêþÞ_¿~=kÖ¬æo'MšäêêêääÔœ¾,è¡ãöîÝËGÎÞ½{YùÃvõZ#`èòòraaaJªuöGPP°¢¢BHHˆñmll¬¡¡aVV–ŒŒ óz––Ž—––n^RPP §§—ŸŸßå²9° ‰œœœ¶^mÿ˜¬û{—‘‘ùúõkó·ÑÑÑ¢¢¢LíASS3..®å’øøx ®ý< ÐEæææW¯^mëUfÿêêê7{éÒ%™èèh¦ö`iiéååÕr‰——×Ì™3»ö#ð8Œµ¶CÐÐYYY£Gvvvvpp‘‘y÷îÝÑ£GºV­ÕwžvÞŽþý÷ß9sæxyyŸ}ú”)SÖ­[ÇøÖÎÎN^^þÆiii‚‚‚]롤¤ÄØØøâÅ‹ãÆkuAAÁªª*æ%õõõ}úô©­­íx眅‰‰ÐþÓ"I™8qâ“'OZ.yò䉩©i;›¼{÷nذaåååt:½›?ÛþZ€­ÈÈÈ$''SU­³ï<âââéééÍß^¼x±G{öìérãÇ mgººº–KêêêY|Ïž=-£§­>™´Zw~-ÌK6=Ô“––Ž—––n^RPP §§—ŸŸßêú555†††.\`œüÀ0°€€€@yy¹°°0%Õ:ûÎ#((XQQ!$$Äø666ÖÐÐ0++KFF¦ {ÏÍÍ>}º‹‹‹™™Y;«uöÍ™ ðÜEX¥¥¥?=sÀ€%%%m­¿qãÆ¹sçvöÒ€îÈÉÉiëU¾vuï222_¿~mþ6::º±±QTT´ =äååYXX¸ºº¶Ÿ¾4MSS3..®å’øøx îÿ8<ˆM¸S‚‚‚þøãÎn¸wï^&ýa/077¿zõj[¯þr`³›tuuƒƒƒ›¿½té’ŒŒLtttg{(**277ÿ믿LMM¹SKKK//¯–K¼¼¼fΜÙý‡Q2M9))©‚‚‚–KòóóØêÊÊÊÊ-—tóçbÛ_ °•ÌÌLYYÙ}ûö¥§§ÿøñãÕ«WVVV]®Öê;O;oGÒÒÒOž<©¨¨8xðàĉwìØammÝÐÐЩýêééݸq£ƒ•——+)):t¨¤¤¤¤¤äàÁƒÊÊÊ•••Ú#ga^"°iÒtê",Ê?^ € ƒÒÓÓ,X )))  ««ëïïßÙ í¼w}ûöM\\¼m}||ÔÕÕTUUJKKgâºß@iiiËZ®Ÿžžnee%*****jeeõÓñ÷a^"°éÕF®®®±±±?݆4jÔ¨æ îÛ‡‹°€ xxx$''{xxn„§1/Ø4i***tttœœœV®\I£ÑΜ9ãéé'""ÂX¡ý߸€žžÞ•+WôôôH7ÂÓxî*hQQÑÐÐШ¨(EEEEEÅèèèæôàïÞ½Cúr1êµGÀÀÀsGÀÜ  @€0`À €@€  @€0`À €@€  @€0`À €@€  @€0`À €@€  @€0`À €@€  @€0`À €@€  @€0`À €@€  @þÏ·oß6mÚ4räHAAA>>¾^½zM™2åÉ“'¤ûàB`ø÷îÝ>|xccã©S§ÊËËétúׯ_ûí·•+W:::ÖÔÔn€«ðÑétÒ=°>>üZ€ç\½zuçηoß=zôO/UUU9;;gggß»wOLLŒH{¤0/4­@¯ñòòúóÏ?Ÿ}út§Ò—F£mß¾=;;ûîÝ»Lj €G°iWVVšššêëëgfffffêëë›™™UWW·ºòÚµkõôô?~\YYùñãÇ­[·räÈ¢¢"&ôÀÙjkkÏŸ?¿nÝ:ª :täÈ‘¾¾¾TàlÀ–––?Møîåå5sæÌnþòåËaÆ1¡/Îæçç§«««®®NaÍuëÖ¹¹¹aР³Ø4€—-[öòåËÇ—–––––:tˆ1ÝUó -ÏÔN:5((¨¨¨¨¾¾>77×ÓÓó·ß~;r䉯ØÚßÿÝÁ›é;nÒ¤It:=<<œÚ²\MXTT4444**JQQQQQ1:::$$DDD¤Õ•·oßîå奡¡Ñ»wïQ£F=xðàÎ;,î€Í½zõª²²rêÔ©Ô–åãã[½zõéÓ§©- ÀõpµQ+pp¥E‹1býúõ”W®¬¬TTTŒ4håÅÈÂÓX  Üçëׯjjj©©©ââą̂¿zõjIIIÌÁÜÌR`à>ÇŽûüùóåË—™T?))iÒ¤I-çÏà>>aaa[[ÛšššnhddD§Ó£¢¢:ß&ÏAp³¬¬¬¤¤¤ÎÎ~õ矖””ÐéôüüüÉ“' u|[{{{ŸN¶ À‹p²³8 \ãÈ‘#YYYgÏžýiyCCC@@ÀÀÇ×µÊß¿—““ûiyjjê˜1crssùùù»V€­à0tÅ7æÏŸßrI]]Ý… ÔÔÔN:Õ·•wïÞéêê.]º455µårEE۰°.Wà`®õáÇïß¿;¶yIaa¡¶¶v@@€ÏóçÏÇßåâãÇOMMURR266Þ²eKEEEóK ,À(4À/a¬µ‚î°cÇöÓ£9ÿý÷ß–‘Ü}EEE»víÚ²e‹ªªjó’aÃ†åææ S¸#"04K!€ Ðéô!C†ikk³~ï“'O^±b… ëw @-œ€Îyùò¥°°0‘ô¥Ñhööö7nÜ ²kNàN7nÜX¸p!©½Ï™3'$$¤¬¬ŒTì À…}}}ûöíKª11±ñãÇß¾}›Tì À…¶nÝZYY©££C°‡~ýúmÛ¶­´´”`ì  Àmöïßéҥ͛7S{µsg>}ºººzôèѹ¹¹Û`[`®rõêÕ;wîðóó¯X±‚l'}úô™5kÖðáÃ'L˜™™I¶6„à*vvv»víRWWWPP Ý mÞ¼yeeeëׯ‹‹#Ý ÛÁ ¯­À}ÀÀÑõôôÖ®]KºZMMÍ Aƒ>}ú$%%Eº€.Â}ÀÐ!õõõ÷îݳ¶¶&ÝF£ ›››’n€!€¸JXX˜ššÚRDÊìÙ³HwÀŽÀ\% `öìÙ¤»ø?Ó§Oýú5nFø/0‹ŒŒÌËËkþ¶©©)((ˆMÆŸz÷îmbbrÿþ}Ò°0§JJJ²±±IKKk^òêÕ+IIIeee‚]ý×ìÙ³ïÞ½ÛrI@@ÀöíÛIõÀ&À©¸¸ØÒÒòĉ-gÛ¸sç[þ2̘1#,,¬²²²y‰‰‰IPPÐ… v@€óÔÕÕÙØØ,X° åãètúÝ»wçÌ™C°±VõïßôèÑ>l¹äþýû{öìyþü9ÁÆÈBpžÌÌL ½{÷¶\øöíÛ^½zijjjª=666wîÜi¹DYYÙÛÛÛÞÞ>''‡TWdaƉV`"àD[·níÕ«×þýûI7ÒŠoß¾)++çææŠˆˆ´\þüùó1cÆðóó“j à—0üÂÝ»wmllHwѺŒ9288ø§å&L@úÏBpƒwïÞÑh4²Ïlßœ9s~…àq`nÀž—_µ4{öì‡ÖÕÕ‘n€] €¸ÁÝ»wÙj¬ÿ’––ÖÔÔ !Ý»@p€ÌÌ̆††¶^MNNþþý»+[êÌ Ð€ÝUTTLž<944´­nß¾mmmÍÇÇÇÊ®ºÀÚÚ:00°OoÞ¼ABï@°» 6˜˜˜L™2¥­Øí mrss ÔÎ “&MZ³fͬY³XÖR7 :ôæÍ›íܲœ’’²mÛ¶Ÿ @ ó¡ÍºK–,9sæLïÞ½ÛÙ¸ººzÕªUW¯^eFg!€S”•• <8//¯ý?U¶²yófQQÑ={ön C0/C§¸~ýz@@g,FDD¬[·.66–t#‚¹  AAA4øÌ`llœ›››‘‘AºÂ~ÀsçÎ-**úiaii©½½=sZ€©®® ™1céF:§gÏž³fÍ⬣vføu+))ikk{{{7/yúôéˆ#”••™ÙüÂãÇG%..Nº‘NÔX´ž~÷î“““ŒŒŒ›››‡‡G\\ܹsçÔÕÕYÐ8 ùùùYYYõêÕë—k.Z´ÈØØxåÊ•,èŠZõõõüøñ£ŒŒ é^~ð9`==½·oßš˜˜˜šš><<<œ‹Ó€ ìÞ½»#íõõõ=â¸À AAAYùË—/‹/Ægbà>¸‹¯oß¾ì?å,'ªªªZ³fÍÙ³g………¹rhhè°aÃdeeYÐ3X[[wð4°’’RrròµkטÝ‹u(€ß½{ghh˜q[;| IDAT6}úô/_¾0»3^óǘ˜˜Lš4©#+ß¾}󮮠Ù-1¹¹ùÛ·o¿~ýúË5{ôèqþüùíÛ·² 1–ùõÐö¶mÛ|}}Ïž=kiiÉXòìÙ³+V,X°`ß¾}ÌïœÖ+,,444ŒíÈEU²²²¯_¿VRRbAoL2gÎKKË%K–tdåmÛ¶åääøøø0¹)€Ÿ‘<œ‘‘ñþýûæô¥Ñh“&MŠŠŠJNNfFC¼IZZúÓ§O¼¤ùÅ‹ ¾4ÍÆÆæÎ;\yÏž=µµµLm €•p¨× ›[½zµœœÜöíÛI7Ò-òòòYYYbbb¤{hf€ÿÑÔÔÄ)nŸ¨¨è¸qãUTTTTT$%%9sfܸq3fÌ022Â¥X,ÄãÏ  1bD;ô¸Ø/Î-ûúú†……½{÷®¸¸˜F£IIIéëë›™™ÙÙÙ 0€U}².ÂÖ 1bD§.AúðáÃÌ™3ÓÒÒ¸f>ØØXOOOÒ´Ïf)0°@^^žŽŽÎëׯ;õ\“}ûö•——»¸¸0¯1ËÍÍÕÕÕÍÏÏçççïøV/^¼x÷îݺuë˜×®‚à6[·nuvvîìSÅ­¬¬˜Ôƒ RRRzþüy§¶2dÈÁƒÓÓÓ™Ô t(€SSSdeedeeÒÒҘ݋ŒŒŒˆˆØ±cG§¶JII)((066fRW¤ØØØÜ¾}»S›ÈÉÉmܸqãÆLj €~À>|;v¬ªªjDDDyyyDD„ŠŠŠ±±qBB úàJ[¶lqqqéÔV·nݲ±±éÙ³'“º"eÞ¼ywîÜihhèÔV›6mJLL|üø1“º`¶_m›››OŸ>}Íš5-ž|vüøqæ4@£‘½KDD$--MZZºå‚‚ee媪*fôDØPzzúèÑ£sss¹ï˜F£9r$77÷Ô©S¤øÉ‹°„„„Z]Þ‘G–Unݺ5{öl®L_6gΜ»wï655‘n€u~ÀÖÖÖ7oÞüi¡¿¿?G?‹€ãܼysÞ¼y¤»`UUÕFDDn€u~À'Ož|ýúõÁƒÓÒÒ~üø‘––vàÀ7oÞ¸¹¹1µ³¬¬,111111›ììì¶Ö|ñâ…­­­¤¤dß¾}ŒŒ™Ú륥¥åææŽ?žt#L4wîÜ[·n‘î€u~=´Ý‘ w(¯¬¬ÔÕÕutt\µjF;sæÌµk×Þ¿ß»wïV;œ8qâôôô–-[¶zõj''§.ïç€ÝðÂ)Ò´´´1cÆäääpë0;p(ž› ËÍÍ-&&ÆÛÛ»yÉÂ… Ö®]ûß•·lÙrìØ±æ ñññÖÖÖ©©©]Þ;(×ÐÐPQQÑ¿ÿ®m®¯¯ïîîÎÝGÀ4mäȑǟ8q"éFþÏÍ„uïÞ=‡–K‚‚‚Z]ùøñã-ÓUTTÚ¯ ââŋ˖-ëÚ¶©©©cÇŽ¥¶%64oÞ¼ÿ^qÒAt:ÝÛÛ»¾¾žÚ–˜‡M8!!AGG§åmmíÄÄÄŽlûèÑ#---æôÐ߿߿ÿŸþÙµÍóoôèÁ¦­š;wn@@@ccc¶åããóöö>þ<å]0 ›þI—––Š‹‹·\2`À€’’’_nXRR²sçNwww¦µÐi‡š1c†¶¶v×6¿yó¦­­-µ-±'%%%…ÎÎ ÝÌÅÅåàÁƒ¥¥¥ÔvÀ$lÀ]SXX8{öì³gÏŽ7®#ëïÝ»—¯5ÌîxJZZš§§çþýû»¶ù—/_ ¹oþç¶tçZhMMMkkëƒRÛ“°éÕFÒÒÒñññ-§ß*((ÐÓÓËÏÏok“ÜÜÜéÓ§»¸¸˜™™usï¸ (TXX3mÚ´®m~øðá“'ORÛÛÊÈÈ000ÈËËëÔÓ ›kiiýôîÐyò¤;o޼ɃãÏ âââcÇŽmköÙŽkhh¨®®¦¤%Ê!€(–‘‘qòäÉŸæRí¬ÐÐÐAƒ :”ª®8΂ |||ºYdïÞ½{ö졤Êádg+pºcþüùêêê»wïîN‘%K–èëë·úø/ñãÇ99¹?8°ËEŠŠŠ455_¿~­¬¬LaoÀSxîq„d!€¡Ë¢££­¬¬>þÜÖEûQ]]-''—””ÄãJ8::êêê®[·®;E8””„ë¹ ËpgxõêÕ¾}ûº“¾4-((hôèÑ<ž¾4mÑ¢Eׯ_ïf‘7>þ<66–’–(„C½VàÈš>}ú‚ æÏŸOºšššž>}ª®®Þ:÷ïßWRRÒÔÔ¤ª1à)‚f)0T\\¬¦¦–ݧOÒ½·yófaaánx† xÅ7f̘ôeX°`Áõë×ñ¸€½øøø,X°€tìBOOOTTôåË—¤ €¤¤¤deeᩚ-ÍŸ?ßÛÛ›tÔÃÉÎVà0²sçÎÚÚÚ'Nn„äææjkkçää “îxΰ¯ÐÐКššî×ijjº~ýºƒƒC÷Kq“Aƒ9200t#CtKFF†­­mEEE÷KËÈÈhkkw¿—qttôôô¤¤TLLŒ››%¥º c­­À4tœƒƒƒ²²2%ÛÚÚNœ8qÅŠÝ/Åeêêêää䢣£ºYª°°PSSóÝ»wòòò”ô\÷³:èãÇ“&MJIIíf©oß¾©¨¨¤§§÷ë×’Þ¸ÌêÕ«¥¤¤þüóÏî—Ú½{w~~þ¥K—º_ x˜¥ÀÐA³gÏ611éædÅ îîî±±±^^^Ý/Å•âãã---ÓÓÓ{öìÙÍRß¿WSS{þüù°aÃ(é ¸.Â`GG¥jÄøÒ¥KË–-£¤WÒÖÖ–––~öìY÷KõíÛwëÖ­~~~Ý/Ð8ÔkŽ€Å^¾|éèèøéÓ'>>>Ò½°¯óçÏ?{öìÖ­[Ý/ÕÔÔÔ£? C0ÍR``±¥K—jhhlÞ¼™t#l­¢¢BQQOiC³X©¬¬lÈ!Ÿ>}’’’"Ý »[¶lÙ!CvìØAºà!8 Àµ®]»faaôíˆßÿýܹs¤ €°‹/:;;“î‚3èêêJII“n€`€Îijj¢°ÚóçÏétúøñã)¬ÉÝV¬XqîÜ9Ò]P Ð ¹¹¹zzz T<þ<;ÅÎÎ.222;;›ª‚t:=!!ªj‡è„}ûöM›6ŸŸŸ’j_¿~}üøñ¢E‹(©Æ#DDDìíí/_¾LUÁ‚‚‚ &äççSU ƒp¹o+p4´êÓ§OãÇONN¦j¶ÈcÇŽ}úôéÊ•+”TãIIIfff™™™”ܲeKeeåÙ³g)©\WA·uëÖíÛ·S•¾t:ýÒ¥Kîuuueeåû÷ïSUpçΈCtH]]¼¼üï¿ÿNUÁ'OžôéÓÇÐЪ‚|••%Ý g[²d‰ººú¶mÛH7Ü ÌR``ª£G&&&^»vt#ïÇiii‚‚‚¤{®…Û¸D}}ýéÓ§7lØ@ºn0|øpuuuÒt M^^^ÔÖôóó:t¨®®.µeyÖ¦M›Ž?Ž!+àD`€6ýñÇÔÖtuuݸq#µ5yÙÔ©S›ššBBB(¬I§Ó-,,ÒÓÓ)¬ ð_`€Ö½yó&""bÓ¦MÖ|úôiCCƒ¹¹9…5y߯]\\¨­9vìXÌË̆«Z‹°€N§3fåÊ•Ô>)aêÔ©ööö˜|ƒZµµµC† yøð¡ŽŽU5kjjÔÕÕ}||ÆŒCUMàP¸ €¥^½zÕÐа`Á k~øðáãÇöööÖ&$$ôûï¿»»»SXSXXøðáÃ7nÄgq`êµGÀ@£Ñ~üøAí4U .ÔÖÖÞºu+…5¡´´TMM-66V^^žªšt:}Ù²e‡’––¦ª&p"ÜÌR` \ZZÚèÑ£SSSEEEI÷¶oß^SSsòäIÒ·A³(·|ùrYYÙ½{÷’n„k1f¦LHH‘‘!Ý p0K!€Z999ºººÉÉÉâââ¤{áfk×®>zô(éF€« €Y  Ôúý÷ßûöí{øðaÒp¹üü|mmí„„)))Ò½÷@³(”­««ûéÓ'IIIÒ½p¿Õ«W‹ŠŠ9r„t#À=À,…æMéééòòòüüüÔ–ýý÷ßÅÄÄ ¬ÁíOJJÂÇ  î`®úúúiÓ¦…‡‡S[6++ËßߟÚé´ rrrvvv'Nœ ¼òË—/CCC)/ ¼  @£Ñh§OŸ>>Ô–}ûöíìÙ³1Ý C³˜‹¥¦¦¿{÷ŽÚÙ›ššŒW­Zåàà@aY JMM¦¦æ¥K—(öX¾|yïÞ½ÝÝÝ©- ì÷PæìÙ³”Ïå{áÂE‹Q[¨",,ìââ²fÍÊ/¾;r䈟Ÿ_rr2µeàP¯8†NÉÏÏ×ÑÑ ÕÒÒ"Ý ´gæÌ™»ví¢¶lzzº’’µ5}`š¥ÀÐ)666šššxêûËËËÓÓÓ WWW'Ý p A°©ÀÀÀ„„„;w’n~MVVv×®]+V¬À'l`ìÀYYY666bbbbbb666ÙÙÙí¬»jÕª~ýúá)%ÀJåååk×®=sæ ¦}æ¿ÿþ{ccã… H7À®\YYijjª¯¯Ÿ™™™™™©¯¯offV]]ÝÖú‹-’’’ŠŒŒde“[·n>}:åÖóôèÑãüùó»wïÎËË#Ý ð:6=ÙéææãííݼdáÂ…k×®mCJëq˜Ë4551cfæÐÐPGGÇøøxÜÊqöíÛ}ïÞ=Òà¹sÀ÷îÝûé~J‡   RýçÊÈÈ5jTCCµe«ªª–/_~îÜ9¤/'Ú¹sgAAÁÕ«W™Q<>>žeû°i'$$èèè´\¢­­˜˜Hªà\+W®œ7o???µe7lØ`jjjaaAmY` ~~þË—/oÛ¶­ý‹Kº ´´tÊ”)ïß¿§¶,p%6 àÒÒRqqñ–K PRRBªàP¾¾¾›6m¢¶l```hh¨‹‹ µe•´µµ7nܸhÑ"jŸÜ¿ÿ#GŽ,_¾¼±±‘²À•Ø4€YcïÞ½|­!ÝP£¤¤dóæÍgÏž¥öð7//oåÊ•>>>¢¢¢–ÖÛ²eKÏž=)zÕ’%KÄÄÄNŸ>MmYà>lzµ‘´´t||¼´´tó’‚‚==½üüüö7ÄEXÐ,//ïáÇNNNÖ¤ÓéS§N?~<å³)999#G޼wïÞ¨Q£(,›œœaaaÊgn¡ÓéWƒŸ €K”””¬\¹òðáÃÖ,--µ²²rqq9r$…emõèÑÃ××÷É“'ÔNÝÔÔtìØ1LÍ?ÁÉÎVà0'²±±QRR:qâUëëëÍÍÍGŒqìØ1ªjGøô铉‰É­[·ÆGUÍ”””1cÆ„‡‡c>ŽƒsÀíñôôLOO§öðwÅŠbbbýõ…5# 6ÌÇÇgÞ¼y©©©TÕTUUý믿æÏŸ_[[KUMàt8ÔkŽ€9NAAAUU•²²2U÷íÛwÿþýðððvn~îvùòå¿þú+22RJJŠªšóæÍ›7onfã,ÌK$M+À<îÂ… ǧö8ÑÞ½{`[¸ €F£Ñ¾|ù¢¢¢²sçÎî—òôô\½zõãÇ‘¾Ð)BBB·nÝ·°°(++ëf5//¯ùóçPÒpêµGÀ\ïÀW¯^}ô葚šé^€#555mܸ1$$äáÇòòòݬöøñã‰' QÒP q°˜‹Õ×ׯX±">>þÞ½{$Ýp6WWWww÷   Ü;ÎÅ0 @²²2 ‹oß¾…‡‡#}¡û6nÜèîînnn~ÿþ}Ò½çA¯HKK366ÖÑѹ{÷.žqT±¶¶¾ÿþŠ+þþûoÒ½‡ÁXk+0Í}BBB.\¸gÏž+Vî¸PffæŒ3 O:…S¹\CÐÀ£^¿~ÝÍ xétúÑ£G-ZtãÆ ¤/0‰¢¢âË—/ËÊÊ&L˜™™Iºà ``_áááVVV999]®ðõë×éÓ§ß¿ÿÍ›7&&&Ôµð³>}úܼysÞ¼y†††Ý)•––¶víZŒÃq=0°©ÄÄD;;;___…®UxõêÕˆ#tttº£À/ñññmܸ1((hÆ ›7onhhèZAƒ½ÿ~ëÖ­Ô¶ì ì(//oÚ´iG555íÂæMMMGŽ™={ö©S§Ž9ÂÏÏOy‡m144Œ‰‰ùüùó¸qã¾|ùÒ… BBB÷îÝ Æ,•Ü  ìèéÓ§kÖ¬Y¼xq¶MOOŸ8qâ³gÏ¢££g̘Ayo¿$..þÏ?ÿÌŸ?ôèÑ—/_îB…¾}ûÞ¿ÿäÉ“·oߦ¼=`¸Ü·¸ šCÑéôK—.íܹsÛ¶m6lèÑŸ/°„„™‹/ÊÈÈtvóÄÄDEEEfô„™°X ̉233¿}ûvíÚ5 Òíüúúúƒž?þĉ .$ÝtnChSCCƒ››Û¨Q£&L˜ðêÕ+¤/°}ûö=|øÐÕÕuêÔ©];+ \  œ-**ÊÐÐðÑ£G¯^½Ú±c®·ö¤¯¯ÿöíÛ)S¦9r„’Ç §C§***Z¶l™••Õ† ‚ƒƒ•••IwÐ~~þM›6EGG¿~ýzøðá="݆òŽ=úìÙ³Ž¯_WWwüøqMM;}û&%%á¼pEEÅ   ww÷ 6L›6-))©S›×××ûöI½‹!€°cÇŽyzzjiiupý€€MMÍÿý÷åË—'Nœcj{Ì`aañáÇ)S¦L˜0aíÚµÏÔ€€“ââb¦¶¬’\\\.]ºÒ‘‡>þ|ôèÑû÷ï?{ölPPªª* :`õë×'%%ÑéôaÆ|èèè¸~ýú_ž¦æA³˜ˆÊÊJooï'NÈÊÊnÙ²ÅÒÒ’tS$egg»»»_»vmÖ¬Yë©€^IDATׯ>|8éŽx¦¢n–°råJEEŧOŸ^»víÅ‹3fÌ@úÈËË»¸¸¤¤¤ 2dúô鯯Æ>>>˜E‹k €¢££§M›öÓóÉëêênݺeff6yòd™?Þ¹sg̘1¤š`Oýû÷ß¹sgzzúöíÛ¯]»6xðà]»veffþwÍׯ_755±¾C茵¶CÐÔò÷÷_³fÍ… ¬¬¬K¢¢¢¼¼¼üýý‡îìì<{öl²MpŠÏŸ?Ÿ;wÎÇÇGKKkñâÅ666}úô¡Ñht:ÝÜÜ\PPÐ××WTT”t›Üç€Y L•ÆÆÆ;wÞ¼y3 @GG'''Ç××÷ÚµkuuuxÐ)@×ÔÕÕ=xðàêÕ«3fÌppp011ijjZ·n]xxx`` ššé¹˜¥ÀTIIIÙ²e˱cÇÂÂÂüüü>|ø`ccãàà`llŒS¼”(..öõõ½~ýz~~¾­­­­­m||ü®]»ž}úäïïïïïÿãlj'.[¶ÌÈȈtSÜÌRàîÈÎÎþ矢££'Ož~þü¹––Ö´iÓ&Ož}äååååååÿ—‚‚‚ŒŒ ???kzC³µ¿îúúúüüü¼¼¼âââÌÌ̼¼¼‚‚‚‚‚Ư=z0þ?ÉÉÉ1þ“)((ÈËË4ˆ .^莢¢¢œœœììlÆy·æ¯¿~ý*%%Åx·”’’8p ¼¼¼œœœ¤¤¤œœµSò!€YªS¿îªªª¢¢¢ÂÂÂââ⢢¢‚‚‚âââ¯_¿—””HII 4HRRRAAAVVvàÀdd­˜˜S–öÑéôÿý÷Úµkýû÷Ç4ÎðKÿþûïÇíììúõëG°†††ÜÜ\Fdggçææçää455 8PJJJRRRZZšñ…¤¤¤¬¬¬„„„¤¤¤„„DÇïºD³Tó¯ûû÷ï………¥¥¥ß¿/..nŽØ¯_¿2þÉ‹ŠŠètº¤¤¤ŒŒŒ”””„„ÄÀÿÒŒeŒ/ØpÐøû÷ïׯ_pttœ?¾ŒŒ 馀ÝÅÄÄ?~üÉ“'Ó¦M³³³›:uj˹iÙDEEcб¸¸¸°°°¨¨ˆñ¦ŸŸÏXXRRÂHbiiiiiiÆ›6#³ÅÄÄÄÅÅ%$$ ÀøÑÀ¬ÓØØÈÏÏ?`À€oß¾‰‰‰IJJ0 oß¾Œ­æ$ Æ¿‡ÎÂXUUµk×.{{{Ò½‡)))ñ÷÷÷óóûã?¦NJºNkhhhÏ-Ç/ËËËKJJŠ‹‹¿}û&(((..ž““ƒf>>¾¢¢" ^˜e ZUUUõíÛ7EEE&%¦l¤¤$G§oCCCTT”««ëÔ©S_½zEºà!õõõ7n *..&ÝK·ˆˆˆ(((0¯>˜ =zTBBâ·ß~ûòåËÊ•+µµµIw<¤¶¶VZZúüù󪪪ÚÚÚ{÷î%Ý›â’!謬¬ 6<}ú”F£Mž<ÙÝÝ]^^¾ËÕØa"ŽîÈÈÈå¸ùÞ€Ë466ÆÄÄäååYYY‘î¥ëpV{*++uuuW­ZE£ÑΜ9síÚµ÷ïßwù9ÒlÀ………ááá>|HHHøðáÃÔ©SOŸ>Mº)€® :qâ„––––––†††––{>îÜ77·˜˜ooïæ% .400X»vm× àšššV'` ;s挖–ãù_***lxƒ@G0IÎ8œHLL433Û³gé¦Zn©©éöíÛ§L™Ò¼$88øèÑ£!!!]+ÈúþôéÓþýûw‘gffš˜˜|ˆn  `UU•€€@ó’úúú>}úÔÖÖv¡Z^^Þ Aƒ†ÊxZÖ‰'þ»ZbbâØ±c¿ÿ.,,,((8bÄÆ%`?)..¾yó&ã’(Æ$L½¨€7eee¥§§1æ.œ8qâÈ‘#ÿ»Ú–ÿ×Þý…4õÿq?_~éÌËüC˜ )¦4‹„ Ô2Í@j éEW}««¢P¨ "¼ vaPBQ:B"Ä4•x‘*9Å?˜™¸Òó½PæÚfÊ~lïÏÖóqçÉêµÏù|ÎkŸ¶ýûoCCƒëÒ]WWwæÌï_khhhhhèêêúùó§¦i*J=ôEDD8N÷#N§322rÝ¿¨æý€RT^á°–} :˜” ¦‘Í_dó²Ù” ¦‘Í_ËÄ‘žžn·ÛÝôõõ™L&©<¬+ ¸  Àjµº±Z­………RyX—º»þ›5›Íååå•••š¦Õ××766Úíö¨¨(ÿþAe_ Q6˜F6‘Í?ÊfS6˜F6ñôŸ ›ÍöæÍ›””””””®®®¶¶6¿Û€ P÷I‡ eŸ‹)L#›¿Èæe³)L#›¿—í|O…OAþ¤•S6˜F6‘Í?ÊfS6˜F6(›ºO:cáp€C €@ € 0(`PÀ €@ €@ìÃ?^¤ùàp8ÒÒÒÔÉÖÑÑQ^^žšš™””tøðáÇK‡ZÑÞÞ^ZZºuëÖÍ›7ïß¿¿¹¹Y:Ѫ·oßVUUÅÄĨs*‡††JJJ¢£££££KJJ†‡‡¥­Rp¸–©<ÇT^›îT»¦£txQX–––òòòšššÔ‰š••u÷îÝ………ÉÉÉ–––ÌÌÌ+W®HçÒu]×4-;;ûÕ«Wsssf³ùÞ½{Ò¡V˜L¦«W¯¾ÿ^‘S9;;k4«««§¦¦¦¦¦ª««ÓÒÒæææ¤s­Pm¸\Tžc*¯M¯iAH¢ÊCUŠ:3`-µµµeeeºÚQ?~ü#B×uýÂ… KKK®ív»ÑhÌã“"§²®®Îb±¸±X,·oߖʳE†Ë%$昋:kÓEÁkZ’ðu„>¨üÕК¦õööžµŽ9òë×/éDž&''wîÜÙÞÞ.Ä“"§2""Âétºq:‘‘‘RyÖ¢Èpù¤æSvm*{M B¨òPUV__ôèQ麮ëÍÍÍt_9êLVwcccMMMIII×®]“Îò‡ÃqèÐ!›Í&ÄEN%üRyŽéê­ÍP¹¦é)EjÐläŇÃÌT˼³Æ/_¾xüNðƒé7›Í¶}ûö`¦Z¶V¶‘‘³ÙÜÚÚüHæúÓàGòïp8ÜŒŽŽ&$$HåY‹"ÃåA|ŽmÔÚô¦Î5m](‚¿ý°ûXüáw‚ÉýÿõÈ688¸cÇ÷¥‰¼Sy#ã¶oß¾ñññ`¦Zæ3Ûׯ_;VWW—››üH¦šôôt»Ýî~¤¯¯Ïd2Iå !*̱ ’Z›ÞÔ¹¦­+Ëöo/àxøðá¤ShÚ·MÒÑ|xýúõ®]»¤Shš¦ççç߸q#''G:‹ê ¬V«û«ÕZXX(•'T„ÖSgm†Ð5- E°±ò_$''çÑ£G£££N§óÓ§O555[¶léîî–Îå›:g0//¯¹¹yllÌétŽŒŒÜ¿?99ùÙ³gÒ¹t]×÷ìÙóàÁéëPäT~ûö-55µ¦¦ÆõAF£ñû÷ïÒ¹<)2\.*Ï1•צ7EÎlpŠ@‰‡ª”¶¶¶ââ⸸¸M›6%''—•• H‡Z“"“U×u›ÍvüøñåqKLL,))éèèµÂçSÏééié\º¾F6ÙHŸ?.**2 ƒ¡¨¨Èã,‡k™ÊsLåµéM‘œ"På-ÏüU¸ € 0(`PÀ €@ €@ € 0(`PÀ €@ €@ € 0(`«JKK/]ºä~äâÅ‹'NœÊ„±t]—Î@“““™™™Ož<ÉÌÌÔ4­§§'??¿¯¯oÛ¶mÒÑ€pÃÀª¸¸¸úúúŠŠŠÅÅÅÅÅÅŠŠŠÚÚZÚvÀ<={6##C×õ—/_>}úT:ž(`žÆÆÆrssgffl6[ZZšt ;;{bbâÝ»wwîܑބ'îøMkkëàà`qqqyyyoookk«t" <±°jzz:++«¥¥Åh4jšÖßß_PPÐÝÝ+ 7쀬ªªª²X,Ëí«išÉd:uêTUU•l* ,±@;`PÀ €@ €@ €€ÿ²Bgi™â*`IEND®B`‚gsl/doc/images/rand-poisson.png0000644000175000017500000002557113536674414015100 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœíÝ{TÔuþÇñïp‡LA*ÑÔê@G“o¥(hJ’Çd7+“Ö“ØÍ,w«íèÙÂ~imnJ©é®e•©ÙŠ¡Ùž MÍ[ÉŠzÊKx†•ñÂE.Ãüþ e'œù~›™Ïç;ó|ü¥ßùÎÌ‹Aæåûóù«ÕªÏò_D  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@Zl„‡‡:4//Ïùûº5›óZ?„ààà˜˜˜”””yóæ={¶Í9.|:—?¦Ë ð ÐÈú_'Nœxæ™gæÌ™³téRÑ¡Tkùjkk=º`Á‚+W® 0à“O>Qõ ž¬@ê^Ã`µZEgôÇ`hûµSXX˜}âÄ Q‘4¸ö£Påûï¿3fÌöíÛÍã¸ð|WÝ 0àÉÉÉgΜiýkAAÁ!CŒF£Ñh2dÈæÍ›[ojá®\¹òüóÏ÷íÛ7,,¬sçÎcƌٴiS‡7uøà‹å•W^éÙ³gppðÍ7߬v.¿ýöÛgÏž½hÑ"'Ó¶œÐºšÝz¯ººº§žz*&&ÆîÊsmmí£>zÝuׯôôô’’’k_[­Ïb÷¹<óÊ.f Þµ_;………7ÝtSËŸwïÞýÑG™L¦ŠŠŠ>ø **jïÞ½mî{ï½÷Ξ=û§Ÿ~jhh¸páBAAÁ]wÝÕáM>øŒ3æÌ™óã?VWWoß¾ý¦›nZ³f“E‹#GŽôîÝÛù´×>Ž¢(Ó¦M[½zõ¥K—®}:EQxàÜÜܲ²²²²²ÜÜܘ˜˜'N´“Êö¾Žnrá+x ha[&“iݺu7ÜpCnnnË‘‰'.[¶Ìöü%K–Lš4©Í};uêdÛO¶Ú¹©ÃÿóŸÿl{ëæÍ›ÜáGa«®®.44Ôù´vKqÑ¢EŽNSåå—_¶½iÞ¼yS§Nm'•3ìÂWð ÐÂvÉh44hÕªU­·öèÑãôéÓ¶ç—––ÆÇÇ·Þ·åƒ ÊÎÎ>{öìµßÎM>xë(Ù¢ªª***ÊÑGa÷xMMMXX˜óií–â©S§vmÈãÇwïÞ½Tΰ _À(`@‹ö·o‚ƒƒ¯^½j{äêÕ«ÁÁÁmî{òäɉ'†„„Üzë­¿ÿýïóóó›››;¼©Ã·X,N¦ut¼¤¤¤OŸ>Χµ[Š ŽžNQ”ºº:Û›jkk=šÅbq¦€]øÊÀEX€ëÅÄĘL&Û#&“)66¶Íi½zõÚ°aÃÅ‹׬Y3tèÐùóçOŸ>½Ã›:|p?¿_ûuŸŸ?räHçÓÚØÎ­çÏŸoó×®]»¶ü922òâÅ‹¶·ž:uÊ™ØxeâŸ#àzIII¶G>û쳤¤$»'÷ï߯Œ[¶lY»vm‡7©zp :”››û‡?üÁù´!!! ªžeõêÕmþ:zôè–?ß|óÍ»wï¶½uÕªU­nç¹ÜýÊ.&zt©ý¯o¾ù&**ªår\“ÉôÑGEGGûí·mî;|øð>øàÌ™3eeesæÌIOOïð&'Ü™´­Ç›ššªªªvîÜùì³ÏvíÚuýúõמÓN¤ÄÄÄ 6455µÿŒŠÍ2òƒ>øÖ[o•—————¿õÖ[111?þøcË­üqŸ>}ŠŠŠjjjŽ?þ /̘1£õ¾í<— _ÀøÇhÑá÷† ’““CCCCCC“““7nÜxí}·mÛ–™™Ù¥K—>}úüéOºxñb‡79ùàΤmýxPPP×®]‡ž““Óæ2+gÒnÙ²¥oß¾þþþŠãZë/ ¸ººú‘G‰ŠŠ ;vlqq±í™K–,éÛ·o``à7Þ8oÞ¼¦¦¦Öû¶ÿ\®zeàgÊ {À@  €0PÀ@  €0PÀ@  €0PÀ@  €0È[À§OŸÎÌÌŒˆˆˆˆˆÈÌÌ¢DJII5jT~~þ€JJJ²³³ÿóŸÿØþÜ…kñ}".Á÷ÛØÁ·!ðÏ=÷Ü믿Þ:ÈOš4éøñãŽÎ÷µwH÷}¼¾õ::É×þyÐ)»oV¿ò¬¶¶6**ªýßýêSï|0À¶lÙrÛm·µNlll```÷îݧL™rìØ1Ïó>0x­k/˜jÿ⩪ªª¹sçæææ¶ó˜&Løä“O®\¹²oß¾äää”””ï¿ÿÞm7ó­•'ùÚ rítEEÅ}÷Ý—““3jÔ(çïµ|ùò7~ñÅퟖ““3oÞ< ©\⥗^ÊÉÉÑv_ö€=Š  .,àsçÎ?þ7ÞHKKSuÇŠŠŠÞ½{WWW«}F½p_#ðmHà=lÿÚþ7é¶öÊùóçÓÓÓsssSSSÕ>#ãŠf쀎µù~¡}ûöÙþÕÚ®–sL&Ó¸qã^{í5 í«(ʺuëî¸ãÍù} :öðÃûí·µµµf³ùóÏ?Ÿ6mš¢(åååÎ?¸qãæÌ™s÷Ýw;:ÁvŒNKK[¿~}yyyccã©S§,Xðÿ÷¯¾úê¯ù|›v° @ Ê+–,YÒ2ßrË-3gÎÜ´iÓ¾}ûΟ?ïüƒ\{Ðl6GFF¶žÐú–XXX¸téÒ¢¢¢K—.ÅÄĤ¦¦Î;÷–[nqÅG#).Âò( €.ðfåü ¼  €0èëϺF  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ :ôÄjµúûû[­VÑAƒÁ`±X ƒè   ®^½R[[+:ˆVWW&:hÄ4Th)`Ñ)EQÂÂÂdøhFC…ºº: \‚† W¯^ BQ(`úGC– ÀU(`¨PWW'Él4)`ºFC&`p *p¸  ¸ \…† ,A€«PÀP%hp *° ®BCy&àÐÐкº:Ñ)@; *0€«PÀP‹°ÀU(`¨@€«PÀPAž=` €ÞQÀP=`p *° ®BC– ÀU(`¨À4¸  ˜€ÀU(`¨ Õ\SS#:hGC.ÂW¡€¡KÐà*0Tg :((Èjµ666ŠQÀPAž%h…!€ÎQÀP¡®®N’ X¡€è ¤š€F# @¿(`¨ U3Ð5 Îj¹â) @tŸQÀt†³ä¹º @×(`8Kªõg… s0œ%Õ%Ð  @ç(`8‹ \ˆ†³äù9”-(`ºFÃY\„.DÃY,A€ QÀp–lKС¡¡uuu¢S€F0œÅ4¸ gÉ6SÀt†³˜€À…(`8‹‹°À…(`8‹%hp! Îb \ˆ†³$\‚®©©4¢€á, ˜ €~QÀp{ÀàB0œÅ0¸ g1€ ˆÝp¸®®Î`0ˆ¢(ŠÒÜÜ,IzAÃY²-A †ææfÑ)EQüýý­V+ @– á,Ù– åáïïo±XD§ 30œ%Û,??? €Z0œ%Û°<üýý%Y  #0œUWWÇlKÐ4 €á,&`GX‚  gq–#,AЀ†³¸Ë– h@ÃY,A;Â4 ä-àÓ§OgffFDDDDDdffž9sÆÑ™EEE“'OîÚµkç· ’ŸŸïÉœàççg@}}}pp°èCF0µ$-àêêêÔÔÔ¤¤¤ÒÒÒÒÒÒ¤¤¤´´4G?ø7%%¥²²2??¿¬¬lÉ’%999ï¼óއ»OSSSËZŽŸ¶èˆŸŸ{ÀÔ2X­VÑìX¼xñ>üðÃÖ#=ôРAƒfÍšuíÉÏ=÷Ü믿ÞÚ ÅÅÅ“&M:~ü¸æg7$zYêëë;wî|õêUÑAàPÏž=·oßÞ³gOÑA¸žûAÒ ¸   ++ËöHVVÖÆíž¼páBÛɬOŸ>í¬WëNSSS@?²[j\ @I ¸¤¤¤ÿþ¶GúõëwäÈgî»eË–Ûn»Í=¹°X,þþþ¢S =\ @IG+³Ùm{¤K—.UUUÞ±ªªjîܹ+W®t[4Oc– @I'`m***î½÷ÞåË—>Ü™ósrrì^îë0ËoC ¤ÕfÞ½páB›™¸sçÎ;öÅ_5j”“Ï’““c÷r_í¹Ý€ X~ìÐ@ÒNLL==}Ñ¢EiiiîOçQLÀòc €’pFFF^^ží‘¼¼¼ &Ø=Ùd27îµ×^KMMõH:b–KÐ4´€³³³wíÚµ`Á³Ùl6›çÏŸ¿gÏžéÓ§·ž`»S;nܸ9sæÜ}÷Ý"’º°üX‚ ¤^XX¸oß¾øøøøøøýû÷oݺÕh4Ú=ù»ï¾{àÚ\HuñâEgv&`ù± @yßÙ{öì¹aÃG·Ú^*%ÛeS®Å,?– h éŒVLÀòc €°ì˜€åÇ4 (`Ù1Ë%hPÀ²c–KÐ4 €eÇ,?– h@ËŽ X~,AЀ–°ü˜€h@ËŽ X~ìЀ–°ü˜€h@ËŽ X~ìЀ–°üX‚ ,;&`ù± @ XvLÀòc €°ì˜€åÇ4 (`Ù1Ë%hPÀ²c–KÐ4 €eÇ,?– h@ËŽ X~,AЀ–°üX‚ ,;‹ÅBKŽ €°ìšššX‚–{À4 €eÇ,?&`PÀ²c–{À4 €eÇ,?– h@ËŽoC’KÐ4 €eÇ´üüüü˜€¨EËŽ%hù1Ѐ–°ü¸ €°ì˜€åÇEX4 €eÇ,?– h@ËŽ X~,AЀ–°ü˜€h@ËŽ X~ìЀ–°ü˜€h@ËŽ X~ìЀ–°üX‚ ,;&`ù± @ XvLÀòc €ŒVUUUüqaaáÁƒM&“¢(ݺuKJJJMM}ࢣ£=Ò§1Ë%h8œ€Ïž=›·zõê‘#GnÞ¼¹¬¬¬¬¬lóæÍ)))}ôQ\\ÜôéÓÏž=ëɸ>ˆ X~,AÐÀáhÕ·oß^½zåçç7ÎöxBBBBB¬Y³¶lÙòÇ?þ±oß¾uuuîÏ默€åÇ4 NÀ“'OÞ¿›öµ•žž¾ÿþÉ“'»'~Æ,?– hàp´úÇ?þÑáÜ9 ¿°üX‚ AÇWA¯X±ÂîñÅ‹»: ì`–KÐ4踀srrŠŠŠÚ\¿~}nn®{"ᘀåÇ @ƒŽ øŸÿügVVViiië‘;w>ýôÓ[¶lqg0üŒ X~ìРã6lØÒ¥K333kjjE9vìØý÷ß¿~ýú„„÷ǃÒÔÔÄ,9&`8õΞ‘‘qáÂ…iÓ¦½ùæ›÷ÜsÏŠ+†êîdha±X˜€%Ç0 œ­~øa“ÉÔ¯_¿… fdd¸5l1Ë%h¨xgî¹çfÏžMx°üX‚ Ã65 ÞÙjµº4 ì`–KÐ4pøÎN¹J‚ X~,AЀ_G(;&`ù± @‡,:×s_#HÔ4òª€FceeeXX˜è pèèÑ£™™™GŽ€ë¹¯¸ ZvìË%h8UÀÇÏÊÊŠ‹‹ Œ‹‹ËÊÊ:yò¤»“¡{Àò£€hÐqÿûßÿ¾óÎ;ûöí»cÇŽË—/ïØ±£OŸ>Æ +))ñ@>477SÀ’ãÛhÐñÒö¸qãÆÿÔSOÙ|óÍ7¿øâ oý•Àòì755…††666Š‚öœ>}zøðá¶¿3€×y–ÑhñÄ‘‘‘ƒÁc =€ j± è…¤\]]ššš””TZZZZZš”””––V[[ëèü©S§vëÖí›o¾ñdH`†Z0 ’NW+W®2dÈܹs[þ:wîÜ£G¾óÎ;³fͲ{~II‰Óy0ÔbÐ I'à‚‚‚¬¬,Û#YYY7n•G&`¨Å0 ’pIIIÿþýmôë×ïÈ‘#¢òˆÂ µX‚ôBÒ6›ÍÑÑѶGºtéRUU%*(LÀP‹ôBÒF &`¨Å0 ’pTTT›y÷Â… mfâ_/''Ç`kŸå×`†ZLÀ€^HZÀ‰‰‰‡²=R\\œàÚgÉÉɱÚãÚgù5˜€¡az!igddäååÙÉËË›0a‚¨<¢0C-&`@/$-àììì]»v-X°Àl6›ÍæùóçïÙ³gúôé­'HµPì>LÀP‹ôBÒ/,,Ü·o_|||||üþýû·nÝj4o»}+áV®fLÀP‹‹°½wºêÙ³ç† ÝÚf§Vª[b†Zìz!éŒLÀP‹%h@/(`©1C- Ð XjLÀP‹=`@/(`©1C-ö€½ €¥Æ µX‚ô‚–0Ô¢€½ €¥Æ µØô‚–0ÔbÐ XjLÀP‹%h@/(`©1C- Ð XjLÀP‹=`@/(`©1C-&`@/(`©1C-.Âô‚–0Ôbô‚–0Ô `t骭‹/*Šb0DQE1 0Taô‚n+22RQ«Õ*:  èKЀW¡€½ €¯Â÷zA^… Ð ð*|0 0àU˜€½ €¯Â0 0àU˜€½ €¯Â0 0àU˜€½ €¯Â0 0àU˜€½ €¯Â0 0àU˜€½ €¯Â0 0àU˜€½ €¯Â0 ¢p%ÿææfƒÁ :ÈÏ CSS“Ÿÿ×Ú¢€oÓÜÜ,:Âÿƺº:£Ñ(: þ[ ÀŒFcMM而(`nDŽPÀ܈¡€¸ 8Bp£N:QÀ€]07b¡€¸‘Ñh¬®® À˜€G(`nDŽPÀ܈¡€¸ 8Bp# p„àF0à ÀøA€#07b¡€¸?ˆp„àFLÀ€#07¢€G(`nDŽPÀ܈¡€¸ 8b°Z­¢3HÇ`àe\£¹¹900°©©É`0ˆÎhá¾F`àF~~~!!!µµµ¢ƒÒ¡€¸«Ð€]0÷¢€»(`îEvQÀÜ‹좀¸ ØEp/~#!` À½˜€»(`îÅo$좀¸0` À½(`À. €{QÀ€]0÷¢€»(`îEvQÀÜ‹좀¸?ˆ°‹à^LÀ€]0÷âqvQÀÜ‹ °‹à^0` À½(`À. €{QÀ€]«Õ*:ƒt ^Àeš››døšò÷÷¯¯¯÷÷÷zâ¾Fpǃ@+??¿ææfÑ)EQºwï^YY+: (,Að±±±eee¢S?£€øŠîÝ»———‹NüŒà+˜€! €¯`†T(`¾"&&††<(`¾‚ R¡€øŠØØX ò €ø .‚T(`¾¢{÷î0äAð:u2 ürbH‚àCX…†<(`>„ ¡! €áBhȃàCX‚†<(`>$66¶¢¢Bt @Q(`>… ò €ø.‚<(`>„ ò €ø&`ÈÃ`µZEgŽÁÀËx'‹Ål±XDQ‚‚‚ÌfsXX˜è è€û €ñ÷÷ojj²J`РA»wïýz@$ 9rä×_-:D¢€@€”””íÛ·‹N‘Øì´ƒ=`îV[[SQQÁ6°äدvûí·³ ì˼¤€OŸ>™™‘™™yæÌщ lû8o(àêêêÔÔÔ»]l» "IDAT¤¤¤ÒÒÒÒÒÒ¤¤¤´´´ÚÚZѹ =lû8oØì\¼xñ>üðÃÖ#=ôРAƒfÍš¥íÙ൵µQQQ ¢ƒ(!!!¢ƒÈˆ=àödeeÙÉÊÊÚ¸q£¨<àŒ°°°úúz‘ߌü_cÇŽ-((ýzøo(à’’’þýûÛéׯߑ#GDå}ùÝï~÷É'ŸˆNás¼a­5((¨¦¦&00°õHccc§Nêëëµ= KÐ|ÊåË—cbb®^½*:ˆöè£>ÿüó±±±¢³(‹¥¢¢âúë¯wW#^øp…ÀÀÀ††Û# AAAÞñ¥—^rËk ð"n*/oõbbbŠ‹‹cbbZ”——0@ó/sÉìª1š0¾ÆUC]„qÕãFaìò†=àÄÄÄC‡Ù)..NHH•€yCgddäååÙÉËË›0a‚¨<tÈ 8;;{×®] ,0›Íf³yþüù{öì™>}ºæ”jo˜0ŽÆÂ8"UE²<„qÄ}a¼aXQ”Ÿ~úiöìÙ[·nU%---777>>^l$©.¥&Œ#R…Q$ËCGãaT‘=Ÿ~Iõ¹'Œ#R…Q$ËCGãaTñÏÉÉÁk9Rt„ÿ!Œ#R…Q$ËCGãaœ'ûðJÞpºC  €0PÀ@  €0PÀ@  €°ë>}:333""""""33óÌ™3ÃsæÌÁƒýõ×—/_¾téÒöíÛ8sæL!a¾úê«èèèU«V™L&“Éôî»ï:ôêÕ« ÐÎlïɶ$úJó‹-š2eŠí‘)S¦¼ù曢ò´þ®úì³Ï677·þõСC½{÷˜§ãÇGFFŠÍðÆoL:Õ*ú“%üŸJ«ÂÂÂŒŒ Ñ)ì³X,7ÝtÓÞ½{E?uê”í‘S§N…‡‡ 3bĈ÷Þ{ÏöȻᄏlÙ2Ï'¹ö_¯´ïÉV«•%h+((ÈÊʲ=’••µqãFQyä±páBÛÕ¡>}úH´¤(þþþ|ÿý÷+W®\¶l™À ²ùûßÿ>sæLÑ)ìÛ´iSLLLrr²¨!!!× õ|EQöíÛ—‘‘a{äž{îÙ°aƒ0mÈüžL»XIIIÿþýmôë×ïÈ‘#¢òHkË–-·Ýv›èŠ¢(—.]jÙŸ~üñÇEe¨««ËÊÊzï½÷ÂÃÃEe°ؽ{÷)S¦;vLTŒÝ»wWWW§¤¤„………‡‡=ú›o¾¦ÜÜܧŸ~Z`€'Ÿ|òþûïß±cÇ•+W®\¹RTTtß}÷=õÔS#µÑ² ,œÔïÉ¢GpoØÐÐ`{¤¡¡!((HTžVR}®/\¸pË-·‰aû…0f̘¦¦&QI{ì±—_~Ù6˜¨$V«u„ EEEuuugΜY¼xq·nݾûî;!I‚ƒƒ»téb»³Ø¥K—;v c«¸¸øÆolll˜¡¹¹yâĉ¶ÿ†'Nœh»ËãIÇÿý÷m¬ZµJÈûÞµ_;Ò¾'[Ùv9i?Ùòpyyùˆ# EùYEEÅêÕ«ãââæÍ›'$@~~þðáÃmë_žO–Õj}ûí·ÇŽ+䩯ÝY9r¤0¶yä‘W_}Ul†¿üå/=zôذaC˵E6lèÑ£Ç_ÿúW!a¶nÝzÝu×½ÿþû••••••ï½÷^—.]BBB<Ÿ„öiݺu+//·=RVV+*O+IÞÓÏž=Û¿ÿ¯¾úJt¶ o¼ñF!OÝ»wïŸ~úÉöˆ$Ÿ¬åååF£QÈSÇÆÆVVVÚ1™LaaaB´ª¬¬ŒŽŽ¾pá‚Ø={öܶm›í‘mÛ¶õêÕKPëöíÛGe4CCCï¸ã޵k× sí׎´ïÉV.Âr¹ÄÄÄC‡Ù)..NHH•G*çÏŸOOO_´hQZZšè,m 8Ðd2 yê'NôìÙ³Í÷Ý ÿÜVÖ_®Õ{Rbb¢¨§nÇßþö·ßþö·ÑÑÑbcœ;wnàÀ¶GxîÜ9QyRRR «««kkkwîÜÙ¹sç¡C‡Š cKæ÷d ØÅ222òòòläååM˜0ATy˜L¦qãÆ½öÚk©©©¢³Ø±k×®[o½UÈS_ûÿâÖƒBò´±nݺ;î¸CÈSß{⦅þ¹í‘M›6 ¼ðXQ”ÆÆÆåË—‹½üªE=8`{dïÞ½7Þx£¨bĈcÇŽ‰Îx-&`¿`0üü¶°iÓ¦Çüã?¾óÎ;E‡¼0û222Ö®];yòäõë׋Îx!.ÂàаaþüòËôôô³gÏ>óÌ3¢ã^…%h` (` €€@ (`ødl¸uþu"IEND®B`‚gsl/doc/images/rand-landau.png0000644000175000017500000004135613536674414014651 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœíÝg\gâöñs4 €RDEQA…H±€½@¬X‰%Q\Ýh,I4šØb6Q£±DÝËêFb‰«Ä¶&ˆcA¢€ˆ¨4… ó¼àÿ°,""ž™û”ß÷E>q8Ì}z13÷™QªT*W ÑÐG0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0P}J¥RKRþµjÕ²²²êѣǢE‹îÝ»'Ñ ¥«Rï‘íñ¤@zJ¥R©TªÜÜܘ˜˜¯¿þ:''ÇÝÝ}ÿþý¯´9+º…ŽQªT*Ñm¥TÊôRû@®ðúõëo½õÖéÓ§% ö:wD¶G[À€Tîß¿ÿá‡Ö­[×ÎÎnΜ9ýõWÉr¥RYTT´dÉ’æÍ›×ªU«eË–7n,û‹7nÜèß¿¿‰‰Iýúõ§Nš››[ÅÕ>Ÿá•¶ÝÜÜfΜ¹fÍšr¿›““3gÎGGGccc33³·ÞzëÈ‘#¥7(Ý›]ú[yyy}ô‘••U…{žsss'Ož\¿~}“þýûGEEUž¶t” Ç*½Ùáǽ¼¼LLLLLL¼¼¼Ž=Zv •?à€0 •.]º´k×.%%åÔ©SIII‹-*ýÑ´iÓòòò‚‚‚233üñÇo¿ývïÞ½%?JHHðññéׯ_BBÂ7Z¶l9qâÄ*®öõ 6ìÌ™3åþío+,, ÊÎÎNLLœ1cƆ  EÉö¨êÿ+½ý|йs縸¸ 7X'NœØ¦M›7n$$$ôë×ÏÛÛûöíÛ/ ö¢±J\¼xqüøñÓ§O¿sçNbbâ‡~èïïåÊ•ÒTò€¨TWÕßA™™™-Z´(ý­üãezôèQOOÏ’ÿ;vìâÅ‹Ëþô‹/¾xÑ@åV[õ„/Zž——gddTî6uêÔÉÎήâz Åš5k^t3…BQîÞ-Z´Èßß¿*w¡Â±JþgèС›6m*û£ 6 >¼ôf•<à€(0P}•p^^Þ¢E‹ZµjeddTòÇnÍš5K+!!¡ì333-,,JþßÊʪÜOãããKª|µUOø¢åOŸ>566.w›Ž;Nš4éÞ½{UYB¡HLL|ÑÍž¿ïñññ7®Ê]¨¤€mllîÞ½[öGIII¶¶¶/´ìˆÂ.h@óæÍ»páÂÏ?ÿœ‘‘¡R©òòòŠŠŠJÚ¼yó²7¶°°ÈÊÊ*ùÿ‡Z[[—ýiÙV¾ÚrŠ‹‹_5ö;wÊ®P(öìÙ“‘‘áààкuë &ª* Õ¤I“J~úü½ËÈÈxÑ«xÒÒÒ6lXv‰••Ujjjé?+yÀQÞÐMû÷ï¿téRÓ¦MKþYî0g/üÛ·~ýú>>%ÿ_ù]¨d,Ç—]ò믿zxx¼R0@f0 ‰þýûüñÇ©©©ééé«V­ºsçNñË/¿Ü¸qㆠÒÒÒÒÒÒÖ¯_ëÖ­ª¬væÌ™Ó§O?wî\nnnBBÂüùó>|øÒáŠŠŠ²²²BBBfÏžýÖ[omÙ²¥uëÖånÓ½{÷Ÿ~úéÞ½{………©©©kÖ¬éÞ½{Éìíí;VÉnðçÅÄĔ޻ 6lÚ´©d–ÙKïB%cÍž=ûóÏ?ÈÈÈÈÈÈøâ‹/æÍ›WõT€‚AÚ¬’÷Ô£GÆŒS¯^=ssó &äää(^<™¨ÜÂððð>}ú׫WoÒ¤IOŸ>­ÊjU*Õ†  š5k¶hѢ½ÇKÓ6hР[·n .,7ͪôwO:åççgiiY»vm‡¹sçþùçŸ%?:~ü¸££cÍš5«xï Å“'OÞ{ï= ccã¾}ûFDD”½e%w¡ò±<Ø¡C#####£:”¨®âÁ™e€]Ð@  €0PÀ@  €0PÀ@  €0PÀ@  €0hnß½{×ÏÏÏÔÔÔÔÔÔÏÏ/99ùE·<{öì¨Q£4h`ffæååuèÐ!9sP ZÀOž<éÝ»·‡‡GRRRRR’‡‡‡··wnnn…7îÑ£GFFÆ¡C‡RRR6lذpá­[·Ê€W¢T©T¢3TàÛo¿½zõêO?ýTºdìØ±;vœ>}úó7ž={öÊ•+•JeÉ?#""†/SV^†n>|xܸqe—Œ7.00°ÂóÍ7¥í«P(*Ù_ €&ÐÐŽŠŠruu-»¤mÛ¶ÑÑÑUùÝãÇ»¸¸H“ õÐÐ]І††OŸ>500(]òìÙ³:uêäççWþ‹™™™;wþñÇ»uë&qF^ƒJ#”]RPP`hhXùo¥¦¦vïÞ=88¸Š£|ùå—>&µk×–ùYh¬j6ÙËhè°••UDD„••Ué’ÔÔTww÷”””ýÊýû÷¸zõjooï×]©ÔЇ 3éAC;;;‡‡‡—]ѦM›ÝþÁƒýû÷_³fÍë·/2ÐÐöõõݵkWÙ%»ví"e¿\*++ËÜܼzCSÀ€úXÀQÀ€z7 ÝF  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €0PÀ@  €oˆŸŸèС„„„{÷î%''7iÒ¤ÿþ>>>&&&¢£ÐlC¿¨Tª={ö´nÝzÇŽ999...“'OnÙ²åÆ7nýôSh馩¬“®_¿Þ¯_¿•+Wúûû+•ÊÝ,))iêÔ©÷ïß/ÙP–3! $]#° z!::zÀ€[¶l7n\%í«P(lmm;öÑGy{{_»vM¶„ô ›z` XÇ$$$ôìÙsùòåcÆŒ©úo9rd„ {÷îíÝ»·tÙh8vAËŠÖ%ÙÙÙŸ}öÙ{ï½÷ª¿4f̘]»võíÛWŠl4,+ X—Lž<¹F[¶l©Þ¯_¸paذaÇŽk×®zƒÐ °¬(`qúôiÿÈÈHssój¯äèÑ£S¦Lùã?š6mªÆl´“°€W–››;iÒ¤M›6½Nû*Š~øá‡ƒ~úô©º²›z` X7Ìš5ëáÇ»víRËÚ&OžüðáÃýû÷רÁŸ­€a´¬(`påÊ•!C†DFFZZZªe…ÞÞÞƒ š3gŽZV@+PÀ²¢€u@¿~ýÞ~ûí‰'ªqwïÞíСÃo¿ýæêêªÆÕÐd^AXXXttô¸qãÔ»Z›Õ«W¿ûî»yyyê]3=Ħ^ØÖvÆ óööþðÃ¥XùèÑ£›4i²zõj)V@Ó° ZV°V‹ŽŽöññIHH022’býþù§››ÛöíÛ9C Ø TÕ’%KfΜ)Qû* ssóï¿ÿ~âĉìˆð:ØÔ«[ÀÚ+!!¡sçÎñññuëÖ•t wÞyÇÁÁ᫯¾’t± ZV°özï½÷lmm¿øâ ©JMMuuu=s挓““Ôcˆ–¬¥=zäààpûöm †[¿~ý¯¿þ$ÃXDá0ðr”§} Å|™™ùóÏ?Ë3CCwìܹóoû›lÃÕ¬YsóæÍ³gÏ~üø±lƒÐ0tDDDDFF†···œƒzyyõéÓç믿–sPºƒà°6š5kV:u/^,ó¸iii.../^´··—yh2`–¬(`­SXXhccsöìYùG_´hQll,ƒÄ$, 2GŽqttÒ¾ …bΜ9.\ 2:-ECüóŸÿ?~¼¨ÑŒŒ/^üé§Ÿ²ã@ÕQÀÐzééégÏž}ûí·fð÷÷/((Ø¿¿À ´  ­·ÿ~___©Ï=Y¹5j¬ZµêóÏ?/,,€¡€¡õ:4|øpÑ)½zõjÞ¼ù?ÿùOÑAh¦ûV€YÐZ$;;ÛÖÖöþýû&&&¢³(BCC‡ vëÖ-é®Å@fÌ‚*vìØ±îÝ»kBû*ŠöíÛ·oßþûï¿€ €¡Ý~ýõ×!C†ˆNñ_K–,Y¾|yNNŽè 4ûZ+À.hmñìÙ³FEEE5jÔHt–ÿò÷÷oÕªÕçŸ.:5`4P3gδjÕJ£ÚW¡P,\¸pýúõYYY¢ƒÐh0´Ø¡C‡4jÿs {{ûAƒ­]»Vt}­`´¶°³³;~ü¸“““è å%%%µoßþÖ­[²]œ€DØ ”wíÚµ7ÞxCÛW¡PØÚÚ4hýúõ¢ƒÐ\lêU€-`­°páÂÜÜÜ•+WŠR±„„OOÏøøxsssÑYT[À@yGŽ4hè/dooïëëËF0€aS¯lk¾GÙÛÛgddˆÎòB ^^^qqqlÚ‹-`àwíÚU“ÛW¡PØÛÛ÷ïßÓ¦M¢ƒÐD0´ÒÉ“'}||D§x¹/¾øbýúõOž<€Æ¡€¡•‚‚‚¼½½E§x9‡ž={þðâƒÐ8ì¬Ç€5\RRRÇŽSSS•J¥è,/Þ¿ÿ„„.‘h#Žÿäãã£í«P(\]]Û·oÏu‚”CCûœ>> FFF¢³:ŽcÀÐ ………´ïKµiÓÆÓÓsÛ¶m¢ƒ¨> $""âÍ7ßB;|ñÅ+W®,((@5QÀÐ ‘‘‘p¹»»;;;ïÚµKtÕDCƒÜ¸qÃÅÅEt ­±`Á‚åË—Š :(`hˆˆˆ¶mÛŠN¡5ºvíÚ¬Y³ŸþYtÕÁtß 0 Zˆââb33³û÷šŠÎ¢5‚ƒƒ§L™ÃÕ‰0 ºïöíÛ 4 }_IïÞ½­¬¬~ùåÑA¼2 š‚XÕ³`Á‚Å‹‹àÕPÀÐpõôëׯN:‡À«¡€¡)nܸáìì,:…VúüóÏ—,YÂÄ@»PÀÐlW›¯¯¯R© À+`ºo˜-¿¼¼¼úõëÿù矢³h¥#GŽÌŸ??<<¼F þªÔ‰YÐÐqÑÑÑŽŽŽ´oµùúúÖ©S‡éЀ¡€¡Øÿüú-Zôü£¨¨HtUBC#PÀ¯¯OŸ>7Þ³gè ª„†F €ÕbÉ’% .äìЀV €¡¢¢¢¸ ÃëëÚµ« —H´Ó}+À,h™=zôÈÁÁ!++Kt]2vìØ›7oŠÎèfAC—qB5êÒ¥‹““Ó¶mÛDð0ÄãXêµdÉ’%K–äå剠20Ä‹ŠŠ¢€Õ¨]»v;vüî»ïDP â± Zí¾úê«+Väääˆà…(`ˆM«—‹‹K¯^½6mÚ$:€bºo˜-§””77·´´4ÑAtÍÍ›7»uëgff&:  Å„Í‚ÎÌÌÜ´i“ŸŸŸ‰‰‰‰‰‰ŸŸß¦M›233¥}Ãþg‰´jÕjðàÁß|óè *ö¾wïÞ¤I“¬­­zöìyôèÑ””””””£GöèÑc÷îÝÖÖÖ'N¼wïžœq¡{(`é,Z´è‡~HMM@^¸emdddgg·fÍš~ýúUxƒãÇòÉ'‰‰‰º÷mvAËiâĉ;v|ÿý÷EÑMŸ|òIAAÁ† D´•€]УF }Qû*Šþýû‡††Ž5JŠXÐ| XRóçÏß³gOBB‚è ÊcS¯lËF¥R™››'%%™››‹Î¢³/^÷¯ýKt@+q*J覤¤$SSSÚWR³fÍ ŠˆˆÀÿxy1"==½Ü¬¬¬wÞyGšHÐ#\IuêÔY°`ÁüùóEð?^^ÀvvvmÛ¶ýé§ŸJ—üþûïíÚµ³··—2ôS å1yò丸¸   ÑAü×Ë xåÊ•ÇÿöÛo}}}ãââ¦OŸ¾dÉ’£G.Y²DÒdwïÞõóó355555õóóKNN®äÆ×®]›6mš¹¹¹R©”4Ô‹³@ËÃÀÀ`éÒ¥³gÏ...Àÿ©Ò1`ww÷Ë—/÷ìÙ³wïÞo¾ùæéÓ§[·n-i¬'OžôîÝÛÃÃ#)))))ÉÃÃÃÛÛ;77÷E·÷÷÷oذaHHˆ¤© vlËfĈÆÆÆ{öìÀÿy£ê7U*•fffõë×—a+óÇôòòZ°`AÉ?,X³uëÖéÓ§Wxû¨¨(©#A튊Šnݺ%õs(µjÕª1cÆøùùÕªUKtUÛ óôôŒŠŠ:yòä©S§(õ× >5t çÀ’Ÿ“““ŸŸßâÅ‹EP…Þ»w¯¥¥e¹…?ÿü³4‘ä³páBeEDçÒÑÑѰü-Z´{÷nIÿ€Pz&, ‹rÛ»=*·Müú.\¨ªˆzGÁ‹DGG·iÓFt ½Ó AƒO?ýtîܹ¢ƒúî…š9sfddäÉ“'EôÚ xÏž=:t¨äÔ9¿ÿþ{‡$úZ¡¯¯ï®]»Ê.Ùµk×àÁƒ¥ B$$$X[[‹¢ —.]úé§Ÿr^@ ð­[·<==Ø£G-[¶ÄÆÆæäääääÄÄÄlÞ¼¹[·nƒ òòò’èHÒ¤I“.\¸ðõ×_geeeee-]ºôâÅ‹'N,½GjµûŸÅ9r¤‘‘—HzÉU–222N:–‘‘¡P(6lXr^ªÑ£G??9Kîܹ3sæÌ’½dÞÞÞk×®µµµýoîÿ½>T…}\í£¹\ŽP_ýuNNβeËDÑ_×®]óõõ‰‰133Ð\Ò5MS XcÇŽíÓ§O¹Ó­@fï½÷^ýúõW¬X!: ¹¸0t » 5Á²eËvìØqóæMÑA}T¥Ž7nœµµµµµõ¸qãnß¾-u2è°âââ[·n999‰¢ï6l8oÞ¼>úHt@½¼€###»víêèèxîܹÇŸ;wÎÁÁ¡sçÎ\ÿÕ–˜˜Ø Aƒ:uêˆÅôéÓSRRŽ=*: w^¾k»_¿~,÷7òºuëþóŸÿ?~\ÊlÂp XjGŽÙ¼yó±cÇDB¡Pœ8qâ£>ŠŒŒä*IÀóD>wîÜÈ‘#Ë-5jÔÙ³g¥}Àe4Jß¾}W­Z%: _^^À/ú£ØÈÈHÝa /bbb¸ °FY·nÝÚµkEôÈË xøðáûöí+·pÄ\½ IDATïÞ½~~~ÒD‚îc ´¦±±±™1cÆ'Ÿ|": G^¾kûéÓ§ï¿ÿ~ëÖ­ß}÷]kkëìÞ½;&&fëÖ­ºzAŽKJ¥R™™™%''sþRPPжmÛ5kÖ 0@t@ƒˆ<GUNú¨cuEK*))©k×®ÉÉÉ¢ƒ ¼ß~ûíƒ>ˆŒŒ¬]»¶è,€¦9 «Â öqý>T€5VŸ>}Ú¶m»|ùrÑA½À™° 7¦@k²7nÙ²…où2 €!7¶€5YãÆ.\øÞ{ïq¥B@j0äÆh 7yòdƒ~øAt@Ç1Û¨LÂ’”……EBBB½zõDÁ ݼy³[·n×®]kÚ´©è,€`\ :âþýûµkצ}5\«V­¦M›ÆEIQÀûŸµÅgŸ}wàÀÑAECV°¶044ܶmÛôéÓ³²²Dgt YÅÄÄPÀÚÂÓÓsøðáŸ~ú©è €n¢€!+¶€µËòåËOŸ>ýûï¿‹è ²ŠŽŽæKÀZÄÄÄdãÆS¦LÉÍÍÐ50ä“––¦T*6l(:^Aÿþý»téòÙgŸ‰è òá$”ZjÆ JNNÐn0dÂhÑ®]»>ø`Ò¤I©^ ™°¬K>ûì³ìììõë׋h1fU€IXRhÒ¤ÉÅ‹›5k&:ÔãöíÛ^^^¿ýö››››è,€„˜„íöçŸ>yò¤iÓ¦¢ƒ@mZ´h±zõê1cÆp z(`È¡äÀJ¥Rt¨“¿¿¿»»; ª‡†˜¥«6oÞ|âĉÀÀ@ÑAíCC| XW™ššîÞ½{òäÉwïÞÐ20ä@ë0//¯Ù³g1¢  @t@›PÀ¬ÛfÍšemm½`ÁÑAmBCrÙÙÙ?æ H:L©Tnß¾ýÀ‡Ð0$Õ¦M¦@ë6 ‹€€€)S¦$&&ŠÎh ’cÿ³žðòòúì³Ï† Æ7ƒª €!9 XLŸ>ÝÍÍíý÷ßÐ0$Gë•-[¶DGG÷Ýw¢ƒšî Ñ û¸ ƒ^122Ú·o_—.]ÜÜܼ¼¼DÇ4[ÀVVVÖÓ§O9 ´^qppضmÛˆ#0$É`TݲeË:uê4xðà§OŸŠÎÈ„†$"""Ú¶m+:´†R©Ü¸q£‹‹K¿~ýž €!‰¨¨(vAãU)•ÊÍ›7ÛÙÙ 6,//Ot@ZL÷­³ _Snnnƒ ²³³ßxƒsâ•?>%%%00‹C8fAC›DEEµjÕŠöEõÔ¬Ysçζ¶¶ýúõ{üø±è8€T(`¨€ñšjÔ¨±uëVwwwooïÌÌLÑqIPÀP?NB‰×§T*×­[×¥K—>}údddˆŽ¨ õã;HP ¥R¹víÚ#FtïÞýîÝ»¢ãjÆQ:¨_dd$ u™;wn:u:wî|üøqm@—PÀP³ôôôÂÂÂÆ‹ÝñÁ˜ššöíÛ÷СC;vPvAC͘)øûûÿðà :~ü¸è,€zPÀP³ððpö?C ¾¾¾ÿûßwíÚ%:  삆š]¿~½gÏž¢S@7yyy:ujÀ€÷ïߟ?¾è8Àka jvýúu777Ñ) ³œœœBBB80qâÄgÏž‰ŽTç\¬§¢¬¶¿þúËÒÒ233³V­Z¢³@—=}útìØ±999¿üò‹¹¹¹è8ÐeœŠÚáÆŽŽŽ´/¤fbbràÀ¶mÛvîÜ9!!At :(`¨ûŸ!›5j¬Y³fÆŒ]»v=uê”è8À+£€¡Naaaîîî¢S@LžøwïÞ}÷ÝwëÕ«·cÇKKKÑq }8%4]XX›¿Ð@666§NjÕª•‡‡'Ì‚F¡€¡ÌÀ‚Æ200øæ›o¶oß>nܸ3fp²h êÁ ,h8ooï°°°»wïvêÔ)&&Ft€†š\»vÍÃÃCt  2õë×?xðà”)Szôè±fÍšââbщ ×˜mT&a½ª¬¬¬æÍ›geeÕ¨ÁŸtЉ‰‰ãÇW(;vìhÑ¢…è8ÐhL‚F õðð }¡-ìììN:5dÈ//¯õë׳) !øÄ„\ºtÉÓÓSt àÔ¨QcÖ¬Y/^ ìÚµ+G…!? jÚ¾}{Ñ)€WÖ¢E‹   ±cÇöèÑcñâÅùùù¢APÀPƒË—/³ -¥T*§M›výúõøøx—'NˆN}Ál£ 0 ë•Ü»w¯}ûö©©©¢ƒ¯ëèÑ£}ô‘——×êÕ«7n,:4“° ¹._¾Ü±cGÑ)58p`TTT‹-\]]×­[WTT$:tŒ×uåÊ•:ˆN¨‡‘‘Ñ’%KÎ;wøðáöíÛŸ?^t"è, ¯‹-`èžV­ZÍ›7o̘1ï¼óNrr²èDÐA0^KqqñÕ«W™ 4jÔ¨˜˜˜’ 9,Z´(77Wt"è ¯åæÍ› 4à*oÐUÆÆÆ .¼zõêÍ›7œœþõ¯qÖ¨ Œ×Â`蛀€€}ûömÙ²ÅÓÓ388Xt"è ¯åÊ•+†žðòò ™={ö”)Súõë&:´Œ×rùòe¶€¡?”JåÈ‘#£¢¢† âëëûÎ;ïÄÅʼnmE£ú ¢¢¢ÜÝÝEde``0uêÔ[·n¹ººvíÚuÒ¤IL“F5PÀ¨¾ëׯ;::‹`bb2oÞ¼›7o6jÔÈÝÝ}êÔ©III¢CA›PÀ¨¾óçÏwêÔIt @$ssó¯¾ú*66Ö¢]»v“&Mº}û¶èPÐ0ªïüùóݺu¯~ýú_ýõ­[·7nìåå5nܸèèhÑ¡ é(`T“J¥¢€²êÕ«·xñâøøxgggooïáÇÿñÇ¢CAsQÀ¨¦ØØØ:uê4mÚTt@³˜ššÎ;÷öíÛ>>>þþþݺu äôxŒj:wÀ‹M›6íæÍ›3fÌøúë¯[·nýÝwßq2K”E£š(`à¥jÖ¬ùöÛo_ºtiëÖ­'Nœ°³³ûâ‹/RRRDç‚F €QMçÎëÚµ«è€vèÖ­ÛÁƒÏŸ?Ÿ™™éâââïï*:£€QwïÞÍËËkÕª•è €6qttܸqãíÛ·ÝÜÜFŽÙ©S§Ý»wççç‹Î1(`TGÉæ¯R©Ð>fffŸ|òI\\ܼyóvîÜÙ¼yó ðía=D£:øðšjÖ¬9dÈß~ûíôéÓýõW§N|||öìÙñþPªT*Ñ4ŽRÉÃò...;wîl×®è €Ž(((8tèÐÖ­[¯_¿þî»ïNš4ÉÙÙYt((R6MS ¸r=jÑ¢EfffÍš5EgtÍ;w¶oß¾cÇŽ&MšŒ?~ôèÑæææ¢Cé5é]Ðxe%§€¦})4oÞ|ñâÅwîÜùòË/O:egg÷Î;ï;v¬°°Pt4¨ŒWÆ7€©Õ¬Y³ÿþ{÷î½}ûv÷îÝ—.]Ú´iÓ?þøÊ•+¢£AmØ×ZvAW®]»vëׯïÒ¥‹è €IHHøé§Ÿ~þùçÂÂÂQ£F=úÍ7ßJ/p XVp%RRR\\\ÒÒÒÞxã ÑY}¶gÏž}ûö1bĈ...¢Cé2 XVp%vìØqâĉ={öˆè»+W®ìß¿ÿþý†††Ã‡>|xûöíùv¾ÚQÀ²¢€+1räÈþíoÀÿ¹zõê¿ÿýïƒ>yòdèСÆ ëÞ½;Ó$Õ…–ü"………VVVQQQ5@y±±±ü÷¿ÿ}çÎ__ßAƒõíÛ×ÄÄDt.íFËŠ~‘sçÎÍœ9““È.99ùðáÿþúëÅ‹;wî<`À€´hÑBt.­DËŠ~‘Ï>û¬fÍš_}õ•è ª$''çĉÇ?v옹¹yIwëÖÍÐÐPt4­AËŠ~77·Í›7wîÜYt¯F¥R]»víøñãG‰‰éÕ«Wß¾}ûôéÃfñKQÀ²¢€+ôàÁƒ¶mÛ¦¥¥1¹Ðj>üý÷ßûí·ß~ûÍØØØÛÛ»W¯^½zõjذ¡èhšˆ–\¡mÛ¶sæÌ™3g.]ºdoo_RÆ;wÖÃO XVðó‚‚‚>ÿüó‹/Š@VÏž= ={öìÙ³gCBB5jÔ¹sçÎ;{yyµnÝZf„PÀ²¢€Ÿ7iÒ$''§O>ùDtÂGEE?þâÅ‹—.]JIIiß¾½———§§§§§§•••耒 €eE—SPP`mm}ýúõ¦M›ŠÎ@Sdee•4q ssó’2îØ±£›››‘‘‘è€êAËŠ.çÈ‘#+W®<{ö¬è 4”J¥ºuëViGGG;88´k×®C‡íÚµsuu­]»¶èŒÕDËŠ.gìØ±;wž6mšè ´CAAAddäÕ«W¯^½Û²eK·2ÌÌÌDg¬* XVpY¹¹¹Mš4¹yó¦Î~ ùùù‘‘‘aaaׯ_¿~ýzDDDƒ Êö±èŒ/DËŠ.kÿþý[·n=qâ„è tDqqq||üõ2òóóÛ¶mëâââââòæ›o:;;kÎ&2,+ ¸,???__ß &ˆ@g¥¥¥EFFÞ¸q#***"""::ÚÒÒÒÙÙÙÙÙ¹U«VmÚ´qrr²°°’–\êñãÇ666wîÜÑóSá“J¥JLL¼qãFLLLlllttôÍ›7kÕªÕºuk'''''§’ÿ±±±Q*•R‡¡€eE—Úµk×E ïRRRbccoÞ¼›™™YÚÇŽŽŽŽŽŽuëÖU︰¬(àRÞÞÞ“'O9r¤è P^NNNlllLLLLLL|||\\\\\œ©©iË–-Z´haggggg× AƒjBËŠ.1`À€ÄÄDÑY JîÝ»Ÿ˜˜˜˜˜xûöí¢¢¢’íc‡’JnÑ¢E“&Mªr*M XVp‰¿ÿýŽóçÏ^KfffÉöqBBÂíÛ·KŠ9##£Y³fvvv¶¶¶Íš5+ù¯]³fÍÞxãÒߥ€eE+Š´´´Ö­[ÇÅÅYZZŠÎê—ŸŸŸ”””˜˜˜”””œœ|÷îݤ¤¤;w¦Z[[ÛÚÚÚØØØÚÚ~õÕW5Â/¿ ôÒwß}7räHÚ€®ªU«VË–-[¶lYnù³gÏJÊ899ùÎ;Ò`S¯lçççÛÙÙöp"üŸS§N…††îܹStÐ 0 …"55uüøñ›7o622ô» ¡(((9rä¤I“(: è =mT9}›„5iÒ¤ÌÌÌ_~ùE©TŠÎšEºF`´¾[½zõÕ«WÏŸ?Oû€œ(`ý¥R©V¬X±yóæóçÏ‹ŽúEGŽß½{×ÏÏÏÔÔÔÔÔÔÏÏ/99Yt"M—ŸŸ?a„}ûö?ÞÆÆFtÐ;ºPÀOž<éÝ»·‡‡GRRRRR’‡‡‡··wnn®è\šëîݻݻwöìYHHí BèBÿøã^^^ ,°°°°°°X°`AÇŽ·nÝ*:—&ÊÊÊš;w®‡‡‡ŸŸßO?ýÄ—Ž@](àÇ7®ì’qãÆŠÊ£™îܹ³téÒV­ZýùçŸsæÌaÖ¤ “°¢¢¢\]]Ë.iÛ¶mtt´¨<šãÑ£G‘‘‘çÏŸ?xð`rròСCÏ;תU+ѹ:ñ=`CCçOŸ”.yöìY:uòóó«·BMþpvvvNNΓ'Ož>}ªP(òóósss‹‹‹³³³sss³³³}úH1n‡6nÜ›ŸŸÿèÑ£'N¸¹¹}ñÅjH¡PôêÕëüùóOŸ>½|ù²««ë?þ¨öQT*U›6m¾üòË7nHñpåääØÛÛ/Y²$33333sÉ’%ŽŽŽOŸ>Uû@’Þ‹Rò<)²½ÆJIú–)!χÀäÉ“'NœŸŸŸÚ¿U©Tß~ûí»ï¾«Þu~øá‡žžžgΜyüøqvvöéÓ§Û·oÿᇪw•JT¯^½íÛ·§§§§§§oÛ¶­S§Nýõ×믹’w¥DŸ pd.àÕ«WûûûË6n||¼¹¹¹ÚWûé§Ÿ—þ3<<ÜÞÞ^í£”%ÅõfÍš1cÆ”]2f̘uëÖ©} R’>éò?)%$z•’á-#Û188Ø××WêQžWTTÔ¢E‹Ë—/«wµuëÖMLL,»$11±nݺêE¥RuïÞ}ÇŽe—lÛ¶mÓ¦Mjâùg_¢O ¸rpXX˜““ÓãÇe7))ÉÒÒRêQž>}jhh(éR<\½zõ:qâDÙ%'NœèÝ»·Ú*%ç‹M†'¥„¤¯1yÞ22ÊóÖ®];cÆ µ¯öƒ>=zô¹sçrrrrrrΞ=;räÈ>úHíU¨d¿±t¤údxÍ×Iƒ>{öl^^^rrò·ß~Û°að°0)š2eÊâÅ‹Kÿ)ÝÓQöë­· %¨Ä£GZµjuöìYIG‘âá200((((»¤  @Ò­FÙÞƒR?)ò¼Æd{ËÈð!P«V-KK˲Ç2---Ï;§ÞQʉˆˆhÖ¬Ù³gÏÔ¾æâââ¡C‡–} :´ìuéÖ­ÛÎ;Ë.Ù¾}»zߤϿ®$úd €_nóæÍ}ûöUûj:Ô­[·²ŸSR§¥¥X[[/Z´HºQRSS»wï,Ý%(ઓíI‘ô5&ÿ[¦”ÏËìÙ³§zG)ç½÷Þ[¶l™k^±b…ÍÁƒK¦)P)*D½OJU¨å5ö<)Þ2U¤–r5jôü±LcccõŽRVFFF½zõ=z$ÅÊ›7o~êÔ©²KN:egg'ÅX§OŸîÕ«—‰‰‰‘‘Q—.]öîݫޞ]IôÉ ïÇ€Ë=è/º%$$4oÞ¼Ü _ó‡U¹;íÛ·OOO¯ö• ôàÁƒþýû¯Y³ÆÛÛû5×_É(’rvv/»$""¢M›6òŒ.µ?)U¡–רó¤xËT‘¯@gggµ¯³rßÿýÛo¿]¯^=)V~ÿþýöíÛ—]Ò¾}ûû÷ïK1V=‚ƒƒŸô½€«bß¾}]ºtQûjŸÿk¨t¡ÚÇ*ëÂ… NNNj_mzzz¿~ý–/_Þ»woµ¯\6¾¾¾»ví*»d×®]ƒ•ç5‰zR$z‰zË(¤ù6lرcÇÊ.9räH‡Ô;J©gÏžmÙ²EŠéW%lll®^½ZvÉåË—›5k&ÑpemÞ¼yÒ¤I’!Õ'CÕ6”õHïÞ½÷ïߟ’’RPPpûöí¥K—Ö¯_ÿêÕ«2 -ÅÓѧOŸC‡¥¥¥Ü»woûöíMš49vì˜ÚrwwÿùçŸÕ¾ÚJHñp=~üØÎÎnéÒ¥¥_····òä‰Ú*%é{Pž'E¶×Øó$zôäùÈËËëܹs¹c™Ò§xë­·$Z¹J¥Ú°aƒ­­í¯¿þB"ó‹IDATš••Ur ¸iÓ¦7n”b¬^»v­   !!áý÷ߟ2eŠz×ÿüëJ¢O ¸¼“'O6ÌÒÒò7ÞhÒ¤‰¿¿ll¬¼M´×-ÛWIEND®B`‚gsl/doc/images/fit-exp.png0000664000175000017500000007016014057135461014025 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœìÝy|õý?ðÏììn6ÉæØ„œ@$œ!rEE$Á­JE¨lkëQ{‹ÚökÅ>í÷[Ûª­ZÚÖ­¢XEE”  !I8d rl6»I6{Íï “aw>“Ífwv6ûz>ø#3;;óÉ›dßùÜ Çq”¥‰tb0@ D0@ D0@ D0@ D0@ D0@ D@è°Çãyî¹çæÌ™“ššš’’2{öìçž{Îãñ„üAÑKò;þüç?ß·oßSO=5kÖ,Žã8ðàƒÖÖÖ>óÌ3!@”bB¾prrruuõ¸qã„3§Nºä’KºººBû €èú&hƒÁà2>>>äˆ^¡OÀ?þñW®\ùÅ_Øl6›Í¶k×®+Vüä'? ùƒ¢j^¯÷æ›o?âæ›oöz½òïbY6RòDÉ ý ¬?ÿùÏß|óÍ{ï½·páBBÈÎ;ö³Ÿ=ùä“¿úÕ¯dÞåñx¸P÷F ú~ú‘‘‘àÐ 24ˆ Ã0áºsÈ#>~üø—_~ùꫯÎ|þùçßÿþ÷ëëëåÊÿ{ D†‘‘àÐ 24ˆ Mø"úûêõúŽŽ£Ñ(œ±Ûíééé}}}råÀÿ="CƒÈÈ@phD†&|‘ ý ¬¼¼¼ýû÷‹ÏìÝ»wìØ±!@ô }þùϾfÍš?ü°³³Ób±lÚ´iÍš5¿øÅ/Bþ €è–šõÆŸ|òÉÚÚZBÈäÉ“ùË_®X±br õƒ‘¡Add 84ˆ "CM}ÀÁÁÿ= "CƒÈÈ@phD†&šú€!´¾÷½ïEº*…ÈÈ@phDFyjù“|€ ¡ 0¢ D°ÚY­ÖHA¥M,D†¹ ...++káÂ…?þø™3g"].ð…¬v‘.‚J!22š‰ ¿ÖOOÏÑ£GÿøÇ?Úl¶Y³fmܸ1÷écs“sk¥ÍÜäÎMœn®ºÞñyUwu½ÃéVlHÊjú„AX!!ùqzðàÁÒÒÒÏ?ÿ¼¨¨(ˆ·ÉÖJ[y¥½¬Ä¸´$)¸;4´¸^Ûf±Ø=üaª‘]SfÊËÔE¤<„Á›9sæ/~ñ‹'Ÿ|R8söìÙx ))iüøñ=ôÃá ª¿B#¶üÅaâprëEÙ—Òi÷¬/·8œ#­’¦–z'jÀ!Aû8=zôè7ÞXWWÇŽ7î±Ç»í¶ÛΟ?ÿðÃO˜0áÿ÷io§],‰¯qäê rõA”¿Õê>xB"ÁÏœhÈL f ]s“ÓÜäTa X-i ˜¦¢¢bþüù‘.…!22šXˆ íãÔáp¤¥¥õôôø¿d±XJJJÌf³ÌÛ%/–Ä'à¡<¼€©€B‚öqÚÓÓ“‘‘ÑÝÝMq8O<ñÄo¼ÑØØØÛÛKaYÖívK¾]æbI¨(˜o¢Î©S§rssù¯yä‘ÚÚÚ7ß|sÒ¤I‰‰‰‡#>>žöÆ!],(ÈÕ—ðN®á\›¸˜’jdo»*Õ f„¶:‡@$`€±iÓ¦«¯¾šÿzãÆ_ýõ˜1cøÃúúz™7éâá3è™Õe¦WË-r°ÉÈÞYj .ûª°ÚÕÔÔGºj„ÈÈ@phb62UUUO?ýôÎ;ùÃÞÞ^ƒÁ ¼úòË/ _ §Ó©×´Ë\,©07Ž”Âܸ K›—©{xeFmc_‡Í“–ÄNÉ‹ÓkƒÏ¾Ã/O˜ «]^^^¤‹ RˆŒ ‡&¦"ãñxºººŽ9²iÓ¦W_}õù矟:u*ÿÒu×]÷óŸÿü/ù‹F£Y¿~ý©S§„wlÙ²åÆodYvЋ%Ýû+¦×2—L0 ~]BRžpÀ<`µKII‰tT ‘‘àÐÄHdøY¼ “'Oþõ¯m48°|ùrá‚gžy†RTT4yòä#GŽˆ+µùË_z衸¸8a°ÌÅ0j{ŒQРBX `DAV»ŠŠŠHA¥ "ê¡–†_4A€ ¡ `DAˆ$`µC— "#Á¡Ad@=ÔÒóŠ>`€À1 ³bÅŠ·ÞzËÿ¥+Vlܸ1èOÔ@>cê}Àp‘}ûöù/JuêÔ©Ó§OG¢80dHÀQéÞ{ï}úé§}N>õÔS÷Ýw_DÊC¥–f„˜jЫÕ#‹ç "#Á¡1‘a¦££cêÔ©µµµ©©©üÉÎÎÎ9sæ9rÄ`0Ÿ¨~øáþð‡ššBHqqñ£>zà 7÷9tèÐÚµkwíÚÛm·ýõ¯MLLÞ»sçεk×VWWggg?úè£?øÁ„§Ëb{OžàêëBþ]™P¨?1È÷b?à˜ÕØØ››· ‘‘àÐŒ¤È˜L¦[n¹åÅ_|衇ø3/¼ðÂÊ•+ãâ¶ýÙ³gÏ]wÝõÌ3Ï”––rW^^~çwnݺuîܹ„³Ù¼dÉ’_ÿú×üòÎo¾ùæÝwß-¼÷رcßþö·ÿþ÷¿ßpà µµµ+W®,((64”ÇÕ×y¶Âov˜Xr 6‡Zꨎÿ̬­­---­¯¯×ét.—kâĉcÆŒ>Qo¹å–ÒÒÒûï¿_xã³Ï>»cÇŽÿþ÷¿„;ï¼sÒ¤I>ú¨ðêc=öûßÿžïêÕ«g̘ñ«_ýŠéý÷ßñÅ?úè#À'¶ç³Õ•€_Ç^s]pïÅ ,ð5eÊ”éÓ§oذòæ›oÎ;w̘1â ¾ùæ›o¼Q|榛nÚ¿?ÿõ¶mÛî¸ãñ««W¯¾Þ½{÷M7Ý$.X° ªª*äßB,SK½5`€À Ÿ™Ÿ|òÉ#`µ«¨¨˜?~¤K¡FˆŒ ‡fäEféÒ¥¿üå/~øa¯×Ëg_±¬¬¬ÖÖÖ±cÇ gZ[[³³³ù¯GÕÔÔ4aÂáÕ¦¦&áëäääêêꜜœ J¥?Q…}®jƒ&hµa!„ÈÈ@phF^d†ùéOúÄO<ðÀþ¯Îž=ûÃ?ŸùàƒfÏžÍ]ZZúÆoˆ_}ýõ×…¯-ZôþûÈÐ5`€èvï½÷Þ{ï½’/­]»vÙ²e©©©¥¥¥„mÛ¶ýîw¿ûøãþáQ=öØüùóSRRV¬XAyë­·Ž?.¼÷±Ç+--_¶l™Á`سgÏ“O>É‚PKÏ+ú€'ÿ™)~uÓ¦Müã:D™>}úÿüÏÿˆ‡VUWW¯]»¶¢¢Â`0,_¾üé§ŸÏ>xðào~󛊊 ·Û=oÞ¼ßþö·×\sÍ OaÂ÷ͪ%ˆ1õß9$555#fÚbh!22D† ÓbW^^^¤‹ RˆŒ ‡‘õ}bgÆÿ¤N§óÎîÿ.Ô€@m¢i’AŸ~úé}ûöw7s“³®©Ïçdan\A®>¸¨AØGA{½Þgžy†_¨%uM}å•vß³% ¢ZØû€7oÞœ••Å/ü„Âܸ²#Ÿn rõe%ƲcanÜ o1***"]•Bdd 84ˆ "£¼°÷¼.^¼øž{î¹ýöÛ)‡l#ûÖJ[y¥½¬Ä¸´$)Ô ŠÖQÐ555uuuË—/äbFʺuëÄ—ÕÔÔX­VáPü’øk«ÕÊo~éÿî€;à¸î€;øßaݺu’iˆ„MxkÀwß}waaá#<2x9Põ‰Êðùóçß{ï½ýèGá{D,@Ç "#Á¡Adhå…±ü‡?ü¡±±ñ…^¨¨€úDÓ<`žËåzþùçËËËÃt€¨®&èwÞygÚ´iÓ¦M Óý¢Z¸ðßþö·ŸýìgaºyLâ1DF‚CƒÈÐ 2Ê WÞ³gÏ 7ܦ›Ç”ÆÆÆHA¥ "CƒÈ(O-[ `¨PTNC$`€@V;ÌŽ§Add 84ˆ "£<ôP¡`DAˆ%à­•6þŸ¹É鲨ˆx§-Cdd 84ˆ "£¼p­=$|Æ-¯´÷—‚\}$ ¤&yyy‘.‚J!22D†‘Qž*p]S!¤ WÏçÝÂܸH—HERRR"]•Bdd 84ˆ "£à‚\ýÒ’¤¥%I|ZåÅU[É |®ajjj"]•Bdd 84ˆ "£à;vœ={öÃ?äçÌ™³eËÉ+3RYÚù3mÞ,J¡c†‘‘àÐ 24ˆŒòB_~ñÅxà@®,ȉ3}spª‘-ÈÁ "áBŸ€¿úê+»Ý¾pá„„„¤¤¤%K–|ùå—’WôÌê2Sª(›ŒìêR“AÏ„¼TªúÜÜÜ|Ï=÷Üu×] õõõßùÎw¾õ­oÑzò2u¯Ì˜Q` „ÿæÃÇ0n\¶ža˜Çœòøã¯[·NüÞšš«Õ*666J~mµZÅ ‹ËÜAü’økõÜA¸2ª¿‹pÜÁ'>Qú]„é’?6Q÷]„ãV«5âePç¶mÛñ2DöëÖ­c¤° ý>Ãz½þÅ_¼ë®»„3/½ôÒk¯½¶cÇÚ[¶VÚ®›üɾ®¥%I™òJ{Y‰‘?ãsà™‘¡¦¦¦¸¸8Ò¥P#DF‚CƒÈÐ 24 úDÉ ý ¬ôôôeË–‰ÏÜxã?ùÉO‚»¿×‚¹ÉɽµÒFbl™IüJÐ 22D†‘Q^èpQQQï&Þk_í™Â/þ ½BŸ€o¹å–-[¶¬^½Z8³yóæ¹sçw7a¯Ÿ“’[D‹Ð'àüà×\s !äúë¯'„lÞ¼yíÚµ7n înÂîF>b'WTT`~ž$DF‚CƒÈÐ 2Ê ý(hƒÁðÎ;ï”——Oš4i̘1/¾øâ[o½µhÑ¢?(FàW‚‘‘àÐ 24ˆŒò²RNNÎ믿Ž;Œ ‘ß8ÃÜB âT”€Y·“³Z½¬¡Åõƶ*³ƒRevüiC[c«+ü¥‹ñsCdd 84ˆ "£\ÚVÁÍnô @QA&¤®è:áëtg{IwµøUq—¶…ð®ªîØé€@ Øž’->,ëÜeà.jR*¾’[k4Äîð ‡#¬W˜¶‘ 22D†‘Qž*0Ï£íïèMôv_ÕµWü’PñõßB81^ãõ#©W³ãi "CƒÈ(OE øtáUÂ×WÙö¤xºø¯SlAÎÀöGâ-„g^’(y7Zo1€¨(7N¼ŠIJæ¿ÖqîRë„“‘]]j2è/ÚY¯e²LZBH–I›&=›Ö[  *JÀ­ž½æzápvw̎͢‡VfägédÞ%Ù+ìSiŽj蘡Add 84ˆ "£<%`BˆfÎ<&+‡ÿš!ÜÜÆOõZFþ-þ½Â’•æè…ŽDF‚CƒÈÐ 2ÊSW& {íÍ‘©Íì=:øêh>½ÂƒVš"Ne ˜ͤ©š‰S„CÏ–÷ˆÛ=è»Ä½ÂƒVš"Nu ˜Â^+§éoRæ:Î{¾ÜÙòD–ÕjtT ‘‘àÐ 24ˆŒòÔ˜€™Ìì¦qs…CÏçå\Wìþd466Fº*…ÈÈ@phDFyjLÀ„“S—tkâûœ}žò"ZœH*..ŽtT ‘‘àÐ 24ˆŒòT”€ÍMέ•¶­•6s“Ó¥ÿ4eð’÷`%×PÁ²„–*pan!ÄÜä,¯´—WÚëšú!{gÚSú§$Žsoþ/áFÈòΪHÀ¹zBHY‰‘ÿÇçc/£91ãFÂôiæšN{¿ù:’¥ŒÌާAdd 84ˆ "£<éu#biÉÀ®À|%¸3=_S4Ó{èÒ³õCMÑ bˆ—~ÿ…Ùñ4ˆŒ ‡‘¡Ad”§Š° öºo]ÿª\·Í³ckdËjOÀLj{ÕáÐóÕN®õ\ËjOÀ„vÁ5Lª©ÿÀãq°1¦FcÕÔ ¾glBdd 84ˆ "£¼(HÀD§g¯¿U8âNÖy«*#X…åååEº*…ÈÈ@phDFyÑ€ ÑÍÐL.=oÒº,’RRR"]•Bdd 84ˆ "£¼èHÀ„vÙr¢½0Ën›pt[dË0Q“€™´Qì‚ÑX¹õ_u6E°<Ã5 ˜Â.,eFeò_3w“¥œ‰ÑX˜OƒÈÈ@phDFyÑ”€‰VË.[.qžËiØÁâ(³ãi "CƒÈ(OE+aâdb!gZƹ#üá¸êOväLuÆ%ò«WD‹¨ªR×Ô÷ofQ£çã<½q;7 û7D‹(KÀ…¹q—]–{fÚ"áLIOÍíù-#¸ŒŽDF‚CƒÈÐ 2Êc8uŒcb˜‹J²µÒV^i/+1Šwhàñ¸žû3×Ò? º71mß5?=Þ™›œ¹z~o¥ÂÜ8þ € ù¤§PÞYU ØÜää“ÍMN!›J¦RîLƒë…§ˆ×ËîJž÷qÊ"ñÔä¡$bHê±&| X]ƒ°êšúÊ+íÂ!Ÿ†I ñO{̘|ö²«<_í䯲íM˜=ÇfÊ.f£´OIúI• êJÀ…¹q¤DꤶìFoí!ÎÒNa8ïÜc›t÷=HX6„%WÄeJVV«KÄIBdd 84ˆ "£¼° ÂbüøÆ‚\ýÒ’$ŸÔJ§^ÏÞt›pÄ;ëÙ½sø…—„´PªˆT•hT@dd 84ˆ "£¼p‚æ.¦§h&MÓ\2G8ô|¶…ë8¦gEJqqq¤‹ RˆŒ ‡‘¡Ad”eÓü±Ën% ‰ý.§çý·cj·`ˆRQŸ€™Ä$íu7 ‡ÞºZïþ=,@ •€³³³u:]NNÎwÜQ[[¦§ð4³.ÕLÝoâ¬a}¢’0;ž‘‘àÐ 24ˆŒòÂ’€oºé¦7Úl¶}ûöÍ;wáÂ…ô]þC·†Y·nøÇ¢¦¦Æjµ ‡ý/1 {óJ0þÙÑÛ÷ß×kjj|/“¹ƒß×V«U%wVHêï"w˜?~ÄË Ú;HþØDÝwŽ;ÌŸ??âePçÄ¢÷»ÎÖ­['™†HØ(±ÇóÏ?ÿþûïòÉ'råöLgÏW»<›ßµËïÐ̾l87$ƒ.È#]øâP¢øÖ[oU qƒw3¾P8tôîHjˆ€F‰¬Ðj— £]~Ñ_X+ÃÑëyÿ-%žf´6"@dd 84ˆ "£<%VÂzûí·¯¼òJĘÒÙÒ<½Ëzöا™5wÐ7ÒV~}‡.///ÒEP)DF‚CƒÈÐ 2Ê }¾æškî»ï¾ùóç§§§Ÿ9sæÍ7ß|ê©§¶nÝòIb/_è=\Å2ó‡îÍïè &1Ƀ¬¯F[ùY °8 "#Á¡Adhå…¾ ú·¿ýío¼1}úô„„„«®ºª¶¶¶¢¢böìÙ!4†ÑÞ²Šètý‡Ž^Ïoú¦Âܸ²cY‰QX{²¬Ä¨’0ŒH¡¯/^¼xñâÅ!¿màê©}SJ k¶ð‡Þ£5ÕïîLœw¹ÌJÎÂv [+müî ü°gÿvi€ˆú•°üÕ5õ½l)nÐÎŒûf󙺖i80;ž‘‘àÐ 24ˆŒòF`.Ì[27¹éêU.¶¿ÊkàúfW¿C¼ÞÈ,8Š à‘‘àÐ 24ˆŒòÔµpH\hON:Ôzí¤ƒð'ãÎôìþœ¿˜PÆ<Õ {€X0°àì¸K¹Ú#“uü¡gÛfMá&;WzÌ3ñöìts-7!¤Åâvº9½6Œ ’@¬MÐæ¿i×¹ô ý‡n·û׈Ç#9æÙgØsC‹ë‰ mUf!¤ÊìøÓ†¶ÆVW$¾tÌP!22D†‘QžkA"‹mò+9ß1ºqúžÿ'Ù«ËØÒeâ ÄK=ógÏ2~s¢·ÓîßÍdd\‘aУ C¢{-èÈjË™¦™1иìÙõ)×xRþ-v·Oö%„Xìó9ÌJ€Ðù ˜¢½ñÛLJjÿ×ë~{=qôÊ\ßÓ+ýÇN[§oVNL$`ŸÀ.ÿ.¹°­#giw¿÷¦Ìå ñÒíÌ©¬äù°ïg bˆŒ ‡‘¡Ad” ˜MÁ$öŠ«…CÞý{h§µ&£o®M5²9˜§ÔØØ¨üC£"#Á¡AdhåÅJ&„°e72¹c„C÷æwlm’WjY²ºÌ”*ÊÁ&#»ºÔ‘XÅÅÅÊ?4* 22D†‘Q^ %`¢ÕjW~Ä]¨Å:E{7h9·äµy™º‡WfÌ(0BfZ™‘Ÿ¥“¼ #y!Lz†ö†åîwßà]Í×r;ä[’ëµL–IKÉ2iO·ºh‹gÉìñ@K5`B!š9óij’®°ïKo®ô]üâYþÿØ. ³ãi "CƒÈ(/¶jÀ<íM·¹Or–vBÃqS¿y[0‰I–ÛŒº07Ž_¨ÒÜää÷+ä+¾ ,Òi "CƒÈ(/æjÀ„bˆ×Þ¾†hú¿w]ŸÝýö«ÄëõYüYü~‡à¥%IÂê•âC€¡ŠÉL3v{ÍõÂ!w²®ãƒÍ*YübAŒ&`B»°´#k¢p˜¸ï³Œ¶Âa§Ý³¾ÜâVÁÊW555‘.‚J!22D†‘Q^ì&`Â0GçÜÖÅûw{Çû©žµ`,vO‡]z’’’òòò"]•Bdd 84ˆ "£¼NÀ„8ã7¤‹cúƒàu¬:ÿ>Ë T{i‹B+)%EntX,Cdd 84ˆ "£¼˜NÀ„“qy'§-óœg˺v ‡´E¡†iÄ&`™!Í>&. “Ö`»Êöõ´Þã„T#›fŒÅiZ €‘™€Z\ƒiÈÐró*¯±¿B†ã–w|4^o[]jÒF`÷#_˜OƒÈÈ@phDFy#0;œÜúm‹} +ò®ñÚ IDAT—ÒìpÔƒ}3ô=×ßIØþ|›àuü¨û½ü4… . ³ãi "CƒÈ(o&`ó¹¾N»ïü!‹Ýc>׿l¤d†þWM wͲ74Ÿu¿¿!ü…€5p[§ôì]á<-C×»²uô@g°÷À¾ÑõÔ=ƒ†c&àŒTéž[á¼L†®}k‹6C83±fËø¾Ó¡*˜¹É¹µÒæÿÏÜä”y:fh "CƒÈ(oŽò-ȉ3YËÅuÜT#[Ó¿q‚L†>ãÒ¿–±üçç_Ѻ„ÆëùNû¦Nen%„ {ë~K%‰JˆÌšÒ蘡Add 84ˆ "£¼X6è™Õe¦Tã@–5ÙÕ¥&ƒ¾R/Ÿ¡}Þ%dèv­éHÉm„é¿Øè±_yä­Ïöu óÁÂܸ²cY‰QØÑ?T`K%P›˜€ !y™º‡WfÌ(0BfZ™‘Ÿ¥^4C·gOéš½Xx5¿ïì}úÃÏ”ØR #° š§×2Y&-!$ˤÕk}´â3ô†UfÇŒÃÊE©>׌ºùFwW“÷ÄQþptýžüâ|wæ_î&÷ð¿­˜¹É)Ycj·Z­X"N"#Á¡AdhåÌp ä34Ñh´+V3¦¹À®Íï¼ùReàûò=¾þÿ†ÚŽÝØØ8¤ëc"#Á¡AdhåÅn\B¢võ½$ÎÀ1Ï·NoLw[øCÿÅ=|„ªÇ·¸¸xð‹b"#Á¡Adhå!Ëa2³µßþ®0 +ÁëXݶÑàuð‡âÅ=ü¡ÇdŒØ>`1ÉîØk¢ši—°KnðlÛÌfºÛWu¼ÿjúm^FCø)Åù¡-,Ä„˜¨KvÇÞË.,µÎ'õÖ—Ywò_Ó¦‡fÇÓ 22D†‘Q^L$`¾;6ø¾X†I\qǹøáÄBÛž9Ý5âÅ=³ãi "CƒÈ(/¼ ¸¹¹yâĉ ámíùþ×áôÅõìw~d×% gn±l¹{Z»0u`H˜€9Ž[³fÍïÿûð=BIc&¤¿÷CÛßkÎrÞô-¯rç[#[*ˆRaLÀO=õTVVÖªU«Â÷…éóÇsG.Ôz{{ܯ<ÏuÛÂúКšš°Þ?z!22D†‘Q^¸FA"SºöÎÝ…<íõºß^Ϭ£]ßÖé›}åÏó0;ž‘‘àÐ 24ˆŒòBŸ€9?ÂÉ?+‚øZå-iÕ%«8Í…ê¾ÛÕ·þŤÎviñ+S’t´XÏÔ&&6cјçÜ£¦Vt|Èp!Dãt\òÕúí¦ïblhq½¶Íb±{!UfÇ©fWR¼ÆÖëßG™õ,@mbb-h|åuk¥M<éH8 x»ßƒ EûÆ\#¼¤wØîn۠鱯¿}yÖnÃ0)‰õ]“‘]]j’…ŽDF‚CƒÈÐ 2Ê ×஡ á03ñ¤^s“³ W_«çÇ9ó£‘ !v ¦‘J½¤õSÏ—;„+;’sŸI^é`|k·«ËR«ÌŽ*³cFaå¢ÔAç@…oôl‚öYƒOÃâ1 sãü×Ç Ã^µŠ½îfÎnóVUò‡i]M«û6¾’q»“щ/³Ø¼Y&-!$ˤEöˆY#0KæWñL_¾Nú3Œvùî»÷D-b|ßé;ο·~Ô·=Ì@SF*{¦ÍK¹ÄŠ˜€iùÕ©ÐcYíw·>ûlêùSü‰Ióªö÷Þu‹—hÈ…!WgÚ\ßÒjµb‰8IˆŒ ‡‘¡Ad”‹ƒ°ÂK§¯™wçY}¶p¢¨÷øòŽ- árå_Ãü!22D†‘QÞ¬‡ƒän „ÒmìÖ^ɸý]o$ØÚø3³»k’R&®üN¾ÅÅÅÃ*úÈ…ÈÈ@phDFy±’€‡º‘é]Db³#ž]“pðÊ»®Üóo®³ƒ?3ñì×ìŽRº,¨âÀH ØgAŒ†–¶5e¦¼LÝ oÈ œöéZ2}£ÃxÅšû™—þÎÙºø—<Ÿ— Ë^s]Ðߌ#?;œÜúmñ.vÏúrËö ’8-NÀ~™žýÁ·~”òÖs:W/gûÇD£!IWð‡B˶˜Ï.LX£U"#Á¡AdhåÀ…8|np¼ô±Åÿü÷¯3å†ÿAw\ÙyÉÿJð:„“õÓJÿi+¡- Èz   ,Ä<¹=ˆòCù Únƒ 9•«î±lÐ9ûëÁŽl[˜â"¤ThÙöY´kàžRUdBÙ«¢ÈÈOÀ´½†B¾-Ó÷ôrgõÙ5—¯ž½çÒןM¯µ~~œXP²”Ï£üJÔü¶Äâ÷ú þPB€¢ÚÈŸ\g2úæÚpìADËè ñ !Äš–§»ë~7ðЉ5[ÄkGK*Ì›™×Ãoù@)ÈÕó;@ sÕÌ‘¡¦¦&ÒEP/‡‘¡Ad”7ò°AϬ.3¥‡¶Qh™>ÍØßÌP¯}àÒïzØ £¯9γ彣ÿÙ,³ SA®þ¦+G--IðÒ’$á0ÆåååEºê…àÐ 24ˆŒòF~&„äeê^™1£À@™Q`xheF~Öæ ÉO/Öhˆd¦×^8Q×Ô÷ö©Ì—ÓnoÏPp¤Ü½}‹Ì#°8 "#Á¡Adhåü>`ž^Ë„|"ÉéůÌذ£S¼Û`íéþñφ\>ŸXüÕ«ZwÅwüÑí¬ÇMÈ•„>1)$õˆ•r2Ó‹i™^4™¸˜›z¿ëÕÿGúússÞñ]7»Ü-Ò£®(ëm@ôЉ&èp M:2Ÿ hÏ%&‚î{?&†xáÌåöý“ª7æè}†\MÉìR ˜_§ÚÿŸLOs”ª¨¨ˆtÔ Á¡Adhå¡$¹éÅaÆæë¾ÿ€ë•žnþÌèú=𝼷~g+!³’JŠÈPöRŒ™KXµG‚CƒÈÐ 2ÊC’Ìôâ3m^BˆÅæáwLòß@IH„Ì豺þÌýÒ³ÂzÑÞ{ݽ=šÉߺ`’‹{t$¨ pøIG–‹[¡ùéÅgÚ\„›gß±^á%ñJâš(“™­ýþÝ/>«ï½ƒk]ÒîØ®¿9È‚]ȸ´Å=@ ФA§§%±ü¢>ÿük¢Lföþ÷´kM·j«ûaÛt΂Ž:DF‚CƒÈÐ 2ÊC 8xüôbŸIG«¦$6Àª§ÓÍ5ôwd~÷Ço¥ô´ò'Ç8Ï¥Vü›+~34ˆŒ ‡‘¡Ad”‡ð° zqC‹ë‰ mUf‡5þÍtÇÙø1ÂKFk³û…'¹ó­!+.¨p$ñ“‰…Žä^áŸi·ŸNؤ‰³t¸^|ÚÙpJXoËéVÅö‘0LHÀ‘ä?™¸O£1mEӨɧºí®=ã8t˜RevüiC[c«Kárª“ÕjtÔ Á¡Adhå!G’ä¤a7£-/¼ýkã,áŒÎëZÝþÎ¥ÝÉ…õ¶NÔƒIccc¤‹ ^ "CƒÈ(ƒ°"‰6™8>Ýdº6kŒi\ívþŒ†óÞlùÄèéÞž|¥ÅîÙøEgfÊÀÿxnqì(..ŽtÔ Á¡Adhå!Gm21¿ƒáɩ׸“Lö½§!^BÃq¥Ö]iîÎ÷L×<á¸èF#n•+€MБ$9™xÕâÔö®þ!W®K.ýϨ[]ÌÀßIsº«¿w~Ã¥ã‰x½hÿ¹Åâ}1n @…€CFØA¼öä [ øìU¼rqê†íUf!¤ÊìxÿK[}Ò„g~§[3°mC£á–£/¥vBø…®|ª¿ÂÔ&2¢ÇmaÝ "CƒÈ( 8dø]Ê+íB.¯´²‰‚0™8=YûæöNq‹´µÛ£×ë;MyÿÈZÓ¦MxO[sÉŽŒë;ã7Ÿ©MdäŽÛº2D†‘Qú€CFØÁ÷dÀ:ìnÿ-»z<«ËR«Ìº4«ï±¿›aí©¨sö|¿íÍcgo#%—‹¯—Ù'±(ßxa ¬€CFØ!h=½Ò•T‹Í›eÒViâ,üÁ¢ÆÍÞƒûøó:Î=}ß¡-»‘0ýëpÉ퓘/ù D@L4A‹»c}zjU%!^z1Ka¶’—Õj¿ý]öê²×8γëÓ¦¼ðéžvþû:}^úû¢MyŠ^555‘.‚z!84ˆ "£¼˜¨‹÷¨§m ¨iF­ÿ¬¤äFØâB†-]Ƥg8ßÛ ñö_9ªéȤ¶ç_µ¼C›*yg~ŸÄp–=òòò"]õBphDFy1‘€‡ß;« -KV—™^-·¸&#{§h‹CföeÏ'UüÇèéÿÃ"ÛÕúã–—?Ÿ´"~êdk·÷ð)‡½×+“h—’’é"¨‚CƒÈÐ 2Ê‹‰<üÞYæ&'?ÂYܲM†½(•ü‡bÖ´¼ç2×ÜßûnRç9þL‚×qݱ׵7³ ¯v^™,ÜäÒ) µ§µ§>wˆÍõ³T"ô xÏž=ÿú׿>ûì³³gÏŽ5jÚ´i÷ÝwßòåËCþ È7k“¶l¾Åa§6ùÀ‚{®>ù·æþ Ãy=½ËnÐß²J¸IC‹S\Ôêk„ˆ¡OÀ?ýéO׬Y³víÚñãÇÛíöÊÊʇ~¸ººúñÇù³"H²Y›„¡e»¢¢Bf~ž‡Õio_ãÉã.ÿáúQ{«÷»ÎIœ±’qQù¿„ö6‰|db‚CƒÈÐ 2Ê }Þ»w¯ðuZZZYYYAAAIIÉKÀáhÖ–$ù+qÑJ“¢_°ä€5eâ×oÇsýë~pm-³w¾p,e!³„¢òc¿ rõ…¹quM}ü?ážQ×"  "CƒÈ(O‰>`NDz#mL5´¸^»°ÖU•ÙÑÐÒ¶¦ÌÔž3¥<û{÷vo2v5ó—i]Žï¶ÿ·ñÈy2ûf¢¹h¾™Oûy?´H((¼ó€­Vë®]»n¿ýöûî»/¬Š´•&ÝÒ®5í_t¯fÎ<á%†ãò}îú÷3\×E[mæÆ••ËJŒò;:@ø„+3 Ã0LjjêÂ… “’’Ö­[à[|¬[·N¼DxMMÕ:KÄ/‰¿¶Z­âI媽?vúŸï†R _Búúú¶UÔþóÝÃâUD6~Ñ)¹Òd‡ÝMñjt{2óØeß&¢&î”ÙõìŸ¼Ç näêsãNÍ›èp¢£J¨þFK$+**"^ÕÞA¥èý.Âq‡ŠŠŠˆ—Awxå•W"^†ÈÞaݺu’iˆ„ Ãqa\£¿µµõ³Ï>{ðÁï¹çžßýîwrå`Â[uÚZióo .+1BÊ+íÂÜjÒ˜¸ãgúÊJŒKK’!\C}÷k/é{»®`˜ÆI ^è™·¤$™¿F(€ð.ð¾ôÞ>àÌÌÌU«Vegg¯Y³F>Ç&Ú !ÂØ(ÿ Z­îƒ'|gô¿e,™ü û=±cäÞúþS—wlç½úgz¾CÒ-@„)1«¤¤¤µµUEÚPj!û_àpr çÚ|–«L5²iFßÿJg\â+é+¾—V3ñð'ÄÓýXgSÎög½©+5—ÌÙ·0aõ±¨} J$àÝ»wO™2EHV«U¼DœAÏø/W¹rqêîÃÝ„‹»öt_CK‡1Ç0;ãKìWæLÛûvœ£¿9Zër¸ßzES\{í /¡}íCphDFy¡OÀK—.½ÿþû/¿ür“ÉÔÚÚZ^^þè£þóŸÿ ùƒbDcccqq±øŒÏr•W%nØÞ)ÌJ:vÚépz…‹ÍMN3ÉHLÿþ}î-é-Ç…óÞ}»]§ÌIÓ¿MHr ÅIå•oQÕz þ‘‚CƒÈÐ 2Ê }ßòŽ;ž}öÙ;wZ­ÖŒŒŒ+®¸bíÚµ—]vÙ åˆÉAXþø<矢üó?~jñ,ã7'z}ÆEÇë™Ë‹µ¢©×V»÷ȩޙ­{–v}ÎréÙËj·$-L¼zÑÒ¹ƒ¤aÚx± FoaäD‘h„µhÑ¢E‹…ü¶1b¨;'vØÝþ³’zܸl]Q¾?t8¹?¿Ýfsp_$_VoÈ¿½ýý wÿ’Æã^Öù™å«nò&Y®õIr=KLZLì†E†ºsbO¯ôßem’ßÿµù\Ÿ¤Ï곟Íúþ2ë¶¹ö*ábSKëïÿ«½i…ÌÈ,ÿõ,Q$`uñö\QQQK]£Õgö‘ #u º­ó¢*²S£{×tý1CáòŽâ½f4õö¸ßzEs¸Jû­$!1¢F|H3ÖŽ—àÐ 24ˆŒò€ÕNþW"ͨ5YÿYI9•fq2ŽŸt&;{Eûæ } ÂIï¡¶:óÑ9ËëãÇwØà(#LþvÞZi bè“dÏqíi‡›Ñžœºxâ¢Yîwÿõœ®÷ÖrŸ4–vuµv!L•ÙÑÐÒ¶¦Ìø}fC]t>_ò€‘ 8ÊøLþé_-ËoíŽ@Èô3còt?~Èóå×¶4ÞþÄ©éë-=÷ñ$}õ{é×µh3øäYã|œäl(™ó#š Õ®¢¢B|X˜WVbôù–É?,Ë.X²ÿêûNësŧógÒüÒRëN=ç²Ø=vw€÷ãgCùœô™²<$>‘1‡‘¡Ad”‡°ÚùÌŽt áв§ä<ŸµzͨڂšµîþG°œ÷ê®Ý³»«·¦\ÝÜ1›Pæù/•5il\•Ù!lÖä?eyH°n€ ‡‘¡Ad”‡ Tü+Ž0Rfin›Þ÷þ;Ó{j…W“=öÛ:6›{jÞO]ZeN组ó2uÂÒKe’¦mîpKNYˆHÀÐÏg„ó¹v÷kf U™§šYï˜åUGn´lKö ¤ÕGÃOZ^Ú™tù.nÞúr˃+2„­äJ„‹ÍÓÜá¦MYˆèV»A;føÐâAÑÂaà|–Èø¿7Û^ú¤CÃC¾G<~{Ÿ“âíîÅ3—üו,¯´/žeüæD¯ÿ$]«ËR«ÌŽ*³cz¢åŠ“ï;ísAsrþ™9Ël©ã¶„§Eâ ,.!€j…/=¡ :ê º…°ôÌ%2°³B‡ÝHö%„Xl^~æ’67çÅîï÷½É²Íèé.ÈîjÈúüж¤,²³FñS@ 8êÑÆE $34í¬ÐÓèw©ì™6/¹° b ™Zg˜°ØZq¹}?Ëõ§p†ãfušî8~fÒ‚Óçíß$`µ³Z­Ã\"Î?CóÒuM}|U¸«7 ê/?g÷L›‹\´ bÜG©×|8ëæîí¶ÂÅ:süÑO'œÝÇ.¹ÁÌM“¼¡ÿ<%^an\ »> ?2#‚CƒÈÐ 2ÊCV»ÆÆÆâââÐÞÓ§Qº¹]b1¤VÃk7u›añb–£§ä,z@ÛpÂóÑ»\K“p ×eu¿ûÆ¥IMqW2—ϸÂx±Æp%$ŽÈŒ "CƒÈ(O-CŸ0KIþUOk·÷ð)‡½÷¢%2rÒµþÛ û ¡òQåõzç³Ñ5Ÿ&z{}Úb*h(^úÞIß?±ù\ë3:l˜û„ aA(Iv;¯LöO·òÛ KÐhÎN˜÷æùÂï%îÏ«ÿЏ¶ûͲ˜3¿x~LæÔÓÅe=IÂy¾+šOÀ ± úÉìÍ0TÁ\´tÌ ×T¿¼ék•†ë¯X3—Ûr$·õ¨¦h&»ôF&m^¨ŽÑ+<ÌŽäÞ`H€Õ®¢¢B k´± ¢¹;þ­¤k+âf^Û¹£°ïÔÀ ç=tÀ{´š{…fa“<Ð(M[½R²W˜ÌÞB’›¨ŠJ~lT‘¡Ad”‡¬v*ù•pDñz–Z–!„œÕgÿ;sU£ai×çcûÆgdzç OåöÒ+õ)óaˆÔê•iIl‡Íc±y¶VÚ„·òS>2´/‡´CTHn¢**ù±Q!D†‘Q0„¶Ü‡¸å¶¡Å%^>ºN4ÂÙlÈÿ‡aMaß©ë,ŸåºZnávyv>ý’‰ŸÁ9–äö¯[ɯ¦É½ïX¯ÙçÁ¢Š©,…·Ñ‘’› 0dÐmNný6‹xE­î^¯†!^ÑàÁº¸q¯þpíäSš]ŸpíÂyÖãºÂ^éÙVå隯¹ê&)YxI²n½S6cP»šššHAšÏ&¿èô_ÏÒË‘DÃÀϘÉÈÞYš7÷2ÝÏÿG{óJ&Õ$¾˜u»<_îpýåq÷ =üIÉø¯U5@phDFy¨«]^^^¤‹ MÜ+,³ùÒ‰gÏ»|f7–Õ̽B3û²ó;¾Ð|±Íèèß%n—÷ë/æivëã‹Üök¡6™1Ï!¹‰Æm©öÇ&âDFyHÀj‘Åá$Ç<“‹³‹O¯p«Õ}ð„ÃÿVÙiZ·‡#R³›ÍóÍÓìÙ—v¼ºë«$Ñ6ÃŒ×3§»šû´ÆÝt »` 3&ßÿÎâÈølf,?Š6æÙ3›œ·÷&*85iDFyHÀ ‘n}‰o ä?ú‰çpr çÚ,·B‹—–xî¹¾N»‡0ÚÝÆ’½‰³Jº«Øö˜ÜVá†ã¼‡«¼‡«4ã'¦å\Áp9’÷ñüÕÐÒ¶¦Ì”—©£}¿’ýÊV»wïÑ[¯w87!Ñ 8 A@V;fÇËìW8¤ÖTñö õøRd¤²>g< »?±ø›ÄéÅ=µ l{F;›Å¯æ8[sjßµÿqwéUé‹TìÿfþüùýÕè‹õ:¹í.n–m–¼‰Åî1Ÿë+Ê7ð‡ÒmÎCÙíXÉnc,ª@ƒÈÐ 2ÊCV;~%ÝQ8pCZϲ 'Îdd-~™#LuÂÔê„©…}§ví)tœ¿jtÛÈî-ÎÊÏ.Ÿs×q¾­3^òæ“ÆÄy¼\€3—ÄuqßózŸù?SüœßíXÉnc|’Ò 24ˆŒò€!bü[­ãõš^ç@;p]ܸºŒq9ÎÖ«ì_Ïè>¢!/gŸç«]ž=_ÌÊ-¬ë›Yk(à˜‹òýüâ„3m®‡ýëâþçù¤ë³R‡ÓÍ}y¸›6n ÝÆ † áÈPjŸVë†õå>÷9§Ï|;~,å IDATíÆO“¯ºÒ¶oNwu'šòÄqñgO¬&'Z´_%Í90ݩѿÁ_’m¿ùYzaàôåÓýëâüMd¾Á¡þÂz[ †¬vÑÛ1#½|4ñmq·ZOcl”&„thS?4•~šº`®íÀ•Ý•Éâ©Ã„d¹Ûn¶|²ÔúùþÄKj3fßP:Q<øK²í7^Ïô:9ÒŸ;]Kç&mÝg |™äà/Ÿq[½?6á†ÈÐ 2Ê }Þµk×sÏ=·}ûv§Ó9uêÔGyäæ›oùSbGôþJÈŒí¢½Å¿Q:5‘õx9a|r/·+yÞ¡œyN;£ùz'w¶Qüöx¯c¾mï|û>æÃïÜ+4žqI„†ßü,ýîÃ=â¶îN»§|Ÿíg·ŽÚô¥Uf™x¶ñ±3ŽAÇmIÒ”å EïM¸!24ˆŒòBŸ€.\¸hÑ¢M›6Íš5ëðáÃ?üáÏŸ?÷Ýw‡üA rÁíòJÝÜáö™ÝôÝRS\V™3—k<éùj§÷pñˆr!Çq'ëÜ'ëæéXÃô®³—Y(¡Û~Àëó\‹ÝsºÍ)3‚̧ÁùØiéÅ¿Äã¶ü ÚjM›ì¤†Å= ´BŸ€|ðÁ'žx‚aBÈܹsׯ_ë­·"Cà|†RËÌnbòÆkóÆs¶.ï½=;?st‰ïçê™ïÚKöîm®ÉI¸b>›PÄŸ—óLáßàìpú¦pm<—äMü[­i“€FžÐ'à?ÿùÏâÃÂÂÂÓ§O‡ü)±ÃjµFÅq ¹ šäì&!2LR2»`Éž¸9Í_î/cjLí§ljߞÝ{Ž|¶ñr݇º¸"­õòÔBé5o3RÙ3mÒiUr¢°?ùq[Ì6ÕîOÑòc£óƒ !¤­yaëö_Ÿ{nÍùwŠ{j9w¼žq8½ÛH”„G¢^zµÛ&å$„Ì(0<´2#?K'ÉëÉ›ôXÏÐþ/‰‘úß”ü±QÏOuïP\\ñ2¨óâ·Dïw1œ;¬[·N2 ‘°a¸‹ëB¨¥¥eÅŠëÖ­[´hÑàå`ÂXP'™¥ùútY‰Q¨ÿm­´ùœŸ—yJºÛ2×~pNOÑÓ-ySkè›0ídzQGÖ$Žéÿ“ÔbótØ™mÛí×3glaæPÚ dª4m—‡#¯^‰å´¢‚Z~ÑM#ž‰bƒFFhéšg¸xÓCÆg<3¯¿··Ç[{È{è ÷øÿL,èNÊlÏ™b˜^æ­=ÄÕâl]þ×'8m ûsö{Íi}Î ÃøÖ™ÅÙ“‰Fºjë3RÚjóú“ßs‰ÒÐâú׿æ—–PvŽeø…¢Ad”§–žWôà ©ƒ“ÏjCZ1#ðu›ûqw¶Ñ{´Æ{ô×Ò4H5…“5…S˜‚ÉLªÉÿûò¹Ü Ìü,j6•\KkÐq[AÀd'ˆèž¸Õ:À3\·yÃ0còÙ1ùlé²»N·î­¾ÒÐ8ª½ž8¥ªÝ=ÝÞêo¼ÕßB˜ô ¦`²¦`’fÂD’(Ù~.¹&M »K¼kèÙtо‡ #­WXþ]y™º‡WfȬÛLãHHÝcœ\²`é¬oC}ýUºSµ9®6"õG4×ÞÆµ·y÷V†arF?qü„‰šqÄ/¾ŒŸ7•eÒZ†@vöD6¢ê3Ú\¾x @V;tÌ _ÐËi ¬g@æã]4ú‰Ó¼Âݹ£ªz¯¼l¬û欳šºZ¯ùé‘Z}šã¸¦3ž¦3äËD£arÇhÆOdÆhò'øáªA'Ò{M1hϺ?á2~3æ‚\}TÌwÂ/ "£<$`µÃ¯„?Õñï$Xev˜›ÚÂÙz½„¯OkY&¬)›“·‚åΞöÖõš{Nj¼RV¯—;Óè9ÓH¾øŒc˜ž¤Ì¬ø±3ݹͧ&˜›Rüw§ „˜s|:t{$–útÜŸM…TÊçÿ‰/óo”VíÿMÔýB)Ö×u‘€!Êø$9õ ñu8¹õÛ.ÚÑÞ{Qrí´{Ö—[\‘a›ÏŽÍg]{ºÑÞ^sÜÔfNhªKïnfˆD5Ãq‰]-ÓºZ¦BÚI'›r2nlOÖ¸sIyßt$OG.4‹s[‹S©ÇK>ûFbÕLŸFiÕþ_Œ$èkÁÔ2ö£ !Š ñ>Üš¶“ ÉE¬¶VÚ*öž¿elë æŒ·þ8×Ú,Ùaì£[ïÈÌ׿;©Ë±™ÆkX{RiLÜñ3·Š×kz/t$‹;•å ÿ’»b›Oeº¢eÕ¶óÇ4ABHANœÉÈú/P%?Ä7˜ }æ’ÿÚÉ ¬—ãì½ÔÁPþã¶jI~¼jµ}9ãÿñ…±Ó4ƒ1q™îóyަ±®³ã\M£úÎKŽáêŸÛ©=kKÌ·B>%Î]qLÎh.kLbWZ®+ÝíΖ|W¯(ã:œÞx=syQbCK6ÍÏÒu¸[f¸5C§›S ùÔŸüðìhÙ¤XŸ D0D“!/P¥,ÿµ;!2Kyññ*¼…#L‹6£Å˜±Ì „¸¾1ÎscúšÆ:Ïq6%{¤Ú~Î>®¡ž4Ô_JÈ¥„xZ4-ºÌ³ú¬&]Ö9}ö9m¦S#Qïurã²uZ–½ÂÅã âÿ‹x=3yLÜÎêG[íÞ# ~"–’äm¶ bÞsD(Öç¬v˜ï#誔á¿v‡ÌRA|¼ÒÞâ`âêâÆÕÅã“<ö»Š»ÆöãΞöžm”^úã–óæ:›sÍü!G‹ÎtN;ªE—Ù¬Õ¬Íl×™¼DCiîp‹«•âÿ‹ì4ms‡ûëÚ™ R¿Ѹ-ùvþ*ˆ‘MiµnY•àà£FyHÀj‡_ A,P¥NA|¼øÉkc§RrÇ͘Cq8¹ÿS—ÔyfŒ³y´³9ÇÙœèí•y/C¸4WG𫣍÷8ÆÃhZu£Zµé–Yn’6J—QcNmhqñÕJþÿbl†î’ ý]¿|µ2)Qsð„ÃçæòõûŒÛ’oWà¡‚ÙŽVëAÿàìs1è5§š]gÚ\’o >j”‡ ´™K2o ¢K[ò-’„Tm>××Ðg$ñSÅOáϤxºr-£-¹®æ\gKŠGb#E1–óæ8[sœ­¤ç(ÆÍ°mºôóÿe;Úã6e¸M]¦¤øü,=_E6ÆkrÓt‰o&²õ{ùÌ´]aÈ]…¶ÕzÐ?8üû\âõL¯Ó»ý€ï»„¥ÐÄV[—6ø@ É™Kæ\§p¸µÒF.þX ¢KÛÿ-©‰¬ÇÛ¿à¥@œÅý’•M¶Æ'ŸÈ&z{sœÍ£]-H«É~n”§“áð¬å<ý)ùè‘BB–âifÛ¿I툕ͦi´£ÚަŸIJ'D"ˆ+ñ´v]þ¥!-Š)y±Óç[+½„V«[²Š¼ñ‹ÎÌ”‹>ÅO Ç|Ü@þàp¹¹9“âŸr4w¸³Ó´¹£tVûÀ2þzÿ¥ÐQã˜2ð¬v555˜œü÷\&Ò¶A ¢KÛÿ-ÍnŸ,~Å„ƒ>“?´Õº[_g_g¿“’Dtœ;Óu>ÛÕziš5®ý\BWK’ü.B!,çÉt·gºÛ§§ZH·&±Mg:¯M;¯Mkך:tiî”tqý^² è™MÎ[‡¶(¦­‘À¿=|ð DO´Õ:ˆì@Š×5õ hîp7w¸ !ãfnŽË¥S r/’tÑ8«rí5ÊCV»¼¼¼Hâ?sI¦z'D—¶Ï[üSro÷ÀS$RR«aˆµ»ÿdR¼fZ¾!Ũ¹ðz*!…LnÜ‘¦¾òJû —°ãØŽÊ/ê3]ç³ÜmY®vc)™’èíNìë×wfàT3aþšäJÏ`Ò3˜´Q—hLI…ÉG»ŒGZY>€V»wïÑaà´1^sÙÔÉE1iõo$¾;þ&’ BfN4غ½’O ¤Õ:¸ìl‹ù„¨¡Åµ´$©¼ÒÆß¤¹Ãípö1Ú5ÊCV;,çCX—PÚuÕ#èmƒà“’õ¢ZCwNº–Vóæƒ,Ĺö<Û›5º:-U˜õ›àud¹Úò5Kóº5í縶®Ë`Q9»Øm\C=!$tBJéÖÄ{ìiIö¬¯[â9Or‡.µƒMµ²Iö^2袘þ$Û„Šæ¨d­ÃÁuvûv½ëò”M_Z‰TM4 cAt`’×}~Šø¥9Ä=vÏÆ]âåJéÒö7‚?jT»<80Dq=ƒÖ®;‚ùõÚ°£SXW’P–­¦5tÓjÞÒ+qŠÖÃêÑ:ÓÇÝX:KŸÕ_Í:Z×¹u‹9ÓÕžánåj嶤»;´\@ëcB½½Är–XÎÎô2š.ÖhaSlodd:“çÚH}†Ù]ßàe©µBˆø%Pì½ÞíâɇN:’þ{wG}æü™™ÙYï«íÄIœ—sRB ¸„4M¡…’”@—†¦\Ñ¥ñýq¨´Ôk¯HôÒŠ êªQ¤œÄA«¦=Á%E oM ¹$ G^0&!@œÄ/±'~Ù÷ÝÙy¹?6LÆ»3ë±½»3¶¿ñÇz¼ÌþöñdŸßÛÃ|¬q”»o þú•+Vw¢vŒMbã‘©,7*Þ,›u9µ+글aš)î‘#Wn¡`‡éÄi*ùÅÜ$5æ˜m[=¡ŽnÓ ‘±ÈRÁMóÒEáD]SO¢Q?Â6I|¥1™¸Ä\\ä‰ÖÉ#¾ÔcZÙ «©9‘côiO˜¨…ˆFˆÚé:†I°þa.<ê ŸШ'4ú¹íÖF G˜@ÐêÛƒQ<¥DÜMKÅŽó™ÖfqÓíág^¹RâNÔæ‚±‰®n²Êë‡:RÆUFÆëÁfÍÒ'™mò×óÔ‡ÉË Øí°:¾€Þ#7"c™*¬¿˜§ÆâÚ‚D”ú„èVý´vnšÉ¸üÔºó<_’¡8‹wt‹; _¾$šOµWŸÆFÔûW*_Y˜¢¡+¹ÁËg?¼ÊŒÔ+#ÍdPÖ £iA%T‹¥‹W½K¹w‰ˆÈã¹£&¸ŠeÅ$3¾°$ÔÀ‰~!Æs̵O¼Ñ„"z"J¤Õ½–¾µ³`l«›¬òú'½Ù1»s®û[p”8‰©ð*Ï´ÃÙØ2éaò²sK c€Y¨:CSùšvžY¢ì±ÍÊ ’¬éÝÅuˆóôÿE/­ÁhZH×Ë£µòh­•Gëä‘:%P“LY?R¬ç‚QO0Æ¢žPœ D¹@œ Ƹ@’­Q¶àùÿø¥ÐW[ýùÇ݃¹âqôÅó®}‚Û©Rð—*ÞO[ØÛZjô=·ók±Œe˜‹k~° ©cãTú$3›Í ¾tM ã_êÞ/„PŒ`¦©Î,-›7ÍT²'ßæÍº±£{E“wEÓ˜ês»òmzACa¢\(Ê…È»ˆˆ|^6U‰È£)óÙ˜˜­UbµòhDŽÕ*£µr,¨&ØñV*›ªQ3ùécſ҈Irþ8Wã‚ Öãq6 }T{t ,‰AÉT<üƒw†­zàÉÞ8±é`¤±Ò”q~™ $›N©Û°:øÆ±¸é$;Ó“ó3½$¦iÎ.ž 7õMÙô%×å… 0Õ%Í[ ë9ÛÎx¶å\˜±¼3ÔÞ™iïÌ´,ó·6×ï~s´à œ¦„”xD‰Öʱù\üÖyÙ@.¦Œh±QÊ”Úe³†´€’(‰4xí¨á•%†—ÿ:>Ъˆl6ÔÝ”]C¨aa˜©ñ“?8ÏoÞŸiì46ÝN«`d½Hþÿ¾\b ÙtJÝç—‰Æ#¥Obõ‡è,øÙé9J“S<nÒ›²å‡‰èð©dS_öo‘€ÝnÆ Ì”"SBÙƒ3n·s‹\pk²t¾00œ+î€í½,ë˜{/Ë>)xŽÂp#žÈˆ'rÞKDôvšùR‹ßÃqJΛŽz3ñEÞä\OŠbQ-6ªÅ¢Êð%ã¬íYÙÅ-'dGÙÑ"J“ž¦õ±ëf¢Ÿ3|‚óÇ8Š­I±b†õ©bMsï5ê'_ ãþƒßßÔâ×wë\ÒøoÿÙGã O ìwtK²¦×4¼ëócoªÕ¼-½“vA=ß?”+~Âç®ó*ªVzû gÃó#ïözZ–„±¹¹³O:כⳉ+=ã—F›ƒ™…Þ´–ˆÉ£Q1—É ¿ššÐ<íÒ-'ȹSƒˆ†Í0¾4ëÿ§F® èû‚æmy™e^Tx1Ç‹£9áŠÄûBþ@­_öx‰èÂ@nÌüçÏ{\ î/ \VT-‘¶¼i®²Ô˜*Èâ¦{}«ùE6™¹úƒ>ÖX»ºxÜjÃðò®®F€ê)øÜïìlY"ê}§ùì[¼«†ÞI«‘y?ÙÚ•¾öÎ YlaU¨jÌàô‰4G4—|s?’‰d"†ôÕSDäU¥…bêá;^JR2¡%”J*ÉD÷¨’HÔ1)Ÿœb“/SÁiª_KúÕ$ «ÃDD¢@‰ÿaHôåxq0#do†õ¦YQbx‰Ò¬¸¼/¬ªAòz%Nxó`Ö“õ!ÇòÆMštÎWa7Óºíú¶9·àÎVÿÅ+¹üW½9aOñã…CàfJ O°ÛE£Ñ¼EÜT 2%¸38Å+eiõÝRùÇ¦ÃÆŸ­¦{8|ÜŸÇó[KšŽÕ™O› Në£rÁ¼Ù,+œ“„³|m˲« éê— ¿B~""Q`)›*I¿’ò«)Ÿšñ)é-½¬NUS‰\,f2‚”¬QÓö7›0M£tŠO§šþöÐÕk–è_Æþ&Íxsœ!Ab… ã•X^f<ÆxÛ¯4Öè»’b$ó¢ÂòЇW<>Yð*œ°¤)¸tñ8K× Ô˜2µ ˉt*‘Ví¿¢¢©m¦sž‰¨o8§Õ-듳¡â_|JʧDDµcºÆ†DÃräˆó ‡g<¼˜öÔŽ’ÄðYÖ+3\–õÊÄæX!±Ä¯^$O<Ÿã|ûÄ™[Ê2qË¿“]S²Sº Rä7¾îêÏ•(‡¥ï§•šæº+BDúÂ-Ó“”®Õ= HÀnçÂQ—@dJpgp¬VÊ6Íôý. ˜-oº=¤·6‹Åë” úNÇždüZdcïIÓ/iI[2Ÿ×_·¸pB^–²a„ÂD põëçr†qÖ‘ðÙô¨UK<~Qàå e2Z&E™ eÒZ:E™´–IS&C™”–ÉP:}õdrÇYqšFé”FDIÃ1¢¹düÖa0Lò‰«¢ûK™ár ¯r|VãXžçDžˆ„÷jä8âù|Ú&‡¼Äq$x‰ãF²üÑ3šÄßÄPò´oÏyöBGÎHñ´šfE"òúøe‹!?+ó¢Æ\ uAQ©Î¾Ë icjL}!øÆ{…««Ë;"^‘|âĉçŸþÅ_ŒF£˜Û y6wT.-ß±©÷%=m¾ðwŠcuãî=igÛ «;~]ñgzÁ*£¨Ä¾ÝÉ.k¬mn²÷Á¯ª”IwuÇ.öÄxøðáo¼±ç€éÈÎŽÊã*(‡eõ´)ŽÕYÕpÔ“¥/VIº±žïÊ™~¦;\=–¥ÿ™„úf'…ˆæ‘ŸH%ÊÒúU+QY_t40,¿`xw |ÒC_®i¨‘ßúûPwOüú¹ê—W%§e3$˔͔ǥžî8ÉY^•½Z¶†¤°'ÇÊY’\”¿m‘$†$[=!qj""¢Û[üeϾT¡|êÔ©æTúIDATJœvvÂvV™Üœq³š£Â¦Û)—Hêö#cUÃ1ÏΗ «$­’FŸÕI¤±3ŒÊRìËd༰»u°e‰xëç|úÜãs|¿?2¼ôººaÏ‚No½rª°lá˜=¨Ÿ}éòhdÌû½º.–'ʤ5YîîM]èK\èIÅ£™9Aš'JûÓ<É¢’á5™×r<)5çãÊÉI¼*×0¯J¬*‹jÖ£É|ùÖz•W…v«ìöö·×ÀF³DÁþS¿±·LÂ$˜Ÿ(˜‹;îëšN(V¢FY˜nLa‡±avJMט‘ííSB5þJÐrœ¦ðjÎC ¯å<šÂöÕü’yI)2e³¤ªr:ÝþijäJ"âg³ñCšOÉ2¤‰j†ˆxÊÍ ‘g®nMšËi²LD”.šÞeƒ÷©gQŒf‚ U&¶£ô­êäØé ÷u‹ïøƒ>våb1Sv©Ò;>Ú™|nUŒA<é´p;Í‹¥”¶ ‘üîß êùþ!"†ÏOžÒ½5ì]"\ûfMª§»2ñœJa""¶Î|—+Þªg%›Ífäç^é‹%eŸš!"†4Q»:S$"ªåå{oõó¬JO=kçLBaù-1f¶oß~èÐ!ý9ÑhTÿÑø+ããh4ÚÑÑaú+œgÀœ:CgŸôçÃW~¿¯Sßã¿^9¥ãN¥ zRÔ(zœÊ»XÖèݰ:°¢axÃê@þ¿ ÃzBŠF£o:󯱸Ûï'ôé`o¿ŸxãXü­CgŒï¢û“w{hnk³HD ÉǷ4üÓWÃ÷¬®]®6z/ܳ:xÏê`s£PÑ¿ÅÿŒÉ¤ù~Ÿôfß<–Ðÿ{÷LÊ8·\Õˆ5¤²Ú×vw­(0–‘ôzßë8ùû–¨‘ú‹Âü‹Âü^aÁ`ms'?ï¬wÉǾæß GÒ¡Gv>.Þöení“{Sv  Úí:::ܹ¤ÄqˆL î Žé>ÆS쀵Y¨XW®ÈXíÉl|;vú±«ÀNï1EÆ~éâüºg«ý/õâ’Dä÷±É¢EYãö‹7Ô|Üsu¸º¡ÖóA§ÉíÚ 7Wò{iqì8{wäß¾W}Èò³µAÎX‹B?IåÒº ÝnÑ¢EN7Á¥™Üœ²Ì0*`³P±®\‘·>£eÛª^ãÏæäó‚ÈŒ[ºØ'0iI=prœ= õâ’­Íâ¦Ûÿ~åJAKŒYœˆ¢IõÔ…Œ¾+um€»ûÖà[ÇãúVY£ ó>¿ú„áÑ8{w¼»¡˜<£óýW´y’©Ã0LcªÂTe•(õ39“˜§–o¼±^áp\ ®Ý#6ÎᣉkGj=±¤’1»Eîºt­ 8¿´¤³Oú¸7«OϾ¾I|÷£”áäâýÔÆ½Ö4×OR¹ô„ 0óMbò¹ñ1­^@c+Hk8M»VRɪ¸dÁŠä‚–L®ÞbéÚ‚S„.h˜¤‚íÊ×+¨[ð±_¼¡&ì¿6ÙIVèÈ©TÚpoO)‘wÓR±ã¼yqÉüf,©”hIAß¾¡åJlYIÀ Ã?Æ îä¸sG7@dJ@p¬ÌÎÈlf:LnŒŒiݪOz²Æ§º2Nö &ÑËEqÉ7ŽÅßû8­Wý3mIÁîß§º2¦ xy“08,ë¦deZæ·tü¢  B&:mgâô;íÉWÿ÷¥M§…Ûo‰63A4L’iQ©씚°Z\¢¸äD›A®Ṳ̀B€` ;¥&¬V7=ø•Hy‡c+±Ó™K¸h',0eÜàŒ™+ˆŒcdòɵà K‡ó÷¦ÃÓô-¨ÊتÎ>ÉtDZ…°¦·Œ¼b À=l..{ivv«4Œ@õädÍX¯°e‰x¦'#+š>ˆ«Ï¨šÐꦉ²³ãØô… …Îöeõ7L·fœè& “3‰y[Ó°ÛE£Ñp8ìt+Ü‘)Á±‚ÈX)ˆÌ¸wÏì{ÓêpËÈ+Æ€­¸³¬ 2% 8V+ˆŒ•麴}HÀàB•KOX†à$` »ö °‚È”€àXAd¬ 2Õç–‘WŒ€ a `FAp°Ûutt8Ý—BdJ@p¬ 2V™êCv»E‹9Ý—BdJ@p¬ 2V™êsËÔ'LÂÂ$,€ ÀHÀn‡ÕñV™+ˆŒD¦úÜ2òŠ1`p!ŒÌ(HÀ@v; ÌXAdJ@p¬ 2V™êsËÈ+Æ€À…0 0£ 8 Øí¢Ñ¨ÓMp)D¦Ç "c‘©>$`·ëîîvº .…È”€àXAd¬ 2Õç–©O˜„.„IX3 0€€Ý«ã­ 2% 8V+ˆLõ¹eäcÀàBž½¶oßît\ ‘)Á±‚ÈXAdªÏ-÷¸¶‚ÈXAdJ@p¬ 2V+Ó츻»{óæÍ¡P( mÞ¼¹§§§¯0}•?'‰uëÖ­Zµª«««««kÕªUëׯO¥Re!€é«üwÖO?ýôñãÇÿð‡?èG¾óï¬Y³fÛ¶m¥ÚÞ ˆŒD¦Ç "c‘±2º _}õÕ¶¶6ã‘¶¶¶½{÷–ý…¦¯ò'àS§Nµ¶¶Ü|óͧOŸ.û L_忳!™Lò<¯Éår@ ›Í–jÔ·eQ¡.hO%N: {€Y¥ü]еµµÃÃÃÆ#CCCuuue!€é«ü ¸¥¥¥½½Ýxäƒ>X¹reÙ_`ú*¾ÿþûwïÞm<²{÷î7–ý…¦¯òOŠÇã­­­?üð#ûìöíÛŸþy§UU“ˆÀ,¿f¶mÛvË-·¼þúë‰DâÃ?üÉO~òä“O>ñÄå9»æ;wîܲe‹ñÈ–-[žyæ§Ú㈉Á%;7@(4{A@ ~ü㫪ªÿØÞÞÞÜÜì`{ªo¢À5SììÙ³‘H¤,§rÅ𫯾ÚÖÖf<ÒÖÖ¶wï^§Úã Ò~ùË_;Q—-[6ÛF»©ãyžã¸²œÊ øÔ©S­­­Æ#7ß|óéÓ§j#&„ùóçó<¿`Á‚-[¶œ9s¦Â „™×ŒÑk¯½vã7:Ý 'Ù‰®]4Í¢çK •AYˆçyI’ŒG$IÁ©ö8b¢AظqãÁƒÓétOOÏÓO?ÝÐÐpòäÉÊ7Ó\r;ËNpÍ ]ýõtº!ޱ\3yƤy÷Ýw˲\žÓ–å,S„¬M9»víºçž{*Юi X›Tfó5300pÇw8pÀé†8fr˜Í׌¦i—.]zñÅö³Ÿ•å„®øäjhh0éïïŸ?¾Síqă000à÷û+Юi X›Tfí5ÓÛÛÛÚÚú׿þÕé†8fÒ˜µ×ŒÑšššÊr*WŒ·´´´··|ðÁ+W®tª=Ž˜b´Ù·<¦hv^3}}}_ÿú×wîܹ~ýz§Û〈D`v^3V¯^=88X–S¹"ßÿý»wï6Ù½{÷Æj#¦„—^zéöÛo¯@»`Æš…×Ìààà½÷Þû‹_übݺuN·ÅSŒÀ,¼fŠ9rdÅŠå9WY(‹-]ºtÇŽÃÃÃÃÃÃO>ùdsss"‘pº]U5nŒ¬uëÖ½üòËýýý’$;wnÇŽsæÌ9~ü¸ wžK.cg™×L[n¹åü£Ó­pÒ¸À5S`Æ {öì¹té’$I½½½¿ùÍo.\¸oß¾²œÜ-Ÿ\çÏŸß´iS0 ƒ›6mºpá‚Ó-r@é ÿaìß¿ÿ¨¯¯÷x< .ܺuë™3gªÞ^‡¹ö e5•®™¦áqº]Õ3npÍ8pàÀ7¿ùÍ|,X°yóæ£G–ë䌆>}€ªsÅ0Àlƒ à$` 8 ÀHÀ@p0€€€ à$` 8 ÀHÀ@p0À´Ä0ŒÓM€)A˜nf$`€iIÓ4§›S‚ àvùÛ_æ3ƃù©Tê»ßýn]]Ýœ9s{ì1MÓÒéô#Sü„ï}ï{·Ýv[ggçÑ£G<ø«_ýêÑG]³fͧŸ~zìØ±cÇŽíÚµ+ÿÌ?þø[ßúÖøÃÁÁÁ—^ziÇŽï¼óN5ß ètd¸ÃþSÕ0 óÌ3ÏlÛ¶-üÈ‘#6lxê©§ô#‡þþ÷¿òäI"jkkkmmýÑ~”ÿÕÞ½{Ÿ{üå/Õ{'ð$`€i tîéé¹îºëòÇc±X8.8ÒÔÔF‰hÙ²e¯½öÚòåËó¿¹é¦›z{{«÷Nà3HÀÓ@鬪ªqš´é‘ü“½^¯$IÆó°,«(Je[f0 0í/R²Z¶ …úúú4d_§ L¢(ܹNÎ]wݵwïÞ©Ÿ¦ `hnnÞ·oßÔïVŸx≟ÿüç¿ûÝ†’Éäþýûï»ï¾²´& cÀÓÀ믿¾mÛ¶sçÎ)Š¢ý<Е>òþûï?þøã‡’eyíÚµ?ýéOׯ__­÷× 8]Ð@p0€€€ à$`ü?æž½ aaÏIEND®B`‚gsl/doc/images/siman-12-cities.png0000644000175000017500000007657013536674414015276 0ustar eddedd‰PNG  IHDR€àº³K³bKGDÿÿÿ ½§“ IDATxœì½y\UÕþÿ¿2 ‚2¨ &ˆcbxs ½Þ³”keÖMíóè6h·Á+¥˜ióÍ2놖ŠVNå@sˆVÎè QÈe’áÈ 3œßûÛú-×Þ{íu漞øØg­÷^ë}Žº_ûý^“Ád2Ip,íœíÐN 80à À€€N 80à À€€N 80à À€€N 80à À€€N 80à À€€ƒ6ŠAÙ`ýúõC‡õõõ ¸ï¾ûöìÙ£z¯¯¯ï¨Q£’’’¬qæÿûß“O>Ù¹sgÒ;á×_}àºtéÒ©S§‘#GîܹӚŽl…ÒÏÇíú@‹ Ú(& åÇ+Vü÷¿ÿýøã‹ŠŠ~ûí777·I“&©Þ~áÂ…ùóç/Z´èÃ?´Ø™Gy¤k×®PV?¾¸¸xçΫV­JHHX»v­ÅY†K‰“Mœq©oÚ,ùq@[Æ``ÿ#ôèÑcïÞ½ýû÷'% Zö©©©sçνpá‚Í=yá…Þzë-"Ó§O?þ¼•Y镲ĉÎ8«¬0*\»v­{÷ît Q_U† vùòe{xòöÛoÓáZß¾}9UVV¾øâ‹ýúõóööîÔ©Ó_ÿú×o¾ù†Ô&''9ÒÇÇÇÇÇgäÈ‘ß~û-©RåBò'Ÿ—$©©©éµ×^ óôôìß¿¿œ8qâÄ€èFJKK{õêÕÐÐ@0àÔ©S’$ýòË/Ç÷òò ûôÓOu¿ˆ–3 999³gÏ ñôôŒŠŠÚ²e‹î7¢[3×+,Ä@›Gùaüøñ+W®·OMM ·‡' Û·oŽŽÖª6mÚ‚ .]ºT___ZZšœœèرãW_}EJöîÝ;jÔ(“Étúôé   /¾ø¢¼¼üÈ‘#½{÷Þ»w¯îÑý‰rrrºwï¾téÒìììÚÚÚƒÞwß}"ßH¾°Ì+, €Êã833sÀ€C† y饗’’’.]º¤eõêÕ­[·öìÙ“#ØÖxBSZZ:`À€_ýUË cÇŽåååªU÷ÝwßêÕ«é’U«VMŸ>Ó/_®^yåºäÛo¿1b„Édúè£fÍšEÊ£££7lØpçw’’‡zhݺu&“é‘GyçwHùÎ;ïºë.Ý/¢+À>úè¢E‹ø÷rØ2¯°0êÏô†††”””Å‹ÇÆÆLž<¹  €Ø|||†þÙgŸÙÏ™ÂÂÂqãÆ¥¦¦rn>|øÜ¹s¯\¹¢¬êÕ«Wnn.]’““Êé—/W.\ KÊÊÊüýýM&“Ñhô÷÷/--5™L‘‘‘&“éÖ[o•{/--íÖ­[uuµÉdêÓ§ÏÙ³gézôè¡ûEt8$$„nVüÉ–y€@€Ð¦×ÔÔÌ›7ïÞ{ï´gñѲ¹råJTTTJJ ÿöìììûî»ÏËËkàÀ>úèÎ;›››å*OOÏÚÚZÚ¸¶¶ÖÓÓS«ß¦¦&¾\555i9?kÖ,9ðÜsϽýöÛ&“é­·ÞJHH0™L+W®|ê©§d3fD¬]»vº_D÷gtss“^‰ˆ[æ@HPËÊÊ|}}ÅímèI^^Þ-·Ü²gÏÁFjkkÓÓÓ?ùä“aÆýãÿ •pnn.‰€;wîl4éZy¢µ–Wüˆ9555""¢¡¡!$$$//Ïd2]¹r%,,¬©©iðàÁ²YPPP~~¾¹_D÷Ƕ&¶Ì+, €Êãøé§Ÿnll¤KN:Õ½{w-{ûyRTTtË-·|ûí·´VRRâãã#_+Ç€?üðÃiÓ¦É×Çÿî»ïèÚE‹g¼¼¼êêêø~Ò…ÍÍÍááá .œ4i©8qâ+¯¼2räHR2cÆŒ?þØÜ/¢t†Ad ˜ó,ó €  2dǎ׮]+//ß³gOddä믿®eo?O† òå—_ Þ>vìØ7^¾|¹¡¡¡  `Ñ¢EdöÓüýýåYÐW¯^ýüóÏŽ9"×~ùå—}ûöýõ×_¯_¿~þüù… Λ78±cÇú„/À&“iÙ²eƒaÆ ¤dýúõƒ,?uêTHHÈúõëKJJªªªRRRÈt'ÎQ:Ã@fA_¼x±¶¶öСCÊYМod™WX99pàÀc=êææ&o6I+‡ÍXRƒSŤ‹ {÷î ôòòêÛ·ïK/½tíÚ5R»cÇŽaÆuèСC‡Æ Ûµk}ïªU«úõëçîî~ÓM7-]º´±±‘øðý÷ß÷ëׯ}ûöœ.Sxùòe__ßÊÊJRRYYrýúuú–ßÿýÎ;ïôõõíСÃí·ßN¹9_D錒‹/Κ5«K—.îîî·Þzë–-[ùßȯ°l8ì„80à À€€N 80à À€€N 80à À€€N 80à À€€NÀ…¸¹¹yÕªU^^^ƒÞ²e ]kP@×æææÆÆÆúùùùùùÅÆÆ^¾|Y¼p<.$ÀO>ùdFFÆîÝ»+**6lذaÃÆÀt#¤¼ªª*&&&:::''''''::zâĉÕÕÕ"µ€S0ÐJæDöîÝûŸÿü'99YËÀ`Ðtõ½÷Þ;~üø¦M›HÉÃ?<|øðgžyF·p ®'&&>õÔS–Ý›œœG—ÄÅÅíÚµK¤p ®"À‡ªªª?~¼···¯¯ï¤I“8ÀØ»»»‡„„Ìš5ëôéÓ¤<333**жŒŒŒÌÊÊ©œ‚«paaáO<ñè£æäädgg?ôÐC÷Þ{ïþýû‰ÁÔ©S·mÛVYY™––6lذñãǧ§§ËUF£1 €n-00°¬¬L¤p&×ÀÝÝ}ݺutɧŸ~:aÂ-û>úèoû¹·¾¾ž®­¯¯÷ðð©åàæææì¿ÎGLÇÌÆU&a…„„œUUU’$uëÖ-##£[·n¤¶°°pÈ!ºµ8Ó¾œŽËú沎I.ì›Ë:&Á7‹pYÇ$öÍe“ì雫¤ #""̲§Žˆˆˆ'Nеƒ ©œ‚«ð´iÓ¾ûî;ºä›o¾6l˜–ýÖ­[o»í6ùzÊ”)IIItmRRÒÔ©SEjç`§Ô¶¹ÔÔÔŒ=zÆ ÅÅÅÅÅÅëÖ­ LMM•kcbb¶mÛVPPP__Ÿ½|ùò   ãÇ˵½{÷^¾|yYYYYYÙk¯½&g§Ej9¸Î£Äe}sYÇL.ì›Ë:f‚o᲎™\Ø7—uÌdOß\%öòòÚ¾}ûO?ýÔ¿ÿž={&&&nÙ²åöÛo—kããã¿øâ‹Áƒ{{{;öôéÓû÷–k}}}SSSÓÒÒBCCCCC;¶gÏ‘ZÀ)¸î¸·Ói›“¬Äe“\Ø7—uL‚o᲎I.ì›Ë:&µ…IXÀ,–,YâlÔqYÇ$öÍe“à›E¸¬c’ û沎Ù×}ép:®üFÀ1 Z`À @€'œp`À @€'œp`À @€'œp`À @€'œp`À @€'œp`À @€'œp`À @€'œp`À @€'œp`À @€'œp`;rþüùÔÔTg{ÀÛ‘#GŽ|úé§–Ý{øðጌ ÛúÀu€[HzzzSS߯d2™L&ËÚß¾}ûÏ?ÿlÙ½\°…Œ7®ººšoÓÜÜlqû+7€ pssóªU«"""¼¼¼¼e˺677766ÖÏÏÏÏÏ/66öòå˶ªµVŠ(4Z1.$ÀO>ùdFFÆîÝ»+**6lذaÃRUUU“““““=qâD€ZSk1"ꈀ®"À{÷îÍËË[³fMŸ>}<<<†úÝwß‘Ú5kÖŒ92>>Þßßßßß?>>~øðák×®µ¾Ö®@Dhá*œ˜˜øÔSOiÕ&''ÇÅÅÑ%qqq»ví²¾ÖtõÕš@ëÆUøÐ¡CUUUãÇ÷öööõõ4iÒHmfffTTm™••e}­]±f´5÷p}\E€ Ÿxâ‰G}4''';;û¡‡º÷Þ{÷ïß/ׯ€€Ú>00°¬¬ÌúZ» …›³ø477¿óÎ;>ú¨üñÿø‡$I¯¼òÊÞ½{é–6öž„ uã*p``à”)Sè’{î¹çèÑ£òµ¿¿?³–––’¸ÖšZ>5äZ] ¶2ŒFBB‚ê3ß~=ºŠGDDðkOœ8A—ddd 4ÈúZ>&5d6 ",Ò‹’ÆÆÆ³gÏB€Àa$$$¨>óí×£«ð´iÓèuG’$}óÍ7Æ “¯§L™’””D×&%%M:ÕúZ‹1™LºoF§ kjj¾ûî;»¾yp.®"À?þø'Ÿ|’””TRRRRR²~ýú^xaÉ’%ríܹs<¸bÅ £Ñh4—/_~øðá9sæX_k § ?þæ›oZß¾ Ù¼ys||¼Ãºà*ìååµ}ûöŸ~ú©ÿþ={öLLLܲeËí·ß.×úúú¦¦¦¦¥¥…†††††;vlÏž=>>>Ö×ÚZAÉPt~~>½ÈJëFŽ?ñÄÇ·‘›’$I%%%6lW™-IRHHȦM›´jÃÂÂvìØaZ‹1k ø­·Þš0a™üeet{öìÙÊÊJkZP‚!gp$®·&Š‹‹÷íÛ'IRss3Q5úÚ&ˆ´¶wï^Ý38°íÉÌÌ\ºt©Didmmmmm-1TbŽ™` ÷Þ{¯à±-(ü={vMM³½kÛf777·  @iÀ¿ÝVnXIuuu]]õíØŠ;v466:Û °°…ÐÚ–œœL¯k"UN+mâÀ‚ ˜u\N ´­°åÐòÆHª›+‡DÉS§NMNN&Ev ÑíÎd2¹Ôžš8¦Ð:€;¥`ØOBæÎ»}ûv{÷â\Zë÷´)\hRëÚ³-³1™LUUUõõõ‰‰‰Ç޳ml"`ËÑëer¤………òTdsdžù³ 322V¯^­u—mó´g°9`ÛÀHTZZZ||¼¬‚óæÍÛ³gßžPQQ±bÅ eyZZÚáÇé’K—.ýøãŒÙñãljôÚj'q¨/ذ]¨­­½zõª|m–€UUU}øá‡Êò­[·’‘]‚²å‚‚¢¾òÌ©+W®vmý²câ@€yX¶”,WôÖWæNEVî]QQ¡jIØ¿ÿûï¿/)Ý|ðùßÀŽäææ._¾Üšð6h@€yp¶‘b²»õõõŒZ+óÀ"K’ÊË˵fWi­t’ÉÍÍ=r䈲_›È• 5¯¸¸øë¯¿¶UkÐrÛ†Ÿþ9==.±líìþýû-µ$Ù²m@–Fü 2`pâÄ e¡jà+‚òÆ… fggË× ZQ2}ýPUU¥:eZÜ%‹ï'//oÕªUè\0"<)))‰‰‰Zfõõõ’"ô¤õO›jIšÉdª­­eÎúMII!g sÖ>Ñ3ùg­ÉÕª-ÈlÛ¶mÛ¶mü[,@öjÀ€gÏžeªòóó7lØ ØˆÍ";;[¹¯‘Õ¹Z–——3b¯:x¬lV5m±VefffffZÓ‚¹¨žØHÜ€VXU}ùå—å 9Øe ¬Ù?Y©DœtÃhâ #ÛÖè¨ 5˜“™WýÅ”8Â_@ë,ŠÉd:~ü¸Ñh¤Kä Uå •Fi@î%ûdI’täÈYÔE¦Déê¹¢[RRÒÔÔôÇæ9,X°à·ß~S–gffÊ'j½:@\m°²˜=ÿüóªó­´ )QÞKï“USSSRR¢Ú;¿U3³Bp“É´{÷îêêêóçÏõÕW"žËåÊÚ .\»vM’¤ììl2}L’¤éÓ§_ºtI«5—:s ì X‡Ý»w/X°@RKê’k:ýã?æææJÆsfÅ©œá[e§qÎíâΈÜÛÜÜl4Uã{ù®¤¤$­³„SÐ| åæñúë¯WUU©Ž\ªNÂZ½zõ/¿ü")$“ÆÊáX­û»ï¾cÌTÕ߸t£ÆŸ={öâÅ‹ô½?ÿü3ÙSþââ‘+ãÒW_}uþüyR‹4 Mæ‘““C #r¤+)VÉ;rp–!I’T^^ÞÐÐ@ת^ÍÍÍŸ}öÙŠ+86ׯ_gJ$IRÍik¡Ô¿äää}ûöÑ%äXù;jMgJ*++›ššèòõë×ÿñÇä#?®®®–Ç uE©(¥¥¥IIIß|ó¬@Ä ¸¸XR‹A?ûì3rï‘#Gˆ™`åååeee‚-¾|ù²Ð×û:ŒÖò„|”»àGÀ‰‰‰›6m’$iêÔ©ôx°eüÞ{ïÑ]°`<;L7±¿yófޏ`}=~üø›o¾)IÒüñâ‹/ž9s†Q ÂÂBI-^¹r%Ó¬|ÑÐаcÇI;fsæŒÑh¤g© YY}Sjjêï¿ÿ®ëìVRSDÁð—:gee‘À]¤)p5Üœí€KC‡¿ …´ä|ýõ×f5ØØØ¨lŸþ(iÏ+ÖJYó{TÊXNNŽêéêêê‚‚R~ðàAyGIed\WW×ÔÔ´k×.UoU}à_ë~/ñ×ݦÀ€ë ™i2jzýúõššÚ†0}l¿­Ô·–Ì(«˜óš¶oß^WWwåÊ•·Þzë?þ¸ë®»äªo¿ý–iJk¢Ö† Ž?.HëªÈoÈy·Ð ‚9_Ÿï¸`Kõ4™Lä BCCË/¾È˜©Þ~òäÉÜÜ\9ò¦%çÊ•+§NêÝ»· Z]¬X±‚®Ý»w/c, °\RRRâááAš%2¯û:"’97WMÍzÿcÀ<è´\’˜˜øÄOè®|•$éÔ©SÌA¶ÒŸ°<ýJõˆ_úâòåËÙÙÙ‰‰‰ÒJV]]]^^®›°¥¯i‡Ÿ|òI&rU°eèxÑ¢Eò¼'sC^­T3“‹V §Öï#CvDÑê½¾¾þ½÷Þã»*SYYI¦—€c€ë šÿä‡_òENNNVV–²–¤ M&ÓåË— âããå»ÊËËéF´’£—ZþЖG•7ŠÒJíjÝÈ”›õ ë§H; yyyû÷ïçÜUWW·dÉ‘^Ž?þÄOXæ!XRÐBpJsÛ¡ï=xð |Ñ¡CImßf&Í«•×ÕýHs_þh«–èš“S_&8–ºï@HD\DÀ<”R'_WVVòÃGD€ù[(süa®¯^½:jÔ(Î-æ¦vuQŠ¢¸ÛZåü¼‚j;‚ÍZã!ذŒÒTUU™L¦“'O’à ǎ“ôå‚A$ÝiQQQ^^'ömhh #*{á„˲ÃWPµú5™LG½xñ"]^TT´xñbeƒŒ?üŸhúôéäëèʼˆ  8°y|ÿý÷ZOêU«Vüúë¯ü80îÂø'L¹ê–RºÒ­­3ŽØÓddd09óòòrÝsU•˜ìS§NÑ ·Dšât!Ò80e'IRYY™ªq}}½Ñhä‹Gss3gµj*Û—––Š»]PPÀhÓ©\K GU妾ÿþûêêjÕ4¯2òNKKcšåäŠŠŠ”å¹¹¹J÷øùjÝ \°ZYY%äèx>JÙSrâÄ I!“Ò:ÍQÍüQÕgæ}BÄÕª_~ùEËžA²E±¦¦†DÏ´qrr2]øØc‘ä¿ …‚ p<˜Íì粈ӚÁ(kNNùXXXH®åä3}‹ÈÈ(#ÏŒ±–„ëFÀ¤q¥å_ÿúט˜˜ììì¿ÿýïtJ™iVõU@úsB8Ó²Òíƒê¾7@M-DÀ:ð³4æFÀ4õõõ£GVíEÓŽIbz¬Ú©²PkböùóçÉD0éÆágb“’’òÃ?477—””¨6¢ê¶ª™êë}ýæ›oÒ‡F(ÛQ <¸`}Ž9’””¤k¦µm2 ­…º‹‰Ož<9sæLNS'Nœx饗$…bÆsçÎ3e_r¡|ЂD •<Ò¬Ôõµk×ÊÛDóÅž£¬fÙº8p@çF ÐrA šÇ‘#G‚ƒƒóòòòòòtEâÍPV555‘“z•]˜L¦ÒÒÒ£G*’$q¶cdDT5¨¥[£›ÒŠhUTþgΜ‘§¶16⿤Ð`€ƒq¡Ø @¼677766ÖÏÏÏÏÏ/66–Yï嗗GŽòµ"SŸªÒE· ÛˆlCŸ()ÂM³´G+¡-Ý8D½iÓ&ÕoaV§²Mrr2=®Ú¬j94àʸKTd£*-ZµUUU111ÑÑÑ999999ÑÑÑ'N¬®®©qÉ&_´F¦+eL¹ÖH+v”$éÈ‘#òáSYYYUU•|ýÅ_Ìš5K«q-‡•×|áW&œOŸ>MGÛZ¯¤x3ÐòÄ,KpM\K€-cÍš5#GŽŒ÷÷÷÷÷÷>|øÚµkEjŒÉdÒÊf766Ò¡‰½ÖGÒÿŸ’’rƃ¤¡[ÌÇ+W®Bù؉+º"ºsçNæÔŽpò«86ºíÛЬ§5prrr\\]·k×.‘Z]lûh.,,$Ù`&...¦W©Úhé_MMÍÑ£GEØ»wï… ø)hz§ÕUÈÌ,h†œœY¶¿úê«ëׯ3]hEÏJñÎÌÌ$K~‹‹‹åm/ùðûjjjR¾â€³p-vww ™5kÖéÓ§k333£¢¢hËÈÈHr ¿VÝ­%Í¢  €Ž¥Qͺ+?3%ååå}ô‘n³&“©°°Lì¢ËIšZÕ ¦6&0ÍËË“[[·n3‰LÒPGeƒ’$]½z•Èffæ¾}ûø^i¹G(**=z´²œ‚ ðÔ©S·mÛVYY™––6lذñãǧ§§‹ÔÆ€€º©ÀÀ@Æñku!kul…V, gVå±¹w)/ÈÇÂÂB‘”€VÄ,IÒ?ü@—Ë!2ýŧž™L¦—_~Yné‰b@kÂ…¢H?â IDAT–! èÙ³çüùó===.\HÄüÚ„õ°ò &>ºÍ^¹rE™ÁæÄÁÊ8,XÀï÷Ò¥K"-Ëfgg—••8p@仨Úh ¶Öíüœ6 -°téRGöèB0ÃôéÓ™™;ZµþþþLD[ZZJ¢^~­ã!¬|âëÆÄª¬«ÙÙÙªÍjE´r¦úðáÃL!3JÙ ã?ýñêÕ«LׯRH(æÄÄ•U-I’LjدG×`þצk#""äÓ ƒ ©uERк,ò#55Uµœ“RÎËËSž¸`2™jjjEþQš4– sîe4^ü´D\W€·nÝzÛm·‰ÔN™2…Ù*2))iêÔ©"µŽ‡“‚ÖÝœR5Ö==Ww X)óZ¯/¼ðÂáÇU÷‚¦/ä/Â9x‘¾NJJJKK³¡ÜòƒuëÛ›à*––– ú ë˜½ïk€«c¿'2gäÕYœ:uŠþ¨åj~íµ×tíuÇ€KJJ´:RÍŠ‹¿X“çw¿@ëë€ëŒsÐMíêžqõêU£Ñ¨,§'Ÿ9sÆâÁZñ´`ƒà` ÀN£Å©‚ndLC&dñíÍ`¥¦VTTøøø´oß^·³&r€½A Z<ˆ]öY___Ï$¥%1QDО6“³Ùªñî°aÃ.\¸Ài\<žGv.ûЯ¬¬\±b…²Ü¬˜ÿ³ÔZe™cà0 ÀNÕåA9Äk§ج\±ê ²M\’Ô’Û`W ÀNÕôEEEÊB[9lÁ@¬\òÓO?1%ª“¥•%W€ V§-ka«´ +ÍT7•TMA+ÿtIÄøÇÌÉÉÑ5>` „#SÐZÐ ‹-x°ÕÏêÕ«322lÒ -v¶=ØØpÿ^­8TÏ-&–™™™›6m²ØI’V¬XQQQ¡kÖâR× „°mlî,h¥+Ãèââb˜Zö®°zõꪪ*žë`; Àê` ˜Ád2]¿~]«ÊܦD h3y[‘ƒUEZ|Ú—H" €.` DUUÕž={lÒ”cÀ¿üò‹¤—‚VmVd÷+s-À&@€F«yÜÛ| X)´r ½´´šÐ:€;–¥Þ⬬Œþ( °Vz9;;{áÂ…t¹Ö$ݱa“ÉÔÐОžn¥ÿ  X€màÔÔԻᄏgÏžíÛ·—Kî¾ûî½{÷ÚÓ1'Óꟿýû÷wV×ôoûǨ¨NÂRmDwi/¿¼°°ðúõëæŽ‹€ú¼fÍš9sæÌ›7ïäÉ“ä9¸`Á‚×_Ýξ;b0lÕ”=Ò¶ŒsXÕ^\#¡¦g¡?üÚk¯mÛ¶møðátáÈ‘#8`7¯@KBä?‘1`Á[8‹Ž˜ªÚÚZùD~ãDéu· áÔ€ú\XX8pà@¦°®®ÎÍ ¸€$I’Ö¼b-tÕ«®®ÎÃÃ.áÙ‚r¾zõêýû÷kÕ*ç]€½ÑOAGEE}ÿý÷Larròرcíã’KÐêŸÅ6LA›‹îo[__on ZY{òäIòñÂ… ¤³þfëêêòòòÄí@ý(ö­·Þºÿþûóòòî¹çI’ víÚµlÙ2¥*ƒ„sØÜ÷ÝM(•m644kyú´j¾šÿñÔ©SO<ñıcÇ86`úð„ ~ûí·ôôô;ï¼ÓÃÃ#222555%%%22Òþ¶ _¥õUY›ŸŸíÚ5¦¢â_~ùenn.)ç !€ýÇ0`@RR’½]q)ZýóוSÐ"·dggsj?ýôÓÐÐPÕFΜ9“ššºzõê^½z1UJ1ÆÀ0À~`#«èÔ©“³]hyˆHšî²"F2¯_¿þÝwßÑò¦•Ä 11ñúõë’$%''geei-#†Ü†¾oÞ¼yÚ´iLá´iÓ¶nÝj—Z6ÜOŠàæææ€ðÔÅ#`]]dJ®]»¶råJº„Ù5Úd2ÑS±.]º$î$Âb€MÐà×_ý¥—^b _|ñÅ7ÞxÃ>.µ$Úµ³} aøðá;v´y³®ƒˆzÕÖÖ ./ÖZ ¬<¶Au´¬¦W®\¦Œ¾~üñÇC† a £££333íã’K ø8vbi%Îõ\d)pUU•n œ8èYZ2ZL2ññŽ; Ì;¡/ÀLa~~~çÎíãRKÂN2fÃfí£[‰ ¤‰ïp©Ú ‰€™ÑbÝͳh~üñGAÀ\ôŸÎ“'OVNÞ¸qãäÉ“íãRKÂõ#`-vñX¼ùB©ÖD€ùå‰Z†Ä€E

[\kÛ»´pÁX²sÚ!³ I.š³–Ö¤hz±Øý§sXXØÁƒóòòÆççç7nܸüüüC‡………ÙÜÓòªªª˜˜˜èè蜜œœœœèèè‰'Ê{ë[YËñD¾èÙ³'ÇÌlÍJÈ ’ö늋‹umø"Í_¤$IRSS]K"`F†9Sš›››F#¶éØ ¡ð(44týúõ ëÖ­£71pkÖ¬9rd||¼¿¿¿¿¿||üðáÃ×®]k}­.K¬§§§+$¨µØõ1k¹°Ò˜0A™¦Þ·oßÕ«W%J¤ia&öééé›7o6û WÌO*INNŽ‹‹£KâââvíÚe}­.ü.Gb•Yt˰²×/ÀÊe¾ŒK 0-à ò™ ªBN®³²²vïÞmÑ—øÿyþùçß}÷]+´&„xË–-#GŽ àŒÑÚ„àà`ww÷Y³f>}š”gffFEEÑ–‘‘‘YYYÖ×êb±[ݬ»»»5M¹æ°õ”••É&“é§Ÿ~R00‘ØÊÊJI`Yºñl`ÝŒ·.ÈZôŸÎ«V­zùå——,Yrá­1Z›0uêÔmÛ¶UVV¦¥¥ 6lüøñééér•Ñh  É#ØšZ-È·³f”×2ñ³­¨»æ°Ê²ÓŸûP*ÿ5¦¦¦Ò6$¥\WWÇXNŸ>]õ³ø:(£Ñ˜’’"è-Èè+Ä|ðÙgŸÝyçþþþvue×®]cÇŽõòòêÙ³çüùó.\h×9tèÐA¾8qâÇÌN“°lØHË€u_’h”ÚVTT$éÍÕRî¿AG½ôt-¾vfgg;ñß*À&$$$(ãØ5VÑ:çää :Ô~h1}úôýû÷Ë×þþþÌ㸴´”ĵÖÔjáæöÿÎ‰ŠŽŽÖ²i×®äþ+·ò¯¿åFÀ"ÆÚÚZ¾r‚•¤!«ZEò=ÖœKBB‚I ûõ¨¯Ý»wWî„åè¯ÁD¢ƒ ²¾VŽÄöèуs£½_‰ŒŒÈLÚòôôôôô´À–…HªÜšŽq•fí… q˜‹¾B,Z´¨¤¤dñâÅÙÙÙâ$s™8qâöíÛ .^¼¸bÅŠeË–½þúëríܹs<¸bÅ £Ñh4—/_~øðá9sæX_«‹•£¼Ök°Y}Ú·oo§¡éøøø/¾øbðàÁÞÞÞcÇŽ=}úôþýûÉø«¯¯ojjjZZZhhhhhè±cÇöìÙãããc}­.œ,tǧy•=zxx¨ºa+ßh“vœø2*«•‚¶¸/¨8€ÆM×Â1O˜˜˜˜˜ŽAXXØŽ;ìQˇ³ W7É,X™6pñ—\d,™ó¯”³4}{qqq]]m¦õ§ÚÄ`.-uŠÃðððàÔòÇ€çÏŸ?fÌs{dk³ÎEf~9+gE™L¦œœz‡pz Á+Àè pMMÍ¿ÿýï>}ú¸¹¹9lu”ëÀ`ÝaôèÑ¡¡¡6t¦S§NæÞbï¿)×ÿgÀ X•s¯”6ÅÅÅ[·nÕ  ± `.ú¼xñâK—.;v¬©©©¦¦&33ó¹çž›1c†¼¥_«‡s0 d1±5˜µ-¥¸¶²´r+¾þ)7â$éµ×^“$©¬¬ìÛo¿5«5Ë|´5ôxÛ¶mo¼ñ†¼ –——× AƒÞ}÷ÝqãÆ=óÌ3öwÏùp¸]»vD~BCCoºé&Æ@ž³f¥vj¡• 0g ³•_322To‡Žl‚¾—––I’äååEÉâââvîÜi_×\~K6Ã7nî%š$'íÍí‘3,÷(x/þÔK&aÃȪR¿U—-éöb ­¡/Àqqq[·n•$)44ôÌ™3ráõë×[î&ÃfÁ?O—#xƒAü,^²õ´ÞÞÞâÆ–•¯ªªJ«JõBºqú´Mä  ÚˆcéÒ¥’$Íœ9óßÿþ÷•+WJJJž{î¹»îºËþî9eLdUWÛÄ#`þljæZИ­ÞŸ\ÿ=LDöTXŽ€Uâ 0ý§g=.]º$IÒK/½4pàÀ#Fôïß¿}ûöï¿ÿ¾Ý½s”Ql×®]É5­Á$Š%%âcÀŒŒñ—!¹~Ðéú¼úê«w4³¥î,hÝ¡Ð3Â//¯•+Wæåå•••mÚ´ÉÞ§º´‡„„H”þµk×®}ûöC† ‘ ûôé#—“8Õ2¥äÜ%ë4?v°`»þÛ€ªòÉï”üeHtŒÃ6ÇÕó‡N‡à¿ÿýïLmÇŽýõW­{e9tww×]Ëd“¬²Ldd¤Èí®/œ@d ˜ÃÕ«WG¥¼DÐà6þ§Ø××WþAèD´îú]NSæŽÿå/á;Æ)´€:ÌÙö™ srrlã% íaáÓ³©©É&»L¸>´kI,)'[†M˜0/xæî7i}SôH¶ë`·:݃’´.DfA×ÖÖó{! "JÐX"ÀõõõÉÉÉááá6÷ÆQN¢õUµœfàÀƒaöìٺ˙´ÚQVxyyé¶Ã/‰O¶•ÔÙV25±@W¤­×W¤  úaP[~jÜsÏ=ä£rµ.£²äZº1`Ö/+’홬µM¤®OŸ>rÀ,C‡œŸÌ‡?ûÚ±cG¥²Ä,Ó’v¥¥ÈÑô9‹¥ƒX•²²²={ö¨î@©j¯»%v£˜‹¾×××ËPH’täÈ‘áÇK’Ô¥KeÖ®õ±lÙ2qcÕ0—‰ùð”)S|||$m²FŸtزÆm;Œ¦¦¦ôôtq–´UVDVËËË+**ÌuкÑàž={æççK’”———““3pà@I’ŠŠŠÌ:¯å¢Œ€U'^©ÞH§ E"`Éjqâd›-ßµî²x.•+DÀ’$UTTˆ‡¤V¯k׮ݴi“5-ZúÏÐûî»ïý÷߯¨¨HHH¸ãŽ;<==%IÚ·oßí·ßn÷œR€ÃÂÂ̺Kž„¥jÃÄÓªí[€õS‘-æ·iÃÖø¨Nx椠™Uy’9ë”°V Dÿ)¼xñâK—.õèÑ###ãÝwß• ÿùÏÚÙ7ç£*0}ûö•Ô´P5©KèׯßgŸ}¦<ÎAë^Ž™HØ­,Ѻ«W¯^ ôAic»H¬šRþꫯ´Œ%((À¦è?=}}}¿þúëÊÊÊ#GŽôîÝ[.üõ×_'L˜`_×\ÁiMô°ªŠøùù=öØck×®%êœ^øòƒ>¨¬2÷tHÒE÷îÝåƒÍ`ݳµàh¶ÓxÆ {úã?ü ¯Ä£ƒã£GªŽõB¹J\ý(—‚í)Gyé1`¹ÄÝÝsˆ…ªüýüüä‹1cÆ(Í:tè láå—_5j”êð³M¤Î`0¸þiHZèž6H£Œ€Ÿ}öÙ‚‚ÆìÉ'ŸvF¹VÛù°ž–š?t ´Xzxx$°–±ò.IMTzôè¡z/_›Ûµkçîî®Ú ¿PWÕˆÙСC•[ojõ¢KT¶\Î „à)O6É{›+–ÍÍÍŒâŠGÀr²Ú  ÑIAóq¤£Î‚|Í€€€~ýú©VѨØÀèÖwÞ©Õ ß­[·òµV+dW€•SÆÄÿZ9ÿ øpjåé`º˜;ãL•ÂÂÂÚÚZq{þÎÏ|qýôÓOÍò ÐÐIA›L¦ëׯ?ôÐC çÏŸ¯®®>þüâÅ‹gΜY]]íHG… žñK˜Ftõ‰“‚ž1c†j_’$¹»»÷èуÎ!ÓA*s ý¢Ð«W/Ç$µÐS¤D•‰'Êu]D~j Ø´iÓåË—ÅíËÊÊ´Æ€Ú,@ÿY9þü#F,Y²¤OŸ>:tèÓ§ÏÒ¥K‡ öÜsÏ9À?ç"’¼Uê1S¢6­f™rYŸHá_þòN %ÇÇÁÁÁ/¼ð‚ª'Lãòž—2:uÒ2ãÀY†$3ƹl.ÿùÏ¡ƒ±Œ D_€¿úê«x€)œ9sf[8ŒAŽkI -·ª1¥¸b1 –üüüú÷ï¯ë§òU@U) ¤å¡*Ìö#¤}Õx×ât ×PÝKRSÙsçÎÕÔÔ8Ø=€ë£/ÀZãdmá™Â¨©®±ê.¨²RD===»víJÛÜÿýœ%Åô½fi¤²\Þ9D¹ˆx*^Ü@P€µøØ²¶¢¢¢©©Iµê·ß~«««³Î)@KEÿA6f̘­[·2…[¶l7nœ}\r-T‡cU?JŠ0”ü)x#ýçòåËÉÞ;wŽˆˆxï½÷h{???Ým¢9)hÚ7-?e´ÔZê.(¢âÁ®ë„Åœ—£Íœª|°´´ÔÆ^Z:!”$Io¿ýöäÉ“ËËËzè¡îÝ»çççþùç«W¯NIIq€NǬ§¿îx°nƒ¤6&&fÕªUòõ¸qãtäd¶9“°¬^e"{77·:TVVjå¥-èBËÞé’¬•v6+Dnjj2k-2 •¡GFFîß¿ÿÌ™3£GîØ±ãèѣϞ={àÀÁƒ;À?çb0:vìxñâEéÆÙÈ´zÒ)h:²dÚIA3%ò `]o%í Õ¬(\Y®%Øä×èܹstt´$I“&Mš7oÇOr‹ ²Ê…=zô ipg °È:`ñ™Y.\(,,ÄÌ,Ú,Bci}ûöݸqcaaacccaaáÆ×k¶ ƒ¿¿»ví"##™rUý ýúë¯u-µúb®}||äÛ•‡?2ͪªš–¦ÒULîZù^%—9R’¤Q£F1åt¿rIxxøÐ¡CÍú²"Œ1B¹‰sᯠæÛvÂÂËËëûï¿ç=óòò"¦«fhµrÔwß}7§;]#`ùºK—.’bê5A>H‘>KnV¾K˽[n¹Å,çU«”ï.+ -n Ðóà§m••Êêîî¥ 4ÂÂÂFŒA7ň7s=1Šã3¤*Íhã[n¹…+«VÑn+瑉7(ˆsØd2]+{¬ìýñÇgJ´V@Ij2H¶•Ö +µ<±XÍ d‡ŠCEEEmmíO?ýTZZ*Ï’S ¯[·®¾¾^y/”@桪Z"ÄDÀ´¶aQþ°V_Êr‘F´"àøøønݺñ»Ö…£‹ü¦ÌMA;QnŒFã¦M›þ÷¿ÿɳ—™,ô–-[ÊËË%Åæ”Ð]€*úË€$, ZºÅ·aÔKDÌ81«üÐç¯Ê*þÂ$­Fø~Zà¼Î’äK—.ÉûϨD¸xñâÂÂBºö§ ƒØlÈÓ¿oß¾±±±ªUªIáƒ>8f̦3ù:((èùçŸWjöìÙ³é}9$î@¯øœ/ríááA6jæ«]ÇŽ§L™¢Õ¸*–EÀ"Ùr ǾL,£õBk4®(À………ýúõSMºÒе¹¹¹±±±~~~~~~±±±Ì)7üZ|A½ùæ›gÏžM«ç|???ooo~_rI``àܹs•µžžžÞÞÞœ˜¾—0q"`¥;w–çy1µJ{???²U¸R m’RÖ Êù«íDVV–¤Ó" ÐÅåØd2Íž=ûÕW_U­¢!åUUU111ÑÑÑ999999ÑÑÑ'N$§%òkE`ô^)EüBekªUÊ{ ÀiG«e‚›››\"/áUÕZú«im_¥+óJºwïîççÇñ³cÇŽÊ·(­6ùYq³}ûvéOMݳg]%ÿ³uêTyf53|«¥vHàý÷ßÏ©UÕfNÜÜÞm…Ö‰ MMM_~ù¥$C¤hã¸Ê:à]»veff~øá‡ù¢gÏžóçÏ÷ôô\¸pá?ü`W¯TñÐZóc$(3ºÏ>û,ßI’î½÷^yZ#¢AAAò±N’"xU*œÈ çZo!’$uíÚ•¬¦åÜ.Ø‘Íá¸rø{òäI޽ÝXLBBÂÒ¥KÙ£«DÀÿú׿6nÜHâ9]¦OŸ¾ÿ~ùÚßߟ‰hKKKIÔ˯åÃÌ»–@7nœÖ‰4Z"¡«Óârh0•6Lƒ!88øŽ;îà7¨¸›•ýæØÓµþªeÁFì‡ê$,Yt•f€DBB‚I ûõè*|áÂ…°°0…ÄÕ*úG‰ˆˆ8qâ]›‘‘1hÐ ‘ZË +|ZYe彌xÜvÛmÊ›Zºt©§§'Ç@ëv¾·Lxª%óáØó› eþv”?‹áÏé úc[˜ÿ“Ë—/W„Õ«W/æÌݦmW`Õ—ÎÛÇÖ­[‰tM™2%))‰®MJJš:uªH­Y`V1i)„“&M’ÔQ$^°`Ù¯Šé>¸—@‚˰°0ñ^8C°raLL̸qã8Z«5çô5vìXþ81};ýõƒê$,­!a£Ñ¨5]‹|Œ·Ÿ·WÆU˜Ïĉ·oß^XXØÐÐpñâÅ+V,[¶ìõ×_—kçÎ{ðàÁ+VF£Ñ¸|ùòÇÏ™3G¤Ö2”'¨¢¥Iü °ÈGe9#¥òîWZŒ?ž±øá‡ûõëGÜÓfU7‚ƒƒå„¦ŒÑ{I[ÎÝÝÝ===å®™‘Δi§d¡%IRn¦¦‹¤°˜Ý<m‡–!Àñññ_|ñÅàÁƒ½½½ÇŽ{úôéýû÷GGG˵¾¾¾©©©iii¡¡¡¡¡¡ÇŽÛ³gH­˜¥…JæÍ›§5Ídàm╤&ùJãððp2o‹¶%ÃÌ ªº ,WÖe¼ ¼é¦›{Õø^Õ‡!G´ ¤„«V>|8##ÃÎnZ®2 Z ý䊉‰‰‰‰á‡……íØ±Ã²Z ÐÕ`I;Ò}þùçiK‘©LæJ²n„MTZ._¾üìÙ³;vì«<<<:vìHüÔr777¥¥ò.NB[¢~“x`ãÆªÆœoê`+**:wîL’½Ê°xëÖ­=zôˆŒŒTÚ-#nÅtíÚU2s.±³nçHZPPŸŸŸHïJ‰•E”k ?m@RÐLS‚¿‰]UY©—)))ÕÕÕZ)hå-Z›uäçç8pÀNn\°X¬jî¸ãŽx€IÉŠ„ŒŒ%çvŽ'æ -§œ(« Ür Ýå(ºx˶B0`7nÜêÕ«ëëëµ²ÓÊÇóÍ7mâ$ E¶þ£ßšA\UÑâ78a„[o½UËX5Ý-8fl®¨k ðǬھj›¤þޕּUØZYsssÓÓÓ›ššèÂÓ§O3󢥓ÕHGЦ€[‚j„jVl0h«U4£F2ke3ãØ¼yó”g몾0⪪ôªS®È¼q:YÍ$±Uch¥·J߉–FrÊIÕÎ;³³³µRЀ¶ØöèsÊÉzÈ–ƒ ¢WÓªŠ“Yp iµ“$©{÷îÝ»wW¯]»öóÏ?7«Gr”¡Y¼Ìûï¿/Ÿ¼ÄŒÓš-ÒšY'=Ø­`­Xi hݸģª¥@” ÿþÓ¦MÓ2°Œ±cÇ>üðäÁ¦TÇ€•6ªUÇŽã·IÎ9–¸a(ƒ¬òÌ2-KU¼ãŽ;䃰øC¼4ò mGÂÑHÕÁ]ebY+Õ õ ­áºË\™îÝ»oذ)dÔbìØ±^^^œF˜”¾>sæ ¿q>ºú-×:”oÀåUSÐ$,‡Ôª²M7ž­Úß¹088X«ÊÁ3ýÊ‚ZVV–@jM´5Û‹Í›7jÕjI‹r›-]E1 ºGÿ’òN:‰H”rŒVÒ~i  ˜uÀü|ø€”µ“'Oîß¿¿j§ÌíüÆ9TÜÔÔÔØØH—ÈÊZSS³oß>º¤ ™5&aÐÖ€›Áˆ#þïÿþc`ÁŸÑ¹˜˜˜5kÖpZÖ‚?Ÿ‹V2Ým8e—zõê%úDºöôôôöö¦-É©Pôg&j‘QaeZúáááò»‹êî´½Ö¹Ì9²‚0dȵ¯nK”»F“r-@B Ú,:tèÀlx$ÃOÕjaÁ@/¿JKþé=zôxâ‰'Dzž’¦:ÙJY®¥ÓœŽÈ&!±JO?ý4ýQU€ïÝ»—)dvÂâ çååÕÕÕ9sæÄ‰ööàx Àæa«Øâ[DZãH²ý„GK•ú'òjþ2­1MÉ ¯ï¼óN¾’wËbô5!!áÔ©S’ö™HkÖ¬! £ï½÷ÞS§Nal€Ö Ø.˜5¦+b¬)ÚVQ81«j‰ò#혱¾ZeDßΔ0ß:<<\é ½Ÿß[Û"§šùLMM-**’ÕWuOÊ/¿ü277—”`×hZ1`óI™ >ÜÍ26Ë1N›œ½Aø·þ„s—rL×@îË” v*I’»»;Ù<„9Љÿ $Ë®¼½½W®\)_;+nllÔÚˆCë@kl6Z"d®”Òëstu]7m«+òõ°aÃt  Gù^©£'%q”··7™íÅ?(Ik€™ˆ7Ù¡Ú‰ËH­àž”ظ€Ö Ø9 †¨¨(rm}ƒt¦—6//¯ˆˆe¹AAAÏ?ÿ¼Y½ßqǪï#FŒ˜1cÝo‡”Áº¿¿?SB¾”t£Ž’ÎkÞµ²;Á p9“°8–ª¬Y³¦¬¬Ì& ØË”kŲŒ¸ŠwÁ|äDa+8[QJ\q¥K’““ßxã N/ï¼óNII‰M8°Í0wªm¯»“³nãv éäEVü¾8ƒ»œ—UekŒ“=ô}—êÂ_büøã“Búücåé6A7´IAWTT”••‰DÉ€Ø<uN×ìž{îyä‘GˆððX¤/e„jCä!aÁafÚ }:YŘéJ/Rд\ ÀÎD\Í =í k ôÒ'?øàƒªÆœñcéÆ]'%µùÌrt»lÙ²éÓ§k½hÍ‚VízĈÑÑÑ"gTØZ8O:USSCªŠŠŠ”ÆŽó à( À6Ã2ÙÌÙÚÄFÜŒŸŸ_HHˆxËZ#ÄJ²þ˜ý%ö²÷îÝ›ã'­ž0aˆ#8­YŒ–jÊÇ*#û}ûö‘Éeœ0ÐÒ›Ç=÷ÜcÃÖlËÐa_TT”=ÒªÄ___FÌzù°À’IAK7*4c/r`ƒÖD-"’=–4fD3-`¢­°y®uÀ|(e¤Óï¿ÿÞíóK,xÖ„Eþôôô”'X “ÉÄï:$$¤  À~éú}ûöqjugGk™‰4h`’ÍКdÖ9µŽÙÜØ²éTƒ!44”žl¬ mU[#µ³gÏ–$iäÈ‘dÏ,ÎX2ç× #ik–~‰píÚ5Õr£ÑÈH,g"fAЊ;†_6'¶ ;Ý/éááÁ‘[Õ›l»ááááããóá‡ÊË·´ô›|dæ„3rÑ¥K;½-é¢zJ­Á"™gúF[;pà€ˆN;^HÐ¥u———±üûßÿž˜˜È¹—ÙMšŸX¸pa§N”g:ŒüüüÊÊJùÚÜxóæÍñññJ@‹l3,gm; Ë®ZÂ×Qs¿» $Ë©ª¦L ,P6È?•Á‰¯,ÇÏËË“¯•Ë߈£¼¼¼¸¸ØAŽì ¸• ('vR??¿‘#GšÛ5°–h¤ÒF™‚f&mimKB Šƒ•ô&evB¹–2þòË/¯^½úå—_Ò…ÅÅÅæÎÒ¸&`›a¿ˆŠ®Í˜1C>òÏN½ËôîÝ;%%…øÃÔöë×ï£>R½‘v^|—üÑÝÝÝÝÝ]+îÔ©“j#Zº®²Ó…>>>íÚµ ÒrÒé-(( %’$}òÉ'EEE¥²›7o~å•W”-8Î]€í€Û:À´·^8#"""""DfA[Ó—»»ûM7Ý$"¥"n¦ »uëÖ§O&œ0aB@@€$IaaaŒ=Ù CÙ ½~‰Ž€iFåíí-þE,F)™¿üòËÑ£GoD @ëÜ2™„å˜AMÝÑ,pLHU¥¼ãŽ;HʼLœ8QR‹néFÚ·oß±cGÕ˜)!ûZüüüÌý"ªœ`M­yä‘G³õ’+0xð`¦äСCݺu ìØ±£Ö]~~~ª"­ šUçOÝ{ï½#FŒPmY+ÀIAÛpËhÕXiséÒ%Æ !!¡´´Ôb ®¨¨P®H8 —`“É4{öìW_}•.¬ªªŠ‰‰‰ŽŽÎÉÉÉÉÉ‰ŽŽž8q¢¼$ÃÊZçòæ›oÊ3ƒƒÍ§†Y íÉÂ… cbblÒlïÞ½»víÊŸ¦5âkÖ,¶ÁƒO™2ÅK’ôç¾ôð‰'JKK³²²2ùâÈ‘#gÏž•$iß¾}ÖüKމ‰IOO·øv€•¸œ¿÷Þ{ݺucöZZ³fÍÈ‘#ãããýýýýýýããㇾvíZëkÛŽ×`Õ)QªffµöÌ3ÏÐeÈ…îîîíÛ·çÏÆRvJ ™‚9cÀ"j-NII‰tcœ””$K¬*çÎûÏþóä“OÊ6GÀ˜A €sq-NOO_³fÍêÕ«™òää丸8º$..ŽÌ²¦8UI³LÉFŒÑ«W/­Ö”ÉdÎ$/úO¥f»¹¹1ÆÖ¸Í?²Ëˆeyyù¡C‡®]»¦j h¸Ð,èššš¸¸¸uëÖùúú2U™™™QQQtIdddVV–õµmŠØp«8œPÒ†]ª#£Êº"íææÖØØÈØ#‘@GÀ"šÊß»CDÀ8àçž{nÆŒªÛ)Fù:B`` ³¦¶MaÃaK[q×]wùúúZ£g̽YYYtƒü–UÅØ`0ÜvÛmÓ§O—Ç)TÚÞ°’K—.ÝrË-´qSS“Ö¦•€«¤ wíÚ•™™¹hÑ"g;r5œíWK‚þÆÄÄ 6LÕL°5ºÜ`0têÔI^M$©i§2ä¥?ÊcÀíÚµëܹ³òÄC‰šm˜ ˜ÊÙfÚ¦¹¹ÙÊ9̈€ IHHP}æÛ¯GWàýë_7nÔZêïïÏĬ¥¥¥$®µ¦–I °YtéÒe„ L¡mÿM·k×nÀ€ºr«„ù¦&×/¼ð]N4Þóí×£«ð… ˜—rqâÄ Ú>##cРAòµ5µÀÞDDDȯ,ö{—lß¾=“]7 “&M"…ƒ!22R·æ_ÖŸ’#`zÛgzÄ7%%%77×úGÄ'â*¬úÒA.¦L™’””DÛ'%%M:U¾¶¦8+Õ‹s;-‘‘‘C‡%UÁÁÁÊÛUµVÒH;3vÕ`U¾ûî;rm4ëêêäkk–!ÙÀ-€¥¸Šó™;wîÁƒW¬Xa4FãòåË><Øæð#à?üP’¤~øA–Uùœ†S§Nmß¾`“Étÿý÷k奓°€ƒ°‰LÆÄĘգêÒ^UKåµrUY+¥ûúúzxx\½zUÜC³àËæååɲZ×ÖÖVVVªj­½w™è‚8»¦m-HA«V1s§ÉõÀýýý9­Ùuj´¤ 4ˆ s•'2³±äJ Á80h%Lš4‰$ÁE$·<üðÃóçÏ'qð´iÓÂÃÃ%IºýöÛGŽ©lÙñ£Â2F£‘ sef–Ó³²²L&Srr²S|H`Ðjxã7d´:eÝ­[7z11 pG¥u/ᦛnºå–[¬ôG„æææÂ­[·JÔb_ŽË¬ZµêìÙ³ï¼ó‚`œ´l'$ †§K–,a6Å$7Ò[b‘òððpr°ãI‡sæ‡êª_:_ÍÇòEMM2MM“’’b4íá0@ Z-âÚLÌ&L˜Ð¥KfN–Á`3f ™}M×vëÖ-00PY®UbvíÚE®ÅSÐD}µ"à_|1;;ÛŽ~Ðæᔵ³¤k+'Mš4iÒ$ºjÆŒ&LðööffM[Ö©­P„e2™âââjjjh­%!2gr5²ÓØ0hµøùùuéÒE¾¶XƒµnŒˆˆ¿õÖ[%IšALA#ÀÞ@€A‹G7Ð\´h‘ßÿ×Þ‡Eq¤¯a¸tÁÅ3*(ÊÆhÐhty$nLñXs˜ã‰n\Yb¢?5b\®&ñIŒº®¬ÇzÔGðˆ¢Ñ¢ñ‘Se¸‘CÀafú÷G=öÓvÍÀ=è÷ó‡OOUw×Ke&ïTwu›[çNÈÝvppçVQ¼ß1äb§hñ888Xb|\UUÕÒÒB¿ÐÀͦ¼0}YXXÅ=FÀ–† ]›éiLü ܰB¡ˆˆˆÈ&`Z2hРˆˆnnb¹4¯Ï?ÿü?þ`_Ò šœœüðáC^BåMÖh4wîÜá–̾·oß 3sÐO+$`°©&aµKäÞ­øZ´¶[·nôe=!“'O^¹r¥ðzµx£æB‡¶ÜôyõêUNÇ»]\\Lk >%l°„¢Óéîß¿o‰°žBHÀ`%6›}ʼn,T¹hÑ¢)S¦°ûÈåò€€Bˆ›››}Û[nN¸ÁIX„´´´¶…&†Ò­ÁKи1 `FHÀе™¾ú/5 _²Ûôóó“Édì˜Í»Üõ³Új%88ؼ‘ ñÆÁâ{3F0#$`èÚ"##-:¶æÞô%mÿ ·Š»ÏÈ‘# ž™—-D˜&éˆvþüù¿þú«Á=…#`ƒ§m÷ù%00Xm^…_ÁÊÉÉ©Ý30ÁF…?aF«Í:Ža˜œœœºº:ƒ{b `eHÀí¹"M;::ò°Èþ´œûD“Ù>|øÞ½{Ü­V«Ñh²³³…CØ›7oîØ±÷€¬  ³  —èââ½L„RŒ« IDATltÖ¬Yf Þ “'OªÕjn²Ôjµ Ã466ò0Ã0yyyûöíÃÀÊ€¡k³Âeív›Éd±±±2™ÌÑÑ‘<>êõôô¤ÛŽŽŽtÊ´‘ç4Ã0ìK­VK7„ ˜»N‹·Û×_½lÙ2Ü0#$`°Ë¥Ï,~ØÈªøøx™L¶xñbòè—ƒ©gžy†î —Ë銕¹ÓÝõë׿ýö[öe[ ˜Â0 ½CL8Wž¹ƒÝsçÎ%$$455ay,3Bë±ÍIX<âA¶uC788øÖ­[ìKá=à¥y³ÈÊÊJOOg_¶•€]\\ÒÒÒØÌºeË–S§N‘Çï·¶¶ÒSÂ%h3²“:xZÈåò>}úH…QDîûzôhYYYdd$›k†y÷Ýw‰`Mi00X‰³³³øZ2~0úꫯs6êÏþ3]©C¸]´Ò¢xi»¤¤„nìÙ³‡·gkk+;ÞÕëõçÎ+))aF­VB†¡ƒ{ön±¥#xJ C×f‰ ¹í>w$²HHÈâÅ‹/]ºD¡·„…CaáQFž¼Cx™²¦¦†n9r„·gkk+›­õz}zzúíÛ·õzýéÓ§íííiFÀæ…{ÀÐå™}–YN%>“Ë “°ÜóÁƒÜ0y´j‡^¯ÏÌÌÌÎΦ»Ñ}Dð¥K—¶mÛ&ÞÖÁƒé·@àëPÎãeSá”+á=`n­J¥_Ú`0îîîk×®ììÙ³í„þH^^; šþË&`†aª««én È$༼¼´´4ñ¶RRRØŒð”C†®M©Tþç?ÿ±hƒr³òG}4}útú’^Îå&退€¥K—ÚÙ=v3ˆÎ‡i]©Töë×O<†MÝÒjµ ëÖ­£#`šz«ªªôz=;»ûáÇt¾´ðð°°°ôôô²²²vï755‰¤ð¦¦¦²²2ãÃèÒ€¡k³³³‹5ã ;t}˜=„·Á¥T*h-»wÏ9sæÐúè£3gÎG¿]xçΆa4 Ý'99™^‚nnnnnnæ~ÿþýwÞy'>>žF·õ³ÁtÂW[aœl€. À¤ÛÀm]"ž0aûÒ××—Žq зo_á!ìD'ÊÕÕU.—;Vx~úÆ|KèÄte½^OŸV:räÃ0W¯^ݲeËÇi-]Jša˜5kÖ|ñÅìQ 4ßÓFØH„M0 3gÎ^ §´ZmkkkGÃ袀ái'¾DFG'Lѹ)êí·ß¶··—Éd¾¾¾>>>Ü_O¢ÿnÞ¼™{žnݺÉåòÓ§O÷ìÙS8?~¼Á°y:÷ô0¥×ëõz½N§{øðamm-[þÛo¿Ñ{ÃÜì~ûöíòòrš¹Ù™\m¥ZuðàAv`Í‹ žHÀ¦2&CÓ«ÐD0K‹]>šwBù#û÷ïçVÙÙÙMš4‰÷µÀÇÇGØ¢ñ³ …¸Ë`ñžÞnjj:pà7¿644Gùž{ YxZµZžžnpéiJ«Õ² †<ñ€ø:÷À.!dĈ¼Ÿ»gÏààà`ðVqBB¯$$$„Ž€iù!Cx§šõ´qãÆÓ§O³§Õétì¤k€'0<íÄרjw–õˆ#èÄ(NNNÏ?ÿü† æÎ+ã _‘~á…ììì …ƒƒCTT!¤´´ÔÏÏO-›˜ivqqqrrò÷÷ïÛ·¯ñ8/µwHQQý^RZZZPP@8·œóóóçÎK¥äÆÆÆçž{Ž’’’B‚;ÎÌ̼rå !äÖ­[ Z­Ö”[×] –¢xLGgD¯[·ÎÈ=œœD0`ÀÀǯT* ÅáÇ…»Ñ…!i„4}òÊìfctúg(zù»ï¾£™˜½âÝÔÔD·é¿t¼Kiii¡ì*´–ÎÆzûí·W¬X¡Óé°Ö4<=0†§½½=ï™3.NiwèI·_xá…¾}û>|ØÅÅ…7 Û××—âããÓ§OŸ¨¨(î˜MÀþþþ2™L¡P´Õ¨J¥â®ïÁ £sCኊŠwÞyçúõë4³¹üáÇ4õÒ»Èz½¾¾¾¾ººšîIké…k6ãÒ<ÝÖ˜a˜––ö%Öë€'0<íÚ]@ÑŒhúdŸ¶··'„DEE}ÿý÷켌xàÀBˆB¡`¯Wó.AËd²¡C‡Š'`???‡ÀÀÀáÇÓ¶•v/¡ÔÐаeË–ÌÌÌΘMÀôßåË—ëõúíÛ·§¤¤äççB*++ !×®]#œ¬ã ç¡W¶©Å‹þùçt{Ê”) ,xã7:3€M±•|ñâÅ·Þz+ ÀÁÁÁ××7::úàÁƒÜdÜÚ’’’éÓ§»¹¹¹¹¹MŸ>ýÎ;Æ×p >|Ò¤ImbË–-|ðÝæM]¦ Þ“–Ëå¡¡¡¤LÿIÀnnn2™läÈ‘/¿ü2-qqq‰ÁHjµšŽMÙÄÙÔÔDsgiii]]ÝÍ›7u:ÝÆ !ô‘b:{«®®Ž•››ÛÒÒR\\œ˜˜˜””Ä0̲eËôz}PPPkkë7–,Y’››Ëþš“V«miia—èºl%/\¸0$$äÇlll¼víZBBBbbâŠ+¸û0cË###CCC‹‹‹‹‹‹CCC£¢¢Ø9œâµ<£Fzå•W,ÚD¯^½ØûÁtÌ%Ëårú`ÒÔ©S 'Ëd²™3gÎ<2¥RÉ=°[·nS¦L !„¬ZµŠ<š>-“É”J%]Ѓ˜–€…*++é öþýûqqqyyyz½žŽ’ ÙÝhÕëõùùù¥¥¥µµµtˤ¤¤¥K—B>ûì³—_~yÍš5ÇŽ£g „´¶¶fee™’€×®]»hÑ"þDó°•IXÜ_(swwŸ8qbPPÐÈ‘#?ýôÓvýþûïÃÃÃé'–²téÒ›7onݺuáÂ…íÖXïi`ƒ ˜W"—ˇ V__ïååÅîC³ò믿þûï¿yxx¨Tª!C†lذÁÎÎîùçŸW«Õááá555ï½÷Þßÿþ÷Þ½{Ó£-Zäèè¸uëVv,ŒÁõõõì6»°†pÝ«ŒŒ ''§´´4™LFïWVV²ÿë_ÿ"„dee±+V8p@­VÏ›7O«Õ677™€/\¸àìì>>ööö½zõŠ‹‹ËÉÉa˯_¿>lØ0îžC‡½qã†1µVѳgOºŸŸïïïÏÛ!:::::š[¢R©¢££ããã=== !®®®“&MbWËR©Tì Y.—ûùùM˜0®½E‡¶ìª*•jÔ¨Q„www™L¶zõêË—/+ŠM›6íØ±cýúõ[¶léÞ½»0æo¿ýv×®]¼«qûömš\ ®üÜîLf:Øe_ÖÖÖÖ××WVV644”––ÒÂÝ»w=z´´´tÿþý Ü;wîÈ‘#´ª   ''‡&ì“'O2 3zô說*­V›———ŸŸíÚµÄÄDBHJJJaaaqqqGÿÀΡñX§-°e¶r šâ^|›0aÂÊ•+Ù—111ñññaaaUUUxñÅOœ8AçsÖÖÖº»»sÏãááÁNÙ¯P```§U*•4÷èуým`šw !...µµµãÇ_¸païÞ½SSS !iiiì€[&“yzzvëÖÍÞÞ~òäÉ´pÞ¼yü1Årss{ã7ìíí @±³³Ójµ*•*22’)éééYUUÅ‹P.—sêU*•---ÜÙÛ¶mëè_]]]]]]M©­­1cF@@@QQQuuõ«¯¾š™™ù¿ÿýïûï¿¿téRBBB```eeåO?ýäååõ׿þõÌ™3‘‘‘—.]:qâDqqñ©S§Ö¬Y£Õjoݺ5cÆŒ~ø!66¶ªªêêÕ«ëÖ­›?¾‡‡‡«««F£yðàÃ0uuutèlggçààôÛo¿)Š7nÚ´)++kРAÝ»w/,,ÌÊÊ¢k–‘GÓ¹¹ÿ­oܸ±hÑ":¼ÊÊÊ.\˜œœ,2çºÛJÀôÃYQQ‘žžŸ””ľ‰Ù‹Æ½{÷þðà Œ%K~üñG‹ÆcðyÐ+Vp¿HÂÏÏ®–5nܸqãÆÑB¹\NŸVêß¿¿ŸŸ_`` ]‹^ô¦»±“¶ ;‹ =~üxDD„N§ûù矣££U*I+•J•JåççWXXøì³Ïúûû÷ë×/33sÖ¬Yô®-—‡‡÷ªrÿþýsrr¸óš2âÔét¼Ÿ© „,X°À××·¾¾þŸÿügHH½õûßÿþ—Ö¦¤¤BfÍšE_²Ï}ÑóäççgggÇÆÆÒq³“““§§§““SnnnQQѬY³~øá:yÓßß¿Gï¿ÿ~llì”)SŽ?>f̘ùóç/^¼øË/¿ìӧϤI“Ξ=Ëþö3þ·¿ýóêÕ«÷ïßÏÊÊêÜßž››»ÿþ·ÞzËÃãsg袆jÞù <+W®4fÖ‘É þ&‰-8uêÔܹsKJJ Ö–——Ñçú½½½¯^½êííÍÖ–••…„„¨ÕêvkEÈd¶Û9UVV^¿~^âæÞiæihh8þ¼Á§­jkkÓÒÒbccéï1‚[{òäI:ü­¬¬ e¦wïÞׯ_/..^¾|ùðáÃ_zé%BÈåË—322þô§?]¸pއþú믟?þòåËt¡ÊÍ›7³÷wYýúõÓh4ÅÅž¾¾»wï¦å111GÅ*•O¹ãdz·o¬Ér¹ÀvsLCCCÏž=¹ß—¹ÊÊÊúöíKpddä’%K&NœÈÖþôÓOkÖ¬¡ ϊ׊@Ëå[œ„EeffÒ{NíÛ·o̘1t{êÔ©;wîäÖîܹ3&&ƘZi0¶aâĉ©©©åååæîݻ۷o÷óó;vì­ŒŒÜ¿¿Z­Öh4IIIžžžYYY´¶¾¾> ))©¦¦¦¦¦&11‘^6¦V„ítHÅr¹ÀVFÀK–,Ù¹sç AƒœœœÂÂÂŽ=zðàAvræÒ¥KwïÞ=dÈ''§±cÇæääœ;wŽ.ËGquuÍÈȸ|ù²¿¿¿¿¿ÿ¯¿þšžžîììlL-€$p›³M¸ Oã=`€'0€€$€ $` H @HÀ@î’lö÷m60bñÙl`±uŠÍFl86› Ì¢°ØS›ly%,›Íf#6›ÍF[§Øl`Ćc³ÙÀVÂx H @HÀ@€íN<“œL&“:ž…%0€p @HÀ@0€€$€ $` H @HÀ@p›JJJ¦OŸîæææææ6}úô;wîX³u™€ñ±™7òß~ûíý÷ßïÑ£‡Á_§0%ÓãMª><{öìk¯½Ö³gÏîÝ»‡‡‡§¦¦òv°ÓÚMÂ7ÞÅ‹ßzë­€€__ßèè胚«uSbk70ù´–••õë×ÏŒ­›+6ƒIÛi–k½C±!ÖØØZ\\\\\ÕÔÔd͘ǛÙ#Ÿ={¶——×ùóç…U¦Db–8Eb£$éÃ_|±²²255U­VõÕW+W®Üºu«tšxlv!dáÂ…!!!?þøcccãµk×W¬X!y¿‰&m§q˜;wîªU«¸…’BÛ Œ­’°Ó,Ñz‡ccÀõë×ÇÅÅqKâââ6nÜhµDþÓˆÇf¹È…!™‰yã4Ø]Rõa||¼^¯g_^¹r%((È,M›Þiâ±16öÆ»}ûv=LoÝì±qcl£Ó¾üòËÙ³gó‚±…N3˜ð%—³Pë ذñãÇŸ8q‚[râĉÈÈH« òþÍr‘ C2%óÆÙÑlÍØ¼{÷î°aÃÒÒÒxå¶ÐimÅ&$í/##ã™gž1½u³ÇÆ LÈšTTTÄ-±‘KÐâ IûN3Wë !6xðà+W®pK®^½:hÐ ©âa8WÀÄc³fä¦Dbý¶f–––Nž¬¨¨˜4iÒ_|)¬•¶ÓÄc’ö—™™9`ÀÓ[7{lÜÀ„¬ÙiÂA[hbë&Æ&˜´ï4sµÞáØÚ?åêëë’’’jjjjjjƒ‚‚­ÓzddäþýûÕjµF£)((HJJòôôÌÊÊ2&6ËE.|·˜‰yãÆ&a†„„ìÙ³§­Zi;M<6ißx'NLMM-//×h4wïÞݾ}»ŸŸß±cÇ$ï7ñÀlíÓÊý,ØÎ'”˜´f¹Ö;p› §M›æêêêêê:mÚ4Þý ‹JOOõðð°³³óóó›={vNNŽñ±™7rñïm¦Dbzœ"±I؇£ª­­5KÓ&všxlÒ¾ñ222^yåÚz¯^½¦OŸ~ñâEsµnJlâÙÔ§•|•öÚV`ÒvšE[ïPl2¦Ï$XîH @HÀ@0€€$€ $` H @HÀ@0€€$€ $` €EÈd2©C°iHÀ`H·… Á0ŒÔ!Ø4$`€®áÊ•+'Ntvvöôô|÷Ýw›šš¸ƒÎ3gÎŒ5ÊÑѱOŸ>Û¶mcËe2™N§KLLìÓ§B¡þú믹§9°¹¹yÁ‚ÞÞÞ܆îÝ»÷Á¸ºº$$$´´´GÃ_Ù#ìØ£Ž9îììììì~ôèQã#xb1`órss½¼¼¾þúë²²²²²²¯¾újæÌ™ìç7''ÇÓÓs÷îÝuuu¿üòK@@À©S§h!dþüùŸ|òI^^^ccãéÓ§÷îÝkÌóæÍ£UÜHüýý·oßÞÐÐPXX8cÆŒ%K–°ûóbfK.\¸àîî¾k×®ŠŠŠòòòääd•JuéÒ%c"x‚!t3gÎ\½z5·ä³Ï>c3ÜìÙ³×­[ÇV¥¦¦¾üòËt›òÿ÷Ü=:zôhc\¿~½xT555ìþ¼Z¶dÚ´iß|ó ·ê«¯¾zå•WŒ‰à † Ðx{{pKòóóÙ tëÖ-¶ª¦¦ÆÏÏnBòóó¹ÖÔÔ¨T*c,,,ä…ÑÜÜüé§Ÿöïß_©TÒKhݺuc÷çíÌ–<ûì³%%%ܪââbc"x‚ÉL”°yvvvŽŽŽlIss³““ýü* FÃÝ_.—ët:òè«\þØl™LfÌÆÞÞž[ûá‡æää¬^½:88ØÙÙ¹¥¥E©TÒS±ç¶âèèXWW§P(ت‡vïÞ½,!À “°ºOOOµZÍ-á¾tss+--å~³¦I”âå6.ñyÙ—²ÿþ­[·†„„8;;B Œ ÞÛÛ»¢¢‚[RQQáããcL„O0¼ïº€¨¨¨}ûöqKöìÙÃn?þСC8mGlnnæŽÂÿýï³ÛŽŽŽ¼Á4+44ôÈ‘#ܒLJ††v0X€'Ž•.u€ rss½½½7oÞ\^^^^^þÍ7ßÄÅűŸßk×®õêÕkÇŽUUUiiiܹT³uúÀ™3gÆÅÅ©Õêòòòµk×þå/aw--–·›Þ:t`uuu\\œ»»{=æÍ›×ÐÐÀîvüøñ~ýúuëÖ-áž!%%%,,L©T*•ʰ°°C‡ F¼à ƒ™]ÒÉ“'ÿñüþûïR„{À]ôiÓ~þùçúúúªªª~øáÍ7ß\´h‘ÔA@ça Ð5}zذaîœOõz E/£Š^"†P A/£Š^"&f(Ù­ÁúÛßþ–žžîfu CòªF;;;Ç·}ûöÄÄD7ß‚‚Zè%bCÑKÄJ!è%bCÑKÄ|g+///11Ñýê @†äU`ýñDwP:ÅO÷aÆRè%bCÑKÄJ!è%bCÑKÄ|ç!Xýæ7¿‘z£—ˆQ E/C(… —ˆQ ÕÖÖ&õ”–­X±Bê!Œ^"F1½D ¡‚^"F1TPPÔCPXr¤Õj¥‚Àè%bCÑKÄJ!è%bDCû?•ä-að¬ÁÇTÁÁÁãÇ_µj•^¯wóío¿ý¶x;Ƹf6›óòòrrròòòÌf³$c‰â§0ƒ>Îay¤R©^|ñÅgŸ}¶Ï·/^¼¸  Àû™êõú•+WVWW[«ÑhrssSRR¼9Ì`ù–¢¢"©‡ 0z‰ÅPô1„Rz‰˜¡,‹Åbijj***Z¹r¥Åbyî¹ç¶mÛf}µ®®nõêÕ111ÁÁÁæg?ûYKK cL¥R°ÿNƒ¹8SX&“)##ÃV]1Æjjj222L&“à?KŠŸþÁ ø8kaÄûÛð©§žZ·nݲe˶lÙÂ[¸páÞ½{»ººl'<øàƒï½÷oöËb±8;SØ1ççç/_¾ÜþøæÍ›ÓÒÒ„ýY.` úÁº3ÊÁƒ­¿ÝµkWgg§Åbéîî¶.ÏÊÏÏgœ²Ì:æâLa•——÷ë¸â À èºë®cŒFëo[ZZüñë®»N­VÏš5‹1ÖØØèðîŸ9qqqý:®8(°äˆÞrz‰ÅPô1„Rz‰˜ BUUU1Æ"##­¿}ê©§þò—¿ÔÕÕY,×Ï ºæ@¤¦¦Ú· Óh4©©©"ýD/Sü&¬Áçp Ö½÷Þ»qãÆôôôÜÜ\ÆXxx¸Édú÷¿ÿ}Ûm·µ··‡……ÙÞÂ{»‹3…U\\¬Óéjjj¬¿Õjµ7n´Î™yxU„ZŒI˜Íæ²²²×^{mÓ¦M*•ê©§žâ¾m4׬Ycý­Ñh ·þº¸¸xÊ”)!!!}ž)””””²²²¯¾úêܹscÆŒY¶lYhh¨°?BBŠŸþÁ ø8g}°^ýõÌÌLëo—-[¶uëVë¯CBB&MštôèÑ¡C‡^¾|yäÈ‘/^´¾d±X\œ)~oÃS„¾Å¶&‘ z‰ÅPô1„Rz‰˜t¡üüüFŒqÏ=÷|ýõ×¶êŠ1öÖ[oÍ;7$$$))ióæÍ¯½öšF£‰‰‰aŒ½þúëÑÑÑAAAS§Nu}&¸OñÓ?$g° Crr²Ô£½DŒb(z‰B)½DŒh(zÄ«"_,°À p‹@1P` –IÞžNpô1Š¡è%b¥ô1¢¡À}Š_À„5XýÕÕÕó̯¾bŒýá;\Ÿù¿O}éÎi …F£>ÊZâ0Æ~‘5wôèïº}^¨5­ËþÚúkªÕ¢¡ÀP†’ãõ¶«ÄP/í`lÎT\ª¬¸$íÆOˆŒ)íxP`ɽî)ô1Š¡è%b¥ô1¡C©U*f8VwËm“¬GJŽ×…„twõtttÛN«©nþÏ–²sçš-‹F¾ô¶øñ±Ãl¯¨Þµ³¢ÅÔ6:&üŽå‰¼qühÝ††«aaA‹—ÆM›ángÑÊŠK;¶•,ß@-aqr+°°È]Žì7W:z‰ÅPô1„Rz‰˜Ð¡ººz&Ä o¸xµáâUÆØ¥&s}]Ëĸá]]=¶sê.˜þúöÓåMí]Ý•g.¿ó}Mu³õÕò²ÆÏ6¿rÙÜÕÕs®êÊëq?ÿtyÓÇ}S{ÞØÙÑ}©É¼é“£g¤ž”R:Xr$ø†š’£—ˆQ E/C(… —ˆ ª»»'>acÌp¬Ž1Vb¨cŒÅMŠêéù~öÎí§;;»“’G>÷Û%¿yqé”Fuw÷ì.¨°¾ZôõYÆØ”Fý楥Ïýv‰FÁýüÂÝg,¶ú¡¯¼¾ì§[,lß×g¿Â-BˆOŒV©˜áxÝ¢¥K õ*•*1)šmüþ„ó5FÆØíËÂcËîH8~´îB­Éúê… &ÆØm·' È»óžÉe/7ØÞkèúà½ï§µ¬çƒÇ0ƒ aaAÚ1C/ÔšjÏ««šÇ:xp÷“ñc,<"ø»óÃcÆæ6ëo[¯v0Æ"†~÷jxD÷½ím]¼×ÒÒ.|_‚,9***š3gŽÔ£½DŒb(z‰B)½DLœPISFž«º²%¿Ôb±$MÅ{5$$ðêÕö+W®EE bŒ]¹lfŒ…„X_4(Àdj76· ‹ eŒ56\å¾78$ÀÜÚñ»Wo îwa0~BäçY"¡Œ—Ù w†Kžèý†^"F1½D ¡‚^"&N¨ä)£¶l.­(obŒ%MÉ{uâ¤áß~SûU~izÆ”îË–üRÆXlìw•ÇÈQa&Sã–üÒ{Ò“;»ºó¿8É}¯F~ª¬qwAÅâ%ýû5ªXùµHXÊ0,2tÔuauL1šðˆÞ÷øcKo+9^ÂPâ¿-²ý-hýõM³Ç”Ÿj4«³.“·ÝI´X˜JÅæÎª¬q÷ΊÝ;+cjµ_ÂäèûWOóR0а @1’¯ÅK¶»?È‹>èÑ'nš0qx@ ` ÿÄIQ=qóÈQC¬¯NN¹,-að µÚoÜøaþtf@€?c¬»»‡17)ꇫ¦Fâï¯ ¸qÚè:jɼLñù‘Ü‹Þrz‰ÅPô1„Rz‰ÑPôˆWE(¾:!Y`€ˆWEà!€ÀP` –F©‡ 0z‰ÅPô1„Rz‰ÅPô‰ –UWWK=ÑKÄ(†¢—ˆ!”BÐKÄ(†¢—HTŠ_!ŽEîà,rP XC%GEEERA`ô1Š¡è%b¥ô1Š¡è%•â0a xk°€ÀP`É‘Á`z£—ˆQ E/C(… —ˆQ E/‘¨P`É‘V«•z£—ˆQ E/C(… —ˆQ E/‘¨¿B‹ÜÀ3Xä (°†KŽè5s£—ˆQ E/C(… —ˆQ E/‘¨¿€ k°À3Xƒ j©¢3›Í_}õÕ¹sçÆŒ³lÙ²ÐÐP©G@f°äˆÞ}nz‰˜rBéõú„„N—••¥Óéâãã‹‹‹ž©”Dý‚PŠ@/£Š^"Q)~Ö`¸`2™’’’jjj¸µZ­Á` “jT25Xà‰ÂÂB^uÅ«®®.,,”d<>eåååý:‚@%GF£Qê!Œ^"¦PqqqîWD¢þB(E —ˆQ E/‘¨P`ÉQuuµÔC½DL!¡RSSí÷gÕh4©©©ö'+"Q!”"ÐKÄ(†¢—HTŠ_!ŽEî®ët:ÛJ,­V»qãÆY³fI;*9¯ŠQuÒÓÓó§?ýé¯ýë™3g&L˜ðüóϯ\¹²Ïw¡Àèú`8äÖ£>ÚÝÝýôÓOk4ƒÁðüóÏõÕW}¾ x†~›†Ý»w×ÖÖ¾óÎ;±±±Ó¦Ms§º¢Š^37z‰ÅPô1„Rz‰ÅPô‰J.Ó?÷ÝwßêÕ«o¹å–þ¾3Xàú3X¸zõjjjjhhè!C/^¼oß>©à ¹Xõõõ<òÈêÕ«Ï;WYYùƒüàÎ;ïts6RåÈÚµk¹o7 ÜÜ—¸¿6ƒÁáKø|‚/|‚ÙlÎËËËÉÉy饗Ìf³BSàð ø|ïÖ®]ë°Z`¢‘ËýµÀÀÀ¿ÿýï«W¯¶Y¿~ý† vïÞíú$o †ääd©G!$z‰ÅPüñ3Ï7½DLù¡ yÕ“G_[7ù¼¼<[7y)ý29D/½DŒb(z‰D¥øéÌ`x&'''++Ëþxvvvff¦÷Çce×’@7y-Ì`€ÀdØ—Ád2eddت+ÆXMMMFF†Éd’jHžAà£RSSµZ-ï ´}d{× ¿P`Éwópè%bʶiÓ&Fc;³iÓ& W¸‹ÑM^é—É!z¡è%bCÑK$*XrĽEB½DŒD¨”””²²²ÜÜÜìììÜÜÜÏ?ÿ\Ú®Wbܵ$p™ìÑ E/£Š^"Q)~…8¹a2™’““yÿ×h4%%%èbÀ"w Ïþ®¥V«•ö®%€g?ýƒ, ‰»ƒ¯uT÷åìàe˜Áò-ôš¹ÑKÄÄ ¥×ët:]VV–N§‹/..égqÉä2…††¦§§gff¦§§¼º’I(aÑ E/£Š^"Q)~ú3X@ v°ðÌ`ø ô‚ €¼ˆÑ ¼ – ©‡ 0z‰˜h¡$ÜÁ—I)è…¢—ˆQ E/‘¨¿€‰ä,£Ñ.õ(„D/-”„½ p™”‚^(z‰ÅPô11«ÅW'$ ,ðqÅÅÅ:ζK«ÕnܸQÚë$¡Àr Pbk5räHÆX}}}Ÿ½ Ð5 ÀcâUj1>< ×ëW®\i»9¨ÑhrssSRR„}‹PPظ€EîrD¯™½DLèP&“)##ƒ»ôª¦¦&##Ãd2 ø×ÜO$U+Tà»§ô1Š¡è%•âï¯á!ПŸ¿|ùrûã›7oNKKê-‚@+T Fˆó ý•T³Ð  O(°dÁƒöWRuÌB+T€>¡À’#z÷¹é%bB‡JMMÕjµ¼ƒ&55UÀ·¸æf" [¡zß=E —ˆQ E/‘¨¿€ k°€ Ú_IÒ1KÂV¨ÂB,§P`%ô>¤]Z¡ (°œB ôÁP`9E²À¢·ß½DŒb(z‰B)½DŒb(z‰Ú4øÞêè%bCÑKÄJ!è%bCÑK$*ÅOÿœÁ/À €b À ,9¢×Ì^"F1”;‰Ìfs^^^NNN^^žÙlö¨ˆÞebCÑKÄ(†¢—HTŠ_À„5X^£×ëW®\i[èªÑhrssSRR¤€ÇЦÁ)XÞa2™’’’xÛTHï21Š¡è%bCÑK$*ÅOÿ` @999YYYödz³³333½?` äE¡x‡â§0ƒ ‡j4š’’¬Á¥À –o¡wŸ›^"F1T¿………mÚ´I£ÑØŽhµÚM›6É­º¢w™ÅPô1Š¡è%•â§0ƒ !ÛC…èƒJ„6 N¡ÀÊ&ðâUj1>”K¯×¯\¹Ò¶¸ íC< øé’3XF£1<<\êQ‰^"¦ØP.f§ŒF£J¥JJJ²õj·RtûP…^&×è…¢—ˆQ E/à –¯©®®NNN–zB¢—ˆ¹JV÷ÚÌfóºuë^ýõææfëÞìTuuuUU¯ºbÿmš––æÎ°Ï+È‚Çâ³ß=e¡—ˆQ E/‘¸, G PuàÀîæóF¯×K8˜˜˜ûÿhµZ£Ñh;-;;Ûáÿ(²³³ÝùöyùCÕŸ$P"^¡øûk$o&“I>÷ÚÆfóæÍ¶Ù©üüüåË—»>Çýc±Xjkk¹ûû‡ «?I }°¦°°ÐÙ½6™ Ʀ¼¼ÜöëÔÔTî\‘ULLLsssNNN^^žÙlvÿGœ?žW]±þÿ!ÈêOÀM(°äˆ^37z‰X_¡¸U‹;ÇEåú‡Ú6·)**²oÝÙÙ¹jÕª¬¬,N_\\Üß!ÆÉn~ˆ~÷”ˆ^"F1½D¢Â"w9š3gŽÔC½D¬¯P²ÚªÏÅÕh4©©©Ö_[¥¤¤”••YW”1â™gž9þ¼íüšššŒŒ ûÛsýÊ%ÈÉn~ˆ~÷”ˆ^"F1½D¢Rü&¬Áy’ÕV}ˉ‰ÉÍÍ5k–³7º¿$Ëá=z´J¥âÖg¬ÿ²ú“bЦ@a¬÷Út:mýV«Ý¸qcXX˜÷{7ð£VNˆš¡ûñ¤¸iG·ì6›;ÚÛºzz,þ!!êÐÀ¡CC†E†–œh=¡¡±ª§§‹ûö·çœåU©Tÿ<¼gàeŠŸþ!9ƒe0ˆõ¡—ˆ¹ʾ–òfŸtÞO7Û>Ë-¬¿ÐÑÕ9¨§§ŸÓÕÕQ]s¬¢ò`EåÁÖÖËÌùC…2ìƒå³ß=e¡—ˆQ E/Ã^„.,°èuË¥—ˆyÊ›l•œZ˜0)uúÔ;¢†à+KϹêcõ Çÿ½ùaÃ"©¸ðÝSz‰ÅPô1)°T*ïˆ;c#Y`Uw™ê/k%w©É4mê×'Ý"põ6xHÐì9coš=&tP °Ÿ àM¾² ¥ÐæµÞ ;wN·tÅò[‚…ýd««-íÛ¶ž*Ü}&uAìÜÔqAòú? €äð¿EïñBËþ¢ªâ}=Ó§Þ%Ôg:ÓÖÖµmë©}EU·.›4#Ec? -YmïàŒŒî¯y6MGòaQQ±v#ô1B‰Ýq úÜ•¼ÇëëZú<344`|ldŒ6bÔ¨!C‡…¢>p`ÿ̳®]ë2™Ú._2_¼xµæÜ•sUWÚÚºúüÀMøÝéÉ­¸ ³|øÂ… ŸþùøøxwÞ%Ÿ}*..¶ï8࢕›:Ú»¶n)Û_tÎõaaA7L|ý(6ÂÏÏ­ §înËÙÊK'K.=ráêÕvgúù©æ/Œ]rkœ¿¿([D`SBœOXwÞygVVÖŒ3šššòòò^}õÕmÛ¶Ýpà ®ß… Gð›\uLx¤¡áªóS,uõ'Wènºóî¹ßÈëé±”•6ž­8Ýäâ´Q×…ýè©Q#{öS\ðÚ#à;|b³ç/¾øbîܹÁÁÁ111O>ùäÚµkŸ~úiwÞ¨rdíÚµÜ]“ ƒÑh´ý–û÷×F£Ñ`08| Ÿ€OêBCCÓÓÓ—.]ºdÉ[uåñê«ß^·ÏEud>²úoïýì®{æ©T*Søù©'G?üø¬ÔECâF8ûquLoþ_Ññ£u‚ÿI:Ûݹ°°PÑß|>Ÿà…OX»v­Ãj‰F¾Ó?/^Œ½zÕÅ?Ê#:ƒEï>7½DL¡º»{¾øü„~ÿ9g'Œ?lù=“Gv·oM¿­¼œÿïçkŒÎN˜7ü²´g7"=˜ÆólKòË$z¡è%bCÑKÄ|ä!O}}ý„ |³ÀèSëÕŽß?\UyÙ᫃¥Ý•xÃÔÑ¢>Øg±X×lý²¬µµÃá ñ #~°jjp0ÿieÏÚÙcSBœ/Xo¾ùæ–-[¶mÛæú4Xàƒš[ßûûÁKM­_:=fù]‰^kzµ¥=oÓñ“%¾=rÈCÏŒb;2µê"=">‹~µhÑ¢Ç{lΜ9‘‘‘çÏŸÿä“OÞxãmÛ¶M:ÕõQ`¯9wöÊïr8i¤^¡K¾qÚhïªø@õŸ—tu9Øã0,<ø¡‡gŽºî»âi€kÕÑ D¿“û³Ï>ûöÛo?úè£F£1::záÂ…EEE“&M’z\Ò ·ß½DL¢P§Ê?zÿpgG·ýKÑ#‡¬úñ4ëã{žU!I”r“V£ØðÁáKMfÞK&cÛ_ÞÚ¿ú'3ÇÇcngo}DÀýá»§ô1Š¡è%•\ ¬… .\¸PêQÈEuu5±Ëé%bR„:~´î“|ÛÝí`–hrÒÈ{tCPšyºÂ‰ 8Ñu£Ã~öÔÜ?üæt9¿C[[×{/Ž»v¥ùlcc£Ã· ØÎž ß=E —ˆQ E/‘¨ ·ÁGýö§ÿø¶§ÇÁ·}Áâ ·.‹·®g—¼gOå‹ÏOØWeÿRWWÇ¿ò_ª:÷­¿¿ww¯I8¬UIøD,_f6›óòòrrròòòÌfþ]¶’ãõ«+??ÕÝéÉ·Ýo{Z°°°W]1ƪ««5‘œŸŸêîô¤åwO¶o0£VÞöœV3¥»»Ûßßßv\«ÕnÚ´ ÕP"—[„¾ÌõM½“'.~üÑ7öÕ•Zí÷£ÕÓ'Gsz¶ÂIð•ãsæ48pÓ?ñnhªÕw/>ïójëJ׬Y…µê@f°äˆÛ…–z‰˜p¡L&SFF·½SMMMFF†ÉdbŒU½üñ‡Gº»ùÕUPú¡GRxÕs¾’ÉÅ '½^Ÿ Óé²²²t:]|||qq±ýi®çØìÝ8uôý«§©Õüÿɯ¸ë7#¢ÆGEEeff¦§§Ûª«þþwà»§ô1Š¡è%•â0a (”mÒ¨±±ñµ×^³?aóæÍ3gÌÿó[û¯™;y/«úØ,6Âþ]ýíÆéæš-Ηløà½ƒ=vëò[[/Ï_–¢3ÔÙûÕÓ®T\8䛪~tÌÏÏŸw<22ä‰'ç8ðàú}°(q=c½'h¿+00äZKìÕ«üê* Ðÿ¡‡gº¨®c)))eeen®©rgÍ–‹…óî´:mlUUõþ¯¯ðj¬K—®}ðÞ¡Gþç&µÚo€?@n°Kޏ»‚Ó@/sÊõš*æ¤^áòóóϸç7öûpúù©~ôÀ´±ã‡õ96k7NÞ '‡ÜY³5ÀÖ Œ±{VÌÓÝ;Åþø¹ª+¹Ÿ³XøÎøÔwO¹è%bCÑK$*Xr¤Õj¥‚Àè%bÎCõÙ(¡Ï¢aùO9™wP¥;Ž Õ IDATbé+§$$Žðh°N¥¦¦ÚÑh4©©©¶ßz°pÞ^ÊMãÒîJ´?þí7µ»vœäG8äSß=増ˆQ E/‘¨P`ɽ½è%bÎCõ9ã¬hX³fMvvöŸÞú|âøTûWoY?}¦Æ£‘º¶iÓ&æûO¶ïJåN掹©ãSÆÚßþŸò‘#& ò#ìùÔwO¹è%bCÑK$*ůÇ"w›>—»xЯ©±ó¿èí›2Ìœ¥M_éà›PúìƒÕçÂy7;iY,ìã¾9~´Žw<(H=oá‡~rŸ›kó§BrãN£‡õJb ërö^miç}`ܤ¨žéçÇoŒîe.J¨~uXèììþëÛjª›yÇ#‡úÉ£ÓvïÞ.`¿S×P`9E²À***š3gŽÔ£½DÌe(w%ðê•  ¿ýù@UåeÞGEüÄ“³CBĈÀãÙeò Ã‚ÉØöÖº"csïxBâˆÕ?™a¿ÇÎ@øÚwO¡è%bCÑKÄP`¹@²Àú»ùÌ—_œüzO%ï`HhÀOΉŠ4ðÏ;´ì¯iþó›û»ºøHoY6iÑ’‰À ôÁPk£7O>a¨ß[ȯ®üüT?\5Õau%«¦çžuXˆÑD¤¯¼þÓ¿åßñŸò1c†Nˆ.Øø¤€§$vå²yÓ§Çìÿµô¶Iq“¢ìÏï³Ï–—yÜaaêôÑóæçìé±üóßÚ/DPXrDoCMz‰˜@¡º»-tÄ~·Á„ÉÑ Mpø–>ûl¹É~geÏ ¤‰Ã²´„qv}S¯¶´oúÄAÅé|÷^"F1½D¢Rü&¬ÁEÛ’_Z¸ë ïàÐa¡OfÎ u¼°='''++Ëþxvvvff¦›?WØ›ŒýÚýÇdl{ý÷»ÚÛø‹±ÒîJœ›ÊŸßÖ`TqºéëÝü¥Wþþ~?z`ª³êŠ ÑWÝ~3DëMFwVî×î‡|ªŽÿìxcþœŸ©T½&Ô·~Y;aøu£±Ó3(nHãÚµÎMŸ³ÿ—Ó²´x6ÂÅÞW]¨›Œ\îï~h?˜ÃßìÔÊåïêêùç†#Ý @B(°äÈh4J=ÑKÄ*oãñæ+×x“¢çÌë㾘;›Û¸æìù¾ãÇ»ù ²f¿þ“ÚºRÞK ¯ný²l€Ÿïž"ÐKÄ(†¢—HT(°äˆ×œz‰ØÀB}ûM­á»˜°° ݽ׻ÓeÓzK.777;;;77·´´´_[Ê8»™(øFcöëè ¦§§{ËÖìööVÞ«ûöž=]Þ41à»§ô1Š¡è%•âWˆc‘;(ŽÑØö(ä=9¨R±‡Iáõe©›¨;›ù œ›ë蹃IŒ_pû­¿ä14ä—ÿ›Œ£ <ñªÌ`x•ÅÂò>=fß—aμñ¼êJ¯×'$$ètº¬¬,N_\\,È~“Ñ5³Ù¼aÆÛn»Íf]ÜÁœ,Û}ªœÿxó•k_~qRxâ§0ƒÊrø`ͦOŽñFò‹Ì¹jõ÷ÿàñ`ƒ¿þizŒ7qÅãlÿÛ`F[Qf2öj4ªR±N™ï í*À@`Ë·ÐkæF/ó(Ôŋ͟ååô÷W­üÁ Üꊉó ýs¿Lö]æyÊËË.̲ æÞ{WdÜwo!šÅÂò6kkëò`Høî)½DŒb(z‰D…e rDo»rz‰XÿCéõú7ß(ˆ¹îzÞñ…‹'Æhø«Ë=Ûào€~™Ö…\‹%!!Áõ¬¸IQ)7Ñï?Ç=hlnÛ²ù䊌)ý¾{Š@/£Š^"Qa ÀL&Sæ/o_]5xá’‰öç¼›èÀ¹ó ëúoôèÑëÖ­sgaÖíˆãß²<¨¯®Ø…^ƒ À vÞ˜¬ãìééÓâïï 1ÃÀ»‰gKì]ÔZ­öÉ'Ÿ¬­­åwxß3(H­[9ÅÁÂMÇ;:Ðz– ©‡ 0z‰X?C}ûMKh(ÿ>àÁß_¨s<å#öƒ~ÙÙ/¥r6ÕÄã°.Œˆˆøè£JKKUNz|9œ÷š7|æ,þG]¾dÞöÕ)×càÁwOè%bCÑK$*XrdÿW”ÒÑKÄúª¬´¡ÍÌ/Œ.]®Ù_ü©‹)Ÿvõ€-‘ÇKìÖ…[·n½ÿþûCCC…=yò¤Ã»·/O æÜ·÷lMusŸY¸pÿd¥ Š^"F1½D¢R|´i™ëhïzý÷{ŒÍm܃‹åŸ›þ×_Ý*loO¡ääädeeÙÏÎÎÎÌÌìóíÎ@8lpjãpÁ{鉋ï¿{ˆwæ¨ëÂ~òè´mÛ¶ Þc|xUž"ׇòª+ÆØ·Ç¾T˜7n÷–ŸÇ¸ÄÞÚsÁþ¸u~K§Ó9|ÒÐz’×è+arôSG{¤×Ê­º &ÝŠ'·íx×ú[g=â$¤øéÌ`œ©¨ûëÛU*îÁ«W›Rfûë2V¸9ïÒ¯Ž ‚´u/ë·nݺ~ýzûWí;‘¶¶vdÿ~OëÕîÁ®®Žõ=n4]´þVجà;ÐhÔ·ÐkæF/s#”ÅÂ>ýø0¯ºbŒmÝñæ°È7KŸ~=Í7ÀÝul‰D]boßJLLtøªý‚÷AƒïXÎ?Y­\4ÿaÛo]¬óÍïžâÐKÄ(†¢—HTŠŸþÁ ÈÖ‘Ãç?ý˜ß·½¬|oþWps1S¿6Ì|w‘öÒ±ÊÏÏ_¾|¹ýqg{é¼ó×âÓ§yÿµù¥ŠÊï*H7ÿH¸0ƒ 0mm][6—òvt˜w¾Ëz/frÑϳ_Oó ¾»Žý^:êo£¯{Ò“x» 1ÆÍ8@dýµ7[°ô €(vü§¼¥¥w°èÀ?¯¶^æ–®oêõkÃIv×ñXïBF´`Ñ»1sú æÝ¬î@%GôîsÓKÄ\†ºXß²¿è,ï`cSշǾä–}öóì×Ó|ß]ÇË—©¿¾,ž0q„‹w‰ÚÏ“ªoÔ~²á[ÞÁ¹©ãÒîš,Éx@¡°Ù3€ÜÕÖ®åLHẺbηFî_«Òn¸qô}çª*/sî/ªš5{l”]+ïC4y¿àÈÿ× Þ?ƒüýUwÜéxÇ=aéõú•+WÚfï5MnnnJ åÎ*K»3ñíuEÜ?òînËÖüÒUN—n\ßÁ,9¢×ÌÍˉ¸ç±›¸¡ Çê*Ï\æPzjWåÙ‚ÿ\ž>»•ºOY_<6bêôÞÁC=ïB(+”›è…¢—ˆQ E/‘¨¿€ k°€Gð=ûÔÝÝ“ýûÂKM­Üƒmm-ï|ðȈCÅû¹VýÝ5™csÛ^ÝÝÙÑÍ=¨ÑF<ñä:6€ð!€»ßó¸Oû‹Îñª+ÆØ>ý'mm-¢þ\+emAØ/.¶Á¶*-;z̰…w°¦ºùèþb8/Ã, ÆËǵk;ø=™®\©=z|«à?×á²oA(O}.,³Þ½Xß8&&eР¡Ü÷þç«SÉ×R«ñH þ$GƒAê!Ì›‰¼VpXCíÞYaníà½T¸ïÞž.a.oaÙèÑ£_}õU³ÙœššªÕjy'k4šÔÔÔþþù|ñÜYXfªìèl+:ð1ïíW.›÷UY-ŸP¢Š^"F1½D¢B%Gö_*7 Xp¸¦Õjƶ}{«xÇ/Ô•®Ð ûsí Žææægžy&..®´´T¨n¥òùâ9»Ï»}ûvÛomSƒ†;š.ñûì8m6w29…½Pô1Š¡è% ,9¢·7y­=zxxø¶¯Nuvv÷>lÙUø.ca®Ã‚ƒ1V[[›‘‘‘PVV–›››››[ZZ:kÖ,~Š|¾xÎî«þô§?µ=j›´Xz¾Þ÷!ïÌkæÎ=LN¡D/½DŒb(z‰D…5X@wö<®¯k9r˜ß·=iÊÈ7g¿$øÏu±ËºŽ>--màÝJåÃÙ}ÕæææŒŒ 냙֩Jë¬Þ™Êƒ5çK41IÜ“÷í­š=o\xx°7F Ð , Iöè®mý²´§‡ßYôö´ÄÈá3ÿY®rx`‡[<ñØ JëT¥N§³ÎííÙ»þþûrû¾=Cgg÷Îmå+2¦xoÜÿ…[„rD¯™½Dg+/—žlàL¹yLäpQöiq¸°ÌF¨uôò¹LÖâ)""Âá«¶‚Ò:UùòË/GDDÔ_<}ª|ïÌCÅ5ÿÙ*n› IÈçJ …^"F1½D¢R|—N4ï3›ÍÙ¯í¼jêõï“  õšç $Ò-..^±bEm-¿Ã“F£)))µ—©Tòòòt:ýqnUn_Ù¡×=¸êO~~½&擯uÿêi^-(È…^¯_¸@Ç«®c󌯺bŒ¥¤¤”——¿òÊ+Üy‘ÖïËÄÒ¥Kû| ”»üÿJó…ã%;xç—¯;_Ó,ê8ì¡Àè“É´råÊø‰·òŽ8oþx±zhhè¯ýëÚÚÚ?0¨î<Ê[¶¿øÓήvî‹…mÝrJì¡ð À’#z÷¹É$*,,2vDÔ8Þñèë:‚‚¼ôȈuý~fffzzº°OGÊð2YWY¹((yëÏZ[/óífÞ‡œ>ÕXqºIô±z‘ ¯ÔÑKÄ(†¢—HTŠ_À„5XàMÙÙ9e%ƒ‡ Í=h25LHhÎÊú¥T£òe&“)99™û¼aPРGz/0°×ÓØò­5Xõõõ'NTáÿ… ?a“xÕclñ'“&M”d<`1::òÆéQ¼Ójª›Ož¨·ý¶Ïm¤Hv}°,Ë<ð»ßýî?øÔc襻»çâ… Æz-ñ¹t¹ÆØrZð}xÀ}ö}eÔA¯Uí2™z]©í[Ë'G«Tª>·‘8ÙÍ`½ñÆÑÑÑ÷ÝwŸÔ‘’Ñh”z£‘¨ø@µÑØÎ;xêôö?¥ñŸr/o]Z@ ÿø‰ü=Ö]0?ZçÎ6Òò§Ü+å ½DŒb(z‰D%¯ëèÑ£ï¼óΟþô'©"1‡ ¬@¢ÎÎî];+xCõlÛñ1™çø\&+“ÉôÌsMyÇÿóUÙž=Ž·‘.,TR?R2Wʆ^"F1½D¢’QuíÚµU«V½ÿþûC† ‘z,KNN–z#H¿ÿœÉØÆ;˜q_Ê AÂïr(—ɪ°°ðܹªýúOxÇ/5™­wøem7DæJÙÐKÄ(†¢—HT2*°~ùË_êt:&Tެ]»–û@©Á`àÎmr_âþÚh4 ‡/á|ù::ºwœa½Ž’89ZA)|ç¬ÕÒ‰ÒÝ—¯ðßw´âµz·Š‰‰‘[ |>Ÿ à'¬]»ÖaµÀD#—_|ñENNÎîÝ»ýýý­GÜ|rmÀ öœùêËRÞÁŸ>š2qÿi5ƒüüüåË—3Æâ'ÍK»íW¼W~ó½¹Go7®ÑoÓ™™¹aÃ[uåãè5sSt¢öö®ÂÝüé«qã‡]l¤Ö\Ñ—‰Ë¶7ö©ò½MU¼WçÏ{@«kû­·"s¥lè%bCÑK$*¹Lÿ¸˜¦s=BÌ`Ø vœÞö¿–zänu]·5€°MÕa€l{cÇM¸ùÎ;~Í{5í®ø‹G]_;³ÙŒë @žxU„|«Ü"9hoïzõÅ]æÖîÁ ‡O™ÊÐKIæòòòt:cª~øGÞîFCCÖ<»Àßßé>zeøú·Dåqçî}{«xÕclö¼Ñz)‘wîÜ9Æc–ýúò^j¾ríP1¿Yƒ ^Y -XrÄ}‚iéõú„„N—••¥Óéâãã‹‹‹ÝycG{×ÞÂJÞÁ¸IQ•gè¥dØ϶ôé3ÅõOó^ýróñ––«ßXX(÷^YÄ®£˜ˆQ E/‘¨ä[`ùò?ëú\J$L4Ùˆ¢½U­WùÓWKn‰sÖ3IY½”ìûâÙ–º3f9P¼‘÷jG»jù;,µå}‰])F1£Š^"QÉ·ÀòeáááRA`&òx6¢£½kïþôÕÄIQcÆ µMð8;®ľxÜ} +*^là? :iâ’{ï½Ï¾Ô–ÿõ%v¥ÅDŒb(z‰D… ˆóx6bѹV»ÕWKo‰c½¦F¾§Ñh°å³ÜX÷ÎÍÍÍÎ~=*š¿ö.lHTøIö¥6®/  , n̘1»žèèè.Üßð°N_±ÞS#VJì¥ä#¬û@Ïž=û½÷_·ŸÄJ™¡;uŠ¿< ×–Ñkæ&U"½^ÿÔSOÙïs6âÀ>G«¯–N´ý:%%eýúõ¹¹¹ÙÙÙ¹¹¹¥¥¥¶|¦÷ÅcŒY×á57_±ß0h±8è‰Õpñêñcu^šçè])z‰ÅPô‰ –Í™3Gê!L’Dn>lÏÝE§¥åêž]üé«1ã†Nˆnÿù¶PòïKé&z_<ÆØœ9sxOž:½¯¥å"ï´‚í§4‡EïJÑKÄ(†¢—HTXƒdYÿZÕét¶é%­V»qãFîÃö¼µSóçÝ7cêxŸ³xií%åß—¬OÚžBˆ¹nÚç¹'¸'Ô×µœ,©Ÿœ“_â­ŠŸ4—W]1Æ-èì A[(w¦ÊÞ9 åç§Z¸xBî§Ç¸kÏËJâFxqt¢w¥è%bCÑK$*¬Á’#Þ\òLÔ{”*e:¿u]Øè˜gOrʼ/¥›äy™<À]Wçl%ÜÔé1Ã"ù½Ê ¶ó»ºË™+eC/£Š^"Q)þþn‚Ç8ý'ÙÄØYw¥=Ë;á‡L­®ùÆv×æÍ›ÓÒÒD"ôŸû=ÉôûÏ}žkà|ô‰›ÇÇ}” âU˜ÁßÅ}ÌpÖÌ Þ«‘Ã%OEæ AѯždÓgjÂÃywíPÆ$È ,ð]¶§÷ÇŽ¹qd4¿ÓÕ¢%üüTxBPYúÕ“L­ö›;<ï`ù©Æšêf±Æ>–Ñkæ&ÛDÖµS­^Ë;>thÈÓb˜“fZ‘‘‘3gΔm(HÔßÇY74(wp÷Î û3¹ëºÌfóÇ9@®½DŒb(z‰D¥øLXƒ³6_¨8Ýp¹_Bݵ"éæ9c­¿...æ>!h…Ý剻®ŽËÅš¹ÛOoßzŠ{D¥b¿üßÔè‘ClG°×$UâUНNP`û¸í¬†þÀTWW§ßµvÜØiÜÓ úõó ümG.^¼8yòäK—.qOÓjµƒAq½hó 'ÙÞ½þµ©V­îµkÚŒ˜•?¸Áö™Ü~iV¸ú4`‘;À@éõú„„N—••¥Óé/^\]]="jü¸±SygΛ?ž[]1Æ<È«®˜2w$·+cL«ÕnÚ´ÉY%d2™~øÃ•GŽná?z¤öÊåïî’Ùk¼ – üGÇ•NòDö—uww3ÆnJYɘŠ{fHhÀM³ÇðÞî#ÏJ~™ÁëI–——ç¢'™µx:üí]]ÜãÝÝ–ÂÝ•Ö_ËðêÓ¸R\ô1Š¡è%:¹Ë‘ýªj¥“<‘ÃIˆá‘c&ÆÞÄ;8{ þ>ò,¡ä—I(ÜöýF£ÑÅ™Ö"©µõJÉÉ7LYÆ}é ¾zÑÒ‰C†ÉðꓹR6ô1Š¡è%f°äˆÞ^’'r8Ù0kf†JÕkúÊÏŸÍž;ÖþL‡Ïj4šÔÔTáÆ(=É/“\‡²IÞÓÓÍ}©««çëÝ•L–WŸÞ•¢—ˆQ E/‘¨P`O°Ÿl:tt|ÜÞÁ”›bìÚgý_ÙJa+žŒ¦‹¥§¾æ½z`_Ukk®>xÀÝÅó]]]jµï'â)Bp‡ýÃe·.ùyòä%ÜsüÕªg³xðà gÂ}qÙ²e¡¡üì@‰lm8† ‹yðþ?ó&5-xËm“®>QÒ?E8vìØ—^z©¡¡AŒA½fn’'âMB 99aguQ]±ÿ®ìÉÌÌLOO •<”àè%bn„².Šùå—{z®–Wì㿽°²­­‹Ù]}±†ëzWŠ^"F1½D¢r·p;vìØ[o½õÙgŸ¥¥¥=ñÄ3gÎ{dn X¹3Á`;GÕ[¡×Œ¬Zí·æ¹…ö;Ó/°uº5îþ‘÷`iÒ”A«~Ì/Ç€ég°®¿þúwß}·¢¢bòäÉ:.%%åÿøGGGGßï¯ÇU|||qq±ýiÖIˆÇûù•KüBjÚŒTW>ËöiCãيʃ¼W¿9tñÒ¥+RŒ ¬‹Ü###׬YSYY¹fÍš÷Þ{O«Õ¾ð .\ipî°ïqUSS“‘‘a2™ž¿¯¨ª½½‹{ÄÏO•º ÖúkYm9ÞÁ}ÈT0—÷jPÐàÏrù·\óä)Bÿ{î¹gûöí>øà‹/¾ûÈ#8ûË <@ï>·¨‰úÕh»³£{ßÞ³¼ƒISFÄÜž ³ÂeRס¬õôÉ“'mGêêOU×çvöLgOŒ–"лRô1Š¡è%•'VSSÓË/¿Aqè}ñ˜óP.î,‡††êtéwÞ=•÷Ò™ŠKçªdѯޕ¢—ˆQ E/‘¨ߥFÁMûÓ3—¸G†G Êzz¾Ÿß÷Ëjl»¦¸øœÍ›7§¥¥1Æòóó—/_îâ3ûÝ“c¦¤¤Ä:÷ÙÕÕóêï ZZÚ¹'$M¹êÇÓ½:P“ôF­¦º™W]1ÆRÄr«+Ö{&ì£>âÞv´â.íríÈPŸw–Õj¿9©ãxï:a¸ØØp•ÑzzÄ€[~àvï䯞<$hÚ ¾Z»½[ÇÐÒjµ7n´ýlýÚÅ sÖz qÝ IDATÚÅK7Í»{g…u/B+‹ÅR¸»2fŒO€kŠ¿¿FòaQQ±v#Ò&jllÍ~uï{rÛñÜXθØâÐÊ=•‚Þ 8Ô–üÒÂÞÏF¨Õ~Ÿ}±¦üt ÷ V«5 ^«­é])z‰ÅPô11«ÅW'$ ,VÞÆãõ½–Ú«ý¢©†JÑÒÒþêï ººz¸~óyáÞ÷ygbí€a €‡Lƶ#‡Ïó¦Ü<Õ¸cÈ ©Óù·’oH¾5(hï rŸ1 À⊾>Ë›~P«ýæÎã/^p&uÁxUïî¡7L¹wš;}ÔÀw À’#ƒÁ õ&U¢¶¶.ýþs¼ƒS§Ç„…üÃq™aà¡¢F žœÍ;8íÆ;Õê@Ûo½üô(½+E/£Š^"Q¡À’#wÚ]*‹T‰ì«â>ÆS©T© Æ òá¸LŠ H(ëvà\ƒB#ãçÛ~„ý΢¢w¥è%bCÑK$*ůÇ"wpÆq£Èä‘«D£Hè·¿¾½¿òÌeî‘KXd9§G|™xUú`Yß:Ï«®cóÝhÍ`/uá„Ê3¹G®]SeÜòÃÉI#¥È , ÆÖ˜Êx)ޱ^k“c'DjÇDH50P´ø„Ñ#‡\¬oá,ÜU‰ Â,9***’zóZ"½^Ÿ Óéþþ×ÏÛ®©x¯¦.Œðgá2)‚P¡T*f¿z¯êì媳—ž/*zWŠ^"F1½D¢Rü&¬Á“É”””dݸæ‡+³¯5‰ûêÈQCžúUªŠ_t¸«»»ç÷/í26·qÖz+± k°úVXXh­®bFOæUWŒ±ù cQ]Á@øûûÍMÿå'¹/_R­_·îòåófÆ 4öM€BtØZiÏœ¾‚÷RDDÈõ7Žöúˆ€š”›´ÛO_»Öi;¢R©fN»ç?;Þ¬©©Y¼xqW×wmA°4€Ã,9¢wŸÛ;‰¬­´‡GjcÇñ1Ì?Îß_àù+\&E6TPzÖì1¼ƒ‰ñ ƳUWŒ±šššŒŒ “É$àO·¡w¥è%bCÑK$*Å/`Â,°1™LÉÉÉ“ãïIJ\Ä=¢~ö7‹ƒ‚0_ p¼ýóáÏ ‹>°?;@È6{è[XX؇~jë¯msÓ챨®|ÙlÎËËËÉÉÉËË3›Í"ý‡Û?_Ÿ|k` ƒWØÀgáo ¥µ%ÂÏï÷ˆZí7[;û½^¿råÊêêjëoE]5oÁøCÅ5Üõ º!ùÖƒß|Î;;@ø,Ì`É‘Ñh”zóN¢¶¶®b»­§Íˆ2$HŒ‡Ë$&“)##ÃV]1Î(1B181É~ûçåþþ½þÉ*ÞÐʽRÎÐKÄ(†¢—HT(°äˆû÷ ÞIT|àœýÖÎóæ ³µ³=\&ù°uèમ®.,,)Ôüü¦µƒG&Lú¾œuhå^)gè%bCÑK$*Xr”œœ,õæ…DÝÝ=E_ŸåLLŠŽ1ØþdAëà2ɇ³¥Nååå"…3nèØqÃxgL»Çº;Óš5kJKKgÍš%ÆfJ¾RÎÐKÄ(†¢—HTXƒÊ`ÛaÐY Ç£G.ðZl3æ`oæÝÅ:àΖ:‰ºjþÂØÞëµO޵EÈ™³‡¢¢¢ÐeÀÇ¡Àà•D111?þx`` ­Ø²XXáî3¼w9œc°.ÖáÞN².Ö1 "ÝÍ/HMMÕjµ¼ûâ-²J˜:ˆ™[{œ9}Å™³‡°¶p‹PŽè5sH"ûõËçÏŸæ™g²²²t:]|||qqñ©²†úºÞSíVÉ0—‹uú;0\&ù Û´i“F£±±-/”JÅ-áR1£'ßxÃ0%%¥¬¬là‹up™Á ¡æÌWôuew÷÷Ë8ººzöï­ï~4½+E/£Š^"QÉkK¥R©TªˆˆˆÔÔÔ!C†¬]»Öýwñ¬]»–û¼ƒÁ`àöøç¾ÄýµÑhäVèR}÷‰9å¦à~ï×ýý„”””õë×çææfgg¿òÊ+ÑÑßíRžœ´˜õ–2Kà:Å™3g–,Y’™™™žžj?ë“_/¿üòÿýßÿÙžüâý9p¨‚®…‹Opvš²Rð>!<<\ì1„GǯÑ÷ï;wóÍsíÿB9r¤í~´Çc°…RÖµpñ ¶DŠNÁû‡—Iq)¸/9L¤”k×®uX-0ÑÈñ¼†††‚‚‚¬¬¬Gyä…^p}2ž"ôA¶‡ÅüU±jzÍÂúû«Ö<·0""d Ÿ'¿ ¿êëZÞx½÷¿¢;ïIR^äN¾jµÚ7Š×áúK¼*B¾ÕÉîÝ»xà>w>Bå³::º_ù]¹µƒ{°ªú`æÿÞ>bÈd2%%%ñnGjµZ<ù®½÷·âSeÜ#C‡…®yvA[Û5/7÷‰WEÈë!×ôéÓ¤…4è5s#Ñ¡â^uŘeÏ×222L&“Çëþ“_¸LŠ0ÀPî· M]Èol{å²ùøÑ Öæ¶ûÑŒ ½+E/£Š^"QÉq‘»Õþýûãã㥅4æÌ™#õ&x¢žË×{*yÏVilªbŒ¦¥¥yöÉî?ù…ˤ Õ¯›Å&Ñ„Ÿ¯éÕ’­pWå SG{<gè])z‰ÅPô‰J.3X·ÜrË_|ÑÐÐÐÙÙY[[ûþûï?ôÐC¯¾úªÔã ¸3gpìè…+—ù/þÌú‹<N¤`e¿GSMMN§Û°aƒ³/§ý$Vm­ñ½w?j‡P¹Ì`=ýôÓo¿ýöC=d4£¢¢n¾ùæÏ>û ËŠ}›s…»ø[;×_<]sþ»§HR I²m0ÈÛÅ555«V­²þÚþË™w·â}9;;»×>·µ³÷Ó¥§¾þrëë¼3@èoö ÀÜ[`~¾ÆÈ«®c7NþzÒ,†¼¿m0ÈÛÅöx_Ú€uÀÅÎŽhîÁIgïÝ÷ÑÀwÈA2âÎsûÕWƒýô‘Û|tçJ‰ë=šlx_Z½^¿þƒ—Òïz= ØvÐÏÏú´»ðœ€O‘Ë,àâî @ƒ›‰îëÌ]Su©©Õp¼ŽwÂì¹c%©®|ö2)Ë@BY·­´îÑôÑGqWæYñüYž¯­2œØÁ;sJÒÒ3ø»’{ŒÞ•¢—ˆQ E/‘¨P`ÉQŸw%ÇÍD}.0/Ü]ÙÓÓëfy`ú¦9c…i?øìeR–†²µ ½ÿþûsss]?ý`{ððð‘÷ôts?Gíh8zi #á¢w¥è%bCÑK$*ůÇ"wx+Êc˜_miåw]]=Ü÷ÎMŸvW¢ÃÀÂv°çúK’“““••eýõ·f%Ä÷zš5tPà3/, ĽlÁ"w Ëaã+‡ Ì‹¾>Ë«®üýUsSlj7 _î¹~ú»Êªøp^Bü<ÆT¶#æÖŽƒúê9ó„ùÆ€Ìá!HÉÍÆWŒ±Žö®ûÏñÞ0utÄÐoÀî"ÂÆ¦ª³UGx'ìÝSÙÝwŸ€KŽè5ss–ÈÅÎʼ sŠõÕ×ÌÜÓT*6ßngϸ¿Á3—ï\&Eóf(Þ"BÛÞM6W®\;öm­í·îï$ÍCïJÑKÄ(†¢—HT¸E(Gô6Ôt–ÈYg ;v<ñĶ)%­vìïÿ3Äèè‘Cžûxh[§u¡:ì|M¯yÐ=»ÎÜ8-F¥Ð]izWŠ^"F1½D¢BRrÖè“O>ijú¾›èAã̭ݼsì7Ö|h\à®Ó*9^ÿÑû‡¹¯Ö×µ”•6ŒŽ ÎÈÈàΛZïJ ûM™@‰p‹¤ä°ñÕðáùÕcª™ÓWðÎÑh#Æ&ê0°Á3 Üädó¬{ *<»+ ‚KŽ ƒÔC˜³D_Ýwß}ÜsbÇÏ9†÷Æ‹'8<÷7xæòˤhÒ†R©<èz¶òò ƒãîðnn§CïJÑKÄ(†¢—HT¸E(Gö³)Jç"oÍʲeË Þzë­ïO˜Î*>jÄàÉIÑLÐÎUöÃèóÓ|ê2)—䡦NÙþŸr“±{Peq<*7ïJKJpô1Š¡è%•â»t¢Ñ(=&“)99Ùºø7ftÒ}ºWy'èî½~FŠ«@) wÙ’_Ê=¢R±­;^2”sj4š’’¬Áð&ñªÜ"ÙáÞ°K±[}ùúQ¡¡¡ééé®?SòP‚£—ˆQ E/‘¨P`ô¬÷PüüügN¿‡÷RcSÅë?yªÏ÷È™u^Šû|FHHHՙ††«ÜÓvT$_?JªA€°ßãm0™LÉÉÉCÅ.»å—¼—òþ½ölÕ7ÎÞ¨ÑhJJJÐ\”‚ûìèQSÿ•w’wÂOM‰›%ÉØ|“xUÖ`ɽfn®………mܸiöM÷ñŽ74Tž­:âì]’·n÷µË¤Pò ek7š••¥Óéîûá¢AƒýyçìÚQáÎGíܹ3///'''//Ïl6‹0Xo“Ïe½Pô‰JñÓ?˜Á¢á„¡þÃõ‡y7oyíÔiþÏ«V­š2e ú`²ðÚZ-Zð£©×¯äùøÏo;îû•ˆö½ßЯ@@h4 ÄíÚÉÿ‡{h(+¯ØofzzzZZšW ‡ÁîÝ4kÆÊŽŽ^wœùñO¾+°ìk©>ø`õêÕܲö+1 ¸W +¸EÒ;}ª±¦º™wpÑÒ8&†wMA¡>îÚÕÕÒÄ;Xvòâ…Zs²÷ó½÷Þ+·~%à ,92 RA`®Ø­;‰ˆ¹yÎ7›.JÅ×.“BÉ$”³Ç]“® à±XØ®§™“I¯ÆÆF‡Ÿ#a¿AÈä2 ‹^(z‰D…[„rÄkKH€‹DUg/Wž¹Ä;8Q¬¿¿ŸýÃí²ZtåS—I¹dÊÙ68‹¥ ®Û¹ý4÷¸áXýÅú–~ÕLJïW"“Ë$,z¡è%•âWˆc‘»Ò½÷·âSe½þQ>dHÐÓÏ/ à?` hÅÅŽÛj7nÜ8kÖ,skÇ+/îêhïâž!!A§ÓeeeétºøøøââbÛ«£® KLÉ{˾½U×®uÚ~k e6›óòòrrròòòÌf³w/^¦£Š^"Q¡À’#ÞŽ°ØíÞy¦»»‡û’¿¿jáâ R j _&JäÊÖ\Ôv¤¦¦&##Ãd2ÙŽ,^:Q¥êõ®k×:÷}}ÖöÛêêj×UšâÈí2 ‚^(z‰D¥øâXä®f³ùßÿÞzìp ÅÒ믎™³´é+§H5*/ã6åÚ¼ysZZší·ï¿{¨ôÄEî !¡¿~~Qp°š1f2™’’’lKã­´Z­Á`À¦„ý‚F£ lÖm¯w¯ºòóSÍ_ˆÕWàC¸ÍE]_rKËüý$Vaa!¯ºbÿßÞDU®‡}ß7ÓÑDDÈ]ÔTÜsO´2ëÖͺٽšiuï¯{o¶ØÍ®¤eÙvÓ´Å,sË%PqwEPDAdߘý÷Ç©éxfg`ÎÌ9/ßÏ_ðž3ÃûðÃ3ïyÏóRRRrôèQ«u: ð޹&RWÛü@ÿ)œCƒ‡ö ö´K¯ì‚S\ÔT{©oßèÎ9ÇŽÞhkS³³4°#$XBDY17æÓöð¡óœœ\ØíZ­&(¤Å^½ê<ʆ‰Ð^Pœâ¢ ©TšÀY´>é¡>œÓärÕ‘ô´´´Ã‡}rSÙ›ð m˜¬‚¾ è‹ˆW¢_À„5X—œœüÆ«?ý¥³Ó]…Ú/çgäåïÀªèj8ÅEÃÃÃSRR! ,Ð/"–J¥©©©¹HaA5û±J¥ü³¯žQ(Œ|2‘J¥yyyøk° ‚ˆEEE 2“]étÚ¬ÓÛëêË<È.@=Ãâ¢jµš³h¹µð—½'8 –‹‹Ç³NfÿÀyN&KCv H°€wƒ8@ÅiÌ/Ȭ«/#„,^¼X*•ÆÇÇÛ£köáááÁþ\±{÷n£‹Ö‹Š/ôêp£¨žÝ>tðœó÷´)š™oŸyæ™iÓ¦MŸ>ÝÃÃïn€ù°KˆrssíÝk:“]áäx×ê+N—uz;óuCC§XP6L„ƈˆH‚jgѺ§ÑÕÕsÈà‡õ߯ÄÄ$&&Š=»Å0Yо è‹ˆWH°„Èp ¬ˆpê64´ž>Å­MWPx¬¶îÏë"½½\ÔÃd}‘Õέ…å…Å7ÏqÚ‡ œåæêÕþcÅEÃd)ú‚¢/"^á¡ùúúÚ» –Ño¬¦P(>ûì3ýÅ©Tú¯mV«ï*Ý®ÓiOdoã<ƒo/Ý0Ý}‘ÅÜZÈ)“ÍÜZHI^»2²çö!WWÏ¡Cæ?ù­þ±Å0Yо è‹ˆWH° ³²²²Øw?±É•Eך%Gvã•«GêênsΤãS8@Çøøølß¾ÝðÖBŸ„„g—¶¢â3½#‡±2dà¬Êªs[¿Ù„…íÂ$ú(Ó`_F·ìЛ:yi\ÿÉìGGÉ®}o\É¿ë’n/ ¬™`æÖBý²ªìììç¯xhâk„ÜUÜ}tBÄì9qöè)=èß*'33sÁ‚ÁÁÁ¾¾¾#FŒØ¹s§½{dO"*æftˆ¿_·þý&p‡ “nÚü‰T*Õ·„‡‡oß¾]ŒÙ•ˆ†ÉLôEDDskáŠ+8‹ÖãããOeôàþ8}êvs“¶}䋈†É|ôE_D¼ÊôD"?~üÛo¿=hР˗//^¼ø¯ýë³Ï>kÎB×”œœ¼råJ£‡fL}9&z<»ÅÑÑáÕ×Çûû»›ú¤¦Ü)“}˜œÉy·“ÐkÖœ;õ€ô]¹råûï¿/‘H!Æ Ûºuë#{úk}£F³[Ôjåÿ¾~Þ?Àƒ½7¦²ÌWYÑôÁû™œw¼‘öœ›k¯.ˆýk°8~ùå—ØØ®û–!¢ëÜÌÝOì5UR©ô­7“9Ù!äRîþ¦ævÉ«¬¬¬~ýú%%%­\¹2))):::;;Ûv]ï4 “™è‹ˆÐTh˜÷€A÷qOg•ÔÕÊíÒ+¢i˜ôè Š¾ˆx%Ä韺ººQ£F}ùå—cÆŒ¹çɘÁÎDÔöm—¯äU²OP©_n^ÜÒROY»víŠ+ŒÞ~޽ŸÚQ]Ý’üÞ­ö®7½!Ãz,x| ½º j]h«²²rîܹŸ~ú©9ÙCb̪U«Ø¹vnnncc£þ[ö!ö×ì­ð f>³¦*>>>11±®V™ù®ìŠráâ&»"„¸ºº666½ý=¿%ÆßžÏÀ÷3¸¸¨#{{’»]8WVYÑ$¢(ð xÛ?êU«Œf „7šþ)++›1cFrròĉÍ|f°„æËϲ¯T³[”Jù›·¶Ê«ä•©Û™ù-õ@„êëäï¿{D£¹kƒ„¸Ýýiˆ©‡€)]bëÎ;Ó¦MûàƒÌÏ®hÅNØÅ¥èz-'»"„œ½°‹É®Ø%¯ÚÙ|ïNZ‹x‡Éú""4åà1hh§1/§üv©ˆ#¥o˜Aѯ„’`UUUM:õ½÷Þ›0[š² 2ºíŒ(ìß{•Óâææô·¥sW¬X‘šššŸŸ?bĦÙ|s²¸6Vï0™B_D„` 2Ï IDATÒ ""œ]îÚJ§#û÷qÿúD„Êa¢/(ú"â•P®¯ <øÕW_}ôÑG-} . ÇåÜŠ-›Îr§ÍŒ?ñ~£çgggn¾¦ÏÀ ûöäI/â4>ÿâÈÞ÷Ú¥?"Å_!”ìÄèB³úúz??¿{>P !tqZ­.yÍ‘êªv£ëk¯Oà|ÔfC,€Ž‘ËUkÞÉhmU±#zú¿¸ìA{u @Œè¯äŽ$IìRSŽr²+BÈÄ)QídWä÷Ûùì€(Ý󳇇‡óØñ½ì+`7ÞºY%¯2&6Ô†=ㄲ ØDWÌ­®®áØîµùæ–šè˜ß& E‘9è Š¾ˆˆ8ƒºg ^&¨1 ½¼¼]9Ý¿ï*§J–(ˆq˜î‰¾ è‹ˆW¢¿¾†K„BðÙÆ=7®q÷îÿà½÷—Ïš5Ë=+‹jðž–moiiJ?ü§±µU›‘.â’ t@‚%Dì’ÿÂ$—ËÓÒÒ’““·}¿ãØ‘œ£·ËònÜ<Ë.j%üˆ:€¾ è‹ˆˆ0(sjðêƒ:zôèñ“?VUsNÎ<\Ü*WñÝ0™ƒ¾ è‹ˆWH°„Ȱ§pÈåòwß}·{÷îÌ Ü-›* .FdßÊ.ÚN„Q‡Ñ}eN ^ý ………:.óÄÎù*ÉH¿Îk?­KtÃdú‚¢/"^!Á"___{wÁ¸¬¬¬¾}û¾þúë „ Àð¸þ“8縺5­ÿè-vÑv"àˆ:ƒ¾ è‹ˆˆ0(ŸíÛ·K¥¬Rç|\!¬ ˜i­â›çJJs8Ïs"³¸¾¾•ÿþZ‡è†ÉôE_D¼ý-x¸‹Ðf onzäá÷ŽÆ>ÇÁA²âµ„à/›÷€*fÖà•Édqqq%%%a¡}=–LÈ]›íñèÂ6é/€XÑ_h„ss“´G'»"„„vÓ!»è<3kð2Ó]III¥¥×®ŽÃ>zá\Ù˜q‘Ý»ÿ1뀽l—…H˜ÅÜI2nÌÓœ”ª6µŽ»9C˜u}AÑéAÅÇÇ_½z555uĨPB´ìÓt:ÝžWôßÞ³~©Q?Lt /"^‰þú.ÚÌîÝ»gÏžÍ|=nÆÔœNœúîï¯?ŽÊ¢¶—••µ`Á‚û#2h6çПŸïlQýR€®…FÁþô7799¹Œµˆs´¹¥®¼ê,ûF'° ™L6þü’’’S§S î– {w]ÑjuÕ/€ÎC‚æÒßÜ4tðŸÎÑ+W÷}ÿý7ìÂúZYiiir¹Ü¶èBôÉSk«,ëL*çhEyÓÙÓ¥Õ/€ÎC‚%D¹Îm˜!ÅÇÇŸ;›3n wúÊÃS·gßWìº œÕ‘‘‘ÂYía-&+¢/"Ò5‚b'Iç/î–ɪ8çÜ_xï{×/µ£®0L /"^‰~Ö`ñ„YÒQRRÂ|+•JSSSãããÓRrNg•pN~æ¹áÑýþ˜ÓÂj[b¯$„ÄDŸ1õeÎ9cÂÿºl–þ/š!•JóòòðW ]Ö`Mé—tè[JKKçÏŸýZùÙÓÜeQ}ƒÙÙ±p·Zè$Nñ÷ü‚#•UÜ2îY'˾þz[ûõKÀŠP Œ0•!mßvN{×màÄÁA2óáΙXí`K¬jX¥„NwùêžÐ—Øç¨TšÛ·œ¯^½Š:X¶Kˆí»#ÑL¨oÔè†zncüÈð°nÞœFsv«¥€Ý‡Éê苈t™ ˜jXìä)í‡+y¹ìsr/U+Ì©_j{]d˜Ä޾ˆx…K„BÄY'a{†™³“ë¸1ÏpÝÜœ¦Líkøpsv«¥€Ý‡Éê苈t¥ ˜âï+V¬HLLôððH˜ Õj9±K~JËill´M'-Òu†IÔ苈W¢_!ŽEî|Ðop¦o=ráÈøG9§Íš3&¡—ÑgÈÎÎÖ_° „„‡‡§¤¤°o3^íÞ½ûƒÿî6d.§½O4YüüL»t @€°!ØgI‡OȰ!pÎ ñ5:ÒÔ3^°Àj[*,,×íì.M.—ïÛ·/33sÛ¶m555L£þckK‹òÀ¾ÎCš[ê²N§ÐWs€̇%Ncæ‰-Q÷ruõd7îÝÓ?ÔÅõ·ÿílÀ0kÖ,þ: @+Ì` Qnn® ~Š~?æ 6è³+ÂúغïU¹\ÅyTæñ-aÝB,ÝaÃ6Ù}AÑébA1Ô[·nå´Ëå'²¾ç466´:pMÿ­}7`èRÃ$^ôEÄ+$XBdX¥Óê /°•””ìÙ}ôt÷ãleõµÇŸ˜”ŸŸoiE+Dd{ôE_D¤+ÕþuM]Npˆ'§ñxæÊŠ&ækûnÀÐu†IÔ苈WH°„È{½ '‘H.ç(8ëþt:íCŸ|þùgjµÚÒGåî ôE_D¤+ÕÎuxxø?l››Çi×ht;wä1èöÝ€¡ë “¨Ñ¯`uQíOûˆ›¦Rºq/å*bÖdðÙ5èSÔO>ùä¹sçnß¾ýó®-AœÍsHÑõÚ‹çËÈïå…¥R©þPxx¸¥‹@‹Ü»faû•+WLàáá›0æ)Nck[Ó±“ß2_ÛfMXÄÔµ¼¸¸¸!C†0—½¼Ÿ}ê3gç»>>ý”v©_ÿP77'lÀ`E˜Á"þйé¶oÚ´ÉÔ93¦þÍÅ™û®šyüë¶¶{¬Õh•åéè Š¾ˆHW Êè5¾îÝ»¯_¿^¿0«¹¹Öpµ{[›v÷ÎßêsvŒ¶vÇMê:Ã$jôEÄ+ÑWéD¡QóqÊr=öØcŒ+¸ìÂùÞ)¿úýöW™ß³T*ÍËËÃU2ÜdýoûÛ+¯¼Â>ÇÁÁé©…ëƒ#Ø ynɰ aî ºlö V`j ì3Ï<3mÚ´éÓ§»¸¸­ÿo¦N×Ì>ªÕje|ʼþÂÃÃSRR]“á5¾O?ý”sŽV«>”ñécIÿ!ä:î:ùÏ;i›¶.Õé´5ܬ VbjíTLL ³+ó¯¯UU5sŽ>8¦çˆ1kð¹@8›¬½ »ìrÞ•ŒØ˜‰ìÆÿˆAfœ¿¸›ü^ /77Ÿ¦: k°„ˆ§ëÜí×¹©©nÉ8ts¨µµ!8¬µók2¨¼rO_PôEDº|PFfBŽßܦà~š3ê o¯ ækß/ÜŇI,苈W¢_À„5Xæ“Édqqqœ:„Ìš*ooŸ/?ͺ~­†ó]{ßkU”âƒ,€xqf………étºÊÊÊqS§L|‘sòµë§vîy—ùzíÚµØÐ¨‡ÍžÁ Ú©ssîL©avu£ølÁµ(| j̬ÔÔÔµkצ¦¦ݸqcõêÕ%·³ËîäsNîsÿÈ>½Û§¡ººÚpx0“è§0ƒe)¦{MUs³bí{Gå-Jöi*µbóÖe•d袿¡8(0üÉÇ?tt¼k1nssíW[—h4 æ·ª¤Xóà V×ÒØØÈߓֹÙõÓNvE9yê{&»"ÖØŒŒ×ˆì…¾ è‹ˆ (cô7×Ô–œ9÷#稗W`Âè§ôÙamß™Ú> “(Я` ‘©íZùpår%³Q[Uõ³~f¾¶Êfd¶ŒÈfè Š¾ˆ‚2†}Cñ©Ó)õ w8' ˆ›Ö½[?ÎOäu©†I苈WH°„(.Ž»'+OÚÚÔ?¥åru:Ý¡ŒZ­†l•ÍÈl‘-Ñ}e {NZ­Vøu!w]"‘H$S§,srra7òºG†I苈WH°º´=?_ilhã4ž»°ëNyóõË/¿“Íïmh,?~òý·ýû÷·m§€w†79¶©EÞÀ9møGBCz3_[e©@—‚Kˆ¬RÌM.—§¥¥™ºËZ¡P§¥äÜ9¡;ðëÇ*µ‚ùÆŠo©T–§£/(ú""ʦvÃÖ­[ýüü!mmMé‡?çœãàà8uò2GG'}=—NþÐv`˜D¾ˆx%ú(Ó`TVVÖ‚ ô  ï²þ157ëä-Î£ŠŠÿøóækfÛA\ ØîÝ»gÏž­ÿvÎÌÿësÿHÎ9Ý¥êÅ™‚=²€VØì, “ÉæÏŸÏÞ×™³³ØõšìSÜìÊÏÏý›_,}(¶è"8ëÖþL*ssõb7–—9×Õªðf`)\"¤¾È ›þ.ë¶6õö.æëó<àïïÝùm@,8ëÖ[Zê2Ž|É9G«Õ¥|Q­ÖÚ°_4@‚%D¹¹ÜÒ 1u75Óþóy õ­œCC‡KûFw懶¯“ }AÑAPí2Ü úr~FiÙÎi•M»wæ¶³¦³ó0L¢@_D¼B‚%Dœ·–¬rPYžŽ¾ è‹ˆ ¨ŽRkÚöÿú1gBBÈä‰/zykaú"â•误á!›L&‹åÔhˆˆˆ\öâ¦ò;Íœ“³Î¤;±•+C ]Sƒtò„%˜Æ9t«ôRÖ™/° èÀ_,ª­€Ñc¬avUYUt2ë{æk¦ ©L&³E@ ˜+€GŽmª¯/ãŠx{Õ×Ȯڇ‹ìm9‡Â¥ :Ó¨R+öîOÖhÔú}Ròû@•ªmÏþd­VÍ9z9·ùZa…=ú H°„È¢ëÜúEW+W®Üºu+û‡»ïŒ©+$ ç!G27ÕÖq'ºx]²Jå•{ú‚¢/"‚ :J_ƒ´¢òÚÉìÎQNòÁ9q"ËZ?Ã$ ôEÄ+Ñ/`êâk°Œ.ºú$qΑ=‡pZ‹nœþq×;†kWqÓ5°é«½H$&¾Û£{Î ·JÏ|¹i®‚¨¡–I]<Áb¢=4lÈÜqcžá4¶´Ôýíßä­œv©Tš——‡7J`Ó× ­®’É›úqö&„DõÓ=û>˜ˆ¡gêºÞ³Ï¼à;ŽóšÑétû|`˜]1eH‘]‡‡‡Gbb"!$99ùËŸ>ž=ãïœ ®hV¿³®¾¡L_rûÄ0` Qcc£¯¯¯9g-Eãîî<^¡à¶gŸM»YrQÿí“O>ùÀè7ÇèDïÍüˆD„¾ è‹ˆ (+‰ŠŠ*¸vâRîþqSÙí‰ÓknßnûD©j#¨ù‚aú"â•€¹Ÿ?~É’%~~~†‹²»Î6‚íÐ/DÕ“H$óþ?ÃìêNùÕ§¾c·$&&®X±"11ÑŸ8ÍHDè Š¾ˆ‚²æ­&ãè—5µ·8‡¤S&ýùºÃ5_0L¢@_D¼Ð¦þýû'%%%%%ÅÆÆšß«.¾‹l;8mÊó±139ç´¶5mýn™¬©Zß‚EW`‘ìììyóæµµ:,z|³“+çhú‘/Î_ÜÍ|;f@DºÄ¬Ë—/Û» ¢õêUf!ªŸodáWƒ×Šnßuìì*88xûöíÈ®À|ñññëׯOJJJ?üÙÔÉË8GÇy¦¢²ðNyÁ6…„A]"„`JŒ~úé§„Ç{úöM/ÃL<ûÌŽÅgØ-/¿üòˆ#l×K Â­[·!¹—ÍÉ;È9äèè4{úßÝÝ}ˆµ·))$XBdf17v‰ÑÇ[ø¯ÿÛÖÒ¢äœSz;ïø©o9ýûsëÙðÊòtôE_DAY•>sJ?òyeU稷wÐÌ©+ƒ‚‚‡né3c˜D¾ˆxEC‚%1fÕªUì—Bnnncãå Ø‡Ø_766æææ=dËg`ߦaêd2ÙÃ?¬_r8yÂ’ÿr7oo—ó9ßiµvc÷îÝlûØÄ5íèïªQ«•»ö¾×¦ànrÚ3bPÿ~3‡ –mQô‰n,Úy£Ã$º(؇ŒF$–(V­Ze4[ ¼â q‹VœuÙEî죃Κ8î9Î Z­fܤÀàgöx¦ä®@ǰïªéÝkø#³ÿI÷_Ôžýk[äŹ¹¹Xè Â×%¹ƒEôËH##ûgÃ2OlIÝy.77W¿Þ6%¯€bì»j"""\{Ïän˜:ié¶Ô׎=Š{ ¡+£á!}L]\ccCHgMÕÁÁ‘s4¿ ó̹ŸJJJŽ=ÊÔb¶YÉ+£Ì‰Htè Š¾ˆ‚âû-eæÃ±.®-œœœ\æÎþ×?î•Ëåf>'†I苈WH°„ˆS;Ô¨„„„>}byøß®®žœCUÕÅ}Ä|-û¥Í‰Htè Š¾ˆ‚♃ƒdÈp†Æ N»—g€VÙ/6v³ëž„‘Ñ}ñJˆ ˜°Ëjµöƒ÷ÕT«8íòÖÆo·­h”U2ߢâðJ&“=uüØ—]œÝ8‡®e]Èù6''‹±@°øË"4ƒÅ^Òoƒåýb·c{Žav¥Ñ¨~Þý®>»’J¥úøàããóÅ—ëNŸÝbø_ªOï‘á=j—ŽØ—觺Π–\.×/,õöìŸ~[„†’uf˱iÌ׸alF.—¯\þ¡—Gœá!o¿Š¯<Ž[m@˜ºÄ èsc×ý÷?7¤¼nø¨ñïßpKjjêÚµkSSSóóó…“]QYžŽ¾ è‹ˆ ([ñðð˜636ïJºá¡¦†Ð ã™·¯¤¤¤èèhÃ…YŒ¨óè Š¾ˆx%ú韮0ƒ%“Ébcc™Â3=ºÇÎä-GGgÎ9ew.müâ¯ì ¥¶$“É 8rØs=ºÇr)•­ÛR_«ª.f¾ ÊËË µy¸0ƒÕ¥=z”É®‚ÃçÎ~Ý0»ªªº‘úÓ;™™™öè!„øøøüðö쳛ëîp¹¸¸Ï{ø oï æÛšššØØX3o0)$X"À”Zðò œ7g•›«çhSSÍŽ]o©Tm©È]V||üš÷WïØùfk[ç—W`ÒÜ·Üܼ™okjjæÏŸ/“ÉlÞGA‚%DœëÜQQQn®^‰sVùxsÎT*å;~~³¹¹–{{*¯ÜÓ}es·nݪo¸³s×;j5wïùÀé#ÿËÙÉ•ù–©„Ì|-äˆ:Œ¾ è‹ˆW¢_ÀÔÖ`ÕÖÔ¿ºâ»À€žœv­V½cç›7K.B¤Ri^^ŠÍ€}é·IŽ3kú+†;ŸÙ¹û]­VMY»víŠ+ìÐK€ßa V×¥VkL-0Ì®Ñøõc&» ß¾};²+°»„„¦Þ÷ÕÂcGo1<¡wä°é-gÊ yÞ “D?ýCÇ »Æ»HŒV«ûæës—s¹ÛPBŽüæúŒÇ{lìØ±¨+‘””ÄÜš3qÜsƒÙLâRîþüÂÝyy¹ødöÅ_!úì„‚+++kÁ‚%%%Ì·R©tóæÍ'NliiùøÃ_k«¹9B<¼b¸‰(¯jll¤¯„}AÑAPvÂþÐ(oŠÈË©4<çþ(÷ç^˜È|-üˆ:€¾ è‹ˆà!Åd2ÙüùóõÙ!¤´´ô‰'žøõ×ôE¿e4»4¤ûo-LLLKvEaH ú‚¢/"‚ ìÄÃÃ#11ñ…^ „T×óõÓžs½°õÀ/Ìרè Š¾ˆx%úé±Ï`é„ÞM2kúKÑQ Ïéºèé¡ŽŽØ¥=7ïìäúÄcïö2cÅ«$“'¼`4»òó'Oüi²+8fnžY†EQ©ßoÿ¿'[ëç׃sæÁý…„QczìÛ·/33sÛ¶m555Ì!©TšššoËžX .Ú™ÁM4’É^øÀ4Ã3¸:9aÈ@èôûOè)-ߥüÝÃÓÈÉ÷&>²"))iÆ úìŠRZZŠb¤ ^øomgú[š !„H&Oø‹Ñ쪪ºxÇÏoöîc˾Y•åéè Š¾ˆ‚²£KÈ[=|ŠƒŒ$Y±ýfŒý”a;»©è˜,E_D¼B‚eg>>>Û·o—J¥‰ÃÔÉK>0Ýðœªêâí;^öKHH°}­bôèÑöî‚õÑ}e'¦ \õë×ëù%#¬¬Šš8qüó†…IÅ» ˜ð‡ÉRôEÄ+$XöŸ—wåíUiqý'e²+W7G”±¸{nþ7R©4!!ÁÏßýùGzz¹Ezð€™S'/•HîúÇÁcGxƒËþ” uÊ÷—ë UUoÿñŸ­mM_~ùåˆ#lß7€ÐÏÍë[ØN8:ª¶¥þ£¡ÑH å¸þ“fN]áàðÇ XÏ?ÿü²eËÒÒÒär¹ z`-â®q@Ä_¦¡¶VöɇGš›ŒdºÕ57Sv¼ÞÚ*£`ŸÁÜÜܸ¸8{÷ÂÊè Š¾ˆ‚²+£5ärù[o½µfÍOOÿù¼Èè"„Ü*½´s÷»Jå]•èn*Ë0™¾ˆ*¹·CÔ VFú‰Ô ¼½B UV]OýéÖVYppð®]»Ä>}Eeý_ú‚¢/"‚ †³q…§‡_Ò#oõ4<³¢òÚ?¿Õ"o`7†‡‡çæŠfwñ“)ôED`µC¼ ÖµÂò ë2ÜÜŒ¼Xo—åíøùm¥RxùòåÐÐPÛwÀºd2Yll,§|ƒ»›wâÜ7ÃBÜ"ÝÐX±c窺ú2vã®]»fÍ2²¹!@Ç Ð(=˜9ók5 µÝŒfWEÅgví}O­V†‡‡§¤¤„††¢´1PÀ°8!¤µ­iûÿš÷ðÝïëÇ9äç¶pÁÚ½úvÙe}£xo*„® –M1Óã~±Ç=çà`ä&šËùÁaõï½÷®>—2Ü Z\«¦r#…¢%õ§?<ãï‘=‡p¹¹yÏäíý‡6\¹z˜i1U@hp¡íTVVΚ5»O¯©“'¼`4»:sî§}ÖÏ›÷H||<³—³Ñ­ ÅXÚ˜ÊòtôE_DA I;¹‘JÕöã®·ó®¤rttž1uùè‘ ‘æääˆåŽB‘S;苈Wb]À¤'–5XYYY‰‰ŽþLdÄ`cÇu‡37=¿“sà‰­ ± ÄG&“ÅÅű?1B5 óuxxĪmÊ¿l!Ï`56´}öÉÑÚ•Ñ£7K.îÞ»¦MѬo1:/•Í™QOII{ÝQ€{jnR|õEvÙmã÷ô\/ÊþåЇmmMÌ·âªA ÂB£& 6Áº’W™²íb«ÜxvuþâîÙ_iµ}K;ûá tM?ÿ¼ûËÏŽÆD3zTÖT½w²þ"ÖN@`‘»Ð±s )S¦ÜýLÖm£C¦V+el¬©»TYYÉ42óR¦>{13êüu@˜®_/Ü»ÿƒšš[c\$‘p×´øx?šønö™´YÛ´Zuaa!>Ž‚p Á²v-ÐÀéÜÙ5þ~=ŒžÙ(«Ú¹gõÔ©£?ýt!ÄÔ}û=Ñ¡1(ú""J$LEEˆ.ûlZeÕõ™Ó^qwç~ •HF Ÿß3bОýÉçÏŸïÞ½{CÃoÛÚýî3L`”@¯¯™Ïî—Y»kIœ9vôSÎN®FϼQ|fïummM÷œÇ¦oÇrú""4E_DA‰„©ˆØ¥³||BfO­[˜ñj¥*UÛ‘c›.æì'äÿR©tõêÕUUUv™Ðê:Ã$jXƒe’Ý,¦’‚¯OÈÔÉËÂ¥=G«Õœ8õ]Ö™4Btí¬µö>ŽŽN3¦þ-:j‚©wýâ[çÚÐÔ\cxÈîZ LH°L²{‚µvmò÷ßfŒý´‹³›ÑeU{~ùïò«„??¿_~ù÷˜³²êVqSê9ÍÍ £'+-‡3¿Ê½ü+{*‹; Á,“ì›`UV4ýïó# S'?þ±BÑÂ|kXJ,ÕܤXóîOŠ6/S'”ÞÎ=þI}}§w ˆ\.OKKK^»n}òÎõk™Ê®Tª¶ý‡>Úµo>»’J¥S¦L1çGÐW̾ˆAÑAP"aiD^Þ®ÃFzÊø”ٚдGÜŸ~4bø|‡»îå²å>c¦.3X–antr™4á/¾>&wf¸S~ußuõ wô-( `EÌú÷æ&ÍŒ©+ÂBû˜:­ºæfú‘ÏKoÿ¶µf°€—Mâ5Áâ\øW«Õ#GŒïÛgúý½L.“T«•'³¶>÷£N§õõõ}òÉ'ï»ï¾ûï¿Y¬‹Yÿ^Vv'~XÒ¨øœÉ*]þÕÌ#Ç7ûû{à#à@‚e¿vu+BH¯^Q ýGK“Ÿ££ÉâawÊ öú°¶®”`Ê €úÁ¾>ÝKoºµÊM¾?«ÕŠú/\”àìâhË‚À!Á2‰§_ «ºqttøÀŒ‘ñ ÜݼM¯T¶?õÝù‹»u:í¬Y³ž|òÉÎLYÑWk„¾ˆAÑAP"a•ˆ´ZÝñÌâ_öækÔ&ÿ)øú¹=4­ïa=$“7'Y †I`™ÄÓ¯&---))I"‘ÄDpäB_ŸvN.¼~2ãÈ—úÊ+¿ÆO_µ\ú""4E_DA‰„µ"’ÉdñÃâbé1¨Ó<ÜðªveH°L²ú¯¦±±qÆ´?EÝ?)(0¢ÓÔjåés?ž>“ƾIë®ì(99yåÊ•Ì×..£â2h–éÅï„R]SÑKwnEêš`™Ôá_á¦ë6ûTñÎÏ{»Õ]-8vôø×²¦jæû   Ç{lìØ±øû°#ý –ž¿÷ñcÿÜ;rXû¬¨¼v½øð»ÿy¹¦¦†ýÏ΂ Á2©c¿Î‚ݺI›¿ÜÙ©§VãÜþo—]>rlSyE!!$00pùòå}ûöµúßáñãÇGmÅ'´;ú""4E_DA‰„µ"boÍ>pܘ§C‚{µÿð†ÆŠ³çwæ]IW©Ú:¿w!†I`™Ô_ ûÁÿîƒ̈™äâÒþ¬©®¹yìÄ֢ߗ[áj €±7‡f“H$ýûMÿ¨ŸoXûÏÐÖÖt)÷À…œ½*Ô2¤,“:ð«IKK›?~¯žC œ1ˆ{ܬ[__v2û‡ü‚£:WN¿$$$äõ×_g'[N±1GÆ/ðñnÿI´Z͵¢¬‹9ûJJs Ñu~B „ –I–þj22N¼ýæ}zöóívÏ“ëîdÞÞÔRôÜs‹]]]qU@\²³³çÍ›WVv׮ώŽNÄ>4bø|¯vo3dÔÕݾ”·ÿJþw§5kÖ444àM`™¤ÿÕ°­7îÈ‘#ì…Š …úüÙ’CsšÍ©/WS[’}&5¿ óÕW_ù÷¿ÿmã?$ú®sÓ¡1(ú""J$xH.—øá‡ï¿ÿ~CC»ÝÉÉ%®ÿäáCçÝs6‹¢ÕªoŸ»œŸQT|F£Q™3¡…a$X&1¿΢u­VKqpp:dÒ¢ÇW”•)Ú©íËVv'?ûlZÑ3Ìœ0ŠZP@ÿ!<''gëÖ­úv§è¨1ÃÏ ¹ÇxF›¢¹ðÚÉ«…Çꊗ/©OŸ>„ŠŠ Lk‰,“$Icc£~Ñ:ÃÁÁ)¼GlTŸ£ú<ØÎþ6lZ­æZÑ©3çv–W0-ÁÁÁ»víÂ2vš–r`„K:xN¯žCÍÜEGÞÚXxíÄÕÂã·Ë.ëtZBˆŸŸß«¯¾ºlÙ2¤Y"‚Ë$‰DòÚk¯­Y³†âää1¸Ïý#{÷îæêeæ3È[sò^ÌÙ×ÔT£o ¼|ùrhh(/;1UÊàß}ÐÀ™±ý&ÞóÖr=¹¼ñú¬kEÙ%¥—Ôj¥¯¯ïk¯½†4K,`!—Ëׯ_ÿúë¯ûûwŒ1X*svr5ÿ**¯]¸´·©åÆŸþôä‡~¨¿úè£yóæ‰úót†Ñ+†ú;œ˜¹®òòÊÞ‘Ãcú‹ŒâèØÞΆ†´ZMyEaÙ+·ï\¹s'?8Ä?77Wï” >ÛwMH°îÂY¢Ø~‚¥Õªo•\Ê/8zíú)¥ªiôóóûå—_°€8W 9«Dô9¯¯ïo¼è5&\ú€ƒƒ£å?JW[w;(ØÅÛ‡„GøIÃÿô§§ô¹g~ ¹—m Áº {¿tb"ÁÒhT%¥9…×O^»~ªµ­‰s455511‘ß^€H˜™ÍèS1wߨ>£¢ú<(íÛ¡L‹BTª¶Êª¢òŠÂòʪª þL-S…BñÙgŸés>±_[2$XwigK¥j q ’šû£Â.\È)àKXs¿6ê®åè+æF_D„Ơ苈 (‘QDL*¦_º~_·ðk…uùW*{ÜçâÒ©I&µZY[WRU]\U]\S{«¦æ–¼µQT*•®^½ºªªÊŽZ"&ó!Áº ç’ù‹Ï}+kªºyëB³üöÇŸ¼;jÔþ øÚýA Œ\.ÿðþûvohp¿ÈˆÁ=¬ò´mmMuõwêêo×7Ü©¯¿Sßp§¾¾L¥Vøùù-_¾¼wïÞ¥¥¥ÔÜ¢h/H°¸Ø—Ì\=½Ü_yå•—^zÉèËKtW²W­ZµjÕ*{÷š苈Ð}%tD$—ËwìØ±téR•Ê!Bú@ψA=Ãyzú[õ‡èš[ê+e²ªÆÆÊæ–º¦¦jYSµ‡‡+;ëòõõmllÔç^„Îÿ¤c˜8`Á¤MIII©©©¢H›ÌÇßxÛ }ƒ¢/"‚ D‚¦ˆî^2/éѯÌH­Æ»û}1þ~Ýøû¹­mMM²ê¦æš¦æZ¹¼AÞÚØÜR×ÒR×ÔTëìBT*ESÓoË‘ 'À¤R)!äžóa4 “^—H°JJJ–/_~èÐ!BÈäɓׯ_Ï yû0Þ¢@_D„Ơ苈 (‘ ,"Îçÿôôtfݰ§§·Ð¨naQÝ¢ÂBû¸ºzÚ¬KJekKK¼MÖÖÖÜÖÖ¬P4ËåòÖÆ¶¶æ6E³BѬP´´)ZŠ­VC ’0f>,99ùÛo¿%¿§búI2v~Æ™9þÜý VssóÀŸ~úé%K–B6nܸeË–‹/Þsl(û³dÐ}ƒ¢/"‚ D‚¾ˆ+(£¥¶$I€°Ð>Ý¢B‚{†Û2ßj‡RÙªV+•ªV¥RÞÖÖ¬P´¨5*¥R®R)Ô¥R!W©ª­­Y£Q©Ô ¥R®ÕjÕj…F£R©•µR­QªÕJBH``à‚ ÜÝÝM%aVlìÀ™-º“’’(O°Ö­[wîÜ9&5f<ñÄÇ_ºtiû¤ûÏ’ôEDh оˆ‚ ú""wÅ)µåàà Õj™¯ÃÂÂt:]ee¥wpppdHPdpPÏÀÀp¿û,-j*(Z­F©jU)Û4Z5!D£Q©Õ BˆF£Q©Zõ'BˆŽ´)š !Je«J­P«¶é!Sý•’••ÅG ¡¼¦'L˜ð÷¿ÿ}Ê”)ú–ƒ®Y³&==½ýRÿgIú""4E_DA‰}ƒ Ø·[7îÈ‘#ú%çä÷èaaaEEEëÖ­khhpppôõ ”úút ð¿Ïß¿»¿ß}>ÞA„HìUNfm;‘õ=!$<<œ]^ßZ„òš ÍÉÉ Õ·TTT 4¨¼¼¼ýv…?K С1(ú""J$苈t"(v*¼hÑ"ýÔ—³³«·W¯o˜¯Oˆ¯O¨·W·w·w·W ƒƒˆ§»ìBŸ`BvíÚ5kÖ,ë>¿PÆ£¾¾> €ÝXWWgÎc% Óyú‚¢/"BcPôED”HÐá!(•JQW_VWÏ-  TXXhõçJ‚Õaô}è0Ÿ~Æ+,,ŒÜ½ »µµ5%%¥¶¶ÖÃÝ×ÝÝÇÓÓßÅÅÝÍÕËÍÍÛÓÃÏÝÝÇÕÕÓÕÕÓÍÕÓÕÕËÍÕÓÍÍ«ë\‚dÏ`EEEYýù…’`ùûû×ÕÕ±/ÖÖÖræ´€ÃÃãÝuÿûßÿ®ýb§bAA>Ri0!¤´ôVnnî¡C‡åò6g'WWW/77/7WOG'gwgg7''wgg7'GgWWO'G''WWO‰Dâìäæàèäìäêèäììä&®åùR©4!!ÁêO+”_Aÿþý/]ºÄ^äž““cÇ.ˆ'ýj'c´3fPõÀ³±±!(ÈɰBKkkjêŽ&Y‹‹‹;³¶““‹££ !ÄÉÑÙÉÙ•âèàäììF‘88¸ºxB\]=m—œ1·2èñ±=±PÖ~ðÁçÏŸç”i6lزeËìØ+èή؂­ƒÅ_5T¡$XMMM xöÙg_xáBÈÆ7oÞ|éÒ%OOA^0Ÿƒ½;ðooŒ3gÎDDDDDDœ={6==Ùˆ‘Pf°¨!”,j Á°2$XV† ÀÊ`X,+}‚URR2oÞ<Ÿyóæ•––Ú»G°¨óçÏŸ_²d‰ŸŸŸÀ÷œ7?¨ÌÌÌ ûúúŽ1bçζì§ùÌ(++ëÙgŸŒŒtqq¹ï¾û&Mš´cÇ[vÕ|û騨èÓ§0_E$1`³~ZÄ¢ ´Zí† ú÷ïïææ›’’b³~ZÄü  ‡I"‘¸¸¸Ø²·æ0?"FóÉ'Ÿ 2ÄÏÏÏ××wðàÁŸ|ò‰F£±eoÍdÑkïСC£FrwwX´hQee¥ÍúÙyüýow‚ÕÜÜ>>33S&“Éd²£G6ìí·ß¶IO-`QPF,±ü#fC‚uggg¥RÉnQ*•œ1ªÃà¿7½U[[Û·oßÌÌLÞºÖAˆˆ} ~òäÉjµšç>ZÌÒ þò—¿¼õÖ[úoø ´4¢Ù³ggff¶¶¶2ë`BBB.\¸À7-cQP®®®›6mªªªªªªúꫯ;f“žZ Ão999R©T¥RñÖµ²("­V;gÎö[Äœ9sØ+%¢ ÆŒ³eËv˦M›Äò˜ Ö]` MÇ‚ª¨¨;vlFFŸ]ë Seeå÷ßß}÷½ù曼õ®ƒ, jçÎcÆŒa§‰|vò­`ãÆ=ôýê‹‚rvv6\3nÜ8þº×1©?ÿùÏÿùÏxëWÇYÑš5kÂÃÃú駺ºººººŸ~ú)<<|íÚµ6é©, *===((hË–-ÕÕÕÕÕÕ›7o tss³IO­ Ö]p‰Ph:ÔíÛ· ð믿òܵêäk,##C*•òЯN±(¨Þ½{ß¼y“Ý"ÀW`'‡©¢¢ÂÓÓ“‡~uŠEA………^¦ñððà±Ò±‘ª®®¨­­å³kdQD={ö<|ø0»åðáÑ‘‘üu¯c,¦#GŽŒ?ÞÓÓÓÝÝýÁLII`P÷dõw6q—ièß¿ÿ¥K—Ø-999111öêEDÝyS, êÎ;Ó¦Mûàƒ&NœÈï:¢“Ã4tèЪª*úÕ)UTTÔ³gONÉ(¡ÕŽêä0éY¦Á¢ ú÷ïo“NuVÇFêóÏ?OLL à³kdQDeeeC‡e· :´¬¬ŒÇþuˆ¥Ã”‘‘ÑÜÜ,—Ë?îëë;räHþ»)tâN°fΜ¹uëVvËÖ­[gÏžm¯þXDÔ7Å¢ ªªª¦NúÞ{ïM˜0Á&½ëˆNÓÉ“'£££yèW§XT;ŸólÑWótr˜¶oßþàƒòЯN±(¨¹sçî۷ݲgÏžaÆñØ¿éÀH©TªO?ýtÙ²e .\" and released under the GNU General Public License .TH GSL-RANDIST 1 "" GNU .SH NAME gsl-randist - generate random samples from various distributions .SH SYNOPSYS .B gsl-randist seed n DIST param1 param2 [..] .SH DESCRIPTION .B gsl-randist is a demonstration program for the GNU Scientific Library. It generates n random samples from the distribution DIST using the distribution parameters param1, param2, ... .SH EXAMPLE Here is an example. We generate 10000 random samples from a Cauchy distribution with a width of 30 and histogram them over the range -100 to 100, using 200 bins. gsl-randist 0 10000 cauchy 30 | gsl-histogram -100 100 200 > histogram.dat A plot of the resulting histogram will show the familiar shape of the Cauchy distribution with fluctuations caused by the finite sample size. awk '{print $1, $3 ; print $2, $3}' histogram.dat | graph -T X .SH SEE ALSO .BR gsl(3) , .BR gsl-histogram(1) . .SH AUTHOR .B gsl-randist was written by James Theiler and Brian Gough. Copyright 1996-2000; for copying conditions see the GNU General Public Licence. This manual page was added by the Dirk Eddelbuettel , the Debian GNU/Linux maintainer for .BR GSL . gsl/qrng/0000755000175000017500000000000014057135461010672 5ustar eddeddgsl/qrng/gsl_qrng.h0000644000175000017500000000446313536674414012675 0ustar eddedd/* Author: G. Jungman + modifications from O. Teytaud */ #ifndef __GSL_QRNG_H__ #define __GSL_QRNG_H__ #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS /* Once again, more inane C-style OOP... kill me now. */ /* Structure describing a type of generator. */ typedef struct { const char * name; unsigned int max_dimension; size_t (*state_size) (unsigned int dimension); int (*init_state) (void * state, unsigned int dimension); int (*get) (void * state, unsigned int dimension, double x[]); } gsl_qrng_type; /* Structure describing a generator instance of a * specified type, with generator-specific state info * and dimension-specific info. */ typedef struct { const gsl_qrng_type * type; unsigned int dimension; size_t state_size; void * state; } gsl_qrng; /* Supported generator types. */ GSL_VAR const gsl_qrng_type * gsl_qrng_niederreiter_2; GSL_VAR const gsl_qrng_type * gsl_qrng_sobol; GSL_VAR const gsl_qrng_type * gsl_qrng_halton; GSL_VAR const gsl_qrng_type * gsl_qrng_reversehalton; /* Allocate and initialize a generator * of the specified type, in the given * space dimension. */ gsl_qrng * gsl_qrng_alloc (const gsl_qrng_type * T, unsigned int dimension); /* Copy a generator. */ int gsl_qrng_memcpy (gsl_qrng * dest, const gsl_qrng * src); /* Clone a generator. */ gsl_qrng * gsl_qrng_clone (const gsl_qrng * q); /* Free a generator. */ void gsl_qrng_free (gsl_qrng * q); /* Intialize a generator. */ void gsl_qrng_init (gsl_qrng * q); /* Get the standardized name of the generator. */ const char * gsl_qrng_name (const gsl_qrng * q); /* ISN'T THIS CONFUSING FOR PEOPLE? WHAT IF SOMEBODY TRIES TO COPY WITH THIS ??? */ size_t gsl_qrng_size (const gsl_qrng * q); void * gsl_qrng_state (const gsl_qrng * q); /* Retrieve next vector in sequence. */ INLINE_DECL int gsl_qrng_get (const gsl_qrng * q, double x[]); #ifdef HAVE_INLINE INLINE_FUN int gsl_qrng_get (const gsl_qrng * q, double x[]) { return (q->type->get) (q->state, q->dimension, x); } #endif /* HAVE_INLINE */ __END_DECLS #endif /* !__GSL_QRNG_H__ */ gsl/qrng/sobol.c0000644000175000017500000001442213536674414012166 0ustar eddedd/* Author: G. Jungman */ /* Implementation for Sobol generator. * See * [Bratley+Fox, TOMS 14, 88 (1988)] * [Antonov+Saleev, USSR Comput. Maths. Math. Phys. 19, 252 (1980)] */ #include #include /* maximum allowed space dimension */ #define SOBOL_MAX_DIMENSION 40 /* bit count; assumes sizeof(int) >= 32-bit */ #define SOBOL_BIT_COUNT 30 /* prototypes for generator type functions */ static size_t sobol_state_size(unsigned int dimension); static int sobol_init(void * state, unsigned int dimension); static int sobol_get(void * state, unsigned int dimension, double * v); /* global Sobol generator type object */ static const gsl_qrng_type sobol_type = { "sobol", SOBOL_MAX_DIMENSION, sobol_state_size, sobol_init, sobol_get }; const gsl_qrng_type * gsl_qrng_sobol = &sobol_type; /* primitive polynomials in binary encoding */ static const int primitive_polynomials[SOBOL_MAX_DIMENSION] = { 1, 3, 7, 11, 13, 19, 25, 37, 59, 47, 61, 55, 41, 67, 97, 91, 109, 103, 115, 131, 193, 137, 145, 143, 241, 157, 185, 167, 229, 171, 213, 191, 253, 203, 211, 239, 247, 285, 369, 299 }; /* degrees of the primitive polynomials */ static const int degree_table[SOBOL_MAX_DIMENSION] = { 0, 1, 2, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8 }; /* initial values for direction tables, following * Bratley+Fox, taken from [Sobol+Levitan, preprint 1976] */ static const int v_init[8][SOBOL_MAX_DIMENSION] = { { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 0, 0, 1, 3, 1, 3, 1, 3, 3, 1, 3, 1, 3, 1, 3, 1, 1, 3, 1, 3, 1, 3, 1, 3, 3, 1, 3, 1, 3, 1, 3, 1, 1, 3, 1, 3, 1, 3, 1, 3 }, { 0, 0, 0, 7, 5, 1, 3, 3, 7, 5, 5, 7, 7, 1, 3, 3, 7, 5, 1, 1, 5, 3, 3, 1, 7, 5, 1, 3, 3, 7, 5, 1, 1, 5, 7, 7, 5, 1, 3, 3 }, { 0, 0, 0, 0, 0, 1, 7, 9, 13, 11, 1, 3, 7, 9, 5, 13, 13, 11, 3, 15, 5, 3, 15, 7, 9, 13, 9, 1, 11, 7, 5, 15, 1, 15, 11, 5, 3, 1, 7, 9 }, { 0, 0, 0, 0, 0, 0, 0, 9, 3, 27, 15, 29, 21, 23, 19, 11, 25, 7, 13, 17, 1, 25, 29, 3, 31, 11, 5, 23, 27, 19, 21, 5, 1, 17, 13, 7, 15, 9, 31, 9 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 33, 7, 5, 11, 39, 63, 27, 17, 15, 23, 29, 3, 21, 13, 31, 25, 9, 49, 33, 19, 29, 11, 19, 27, 15, 25 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 33, 115, 41, 79, 17, 29, 119, 75, 73, 105, 7, 59, 65, 21, 3, 113, 61, 89, 45, 107 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 23, 39 } }; /* Sobol generator state. * sequence_count = number of calls with this generator * last_numerator_vec = last generated numerator vector * last_denominator_inv = 1/denominator for last numerator vector * v_direction = direction number table */ typedef struct { unsigned int sequence_count; double last_denominator_inv; int last_numerator_vec[SOBOL_MAX_DIMENSION]; int v_direction[SOBOL_BIT_COUNT][SOBOL_MAX_DIMENSION]; } sobol_state_t; /* NOTE: I fixed the size for the preliminary implementation. This could/should be relaxed, as an optimization. */ static size_t sobol_state_size(unsigned int dimension) { return sizeof(sobol_state_t); } static int sobol_init(void * state, unsigned int dimension) { sobol_state_t * s_state = (sobol_state_t *) state; unsigned int i_dim; int j, k; int ell; if(dimension < 1 || dimension > SOBOL_MAX_DIMENSION) { return GSL_EINVAL; } /* Initialize direction table in dimension 0. */ for(k=0; kv_direction[k][0] = 1; /* Initialize in remaining dimensions. */ for(i_dim=1; i_dim= 0; k--) { includ[k] = ((p_i % 2) == 1); p_i /= 2; } /* Leading elements for dimension i come from v_init[][]. */ for(j=0; jv_direction[j][i_dim] = v_init[j][i_dim]; /* Calculate remaining elements for this dimension, * as explained in Bratley+Fox, section 2. */ for(j=degree_i; jv_direction[j-degree_i][i_dim]; ell = 1; for(k=0; kv_direction[j-k-1][i_dim]); } s_state->v_direction[j][i_dim] = newv; } } /* Multiply columns of v by appropriate power of 2. */ ell = 1; for(j=SOBOL_BIT_COUNT-1-1; j>=0; j--) { ell *= 2; for(i_dim=0; i_dimv_direction[j][i_dim] *= ell; } } /* 1/(common denominator of the elements in v_direction) */ s_state->last_denominator_inv = 1.0 /(2.0 * ell); /* final setup */ s_state->sequence_count = 0; for(i_dim=0; i_dimlast_numerator_vec[i_dim] = 0; return GSL_SUCCESS; } static int sobol_get(void * state, unsigned int dimension, double * v) { sobol_state_t * s_state = (sobol_state_t *) state; unsigned int i_dimension; /* Find the position of the least-significant zero in count. */ int ell = 0; int c = s_state->sequence_count; while(1) { ++ell; if((c % 2) == 1) c /= 2; else break; } /* Check for exhaustion. */ if(ell > SOBOL_BIT_COUNT) return GSL_EFAILED; /* FIXME: good return code here */ for(i_dimension=0; i_dimensionv_direction[ell-1][i_dimension]; const int old_numerator_i = s_state->last_numerator_vec[i_dimension]; const int new_numerator_i = old_numerator_i ^ direction_i; s_state->last_numerator_vec[i_dimension] = new_numerator_i; v[i_dimension] = new_numerator_i * s_state->last_denominator_inv; } s_state->sequence_count++; return GSL_SUCCESS; } gsl/qrng/Makefile.in0000664000175000017500000010702714057135461012750 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = qrng ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslqrng_la_LIBADD = am_libgslqrng_la_OBJECTS = qrng.lo niederreiter-2.lo sobol.lo \ halton.lo reversehalton.lo inline.lo libgslqrng_la_OBJECTS = $(am_libgslqrng_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslqrng.la ../ieee-utils/libgslieeeutils.la \ ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la \ ../utils/libutils.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/halton.Plo ./$(DEPDIR)/inline.Plo \ ./$(DEPDIR)/niederreiter-2.Plo ./$(DEPDIR)/qrng.Plo \ ./$(DEPDIR)/reversehalton.Plo ./$(DEPDIR)/sobol.Plo \ ./$(DEPDIR)/test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslqrng_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslqrng_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver \ ChangeLog TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslqrng.la pkginclude_HEADERS = gsl_qrng.h AM_CPPFLAGS = -I$(top_srcdir) libgslqrng_la_SOURCES = gsl_qrng.h qrng.c niederreiter-2.c sobol.c halton.c reversehalton.c inline.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslqrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu qrng/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu qrng/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslqrng.la: $(libgslqrng_la_OBJECTS) $(libgslqrng_la_DEPENDENCIES) $(EXTRA_libgslqrng_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslqrng_la_OBJECTS) $(libgslqrng_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/halton.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inline.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/niederreiter-2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qrng.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reversehalton.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sobol.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/halton.Plo -rm -f ./$(DEPDIR)/inline.Plo -rm -f ./$(DEPDIR)/niederreiter-2.Plo -rm -f ./$(DEPDIR)/qrng.Plo -rm -f ./$(DEPDIR)/reversehalton.Plo -rm -f ./$(DEPDIR)/sobol.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/halton.Plo -rm -f ./$(DEPDIR)/inline.Plo -rm -f ./$(DEPDIR)/niederreiter-2.Plo -rm -f ./$(DEPDIR)/qrng.Plo -rm -f ./$(DEPDIR)/reversehalton.Plo -rm -f ./$(DEPDIR)/sobol.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/qrng/qrng.c0000644000175000017500000000401513536674414012014 0ustar eddedd/* Author: G. Jungman */ #include #include #include #include #include gsl_qrng * gsl_qrng_alloc (const gsl_qrng_type * T, unsigned int dimension) { gsl_qrng * q = (gsl_qrng *) malloc (sizeof (gsl_qrng)); if (q == 0) { GSL_ERROR_VAL ("allocation failed for qrng struct", GSL_ENOMEM, 0); }; q->dimension = dimension; q->state_size = T->state_size(dimension); q->state = malloc (q->state_size); if (q->state == 0) { free (q); GSL_ERROR_VAL ("allocation failed for qrng state", GSL_ENOMEM, 0); }; q->type = T; T->init_state(q->state, q->dimension); return q; } void gsl_qrng_init (gsl_qrng * q) { (q->type->init_state) (q->state, q->dimension); } int gsl_qrng_memcpy (gsl_qrng * dest, const gsl_qrng * src) { if (dest->type != src->type) { GSL_ERROR ("generators must be of the same type", GSL_EINVAL); } dest->dimension = src->dimension; dest->state_size = src->state_size; memcpy (dest->state, src->state, src->state_size); return GSL_SUCCESS; } gsl_qrng * gsl_qrng_clone (const gsl_qrng * q) { gsl_qrng * r = (gsl_qrng *) malloc (sizeof (gsl_qrng)); if (r == 0) { GSL_ERROR_VAL ("failed to allocate space for rng struct", GSL_ENOMEM, 0); }; r->dimension = q->dimension; r->state_size = q->state_size; r->state = malloc (r->state_size); if (r->state == 0) { free (r); GSL_ERROR_VAL ("failed to allocate space for rng state", GSL_ENOMEM, 0); }; r->type = q->type; memcpy (r->state, q->state, q->state_size); return r; } const char * gsl_qrng_name (const gsl_qrng * q) { return q->type->name; } size_t gsl_qrng_size (const gsl_qrng * q) { return q->state_size; } void * gsl_qrng_state (const gsl_qrng * q) { return q->state; } void gsl_qrng_free (gsl_qrng * q) { RETURN_IF_NULL (q); if(q->state != 0) free (q->state); free (q); } gsl/qrng/halton.c0000644000175000017500000002415213536674414012336 0ustar eddedd/* Authors: O. Teytaud * Copyright (C) 2007 O. Teytaud * (all comments welcome at olivier.teytaud@inria.fr) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Implementation for Halton generator. See [J.H. Halton, On the * efficiency of certain quasi-random sequences of points in * evaluating multi-dimensional integrals Numerische Mathematik, 1960] */ #include #include /* maximum allowed space dimension */ #define HALTON_MAX_DIMENSION 1229 /* prototypes for generator type functions */ static size_t halton_state_size (unsigned int dimension); static int halton_init (void *state, unsigned int dimension); static int halton_get (void *state, unsigned int dimension, double *v); /* global Halton generator type object */ static const gsl_qrng_type halton_type = { "halton", HALTON_MAX_DIMENSION, halton_state_size, halton_init, halton_get }; const gsl_qrng_type *gsl_qrng_halton = &halton_type; /* prime numbers (thanks to trolltech http://doc.trolltech.com/3.2/primes.html) */ static const int prime_numbers[HALTON_MAX_DIMENSION] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639, 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939, 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361, 6367, 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, 6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103, 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499, 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919, 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009, 8011, 8017, 8039, 8053, 8059, 8069, 8081, 8087, 8089, 8093, 8101, 8111, 8117, 8123, 8147, 8161, 8167, 8171, 8179, 8191, 8209, 8219, 8221, 8231, 8233, 8237, 8243, 8263, 8269, 8273, 8287, 8291, 8293, 8297, 8311, 8317, 8329, 8353, 8363, 8369, 8377, 8387, 8389, 8419, 8423, 8429, 8431, 8443, 8447, 8461, 8467, 8501, 8513, 8521, 8527, 8537, 8539, 8543, 8563, 8573, 8581, 8597, 8599, 8609, 8623, 8627, 8629, 8641, 8647, 8663, 8669, 8677, 8681, 8689, 8693, 8699, 8707, 8713, 8719, 8731, 8737, 8741, 8747, 8753, 8761, 8779, 8783, 8803, 8807, 8819, 8821, 8831, 8837, 8839, 8849, 8861, 8863, 8867, 8887, 8893, 8923, 8929, 8933, 8941, 8951, 8963, 8969, 8971, 8999, 9001, 9007, 9011, 9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091, 9103, 9109, 9127, 9133, 9137, 9151, 9157, 9161, 9173, 9181, 9187, 9199, 9203, 9209, 9221, 9227, 9239, 9241, 9257, 9277, 9281, 9283, 9293, 9311, 9319, 9323, 9337, 9341, 9343, 9349, 9371, 9377, 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433, 9437, 9439, 9461, 9463, 9467, 9473, 9479, 9491, 9497, 9511, 9521, 9533, 9539, 9547, 9551, 9587, 9601, 9613, 9619, 9623, 9629, 9631, 9643, 9649, 9661, 9677, 9679, 9689, 9697, 9719, 9721, 9733, 9739, 9743, 9749, 9767, 9769, 9781, 9787, 9791, 9803, 9811, 9817, 9829, 9833, 9839, 9851, 9857, 9859, 9871, 9883, 9887, 9901, 9907, 9923, 9929, 9931, 9941, 9949, 9967, 9973 }; /* Halton generator state. * sequence_count = number of calls with this generator */ typedef struct { unsigned int sequence_count; } halton_state_t; static size_t halton_state_size (unsigned int dimension) { return sizeof (halton_state_t); } static int halton_init (void *state, unsigned int dimension) { halton_state_t *h_state = (halton_state_t *) state; h_state->sequence_count = 0; if (dimension < 1 || dimension > HALTON_MAX_DIMENSION) { return GSL_EINVAL; } return GSL_SUCCESS; } static double vdcorput (int x, int b) { double r = 0.; double v = 1.; double binv = 1. / (double) b; while (x > 0) { v *= binv; r += v * (double) (x % b); x /= b; } return r; } static int halton_get (void *state, unsigned int dimension, double *v) { halton_state_t *h_state = (halton_state_t *) state; unsigned int i; if (dimension < 1 || dimension > HALTON_MAX_DIMENSION) { return GSL_EINVAL; } h_state->sequence_count++; for (i = 0; i < dimension; i++) { v[i] = vdcorput (h_state->sequence_count, prime_numbers[i]); } return GSL_SUCCESS; } gsl/qrng/ChangeLog0000644000175000017500000000227713536674414012463 0ustar eddedd2009-07-09 Brian Gough * qrng.c (gsl_qrng_free): handle NULL argument in free 2008-07-03 Brian Gough * qrng.c: moved gsl_qrng_get to inline.c * gsl_qrng.h (gsl_qrng_get): new inline declaration * inline.c: handle inline functions separately * Makefile.am (INCLUDES): use top_srcdir instead of top_builddir 2008-03-17 Brian Gough * reversehalton.c (reversehalton_init): removed unused variable i * halton.c (halton_init): removed unused variable i 2006-04-21 Brian Gough * qrng.c gsl_qrng.h: use q instead of r in all prototypes 2004-05-26 Brian Gough * test.c: added for exit() 2002-11-16 Brian Gough * niederreiter-2.c (calculate_cj): clear uninitialized memory Mon Apr 22 19:20:05 2002 Brian Gough * test.c: output results for each individual test * qrng.c (gsl_qrng_init): added missing init function Mon Oct 23 19:59:46 2000 Brian Gough * qrng.c (gsl_qrng_get): use an array type for the array arguments, rather than a pointer gsl/qrng/Makefile.am0000644000175000017500000000064213536674414012737 0ustar eddeddnoinst_LTLIBRARIES = libgslqrng.la pkginclude_HEADERS = gsl_qrng.h AM_CPPFLAGS = -I$(top_srcdir) libgslqrng_la_SOURCES = gsl_qrng.h qrng.c niederreiter-2.c sobol.c halton.c reversehalton.c inline.c TESTS = $(check_PROGRAMS) check_PROGRAMS = test test_SOURCES = test.c test_LDADD = libgslqrng.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la gsl/qrng/inline.c0000644000175000017500000000034613536674414012326 0ustar eddedd/* Author: G. Jungman */ #include #include #include #include /* Compile all the inline functions */ #define COMPILE_INLINE_STATIC #include "build.h" #include gsl/qrng/niederreiter-2.c0000644000175000017500000002161413536674414013671 0ustar eddedd/* Author: G. Jungman */ /* Implement Niederreiter base 2 generator. * See: * Bratley, Fox, Niederreiter, ACM Trans. Model. Comp. Sim. 2, 195 (1992) */ #include #include #define NIED2_CHARACTERISTIC 2 #define NIED2_BASE 2 #define NIED2_MAX_DIMENSION 12 #define NIED2_MAX_PRIM_DEGREE 5 #define NIED2_MAX_DEGREE 50 #define NIED2_BIT_COUNT 30 #define NIED2_NBITS (NIED2_BIT_COUNT+1) #define MAXV (NIED2_NBITS + NIED2_MAX_DEGREE) /* Z_2 field operations */ #define NIED2_ADD(x,y) (((x)+(y))%2) #define NIED2_MUL(x,y) (((x)*(y))%2) #define NIED2_SUB(x,y) NIED2_ADD((x),(y)) static size_t nied2_state_size(unsigned int dimension); static int nied2_init(void * state, unsigned int dimension); static int nied2_get(void * state, unsigned int dimension, double * v); static const gsl_qrng_type nied2_type = { "niederreiter-base-2", NIED2_MAX_DIMENSION, nied2_state_size, nied2_init, nied2_get }; const gsl_qrng_type * gsl_qrng_niederreiter_2 = &nied2_type; /* primitive polynomials in binary encoding */ static const int primitive_poly[NIED2_MAX_DIMENSION+1][NIED2_MAX_PRIM_DEGREE+1] = { { 1, 0, 0, 0, 0, 0 }, /* 1 */ { 0, 1, 0, 0, 0, 0 }, /* x */ { 1, 1, 0, 0, 0, 0 }, /* 1 + x */ { 1, 1, 1, 0, 0, 0 }, /* 1 + x + x^2 */ { 1, 1, 0, 1, 0, 0 }, /* 1 + x + x^3 */ { 1, 0, 1, 1, 0, 0 }, /* 1 + x^2 + x^3 */ { 1, 1, 0, 0, 1, 0 }, /* 1 + x + x^4 */ { 1, 0, 0, 1, 1, 0 }, /* 1 + x^3 + x^4 */ { 1, 1, 1, 1, 1, 0 }, /* 1 + x + x^2 + x^3 + x^4 */ { 1, 0, 1, 0, 0, 1 }, /* 1 + x^2 + x^5 */ { 1, 0, 0, 1, 0, 1 }, /* 1 + x^3 + x^5 */ { 1, 1, 1, 1, 0, 1 }, /* 1 + x + x^2 + x^3 + x^5 */ { 1, 1, 1, 0, 1, 1 } /* 1 + x + x^2 + x^4 + x^5 */ }; /* degrees of primitive polynomials */ static const int poly_degree[NIED2_MAX_DIMENSION+1] = { 0, 1, 1, 2, 3, 3, 4, 4, 4, 5, 5, 5, 5 }; typedef struct { unsigned int sequence_count; int cj[NIED2_NBITS][NIED2_MAX_DIMENSION]; int nextq[NIED2_MAX_DIMENSION]; } nied2_state_t; static size_t nied2_state_size(unsigned int dimension) { return sizeof(nied2_state_t); } /* Multiply polynomials over Z_2. * Notice use of a temporary vector, * side-stepping aliasing issues when * one of inputs is the same as the output * [especially important in the original fortran version, I guess]. */ static void poly_multiply( const int pa[], int pa_degree, const int pb[], int pb_degree, int pc[], int * pc_degree ) { int j, k; int pt[NIED2_MAX_DEGREE+1]; int pt_degree = pa_degree + pb_degree; for(k=0; k<=pt_degree; k++) { int term = 0; for(j=0; j<=k; j++) { const int conv_term = NIED2_MUL(pa[k-j], pb[j]); term = NIED2_ADD(term, conv_term); } pt[k] = term; } for(k=0; k<=pt_degree; k++) { pc[k] = pt[k]; } for(k=pt_degree+1; k<=NIED2_MAX_DEGREE; k++) { pc[k] = 0; } *pc_degree = pt_degree; } /* Calculate the values of the constants V(J,R) as * described in BFN section 3.3. * * px = appropriate irreducible polynomial for current dimension * pb = polynomial defined in section 2.3 of BFN. * pb is modified */ static void calculate_v( const int px[], int px_degree, int pb[], int * pb_degree, int v[], int maxv ) { const int nonzero_element = 1; /* nonzero element of Z_2 */ const int arbitrary_element = 1; /* arbitray element of Z_2 */ /* The polynomial ph is px**(J-1), which is the value of B on arrival. * In section 3.3, the values of Hi are defined with a minus sign: * don't forget this if you use them later ! */ int ph[NIED2_MAX_DEGREE+1]; /* int ph_degree = *pb_degree; */ int bigm = *pb_degree; /* m from section 3.3 */ int m; /* m from section 2.3 */ int r, k, kj; for(k=0; k<=NIED2_MAX_DEGREE; k++) { ph[k] = pb[k]; } /* Now multiply B by PX so B becomes PX**J. * In section 2.3, the values of Bi are defined with a minus sign : * don't forget this if you use them later ! */ poly_multiply(px, px_degree, pb, *pb_degree, pb, pb_degree); m = *pb_degree; /* Now choose a value of Kj as defined in section 3.3. * We must have 0 <= Kj < E*J = M. * The limit condition on Kj does not seem very relevant * in this program. */ /* Quoting from BFN: "Our program currently sets each K_q * equal to eq. This has the effect of setting all unrestricted * values of v to 1." * Actually, it sets them to the arbitrary chosen value. * Whatever. */ kj = bigm; /* Now choose values of V in accordance with * the conditions in section 3.3. */ for(r=0; r= bigm) { for(r=kj+1; rcj[r][i_dim] = term; } } } static int nied2_init(void * state, unsigned int dimension) { nied2_state_t * n_state = (nied2_state_t *) state; unsigned int i_dim; if(dimension < 1 || dimension > NIED2_MAX_DIMENSION) return GSL_EINVAL; calculate_cj(n_state, dimension); for(i_dim=0; i_dimnextq[i_dim] = 0; n_state->sequence_count = 0; return GSL_SUCCESS; } static int nied2_get(void * state, unsigned int dimension, double * v) { static const double recip = 1.0/(double)(1U << NIED2_NBITS); /* 2^(-nbits) */ nied2_state_t * n_state = (nied2_state_t *) state; int r; int c; unsigned int i_dim; /* Load the result from the saved state. */ for(i_dim=0; i_dimnextq[i_dim] * recip; } /* Find the position of the least-significant zero in sequence_count. * This is the bit that changes in the Gray-code representation as * the count is advanced. */ r = 0; c = n_state->sequence_count; while(1) { if((c % 2) == 1) { ++r; c /= 2; } else break; } if(r >= NIED2_NBITS) return GSL_EFAILED; /* FIXME: better error code here */ /* Calculate the next state. */ for(i_dim=0; i_dimnextq[i_dim] ^= n_state->cj[r][i_dim]; } n_state->sequence_count++; return GSL_SUCCESS; } gsl/qrng/reversehalton.c0000644000175000017500000002463013536674414013733 0ustar eddedd/* Authors: O. Teytaud * Copyright (C) 2007 O. Teytaud * (all comments/suggestions welcome at olivier.teytaud@inria.fr) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Implementation for Halton generator, modified according to the * following improvement (reverse scrambling): [ B. Vandewoestyne and * R. Cools, Good permutations for deterministic scrambled Halton * sequences in terms of L2-discrepancy, Computational and Applied * Mathematics 189, 2006] */ #include #include /* maximum allowed space dimension */ #define REVERSEHALTON_MAX_DIMENSION 1229 /* prototypes for generator type functions */ static size_t reversehalton_state_size (unsigned int dimension); static int reversehalton_init (void *state, unsigned int dimension); static int reversehalton_get (void *state, unsigned int dimension, double *v); /* global Halton generator type object */ static const gsl_qrng_type reversehalton_type = { "reversehalton", REVERSEHALTON_MAX_DIMENSION, reversehalton_state_size, reversehalton_init, reversehalton_get }; const gsl_qrng_type *gsl_qrng_reversehalton = &reversehalton_type; /* prime numbers (thanks to trolltech http://doc.trolltech.com/3.2/primes.html) */ static const int prime_numbers[REVERSEHALTON_MAX_DIMENSION] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639, 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939, 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361, 6367, 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, 6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103, 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499, 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919, 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009, 8011, 8017, 8039, 8053, 8059, 8069, 8081, 8087, 8089, 8093, 8101, 8111, 8117, 8123, 8147, 8161, 8167, 8171, 8179, 8191, 8209, 8219, 8221, 8231, 8233, 8237, 8243, 8263, 8269, 8273, 8287, 8291, 8293, 8297, 8311, 8317, 8329, 8353, 8363, 8369, 8377, 8387, 8389, 8419, 8423, 8429, 8431, 8443, 8447, 8461, 8467, 8501, 8513, 8521, 8527, 8537, 8539, 8543, 8563, 8573, 8581, 8597, 8599, 8609, 8623, 8627, 8629, 8641, 8647, 8663, 8669, 8677, 8681, 8689, 8693, 8699, 8707, 8713, 8719, 8731, 8737, 8741, 8747, 8753, 8761, 8779, 8783, 8803, 8807, 8819, 8821, 8831, 8837, 8839, 8849, 8861, 8863, 8867, 8887, 8893, 8923, 8929, 8933, 8941, 8951, 8963, 8969, 8971, 8999, 9001, 9007, 9011, 9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091, 9103, 9109, 9127, 9133, 9137, 9151, 9157, 9161, 9173, 9181, 9187, 9199, 9203, 9209, 9221, 9227, 9239, 9241, 9257, 9277, 9281, 9283, 9293, 9311, 9319, 9323, 9337, 9341, 9343, 9349, 9371, 9377, 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433, 9437, 9439, 9461, 9463, 9467, 9473, 9479, 9491, 9497, 9511, 9521, 9533, 9539, 9547, 9551, 9587, 9601, 9613, 9619, 9623, 9629, 9631, 9643, 9649, 9661, 9677, 9679, 9689, 9697, 9719, 9721, 9733, 9739, 9743, 9749, 9767, 9769, 9781, 9787, 9791, 9803, 9811, 9817, 9829, 9833, 9839, 9851, 9857, 9859, 9871, 9883, 9887, 9901, 9907, 9923, 9929, 9931, 9941, 9949, 9967, 9973 }; /* Halton generator state. * sequence_count = number of calls with this generator */ typedef struct { unsigned int sequence_count; } reversehalton_state_t; static size_t reversehalton_state_size (unsigned int dimension) { return sizeof (reversehalton_state_t); } static int reversehalton_init (void *state, unsigned int dimension) { reversehalton_state_t *h_state = (reversehalton_state_t *) state; h_state->sequence_count = 0; if (dimension < 1 || dimension > REVERSEHALTON_MAX_DIMENSION) { return GSL_EINVAL; } return GSL_SUCCESS; } static double vdcorput (int x, int b) { double r = 0.; double v = 1.; double binv = 1. / (double) b; while (x > 0) { v *= binv; r += v * (double) ((x % b == 0) ? 0 : b - (x % b)); x /= b; } return r; } static int reversehalton_get (void *state, unsigned int dimension, double *v) { reversehalton_state_t *h_state = (reversehalton_state_t *) state; unsigned int i; if (dimension < 1 || dimension > REVERSEHALTON_MAX_DIMENSION) { return GSL_EINVAL; } h_state->sequence_count++; for (i = 0; i < dimension; i++) { v[i] = vdcorput (h_state->sequence_count, prime_numbers[i]); } return GSL_SUCCESS; } gsl/qrng/TODO0000644000175000017500000000113213536674414011366 0ustar eddedd# -*- org -*- #+CATEGORY: qrng * Sort out "const" in prototypes, it looks odd since there are consts for many functions which modify the state. (Applies to both qrng and rng) * It would be useful to include functions to generate quasi-random number distributions (at least the Gaussian distribution)? obviously the Box-Mueller algorithm cannot be used to maintain the low discrepancy characteristics of the sequence, there are several methods suggested in the literature but it isn't at all my field so I'm not sure which is to be preferred. (DENISON Francis ) gsl/qrng/test.c0000644000175000017500000001505113536674414012026 0ustar eddedd/* Author: G. Jungman (+modifications from O. Teytaud olivier.teytaud@inria.fr) */ #include #include #include #include #include #include void test_sobol(void) { int status = 0; double v[3]; /* int i; */ /* test in dimension 2 */ gsl_qrng * g = gsl_qrng_alloc(gsl_qrng_sobol, 2); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_qrng_get(g, v); status += ( v[0] != 0.25 || v[1] != 0.75 ); gsl_qrng_get(g, v); status += ( v[0] != 0.375 || v[1] != 0.375 ); gsl_qrng_free(g); gsl_test (status, "Sobol d=2"); status = 0; /* test in dimension 3 */ g = gsl_qrng_alloc(gsl_qrng_sobol, 3); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_qrng_get(g, v); status += ( v[0] != 0.25 || v[1] != 0.75 || v[2] != 0.25 ); gsl_qrng_get(g, v); status += ( v[0] != 0.375 || v[1] != 0.375 || v[2] != 0.625 ); gsl_test (status, "Sobol d=3"); status = 0; gsl_qrng_init(g); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_qrng_get(g, v); status += ( v[0] != 0.25 || v[1] != 0.75 || v[2] != 0.25 ); gsl_qrng_get(g, v); status += ( v[0] != 0.375 || v[1] != 0.375 || v[2] != 0.625 ); gsl_qrng_free(g); gsl_test (status, "Sobol d=3 (reinitialized)"); } void test_halton(void) { int status = 0; double v[1229]; unsigned int i; /* test in dimension 1229 */ gsl_qrng * g = gsl_qrng_alloc(gsl_qrng_halton, 1229); for (i=0;i<30;i++) gsl_qrng_get(g, v); gsl_qrng_free(g); gsl_test (status, "Halton d=1229"); status = 0; /* test in dimension 2 */ /*should be * 0.5 0.333333 * 0.25 0.666667 * 0.75 0.111111 * 0.125 0.444444*/ g = gsl_qrng_alloc(gsl_qrng_halton, 2); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_test_rel (v[0], 3.0/4.0, 1e-3, "halton(2) k=2 v[0]"); gsl_test_rel (v[1], 1.0/9.0, 1e-3, "halton(2) k=2 v[1]"); gsl_qrng_get(g, v); gsl_test_rel (v[0], 1.0/8.0, 1e-3, "halton(2) k=3 v[0]"); gsl_test_rel (v[1], 4.0/9.0, 1e-3, "halton(2) k=3 v[1]"); gsl_qrng_free(g); /* test in dimension 3 */ g = gsl_qrng_alloc(gsl_qrng_halton, 3); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_test_rel (v[0], 0.75, 1e-3, "halton(3) k=3 v[0]"); gsl_test_rel (v[1], 1.0/9.0, 1e-3, "halton(3) k=3 v[1]"); gsl_test_rel (v[2], 0.6, 1e-3, "halton(3) k=3 v[2]"); gsl_qrng_get(g, v); gsl_test_rel (v[0], 0.125, 1e-3, "halton(3) k=4 v[0]"); gsl_test_rel (v[1], 4.0/9.0, 1e-3, "halton(3) k=4 v[1]"); gsl_test_rel (v[2], 0.8, 1e-3, "halton(3) k=4 v[2]"); gsl_qrng_init(g); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_test_rel (v[0], 0.75, 1e-3, "halton(3) reinitialized k=3 v[0]"); gsl_test_rel (v[1], 1.0/9.0, 1e-3, "halton(3) reinitialized k=3 v[1]"); gsl_test_rel (v[2], 0.6, 1e-3, "halton(3) reinitialized k=3 v[2]"); gsl_qrng_get(g, v); gsl_test_rel (v[0], 0.125, 1e-3, "halton(3) reinitialized k=4 v[0]"); gsl_test_rel (v[1], 4.0/9.0, 1e-3, "halton(3) reinitialized k=4 v[1]"); gsl_test_rel (v[2], 0.8, 1e-3, "halton(3) reinitialized k=4 v[2]"); gsl_qrng_free(g); } void test_reversehalton(void) { int status = 0; double v[3]; /* test in dimension 2 */ gsl_qrng * g = gsl_qrng_alloc(gsl_qrng_reversehalton, 2); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_qrng_get(g, v); /* should be * 0.5 0.666667 * 0.25 0.333333 * 0.75 0.222222 * 0.125 0.888889*/ gsl_test_rel (v[0], 3.0/4.0, 1e-3, "reversehalton(2) k=2 v[0]"); gsl_test_rel (v[1], 2.0/9.0, 1e-3, "reversehalton(2) k=2 v[1]"); gsl_qrng_get(g, v); gsl_test_rel (v[0], 1.0/8.0, 1e-3, "reversehalton(2) k=2 v[0]"); gsl_test_rel (v[1], 8.0/9.0, 1e-3, "reversehalton(2) k=2 v[1]"); gsl_qrng_free(g); /* test in dimension 3 */ g = gsl_qrng_alloc(gsl_qrng_reversehalton, 3); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_test_rel (v[0], 0.75, 1e-3, "reversehalton(3) k=3 v[0]"); gsl_test_rel (v[1], 2.0/9.0, 1e-3, "reversehalton(3) k=3 v[1]"); gsl_test_rel (v[2], 0.4, 1e-3, "reversehalton(3) k=3 v[2]"); gsl_qrng_get(g, v); gsl_test_rel (v[0], 0.125, 1e-3, "reversehalton(3) k=3 v[0]"); gsl_test_rel (v[1], 8.0/9.0, 1e-3, "reversehalton(3) k=3 v[1]"); gsl_test_rel (v[2], 0.2, 1e-3, "reversehalton(3) k=3 v[2]"); status = 0; gsl_qrng_init(g); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_test_rel (v[0], 0.75, 1e-3, "reversehalton(3) reinitialized k=3 v[0]"); gsl_test_rel (v[1], 2.0/9.0, 1e-3, "reversehalton(3) reinitialized k=3 v[1]"); gsl_test_rel (v[2], 0.4, 1e-3, "reversehalton(3) reinitialized k=3 v[2]"); gsl_qrng_get(g, v); gsl_test_rel (v[0], 0.125, 1e-3, "reversehalton(3) reinitialized k=3 v[0]"); gsl_test_rel (v[1], 8.0/9.0, 1e-3, "reversehalton(3) reinitialized k=3 v[1]"); gsl_test_rel (v[2], 0.2, 1e-3, "reversehalton(3) reinitialized k=3 v[2]"); gsl_qrng_free(g); } void test_nied2(void) { int status = 0; double v[3]; /* int i; */ /* test in dimension 2 */ gsl_qrng * g = gsl_qrng_alloc(gsl_qrng_niederreiter_2, 2); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_qrng_get(g, v); status += ( v[0] != 0.75 || v[1] != 0.25 ); gsl_qrng_get(g, v); status += ( v[0] != 0.25 || v[1] != 0.75 ); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_qrng_get(g, v); status += ( v[0] != 0.625 || v[1] != 0.125 ); gsl_qrng_free(g); gsl_test (status, "Niederreiter d=2"); status = 0; /* test in dimension 3 */ g = gsl_qrng_alloc(gsl_qrng_niederreiter_2, 3); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_qrng_get(g, v); status += ( v[0] != 0.75 || v[1] != 0.25 || v[2] != 0.3125 ); gsl_qrng_get(g, v); status += ( v[0] != 0.25 || v[1] != 0.75 || v[2] != 0.5625 ); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_qrng_get(g, v); status += ( v[0] != 0.625 || v[1] != 0.125 || v[2] != 0.6875 ); gsl_test (status, "Niederreiter d=3"); status = 0; gsl_qrng_init(g); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_qrng_get(g, v); status += ( v[0] != 0.75 || v[1] != 0.25 || v[2] != 0.3125 ); gsl_qrng_get(g, v); status += ( v[0] != 0.25 || v[1] != 0.75 || v[2] != 0.5625 ); gsl_qrng_get(g, v); gsl_qrng_get(g, v); gsl_qrng_get(g, v); status += ( v[0] != 0.625 || v[1] != 0.125 || v[2] != 0.6875 ); gsl_qrng_free(g); gsl_test (status, "Niederreiter d=3 (reinitialized)"); } int main() { gsl_ieee_env_setup (); test_sobol(); test_halton(); test_reversehalton(); test_nied2(); exit (gsl_test_summary ()); } gsl/gsl.spec.in0000644000175000017500000000510613536674414012002 0ustar eddeddName: gsl Summary: GNU Scientific Library (GSL) Packager: jungman@lanl.gov, rosalia@lanl.gov %define version @VERSION@ %define release 0 Version: %{version} Release: %{release} License: GPL Vendor: The GSL Team Distribution: research software Source: gsl-%{version}.tar.gz Group: Libraries/Research %define mybuildroot /var/tmp/%{name}-build BuildRoot: %{mybuildroot} %description The GNU Scientific Library (GSL) is a numerical library for C and C++ programmers. It contains over 1000 mathematical routines written in ANSI C. The library follows modern coding conventions, and lends itself to being used in very high level languages (VHLLs). The library covers the following subject areas: Complex Numbers Roots of Polynomials Special Functions Vectors and Matrices Permutations Sorting BLAS Support Linear Algebra Eigensystems Fast Fourier Transforms Quadrature Random Numbers Quasi-Random Sequences Random Distributions Statistics Histograms N-Tuples Monte Carlo Integration Simulated Annealing Differential Equations Interpolation Numerical Differentiation Chebyshev Approximation Series Acceleration Discrete Hankel Transforms Root-Finding Minimization Least-Squares Fitting Physical Constants IEEE Floating-Point Further information can be found in the GSL Reference Manual. Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 The GSL Team. Install the gsl package if you need a library for high-level scientific numerical analysis. %prep %setup -q -n gsl-%{version} %build CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{_prefix} \ --bindir=%{_bindir} --mandir=%{_mandir} \ --localstatedir=%{_localstatedir} --libdir=%{_libdir} \ --datadir=%{_datadir} --includedir=%{_includedir} \ --sysconfdir=%{_sysconfdir} make %install rm -rf $RPM_BUILD_ROOT make prefix=$RPM_BUILD_ROOT%{_prefix} bindir=$RPM_BUILD_ROOT%{_bindir} \ mandir=$RPM_BUILD_ROOT%{_mandir} libdir=$RPM_BUILD_ROOT%{_libdir} \ localstatedir=$RPM_BUILD_ROOT%{_localstatedir} \ datadir=$RPM_BUILD_ROOT%{_datadir} \ includedir=$RPM_BUILD_ROOT%{_includedir} \ sysconfdir=$RPM_BUILD_ROOT%{_sysconfdir} install %clean rm -rf $RPM_BUILD_ROOT %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %files %doc {NEWS,ChangeLog,INSTALL,README,AUTHORS,THANKS,SUPPORT,BUGS} %doc /usr/info/* /usr/bin/gsl-config /usr/bin/gsl-histogram /usr/bin/gsl-randist /usr/lib /usr/include/gsl /usr/share/aclocal/gsl.m4 /usr/share/man gsl/multifit_nlinear/0000755000175000017500000000000014057135461013270 5ustar eddeddgsl/multifit_nlinear/common.c0000644000175000017500000000621213536674414014734 0ustar eddedd/* multifit_nlinear/common.c * * Copyright (C) 2014, 2015, 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static double scaled_enorm (const gsl_vector * d, const gsl_vector * f); static void scaled_addition (const double alpha, const gsl_vector * x, const double beta, const gsl_vector * y, gsl_vector * z); static double quadratic_preduction(const gsl_vector *f, const gsl_matrix * J, const gsl_vector * dx, gsl_vector * work); /* compute || diag(d) f || */ static double scaled_enorm (const gsl_vector * d, const gsl_vector * f) { double e2 = 0; size_t i, n = f->size; for (i = 0; i < n; i++) { double fi = gsl_vector_get (f, i); double di = gsl_vector_get (d, i); double u = di * fi; e2 += u * u; } return sqrt (e2); } /* compute z = alpha*x + beta*y */ static void scaled_addition (const double alpha, const gsl_vector * x, const double beta, const gsl_vector * y, gsl_vector * z) { const size_t N = z->size; size_t i; for (i = 0; i < N; i++) { double xi = gsl_vector_get (x, i); double yi = gsl_vector_get (y, i); gsl_vector_set (z, i, alpha * xi + beta * yi); } } /* quadratic_preduction() Calculate predicted reduction based on standard quadratic model: m_k(dx) = Phi(x_k) + dx' g + 1/2 dx' B_k dx predicted_reduction = m_k(0) - m_k(dx) = -2 g^T dx / ||f||^2 - ( ||J*dx|| / ||f|| )^2 = -2 fhat . beta - ||beta||^2 where: beta = J*dx / ||f|| Inputs: f - f(x), size n J - Jacobian J(x), n-by-p dx - proposed step, size p work - workspace, size n Return: predicted reduction */ static double quadratic_preduction(const gsl_vector * f, const gsl_matrix * J, const gsl_vector * dx, gsl_vector * work) { const size_t n = f->size; const double normf = gsl_blas_dnrm2(f); double pred_reduction; double norm_beta; /* ||J*dx|| / ||f|| */ size_t i; /* compute beta = J*dx / ||f|| */ gsl_blas_dgemv(CblasNoTrans, 1.0 / normf, J, dx, 0.0, work); norm_beta = gsl_blas_dnrm2(work); /* initialize to ( ||J*dx|| / ||f|| )^2 */ pred_reduction = -norm_beta * norm_beta; /* subtract 2*fhat.beta */ for (i = 0; i < n; ++i) { double fi = gsl_vector_get(f, i); double betai = gsl_vector_get(work, i); pred_reduction -= 2.0 * (fi / normf) * betai; } return pred_reduction; } gsl/multifit_nlinear/test_lin2.c0000644000175000017500000000402013536674414015342 0ustar eddedd#define lin2_N 20 /* can be anything >= p */ #define lin2_P 5 static double lin2_x0[lin2_P] = { 1.0, 1.0, 1.0, 1.0, 1.0 }; static double lin2_epsrel = 1.0e-9; static void lin2_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double n = (double) lin2_N; const double sumsq_exact = 0.5 * (n*(n - 1.0)) / (2.0*n + 1.0); const double sum_exact = 3.0 / (2.0*n + 1.0); double sum = 0.0; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < lin2_P; ++i) sum += (i + 1.0) * x[i]; gsl_test_rel(sum, sum_exact, epsrel, "%s/%s coeff sum", sname, pname); } static int lin2_f (const gsl_vector * x, void *params, gsl_vector * f) { size_t i, j; for (i = 0; i < lin2_N; ++i) { double fi = 0.0; for (j = 0; j < lin2_P; ++j) { double xj = gsl_vector_get(x, j); fi += (j + 1) * xj; } fi = (i + 1) * fi - 1.0; gsl_vector_set(f, i, fi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int lin2_df (const gsl_vector * x, void *params, gsl_matrix * J) { size_t i, j; for (i = 0; i < lin2_N; ++i) { for (j = 0; j < lin2_P; ++j) { gsl_matrix_set(J, i, j, (i + 1.0) * (j + 1.0)); } } (void)x; /* avoid unused parameter warning */ (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int lin2_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { (void)x; /* avoid unused parameter warnings */ (void)v; (void)params; gsl_vector_set_zero(fvv); return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf lin2_func = { lin2_f, lin2_df, lin2_fvv, lin2_N, lin2_P, NULL, 0, 0, 0 }; static test_fdf_problem lin2_problem = { "linear_rank1", lin2_x0, NULL, NULL, &lin2_epsrel, &lin2_checksol, &lin2_func }; gsl/multifit_nlinear/fdjac.c0000644000175000017500000001274513536674414014523 0ustar eddedd/* multifit_nlinear/fdjac.c * * Copyright (C) 2013, 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * * This module contains routines for approximating the Jacobian with * finite differences for nonlinear least-squares fitting. */ #include #include #include #include #include static int forward_jac(const double h, const gsl_vector *x, const gsl_vector *wts, gsl_multifit_nlinear_fdf *fdf, const gsl_vector *f, gsl_matrix *J); static int center_jac(const double h, const gsl_vector *x, const gsl_vector *wts, gsl_multifit_nlinear_fdf *fdf, gsl_matrix *J, gsl_vector *work); /* forward_jac() Compute approximate Jacobian using forward differences Inputs: h - finite difference step size x - parameter vector wts - data weights fdf - fdf struct f - (input) vector of function values f_i(x) J - (output) Jacobian matrix Return: success or error */ static int forward_jac(const double h, const gsl_vector *x, const gsl_vector *wts, gsl_multifit_nlinear_fdf *fdf, const gsl_vector *f, gsl_matrix *J) { int status = 0; size_t i, j; double delta; for (j = 0; j < fdf->p; ++j) { double xj = gsl_vector_get(x, j); /* use column j of J as temporary storage for f(x + dx) */ gsl_vector_view v = gsl_matrix_column(J, j); delta = h * fabs(xj); if (delta == 0.0) delta = h; /* perturb x_j to compute forward difference */ gsl_vector_set((gsl_vector *) x, j, xj + delta); status += gsl_multifit_nlinear_eval_f (fdf, x, wts, &v.vector); if (status) return status; /* restore x_j */ gsl_vector_set((gsl_vector *) x, j, xj); delta = 1.0 / delta; for (i = 0; i < fdf->n; ++i) { double fnext = gsl_vector_get(&v.vector, i); double fi = gsl_vector_get(f, i); gsl_matrix_set(J, i, j, (fnext - fi) * delta); } } return status; } /* center_jac() Compute approximate Jacobian using centered differences Inputs: h - finite difference step size x - parameter vector wts - data weights fdf - fdf struct J - (output) Jacobian matrix work - additional workspace, size n Return: success or error */ static int center_jac(const double h, const gsl_vector *x, const gsl_vector *wts, gsl_multifit_nlinear_fdf *fdf, gsl_matrix *J, gsl_vector *work) { int status = 0; size_t i, j; double delta; for (j = 0; j < fdf->p; ++j) { double xj = gsl_vector_get(x, j); /* use column j of J as temporary storage for f(x + dx) */ gsl_vector_view v = gsl_matrix_column(J, j); delta = h * fabs(xj); if (delta == 0.0) delta = h; /* perturb x_j to compute forward difference, f(x + 1/2 delta e_j) */ gsl_vector_set((gsl_vector *) x, j, xj + 0.5 * delta); status += gsl_multifit_nlinear_eval_f (fdf, x, wts, &v.vector); if (status) return status; /* perturb x_j to compute backward difference, f(x - 1/2 delta e_j) */ gsl_vector_set((gsl_vector *) x, j, xj - 0.5 * delta); status += gsl_multifit_nlinear_eval_f (fdf, x, wts, work); if (status) return status; /* restore x_j */ gsl_vector_set((gsl_vector *) x, j, xj); delta = 1.0 / delta; for (i = 0; i < fdf->n; ++i) { double fnext = gsl_vector_get(&v.vector, i); double fprev = gsl_vector_get(work, i); gsl_matrix_set(J, i, j, (fnext - fprev) * delta); } } return status; } /* gsl_multifit_nlinear_df() Compute approximate Jacobian using finite differences Inputs: h - finite difference step size fdtype - finite difference method x - parameter vector wts - data weights (set to NULL if not needed) fdf - fdf f - (input) function values f_i(x) J - (output) approximate (weighted) Jacobian matrix, sqrt(W) * J work - additional workspace for centered differences, size n Return: success or error */ int gsl_multifit_nlinear_df(const double h, const gsl_multifit_nlinear_fdtype fdtype, const gsl_vector *x, const gsl_vector *wts, gsl_multifit_nlinear_fdf *fdf, const gsl_vector *f, gsl_matrix *J, gsl_vector *work) { int status; if (fdtype == GSL_MULTIFIT_NLINEAR_FWDIFF) { status = forward_jac(h, x, wts, fdf, f, J); } else if (fdtype == GSL_MULTIFIT_NLINEAR_CTRDIFF) { status = center_jac(h, x, wts, fdf, J, work); } else { GSL_ERROR("invalid specified fdtype", GSL_EINVAL); } return status; } gsl/multifit_nlinear/test_kirby2.c0000644000175000017500000001562113536674414015711 0ustar eddedd#define kirby2_N 151 #define kirby2_P 5 static double kirby2_x0a[kirby2_P] = { 2.0, -0.1, 0.003, -0.001, 0.00001 }; static double kirby2_x0b[kirby2_P] = { 1.5, -0.15, 0.0025, -0.0015, 0.00002 }; static double kirby2_x[kirby2_P] = { 1.6745063063E+00, -1.3927397867E-01, 2.5961181191E-03, -1.7241811870E-03, 2.1664802578E-05 }; static double kirby2_epsrel = 1.0e-5; static double kirby2_sigma[kirby2_P] = { 8.7989634338E-02, 4.1182041386E-03, 4.1856520458E-05, 5.8931897355E-05, 2.0129761919E-07 }; static double kirby2_F1[kirby2_N] = { 0.0082E0, 0.0112E0, 0.0149E0, 0.0198E0, 0.0248E0, 0.0324E0, 0.0420E0, 0.0549E0, 0.0719E0, 0.0963E0, 0.1291E0, 0.1710E0, 0.2314E0, 0.3227E0, 0.4809E0, 0.7084E0, 1.0220E0, 1.4580E0, 1.9520E0, 2.5410E0, 3.2230E0, 3.9990E0, 4.8520E0, 5.7320E0, 6.7270E0, 7.8350E0, 9.0250E0, 10.2670E0, 11.5780E0, 12.9440E0, 14.3770E0, 15.8560E0, 17.3310E0, 18.8850E0, 20.5750E0, 22.3200E0, 22.3030E0, 23.4600E0, 24.0600E0, 25.2720E0, 25.8530E0, 27.1100E0, 27.6580E0, 28.9240E0, 29.5110E0, 30.7100E0, 31.3500E0, 32.5200E0, 33.2300E0, 34.3300E0, 35.0600E0, 36.1700E0, 36.8400E0, 38.0100E0, 38.6700E0, 39.8700E0, 40.0300E0, 40.5000E0, 41.3700E0, 41.6700E0, 42.3100E0, 42.7300E0, 43.4600E0, 44.1400E0, 44.5500E0, 45.2200E0, 45.9200E0, 46.3000E0, 47.0000E0, 47.6800E0, 48.0600E0, 48.7400E0, 49.4100E0, 49.7600E0, 50.4300E0, 51.1100E0, 51.5000E0, 52.1200E0, 52.7600E0, 53.1800E0, 53.7800E0, 54.4600E0, 54.8300E0, 55.4000E0, 56.4300E0, 57.0300E0, 58.0000E0, 58.6100E0, 59.5800E0, 60.1100E0, 61.1000E0, 61.6500E0, 62.5900E0, 63.1200E0, 64.0300E0, 64.6200E0, 65.4900E0, 66.0300E0, 66.8900E0, 67.4200E0, 68.2300E0, 68.7700E0, 69.5900E0, 70.1100E0, 70.8600E0, 71.4300E0, 72.1600E0, 72.7000E0, 73.4000E0, 73.9300E0, 74.6000E0, 75.1600E0, 75.8200E0, 76.3400E0, 76.9800E0, 77.4800E0, 78.0800E0, 78.6000E0, 79.1700E0, 79.6200E0, 79.8800E0, 80.1900E0, 80.6600E0, 81.2200E0, 81.6600E0, 82.1600E0, 82.5900E0, 83.1400E0, 83.5000E0, 84.0000E0, 84.4000E0, 84.8900E0, 85.2600E0, 85.7400E0, 86.0700E0, 86.5400E0, 86.8900E0, 87.3200E0, 87.6500E0, 88.1000E0, 88.4300E0, 88.8300E0, 89.1200E0, 89.5400E0, 89.8500E0, 90.2500E0, 90.5500E0, 90.9300E0, 91.2000E0, 91.5500E0, 92.2000E0 }; static double kirby2_F0[kirby2_N] = { 9.65E0, 10.74E0, 11.81E0, 12.88E0, 14.06E0, 15.28E0, 16.63E0, 18.19E0, 19.88E0, 21.84E0, 24.00E0, 26.25E0, 28.86E0, 31.85E0, 35.79E0, 40.18E0, 44.74E0, 49.53E0, 53.94E0, 58.29E0, 62.63E0, 67.03E0, 71.25E0, 75.22E0, 79.33E0, 83.56E0, 87.75E0, 91.93E0, 96.10E0, 100.28E0, 104.46E0, 108.66E0, 112.71E0, 116.88E0, 121.33E0, 125.79E0, 125.79E0, 128.74E0, 130.27E0, 133.33E0, 134.79E0, 137.93E0, 139.33E0, 142.46E0, 143.90E0, 146.91E0, 148.51E0, 151.41E0, 153.17E0, 155.97E0, 157.76E0, 160.56E0, 162.30E0, 165.21E0, 166.90E0, 169.92E0, 170.32E0, 171.54E0, 173.79E0, 174.57E0, 176.25E0, 177.34E0, 179.19E0, 181.02E0, 182.08E0, 183.88E0, 185.75E0, 186.80E0, 188.63E0, 190.45E0, 191.48E0, 193.35E0, 195.22E0, 196.23E0, 198.05E0, 199.97E0, 201.06E0, 202.83E0, 204.69E0, 205.86E0, 207.58E0, 209.50E0, 210.65E0, 212.33E0, 215.43E0, 217.16E0, 220.21E0, 221.98E0, 225.06E0, 226.79E0, 229.92E0, 231.69E0, 234.77E0, 236.60E0, 239.63E0, 241.50E0, 244.48E0, 246.40E0, 249.35E0, 251.32E0, 254.22E0, 256.24E0, 259.11E0, 261.18E0, 264.02E0, 266.13E0, 268.94E0, 271.09E0, 273.87E0, 276.08E0, 278.83E0, 281.08E0, 283.81E0, 286.11E0, 288.81E0, 291.08E0, 293.75E0, 295.99E0, 298.64E0, 300.84E0, 302.02E0, 303.48E0, 305.65E0, 308.27E0, 310.41E0, 313.01E0, 315.12E0, 317.71E0, 319.79E0, 322.36E0, 324.42E0, 326.98E0, 329.01E0, 331.56E0, 333.56E0, 336.10E0, 338.08E0, 340.60E0, 342.57E0, 345.08E0, 347.02E0, 349.52E0, 351.44E0, 353.93E0, 355.83E0, 358.32E0, 360.20E0, 362.67E0, 364.53E0, 367.00E0, 371.30E0 }; static void kirby2_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 3.9050739624E+00; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < kirby2_P; ++i) { gsl_test_rel(x[i], kirby2_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int kirby2_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[kirby2_P]; size_t i; for (i = 0; i < kirby2_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < kirby2_N; i++) { double t = kirby2_F0[i]; double y = ((b[0] + t* (b[1] + t * b[2])) / (1 + t*(b[3] + t *b[4]))); gsl_vector_set (f, i, kirby2_F1[i] - y); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int kirby2_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[kirby2_P]; size_t i; for (i = 0; i < kirby2_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < kirby2_N; i++) { double t = kirby2_F0[i]; double u = (b[0] + t*(b[1] + t*b[2])); double v = (1 + t*(b[3] + t*b[4])); gsl_matrix_set (df, i, 0, -1/v); gsl_matrix_set (df, i, 1, -t/v); gsl_matrix_set (df, i, 2, -t*t/v); gsl_matrix_set (df, i, 3, t*u/(v*v)); gsl_matrix_set (df, i, 4, t*t*u/(v*v)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int kirby2_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); double x5 = gsl_vector_get(x, 4); double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); double v3 = gsl_vector_get(v, 2); double v4 = gsl_vector_get(v, 3); double v5 = gsl_vector_get(v, 4); size_t i; for (i = 0; i < kirby2_N; i++) { double t = kirby2_F0[i]; double term1 = 1.0 + t*(x4 + t*x5); gsl_vector_set(fvv, i, -2*t/pow(term1, 3.0) * (v4 + t*v5) * (-t*(-v2 + v4*x1 + t*(-v3 + v5*x1 + v4*x2 + t*v5*x2 + t*(v4+t*v5)*x3)) + t*t*(v2 + t*v3)*(x4 + t*x5) + v1*(1.0 + t*(x4 + t*x5)))); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf kirby2_func = { kirby2_f, kirby2_df, kirby2_fvv, kirby2_N, kirby2_P, NULL, 0, 0, 0 }; static test_fdf_problem kirby2a_problem = { "nist-kirby2a", kirby2_x0a, NULL, kirby2_sigma, &kirby2_epsrel, &kirby2_checksol, &kirby2_func }; static test_fdf_problem kirby2b_problem = { "nist-kirby2b", kirby2_x0b, NULL, kirby2_sigma, &kirby2_epsrel, &kirby2_checksol, &kirby2_func }; gsl/multifit_nlinear/test_rat43.c0000644000175000017500000000553213536674414015444 0ustar eddedd#define rat43_N 15 #define rat43_P 4 static double rat43_x0a[rat43_P] = { 100.0, 10.0, 1.0, 1.0 }; static double rat43_x0b[rat43_P] = { 700.0, 5.0, 0.75, 1.3 }; static double rat43_epsrel = 1.0e-6; static double rat43_sigma[rat43_P] = { 1.6302297817E+01, 2.0828735829E+00, 1.9566123451E-01, 6.8761936385E-01 }; static double rat43_F[rat43_N] = { 16.08, 33.83, 65.80, 97.20, 191.55, 326.20, 386.87, 520.53, 590.03, 651.92, 724.93, 699.56, 689.96, 637.56, 717.41 }; static void rat43_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 8.7864049080E+03; const double rat43_x[rat43_P] = { 6.9964151270E+02, 5.2771253025E+00, 7.5962938329E-01, 1.2792483859E+00 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < rat43_P; ++i) { gsl_test_rel(x[i], rat43_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int rat43_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[rat43_P]; size_t i; for (i = 0; i < rat43_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < rat43_N; i++) { double xi = i + 1.0; double e = exp(b[1] - b[2]*xi); double yi = b[0] / pow(1.0 + e, 1.0 / b[3]); gsl_vector_set (f, i, yi - rat43_F[i]); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int rat43_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[rat43_P]; size_t i; for (i = 0; i < rat43_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < rat43_N; i++) { double xi = i + 1.0; double e = exp(b[1] - b[2]*xi); double term1 = 1.0 + e; double term2 = pow(term1, -1.0 / b[3]); gsl_matrix_set (df, i, 0, term2); gsl_matrix_set (df, i, 1, -b[0] / b[3] * e * term2 / term1); gsl_matrix_set (df, i, 2, b[0] / b[3] * xi * e * term2 / term1); gsl_matrix_set (df, i, 3, b[0] / b[3] / b[3] * log(term1) * term2); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf rat43_func = { rat43_f, rat43_df, NULL, /* analytic expression too complex */ rat43_N, rat43_P, NULL, 0, 0, 0 }; static test_fdf_problem rat43a_problem = { "nist-rat43a", rat43_x0a, NULL, rat43_sigma, &rat43_epsrel, &rat43_checksol, &rat43_func }; static test_fdf_problem rat43b_problem = { "nist-rat43b", rat43_x0b, NULL, rat43_sigma, &rat43_epsrel, &rat43_checksol, &rat43_func }; gsl/multifit_nlinear/Makefile.in0000664000175000017500000011604114057135461015342 0ustar eddedd# Makefile.in generated by automake 1.16.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = multifit_nlinear ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(pkginclude_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgslmultifit_nlinear_la_LIBADD = am_libgslmultifit_nlinear_la_OBJECTS = cholesky.lo convergence.lo \ covar.lo dogleg.lo fdf.lo fdfvv.lo fdjac.lo lm.lo mcholesky.lo \ qr.lo scaling.lo subspace2D.lo svd.lo trust.lo libgslmultifit_nlinear_la_OBJECTS = \ $(am_libgslmultifit_nlinear_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = libgslmultifit_nlinear.la ../eigen/libgsleigen.la \ ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la \ ../blas/libgslblas.la ../cblas/libgslcblas.la \ ../matrix/libgslmatrix.la ../sort/libgslsort.la \ ../statistics/libgslstatistics.la ../vector/libgslvector.la \ ../block/libgslblock.la ../complex/libgslcomplex.la \ ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la \ ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la \ ../rng/libgslrng.la ../specfunc/libgslspecfunc.la \ ../poly/libgslpoly.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/cholesky.Plo \ ./$(DEPDIR)/convergence.Plo ./$(DEPDIR)/covar.Plo \ ./$(DEPDIR)/dogleg.Plo ./$(DEPDIR)/fdf.Plo \ ./$(DEPDIR)/fdfvv.Plo ./$(DEPDIR)/fdjac.Plo ./$(DEPDIR)/lm.Plo \ ./$(DEPDIR)/mcholesky.Plo ./$(DEPDIR)/qr.Plo \ ./$(DEPDIR)/scaling.Plo ./$(DEPDIR)/subspace2D.Plo \ ./$(DEPDIR)/svd.Plo ./$(DEPDIR)/test.Po ./$(DEPDIR)/trust.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgslmultifit_nlinear_la_SOURCES) $(test_SOURCES) DIST_SOURCES = $(libgslmultifit_nlinear_la_SOURCES) $(test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLCBLAS_LDFLAGS = @GSLCBLAS_LDFLAGS@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ GSL_LIBADD = @GSL_LIBADD@ GSL_LIBM = @GSL_LIBM@ GSL_LIBS = @GSL_LIBS@ GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@ GSL_LT_VERSION = @GSL_LT_VERSION@ GSL_MAJOR_VERSION = @GSL_MAJOR_VERSION@ GSL_MINOR_VERSION = @GSL_MINOR_VERSION@ HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@ HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@ HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@ HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@ HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@ HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@ HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@ HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@ HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@ HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@ HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@ HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@ HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@ HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@ HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@ HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@ HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libgslmultifit_nlinear.la pkginclude_HEADERS = gsl_multifit_nlinear.h AM_CPPFLAGS = -I$(top_srcdir) libgslmultifit_nlinear_la_SOURCES = cholesky.c convergence.c covar.c dogleg.c fdf.c fdfvv.c fdjac.c lm.c mcholesky.c qr.c scaling.c subspace2D.c svd.c trust.c noinst_HEADERS = \ common.c \ nielsen.c \ qrsolv.c \ test_bard.c \ test_beale.c \ test_biggs.c \ test_box.c \ test_boxbod.c \ test_brown1.c \ test_brown2.c \ test_brown3.c \ test_eckerle.c \ test_enso.c \ test_exp1.c \ test_fdf.c \ test_gaussian.c \ test_hahn1.c \ test_helical.c \ test_jennrich.c \ test_kirby2.c \ test_kowalik.c \ test_lin1.c \ test_lin2.c \ test_lin3.c \ test_meyer.c \ test_meyerscal.c \ test_osborne.c \ test_penalty1.c \ test_penalty2.c \ test_powell1.c \ test_powell2.c \ test_powell3.c \ test_rat42.c \ test_rat43.c \ test_rosenbrock.c \ test_rosenbrocke.c \ test_roth.c \ test_thurber.c \ test_vardim.c \ test_watson.c \ test_wnlin.c \ test_wood.c TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslmultifit_nlinear.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../sort/libgslsort.la ../statistics/libgslstatistics.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../poly/libgslpoly.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu multifit_nlinear/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu multifit_nlinear/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgslmultifit_nlinear.la: $(libgslmultifit_nlinear_la_OBJECTS) $(libgslmultifit_nlinear_la_DEPENDENCIES) $(EXTRA_libgslmultifit_nlinear_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgslmultifit_nlinear_la_OBJECTS) $(libgslmultifit_nlinear_la_LIBADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cholesky.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convergence.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/covar.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dogleg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdfvv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdjac.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mcholesky.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scaling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subspace2D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/svd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trust.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.log: test$(EXEEXT) @p='test$(EXEEXT)'; \ b='test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/cholesky.Plo -rm -f ./$(DEPDIR)/convergence.Plo -rm -f ./$(DEPDIR)/covar.Plo -rm -f ./$(DEPDIR)/dogleg.Plo -rm -f ./$(DEPDIR)/fdf.Plo -rm -f ./$(DEPDIR)/fdfvv.Plo -rm -f ./$(DEPDIR)/fdjac.Plo -rm -f ./$(DEPDIR)/lm.Plo -rm -f ./$(DEPDIR)/mcholesky.Plo -rm -f ./$(DEPDIR)/qr.Plo -rm -f ./$(DEPDIR)/scaling.Plo -rm -f ./$(DEPDIR)/subspace2D.Plo -rm -f ./$(DEPDIR)/svd.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/trust.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/cholesky.Plo -rm -f ./$(DEPDIR)/convergence.Plo -rm -f ./$(DEPDIR)/covar.Plo -rm -f ./$(DEPDIR)/dogleg.Plo -rm -f ./$(DEPDIR)/fdf.Plo -rm -f ./$(DEPDIR)/fdfvv.Plo -rm -f ./$(DEPDIR)/fdjac.Plo -rm -f ./$(DEPDIR)/lm.Plo -rm -f ./$(DEPDIR)/mcholesky.Plo -rm -f ./$(DEPDIR)/qr.Plo -rm -f ./$(DEPDIR)/scaling.Plo -rm -f ./$(DEPDIR)/subspace2D.Plo -rm -f ./$(DEPDIR)/svd.Plo -rm -f ./$(DEPDIR)/test.Po -rm -f ./$(DEPDIR)/trust.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsl/multifit_nlinear/test_powell1.c0000644000175000017500000000552413536674414016073 0ustar eddedd#define powell1_N 4 #define powell1_P 4 static double powell1_x0[powell1_P] = { 3.0, -1.0, 0.0, 1.0 }; static double powell1_epsrel = 1.0e-4; static void powell1_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < powell1_P; ++i) { gsl_test_rel(x[i], 0.0, epsrel, "%s/%s i=%zu", sname, pname, i); } } static int powell1_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get (x, 0); double x2 = gsl_vector_get (x, 1); double x3 = gsl_vector_get (x, 2); double x4 = gsl_vector_get (x, 3); gsl_vector_set(f, 0, x1 + 10.0*x2); gsl_vector_set(f, 1, sqrt(5.0) * (x3 - x4)); gsl_vector_set(f, 2, pow(x2 - 2.0*x3, 2.0)); gsl_vector_set(f, 3, sqrt(10.0) * pow((x1 - x4), 2.0)); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int powell1_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get (x, 0); double x2 = gsl_vector_get (x, 1); double x3 = gsl_vector_get (x, 2); double x4 = gsl_vector_get (x, 3); double term1 = x2 - 2.0*x3; double term2 = x1 - x4; gsl_matrix_set(J, 0, 0, 1.0); gsl_matrix_set(J, 0, 1, 10.0); gsl_matrix_set(J, 0, 2, 0.0); gsl_matrix_set(J, 0, 3, 0.0); gsl_matrix_set(J, 1, 0, 0.0); gsl_matrix_set(J, 1, 1, 0.0); gsl_matrix_set(J, 1, 2, sqrt(5.0)); gsl_matrix_set(J, 1, 3, -sqrt(5.0)); gsl_matrix_set(J, 2, 0, 0.0); gsl_matrix_set(J, 2, 1, 2.0*term1); gsl_matrix_set(J, 2, 2, -4.0*term1); gsl_matrix_set(J, 2, 3, 0.0); gsl_matrix_set(J, 3, 0, 2.0*sqrt(10.0)*term2); gsl_matrix_set(J, 3, 1, 0.0); gsl_matrix_set(J, 3, 2, 0.0); gsl_matrix_set(J, 3, 3, -2.0*sqrt(10.0)*term2); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int powell1_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); double v3 = gsl_vector_get(v, 2); double v4 = gsl_vector_get(v, 3); gsl_vector_set(fvv, 0, 0.0); gsl_vector_set(fvv, 1, 0.0); gsl_vector_set(fvv, 2, 2.0 * pow(v2 - 2.0*v3, 2.0)); gsl_vector_set(fvv, 3, 2.0 * sqrt(10.0) * pow(v1 - v4, 2.0)); (void)x; /* avoid unused parameter warning */ (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf powell1_func = { powell1_f, powell1_df, powell1_fvv, powell1_N, powell1_P, NULL, 0, 0, 0 }; static test_fdf_problem powell1_problem = { "powell_singular", powell1_x0, NULL, NULL, &powell1_epsrel, &powell1_checksol, &powell1_func }; gsl/multifit_nlinear/test_fdf.c0000644000175000017500000002470713536674414015253 0ustar eddedd/* multifit_nlinear/test_fdf.c * * Copyright (C) 2007, 2013, 2014, 2015, 2016 Brian Gough, Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ typedef struct { const char *name; double *x0; /* initial parameters (size p) */ double *weights; /* data weights */ double *sigma; double *epsrel; /* relative tolerance for solution checking */ void (*checksol) (const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname); gsl_multifit_nlinear_fdf *fdf; } test_fdf_problem; #include "test_bard.c" #include "test_beale.c" #include "test_biggs.c" #include "test_box.c" #include "test_boxbod.c" #include "test_brown1.c" #include "test_brown2.c" #include "test_brown3.c" #include "test_eckerle.c" #include "test_enso.c" #include "test_exp1.c" #include "test_gaussian.c" #include "test_hahn1.c" #include "test_helical.c" #include "test_jennrich.c" #include "test_kirby2.c" #include "test_kowalik.c" #include "test_lin1.c" #include "test_lin2.c" #include "test_lin3.c" #include "test_meyer.c" #include "test_meyerscal.c" #include "test_osborne.c" #include "test_penalty1.c" #include "test_penalty2.c" #include "test_powell1.c" #include "test_powell2.c" #include "test_powell3.c" #include "test_rat42.c" #include "test_rat43.c" #include "test_rosenbrock.c" #include "test_rosenbrocke.c" #include "test_roth.c" #include "test_thurber.c" #include "test_vardim.c" #include "test_watson.c" #include "test_wood.c" #include "test_wnlin.c" static void test_fdf(const gsl_multifit_nlinear_type * T, const gsl_multifit_nlinear_parameters * params, const double xtol, const double gtol, const double ftol, const double epsrel, test_fdf_problem *problem); static void test_fdf_checksol(const char *sname, const char *pname, const double epsrel, gsl_multifit_nlinear_workspace *s, test_fdf_problem *problem); /* * FIXME: some test problems are disabled since they fail on certain * solvers. Known failures are: * * Method test-problem * ====== ============ * dogleg thurbera * dogleg rat43a * all boxboda */ static test_fdf_problem *test_problems[] = { /* * These test problems are taken from * * H. B. Nielsen, UCTP test problems for unconstrained optimization, * IMM Department of Mathematical Modeling, Tech. Report * IMM-REP-2000-17, 2000. */ &lin1_problem, /* 1 */ &lin2_problem, /* 2 */ &lin3_problem, /* 3 */ &rosenbrock_problem, /* 4 */ &helical_problem, /* 5 */ &powell1_problem, /* 6 */ &roth_problem, /* 7 */ &bard_problem, /* 8 */ &kowalik_problem, /* 9 */ &meyer_problem, /* 10 */ &watson_problem, /* 11 */ &box_problem, /* 12 */ &jennrich_problem, /* 13 */ &brown1_problem, /* 14 */ &brown2_problem, /* 16 */ &osborne_problem, /* 17 */ &exp1_problem, /* 18 */ &meyerscal_problem, /* 20 */ &powell2_problem, /* * These tests are from * * J. J. More, B. S. Garbow and K. E. Hillstrom, Testing * Unconstrained Optimization Software, ACM Trans. Math. Soft. * Vol 7, No 1, 1981. * * Many of these overlap with the Nielsen tests */ &rosenbrock_problem, /* 1 */ &roth_problem, /* 2 */ &powell3_problem, /* 3 */ &brown3_problem, /* 4 */ &beale_problem, /* 5 */ &jennrich_problem, /* 6 */ &helical_problem, /* 7 */ &bard_problem, /* 8 */ &gaussian_problem, /* 9 */ &meyer_problem, /* 10 */ &box_problem, /* 12 */ &powell1_problem, /* 13 */ &wood_problem, /* 14 */ &kowalik_problem, /* 15 */ &brown1_problem, /* 16 */ &osborne_problem, /* 17 */ &biggs_problem, /* 18 */ &watson_problem, /* 20 */ &rosenbrocke_problem, /* 21 */ &penalty1_problem, /* 23 */ &penalty2_problem, /* 24 */ &vardim_problem, /* 25 */ &brown2_problem, /* 27 */ &lin1_problem, /* 32 */ &lin2_problem, /* 33 */ &lin3_problem, /* 34 */ /* NIST test cases */ &kirby2a_problem, &kirby2b_problem, &hahn1a_problem, &hahn1b_problem, &ensoa_problem, &ensob_problem, /*&thurbera_problem,*/ &thurberb_problem, /*&boxboda_problem,*/ &boxbodb_problem, &rat42a_problem, &rat42b_problem, &eckerlea_problem, &eckerleb_problem, /*&rat43a_problem,*/ &rat43b_problem, /* weighted test cases */ &wnlin_problem1, &wnlin_problem2, NULL }; static void test_fdf_main(const gsl_multifit_nlinear_parameters * params) { const double xtol = pow(GSL_DBL_EPSILON, 0.9); const double gtol = pow(GSL_DBL_EPSILON, 0.9); const double ftol = 0.0; size_t i; for (i = 0; test_problems[i] != NULL; ++i) { test_fdf_problem *problem = test_problems[i]; double epsrel = *(problem->epsrel); gsl_multifit_nlinear_fdf fdf; test_fdf(gsl_multifit_nlinear_trust, params, xtol, gtol, ftol, epsrel, problem); /* test finite difference Jacobian * XXX: watson problem doesn't work with forward differences */ if (problem != &watson_problem) { fdf.df = problem->fdf->df; problem->fdf->df = NULL; test_fdf(gsl_multifit_nlinear_trust, params, xtol, gtol, ftol, 1.0e3 * epsrel, problem); problem->fdf->df = fdf.df; } #if 0 /*XXX: box3d test fails on MacOS here */ if (params->trs == gsl_multifit_nlinear_trs_lmaccel && problem->fdf->fvv != NULL) { /* test finite difference second directional derivative */ fdf.fvv = problem->fdf->fvv; problem->fdf->fvv = NULL; test_fdf(gsl_multifit_nlinear_trust, params, xtol, gtol, ftol, epsrel / params->h_fvv, problem); problem->fdf->fvv = fdf.fvv; } #endif } } /* test_fdf() Test a weighted nonlinear least squares problem Inputs: T - solver to use params - solver parameters xtol - tolerance in x gtol - tolerance in gradient ftol - tolerance in residual vector epsrel - relative error tolerance in solution problem - contains the nonlinear problem and solution point */ static void test_fdf(const gsl_multifit_nlinear_type * T, const gsl_multifit_nlinear_parameters * params, const double xtol, const double gtol, const double ftol, const double epsrel, test_fdf_problem *problem) { gsl_multifit_nlinear_fdf *fdf = problem->fdf; const size_t n = fdf->n; const size_t p = fdf->p; const size_t max_iter = 2500; gsl_vector *x0 = gsl_vector_alloc(p); gsl_vector_view x0v = gsl_vector_view_array(problem->x0, p); gsl_multifit_nlinear_workspace *w = gsl_multifit_nlinear_alloc (T, params, n, p); const char *pname = problem->name; char buf[2048]; char sname[2048]; int status, info; sprintf(buf, "%s/%s/scale=%s/solver=%s", gsl_multifit_nlinear_name(w), params->trs->name, params->scale->name, params->solver->name); if (problem->fdf->df == NULL) { if (params->fdtype == GSL_MULTIFIT_NLINEAR_FWDIFF) strcat(buf, "/fdjac,forward"); else strcat(buf, "/fdjac,center"); } if (problem->fdf->fvv == NULL) { strcat(buf, "/fdfvv"); } strcpy(sname, buf); gsl_vector_memcpy(x0, &x0v.vector); if (problem->weights != NULL) { gsl_vector_const_view wv = gsl_vector_const_view_array(problem->weights, n); gsl_multifit_nlinear_winit(x0, &wv.vector, fdf, w); } else gsl_multifit_nlinear_init(x0, fdf, w); status = gsl_multifit_nlinear_driver(max_iter, xtol, gtol, ftol, NULL, NULL, &info, w); gsl_test(status, "%s/%s did not converge, status=%s", sname, pname, gsl_strerror(status)); /* check solution */ test_fdf_checksol(sname, pname, epsrel, w, problem); if (problem->weights == NULL) { /* test again with weighting matrix W = I */ gsl_vector *wv = gsl_vector_alloc(n); sprintf(sname, "%s/weighted", buf); gsl_vector_memcpy(x0, &x0v.vector); gsl_vector_set_all(wv, 1.0); gsl_multifit_nlinear_winit(x0, wv, fdf, w); status = gsl_multifit_nlinear_driver(max_iter, xtol, gtol, ftol, NULL, NULL, &info, w); gsl_test(status, "%s/%s did not converge, status=%s", sname, pname, gsl_strerror(status)); test_fdf_checksol(sname, pname, epsrel, w, problem); gsl_vector_free(wv); } gsl_multifit_nlinear_free(w); gsl_vector_free(x0); } static void test_fdf_checksol(const char *sname, const char *pname, const double epsrel, gsl_multifit_nlinear_workspace *w, test_fdf_problem *problem) { gsl_multifit_nlinear_fdf *fdf = problem->fdf; const double *sigma = problem->sigma; gsl_vector *f = gsl_multifit_nlinear_residual(w); gsl_vector *x = gsl_multifit_nlinear_position(w); double sumsq; /* check solution vector x and sumsq = ||f||^2 */ gsl_blas_ddot(f, f, &sumsq); (problem->checksol)(x->data, sumsq, epsrel, sname, pname); /* check variances */ if (sigma) { const size_t n = fdf->n; const size_t p = fdf->p; size_t i; gsl_matrix * covar = gsl_matrix_alloc (p, p); gsl_matrix *J = gsl_multifit_nlinear_jac (w); gsl_multifit_nlinear_covar (J, 0.0, covar); for (i = 0; i < p; i++) { double ei = sqrt(sumsq/(n-p))*sqrt(gsl_matrix_get(covar,i,i)); gsl_test_rel (ei, sigma[i], epsrel, "%s/%s, sigma(%d)", sname, pname, i) ; } gsl_matrix_free (covar); } } gsl/multifit_nlinear/test_hahn1.c0000644000175000017500000001741113536674414015505 0ustar eddedd#define hahn1_N 236 #define hahn1_P 7 static double hahn1_x0a[hahn1_P] = { 10, -1, 0.05, -0.00001, -0.05, 0.001, -0.000001 }; static double hahn1_x0b[hahn1_P] = { 1, -0.1, 0.005, -0.000001, -0.005, 0.0001, -0.0000001}; static double hahn1_epsrel = 1.0e-5; static double hahn1_sigma[hahn1_P] = { 1.7070154742E-01, 1.2000289189E-02, 2.2508314937E-04, 2.7578037666E-07, 2.4712888219E-04, 1.0449373768E-05, 1.3027335327E-08 }; static double hahn1_F1[hahn1_N] = { .591E0, 1.547E0, 2.902E0, 2.894E0, 4.703E0, 6.307E0, 7.03E0 , 7.898E0, 9.470E0, 9.484E0, 10.072E0, 10.163E0, 11.615E0, 12.005E0, 12.478E0, 12.982E0, 12.970E0, 13.926E0, 14.452E0, 14.404E0, 15.190E0, 15.550E0, 15.528E0, 15.499E0, 16.131E0, 16.438E0, 16.387E0, 16.549E0, 16.872E0, 16.830E0, 16.926E0, 16.907E0, 16.966E0, 17.060E0, 17.122E0, 17.311E0, 17.355E0, 17.668E0, 17.767E0, 17.803E0, 17.765E0, 17.768E0, 17.736E0, 17.858E0, 17.877E0, 17.912E0, 18.046E0, 18.085E0, 18.291E0, 18.357E0, 18.426E0, 18.584E0, 18.610E0, 18.870E0, 18.795E0, 19.111E0, .367E0, .796E0, 0.892E0, 1.903E0, 2.150E0, 3.697E0, 5.870E0, 6.421E0, 7.422E0, 9.944E0, 11.023E0, 11.87E0 , 12.786E0, 14.067E0, 13.974E0, 14.462E0, 14.464E0, 15.381E0, 15.483E0, 15.59E0 , 16.075E0, 16.347E0, 16.181E0, 16.915E0, 17.003E0, 16.978E0, 17.756E0, 17.808E0, 17.868E0, 18.481E0, 18.486E0, 19.090E0, 16.062E0, 16.337E0, 16.345E0, 16.388E0, 17.159E0, 17.116E0, 17.164E0, 17.123E0, 17.979E0, 17.974E0, 18.007E0, 17.993E0, 18.523E0, 18.669E0, 18.617E0, 19.371E0, 19.330E0, 0.080E0, 0.248E0, 1.089E0, 1.418E0, 2.278E0, 3.624E0, 4.574E0, 5.556E0, 7.267E0, 7.695E0, 9.136E0, 9.959E0, 9.957E0, 11.600E0, 13.138E0, 13.564E0, 13.871E0, 13.994E0, 14.947E0, 15.473E0, 15.379E0, 15.455E0, 15.908E0, 16.114E0, 17.071E0, 17.135E0, 17.282E0, 17.368E0, 17.483E0, 17.764E0, 18.185E0, 18.271E0, 18.236E0, 18.237E0, 18.523E0, 18.627E0, 18.665E0, 19.086E0, 0.214E0, 0.943E0, 1.429E0, 2.241E0, 2.951E0, 3.782E0, 4.757E0, 5.602E0, 7.169E0, 8.920E0, 10.055E0, 12.035E0, 12.861E0, 13.436E0, 14.167E0, 14.755E0, 15.168E0, 15.651E0, 15.746E0, 16.216E0, 16.445E0, 16.965E0, 17.121E0, 17.206E0, 17.250E0, 17.339E0, 17.793E0, 18.123E0, 18.49E0 , 18.566E0, 18.645E0, 18.706E0, 18.924E0, 19.1E0 , 0.375E0, 0.471E0, 1.504E0, 2.204E0, 2.813E0, 4.765E0, 9.835E0, 10.040E0, 11.946E0, 12.596E0, 13.303E0, 13.922E0, 14.440E0, 14.951E0, 15.627E0, 15.639E0, 15.814E0, 16.315E0, 16.334E0, 16.430E0, 16.423E0, 17.024E0, 17.009E0, 17.165E0, 17.134E0, 17.349E0, 17.576E0, 17.848E0, 18.090E0, 18.276E0, 18.404E0, 18.519E0, 19.133E0, 19.074E0, 19.239E0, 19.280E0, 19.101E0, 19.398E0, 19.252E0, 19.89E0 , 20.007E0, 19.929E0, 19.268E0, 19.324E0, 20.049E0, 20.107E0, 20.062E0, 20.065E0, 19.286E0, 19.972E0, 20.088E0, 20.743E0, 20.83E0 , 20.935E0, 21.035E0, 20.93E0 , 21.074E0, 21.085E0, 20.935E0 }; static double hahn1_F0[hahn1_N] = { 24.41E0, 34.82E0, 44.09E0, 45.07E0, 54.98E0, 65.51E0, 70.53E0, 75.70E0, 89.57E0, 91.14E0, 96.40E0, 97.19E0, 114.26E0, 120.25E0, 127.08E0, 133.55E0, 133.61E0, 158.67E0, 172.74E0, 171.31E0, 202.14E0, 220.55E0, 221.05E0, 221.39E0, 250.99E0, 268.99E0, 271.80E0, 271.97E0, 321.31E0, 321.69E0, 330.14E0, 333.03E0, 333.47E0, 340.77E0, 345.65E0, 373.11E0, 373.79E0, 411.82E0, 419.51E0, 421.59E0, 422.02E0, 422.47E0, 422.61E0, 441.75E0, 447.41E0, 448.7E0 , 472.89E0, 476.69E0, 522.47E0, 522.62E0, 524.43E0, 546.75E0, 549.53E0, 575.29E0, 576.00E0, 625.55E0, 20.15E0, 28.78E0, 29.57E0, 37.41E0, 39.12E0, 50.24E0, 61.38E0, 66.25E0, 73.42E0, 95.52E0, 107.32E0, 122.04E0, 134.03E0, 163.19E0, 163.48E0, 175.70E0, 179.86E0, 211.27E0, 217.78E0, 219.14E0, 262.52E0, 268.01E0, 268.62E0, 336.25E0, 337.23E0, 339.33E0, 427.38E0, 428.58E0, 432.68E0, 528.99E0, 531.08E0, 628.34E0, 253.24E0, 273.13E0, 273.66E0, 282.10E0, 346.62E0, 347.19E0, 348.78E0, 351.18E0, 450.10E0, 450.35E0, 451.92E0, 455.56E0, 552.22E0, 553.56E0, 555.74E0, 652.59E0, 656.20E0, 14.13E0, 20.41E0, 31.30E0, 33.84E0, 39.70E0, 48.83E0, 54.50E0, 60.41E0, 72.77E0, 75.25E0, 86.84E0, 94.88E0, 96.40E0, 117.37E0, 139.08E0, 147.73E0, 158.63E0, 161.84E0, 192.11E0, 206.76E0, 209.07E0, 213.32E0, 226.44E0, 237.12E0, 330.90E0, 358.72E0, 370.77E0, 372.72E0, 396.24E0, 416.59E0, 484.02E0, 495.47E0, 514.78E0, 515.65E0, 519.47E0, 544.47E0, 560.11E0, 620.77E0, 18.97E0, 28.93E0, 33.91E0, 40.03E0, 44.66E0, 49.87E0, 55.16E0, 60.90E0, 72.08E0, 85.15E0, 97.06E0, 119.63E0, 133.27E0, 143.84E0, 161.91E0, 180.67E0, 198.44E0, 226.86E0, 229.65E0, 258.27E0, 273.77E0, 339.15E0, 350.13E0, 362.75E0, 371.03E0, 393.32E0, 448.53E0, 473.78E0, 511.12E0, 524.70E0, 548.75E0, 551.64E0, 574.02E0, 623.86E0, 21.46E0, 24.33E0, 33.43E0, 39.22E0, 44.18E0, 55.02E0, 94.33E0, 96.44E0, 118.82E0, 128.48E0, 141.94E0, 156.92E0, 171.65E0, 190.00E0, 223.26E0, 223.88E0, 231.50E0, 265.05E0, 269.44E0, 271.78E0, 273.46E0, 334.61E0, 339.79E0, 349.52E0, 358.18E0, 377.98E0, 394.77E0, 429.66E0, 468.22E0, 487.27E0, 519.54E0, 523.03E0, 612.99E0, 638.59E0, 641.36E0, 622.05E0, 631.50E0, 663.97E0, 646.9E0 , 748.29E0, 749.21E0, 750.14E0, 647.04E0, 646.89E0, 746.9E0 , 748.43E0, 747.35E0, 749.27E0, 647.61E0, 747.78E0, 750.51E0, 851.37E0, 845.97E0, 847.54E0, 849.93E0, 851.61E0, 849.75E0, 850.98E0, 848.23E0 }; static void hahn1_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 1.5324382854E+00; const double hahn1_x[hahn1_P] = { 1.0776351733E+00, -1.2269296921E-01, 4.0863750610E-03, -1.4262662514E-06, -5.7609940901E-03, 2.4053735503E-04, -1.2314450199E-07 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < hahn1_P; ++i) { gsl_test_rel(x[i], hahn1_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int hahn1_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[hahn1_P]; size_t i; for (i = 0; i < hahn1_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < hahn1_N; i++) { double t = hahn1_F0[i]; double y = ((b[0] + t* (b[1] + t * (b[2] + t * b[3]))) / (1 + t*(b[4] + t *(b[5] + t*b[6])))); gsl_vector_set (f, i, hahn1_F1[i] - y); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int hahn1_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[hahn1_P]; size_t i; for (i = 0; i < hahn1_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < hahn1_N; i++) { double t = hahn1_F0[i]; double u = (b[0] + t*(b[1] + t*(b[2] + t * b[3]))); double v = (1 + t*(b[4] + t*(b[5] + t*b[6]))); gsl_matrix_set (df, i, 0, -1/v); gsl_matrix_set (df, i, 1, -t/v); gsl_matrix_set (df, i, 2, -t*t/v); gsl_matrix_set (df, i, 3, -t*t*t/v); gsl_matrix_set (df, i, 4, t*u/(v*v)); gsl_matrix_set (df, i, 5, t*t*u/(v*v)); gsl_matrix_set (df, i, 6, t*t*t*u/(v*v)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf hahn1_func = { hahn1_f, hahn1_df, NULL, /* analytic expression too complex */ hahn1_N, hahn1_P, NULL, 0, 0, 0 }; static test_fdf_problem hahn1a_problem = { "nist-hahn1a", hahn1_x0a, NULL, hahn1_sigma, &hahn1_epsrel, &hahn1_checksol, &hahn1_func }; static test_fdf_problem hahn1b_problem = { "nist-hahn1b", hahn1_x0b, NULL, hahn1_sigma, &hahn1_epsrel, &hahn1_checksol, &hahn1_func }; gsl/multifit_nlinear/test_penalty2.c0000644000175000017500000001026313536674414016242 0ustar eddedd#define penalty2_N 8 /* 2*p */ #define penalty2_P 4 static double penalty2_x0[penalty2_P] = { 0.5, 0.5, 0.5, 0.5 }; static double penalty2_epsrel = 1.0e-12; static void penalty2_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { const double sumsq_exact = 9.37629300735544219e-06; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); (void)x; /* avoid unused parameter warning */ } static int penalty2_f (const gsl_vector * x, void *params, gsl_vector * f) { const double alpha = 1.0e-5; const double sqrt_alpha = sqrt(alpha); double x1 = gsl_vector_get(x, 0); size_t i; double sum = penalty2_P * x1 * x1; gsl_vector_set(f, 0, x1 - 0.2); /* rows [2:p] */ for (i = 1; i < penalty2_P; ++i) { double xi = gsl_vector_get(x, i); double xim1 = gsl_vector_get(x, i - 1); double yi = exp(0.1*(i + 1.0)) + exp(0.1*i); gsl_vector_set(f, i, sqrt_alpha*(exp(0.1*xi) + exp(0.1*xim1) - yi)); sum += (penalty2_P - i) * xi * xi; } /* rows [p+1:2p-1] */ for (i = penalty2_P; i < penalty2_N - 1; ++i) { double xi = gsl_vector_get(x, i - penalty2_P + 1); gsl_vector_set(f, i, sqrt_alpha*(exp(0.1*xi) - exp(-0.1))); } /* row 2p */ gsl_vector_set(f, penalty2_N - 1, sum - 1.0); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int penalty2_df (const gsl_vector * x, void *params, gsl_matrix * J) { const double alpha = 1.0e-5; const double sqrt_alpha = sqrt(alpha); size_t i, j; for (j = 0; j < penalty2_P; ++j) { double xj = gsl_vector_get(x, j); double delta1j = (j == 0) ? 1.0 : 0.0; /* first and last rows */ gsl_matrix_set(J, 0, j, delta1j); gsl_matrix_set(J, penalty2_N - 1, j, 2.0 * (penalty2_P - j) * xj); /* rows [2:p] */ for (i = 1; i < penalty2_P; ++i) { double xi = gsl_vector_get(x, i); double xim1 = gsl_vector_get(x, i - 1); double Jij; if (i == j) Jij = exp(0.1 * xi); else if (i - 1 == j) Jij = exp(0.1 * xim1); else Jij = 0.0; Jij *= 0.1 * sqrt_alpha; gsl_matrix_set(J, i, j, Jij); } /* rows [p+1:2p-1] */ for (i = penalty2_P; i < penalty2_N - 1; ++i) { double xi = gsl_vector_get(x, i - penalty2_P + 1); if (i - penalty2_P + 1 == j) gsl_matrix_set(J, i, j, 0.1 * sqrt_alpha * exp(0.1*xi)); else gsl_matrix_set(J, i, j, 0.0); } } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int penalty2_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { const double alpha = 1.0e-5; const double sqrt_alpha = sqrt(alpha); double v1 = gsl_vector_get(v, 0); double sum = penalty2_P * v1 * v1; size_t i; /* first row */ gsl_vector_set(fvv, 0, 0.0); /* rows [2:p] */ for (i = 1; i < penalty2_P; ++i) { double xi = gsl_vector_get(x, i); double xim1 = gsl_vector_get(x, i - 1); double vi = gsl_vector_get(v, i); double vim1 = gsl_vector_get(v, i - 1); double term1 = exp(xi / 10.0); double term2 = exp(xim1 / 10.0); gsl_vector_set(fvv, i, sqrt_alpha / 100.0 * (term1 * vi * vi + term2 * vim1 * vim1)); sum += (penalty2_P - i) * vi * vi; } /* last row */ gsl_vector_set(fvv, penalty2_N - 1, 2.0 * sum); /* rows [p+1:2p-1] */ for (i = penalty2_P; i < penalty2_N - 1; ++i) { double xi = gsl_vector_get(x, i - penalty2_P + 1); double vi = gsl_vector_get(v, i - penalty2_P + 1); gsl_vector_set(fvv, i, sqrt_alpha / 100.0 * exp(xi / 10.0) * vi * vi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf penalty2_func = { penalty2_f, penalty2_df, penalty2_fvv, penalty2_N, penalty2_P, NULL, 0, 0, 0 }; static test_fdf_problem penalty2_problem = { "penalty2", penalty2_x0, NULL, NULL, &penalty2_epsrel, &penalty2_checksol, &penalty2_func }; gsl/multifit_nlinear/mcholesky.c0000644000175000017500000001774413536675317015461 0ustar eddedd/* multifit_nlinear/mcholesky.c * * Copyright (C) 2015, 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This module calculates the solution of the normal equations least squares * system: * * [ J~^T J~ + mu D~^T D~ ] p~ = -J~^T f * * using the modified Cholesky decomposition. Quantities are scaled * according to: * * J~ = J S * D~ = D S * p~ = S^{-1} p * * where S is a diagonal matrix and S_jj = || J_j || and J_j is column * j of the Jacobian. This balancing transformation seems to be more * numerically stable for some Jacobians. */ #include #include #include #include #include #include #include #include #include #include "common.c" typedef struct { gsl_matrix *JTJ; /* J^T J */ gsl_matrix *work_JTJ; /* copy of J^T J */ gsl_vector *rhs; /* -J^T f, size p */ gsl_permutation *perm; /* permutation matrix for modified Cholesky */ gsl_vector *work3p; /* workspace, size 3*p */ double mu; /* current regularization parameter */ } mcholesky_state_t; static void *mcholesky_alloc (const size_t n, const size_t p); static int mcholesky_init(const void * vtrust_state, void * vstate); static int mcholesky_presolve(const double mu, const void * vtrust_state, void * vstate); static int mcholesky_solve(const gsl_vector * f, gsl_vector *x, const void * vtrust_state, void *vstate); static int mcholesky_solve_rhs(const gsl_vector * b, gsl_vector *x, mcholesky_state_t *state); static int mcholesky_regularize(const double mu, const gsl_vector * diag, gsl_matrix * A, mcholesky_state_t * state); static void * mcholesky_alloc (const size_t n, const size_t p) { mcholesky_state_t *state; (void)n; state = calloc(1, sizeof(mcholesky_state_t)); if (state == NULL) { GSL_ERROR_NULL ("failed to allocate mcholesky state", GSL_ENOMEM); } state->JTJ = gsl_matrix_alloc(p, p); if (state->JTJ == NULL) { GSL_ERROR_NULL ("failed to allocate space for JTJ", GSL_ENOMEM); } state->work_JTJ = gsl_matrix_alloc(p, p); if (state->work_JTJ == NULL) { GSL_ERROR_NULL ("failed to allocate space for JTJ workspace", GSL_ENOMEM); } state->rhs = gsl_vector_alloc(p); if (state->rhs == NULL) { GSL_ERROR_NULL ("failed to allocate space for rhs", GSL_ENOMEM); } state->perm = gsl_permutation_alloc(p); if (state->perm == NULL) { GSL_ERROR_NULL ("failed to allocate space for perm", GSL_ENOMEM); } state->work3p = gsl_vector_alloc(3 * p); if (state->work3p == NULL) { GSL_ERROR_NULL ("failed to allocate space for work3p", GSL_ENOMEM); } state->mu = -1.0; return state; } static void mcholesky_free(void *vstate) { mcholesky_state_t *state = (mcholesky_state_t *) vstate; if (state->JTJ) gsl_matrix_free(state->JTJ); if (state->work_JTJ) gsl_matrix_free(state->work_JTJ); if (state->rhs) gsl_vector_free(state->rhs); if (state->perm) gsl_permutation_free(state->perm); if (state->work3p) gsl_vector_free(state->work3p); free(state); } static int mcholesky_init(const void * vtrust_state, void * vstate) { const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; mcholesky_state_t *state = (mcholesky_state_t *) vstate; /* compute J^T J */ gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, trust_state->J, 0.0, state->JTJ); return GSL_SUCCESS; } /* mcholesky_presolve() Compute the modified Cholesky decomposition of J^T J + mu D^T D. Modified Cholesky is used in case mu = 0 and there are rounding errors in forming J^T J which could lead to an indefinite matrix. Inputs: mu - LM parameter vstate - workspace Notes: 1) On output, state->work_JTJ contains the Cholesky decomposition of J^T J + mu D^T D */ static int mcholesky_presolve(const double mu, const void * vtrust_state, void * vstate) { const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; mcholesky_state_t *state = (mcholesky_state_t *) vstate; gsl_matrix *JTJ = state->work_JTJ; const gsl_vector *diag = trust_state->diag; int status; /* copy lower triangle of A to workspace */ gsl_matrix_tricpy(CblasLower, CblasNonUnit, JTJ, state->JTJ); /* augment normal equations: A -> A + mu D^T D */ status = mcholesky_regularize(mu, diag, JTJ, state); if (status) return status; /* compute modified Cholesky decomposition */ status = gsl_linalg_mcholesky_decomp(JTJ, state->perm, NULL); if (status) return status; state->mu = mu; return GSL_SUCCESS; } /* mcholesky_solve() Compute (J^T J + mu D^T D) x = -J^T f Inputs: f - right hand side vector f x - (output) solution vector vstate - mcholesky workspace */ static int mcholesky_solve(const gsl_vector * f, gsl_vector *x, const void * vtrust_state, void *vstate) { const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; mcholesky_state_t *state = (mcholesky_state_t *) vstate; int status; /* compute rhs = -J^T f */ gsl_blas_dgemv(CblasTrans, -1.0, trust_state->J, f, 0.0, state->rhs); status = mcholesky_solve_rhs(state->rhs, x, state); if (status) return status; return GSL_SUCCESS; } static int mcholesky_rcond(double * rcond, void * vstate) { int status; mcholesky_state_t *state = (mcholesky_state_t *) vstate; double rcond_JTJ; if (state->mu != 0) { /* * Cholesky decomposition hasn't been computed yet, or was computed * with mu > 0 - recompute Cholesky decomposition of J^T J */ /* copy lower triangle of JTJ to workspace */ gsl_matrix_tricpy(CblasLower, CblasNonUnit, state->work_JTJ, state->JTJ); /* compute modified Cholesky decomposition */ status = gsl_linalg_mcholesky_decomp(state->work_JTJ, state->perm, NULL); if (status) return status; } status = gsl_linalg_mcholesky_rcond(state->work_JTJ, state->perm, &rcond_JTJ, state->work3p); if (status == GSL_SUCCESS) *rcond = sqrt(rcond_JTJ); return status; } /* solve: (J^T J + mu D^T D) x = b */ static int mcholesky_solve_rhs(const gsl_vector * b, gsl_vector *x, mcholesky_state_t *state) { int status; gsl_matrix *JTJ = state->work_JTJ; status = gsl_linalg_mcholesky_solve(JTJ, state->perm, b, x); if (status) return status; return GSL_SUCCESS; } /* A <- A + mu D^T D */ static int mcholesky_regularize(const double mu, const gsl_vector * diag, gsl_matrix * A, mcholesky_state_t * state) { (void) state; if (mu != 0.0) { size_t i; for (i = 0; i < diag->size; ++i) { double di = gsl_vector_get(diag, i); double *Aii = gsl_matrix_ptr(A, i, i); *Aii += mu * di * di; } } return GSL_SUCCESS; } static const gsl_multifit_nlinear_solver mcholesky_type = { "mcholesky", mcholesky_alloc, mcholesky_init, mcholesky_presolve, mcholesky_solve, mcholesky_rcond, mcholesky_free }; const gsl_multifit_nlinear_solver *gsl_multifit_nlinear_solver_mcholesky = &mcholesky_type; gsl/multifit_nlinear/qrsolv.c0000644000175000017500000001302613536674414014773 0ustar eddedd/* This function computes the solution to the least squares system phi = [ A x = b , lambda D x = 0 ]^2 where A is an M by N matrix, D is an N by N diagonal matrix, lambda is a scalar parameter and b is a vector of length M. The function requires the factorization of A into A = Q R P^T, where Q is an orthogonal matrix, R is an upper triangular matrix with diagonal elements of non-increasing magnitude and P is a permuation matrix. The system above is then equivalent to [ R z = Q^T b, P^T (lambda D) P z = 0 ] where x = P z. If this system does not have full rank then a least squares solution is obtained. On output the function also provides an upper triangular matrix S such that P^T (A^T A + lambda^2 D^T D) P = S^T S Parameters, r: On input, contains the full upper triangle of R. The diagonal elements are modified but restored on output. The full upper triangle of R is not modified. p: the encoded form of the permutation matrix P. column j of P is column p[j] of the identity matrix. lambda, diag: contains the scalar lambda and the diagonal elements of the matrix D qtb: contains the product Q^T b S: on output contains the matrix S, n-by-n x: on output contains the least squares solution of the system work: is a workspace of length N */ static int qrsolv (gsl_matrix * r, const gsl_permutation * p, const double lambda, const gsl_vector * diag, const gsl_vector * qtb, gsl_matrix * S, gsl_vector * x, gsl_vector * work) { size_t n = r->size2; size_t i, j, k, nsing; /* Copy r and qtb to preserve input and initialise s. In particular, save the diagonal elements of r in x */ for (j = 0; j < n; j++) { double rjj = gsl_matrix_get (r, j, j); double qtbj = gsl_vector_get (qtb, j); for (i = j + 1; i < n; i++) { double rji = gsl_matrix_get (r, j, i); gsl_matrix_set (S, i, j, rji); } gsl_vector_set (x, j, rjj); gsl_vector_set (work, j, qtbj); } /* Eliminate the diagonal matrix d using a Givens rotation */ for (j = 0; j < n; j++) { double qtbpj; size_t pj = gsl_permutation_get (p, j); double diagpj = lambda * gsl_vector_get (diag, pj); if (diagpj == 0) { continue; } gsl_matrix_set (S, j, j, diagpj); for (k = j + 1; k < n; k++) { gsl_matrix_set (S, k, k, 0.0); } /* The transformations to eliminate the row of d modify only a single element of qtb beyond the first n, which is initially zero */ qtbpj = 0; for (k = j; k < n; k++) { /* Determine a Givens rotation which eliminates the appropriate element in the current row of d */ double sine, cosine; double wk = gsl_vector_get (work, k); double rkk = gsl_matrix_get (r, k, k); double skk = gsl_matrix_get (S, k, k); if (skk == 0) { continue; } if (fabs (rkk) < fabs (skk)) { double cotangent = rkk / skk; sine = 0.5 / sqrt (0.25 + 0.25 * cotangent * cotangent); cosine = sine * cotangent; } else { double tangent = skk / rkk; cosine = 0.5 / sqrt (0.25 + 0.25 * tangent * tangent); sine = cosine * tangent; } /* Compute the modified diagonal element of r and the modified element of [qtb,0] */ { double new_rkk = cosine * rkk + sine * skk; double new_wk = cosine * wk + sine * qtbpj; qtbpj = -sine * wk + cosine * qtbpj; gsl_matrix_set(r, k, k, new_rkk); gsl_matrix_set(S, k, k, new_rkk); gsl_vector_set(work, k, new_wk); } /* Accumulate the transformation in the row of s */ for (i = k + 1; i < n; i++) { double sik = gsl_matrix_get (S, i, k); double sii = gsl_matrix_get (S, i, i); double new_sik = cosine * sik + sine * sii; double new_sii = -sine * sik + cosine * sii; gsl_matrix_set(S, i, k, new_sik); gsl_matrix_set(S, i, i, new_sii); } } /* Store the corresponding diagonal element of s and restore the corresponding diagonal element of r */ { double xj = gsl_vector_get(x, j); gsl_matrix_set (r, j, j, xj); } } /* Solve the triangular system for z. If the system is singular then obtain a least squares solution */ nsing = n; for (j = 0; j < n; j++) { double sjj = gsl_matrix_get (S, j, j); if (sjj == 0) { nsing = j; break; } } for (j = nsing; j < n; j++) { gsl_vector_set (work, j, 0.0); } for (k = 0; k < nsing; k++) { double sum = 0; j = (nsing - 1) - k; for (i = j + 1; i < nsing; i++) { sum += gsl_matrix_get(S, i, j) * gsl_vector_get(work, i); } { double wj = gsl_vector_get (work, j); double sjj = gsl_matrix_get (S, j, j); gsl_vector_set (work, j, (wj - sum) / sjj); } } /* Permute the components of z back to the components of x */ for (j = 0; j < n; j++) { size_t pj = gsl_permutation_get (p, j); double wj = gsl_vector_get (work, j); gsl_vector_set (x, pj, wj); } return GSL_SUCCESS; } gsl/multifit_nlinear/nielsen.c0000644000175000017500000000532213536674414015102 0ustar eddedd/* multifit_nlinear/nielsen.c * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This module contains routines for updating the Levenberg-Marquardt * damping parameter on each iteration using Nielsen's method: * * [1] H. B. Nielsen, K. Madsen, Introduction to Optimization and * Data Fitting, Informatics and Mathematical Modeling, * Technical University of Denmark (DTU), 2010. * * 5 routines are needed to implement the update procedure: * * 1. accept - update parameter after a step has been accepted * 2. reject - update parameter after a step has been rejected * 3. free - free workspace state */ #include #include #include #include #include #include #include #include #define LM_ONE_THIRD (0.333333333333333) static int nielsen_init(const gsl_matrix * J, const gsl_vector * diag, double * mu, long * nu); static int nielsen_accept(const double rho, double * mu, long * nu); static int nielsen_reject(double * mu, long * nu); static int nielsen_init(const gsl_matrix * J, const gsl_vector * diag, double * mu, long * nu) { const double mu0 = 1.0e-3; const size_t p = J->size2; size_t j; double max = -1.0; *nu = 2; /* set mu = mu0 * max(diag(J~^T J~)), with J~ = J D^{-1} */ for (j = 0; j < p; ++j) { gsl_vector_const_view v = gsl_matrix_const_column(J, j); double dj = gsl_vector_get(diag, j); double norm = gsl_blas_dnrm2(&v.vector) / dj; max = GSL_MAX(max, norm); } *mu = mu0 * max * max; return GSL_SUCCESS; } static int nielsen_accept(const double rho, double * mu, long * nu) { double b; /* reset nu */ *nu = 2; b = 2.0 * rho - 1.0; b = 1.0 - b*b*b; *mu *= GSL_MAX(LM_ONE_THIRD, b); return GSL_SUCCESS; } static int nielsen_reject(double * mu, long * nu) { *mu *= (double) *nu; /* nu := 2*nu */ *nu <<= 1; return GSL_SUCCESS; } gsl/multifit_nlinear/test_jennrich.c0000644000175000017500000000462413536674414016310 0ustar eddedd#define jennrich_N 10 #define jennrich_P 2 static double jennrich_x0[jennrich_P] = { 0.3, 0.4 }; static double jennrich_epsrel = 1.0e-7; static void jennrich_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 1.243621823556148e+02; const double jennrich_x[jennrich_P] = { 2.578252139935855e-01, 2.578252133471426e-01 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < jennrich_P; ++i) { gsl_test_rel(x[i], jennrich_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int jennrich_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); size_t i; for (i = 0; i < jennrich_N; ++i) { double ip1 = i + 1.0; double fi = 2.0*(i + 2.0) - (exp(x1*ip1) + exp(x2*ip1)); gsl_vector_set(f, i, fi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int jennrich_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); size_t i; for (i = 0; i < jennrich_N; ++i) { double ip1 = i + 1.0; gsl_matrix_set(J, i, 0, -ip1*exp(ip1*x1)); gsl_matrix_set(J, i, 1, -ip1*exp(ip1*x2)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int jennrich_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); size_t i; for (i = 0; i < jennrich_N; ++i) { double ip1 = i + 1.0; double term1 = exp(ip1*x1); double term2 = exp(ip1*x2); gsl_vector_set(fvv, i, -ip1*ip1*(v1*v1*term1 + v2*v2*term2)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf jennrich_func = { jennrich_f, jennrich_df, jennrich_fvv, jennrich_N, jennrich_P, NULL, 0, 0, 0 }; static test_fdf_problem jennrich_problem = { "jennrich", jennrich_x0, NULL, NULL, &jennrich_epsrel, &jennrich_checksol, &jennrich_func }; gsl/multifit_nlinear/test_vardim.c0000644000175000017500000000447513536674414015776 0ustar eddedd#define vardim_N 7 /* p + 2 */ #define vardim_P 5 static double vardim_x0[vardim_P] = { 0.8, 0.6, 0.4, 0.2, 0.0 }; static double vardim_epsrel = 1.0e-12; static void vardim_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < vardim_P; ++i) { gsl_test_rel(x[i], 1.0, epsrel, "%s/%s i=%zu", sname, pname, i); } } static int vardim_f (const gsl_vector * x, void *params, gsl_vector * f) { size_t i; double sum = 0.0; for (i = 0; i < vardim_P; ++i) { double xi = gsl_vector_get(x, i); gsl_vector_set(f, i, xi - 1.0); sum += (i + 1.0) * (xi - 1.0); } gsl_vector_set(f, vardim_P, sum); gsl_vector_set(f, vardim_P + 1, sum*sum); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int vardim_df (const gsl_vector * x, void *params, gsl_matrix * J) { size_t i; double sum = 0.0; gsl_matrix_view m = gsl_matrix_submatrix(J, 0, 0, vardim_P, vardim_P); gsl_matrix_set_identity(&m.matrix); for (i = 0; i < vardim_P; ++i) { double xi = gsl_vector_get(x, i); sum += (i + 1.0) * (xi - 1.0); } for (i = 0; i < vardim_P; ++i) { gsl_matrix_set(J, vardim_P, i, i + 1.0); gsl_matrix_set(J, vardim_P + 1, i, 2*(i + 1.0)*sum); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int vardim_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { size_t i; double sum = 0.0; gsl_vector_set_zero(fvv); for (i = 0; i < vardim_P; ++i) { double vi = gsl_vector_get(v, i); sum += (i + 1.0) * vi; } gsl_vector_set(fvv, vardim_N - 1, 2.0 * sum * sum); (void)x; /* avoid unused parameter warning */ (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf vardim_func = { vardim_f, vardim_df, vardim_fvv, vardim_N, vardim_P, NULL, 0, 0, 0 }; static test_fdf_problem vardim_problem = { "vardim", vardim_x0, NULL, NULL, &vardim_epsrel, &vardim_checksol, &vardim_func }; gsl/multifit_nlinear/test_exp1.c0000644000175000017500000000634613536674414015370 0ustar eddedd#define exp1_N 45 #define exp1_P 4 static double exp1_x0[exp1_P] = { -1.0, -2.0, 1.0, -1.0 }; static double exp1_epsrel = 1.0e-4; static double exp1_Y[exp1_N] = { 0.090542, 0.124569, 0.179367, 0.195654, 0.269707, 0.286027, 0.289892, 0.317475, 0.308191, 0.336995, 0.348371, 0.321337, 0.299423, 0.338972, 0.304763, 0.288903, 0.300820, 0.303974, 0.283987, 0.262078, 0.281593, 0.267531, 0.218926, 0.225572, 0.200594, 0.197375, 0.182440, 0.183892, 0.152285, 0.174028, 0.150874, 0.126220, 0.126266, 0.106384, 0.118923, 0.091868, 0.128926, 0.119273, 0.115997, 0.105831, 0.075261, 0.068387, 0.090823, 0.085205, 0.067203 }; static void exp1_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 1.0e-2; const double exp1_x[exp1_P] = { -4.0, -5.0, 4.0, -4.0 }; /* approx */ gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < exp1_P; ++i) { gsl_test_rel(x[i], exp1_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int exp1_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); size_t i; for (i = 0; i < exp1_N; ++i) { double ti = 0.02*(i + 1.0); double yi = exp1_Y[i]; double fi = yi - (x3*exp(x1*ti) + x4*exp(x2*ti)); gsl_vector_set(f, i, fi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int exp1_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); size_t i; for (i = 0; i < exp1_N; ++i) { double ti = 0.02*(i + 1.0); double term1 = exp(x1*ti); double term2 = exp(x2*ti); gsl_matrix_set(J, i, 0, -x3*ti*term1); gsl_matrix_set(J, i, 1, -x4*ti*term2); gsl_matrix_set(J, i, 2, -term1); gsl_matrix_set(J, i, 3, -term2); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int exp1_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); double v3 = gsl_vector_get(v, 2); double v4 = gsl_vector_get(v, 3); size_t i; for (i = 0; i < exp1_N; ++i) { double ti = 0.02*(i + 1.0); double term1 = exp(x1*ti); double term2 = exp(x2*ti); double term3 = 2*v3 + ti*v1*x3; double term4 = 2*v4 + ti*v2*x4; gsl_vector_set(fvv, i, -ti*(v1*term1*term3 + v2*term2*term4)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf exp1_func = { exp1_f, exp1_df, exp1_fvv, exp1_N, exp1_P, NULL, 0, 0, 0 }; static test_fdf_problem exp1_problem = { "expfit1", exp1_x0, NULL, NULL, &exp1_epsrel, &exp1_checksol, &exp1_func }; gsl/multifit_nlinear/gsl_multifit_nlinear.h0000644000175000017500000002756313536675317017702 0ustar eddedd/* multifit_nlinear/gsl_multifit_nlinear.h * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * Copyright (C) 2015, 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GSL_MULTIFIT_NLINEAR_H__ #define __GSL_MULTIFIT_NLINEAR_H__ #include #include #include #include #include #include #undef __BEGIN_DECLS #undef __END_DECLS #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS /* empty */ # define __END_DECLS /* empty */ #endif __BEGIN_DECLS typedef enum { GSL_MULTIFIT_NLINEAR_FWDIFF, GSL_MULTIFIT_NLINEAR_CTRDIFF } gsl_multifit_nlinear_fdtype; /* Definition of vector-valued functions and gradient with parameters based on gsl_vector */ typedef struct { int (* f) (const gsl_vector * x, void * params, gsl_vector * f); int (* df) (const gsl_vector * x, void * params, gsl_matrix * df); int (* fvv) (const gsl_vector * x, const gsl_vector * v, void * params, gsl_vector * fvv); size_t n; /* number of functions */ size_t p; /* number of independent variables */ void * params; /* user parameters */ size_t nevalf; /* number of function evaluations */ size_t nevaldf; /* number of Jacobian evaluations */ size_t nevalfvv; /* number of fvv evaluations */ } gsl_multifit_nlinear_fdf; /* trust region subproblem method */ typedef struct { const char *name; void * (*alloc) (const void * params, const size_t n, const size_t p); int (*init) (const void * vtrust_state, void * vstate); int (*preloop) (const void * vtrust_state, void * vstate); int (*step) (const void * vtrust_state, const double delta, gsl_vector * dx, void * vstate); int (*preduction) (const void * vtrust_state, const gsl_vector * dx, double * pred, void * vstate); void (*free) (void * vstate); } gsl_multifit_nlinear_trs; /* scaling matrix specification */ typedef struct { const char *name; int (*init) (const gsl_matrix * J, gsl_vector * diag); int (*update) (const gsl_matrix * J, gsl_vector * diag); } gsl_multifit_nlinear_scale; /* * linear least squares solvers - there are three steps to * solving a least squares problem using a trust region * method: * * 1. init: called once per iteration when a new Jacobian matrix * is computed; perform factorization of Jacobian (qr,svd) * or form normal equations matrix (cholesky) * 2. presolve: called each time a new LM parameter value mu is available; * used for cholesky method in order to factor * the (J^T J + mu D^T D) matrix * 3. solve: solve the least square system for a given rhs */ typedef struct { const char *name; void * (*alloc) (const size_t n, const size_t p); int (*init) (const void * vtrust_state, void * vstate); int (*presolve) (const double mu, const void * vtrust_state, void * vstate); int (*solve) (const gsl_vector * f, gsl_vector * x, const void * vtrust_state, void * vstate); int (*rcond) (double * rcond, void * vstate); void (*free) (void * vstate); } gsl_multifit_nlinear_solver; /* tunable parameters */ typedef struct { const gsl_multifit_nlinear_trs *trs; /* trust region subproblem method */ const gsl_multifit_nlinear_scale *scale; /* scaling method */ const gsl_multifit_nlinear_solver *solver; /* solver method */ gsl_multifit_nlinear_fdtype fdtype; /* finite difference method */ double factor_up; /* factor for increasing trust radius */ double factor_down; /* factor for decreasing trust radius */ double avmax; /* max allowed |a|/|v| */ double h_df; /* step size for finite difference Jacobian */ double h_fvv; /* step size for finite difference fvv */ } gsl_multifit_nlinear_parameters; typedef struct { const char *name; void * (*alloc) (const gsl_multifit_nlinear_parameters * params, const size_t n, const size_t p); int (*init) (void * state, const gsl_vector * wts, gsl_multifit_nlinear_fdf * fdf, const gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * g); int (*iterate) (void * state, const gsl_vector * wts, gsl_multifit_nlinear_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * g, gsl_vector * dx); int (*rcond) (double * rcond, void * state); double (*avratio) (void * state); void (*free) (void * state); } gsl_multifit_nlinear_type; /* current state passed to low-level trust region algorithms */ typedef struct { const gsl_vector * x; /* parameter values x */ const gsl_vector * f; /* residual vector f(x) */ const gsl_vector * g; /* gradient J^T f */ const gsl_matrix * J; /* Jacobian J(x) */ const gsl_vector * diag; /* scaling matrix D */ const gsl_vector * sqrt_wts; /* sqrt(diag(W)) or NULL for unweighted */ const double *mu; /* LM parameter */ const gsl_multifit_nlinear_parameters * params; void *solver_state; /* workspace for linear least squares solver */ gsl_multifit_nlinear_fdf * fdf; double *avratio; /* |a| / |v| */ } gsl_multifit_nlinear_trust_state; typedef struct { const gsl_multifit_nlinear_type * type; gsl_multifit_nlinear_fdf * fdf ; gsl_vector * x; /* parameter values x */ gsl_vector * f; /* residual vector f(x) */ gsl_vector * dx; /* step dx */ gsl_vector * g; /* gradient J^T f */ gsl_matrix * J; /* Jacobian J(x) */ gsl_vector * sqrt_wts_work; /* sqrt(W) */ gsl_vector * sqrt_wts; /* ptr to sqrt_wts_work, or NULL if not using weights */ size_t niter; /* number of iterations performed */ gsl_multifit_nlinear_parameters params; void *state; } gsl_multifit_nlinear_workspace; gsl_multifit_nlinear_workspace * gsl_multifit_nlinear_alloc (const gsl_multifit_nlinear_type * T, const gsl_multifit_nlinear_parameters * params, size_t n, size_t p); void gsl_multifit_nlinear_free (gsl_multifit_nlinear_workspace * w); gsl_multifit_nlinear_parameters gsl_multifit_nlinear_default_parameters(void); int gsl_multifit_nlinear_init (const gsl_vector * x, gsl_multifit_nlinear_fdf * fdf, gsl_multifit_nlinear_workspace * w); int gsl_multifit_nlinear_winit (const gsl_vector * x, const gsl_vector * wts, gsl_multifit_nlinear_fdf * fdf, gsl_multifit_nlinear_workspace * w); int gsl_multifit_nlinear_iterate (gsl_multifit_nlinear_workspace * w); double gsl_multifit_nlinear_avratio (const gsl_multifit_nlinear_workspace * w); int gsl_multifit_nlinear_driver (const size_t maxiter, const double xtol, const double gtol, const double ftol, void (*callback)(const size_t iter, void *params, const gsl_multifit_nlinear_workspace *w), void *callback_params, int *info, gsl_multifit_nlinear_workspace * w); gsl_matrix * gsl_multifit_nlinear_jac (const gsl_multifit_nlinear_workspace * w); const char * gsl_multifit_nlinear_name (const gsl_multifit_nlinear_workspace * w); gsl_vector * gsl_multifit_nlinear_position (const gsl_multifit_nlinear_workspace * w); gsl_vector * gsl_multifit_nlinear_residual (const gsl_multifit_nlinear_workspace * w); size_t gsl_multifit_nlinear_niter (const gsl_multifit_nlinear_workspace * w); int gsl_multifit_nlinear_rcond (double *rcond, const gsl_multifit_nlinear_workspace * w); const char * gsl_multifit_nlinear_trs_name (const gsl_multifit_nlinear_workspace * w); int gsl_multifit_nlinear_eval_f(gsl_multifit_nlinear_fdf *fdf, const gsl_vector *x, const gsl_vector *swts, gsl_vector *y); int gsl_multifit_nlinear_eval_df(const gsl_vector *x, const gsl_vector *f, const gsl_vector *swts, const double h, const gsl_multifit_nlinear_fdtype fdtype, gsl_multifit_nlinear_fdf *fdf, gsl_matrix *df, gsl_vector *work); int gsl_multifit_nlinear_eval_fvv(const double h, const gsl_vector *x, const gsl_vector *v, const gsl_vector *f, const gsl_matrix *J, const gsl_vector *swts, gsl_multifit_nlinear_fdf *fdf, gsl_vector *yvv, gsl_vector *work); /* covar.c */ int gsl_multifit_nlinear_covar (const gsl_matrix * J, const double epsrel, gsl_matrix * covar); /* convergence.c */ int gsl_multifit_nlinear_test (const double xtol, const double gtol, const double ftol, int *info, const gsl_multifit_nlinear_workspace * w); /* fdjac.c */ int gsl_multifit_nlinear_df(const double h, const gsl_multifit_nlinear_fdtype fdtype, const gsl_vector *x, const gsl_vector *wts, gsl_multifit_nlinear_fdf *fdf, const gsl_vector *f, gsl_matrix *J, gsl_vector *work); /* fdfvv.c */ int gsl_multifit_nlinear_fdfvv(const double h, const gsl_vector *x, const gsl_vector *v, const gsl_vector *f, const gsl_matrix *J, const gsl_vector *swts, gsl_multifit_nlinear_fdf *fdf, gsl_vector *fvv, gsl_vector *work); /* top-level algorithms */ GSL_VAR const gsl_multifit_nlinear_type * gsl_multifit_nlinear_trust; /* trust region subproblem methods */ GSL_VAR const gsl_multifit_nlinear_trs * gsl_multifit_nlinear_trs_lm; GSL_VAR const gsl_multifit_nlinear_trs * gsl_multifit_nlinear_trs_lmaccel; GSL_VAR const gsl_multifit_nlinear_trs * gsl_multifit_nlinear_trs_dogleg; GSL_VAR const gsl_multifit_nlinear_trs * gsl_multifit_nlinear_trs_ddogleg; GSL_VAR const gsl_multifit_nlinear_trs * gsl_multifit_nlinear_trs_subspace2D; /* scaling matrix strategies */ GSL_VAR const gsl_multifit_nlinear_scale * gsl_multifit_nlinear_scale_levenberg; GSL_VAR const gsl_multifit_nlinear_scale * gsl_multifit_nlinear_scale_marquardt; GSL_VAR const gsl_multifit_nlinear_scale * gsl_multifit_nlinear_scale_more; /* linear solvers */ GSL_VAR const gsl_multifit_nlinear_solver * gsl_multifit_nlinear_solver_cholesky; GSL_VAR const gsl_multifit_nlinear_solver * gsl_multifit_nlinear_solver_mcholesky; GSL_VAR const gsl_multifit_nlinear_solver * gsl_multifit_nlinear_solver_qr; GSL_VAR const gsl_multifit_nlinear_solver * gsl_multifit_nlinear_solver_svd; __END_DECLS #endif /* __GSL_MULTIFIT_NLINEAR_H__ */ gsl/multifit_nlinear/Makefile.am0000644000175000017500000000367613536675317015352 0ustar eddeddnoinst_LTLIBRARIES = libgslmultifit_nlinear.la pkginclude_HEADERS = gsl_multifit_nlinear.h AM_CPPFLAGS = -I$(top_srcdir) libgslmultifit_nlinear_la_SOURCES = cholesky.c convergence.c covar.c dogleg.c fdf.c fdfvv.c fdjac.c lm.c mcholesky.c qr.c scaling.c subspace2D.c svd.c trust.c noinst_HEADERS = \ common.c \ nielsen.c \ qrsolv.c \ test_bard.c \ test_beale.c \ test_biggs.c \ test_box.c \ test_boxbod.c \ test_brown1.c \ test_brown2.c \ test_brown3.c \ test_eckerle.c \ test_enso.c \ test_exp1.c \ test_fdf.c \ test_gaussian.c \ test_hahn1.c \ test_helical.c \ test_jennrich.c \ test_kirby2.c \ test_kowalik.c \ test_lin1.c \ test_lin2.c \ test_lin3.c \ test_meyer.c \ test_meyerscal.c \ test_osborne.c \ test_penalty1.c \ test_penalty2.c \ test_powell1.c \ test_powell2.c \ test_powell3.c \ test_rat42.c \ test_rat43.c \ test_rosenbrock.c \ test_rosenbrocke.c \ test_roth.c \ test_thurber.c \ test_vardim.c \ test_watson.c \ test_wnlin.c \ test_wood.c check_PROGRAMS = test TESTS = $(check_PROGRAMS) test_SOURCES = test.c test_LDADD = libgslmultifit_nlinear.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../sort/libgslsort.la ../statistics/libgslstatistics.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../poly/libgslpoly.la gsl/multifit_nlinear/subspace2D.c0000644000175000017500000005313513536674414015445 0ustar eddedd/* multifit_nlinear/subspace2D.c * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include /* * This module implements a 2D subspace trust region subproblem method, * as outlined in * * [1] G. A. Shultz, R. B. Schnabel, and R. H. Byrd * A Family of Trust-Region-Based Algorithms for Unconstrained * Minimization with Strong Global Convergence Properties, * SIAM Journal on Numerical Analysis 1985 22:1, 47-67 * * [2] R. H. Byrd, R. B. Schnabel, G. A. Shultz, * Approximate solution of the trust region problem by * minimization over two-dimensional subspaces, * Mathematical Programming, January 1988, Volume 40, * Issue 1, pp 247-263 * * The idea is to solve: * * min_{dx} g^T dx + 1/2 dx^T B dx * * with constraints: * * ||D dx|| <= delta * dx \in span{dx_sd, dx_gn} * * where B is the Hessian matrix, B = J^T J * * The steps are as follows: * * 1. preloop: * a. Compute Gauss-Newton and steepest descent vectors, * dx_gn, dx_sd * b. Compute an orthonormal basis for span(D dx_sd, D dx_gn) by * constructing W = [ D dx_sd, D dx_gn ] and performing a QR * decomposition of W. The 2 columns of the Q matrix * will then span the column space of W. W should have rank 2 * unless D*dx_sd and D*dx_gn are parallel, in which case it will * have rank 1. * c. Precompute various quantities needed for the step calculation * * 2. step: * a. If the Gauss-Newton step is inside the trust region, use it * b. if W has rank 1, we cannot form a 2D subspace, so in this case * follow the steepest descent direction to the trust region boundary * and use that as the step. * c. In the full rank 2 case, if the GN point is outside the trust region, * then the minimizer of the objective function lies on the trust * region boundary. Therefore the minimization problem becomes: * * min_{dx} g^T dx + 1/2 dx^T B dx, with ||dx|| = delta, dx = Q * x * * where x is a 2-vector to be determined and the columns of Q are * the orthonormal basis vectors of the subspace. Note the equality * constraint now instead of <=. In terms of the new variable x, * the minimization problem becomes: * * min_x subg^T x + 1/2 x^T subB x, with ||Q*x|| = ||x|| = delta * * where: * subg = Q^T g (2-by-1) * subB = Q^T B Q (2-by-2) * * This equality constrained 2D minimization problem can be solved * with a Lagrangian multiplier, which results in a 4th degree polynomial * equation to be solved. The equation is: * * lambda^4 1 * + lambda^3 2 tr(B) * + lambda^2 (tr(B)^2 + 2 det(B) - g^T g / delta^2) * + lambda^1 (2 det(B) tr(B) - 2 g^T adj(B)^T g / delta^2) * + lambda^0 (det(B)^2 - g^T adj(B)^T adj(B) g / delta^2) * * where adj(B) is the adjugate matrix of B. * * We then check each of the 4 solutions for lambda to determine which * lambda results in the smallest objective function value. This x * is then used to construct the final step: dx = Q*x */ typedef struct { size_t n; /* number of observations */ size_t p; /* number of parameters */ gsl_vector *dx_gn; /* Gauss-Newton step, size p */ gsl_vector *dx_sd; /* steepest descent step, size p */ double norm_Dgn; /* || D dx_gn || */ double norm_Dsd; /* || D dx_sd || */ gsl_vector *workp; /* workspace, length p */ gsl_vector *workn; /* workspace, length n */ gsl_matrix *W; /* orthonormal basis for 2D subspace, p-by-2 */ gsl_matrix *JQ; /* J * Q, n-by-p */ gsl_vector *tau; /* Householder scalars */ gsl_vector *subg; /* subspace gradient = W^T g, 2-by-1 */ gsl_matrix *subB; /* subspace Hessian = W^T B W, 2-by-2 */ gsl_permutation *perm; /* permutation matrix */ double trB; /* Tr(subB) */ double detB; /* det(subB) */ double normg; /* || subg || */ double term0; /* g^T adj(B)^T adj(B) g */ double term1; /* g^T adj(B)^T g */ size_t rank; /* rank of [ dx_sd, dx_gn ] matrix */ gsl_poly_complex_workspace *poly_p; /* tunable parameters */ gsl_multifit_nlinear_parameters params; } subspace2D_state_t; #include "common.c" static void * subspace2D_alloc (const void * params, const size_t n, const size_t p); static void subspace2D_free(void *vstate); static int subspace2D_init(const void *vtrust_state, void *vstate); static int subspace2D_preloop(const void * vtrust_state, void * vstate); static int subspace2D_step(const void * vtrust_state, const double delta, gsl_vector * dx, void * vstate); static int subspace2D_preduction(const void * vtrust_state, const gsl_vector * dx, double * pred, void * vstate); static int subspace2D_solution(const double lambda, gsl_vector * x, subspace2D_state_t * state); static double subspace2D_objective(const gsl_vector * x, subspace2D_state_t * state); static int subspace2D_calc_gn(const gsl_multifit_nlinear_trust_state * trust_state, gsl_vector * dx); static int subspace2D_calc_sd(const gsl_multifit_nlinear_trust_state * trust_state, gsl_vector * dx, subspace2D_state_t * state); static void * subspace2D_alloc (const void * params, const size_t n, const size_t p) { const gsl_multifit_nlinear_parameters *par = (const gsl_multifit_nlinear_parameters *) params; subspace2D_state_t *state; state = calloc(1, sizeof(subspace2D_state_t)); if (state == NULL) { GSL_ERROR_NULL ("failed to allocate subspace2D state", GSL_ENOMEM); } state->dx_gn = gsl_vector_alloc(p); if (state->dx_gn == NULL) { GSL_ERROR_NULL ("failed to allocate space for dx_gn", GSL_ENOMEM); } state->dx_sd = gsl_vector_alloc(p); if (state->dx_sd == NULL) { GSL_ERROR_NULL ("failed to allocate space for dx_sd", GSL_ENOMEM); } state->workp = gsl_vector_alloc(p); if (state->workp == NULL) { GSL_ERROR_NULL ("failed to allocate space for workp", GSL_ENOMEM); } state->workn = gsl_vector_alloc(n); if (state->workn == NULL) { GSL_ERROR_NULL ("failed to allocate space for workn", GSL_ENOMEM); } state->W = gsl_matrix_alloc(p, 2); if (state->W == NULL) { GSL_ERROR_NULL ("failed to allocate space for W", GSL_ENOMEM); } state->JQ = gsl_matrix_alloc(n, p); if (state->JQ == NULL) { GSL_ERROR_NULL ("failed to allocate space for JQ", GSL_ENOMEM); } state->tau = gsl_vector_alloc(2); if (state->tau == NULL) { GSL_ERROR_NULL ("failed to allocate space for tau", GSL_ENOMEM); } state->subg = gsl_vector_alloc(2); if (state->subg == NULL) { GSL_ERROR_NULL ("failed to allocate space for subg", GSL_ENOMEM); } state->subB = gsl_matrix_alloc(2, 2); if (state->subB == NULL) { GSL_ERROR_NULL ("failed to allocate space for subB", GSL_ENOMEM); } state->perm = gsl_permutation_alloc(2); if (state->perm == NULL) { GSL_ERROR_NULL ("failed to allocate space for perm", GSL_ENOMEM); } state->poly_p = gsl_poly_complex_workspace_alloc(5); if (state->poly_p == NULL) { GSL_ERROR_NULL ("failed to allocate space for poly workspace", GSL_ENOMEM); } state->n = n; state->p = p; state->rank = 0; state->params = *par; return state; } static void subspace2D_free(void *vstate) { subspace2D_state_t *state = (subspace2D_state_t *) vstate; if (state->dx_gn) gsl_vector_free(state->dx_gn); if (state->dx_sd) gsl_vector_free(state->dx_sd); if (state->workp) gsl_vector_free(state->workp); if (state->workn) gsl_vector_free(state->workn); if (state->W) gsl_matrix_free(state->W); if (state->JQ) gsl_matrix_free(state->JQ); if (state->tau) gsl_vector_free(state->tau); if (state->subg) gsl_vector_free(state->subg); if (state->subB) gsl_matrix_free(state->subB); if (state->perm) gsl_permutation_free(state->perm); if (state->poly_p) gsl_poly_complex_workspace_free(state->poly_p); free(state); } /* subspace2D_init() Initialize subspace2D solver Inputs: vtrust_state - trust state vstate - workspace Return: success/error */ static int subspace2D_init(const void *vtrust_state, void *vstate) { (void)vtrust_state; (void)vstate; return GSL_SUCCESS; } /* subspace2D_preloop() Initialize subspace2D method prior to iteration loop. This involves computing the Gauss-Newton step and steepest descent step Notes: on output, 1) state->dx_gn contains Gauss-Newton step 2) state->dx_sd contains steepest descent step 3) state->rank contains the rank([dx_sd, dx_gn]) 4) if full rank subspace (rank = 2), then: state->trB = Tr(subB) state->detB = det(subB) state->normg = || subg || */ static int subspace2D_preloop(const void * vtrust_state, void * vstate) { int status; const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; subspace2D_state_t *state = (subspace2D_state_t *) vstate; gsl_vector_view v; double work_data[2]; gsl_vector_view work = gsl_vector_view_array(work_data, 2); int signum; /* calculate Gauss-Newton step */ status = subspace2D_calc_gn(trust_state, state->dx_gn); if (status) return status; /* now calculate the steepest descent step */ status = subspace2D_calc_sd(trust_state, state->dx_sd, state); if (status) return status; /* store norms */ state->norm_Dgn = scaled_enorm(trust_state->diag, state->dx_gn); state->norm_Dsd = scaled_enorm(trust_state->diag, state->dx_sd); /* * now compute orthonormal basis for span(D dx_sd, D dx_gn) using * QR decomposition; set W = [ D dx_sd, D dx_gn ] and normalize each * column to unit magnitude. Then the Q matrix will form a basis for Col(W) */ v = gsl_matrix_column(state->W, 0); gsl_vector_memcpy(&v.vector, state->dx_sd); gsl_vector_mul(&v.vector, trust_state->diag); if (state->norm_Dsd != 0) gsl_vector_scale(&v.vector, 1.0 / state->norm_Dsd); v = gsl_matrix_column(state->W, 1); gsl_vector_memcpy(&v.vector, state->dx_gn); gsl_vector_mul(&v.vector, trust_state->diag); if (state->norm_Dgn != 0) gsl_vector_scale(&v.vector, 1.0 / state->norm_Dgn); /* use a rank revealing QR decomposition in case dx_sd and dx_gn * are parallel */ gsl_linalg_QRPT_decomp(state->W, state->tau, state->perm, &signum, &work.vector); /* check for parallel dx_sd, dx_gn, in which case rank will be 1 */ state->rank = gsl_linalg_QRPT_rank(state->W, -1.0); if (state->rank == 2) { /* * full rank subspace, compute: * subg = Q^T D^{-1} g * subB = Q^T D^{-1} B D^{-1} Q where B = J^T J */ const size_t p = state->p; size_t i; gsl_matrix_view JQ = gsl_matrix_submatrix(state->JQ, 0, 0, state->n, GSL_MIN(2, p)); double B00, B10, B11, g0, g1; /* compute subg */ gsl_vector_memcpy(state->workp, trust_state->g); gsl_vector_div(state->workp, trust_state->diag); gsl_linalg_QR_QTvec(state->W, state->tau, state->workp); g0 = gsl_vector_get(state->workp, 0); g1 = gsl_vector_get(state->workp, 1); gsl_vector_set(state->subg, 0, g0); gsl_vector_set(state->subg, 1, g1); /* compute subB */ /* compute J D^{-1} */ gsl_matrix_memcpy(state->JQ, trust_state->J); for (i = 0; i < p; ++i) { gsl_vector_view c = gsl_matrix_column(state->JQ, i); double di = gsl_vector_get(trust_state->diag, i); gsl_vector_scale(&c.vector, 1.0 / di); } /* compute J D^{-1} Q */ gsl_linalg_QR_matQ(state->W, state->tau, state->JQ); /* compute subB = Q^T D^{-1} J^T J D^{-1} Q */ gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, &JQ.matrix, 0.0, state->subB); B00 = gsl_matrix_get(state->subB, 0, 0); B10 = gsl_matrix_get(state->subB, 1, 0); B11 = gsl_matrix_get(state->subB, 1, 1); state->trB = B00 + B11; state->detB = B00*B11 - B10*B10; state->normg = gsl_blas_dnrm2(state->subg); /* g^T adj(B)^T adj(B) g */ state->term0 = (B10*B10 + B11*B11)*g0*g0 - 2*B10*(B00 + B11)*g0*g1 + (B00*B00 + B10*B10)*g1*g1; /* g^T adj(B)^T g */ state->term1 = B11 * g0 * g0 + g1 * (B00*g1 - 2*B10*g0); } return GSL_SUCCESS; } /* subspace2D_step() Calculate a new step with 2D subspace method. Based on [1]. We seek a vector dx in span{dx_gn, dx_sd} which minimizes the model function subject to ||dx|| <= delta */ static int subspace2D_step(const void * vtrust_state, const double delta, gsl_vector * dx, void * vstate) { const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; subspace2D_state_t *state = (subspace2D_state_t *) vstate; if (state->norm_Dgn <= delta) { /* Gauss-Newton step is inside trust region, use it as final step * since it is the global minimizer of the quadratic model function */ gsl_vector_memcpy(dx, state->dx_gn); } else if (state->rank < 2) { /* rank of [dx_sd, dx_gn] is 1, meaning dx_sd and dx_gn * are parallel so we can't form a 2D subspace. Follow the steepest * descent direction to the trust region boundary as our step */ gsl_vector_memcpy(dx, state->dx_sd); gsl_vector_scale(dx, delta / state->norm_Dsd); } else { int status; const double delta_sq = delta * delta; double u = state->normg / delta; double a[5]; double z[8]; #if 1 a[0] = state->detB * state->detB - state->term0 / delta_sq; a[1] = 2 * state->detB * state->trB - 2 * state->term1 / delta_sq; a[2] = state->trB * state->trB + 2 * state->detB - u * u; a[3] = 2 * state->trB; a[4] = 1.0; #else double TrB_D = state->trB * delta; double detB_D = state->detB * delta; double normg_sq = state->normg * state->normg; a[0] = detB_D * detB_D - state->term0; a[1] = 2 * state->detB * state->trB * delta_sq - 2 * state->term1; a[2] = TrB_D * TrB_D + 2 * state->detB * delta_sq - normg_sq; a[3] = 2 * state->trB * delta_sq; a[4] = delta_sq; #endif status = gsl_poly_complex_solve(a, 5, state->poly_p, z); if (status == GSL_SUCCESS) { size_t i; double min = 0.0; int mini = -1; double x_data[2]; gsl_vector_view x = gsl_vector_view_array(x_data, 2); /* * loop through all four values of the Lagrange multiplier * lambda. For each lambda, evaluate the objective function * with Re(lambda) to determine which lambda minimizes the * function */ for (i = 0; i < 4; ++i) { double cost, normx; /*fprintf(stderr, "root: %.12e + %.12e i\n", z[2*i], z[2*i+1]);*/ status = subspace2D_solution(z[2*i], &x.vector, state); if (status != GSL_SUCCESS) continue; /* singular matrix system */ /* ensure ||x|| = delta */ normx = gsl_blas_dnrm2(&x.vector); if (normx == 0.0) continue; gsl_vector_scale(&x.vector, delta / normx); /* evaluate objective function to determine minimizer */ cost = subspace2D_objective(&x.vector, state); if (mini < 0 || cost < min) { mini = (int) i; min = cost; } } if (mini < 0) { /* did not find minimizer - should not get here */ return GSL_FAILURE; } else { /* compute x which minimizes objective function */ subspace2D_solution(z[2*mini], &x.vector, state); /* dx = Q * x */ gsl_vector_set_zero(dx); gsl_vector_set(dx, 0, gsl_vector_get(&x.vector, 0)); gsl_vector_set(dx, 1, gsl_vector_get(&x.vector, 1)); gsl_linalg_QR_Qvec(state->W, state->tau, dx); /* compute final dx by multiplying by D^{-1} */ gsl_vector_div(dx, trust_state->diag); } } else { GSL_ERROR ("gsl_poly_complex_solve failed", status); } } return GSL_SUCCESS; } static int subspace2D_preduction(const void * vtrust_state, const gsl_vector * dx, double * pred, void * vstate) { const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; subspace2D_state_t *state = (subspace2D_state_t *) vstate; *pred = quadratic_preduction(trust_state->f, trust_state->J, dx, state->workn); return GSL_SUCCESS; } /* solve 2D subspace problem: (B + lambda*I) x = -g */ static int subspace2D_solution(const double lambda, gsl_vector * x, subspace2D_state_t * state) { int status = GSL_SUCCESS; double C_data[4]; gsl_matrix_view C = gsl_matrix_view_array(C_data, 2, 2); double B00 = gsl_matrix_get(state->subB, 0, 0); double B10 = gsl_matrix_get(state->subB, 1, 0); double B11 = gsl_matrix_get(state->subB, 1, 1); /* construct C = B + lambda*I */ gsl_matrix_set(&C.matrix, 0, 0, B00 + lambda); gsl_matrix_set(&C.matrix, 1, 0, B10); gsl_matrix_set(&C.matrix, 0, 1, B10); gsl_matrix_set(&C.matrix, 1, 1, B11 + lambda); /* use modified Cholesky in case C is not positive definite */ gsl_linalg_mcholesky_decomp(&C.matrix, state->perm, NULL); gsl_linalg_mcholesky_solve(&C.matrix, state->perm, state->subg, x); gsl_vector_scale(x, -1.0); return status; } /* evaluate 2D objective function: f(x) = g^T x + 1/2 x^T B x */ static double subspace2D_objective(const gsl_vector * x, subspace2D_state_t * state) { double f; double y_data[2]; gsl_vector_view y = gsl_vector_view_array(y_data, 2); /* compute: y = g + 1/2 B x */ gsl_vector_memcpy(&y.vector, state->subg); gsl_blas_dsymv(CblasLower, 0.5, state->subB, x, 1.0, &y.vector); /* compute: f = x^T ( g + 1/2 B x ) */ gsl_blas_ddot(x, &y.vector, &f); return f; } /* subspace2D_calc_gn() Calculate Gauss-Newton step which satisfies: J dx_gn = -f Inputs: trust_state - trust state variables dx - (output) Gauss-Newton step Return: success/error */ static int subspace2D_calc_gn(const gsl_multifit_nlinear_trust_state * trust_state, gsl_vector * dx) { int status; const gsl_multifit_nlinear_parameters *params = trust_state->params; /* initialize linear least squares solver */ status = (params->solver->init)(trust_state, trust_state->solver_state); if (status) return status; /* prepare the linear solver to compute Gauss-Newton step */ status = (params->solver->presolve)(0.0, trust_state, trust_state->solver_state); if (status) return status; /* solve: J dx_gn = -f for Gauss-Newton step */ status = (params->solver->solve)(trust_state->f, dx, trust_state, trust_state->solver_state); if (status) return status; return GSL_SUCCESS; } /* subspace2D_calc_sd() Calculate steepest descent step, dx_sd = - || D^{-1} g ||^2 / || J D^{-2} g ||^2 D^{-2} g Inputs: trust_state - trust state variables dx - (output) steepest descent vector state - workspace Return: success/error */ static int subspace2D_calc_sd(const gsl_multifit_nlinear_trust_state * trust_state, gsl_vector * dx, subspace2D_state_t * state) { double norm_Dinvg; /* || D^{-1} g || */ double norm_JDinv2g; /* || J D^{-2} g || */ double alpha; /* || D^{-1} g ||^2 / || J D^{-2} g ||^2 */ double u; /* compute workp = D^{-1} g and its norm */ gsl_vector_memcpy(state->workp, trust_state->g); gsl_vector_div(state->workp, trust_state->diag); norm_Dinvg = gsl_blas_dnrm2(state->workp); /* compute workp = D^{-2} g */ gsl_vector_div(state->workp, trust_state->diag); /* compute: workn = J D^{-2} g */ gsl_blas_dgemv(CblasNoTrans, 1.0, trust_state->J, state->workp, 0.0, state->workn); norm_JDinv2g = gsl_blas_dnrm2(state->workn); u = norm_Dinvg / norm_JDinv2g; alpha = u * u; /* dx_sd = -alpha D^{-2} g */ gsl_vector_memcpy(dx, state->workp); gsl_vector_scale(dx, -alpha); return GSL_SUCCESS; } static const gsl_multifit_nlinear_trs subspace2D_type = { "2D-subspace", subspace2D_alloc, subspace2D_init, subspace2D_preloop, subspace2D_step, subspace2D_preduction, subspace2D_free }; const gsl_multifit_nlinear_trs *gsl_multifit_nlinear_trs_subspace2D = &subspace2D_type; gsl/multifit_nlinear/test_lin3.c0000644000175000017500000000432513536674414015353 0ustar eddedd#define lin3_N 50 /* can be anything >= p */ #define lin3_P 10 /* >= 3 */ static double lin3_x0[lin3_P] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; static double lin3_epsrel = 1.0e-8; static void lin3_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double n = (double) lin3_N; const double sumsq_exact = 0.5 * (n*n + 3*n - 6.0) / (2*n - 3.0); const double sum_exact = 3.0 / (2.0*n - 3.0); double sum = 0.0; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 1; i < lin3_P - 1; ++i) sum += (i + 1.0) * x[i]; gsl_test_rel(sum, sum_exact, epsrel, "%s/%s coeff sum", sname, pname); (void)x; /* avoid unused parameter warning */ } static int lin3_f (const gsl_vector * x, void *params, gsl_vector * f) { size_t i, j; gsl_vector_set(f, 0, -1.0); gsl_vector_set(f, lin3_N - 1, -1.0); for (i = 1; i < lin3_N - 1; ++i) { double fi = 0.0; for (j = 1; j < lin3_P - 1; ++j) { double xj = gsl_vector_get(x, j); fi += (j + 1) * xj; } fi = i * fi - 1.0; gsl_vector_set(f, i, fi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int lin3_df (const gsl_vector * x, void *params, gsl_matrix * J) { size_t i, j; gsl_matrix_set_zero(J); for (i = 1; i < lin3_N - 1; ++i) { for (j = 1; j < lin3_P - 1; ++j) { gsl_matrix_set(J, i, j, i * (j + 1.0)); } } (void)x; /* avoid unused parameter warning */ (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int lin3_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { (void)x; /* avoid unused parameter warnings */ (void)v; (void)params; gsl_vector_set_zero(fvv); return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf lin3_func = { lin3_f, lin3_df, lin3_fvv, lin3_N, lin3_P, NULL, 0, 0, 0 }; static test_fdf_problem lin3_problem = { "linear_rank1zeros", lin3_x0, NULL, NULL, &lin3_epsrel, &lin3_checksol, &lin3_func }; gsl/multifit_nlinear/test_wnlin.c0000644000175000017500000001077413536674414015642 0ustar eddedd#define wnlin_N 40 #define wnlin_P 3 /* initial guess should be chosen so that Jacobian has full rank, * or some solvers will fail */ static double wnlin_x0[wnlin_P] = { 1.0, 0.9, 0.0 }; static double wnlin_epsrel = 1.0e-7; static int wnlin_internal_weight = 1; /* data */ static double wnlin_Y[wnlin_N] = { 6.08035e+00, 5.47552e+00, 5.94654e+00, 5.04920e+00, 4.78568e+00, 3.51748e+00, 2.84671e+00, 3.24634e+00, 3.23395e+00, 3.30385e+00, 2.83439e+00, 2.31891e+00, 2.33858e+00, 2.40559e+00, 2.41856e+00, 1.99966e+00, 1.88127e+00, 1.91477e+00, 1.70415e+00, 1.60316e+00, 1.77937e+00, 1.55302e+00, 1.50903e+00, 1.36364e+00, 1.36873e+00, 1.41954e+00, 1.37778e+00, 1.23573e+00, 1.28524e+00, 1.46327e+00, 1.22315e+00, 1.19330e+00, 1.18717e+00, 8.83172e-01, 1.23424e+00, 1.14683e+00, 1.11091e+00, 1.20396e+00, 1.28722e+00, 1.05801e+00 }; /* weights */ static double wnlin_W[wnlin_N] = { 2.77778e+00, 3.27690e+00, 3.85426e+00, 4.51906e+00, 5.28083e+00, 6.14919e+00, 7.13370e+00, 8.24349e+00, 9.48703e+00, 1.08717e+01, 1.24036e+01, 1.40869e+01, 1.59238e+01, 1.79142e+01, 2.00553e+01, 2.23415e+01, 2.47646e+01, 2.73137e+01, 2.99753e+01, 3.27337e+01, 3.55714e+01, 3.84696e+01, 4.14085e+01, 4.43678e+01, 4.73278e+01, 5.02690e+01, 5.31731e+01, 5.60234e+01, 5.88046e+01, 6.15036e+01, 6.41092e+01, 6.66121e+01, 6.90054e+01, 7.12839e+01, 7.34442e+01, 7.54848e+01, 7.74053e+01, 7.92069e+01, 8.08918e+01, 8.24632e+01 }; static void wnlin_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 29.7481259665713758; const double wnlin_x[wnlin_P] = { 5.17378551196259195, 0.111041758006851149, 1.05282724070446099 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < wnlin_P; ++i) { gsl_test_rel(x[i], wnlin_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int wnlin_f (const gsl_vector *x, void *params, gsl_vector *f) { int *iptr = (int *) params; int doweight = iptr ? *iptr : 0; double A = gsl_vector_get (x, 0); double lambda = gsl_vector_get (x, 1); double b = gsl_vector_get (x, 2); size_t i; /* model Yi = A * exp(-lambda * i) + b */ for (i = 0; i < wnlin_N; i++) { double ti = i; double yi = wnlin_Y[i]; double swi = sqrt(wnlin_W[i]); double Mi = A * exp (-lambda * ti) + b; if (doweight) gsl_vector_set (f, i, swi * (Mi - yi)); else gsl_vector_set (f, i, Mi - yi); } return GSL_SUCCESS; } static int wnlin_df (const gsl_vector *x, void *params, gsl_matrix *df) { int *iptr = (int *) params; int doweight = iptr ? *iptr : 0; double A = gsl_vector_get (x, 0); double lambda = gsl_vector_get (x, 1); size_t i; for (i = 0; i < wnlin_N; i++) { gsl_vector_view v = gsl_matrix_row(df, i); double ti = i; double swi = sqrt(wnlin_W[i]); double e = exp(-lambda * ti); gsl_vector_set(&v.vector, 0, e); gsl_vector_set(&v.vector, 1, -ti * A * e); gsl_vector_set(&v.vector, 2, 1.0); if (doweight) gsl_vector_scale(&v.vector, swi); } return GSL_SUCCESS; } static int wnlin_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { int *iptr = (int *) params; int doweight = iptr ? *iptr : 0; double A = gsl_vector_get (x, 0); double lambda = gsl_vector_get (x, 1); double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); size_t i; for (i = 0; i < wnlin_N; i++) { double ti = i; double swi = sqrt(wnlin_W[i]); double fvvi; fvvi = exp(-ti*lambda)*ti*v2 * (-2*v1 + ti*v2*A); if (doweight) gsl_vector_set(fvv, i, swi * fvvi); else gsl_vector_set(fvv, i, fvvi); } return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf wnlin_func1 = { wnlin_f, wnlin_df, wnlin_fvv, wnlin_N, wnlin_P, (void *) &wnlin_internal_weight, 0, 0, 0 }; static gsl_multifit_nlinear_fdf wnlin_func2 = { wnlin_f, wnlin_df, wnlin_fvv, wnlin_N, wnlin_P, NULL, 0, 0, 0 }; static test_fdf_problem wnlin_problem1 = { "wnlin_internal_weights", wnlin_x0, NULL, NULL, &wnlin_epsrel, &wnlin_checksol, &wnlin_func1 }; static test_fdf_problem wnlin_problem2 = { "wnlin_external_weights", wnlin_x0, wnlin_W, NULL, &wnlin_epsrel, &wnlin_checksol, &wnlin_func2 }; gsl/multifit_nlinear/test_bard.c0000644000175000017500000000652713536674414015424 0ustar eddedd#define bard_N 15 #define bard_P 3 static double bard_x0[bard_P] = { 1.0, 1.0, 1.0 }; static double bard_epsrel = 1.0e-7; static double bard_Y[bard_N] = { 0.14, 0.18, 0.22, 0.25, 0.29, 0.32, 0.35, 0.39, 0.37, 0.58, 0.73, 0.96, 1.34, 2.10, 4.39 }; static void bard_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact1 = 8.214877306578963e-03; double bard_x1[bard_P] = { 8.241055975623580e-02, 1.133036092245175, 2.343695178435405 }; const double sumsq_exact2 = 17.42869333333333; double bard_x2[bard_P] = { 8.406666666666666e-01, 0.0, /* -inf */ 0.0 }; /* -inf */ double *bard_x; double sumsq_exact; bard_x2[1] = GSL_NAN; bard_x2[2] = GSL_NAN; if (fabs(x[1]) < 10.0 && fabs(x[2]) < 10.0) { bard_x = bard_x1; sumsq_exact = sumsq_exact1; } else { bard_x = bard_x2; sumsq_exact = sumsq_exact2; } gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < bard_P; ++i) { if (!gsl_finite(bard_x[i])) continue; gsl_test_rel(x[i], bard_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int bard_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < bard_N; ++i) { double ui = i + 1.0; double vi = 16.0 - i - 1.0; double wi = GSL_MIN(ui, vi); double yi = bard_Y[i]; double fi = yi - (x1 + (ui / (x2*vi + x3*wi))); gsl_vector_set(f, i, fi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int bard_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < bard_N; ++i) { double ui = i + 1.0; double vi = 16.0 - i - 1.0; double wi = GSL_MIN(ui, vi); double term = x2 * vi + x3 * wi; gsl_matrix_set(J, i, 0, -1.0); gsl_matrix_set(J, i, 1, ui * vi / (term * term)); gsl_matrix_set(J, i, 2, ui * wi / (term * term)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int bard_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double v2 = gsl_vector_get(v, 1); double v3 = gsl_vector_get(v, 2); size_t i; for (i = 0; i < bard_N; ++i) { double ui = i + 1.0; double vi = 16.0 - i - 1.0; double wi = GSL_MIN(ui, vi); double term1 = x2 * vi + x3 * wi; double term2 = v2 * vi + v3 * wi; double ratio = term2 / term1; gsl_vector_set(fvv, i, -2.0 * ui * ratio * ratio / term1); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf bard_func = { bard_f, bard_df, bard_fvv, bard_N, bard_P, NULL, 0, 0, 0 }; static test_fdf_problem bard_problem = { "bard", bard_x0, NULL, NULL, &bard_epsrel, &bard_checksol, &bard_func }; gsl/multifit_nlinear/test_box.c0000644000175000017500000000647513536674414015306 0ustar eddedd#define box_N 10 /* can be >= p */ #define box_P 3 /* dogleg method fails with recommended starting point, so use * a slightly easier x0 */ /*static double box_x0[box_P] = { 0.0, 10.0, 20.0 };*/ static double box_x0[box_P] = { 5.0, 10.0, 2.0 }; static double box_epsrel = 1.0e-12; static void box_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { const double sumsq_exact = 0.0; const double eps = 1.0e-6; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); /* there are 3 possible solution vectors */ if (fabs(x[2] - 1.0) < eps) { /* case 1: x* = [ 1; 10; 1 ] */ gsl_test_rel(x[0], 1.0, epsrel, "%s/%s i=0", sname, pname); gsl_test_rel(x[1], 10.0, epsrel, "%s/%s i=1", sname, pname); gsl_test_rel(x[2], 1.0, epsrel, "%s/%s i=2", sname, pname); } else if (fabs(x[2] + 1.0) < eps) { /* case 2: x* = [ 10; 1; -1 ] */ gsl_test_rel(x[0], 10.0, epsrel, "%s/%s i=0", sname, pname); gsl_test_rel(x[1], 1.0, epsrel, "%s/%s i=1", sname, pname); gsl_test_rel(x[2], -1.0, epsrel, "%s/%s i=2", sname, pname); } else { /* case 3: x* = [ a; a; 0 ] for any a */ gsl_test_rel(x[0], x[1], epsrel, "%s/%s i=0,1", sname, pname); gsl_test_rel(x[2], 0.0, epsrel, "%s/%s i=2", sname, pname); } } static int box_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < box_N; ++i) { double ti = (i + 1.0) / 10.0; double fi = exp(-x1*ti) - exp(-x2*ti) - x3*(exp(-ti) - exp(-10.0*ti)); gsl_vector_set(f, i, fi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int box_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); size_t i; for (i = 0; i < box_N; ++i) { double ti = (i + 1.0) / 10.0; double term1 = exp(-x1*ti); double term2 = exp(-x2*ti); double term3 = exp(-10.0*ti) - exp(-ti); gsl_matrix_set(J, i, 0, -ti*term1); gsl_matrix_set(J, i, 1, ti*term2); gsl_matrix_set(J, i, 2, term3); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int box_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); size_t i; for (i = 0; i < box_N; ++i) { double ti = (i + 1.0) / 10.0; double term1 = exp(-x1*ti); double term2 = exp(-x2*ti); gsl_vector_set(fvv, i, ti * ti * (v1*v1*term1 - v2*v2*term2)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf box_func = { box_f, box_df, box_fvv, box_N, box_P, NULL, 0, 0, 0 }; static test_fdf_problem box_problem = { "box3d", box_x0, NULL, NULL, &box_epsrel, &box_checksol, &box_func }; gsl/multifit_nlinear/scaling.c0000644000175000017500000001031713536674414015065 0ustar eddedd/* multifit_nlinear/scaling.c * * Copyright (C) 2015, 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This module handles the updating of the scaling matrix D_k in the * trust region subproblem: * * min m_k (dx), || D_k dx || <= Delta_k * * where m_k(dx) is a model which approximates the cost function * F(x_k + dx) near the current iteration point x_k * * D_k can be updated according to several different strategies. */ #include #include #include #include #include #include #include #include static int init_diag_levenberg(const gsl_matrix * J, gsl_vector * diag); static int update_diag_levenberg(const gsl_matrix * J, gsl_vector * diag); static int init_diag_marquardt(const gsl_matrix * J, gsl_vector * diag); static int update_diag_marquardt (const gsl_matrix * J, gsl_vector * diag); static int init_diag_more(const gsl_matrix * J, gsl_vector * diag); static int update_diag_more(const gsl_matrix * J, gsl_vector * diag); /* Levenberg scaling, D = I */ static int init_diag_levenberg(const gsl_matrix * J, gsl_vector * diag) { (void)J; /* avoid unused parameter warning */ gsl_vector_set_all(diag, 1.0); return GSL_SUCCESS; } static int update_diag_levenberg(const gsl_matrix * J, gsl_vector * diag) { (void)J; /* avoid unused parameter warning */ (void)diag; /* avoid unused parameter warning */ /* nothing to do */ return GSL_SUCCESS; } /* initialize diagonal scaling matrix D according to Marquardt method */ static int init_diag_marquardt(const gsl_matrix * J, gsl_vector * diag) { return update_diag_marquardt(J, diag); } /* update diagonal scaling matrix D according to Marquardt method */ static int update_diag_marquardt (const gsl_matrix * J, gsl_vector * diag) { const size_t p = J->size2; size_t j; for (j = 0; j < p; j++) { gsl_vector_const_view v = gsl_matrix_const_column(J, j); double norm = gsl_blas_dnrm2(&v.vector); if (norm == 0.0) norm = 1.0; gsl_vector_set(diag, j, norm); } return GSL_SUCCESS; } /* initialize diagonal scaling matrix D according to Eq 6.3 of * More, 1978 */ static int init_diag_more(const gsl_matrix * J, gsl_vector * diag) { int status; gsl_vector_set_zero(diag); status = update_diag_more(J, diag); return status; } /* update diagonal scaling matrix D according to Eq. 6.3 of * More, 1978 */ static int update_diag_more (const gsl_matrix * J, gsl_vector * diag) { const size_t p = J->size2; size_t j; for (j = 0; j < p; j++) { gsl_vector_const_view v = gsl_matrix_const_column(J, j); double norm = gsl_blas_dnrm2(&v.vector); double *diagj = gsl_vector_ptr(diag, j); if (norm == 0.0) norm = 1.0; *diagj = GSL_MAX(*diagj, norm); } return GSL_SUCCESS; } static const gsl_multifit_nlinear_scale levenberg_type = { "levenberg", init_diag_levenberg, update_diag_levenberg }; static const gsl_multifit_nlinear_scale marquardt_type = { "marquardt", init_diag_marquardt, update_diag_marquardt }; static const gsl_multifit_nlinear_scale more_type = { "more", init_diag_more, update_diag_more }; const gsl_multifit_nlinear_scale *gsl_multifit_nlinear_scale_levenberg = &levenberg_type; const gsl_multifit_nlinear_scale *gsl_multifit_nlinear_scale_marquardt = &marquardt_type; const gsl_multifit_nlinear_scale *gsl_multifit_nlinear_scale_more = &more_type; gsl/multifit_nlinear/fdf.c0000644000175000017500000003320013536674414014200 0ustar eddedd/* multifit_nlinear/fdf.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * Copyright (C) 2015, 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include gsl_multifit_nlinear_workspace * gsl_multifit_nlinear_alloc (const gsl_multifit_nlinear_type * T, const gsl_multifit_nlinear_parameters * params, const size_t n, const size_t p) { gsl_multifit_nlinear_workspace * w; if (n < p) { GSL_ERROR_VAL ("insufficient data points, n < p", GSL_EINVAL, 0); } w = calloc (1, sizeof (gsl_multifit_nlinear_workspace)); if (w == 0) { GSL_ERROR_VAL ("failed to allocate space for multifit workspace", GSL_ENOMEM, 0); } w->x = gsl_vector_calloc (p); if (w->x == 0) { gsl_multifit_nlinear_free (w); GSL_ERROR_VAL ("failed to allocate space for x", GSL_ENOMEM, 0); } w->f = gsl_vector_calloc (n); if (w->f == 0) { gsl_multifit_nlinear_free (w); GSL_ERROR_VAL ("failed to allocate space for f", GSL_ENOMEM, 0); } w->dx = gsl_vector_calloc (p); if (w->dx == 0) { gsl_multifit_nlinear_free (w); GSL_ERROR_VAL ("failed to allocate space for dx", GSL_ENOMEM, 0); } w->g = gsl_vector_alloc (p); if (w->g == 0) { gsl_multifit_nlinear_free (w); GSL_ERROR_VAL ("failed to allocate space for g", GSL_ENOMEM, 0); } w->J = gsl_matrix_alloc(n, p); if (w->J == 0) { gsl_multifit_nlinear_free (w); GSL_ERROR_VAL ("failed to allocate space for Jacobian", GSL_ENOMEM, 0); } w->sqrt_wts_work = gsl_vector_calloc (n); if (w->sqrt_wts_work == 0) { gsl_multifit_nlinear_free (w); GSL_ERROR_VAL ("failed to allocate space for weights", GSL_ENOMEM, 0); } w->state = (T->alloc)(params, n, p); if (w->state == 0) { gsl_multifit_nlinear_free (w); GSL_ERROR_VAL ("failed to allocate space for multifit state", GSL_ENOMEM, 0); } w->type = T; w->fdf = NULL; w->niter = 0; w->params = *params; return w; } void gsl_multifit_nlinear_free (gsl_multifit_nlinear_workspace * w) { RETURN_IF_NULL (w); if (w->state) (w->type->free) (w->state); if (w->dx) gsl_vector_free (w->dx); if (w->x) gsl_vector_free (w->x); if (w->f) gsl_vector_free (w->f); if (w->sqrt_wts_work) gsl_vector_free (w->sqrt_wts_work); if (w->g) gsl_vector_free (w->g); if (w->J) gsl_matrix_free (w->J); free (w); } gsl_multifit_nlinear_parameters gsl_multifit_nlinear_default_parameters(void) { gsl_multifit_nlinear_parameters params; params.trs = gsl_multifit_nlinear_trs_lm; params.scale = gsl_multifit_nlinear_scale_more; params.solver = gsl_multifit_nlinear_solver_qr; params.fdtype = GSL_MULTIFIT_NLINEAR_FWDIFF; params.factor_up = 3.0; params.factor_down = 2.0; params.avmax = 0.75; params.h_df = GSL_SQRT_DBL_EPSILON; params.h_fvv = 0.02; return params; } int gsl_multifit_nlinear_init (const gsl_vector * x, gsl_multifit_nlinear_fdf * fdf, gsl_multifit_nlinear_workspace * w) { return gsl_multifit_nlinear_winit(x, NULL, fdf, w); } int gsl_multifit_nlinear_winit (const gsl_vector * x, const gsl_vector * wts, gsl_multifit_nlinear_fdf * fdf, gsl_multifit_nlinear_workspace * w) { const size_t n = w->f->size; if (n != fdf->n) { GSL_ERROR ("function size does not match workspace", GSL_EBADLEN); } else if (w->x->size != x->size) { GSL_ERROR ("vector length does not match workspace", GSL_EBADLEN); } else if (wts != NULL && n != wts->size) { GSL_ERROR ("weight vector length does not match workspace", GSL_EBADLEN); } else { size_t i; /* initialize counters for function and Jacobian evaluations */ fdf->nevalf = 0; fdf->nevaldf = 0; fdf->nevalfvv = 0; w->fdf = fdf; gsl_vector_memcpy(w->x, x); w->niter = 0; if (wts) { w->sqrt_wts = w->sqrt_wts_work; for (i = 0; i < n; ++i) { double wi = gsl_vector_get(wts, i); gsl_vector_set(w->sqrt_wts, i, sqrt(wi)); } } else { w->sqrt_wts = NULL; } return (w->type->init) (w->state, w->sqrt_wts, w->fdf, w->x, w->f, w->J, w->g); } } int gsl_multifit_nlinear_iterate (gsl_multifit_nlinear_workspace * w) { int status = (w->type->iterate) (w->state, w->sqrt_wts, w->fdf, w->x, w->f, w->J, w->g, w->dx); w->niter++; return status; } double gsl_multifit_nlinear_avratio (const gsl_multifit_nlinear_workspace * w) { return (w->type->avratio) (w->state); } /* gsl_multifit_nlinear_driver() Iterate the nonlinear least squares solver until completion Inputs: maxiter - maximum iterations to allow xtol - tolerance in step x gtol - tolerance in gradient ftol - tolerance in ||f|| callback - callback function to call each iteration callback_params - parameters to pass to callback function info - (output) info flag on why iteration terminated 1 = stopped due to small step size ||dx| 2 = stopped due to small gradient 3 = stopped due to small change in f GSL_ETOLX = ||dx|| has converged to within machine precision (and xtol is too small) GSL_ETOLG = ||g||_inf is smaller than machine precision (gtol is too small) GSL_ETOLF = change in ||f|| is smaller than machine precision (ftol is too small) w - workspace Return: GSL_SUCCESS if converged GSL_MAXITER if maxiter exceeded without converging GSL_ENOPROG if no accepted step found on first iteration */ int gsl_multifit_nlinear_driver (const size_t maxiter, const double xtol, const double gtol, const double ftol, void (*callback)(const size_t iter, void *params, const gsl_multifit_nlinear_workspace *w), void *callback_params, int *info, gsl_multifit_nlinear_workspace * w) { int status; size_t iter = 0; /* call user callback function prior to any iterations * with initial system state */ if (callback) callback(iter, callback_params, w); do { status = gsl_multifit_nlinear_iterate (w); /* * If the solver reports no progress on the first iteration, * then it didn't find a single step to reduce the * cost function and more iterations won't help so return. * * If we get a no progress flag on subsequent iterations, * it means we did find a good step in a previous iteration, * so continue iterating since the solver has now reset * mu to its initial value. */ if (status == GSL_ENOPROG && iter == 0) { *info = status; return GSL_EMAXITER; } ++iter; if (callback) callback(iter, callback_params, w); /* test for convergence */ status = gsl_multifit_nlinear_test(xtol, gtol, ftol, info, w); } while (status == GSL_CONTINUE && iter < maxiter); /* * the following error codes mean that the solution has converged * to within machine precision, so record the error code in info * and return success */ if (status == GSL_ETOLF || status == GSL_ETOLX || status == GSL_ETOLG) { *info = status; status = GSL_SUCCESS; } /* check if max iterations reached */ if (iter >= maxiter && status != GSL_SUCCESS) status = GSL_EMAXITER; return status; } /* gsl_multifit_nlinear_driver() */ gsl_matrix * gsl_multifit_nlinear_jac (const gsl_multifit_nlinear_workspace * w) { return w->J; } const char * gsl_multifit_nlinear_name (const gsl_multifit_nlinear_workspace * w) { return w->type->name; } gsl_vector * gsl_multifit_nlinear_position (const gsl_multifit_nlinear_workspace * w) { return w->x; } gsl_vector * gsl_multifit_nlinear_residual (const gsl_multifit_nlinear_workspace * w) { return w->f; } size_t gsl_multifit_nlinear_niter (const gsl_multifit_nlinear_workspace * w) { return w->niter; } int gsl_multifit_nlinear_rcond (double *rcond, const gsl_multifit_nlinear_workspace * w) { int status = (w->type->rcond) (rcond, w->state); return status; } const char * gsl_multifit_nlinear_trs_name (const gsl_multifit_nlinear_workspace * w) { return w->params.trs->name; } /* gsl_multifit_nlinear_eval_f() Compute residual vector y with user callback function, and apply weighting transform if given: y~ = sqrt(W) y Inputs: fdf - callback function x - model parameters swts - weight matrix sqrt(W) = sqrt(diag(w1,w2,...,wn)) set to NULL for unweighted fit y - (output) (weighted) residual vector y_i = sqrt(w_i) f_i where f_i is unweighted residual */ int gsl_multifit_nlinear_eval_f(gsl_multifit_nlinear_fdf *fdf, const gsl_vector *x, const gsl_vector *swts, gsl_vector *y) { int s = ((*((fdf)->f)) (x, fdf->params, y)); ++(fdf->nevalf); /* y <- sqrt(W) y */ if (swts) gsl_vector_mul(y, swts); return s; } /* gsl_multifit_nlinear_eval_df() Compute Jacobian matrix J with user callback function, and apply weighting transform if given: J~ = sqrt(W) J Inputs: x - model parameters f - residual vector f(x) swts - weight matrix W = diag(w1,w2,...,wn) set to NULL for unweighted fit h - finite difference step size fdtype - finite difference method fdf - callback function df - (output) (weighted) Jacobian matrix df = sqrt(W) df where df is unweighted Jacobian work - workspace for finite difference, size n */ int gsl_multifit_nlinear_eval_df(const gsl_vector *x, const gsl_vector *f, const gsl_vector *swts, const double h, const gsl_multifit_nlinear_fdtype fdtype, gsl_multifit_nlinear_fdf *fdf, gsl_matrix *df, gsl_vector *work) { int status; if (fdf->df) { /* call user-supplied function */ status = ((*((fdf)->df)) (x, fdf->params, df)); ++(fdf->nevaldf); /* J <- sqrt(W) J */ if (swts) { const size_t n = swts->size; size_t i; for (i = 0; i < n; ++i) { double swi = gsl_vector_get(swts, i); gsl_vector_view v = gsl_matrix_row(df, i); gsl_vector_scale(&v.vector, swi); } } } else { /* use finite difference Jacobian approximation */ status = gsl_multifit_nlinear_df(h, fdtype, x, swts, fdf, f, df, work); } return status; } /* gsl_multifit_nlinear_eval_fvv() Compute second direction derivative vector yvv with user callback function, and apply weighting transform if given: yvv~ = sqrt(W) yvv Inputs: h - step size for finite difference, if needed x - model parameters, size p v - unscaled geodesic velocity vector, size p f - residual vector f(x), size n J - Jacobian matrix J(x), n-by-p swts - weight matrix sqrt(W) = sqrt(diag(w1,w2,...,wn)) set to NULL for unweighted fit fdf - callback function yvv - (output) (weighted) second directional derivative vector yvv_i = sqrt(w_i) fvv_i where f_i is unweighted work - workspace, size p */ int gsl_multifit_nlinear_eval_fvv(const double h, const gsl_vector *x, const gsl_vector *v, const gsl_vector *f, const gsl_matrix *J, const gsl_vector *swts, gsl_multifit_nlinear_fdf *fdf, gsl_vector *yvv, gsl_vector *work) { int status; if (fdf->fvv != NULL) { /* call user-supplied function */ status = ((*((fdf)->fvv)) (x, v, fdf->params, yvv)); ++(fdf->nevalfvv); /* yvv <- sqrt(W) yvv */ if (swts) gsl_vector_mul(yvv, swts); } else { /* use finite difference approximation */ status = gsl_multifit_nlinear_fdfvv(h, x, v, f, J, swts, fdf, yvv, work); } return status; } gsl/multifit_nlinear/fdfvv.c0000644000175000017500000000720113536674414014556 0ustar eddedd/* multifit_nlinear/fdfvv.c * * Copyright (C) 2015 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include /* fdfvv() Compute approximate second directional derivative using finite differences. See Eq. 19 of: M. K. Transtrum, J. P. Sethna, Improvements to the Levenberg Marquardt algorithm for nonlinear least-squares minimization, arXiv:1201.5885, 2012. Inputs: h - step size for finite difference x - parameter vector, size p v - geodesic velocity, size p f - vector of function values f_i(x), size n J - Jacobian matrix J(x), n-by-p swts - data weights fdf - fdf struct fvv - (output) approximate second directional derivative vector D_v^2 f(x) work - workspace, size p Return: success or error */ static int fdfvv(const double h, const gsl_vector *x, const gsl_vector *v, const gsl_vector *f, const gsl_matrix *J, const gsl_vector *swts, gsl_multifit_nlinear_fdf *fdf, gsl_vector *fvv, gsl_vector *work) { int status; const size_t n = fdf->n; const size_t p = fdf->p; const double hinv = 1.0 / h; size_t i; /* compute work = x + h*v */ for (i = 0; i < p; ++i) { double xi = gsl_vector_get(x, i); double vi = gsl_vector_get(v, i); gsl_vector_set(work, i, xi + h * vi); } /* compute f(x + h*v) */ status = gsl_multifit_nlinear_eval_f (fdf, work, swts, fvv); if (status) return status; for (i = 0; i < n; ++i) { double fi = gsl_vector_get(f, i); /* f_i(x) */ double fip = gsl_vector_get(fvv, i); /* f_i(x + h*v) */ gsl_vector_const_view row = gsl_matrix_const_row(J, i); double u, fvvi; /* compute u = sum_{ij} J_{ij} D v_j */ gsl_blas_ddot(&row.vector, v, &u); fvvi = (2.0 * hinv) * ((fip - fi) * hinv - u); gsl_vector_set(fvv, i, fvvi); } return status; } /* gsl_multifit_nlinear_fdfvv() Compute approximate second directional derivative using finite differences Inputs: h - step size for finite difference x - parameter vector, size p v - geodesic velocity, size p f - function values f_i(x), size n J - Jacobian matrix J(x), n-by-p swts - sqrt data weights (set to NULL if not needed) fdf - fdf fvv - (output) approximate (weighted) second directional derivative vector, size n, sqrt(W) fvv work - workspace, size p Return: success or error */ int gsl_multifit_nlinear_fdfvv(const double h, const gsl_vector *x, const gsl_vector *v, const gsl_vector *f, const gsl_matrix *J, const gsl_vector *swts, gsl_multifit_nlinear_fdf *fdf, gsl_vector *fvv, gsl_vector *work) { return fdfvv(h, x, v, f, J, swts, fdf, fvv, work); } gsl/multifit_nlinear/test_wood.c0000644000175000017500000000514713536674414015461 0ustar eddedd#define wood_N 6 #define wood_P 4 static double wood_x0[wood_P] = { -3.0, -1.0, -3.0, -1.0 }; static double wood_epsrel = 1.0e-12; static void wood_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; const double wood_x[wood_P] = { 1.0, 1.0, 1.0, 1.0 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < wood_P; ++i) { gsl_test_rel(x[i], wood_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int wood_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); gsl_vector_set(f, 0, 10.0*(x2 - x1*x1)); gsl_vector_set(f, 1, 1.0 - x1); gsl_vector_set(f, 2, sqrt(90.0)*(x4 - x3*x3)); gsl_vector_set(f, 3, 1.0 - x3); gsl_vector_set(f, 4, sqrt(10.0)*(x2 + x4 - 2.0)); gsl_vector_set(f, 5, (x2 - x4) / sqrt(10.0)); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int wood_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x3 = gsl_vector_get(x, 2); double s90 = sqrt(90.0); double s10 = sqrt(10.0); gsl_matrix_set_zero(J); gsl_matrix_set(J, 0, 0, -20.0*x1); gsl_matrix_set(J, 0, 1, 10.0); gsl_matrix_set(J, 1, 0, -1.0); gsl_matrix_set(J, 2, 2, -2.0*s90*x3); gsl_matrix_set(J, 2, 3, s90); gsl_matrix_set(J, 3, 2, -1.0); gsl_matrix_set(J, 4, 1, s10); gsl_matrix_set(J, 4, 3, s10); gsl_matrix_set(J, 5, 1, 1.0/s10); gsl_matrix_set(J, 5, 3, -1.0/s10); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int wood_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { const double s10 = sqrt(10.0); double v1 = gsl_vector_get(v, 0); double v3 = gsl_vector_get(v, 2); gsl_vector_set(fvv, 0, -20.0 * v1 * v1); gsl_vector_set(fvv, 1, 0.0); gsl_vector_set(fvv, 2, -6.0 * s10 * v3 * v3); gsl_vector_set(fvv, 3, 0.0); gsl_vector_set(fvv, 4, 0.0); gsl_vector_set(fvv, 5, 0.0); (void)x; /* avoid unused parameter warning */ (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf wood_func = { wood_f, wood_df, wood_fvv, wood_N, wood_P, NULL, 0, 0, 0 }; static test_fdf_problem wood_problem = { "wood", wood_x0, NULL, NULL, &wood_epsrel, &wood_checksol, &wood_func }; gsl/multifit_nlinear/test_roth.c0000644000175000017500000000437713536674414015471 0ustar eddedd#define roth_N 2 #define roth_P 2 static double roth_x0[roth_P] = { 0.5, -2.0 }; static double roth_epsrel = 1.0e-6; static void roth_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact1 = 0.0; const double roth_x1[roth_P] = { 5.0, 4.0 }; const double sumsq_exact2 = 48.9842536792400; const double roth_x2[roth_P] = { 11.4127789869021, -0.896805253274477 }; const double *roth_x; double sumsq_exact; if (fabs(sumsq) < 0.1) { sumsq_exact = sumsq_exact1; roth_x = roth_x1; } else { sumsq_exact = sumsq_exact2; roth_x = roth_x2; } gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < roth_P; ++i) { gsl_test_rel(x[i], roth_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int roth_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); gsl_vector_set(f, 0, x1 - x2*(2.0 - x2*(5.0 - x2)) - 13.0); gsl_vector_set(f, 1, x1 - x2*(14.0 - x2*(1.0 + x2)) - 29.0); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int roth_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x2 = gsl_vector_get(x, 1); gsl_matrix_set(J, 0, 0, 1.0); gsl_matrix_set(J, 0, 1, -2.0 + x2*(10.0 - 3.0*x2)); gsl_matrix_set(J, 1, 0, 1.0); gsl_matrix_set(J, 1, 1, -14.0 + x2*(2.0 + 3.0*x2)); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int roth_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x2 = gsl_vector_get(x, 1); double v2 = gsl_vector_get(v, 1); gsl_vector_set(fvv, 0, (10.0 - 6.0*x2) * v2 * v2); gsl_vector_set(fvv, 1, (2.0 + 6.0*x2) * v2 * v2); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf roth_func = { roth_f, roth_df, roth_fvv, roth_N, roth_P, NULL, 0, 0, 0 }; static test_fdf_problem roth_problem = { "roth_freudenstein", roth_x0, NULL, NULL, &roth_epsrel, &roth_checksol, &roth_func }; gsl/multifit_nlinear/test_enso.c0000644000175000017500000001204113536674414015444 0ustar eddedd#define enso_N 168 #define enso_P 9 static double enso_x0a[enso_P] = { 11.0, 3.0, 0.5, 40.0, -0.7, -1.3, 25.0, -0.3, 1.4 }; static double enso_x0b[enso_P] = { 10.0, 3.0, 0.5, 44.0, -1.5, 0.5, 26.0, -0.1, 1.5 }; static double enso_epsrel = 1.0e-3; static double enso_sigma[enso_P] = { 1.7488832467E-01, 2.4310052139E-01, 2.4354686618E-01, 9.4408025976E-01, 2.8078369611E-01, 4.8073701119E-01, 4.1612939130E-01, 5.1460022911E-01, 2.5434468893E-01 }; static double enso_F[enso_N] = { 12.90000, 11.30000, 10.60000, 11.20000, 10.90000, 7.500000, 7.700000, 11.70000, 12.90000, 14.30000, 10.90000, 13.70000, 17.10000, 14.00000, 15.30000, 8.500000, 5.700000, 5.500000, 7.600000, 8.600000, 7.300000, 7.600000, 12.70000, 11.00000, 12.70000, 12.90000, 13.00000, 10.90000, 10.400000, 10.200000, 8.000000, 10.90000, 13.60000, 10.500000, 9.200000, 12.40000, 12.70000, 13.30000, 10.100000, 7.800000, 4.800000, 3.000000, 2.500000, 6.300000, 9.700000, 11.60000, 8.600000, 12.40000, 10.500000, 13.30000, 10.400000, 8.100000, 3.700000, 10.70000, 5.100000, 10.400000, 10.90000, 11.70000, 11.40000, 13.70000, 14.10000, 14.00000, 12.50000, 6.300000, 9.600000, 11.70000, 5.000000, 10.80000, 12.70000, 10.80000, 11.80000, 12.60000, 15.70000, 12.60000, 14.80000, 7.800000, 7.100000, 11.20000, 8.100000, 6.400000, 5.200000, 12.00000, 10.200000, 12.70000, 10.200000, 14.70000, 12.20000, 7.100000, 5.700000, 6.700000, 3.900000, 8.500000, 8.300000, 10.80000, 16.70000, 12.60000, 12.50000, 12.50000, 9.800000, 7.200000, 4.100000, 10.60000, 10.100000, 10.100000, 11.90000, 13.60000, 16.30000, 17.60000, 15.50000, 16.00000, 15.20000, 11.20000, 14.30000, 14.50000, 8.500000, 12.00000, 12.70000, 11.30000, 14.50000, 15.10000, 10.400000, 11.50000, 13.40000, 7.500000, 0.6000000, 0.3000000, 5.500000, 5.000000, 4.600000, 8.200000, 9.900000, 9.200000, 12.50000, 10.90000, 9.900000, 8.900000, 7.600000, 9.500000, 8.400000, 10.70000, 13.60000, 13.70000, 13.70000, 16.50000, 16.80000, 17.10000, 15.40000, 9.500000, 6.100000, 10.100000, 9.300000, 5.300000, 11.20000, 16.60000, 15.60000, 12.00000, 11.50000, 8.600000, 13.80000, 8.700000, 8.600000, 8.600000, 8.700000, 12.80000, 13.20000, 14.00000, 13.40000, 14.80000 }; static void enso_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 7.8853978668E+02; const double enso_x[enso_P] = { 1.0510749193E+01, 3.0762128085E+00, 5.3280138227E-01, 4.4311088700E+01, -1.6231428586E+00, 5.2554493756E-01, 2.6887614440E+01, 2.1232288488E-01, 1.4966870418E+00 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < enso_P; ++i) { gsl_test_rel(x[i], enso_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int enso_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[enso_P]; size_t i; for (i = 0; i < enso_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < enso_N; i++) { double t = (i + 1.0); double y; y = b[0]; y += b[1] * cos(2*M_PI*t/12); y += b[2] * sin(2*M_PI*t/12); y += b[4] * cos(2*M_PI*t/b[3]); y += b[5] * sin(2*M_PI*t/b[3]); y += b[7] * cos(2*M_PI*t/b[6]); y += b[8] * sin(2*M_PI*t/b[6]); gsl_vector_set (f, i, enso_F[i] - y); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int enso_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[enso_P]; size_t i; for (i = 0; i < enso_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < enso_N; i++) { double t = (i + 1.0); gsl_matrix_set (df, i, 0, -1.0); gsl_matrix_set (df, i, 1, -cos(2*M_PI*t/12)); gsl_matrix_set (df, i, 2, -sin(2*M_PI*t/12)); gsl_matrix_set (df, i, 3, -b[4]*(2*M_PI*t/(b[3]*b[3]))*sin(2*M_PI*t/b[3]) +b[5]*(2*M_PI*t/(b[3]*b[3]))*cos(2*M_PI*t/b[3])); gsl_matrix_set (df, i, 4, -cos(2*M_PI*t/b[3])); gsl_matrix_set (df, i, 5, -sin(2*M_PI*t/b[3])); gsl_matrix_set (df, i, 6, -b[7] * (2*M_PI*t/(b[6]*b[6])) * sin(2*M_PI*t/b[6]) +b[8] * (2*M_PI*t/(b[6]*b[6])) * cos(2*M_PI*t/b[6])); gsl_matrix_set (df, i, 7, -cos(2*M_PI*t/b[6])); gsl_matrix_set (df, i, 8, -sin(2*M_PI*t/b[6])); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf enso_func = { enso_f, enso_df, NULL, /* analytic expression too complex */ enso_N, enso_P, NULL, 0, 0, 0 }; static test_fdf_problem ensoa_problem = { "nist-ENSOa", enso_x0a, NULL, enso_sigma, &enso_epsrel, &enso_checksol, &enso_func }; static test_fdf_problem ensob_problem = { "nist-ENSOb", enso_x0b, NULL, enso_sigma, &enso_epsrel, &enso_checksol, &enso_func }; gsl/multifit_nlinear/test_brown1.c0000644000175000017500000000554113536674414015717 0ustar eddedd#define brown1_N 20 #define brown1_P 4 static double brown1_x0[brown1_P] = { 25, 5, -5, -1 }; static double brown1_epsrel = 1.0e-5; static void brown1_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 8.582220162635628e+04; const double brown1_x[brown1_P] = { -1.159443990239263e+01, 1.320363005221244e+01, -4.034395456782477e-01, 2.367789088597534e-01 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < brown1_P; ++i) { gsl_test_rel(x[i], brown1_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int brown1_f (const gsl_vector * x, void *params, gsl_vector * f) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double x2 = gsl_vector_get (x, 2); double x3 = gsl_vector_get (x, 3); size_t i; for (i = 0; i < brown1_N; i++) { double ti = 0.2 * (i + 1); double ui = x0 + x1 * ti - exp (ti); double vi = x2 + x3 * sin (ti) - cos (ti); gsl_vector_set (f, i, ui * ui + vi * vi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int brown1_df (const gsl_vector * x, void *params, gsl_matrix * df) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double x2 = gsl_vector_get (x, 2); double x3 = gsl_vector_get (x, 3); size_t i; for (i = 0; i < brown1_N; i++) { double ti = 0.2 * (i + 1); double ui = x0 + x1 * ti - exp (ti); double vi = x2 + x3 * sin (ti) - cos (ti); gsl_matrix_set (df, i, 0, 2 * ui); gsl_matrix_set (df, i, 1, 2 * ui * ti); gsl_matrix_set (df, i, 2, 2 * vi); gsl_matrix_set (df, i, 3, 2 * vi * sin (ti)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int brown1_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double v0 = gsl_vector_get (v, 0); double v1 = gsl_vector_get (v, 1); double v2 = gsl_vector_get (v, 2); double v3 = gsl_vector_get (v, 3); size_t i; for (i = 0; i < brown1_N; i++) { double ti = 0.2 * (i + 1); double term1 = v0 + ti*v1; double term2 = v3*sin(ti); gsl_vector_set (fvv, i, 2.0 * (term1*term1 + v2*v2 + term2 * (2*v2 + term2))); } (void)x; /* avoid unused parameter warning */ (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf brown1_func = { brown1_f, brown1_df, brown1_fvv, brown1_N, brown1_P, NULL, 0, 0, 0 }; static test_fdf_problem brown1_problem = { "brown_dennis", brown1_x0, NULL, NULL, &brown1_epsrel, &brown1_checksol, &brown1_func }; gsl/multifit_nlinear/test_powell3.c0000644000175000017500000000417613536674414016077 0ustar eddedd#define powell3_N 2 #define powell3_P 2 static double powell3_x0[powell3_P] = { 0.0, 1.0 }; static double powell3_epsrel = 1.0e-10; static void powell3_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; const double powell3_x[powell3_P] = { 1.09815932969975976e-05, 9.10614673986700218 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < powell3_P; ++i) { gsl_test_rel(x[i], powell3_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int powell3_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); gsl_vector_set(f, 0, 1.0e4*x1*x2 - 1.0); gsl_vector_set(f, 1, exp(-x1) + exp(-x2) - 1.0001); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int powell3_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); gsl_matrix_set(J, 0, 0, 1.0e4*x2); gsl_matrix_set(J, 0, 1, 1.0e4*x1); gsl_matrix_set(J, 1, 0, -exp(-x1)); gsl_matrix_set(J, 1, 1, -exp(-x2)); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int powell3_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); gsl_vector_set(fvv, 0, 2.0e4 * v1 * v2); gsl_vector_set(fvv, 1, v1*v1*exp(-x1) + v2*v2*exp(-x2)); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf powell3_func = { powell3_f, powell3_df, powell3_fvv, powell3_N, powell3_P, NULL, 0, 0, 0 }; static test_fdf_problem powell3_problem = { "powell_badly_scaled", powell3_x0, NULL, NULL, &powell3_epsrel, &powell3_checksol, &powell3_func }; gsl/multifit_nlinear/test_beale.c0000644000175000017500000000445313536674414015560 0ustar eddedd#define beale_N 3 #define beale_P 2 static double beale_x0[beale_P] = { 1.0, 1.0 }; static double beale_epsrel = 1.0e-12; static double beale_Y[beale_N] = { 1.5, 2.25, 2.625 }; static void beale_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; const double beale_x[beale_P] = { 3.0, 0.5 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < beale_P; ++i) { gsl_test_rel(x[i], beale_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int beale_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); size_t i; for (i = 0; i < beale_N; ++i) { double yi = beale_Y[i]; double term = pow(x2, i + 1.0); double fi = yi - x1*(1.0 - term); gsl_vector_set(f, i, fi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int beale_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); size_t i; for (i = 0; i < beale_N; ++i) { double term = pow(x2, (double) i); gsl_matrix_set(J, i, 0, term*x2 - 1.0); gsl_matrix_set(J, i, 1, (i + 1.0) * x1 * term); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int beale_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); size_t i; for (i = 0; i < beale_N; ++i) { double term = pow(x2, (double)i - 1.0); gsl_vector_set(fvv, i, (i + 1.0) * v2 * term * (i * v2 * x1 + 2.0 * v1 * x2)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf beale_func = { beale_f, beale_df, beale_fvv, beale_N, beale_P, NULL, 0, 0, 0 }; static test_fdf_problem beale_problem = { "beale", beale_x0, NULL, NULL, &beale_epsrel, &beale_checksol, &beale_func }; gsl/multifit_nlinear/test_meyer.c0000644000175000017500000000601713536674414015627 0ustar eddedd#define meyer_N 16 #define meyer_P 3 static double meyer_x0[meyer_P] = { 0.02, 4000.0, 250.0 }; static double meyer_epsrel = 1.0e-6; static double meyer_Y[meyer_N] = { 34780., 28610., 23650., 19630., 16370., 13720., 11540., 9744., 8261., 7030., 6005., 5147., 4427., 3820., 3307., 2872. }; static void meyer_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 8.794585517053883e+01; const double meyer_x[meyer_P] = { 5.609636471049458e-03, 6.181346346283188e+03, 3.452236346240292e+02 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < meyer_P; ++i) { gsl_test_rel(x[i], meyer_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int meyer_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < meyer_N; ++i) { double ti = 45.0 + 5.0*(i + 1.0); double yi = meyer_Y[i]; double fi = x1 * exp(x2 / (ti + x3)) - yi; gsl_vector_set(f, i, fi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int meyer_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < meyer_N; ++i) { double ti = 45.0 + 5.0*(i + 1.0); double term1 = ti + x3; double term2 = exp(x2 / term1); gsl_matrix_set(J, i, 0, term2); gsl_matrix_set(J, i, 1, x1*term2/term1); gsl_matrix_set(J, i, 2, -x1*x2*term2/(term1*term1)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int meyer_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); double v3 = gsl_vector_get(v, 2); size_t i; for (i = 0; i < meyer_N; ++i) { double ti = 45.0 + 5.0*(i + 1.0); double term1 = ti + x3; double term2 = exp(x2 / term1); double term3 = v2*term1 - v3*x2; double term4 = 2*ti*ti*v1 - v3*x1*(x2 + 2*x3) + x3*(v2*x1 + 2*v1*x3) + ti*(v2*x1 - 2*v3*x1 + 4*v1*x3); gsl_vector_set(fvv, i, term2 * term3 * term4 / pow(term1, 4.0)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf meyer_func = { meyer_f, meyer_df, meyer_fvv, meyer_N, meyer_P, NULL, 0, 0, 0 }; static test_fdf_problem meyer_problem = { "meyer", meyer_x0, NULL, NULL, &meyer_epsrel, &meyer_checksol, &meyer_func }; gsl/multifit_nlinear/test_rosenbrock.c0000644000175000017500000000363413536674414016657 0ustar eddedd#define rosenbrock_N 2 #define rosenbrock_P 2 static double rosenbrock_x0[rosenbrock_P] = { -1.2, 1.0 }; static double rosenbrock_epsrel = 1.0e-12; static void rosenbrock_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < rosenbrock_P; ++i) { gsl_test_rel(x[i], 1.0, epsrel, "%s/%s i=%zu", sname, pname, i); } } static int rosenbrock_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); gsl_vector_set(f, 0, 10.0 * (x2 - x1*x1)); gsl_vector_set(f, 1, 1.0 - x1); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int rosenbrock_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); gsl_matrix_set(J, 0, 0, -20.0*x1); gsl_matrix_set(J, 0, 1, 10.0); gsl_matrix_set(J, 1, 0, -1.0); gsl_matrix_set(J, 1, 1, 0.0); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int rosenbrock_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double v1 = gsl_vector_get(v, 0); gsl_vector_set(fvv, 0, -20.0 * v1 * v1); gsl_vector_set(fvv, 1, 0.0); (void)x; /* avoid unused parameter warning */ (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf rosenbrock_func = { rosenbrock_f, rosenbrock_df, rosenbrock_fvv, rosenbrock_N, rosenbrock_P, NULL, 0, 0, 0 }; static test_fdf_problem rosenbrock_problem = { "rosenbrock", rosenbrock_x0, NULL, NULL, &rosenbrock_epsrel, &rosenbrock_checksol, &rosenbrock_func }; gsl/multifit_nlinear/test_thurber.c0000644000175000017500000000731713536674414016165 0ustar eddedd#define thurber_N 37 #define thurber_P 7 static double thurber_x0a[thurber_P] = { 1000.0, 1000.0, 400.0, 40.0, 0.7, 0.3, 0.03 }; static double thurber_x0b[thurber_P] = { 1300.0, 1500.0, 500.0, 75.0, 1.0, 0.4, 0.05 }; static double thurber_epsrel = 1.0e-6; static double thurber_sigma[thurber_P] = { 4.6647963344E+00, 3.9571156086E+01, 2.8698696102E+01, 5.5675370270E+00, 3.1333340687E-02, 1.4984928198E-02, 6.5842344623E-03 }; static double thurber_X[thurber_N] = { -3.067, -2.981, -2.921, -2.912, -2.840, -2.797, -2.702, -2.699, -2.633, -2.481, -2.363, -2.322, -1.501, -1.460, -1.274, -1.212, -1.100, -1.046, -0.915, -0.714, -0.566, -0.545, -0.400, -0.309, -0.109, -0.103, 0.010, 0.119, 0.377, 0.790, 0.963, 1.006, 1.115, 1.572, 1.841, 2.047, 2.200 }; static double thurber_F[thurber_N] = { 80.574, 84.248, 87.264, 87.195, 89.076, 89.608, 89.868, 90.101, 92.405, 95.854, 100.696, 101.060, 401.672, 390.724, 567.534, 635.316, 733.054, 759.087, 894.206, 990.785, 1090.109, 1080.914, 1122.643, 1178.351, 1260.531, 1273.514, 1288.339, 1327.543, 1353.863, 1414.509, 1425.208, 1421.384, 1442.962, 1464.350, 1468.705, 1447.894, 1457.628 }; static void thurber_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 5.6427082397E+03; const double thurber_x[thurber_P] = { 1.2881396800E+03, 1.4910792535E+03, 5.8323836877E+02, 7.5416644291E+01, 9.6629502864E-01, 3.9797285797E-01, 4.9727297349E-02 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < thurber_P; ++i) { gsl_test_rel(x[i], thurber_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int thurber_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[thurber_P]; size_t i; for (i = 0; i < thurber_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < thurber_N; i++) { double xi = thurber_X[i]; double yi; yi = b[0] + b[1]*xi + b[2]*xi*xi + b[3]*xi*xi*xi; yi /= 1.0 + b[4]*xi + b[5]*xi*xi + b[6]*xi*xi*xi; gsl_vector_set (f, i, yi - thurber_F[i]); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int thurber_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[thurber_P]; size_t i; for (i = 0; i < thurber_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < thurber_N; i++) { double xi = thurber_X[i]; double d, n, d_sq; n = b[0] + b[1]*xi + b[2]*xi*xi + b[3]*xi*xi*xi; d = 1.0 + b[4]*xi + b[5]*xi*xi + b[6]*xi*xi*xi; d_sq = d * d; gsl_matrix_set (df, i, 0, 1.0 / d); gsl_matrix_set (df, i, 1, xi / d); gsl_matrix_set (df, i, 2, (xi * xi) / d); gsl_matrix_set (df, i, 3, (xi * xi * xi) / d); gsl_matrix_set (df, i, 4, -xi * n / d_sq); gsl_matrix_set (df, i, 5, -xi * xi * n / d_sq); gsl_matrix_set (df, i, 6, -xi * xi * xi * n / d_sq); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf thurber_func = { thurber_f, thurber_df, NULL, /* analytic expression too complex */ thurber_N, thurber_P, NULL, 0, 0, 0 }; static test_fdf_problem thurbera_problem = { "nist-thurbera", thurber_x0a, NULL, thurber_sigma, &thurber_epsrel, &thurber_checksol, &thurber_func }; static test_fdf_problem thurberb_problem = { "nist-thurberb", thurber_x0b, NULL, thurber_sigma, &thurber_epsrel, &thurber_checksol, &thurber_func }; gsl/multifit_nlinear/qr.c0000644000175000017500000001617513536674414014077 0ustar eddedd/* multifit_nlinear/qr.c * * Copyright (C) 2015, 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This module handles the solution of the linear least squares * system: * * [ J~ ] p~ = - [ f ] * [ sqrt(mu)*D~ ] [ 0 ] * * using a QR approach. Quantities are scaled according to: * * J~ = J S * D~ = D S * p~ = S^{-1} p * * where S is a diagonal matrix and S_jj = || J_j || and J_j is column * j of the Jacobian. This balancing transformation seems to be more * numerically stable for some Jacobians. */ #include #include #include #include #include #include #include #include #include "common.c" #include "qrsolv.c" typedef struct { size_t p; gsl_matrix *QR; /* QR factorization of J */ gsl_vector *tau_Q; /* Householder scalars for Q */ gsl_matrix *T; /* workspace matrix for qrsolv, p-by-p */ gsl_permutation *perm; /* permutation matrix */ size_t rank; /* rank of J */ gsl_vector *residual; /* residual of LS problem [ J; sqrt(mu) D ] p = - [ f; 0 ] */ gsl_vector *qtf; /* Q^T f */ gsl_vector *workn; /* workspace, length n */ gsl_vector *workp; /* workspace, length p */ gsl_vector *work3p; /* workspace, length 3*p */ double mu; /* LM parameter */ } qr_state_t; static int qr_init(const void * vtrust_state, void * vstate); static int qr_presolve(const double mu, const void * vtrust_state, void * vstate); static int qr_solve(const gsl_vector * f, gsl_vector *x, const void * vtrust_state, void *vstate); static int qr_rcond(double * rcond, void * vstate); static void * qr_alloc (const size_t n, const size_t p) { qr_state_t *state; (void)n; state = calloc(1, sizeof(qr_state_t)); if (state == NULL) { GSL_ERROR_NULL ("failed to allocate qr state", GSL_ENOMEM); } state->QR = gsl_matrix_alloc(n, p); if (state->QR == NULL) { GSL_ERROR_NULL ("failed to allocate space for QR", GSL_ENOMEM); } state->tau_Q = gsl_vector_alloc(p); if (state->tau_Q == NULL) { GSL_ERROR_NULL ("failed to allocate space for tau_Q", GSL_ENOMEM); } state->T = gsl_matrix_alloc(p, p); if (state->T == NULL) { GSL_ERROR_NULL ("failed to allocate space for T", GSL_ENOMEM); } state->qtf = gsl_vector_alloc(n); if (state->qtf == NULL) { GSL_ERROR_NULL ("failed to allocate space for qtf", GSL_ENOMEM); } state->residual = gsl_vector_alloc(n); if (state->residual == NULL) { GSL_ERROR_NULL ("failed to allocate space for residual", GSL_ENOMEM); } state->perm = gsl_permutation_calloc(p); if (state->perm == NULL) { GSL_ERROR_NULL ("failed to allocate space for perm", GSL_ENOMEM); } state->workn = gsl_vector_alloc(n); if (state->workn == NULL) { GSL_ERROR_NULL ("failed to allocate space for workn", GSL_ENOMEM); } state->workp = gsl_vector_alloc(p); if (state->workp == NULL) { GSL_ERROR_NULL ("failed to allocate space for workp", GSL_ENOMEM); } state->work3p = gsl_vector_alloc(3 * p); if (state->work3p == NULL) { GSL_ERROR_NULL ("failed to allocate space for work3p", GSL_ENOMEM); } state->p = p; state->mu = 0.0; state->rank = 0; return state; } static void qr_free(void *vstate) { qr_state_t *state = (qr_state_t *) vstate; if (state->QR) gsl_matrix_free(state->QR); if (state->tau_Q) gsl_vector_free(state->tau_Q); if (state->T) gsl_matrix_free(state->T); if (state->qtf) gsl_vector_free(state->qtf); if (state->residual) gsl_vector_free(state->residual); if (state->perm) gsl_permutation_free(state->perm); if (state->workn) gsl_vector_free(state->workn); if (state->workp) gsl_vector_free(state->workp); if (state->work3p) gsl_vector_free(state->work3p); free(state); } /* compute J = Q R PT */ static int qr_init(const void * vtrust_state, void * vstate) { const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; qr_state_t *state = (qr_state_t *) vstate; int signum; /* perform QR decomposition of J */ gsl_matrix_memcpy(state->QR, trust_state->J); gsl_linalg_QRPT_decomp(state->QR, state->tau_Q, state->perm, &signum, state->workp); return GSL_SUCCESS; } static int qr_presolve(const double mu, const void * vtrust_state, void * vstate) { qr_state_t *state = (qr_state_t *) vstate; state->mu = mu; (void) vtrust_state; return GSL_SUCCESS; } static int qr_solve(const gsl_vector * f, gsl_vector *x, const void * vtrust_state, void *vstate) { qr_state_t *state = (qr_state_t *) vstate; int status; if (state->mu == 0.0) { /* * compute Gauss-Newton direction by solving * J x = f * with an attempt to identify rank deficiency in J */ size_t rank = gsl_linalg_QRPT_rank(state->QR, -1.0); status = gsl_linalg_QRPT_lssolve2(state->QR, state->tau_Q, state->perm, f, rank, x, state->residual); } else { /* * solve: * * [ J ] x = [ f ] * [ sqrt(mu) D ] [ 0 ] * * using QRPT factorization of J */ const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; double sqrt_mu = sqrt(state->mu); /* compute qtf = Q^T f */ gsl_vector_memcpy(state->qtf, f); gsl_linalg_QR_QTvec(state->QR, state->tau_Q, state->qtf); status = qrsolv(state->QR, state->perm, sqrt_mu, trust_state->diag, state->qtf, state->T, x, state->workn); } /* reverse step to go downhill */ gsl_vector_scale(x, -1.0); return status; } static int qr_rcond(double * rcond, void * vstate) { int status; qr_state_t *state = (qr_state_t *) vstate; status = gsl_linalg_QRPT_rcond(state->QR, rcond, state->work3p); return status; } static const gsl_multifit_nlinear_solver qr_type = { "qr", qr_alloc, qr_init, qr_presolve, qr_solve, qr_rcond, qr_free }; const gsl_multifit_nlinear_solver *gsl_multifit_nlinear_solver_qr = &qr_type; gsl/multifit_nlinear/test_osborne.c0000644000175000017500000000652113536674414016155 0ustar eddedd#define osborne_N 33 #define osborne_P 5 static double osborne_x0[osborne_P] = { 0.5, 1.5, -1.0, 0.01, 0.02 }; static double osborne_epsrel = 1.0e-8; static double osborne_Y[osborne_N] = { 0.844, 0.908, 0.932, 0.936, 0.925, 0.908, 0.881, 0.850, 0.818, 0.784, 0.751, 0.718, 0.685, 0.658, 0.628, 0.603, 0.580, 0.558, 0.538, 0.522, 0.506, 0.490, 0.478, 0.467, 0.457, 0.448, 0.438, 0.431, 0.424, 0.420, 0.414, 0.411, 0.406 }; static void osborne_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { const double sumsq_exact = 5.464894697482687e-05; double osborne_x[osborne_P]; osborne_x[0] = 3.754100521058740e-01; osborne_x[1] = GSL_NAN; osborne_x[2] = GSL_NAN; osborne_x[3] = GSL_NAN; osborne_x[4] = GSL_NAN; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); /* only the first model parameter is uniquely constrained */ gsl_test_rel(x[0], osborne_x[0], epsrel, "%s/%s i=0", sname, pname); } static int osborne_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); double x5 = gsl_vector_get(x, 4); size_t i; for (i = 0; i < osborne_N; ++i) { double ti = 10.0*i; double yi = osborne_Y[i]; double fi = yi - (x1 + x2*exp(-x4*ti) + x3*exp(-x5*ti)); gsl_vector_set(f, i, fi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int osborne_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); double x5 = gsl_vector_get(x, 4); size_t i; for (i = 0; i < osborne_N; ++i) { double ti = 10.0*i; double term1 = exp(-x4*ti); double term2 = exp(-x5*ti); gsl_matrix_set(J, i, 0, -1.0); gsl_matrix_set(J, i, 1, -term1); gsl_matrix_set(J, i, 2, -term2); gsl_matrix_set(J, i, 3, ti*x2*term1); gsl_matrix_set(J, i, 4, ti*x3*term2); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int osborne_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); double x5 = gsl_vector_get(x, 4); double v2 = gsl_vector_get(v, 1); double v3 = gsl_vector_get(v, 2); double v4 = gsl_vector_get(v, 3); double v5 = gsl_vector_get(v, 4); size_t i; for (i = 0; i < osborne_N; ++i) { double ti = 10.0*i; double term1 = exp(-x4*ti); double term2 = exp(-x5*ti); double term3 = -2*v2 + ti*v4*x2; double term4 = -2*v3 + ti*v5*x3; gsl_vector_set(fvv, i, -term1 * term2 * ti * (v4 / term2 * term3 + v5 / term1 * term4)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf osborne_func = { osborne_f, osborne_df, osborne_fvv, osborne_N, osborne_P, NULL, 0, 0, 0 }; static test_fdf_problem osborne_problem = { "osborne", osborne_x0, NULL, NULL, &osborne_epsrel, &osborne_checksol, &osborne_func }; gsl/multifit_nlinear/test_biggs.c0000644000175000017500000000704113536674414015577 0ustar eddedd#define biggs_N 20 /* >= p */ #define biggs_P 6 /* dogleg method has trouble converging from recommended starting point, * so we use an x0 which is a little closer to the true solution */ /*static double biggs_x0[biggs_P] = { 1.0, 2.0, 1.0, 1.0, 1.0, 1.0 };*/ static double biggs_x0[biggs_P] = { 1.0, 5.0, 1.0, 2.0, 3.0, 2.0 }; static double biggs_epsrel = 1.0e-9; static void biggs_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { const double sumsq_exact = 0.0; const double biggs_x[biggs_P] = { 1.0, 10.0, 1.0, 5.0, 4.0, 3.0 }; size_t i; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < biggs_P; ++i) { gsl_test_rel(x[i], biggs_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int biggs_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); double x5 = gsl_vector_get(x, 4); double x6 = gsl_vector_get(x, 5); size_t i; for (i = 0; i < biggs_N; ++i) { double ti = 0.1 * (i + 1.0); double yi = exp(-ti) - 5*exp(-10*ti) + 3*exp(-4*ti); double fi = x3*exp(-ti*x1) - x4*exp(-ti*x2) + x6*exp(-ti*x5) - yi; gsl_vector_set(f, i, fi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int biggs_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); double x5 = gsl_vector_get(x, 4); double x6 = gsl_vector_get(x, 5); size_t i; for (i = 0; i < biggs_N; ++i) { double ti = 0.1 * (i + 1.0); gsl_matrix_set(J, i, 0, -ti*x3*exp(-ti*x1)); gsl_matrix_set(J, i, 1, ti*x4*exp(-ti*x2)); gsl_matrix_set(J, i, 2, exp(-ti*x1)); gsl_matrix_set(J, i, 3, -exp(-ti*x2)); gsl_matrix_set(J, i, 4, -ti*x6*exp(-ti*x5)); gsl_matrix_set(J, i, 5, exp(-ti*x5)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int biggs_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); double x5 = gsl_vector_get(x, 4); double x6 = gsl_vector_get(x, 5); double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); double v3 = gsl_vector_get(v, 2); double v4 = gsl_vector_get(v, 3); double v5 = gsl_vector_get(v, 4); double v6 = gsl_vector_get(v, 5); size_t i; for (i = 0; i < biggs_N; ++i) { double ti = 0.1 * (i + 1.0); double term1 = exp(-ti * x1); double term2 = exp(-ti * x2); double term3 = exp(-ti * x5); gsl_vector_set(fvv, i, ti * term1 * term2 * term3 * (v1/(term2*term3)*(-2*v3 + ti*v1*x3) - v2/(term1*term3)*(-2*v4 + ti*v2*x4) + v5/(term1*term2)*(-2*v6 + ti*v5*x6))); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf biggs_func = { biggs_f, biggs_df, biggs_fvv, biggs_N, biggs_P, NULL, 0, 0, 0 }; static test_fdf_problem biggs_problem = { "biggs", biggs_x0, NULL, NULL, &biggs_epsrel, &biggs_checksol, &biggs_func }; gsl/multifit_nlinear/dogleg.c0000644000175000017500000003340313536674414014707 0ustar eddedd/* multifit_nlinear/dogleg.c * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include /* * This module contains an implementation of the Powell dogleg * algorithm for nonlinear optimization problems. This implementation * closely follows the following works: * * [1] H. B. Nielsen, K. Madsen, Introduction to Optimization and * Data Fitting, Informatics and Mathematical Modeling, * Technical University of Denmark (DTU), 2010. * * [2] J. E. Dennis and H. H. W. Mei, Two new unconstrained optimization * algorithms which use function and gradient values, J. Opt. Theory and * Appl., 28(4), 1979. */ typedef struct { size_t n; /* number of observations */ size_t p; /* number of parameters */ gsl_vector *dx_gn; /* Gauss-Newton step, size p */ gsl_vector *dx_sd; /* steepest descent step, size p */ double norm_Dgn; /* || D dx_gn || */ double norm_Dsd; /* || D dx_sd || */ double norm_Dinvg; /* || D^{-1} g || */ double norm_JDinv2g; /* || J D^{-2} g || */ gsl_vector *workp; /* workspace, length p */ gsl_vector *workn; /* workspace, length n */ /* tunable parameters */ gsl_multifit_nlinear_parameters params; } dogleg_state_t; #include "common.c" static void * dogleg_alloc (const void * params, const size_t n, const size_t p); static void dogleg_free(void *vstate); static int dogleg_init(const void *vtrust_state, void *vstate); static int dogleg_preloop(const void * vtrust_state, void * vstate); static int dogleg_step(const void * vtrust_state, const double delta, gsl_vector * dx, void * vstate); static int dogleg_double_step(const void * vtrust_state, const double delta, gsl_vector * dx, void * vstate); static int dogleg_preduction(const void * vtrust_state, const gsl_vector * dx, double * pred, void * vstate); static int dogleg_calc_gn(const gsl_multifit_nlinear_trust_state * trust_state, gsl_vector * dx); static double dogleg_beta(const double t, const double delta, const gsl_vector * diag, dogleg_state_t * state); static void * dogleg_alloc (const void * params, const size_t n, const size_t p) { const gsl_multifit_nlinear_parameters *mparams = (const gsl_multifit_nlinear_parameters *) params; dogleg_state_t *state; state = calloc(1, sizeof(dogleg_state_t)); if (state == NULL) { GSL_ERROR_NULL ("failed to allocate dogleg state", GSL_ENOMEM); } state->dx_gn = gsl_vector_alloc(p); if (state->dx_gn == NULL) { GSL_ERROR_NULL ("failed to allocate space for dx_gn", GSL_ENOMEM); } state->dx_sd = gsl_vector_alloc(p); if (state->dx_sd == NULL) { GSL_ERROR_NULL ("failed to allocate space for dx_sd", GSL_ENOMEM); } state->workp = gsl_vector_alloc(p); if (state->workp == NULL) { GSL_ERROR_NULL ("failed to allocate space for workp", GSL_ENOMEM); } state->workn = gsl_vector_alloc(n); if (state->workn == NULL) { GSL_ERROR_NULL ("failed to allocate space for workn", GSL_ENOMEM); } state->n = n; state->p = p; state->params = *mparams; return state; } static void dogleg_free(void *vstate) { dogleg_state_t *state = (dogleg_state_t *) vstate; if (state->dx_gn) gsl_vector_free(state->dx_gn); if (state->dx_sd) gsl_vector_free(state->dx_sd); if (state->workp) gsl_vector_free(state->workp); if (state->workn) gsl_vector_free(state->workn); free(state); } /* dogleg_init() Initialize dogleg solver Inputs: vtrust_state - trust state vstate - workspace Return: success/error */ static int dogleg_init(const void *vtrust_state, void *vstate) { (void)vtrust_state; (void)vstate; return GSL_SUCCESS; } /* dogleg_preloop() Initialize dogleg method prior to iteration loop. This involves computing the steepest descent step. The Gauss-Newton step is computed if needed in the _step() routines. Notes: on output, 1) state->dx_sd contains steepest descent step 2) state->norm_Dinvg contains || D^{-1} g || 3) state->norm_JDinv2g contains || J D^{-2} g || */ static int dogleg_preloop(const void * vtrust_state, void * vstate) { const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; dogleg_state_t *state = (dogleg_state_t *) vstate; double u; double alpha; /* ||g||^2 / ||Jg||^2 */ /* calculate the steepest descent step */ /* compute workp = D^{-1} g and its norm */ gsl_vector_memcpy(state->workp, trust_state->g); gsl_vector_div(state->workp, trust_state->diag); state->norm_Dinvg = gsl_blas_dnrm2(state->workp); /* compute workp = D^{-2} g */ gsl_vector_div(state->workp, trust_state->diag); /* compute: workn = J D^{-2} g */ gsl_blas_dgemv(CblasNoTrans, 1.0, trust_state->J, state->workp, 0.0, state->workn); state->norm_JDinv2g = gsl_blas_dnrm2(state->workn); u = state->norm_Dinvg / state->norm_JDinv2g; alpha = u * u; /* dx_sd = -alpha D^{-2} g */ gsl_vector_memcpy(state->dx_sd, state->workp); gsl_vector_scale(state->dx_sd, -alpha); state->norm_Dsd = scaled_enorm(trust_state->diag, state->dx_sd); state->norm_Dgn = -1.0; /* computed later if needed */ return GSL_SUCCESS; } /* dogleg_step() Calculate a new step vector */ static int dogleg_step(const void * vtrust_state, const double delta, gsl_vector * dx, void * vstate) { const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; dogleg_state_t *state = (dogleg_state_t *) vstate; if (state->norm_Dsd >= delta) { /* steepest descent step is outside trust region; * truncate steepest descent step to trust region boundary */ gsl_vector_memcpy(dx, state->dx_sd); gsl_vector_scale(dx, delta / state->norm_Dsd); } else { /* compute Gauss-Newton step if needed */ if (state->norm_Dgn < 0.0) { int status = dogleg_calc_gn(trust_state, state->dx_gn); if (status) return status; /* compute || D dx_gn || */ state->norm_Dgn = scaled_enorm(trust_state->diag, state->dx_gn); } if (state->norm_Dgn <= delta) { /* Gauss-Newton step is inside trust region, use it as final step * since it is the global minimizer of the quadratic model function */ gsl_vector_memcpy(dx, state->dx_gn); } else { /* Gauss-Newton step is outside trust region, but steepest * descent is inside; use dogleg step */ double beta = dogleg_beta(1.0, delta, trust_state->diag, state); /* compute: workp = dx_gn - dx_sd */ scaled_addition(1.0, state->dx_gn, -1.0, state->dx_sd, state->workp); /* dx = dx_sd + beta*(dx_gn - dx_sd) */ scaled_addition(beta, state->workp, 1.0, state->dx_sd, dx); } } return GSL_SUCCESS; } /* dogleg_double_step() Calculate a new step with double dogleg method. Based on section 3 of [2] */ static int dogleg_double_step(const void * vtrust_state, const double delta, gsl_vector * dx, void * vstate) { const double alpha_fac = 0.8; /* recommended value from Dennis and Mei */ const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; dogleg_state_t *state = (dogleg_state_t *) vstate; if (state->norm_Dsd >= delta) { /* steepest descent step is outside trust region; * truncate steepest descent step to trust region boundary */ gsl_vector_memcpy(dx, state->dx_sd); gsl_vector_scale(dx, delta / state->norm_Dsd); } else { /* compute Gauss-Newton step if needed */ if (state->norm_Dgn < 0.0) { int status = dogleg_calc_gn(trust_state, state->dx_gn); if (status) return status; /* compute || D dx_gn || */ state->norm_Dgn = scaled_enorm(trust_state->diag, state->dx_gn); } if (state->norm_Dgn <= delta) { /* Gauss-Newton step is inside trust region, use it as final step * since it is the global minimizer of the quadratic model function */ gsl_vector_memcpy(dx, state->dx_gn); } else { double t, u, v, c; /* compute: u = ||D^{-1} g||^2 / ||J D^{-2} g||^2 */ v = state->norm_Dinvg / state->norm_JDinv2g; u = v * v; /* compute: v = g^T dx_gn */ gsl_blas_ddot(trust_state->g, state->dx_gn, &v); /* compute: c = ||D^{-1} g||^4 / (||J D^{-2} g||^2 * |g^T dx_gn|) */ c = u * (state->norm_Dinvg / fabs(v)) * state->norm_Dinvg; /* compute: t = 1 - alpha_fac*(1-c) */ t = 1.0 - alpha_fac*(1.0 - c); if (t * state->norm_Dgn <= delta) { /* set dx = (delta / ||D dx_gn||) dx_gn */ gsl_vector_memcpy(dx, state->dx_gn); gsl_vector_scale(dx, delta / state->norm_Dgn); } else { /* Cauchy point is inside, Gauss-Newton is outside trust region; * use double dogleg step */ double beta = dogleg_beta(t, delta, trust_state->diag, state); /* compute: workp = t*dx_gn - dx_sd */ scaled_addition(t, state->dx_gn, -1.0, state->dx_sd, state->workp); /* dx = dx_sd + beta*(t*dx_gn - dx_sd) */ scaled_addition(beta, state->workp, 1.0, state->dx_sd, dx); } } } return GSL_SUCCESS; } static int dogleg_preduction(const void * vtrust_state, const gsl_vector * dx, double * pred, void * vstate) { const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; dogleg_state_t *state = (dogleg_state_t *) vstate; *pred = quadratic_preduction(trust_state->f, trust_state->J, dx, state->workn); return GSL_SUCCESS; } /* dogleg_calc_gn() Calculate Gauss-Newton step which satisfies: J dx_gn = -f Inputs: trust_state - trust state variables dx - (output) Gauss-Newton step Return: success/error */ static int dogleg_calc_gn(const gsl_multifit_nlinear_trust_state * trust_state, gsl_vector * dx) { int status; const gsl_multifit_nlinear_parameters *params = trust_state->params; /* initialize linear least squares solver */ status = (params->solver->init)(trust_state, trust_state->solver_state); if (status) return status; /* prepare the linear solver to compute Gauss-Newton step */ status = (params->solver->presolve)(0.0, trust_state, trust_state->solver_state); if (status) return status; /* solve: J dx_gn = -f for Gauss-Newton step */ status = (params->solver->solve)(trust_state->f, dx, trust_state, trust_state->solver_state); if (status) return status; return GSL_SUCCESS; } /* dogleg_beta() This function finds beta in [0,1] such that the step dx = dx_sd + beta*(t*dx_gn - dx_sd) has norm ||D dx|| = delta beta is the positive root of the quadratic: a beta^2 + b beta + c = 0 with a = ||D(t*dx_gn - dx_sd)||^2 b = 2 dx_sd^T D^T D (t*dx_gn - dx_sd) c = ||D dx_sd||^2 - delta^2 Inputs: t - amount of Gauss-Newton step to use for dogleg (= 1 for classical dogleg, <= 1 for double dogleg) delta - trust region radius diag - diag(D) scaling matrix state - workspace */ static double dogleg_beta(const double t, const double delta, const gsl_vector * diag, dogleg_state_t * state) { double beta; double a, b, c; /* compute: workp = t*dx_gn - dx_sd */ scaled_addition(t, state->dx_gn, -1.0, state->dx_sd, state->workp); /* a = || D (t*dx_gn - dx_sd) ||^2 */ a = scaled_enorm(diag, state->workp); a *= a; /* workp = D^T D (t*dx_gn - dx_sd) */ gsl_vector_mul(state->workp, diag); gsl_vector_mul(state->workp, diag); /* b = 2 dx_sd^T D^T D (t*dx_gn - dx-sd) */ gsl_blas_ddot(state->dx_sd, state->workp, &b); b *= 2.0; /* c = || D dx_sd ||^2 - delta^2 = (||D dx_sd|| + delta) (||D dx_sd|| - delta) */ c = (state->norm_Dsd + delta) * (state->norm_Dsd - delta); if (b > 0.0) { beta = (-2.0 * c) / (b + sqrt(b*b - 4.0*a*c)); } else { beta = (-b + sqrt(b*b - 4.0*a*c)) / (2.0 * a); } return beta; } static const gsl_multifit_nlinear_trs dogleg_type = { "dogleg", dogleg_alloc, dogleg_init, dogleg_preloop, dogleg_step, dogleg_preduction, dogleg_free }; const gsl_multifit_nlinear_trs *gsl_multifit_nlinear_trs_dogleg = &dogleg_type; static const gsl_multifit_nlinear_trs ddogleg_type = { "double-dogleg", dogleg_alloc, dogleg_init, dogleg_preloop, dogleg_double_step, dogleg_preduction, dogleg_free }; const gsl_multifit_nlinear_trs *gsl_multifit_nlinear_trs_ddogleg = &ddogleg_type; gsl/multifit_nlinear/svd.c0000644000175000017500000001457013536674414014246 0ustar eddedd/* multifit_nlinear/svd.c * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This module handles the solution of the linear least squares * system: * * [ J ] dx = - [ f ] * [ sqrt(mu)*D ] [ 0 ] * * using an SVD approach. The system above is transformed to "standard form" * via: * * J~ = J D^{-1} * dx~ = D dx * * so that * * [ J~ ] dx~ = - [ f ] * [ sqrt(mu)*I ] [ 0 ] * * can be solved with a standard SVD method, and then dx is recovered * from dx~ via: dx = D^{-1} dx~ */ #include #include #include #include #include #include #include #include typedef struct { size_t n; /* number of residuals */ size_t p; /* number of parameters */ gsl_matrix *U; /* U factor of J, n-by-p */ gsl_matrix *V; /* V factor of J, p-by-p */ gsl_vector *S; /* singular values, size p */ gsl_vector *workp; /* workspace, length p */ double mu; /* LM parameter */ } svd_state_t; static int svd_init(const void * vtrust_state, void * vstate); static int svd_presolve(const double mu, const void * vtrust_state, void * vstate); static int svd_solve(const gsl_vector * f, gsl_vector *x, const void * vtrust_state, void *vstate); static int svd_rcond(double * rcond, void * vstate); static void * svd_alloc (const size_t n, const size_t p) { svd_state_t *state; (void)n; state = calloc(1, sizeof(svd_state_t)); if (state == NULL) { GSL_ERROR_NULL ("failed to allocate svd state", GSL_ENOMEM); } state->U = gsl_matrix_alloc(n, p); if (state->U == NULL) { GSL_ERROR_NULL ("failed to allocate space for U", GSL_ENOMEM); } state->V = gsl_matrix_alloc(p, p); if (state->V == NULL) { GSL_ERROR_NULL ("failed to allocate space for V", GSL_ENOMEM); } state->S = gsl_vector_alloc(p); if (state->S == NULL) { GSL_ERROR_NULL ("failed to allocate space for S", GSL_ENOMEM); } state->workp = gsl_vector_alloc(p); if (state->workp == NULL) { GSL_ERROR_NULL ("failed to allocate space for workp", GSL_ENOMEM); } state->mu = 0.0; state->n = n; state->p = p; return state; } static void svd_free(void *vstate) { svd_state_t *state = (svd_state_t *) vstate; if (state->U) gsl_matrix_free(state->U); if (state->V) gsl_matrix_free(state->V); if (state->S) gsl_vector_free(state->S); if (state->workp) gsl_vector_free(state->workp); free(state); } /* compute svd of J */ static int svd_init(const void * vtrust_state, void * vstate) { int status; const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; svd_state_t *state = (svd_state_t *) vstate; size_t i; gsl_matrix_set_zero(state->U); /* compute U = J D^{-1} */ for (i = 0; i < state->p; ++i) { gsl_vector_const_view Ji = gsl_matrix_const_column(trust_state->J, i); gsl_vector_view ui = gsl_matrix_column(state->U, i); double di = gsl_vector_get(trust_state->diag, i); gsl_blas_daxpy(1.0 / di, &Ji.vector, &ui.vector); } status = gsl_linalg_SV_decomp(state->U, state->V, state->S, state->workp); return status; } static int svd_presolve(const double mu, const void * vtrust_state, void * vstate) { svd_state_t *state = (svd_state_t *) vstate; state->mu = mu; (void)vtrust_state; return GSL_SUCCESS; } static int svd_solve(const gsl_vector * f, gsl_vector *x, const void * vtrust_state, void *vstate) { int status = GSL_SUCCESS; const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; svd_state_t *state = (svd_state_t *) vstate; const size_t p = state->p; const double tol = GSL_DBL_EPSILON; const double s0 = gsl_vector_get(state->S, 0); size_t j; /* compute workp = - U^T f */ gsl_blas_dgemv(CblasTrans, -1.0, state->U, f, 0.0, state->workp); /* * compute: * * workp = sum_i s_i / (s_i^2 + mu) (-u_i^T f) */ if (state->mu == 0.0) { /* * compute Gauss-Newton direction by solving * J x = -f */ for (j = 0; j < p; ++j) { double sj = gsl_vector_get(state->S, j); double *ptr = gsl_vector_ptr(state->workp, j); double alpha; if (sj <= tol * s0) alpha = 0.0; else alpha = 1.0 / sj; *ptr *= alpha; } } else { /* * solve: * * [ J D^{-1} ] (D x) = -[ f ] * [ sqrt(mu) I ] [ 0 ] * * using SVD factorization of J D^{-1} */ for (j = 0; j < p; ++j) { double sj = gsl_vector_get(state->S, j); double *ptr = gsl_vector_ptr(state->workp, j); *ptr *= sj / (sj*sj + state->mu); } } /* compute: x = V * workp */ gsl_blas_dgemv(CblasNoTrans, 1.0, state->V, state->workp, 0.0, x); /* compute D^{-1} x */ gsl_vector_div(x, trust_state->diag); return status; } static int svd_rcond(double * rcond, void * vstate) { int status = GSL_SUCCESS; svd_state_t *state = (svd_state_t *) vstate; double smax = gsl_vector_get(state->S, 0); double smin = gsl_vector_get(state->S, state->p - 1); *rcond = smin / smax; return status; } static const gsl_multifit_nlinear_solver svd_type = { "svd", svd_alloc, svd_init, svd_presolve, svd_solve, svd_rcond, svd_free }; const gsl_multifit_nlinear_solver *gsl_multifit_nlinear_solver_svd = &svd_type; gsl/multifit_nlinear/test_gaussian.c0000644000175000017500000000677513536674414016333 0ustar eddedd#define gaussian_N 15 #define gaussian_P 3 static double gaussian_x0[gaussian_P] = { 0.4, 1.0, 0.0 }; static double gaussian_epsrel = 1.0e-10; static double gaussian_Y[gaussian_N] = { 0.0009, 0.0044, 0.0175, 0.0540, 0.1295, 0.2420, 0.3521, 0.3989, 0.3521, 0.2420, 0.1295, 0.0540, 0.0175, 0.0044, 0.0009 }; static void gaussian_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 1.12793276961871985e-08; const double gaussian_x[gaussian_P] = { 0.398956137838762825, 1.00001908448786647, 0.0 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < gaussian_P; ++i) { gsl_test_rel(x[i], gaussian_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int gaussian_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < gaussian_N; ++i) { double ti = (7.0 - i) / 2.0; double yi = gaussian_Y[i]; double term = ti - x3; double fi = x1 * exp(-x2*term*term/2.0) - yi; gsl_vector_set(f, i, fi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int gaussian_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < gaussian_N; ++i) { double ti = (7.0 - i) / 2.0; double term1 = ti - x3; double term2 = exp(-x2*term1*term1/2.0); gsl_matrix_set(J, i, 0, term2); gsl_matrix_set(J, i, 1, -0.5*x1*term2*term1*term1); gsl_matrix_set(J, i, 2, x1*x2*term1*term2); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int gaussian_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); double v3 = gsl_vector_get(v, 2); size_t i; for (i = 0; i < gaussian_N; ++i) { double ti = (7.0 - i) / 2.0; double term1 = ti - x3; double term2 = exp(-x2*term1*term1/2.0); gsl_vector_set(fvv, i, 0.25 * term2 * (ti*ti*ti*ti*v2*v2*x1 - 4*ti*ti*ti*v2*x1*(v3*x2 + v2*x3) + v2*x3*x3*(v2*x1*x3*x3 - 4*v1) + 4*v3*v3*x1*x2*(x2*x3*x3 - 1.0) + 4*v3*x3*(-2*v1*x2 + v2*x1*(x2*x3*x3 - 2.0)) + ti*ti*(4*v3*v3*x1*x2*x2 + 2*v2*(-2*v1 + 3*x1*x3*(2*v3*x2 + v2*x3))) - 4*ti*(v2*v2*x1*x3*x3*x3 + 2*v3*x2*(-v1 + v3*x1*x2*x3) + v2*(-2*v1*x3 + v3*x1*(-2.0 + 3*x2*x3*x3))))); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf gaussian_func = { gaussian_f, gaussian_df, gaussian_fvv, gaussian_N, gaussian_P, NULL, 0, 0, 0 }; static test_fdf_problem gaussian_problem = { "gaussian", gaussian_x0, NULL, NULL, &gaussian_epsrel, &gaussian_checksol, &gaussian_func }; gsl/multifit_nlinear/TODO0000644000175000017500000000044113536674414013766 0ustar eddedd1. rewrite qrsolv (COD, test on lin2) 2. More/Sorensen method for mu calculation 3. better condition estimate for svd 4. Revisit h_fvv = 0.01 vs 0.02 (originally 0.01) 5. fdfvv test currently disabled in test_fdf.c - on MacOS, the lmaccel/box3d/fdfvv test fails 6. Tikhonov regularization gsl/multifit_nlinear/convergence.c0000644000175000017500000000676213536674414015754 0ustar eddedd/* multifit_nlinear/convergence.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough * Copyright (C) 2015 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include static int test_delta (const gsl_vector * dx, const gsl_vector * x, double epsabs, double epsrel); static double scaled_infnorm(const gsl_vector *x, const gsl_vector *g); /* gsl_multifit_nlinear_test() Convergence tests for nonlinear minimization (1) |dx_i| <= xtol * (1 + |x_i|) for all i (2) || g .* x ||_inf <= gtol ||f||^2 (3) ||f(x+dx) - f(x)|| <= ftol * max(||f(x)||, 1) Inputs: xtol - tolerance for step size gtol - tolerance for gradient vector ftol - tolerance for residual vector info - (output) 1 - stopped by small x step 2 - stopped by small gradient 3 - stopped by small residual vector change w - workspace */ int gsl_multifit_nlinear_test (const double xtol, const double gtol, const double ftol, int *info, const gsl_multifit_nlinear_workspace * w) { int status; double gnorm, fnorm, phi; *info = 0; status = test_delta(w->dx, w->x, xtol*xtol, xtol); if (status == GSL_SUCCESS) { *info = 1; return GSL_SUCCESS; } /* compute gnorm = max_i( g_i * max(x_i, 1) ) */ gnorm = scaled_infnorm(w->x, w->g); /* compute fnorm = ||f|| */ fnorm = gsl_blas_dnrm2(w->f); phi = 0.5 * fnorm * fnorm; if (gnorm <= gtol * GSL_MAX(phi, 1.0)) { *info = 2; return GSL_SUCCESS; } #if 0 /* XXX */ if (dfnorm <= ftol * GSL_MAX(fnorm, 1.0)) { *info = 3; return GSL_SUCCESS; } #else (void)ftol; #endif return GSL_CONTINUE; } static int test_delta (const gsl_vector * dx, const gsl_vector * x, double epsabs, double epsrel) { size_t i; int ok = 1; const size_t n = x->size ; if (epsrel < 0.0) { GSL_ERROR ("relative tolerance is negative", GSL_EBADTOL); } for (i = 0 ; i < n ; i++) { double xi = gsl_vector_get(x,i); double dxi = gsl_vector_get(dx,i); double tolerance = epsabs + epsrel * fabs(xi) ; if (fabs(dxi) < tolerance) { ok = 1; } else { ok = 0; break; } } if (ok) return GSL_SUCCESS ; return GSL_CONTINUE; } static double scaled_infnorm(const gsl_vector *x, const gsl_vector *g) { const size_t n = x->size; size_t i; double norm = 0.0; for (i = 0; i < n; ++i) { double xi = GSL_MAX(gsl_vector_get(x, i), 1.0); double gi = gsl_vector_get(g, i); double tmp = fabs(xi * gi); if (tmp > norm) norm = tmp; } return norm; } gsl/multifit_nlinear/covar.c0000644000175000017500000001156713536674414014567 0ustar eddedd/* multifit_nlinear/covar.c * * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2007 Brian Gough * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include static int covar_QRPT (gsl_matrix * r, gsl_permutation * perm, const double epsrel, gsl_matrix * covar); /* Compute the covariance matrix cov = inv (J^T J) by QRP^T decomposition of J */ int gsl_multifit_nlinear_covar (const gsl_matrix * J, const double epsrel, gsl_matrix * covar) { int status; gsl_matrix * r; gsl_vector * tau; gsl_vector * norm; gsl_permutation * perm; const size_t m = J->size1; const size_t n = J->size2; if (m < n) { GSL_ERROR ("Jacobian be rectangular M x N with M >= N", GSL_EBADLEN); } if (covar->size1 != covar->size2 || covar->size1 != n) { GSL_ERROR ("covariance matrix must be square and match second dimension of jacobian", GSL_EBADLEN); } r = gsl_matrix_alloc (m, n); tau = gsl_vector_alloc (n); perm = gsl_permutation_alloc (n) ; norm = gsl_vector_alloc (n) ; { int signum = 0; gsl_matrix_memcpy (r, J); gsl_linalg_QRPT_decomp (r, tau, perm, &signum, norm); } status = covar_QRPT(r, perm, epsrel, covar); gsl_matrix_free (r); gsl_permutation_free (perm); gsl_vector_free (tau); gsl_vector_free (norm); return status; } static int covar_QRPT (gsl_matrix * r, gsl_permutation * perm, const double epsrel, gsl_matrix * covar) { /* Form the inverse of R in the full upper triangle of R */ double tolr = epsrel * fabs(gsl_matrix_get(r, 0, 0)); const size_t n = r->size2; size_t i, j, k; size_t kmax = 0; for (k = 0 ; k < n ; k++) { double rkk = gsl_matrix_get(r, k, k); if (fabs(rkk) <= tolr) { break; } gsl_matrix_set(r, k, k, 1.0/rkk); for (j = 0; j < k ; j++) { double t = gsl_matrix_get(r, j, k) / rkk; gsl_matrix_set (r, j, k, 0.0); for (i = 0; i <= j; i++) { double rik = gsl_matrix_get (r, i, k); double rij = gsl_matrix_get (r, i, j); gsl_matrix_set (r, i, k, rik - t * rij); } } kmax = k; } /* Form the full upper triangle of the inverse of R^T R in the full upper triangle of R */ for (k = 0; k <= kmax ; k++) { for (j = 0; j < k; j++) { double rjk = gsl_matrix_get (r, j, k); for (i = 0; i <= j ; i++) { double rij = gsl_matrix_get (r, i, j); double rik = gsl_matrix_get (r, i, k); gsl_matrix_set (r, i, j, rij + rjk * rik); } } { double t = gsl_matrix_get (r, k, k); for (i = 0; i <= k; i++) { double rik = gsl_matrix_get (r, i, k); gsl_matrix_set (r, i, k, t * rik); }; } } /* Form the full lower triangle of the covariance matrix in the strict lower triangle of R and in w */ for (j = 0 ; j < n ; j++) { size_t pj = gsl_permutation_get (perm, j); for (i = 0; i <= j; i++) { size_t pi = gsl_permutation_get (perm, i); double rij; if (j > kmax) { gsl_matrix_set (r, i, j, 0.0); rij = 0.0 ; } else { rij = gsl_matrix_get (r, i, j); } if (pi > pj) { gsl_matrix_set (r, pi, pj, rij); } else if (pi < pj) { gsl_matrix_set (r, pj, pi, rij); } } { double rjj = gsl_matrix_get (r, j, j); gsl_matrix_set (covar, pj, pj, rjj); } } /* symmetrize the covariance matrix */ for (j = 0 ; j < n ; j++) { for (i = 0; i < j ; i++) { double rji = gsl_matrix_get (r, j, i); gsl_matrix_set (covar, j, i, rji); gsl_matrix_set (covar, i, j, rji); } } return GSL_SUCCESS; } gsl/multifit_nlinear/test_brown3.c0000644000175000017500000000403013536674414015711 0ustar eddedd#define brown3_N 3 #define brown3_P 2 static double brown3_x0[brown3_P] = { 1.0, 1.0 }; static double brown3_epsrel = 1.0e-12; static void brown3_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; const double brown3_x[brown3_P] = { 1.0e6, 2.0e-6 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < brown3_P; ++i) { gsl_test_rel(x[i], brown3_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int brown3_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); gsl_vector_set(f, 0, x1 - 1.0e6); gsl_vector_set(f, 1, x2 - 2.0e-6); gsl_vector_set(f, 2, x1*x2 - 2.0); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int brown3_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); gsl_matrix_set_zero(J); gsl_matrix_set(J, 0, 0, 1.0); gsl_matrix_set(J, 1, 1, 1.0); gsl_matrix_set(J, 2, 0, x2); gsl_matrix_set(J, 2, 1, x1); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int brown3_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); gsl_vector_set(fvv, 0, 0.0); gsl_vector_set(fvv, 1, 0.0); gsl_vector_set(fvv, 2, 2.0 * v1 * v2); (void)x; /* avoid unused parameter warning */ (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf brown3_func = { brown3_f, brown3_df, brown3_fvv, brown3_N, brown3_P, NULL, 0, 0, 0 }; static test_fdf_problem brown3_problem = { "brown_badly_scaled", brown3_x0, NULL, NULL, &brown3_epsrel, &brown3_checksol, &brown3_func }; gsl/multifit_nlinear/test_meyerscal.c0000644000175000017500000000635013536674414016472 0ustar eddedd#define meyerscal_N 16 #define meyerscal_P 3 static double meyerscal_x0[meyerscal_P] = { 8.85, 4.0, 2.5 }; static double meyerscal_epsrel = 1.0e-6; static double meyerscal_Y[meyerscal_N] = { 34780., 28610., 23650., 19630., 16370., 13720., 11540., 9744., 8261., 7030., 6005., 5147., 4427., 3820., 3307., 2872. }; static void meyerscal_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 8.794585517003888e-05; const double meyerscal_x[meyerscal_P] = { 2.481778312286695e+00, 6.181346341853554e+00, 3.452236344749865e+00 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < meyerscal_P; ++i) { gsl_test_rel(x[i], meyerscal_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int meyerscal_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < meyerscal_N; ++i) { double ti = 0.45 + 0.05*(i + 1.0); double yi = meyerscal_Y[i]; double fi = x1 * exp(10.0*x2 / (ti + x3) - 13.0) - 1.0e-3*yi; gsl_vector_set(f, i, fi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int meyerscal_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); size_t i; for (i = 0; i < meyerscal_N; ++i) { double ti = 0.45 + 0.05*(i + 1.0); double term1 = ti + x3; double term2 = exp(10.0*x2/term1 - 13.0); gsl_matrix_set(J, i, 0, term2); gsl_matrix_set(J, i, 1, 10.0*x1*term2/term1); gsl_matrix_set(J, i, 2, -10.0*x1*x2*term2/(term1*term1)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int meyerscal_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); double v3 = gsl_vector_get(v, 2); size_t i; for (i = 0; i < meyerscal_N; ++i) { double ti = 0.45 + 0.05*(i + 1.0); double term1 = ti + x3; double term2 = exp(10.0*x2/term1 - 13.0); double term3 = v2*term1 - v3*x2; double term4 = ti*ti*v1 - v3*x1*(5*x2 + x3) + x3*(5*v2*x1 + v1*x3) + ti*(5*v2*x1 - v3*x1 + 2*v1*x3); gsl_vector_set(fvv, i, 20*term2*term3*term4 / pow(term1, 4.0)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf meyerscal_func = { meyerscal_f, meyerscal_df, meyerscal_fvv, meyerscal_N, meyerscal_P, NULL, 0, 0, 0 }; static test_fdf_problem meyerscal_problem = { "meyerscal", meyerscal_x0, NULL, NULL, &meyerscal_epsrel, &meyerscal_checksol, &meyerscal_func }; gsl/multifit_nlinear/test_powell2.c0000644000175000017500000000375213536674414016075 0ustar eddedd#define powell2_N 2 #define powell2_P 2 static double powell2_x0[powell2_P] = { 3.0, 1.0 }; static double powell2_epsrel = 1.0e-3; static void powell2_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < powell2_P; ++i) { gsl_test_rel(x[i], 0.0, epsrel, "%s/%s i=%zu", sname, pname, i); } } static int powell2_f (const gsl_vector * x, void *params, gsl_vector * f) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); gsl_vector_set(f, 0, x0); gsl_vector_set(f, 1, 10.0*x0/(x0 + 0.1) + 2.0*x1*x1); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int powell2_df (const gsl_vector * x, void *params, gsl_matrix * df) { double x0 = gsl_vector_get (x, 0); double x1 = gsl_vector_get (x, 1); double term = x0 + 0.1; gsl_matrix_set(df, 0, 0, 1.0); gsl_matrix_set(df, 0, 1, 0.0); gsl_matrix_set(df, 1, 0, 1.0 / (term * term)); gsl_matrix_set(df, 1, 1, 4.0 * x1); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int powell2_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x0 = gsl_vector_get (x, 0); double v0 = gsl_vector_get (v, 0); double v1 = gsl_vector_get (v, 1); double term = x0 + 0.1; gsl_vector_set(fvv, 0, 0.0); gsl_vector_set(fvv, 1, 4*v1*v1 - (2*v0*v0)/pow(term, 3.0)); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf powell2_func = { powell2_f, powell2_df, powell2_fvv, powell2_N, powell2_P, NULL, 0, 0, 0 }; static test_fdf_problem powell2_problem = { "powell2", powell2_x0, NULL, NULL, &powell2_epsrel, &powell2_checksol, &powell2_func }; gsl/multifit_nlinear/test.c0000644000175000017500000000707213536675317014433 0ustar eddedd/* multifit_nlinear/test.c * * Copyright (C) 2007, 2013, 2015, 2016 Brian Gough, Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* These tests are based on the NIST Statistical Reference Datasets See http://www.nist.gov/itl/div898/strd/index.html for more information. */ #include #include #include #include #include #include #include #include #include "test_fdf.c" static void test_proc(const gsl_multifit_nlinear_trs *trs, const gsl_multifit_nlinear_scale *scale, const gsl_multifit_nlinear_solver *solver, const int fdtype) { gsl_multifit_nlinear_parameters fdf_params = gsl_multifit_nlinear_default_parameters(); fdf_params.trs = trs; fdf_params.scale = scale; fdf_params.solver = solver; fdf_params.fdtype = fdtype; test_fdf_main(&fdf_params); } int main (void) { const gsl_multifit_nlinear_trs **nlinear_trs[6]; const gsl_multifit_nlinear_solver **nlinear_solvers[5]; const gsl_multifit_nlinear_scale **nlinear_scales[3]; const gsl_multifit_nlinear_trs **trs; const gsl_multifit_nlinear_solver **solver; const gsl_multifit_nlinear_scale **scale; size_t i = 0; gsl_ieee_env_setup(); /* initialize arrays */ nlinear_trs[0] = &gsl_multifit_nlinear_trs_lm; nlinear_trs[1] = &gsl_multifit_nlinear_trs_lmaccel; nlinear_trs[2] = &gsl_multifit_nlinear_trs_dogleg; nlinear_trs[3] = &gsl_multifit_nlinear_trs_ddogleg; nlinear_trs[4] = &gsl_multifit_nlinear_trs_subspace2D; nlinear_trs[5] = NULL; nlinear_solvers[0] = &gsl_multifit_nlinear_solver_cholesky; nlinear_solvers[1] = &gsl_multifit_nlinear_solver_mcholesky; nlinear_solvers[2] = &gsl_multifit_nlinear_solver_qr; nlinear_solvers[3] = &gsl_multifit_nlinear_solver_svd; nlinear_solvers[4] = NULL; /* skip Marquardt scaling since it won't pass */ nlinear_scales[0] = &gsl_multifit_nlinear_scale_levenberg; nlinear_scales[1] = &gsl_multifit_nlinear_scale_more; nlinear_scales[2] = NULL; /* run testsuite over all parameter combinations */ for (trs = nlinear_trs[i]; trs != NULL; trs = nlinear_trs[++i]) { size_t j = 0; fprintf(stderr, "trs = %s\n", (*trs)->name); for (solver = nlinear_solvers[j]; solver != NULL; solver = nlinear_solvers[++j]) { size_t k = 0; /* don't use Cholesky solver with dogleg methods */ if (i > 1 && *solver == gsl_multifit_nlinear_solver_cholesky) continue; fprintf(stderr, "solver = %s\n", (*solver)->name); for (scale = nlinear_scales[k]; scale != NULL; scale = nlinear_scales[++k]) { test_proc(*trs, *scale, *solver, GSL_MULTIFIT_NLINEAR_FWDIFF); test_proc(*trs, *scale, *solver, GSL_MULTIFIT_NLINEAR_CTRDIFF); } } } exit (gsl_test_summary ()); } gsl/multifit_nlinear/test_brown2.c0000644000175000017500000000651113536674414015716 0ustar eddedd#define brown2_N 5 #define brown2_P 5 static double brown2_x0[brown2_P] = { 0.5, 0.5, 0.5, 0.5, 0.5 }; static double brown2_epsrel = 1.0e-12; static void brown2_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; double sumsq_exact; double alpha; const double p = (double) brown2_P; double alpha1mp, lhs, lastel; if (sumsq < 0.5) { /* sumsq = 0 case */ sumsq_exact = 0.0; alpha = x[0]; alpha1mp = pow(alpha, 1.0 - p); lhs = p*pow(alpha, p) - (p + 1)/alpha1mp; lastel = alpha1mp; gsl_test_rel(lhs, -1.0, epsrel, "%s/%s alpha lhs", sname, pname); } else { /* sumsq = 1 case */ sumsq_exact = 1.0; alpha = 0.0; lastel = p + 1.0; } gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 1; i < brown2_P - 1; ++i) { gsl_test_rel(x[i], alpha, epsrel, "%s/%s i=%zu", sname, pname, i); } gsl_test_rel(x[brown2_P - 1], lastel, epsrel, "%s/%s last element", sname, pname); } static int brown2_f (const gsl_vector * x, void *params, gsl_vector * f) { size_t i; double sum = -(brown2_N + 1.0); double prod = 1.0; for (i = 0; i < brown2_N; ++i) { double xi = gsl_vector_get(x, i); sum += xi; prod *= xi; } for (i = 0; i < brown2_N - 1; ++i) { double xi = gsl_vector_get(x, i); gsl_vector_set(f, i, xi + sum); } gsl_vector_set(f, brown2_N - 1, prod - 1.0); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int brown2_df (const gsl_vector * x, void *params, gsl_matrix * J) { size_t i, j; for (j = 0; j < brown2_P; ++j) { double prod = 1.0; for (i = 0; i < brown2_N - 1; i++) { double Jij = (i == j) ? 2.0 : 1.0; gsl_matrix_set(J, i, j, Jij); } for (i = 0; i < brown2_N; i++) { if (i != j) prod *= gsl_vector_get(x, i); } gsl_matrix_set(J, brown2_N - 1, j, prod); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int brown2_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { size_t i, j, k; double sum = 0.0; gsl_vector_set_zero(fvv); for (k = 0; k < brown2_P; ++k) { double vk = gsl_vector_get(v, k); for (i = 0; i < brown2_P; ++i) { double vi = gsl_vector_get(v, i); double delta = (i == k) ? 1.0 : 0.0; double prod = 1.0; for (j = 0; j < brown2_N; ++j) { if (j != i && j != k) { double xj = gsl_vector_get(x, j); prod *= xj; } } sum += vk * vi * (1.0 - delta) * prod; } } gsl_vector_set(fvv, brown2_N - 1, sum); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf brown2_func = { brown2_f, brown2_df, brown2_fvv, brown2_N, brown2_P, NULL, 0, 0, 0 }; static test_fdf_problem brown2_problem = { "brown_almost_linear", brown2_x0, NULL, NULL, &brown2_epsrel, &brown2_checksol, &brown2_func }; gsl/multifit_nlinear/test_eckerle.c0000644000175000017500000000741613536674414016124 0ustar eddedd#define eckerle_N 35 #define eckerle_P 3 static double eckerle_x0a[eckerle_P] = { 1.0, 10.0, 500.0 }; static double eckerle_x0b[eckerle_P] = { 1.5, 5.0, 450.0 }; static double eckerle_epsrel = 1.0e-7; static double eckerle_sigma[eckerle_P] = { 1.5408051163E-02, 4.6803020753E-02, 4.6800518816E-02 }; static double eckerle_X[eckerle_N] = { 400.000000, 405.000000, 410.000000, 415.000000, 420.000000, 425.000000, 430.000000, 435.000000, 436.500000, 438.000000, 439.500000, 441.000000, 442.500000, 444.000000, 445.500000, 447.000000, 448.500000, 450.000000, 451.500000, 453.000000, 454.500000, 456.000000, 457.500000, 459.000000, 460.500000, 462.000000, 463.500000, 465.000000, 470.000000, 475.000000, 480.000000, 485.000000, 490.000000, 495.000000, 500.000000 }; static double eckerle_F[eckerle_N] = { 0.0001575, 0.0001699, 0.0002350, 0.0003102, 0.0004917, 0.0008710, 0.0017418, 0.0046400, 0.0065895, 0.0097302, 0.0149002, 0.0237310, 0.0401683, 0.0712559, 0.1264458, 0.2073413, 0.2902366, 0.3445623, 0.3698049, 0.3668534, 0.3106727, 0.2078154, 0.1164354, 0.0616764, 0.0337200, 0.0194023, 0.0117831, 0.0074357, 0.0022732, 0.0008800, 0.0004579, 0.0002345, 0.0001586, 0.0001143, 0.0000710 }; static void eckerle_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 1.4635887487E-03; const double eckerle_x[eckerle_P] = { 1.5543827178E+00, 4.0888321754E+00, 4.5154121844E+02 }; double new_x[3]; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); /* x1 and x2 are unique up to a sign, but they must be * the same sign */ if (x[0] < 0.0 && x[1] < 0.0) { new_x[0] = -x[0]; new_x[1] = -x[1]; } else { new_x[0] = x[0]; new_x[1] = x[1]; } new_x[2] = x[2]; for (i = 0; i < eckerle_P; ++i) { gsl_test_rel(new_x[i], eckerle_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int eckerle_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[eckerle_P]; size_t i; for (i = 0; i < eckerle_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < eckerle_N; i++) { double xi = eckerle_X[i]; double term = xi - b[2]; double yi; yi = b[0] / b[1] * exp(-0.5 * term * term / b[1] / b[1]); gsl_vector_set (f, i, yi - eckerle_F[i]); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int eckerle_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[eckerle_P]; size_t i; for (i = 0; i < eckerle_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < eckerle_N; i++) { double xi = eckerle_X[i]; double term1 = xi - b[2]; double term2 = exp(-0.5 * term1 * term1 / (b[1] * b[1])); gsl_matrix_set (df, i, 0, term2 / b[1]); gsl_matrix_set (df, i, 1, -b[0] * term2 / (b[1] * b[1]) + b[0] / pow(b[1], 4.0) * term2 * term1 * term1); gsl_matrix_set (df, i, 2, b[0] / pow(b[1], 3.0) * term1 * term2); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf eckerle_func = { eckerle_f, eckerle_df, NULL, /* analytic expression too complex */ eckerle_N, eckerle_P, NULL, 0, 0, 0 }; static test_fdf_problem eckerlea_problem = { "nist-eckerlea", eckerle_x0a, NULL, eckerle_sigma, &eckerle_epsrel, &eckerle_checksol, &eckerle_func }; static test_fdf_problem eckerleb_problem = { "nist-eckerleb", eckerle_x0b, NULL, eckerle_sigma, &eckerle_epsrel, &eckerle_checksol, &eckerle_func }; gsl/multifit_nlinear/cholesky.c0000644000175000017500000001721613536675317015276 0ustar eddedd/* multifit_nlinear/cholesky.c * * Copyright (C) 2015, 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This module calculates the solution of the normal equations least squares * system: * * [ J~^T J~ + mu D~^T D~ ] p~ = -J~^T f * * using the Cholesky decomposition. Quantities are scaled * according to: * * J~ = J S * D~ = D S * p~ = S^{-1} p * * where S is a diagonal matrix and S_jj = || J_j || and J_j is column * j of the Jacobian. This balancing transformation seems to be more * numerically stable for some Jacobians. */ #include #include #include #include #include #include #include #include #include "common.c" typedef struct { gsl_matrix *JTJ; /* J^T J */ gsl_matrix *work_JTJ; /* copy of J^T J */ gsl_vector *rhs; /* -J^T f, size p */ gsl_vector *work3p; /* workspace, size 3*p */ double mu; /* current regularization parameter */ } cholesky_state_t; static void *cholesky_alloc (const size_t n, const size_t p); static int cholesky_init(const void * vtrust_state, void * vstate); static int cholesky_presolve(const double mu, const void * vtrust_state, void * vstate); static int cholesky_solve(const gsl_vector * f, gsl_vector *x, const void * vtrust_state, void *vstate); static int cholesky_solve_rhs(const gsl_vector * b, gsl_vector *x, cholesky_state_t *state); static int cholesky_regularize(const double mu, const gsl_vector * diag, gsl_matrix * A, cholesky_state_t * state); static void * cholesky_alloc (const size_t n, const size_t p) { cholesky_state_t *state; (void)n; state = calloc(1, sizeof(cholesky_state_t)); if (state == NULL) { GSL_ERROR_NULL ("failed to allocate cholesky state", GSL_ENOMEM); } state->JTJ = gsl_matrix_alloc(p, p); if (state->JTJ == NULL) { GSL_ERROR_NULL ("failed to allocate space for JTJ", GSL_ENOMEM); } state->work_JTJ = gsl_matrix_alloc(p, p); if (state->work_JTJ == NULL) { GSL_ERROR_NULL ("failed to allocate space for JTJ workspace", GSL_ENOMEM); } state->rhs = gsl_vector_alloc(p); if (state->rhs == NULL) { GSL_ERROR_NULL ("failed to allocate space for rhs", GSL_ENOMEM); } state->work3p = gsl_vector_alloc(3 * p); if (state->work3p == NULL) { GSL_ERROR_NULL ("failed to allocate space for work3p", GSL_ENOMEM); } state->mu = -1.0; return state; } static void cholesky_free(void *vstate) { cholesky_state_t *state = (cholesky_state_t *) vstate; if (state->JTJ) gsl_matrix_free(state->JTJ); if (state->work_JTJ) gsl_matrix_free(state->work_JTJ); if (state->rhs) gsl_vector_free(state->rhs); if (state->work3p) gsl_vector_free(state->work3p); free(state); } static int cholesky_init(const void * vtrust_state, void * vstate) { const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; cholesky_state_t *state = (cholesky_state_t *) vstate; /* compute J^T J */ gsl_blas_dsyrk(CblasLower, CblasTrans, 1.0, trust_state->J, 0.0, state->JTJ); return GSL_SUCCESS; } /* cholesky_presolve() Compute the modified Cholesky decomposition of J^T J + mu D^T D. Modified Cholesky is used in case mu = 0 and there are rounding errors in forming J^T J which could lead to an indefinite matrix. Inputs: mu - LM parameter vstate - workspace Notes: 1) On output, state->work_JTJ contains the Cholesky decomposition of J^T J + mu D^T D */ static int cholesky_presolve(const double mu, const void * vtrust_state, void * vstate) { const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; cholesky_state_t *state = (cholesky_state_t *) vstate; gsl_matrix *JTJ = state->work_JTJ; const gsl_vector *diag = trust_state->diag; int status; /* copy lower triangle of A to workspace */ gsl_matrix_tricpy(CblasLower, CblasNonUnit, JTJ, state->JTJ); /* augment normal equations: A -> A + mu D^T D */ status = cholesky_regularize(mu, diag, JTJ, state); if (status) return status; /* compute Cholesky decomposition */ status = gsl_linalg_cholesky_decomp1(JTJ); if (status) return status; state->mu = mu; return GSL_SUCCESS; } /* cholesky_solve() Compute (J^T J + mu D^T D) x = -J^T f Inputs: f - right hand side vector f x - (output) solution vector vstate - cholesky workspace */ static int cholesky_solve(const gsl_vector * f, gsl_vector *x, const void * vtrust_state, void *vstate) { const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; cholesky_state_t *state = (cholesky_state_t *) vstate; int status; /* compute rhs = -J^T f */ gsl_blas_dgemv(CblasTrans, -1.0, trust_state->J, f, 0.0, state->rhs); status = cholesky_solve_rhs(state->rhs, x, state); if (status) return status; return GSL_SUCCESS; } static int cholesky_rcond(double * rcond, void * vstate) { int status; cholesky_state_t *state = (cholesky_state_t *) vstate; double rcond_JTJ; if (state->mu < 0.0) { /* iteration has not started yet */ *rcond = 0.0; return GSL_EFAILED; } if (state->mu != 0) { /* * Cholesky decomposition hasn't been computed yet, or was computed * with mu > 0 - recompute Cholesky decomposition of J^T J */ /* copy lower triangle of JTJ to workspace */ gsl_matrix_tricpy(CblasLower, CblasNonUnit, state->work_JTJ, state->JTJ); /* compute Cholesky decomposition */ status = gsl_linalg_cholesky_decomp1(state->work_JTJ); if (status) return status; } status = gsl_linalg_cholesky_rcond(state->work_JTJ, &rcond_JTJ, state->work3p); if (status == GSL_SUCCESS) *rcond = sqrt(rcond_JTJ); return status; } /* solve: (J^T J + mu D^T D) x = b */ static int cholesky_solve_rhs(const gsl_vector * b, gsl_vector *x, cholesky_state_t *state) { int status; gsl_matrix *JTJ = state->work_JTJ; status = gsl_linalg_cholesky_solve(JTJ, b, x); if (status) return status; return GSL_SUCCESS; } /* A <- A + mu D^T D */ static int cholesky_regularize(const double mu, const gsl_vector * diag, gsl_matrix * A, cholesky_state_t * state) { (void) state; if (mu != 0.0) { size_t i; for (i = 0; i < diag->size; ++i) { double di = gsl_vector_get(diag, i); double *Aii = gsl_matrix_ptr(A, i, i); *Aii += mu * di * di; } } return GSL_SUCCESS; } static const gsl_multifit_nlinear_solver cholesky_type = { "cholesky", cholesky_alloc, cholesky_init, cholesky_presolve, cholesky_solve, cholesky_rcond, cholesky_free }; const gsl_multifit_nlinear_solver *gsl_multifit_nlinear_solver_cholesky = &cholesky_type; gsl/multifit_nlinear/test_lin1.c0000644000175000017500000000400413536674414015343 0ustar eddedd#define lin1_N 11 /* can be anything >= p */ #define lin1_P 5 static double lin1_x0[lin1_P] = { 1.0, 1.0, 1.0, 1.0, 1.0 }; static double lin1_epsrel = 1.0e-10; static void lin1_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = (double) (lin1_N - lin1_P); gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < lin1_P; ++i) { gsl_test_rel(x[i], -1.0, epsrel, "%s/%s i=%zu", sname, pname, i); } } static int lin1_f (const gsl_vector * x, void *params, gsl_vector * f) { size_t i, j; for (i = 0; i < lin1_N; ++i) { double fi = 0.0; for (j = 0; j < lin1_P; ++j) { double xj = gsl_vector_get(x, j); double Aij = (i == j) ? 1.0 : 0.0; Aij -= 2.0 / lin1_N; fi += Aij * xj; } fi -= 1.0; gsl_vector_set(f, i, fi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int lin1_df (const gsl_vector * x, void *params, gsl_matrix * J) { size_t i, j; for (i = 0; i < lin1_N; ++i) { for (j = 0; j < lin1_P; ++j) { double Jij = (i == j) ? 1.0 : 0.0; Jij -= 2.0 / lin1_N; gsl_matrix_set(J, i, j, Jij); } } (void)x; /* avoid unused parameter warning */ (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int lin1_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { (void)x; /* avoid unused parameter warnings */ (void)v; (void)params; gsl_vector_set_zero(fvv); return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf lin1_func = { lin1_f, lin1_df, lin1_fvv, lin1_N, lin1_P, NULL, 0, 0, 0 }; static test_fdf_problem lin1_problem = { "linear_full", lin1_x0, NULL, NULL, &lin1_epsrel, &lin1_checksol, &lin1_func }; gsl/multifit_nlinear/test_watson.c0000644000175000017500000000671213536674414016023 0ustar eddedd#define watson_N 31 #define watson_P 6 static double watson_x0[watson_P] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; static double watson_epsrel = 1.0e-6; static void watson_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 2.287670053552372e-03; const double watson_x[watson_P] = { -1.572508640629858e-02, 1.012434869366059e+00, -2.329916259263380e-01, 1.260430087686035e+00, -1.513728922580576e+00, 9.929964323646112e-01 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < watson_P; ++i) { gsl_test_rel(x[i], watson_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int watson_f (const gsl_vector * x, void *params, gsl_vector * f) { const double x1 = gsl_vector_get(x, 0); const double x2 = gsl_vector_get(x, 1); size_t i, j; for (i = 0; i < watson_N - 2; ++i) { double ti = (i + 1) / 29.0; double tjm1 = 1.0, tjm2 = 1.0; double sum1 = 0.0, sum2 = 0.0; for (j = 0; j < watson_P; ++j) { double xj = gsl_vector_get(x, j); sum1 += xj * tjm1; tjm1 *= ti; if (j > 0) { sum2 += j * xj * tjm2; tjm2 *= ti; } } gsl_vector_set (f, i, sum2 - sum1*sum1 - 1.0); } gsl_vector_set(f, watson_N - 2, x1); gsl_vector_set(f, watson_N - 1, x2 - x1*x1 - 1.0); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int watson_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get (x, 0); size_t i, j; gsl_matrix_set_zero(J); for (i = 0; i < watson_N - 2; ++i) { double ti = (i + 1) / 29.0; double tjm1 = 1.0, tjm2 = 1.0; double sum1 = 0.0; for (j = 0; j < watson_P; ++j) { double xj = gsl_vector_get(x, j); sum1 += xj * tjm1; tjm1 *= ti; } tjm1 = 1.0; tjm2 = 1.0; for (j = 0; j < watson_P; ++j) { gsl_matrix_set(J, i, j, j * tjm2 - 2.0*sum1*tjm1); tjm1 *= ti; if (j > 0) tjm2 *= ti; } } gsl_matrix_set(J, watson_N - 2, 0, 1.0); gsl_matrix_set(J, watson_N - 1, 0, -2.0*x1); gsl_matrix_set(J, watson_N - 1, 1, 1.0); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int watson_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double v1 = gsl_vector_get (v, 0); size_t i, j; for (i = 0; i < watson_N - 2; ++i) { double ti = (i + 1) / 29.0; double sum = 0.0; double tjm1 = 1.0; for (j = 0; j < watson_P; ++j) { double vj = gsl_vector_get(v, j); sum += vj * tjm1; tjm1 *= ti; } gsl_vector_set(fvv, i, -2.0*sum*sum); } gsl_vector_set(fvv, watson_N - 2, 0.0); gsl_vector_set(fvv, watson_N - 1, -2.0*v1*v1); (void)x; /* avoid unused parameter warning */ (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf watson_func = { watson_f, watson_df, watson_fvv, watson_N, watson_P, NULL, 0, 0, 0 }; static test_fdf_problem watson_problem = { "watson", watson_x0, NULL, NULL, &watson_epsrel, &watson_checksol, &watson_func }; gsl/multifit_nlinear/test_penalty1.c0000644000175000017500000000446513536674414016250 0ustar eddedd#define penalty1_P 10 #define penalty1_N (penalty1_P + 1) static double penalty1_x0[penalty1_P] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 }; static double penalty1_epsrel = 1.0e-12; static void penalty1_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { const double sumsq_exact = 7.08765146709037993e-05; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); (void)x; /* avoid unused parameter warning */ } static int penalty1_f (const gsl_vector * x, void *params, gsl_vector * f) { const double alpha = 1.0e-5; const double sqrt_alpha = sqrt(alpha); size_t i; double sum = 0.0; for (i = 0; i < penalty1_P; ++i) { double xi = gsl_vector_get(x, i); gsl_vector_set(f, i, sqrt_alpha*(xi - 1.0)); sum += xi * xi; } gsl_vector_set(f, penalty1_N - 1, sum - 0.25); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int penalty1_df (const gsl_vector * x, void *params, gsl_matrix * J) { const double alpha = 1.0e-5; const double sqrt_alpha = sqrt(alpha); size_t i; gsl_matrix_view m = gsl_matrix_submatrix(J, 0, 0, penalty1_P, penalty1_P); gsl_vector_view diag = gsl_matrix_diagonal(&m.matrix); gsl_matrix_set_zero(&m.matrix); gsl_vector_set_all(&diag.vector, sqrt_alpha); for (i = 0; i < penalty1_P; ++i) { double xi = gsl_vector_get(x, i); gsl_matrix_set(J, penalty1_N - 1, i, 2.0 * xi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int penalty1_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double u; gsl_vector_set_zero(fvv); gsl_blas_ddot(v, v, &u); gsl_vector_set(fvv, penalty1_N - 1, 2.0 * u); (void)x; /* avoid unused parameter warning */ (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf penalty1_func = { penalty1_f, penalty1_df, penalty1_fvv, penalty1_N, penalty1_P, NULL, 0, 0, 0 }; static test_fdf_problem penalty1_problem = { "penalty1", penalty1_x0, NULL, NULL, &penalty1_epsrel, &penalty1_checksol, &penalty1_func }; gsl/multifit_nlinear/test_boxbod.c0000644000175000017500000000561213536674414015763 0ustar eddedd#define boxbod_N 6 #define boxbod_P 2 static double boxbod_x0a[boxbod_P] = { 1.0, 1.0 }; static double boxbod_x0b[boxbod_P] = { 100.0, 0.75 }; static double boxbod_epsrel = 1.0e-7; static double boxbod_sigma[boxbod_P] = { 1.2354515176E+01, 1.0455993237E-01 }; static double boxbod_X[boxbod_N] = { 1.0, 2.0, 3.0, 5.0, 7.0, 10.0 }; static double boxbod_F[boxbod_N] = { 109.0, 149.0, 149.0, 191.0, 213.0, 224.0 }; static void boxbod_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 1.1680088766E+03; const double boxbod_x[boxbod_P] = { 2.1380940889E+02, 5.4723748542E-01 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < boxbod_P; ++i) { gsl_test_rel(x[i], boxbod_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int boxbod_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[boxbod_P]; size_t i; for (i = 0; i < boxbod_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < boxbod_N; i++) { double xi = boxbod_X[i]; double yi; yi = b[0] * (1.0 - exp(-b[1] * xi)); gsl_vector_set (f, i, yi - boxbod_F[i]); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int boxbod_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[boxbod_P]; size_t i; for (i = 0; i < boxbod_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < boxbod_N; i++) { double xi = boxbod_X[i]; double term = exp(-b[1] * xi); gsl_matrix_set (df, i, 0, 1.0 - term); gsl_matrix_set (df, i, 1, b[0] * term * xi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int boxbod_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); size_t i; for (i = 0; i < boxbod_N; i++) { double ti = boxbod_X[i]; double term = exp(-x2 * ti); gsl_vector_set(fvv, i, term * ti * v2 * (2*v1 - ti*v2*x1)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf boxbod_func = { boxbod_f, boxbod_df, boxbod_fvv, boxbod_N, boxbod_P, NULL, 0, 0, 0 }; static test_fdf_problem boxboda_problem = { "nist-boxboda", boxbod_x0a, NULL, boxbod_sigma, &boxbod_epsrel, &boxbod_checksol, &boxbod_func }; static test_fdf_problem boxbodb_problem = { "nist-boxbodb", boxbod_x0b, NULL, boxbod_sigma, &boxbod_epsrel, &boxbod_checksol, &boxbod_func }; gsl/multifit_nlinear/lm.c0000644000175000017500000002235013536674414014055 0ustar eddedd/* multifit_nlinear/lm.c * * Copyright (C) 2014, 2015, 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include /* * This module contains an implementation of the Levenberg-Marquardt * algorithm for nonlinear optimization problems. This implementation * closely follows the following works: * * [1] H. B. Nielsen, K. Madsen, Introduction to Optimization and * Data Fitting, Informatics and Mathematical Modeling, * Technical University of Denmark (DTU), 2010. * * [2] J. J. More, The Levenberg-Marquardt Algorithm: Implementation * and Theory, Lecture Notes in Mathematics, v630, 1978. */ typedef struct { size_t n; /* number of observations */ size_t p; /* number of parameters */ gsl_vector *fvv; /* D_v^2 f(x), size n */ gsl_vector *vel; /* geodesic velocity (standard LM step), size p */ gsl_vector *acc; /* geodesic acceleration, size p */ gsl_vector *workp; /* workspace, length p */ gsl_vector *workn; /* workspace, length n */ int accel; /* use geodesic acceleration? */ /* tunable parameters */ gsl_multifit_nlinear_parameters params; } lm_state_t; #include "common.c" static void *lm_alloc (const int accel, const void * params, const size_t n, const size_t p); static void *lm_alloc_noaccel (const void * params, const size_t n, const size_t p); static void *lm_alloc_accel (const void * params, const size_t n, const size_t p); static void lm_free(void *vstate); static int lm_init(const void *vtrust_state, void *vstate); static int lm_preloop(const void * vtrust_state, void * vstate); static int lm_step(const void * vtrust_state, const double delta, gsl_vector * dx, void * vstate); static int lm_preduction(const void * vtrust_state, const gsl_vector * dx, double * pred, void * vstate); static void * lm_alloc (const int accel, const void * params, const size_t n, const size_t p) { const gsl_multifit_nlinear_parameters *mparams = (const gsl_multifit_nlinear_parameters *) params; lm_state_t *state; state = calloc(1, sizeof(lm_state_t)); if (state == NULL) { GSL_ERROR_NULL ("failed to allocate lm state", GSL_ENOMEM); } state->workp = gsl_vector_alloc(p); if (state->workp == NULL) { GSL_ERROR_NULL ("failed to allocate space for workp", GSL_ENOMEM); } state->workn = gsl_vector_alloc(n); if (state->workn == NULL) { GSL_ERROR_NULL ("failed to allocate space for workn", GSL_ENOMEM); } state->fvv = gsl_vector_alloc(n); if (state->fvv == NULL) { GSL_ERROR_NULL ("failed to allocate space for fvv", GSL_ENOMEM); } state->vel = gsl_vector_alloc(p); if (state->vel == NULL) { GSL_ERROR_NULL ("failed to allocate space for vel", GSL_ENOMEM); } state->acc = gsl_vector_alloc(p); if (state->acc == NULL) { GSL_ERROR_NULL ("failed to allocate space for acc", GSL_ENOMEM); } state->n = n; state->p = p; state->params = *mparams; state->accel = accel; return state; } static void * lm_alloc_noaccel (const void * params, const size_t n, const size_t p) { return lm_alloc(0, params, n, p); } static void * lm_alloc_accel (const void * params, const size_t n, const size_t p) { return lm_alloc(1, params, n, p); } static void lm_free(void *vstate) { lm_state_t *state = (lm_state_t *) vstate; if (state->workp) gsl_vector_free(state->workp); if (state->workn) gsl_vector_free(state->workn); if (state->fvv) gsl_vector_free(state->fvv); if (state->vel) gsl_vector_free(state->vel); if (state->acc) gsl_vector_free(state->acc); free(state); } /* lm_init() Initialize LM solver Inputs: vtrust_state - trust state vstate - workspace Return: success/error */ static int lm_init(const void *vtrust_state, void *vstate) { const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; lm_state_t *state = (lm_state_t *) vstate; gsl_vector_set_zero(state->vel); gsl_vector_set_zero(state->acc); *(trust_state->avratio) = 0.0; return GSL_SUCCESS; } /* lm_preloop() Initialize LM method for new Jacobian matrix */ static int lm_preloop(const void * vtrust_state, void * vstate) { int status; const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; const gsl_multifit_nlinear_parameters *params = trust_state->params; (void)vstate; /* initialize linear least squares solver */ status = (params->solver->init)(trust_state, trust_state->solver_state); if (status) return status; return GSL_SUCCESS; } /* lm_step() Calculate a new step vector by solving the linear least squares system: [ J ] v = - [ f ] [ sqrt(mu) D ] [ 0 ] */ static int lm_step(const void * vtrust_state, const double delta, gsl_vector * dx, void * vstate) { int status; const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; lm_state_t *state = (lm_state_t *) vstate; const gsl_multifit_nlinear_parameters *params = trust_state->params; const double mu = *(trust_state->mu); (void)delta; /* prepare the linear solver with current LM parameter mu */ status = (params->solver->presolve)(mu, trust_state, trust_state->solver_state); if (status) return status; /* * solve: [ J ] v = - [ f ] * [ sqrt(mu)*D ] [ 0 ] */ status = (params->solver->solve)(trust_state->f, state->vel, trust_state, trust_state->solver_state); if (status) return status; if (state->accel) { double anorm, vnorm; /* compute geodesic acceleration */ status = gsl_multifit_nlinear_eval_fvv(params->h_fvv, trust_state->x, state->vel, trust_state->f, trust_state->J, trust_state->sqrt_wts, trust_state->fdf, state->fvv, state->workp); if (status) return status; /* * solve: [ J ] a = - [ fvv ] * [ sqrt(mu)*D ] [ 0 ] */ status = (params->solver->solve)(state->fvv, state->acc, trust_state, trust_state->solver_state); if (status) return status; anorm = gsl_blas_dnrm2(state->acc); vnorm = gsl_blas_dnrm2(state->vel); /* store |a| / |v| */ *(trust_state->avratio) = anorm / vnorm; } /* compute step dx = v + 1/2 a */ scaled_addition(1.0, state->vel, 0.5, state->acc, dx); return GSL_SUCCESS; } /* lm_preduction() Compute predicted reduction using Eq 4.4 of More 1978 */ static int lm_preduction(const void * vtrust_state, const gsl_vector * dx, double * pred, void * vstate) { const gsl_multifit_nlinear_trust_state *trust_state = (const gsl_multifit_nlinear_trust_state *) vtrust_state; lm_state_t *state = (lm_state_t *) vstate; const gsl_vector *diag = trust_state->diag; const gsl_vector *p = state->vel; const double norm_Dp = scaled_enorm(diag, p); const double normf = gsl_blas_dnrm2(trust_state->f); const double mu = *(trust_state->mu); double norm_Jp; double u, v; (void)dx; /* compute work = J*p */ gsl_blas_dgemv(CblasNoTrans, 1.0, trust_state->J, p, 0.0, state->workn); /* compute ||J*p|| */ norm_Jp = gsl_blas_dnrm2(state->workn); u = norm_Jp / normf; v = norm_Dp / normf; *pred = u * u + 2.0 * mu * v * v; return GSL_SUCCESS; } static const gsl_multifit_nlinear_trs lm_type = { "levenberg-marquardt", lm_alloc_noaccel, lm_init, lm_preloop, lm_step, lm_preduction, lm_free }; const gsl_multifit_nlinear_trs *gsl_multifit_nlinear_trs_lm = &lm_type; static const gsl_multifit_nlinear_trs lmaccel_type = { "levenberg-marquardt+accel", lm_alloc_accel, lm_init, lm_preloop, lm_step, lm_preduction, lm_free }; const gsl_multifit_nlinear_trs *gsl_multifit_nlinear_trs_lmaccel = &lmaccel_type; gsl/multifit_nlinear/test_rosenbrocke.c0000644000175000017500000000477713536674414017035 0ustar eddedd#define rosenbrocke_N 8 /* = p */ #define rosenbrocke_P 8 /* must be even */ static double rosenbrocke_x0[rosenbrocke_P] = { -1.2, 1.0, -1.2, 1.0, -1.2, 1.0, -1.2, 1.0 }; static double rosenbrocke_epsrel = 1.0e-12; static void rosenbrocke_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; const double rosenbrocke_x[rosenbrocke_P] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < rosenbrocke_P; ++i) { gsl_test_rel(x[i], rosenbrocke_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int rosenbrocke_f (const gsl_vector * x, void *params, gsl_vector * f) { size_t i; for (i = 0; i < rosenbrocke_N / 2; ++i) { double x2i = gsl_vector_get(x, 2*i + 1); double x2im1 = gsl_vector_get(x, 2*i); gsl_vector_set(f, 2*i, 10.0 * (x2i - x2im1*x2im1)); gsl_vector_set(f, 2*i + 1, 1.0 - x2im1); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int rosenbrocke_df (const gsl_vector * x, void *params, gsl_matrix * J) { size_t i; gsl_matrix_set_zero(J); for (i = 0; i < rosenbrocke_N / 2; ++i) { double x2im1 = gsl_vector_get(x, 2*i); gsl_matrix_set(J, 2*i, 2*i, -20.0*x2im1); gsl_matrix_set(J, 2*i, 2*i + 1, 10.0); gsl_matrix_set(J, 2*i + 1, 2*i, -1.0); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int rosenbrocke_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { size_t i; for (i = 0; i < rosenbrocke_N / 2; ++i) { double v2im1 = gsl_vector_get(v, 2*i); gsl_vector_set(fvv, 2*i, -20.0 * v2im1 * v2im1); gsl_vector_set(fvv, 2*i + 1, 0.0); } (void)x; /* avoid unused parameter warning */ (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf rosenbrocke_func = { rosenbrocke_f, rosenbrocke_df, rosenbrocke_fvv, rosenbrocke_N, rosenbrocke_P, NULL, 0, 0, 0 }; static test_fdf_problem rosenbrocke_problem = { "rosenbrock_extended", rosenbrocke_x0, NULL, NULL, &rosenbrocke_epsrel, &rosenbrocke_checksol, &rosenbrocke_func }; gsl/multifit_nlinear/trust.c0000644000175000017500000004204313536674414014627 0ustar eddedd/* multifit_nlinear/trust.c * * Copyright (C) 2016 Patrick Alken * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include "common.c" #include "nielsen.c" /* * This module contains a high level driver for a general trust * region nonlinear least squares solver. This container handles * the computation of all of the quantities relevant to all trust * region methods, including: * * residual vector: f_k = f(x_k) * Jacobian matrix: J_k = J(x_k) * gradient vector: g_k = J_k^T f_k * scaling matrix: D_k */ typedef struct { size_t n; /* number of observations */ size_t p; /* number of parameters */ double delta; /* trust region radius */ double mu; /* LM parameter */ long nu; /* for updating LM parameter */ gsl_vector *diag; /* D = diag(J^T J) */ gsl_vector *x_trial; /* trial parameter vector */ gsl_vector *f_trial; /* trial function vector */ gsl_vector *workp; /* workspace, length p */ gsl_vector *workn; /* workspace, length n */ void *trs_state; /* workspace for trust region subproblem */ void *solver_state; /* workspace for linear least squares solver */ double avratio; /* current |a| / |v| */ /* tunable parameters */ gsl_multifit_nlinear_parameters params; } trust_state_t; static void * trust_alloc (const gsl_multifit_nlinear_parameters * params, const size_t n, const size_t p); static void trust_free(void *vstate); static int trust_init(void *vstate, const gsl_vector * swts, gsl_multifit_nlinear_fdf *fdf, const gsl_vector *x, gsl_vector *f, gsl_matrix *J, gsl_vector *g); static int trust_iterate(void *vstate, const gsl_vector *swts, gsl_multifit_nlinear_fdf *fdf, gsl_vector *x, gsl_vector *f, gsl_matrix *J, gsl_vector *g, gsl_vector *dx); static int trust_rcond(double *rcond, void *vstate); static double trust_avratio(void *vstate); static void trust_trial_step(const gsl_vector * x, const gsl_vector * dx, gsl_vector * x_trial); static double trust_calc_rho(const gsl_vector * f, const gsl_vector * f_trial, const gsl_vector * g, const gsl_matrix * J, const gsl_vector * dx, trust_state_t * state); static int trust_eval_step(const gsl_vector * f, const gsl_vector * f_trial, const gsl_vector * g, const gsl_matrix * J, const gsl_vector * dx, double * rho, trust_state_t * state); static double trust_scaled_norm(const gsl_vector *D, const gsl_vector *a); static void * trust_alloc (const gsl_multifit_nlinear_parameters * params, const size_t n, const size_t p) { trust_state_t *state; state = calloc(1, sizeof(trust_state_t)); if (state == NULL) { GSL_ERROR_NULL ("failed to allocate lm state", GSL_ENOMEM); } state->diag = gsl_vector_alloc(p); if (state->diag == NULL) { GSL_ERROR_NULL ("failed to allocate space for diag", GSL_ENOMEM); } state->workp = gsl_vector_alloc(p); if (state->workp == NULL) { GSL_ERROR_NULL ("failed to allocate space for workp", GSL_ENOMEM); } state->workn = gsl_vector_alloc(n); if (state->workn == NULL) { GSL_ERROR_NULL ("failed to allocate space for workn", GSL_ENOMEM); } state->x_trial = gsl_vector_alloc(p); if (state->x_trial == NULL) { GSL_ERROR_NULL ("failed to allocate space for x_trial", GSL_ENOMEM); } state->f_trial = gsl_vector_alloc(n); if (state->f_trial == NULL) { GSL_ERROR_NULL ("failed to allocate space for f_trial", GSL_ENOMEM); } state->trs_state = (params->trs->alloc)(params, n, p); if (state->trs_state == NULL) { GSL_ERROR_NULL ("failed to allocate space for trs state", GSL_ENOMEM); } state->solver_state = (params->solver->alloc)(n, p); if (state->solver_state == NULL) { GSL_ERROR_NULL ("failed to allocate space for solver state", GSL_ENOMEM); } state->n = n; state->p = p; state->delta = 0.0; state->params = *params; return state; } static void trust_free(void *vstate) { trust_state_t *state = (trust_state_t *) vstate; const gsl_multifit_nlinear_parameters *params = &(state->params); if (state->diag) gsl_vector_free(state->diag); if (state->workp) gsl_vector_free(state->workp); if (state->workn) gsl_vector_free(state->workn); if (state->x_trial) gsl_vector_free(state->x_trial); if (state->f_trial) gsl_vector_free(state->f_trial); if (state->trs_state) (params->trs->free)(state->trs_state); if (state->solver_state) (params->solver->free)(state->solver_state); free(state); } /* trust_init() Initialize trust region solver Inputs: vstate - workspace swts - sqrt(W) vector fdf - user callback functions x - initial parameter values f - (output) f(x) vector J - (output) J(x) matrix g - (output) J(x)' f(x) vector Return: success/error */ static int trust_init(void *vstate, const gsl_vector *swts, gsl_multifit_nlinear_fdf *fdf, const gsl_vector *x, gsl_vector *f, gsl_matrix *J, gsl_vector *g) { int status; trust_state_t *state = (trust_state_t *) vstate; const gsl_multifit_nlinear_parameters *params = &(state->params); double Dx; /* evaluate function and Jacobian at x and apply weight transform */ status = gsl_multifit_nlinear_eval_f(fdf, x, swts, f); if (status) return status; status = gsl_multifit_nlinear_eval_df(x, f, swts, params->h_df, params->fdtype, fdf, J, state->workn); if (status) return status; /* compute g = J^T f */ gsl_blas_dgemv(CblasTrans, 1.0, J, f, 0.0, g); /* initialize diagonal scaling matrix D */ (params->scale->init)(J, state->diag); /* compute initial trust region radius */ Dx = trust_scaled_norm(state->diag, x); state->delta = 0.3 * GSL_MAX(1.0, Dx); /* initialize LM parameter */ status = nielsen_init(J, state->diag, &(state->mu), &(state->nu)); if (status) return status; /* initialize trust region method solver */ { gsl_multifit_nlinear_trust_state trust_state; trust_state.x = x; trust_state.f = f; trust_state.g = g; trust_state.J = J; trust_state.diag = state->diag; trust_state.sqrt_wts = swts; trust_state.mu = &(state->mu); trust_state.params = params; trust_state.solver_state = state->solver_state; trust_state.fdf = fdf; trust_state.avratio = &(state->avratio); status = (params->trs->init)(&trust_state, state->trs_state); if (status) return status; } /* set default parameters */ state->avratio = 0.0; return GSL_SUCCESS; } /* trust_iterate() This function performs 1 iteration of the trust region algorithm. It calls a user-specified method for computing the next step (LM or dogleg), then tests if the computed step is acceptable. Args: vstate - trust workspace swts - data weights (NULL if unweighted) fdf - function and Jacobian pointers x - on input, current parameter vector on output, new parameter vector x + dx f - on input, f(x) on output, f(x + dx) J - on input, J(x) on output, J(x + dx) g - on input, g(x) = J(x)' f(x) on output, g(x + dx) = J(x + dx)' f(x + dx) dx - (output only) parameter step vector Return: 1) GSL_SUCCESS if we found a step which reduces the cost function 2) GSL_ENOPROG if 15 successive attempts were to made to find a good step without success 3) If a scaling matrix D is used, inputs and outputs are set to the unscaled quantities (ie: J and g) */ static int trust_iterate(void *vstate, const gsl_vector *swts, gsl_multifit_nlinear_fdf *fdf, gsl_vector *x, gsl_vector *f, gsl_matrix *J, gsl_vector *g, gsl_vector *dx) { int status; trust_state_t *state = (trust_state_t *) vstate; const gsl_multifit_nlinear_parameters *params = &(state->params); const gsl_multifit_nlinear_trs *trs = params->trs; gsl_multifit_nlinear_trust_state trust_state; gsl_vector *x_trial = state->x_trial; /* trial x + dx */ gsl_vector *f_trial = state->f_trial; /* trial f(x + dx) */ gsl_vector *diag = state->diag; /* diag(D) */ double rho; /* ratio actual_reduction/predicted_reduction */ int foundstep = 0; /* found step dx */ int bad_steps = 0; /* consecutive rejected steps */ /* store all state parameters needed by low level methods */ trust_state.x = x; trust_state.f = f; trust_state.g = g; trust_state.J = J; trust_state.diag = state->diag; trust_state.sqrt_wts = swts; trust_state.mu = &(state->mu); trust_state.params = params; trust_state.solver_state = state->solver_state; trust_state.fdf = fdf; trust_state.avratio = &(state->avratio); /* initialize trust region subproblem with this Jacobian */ status = (trs->preloop)(&trust_state, state->trs_state); if (status) return status; /* loop until we find an acceptable step dx */ while (!foundstep) { /* calculate new step */ status = (trs->step)(&trust_state, state->delta, dx, state->trs_state); /* occasionally the iterative methods (ie: CG Steihaug) can fail to find a step, * so in this case skip rho calculation and count it as a rejected step */ if (status == GSL_SUCCESS) { /* compute x_trial = x + dx */ trust_trial_step(x, dx, x_trial); /* compute f_trial = f(x + dx) */ status = gsl_multifit_nlinear_eval_f(fdf, x_trial, swts, f_trial); if (status) return status; /* check if step should be accepted or rejected */ status = trust_eval_step(f, f_trial, g, J, dx, &rho, state); if (status == GSL_SUCCESS) foundstep = 1; } else { /* an iterative TRS method failed to find a step vector */ rho = -1.0; } /* * update trust region radius: if rho is large, * then the quadratic model is a good approximation * to the objective function, enlarge trust region. * If rho is small (or negative), the model function * is a poor approximation so decrease trust region. This * can happen even if the step is accepted. */ if (rho > 0.75) state->delta *= params->factor_up; else if (rho < 0.25) state->delta /= params->factor_down; if (foundstep) { /* step was accepted */ /* compute J <- J(x + dx) */ status = gsl_multifit_nlinear_eval_df(x_trial, f_trial, swts, params->h_df, params->fdtype, fdf, J, state->workn); if (status) return status; /* update x <- x + dx */ gsl_vector_memcpy(x, x_trial); /* update f <- f(x + dx) */ gsl_vector_memcpy(f, f_trial); /* compute new g = J^T f */ gsl_blas_dgemv(CblasTrans, 1.0, J, f, 0.0, g); /* update scaling matrix D */ (params->scale->update)(J, diag); /* step accepted, decrease LM parameter */ status = nielsen_accept(rho, &(state->mu), &(state->nu)); if (status) return status; bad_steps = 0; } else { /* step rejected, increase LM parameter */ status = nielsen_reject(&(state->mu), &(state->nu)); if (status) return status; if (++bad_steps > 15) { /* if more than 15 consecutive rejected steps, report no progress */ return GSL_ENOPROG; } } } return GSL_SUCCESS; } /* trust_iterate() */ static int trust_rcond(double *rcond, void *vstate) { int status; trust_state_t *state = (trust_state_t *) vstate; const gsl_multifit_nlinear_parameters *params = &(state->params); status = (params->solver->rcond)(rcond, state->solver_state); return status; } static double trust_avratio(void *vstate) { trust_state_t *state = (trust_state_t *) vstate; return state->avratio; } /* compute x_trial = x + dx */ static void trust_trial_step(const gsl_vector * x, const gsl_vector * dx, gsl_vector * x_trial) { size_t i, N = x->size; for (i = 0; i < N; i++) { double dxi = gsl_vector_get (dx, i); double xi = gsl_vector_get (x, i); gsl_vector_set (x_trial, i, xi + dxi); } } /* trust_calc_rho() Calculate ratio of actual reduction to predicted reduction. rho = actual_reduction / predicted_reduction actual_reduction = 1 - ( ||f+|| / ||f|| )^2 predicted_reduction = -2 g^T dx / ||f||^2 - ( ||J*dx|| / ||f|| )^2 = -2 fhat . beta - ||beta||^2 where: beta = J*dx / ||f|| Inputs: f - f(x) f_trial - f(x + dx) g - gradient J^T f J - Jacobian dx - proposed step, size p state - workspace Return: rho = actual_reduction / predicted_reduction If actual_reduction is < 0, return rho = -1 */ static double trust_calc_rho(const gsl_vector * f, const gsl_vector * f_trial, const gsl_vector * g, const gsl_matrix * J, const gsl_vector * dx, trust_state_t * state) { int status; const gsl_multifit_nlinear_parameters *params = &(state->params); const gsl_multifit_nlinear_trs *trs = params->trs; const double normf = gsl_blas_dnrm2(f); const double normf_trial = gsl_blas_dnrm2(f_trial); gsl_multifit_nlinear_trust_state trust_state; double rho; double actual_reduction; double pred_reduction; double u; /* if ||f(x+dx)|| > ||f(x)|| reject step immediately */ if (normf_trial >= normf) return -1.0; trust_state.x = NULL; trust_state.f = f; trust_state.g = g; trust_state.J = J; trust_state.diag = state->diag; trust_state.sqrt_wts = NULL; trust_state.mu = &(state->mu); trust_state.params = params; trust_state.solver_state = state->solver_state; trust_state.fdf = NULL; trust_state.avratio = &(state->avratio); /* compute numerator of rho (actual reduction) */ u = normf_trial / normf; actual_reduction = 1.0 - u*u; /* * compute denominator of rho (predicted reduction); this is calculated * inside each trust region subproblem, since it depends on the local * model used, which can vary according to each TRS */ status = (trs->preduction)(&trust_state, dx, &pred_reduction, state->trs_state); if (status) return -1.0; if (pred_reduction > 0.0) rho = actual_reduction / pred_reduction; else rho = -1.0; return rho; } /* trust_eval_step() Evaluate proposed step to determine if it should be accepted or rejected */ static int trust_eval_step(const gsl_vector * f, const gsl_vector * f_trial, const gsl_vector * g, const gsl_matrix * J, const gsl_vector * dx, double * rho, trust_state_t * state) { int status = GSL_SUCCESS; const gsl_multifit_nlinear_parameters *params = &(state->params); if (params->trs == gsl_multifit_nlinear_trs_lmaccel) { /* reject step if acceleration is too large compared to velocity */ if (state->avratio > params->avmax) status = GSL_FAILURE; } /* compute rho */ *rho = trust_calc_rho(f, f_trial, g, J, dx, state); if (*rho <= 0.0) status = GSL_FAILURE; return status; } /* compute || diag(D) a || */ static double trust_scaled_norm(const gsl_vector *D, const gsl_vector *a) { const size_t n = a->size; double e2 = 0.0; size_t i; for (i = 0; i < n; ++i) { double Di = gsl_vector_get(D, i); double ai = gsl_vector_get(a, i); double u = Di * ai; e2 += u * u; } return sqrt (e2); } static const gsl_multifit_nlinear_type trust_type = { "trust-region", trust_alloc, trust_init, trust_iterate, trust_rcond, trust_avratio, trust_free }; const gsl_multifit_nlinear_type *gsl_multifit_nlinear_trust = &trust_type; gsl/multifit_nlinear/test_kowalik.c0000644000175000017500000001021213536674414016137 0ustar eddedd#define kowalik_N 11 #define kowalik_P 4 static double kowalik_x0[kowalik_P] = { 0.25, 0.39, 0.415, 0.39 }; static double kowalik_epsrel = 1.0e-6; static double kowalik_Y[kowalik_N] = { 0.1957, 0.1947, 0.1735, 0.1600, 0.0844, 0.0627, 0.0456, 0.0342, 0.0323, 0.0235, 0.0246 }; static double kowalik_U[kowalik_N] = { 4.0000, 2.0000, 1.0000, 0.5000, 0.2500, 0.1670, 0.1250, 0.1000, 0.0833, 0.0714, 0.0625 }; static void kowalik_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; gsl_vector_const_view v = gsl_vector_const_view_array(x, kowalik_P); const double norm = gsl_blas_dnrm2(&v.vector); const double sumsq_exact1 = 3.075056038492370e-04; double kowalik_x1[kowalik_P] = { 1.928069345723978e-01, 1.912823290344599e-01, 1.230565070690708e-01, 1.360623308065148e-01 }; const double sumsq_exact2 = 0.00102734304869549252; double kowalik_x2[kowalik_P] = { 0.0, /* inf */ -14.0758834005984603, 0.0, /* -inf */ 0.0 }; /* -inf */ const double *kowalik_x; double sumsq_exact; kowalik_x2[0] = GSL_NAN; kowalik_x2[2] = GSL_NAN; kowalik_x2[3] = GSL_NAN; if (norm < 10.0) { kowalik_x = kowalik_x1; sumsq_exact = sumsq_exact1; } else { kowalik_x = kowalik_x2; sumsq_exact = sumsq_exact2; } gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < kowalik_P; ++i) { if (!gsl_finite(kowalik_x[i])) continue; gsl_test_rel(x[i], kowalik_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int kowalik_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); size_t i; for (i = 0; i < kowalik_N; ++i) { double yi = kowalik_Y[i]; double ui = kowalik_U[i]; double fi = yi - (x1*ui*(ui+x2)) / (x4 + ui*(ui + x3)); gsl_vector_set(f, i, fi); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int kowalik_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); size_t i; for (i = 0; i < kowalik_N; ++i) { double ui = kowalik_U[i]; double term1 = ui*(ui + x2); double term2 = ui*(ui + x3) + x4; gsl_matrix_set(J, i, 0, -term1 / term2); gsl_matrix_set(J, i, 1, -ui*x1/term2); gsl_matrix_set(J, i, 2, ui*term1*x1 / (term2*term2)); gsl_matrix_set(J, i, 3, term1*x1 / (term2*term2)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int kowalik_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double x4 = gsl_vector_get(x, 3); double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); double v3 = gsl_vector_get(v, 2); double v4 = gsl_vector_get(v, 3); size_t i; for (i = 0; i < kowalik_N; ++i) { double ui = kowalik_U[i]; double term2 = ui*(ui + x3) + x4; double term3 = ui*ui*v1 - ui*v3*x1 - v4*x1 + ui*v1*x3 + v1*x4; double term4 = ui*ui*(v3-v2) + v4*x2 + ui*(v4 + v3*x2 - v2*x3) - v2*x4; gsl_vector_set(fvv, i, 2.0*ui*term3*term4 / pow(term2, 3.0)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf kowalik_func = { kowalik_f, kowalik_df, kowalik_fvv, kowalik_N, kowalik_P, NULL, 0, 0, 0 }; static test_fdf_problem kowalik_problem = { "kowalik", kowalik_x0, NULL, NULL, &kowalik_epsrel, &kowalik_checksol, &kowalik_func }; gsl/multifit_nlinear/test_helical.c0000644000175000017500000000522313536674414016105 0ustar eddedd#define helical_N 3 #define helical_P 3 static double helical_x0[helical_P] = { -1.0, 0.0, 0.0 }; static double helical_x[helical_P] = { 1.0, 0.0, 0.0 }; static double helical_epsrel = 1.0e-12; static void helical_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 0.0; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < helical_P; ++i) { gsl_test_rel(x[i], helical_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int helical_f (const gsl_vector * x, void *params, gsl_vector * f) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double theta = (x1 >= 0.0) ? 0.0 : 5.0; double nx = gsl_hypot(x1, x2); gsl_vector_set(f, 0, 10.0 * (x3 - 5.0/M_PI*atan(x2 / x1) - theta)); gsl_vector_set(f, 1, 10.0*(nx - 1.0)); gsl_vector_set(f, 2, x3); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int helical_df (const gsl_vector * x, void *params, gsl_matrix * J) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double nx = gsl_hypot(x1, x2); double nx_sq = nx * nx; double term1 = 50.0 / (M_PI * nx_sq); double term2 = 10.0 / nx; gsl_matrix_set(J, 0, 0, term1*x2); gsl_matrix_set(J, 0, 1, -term1*x1); gsl_matrix_set(J, 0, 2, 10.0); gsl_matrix_set(J, 1, 0, term2*x1); gsl_matrix_set(J, 1, 1, term2*x2); gsl_matrix_set(J, 1, 2, 0.0); gsl_matrix_set(J, 2, 0, 0.0); gsl_matrix_set(J, 2, 1, 0.0); gsl_matrix_set(J, 2, 2, 1.0); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int helical_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); double term1 = v2*x1 - v1*x2; double term2 = v1*x1 + v2*x2; double term3 = x1*x1 + x2*x2; gsl_vector_set(fvv, 0, 100.0 / M_PI * (term1 / term3) * (term2 / term3)); gsl_vector_set(fvv, 1, 10.0 * (term1 * term1) / pow(term3, 1.5)); gsl_vector_set(fvv, 2, 0.0); (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf helical_func = { helical_f, helical_df, helical_fvv, helical_N, helical_P, NULL, 0, 0, 0 }; static test_fdf_problem helical_problem = { "helical", helical_x0, NULL, NULL, &helical_epsrel, &helical_checksol, &helical_func }; gsl/multifit_nlinear/test_rat42.c0000644000175000017500000000657613536674414015454 0ustar eddedd#define rat42_N 9 #define rat42_P 3 static double rat42_x0a[rat42_P] = { 100.0, 1.0, 0.1 }; static double rat42_x0b[rat42_P] = { 75.0, 2.5, 0.07 }; static double rat42_epsrel = 1.0e-7; static double rat42_sigma[rat42_P] = { 1.7340283401E+00, 8.8295217536E-02, 3.4465663377E-03 }; static double rat42_X[rat42_N] = { 9.0, 14.0, 21.0, 28.0, 42.0, 57.0, 63.0, 70.0, 79.0 }; static double rat42_F[rat42_N] = { 8.930, 10.800, 18.590, 22.330, 39.350, 56.110, 61.730, 64.620, 67.080 }; static void rat42_checksol(const double x[], const double sumsq, const double epsrel, const char *sname, const char *pname) { size_t i; const double sumsq_exact = 8.0565229338E+00; const double rat42_x[rat42_P] = { 7.2462237576E+01, 2.6180768402E+00, 6.7359200066E-02 }; gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq", sname, pname); for (i = 0; i < rat42_P; ++i) { gsl_test_rel(x[i], rat42_x[i], epsrel, "%s/%s i=%zu", sname, pname, i); } } static int rat42_f (const gsl_vector * x, void *params, gsl_vector * f) { double b[rat42_P]; size_t i; for (i = 0; i < rat42_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < rat42_N; i++) { double xi = rat42_X[i]; double yi = b[0] / (1.0 + exp(b[1] - b[2]*xi)); gsl_vector_set (f, i, yi - rat42_F[i]); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int rat42_df (const gsl_vector * x, void *params, gsl_matrix * df) { double b[rat42_P]; size_t i; for (i = 0; i < rat42_P; i++) { b[i] = gsl_vector_get(x, i); } for (i = 0; i < rat42_N; i++) { double xi = rat42_X[i]; double term1 = exp(b[1] - b[2]*xi); double term2 = 1.0 + term1; gsl_matrix_set (df, i, 0, 1.0 / term2); gsl_matrix_set (df, i, 1, -b[0] * term1 / (term2 * term2)); gsl_matrix_set (df, i, 2, b[0] * term1 * xi / (term2 * term2)); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static int rat42_fvv (const gsl_vector * x, const gsl_vector * v, void *params, gsl_vector * fvv) { double x1 = gsl_vector_get(x, 0); double x2 = gsl_vector_get(x, 1); double x3 = gsl_vector_get(x, 2); double v1 = gsl_vector_get(v, 0); double v2 = gsl_vector_get(v, 1); double v3 = gsl_vector_get(v, 2); size_t i; for (i = 0; i < rat42_N; i++) { double ti = rat42_X[i]; double term1 = exp(x2); double term2 = exp(ti * x3); gsl_vector_set(fvv, i, -pow(term1 + term2, -3.0) * term1 * term2 * (v2 - ti*v3) * (term1*(2*v1 - v2*x1 + ti*v3*x1) + term2*(2*v1 + x1*(v2 - ti*v3)))); } (void)params; /* avoid unused parameter warning */ return GSL_SUCCESS; } static gsl_multifit_nlinear_fdf rat42_func = { rat42_f, rat42_df, rat42_fvv, rat42_N, rat42_P, NULL, 0, 0, 0 }; static test_fdf_problem rat42a_problem = { "nist-rat42a", rat42_x0a, NULL, rat42_sigma, &rat42_epsrel, &rat42_checksol, &rat42_func }; static test_fdf_problem rat42b_problem = { "nist-rat42b", rat42_x0b, NULL, rat42_sigma, &rat42_epsrel, &rat42_checksol, &rat42_func }; gsl/gsl-config.in0000755000175000017500000000233313536674414012316 0ustar eddedd#! /bin/sh prefix=@prefix@ exec_prefix=@exec_prefix@ includedir=@includedir@ usage() { cat <